CLOSES #303, CLOSES #307, CLOSES #314, CLOSES #318

This commit is contained in:
bryanthaboi
2026-07-28 06:16:21 -04:00
parent 72f83760b7
commit 3b1032cc63
38 changed files with 1116 additions and 99 deletions
+96
View File
@@ -0,0 +1,96 @@
-- Driver: manual look at the Pokedex entry pic (#307).
--
-- DexEntryMenu loaded its front pic through
-- local ok, img = path and pcall(love.graphics.newImage, path)
-- which reads as a guarded pcall but is not one: `path and pcall(...)` is an
-- expression, so Lua adjusts it to a single value, `img` is always nil, and
-- every dex page drew with an empty pic box. Both callers were hit -- the
-- starter previews on Oak's lab balls (StarterDex, engine/events/
-- starter_dex.asm, which forces the owned bit so the page fills in) and
-- every entry opened from the Pokedex list.
--
-- tests/parity_dex_pic.lua asserts the page now holds an image. What it
-- cannot judge is placement: pokedex.asm draws the pic at the top-left of
-- the page and DexEntryMenu bottom-aligns it against y=60, so a wrong-sized
-- or wrong-anchored sprite still "loads" while looking broken.
--
-- Screenshots land in the scratch path given below; the run also parks a
-- live Pokedex so the pages can be paged through by hand.
--
-- POKEPORT_DRIVER=tests/drivers/dex_pic_bug307_test.lua \
-- POKEPORT_IDENTITY=bug307 POKEPORT_TOUCH=0 POKEPORT_VERSION=red love .
return function(game)
local U = dofile("tests/drivers/util.lua")
local Screens = require("src.ui.Screens")
local Sprites = require("src.pokemon.Sprites")
-- the three starters are the reported case (Oak's lab preview), plus one
-- ordinary list entry as the control
local CASES = { "BULBASAUR", "CHARMANDER", "SQUIRTLE", "PIDGEY" }
local function check(label, ok)
U.log(ok and "PASS" or "FAIL", label)
return ok
end
-- ---- preconditions the eye cannot check --------------------------------
-- A path that does not resolve, a PNG that is missing from the cache, and
-- the truncation bug all render as the same empty box.
local DexEntryMenu = require("src.ui.DexEntryMenu")
for _, species in ipairs(CASES) do
local path = Sprites.path(game.data, species, "front", { kind = "dex" })
check(species .. " resolves a dex front-pic path",
type(path) == "string" and path ~= "")
local page = DexEntryMenu.new(game, { species = species, forceOwned = true })
local held = page.sprite ~= nil
check(species .. " dex page holds its pic", held)
if held and page.sprite.getDimensions then
local w, h = page.sprite:getDimensions()
U.log(" " .. species .. " pic is", w .. "x" .. h,
"drawn at x=8, y=" .. math.max(0, 60 - h))
end
end
-- ---- mark the cases seen so the list can reach them ---------------------
local dex = game.save.pokedex
if dex then
for _, species in ipairs(CASES) do
dex.seen[species] = true
dex.owned[species] = true
end
U.log("flagged", #CASES, "species as seen+owned so the list can open them")
end
-- ---- screenshots, one page at a time ------------------------------------
local SHOT_DIR = os.getenv("SHOT_DIR") or "/tmp/shots"
for _, species in ipairs(CASES) do
while game.stack:top() do game.stack:pop() end
Screens.push(game, "DexEntryMenu", { species = species, forceOwned = true })
U.wait(30)
U.shot(game, SHOT_DIR .. "/dex_" .. species:lower() .. ".png")
U.log("captured", SHOT_DIR .. "/dex_" .. species:lower() .. ".png")
end
-- ---- hand off on a live page, then stay out of the way -------------------
while game.stack:top() do game.stack:pop() end
Screens.push(game, "DexEntryMenu", { species = "BULBASAUR", forceOwned = true })
U.wait(10)
U.log("........................................................")
U.log("LOOK NOW: a BULBASAUR Pokedex entry is open on screen.")
U.log(" RIGHT: the BULBASAUR front sprite sits in the top-left of the")
U.log(" page, sitting on the line above HT/WT, with the name,")
U.log(" SEED POKeMON, No.001, height, weight and description")
U.log(" filled in down the right and bottom.")
U.log(" BUG #307 looks like: the whole left side is blank white where")
U.log(" the sprite belongs, everything else drawn normally.")
U.log(" ALSO WRONG: the sprite is there but floats too high or too low,")
U.log(" overlaps the text, or is the wrong species entirely.")
U.log("Screenshots of all four cases were written to " .. SHOT_DIR)
U.log("Press A or B to close the page; input is yours from here on.")
U.log("........................................................")
while true do
coroutine.yield()
end
end