Tutorials

NPC Act Busy



Hello Interlopers,
In this tutorial we are going to learn how to let your npc look busy.

Content

  • Components of the trial
  • Let an npc act busy (basic)
  • Let multiple npc act busy (intermediate)



1. Components
The basic structure of this trial requires the following entities:


  • One or more NPC's
  • Ai_goal_actbusy
  • One or more info_node_hint 's
  • An actbusy.Txt that resides in your mod/scripts folder



The ai_goal_actbusy command a npc or a group of npc to search for a info_node_hint.
The npc will only accept the info_node_hint if all the conditions are met:


  • The node type must be set to World: Act Busy Hint
  • The distance between the node and npc must be smaller than the one your specified in the ai_goal_actbusy
  • The node should not be locked by another npc
  • The npc has all the required animations.



If all of the above conditions are met and your npc choses an info_node_hint, he will lock it to prevent multiple npc at one node.

One of the properties you can chose in the node is the so called 'hint activity'. This hint activity has to be in your actbusy.txt

You can choose to use the one from HL2 or you can make your own one. The structure of this is:

"act busy name" This is the name that the level designer specifies in the hint node.

{ 
	"busy_anim" 		"Activity Name".
	"entry_anim"		"Activity Name"
	"exit_anim"		"Activity Name"
	"busy_sequence"		"Sequence Name". 
                                  If specified, this is used over the activity name. Specify it in  the hint node.
	"entry_sequence" 	"Sequence Name". 
                                  If specified, this is used over the entry anim.
	"exit_sequence" 	"Sequence Name". 
                                  If specified, this is used over the exit anim.
	"busy_sound"		"Sound Name". 
                                  If specified, the NPC will play this sound when it plays the busy anim/seq. 
                                  Can be a GameSound name or a response rules concept.
	"entry_sound"		"Sound Name". 
                                  If specified, the NPC will play this sound when it plays the entry anim/seq. 
                                  Can be a GameSound name or a response rules concept.
	"exit_sound"		"Sound Name". 
                                  If specified, the NPC will play this sound when it plays the exit anim/seq. 
                                  Can be a GameSound name or a response rules concept.
 	"min_time"		"Minimum time to spend in this busy anim"
	"max_time"		"Maximum time to spend in this busy anim"	
                                  0 = only stop when interrupted by external event
	"interrupts"		One of:
				 "BA_INT_NONE"   break out only when time runs out. No external influence will break me out.
				 "BA_INT_DANGER" break out only if threatened
			 	 "BA_INT_PLAYER" break out if I can see the player, or I'm threatened
				 "BA_INT_AMBUSH" break out if I see an enemy in my forward view cone.
				 "BA_INT_COMBAT" break out if I see an enemy or any sign of combat (bullet impacts, etc).
}


The "act busy name" is the name you have to put in the info_node_hint, hint_activity.

(source: http://developer.valvesoftware.com/wiki/Actbusy)

With GCFscape you can find the default one of hl2.
Please remember that your npc MUST have all the animations, or it will not choose that node.



2. Let an npc act busy (basic)

First set-up a basic room, something like this:

news post image

Place an info_player start in it.
Then place an npc_citizen and name it citizen. Flag 'non commandable' aswell.
Place and info_node_hint in your map and an info_node between the hint and your npc.

news post image

Also put an ai_goal_actbusy. It can be put anywhere on your map.
Open up it properties:
change actor(s) to affect to the name of your citizen.
Set active to 'yes'.

Next open up the properties of the info_node_hint

news post image

Change the type to 'World: Act Busy'
Hint activity: d1_t02_Plaza_Sit02 (*)

Now compile and run your map. The result must be something like this:

news post image

Congratulations, you have just let your first npc act busy!

(*)As I already told, The hint_activity refers to your actbusy.txt
In this example we use the default one. I copied all the default act busy activities below:


"ActBusy.txt"
{
	"binoculars_idle"
	{
		"busy_sequence" 	"binoculars_idle"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_PLAYER"
	}
	"d2_coast03_PreBattle_Scan_Skies"
	{
		"busy_sequence" 	"d2_coast03_PreBattle_Scan_Skies"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d2_coast03_PreBattle_Scan_Skies02"
	{
		"busy_sequence" 	"d2_coast03_PreBattle_Scan_Skies02"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d2_coast03_PreBattle_Scan_Skies03"
	{
		"busy_sequence" 	"d2_coast03_PreBattle_Scan_Skies03"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d2_coast03_PreBattle_Kneel_Idle"
	{
		"busy_sequence" 	"d2_coast03_PreBattle_Kneel_Idle"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d2_coast03_PreBattle_Stand_Look"
	{
		"busy_sequence" 	"d2_coast03_PreBattle_Stand_Look"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"idle_alert_01"
	{
		"busy_sequence" 	"idle_alert_01"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"idle_alert_02"
	{
		"busy_sequence" 	"idle_alert_02"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"idle_relaxed_01"
	{
		"busy_sequence" 	"idle_relaxed_01"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"idle_relaxed_02"
	{
		"busy_sequence" 	"idle_relaxed_02"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_town05_Leon_Lean_Table_Idle"
	{
		"busy_sequence" 	"d1_town05_Leon_Lean_Table_Idle"
		"entry_sequence"	"d1_town05_Leon_Lean_Table_Entry"
		"exit_sequence"	"d1_town05_Leon_Lean_Table_Exit"		
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}

	"d1_t03_Sit_couch"
	{
		"busy_sequence" 	"d1_t03_Sit_couch"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t03_sit_couch_consoling"
	{
		"busy_sequence" 	"d1_t03_sit_couch_consoling"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"fear_reaction_Idle"
	{
		"busy_sequence" 	"fear_reaction_Idle"
		"entry_sequence"	"fear_reaction"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"cower_Idle"
	{
		"busy_sequence" 	"cower_Idle"
		"entry_sequence"	"cower"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t03_Sit_Bed"
	{
		"busy_sequence" 	"d1_t03_Sit_Bed"
		"entry_sequence"	"d1_t03_Sit_Bed_Entry"
		"exit_sequence"		"d1_t03_Sit_Bed_Exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"LineIdle01"
	{
		"busy_sequence" 	"LineIdle01"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t01_BreakRoom_WatchBreen"
	{
		"busy_sequence" 	"d1_t01_BreakRoom_WatchBreen"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t02_Plaza_Sit01_Idle"
	{
		"busy_sequence" 	"d1_t02_Plaza_Sit01_Idle"
		"entry_sequence"	"Idle_to_d1_t01_BreakRoom_Sit01"
		"exit_sequence"		"d1_t01_BreakRoom_Sit01_to_Idle"
		"min_time"		"20.0"
		"max_time"		"30.0"
		"interrupts"	"BA_INT_DANGER"
	}
	"d1_t02_Plaza_Sit02"
	{
		"busy_sequence" 	"d1_t02_Plaza_Sit02"
		"entry_sequence"	"d1_t01_BreakRoom_Sit02_Entry"
		"exit_sequence"		"d1_t01_BreakRoom_Sit02_Exit"
		"min_time"		"20.0"
		"max_time"		"30.0"
		"interrupts"	"BA_INT_DANGER"
	}
	"d1_t02_Playground_Cit2_Pockets"
	{
		"busy_sequence" 	"d1_t02_Playground_Cit2_Pockets"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t02_Playground_Cit1_Arms_Crossed"
	{
		"busy_sequence" 	"d1_t02_Playground_Cit1_Arms_Crossed"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t03_LookOutDoor"
	{
		"busy_sequence" 	"d1_t03_LookOutDoor"
		"entry_sequence"	"d1_t03_LookOutDoor_Entry"
		"exit_sequence"		"d1_t03_LookOutDoor_Exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t03_LookOutWindow"
	{
		"busy_sequence" 	"d1_t03_LookOutWindow"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t03_Tenements_Look_Out_Window_Idle"
	{
		"busy_sequence" 	"d1_t03_Tenements_Look_Out_Window_Idle"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t03_PreRaid_Peek_Idle"
	{
		"busy_sequence" 	"d1_t03_PreRaid_Peek_Idle"
		"exit_sequence"	"d1_t03_Preraid_Peek_Exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t01_Clutch_Chainlink_Idle"
	{
		"busy_sequence" 	"d1_t01_Clutch_Chainlink_Idle"
		"entry_sequence"	"d1_t01_Clutch_Chainlink_Entry"  
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t01_BreakRoom_Sit01_Idle"
	{
		"busy_sequence" 	"d1_t01_BreakRoom_Sit01_Idle"
		"entry_sequence"	"Idle_to_d1_t01_BreakRoom_Sit01"
		"exit_sequence"		"d1_t01_BreakRoom_Sit01_to_Idle"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t01_BreakRoom_Sit02"
	{
		"busy_sequence" 	"d1_t01_BreakRoom_Sit02"
		"entry_sequence"	"d1_t01_BreakRoom_Sit02_Entry"
		"exit_sequence"		"d1_t01_BreakRoom_Sit02_Exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_None"
	}
	"d1_t01_BreakRoom_WatchClock_Sit"
	{
		"busy_sequence" 	"d1_t01_BreakRoom_WatchClock_Sit"
		"entry_sequence"	"d1_t01_BreakRoom_WatchClock_Sit_Entry"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"d1_t01_BreakRoom_WatchClock_Sit_MX"
	{
		"busy_sequence" 	"d1_t01_BreakRoom_WatchClock_Sit_MX"
		"entry_sequence"	"d1_t01_BreakRoom_WatchClock_Sit_Entry_MX"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"ACT_BUSY_LEAN_LEFT"
	{
		"busy_anim" 	"ACT_BUSY_LEAN_LEFT"
		"entry_anim"	"ACT_BUSY_LEAN_LEFT_ENTRY"
		"exit_anim"		"ACT_BUSY_LEAN_LEFT_EXIT"
		"min_time"		"10.0"
		"max_time"		"20.0"
		"interrupts"	"BA_INT_PLAYER"
	}
	"Lean_Left"
	{
		"busy_sequence" 	"Lean_Left"
		"entry_anim"	"ACT_BUSY_LEAN_LEFT_ENTRY"
		"exit_sequence"		"photo_react_startle"
		"min_time"		"0"
		"max_time"		"0"
		"interrupts"	"BA_INT_NONE"
	}
	"ACT_BUSY_LEAN_BACK"
	{
		"busy_anim" 	"ACT_BUSY_LEAN_BACK"
		"entry_anim"	"ACT_BUSY_LEAN_BACK_ENTRY"
		"exit_anim"		"ACT_BUSY_LEAN_BACK_EXIT"
		"min_time"		"10.0"
		"max_time"		"20.0"
		"interrupts"	"BA_INT_PLAYER"
	}
	"lean_back"
	{
		"busy_sequence" 	"lean_back"
		"entry_anim"	"ACT_BUSY_LEAN_BACK_ENTRY"
		"exit_anim"		"ACT_BUSY_LEAN_BACK_EXIT"
		"min_time"		"0"
		"max_time"		"0"
		"interrupts"	"BA_INT_NONE"
	}
	"ACT_BUSY_SIT_GROUND"
	{
		"busy_anim" 	"ACT_BUSY_SIT_GROUND"
		"entry_anim"	"ACT_BUSY_SIT_GROUND_ENTRY"
		"exit_anim"		"ACT_BUSY_SIT_GROUND_EXIT"
		"min_time"		"20.0"
		"max_time"		"30.0"
		"interrupts"	"BA_INT_DANGER"
	}
	"ACT_BUSY_SIT_CHAIR"
	{
		"busy_anim" 	"ACT_BUSY_SIT_CHAIR"
		"entry_anim"	"ACT_BUSY_SIT_CHAIR_ENTRY"
		"exit_anim"		"ACT_BUSY_SIT_CHAIR_EXIT"
		"min_time"		"30.0"
		"max_time"		"40.0"
		"interrupts"	"BA_INT_DANGER"
	}
	"ACT_BUSY_STAND"
	{
		"busy_anim" 	"ACT_BUSY_STAND"
		"min_time"		"10.0"
		"max_time"		"20.0"
		"interrupts"	"BA_INT_DANGER"
	}
	"ACT_BUSY_QUEUE"
	{
		"busy_anim"	"ACT_BUSY_QUEUE"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"food_queue_front"
	{
		"busy_sequence"	"lineIdle01"
		"exit_sequence" "takepackage"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"sitcouchfeet1"
	{	"busy_sequence"	"sitcouchfeet1"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"sitcouchknees1"
	{	"busy_sequence"	"sitcouchknees1"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"sitchairtable1"
	{	"busy_sequence"	"sitchairtable1"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"sitcouch1"
	{	"busy_sequence"	"sitcouch1"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"sitccouchtv1"
	{	"busy_sequence"	"sitccouchtv1"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"laycouch1"
	{	"busy_sequence"	"laycouch1"
		"exit_sequence" "laycouch1_exit"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"laycouch1"
	{	
		"busy_sequence"	"laycouch1"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"Sit_Chair02"
	{	
		"busy_sequence"	"Sit_Chair02"
		"entry_sequence" 	"Idle_to_Sit_Chair02"
		"exit_sequence" 	"Sit_Chair02_to_Idle"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"Sit_Chair03"
	{	
		"busy_sequence"	"Sit_Chair03"
		"entry_sequence" 	"Idle_to_Sit_Chair03"
		"exit_sequence" 	"Sit_Chair03_to_Idle"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"drinker_sit_idle"
	{	
		"busy_sequence"	"drinker_sit_idle"
		"entry_sequence" 	"drinker_sit"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"drinker_sit_idle_ss"
	{	
		"busy_sequence"	"drinker_sit_idle_ss"
		"entry_sequence" 	"drinker_sit_ss"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"railing_idle"
	{	
		"busy_sequence"	"railing_idle"
		//"entry_sequence" 	"railing_enter"
		"exit_sequence" 	"railing_exit"
		"min_time"	"0.0"
		"max_time"	"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"D1_C01a_Mary_kneel"
	{
		"busy_sequence" 	"canals_mary_postidle"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"D1_C03_Matt_sitground"
	{
		"busy_anim" 		"ACT_BUSY_SIT_GROUND"
		"entry_anim"		"ACT_BUSY_SIT_GROUND_ENTRY"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"Cover_R"
	{
		"busy_sequence"		"Cover_R"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"Cover_L"
	{
		"busy_sequence"		"Cover_L"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"Coverlow_R"
	{
		"busy_sequence"		"Coverlow_R"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}
	"Coverlow_L"
	{
		"busy_sequence"		"Coverlow_L"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_NONE"
	}

//*****************************************************************************
//************  Soldier actbusy section   *************************************
//*****************************************************************************

	

	"Cover_crouch"
	{
		"busy_sequence"		"crouchidle_AB"
		"exit_sequence"		"crouch_to_combat_stand"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}
	
	"Cover_crouch_B"
	{
		"busy_sequence"		"crouchidle_AB"
		"exit_sequence"		"crouchidle_ABexit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"Signal_group"
	{
		"busy_sequence"		"signal_group"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"Idle_Alert"
	{
		"busy_sequence"		"CombatIdle1"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}	

	"Signal_Advance"
	{
		"busy_sequence"		"CombatIdle1"
		"exit_sequence"		"signal_advance"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_Right"
	{
		"busy_sequence"		"leanwall_right_idle"
		"exit_sequence"		"leanwall_right_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_Corner_Right"
	{
		"busy_sequence"		"leanwall_Corner_right_idle"
		"exit_sequence"		"leanwall_Corner_right_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_Left"
	{
		"busy_sequence"		"leanwall_left_idle"
		"exit_sequence"		"leanwall_left_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_Left_B"
	{
		"busy_sequence"		"leanwall_left_b_idle"
		"exit_sequence"		"leanwall_left_b_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_CrouchLeft_A"
	{
		"busy_sequence"		"leanwall_CrouchLeft_A_idle"
		"exit_sequence"		"leanwall_CrouchLeft_A_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_CrouchLeft_B"
	{
		"busy_sequence"		"leanwall_CrouchLeft_B_idle"
		"exit_sequence"		"leanwall_CrouchLeft_B_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_CrouchLeft_C"
	{
		"busy_sequence"		"leanwall_CrouchLeft_C_idle"
		"exit_sequence"		"leanwall_CrouchLeft_C_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

	"LeanWall_CrouchLeft_D"
	{
		"busy_sequence"		"leanwall_CrouchLeft_D_idle"
		"exit_sequence"		"leanwall_CrouchLeft_D_exit"
		"min_time"		"0.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_AMBUSH"
	}

//*****************************************************************************
//************  Metrocop actbusy section   ************************************
//*****************************************************************************

	"Crouch_idle_pistol_A"
	{
		"busy_sequence"		"Crouch_idle_pistol"
		"exit_sequence"		"Crouch_to_shootpistol"
		"min_time"		"1.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_COMBAT"
	}

	"Crouch_idle_smg1_A"
	{
		"busy_sequence"		"Crouch_idle_smg1"
		"exit_sequence"		"Crouch_to_shootsmg1"
		"min_time"		"1.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_COMBAT"
	}

	"Idle_harrassidle_A"
	{
		"busy_sequence"		"harrassidle"
		"min_time"		"1.0"
		"max_time"		"0.0"
		"interrupts"	"BA_INT_COMBAT"
	}



}



3. Make multiple NPc act busy.
This is mainly an extension.

Take the previous map and copy the npc_citizen 3 times.
You can let the have the same name or change them if you like.
If you do change them, you'll have to make 1 ai_goal_actbusy for each npc.

make 2 prop_statics. Change the world models to:
models/props_trainstation/benchoutdoor01a.mdl
and

models/props_trainstation/bench_indoor001a.mdl

Now place 1 info_node hint near a wall and change it properties to:
Hint: World: Act Busy
Hint activity: ACT_BUSY_LEAN_LEFT

news post image

Put 1 after the blue bench, change the hint and the hint activity to: ACT_BUSY_SIT_CHAIR
Put 2 info_node_hints after the outdoor bench and change the hint and hint activity: d1_t02_Plaza_Sit02

Pay attention they are putted after, not in the model

news post image

Place some info_nodes around so your npcs can navigate better.
Compile and run

news post image

If all goes well it should now be working, Congratulations!
I hope I stimulated your imagination.

news post image

- Tom Aat

View comments ( 0 )

Back to top