Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local pbase = 0xC00
- local ppbase = 0xCC0
- local ebase = 0x19C0
- local epbase = 0xEC0
- local xm
- local ym
- memory.usememorydomain("CARTROM")
- 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
- local function camera()
- cx = mainmemory.read_u16_le(0xD9)
- cy = mainmemory.read_u16_le(0xDB)
- end
- local function drawbox(p,x,y,base,player,fill,outl)
- local box = {0,0,0,0} --xoff/yoff/xrad/yrad
- box[1] = memory.read_s8(p)
- box[2] = memory.read_s8(p + 1)
- box[3] = memory.read_u8(p + 2)
- box[4] = memory.read_u8(p + 3)
- if player == false then
- if hasbit(mainmemory.read_u8(base+0x14),findbit(7)) then -- megaman facing right
- box[1] = box[1] * - 1
- end
- else
- if hasbit(mainmemory.read_u8(base+0x4A),findbit(3)) then -- enemy facing left
- box[1] = box[1] * - 1
- end
- end
- gui.drawBox(x+box[1]+box[3],y+box[2]+box[4],x+box[1]-box[3],y+box[2]-box[4],outl, fill)
- return box
- end
- local function proj_vuln(base,x,y,xoff,yoff,xrad,yrad)
- local offset = memory.read_u8(0x87D0 +(mainmemory.read_u8(base + 0x31) * 2))
- local property = memory.read_s8(0x87D0 + offset)
- if property <= 0 then
- gui.drawLine(x + xoff + xrad,y + yoff,x + xoff - xrad, y + yoff,0xFFFFFFFF)
- gui.drawLine(x + xoff,y + yoff + yrad, x + xoff,y + yoff - yrad,0xFFFFFFFF)
- end
- --gui.text(x-40,y-20,hex(offset) .. " " .. hex(base))
- end
- local function player()
- local x = mainmemory.read_u16_le(pbase + 5) - cx
- local y = mainmemory.read_u16_le(pbase + 8) - cy
- local pointer = mainmemory.read_u16_le(pbase + 0x24)
- local hp = mainmemory.read_s8(pbase + 0x2F)
- drawbox(pointer,x,y,pbase,true,0x400000FF,0xFF0000FF)
- gui.text((x-4) * xm,y * ym,"HP:" .. hp)
- end
- local function player_projectiles()
- local x
- local y
- local base
- local pointer
- local active
- local anim
- for i = 0,7,1 do
- base = ppbase + (i * 0x40)
- active = mainmemory.read_u8(base)
- anim = mainmemory.read_u8(base + 1)
- if active ~= 0 and anim > 1 then
- x = mainmemory.read_u16_le(base + 5) - cx
- y = mainmemory.read_u16_le(base + 8) - cy
- pointer = mainmemory.read_u16_le(base + 0x24)
- drawbox(pointer,x,y,base,false,0x40FFFFFF,0xFFFFFFFF)
- end
- end
- end
- local function enemy_projectiles()
- local x
- local y
- local base
- local pointer
- local active
- local anim
- for i = 0,7,1 do
- base = epbase + (i * 0x40)
- active = mainmemory.read_u8(base)
- anim = mainmemory.read_u8(base + 1)
- if active ~= 0 and anim > 1 then
- x = mainmemory.read_u16_le(base + 5) - cx
- y = mainmemory.read_u16_le(base + 8) - cy
- pointer = mainmemory.read_u16_le(base + 0x24)
- drawbox(pointer,x,y,base,false,0x4000FF00,0xFF00FF00)
- end
- end
- end
- local function objects()
- local x
- local y
- local hp
- local base
- local pointer
- local active
- local anim
- local box
- for i = 0,15,1 do
- base = ebase + (i * 0x40)
- active = mainmemory.read_u8(base)
- anim = mainmemory.read_u8(base + 1)
- if active ~= 0 and anim > 1 then
- x = mainmemory.read_u16_le(base + 5) - cx
- y = mainmemory.read_u16_le(base + 8) - cy
- pointer = mainmemory.read_u16_le(base + 0x24)
- hp = mainmemory.read_s8(base + 0x2F)
- if hp > 0 then
- gui.text((x-8) * xm,(y-8) * ym,"HP: " .. hp)
- end
- box = drawbox(pointer,x,y,base,false,0x40FF0000,0xFFFF0000)
- proj_vuln(base,x,y,box[1],box[2],box[3],box[4])
- end
- end
- end
- local function scaler()
- xm = client.screenwidth() / 256
- ym = client.screenheight() / 224
- end
- while true do
- scaler()
- camera()
- enemy_projectiles()
- player_projectiles()
- objects()
- player()
- emu.frameadvance()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement