mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 13:33:27 -04:00
40 lines
1.8 KiB
Lua
40 lines
1.8 KiB
Lua
package.path='./?.lua;./?/init.lua;'..package.path
|
|
if not arg[1] then print('SKIP object ROM test: supply FireRed ROM');return end
|
|
local F=require('src.import.gba.file_io')
|
|
local imports=F.makeImports(arg[1],'test')
|
|
local rom=assert(require('src.import.gba.rom').open(imports,'firered'))
|
|
local E=require('src.import.gba.object_interactions_extract')
|
|
local p=E.readScripts(rom)
|
|
local I=require('src.core.game3.scripting.interaction_scripts')
|
|
local Vm=require('src.core.game3.scripting.vm')
|
|
local V=require('src.import.gba.versions')
|
|
local Opcodes=require('src.core.game3.scripting.opcodes')
|
|
local seeds,alias={},{}
|
|
for i=0,V.STD_SCRIPTS_COUNT-1 do
|
|
local ptr=rom:u32(V.STD_SCRIPTS+i*4)
|
|
seeds[#seeds+1]=ptr
|
|
alias['std:'..i]=Opcodes.key(ptr)
|
|
end
|
|
local stdBfs=require('src.import.gba.extract_scripts').bfsFromSeeds(rom,seeds)
|
|
local stdScripts={}
|
|
for k,v in pairs(stdBfs.scripts) do stdScripts[k]=v end
|
|
for name,key in pairs(alias) do stdScripts[name]=assert(stdBfs.scripts[key]) end
|
|
local textCount=0
|
|
for _,row in ipairs(I.FLAVOR) do
|
|
local messages={}
|
|
local vm=Vm.new({scripts=p.scripts,text=p.text,stdscripts=stdScripts,
|
|
onMessage=function(text) messages[#messages+1]=text end})
|
|
assert(vm:start('EventScript_'..row[2]))
|
|
for _=1,100 do vm:tick() end
|
|
assert(#messages==1 and #messages[1]>0,row[2]..' did not show its text')
|
|
assert(not vm:isRunning(),row[2]..' did not return control')
|
|
-- Read original IR directly too: every shared script must resolve its text.
|
|
local script=p.scripts['EventScript_'..row[2]]
|
|
local key=script[1].value or script[1][2]
|
|
assert(type(key)=='string' and p.text[key],row[2]..' text missing')
|
|
textCount=textCount+1
|
|
end
|
|
assert(p.scripts.EventScript_WallTownMap)
|
|
assert(textCount==28)
|
|
imports:_close();print('PASS all 28 original object/sign scripts and Wall Town Map extracted')
|