Wicked West
A relentless top-down roguelike survival shooter set in a twisted Wild West. Survive hordes of enemies, unlock upgrades, defeat bosses, and see how long you can last in a lawless land where death is permanent.
Overview
Wicked West is a top-down survival shooter with roguelike elements. The core loop is deceptively simple: survive waves of enemies, earn XP, unlock upgrades, repeat until you die. The challenge was making that loop feel tight, fair, and endlessly replayable.
This project was about building systems that create emergent gameplay. Every run feels different not because we scripted variety, but because the systems interact in unpredictable ways.
Technical Challenges
1. Balanced Permadeath
Permadeath is unforgiving by design, but it has to feel fair. When a player dies, they need to understand why and believe they could do better next time. This meant every damage source had to be readable, every death avoidable with skill.
I implemented a damage attribution system that tracks what killed the player and how. This data fed into balance iterations—if too many deaths came from off-screen enemies, we knew spawn patterns needed adjustment. If boss attacks were killing players who seemed to be dodging correctly, we revisited hitbox timing.
2. Wave Spawning That Scales
Static wave patterns get predictable fast. Players learn the rhythm, and tension evaporates. The spawning system needed to create consistent difficulty curves while remaining unpredictable.
The solution was a budget-based spawner. Each wave has a point budget that increases over time. Enemy types have point costs based on their threat level. The spawner "buys" enemies within budget, with weighted randomization favoring variety. This creates difficulty progression without identical waves.
3. Boss AI Patterns
Boss fights are the punctuation marks of roguelike runs. They need to be learnable but challenging, predictable enough to master but varied enough to stay interesting.
Each boss uses a state machine with weighted transitions. Early in the fight, they favor simpler patterns. As health drops, they become more aggressive and chain attacks together. The key insight was that players should always have a window to respond—no attack is instant, no pattern is inescapable.
Systems Implemented
- Wave Manager — Budget-based spawning with dynamic difficulty scaling and spawn point validation
- Progression System — XP accumulation, level-up choices, and persistent unlocks across runs
- Enemy AI Framework — Modular behavior system for bandits, cowboys, riflemen with shared and unique behaviors
- Boss State Machine — Phase-based AI with health-triggered transitions and attack chaining
- Blood Splatter System — Persistent decal system for environmental storytelling and visceral feedback
- Upgrade Manager — Stat modification system with stacking and interaction rules
- Audio Manager — Layered music system that responds to combat intensity
Architecture Decisions
The game uses a component-based architecture where enemies are assembled from interchangeable parts: movement behaviors, attack patterns, death effects. This made it trivial to create new enemy variants—a "fast bandit" is just a bandit with different movement parameters, not a whole new class.
The upgrade system uses a modifier stack pattern. Each upgrade adds modifiers to player stats, and the final values are computed at runtime. This allows for complex interactions (upgrades that multiply other upgrades) without hardcoding specific combinations.
Game Design Considerations
Survival games live or die on their feedback loops. Every action needs immediate, satisfying feedback:
- Kills trigger screen shake, blood effects, and audio cues scaled to enemy importance
- XP collection has distinct visual and audio feedback that gets more intense as you approach level-up
- Damage taken has momentary slow-motion to let players register what hit them
- Boss phase transitions have clear visual/audio telegraphing so players know the rules changed
Outcomes & Learnings
The game shipped on Steam with a functional core loop that players find engaging. Average session length exceeds our target, and the death-to-retry rate suggests the permadeath feels fair rather than punishing.
Key lessons:
- Playtest with fresh eyes constantly — What's readable to developers is often opaque to new players
- Juice matters more than you think — The difference between "functional" and "satisfying" is mostly feedback polish
- Data-driven balance is non-negotiable — Gut feeling gets you 70% of the way; telemetry gets you the rest
- Scope kills projects — We cut features ruthlessly to ship something complete rather than something ambitious
Future Improvements
If development continues, priorities would include additional boss encounters, a meta-progression system for permanent unlocks between runs, and co-op multiplayer. The systems were designed with these in mind—the wave manager already supports difficulty scaling for player count.