Difference between revisions of "Small"

From Eternity Wiki
Jump to: navigation, search
m (level->game)
(formatting and stuff)
Line 1: Line 1:
Small is a scripting language created by ITB CompuPhase, it uses C like syntax and is Eternity's main scripting language, replacing the Fragglescript of earlier versions. To be used in Eternity, the script files must first be compiled using the sc executable. Script files usually have the extension .sma but files of any extension can be compiled. Assuming the script has no errors, the compiler should output an amx file which can be loaded into a wad for use with Eternity.  
+
'''Small''' is a scripting language created by ITB CompuPhase; it uses a [[Wikipedia:C programming language|C]]-like syntax and is [[Eternity]]'s main scripting language, replacing the [[Fragglescript]] of earlier versions. To be used in Eternity, the script files must first be compiled using the <tt>sc</tt> executable. Script files usually have the extension <tt>.sma</tt>, but files of any extension can be compiled. Assuming the script has no errors, the compiler should output an <tt>.amx</tt> file, which can be loaded into a [[Doom wiki:WAD|WAD]] for use with Eternity.  
  
There are two types of script, gamescript and levelscript. Gamescripts work over a whole gaming session, while levelscripts only work on maps which have specified that script in their level info.  To use a script file as a gamescript, the compiled script file should be loaded into a wad and given the lump name <code>GAMESCR</code>. These gamescript files will work over every level.
+
== Script types ==
  
Levelscripts are loaded using a different method. To specify a script for use in a single map, <code>levelscript=MYSCRIPT</code> should be added to the map's [[MapInfo]]. Here, <code>MYSCRIPT</code> should be replaced with your script's lump name, which can be anything.
+
There are two types of script: gamescript and levelscript. Gamescripts work over a whole gaming session, while levelscripts only work on maps which have specified that script in their level info. To use a script file as a gamescript, the compiled script file should be loaded into a WAD and given the lump name <tt>GAMESCR</tt>. These gamescript files will work over every level.  
  
== Triggering Scripts ==
+
Levelscripts are loaded using a different method. To specify a script for use in a single map, <tt>levelscript=MYSCRIPT</tt> should be added to the map's [[MapInfo]]. Here, <tt>MYSCRIPT</tt> should be replaced with your script's lump name, which can be anything.
  
There are many ways to start a script. The most common way is to start a script when a linedef is triggered. To do this, first give the linedef you want to trigger the script a <code>Start</code> script action (linedef actions 273-280) and a unique tag number. For example, if we want our script to start when the player walks over a linedef, use linedef action 280 and give the linedef a tag of 1, for example:
+
== Triggering scripts ==
 +
 
 +
There are many ways to start a script. They can be triggered by a linedef, the start of a map, or a codepointer specified on a Thing.
 +
 
 +
=== Triggering via linedef ===
 +
 
 +
The most common way is to start a script when a linedef is triggered. To do this, first give the linedef you want to trigger the script a <tt>Start</tt> script action (linedef actions 273-280) and a unique tag number. For example, if we want our script to start when the player walks over a linedef, use linedef action 280 and give the linedef a tag of 1. The script would then look like this:
  
 
   public Script1()
 
   public Script1()
Line 14: Line 20:
 
   }
 
   }
  
Note that the Script## number is the same as the linedef's tag.  
+
Note that the Script## number is the same as the linedef's tag. Compile your script and set up the wad as explained above. Assuming all things have been set up properly, when you walk over that linedef, it will output "Hello World" to the screen.
Compile your script and set up the wad as explained above. Assuming all things have been set up properly, when you walk over that linedef, it will output "Hello World" to the screen.
+
 
 +
=== Triggering on map start ===
  
Another way of starting a script is using the <code>OnInit()</code> function.  
+
Another way of starting a script is using the <tt>OnInit()</tt> function.  
  
 
   public OnInit()
 
   public OnInit()
Line 24: Line 31:
 
   }
 
   }
  
This script will output "Hello World" when the map starts up. This could be useful for starting a series of callbacks for animating HUD sprites or rising/lowering sectors.
+
This script will output "Hello World" when the map starts up. This could be useful for starting a series of callbacks for animating HUD sprites or raising/lowering sectors.
  
The final way is to use the StartScript codepointer on a Thing's frame. The StartScript codepointer uses the first two args to decide the script number to execute and the script type (whether it is levelscript or gamescript). For example:
+
=== Triggering by Thing codepointer ===
 +
 
 +
The final way is to use the StartScript codepointer on a Thing's frame. The StartScript codepointer uses the first two args to decide the script number to execute and the script type (whether it is levelscript or gamescript). For example, the [[EDF]] file to do this is:
  
 
   stdinclude(root.edf)
 
   stdinclude(root.edf)
Line 36: Line 45:
 
   }
 
   }
  
Load the EDF with your map and script, and whenever you kill an imp (therefore going onto the frame S_TROO_DIE1, it will run script 1, outputting "Hello World". As this script is a gamescript it will do this on every map.
+
Load the EDF with your map and script, and whenever you kill an imp (therefore going onto the frame S_TROO_DIE1, it will run script 1, outputting "Hello World". As this script is a gamescript, it will do this on every map.
 +
 
 +
[[Category:Scripting]]

Revision as of 02:45, 5 January 2006

Small is a scripting language created by ITB CompuPhase; it uses a C-like syntax and is Eternity's main scripting language, replacing the Fragglescript of earlier versions. To be used in Eternity, the script files must first be compiled using the sc executable. Script files usually have the extension .sma, but files of any extension can be compiled. Assuming the script has no errors, the compiler should output an .amx file, which can be loaded into a WAD for use with Eternity.

Script types

There are two types of script: gamescript and levelscript. Gamescripts work over a whole gaming session, while levelscripts only work on maps which have specified that script in their level info. To use a script file as a gamescript, the compiled script file should be loaded into a WAD and given the lump name GAMESCR. These gamescript files will work over every level.

Levelscripts are loaded using a different method. To specify a script for use in a single map, levelscript=MYSCRIPT should be added to the map's MapInfo. Here, MYSCRIPT should be replaced with your script's lump name, which can be anything.

Triggering scripts

There are many ways to start a script. They can be triggered by a linedef, the start of a map, or a codepointer specified on a Thing.

Triggering via linedef

The most common way is to start a script when a linedef is triggered. To do this, first give the linedef you want to trigger the script a Start script action (linedef actions 273-280) and a unique tag number. For example, if we want our script to start when the player walks over a linedef, use linedef action 280 and give the linedef a tag of 1. The script would then look like this:

  public Script1()
  {
     _Printf( _MSG_NORMAL, "Hello World");
  }

Note that the Script## number is the same as the linedef's tag. Compile your script and set up the wad as explained above. Assuming all things have been set up properly, when you walk over that linedef, it will output "Hello World" to the screen.

Triggering on map start

Another way of starting a script is using the OnInit() function.

  public OnInit()
  {
     _Printf( _MSG_NORMAL, "Hello World");
  }

This script will output "Hello World" when the map starts up. This could be useful for starting a series of callbacks for animating HUD sprites or raising/lowering sectors.

Triggering by Thing codepointer

The final way is to use the StartScript codepointer on a Thing's frame. The StartScript codepointer uses the first two args to decide the script number to execute and the script type (whether it is levelscript or gamescript). For example, the EDF file to do this is:

  stdinclude(root.edf)
  framedelta
  {
     name = S_TROO_DIE1    // Frame we want to start the script on
     action = StartScript  // The startscript codepointer
     args = {1,0}          // Codepointer's arguments, starts script 1 and sets the type to game (0)
  }

Load the EDF with your map and script, and whenever you kill an imp (therefore going onto the frame S_TROO_DIE1, it will run script 1, outputting "Hello World". As this script is a gamescript, it will do this on every map.