9 May 2020

Ludum Dare 46: Ruin Looter

I made this game for the Ludum Dare 46, where the theme was Keep it alive. I kind of disregarded the theme completely because I had already decided I wanted to further develop the NES-style map editor and framework that was used in Tasty Camping. The game is inspired by the Lode Runner games, especially the Macintosh version which I played endlessly as a kid. The best part of that game was the level editor.



My little editor could already handle tilemaps, animated sprites and character movement. To make a platformed I needed to add collision detection and states for falling down and climbing the ladders. I made the states using a state stack, so that every state could either keep updating, stop updating or create a new state on the stack, which would then be updated. This proved very handy, because the states had very little connections between them and none of them had to worry about which state to return to.

For example when the player character would walk, then climb a ladder and then move sideways when on the ladder and fall back down, the state stack would work like this. The active state is the rightmost one.


> Walk
> Walk > Push climb state
> Walk > Climb
> Walk > Pop climb state
> Walk > Detect that there is no floor under character
> Walk > Push fall state
> Walk > Fall
> Walk > Detect floor under character: Pop fall state
> Walk

 I tried to apply the same idea to game states as well, but because Lua always returns a reference instead of copy I just hacked around it, but in theory it would work too.

I asked around if anyone was interested in programming, music or graphics and my friend Aviul agreed to do the animations for the player and the chests. They also created some stalagmites and waterfall tiles. Rest of the graphics were taken from Open Game Art.

The game itself is very simple. Go to the cave and collect all gold. When everything is collected the game simply ends. I did not have time to make any music or sounds, but I am happy that I managed to get the player state stack working, although it could be better :)

You can download the game for Windows from my google drive.



Making of Ozymandias

I have been postponing writing about Ozymandias because I feel quite embarrassed about it, but anyway...

Ozymandias was my second 3D demo, I started working on it right after Lepus Minor and aimed to participate to the Assembly Summer 2019. Because Lepus had worked out so well I kind of jumped right into a feature overload with this one. The original sketch had something like 9 different scenes, each with separate models and effects. That was the first silly thing to do :)

Then for many weeks I just sat around trying to get other people on board without much success. In retrospect, just starting to work on the first scene would have led me faster to the next phase.

As summer drew nearer I understood that my plan was way too complex and proceeded to cut it down to one scene which was the main point anyway. Just a camera flying over a desert and arriving at the ruins of the city in the desert. That was the central idea in the poem anyway.

For that I needed a big desert terrain model. I had the fractal terraing generation code from Lepus, but for some reason thought that it would be too much for a gpu to handle if it was much bigger. This leads to many hours of premature optimization as I tried to break the terrain into smaller tiles and have Level of Detail versions of those tiles generated automatically. It almost worked, in a very frustrating kind of almost. Then I just abandoned that idea and made a very low poly terrain instead.
Here you can see the LOD system in action when zooming out. It would not make seamless tiles :I



At this point my head was clear enough to make a very focused plan that would get the demo done in time for Assembly. I made the models of the gate and the palace in the magicavoxel, mixed the soundtrack from existing songs using Audacity and programmed a nice skybox that could change color as the sun moved over. And made the shader for the texts that got blown away by the wind.
The sky is a sphere and the texture coordinates are moved as the sun moves, creating the gradient effect.

Using texture coordinates on a small gradient image allows the gpu to do the color blending and results in a soft gradient.
Ambient light color and intensity was also linked to the suns position, which created this hazy morning dust effect.

I first modelled the gate and the used the eraser tool to break it down. The graffiti was texture plane positioned inside the gate.

And at the very last moment my friend Bass Cadet agreed to make some music, which they did in about a day and it fit perfectly.

I was not really happy with the demo, as my original plan had been much grander, but I just wanted to get over it and the main idea was clear enough. I am happy that I released it and I hope I learned a valuable lesson about feature creep and expectations :)

Here is the final demo:


During the event I got feedback that the part where the greets were drawn as graffiti inside the gate was really nice idea. Hearing that made me really happy and it felt like it all had been worth it in the end.




If I make such 3D demos again I am going to spend time creating a way to place objects in the 3D scene, because I wasted a lot of time adjusting positions in a text file, restarting the demo and adjusting again.