24 #define MAX_GAMESEQ_EVENTS              20              // maximum number of events on the game sequencing queue 
   25 #define GS_STACK_SIZE                   10              // maximum number of stacked states 
   39 static int state_reentry = 0;  
 
   40 static int state_processing_event_post = 0;  
 
   41 static int state_in_event_processer = 0;
 
   50         "GS_EVENT_START_GAME",
 
   51         "GS_EVENT_ENTER_GAME",
 
   52         "GS_EVENT_START_GAME_QUICK",
 
   55         "GS_EVENT_PAUSE_GAME",
 
   56         "GS_EVENT_PREVIOUS_STATE",
 
   57         "GS_EVENT_OPTIONS_MENU",
 
   58         "GS_EVENT_BARRACKS_MENU",
 
   59         "GS_EVENT_TRAINING_MENU",                                               
 
   61         "GS_EVENT_LOAD_MISSION_MENU",
 
   62         "GS_EVENT_SHIP_SELECTION",
 
   63         "GS_EVENT_TOGGLE_FULLSCREEN",
 
   64         "GS_EVENT_START_BRIEFING",                                              
 
   65         "GS_EVENT_DEBUG_PAUSE_GAME",
 
   66         "GS_EVENT_HUD_CONFIG",
 
   67         "GS_EVENT_MULTI_JOIN_GAME",
 
   68         "GS_EVENT_CONTROL_CONFIG",
 
   69         "GS_EVENT_EVENT_DEBUG",                                                 
 
   70         "GS_EVENT_WEAPON_SELECTION",
 
   71         "GS_EVENT_MISSION_LOG_SCROLLBACK",
 
   72         "GS_EVENT_GAMEPLAY_HELP",
 
   73         "GS_EVENT_DEATH_DIED",
 
   74         "GS_EVENT_DEATH_BLEW_UP",                                               
 
   75         "GS_EVENT_NEW_CAMPAIGN",
 
   77         "GS_EVENT_SHOW_GOALS",
 
   78         "GS_EVENT_HOTKEY_SCREEN",
 
   79         "GS_EVENT_VIEW_MEDALS",                                                 
 
   80         "GS_EVENT_MULTI_HOST_SETUP",
 
   81         "GS_EVENT_MULTI_CLIENT_SETUP",
 
   83         "GS_EVENT_GOTO_VIEW_CUTSCENES_SCREEN",
 
   84         "GS_EVENT_MULTI_STD_WAIT",                                              
 
   85         "GS_EVENT_STANDALONE_MAIN",
 
   86         "GS_EVENT_MULTI_PAUSE",
 
   87         "GS_EVENT_TEAM_SELECT",
 
   88         "GS_EVENT_TRAINING_PAUSE",
 
   89         "GS_EVENT_INGAME_PRE_JOIN",                                             
 
   90         "GS_EVENT_PLAYER_WARPOUT_START",
 
   91         "GS_EVENT_PLAYER_WARPOUT_START_FORCED",
 
   92         "GS_EVENT_PLAYER_WARPOUT_STOP",
 
   93         "GS_EVENT_PLAYER_WARPOUT_DONE_STAGE1",
 
   94         "GS_EVENT_PLAYER_WARPOUT_DONE_STAGE2",                  
 
   95         "GS_EVENT_PLAYER_WARPOUT_DONE",
 
   96         "GS_EVENT_STANDALONE_POSTGAME",
 
   97         "GS_EVENT_INITIAL_PLAYER_SELECT",
 
   99         "GS_EVENT_MULTI_MISSION_SYNC",                                  
 
  100         "GS_EVENT_MULTI_START_GAME",
 
  101         "GS_EVENT_MULTI_HOST_OPTIONS",
 
  102         "GS_EVENT_MULTI_DOGFIGHT_DEBRIEF",
 
  103         "GS_EVENT_CAMPAIGN_ROOM",
 
  104         "GS_EVENT_CMD_BRIEF",                                                   
 
  105         "GS_EVENT_TOGGLE_GLIDE",
 
  106         "GS_EVENT_RED_ALERT",
 
  107         "GS_EVENT_SIMULATOR_ROOM",
 
  108         "GS_EVENT_END_CAMPAIGN",
 
  109         "GS_EVENT_LOOP_BRIEF",                                                  
 
  110         "GS_EVENT_CAMPAIGN_CHEAT",
 
  114         "GS_EVENT_FICTION_VIEWER",                                              
 
  126         "GS_STATE_MAIN_MENU",
 
  127         "GS_STATE_GAME_PLAY",
 
  128         "GS_STATE_GAME_PAUSED",
 
  129         "GS_STATE_QUIT_GAME",
 
  130         "GS_STATE_OPTIONS_MENU",                                                
 
  131         "GS_STATE_BARRACKS_MENU",
 
  132         "GS_STATE_TECH_MENU",
 
  133         "GS_STATE_TRAINING_MENU",
 
  134         "GS_STATE_LOAD_MISSION_MENU",
 
  136         "GS_STATE_SHIP_SELECT",
 
  137         "GS_STATE_DEBUG_PAUSED",
 
  138         "GS_STATE_HUD_CONFIG",
 
  139         "GS_STATE_MULTI_JOIN_GAME",
 
  140         "GS_STATE_CONTROL_CONFIG",                                              
 
  141         "GS_STATE_WEAPON_SELECT",
 
  142         "GS_STATE_MISSION_LOG_SCROLLBACK",
 
  143         "GS_STATE_DEATH_DIED",
 
  144         "GS_STATE_DEATH_BLEW_UP",
 
  145         "GS_STATE_SIMULATOR_ROOM",                                              
 
  147         "GS_STATE_SHOW_GOALS",
 
  148         "GS_STATE_HOTKEY_SCREEN",
 
  149         "GS_STATE_VIEW_MEDALS",
 
  150         "GS_STATE_MULTI_HOST_SETUP",                                    
 
  151         "GS_STATE_MULTI_CLIENT_SETUP",
 
  153         "GS_STATE_VIEW_CUTSCENES",
 
  154         "GS_STATE_MULTI_STD_WAIT",
 
  155         "GS_STATE_STANDALONE_MAIN",                                             
 
  156         "GS_STATE_MULTI_PAUSED",
 
  157         "GS_STATE_TEAM_SELECT",
 
  158         "GS_STATE_TRAINING_PAUSED",
 
  159         "GS_STATE_INGAME_PRE_JOIN",
 
  160         "GS_STATE_EVENT_DEBUG",                                                 
 
  161         "GS_STATE_STANDALONE_POSTGAME",
 
  162         "GS_STATE_INITIAL_PLAYER_SELECT",
 
  163         "GS_STATE_MULTI_MISSION_SYNC",
 
  164         "GS_STATE_MULTI_START_GAME",
 
  165         "GS_STATE_MULTI_HOST_OPTIONS",                                  
 
  166         "GS_STATE_MULTI_DOGFIGHT_DEBRIEF",
 
  167         "GS_STATE_CAMPAIGN_ROOM",
 
  168         "GS_STATE_CMD_BRIEF",
 
  169         "GS_STATE_RED_ALERT",
 
  170         "GS_STATE_END_OF_CAMPAIGN",                                             
 
  171         "GS_STATE_GAMEPLAY_HELP",
 
  172         "GS_STATE_LOOP_BRIEF",
 
  176         "GS_STATE_START_GAME",
 
  177         "GS_STATE_FICTION_VIEWER",
 
  202         state_processing_event_post = 0;
 
  203         state_in_event_processer = 0;
 
  211         if (state_processing_event_post) {
 
  212                 nprintf((
"Warning", 
"Received post for event %s during state transtition. Find Allender if you are unsure if this is bad.\n", 
GS_event_text[event] ));
 
  262         int event, old_state;
 
  271                 mprintf(( 
"Throwing out event %d because of state set from %d to %d\n", event, old_state, new_state ));
 
  274         Assert( state_reentry == 1 );           
 
  275         Assert( state_in_event_processer == 1 );                
 
  277         state_processing_event_post++;
 
  286         state_processing_event_post--;
 
  303         Assert( state_reentry == 1 );           
 
  304         Assert( state_in_event_processer == 1 );                
 
  309         state_processing_event_post++;
 
  320         state_processing_event_post--;
 
  325         int popped_state = 0;
 
  327         Assert(state_reentry == 1);             
 
  391         int event, old_state;
 
  394         Assert(state_reentry == 0);             
 
  398                 state_in_event_processer++;
 
  400                 state_in_event_processer--;
 
  444                 if (
gs[
i].current_state == state) {
 
int gameseq_get_previous_state()
 
bool GameState_Stack_Valid()
 
int gameseq_process_events()
 
LOCAL state_stack gs[GS_STACK_SIZE]
 
int gameseq_get_pushed_state()
 
int event_queue[MAX_GAMESEQ_EVENTS]
 
GLint GLint GLsizei GLsizei GLsizei depth
 
int gameseq_get_state(int depth)
 
struct state_stack state_stack
 
void game_enter_state(int, int)
 
int gameseq_get_state_idx(char *s)
 
void game_process_event(int, int)
 
#define MAX_GAMESEQ_EVENTS
 
void game_leave_state(int, int)
 
script_hook GS_state_hooks[GS_NUM_STATES]
 
void gameseq_push_state(int new_state)
 
int gameseq_get_event_idx(char *s)
 
LOCAL int gs_current_stack
 
void script_hook_init(script_hook *hook)
 
void gameseq_post_event(int event)
 
void gameseq_pop_and_discard_state()
 
void gameseq_set_state(int new_state, int override)