This document defines the core combat philosophy, flow, and rules for the game. Combat is designed to be tactical, readable, social, and low‑clunk, suitable for a text‑based MUD while remaining deep and expressive.
Combat is a shared room-level system, not a private instance.
-
Decision-driven, not spam-driven
-
Stateful rather than repetitive
-
Readable at a glance
-
Role-expressive (Brute, Minion, Controller, etc.)
-
Drop-in / Drop-out multiplayer friendly
-
Environment-aware
-
Combat exists at the room level
-
All players and NPCs in the room can see the combat state
-
Players are never auto-joined into combat
Each combatant may have one or more of the following states:
-
Observing – In the room, not involved
-
Engaged – Actively fighting a target
-
Supporting – Assisting allies without direct engagement
-
Disengaging – Attempting to leave combat
-
Exposed – Vulnerable to increased damage
-
Pinned – Movement restricted
-
Staggered – Reduced effectiveness
States are explicitly shown to players.
Combat proceeds in rounds, each composed of clear phases.
-
Initiative is rolled when combat begins
-
Initiative order is fixed
-
New participants are inserted at the end of the current round
On their turn, a combatant may:
-
Perform one primary action (attack, maneuver, cast, etc.)
-
Perform one minor action (move, ready, interact)
Basic attacks are always available but are fallback options.
Certain maneuvers or traits allow reactions:
-
Interrupts
-
Opportunity attacks
-
Defensive triggers
Reactions are limited to prevent spam.
-
Damage is applied
-
States are updated
-
Death / defeat is checked
At the end of each round, all participants see a concise summary:
Round Summary:
- Enemies: 3 remaining
- Player1: wounded
- Player2: stamina low
When a player enters a room with active combat:
Combat in progress:
- Player1 vs Kelp Flea Minions (3)
You are not yet involved.
Players may:
-
join combat -
Attack a target directly
-
Use support maneuvers on allies
-
Observe or leave
No initiative reset occurs.
Players may attempt to disengage:
-
Requires a Disengage action
-
May provoke reactions
-
On success, player enters Observing state
Leaving the room while engaged carries risk.
Combat roles strongly influence behavior:
-
Minions: swarm, low awareness
-
Brutes: pressure, soak damage
-
Artillery: reposition, punish exposure
-
Healers: sustain allies, avoid frontline
-
Controllers: manipulate states and terrain
-
Bosses: phases, rule bending
Rooms may have combat tags:
-
open -
cramped -
slick -
obscured -
elevated
Maneuvers may reference these tags for bonuses or penalties.
Combat defense is split into two clear layers:
-
Avoidance (Dodging) – determines whether an attack hits at all
-
Mitigation (Armor Damage Reduction) – reduces damage after a hit occurs, based on damage type
-
Dodging is the primary mechanic that determines if you are hit by an attack.
-
Attacks resolve as an Accuracy vs Dodging contest (exact formula defined in the Skill Check system).
-
Maneuvers may:
-
Increase or decrease Dodging temporarily
-
Convert an incoming hit into a glancing hit
-
Enable reactions (parries, blocks, counter-steps)
-
Design intent: Players can read the outcome cleanly: miss → hit → crit/glance, rather than opaque hidden math.
-
Armor provides Damage Reduction (DR) against one or more damage types.
-
DR is applied only when an attack hits.
-
Different armor types protect against different damage profiles (e.g., heavy plate vs slashing/bludgeoning, leathers vs piercing, etc.).
-
Some damage types may partially bypass certain armor materials.
Design intent: Armor choice matters because the world has many damage types; players can prepare for regions and enemies.
-
Failed actions still have partial impact
-
“Nothing happens” turns are avoided
-
Damage types and resistances matter
-
Enemies evaluate threat dynamically
-
Healing, control, and positioning generate threat
-
Roles bias target selection
-
EXP is granted for meaningful participation
-
Participation includes damage, healing, and control
-
Loot is rolled after combat ends
-
No initiative rerolls mid-combat
-
No real-time spam requirements
-
Limited reactions per round
-
Clear combat state visibility
Combat should feel like:
A shared tactical board game, narrated in text.
Players should understand why outcomes occur, feel agency every turn, and be able to meaningfully help others at any time.
-
attack <target>starts combat and enables autoattack. -
While autoattack is active, the player does not need to repeat
attack. -
Re-issuing
attackwhile autoattacking should either:-
do nothing (“You are already attacking.”), or
-
switch targets (“You turn your focus to the Kelp Flea.”)
-
-
Players may still use maneuvers at any time (subject to costs, cooldowns, range, and prerequisites).
-
Autoattacking: ticking basic attacks against current target
-
Paused: no valid target (out of range, unreachable, target dead)
-
Stopped: combat ended (no hostiles) or player disengaged / left room
Combat is driven by a repeating attack ticker (a timer) per combatant.
Define a global constant:
- BAT (Base Attack Tick): the default time between basic attacks using a standard weapon.
Recommended starting value:
-
BAT = 3.0 seconds (in-game seconds)
- With your time ratio (3×), that’s 1 real second per BAT second.
Weapons already define speed_cost (lower = faster, higher = slower).
-
Player basic attack interval:
attack_interval = BAT × weapon.speed_cost
Examples:
-
Dagger (
speed_cost 0.7) → interval = 2.1s -
Longsword (
speed_cost 1.0) → interval = 3.0s -
Warhammer (
speed_cost 1.4) → interval = 4.2s
NPCs/Creatures have their own baseline attack values:
-
attack_interval(direct) orspeed_cost(to be applied to BAT) -
accuracy(or a combat skill like Fighting) -
damage_min,damage_max -
damage_type -
crit_chance
They may also have:
-
natural_weapon_tag(bite, claw, sting) -
preferred_range_band(Engaged / Near / Far)
-
Happens automatically on the attack ticker
-
Uses weapon damage profile (or unarmed profile)
-
Uses hit check (Accuracy vs Dodging)
-
Applies armor DR by damage type
-
Explicit player choice
-
May consume resources / have cooldowns
-
Do not disable autoattack unless the maneuver says so
Optional rule (recommended):
- Maneuvers can have an action_cost that delays the next autoattack tick by a small amount (e.g., +0.5–1.5s) to avoid “free” stacking.
Every character can fight unarmed.
-
damage_min: 1 -
damage_max: 2 -
damage_type: bludgeoning -
crit_chance: 0.10 -
speed_cost: 0.8 -
durability: n/a
Unarmed uses the same rules:
-
Hit check via Dodging
-
Armor DR applies
-
Maneuvers may enhance unarmed (future: martial schools)
Combat starts when:
-
A player uses
attack <target> -
A hostile NPC attacks the player
-
A maneuver that deals damage is used
Combat stops for a player when:
-
No hostile entities remain engaged with them in the same room, or
-
The player successfully disengages, or
-
The player changes rooms (see below)
When combat stops:
-
Autoattack = off
-
target cleared (or kept as “last target” for convenience)
You have two viable designs; choose one globally for consistency.
-
If the player changes rooms, combat ends immediately.
-
Hostiles do not follow.
Pros: simplest, very MUD-classic Cons: encourages “exit kiting”
Leaving a room while in combat requires a Disengage step.
-
Command:
disengage(orwithdraw) -
Resolves as a check (e.g., Dodging vs enemy Fighting or a flat difficulty)
-
Success:
- player shifts range to Far and gains a Flee Window (e.g., 3–5 seconds)
-
Failure:
- player remains Engaged and cannot exit this tick
-
During the flee window,
move <dir>is allowed. -
If the window expires, the player must disengage again.
Creatures can follow based on a pursuit tag:
-
pursue: none(won’t follow) -
pursue: short(follows 1 room) -
pursue: long(follows multiple rooms)
Pursuit can be modified by role:
-
Brute: short
-
Minion: short/none
-
Artillery: none
-
Boss: long (only if designed)
Room flags can block pursuit:
-
saferooms prevent hostile entry -
no_pursuitprevents following
When a second player enters a room with an active fight:
-
They enter at Far range by default
-
They can choose to:
-
attack <target>(starts autoattack) -
use a maneuver
-
advance(close distance)
-
Enemies decide whether to switch targets using their AI template and threat rules.
-
On attack start:
- “You square up with Kelp Flea and begin attacking.”
-
On autoattack tick:
- “You slash the Kelp Flea for 4 (reduced by armor).”
-
On target swap:
- “You turn your attention to Kelp Flea #2.”
-
On disengage success:
- “You slip free and create distance!”
-
On flee:
- “You sprint east, leaving the fight behind.”
-
On pursuit:
- “A Kelp Flea skitters after you!