BizHawk/Assets/Lua/NES/Contra force.lua

128 lines
3.2 KiB
Lua

----------TOGGLES----------
DISPLAY_ENEMY_HP = true
--------END TOGGLES--------
xbase = 0x64E
ybase = 0x668
abase = 0x682
hpbase = 0x796
offscreen = 0x600
xm = 0
ym = 0
--P1X
-- animation 0x61A
local proj_fill = 0xFF00FF00
local proj_outl = 0x3000FF00
local enemy_fill = 0xFFFF0000
local enemy_outl = 0x30FF0000
local player_fill = 0xFF0000FF
local player_outl = 0x300000FF
local pproj_fill = 0xFFFFFFFF
local pproj_oult = 0x30FFFFFF
memory.usememorydomain("System Bus")
local function hex(val)
val = string.format("%X",val)
return val
end
local function player()
local active = mainmemory.read_u8(abase)
if active > 0 then
local offset = bit.band(mainmemory.read_u8(0x720),0x3F) * 2
local xrad = memory.read_u8(0xF94A + offset)
local yrad = memory.read_u8(0xF94B + offset)
local hp = mainmemory.read_u8(hpbase)
local x = mainmemory.read_u8(xbase)
local y = mainmemory.read_u8(ybase)
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, player_fill, player_outl)
end
end
local function player_proj()
for i = 10,11,1 do
local active = mainmemory.read_u8(abase + i)
local oscr = bit.band(mainmemory.read_u8(offscreen + i),0xF0)
if oscr == 0x20 then
oscr = -255
elseif oscr == 0x10 then
oscr = 255
end
if active > 0 then
local offset = bit.band(mainmemory.read_u8(0x720 + i),0x3F) * 2
local xrad = memory.read_u8(0xF94A + offset)
local yrad = memory.read_u8(0xF94B + offset)
local x = mainmemory.read_u8(xbase + i) + oscr
local y = mainmemory.read_u8(ybase + i)
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, pproj_fill, pproj_outl)
end
end
end
local function enemy()
for i = 2,8,1 do
local active = mainmemory.read_u8(abase + i)
local oscr = bit.band(mainmemory.read_u8(offscreen + i),0xF0)
if oscr == 0x20 then
oscr = -255
elseif oscr == 0x10 then
oscr = 255
end
if active > 0 then
local offset = bit.band(mainmemory.read_u8(0x720 + i),0x3F) * 2
local xrad = memory.read_u8(0xF94A + offset)
local yrad = memory.read_u8(0xF94B + offset)
local hp = mainmemory.read_u8(hpbase + i)
local x = mainmemory.read_u8(xbase + i) + oscr
local y = mainmemory.read_u8(ybase + i)
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, enemy_fill, enemy_outl)
if DISPLAY_ENEMY_HP == true then
gui.text(x * xm,y * ym,hp)
end
end
end
end
local function e_proj()
local pbase = 0x720
for i = 18,22,1 do
local active = mainmemory.read_u8(abase + i)
local oscr = bit.band(mainmemory.read_u8(offscreen + i),0xF0)
if oscr == 0x20 then
oscr = -255
elseif oscr == 0x10 then
oscr = 255
end
if active > 0 then
local offset = bit.band(mainmemory.read_u8(0x720 + i),0x3F) * 2
local xrad = memory.read_u8(0xF94A + offset)
local yrad = memory.read_u8(0xF94B + offset)
local x = mainmemory.read_u8(xbase + i) + oscr
local y = mainmemory.read_u8(ybase + i)
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, proj_fill, proj_outl)
end
end
end
local function scaler()
xm = client.screenwidth() / 256
ym = client.screenheight() / 224
end
while true do
scaler()
player()
enemy()
e_proj()
player_proj()
emu.frameadvance()
end