mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 13:33:27 -04:00
e12cda633a
mod.content.encounters:patch on a Gold boot keys by encounter KIND (encounters.grass.ROUTE_29), but the id space was open: a key the catalog did not describe was treated as a mod's own data and merged as-is. A Gen 1 encounters mod ported unchanged writes the MAP where Gold wants the kind, so the call was accepted, merged into data.gen2Encounters.ROUTE_29 and read by nothing -- vanilla game, no error, nothing in the Mod Manager (#2369). That key cannot be a mod's own data the way an extra palette id can: src/battle/gen2/Encounter.lua, src/core/gen2/Roamers.lua, src/core/gen2/BugContest.lua and src/world/gen2/World.lua read this table by name and the set of names is fixed, so an unknown id is a write nothing reads. Add an opt-in `keysClosed` shape slot (folded by Schemas.shapeFor like the other gen2* slots) that Schemas.check honours in its keys/keyValue branch, and set it on encounters' Gen 2 spec. An unknown id now names the ids that do exist instead of silently no-opping; api 2 fails the mod, api 1 keeps the warning. Also catalogue roamMons, which the extractor has always emitted (RomExtractorGen2:readRoamMons) and Roamers.roster has always read, but which was missing from gen2Keys. Only encounters opts in: palettes, battle_anims and constants keep their open id spaces, and Red's encounters id space is untouched. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>