From 46ccd190ddd68df43fe877f7c650dc7ac6f89cf8 Mon Sep 17 00:00:00 2001 From: pasky1382 Date: Tue, 4 Sep 2012 22:51:39 +0000 Subject: [PATCH] Added Super Castlevania 4 hitbox viewer lua script. --- .../output/Lua/SNES/Super Castlevania 4.lua | 260 ++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 BizHawk.MultiClient/output/Lua/SNES/Super Castlevania 4.lua diff --git a/BizHawk.MultiClient/output/Lua/SNES/Super Castlevania 4.lua b/BizHawk.MultiClient/output/Lua/SNES/Super Castlevania 4.lua new file mode 100644 index 0000000000..13adeafa83 --- /dev/null +++ b/BizHawk.MultiClient/output/Lua/SNES/Super Castlevania 4.lua @@ -0,0 +1,260 @@ +---------------------------- +----Super Castlevania IV---- +---------------------------- + +--Author Pasky13 + +--------------- +----TOGGLES---- +--------------- + +--Box type toggles +local candle = true +local enemy = true +local player = true + + +--Center axis toggles +local player_axis = false +local whip_axis = false +local projectile_axis = true +local enemy_axis = true +local candle_axis = false + +--Hitpoint display +local playerhp = true +local enemyhp = true + +--Cheats +local cheats = false + +------------------ +---END TOGGLES---- +------------------ + + +--------------- +----GLOBALS---- +--------------- + +local pbase = 0x540 +local ebase = 0x580 +local wbase = 0x200 +local pjbase = 0x440 + +local ux = 0xA +local uy = 0xE + +local uxrad = 0x28 +local uyrad = 0x2A + +local eactive = 0x10 + +local camx = 0x1280 +local camy = 0x1298 + +local elife = 0x06 + +local plife = 0x13F4 +local hearts = 0x13F2 +local facing = 0x0578 +local timer = 0x13F0 + +local xs = client.screenwidth() / 256 +local ys = client.screenheight() / 224 +------------------- +----END GLOBALS---- +------------------- + +local function centeraxis(x,y) + gui.drawLine(x,y+2,x,y-2,0xFFFFFFFF) + gui.drawLine(x+2,y,x-2,y,0xFFFFFFFF) +end + +local function player_hitbox() + local x = mainmemory.read_u16_le(pbase+ux) - mainmemory.read_u16_le(camx) + local y = mainmemory.read_u16_le(pbase+uy) - mainmemory.read_u16_le(camy) + local cr = mainmemory.read_u8(0x576) + + if cr ~= 0x0F then + gui.drawBox(x+7,y+27,x-7,y-19,0xFF0000FF,0x400000FF) + if playerhp == true then + gui.text((x-10) * xs,(y-26) * ys,"HP:" .. mainmemory.read_u8(plife)) + end + else + gui.drawBox(x+7,y+cr,x-7,y-cr,0xFF0000FF,0x400000FF) + if playerhp == true then + gui.text((x-10) * xs,(y-cr-7) * ys,"HP:" .. mainmemory.read_u8(plife)) + end + end + + + + if player_axis == true then + centeraxis(x,y) + end + +end + +local function player_projectiles() + local base = 0 + local x + local y + local xrad + local yrad + local oend = 3 + + for i = 0,oend,1 do + + base = pjbase + (i * 0x40) + + if i == 0 then + base = pjbase + end + + if mainmemory.read_u16_le(base) ~= 0 then + x = mainmemory.read_u16_le(base+ux) - mainmemory.read_u16_le(camx) + y = mainmemory.read_u16_le(base+uy) - mainmemory.read_u16_le(camy) + xrad = mainmemory.read_u16_le(base+uxrad) + yrad = mainmemory.read_u16_le(base+uyrad) + gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFFFFFF,0x40FFFFFF) + + if projectile_axis == true then + centeraxis(x,y) + end + + end + + end +end + +local function player_whip() + + local base = 0 + local x + local y + local xrad + local yrad + local oend = 8 + + for i = 0,oend,1 do + + base = wbase + (i * 0x40) + + if i == 0 then + base = wbase + end + + if mainmemory.read_u16_le(base) ~= 0 then + x = mainmemory.read_u16_le(base+ux) - mainmemory.read_u16_le(camx) + y = mainmemory.read_u16_le(base+uy) - mainmemory.read_u16_le(camy) + xrad = mainmemory.read_u16_le(base+uxrad) + yrad = mainmemory.read_u16_le(base+uyrad) + + if xrad == 0 and yrad == 0 then + if base == 0x0400 then + gui.drawBox(x-0x10,y-0x04,x+0x10,y+0x04,0xFFFFFFFF,0x40FFFFFF) + else + gui.drawBox(x-0x04,y-0x04,x+0x04,y+0x04,0xFFFFFFFF,0x40FFFFFF) + end + else + gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFFFFFF,0x40FFFFFF) + end + + if whip_axis == true then + centeraxis(x,y) + end + end + + end +end + +local function object_hitbox() + local base = 0 + local x + local y + local xrad + local yrad + local oend = 36 + local drawn + local life + for i = 0,oend,1 do + + base = ebase + (i * 0x40) + drawn = false + + if i == 0 then + base = ebase + elseif + base == 0x540 then + drawn = true + end + + if mainmemory.read_u16_le(base+0x10) == 0x0E then + if candle == true then + x = mainmemory.read_u16_le(base+ux) - mainmemory.read_u16_le(camx) + y = mainmemory.read_u16_le(base+uy) - mainmemory.read_u16_le(camy) + xrad = mainmemory.read_u16_le(base+uxrad) + yrad = mainmemory.read_u16_le(base+uyrad) + gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFFD000,0x40FFD000) + drawn = true + + if candle_axis == true then + centeraxis(x,y) + end + end + + end + + if mainmemory.read_u16_le(base+0x10) ~= 0 and drawn == false then + + x = mainmemory.read_u16_le(base+ux) - mainmemory.read_u16_le(camx) + y = mainmemory.read_u16_le(base+uy) - mainmemory.read_u16_le(camy) + xrad = mainmemory.read_u16_le(base+uxrad) + yrad = mainmemory.read_u16_le(base+uyrad) + life = mainmemory.read_u16_le(base+elife) + + gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFF0000,0x40FF0000) + drawn = true + + if enemyhp == true then + if life > 0 and life ~= 255 then + gui.text((x-10) * xs,(y-yrad-7) * ys,"HP:" .. life) + end + end + if enemy_axis == true then + centeraxis(x,y) + end + end + + + end +end + +local function cheat() + memory.writebyte(plife,16) + memory.writeword(timer,1024) + memory.writebyte(hearts,32) +end + +local function scaler() + xs = client.screenwidth() / 256 + ys = client.screenheight() / 224 +end + +while true do + scaler() + if player == true then + player_hitbox() + player_whip() + player_projectiles() + end + + if enemy == true then + object_hitbox() + end + if cheats == true then + cheat() + end + emu.frameadvance() +end \ No newline at end of file