mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 05:32:07 -04:00
73 lines
3.3 KiB
Lua
73 lines
3.3 KiB
Lua
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
require("src.core.GameVersion").set("firered")
|
|
local Game3Cache = require("tests.game3_cache")
|
|
if not Game3Cache.bundle() then print("[skip] hidden_item_persistence: " .. tostring(Game3Cache.reason)) return end
|
|
local Field = require("src.core.game3.field")
|
|
local Flags = require("src.core.game3.scripting.flags")
|
|
local Space = require("src.core.game3.scripting.space")
|
|
local Runtime = require("src.core.game3.runtime")
|
|
local Bag = require("src.core.game3.bag")
|
|
local Items = require("src.core.game3.items")
|
|
local Message = require("src.ui.game3.message")
|
|
local Hud = require("src.ui.game3.hud")
|
|
local Start = require("src.ui.game3.start_menu")
|
|
local Schema = require("src.core.game3.save_schema_firered")
|
|
local SaveData = require("src.core.SaveData")
|
|
local hidden = { type = "hidden_item", x = 28, y = 57, flag = 0x3E9, item = 14, quantity = 1 }
|
|
local s = Schema.newGame({ name = "RED" })
|
|
s.map, s.x, s.y, s.playerX, s.playerY = "FR_VIRIDIAN_FOREST", 28, 58, 28, 58
|
|
local game = { session = s, data = { maps = { [s.map] = { bgEvents = { hidden } } } } }
|
|
Field._game, Field._session, Runtime._game, Runtime.session = game, s, game, s
|
|
Space.store = Flags.newStore()
|
|
Flags.setVar(Space.store, nil, 0x4070, 1)
|
|
Space.persistSession(nil, game)
|
|
s.bag = Bag.new()
|
|
assert(Field.pickUpHiddenItem(game, hidden))
|
|
Message.close()
|
|
assert(Flags.getFlag(Space.store, nil, hidden.flag), "pickup must mark the live store")
|
|
assert(Flags.getFlag(s, nil, hidden.flag), "pickup must persist the session snapshot")
|
|
for _ = 1, 3 do
|
|
Hud.openStartMenu(game, s)
|
|
assert(Start.isOpen())
|
|
Start.close(true)
|
|
assert(not Field.hiddenItemAt(game, 28, 57, 0))
|
|
assert(not Field.pickUpHiddenItem(game, hidden))
|
|
assert(Bag.get(s.bag, 14) == 1)
|
|
assert(not Field.useItemfinder(s, false))
|
|
end
|
|
print("PASS hidden_pickup_survives_start_menu")
|
|
s.flags = {}
|
|
assert(not Field.hiddenItemAt(game, 28, 57, 0))
|
|
assert(not Field.useItemfinder(s, false), "Itemfinder must prefer live flags over stale snapshots")
|
|
Space.persistSession(nil, game)
|
|
local restored = Schema.fromSaveTable(SaveData.decode(SaveData.encode(Schema.toSaveTable(s))))
|
|
assert(Flags.getFlag(restored, nil, hidden.flag))
|
|
assert(Bag.get(restored.bag, 14) == 1)
|
|
print("PASS hidden_itemfinder_and_save_roundtrip")
|
|
Flags.setFlag(Space.store, nil, hidden.flag, false)
|
|
Space.persistSession(nil, game)
|
|
s.bag = Bag.new()
|
|
assert(Bag.add(s.bag, 14, Items.GAME3_MAX_QTY))
|
|
assert(Field.pickUpHiddenItem(game, hidden))
|
|
Message.close()
|
|
assert(not Flags.getFlag(Space.store, nil, hidden.flag))
|
|
assert(not Flags.getFlag(s, nil, hidden.flag))
|
|
assert(Field.hiddenItemAt(game, 28, 57, 0) == hidden)
|
|
assert(Field.useItemfinder(s, false))
|
|
assert(Bag.remove(s.bag, 14, Items.GAME3_MAX_QTY))
|
|
assert(Field.pickUpHiddenItem(game, hidden))
|
|
Message.close()
|
|
assert(Bag.get(s.bag, 14) == 1)
|
|
assert(Flags.getFlag(Space.store, nil, hidden.flag))
|
|
print("PASS hidden_full_bag_does_not_consume")
|
|
local isolated = { map = s.map, flags = {}, bag = Bag.new(), x = 28, y = 58 }
|
|
Field._session = isolated
|
|
assert(Field.hiddenItemAt(game, 28, 57, 0) == hidden)
|
|
assert(Field.useItemfinder(isolated, false))
|
|
assert(Field.pickUpHiddenItem(game, hidden))
|
|
Message.close()
|
|
assert(Flags.getFlag(isolated, nil, hidden.flag))
|
|
assert(Bag.get(isolated.bag, 14) == 1)
|
|
assert(Bag.get(s.bag, 14) == 1)
|
|
print("PASS hidden_isolated_session_fallback")
|