Added Super Castlevania 4 hitbox viewer lua script.
This commit is contained in:
parent
f5d728bd35
commit
46ccd190dd
|
@ -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
|
Loading…
Reference in New Issue