From 32832f139beaa050e93a430e29c070065da5caf1 Mon Sep 17 00:00:00 2001 From: pasky1382 Date: Sun, 30 Sep 2012 15:13:48 +0000 Subject: [PATCH] Super C Collision viewer. --- .../output/Lua/NES/Super C.lua | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 BizHawk.MultiClient/output/Lua/NES/Super C.lua diff --git a/BizHawk.MultiClient/output/Lua/NES/Super C.lua b/BizHawk.MultiClient/output/Lua/NES/Super C.lua new file mode 100644 index 0000000000..e7b6cd24c5 --- /dev/null +++ b/BizHawk.MultiClient/output/Lua/NES/Super C.lua @@ -0,0 +1,143 @@ +-- Author Pasky13 + +--Player +local px = 0x54C +local py = 0x532 + +--Player projectiles +local projxbase = 0x588 +local projybase = 0x578 + +--Enemies +local etype = 0xC6 +local ex = 0x53C +local ey = 0x522 + +local xm +local ym + +local function draw_axis(x,y,color) + gui.drawLine(x,y-4,x,y+4,color) + gui.drawLine(x-4,y,x+4,y,color) +end + +local function sign(val) + if val > 0x7F then + val = 256 + (val * -1) + end + return val +end + +memory.usememorydomain("PRG ROM") + +local function player() + -- Player 1 + if mainmemory.read_u8(0xC6) ~= 0 then + local x = mainmemory.read_u8(px) + local y = mainmemory.read_u8(py) + draw_axis(x,y,0xFF0000FF) + end + -- Player 2 + if mainmemory.read_u8(0xC7) ~= 0 then + x = mainmemory.read_u8(px+1) + y = mainmemory.read_u8(py+1) + draw_axis(x,y,0xFF0000FF) + end +end + +local function bullets() + -- P1 + if mainmemory.read_u8(0xC6) ~= 0 then + for i = 0,4,1 do + local x = mainmemory.read_u8(projxbase + i) + local y = mainmemory.read_u8(projybase + i) + + if mainmemory.read_u8(0x638 + i) > 0 then + gui.drawBox(x-2,y-2,x+2,y+2,0xFFFFFFFF,0x40FFFFFF) + end + end + end + + -- P2 + if mainmemory.read_u8(0xC7) ~= 0 then + for i = 0,9,1 do + local x = mainmemory.read_u8(0x592 + i) + local y = mainmemory.read_u8(0x582 + i) + + if mainmemory.read_u8(0x642 + i) > 0 then + gui.drawBox(x-2,y-2,x+2,y+2,0xFFFFFFFF,0x40FFFFFF) + end + end + end +end + + +local function enemies() + local active + local etype + local fill + local outl + for i = 0,0x0D,1 do + active = mainmemory.read_u8(0x508+i) -- sprite frame + etype = mainmemory.read_u8(0x73A + i) + if etype == 4 or etype == 0x0C then + fill = 0xFF00FF00 + outl = 0x3500FF00 + else + fill = 0xFFFF0000 + outl = 0x35FF0000 + end + + local x = mainmemory.read_u8(ex + i) + local y = mainmemory.read_u8(ey + i) + + -- Player 1 collision detection + if mainmemory.read_u8(0xC6) ~= 0 then + if active > 0 then + local offset = ((mainmemory.read_u8(0xC6) + etype + 1) % 0x100) + local xoff = sign(memory.read_u8(0x6000 + offset + 1)) + 1 + local xrad = memory.read_u8(0x6000 + offset + 3) + local yoff = sign(memory.read_u8(0x6000 + offset)) + 1 + local yrad = memory.read_u8(0x6000 + offset + 2) + gui.drawBox(x-xoff,y-yoff,x-xoff+xrad,y-yoff+yrad,fill,outl) + + end + end + + -- Player 2 collision detection + if mainmemory.read_u8(0xC7) ~= 0 then + if active > 0 then + local offset = ((mainmemory.read_u8(0xC7) + etype + 1) % 0x100) + local xoff = sign(memory.read_u8(0x6000 + offset + 1)) + 1 + local xrad = memory.read_u8(0x6000 + offset + 3) + local yoff = sign(memory.read_u8(0x6000 + offset)) + 1 + local yrad = memory.read_u8(0x6000 + offset + 2) + gui.drawBox(x-xoff,y-yoff,x-xoff+xrad,y-yoff+yrad,fill,outl) + end + end + + -- Projectile collision + if active > 0 and etype ~= 4 and etype ~= 0x0C then + local poffset = etype + 0xA0 + local pxoff = sign(memory.read_u8(0x6000 + poffset + 1)) + 1 + local pxrad = memory.read_u8(0x6000 + poffset + 3) - 2 + local pyoff = sign(memory.read_u8(0x6000 + poffset)) + 1 + local pyrad = memory.read_u8(0x6000 + poffset + 2) - 2 + gui.drawBox(x-pxoff,y-pyoff,x-pxoff+pxrad,y-pyoff+pyrad,0xFFFFFF00,0x40FFFF00) + end + + end +end + +local function scaler() + xm = client.screenwidth() / 256 + ym = client.screenheight() / 224 +end + +while true do + scaler() + player() + bullets() + enemies() + emu.frameadvance() +end \ No newline at end of file