ACS constants
This page contains text copied from the ZDoom wiki.
Constants are values that are always the same when executed. An example of a constant would be 1, "Hello", etc. Constants can also be #define'd.
The syntax of defining a constant is as follows
#define NAME VALUE
Numbers[edit]
These constants can be used as values and also as script numbers.
For example:
#define SNUM 1
#define VAL 3131
script SNUM (void)
{
int x = VAL;
}
Here SNUM would be replaced with 1 and VAL would be replaced with 3131.
This is useful for a constant that is used a lot. If something like the spawn numbers were to be changed, you'd only need to change the constant for the defined spawn numbers.
Use of operators[edit]
Constants can be used to define other constants.
For example:
#define WEAPON_FIST 0
#define WEAPON_CHAINSAW WEAPON_FIST + 1
script "Test" Enter
{
print(i:WEAPON_FIST);
print(i:WEAPON_CHAINSAW);
}
This prints the values 0 and 1 as messages.
You can also make more complex operations.
#define HUD_WIDTH 1024
#define HUD_HEIGHT 768
#define HUD_FWIDTH HUD_WIDTH * 1.0
#define HUD_FCENTERX HUD_FWIDTH / 2
#define HUD_FHEIGHT HUD_HEIGHT * 1.0
#define HUD_FCENTERY HUD_FHEIGHT / 2
script "Test2" Enter
{
print(f:HUD_FWIDTH);
print(i:HUD_HEIGHT);
}
This logs the values 1024.0 and 768 to the console.
String Constants[edit]
You can define string constants as well.
First example:
script 1 Open
{
print(s:"err");
print(s:"err");
}
Second example:
#define STR_err "err"
script 1 Open
{
print(s:STR_err);
print(s:STR_err);
}
Both examples produce identical output.
Library Constants[edit]
You can also place constants in your Libraries. This can be especially useful when, say, applying a TID to the player, or numbers you may want handy for custom functions.
The syntax is much the same as a normal constant, with one change.
#libdefine NAME VALUE
Here is an example of some other useful constants. These constants provide quick shortcuts to cardinal directions for PolyObjects and SetActorAngle.
#libdefine POLY_NORTH 64 #libdefine POLY_SOUTH 192 #libdefine POLY_WEST 128 #libdefine POLY_EAST 0 #libdefine ACTOR_FACE_NORTH 0.25 #libdefine ACTOR_FACE_WEST 0.5 #libdefine ACTOR_FACE_EAST 1.0 #libdefine ACTOR_FACE_SOUTH 0.75