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
An NPC's relationships define how it reacts to other NPCs. Use each NPC's FindEntityRelationship(CBaseEntity *pTarget) function to test relationship state.
Dispositions
There are four built-in "dispositions":
D_HATED_FEARD_LIKED_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.