Computer games programmer, currently in 4th year at Abertay University - Dundee
 CV About    UE 5.6 Cave Map Generation
Link to up-to-date project: Up-to-date build
Huge changes to project since November with the main changes being:
Landscape, region and layer generation remains similar to the November build, with the main changes being how the path generation is performed. Can now specify which pathway algorithm is being used as well as its unique parameters. When specified, the layout can then be saved to a data asset file which can then be used for loading and testing.
With the addition of multiple pathway techniques, a problem arose that the algorithms can generate pathways that were non-contiguous and isolated from each other. To fix this, a method of island detection using a flood-fill technique called Breadth-First Search (BFS) was implemented. After islands are detected a method was then employed to join them by:
Drunkard Walk implementation remains the same but have added the following algorithms:
Modifies the Perlin noise function used by generating the landscape into a set amount of user defined “Worms” that create pathways either at random points within the grid or joins these worms together to create a singular pathway. Number, length, frequency and seed parameters can all be adjusted to change the behaviours of these worms. Island detection & joining is applied after generation to ensure valid layout.
Employs multiple specific drunkards walks around a starting “Seed” area to generate the pathways. Each walker travels until it comes into contact with a path tile, in which its previous tile becomes a path and the walker dies. Process is repeated until a layout size has been met. 3 types of DLA are implemented:
Considers all tiles within a grid as either Path or non-Path. Changes the state of these tiles depending on the states of the surrounding neighbouring tiles. Many rules exist for this type of generation but only two methods are implemented within the project. Currently only considers immediate neighbours (1 tile away) and can progress iteration of generation to produce differing layouts.
UI environment:

In-game environment:
For the dissertation side of the project, a build is created that employs a testing environment containing a UI and multiple saved layouts for participants to explore. The goal of the environment is for the player to explore the layout with a controlled character and reach a specified exit tile. Questions about the layouts are then asked of the particpant regarding the nature and suitability of the layout.
Currently this aspect of the project is for internal University use only but may be opened up in the future.
This project will look at the effectiveness of multiple procedural generation technqiues in generating a cave system for isometric games. Goal of project is to create a continuous game map by stacking multiple layers of procedural generated levels.
Link to 27/11/25 build: Demo
The current formation structure:
Uses drunkards walk to generate a path from a designated start point until a specified path size or iteration limit has been met. Iteration ends when path is no longer able to proceed (all surrounding neighbouring tiles have already been visited) or has met path size.
Uses UE defualt perlin noise to adjust all height values of landscape tiles. This can be adjusted by modifying the noise scale and the height multipler which governs the max height of the generation.
Voronoi regions are created by using seed locations planted at random within the grid. TIles calculate and are assigned to the seed location they are closest to. Number of seeds can be adjusted but currently there are only 5 unqiue biomes immplemented.
Combining each of the previous techniques generates a map with random characteristics
Specifying how many layers to generate will perform the level formation for each layer. The result is that each layer will have its own unque properties.
At time of this post, all layered levels will share the same generation parameters (output still random) but will be individually assigned in later builds Perlin noise is currently normalised to give a flat base, this is for testing and will be reverted in future builds. Other notable developments are in the readme of the project files.
