mirror of
https://github.com/LDDestroier/CC/
synced 2024-12-11 18:50:29 +00:00
Add files via upload
This commit is contained in:
parent
cb1acd96a9
commit
9cd8f7da4b
213
dodge.lua
Normal file
213
dodge.lua
Normal file
@ -0,0 +1,213 @@
|
||||
--[[
|
||||
Wall Dodge! What a riveting game!
|
||||
Dodge the walls before they kill you.
|
||||
|
||||
Download with:
|
||||
pastebin get fDTts7wz dodge
|
||||
std PB fDTts7wz dodge
|
||||
std ld dodge dodge
|
||||
--]]
|
||||
|
||||
local scr_x, scr_y = term.getSize()
|
||||
local keysDown = {} --holds all pressed keys. It's way better than using "key" event for movement
|
||||
local walls = {} --holds all screen data for walls. I could do slants if I wanted, not just walls
|
||||
local frame = 0 --for every screen update-oh, you know what a frame is
|
||||
local maxFrame = 26 --max frames until new wall
|
||||
local fframe = 0 --not a typo. is the buffer of spaces until the spaces between walls shrinks
|
||||
local maxFFrame = 6 --max fframes until the space between walls gets slightly tighter (down to 5, good luck m8)
|
||||
local pause = false --pausing is a nice thing
|
||||
local tsv = term.current().setVisible --it is my belief that monitors and normal computers do not have the setVisible method for term.current()
|
||||
for a = 1, scr_x do
|
||||
table.insert(walls,{top=1,bottom=scr_y,color=colors.black})
|
||||
end
|
||||
|
||||
local score = 0 --increases for every wall.
|
||||
local time = 0 --in seconds, increases in increments of 0.1
|
||||
|
||||
local addNewWall = function(top,bottom,color)
|
||||
table.remove(walls,1)
|
||||
table.insert(walls,{top=top,bottom=bottom,color=color})
|
||||
end
|
||||
|
||||
local guyX = 2
|
||||
local guyY = math.floor(scr_y/2)
|
||||
|
||||
local maxY = scr_y-1
|
||||
local minY = 2
|
||||
|
||||
local clearLines = function(y1,y2)
|
||||
local _x,_y = term.getCursorPos()
|
||||
for a = y1, y2 or y1 do
|
||||
term.setCursorPos(1,a)
|
||||
term.clearLine()
|
||||
end
|
||||
term.setCursorPos(_x,_y)
|
||||
end
|
||||
|
||||
local renderTEXT = function(_txt)
|
||||
local txt = _txt or "YOU ARE DEAD"
|
||||
local midY = math.floor(scr_y/2)
|
||||
for a = 0, 2 do
|
||||
term.setBackgroundColor(colors.gray)
|
||||
clearLines(midY-a,midY+a)
|
||||
sleep(0.1)
|
||||
end
|
||||
term.setCursorPos(4,midY)
|
||||
term.write(txt)
|
||||
end
|
||||
|
||||
local trymove = function(dir)
|
||||
if (guyY+dir)>=minY and (guyY+dir)<=maxY then
|
||||
guyY = guyY + dir
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local render = function()
|
||||
if tsv then tsv(false) end
|
||||
term.setBackgroundColor(colors.white)
|
||||
term.setTextColor(colors.white)
|
||||
term.clear()
|
||||
term.setCursorPos(guyX,guyY)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.write(" ")
|
||||
term.setCursorPos(1,1)
|
||||
term.clearLine()
|
||||
term.setCursorPos(1,scr_y)
|
||||
term.clearLine()
|
||||
for x = 1, #walls do
|
||||
term.setBackgroundColor(walls[x].color)
|
||||
for y = 1, walls[x].top do
|
||||
term.setCursorPos(x,y)
|
||||
term.write(" ")
|
||||
end
|
||||
for y = walls[x].bottom, scr_y do
|
||||
term.setCursorPos(x,y)
|
||||
term.write(" ")
|
||||
end
|
||||
end
|
||||
term.setCursorPos(2,1)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.write("SCORE: "..score.." | TIME: "..time)
|
||||
if tsv then tsv(true) end
|
||||
end
|
||||
|
||||
local keepTime = function()
|
||||
time = 0
|
||||
while true do
|
||||
sleep(0.1)
|
||||
if not pause then
|
||||
time = time + 0.1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local doGame = function()
|
||||
local wf = 0
|
||||
local gap = 2
|
||||
local ypos, randomcol
|
||||
while true do
|
||||
if not pause then
|
||||
if frame >= maxFrame or wf > 0 then
|
||||
if frame >= maxFrame then
|
||||
frame = 0
|
||||
fframe = fframe + 1
|
||||
ypos = math.random(4,scr_y-3)
|
||||
wf = 3
|
||||
randomcol = 2^math.random(1,14)
|
||||
end
|
||||
if wf > 0 then
|
||||
wf = wf - 1
|
||||
end
|
||||
if not term.isColor() then
|
||||
randomcol = colors.black --Shame.
|
||||
end
|
||||
addNewWall(ypos-gap,ypos+gap,randomcol)
|
||||
else
|
||||
frame = frame + 1
|
||||
addNewWall(1,scr_y,colors.black)
|
||||
end
|
||||
if fframe >= maxFFrame then
|
||||
fframe = 0
|
||||
if maxFrame > 7 then
|
||||
maxFrame = maxFrame - 1
|
||||
end
|
||||
end
|
||||
if keysDown[keys.up] then
|
||||
trymove(-1)
|
||||
end
|
||||
if keysDown[keys.down] then
|
||||
trymove(1)
|
||||
end
|
||||
if walls[guyX-1].top > 1 or walls[guyX-1].bottom < scr_y then
|
||||
if walls[guyX].top < walls[guyX-1].top or walls[guyX].bottom > walls[guyX-1].bottom then
|
||||
score = score + 1
|
||||
end
|
||||
end
|
||||
render()
|
||||
end
|
||||
sleep(0)
|
||||
if guyY<=walls[guyX].top or guyY>=walls[guyX].bottom then
|
||||
return "dead"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local getInput = function()
|
||||
while true do
|
||||
local evt = {os.pullEvent()}
|
||||
if evt[1] == "key" then
|
||||
if evt[2] == keys.q then
|
||||
return "quit"
|
||||
end
|
||||
if evt[2] == keys.p then
|
||||
pause = not pause
|
||||
if pause then
|
||||
local pauseMSGs = {
|
||||
"PAUSED",
|
||||
"Paused. Press 'P' to resume",
|
||||
"The game is paused",
|
||||
"GAME PAUSE !",
|
||||
"What, gotta catch your breath??",
|
||||
"Paused, the game is, hmmm?",
|
||||
"PAUSED GAME",
|
||||
"GAME PAUSED",
|
||||
"THE GAME IS PAUSED",
|
||||
"THE PAUSED IS GAME",
|
||||
"Buh-buh-buh-BEEP",
|
||||
"UNPAUSE WITH 'P'",
|
||||
"Tip: press UP to go up",
|
||||
"Tip: press DOWN to go down",
|
||||
"Tip: read Narbonic comic, you tool",
|
||||
"Tip: read Skin Horse comic, you twat",
|
||||
"YOU HAVE NO CHANCE TO SURVIVE MAKE YOUR TIME",
|
||||
"-PAUSED-",
|
||||
"=PAUSED=",
|
||||
"PAISED",
|
||||
"THOUST GAME BE PAUSETH",
|
||||
"Yon game is paused. Obvious exits are 'Q', 'CTRL+T'",
|
||||
"Tip: don't hit the walls",
|
||||
"Tip: press 'P' to pause the game",
|
||||
}
|
||||
renderTEXT(pauseMSGs[math.random(1,#pauseMSGs)])
|
||||
keysDown[keys.up] = false
|
||||
keysDown[keys.down] = false
|
||||
end
|
||||
end
|
||||
keysDown[evt[2]] = true
|
||||
end
|
||||
if evt[1] == "key_up" then
|
||||
keysDown[evt[2]] = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local uut = parallel.waitForAny(getInput,doGame,keepTime)
|
||||
if uut == 2 then
|
||||
renderTEXT()
|
||||
end
|
||||
sleep(0.05)
|
||||
term.setCursorPos(1,scr_y)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clearLine()
|
207
drawtoy.lua
Normal file
207
drawtoy.lua
Normal file
@ -0,0 +1,207 @@
|
||||
--[[
|
||||
pastebin get tfyqv2ww toy
|
||||
std pb tfyqv2ww toy
|
||||
--]]
|
||||
|
||||
local channel = 180
|
||||
local modem
|
||||
local scr_x, scr_y = term.getSize()
|
||||
local valchar = "#" --character used for fading
|
||||
local hedchar = "@" --character used for tip of line
|
||||
local s = { --default color combinations
|
||||
[1] = { --A classical black-and-white color fade, perfect for looking classy and pretentious.
|
||||
colors.black,
|
||||
colors.gray,
|
||||
colors.lightGray,
|
||||
colors.white,
|
||||
},
|
||||
[2] = { --If you're feeling blue, then this randomly selected set of four colors should make you feel even worse!
|
||||
colors.black,
|
||||
colors.blue,
|
||||
colors.cyan,
|
||||
colors.lightBlue,
|
||||
},
|
||||
[3] = { --This one's purple. Tha-that's it. Like purple? Good.
|
||||
colors.black,
|
||||
colors.red,
|
||||
colors.magenta,
|
||||
colors.pink,
|
||||
},
|
||||
[4] = { --I'll admit, the creativity is lacking in this color. I mean, what was I thinking?
|
||||
colors.black,
|
||||
colors.gray,
|
||||
colors.green,
|
||||
colors.lime,
|
||||
},
|
||||
[5] = { --NOBODY CALLS ME YELLOW
|
||||
colors.black,
|
||||
colors.brown,
|
||||
colors.orange,
|
||||
colors.yellow,
|
||||
},
|
||||
}
|
||||
local p = math.random(1,#s)
|
||||
local g = function(num,sa) --This interprets the color palate and turns it into a fadey thing.
|
||||
if not sa then sa = s[p] end
|
||||
local values = {
|
||||
[1] = {bg=sa[1], txt=sa[1], char=valchar},
|
||||
[2] = {bg=sa[1], txt=sa[2], char=valchar},
|
||||
[3] = {bg=sa[2], txt=sa[1], char=valchar},
|
||||
[4] = {bg=sa[2], txt=sa[2], char=valchar},
|
||||
[5] = {bg=sa[3], txt=sa[2], char=valchar},
|
||||
[6] = {bg=sa[3], txt=sa[3], char=valchar},
|
||||
[7] = {bg=sa[3], txt=sa[4], char=valchar},
|
||||
[8] = {bg=sa[4], txt=sa[3], char=valchar},
|
||||
[9] = {bg=sa[4], txt=sa[4], char=hedchar},
|
||||
}
|
||||
if not num then return #values end
|
||||
return values[num]
|
||||
end
|
||||
local size = g()
|
||||
local grid = {}
|
||||
local ah = {}
|
||||
for b = 1, scr_x do
|
||||
ah[b] = {v = 0, r = s[p]}
|
||||
end
|
||||
for b = 1, scr_y do
|
||||
grid[b] = ah
|
||||
end
|
||||
|
||||
local between = function(num,min,max)
|
||||
return (num > min and num or min) < max and num or max
|
||||
end
|
||||
|
||||
local getDotsInLine = function( startX, startY, endX, endY ) --graciously stolen from the paintutils, and PAIN
|
||||
local out = {}
|
||||
startX = math.floor(startX)
|
||||
startY = math.floor(startY)
|
||||
endX = math.floor(endX)
|
||||
endY = math.floor(endY)
|
||||
if startX == endX and startY == endY then
|
||||
out = {{x=startX,y=startY}}
|
||||
return out
|
||||
end
|
||||
local minX = math.min( startX, endX )
|
||||
if minX == startX then
|
||||
minY = startY
|
||||
maxX = endX
|
||||
maxY = endY
|
||||
else
|
||||
minY = endY
|
||||
maxX = startX
|
||||
maxY = startY
|
||||
end
|
||||
local xDiff = maxX - minX
|
||||
local yDiff = maxY - minY
|
||||
if xDiff > math.abs(yDiff) then
|
||||
local y = minY
|
||||
local dy = yDiff / xDiff
|
||||
for x=minX,maxX do
|
||||
table.insert(out,{x=x,y=math.floor(y+0.5)})
|
||||
y = y + dy
|
||||
end
|
||||
else
|
||||
local x = minX
|
||||
local dx = xDiff / yDiff
|
||||
if maxY >= minY then
|
||||
for y=minY,maxY do
|
||||
table.insert(out,{x=math.floor(x+0.5),y=y})
|
||||
x = x + dx
|
||||
end
|
||||
else
|
||||
for y=minY,maxY,-1 do
|
||||
table.insert(out,{x=math.floor(x+0.5),y=y})
|
||||
x = x - dx
|
||||
end
|
||||
end
|
||||
end
|
||||
return out
|
||||
end
|
||||
local getModemInput = function()
|
||||
while true do
|
||||
local _,side,freq,rfreq,msg,dist = os.pullEvent("modem_message")
|
||||
if freq == channel then
|
||||
if type(msg) == "table" then
|
||||
if type(msg.x) == "number" and type(msg.y) == "number" and type(msg.r) == "table" then
|
||||
if (msg.x >= 1 and msg.x <= scr_x) and (msg.y >= 1 and msg.y <= scr_y) and (#msg.r == 4) then
|
||||
grid[msg.y][msg.x] = {v = size, r = msg.r}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local render = function(grid)
|
||||
local q
|
||||
for y = 1, #grid do
|
||||
for x = 1, #grid[y] do
|
||||
q = grid[y][x]
|
||||
if q then
|
||||
term.setCursorPos(x,y)
|
||||
term.setTextColor(g( between( q.v+1, 1, size ), q.r ).txt )
|
||||
term.setBackgroundColor(g( between(q.v+1,1,size), q.r ).bg )
|
||||
term.write(g(between(q.v+1,1,size),q.r).char)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local downByOne = function(grid)
|
||||
local output = {}
|
||||
for y = 1, #grid do
|
||||
output[y] = {}
|
||||
for x = 1, #grid[y] do
|
||||
output[y][x] = {}
|
||||
if grid[y][x].v > 0 then
|
||||
output[y][x].v = grid[y][x].v - 1
|
||||
else
|
||||
output[y][x].v = 0
|
||||
end
|
||||
output[y][x].r = grid[y][x].r
|
||||
end
|
||||
end
|
||||
return output
|
||||
end
|
||||
local getInput = function()
|
||||
local mx,my,oldx,oldy,dots
|
||||
while true do
|
||||
local evt = {os.pullEvent()}
|
||||
modem = peripheral.find("modem")
|
||||
if modem then modem.open(channel) end
|
||||
if evt[1] == "key" then
|
||||
if evt[2] == keys.q then
|
||||
sleep(0)
|
||||
return
|
||||
end
|
||||
elseif evt[1] == "mouse_click" or evt[1] == "mouse_drag" then
|
||||
oldx,oldy = mx or evt[3],my or evt[4]
|
||||
mx,my = evt[3],evt[4]
|
||||
dots = getDotsInLine(oldx,oldy,mx,my)
|
||||
for a = 1, #dots do
|
||||
grid[dots[a].y][dots[a].x] = {v = size, r = s[p]}
|
||||
if modem then
|
||||
modem.transmit(channel,channel,{x=dots[a].x, y=dots[a].y, r=s[p]})
|
||||
end
|
||||
end
|
||||
elseif evt[1] == "mouse_up" then
|
||||
mx,my = nil,nil
|
||||
end
|
||||
end
|
||||
end
|
||||
local dothRendering = function()
|
||||
local t = false --term.current().setVisible
|
||||
while true do
|
||||
if t then t(false) end
|
||||
render(grid)
|
||||
if t then t(true) end
|
||||
grid = downByOne(grid)
|
||||
sleep(0)
|
||||
end
|
||||
end
|
||||
|
||||
local funclist = {
|
||||
getInput,
|
||||
dothRendering,
|
||||
getModemInput,
|
||||
}
|
||||
|
||||
parallel.waitForAny(unpack(funclist))
|
448
progdor.lua
Normal file
448
progdor.lua
Normal file
@ -0,0 +1,448 @@
|
||||
--[[
|
||||
PROGDOR file bundling program
|
||||
|
||||
Download with:
|
||||
pastebin get YXx5jjMV progdor
|
||||
std ld progdor progdor
|
||||
|
||||
This is a stable release. You fool!
|
||||
--]]
|
||||
|
||||
local doCompress = false --even if this is false, it will decompress compressed files. nifty, huh?
|
||||
|
||||
local doPastebin = false
|
||||
local tArg = {...}
|
||||
local input, outpath
|
||||
if tArg[1] == "-p" then --the p is for pastebin
|
||||
doPastebin = true
|
||||
input = tArg[2]
|
||||
outpath = tArg[3]
|
||||
else
|
||||
input = tArg[1]
|
||||
outpath = tArg[2]
|
||||
end
|
||||
|
||||
local progdor = fs.getName(shell.getRunningProgram())
|
||||
local dir = shell.dir()
|
||||
local displayHelp = function()
|
||||
local txt = progdor.." <input> [output]\nCompression is "..tostring(doCompress):upper().."."
|
||||
return print(txt)
|
||||
end
|
||||
|
||||
local yield = function()
|
||||
os.queueEvent("yield")
|
||||
os.pullEvent("yield")
|
||||
end
|
||||
|
||||
-- CCA API START --
|
||||
|
||||
local bit = bit32
|
||||
local function pack(bn1, bn2)
|
||||
return bit.band(bn1, 0xFF), bit.rshift(bn1, 8) + bit.lshift(bit.band(bn2, 0xF), 4), bit.rshift(bn2, 4)
|
||||
end
|
||||
local function upack(b1, b2, b3)
|
||||
return (b1 + bit.lshift(bit.band(b2, 0xF), 8)), (bit.lshift(b3,4) + bit.band(bit.rshift(b2, 4), 0xF))
|
||||
end
|
||||
local function createDict(bool)
|
||||
local ret = {}
|
||||
for i = 1, 255 do
|
||||
if bool then
|
||||
ret[string.char(i)] = i
|
||||
else
|
||||
ret[i] = string.char(i)
|
||||
end
|
||||
end
|
||||
if not bool then ret[256] = 256 end
|
||||
return ret
|
||||
end
|
||||
local function cp(sInput)
|
||||
local dic = createDict(true)
|
||||
local s = ""
|
||||
local ch
|
||||
local dlen = 256
|
||||
local result = {}
|
||||
local temp
|
||||
for i = 1, #sInput do
|
||||
if dlen == 4095 then
|
||||
result[#result + 1] = dic[s]
|
||||
result[#result + 1] = 256
|
||||
dic = createDict(true)
|
||||
dlen = 256
|
||||
s = ""
|
||||
end
|
||||
ch = sInput:sub(i, i)
|
||||
temp = s..ch
|
||||
if dic[temp] then
|
||||
s = temp
|
||||
else
|
||||
result[#result + 1] = dic[s]
|
||||
dlen = dlen +1
|
||||
dic[temp] = dlen
|
||||
s = ch
|
||||
end
|
||||
end
|
||||
result[#result + 1] = dic[s]
|
||||
|
||||
return result
|
||||
end
|
||||
local function dc(data)
|
||||
local dic = createDict(false)
|
||||
local entry
|
||||
local ch
|
||||
local currCode
|
||||
local result = {}
|
||||
result[#result + 1] = dic[data[1]]
|
||||
prefix = dic[data[1]]
|
||||
for i = 2, #data do
|
||||
currCode = data[i]
|
||||
if currCode == 256 then
|
||||
dic = createDict(false)
|
||||
prefix = ""
|
||||
else
|
||||
entry = dic[currCode]
|
||||
if entry then--exists in dictionary
|
||||
ch = entry:sub(1, 1)
|
||||
result[#result + 1] = entry
|
||||
if prefix ~= "" then
|
||||
dic[#dic+1] = prefix .. ch
|
||||
end
|
||||
else
|
||||
ch = prefix:sub(1, 1)
|
||||
result[#result + 1] = prefix..ch
|
||||
dic[#dic + 1] = prefix..ch
|
||||
end
|
||||
|
||||
prefix = dic[currCode]
|
||||
end
|
||||
end
|
||||
|
||||
return table.concat(result)
|
||||
end
|
||||
local function trim(inp)
|
||||
for i = 0,2 do
|
||||
if inp[#inp] == 0 then
|
||||
inp[#inp] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
local function decompress(input)
|
||||
local rec = {}
|
||||
for i = 1, #input, 3 do
|
||||
if i % 66 == 0 then
|
||||
yield()
|
||||
end
|
||||
rec[#rec+1], rec[#rec+2] = upack(input[i], input[i+1] or 0, input[i+2] or 0)
|
||||
end
|
||||
trim(rec)
|
||||
return dc(rec)
|
||||
end
|
||||
local function compress(input)
|
||||
local rec = {}
|
||||
local data = cp(input)
|
||||
for i=1, #data, 2 do
|
||||
yield()
|
||||
rec[#rec+1], rec[#rec+2], rec[#rec+3] = pack(data[i], data[i+1] or 0)
|
||||
end
|
||||
trim(rec)
|
||||
return rec
|
||||
end
|
||||
|
||||
-- CCA API END --
|
||||
|
||||
local fixstr = function(str)
|
||||
return str:gsub("\\(%d%d%d)",string.char)
|
||||
end
|
||||
|
||||
local explode = function(div,str)
|
||||
if (div=='') then return false end
|
||||
local pos,arr = 0,{}
|
||||
for st,sp in function() return string.find(str,div,pos,true) end do
|
||||
table.insert(arr,str:sub(pos,st-1))
|
||||
pos = sp + 1
|
||||
end
|
||||
table.insert(arr,str:sub(pos))
|
||||
return arr
|
||||
end
|
||||
local sanitize = function(sani,tize)
|
||||
local _,x = string.find(sani,tize)
|
||||
if x then
|
||||
return sani:sub(x+1)
|
||||
else
|
||||
return sani
|
||||
end
|
||||
end
|
||||
local tablize = function(input)
|
||||
if type(input) == "string" then
|
||||
return explode("\n",input)
|
||||
elseif type(input) == "table" then
|
||||
return table.concat(input,"\n")
|
||||
end
|
||||
end
|
||||
local compyress = function(input)
|
||||
return string.char(unpack(compress(input)))
|
||||
end
|
||||
local decompyress = function(input)
|
||||
local out = {}
|
||||
for a = 1, #input do
|
||||
table.insert(out,string.byte(input:sub(a,a)))
|
||||
end
|
||||
return decompress(out)
|
||||
end
|
||||
local listAll
|
||||
listAll = function(_path, _files, noredundant)
|
||||
local path = _path or ""
|
||||
local files = _files or {}
|
||||
if #path > 1 then table.insert(files, path) end
|
||||
for _, file in ipairs(fs.list(path)) do
|
||||
local path = fs.combine(path, file)
|
||||
if (file ~= thisProgram) then
|
||||
local guud = true
|
||||
if guud then
|
||||
if fs.isDir(path) then
|
||||
listAll(path, files, noredundant)
|
||||
else
|
||||
table.insert(files, path)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if noredundant then
|
||||
for a = 1, #files do
|
||||
if fs.isDir(tostring(files[a])) then
|
||||
if #fs.list(tostring(files[a])) ~= 0 then
|
||||
table.remove(files,a)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return files
|
||||
end
|
||||
if not (input) then
|
||||
return displayHelp()
|
||||
end
|
||||
if not outpath then
|
||||
outpath = input
|
||||
end
|
||||
|
||||
local choice = function(input,verbose)
|
||||
if not input then
|
||||
input = "yn"
|
||||
end
|
||||
if verbose then
|
||||
write("[")
|
||||
for a = 1, #input do
|
||||
write(input:sub(a,a):upper())
|
||||
if a < #input then
|
||||
write(",")
|
||||
end
|
||||
end
|
||||
write("]?")
|
||||
end
|
||||
local evt,char
|
||||
repeat
|
||||
evt,char = os.pullEvent("char")
|
||||
until string.find(input:lower(),char:lower())
|
||||
if verbose then
|
||||
print(char:upper())
|
||||
end
|
||||
local pos = string.find(input:lower(),char:lower())
|
||||
return pos, char:lower()
|
||||
end
|
||||
|
||||
local postToPastebin = function(name, contents)
|
||||
local key = "0ec2eb25b6166c0c27a394ae118ad829"
|
||||
local response = http.post(
|
||||
"http://pastebin.com/api/api_post.php",
|
||||
"api_option=paste&"..
|
||||
"api_dev_key="..key.."&"..
|
||||
"api_paste_format=lua&"..
|
||||
"api_paste_name="..textutils.urlEncode(name).."&"..
|
||||
"api_paste_code="..textutils.urlEncode(contents)
|
||||
)
|
||||
if response then
|
||||
local sResponse = response.readAll()
|
||||
response.close()
|
||||
local sCode = string.match( sResponse, "[^/]+$" )
|
||||
return sCode
|
||||
else
|
||||
return false
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function doPack(input,output,doCompress,verbose) --make sure that shell exists before using verbose mode
|
||||
local tx = term.getTextColor()
|
||||
if not doPastebin then
|
||||
if not fs.exists(input) then return 3 end
|
||||
if fs.isReadOnly(output) then return 5 end
|
||||
end
|
||||
local packageSelf = true
|
||||
local packageReadOnly = true
|
||||
local ro_asked = false
|
||||
local ps_asked = false
|
||||
if fs.isDir(input) then --if not a package
|
||||
local out = {}
|
||||
local list = listAll(input,nil,true)
|
||||
if verbose then
|
||||
for a = 1, #list do --this checks for self and read-only files
|
||||
if fs.isReadOnly(list[a]) and (not ro_asked) then
|
||||
write("Include read-only files? ")
|
||||
if choice("yn",true) == 2 then
|
||||
packageReadOnly = false
|
||||
end
|
||||
ro_asked = true
|
||||
end
|
||||
if fs.combine("",list[a]) == shell.getRunningProgram() and (not ps_asked) then
|
||||
write("Include self? ")
|
||||
if choice("yn",true) == 2 then
|
||||
packageSelf = false
|
||||
end
|
||||
ps_asked = true
|
||||
end
|
||||
end
|
||||
end
|
||||
for a = 1, #list do --this loop kills fascists
|
||||
local is_self = fs.combine("",list[a]) == fs.combine("",shell.getRunningProgram())
|
||||
if not ((is_self and not packageSelf) or (fs.isReadOnly(list[a]) and not packageReadOnly)) then
|
||||
if verbose then
|
||||
write("[")
|
||||
if term.isColor() then term.setTextColor(colors.lightGray) end
|
||||
write(sanitize(list[a],fs.combine(dir,input)))
|
||||
term.setTextColor(tx)
|
||||
write("]")
|
||||
end
|
||||
if fs.isDir(list[a]) then
|
||||
out[sanitize(list[a],fs.combine(dir,input))] = true
|
||||
else
|
||||
local file = fs.open(list[a],"r")
|
||||
local cont = file.readAll()
|
||||
file.close()
|
||||
if doCompress then
|
||||
out[sanitize(list[a],fs.combine(dir,input))] = tablize(compyress(cont))
|
||||
else
|
||||
out[sanitize(list[a],fs.combine(dir,input))] = tablize(cont)
|
||||
end
|
||||
end
|
||||
local tx = term.getTextColor()
|
||||
if fs.getName(list[a]):lower() == "peasant" then
|
||||
if term.isColor() then
|
||||
term.setTextColor(colors.orange)
|
||||
end
|
||||
print(" BURNINATED")
|
||||
else
|
||||
if term.isColor() then
|
||||
term.setTextColor(colors.green)
|
||||
end
|
||||
print(" GOOD")
|
||||
end
|
||||
term.setTextColor(tx)
|
||||
else
|
||||
if fs.getName(list[a]):lower() == "peasant" then
|
||||
print("Spared "..list[a])
|
||||
else
|
||||
print("Skipped "..list[a])
|
||||
end
|
||||
end
|
||||
end
|
||||
local fullOutput = tostring(doCompress).."\n"..fixstr(textutils.serialize(out))
|
||||
local sCode
|
||||
if doPastebin then
|
||||
print("Uploading...")
|
||||
sCode = postToPastebin(input,fullOutput)
|
||||
return 7, "Code = '"..sCode.."'"
|
||||
else
|
||||
if fs.isDir(output) then fs.delete(output) end
|
||||
local file = fs.open(output,"w")
|
||||
file.write(fullOutput)
|
||||
file.close()
|
||||
return 1
|
||||
end
|
||||
else --if a package
|
||||
local list, isCompy
|
||||
if not doPastebin then
|
||||
local file = fs.open(input,"r")
|
||||
isCompy = file.readLine()
|
||||
list = file.readAll()
|
||||
file.close()
|
||||
else
|
||||
local file = http.get("http://pastebin.com/raw/"..tostring(input))
|
||||
if file then
|
||||
isCompy = file.readLine()
|
||||
list = file.readAll()
|
||||
else
|
||||
return 6
|
||||
end
|
||||
end
|
||||
local list = textutils.unserialize(list)
|
||||
if type(list) ~= "table" then
|
||||
return 4
|
||||
end
|
||||
if fs.exists(output) then
|
||||
fs.delete(output)
|
||||
end
|
||||
local amnt = 0
|
||||
for k,v in pairs(list) do
|
||||
amnt = amnt + 1
|
||||
end
|
||||
local num = 0
|
||||
for k,v in pairs(list) do
|
||||
num = num + 1
|
||||
if v == true then
|
||||
fs.makeDir(fs.combine(output,fs.combine(k,dir)))
|
||||
else
|
||||
local file = fs.open(fs.combine(output,fs.combine(k,dir)),"w")
|
||||
if verbose then
|
||||
write("[")
|
||||
if term.isColor() then term.setTextColor(colors.lightGray) end
|
||||
write(k)
|
||||
term.setTextColor(tx)
|
||||
write("]")
|
||||
end
|
||||
if isCompy:gsub(" ","") == "true" then
|
||||
file.write(decompyress(tablize(v)))
|
||||
else
|
||||
file.write(tablize(v))
|
||||
end
|
||||
file.close()
|
||||
local tx = term.getTextColor()
|
||||
if fs.getName(k):lower() == "peasant" then
|
||||
if term.isColor() then
|
||||
term.setTextColor(colors.orange)
|
||||
end
|
||||
print(" UNBURNINATED")
|
||||
else
|
||||
if term.isColor() then
|
||||
term.setTextColor(colors.green)
|
||||
end
|
||||
print(" GOOD")
|
||||
end
|
||||
term.setTextColor(tx)
|
||||
end
|
||||
end
|
||||
return 2
|
||||
end
|
||||
end
|
||||
|
||||
local success, res, otherRes = pcall( function() return doPack(input,outpath,doCompress,true) end ) --functionized it!
|
||||
|
||||
if not success then
|
||||
term.setTextColor(colors.white)
|
||||
print("\n***Something went wrong!***")
|
||||
return printError(res)
|
||||
end
|
||||
|
||||
if res then
|
||||
local msgs = {
|
||||
[1] = "Successfully packed '"..input.."/' as '"..outpath.."'",
|
||||
[2] = "Successfully unpacked '"..input.."' to '"..outpath.."/'",
|
||||
[3] = "That file/folder does not exist.",
|
||||
[4] = "That file isn't a packed folder.",
|
||||
[5] = "You don't have permission.",
|
||||
[6] = "Failed to connect.",
|
||||
[7] = "Uploaded successfully.",
|
||||
}
|
||||
print(msgs[res])
|
||||
if otherRes then
|
||||
print(otherRes)
|
||||
end
|
||||
end
|
288
quickdraw.lua
Normal file
288
quickdraw.lua
Normal file
@ -0,0 +1,288 @@
|
||||
--[[
|
||||
QuickDraw!
|
||||
Can you outshoot the cowbow?
|
||||
I bet you can! It's actually really easy...
|
||||
|
||||
pastebin get uGTzMxNL quickdraw
|
||||
std pb uGTzMxNL quickdraw
|
||||
std ld quickdraw
|
||||
--]]
|
||||
|
||||
local difficulty = 1.2 --amount of time you have to shoot im'
|
||||
|
||||
local isRunning = true --whether the game should loop
|
||||
local over = false --whether you or the guy is dead
|
||||
|
||||
local wins = 0
|
||||
local losses = 0
|
||||
|
||||
local s = {
|
||||
enemy = {
|
||||
getready = {{},{},{0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,},{0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,4096,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,128,4096,4096,0,4096,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,128,4096,4096,0,4096,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,128,4096,4096,0,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,256,4096,128,4096,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},},
|
||||
shoot1 = {{},{},{0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,},{0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,128,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,4096,128,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,256,0,4096,4096,128,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},},
|
||||
shoot2 = {{},{},{0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,},{0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,},{0,0,0,0,0,0,0,0,0,0,0,0,256,4096,4096,128,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,4096,128,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,0,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,0,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},},
|
||||
laugh = {{},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,1,1,32768,1,1,32768,1,1,32768,32768,1,1,32768,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,1,1,1,1,32768,1,1,32768,1,32768,1,1,32768,1,32768,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,1,1,1,1,1,1,32768,32768,32768,32768,1,32768,32768,32768,32768,1,32768,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,1,1,1,1,32768,1,1,32768,1,32768,1,1,32768,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,0,0,0,0,0,1,1,32768,1,1,32768,1,32768,1,1,32768,1,32768,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,4096,128,4096,4096,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,4096,128,4096,0,4096,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,4096,128,4096,0,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,4096,128,4096,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},},
|
||||
dead = {{},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,1,1,1,32768,32768,1,1,32768,1,32768,1,32768,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,16,16,16,16,0,4096,0,1,1,1,1,32768,1,1,32768,1,32768,1,32768,1,32768,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,16,16,16,16,0,1,1,1,1,1,1,32768,32768,32768,32768,1,32768,32768,32768,1,32768,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,0,16,16,0,0,4096,0,1,1,1,1,32768,1,1,32768,1,32768,1,32768,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,4096,0,4096,4096,128,4096,0,4096,0,0,0,1,1,32768,1,1,32768,1,32768,1,32768,1,32768,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,4096,128,4096,4096,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,4096,4096,128,4096,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,2048,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,2048,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},{0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,2048,},},
|
||||
},
|
||||
bg = {{8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,1,1,1,1,8,8,8,1,1,8,8,8,8,8,8,8,8,8,8,8,8,8,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,16,16,8,8,8,8,8,8,},{8,8,8,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,16,16,16,16,8,8,8,8,8,},{8,8,8,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,16,16,8,8,8,8,8,8,},{8,8,8,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,8,8,1,1,8,1,1,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,1,1,1,8,8,8,1,1,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,128,128,128,128,128,128,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,},{8,8,8,8,8,128,128,128,128,128,128,128,128,128,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,},{16,16,16,16,16,128,128,128,128,128,128,128,128,128,16,16,16,16,16,16,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,},{16,16,16,16,16,128,128,128,128,128,128,128,128,128,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,},{16,16,16,16,16,128,128,128,128,128,128,128,128,128,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,},{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,},{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,},{16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,},},
|
||||
}
|
||||
_s = s
|
||||
|
||||
local scr_x, scr_y = term.getSize()
|
||||
|
||||
local yield = function()
|
||||
os.queueEvent("yield")
|
||||
os.pullEvent("yield")
|
||||
end
|
||||
|
||||
local RPGslowprint = function(text,rate)
|
||||
local cX,cY = term.getCursorPos()
|
||||
yield()
|
||||
local uutcome = parallel.waitForAny(function()
|
||||
textutils.slowPrint(text,rate or 20)
|
||||
end, function()
|
||||
os.pullEvent("key")
|
||||
end)
|
||||
if uutcome == 2 then
|
||||
term.setCursorPos(cX,cY)
|
||||
print(text)
|
||||
end
|
||||
end
|
||||
|
||||
local displayHelp = function(cli)
|
||||
local helptext = [[
|
||||
QuickDraw by EldidiStroyrr
|
||||
|
||||
HOW TO PLAY:
|
||||
|
||||
1) Click and hold on the green square for three seconds.
|
||||
2) As soon as it says DRAW, quickly move your mouse over the guy and let go.
|
||||
3) If you win, it'll get slightly harder
|
||||
|
||||
Press 'Q' to quit ingame.
|
||||
]]
|
||||
if cli then
|
||||
print(helptext)
|
||||
else
|
||||
term.setBackgroundColor(colors.gray)
|
||||
term.setTextColor(colors.white)
|
||||
term.setCursorPos(1,2)
|
||||
term.clear()
|
||||
RPGslowprint(helptext,30)
|
||||
term.setCursorPos(2,scr_y-1)
|
||||
term.write("Press any key to continue!")
|
||||
yield()
|
||||
os.pullEvent("key")
|
||||
end
|
||||
end
|
||||
|
||||
function mixImages( img1, img2 )
|
||||
local output = { }
|
||||
for a = 1, #img2 do
|
||||
output[ a ] = { }
|
||||
if not img1[ a ] then
|
||||
for b = 1, #img2[ a ] do
|
||||
output[ a ][ b ] = img2[ a ][ b ]
|
||||
end
|
||||
else
|
||||
for b = 1, #img2[ a ] do
|
||||
if img1[ a ][ b ] then
|
||||
if img1[ a ][ b ] ~= 0 then
|
||||
output[ a ][ b ] = img1[ a ][ b ]
|
||||
else
|
||||
output[ a ][ b ] = img2[ a ][ b ]
|
||||
end
|
||||
else
|
||||
output[ a ][ b ] = img2[ a ][ b ]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return output
|
||||
end
|
||||
|
||||
local function clear()
|
||||
local b,t = term.getBackgroundColor(), term.getTextColor()
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
term.setBackgroundColor(b)
|
||||
end
|
||||
|
||||
local function cprint(txt)
|
||||
local pX, pY = term.getCursorPos()
|
||||
term.setCursorPos((scr_x/2)-math.floor(#txt/2),(scr_y/2)+4)
|
||||
term.write(txt)
|
||||
term.setCursorPos(pX,pY)
|
||||
end
|
||||
|
||||
local gameArea, alive
|
||||
|
||||
local function handleShooting()
|
||||
currentSprite = "getready"
|
||||
sleep(difficulty/4)
|
||||
paintutils.drawImage(mixImages(s.enemy.shoot1,s.bg),1,1)
|
||||
currentSprite = "shoot1"
|
||||
sleep(difficulty/4)
|
||||
paintutils.drawImage(mixImages(s.enemy.shoot2,s.bg),1,1)
|
||||
currentSprite = "shoot2"
|
||||
sleep(difficulty/2)
|
||||
os.queueEvent("thoseWhoDig",false)
|
||||
return false, "dead"
|
||||
end
|
||||
|
||||
function drawHitBox(color)
|
||||
paintutils.drawFilledBox(scr_x-3,scr_y-2,scr_x,scr_y,color)
|
||||
term.setBackgroundColor(colors.lightBlue)
|
||||
term.setTextColor(colors.white)
|
||||
local txt = "YOU: "..wins.." / ENEMY: "..losses
|
||||
term.setCursorPos(scr_x-(#txt+1)+1,1)
|
||||
term.write(txt)
|
||||
term.setBackgroundColor(colors.lightGray)
|
||||
term.setTextColor(colors.gray)
|
||||
local txt = "TIME: "..tostring(difficulty):sub(1,5).." SEC"
|
||||
term.setCursorPos(2,scr_y-1)
|
||||
term.write(txt)
|
||||
end
|
||||
|
||||
function exitGame()
|
||||
if not isRunning then
|
||||
term.setCursorPos(1,scr_y)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.write(string.rep(" ",scr_x-4))
|
||||
term.setCursorPos(1,scr_y)
|
||||
sleep(0)
|
||||
end
|
||||
error()
|
||||
end
|
||||
|
||||
currentSprite = "getready"
|
||||
|
||||
local function countdown()
|
||||
term.setCursorPos((scr_x/2)-2,scr_y/2)
|
||||
term.setTextColor(colors.black)
|
||||
term.setBackgroundColor(colors.lightBlue)
|
||||
cprint("3...")
|
||||
sleep(0.8)
|
||||
cprint("2...")
|
||||
sleep(0.8)
|
||||
cprint("1...")
|
||||
sleep(0.8)
|
||||
cprint("DRAW!")
|
||||
end
|
||||
|
||||
function getInput()
|
||||
alive = true
|
||||
os.pullEvent("getMeSomeInput")
|
||||
while true do
|
||||
local evt
|
||||
if gameArea == "beginning1" then
|
||||
evt = {os.pullEvent()}
|
||||
if evt[1] == "mouse_click" then
|
||||
if evt[3] >= scr_x-3 and evt[4] >= scr_y-2 then
|
||||
local res = parallel.waitForAny(function()
|
||||
while true do
|
||||
local evt = {os.pullEvent()}
|
||||
if evt[1] == "mouse_up" or evt[1] == "mouse_click" then
|
||||
break
|
||||
elseif evt[1] == "mouse_drag" then
|
||||
if (evt[3] < scr_x-3) or (evt[4] < scr_y-2) then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end, countdown)
|
||||
if (res == 1) and not over then
|
||||
cprint("FOUL!!")
|
||||
exitGame()
|
||||
end
|
||||
os.queueEvent("imready")
|
||||
parallel.waitForAny(function()
|
||||
while alive do
|
||||
evt = {os.pullEvent()}
|
||||
if evt[1] == "mouse_up" then
|
||||
local x,y = evt[3],evt[4]
|
||||
if _s.enemy[currentSprite][y] then
|
||||
if _s.enemy[currentSprite][y][x] then
|
||||
if _s.enemy[currentSprite][y][x] ~= 0 then
|
||||
os.queueEvent("thoseWhoDig",true,x,y)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
sleep(0.2)
|
||||
elseif evt[1] == "mouse_click" then --yay for anticheating
|
||||
sleep(1)
|
||||
end
|
||||
end
|
||||
end, handleShooting)
|
||||
end
|
||||
elseif evt[1] == "key" then
|
||||
if evt[2] == keys.q then
|
||||
isRunning = false
|
||||
exitGame()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local flash = {
|
||||
colors.white,
|
||||
colors.lightGray,
|
||||
colors.black,
|
||||
colors.gray,
|
||||
}
|
||||
|
||||
local tArg = {...}
|
||||
if tArg[1] == "help" then
|
||||
return displayHelp(true)
|
||||
end
|
||||
|
||||
function game()
|
||||
over = false
|
||||
term.setTextColor(colors.white)
|
||||
while true do
|
||||
gameArea = "beginning1"
|
||||
paintutils.drawImage(mixImages(s.enemy.getready,s.bg),1,1)
|
||||
drawHitBox(colors.green)
|
||||
currentSprite = "getready"
|
||||
os.queueEvent("getMeSomeInput")
|
||||
os.pullEvent("imready")
|
||||
os.queueEvent("shootStart!")
|
||||
local _,alive,x,y = os.pullEvent("thoseWhoDig")
|
||||
over = true
|
||||
if not alive then
|
||||
for a = 1, #flash do
|
||||
term.setBackgroundColor(flash[a])
|
||||
term.clear()
|
||||
sleep(0.1)
|
||||
end
|
||||
losses = losses + 1
|
||||
paintutils.drawImage(mixImages(s.enemy.laugh,s.bg),1,1)
|
||||
term.setTextColor(colors.red)
|
||||
term.setBackgroundColor(colors.lightBlue)
|
||||
sleep(0.5)
|
||||
exitGame()
|
||||
else
|
||||
paintutils.drawImage(mixImages(s.enemy.dead,s.bg),1,1)
|
||||
paintutils.drawPixel(x,y,colors.red)
|
||||
sleep(0.2)
|
||||
term.setBackgroundColor(colors.lightBlue)
|
||||
term.setTextColor(colors.black)
|
||||
cprint("YOU WIN!")
|
||||
wins = wins + 1
|
||||
sleep(0.8)
|
||||
difficulty = difficulty * 0.92
|
||||
exitGame()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
clear()
|
||||
displayHelp(false)
|
||||
while isRunning do
|
||||
parallel.waitForAny(getInput,game)
|
||||
if isRunning then
|
||||
sleep(0.8)
|
||||
end
|
||||
end
|
214
sdodge.lua
Normal file
214
sdodge.lua
Normal file
@ -0,0 +1,214 @@
|
||||
--[[
|
||||
SUPER Dodge!!
|
||||
A remake of that last game I made. Mostly an experiment with cool background.
|
||||
Get with
|
||||
pastebin get 5BUnGkUJ dodge2
|
||||
And soon
|
||||
std ld dodge2 dodge2
|
||||
|
||||
This game isn't finished, but it is certainly playable.
|
||||
|
||||
...you fool!
|
||||
--]]
|
||||
local scr_x, scr_y = term.getSize()
|
||||
local sprite = {}
|
||||
sprite.dw = {{128,128,128,128,128,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,128,256,256,128,128,},{0,16384,16384,16384,16384,0,},{16384,2,2,2,2,16384,},{16384,2,2,16,16,16384,},{16384,16,16,16,2,16384,},{0,16384,16384,16384,16384,0,},}
|
||||
sprite.uw = {{0,16384,16384,16384,16384,0,},{16384,16,16,2,2,16384,},{16384,16,2,2,2,16384,},{16384,2,2,16,16,16384,},{0,16384,16384,16384,16384,0,},{128,128,256,256,128,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,128,128,128,128,128,},}
|
||||
sprite.guy = {{2,0,8192,32,32,0},{16384,8192,8192,32,2048,32},{2,0,8192,32,32,0}}
|
||||
sprite.guybig = {{},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32768,32768,32,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32768,8,8,32768,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,0,8,8,8,8,32768,32,32,32,32,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32768,8,8,8,32768,32,32,32,32,32,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32768,32768,32768,32,32,32,32,32,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,256,256,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,256,256,256,256,256,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,2,2048,256,256,256,256,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,2,2,2,2,2,2,2048,2048,2048,256,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,2,2,2,2,2,2,16,16,16,16,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,2,2,2,2,2,2,16,16,16,16,16,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,2,2,2,2,16,16,16,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,2,0,0,0,2,2,2,2,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}}
|
||||
sprite.title = {{1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,},{1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,},{0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,},{},{8,8,8,8,8,0,0,0,0,8,8,8,8,8,0,0,8,8,8,8,8,0,0,0,0,8,8,8,8,0,0,8,8,8,8,8,8,},{8,8,8,8,8,8,0,0,8,8,8,8,8,8,8,0,8,8,8,8,8,8,0,0,8,8,8,8,8,8,0,8,8,8,8,8,8,},{8,8,0,0,8,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,8,8,8,0,8,8,0,0,8,8,0,8,8,0,0,0,0,},{8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,0,0,0,8,8,8,8,8,0,},{8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,8,8,8,0,8,8,0,0,0,0,},{8,8,0,0,8,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,8,8,8,0,8,8,0,0,8,8,0,8,8,0,0,0,0,},{8,8,8,8,8,8,0,0,8,8,8,8,8,8,8,0,8,8,8,8,8,8,0,0,8,8,8,8,8,8,0,8,8,8,8,8,8,},{8,8,8,8,8,0,0,0,0,8,8,8,8,8,0,0,8,8,8,8,8,0,0,0,0,8,8,8,8,0,0,8,8,8,8,8,8,}}
|
||||
sprite.bg = {{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768},{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768},{4096,32768,32768,32768,32768,32768,32768,32768,32768,4096,4096,4096,4096,4096,4096,4096,4096,4096},{4096,4096,4096,4096,4096,4096,4096,4096,4096,4096,0,0,0,0,0,0,0,0},{},{},{},{},{},{},{},{},{},{},{},{4096,4096,4096,4096,4096,4096,4096,4096,4096,4096,0,0,0,0,0,0,0,0},{4096,32768,32768,32768,32768,32768,32768,32768,32768,4096,4096,4096,4096,4096,4096,4096,4096,4096},{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768},{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768}}
|
||||
|
||||
local gm = {
|
||||
x = 2,
|
||||
y = math.floor(scr_y/2),
|
||||
score = 0,
|
||||
hiscore = 0,
|
||||
deaths = 0,
|
||||
}
|
||||
local walls = {}
|
||||
|
||||
local keysDown = {}
|
||||
|
||||
local inc = function(a)
|
||||
local x,y = term.getCursorPos()
|
||||
term.setCursorPos(x,y+a)
|
||||
end
|
||||
|
||||
local addWall = function()
|
||||
table.insert(walls,{x=scr_x,y=math.random(4,scr_y-4)})
|
||||
end
|
||||
|
||||
local moveWalls
|
||||
moveWalls = function()
|
||||
for k,v in pairs(walls) do
|
||||
if walls[k] then
|
||||
walls[k].x = walls[k].x - 1
|
||||
if walls[k].x <= -5 then
|
||||
walls[k] = nil
|
||||
moveWalls()
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local renderBG = function(scroll,bgscroll)
|
||||
local ivl = 5 --interval
|
||||
local skew = 2
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
local pos = (ivl - scroll) + 1
|
||||
while pos <= scr_x do
|
||||
local endpos = ((pos-(scr_x/2))*(skew))+(scr_x/2)
|
||||
local midpos = ((pos-(scr_x/2))*(skew*0.8))+(scr_x/2) -- skew*0.75 is perfect lines
|
||||
paintutils.drawLine(endpos, scr_y, midpos, scr_y*0.75, colors.cyan) --render bottom
|
||||
paintutils.drawLine(midpos, scr_y*0.75, pos , scr_y*0.5, colors.lightBlue) --render bottom
|
||||
paintutils.drawLine(endpos, 1, midpos, scr_y*0.25, colors.cyan) --render top
|
||||
paintutils.drawLine(midpos, scr_y*0.25, pos, scr_y*0.5, colors.lightBlue) --render top
|
||||
pos = pos + ivl
|
||||
end
|
||||
for x = 1-bgscroll, scr_x, 18 do
|
||||
paintutils.drawImage(sprite.bg,x,1)
|
||||
end
|
||||
end
|
||||
local gap = 6
|
||||
local t = term.current().setVisible
|
||||
|
||||
local checkCollision = function()
|
||||
for k,v in pairs(walls) do
|
||||
if gm.x >= v.x-3 and gm.x <= v.x+3 then --intentionally allowed front and back to touch wall
|
||||
if math.abs((gm.y+1) - v.y) >= (gap/2)-1 then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local render = function(scroll,bgscroll)
|
||||
if t then t(false) end
|
||||
renderBG(scroll,bgscroll)
|
||||
paintutils.drawImage(sprite.guy,gm.x,gm.y)
|
||||
|
||||
for k,v in pairs(walls) do
|
||||
paintutils.drawImage(sprite.uw,v.x,v.y+(gap/2))
|
||||
paintutils.drawImage(sprite.dw,v.x,(v.y-(gap/2))-scr_y)
|
||||
end
|
||||
|
||||
term.setCursorPos(2,1)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clearLine()
|
||||
write("SCORE: "..gm.score.." ")
|
||||
if t then t(true) end
|
||||
end
|
||||
|
||||
local game = function()
|
||||
local scroll = 1
|
||||
local frame = 0
|
||||
local maxframe = 32
|
||||
local bgscroll = 0
|
||||
while true do
|
||||
render(math.floor(scroll),math.floor(bgscroll))
|
||||
scroll = scroll + 0.5
|
||||
frame = frame + 1
|
||||
bgscroll = bgscroll + 2
|
||||
if scroll % 5 == 0 then
|
||||
scroll = 0
|
||||
end
|
||||
if frame == maxframe then
|
||||
addWall()
|
||||
frame = 1
|
||||
end
|
||||
if bgscroll % 18 == 0 then
|
||||
bgscroll = 0
|
||||
end
|
||||
moveWalls()
|
||||
|
||||
if keysDown[keys.up] and gm.y > 2 then
|
||||
gm.y = gm.y - 1
|
||||
end
|
||||
if keysDown[keys.down] and gm.y < scr_y-3 then
|
||||
gm.y = gm.y + 1
|
||||
end
|
||||
local isHit = not checkCollision()
|
||||
if isHit then
|
||||
return
|
||||
end
|
||||
gm.score = gm.score + 1
|
||||
if gm.hiscore < gm.score then --conglaturations
|
||||
gm.hiscore = gm.score
|
||||
end
|
||||
sleep(0)
|
||||
end
|
||||
end
|
||||
|
||||
local getInput = function()
|
||||
while true do
|
||||
local evt, key = os.pullEvent()
|
||||
if evt == "key" then
|
||||
keysDown[key] = true
|
||||
elseif evt == "key_up" then
|
||||
keysDown[key] = false
|
||||
end
|
||||
if key == keys.q then
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local cleanExit = function()
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.setTextColor(colors.white)
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
print("Thanks for playing!")
|
||||
if t then t(true) end
|
||||
sleep(0.05)
|
||||
end
|
||||
|
||||
local showTitle = function()
|
||||
if gm.deaths == 0 then
|
||||
local x = -38
|
||||
local y = scr_y
|
||||
repeat
|
||||
y = y - 1
|
||||
x = x + 2
|
||||
if t then t(false) end
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
paintutils.drawImage(sprite.guybig,math.floor(x),math.floor(y))
|
||||
if t then t(true) end
|
||||
sleep(0)
|
||||
until y <= -24
|
||||
end
|
||||
term.setBackgroundColor(colors.white)
|
||||
term.clear()
|
||||
sleep(0)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
paintutils.drawImage(sprite.title,3,2)
|
||||
sleep(0.1)
|
||||
term.setCursorPos(4,scr_y)
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.write("PUSH ANY KEY TO NEXT")
|
||||
term.setCursorPos(2,1)
|
||||
write("TOP: "..gm.hiscore.." | LAST: "..gm.score)
|
||||
os.pullEvent("char")
|
||||
end
|
||||
|
||||
while true do
|
||||
showTitle()
|
||||
walls = {}
|
||||
gm.y = math.floor(scr_y/2)
|
||||
gm.score = 0
|
||||
keysDown = {}
|
||||
local res = parallel.waitForAny(getInput,game)
|
||||
if res == 2 then
|
||||
gm.deaths = gm.deaths + 1
|
||||
else
|
||||
cleanExit()
|
||||
break
|
||||
end
|
||||
end
|
1042
sinelock.lua
Normal file
1042
sinelock.lua
Normal file
File diff suppressed because it is too large
Load Diff
111
trippy-scr.lua
Normal file
111
trippy-scr.lua
Normal file
@ -0,0 +1,111 @@
|
||||
local tArg = {...}
|
||||
|
||||
local scr_x, scr_y = term.getSize()
|
||||
local mx, my = scr_x/2, scr_y/2
|
||||
|
||||
-- special modes for special people
|
||||
local mouseMode = tArg[1] == "mouse" or tArg[2] == "mouse"
|
||||
local fuck = tArg[1] == "fuck" or tArg[2] == "fuck"
|
||||
|
||||
-- localize functions to increase speed, maybe, I think
|
||||
local concat, blit = table.concat, term.blit
|
||||
local sin, cos, rad, abs, sqrt, floor = math.sin, math.cos, math.rad, math.abs, math.sqrt, math.floor
|
||||
|
||||
-- rainbow pattern
|
||||
local palette = {"e","1","4","5","d","9","b","a","2"}
|
||||
|
||||
local distance = function(x1, y1, x2, y2)
|
||||
return sqrt( (x2 - x1) ^ 2 + (y2 - y1) ^ 2 )
|
||||
end
|
||||
|
||||
local randCase = function(str)
|
||||
local output = ""
|
||||
for i = 1, #str do
|
||||
output = output .. ((math.random(0,1) == 1) and str:sub(i,i):upper() or str:sub(i,i):lower())
|
||||
end
|
||||
return output
|
||||
end
|
||||
|
||||
local render = function(iterate, xscroll1, yscroll1, xscroll2, yscroll2)
|
||||
local buffer, cx, cy = {{},{},{}}
|
||||
for y = 1, scr_y do
|
||||
buffer[1][y] = {}
|
||||
buffer[2][y] = {}
|
||||
buffer[3][y] = {}
|
||||
for x = 1, scr_x do
|
||||
cx = 0.66 * ((x - mx) > 0 and 1 or -1) * (abs(x - mx) ^ 1.2)
|
||||
cy = ((y - my) > 0 and 1 or -1) * (abs(y - my) ^ 1.2)
|
||||
|
||||
buffer[1][y][x] = fuck and randCase("fuck"):sub(1+(cx%4),1+(cx%4)) or "\127"
|
||||
|
||||
buffer[2][y][x] = palette[1 + floor(
|
||||
iterate + distance( cx + xscroll1, cy + yscroll1, 0, 0 )
|
||||
) % #palette] or " "
|
||||
|
||||
buffer[3][y][x] = palette[1 + floor(
|
||||
iterate + distance( cx + xscroll2, cy + yscroll2, 0, 0 )
|
||||
) % #palette] or " "
|
||||
end
|
||||
end
|
||||
|
||||
for y = 1, scr_y do
|
||||
term.setCursorPos(1,y)
|
||||
-- suka
|
||||
blit(
|
||||
concat(buffer[1][y]),
|
||||
concat(buffer[2][y]),
|
||||
concat(buffer[3][y])
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
local main = function()
|
||||
term.clear()
|
||||
local wave, evt = 0
|
||||
local xscroll1, yscroll1, xscroll2, yscroll2 = 0, 0, 0, 0
|
||||
if mouseMode then
|
||||
parallel.waitForAny(function()
|
||||
while true do
|
||||
evt = {os.pullEvent()}
|
||||
if evt[1] == "mouse_click" or evt[1] == "mouse_drag" then
|
||||
if evt[2] == 1 then
|
||||
xscroll1 = mx - evt[3]
|
||||
yscroll1 = my - evt[4]
|
||||
elseif evt[2] == 2 then
|
||||
xscroll2 = mx - evt[3]
|
||||
yscroll2 = my - evt[4]
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
function()
|
||||
while true do
|
||||
render(wave, xscroll1, yscroll1, xscroll2, yscroll2)
|
||||
wave = (wave + 1) % (360 * 7)
|
||||
sleep(0.05)
|
||||
end
|
||||
end)
|
||||
else
|
||||
while true do
|
||||
xscroll1 = -sin(rad(wave * 2)) * scr_x * 0.4
|
||||
yscroll1 = -cos(rad(wave * 3.5)) * scr_y * 0.4
|
||||
xscroll2 = -xscroll1
|
||||
yscroll2 = -yscroll1
|
||||
render(wave, xscroll1, yscroll1, xscroll2, yscroll2)
|
||||
wave = (wave + 1) % (360 * 7)
|
||||
sleep(0.05)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- wait for keypress to exit program
|
||||
local waitForInput = function()
|
||||
local evt
|
||||
sleep(0.25)
|
||||
os.pullEvent("key")
|
||||
end
|
||||
|
||||
parallel.waitForAny(main, waitForInput)
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
sleep(0.05)
|
75
wpath.lua
Normal file
75
wpath.lua
Normal file
@ -0,0 +1,75 @@
|
||||
-- Wavey Path
|
||||
-- Makes a wavey path to the right
|
||||
|
||||
local wpath = {}
|
||||
|
||||
wpath.cols = "e145d9ba26"
|
||||
wpath.bwcols = "087f78"
|
||||
wpath.waveLen = 3
|
||||
wpath.textScale = 2.5
|
||||
wpath.delay = 0.05
|
||||
|
||||
local rbow,bbow
|
||||
local sizePath = "size.lua"
|
||||
|
||||
if not peripheral.find("monitor") then
|
||||
return
|
||||
end
|
||||
|
||||
local reset = function()
|
||||
rbow,bbow = "",""
|
||||
for a = 1,#wpath.cols do
|
||||
rbow = rbow..wpath.cols:sub(a,a):rep(wpath.waveLen)
|
||||
end
|
||||
for a = 1,#wpath.bwcols do
|
||||
bbow = bbow..wpath.bwcols:sub(a,a):rep(wpath.waveLen)
|
||||
end
|
||||
end
|
||||
reset()
|
||||
|
||||
local mons = {peripheral.find("monitor")}
|
||||
local setscales = function()
|
||||
for a = 1, #mons do
|
||||
mons[a].setTextScale(wpath.textScale)
|
||||
end
|
||||
end
|
||||
|
||||
local wrap = function(txt,amnt)
|
||||
local output = {}
|
||||
for a = 0, #txt-1 do
|
||||
output[((a+amnt) % #txt)+1] = txt:sub(a+1,a+1)
|
||||
end
|
||||
return table.concat(output)
|
||||
end
|
||||
|
||||
local render = function(shift,mon)
|
||||
local line
|
||||
if not mon.getSize then return end
|
||||
local scr_x,scr_y = mon.getSize()
|
||||
scr_y = scr_y + (scr_y % 2)
|
||||
bow = mon.isColor() and rbow or bbow
|
||||
for y = 1, scr_y do
|
||||
mon.setCursorPos(1,y)
|
||||
line = bow:rep(scr_x):sub(1,scr_x)
|
||||
local text = ("#"):rep(scr_x)
|
||||
local txcol = wrap(line, -1*math.abs(y-scr_y/2)+shift-1)
|
||||
local bgcol = wrap(line, -1*math.abs(y-scr_y/2)+shift)
|
||||
mon.blit(text,txcol,bgcol)
|
||||
end
|
||||
end
|
||||
|
||||
local DOITNOW = function(YOUFUCKINGTWAT)
|
||||
local shift = 0
|
||||
while true do
|
||||
shift = (shift + 1)
|
||||
mons = {peripheral.find("monitor")}
|
||||
setscales()
|
||||
for a = 1, #mons do
|
||||
render(shift,mons[a])
|
||||
end
|
||||
sleep(wpath.delay)
|
||||
end
|
||||
end
|
||||
|
||||
--parallel.waitForAny(checkForReset,DOITNOW)
|
||||
DOITNOW()
|
Loading…
Reference in New Issue
Block a user