From 817691a1937a0a5f44a45af777cdc953ba498f02 Mon Sep 17 00:00:00 2001 From: xingluo Date: Sun, 21 Dec 2025 17:43:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20player.lua?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- player.lua | 93 ++++++++++++++++++------------------------------------ 1 file changed, 30 insertions(+), 63 deletions(-) diff --git a/player.lua b/player.lua index a147d1d..4d46b51 100644 --- a/player.lua +++ b/player.lua @@ -1,70 +1,37 @@ --- logo -local logostr = '[3]{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},duration=1},{{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"}},{{"[25] ","[25]f","[25]f"},{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"}},{{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"},{"[25] ","[25]f","[25]f"}},{{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[6] \136\135\149\142\134\145[6] \159\149\143\153\153\143","[6]f00f00[8]f0f0ff","[8]f0ff0[6]f0f0f00"},{"[24] ","[24]f","[24]f"},{"[24] ","[24]f","[24]f"},{"\159\143\159\143\139\143[6] \159\143\132\159\128\148[6] ","[14]f0f00[6]f","[6]0[6]f00f0[8]f"},{"[3]-[18] [3]-","[3]0[18]f[3]0","[24]f"}},{{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[6] \130\151\157\140\136\140[6] \136\151\149\131\131\149","[6]f00[10]f00f[3]0","[8]f[4]0[8]f0[3]f"},{"[6] \136\135\149\142\134\145[6] \159\149\143\153\153\143","[6]f00f00[8]f0f0ff","[8]f0ff0[6]f0f0f00"},{"\159\143\159\143\139\143[6] \159\143\132\159\128\148[6] ","[14]f0f00[6]f","[6]0[6]f00f0[8]f"},{"\128\149\159\137\143\155[6] \159\133\144\144\129\149[6] ","00[12]f[4]0[6]f","ff[4]0[6]f00[10]f"},{"[6]-[12] [6]-","[6]0[12]f[6]0","[24]f"}},{{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"[6] \128\149\151\157\153\151[6] \130\151\130\131\151\131","[6]f00[10]f[6]0","[8]f[4]0[12]f"},{"\159\143\159\143\139\143\130\151\157\140\136\140\159\143\132\159\128\148\136\151\149\131\131\149","[6]f00[6]f0f[4]0f[3]0","[6]0ff[6]0f0[4]f0[3]f"},{"\128\149\159\137\143\155\136\135\149\142\134\145\159\133\144\144\129\149\159\149\143\153\153\143","00[4]f00f00[3]f[4]0f0f0ff","ff[4]0ff0ff[3]0[4]f0f0f00"},{"\130\151\128\148\148\148[6] \128\129\144\130\143\157[6] ","[6]0[6]f0f00f0[6]f","[13]f0ff0[7]f"},{"[9]-[6] [9]-","[9]0[6]f[9]0","[24]f"}},{{"[14] \139[10] ","[7]f[7]0f[3]0[7]f","[14]f0[10]f"},{"[11] \143\129\149 \132[8] ","[7]f[4]0ff[5]0[7]f","[11]f00f00[9]f"},{"[8] \159\135[3] \149\143\158\135\149[7] ","[7]f0ff[5]0ff0[7]f","[8]f[5]0ff00[8]f"},{"[7] \149[4] \143\150\144 \131\133[7] ","[8]f[5]0f[4]0[7]f","[7]f[5]0f0[11]f"},{"[7] \149 \136 \149 \131\144[8] ","[8]f00f00f0f00[7]f","[7]f[4]0ff[3]0[9]f"},{"[7] \138[4] \131\133 \149[8] ","[7]f[5]0ff[4]0[7]f","[8]f[8]0[9]f"},{"[8] \130\139\144[5] \149[8] ","[7]f[3]0f[7]0[7]f","[10]f[6]0[9]f"},{"[9] \143\131[4] \135[9] ","[7]f00ff[7]0[7]f","[9]f[6]0[10]f"},{"[12] \143\131[11] ","[7]f[11]0[7]f","[9]f[3]0[13]f"},{"[9] \143\135\129[13] ","[7]f[11]0[7]f","[25]f"},{"\159\143\159\143\139\143\159\143\159\143\139\143\159\143\132\159\128\148\128\148\128\128\148\128","[14]f0f[8]0","[14]0f0[8]f"},{"\128\149\159\137\143\155\128\149\151\157\153\151\159\133\144\144\129\149\130\151\130\131\151\131","00[4]f00[6]f[10]0","ff[4]0ff[6]0[10]f"},{"\130\151\128\148\148\148\130\151\157\140\136\140\128\129\144\130\143\157\136\151\149\131\131\149","[8]0[4]f0f00f[3]0f[3]0","[8]f[4]0f0ff0[3]f0[3]f"},{"\136\135\159\133\149\138\136\135\149\142\134\145\130\149\128\131\128\149\159\149\143\153\153\143","00f00f00f00f0f[4]0f0f0ff","ff0ff0ff0ff0f0[4]f0f0f00"},{"[3]=[18]-[3]=","[24]0","[24]f"}},animation=true,secondsPerFrame=0.1}' +local b64str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" --- 解压函数 -function rleDecompress(str) - local result = {} - local i = 1 - while i <= #str do - if str:sub(i, i) == "[" then - local j = str:find("]", i) - local num = tonumber(str:sub(i+1, j-1)) - local char = str:sub(j+1, j+1) - table.insert(result, char:rep(num)) - i = j + 2 - else - table.insert(result, str:sub(i, i)) - i = i + 1 - end - end - return table.concat(result) -end --- 解压 -local img = textutils.unserialize(rleDecompress(logostr)) -logostr = "" - - - -local function drawFrame(frame, term) - -- 获取终端的尺寸 - local termWidth, termHeight = term.getSize() - - -- 计算图像的尺寸 - -- 假设所有行具有相同的长度,取第一行的长度作为图像宽度 - local imageWidth, imageHeight = #frame[1][1] - 1, #frame - - -- 计算居中的x和y偏移量 - local xOffset = math.max(math.floor((termWidth - imageWidth) / 2), 0) - local yOffset = math.max(math.floor((termHeight - imageHeight) / 2), 0) - - for y, row in ipairs(frame) do - -- 使用计算出的yOffset来垂直居中图像 - term.setCursorPos(xOffset + 1, yOffset + y) - term.blit(table.unpack(row)) - end - - if frame.palette then - for i = 0, #frame.palette do - local c = frame.palette[i] - if type(c) == "table" then - term.setPaletteColor(2^i, table.unpack(c)) - else - term.setPaletteColor(2^i, c) - end - end - end - - if img.multiMonitor then - term.setTextScale(img.multiMonitor.scale or 0.5) - end -end +local logostr = [[ +32Vid 1.1 +10 +!CPC0138AAAAAA8ADQAAAAAAAAAAACAYnwEgDJ8BgwGVAYIBiwEgCIcBgQEgApUBnwGBASAGgwEgBJ8BkAEgC4cBgQEgAosBkAEgCYIBiwGQASAJggGPASAQnAEgA58BgQEgCIcBIAOHASAJlQEgAp8BgQEgCoIBgwIgF/AYDwHwDA8F8AgPAgACDwHwCA8BAATwCgAD8AMAAQ8B8AcAAw8C8AEAA/AIAAfwCQ8BAAPwCg8BAAPwCg8BAALwJvDw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==f39d8bc1 +!CPC0140AAAAAA8ADQAAAAAAAAAAACAXjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgJfAXDwPwCQ8DAAEPAQAB8AcPAgAE8AkAA/ADDwHwCAADDwHwAgACDwHwBwAEDwEAA/AKAATwCQ8CAALwCg8BAAPwNPDw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==46a853fa +!CPC013CAAAAAA8ADQAAAAAAAAAAACAJlwGQASAKnwGHASABlQEgAZ0BIAePAYEBIAOKAYcBIAufAYcBiwEgC5EBIAOCAYsBIAaQASADggGLASAKgwGPASAFnwEgCYcBIAOHASAInwGBASACnwGBASAJlQEgAocBIDTwCQ8B8AsPAgABDwEAAfAIDwIAA/AJAATwAg8B8AgAA/ADAAEPAvAGDwEAAw8CAAPwCQAF8AoPAQAD8AkPAgAC8AsPAQAC8DXw8PDysjPlf9iZsvLe3mx/zBnyssxMTEyZmZlMmbKyZuUzZsx/ZkxXpk7MTEwRERE=8e09de22 +!CPC0148AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgCIgBkAEgKvAIDwPwCQ8DAAEPAQAB8AcPAgAE8AkAA/ADDwHwCAADDwHwAgACDwHwBwAEDwEAA/AKAATwCQ8CAALwCg8BAAPwQ/Dw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==95274d09 +!CPC0170AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAYgBIAefASABiAGbASAXlwEgBvAIDwPwCQ8DAAEPAQAB8AcPAgAE8AkAA/ADDwHwCAADDwHwAgACDwHwBwAEDwEAA/AKAATwCQ8CAALwCg8BAAPwIQ8B8AIPAfAXDwHwBvDw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==e55650e9 +!CPC0198AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAYgBIAWfAYwBmwGfAYwBmwGVASAHnwEgA4IBIAiXASABlQEgBvAIDwPwCQ8DAAEPAQAB8AcPAgAE8AkAA/ADDwHwCAADDwHwAgACDwHwBwAEDwEAA/AKAATwCQ8CAALwCg8BAAPwHw8B8AEPAvABDwHwCA8B8AwPAfABDwHwBvDw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==a2051e3b +!CPC01C0AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAZcBIAWfAYwBmwGfAYwBmwGVASAFnwEgAZ8BggGEASABggGEASABhQEgAp8BIAKVASABlQEgBvAIDwPwCQ8DAAEPAQAB8AcPAgAE8AkAA/ADDwHwCAADDwHwAgACDwHwBwAEDwEAA/AKAATwCQ8CAALwCg8BAAPwGQ8B8AUPAfABDwLwAQ8B8AYPAfABDwHwCQ8B8AIPAfABDwHwBvDw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==b3725fe0 +!CPC01D0AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAZcBIAWfAYwBmwGfAYwBmwGVASACggEgApUBIAGVAYIBjAGQAYIBjAGQAZoBkAEgAZ8BkAEgAZUBIAGVASAG8AgPA/AJDwMAAQ8BAAHwBw8CAATwCQAD8AMPAfAIAAMPAfACAAIPAfAHAAQPAQAD8AoABPAJDwIAAvAKDwEAA/AZDwHwBQ8B8AEPAvABDwHwBg8B8AEPAfAGDwHwAg8B8AIPAfABDwHwBvDw8PKyM+V/2Jmy8t7ebH/MGfKyzExMTJmZmUyZsrJm5TNmzH9mTFemTsxMTBEREQ==0396aa50 +!CPC01E0AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAZcBIAKfAYQBnwKMAZsBnwGMAZsBlQEgAooBIAKVASABlQGCAYwBkAGCAYwBkAGaAY8BhAGfAY8BIAGVASABlQEgAooBIAKKAfAIDwPwCQ8DAAEPAQAB8AcPAgAE8AkAA/ADDwHwCAADDwHwAgACDwHwBwAEDwEAA/AKAATwCQ8CAALwCg8BAAPwGQ8B8AIPAfABDwLwAQ8C8AEPAfAGDwHwAQ8B8AYPAvABDwLwAQ8B8AEPAfAG8PDw8rIz5X/YmbLy3t5sf8wZ8rLMTExMmZmZTJmysmblM2bMf2ZMV6ZOzExMERER2de5f2b0 +!CPC01FCAAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAZcBIAKfAYwBmwGfAYwBmwGfAYwBmwGVASABkAGVASAClQEgAZUBggGMAZABggGMAZABmgGPAYUBnwGPAZABlQEgAZUBIAGfAZoBIAGfAZoB8AgPA/AJDwMAAQ8BAAHwBw8CAATwCQAD8AMPAfAIAAMPAfACAAIPAfAHAAQPAQAD8AoABPAJDwIAAvAKDwEAA/AZDwHwAg8B8AEPAvABDwLwAQ8B8AMPAfACDwHwAQ8B8AYPAvABDwLwAQ8B8AEPAfABDwHwAg8B8AHw8PDysjPlf9iZsvLe3mx/zBnyssxMTEyZmZlMmbKyZuUzZsx/ZkxXpk7MTEwRERE=91cadc41 +!CPC0200AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBIAaPAYMBIASCAYEBIAqfAYcBgQGCAZABIAqLAZABIAOCASAGiwEgBIIBIAuDAY8BIASHASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgB5gBjAGQAZcBIAKfAYwBmwGfAYwBmwGfAYwBmwGVAZ8BkAGVASAClQEgAZUBggGMAZABggGMAZABmgGPAYUBnQGPAZABlQGDAZQBIAGPAZoBIAGPAZoB8AgPA/AJDwMAAQ8BAAHwBw8CAATwCQAD8AMPAfAIAAMPAfACAAIPAfAHAAQPAQAD8AoABPAJDwIAAvAKDwEAA/AZDwHwAg8B8AEPAvABDwLwAQ8B8AEPAfABDwHwAg8B8AEPAfAGDwLwAQ8C8AEPAfABDwHwAQ8B8AIPAfAB8PDw8rIz5X/YmbLy3t5sf8wZ8rLMTExMmZmZTJmysmblM2bMf2ZMV6ZOzExMERER446de9bc +]] +local lines, lineIndex = {}, 1; for line in logostr:gmatch("[^\r\n]+") do table.insert(lines, line) end; local readLine = function() local line = lines[lineIndex]; lineIndex = lineIndex + 1; return line end; if readLine() ~= "32Vid 1.1" then error("Unsupported file") end; local fps = tonumber(readLine()); local first, second = readLine(), readLine(); if second == "" or second == nil then fps = 0 end term.clear() -for i, frame in ipairs(img) do - drawFrame(frame, term) - if img.animation then sleep(frame.duration or img.secondsPerFrame or 0.05) - else read() break end +local fi = true +while true do + local f;if first then f,first=first,nil elseif second then f,second=second,nil else f=readLine()end;if f==""or f==nil then break end;local m=f:match("^!CP([CD])");if not m then error("Invalid file")end;local d;if m=="C"then local l=tonumber(f:sub(5,8),16);d=f:sub(9,l+8)else local l=tonumber(f:sub(5,16),16);d=f:sub(17,l+16)end;local function b64dec(s)local r="";for c in s:gmatch"...."do if c:sub(3,4)=="=="then r=r..string.char(bit32.bor(bit32.lshift(b64str:find(c:sub(1,1))-1,2),bit32.rshift(b64str:find(c:sub(2,2))-1,4)))elseif c:sub(4,4)=="="then local n=(b64str:find(c:sub(1,1))-1)*4096+(b64str:find(c:sub(2,2))-1)*64+(b64str:find(c:sub(3,3))-1);r=r..string.char(bit32.extract(n,10,8))..string.char(bit32.extract(n,2,8))else local n=(b64str:find(c:sub(1,1))-1)*262144+(b64str:find(c:sub(2,2))-1)*4096+(b64str:find(c:sub(3,3))-1)*64+(b64str:find(c:sub(4,4))-1);r=r..string.char(bit32.extract(n,16,8))..string.char(bit32.extract(n,8,8))..string.char(bit32.extract(n,0,8))end end;return r end;local dt=b64dec(d);assert(dt:sub(1,4)=="\0\0\0\0"and dt:sub(9,16)=="\0\0\0\0\0\0\0\0","Invalid file");local w,h=("HH"):unpack(dt,5);if w<=0 or h<=0 then break end;local c,n,p=string.unpack("c1B",dt,17);local tl={};local ch=c:byte();for y=1,h do local l="";for x=1,w do l=l..string.char(ch);n=n-1;if n==0 then c,n,p=string.unpack("c1B",dt,p);ch=c:byte()end end;tl[y]=l end;local fl,bl={},{}; + for y=1,h do local fg,bg="","";for x=1,w do fg=fg..("%x"):format(bit32.band(ch,0x0F));bg=bg..("%x"):format(bit32.rshift(ch,4));n=n-1;if n==0 then ch,n,p=string.unpack("BB",dt,p)end end;fl[y]=fg;bl[y]=bg end;local tw,th=term.getSize();local sx=math.max(1,math.floor((tw-w)/2)+1);local sy=math.max(1,math.floor((th-h)/2)+1);local dh=math.min(h,th-sy+1);local dw=math.min(w,tw-sx+1);if dh>0 and dw>0 then for y=1,dh do local tx=string.sub(tl[y],1,dw);local fg=string.sub(fl[y],1,dw);local bg=string.sub(bl[y],1,dw);term.setCursorPos(sx,sy+y-1);term.blit(tx,fg,bg)end end;p=p-2;for i=0,15 do local r,g,b;r,g,b,p=string.unpack("BBB",dt,p);term.setPaletteColor(2^i,r/255,g/255,b/255)end;if fps==0 then read();break else sleep(1/fps)end + + if fi then sleep(1) fi = false end end +sleep(1) +-- Restore default palette +for i = 0, 15 do term.setPaletteColor(2^i, term.nativePaletteColor(2^i)) end +term.setBackgroundColor(colors.black) +term.setTextColor(colors.white) +term.clear() +term.setCursorPos(1, 1)