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)