Difference between revisions of "Defining the NPC"

From Valve Developer Community
Jump to: navigation, search
Line 1: Line 1:
{{npc tut}}
{{npc tut}}
This page covers '''creating a simple NPC''' using the SDK's template.
This page covers '''creating a simple NPC''' using the SDK's template.

Latest revision as of 03:43, 27 April 2021

English 简体中文

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.


Alien Swarm 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 relationship state.


There are four built-in "dispositions":

  • D_HATE
  • D_FEAR
  • D_LIKE

Each relationship has a priority. The relationship with the highest priority wins if there is a conflict.


A relationship can target one of three things:


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).

Adds a faction relationship for this NPC only.
Adds a static faction relationship which is shared by all NPCs.
Sets the faction to which the NPC belongs.


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.

Adds a class relationship for this NPC only.
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.


Lastly, one-off relationships can be specified between any two NPCs.

Adds a relationship between this NPC and another.