Step 10H.1: pay variance setting and five more early goods
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
394fc1b0db
commit
6e427e52f7
|
|
@ -217,3 +217,4 @@ Spec: `memory-bank/change-requests/CR-007-cargo-goods.md` (supplied as "CR-005 /
|
||||||
## Phase 10H — Boards That Feel Fresh (CR-008)
|
## Phase 10H — Boards That Feel Fresh (CR-008)
|
||||||
|
|
||||||
Spec: `memory-bank/change-requests/CR-008-fresh-boards.md`. New decisions recorded as plan §0.5.60–0.5.62.
|
Spec: `memory-bank/change-requests/CR-008-fresh-boards.md`. New decisions recorded as plan §0.5.60–0.5.62.
|
||||||
|
- [x] **Step 10H.1 — Content: pay variance and new goods.** Config `contractPayVariance` 0.15. Five Standard goods (decision 0.5.61): Water Recyclers, Spare Parts (Priority-eligible) and Lunar Base Supplies Earth → Moon; Crew Personal Effects and Recycled Alloys Moon → Earth (locations' goods lists update from the catalog). Earth → Moon now has 6 Standard goods, Moon → Earth 4. All existing tests still pass (tutorial masses unchanged: goods on both routes still hold 5/12/20 t). Test: `goods.test.ts` (route variety, variance is a fraction).
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@ export const gameConfig: GameConfig = {
|
||||||
restGameHours: 10,
|
restGameHours: 10,
|
||||||
firstContactChance: 0.1,
|
firstContactChance: 0.1,
|
||||||
firstContactPayoutMultiplier: 2,
|
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
|
// Priority contracts (CR-007): 15% of eligible goods, ×1.5 pay, a window as
|
||||||
// long as a Freighter's trip.
|
// long as a Freighter's trip.
|
||||||
priorityChance: 0.15,
|
priorityChance: 0.15,
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,58 @@ export const goods: Good[] = [
|
||||||
demandedAt: [EARTH, MARS, CERES],
|
demandedAt: [EARTH, MARS, CERES],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// More early Standard goods (CR-008, decision 0.5.61).
|
||||||
|
{
|
||||||
|
id: "water-recyclers",
|
||||||
|
name: "Water Recyclers",
|
||||||
|
cargoClassId: "standard",
|
||||||
|
massTonnes: { min: 3, max: 18 },
|
||||||
|
payMultiplier: 1.1,
|
||||||
|
priorityEligible: false,
|
||||||
|
producedAt: [EARTH],
|
||||||
|
demandedAt: [MOON, MARS, CERES],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "spare-parts",
|
||||||
|
name: "Spare Parts",
|
||||||
|
cargoClassId: "standard",
|
||||||
|
massTonnes: { min: 1, max: 12 },
|
||||||
|
payMultiplier: 1.05,
|
||||||
|
priorityEligible: true,
|
||||||
|
producedAt: [EARTH, MARS],
|
||||||
|
demandedAt: [MOON, CERES, JUPITER],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "lunar-base-supplies",
|
||||||
|
name: "Lunar Base Supplies",
|
||||||
|
cargoClassId: "standard",
|
||||||
|
massTonnes: { min: 2, max: 20 },
|
||||||
|
payMultiplier: 1,
|
||||||
|
priorityEligible: false,
|
||||||
|
producedAt: [EARTH],
|
||||||
|
demandedAt: [MOON],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "crew-effects",
|
||||||
|
name: "Crew Personal Effects",
|
||||||
|
cargoClassId: "standard",
|
||||||
|
massTonnes: { min: 0.5, max: 5 },
|
||||||
|
payMultiplier: 1.2,
|
||||||
|
priorityEligible: false,
|
||||||
|
producedAt: [MOON, MARS, CERES],
|
||||||
|
demandedAt: [EARTH],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "recycled-alloys",
|
||||||
|
name: "Recycled Alloys",
|
||||||
|
cargoClassId: "standard",
|
||||||
|
massTonnes: { min: 5, max: 30 },
|
||||||
|
payMultiplier: 0.95,
|
||||||
|
priorityEligible: false,
|
||||||
|
producedAt: [MOON],
|
||||||
|
demandedAt: [EARTH, MARS],
|
||||||
|
},
|
||||||
|
|
||||||
// High-Value: Expensive Cargo skill; tier from the good.
|
// High-Value: Expensive Cargo skill; tier from the good.
|
||||||
{
|
{
|
||||||
id: "medical-supplies",
|
id: "medical-supplies",
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,8 @@ export const gameConfigSchema = z
|
||||||
restGameHours: z.number().positive(),
|
restGameHours: z.number().positive(),
|
||||||
firstContactChance: fraction,
|
firstContactChance: fraction,
|
||||||
firstContactPayoutMultiplier: z.number().positive(),
|
firstContactPayoutMultiplier: z.number().positive(),
|
||||||
|
/** Each board contract's pay rate varies within ± this share of 1 (decision 0.5.60). */
|
||||||
|
contractPayVariance: fraction,
|
||||||
/** Share of Priority-eligible contracts that become Priority (decision 0.5.56). */
|
/** Share of Priority-eligible contracts that become Priority (decision 0.5.56). */
|
||||||
priorityChance: fraction,
|
priorityChance: fraction,
|
||||||
/** Payout multiplier for a Priority contract. */
|
/** Payout multiplier for a Priority contract. */
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,13 @@ describe("goods catalog (CR-007)", () => {
|
||||||
expect(standardOn("moon", "earth").length).toBeGreaterThanOrEqual(2);
|
expect(standardOn("moon", "earth").length).toBeGreaterThanOrEqual(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("offers variety on the early route: ≥ 5 Standard goods Earth→Moon, ≥ 4 back (CR-008)", () => {
|
||||||
|
expect(standardOn("earth", "moon").length).toBeGreaterThanOrEqual(5);
|
||||||
|
expect(standardOn("moon", "earth").length).toBeGreaterThanOrEqual(4);
|
||||||
|
expect(gameConfig.contractPayVariance).toBeGreaterThan(0);
|
||||||
|
expect(gameConfig.contractPayVariance).toBeLessThan(1);
|
||||||
|
});
|
||||||
|
|
||||||
it("keeps each location's produces and demands in sync with the catalog", () => {
|
it("keeps each location's produces and demands in sync with the catalog", () => {
|
||||||
for (const location of locations) {
|
for (const location of locations) {
|
||||||
expect(location.produces).toEqual(goodsProducedAt(location.id));
|
expect(location.produces).toEqual(goodsProducedAt(location.id));
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ const validGameConfig = {
|
||||||
restGameHours: 60,
|
restGameHours: 60,
|
||||||
firstContactChance: 0.1,
|
firstContactChance: 0.1,
|
||||||
firstContactPayoutMultiplier: 2,
|
firstContactPayoutMultiplier: 2,
|
||||||
|
contractPayVariance: 0.15,
|
||||||
priorityChance: 0.15,
|
priorityChance: 0.15,
|
||||||
priorityPayoutMultiplier: 1.5,
|
priorityPayoutMultiplier: 1.5,
|
||||||
priorityReferenceShipModelId: "freighter",
|
priorityReferenceShipModelId: "freighter",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue