User File #638272722548828309

Upload All User Files

#638272722548828309 (unlisted) - Spiderman 2 DS speed lua

spiderman2ds.lua
Game: Spider-Man 2 ( DS, see all files )
14 downloads
Uploaded 8/10/2023 1:50 PM by EZGames69 (see all 147)
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