TYPE: Personal Project


  • Designed the layouts of the map. Modeled the entire level in UE4.

  • Scripted AI Behavior of the enemies using AI Behavior Trees and UE4's EQS. Created a custom system that incorporates different behaviors such as patrol, attack and run away from the player.

  • Scripted all the enemy encounters in the level. Used diverse techniques and triggers events to create encounters that are not repetitive and constantly surprise the player.

  • Scripted player's abilities and inventory system

  • Scripted camera security system. If the player is spotted, enemies are summoned from a specific point.

SOFTWARE USED: UE4, Blueprints, Photoshop


  • Bioshock 1&2: Player mechanics, aesthetic, gameplay and encounters

  • Wolfenstein New Colossus: Loot placement, scale

"The Zoo" is a Bioshock-inspired first-person-shooter level. It is a project that focuses on technical skills. The main focus of this project was to become comfortable with scripting enemy AI and using this system to create interesting enemy encounters.  For that reason, I looked at games like Bioshock 1&2. In my mind, these two games are very resourceful with how they stage the enemy encounters. They do a great job in utilizing each level's space and geometry to the maximum in order to create unexpected scenarios and remind the player that they should always be on their toes. This element, combined with the very meticulous use of light and sound, distinguish these two games in terms of the design of their enemy encounters. Having this as a starting point, I wanted to create a level that would take place inside this world. Based on my experience of the game, a space like a underwater zoo seemed fitting. Such a setting provided all those elements to create a narrative around this level, something very important to better define the nature of each space, as well as provide this layer of environmental storytelling that is so evident in Bioshock. 



In the design of the layout, I turned to original Bioshock maps to emulate specific design decisions and practices. I knew that because of reasons related to scope, I would have to make a more condensed version of the examples I was looking at. However, I managed to isolate specific design elements that I used in my own design. More specifically:

  • Connected rooms: Most Bioshock levels tend to feature a sequence of enclosed spaces connected with each other. The scale of those spaces varies based on many factors such as gameplay, potential cinematic events, story progression and intended emotional impact.

  • Revisiting areas: In many occasions, there are specific areas that players visit more than once. These are central areas that function as junctions inside a level. What is important is that the player enters these areas from different points and each time something different happens. Although these areas are "reused", they do not result in boring  and repetitive gameplay. As such, I made sure to design a layout that could make some areas reusable without forcing the player to do extensive backtracking.

  • Believability: In general, many spaces in Bioshock games are realistic, in the sense that they make sense in the context of the game. These are spaces that are designed to resemble parts of a city with specific functions, routines and events. This was crucial for me to help me define a specific setting and the narrative behind it.


The final layout is a structure that consists of 7 discreet spaces, each connecting with each other. The main idea is that the player initially understands the zoo as a visitor, entering from the main entrance. As they progress through the level, they gradually realize that there are certain areas that are not intended for the public, something that  enhances this sense of mystery many Bioshock levels have. The level blends exploration, combat and environmental storytelling through its spaces, as players encounter enemies, avoid security cameras, look for notes and pieces of lore and try to find the exit in this zoo that nothing is how it looks!

PROCESS: gameplay and thematic integration

Step 1: Engagement curve and relationship with narrative and gameplay.

Narrative Context

The main idea for this level was to create a zoo inside the city of Rapture. Το get a better understanding of how I should design the individual spaces of the level, it was important to construct a specific narrative context of what was happening inside this zoo! As in many levels in Bioshock 1&2, many spaces get their unique identity not only from their intended function but from the events that were happening there before. 

Having this as a starting point, I knew that I wanted this level to have a sense of mystery and that nothing is as it seems. In this line of thinking, I started thinking of ways to incorporate different hidden areas that would be slowly introduced to the player. As such, the idea of a secret lab that would function as a plasmid testing site between the zoo's walls was very compelling because it incorporated many elements I had found in Bioshock games. 


My first step was to think of all the set pieces I wanted to occur in the level and the impact they would have to the player experience. The main feeling I wanted to replicate is a sense of mystery and the idea that nothing is as it seems. This is a feeling I noticed that is very closely tied to the what Bioshock provides to players. I consider this to be one of the most genuine characteristics of a game like Bioshock. 

I wanted to convey this feeling using three primary tools:

  • Enemy encounters: This is the meat and bones of the entire project. I wanted to use enemy encounters to continuously subvert player expectations in order to keep them constantly on their toes.

  • Contrast in scale: By putting next to each other spaces and rooms that vary in space, my intention was to convey to the player a sense of uneasiness

  • Scripted events: In order to create a more dynamic environment that conveys the idea that holds more secrets than it reveals, I also considered incorporating interactive buttons, cameras and scripted events that catch player's attention.

The next step was to break down the events I wanted to happen to the level and associate them with their respective spaces to come up with a basic structure.


Step 2: Reference Moodboard and Level Design decisions

I started collecting reference images and concept art that depicted various spaces and layouts of zoos, sci-fi labs as well as certain techniques evident in Bioshock games. From the beginning, I also had in mind that Bioshock games have a very distinct architectural identity. The 1920s - 1930s Art Nouveau style is combined with a sci-fi aesthetic and this is something I wanted to convey even from the whitebox stage.

After completing this collection, I gathered the ones that best depicted my intentions and I placed them in a sequential order. This process also informed the engagement curve showed above, as specific events changed place in the level, or became more specific after being accompanied with a more concrete idea of the space inside which thy would happen.  One example of this process is the room of the aquarium. Initially, it was imagined as a series of corridors, inside which the player would encounter 2 waves of enemies, coming from different angles. After placing the aquarium in the context of the other spaces as well, I decided that it would be a better idea if the aquarium held the secret entrance to the labs instead. This way, it would have  a more functional and discrete role in the level.

The final outcome of this process is the diagram below, which then helped to produce the final layout.

Layout Diagrams and Reference.jpg



Total amount of enemies: 4

Waves: 2

The first encounter includes 2 waves, each wave consisting of 2 enemies. The primary goal of this encounter is to remind the player that they should constantly be on high alert. For this reason, the first 2 enemies are first presented as inanimate exhibitions. Once the player overlaps a trigger box, the exhibitions become alive and attack the player. After the player kills them, a second wave is spawned. The spawning point of the enemies is important, as it serves a secondary goal: it indicates were the player should go next, adding a layer of conveyance to the encounter.

ezgif.com-gif-maker (1).gif



  • Each "wave" consists of a predefined amount of enemies, organized in an Array. The moment the player overlaps a trigger box, the first wave is activated. Every time an enemy is killed, their reference is removed from the Array of the corresponding Wave. 

  • The Trigger Box Script constantly checks the Length of each current Array. The moment the Length of the Array equals to 0 (meaning that there are no more enemies in the current wave), the next wave is activated.

  • The Trigger Box Script contains the Function "Activate Second Wave" and it is activated the moment the there are no more enemies in the first wave.


Box Overlap Steup 1.PNG
Activate Second Wave.PNG




  • The AI Behavior Tree is organized in a way that can function both for triggered encounter scenarios as well as for patrolling scenarios.

  • The top decorator checks whether the player has overlapped the assigned trigger box. If this value is true, the next step is to check whether the enemy can see the player. If they cannot, they begin their patrol behavior, going from one designated patrol point to the next. If they can see the player, they start chasing them

  • Once they are close enough to the player, they perform the "Melee Attack" Animation, dealing damage to the player




Total amount of enemies: 0

Waves: 0

This encounter does not include an enemy per se. The player has just discovered a secret entrance and I wanted to create an event that would enhance the tension, without interrupting player's exploration. Scripting an AI that would behaving different than the rest adds a layer of complexity and diversity to what the player would expect from now on. As such, I wanted to replicate a behavior I have seen in Bioshock games, where an enemy is presented but does not attack; instead they run away from the player. When the player approaches the AI's position, the AI has already disappeared. The fact that this event takes place in a dark corridor adds up to the feeling of tension. Maintaining a balance between the unexpected and the jumpscare, this encounter functions both as a foreshadowing as well as a means to keep the players on their toes.

ezgif.com-gif-maker (1).gif



  • This encounter utilizes UE4's EQS, which allows AIs to have some form of environmental awareness. More precisely, this AI has its own Behavior Tree that runs two specific EQS Tasks. One where checks if the AI sees the player and another one that finds a point where it is not visible from the player.

  • After the AI sees the player, the EQS creates a grid of different points close to the AI. Using the "Hide from Player" custom EQS Task, the AI calculates which point on the grid is the one that is farthest from the player. 

  • When the AI finds this point, it moves to it through the "Move to" task in its behavior tree.

  • In order to make the AI disappear, I placed a trigger box that destroys the actor upon overlap, creating this effect that the AI disappeared.



Total amount of enemies: 9

Waves: 2

This encounter includes 2 waves of enemies as well. The primary goal of this encounter is to create an experience of an ambush, and make the player feel unprepared, as if they have underestimated the situation. At a first glance, the player has the higher ground and the amount of enemies is not at all intimidating. However, when these two enemies are killed, all the other platforms are activated as well, making the player feel  as if they are in snake pit. Now they have to think on their feet on how to navigate the space and defeat the remaining enemies!

ezgif.com-gif-maker (1).gif



  • The structure of this encounter is very close to the first one. However there are two differences: In this occasion, there is no trigger volume. Instead, the encounter is activated based on a Custom Event, when the player activates a Button. In addition, the "signal" sent by the player not only activates the enemies, but the platforms themselves as well.

  • The Player presses the button. The first two platforms are activated.

  • Inside the Button Script, there is a function that constantly checks the length of the first Enemy Array (First Wave). When the array is empty, this means that the first two enemies are dead and the rest of the platforms and enemies are activated


Elevate Platforms.PNG
Initiate second elevation.PNG


Total amount of enemies: 3

Waves: 1

For this encounter I wanted to replicate a technique I have myself noticed in Bioshock games. Sound and lighting are used to introduce enemies to the player and give them the heads up that a threat i close. This type of "foreshadowing" comes in contrast with the previous encounter which catches the player completely off guard, resulting in a more varied experience. Once the player overlaps a trigger box, a ledge collapses, providing a sound cue that directs player's attention. At the same time, three enemies are entering an elevated area. In this way, the player just sees their shadows, something that builds up the tension for the final encounter of the level.

ezgif.com-gif-maker (2).gif



  • The structure of this encounter is close to the first one, as well. The main difference is that the spawned enemies start patrolling a specific area instead of immediately attacking the player. I also added a scripted event that would produce sound to catch the players attention.


  • More specifically, when the player overlaps a trigger box, a marquee ledge falls down, creating a sound. This sound is intended make the players turn their head at the specific place. Right after that, the enemies are pawned and got to a point where the player would only see their shadows. 


Key Takeaways
  • Designing spaces and behavior together: This was the main focus of this project, both for its technical as well the design challenges. Simultaneously iterating on the design of the spaces and the behavior of the enemies is something I had little experience on and I am happy to say that now I can understand this interplay pore holistically. Creating spaces without the intended gameplay can only go so far, as adding enemy behavior is itself a tool to create more complex levels, and consequently, experiences
  • Being resourceful: The other challenge I wanted to tackle was to try to use simple techniques with more than one ways. I scripted 2 different enemy AI behaviors and I tried to add them in different scenarios by changing other variables each time. In some occasions, sound played an important role while (encounter 4) in others lighting and scripted animations added the intended variety (encounter 3). As a result, I created different scenarios with not so many tools. This was a big lesson for me, as it taught me that not everything has to be overly complicated to target a specific player experience.
Technical Skills honed:
  • Enemy AI: For this project, I scripted the entire enemy behavior. I created two different AIs, an enemy spawning system and specific trigger events that activated said enemies. To be precise, one enemy class was the basic enemy type the player would encounter. This AI had the functionality of chasing the enemy, attacking, patrolling and spawning in specific occasions. The other AI had the functionality of running away from the player, by implementing the EQS system. Being able to create a robust and versatile AI system that would help me script different encounters was the main focus of this project. 
  • Camera Security System: This system was supplementary to the system mentioned above. In specific parts of the level, I recreated the camera system featured in Bioshock games; A rotating camera that whenever the player entered their field of view, enemies would spawn form a designated location. I was very happy to manage to connect this system with the spawner the result is a functionality that can be replicated, even for more diverse scenarios.
  • Checkpoint System: I scripted a checkpoint system that would store the coordinates of the player whenever they would come close to specific devices in the level. If the player died, the game would start again, spawining the player at the coordinates stored.