‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
archetype_human_exposed.gsc
Go to the documentation of this file.
1 // COMMON AI SYSTEMS INCLUDES
2 #using scripts\shared\ai_shared;
3 #using scripts\shared\ai\systems\animation_state_machine_utility;
4 #using scripts\shared\ai\systems\behavior_tree_utility;
5 #using scripts\shared\ai\systems\blackboard;
6 #using scripts\shared\ai\archetype_utility;
7 
8 #insert scripts\shared\ai\systems\animation_state_machine.gsh;
9 #insert scripts\shared\ai\systems\blackboard.gsh;
10 #insert scripts\shared\ai\systems\behavior_tree.gsh;
11 #insert scripts\shared\ai\systems\behavior.gsh;
12 #insert scripts\shared\ai\utility.gsh;
13 
14 // ADDITIONAL INCLUDES
15 #insert scripts\shared\shared.gsh;
16 
18 {
19  // ------- EXPOSED - CONDITIONS -----------//
20  ‪BT_REGISTER_API( "hasCloseEnemy", &‪hasCloseEnemy );
21  ‪BT_REGISTER_API( "noCloseEnemyService", &‪noCloseEnemyService );
22  ‪BT_REGISTER_API( "tryReacquireService", &‪tryReacquireService );
23  ‪BT_REGISTER_API( "prepareToReactToEnemy", &‪prepareToReactToEnemy );
24  ‪BT_REGISTER_API( "resetReactionToEnemy", &‪resetReactionToEnemy );
25 
26  ‪BT_REGISTER_API( "exposedSetDesiredStanceToStand", &‪exposedSetDesiredStanceToStand );
27  ‪BT_REGISTER_API( "setPathMoveDelayedRandom", &‪setPathMoveDelayedRandom );
28 
29  ‪BT_REGISTER_API( "vengeanceService", &‪vengeanceService );
30 }
31 
32 // ------- EXPOSED REACT TO ENEMY -----------//
33 function private ‪prepareToReactToEnemy( behaviorTreeEntity )
34 {
35  behaviorTreeEntity.newEnemyReaction = false;
36  behaviorTreeEntity.malFunctionReaction = false;
37 
38  // Delay movement when surprised.
39  behaviorTreeEntity PathMode( "move delayed", true, 3 );
40 }
41 
42 function private ‪resetReactionToEnemy( behaviorTreeEntity )
43 {
44  behaviorTreeEntity.newEnemyReaction = false;
45  behaviorTreeEntity.malFunctionReaction = false;
46 }
47 
48 // ------- EXPOSED CHARGE MELEE -----------//
49 function private ‪noCloseEnemyService( behaviorTreeEntity )
50 {
51  if ( IsDefined( behaviorTreeEntity.enemy ) &&
52  ‪AiUtility::hasCloseEnemyToMelee( behaviorTreeEntity ) )
53  {
54  behaviorTreeEntity ClearPath();
55  return true;
56  }
57 
58  return false;
59 }
60 
61 function private ‪hasCloseEnemy( behaviorTreeEntity )
62 {
63  if( !IsDefined( behaviorTreeEntity.enemy ) )
64  return false;
65 
66  if ( DistanceSquared( behaviorTreeEntity.origin, behaviorTreeEntity.enemy.origin ) < ‪CLOSE_ENEMY_DISTANCE_SQ )
67  return true;
68 
69  return false;
70 }
71 
72 function private ‪_IsValidNeighbor( entity, neighbor )
73 {
74  return IsDefined( neighbor ) &&
75  entity.team === neighbor.team;
76 }
77 
78 #define VENGEANCE_CHANCE 0.5
79 #define VENGEANCE_DISTANCE_SQ SQR( 360 )
80 function private ‪vengeanceService( entity )
81 {
82  actors = GetAiArray();
83 
84  if ( !IsDefined( entity.attacker ) )
85  {
86  return;
87  }
88 
89  foreach( index, ai in actors )
90  {
91  if ( ‪_IsValidNeighbor( entity, ai ) &&
92  DistanceSquared( entity.origin, ai.origin ) <= ‪VENGEANCE_DISTANCE_SQ &&
93  RandomFloat( 1 ) >= ‪VENGEANCE_CHANCE )
94  {
95  ai GetPerfectInfo( entity.attacker, true );
96  }
97  }
98 }
99 
100 #define DONT_MOVE_TIME_MIN 1
101 #define DONT_MOVE_TIME_MAX 3
102 function private ‪setPathMoveDelayedRandom( behaviorTreeEntity, asmStateName )
103 {
104  // Delay movement to prevent jittering.
105  behaviorTreeEntity PathMode( "move delayed", false, RandomFloatRange( ‪DONT_MOVE_TIME_MIN, ‪DONT_MOVE_TIME_MAX ) );
106 }
107 
108 function private ‪exposedSetDesiredStanceToStand( behaviorTreeEntity, asmStateName )
109 {
110  ‪AiUtility::keepClaimNode( behaviorTreeEntity );
111 
112  currentStance = ‪Blackboard::GetBlackBoardAttribute( behaviorTreeEntity, ‪STANCE );
114 }
115 
116 // ------- EXPOSED - REACQUIRE -----------//
117 function private ‪tryReacquireService( behaviorTreeEntity )
118 {
119  if ( !IsDefined( behaviorTreeEntity.reacquire_state ) )
120  {
121  behaviorTreeEntity.reacquire_state = 0;
122  }
123 
124  if ( !IsDefined( behaviorTreeEntity.enemy ) )
125  {
126  behaviorTreeEntity.reacquire_state = 0;
127  return false;
128  }
129 
130  if ( behaviorTreeEntity HasPath() )
131  {
132  behaviorTreeEntity.reacquire_state = 0;
133  return false;
134  }
135 
136  if ( behaviorTreeEntity SeeRecently( behaviorTreeEntity.enemy, 4 ) )
137  {
138  behaviorTreeEntity.reacquire_state = 0;
139  return false;
140  }
141 
142  // don't do reacquire unless facing enemy
143  dirToEnemy = VectorNormalize( behaviorTreeEntity.enemy.origin - behaviorTreeEntity.origin );
144  forward = AnglesToForward( behaviorTreeEntity.angles );
145 
146  if ( VectorDot( dirToEnemy, forward ) < ‪COS_60 )
147  {
148  behaviorTreeEntity.reacquire_state = 0;
149  return false;
150  }
151 
152  switch ( behaviorTreeEntity.reacquire_state )
153  {
154  case 0:
155  case 1:
156  case 2:
157  step_size = ‪REACQUIRE_STEP_SIZE + behaviorTreeEntity.reacquire_state * ‪REACQUIRE_STEP_SIZE;
158  reacquirePos = behaviorTreeEntity ReacquireStep( step_size );
159  break;
160 
161  case 4:
162  if ( !( behaviorTreeEntity CanSee( behaviorTreeEntity.enemy ) ) || !( behaviorTreeEntity CanShootEnemy() ) )
163  {
164  behaviorTreeEntity FlagEnemyUnattackable();
165  }
166  break;
167 
168  default:
169  if ( behaviorTreeEntity.reacquire_state > ‪REACQUIRE_RESET )
170  {
171  behaviorTreeEntity.reacquire_state = 0;
172  return false;
173  }
174  break;
175  }
176 
177  if ( IsVec( reacquirePos ) )
178  {
179  behaviorTreeEntity UsePosition( reacquirePos );
180  return true;
181  }
182 
183  behaviorTreeEntity.reacquire_state++;
184  return false;
185 }
‪vengeanceService
‪function private vengeanceService(entity)
Definition: archetype_human_exposed.gsc:80
‪REACQUIRE_STEP_SIZE
‪#define REACQUIRE_STEP_SIZE
Definition: behavior.gsh:92
‪BT_REGISTER_API
‪#define BT_REGISTER_API(name, function)
Definition: behavior.gsh:1
‪REACQUIRE_RESET
‪#define REACQUIRE_RESET
Definition: behavior.gsh:93
‪_IsValidNeighbor
‪function private _IsValidNeighbor(entity, neighbor)
Definition: archetype_human_exposed.gsc:72
‪prepareToReactToEnemy
‪function private prepareToReactToEnemy(behaviorTreeEntity)
Definition: archetype_human_exposed.gsc:33
‪SetBlackBoardAttribute
‪function SetBlackBoardAttribute(entity, attributeName, attributeValue)
Definition: blackboard.gsc:56
‪GetBlackBoardAttribute
‪function GetBlackBoardAttribute(entity, attributeName)
Definition: blackboard.gsc:32
‪noCloseEnemyService
‪function private noCloseEnemyService(behaviorTreeEntity)
Definition: archetype_human_exposed.gsc:49
‪COS_60
‪#define COS_60
Definition: behavior.gsh:91
‪STANCE
‪#define STANCE
Definition: blackboard.gsh:36
‪STANCE_STAND
‪#define STANCE_STAND
Definition: blackboard.gsh:273
‪DESIRED_STANCE
‪#define DESIRED_STANCE
Definition: blackboard.gsh:18
‪DONT_MOVE_TIME_MIN
‪#define DONT_MOVE_TIME_MIN
Definition: archetype_human_exposed.gsc:100
‪exposedSetDesiredStanceToStand
‪function private exposedSetDesiredStanceToStand(behaviorTreeEntity, asmStateName)
Definition: archetype_human_exposed.gsc:108
‪hasCloseEnemyToMelee
‪function hasCloseEnemyToMelee(entity)
Definition: archetype_utility.gsc:2761
‪DONT_MOVE_TIME_MAX
‪#define DONT_MOVE_TIME_MAX
Definition: archetype_human_exposed.gsc:101
‪VENGEANCE_CHANCE
‪#define VENGEANCE_CHANCE
Definition: archetype_human_exposed.gsc:78
‪setPathMoveDelayedRandom
‪function private setPathMoveDelayedRandom(behaviorTreeEntity, asmStateName)
Definition: archetype_human_exposed.gsc:102
‪CLOSE_ENEMY_DISTANCE_SQ
‪#define CLOSE_ENEMY_DISTANCE_SQ
Definition: behavior.gsh:71
‪tryReacquireService
‪function private tryReacquireService(behaviorTreeEntity)
Definition: archetype_human_exposed.gsc:117
‪hasCloseEnemy
‪function private hasCloseEnemy(behaviorTreeEntity)
Definition: archetype_human_exposed.gsc:61
‪resetReactionToEnemy
‪function private resetReactionToEnemy(behaviorTreeEntity)
Definition: archetype_human_exposed.gsc:42
‪keepClaimNode
‪function keepClaimNode(behaviorTreeEntity)
Definition: archetype_utility.gsc:2181
‪RegisterBehaviorScriptfunctions
‪function autoexec RegisterBehaviorScriptfunctions()
Definition: archetype_human_exposed.gsc:17
‪VENGEANCE_DISTANCE_SQ
‪#define VENGEANCE_DISTANCE_SQ
Definition: archetype_human_exposed.gsc:79