Alpine Level Design: Difference between revisions

From Red Faction Wiki
(29 intermediate revisions by the same user not shown)
Line 2: Line 2:
{{Under construction}}
{{Under construction}}


This page lists all new event scripting objects available in Alpine Faction.
This page lists all major differences between normal Red Faction level design and level design for Alpine Levels, as featured in Alpine Faction.


==AF_Flow==
==Compatibility==
'''Alpine Levels are playable only using Alpine Faction.'''
 
Due to features unavailable in those clients, Alpine Levels are '''not''' playable while using other client versions such as any version of Red Faction (official builds), Pure Faction, or Dash Faction.
 
==Geometry==
When constructing non-Alpine levels, faces are added to "fix ps2 tiling" when building geometry, if the texture applied to a given surface tiles many times. This does not occur when constructing Alpine Levels - you can safely tile textures as much as you like without it resulting in additional unnecessary faces being added.
 
Similarly, when adding brushes to moving groups during construction of non-Alpine levels, if those brushes have surfaces with textures that tile many times, the brush will be split. This also does not occur when constructing Alpine Levels - you can safely tile textures as much as you like on brushes that either are, or will eventually be, members of moving groups, without it resulting in additional unnecessary faces being added.
 
==Lighting==
===Lightmaps===
In Alpine Levels, the game does not apply lightmap clamping. This means that the full range of available colors is available - including fully unlit (black) areas. Put another way, the way your lightmaps look when you calculate them in the level editor is how they will look in game.
 
Additionally, the stock editor applies similar lightmap clamping when opening saved levels. This has also been removed in Alpine RED - levels loaded in Alpine RED will look as they did when they were saved.
===Dynamic Lights===
Alpine Levels can utilize dynamic lights - configured via the "Dynamic" checkbox in light properties. Using the ''Anchor_Marker'' event (described below), you can also move dynamic lights using moving groups.
 
Note: Dynamic lights are far more taxing on game performance than normal (static) lights. You should keep this in mind when designing, and use dynamic lights only where necessary to achieve your desired effect.
 
==Skyboxes==
In Alpine Levels, while you can still make static skyboxes as you always could before if you wish, through the ''Set_Skybox'' event (described below) you can enhance your skyboxes. The key differences are listed below.
 
Note: When making an enhanced skybox, while you still do need to place a ''Room Effect'' in the room that is to be your sky room, you should '''not''' select the "Sky Room" type on the ''Room Effect'' - instead, leave "type" set to "None", or set it to "Liquid Room" if you wish to have a liquid surface in your sky room. The UID of the ''Room Effect'' is the skybox room UID you will specify in the properties of the ''Set_Skybox'' event.
===Eye Anchor===
When setting an enhanced skybox via the ''Set_Skybox'' event, you can specify an "eye anchor" UID. This must be the UID of an ''Anchor_Marker'' event that is inside the skybox room you are using. If you specify a valid "eye anchor" UID, this will be the position from which the sky room will be visible when projected as your skybox. You can also place the ''Anchor_Marker'' in a moving group and move it with keyframes if you wish.
 
Caution: Moving the "eye anchor" with keyframes can be very disorienting and take away from your level if you are not careful. In general, you should avoid quick movements.
 
===Relative Position===
When setting an enhanced skybox via the ''Set_Skybox'' event, you can turn on "use relative position" and specify a "relative position scale". If you do, players can move around "inside the sky room" as they play your map. The position of your camera in relation to the world origin (position 0,0,0) is mapped to the "eye" position in the skybox, relative to the "eye anchor" position in the sky room. The position is scaled using the scale.
 
* A "relative position scale" of 1.0 maps camera position relative to world origin to eye position relative to eye anchor position at a ratio of 1:1 - every 1m moved in the world is 1m moved in the skybox.
* A "relative position scale" of 0.25 however, means every 1m moved in the world is 0.25m moved in the skybox. Using this, you can make your skybox much smaller than your actual level.
 
Note: Relative position '''requires''' you specify a scale and an eye anchor (and of course a skyboox room UID). If you do not specify each of these, ticking the "use relative position" option will have no effect.
 
==Triggers==
In multiplayer, unlike levels made for other versions of the game, triggers in Alpine Levels can activate events directly. This includes stock game events and Alpine Events (described below).
 
The following events are not supported in multiplayer and will not function if triggered:
* Load_Level
* Endgame
* Defuse_Nuke
* Drop_Point_Marker
* Go_Undercover
* Win_PS2_Demo
* Play_Video
* When_Picked_Up
 
==Items==
In single player, unlike levels made for other versions of the game, Alpine Levels allow the player to pick up the ''Multi Super Health'' and ''Multi Super Armor'' items.
 
==Events==
===Fixes===
Outside of Alpine Levels, using the delay parameter with the following stock game events leads to that event breaking - the effect will never apply. In Alpine Levels, the delay parameter can be used on these events without issue - just like any other event.
* '''Play_Sound'''
* '''Cyclic_Timer'''
* '''Make_Invulnerable'''
* '''Alarm_Siren'''
* '''Unhide'''
 
===Enhanced Functionality===
In Alpine Levels, some stock game events have been improved in various ways:
* '''Headlamp_State''' - If not linked to any specific entities, applies to the player. Can be used to toggle the player flashlight.
* '''Holster_Weapon''' - Could always be turned on to holster the weapon of linked entities. In Alpine Levels, can also be turned off to force those entities to unholster their weapons.
* '''Holster_Player_Weapon''' - Could always be turned on to holster the player's weapon. In Alpine Levels, can also be turned off to unholster the player's weapon.
 
====Dash Faction====
The following events had functionality added in Dash Faction 1.5.0. This functionality is not specific to Alpine Levels - it is available on any levels when using Dash Faction 1.5.0+ or any version of Alpine Faction. On other client versions (including all official client versions), although levels that rely on this functionality can be loaded, the functionality of these events will be restricted to only their stock game behaviour, which could lead to undesirable behaviour.
* '''Set_Liquid_Depth''' - Had no effect in the stock game. Can now be used to smoothly change the depth of a liquid room.
* '''Switch_Model''' - Used to swap the mesh used by linked clutter objects to a specified file. Could be used in stock game as long as the specified mesh file was a stock game file. Can now be used to specify custom meshes distributed with levels.
 
===Directional Events===
3D arrows in the Alpine level editor are drawn from directional events - that is, events that save their orientation and use it for some purpose. (most events are not directional). The following events are directional:
* '''Play_VClip''' - (did not display a 3D arrow in stock level editor, does in Alpine level editor)
* '''Teleport''' - (did not display a 3D arrow in stock level editor, does in Alpine level editor)
* '''Teleport_Player'''
* '''Clone_Entity'''
* '''AF_Teleport_Player'''
 
===Alpine Events===
The following Alpine Events are completely new and are only available for use in Alpine Levels:
====AF_Catalysts====
<div class="column">
{{Infobox RF1Event
|eventname      = AF_When_Dead
|category      = AF_Catalysts
|description    = Upgraded version of the stock "When_Dead" event. Does not require a slot in the savegame file, so there is no limit on the number of '''AF_When_Dead''' events that you can use in a single map. Also supports repeated activations, unlike the stock event.
|params        = * '''Activate on any dead:''' (bool1) If true, this event sends an on message each time a linked entity or clutter dies. If false, this event only sends a single on message at the time that all linked entities/clutter are dead.
}}
</div><div class="column>
{{Infobox RF1Event
|eventname      = When_Picked_Up
|category      = AF_Catalysts
|description    = Fires a message to all linked triggers, movers, and events whenever a linked item is picked up by the player. Single player only.
}}
</div><div style="clear: both;"></div>
 
====AF_Flow====
<div class="column">
<div class="column">
{{Infobox RF1Event
{{Infobox RF1Event
Line 11: Line 110:
|description    = Each activation of this event routes the message to the next link in sequential order. After the last link, the cycle resets and the first link is called. Note the order of links is determined by the order in which you add them.
|description    = Each activation of this event routes the message to the next link in sequential order. After the last link, the cycle resets and the first link is called. Note the order of links is determined by the order in which you add them.
|on            = Send an on signal to the next link in the sequence.
|on            = Send an on signal to the next link in the sequence.
|params        = * '''last_link_index:''' (int, hidden) Stores the last activated link index. When processing a received on signal, the next index in the links array after this is used.
|params        = * '''Next index to activate:''' (int1) Next link index to be activated when this event processes an on message. This setting essentially allows you to jump to a specific point in the sequence when you wish.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 18: Line 117:
|description    = Tests if the game is set to the specified difficulty and forwards messages only if true.
|description    = Tests if the game is set to the specified difficulty and forwards messages only if true.
|on            = Forward on signal to all links, if the game is set to the specified difficulty.
|on            = Forward on signal to all links, if the game is set to the specified difficulty.
|params        = * '''difficulty:''' (int, "Life") Set the difficulty to test against. 0 = easy, 1 = medium, 2 = hard, 3 = impossible
|params        = * '''Difficulty:''' (int1") Difficulty to test against.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 25: Line 124:
|description    = Tests if the specified UID is a valid object and forwards messages only if true. In the case of objects that have life values (ie. clutter and entities), "valid" means alive.
|description    = Tests if the specified UID is a valid object and forwards messages only if true. In the case of objects that have life values (ie. clutter and entities), "valid" means alive.
|on            = Forward on signal to all links, if the specified object is valid.
|on            = Forward on signal to all links, if the specified object is valid.
|params        = * '''check_uid:''' (int, "Life") Object UID to be checked.
|params        = * '''Object UID to test:''' (int1") Object UID to be checked.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 32: Line 131:
|description    = Tests if an object (default: the player who activated the event) is in a specified area of the map. Forwards messages if true.
|description    = Tests if an object (default: the player who activated the event) is in a specified area of the map. Forwards messages if true.
|on            = Forward on signal to all links if test passes.
|on            = Forward on signal to all links if test passes.
|params        = * '''check_uid:''' (int, "Life") Region to be checked. Can be a trigger UID or a room UID (Room Effect).
|params        = * '''UID (trigger/room) to check:''' (int1) Region to be checked. Can be a trigger UID or a room UID (Room Effect).
* '''test_uid:''' (int, hidden) Object to be checked. Defaults to the player who activated the event.
* '''What to check for:''' (int2) Object to be checked. If not specified, defaults to the player who activated the event.
}}
{{Infobox RF1Event
|eventname      = Gametype_Gate
|category      = AF_Utility
|description    = Performs a test on the gametype of the game. Forwards message to links only if test passes. Works only in multiplayer (test will always fail in single player)
|on            = Perform test and forward message if passed.
|params        = * '''gametype:''' (string, "Goal To Set") Specify the test to run. Must be one of the below, specified exactly.
** '''dm'''
** '''tdm'''
** '''ctf'''
}}
}}
</div><div class="column>
</div><div class="column>
Line 49: Line 138:
|eventname      = Switch_Random
|eventname      = Switch_Random
|category      = AF_Flow
|category      = AF_Flow
|description    = Randomly select one of this event's links and send an on signal to it.
|description    = Randomly select one of this event's links and send an on message to it.
|on            = Send an on signal to a randomly selected link.
|on            = Send an on message to a randomly selected link.
|params        = * '''No repeats until all used:''' (bool1) Never choose the same link twice until all links have been chosen at least once.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
|eventname      = Fixed_Delay
|eventname      = Route_Node
|category      = AF_Flow
|category      = AF_Flow
|description    = Identical to the normal Delay event, but cannot be retriggered. Will forward a message to all links after the specified delay. Messages sent to this event while a message is queued are ignored.
|description    = In-line multi-purpose flow control node. Has several options to control what the processed message looks like.
|on            = Queue a message to be forwarded after the configured delay.
|params        = * '''Node behavior:''' (int1) What should the Route_Node do to the message?
* '''Non-retriggerable delay:''' (bool1) If true, ignore any received messages while a message is currently queued on this Route_Node. Has no effect unless a delay is specified.
* '''Clear trigger info:''' (bool2) If true, clear information about the trigger and object that initiated the message when passing through this Route_Node.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 63: Line 155:
|description    = Performs a test on a specified goal (integer variable). Forwards message to links only if test passes.
|description    = Performs a test on a specified goal (integer variable). Forwards message to links only if test passes.
|on            = Perform test and forward message if passed.
|on            = Perform test and forward message if passed.
|params        = * '''value:''' (int, first "Texture Num") Specify the value to use for the test.
|params        = * '''Goal to test:''' (str1) Specify the goal name to which the test is applied.
* '''goal:''' (string, first "Filename") Specify the goal name to test.
* '''Test to run:''' (int1)
* '''value2:''' (int, second "Texture Num") Specify the second value to use for the test, if a second value is needed (currently only applies to between).
* '''Value to test against:''' (int2) Note: ignored if testing against initial value.
* '''test_type:''' (string, second "Filename") Specify the test to run. Must be one of the below, specified exactly.
** '''equal''' - Goal count equals value.
** '''nequal''' - Goal count does not equal value.
** '''gt''' - Goal count is greater than value.
** '''lt''' - Goal count is less than value.
** '''geq''' - Goal count is greater than or equal to value.
** '''leq''' - Goal count is less than or equal to value.
** '''between''' - Goal count is between value and value2 (inclusive).
** '''odd''' - Goal count is an odd number.
** '''even''' - Goal count is an even number.
** '''divisible''' - Goal count is divisible by value.
** '''ltinit''' - Goal count is less than its initial value.
** '''gtinit''' - Goal count is greater than its initial value.
** '''leinit''' - Goal count is less than or equal to its initial value.
** '''geinit''' - Goal count is greater than or equal to its initial value.
** '''eqinit''' - Goal count is equal to its initial value.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 88: Line 164:
|description    = Performs a test on the environment of the game. Forwards message to links only if test passes.
|description    = Performs a test on the environment of the game. Forwards message to links only if test passes.
|on            = Perform test and forward message if passed.
|on            = Perform test and forward message if passed.
|params        = * '''environment:''' (string, "Goal To Set") Specify the test to run. Must be one of the below, specified exactly.
|params        = * '''Environment to test for:''' (int1) Environment to test against.
** '''multi''' - Event is running in multiplayer.
}}
** '''single''' - Event is running in single player.
{{Infobox RF1Event
** '''server''' - Event is running on a server (listen or dedicated).
|eventname      = Gametype_Gate
** '''dedicated''' - Event is running on a dedicated server.
|category      = AF_Utility
** '''client''' - Event is running on a client.
|description    = Performs a test on the gametype of the game. Forwards message to links only if test passes. Works only in multiplayer (test will always fail in single player).
|on             = Perform test and forward message if passed.
|params        = * '''Check for gametype:''' (int1) Gametype to test against.
}}
}}
</div><div style="clear: both;"></div>
</div><div style="clear: both;"></div>


==AF_General==
====AF_General====
<div class="column">
<div class="column">
{{Infobox RF1Event
{{Infobox RF1Event
Line 103: Line 181:
|category      = AF_General
|category      = AF_General
|description    = Creates a clone of the linked entity with the same properties and settings as its source.
|description    = Creates a clone of the linked entity with the same properties and settings as its source.
|on            = Create a clone at the event's position.
|on            = Create a clone at the event's position, and with the event's orientation.
|params        = * '''Clone is hostile to player:''' (bool1) If true, clone is actively hostile to player and will engage if it spots the player.
* '''Go to player:''' (bool2) If true, the clone will begin running to the player immediately when created. Assuming there is a valid route to the player's position, it will find them.
* '''Link event UID to clone:''' (int1) If specified, when a clone is created, a link will be created between the specified event UID and the clone.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 117: Line 198:
|description    = Set the hardness for the loaded level (size of geo craters).
|description    = Set the hardness for the loaded level (size of geo craters).
|on            = Set hardness to the specified value.
|on            = Set hardness to the specified value.
|params        = * '''hardness:''' (int, "Life") The hardness value to set.
|params        = * '''Hardness:''' (int1) The hardness value to set.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 124: Line 205:
|description    = Set the difficulty level of the game.
|description    = Set the difficulty level of the game.
|on            = Set difficulty to the specified value.
|on            = Set difficulty to the specified value.
|params        = * '''difficulty:''' (int, "Life") Set the difficulty to test against. 0 = easy, 1 = medium, 2 = hard, 3 = impossible
|params        = * '''Difficulty:''' (int1) Set the game's difficulty.
}}
{{Infobox RF1Event
|eventname      = Set_Skybox
|category      = AF_General
|description    = Set the room to project as skybox.
|on            = Set skybox information as configured.
|params        = * '''Skybox room UID:''' (int1) Specify the room UID (by ''Room Effect'') to set as the sky room.
* '''Eye anchor UID:''' (int2) Specify the ''Anchor_Marker'' event to use as the eye position inside the sky room.
* '''Use relative position:''' (bool1) If true, apply relative position mapping camera position in world space to eye position in the sky room.
* '''Relative position scale:''' (float1) Scale/ratio to apply to relative position camera mapping.
}}
{{Infobox RF1Event
|eventname      = Set_Item_Drop
|category      = AF_General
|description    = Changes the configured item drop for linked entities.
|on            = Set item drop.
|params        = * '''Item class to drop:''' (str1) Item name to drop. Event will have no effect unless this is a valid item name (from [[items.tbl]])
}}
{{Infobox RF1Event
|eventname      = Set_Life
|category      = AF_General
|description    = Changes the base life value of linked clutter and/or entities.
|on            = Set the base life value.
|params        = *'''New life value:''' (int1)
}}
{{Infobox RF1Event
|eventname      = AF_Heal
|category      = AF_General
|description    = Heal or damage the player (or multiple players in multiplayer) by a specific amount. Can also apply to armour.
|on            = Apply the configured change.
|params        = * '''Amount:''' (int1) What numeric change should be applied
* '''Apply change to:''' (int2) Who should it be applied to?
* '''Apply to armor instead:''' (bool1) If true, apply the change to armour rather than health.
* '''Allow super values:''' (bool2) If true, accomodate for super health/super armour. If false, the resulting health or armour after applying the change is clamped to 0-100. If true, it's clamped to 0-200.
}}
}}
</div><div class="column>
</div><div class="column>
Line 132: Line 247:
|description    = Display a green HUD message in the bottom middle of the screen (like the helper text when you pick up items).
|description    = Display a green HUD message in the bottom middle of the screen (like the helper text when you pick up items).
|on            = Display the HUD message for the configured duration.
|on            = Display the HUD message for the configured duration.
|params        = * '''message:''' (string, "Goal To Set") The message to display.
|params        = * '''Message text:''' (str1) The message to display.
* '''duration:''' (int, hidden) Duration (in ms) the message will be displayed. If not specified, defaults to 5000 (5 seconds).
* '''Duration:''' (float1) Duration in seconds the message will be displayed. Note the message will go away quicker if another HUD message is displayed (such as from another HUD_Message event, or from the player picking up an item)
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
Line 140: Line 255:
|description    = Play a .bik format video.
|description    = Play a .bik format video.
|on            = Play the video specified.
|on            = Play the video specified.
|params        = * '''filename:''' (string, "Goal To Set") The filename of the video to play.
|params        = * '''Video filename:''' (str1) The filename of the video to play.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
|eventname      = Force_Unhide
|eventname      = Force_Unhide
|category      = AF_General
|category      = AF_General
|description    = Force unhide/hide an object with no conditions. Virtually identical to the stock "Unhide" event, except this one will do it regardless of player line of sight or any other factors.
|description    = Force unhide/hide an object with no conditions. Virtually identical to the stock "Unhide" event, except this one will always do it, regardless of player line of sight or any other factors.
|on            = Unhide linked objects.
|on            = Unhide linked objects.
|off            = Hide linked objects.
|off            = Hide linked objects.
Line 154: Line 269:
|description    = Sets the far clip plane used for distance fog.
|description    = Sets the far clip plane used for distance fog.
|on            = Set far clip plane to specified value (in metres).
|on            = Set far clip plane to specified value (in metres).
|params        = * '''far_clip:''' (int, "Life") Far clip plane distance.
|params        = * '''Far clip distance:''' (int1) Far clip plane distance.
}}
{{Infobox RF1Event
|eventname      = Set_Entity_Flag
|category      = AF_General
|description    = Turn on or off entity flags on linked entities.
|on            = Turn selected flag on.
|off            = Turn selected flag off.
|params        = * '''Flag to set:''' (int1)
}}
{{Infobox RF1Event
|eventname      = Set_Debris
|category      = AF_General
|description    = Set the debris and explosion parameters for linked clutter and/or entities.
|on            = Set values as specified.
|params        = * '''Debris filename:''' (str1) Filename of debris to set.
* '''Explosion VClip index:''' (int1) Index of VClip to play when object dies (from [[vclip.tbl]]).
* '''Explosion VClip radius:''' (float1)
* '''Debris sound set:''' (str2) Sound set to use for debris collision (from [[foley.tbl]]). (Only supported on clutter)
* '''Debris velocity:''' (float2) Velocity of debris. (Only supported on clutter)
}}
{{Infobox RF1Event
|eventname      = AF_Teleport_Player
|category      = AF_General
|description    = Teleport player to the event's position, with the event's orientation.
|on            = Teleport player.
|params        = * '''Reset player velocity:''' (bool1) If true, set player velocity to 0 m/s after teleporting. If false, player details velocity, but it is translated based on the orientation of the event.
* '''Eject player from vehicle:''' (bool2) If true, if the player is in a vehicle, eject them from the vehicle and teleport them just as a player. If false, teleport their vehicle. Has no effect in multiplayer or if the player is not in a vehicle.
* '''Entrance VClip:''' (str1) VClip name (from [[vclip.tbl]]) to play at the player's position just before they teleport.
* '''Exit VClip:''' (str2) VClip name (from [[vclip.tbl]]) to play at the teleport destination when the player arrives.
}}
{{Infobox RF1Event
|eventname      = Set_Fog_Color
|category      = AF_General
|description    = Sets the distance fog colour.
|on            = Set configured fog colour.
|params        = * '''Fog color:''' (str1) Specify fog colour to set. Uses the same format as Level Properties - e.g. specifying "<255, 255, 255>" would result in pure white fog.
}}
}}
</div><div style="clear: both;"></div>
</div><div style="clear: both;"></div>


==AF_Utility==
====AF_Utility====
<div class="column">
<div class="column">
{{Infobox RF1Event
{{Infobox RF1Event
|eventname      = SetVar
|eventname      = Set_Variable
|category      = AF_Utility
|category      = AF_Utility
|description    = Reconfigure a variable on linked events. Only supports new Alpine Faction events. Supports "delay" (float) as a variable name to set event delay. Other variable names are as indicated on this page. Specify the name of the variable to be set in the script name for SetVar using this scripe name format: "SetVar_VARNAME" where "VARNAME" is the variable name.
|description    = Reconfigure a variable on linked Alpine Faction event(s).
|on             = Set var_name to var_value on all linked events.
|on             = Updates the variable of the linked event(s) based on the provided configuration.
|params        = * '''var_name:''' (string, set via script name) The name of the variable to be set.
|params        = * '''Variable handle:''' The variable to be set. This corresponds to the variable names provided in parentheses on the properties panel for Alpine events.
* '''var_value:''' (string, "Goal To Set") The value to set var_name to. You must ensure you are providing a valid value for the type of the variable you are setting. If not specified, defaults to a blank string.
* '''Value for int1 or int2:''' If variable handle is int1 or int2, set the variable on the linked event(s) to this value.
* '''Value for delay, float1, or float2:''' If variable handle is delay, float1, or float2, set the variable on the linked event(s) to this value.
* '''Value for bool1 or bool2:''' If variable handle is bool1 or bool2, set the variable on the linked event(s) to this value.
* '''Value for str1 or str2:''' If variable handle is str1 or str2, set the variable on the linked event(s) to this value.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
|eventname      = Remove_Link
|eventname      = Remove_Link
|category      = AF_Utility
|category      = AF_Utility
|description    = Used to remove links. If "remove_all" is turned off (default), removes links between objects this event is linked to. If "remove_all" is turned on, remove all links between every object this event is linked to and any other objects.
|description    = Used to remove links between objects. By default (with "Purge all links" turned off), removes links between objects this event is linked to.
|on            = Remove links.
|on            = Remove links.
|params        = * '''remove_all:''' (boolean, "Run") Turn on "remove_all".
|params        = * '''Purge all links:''' (bool1) Instead, remove all links between every object this event is linked to and any other objects.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
|eventname      = Goal_Math
|eventname      = Goal_Math
|category      = AF_Utility
|category      = AF_Utility
|description    = Used to perform math operations on goals (integer variables). Applies the operation to any level (non-persistent) goals, as well as any persistent goals that are loaded.
|description    = Used to perform math operations on goals (integer variables). Applies the operation to level (non-persistent) goals, as well as persistent goals that are loaded.
|on            = Apply the operation.
|on            = Apply the operation.
|params        = * '''value:''' (int, first "Texture Num") Specify the value to use for the operation.
|params        = * '''Goal to edit:''' (str1) Specify the goal name to apply the operation.
* '''goal:''' (string, first "Filename") Specify the goal name to which the operation will apply.
* '''Operation to perform:''' (int1)
* '''value2:''' (int, second "Texture Num") Specify the second value to use for the operation, if a second value is needed (currently only applies to clamp).
* '''Value to use for operation:''' (int2)
* '''operation:''' (string, second "Filename") Specify the operation to apply. Must be one of the below, specified exactly.
** '''add''' - Add value to goal count.
** '''sub''' - Subtract value from goal count.
** '''mul''' - Multiply goal count by value.
** '''div''' - Divide goal count by value.
** '''rdiv''' - Divide value by goal count.
** '''set''' - Set goal count explicitly to value.
** '''mod''' - Return modulus of goal count divided by value.
** '''pow''' - Raise goal count to the power of value.
** '''neg''' - Set goal count negative.
** '''abs''' - Set goal count positive (absolute value).
** '''clamp''' - Clamp goal count between value and value2.
** '''max''' - Set goal count to the highest between goal count and value.
** '''min''' - Set goal count to the lowest between goal count and value.
** '''reset''' - Set goal count to its initial value.
}}
}}
</div><div class="column>
</div><div class="column>
Line 209: Line 348:
|eventname      = Add_Link
|eventname      = Add_Link
|category      = AF_Utility
|category      = AF_Utility
|description    = Adds links from the first link in the link array to each other link in the array. Link array is ordered based on the order in which you linked this event to other objects.
|description    = Adds links from the specified source event to each object this event is linked to.
|on            = Add links.
|on            = Add links.
|params        = * '''Source event UID:''' (int1) Source event for the links.
* '''Link inbound:''' (bool1) Reverse the operation - create links from each object this event is linked to, inbound to the specified source event.
}}
}}
{{Infobox RF1Event
{{Infobox RF1Event
|eventname      = Anchor_Marker
|eventname      = Anchor_Marker
|category      = AF_Utility
|category      = AF_Utility
|description    = Used to "drag along" some object types that can't normally be added to moving groups. Simply add the Anchor Marker to the moving group, then link the Anchor_Marker to the objects you want to bring. That object/those objects will have their position locked to the position of the Anchor_Marker event as it travels with the mover. Supports Lights (Dynamic only), Particle Emitters, and Push Regions
|description    = Used to "drag along" some object types that can't normally be added to moving groups. Simply add the Anchor Marker to the moving group, then link the Anchor_Marker to the objects you want to bring. That object/those objects will have their position locked to the position of the Anchor_Marker event as it travels with the mover. Supports Lights (Dynamic only), Particle Emitters, and Push Regions. Can also be used in conjunction with '''Set_Skybox''' to specify the "eye" location within the skybox.
}}
}}
</div><div style="clear: both;"></div>
</div><div style="clear: both;"></div>

Revision as of 19:34, 2 January 2025



This page lists all major differences between normal Red Faction level design and level design for Alpine Levels, as featured in Alpine Faction.

Compatibility

Alpine Levels are playable only using Alpine Faction.

Due to features unavailable in those clients, Alpine Levels are not playable while using other client versions such as any version of Red Faction (official builds), Pure Faction, or Dash Faction.

Geometry

When constructing non-Alpine levels, faces are added to "fix ps2 tiling" when building geometry, if the texture applied to a given surface tiles many times. This does not occur when constructing Alpine Levels - you can safely tile textures as much as you like without it resulting in additional unnecessary faces being added.

Similarly, when adding brushes to moving groups during construction of non-Alpine levels, if those brushes have surfaces with textures that tile many times, the brush will be split. This also does not occur when constructing Alpine Levels - you can safely tile textures as much as you like on brushes that either are, or will eventually be, members of moving groups, without it resulting in additional unnecessary faces being added.

Lighting

Lightmaps

In Alpine Levels, the game does not apply lightmap clamping. This means that the full range of available colors is available - including fully unlit (black) areas. Put another way, the way your lightmaps look when you calculate them in the level editor is how they will look in game.

Additionally, the stock editor applies similar lightmap clamping when opening saved levels. This has also been removed in Alpine RED - levels loaded in Alpine RED will look as they did when they were saved.

Dynamic Lights

Alpine Levels can utilize dynamic lights - configured via the "Dynamic" checkbox in light properties. Using the Anchor_Marker event (described below), you can also move dynamic lights using moving groups.

Note: Dynamic lights are far more taxing on game performance than normal (static) lights. You should keep this in mind when designing, and use dynamic lights only where necessary to achieve your desired effect.

Skyboxes

In Alpine Levels, while you can still make static skyboxes as you always could before if you wish, through the Set_Skybox event (described below) you can enhance your skyboxes. The key differences are listed below.

Note: When making an enhanced skybox, while you still do need to place a Room Effect in the room that is to be your sky room, you should not select the "Sky Room" type on the Room Effect - instead, leave "type" set to "None", or set it to "Liquid Room" if you wish to have a liquid surface in your sky room. The UID of the Room Effect is the skybox room UID you will specify in the properties of the Set_Skybox event.

Eye Anchor

When setting an enhanced skybox via the Set_Skybox event, you can specify an "eye anchor" UID. This must be the UID of an Anchor_Marker event that is inside the skybox room you are using. If you specify a valid "eye anchor" UID, this will be the position from which the sky room will be visible when projected as your skybox. You can also place the Anchor_Marker in a moving group and move it with keyframes if you wish.

Caution: Moving the "eye anchor" with keyframes can be very disorienting and take away from your level if you are not careful. In general, you should avoid quick movements.

Relative Position

When setting an enhanced skybox via the Set_Skybox event, you can turn on "use relative position" and specify a "relative position scale". If you do, players can move around "inside the sky room" as they play your map. The position of your camera in relation to the world origin (position 0,0,0) is mapped to the "eye" position in the skybox, relative to the "eye anchor" position in the sky room. The position is scaled using the scale.

  • A "relative position scale" of 1.0 maps camera position relative to world origin to eye position relative to eye anchor position at a ratio of 1:1 - every 1m moved in the world is 1m moved in the skybox.
  • A "relative position scale" of 0.25 however, means every 1m moved in the world is 0.25m moved in the skybox. Using this, you can make your skybox much smaller than your actual level.

Note: Relative position requires you specify a scale and an eye anchor (and of course a skyboox room UID). If you do not specify each of these, ticking the "use relative position" option will have no effect.

Triggers

In multiplayer, unlike levels made for other versions of the game, triggers in Alpine Levels can activate events directly. This includes stock game events and Alpine Events (described below).

The following events are not supported in multiplayer and will not function if triggered:

  • Load_Level
  • Endgame
  • Defuse_Nuke
  • Drop_Point_Marker
  • Go_Undercover
  • Win_PS2_Demo
  • Play_Video
  • When_Picked_Up

Items

In single player, unlike levels made for other versions of the game, Alpine Levels allow the player to pick up the Multi Super Health and Multi Super Armor items.

Events

Fixes

Outside of Alpine Levels, using the delay parameter with the following stock game events leads to that event breaking - the effect will never apply. In Alpine Levels, the delay parameter can be used on these events without issue - just like any other event.

  • Play_Sound
  • Cyclic_Timer
  • Make_Invulnerable
  • Alarm_Siren
  • Unhide

Enhanced Functionality

In Alpine Levels, some stock game events have been improved in various ways:

  • Headlamp_State - If not linked to any specific entities, applies to the player. Can be used to toggle the player flashlight.
  • Holster_Weapon - Could always be turned on to holster the weapon of linked entities. In Alpine Levels, can also be turned off to force those entities to unholster their weapons.
  • Holster_Player_Weapon - Could always be turned on to holster the player's weapon. In Alpine Levels, can also be turned off to unholster the player's weapon.

Dash Faction

The following events had functionality added in Dash Faction 1.5.0. This functionality is not specific to Alpine Levels - it is available on any levels when using Dash Faction 1.5.0+ or any version of Alpine Faction. On other client versions (including all official client versions), although levels that rely on this functionality can be loaded, the functionality of these events will be restricted to only their stock game behaviour, which could lead to undesirable behaviour.

  • Set_Liquid_Depth - Had no effect in the stock game. Can now be used to smoothly change the depth of a liquid room.
  • Switch_Model - Used to swap the mesh used by linked clutter objects to a specified file. Could be used in stock game as long as the specified mesh file was a stock game file. Can now be used to specify custom meshes distributed with levels.

Directional Events

3D arrows in the Alpine level editor are drawn from directional events - that is, events that save their orientation and use it for some purpose. (most events are not directional). The following events are directional:

  • Play_VClip - (did not display a 3D arrow in stock level editor, does in Alpine level editor)
  • Teleport - (did not display a 3D arrow in stock level editor, does in Alpine level editor)
  • Teleport_Player
  • Clone_Entity
  • AF_Teleport_Player

Alpine Events

The following Alpine Events are completely new and are only available for use in Alpine Levels:

AF_Catalysts

Icon Event E.png

AF_When_Dead

Upgraded version of the stock "When_Dead" event. Does not require a slot in the savegame file, so there is no limit on the number of AF_When_Dead events that you can use in a single map. Also supports repeated activations, unlike the stock event.
On Response
None
Off Response
None
Parameters
  • Activate on any dead: (bool1) If true, this event sends an on message each time a linked entity or clutter dies. If false, this event only sends a single on message at the time that all linked entities/clutter are dead.
Icon Event E.png

When_Picked_Up

Fires a message to all linked triggers, movers, and events whenever a linked item is picked up by the player. Single player only.
On Response
None
Off Response
None
Parameters
No additional parameters.

AF_Flow

Icon Event E.png

Sequence

Each activation of this event routes the message to the next link in sequential order. After the last link, the cycle resets and the first link is called. Note the order of links is determined by the order in which you add them.
On Response
Send an on signal to the next link in the sequence.
Off Response
None
Parameters
  • Next index to activate: (int1) Next link index to be activated when this event processes an on message. This setting essentially allows you to jump to a specific point in the sequence when you wish.
Icon Event E.png

Difficulty_Gate

Tests if the game is set to the specified difficulty and forwards messages only if true.
On Response
Forward on signal to all links, if the game is set to the specified difficulty.
Off Response
None
Parameters
  • Difficulty: (int1") Difficulty to test against.
Icon Event E.png

Valid_Gate

Tests if the specified UID is a valid object and forwards messages only if true. In the case of objects that have life values (ie. clutter and entities), "valid" means alive.
On Response
Forward on signal to all links, if the specified object is valid.
Off Response
None
Parameters
  • Object UID to test: (int1") Object UID to be checked.
Icon Event E.png

Inside_Gate

Tests if an object (default: the player who activated the event) is in a specified area of the map. Forwards messages if true.
On Response
Forward on signal to all links if test passes.
Off Response
None
Parameters
  • UID (trigger/room) to check: (int1) Region to be checked. Can be a trigger UID or a room UID (Room Effect).
  • What to check for: (int2) Object to be checked. If not specified, defaults to the player who activated the event.
Icon Event E.png

Switch_Random

Randomly select one of this event's links and send an on message to it.
On Response
Send an on message to a randomly selected link.
Off Response
None
Parameters
  • No repeats until all used: (bool1) Never choose the same link twice until all links have been chosen at least once.
Icon Event E.png

Route_Node

In-line multi-purpose flow control node. Has several options to control what the processed message looks like.
On Response
None
Off Response
None
Parameters
  • Node behavior: (int1) What should the Route_Node do to the message?
  • Non-retriggerable delay: (bool1) If true, ignore any received messages while a message is currently queued on this Route_Node. Has no effect unless a delay is specified.
  • Clear trigger info: (bool2) If true, clear information about the trigger and object that initiated the message when passing through this Route_Node.
Icon Event E.png

Goal_Gate

Performs a test on a specified goal (integer variable). Forwards message to links only if test passes.
On Response
Perform test and forward message if passed.
Off Response
None
Parameters
  • Goal to test: (str1) Specify the goal name to which the test is applied.
  • Test to run: (int1)
  • Value to test against: (int2) Note: ignored if testing against initial value.
Icon Event E.png

Environment_Gate

Performs a test on the environment of the game. Forwards message to links only if test passes.
On Response
Perform test and forward message if passed.
Off Response
None
Parameters
  • Environment to test for: (int1) Environment to test against.
Icon Event E.png

Gametype_Gate

Performs a test on the gametype of the game. Forwards message to links only if test passes. Works only in multiplayer (test will always fail in single player).
On Response
Perform test and forward message if passed.
Off Response
None
Parameters
  • Check for gametype: (int1) Gametype to test against.

AF_General

Icon Event E.png

Clone_Entity

Creates a clone of the linked entity with the same properties and settings as its source.
On Response
Create a clone at the event's position, and with the event's orientation.
Off Response
None
Parameters
  • Clone is hostile to player: (bool1) If true, clone is actively hostile to player and will engage if it spots the player.
  • Go to player: (bool2) If true, the clone will begin running to the player immediately when created. Assuming there is a valid route to the player's position, it will find them.
  • Link event UID to clone: (int1) If specified, when a clone is created, a link will be created between the specified event UID and the clone.
Icon Event E.png

Set_Player_World_Collide

Control whether the player collides with level geometry.
On Response
Collision = true (default)
Off Response
Collision = false
Parameters
No additional parameters.
Icon Event E.png

Set_Level_Hardness

Set the hardness for the loaded level (size of geo craters).
On Response
Set hardness to the specified value.
Off Response
None
Parameters
  • Hardness: (int1) The hardness value to set.
Icon Event E.png

Set_Difficulty

Set the difficulty level of the game.
On Response
Set difficulty to the specified value.
Off Response
None
Parameters
  • Difficulty: (int1) Set the game's difficulty.
Icon Event E.png

Set_Skybox

Set the room to project as skybox.
On Response
Set skybox information as configured.
Off Response
None
Parameters
  • Skybox room UID: (int1) Specify the room UID (by Room Effect) to set as the sky room.
  • Eye anchor UID: (int2) Specify the Anchor_Marker event to use as the eye position inside the sky room.
  • Use relative position: (bool1) If true, apply relative position mapping camera position in world space to eye position in the sky room.
  • Relative position scale: (float1) Scale/ratio to apply to relative position camera mapping.
Icon Event E.png

Set_Item_Drop

Changes the configured item drop for linked entities.
On Response
Set item drop.
Off Response
None
Parameters
  • Item class to drop: (str1) Item name to drop. Event will have no effect unless this is a valid item name (from items.tbl)
Icon Event E.png

Set_Life

Changes the base life value of linked clutter and/or entities.
On Response
Set the base life value.
Off Response
None
Parameters
  • New life value: (int1)
Icon Event E.png

AF_Heal

Heal or damage the player (or multiple players in multiplayer) by a specific amount. Can also apply to armour.
On Response
Apply the configured change.
Off Response
None
Parameters
  • Amount: (int1) What numeric change should be applied
  • Apply change to: (int2) Who should it be applied to?
  • Apply to armor instead: (bool1) If true, apply the change to armour rather than health.
  • Allow super values: (bool2) If true, accomodate for super health/super armour. If false, the resulting health or armour after applying the change is clamped to 0-100. If true, it's clamped to 0-200.
Icon Event E.png

HUD_Message

Display a green HUD message in the bottom middle of the screen (like the helper text when you pick up items).
On Response
Display the HUD message for the configured duration.
Off Response
None
Parameters
  • Message text: (str1) The message to display.
  • Duration: (float1) Duration in seconds the message will be displayed. Note the message will go away quicker if another HUD message is displayed (such as from another HUD_Message event, or from the player picking up an item)
Icon Event E.png

Play_Video

Play a .bik format video.
On Response
Play the video specified.
Off Response
None
Parameters
  • Video filename: (str1) The filename of the video to play.
Icon Event E.png

Force_Unhide

Force unhide/hide an object with no conditions. Virtually identical to the stock "Unhide" event, except this one will always do it, regardless of player line of sight or any other factors.
On Response
Unhide linked objects.
Off Response
Hide linked objects.
Parameters
No additional parameters.
Icon Event E.png

Set_Fog_Far_Clip

Sets the far clip plane used for distance fog.
On Response
Set far clip plane to specified value (in metres).
Off Response
None
Parameters
  • Far clip distance: (int1) Far clip plane distance.
Icon Event E.png

Set_Entity_Flag

Turn on or off entity flags on linked entities.
On Response
Turn selected flag on.
Off Response
Turn selected flag off.
Parameters
  • Flag to set: (int1)
Icon Event E.png

Set_Debris

Set the debris and explosion parameters for linked clutter and/or entities.
On Response
Set values as specified.
Off Response
None
Parameters
  • Debris filename: (str1) Filename of debris to set.
  • Explosion VClip index: (int1) Index of VClip to play when object dies (from vclip.tbl).
  • Explosion VClip radius: (float1)
  • Debris sound set: (str2) Sound set to use for debris collision (from foley.tbl). (Only supported on clutter)
  • Debris velocity: (float2) Velocity of debris. (Only supported on clutter)
Icon Event E.png

AF_Teleport_Player

Teleport player to the event's position, with the event's orientation.
On Response
Teleport player.
Off Response
None
Parameters
  • Reset player velocity: (bool1) If true, set player velocity to 0 m/s after teleporting. If false, player details velocity, but it is translated based on the orientation of the event.
  • Eject player from vehicle: (bool2) If true, if the player is in a vehicle, eject them from the vehicle and teleport them just as a player. If false, teleport their vehicle. Has no effect in multiplayer or if the player is not in a vehicle.
  • Entrance VClip: (str1) VClip name (from vclip.tbl) to play at the player's position just before they teleport.
  • Exit VClip: (str2) VClip name (from vclip.tbl) to play at the teleport destination when the player arrives.
Icon Event E.png

Set_Fog_Color

Sets the distance fog colour.
On Response
Set configured fog colour.
Off Response
None
Parameters
  • Fog color: (str1) Specify fog colour to set. Uses the same format as Level Properties - e.g. specifying "<255, 255, 255>" would result in pure white fog.

AF_Utility

Icon Event E.png

Set_Variable

Reconfigure a variable on linked Alpine Faction event(s).
On Response
Updates the variable of the linked event(s) based on the provided configuration.
Off Response
None
Parameters
  • Variable handle: The variable to be set. This corresponds to the variable names provided in parentheses on the properties panel for Alpine events.
  • Value for int1 or int2: If variable handle is int1 or int2, set the variable on the linked event(s) to this value.
  • Value for delay, float1, or float2: If variable handle is delay, float1, or float2, set the variable on the linked event(s) to this value.
  • Value for bool1 or bool2: If variable handle is bool1 or bool2, set the variable on the linked event(s) to this value.
  • Value for str1 or str2: If variable handle is str1 or str2, set the variable on the linked event(s) to this value.
Icon Event E.png

Remove_Link

Used to remove links between objects. By default (with "Purge all links" turned off), removes links between objects this event is linked to.
On Response
Remove links.
Off Response
None
Parameters
  • Purge all links: (bool1) Instead, remove all links between every object this event is linked to and any other objects.
Icon Event E.png

Goal_Math

Used to perform math operations on goals (integer variables). Applies the operation to level (non-persistent) goals, as well as persistent goals that are loaded.
On Response
Apply the operation.
Off Response
None
Parameters
  • Goal to edit: (str1) Specify the goal name to apply the operation.
  • Operation to perform: (int1)
  • Value to use for operation: (int2)
Icon Event E.png

Clear_Queued

Clears queued message (if any) on all linked events. Queued messages are messages that are queued per a configured delay value on that event.
On Response
Clear queued messages.
Off Response
None
Parameters
No additional parameters.
Icon Event E.png

Add_Link

Adds links from the specified source event to each object this event is linked to.
On Response
Add links.
Off Response
None
Parameters
  • Source event UID: (int1) Source event for the links.
  • Link inbound: (bool1) Reverse the operation - create links from each object this event is linked to, inbound to the specified source event.
Icon Event E.png

Anchor_Marker

Used to "drag along" some object types that can't normally be added to moving groups. Simply add the Anchor Marker to the moving group, then link the Anchor_Marker to the objects you want to bring. That object/those objects will have their position locked to the position of the Anchor_Marker event as it travels with the mover. Supports Lights (Dynamic only), Particle Emitters, and Push Regions. Can also be used in conjunction with Set_Skybox to specify the "eye" location within the skybox.
On Response
None
Off Response
None
Parameters
No additional parameters.