diff --git a/BizHawk.MultiClient/output/Lua/NES/Holy Diver.lua b/BizHawk.MultiClient/output/Lua/NES/Holy Diver.lua new file mode 100644 index 0000000000..fec653c273 --- /dev/null +++ b/BizHawk.MultiClient/output/Lua/NES/Holy Diver.lua @@ -0,0 +1,168 @@ +-- Author Pasky13 + +local camx = 0x38F +local camy = 0x3CF + +local plife = 0x440 +local px = 0x370 +local py = 0x3A0 + +local ex = 0x370 +local ey = 0x3A0 + +--Configurable player box +local pxrad = 6 -- Only use multiples of 2 and no higher than 6 + +local function hex(val) + val = string.format("%X",val) + return val +end + +local function draw_axis(x,y,color) + gui.line(x,y-4,x,y+4,color) + gui.line(x-4,y,x+4,y,color) +end + +local function lookup(etype,i) -- this is really messy GIANT if else statement incoming + local box = {0,0,0,0} -- xoff,yoff,xrad,yrad + if etype == 0xF then + box = {0x06,0x18,0x0C,0x18} + elseif etype == 0x4A then + box = {0x1C,0x0C,0x38,0x18} + elseif etype == 0x1B then + box = {0x08,0x08,0x10,0x10} + elseif etype == 0x13 then + box = {0x08,0x10,0x10,0x20} + elseif etype == 0x3F then + box = {0x0C,0x38,0x18,0x38} + elseif etype == 0x40 then + box = {0x07,0x07,0x0E,0x0E} + elseif etype == 0x12 then + box = {0x04,0x04,0x08,0x08} + elseif etype == 0x36 then + box = {0x10,0x10,0x20,0x20} + elseif etype == 0x30 then + box = {0x0C,0x10,0x18,0x18} + elseif etype == 0x2C then + box = {0x04,0x08,0x08,0x08} + elseif etype == 0x2B then + box = {0x08,0x08,0x10,0x18} + elseif etype == 0x24 then + box = {0x08,0x08,0x10,0x10} + elseif etype == 0x25 then + box = {0x04,0x08,0x08,0x08} + elseif etype == 0x46 then + box = {0x18,0x20,0x28,0x20} + elseif etype == 0x1E then + box = {0x08,0x08,0x10,0x08} + elseif etype == 0x50 then + box = {0x10,0x00,0x40,0x60} + elseif etype == 0x51 then + box = {0x08,0x0A,0x10,0x0A} + elseif etype == 0x32 then + box = {0x08,0x10,0x10,0x10} + elseif etype == 0x33 then + box = {0x04,0x04,0x08,0x08} + elseif etype == 0x42 then + box = {0x04,0x04,0x08,0x08} + elseif etype == 0x26 then + box = {0x09,0x0D,0x15,0x15} + elseif etype == 0x27 then + box = {0x10,0x18,0x20,0x20} + elseif etype == 0x28 then + box = {0x04,0x04,0x08,0x08} + elseif etype == 0x53 then + box = {0x0C,0x20,0x18,0x28} + elseif etype == 0x54 then + box = {0x03,0x18,0x08,0x18} + elseif etype == 0x48 then + box = {0x0C,0x18,0x18,0x18} + elseif etype == 0x49 then + box = {0x08,0x08,0x08,0x08} + elseif etype == 0x4A then + box = {0x1C,0x0C,0x38,0x18} + elseif etype == 0x4B then + box = {0x05,0x04,0x08,0x08} + elseif etype == 0x3D then + box = {0x06,0x06,0x0C,0x0C} + elseif etype == 0x3E then + box = {0x06,0x06,0x0C,0x0C} + elseif etype == 0x38 then + box = {0x10,0x34,0x20,0x20} + elseif etype == 0x57 then + box = {0x00,0x00,0x48,0x60} + elseif etype == 0x4D then + box = {0x10,0x00,0x20,0x38} + elseif etype == 0x59 then + box = {0x0C,0x10,0x18,0x18} + elseif etype == 0x58 then + box = {0x08,0x08,0x10,0x10} + elseif etype == 0x5E then + box = {0x08,0x10,0x10,0x10} + elseif etype == 0x37 then + box = {0x10,0x28,0x24,0x50} + elseif etype == 0x5D then + box = {0x04,0x04,0x08,0x08} + elseif etype == 0x5C then + box = {0x08,0x08,0x10,0x10} + elseif etype == 0x5B then + box = {0x0C,0x00,0x18,0x10} + elseif etype == 0x4C then -- Mutating projectile + o = mainmemory.read_u8(0x470 + i) + dt = {0x08,0x0C,0x10,0x10,0x18,0x20} + box = {0x04,0x08,dt[1+o],dt[4+o]} + end + + return box +end + +local function player() + local pos = mainmemory.read_u8(0x300) + local cx = mainmemory.read_u8(camx) + (mainmemory.read_u8(camx + 0x10) * 256) + local cy = mainmemory.read_u8(camy) + (mainmemory.read_u8(camy + 0x10) * 256) + local x = mainmemory.read_u8(px) + (mainmemory.read_u8(px + 0x10) * 256) - cx + local y = mainmemory.read_u8(py) + (mainmemory.read_u8(py + 0x10) * 256) - cy + local pyrad = 0x1C + + if pos == 0x03 or pos == 0x06 then + pyrad = 0x13 + end + + gui.drawBox(x - (pxrad / 2), y, x + (pxrad / 2), y - pyrad,0xFF0000FF,0x350000FF) +end + +local function enemy() + local cx = mainmemory.read_u8(camx) + (mainmemory.read_u8(camx + 0x10) * 256) + local cy = mainmemory.read_u8(camy) + (mainmemory.read_u8(camy + 0x10) * 256) + local etype + local box = {0,0,0,0} + + for i = 6, 14, 1 do + etype = mainmemory.read_u8(0x300 + i) + local fill = 0x40FF0000 + local outl = 0xFFFF0000 + + if etype ~= 0xFF then + local x = mainmemory.read_u8(ex + i) + (mainmemory.read_u8(ex + i + 0x10) * 256) - cx + local y = mainmemory.read_u8(ey + i) + (mainmemory.read_u8(ey + i + 0x10) * 256) - cy + + box = lookup(etype,i) + + gui.drawBox(x - box[1],y-box[2],x-box[1]+box[3] - pxrad,y-box[2]+box[4],outl,fill) + + if etype == 0x3F then-- 1st boss + --Draw his vuln box + local fill = 0x40FFFF00 + local outl = 0xFFFFFF00 + box = {0x0C,0x38,0x18,0x18} + gui.drawBox(x - box[1],y-box[2],x-box[1]+box[3] - pxrad,y-box[2]+box[4],outl, fill) + end + end + end +end + +while true do + player() + enemy() + emu.frameadvance() +end \ No newline at end of file