Npc blob: Difference between revisions
m (→Inputs:  todo message. i'm gonna add them. have other things to do for now.)  | 
				mNo edit summary  | 
				||
| (23 intermediate revisions by 13 users not shown) | |||
| Line 1: | Line 1: | ||
{{  | {{LanguageBar}}  | ||
{{toc-right}}  | |||
{{this is a|entity|game=Half-Life 2|game1=Half-Life 2: Episode Three|name=npc_blob}} It is an experimental, unused entity that would have been a swarm of entities that surrounds and consumes its prey. Its behavior is functional, with a few bugs. Visuals and sounds are not finished at all, however.  | |||
In the [http://www.youtube.com/watch?v=YCjNT9qGjh4 Half-Life 2 20th Anniversary Documentary], it was revealed that this [[NPC]] was originally meant to be used for {{hl2ep3|4}}, which was later cancelled. It has a similar appearance to the paint from {{p2|4}}.  | |||
==Appearance & Composition==  | |||
An {{code|preset=1|npc_blob}} emits and controls a large group of entities called {{ent|blob_element}}s. Without an {{code|preset=1|npc_blob}}, these blob elements will disband and drift in their last direction of travel, which is dictated by the {{code|preset=1|npc_blob}}.  | |||
An   | |||
The NPC computes what is called a ''centroid'' by averaging the origins of every   | The NPC computes what is called a ''centroid'' by averaging the origins of every {{ent|blob_element}} it controls. This calculation is used for:  | ||
*Computing how far away enemies are.  | *Computing how far away enemies are.  | ||
*Identifying when a blob_element is stuck.  | *Identifying when a blob_element is stuck.  | ||
*Determining the direction   | *Determining the direction {{ent|blob_element}}s wobble in while idle. {{confirm|Code says to do this, but {{ent|blob_element}}s don't seem to follow it ? Line 754.}}  | ||
It's probable that blobs would have been rendered as [[wikipedia:Metaballs|metaballs]], similar to [[gel]] blobs in   | It's probable that blobs would have been rendered as [[wikipedia:Metaballs|metaballs]], similar to [[gel]] blobs in {{p2|4}}. What blobs render as currently is a model from a list (see {{code|preset=1|npc_blob_use_model}} below).  | ||
==Abilities==  | |||
When an enemy is found, the blob will move to it and surround it. It will even climb onto enemies, and slowly consume them.  | # When an enemy is found, the blob will move to it and surround it. It will even climb onto enemies, and slowly consume them.  | ||
# Blobs prefer the ground, but will travel on walls to get somewhere, or even the player and [[NPC|NPCs]].  | |||
# Blobs do 5 damage every 0.025 (or 200 damage per second).  | |||
{{todo|Potential method of transferring {{ent|blob_element}}s between {{code|preset=1|npc_blob}}s?}}  | |||
==Notes==  | |||
# Enemies can't hurt blobs and even if they could it has over 2000000000 [[Health|Health Point]]s.  | |||
# Blob elements don't try to stick to where they all have [[LOS]] to the centroid. This means that a wall can end up going straight through them.  | |||
# Typically, blobs only move when they find an enemy. They do not understand [[assaults]].  | |||
==  | # {{code|preset=1|npc_blob}} use the combine solder model in the default [[FGD]].  | ||
Blob elements don't try to stick to where they all have [[LOS]] to the centroid. This means that a wall can end up going straight through them.  | # Combine soldiers will sometimes go into their "on fire" animation when being attacked by blobs.  | ||
# It seems to copy the player regarding AI relationships, except for when [[antlion|antlions]] become allies.  | |||
Typically, blobs only move when they find an enemy. They do not understand [[assaults]].  | # There is some kind of crash that happens sometimes, right as an enemy is killed.  | ||
# Blob elements have been observed going airborne on rare occasions to reach flying enemies or when going over walls.  | |||
# Blobs seem to be invincible, but they can still be hurt by explosives. They also ignore <code>[[trigger_hurt]]</code>s.  | |||
# Igniting the {{code|preset=1|npc_blob}} reveals that the NPC itself is an invisible headcrab model. {{todo|Why...?<!--because-->}}  | |||
Combine soldiers will sometimes go into their "on fire" animation when being attacked by blobs.  | # Igniting also reveals that the{{code|preset=1|npc_blob}} never moves, only the {{ent|blob_element}}s.  | ||
{{todo|What happens when a blob element is trapped but wants to go somewhere?}}  | |||
It seems to copy the player regarding AI relationships, except for when antlions become allies.  | |||
There is some kind of crash that happens sometimes, right as an enemy is killed.  | |||
Blob elements have been observed going airborne on rare occasions to reach flying enemies or when going over walls.  | |||
Blobs seem to be invincible, but they can still be hurt by explosives. They also ignore <code>[[trigger_hurt]]</code>s.  | |||
==History==  | |||
Npc blob was first shown off at Valve Hardware Day 2006 in an interactive tech demo. Where it's blob elements appeared as a swarm of Snarks, enemies from the original {{hl|4}}. During the tech demo, you can see {{code|preset=1|npc_blob}} climbing over obstacles; both stationary brushes and physics objects, avoiding hazards (fires in this case), and attacking a combine soldier. This is all that we see of {{code|preset=1|npc_blob}} in this tech demo.  | |||
In the game files for Counter Strike Global Offensive and Alien Swarm, the files for the info_node entities have context options that reference {{code|preset=1|npc_blob}}. Looking at the data, the blob seems to have been planned to be able to "shake", "spit" and "regenerate" among other functions. These options have the prefix "Ep3"; suggesting that {{code|preset=1|npc_blob}}may have been intended to appear in {{hl2ep3|4}} should it have been released.  | |||
{{  | |||
==Dedicated [[ConVars]]==  | |||
{{varcom|start}}  | |||
{{varcom|blob_mindist|120.0|In Hammer units|{{confirm|No effect ?}}}}  | |||
{{varcom|blob_element_speed|187|In Hammer units per second|How fast {{ent|blob_element}}s move. Higher speeds seem to cause blob elements to go airborne more frequently.}}  | |||
{{varcom|npc_blob_idle_speed_factor|0.5|Arbitrary number|Multiplies {{code|preset=1|blob_element_speed}} for when blobs aren't doing anything.}}  | |||
{{varcom|blob_numelements|20|Arbitrary number|How many {{ent|blob_element}}s a single {{code|preset=1|npc_blob}} manages.}}  | |||
{{varcom|blob_batchpercent|100|{{confirm|percentage?}}|{{confirm|Looking at code, seems like it would limit the number of blobs elements processed to a certain percent. No effect observed ingame.}}}}  | |||
{{varcom|blob_radius|160|In Hammer units|How far blob elements like to spread out from each other. Can affect their ability to move and attack. {{restart}}}}  | |||
{{varcom|npc_blob_use_threading|1|[[boolean]]|Whether blobs are [[multithread|multithreaded]] or not.}}  | |||
{{varcom|npc_blob_sin_amplitude|60.0|{{confirm|Arbitrary number ?}}|Amplifies how much {{ent|blob_element}}s wobble around. {{todo|Doesn't seem to go above 60 ? Why and how to fix.}}}}  | |||
{{varcom|npc_blob_show_centroid|0|[[boolean]]|Shows a green 3D cross indicating where the centroid mentioned above is located.}}  | |||
{{varcom|npc_blob_straggler_dist|240|In Hammer units|Defines the maximum distance a blob element would be allowed to get away from the centroid when traveling. The code for putting this ConVar to use is incomplete and commented out.}}  | |||
{{varcom|npc_blob_use_orientation|1|[[boolean]]|Enables blob elements rotating to face their direction of travel.}}  | |||
{{varcom|npc_blob_use_model|2|Arbitrary index|Chooses which model to show {{ent|blob_element}}s as. {{restart}} {{clr}}  | |||
::0. {{path|icon=file|gibs/agibs|mdl}} (Skull)  | |||
::1. {{path|icon=file|props_junk/watermelon01|mdl}} (Watermelon)  | |||
::2. {{path|icon=file|w_squeak|mdl}} ([[Snark]] (Not in {{hl2|2}}, shows an error model if the {{hls|2}} model wasn't ported))  | |||
::3. {{path|icon=file|baby_headcrab|mdl}} ([[Baby headcrab]] (Not in {{hl2|2}}, shows an error model if the {{hls|2}} model wasn't ported))  | |||
{{note|If this is set to any other number, the map will fail to load and must be set back to a valid number.}}}}  | |||
{{varcom|npc_blob_think_interval|0.025|Seconds|How often the NPC [[think|thinks]].}}  | |||
{{varcom|end}}  | |||
::0.   | |||
::1.   | |||
::2.   | |||
::3.   | |||
{{note|If this is set to any other number, the map will fail to load and must be set back to a valid number.}}  | |||
==Keyvalues==  | ==Keyvalues==  | ||
| Line 83: | Line 69: | ||
==Inputs==  | ==Inputs==  | ||
{{todo|incomplete list}}  | {{todo|incomplete list}}  | ||
{{  | {{I|FormPathShape|Tells the group to go distribute themselves along a shape defined by path corner entities|param=string}}  | ||
{{  | {{I|SetRadius|Force the group to change the radius (density)|param=float}}  | ||
{{I BaseNPC}}  | {{I BaseNPC}}  | ||
Latest revision as of 09:19, 16 October 2025
npc_blob  is an   entity  available in 
 Half-Life 2 and 
 Half-Life 2: Episode Three. It is an experimental, unused entity that would have been a swarm of entities that surrounds and consumes its prey. Its behavior is functional, with a few bugs. Visuals and sounds are not finished at all, however.
In the Half-Life 2 20th Anniversary Documentary, it was revealed that this NPC was originally meant to be used for 
 Half-Life 2: Episode Three, which was later cancelled. It has a similar appearance to the paint from 
 Portal 2.
Appearance & Composition
An npc_blob emits and controls a large group of entities called blob_elements. Without an npc_blob, these blob elements will disband and drift in their last direction of travel, which is dictated by the npc_blob.
The NPC computes what is called a centroid by averaging the origins of every blob_element it controls. This calculation is used for:
- Computing how far away enemies are.
 - Identifying when a blob_element is stuck.
 - Determining the direction blob_elements wobble in while idle. 
 Confirm:Code says to do this, but blob_elements don't seem to follow it ? Line 754. 
It's probable that blobs would have been rendered as metaballs, similar to gel blobs in 
 Portal 2. What blobs render as currently is a model from a list (see npc_blob_use_model below).
Abilities
- When an enemy is found, the blob will move to it and surround it. It will even climb onto enemies, and slowly consume them.
 - Blobs prefer the ground, but will travel on walls to get somewhere, or even the player and NPCs.
 - Blobs do 5 damage every 0.025 (or 200 damage per second).
 
npc_blobs?Notes
- Enemies can't hurt blobs and even if they could it has over 2000000000 Health Points.
 - Blob elements don't try to stick to where they all have LOS to the centroid. This means that a wall can end up going straight through them.
 - Typically, blobs only move when they find an enemy. They do not understand assaults.
 npc_blobuse the combine solder model in the default FGD.- Combine soldiers will sometimes go into their "on fire" animation when being attacked by blobs.
 - It seems to copy the player regarding AI relationships, except for when antlions become allies.
 - There is some kind of crash that happens sometimes, right as an enemy is killed.
 - Blob elements have been observed going airborne on rare occasions to reach flying enemies or when going over walls.
 - Blobs seem to be invincible, but they can still be hurt by explosives. They also ignore 
trigger_hurts. - Igniting the 
npc_blobreveals that the NPC itself is an invisible headcrab model.Todo: Why...? - Igniting also reveals that the
npc_blobnever moves, only the blob_elements. 
History
Npc blob was first shown off at Valve Hardware Day 2006 in an interactive tech demo. Where it's blob elements appeared as a swarm of Snarks, enemies from the original 
 Half-Life. During the tech demo, you can see npc_blob climbing over obstacles; both stationary brushes and physics objects, avoiding hazards (fires in this case), and attacking a combine soldier. This is all that we see of npc_blob in this tech demo.
In the game files for Counter Strike Global Offensive and Alien Swarm, the files for the info_node entities have context options that reference npc_blob. Looking at the data, the blob seems to have been planned to be able to "shake", "spit" and "regenerate" among other functions. These options have the prefix "Ep3"; suggesting that npc_blobmay have been intended to appear in 
 Half-Life 2: Episode Three should it have been released.
Dedicated ConVars
| Cvar/Command | Parameters or default value | Descriptor | Effect | 
|---|---|---|---|
| blob_mindist | 120.0 | In Hammer units | |
| blob_element_speed | 187 | In Hammer units per second | How fast blob_elements move. Higher speeds seem to cause blob elements to go airborne more frequently. | 
| npc_blob_idle_speed_factor | 0.5 | Arbitrary number | Multiplies blob_element_speed for when blobs aren't doing anything. | 
	
| blob_numelements | 20 | Arbitrary number | How many blob_elements a single npc_blob manages. | 
	
| blob_batchpercent | 100 | ||
| blob_radius | 160 | In Hammer units | How far blob elements like to spread out from each other. Can affect their ability to move and attack. Requires restart to take effect. | 
| npc_blob_use_threading | 1 | boolean | Whether blobs are multithreaded or not. | 
| npc_blob_sin_amplitude | 60.0 | Amplifies how much blob_elements wobble around.  Todo: Doesn't seem to go above 60 ? Why and how to fix.  | 
	|
| npc_blob_show_centroid | 0 | boolean | Shows a green 3D cross indicating where the centroid mentioned above is located. | 
| npc_blob_straggler_dist | 240 | In Hammer units | Defines the maximum distance a blob element would be allowed to get away from the centroid when traveling. The code for putting this ConVar to use is incomplete and commented out. | 
| npc_blob_use_orientation | 1 | boolean | Enables blob elements rotating to face their direction of travel. | 
| npc_blob_use_model | 2 | Arbitrary index | Chooses which model to show blob_elements as. Requires restart to take effect. 
  | 
	
| npc_blob_think_interval | 0.025 | Seconds | How often the NPC thinks. | 
Keyvalues
| 
 CBaseCombatCharacter: 
 
 CAI_BaseNPC: 
 
 
 
 
 
 
 
 
 DamageFilter: 
  | 
Flags
- Wait Till Seen : [1]
 - Prevents this NPC from seeing (or being seen) until it enters a player's viewcone.
 
- Gag : [2]
 - Won't make IDLE sounds until it's angry.
 
- Fall to ground (unchecked means teleport to ground) : [4]
 
- Drop Healthkit : [8]
 - Causes this NPC to drop an item_healthvial upon dying.
 
- Efficient : [16]
 - Don't acquire enemies or avoid obstacles
 
- Wait For Script : [128]
 - Forces this NPC to "wait" in an idle state until it finishes playing a scripted_sequence.
 
- Long Visibility/Shoot : [256]
 - By default, increases a NPC's sight range to 
6,000units and allows it to attack from anywhere within that distance. 
- Fade Corpse : [512]
 
- Think outside PVS : [1024]
 - Allows this NPC to run its regular AI outside of any player's PVS.
 
- Template NPC : [2048]
 - Marks this NPC as a template for entities like npc_template_maker. The NPC will not spawn on its own. This is not needed for point_template.
 
- Do Alternate collision for this NPC (player avoidance) : [4096]
 
- Don't drop weapons : [8192]
 
- Ignore player push : [16384] (in all games since 
) - Entity won't give way to player.
 
Inputs
- FormPathShape <string>
 - Tells the group to go distribute themselves along a shape defined by path corner entities
 
- SetRadius <float>
 - Force the group to change the radius (density)
 
CAI_BaseNPC:
- ActivateSpeedModifier !FGD
 
- DisableSpeedModifier !FGD
 
- Break
 - Smash into pieces. If this is not possible, disappear.
 
- BecomeRagdoll   (in all games since 
) - Remove itself and instantly become a ragdoll with zero force (just go limp). OnDeath, etc. outputs will NOT be fired.
 
- ForceInteractionWithNPC  <string> <string>   (in all games since 
) - Force the NPC to use a dynamic interaction with another NPC. Syntax is <targetname> <dynamic interaction>.
 
- ForgetEntity <targetname>
 - Clears out the NPC's knowledge of a named entity.
 
- UpdateEnemyMemory   (in all games since 
) - Update (or create) this NPC's memory of of the given entity.
 
- GagEnable
 
- GagDisable
 - Gagged NPCs won't speak (or moan, caw, etc.) unless made to be a choreographed scene.
 
- HolsterWeapon   (in all games since 
) 
- UnholsterWeapon   (in all games since 
) - Force the NPC to holster or unholster their weapon. Ignored if the NPC is scripting or if the NPC doesn't use weapons.
 
- HolsterAndDestroyWeapon   (in all games since 
) - Same as 
HolsterWeapon, except the weapon is destroyed once it has been concealed. 
- IgnoreDangerSounds <float>
 - Ignore danger sounds for the specified number of seconds.
 
- InsideTransition !FGD
 
- OutsideTransition !FGD
 
- SetBodyGroup <integer>
 - HACK: Sets this NPC's body group (from 0–n).
 
- SetEnemyFilter <string>
 
- SetHealth <integer>
 - Set the NPC's health.
 - SetMaxLookDistance  <float> (only in 
) - Sets the maximum look distance for the NPC. Defaults are 2048 and 6000 for long range NPCs.
 
- SetRelationship <string|targetname or classname> <string|disposition> <int|rank>
 - Changes whether this NPC likes or dislikes certain others. Used like the ai_relationship entity, with this NPC as the subject.
 - Values for 
dispositionare:D_HT: HateD_FR: FearD_LI: LikeD_NU: Neutral
 
- SetSquad <string>
 - Change the name of this NPC's squad. Leaving the parameter blank will remove the NPC from any existing squad.
 
- StartScripting
 
- StopScripting
 - Enter/exit scripting state, where NPCs ignore a variety of stimulus that would make them break out of their scripts. They ignore danger sounds, ignore +Use, don't idle speak or respond to other NPCs' idle speech, and so on.
 
- Wake
 - Wakes up the NPC if it is sleeping.
 
CBaseCombatCharacter:
- KilledNPC !FGD
 - Tells the entity it killed something. Despite the name, this can include a player. This input will be automatically sent by the victim when they die.
 
- physdamagescale <float>
 - Scales damage energy when this character is hit by a physics object. With a value of 0 the NPC will take no damage from physics.
 
DamageFilter:
Outputs
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  |