Defining the NPC
This page covers creating a simple NPC using the SDK's template.
Setting up
All versions of the SDK (including Alien Swarm) provide a NPC template file at server/hl2/monster_dummy.cpp
. You can copy this file to a new location and start working on it.
Change the model path in Precache()
and Spawn()
to a valid model file (choose something humanoid for now) and you will be able to spawn a NPC which turns to face sounds it hears nearby.
Relationships
- This section targets the Alien Swarm codebase.
An NPC's relationships define how it reacts to other NPCs. Use each NPC's FindEntityRelationship(CBaseEntity *pTarget)
function to test the relationship state.
Dispositions
There are four built-in "dispositions":
D_HATE
D_FEAR
D_LIKE
D_NEUTRAL
Each relationship has a priority. The relationship with the highest priority wins if there is a conflict.
Targets
A relationship can target one of three things:
Faction
An NPC can belong to a faction, and that faction can have dispositions toward other factions. Factions are defined in game/shared/shareddefs.h
(by default there are none).
AddFactionRelationship()
- Adds a faction relationship for this NPC only.
CBaseCombatCharacter::SetDefaultFactionRelationship()
- Adds a static faction relationship which is shared by all NPCs.
ChangeFaction()
- Sets the faction to which the NPC belongs.
Class
An NPC can classify itself. This particular class is the return value of the Classify()
function, and is not related to C++ or Hammer classes.
AddClassRelationship()
- Adds a class relationship for this NPC only.
CBaseCombatCharacter::SetDefaultRelationship()
- Adds a static class relationship which is shared by all NPCs.
Class_T Classify()
- Returns this NPC's class.
Too add a new NPC class,go to basentity.h, line 95 and add you class.
Entity
Lastly, one-off relationships can be specified between any two NPCs.
AddEntityRelationship()
- Adds a relationship between this NPC and another.