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 revision Previous revision
Next revision
Previous revision
script_syntax [2019/04/18 16:03]
127.0.0.1 external edit
script_syntax [2020/01/20 19:30] (current)
justin
Line 2: Line 2:
 ---- ----
  
-The scripting language in RPG in a Box is a simple imperative language designed specifically for the engine. It is based on the language described [[https://​jayconrod.com/​posts/​37/​a-simple-interpreter-from-scratch-in-python-part-1|here]] in the series of articles by Jay Conrod. The syntax 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]].+The scripting language in RPG in a Box is a simple imperative language designed specifically for the engine. The syntax 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]].
  
-=====Statements===== +=====Statement Syntax===== 
-Statements are the basic building blocks of the scripting language and represent a particular action to be taken. ​Currently, a statement can be either a function call or conditional "if/then/​else/​end" statement. Multiple statements must be separated from each other using semicolons (;). Whitespace between statements is ignored, although newlines and indentation are recommended for ease of reading.+Statements are the basic building blocks of the scripting language and represent a particular action to be taken. ​statement can be either a function call, assignment of value to a variable/property, or control statement (i.e. "If" statement, "​While"​ loop, or "​For"​ loop). Multiple statements must be separated from each other using semicolons (;). Whitespace between statements is ignored, although newlines and indentation are recommended for ease of reading.
  
-====Function Calls====+=====Function Calls=====
 Calling a function instructs the game to execute some piece of logic, for example to display a message to the player or to move the camera to a specific location. See [[Scripting Reference]] for a comprehensive list of built-in functions that can be called. Calling a function instructs the game to execute some piece of logic, for example to display a message to the player or to move the camera to a specific location. See [[Scripting Reference]] for a comprehensive list of built-in functions that can be called.
  
Line 20: Line 20:
 </​code>​ </​code>​
  
-====If/​Then/​Else/​End (Conditional)==== +=====Assignment Statements===== 
-The "if/then/else/end" ​syntax ​allow you to branch your logic according to the results of a condition being evaluated. In the order listed, it consists of the keyword "​if",​ a condition to check, the "​then"​ keyword, any statements to execute if the condition is true, optionally the "​else"​ keyword followed by any statements to execute if the condition is not true, and lastly the "​end"​ keyword. See [[Conditional Expression]] for more information and a list of valid comparison operators that can be used in the condition.+Assignment statements allow you to assign values to variables, properties, stats, etc. You can use the "=" operator to place a value directly into a variable or, when working with numeric values, one of the four compound operators to first perform a calculation and then place the resulting value back into variable. 
 + 
 +^Operator^Description^ 
 +|=|Places the value on the right-hand side into the variable on the left-hand side.| 
 +|+=|Adds the value on the right-hand side to the current value of the variable on the left-hand side, then places the resulting value back into the variable.| 
 +|-=|Subtracts the value on the right-hand side from the current value of the variable on the left-hand side, then places the resulting value back into the variable.| 
 +|*=|Multiplies the value on the right-hand side by the current value of the variable on the left-hand side, then places the resulting value back into the variable.| 
 +|/=|Divides the value on the right-hand side by the current value of the variable on the left-hand side, then places the resulting value back into the variable.|  
 + 
 +**Examples:​** 
 +<code freebasic>​ 
 +rand_num = random(1, 20) 
 +</code> 
 +<code lua> 
 +entity["​sign_01"​].property["​message"​] = "I am a sign!"​ 
 +</code> 
 +<code lua> 
 +player.stat["max_hp"​] += 5 
 +</​code>​ 
 + 
 +=====Control Statements===== 
 +Control statements affect the flow of your script, either by branching or looping through a set of statements multiple times. These include "​If"​ statements, "​While"​ loops, and "​For"​ loops. 
 + 
 +====If Statement==== 
 +If statements ​allow you to branch your logic according to the results of a condition being evaluated. In the order listed, it consists of the keyword "​if",​ a condition to check, the "​then"​ keyword, any statements to execute if the condition is true, optionally the "​else"​ keyword followed by any statements to execute if the condition is not true, and lastly the "​end"​ keyword. See [[Conditional Expression]] for more information and a list of valid comparison operators that can be used in the condition.
  
 **Examples:​** **Examples:​**
Line 30: Line 54:
 </​code>​ </​code>​
 <code lua> <code lua>
-if player.inventory contains "Gold Key" then +if player.inventory contains "ITEM_0001" then 
-   ​remove_item("​Gold Key");+   ​remove_item("​ITEM_0001");
    ​display_message("​The door is now unlocked!"​);​    ​display_message("​The door is now unlocked!"​);​
    ​set_entity_property(self,​ "​locked",​ false)    ​set_entity_property(self,​ "​locked",​ false)
Line 39: Line 63:
 </​code>​ </​code>​
  
-=====Literals===== +====While Loop==== 
-A literal represents ​an explicitfixed value. ​Literals ​can be stored in properties (see [[Set Global Property]] and [[Set Entity Property]]) ​or compared to another value of the same type within ​a [[conditional expression]].+While loops allow you to execute a set of statements repeatedly as long as a particular condition evaluates to true. In the order listed, it consists of the keyword "​while",​ a condition to check, the "​do"​ keyword, any statements to execute if the condition is true, and lastly the "​end"​ keyword. See [[Conditional Expression]] for more information and a list of valid comparison operators that can be used in the condition. 
 + 
 +**Example:​** 
 +<code lua> 
 +display_message("​You entered a pool of regeneration!"​);​ 
 +global.property["​regen_hp"​] ​true; 
 +while global.property["​regen_hp"​] do 
 +   ​player.stat["​hp"​] +1; 
 +   wait(2) 
 +end 
 +</​code>​ 
 + 
 +====For Loop==== 
 +For loops allow you execute a set of statements a given number of times based on an iterable expression (e.g. an [[array]] of values). In the order listedit consists of the keyword "​for",​ a variable name that the current ​value will be assigned to, the "​in"​ keyword, an expression to iterate though, the "​do"​ keyword, any number of statements to execute, and lastly the "​end"​ keyword. As [[array]] functionality is still in development,​ there are currently only a small number of uses cases for "​For"​ loops. 
 + 
 +**Example:​** 
 +<code freebasic>​ 
 +display_message("​The explosion damages all of the enemies!"​);​ 
 +for slime_entity in group["​slimes"​] do 
 +   ​damage_entity(slime_entity,​ 5) 
 +end 
 +</​code>​ 
 + 
 +=====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 valuesThese 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^
Line 46: Line 94:
 |[[Decimal]]|17,​ 3.14159| |[[Decimal]]|17,​ 3.14159|
 |[[Boolean]]|true,​ false| |[[Boolean]]|true,​ false|
 +|[[Coordinate]]|coord[1,​ 2, 3], entity["​slime_01"​].coord|
 +|[[Color]]|color[255,​ 0, 255]|
 +|[[Entity]]|player,​ self, entity["​sign"​]|
 +|[[Array]]|group["​room_01"​],​ self.groups|
  
  
 ~~NOTOC~~ ~~NOTOC~~
script_syntax.1555628637.txt.gz · Last modified: 2019/04/18 16:03 by 127.0.0.1