mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-10-08 09:42:55 -04:00
99 lines
4.6 KiB
Lua
99 lines
4.6 KiB
Lua
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
love = love or require("tests.love_stub")
|
|
local T = require("tests.harness")
|
|
local Serializer = require("src.core.SaveSerializer")
|
|
local GameVersion = require("src.core.GameVersion")
|
|
local CacheFs = require("src.import.CacheFs")
|
|
local Catalog = require("src.box.Catalog")
|
|
local Store = require("src.box.Store")
|
|
local realSprites = require("src.online.OnlineSprites")
|
|
local bodies, available, calls = {}, {}, {}
|
|
local readAt = CacheFs.readAt
|
|
CacheFs.readAt = function(path) return bodies[path] end
|
|
local function put(version, path, value)
|
|
bodies[GameVersion.cachePrefix(version) .. path] = Serializer.encode(value)
|
|
end
|
|
put("gold", "data/generated/pokemon.lua", {
|
|
PIKACHU = { dex = 25, name = "PIKACHU" }, UNOWN = { dex = 201, name = "UNOWN" } })
|
|
put("emerald", "data/generated/gba/pokemon/names.lua", { [25] = "PIKACHU", [201] = "UNOWN" })
|
|
put("emerald", "data/generated/gba/pokemon/national.lua", {
|
|
toNational = { [25] = 25, [201] = 201 }, toSpecies = { [25] = 25, [201] = 201 } })
|
|
put("sapphire", "data/generated/gba/pokemon/names.lua", { [25] = "PIKACHU" })
|
|
put("sapphire", "data/generated/gba/pokemon/national.lua", { toNational = { [25] = 25 }, toSpecies = { [25] = 25 } })
|
|
|
|
package.loaded["src.online.OnlineSprites"] = {
|
|
reset = function() calls = {} end,
|
|
ensure = function(version, mon)
|
|
calls[#calls + 1] = { version = version, mon = Store.copy(mon) }
|
|
if available[version] then return { front = {}, icon = {} } end
|
|
return { front = false, icon = false }
|
|
end,
|
|
}
|
|
Catalog.reset()
|
|
local mon = { species = "PIKACHU", nickname = "Spark", hp = 22, level = 10,
|
|
dvs = { attack = 2, defense = 10, speed = 10, special = 10 }, opaque = "keep" }
|
|
local entry = { version = "gold", generation = 2, mon = mon, display = Catalog.describe("gold", mon) }
|
|
local before = Serializer.encode(entry)
|
|
available.emerald = true
|
|
local art, version = Catalog.art(entry)
|
|
T.eq(version, "emerald", "highest imported generation supplies art")
|
|
T.eq(calls[1].mon.species, 25, "canonical species maps to destination art id")
|
|
T.check(calls[1].mon.isShiny, "Gen 2 shiny DVs choose shiny Gen 3 art")
|
|
T.eq(Serializer.encode(entry), before, "art lookup does not alter stored Pokémon")
|
|
local n = #calls
|
|
Catalog.art(entry)
|
|
T.eq(#calls, n, "steady draws reuse resolved art")
|
|
|
|
local order = GameVersion.ORDER
|
|
GameVersion.ORDER = { "emerald", "gold", "sapphire" }
|
|
available.sapphire = true
|
|
Catalog.reset()
|
|
art, version = Catalog.art(entry)
|
|
T.eq(version, "emerald", "Emerald preference is independent of launcher column order")
|
|
local _, _, mappedMon = Catalog.art(entry)
|
|
T.eq(mappedMon.species, 25, "cached art retains its mapped animation species")
|
|
GameVersion.ORDER = order
|
|
local namesPath = "emerald/data/generated/gba/pokemon/names.lua"
|
|
local emeraldNames = bodies[namesPath]
|
|
bodies[namesPath] = nil
|
|
Catalog.reset()
|
|
art, version = Catalog.art(entry)
|
|
T.eq(version, "sapphire", "an unimported Emerald does not displace an available imported game")
|
|
bodies[namesPath] = emeraldNames
|
|
|
|
available.emerald, available.sapphire = nil, true
|
|
Catalog.reset()
|
|
art, version = Catalog.art(entry)
|
|
T.eq(version, "sapphire", "missing high-generation art falls back to another imported source")
|
|
T.eq(Serializer.encode(entry), before, "fallback leaves native data intact")
|
|
|
|
available.sapphire, available.gold = nil, true
|
|
Catalog.reset()
|
|
art, version = Catalog.art(entry)
|
|
T.eq(version, "gold", "lower generation is used when newer art is absent")
|
|
|
|
available.emerald = true
|
|
Catalog.reset()
|
|
local unown = { species = "UNOWN", unownLetter = 3, dvs = { attack = 1, defense = 1, speed = 1, special = 1 } }
|
|
local record = { version = "gold", generation = 2, mon = unown, display = Catalog.describe("gold", unown) }
|
|
Catalog.art(record)
|
|
local mapped = calls[1].mon
|
|
T.eq(require("src.core.game3.pokemon").unownLetter(mapped.personality), 2, "Unown letter C survives art generation change")
|
|
T.eq(unown.personality, nil, "display personality is not written into the native record")
|
|
local other = Store.copy(record)
|
|
other.mon.unownLetter = 4
|
|
local _, _, otherMon = Catalog.art(other)
|
|
T.eq(require("src.core.game3.pokemon").unownLetter(otherMon.personality), 3, "different Gen 2 Unown forms do not share the first form's cached art")
|
|
|
|
available.emerald, available.gold = nil, nil
|
|
Catalog.reset()
|
|
art, version = Catalog.art(entry)
|
|
T.eq(art, nil, "missing artwork is a safe placeholder")
|
|
T.eq(GameVersion.get(), "red", "artwork lookup does not switch the active game")
|
|
T.eq(CacheFs.prefix, "", "artwork lookup does not change the cache prefix")
|
|
|
|
CacheFs.readAt = readAt
|
|
package.loaded["src.online.OnlineSprites"] = realSprites
|
|
Catalog.reset()
|
|
T.finish()
|