Hello, welcome to my blog about the development of my honours degree. In the blog post I will show the development process from concept to production of the game I created for this course.
For this project I wanted to work on my game design for my portfolio as this is an area I am interested in having within the industry. For the project as I am focusing on game design my pipeline will be a little different from the traditional method but keeping to the pre-production, production and post-production pipeline. The pre-production will be the same method, the production will just focus on creating the mechanics needed for the game and finally for the post-production will be for the visual and aesthetics of game.
The project I wanted to create a type of puzzle game combined with a stealth game and using level instancing. The idea of using the level instancing is to create a game where there the player will explore the same level over and over again but the variables change each time they enter a new level.
I started of brainstorming ideas that I could fit my three ideas too
After brainstorming I decided I wanted to create a prison escape game, the main reason that there weren’t many games I found from basic research that offer prison escape experience. From this I created a mood board, look into themes and mechanics I could use in my game.
In my research I looked into real life prisons, from person experience I had visited a numerous of old prisons on multiple holidays such as the infamous Alcatraz in the USA and KGB prison in Lithuania, visiting these sites gave me lots of inspiration and reference material. With prison breaks there is a lots of media that I used for inspiration either it been real life events or fictional stories and from all this inspiration material I have tried to include real life events as well as pop culture in the game.
After this I started thinking about what mechanics I would need in my game to make it puzzle and stealth based, I decided to have a basic stealth mechanics such as been able to enter a stealth mode where the player can hide in the shadows as well as manipulate the environment around them using a form of projectiles. To add to the puzzle element, I want to have an inspection window where the player can view items and look for hidden codes, combining this with a craft system where the user needs to create a unique item to help them get past an obstacle.
After I got an idea of what I wanted to create I decided to create a one sheet, this a basic form of a game design document and sets the boundaries of the games and basic information about the game, characters and levels.
Once I got my list of main mechanics that I wanted to implement into the game I started researching and prototyping my ideas. The first stage was to set up a character, I decided I wanted to a full meshed character as I want the player to feel like they are in the character and have the same view as we would. I used the default mesh and put a spring arm with a camera and placed it to get a first-person point of view. Main reason for this is if I attach the camera to the head socket you get animation movement on the camera which can be off putting. I then used the Movement animset pro from the marketplace.
Which this animation pack I set up states in the character to enable four directional movement, stop and start, crouching and turning.
I then started working on the stealth mechanics, I wanted to create a thief style visibility check. The Thief games used light mapping and surface caches to store lit surfaces and then use recasting to determine if these were visible or not, thus giving the player the ability to hide in shadows. This is a difficult mechanic to do as you must use maths to figure out the light falloff and then work out how visible the player is this falloff. I did it slightly different to how thief games did it, as I used a collision sphere the size of the attenuation radius and worked out the light falloff by using the centre of the light. This does have it draw backs as you can’t have collision sphere over lapping as it doesn’t register the players visibility.
Once the lights were working the next stage was to influence the lights by environment interactions and projectile objects. Creating the projectile was easy enough by just spawning the projectile when fired, the difficulty part was working out the trajectory. The trajectory uses a line trace that is modified by simple maths to add an arch and distance. Then combing this with a particle effect and decal to add visual reference to the trajectory, when the projectile hits the light it uses simple events to turn the light off then proceed with a flicker effect.
I then needed the character to interact with the world, I added a blueprint interface and set up a sphere line trace this takes away the need of collision boxes and the user can interact with any object that has this interface. In the past I have created a master item blueprint and created child’s of this blueprint I wanted to cut this method out and I decided to create only one item blueprint and use a datatable that updates the blueprint using a strut, I can select what item I want from a drop down menu in the viewport to select what item I want. This makes it a lot easier to mange all my items as I can edit the datatable to adjust an item.
The next big interaction mechanic I wanted to add was an inspection window as I want items to have clues to what they can be used for, I created a basic widget and a simple mechanics that brings the item closer to the player. I added a simple drag and rotate function to the UI window and then added button to put back the item, drop the item or take the item.
This led me to creating the inventory system, as I have experience in creating these before I felt that creating a simple one would be ideal for the project as a lot of the items would be used for crafting. The whole system looks simply to use but under the hood it is complex and got quite tricky getting the strut information over to the inventory from the items. I decided to place the mechanics for the inventory system in the player controller as if the player is destroyed it would be easier to retrieve this information. I then added an item stacking once I got this basic working as I plan the player needs multiple of the same item. Once I got the main mechanics of the inventory system working by replacing the model with a 2D texture that displayed in the inventory system I then wanted to add a drag and drop feature as I wanted to create simple crafting system by dragging and dropping the items needed.
This is where the system got even more complex as I used a separate UI for the crafting window which means I had to save the struts again in the craft UI and then when the items are placed into the slots compare each slots strut to see if it matches an item of a datatable I created for the crafting list. In the end after a lot of trial and errors I manged to get the crafting system working comparing each item to see if it’s a match or not.
For the quest system I planned on having a very simple system, as I am later going to have a book/journal and it will have a to-do list and hand drawn maps in a book to look like the player character is taking notes. This is to help the player plan their escape and figure out what they need to aid them. It started of system as a trigger box system where the player would pick up quests but evolved over time to add quests from the crafting system and NPC interactions. I used another datatable to handle the quest information which holds information on the quest name, information etc this information is then added to a gird panel in a UI window using the quest ID number to set the row in the gird panel. This is mainly encasing the player picks up a quest that is important and needs to go to the top of the journal and to edit that row when the quest is complete.
To enhance the quest system, I felt that adding a dialogue system would help guide/aid the player plan their escape. I decided to have two types of dialogue in self-narrated and NPC dialogue. This was a simple system to implement as I used another datatable and could call what row for the conversation. In the system I could also set a conversation id, this is mainly for the NPC. This is to change the conversation Id after a quest or time period but keep it on the same NPC giving the appearance the NPC is continuing the story/conversation. Another feature I added was how many lines in a conversation, so the player can interact to read the next line in the conversation.
To distinguish what was self-narrated and NPC dialogue I added a 3D avatar to the conversations with an animation to show the NPC talking, this will be updated to lip syncing animation or morph targets.
As the player is in a prison, I wanted ways for the player to be detected as a loose state, I thought a camera system would be one of the best ways to do this, I created a camera system blueprint that rotates combined with a scene capture. The scene capture is then added to a render target which can then be used for small CCTV screens. I used the old monitor shader material of the marketplace to add camera feedback.
On the big screen the player can interact with it and scroll thought the camera, this is a mechanic I remembered from playing the Duke Nukem games. The cameras are stored in an array and get the next camera on interact.
The AI in the game is one of the most complex systems I planned on just having a basic AI that patrols and looks for the player, but I felt this was to basic for the game. The Ai has a lot of updates since this idea and how has a full scanning system to check for the player, if in the shadow how visible the player is and taking the distance into factor. If the player is a certain distance and visibility it will investigate that area. The AI also hears sounds, not just by walking normal but if the player uses a projectile near the AI it will also investigate this as well. To add to this the Ai will also interact with the light switch and other items in the world if it changes. If the lights go of the AI will walk to these lights and turn them back on.
The patrol isn’t a basic patrol system either, it has public variable on each way point to either tell the AI to wait at that point or play an animation. This will be useful for when the guards at checking the cells at night / wasting time on patrol. It is also a system that will evolve more as the game progress along the production pipeline.
Level desgin and alpha build
Once all my core mechanics were built and in a basic working form, I decided to move onto the level design and implementing the core mechanics and grow them from been basic mechanics that don’t function together to working in a level design.
In my pre-production I created a simple level, that housed the cells, kitchen, mess hall and guards’ room that are connected by corridors, I wanted it to feel small and closed in like a prison would feel like. As I was using level steaming to change days, I created a basic map of my layout and then placed the pickup items, doors, cameras, interactions and where the guards patrol.
From the basic layout that I drew up which can be seen below, the layout stayed the same pretty much only slight changes happened to the bathroom to make it flow better. Once the placement of pick up items was placed in the world some of these were moved to make the flow feel better and the exit was moved to the other end of the map as it would block the grate to the access tunnels.
Below is draft layout of the prison
During the process of building the level from the layout, I created a grid texture to help me with sizes, texture resolutions and can be used in the future for lightmaps and working on the shadowing. This was used throughout the white boxing.
Below is screenshots from the first draft of the level implantation
Once the level was built it was about working on the level mechanics and making them work with each other. I started off by following the narrative that I designed, which I scaled back after playing subnatuica I wanted to have little direction after a certain time and let the player explore and figure the escape out themselves instead of directing the player through the game.
Most of the system only needed little adaption to make the work in the level, combining event dispatchers with game instances and level blueprints. One thing I learned pretty fast was that working with level instances was quite tricky and having unique objects on each level would causes more headaches that needed, due to the unloading of levels it would remove data of where the player current progress was, thus requiring either a complex save system or creating a persistent level where all intractable, ai and quests would be held, I decided instead of choosing one a combination of both would be the best way forward would to use a combination of both.
Having the AI and pickable items up in the persistent level would be easier than saving the items in the inventory and ai locations to be always available and then saving variables in each level when a player has completed something to remember this when they return to that area.
Below is a play through of the alpha build and still has bugs that will be ironed out for later version.
Improving on the alpha build
Once the level design was completed and the flow of the gameplay was complete it was all about improving the game. I started off with adding asset packs and creating models to improve the aesthetics of the game. Each area got improved making it look like it was set in an old prison that was crumbling away and has lack of funds and areas have not been updated. I tried to add wear and tear in the environment by adding damage, dirt and dust to the materials on the assets as well as adding decals to add cracks, paint, damage and dirt to the rooms to show the ware.
Each mechanics got updated as well, to fit in with the aesthetics. Character models were added to the player character, NPC and guards to fit the theme. The guards sport a security style outfit, while the prisoners wear all blue old-fashioned prison outfit.
The UI also got updated, the quest log been the biggest of changes where it was turned to look into an old journal that the player is writing and drawing in. This turned not into just a journal but had map information and also tutorial information inside of it. The journal was used in other mechanics such as the inspection window and pop up window with all the information.
The lock picking system was also updated from a 2D system to 3D system that uses the same type of mechanics as the 2D but updated to work in 3D space and I feel this adds more to that system than having it in 2D.
Below is a fly through video of the prison, showing the new visual changes.
After the release of the beta and viewing playthrough videos it became clear to me that my initial idea for the tutorial was not working where I gave all the information about the mechanics to the user in a large quantity. This led to people skipping / ignoring the information and just explored the prison without knowing what to do or how the mechanics work.
I decided for the first level I would direct the player to each area that needed to be completed as the items in these areas help the user advance in later stages of the game. I used a particle effect to direct the player, similar to what is found in Grand Theft Auto for their quests.
I directed the player to important stages I started of by; directing the player to Hustler Lee to start the questline as this is a core item for getting out the prison, this leads the player to the mess hall where they are introduced to the stealth mechanics: throwing an item to distract a guard and the lockpicking. From here they get the item and complete the quest for Hustler Lee, the rest of the prison is open now and are directed to the bathroom and workshop where they are another task for them to complete.
Once these areas are completed it will call the player back to the cell where they are introduced with the calendar and can only progress with interacting with that. The game continues how intended from here left for the player to find items and escape.
Below is a video of the new tutorial
After all the bugs found from the beta test plays were fixed, I then released the game as a playable prototype.
Below is a video of the full gameplay