Runners
Your Operatives
Runners — also called Hoods in slang — are the backbone of your organization. They execute your orders, scout areas, raid rivals, and manage your buildings. Without runners, nothing happens.
You can control a maximum of 100 runners, organized into up to 10 teams of 10 members each.
Attributes
Each runner has six core attributes that determine their strengths:
| Attribute | Abbrev. | Description |
|---|---|---|
| Strength | STR | Physical power. Determines melee damage, intimidation, and carry capacity. |
| Intelligence | INT | Mental acuity. Influences scouting quality, hacking success, and plan detection. |
| Stealth | STL | Ability to remain undetected. Reduces heat buildup and increases stealth action success. |
| Tech | TCH | Equipment and technology proficiency. Determines hacking, explosives, and vehicle handling. |
| Charisma | CHA | Persuasiveness. Influences recruitment, bribery, and team leadership. |
| Constitution | CON | Resilience. Determines max HP, stress resistance, and recovery speed. |
Dynamic States
Beyond fixed attributes, each runner has four status values that change constantly:
| Status | Range | Meaning |
|---|---|---|
| Loyalty (LOY) | 0–100 | How loyal the runner is to you. Below 40: unreliable — may execute orders sloppily. Below 20: refuses orders or deserts. |
| Body parts (HP per part) | 0–MaxHP each | Six body parts: Head / Torso / LeftArm / RightArm / LeftLeg / RightLeg. Knockout rule: Torso=0 OR Head=0 OR ≥2 limbs=0 → Active=false. No passive regen — restore via SEND_TO_MEDIC (heals torso) or the more granular heal_part family (server v1.81.0+). Permanent damage (Phase 3, server v1.83.0+) on crit-lethal hits needs HEAL_PERMANENT or INSTALL_CYBERWARE (Phase 4, v1.84.0+) to undo. |
| Stress (STRS) | 0–100 | Psychological strain. High stress reduces performance and loyalty. Chronic stress leads to breakdowns. |
| Heat (HEAT) | 0–100 | Individual heat level. Independent from sector heat. High heat = arrest risk on every action. |
Loyalty is the most critical value. A runner with high heat and low LOY is a ticking time bomb — they might testify against you if arrested.
Heat cooldown — SEND_TO_SAFEHOUSE: A runner whose heat is climbing toward arrest territory can be pulled off the street with SEND_TO_SAFEHOUSE (STL-driven, 30 min, 3-day default lockout). The runner goes inactive for the duration, but the safehouse-multiplier kicks in on the entry day so the heat decay is much faster than on-street decay. Last-resort tool for hot runners that can’t risk another action without getting arrested. Full entry in Actions — Personnel Management.
Attribute progression (server v1.63.0+): STR/INT/STL/TCH/CHA/CON were fixed at hood creation through v1.62.x. The new TRAIN_HOOD action (Verwaltung, $500 clean, full-day 480 min, 24 h cooldown) bumps the runner’s highest current attribute by +1 (or +2 on crit-success), capped at 80. Specialist arc — strong gets stronger, weak stays cheap. Random-roll generation can still produce attributes above 80 at hire time; training only raises post-hire growth to the soft 80 ceiling.
HP body parts (server v1.81.0, #589 Phase 1): the single-HP-pool model from v1.x has been replaced with per-body-part HP plus a knockout rule.
| Part | Base MaxHP | CON contribution | Range |
|---|---|---|---|
| Head | 20 | +CON × 0.10 | 20..30 |
| Torso | 30 | +CON × 0.20 | 30..50 |
| Each arm | 18 | +CON × 0.07 | 18..25 |
| Each leg | 18 | +CON × 0.07 | 18..25 |
Aggregate MaxHP at CON 100 = 180 (vs ~100 in the old scalar model). Higher pool, but a single torso shot can still knock the runner out — taking someone down now requires either zeroing torso/head or breaking ≥2 limbs.
Targeted damage / heal: new actions can hit a specific part:
damage_part— `target_part` = `head | torso | arm_left | arm_right | leg_left | leg_right | random`. `random` uses MaxHP-weighted pick with head suppression to ~10% (head=0 is instant knockout, so balance keeps it from being the random default).heal_part— same enum + `random_damaged` (picks the most-damaged-percentage part).
Legacy ops (`damage_hp` / `heal_hp` / `kill_hood`) still work — they route to torso (kill_hood zeroes torso + head AND flips both Permanent per Phase 3).
Phase 2 (server v1.82.0) — combat targeting per action: each combat action hard-codes the part it targets. No UI picker; the action ID is the targeting choice.
- DRIVE_BY →
random_torso_heavy(spray — torso boosted to ~50% of weight, limbs follow proportionally) - AMBUSH →
random(chaotic surprise; head suppressed to ~10%) - Brawl combat (combat.go minute-by-minute) →
randomper attacker per minute - ELIMINATE (incl. legacy
ASSASSINATE+ the folded-inSNIPE, #718) → kill_hood (zeroes torso + head when the kill lands; ranged loadout swaps the skill check to INT/STL. The kill is loadout-gated — it only lands cleanly when the attacker’s weapon out-classes the target’s armor, else it deflects to a survivable wound; see Combat) - INCITE_RIOT AOE → torso (unchanged)
Phase 3 (server v1.83.0) — permanent damage + attribute penalty: crit-success on exact-zero damage flips the hit part to Permanent=true. Permanent parts stay at HP=0 and can ONLY be restored by HEAL_PERMANENT or future cyberware (Phase 4) — heal_part is a silent no-op on permanent parts.
| Part | Permanent attribute penalty |
|---|---|
| Arm (either) | STR −10 |
| Leg (either) | STL −15 |
| Head / Torso | No attr penalty (knockout already removes the runner) |
Penalty is reversed when the part is restored; it’s capped at the runner’s spawn-time BaseSTR / BaseSTL so repeated flip/unflip cycles can’t drift past the original value. Brawl combat uses a 5% per-minute crit roll to drive permanent flips in melee.
HEAL_PERMANENT (Verwaltung, INT-primary, $5000 clean, 12 h hospital stay, 168 h cooldown per runner = 1 week): restores the most recently wrecked part — restore_part op with the most_recent_permanent token. Same-day ties break by enum order (Head → Torso → LeftArm → RightArm → LeftLeg → RightLeg).
Phase 4 (server v1.84.0) — cyberware install loop: ripperdocs install chrome. Repairs Phase 3 permanent damage AND adds stat bonuses on healthy parts. See Cyberware for the full guide.
- Ripperdocs: 1 per sector, spawned at session start at a random building. Discovered by SCOUT — scouting a sector reveals every ripperdoc in it.
INSTALL_CYBERWARE(Verwaltung, INT-primary, 72 h per-runner cooldown, clean cash, cost from catalog): consumes one Ripperdoc inventory slot, rolls the 4-bucket surgery table:- Success — chrome installed, stat_mods applied, Permanent flag cleared if the part was wrecked
- Botched (~40% of fails) — chrome destroyed, target part flipped Permanent
- Partial (~30% of fails) — install succeeds but stat_mods run at 50%
- Complication (~25% of fails) — install succeeds; a different healthy part flips Permanent
- Dead on table (~5% of fails) — runner dies
P_success = SurgerySkill/100 × (1 - tier × 0.05). Tier-1 chrome at a 70-skill doc = ~67% success. Choose your ripperdoc.- Stat-mods stack uncapped on
Base*snapshots. Two Militech cyberarms on a 90-STR runner = 130 STR. Cyberpunk power fantasy is the point; Phase 5 humanity will be the balance lever. - Swap policy: re-installing on an occupied slot destroys the old chrome (no refund). REMOVE_CYBERWARE (Phase 4b, server v1.85.0+) is the 50%-refund alternative — clears the slot + flips part Permanent=true, 24h per-runner cooldown.
- Ripperdoc reputation (Phase 4b): per-doc 0..100 score (default 50). Successful INSTALL +5, botched −10. Drives a softer price discount (±25%) and a softer success multiplier (±10%). See Cyberware for the full curve.
- Daily Tier-1 refresh: each ripperdoc tops up to 3-5 Tier-1 items at day rollover. Tier-2 / Tier-3 inventory deferred (blocks on
#588 SUPPLY_ILLEGALfor the loot pipeline).
What’s still coming (Phases 4c-5):
- Phase 4c: HACK_RECON rival-cyberware leak + bribe / raid / rival-bribes-doc rep triggers + black-market vs licensed split
- Phase 4c: black-market vs licensed split (dirty-cash variant, lower install success, no federal_heat trail)
- Phase 4d: faction alignment (Cartel / ChromeWerks / Arasaka Med — special cyberware lines)
- Phase 5: humanity score + cyberpsychosis behaviour
Track in #589 + spec docs/HP_AND_CYBERWARE.md + docs/CYBERWARE.md.
Loadout & Equipment
Every runner carries a weapon and a piece of armor — two equip slots that feed directly into the combat formula.
- Weapon raises the damage your runner deals (
+5melee →+40heavy military hardware). - Armor cuts incoming damage (
-3kevlar →-10full military rig). - A big gap in raw STR matters more than the gear — weapons decide close fights, they don’t make a weak runner invincible.
Open a runner in the roster to see their loadout, then buy, equip, swap or build gear right from the detail panel:
- Buy — purchase from the Black Market, paid in dirty cash. Tier-3 hardware needs a Hub with an assigned FIXER (the Hub’s manager); Tier-4 also requires that FIXER to have STR ≥ 50 or TCH ≥ 50; Tier-1 melee can be bought anywhere in a slum.
- Equip / Unequip — move gear between a runner’s slot and your Armory, a shared corp-wide store. Swapping through the Armory is how you hand a weapon from one runner to another.
- Manufacture — a runner managing your own production facility (TCH ≥ 50) can build a melee weapon or an incendiary without touching the Black Market.
Armory & Consumables (corp-wide)
Spare, unequipped gear lives in your Armory. Its capacity grows with every active warehouse you own; lose a safehouse and the overflow is forfeited (highest tier first).
Consumables are single-use combat items kept in a separate store with its own capacity:
| Item | Used by | Effect |
|---|---|---|
| Incendiary | ARSON | Knocks a building out of service |
| Explosive | BOMB | Destroys a building and hits everyone inside |
You must own the consumable to run the action — no incendiary, no arson — and one is spent on every attempt, whether or not it lands. Unlike a runner’s worn loadout, the Armory and consumable stores are safehouse-protected: an arrest confiscates only what the runner is carrying, never your stores.
Recruitment
You find new runners via a 2-day cycle:
Day 1: Send a recruiter to a venue (building with recruits tag) — a bar, harbor, university, or fight club. The RECRUIT action targets the building itself. Different venues attract different runner types:
| Venue | Typical Runners |
|---|---|
| Bar / Nightclub | All-rounders, street fighters (high STR/CON) |
| Harbor / Docks | Smugglers, physical workers (STR/CON) |
| University / Tech Hub | Hackers, planners (INT/TCH) |
| Fight Club / Arena | Elite fighters (STR/CON), low INT |
| Luxury Restaurant | Charmers, con artists (CHA/INT) |
Day 2: You receive 0 to 3 candidates to choose from. Review their attributes and decide who to hire.
Recruit Cost (standard)
Regular recruitment costs $600 in clean cash (economy.recruit_cost: 600). There is no separate “emergency” path — if your pool is empty, your only options are waiting for the next day or starting venue scouting.
Teams
Runners are organized into teams. Each team has a team leader whose CHA value determines how many runners they can effectively coordinate (delegation capacity). Maximum 10 teams with up to 10 members each.
The advantage of teams: you can issue team-wide orders instead of controlling each runner individually. “Team Alpha: patrol Sector 7” is one command — all members execute it.
Important: Runners without a team assignment are inactive — they cannot execute daily orders but still cost salary.
Team management in the Runner screen:
- Create teams: Inline input field in the Roster tab (enter name, press Enter or click button)
- Assign runners: Via Drag & Drop — drag runner chips from the “Unassigned” section into a team, or between teams
- Remove runners: Click the ✕ next to the runner’s name in the team
- Appoint leader: Click the ★ star next to the runner’s name — the current leader has a golden star
- Dissolve team: “Dissolve” button in the team header (all members become unassigned)
Each team displays: member counter (e.g. “3/10”), coordination bonus and delegation capacity of the leader.
Team Roster Table
Within each team, members are displayed as a full table — identical to the Roster view with portrait, name, HP, heat, loyalty and all six attributes as mini-bars. This gives you full oversight of each member’s capabilities even in the team view.
Manager Role
Hoods can be assigned to a building as manager (assign_manager action):
- Managers count toward the 100-hood limit (
MaxHoodsPerPlayer = 100) — they’re hoods withIsManager: true, not a separate entity - A building without a manager produces no income — managers are essential
- Manager bonus: +15% income (
economy.manager_income_bonus: 0.15) - Manager salary: 1.5× standard (formula
200 + avgAttr×3 + numSkills×100, then × 1.5) - Recall via
recall_manageraction — afterwards the hood can run regular actions again
If manager heat > 30, the synergy modifier kicks in additionally: sector wash cap drops — managers with low heat keep your laundering pipeline clean.
Portraits
Every runner has a unique 3D portrait — an automatically generated profile image based on the runner’s name and role. The portrait is rendered in real-time from Synty character models using Babylon.js.
How Portraits Work
- Deterministic: The server assigns a
PortraitSpecto each runner at creation (model, attachments, skin tone, gender). Same session seed + runner index always produces the same portrait. - Attribute-based: The dominant attribute determines the model pool. STR runners look like soldiers or mercenaries. STL runners wear ninja outfits or hacker gear. CHA runners have business looks.
- Attachments: Depending on the seed, a runner gets 0 to 2 accessories — hairstyles, headsets, cybernetics, piercings, or earrings. Gender-matched.
- Frame Cache: Once rendered, portraits are cached as image data. When reopening a detail panel or scrolling through the roster, the portrait is instantly displayed from cache without re-rendering.
Status Effects
The portrait visually reflects the runner’s condition:
| Condition | Visual Effect |
|---|---|
| Arrested | Grayscale filter + bars overlay |
| High stress (>80) | Slight blur effect |
| Assigned to team | Colored border in team color |
Detail Portrait
When you open a runner in the detail panel, you see a large 280px portrait — a high-resolution bust shot of the character. The portrait is cached after first render and displayed instantly thereafter.
No WebGL?
If your browser does not support WebGL, you see a colored circle with the role abbreviation (EN, GH, AN, TC, FX) instead. Less pretty, but functional.
Player Character
In addition to the auto-generated runner portraits, you have your own player character — your personal in-game profile.
Customization
In Hub → Settings you’ll find the character editor with a live 3D preview:
| Option | Description |
|---|---|
| Character Model | 8 different cyberpunk models (Cyborg, Mercenary, Racer, Rich, Street) |
| Skin Tone (MST) | 8 skin tones, applied via real-time texture manipulation |
| Pose | T-Pose, A-Pose or I-Pose |
| Hairstyles | 8 hairstyles (mutually exclusive with headgear) |
| Headgear | 4 hats/helmets (mutually exclusive with hairstyles) |
| Earrings | 9 variants |
| Piercings | 4 variants — multi-select supported (e.g. nose + lip simultaneously) |
| Masks | 1 variant |
Camera Controls
The 3D preview supports full camera control:
- Scroll = Zoom (down to face level)
- Left-drag = Orbit (rotate camera around character)
- Right-drag = Pan (move camera)
- Face button = Animated camera fly-in to face
- Reset button = Back to full-body view
Profile Picture
A 128×128 head portrait is automatically rendered from your character and saved as your profile picture. It appears:
- In the Hub header (small avatar icon, top right)
- In the Profile tab (large portrait next to your name)
- The profile picture updates automatically whenever you change your character
Your character and profile picture are saved server-side and available across all devices.
Manager Role
You can station a runner as a manager in a building. This is mandatory — a building without a manager generates $0.
Manager Tab in the Runner Screen
The Runner screen has a dedicated Manager tab that shows all current managers with their assigned buildings:
| Information | Description |
|---|---|
| Runner Attributes | Compact attribute overview (STR, INT, STL, TCH, CHA, CON) with mini-bars |
| Assigned Building | Name, zone, category and front status of the building |
| Building Financials | Daily income, rent/maintenance, net profit at a glance |
| Defense & Value | Defense value and property value of the building |
| Delegation Capacity | Based on CHA — how many subordinates the manager can coordinate |
Assigning a Manager
To assign a manager, click “Assign Manager” in the Manager tab. An inline runner picker opens showing all available runners (active, not already a manager). Click a runner to station them as manager.
Important: A runner assigned as manager automatically leaves their current team.
Heat Warning
Managers of illegal operations (drug lab, weapons cache, fence shop) passively accumulate heat just from working there. Rotate your managers regularly to distribute heat.
Workforce Trends (Sparklines)
In the Runner and Economy screens you see 7-day sparklines per
player that aggregate your entire workforce across every
sector where you own buildings (sector axis — covers ALL
workers in your sectors, including rivals’). The data comes
from the server-side pipeline (WorkforceXxxHistory in the
fixture) and is rolled up deterministically from per-sector
daily snapshots:
| Sparkline | Source | What you see |
|---|---|---|
| Heat trend | per-sector HeatHistory | Average + max heat across your sectors — “where will the cops show up first?” |
| Income trend | per-sector IncomeHistory | Daily revenue from buildings in your sectors |
| Wage trend | per-sector WageHistory | Monthly wage bill + owner/staff split |
| Productivity trend | per-sector ProductivityHistory | Owner and staff productivity (weighted) |
| Psychometrics trend | per-sector PsychometricsHistory | Avg fear / corruption / loyalty / observance |
| Population trend | per-sector PopulationHistory | Total / labor supply / labor demand |
| Demographics trend | per-sector DemographicsHistory | Newborn / juvenile / adult / elderly counts |
| Wealth trend | per-sector WealthHistory | Avg + min + max wealth + wealth gap |
| Churn trend | per-sector ChurnHistory | Hires / promotions / retires / quits / deaths sums |
| Wealth-flow trend | per-sector WealthFlowHistory | Inflow / outflow + signed Net (negative = money flowing out on net) |
Interpretation:
- Rising heat sparkline → sector heating up, RAID/EXTORT becoming risky. Heat decay is slower than heat generation, so de-escalate in time (DONATE, bribe-arrest avoidance).
- Falling wealth sparkline + rising quit rate in churn trend → sector losing wealthy residents AND workers walking off. Classic decline indicator.
- Negative-net wealth-flow over multiple days → recession early-warning signal. Countermeasures: SUBSIDY for sector buildings, keep recruitment pool active.
Sparklines are silent-day-aware — days with no activity are skipped instead of drawn as zero lines, so the trend isn’t distorted by quiet weekends.