105 lines
3.4 KiB
Lua
105 lines
3.4 KiB
Lua
-- Ninja Gaiden 3 (USA) Collision box viewer
|
|
-- Author: Pasky
|
|
-- For use with Bizhawk
|
|
|
|
local drawn = false -- Used so the player box isn't constantly drawn everytime the collision function is hit
|
|
memory.usememorydomain("System Bus")
|
|
|
|
function axis(x,y,color,xsize,ysize)
|
|
if xsize == nil then
|
|
xsize = 2
|
|
end
|
|
if ysize == nil then
|
|
ysize = 2
|
|
end
|
|
gui.drawLine(x+xsize,y,x-xsize,y,color)
|
|
gui.drawLine(x,y+ysize,x,y-ysize,color)
|
|
gui.drawLine(x,y,x,y,"#000000FF")
|
|
end
|
|
|
|
local function collision() -- Collision between enemies
|
|
if memory.read_u8(0xA2CA) == 0xBD and memory.read_u8(0xA2CB) == 0x16 and memory.read_u8(0xA2CC) == 0x05 then -- Bank check
|
|
local xreg = emu.getregister("X")
|
|
local yreg = emu.getregister("Y")
|
|
-- Enemy
|
|
local x = memory.read_u8(0x516 + xreg)
|
|
local y = memory.read_u8(0x58E + xreg)
|
|
-- Enemy boxes
|
|
local xrad = memory.read_u8(0x052E + xreg)
|
|
local yrad = memory.read_u8(0x05A6 + xreg)
|
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFF0000,0x40FF0000)
|
|
local invuln = bit.bor(memory.read_u8(0x4E6 + xreg),memory.read_u8(0x4CE + xreg))
|
|
if bit.band(invuln,0x02) == 0x02 then
|
|
axis(x,y,0xFFFFFFFF,xrad,yrad)
|
|
end
|
|
-- Player
|
|
if drawn == false then
|
|
x = memory.read_u8(0x516)
|
|
y = memory.read_u8(0x58E)
|
|
xrad = 0x06
|
|
yrad = memory.read_u8(0x8C)
|
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFF0000FF,0x400000FF)
|
|
axis(x,y)
|
|
drawn = true
|
|
end
|
|
end
|
|
end
|
|
|
|
local function pattack() -- Player attacks
|
|
if memory.read_u8(0xA050) == 0xBD and memory.read_u8(0xA051) == 0x16 and memory.read_u8(0xA052) == 0x05 then -- Bank check
|
|
local xreg = emu.getregister("X")
|
|
local yreg = emu.getregister("Y")
|
|
local x = memory.read_u8(0x516)
|
|
if bit.band(memory.read_u8(0x4CE),0x40) == 0x40 then
|
|
x = x - memory.read_u8(0xAA)
|
|
else
|
|
x = x + memory.read_u8(0xAA)
|
|
end
|
|
local y = memory.read_u8(0x58E) - 0x08
|
|
local xrad = memory.read_u8(0xAA)
|
|
local yrad = memory.read_u8(0xAB)
|
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFFFFFF,0x40FFFFFF)
|
|
|
|
-- Enemy vulnerability boxes (green)
|
|
x = memory.read_u8(0x516 + xreg)
|
|
y = memory.read_u8(0x58E + xreg)
|
|
xrad = memory.read_u8(0x052E + xreg)
|
|
yrad = memory.read_u8(0x05A6 + xreg)
|
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFF00FF00,0x4000FF00)
|
|
local invuln = bit.bor(memory.read_u8(0x4E6 + xreg),memory.read_u8(0x4CE + xreg))
|
|
if bit.band(invuln,0x02) == 0x02 then
|
|
axis(x,y,0xFFFFFFFF,xrad,yrad)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function subweapon() -- Player sub weapons
|
|
if memory.read_u8(0xA050) == 0xBD and memory.read_u8(0xA051) == 0x16 and memory.read_u8(0xA052) == 0x05 then -- Bank check
|
|
local xreg = emu.getregister("X")
|
|
local yreg = emu.getregister("Y")
|
|
local x = memory.read_u8(0x51E + yreg)
|
|
local y = memory.read_u8(0x596 + yreg)
|
|
local wrad = memory.read_u8(0x9E)
|
|
gui.drawBox(x-wrad,y-wrad,x+wrad,y+wrad)
|
|
|
|
-- Enemy projectile vulnerability boxes (green)
|
|
x = memory.read_u8(0x516 + xreg)
|
|
y = memory.read_u8(0x58E + xreg)
|
|
xrad = memory.read_u8(0x052E + xreg)
|
|
yrad = memory.read_u8(0x05A6 + xreg)
|
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFF00FF00,0x4000FF00)
|
|
local invuln = bit.bor(memory.read_u8(0x4E6 + xreg),memory.read_u8(0x4CE + xreg))
|
|
if bit.band(invuln,0x02) == 0x02 then
|
|
axis(x,y,0xFFFFFFFF,xrad,yrad)
|
|
end
|
|
end
|
|
end
|
|
|
|
event.onmemoryexecute(collision,0xA2CA)
|
|
event.onmemoryexecute(pattack,0xA050)
|
|
event.onmemoryexecute(subweapon,0xA1DB)
|
|
|
|
while true do
|
|
emu.frameadvance()
|
|
drawn = false
|
|
end |