import { cargoTypes, skills } from "./data/cargo"; import { gameConfig } from "./data/config"; import { dealLoanAmount } from "./deal"; import { goods } from "./data/goods"; import { locations } from "./data/locations"; import { onboardingGoals, scriptedTutorialContracts, veteranPilot } from "./data/onboarding"; import { shipModels } from "./data/ships"; import { upgrades } from "./data/upgrades"; /** Returns a lookup that gives `undefined` for an unknown id instead of throwing. */ function byId(items: readonly T[]): (id: string) => T | undefined { const map = new Map(items.map((item) => [item.id, item])); return (id) => map.get(id); } /** All static game data in one object, with lookups by id. */ export const content = { locations, shipModels, /** Ship models players can buy (excludes company ships such as the loaner). */ purchasableShipModels: shipModels.filter((s) => s.purchasable), cargoTypes, goods, skills, config: gameConfig, scriptedTutorialContracts, onboardingGoals, veteranPilot, upgrades, /** The deal's loan: its ships' prices plus the bay lease (decision 0.5.83). */ dealLoanAmount: dealLoanAmount({ config: gameConfig, shipModels, locations }), location: byId(locations), shipModel: byId(shipModels), cargoType: byId(cargoTypes), good: byId(goods), skill: byId(skills), onboardingGoal: byId(onboardingGoals), upgrade: byId(upgrades), }; export type Content = typeof content;