AI Game Dev Search

Why your fights feel repetitive: mixed enemy roles, changing arenas and three more combat encounter design tricks

Five encounter design tricks that keep fights fresh, shown side by side: mixed roles, varied arenas, encounter rules, breaking the favourite plan and no repeats. With a copyable Claude Code skill.

Tested with Claude Code 2.1.296 · Opus 5.5

The same three enemies on flat ground, then on high ground, by a pillar and a spike pit.
What we asked“Make a web page that demonstrates the combat encounter design tricks that stop fights feeling repetitive one at a time, so anyone can see and feel each one within a few seconds. For each one, show the same short moment side by side: without it on the left, with it on the right, playing in a loop, with a caption that says what just happened and a replay button. Where it helps, let me play the moment myself. It will sit inside a blog post about 720 pixels wide, so it has to look good at that width and on a phone. Also make each one viewable alone with ?trick=<id>&solo, using these ids: mix-roles, vary-arena, encounter-rules, break-the-plan, no-repeat. Use the same few enemy types and the same three player options on both sides, so only the way they are combined changes. Use the internet freely for better results: free CC0 art, fonts or small libraries (for example Kenney's CC0 assets) are welcome; download anything you use into this folder so the page works without outside links, and list each item with its licence and source in CREDITS.md.”

What happened

  • Loaded the encounter-variety skill
  • Downloaded Kenney's free Tiny Dungeon sprites and pixel font
  • Wrote a small combat simulation with a bot hero and three weapons, and tuned the fights in Node before building the page
Claude
Break-the-plan isn't working yet: a Sword-habit player keeps "winning" with the Sword because it lands the finishing blow. I'll count the winner by damage dealt, and make armour permanent so only the Hammer hurts it.
  • Added a ledge over a chasm, so each of the three rooms favours a different weapon
  • Fixed a pathfinding loop and a line-of-sight bug that froze a fight
  • Checked the page at 760 px and on a phone, using the play buttons, Replay and Deal one yourself, with no console errors
Claude
The same bot played 20 fights with every trick off and on: different fights went from 7.3 to 19.7, and weapons used per fight from 1.07 to 1.97. With the tricks on, the bot loses about 1 fight in 20, because the rules make some fights harder.

Your combat works, and the first few fights are fun. By the twentieth, the player is doing the same thing in the same way, and the only change is that enemies have more health. Halo designer Jaime Griesemer said Halo 1 had “maybe 30 seconds of fun that happened over and over”, kept fresh by “playing it in different environments, with different weapons, different vehicles,” “against different combinations of enemies” (Engadget). Variety comes from new combinations of the same pieces, not bigger numbers.

Every demo below uses the same four enemies (Brute, Archer, Rat, Bat) and the same three weapons (Sword, Wand, Hammer). The fights are simulated, not animated by hand: a bot hero picks the best weapon for what it can see, and the captions come from what happens. Play this side lets you pick the weapon yourself, by tapping the icons or pressing 1, 2 or 3; the hero still walks on its own.

1. Mix roles

Build every fight from at least two enemy types that need different answers: a slow tank in front with a ranged attacker behind, a fast rusher next to a careful one. One type alone is a drill, not an encounter. On the left, four Bats, and the Wand beats all of them. On the right, an armoured Brute needs the Hammer, the Archer and Bat want the Wand, and the Rat up close wants the Sword. Options used: 1 of 3 on the left, 3 of 3 on the right.

2. Vary the arena

Put the same group in different spaces, and make each space favour a different answer. A tight corridor bunches enemies up; high ground or a gap keeps them at range; cover forces you close. Both sides here fight the same group (2 Archers and 4 Rats) three times. On the left, it’s the same room every time, and the Hammer does the most damage in all three. On the right, the corridor favours the Hammer, a ledge over a chasm favours the Wand, and a room of pillars favours the Sword.

3. Encounter rules

When a fight needs to be harder, give it a rule instead of more health: a time limit, armour, flyers only, protect something, darkness. About one fight in three is a good rate. Hades’ Pact of Punishment works this way; a fan guide describes Tight Deadline cutting the time you have to clear each region, and Benefits Package giving armoured enemies extra perks (RPG Site). This is fight 3 of 3 on both sides. On the left, the enemies get +100% health, and the same fight just takes 6.5 s instead of 3.3 s in our demo. On the right, the fight gets a rule. Press Replay to step through all five: time limit, armour, flyers only, darkness and protect the crystal.

4. Break the plan

Players find a favourite and stick with it, which is fine until it’s the only thing they do. Track the option the player uses most. Once it wins more than about 60% of fights, send one where it’s weak, and always leave another option that works. Super Mario Bros. does a version of this: the Buzzy Beetle is immune to fire, so “a fireball is useless against them” (StrategyWiki). In the demo, a wins bar shows the Hammer taking most fights. On the left, the next fight lets it win again. On the right, the game notices and sends flyers: the Hammer whiffs, and the Wand and Sword take over.

5. No repeats

Even good fights get stale if the same one comes back twice in a row. Describe each fight as a combination (enemy mix and arena, plus a rule if it has one) and deal from a shuffled list that skips anything seen in the last five. Griesemer said the same of Halo’s missions: they are “constantly changing the context on you” (Engadget). Both sides here draw 12 fights from the same 9 combinations, and repeats are flagged in red. On the left, random picks bring several back within five fights; on the right, the shuffled bag brings none. Deal one yourself adds fights one at a time.

Measure it before you add more

Variety has a cost: every rule and every new room makes some fights harder, and a player can lose to a fight they didn’t expect. In our demo the same bot played 20 fights with every trick off, then on. Different fights went from 7.3 to 19.7, the longest run of near-identical fights from 2.5 to 1, and weapons used per fight from 1.07 to 1.97. The share of wins taken by the most-used weapon only fell from 57% to 47%, because it was already under the 60% line. And with the tricks on, the bot lost about 1 fight in 20, against none with them off. Some rules of thumb:

  • Leave an answer that works. Breaking the favourite plan should push the player to a second option, never leave them with none.
  • Rules on about one fight in three. Every fight with a twist is as flat as none.
  • Keep the pieces readable. Variety comes from combining enemies the player already understands. For making each enemy ask its own question, see enemy design in video games.

Add it to your game

  1. Copy the skill at the end of this page into your project.
  2. Ask your agent: “My fights feel repetitive. Add more variety to the encounters.”
  3. Play it, then tune in plain words: “The darkness rule comes up too often, make it rare.”

Art in the demos: Tiny Dungeon and Kenney Fonts by Kenney (CC0).

The skill that made it work

This is the whole skill we gave Claude Code. Copy it into your project and ask your agent to make your fights less repetitive. Every trick sits behind its own switch, and the last step plays 20 fights with them off and on.

encounter-variety
  1. List the enemy or task types, arena layouts and the player's main options (weapons, abilities, units, tools), and which option answers each type best.
  2. Put every trick behind one named switch in a single settings object, all on by default, so each can be tested on its own.
  3. mix-roles. Build each encounter from at least two types that need different answers: a slow tank in front with a ranged attacker behind, a rush order next to a careful one. One type alone is a drill, not an encounter.
  4. vary-arena. Put the same group in different spaces: a tight corridor, an open field, high ground, a hazard in the middle, lots of cover. Each layout should favour a different option.
  5. encounter-rules. Give about one encounter in three a rule instead of more health: a time limit, armour, flyers only, protect a target, darkness. Hades' Pact of Punishment adds rules like a time limit per region.
  6. break-the-plan. Track the option the player uses most. Once it wins more than about 60 percent of encounters, bring one where it is weak (armour against fast light hits, flyers against ground traps), always leaving another option that works.
  7. no-repeat. Build encounters from a table of type mix + arena + rule and draw from a shuffled list, so no combination appears twice in a row or twice in the last five.
  8. Measure it. Play or simulate 20 encounters with tricks on and off. Report distinct combinations (should rise), the longest run of near-identical encounters (should be 1), the share of wins from the single most used option (should fall under about 60 percent), and options used per encounter (should rise above 1).

Save it as .claude/skills/encounter-variety/SKILL.md in your project. Or connect your agent and type /aigamedev: it loads this skill with its reference files and the results from this post.