Files
gen1recomp/tests/drivers/game3_hof_continue_2440.lua
2026-09-23 16:34:15 -04:00

85 lines
3.3 KiB
Lua

local U = require("tests.drivers.util")
local DIR = os.getenv("POKEPORT_SHOT_DIR") or "/tmp/bug2440"
local failures = 0
local function result(ok, label)
print((ok and "PASS " or "FAIL ") .. label)
if not ok then failures = failures + 1 end
return ok
end
local function finish()
print((failures == 0 and "PASS" or "FAIL") .. " hof_continue_2440 failures=" .. failures)
love.event.quit(failures == 0 and 0 or 1)
end
return function(game)
for _ = 1, 600 do
if game.phase == "boot" and game.boot then break end
U.wait(1)
end
game:_handleBootAction({ action = "new_game", name = "RED" })
U.wait(180)
local Runtime = require("src.core.game3.runtime")
local Map = require("src.core.game3.map")
local Message = require("src.ui.game3.message")
local HallOfFame = require("src.ui.game3.hall_of_fame")
local SaveData = require("src.core.SaveData")
local session = Runtime.getSession()
if not result(session ~= nil, "field reached") then return finish() end
local hof = "FR_POKEMON_LEAGUE_HALL_OF_FAME"
Map.load(nil, game, hof, { x = 5, y = 12, facing = "up" })
game.session.x, game.session.y, game.session.facing = 5, 12, "up"
local sawHof = false
for _ = 1, 3000 do
if HallOfFame.open then sawHof = true break end
if Message.isOpen() and Message.isTyping() then Message.skipReveal() end
if Message.isOpen() and Message.isWaiting() then U.tap(game, "a") end
U.wait(2)
end
if not result(sawHof, "HoF induction screen opened from the room script") then return finish() end
for _ = 1, 6000 do
if not HallOfFame.open then break end
U.tap(game, "a")
U.wait(4)
end
result(not HallOfFame.open, "HoF screen closed")
U.wait(30)
local okL, save = pcall(SaveData.load)
save = okL and save or {}
local w = type(save.continueGameWarp) == "table" and save.continueGameWarp or {}
print(string.format("SAVED map=%s x=%s y=%s flags=%s warp=%s %s,%s", tostring(save.map), tostring(save.x),
tostring(save.y), tostring(save.specialSaveWarpFlags), tostring(w.map), tostring(w.x), tostring(w.y)))
result((tonumber(save.specialSaveWarpFlags) or 0) % 2 == 1, "save carries CONTINUE_GAME_WARP")
result(w.map == "FR_PALLET_TOWN" and w.x == 6 and w.y == 8, "continue warp is Pallet Town 6,8")
local Credits = require("src.ui.game3.credits")
if Credits.open then pcall(Credits.reset) end
game.softResetRequested = true
U.wait(60)
game:_handleBootAction({ action = "continue" })
local s2
for _ = 1, 900 do
s2 = Runtime.getSession()
if s2 and game.phase ~= "quest_log" then break end
if game.phase == "quest_log" then U.tap(game, "b") end
U.wait(4)
end
print("PHASE " .. tostring(game.phase))
U.wait(60)
print(string.format("CONTINUE map=%s x=%s y=%s", tostring(s2 and s2.map), tostring(s2 and s2.x), tostring(s2 and s2.y)))
result(s2 and s2.map == "FR_PALLET_TOWN" and s2.x == 6 and s2.y == 8, "continue lands in Pallet Town 6,8")
local reran = false
for _ = 1, 200 do
local p = string.upper(Message.currentPage and Message.currentPage() or "")
if p:find("CONGRATULATIONS", 1, true) or p:find("HALL OF", 1, true) then reran = true break end
U.wait(2)
end
U.shot(game, DIR .. "/2440_after_continue_pallet.png")
result(not reran, "Oak's HoF congratulation script did not re-run after continue")
finish()
end