deadhead-space-freight-tycoon/packages/content/src/data/config.ts

132 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
// The in-game date shown when the clock started (decision 0.5.9).
epoch: {
realStart: "2026-01-01T00:00:00Z",
gameStart: "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",
// Five runs, at double XP, so the avatar has a skill point at the deal (CR-017).
tutorialRunsBeforeDeal: 5,
tutorialXpMultiplier: 2,
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.25,
// The deal (CR-013): Halvorsen's Courier for the avatar, his Clipper for the
// veteran, and the Earth bay. The loan is computed from their prices.
// The deal's ships come with full tanks (CR-018, decision 0.5.111).
deal: {
avatarShipModelId: "courier",
veteranShipModelId: "clipper",
bayLocationId: "earth",
},
contractBoardPeriodRealMinutes: 10,
// Housekeeping (Step 7.3, CR-014): four hours of boards; a week of seen trips.
boardRetentionPeriods: 24,
savedDispatchRetentionRealHours: 168,
logbookRetentionRealDays: 7,
// Fuel (CR-015): credits per fu before each location's price multiple, and
// the emergency fuel markup (decisions 0.5.96, 0.5.99). Halved by CR-018
// (decision 0.5.110): the balance script prints each ship and route's fuel share.
baseFuelPricePerFu: 5,
emergencyFuelMultiplier: 2.5,
// Pay and fuel scale gently with distance past an Earth–Moon leg (decision 0.5.84).
economicDistance: { referenceMillionKm: 0.384, exponent: 0.65 },
// Ship upgrades (CR-009): level 1, 2, 3.
upgradeLevels: [
{ costPercentOfPrice: 10, shopRealMinutes: 10 },
{ costPercentOfPrice: 20, shopRealMinutes: 20 },
{ costPercentOfPrice: 35, shopRealMinutes: 30 },
],
// Duty and rest (CR-004): about three Moon round trips, then rest.
dutyLimitGameHours: 12,
longHaulDutyBonusGameHours: 2,
// One board period (10 real minutes at 60× compression), so a rested pilot
// always wakes to a fresh board (decision 0.5.46).
restGameHours: 10,
firstContactChance: 0.1,
firstContactPayoutMultiplier: 2,
// Each board contract pays its own market rate, ±15% (CR-008).
contractPayVariance: 0.15,
// Priority contracts (CR-007): 15% of eligible goods, ×1.5 pay, a window as
// long as a Freighter's trip.
priorityChance: 0.15,
priorityPayoutMultiplier: 1.5,
priorityReferenceShipModelId: "freighter",
priorityWindowFactor: 1,
// 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 },
],
// Boards that fit the fleet (CR-006): a band no ship can carry keeps one
// preview job; flyable bands keep one open job, the rest fit a ship and pilot.
boardPreviewSlots: 1,
boardOpenSlotsPerBand: 1,
// Boards keep only jobs the fleet can complete (CR-019): candidates tried at most.
boardMaxAttempts: 200,
// 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,
// A quarter of each contract's profit (payout − fuel) goes to a hired pilot (CR-010).
pilotProfitShare: 0.25,
// Independent pilots (CR-021): the Dispatch Office costs about a Lighter; the
// player has the first 3 minutes of every 10-minute board; pilots turn round
// in 15 game minutes (15 real seconds) and head home after 3 empty boards.
independentPilots: {
dispatchOfficePrice: 36_000,
firstLookRealMinutes: 3,
turnaroundGameMinutes: 15,
emptyPeriodsBeforeHome: 3,
maxCatchUpRealDays: 7,
defaultSpendingFloor: 500,
},
fleetSleep: { defaultHours: 24, optionsHours: [12, 24, 48, 72] },
events: {
baseChance: 0.02,
chancePerGameHour: 0.004,
maxChance: 0.35,
localLoopMultiplier: 0.5,
beltCrossingMultiplier: 1.3,
stormArrivalMultiplier: 1.2,
shipCooldownTrips: 2,
fleetRadioGapRealMinutes: 45,
graceTripsAfterDeal: 3,
firstEventId: "derelict-pod",
firstEventMinTripGameHours: 6,
fireFrom: 0.2,
fireTo: 0.7,
responseWindowRealMinutes: 30,
minTripFraction: 0.5,
},
hull: {
floorPct: 5,
ratingReductionPerPoint: 0.1,
maxRatingReduction: 0.5,
noDangerousBelowPct: 50,
needsRepairBelowPct: 25,
damagedChanceMultiplier: 2,
repairCostPerPoint: 0.01,
repairRealMinutesPerPoint: 0.5,
repairMinRealMinutes: 5,
wearPerGameHour: 0.35,
},
};