Files
bryanthaboi ae6cac89e1 G2 support
2026-08-11 11:53:30 -04:00

68 lines
2.6 KiB
Lua

-- Assertion driver: a run that skips the boot cinema still starts on an
-- anchored game clock.
--
-- POKEPORT_IDENTITY=gold-dev POKEPORT_GAME=gold \
-- POKEPORT_DRIVER=tests/drivers/gold_clock_anchor.lua love .
--
-- NewGame (pokegold engine/menus/intro_menu.asm) calls OakSpeech, whose first
-- line is `farcall InitClock`, so wStartHour / wStartMinute always exist before
-- InitializeWorld. A driver run never reaches that screen; without the anchor
-- the save has no base and every hour read falls through to the host clock, so
-- the same run is MORN in the morning and NITE at night and the grass rolls a
-- different table each time. Prints PASS/FAIL and quits, because LOVE only
-- flushes stdout on exit.
local U = require("tests.drivers.util")
local Clock = require("src.core.gen2.Clock")
local Palettes = require("src.world.gen2.Palettes")
return function(game)
local failures = 0
local function want(label, ok, detail)
if ok then
U.log("ok " .. label)
else
failures = failures + 1
U.log("FAIL " .. label .. " (" .. tostring(detail) .. ")")
end
end
U.wait(30)
local world = game.world
want("the world booted", world ~= nil and world.map ~= nil,
world and world.status)
if not (world and world.map) then
U.log(failures == 0 and "PASS" or "FAIL")
love.event.quit()
return
end
want("the new game anchored the clock", Clock.isSet(game.save),
"save.rtc.startMinute is nil")
local hour = world:hour()
want("World:hour reads that base", hour == Clock.hour(game.save),
("world %s vs clock %s"):format(tostring(hour),
tostring(Clock.hour(game.save))))
want("the map is lit by the same hour",
world.daytime == Palettes.daytimeFor(world.map.def, hour, world.flashUsed),
("daytime %s at hour %s"):format(tostring(world.daytime), tostring(hour)))
-- The pin a screenshot run uses has to move both halves together.
local forced = tonumber(os.getenv("POKEPORT_GOLD_HOUR") or "")
if forced then
want("POKEPORT_GOLD_HOUR pins World:hour", hour == forced % 24, hour)
want("and the palette follows it",
world.daytime == Palettes.daytimeFor(world.map.def, forced,
world.flashUsed), tostring(world.daytime))
end
-- The map's own PALETTE_* can pin the daytime (the bedroom is PALETTE_DAY),
-- so log the clock's answer next to the map's.
U.log(("clock %02d:%02d, clock daytime %s, map daytime %s, anchored %s"):format(
world:hour(), world:minute(), Palettes.clockDaytime(hour),
tostring(world.daytime), tostring(Clock.isSet(game.save))))
U.log(failures == 0 and "PASS" or "FAIL")
love.event.quit()
end