BooBoo Tutorial
Posted by tremblin on 2024-06-24, 7:43am
Avatar
This tutorial assumes you have some prior programming experience.

BooBoo is extremely easy to learn, and I'm not going to cover any API here,
but only basic syntax. Refer to the docs for API.

--

BooBoo could be considered similar to a high-level assembly language.
Everything starts with an opcode (function) followed by parameters. The
only syntax identifying the end of one statement and the start of another
is the presence of another API function:

<func> <param1> <param2> <func2> <param1> <param2> <param3> <func3> <func4>

Everything between functions is slurped up and passed to the preceding
function.

Return values are by convention passed back into the first parameter after
the function call:

<func> <ret> <param1> <param2>

Functions can be defined:

function derp
{
        call do_something()
}

And can return values:

function derp2 a b c
{
        return (+ a b c)
}
...
number result
call_result result derp2 32984 438 13

--

Expressions also use Polish notation (operation first) format. A C expression
like:

x = (x * (x + y))

Can be written as:

= x (* x (+ x y))

--

Hello world:

print "Hello, World!\n"

Hello world Game Launcher (red screen):

function draw { clear 255 0 0 }

--

Loops:

You can do loops with the branch functions (je, jge, etc) but more commonly
you can use a for loop:

for <var> <start value> <expression> <increment> <label>

for example to loop to 10:

number i
for i 0 (< i 10) 1 again
        print "%\n" i
:again

--

Conditionals:

if <expression> <label> <elseif-expression> <label> <else label>

for example:

if (== i 10) ten (== i 9) nine below
        print "TEN!\n"
:ten
        print "NINE!\n"
:nine
        print "BELOW NINE!\n"
:below

--

You can define your own expression sub handlers. For example (== i 10) is an
expression that evaluates to TRUE if i equals 10. You can define operators like
==:

function esin x
{
        sin x
        return x
}
...
= foo (esin 3.14159)

--

Vectors and maps:

The docs have more info, but you can access vectors and maps with fishes.
You can fish into a vector:

[v x y z] - this will dig into a few vectors to pull a value out

It's equivalent in C++ to:

v[x][y][z]

Or a map:

[m "foo" "bar" "baz"] - this will dig into a few maps to pull out "baz"

Which is equivalent to m["foo"]["bar"]["baz"] in C++.

You can nest them:

[v x y [m "foo" "bar" [v2 z]]]

In C++ that would be v[x][y][m["foo"]["bar"][v2[z]]];

Or you can mix them with expressions:

[v x y (+ z 1)]

These can be used anywhere a variable can be used.
Replies

No replies have been posted.

Post a Reply

Please log in to reply.

© 2024 CMYKilluminatiNetwork