diff --git a/docs/PRD.md b/docs/PRD.md index ddde742..4f049c7 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -614,6 +614,11 @@ changes the game's switch. built-ins, and the standard-banner pulls most shops sell beside them, added only when the reader switches on *Include standard-banner pulls* under the built-ins switch. One answer for every game; off by default, so the reader chooses between premium only and both. +**Endgame modes on longer cycles are built in too** — Star Rail's six-week rotations, ZZZ's +two-week Shiyu Defense and Deadly Assault, Wuthering Waves' Tower of Adversity, NTE's fortnightly +Beyond the Rails and Tycoon Incentive Fund — each ticked once a cycle unless a page states a number; +see `docs/superpowers/specs/2026-10-16-cycle-routines-design.md`. A built-in whose cycle ends at one +instant on every server rolls on that server's reset for every reader. **F18 — What changed.** The app now says what changed, in two tiers, both tied to git. **Short entries** — one line each, diff --git a/docs/superpowers/specs/2026-10-14-built-in-routines-design.md b/docs/superpowers/specs/2026-10-14-built-in-routines-design.md index c976845..adf0c25 100644 --- a/docs/superpowers/specs/2026-10-14-built-in-routines-design.md +++ b/docs/superpowers/specs/2026-10-14-built-in-routines-design.md @@ -254,9 +254,9 @@ Looked for on 2026-10-14 and not shipped. Each is a candidate the owner may know | Wuwa | Afterglow Coral exchange, Souvenir Stores, Tactical Hologram shops | No limit, or no stated reset | | Wuwa | Simulation Training, Forgery | Cost Waveplates; no weekly cap | | Wuwa | Tower of Adversity Hazard Zone (28 days), Whimpering Wastes | Multi-week → sub-project 2; the owner's in-game dates for both are in § Scope. **Tower of Adversity shipped 2026-10-16** as a 28-day cycle; Whimpering Wastes has no fixed length and stays unshipped ([cycle routines spec](2026-10-16-cycle-routines-design.md) § Not shipped) | -| NTE | Tycoon Incentive Fund (Pink Paws Heist, Volley Star weekly match, Display Case idle earnings) | A 14-day cycle by the game's own guide, not a week → sub-project 2 (§ Scope). The guide this branch cites calls Pink Paws' cap weekly; the game disagrees. The cap also differs per player (Puka Membership Program) | +| NTE | Tycoon Incentive Fund (Pink Paws Heist, Volley Star weekly match, Display Case idle earnings) | A 14-day cycle by the game's own guide, not a week → sub-project 2 (§ Scope). The guide this branch cites calls Pink Paws' cap weekly; the game disagrees. The cap also differs per player (Puka Membership Program). **Shipped 2026-10-16** at the base cap with a note ([cycle routines spec](2026-10-16-cycle-routines-design.md), decision 5) | | NTE | Lost Exchange | Single launch-era source; nothing to count | -| NTE | Beyond the Rails | 14-day cycle → sub-project 2; the owner's in-game date is in § Scope | +| NTE | Beyond the Rails | 14-day cycle → sub-project 2; the owner's in-game date is in § Scope. **Shipped 2026-10-16**, on Asia's clock ([cycle routines spec](2026-10-16-cycle-routines-design.md), decision 3) | **One finding outside this change:** Game8's NTE boss page (2026-10-10) says the weekly timer resets "every Monday at 4AM", while `games.ts` has NTE on 05:00 (Game-Time-Master, neverness.gg, diff --git a/src/shared/routines.ts b/src/shared/routines.ts index b3cf78c..6312083 100644 --- a/src/shared/routines.ts +++ b/src/shared/routines.ts @@ -570,6 +570,31 @@ export const ROUTINES: readonly Routine[] = [ checked: "2026-10-16", note: "The delivery from the Old Mailbox in your second apartment: one claim a week. Confirmed in game, 2026-10-16.", }, + // Two fortnightly cycles, anchored on the owner's in-game timers (2026-10-16). + { + id: "routine:nte:beyond-the-rails", + game: "nte", + title: "Beyond the Rails", + period: { unit: "cycle", days: 14, from: "2026-10-22" }, + // Read on Europe as ending Wednesday 21:00 UTC: Asia's Thursday reset. + clock: "asia", + measure: { kind: "days", required: 1 }, + source: "https://gamewith.net/nte/74216", + asOf: "2026-08-13", + checked: "2026-10-16", + note: "Special routes. Ends at the Asia server's reset on every server, as read on Europe on 2026-10-16.", + }, + { + id: "routine:nte:tycoon-fund", + game: "nte", + title: "Tycoon Incentive Fund", + period: { unit: "cycle", days: 14, from: "2026-10-26" }, + measure: { kind: "amount", target: 1000000, unit: "fons" }, + source: "https://allthings.how/neverness-to-everness-tycoon-encouragement-fund-what-changed-for-pink-paws-heist/", + asOf: "2026-08-15", + checked: "2026-10-16", + note: "The base cap; the Puka Membership Program raises yours. Make it mine to set it.", + }, ]; /** A game's built-ins, in the order listed. */ diff --git a/test/routines.test.ts b/test/routines.test.ts index f9d3954..15e4095 100644 --- a/test/routines.test.ts +++ b/test/routines.test.ts @@ -102,6 +102,8 @@ describe("ROUTINES", () => { ["City Stamina", week, { kind: "amount", target: 700, unit: "stamina" }], ["Realm of Greed", week, { kind: "days", required: 1 }], ["Special City Commission", week, { kind: "days", required: 1 }], + ["Beyond the Rails", { unit: "cycle", days: 14, from: "2026-10-22" }, { kind: "days", required: 1 }], + ["Tycoon Incentive Fund", { unit: "cycle", days: 14, from: "2026-10-26" }, { kind: "amount", target: 1000000, unit: "fons" }], ]); expect(shape("nikki")).toEqual([ ["Mira Journey weekly EXP", week, { kind: "amount", target: 8000, unit: "Journey EXP" }],