51 lines
2.0 KiB
TypeScript
51 lines
2.0 KiB
TypeScript
import type { GameConfig } from "../schemas";
|
||
|
||
/** Default tuning. All numbers are first guesses until balancing in Phase 12. */
|
||
export const gameConfig: GameConfig = {
|
||
// 1 real minute = 1 game hour.
|
||
timeCompression: 60,
|
||
// Placeholders: the design docs do not fix an in-game start date yet.
|
||
epoch: {
|
||
realStart: "2026-01-01T00:00:00Z",
|
||
ephemerisDate: "2100-01-01T00:00:00Z",
|
||
},
|
||
// A small cushion: a couple of Courier fuel loads from Earth (CR-001).
|
||
startingCredits: 500,
|
||
tutorialPayoutShare: 0.5,
|
||
contractBoardSize: 8,
|
||
// One tutorial contract per mass tier (CR-001).
|
||
tutorialBoardSize: 3,
|
||
tutorialLoanerShipModelId: "company-courier",
|
||
tutorialRunsBeforeDeal: 4,
|
||
tutorialMassTonnes: { light: 5, medium: 12, full: 20 },
|
||
// 20 t adds 0.4 game hours (24 real seconds) of loading and unloading.
|
||
handlingGameHoursPerTonne: 0.02,
|
||
loanRepaymentShare: 0.3,
|
||
// Courier price + Earth bay lease.
|
||
dealLoanAmount: 5000,
|
||
contractBoardPeriodRealMinutes: 60,
|
||
// Duty and rest (CR-004): about three Moon round trips, then rest.
|
||
dutyLimitGameHours: 12,
|
||
longHaulDutyBonusGameHours: 2,
|
||
// One board period (60 real minutes at 60× compression), so a rested pilot
|
||
// always wakes to a fresh board (decision 0.5.46).
|
||
restGameHours: 60,
|
||
firstContactChance: 0.1,
|
||
firstContactPayoutMultiplier: 2,
|
||
// One band per ship size, so every board has work for every ship (playtest fix):
|
||
// up to a Courier's 20 t, a Freighter's 100 t, and a Bulk Hauler's 400 t.
|
||
contractMassBands: [
|
||
{ min: 5, max: 20, count: 3 },
|
||
{ min: 21, max: 100, count: 3 },
|
||
{ min: 101, max: 400, count: 2 },
|
||
],
|
||
// Mars at its closest needs no Long Haul; Jupiter at its farthest needs level 5.
|
||
longHaulCutoffsMillionKm: [100, 250, 400, 600, 800],
|
||
xpPerDelivery: { base: 10, perMillionKm: 0.2, perCargoTier: 5 },
|
||
pilotLevelXpThresholds: [100, 250, 450, 700, 1000, 1400, 1900, 2500, 3200, 4000],
|
||
// Ten levels × 2 points = enough to max all four skills (4 × 5 levels).
|
||
skillPointsPerLevel: 2,
|
||
pilotHireCost: 2000,
|
||
pilotPayPerDelivery: 100,
|
||
};
|