BizHawk/output/Lua/SNES/Donkey Kong Country 3.lua

101 lines
2.3 KiB
Lua

--Author pasky13
local cx
local cy
local data = 0x3C0000
local function camera()
cx = mainmemory.read_u16_le(0x493)
cy = mainmemory.read_u16_le(0x497)
end
function findbit(p)
return 2 ^ (p - 1)
end
function hasbit(x, p)
return x % (p + p) >= p
end
local function hex(val)
val = string.format("%X",val)
return val
end
memory.usememorydomain("CARTROM")
local function player()
local pbase = 0x878
for i = 0,1,1 do
pbase = pbase + (i * 0x6E)
if mainmemory.read_u8(pbase + 0x24) > 0 then
local point = memory.read_u16_le(mainmemory.read_u16_le(pbase + 0x24) + 0x3C8003)
local properties = mainmemory.read_u16_le(pbase + 0x1E)
local x = mainmemory.read_u16_le(pbase + 0x12) - cx
local y = mainmemory.read_u16_le(pbase + 0x16) - cy
local xoff = memory.read_s8(point + data)
local yoff = memory.read_s8(point + 2 + data)
local xrad = memory.read_u8(point + 4 + data)
local yrad = memory.read_u8(point + 6 + data)
if hasbit(properties,findbit(15)) then -- If facing right
xoff = xoff * -1
xrad = xrad * -1
elseif hasbit(properties,findbit(16)) then -- Upside down?
yoff = yoff * -1
yrad = yrad * -1
end
gui.drawBox(x+xoff,y+yoff,x+xoff+xrad,y+yoff+yrad,0xFF0000FF,0x400000FF)
end
end
end
local function enemy()
local start = 0x954
local base
local x
local y
local xoff
local yoff
local xrad
local yrad
local properties
local point
local active
for i = 0,15,1 do
base = start + (i * 0x6E)
active = mainmemory.read_u8(base + 0x30)
properties = mainmemory.read_u16_le(base + 0x1E)
if mainmemory.read_u8(base + 0x24) > 0 then
point = memory.read_u16_le(mainmemory.read_u16_le(base + 0x24) + 0x3C8003)
properties = mainmemory.read_u16_le(base + 0x1E)
x = mainmemory.read_u16_le(base + 0x12) - cx
y = mainmemory.read_u16_le(base + 0x16) - cy
xoff = memory.read_s8(point + data)
yoff = memory.read_s8(point + 2 + data)
xrad = memory.read_u8(point + 4 + data)
yrad = memory.read_u8(point + 6 + data)
if hasbit(properties,findbit(15)) then -- If facing right
xoff = xoff * -1
xrad = xrad * -1
elseif hasbit(properties,findbit(16)) then -- Upside down?
yoff = yoff * -1
yrad = yrad * -1
end
gui.drawBox(x+xoff,y+yoff,x+xoff+xrad,y+yoff+yrad,0xFFFF0000,0x40FF0000)
end
end
end
while true do
camera()
player()
enemy()
emu.frameadvance()
end