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:
Floating-Point Types
Keyword
Type
Range
Example
Float
32-bit Single-Precision
let a: Float = 3.141592;
Double
64-bit Double-Precision
let a: Double = 3.141592653589793d;
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 forTweakDBID
is overridden to return!TDBID.IsValid(a)
Strings can be multiplied by an
Int32
to repeat the string:String
addition is concatenation. There are native functions to allow most types can be concatenated withString
CName
andTweakDBID
addition 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 theCName
type, use theEquals(a,b)
andNotEquals(a,b)
intrinsic functions for now.
Last updated