143 lines
3.2 KiB
Lua
143 lines
3.2 KiB
Lua
![]() |
--Author Pasky13
|
||
|
|
||
|
local xbase = 0x330
|
||
|
local x_page = 0x348
|
||
|
local ybase = 0x378
|
||
|
local y_page = 0x390
|
||
|
|
||
|
local camx = 0xFC
|
||
|
local camx_page = 0xF9
|
||
|
local cx
|
||
|
|
||
|
-- Compensation for megaman's projectiles
|
||
|
local pcompx = 0
|
||
|
local pcompy = 0
|
||
|
|
||
|
-- Compensation for megaman's hitbox
|
||
|
local compx = 2
|
||
|
local compy = 2
|
||
|
|
||
|
local xm
|
||
|
local ym
|
||
|
|
||
|
memory.usememorydomain("PRG ROM")
|
||
|
|
||
|
local function camera()
|
||
|
cx = mainmemory.read_u8(camx) + (mainmemory.read_u8(camx_page) * 256)
|
||
|
end
|
||
|
|
||
|
local function hex(val)
|
||
|
val = string.format("%X",val)
|
||
|
return val
|
||
|
end
|
||
|
|
||
|
local function megaman()
|
||
|
local x = mainmemory.read_u8(xbase) + (mainmemory.read_u8(x_page) * 256) - cx
|
||
|
local y = mainmemory.read_u8(ybase)
|
||
|
local hp = bit.band(mainmemory.read_u8(0xB0),0x7F)
|
||
|
compx = 6
|
||
|
compy = 10
|
||
|
gui.drawBox(x+compx,y+compy,x-compx,y-compy,0xFF0000FF,0x400000FF)
|
||
|
gui.text(23 * xm,15 * ym,hp)
|
||
|
gui.drawLine(x,y+2,x,y-2)
|
||
|
gui.drawLine(x+2,y,x-2,y)
|
||
|
end
|
||
|
|
||
|
local function megaman_projectiles()
|
||
|
local x
|
||
|
local y
|
||
|
local xrad
|
||
|
local yrad
|
||
|
local offset
|
||
|
local active
|
||
|
|
||
|
for i = 1,3,1 do
|
||
|
active = mainmemory.read_u8(0x300 + i)
|
||
|
|
||
|
if active > 0 then
|
||
|
offset = mainmemory.read_u8(0x408 + i) * 2
|
||
|
x = mainmemory.read_u8(xbase + i) + (mainmemory.read_s8(x_page + i) * 256) - cx
|
||
|
y = mainmemory.read_u8(ybase + i)
|
||
|
xrad = memory.read_u8(0x7FACF + offset)
|
||
|
yrad = memory.read_u8(0x7FACE + offset)
|
||
|
|
||
|
|
||
|
-- Compensate the boxes if xrad/yrad is 0 or 1
|
||
|
if xrad <= 1 then
|
||
|
pcompx = 2 - xrad
|
||
|
else
|
||
|
pcompx = 0
|
||
|
end
|
||
|
|
||
|
if yrad <= 1 then
|
||
|
pcompy = 2 - yrad
|
||
|
else
|
||
|
pcompy = 0
|
||
|
end
|
||
|
|
||
|
gui.drawBox(x+xrad + pcompx,y+yrad + pcompy,x-xrad - pcompx,y-yrad - pcompy,0xFFFFFFFF,0x40FFFFFF)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function objects()
|
||
|
local x
|
||
|
local y
|
||
|
local xrad
|
||
|
local yrad
|
||
|
local hp
|
||
|
local offset
|
||
|
local active
|
||
|
local otype
|
||
|
|
||
|
for i = 4,0x17,1 do
|
||
|
active = mainmemory.read_u8(0x300 + i)
|
||
|
otype = mainmemory.read_s8(0x408 + i)
|
||
|
|
||
|
if active > 0 then
|
||
|
x = mainmemory.read_u8(xbase + i) + (mainmemory.read_s8(x_page + i) * 256) - cx
|
||
|
y = mainmemory.read_u8(ybase + i) + (mainmemory.read_s8(y_page + i ) * 256)
|
||
|
|
||
|
if otype < 0 then -- if it's an enemy/projectile
|
||
|
offset = bit.band(mainmemory.read_u8(0x408 + i),0x3F)
|
||
|
xrad = memory.read_u8(0x7F9F4 + offset)
|
||
|
|
||
|
if mainmemory.read_u8(0x558) == 0x10 then -- megaman is sliding
|
||
|
yrad = memory.read_u8(0x7F9B4 + offset) - 0x10
|
||
|
else
|
||
|
yrad = memory.read_u8(0x7F9B4 + offset)
|
||
|
end
|
||
|
|
||
|
hp = mainmemory.read_u8(0x450 + i)
|
||
|
|
||
|
-- Calculate compensation for megaman
|
||
|
xrad = xrad - compx
|
||
|
yrad = yrad - compx
|
||
|
|
||
|
gui.text(x * xm,y * ym,"HP:" .. hp)
|
||
|
--gui.text(x,y,hp)
|
||
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFF0000,0x90FF0000)
|
||
|
|
||
|
-- Projectile vuln box
|
||
|
yrad = memory.read_u8(0x7FADC + offset) - pcompx
|
||
|
xrad = memory.read_u8(0x7FB1C + offset) - pcompy
|
||
|
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFF00FF00,0x5000FF00)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function scaler()
|
||
|
xm = client.screenwidth() / 256
|
||
|
ym = client.screenheight() / 224
|
||
|
end
|
||
|
|
||
|
while true do
|
||
|
scaler()
|
||
|
camera()
|
||
|
megaman()
|
||
|
megaman_projectiles()
|
||
|
objects()
|
||
|
emu.frameadvance()
|
||
|
end
|