]> icculus.org git repositories - taylor/freespace2.git/blob - include/multimsgs.h
use psnet.h instead of psnet2.h to go inline with everything else (Taylor Richards)
[taylor/freespace2.git] / include / multimsgs.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/multimsgs.h $
11  * $Revision$
12  * $Date$
13  * $Author$
14  *
15  * Header file for the building and sending of multiplayer packets
16  *
17  * $Log$
18  * Revision 1.5  2003/01/30 19:46:18  relnev
19  * use psnet.h instead of psnet2.h to go inline with everything else (Taylor Richards)
20  *
21  * Revision 1.4  2002/06/09 04:41:14  relnev
22  * added copyright header
23  *
24  * Revision 1.3  2002/05/27 00:40:47  theoddone33
25  * Fix net_addr vs net_addr_t
26  *
27  * Revision 1.2  2002/05/26 20:49:54  theoddone33
28  * More progress
29  *
30  * Revision 1.1.1.1  2002/05/03 03:28:12  root
31  * Initial import.
32  *
33  * 
34  * 31    8/26/99 8:51p Dave
35  * Gave multiplayer TvT messaging a heavy dose of sanity. Cheat codes.
36  * 
37  * 30    8/25/99 4:38p Dave
38  * Updated PXO stuff. Make squad war report stuff much more nicely.
39  * 
40  * 29    8/22/99 5:53p Dave
41  * Scoring fixes. Added self destruct key. Put callsigns in the logfile
42  * instead of ship designations for multiplayer players.
43  * 
44  * 28    8/22/99 1:19p Dave
45  * Fixed up http proxy code. Cleaned up scoring code. Reverse the order in
46  * which d3d cards are detected.
47  * 
48  * 27    8/19/99 10:59a Dave
49  * Packet loss detection.
50  * 
51  * 26    8/16/99 4:05p Dave
52  * Big honking checkin.
53  * 
54  * 25    7/30/99 7:01p Dave
55  * Dogfight escort gauge. Fixed up laser rendering in Glide.
56  * 
57  * 24    7/22/99 7:17p Dave
58  * Fixed excessive whacks in multiplayer.
59  * 
60  * 23    7/08/99 10:53a Dave
61  * New multiplayer interpolation scheme. Not 100% done yet, but still
62  * better than the old way.
63  * 
64  * 22    7/03/99 5:50p Dave
65  * Make rotated bitmaps draw properly in padlock views.
66  * 
67  * 21    6/21/99 7:24p Dave
68  * netplayer pain packet. Added type E unmoving beams.
69  * 
70  * 20    5/14/99 1:59p Andsager
71  * Multiplayer message for subsystem cargo revealed.
72  * 
73  * 19    4/29/99 2:29p Dave
74  * Made flak work much better in multiplayer.
75  * 
76  * 18    4/28/99 11:13p Dave
77  * Temporary checkin of artillery code.
78  * 
79  * 17    4/09/99 2:21p Dave
80  * Multiplayer beta stuff. CD checking.
81  * 
82  * 16    4/02/99 9:55a Dave
83  * Added a few more options in the weapons.tbl for beam weapons. Attempt
84  * at putting "pain" packets into multiplayer.
85  * 
86  * 15    3/10/99 6:50p Dave
87  * Changed the way we buffer packets for all clients. Optimized turret
88  * fired packets. Did some weapon firing optimizations.
89  * 
90  * 14    3/09/99 6:24p Dave
91  * More work on object update revamping. Identified several sources of
92  * unnecessary bandwidth.
93  * 
94  * 13    3/08/99 7:03p Dave
95  * First run of new object update system. Looks very promising.
96  * 
97  * 12    2/23/99 2:29p Dave
98  * First run of oldschool dogfight mode. 
99  * 
100  * 11    2/21/99 6:02p Dave
101  * Fixed standalone WSS packets. 
102  * 
103  * 10    2/17/99 2:11p Dave
104  * First full run of squad war. All freespace and tracker side stuff
105  * works.
106  * 
107  * 9     1/14/99 12:48a Dave
108  * Todo list bug fixes. Made a pass at putting briefing icons back into
109  * FRED. Sort of works :(
110  * 
111  * 8     1/12/99 5:45p Dave
112  * Moved weapon pipeline in multiplayer to almost exclusively client side.
113  * Very good results. Bandwidth goes down, playability goes up for crappy
114  * connections. Fixed object update problem for ship subsystems.
115  * 
116  * 7     11/19/98 8:04a Dave
117  * Full support for D3-style reliable sockets. Revamped packet lag/loss
118  * system, made it receiver side and at the lowest possible level.
119  * 
120  * 6     11/17/98 11:12a Dave
121  * Removed player identification by address. Now assign explicit id #'s.
122  * 
123  * 5     11/12/98 12:13a Dave
124  * Tidied code up for multiplayer test. Put in network support for flak
125  * guns.
126  * 
127  * 4     11/05/98 5:55p Dave
128  * Big pass at reducing #includes
129  * 
130  * 3     10/20/98 1:39p Andsager
131  * Make so sparks follow animated ship submodels.  Modify
132  * ship_weapon_do_hit_stuff() and ship_apply_local_damage() to add
133  * submodel_num.  Add submodel_num to multiplayer hit packet.
134  * 
135  * 2     10/07/98 10:53a Dave
136  * Initial checkin.
137  * 
138  * 1     10/07/98 10:50a Dave
139  * 
140  * 169   9/20/98 7:20p Dave
141  * Added CHANGE_IFF packet. 
142  * 
143  * 168   9/11/98 4:14p Dave
144  * Fixed file checksumming of < file_size. Put in more verbose kicking and
145  * PXO stats store reporting.
146  * 
147  * 167   9/11/98 2:05p Allender
148  * make reinforcements work correctly in multiplayer games.  There still
149  * may be a team vs team issue that I haven't thought of yet :-(
150  * 
151  * 166   8/28/98 3:29p Dave
152  * EMP effect done. AI effects may need some tweaking as required.
153  * 
154  * 165   8/25/98 1:48p Dave
155  * First rev of EMP effect. Player side stuff basically done. Next comes
156  * AI code.
157  * 
158  * 164   6/22/98 8:36a Allender
159  * revamping of homing weapon system.  don't send as object updates
160  * anymore
161  * 
162  * 163   6/10/98 2:56p Dave
163  * Substantial changes to reduce bandwidth and latency problems.
164  * 
165  * 162   5/25/98 10:58a Allender
166  * more object update stuff -- fix duplicate repair ship messages
167  * 
168  * 161   5/20/98 2:24a Dave
169  * Fixed server side voice muting. Tweaked multi debrief/endgame
170  * sequencing a bit. Much friendlier for stats tossing/accepting now.
171  * 
172  * 160   5/18/98 12:41a Allender
173  * fixed subsystem problems on clients (i.e. not reporting properly on
174  * damage indicator).  Fixed ingame join problem with respawns.  minor
175  * comm menu stuff
176  * 
177  * 159   5/13/98 6:54p Dave
178  * More sophistication to PXO interface. Changed respawn checking so
179  * there's no window for desynchronization between the server and the
180  * clients.
181  * 
182  * 158   5/11/98 11:40p Dave
183  * Stuff.
184  * 
185  * 157   5/08/98 11:22a Allender
186  * fix ingame join trouble.  Small messaging fix.  Enable collisions for
187  * friendlies again
188  * 
189  * 156   5/04/98 1:46p Allender
190  * new join procedure which should allow > 10 players accurately.  Fixed a
191  * minor UI problem on join screen
192  * 
193  * 155   4/30/98 12:49a Allender
194  * deal with asteroid problems in multiplayer
195  * 
196  * 154   4/25/98 7:40p Allender
197  * fixd some small hotkey stuff.  Worked on turret orientation being
198  * correct for multiplayer.  new sexpression called end-campaign will will
199  * end the main campaign
200  * 
201  * 153   4/22/98 5:53p Dave
202  * Large reworking of endgame sequencing. Updated multi host options
203  * screen for new artwork. Put in checks for host or team captains leaving
204  * midgame.
205  * 
206  * 152   4/22/98 5:00p Allender
207  * new multiplayer dead popup.  big changes to the comm menu system for  *
208  * team vs. team.  Start of debriefing stuff for team vs. team  Make form
209  * on my wing work with individual ships who have high priority 
210  * orders
211  * 
212  * 151   4/21/98 4:44p Dave
213  * Implement Vasudan ships in multiplayer. Added a debug function to bash
214  * player rank. Fixed a few rtvoice buffer overrun problems. Fixed ui
215  * problem in options screen. 
216  * 
217  * 150   4/20/98 12:40a Allender
218  * fixed nasty problem where network read code was not reentrant.  minor
219  * UI tweaks.  ingame joiners now get netgame info correctly.
220  *
221  * $NoKeywords: $
222  */
223
224
225
226 #ifndef MULTI_MSGS_H
227 #define MULTI_MSGS_H
228
229 #include "pstypes.h"
230 #include "psnet.h"
231
232 struct net_player;
233 struct object;
234 struct ship;
235 struct wing;
236 struct join_request;
237 struct button_info;
238 struct header;
239 struct beam_info;
240 struct ship_subsys;
241
242 // macros for building up packets -- to save on time and typing.  Important to note that local variables
243 // must be named correctly
244 // there are two flavors of sending orientation matrices, 16 bit and 32 bit. Just #define ORIENT_16 to use
245 // 16 bits, otherwise 32 bits is the default
246
247 #define BUILD_HEADER(t) do { data[0]=t; packet_size = HEADER_LENGTH; } while(0)
248 #define ADD_DATA(d) do { Assert((packet_size + sizeof(d)) < MAX_PACKET_SIZE); memcpy(data+packet_size, &d, sizeof(d) ); packet_size += sizeof(d); } while (0)
249 #define ADD_STRING(s) do { Assert((packet_size + strlen(s) + 4) < MAX_PACKET_SIZE);int len = strlen(s); ADD_DATA(len); memcpy(data+packet_size, s, len ); packet_size += len; } while(0)
250 #define ADD_ORIENT(d) { Assert((packet_size + 17) < MAX_PACKET_SIZE); ubyte dt[17]; multi_pack_orient_matrix(dt,&d); memcpy(data+packet_size,dt,17); packet_size += 17; }
251
252 #define GET_DATA(d) do { memcpy(&d, data+offset, sizeof(d) ); offset += sizeof(d); } while(0)
253 #define GET_STRING(s) do { int len;  memcpy(&len, data+offset, sizeof(len)); offset += sizeof(len); memcpy(s, data+offset, len); offset += len; s[len] = '\0'; } while(0)
254 #define GET_ORIENT(d) { ubyte dt[17]; memcpy(dt,data+offset,17); offset+=17; multi_unpack_orient_matrix(dt,&d); }
255
256 #define PACKET_SET_SIZE() do { hinfo->bytes_processed = offset; } while(0)
257
258 // defines for weapon status changes.
259 #define MULTI_PRIMARY_CHANGED           1
260 #define MULTI_SECONDARY_CHANGED 2
261
262 // data sending wrappers
263
264 // send the specified data packet to all players
265 void multi_io_send(net_player *pl, ubyte *data, int length);
266 void multi_io_send_to_all(ubyte *data, int length, net_player *ignore = NULL);
267 void multi_io_send_force(net_player *pl);
268
269 // send the data packet to all players via their reliable sockets
270 void multi_io_send_reliable(net_player *pl, ubyte *data, int length);
271 void multi_io_send_to_all_reliable(ubyte* data, int length, net_player *ignore = NULL);
272 void multi_io_send_reliable_force(net_player *pl);
273
274 // send all buffered packets
275 void multi_io_send_buffered_packets();
276
277
278 // packet handlers -------------------------------------------------------------------------------
279
280 // process an incoming join request packet
281 void process_join_packet( ubyte* data, header* hinfo );
282
283 // process an accept packet from the server
284 void process_accept_packet( ubyte* data, header* hinfo );
285
286 // process a notification for a new player who has joined the game
287 void process_new_player_packet(ubyte* data, header* hinfo);
288
289 // process an incoming hud message packet
290 void process_hud_message(ubyte* data, header* hinfo);
291
292 // process a notification the a player has left the game
293 void process_leave_game_packet(ubyte* data, header* hinfo);
294
295 // process information about an active game
296 void process_game_active_packet(ubyte* data, header* hinfo);
297
298 // process a query from a client looking for active freespace games
299 void process_game_query(ubyte* data, header* hinfo);
300
301 // process a general game chat packet, if we're the standalone we should rebroadcast
302 void process_game_chat_packet( ubyte *data, header *hinfo );
303
304 // process a game information update
305 void process_game_info_packet( ubyte *data, header *hinfo );
306
307 void process_team_update_packet(ubyte *data, header *hinfo);
308
309 // process a packet indicating a secondary weapon was fired
310 void process_secondary_fired_packet(ubyte* data, header* hinfo, int flag);
311
312 // process a packet indicating a countermeasure was fired
313 void process_countermeasure_fired_packet( ubyte *data, header *hinfo );
314
315 // process information about the netgame sent from the server/host
316 void process_netgame_update_packet( ubyte *data, header *hinfo );
317
318 // process an incoming netgame description packet
319 void process_netgame_descript_packet( ubyte *data, header *hinfo );
320
321 // process an incoming netplayer state update. if we're the server, we should rebroadcast
322 void process_netplayer_update_packet( ubyte *data, header *hinfo );
323
324 void process_ship_status_packet(ubyte *data, header *hinfo);
325 void process_player_order_packet(ubyte *data, header *hinfo);
326
327 // process an object update packet.  See send_object_update for information on how
328 // this packet data should be interpreted.  We send different information depending on
329 // on several variables (no change in orienation, etc).
330 void process_object_update_packet( ubyte *data, header *hinfo );
331
332 // process a packet indicating that a ship has been killed
333 void process_ship_kill_packet( ubyte *data, header *hinfo );
334
335 // process a packet saying that a wing should be created
336 void process_wing_create_packet( ubyte *data, header *hinfo );
337
338 // process a packet indicating a ship should be created
339 void process_ship_create_packet( ubyte *data, header *hinfo );
340
341 // process a packet indicating a ship is departing
342 void process_ship_depart_packet( ubyte *data, header *hinfo );
343
344 // process a mission log item packet
345 void process_mission_log_packet( ubyte *data, header *hinfo );
346
347 // process a mission message packet
348 void process_mission_message_packet( ubyte *data, header *hinfo );
349
350 // just send them a pong back as fast as possible
351 void process_ping_packet(ubyte *data, header *hinfo);
352
353 // right now it just routes the pong through to the standalone gui, which is the only
354 // system which uses ping and pong right now.
355 void process_pong_packet(ubyte *data, header *hinfo);
356
357 // process a request for a list of missions
358 void process_mission_request_packet(ubyte *data, header *hinfo);
359
360 // process an individual mission file item
361 void process_mission_item_packet(ubyte *data, header *hinfo);
362
363 // process a pause update packet (pause, unpause, etc)
364 void process_multi_pause_packet(ubyte *data, header *hinfo);
365
366 // process an ingame nak packet
367 void process_ingame_nak(ubyte *data, header *hinfo);
368
369 void process_ingame_ships_packet(ubyte *data, header *hinfo);
370 void process_ingame_wings_packet(ubyte *data, header *hinfo);
371
372 // process a packet indicating we should end the current mission
373 void process_endgame_packet(ubyte *data, header *hinfo);
374
375 // process a position/orientation update from an observer
376 void process_observer_update_packet(ubyte *data, header *hinfo);
377
378 void process_netplayer_slot_packet(ubyte *data, header *hinfo);
379 void process_netplayer_class_packet(ubyte *data, header *hinfo);
380
381 void process_subsys_update_packet(ubyte *data, header *hinfo);
382
383 void process_ingame_ship_update_packet(ubyte *data, header *hinfo);
384
385 void process_file_sig_packet(ubyte *data, header *hinfo);
386 void process_file_sig_request(ubyte *data, header *hinfo);
387
388 void process_ingame_respawn_points_packet(ubyte *data, header *hinfo);
389
390 void process_subsystem_destroyed_packet( ubyte *data, header *hinfo );
391
392 void process_netplayer_load_packet(ubyte *data, header *hinfo);
393
394 void process_jump_into_mission_packet(ubyte *data, header *hinfo);
395
396 void process_repair_info_packet(ubyte *data, header *hinfo);
397
398 void process_mission_sync_packet(ubyte *data, header *hinfo);
399
400 void process_store_stats_packet(ubyte *data, header *hinfo);
401
402 void process_debris_update_packet(ubyte *data, header *hinfo);
403
404 void process_ship_weapon_state_packet(ubyte *data, header *hinfo );
405 void process_ship_weapon_change( ubyte *data, header *hinfo );
406
407 void process_firing_info_packet( ubyte *data, header *hinfo );
408
409 // process a cargo revealed packet
410 void process_cargo_revealed_packet( ubyte *data, header *hinfo );
411
412 void process_subsystem_cargo_revealed_packet( ubyte *data, header *hinfo );
413
414 void process_mission_goal_info_packet( ubyte *data, header *hinfo );
415
416 void process_player_kick_packet(ubyte *data, header *hinfo);
417
418 void process_player_settings_packet(ubyte *data, header *hinfo);
419
420 void process_deny_packet(ubyte *data, header *hinfo);
421
422 void process_post_sync_data_packet(ubyte *data, header *hinfo);
423
424 void process_wss_slots_data_packet(ubyte *data, header *hinfo);
425
426 void process_shield_explosion_packet( ubyte *data, header *hinfo );
427
428 void process_player_stats_block_packet(ubyte *data, header *hinfo);
429
430 void process_host_restr_packet(ubyte *data, header *hinfo);
431
432 void process_netgame_end_error_packet(ubyte *data, header *hinfo);
433
434 void process_client_update_packet(ubyte *data, header *hinfo);
435
436 void process_countdown_packet(ubyte *data, header *hinfo);
437
438 // send a join packet request to the specified address (should be a server)
439 void send_join_packet(net_addr_t* addr,join_request *jr);
440
441 // send an accept packet to a client in response to a request to join the game
442 void send_accept_packet(int new_player_num, int code, int ingame_join_team = -1);
443
444 // send a general game chat packet (if msg_mode == MULTI_MSG_TARGET, need to pass in "to", if == MULTI_MSG_EXPR, need to pass in expr)
445 void send_game_chat_packet(net_player *from, char *msg, int msg_mode, net_player *to = NULL,char *expr = NULL,int server_msg = 0);
446
447 // send a game information update
448 void send_game_info_packet( void );
449
450 // send a notice that the player at net_addr is leaving (if target is NULL, the broadcast the packet)
451 void send_leave_game_packet(short player_id = -1,int kicked_reason = -1,net_player *target = NULL);
452
453 // send a packet indicating a secondary weapon was fired
454 void send_secondary_fired_packet( ship *shipp, ushort starting_sig, int starting_count, int num_fired, int allow_swarm );
455
456 // send a packet indicating a countermeasure was fired
457 void send_countermeasure_fired_packet( object *objp, int cmeasure_count, int rand_val );
458
459
460
461 // send_game_update_packet sends an updated Netgame structure to all players currently connected.  The update
462 // is used to change the current mission, current state, etc.
463 void send_netgame_update_packet(net_player *pl = NULL);
464
465 // sends information about netplayers in the game. if called on the server, broadcasts information about _all_ players
466 void send_netplayer_update_packet( net_player *pl = NULL );
467
468 void send_ship_status_packet(net_player *pl, button_info *bi, int id);
469 void send_player_order_packet(int type, int index, int command);
470
471 // send a request or a reply for mission description, if code == 0, request, if code == 1, reply
472 void send_netgame_descript_packet(net_addr_t *addr, int code);
473
474 // send object update packet sends object updates for all objects in the game.  This function will be smart
475 // about sending only certain objects to certain players based on the players distance from an object, whether
476 // the object is behind the player, etc.
477 void send_object_update_packet(int force_all = 0);
478
479 // send a packet indicating a ship has been killed
480 void send_ship_kill_packet( object *ship_obj, object *other_objp, float percent_killed, int self_destruct );
481
482 // send a packet indicating a wing of ships should be created
483 void send_wing_create_packet( wing *wingp, int num_to_create, int pre_create_count );
484
485 // send a packet indicating a ship should be created
486 void send_ship_create_packet( object *objp, int is_support = 0 );
487
488 // packet indicating a ship is departing
489 void send_ship_depart_packet( object *objp );
490
491 // send a mission log item packet
492 void send_mission_log_packet( int entry );
493
494 // send a mission message packet
495 void send_mission_message_packet(int id, char *who_from, int priority, int timing, int source, int builtin_type, int multi_target, int multi_team_filter);
496
497 // broadcast a query for active games. IPX will use net broadcast and TCP will either request from the MT or from the specified list
498 void broadcast_game_query();
499
500 // send an individual query to an address to see if there is an active game
501 void send_server_query(net_addr_t *addr);
502
503 // broadcast a hud message to all players
504 void send_hud_msg_to_all( char* msg );
505 void send_heartbeat();
506
507 // send a ping packet
508 void send_ping(net_addr_t *addr);
509
510 // send a pong packet
511 void send_pong(net_addr_t *addr);
512
513 // sent from host to master. give me the list of missions you have.
514 // this will be used only in a standalone mode
515 void send_mission_list_request( int what );
516
517 // send an individual mission file item
518 void send_mission_item(net_player *pl,char *file_name,char *mission_name);
519
520 // send a request to the server to pause or unpause the game
521 void send_multi_pause_packet(int pause);
522
523 // send an ack packet
524 void send_ingame_ack(int state,net_player *p);
525
526 // send an ingame nak packet
527 void send_ingame_nak(int state,net_player *p);
528
529 void send_ingame_ships_packet(net_player *pl);
530 void send_ingame_wings_packet(net_player *pl);
531
532 // send a notification that a new player has joined the game (if target != NULL, broadcast the packet)
533 void send_new_player_packet(int new_player_num,net_player *target);
534
535 // send a packet telling players to end the mission
536 void send_endgame_packet(net_player *pl = NULL);
537
538 // send a position/orientation update for myself (if I'm an observer)
539 void send_observer_update_packet();
540
541 void send_netplayer_slot_packet();
542
543 void send_subsys_update_packet(net_player *p);
544
545 void send_ingame_ship_update_packet(net_player *p,ship *sp);
546
547 void send_ingame_final_packet(int net_sig);
548
549 void send_file_sig_packet(ushort sum_sig,int length_sig);
550 void send_file_sig_request(char *file_name);
551
552 void send_subsystem_destroyed_packet( ship *shipp, int index, vector worldpos );
553
554 void send_netplayer_load_packet(net_player *pl);
555
556 void send_jump_into_mission_packet(net_player *pl = NULL);
557
558 void send_repair_info_packet(object *repaired_objp, object *repair_objp, int code );
559
560 void send_mission_sync_packet(int mode,int start_campaign = 0);
561
562 void send_store_stats_packet(int accept);
563
564 void send_debris_create_packet(object *objp, ushort net_signature, int model_num, vector exp_center );
565 void send_debris_update_packet(object *objp,int code);
566
567 void send_ship_weapon_change( ship *shipp, int what, int new_bank, int link_status );
568
569 // ALAN BEGIN
570
571 // send a request from the client to the host of the game (which is not necessarily the server in the case of the standalone) 
572 // mode == WSS_WEAPON_SELECT  or  WSS_SHIP_SELECT
573 void send_wss_request_packet(short player_id, int from_slot,int from_index, int to_slot, int to_index, int wl_ship_slot, int ship_class, int mode,net_player *p = NULL);
574 void process_wss_request_packet(ubyte *data, header *hinfo);
575
576 // send the update from the host to the clients
577 // wss_data is the pointer to a block of data returned by store_wss_stuff(...)
578 // 
579 // I would reccomend :
580 // int store_wss_data(ubyte *block);            // which returns bytes processed
581 // 
582 // so you would say :
583 // 
584 // ubyte block[MAX_PACKET_SIZE - 10 or so];
585 // int processed = store_wss_data(block);
586 // send_wss_update_packet(block,processed);
587 // 
588 // also :
589 // I would reccomend :
590 // int restore_wss_data(ubyte *block);          // which returns bytes processed
591 // 
592 // so I would say in the process_wss_update_packet() :
593 //
594 // int processed = restore_wss_data(block);
595 //      do_other_lowlevel_packet_related_stuff_here();
596 //
597 void send_wss_update_packet(int team_num,ubyte *wss_data,int size);
598 void process_wss_update_packet(ubyte *data, header *hinfo);
599 // ALAN END
600
601 void send_firing_info_packet(void);
602
603 void send_sh_transfer_complete_packet(int code);
604
605 // packet to tell clients cargo of a ship was revealed to all
606 void send_cargo_revealed_packet(ship *shipp);
607
608 void send_subsystem_cargo_revealed_packet(ship *shipp, int index);
609
610 void send_mission_goal_info_packet(int goal_num, int new_status, int valid);
611
612 void send_player_settings_packet(net_player *p = NULL);
613
614 void send_deny_packet(net_addr_t *addr, int code);
615
616 void send_post_sync_data_packet(net_player *p = NULL, int std_request = 1);
617
618 void send_wss_slots_data_packet(int team_num, int final, net_player *p = NULL, int std_request = 1);
619
620 void send_shield_explosion_packet(int objnum, int tri_num, vector hit_pos);
621
622 void send_player_stats_block_packet(net_player *pl, int stats_type, net_player *target = NULL);
623
624 void send_host_restr_packet(char *callsign, int code, int mode);
625
626 void send_netgame_end_error_packet(int notify_code, int err_code);
627
628 void send_client_update_packet(net_player *pl);
629
630 // send information about this currently active game to the specified address
631 void send_game_active_packet(net_addr_t* addr);
632
633 void send_ai_info_update_packet(object *objp, char what);
634 void process_ai_info_update_packet(ubyte *data, header *hinfo);
635
636 void send_asteroid_create(object *new_objp, object *parent_objp, int asteroid_type, vector *relvec);
637 void send_asteroid_throw(object *objp);
638 void send_asteroid_hit(object *objp, object *other_objp, vector *hitpos, float damage);
639 void process_asteroid_info(ubyte *data, header *hinfo);
640
641 void send_countermeasure_success_packet(int objnum);
642 void process_countermeasure_success_packet(ubyte *data, header *hinfo);
643
644 // host sends a -1 to the server to begin the countdown. server sends an int "seconds until start"
645 void send_countdown_packet(int time);
646
647 void send_debrief_info(int stage_count[], int *stage_active[]);
648 void process_debrief_info(ubyte *data, header *hinfo);
649
650 void send_accept_player_data(net_player *npp, int is_ingame);
651 void process_accept_player_data(ubyte *data, header *hinfo);
652
653 void send_homing_weapon_info(int num);
654 void process_homing_weapon_info(ubyte *data, header *hinfo);
655
656 // emp effect stuff
657 void send_emp_effect(ushort net_sig, float intensity, float time);
658 void process_emp_effect(ubyte *data, header *hinfo);
659
660 // for reinforcements
661 void send_reinforcement_avail( int rnum );
662 void process_reinforcement_avail( ubyte *data, header *hinfo );
663
664 // change iff stuff
665 void send_change_iff_packet(ushort net_signature, int new_team);
666 void process_change_iff_packet( ubyte *data, header *hinfo);
667
668 // new primary fired info
669 void send_NEW_primary_fired_packet(ship *shipp, int banks_fired);
670 void process_NEW_primary_fired_packet(ubyte *data, header *hinfo);
671
672 // new countermeasure fired info
673 void send_NEW_countermeasure_fired_packet(object *objp, int cmeasure_count, int rand_val);
674 void process_NEW_countermeasure_fired_packet(ubyte *data, header *hinfo);
675
676 // beam weapon packet
677 void send_beam_fired_packet(object *shooter, ship_subsys *turret, object *target, int beam_info_index, beam_info *override);
678 void process_beam_fired_packet(ubyte *data, header *hinfo);
679
680 // sw std query packet
681 void send_sw_query_packet(ubyte code, char *txt);
682 void process_sw_query_packet(ubyte *data, header *hinfo);
683
684 // event update packet
685 void send_event_update_packet(int event);
686 void process_event_update_packet(ubyte *data, header *hinfo);
687
688 // weapon detonate packet
689 void send_weapon_detonate_packet(object *objp);
690 void process_weapon_detonate_packet(ubyte *data, header *hinfo);
691
692 // turret fired packet
693 void send_turret_fired_packet( int objnum, int subsys_index, int weapon_objnum );
694 void process_turret_fired_packet( ubyte *data, header *hinfo );
695
696 // flak fired packet
697 void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum, float flak_range);
698 void process_flak_fired_packet(ubyte *data, header *hinfo);
699
700 // player pain packet
701 void send_player_pain_packet(net_player *pl, int weapon_info_index, float damage, vector *force, vector *hitpos);
702 void process_player_pain_packet(ubyte *data, header *hinfo);
703
704 // lightning packet
705 void send_lightning_packet(int bolt_type, vector *start, vector *strike);
706 void process_lightning_packet(ubyte *data, header *hinfo);
707
708 // bytes sent
709 void send_bytes_recvd_packet(net_player *pl);
710 void process_bytes_recvd_packet(ubyte *data, header *hinfo);
711
712 // host transfer
713 void send_host_captain_change_packet(short player_id, int captain_change);
714 void process_host_captain_change_packet(ubyte *data, header *hinfo);
715
716 // self destruct
717 void send_self_destruct_packet();
718 void process_self_destruct_packet(ubyte *data, header *hinfo);
719
720 #endif
721