Files
gen1recomp/tests/engine/crystal_credits_bug1967.lua

117 lines
4.2 KiB
Lua

-- ../pokecrystal/engine/movie/credits.asm:400-451
-- ../pokecrystal/data/credits_strings.asm:183-185
package.path = "./?.lua;./?/init.lua;" .. package.path
love = require("tests.love_stub")
local T = require("tests.harness")
local GameVersion = require("src.core.GameVersion")
local Credits = require("src.ui.gen2.Credits")
local prior = GameVersion.get()
local function rgb(color, r, g, b, label)
T.eq(("%d,%d,%d"):format(color[1], color[2], color[3]),
("%d,%d,%d"):format(r, g, b), label)
end
GameVersion.set("crystal")
local staff = Credits.STRINGS[Credits.STAFF]
T.eq(type(staff), "table", "the crystal STAFF heading is three lines")
T.eq(staff[2], " CRYSTAL VERSION",
"and names the edition the cart's own string does")
local crystal = Credits.layout()
T.eq(#crystal.bannerRows, 1, "ConstructCreditsTilemap calls .InitTopPortion once")
T.eq(crystal.bannerRows[1], 0, "so the banner is rows 0-3 only")
T.eq(crystal.borderRows[1], 4, "the first border strip is drawn at hlcoord 0, 4")
T.eq(crystal.borderRows[2], 17, "the second at hlcoord 0, 17, not Gold's 13")
T.eq(crystal.textRows, 12, "ParseCredits clears SCREEN_WIDTH * 12")
T.eq(crystal.theEndY, 9, "Credits_TheEnd is hlcoord 6, 9")
T.eq(crystal.lyStep, -2, "Credits_LYOverride is `dec a / dec a`")
T.eq(#Credits.PALETTES_CRYSTAL, 12, "credits.pal is four blocks of three")
T.eq(Credits.SCENE_SPECIES_CRYSTAL[0], "PICHU", "scene 0 is Pichu")
T.eq(Credits.SCENE_SPECIES_CRYSTAL[3], "IGGLYBUFF", "scene 3 Igglybuff")
local movie = Credits.new({ data = {} }, {})
movie.scene = 0
local banner, strips, field = movie:palettes()
T.check(banner ~= strips and strips ~= field and banner ~= field,
"GetCreditsPalette hands rows 0-3, the strips and the field three palettes")
rgb(banner[1], 255, 0, 255, "the banner keeps the block's first set")
rgb(field[1], 255, 41, 41, "the field's paper is RGB 31,05,05")
rgb(field[4], 255, 255, 255, "and its ink RGB 31,31,31, so the text is white")
movie.scene = 3
local _, _, last = movie:palettes()
rgb(last[1], 255, 115, 0, "scene 3 reads Igglybuff's third set")
movie.scene = 0
movie.borderFrame = 2
T.eq(movie:borderGraphic(), 3, ".Frames gives every crystal mon four graphics")
movie.lyOverride = 0
movie:advanceLY()
T.eq(movie.lyOverride, 254, "the override counts down two a pass")
local ending = Credits.new({ data = {} }, {
script = { Credits.THEEND, Credits.WAIT, 1, Credits.END },
})
ending:parse()
T.eq(ending.shown[1].y, 9, "THE END lands on row 9")
local stale = Credits.new({ data = {} },
{ gfx = { palettes = { Credits.PALETTES[0], Credits.PALETTES[1],
Credits.PALETTES[2], Credits.PALETTES[3], Credits.PALETTES[0],
Credits.PALETTES[1] } } })
stale.scene = 0
local _, _, staleField = stale:palettes()
rgb(staleField[4], 255, 255, 255,
"an older crystal cache uses the transcribed block")
local fresh = { palettes = {} }
for index = 1, 12 do fresh.palettes[index] = { { index, 0, 0 } } end
fresh.palettesPerScene = 3
local imported = Credits.new({ data = {} }, { gfx = fresh })
imported.scene = 1
local a, b, c = imported:palettes()
T.eq(a[1][1], 4, "scene 1 starts at the fourth extracted set")
T.eq(b[1][1], 5, "its strips at the fifth")
T.eq(c[1][1], 6, "and its field at the sixth")
GameVersion.set("gold")
T.eq(Credits.STRINGS[Credits.STAFF][2], " GOLD VERSION",
"gold still reads GOLD VERSION")
local gs = Credits.layout()
T.eq(#gs.bannerRows, 2, "gold calls .InitTopPortion twice")
T.eq(gs.bannerRows[2], 14, "the second banner at hlcoord 0, 14")
T.eq(gs.borderRows[2], 13, "its lower strip on row 13")
T.eq(gs.textRows, 8, "and eight rows of text field")
T.eq(gs.theEndY, 8, "THE END on row 8")
T.eq(gs.lyStep, 2, "with the override counting up")
local gold = Credits.new({ data = {} }, {})
gold.scene = 0
local one, two, three = gold:palettes()
T.check(one == two and two == three,
"gold copies one 8-byte set to every palette slot")
rgb(one[1], 255, 255, 255, "which is credits.pal's first set")
gold.borderFrame = 2
T.eq(gold:borderGraphic(), 1, "and Bellossom repeats its first graphic on frame 2")
GameVersion.set("silver")
T.eq(Credits.STRINGS[Credits.STAFF][2], " SILVER VERSION",
"silver keeps its own heading")
GameVersion.set(prior)
T.finish("crystal credits bug 1967")