import type { Upgrade } from "../schemas"; /** * Ship upgrades (CR-009 §2). Percentages are of the model's base stat and add * up across levels. Overrides keep models distinct (decision 0.5.67) and give a * maxed Courier a reach to Mars near closest approach only (decision 0.5.68). */ export const upgrades: Upgrade[] = [ { id: "engines", name: "Engine Tuning", stat: "cruiseSpeedKmPerGameHour", percentPerLevel: 10, maxLevel: 3, }, { id: "cargo-bay", name: "Cargo Bay Expansion", stat: "cargoCapacityTonnes", percentPerLevel: 15, maxLevel: 3, }, { id: "fuel-tanks", name: "Extended Fuel Tanks", stat: "fuelRangeMillionKm", percentPerLevel: 20, maxLevel: 3, modelOverrides: { // 5 → 35 → 65 → 95 M km: Mars (≈ 55–400 M km) only near closest approach, and only at level 3. courier: { percentPerLevel: 600 }, // 650 → 942.5 M km at level 3: still short of a base Bulk Hauler's 1000 (and of Jupiter at its farthest). freighter: { percentPerLevel: 15 }, }, }, { id: "landing-thrusters", name: "Landing Thrusters", stat: "overheadGameHours", percentPerLevel: -15, maxLevel: 3, }, { id: "handling-gear", name: "Cargo Handling Gear", stat: "handlingGameHoursPerTonne", percentPerLevel: -15, maxLevel: 3, }, ]; /** An upgrade's percent per level for a ship model, after overrides. */ export function upgradePercentPerLevel(upgrade: Upgrade, modelId: string): number { return upgrade.modelOverrides?.[modelId]?.percentPerLevel ?? upgrade.percentPerLevel; } /** An upgrade's highest level for a ship model, after overrides. */ export function upgradeMaxLevel(upgrade: Upgrade, modelId: string): number { return upgrade.modelOverrides?.[modelId]?.maxLevel ?? upgrade.maxLevel; }