What I set out to build
I wanted to make a real game before I knew much about game development. Without an engine, even basic things like movement, collision, rendering, state, and level behaviour had to be implemented directly.
My contribution
- Led the project and contributed design and programming.
- Worked on the game loop, rendering, movement, collision handling, and enemy behaviour.
- Added tile-based level tooling and JSON persistence.
- Built directly in Python and Pygame without a game engine.
Problem & approach
I built the game with collaborators in Python and Pygame. I had to break it into systems, debug the interactions between them, and keep adding features without losing track of the code. Player and enemy entities, tile maps, rendering, and screen states are separated; a custom editor saves and loads levels as JSON.
How it works
- 01
Run the loop
Run a custom game loop.
- 02
Update state
Read input and update player/world state.
- 03
Resolve collisions
Resolve movement and collisions.
- 04
Render
Render the level, entities, and interface each frame.
- 05
Change screens
Move between game states and level logic.
Results & progress
- No game engine
- Python + Pygame
- Custom editor
- Level tooling
- A complete playable 2D platformer and one of my first substantial software projects.
Screenshots
Limits & lessons
Limitations
- An early collaborative project that shows my progression, rather than production game-engine work.
What I learned
- Dystopia matters to me because it was the first time I really felt what it was like to keep pushing through a software problem until a large thing existed. It taught me debugging, decomposition, and how quickly code becomes difficult to manage when systems are not separated well.