mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-18 03:35:56 +02:00
CLOSES #1211, CLOSES #1228, CLOSES #1229, CLOSES #1232, CLOSES #1251, CLOSES #1265, CLOSES #1267, CLOSES #1276, CLOSES #1279, CLOSES #1282, CLOSES #1293, CLOSES #1296, CLOSES #1303, CLOSES #1329, CLOSES #1338, CLOSES #1341, CLOSES #1343, CLOSES #1344, CLOSES #1368, CLOSES #1385, CLOSES #1388, CLOSES #1389, CLOSES #1391
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
-- The TOWN MAP drew a blinking black square for the player instead of their
|
||||
-- walk sprite, because the marker was a placeholder rectangle instead of the
|
||||
-- OAM sprite the cart draws (#1344).
|
||||
-- engine/items/town_map.asm:347
|
||||
-- luajit tests/engine/town_map_player_sprite_bug1344.lua
|
||||
|
||||
package.path = "./?.lua;./?/init.lua;" .. package.path
|
||||
|
||||
local T = require("tests.harness")
|
||||
local check, eq = T.check, T.eq
|
||||
love = love or require("tests.love_stub")
|
||||
|
||||
local TownMap = require("src.ui.TownMap")
|
||||
|
||||
local function newGame()
|
||||
return {
|
||||
data = {
|
||||
field = {
|
||||
townMap = { PALLET_TOWN = { x = 1, y = 2, name = "PALLET TOWN" } },
|
||||
playerSprites = { walk = "SPRITE_RED" },
|
||||
-- no townMap.background: forces the stale-asset fallback draw path,
|
||||
-- which is the one #1344's repro screenshot came from
|
||||
},
|
||||
sprites = { SPRITE_RED = { image = "assets/generated/sprites/red_walk.png" } },
|
||||
maps = {},
|
||||
},
|
||||
save = {},
|
||||
overworld = { map = { id = "PALLET_TOWN" } },
|
||||
}
|
||||
end
|
||||
|
||||
local game = newGame()
|
||||
local tm = TownMap.new(game, {})
|
||||
|
||||
eq(tm.mode, "grid", "one located entry puts the screen in grid mode")
|
||||
check(tm.bg == nil, "no background.map means the stale-asset fallback draws")
|
||||
check(tm.playerLoc ~= nil, "the player's map resolved to a location")
|
||||
check(tm.playerSheet ~= nil,
|
||||
"TownMap.new resolved the walk sheet (the fix this test guards)")
|
||||
|
||||
-- capture what :draw() actually paints, without a real screen
|
||||
local draws, rects = {}, {}
|
||||
local realDraw, realRect = love.graphics.draw, love.graphics.rectangle
|
||||
love.graphics.draw = function(img, quadOrX, x, y)
|
||||
draws[#draws + 1] = { img = img, quad = quadOrX, x = x, y = y }
|
||||
end
|
||||
love.graphics.rectangle = function(mode, x, y, w, h)
|
||||
rects[#rects + 1] = { mode = mode, x = x, y = y, w = w, h = h }
|
||||
end
|
||||
|
||||
tm.blink = 0 -- (0 < 20): the player marker is in its "on" blink phase
|
||||
tm:draw()
|
||||
|
||||
love.graphics.draw = realDraw
|
||||
love.graphics.rectangle = realRect
|
||||
|
||||
local function drewSprite()
|
||||
for _, d in ipairs(draws) do
|
||||
if d.img == tm.playerSheet and d.quad == tm.playerQuad then
|
||||
return d
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local spriteDraw = drewSprite()
|
||||
check(spriteDraw ~= nil, "the player's walk sprite was drawn, not a placeholder")
|
||||
if spriteDraw then
|
||||
-- engine/items/town_map.asm:449 WriteTownMapSpriteOAM's -4,-3 carry quirk
|
||||
eq(spriteDraw.x, tm.playerLoc.x * 8 - 4, "sprite x is markerXY - 4")
|
||||
eq(spriteDraw.y, tm.playerLoc.y * 8 - 3, "sprite y is markerXY - 3")
|
||||
end
|
||||
|
||||
local function blackDotAtPlayer()
|
||||
for _, r in ipairs(rects) do
|
||||
if r.mode == "fill" and r.w == 4 and r.h == 4
|
||||
and r.x == tm.playerLoc.x * 8 + 2 and r.y == tm.playerLoc.y * 8 + 2 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
check(not blackDotAtPlayer(),
|
||||
"the old 4x4 placeholder square is not drawn once a sprite is available")
|
||||
|
||||
T.finish("town map player sprite bug 1344")
|
||||
Reference in New Issue
Block a user