fix(games): give Reverse: 1999's Asia readers the Asia server's clock

Reverse: 1999 has an Asia server on UTC+8 alongside Global on UTC-5, both
resetting at 05:00. Asia readers were on Global's 10:00 UTC; theirs rolls
at 21:00 UTC. Source: Game-Time-Master.

Re-labels the game-day of some already-logged ticks for Asia readers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Lucas Winther
2026-10-13 12:41:51 +02:00
co-authored by Claude Opus 5.5
parent aadd57126f
commit ad159c5306
2 changed files with 17 additions and 12 deletions
+8 -6
View File
@@ -98,12 +98,14 @@ export const GAMES: Record<GameId, GameMeta> = {
// model gets the shared server's clock. The source is Game8 prose with no
// clock of its own, so the zone is taken as Game-Time-Master states it.
p5x: { id: "p5x", name: "Persona 5: The Phantom X", short: "P5X", hue: "#D62246" , studio: "Perfect World", dailyTasks: "Daily missions, stamina", resetOffsets: { asia: 0, america: 0, europe: 0 }, resetHourLocal: { asia: 20, america: 20, europe: 20 } },
// Reverse: 1999 runs one global server on a fixed UTC-5 and rolls its day at
// **05:00**, not the 04:00 every other game here uses. Both facts come from
// the source rather than from habit: all 154 rows on the wiki's event list
// state `(UTC-5)`, and every one of them starts at 05:00 and ends at 04:59 —
// an event ending one minute before the reset that the next one begins on.
r1999: { id: "r1999", name: "Reverse: 1999", short: "R1999", hue: "#C9A227" , studio: "Bluepoch", dailyTasks: "Daily missions", resetOffsets: { asia: -5, america: -5, europe: -5 }, resetHourLocal: { asia: 5, america: 5, europe: 5 } },
// Reverse: 1999 rolls its day at **05:00**, not 04:00, on two servers: Global
// on a fixed UTC-5 for America and Europe, and Asia on UTC+8. The Global half
// comes from the source: all 154 rows on the wiki's event list state
// `(UTC-5)`, and every one of them starts at 05:00 and ends at 04:59 — an
// event ending one minute before the reset that the next one begins on. The
// Asia server is Game-Time-Master's (github.com/cicerakes/Game-Time-Master);
// the wiki only ever describes Global.
r1999: { id: "r1999", name: "Reverse: 1999", short: "R1999", hue: "#C9A227" , studio: "Bluepoch", dailyTasks: "Daily missions", resetOffsets: { america: -5, europe: -5 }, resetHourLocal: { asia: 5, america: 5, europe: 5 } },
// Blue Archive Global runs one worldwide server that resets at 04:00 Japan
// time — 19:00 UTC — per Game-Time-Master (github.com/cicerakes/Game-Time-Master),
// and guides on Sportskeeda and Deltia's Gaming say the same in JST. The
+9 -6
View File
@@ -367,8 +367,8 @@ describe("dailiesId", () => {
});
describe("a game whose day rolls on a different hour", () => {
// Reverse: 1999 runs one global server on UTC-5 and resets at 05:00 rather
// than 04:00, so its day rolls at 10:00 UTC. Both facts are read off the
// Reverse: 1999's Global server runs UTC-5 and resets at 05:00 rather than
// 04:00, so its day rolls at 10:00 UTC. Both facts are read off the
// source: every row of its event list states (UTC-5) and runs 05:00 → 04:59.
test("rolls on 10:00 UTC, not the 09:00 a UTC-5 game would", () => {
expect(dayKey(at("2026-08-16T09:59:59Z"), "europe", "r1999")).toBe(
@@ -382,12 +382,12 @@ describe("a game whose day rolls on a different hour", () => {
);
});
test("every region gets the same answer, because there is one server", () => {
test("America and Europe share the Global server's answer", () => {
// Asia has its own UTC+8 server, so only the two regions on Global must agree.
const instant = at("2026-08-16T09:30:00Z");
const keys = (["asia", "america", "europe"] as const).map((r) =>
dayKey(instant, r, "r1999"),
expect(dayKey(instant, "america", "r1999")).toBe(
dayKey(instant, "europe", "r1999"),
);
expect(new Set(keys).size).toBe(1);
});
test("resetHourFor defaults to 04:00 for every other game", () => {
@@ -529,6 +529,9 @@ describe("reset clocks, per server, as Game-Time-Master states them", () => {
["gfl2", "asia", "21:00", 8],
["gfl2", "america", "05:00", -8],
["gfl2", "europe", "05:00", -8],
["r1999", "asia", "21:00", 8],
["r1999", "america", "10:00", -5],
["r1999", "europe", "10:00", -5],
];
for (const [game, region, utc, offset] of ROWS) {