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
script_syntax [2021/05/05 12:37] justinscript_syntax [2023/11/06 14:13] (current) 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====
 +Bauxite also supports a dice notation similar to that of Dungeons & Dragons for generating random numbers. Specifically, **XdY**, where **X** is the number of dice to roll and **Y** is how many sides the dice have.
 +
 +**Examples:**
 +<code bauxite>
 +$result = 1d20;
 +</code>
 +Gives the result of rolling a twenty-sided die.
 +
 +<code bauxite>
 +$result = 2d8 + 1d6;
 +</code>
 +Gives the result of rolling two eight-sided dice and one six-sided die.
  
 ====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.1620243472.txt.gz · Last modified: 2021/05/05 12:37 by justin