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.
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.
You can change edit modes with Tab. There are three edit modes:
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.
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
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)
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
any thrown text can be catched by pressing alt:
carried text can be stamped by pressing enter:
this is very useful to draw patterns
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>
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.
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.
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:
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.
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.
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:
$initcolor=whitebg=blue
When pressing spacebar to release text, if it is a command, it will be executed.
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.
(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.
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