Canvases / Displays
LEDboard
LED character sprite sheet for this script: ledboard_spritesheet.jpg (8000 × 119, 90 characters in one row). Upload it to your inventory as a texture and put it in CharacterSheet; SheetColumns 90, SheetRows 1 and Characters (left empty) already match it.
An LED sign on one material: every cell shows a character from an LED sprite sheet (canvas.CreateTileGrid, only changed cells are sent, up to 20 updates a second with SetUpdateRate), in one of 10 colours (0-9, set in the Inspector) and 10 glow levels (0-9). Programs paint text in three sizes, sprites, shapes, borders and sine waves and animate them with loops; they come from the Programs list (shown in turn), from script events (ProgramEvents), when a player arrives (OnJoinProgram), or from moderators in chat. Everybody sees the same board, also players who arrive later.
Set up: put the LED character sheet in CharacterSheet (all characters in one row, 90 frames, in the order of Characters) and choose the board size (Columns × Rows). Add your username to Moderators for the chat commands: /ledeval <program>, /ledstop, /ledreset, /board <text>, /ledautoswitch on|off, /ledonjoin on|off, /ledframerate <seconds>, /leddebug on|off, /addmod <name>, /removemod <name>.
The program language: instructions separated by commas. Values can be sums and use {i}, your own {variables}, {r=1,9} (a random whole number from 1 to 9), {rw} / {rh} (a random column / row), {rc} (a random colour) and {lastuserjoined}.
textdraw(text, size, x, y, colour, glow)Text: size 1 = one cell per character, 2 = letters 5 cells high, 4 = 8 cells high (made of █). Stays until cleared.
shape(type, width, height, x, y, character, colour, glow)rectangle, circle, splatter or triangle, filled with the character.
border(solid, characters, colour, glow, animated)The characters run round the edge; animated moves them along each time it is drawn.
sinewave(amplitude, frequency, speed, character, colour, glow, thickness)Fills the board with a wave (the rest is cleared); the same call again moves it on.
spritedefine(name, width, height, "pattern")A sprite: its rows one after another in one string (spaces are see-through when painted with transparent on).
paintsprite(name, x, y, colour, glow, transparent, replace, rotation)Paints a sprite. transparent (true when left out) skips spaces; replace swaps the sprite's characters for these, in turn; rotation in degrees.
background(stars) / clear()Dots on every cell / an empty board.
wipe(horizontal) / wipe(vertical) / fade()Transitions that clear the board.
for(start, end, step, instructions...)Repeats the instructions with {i} counting from start to end (for(name, start, end, step, ...) uses {name}); waits FrameDelay after each step; loops can be nested.
wait(seconds)Pauses the program.
name = sumA variable, used as {name}. Sums: + - * / % and brackets, sin cos tan sqrt abs log log10 floor ceil round pow min max, pi.
joineduserslist(width, height, x, y, colour, glow, newest first)Names of players who came, in columns.
stop()Ends the program and clears the board.
Try: /ledeval background(stars),for(1,100,1,border(solid, TESTING, {r=1,9}, {r=1,9}, true),wait(0.05)),clear() or /ledeval for(1,250,1,ti={ti}+({i} * 0.02) * (1 - {i}/100) + sin({i} * 0.05) * 2,sinewave(5, {i}*6, {ti}+4, X, {r=1,9}, 8,8))