LUX · Combat System & Hero Design
Designing the combat and hero systems of a roguelite FPS, balancing 40+ stats across 3 builds
tl;dr
In Lux you carry three heroes and swap between them mid-fight. I owned the combat systems end to end: three hero kits that each have a deliberate hole, four enemy archetypes built to shut one hero down, and the mana economy that makes every swap a decision.
- Swaps per encounter
- 1.5 → 2.7
- Playtests where "I felt smart" came up unprompted
- 6 / 8
- Stats balanced
- 40+

setting the context 👇
What is Lux?
A roguelite hero FPS built at the NYU Game Center in Unity 6, by Ahmed Shuwehdi, Ashley Newell, Destin Piagentini and me, and shipping on Steam soon. Wave-based arena combat with permadeath: each run is a fresh attempt to push deeper. The hook is 3 heroes, 1 fight: you switch between three hero kits mid-combat. The roster is the weapon. The swap is the skill.
The problem
Hero shooters make you pick a hero. We wanted you to play all three at once.
Build a combat loop where swapping between Heroes feels strategic.
What's the goal?
- Player goal
- Feel smart for every swap: the move you make on one hero pays off when you become the next.
- Design goal
- An increasing sawtooth curve of difficulty. Every fight peaks, drops, then peaks higher than the last. The floor rises. The rhythm holds.
The core loop
setting the scene 👇
What I owned
01
Owned combat systems end-to-end : economy, balance, status framework, enemy archetypes.
02
Balanced 3 hero kits anchored to one rule: no hero wins alone.
03
Designed 4 enemy archetypes : each engineered to neutralize a specific hero.
04
Tuned the resource economy across playtests ; one variable at a time.
05
Prototyped systems directly in Unity for live tuning during playtests.


starting with a reference
How the genre handles swapping
| Game | When you swap | Feels like |
|---|---|---|
| Overwatch | Between rounds, on death | A counter-pick |
| Apex Legends | Locked in pre-match | A commitment |
| Lux | Mid-combat, by choice | A tactical decision |
my design approach
Three pillars
Every system I designed for Lux was anchored to one of these three ideas.
P1 · Every hero has a hole.
Each of the three heroes is the wrong answer to at least one fight. The roster, not the individual, is the unit of mastery.
P2 · The economy is the spine.
Mana is the cost of becoming someone else. Tuning that cost was tuning the entire feel of the game.
P3 · Swapping should set up swapping.
Status effects, ult charge, and life-steal carry forward across heroes, so the move you make on Angel pays off when you become Brawler.
How I tuned it
Change one thing. Playtest. Repeat. No overhauls. No tuning five variables at once. One isolated change, one playtest, rolled back the same day if the curve didn't bend.
getting into the design 👇
System 01 — Three Heroes, Three Holes
H1 · Kalae — the economy hero
Ranged, sustained, with lifesteal that heals the entire roster. The safety net.
H2 · Manon — the commit hero
200 HP, 40 dmg primary, 360° stun, 30-range positional swap. Kills tanks. Eats long range.
H3 · Antares — the mobility hero
Charge-up beam, wall penetration past 30 charge, ride-able projectile. The only hero who can fight from outside the engagement range.
Design intent
Each hero was designed with a deliberate gap - a situation where they're the wrong answer. Angel can't take a punch. Brawler can't fight at range. Phaser can't handle swarms. Those gaps are the combos. Every ability was tuned so that what one hero sets up, another hero finishes.
Hero stats
| Character | Health | Primary | Ability E | Stat (E) | Ability Q | Stat (Q) |
|---|---|---|---|---|---|---|
| Kalae | 150 | 5 – 40 | Freeze (forward) | 4 secs | Invulnerable / wall pass | 5 secs |
| Manon | 200 | 40 | Swap location | Instant | Stun (360°) | 3 secs |
| Antares | 170 | 2 | Shooting star | 7 secs | Health orb | 15 secs |
System 02 — The Combat System
Four enemy archetypes. Each one designed to neutralize a specific hero & to require multiple heroes to deal with
E1 · Charging Tank
150 HP · 25 DPS rush · 3 sec charge window. Neutralizes Phaser. Forces Brawler engagement. The encounter that teaches new players which hero is for melee.
E2 · Swarm
30 HP · 5 DPS · zigzag movement · spawned in packs. Neutralizes Phaser's beam. Forces Angel/Brawler AOE. Cheap individually, overwhelming in numbers.
E3 · Shooter
70 HP · 10 DPS · 15-range projectile. Neutralizes melee-only commitment. Forces ranged engagement or aggressive positioning via Brawler's Swap.
E4 · Mortar
100 HP · 30 dmg AOE shells · 1.5 sec flight time · friendly fire ON. Neutralizes static play. Forces movement. Friendly-fires other enemies if you bait the projectile.
Hero × enemy time-to-kill
| Enemy | vs Kalae | vs Manon | vs Antares |
|---|---|---|---|
| Charging Tank | 15 sec | 5 sec ↑ best | 30 sec ↓ worst |
| Swarm | 15 sec ↓ worst | 1 sec ↑ best | 5 sec |
| Shooter | 4 sec ↑ best | 12 sec ↓ worst | 8 sec |
| Mortar | 10 sec | 20 sec ↓ worst | 4 sec ↑ best |
System 03 — Soul swap economy
| Parameter | Value | If playing Angel |
|---|---|---|
| Mana cap | 100 | — |
| Cost per swap | 33 | — |
| Swaps before empty | 3 | 3 |
| Mana regen / sec | 2 | 4 |
| Time to refill (full) | 50 sec | 25 sec |
| Swap animation lock | 2 sec, no movement | 2 sec, no movement |
Status effects
The single most important number in Lux is 33 - the mana cost of one Soul Swap.
Angel is the bank. The other two heroes are the spenders. Players don't ask "should I swap?" - they ask "can I afford to?"
A status effect in Lux is a configurable object with three independent axes - duration, stacking, and control flags. A player on one hero can set up their next hero before they've even swapped.
That's not a combo between two players. It's a combo between you and your past self.
looking back
What did I learn?
Good systems design is invisible.
But it leads to strategic and fun game feel, which is the goal of a good systems designer
