]> icculus.org git repositories - taylor/freespace2.git/blob - include/multiui.h
Fix net_addr vs net_addr_t
[taylor/freespace2.git] / include / multiui.h
1 /*
2  * $Logfile: /Freespace2/code/Network/MultiUI.h $
3  * $Revision$
4  * $Date$
5  * $Author$
6  *
7  * Header file for the UI of the various multiplayer screens
8  *
9  * $Log$
10  * Revision 1.2  2002/05/27 00:40:47  theoddone33
11  * Fix net_addr vs net_addr_t
12  *
13  * Revision 1.1.1.1  2002/05/03 03:28:12  root
14  * Initial import.
15  *
16  * 
17  * 8     7/15/99 9:20a Andsager
18  * FS2_DEMO initial checkin
19  * 
20  * 7     5/04/99 5:20p Dave
21  * Fixed up multiplayer join screen and host options screen. Should both
22  * be at 100% now.
23  * 
24  * 6     2/23/99 2:29p Dave
25  * First run of oldschool dogfight mode. 
26  * 
27  * 5     2/11/99 3:08p Dave
28  * PXO refresh button. Very preliminary squad war support.
29  * 
30  * 4     11/19/98 4:19p Dave
31  * Put IPX sockets back in psnet. Consolidated all multiplayer config
32  * files into one.
33  * 
34  * 3     11/05/98 5:55p Dave
35  * Big pass at reducing #includes
36  * 
37  * 2     10/07/98 10:53a Dave
38  * Initial checkin.
39  * 
40  * 1     10/07/98 10:50a Dave
41  * 
42  * 68    9/17/98 3:08p Dave
43  * PXO to non-pxo game warning popup. Player icon stuff in create and join
44  * game screens. Upped server count refresh time in PXO to 35 secs (from
45  * 20).
46  * 
47  * 67    9/10/98 1:17p Dave
48  * Put in code to flag missions and campaigns as being MD or not in Fred
49  * and Freespace. Put in multiplayer support for filtering out MD
50  * missions. Put in multiplayer popups for warning of non-valid missions.
51  * 
52  * 66    9/04/98 3:51p Dave
53  * Put in validated mission updating and application during stats
54  * updating.
55  * 
56  * 65    8/12/98 4:53p Dave
57  * Put in 32 bit checksumming for PXO missions. No validation on the
58  * actual tracker yet, though.
59  * 
60  * 64    6/05/98 9:54a Lawrance
61  * OEM changes
62  * 
63  * 63    5/23/98 3:31p Dave
64  * Tweaked pxo code. Fixed observer HUD stuff.
65  * 
66  * 62    5/20/98 2:25a Dave
67  * Fixed server side voice muting. Tweaked multi debrief/endgame
68  * sequencing a bit. Much friendlier for stats tossing/accepting now.
69  * 
70  * 61    5/15/98 12:09a Dave
71  * New tracker api code. New game tracker code. Finished up first run of
72  * the PXO screen. Fixed a few game server list exceptions.
73  * 
74  * 60    5/11/98 11:40p Dave
75  * Stuff.
76  * 
77  * 59    5/09/98 7:16p Dave
78  * Put in CD checking. Put in standalone host password. Made pilot into
79  * popup scrollable.
80  * 
81  * 58    5/08/98 5:05p Dave
82  * Go to the join game screen when quitting multiplayer. Fixed mission
83  * text chat bugs. Put mission type symbols on the create game list.
84  * Started updating standalone gui controls.
85  * 
86  * 57    5/04/98 10:39p Dave
87  * Put in endgame sequencing.  Need to check campaign situations.
88  * Realigned ship info on team select screen.
89  * 
90  * 56    5/04/98 1:44p Dave
91  * Fixed up a standalone resetting problem. Fixed multiplayer stats
92  * collection for clients. Make sure all multiplayer ui screens have the
93  * correct palette at all times.
94  * 
95  * 55    4/30/98 12:57a Dave
96  * Put in new mode for ship/weapon selection. Rearranged how game querying
97  * is done a bit.
98  * 
99  * 54    4/23/98 6:19p Dave
100  * Store ETS values between respawns. Put kick feature in the text
101  * messaging system. Fixed text messaging system so that it doesn't
102  * process or trigger ship controls. Other UI fixes.
103  * 
104  * 53    4/23/98 1:28a Dave
105  * Seemingly nailed the current_primary_bank and current_secondary_bank -1
106  * problem. Made sure non-critical button presses are _never_ sent to the
107  * server.
108  * 
109  * 52    4/21/98 11:56p Dave
110  * Put in player deaths statskeeping. Use arrow keys in the ingame join
111  * ship select screen. Don't quit the game if in the debriefing and server
112  * leaves.
113  * 
114  * 51    4/15/98 5:03p Dave
115  * Put in a rough countdown to mission start on final sync screen. Fixed
116  * several team vs. team bugs on the ship/team select screen.
117  * 
118  * 50    4/14/98 12:19p Dave
119  * Revised the pause system yet again. Seperated into its own module.
120  * 
121  * 49    4/13/98 4:50p Dave
122  * Maintain status of weapon bank/links through respawns. Put # players on
123  * create game mission list. Make observer not have engine sounds. Make
124  * oberver pivot point correct. Fixed respawn value getting reset every
125  * time host options screen started.
126  * 
127  * 48    4/07/98 5:42p Dave
128  * Put in support for ui display of voice system status (recording,
129  * playing back, etc). Make sure main hall music is stopped before
130  * entering a multiplayer game via ingame join.
131  * 
132  * 47    4/06/98 10:25p Dave
133  * Fixed up Netgame.respawn for the standalone case.
134  * 
135  * 46    4/02/98 6:29p Lawrance
136  * compile out multilag code for demo
137  * 
138  * 45    4/01/98 11:19p Dave
139  * Put in auto-loading of xferred pilot pic files. Grey out background
140  * behind pinfo popup. Put a chatbox message in when players are kicked.
141  * Moved mission title down in briefing. Other ui fixes.
142  * 
143  * 44    3/28/98 3:20p Dave
144  * Made pilot select popup handle large #'s of pilots correctly. Made
145  * create game screen display/select missions correctly. Made temp
146  * observers get stats after a mission. Numerous small ui fixes.
147  * 
148  * 43    3/26/98 5:24p Allender
149  * put in respawn edit box into mission notes dialog.  Made loading of
150  * missions/campaign happen when first entering the game setup screen.
151  * 
152  * 42    3/18/98 5:52p Dave
153  * Put in netgame password popup. Numerous ui changes. Laid groundwork for
154  * streamed multi_voice data.
155  * 
156  * 41    2/23/98 11:09p Dave
157  * Finished up multiplayer campaign support. Seems bug-free.
158  * 
159  * 40    2/20/98 4:47p Allender
160  * beefed up the multiplayer host interface when selection missions.
161  * Don't reload all the missions everytime a new filter is set
162  * 
163  * 39    2/15/98 4:28p Dave
164  * Made multiplayer mission lists display mission titles and descriptions
165  * as well as filename. Removed some unneeded code in main hall.
166  * 
167  * 38    2/11/98 5:35p Dave
168  * Standalone debugging. Changed how support ships warping in are handled.
169  * Some UI code tidying up.
170  * 
171  * 37    2/10/98 8:39p Dave
172  * Fixed bugs. Made endgame sequencing more clear.
173  * 
174  * 36    1/31/98 4:32p Dave
175  * Put in new support for VMT player validation, game logging in, and game
176  * logging out. Need to finish stats transfer.
177  * 
178  * 35    1/23/98 5:43p Dave
179  * Finished bringing standalone up to speed. Coded in new host options
180  * screen.
181  * 
182  * 34    1/22/98 5:26p Dave
183  * Modified some pregame sequencing packets. Starting to repair broken
184  * standalone stuff.
185  * 
186  * 33    1/21/98 5:58p Dave
187  * Finished ingame join. Coded in multiplayer interface artwork changes.
188  * 
189  * 32    1/20/98 5:42p Dave
190  * Moved ingame join to its own module. Improved it a bit.
191  * 
192  * 31    1/16/98 2:34p Dave
193  * Made pause screen work properly (multiplayer). Changed how chat packets
194  * work.
195  * 
196  * 30    1/15/98 6:12p Dave
197  * Fixed weapons loadout bugs with multiplayer respawning. Added
198  * multiplayer start screen. Fixed a few chatbox bugs.
199  * 
200  * 29    12/18/97 8:59p Dave
201  * Finished putting in basic support for weapon select and ship select in
202  * multiplayer.
203  * 
204  * 28    12/13/97 8:01p Dave
205  * Installed multiplayer create game screen.
206  * 
207  * 27    12/13/97 3:01p Dave
208  * Finished polishing up multiplayer join screen.
209  * 
210  * 26    12/13/97 1:59a Dave
211  * Installed multiplayer join screen
212  * 
213  * 25    12/03/97 5:04p Sandeep
214  * Fixed TCP/IP connections and you can play games off master tracker now
215  * 
216  * 24    11/15/97 2:37p Dave
217  * More multiplayer campaign support.
218  * 
219  * 23    11/12/97 4:43p Hoffoss
220  * Implemented new pause screens, moved old pause to debug pause.
221  * 
222  * 22    11/04/97 3:37p Dave
223  * More sequencing overhauls. Respawning, and server transfer. 
224  * 
225  * 21    10/30/97 5:47p Dave
226  * Smoothed transition between multiple multiplayer missions. Nailed a few
227  * timestamp problems.
228  * 
229  * 20    10/29/97 5:18p Dave
230  * More debugging of server transfer. Put in debrief/brief 
231  * transition for multiplayer (w/standalone)
232  * 
233  * 19    10/22/97 6:26p Dave
234  * Cleanup up yet more pregame sequencing. Got standalone up to working
235  * condition.
236  * 
237  * 18    10/21/97 5:21p Dave
238  * Fixed pregame mission load/file verify debacle. Added single vs.
239  * multiplayer stats system.
240  * 
241  * 17    10/20/97 5:00p Dave
242  * Installed new de-luxe ack system. Fixed a few potential chat/stats
243  * bugs. Cleaned out some old code.
244  * 
245  * 16    10/09/97 5:24p Allender
246  * fix misison time display.  Pass frametime into UI menus
247  * 
248  * 15    10/02/97 4:53p Dave
249  * Finished all leave/join problems. Fixed file xfer with new ingame and
250  * non-ingame situations. Fixed oddball timestamp problem.
251  * 
252  * 14    9/30/97 5:07p Dave
253  * Finished up client-server remote commands. Finished up client-server
254  * squadmate messaging. Added periodic auto-subsystem updates. Began work
255  * on adapting ingame join to new player start system
256  * 
257  * 13    9/30/97 4:58p Allender
258  * object updates on client side now happen according to different levels.
259  * prediction code needs to be put in still
260  * 
261  * 12    9/15/97 4:43p Dave
262  * Got basic observer mode working. Seems bug free so far.
263  * 
264  * 11    8/29/97 5:01p Dave
265  * Put in multiplayer pause screen/feartures.
266  * 
267  * 10    8/20/97 4:21p Dave
268  * Spliced out busy ACCEPT wait loop to work within the existing state
269  * loop. Fixed display of mission description.
270  * 
271  * 9     7/24/97 10:06a Dave
272  * Added scrollable game server list into multi_join_tracker_*
273  * 
274  * 8     7/23/97 4:54p Dave
275  * Added multi_join_tracker_* functions for dealing with the tracker.
276  * 
277  * 7     7/02/97 12:59p Allender
278  * chat hooks -- fixed a couple of chat bugs and reformetted the screen
279  * slightly
280  * 
281  * 6     6/12/97 9:13a Allender
282  * added sequencing state to the end of ship selection.  Changed some
283  * packet names and host sequencing
284  * 
285  * 5     6/10/97 9:56p Allender
286  * get multiplayer mission selection working.  Host can select mission and
287  * have himself and clients load the mission -- no sequencing past this
288  * point however
289  * 
290  * 4     6/06/97 10:40a Allender
291  * added 'type' to mission (single/multi/etc).  Added a couple of new game
292  * states for allowing to choose mission for multiplayer game
293  * 
294  * 3     1/01/97 6:45p Lawrance
295  * added more multiplayer messages, improved code
296  * 
297  * 2     12/30/96 10:18a Lawrance
298  * split up multiplayer code into manageable files
299  *
300  * $NoKeywords: $
301  */
302
303
304 #ifndef MULTI_UI_H
305 #define MULTI_UI_H
306
307 #include "ui.h"
308 #include "missionparse.h"
309
310 struct net_player;
311
312 void multi_common_add_text(char *txt,int auto_scroll = 0);
313 void multi_common_set_text(char *str,int auto_scroll = 0);
314
315 // time between sending refresh packets to known servers
316 #define MULTI_JOIN_REFRESH_TIME                 45000                   
317 #define MULTI_JOIN_REFRESH_TIME_LOCAL   5000
318 // this time must be longer than the MULTI_JOIN_REFRESH_TIME but shorter than twice the MULTI_JOIN_REFRESH_TIME
319 // so that it does not time out between refresh times, but cannot last more than 2 complete refreshed without
320 // timing out. Just trust me - DB
321 #define MULTI_JOIN_SERVER_TIMEOUT                       (MULTI_JOIN_REFRESH_TIME + (MULTI_JOIN_REFRESH_TIME /2))
322 #define MULTI_JOIN_SERVER_TIMEOUT_LOCAL (MULTI_JOIN_REFRESH_TIME_LOCAL + (MULTI_JOIN_REFRESH_TIME_LOCAL / 2))
323
324 // maximum number of items which can be on the list
325 #if defined(DEMO) || defined(OEM_BUILD) // not for FS2_DEMO
326         #define MULTI_CREATE_MAX_LIST_ITEMS                     1
327 #else
328         #define MULTI_CREATE_MAX_LIST_ITEMS                     200
329 #endif
330
331 typedef struct {
332         char            filename[MAX_FILENAME_LEN];     // filename of the mission
333         char            name[NAME_LENGTH];                              // name of the mission
334         int             flags;                                                          // flags to tell what type of multiplayer game (coop, team v. team)
335         uint     respawn;                                                               //      mission specified respawn count
336         ubyte           max_players;                                            // max players allowed for this file    
337         char            valid_status;                                           // see MVALID_* defines above
338 } multi_create_info;
339
340 // load all common icons
341 #define MULTI_NUM_COMMON_ICONS          12
342 #define MICON_VOICE_DENIED                              0
343 #define MICON_VOICE_RECORDING                   1
344 #define MICON_TEAM0                                             2
345 #define MICON_TEAM0_SELECT                              3
346 #define MICON_TEAM1                                             4
347 #define MICON_TEAM1_SELECT                              5
348 #define MICON_COOP                                              6
349 #define MICON_TVT                                                       7
350 #define MICON_DOGFIGHT                                  8
351 #define MICON_VOLITION                                  9
352 #define MICON_VALID                                             10
353 #define MICON_CD                                                        11
354
355 // common icon stuff
356 extern int Multi_common_icons[MULTI_NUM_COMMON_ICONS];
357 extern int Multi_common_icon_dims[MULTI_NUM_COMMON_ICONS][2];
358 void multi_load_common_icons();
359 void multi_unload_common_icons();
360
361 // initialize/display all bitmaps, etc related to displaying the voice system status
362 void multi_common_voice_display_status();
363
364 // multiplayer screen common palettes
365 void multi_common_load_palette();
366 void multi_common_set_palette();
367 void multi_common_unload_palette();
368
369 // call this to verify if we have a CD in the drive or not
370 void multi_common_verify_cd();
371
372 // variables to hold the mission and campaign lists
373 extern int Multi_create_mission_count;                                                                          // how many we have
374 extern int Multi_create_campaign_count;
375 extern multi_create_info Multi_create_mission_list[MULTI_CREATE_MAX_LIST_ITEMS];
376 extern multi_create_info Multi_create_campaign_list[MULTI_CREATE_MAX_LIST_ITEMS];
377
378 extern char Multi_create_files_array[MULTI_CREATE_MAX_LIST_ITEMS][MAX_FILENAME_LEN];
379 extern int Multi_create_files_array_count;
380
381 void multi_create_list_load_missions();
382 void multi_create_list_load_campaigns();
383
384 // returns an index into Multi_create_mission_list
385 int multi_create_lookup_mission(char *fname);
386
387 // returns an index into Multi_create_campaign_list
388 int multi_create_lookup_campaign(char *fname);
389
390 void multi_sg_rank_build_name(char *in,char *out);
391
392 void multi_join_game_init();
393 void multi_join_game_close();
394 void multi_join_game_do_frame();
395 void multi_join_eval_pong(net_addr_t *addr, fix pong_time);
396 void multi_join_reset_join_stamp();
397 void multi_join_clear_game_list();
398 void multi_join_notify_new_game();
399
400 void multi_start_game_init();
401 void multi_start_game_do();
402 void multi_start_game_close();
403
404 void multi_create_game_init();
405 void multi_create_game_do();
406 void multi_create_game_close();
407 void multi_create_game_add_mission(char *fname,char *name, int flags);
408
409 #define MULTI_CREATE_SHOW_MISSIONS                      0
410 #define MULTI_CREATE_SHOW_CAMPAIGNS                     1
411 void multi_create_setup_list_data(int mode);
412
413 void multi_create_handle_join(net_player *pl);
414
415 void multi_jw_handle_join(net_player *pl);
416
417 void multi_host_options_init();
418 void multi_host_options_do();
419 void multi_host_options_close();
420
421 void multi_game_client_setup_init();
422 void multi_game_client_setup_do_frame();
423 void multi_game_client_setup_close();
424
425 #define MULTI_SYNC_PRE_BRIEFING         0               // moving from the join to the briefing stage
426 #define MULTI_SYNC_POST_BRIEFING                1               // moving from the briefing to the gameplay stage
427 #define MULTI_SYNC_INGAME                               2               // ingame joiners data sync
428 extern int Multi_sync_mode;                                     // should always set this var before calling GS_EVENT_MULTI_MISSION_SYNC
429 extern int Multi_sync_countdown;                                // time in seconds until the mission is going to be launched
430 void multi_sync_init();
431 void multi_sync_do();
432 void multi_sync_close();
433 void multi_sync_start_countdown();                      // start the countdown to launch when the launch button is pressed
434
435 // note : these functions are called from within missiondebrief.cpp - NOT from freespace.cpp
436 void multi_debrief_init();
437 void multi_debrief_do_frame();
438 void multi_debrief_close();
439 void multi_debrief_accept_hit();                                                // handle the accept button being hit
440 void multi_debrief_esc_hit();                                                   // handle the ESC button being hit
441 void multi_debrief_replay_hit();                                                // handle the replay button being hit
442 void multi_debrief_server_left();                                       // call this when the server has left and we would otherwise be saying "contact lost with server"
443 void multi_debrief_stats_accept();                                      // call this to insure that stats are not undone when we leave the debriefing
444 void multi_debrief_stats_toss();                                                // call this to "toss" the stats packet
445 int multi_debrief_stats_accept_code();                          // call this to determine the status of multiplayer stats acceptance
446 void multi_debrief_server_process();                            // process all details regarding moving the netgame to its next state
447
448 // add a notification string, drawing appropriately depending on the state/screen we're in
449 void multi_common_add_notify(char *str);
450
451 // bring up the password string popup, fill in passwd (return 1 if accept was pressed, 0 if cancel was pressed)
452 int multi_passwd_popup(char *passwd);
453
454 #endif
455