211 lines
5.4 KiB
Lua
211 lines
5.4 KiB
Lua
--Bugs Bunny Birthday Blowout
|
|
--Written by XKeeper
|
|
--Creates Lag and Sprite counters as well as Camera position
|
|
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
|
|
function box(x1,y1,x2,y2,color)
|
|
if (x1 >= 0 and x1 <= 255 and x2 >= 0 and x2 <= 255 and y1 >= 0 and y1 <= 244 and y2 >= 0 and y2 <= 244) then
|
|
gui.drawbox(x1,y1,x2,y2,color);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
|
|
function filledbox(x1,y1,x2,y2,color)
|
|
for i = 0, math.abs(y1 - y2) do
|
|
line(x1,y1 + i,x2,y1 + i,color);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
|
|
function lifebar(x, y, sx, sy, a1, a2, oncolor, offcolor, noborder)
|
|
-- this function will have the effect of drawing an HP bar
|
|
-- keep in mind xs and ys are 2px larger to account for borders
|
|
|
|
x1 = x;
|
|
x2 = x + sx + 4;
|
|
y1 = y;
|
|
y2 = y + sy + 4;
|
|
w = math.floor(a1 / math.max(1, a1, a2) * sx);
|
|
if not a2 then w = 0 end;
|
|
|
|
if (noborder) then
|
|
box(x1 + 1, y1 + 1, x2 - 1, y2 - 1, "#000000");
|
|
else
|
|
box(x1 + 1, y1 + 1, x2 - 1, y2 - 1, "#ffffff");
|
|
box(x1 , y1 , x2 , y2 , "#000000");
|
|
end;
|
|
|
|
if (w < sx) then
|
|
filledbox(x1 + w + 2, y1 + 2, x2 - 2, y2 - 2, offcolor);
|
|
end;
|
|
|
|
if (w > 0) then
|
|
filledbox(x1 + 2, y1 + 2, x1 + 2 + w, y2 - 2, oncolor);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
-- ************************************************************************************
|
|
|
|
function line(x1,y1,x2,y2,color)
|
|
if (x1 >= 0 and x1 <= 255 and x2 >= 0 and x2 <= 255 and y1 >= 0 and y1 <= 244 and y2 >= 0 and y2 <= 244) then
|
|
local success = pcall(function() gui.drawline(x1,y1,x2,y2,color) end);
|
|
if not success then
|
|
text(60, 224, "ERROR: ".. x1 ..",".. y1 .." ".. x2 ..",".. y2);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function text(x,y,str)
|
|
if (x >= 0 and x <= 255 and y >= 0 and y <= 240) then
|
|
gui.text(x,y,str);
|
|
end;
|
|
end;
|
|
|
|
function pixel(x,y,color)
|
|
if (x >= 0 and x <= 255 and y >= 0 and y <= 240) then
|
|
gui.drawpixel(x,y,color);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
function drawpos(cx, cy, ex, ey, n)
|
|
sx = ex - cx;
|
|
sy = ey - cy;
|
|
|
|
num = "";
|
|
if n then
|
|
num = string.format("%02X", n);
|
|
end;
|
|
|
|
if sx >= 0 and sx <= 255 and sy >= 0 and sy <= 244 then
|
|
line(sx, sy, sx + 16, sy + 0, "#ff0000");
|
|
line(sx, sy, sx + 0, sy + 16, "#ff0000");
|
|
text(sx, sy, num);
|
|
|
|
elseif sx < 0 and sy >= 0 and sy <= 244 then
|
|
line(0, sy, 16, sy, "#ff0000");
|
|
text(4, sy, num);
|
|
|
|
elseif sx > 255 and sy >= 0 and sy <= 244 then
|
|
line(239, sy, 255, sy, "#ff0000");
|
|
text(243, sy, num);
|
|
|
|
elseif sy < 0 and sx >= 0 and sx <= 256 then
|
|
line(sx, 8, sx, 24, "#ff0000");
|
|
text(sx, 8, num);
|
|
|
|
elseif sy > 244 and sx >= 0 and sx <= 256 then
|
|
line(sx, 212, sx, 244, "#ff0000");
|
|
text(sx, 216, num);
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
lagdetectorold = 0;
|
|
timer = 0;
|
|
lagframes = 0;
|
|
lastlag = 0;
|
|
|
|
while (true) do
|
|
|
|
timer = timer + 1;
|
|
|
|
lagdetector = memory.readbyte(0x00f5);
|
|
-- if lagdetector == lagdetectorold then
|
|
if AND(lagdetector, 0x20) == 0x20 then
|
|
-- if lagdetector == 0x0C then
|
|
lagframes = lagframes + 1;
|
|
else
|
|
if lagframes ~= 0 then
|
|
lastlag = lagframes;
|
|
end;
|
|
lagframes = 0;
|
|
lagdetectorold = lagdetector;
|
|
end;
|
|
memory.writebyte(0x00f5, OR(lagdetector, 0x20));
|
|
|
|
playerx = memory.readbyte(0x0432) + memory.readbyte(0x0433) * 0x100;
|
|
playery = memory.readbyte(0x0435) + memory.readbyte(0x0436) * 0x100;
|
|
|
|
screenx = memory.readbyte(0x0456) + memory.readbyte(0x0457) * 0x100;
|
|
screeny = memory.readbyte(0x0458) + memory.readbyte(0x0459) * 0x100;
|
|
|
|
text( 8, 8, string.format("%04X, %04X", playerx, playery));
|
|
text( 8, 16, string.format("%04X, %04X", screenx, screeny));
|
|
|
|
drawpos(screenx, screeny, playerx, playery);
|
|
|
|
|
|
tmp = 0;
|
|
for i = 0, 0xb do
|
|
|
|
offset = 0x7680 + i * 0x20;
|
|
|
|
enemyt = memory.readbyte(offset);
|
|
enemyx = memory.readbyte(offset + 2) + memory.readbyte(offset + 3) * 0x100;
|
|
enemyy = memory.readbyte(offset + 4) + memory.readbyte(offset + 5) * 0x100;
|
|
|
|
if enemyt ~= 0xff then
|
|
-- text(160, 8 + 8 * tmp, string.format("%02X: %02X <%04X, %04X>", i, enemyt, enemyx, enemyy));
|
|
drawpos(screenx, screeny, enemyx, enemyy, i);
|
|
tmp = tmp + 1;
|
|
end
|
|
end;
|
|
|
|
|
|
text(142, 192, string.format("%02d lag frames", lastlag));
|
|
text(142, 216, string.format("%02d active sprites", tmp));
|
|
|
|
-- box(2, 208, 2 + 8 * lastlag, 210, "#ff4444");
|
|
-- box(2, 209, 2 + 8 * lastlag, 211, "#ff4444");
|
|
-- box(2, 212, 2 + 8 * tmp, 213, "#4444ff");
|
|
-- box(2, 214, 2 + 8 * tmp, 215, "#4444ff");
|
|
|
|
lifebar(144, 200, 100, 4, lastlag, 8, "#ffcc22", "#000000");
|
|
lifebar(144, 208, 100, 4, tmp, 12, "#4488ff", "#000000");
|
|
|
|
FCEU.frameadvance();
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|