107 lines
2.9 KiB
Lua
107 lines
2.9 KiB
Lua
![]() |
--Ninja Gaiden Hitbox Viewer
|
||
|
--Author: Pasky
|
||
|
|
||
|
--Player
|
||
|
local px = 0x0086
|
||
|
local py = 0x008A
|
||
|
|
||
|
local projxbase = 0x4BB -- Object X speed base is 0x4C1
|
||
|
local projybase = 0x4BE -- Object Y speed base ix 0x4C4
|
||
|
|
||
|
--Enemies
|
||
|
local ex = 0x0460
|
||
|
local ey = 0x0480
|
||
|
local efacing = 0x440
|
||
|
local etype = 0x0438
|
||
|
|
||
|
--Objects
|
||
|
local ox = 0x4D9
|
||
|
local oy = 0x4E1
|
||
|
|
||
|
memory.usememorydomain("PRG ROM")
|
||
|
|
||
|
local function Ryu()
|
||
|
local x = mainmemory.read_u8(px)
|
||
|
local y = mainmemory.read_u8(py)
|
||
|
local yrad = mainmemory.read_u8(0x90)
|
||
|
local act = mainmemory.read_u8(0x83)
|
||
|
local subwep = mainmemory.read_u8(0xC9)
|
||
|
local flip = 0
|
||
|
local swdactive = mainmemory.read_u8(0x83)
|
||
|
|
||
|
if bit.band(mainmemory.read_u8(0x84),0x40) == 0x40 then
|
||
|
flip = 1
|
||
|
end
|
||
|
--Spin slash check
|
||
|
if subwep == 0x85 then
|
||
|
if mainmemory.read_u8(0x83) >= 0x0C and mainmemory.read_u8(0x83) <= 0x0F then
|
||
|
gui.drawBox(x+9,y-8-8,x-9,y-8-yrad,0xFFFFFF00,0x60FFFF00)
|
||
|
end
|
||
|
end
|
||
|
--Check if Ryu is attacking with sword 7 = stand/jump, A = crouching
|
||
|
if swdactive == 7 or swdactive == 0x0A then
|
||
|
if flip == 0 then
|
||
|
gui.drawBox(x,y-8-yrad,x+0x20,y-8-yrad+0x10,0xFFFFFFFF,0x60FFFFFF)
|
||
|
else
|
||
|
gui.drawBox(x,y-8-yrad,x-0x20,y-8-yrad+0x10,0xFFFFFFFF,0x60FFFFFF)
|
||
|
end
|
||
|
end
|
||
|
-- Check spinning flame subweapon
|
||
|
if subwep == 0x84 then
|
||
|
if mainmemory.read_u8(0x4C8) > 0 then
|
||
|
gui.drawBox(x+9,y-8-8,x-9,y-8-yrad,0xFFFFFF00,0x60FFFF00)
|
||
|
end
|
||
|
end
|
||
|
gui.drawLine(x,y-8,x,y-8-yrad,0xFF0000FF)
|
||
|
end
|
||
|
|
||
|
local function weapons()
|
||
|
for i = 0,2,1 do
|
||
|
active = bit.band(mainmemory.read_u8(0xC8),memory.read_u8(0x1E66F + i))
|
||
|
if active > 0 then
|
||
|
local wtype = bit.band(mainmemory.read_u8(0xC9),0x7F)
|
||
|
local x = mainmemory.read_u8(projxbase + i)
|
||
|
local y = mainmemory.read_u8(projybase + i)
|
||
|
local xrad = memory.read_u8(0x1E605 + wtype)
|
||
|
gui.drawBox(x+xrad,y-8,x-xrad,y-8-xrad,0xFFFF00FF,0x60FF00FF)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function enemies()
|
||
|
for i = 0,8,1 do
|
||
|
local active = bit.band(mainmemory.read_u8(0x73),memory.read_u8(0x1E66F + i))
|
||
|
if active > 0 then
|
||
|
local offset = mainmemory.read_u8(etype + i)
|
||
|
local x = mainmemory.read_u8(ex + i)
|
||
|
local y = mainmemory.read_u8(ey + i)
|
||
|
local xrad = memory.readbyte(0x3300)
|
||
|
local yrad = memory.readbyte(0x3400)
|
||
|
gui.drawBox(x+xrad,y-8,x-xrad,y-8-yrad,0xFFFF0000,0x60FF0000)
|
||
|
gui.drawLine(x,y-8,x,y-8-yrad,0xFFFFFF00)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function objects()
|
||
|
for i = 0,3,1 do
|
||
|
local active = bit.band(mainmemory.read_u8(0xC0),memory.read_u8(0x1E66F + i))
|
||
|
if active > 0 then
|
||
|
active = bit.band(mainmemory.read_u8(0x4D1 + i),8)
|
||
|
if active == 0 then
|
||
|
x = mainmemory.read_u8(ox + i)
|
||
|
y = mainmemory.read_u8(oy + i)
|
||
|
gui.drawLine(x,y-8,x,y-8-0x10,0xFF00FFF0)
|
||
|
gui.drawBox(x-0x0C,y-8,x+0x0C,y-8-0x10,0xFF00FFF0,0x6000FFF0)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
while true do
|
||
|
Ryu()
|
||
|
weapons()
|
||
|
enemies()
|
||
|
objects()
|
||
|
emu.frameadvance()
|
||
|
end
|