Primitive Riddles is a collection of different levels played in the first person, requiring the player to quickly adapt to new mechanics to solve puzzles. The game emphasizes dynamic soundtracks and utilizes mostly primitive shapes such as planes, cubes, spheres, and capsules (by which you can probably guess the game engine we are using). The minimalistic gameplay and UI aim to focus your attention on the tasks at hand, and we are implementing various shortcuts to appeal to speed runners. Combat is kept to a minimum and, in most cases, is futile, encouraging players to rely on stealth or evasion.
Countless Echoes
“Countless Echoes” was the initial level we developed, based on my 2D prototype of the same name and my novel “Zoëtropon.” The goal was to visualize echolocation on the screen, similar to how bats perceive their environment. We used a particle system of white cubes that rapidly decrease in size and brightness once spawned, allowing you to cast echoes and comprehend your surroundings.
The current solution is suboptimal as creating a different particle system for each echo decreases performance, causing framerate drops from 60 fps down to 30 fps, depending on your hardware.
We realized that, for orientation, you need to be in motion and rely on both the illuminated and the dark surfaces, which were previously blocked from echo particles by other objects.
The level includes gimmicks such as stalagmites rising from the ground when hit by echo particles, increasingly obstructing your path, or cylindrical enemies that are attracted by your echoes, give chase, cry a lot, and can be used as steppingstones. There are interactable switches, movable ramps, and touch particles that you can place by clicking on objects or simply walking around, making navigation in the dark easier. However, the current map is relatively small, merely demonstrating the mechanics and far from resembling an actual riddle room.
More importantly, we used this map to experiment with dynamic soundtracks by placing different sound sources on the player character and around the room. Currently, it plays Ole’s song “Neptune,” for which I recorded the electric bass.
Furthermore, we discovered an interesting acoustic illusion: while the dry mix is split into separate instruments and placed around the room to create spatial audio, the wet mix can be just one sound source containing the reverb of all instruments. If placed on the player character, it creates the illusion of spatial audio, regardless of where the player character is positioned in the room. Naturally, the reverb would change depending on the position, but the difference is so minimal that neither Ole nor I were bothered by the simplification. This insight was vital because it meant we did not have to calculate the reverb at playtime but could instead precompute it.
Desert Road
“Desert Road” originated from my idea of a level set in a Wild West ghost town, consisting of just one straight main road and cardboard facades next to it. The result turned out more vibrant, with randomly spawned single walls and colorful textures, which I created with my tool “Magots,” using AI-generated images of baboons as input data.
However, I achieved my intended goal of having world tiles procedurally created and destroyed in both directions as you travel along the desert road. There are world tiles on which the wall density is sparse, resembling the countryside, and others with tall, densely packed walls resembling downtown. The parameters follow a simple, eternal sine wave.
The goal is to reach the horizon door, which is tricky as it moves along the road with you. To bring it closer, you collect literal Easter eggs, but of course, there’s a simpler method that you need to figure out for yourself. There are also enemies: big, balloony, annoying bumblebee UFOs that float through the desert air and chase you away if you come too close.
Ole did a fantastic job on the dynamic soundtrack, which consists of a default countryside channel blending into a more euphoric downtown channel, and a desert channel that drowns out all other sounds as you walk too far into the desert. The closer you come to the horizon door, the more instruments are added to the mix. The buzzing sound of the enemies is also noteworthy, as it is just one looped and pitched sound file, adapting to a respective enemy’s size and velocity.
The level is almost finished, only requiring a basic UI with an Easter eggs counter and a bit of balancing.
Blind Corner
“Blind Corner” was heavily influenced by the horror game “Layers of Fear” and the puzzle game “Portal,” focusing on “impossible” rooms achieved by seamlessly teleporting the player character between certain points without them noticing. This opens new possibilities, such as forever walking around corners until you change directions or leading you into dead ends unless you overcome your fear and walk straight without looking to the sides.
Slightly scarier are rooms that shift their walls while you are not looking, or picture frames that change the depicted image when touched. We used textures from my algorithms “ClayGrinder” and “Magots,” as well as images generated with Stable Diffusion.
All in all, we managed to implement a system for the seamless teleportation of the player character. However, we could not use pre-baked lighting because minor changes in the room layout led to tiny, yet noticeable, changes in the lighting. A simple solution was to remove all light sources and equip the player character with a flashlight that has a limited range and can be aimed by looking around, fitting perfectly with the horror theme.
In its current form, the level is about halfway finished, requiring a second floor of eerie happenings. Also, Ole is yet to compose an eerie soundtrack.
Starling Rain
“Starling Rain” was inspired by a documentary I watched on the huge flocks of starlings above the city of Rome. They gather by the millions and form beautiful, ever-changing clouds, confusing birds of prey by flying in synchronicity, thereby not allowing the individual starling to be singled out by the predator.
How do they do it? How does the flock stay together? Supposedly, each starling keeps track of only its seven nearest neighbors, finding a new group every other second. This suffices to avoid collisions but stay flexible during rapid changes of direction without overstraining the starling brain.
Worth a simulation, I thought, and created my own Starling object the very next day. It soon became apparent that a few hours of tuning variables in C# could not achieve what eons of evolution had accomplished, but I came close. Of course, I had to increase the starling group size and the frequency of group reorientation. Because the result was still quite unstable, I added another (purely mathematical) component that pulls the starlings towards the flock center, as well as one that makes them flee from the player character. Through trial and error, I found parameters that made the flock fly in a quasi-equilibrium, with only a few outliers.
On my overpowered test machine, I could simulate 2,000 starlings with the desired framerate of 60 fps. Unfortunately, that is as far as I have come with this level. Obviously, the player should assume the role of the predator, but apart from some mountains that look like stacked disks and load way too long, the map and level are yet to be filled.
More Levels
We are not revealing our ideas until they are tried and tested. Come join us if you want to contribute.
⚠️ Primitive Riddles is a work in progress, with levels ranging from almost finished to not even conceptualized yet. Game development is a time-consuming process, and we have daytime jobs as well as many other obligations.
So far, we (aka “Silverfisk Games”) and our respective responsibilities are:
- Anton Hoyer: programming, writing, design
- Lars-Ole Kremer: sound, trailers
If you would like to join the team, feel free to get in touch by leaving a comment.
Leave a Reply