Role: Level Designer
Engine: Unreal Engine 4
Genre: First Person Shooter
Development Time: 4 months/2014-2015
Game Type: Multiplayer
Team size: 8 developers
Luft is a highflying multiplayer First Person Shooter (FPS) for Personal Computer (PC), with a Capture the Flag game mode. In Luft, players take the role of balloon-people engaged in friendly competition, fighting in and around a classical Swiss village suspended in the clouds using a variety of unique weaponry. A major weapon is the Luftkanon, an air gun that blows blasts of air out in front of it. Players use this blast to push others off the map. They can also use it to launch themselves into the air, and have some degree of air control while midair. This gun interacts with other weapons as well, such as the ability to push balloon bombs placed on the map into other players.
Highflying Fun: to make sure every element of the game contributes to its floaty, enjoyable experience
Lighthearted: to create a cheerful game that abstracts its violence in a cartoonish world filled with buoyant mechanics/interactions
Accessible: to develop a game easy to be picked up for a large range of ages
During Luft, my main task was to design and build one of the game’s maps (“Cloud City”). From designing it on paper to placing meshes, lights and final visual/gameplay tunes, I worked with other team members to bring this level to shippable quality. On top of that, I was part of the tiger-team responsible for implementing the flag functionality. I used Blueprint to make the flag work as intended and created particles for it. I also did other tasks that were related to Blueprint and particles.
Create whimsical, light-hearted gameplay, where players feel the joy of balloon combat contest
Incentivize players to use the game main gun (Luftkanon), focusing on open areas and opportunities to blast enemies away or push oneself into the air
Deliver unique and beautiful aesthetics, based on the concept of traditional Swiss buildings suspended by hot air balloons
In order to incorporate the “floaty” aspect of Luft into gameplay, I added a lot of verticality to the map, along with many situations where players can either use the Luftkanon or jump pads to change between different heights (bounciness). This way, players are constantly jumping around, as if the balloon-people were floating between buildings.
Constant movement flow:
Verticality and numerous jump pads also add to the multiple paths aspect of Luft. The map offers many routes keeping players in constant movement. Every area presents different path choices, maintaining the game flow as well as allowing players to trick enemies, quickly changing paths or luring them into traps.
Multiple-entrance flag room:
Each base’s flag room has five entrances, preventing flag defenders from protecting theirs completely. As part of the feedback, testers said it was too easy to defend the base/flag, so I added more entrances and removed any spot where a player could sit and watch all the entrances. On the other hand, to empower defenders and balance the map change, I added more health and ammo pickups
This map went through a complicated development process, as the team had enough time to make just one level. However, after all mechanics implemented, the first map ended up not fully exploring our main weapon, the Luftkanon. The leads then decided to also take “Cloud City” to shippable quality. I designed “Cloud City” during pre-production and it had already proven its emphasis on the highflying gameplay.
I restarted working on that map, incorporating previous feedback and performing more playtests. I addressed known issues such as long lines of sight, using the visual theme: balloons broke long lines of sight, while keeping the openness of the area, important aspect for using the Luftkanon. After all the gameplay adjustments, using a level streaming-based approach, team worked together on the visuals to take “Cloud City” to final quality. As part of that, I was responsible for mesh placement, clutter, and lighting.
In the tiger-team responsible for the flag, my job was to use the base functionality implemented by the programmers to create the flag’s fully functional behavior. For that, I used Unreal 4 Blueprint system and their network properties. I tweaked features such as flag’s respawn under all the different circumstances and capturing/scoring points, as well as, implemented part of the announcing system. Then, the artists handled me the flag’s meshes and materials, which I incorporated in the Flag Blueprint.
My first step to work with the flags was to create a “Box world”, a map where I could test my blueprints without interfering the actual maps other level designers were working on.
Then, I started working on the flag attachment to the player. During that process, I ran into this issue where, when attached to character, the flag would not look visually correct, going through his belly. In order to address that, I studied Unreal’s rigging/skeleton system, and created a new bone (“FlagSocket”) into the character’s Skeletal Mesh, to which I could attach the flag, making it look right.
Attaching flag to player: "Attach Actor to Component" plugs the flag right into the character’s skeletal mesh at “FlagSocket”. The next nodes rotate and shift the flag’s mesh by an offset fix its orientation and look right in the back of the balloon-buddy
As part of flag functionalities, I also worked on making the flag drop properly and then, respawning it in the team base.
Dropping the flag: These nodes compound the event related to dropping the flag. Upon the carrier’s death, the system automatically detaches it from the character, keeping its original position. The flag location and the carrier’s rotation are used to adjust the flag transform
Respawning flag at the base: Once a player drops the flag, whether its timer to respawn reaches zero or an opposing team character touches it, the flag goes back to its original location, at the base. The logic for it actually destroys the flag actor and spawns another flag at original base (“ReturnToBase” event - “FlagBase Location” is a reference for the flag base itself).
In more details: the flag base uses its mesh as a starting point for new flag’s the spawn location: an offset is applied to keep the flag properly located, and the base mesh’s rotation guarantees the proper orientation. After spawning the new actor, the next nodes are responsible for setting its properties right.
Another feature of Luft was the announcer: the game has feedback with audio and text for every important event related to the flags. I implemented the blueprint responsible playing the announcer’s audio messages. This blueprint also used a system created by the assistant lead programmer to display HUD text messages
Finding the map announcer: after creating that blueprint actor, I added it to both maps and established its communication with flag blueprints. This visual code runs into both Flag and Flag Goal blueprints. It guarantees that all the components responsible for informing players about flag status are able to do so via the Announcer.
Example of announcing message plugged into the the system: after triggering the score event for the right team, the Flag Goal blueprint requests the suitable announcement.
Finally, playtest revealed that flags needed to outstand more in gameplay. In consequence, using Unreal’s Cascade, I created particles that orbit around them while standing as well as leave a trail when in movement, indicating the direction that a flag carrier goes.
WHAT WENT WELL
Found the fun early
Unified and cohesive vision
Positive team culture
Proudly completed two levels
WHAT WENT WRONG
Switching engines midway through development
Losing a programmer
Lighting in Unreal and in general
The value of modular assets
The importance of morale boosters