Combat

Combat in CORP//LLM is deterministic and resolved minute-by-minute in the tick simulation.


Combat Duration

Depends on STR difference of the hoods:

duration = min(30, 15 + |STR_A − STR_B| × 0.5) minutes

Equally strong hoods: ~15 min. Very lopsided: capped at 30 min.


Damage Per Minute

raw  = (eff_STR + weapon_mod) × Random(0.8 .. 1.2) / 10
damage = max(0, raw − armor)

damage_divisor: 10. weapon_mod and armor are currently 0 for base hoods (no loadout system active).


Effective STR (Stamina + Multi-Combat)

Effective STR degrades over time:

staminaMin = floor(CON / 10)
after minute > staminaMin:
  factor = 1 − stamina_rate × (minute − staminaMin)   // stamina_rate = 0.05
  factor = max(factor, min_str_factor)                 // min_str_factor = 0.30

Plus: with N concurrent combats, STR is scaled by 0.7^(N−1).

CON Full strength for Floor (30%) reached at
80 8 min min 22
50 5 min min 19
20 2 min min 16

Short skirmishes favor low-CON hoods, long fights favor high-CON.


Combat End

Combat ends when:


Death, Arrest, Permadeath (Combat Knockout)

On knockout:

Condition Result
Hood Heat > 60 Arrest (HP restored on release, ArrestedUntil = Day+2)
Hood Heat ≤ 60 Permadeath (hood inactive, NumHoods−−)

Source: combat.go. There is no MedCore save in the current engine — anyone falling at low heat is dead.

Phase 2 (server v1.82.0): combat actions target specific body parts — DRIVE_BY → torso-heavy spray, AMBUSH → random, brawl combat → random per minute. ELIMINATE (incl. the folded-in SNIPE, #718) zeroes torso + head together when the kill lands (loadout-gated — see Armor vs assassination below). See Runners for the full per-action targeting table.

Phase 3 (server v1.83.0): crit-lethal hits flip the hit part to Permanent (HP locked at 0; needs HEAL_PERMANENT or future cyberware to restore). Brawl combat rolls a 5% crit chance per attacker per minute, so permanent damage is a slow trickle in melee but a real risk in long fights. Permanent arm = STR −10, permanent leg = STL −15. Permanent torso/head are recorded too (for future cyberware brain-replacement) but the knockout consequences above already apply.

ASSASSINATE and BOMB can permanently kill the hood through other paths — see Actions.

Armor vs assassination (loadout-gated kill): a targeted ELIMINATE only kills cleanly when the attacker’s weapon out-classes the target’s armor (weapon_modifier ≥ armor_modifier). Too light a weapon against heavier armor is deflected — a heavy torso wound the target survives (head intact, still active). So a runner in military armor can shrug off an under-gunned assassin, while a heavy weapon punches through. The attacker still pays the action’s heat + arrest risk on a deflection, and the target’s worn armor is hidden until you scout them — committing a hit blind is a gamble. Bring a weapon that out-classes their plating.


Action-Fail Arrest (separate path)

Arrests don’t only happen in combat. Each action with a fail roll checks arrest.go:

if hood.Heat >= 55 (arrest.heat_threshold):
  prob = (hood.Heat / 1200) + federal_bonus
  federal_bonus: ORANGE +0.03, RED +0.06
  if random < prob: arrest()

Heat ≥ 55 triggers this roll-based action-fail arrest. Federal Heat status (ORANGE/RED) further increases probability.


Escape Attempt (daily for inmates)

Inmates roll for escape daily:

escape_chance = min(0.55, 0.15 + CON × 0.005 + STR × 0.002)
CON / STR Escape chance
40 / 40 43%
60 / 60 55% (cap)
80 / 60 55% (cap)
100 / 100 55% (cap)

Cap at 55%. Even elite runners need luck — permadeath/jail remain real risks.


CorpSec Raids

Sectors with sector-heat ≥ 80 trigger CorpSec raids (phase4_encounter.go:17). On raid all hoods in the sector with hood-heat ≥ 60 are pulled to arrest.


Allies in Combat

Currently no automatic backup system in the engine. Allied hoods must be explicitly routed into the sector via plan to support — and only enter combat if attacked themselves.


Releasing Inmates

See Justice — three options:


Long-range / AOE damage actions

Beyond the minute-by-minute combat loop above, three actions deal damage without bringing a runner into the sector for a brawl:

Action Version Target Damage profile Heat
SNIPE → ELIMINATE folded v0.5 (#718) Single hood (rival) Retired as a standalone hit. Folds into ELIMINATE: a ranged/heavy loadout selects ELIMINATE’s ranged profile (INT/STL weighting, kill_hood permadeath — torso+head). +15 hood heat (ranged profile)
INCITE_RIOT v1.65.0 Sector damage_all_in_sector base=15 — every hood in the sector regardless of owner. CHA/STR-driven, $200 dirty (ringleader bribe). 72 h per-player cooldown. +20 sector, +5 self — major distraction
MALWARE v1.65.0 Building (rival) damage_building base=30 TCH-scaled. Softens DefenseValue before a RAID. $500 cost. +4 self heat

Full property tables in Actions.

Drone-pair pause (v1.70.0): DRONE_STRIKE was a fourth long-range option but it’s currently disabled along with INTERCEPT_DRONE pending the drone-engagement subsystem rework. See docs/DRONE_SUBSYSTEM.md. Don’t plan around them until the rework lands.