Alpine Level Design: Difference between revisions

From Red Faction Wiki
 
(One intermediate revision by the same user not shown)
Line 47: Line 47:
In the stock game, the way values were applied along the mover path was not always intuitive. In Alpine Faction, the travel, acceleration, and deceleration times for a movement segment are always as configured on the starting keyframe for that segment.
In the stock game, the way values were applied along the mover path was not always intuitive. In Alpine Faction, the travel, acceleration, and deceleration times for a movement segment are always as configured on the starting keyframe for that segment.
* For example, if a mover is moving forward from Keyframe A -> B -> C, and is set to "Ping Pong Once":
* For example, if a mover is moving forward from Keyframe A -> B -> C, and is set to "Ping Pong Once":
** Time values configured on Keyframe A are used for the movement from A -> B (moving forward)
** Time values configured on Keyframe A are used for the movement from A -> B (moving forward, uses "Departing Travel Time")
** Time values configured on Keyframe B are used for the movement from B -> C (moving forward)
** Time values configured on Keyframe B are used for the movement from B -> C (moving forward, uses "Departing Travel Time")
** The mover hits Keyframe C, and because it's set to "Ping Pong Once", it reverses direction and begins moving backwards
** The mover hits Keyframe C, and because it's set to "Ping Pong Once", it reverses direction and begins moving backwards
** Time values configured on Keyframe C are used for the movement from C -> B (moving backward)
** Time values configured on Keyframe C are used for the movement from C -> B (moving backward, uses "Returning Travel Time")
** Time values configured on Keyframe B are used for the movement from B -> A (moving backward)
** Time values configured on Keyframe B are used for the movement from B -> A (moving backward, uses "Returning Travel Time")
** The mover hits Keyframe A, and because it's set to "Ping Pong Once" and has now reached its starting position, it stops. The next time it is activated, it begins moving forward from Keyframe A -> B again.
** The mover hits Keyframe A, and because it's set to "Ping Pong Once" and has now reached its starting position, it stops. The next time it is activated, it begins moving forward from Keyframe A -> B again.


Line 126: Line 126:


==HUD Messages==
==HUD Messages==
Magic words can be used in HUD message display (via the ''HUD_Message''' event, and any other reason HUD messages would be rendered) to display dynamic values to the player. The stock game supported the use of magic words in HUD messages for a subset of the controls in the stock game (used in the training mission), but Alpine Faction expands this capability substantially. To use these magic words, simply include their text exactly as written below in the string for your HUD message.
Magic words can be used in HUD message display (via the ''HUD_Message'' event, and any other reason HUD messages would be rendered) to display dynamic values to the player. The stock game supported the use of magic words in HUD messages for a subset of the controls in the stock game (used in the training mission), but Alpine Faction expands this capability substantially. To use these magic words, simply include their text exactly as written below in the string for your HUD message.


The following is a list of magic words that are available for use by level designers and mod developers in Alpine Faction, as well as what they are translated to when displayed as a HUD message
The following is a list of magic words that are available for use by level designers and mod developers in Alpine Faction, as well as what they are translated to when displayed as a HUD message

Latest revision as of 03:57, 14 January 2026

Alpinelogo1.png

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

  • This page is current as of the release of Alpine Faction v1.2.

General

Versioning

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.

Troubleshooting

  • Troubleshooting goals - You can use the [ dbg_goal GOALNAME ] console command at any time to query a goal by name and print its current and initial values.
  • Troubleshooting event and trigger links - You can use the [ debug trigger ] and [ debug event ] console commands at any time (SP only) to draw events and triggers and their links as arrows in the game world. Links from triggers are blue, links from events are purple.

Workflow

  • Multiplayer playtesting - In addition to the Play and Play from Camera features that have always been available, the Alpine level editor adds a feature to allow you to playtest multiplayer maps in multiplayer. If you click the Play in multi or Play in multi (camera) buttons on the top toolbar, the game will launch you into a listen (local) server running your level.
  • Hotkeys - The F9 hotkey now maps to Play in multi and F10 maps to Play in multi (camera)
  • Object links - You can now link to multiple objects at once. When you select multiple objects and press "K", the first object you selected will be linked to all other object you have selected.
  • Pixels/meter tiling - The maximum configurable value in Preference->Texture has been raised to 8192.

Level Properties

  • RFL version - Is now displayed in the Level Properties window.
  • Fog - Default fog colour for newly created levels is now (0, 0, 0) full black instead of the stock game default of (40, 40, 40).

Advanced options

These options allow level designers to access new functionality available only in Alpine Faction. The default values for existing levels ensure functionality continues as it always has (legacy compatible), while the default values for new levels enable the new features. You can control them yourself in the Level Properties window.

  • Legacy Cyclic_Timer events - Disable Cyclic_Timer fix, see Fixed Cyclic_Timer for more information. Defaults to true for existing levels, false for new levels.
  • Legacy movers - Disable new Alpine mover logic, see Movers for more information. Defaults to true for existing levels, false for new levels.
  • Player starts with headlamp - If true, players of this level can use their headlamp immediately when the level loads (SP only). If false, the player must first be given a headlamp with Set_Gameplay_Rule before they can use their headlamp. Defaults to true for existing and new levels.
  • Override static mesh ambient light scale - If true, use the specified New scale value as scalar for ambient light applied to static meshes. If false, use the stock game's behaviour, which is a scale of 2.0 when loaded in SP and 3.2 when loaded in MP. Defaults to false for existing and new levels.

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.

Movers

Alpine Faction fixes several issues present in the stock game with movers, and adds some new functionality for mappers. All functionality described in this section is subject to the Legacy movers option.

Translating Movers

In the stock game, translating movers were never able to move slower than 0.4m/sec. This is now resolved, and movers can move very slow if configured as such. A hard minimum velocity of 0.001m/sec is imposed to handle some obscure framerate-related issues, but in a practical sense this will never be a limiting factor.

In the stock game, travel time is calculated without taking acceleration/deceleration into account, which results in a drift in travel time equal to 50% of the combined acceleration + deceleration time. This is now resolved, and the travel time configured for the keyframe is respected. Note that if the combined acceleration + deceleration time is greater than the configured travel time, the travel time will be increased by Alpine Faction in order to accommodate the provided values.

In the stock game, the way values were applied along the mover path was not always intuitive. In Alpine Faction, the travel, acceleration, and deceleration times for a movement segment are always as configured on the starting keyframe for that segment.

  • For example, if a mover is moving forward from Keyframe A -> B -> C, and is set to "Ping Pong Once":
    • Time values configured on Keyframe A are used for the movement from A -> B (moving forward, uses "Departing Travel Time")
    • Time values configured on Keyframe B are used for the movement from B -> C (moving forward, uses "Departing Travel Time")
    • The mover hits Keyframe C, and because it's set to "Ping Pong Once", it reverses direction and begins moving backwards
    • Time values configured on Keyframe C are used for the movement from C -> B (moving backward, uses "Returning Travel Time")
    • Time values configured on Keyframe B are used for the movement from B -> A (moving backward, uses "Returning Travel Time")
    • The mover hits Keyframe A, and because it's set to "Ping Pong Once" and has now reached its starting position, it stops. The next time it is activated, it begins moving forward from Keyframe A -> B again.

Rotating Movers

In the stock game, "Loop Once" and "Loop Infinite" on rotating movers with rotation degrees < 360 just continued looping 360 degrees regardless. This is now resolved, so the mover works as expected - i.e. with rotation degrees 90 and type "Loop Once", the mover rotates 90 degrees and then snaps back to its starting position.

In the stock game, "Ping Pong Infinite" on rotating movers did not work properly - the behaviour was different than "Ping Pong Once". This is now resolved, and "Ping Pong Infinite" functions identically to "Ping Pong Once", just continues going until forcefully stopped.

"Lift" Movement Type

This option has always been available in Keyframe properties, but has functioned the same as the "One Way" type. This has been resolved - "Lift" now works similarly to "One Way", however whereas "One Way" ensures a one way movement from the starting keyframe to the last keyframe, "Lift" moves just one segment per activation, and then stops and waits to be activated again.

Force Orient

This option has always been available in Keyframe properties, but using it would make levels crash when loading. In Alpine Faction, this option now works properly:

  • For translating movers, it ensures the mover faces the direction of movement while moving (resets to base orientation when stopped)
  • For rotating movers, it ensures the mover maintains its base orientation when moving.

NOTE: While the Force Orient functionality is restricted to Alpine levels (and subject to the "Legacy Movers" option), Alpine Faction fixes the crash issue across all levels. Older levels will no longer crash when this option is used, but they also won't be able to use the functionality (they will act as though this option was simply not enabled).

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". The UID of the Room Effect is the skybox room UID you will specify in the properties of the Set_Skybox event.

Base Functionality

Enhanced skyboxes retain all functionality seen in normal skyboxes, but add:

  • Lighting - Lightmaps are rendered in surfaces in enhanced skyboxes (Direct3D 11 renderer only). If you do not want lightmaps on your skybox faces, you can set them to fullbright in texture properties.
  • Liquid - You can set the Room Effect that designates your enhanced skybox room to type "Liquid Room" if you wish to have a liquid surface in your sky room.

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.

Multiplayer Respawn Points

The stock game recognized only the first 32 Multiplayer Respawn Points placed in a level. Alpine Faction recognizes the first 2048.

In the new KOTH, DC, REV, and ESC gametypes, Multiplayer Respawn Points can be associated with control points. This behaviour is further described in Mapping with Control Points.

Multiplayer Respawn Points can now be toggled on/off with Respawn_Point_State, and the associated team(s) changed with Modify_Respawn_Point.

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.

HUD Messages

Magic words can be used in HUD message display (via the HUD_Message event, and any other reason HUD messages would be rendered) to display dynamic values to the player. The stock game supported the use of magic words in HUD messages for a subset of the controls in the stock game (used in the training mission), but Alpine Faction expands this capability substantially. To use these magic words, simply include their text exactly as written below in the string for your HUD message.

The following is a list of magic words that are available for use by level designers and mod developers in Alpine Faction, as well as what they are translated to when displayed as a HUD message

  • $FIRE$ - Name of the key or mouse button assigned to the primary fire control
  • $ALT_FIRE$ - Name of the key or mouse button assigned to the alternate fire control
  • $USE$ - Name of the key or mouse button assigned to the use control
  • $JUMP$ - Name of the key or mouse button assigned to the jump control
  • $CROUCH$ - Name of the key or mouse button assigned to the crouch control
  • $HOLSTER$ - Name of the key or mouse button assigned to the holster weapon control
  • $RELOAD$ - Name of the key or mouse button assigned to the reload weapon control
  • $NEXT_WEAPON$ - Name of the key or mouse button assigned to the next weapon control
  • $PREV_WEAPON$ - Name of the key or mouse button assigned to the previous weapon control
  • $MESSAGE_LOG$ - Name of the key or mouse button assigned to the message log control
  • $QUICK_SAVE$ - Name of the key or mouse button assigned to the quick save control
  • $QUICK_LOAD$ - Name of the key or mouse button assigned to the quick load control
  • $HEADLAMP$ - Name of the key or mouse button assigned to the toggle headlamp control
  • $SKIP_CUTSCENE$ - Name of the key or mouse button assigned to the skip cutscene control
  • $goal_GOALNAME$ - Value of the goal with name equal to GOALNAME, if such a goal exists in the current map

Events

Fixed Delay Parameter

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

Fixed Cyclic_Timer

Normally, the Cyclic_Timer fires twice on its first activation. In Alpine levels, this is fixed so the first activation (like every other activation_ fires only once. (Subject to Legacy Cyclic_Timer events option)

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
  • Anchor_Marker_Orient

Alpine Events

  • Alpine Faction adds many brand new event objects for use by level designers. For a full list of the new Alpine events, and a breakdown of the functionality of each, see Alpine Faction Event List