Linn Falls is a relaxing puzzle game that is designed to get more complicated as you go through the levels. With mechanics like tapping (to break rocks and flip levers) and dragging (to move boulders and rotate the camera), there is no shortage of unique interactions to explore.
There are two worlds with ten levels each, an endless mode, and a nighttime mode!
This was the first project that I produced, and I could not be more proud of the end result!
Some of the core aspects that we decided on going into production was the orthographic camera, cozy atmosphere, relatively easy puzzles, and low fidelity graphics. I set these pillars up to align everyones vision throughout the project.
At the very core of Linn Falls is water. The entire premise of the game is to find a way to get the water flowing downward off the screen. That being so, the water system took up the most of my time during the development period. The inital water system went though numerous small changes to allow it to update as performant and dynamic as possible. I ended up with a system that uses queues that water blocks can add themselves to for an update next cycle. Three queues are used, one for just receiving an update, one for getting polluted, and one for destroying. Once I had laid the groundwork with these queues, the water was able to dynamically update through a level.
Water is split up into "Source" blocks and "Water" blocks. Source blocks act as the origin point of a levels water flow. Usually placed above the screen to give the illusion of the water flowing from the previous level, Source blocks hold the queues and are used to check if pollution has corrupted too much of a level. This video showcases the water system in action alongside the pipe mechanic.
I loved developing the water system because it was something I had never done before. About a year and a half later, I went back and improved a lot of the systems with the goal of eventually improving the visuals of Linn Falls. This water is not a part of the mobile game, however it showcases efforts to create something that updates "smoother" than the tick updates of the previous water system. This new water system also uses object-pooling for better return on investment with each water block and a HashSet to determine which locations are occupied which speeds up searches considerably.
Spawning a new water block
// Spawns a new groundwater block at location. Adds the block to the spawn queue.
private void SpawnGroundwaterBlock(Vector3 offset){
// Get location and spawn block.
Vector3 spawnLocation = transform.position + offset;
GameObject temp = Instantiate(groundwaterBlock, spawnLocation, SpawnDirection(spawnLocation));
Water tempWater = temp.GetComponent<Water>();
// Name the block.
temp.transform.name = "Groundwater " + Source.instance.GetNameNumber();
// Child the block.
temp.transform.parent = Source.instance.transform;
// Pollution status
if(isPolluted)
Source.instance.AddToQueue(tempWater, 2);
// Assign value to new block.
tempWater.SetValue();
// Add the block to the spawn queue.
Source.instance.AddToQueue(tempWater, 0);
}
Spawn queue Update
// Spawning
private void SpawnQueue(){
// Go through spawn queue and call spawn function for Water.
int qCount = spawnQueue.Count;
//print(qCount);
while(qCount > 0){
spawnQueue.Dequeue().SpawnCheck();
qCount--;
}
spawnCooldown = spawnBuffer;
}
The second half of Linn Falls' gameplay are the various mechanics that act upon the water. These include tappable rocks, flippable levers, rotating pipes, sliding rocks, and polluted water. Each of these mechanics was designed to be unique, fun, and to be used in tandem with other mechanics. For example, a rock might be blocking a lever that needs to be flipped, or a sliding rock is blocking off polluted water.
We had enough time to add an extra gamemode in as well, our endless mode. Endless mode procedurally lines up islands, allowing infinite randomized play! I would have loved to find a way to generate unique islands but we had decided that was not within our scope. Still, endless mode was super fun to create and balance!
The last feature developed was our nighttime mode, which pits the player up against the darkness. This runs through the normal 20 levels of Worlds 1 and 2 with the added challenge of low visibility. Glowing plants light up the path as water reaches them which makes the levels feel alive.
Linn Falls was an incredibly fun project to work on. Although the inevitable issues arrived, this project was truly made incredible just because of the team working on it.
Our biggest issues proved to be technical. Problems with our water shader had us showcasing our game with white boxes for most of production. The water flowing itself was a complicated algorithm that took a few months and numerous reworks to perfect. With Click Up being a software I had never used and project management something new to me at the time, there were weeks with delayed communication on my part. This was a large oversight on my part and was fixed with a set schedule of team meetings which in turn increased our understanding of the game and our morale in general.
I am incredibly grateful to call Linn Falls a project of mine and Team Azure a team that I had a part in leading.
Team Azure
Producer and Programmer
August 2023 - December 2023
Skills: Mobile Development, Android, C#, Publishing