npc_blob


npc_blob
is an entity available in Half-Life 2. It's 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.
Games
Appearance & Composition
An npc_blob
emits and controls a large group of entities called blob_element
s. Without an npc_blob
, these blob elements will disband and drift in their last direction of travel, which is dictated by 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_element
s 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).
blob_element
s between npc_blob
s?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_blob
appears as a combine soldier in hammer.- 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_hurt
s. - Igniting the
npc_blob
reveals that the NPC itself is an invisible headcrab model.Todo: Why...? - Igniting also reveals that the
npc_blob
never moves, only theblob_element
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 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_blob may have been intended to appear in Half-Life 2, Episode 3 should it have been released.
Dedicated ConVars
blob_mindist <120.0>
(hammer units)
Confirm:No effect?
blob_element_speed <187>
(hammer units per second)
- How fast
blob_element
s 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_element
s a singlenpc_blob
manages.
blob_batchpercent <100>
(percentage?[confirm])
Confirm:Looking at code, seems like it would limit the number of blobs elements processed to a certain percent. No effect observed ingame.
blob_radius <160>
(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.0f>
(arbitrary number?[confirm])
- Amplifies how much
blob_element
s 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>
(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 number)
- Chooses which model to show
blob_element
s as. Requires restart to take effect.- 0.
gibs/agibs.mdl
(skull) - 1.
props_junk/watermelon01.mdl
(watermelon) - 2.
w_squeak.mdl
(snark (not in final game, shows error model)) - 3.
baby_headcrab.mdl
(baby headcrab (not in final game, shows error model))
- 0.

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,000
units 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
disposition
are: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
|