Super Dungeon Noora was a small, less than a month long project made as a birthday gift for one of my close friends. The idea came from her husband planning to gift her a trip to Tokyo, a city at the center of videogame culture and influential to its development ever since its inception in modern culture. It was a fun project that allowed me to explore quasi-solo development with production constraints in both terms of time and process.
Making of Super Dungeon Noora
This project was an interesting thing to tackle given the one I had worked with did not have experience in video game development per se, but had extensive experience in table tob game design and 2D art. Together with my project partner we settled on him taking care of the 2D art (textures, sprites, splash screens…) and me taking care of… well the rest. Given time was of the essence we looked for making something that would yield the best bang for our buck in terms of development time, but I couldn’t resist experimenting with some things here and there. The game was ultimately built in Unity, with the use of ProBuilder, Unity’s new UI Toolkit and a bit of HLSL here and there.
Concept
The initial concept was a very straight forward 2.5D walking simulator, where you would explore a dungeon and interact with different characters as well as collect items. As ultimate look, we were going for something à la OG Doom/Wolfenstein in terms of balance between 2D and 3D with some touches for a more modern look as well as higher pixel density. This would allow us to directly import my partner’s designs without having to worry about texture unwrapping and 3D modelling, given he was coming from a mainly 2D media background (comics, animation etc…).
The Tools
Given the simplicity of the project both visually and gameplay wise, Unreal Engine seemed overkill so I chose to develop things in Unity. I had to also double as a (cheap copy of a) 3D modeler for the 3D sections of the project so I relied on ProBuilder as a way to compose together simple 3D shapes and make up the map of the game. Ultimately I also wanted to experiment a bit, so this project was the perfect chance to try Unity’s new UI Toolkit, a successor to Unity Canvas and built in order to be welcoming to people that already have experience in web design, given the CSS based framework.
Shader Work
I love working with HLSL whenever I get the chance so I couldn’t resist writing some custom shaders for this project, both for personal preference and to simplify some things further in order to give the game its simple yet fun look. We started from painting tileable textures for the level geometry, ultimately lending with a set for the walls and floor.

I then proceeded to implement a very simple planar mapping shader, with some extra color blending based on the normal direction of the mesh to give a semblance of lighting, as well as better convey depth. Given we were using primitive shape there was no need for linear blending of the texture so I used a step function instead of lerping the textures to blend the final color.

We then had to animate the doors opening and closing whenever the player would cross them.

We could have gone with having multiple game object with different sprites and thus animate the door as if it was hinged to the wall, but we wanted to give the game this retro look and this complexity felt off with respect to what we were going for, so I chose to implement a dithering shader which would trigger based on the distance of the player and some extra parameters to fine tune the transition.

I wanted to give some concentric vanishing effect to the door while crossing it at least at the edges of the screen to still convey the act of traversing the door to the player, so I did compute the dithering mask a bit differently, to decrease transparency at the edges concentrically.
// i.cPos is clip space position of the fragmentfloat l = length(float2(0.5,0.5) - (i.cPos.xy/_ScreenParams.xy))/0.5;l = clamp(2- pow(l,2), 0, 1) ;// _DitherAmount is set on the host side based on the player distance from the door.// Basing the dither on the fragment z was causing unpleasant artifacts when viewing at an angle.float3 ditherCoords = float3(i.cPos.xy * 0.1, 1- (_DitherAmount * l));float dither = tex3D(_DitherMaskLOD, ditherCoords).a;clip(dither - 0.01);UI Toolkit
Finally I had to put together some UI for the game, and I wanted to try the new Unity UI Toolkit out. It came out to be extremely intuitive, thanks to the CSS based syntax I was able to quickly make a functional UI prototype with the needed events for the different interactions. It did show some of its limitations though when it came to more complex interactions and layering of them, I worked around it by building a framework of different classes which could be activated based on the state of the UI, very similarly to how web UI would be done. We wanted to keep the UI simple during gameplay, as there were no complex player state variables to convey to the user, so I just added a very simple animation for showing the protagonist wobbling about whenever the player was moving. As for the menu, we layered some art made by my partner in the project and we came out with some simple yet good looking UI.

The only thing left was adding some background music and some sound effects and the game was done! All in all it was a fun project that luckily got the reaction it was looking for. While it definitely is quite the effort to build a game as a birthday gift, it is definitely something unique and probably something I will do again in future.