DRIVE OR DIE – solo project
Survive the dungeon trials and create custom trails around hells minions as you dodge fireballs, avoid spear attacks and navigate deadly traps in a procedurally generated dungeon!
Beat all the rooms to face off against the dungeons boss, good luck!
You can play/download the game here:
Drive Or Die was my final year submission for my degree. The aim of the final year project was to solo develop a game that showcases our specialism, mine being programming I wanted to design a game that would do exactly that while also challenge myself.
I decided to design the project based on 2 core systems that I wanted to develop, the first being procedural generation and the other being custom mesh generation in real time. I had been playing a lot of Enter the Gungeon around this time and loved the dungeon environment so decided a dungeon crawler would be a great place to start.
I started by creating preset rooms with various doorways in each to give me a base template of how they would intersect with each other. The player would always start in a room with 4 doors, 1 in each direction so that after clearing the starting room they would have complete freedom to choose which direction they began navigating the dungeon.
I then created a system that would hold a list of room presets which could be instantiated upon loading in, the system would check certain parameters and if met, would spawn in a randomised room from the list so long as it is compatible to be linked to the room whose doorway leads into it and the number of rooms decided to populate the dungeon is larger than 0. A secondary system would then run checks to correct any anomalies within the generated dungeon layout such as any doorways on the edges of the map that lead to nowhere.
After placing in model assets I created several material variants for the grounds tiles and then programmed each room to randomly choose between these material variants to create purely randomised aesthetics, I also did this with the materials attached to wall segments. Finally each room would also have a 40% chance to contain trap type tiles, if this 40% is met a system would kick in that randomly picks an amount to be placed in the room up to a maximum of 6 per room, the trap tile type that would spawn in and the randomised location on the floor. Once all that was decided the normal floor tile that was in the trap tiles location would be replaced with the trap tile chosen.
There are two trap types, Spikes programmed to rise up out of their slots through animation after a timer and Crumble tiles, these will crumble away as the player drives over them revealing a pool of lava underneath.
After implementing player movement and working on several enemy mechanics I then turned my focus towards the players attack mechanic, the way it works is by use of Object pooling I would relocate the position of points as the trail is drawn behind the player. Each point would then be assigned an integer value in ascending order and when the players collision collides with the trail after drawing a shape the mesh generation system runs.
By getting the integer number of the trail point the player collided with and the last assigned point, any point with an integer value below the collision point is discarded to cut off any trail section that does not help form the shape created.
Once all points are accounted for that form the shape a script that uses an ear clipping algorithm to perform triangulation, once the position of the vertices and which vertices will make up the triangles for the polygon are sorted a mesh is generated and assigned to a mesh renderer object fed back to the scene.
Finally this new mesh can now detect collision within its mesh collider and this creates the players main attack mechanic of trapping enemies inside custom meshes.
To keep gameplay from becoming mundane I programmed some enemies to be invulnerable to damage from the main attack and instead would be destroyed when the player rams their vehicle into them instead.