mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-18 19:54:21 +02:00
93 lines
3.1 KiB
Lua
93 lines
3.1 KiB
Lua
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local DIR = os.getenv("SHOT_DIR") or "/tmp/bug1412"
|
|
local Pokemon = require("src.pokemon.Pokemon")
|
|
local Evolution = require("src.pokemon.Evolution")
|
|
local Screens = require("src.ui.Screens")
|
|
local TradeAnim = require("src.ui.TradeAnim")
|
|
local TextBox = require("src.render.TextBox")
|
|
|
|
local function check(label, ok)
|
|
U.log(ok and "PASS" or "FAIL", label)
|
|
return ok
|
|
end
|
|
|
|
U.log("Issue #1412: mon pics must be mirrored on the evolution and trade")
|
|
U.log("screens, and only there; battle keeps the raw orientation.")
|
|
|
|
U.teleport(game, "ROUTE_1", 5, 5, "down")
|
|
U.wait(10)
|
|
check("the overworld fixture is ready", game.overworld ~= nil)
|
|
|
|
local mon = Pokemon.new(game.data, "PIKACHU", 20)
|
|
game.save.party = { mon }
|
|
-- engine/movie/evolution.asm:103
|
|
Evolution.evolve(game, mon, "RAICHU", nil, "ITEM")
|
|
U.wait(12)
|
|
local top = game.stack:top()
|
|
check("the evolution screen opened",
|
|
top and top.screenId == "EvolutionState")
|
|
U.shot(game, DIR .. "/bug1412_evo_old_pikachu.png")
|
|
|
|
for _ = 1, 600 do
|
|
if top.done then break end
|
|
U.wait(1)
|
|
end
|
|
check("the evolution finished", top.done and not top.canceled)
|
|
U.wait(2)
|
|
U.shot(game, DIR .. "/bug1412_evo_new_raichu.png")
|
|
for _ = 1, 60 do
|
|
if game.stack:top() == game.overworld then break end
|
|
U.tap(game, "a")
|
|
U.wait(4)
|
|
end
|
|
|
|
-- engine/movie/trade.asm:751
|
|
local sent = Pokemon.new(game.data, "SPEAROW", 10)
|
|
local recv = Pokemon.new(game.data, "FARFETCHD", 10)
|
|
recv.nickname = "DUX"
|
|
recv.traded = true
|
|
recv.ot = "TRAINER"
|
|
U.teleport(game, "ROUTE_1", 5, 5, "down")
|
|
local anim = Screens.push(game, "TradeAnim", {
|
|
sent = sent, received = recv, enemyName = "TRAINER",
|
|
})
|
|
check("the trade cinematic opened", getmetatable(anim) == TradeAnim)
|
|
for _ = 1, 200 do
|
|
if anim.sub == "hold" then break end
|
|
U.wait(1)
|
|
end
|
|
check("the sent SPEAROW pic is on screen",
|
|
anim.phase == "show_player" and anim.sub == "hold" and anim.monVisible)
|
|
U.shot(game, DIR .. "/bug1412_trade_sent_spearow.png")
|
|
|
|
local function topIsText()
|
|
return getmetatable(game.stack:top()) == TextBox
|
|
end
|
|
for _ = 1, 8000 do
|
|
if anim.phase == "show_enemy" and anim.monVisible then break end
|
|
if anim.phase == "done" then break end
|
|
if anim.waitingText or topIsText() then
|
|
U.wait(1)
|
|
else
|
|
anim:update(1 / 60)
|
|
end
|
|
end
|
|
U.wait(2)
|
|
check("the received FARFETCH'D pic is on screen",
|
|
anim.phase == "show_enemy" and anim.monVisible)
|
|
U.shot(game, DIR .. "/bug1412_trade_recv_farfetchd.png")
|
|
|
|
U.log("shots in", DIR)
|
|
U.log("Right: all four pics are mirrored left-right compared to the same")
|
|
U.log("mon's battle front sprite (compare the hardware capture on #1412:")
|
|
U.log("PIKACHU's face points the other way than it does in battle).")
|
|
U.log("Wrong: any of the four matches the battle orientation.")
|
|
U.log("Battle, pokedex, title, Hall of Fame, League PC, credits, and the")
|
|
U.log("museum fossils are untouched and must still match the cart.")
|
|
|
|
while true do
|
|
coroutine.yield()
|
|
end
|
|
end
|