A combat-focused update that makes the world feel more alive and dangerous.
Faster Respawns
Low-level mobs now respawn much faster. The streets of Ironhaven won't stay empty for long.
- Giant Rats — 2 minutes (was 5)
- Giant Spiders — 4 minutes (was 8)
- Goblins — 3 minutes (was 20)
- Kobolds — 3 minutes (was 15)
- Bandits — 5 minutes (was 30)
- Cultists — 5 minutes (was 30)
DCs were also lowered on common enemies so respawns actually land more often. Tougher enemies and bosses are unchanged.
Monster Aggro
When a monster respawns into a room with a player, it now attacks on sight. Previously, monsters would spawn with a flavor message but just stand there waiting for the player to engage. Now:
- Resting, wounded, or low-level players get jumped immediately
- The monster gets the first strike (player is surprised)
- Combat starts automatically — no more farming rooms by entering and leaving
A bug where the aggro system silently failed has also been fixed. The respawn event data was nested under a payload key that the aggro handler wasn't reading, so every aggro check was skipping with empty monster data. Now it works as intended.
3-Second Turn Timer
Combat turns now have a 3-second timer. When it's your turn and the clock runs out, what happens depends on whether you've engaged:
Not yet engaged (e.g., a monster jumped you while resting):
- The monster attacks you again
- You get a taunt: "Fight or flight? You choose neither." or "If someone attacked me, I would probably do something about it."
- It's still your turn — the game won't auto-attack until you've made your first move
Already engaged (you've attacked, dodged, or used an item):
- You auto-attack with your equipped weapon
- Monster takes its turn
- Next round begins
This keeps the game flowing at a fast pace while giving players a moment to react when ambushed. The existing turn-based combat structure is preserved — it just won't let you AFK through a fight.
Internal Command Cleanup
System commands like monster_aggro and auto_turn no longer leak into the chat as raw text. Previously, the input echo didn't distinguish between player actions and internal system triggers, so you'd see things like > monster_aggro:alley_entrance_Bandit_1774499296:Bandit in your message log. Fixed.