DECORATE expressions

From ZDoom Wiki
Jump to: navigation, search

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.

Mathematical functions

  • abs(x) — returns the absolute value of x.
  • exp(x) - Returns the base-e exponential function of x, which is e raised to the power x: ex .(development version a862f72 only)
  • log(x) - Returns the natural logarithm of x -- the opposite of exp. (development version a862f72 only)
  • log10(x) - Returns the common (base-10) logarithm of x. (development version a862f72 only)
  • ceil(x) - Rounds x upward to the next closest integral value. Result is still floating point. (development version a862f72 only)
  • floor(x) - Rounds x down to the next closest integral value. Result is still floating point. (development version a862f72 only)
  • sqrt(x) — Returns the square root of x.
  • min(float or int, ...) - Gets the smallest value of all values listed. Can take any amount of numbers, and can solve both ints and floats. (development version 1ffb7ad only)
  • max(float or int, ...) - Gets the largest value of all values listed. Can take any amount of numbers, and can solve both ints and floats. (development version 1ffb7ad only)
  • clamp(src, min, max) - Returns src within the range of min and max inclusively. All parameters can be ints or floats. (development version fd78686 only)

Trigonometry functions

Randum number functions

  • 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.(New from 2.8.1)
  • frandompick[identifier](float, ...) — similar to randompick but for float-point values. (New from 2.8.1)

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 functions

DECORATE functions


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 in degrees.
  • roll - The actor's roll. Currently, this only really affects players such as the rotation of view. (New from 2.8.1) Graficon.gif (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[0] through args[4] 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. (New from 2.8.1)
  • stamina — The stamina of the Actor.
  • tid — The actor's TID.
  • tidtohate — TID of the current assigned target. (see Thing_Hate.)
  • threshold — The actor's Threshold. (development version c940c2b only)
  • defthreshold — The actor's DefThreshold. (development version 43b4d45 only)
  • Constant VariablesConstant variables can be defined both inside and outside of an actor.
  • User Variablesuser 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