Scripting hints

From Adventure Game Studio
Revision as of 05:14, 8 December 2005 by Strazer (talk | contribs) (Shortened Thread links)
Jump to navigation Jump to search


  • Keys not listed in the ASCII Code Table have no guarantees about their keycode numbers and may well overlap keys that are listed. [1]
  • There is no point in using a short rather than an int as a local variable. In fact, ints are faster because the CPU is better at reading/writing 32-bit chunks of memory than it is at 16-bit chunks. [2]
  • There is no fixed limit on the size of global arrays, but as scotch says they use up memory so don't go silly with creating massive ones unless you really need to. [3]
  • The workaround for displaying player-entered strings, in case anyone wants to know, is simply to do the following, since that way, the player string will not be parsed for special tokens: [4]
Display("%s", playerString);
  • You have to place the export after the variable's declaration, so you don't necessarily have to put the exports at the end of scripts. [5]
  • Parameters to functions can be made optional by adding a default value in the import of the function. This even works if you are not actually exporting the function.
import function myfun (int a, int b=5);  // optional int b
  • Optional parameters only work with int and enum parameters, you can't do it with strings or floats.
How about Strings?
  • Basically, to be consistent with Java/C#, the protection level always goes first when using protected functions: [6]
protected import static function get_slots();
  • It's not until a room is loaded that the current viewport size is known. So better not rely on system.viewport_width or system.viewport_height in game_start. [7] (Tracker)
  • You can use return; to abort the rest of the script.
  • Local room scripts have their data segment saved when the room is destroyed, so all variables retain their values (for rooms 1-300 only). This is useful for storing the condition of light switches, for example.
  • RunInventoryInteraction doesn't get run immediately - instead, it gets run when the calling script finishes. Applies only if the interaction runs a script. Interaction editor commands are executed immediately.
  • The number of game loops speech text stays for is: [8]
int gameloops = ((StrLen(text) / game.text_speed) + 1) * GetGameSpeed();
  • Functions cannot return structs or arrays - they can only return primitive types. This includes Strings in AGS v2.71.
  • The character's global inventory variables are integers and can be used to keep track of how many items the character has.