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 forTweakDBID
is overridden to return!TDBID.IsValid(a)
Strings can be multiplied by an
Int32
to repeat the string:public static func OperatorMultiply(a: String, count: Int32) -> 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
Was this helpful?