Lost in Time


What’s it about?

Lost in Time is a 2D platformer where time only moves when you move. You can always stop time by not moving, and so strategically move through the level while dodging enemies, bullets and collecting gems. It consists of a small tutorial level introducing all mechanics and three more levels, each more challenging than the last.

You can download it here

The Development Story

Lost in Time was my first bigger student project during the second semester of university. Inspired by SuperHot I began working on it after reading up on MonoGame. I started out with character movement, movement, jumping and gravity and also the character animations were quite easy to implement.
Next was loading the map from Tiled. And that took quite some time, as it turned out the format I exported saved the tile IDs different, so ID 50 was 51 in the exported file. And it took me way too long to figure out why my map was not loading correctly. But after the map loading finally worked I started with collision that went quite well, but a problem came up that persistent throughout development: minor tunneling. That means with different fps (60fps lock vs 500+fps unlocked) the character would collide slightly different and sometimes move a bit into collision geometry. I ended up going with unlocked framerate only as the game ran at 200+fps even on a low-end laptop to provide a consistent experience.

One of the nest few tasks was adding different types of enemies, there are gumba-like enemies that you can jump on, flying enemies that shoot bullets (which you can reflect with a powerup), and spikes that follow you around the level. And then collectables: gems that give points, restore health and shields that make you invincible and reflect bullets. All in all these two tasks were pretty straightforward.

Finally, there was the spawning of enemies and collectables, I ended up with a system that randomly spawns enemies and collectables. I managed to get spawned items to not overlap each other or the level geometry.


The good things

The controls are responsive and the movement and collision work pretty flawless. Enemy behavior works, they behave as intended and taking damage and killing them works fine. The game runs also really well, even with a stress test of over 1500 enemies on screen it runs way over 200fps.
As my first bigger project in university, it really allowed me to apply my coding knowledge that I learned throughout the semester. I am quite pleased with the code I wrote, although it got a bit messy in the end, especially with the UI (but I didn’t know any design patterns, e.g. observer, yet). 

Things that didn’t work that well

Even if it is the core mechanic of the game, I don’t think that the time mechanic added so much to the game. I think it actually takes away a bit of the flow and it can be also confusing for people not too familiar with games/platformers. The game itself would have also been a good platformer without the time stopping mechanic. As touched upon the UI code was not as clean as I would have liked, but it worked well enough.

Finally, I think it is a really solid platformer and a great first student project.