Built-in Types
Built-in types available in the game runtime.
Logical Types
Keyword
Type
Values
Bool
Boolean logic type
true false
Integer Types
Keyword
Type
Range
Example
Int8
8-bit Signed Integer
-128 to 127
let a: Int8 = 161;
Uint8
8-bit Unsigned Integer
0 to 255
let a: Uint8 = 161u;
Int16
16-bit Signed Integer
-32,768 to 32,767
let a: Int16 = 161;
Uint16
16-bit Unsigned Integer
0 to 65,535
let a: Uint16 = 161u;
Int32
32-bit Signed Integer
−2,147,483,648 to 2,147,483,647
let a: Int32 = 161;
Uint32
32-bit Unsigned Integer
0 to 4,294,967,295
let a: Uint32 = 161u;
Int64
64-bit Signed Integer
−9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
let a: Int64 = 161l;
Uint64
64-bit Unsigned Integer
0 to 18,446,744,073,709,551,615
let a: Uint64 = 161ul;
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
Keyword
Type
Prefix
Example
String
Mutable character string
"Hello world"
CName
Non-mutable string constant
n
n"VehicleComponent"
ResRef
Resource reference path
r
r"base\\anim_cooked.cookedanims"
TweakDBID
TweakDB Record ID
t
t"Items.RequiredItemStats"
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
Keyword
Type
Variant
A dynamic type that can store any other type
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.
Type
Symbol
Logical
Integer
Float
String
CName
TweakDBID
Negate
-
-
✓
✓
-
-
-
Logical Not
!
✓
-
-
-
-
✓¹
Bitwise Not
~
-
✓
-
-
-
-
Multiplication
*
-
✓
✓
✓²
-
-
Division
/
-
✓
✓
-
-
-
Modulo
%
-
✓
✓
-
-
-
Addition
+
-
✓
✓
✓³
✓⁴
✓⁴
Subtraction
-
-
✓
✓
-
-
-
Less Than
<
-
✓
✓
-
-
-
Less Than or Equal
<=
-
✓
✓
-
-
-
Greater Than
>
-
✓
✓
-
-
-
Greater Than or Equal
>=
-
✓
✓
-
-
-
Equals
==
✓
✓
✓
✓
✓⁵
✓
Not Equals
!=
✓
✓
✓
✓
✓⁵
✓
Logical And
&&
✓
-
-
-
-
-
Logical Or
||
✓
-
-
-
-
-
Bitwise And
&
-
✓
-
-
-
-
Bitwise Or
|
-
✓
-
-
-
-
Bitwise Xor
^
-
✓
-
-
-
-
Assign
=
✓
✓
✓
✓
✓
✓
Assign Add
+=
-
✓
✓
✓
-
✓
Assign Subtract
-=
-
✓
✓
-
-
-
Assign Multiply
*=
-
✓
✓
-
-
-
Assign Divide
/=
-
✓
✓
-
-
-
Assign Bitwise And
&=
-
✓
-
-
-
-
Assign Bitwise Or
|=
-
✓
-
-
-
-
Notes
The Logical Not
!operator forTweakDBIDis overridden to return!TDBID.IsValid(a)Strings can be multiplied by an
Int32to repeat the string:public static func OperatorMultiply(a: String, count: Int32) -> StringStringaddition is concatenation. There are native functions to allow most types can be concatenated withStringCNameandTweakDBIDaddition is concatenation (and presumably involves some kind of internal lookup to a known value)The redscript compiler doesn't currently support the
==and!=symbols for theCNametype, use theEquals(a,b)andNotEquals(a,b)intrinsic functions for now.
Last updated
Was this helpful?