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