dvdlogo
Description
A collection of all my ComputerCraft programs and the APIs they use. This is mostly just to get them the fuck off of pastebin, and also to ensure that API owners don't change things to break my precious programs...!
Installation
Copy one of these commands into your ComputerCraft terminal:
wget:
wget https://raw.githubusercontent.com/LDDestroier/CC/master/dvdlogo.lua dvdlogoArchive:
wget https://cc.shobie.xyz/cc/get/gh-LDDestroier-CC-dvdlogo dvdlogo
Quick Install:
wget https://cc.shobie.xyz/cc/get/gh-LDDestroier-CC-dvdlogo dvdlogo
Usage
Run: dvdlogo
Tags
Source
View Original SourceCode Preview
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