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