Files
gen1recomp/tests/drivers/gold_bug1567_test.lua
T
bryanthaboi c0f4315cd8 Fix Gen 1/2 battle, menu, PC and audio parity gaps; wire luacheck into CI
CLOSES #1484, CLOSES #1486, CLOSES #1513, CLOSES #1517, CLOSES #1556, CLOSES #1564, CLOSES #1567
2026-08-21 19:22:34 -04:00

106 lines
3.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- #1567: the TM/HM pocket's row order.
--
-- POKEPORT_GAME=gold POKEPORT_TOUCH=0 \
-- POKEPORT_DRIVER=tests/drivers/gold_bug1567_test.lua love .
-- POKEPORT_SHOT_DIR=/tmp/gold-bug1567 (default)
--
-- Nothing here can be asserted: the bug IS the order rows land in.
-- TMHM_DisplayPocketItems walks the fixed 57-byte wTMsHMs array from 1 to 57
-- and prints every non-zero slot (engine/items/tmhm.asm:341), so the cart's
-- pocket is always TM01..TM50 then HM01..HM07 no matter what the player picked
-- up first. The port drew it from the acquisition-ordered bag list instead.
--
-- The seed is deliberately scrambled -- gold_bug1425_test.lua seeds its TMs
-- already in numeric order, which is why its screenshots never showed this.
--
-- The run ends with the PACK still open on the TM pocket, so a human takes the
-- controls exactly where the screenshots stop.
local U = require("tests.drivers.util")
local Bag = require("src.inventory.Bag")
local PackMenu = require("src.ui.gen2.PackMenu")
-- Picked up back to front: TM/HM numbers 57, 50, 51, 5, 1, 53. TM_ROAR is the
-- one on the far side of the ITEM_C3 hole (id $c4, number 5), so it also pins
-- that the number and not the item id is what sorts.
local SEED = {
{ "HM_WATERFALL", 1 },
{ "TM_NIGHTMARE", 2 },
{ "HM_CUT", 1 },
{ "TM_ROAR", 3 },
{ "TM_DYNAMICPUNCH", 12 },
{ "HM_SURF", 1 },
}
return function(game)
local out = os.getenv("POKEPORT_SHOT_DIR") or "/tmp/gold-bug1567"
local function shot(name)
U.wait(3)
U.shot(game, ("%s/%s.png"):format(out, name))
end
U.wait(45)
assert(game.world and game.world.map, "gold world did not boot")
local save = game.save
save.inventory = {}
save.bagOrder = {}
for _, entry in ipairs(SEED) do
local id, count = entry[1], entry[2]
if not (game.data.items and game.data.items[id]) then
U.log("[driver] SKIP", id, "-- not in this cache")
else
save.inventory[id] = count
table.insert(Bag.order(save), id)
end
end
-- A POTION and a SUPER POTION so the ITEM pocket can be compared against the
-- TM pocket at the end: SELECT must still arm a row over there.
for _, entry in ipairs({ { "POTION", 5 }, { "SUPER_POTION", 2 } }) do
if game.data.items and game.data.items[entry[1]] then
save.inventory[entry[1]] = entry[2]
table.insert(Bag.order(save), entry[1])
end
end
U.log("[driver] pickup order:", table.concat(Bag.order(save), " "))
local pack = PackMenu.new(game, { save = save, world = game.world,
onClose = function() end })
game.stack:push(pack)
shot("00-items") -- POTION over SUPER POTION, pickup order
U.tap(game, "right")
U.tap(game, "right")
U.tap(game, "right")
-- TM01 DYNAMICPUNCH ×12, TM05 ROAR ×03, TM50 NIGHTMARE ×02, then HM01 CUT,
-- HM03 SURF, HM07 WATERFALL with no ×NN at all (engine/items/tmhm.asm:390).
-- Before the fix this read HM07, TM50, HM01, TM05, TM01, HM03.
shot("01-tmhm-numbered")
local order = {}
for i = 1, #pack.rows do order[i] = pack.rows[i].id end
U.log("[driver] TM/HM rows:", table.concat(order, " "))
-- engine/items/tmhm.asm:207 filters SELECT out of this pocket: no hollow ▷,
-- no "Where should this be moved to?".
U.tap(game, "select")
shot("02-tmhm-select-ignored")
U.tap(game, "down")
U.tap(game, "select")
shot("03-tmhm-select-ignored-row2")
-- The ITEM pocket, where SELECT still arms (engine/items/pack.asm:1290).
U.tap(game, "right")
U.tap(game, "select")
shot("04-items-select-arms")
U.tap(game, "b")
-- Back to the TM pocket for the human.
U.tap(game, "right")
U.tap(game, "right")
U.tap(game, "right")
U.log("[driver] shots in " .. out .. " -- the PACK is yours")
end