Ship Stats Fields

Enumerates every field on the two ship stat blocks the engine consumes at run start: ShipCombatStats (engine physics + damage) and ShipMetaStats (non-combat progression modifiers). Both interfaces are defined in data/run-config.ts. The conversion functions toShipCombatStats(ship) and toShipMetaStats(ship) in data/ships.ts build these from a ShipDef row at mission assembly.

These are the baseline values frozen at run start. They are distinct from level-up modifiers — in-run upgrade cards stack on top of these as multiplicative or additive modifiers, but they do not mutate the source ShipCombatStats object.

ShipCombatStats — engine physics + damage

Hull / shield / regen

FieldControls
hpMaxMaximum hull HP.
hpRegenPassive HP regen per second.
shieldMaxMaximum shield pool.
shieldRegenRateShield points restored per second once delay elapses.
shieldRegenDelaySeconds after taking damage before shield begins regenerating.
shieldRegenFillTimeTime (seconds) for shield to refill from 0 to max once regen starts. Hardcoded to 2 in toShipCombatStats.
damageReductionFlat damage-reduction (armor). Subtracts from incoming damage.

Movement

FieldControls
thrustAcceleration force applied while thrust input is held. Sourced from ship.acceleration.
maxSpeedHard cap on ship velocity (u/s).
dragDeceleration coefficient applied when thrust is released. Curve shape comes from dragCurve.
turnSpeedTurn rate in radians per frame at 60 fps.

Heat / overheat / burnout

FieldControls
overheatBurnHull damage per second when heat gauge is fully maxed (burnout damage rate).
overheatCoolHeat units shed per second when not building heat.
heatSpeedTargetSpeed at which heat stops accumulating. Hardcoded to 80 in toShipCombatStats.
heatBoostMultTop-end speed multiplier from a full heat gauge. Hardcoded to 2.5 in toShipCombatStats.
heatCurveHow heat maps to boost across the gauge. One of: linear, front_loaded, back_loaded, explosive_tail, flat_plateau, surge_pulse.
burnoutSeverityScales burnout damage. 0.35 = mild, 1.0 = standard, 2.0 = devastating.

Weapons / drops

FieldControls
weaponDamagePctAdditive percentage bonus to weapon damage (0 = no bonus).
fireRatePctAdditive percentage bonus to fire rate.
luckLuck stat — affects drop quality.
magnetRangePickup magnet range in world units.
currencyBonusAdditive percentage bonus to currency drops.

Ramming / collision

FieldControls
meleeMultOptional ramming damage multiplier (0.1x–3.0x, default 1.0). Heavy ships ram harder.
shipClassOptional movement class: heavy (5% bleed), medium (15%), light (50%). Controls speed-bleed on enemy contact.
ramSpeedBleedSpeed fraction retained after a high-speed ram (e.g. 0.80 = keep 80%).
contactSpeedBleedSpeed fraction retained on low-speed enemy contact.
terrainRestitutionBounce coefficient off terrain/asteroids (1.09 = 9% reflect).
terrainFrictionTangential friction on terrain bounce. 0 = ice, 1 = velcro.
ramThresholdMinimum speed (u/s) to deal ram damage.
ramDamageLoRam damage at threshold speed.
ramDamageHiRam damage at max ram speed.
pushRatioShip’s share of push-apart on overlap (0.1 = 10% ship, 90% enemy).
enemySolidityHow much overlap push goes to ship vs. enemy (0–1). 0.8 = ship gets 80% (bounces off).
contactDecelSpeed multiplier on low-speed enemy contact (0–1). 0.6 = lose 40% speed.
contactCooldownSeconds of invuln between body contacts.

Visual / sprite

FieldControls
shipScaleVisual scale multiplier — affects sprite, shield circle, hull polygon, collision radius.
spriteHueHue rotation in degrees (-180 to 180).
spriteSaturationSaturation multiplier (0 = grayscale).
spriteContrastContrast multiplier (0 = flat).
spriteBrightnessBrightness multiplier (0 = black).

Vehicle feel

FieldControls
rotatesIf true, ship rotates toward input direction (default). If false, ship is a hovercraft — fixed angle, omnidirectional thrust.
fixedAngleDegFixed facing angle in degrees (0 = up, 90 = right, etc.) used at mission start when rotates === false.
accelCurveThrust ramp shape: linear, ease_in, ease_out, instant.
dragCurveDeceleration shape on thrust release: linear, exponential, front_loaded, back_loaded, overshoot.
stopShakeIntensityCamera shake when ship comes to a hard stop. 0 = off.
heatShakeIntensityContinuous camera shake while heat exceeds threshold. 0 = off.
heatShakeThresholdHeat fraction (0–1) above which heat-shake activates.
stopSpringAmtSpring-back amount when stopping. 0 = none; 0.05–0.15 = subtle overshoot.

ShipMetaStats — non-combat progression modifiers

These three fields stack with their combat-stat counterparts where applicable.

FieldControls
luckLuck bonus that stacks with combat luck.
currencyBonusCurrency bonus (additive %) stacking with combat currencyBonus.
objectiveSpeedObjective completion speed bonus (additive %). Derived as round(ship.luck * 0.5) in toShipMetaStats.

Distinct from level-up modifiers

The fields above are the ship’s baseline kit — fixed at run assembly from the chosen ShipDef row. In-run progression layers on separately:

  • Reward cards (in-run level-ups) apply additive or multiplicative modifiers on top of the baseline. They do not write back to ShipCombatStats.
  • Passives, artifacts, and mods apply their own modifier stacks consumed by the engine alongside ShipCombatStats.
  • Facility bonuses (from metagame buildings, FacilityBonuses interface) and codex bonuses (CodexBonuses) are run-scoped bonus blocks separate from the ship’s own stats.
  • World knobs (WorldKnobs) scale enemy difficulty and rewards — they sit beside ship stats, not inside them.

A ship row is the floor. Level-ups, facilities, codex, and world knobs are what the engine compounds at compute time.

Where these are wired

  • Interfaces: src/starship-survivors/data/run-config.ts lines 65–166 (ShipCombatStats) and 169–176 (ShipMetaStats).
  • Conversion from ShipDef: src/starship-survivors/data/ships.ts toShipCombatStats (line 2488) and toShipMetaStats (line 2541).
  • Run assembly: the two blocks are placed onto RunDefinition.combatStats / RunDefinition.metaStats (see RunDefinition at the bottom of run-config.ts).