mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
85 lines
3.5 KiB
Lua
85 lines
3.5 KiB
Lua
-- Driver: BATTLE BG "world" plus an un-flashed Rock Tunnel put a dark map in
|
|
-- the same frame as the battle, and OverworldState:drawWorld's rBGP shift then
|
|
-- coloured the battle itself (#773). On hardware InitBattleCommon
|
|
-- (engine/battle/core.asm) pushes wMapPalOffset, InitBattleVariables zeroes it
|
|
-- and core.asm pops it back after EndOfBattle, so the battle is lit.
|
|
-- POKEPORT_DRIVER=tests/drivers/rock_tunnel_dark_battle_bug773_test.lua \
|
|
-- POKEPORT_IDENTITY=bug773 POKEPORT_TOUCH=0 SHOT_DIR=/tmp/shots love .
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local Probe = dofile("tests/drivers/shot_probe.lua")
|
|
local PaletteFX = require("src.render.PaletteFX")
|
|
local BattleState = require("src.battle.BattleState")
|
|
local Pokemon = require("src.pokemon.Pokemon")
|
|
local DIR = os.getenv("SHOT_DIR") or "/tmp/shots"
|
|
|
|
local fails = 0
|
|
local function check(ok, msg)
|
|
U.log(ok and "PASS" or "FAIL", msg)
|
|
if not ok then fails = fails + 1 end
|
|
return ok
|
|
end
|
|
|
|
game.save.flags.EVENT_GOT_STARTER = true
|
|
if #game.save.party == 0 then
|
|
table.insert(game.save.party, Pokemon.new(game.data, "CHARMANDER", 20))
|
|
end
|
|
game.save.options = game.save.options or {}
|
|
game.save.options.textSpeed = 1
|
|
game.save.options.colors = "gbc"
|
|
game.save.options.battleBg = "world"
|
|
PaletteFX.setMode("gbc")
|
|
|
|
local CAVE = PaletteFX.pal(game.data, "CAVE")
|
|
local caveDark = PaletteFX.permute(CAVE, PaletteFX.DARK_BGP)
|
|
|
|
-- data/maps/objects/RockTunnel1F.asm: the Route 10 entrance warp is 15, 3,
|
|
-- so two cells south of it is floor that does not re-trigger the warp.
|
|
game.save.flashLit = nil
|
|
U.teleport(game, "ROCK_TUNNEL_1F", 15, 5, "down")
|
|
U.wait(20)
|
|
local ow = game.overworld
|
|
check(ow ~= nil and ow.dark == true, "standing in an un-flashed ROCK_TUNNEL_1F")
|
|
U.shot(game, DIR .. "/bug773_1_dark_map.png")
|
|
check(PaletteFX.shadeMap() == PaletteFX.DARK_BGP,
|
|
"the map frame really is drawn with DARK_BGP armed")
|
|
|
|
local ok = pcall(function()
|
|
local battle = BattleState.newWild(game, "ZUBAT", 15)
|
|
battle.onFinish = function() end
|
|
game.overworld:pushBattle(battle)
|
|
end)
|
|
if not ok then
|
|
U.log("WARN could not force a wild battle; nothing to judge")
|
|
while true do coroutine.yield() end
|
|
end
|
|
|
|
U.wait(120) -- through the transition wipe and the intro slide-in
|
|
U.shot(game, DIR .. "/bug773_2_battle_world_bg.png")
|
|
check(PaletteFX.shadeMap() == nil,
|
|
"no shade map is armed while the world-bg battle draws (#773)")
|
|
|
|
-- The battle keeps its own 160x144 field in the middle of the window; the
|
|
-- dimmed map only fills the surround, so probe the centre.
|
|
local CENTRE = { 0.4, 0.4, 0.6, 0.6 }
|
|
local shot = Probe.grab()
|
|
if shot then
|
|
local c = Probe.count(shot, { litPaper = CAVE[1], darkPaper = caveDark[1] },
|
|
3, CENTRE)
|
|
check(c.litPaper > 0,
|
|
"the battle screen keeps its paper white -- it is not FadePal2'd")
|
|
local top = Probe.top(shot, 5, 3, CENTRE)
|
|
U.log("battle centre top colours:", Probe.fmt(top))
|
|
else
|
|
U.log("WARN pixel probe unavailable; judge the shots by eye")
|
|
end
|
|
|
|
U.log(fails == 0 and "#773 checks passed" or (fails .. " #773 check(s) FAILED"))
|
|
U.log("Look at " .. DIR .. "/bug773_2_battle_world_bg.png: the battle screen")
|
|
U.log("should read exactly like any other battle -- white paper, normal HUD")
|
|
U.log("and pic colours -- with the dimmed tunnel only in the surround.")
|
|
U.log("The separate uniform dim of the world backdrop is #777, not this.")
|
|
|
|
while true do coroutine.yield() end
|
|
end
|