New commands added to RF

This document was created by Nout and documents all changes added to RF from Version 72A to Version 73

1) High level commands:

ShowTextDelay(Nr, EntityName, Animation, TextString, FontNr, Time, TextSound, ScreenOffsetX, ScreenOffsetY, Aligne, Alpha)

This command draws a text string on the screen that is attached to a pawn or player. If the pawn/player is walking, the text string will keep the relative position towards the pawn (so walks together with the pawn/player).
Nr: Is an integer value from 0 to 19 that uniquely identifies a text string handler. Within 1 order, different text strings do require different Nr's. In a next order, you can reuse the Numbers. Up to 20 strings are supported in 1 order.
EntityName: If EntityName is empty, the text is not attachment to a pawn/player and fixed screen-coordinates are used instead. If EntityName="Player", the player is assigned as Entity, else the entity you specified
TextString: The string to be displayed
Animation: The animation the pawn/player makes while displaying the string. If left empty ("") the previous active animation will continue.
FontNr: The number for the font to be used to display the string
Time: The time in seconds the text is displayed. Next order commands will wait till the specified time elapsed. If time=0, the text is displayed forever.
TextSound: A sound file played once during the time the text is displayed. Typically this is used to "speak" the text you display
ScreenOffsetX and Y: Defines the offset in screen coordinates relative to the projected pawn's/player's origin (in screen coordinates) where the text will be displayed
Aligne: Can take the value "Left", "Right" or "Centre" and defines the alignment of the text relative to the origin of the pawn/player
Alpha: Defines the alpha of the text displayed (0 to 255, where 0 is full transparent)

ShowTextDelay(Nr) or ShowText(Nr)

This command removes the text string with IDnr Nr.

ShowText(Nr, EntityName, Animation, TextString, FontNr, TextSound, ScreenOffsetX, ScreenOffsetY, Aligne, Alpha)

This command is identical to the ShowTextDelay command but has no time property. In highlevel, it will execute immediately (so at the start of the order) independent of the delays of all preceding commands would take in an highlevel order.

... = GetConvReplyNr()

This command returns the number of the last selected reply from the last completed conversation

String = Concat(Value1, Value2,...)

This command returns a string equal to the concatenation of Value1, Value2 etc...
Value1, Value2 etc... can be a string, an integer or a float or any mix of these
An infinite number of strings, integers and floats can be concatenated and returned as 1 new string
The maximum string length is limited to 255 characters

MouseControlledPlayer(flag)

If flag = true: this command enable the Player to be controlled by mouse and the mouse pointer is invisible, but centered in the screen
If flag = false: this command disable the Player to be controlled by mouse and enables the mouse pointer to be moved
Use this command to enable a free running mouse for mouse driven commands like MouseSelect

debug(<value>)

This command shows the value of <value> on the screen

SetFlag, AddFlag, GetAttribute, SetAttribute, ModifyAttribute

These commands where added as equivalent to the lowlevel commands
Important note: By construction, these commands do not "wait" till previous commands in an order are executed but take immediately their value when entering an order. If this is an issue, place the command solo into an order

Conversation() and Conversation(OrderName)

This command was extended with an optional order name
This enables you to start a Conversation with the order you specify here rather then with the order as was defined in the last executed NewConversation command.

SetGlobal(Nr, Type, Value);

Sets a global variable, readable in any script
IdNr: a Nr that uniquely identifies each global
Type: can be "Int", "Float" or "String" and it defines what type of global you define
Value: is the value you want to give to the global

Value = GetGlobal(Nr, Type);

Returns the value of a global variable, which is readable in any script !, with IdNr Nr and of type Type

2) Low level commands:

self.entity_screen_X
self.entity_screen_Y

Returns the ScreenX and ScreenY coordinate of the active pawn his origin

self.player_screen_X
self.player_screen_Y

Returns the ScreenX and ScreenY coordinate of the player his origin

self.left_mousekey_pressed
self.middle_mousekey_pressed
self.right_mousekey_pressed

Returns true if the left/mid/right mouse button is pressed

TeleportEntity(ScriptPointName, EntityName)
TeleportEntity(ScriptPointName, EntityName, OffsetX, OffsetY, OffsetZ)

This command was extended with 3 features
a) If EntityName is "Player", then the player is teleported
b) Optional an offset relative to the scriptpoint origin can be added. The pawn/player is teleported to the scriptpoint with offset

DistanceBetweenEntities(FromEntity, ToEntity, OnlyXY);

This command returns the distance between 2 Entity origins.
FromEntity: The szEntityName of the entity  towards which you measure the distance. The FromEntity will recognize the word "Player" as player entity
ToEntity: The szEntiryName of the entity to which you measure the distance. The ToEntity does not recognize the word "Player" !
OnlyXY: if OnlyXY = true, then the Z-coordinate is not taken into account in calculating the distance

DistanceToAttribute(FromEntity, ToAttribute, OnlyXY);

This command returns the distance between the origin of an Entity and the origin of an attribute
If FromEntity is "Player", then the player is used as FromEntity
ToAttribute: is the name of the AttributeEntity (not the attribute itself!)
OnlyXY: if OnlyXY = true, then the Z-coordinate is not taken into account in calculating the distance

MouseSelect(HighlightOnCollision);
MouseSelect(HighlightOnCollision, CollidePlayer);
MouseSelect(HighlightOnCollision, CollidePlayer, R, G, B);

Returns the EntityName of the pawn if the mouse pointer is moved over the bounding box of a pawn
CollidePlayer: If CollidePlayer=true, then also the player is evaluated and "Player" will be returned when the mouse pointer if over the player bounding box
HighlightOnCollision: HighlightOnCollision=true, then the color of the pawn changes when the mouse is over the bounding box of the pawn. This color is by default red and can optionally be set by by R, G, B (Red, Green, Blue, each between 0 ... 255)
R, G, B: Defines the highlight color of the boundingbox when the mouse is over it

MouseControlledPlayer(flag)

Use this command to enable a free running mouse for mouse driven commands like MouseSelect
Flag: If flag = true: this command enables the Player to be controlled by mouse. If flag = false: this command disable the Player to be controlled by mouse

SetPawnProperties(EntityName, dPosX, dPosY, dPosZ, Scale, Alpha, FillColX, FillColY, FillColZ, RotX, RotY, RotZ)

This command enables you to updates most of the parameters of a Pawn
EntityName: is the name of the Pawn to apply the properties to
dPosX, dPosY, dPosZ: moves the pawn relative to his last position and makes this the new position
Scale: changes instantaneously the size of the pawn
Alpha: changes instantaneously the Alpha of the pawn (0 means transparent, 255 is fully visible)
FillColX, FillColY, FillColZ: set the color of the light shining on the pawn
RotX, RotY, RotZ: rotates the pawn to an absolute angle independent of the previous angle

SetAttributeProperties(EntityName, dPosX, dPosY, dPosZ, Scale, Alpha, FillColX, FillColY, FillColZ, RotX, RotY, RotZ)

This command enables you to updates most of the parameters of an attribute
EntityName: is the name of the attribute to manipulate
dPosX, dPosY, dPosZ: moves the attribute relative to his last position and makes this the new position
Scale: changes instantaneously the size of the attribute
Alpha: changes instantaneously the Alpha of the attribute (0 means transparent, 255 is fully visible)
FillColX, FillColY, FillColZ: set the color of the light shining on the attribute
RotX, RotY, RotZ: rotates the attribute to an absolute angle independent of the previous angle

GetEntityScreenX(EntityName)
GetEntityScreenY(EntityName)

Returns the ScreenX or ScreenY position of the origin of a Pawn
EntityName: If EntityName="", the active pawn is used
If EntityName="Player", the player is used
If EntityName is filled in, the pawn with that entityname will be used

GetScreenWidth()
GetScreenHeight()

Returns the width or height of the screen in pixels

ShowMouse(ShowIt)

ShowIt: If ShowIt=true, the mouse will be visible, else not

GetMousePosX()
GetMousePosY()

Returns the ScreenX and ScreenY position of the mouse independent if the mouse is visible or not

SetMousePos(ScreenPosX, ScreenPosY)

ScreenPosX, ScreenPosY: Moves the mouse pointer to the screen position defined by ScreenPosX and ScreenPosY where ScreenPosX and ScreenPosY are expressed in number of screen pixels in screen coordinates. The mouse can be moved also when invisible

UpdateScriptPoint(PointName, EntityName)
UpdateScriptPoint(PointName, EntityName, OffsetX, OffsetY, OffsetZ)
UpdateScriptPoint(PointName, EntityName, OffsetX, OffsetY, OffsetZ, NextPoint, NextOrder, AngleX, AngleY, AngleZ)

PointName, EntityName: Moves a scriptpoint with name PointName to the origin of an entity with name EntityName
Offset: Optional an offset can be specified
NextPoint: Optional the NextPoint value from the scriptpoint can be altered
NextOrder: Optional the NextOrder value from the scriptpoint can be altered
AngleX, AngleY, AngleZ: Optional the angle of the scriptpoint can be altered where AngleX, AngleY and AngleZ are expressed in degrees

ShowText(EntityName, Animation, TextString, FontNr, TextSound, ScreenOffsetX, ScreenOffsetY, Align, Alpha);

This command draws a text string attached to a pawn or player. If the pawn is walking, the string will keep the relative position towards the pawn (so walks together with the pawn).
EntityName: If EntityName is empty, fixed screen-coordinates are used and there is no attachment to a pawn/player
If EntityName="Player", the player will be used as Entity
TextString: the string to be displayed
Animation: The animation the pawn/player makes while displaying the string. If left empty ("") the previous active animation will continue.
FontNr: the number for the font to be used to display the string
Time: the time in seconds the text is displayed. If time=0, the text is displayer for 1 frame. If Time>0, then the text is displayed for the defined time.
TextSound: A sound file played once during the time the text is displayed. Typically this is used to "speak" the text you display
ScreenOffsetX and Y: the offset relative to the pawn's/player's origin the text is displayed at
Align: can be "Left", "Right" or "Centre" and defines the alignment relative to the origin of the pawn/player
Alpha: the alpha of the text displayed (0 to 255, where 0 is full transparent)

FillScreenArea(KeepVisible, Alpha);
FillScreenArea(KeepVisible, Alpha, R, G, B);
FillScreenArea(KeepVisible, Alpha, R, G, B, Left, Top, Right, Bottom);

Fills a rectangle on the screen with a color and an alpha
If no colors are defined for R,G,B, then white is used as a color
If no rectangle is defined by Left, Top, Right and Bottom is defined then the full screen is filled
This command can be used to fade the screen, or part of a screen

SetGamma(Gamma)

Defines the Gamma of the full screen (default is 1)

GetGamma()

Returns the Gamma of the screen (default is 1)

SetEntityAlpha(EntityName, Alpha)

Sets the Alpha of a pawn. Alpha = 0 means transparent, Alpha= 255 means fully solid

... = GetEntityAlpha(EntityName)

Returns the Alpha of a pawn

ShowPicture(HUDpictureNr, IsVisible, ScreenX, ScreenY, DisplayTime, WinX, WinY);

This commands draws a bitmap or GIF file on the screen at location ScreenX and ScreenY
The bitmap or GIF are identified by a number and need to be pre-defined in the HUD.ini file
IsVisible: if true, the picture will be displayed, it false the picture is no longer displayed
DisplayTime: is the time to display the picture. If DisplayTime=0, then the picture is only displayed for 1 frame
WinX and WinY define the view port on the picture. This can be used to only display part of the picture

HUD.ini

[picture1]
bitmap = hud\black.bmp
bitmapalpha = hud\white.bmp
active = false

[picture2]
bitmap = hud\black.bmp
bitmapalpha = hud\white.bmp
active = false

[picture3]
giffile = menu\animcursor.gif
active = false

String = Concat(Value1, Value2,...)

This command returns a string equal to the concatenation of Value1, Value2 etc...
Value1, Value2 etc... can be a string, an integer or a float or any mix of these
An infinite number of strings, integers and floats can be concatenated and returned as 1 new string
The maximum string length is limited to 255 characters

SetSlowMotion(ScaleFactor);

This command multiplies TIME af all movements by a scale factor.
This command can be used to speed up or slow down all movements
If ScaleFactor = 1.0f, we have the normal speed
For ScaleFactor < 1.0f the animations slow down
For ScaleFactor > 1.0f the animations speed up

CheckArea(FromEntityName, ToEntityName, DistanceMode, MinSceenX, MaxSceenX, MinDistance, MaxDistance, OrderName);
This command retruns true if the player or a pawn is within a specified area
This area is defined in the horizontal direction by MinScreenX and MaxScreenX coordinates and in the vertical direction by MinDistance and MaxDistance the pawn/player/mouse is moved away from the pawn/player/camera/nothing
DistanceMode = true: Min and Max screenX + Min and Max distance are used
DistanceMode = false: Min and Max screenX + Min and Max screenY are used (no distance, just a box on the screen)
Can be used to check if Player, Pawn, Camera or Mouse is in a screen box

This is a very powerful command that can be used to create menu's pointed by a mouse pointer
Can be used to check if a pawn or the player is leaving the screen (as an action you could move the camera to follow the pawn / player)
Can be used to detect a pawn/player walks too far away from the camera to well see him
Can be used to detect that a pawn walks too far away from another pawn etc...

ShowActorWindow(Left, Top, Width, Height, Actor, Scale, Animation, RotX, RotY, RotZ);

Adds a second camera window with an actor in it. The actor can be scaled and animated. Ideal to show inventory attributes

SetCameraWindow(FOV, Left, Top, Width, Height);

Sets the size + zoom factor of the engine camera

SetFixedCameraAttributes(dPosX, dPosY, dPosZ, dRotX, dRotY, dRotZ, FOV);

Sets position, rotation, FOV for the active FixedCamera

SetGlobal(Nr, Type, Value);

Sets a global variable, readable in any script
Nr: a Nr that uniquely identifies each global
Type: can be "int", "float" or "String" and defines what type of global you define
Value: is the value you want to give to the global

Value = GetGlobal(Nr, Type);

Returns the value of the global variable, readable in any script, with IdNr Nr and of typeType
Nr: a Nr that uniquely identifies each global
Type: can be "int", "float" or "String" and defines what type of global you define

SaveGlobal(FileName);

Saves all global script variables in a file with name FileName

LoadGlobal(FileName);

Loads all global script variables from a file with name FileName

ScaleXYZEntity(EntityName, ScaleX, ScaleY, ScaleZ);
Scales an actor independently in X, Y and Z. Use this to "stretch" or "shrink" an actor separate in X, Y and Z
EntityName: is the name of the Pawn to apply the scaling to
ScaleX, Y, Z: the scale factor to be applied in X, Y and Z respectively

PhApplyImpulse(BodyId, ImpulseX, ImpulseY, ImpulseZ, UseGravity)
Used to place an impulse force during 1 engine frame on a body. Use multiple of these pulses to accelerate a body.
BodyId: the id of the body to apply the impulse on
ImpulseX, Y, Z: the value of the force to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

PhApplyForce(BodyId, ForceX, ForceY, ForceZ, UseGravity)
Used to place a constant force on a body. Use this to give a fixed velocity to a body.
BodyId: the id of the body to apply the force on
ForceX, Y, Z: the value of the force to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

PhApplyTwist(BodyId, TwistX, TwistY, TwistZ, UseGravity)
Used to place a constant torque on a body. Use this to rotate a body.
BodyId: the id of the body to apply the torque on
TwistX, Y, Z: the value of the torque to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

PhSetVelocity(BodyId, VelocityX, VelocityY, VelocityZ, UseGravity)
Used to place apply a constant velocity on a body. Use this to instantaneously change speed of a body
BodyId: the id of the body to apply the torque on
VelocityX, Y, Z: the value of the velocity to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

PhBreakJoint(JointId, Break)
JointId:
The ID number of the joint to break / glue
Break: If true, the joint will break. If false the joint will glue

PhBreakGeometry(BodyId, Break)

PhSetBBox(BodyId, Width, Height, Depth)
Used to set the bounding box of the geometry used for a body
BodyId: the id of the body to apply the torque on
Width, Height, Depth: Define the values for the bounding box. Positive and negative float values are allowed.

PhTeleportToScriptPoint(BodyId, ScriptPointName, Offset)
Used to teleport the body with Id BodyId to a new location, defined by the origin of a scriptpoint with name ScriptPointName and with an offset Offset relative to this point.
BodyId: the id of the body to apply the torque on
ScriptPoint: Defines the name of the scriptpoint to use the origin from.
Offset: Can be used to apply an additional offset to the new position

PhTeleportToEntity(BodyId, EntityName, Offset)
Used to teleport the body with Id BodyId to a new location, defined by the origin from an actor and with an offset Offset relative to this point.
BodyId: the id of the body to apply the torque on
EntityName: Defines the actor to use the origin from as new position.
Offset: Can be used to apply an additional offset to the new position

3) Conversation commands:

General changes added to the conversation:

* The game background in now RENDERED during a conversation, while animations are on hold! (I hope the flickering is gone now...)
* The short black screen when finishing the conversation is removed
* Menu and mouse control was added to the conversations
* You can choose to display or not to display the HUD during a conversation
* A conversation message can be displayed using multiple lines. Just use the # as a separator in your text.
You can on top define a virtual speak window or reply window to auto fit the text width and height in
* conversation background supports now also the JPG format
* An alpha bitmap for the speak and the reply backgrounds was added. This enables you to make not rectangular conversation backgrounds with transparent parts and partial transparent parts (alpha). To use this option, you need to preload the bitmaps by declaring hem in  the pawn.ini files, under the section [Conversation]. See the example below.
* The allowable length of the conversation text string is extended from 256 characters to 1024 characters
* Conversation text lines starting with "/" are now also seen as comment lines

Add this to your Pawn.ini file
[Conversation]
background = conva4.bmp
backgroundalpha = a_conva4.bmp
replybackground = conva4.bmp
replybackgroundalpha = a_conva4.bmp
 

SoundReply(ReplyNr, ReplyMessage, ReplySound)
SoundReply(ReplyNr, ReplyMessage, ReplySound, ReplyX, ReplyY, ReplyWidth, ReplyHeight, ReplyFont)

Added the possibility to optionally extend the SoundReply command with
ReplyX, ReplyY: the coordinates relative to the background where to start the reply message
ReplyWidth, ReplyHeight: the width and height of the virtual reply message window
ReplyFont: The font used to display the reply message

MenuReply(ReplyNr, ReplyTextName, ReplySound, MenuFontNr, ReplyFontNr, ReplyMenuBarBitmap, ReplyMenuBarAlphaBitmap, GIFnr, GifX, GifY);

This command is similar to the SoundReply command, but displays the different reply options as a menu-system where a reply is selectable by mouse and by keys
The menu is fully automatically created. When the mouse moves over a reply option, the ReplyMenuBarBitmap graphic for this reply option will display the ReplyMenuBar graphic. For convenience also a GIF can be displayed. This enables you to create an animated menu with borders!
Highlighting the next reply can be done by moving the mouse over the reply items, or by using the arrow-up and arrow-down keys.
Selecting a reply can be done by mouse click or by pressing the space bar or enter key

IMPORTANT NOTE: To let this command work correctly, please ensure the following:
- Like for a normal Reply command the Reply strings in the menu needs to be pre-defined in the conversation.ini
- The virtual Reply Window has to be large enough (ReplyWidth and ReplyHeight) to contain the full reply string defined in conversation.ini under the ReplyTextName.
- All bitmap files and GIF files used need to be pre-defined in the Pawn.ini file under the section [Conversation]

[Conversation]
background = conva4.bmp => default searched in the "bitmap\conversation" directory !!
backgroundalpha = a_conva4.bmp
=> default searched in the "bitmap\conversation" directory !!
iconx = 0
icony = 0
speachx = 22
speachy = 20
speachwidth = 730
speachheight = 155
speachfont = 13
replyx = 22
replyy = 20
replywidth = 730
replyheight = 155
replyfont = 13
replymenufont = 12
replymenubar = menuconv.bmp
=> default searched in the "bitmap\conversation" directory !!
replymenubaralpha = a_menuconv.bmp
=> default searched in the "bitmap\conversation" directory !!
replybackground = conva4.bmp
=> default searched in the "bitmap\conversation" directory !!
replybackgroundalpha = a_conva4.bmp
=> default searched in the "bitmap\conversation" directory !!
speachwindowx = 10
speachwindowy = 10
replywindowx = 10
replywindowy = 440
giffile0 = menu\Credit.gif => default searched in the "video" directory !!
giffile1 = menu\Credit.gif
=> default searched in the "video" directory !!
gifx = 10
gify = 10

RestoreBackground(flag);

Defines if the screen is cleared between a speak and a reply command
If flag = true only the speak window is visible, if flag = false both speak and the reply window will be visible

SoundConversation(CharProSec, ShowHUD);

An option was added to not display the HUD during a conversation
If ShowHUD = true, the HUD is displayed

AttachSpeakToPawn(PawnName, OffsetX, OffsetY, TextAreaWidth, TextAreaHeight, TextFont);

Attaches the speak window + text in it to a defined pawn origin.
If PawnName = "Player" , then the speak window is attached to the player
By defining an empty speak background, you can attach only the speak text message
If the pawn/player walks around, the text will follow the pawn/player

AttachReplyToPawn(PawnName, TextOffsetX, TextOffsetY, TextAreaWidth, TextAreaHeight, TextFont);

Attaches the reply window + text to a defined pawn origin.
If PawnName = "Player" , then the reply window is attached to the player
By defining an empty reply background, you can attach only the reply text message
If the pawn/player walks around, the text will follow the pawn/player

SoundCustomSpeakBackground(SpeakBackgroundBitmap, SpeakBackgroundX, SpeakBackgroundY);
SoundCustomSpeakground(SpeakBackgroundBitmap, SpeakBackgroundX, SpeakBackgroundY, SpeakX, SpeakY);
SoundCustomSpeakBackground(SpeakBackgroundBitmap, SpeakBackgroundX, SpeakBackgroundY, SpeakX, SpeakY, SpeakWidth, SpeakHeight);
SoundCustomSpeakBackground(SpeakBackgroundBitmap, SpeakBackgroundX, SpeakBackgroundY, SpeakX, SpeakY, SpeakWidth, SpeakHeight, SpeakFont);

Added extra optional parameters

SoundCustomReplyBackground(ReplyBackgroundBitmap, ReplyBackgroundX, ReplyBackgroundY);
SoundCustomReplyBackground(ReplyBackgroundBitmap, ReplyBackgroundX, ReplyBackgroundY, ReplyX, ReplyY);
SoundCustomReplyBackground(ReplyBackgroundBitmap, ReplyBackgroundX, ReplyBackgroundY, ReplyX, ReplyY, ReplyWidth, ReplyHeight);
SoundCustomReplyBackground(ReplyBackgroundBitmap, ReplyBackgroundX, ReplyBackgroundY, ReplyX, ReplyY, ReplyWidth, ReplyHeight, ReplyFont);

Added extra optional parameters

SetGlobal(Nr, Type, Value);

Sets a global variable, readable in any script
IdNr: a Nr that uniquely identifies each global
Type: can be "int", "float" or "String" and defines what type of global you define
Value: is the value you want to give to the global

Value = GetGlobal(Nr, Type);

Returns the value of the global variable, readable in any script, with IdNr Nr and of typeType

 

4) Level controller commands:

SetPlatformSpeed(PlatformName, Speed)

Changes the animation speed of a platform by multiplying it with Speed

SetDoorSpeed(DoorName, Speed)

Changes the animation speed of a door by multiplying it with Speed

SetPlatformTimeNow(PlatformName, KeyFrame)

Moves the platform immediately to a new position corresponding with the defined time. Interpolation is used between keyframes.

SetDoorTimeNow(DoorName, KeyFrame)

Moves a door immediately to a new position corresponding with the defined time. Interpolation is used between keyframes.

PlatformDistance(PlatformName, EntityName)

Gives the distance from the platform centre to the origin of an Entity
Apart from Pawns also 2 special Entity names are supported: "Player" and "Camera"

DoorDistance(DoorName, EntityName)

Gives the distance from the door centre to the origin of an Entity
Apart from Pawns also 2 special Entity names are supported: "Player" and "Camera"

SetFlag(FlagNr, BooleanValue)
GetFlag(FlagNr)

ShowText(Nr, EntityName, Animation, TextString, FontNr, TextSound, ScreenOffsetX, ScreenOffsetY, Aligne, Alpha)

This command is identical to the same called LowLevel command

self.player_X
self.player_Y
self.player_Z

Return the X, Y and Z position of the origin of the player

self.leftmousekey_pressed
self.middlemousekey_pressed
self.rightmousekey_pressed

Returns true if the left/mid/right mouse button is pressed, else false

SetGlobal(Nr, Type, Value);

Sets a global variable, readable in any script
IdNr: a Nr that uniquely identifies each global
Type: can be "int", "float" or "String" and defines what type of global you define
Value: is the value you want to give to the global

Value = GetGlobal(Nr, Type);

Returns the value of the global variable, readable in any script, with IdNr Nr and of typeType

 

5) Physics controller script commands:

self.time

self.think

self.ThinkTime

value = ThinkTime
value = ElapseTime
value = DifficultyLevel
value = EntityName
value = key_pressed

value = self.player_X
value = self.player_Y
value = self.player_Z

Return the X, Y and Z position of the origin of the player

self.leftmousekey_pressed
self.middlemousekey_pressed
self.rightmousekey_pressed

Returns true if the left/mid/right mouse button is pressed, else false

String = WriteToLogFile(Value, Value, ....)
Used for debugging. Converts an unlimited number of values into strings and concatenates them to 1 string that is returned. The returned string is also written to the RF.log file

value = GetBodyOrigin(BodyIdNr, XYZnr)
If XYZnr = 0, value returns the X position of the origin of the body with BodyId BodyIdNr
If XYZnr = 1, value returns the Y position of the origin of the body with BodyId BodyIdNr
If XYZnr = 2, value returns the Z position of the origin of the body with BodyId BodyIdNr

value = GetBodyBBox(BodyIdNr, XYZnr);
If XYZnr = 0, value returns the Width (X) of the origin of the body with BodyId BodyIdNr
If XYZnr = 1, value returns the Height (Y) of the origin of the body with BodyId BodyIdNr
If XYZnr = 2, value returns the Depth (Z) of the origin of the body with BodyId BodyIdNr

ShowPhysicsBBox(Flag)
Shows the bounding boxes of the physics system. Typically used for debugging reasons.
Flag: if is made true, the bounding boxes are made visible, else invisible. Also sensors and joints are made visible
Please note that showing the bounding boxes decreases the frame rates

BodyId = CreateRigidBody(ActorName, ActorFile, ActorScaleX, ActorScaleY, ActorScaleZ, PosX, PosY, PosZ, RotX, RotY, RotZ, ShowShadow, ShadowAlpha, GeometryType, MaterialId, Mass);
Creates a rigid physics body with bodyId BodyId. Rigid bodies bounce with other bodies and the world geometrie.
ActorName: a string that defines the name you assign to this actor. This name can be used in other script commands
ActorFile: the file name of the .act file to read in as rigid body or also the szEntityName of a Pawn or StaticProxy to be converted into a rigid body. A name ending at ".act" is seen as an actor file to be read. Any other name is seen as an szEntityName.
ActorScale: Scale factors for independent sizing in X, Y and Z of the actor
PosX, PosY, PosZ:
Position in world coordinates where the body will be placed. Rather the putting here fixed numbers, we advice that you use the command GetPosition(szEntityName, XYZnr) to read the location of an entity and to specify PosX, PosY and PosZ relative to the entity. In this way you can easy move bodies in the world editor.
RotX, RotY, RotZ: Initial rotation of the actor in X, Y and Z, defined in degrees
Mass: a float defining the mass of the body
ShowShadow:
a boolean defining is projected shadows are used for the rigid body or not
Alpha:
an integer 0...255 that defines the transparency of the actor. 0 is full transparent and 255 is solid.
GeometryType, Width, Height, Depth: defines the collision geometry assigned to a physics body. This geometry can be Box, Sphere or Capsule. A capsule is a cylinder ending at halve a circle on both ends where the diameter of the circle and cylinder match. There are different ways you can fill in these parameters
1) If Geometrytype = "" or Geometrytype = "Box", then a Box collision geometry is assigned to the body. If Width = 0, automatically the width will be calculated from the actors bounding box. If Width>0, this width will be forced, independent of the actors bounding box. The same is true for Height and depth. Please note that this Width is only used for collision of elements that are part of the physics system.
2) If Geometrytype = "Sphere", then a Sphere collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. Height and Depth are ignored but must be assigned by a value.
3) If Geometrytype = "Cylinder", then a Capsule collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. The same is true for Height. Depth is ignored but must be assigned by a value.
4) If Geometrytype = "Hull", then a Self definable hull collision geometry is assigned to the body. Use following syntax: Hull <HullDefinition filename> [<Width>] [<Height>] [<Depth>], where the last 3 are optional
MaterialId: For each body you can assign a material by defining its material_Id. A material specifies the bouncing and friction properties of this material. See the DefineMaterial command.

ExtendRigidBody(BodyId, ActorName, ActorFile, ActorScale, PosX, PosY, PosZ, RotX, RotY, RotZ, Mass, ShowShadow, Alpha, GeometryType, Width, Height, Depth, MaterialId);
This command is used to build one body that is consisting out of several actors
BodyId: The ID of the body to be extended by extra geometry
ActorName: a string that defines the name you assign to this actor. This name can be used in other script commands
ActorFile: the file name of the .act file to read in as rigid body or also the szEntityName of a Pawn or StaticProxy to be converted into a rigid body. A name ending at ".act" is seen as an actor file to be read. Any other name is seen as an szEntityName.
ActorScale: Scale factors for independent sizing in X, Y and Z of the actor
PosX, PosY, PosZ:
Position in world coordinates where the body will be placed. Rather the putting here fixed numbers, we advice that you use the command GetPosition(szEntityName, XYZnr) to read the location of an entity and to specify PosX, PosY and PosZ relative to the entity. In this way you can easy move bodies in the world editor.
RotX, RotY, RotZ: Initial rotation of the actor in X, Y and Z, defined in degrees
Mass: a float defining the mass of the body
ShowShadow:
a boolean defining is projected shadows are used for the rigid body or not
Alpha:
an integer 0...255 that defines the transparency of the actor. 0 is full transparent and 255 is solid.
GeometryType, Width, Height, Depth: defines the collision geometry assigned to a physics body. This geometry can be Box, Sphere or Capsule. A capsule is a cylinder ending at halve a circle on both ends where the diameter of the circle and cylinder match. There are different ways you can fill in these parameters
1) If Geometrytype = "" or Geometrytype = "Box", then a Box collision geometry is assigned to the body. If Width = 0, automatically the width will be calculated from the actors bounding box. If Width>0, this width will be forced, independent of the actors bounding box. The same is true for Height and depth. Please note that this Width is only used for collision of elements that are part of the physics system.
2) If Geometrytype = "Sphere", then a Sphere collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. Height and Depth are ignored but must be assigned by a value.
3) If Geometrytype = "Cylinder", then a Capsule collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. The same is true for Height. Depth is ignored but must be assigned by a value.
4) If Geometrytype = "Hull", then a Self definable hull collision geometry is assigned to the body. Use following syntax: Hull <HullDefinition filename> [<Width>] [<Height>] [<Depth>], where the last 3 are optional
MaterialId: For each body you can assign a material by defining its material_Id. A material specifies the bouncing and friction properties of this material. See the DefineMaterial command.

BodyId = CreateStaticBody(ActorName, ActorFile, ActorScaleX, ActorScaleY, ActorScaleZ, PosX, PosY, PosZ, RotX, RotY, RotZ, ShowShadow, ShadowAlpha, GeometryType, MaterialId);
Creates a static physics body with bodyId BodyId. Static bodies collide with other bodies and the world geometry, but these bodies do not move or react on forces or torque. They are static.
ActorName: a string that defines the name you assign to this actor. This name can be used in other script commands
ActorFile: the file name of the .act file to read in as rigid body or also the szEntityName of a Pawn or StaticProxy to be converted into a rigid body. A name ending at ".act" is seen as an actor file to be read. Any other name is seen as an szEntityName.
ActorScale: Scale factors for independent sizing in X, Y and Z of the actor
PosX, PosY, PosZ:
Position in world coordinates where the body will be placed. Rather the putting here fixed numbers, we advice that you use the command GetPosition(szEntityName, XYZnr) to read the location of an entity and to specify PosX, PosY and PosZ relative to the entity. In this way you can easy move bodies in the world editor.
RotX, RotY, RotZ: Initial rotation of the actor in X, Y and Z, defined in degrees
ShowShadow:
a boolean defining is projected shadows are used for the static body or not
Alpha:
an integer 0...255 that defines the transparency of the actor. 0 is full transparent and 255 is solid.
GeometryType, Width, Height, Depth: defines the collision geometry assigned to a physics body. This geometry can be Box, Sphere or Capsule. A capsule is a cylinder ending at halve a circle on both ends where the diameter of the circle and cylinder match. There are different ways you can fill in these parameters
1) If Geometrytype = "" or Geometrytype = "Box", then a Box collision geometry is assigned to the body. If Width = 0, automatically the width will be calculated from the actors bounding box. If Width>0, this width will be forced, independent of the actors bounding box. The same is true for Height and depth. Please note that this Width is only used for collision of elements that are part of the physics system.
2) If Geometrytype = "Sphere", then a Sphere collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. Height and Depth are ignored but must be assigned by a value.
3) If Geometrytype = "Cylinder", then a Capsule collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. The same is true for Height. Depth is ignored but must be assigned by a value.
4) If Geometrytype = "Hull", then a Self definable hull collision geometry is assigned to the body. Use following syntax: Hull <HullDefinition filename> [<Width>] [<Height>] [<Depth>], where the last 3 are optional
MaterialId: For each body you can assign a material by defining its material_Id. A material specifies the bouncing and friction properties of this material. See the DefineMaterial command.

ExtendRigidBody(BodyId, ActorName, ActorFile, ActorScale, PosX, PosY, PosZ, RotX, RotY, RotZ, ShowShadow, Alpha, GeometryType, Width, Height, Depth, MaterialId);
This command is used to build one static body that is consisting out of several actors
BodyId: The ID of the body to be extended by extra geometry
ActorName: a string that defines the name you assign to this actor. This name can be used in other script commands
ActorFile: the file name of the .act file to read in as rigid body or also the szEntityName of a Pawn or StaticProxy to be converted into a rigid body. A name ending at ".act" is seen as an actor file to be read. Any other name is seen as an szEntityName.
ActorScale: Scale factors for independent sizing in X, Y and Z of the actor
PosX, PosY, PosZ:
Position in world coordinates where the body will be placed. Rather the putting here fixed numbers, we advice that you use the command GetPosition(szEntityName, XYZnr) to read the location of an entity and to specify PosX, PosY and PosZ relative to the entity. In this way you can easy move bodies in the world editor.
RotX, RotY, RotZ: Initial rotation of the actor in X, Y and Z, defined in degrees
Mass: a float defining the mass of the body
ShowShadow:
a boolean defining is projected shadows are used for the rigid body or not
Alpha:
an integer 0...255 that defines the transparency of the actor. 0 is full transparent and 255 is solid.
GeometryType, Width, Height, Depth: defines the collision geometry assigned to a physics body. This geometry can be Box, Sphere or Capsule. A capsule is a cylinder ending at halve a circle on both ends where the diameter of the circle and cylinder match. There are different ways you can fill in these parameters
1) If Geometrytype = "" or Geometrytype = "Box", then a Box collision geometry is assigned to the body. If Width = 0, automatically the width will be calculated from the actors bounding box. If Width>0, this width will be forced, independent of the actors bounding box. The same is true for Height and depth. Please note that this Width is only used for collision of elements that are part of the physics system.
2) If Geometrytype = "Sphere", then a Sphere collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. Height and Depth are ignored but must be assigned by a value.
3) If Geometrytype = "Cylinder", then a Capsule collision geometry is assigned to the body. If Width = diameter = 0, automatically the diameter will be calculated from the actors bounding box (X). If Width>0, then this value will be forced as diameter, independent of the actors bounding box. The same is true for Height. Depth is ignored but must be assigned by a value.
4) If Geometrytype = "Hull", then a Self definable hull collision geometry is assigned to the body. Use following syntax: Hull <HullDefinition filename> [<Width>] [<Height>] [<Depth>], where the last 3 are optional
MaterialId: For each body you can assign a material by defining its material_Id. A material specifies the bouncing and friction properties of this material. See the DefineMaterial command.

CreateHingeJoint(BodyId1, BodyId2, Pos, MinLim1, MaxLim1, MinLim2, MaxLim2, JointLength)
A Hinge joint is a joint that works like the door of a car. Body1 is the car and body 2 is the car door and the joint is in between. Joints are "calculated" restrictions in movement, and are maintained as good as possible, but not guaranteed. Joints therefore should never be used to glue 2 bodies into a new more complex body. For this use the ExtendRigidBody or ExtendStaticBody command.

BodyId1: The IdNr of the body to apply the joint to. This IdNr requires to be filled in and to exists
BodyId2: If BodyId2 < 0 then a joint is made between the Body BodyId1 and a fictive point in world space defined by Pos. If BodyId2 >= 0, then a joint is made between the 2 bodies BodyId1 and BodyId2.
Pos: the position of the origin of rotation axis of the joint, in world coordinates
MinRot, MaxRot: minimum and maximum rotation angles you allow the joint to rotate around the joint axis expressed in degrees
MinTwis, MaxTwist:
minimum and maximum twist you allow the joint expressed in degrees
JointLength:
the length of the joint
MotorType: An integer that defines the motor type. if 0, a velocity motor is assigned. If 1, a TBD motor is assigned. Any other value disables the motor.
DesiredValue: The wanted speed of the motor
MaxForce: The maximum force applied to reach the desired value

CreateBallJoint(BodyId1, BodyId2, Pos, MinLim1, MaxLim1, MinLim2, MaxLim2)
A Ball and Socket joint is a joint that works like XXXXXXXXXX. Joints are "calculated" restrictions in movement, and are maintained as good as possible, but not guaranteed. Joints therefore should never be used to glue 2 bodies into a new more complex body. For this, use the ExtendRigidBody or ExtendStaticBody command.

BodyId1:
The IdNr of the body to apply the joint to. This IdNr requires to be filled in and to exists
BodyId2: If BodyId2 < 0 then a joint is made between the Body BodyId1 and a fictive point in world space defined by Pos. If BodyId2 >= 0, then a joint is made between the 2 bodies BodyId1 and BodyId2.
Pos: the position of the origin of rotation axis of the joint, in world coordinates
MinRot, MaxRot: minimum and maximum rotation angles you allow the joint to rotate around the joint axis expressed in degrees
MinTwist, MaxTwist:
minimum and maximum twist you allow the joint expressed in degrees

CreateSliderJoint(BodyId1, BodyId2, Pos, MinLim1, MaxLim1, MinLim2, MaxLim2)
A slider joint is a joint that works like a TBD. Joints are "calculated" restrictions in movement, and are maintained as good as possible, but not guaranteed. Joints therefore should never be used to glue 2 bodies into a new more complex body. For this, use the ExtendRigidBody or ExtendStaticBody command.

BodyId1:
The IdNr of the body to apply the joint to. This IdNr requires to be filled in and to exists
BodyId2: If BodyId2 < 0 then a joint is made between the Body BodyId1 and a fictive point in world space defined by Pos. If BodyId2 >= 0, then a joint is made between the 2 bodies BodyId1 and BodyId2.
Pos: the position of the origin of rotation axis of the joint, in world coordinates
MinRot, MaxRot: minimum and maximum rotation angles you allow the joint to rotate around the joint axis expressed in degrees
MinTwist, MaxTwist:
minimum and maximum twist you allow the joint expressed in degrees

DefineMaterial(MatNr, Friction, Restitution)
Each body has a material assigned that specifies the bounce and friction properties. You can define several materials and assign a material_id to. In this way you can reuse the same material just by referring to the id.
MatNr: An integer that represents the id number you want to assign material properties to. It's up to the user not to overwrite unwanted already existing material definitions
Friction:
a float value between 0 and 1 that defined the material's friction. 0 is no friction, 1 is maximum friction.
Restitution: a float value between 0 and 1 that defined the material's bouncing. 0 is no bouncing, 1 is maximum bouncing.

SetBreakCriteria(IdNr, BreakFlag, CollisionMagnitude)
Not yet implemented !!

SensorId = CreateSensor(BodyId, PosX, PosY, PosZ, DirX, DirY, DirZ)
BodyId:
the id of the body to which you want to add a Sensor
PosX, Y, Z:
the start position of the sensor ray. The position is expressed relative to the bodies origin.
DirX, Y, Z: the end position (and indirectly the direction) of the sensor ray. The position is expressed relative to the bodies origin.

Depth = GetSensorDepth(BodyId, SensorId)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
Depth: returns the length between the sensor start position and the position where the sensor the first time intersects a body. If no body is intersected, depth = 0 and all other sensor measurements have no meaning.

MaterialIndex = GetSensorMaterial(BodyId, SensorId)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
MaterialIndex: returns the Matertial ID of the first intersected body. If no body is intersected, the returned value can be anything.

LineVector = GetSensorLineVector(BodyId, SensorId, XYZindex)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return
LineVector : returns the Line Vector of the sensor. If no body is intersected, the returned value can be anything.

LineUnitVector = GetSensorLineUnitVector(BodyId, SensorId, XYZindex)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return
LineUnitVector: returns the normalized Line Vector of the sensor. If no body is intersected, the returned value can be anything.

LinePos = GetSensorLinePos(BodyId, SensorId, XYZindex)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return
LinePos: returns the point where the sensor ray intersected with the first found body.

Normal = GetSensorNormal(BodyId, SensorId, XYZindex)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return
Normal: returns the normal of the sensor

ContactPoint = GetSensorContactPoint(BodyId, SensorId, XYZindex)
BodyId:
the id of the body to which you want to add a Sensor
SensorId:
the id number assigned to the sensor and to identify the sensor
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return
ContactPoint: returns the contactpoint where the sensor ray intersected with the first found body.

SetBodyProperties(BodyId, EnableGravity, LineairDemping, AngularDemping, EnableCollide)
Several properties that are set to default values, but that can be overwritten by this command for each body
BodyId: the id of the body for which you want to change the properties
EnableGravity: a bool value that defines if gravity is active or not on this body
LineairDemping:
A float that defined the angular demping. Caution: typically values are really as small as 0.00005. For larger values, the motion speed of bodies is strongly slowed down !
AngularDemping:
A float that defined the angular demping. Caution: values are typically << 1 !
EnableCollide:
a bool value that defines if collision with joint connected bodies is active or not on this body

ApplyImpulse(BodyId, ImpulseX, ImpulseY, ImpulseZ, UseGravity)
Used to place an impulse force during 1 engine frame on a body. Use multiple of these pulses to slowly accelerate a body.
BodyId: the id of the body to apply the impulse on
ImpulseX, Y, Z: the value of the force to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

ApplyForce(BodyId, ForceX, ForceY, ForceZ, UseGravity)
Used to place a constant force on a body. Use this to let a body accelerate from velocity 0 to a velocity in line with the force applied.
BodyId: the id of the body to apply the force on
ForceX, Y, Z: the value of the force to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

Force = GetForce(BodyId, XYZindex)
Used to read the force on a body.
BodyId: the id of the body to read the force from
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return

ApplyTwist(BodyId, TwistX, TwistY, TwistZ, UseGravity)
Used to place a constant twist on a body. Use this to rotate a body.
BodyId: the id of the body to apply the twist on
TwistX, Y, Z: the value of the twist to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

AngularVelocity = GetAngularVelocity(BodyId, XYZindex)
Used to read the Angular velocity on a body.
BodyId: the id of the body to read the Angular velocity from
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return

SetVelocity(BodyId, VelocityX, VelocityY, VelocityZ, UseGravity)
Used to place apply a constant velocity on a body. Use this to instantaneously change speed of a body
BodyId: the id of the body to apply the velocity on
VelocityX, Y, Z: the value of the velocity to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

Velocity = GetVelocity(BodyId, XYZindex)
Used to read the velocity of a body.
BodyId: the id of the body to read the velocity from
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return

SetTorque(BodyId, TorqueX, TorqueY, TorqueZ, UseGravity)
Used to place apply a constant torque on a body. Use this to instantaneously change rotation speed of a body
BodyId: the id of the body to apply the torque on
TorqueX, Y, Z: the value of the torque to be applies in X, Y and Z direction. Positive and negative float values are allowed.
UseGravity:
if true, gravity is applied as well, else not

Torque = GetTorque(BodyId, XYZnr)
Used to read the torque of a body.
BodyId: the id of the body to read the torque from
XYZindex: is an integer (0 = X, 1 = Y and 2 = Z) that defines which line vector axis to return

SetCollisionID(BodyId, CollisionId)
BodyId:
the id of the body to define the collision id group for
CollisionId: identifies the group (by an integer) to which you assign this body. Default CollisionId is set to BodyId.

CollisionId = GetCollisionID(BodyId)
BodyId:
the id of the body to read the collision ID from
CollisionId: identifies the group (by an integer) to which you assign this body. Default CollisionId is set to BodyId.

SetCollisionResponse(CollId_A, CollId_B, Response)
Defines what response to make when a collision occurs between 2 body groups
CollId_A, CollID_B: the collision ID's of the 2 bodies you define the collision response for. Swapping CollID_A and COLLID_B makes no difference.
Response: an integer number 0...3 that defines the response when the 2 defined bodies collide.
0 = RESPONSE_IGNORE: ignore this collision
1 = RESPONSE_IMPULSE: apply the normal physics when colliding
2 = RESPONSE_CALLBACK: if a callback is assigned, run the callback on collision and do not apply the normal physics
3 = RESPONSE_IMPULSE_CALLBACK: if a callback is assigned, run the callback on collision and apply the normal physics

Response = GetCollisionResponse(CollId_A, CollId_B)
Returns the response that is made when a collision occurs between 2 body groups
CollId_A, CollID_B: the collision ID's of the 2 bodies you define the collision response for. Swapping CollID_A and COLLID_B makes no difference.
Response: an integer number 0...3 that defines the response when the 2 defined bodies collide.
0 = RESPONSE_IGNORE: ignore this collision
1 = RESPONSE_IMPULSE: apply the normal physics when colliding
2 = RESPONSE_CALLBACK: if a callback is assigned, run the callback on collision and do not apply the normal physics
3 = RESPONSE_IMPULSE_CALLBACK: if a callback is assigned, run the callback on collision and apply the normal physics

BreakJoint(JointId, Break)
JointId:
The ID number of the joint to break / glue
Break: If true, the joint will break. If false the joint will glue

BodyId/EntityName = GetLastShotBody(ReturnValue)
If ReturnValue = 0, return the BodyId, else return the EntityName of the body that was last hit by a shot

Console(Flag)
Defines if debugging information is displayed or not

debug(Value)
Show the defined value, used for debugging purposes

SetGlobal(IdNr, Type, Value)
Sets a global variable, readable in any script. This offers an easy way to exchange data to other scripts, to synchronize actions etc... Eg you can assign a BodyIdNr here and read it in a pawn script or level controller script
IdNr: a Nr that uniquely identifies each global
Type: can be "Int", "Float" or "String" and defines what type of global you define
Value: is the value you want to give to the global

Value = GetGlobal(GlobalNr, GlobalType)
Gets the value of a global variable in any script. This offers an easy way to exchange data to other scripts, to synchronize actions etc...
IdNr: A Nr that uniquely identifies each global
Type: Can be "Int", "Float" or "String" and defines what type of global you define
Value: returns the value that was assigned to this global

String = Concat(Value1, Value2,...)

This command returns a string equal to the concatenation of Value1, Value2 etc...
Value1, Value2 etc... can be a string, an integer or a float or any mix of these
An infinite number of strings, integers and floats can be concatenated and returned as 1 new string
The maximum string length is limited to 255 characters

String = StringCopy(Value)

String = LeftCopy(Value, NrOfChars)

Integer = Integer(Value)

Integer = Random(MinValue, MaxValue)

6) Physics demo scripts:

Chain: The script below creates a chain of domino

Rag dole: The script below creates a chain of domino

Wall of boxes: The script below creates a chain of domino

Foucoo Slinger : The script below creates a chain of domino

Strange car :
The script below creates a chain of domino

7) New Entities:

Physics related entities: Empowered by Tokamak
General description:
Physics enable you to add the natural behaviors like falling, bouncing, gravity etc... to objects.
This is realized by creating physical objects, which interact with the world geometry, with each other and with the player.
3 types of physics objects exist.
A rigid body: is an actor that is part of the physics system for collision, movements, gravity and rotation
A static body: is an actor that is part of the physics system only to collide with. A static body is not movable/rotatable by the physics system, but it is movable by RF scripting
A particle body: is an actor that is part of the physics system only for movement, by you can not collide with a particle.
The default actors in RF, like Pawns, StaticProxyEntities etc... are not part of the physics world and only controllable by RF directly.
However the rigid body entity allows you to assign a Pawn or StaticProxyEntitie as actor and to and make it become part of the physics world. Moving platforms and Doors are not yet supported to be part of the physics world !

PhysicsSystem Entity:

This Entity is optional and allows to influence the time steps used by the physics system
AdvanceTime: The time step each physics simulation makes. This time step is fixed to ensure a good simulation stability (otherwise your bodies will fall through the floor). The default value is 16.7 milliseconds. Making this number larger will speed up the movements of falling bodies, but also lower the physics system accuracy and stability. A better way to speed up your physics is to use smaller geometry for your complete level. Velocity is expressed in meters per second. By making geometry on purpose smaller, the effective motion will be faster !! We recommend to scale down your level by a factor 4 to 10 relative to the default RF editor values. This will not slow down the frame rates, but it will speed up the physics velocities you can realize.
IterationTime: This number defines the maximum frame time before multiple iterations are performed before advancing to the next frame. The number of iterations within 1 frame is calculated as NrOfIterations = 1+FrameTime/IterationTime. The default value is 60 milliseconds. Making this number smaller will speed up the movements of falling bodies, but also increase the number of physics simulation cycles, thus slow down the frame rate. A more optimal approach is to scale down all your complete level.
CollideWithWorld: If true, the world is added to the physics system as an animated body and collision with the world is activated. In general this property should be kept true
Gravity: Defines the force use for gravity by the physics system. The default value is 0 -9.8 0. This value has impact on all objects that do not define a gravity themselves.
Friction: A float between 0 and 1 that defines the friction when colliding with the world
Restitution: A float between 0 and 1 that defines the bounding factor when colliding with the world

PhysicsRigidBody Entity:
This Entity adds a body that is processed by the physics manager
Active: If set to "true" the physics are applied to this body, if set to "false" then the body is excluded from the physics system
ActorAlpha: Alpha of the actor. 255 = Solid, 0 = Transparent
ActorFile: szEntityName of the entity to apply physics on (in general the szEntityName of a Pawn Entity or a StaticProxy Actor) or the name of an actor file to read from. In the later case the file name needs to end at ".act"
Angles: Sets the initial angles of the actor before assigning it to a body
AngularDamping: Defines the damping over time of the rotation of a body (like angular friction)
ApplyGravity: A boolean that defines if a gravity force is placed on this body or not
BBox: Defines what type of BBox is used.
When left empty, the default RF BBox is used.
Alternatively (but not required) you can define yourself a BBox. 3 BBox shapes are supported:
A box is defined by: "Box" <Width> <Height> <Length>
A sphere is defined by: "Sphere" <Diameter>, No ellipse is supported
A cylinder is defined by: "Cylinder" <Diameter> <Height>. A cylinder always ends on half a circle at the top and the bottom.
For any of the parameters <Width> <Height> <Length> or <Diameter> that is defined 0 then this value will be extracted from the RF BBox. Eg "Sphere 0" will create a Sphere BBox with diameter equal to the width of the RF BBox
BodyName: Name you assign to this body. This name can be used in other entities or scripts
BreakageAbsorption:
BreakageMagnitude:
BreakageMass:
BreakageType:
Buoyancy: Boolean that defines if Buoyancy is activated or not.
If Buoyancy is activated the following action happen:
- A rayCast is made from the bodies (origin + height) point downwards. If the ray crosses an empty model, it will recognize this model as being water. If the body is not over water, gravity applies and it will bounce in a traditional way with the geometry. If the body is over water and the body is close to the water surface (Y-water-plane + Y-body-height, here called the trigger point), then gravity is disabled and a upwards force equal to the distance between the bodies Y-position and the Trigger point's Y position. So the deeper the bodies goes into the water, the stronger the upwards force will be. When the Y-position of the origin of the body raises above the trigger point, gravity is restored and the upward force disabled. This results in a damped and floating body in water.
BuoyancyDamping: The damping factor applied when in water. Lower values create a long damping. Numbers close to 1 cause a short damping. A number of 1 results in no damping and values larger then 1 make a growing damping (instable oscillation => do not use it).
BuoyancyImpulse: Defines a multiplication factor applied on the upwards force, when in water
CollideConnected: A boolean that defines if connect geometry can collide with this body or not
LinearDamping: Defines the damping over time of the movement of a body (like movement friction)
Mass: Defines the mass of a body, the higher the mass the less elasticity in the movements
Material: Each body can have a material assigned that defines the colliding properties of this body.
Origin: The origin of this body
Scale: A set of 3 floats defining the actor size scale factor in X, Y and Z direction
ShadowAlpha: The alpha of the shadow. 0 is transparent, 255 is solid
ShadowAlphaBitmap: Name of the alpha bitmap used for projected shadows.
ShadowBitmap: Name of the bitmap used for projected shadows.
szEntityName: The name you give to this entity, used in  triggers, scripts and other entities
ProjectedShadows: Boolean that defines if projected shadows are used or not

PhysicsJoint Entity:

This Entity adds a joint by which you can connect physics bodies. 
DampingsFactor: A float that defines the damping for this body
EnableJoint: When true, the joint is active, when false, the joint is ignored
EnableLimit: When true the motion limits define will be applied, if false, no limits are applied
Epsilon: A float value that is used during joint constraint calculations
Iteration: An integer value. Defines the number of iterations made during joint constraint calculations
JointLenght: A float that defines the length of a joint (only used by the Hinge joint)
LowerLimit: A float that defines the lower angle limit in motion. Angles are defined in degrees
UpperLimit:
A float that defines the higher angle limit in motion. Angles are defined in degrees
LowerLimit2:
A float that defines the lower angle limit in motion. Angles are defined in degrees
UpperLimit2:
A float that defines the higher angle limit in motion. Angles are defined in degrees
JointType:
defines the type of joint to be used. 0 = Ball_in_socket joint, 1 = Hinge joint
Object1: Name of the primary body to be restricted by a  joint
Object2:
Name of the secondary body to be restricted by a joint. If left empty "", a joint to the origin of this entity is created in world space rather then to a second object
szEntityName:
The name you give to this entity, as used in  triggers, scripts or in other entities

PhysicsMaterial Entity:
This Entity adds a material too the physics system that can be connected to a body. The material defines the friction and restitution properties of the body.
Friction: A float between 0 and 1 that defines the friction when colliding with this material
Restitution: A float between 0 and 1 that defines the bounding factor when colliding with this material
szEntityName: The name you give to this entity, used in  triggers, scripts and other entities

PhysicsChain Entity:
This Entity creates a set of bodies that are connected up like a chain by hinge joints
Active: if set to "true" the physics are applied to this chain, if set to "false" then the chain is excluded from the physics system
ActorAlpha: Alpha of the actor. 255 = Solid, 0 = Transparent
ActorCount: If 0, the original ActorFileName is used. If > 0, then an indexed ActorFileName is used. The index starts at 0. The file name to be specified does not include the index! This index will be inserted automatically.
ActorFile: szEntityName of the entity to apply physics on (in general the szEntityName of a Pawn Entity or a StaticProxy Actor) or the name of an actor file to read from. In the later case the file name needs to end at ".act"
Angles: Sets the angle of the actor before assigning it to a body
AngularDamping: Defines the damping over time of the rotation of a body (like angular friction)
ApplyGravity: A boolean that defines if a gravity force is placed on this body or not
BBox: Defines what type of BBox is used.
When left empty, the default RF BBox is used.
Alternatively (but not required) you can define yourself a BBox. 3 BBox shapes are supported:
A box is defined by: "Box" <Width> <Height> <Length>
A sphere is defined by: "Sphere" <Diameter>, No ellipse is supported
A cylinder is defined by: "Cylinder" <Diameter> <Height>. A cylinder always ends on half a circle at the top and the bottom.
For any of the parameters <Width> <Height> <Length> or <Diameter> that is defined 0 then this value will be extracted from the RF BBox. Eg "Sphere 0" will create a Sphere BBox with diameter equal to the width of the RF BBox
BreakageAbsorption:
BreakageMagnitude:
BreakageMass:
BreakageType:
ChainEndName: szEntityName of ChainEnd entity. This is only used when FixedEnd is activated.
CollideConnected: A boolean that defines if connect geometry can collide with this body or not
Epsilon: A float value that is used during joint constraint calculations
FixedEnd: A boolean value that defines if the end of the chain is connected to point in world space or not
FixedStart: A boolean value that defines if the beginning of the chain is connected to point in world space or not
Iteration: An integer value. Defines the number of iterations made during joint constraint calculations
JointAxis: Defines the axis the joint can turn around
JointOffest: An absolute offset added to the joints location
JointDxDyDzOffest: Sets a scale factor for the Dx, Dy and Dz offset for each joint, where Dx, Dy and Dz are Width, Height and Depth of the body
JointLenght: A float that defines the length of a joint (only used by the Hinge joint)
LinearDamping: Defines the damping over time of the movement of a body (like movement friction)
LowerLimit: A float that defines the lower angle limit in motion. Angles are defined in degrees
UpperLimit:
A float that defines the higher angle limit in motion. Angles are defined in degrees
LowerLimit2:
A float that defines the lower angle limit in motion. Angles are defined in degrees
UpperLimit2:
A float that defines the higher angle limit in motion. Angles are defined in degrees
Mass:
Defines the mass of a body, the higher the mass the less elasticity in the movements
Material: Each body can have a material assigned that defines the colliding properties of this body.
NrOfElements: The number of body elements used to build the chain.
Origin: The origin of this first body in the chain
Scale: A set of 3 floats defining the X, Y and Z actor size scale factor used for this body
ShadowAlpha: The alpha of the shadow. 0 is transparent, 255 is solid
ShadowAlphaBitmap: Name of the alpha bitmap used for projected shadows.
ShadowBitmap: Name of the bitmap used for projected shadows.
szEntityName: The name you give to this entity, used in  triggers, scripts and other entities
ProjectedShadows: Boolean that defines if projected shadows are used or not

PhysicsChainEnd Entity:
This Entity defines the end point of a chain in world space
Origin: Defines the origin of last body in the chain
szEntityName: The name you give to this entity as used by the PhysicsChain entity

PhysicsController Entity:

This Entity implements scriptable physics. In a physics script you can define multiple bodies, geometry and joints that will be entered into the physics system. You can use multiple physics controllers in one level reading from one script file of reading from multiple script files. Each script consists of one Order, that is read only once at startup of the game. Physics scripts are not read during the game and therefore will not slow down frame rates.
Enable: Is a boolean that defines if the script is executed or not
OrderName: Defines the name of the order to be executed at startup. Only 1 order is read.
Origin: Defines the origin of the entity
ScriptName: Defines the name of the script file that includes the Physics script. The extension needs to be included, eg like "script.p"
szEntityName: The name you give to this entity as used in triggers and scripts

PhysicsForce Entity:

This Entity activates a custom definable trigger, can move a body to a point and applies a force, twist, impulse force or velocity change an a body under any of 6 conditions:
1) When a specific trigger is activated
2) When an attribute is larger then a value and / or equal to a value and / or smaller then a value
3) When 1 and 2 above are valid at the same time
4) When the player approaches a definable entity within a given diameter
5) When a specific key is pressed
6) When a projectile collides with a body
When Time=0 The trigger will be active as long as one of the conditions is fulfilled. When Time>0, the trigger is activated for maximum the time Time. If a condition is fulfilled for a time shorter then Time, then the Trigger will stop before Time has completed.
A chain of bodies connected by joints can be "shot" apart by a projectile. The first joint assigned to a body hit will be disabled.
Note: This entity can also be used outside the physics system, eg. to create a trigger that is activation using any of the criteria above!
AttributeName: Name of the attribute that is used to trigger to put force
AttrLarger: Force is applied when Attribute is larger then this value
AttrSmaller: Force is applied when Attribute is smaller then this value
AttrEqual: Force is applied when Attribute is equal then this value
BodyName: Name of the body_actor to apply the force on
BreakJoint: If true, the Joint with Id number JointId will break if one or more conditions are true
BreakJointId: Joint Id of the joint to break. If -1, no joint is considered
BreakOnShoot:
If true, a (weapon) projectile that hits a body will break the joint assigned to that body
BreakOnShot: If true, a joint broken will stay broken. If false, a joint will alternating break and glue
DistanceToTrigger: The maximum distance between the player and a definable entity to trigger
EntityName:
Name of the entity used and measure the distance between both, the entity and the player
Force: The force to apply
Impulse: The impulse to apply
InvertTrigger: If false the trigger will activate if a criteria is true, else deactivate")
KeyNrToTrigger: The number of a key that activates she trigger
MoveToPoint: If true, the body/actor is moved to the origin of this PhysicsForce entity
Offset: Allows to move the body/actor to a location with offset from the MoveToPoint
Origin: The origin of this entity, also the new position the body BodyName will move to when MoveToPoint = true
szEntityName: Name of entity as used in scripting and triggers
Time:
The maximum time force is placed in milliseconds, assuming the trigger would be active longer then this time.
Torque: The torque to apply
TriggerToSet: The name of the trigger that will be set/reset when a condition is true
TriggerName: Name of the trigger that enables this entity to put force
TriggerRequired:
If true, the trigger is required together with another condition to apply force
Twist: The twist to apply
Velocity: The velocity to apply

PhysicsVehicle Entity:

This Entity creates a set of 5 bodies that define a vehicle, including the physics for it
Active:
ActorAlpha: Alpha of the actor. 255 = Solid, 0 = Transparent
ActorFile: szEntityName of the entity to apply physics on (in general the szEntityName of a Pawn Entity or a StaticProxy Actor) or the name of an actor file to read from. In the later case the file name needs to end at ".act"
Angles: Sets the angle of the actor before assigning it to a body
AngularDamping: Defines the damping over time of the rotation of a body (like angular friction)
ApplyGravity: A boolean that defines if a gravity force is placed on this body or not
BBox: Defines what type of BBox is used.
When left empty, the default RF BBox is used.
Alternatively (but not required) you can define yourself a BBox. 3 BBox shapes are supported:
A box is defined by: "Box" <Width> <Height> <Length>
A sphere is defined by: "Sphere" <Diameter>, No ellipse is supported
A cylinder is defined by: "Cylinder" <Diameter> <Height>. A cylinder always ends on half a circle at the top and the bottom.
For any of the parameters <Width> <Height> <Length> or <Diameter> that is defined 0 then this value will be extracted from the RF BBox. Eg "Sphere 0" will create a Sphere BBox with diameter equal to the width of the RF BBox
BreakageAbsorption:
BreakageMagnitude:
BreakageMass:
BreakageType:
ChainEndName: szEntityName of ChainEnd entity. This is only used when FixedEnd is activated.
CollideConnected: A boolean that defines if connect geometry can collide with this body or not
Epsilon: A float value that is used during joint constraint calculations
FixedEnd: A boolean value that defines if the end of the chain is connected to point in world space or not
FixedStart: A boolean value that defines if the beginning of the chain is connected to point in world space or not
Iteration: An integer value. Defines the number of iterations made during joint constraint calculations
JointAxis: Defines the axis the joint can turn around
JointOffest: An absolute offset added to the joints location
JointDxDyDzOffest: Sets a scale factor for the Dx, Dy and Dz offset for each joint, where Dx, Dy and Dz are Width, Height and Depth of the body
JointLenght: A float that defines the length of a joint (only used by the Hinge joint)
LinearDamping: Defines the damping over time of the movement of a body (like movement friction)
LowerLimit: A float that defines the lower angle limit in motion. Angles are defined in degrees
UpperLimit:
A float that defines the higher angle limit in motion. Angles are defined in degrees
LowerLimit2:
A float that defines the lower angle limit in motion. Angles are defined in degrees
UpperLimit2:
A float that defines the higher angle limit in motion. Angles are defined in degrees
Mass:
Defines the mass of a body, the higher the mass the less elasticity in the movements
Material: Each body can have a material assigned that defines the colliding properties of this body.
NrOfElements: The number of body elements used to build the chain.
Origin: The origin of this first body in the chain
Scale: A set of 3 floats defining the X, Y and Z actor size scale factor used for this body
ShadowAlpha: The alpha of the shadow. 0 is transparent, 255 is solid
ShadowAlphaBitmap: Name of the alpha bitmap used for projected shadows.
ShadowBitmap: Name of the bitmap used for projected shadows.
szEntityName: The name you give to this entity, used in  triggers, scripts and other entities
ProjectedShadows: Boolean that defines if projected shadows are used or not

PhysicsCollisionMgr Entity:
This Entity manages collision events and allows you to enable/disable collisions or to perform an action when a specific collision takes place, like setting a trigger, making a sound, applying a force, torque, impulse, twist, set velocity or break a joint
TriggerName: The name of the trigger that needs to be active before an action can take place on a collision
CollBodyName_A: Name of the body_actor that needs to be collided with before an action takes place
CollBodyName_B: Name of a second body_actor that is part of the  collision
When only CollBodyName_A is filled in, it's sufficient to have this body colliding anything to start the actions
When both, CollBodyName_A and CollBodyName_B are filled in, then these bodies have to collide before an action takes place
The actions that can take place are:
Force: To set a force on a body specified by BodyName
Torque: To set a torque on a body specified by BodyName
Impulse: To set an impulse on a body specified by BodyName
Twist: To set a twist on a body specified by BodyName
Velocity: To set a velocity on a body specified by BodyName
Force: To set a force on a body specified by BodyName
Or play a sound. Up to 3 different sounds can be selected depending on the material collided with
SoundFile_1: The sound to play when colliding with Material_1
SoundFile_2: The sound to play when colliding with Material_2
SoundFile_3: The sound to play when colliding with Material_3
TriggerRequired: If true, the entity requires a trigger and a second condition to apply force
TriggerToSet: The name of the trigger that will be set/reset by the conditions
InvertTrigger: If false the trigger will activate if a criterium is true, else deactivate
BreakJointId: The Joint Number or the Joint Name of the joint to break/glue
CollisionResponce, Sets the collision responce: IGNORE = 0, IMPULSE = 1, CALLBACK = 2, IMPULSE+CALLBACK = 3
Time: The time force is placed in milliseconds, 0 disable the time check
BreakOneShot: If true, only break a joint once, if false allow to break and glue again
ChangeMaterial: If true, change the material of the collide body
Animation_1: Name of the animation to start when colliding
Animation_2: Name of the animation to start when colliding
Animation_3:
Name of the animation to start when colliding

Other new entities:

PolyArray Entity:
(this has no longer anything to do with physics)
This Entity draws a 3 dimensional array of polys. All polys are always oriented to the camera. The polys can be textured in 3 different ways. If Style = 0, then one fixed bitmap or one flipbook is used for all polys. If style = 1, then each bitmap is a flipbook is used to texture the next poly. If Style =2 then each poly gets random a bitmap assigned from the flipbook.
Usage:
Can be used to draw a field of corn or a bed of flowers or a field of dirt hanging down from the ceiling, where each flower/dirt is a poly.
CountX, Y and Z: Number of polys in X, Y or Z direction (In 3D, X = width, Y = height, Z = depth)
SpacingX, Y and Z: Spacing between 2 nabour polys in X, Y or Z direction (In 3D, X = width, Y = height, Z = depth)
BitmapCount: If 1, the base bitmap is a normal bitmap. If > 1 then the next bitmap is used for each next poly. In this way you can for example draw a bed of flowers. Please note that the index needs to start at 0.
BmpNameBase: Name of the base bitmap. This name needs to include the extension .bmp or .tga or .jpg (all 3 formats are supported)
BmpAlphaBase: Name of the base AlphaBitmap. This name needs to include the extension .bmp or .tga or .jpg (all 3 formats are supported)
FadeOut: If true, alpha of the polys will decline when walking away from the poly field. If false, alpha is always 255
Scale: Sets the scale of all the polys
Range: Sets the range within which rendering will start based on the distance from camera to the origin of polys
Note: You can use two or more PolyArrays that are shifted in order to place the polys in a zigzag effect

8) Extra features added to Entities:

Message entity:
A property NrOfViews and a multiline feature and longer strings where added.
NrOfViews: If NrOfViews = 0, then the message will show up and trigger according the trigger on and off times defined. In general this means that a message will stay popping up as long as you keep the trigger active. To avoid this "again popping up", the NrOfViews can be used.
If not zero, then continuous triggering a message will only show it a NrOfView times
When stopping the trigger th trigger off time will start to run. After this time you can re-trigger again and the message will be shown for a NrOfViews times.
MultiLine: A messages can now be displayed over multiple line by using the # as a separator in the messages you define in message.ini
TextLenght: The allowable length of the text string is extended from 256 characters to 1024 characters in one message
Comment lines: All lines in the message.ini file that start with a ";" or with a "/" are now seen as comment lines. Also leading blanks are removed.

Teleport entity:
3 properties and an internal trigger where added:
fBlendFadeTime: Time to fade in and out during a teleport in milliseconds
fBlendHoldTime: The time in milliseconds during which the screen stays fully blended (between fading in and finding out) while  the teleporting and setting up the new scene takes place. At the start of this hold time an internal trigger is activated and stays active until the user resets it. The name if the trigger is <TargetName>*Tr, where <TargetName> is the name you have filled in in this Teleport entity.
cBlendColor: The color to which the screen will be blended during fading in, blending and fading out

Teleport target entity:
One new property was added
Angle: defines the angle the player will be facing after teleporting. This angle is independent of the players angle before teleporting!

MovingPlatform entity:
Reverse:
When RunFromList = RunTimed = RunToNextEvent = RunWhileTriggered = false and the player is on the platform the reverse property now reverses the animation. If reverse = false, the animation will directly jump from the last keyframe to the first keyframe. If reverse = true the animation will reverse.
ReducedBBoxX / Z: This allows you to start a platform only when the player is well on top of the platform, rather then when he steps on the edges of the platform and still hangs over the border. The trick we use is to check that the platform is collided and that the origin of the player is X and Z pixels within the boundingbox (X=width and Z=depth, Y=height is ignored!). We call this area the reduced bounding box. ReducedBBoxX/Z is a float between 0 and 1 and defines how much percent the boundingbox fictively is reduced in the X direction and Z direction.

Door entity:
Reverse:
Resolved a bug that prevented the reverse-motion-on-door-collision to work. So now it's solved and you player will not stick to a door any more when the door opens in his direction.

TextureProc entity:
A Trigger was added to enable the texture to only animate when triggered

Trigger entity:
One property was added.
bKeepOn: When bKeepOn = true, the trigger will no longer be re-trigger but stay active continuously as long as the attached model is collided.
Usage: This is for example usefull to detect that you are entering / walking in a room and that some animations need to start or a light has to switch on. To achieve this, make the floor of the room  a "model" and assign a trigger entity to this model with the bKeepOn = true. Use now the trigger to start the animations or to switch on the light. When you leave the room animations and light will stop saving resources.

 

9) Other changes:

Running: After a change level, the player will remember if he was running or walking

Console: When using a console(true) script command, the console of the Pawns and LevelControllers where displayed overlapping. This is resolved in the following way. By default, the Pawn console is displayed. By pressing the tilde (~) key, the LevelController console will be displayed instead. Both consoles are exclusive! You can swap between the 2 views by pressing tilde.

Encryption: Many changes where made to RF to enable encryption of the VFS. On the few examples I had available encryption works, but there might be special case where one or more files are not encrypted correctly. When encrypting files, this will be noticed in the RF.log file. When encrypted files can not be found, an attempt is made to find the not encrypted file. This event is logged in RF.log. So RF is able to mix encrypted and not encrypted files.
Some files can not be encrypted and need to be kept outside the VFS file. This includes all the BSP files and all files from the  directories SCRIPTS, MIDI, VIDEO and INSTALL.

Ph_ImpulseForce: This property was added to the definition of a projectile in the file weapon.ini. If a value is assigned (eg ph_impulseforce = 10 10 10) then a force will be applied respectively in X, Y and Z direction to the rigid body that is hit by the projectile. The force is automatically divided by the mass of the body you hit. For bodies with low mass, the force will result in a stronger reaction then for bodies with high mass.

szEntityName: Bug solved in genesis: If not filled in in an entity, you now can refer to the default entity name (was wrongly read before)