Path: blob/master/Assets/Lua/SNES/Super Castlevania IV.lua
2 views
-- Super Castlevania IV (USA/JP) Collision box viewer1-- For use with Bizhawk2-- Author Pasky345local player = false67function findbit(p)8return 2 ^ (p - 1)9end1011local function ax(x,y)12gui.drawLine(x,y+4,x,y-4,0xFFFF0000)13gui.drawLine(x+4,y,x-4,y,0xFFFF0000)14gui.drawPixel(x,y,0xFFFFFFFF)15end1617function hasbit(x, p)18return x % (p + p) >= p19end2021local function hex(val)22val = string.format("%X",val)23if string.len(val) == 1 then24val = "0" .. val25end26return val27end2829local function camera()30camx = mainmemory.read_u16_le(0x1280)31camy = mainmemory.read_u16_le(0x1298)32end3334local function objects()35local xreg = emu.getregister("X")36local areg = emu.getregister("A")37local c = {0xFFFF0000,0x40FF0000}38local o = { mainmemory.read_u16_le(0x8) - camx,mainmemory.read_u16_le(0x10), mainmemory.read_u16_le(0xA) - camy, mainmemory.read_u16_le(0x12) }39if mainmemory.read_u16_le(xreg + 0x10) == 0xE then40c[1] = 0xFF0000FF41c[2] = 0x400000FF42gui.drawBox(o[1]-o[2],o[3]-o[4],o[1]+o[2],o[3]+o[4],c[1],c[2]) -- Draw non-player objects43else44if hasbit(areg,findbit(1)) then45gui.drawBox(o[1]-o[2],o[3]-o[4],o[1]+o[2],o[3]+o[4],c[1],c[2]) -- Draw objects that simon can collide with46if o[2] == 0 and o[4] == 0 then -- enemy projectile, mark the center with an axis since there is no box47ax(o[1],o[3])48end49end50end5152535455if player == false then56c[1] = 0xFF0000FF57c[2] = 0x400000FF58o = { mainmemory.read_u16_le(0x54A) - camx, 0x08, mainmemory.read_u16_le(0x54E), 0x13 }59gui.drawBox(o[1]-o[2],o[3]-o[4],o[1]+o[2],o[3]+o[4],c[1],c[2]) -- Draw player hurtbox60player = true -- Used so it isn't drawn every collision check61end62end6364local function weapons()65local x,y,xr,yr,base66for i = 0,7,1 do67base = 0x200 + (i * 0x40)68if mainmemory.read_u16_le(base) ~= 0 then69x = mainmemory.read_u16_le(base + 0xA) - camx70y = mainmemory.read_u16_le(base + 0xE) - camy71xr = mainmemory.read_u16_le(base + 0x28)72yr = mainmemory.read_u16_le(base + 0x2A)73if xr == 0 and yr == 0 then -- check if it's the whip74if base == 0x400 then75gui.drawBox(x-0x10,y-0x04,x+0x10,y+0x04,0xFFFFFFFF,0x40FFFFFF)76else77gui.drawBox(x-0x04,y-0x04,x+0x04,y+0x04,0xFFFFFFFF,0x40FFFFFF)78end79else80gui.drawBox(x-xr,y-yr,x+xr,y-yr)81end82end83end84end8586local function pproj()87local yreg = emu.getregister("Y")88local o = { mainmemory.read_u16_le(yreg + 0xA) - camx, mainmemory.read_u16_le(yreg + 0x28), mainmemory.read_u16_le(yreg + 0xE) - camy, mainmemory.read_u16_le(yreg + 0x2A) }89gui.drawBox(o[1]-o[2],o[3]-o[4],o[1]+o[2],o[3]+o[4],0xFFFFFFFF,0x40FFFFFF)90end9192local function reset()93player = false94end9596event.onmemoryexecute(objects,0x00DC7A)97event.onmemoryexecute(pproj,0xDD74)9899while true do100camera()101weapons()102emu.frameadvance()103reset()104end105106