27 #define AI_DEFAULT_CLASS 3 // default AI class for new ships (Fred)
35 #define MAX_AI_FLAG_NAMES 2
38 #define AIF_FORMATION_WING (1 << 0) // Fly in formation as part of wing.
39 #define AIF_AWAITING_REPAIR (1 << 1) // Awaiting a repair ship.
40 #define AIF_BEING_REPAIRED (1 << 2) // Currently docked with repair ship.
41 #define AIF_REPAIRING (1 << 3) // Repairing a ship (or going to repair a ship)
42 #define AIF_SEEK_LOCK (1 << 4) // set if should focus on gaining aspect lock, not hitting with lasers
43 #define AIF_FORMATION_OBJECT (1 << 5) // Fly in formation off a specific object.
44 #define AIF_TEMPORARY_IGNORE (1 << 6) // Means current ignore_objnum is only temporary, not an order from the player.
45 #define AIF_USE_EXIT_PATH (1 << 7) // Used by path code, to flag path as an exit path
46 #define AIF_USE_STATIC_PATH (1 << 8) // Used by path code, use fixed path, don't try to recreate
47 #define AIF_TARGET_COLLISION (1 << 9) // Collided with aip->target_objnum last frame. Avoid that ship for half a second or so.
48 #define AIF_UNLOAD_SECONDARIES (1 << 10) // Fire secondaries as fast as possible!
49 #define AIF_ON_SUBSYS_PATH (1 << 11) // Current path leads to a subsystem
50 #define AIF_AVOID_SHOCKWAVE_SHIP (1 << 12) // Avoid an existing shockwave from a ship.
51 #define AIF_AVOID_SHOCKWAVE_WEAPON (1 << 13) // Avoid an expected shockwave from a weapon. shockwave_object field contains object index.
52 #define AIF_AVOID_SHOCKWAVE_STARTED (1 << 14) // Already started avoiding shockwave, don't keep deciding whether to avoid.
53 #define AIF_ATTACK_SLOWLY (1 << 15) // Move slowly while attacking.
54 #define AIF_REPAIR_OBSTRUCTED (1 << 16) // Ship wants to be repaired, but path is obstructed.
55 #define AIF_KAMIKAZE (1 << 17) // Crash into target
56 #define AIF_NO_DYNAMIC (1 << 18) // Not allowed to get dynamic goals
57 #define AIF_AVOIDING_SMALL_SHIP (1 << 19) // Avoiding a player ship.
58 #define AIF_AVOIDING_BIG_SHIP (1 << 20) // Avoiding a large ship.
59 #define AIF_BIG_SHIP_COLLIDE_RECOVER_1 (1 << 21) // Collided into a big ship. Recovering by flying away.
60 #define AIF_BIG_SHIP_COLLIDE_RECOVER_2 (1 << 22) // Collided into a big ship. Fly towards big ship sphere perimeter.
61 #define AIF_STEALTH_PURSUIT (1 << 23) // AI is trying to fight stealth ship
64 #define AIF_UNLOAD_PRIMARIES (1 << 24) // Fire primaries as fast as possible!
65 #define AIF_TRYING_UNSUCCESSFULLY_TO_WARP (1 << 25) // Trying to warp, but can't warp at the moment
67 #define AIF_FREE_AFTERBURNER_USE (1 << 26) // Use afterburners while following waypoints or flying towards objects
69 #define AIF_AVOID_SHOCKWAVE (AIF_AVOID_SHOCKWAVE_SHIP | AIF_AVOID_SHOCKWAVE_WEAPON)
70 #define AIF_FORMATION (AIF_FORMATION_WING | AIF_FORMATION_OBJECT)
73 #define DOA_APPROACH 1 // Approach the current point on the path (aip->path_cur)
74 #define DOA_DOCK 2 // Dock with goal object.
75 #define DOA_UNDOCK_1 3 // Begin undocking with goal object. Just move away.
76 #define DOA_UNDOCK_2 4 // Secondary undocking. Move away.
77 #define DOA_UNDOCK_3 5 // Tertiary undocking. Move away and orient away.
78 #define DOA_DOCK_STAY 6 // Rigidly maintain position in dock bay.
81 #define AIDO_DOCK 1 // Set goal of docking with object.
82 #define AIDO_DOCK_NOW 2 // Immediately move into dock position. For ships that start mission docked.
83 #define AIDO_UNDOCK 3 // Set goal of undocking with object.
86 #define AISS_1 41 // Pick a spot to fly to.
87 #define AISS_2 42 // Flying to spot.
88 #define AISS_3 43 // Gotten near spot, fly about there.
89 #define AISS_1a 44 // Pick a new nearby spot because we are endangered, then go to AISS_2
91 #define MAX_AI_GOALS 5
97 #define AIG_TYPE_EVENT_SHIP 1 // from mission event direct to ship
98 #define AIG_TYPE_EVENT_WING 2 // from mission event direct to wing
99 #define AIG_TYPE_PLAYER_SHIP 3 // from player direct to ship
100 #define AIG_TYPE_PLAYER_WING 4 // from player direct to wing
101 #define AIG_TYPE_DYNAMIC 5 // created on the fly
104 #define AIGF_DOCKER_INDEX_VALID (1<<0) // when set, index field for docker is valid
105 #define AIGF_DOCKEE_INDEX_VALID (1<<1) // when set, index field for dockee is valid
106 #define AIGF_GOAL_ON_HOLD (1<<2) // when set, this goal cannot currently be satisfied, although it could be in the future
107 #define AIGF_SUBSYS_NEEDS_FIXUP (1<<3) // when set, the subsystem index (for a destroy subsystem goal) is invalid and must be gotten from the subsys name stored in docker.name field!!
108 #define AIGF_GOAL_OVERRIDE (1<<4) // paired with AIG_TYPE_DYNAMIC to mean this goal overrides any other goal
109 #define AIGF_PURGE (1<<5) // purge this goal next time we process
110 #define AIGF_GOALS_PURGED (1<<6) // this goal has already caused other goals to get purged
111 #define AIGF_DEPART_SOUND_PLAYED (1<<7) // Goober5000 - replacement for AL's hack ;)
112 #define AIGF_TARGET_OWN_TEAM (1<<8) // Goober5000 - removes standard precautions against AI ships taking traitorous actions
114 #define AIGF_DOCK_INDEXES_VALID (AIGF_DOCKER_INDEX_VALID|AIGF_DOCKEE_INDEX_VALID)
117 #define AITTV_FAST (1<<0) // Turn fast, not slowed down based on skill level.
118 #define AITTV_VIA_SEXP (1<<1) // Goober5000 - via sexp
119 #define AITTV_IGNORE_BANK (1<<2) // Goober5000 - ignore bank when turning
121 #define KAMIKAZE_HULL_ON_DEATH -1000.0f // Hull strength ship gets set to if it crash-dies.
124 #define AIORF_FULL (1<<0) // Full sexp control
125 #define AIORF_ROLL (1<<1) // Sexp forced roll maneuver
126 #define AIORF_PITCH (1<<2) // Sexp forced pitch change
127 #define AIORF_HEADING (1<<3) // Sexp forced heading change
128 #define AIORF_FULL_LAT (1<<4) // full control over up/side/forward movement
129 #define AIORF_UP (1<<5) // vertical movement
130 #define AIORF_SIDEWAYS (1<<6) // horizontal movement
131 #define AIORF_FORWARD (1<<7) // forward movement
164 #define MAX_GOAL_TARGET_NAMES 100
168 #define AIM_GET_BEHIND 2
169 #define AIM_STAY_NEAR 3 // Stay near another ship.
170 #define AIM_STILL 4 // Sit still. Don't move. Hold your breath. Don't blink.
171 #define AIM_GUARD 5 // Guard an object
172 #define AIM_AVOID 6 // Avoid an object
173 #define AIM_WAYPOINTS 7 // Fly waypoints
174 #define AIM_DOCK 8 // Dock with ship.
175 #define AIM_NONE 9 // Uh, do nothing.
176 #define AIM_BIGSHIP 10 // Like a capital ship, doesn't focus on one ship.
177 #define AIM_PATH 11 // Follow path on ship
178 #define AIM_BE_REARMED 12 // Allow self to be rearmed
179 #define AIM_SAFETY 13 // Seek safety at periphery of battle
180 #define AIM_EVADE_WEAPON 14 // Evade a weapon.
181 #define AIM_STRAFE 15 // Attack a big ship by strafing it
182 #define AIM_PLAY_DEAD 16 // Play dead. Get it? Don't move, fire, etc.
183 #define AIM_BAY_EMERGE 17 // Emerging from a fighter bay, following path to do so
184 #define AIM_BAY_DEPART 18 // Departing to a fighter bay, following path to do so
185 #define AIM_SENTRYGUN 19 // AI mode for sentry guns only (floating turrets)
186 #define AIM_WARP_OUT 20 // Commence warp out sequence. Point in legal direction. Then call John's code.
187 #define AIM_FLY_TO_SHIP 21 // [Kazan] Fly to a ship, doesn't matter if it's hostile or friendly -- for Autopilot usage
189 #define MAX_AI_BEHAVIORS 22 // Number of AIM_xxxx types
191 #define MAX_WAYPOINTS_PER_LIST 20
192 #define MAX_ENEMY_DISTANCE 2500.0f // Maximum distance from which a ship will pursue an enemy.
194 #define AI_GOAL_NONE -1
196 #define AI_ACTIVE_GOAL_DYNAMIC 999
246 #define SM_CONTINUOUS_TURN 1 // takes parm: vector_id {0..3 = right, -right, up, -up}
248 #define SM_EVADE_SQUIGGLE 3
249 #define SM_EVADE_BRAKE 4
251 #define SM_SUPER_ATTACK 6
253 #define SM_GET_BEHIND 8
254 #define SM_GET_AWAY 9
255 #define SM_EVADE_WEAPON 10 // Evade incoming weapon
256 #define SM_FLY_AWAY 11 // Fly away from target_objnum
257 #define SM_ATTACK_FOREVER 12 // Engine subsystem destroyed, so attack, never evading, avoiding, etc.
258 #define SM_STEALTH_FIND 13 // Stealth ship is "targeted", but not visible, so try to find based on predicted pos
259 #define SM_STEALTH_SWEEP 14 // General sweep, looking for stealth after not visible for some time.
260 #define SM_BIG_APPROACH 15 // Big ship approaches another
261 #define SM_BIG_CIRCLE 16 // Big ship flies circle around other big ship to get good angle to go parallel
262 #define SM_BIG_PARALLEL 17 // Big ship flies parallel to another
265 #define AIS_CHASE_GLIDEATTACK 18 // Ship uses glide to move in a constant direction while pointing and shooting at target
266 #define AIS_CHASE_CIRCLESTRAFE 19 // Attempt a circle-strafe on the target
269 #define AIS_DOCK_0 20
270 #define AIS_DOCK_1 21
271 #define AIS_DOCK_2 22
272 #define AIS_DOCK_3 23
273 #define AIS_DOCK_4 24 // Only for rearm/repair.
274 #define AIS_DOCK_4A 25 // Only for not rearm/repair. MK, 7/15/97
275 #define AIS_UNDOCK_0 30
276 #define AIS_UNDOCK_1 31
277 #define AIS_UNDOCK_2 32
278 #define AIS_UNDOCK_3 33
279 #define AIS_UNDOCK_4 34
282 #define AIS_GUARD_PATROL 101
283 #define AIS_GUARD_ATTACK 102
284 #define AIS_GUARD_2 103
285 #define AIS_GUARD_STATIC 104 // maintain current relative position to guard object, if possible
288 #define AIS_STRAFE_ATTACK 201 // fly towards target and attack
289 #define AIS_STRAFE_AVOID 202 // fly evasive vector to avoid incoming fire
290 #define AIS_STRAFE_RETREAT1 203 // fly away from attack point
291 #define AIS_STRAFE_RETREAT2 204
292 #define AIS_STRAFE_POSITION 205 // re-position to resume strafing attack
293 #define AIS_STRAFE_GLIDE_ATTACK 206 // SUSHI: Glide strafe atack
295 #define WPF_REPEAT (1 << 0)
296 #define WPF_BACKTRACK (1 << 1)
299 #define PD_BACKWARD -1
301 #define MIN_TRACKABLE_ASPECT_DOT 0.992f // dot of fvec and vec_to_enemy to progress towards aspect lock
304 #define AIS_WARP_1 300 // Make sure there is no obstruction to warping out.
305 #define AIS_WARP_2 301
306 #define AIS_WARP_3 302
307 #define AIS_WARP_4 303
308 #define AIS_WARP_5 304
309 #define AIS_DEPART_TO_BAY 305
322 #define MAX_PATH_POINTS 1000
327 #define MAX_IGNORE_NEW_OBJECTS 7
564 #define MAX_AI_INFO MAX_SHIPS
569 #define SUBSYS_PATH_DIST 500.0f
572 #define MAX_BURST_DAMAGE 20 // max damage that can be done in BURST_DURATION
573 #define BURST_DURATION 500 // decay time over which Player->damage_this_burst falls from MAX_BURST_DAMAGE to 0
614 void ai_process(
object *
obj,
int ai_index,
float frametime );
624 extern void ai_ignore_object(
object *ignorer,
object *ignored,
int ignore_new);
630 extern void ai_ship_hit(
object *objp_ship,
object *hit_objp,
vec3d *hitpos,
int shield_quadrant,
vec3d *hit_normal);
661 extern void ai_rearm_repair(
object *
objp,
int docker_index,
object *goal_objp,
int dockee_index );
663 extern void create_model_path(
object *pl_objp,
object *mobjp,
int path_num,
int subsys_path=0);
680 extern void ai_find_path(
object *pl_objp,
int objnum,
int path_num,
int exit_flag,
int subsys_path=0);
683 extern int might_collide_with_ship(
object *obj1,
object *obj2,
float dot_to_enemy,
float dist_to_enemy,
float duration);
709 extern int find_danger_weapon(
object *sobjp,
float dtime,
float *atime,
float dot_threshhold);
void ai_fly_in_formation(int wing_num)
float ai_stalemate_time_thresh[NUM_SKILL_LEVELS]
int ai_profile_flags2_set
float ai_glide_strafe_percent
void ai_update_danger_weapon(int objnum, int weapon_objnum)
void ai_set_evade_object(object *objp, object *other_objp)
float ai_accuracy[NUM_SKILL_LEVELS]
fix avoid_check_timestamp
float ai_ship_fire_secondary_delay_scale_friendly
int ai_abort_rearm_request(object *requester_objp)
int is_instructor(object *objp)
#define MAX_IGNORE_NEW_OBJECTS
control_info ai_override_ci
int ai_maybe_fire_afterburner(object *objp, ai_info *aip)
float previous_dot_to_enemy
void ai_do_stay_near(object *objp, object *other_obj, float dist)
void ai_attack_object(object *attacker, object *attacked, ship_subsys *ssp)
int secondary_select_timestamp
float ai_glide_strafe_percent[NUM_SKILL_LEVELS]
float nearest_locked_distance
int ai_find_goal_index(ai_goal *aigp, int mode, int submode=-1, int priority=-1)
int ai_fire_primary_weapon(object *objp)
void ai_form_on_wing(object *objp, object *goal_objp)
int path_subsystem_next_check
int ai_get_slot(int shipnum)
Returns index of free AI slot.
float ai_get_away_chance[NUM_SKILL_LEVELS]
int get_wingnum(int objnum)
int ai_chance_to_use_missiles_on_plr[NUM_SKILL_LEVELS]
void ai_ignore_object(object *ignorer, object *ignored, int ignore_new)
float ai_glide_attack_percent[NUM_SKILL_LEVELS]
void set_predicted_enemy_pos_turret(vec3d *predicted_enemy_pos, vec3d *gun_pos, object *pobjp, vec3d *enemy_pos, vec3d *enemy_vel, float weapon_speed, float time_enemy_in_range)
fix afterburner_stop_time
float artillery_lock_time
void ai_announce_ship_dying(object *dying_objp)
int next_rearm_request_timestamp
int might_collide_with_ship(object *obj1, object *obj2, float dot_to_enemy, float dist_to_enemy, float duration)
void ai_do_repair_frame(object *objp, ai_info *aip, float frametime)
float ai_link_energy_levels_always
int big_recover_timestamp
void init_ai_object(int objnum)
void ai_stay_still(object *still_objp, vec3d *view_pos)
float dock_orient_and_approach(object *docker_objp, int docker_index, object *dockee_objp, int dockee_index, int dock_mode, rotating_dockpoint_info *rdinfo=NULL)
void accelerate_ship(ai_info *aip, float accel)
ship_subsys * targeted_subsys
float ai_turret_max_aim_update_delay
float ai_stalemate_time_thresh
void ai_good_secondary_time(int team, int weapon_index, int num_weapons, char *shipname)
char dockee_point[NAME_LENGTH]
float ai_endangered_by_weapon(ai_info *aip)
void ai_object_init(object *obj, int ai_index)
float current_target_distance
float ai_max_aim_update_delay
void ai_rearm_repair(object *objp, int docker_index, object *goal_objp, int dockee_index)
float ai_glide_attack_percent
vec3d last_predicted_enemy_pos
pnode Path_points[MAX_PATH_POINTS]
float ai_random_sidethrust_percent
float ai_cmeasure_fire_chance[NUM_SKILL_LEVELS]
void update_ai_info_for_hit(int hitter_obj, int hit_obj)
void ai_do_objects_docked_stuff(object *docker, int docker_point, object *dockee, int dockee_point, bool update_clients=true)
fix ai_predict_position_delay
void ai_start_waypoints(object *objp, waypoint_list *wp_list, int wp_flags)
float ai_random_sidethrust_percent[NUM_SKILL_LEVELS]
int abort_rearm_timestamp
fix next_predict_pos_time
int current_target_speed_trend
int stealth_last_cheat_visible_stamp
float ai_turret_max_aim_update_delay[NUM_SKILL_LEVELS]
int ok_to_target_timestamp
float ai_circle_strafe_percent
float stealth_sweep_box_size
void turn_towards_point(object *objp, vec3d *point, vec3d *slide_vec, float bank_override)
float ai_get_weapon_speed(ship_weapon *swp)
void ai_attack_wing(object *attacker, int wingnum)
int find_enemy(int objnum, float range, int max_attackers)
int self_destruct_timestamp
void ai_dock_with_object(object *docker, int docker_index, object *dockee, int dockee_index, int dock_type)
void update_aspect_lock_information(ai_info *aip, vec3d *vec_to_enemy, float dist_to_enemy, float enemy_radius)
ai_goal goals[MAX_AI_GOALS]
float time_enemy_in_range
int stealth_last_visible_stamp
float ai_get_weapon_dist(ship_weapon *swp)
ship_subsys * last_subsys_target
void ai_free_slot(int ai_index)
Frees a currently used AI slot.
void ai_find_path(object *pl_objp, int objnum, int path_num, int exit_flag, int subsys_path=0)
float ai_link_ammo_levels_maybe
vec3d big_collision_normal
float ai_ship_fire_secondary_delay_scale_hostile
float ai_ship_fire_delay_scale_friendly
ai_flag_name Ai_flag_names[]
fix path_next_create_time
int danger_weapon_signature
float ai_ship_fire_delay_scale_friendly[NUM_SKILL_LEVELS]
void ai_do_default_behavior(object *obj)
void ai_do_objects_repairing_stuff(object *repaired_obj, object *repair_obj, int how)
void create_model_path(object *pl_objp, object *mobjp, int path_num, int subsys_path=0)
float ai_link_energy_levels_always[NUM_SKILL_LEVELS]
void ai_ship_destroy(int shipnum, int method)
float ai_stalemate_dist_thresh
int shield_manage_timestamp
float ai_ship_fire_delay_scale_hostile[NUM_SKILL_LEVELS]
float ai_link_ammo_levels_always
void ai_set_rearm_status(int team, int new_status)
float ai_evasion[NUM_SKILL_LEVELS]
float ai_turn_time_scale[NUM_SKILL_LEVELS]
vec3d big_attack_surface_normal
int ai_acquire_depart_path(object *pl_objp, int parent_objnum, int path_mask)
float ai_max_aim_update_delay[NUM_SKILL_LEVELS]
float ai_circle_strafe_percent[NUM_SKILL_LEVELS]
int targeted_subsys_parent
void do_random_sidethrust(ai_info *aip, ship_info *sip)
int ai_chance_to_use_missiles_on_plr
float ai_primary_ammo_burst_mult[NUM_SKILL_LEVELS]
int ignore_new_objnums[MAX_IGNORE_NEW_OBJECTS]
float ai_link_ammo_levels_maybe[NUM_SKILL_LEVELS]
void ai_set_mode_warp_out(object *objp, ai_info *aip)
void ai_update_aim(ai_info *aip)
int primary_select_timestamp
void ai_start_fly_to_ship(object *objp, int shipnum)
int ai_override_timestamp
int rearm_first_ballistic_primary
float ai_patience[NUM_SKILL_LEVELS]
GLuint const GLchar * name
float ai_cmeasure_fire_chance
float ai_link_ammo_levels_always[NUM_SKILL_LEVELS]
void process_subobjects(int objnum)
int ignore_expire_timestamp
float ai_in_range_time[NUM_SKILL_LEVELS]
int pick_big_attack_point_timestamp
int scan_for_enemy_timestamp
float best_dot_from_enemy
int ai_issue_rearm_request(object *requester_objp)
float ai_shockwave_evade_chance[NUM_SKILL_LEVELS]
int find_danger_weapon(object *sobjp, float dtime, float *atime, float dot_threshhold)
int set_target_objnum(ai_info *aip, int objnum)
float ai_ship_fire_delay_scale_hostile
float ai_secondary_range_mult[NUM_SKILL_LEVELS]
struct ai_flag_name ai_flag_name
char Goal_target_names[MAX_GOAL_TARGET_NAMES][NAME_LENGTH]
float ai_courage[NUM_SKILL_LEVELS]
void ai_ship_hit(object *objp_ship, object *hit_objp, vec3d *hitpos, int shield_quadrant, vec3d *hit_normal)
void set_wingnum(int objnum, int wingnum)
void ai_add_rearm_goal(object *requester_objp, object *support_objp)
int Total_goal_target_names
void ai_deathroll_start(object *ship_obj)
int choose_enemy_timestamp
void ai_turn_towards_vector(vec3d *dest, object *objp, float frametime, float turn_time, vec3d *slide_vec, vec3d *rel_pos, float bank_override, int flags, vec3d *rvec=NULL, int sexp_flags=0)
void init_ai_system(void)
void ai_do_objects_undocked_stuff(object *docker, object *dockee)
const char * Skill_level_names(int skill_level, int translate=1)
int nearest_locked_object
float ai_ship_fire_secondary_delay_scale_hostile[NUM_SKILL_LEVELS]
GLsizei GLsizei GLuint * obj
float ai_shield_manage_delay
void ai_process(object *obj, int ai_index, float frametime)
int ignore_new_signatures[MAX_IGNORE_NEW_OBJECTS]
float ai_shield_manage_delay[NUM_SKILL_LEVELS]
char flag_name[TOKEN_LENGTH]
int support_ship_signature
void ai_set_guard_wing(object *objp, int wingnum)
float ai_ship_fire_secondary_delay_scale_friendly[NUM_SKILL_LEVELS]
float ai_stalemate_dist_thresh[NUM_SKILL_LEVELS]
int current_target_dist_trend
float ai_shockwave_evade_chance
int ai_aburn_use_factor[NUM_SKILL_LEVELS]
float ai_secondary_range_mult
int get_nearest_objnum(int objnum, int enemy_team_mask, int enemy_wing, float range, int max_attackers)
void set_predicted_enemy_pos(vec3d *predicted_enemy_pos, object *pobjp, vec3d *enemy_pos, vec3d *enemy_vel, ai_info *aip)
void turn_away_from_point(object *objp, vec3d *point, float bank_override)
void ai_evade_object(object *evader, object *evaded)
int ai_set_attack_subsystem(object *objp, int subnum)
void ai_warp_out(object *objp, vec3d *vp)
fix ai_predict_position_delay[NUM_SKILL_LEVELS]
char * ai_get_goal_target_name(const char *name, int *index)
void ai_do_safety(object *objp)
void init_aip_from_class_and_profile(ai_info *aip, ai_class *aicp, ai_profile_t *profile)
void ai_set_positions(object *pl_objp, object *en_objp, ai_info *aip, vec3d *player_pos, vec3d *enemy_pos)
float ai_link_energy_levels_maybe[NUM_SKILL_LEVELS]
void get_absolute_wing_pos(vec3d *result_pos, object *leader_objp, int wing_index, int formation_object_flag)
void ai_set_guard_object(object *objp, object *other_objp)
float ai_primary_ammo_burst_mult
ship_subsys * set_targeted_subsys(ai_info *aip, ship_subsys *new_subsys, int parent_objnum)
char docker_point[NAME_LENGTH]
int ai_fire_secondary_weapon(object *objp, int priority1=-1, int priority2=-1)
float ai_link_energy_levels_maybe
int ai_acquire_emerge_path(object *pl_objp, int parent_objnum, int path_mask, vec3d *pos, vec3d *fvec)
matrix path_create_orient
int current_target_is_locked
void get_absolute_wing_pos_autopilot(vec3d *result_pos, object *leader_objp, int wing_index, int formation_object_flag)
void ai_disband_formation(int wing_num)
int previous_target_objnum
#define MAX_GOAL_TARGET_NAMES
void ai_ignore_wing(object *ignorer, int wingnum)