Trippy screensaver
Description
Makes two interweaving rainbow circle patterns that cover the screen. Figured I'd put it somewhere. pastebin run FHwuDkQD
Installation
Copy one of these commands into your ComputerCraft terminal:
Pastebin:
pastebin get FHwuDkQD trippy_screensaverwget:
wget https://pastebin.com/raw/FHwuDkQD trippy_screensaverArchive:
wget https://cc.shobie.xyz/cc/get/pb-FHwuDkQD trippy_screensaver
Quick Install:
wget https://cc.shobie.xyz/cc/get/pb-FHwuDkQD Trippy screensaver
Usage
Run the program after downloading
Tags
Source
View Original SourceCode Preview
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)