BizHawk/Assets/Lua/NES/Faxandu.lua

114 lines
2.6 KiB
Lua

------------------------------
--Faxandu collision box viewer
--Author: Pasky
------------------------------
local HP = true -- toggle to false to turn off hitpoint display on enemies
function findbit(p)
return 2 ^ (p - 1)
end
function hasbit(x, p)
return x % (p + p) >= p
end
local function hex(val)
val = string.format("%X",val)
return val
end
memory.usememorydomain("System Bus")
local function player()
local x = memory.read_u8(0x9E)
local y = memory.read_u8(0xA1) + 0x1F
local hp = memory.read_u8(0x431)
-- vuln box
gui.drawBox(x,y,x+0xB,y+0x1B,0xFF0000FF,0x300000FF)
--attack box
local xrad = memory.read_u8(0xD2)
local yrad = memory.read_u8(0xD3)
local atk = memory.read_u8(0xA4)
local x2 = memory.read_u8(0xCE)
local y2 = memory.read_u8(0xD0) + 0x1F
if hasbit(atk,findbit(8)) then
gui.drawBox(x2,y2,x2+xrad,y2+yrad)
end
--Magic
local mag = memory.read_u8(0x02B3)
if mag ~= 0xFF then
local addr = 0x8B73 + mag
local magx = memory.read_u8(0x2B6)
local magy = memory.read_u8(0x2B8) + 0x1F
xrad = memory.read_u8(addr)
yrad = memory.read_u8(addr + 5)
gui.drawBox(magx,magy,magx+xrad,magy+yrad)
end
end
local function enemies()
local base = 0xBA
for i = 0,7,1 do
local etype = memory.read_u8(0x2CC + i)
if etype ~= 0xFF then
local x = memory.read_u8(base + i)
local y = memory.read_u8(base + 8 + i) + 0x1F
local hp = memory.read_u8(0x344 + i)
local atk = memory.read_u8(0x2E4 + i)
local atk2 = false
local facing = memory.read_u8(0x2DC + i)
local addr
if etype == 0x1F or etype == 0x21 then -- Check if dwarf or ???
if atk == 0x02 then
addr = 0x8A71
atk2 = true
else
addr = 0xB200 + (etype * 4) + 0x73
end
elseif etype == 0x20 then
if atk == 0x04 then
addr = 0x8A75
atk2 = true
else
addr = 0xB200 + (etype * 4) + 0x73
end
else
addr = 0xB200 + (etype * 4) + 0x73
end
local xoff = memory.read_s8(addr)
local yoff = memory.read_s8(addr + 1)
local xrad = memory.read_s8(addr + 2)
local yrad = memory.read_s8(addr + 3)
if not hasbit(facing,findbit(1)) and atk2 == true then
xoff = xoff * -1
xrad = xrad * -1
end
--Attack box
gui.drawBox(x,y+yoff,x+xoff+xrad,y+yoff+yrad,0xFFFF0000,0x70FF0000)
if HP == true then
gui.text(x,y-10,"HP: " .. hp)
end
--Vuln box
if memory.read_u8(etype + 0xB544) == 0 then
addr = 0xB407 + (etype * 2)
xrad = memory.read_u8(addr)
yrad = memory.read_u8(addr + 1)
gui.drawBox(x,y,x+xrad,y+yrad,0xFFFFFF00,0x30FFFF00)
end
end
end
end
while true do
player()
enemies()
emu.frameadvance()
end