mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
8278b209b4
* squashy squash * squassshheee CLOSES #128 CLOSES #114 CLOSES #113 CLOSES #111 CLOSES #110 CLOSES #109 CLOSES #107 CLOSES #106 CLOSES #105 CLOSES #90 CLOSES #103 * brock guy fix CLOSES #39
77 lines
2.9 KiB
Lua
77 lines
2.9 KiB
Lua
-- Driver: the Hall of Fame recording-machine "PC". Teleports into the
|
|
-- HALL_OF_FAME room, faces the console jutting from the north wall, and
|
|
-- exercises the injected TEXT_HALLOFFAME_PC sign both ways: NO leaves the
|
|
-- player in the room, YES warps home to the new-game bedroom spawn
|
|
-- (REDS_HOUSE_2F, 3, 6). Screenshots the prompt and the arrival.
|
|
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local DIR = os.getenv("SHOT_DIR") or "/tmp/shots"
|
|
local TextBox = require("src.render.TextBox")
|
|
local ChoiceBox = require("src.ui.ChoiceBox")
|
|
|
|
local pass = true
|
|
local function check(cond, msg)
|
|
if cond then U.log("PASS: " .. msg) else pass = false; U.log("FAIL: " .. msg) end
|
|
end
|
|
local function topIs(mt) return getmetatable(game.stack:top()) == mt end
|
|
|
|
-- press A to advance the ask text until the YES/NO box is on top
|
|
local function openChoice()
|
|
for _ = 1, 120 do
|
|
if topIs(ChoiceBox) then return true end
|
|
if topIs(TextBox) then U.tap(game, "a") end
|
|
U.wait(3)
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- stand at (4,2) facing up: the console solid cell (4,1) is dead ahead
|
|
U.teleport(game, "HALL_OF_FAME", 4, 2, "up")
|
|
local ow = game.overworld
|
|
local fx, fy = ow.player:facingCell()
|
|
U.log(("at (%d,%d) facing %s -> facing cell (%d,%d)"):format(
|
|
ow.player.cellX, ow.player.cellY, ow.player.facing, fx, fy))
|
|
check(ow.map:signAtCell(fx, fy) ~= nil, "a sign sits on the console tile")
|
|
|
|
-- ---- NO: prompt appears, player stays in the Hall of Fame ----
|
|
U.tap(game, "a") -- interact -> ask
|
|
U.wait(4)
|
|
check(openChoice(), "NO run: YES/NO prompt opened")
|
|
U.shot(game, DIR .. "/hof_pc_1_prompt.png")
|
|
U.tap(game, "down") -- cursor YES -> NO
|
|
U.wait(2)
|
|
U.tap(game, "a") -- confirm NO
|
|
U.wait(20)
|
|
check(ow.map.id == "HALL_OF_FAME", "NO keeps the player in HALL_OF_FAME")
|
|
|
|
-- ---- YES: warp back to the bedroom spawn ----
|
|
U.teleport(game, "HALL_OF_FAME", 4, 2, "up")
|
|
ow = game.overworld
|
|
U.tap(game, "a")
|
|
U.wait(4)
|
|
check(openChoice(), "YES run: YES/NO prompt opened")
|
|
U.tap(game, "a") -- YES (default cursor)
|
|
local warped = false
|
|
for _ = 1, 300 do
|
|
if ow.map.id == "REDS_HOUSE_2F" and not ow.transitioning then warped = true; break end
|
|
U.wait(2)
|
|
end
|
|
U.log(("after YES: map=%s pos=(%d,%d) facing=%s"):format(
|
|
ow.map.id, ow.player.cellX, ow.player.cellY, ow.player.facing))
|
|
U.wait(10)
|
|
U.shot(game, DIR .. "/hof_pc_2_home.png")
|
|
check(warped, "YES warps to REDS_HOUSE_2F")
|
|
check(ow.player.cellX == 3 and ow.player.cellY == 6,
|
|
"landed on the bedroom spawn (3,6)")
|
|
check(ow.lastOutdoor and ow.lastOutdoor.id == "PALLET_TOWN",
|
|
"PC home warp retargets lastOutdoor to Pallet (#103)")
|
|
local lead = game.save.party and game.save.party[1]
|
|
if lead and lead.stats then
|
|
check(lead.hp == lead.stats.hp and lead.status == nil,
|
|
"PC home warp heals the party")
|
|
end
|
|
|
|
U.log(pass and "RESULT: ALL PASS" or "RESULT: SEE FAILURES ABOVE")
|
|
end
|