As this was the last competition that I could enter before finishing Uni I wanted to showcase and learn the skills I most wanted to use. Due to this I wanted to focus my game around graphics. I wanted each level of my game to look completely different from any of the previous levels that had come. I knew this was going to be a challenge so I decided to make one level at a time and see how many levels I could get through in the time I’d been given. This game jam was a solo creation.
Ideas and Research
The first part of research was to explore different art styles. A game that stood out to me the most for this was Lies Beneath (a VR game). The way the main light interacted with the environment was something I’d not seen before. Instead of a gradual gradient, it worked with bands. Each band has its own strength, meaning a more flat lighting style, similar to a toon style. This created a very tense atmosphere and got the player to search with the light rather than just walking around.
The second style I found was a simple outline style. I knew I wouldn’t have time to create textures for all of the objects so I planned to just use basic colours. This is why the outline is so important as it’s to make sure the scenes don’t look uninteresting to look at. In order to create these shaders I knew I needed to use the shader graph plugin, which meant I also needed access to the render pipeline to apply global shaders effectively. In order to do this I needed to update the project to the Universal Render Pipeline.
I decided to stop my research here and start working on the plan for the dimensions. I wanted to get these two dimensions completed before researching another style. This was to keep the scale down but still allow it to expand if completed early enough. I didn’t want to start big and go small but rather start small and go big.
Outline Design Plan
My first plan was to experiment with the story system and the Game script given at the start of the project to see what it’s initial limitations were. From this I wanted to have a different script for each level so I changed the name of the data in the editor script to “base script”, whenever I renamed old data the editor script would create another blank one for me.
Another feature I wanted to add was a note system. My first idea was to create a prefab which would store the data and use a global script to collect all the notes at the start of the level. However after a while I decided I wanted to be able to edit the notes from anywhere and not just from the scene itself, so I put the notes system inside the story data.
The next feature to decide on was the graphics, I was a bit unsure on how to create this so I experimented on another project until I got the desired result. I always end up creating many unused scripts and shaders so re creating it in the main project kept redundant data low.
Lastly to make each level interesting I wanted to create puzzles or challenges that would need to be completed. A game isn’t much if the player doesn’t have anything to do. This is the point I decided to add a gift system. The only way to attract to both hardcore and causal players is to create different ways of completing a puzzle. If I allowed the player to choose between a hard choice and an easier choice, both players would be satisfied.
I had one more puzzle planned however I ran out of time to implement it. This puzzle was a finished part of a chess board played with giant pieces. You would move the final piece to put your opponent into checkmate, the gift would reveal a mirror in the ceiling showing you the whole board from an eagle eye view.
Problems / Notes
The first version of the outline shader was created for use in the pipeline, however I had to include the base colour of the object inside the shader as there was no way to allow for inputs when using the shader on the pipeline. To counteract this I converted it to a material shader, but when I did this the effect changed and the outline covered the whole shape. After spending an afternoon trying to fix it I was running out of time. In order to fix this I changed the shader back to a pipeline shader and then changed the render settings from opaque to transparent, inverted the mask for the outline and plugged that into transparency. This meant I could apply any material on top of the shader allowing me to customise the style of the scene further.
To get the lighting shader I wanted, it required me to get the lighting data which Unity currently had no easy way to get. To do this I created a custom cginc file that took the objects world position, compared it to the main light and then returned its lighting strength and direction. Once I had found the NDotL value, multiplied that by the colour and lighting strength it would correctly shade itself according to the main light. Using the same concept I got all of the additional lighting data and added the two values together for a complete shading on the object. This however didn’t take into account other objects that may be in between the object and the light source, maybe a theme to explore in another project.
Now I have the lighting data of the object I could use it in my toon shader, however I only wanted the intensity of the light and not the colour.
Towards the end of the project I had to rush the coding on scripts so I only had the time to get the scripts working rather than getting them sustainable. If I had more time there are a few scripts I would split into individual scripts and a few others I would link through inheritance. I would also like to explore some of the interfaces I created, as with further experimenting I feel that they could be modified and moved into scripts that were inherited instead.
Overall I would say that I had a really good game jam, I achieved all of the goals I had set out and I didn’t try to create a project that I couldn’t finish. My only criticism is that the risks for completing a project with a challenging theme on top of my uni work were too high. The reduced scope of this project needed to fit the compressed deadline I had to adhere to. However, learning how to create a lighting shader and a procedural fire shader was very interesting and fun, I will be exploring those types of shaders more in the future so I can use them in future projects that I make.
External Art / Tools
Audio (FreeSounds.org + purchased music)
Universal Render Pipeline Shader Graph