Gem Runners

Gem Runners is an asteroid-mining game built in C# with MonoGame, a lightweight framework for cross-platform games. You explore asteroids for gems and have to get out before time runs out.

Beyond MonoGame, I tried to avoid other libraries and frameworks as a learning exercise. I built the engine alongside the game, including movement, collisions, lighting, and a custom tiling system.

The tiles are drawn in quarters, choosing each piece based on its neighbours so the edges join up as you mine. Lighting and fog of war reveal the tunnels as you explore. Driving and drilling can also weaken the ground, causing it to collapse into lava.

A mining vehicle exploring rocky asteroid tunnels beside lava, with lighting and a minimap
Mining, lighting, and the tiling system.

The asteroids are procedurally generated using perlin noise, with different materials and hazards in the crust, mantle, and core. I built a separate viewer to generate asteroids and inspect their layers without playing through them:

The procedural generation viewer displaying an asteroid with rocky layers, caves, and lava for seed 853
The asteroid-generation viewer.

For the menus and inventory, I built a UI system inspired by React and flexbox: a tree of elements with rows, columns, padding, and alignment. That also meant handling text measurement and wrapping, including manually recording the coordinates and width of each character in a font PNG. Useful to learn, though fairly tedious!

I also learned pixel art and made the artwork in Aseprite, from the terrain tiles to the character and mining vehicle.

A pixel art character and mining vehicle inside a tiled base, with inventory items along the bottom
The base interior and in-game UI.

As much as I enjoyed building the game, I ultimately struggled to make the core loop fun, and didn't pursue releasing it. I'm grateful for the technical lessons and now have a lot more respect for game designers!

Source on GitHub