ACS constants

From Eternity Wiki
Jump to: navigation, search

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