Inspiration
The idea behind Thin Ice was to take mechanics from games and genres that normally feel completely separate and see if I could make them work together in a single boss fight.
I really enjoy games where movement itself is something you have to learn, as well as games that constantly change what they expect from the player. That led me to the idea of fighting a boss while skating on ice, where you can't just stop or change directions instantly.
From there, the project became a remix of several different genres. The boss's turn takes inspiration from bullet-hell games, your turn uses an RPG-style command system, and attacking or healing turns into a D/F/J/K rhythm game.
All of that eventually became Thin Ice, a boss fight set in a weird frozen post-apocalyptic world where you face The Plowman, a wasteland warlord driving an armored snowplow.
What It Does
Thin Ice constantly switches between two styles of gameplay.
During the Plowman's turn, you skate around an arena and survive different attack patterns. Movement uses acceleration and momentum, so controlling where you're going is just as important as reacting to an attack.
After surviving the boss's attack, the game switches to a command system where you can choose between ATTACK, HEAT, and TAUNT.
ATTACK and HEAT transition into a four-lane rhythm system using D, F, J, and K. Your timing affects how successful your action is, with PERFECT, GOOD, and MISS judgments. The rhythm sections also change based on difficulty and include faster patterns and connected slider notes.
The result is a game that keeps remixing its own gameplay while still being one continuous boss fight.
How I Built It
I built Thin Ice in Python using Pygame.
I separated the game into different systems for the player, boss, combat, attack patterns, rhythm gameplay, music, effects, world, and UI. This made it much easier to experiment with individual mechanics without having to rewrite the entire game every time I changed an idea.
The visuals are drawn procedurally using Pygame rather than relying heavily on external art assets. I also used a low-resolution rendering pass that gets scaled back up to give the game its chunky pixel-art appearance.
The soundtrack is also generated programmatically. I created different musical layers and intensities so the music can change as the fight progresses.
I used ChatGPT as a development assistant throughout the jam for brainstorming, debugging, learning and explaining Pygame concepts, and assisting with portions of the code. I tested and integrated those systems myself and made the final decisions about the game's design, mechanics, balancing, and presentation.
Challenges I Faced
The biggest challenge was scope.
I was building the game solo, and I kept coming up with mechanics that I wanted to add. The difficult part became figuring out which ideas actually made the game better and which ones were going to take too much time to finish properly.
Another challenge was getting several very different systems to feel like parts of the same game. Skating, dodging boss attacks, choosing RPG commands, and playing a rhythm game could easily have felt like completely separate minigames. A lot of my time went into transitions, presentation, and balancing so that one system naturally leads into the next.
The rhythm system was another challenge. I experimented with generating note patterns around the timing of the procedural soundtrack. I was able to build the notes around the same musical beat subdivisions, although getting the visual rhythm clock perfectly synchronized with audio playback is something I would continue improving after the jam.
And, naturally, one of my final challenges was getting everything packaged, committed, and submitted before the deadline.
What I Learned
This project taught me a lot about managing scope and designing systems that interact with each other.
Technically, I became much more comfortable with Pygame, game states, timing systems, procedural drawing, momentum-based movement, collision systems, rhythm-game judgment, procedural audio, and organizing a larger Python project across multiple modules.
More importantly, I learned that getting something playable early is incredibly valuable. A mechanic can sound great on paper and feel completely different once you actually play it. Being able to test the game repeatedly helped me decide what needed to change and what was already working.
I also learned when to stop adding things. By the end of the jam there were plenty of features I still wanted to build, but finishing a complete, playable experience became more important than adding one more system.
What's Next
There are several things I would like to continue developing after the jam, especially tighter synchronization between the soundtrack and rhythm system, additional bosses and attack patterns, more developed pixel art, and further balancing.
For now, though, Thin Ice is exactly what I wanted this jam project to be: an experiment in taking a bunch of mechanics I enjoy, putting them together, and seeing how long I could keep the whole thing from cracking.
Log in or sign up for Devpost to join the conversation.