User Tools

Site Tools


script_syntax

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
script_syntax [2021/05/05 12:37] justinscript_syntax [2023/11/06 14:11] justin
Line 2: Line 2:
 ---- ----
  
-**Bauxite**, the scripting language for RPG in a Box, is a simple imperative language designed specifically for the engine. The syntax for Bauxite is useful to know for creating [[quick script|quick scripts]] for tiles and objects in the [[Map Editor]] or for script nodes in the [[Dialogue Editor]].+**Bauxite**, the scripting language for RPG in a Box, is designed specifically for the engine. The syntax for Bauxite is useful to know for creating [[quick script|quick scripts]] for tiles and objects in the [[Map Editor]] or for script nodes in the [[Dialogue Editor]].
  
 =====Statement Syntax===== =====Statement Syntax=====
Line 112: Line 112:
  
 =====Data Types===== =====Data Types=====
-There are several data types available in the scripting language used to represent a value or, in the case of arrays, a collection/list of values. These values can be stored in variables or properties (see assignment statements above, or [[Set Global Property]] and [[Set Entity Property]]), and can be compared to another value of the same type using a [[conditional expression]].+There are several data types available in the scripting language used to represent a value or, in the case of an array or codex, a collection/list of values. These values can be stored in variables or properties (see assignment statements above, or [[Set Global Property]] and [[Set Entity Property]]), and can be compared to another value of the same type using a [[conditional expression]].
  
 ^Type^Examples^ ^Type^Examples^
 |[[String]]|"Hello, world!", "This is a string."| |[[String]]|"Hello, world!", "This is a string."|
-|[[Decimal]]|17, 3.14159|+|[[Number]]|17, 3.14159|
 |[[Boolean]]|true, false| |[[Boolean]]|true, false|
 |[[Coordinate]]|coord[1, 2, 3], entity["slime_01"].coord| |[[Coordinate]]|coord[1, 2, 3], entity["slime_01"].coord|
 |[[Color]]|color[255, 0, 255]| |[[Color]]|color[255, 0, 255]|
 |[[Entity]]|player, self, entity["sign"]| |[[Entity]]|player, self, entity["sign"]|
-|[[Array]]|group["room_01"], self.groups|+|[[Array]]|array["A", "B", "C"], group["room_01"], self.groups
 +|[[Codex]]|codex["id": "ITEM_0001", "count": 5]|
 |Null|null| |Null|null|
  
-====Arrays====+====Array====
 An [[array]] is simply a list of values, such as the [[entity|entities]] belonging to a [[groups|group]], the tags assigned to a model, or even a custom set of values defined directly within a [[script]]. Refer to the [[Array]] documentation for more examples, as well as information about the available functions that can be used to manipulate an [[array|array's]] values. An [[array]] is simply a list of values, such as the [[entity|entities]] belonging to a [[groups|group]], the tags assigned to a model, or even a custom set of values defined directly within a [[script]]. Refer to the [[Array]] documentation for more examples, as well as information about the available functions that can be used to manipulate an [[array|array's]] values.
 ^Type^Description^Example^ ^Type^Description^Example^
Line 155: Line 156:
 </code> </code>
 Loads a random map from the "dungeon_map_list" array variable ("room1" through "room4"), then gives the player 5 of a random item from the "item_list" array variable. Loads a random map from the "dungeon_map_list" array variable ("room1" through "room4"), then gives the player 5 of a random item from the "item_list" array variable.
 +
 +====Codex====
 +A [[codex]] is a data type with its data stored as key/value pairs. The key is a unique [[string]] and acts as a lookup for its corresponding value within the codex, similar to a dictionary. See [[Codex]] for more information and some scripting examples.
  
 ====Null==== ====Null====
Line 202: Line 206:
 </code> </code>
 Gives either ITEM_0001 or ITEM_0002 to the player, with a 25% chance that the item will be ITEM_0001. Gives either ITEM_0001 or ITEM_0002 to the player, with a 25% chance that the item will be ITEM_0001.
 +
 +====Dice Rolls====
 +In addition to the random number function, Bauxite also supports a dice notation similar to that of Dungeons & Dragons. Specifically, **XdY**, where "X" is the number of dice to roll and "Y" is how many sides the dice have.
 +
 +**Examples:**
 +<code bauxite>
 +$result = 1d6;
 +</code>
 +Gives the result of rolling one six-sided die.
 +
 +<code bauxite>
 +$result = 2d8 + 5;
 +</code>
 +Gives the result of rolling two eight-sided dice, adding them together, then adding 5 to the total.
  
 ====Range==== ====Range====
Line 226: Line 244:
 </code> </code>
 List of integers from 5 to, but not including, 0, with an increment of -1 (i.e. 5, 4, 3, 2, 1). List of integers from 5 to, but not including, 0, with an increment of -1 (i.e. 5, 4, 3, 2, 1).
 +
 +====Duplicate====
 +The **duplicate** function creates a unique copy of an [[array]] or [[codex]]. Since the copy is unique, you can modify its data without affecting the original [[array]] or [[codex]].
 +
 +With the code below where the value in **$items** is simply stored into another variable, in this case **$items_copy**, the new variable or property will only contain a reference to the original [[codex]], so any changes to one will affect the other (i.e. both "print" statements will display 10).
 +<code bauxite>
 +$items = codex["id": "ITEM_0001", "count": 5];
 +$items_copy = $items;
 +$items_copy["count"] = 10;
 +print($items["count"]);
 +print($items_copy["count"]);
 +</code>
 +
 +In the example below, a copy of **$items** is made using the "Duplicate" function. Since it's now a unique copy of the [[codex]], if the "count" key is changed to 10 for the **$items_copy** variable, the original **$items** [[codex]] will remain unchanged. Therefore, the first "print" statement will display 5, while the second "print" statement will display 10.
 +<code bauxite>
 +$items = codex["id": "ITEM_0001", "count": 5];
 +$items_copy = duplicate($items);
 +$items_copy["count"] = 10;
 +print($items["count"]);
 +print($items_copy["count"]);
 +</code>
  
 ====Inverse==== ====Inverse====
Line 257: Line 296:
 </code> </code>
  
 +====Math Functions====
 +^Name^Description^Example^
 +|round(x)|Rounds x to the nearest whole number.|round(16.8) will return 17|
 +|mod(x, y)|Gives the remainder of x divided by y.|mod(8, 3) will return 2|
 +|pow(x, y)|Gives the result of x raised to the power of y.|pow(2, 5) will return 32|
 +|sqrt(x)|Gives the square root of x.|sqrt(16) will return 4|
 +|abs(x)|Gives the absolute value of x.|abs(-17) will return 17|
 +|floor(x)|Rounds x downwards to the nearest whole number.|floor(17.7) will return 17|
 +|ceil(x)|Rounds x upwards to the nearest whole number.|ceil(16.2) will return 17|
 +
 +====Custom Functions====
 +Custom functions provide a way to define reusable logic that can be called later in the same [[script]]. Custom functions can optionally include input arguments that values are passed into (e.g. the way a map name is passed as a [[string]] into the built-in [[Load Map]] function). They can also optionally return a value to the calling code. Refer to the code below for an example of a custom function that takes two input arguments, adds them together, then returns the total.
 +
 +**Example:**
 +<code bauxite>
 +function add_numbers($num1, $num2) begin
 +   $total = $num1 + $num2;
 +   return $total;
 +end;
 +$result = add_numbers(10, 7);
 +display_message("Result: " + str($result));
 +</code>
 ~~NOTOC~~ ~~NOTOC~~
script_syntax.txt · Last modified: 2023/11/06 14:13 by justin