ldd-CC/dvdlogo.lua

169 lines
4.1 KiB
Lua
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local mon = peripheral.find("monitor")
if mon then
mon.setTextScale(0.5)
term.redirect(mon)
end
-- adjusts walls of screen so that it will bounce further/closer to the boundries of the screen
local xMargin, yMargin = 0, 0
local redrawDelay = nil
local changeColors = true
local scr_x, scr_y = term.getSize()
local max, min = math.max, math.min
local floor, ceil = math.floor, math.ceil
if scr_x >= 60 and scr_y >= 25 then
redrawDelay = redrawDelay or 0.05
else
redrawDelay = redrawDelay or 0.1
end
local getSize = function(image)
local x, y = 0, #image[1]
for y = 1, #image[1] do
x = max(x, #image[1][y])
end
return x, y
end
local drawImage = function(image, x, y, terminal)
terminal = terminal or term.current()
local cx, cy = terminal.getCursorPos()
for iy = 0, #image[1] + 1 do
terminal.setCursorPos(x - 1, y + (iy - 1))
if image[1][iy] then
terminal.blit(
" " .. image[1][iy] .. " ",
"f" .. image[2][iy] .. "f",
"f" .. image[3][iy] .. "f"
)
else
terminal.clearLine()
end
end
terminal.setCursorPos(cx,cy)
end
local colorSwap = function(image, text, back)
local output = {{},{},{}}
for y = 1, #image[1] do
output[1][y] = image[1][y]
output[2][y] = image[2][y]:gsub(".", text)
output[3][y] = image[3][y]:gsub(".", back or text)
end
return output
end
local logo = {
xvel = (math.random(0, 1) * 2) - 1,
yvel = (math.random(0, 1) * 2) - 1,
x = floor(scr_x / 2),
y = floor(scr_y / 2),
img = {
{
" —ƒƒƒƒƒƒƒƒƒ” Ÿƒƒƒƒƒƒƒ€€",
" ‚ƒƒƒ€ˆƒƒ€€ ‡€€‡ƒƒƒƒ‹€‚",
" —€—€€€€€ ”€• Ÿ€Ÿ€€ •€•",
" €€€‡€— ‚€€‡€€‡ —€— Ÿ€",
"—€€ƒƒ€€‡ ”€€Ÿ €‚ƒ€Ÿ ",
"‚ƒƒƒƒƒ ‚€‡ ƒƒƒƒƒ ",
" ƒƒƒ‚ƒƒƒ ",
" ƒ€€€€€€Ÿ€€€€€€€‚ƒ ",
"•€€€€€€ˆ‘€€€€€€€€€Œ€€€€€€€• ",
" ƒ€€€€€€‚ƒƒƒƒƒ€€€€€€€Ÿƒ ",
" ƒƒƒƒƒƒƒƒ ",
}, {
"00ffffffffff000000fffffffffff",
"000000f0f00000000f000000000f0",
"0f00fff0000f000ff000ff0000f00",
"0f00fff0000000f00000f0000ff00",
"f00ff0000000f0000000f0fff0000",
"00000000000000000000000000000",
"000000fffffffffffffff00000000",
"0fff0000000000000000000fff000",
"f000000f0ffffffffff0000000000",
"000f000000ffffff0000000000000",
"00000000000000000000000000000",
}, {
"ff0000000000ffffff000000000ff",
"ffffff000ff00ffff000ffffff00f",
"f00ffff00ff00ff000fff00fff00f",
"f00fff00ffff00000fff00fff000f",
"0000000fffff000fffff000000fff",
"fffffffffffff0fffffffffffffff",
"ffffff000000000000000ffffffff",
"f000000000ffffff0000000000fff",
"00000000ffffffffff00000000fff",
"fff00000000000000000000ffffff",
"fffffffffffffffffffffffffffff",
}
}
}
local imgXsize, imgYsize = getSize(logo.img)
local xWall, yWall
local render = function(colorReplace)
if colorReplace then
drawImage(
colorSwap(logo.img, {["0"] = colorReplace}, {["0"] = colorReplace}),
floor(logo.x),
floor(logo.y)
)
else
drawImage(
logo.img,
floor(logo.x),
floor(logo.y)
)
end
end
local color = math.random(1, 15)
local tick = function()
scr_x, scr_y = term.getSize()
xWall = scr_x - imgXsize + 1 - xMargin
yWall = scr_y - imgYsize + 1 - yMargin
logo.x = min(max(logo.x + logo.xvel, 1 + xMargin), xWall)
logo.y = min(max(logo.y + logo.yvel, 1 + yMargin), yWall)
if floor(logo.x) == (1 + xMargin) or floor(logo.x) == xWall then
logo.xvel = -logo.xvel
color = math.random(1, 15)
end
if floor(logo.y) == (1 + yMargin) or floor(logo.y) == yWall then
logo.yvel = -logo.yvel
color = math.random(1, 15)
end
if changeColors then
render(string.sub("0123456789abcdef", color, color))
else
render()
end
end
term.setBackgroundColor(colors.black)
term.clear()
local evt
local tID = os.startTimer(redrawDelay)
while true do
evt = {os.pullEventRaw()}
if evt[1] == "timer" and evt[2] == tID then
tick()
tID = os.startTimer(redrawDelay)
elseif evt[1] == "terminate" then
render("8")
sleep(0.05)
render("7")
sleep(0.05)
term.clear()
break
end
end
return 0