72 lines
1.8 KiB
Lua
72 lines
1.8 KiB
Lua
-- Zapper Fun
|
|
-- quick and dirty script that shows zapper position and fire button presses in FCEUX
|
|
-- Written by miau
|
|
-- http://morphcat.de/lua/
|
|
|
|
local Z_LSPAN = 20 --life span (in frames) of white box
|
|
local Z_LSPAN_CLICK = 30 --life span of red box
|
|
local Z_MAX = 60 --maximum amount of boxes on screen
|
|
|
|
local zbuf = {}
|
|
local zindex = 1
|
|
local timer = 0
|
|
local lastclick = zapper.read().fire
|
|
local lastx = zapper.read().x
|
|
local lasty = zapper.read().y
|
|
|
|
function zapper_addcoord(x,y,click)
|
|
zbuf[zindex] = {t=timer,x=x,y=y,click=click}
|
|
zindex = zindex + 1
|
|
if(zindex>Z_MAX) then
|
|
zindex = 1
|
|
end
|
|
end
|
|
|
|
function box(x1,y1,x2,y2,color1,color2)
|
|
if(x1>=0 and y1>=0 and x2<=255 and y2<=255) then
|
|
gui.drawbox(x1, y1, x2, y2, color1, color2)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
while(true) do
|
|
local x = zapper.read().x
|
|
local y = zapper.read().y
|
|
local click = zapper.read().fire
|
|
--gui.text(0, 8, string.format("x=%d",x));
|
|
--gui.text(0, 18, string.format("y=%d",y));
|
|
--gui.text(0, 28, string.format("click=%d",click));
|
|
if(click==1 and click~=lastclick) then
|
|
zapper_addcoord(x,y,1)
|
|
elseif(x~=lastx or y~=lasty) then
|
|
zapper_addcoord(x,y,0)
|
|
end
|
|
lastclick=click
|
|
lastx=x
|
|
lasty=y
|
|
box(x-3, y-3, x+3, y+3, "white", 0)
|
|
|
|
for i=1,Z_MAX do
|
|
if(zbuf[i]) then
|
|
ltime = timer-zbuf[i].t
|
|
if(zbuf[i].click==0) then
|
|
if(ltime<Z_LSPAN) then
|
|
boxsize = (zbuf[i].t-timer+Z_LSPAN) / (Z_LSPAN/3)
|
|
c = "white"
|
|
box(zbuf[i].x-boxsize, zbuf[i].y-boxsize, zbuf[i].x+boxsize, zbuf[i].y+boxsize, c, 0)
|
|
end
|
|
elseif(zbuf[i].click==1) then
|
|
if(ltime<Z_LSPAN_CLICK) then
|
|
boxsize = (timer-zbuf[i].t) / (Z_LSPAN_CLICK/10)
|
|
c = "red"
|
|
box(zbuf[i].x-boxsize, zbuf[i].y-boxsize, zbuf[i].x+boxsize, zbuf[i].y+boxsize, c, 0)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
FCEU.frameadvance()
|
|
timer = timer + 1
|
|
end
|
|
|