--:Minify:-- local kernel=... if not kernel.cct then return end local plt={ [0]=0x000000,0x0b0b0b,0x222222,0x444444,0x555555,0x777777,0x888888,0xaaaaaa, 0xbbbbbb,0xdddddd,0xeeeeee,0x00000b,0x000022,0x000044,0x000055,0x000077, 0x000088,0x0000aa,0x0000bb,0x0000dd,0x0000ee,0x000b00,0x002200,0x004400, 0x005500,0x007700,0x008800,0x00aa00,0x00bb00,0x00dd00,0x00ee00,0x0b0000, 0x220000,0x440000,0x550000,0x770000,0x880000,0xaa0000,0xbb0000,0xdd0000, 0xee0000,0x000033,0x000066,0x000099,0x0000cc,0x0000ff,0x003300,0x003333, 0x003366,0x003399,0x0033cc,0x0033ff,0x006600,0x006633,0x006666,0x006699, 0x0066cc,0x0066ff,0x009900,0x009933,0x009966,0x009999,0x0099cc,0x0099ff, 0x00cc00,0x00cc33,0x00cc66,0x00cc99,0x00cccc,0x00ccff,0x00ff00,0x00ff33, 0x00ff66,0x00ff99,0x00ffcc,0x00ffff,0x330000,0x330033,0x330066,0x330099, 0x3300cc,0x3300ff,0x333300,0x333333,0x333366,0x333399,0x3333cc,0x3333ff, 0x336600,0x336633,0x336666,0x336699,0x3366cc,0x3366ff,0x339900,0x339933, 0x339966,0x339999,0x3399cc,0x3399ff,0x33cc00,0x33cc33,0x33cc66,0x33cc99, 0x33cccc,0x33ccff,0x33ff00,0x33ff33,0x33ff66,0x33ff99,0x33ffcc,0x33ffff, 0x660000,0x660033,0x660066,0x660099,0x6600cc,0x6600ff,0x663300,0x663333, 0x663366,0x663399,0x6633cc,0x6633ff,0x666600,0x666633,0x666666,0x666699, 0x6666cc,0x6666ff,0x669900,0x669933,0x669966,0x669999,0x6699cc,0x6699ff, 0x66cc00,0x66cc33,0x66cc66,0x66cc99,0x66cccc,0x66ccff,0x66ff00,0x66ff33, 0x66ff66,0x66ff99,0x66ffcc,0x66ffff,0x990000,0x990033,0x990066,0x990099, 0x9900cc,0x9900ff,0x993300,0x993333,0x993366,0x993399,0x9933cc,0x9933ff, 0x996600,0x996633,0x996666,0x996699,0x9966cc,0x9966ff,0x999900,0x999933, 0x999966,0x999999,0x9999cc,0x9999ff,0x99cc00,0x99cc33,0x99cc66,0x99cc99, 0x99cccc,0x99ccff,0x99ff00,0x99ff33,0x99ff66,0x99ff99,0x99ffcc,0x99ffff, 0xcc0000,0xcc0033,0xcc0066,0xcc0099,0xcc00cc,0xcc00ff,0xcc3300,0xcc3333, 0xcc3366,0xcc3399,0xcc33cc,0xcc33ff,0xcc6600,0xcc6633,0xcc6666,0xcc6699, 0xcc66cc,0xcc66ff,0xcc9900,0xcc9933,0xcc9966,0xcc9999,0xcc99cc,0xcc99ff, 0xcccc00,0xcccc33,0xcccc66,0xcccc99,0xcccccc,0xccccff,0xccff00,0xccff33, 0xccff66,0xccff99,0xccffcc,0xccffff,0xff0000,0xff0033,0xff0066,0xff0099, 0xff00cc,0xff00ff,0xff3300,0xff3333,0xff3366,0xff3399,0xff33cc,0xff33ff, 0xff6600,0xff6633,0xff6666,0xff6699,0xff66cc,0xff66ff,0xff9900,0xff9933, 0xff9966,0xff9999,0xff99cc,0xff99ff,0xffcc00,0xffcc33,0xffcc66,0xffcc99, 0xffcccc,0xffccff,0xffff00,0xffff33,0xffff66,0xffff99,0xffffcc,0xffffff, } local iplt={} for i=0, #plt do iplt[plt[i]]=i end local l1f,l1d,l2,ops={},{},{},0 local function findClosest(tbl, target) local closest = nil local smallestDiff = math.huge for k, _ in pairs(tbl) do if k==target then return k end local diff = math.abs(k - target) if diff < smallestDiff then smallestDiff = diff closest = k end end return closest end local function aprox(c24) ops = ops + 1 if ops % 1024 == 0 then l1d = {} l1f = {} end if ops % 8192 == 0 then l2 = {} end if l2[c24] ~= nil then return l2[c24] end if l1d[c24] ~= nil then l1f[c24] = l1f[c24] + 1 if l1f[c24] >= 16 then l2[c24] = l1d[c24] l1d[c24] = nil l1f[c24] = nil return l2[c24] end return l1d[c24] end local closestKey = findClosest(iplt, c24) if not closestKey then return nil end local value = iplt[closestKey] l1d[c24] = value l1f[c24] = 1 return value end local function splitFramebufferToStrings(fb, w) local rows = {} for i = 1, #fb, w do local row_chars = {} for j = 0, w - 1 do local val = fb[i + j] if val ~= nil then table.insert(row_chars, string.char(aprox(val))) else break end end table.insert(rows, table.concat(row_chars)) end return rows end local function creategfx(term, id) local active=false term.setGraphicsMode(2) for i=0, #plt do term.setPaletteColor(i,plt[i]) end term.setGraphicsMode(false) term.setPaletteColor(0x1, 0xFFFFFF) term.setPaletteColor(0x2, 0xFF0000) term.setPaletteColor(0x4, 0x00FF00) term.setPaletteColor(0x8, 0x0000FF) term.setPaletteColor(0x10, 0x00FFFF) term.setPaletteColor(0x20, 0xFF00FF) term.setPaletteColor(0x40, 0xFFFF00) term.setPaletteColor(0x80, 0xFF6D00) term.setPaletteColor(0x100, 0x6DFF55) term.setPaletteColor(0x200, 0x24FFFF) term.setPaletteColor(0x400, 0x924900) term.setPaletteColor(0x800, 0x6D6D55) term.setPaletteColor(0x1000, 0xDBDBAA) term.setPaletteColor(0x2000, 0x6D00FF) term.setPaletteColor(0x4000, 0xB6FF00) term.setPaletteColor(0x8000, 0x000000) local handle={ gplt=function() return setmetatable({},{__index=plt,__usermeta=false,__pairs=function() return pairs(plt) end}) end, spixel=function(x,y,c) term.setPixel(x,y,aprox(c)) end, gpixel=function(x,y) return term.getPixel() end, drawFB=function(x,y,fb,w) local f=splitFramebufferToStrings(fb,w) term.drawPixels(x,y,f) end, box=function(x,y,w,h,c,fill) c=aprox(c) if not fill then term.drawPixels(x,y,c,w,1) term.drawPixels(x,y,c,1,h) term.drawPixels(x+w-1,y,c,1,h) term.drawPixels(x,y+h-1,c,w,1) else term.drawPixels(x,y,c,w,h) end end, circle=function(xc,yc,r,c,fill) c=aprox(c) if not fill then local x = 0 local y = r local d = 3 - 2 * r -- Helper function to plot all 8 symmetric points local function plot8Points(x, y) term.setPixel(xc + x, yc + y, c) term.setPixel(xc - x, yc + y, c) term.setPixel(xc + x, yc - y, c) term.setPixel(xc - x, yc - y, c) term.setPixel(xc + y, yc + x, c) term.setPixel(xc - y, yc + x, c) term.setPixel(xc + y, yc - x, c) term.setPixel(xc - y, yc - x, c) end plot8Points(x, y) while y >= x do x = x + 1 if d > 0 then y = y - 1 d = d + 4 * (x - y) + 10 else d = d + 4 * x + 6 end plot8Points(x, y) end else local x = 0 local y = r local d = 3 - 2 * r -- Helper to fill rows using symmetry local function fillRows(x, y) -- Width is (2 * coordinate) + 1 to include the center column local strX = string.rep(string.char(c), 2 * x + 1) local strY = string.rep(string.char(c), 2 * y + 1) -- Draw the horizontal spans term.drawPixels(xc - x, yc + y, {strX}) term.drawPixels(xc - x, yc - y, {strX}) term.drawPixels(xc - y, yc + x, {strY}) term.drawPixels(xc - y, yc - x, {strY}) end fillRows(x, y) while y >= x do x = x + 1 if d > 0 then y = y - 1 d = d + 4 * (x - y) + 10 else d = d + 4 * x + 6 end fillRows(x, y) end end end, line=function(x1,y1,x2,y2,c) x1=math.floor(x1+0.5) y1=math.floor(y1+0.5) x2=math.floor(x2+0.5) y2=math.floor(y2+0.5) c=aprox(c) local w,h=term.getSize(2) local dx=math.abs(x2-x1) local dy=math.abs(y2-y1) local sx=x1-dy then err=err-dy x1=x1+sx end if e2