Difference between revisions of "Targetname"
(Rewrote parts of the article, added Mapbase info) |
|||
Line 1: | Line 1: | ||
+ | {{KV info|Targetname}} | ||
A '''targetname''' (also known simply as '''Name''') is the name of an entity. A targetname is not required for an entity to exist, but generally must be present for an entity to play a part in the [[Inputs_and_Outputs|I/O System]] | A '''targetname''' (also known simply as '''Name''') is the name of an entity. A targetname is not required for an entity to exist, but generally must be present for an entity to play a part in the [[Inputs_and_Outputs|I/O System]] | ||
=== Notes === | === Notes === |
Revision as of 12:43, 11 July 2020
Targetname is a base Keyvalue available in all Source games. A targetname (also known simply as Name) is the name of an entity. A targetname is not required for an entity to exist, but generally must be present for an entity to play a part in the I/O System
Contents
Notes
- Entities may also be targeted by their classname (e.g. prop_dynamic).
- Targetnames do not need to be unique, they can be shared (and inputs will be sent to each one). Duplicated targetnames are displayed in bold font.
- Targetnames cannot contain
!
or*
characters (see below).
Instances
- Instances may use prefix or postfix name fixups, and will auto-generate a prefix if no parameters are specified.
- Prefixes and Postfixes are separated by a single dash e.g. hall_a3-door_02.
- Placing an
@
symbol at the beginning of a targetname (e.g. @exit_door) will bypass a naming fixup for that particular entity. If @exit_door and exit_door_relay were part of an instance prefixed as Door_01, the names of the entities would be @exit_door and Door_01-exit_door_relay.
Player Events
Any entity with the following targetnames will have a Use input sent to them when that event occurs.
game_playerdie
- Fires every time a player dies. The player who died is the !activator.game_playerkill
- Fires every time a player kills another player, the killer is the !activator.game_playerjoin
- Fires every time a player joins the game, the joining player is the !activator.Bug:
game_playerjoin
is not fired by bots.game_playerspawn
- Fires every time a player spawns, the spawning player is the !activator.game_playerleave
- Fires every time a player leaves the game, !activator will not work in this case as the player entity no longer exists.

Name Matching
While searching for an entity, Source can use a few extended matching features that are useful in a variety of situations. They are used to target an entity with an unknown or partially known name, and they are most commonly used in I/O chains, but they can also be used in KeyValues which target entities, like the filter KV in filter_activator_name
/class
or an entity's parent field. The extended features are:
- Wildcards
- Source supports
*
wildcards to a limited extent. This means searching for area1* will match any targetnames that start with area1, like area1_portal or area1_door, but not area2_door. These wildcards are also limited to trailing*
, which means more complex wildcards like *_door or area*_door will not function.Note:
Mapbase adds support for full wildcards which do support complex matching like *_door or area*_door, and also supports having multiple wildcards in the same query. Mapbase also adds support for
?
wildcards, which match only one character rather than any number of characters.
- Mapbase supports matching through regular expressions using the std library from C++ 11. They must be prefixed with
@/
(not to be confused with the instance fixup bypass), but they do not require a suffix.

The I/O System also supports classname matching, which matches by an entity's classname rather than its targetname. This uses all of the same extended matching features listed above. Some other parts of Source support classname matching, but this isn't usually the case unless stated otherwise.
Keywords
The following special targetnames can be used to dynamically select an entity.

!activator
- The entity that began the current I/O chain. If a player walks into a trigger that fires a logic_relay, the player is the
!activator
of the relay's output(s). !caller
- The previous entity in the current I/O chain. If a player walks into a trigger that that fires a logic_relay, the trigger is the
!caller
of the relay's output(s).
!self
- The entity from which the current output originates. If a player walks into a trigger that that fires a logic_relay, the relay is the
!self
of its output(s). !player
- The player.

When finding an entity by name, this return the player in slot 1 (if any), which is generally only useful in singleplayer.

player
classname.!player_blue
- In Portal 2 Coop, this targets ATLAS (player 1).
!player_orange
- In Portal 2 Coop, this targets P-Body (player 2).
!pvsplayer
- The first player found in the entity's Potential Visibility Set. The PVS used is taken from the entity doing the searching, or the activator if no searching entity exists. If no activator exists either, the first player in the game is returned (i.e.
!player
). !picker
- The first entity under the player's crosshair. Only useful in single-player, and mostly only for debugging. Entities without collision can only be selected by aiming at their origin.
FindNamedEntity Keywords
These keywords are only available in FindNamedEntity
, a method specific to NPCs which is only searched by specific systems (e.g. choreographed scenes) and not by things like the I/O System.
- To do:
Mapbase makes this available to I/O searches. Is this the case in any other branch?
!speechtarget
- The entity at which the
!caller
is looking due to a Look At Actor or Face Actor choreography event. !friend
- The
!caller
's nearest friendly NPC. This returns the player on NPCs which don't descend fromCAI_PlayerAlly
. !enemy
- The current enemy of the
!caller
.
Keyword Notes
- The special targetnames !activator and !caller are defined on an output-by-output basis. This depends solely on how the output is implemented in the code. Many outputs in Source are coded to fire with the activator as the entity firing the output when it is expected to use a different entity.
- Targetnames used in an output's target field are evaluated after the point at which the sending entity has chosen the new activator and caller values to be seen by the receiving entity. This causes !caller to evaluate to the sending entity in about 90% of cases. !self uses the caller value, and in this context always has the same value as !caller.
- Targetnames used in an output's parameter override field are evaluated by the entity that receives the output, not the one that sends it.
See also
- Client Command by Trigger proximity, a mini-tutorial explaining the process of letting the player(s) in your game execute a Client Command by a trigger.
- User Inputs and Outputs
GetDebugName()
, for accessing an entity's targetname in C++.