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;
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;
15 #insert scripts\shared\shared.gsh;
35 behaviorTreeEntity.newEnemyReaction =
false;
36 behaviorTreeEntity.malFunctionReaction =
false;
39 behaviorTreeEntity PathMode(
"move delayed",
true, 3 );
44 behaviorTreeEntity.newEnemyReaction =
false;
45 behaviorTreeEntity.malFunctionReaction =
false;
51 if ( IsDefined( behaviorTreeEntity.enemy ) &&
54 behaviorTreeEntity ClearPath();
63 if( !IsDefined( behaviorTreeEntity.enemy ) )
74 return IsDefined( neighbor ) &&
75 entity.team === neighbor.team;
78 #define VENGEANCE_CHANCE 0.5
79 #define VENGEANCE_DISTANCE_SQ SQR( 360 )
82 actors = GetAiArray();
84 if ( !IsDefined( entity.attacker ) )
89 foreach( index, ai
in actors )
95 ai GetPerfectInfo( entity.attacker,
true );
100 #define DONT_MOVE_TIME_MIN 1
101 #define DONT_MOVE_TIME_MAX 3
119 if ( !IsDefined( behaviorTreeEntity.reacquire_state ) )
121 behaviorTreeEntity.reacquire_state = 0;
124 if ( !IsDefined( behaviorTreeEntity.enemy ) )
126 behaviorTreeEntity.reacquire_state = 0;
130 if ( behaviorTreeEntity HasPath() )
132 behaviorTreeEntity.reacquire_state = 0;
136 if ( behaviorTreeEntity SeeRecently( behaviorTreeEntity.enemy, 4 ) )
138 behaviorTreeEntity.reacquire_state = 0;
143 dirToEnemy = VectorNormalize( behaviorTreeEntity.enemy.origin - behaviorTreeEntity.origin );
144 forward = AnglesToForward( behaviorTreeEntity.angles );
146 if ( VectorDot( dirToEnemy, forward ) <
COS_60 )
148 behaviorTreeEntity.reacquire_state = 0;
152 switch ( behaviorTreeEntity.reacquire_state )
158 reacquirePos = behaviorTreeEntity ReacquireStep( step_size );
162 if ( !( behaviorTreeEntity CanSee( behaviorTreeEntity.enemy ) ) || !( behaviorTreeEntity CanShootEnemy() ) )
164 behaviorTreeEntity FlagEnemyUnattackable();
171 behaviorTreeEntity.reacquire_state = 0;
177 if ( IsVec( reacquirePos ) )
179 behaviorTreeEntity UsePosition( reacquirePos );
183 behaviorTreeEntity.reacquire_state++;