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
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
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
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
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