Triggerdelay
This article contains information that is out of date or is missing latest research. You can help by renewing it. |
Triggerdelay is a glitch, mostly used to delay level-change triggers.
Explanation
The level change is triggered by scheduling a "changelevel" command into the command buffer. Until the changelevel command is executed, the map doesn't change. One can delay the command processing by using the "wait" command, which quits the processing cycle. The processing cycle is conveniently invoked again only on the next frame. So by flooding the command buffer with "wait;wait;wait;..." (for example, by binding that to some button and pressing that button before entering the trigger) one can delay the changelevel by a large number of frames. So what you need to do is to do the action that you want to do during the "freeze" (mouse aiming seems to work during the action-overflooding). So you will likely just want to walk forwards as that allows you to re-position yourself, technically it can be any action you want to. While doing that action, start flooding the action buffer with waits and trigger the level change, it will be inserted in to the queue of actions. This will allow you to relocate yourself as you are still doing tons of waits and the walking action (in this example) was the last one that you did and the game hasn't received any new data due to the waits that you have put there. After the game processes the changelevel it doesn't matter where you are since it has already considered you in a valid trigger and just waits for the queue to finish.
How-to
Walk towards the trigger, start flooding with waits (depending on how much time you need after reaching the trigger to relocate yourself), reach the trigger and trigger it, walk away and wait until the waits are gone and the level will change as if you just had walked in to it. This allows you to reposition yourself anywhere you want to as some areas in the game overlap, such as powerup/office complex elevator/lambda elevator. There is an annoying oddity with this, it glitches your weapons in some cases thus rendering them unusable. Most triggerdelay skips require their own scripts.
Losing your weapons?
Most trigger_changelevel delay shortcuts turns out useless when your weapons won't transfer. To find out if they do, the trial and error method works just fine in most cases. But there is a way to actually see the transition area where the level change will work. Thus minimizing the risk to miss a potential shortcut.
// Follow the linked list of entities in the PVS of the transition landmark
edict_t *pent = UTIL_EntitiesInPVS( pLevelList[i].pentLandmark );
Simply put, the working transition area is the PVS active from the POV of the landmark.
To render the PVS you gotta make the walls transparent by switching to software mode and set "r_draworder 1" or simply use a wallhack.
Landmarks can be rendered to a battery or any other model by setting "sv_info_landmark_display 1" with Bunnymod_Pro.
If it's hard to tell even after having landmark and PVS visible. You can put out extra entities like satchels to give you PVS visibility even in the air or other places with though conditions. If the changelevel is using a trigger_transition, only the trigger_transition area will work for proper transition. The PVS won't matter in that case.
Big thanks to Maverick for figuring all this out.