{
  "_doc": "Starship upgrade catalog. Upgrades are CONSTRUCTIVE — they improve the ship (more shields, more HP, better hyperdrive, more hardpoints, better sensors, etc.). Trade-off / narrative characteristics (Jury-Rigged, Hot-Shot, Salvaged) live in starship-traits.json instead. Each upgrade declares category, reference price, mechanical effects, and optional prereqs (chassis size minimum, prior upgrade required) + optional narrative_prereq (GM-supplied flavor gate — free text, not enforced). Prices are REFERENCE ONLY — no credit pool tracking. Effects deltas apply to the chassis derived stats (hp_max, shields_max, handling_bonus, sib, speed band step, hardpoints).",
  "upgrades": [
    {
      "id": "reinforced-shield-generator",
      "name": "Reinforced Shield Generator",
      "category": "shields",
      "price_credits": 12000,
      "effects": [{ "type": "shields_max", "delta": 10 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Reinforced shield generator coils. Raises shields_max by 10."
    },
    {
      "id": "backup-shield-generator",
      "name": "Backup Shield Generator",
      "category": "shields",
      "price_credits": 22000,
      "effects": [
        { "type": "shields_max", "delta": 20 },
        { "type": "ability", "rule": "1/encounter, Engineer restores 1d10 shields as a Reaction when shields hit 0." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"], "requires": ["reinforced-shield-generator"] },
      "narrative_prereq": null,
      "description": "Backup shield generator with cold-start coils. +20 shields_max; the Engineer can fire it 1/encounter when shields drop to 0 to restore 1d10."
    },
    {
      "id": "capital-grade-shields",
      "name": "Capital-Grade Shield Array",
      "category": "shields",
      "price_credits": 60000,
      "effects": [{ "type": "shields_max", "delta": 30 }],
      "prereq": { "size": ["Medium", "Large"], "requires": ["backup-shield-generator"] },
      "narrative_prereq": "Typically requires a military or syndicate quartermaster to authorize the parts.",
      "description": "Mil-spec capacitor banks and projector arrays scaled down for sub-capital hulls. +30 shields_max."
    },
    {
      "id": "particle-shield-reinforcement",
      "name": "Particle Shield Reinforcement",
      "category": "shields",
      "price_credits": 18000,
      "effects": [
        { "type": "ability", "rule": "While shields are above 0, the ship has Resistance to kinetic damage (slugs, mass-driver rounds, debris collisions)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Tuned particle-shield emitters that bleed kinetic energy back into the shield bubble. Resistance to kinetic damage while shields are up."
    },
    {
      "id": "ray-shield-reinforcement",
      "name": "Ray Shield Reinforcement",
      "category": "shields",
      "price_credits": 18000,
      "effects": [
        { "type": "ability", "rule": "While shields are above 0, the ship has Resistance to energy damage (blasters, ion bolts that deal energy, turbolaser sweep-fire)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Layered ray-shield emitters tuned to refract coherent energy. Resistance to energy damage while shields are up."
    },
    {
      "id": "capacitor-banks",
      "name": "Shield Capacitor Banks",
      "category": "shields",
      "price_credits": 15000,
      "effects": [
        { "type": "ability", "rule": "1/encounter, as a Reaction when this ship takes shield damage, the Engineer may dump capacitor banks to restore 1d10 shields." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"], "requires": ["reinforced-shield-generator"] },
      "narrative_prereq": null,
      "description": "Auxiliary capacitor banks wired into the shield grid. Once per encounter the Engineer can crash-discharge them to top up shields in the middle of a furball."
    },
    {
      "id": "triple-redundant-generator",
      "name": "Triple-Redundant Shield Generator",
      "category": "shields",
      "price_credits": 28000,
      "effects": [
        { "type": "shields_max", "delta": 5 },
        { "type": "ability", "rule": "Immune to single-hit ion shield-disable effects (e.g. ion cannon shield-knockout): the redundant generators absorb the surge. Persistent ion damage still depletes shields normally." }
      ],
      "prereq": { "size": ["Medium", "Large"], "requires": ["reinforced-shield-generator"] },
      "narrative_prereq": null,
      "description": "Three parallel shield generators on independent power buses. A single ion hit can't knock the bubble offline, and there's a small shields_max bump (+5) from the extra generators contributing capacity."
    },
    {
      "id": "reinforced-plating",
      "name": "Reinforced Plating",
      "category": "armor",
      "price_credits": 10000,
      "effects": [{ "type": "hp_max", "delta": 10 }, { "type": "sib", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Bonded durasteel laminate plates. +10 hp_max, +1 SIB."
    },
    {
      "id": "heavy-armor-plating",
      "name": "Heavy Armor Plating",
      "category": "armor",
      "price_credits": 22000,
      "effects": [
        { "type": "hp_max", "delta": 20 },
        { "type": "sib", "delta": 2 },
        { "type": "handling_bonus", "delta": -1 }
      ],
      "prereq": { "size": ["Medium", "Large"], "requires": ["reinforced-plating"] },
      "narrative_prereq": null,
      "description": "Heavy reactive armor plates. +20 hp_max, +2 SIB, but -1 Handling from added mass."
    },
    {
      "id": "beskar-composite-inlays",
      "name": "Beskar Composite Inlays",
      "category": "armor",
      "price_credits": 80000,
      "effects": [
        { "type": "hp_max", "delta": 5 },
        { "type": "ability", "rule": "Resistance to one damage type chosen at installation (energy, kinetic, ion, or explosive)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "Beskar is Mandalorian patrimony; obtaining it usually involves a Mandalorian contact or a notable favor owed.",
      "description": "Beskar composite inlays in critical hull sections. +5 hp_max + resistance to one chosen damage type."
    },
    {
      "id": "industrial-reinforcement",
      "name": "Industrial Hull Reinforcement",
      "category": "armor",
      "price_credits": 5000,
      "effects": [{ "type": "hp_max", "delta": 5 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Cheap durasteel cargo-hauler reinforcement panels welded into the hull frame. +5 hp_max. The baseline option when you can't afford real plating yet."
    },
    {
      "id": "cortosis-plating",
      "name": "Cortosis Plating",
      "category": "armor",
      "price_credits": 75000,
      "effects": [
        { "type": "ability", "rule": "Resistance to lightsaber damage and to energy damage (cortosis weave shorts coherent-energy weapons on contact). Cortosis briefly shuts down a lightsaber that strikes it." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "Cortosis ore is rare and tightly controlled; refined plating is restricted in most Core Worlds and typically passes through black-market quartermasters.",
      "description": "Hull panels woven with cortosis fiber. Resistance to lightsaber and energy damage — favored by hunters who expect to face Jedi or saber-wielding enemies."
    },
    {
      "id": "phrik-composite",
      "name": "Phrik-Composite Armor",
      "category": "armor",
      "price_credits": 90000,
      "effects": [
        { "type": "hp_max", "delta": 10 },
        { "type": "sib", "delta": 1 },
        { "type": "ability", "rule": "Resistance to one damage type chosen at installation (energy, kinetic, ion, or explosive). Phrik plating does not lose integrity from sustained hits the way standard plating does." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "Phrik is military-grade lightsaber-resistant alloy; civilian sales are restricted and typically require a paramilitary or Mandalorian quartermaster.",
      "description": "Phrik-composite hull plates — the alloy the Empire used for elite armor. +10 hp_max, +1 SIB, plus resistance to one chosen damage type."
    },
    {
      "id": "ablative-layer",
      "name": "Ablative Armor Layer",
      "category": "armor",
      "price_credits": 20000,
      "effects": [
        { "type": "ability", "rule": "1/encounter, as a Reaction, ignore the damage from one incoming hit; the ablative layer flakes off and is consumed for the rest of the encounter. Repaired during a long rest or with a DC 14 Mechanics check." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Sacrificial ablative panels bolted over critical hull sections. The first big hit per encounter is absorbed completely; the layer is then spent until you can replate."
    },
    {
      "id": "stealth-coating",
      "name": "Sensor-Diffusing Stealth Coating",
      "category": "armor",
      "price_credits": 35000,
      "effects": [
        { "type": "ability", "rule": "Enemy ships have Disadvantage on targeting/attack rolls against this ship at Long range, and on sensor-lock checks at any range. Disadvantage is lost for the rest of the encounter the first time this ship fires its weapons (coating doesn't hide muzzle flare)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Sensor-diffusing hull coating that scatters scan returns and breaks up the ship's silhouette. Disadvantage on enemy targeting at Long range and on sensor locks — until you open fire."
    },
    {
      "id": "maneuvering-thrusters",
      "name": "Maneuvering Thrusters",
      "category": "engines",
      "price_credits": 9000,
      "effects": [{ "type": "handling_bonus", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Vector-jet maneuvering thrusters. +1 Handling."
    },
    {
      "id": "combat-thrusters",
      "name": "Combat Thrusters",
      "category": "engines",
      "price_credits": 24000,
      "effects": [
        { "type": "handling_bonus", "delta": 2 },
        { "type": "speed_band", "delta": 1 }
      ],
      "prereq": { "size": ["Small", "Medium"], "requires": ["maneuvering-thrusters"] },
      "narrative_prereq": null,
      "description": "Military-grade combat thrusters. +2 Handling and +1 speed band."
    },
    {
      "id": "sublight-booster",
      "name": "Sublight Booster",
      "category": "engines",
      "price_credits": 14000,
      "effects": [{ "type": "speed_band", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Auxiliary sublight booster. +1 speed band."
    },
    {
      "id": "cluster-thrusters",
      "name": "Cluster Thruster Array",
      "category": "engines",
      "price_credits": 28000,
      "effects": [
        { "type": "handling_bonus", "delta": 1 },
        { "type": "speed_band", "delta": 1 }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Clustered vector-thruster array — multiple smaller nozzles instead of a single big one. +1 Handling and +1 speed band. The pragmatic alternative to Combat Thrusters when you don't want to rip your sublight stack apart."
    },
    {
      "id": "inertial-compensator",
      "name": "Inertial Compensator (Tuned)",
      "category": "engines",
      "price_credits": 12000,
      "effects": [
        { "type": "ability", "rule": "Advantage on Pilot checks involving sharp maneuvers (jink, barrel roll, dive through debris, weave through asteroids). The crew also resists being thrown around the cabin by hard course changes." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Tuned inertial compensator that smooths out hard maneuvers. Advantage on Pilot checks for sharp maneuvering — the unsexy upgrade that quietly saves your party every fight."
    },
    {
      "id": "repulsorlift-boost",
      "name": "Repulsorlift Boost Coils",
      "category": "engines",
      "price_credits": 8000,
      "effects": [
        { "type": "ability", "rule": "+1 Handling while flying in atmosphere. Advantage on Pilot checks for planetary takeoff, landing, and low-altitude maneuvers." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Upgraded repulsorlift coils for low-altitude work. Cheap, atmospheric-only gains — great for smuggler campaigns where you spend half your time skimming canyon walls."
    },
    {
      "id": "smugglers-burn-cell",
      "name": "Smuggler's Burn Cell",
      "category": "engines",
      "price_credits": 22000,
      "effects": [
        { "type": "ability", "rule": "1/encounter, as a Pilot Reaction, dump the burn cell to gain +2 speed bands for 1 round. After the round the cell is spent for the encounter and the ship returns to its normal speed band." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Single-shot fuel-injection burn cell wired into the sublight. Once per encounter the pilot can light it for a +2 speed-band sprint — the canonical Corellian-smuggler escape trick."
    },
    {
      "id": "hyperdrive-upgrade-class-1",
      "name": "Hyperdrive Upgrade (Class 1.0)",
      "category": "hyperdrive",
      "price_credits": 25000,
      "effects": [{ "type": "hyperdrive_class", "set": "Class 1.0" }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Refits the ship's hyperdrive to Class 1.0. Faster long-distance jumps."
    },
    {
      "id": "mil-spec-hyperdrive-class-half",
      "name": "Mil-Spec Hyperdrive (Class 0.5)",
      "category": "hyperdrive",
      "price_credits": 75000,
      "effects": [{ "type": "hyperdrive_class", "set": "Class 0.5" }],
      "prereq": { "size": ["Small", "Medium"], "requires": ["hyperdrive-upgrade-class-1"] },
      "narrative_prereq": "Mil-spec hyperdrive cores are restricted; most civilian sales pass through gray markets.",
      "description": "Military-grade hyperdrive at Class 0.5 — the iconic upgrade that gives a YT-1300 the legendary jump speed."
    },
    {
      "id": "backup-hyperdrive",
      "name": "Backup Hyperdrive",
      "category": "hyperdrive",
      "price_credits": 18000,
      "effects": [
        { "type": "ability", "rule": "When the primary hyperdrive is disabled, the backup engages automatically at Class 12. 1/short rest the Engineer may restore the primary with a DC 18 Mechanics check." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Slow but reliable backup hyperdrive. Saves your life when the primary fails — provided you have time to run on it."
    },
    {
      "id": "astrogation-computer",
      "name": "Astrogation Computer",
      "category": "hyperdrive",
      "price_credits": 12000,
      "effects": [
        { "type": "ability", "rule": "Advantage on Pilot checks for hyperspace navigation; Engineer can plot jumps in half the usual time." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "High-end astrogation computer. Makes jump-calc-under-pressure a lot less terrifying."
    },
    {
      "id": "mil-spec-hyperdrive-class-3",
      "name": "Mil-Spec Hyperdrive (Class 0.3)",
      "category": "hyperdrive",
      "price_credits": 150000,
      "effects": [{ "type": "hyperdrive_class", "set": "Class 0.3" }],
      "prereq": { "size": ["Small", "Medium"], "requires": ["mil-spec-hyperdrive-class-half"] },
      "narrative_prereq": "Class 0.3 cores are reserved for elite couriers, Sector Rangers, and Imperial Bureau of Ships and Services flag couriers. Black-market sales typically require a fence with capital-fleet contacts.",
      "description": "Top-tier hyperdrive refit — Class 0.3, the fastest non-prototype jump rating in canon. Replaces the Class 0.5 core; only fits hulls already running a mil-spec stack."
    },
    {
      "id": "hyperjump-calibrator",
      "name": "Hyperjump Calibrator",
      "category": "hyperdrive",
      "price_credits": 14000,
      "effects": [
        { "type": "ability", "rule": "Advantage on Engineer checks to calculate a hyperspace jump (including hot-jump calculations under fire)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Pre-cached route calibrator that does most of the jump math before you need it. Advantage on Engineer hyperspace-jump-calc checks — pairs naturally with an Astrogation Computer for the always-on safe-jump experience."
    },
    {
      "id": "smuggler-routes",
      "name": "Black Sun Smuggler Routes",
      "category": "hyperdrive",
      "price_credits": 18000,
      "effects": [
        { "type": "ability", "rule": "Advantage on hyperspace evasion checks (shaking pursuit in hyperspace, avoiding Imperial Interdictor blockades, slipping a customs lane). Possession of the route packet is itself a crime in Core and most Mid Rim sectors." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "Smuggler-route packets are sourced from Black Sun, the Hutts, or independent runners. Possessing the data is illegal in most Core sectors; selling it is a capital offense in Imperial space.",
      "description": "Encrypted packet of unsanctioned hyperspace lanes — Kessel Run-style shortcuts and uncharted corridors maintained by the smuggling underworld. Advantage on hyperspace evasion checks. Illegal in Core Worlds."
    },
    {
      "id": "microjump-drive",
      "name": "Microjump Drive",
      "category": "hyperdrive",
      "price_credits": 35000,
      "effects": [
        { "type": "ability", "rule": "1/encounter, the pilot may execute a microjump as an action: the ship instantly relocates to the opposite edge of the encounter area (escapes range bands, breaks weapon locks). Requires a DC 16 Pilot check to land cleanly; on a failure the ship takes 1d10 HP damage from a botched jump and the encounter relocation still resolves." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "Microjump drives are a New Republic-era innovation; older campaigns may rule them prototype-only.",
      "description": "Combat-rated microjump drive — short, precisely calculated hyperspace hops measured in light-seconds instead of light-years. 1/encounter emergency repositioning, with a real risk of taking damage if the jump-calc is off."
    },
    {
      "id": "extra-hardpoint-fixed",
      "name": "Extra Hardpoint (Fixed) I",
      "category": "weapons",
      "price_credits": 18000,
      "effects": [{ "type": "hardpoint_fixed", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Engineering refit installs an additional fixed weapon hardpoint. Adds 1 to the chassis's fixed-hardpoint cap. Tier I — a Tier II refit (separate upgrade) adds a second hardpoint."
    },
    {
      "id": "extra-hardpoint-fixed-ii",
      "name": "Extra Hardpoint (Fixed) II",
      "category": "weapons",
      "price_credits": 28000,
      "effects": [{ "type": "hardpoint_fixed", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"], "requires": ["extra-hardpoint-fixed"] },
      "narrative_prereq": null,
      "description": "Second-tier engineering refit. Adds another fixed hardpoint on top of the Tier I refit, for a total of +2 fixed slots over the chassis stock. Diminishing-returns cost — the structural reinforcement to mount a third forward gun is significantly harder than the first."
    },
    {
      "id": "extra-hardpoint-turret",
      "name": "Extra Hardpoint (Turret) I",
      "category": "weapons",
      "price_credits": 20000,
      "effects": [{ "type": "hardpoint_turret", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Engineering refit installs an additional turret hardpoint with full-arc rotation. Adds 1 to the chassis's turret-hardpoint cap. Tier I — a Tier II refit adds a second turret."
    },
    {
      "id": "extra-hardpoint-turret-ii",
      "name": "Extra Hardpoint (Turret) II",
      "category": "weapons",
      "price_credits": 32000,
      "effects": [{ "type": "hardpoint_turret", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"], "requires": ["extra-hardpoint-turret"] },
      "narrative_prereq": null,
      "description": "Second-tier engineering refit. Adds another turret hardpoint on top of the Tier I refit. Mounting two extra full-arc turrets requires significant power-distribution and structural work — hence the cost premium over Tier I."
    },
    {
      "id": "extra-hardpoint-missile",
      "name": "Extra Hardpoint (Missile Bay) I",
      "category": "weapons",
      "price_credits": 22000,
      "effects": [{ "type": "hardpoint_missile", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Adds a missile-bay hardpoint to the hull. +1 to missile-bay cap. Tier I — a Tier II refit adds a second missile bay."
    },
    {
      "id": "extra-hardpoint-missile-ii",
      "name": "Extra Hardpoint (Missile Bay) II",
      "category": "weapons",
      "price_credits": 35000,
      "effects": [{ "type": "hardpoint_missile", "delta": 1 }],
      "prereq": { "size": ["Small", "Medium", "Large"], "requires": ["extra-hardpoint-missile"] },
      "narrative_prereq": null,
      "description": "Second-tier engineering refit. Adds another missile bay on top of the Tier I refit. Missile bays demand reinforced ammunition magazines and dedicated cooling — the most expensive of the hardpoint refits."
    },
    {
      "id": "targeting-computer",
      "name": "Targeting Computer",
      "category": "weapons",
      "price_credits": 15000,
      "effects": [
        { "type": "ability", "rule": "Gunner gains +1 to all starship weapon attack rolls." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Advanced targeting computer. +1 to all Gunner attack rolls fired from this ship."
    },
    {
      "id": "linked-fire-control",
      "name": "Linked Fire Control",
      "category": "weapons",
      "price_credits": 10000,
      "effects": [
        { "type": "ability", "rule": "Two identical weapons in the same arc fire as one attack with +1 accuracy and add 1 die step to damage (e.g. 2d10 → 3d10)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Synchronizes two identical weapons to fire as a single linked burst."
    },
    {
      "id": "advanced-sensor-array",
      "name": "Advanced Sensor Array",
      "category": "sensors",
      "price_credits": 11000,
      "effects": [
        { "type": "sensors_set", "set": "Advanced" },
        { "type": "ability", "rule": "+1 to Starship Initiative." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Long-range advanced sensor array. Upgrades sensors descriptor and grants +1 to Starship Initiative."
    },
    {
      "id": "sensor-mask",
      "name": "Sensor Mask",
      "category": "sensors",
      "price_credits": 16000,
      "effects": [
        { "type": "ability", "rule": "Imposes Disadvantage on enemy ships' sensor-scan checks against this ship." }
      ],
      "prereq": { "size": ["Small", "Medium"] },
      "narrative_prereq": null,
      "description": "Active sensor-masking suite that scrambles inbound scans."
    },
    {
      "id": "sensor-decoy-launcher",
      "name": "Sensor Decoy Launcher",
      "category": "sensors",
      "price_credits": 13000,
      "effects": [
        { "type": "ability", "rule": "1/encounter, as a Reaction, break one missile or sensor lock targeting this ship." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Sensor-decoy launcher. Once per encounter, break a missile or sensor lock as a Reaction."
    },
    {
      "id": "holographic-ecm-suite",
      "name": "Holographic ECM Suite",
      "category": "sensors",
      "price_credits": 40000,
      "effects": [
        { "type": "ability", "rule": "Targeting computers (and any +to-hit ability from upgrades) on enemy ships have Disadvantage on attack rolls against this ship." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "ECM suites are restricted in most Core Worlds; civilian installation usually requires forged certs.",
      "description": "Holographic ECM countermeasures suite. Projects false ship images to defeat enemy targeting computers."
    },
    {
      "id": "tractor-beam-installation",
      "name": "Tractor Beam Installation",
      "category": "utility",
      "price_credits": 20000,
      "effects": [
        { "type": "tractor_beam_set", "value": true },
        { "type": "weapon_add", "weapon_id": "tractor-beam-projector" }
      ],
      "prereq": { "size": ["Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Installs a tractor beam projector. Adds the tractor beam weapon and sets the chassis tractor_beam flag to true."
    },
    {
      "id": "repair-drones",
      "name": "Repair Drone Bay",
      "category": "utility",
      "price_credits": 17000,
      "effects": [
        { "type": "ability", "rule": "1/short rest, restore 1d8+2 HP to the ship as a 10-minute action (the drones do the work)." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Automated repair-drone bay. Short-rest patch job between fights without an Engineer skill check."
    },
    {
      "id": "escape-pods",
      "name": "Escape Pod Cluster",
      "category": "utility",
      "price_credits": 6500,
      "effects": [
        { "type": "ability", "rule": "Ship can evacuate up to (passengers + crew) / 2 occupants via escape pods, rounded up. Standard equipment on most freighters; this upgrade adds the cluster to ships that lack it." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Cluster of escape pods bolted into a free bulkhead. Saves lives when the ship doesn't."
    },
    {
      "id": "slave-circuit",
      "name": "Slave Circuit",
      "category": "utility",
      "price_credits": 14000,
      "effects": [
        { "type": "ability", "rule": "Ship's owner can summon and pilot the ship remotely within a 1 km range via comlink. Useful for getaway scenarios where the crew is elsewhere on planet." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": "Often associated with bounty hunters and smugglers; some sectors prohibit slave circuits on civilian craft.",
      "description": "Remote piloting circuit. Call your ship to your position from up to a kilometer away."
    },
    {
      "id": "holocomm-suite",
      "name": "Holocomm Suite",
      "category": "utility",
      "price_credits": 9500,
      "effects": [
        { "type": "ability", "rule": "Galactic-range holographic communications via HoloNet relays. Enables real-time face-to-face calls across systems." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Full holocomm suite. Galaxy-wide encrypted hologram calls, contact lists, message recording."
    },
    {
      "id": "astromech-docking-bay",
      "name": "Astromech Docking Bay",
      "category": "utility",
      "price_credits": 4500,
      "effects": [
        { "type": "ability", "rule": "Adds an astromech socket. R-series droids slotted into the bay can perform in-flight Mechanics + Astrogation as a crew action without occupying a crew station." }
      ],
      "prereq": { "size": ["Small", "Medium", "Large"] },
      "narrative_prereq": null,
      "description": "Astromech droid socket for an R-series unit. The classic X-wing pairing; brings R2-style support to civilian ships."
    }
  ]
}
