Holy Diver collision viewer (NES)

This commit is contained in:
pasky1382 2012-10-03 02:24:38 +00:00
parent 05500ac6b1
commit 7c3551b918
1 changed files with 168 additions and 0 deletions

View File

@ -0,0 +1,168 @@
-- Author Pasky13
local camx = 0x38F
local camy = 0x3CF
local plife = 0x440
local px = 0x370
local py = 0x3A0
local ex = 0x370
local ey = 0x3A0
--Configurable player box
local pxrad = 6 -- Only use multiples of 2 and no higher than 6
local function hex(val)
val = string.format("%X",val)
return val
end
local function draw_axis(x,y,color)
gui.line(x,y-4,x,y+4,color)
gui.line(x-4,y,x+4,y,color)
end
local function lookup(etype,i) -- this is really messy GIANT if else statement incoming
local box = {0,0,0,0} -- xoff,yoff,xrad,yrad
if etype == 0xF then
box = {0x06,0x18,0x0C,0x18}
elseif etype == 0x4A then
box = {0x1C,0x0C,0x38,0x18}
elseif etype == 0x1B then
box = {0x08,0x08,0x10,0x10}
elseif etype == 0x13 then
box = {0x08,0x10,0x10,0x20}
elseif etype == 0x3F then
box = {0x0C,0x38,0x18,0x38}
elseif etype == 0x40 then
box = {0x07,0x07,0x0E,0x0E}
elseif etype == 0x12 then
box = {0x04,0x04,0x08,0x08}
elseif etype == 0x36 then
box = {0x10,0x10,0x20,0x20}
elseif etype == 0x30 then
box = {0x0C,0x10,0x18,0x18}
elseif etype == 0x2C then
box = {0x04,0x08,0x08,0x08}
elseif etype == 0x2B then
box = {0x08,0x08,0x10,0x18}
elseif etype == 0x24 then
box = {0x08,0x08,0x10,0x10}
elseif etype == 0x25 then
box = {0x04,0x08,0x08,0x08}
elseif etype == 0x46 then
box = {0x18,0x20,0x28,0x20}
elseif etype == 0x1E then
box = {0x08,0x08,0x10,0x08}
elseif etype == 0x50 then
box = {0x10,0x00,0x40,0x60}
elseif etype == 0x51 then
box = {0x08,0x0A,0x10,0x0A}
elseif etype == 0x32 then
box = {0x08,0x10,0x10,0x10}
elseif etype == 0x33 then
box = {0x04,0x04,0x08,0x08}
elseif etype == 0x42 then
box = {0x04,0x04,0x08,0x08}
elseif etype == 0x26 then
box = {0x09,0x0D,0x15,0x15}
elseif etype == 0x27 then
box = {0x10,0x18,0x20,0x20}
elseif etype == 0x28 then
box = {0x04,0x04,0x08,0x08}
elseif etype == 0x53 then
box = {0x0C,0x20,0x18,0x28}
elseif etype == 0x54 then
box = {0x03,0x18,0x08,0x18}
elseif etype == 0x48 then
box = {0x0C,0x18,0x18,0x18}
elseif etype == 0x49 then
box = {0x08,0x08,0x08,0x08}
elseif etype == 0x4A then
box = {0x1C,0x0C,0x38,0x18}
elseif etype == 0x4B then
box = {0x05,0x04,0x08,0x08}
elseif etype == 0x3D then
box = {0x06,0x06,0x0C,0x0C}
elseif etype == 0x3E then
box = {0x06,0x06,0x0C,0x0C}
elseif etype == 0x38 then
box = {0x10,0x34,0x20,0x20}
elseif etype == 0x57 then
box = {0x00,0x00,0x48,0x60}
elseif etype == 0x4D then
box = {0x10,0x00,0x20,0x38}
elseif etype == 0x59 then
box = {0x0C,0x10,0x18,0x18}
elseif etype == 0x58 then
box = {0x08,0x08,0x10,0x10}
elseif etype == 0x5E then
box = {0x08,0x10,0x10,0x10}
elseif etype == 0x37 then
box = {0x10,0x28,0x24,0x50}
elseif etype == 0x5D then
box = {0x04,0x04,0x08,0x08}
elseif etype == 0x5C then
box = {0x08,0x08,0x10,0x10}
elseif etype == 0x5B then
box = {0x0C,0x00,0x18,0x10}
elseif etype == 0x4C then -- Mutating projectile
o = mainmemory.read_u8(0x470 + i)
dt = {0x08,0x0C,0x10,0x10,0x18,0x20}
box = {0x04,0x08,dt[1+o],dt[4+o]}
end
return box
end
local function player()
local pos = mainmemory.read_u8(0x300)
local cx = mainmemory.read_u8(camx) + (mainmemory.read_u8(camx + 0x10) * 256)
local cy = mainmemory.read_u8(camy) + (mainmemory.read_u8(camy + 0x10) * 256)
local x = mainmemory.read_u8(px) + (mainmemory.read_u8(px + 0x10) * 256) - cx
local y = mainmemory.read_u8(py) + (mainmemory.read_u8(py + 0x10) * 256) - cy
local pyrad = 0x1C
if pos == 0x03 or pos == 0x06 then
pyrad = 0x13
end
gui.drawBox(x - (pxrad / 2), y, x + (pxrad / 2), y - pyrad,0xFF0000FF,0x350000FF)
end
local function enemy()
local cx = mainmemory.read_u8(camx) + (mainmemory.read_u8(camx + 0x10) * 256)
local cy = mainmemory.read_u8(camy) + (mainmemory.read_u8(camy + 0x10) * 256)
local etype
local box = {0,0,0,0}
for i = 6, 14, 1 do
etype = mainmemory.read_u8(0x300 + i)
local fill = 0x40FF0000
local outl = 0xFFFF0000
if etype ~= 0xFF then
local x = mainmemory.read_u8(ex + i) + (mainmemory.read_u8(ex + i + 0x10) * 256) - cx
local y = mainmemory.read_u8(ey + i) + (mainmemory.read_u8(ey + i + 0x10) * 256) - cy
box = lookup(etype,i)
gui.drawBox(x - box[1],y-box[2],x-box[1]+box[3] - pxrad,y-box[2]+box[4],outl,fill)
if etype == 0x3F then-- 1st boss
--Draw his vuln box
local fill = 0x40FFFF00
local outl = 0xFFFFFF00
box = {0x0C,0x38,0x18,0x18}
gui.drawBox(x - box[1],y-box[2],x-box[1]+box[3] - pxrad,y-box[2]+box[4],outl, fill)
end
end
end
end
while true do
player()
enemy()
emu.frameadvance()
end