61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
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;
|
||
}
|