CONCEPT
Carnage at Castle Moon is a Base Defence FPS on the dark side of the moon. The game's arenas and quick, snappy movement are inspired by Quake III, with dash and float abilities mirroring modern FPS games.
![highscore.png](https://static.wixstatic.com/media/cbda42_335534f4bffa4d14991b56a7eef4bc99~mv2.png/v1/fill/w_199,h_354,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/highscore.png)
![protect.png](https://static.wixstatic.com/media/cbda42_96b236b54fad4cdfa842d79e31f7d3e1~mv2.png/v1/fill/w_437,h_246,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/protect.png)
![shoot.png](https://static.wixstatic.com/media/cbda42_023c81781bf0485b9f2b9c1abea025a6~mv2.png/v1/fill/w_329,h_185,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/shoot.png)
KILL THE INVADERS
PROTECT THE CASTLE & YOURSELF
GET A NEW HIGHSCORE
GOAL
MY CONTRIBUTION
CLICK A BOX TO JUMP TO THAT SECTION
LEVEL DESIGN
As a level designer, I worked in close collaboration with the environmental artist from the initial ideation to the architecture pass and polish, as well as all steps in between.
LEVEL DESIGN GOALS
The following three goals were kept in mind for each combat space that was designed, as well as the courtyard in-between. These were kept in mind when creating the paper prototype, but got easier to adhere to as the level became playable, three-dimensional space in Unreal Engine.
VERTICALITY
Each of the three combat spaces should feel distinct not only visually, but based on which verticality they are built on. The player should be able to use the verticality against the enemies.
FREEDOM OF MOVEMENT
Any player should be able to traverse the environment without an issue, but skilled players can use their movement toolset to take more efficient paths between combat spaces.
PLAYER ADVANTAGE
There should be paths that only the player can take through both the courtyard and the three combat spaces. The player should be able to position themselves in a favourable position before enemies enter the combat space.
LEVEL DESIGN PROCESS
My six-step level design process. I go into detail for each step throughout the level design section of this portfolio piece.
CLICK A SECTION TO JUMP THERE
1. IDEATION
Level Design Moodboards were a large part of the ideation process. This step included researching architecture, relevant games, and building upon our in-house concept art.
COURTYARD
![Courtyard.png](https://static.wixstatic.com/media/cbda42_fed9746dcbce41908205289960d6e2eb~mv2.png/v1/fill/w_978,h_400,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/Courtyard.png)
LIBRARY
![Library.png](https://static.wixstatic.com/media/cbda42_fac4c5b41b64417295e804ff96e9cf9d~mv2.png/v1/fill/w_978,h_353,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/Library.png)
THRONE ROOM
![ThroneRoom.png](https://static.wixstatic.com/media/cbda42_7094217f76eb450e9d22097d681cfdae~mv2.png/v1/fill/w_981,h_407,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/ThroneRoom.png)
GARDEN
![Garden.png](https://static.wixstatic.com/media/cbda42_de578f4fe8b44533a075413df453116a~mv2.png/v1/fill/w_981,h_566,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/Garden.png)
2. PAPER PROTOTYPE
The paper prototypes were made digitally using Miro. This allowed for efficient tweaks and measurements. It is also easier to avoid the page becoming cluttered with information.
CASTLE MOON
![castle.png](https://static.wixstatic.com/media/cbda42_d35dc5cb53094a8eb37061b05185b22a~mv2.png/v1/fill/w_684,h_638,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/castle.png)
![legend.png](https://static.wixstatic.com/media/cbda42_8dba95f5584e4294ab18047324fd8907~mv2.png/v1/fill/w_128,h_638,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/legend.png)
The first paper prototype of Castle Moon encompasses the entire playable space, i.e., the level. This gave us a foundation of which areas exist, which paths the player and enemy can take, and the size of the level. The treasury was cut in favour of a garden, in order to provide more environmental variety.
THRONE ROOM
![throneroom.png](https://static.wixstatic.com/media/cbda42_50903ebbfd4f4ae6bd705f7564bfa436~mv2.png/v1/fill/w_456,h_680,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/throneroom.png)
The northernmost area. Doors connect to each other area. A zipline would connect to the courtyard, but this was scrapped in favour of improved player movement.
COURTYARD
![courtyard.png](https://static.wixstatic.com/media/cbda42_337d720e675e4208ba46640a35b10f75~mv2.png/v1/fill/w_424,h_680,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/courtyard.png)
The southernmost area. Doors connect to each other area. Two catapults would take the player to faraway locations. This mechanic eventually became the launcher pads that are present in the released game.
LIBRARY
![library.png](https://static.wixstatic.com/media/cbda42_f7b38bae515541eaab852de412276b7d~mv2.png/v1/fill/w_974,h_316,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/library.png)
The Library is split into three vertical floors. I therefore sliced each floor, with F1 being ground level, F2 connecting to the central walkway, and F3 being the top floor, with a shortcut to the Throne Room. A zipline would connect to the Throne Room.
3. BLOCKOUT
The blockout was created using a Level Design Kit (LDK) provided by the environmental artist. Assets were added to the LDK in regular intervals, allowing the blockout to be built simultaneously, avoiding a bottleneck.
LEVEL DESIGN KIT
![LDK.png](https://static.wixstatic.com/media/cbda42_ee5e2087026841f9a23ce281797e3b64~mv2.png/v1/fill/w_982,h_553,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/LDK.png)
LEVEL BLOCKOUT
![BlockoutCastle.png](https://static.wixstatic.com/media/cbda42_23cf4b9376a54032a18de339c924fceb~mv2.png/v1/fill/w_599,h_452,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/BlockoutCastle.png)
An early iteration of the level, fully blocked out using the LDK. This version was fully playable and included all planned locations.
The red dots are launcher pads which launch the player into the air upon contact.
A Navigation Mesh allowed AI enemies to move around the level.
The level was scaled down before work on the architecture pass began, as certain areas proved excessive during playtests.
LANDSCAPE
The landscape was sculpted in Unreal and made up of two parts.
The area surrounding the castle was sculpted like a moon crater, which allows the player to see their surroundings despite the large walls of the castle.
![landscape.png](https://static.wixstatic.com/media/cbda42_4f0c29adcd80426199632eb0258d0118~mv2.png/v1/fill/w_599,h_307,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/landscape.png)
4. ARCHITECTURE PASS
The architecture pass is either done by artists or level designers. In our case, it was a level design task. Blockout assets were replaced each time the environmental artist finished an architecture pass version of said asset.
LIBRARY INTERIOR
DRAG SLIDER TO COMPARE BLOCKOUT & ARCHITECTURE PASS
Combat arenas stayed mostly the same between the blockout and the architecture pass. The primary change was the size of the platform that the heart was on, as this improved player mobility in that space. I worked closely with the environment artists which ensured they knew which assets were vital for gameplay and what changes were needed compared to the blockout assets.
LIBRARY EXTERIOR
DRAG SLIDER TO COMPARE BLOCKOUT & ARCHITECTURE PASS
Exterior spaces often saw significant overhauls between the blockout and architecture pass. Each change served a dual-purpose, as they both increased the immersion and created a diegetic boundary for the player. This can be seen in the increased height of both the library and the castle walls. Nothing from the design was lost when art was added, as can be seen by all paths and entrances being nearly identical in both versions of the library.
5. COLLISION DESIGN
Collision Design requires constant iteration from the first build onwards as walls move locations, windows replace walls, or new assets are added. I added blocking volumes (invisible walls) to make sure the player could not escape the gameplay space and changed the collision of meshes to allow either the player or their bullets to fit through holes.
EXTERIOR SPACES
![HighresScreenshot00011.png](https://static.wixstatic.com/media/cbda42_8403dd5de20f440f803b247454cf2d36~mv2.png/v1/fill/w_527,h_287,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00011.png)
The gameplay space is defined by the castle walls. Blocking volumes extend vertically from each wall's rooftop.
The slanted rooftops are also part of the playable space, though the player glides off them due to the non-walkable collision that I assigned.
Players may gather high vertical momentum. A large blocking volume was therefore added across the sky to prevent players from flying too far up.
![HighresScreenshot00012.png](https://static.wixstatic.com/media/cbda42_3ae4a829f0494989bb855b3d798288fb~mv2.png/v1/fill/w_527,h_287,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00012.png)
The Player Collision view mode shows the size and shape of all objects and blocking volumes the player can collide with.
Objects that are regularly interacted with has complex collision, allowing the player to shoot through windows or the holes on railings and broken walls. Rooftops, spires, and rocks have simple collisions for the sake of performance.
INTERIOR SPACES
The collision of objects may sometimes need to differ depending on their location. Here, jumping through the windows to the right would lead you back into the level, while the left ones would take you out of bounds.
![HighresScreenshot00009.png](https://static.wixstatic.com/media/cbda42_252ab6cbcd8c4d909822768066f38ba6~mv2.png/v1/fill/w_518,h_282,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00009.png)
Rather than changing the collision of all windows to block the player from jumping through them, blocking volumes can be used when necessary.
In contrast, players never need to shoot through the shelves of the bookshelves, so they kept their simple collision.
![HighresScreenshot00010.png](https://static.wixstatic.com/media/cbda42_08ae7a1fe4a44bc19036d6b7dcff9e54~mv2.png/v1/fill/w_518,h_282,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00010.png)
ENCOUNTER DESIGN
6. POLISH
Before polish, there is a hand-off. In this stage, artists worked on adding environmental props and finalising the level's lighting. I could then begin polishing the level. This was done by giving myself a checklist of things that improve the experience but are easy to miss, such as:
1. Is there z-fighting in the level?
If yes, move the assets or hide it.
2. Are there any floating assets?
If yes, move the asset or adjust the landscape.
3. Can the player see unintended parts of the level?
If yes, adjust the blocking volumes or if time allows: fill in this area with assets.
4. Are there lighting artefacts in the level?
If yes, find out why and let the lighting artist know.
5. Does any part of the level look visually repetitive?
If yes, add decals or alternate assets.
6. Does the average session last shorter than 20 minutes?
If no, tweak the difficulty. Let others test if you have gotten too good.
HEARTS
Being a Base Defence game, the player needs points to defend. In Carnage at Castle Moon, these points consist of three hearts, each in its own, distinct location: a library, garden, and throne room.
LIBRARY
![gardenheart.png](https://static.wixstatic.com/media/cbda42_7353f77f83f2423bba217f3365d7a123~mv2.png/v1/fill/w_475,h_242,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/gardenheart.png)
![throneroomheart.png](https://static.wixstatic.com/media/cbda42_f7c87bdafb4e4fd689070fd826c7a665~mv2.png/v1/fill/w_489,h_249,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/throneroomheart.png)
![libraryheart.png](https://static.wixstatic.com/media/cbda42_ead102ea94e34013aa1a6a59a11cd572~mv2.png/v1/fill/w_425,h_216,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/libraryheart.png)
THRONE ROOM
GARDEN
![enemies3.png](https://static.wixstatic.com/media/cbda42_4fa2f9823dd24cf88de9cf85279a892a~mv2.png/v1/fill/w_579,h_339,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/enemies3.png)
Hearts emit a glow during waves that they are being attacked under. Particles will also begin to float around the heart once the enemies attack it, as can be seen here.
When enemies are nearby, but not attacking, the hearts change colour to purple.
A warning message appears at the start of each wave, telling the player which heart is under attack during that wave. In this case, it is the heart in the Throne Room.
![throneroomunderattack.png](https://static.wixstatic.com/media/cbda42_598a34f7e05a4984b688e12246e19547~mv2.png/v1/fill/w_487,h_134,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/throneroomunderattack.png)
![twounderattack.png](https://static.wixstatic.com/media/cbda42_b08d65bca39c4ca6b281bc4697f346c4~mv2.png/v1/fill/w_487,h_133,al_c,lg_1,q_85,enc_avif,quality_auto/twounderattack.png)
Two hearts can be under attack during the same wave, in which case the warning message at the start of the wave includes both area names.
All three hearts are attacked at the same time in later waves, signified by this message at the start of each wave.
![allunderattack.png](https://static.wixstatic.com/media/cbda42_1026406b2c3d41b897afa00e2b5a38a0~mv2.png/v1/fill/w_483,h_133,al_c,q_85,enc_avif,quality_auto/allunderattack.png)
Other messages include: a unique message for the first wave that briefly explains the goal in case they skipped the tutorial messages, and an end-of-wave message so the player knows that they can rest a moment.
![spawnpoints4.png](https://static.wixstatic.com/media/cbda42_727ab58fcc3049d1baedb02ce7f7567d~mv2.png/v1/crop/x_1,y_0,w_412,h_337/fill/w_400,h_327,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/spawnpoints4.png)
The number of hearts active per wave was adjusted in the Wave Manager, which is a Blueprint actor placed in the level.
The active hearts is random, with a small exception for the first three waves. Although the order is still random, the player will have the chance to defend each heart individually before several hearts are attacked simultaneously. This allows the player to memorise areas before the difficulty begins to increase.
ENEMIES
The visual design of the enemies was a collaboration between the narrative designer, character artist, and gameplay designer. Enemy behaviour, however, was designed and developed by the gameplay designer, pathfinding and spawning programmers, and level designer (me).
![enemies_1.png](https://static.wixstatic.com/media/cbda42_dd1870b83e8b48d0b118e8df8e3d84ae~mv2.png/v1/fill/w_461,h_270,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/enemies_1.png)
The enemies come in the form of astronauts in bright-yellow space suits that contrast against the grey and red castle environment. They can be seen travelling in organised ranks on their way to the hearts.
![enemies2.png](https://static.wixstatic.com/media/cbda42_b6148f9007a0424bbe2506f059287f4f~mv2.png/v1/fill/w_461,h_270,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/enemies2.png)
![enemies4.png](https://static.wixstatic.com/media/cbda42_d6df4fed2c37417f849199e2bff765c5~mv2.png/v1/fill/w_461,h_219,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/enemies4.png)
They will chase after a player who gets too close, stopping to attack with their melee weapon if they catch up. Their speed increases significantly when chasing the player. Luckily for the soon surrounded player, one shot is enough to dispatch an enemy. An enemy that loses sight of the player will return to hunting down the heart.
A skilled player will dispatch enemies on their way to the heart to avoid damage that wave. Their colourful suits and flashlights make them easy to spot even when travelling quickly around the level.
The number of enemies was regularly iterated upon throughout the project based on feedback from playtesters.
This was balanced using the Wave Manager, a Blueprint actor in the level. My mindset when pacing the game was to slowly escalate the intensity from the very start. A rising challenge is necessary in short, arcade experiences.
The number of enemies decreases when a new heart is introduced. This allows players to get their bearings rather than being overwhelmed by enemies moving to different areas.
![spawnpoints3.png](https://static.wixstatic.com/media/cbda42_ebb125bb4e0a44099fdb04441f436897~mv2.png/v1/crop/x_0,y_0,w_411,h_370/fill/w_461,h_415,al_c,lg_1,q_85,enc_avif,quality_auto/spawnpoints3.png)
SPAWNING
A Wave Manager in the level controlled the spawning of enemies.
The spawn locations were chosen by placing spawn point Blueprint actors throughout the level.
MAP OF ENEMY SPAWN POINTS & PATHS
HEART ZONES
GARDEN
THRONE ROOM
LIBRARY
![Map.jpg](https://static.wixstatic.com/media/cbda42_504ecf0ebc1d4756a4f19787a949e96c~mv2.jpg/v1/fill/w_574,h_569,al_c,q_80,usm_0.66_1.00_0.01,enc_avif,quality_auto/Map.jpg)
Each of the game's three zones was colour-coded. The garden is green, the throne room is yellow, and the library is blue. This categorisation was strictly done to expedite the placement of spawn points and is not visible during gameplay.
Each coloured dot represents a spawn point, with the extending lines showing the paths enemies take to get to the heart that is under attack during that wave.
![spawnpointinlevel.png](https://static.wixstatic.com/media/cbda42_2fab5cccdbe74f3a9fa3c143c4ff81eb~mv2.png/v1/crop/x_311,y_0,w_1745,h_1302/fill/w_409,h_305,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/spawnpointinlevel.png)
Each coloured dot on the map has a respective spawn point in Unreal in the form of Blueprint actors, similarly colour-coded. These are not visible when playing the game.
![spawnpoints.png](https://static.wixstatic.com/media/cbda42_1e9dce9b195d40a7a858d65cf910193e~mv2.png/v1/crop/x_0,y_0,w_507,h_568/fill/w_409,h_458,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/spawnpoints.png)
The naming conventions and structure were also important to allow the rest of the team to understand the Blueprint hierarchy.
Each spawn point was numbered so we could efficiently discuss, e.g., "Library2" or "Garden4".
The spawn point order corresponds to their priority. Early waves will prioritise spawning enemies in the first few spawn points rather than the last ones. More spawn points will activate as the difficulty increases.
The spawning and waves were highly customisable. The Wave Manager allowed me to adjust how many enemies spawned the first wave, and how long players have to acclimate before it begins.
The downtime between waves allows players to find an advantageous position. The 1-second delay between enemy spawns gives the player a chance to kill enemies faster than the time it takes for more enemies to spawn.
![spawnpoints2.png](https://static.wixstatic.com/media/cbda42_2f26f9f0941d4479b145a94f9816e51b~mv2.png/v1/crop/x_0,y_0,w_450,h_375/fill/w_438,h_365,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/spawnpoints2.png)
![enemies5.png](https://static.wixstatic.com/media/cbda42_f9503210b84643dc883717e1269efe94~mv2.png/v1/fill/w_491,h_233,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/enemies5.png)
A bright, blue beam of particles appears when an enemy spawns, revealing its spawn point to the player. As enemies spawn in groups, it is hard to miss a cluster of enemies even if the spawn point is far away or on a different verticality.
PATHFINDING
A navigation mesh (navmesh) was used for enemy pathfinding. A Nav Mesh Bounds Volume covers all areas that enemies may walk on. Nav Modifier Volumes were used in any part of the level where we did not want enemies to walk, as such a volume "cuts" out a hole in the navmesh.
![HighresScreenshot00006.png](https://static.wixstatic.com/media/cbda42_2988113afaf547b29ce9af8d3e8784c8~mv2.png/v1/fill/w_576,h_313,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00006.png)
![navmeshgeneration.png](https://static.wixstatic.com/media/cbda42_0e9ab9bf3d69481c8418ceeca429941d~mv2.png/v1/fill/w_576,h_219,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/navmeshgeneration.png)
The neon green colour on the ground is a visual representation of the areas covered by the navmesh. The yellow volume is the Nav Modifier Volume.
There are times when the navmesh must be manually adjusted. This can happen when the navmesh covers an area that the enemy AI cannot traverse, which results in an enemy getting stuck. Nav Modifier Volumes have been used along the short railings in this instance.
Another option is to adjust the navmesh in the Project Settings, as changes there affects the entire navmesh. This is a good option for making sure AI characters can walk where they are intended to, such as up stairs.
Nav Mesh Modifier volumes were sometimes used together with carefully placed props to force enemies down specific routes.
![HighresScreenshot00003.png](https://static.wixstatic.com/media/cbda42_1c5f35ed37604801a9be5766376570fa~mv2.png/v1/fill/w_474,h_227,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00003.png)
Similar techniques were used to separate enemies arriving from different locations but going toward the same location. All AI enemies would otherwise choose the same, fastest route to their destination.
![HighresScreenshot00007.png](https://static.wixstatic.com/media/cbda42_c2d9c4643a674104950e40fc274344d7~mv2.png/v1/fill/w_474,h_258,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/HighresScreenshot00007.png)
SCRIPTING
A level is more than architecture, it is also events that trigger when moving around the level, or entering and leaving zones. This is where blueprint scripting is especially useful. Below are some of my contributions.
PLAYER DEATH
![Death.gif](https://static.wixstatic.com/media/cbda42_09e55303ecbb48fd80661d015c9578b0~mv2.gif/v1/fill/w_599,h_301,al_c,usm_0.66_1.00_0.01,pstr/Death_gif.gif)
The game fades out once the player dies. Player input is disabled, and the Game Over level is loaded once the screen turns black.
The game also fades in when the game begins.
![FadeOut.gif](https://static.wixstatic.com/media/cbda42_b52c4b70a38d417c917a545c1eaa77b3~mv2.gif/v1/fill/w_979,h_130,al_c,usm_0.66_1.00_0.01,pstr/FadeOut_gif.gif)
ENTERING COMBAT SPACES
![EnteringPopup.gif](https://static.wixstatic.com/media/cbda42_e0ae823372334ffda3e19658eb7ec9ff~mv2.gif/v1/fill/w_599,h_303,al_c,usm_0.66_1.00_0.01,pstr/EnteringPopup_gif.gif)
All three combat spaces trigger a pop-up box to appear in the top-right corner, telling the player which area they are currently in.
![Entering.gif](https://static.wixstatic.com/media/cbda42_1d31340889d54cbdb8c69828fc9eb35a~mv2.gif/v1/fill/w_600,h_292,al_c,usm_0.66_1.00_0.01,pstr/Entering_gif.gif)
A trigger encompasses each combat space. Location information is sent to a Widget Blueprint when the player enters the volume, triggering a function which fades in the text.
EXITING COMBAT SPACES
The text fades out when the player leaves each location.
![ExitingPopup.gif](https://static.wixstatic.com/media/cbda42_41fe605c7e07413ca7ae3f9bf01796be~mv2.gif/v1/fill/w_599,h_303,al_c,usm_0.66_1.00_0.01,pstr/ExitingPopup_gif.gif)
Leaving the volume triggers a fade out function in the Widget Blueprint.
![Leaving.gif](https://static.wixstatic.com/media/cbda42_c50b1333fd4c4663ae6adac1d0856ac7~mv2.gif/v1/fill/w_600,h_292,al_c,usm_0.66_1.00_0.01,pstr/Leaving_gif.gif)