Package weight, payload capacity and per-kg payout (ISS-045)
CI / build + unit + e2e (pull_request) Successful in 8m2s
CI / build + unit + e2e (pull_request) Successful in 8m2s
Packages carry a real weightKg (unit weight x count with +/-30% jitter), plane capacity becomes maxPayloadKg instead of 6 slots, load validation sums cargo weight against the payload, and the payout gains a per-kg part. Loadout display shows tonnage; OpenAPI swaps CatalogEntry.capacity for maxPayloadKg and adds PackageState.weightKg.
This commit is contained in:
+10
-5
@@ -16,8 +16,10 @@ export interface PlaneType {
|
||||
// Market price in € (v0.8.0): buying costs `price`, selling pays out
|
||||
// SELL_FRACTION × price.
|
||||
price: number;
|
||||
// Cargo slot capacity (v0.12.0): how many packages can be loaded on one plane.
|
||||
capacity: number;
|
||||
// Max payload in kg (v0.27.0, ISS-045 — replaces the v0.12.0 slot count): total
|
||||
// package weight that can be loaded on one plane. ATR 72-600-class figure, tuned
|
||||
// so every cargo type at max count × 1.3 jitter still fits alone (see UNIT_WEIGHT_KG).
|
||||
maxPayloadKg: number;
|
||||
}
|
||||
|
||||
export const PLANE_TYPES: Record<string, PlaneType> = {
|
||||
@@ -31,7 +33,9 @@ export const PLANE_TYPES: Record<string, PlaneType> = {
|
||||
// €200k — with the starting cash of €20k and typical hop rewards (~€1–3k),
|
||||
// a second ATR takes sustained play to afford, as intended for the MVP sink.
|
||||
price: 200_000,
|
||||
capacity: 6,
|
||||
// ponytail: balance-tunable payload (kg) — every cargo type at max count × 1.3 jitter
|
||||
// must stay below this so any single package fits alone; typical loads carry ~3–6 packages.
|
||||
maxPayloadKg: 4_800,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -57,7 +61,8 @@ export interface CatalogEntry {
|
||||
// lib/sim/movement.ts with these + FUEL_DENSITY_KG_PER_L.
|
||||
emptyWeightKg: number;
|
||||
speedKmh: number;
|
||||
capacity: number;
|
||||
// Max payload in kg (v0.27.0) — total package weight that can be loaded on one plane.
|
||||
maxPayloadKg: number;
|
||||
}
|
||||
|
||||
// The catalog as a flat array, one entry per plane type — the single source of
|
||||
@@ -71,6 +76,6 @@ export function catalogEntries(): CatalogEntry[] {
|
||||
burnPerKm: t.burnPerKm,
|
||||
emptyWeightKg: t.emptyWeightKg,
|
||||
speedKmh: t.speedKmh,
|
||||
capacity: t.capacity,
|
||||
maxPayloadKg: t.maxPayloadKg,
|
||||
}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user