Thanks to RetroEdit for making the script
-- Spider-Man 2 (DS) info utility
-- Author: RetroEdit
-- Version: 0.2.0
-- For BizHawk version 2.9.1
local PIX_FONT_X, PIX_FONT_Y = 4, 7
-- This might need to be dynamically recalculated under certain circumstances
local SCREEN_PIX_WIDTH = math.floor(client.bufferwidth() / PIX_FONT_X)
local SCREEN_PIX_HEIGHT = math.floor(client.bufferheight() / PIX_FONT_Y)
local function pix(x, y, s, fg, bg)
gui.pixelText(x * PIX_FONT_X, y * PIX_FONT_Y, s, fg, bg, "gens")
end
local function pix_row(x, y, fg, bg)
return function (s)
pix(x, y, s, fg, bg)
x = x + string.len(s)
end
end
local function ptr_chain(addr, offsets, domain)
if domain == nil then
domain = "System Bus"
end
for i,o in ipairs(offsets) do
addr = memory.read_u32_le(addr+o, domain)
if addr >= 0x10000000 or addr == 0 then
return nil
end
end
return addr
end
local in_game_root = 0x0215B3B8
local prev_active = false
local curr_char = {prev_x=0, prev_y=0}
local frames, prev_frames = 0, 0
event.onexit(function() gui.clearGraphics() end)
while true do
gui.clearGraphics()
frames = emu.framecount()
local char_addr = ptr_chain(in_game_root, {0, 4, 4, 4, 0}, "ARM9 System Bus")
if char_addr == nil or char_addr == 0x000D000C then
prev_active = true
else
pix(SCREEN_PIX_WIDTH - 26, 3, " x dx y dy", 0xFFFF0000, 0x5F000000)
local char_row = pix_row(SCREEN_PIX_WIDTH - 26, 4, 0xFFFF0000, 0x5F000000)
local x = memory.read_u32_le(char_addr + 0x298, "ARM9 System Bus")
local y = memory.read_s32_le(char_addr + 0x29C, "ARM9 System Bus")
local diff_x, diff_y = x - curr_char.prev_x, y - curr_char.prev_y
curr_char.prev_x, curr_char.prev_y = x, y
if not prev_active or prev_frames + 1 ~= frames then
diff_x, diff_y = " ?", " ?"
else
diff_x = string.format('%5s', diff_x)
diff_y = string.format('%5s', diff_y)
end
char_row(string.format('%8u', x))
char_row(diff_x)
char_row(string.format('%8s', y))
char_row(diff_y)
prev_active = true
end
prev_frames = frames
emu.frameadvance()
end