Your boss hits for 35. The player has 100 HP and a dodge with 12 frames of invulnerability. Someone on the team says "we need a hard mode," and the fastest thing you can do is multiply: damage x2, enemy HP x2, ship it. Now the boss hits for 70, the fight lasts twice as long, and the player dies to the same attack they always died to — only now they lose six minutes of progress instead of three. You didn't make the fight harder to solve. You made it more expensive to fail.
That's the trap. Difficulty modes built by multiplying numbers produce a game that is longer and more punishing, not deeper. The fix is to stop treating difficulty as one slider and start treating it as a small set of named, independent knobs that you tune deliberately — and to write them down somewhere your programmers can read.
Difficulty is four different things
When a player says a game is "too hard," they usually mean one of four specific things. Separating them is the whole technique.
Execution pressure — how precisely you must input. Dodge windows, jump timing, combo buffers, aim tolerance. This is the knob most likely to exclude players for reasons that have nothing to do with whether they understand your game.
Resource pressure — how tight the margins are. Ammo per encounter, healing items, currency income, time limits, inventory slots. This is where most "hard modes" actually live in survival horror and strategy games.
Punishment — what failure costs. Checkpoint spacing, item loss on death, permadeath, run length in a roguelike. Punishment doesn't change whether the player can beat the encounter; it changes how much it hurts to try again.
Information — how much the game tells you. Enemy health bars, telegraph clarity, attack names, quest markers, hit-chance percentages, tutorial prompts. Hiding information makes a game harder in a way that feels like discovery on the first playthrough and like tedium on the fourth.
Two games can both be "hard" by moving completely different knobs. A precision platformer is almost entirely execution pressure with cheap punishment — you die, you respawn in one second, three metres back. A survival horror game inverts it: the individual zombie is trivial to kill, but you have nine bullets and the next save room is fifteen minutes away.
Ask which axis your game is actually about, and protect it. If your game is a boss-rush action game where the fun is reading telegraphs, then execution pressure is your subject. Making a "hard mode" that halves healing items is off-topic — it's making a different game harder.
Turn the knobs into a data table
Once you've named the axes, the implementation rule is simple: no if (difficulty == HARD) branches in gameplay code. Difficulty becomes a row of multipliers and flags that systems read, and adding a mode later means adding a row, not auditing forty files.
A minimal table for a 3D action game might look like this:
| Variable | Story | Normal | Hard | Notes |
|---|---|---|---|---|
enemy_damage_mult |
0.5 | 1.0 | 1.4 | Never above 1.5 — one-shots feel unfair |
player_damage_mult |
1.25 | 1.0 | 1.0 | Shortens fights instead of making them safe |
dodge_iframes |
16 | 12 | 10 | Frames at 60fps; floor of 8 |
parry_window_frames |
10 | 6 | 5 | |
enemy_aggro_max |
2 | 3 | 5 | Simultaneous attackers, not total spawns |
heal_items_per_arena |
3 | 2 | 1 | |
checkpoint_on_boss_phase |
true | true | false | Punishment knob |
show_enemy_health |
true | true | false | Information knob |
telegraph_flash |
true | true | true | Never disable — this is readability, not difficulty |
Three things are worth stealing from that table. First, the floors and ceilings in the notes column: they're the design guardrails that stop a future balance pass from quietly producing one-shot kills. Second, player_damage_mult goes up on easier modes rather than enemy damage going to zero — a shorter fight is more respectful than an unloseable one. Third, some rows never change. Telegraph flashes, audio cues, and hit feedback are readability, and readability is not a difficulty setting. If a player can't tell what killed them, that's a bug on every mode.
This table is exactly the kind of thing that rots when it lives in a Discord message. Put it in a balance sheet alongside your other tuning data — in GameDesignerX, the balance and economy module is built for this: one row per variable, one column per mode, versioned so you can see what a change actually moved.
Let players build their own mode
Fixed modes are a guess about which combination of knobs a given player wants. Exposing the knobs individually is strictly better when you can afford the UI, and several well-known games have shown it doesn't cheapen the experience.
Celeste's Assist Mode is the clearest example: game speed, infinite stamina, invincibility and extra air dashes are separate toggles, framed in-game as a way to adjust the experience rather than a failure state. Hades offers God Mode, which grants escalating damage resistance the more you die, and — pointing the other way — a Pact of Punishment that lets players stack specific difficulty modifiers for better rewards. Same architecture, both directions.
Practical guidance if you go this route:
- Group toggles by axis, using the player's language: "Combat", "Timing", "Exploration" — not "execution pressure."
- Allow changes mid-run. A setting you have to restart to use is a setting most players won't try.
- Don't gate achievements behind the hardest configuration unless competitive integrity genuinely demands it, and say so clearly if it does.
- Keep accessibility settings out of the difficulty menu. Remappable controls, hold-instead-of-mash, subtitle size, camera shake and colour-blind palettes are not difficulty options. A player who needs hold-to-interact isn't asking for an easier game; making them turn on "Story Mode" to get it is a bad trade you've forced on them.
Validate the knobs, don't guess them
Difficulty tables are hypotheses. The cheapest way to test them is to instrument what you already run in playtests:
- Attempts per encounter. Your design intent for a mid-game boss might be 3–5 attempts on Normal. If your test group averages 11, the problem is one specific attack, not the mode.
- Time-to-first-hit on a new enemy — tells you whether the telegraph reads.
- Resource at encounter end. If players finish every arena with full healing items, your resource knob isn't doing anything and you should stop tuning it.
- Mode switching. If players drop from Hard to Normal, note the exact encounter. That's your difficulty spike, precisely located.
Run the same fight with two testers per mode and log it in your playtesting notes with the build number attached, so you can tie "boss got easier" to a specific change rather than a vibe.
Shipping checklist
- Every difficulty-sensitive value lives in a data table, not in gameplay code
- Each variable is tagged with one of the four axes
- Floors and ceilings written down for every numeric knob
- Readability values (telegraphs, audio cues, hit feedback) identical on all modes
- Difficulty changeable mid-game, or the restart requirement stated up front
- Accessibility options in their own menu, available on every difficulty
- Each mode played end-to-end by at least one tester who didn't build it
- Achievement gating decided deliberately and documented
The underlying point
"Hard mode" isn't a number. It's a statement about what your game asks of the player — sharper reads, tighter margins, harsher consequences, or less hand-holding. Pick the one your game is about, express it as named variables with limits, expose what you can, and test it with real attempt counts instead of instinct. You'll ship two or three modes that feel designed, rather than one game and two multipliers.