mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
60 lines
1.9 KiB
Lua
60 lines
1.9 KiB
Lua
-- Writes tests/drivers/gold/flag_names.lua from a pokegold checkout.
|
|
--
|
|
-- luajit tools/goldwalk/gen_flags.lua [../pokegold]
|
|
--
|
|
-- The output is committed so a bot run needs only this repo and a Gold cache;
|
|
-- the disassembly is a build-time input, not a runtime one. Regenerate after
|
|
-- pulling pokegold, then run tests/gold_flag_names_test.lua -- it re-derives
|
|
-- the same mapping from the cart and fails if pret has renumbered anything.
|
|
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local Flags = dofile("tools/goldwalk/flags.lua")
|
|
|
|
local ROOT = arg[1] or "../pokegold"
|
|
local OUT = "tests/drivers/gold/flag_names.lua"
|
|
|
|
local events, _ = Flags.parse(ROOT .. "/constants/event_flags.asm")
|
|
local engine, _ = Flags.parse(ROOT .. "/constants/engine_flags.asm")
|
|
|
|
-- Deterministic output: a pairs() order would rewrite the whole file on every
|
|
-- run and bury a real renumber in the diff noise.
|
|
local function sortedKeys(t)
|
|
local keys = {}
|
|
for k in pairs(t) do keys[#keys + 1] = k end
|
|
table.sort(keys)
|
|
return keys
|
|
end
|
|
|
|
local function emit(fh, name, tbl)
|
|
fh:write((" %s = {\n"):format(name))
|
|
for _, k in ipairs(sortedKeys(tbl)) do
|
|
fh:write((" %s = %d,\n"):format(k, tbl[k]))
|
|
end
|
|
fh:write(" },\n")
|
|
end
|
|
|
|
local fh = assert(io.open(OUT, "w"))
|
|
fh:write([[
|
|
-- Generated by tools/goldwalk/gen_flags.lua from pret/pokegold. Do not edit.
|
|
--
|
|
-- EVENT_* / ENGINE_* name -> the numeric id the cart's scripts carry, which is
|
|
-- what src/world/gen2/Events.lua and World:engineFlag key on. Verified against
|
|
-- the ROM by tests/gold_flag_names_test.lua.
|
|
return {
|
|
]])
|
|
fh:write((" source = %q,\n"):format("pret/pokegold constants/{event,engine}_flags.asm"))
|
|
emit(fh, "events", events)
|
|
emit(fh, "engine", engine)
|
|
fh:write("}\n")
|
|
fh:close()
|
|
|
|
local function count(t)
|
|
local n = 0
|
|
for _ in pairs(t) do n = n + 1 end
|
|
return n
|
|
end
|
|
|
|
print(("wrote %s : %d EVENT_*, %d ENGINE_*")
|
|
:format(OUT, count(events), count(engine)))
|