local big = require("bigfont") local m = peripheral.find("monitor") local ok = true local shades = { colors.toBlit(colors.red), colors.toBlit(colors.purple), colors.toBlit(colors.magenta), colors.toBlit(colors.pink) } local book = { {}, { "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "e", "e", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f", "c", "c", "e", "e", "e", "e", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "f", "f", "f", "f", "f", "f", "c", "c", "c", "c", "c", "c", "e", "e", "e", "e", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "f", "f", "f", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "e", "e", "e", "e", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "f", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "e", "e", "e", "e", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c"}, { "f", "f", "c", "c", "0", "0", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "e", "e", "e", "e", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "0", "0"}, { "f", "c", "c", "0", "0", "0", "0", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "e", "e", "e", "e", "c", "c", "c", "c", "c", "c", "c", "0", "0", "0", "0", "0"}, { "f", "f", "c", "c", "0", "0", "0", "0", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "e", "e", "4", "4", "c", "c", "c", "0", "0", "0", "0", "0", "0", "0", "0"}, { "f", "f", "f", "c", "c", "0", "0", "0", "0", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "4", "4", "4", "4", "0", "0", "0", "0", "0", "0", "0", "0", "c", "c", "c"}, { "f", "f", "f", "f", "c", "c", "0", "0", "0", "0", "c", "c", "c", "c", "c", "c", "c", "c", "c", "c", "4", "4", "4", "4", "0", "0", "0", "0", "0", "c", "c", "c"}, { "f", "f", "f", "f", "f", "c", "c", "0", "0", "0", "0", "c", "c", "c", "c", "c", "c", "0", "0", "0", "0", "4", "4", "e", "0", "0", "c", "c", "c"}, { "f", "f", "f", "f", "f", "f", "c", "c", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "e", "e", "e", "c", "c"}, { "f", "f", "f", "f", "f", "f", "f", "c", "c", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "c", "e", "e"}, { "f", "f", "f", "f", "f", "f", "f", "f", "c", "c", "0", "0", "0", "0", "0", "0", "0", "c", "c", "c"}, { "f", "f", "f", "f", "f", "f", "f", "f", "f", "c", "c", "c", "c", "c", "c", "c", "c"}, } local function getBook() local out = {} for i = 1, #book do out[i] = {} for j = 1, #book[i] do out[i][j] = book[i][j] end end return out end local frames = {} local period = 1886 local sins = function(x, y, offset) return math.sin((x+(y*(math.cos(offset/100)))+offset)/4)-0.5, (math.sin(((x*(math.cos(offset/150)+1))-y+(offset/2))/5)-0.5) end local indices = function(sin1, sin2) return math.floor(sin1*7.2)+1, math.floor(sin2*5)+2 end local function makeFrame(p) local book = getBook() frames[p] = {} for i = 1, #book do for j = 1, #book[i] do local sin1, sin2 = sins(i, j, p) local shi1, shi2 = indices(sin1, sin2) if sin1 > 0 and book[i][j] ~= "f" and shi1 > 1 and shi1 >= shi2 then book[i][j] = shades[shi1] end if sin2 > 0 and book[i][j] ~= "f" and shi2 >= shi1 then book[i][j] = shades[shi2] end end frames[p][i] = table.concat(book[i], "") end end local function renderFrame(frame) local book = frames[frame] for j = 1, #book do m.setCursorPos(1, j) local blank = (" "):rep(#(book[j])) m.blit(blank, blank, book[j]) end end -- setup frames local frac = math.floor(period/3) for p = 1, period do makeFrame(p) if p%frac == 0 then sleep() -- be nice end end local function run() while true do for i = 1, #frames do if ok then renderFrame(i) sleep() else sleep(1) end end end end local function esc() local exit = false while not exit do local _, k = os.pullEvent("key_up") if k == keys.space then return end end end local function text() local function init() m.setTextScale(1) m.setCursorBlink(false) m.setBackgroundColor(colors.black) m.clear() local sx, sy = m.getSize() local edge = 36 local function center(y, text, offset) m.setCursorPos(math.ceil(((offset or 0)/2)+(sx/2)-(#text/2)), y) m.write(text) end if sx < 82 then ok = false printError("Must be displayed on a monitor of size 8x3 or 8x4.") big.writeOn(m, 2, "\2 NT.") return else ok = true end m.setTextColor(colors.lime) big.writeOn(m, 1, "Home of the \1641", edge+2, 2) big.writeOn(m, 1, "Enchanted Book.", edge+2, 5) local nameX, nameY local descriptionY if sy == 19 then nameX, nameY = edge+9, 9 descriptionY = 13 else nameX, nameY = edge-6, 21 descriptionY = 9 end m.setBackgroundColor(colors.gray) big.writeOn(m, 1, "books.kst", nameX, nameY) for y = nameY, nameY+2 do m.setCursorPos(nameX-1, y) m.write(" ") end m.setBackgroundColor(colors.black) local texts = { [0] = "Tools, Armor, and MORE", [2] = "--- Locations ---", [3] = "2F Coconut Mall | -30 80 -280", [4] = "Nether | 50 62 -490", [5] = "SC Public Library | 190 69 -170", [6] = "More coming soon! \2" } local max = 0 for offset, text in pairs(texts) do max = math.max(offset, max) end if sy > 19 then texts[max+2] = "Don't forget to `/sethome books`!" m.setTextColor(colors.gray) center(sy, "books.kst is a supporter of open waterways and a member of the SCWPS.") end m.setTextColor(colors.lime) for offset, text in pairs(texts) do center(descriptionY+offset, text, edge) end end init() while true do local _, side = os.pullEvent("monitor_resize") if side == peripheral.getName(m) then init() end end end parallel.waitForAny(text, esc, run)