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:
- Hood knocked out (server v1.81.0+: Torso=0 OR Head=0 OR ≥2 limbs=0 →
Active=false) → outcome (see below) - MaxDuration reached → draw, both stay active
- Both hoods inactive (e.g. one arrested mid-fight)
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:
- Stealth Rescue (STL+CHA roll vs DC, $2k prep)
- Bribe-Release (severity-tiered: $2k/$8k/$20k, federal blocked)
- Passive escape roll (daily, CON/STR-based)
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.