Labs project - NOAH - a first person puzzle adventure game (Part 1 of 2)

Designing and building a game in four weeks is a brave move but we wanted to try our best and create a playable game by the end of our deadline. Knowing the time constraints we had to decide what we could realistically achieve but we also wanted to challenge ourselves and work outside of our comfort zone.

We started with fleshing out the game idea and creating a detailed Game Design Document (click to download). Our first sprint was spent on brainstorming ideas, coming up with the story, art style, game mechanics and puzzles. 

Ideas Tree Ideas tree

Game team hard at work Game team hard at work

We knew nothing was set in stone and that we’d have to adapt as we go, change things and possibly cut down on some elements if time was against us. But we had some core elements we knew we have to keep. We knew the game would be an adventure first person puzzler with a futuristic / sci-fi theme, we knew what types of puzzles we would have and what core mechanics we would need in the game, like using ‘pulse’ to power things, pressure plates for the user to step on to activate or a hexagon based puzzle where you need to power up the grid by turning hexes to create a path.

Over five days we focused on detailing out the puzzles on each level, the flow of the game and designed the levels. Each of us came up with the puzzles for one path, writing down and drawing how the puzzles work and what the player needs to do in order to solve them.

Concepts of some of the puzzles and game elements Concepts of some of the puzzles and game elements

Some of us went further coming up with the layout of the area but we knew this would have to be play tested anyway so the main focus was around the mechanics. Once each of us was done, we created a blockout of each path and main areas to see how they could connect with each other and what layout we could go with. We decided to color code each path which helped to communicate and keep assignments clear.

Game levels overview Game levels overview

Story

The idea for a story started simple – a futuristic setting, ability to ‘hack’ into devices with some kind of power, which we called ‘Pulse’, overall dark and mysterious mood and setting. The story expanded over time, more details were being added as we were working on it. The player is a hacker in a distant future who breaks into a facility which stores human memories. 

It all started as a project to save humanity’s identity, project NOAH, to store and protect people’s life experiences for future generations or any unforeseen catastrophes. But the corporation responsible for it went too far, over time it started extracting memories as a way of controlling people. Without memories people lack identity, diversity, ability to form relationships. As a player we are here to give the memories back. Unfortunately, the main repository has a tight security, we have to hack it and release the lockout on the repository to release all the memory data. Initially, we hoped to create some story hints, maybe some cinematics but very soon realised there was simply no time to achieve that so we focused on delivering a playable demo with just little hints in the form of decals here and there, names of the locations and devices.

Art style 

The leves and the art style were simple, a lot of the atmosphere and colour were all down to lighting and post processing in Unity which meant we could model assets quickly without sacrificing too much time we needed for building blockouts and then all the levels. The tricky part was lack of concept art, but we managed to find enough imagery and style references to use as a guide and to try and recreate. Here’s the Pinterest board we created:

We had four puzzle levels each consisting of multiple rooms, a main level which acts as a hub with all paths to other levels, tutorial level consisting of three rooms where we introduce player to the main mechanics and an outside level which is connecting tutorial area with the main hub. This was a lot of space to build in just three weeks not to mention adding the mechanics to the areas and objects and play testing it, as a result all of us had to be involved in level building and play testing. 

Our project plan limited us to only spend three days on blockouts which sounds insanely short. As two of the team were working on scripting, shaders and logic for the puzzles, I was making sure they had somewhere they could play test their code. It quickly turned out that block out wasn’t just about designing the layout and player path, I ended up adding the scripts as they became available, making lifts move, door open and play testing the paths which in the end took six days. Blockout is a great way to test ideas though, see issues and iterate very quickly. We used ProBuilder for blockouts which turned out to be amazing tool for the job. I didn’t have to use 3D modelling software at this stage at all, I could model all the simple geometry on the go inside Unity and instantly test it which turned out to be a huge time saver.

Creating modular assets and props

We decided on the modular approach due to flexibility it provides and ease of changing layout or look of the scene by updating the specific pieces or materials assigned to them at any point. It also meant that once the assets where available anyone had access to them and could build levels or modify existing ones by themselves, not just the artist, which was crucial to this project. 

I created a small number of main structural assets like walls, doorways, hexagon corridors, stairs, floor tiles etc. I made sure they all work with the grid. Initially, I modelled them with beveled edges but it quickly turned out baking light was causing issues and artifacts (we went with static objects as there were many glowing elements in the scenes and we needed global illumination from them within environment). With the limited timescale we simply didn’t have the luxury of creating high poly and low poly assets, so all assets had to be simple. We ended up making an edge bevel and detail trim sheet and using it across all objects. It helped with artifacts as normal map smoothed out sharp edges and transitions between elements. Once the main elements were done, we kept adding props and other elements that were unique to each path. Here’s the scene with all assets used to build all levels:

Level building

The biggest part of the project for me was level building. Since we started with simple blockouts I knew exactly what I needed to build but it is still a very time consuming process. We ended up sharing the workload among the three of us to speed things up. Having a library of modules to build the environments from helped greatly and it was easy to keep the look fairly consistent even though each level is very different from each other.

Level building is a lot of fun, it’s like putting Lego bricks together and the outcome is only limited by your imagination. Great level designers know how to use one element in all kinds of ways and can create very complex looking environments from a small library of assets. It was my first time designing and building levels and it was a great experience. I was sticking to the blockouts in terms of player path and core objects, since we already had some gameplay elements in place but everything else was down to artistic vision, trying to create eerie surroundings, highly inspired by Tron and all based around clean geometric shapes. 

Blockout vs finished level Blockout vs finished level

I was building environments room by room, filling them first with the main areas where the player interaction would be and then building around it adding walls, floors, lights, props, rebaking the scene multiple times and tweaking settings. I used the new Progressive lightmapping in Unity, which turned out to be much faster and gave better results on lower settings compared to Enlighten. It also meant I could see how the environment would look like on the preview and change things on the go without commiting to a full bake which does help a lot with quick iteration.

I ended up creating many prefabs to speed things up, instead of repeating the process of building a certain object out of its components, I just did it once and made a prefab to use in other levels. Corridors, lights, columns, tunnels, floor and ceiling tiles were some that I created prefabs for and used extensively across the game. 

Example prefabs of lights and a corridor Example prefabs of lights and a corridor.

Example of a level and highlighted elements that it is made of Example of a level and highlighted elements that it is made of.

Level building requires you to constantly test it, once you put objects in place you have to run around and see them ‘in game’ as the editor view is completely different. I wish Unity had only one view, like Unreal, where you see all the effects, particles, lighting live, while placing objects, without the need to constantly switch between Editor and Game view. You can see post processing effects in editor but any effects attached to the camera, some shaders and particle effects are not shown in the correct way which means you have to go to play mode to see the outcome. Hopefully that will change in the future.

Lighting and post processing

The look of the game is heavily depending on post processing. Thankfully Unity now has a post processing stack which makes the job much easier. Since the materials in the scenes are mostly black and white and due to lack of time to create any more detailed textures we decided to go with base concrete texture across all structural elements, colour grading was crucial to the outcome. Tron: Legacy, which we were heavily inspired by, utilises hues of blue and lots bloom on brighter colours. We wanted to replicate that look as it fit well with how we wanted the environments to feel: big, monolithic structures, wires, data flowing around the structure and hexagon based shapes. 

Scene from TRON: LegacyScene from TRON: Legacy

Post processing off vs Post processing on Post processing off vs Post processing on

Here are the settings for post processing, as you can see they are very simple. We used mainly bloom, ACES mode with white balance moved toward cold blue temperature, vignette and channel mixer settings. We also didn’t bake any ambient occlusion in the scene, again due to very limited time, the bake settings were generally very low across all levels. Post processed Ambient Occlusion helped to deal with that and even though, not perfect, still adds detail to the scenes at a low cost.

Post processing settings Post processing settings

Lighting in the scene is not very complex, there isn’t a single aerial light since it turned out they take a very long time to bake. So I was only using point and spot lights. Since all the levels apart from Lift tunnel, are indoor, we didn’t use any directional lights either. I created a skybox for the Lift level which shows the distant cityscape full of dark, big buildings and light flowing around all the main shapes. I created a 6 camera setup in Cinema4D and rendered each view to a separate image, then loaded them all in the right order in Unity to create a skybox material.

Cinema4d skybox scene Cinema4d skybox scene

This is a simple scene with lots of repeating buildings but it gives enough of a background to give the idea of a futuristic city behind the tunnel’s grid. It would of been great to be able to make it more detailed but we had a lot of other things to do that were more crucial. Still, I think it does a good job when you are going down on a lift, makes the world feel much bigger than it is really.

Riding down the tunnel with the city view outsideRiding down the tunnel with the city view outside