mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
98 lines
3.4 KiB
Lua
98 lines
3.4 KiB
Lua
-- Driver: #163 cont (\\v) must show ▼ and wait for A before scrolling.
|
|
-- Talks to VIRIDIANFOREST_YOUNGSTER5 (cont mid-page) and the nearby
|
|
-- TRAINER TIPS1 sign (para then conts). Screenshots the ▼ wait frames.
|
|
--
|
|
-- SHOT_DIR=/tmp/dialogue_cont POKEPORT_DRIVER=tests/drivers/dialogue_cont_wait_test.lua love .
|
|
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local DIR = os.getenv("SHOT_DIR") or "/tmp/dialogue_cont"
|
|
local TextBox = require("src.render.TextBox")
|
|
|
|
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
|
|
|
|
local function waitForTextBox(frames)
|
|
for _ = 1, frames or 60 do
|
|
if topIs(TextBox) then return game.stack:top() end
|
|
U.wait(1)
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- type out until waiting/done without mashing A (held A would only
|
|
-- speed the typewriter; wasPressed edges are what clear waits)
|
|
local function waitUntilPrompt(box, frames)
|
|
for _ = 1, frames or 240 do
|
|
if not topIs(TextBox) then return false end
|
|
if box.waiting or box.done then return true end
|
|
U.wait(1)
|
|
end
|
|
return box.waiting or box.done
|
|
end
|
|
|
|
-- ▼ blinks half the time (blink < 30); settle so the shot shows it.
|
|
-- Keep POKEPORT_SPEED=1: scriptedIterations>1 can advance past the
|
|
-- wait in the same rendered frame before love.draw captures.
|
|
local function shotPrompt(box, path)
|
|
for _ = 1, 60 do
|
|
if not (box.waiting or box.done) then break end
|
|
if box.blink < 20 then break end
|
|
U.wait(1)
|
|
end
|
|
U.shot(game, path)
|
|
U.wait(2)
|
|
end
|
|
|
|
local function dismissText()
|
|
for _ = 1, 80 do
|
|
if not topIs(TextBox) then return end
|
|
U.tap(game, "a")
|
|
U.wait(2)
|
|
end
|
|
end
|
|
|
|
-- Youngster5 @ (27,40): "I ran out of POKé / BALLs to catch" then
|
|
-- \v "POKéMON with!" -- the bug auto-scrolled past this with no ▼.
|
|
U.teleport(game, "VIRIDIAN_FOREST", 27, 41, "up")
|
|
U.tap(game, "a")
|
|
local box = waitForTextBox(90)
|
|
check(box ~= nil, "youngster5 opened a TextBox")
|
|
if box then
|
|
check(waitUntilPrompt(box, 300), "youngster5 reached a prompt")
|
|
check(box.waiting and box.contAdvance,
|
|
"youngster5 first prompt is a cont wait (▼)")
|
|
shotPrompt(box, DIR .. "/dialogue_cont_00_youngster5_arrow.png")
|
|
U.tap(game, "a")
|
|
U.wait(3)
|
|
check(waitUntilPrompt(box, 300), "youngster5 reached para/done after cont")
|
|
shotPrompt(box, DIR .. "/dialogue_cont_01_youngster5_after.png")
|
|
dismissText()
|
|
end
|
|
|
|
-- Trainer Tips1 sign @ (24,40): para after title, then two conts.
|
|
U.teleport(game, "VIRIDIAN_FOREST", 24, 41, "up")
|
|
U.tap(game, "a")
|
|
box = waitForTextBox(90)
|
|
check(box ~= nil, "tips1 sign opened a TextBox")
|
|
if box then
|
|
check(waitUntilPrompt(box, 300), "tips1 reached first prompt")
|
|
-- first prompt is the para after "TRAINER TIPS"
|
|
check(box.waiting and not box.contAdvance,
|
|
"tips1 first prompt is a para wait")
|
|
shotPrompt(box, DIR .. "/dialogue_cont_02_tips1_para.png")
|
|
U.tap(game, "a")
|
|
U.wait(3)
|
|
check(waitUntilPrompt(box, 300), "tips1 typed into page 2")
|
|
check(box.waiting and box.contAdvance,
|
|
"tips1 page2 pauses on cont with ▼")
|
|
shotPrompt(box, DIR .. "/dialogue_cont_03_tips1_cont_arrow.png")
|
|
dismissText()
|
|
end
|
|
|
|
U.log(pass and "RESULT: ALL PASS" or "RESULT: SEE FAILURES ABOVE")
|
|
end
|