A
momentary_rot_button
is a rotating button that requires continuous use (e.g. holding the USE key) to slowly affect the position of a target
momentary_door
over time. The distance moved is synchronized between the
momentary_rot_button
and the targeted
momentary_door
i.e. a button halfway through its rotation would have opened the door halfway.
The momentary aspect of these
momentary_*
entities means you can have them be at any position at any time, instead of the usual [rotating] doors and buttons which travels automatically between the two endpoints (closed and open positions) on [each] use. Each use of a
momentary_rot_button
switches between opening or closing, which you can of course stop partway,
except if the "Auto-return" flag is checked, then the button (and the target door) only moves towards the open position when USEd, and gradually moves back towards its closed position after being USEd.
A
momentary_rot_button
also mobilizes all other 'linked'
momentary_rot_button
that shares the same target. This can be used to make a "momentary rotating door" by having two
momentary_rot_button
's both targeting a dummy hidden
momentary_door
, with the other one having its "Door hack" flag checked. A "door hacked"
momentary_rot_button
is solid but not USE-able, and vice versa. Care should be taken so that all 'linked' buttons has the same total travel time and go the same way (+ve distance), or the buttons will de-synchronize.
momentary_rot_button
entities are also used by
func_mortar_field
for targeting air strikes, one for each axis.
For the normal rotating button, see
func_rot_button
.
Attributes
- Name (targetname) - Property used to identify entities.
- Pitch Yaw Roll (angles) - Sets the pitch (up / down), yaw (left / right) and roll (bank) respectively. The compass in WorldCraft / Hammer corresponds to Yaw. The settings are not always (or not all) used.
- Master (master) - The name of a
multisource
(or game_team_master
) entity. A master must usually be active in order for the entity to work. Thus they act almost like an on/off switch, in their simplest form, and like an AND gate in the case of the multisource
. Note: momentary_rot_buttons
can always be used, regardless of the state of their master.
- Targeted Object (target) - Normally, the
momentary_door
you want to control.
- Render FX (renderfx) - Gives objects special render effects. Think of it as modifying whatever the Render Mode puts out. The options are as follows:
- 0 = Normal
- 1 = Slow Pulse
- 2 = Fast Pulse
- 3 = Slow Wide Pulse
- 4 = Fast Wide Pulse
- 5 = Slow Fade Away
- 6 = Fast Fade Away
- 7 = Slow Become Solid
- 8 = Fast Become Solid
- 9 = Slow Strobe
- 10 = Fast Strobe
- 11 = Faster Strobe
- 12 = Slow Flicker
- 13 = Fast Flicker
- 14 = Constant Glow
- 15 = Distort
- 16 = Hologram (Distort and Fade)
- Render Mode (rendermode) - Controls the type of rendering that is used for an object. Options are:
- 0 = Normal
- 1 = Color
- 2 = Texture
- 3 = Glow
- 4 = Solid
- 5 = Additive
- FX Amount (renderamt)
- FX Color (rendercolor)
- Distance(deg) (distance) - Distance in degrees the button will rotate. Positive distance rotates counter-clockwise, and vice versa (using right-hand rule). Negative values not recommended, see notes.
- Speed (speed) - Speed the button will turn. Defaults to 100 if blank or 0.
- Auto-return speed (returnspeed) - For buttons with Auto-return flag enabled, the speed at which the button will return to its starting position after being used.
- Sounds (sounds) - sounds values
- 0 = None (
common/null.wav
)
- 1 = Big zap & Warmup (
buttons/button1.wav
)
- 2 = Access Denied (
buttons/button2.wav
)
- 3 = Access Granted (
buttons/button3.wav
)
- 4 = Quick Combolock (
buttons/button4.wav
)
- 5 = Power Deadbolt 1 (
buttons/button5.wav
)
- 6 = Power Deadbolt 2 (
buttons/button6.wav
)
- 7 = Plunger (
buttons/button7.wav
)
- 8 = Small zap (
buttons/button8.wav
)
- 9 = Keycard Sound (
buttons/button9.wav
)
- 21 = Squeaky (
buttons/lever1.wav
)
- 22 = Squeaky Pneumatic (
buttons/lever2.wav
)
- 23 = Ratchet Groan (
buttons/lever3.wav
)
- 24 = Clean Ratchet (
buttons/lever4.wav
)
- 25 = Gas Clunk (
buttons/lever5.wav
)
- ZHLT Lightflags (zhlt_lightflags)
- Light Origin Target (light_origin)
- Minimum Light (_minlight)
Flags
- Door Hack (1) - Makes this entity solid, but un-USE-able (and vice versa). Thus the only way to actuate this entity is for it and another, normal
momentary_rot_button
, share a momentary_door
target. Then one button moves the other "door hacked" "button".
- Not useable (2) - Seemingly unused.
- Auto return (16) - Button returns to its starting position automatically after use at the speed set in Auto-return speed (returnspeed).
- X axis (64) - If enabled, the rotation will be on the X axis.
- Y axis (128) - If enabled, the rotation will be on the Y axis.
Notes
- Non-solid by default, unless ☑️ Door Hack (1) flag is checked. (Note that "door hacked" entities are not USE-able.)
- If neither of the axis flags is enabled, rotation will default to the Z axis.
- An origin brush needs to be part of the entity to specify its axis of rotation.
- A
momentary_rot_button
or momentary_door
cannot be disabled by disabling its master. You can instead unlink/relink the button to the door to achieve the same effect. See below.
- It is possible to unlink this button from its door with a
trigger_changetarget
. A button with a blank target will be unusable, effectively disabling it. Linking it to a door again will snap that door into place, depending on the position of the button.
- Setting Pitch Yaw Roll (angles) rotates the entity by that amount on spawn. Use this together with X/Y axis flags to orient the entity to rotate off-axis.
-
CLIPBEVEL
A solid "door hacked" momentary_rot_button
that is vertical (i.e. rotates around the X or Y axes) would have weird collision round its edges due to the clipnode distances generated for it differing between vertical (36u standing/18u crouching) and horizontal (16u). You can add zhlt_noclip 1
keyvalue to remove the default clip generation, then tie to the entity a clip brush extended uniformly at the edges (say, 27u) with CLIPBEVEL texture round the edges.
- Auto-returning
momentary_rot_button
's have a tendency to skip the final update, leaving the target momentary_door
slightly ajar. This needs to be accounted for when designing the momentary_door
.
- A targeted
ambient_generic
will modulate its pitch to the relative position of the momentary_rot_button
. However this is only transient and activating the ambient_generic
any other way will revert to its initial pitch values. The previously mentioned issue also tend to leave the ambient_generic
at very low droning pitch instead of turning it completely off.
- This entity only works well with positive distance. Entering a negative distance value will cause unexpected behaviour, such as the door starting open.
- A trick to have the button rotate clockwise while still having positive distance is to flip it 180 degrees: build the brushwork flipped 180 degrees, and an
angles
value that flips it back the right side (e.g. a spigot facing east in game faces west in the editor instead, and has Yaw set to 180). You need to double check the center of the origin brush where the flip will happen as well as consider the lighting conditions.
- Linked
momentary_rot_button
's (those sharing the same target) should have the same forward (and return) travel times (easiest by having all distance/speed/return speed/"auto-return" flag be identical), otherwise they will de-synchronize between each other. Some of the buttons could end up being out of their nominal range of motion (and therefore send a value outside the 0-1 range to the target). However, they will all "snap" back to their proper open/close positions when the main one reaches its own endpoints.
- If you need a pair of linked
momentary_rot_button
's rotating the opposite directions, one of them needs to be flipped using the method previously mentioned.
- To detect if the momentary door/button pair is within some range of positions (as part of gameplay – see Uplink), use the
momentary_door
(s) to push a func_pushable
through one "in range" trigger_multiple
entity, which in turn is sandwiched between two "out of range" trigger_multiple
entities, with all three triggers having the "Pushables" flag set. Tip: Use BEVEL
texture on the triggers for precise non-overlapping trigger area.
- You can remote control a
momentary_rot_button
by triggering it in 0.1s intervals. For auto-returning buttons, it will only move towards open position while being triggered, and return towards its closed position when this trigger pulse ceases. Otherwise, it will flip-flop between opening and closing when it reaches its endpoints. Unfortunately, you cannot set the button's position as you could with the door.
Here's a helpful comparison between
momentary_rot_button
and
func_rot_button
:
Aspect |
func_rot_button |
momentary_rot_button |
Movement |
Rotates around origin |
Rotates around origin |
Pitch Yaw Roll |
Rotates the entity by that amount on spawn |
Rotates the entity by that amount on spawn |
Target |
Anything (e.g. func_door ) |
momentary_door |
Use type |
Instant |
Continuous |
Make toggleable |
☑️ "toggle" flag |
☐ "Auto return" flag and return speed == 0 |
Make resettable |
After wait time and ☐ "toggle" flag |
☑️ "Auto return" flag and return speed > 0 |
Target timing |
At end of movement |
Continuous with movement |
Distance |
Positive or negative |
Positive only (negative values causes unexpected behaviours) |
Position |
Only 2 (closed/open) with transitions |
Anywhere within distance range |
Synchronicity |
None |
Rotates all instances with the same target (each at their own rate) |
See also
Team Fortress Classic only
Attributes
- Target (target) - When an entity is activated, it triggers the entity with the name specified by Target.
- Pitch Yaw Roll (angles) - Sets the pitch (up / down), yaw (left / right) and roll (bank) respectively. The compass in WorldCraft / Hammer corresponds to Yaw. The settings are not always (or not all) used.
- Render Mode (rendermode) - Controls the type of rendering that is used for an object. Options are:
- 0 = Normal
- 1 = Color
- 2 = Texture
- 3 = Glow
- 4 = Solid
- 5 = Additive
- Render FX (renderfx) - Gives objects special render effects. Think of it as modifying whatever the Render Mode puts out. The options are as follows:
- 0 = Normal
- 1 = Slow Pulse
- 2 = Fast Pulse
- 3 = Slow Wide Pulse
- 4 = Fast Wide Pulse
- 5 = Slow Fade Away
- 6 = Fast Fade Away
- 7 = Slow Become Solid
- 8 = Fast Become Solid
- 9 = Slow Strobe
- 10 = Fast Strobe
- 11 = Faster Strobe
- 12 = Slow Flicker
- 13 = Fast Flicker
- 14 = Constant Glow
- 15 = Distort
- 16 = Hologram (Distort and Fade)
- Targetname of teamcheck goal (teamcheck) - Using this in conjunction with an info_tf_teamcheck allows you to switch the entity's team allegiance when the info_tf_teamcheck changes its team setting. The team_no property must be set to Any (0) if you use this value.
- Has item # (items_allowed) - The player must be carrying this item to use this entity. Set 0 to ignore this criterion.
- Has item from group # (h_i_g) - The player must be carrying any item from this group to use this entity. Set 0 to ignore this criterion.
- Hasn't item from group # (hasnt_item_from_group) - To use this entity, the player must not be carrying any item from this group. Set 0 to ignore this criterion.
- If item # has moved (if_item_has_moved) - A player can only use the entity if this item is not in its original spawn location. Set 0 to ignore this criterion.
- If item # hasn't moved (if_item_hasnt_moved) - A player can only use the entity if this item is in its original spawn location. Set 0 to ignore this criterion.
- If goal # active (if_goal_is_active) - Players can only use the entity if this goal is in the active state. Set 0 to ignore this criterion.
- If goal # inactive (if_goal_is_inactive) - Players can only use the entity if this goal is in the inactive state. Set 0 to ignore this criterion.
- If goal # removed (if_goal_is_removed) - Players can only use the entity if this goal is in the removed state. Set 0 to ignore this criterion.
- If group # active (if_group_is_active) - A player can only use the entity if all the goals in this group are in the active state. Set 0 to ignore this criterion.
- If group # inactive (if_group_is_inactive) - A player can only use the entity if all the goals in this group are in the inactive state. Set 0 to ignore this criterion.
- If group # removed (if_group_is_removed) - A player can only use the entity if all the goals in this group are in the removed state. Set 0 to ignore this criterion.
- Affect all on Team (maxammo_shells) - This allows an entity's effects (giving ammo, taking health, etc.) to be performed on an entire team rather than just the Activating Player. Options are:
- 0 = Disabled
- 1 = Blue
- 2 = Red
- 3 = Yellow
- 4 = Green
- Affect all not on Team (maxammo_nails) - This allows an entity's effects (giving ammo, taking health, etc.) to be performed on all players in teams other than the one selected, ignoring the Activating Player. Options are:
- 0 = Disabled
- 1 = Blue
- 2 = Red
- 3 = Yellow
- 4 = Green
- If all goals in group # active... (all_active) - When activated, the entity will check to see if all goals in a given group are active. If so, it will activate another goal, which is specified by last_impulse.
- Remove goal # (rv_g) - When the entity is activated, it will remove the goal specified here.
- Restore goal # (rs_g) - When the entity is activated, it will restore the goal specified here.
- Inactivate goals in group # (inactivate_group_no) - When the entity is activated, it will deactivate all the goals in the group specified here.
- Remove goals in group # (rv_gr) - When the entity is activated, it will remove all the goals in the group specified here.
- Restore goals in group # (rs_gr) - When the entity is activated, it will restore all the goals in the group specified here.
- Remove Spawn point # (remove_spawnpoint) - On activation, the entity will remove the info_player_teamspawn entity with the Goal # entered here. While the spawnpoint is removed, no one can spawn there.
- Restore Spawn point # (restore_spawnpoint) - On activation, the entity will restore a removed info_player_teamspawn entity with the Goal # entered here. After being restored, players can once again spawn at the spawnpoint.
- Remove spawn group # (rv_s_h) - On activation, the entity will remove the group of info_player_teamspawn entities with the Goal Group # entered here. While the spawnpoints are removed, players cannot spawn at them.
- Restore spawn group # (rs_s_h) - On activation, the entity will restore the group of removed info_player_teamspawn entities with the Goal Group # entered here. After being restored, players can once again spawn at the spawnpoints.
- Item to give (items) - Note: There are exceptions (check SmartEdit names). The Item # of an item_tfgoal entity. When the entity is activated, the Activating Player will be given this item. If the item is already being carried by a player, it will be taken from the carrier and given to the Activating Player.
- Remove item from APA (axhitme) - The Item # of an item_tfgoal entity. When the entity is activated, if the Activating Player is carrying the specified item, it will be removed from him. What happens to it then is determined by the Goal Activation property of the item.
- Master (master) - The name of a multisource (or game_team_master) entity. A master must usually be active in order for the entity to work. Thus they act almost like an on/off switch, in their simplest form, and like an AND gate in the case of the multisource.
- Name (targetname) (targetname)
- FX Amount (1 - 255) (renderamt)
- FX Color (R G B) (rendercolor)
- ZHLT Light flags (zhlt_lightflags)
- Minimum light level (_minlight)
- Team allowed to activate entity (team_no)
- Player class allowed to activate entity (playerclass)
- Effect radius, 0=infinite (t_length)
- If criteria fails activate Goal# (else_goal)
- ...activate goal# (last_impulse)
- Activate goal# (activate_goal_no)
- Inactivate goal# (inactivate_goal_no)
- Activate goals in group# (activate_group_no)
- Return item # (return_item_no)
- Remove items in group # (r_i_g)
- Add/Subtract frags (frags)
- Add/Subtract lives (lives)
- Add/Subtract health (health)
- Armor Value % (armorvalue)
- Armor Class (armorclass)
- Add/Subtract shells (a_s)
- Add/Subtract nails (a_n)
- Add/Subtract rockets (a_r)
- Add/Subtract cells (a_c)
- Add/Subtract detpack (ammo_detpack)
- Add/subtract grenades #1 (no_grenades_1)
- Add/subtract grenades #2 (no_grenades_2)
- Invincibility duration (invincible_finished)
- Invisibility duration (invisible_finished)
- Quad duration (super_damage_finished)
- Rad Suit duration (radsuit_finished)
- Score to AP team (count)
- Teamcheck team point gain (increase_team)
- Blue point gain (increase_team1)
- Red point gain (increase_team2)
- Yellow point gain (increase_team3)
- Green point gain (increase_team4)
- Owned by-for msg & item glow (owned_by)
- Owned by teamcheck (owned_by_teamcheck)
- Death type (deathtype)
- Message to all (b_b)
- Message to AP (message)
- Message to AP team (b_t)
- Message to non-AP team (b_n)
- Message to owner team (b_o)
- Message to non-owner team(s) (non_owners_team_broadcast)
- Console msg. to all, %s = AP name (n_b)
- Console msg to AP team (n_t)
- Console msg. to non-AP team (n_n)
- Console msg. to owner team (n_o)
- Speak (global) (speak)
- Speak (AP) (AP_speak)
- Speak (AP team) (team_speak)
- Speak (non-AP team) (non_team_speak)
- Speak (owner team) (owners_team_speak)
- Speak (non-owner teams) (non_owners_team_speak)
- Speed (speed)
- Sounds (sounds)
- Distance (deg) (distance)
- Auto-return speed (returnspeed)
0 ≥ x ≥ 1
range)[2024-06-05]
This is common knowledge amongst pro mappers but the momentary_* setup is used on Uplink and Blue Shift for the dialing-in sequences through an off-the-playable-area setup where the momentary_doors push a
func_pushable
through severaltrigger_multiples
that have "pushables" flag set. One of them is the "correct, dialed in" position, the others unset it.One very basic application for this that I can think of is replicating HL2 Route Kanal sliding gate setup locking at its open position by having a
trigger_once
at the very end of the momentary_door, and when the func_pushable touches it, kills the momentary_* entities and replaces them withfunc_wall_toggles
of the setup frozen at their final positions.