Inspiration
The theme “Set in Stone” immediately made us think about commitment and irreversibility. In most fighting games, players react in real time, but what if every move had to be chosen in advance? That idea led to Locked In, a boxing game where strategy replaces reflexes. Once you select your sequence of moves, they’re set in stone. The round then unfolds automatically, revealing whether you outsmarted your opponent.
We were inspired by turn-based strategy games, mind games in competitive fighting, and the psychological element of predicting an opponent’s next move.
What it does
Locked In is a 1v1 online boxing strategy game.
At the start of each round, players are given a short time window to select a sequence of moves — attacks, defenses, and counters. The number of moves per round varies, adding unpredictability.
Once the timer hits zero, both players’ move sequences are locked in and sent to the server. The round then resolves step-by-step in cinematic fashion, showing:
Each player’s chosen move
Damage dealt or avoided
Health bar updates
Custom animations for each move combination
The winner is determined across multiple rounds based on health remaining.
The twist: there is no mid-round control. Once you commit, you watch your strategy play out.
How we built it
We built Locked In using: Python Pygame for rendering, animation, and audio A custom client-server networking layer for online multiplayer A structured architecture separating: Game (graphics + rendering) GameSession (game state + transitions) Logic (networking + move resolution)
The combat system works in discrete “steps.” After both players submit their move lists, a resolver generates a structured list of step outcomes. The session then advances through these steps over time, applying damage and triggering animations.
For visuals, we: Recorded real-life move footage Converted photos into frame sequences Built a StepAnimation system that synchronizes animation timing exactly with step duration Background music and sound effects were integrated using pygame.mixer.
Challenges we ran into
Networking timing issues – Handling connection states and making sure the game didn’t block while waiting for responses.
State management – Ensuring clean transitions between CONNECTING, SELECT, RESOLVE, and GAME_OVER states without logic leaking into the graphics layer.
Animation synchronization – Making animations match step timing exactly, regardless of frame count.
Architecture separation – Avoiding the temptation to mix rendering logic into session or logic classes.
Edge cases – Handling empty move lists, disconnections, and mid-round game over conditions cleanly.
Accomplishments that we're proud of
A working online multiplayer experience. A clean separation of concerns between game state, networking, and rendering. A flexible step-based resolution system. A dynamic animation system driven by real footage. A strategic mechanic that genuinely reflects the theme “Set in Stone.” Smooth state-driven music and sound integration. Most importantly, we built something that feels polished and cohesive within a short hackathon timeframe.
What we learned
Clean architecture dramatically reduces debugging time. Networking design must be intentional from the start. Synchronizing visuals to logic timing makes gameplay feel significantly more professional. Constraints (like committing moves in advance) can create surprisingly deep strategic gameplay.
What's next for Locked In
If we continued developing Locked In, we would: Add ranked matchmaking and online lobbies Expand the move set with stamina, feints, and special abilities Introduce character classes with unique playstyles Improve animation quality and cinematic presentation Add AI opponents for single-player mode Create replay mode to analyze strategy
Long term, we’d love to evolve it into a competitive mind-game experience that blends fighting mechanics with turn-based strategy.
Log in or sign up for Devpost to join the conversation.