35 #define PLAYER_PRIORITY_MIN                             90 
   36 #define PLAYER_PRIORITY_SHIP                            100 
   37 #define PLAYER_PRIORITY_WING                            95 
   38 #define PLAYER_PRIORITY_SUPPORT_LOW             10 
   40 #define MAX_GOAL_PRIORITY                               200 
   46 #define PURGE_GOALS_ALL_SHIPS           (AI_GOAL_IGNORE | AI_GOAL_DISABLE_SHIP | AI_GOAL_DISARM_SHIP) 
   47 #define PURGE_GOALS_ONE_SHIP            (AI_GOAL_IGNORE_NEW) 
   53 #define AI_GOAL_ACHIEVABLE                      1 
   54 #define AI_GOAL_NOT_ACHIEVABLE          2 
   55 #define AI_GOAL_NOT_KNOWN                       3 
   56 #define AI_GOAL_SATISFIED                       4 
  100                 return XSTR( 
"attack ", 474);
 
  102                 return XSTR( 
"dock ", 475);
 
  104                 return XSTR( 
"waypoints", 476);
 
  106                 return XSTR( 
"waypoints", 476);
 
  108                 return XSTR( 
"destroy ", 477);
 
  110                 return XSTR( 
"form on ", 478);
 
  112                 return XSTR( 
"undock ", 479);
 
  114                 return XSTR( 
"attack ", 474);
 
  116                 return XSTR( 
"guard ", 480);
 
  118                 return XSTR( 
"disable ", 481);
 
  120                 return XSTR( 
"disarm ", 482);
 
  122                 return XSTR( 
"guard ", 480);
 
  124                 return XSTR( 
"evade ", 483);
 
  126                 return XSTR( 
"rearm ", 484);
 
  222                 if(ai_goal_type & 
Ship_types[ship_type].ai_valid_goals) {
 
  302         int mode, submode, priority, 
i;
 
  307         wingp = &
Wings[wingnum];
 
  326                         aigp = &(aip->
goals[j]);
 
  382         int mode, ship_index, wingnum;
 
  391         if ( ship_index == -1 ) {
 
  397         purge_goal = goal_list;
 
  399                 int purge_ai_mode, purge_wing;
 
  401                 purge_ai_mode = purge_goal->
ai_mode;
 
  417                 if ( purge_wing == -1 ) {
 
  420                 } 
else if ( purge_wing != wingnum )
 
  439                                         if (ai_wingnum >= 0) {
 
  497         while (loop_count < 100)
 
  502                 if (dock_index == -1)
 
  528         if (loop_count >= 100)
 
  541         int shipnum, docker_index, dockee_index;
 
  545         Assertion ( shipnum != -1, 
"Couldn't find ai goal's target_name (%s); get a coder!\n", aigp->
target_name );
 
  559         int common_docks = 0;
 
  561         if(aip_type_dock > -1) {
 
  562                 aip_type_dock = 
Ship_types[aip_type_dock].ai_active_dock;
 
  567         if(aigp_type_dock > -1) {
 
  568                 aigp_type_dock = 
Ship_types[aigp_type_dock].ai_passive_dock;
 
  573         common_docks = aip_type_dock & aigp_type_dock;
 
  597         if ( docker_index == -1 )
 
  599         if ( dockee_index == -1 )
 
  637         if ( target_name != NULL )
 
  667         int gindex, oldest_index;
 
  677                 if (gindex == active_goal)
 
  681                 if (oldest_index < 0)
 
  682                         oldest_index = gindex;
 
  683                 else if (goals[gindex].time < goals[oldest_index].time)
 
  684                         oldest_index = gindex;
 
  722         if ( target_name != NULL )
 
  736         aigp = &aip->
goals[empty_index];
 
  765         aigp = &aip->
goals[empty_index];
 
 1022                 if ( aigp[ 
i ].ai_mode == mode &&
 
 1023                          ( submode == -1 || aigp[ 
i ].ai_submode == submode ) &&
 
 1024                          ( priority == -1 || aigp[ 
i ].priority == priority ) )
 
 1046         int goalsubmode = -1;
 
 1051         char* op_text = NULL;
 
 1055         op_text = 
CTEXT( node );
 
 1063                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1067                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1075                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1079                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1083                 priority = ( 
CDR(node) >= 0 ) ? atoi( 
CTEXT( 
CDR( node ) ) ) : -1;
 
 1087                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1092                 priority = ( 
CDR(node) >= 0 ) ? atoi( 
CTEXT( 
CDR( node ) ) ) : -1;
 
 1096                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1105                 priority = ( 
CDR(node) >= 0 ) ? atoi( 
CTEXT( 
CDR( node ) ) ) : -1;
 
 1109                 priority = ( 
CDR(node) >= 0 ) ? atoi( 
CTEXT( 
CDR( node ) ) ) : -1;
 
 1112                 priority = ( 
CDR(node) >= 0 ) ? atoi( 
CTEXT( 
CDR( node ) ) ) : -1;
 
 1116                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1123                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1130                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1134                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1138                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1142                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1146                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1150                 priority = ( 
CDR( 
CDR(node) ) >= 0 ) ? atoi( 
CTEXT( 
CDR( 
CDR( node ) ) ) ) : -1;
 
 1161         if ( goalindex == -1 )
 
 1169         aigp[goalindex].
flags = 0;                              
 
 1188                         if ( 
Ai_info[
Ships[num].ai_index].active_goal == goalindex )
 
 1261         aigp = &(aip->
goals[gindex]);
 
 1269         switch ( goal_type ) {
 
 1346                         aip->
goals[j] = *aigp;
 
 1351         if (j >= MAX_AI_GOALS) {
 
 1357 #define SHIP_STATUS_GONE                                1 
 1358 #define SHIP_STATUS_NOT_ARRIVED         2 
 1359 #define SHIP_STATUS_ARRIVED                     3 
 1360 #define SHIP_STATUS_UNKNOWN                     4 
 1371         int index = -1, sindex = -1;
 
 1423                 if ( aigp->
wp_list == NULL ) {
 
 1426                         if ( aigp->
wp_list == NULL ) {
 
 1473                                 nprintf((
"AI", 
"Couldn't find subsystem %d for ship %s\n", aigp->
ai_submode, Ships[sindex].ship_name));
 
 1649                         if ( sindex != -1 ) {
 
 1650                                 modelnum = 
Ship_info[Ships[sindex].ship_info_index].model_num;
 
 1670                 object *goal_objp = &
Objects[Ships[sindex].objnum];
 
 1680                         if (obstacle_objp == NULL)
 
 1684                         else if (obstacle_objp != objp)
 
 1696                         if (obstacle_objp == NULL)
 
 1700                         else if (obstacle_objp != goal_objp)
 
 1731                         if ( sindex != -1 ) {
 
 1745                 ignored = &
Objects[Ships[sindex].objnum];
 
 1982         int             wingnum, shipnum;
 
 1983         int             original_signature;
 
 2032         current_goal = &aip->
goals[0];
 
 2052         switch ( current_goal->
ai_mode ) {
 
 2080                 if (objp != other_obj) {
 
 2084                         mprintf((
"Warning: Ship %s told to guard itself.  Goal ignored.\n", Ships[objp->
instance].ship_name));
 
 2115                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2142                                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2164                 if ( other_obj == NULL ) {
 
 2195                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2229                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2258                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2267                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2269                 float   dist = 300.0f;          
 
 2284                 other_obj = &
Objects[Ships[shipnum].objnum];
 
 2297         int i, 
mode, flag, dummy;
 
 2353                         if (!
stricmp(goals[i].target_name, old_name)) {
 
 2354                                 if (*new_name == 
'<')  
 
 2419                         if (!
stricmp(goals[i].target_name, name))
 
char Parse_names[MAX_SHIPS+MAX_WINGS][NAME_LENGTH]
 
model_subsystem * system_info
 
weapon Weapons[MAX_WEAPONS]
 
#define STI_AI_PROTECTED_ON_CRIPPLE
 
void ai_mission_goal_complete(ai_info *aip)
 
#define AIGF_SUBSYS_NEEDS_FIXUP
 
void ai_do_stay_near(object *objp, object *other_obj, float dist)
 
#define OP_AI_FORM_ON_WING
 
void ai_attack_object(object *attacker, object *attacked, ship_subsys *ssp)
 
#define PLAYER_PRIORITY_SUPPORT_LOW
 
char * Mode_text[MAX_AI_BEHAVIORS]
 
#define LOG_SHIP_SUBSYS_DESTROYED
 
void ai_add_ship_goal_player(int type, int mode, int submode, char *shipname, ai_info *aip)
 
#define SF2_NO_SUBSPACE_DRIVE
 
void ai_form_on_wing(object *objp, object *goal_objp)
 
void ai_add_wing_goal_player(int type, int mode, int submode, char *shipname, int wingnum)
 
#define AI_GOAL_CHASE_WING
 
int mission_do_departure(object *objp, bool goal_is_to_warp)
 
#define AI_GOAL_WAYPOINTS
 
void ai_clear_wing_goals(int wingnum)
 
void ai_ignore_object(object *ignorer, object *ignored, int ignore_new)
 
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
#define AI_GOAL_STAY_NEAR_SHIP
 
#define AIGF_GOAL_ON_HOLD
 
#define AI_GOAL_CHASE_ANY
 
void ai_add_goal_ship_internal(ai_info *aip, int goal_type, char *name, int docker_point, int dockee_point, int immediate)
 
#define LOG_WING_DEPARTED
 
const char * Ai_goal_text(int goal)
 
int ai_goal_num(ai_goal *goals)
 
int ai_goal_find_empty_slot(ai_goal *goals, int active_goal)
 
#define LOG_SHIP_DEPARTED
 
object * dock_find_object_at_dockpoint(object *objp, int dockpoint)
 
int ai_goal_find_dockpoint(int shipnum, int dock_type)
 
#define AIGF_GOALS_PURGED
 
bool dock_check_find_direct_docked_object(object *objp, object *other_objp)
 
ai_info Ai_info[MAX_AI_INFO]
 
int ai_remove_goal_sexp_sub(int sexp, ai_goal *aigp)
 
#define Assertion(expr, msg,...)                                                                        
 
#define END_OF_LIST(head)
 
#define SHIP_STATUS_ARRIVED
 
#define AI_GOAL_DISARM_SHIP
 
void ai_stay_still(object *still_objp, vec3d *view_pos)
 
int ship_find_exited_ship_by_name(char *name)
 
#define DOCK_TYPE_GENERIC
 
int query_referenced_in_ai_goals(ai_goal *goals, int type, const char *name)
 
void ai_clear_ship_goals(ai_info *aip)
 
char dockee_point[NAME_LENGTH]
 
flag_def_list Dock_type_names[]
 
#define OP_AI_DISABLE_SHIP
 
void ai_add_goal_sub_player(int type, int mode, int submode, char *target_name, ai_goal *aigp)
 
void ai_rearm_repair(object *objp, int docker_index, object *goal_objp, int dockee_index)
 
#define AIF_FORMATION_OBJECT
 
void ai_start_waypoints(object *objp, waypoint_list *wp_list, int wp_flags)
 
#define AIG_TYPE_PLAYER_SHIP
 
#define PURGE_GOALS_ONE_SHIP
 
#define AI_ACTIVE_GOAL_DYNAMIC
 
int object_is_docked(object *objp)
 
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
 
void send_ai_info_update_packet(object *objp, char what, object *other_objp)
 
#define DEPART_AT_DOCK_BAY
 
void ai_add_goal_sub_sexp(int sexp, int type, ai_goal *aigp, char *actor_name)
 
int model_find_dock_index(int modelnum, int dock_type, int index_to_start_at=0)
 
p_object * mission_parse_get_arrival_ship(const char *name)
Returns the parse object on the ship arrival list associated with the given name. ...
 
#define AI_GOAL_NOT_KNOWN
 
ship_subsys * ship_get_indexed_subsys(ship *sp, int index, vec3d *attacker_pos)
 
int mission_log_get_time(int type, char *pname, char *sname, fix *time)
 
#define LOG_WING_DESTROYED
 
void ai_remove_wing_goal_sexp(int sexp, int wingnum)
 
#define LOG_SHIP_DISABLED
 
void ai_add_goal_wing_internal(wing *wingp, int goal_type, char *name, int immediate)
 
void ai_attack_wing(object *attacker, int wingnum)
 
ai_goal_list Ai_goal_names[]
 
SCP_vector< int > ai_cripple_ignores
 
GLboolean GLboolean GLboolean GLboolean a
 
void ai_dock_with_object(object *docker, int docker_index, object *dockee, int dockee_index, int dock_type)
 
#define MAX_STARTING_WINGS
 
ai_goal goals[MAX_AI_GOALS]
 
char Ai_dock_names[MAX_AI_DOCK_NAMES][NAME_LENGTH]
 
void ai_do_default_behavior(object *obj)
 
#define AI_GOAL_STAY_STILL
 
#define AIG_TYPE_PLAYER_WING
 
void ai_post_process_mission()
 
object * dock_get_first_docked_object(object *objp)
 
int ai_goal_priority_compare(const void *a, const void *b)
 
int ai_query_goal_valid(int ship, int ai_goal_type)
 
void insertion_sort(void *array_base, size_t array_size, size_t element_size, int(*fncompare)(const void *, const void *))
 
#define SHIP_STATUS_NOT_ARRIVED
 
#define REF_TYPE_WAYPOINT
 
int ai_find_goal_index(ai_goal *aigp, int mode, int submode, int priority)
 
#define AI_GOAL_EVADE_SHIP
 
void prioritize_goals(ai_info *aip)
 
void validate_mission_goals(int objnum, ai_info *aip)
 
#define OP_AI_KEEP_SAFE_DISTANCE
 
#define AIF_AWAITING_REPAIR
 
void ai_update_goal_references(ai_goal *goals, int type, const char *old_name, const char *new_name)
 
#define AI_GOAL_IGNORE_NEW
 
#define AI_GOAL_FLY_TO_SHIP
 
bool ship_useful_for_departure(int shipnum, int path_mask)
 
object Objects[MAX_OBJECTS]
 
#define AI_GOAL_PLAY_DEAD
 
const char * XSTR(const char *str, int index)
 
#define AI_GOAL_WAYPOINTS_ONCE
 
#define LOG_SHIP_DESTROYED
 
char * ai_get_goal_target_name(const char *name, int *index)
 
void ai_start_fly_to_ship(object *objp, int shipnum)
 
#define OP_AI_WAYPOINTS_ONCE
 
void ai_add_ship_goal_sexp(int sexp, int type, ai_info *aip)
 
#define AI_GOAL_SATISFIED
 
#define AI_GOAL_GUARD_WING
 
void ai_goal_fixup_dockpoints(ai_info *aip, ai_goal *aigp)
 
#define MAX_AI_DOCK_NAMES
 
void ai_goal_purge_all_invalid_goals(ai_goal *aigp)
 
int wing_name_lookup(const char *name, int ignore_count)
 
int Starting_wings[MAX_STARTING_WINGS]
 
#define SHIP_STATUS_UNKNOWN
 
#define AIF_BEING_REPAIRED
 
int is_sexp_true(int cur_node, int referenced_node)
 
GLuint const GLchar * name
 
#define AIGF_DOCKER_INDEX_VALID
 
GLboolean GLboolean GLboolean b
 
int model_find_dock_name_index(int modelnum, char *name)
 
void ai_goal_purge_invalid_goals(ai_goal *aigp, ai_goal *goal_list, ai_info *aip, int ai_wingnum)
 
#define OP_AI_DESTROY_SUBSYS
 
waypoint_list * find_matching_waypoint_list(const char *name)
 
char * ai_add_dock_name(const char *str)
 
#define AI_GOAL_KEEP_SAFE_DISTANCE
 
#define AIGF_DOCK_INDEXES_VALID
 
#define AI_GOAL_DISABLE_SHIP
 
void ai_maybe_add_form_goal(wing *wingp)
 
#define PLAYER_PRIORITY_MIN
 
waypoint_list * find_waypoint_list_at_index(int index)
 
void ai_add_ship_goal_scripting(int mode, int submode, int priority, char *shipname, ai_info *aip)
 
#define PLAYER_PRIORITY_WING
 
void ai_mission_wing_goal_complete(int wingnum, ai_goal *remove_goalp)
 
char subobj_name[MAX_NAME_LEN]
 
#define MULTIPLAYER_MASTER
 
void ai_add_wing_goal_sexp(int sexp, int type, int wingnum)
 
SCP_vector< ship_info > Ship_info
 
#define AI_GOAL_CHASE_WEAPON
 
#define OP_AI_STAY_NEAR_SHIP
 
int get_operator_const(const char *token)
 
void ai_add_goal_sub_scripting(int type, int mode, int submode, int priority, char *target_name, ai_goal *aigp)
 
void ai_process_mission_orders(int objnum, ai_info *aip)
 
void ai_set_guard_wing(object *objp, int wingnum)
 
#define AI_GOAL_REARM_REPAIR
 
int ship_index[MAX_SHIPS_PER_WING]
 
#define OP_AI_DISARM_SHIP
 
int ship_get_subsys_index(ship *sp, char *ss_name, int error_bypass)
 
#define AIGF_TARGET_OWN_TEAM
 
int ship_name_lookup(const char *name, int inc_players)
 
#define AIGF_GOAL_OVERRIDE
 
#define AIGF_DOCKEE_INDEX_VALID
 
#define AI_GOAL_DESTROY_SUBSYSTEM
 
#define PURGE_GOALS_ALL_SHIPS
 
void ai_evade_object(object *evader, object *evaded)
 
int ai_mission_goal_achievable(int objnum, ai_goal *aigp)
 
int ai_set_attack_subsystem(object *objp, int subnum)
 
void ai_copy_mission_wing_goal(ai_goal *aigp, ai_info *aip)
 
void ai_do_safety(object *objp)
 
#define AI_GOAL_FORM_ON_WING
 
void ai_set_guard_object(object *objp, object *other_objp)
 
#define LOG_SHIP_DISARMED
 
char ship_name[NAME_LENGTH]
 
char docker_point[NAME_LENGTH]
 
#define PLAYER_PRIORITY_SHIP
 
SCP_vector< ship_type_info > Ship_types
 
#define LOG_SELF_DESTRUCTED
 
#define AI_GOAL_ACHIEVABLE
 
#define MAX_GOAL_PRIORITY
 
ai_goal ai_goals[MAX_AI_GOALS]
 
#define AI_GOAL_NOT_ACHIEVABLE
 
void ai_remove_ship_goal(ai_info *aip, int index)