FANTAZEE
Apr 9, 2026 - Group Project HKU - Unity C# - Role: Lead Developer
Apr 9, 2026 - Group Project HKU - Unity C# - Role: Lead Developer
Internally, everything is stored as a 2D array because this is elegant and still decently fast
Heightmaps are stored as float[,], the type of tile is stored as UnitType[,] inside the LandManager.cs
To save performance, all the tiles are only updated every tick interval
When that happens, the UnitManager.cs evaluates both the land heightmap and the water heightmap, the highest is shown visually
Each tick, the water propagates outwards with speed depending on the unit type ( forest, concrete ) under it
Therefore, water travels faster over concrete than over nature
Water can only spread to a unit where the land height is lesser than the water height ( on that x, y )
The WaterManager has a reference to the heightmap of the LandManager, but not the LandManager directly, this facilitates interchangeability between classes ( fast and SOLID )
I created a script that interprets a text file to isolate the dialogue for the specific NPCs in the game
Within dialogue.txt, you can change the image you want the game to display for a specific character and sentence
The system supports multi-line dialogue, using quotes
Comments are supported with # ( like Python )
Game art credit --> @machinemantis + frinkywinky
Assignment: create a game that sparks imagination in the minds of people living below sea level amidst the climate crisis ( specifically Zeeland ) .
Initial design: four future "scenes" that were very very similar except for the materials on the buildings + dialogue. Me, wanting to save time for the team, decided to make a editor tool that allowed us to construct one scene wherein all the houses, vehicles and materials would be replaced automatically with accordance to the "future" of the game.
See short clip -->
However, over time there came more difference than commonalities between all the futures of the game. We iterated away from the "Placeholder System" into four separate scenes. The same player travels through all those scenes, to keep the hierarchy clean, she is spawned in when the scene is loaded.
Here you see a later version of the system -->
Now we see we have fully iterated away from the placeholder system. This allows designers and artists more ease of use with a more familiar experience compared to my own system.
30-3-2026 version -->
☆ This is the code for the water. It is similar to that of cellular automata.
I tried optimizing the SWAP part, but it never worked because the water is a float range whereas cellular automata uses true or false bools.
Notice how the land type affects the speed at which water spreads. This reflects how in real life, water moves slower over mangrove than concrete for example.
<--
☆ Here we see how a single line of dialogue.txt is parsed.
The Frame struct is persistent between calls because a single "Frame" of dialogue can span multiple lines.
This code allows for designers to easily change the dialogue of the game without having to even look at the code.
☆ This function does the setup for the a GameManager script while also validating that all the essential components required are in that scene. If not, it prints a helpful error message.
public void BeginQuest()
{
if (quests.Count <= 0)
return;
Display(string.Empty);
current = quests.Dequeue();
current.OnQuestFinished += EndQuest;
current.OnDisplayString += Display;
current.Setup();
}
private void EndQuest(IQuest quest)
{
quest.OnQuestFinished -= EndQuest;
quest.OnDisplayString -= Display;
BeginQuest();
}
☆ This is how the quest system starts and removes a quest. Here I use events.
<--
☆ This code is from Player.cs.
It is the context class for all the composites associated with the player like movement or interacting with the world.
<--
The Player is a state ( opposite of the DialogueSystem state ). In the sense that the player can't move or interact AND listen to dialogue at the same time; a state machine.
The components themselves are states, too. This means we have control over the order of execution of the components.
Luna Schütz - game art
Tim de Smidt - game dev <---- Me
Eline Adriaens - game des
Flynn Olde Dubbelink - game art