This article's documentation is for anything that uses the Source engine. Click here for more information.

globalname

From Valve Developer Community
Jump to navigation Jump to search
Icon-under construction-blue.png
This is a draft page. It is a work in progress open to editing by anyone.
Remember to check for any notes left by the tagger at this article's talk page.
Todo: somebody fact check and remove draft

globalname is a keyvalue available in all Source Source games. It's a name to designate two entities in different maps as being logically the same entity. When player transitions from map A to B the entity in map B with matching globalname will get most of its properties from entity that was in map A like origin, angles, color etc. (model for example is not transferred). If the entity was killed in map A it will not spawn in map B.

Warning.pngWarning:Setting this in round based games will cause an entity to not respawn on round restart because entities are killed when round ends.
Icon-Important.pngImportant:Don't use in Left 4 Dead series Left 4 Dead series as the transition works differently and globalname is not used in this manner.
PlacementTip.gifPlacement Tip:This is important when wanting to transition brush entities as brush models are saved within a map file and is the reason model is one of the properties that isn't transferred.

Other ways to ensure no duplicate (logically same) entities between maps transition is properly utilizing logic_auto outputs like OnNewGame, OnMapTransition.

Example

Note.pngNote:There are several in Half-Life 2 Half-Life 2
Todo: more examples?

d1_canals_05 / d1_canals_06

To properly preserve states of the following entities

  • func_breakables (on the left with globalnames 05.breakable02_1 to 05.breakable02_6)
  • func_physboxes (on the right with globalnames 05.breakable01_1 and 05.breakable01_2)
D1 canals 05-d1 canals 06-transition-example-1.jpg


After destroying the func_breakables then using dump_globals command we can see global states 05.breakable02_1 to 05.breakable02_6 marked as Dead which will ensure they will not spawn in next map.

D1 canals 05-d1 canals 06-transition-example-2.jpg
] dump_globals 
is_pc: d1_canals_05 (On) = 217026304
-- Globals --
05.breakable01_2: d1_canals_05 (On) = 12110476
skill.cfg: d1_canals_05 (On) = 0
05.breakable01_1: d1_canals_05 (On) = 12110476
is_console: d1_canals_05 (Off) = 1560839504
05.breakable02_4: d1_canals_05 (Dead) = 12110476
05.breakable02_1: d1_canals_05 (Dead) = 12110476
05.breakable02_5: d1_canals_05 (Dead) = 12110476
05.breakable02_6: d1_canals_05 (Dead) = 12110476
05.breakable02_2: d1_canals_05 (Dead) = 12110476
05.breakable02_3: d1_canals_05 (Dead) = 12110476

Changing one of the func_physboxes color to red using ent_fire !picker color "255 0 0" for the sake of demonstration.

D1 canals 05-d1 canals 06-transition-example-3.jpg

After transition we can see states were preserved and model name being different (*112 and *113 in d5 changed to *162 and *161 in d6).

D1 canals 05-d1 canals 06-transition-example-4.jpg

Rough entity transition logic

Broom icon.png
This article or section needs to be cleaned up to conform to a higher standard of quality because:
finish up, make this make sense
For help, see the VDC Editing Help and Wikipedia cleanup process. Also, remember to check for any notes left by the tagger at this article's talk page.

gGlobalState - object containing list of global states that persists between transitions, each element consists of "name, map_name, state (ON/OFF/DEAD), counter"

  1. Changelevel begins
  2. Remember all entities that are supposed to transition which means
    1. They are in info_landmark's PVS unless trigger_transition exists which is then used instead
    2. They are capable of transitioning which means they have proper ObjectCaps or globalname
  3. Next map loads, all entities spawn and following applies:
    1. Entities with globalname where global state doesn't exist yet normally spawn and are tracked by adding state "name: <globalname>, map_name: <current_map>, state: ON" to gGlobalState
    2. Entities with globalname where global state is ON and map_name is not current map are made dormant and invisible waiting to get their non-global properties overwritten by global entity that transitions
    3. Entities with globalname where global state is DEAD are not spawned
  4. Remembered transitioning entities spawn, following happens for each that had globalname:
    1. Search for already spawned entity (the dormant one) (if it doesn't exist print warning and leave the entity that were to transition in previous map)
    2. Mark self for removal
    3. Set the associated global state's map_name to current_map
    4. Transfer all non-global properties to the corresponding dormant entity (see datamap dump to see which are non global for example Half-Life 2 datamap dump)

See also