add all of the lua stuff aswell

This commit is contained in:
Soph :3 2025-09-27 18:24:02 +03:00
parent 63c0901393
commit 25d1b0f185
4 changed files with 437 additions and 1 deletions

89
lua/decode.lua Normal file
View file

@ -0,0 +1,89 @@
local function getUint16(bytes, idx)
return bytes[idx] * 256 + bytes[idx + 1]
end
local function getUint8(bytes, idx)
return bytes[idx]
end
local function componentToHex(c)
return string.format("%02x", c)
end
local function rgbToHex(r, g, b)
return "#" .. componentToHex(r) .. componentToHex(g) .. componentToHex(b)
end
local function unpack_block(whole_buffer, startByte)
local paletteIdx = getUint16(whole_buffer, startByte)
local packedInfo = getUint8(whole_buffer, startByte + 2)
local blockAmount = math.floor(packedInfo / 16)
local byteRemoval = packedInfo % 16
local textArr = {}
for i = 1, blockAmount do
local byte = getUint8(whole_buffer, startByte + 2 + i)
for bit = 7, 0, -1 do
table.insert(textArr, ((math.floor(byte / (2 ^ bit)) % 2) == 1) and "\n" or "")
end
end
if byteRemoval > 0 then
for i = 1, byteRemoval do
table.remove(textArr)
end
end
local endByte = startByte + 2 + blockAmount
return { paletteIdx = paletteIdx, text = table.concat(textArr), endByte = endByte }
end
local function unpack_blocks(packed)
local size = getUint16(packed, 1)
local palette = {}
local idx = 3
for i = 1, 300 do
table.insert(palette, {
getUint8(packed, idx + 1),
getUint8(packed, idx + 2),
getUint8(packed, idx + 3)
})
idx = idx + 3
end
local blocks_unpacked = {}
idx = idx + 1
while idx <= #packed do
local block = unpack_block(packed, idx)
idx = block.endByte + 1
block.color = rgbToHex(table.unpack(palette[block.paletteIdx + 1]))
block.paletteIdx = nil
block.endByte = nil
table.insert(blocks_unpacked, block)
end
return blocks_unpacked
end
return { unpack_blocks = unpack_blocks }
--[[
local base64 = require("base64")
local lz4 = require("lz4")
local bytes = base64.decode(image)
local byte_table = {}
for num in string.gmatch(bytes, "%d+") do
table.insert(byte_table, tonumber(num))
end
local decomp = lz4.decompress(byte_table)
local unpacked = unpack_blocks(decomp)
local json = <..json serializer..>:serialize(unpacked);
]]