ACS constants

From Eternity Wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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