mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
f0a88ea473
* audio timing stuff * bug fixes and translation additions * translation stuff * Update modkit.py * better asset resolution
74 lines
3.7 KiB
Lua
74 lines
3.7 KiB
Lua
-- Driver: issue #251 -- "Silent Speary the Spearow". MANUAL LISTEN, not a
|
|
-- pass/fail run: the entire symptom is a missing sound, so nothing here can
|
|
-- assert it. This only parks the player nose to beak with Speary, fires the
|
|
-- line once at real speed, and then hands the pad back.
|
|
--
|
|
-- pokered's ViridianNicknameHouseSpearowText (scripts/ViridianNicknameHouse.asm)
|
|
-- is a text_asm that PrintTexts "SPEARY: Tetweet!", then runs PlayCry with
|
|
-- SPEAROW and WaitForSoundToFinish before TextScriptEnd. PrintText returns as
|
|
-- soon as the string is placed, so the cry starts only once the box has typed
|
|
-- out; and because ViridianNicknameHouse_Script is `jp EnableAutoTextBoxDrawing`
|
|
-- (AutoTextBoxDrawingCommon zeroes wDoNotWaitForButtonPressAfterDisplayingText,
|
|
-- home/window.asm), DisplayTextID still falls through AfterDisplayingTextID into
|
|
-- WaitForTextScrollButtonPress afterwards -- the box holds for A/B, it does not
|
|
-- pop itself. The port's talk script carried no cry row at all, so Speary was
|
|
-- mute; the fix is the play_cry waitForButton form
|
|
-- (data/scripts/flavor/viridian_nickname_house.lua + TextBox's opts.auto.wait).
|
|
--
|
|
-- Do NOT run this under POKEPORT_SPEED. The logic clock is what gets scaled,
|
|
-- the audio clock is not, so a fast-forwarded run desynchronises the exact
|
|
-- typing-then-cry ordering this driver exists to let a human judge.
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
|
|
-- ViridianNicknameHouse_Object object 3 is SPRITE_BIRD at cell (5, 5)
|
|
-- (pokered/data/maps/objects/ViridianNicknameHouse.asm). (5, 6) is the
|
|
-- floor cell directly below it, so facing up puts Speary in the cell
|
|
-- OverworldState:interact reads for an A press (npcAtCell on facingCell).
|
|
U.teleport(game, "VIRIDIAN_NICKNAME_HOUSE", 5, 6, "up")
|
|
U.wait(30) -- let the map music settle before anything has to be heard over it
|
|
|
|
-- That object_event is WALK / LEFT_RIGHT and NPC:update paces it with no
|
|
-- range clamp, so left alone Speary strolls out from under the A press
|
|
-- between listens. Pin the wander rather than setting npc.frozen: talkTo
|
|
-- freezes and unfreezes around the box, so a frozen flag would be cleared
|
|
-- the moment the first listen ends.
|
|
local speary
|
|
for _, n in ipairs(game.overworld.npcs) do
|
|
if n.def and n.def.name == "VIRIDIANNICKNAMEHOUSE_SPEAROW" then speary = n end
|
|
end
|
|
if speary then
|
|
speary.wanders = false
|
|
else
|
|
U.log("WARNING: Speary is not on this map; check the object list.")
|
|
end
|
|
|
|
U.log("#251 Speary the Spearow -- this one is judged by ear, not by eye.")
|
|
U.log("About to talk to Speary. The box types out \"SPEARY: Tetweet!\".")
|
|
U.log("PASS: the moment the last letter lands, a short SPEAROW cry plays,")
|
|
U.log(" and only after it finishes does the down arrow start blinking.")
|
|
U.log("FAIL (the bug): dead silence. The arrow blinks the instant the text")
|
|
U.log(" finishes and no cry is ever heard.")
|
|
U.log("ALSO FAIL: the box closes itself when the cry ends, with no A press.")
|
|
U.wait(90) -- a beat to read the above before the sound happens
|
|
|
|
U.tap(game, "a")
|
|
|
|
-- Call the moment out on the frame the typewriter finishes, which is where
|
|
-- PrintText returns and PlayCry runs in the ROM.
|
|
for _ = 1, 600 do
|
|
local top = game.stack:top()
|
|
if top and top.pages and top.done then break end
|
|
U.wait(1)
|
|
end
|
|
U.log(">>> NOW: the SPEAROW cry should be sounding. <<<")
|
|
|
|
-- popup_fake_save hand-off: never touch input again, so real keyboard and
|
|
-- controller play works from here on.
|
|
U.log("Controls are yours. A closes the box; A again replays the line")
|
|
U.log("(Speary is pinned in front of you, so it stays one button).")
|
|
while true do
|
|
coroutine.yield()
|
|
end
|
|
end
|