BizHawk/output/Lua/SNES/Super Metroid.lua

99 lines
2.4 KiB
Lua

--Author Pasky13
--Player
local px = 0x000AF6
local py = 0x000AFA
local plife = 0x0009C2
--Camera
local camx = 0x000911
local camy = 0x000915
--Text scaler
local xs
local ys
local function Samus()
local x = mainmemory.read_u16_le(px) - mainmemory.read_u16_le(camx)
local y = mainmemory.read_u16_le(py) - mainmemory.read_u16_le(camy)
local xrad = mainmemory.read_u8(0x7E0AFE)
local yrad = mainmemory.read_u8(0x7E0B00)
gui.drawBox(x + (xrad * -1), y + (yrad * -1), x+xrad,y+yrad,0xFF0000FF,0x350000FF)
end
local function EnemyBoxes()
local x = 0
local y = 0
local xrad = 0
local yrad = 0
local oend = 20
local base = 0xF7A
for i = 0, oend, 1 do
if i > 0 then
base = 0xF7A + (i * 0x40)
else
base = 0xF7A
end
x = mainmemory.read_u16_le(base) - mainmemory.read_u16_le(camx)
y = mainmemory.read_u16_le(base+ 4) - mainmemory.read_u16_le(camy)
xrad = mainmemory.read_u8(0x0F82 + (i * 0x40))
yrad = mainmemory.read_u8(0x0F84 + (i * 0x40))
hp = mainmemory.read_u16_le(base + 0x12)
gui.drawBox(x + (xrad * -1),y + (yrad * -1),x+xrad,y+yrad,0xFFFF0000,0x35FF0000)
gui.text((x-5) * xs,(y-5) * ys,"HP: " .. hp)
end
end
local function powerbomb()
local x = mainmemory.read_u16_le(0xCE2) - mainmemory.read_u16_le(camx)
local y = mainmemory.read_u16_le(0xCE4) - mainmemory.read_u16_le(camy)
local xrad
local yrad
xrad = bit.band(memory.readbyte(0xCEB),0xFF)
yrad = ((xrad / 2) + xrad) / 2
gui.drawBox(x + (xrad * -1), y + (yrad * -1),x+xrad,y+yrad,0xFF00FFFF,0x35F00FFF)
end
local function Projectiles()
local x
local y
local xrad
local yrad
local oend = 8
local projxbase = 0xB64
local projybase = 0xB78
local projxrbase = 0xBB4
local projyrbase = 0xBC8
for i = 0, oend, 1 do
x = mainmemory.read_u16_le(projxbase + (i*2)) - mainmemory.read_u16_le(camx)
y = mainmemory.read_u16_le(projybase + (i*2)) - mainmemory.read_u16_le(camy)
xrad = mainmemory.read_u8(projxrbase + (i * 2))
yrad = mainmemory.read_u8(projyrbase + (i * 2))
gui.drawBox(x + (xrad * -1), y + (yrad * -1), x+xrad,y+yrad,0xFFFFFFFF,0x35FFFFFF)
end
if bit.band(mainmemory.read_u16_le(0xCEB),0xFF) > 0 then
powerbomb()
end
end
local function scaler()
xs = client.screenwidth() / 256
ys = client.screenwidth() / 224
end
while true do
scaler()
Samus()
EnemyBoxes()
Projectiles()
emu.frameadvance()
end