DECORATE supports complex mathematical expressions as parameters for codepointers. (Unfortunately, expressions are not supported for the values of properties.) The expression may include standard operators (+, -, *, /, <<, >>, |, etc.), math functions, and certain actor properties (occasionally called “keywords” in the forums) to compare values with. A_JumpIf, in particular, is meant to be used with expressions, but they can be used for any numeric (integer or floating point) parameter. For example, using velx, vely, and velz in A_SpawnItemEx to preserve velocity, or using args as arguments to a call of ACS_Execute.
- abs(x) — returns the absolute value of x
- cos(x), sin(x) — trigonometry functions, x must be in degrees
- sqrt(x) — returns the square root of x
- random[identifier](min, max) — returns a random integer value between min and max
- random2[identifier](mask) — returns a random integer value between -mask and +mask. It is roughly equivalent to random(0, mask) - random(0, mask). If no mask is provided (random2()), the maximum value of 255 is used instead. Mask is used as a binary mask, e.g. if 9 is used, the random results can be [0, 1, 8, 9] - [0, 1, 8, 9], so it is advised to use as a mask values one less than a power of two, such as 1, 3, 7, 15, 31, 63, or 127.
- frandom[identifier](min, max) — returns a random floating point value between min and max
- randompick[identifier](int, ...) — picks a number from the numbers placed in it. This can take an unlimited amount of parameters, i.e. randompick(1, 4, 12, 16) will choose one of the four numbers.(development version only)
- frandompick[identifier](float, ...) — similar to randompick but for float-point values. (development version only)
identifier is optional. Calls to a random function with an identifier do not interfere with the RNG for calls with a different identifier, which can be used to make the outcome of some events unaffected by others.
- ACS_ExecuteWithResult — runs a script and uses its return value.
- ACS_NamedExecuteWithResult — runs a named script and uses its return value.
- CallACS — shorter alias for ACS_NamedExecuteWithResult.
- CheckClass — checks an actor's class name, returning true if it matches the passed parameter. (development version only)
- IsPointerEqual — compares two actor pointers, returning true if they reference the same actor. (development version only)
There are a few variables you can use for dynamic data in DECORATE definitions. These are:
- Actor position and movement
- x — The actor's X position in the world.
- y — Same, but for Y.
- z — Same, but for Z.
- angle — Actor's angle, in degrees
- ceilingz — See GetActorCeilingZ
- floorz — See GetActorFloorZ
- pitch — The actor's pitch. (Presumably, in degrees, based on the above.)
- roll - The actor's roll. (development version only) (GZDoom only: not supported by ZDoom)
- velx or momx — Actor's velocity along the absolute X axis. The "mom" names are (deprecated).
- vely or momy — Same, but for Y.
- velz or momz — Same, but for Z.
- Actor properties
- accuracy — The accuracy of the Actor.
- alpha — The Alpha value of the Actor.
- args — Arguments passed to the thing special; args through args are valid.
- damage — The actor's Damage.
- health — How much health the Actor has left.
- height — The actor's Height.
- mass — The actor's Mass.
- meleerange — The actor's MeleeRange.
- radius — The actor's Radius.
- reactiontime — The actor's ReactionTime.
- scaleX — The actor's horizontal scale. See A_SetScale.
- scaleY — The actor's vertical scale. See A_SetScale.
- score — The actor's score.
- special — ID of the special currently assigned to this actor.
- speed — The actor's Speed. (development version only)
- stamina — The stamina of the Actor.
- tid — The actor's TID.
- tidtohate — TID of the current assigned target. (see Thing_Hate.)
- Constant Variables — Constant variables can be defined both inside and outside of an actor.
- User Variables — user variables are defined as "var int user_(name);" in actor properties.
- User Arrays — user arrays are defined as "var int user_(name)[(size)];" in actor properties.
- waterlevel — How "submerged" the actor is in a Transfer_Heights or 3D floor water pool:
- 0: Not submerged at all (e.g. standing on solid ground or on shallow TERRAIN-based water)
- 1: Less than half submerged ("ankle deep")
- 2: At least half submerged ("waist deep")
- 3: Entirely submerged (completely underwater)
See Projectile Trap