BizHawk/Assets/Lua/Genesis/Legend of Toki.lua

149 lines
3.1 KiB
Lua

--Author Pasky13
-- Player
local pbase = 0x1CD4
local px = pbase + 0x19
local py = pbase + 0x1D
local camx = 0x1BC5
local camy = 0x1BC9
--Player projectiles
local projbase = 0x1D34
--Enemies
local ebase = 0x21B4
--Bosses
local bbase = 0x35F4
--Text scaler
local xs
local ys
local function endian(address)
local result = mainmemory.read_u8(address) + (mainmemory.read_u8(address-1) * 256)
return result
end
local function Toki()
local cx = endian(camx)
local cy = endian(camy)
local x = endian(px) - cx
local y = endian(py) - cy
local xoff = mainmemory.read_s8(pbase + 0x11)
local yoff = mainmemory.read_s8(pbase + 0x15)
local xrad = mainmemory.read_u8(pbase +0x13)
local yrad = mainmemory.read_u8(pbase +0x17)
local flip = mainmemory.read_u8(pbase +1)
if flip == 1 then
xoff = xoff * -1
end
gui.drawBox(x+xoff-xrad,y+yoff-yrad,x+xoff+xrad,y+yoff+yrad,0xFF0000FF,0x300000FF)
end
local function enemies()
local cx = endian(camx)
local cy = endian(camy)
local x
local y
local xoff
local xrad
local yoff
local yrad
local oend = 44
local base = ebase
local flip
local hp
for i = 0,oend,1 do
if i > 0 then
base = ebase + (i * 0x60)
end
flip = mainmemory.read_u8(base +1)
if mainmemory.read_u8(base) > 0 then
hp = mainmemory.read_u8(base + 0xD)
x = endian(base + 0x19) - cx
xrad = mainmemory.read_u8(base + 0x13)
xoff = mainmemory.read_s8(base + 0x11)
yrad = mainmemory.read_u8(base + 0x17)
yoff = mainmemory.read_s8(base + 0x15)
if flip == 1 then
xoff = xoff * -1
end
y = endian(base + 0x1D) - cy
if hp > 0 then
gui.text((x-10) * xs,(y-10) * ys, "HP: " .. hp)
end
gui.drawBox(x+xoff-xrad,y+yoff-yrad,x+xoff+xrad,y+yoff+yrad,0xFFFF0000,0x35FF0000)
end
end
end
local function boss()
local cx = endian(camx)
local cy = endian(camy)
local x = endian(bbase + 0x19) - cx
local y = endian(bbase + 0x1D) - cy
local xrad = mainmemory.read_u8(bbase + 0x11)
local yrad = mainmemory.read_u8(bbase + 0x15)
local hp = mainmemory.read_u8(bbase+ 0x0D)
if hp > 0 then
gui.text((x-10) * xs,(y-10) * ys,"HP: " .. mainmemory.read_u8(bbase + 0x0D))
end
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFF0000,0x35FF0000)
end
local function projectiles()
local cx = endian(camx)
local cy = endian(camy)
local x
local y
local xoff
local xrad
local yoff
local yrad
local oend = 11
local base = projbase
local flip
for i = 0,oend,1 do
if i > 0 then
base = projbase + (i * 0x60)
end
flip = mainmemory.read_u8(base +1)
if mainmemory.read_u8(base) > 0 then
x = endian(base + 0x19) - cx
y = endian(base + 0x1D) - cy
xoff = mainmemory.read_s8(base + 0x11)
yoff = mainmemory.read_s8(base + 0x15)
xrad = mainmemory.read_u8(base + 0x13)
yrad = mainmemory.read_u8(base + 0x17)
if flip == 1 then
xoff = xoff * -1
end
gui.drawBox(x+xoff-xrad,y+yoff-yrad,x+xoff+xrad,y+yoff+yrad,0xFFFFFFFF,0x40FFFFFF)
end
end
end
local function scaler()
xs = client.screenwidth() / 320
ys = client.screenheight() / 224
end
while true do
scaler()
Toki()
enemies()
projectiles()
boss()
emu.frameadvance()
end