main/ai.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include "inferno.h"
#include "game.h"
#include "mono.h"
#include "3d.h"
#include "object.h"
#include "render.h"
#include "error.h"
#include "ai.h"
#include "laser.h"
#include "fvi.h"
#include "polyobj.h"
#include "bm.h"
#include "weapon.h"
#include "physics.h"
#include "collide.h"
#include "fuelcen.h"
#include "player.h"
#include "wall.h"
#include "vclip.h"
#include "digi.h"
#include "fireball.h"
#include "morph.h"
#include "effects.h"
#include "timer.h"
#include "sounds.h"
#include "cntrlcen.h"
#include "multibot.h"
#include "multi.h"
#include "network.h"
#include "gameseq.h"
#include "key.h"
#include "powerup.h"
#include "gauges.h"
#include "text.h"
#include "string.h"
#include "d_gamecv.h"
#include "u_mem.h"

Classes

struct  ai_cloak_info
struct  awareness_event

Defines

#define JOHN_CHEATS_SIZE_1   6
#define JOHN_CHEATS_SIZE_2   6
#define JOHN_CHEATS_SIZE_3   6
#define PARALLAX   0
#define MIN_D   0x100
#define ANIM_RATE   (F1_0/16)
#define DELTA_ANG_SCALE   16
#define OVERALL_AGITATION_MAX   100
#define MAX_AI_CLOAK_INFO   8
#define BOSS_CLOAK_DURATION   (F1_0*7)
#define BOSS_DEATH_DURATION   (F1_0*6)
#define BOSS_DEATH_SOUND_DURATION   0x2ae14
#define MAX_GATE_INDEX   ( sizeof(Super_boss_gate_list) / sizeof(Super_boss_gate_list[0]) )
#define MAX_AWARENESS_EVENTS   64
#define AIS_MAX   8
#define AIE_MAX   4
#define AI_TURN_SCALE   1
#define BABY_SPIDER_ID   14
#define CHASE_TIME_LENGTH   (F1_0*8)
#define DEFAULT_ROBOT_SOUND_VOLUME   F1_0
#define QUEUE_SIZE   256
#define ai_multiplayer_awareness(a, b)   1
#define BOSS_TO_PLAYER_GATE_DISTANCE   (F1_0*150)

Functions

void init_boss_segments (short segptr[], int *num_segs, int size_check)
void ai_multi_send_robot_position (int objnum, int force)
void init_ai_system (void)
void john_cheat_func_1 (int key)
int ai_behavior_to_mode (int behavior)
void ai_init_boss_for_ship (void)
void init_ai_object (int objnum, int behavior, int hide_segment)
void john_cheat_func_2 (int key)
void init_ai_objects (void)
void do_lunacy_on (void)
void do_lunacy_off (void)
void john_cheat_func_3 (int key)
void set_rotvel_and_saturate (fix *dest, fix delta)
void physics_turn_towards_vector (vms_vector *goal_vector, object *obj, fix rate)
void ai_turn_towards_vector (vms_vector *goal_vector, object *objp, fix rate)
void ai_turn_randomly (vms_vector *vec_to_player, object *obj, fix rate, int previous_visibility)
void john_cheat_func_4 (int key)
int player_is_visible_from_object (object *objp, vms_vector *pos, fix field_of_view, vms_vector *vec_to_player)
int do_silly_animation (object *objp)
void ai_frame_animation (object *objp)
void set_next_fire_time (ai_local *ailp, robot_info *robptr)
void do_ai_robot_hit_attack (object *robot, object *player, vms_vector *collision_point)
void ai_fire_laser_at_player (object *obj, vms_vector *fire_point)
void move_towards_vector (object *objp, vms_vector *vec_goal)
void move_towards_player (object *objp, vms_vector *vec_to_player)
void move_around_player (object *objp, vms_vector *vec_to_player, int fast_flag)
void move_away_from_player (object *objp, vms_vector *vec_to_player, int attack_type)
void ai_move_relative_to_player (object *objp, ai_local *ailp, fix dist_to_player, vms_vector *vec_to_player, fix circle_distance, int evade_only)
void make_random_vector (vms_vector *vec)
void mprintf_animation_info (object *objp)
void do_firing_stuff (object *obj, int player_visibility, vms_vector *vec_to_player)
void do_ai_robot_hit (object *objp, int type)
void compute_vis_and_vec (object *objp, vms_vector *pos, ai_local *ailp, vms_vector *vec_to_player, int *player_visibility, robot_info *robptr, int *flag)
void move_object_to_legal_spot (object *objp)
void move_towards_segment_center (object *objp)
int ai_door_is_openable (object *objp, segment *segp, int sidenum)
int openable_doors_in_segment (object *objp)
int special_object_in_seg (int segnum)
int get_random_child (int segnum)
int check_object_object_intersection (vms_vector *pos, fix size, segment *segp)
int create_gated_robot (int segnum, int object_id)
int gate_in_robot (int type, int segnum)
int boss_fits_in_seg (object *boss_objp, int segnum)
void teleport_boss (object *objp)
void start_boss_death_sequence (object *objp)
void do_boss_dying_frame (object *objp)
void do_boss_stuff (object *objp)
void do_super_boss_stuff (object *objp, fix dist_to_player, int player_visibility)
int maybe_ai_do_actual_firing_stuff (object *obj, ai_static *aip)
void ai_do_actual_firing_stuff (object *obj, ai_static *aip, ai_local *ailp, robot_info *robptr, vms_vector *vec_to_player, fix dist_to_player, vms_vector *gun_point, int player_visibility, int object_animates)
void do_ai_frame (object *obj)
void ai_do_cloak_stuff (void)
int add_awareness_event (object *objp, int type)
void create_awareness_event (object *objp, int type)
void pae_aux (int segnum, int type, int level)
void process_awareness_events (void)
void set_player_awareness_all (void)
void dump_ai_objects_all ()
void force_dump_ai_objects_all (char *msg)
void turn_off_ai_dump (void)
void do_ai_frame_all (void)
void init_robots_for_level (void)
int ai_save_state (FILE *fp)
int ai_restore_state (FILE *fp)

Variables

ubyte john_cheats_1 [JOHN_CHEATS_SIZE_1]
int Flinch_scale = 4
int john_cheats_index_1
int Attack_scale = 24
byte Mike_to_matt_xlate [] = {AS_REST, AS_REST, AS_ALERT, AS_ALERT, AS_FLINCH, AS_FIRE, AS_RECOIL, AS_REST}
int john_cheats_index_2
int Num_boss_teleport_segs
short Boss_teleport_segs [MAX_BOSS_TELEPORT_SEGS]
int Num_boss_gate_segs
short Boss_gate_segs [MAX_BOSS_TELEPORT_SEGS]
int john_cheats_index_3
int Ai_initialized = 0
int Overall_agitation
ai_local Ai_local_info [MAX_OBJECTS]
point_seg Point_segs [MAX_POINT_SEGS]
point_segPoint_segs_free_ptr = Point_segs
ai_cloak_info Ai_cloak_info [MAX_AI_CLOAK_INFO]
fix Boss_cloak_start_time = 0
fix Boss_cloak_end_time = 0
fix Last_teleport_time = 0
fix Boss_teleport_interval = F1_0*8
fix Boss_cloak_interval = F1_0*10
fix Boss_cloak_duration = BOSS_CLOAK_DURATION
fix Last_gate_time = 0
fix Gate_interval = F1_0*6
fix Boss_dying_start_time
int Boss_dying
int Boss_dying_sound_playing
int Boss_hit_this_frame
int Boss_been_hit = 0
int john_cheats_index_4
int ai_evaded = 0
byte Super_boss_gate_list [] = {0, 1, 8, 9, 10, 11, 12, 15, 16, 18, 19, 20, 22, 0, 8, 11, 19, 20, 8, 20, 8}
int Ai_info_enabled = 0
int Robot_firing_enabled = 1
int Ugly_robot_cheat
int Ugly_robot_texture
int Laser_rapid_fire
byte Enable_john_cheat_1
byte Enable_john_cheat_2
byte Enable_john_cheat_3
byte Enable_john_cheat_4
ubyte john_cheats_3 [2 *JOHN_CHEATS_SIZE_3+1]
vms_vector Hit_pos
int Hit_type
int Hit_seg
fvi_info Hit_data
int Num_awareness_events = 0
awareness_event Awareness_events [MAX_AWARENESS_EVENTS]
vms_vector Believed_player_pos
char mode_text [8][9]
char behavior_text [6][9]
char state_text [8][5]
int Ai_animation_test = 0
byte Ai_transition_table [AI_MAX_EVENT][AI_MAX_STATE][AI_MAX_STATE]
ubyte john_cheats_2 [2 *JOHN_CHEATS_SIZE_2]
int Lunacy = 0
int Diff_save = 1
fix Firing_wait_copy [MAX_ROBOT_TYPES]
byte Rapidfire_count_copy [MAX_ROBOT_TYPES]
int Player_exploded
int Break_on_object = -1
int Do_ai_flag = 1
int Cvv_test = 0
int Cvv_last_time [MAX_OBJECTS]
int Gun_point_hack = 0
int Robot_sound_volume = DEFAULT_ROBOT_SOUND_VOLUME
fix Prev_boss_shields = -1
byte New_awareness [MAX_SEGMENTS]
int Ai_dump_enable = 0
FILE * Ai_dump_file = NULL
char Ai_error_message [128] = ""

Define Documentation

#define ai_multiplayer_awareness a,
 )     1
 

#define AI_TURN_SCALE   1
 

#define AIE_MAX   4
 

#define AIS_MAX   8
 

#define ANIM_RATE   (F1_0/16)
 

#define BABY_SPIDER_ID   14
 

#define BOSS_CLOAK_DURATION   (F1_0*7)
 

#define BOSS_DEATH_DURATION   (F1_0*6)
 

#define BOSS_DEATH_SOUND_DURATION   0x2ae14
 

#define BOSS_TO_PLAYER_GATE_DISTANCE   (F1_0*150)
 

#define CHASE_TIME_LENGTH   (F1_0*8)
 

#define DEFAULT_ROBOT_SOUND_VOLUME   F1_0
 

#define DELTA_ANG_SCALE   16
 

#define JOHN_CHEATS_SIZE_1   6
 

#define JOHN_CHEATS_SIZE_2   6
 

#define JOHN_CHEATS_SIZE_3   6
 

#define MAX_AI_CLOAK_INFO   8
 

#define MAX_AWARENESS_EVENTS   64
 

#define MAX_GATE_INDEX   ( sizeof(Super_boss_gate_list) / sizeof(Super_boss_gate_list[0]) )
 

#define MIN_D   0x100
 

#define OVERALL_AGITATION_MAX   100
 

#define PARALLAX   0
 

#define QUEUE_SIZE   256
 


Function Documentation

int add_awareness_event object objp,
int  type
 

int ai_behavior_to_mode int  behavior  ) 
 

void ai_do_actual_firing_stuff object obj,
ai_static aip,
ai_local ailp,
robot_info robptr,
vms_vector vec_to_player,
fix  dist_to_player,
vms_vector gun_point,
int  player_visibility,
int  object_animates
 

void ai_do_cloak_stuff void   ) 
 

int ai_door_is_openable object objp,
segment segp,
int  sidenum
 

void ai_fire_laser_at_player object obj,
vms_vector fire_point
 

void ai_frame_animation object objp  ) 
 

void ai_init_boss_for_ship void   ) 
 

void ai_move_relative_to_player object objp,
ai_local ailp,
fix  dist_to_player,
vms_vector vec_to_player,
fix  circle_distance,
int  evade_only
 

void ai_multi_send_robot_position int  objnum,
int  force
 

int ai_restore_state FILE *  fp  ) 
 

int ai_save_state FILE *  fp  ) 
 

void ai_turn_randomly vms_vector vec_to_player,
object obj,
fix  rate,
int  previous_visibility
 

void ai_turn_towards_vector vms_vector goal_vector,
object objp,
fix  rate
 

int boss_fits_in_seg object boss_objp,
int  segnum
 

int check_object_object_intersection vms_vector pos,
fix  size,
segment segp
 

void compute_vis_and_vec object objp,
vms_vector pos,
ai_local ailp,
vms_vector vec_to_player,
int *  player_visibility,
robot_info robptr,
int *  flag
 

void create_awareness_event object objp,
int  type
 

int create_gated_robot int  segnum,
int  object_id
 

void do_ai_frame object obj  ) 
 

void do_ai_frame_all void   ) 
 

void do_ai_robot_hit object objp,
int  type
 

void do_ai_robot_hit_attack object robot,
object player,
vms_vector collision_point
 

void do_boss_dying_frame object objp  ) 
 

void do_boss_stuff object objp  ) 
 

void do_firing_stuff object obj,
int  player_visibility,
vms_vector vec_to_player
 

void do_lunacy_off void   ) 
 

void do_lunacy_on void   ) 
 

int do_silly_animation object objp  ) 
 

void do_super_boss_stuff object objp,
fix  dist_to_player,
int  player_visibility
 

void dump_ai_objects_all  ) 
 

void force_dump_ai_objects_all char *  msg  ) 
 

int gate_in_robot int  type,
int  segnum
 

int get_random_child int  segnum  ) 
 

void init_ai_object int  objnum,
int  behavior,
int  hide_segment
 

void init_ai_objects void   ) 
 

void init_ai_system void   ) 
 

void init_boss_segments short  segptr[],
int *  num_segs,
int  size_check
 

void init_robots_for_level void   ) 
 

void john_cheat_func_1 int  key  ) 
 

void john_cheat_func_2 int  key  ) 
 

void john_cheat_func_3 int  key  ) 
 

void john_cheat_func_4 int  key  ) 
 

void make_random_vector vms_vector vec  ) 
 

int maybe_ai_do_actual_firing_stuff object obj,
ai_static aip
 

void move_around_player object objp,
vms_vector vec_to_player,
int  fast_flag
 

void move_away_from_player object objp,
vms_vector vec_to_player,
int  attack_type
 

void move_object_to_legal_spot object objp  ) 
 

void move_towards_player object objp,
vms_vector vec_to_player
 

void move_towards_segment_center object objp  ) 
 

void move_towards_vector object objp,
vms_vector vec_goal
 

void mprintf_animation_info object objp  ) 
 

int openable_doors_in_segment object objp  ) 
 

void pae_aux int  segnum,
int  type,
int  level
 

void physics_turn_towards_vector vms_vector goal_vector,
object obj,
fix  rate
 

int player_is_visible_from_object object objp,
vms_vector pos,
fix  field_of_view,
vms_vector vec_to_player
 

void process_awareness_events void   ) 
 

void set_next_fire_time ai_local ailp,
robot_info robptr
 

void set_player_awareness_all void   ) 
 

void set_rotvel_and_saturate fix dest,
fix  delta
 

int special_object_in_seg int  segnum  ) 
 

void start_boss_death_sequence object objp  ) 
 

void teleport_boss object objp  ) 
 

void turn_off_ai_dump void   ) 
 


Variable Documentation

int Ai_animation_test = 0
 

ai_cloak_info Ai_cloak_info[MAX_AI_CLOAK_INFO]
 

int Ai_dump_enable = 0
 

FILE* Ai_dump_file = NULL
 

char Ai_error_message[128] = ""
 

int ai_evaded = 0
 

int Ai_info_enabled = 0
 

int Ai_initialized = 0
 

ai_local Ai_local_info[MAX_OBJECTS]
 

byte Ai_transition_table[AI_MAX_EVENT][AI_MAX_STATE][AI_MAX_STATE]
 

int Attack_scale = 24
 

awareness_event Awareness_events[MAX_AWARENESS_EVENTS]
 

char behavior_text[6][9]
 

Initial value:

 {
        "STILL   ",
        "NORMAL  ",
        "HIDE    ",
        "RUN_FROM",
        "FOLPATH ",
        "STATION "
}

vms_vector Believed_player_pos
 

int Boss_been_hit = 0
 

fix Boss_cloak_duration = BOSS_CLOAK_DURATION
 

fix Boss_cloak_end_time = 0
 

fix Boss_cloak_interval = F1_0*10
 

fix Boss_cloak_start_time = 0
 

int Boss_dying
 

int Boss_dying_sound_playing
 

fix Boss_dying_start_time
 

short Boss_gate_segs[MAX_BOSS_TELEPORT_SEGS]
 

int Boss_hit_this_frame
 

fix Boss_teleport_interval = F1_0*8
 

short Boss_teleport_segs[MAX_BOSS_TELEPORT_SEGS]
 

int Break_on_object = -1
 

int Cvv_last_time[MAX_OBJECTS]
 

int Cvv_test = 0
 

int Diff_save = 1
 

int Do_ai_flag = 1
 

byte Enable_john_cheat_1
 

byte Enable_john_cheat_2
 

byte Enable_john_cheat_3
 

byte Enable_john_cheat_4
 

fix Firing_wait_copy[MAX_ROBOT_TYPES]
 

int Flinch_scale = 4
 

fix Gate_interval = F1_0*6
 

int Gun_point_hack = 0
 

fvi_info Hit_data
 

vms_vector Hit_pos
 

int Hit_seg
 

int Hit_type
 

ubyte john_cheats_1[JOHN_CHEATS_SIZE_1]
 

Initial value:

 {      KEY_P ^ 0x00 ^ 0x34, 
                                                                                                                        KEY_O ^ 0x10 ^ 0x34, 
                                                                                                                        KEY_B ^ 0x20 ^ 0x34, 
                                                                                                                        KEY_O ^ 0x30 ^ 0x34, 
                                                                                                                        KEY_Y ^ 0x40 ^ 0x34,
                                                                                                                        KEY_S ^ 0x50 ^ 0x34 }

ubyte john_cheats_2[2 *JOHN_CHEATS_SIZE_2]
 

Initial value:

 {      KEY_P ^ 0x00 ^ 0x43, 0x66, 
                                                                                                                                KEY_O ^ 0x10 ^ 0x43, 0x11, 
                                                                                                                                KEY_R ^ 0x20 ^ 0x43, 0x8, 
                                                                                                                                KEY_G ^ 0x30 ^ 0x43, 0x2, 
                                                                                                                                KEY_Y ^ 0x40 ^ 0x43, 0x0, 
                                                                                                                                KEY_S ^ 0x50 ^ 0x43 }

ubyte john_cheats_3[2 *JOHN_CHEATS_SIZE_3+1]
 

Initial value:

 { KEY_Y ^ 0x67, 
                                                                                                                                KEY_E ^ 0x66, 
                                                                                                                                KEY_C ^ 0x65, 
                                                                                                                                KEY_A ^ 0x64, 
                                                                                                                                KEY_N ^ 0x63, 
                                                                                                                                KEY_U ^ 0x62, 
                                                                                                                                KEY_L ^ 0x61 }

int john_cheats_index_1
 

int john_cheats_index_2
 

int john_cheats_index_3
 

int john_cheats_index_4
 

int Laser_rapid_fire
 

fix Last_gate_time = 0
 

fix Last_teleport_time = 0
 

int Lunacy = 0
 

byte Mike_to_matt_xlate[] = {AS_REST, AS_REST, AS_ALERT, AS_ALERT, AS_FLINCH, AS_FIRE, AS_RECOIL, AS_REST}
 

char mode_text[8][9]
 

Initial value:

 {
        "STILL   ",
        "WANDER  ",
        "FOL_PATH",
        "CHASE_OB",
        "RUN_FROM",
        "HIDE    ",
        "FOL_PAT2",
        "OPENDOR2"
}

byte New_awareness[MAX_SEGMENTS]
 

int Num_awareness_events = 0
 

int Num_boss_gate_segs
 

int Num_boss_teleport_segs
 

int Overall_agitation
 

int Player_exploded
 

point_seg Point_segs[MAX_POINT_SEGS]
 

point_seg* Point_segs_free_ptr = Point_segs
 

fix Prev_boss_shields = -1
 

byte Rapidfire_count_copy[MAX_ROBOT_TYPES]
 

int Robot_firing_enabled = 1
 

int Robot_sound_volume = DEFAULT_ROBOT_SOUND_VOLUME
 

char state_text[8][5]
 

Initial value:

 {
        "NONE",
        "REST",
        "SRCH",
        "LOCK",
        "FLIN",
        "FIRE",
        "RECO",
        "ERR_",
}

byte Super_boss_gate_list[] = {0, 1, 8, 9, 10, 11, 12, 15, 16, 18, 19, 20, 22, 0, 8, 11, 19, 20, 8, 20, 8}
 

int Ugly_robot_cheat
 

int Ugly_robot_texture
 


Generated on Mon Aug 28 20:55:32 2006 for D1X-Rebirth by  doxygen 1.4.6