Trigger changelevel: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(→‎Notes: Added additional fail conditions from the source code)
m (Grouped notes about info_landmark. Used Template:Game name.)
Line 1: Line 1:
{{base brush|trigger_changelevel}} It [[trigger]]s a level change.
{{base brush|trigger_changelevel}}
It [[trigger]]s a level change.
{{note|This brush entity does not work in {{game name|hl2dm|name=Half-Life 2: Deathmatch}}.}}
{{bug|If the <code>Start Disabled</code> option is set to <code>Yes</code> the brush will become solid to the [[player]], getting it stuck if the transition happens within its volume.}}
{{code class|CChangeLevel|triggers.cpp}}
{{code class|CChangeLevel|triggers.cpp}}
{{note|This brush entity does not work in [[Half-Life 2: Deathmatch]].}}
{{bug|If the "start disabled" option is set to "yes" the brush will become solid to player, getting it stuck if the transition happens within its volume.}}


==Notes==
==Notes==
Place an [[info_landmark]] in both maps to mark the ''same'' location in both maps.
Place an [[info_landmark]] in both maps to mark the ''same'' location in both maps.
The [[info_landmark]] must be in the [[player]]'s [[PVS]] when the level change is triggered. If it is not, the level change will fail.
Both [[info_landmark]] entities must have the same name. This name must not have any spaces in it. They also must not be inside a solid brush.
Both the landmark name and the map name must be less than 32 characters in length.


To fire events in the next level, use a trigger output to turn on an [[env_global]] in the current level. The entity has a few pre-defined states but you can manually type your own custom state. Create a [[logic_auto]] in the next level that checks for the state set by the env_global. Now use the '''OnChangeLevel''' output of the logic_auto to trigger events.  
{{note|Although the Landmark entity must be in the same place geometry-wise, it doesn't need to be in the exact location in the map's coordinates (This also includes height). A landmark could literally be placed anywhere in the new map grid thats being changed too, as long as the transition geometry surrounding it is exactly as the previous level's geometry. This can help with scenarios such as having large maps, i.e: The player traverses east of the top view, and must continue to do so in the next map, which would be impossible given starting the next map in the ending location. Simplifying your geometry near level transitions can make working on them much easier!}}


To control which entities go through the level transition, create one or more [[trigger_transition]]s and give them the same name as the landmark. Any entities within the trigger_transition(s) will go to the next map.
Level transitions must be two-way. That is to say, there must be a trigger_changelevel in the next level that points to the current level, as well as the trigger_changelevel taking the player to the next level. If a one-way level transition is desired, simply make this second trigger_changelevel inaccessible to the player (and/or check the <code>Disable Touch</code> flag).


Level transitions must be two-way. That is to say, there must be a trigger_changelevel in the next level that points to the current level, as well as the trigger_changelevel taking the player to the next level. If a one-way level transition is desired, simply make this second trigger_changelevel inaccessible to the player (and/or check the "Disable Touch" flag).
{{warning|Although the [[info_landmark]] should be in a corresponding position in both levels, the two trigger_changelevel brushes must '''NOT''' be in the same place in each level. If they are, you will be thrown into an infinite loop, endlessly ping-ponging back and forth between the two levels.}}


The [[info_landmark]] must be in the player's [[PVS]] when the level change is triggered. If it is not, the level change will fail. Both [[info_landmark]] entities must have the same name. This name must not have any spaces in it. They also must not be inside a solid brush.
To fire events in the next level, use a trigger output to turn on an [[env_global]] in the current level. The entity has a few pre-defined states but you can manually type your own custom state. Create a [[logic_auto]] in the next level that checks for the state set by the env_global. Now use the '''OnChangeLevel''' output of the logic_auto to trigger events.  


Although the [[info_landmark]] should be in a corresponding position in both levels, the two trigger_changelevel brushes must '''NOT''' be in the same place in each level. If they are, you will be thrown into an infinite loop, endlessly ping-ponging back and forth between the two levels.
To control which entities go through the level transition, create one or more [[trigger_transition]]s and give them the same name as the landmark. Any entities within the trigger_transition(s) will go to the next map.
 
{{note|Although the Landmark entity must be in the same place geometry-wise, it doesn't need to be in the exact location in the map's coordinates (This also includes height). A landmark could literally be placed anywhere in the new map grid thats being changed too, as long as the transition geometry surrounding it is exactly as the previous level's geometry. This can help with scenarios such as having large maps, i.e: The player traverses east of the top view, and must continue to do so in the next map, which would be impossible given starting the next map in the ending location. Simplifying your geometry near level transitions can make working on them much easier!}}
 
Both the landmark name and the map name must be less than 32 characters in length.


==Keyvalues==
==Keyvalues==
Line 32: Line 32:
==Inputs==
==Inputs==
{{IO|ChangeLevel|Cause the level change. Use this when triggering the level change with a button, etc.}}
{{IO|ChangeLevel|Cause the level change. Use this when triggering the level change with a button, etc.}}
{{Warning|Since the 2007 engine this input will do nothing when used on a multiplayer server.}}
{{Warning|Since {{game name|src07|name=Source 2007}} this input will do nothing when used on a multiplayer server.}}


==Outputs==
==Outputs==

Revision as of 20:23, 16 October 2021

Template:Base brush It triggers a level change.

Note.pngNote:This brush entity does not work in Template:Game name.
Icon-Bug.pngBug:If the Start Disabled option is set to Yes the brush will become solid to the player, getting it stuck if the transition happens within its volume.  [todo tested in ?]
C++ In code, it is represented by theCChangeLevelclass, defined in thetriggers.cppfile.

Notes

Place an info_landmark in both maps to mark the same location in both maps. The info_landmark must be in the player's PVS when the level change is triggered. If it is not, the level change will fail. Both info_landmark entities must have the same name. This name must not have any spaces in it. They also must not be inside a solid brush. Both the landmark name and the map name must be less than 32 characters in length.

Note.pngNote:Although the Landmark entity must be in the same place geometry-wise, it doesn't need to be in the exact location in the map's coordinates (This also includes height). A landmark could literally be placed anywhere in the new map grid thats being changed too, as long as the transition geometry surrounding it is exactly as the previous level's geometry. This can help with scenarios such as having large maps, i.e: The player traverses east of the top view, and must continue to do so in the next map, which would be impossible given starting the next map in the ending location. Simplifying your geometry near level transitions can make working on them much easier!

Level transitions must be two-way. That is to say, there must be a trigger_changelevel in the next level that points to the current level, as well as the trigger_changelevel taking the player to the next level. If a one-way level transition is desired, simply make this second trigger_changelevel inaccessible to the player (and/or check the Disable Touch flag).

Warning.pngWarning:Although the info_landmark should be in a corresponding position in both levels, the two trigger_changelevel brushes must NOT be in the same place in each level. If they are, you will be thrown into an infinite loop, endlessly ping-ponging back and forth between the two levels.

To fire events in the next level, use a trigger output to turn on an env_global in the current level. The entity has a few pre-defined states but you can manually type your own custom state. Create a logic_auto in the next level that checks for the state set by the env_global. Now use the OnChangeLevel output of the logic_auto to trigger events.

To control which entities go through the level transition, create one or more trigger_transitions and give them the same name as the landmark. Any entities within the trigger_transition(s) will go to the next map.

Keyvalues

Name ([todo internal name (i)]) <string>
Name of the brush.
New Map Name ([todo internal name (i)]) <string>
Name of the map to change to.
Landmark Name ([todo internal name (i)]) <targetname>
Name of the landmark to use. (See above for details!)

Flags

  • 2 : Disable Touch
  • 4 : To Previous Chapter

Inputs

ChangeLevel
Cause the level change. Use this when triggering the level change with a button, etc.
Warning.pngWarning:Since Template:Game name this input will do nothing when used on a multiplayer server.

Outputs

OnChangeLevel
Fired when the level changes.