mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
77 lines
2.8 KiB
Lua
77 lines
2.8 KiB
Lua
-- Driver: BATTLE LAYOUT = WIDE. Opens a wild battle on the 304x144
|
|
-- surface, captures the command screen, the 2x2 move menu and a player-side
|
|
-- send-out POOF, and checks the surface is handed back on the way out.
|
|
-- POKEPORT_DRIVER=tests/drivers/wide_battle_test.lua \
|
|
-- POKEPORT_IDENTITY=wide POKEPORT_TOUCH=0 SHOT_DIR=/tmp/shots love .
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local DIR = os.getenv("SHOT_DIR") or "/tmp/shots"
|
|
local BattleState = require("src.battle.BattleState")
|
|
local Pokemon = require("src.pokemon.Pokemon")
|
|
local Renderer = require("src.render.Renderer")
|
|
|
|
local failures = 0
|
|
local function check(label, ok)
|
|
if not ok then failures = failures + 1 end
|
|
U.log(ok and "PASS" or "FAIL", label)
|
|
return ok
|
|
end
|
|
|
|
game.save.options.battleLayout = "wide"
|
|
-- MEW's back pic is a large 2x sprite: it catches a side region drawn
|
|
-- twice, which would leak detached pieces of it into the far right.
|
|
game.save.party = { Pokemon.new(game.data, "MEW", 100) }
|
|
U.teleport(game, "ROUTE_1", 5, 5, "down")
|
|
U.wait(60)
|
|
|
|
local battle = BattleState.newWild(game, "PIDGEY", 3, { onFinish = function() end })
|
|
game.overworld:pushBattle(battle)
|
|
U.wait(360)
|
|
|
|
check("the battle is on top", getmetatable(game.stack:top()) == BattleState)
|
|
check("the battle asked for the 304x144 surface",
|
|
Renderer.uiWidth == 304 and Renderer.uiHeight == 144)
|
|
|
|
battle.introSlide = 0
|
|
battle.introBalls = nil
|
|
battle.showEnemyTrainer = false
|
|
battle.showPlayerBack = false
|
|
battle.enemySendingOut = false
|
|
battle.sendingOut = false
|
|
battle.phase = "menu"
|
|
battle.menuIndex = 1
|
|
U.wait(2)
|
|
check("command screenshot", U.shot(game, DIR .. "/wide_command.png"))
|
|
|
|
battle.phase = "moveSelect"
|
|
battle.moveIndex = 1
|
|
if #battle.player.curMoves >= 2 then
|
|
U.tap(game, "right")
|
|
U.wait(2)
|
|
check("RIGHT crosses the move grid", battle.moveIndex == 2)
|
|
end
|
|
U.wait(2)
|
|
check("move menu screenshot", U.shot(game, DIR .. "/wide_moves.png"))
|
|
|
|
-- Freeze a player-side POOF on a populated frame: it must composite once,
|
|
-- at the player anchor, and never repeat on the right.
|
|
battle.phase = "messages"
|
|
battle.current = nil
|
|
battle.animPlayer:start("POOF_ANIM", false)
|
|
battle.animPlayer.stepIndex = 3
|
|
battle.animPlaying = true
|
|
check("send-out POOF screenshot", U.shot(game, DIR .. "/wide_poof.png"))
|
|
battle.animPlaying = false
|
|
|
|
game.stack:pop()
|
|
-- a fast driver resumes several logic steps per rendered frame; leave
|
|
-- enough yields for the next Game:draw to resolve the overworld surface
|
|
U.wait(12)
|
|
check("leaving the battle restores the Game Boy surface",
|
|
Renderer.uiWidth == 160 and Renderer.uiHeight == 144)
|
|
|
|
U.log(failures == 0 and "WIDE_BATTLE_PASS" or "WIDE_BATTLE_FAIL",
|
|
("surface=%dx%d"):format(Renderer.uiWidth, Renderer.uiHeight))
|
|
love.event.quit(failures == 0 and 0 or 1)
|
|
end
|