The title's is kinda lying but it doesn't matter because it's still inspired by BASIC.
The variation of BASIC this was inspired by was BlitzBASIC. You know, the language used to power SCP: Containment Breach and SCP-087-B?
This is the sequel to this thread: I made a story using the Menus library
The compiler is in chunks (the chunks being blocks) so you can actually read the compiler.
The reason this was built was that Snap! was lagging really hard whenever I moved around in the block editor (most likely because the entire project was in the Stage and the stage had lots and lots of blocks in it)
It seems like Snap! can handle text better than the number of blocks that I had in the block editor. So, I made this.
To add a comment use ;
on a line. Currently, comments cannot be on lines with commands.
There is no multiline comment symbol like in JavaScript.
COMMANDS:
All the commands must be in uppercase for the compiler to understand what your telling it to do.
A String from here on out is text in double-quotes. If you've ever used a programming language before you know what a string is.
SUB
— Think of it as the start of a function or the Sub from VBScript. Must be a string following it.
END
— Ends a Sub/Function or an IfVar statement.
IFVAR
— Checks if a variable is equal, greater, less, or not equal to a constant or a variable. ex:
Variables MUST be in double quotes because variable names can have spaces.
Operators: ==, !=, <=, >=, >, <
The purpose of this command is to add different story routes if you so do please.
JUMP
— Quite literally JUMPS to the sub provided. This command must be preceding a string. Nothing can run after this statement.
CALL
— Runs the sub provided. This command must be preceding a string. Returns to where it left off when the sub is finished.
WAIT
— Waits for the specified amount of time (in seconds). (ex: WAIT 5)
PLAYSND
— Plays the sound provided it exists in the current context. (that being the context it was built in). A string must come after this command.
BROADCAST
— It does exactly what the broadcast block does. Must be preceding a string. If you put AND WAIT
after the name of the broadcast it will wait for all of the receivers to finish before moving on.
The commands that handle the story:
PUSHMSG
— Putting either LEFT or RIGHT after this command will determine where the message is placed. After putting the placement of said message the message must come in the form of a string. If you would like you can put AND CHOOSE
after the message to save time.
General Syntax:
PUSHMSG LEFT "Hello World"
PUSHMSG LEFT "Hello World" AND CHOOSE
CHOOSE
— Shows the GUI asking for the user to choose an option. This needs to be called after pushing the choices onto the choice list. The command below will do that for you.
PUSHCHOICE
— Adds a choice for the user to choose. This must be preceding a string. After specifying the choice the numeric ID must also be given, or you could just put SEED
for it to randomly generate one for you.
General Syntax:
PUSHCHOICE "good afternoon" 0
PUSHCHOICE "good afternoon" SEED
SETTITLE
— Sets the title for the story. Must be preceded by a string.
UPDATE 1.1:
ELSE
— Think of ELSE in an IF/ELSE block.
UPDATE 1.3:
DECL
— Declares a variable in the specified scope.
LET
— The block below:
This declares a variable in the scope that the statement was declared in.
SET
— Think of the SET block in Snap!
Comments on lines with commands are supported. Everything after a ;
gets ignored.
Commands will be added for more functionality.
Enjoy the block I suppose.
The Project: Snap! Build Your Own Blocks
Thank you @bh for bugging Jens to put the Snap! "Block AST" (is there an official name for this yet?) into Snap!
Also, if you think this language can't do much more, remember the phrase "you can do a lot with a little"