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)