Ravioli Basics Carrying Strudel Basil Portals Controls Commands Rendering Rules

Ravioli

Its a place to make music, ascii art and shader visuals. Its really young and quickly evolving. Nobody knows where its going. This help page is probably already outdated by the time you are reading this.

Ravioli resets every 25h. Everything will become inaccessible at the end of the ravioli day and there will be a fresh start. Let code die.

Basics

You have a cursor you can move around using the arrow keys, and you can type whatever you want.

Ravioli supports Strudel code, Basil code and some custom code explained in the other tabs.

Modes

You can change edit modes with Tab. There are three edit modes:

  • Replace (block cursor): when you type, you replace whatever was there.
  • Insert (thin cursor): when you type, you push the text to the right of the cursor. You can also delete to move text back.
  • Caw (little crow): you can type and press space to chat with temporary messages or make sounds.

Blocks

Ravioli parses text in blocks of contiguous characters. Code ends up more as blobs than as neat lines. You can tell what is a block by the colored highlights:

If you find that a piece of code doesn't work, i might be because the code in that block is touching some other text that cannot be parsed as your intended language (strudel code touching some random text, for example). Keep some space around your code blobs.

Evaluation

we can evaluate with ctrl+enter, each supported language receives all blocks to evaluate, ignoring the ones that fail to produce meaningful output. this means we can mix text, code and art, without the need to declare anything.

you can tell if a block is running by watching the highlights

Carrying

from any mode, you can press alt to pick up a block of text. you can then carry the text around and drop it somewhere else by pressing alt again:

you cannot carry blocks bigger than twice the grid column size (100 chars by default)

throwing

when carrying text, instead of dropping it with alt, you can also throw it by holding alt, then pressing arrow keys:

in addition to alt+up, you can also press space to throw upwards

catching

any thrown text can be catched by pressing alt:

stamping

carried text can be stamped by pressing enter:

this is very useful to draw patterns

large character stamps

you can pick up a large stamp of the character under the cursor by holding shift before pressing alt

by default it will be made out of rectangles, but if you're in caw mode and already carrying a character, it will be used instead

so you could stamp a heart made of crows or a crow made of hearts, for example

Strudel

This is the coding language used to make music.

Here's the official documentation.

Basil

Basil started as a way to write shorthand Hydra code. It's still reads and behaves very much like Hydra. The current version does not have complete docs yet. Check the discord (#basil) for help

Here is the documentation that is available. Here's Hydra documentation in case it is somehow helpful to you.

Portals

You can make portals to other rooms by using the @ character. If you type @ and a name (for example: @myroom) you create a portal to a room with that name. If you position your cursor on top of the @ and press Enter, you will be sent to that room.

A portal without name (a lonely @ symbol) will always send you to the home room, the one people spawn into by default. If you are ever lost, just type @ and Enter it.

More controls

You can press ALT to grab a block of text, use the arrow keys to move it, and then press ALT again to drop it in place. You can stamp the grabbed text instead of placing it down by pressing Enter.

ALT+Backspace deletes the block of code at your cursor.

Shift+Tab will toggle special character mode, in which your keys will type an alternate group of graphical characters. Use uppercase letters or numbers for even more characters.

Holding shift and moving around will select an area of characters. When you have a selection, you can do the following things:

  • Grab it by pressing ALT.
  • Replace everything in the selected area by typing a character, or delete it by pressing Backspace.
  • Delete it by pressing ALT+backspace, as you would with a code block.
  • Press CTRL+[a number], to fill the selected area with some special box-drawing characters. Different numbers give different styles.
  • Tap shift to unselect.

While in caw mode, you can write stuff and press Spacebar to send a temporary message to chat with others. If you type the name of a sample, like 'crow', it will make the sound.

While holding shift on top of a character, tap alt to pick it up as a big version of it, made out of another character. By default it will be made out of black rectangles, but if you are holding a symbol when you tap alt, that symbol will be used to fill the shape of the character instead.

CTRL+SHIFT+ALT+Backspace to delete everything in a room.

Commands

You can make interactable commands by typing $ and then the name of a command. To execute the command, place your cursor on top of the $ and press enter.

List of commands:

  • $bg=x, $b=x: change the background color of the room. You can use color names or #hex codes.
  • $color=x, $c=x: change the color of text in the room. You can use color names or #hex codes.
  • $curcol=x, $cc=x: change the color of user's cursors. You can use color names or #hex codes.
  • $stalec=x, $sc=x: change the color of afk user's cursors. You can use color names or #hex codes.
  • $accent=x, $ac=x: change the color of user's cursors' eyes. You can use color names or #hex codes.
  • $row=x, $rows=x: change the ammount of character rows in the room, i.e. its width. This doesn't work in the home room.
  • $col=x, $cols=x, $columns=x: change the ammount of character cols in the room, i.e. its height. This doesn't work in the home room.
  • $gravity, $grav, $g: turn your cursor into a platformer character that falls, collides and jumps. Press tab to exit this mode.
  • $fly, $replace: turn your cursor back into the normal replace mode.
  • $collision, $collide: makes your cursor not able to go through characters. change into the insert or caw mode to be able to phase through.
  • $scale=x, $s: change the scale of the ravioli. Default is 2.
  • $export: download a text file of the room.
  • $kill=x: makes whatever character you put on the right of the = "kill" you on contact, sending you back to the start.
  • $sleep, $nap: puts you into afk mode.
  • $infect, $infectall, $cure, $cureall: zombie shennanigans.

Auto-executing commands

You can auto-execute commands so that they get automatically applied for anyone that enters the room. To do this, type $init, and then list the commands bellow (without the $), like this:

$init
color=white
bg=blue

Cawing commands

When pressing spacebar to release text, if it is a command, it will be executed.

Rendering Rules

You can alter the rendering of any character using a rendering rule.

To make a rendering rule you type &a=b replacing a with your character and b with a special expression.

Special expressions are basically just funky looking javascript code.

\a will express the character a.

So for example &a=\b will render the character a as the character b.

Next are functions which modify rendering of their arguments in some way.

Take the invert function for example: i(a) which will render its argument a but will invert every pixel.

Using it would be like &a=i(\b). this code will render the character a as an inverted character b.

You can nest functions to make more complex rendering rules.

For example adding the flip x function to our code to make &a=i(fx(\b)) will render the character a render as a flipped, inverted b.

Function Reference

(Note: _ = _ means an argument is optional and will have that value by default)

i(a) inverts a

fx(a) / fy(a) flips a ertically or horizontally

u(a, b) unions/adds a and b

n(a, b) intersects/multiplies a and b

d(a, b) differences/subtracts b from a

sx(a, b = 1, c = 0) / sy(a, b = 1, c = 0) scrolls a with a speed of b pixels per second and with an offset of c pixels

ax(a = 0, b = 7, ...) / ay(a = 0, b = 14, ...) arranges ... in order vertically or horizontally with an offset of a pixels and a size of b pixels for each ...

a(a = 1, b = 0, ...) shows a single thing from ... in order every a seconds with a time offset of b seconds

r(a) references another rendering rule.

Math and Lambda Function Reference

Use these in place of other values such as numbers.

These will only ever work with numbers or more Math/Lambda functions as arguments (unless stated otherwise).

ma(...) adds all of ...

mm(...) multiplies all of ...

mr(a, b = 1) b divided by a

ms(a, b = 1, c = 1, d = 0) sin(a * c + d) * b

lx(a = 1) / ly(a = 1) returns the pixels x or y position multiplied by a

lt(a = 1) returns the time since start in seconds multiplied by a

source ravioli