Built-in Types

Built-in types available in the game runtime.

Logical Types

Integer Types

You can declare inline numbers using Cast<T>(value). It is useful for Int8/Uint8 and Int16/Uint16 for example:

// Fake function to use:
public static func UseNumber(a: Int8, ua: Uint8, b: Int16, ub: Uint16) -> Void;

// Use explicit cast
UseNumber(Cast<Int8>(127),
          Cast<Uint8>(255u),
          Cast<Int16>(32767),
          Cast<Uint16>(65535u));

Floating-Point Types

Literal Types

String values are stored internally as a null-terminated character array, unfortunately the bytecode doesn't support accessing the individual characters as an array.

CName values are stored in-engine as a 64-bit hash key to a interned string pool. Class, function and field names are stored in the CName pool, so any methods that need a dynamic reference a scripted component will use a CName value.

ResRef values are similar to CName values, except they specifically refer to archive resource files and presumably use a separate optimized string pool. Unlike CName, ResRef doesn't have any defined operators.

TweakDBID is used as the primary key for all *_Record types stored in TweakDB, the engine's internal database.

Other Types

Operators

The RED4 scripting runtime implements most operators as native functions. Only the equals == and not equals != operators are implemented in bytecode. The redscript compiler provides a number of operator symbols as shorthand.

This table lists the available operators (in precedence block order) and what types support them.

Notes

  1. The Logical Not ! operator for TweakDBID is overridden to return !TDBID.IsValid(a)

  2. Strings can be multiplied by an Int32 to repeat the string:

    public static func OperatorMultiply(a: String, count: Int32) -> String
  3. String addition is concatenation. There are native functions to allow most types can be concatenated with String

  4. CName and TweakDBID addition is concatenation (and presumably involves some kind of internal lookup to a known value)

  5. The redscript compiler doesn't currently support the == and != symbols for the CName type, use the Equals(a,b) and NotEquals(a,b) intrinsic functions for now.

Last updated