75 #ifdef _MULTI_SUPER_WACKY_COMPRESSION
77 #define MAX_CODE ( ( 1 << BITS ) - 1 )
78 #define TABLE_SIZE 35023L
79 #define END_OF_STREAM 256
81 #define FLUSH_CODE 258
82 #define FIRST_CODE 259
91 static DICTIONARY dict[TABLE_SIZE];
92 static char decode_stack[TABLE_SIZE];
93 static uint next_code;
94 static int current_code_bits;
95 static uint next_bump_code;
97 typedef struct BitBuf {
107 mask = 1L << ( count - 1 );
110 bitbuf->rack |= bitbuf->mask;
112 if ( bitbuf->mask == 0 ) {
113 *bitbuf->data++=(
ubyte)bitbuf->rack;
121 uint input_bits( BitBuf *bitbuf,
int bit_count )
126 mask = 1L << ( bit_count - 1 );
129 if ( bitbuf->mask == 0x80 ) {
130 bitbuf->rack = *bitbuf->data++;
131 if ( bitbuf->rack == EOF )
132 return END_OF_STREAM;
134 if ( bitbuf->rack & bitbuf->mask )
135 return_value |=
mask;
138 if ( bitbuf->mask == 0 )
141 return( return_value );
145 static void InitializeDictionary()
149 for ( i = 0 ; i < TABLE_SIZE ; i++ )
150 dict[i].code_value = UNUSED;
152 next_code = FIRST_CODE;
153 current_code_bits = 9;
154 next_bump_code = 511;
158 static uint find_child_node(
int parent_code,
int child_character )
163 index = ( child_character << ( BITS - 8 ) ) ^ parent_code;
167 offset = TABLE_SIZE -
index;
169 if ( dict[ index ].code_value == UNUSED )
171 if ( dict[ index ].parent_code == parent_code &&
172 dict[ index ].character == (
char) child_character )
174 if ( (
int) index >=
offset )
177 index += TABLE_SIZE -
offset;
184 while ( code > 255 ) {
185 decode_stack[ count++ ] = dict[
code ].character;
186 code = dict[
code ].parent_code;
188 decode_stack[ count++ ] = (char) code;
192 int lzw_compress(
ubyte *outputbuf,
ubyte *inputbuf,
int input_size )
203 output.data = outputbuf;
205 InitializeDictionary();
207 string_code = *inputbuf++;
209 for ( i=1 ; i<input_size ; i++ ) {
210 character = *inputbuf++;
211 index = find_child_node( string_code, character );
212 if ( dict[ index ].code_value != - 1 )
213 string_code = dict[
index ].code_value;
215 dict[
index ].code_value = next_code++;
216 dict[
index ].parent_code = string_code;
217 dict[
index ].character = (char) character;
218 output_bits( &output, (
unsigned long) string_code, current_code_bits );
219 string_code = character;
220 if ( next_code > MAX_CODE ) {
221 output_bits( &output, (
unsigned long) FLUSH_CODE, current_code_bits );
222 InitializeDictionary();
223 }
else if ( next_code > next_bump_code ) {
224 output_bits( &output, (
unsigned long) BUMP_CODE, current_code_bits );
226 next_bump_code <<= 1;
231 output_bits( &output, (
unsigned long) string_code, current_code_bits );
232 output_bits( &output, (
unsigned long) END_OF_STREAM, current_code_bits);
234 if ( output.mask != 0x80 )
235 *output.data++ = (
ubyte)output.rack;
237 return output.data-outputbuf;
241 int lzw_expand(
ubyte *outputbuf,
ubyte *inputbuf )
252 input.data = inputbuf;
256 InitializeDictionary();
257 old_code = (
uint) input_bits( &input, current_code_bits );
258 if ( old_code == END_OF_STREAM )
260 character = old_code;
261 outputbuf[counter++] = (
ubyte )old_code;
263 new_code = (
uint) input_bits( &input, current_code_bits );
264 if ( new_code == END_OF_STREAM )
266 if ( new_code == FLUSH_CODE )
268 if ( new_code == BUMP_CODE ) {
272 if ( new_code >= next_code ) {
273 decode_stack[ 0 ] = (char) character;
274 count = decode_string( 1, old_code );
276 count = decode_string( 0, new_code );
278 character = decode_stack[ count - 1 ];
280 outputbuf[counter++] = (
ubyte )decode_stack[ --count ];
281 dict[ next_code ].parent_code = old_code;
282 dict[ next_code ].character = (char) character;
326 memcpy(&addr_tmp, addr,
sizeof(
net_addr));
420 if((ignore != NULL) && (&
Net_players[i] == ignore)){
508 if((ignore != NULL) && (&
Net_players[i] == ignore)){
558 if(
Net_players[idx].s_info.unreliable_buffer_size > 0){
564 if(
Net_players[idx].s_info.reliable_buffer_size > 0){
619 bool undeliverable =
true;
628 mode = (
ubyte)msg_mode;
686 undeliverable =
false;
721 int color_index,player_index,to_player_index,should_display,server_msg;
753 player_index = color_index;
756 if(player_index == -1){
757 nprintf((
"Network",
"Could not find player for processing game chat packet!\n"));
769 to_player_index = -1;
773 if(((to_player_index == -1) && (mode ==
MULTI_MSG_TARGET)) || (player_index == -1)){
860 char msg_buffer[255];
909 int team0_avail,team1_avail;
910 char join_string[255];
952 host_restr_mode = -1;
953 memset(join_string,0,255);
957 if(team0_avail && team1_avail){
959 sprintf(join_string,
"Player %s has tried to join. Accept on team 1 or 2 ?",jr.
callsign);
960 }
else if(team0_avail && !team1_avail){
962 sprintf(join_string,
"Player %s has tried to join team 0, accept y/n ? ?",jr.
callsign);
963 }
else if(!team0_avail && team1_avail){
965 sprintf(join_string,
"Player %s has tried to join team 1, accept y/n ?",jr.
callsign);
971 Assert(host_restr_mode != -1);
1065 int already_in_game = 0;
1066 int offset, new_player_num,player_num,new_flags;
1071 char new_player_pxo_squad[
LOGIN_LEN+1] =
"";
1072 char notify_string[256];
1092 Assert(player_num != -1);
1101 if ( !already_in_game ) {
1116 if(new_player_image[0] !=
'\0'){
1139 if(*
Net_players[new_player_num].m_player->callsign){
1194 #define PLAYER_DATA_SLOP 100
1271 int offset, player_num, player_slot_num, new_flags;
1286 Assert(player_slot_num != -1);
1455 char notify_string[256];
1458 Assert(new_player_num >= 0);
1476 if(ingame_join_team != -1){
1479 val = (
ubyte)ingame_join_team;
1496 Assert(!(code & (ACCEPT_HOST | ACCEPT_OBSERVER | ACCEPT_INGAME)));
1532 if(*
Net_players[new_player_num].m_player->callsign){
1538 if (!(code & ACCEPT_OBSERVER)) {
1543 if(
Net_players[new_player_num].tracker_player_id >= 0){
1570 Select_default_ship = 0;
1588 Assert(!(code & (ACCEPT_HOST | ACCEPT_OBSERVER | ACCEPT_INGAME)));
1627 if ( code & ACCEPT_INGAME ){
1630 if ( code & ACCEPT_OBSERVER ){
1633 if ( code & ACCEPT_HOST ){
1636 if ( code & ACCEPT_CLIENT ){
1689 val = (char)kicked_reason;
1692 if (player_id < 0) {
1705 nprintf((
"Network",
"Sending a leave game packet to all players (server)\n"));
1715 if (target == NULL) {
1743 if (player_num == -1) {
1744 nprintf((
"Network",
"Received leave game packet for unknown player, ignoring\n"));
1748 nprintf((
"Network",
"Received a leave game notice for %s\n",
Net_players[player_num].m_player->callsign));
1752 if (kicked_reason >= 0){
1757 switch(kicked_reason){
1780 memset(str, 0, 512);
1822 nprintf((
"Network",
"Should reset!!\n"));
1940 int modes_compatible = 1;
1961 modes_compatible = 0;
1964 modes_compatible = 0;
2180 packet_size += desc_len;
2250 if(s_moveup != NULL){
2253 s_moveup = s_moveup->
next;
2403 while(stop != 0xff){
2464 #define EXTRA_DEATH_VAPORIZED (1<<0)
2465 #define EXTRA_DEATH_WASHED (1<<1)
2481 extra_death_info = 0;
2493 debris_signature = 0;
2494 if ( pm && !vaporized ) {
2504 if ( other_objp == NULL ) {
2509 nprintf((
"Network",
"Don't know other_obj for ship kill packet, sending NULL\n"));
2516 sd = (
ubyte)self_destruct;
2533 temp = (char)
Net_players[pnum].m_player->killer_objtype;
2537 temp = (char)
Net_players[pnum].m_player->killer_species;
2541 temp2 = (short)
Net_players[pnum].m_player->killer_weapon_index;
2560 ushort ship_sig, other_sig, debris_sig;
2561 object *sobjp, *oobjp;
2562 float percent_killed;
2563 ubyte was_player, extra_death_info, sd;
2565 short killer_weapon_index = -1;
2579 if ( was_player != 0 ) {
2592 if ( sobjp == NULL ) {
2593 nprintf((
"Network",
"Couldn't find net signature %d for kill packet\n", ship_sig));
2606 if (extra_death_info & EXTRA_DEATH_VAPORIZED) {
2612 if ( was_player != 0 ) {
2668 int offset, objnum, is_support;
2684 if ( !is_support ) {
2686 if ( objp != NULL ) {
2689 nprintf((
"Network",
"Ship with sig %d not found on ship arrival list -- not creating!!\n", signature));
2739 int total_arrived_count, current_wave;
2751 if ( (index < 0) || (index >=
Num_wings) || (
Wings[index].num_waves == -1) ) {
2752 nprintf((
"Network",
"Invalid index %d for wing create packet\n", index));
2755 if ( (num_to_create <= 0) || (num_to_create >
Wings[index].wave_count) ) {
2756 nprintf((
"Network",
"Invalid number of ships to create (%d) for wing %s\n", num_to_create,
Wings[index].
name));
2804 if ( objp == NULL ) {
2805 nprintf((
"network",
"Couldn't find object with net signature %d to depart\n", signature ));
2816 nprintf((
"network",
"Can not process ship depart packed. Object with net signature %d is not a ship!\n", signature ));
2861 if ( objp == NULL ) {
2862 nprintf((
"Network",
"Could not find object with net signature %d for cargo revealed\n", signature ));
2913 if ( objp == NULL ) {
2914 nprintf((
"Network",
"Could not find object with net signature %d for cargo hidden\n", signature ));
2933 #define SFPF_ALLOW_SWARM (1<<7)
2934 #define SFPF_DUAL_FIRE (1<<6)
2935 #define SFPF_TARGET_LOCKED (1<<5)
2953 if ( num_fired == 0 ) {
2970 sinfo = current_bank;
2987 target_signature = 0;
2995 Assert( s_index < CHAR_MAX );
2996 t_subsys = (char)s_index;
3016 if ( net_player_num < 0 ) {
3024 if ( num_fired > 0 ) {
3049 int offset, allow_swarm, target_objnum_save;
3050 ushort net_signature, starting_sig, target_signature;
3051 ubyte sinfo, current_bank;
3052 object*
objp, *target_objp;
3063 if ( !from_player ) {
3075 if ( objp == NULL ) {
3076 nprintf((
"Network",
"Could not find ship for fire secondary packet!"));
3121 current_bank = (
ubyte)(sinfo & 0x3);
3140 if ( target_objp != NULL ) {
3143 if ( (t_subsys != -1) && (target_objp->
type ==
OBJ_SHIP) ) {
3148 if ( starting_sig != 0 ){
3169 Assert ( cmeasure_count < UCHAR_MAX );
3193 if ( objp == NULL ) {
3194 nprintf((
"network",
"Could find object whose countermeasures are being launched!!!\n"));
3205 nprintf((
"network",
"firing countermeasure from my ship\n"));
3228 objp = &
Objects[weapon_objnum];
3236 Assert( subsys_index < UCHAR_MAX );
3237 cindex = (
ubyte)subsys_index;
3266 int offset, weapon_objnum, wid = -1;
3267 ushort pnet_signature, wnet_signature;
3276 short pitch, heading;
3295 if ( objp == NULL ) {
3296 nprintf((
"network",
"could find parent object with net signature %d for turret firing\n", pnet_signature));
3333 if(wnet_signature != 0){
3339 if (weapon_objnum != -1) {
3361 sindex = entry->
index;
3406 Assert ( (priority >= 0) && (priority < UCHAR_MAX) );
3407 Assert ( (timing >= 0) && (timing < UCHAR_MAX) );
3409 up = (
ubyte) priority;
3410 us = (
ubyte) source;
3411 utime = (
ubyte)timing;
3423 if (multi_target == -1){
3433 int offset,
id, builtin_type, delay;
3436 int multi_team_filter;
3454 mprintf((
"Builtin message of type %d filtered out in process_mission_message_packet()\n",
id));
3529 unsigned char data[8];
3540 unsigned char data[8];
3563 #define MAX_MISSION_ITEMS_BYTES (MAX_PACKET_SIZE - (sizeof(multi_create_info) + 1) )
3566 #define MISSION_LIST_ITEMS 1
3567 #define CAMPAIGN_LIST_ITEMS 2
3644 if(player_num == -1){
3645 nprintf((
"Network",
"Could not find player to send mission list items to!\n"));
3719 val = (
ubyte) pause;
3744 if(player_index == -1){
3814 nprintf((
"Network",
"Mission file rejected by server, aborting...\n"));
3845 ml_string(
"Receiving force end mission packet");
3906 Assert(player_num != -1);
3999 if((obs_num < 0) || (
Net_players[obs_num].m_player->objnum < 0)){
4004 if(target_sig == 0){
4049 int player_num,ship_class,ship_index;
4068 nprintf((
"Network",
"Error looking up player for object/slot assignment!!\n"));
4075 Error(
LOCATION,
"Could not retrieve net object for signature %d!\n", net_sig);
4106 utmp = (
ubyte)(what);
4108 utmp = (
ubyte)(new_bank);
4110 utmp = (
ubyte)(link_status);
4121 ubyte what, new_bank, link_status;
4133 if ( objp == NULL ) {
4134 nprintf((
"network",
"Unable to locate ship with signature %d for weapon state change\n", signature));
4179 #define SHIP_STATUS_REPEAT 2
4209 int player_num,unique_id;
4282 target_signature = 0;
4294 Assert( s_index < CHAR_MAX );
4295 t_subsys = (char)s_index;
4309 int offset, player_num, command, index = 0, tobjnum_save;
4311 char t_subsys,
type;
4312 object *
objp, *target_objp;
4335 if(player_num == -1){
4336 nprintf((
"Network",
"Received player order packet from unknown player\n"));
4342 nprintf((
"Network",
"not doing player order because object requestting is not a ship\n"));
4359 nprintf((
"Network",
"Received player order packet from player not allowed to give orders!!\n"));
4377 if ( target_objp == NULL ) {
4381 targeted_subsys = NULL;
4382 if ( t_subsys != -1 ) {
4383 Assert( target_objp != NULL );
4392 if ( target_objp ) {
4487 vec3d tmp, local_hitpos;
4490 Assert ( index < UCHAR_MAX );
4491 uindex = (
ubyte)(index);
4512 vec3d local_hit_pos, world_hit_pos;
4522 if ( objp != NULL ) {
4537 if (subsysp == NULL) {
4538 nprintf((
"Network",
"Could not find subsys %d for ship %s to process as being destroyed\n", (
int)uindex, shipp->
ship_name ));
4562 Assert ( index < UCHAR_MAX );
4563 uindex = (
ubyte)(index);
4597 if ( objp == NULL ) {
4598 nprintf((
"Network",
"Could not find object with net signature %d for cargo revealed\n", signature ));
4611 if (subsysp == NULL) {
4631 Assert ( index < UCHAR_MAX );
4632 uindex = (
ubyte)(index);
4666 if ( objp == NULL ) {
4667 nprintf((
"Network",
"Could not find object with net signature %d for cargo hidden\n", signature ));
4680 if (subsysp == NULL) {
4723 nprintf((
"Network",
"Loading mission..."));
4743 nprintf((
"Network",
"Finished loading mission\n"));
4820 ml_string(
NOX(
"Client received mission start from server - entering mission"));
4827 "REPAIR_INFO_BEGIN",
4829 "REPAIR_INFO_UPDATE",
4830 "REPAIR_INFO_QUEUE",
4831 "REPAIR_INFO_ABORT",
4832 "REPAIR_INFO_BROKEN",
4833 "REPAIR_INFO_WARP_ADD",
4834 "REPAIR_INFO_WARP_REMOVE",
4835 "REPAIR_INFO_ONWAY",
4836 "REPAIR_INFO_KILLED",
4837 "REPAIR_INFO_COMPLETE",
4848 ushort repaired_signature, repair_signature;
4857 repair_signature = 0;
4876 ushort repaired_signature, repair_signature;
4877 object *repaired_objp, *repair_objp;
4888 nprintf((
"Network",
"Repair: %s received (%s/%s)\n", repair_text[code], (repaired_objp==NULL)?
"<None>":
Ships[repaired_objp->
instance].
ship_name, (repair_objp==NULL)?
"<None>":Ships[repair_objp->
instance].ship_name));
4894 if ( repaired_objp == NULL ) {
4950 ubyte docker_index, dockee_index;
4966 Assert (other_objp != NULL);
4967 if (other_objp == NULL) {
4973 Assert (other_objp == NULL);
4987 Assert( other_objp != NULL );
5001 Assert( other_objp != NULL );
5024 if ( shipnum != -1 ) {
5025 Assert( Ships[shipnum].objnum != -1 );
5028 other_signature = 0;
5059 ushort net_signature, other_net_signature;
5060 object *
objp, *other_objp;
5064 ubyte docker_index = 0, dockee_index = 0;
5070 nprintf((
"Network",
"Couldn't find object for ai update\n"));
5079 nprintf((
"Network",
"Couldn't find other object for ai update on dock\n"));
5147 nprintf((
"Network",
"Invalid code for ai update: %d\n", code));
5173 is_campaign = (
ubyte)start_campaign;
5197 ubyte campaign_flag;
5257 val = (
ubyte)accept;
5279 nprintf((
"Network",
"Standalone received store stats packet - rebroadcasting..\n"));
5321 object bogus_object;
5331 objp = &bogus_object;
5344 if(objp != &bogus_object){
5351 if(objp != &bogus_object)
5392 int from_slot,from_index;
5393 int to_slot,to_index;
5395 int wl_ship_slot,ship_class;
5413 Assert(player_num != -1);
5414 if(player_num == -1){
5426 wl_drop(from_slot,from_index,to_slot,to_index,wl_ship_slot,player_num);
5429 multi_ts_drop(from_slot,from_index,to_slot,to_index,ship_class,player_num);
5447 team = (
ubyte)team_num;
5454 memcpy(data + packet_size,wss_data,size);
5455 packet_size +=
size;
5487 Assert(player_index != -1);
5488 if(player_index < 0){
5524 ubyte plinked, sdual;
5540 ubyte plinked, sdual;
5553 nprintf((
"Network",
"Received firing info packet from unknown player, ignoring\n"));
5590 int offset, goal_num, new_status, valid;
5599 if ( new_status != -1 ){
5653 while(stop != 0xff){
5659 if(player_num == -1){
5754 popup(
PF_USE_AFFIRMATIVE_ICON,1,
POPUP_OK,
XSTR(
"You cannot join this game because you are running an older version of FreeSpace than the server. Exit FreeSpace, and choose the 'Update FreeSpace' button in the FreeSpace launcher to download the latest version of FreeSpace.",734));
5778 int idx, player_index;
5786 val = (
ubyte)std_request;
5822 val = (
ubyte)ship_count;
5857 if(player_index == -1){
5973 ushort net_sig, ship_ets, sval;
6016 Multi_ts_num_deleted--;
6017 nprintf((
"Network",
"Couldn't find object by net signature for ship delete in post sync data packet\n"));
6026 for(idx=0; idx<ship_count; idx++){
6036 Assertion(objp != NULL,
"idx: %d, ship_count: %d, sinfo_index: %u, ts_index: %u, net_sig: %u",
6037 idx, ship_count, sinfo_index, ts_index, net_sig);
6038 Assertion(objp->
type ==
OBJ_SHIP,
"type: %d, idx: %d, ship_count: %d, sinfo_index: %u, ts_index: %u, net_sig: %u",
6039 objp->
type, idx, ship_count, sinfo_index, ts_index, net_sig);
6049 for(idx=0; idx<ship_count; idx++){
6165 val = (
ubyte)std_request;
6169 val = (
ubyte)team_num;
6297 #define OBJ_VISIBILITY_DOT 0.6f
6308 Assert( tri_num < UCHAR_MAX );
6309 utri_num = (
ubyte)tri_num;
6380 Assert( utri_num < shieldp->ntris );
6381 stri = shieldp->
tris[utri_num];
6383 for ( i = 0; i < 3; i++ ) {
6410 val = (
ubyte)stats_code;
6537 ushort u_tmp, num_medals;
6545 if (player_num == -1) {
6546 nprintf((
"Network",
"Couldn't find player for stats update!\n"));
6547 ml_string(
"Couldn't find player for stats update!\n");
6584 for (idx=0; (idx <
Num_medals) && (idx < num_medals); idx++) {
6627 ml_string(
"Received STATS_MISSION_KILLS\n");
6635 ml_string(
"Received STATS_DOGFIGHT_KILLS\n");
6636 if(player_num >= 0){
6642 if(player_num >= 0){
6667 ubyte packet_type, atype;
6671 if (relvec != NULL )
6677 Assert( asteroid_type < UCHAR_MAX );
6678 atype = (
ubyte)asteroid_type;
6713 if ( hitpos != NULL )
6722 if(other_objp == NULL){
6723 ushort invalid_sig = 0xffff;
6743 switch( packet_type ) {
6746 ushort psignature, signature;
6749 object *parent_objp;
6759 if ( parent_objp ) {
6762 nprintf((
"Network",
"Couldn't create asteroid because parent wasn't found!!!\n"));
6780 nprintf((
"Network",
"Couldn't throw asteroid because couldn't find it\n"));
6790 ushort signature, osignature;
6791 object *
objp, *other_objp;
6801 if(osignature == 0xffff){
6807 nprintf((
"Network",
"Cannot hit asteroid because signature isn't found\n"));
6885 HUD_printf(
XSTR(
"Player %s has tried to join - allow (y/n) ?",736),callsign);
6918 code = (char)notify_code;
6920 code = (char)err_code;
6930 char notify_code,error_code;
6949 nprintf((
"Network",
"Coulnd't find player for countermeasure success packet\n"));
6972 #define UPDATE_IS_PAUSED (1<<0)
6973 #define UPDATE_HULL_INFO (1<<1)
7004 ubyte percent, ns, threats, n_quadrants;
7029 for (i = 0; i < n_quadrants; i++ ) {
7077 int is_paused, have_hull_info;
7080 float weapon_energy;
7093 if(player_index != -1){
7101 if ( have_hull_info ) {
7117 shield_percent.resize(n_quadrants);
7118 for (i = 0; i < n_quadrants; i++ ){
7120 shield_percent[
i] = ub_tmp;
7125 for ( i = 0; i < n_subsystems; i++ ){
7127 subsystem_percent[
i] = ub_tmp;
7137 for(i=0; i<ammo_count; i++){
7152 for ( i = 0; i < n_quadrants; i++ ) {
7153 if (i < objp->n_quadrants) {
7167 fl_val = subsystem_percent[n_subsystems] * subsysp->
max_hits / 100.0f;
7182 for(i=0; i<ammo_count; i++){
7272 count = stage_count[
i];
7274 for ( j = 0; j <
count; j++ ) {
7275 i_tmp = stages[
i][j];
7296 stages[
i] = active_stages[
i];
7297 for ( j = 0; j <
count; j++ ) {
7299 active_stages[
i][j] = i_tmp;
7317 object *homing_object;
7332 homing_signature = 0;
7342 Assert( s_index < CHAR_MAX );
7343 t_subsys = (char)s_index;
7360 ushort weapon_signature, homing_signature;
7362 object *homing_object, *weapon_objp;
7375 if ( weapon_objp == NULL ) {
7376 nprintf((
"Network",
"Couldn't find weapon object for homing update -- skipping update\n"));
7384 if ( homing_object == NULL ) {
7385 nprintf((
"Network",
"Couldn't find homing object for homing update\n"));
7395 nprintf((
"Network",
"Homing object is invalid for homing update\n"));
7404 if ( h_subsys != -1 ) {
7433 float intensity, time;
7550 int observer_team, observed_team, alternate_iff_color;
7598 char subsys_buf[255];
7642 if(banks_fired <= 0){
7702 if ( objp == NULL ) {
7703 nprintf((
"Network",
"Could not find ship for fire primary packet NEW!"));
7772 Assert ( cmeasure_count < UCHAR_MAX );
7777 nprintf((
"Network",
"Sending NEW countermeasure packet!\n"));
7810 if ( objp == NULL ) {
7811 nprintf((
"network",
"Could find object whose countermeasures are being launched!!!\n"));
7830 nprintf((
"network",
"firing countermeasure from my ship\n"));
7850 Assert(
override != NULL);
7851 if((shooter == NULL) || (turret == NULL) || (
override == NULL)){
7857 if (target == NULL) {
7864 u_beam_info = (
short)beam_info_index;
7866 if (bfi_flags & BFIF_IS_FIGHTER_BEAM) {
7867 Assert( (bank_point >= 0) && (bank_point < UCHAR_MAX) );
7868 subsys_index = (char)bank_point;
7873 Assert(subsys_index >= 0);
7874 if (subsys_index < 0) {
7890 for (
int i = 0; i < b_info.
shot_count; i++) {
7911 ushort shooter_sig, target_sig;
7961 nprintf((
"Network",
"Couldn't get shooter info for BEAM weapon!\n"));
7978 nprintf((
"Network",
"Couldn't get target info for BEAM weapon!\n"));
7986 int bank = (
ubyte)subsys_index % 10;
7987 int point = (
ubyte)subsys_index / 10;
8007 fire_info.
bank = bank;
8011 if (fire_info.
turret == NULL) {
8012 nprintf((
"Network",
"Couldn't get turret for BEAM weapon!\n"));
8092 else if((store_flags & MEF_DIRECTIVE_SPECIAL) && !(
Mission_events[u_event].flags & MEF_DIRECTIVE_SPECIAL)){
8125 int ship_index, bank_type, bank_number, ammo_left, rearm_limit, new_weapon_index;
8143 if (new_weapon_index < 0)
8150 shipp = &
Ships[ship_index];
8156 else if (bank_type == 1)
8159 if (new_weapon_index < 0)
8166 shipp = &
Ships[ship_index];
8173 nprintf((
"network",
"weapon_or_ammo_changed_packet recived for tertiary or other unsupported type\n"));
8256 object *
objp = NULL;
8285 objp = &
Objects[weapon_objnum];
8289 Assert( subsys_index < UCHAR_MAX );
8290 cindex = (
ubyte)subsys_index;
8315 int offset, weapon_objnum, wid = -1;
8324 short pitch, heading;
8339 if ( objp == NULL ) {
8340 nprintf((
"network",
"could find parent object with net signature %d for flak firing\n", pnet_signature));
8379 if (weapon_objnum != -1) {
8393 #define ADD_NORM_VEC(d) do { Assert((packet_size + 3) < MAX_PACKET_SIZE); char vnorm[3] = { (char)(d.x * 127.0f), (char)(d.y * 127.0f), (char)(d.z * 127.0f) }; memcpy(data + packet_size, vnorm, 3); packet_size += 3; } while(0);
8394 #define GET_NORM_VEC(d) do { char vnorm[3]; memcpy(vnorm, data+offset, 3); d.x = (float)vnorm[0] / 127.0f; d.y = (float)vnorm[1] / 127.0f; d.z = (float)vnorm[2] / 127.0f; } while(0);
8415 windex = (short)weapon_info_index;
8417 udamage = (
ushort)damage;
8435 vec3d local_hit_pos;
8482 val = (char)bolt_type_internal;
8494 char bolt_type_internal;
8505 if(bolt_type_internal < 0){
8510 nebl_bolt(bolt_type_internal, &start, &strike);
8583 int idx, found_player, captain_change;
8710 if (num_ubytes < 9) {
8711 Warning(
LOCATION,
"Invalid call to send_sexp_packet. Not enough data included!");
8717 val = (
ushort)num_ubytes;
8720 for (i =0; i < num_ubytes; i++) {
8740 for (i=0; i < num_ubytes; i++) {
void asteroid_sub_create(object *parent_objp, int asteroid_type, vec3d *relvec)
#define NETINFO_FLAG_WARPING_OUT
void ship_wing_cleanup(int shipnum, wing *wingp)
void send_change_ai_class_packet(ushort net_signature, char *subsystem, int new_ai_class)
void send_variable_update_packet(int variable_index, char *value)
void message_queue_message(int message_num, int priority, int timing, char *who_from, int source, int group, int delay, int builtin_type)
char * Cmdline_connect_addr
void send_shield_explosion_packet(int objnum, int tri_num, vec3d hit_pos)
#define REARM_REPAIR_ME_ITEM
#define SQUAD_MSG_REINFORCEMENT
void send_turret_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum)
int timestamp(int delta_ms)
#define NETINFO_FLAG_ACCEPT_INGAME
#define MULTIPLAYER_CLIENT
#define SUBSYSTEM_DESTROYED
#define MY_NET_PLAYER_NUM
#define NETGAME_STATE_DEBRIEF
void obj_set_flags(object *obj, uint new_flags)
float get_max_shield_quad(object *objp)
model_subsystem * system_info
void send_beam_fired_packet(object *shooter, ship_subsys *turret, object *target, int beam_info_index, beam_info *override, int bfi_flags, int bank_point)
#define NETPLAYER_STATE_HOST_SETUP
weapon Weapons[MAX_WEAPONS]
int primary_bank_weapons[MAX_SHIP_PRIMARY_BANKS]
#define NETPLAYER_STATE_IN_MISSION
void hud_gauge_popup_start(int gauge_index, int time)
Start a gauge to pop-up.
#define SUBSYS_CARGO_HIDDEN
void process_ship_create_packet(ubyte *data, header *hinfo)
void ai_mission_goal_complete(ai_info *aip)
#define MULTI_END_NOTIFY_KICKED_INGAME_ENDED
void multi_debrief_stats_accept()
void send_server_query(net_addr *addr)
int multi_msg_matches_expr(net_player *np, const char *expr)
void sexp_packet_received(ubyte *received_packet, int num_ubytes)
void process_ai_info_update_packet(ubyte *data, header *hinfo)
float vm_vec_mag_quick(const vec3d *v)
int kills[MAX_SHIP_CLASSES]
void player_set_squad_bitmap(player *p, char *fname, bool ismulti)
void mission_parse_support_arrived(int objnum)
char name[MAX_GAMENAME_LEN+1]
void process_ship_kill_packet(ubyte *data, header *hinfo)
void send_sw_query_packet(ubyte code, char *txt)
#define SHIP_STATUS_CHANGE
int multi_pack_unpack_orient(int write, ubyte *data, matrix *orient)
#define NETGAME_STATE_PAUSED
#define MULTI_MSG_FRIENDLY
void add_join_request(ubyte *data, int *size, join_request *jr)
void process_ping_packet(ubyte *data, header *hinfo)
char Game_current_mission_filename[MAX_FILENAME_LEN]
void send_store_stats_packet(int accept)
polymodel * model_get(int model_num)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
#define JOIN_DENY_JR_NOOBS
void send_reinforcement_avail(int rnum)
#define PLAYER_ORDER_PACKET
SCP_vector< game_snd > Snds
void send_NEW_countermeasure_fired_packet(object *objp, int cmeasure_count, int rand_val)
#define NETPLAYER_STATE_MISSION_LOADED
#define AG_FLAG_IN_MISSION
void process_change_iff_color_packet(ubyte *data, header *hinfo)
submodel_instance_info submodel_info_1
void send_self_destruct_packet()
void multi_ingame_observer_finish()
void send_ship_create_packet(object *objp, int is_support)
GLsizei const GLfloat * value
#define PACKET_SET_SIZE()
void multi_ts_create_wings()
void process_observer_update_packet(ubyte *data, header *hinfo)
ushort multi_get_next_network_signature(int what_kind)
int multi_eval_join_request(join_request *jr, net_addr *addr)
int weapon_create(vec3d *pos, matrix *orient, int weapon_type, int parent_obj, int group_id=-1, int is_locked=0, int is_spawned=0, float fof_cooldown=0.0f, ship_subsys *src_turret=NULL)
#define JOIN_DENY_JR_TRACKER_INVAL
void multi_untag_player_ships()
#define NETPLAYER_STATE_MISSION_LOADING
#define EXTRA_DEATH_VAPORIZED
void obj_reset_all_collisions()
int Multi_restr_query_timestamp
ship_subsys fighter_beam_turret_data
#define MULTI_PRIMARY_CHANGED
void hud_squadmsg_call_reinforcement(int reinforcement_num, int player_num)
#define SQUADMSG_HISTORY_ADD_ENTRY
#define NETGAME_STATE_BRIEFING
void ship_hit_pain(float damage, int quadrant)
void multi_options_update_local()
int ship_iff_color[MAX_IFFS][MAX_IFFS]
void send_netplayer_update_packet(net_player *pl)
void psnet_mark_received(PSNET_SOCKET_RELIABLE socket)
void ship_add_exited_ship(ship *sp, int reason)
void process_game_chat_packet(ubyte *data, header *hinfo)
#define MULTI_STANDALONE(np)
#define MULTI_SYNC_PRE_BRIEFING
int next_secondary_fire_stamp[MAX_SHIP_SECONDARY_BANKS]
int gameseq_get_state(void)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void multi_io_send(net_player *pl, ubyte *data, int len)
#define NETPLAYER_STATE_SLOT_ACK
void add_net_addr(ubyte *data, int *size, net_addr *addr)
int multi_obs_create_player(int player_num, char *name, net_addr *addr, player *pl)
int detail[MAX_MODEL_DETAIL_LEVELS]
void send_secondary_fired_packet(ship *shipp, ushort starting_sig, int starting_count, int num_fired, int allow_swarm)
void process_countdown_packet(ubyte *data, header *hinfo)
submodel_instance_info submodel_info_2
void process_variable_update_packet(ubyte *data, header *hinfo)
void process_homing_weapon_info(ubyte *data, header *hinfo)
#define NETINFO_FLAG_OBSERVER
int hud_squadmsg_send_wing_command(int wingnum, int command, int send_message, int update_history, int player_num)
void multi_io_send_to_all_reliable(ubyte *data, int length, net_player *ignore)
int ship_fire_primary(object *obj, int stream_weapons, int force)
void process_turret_fired_packet(ubyte *data, header *hinfo)
int weapon_recharge_index
void process_force_end_mission_packet(ubyte *data, header *hinfo)
void process_mission_request_packet(ubyte *data, header *hinfo)
void server_verify_filesig(short player_id, ushort sum_sig, int length_sig)
unsigned int mp_shots_fired
void process_repair_info_packet(ubyte *data, header *hinfo)
void send_cargo_hidden_packet(ship *shipp)
void process_flak_fired_packet(ubyte *data, header *hinfo)
void process_subsystem_cargo_hidden_packet(ubyte *data, header *hinfo)
void process_mission_message_packet(ubyte *data, header *hinfo)
void send_subsystem_cargo_revealed_packet(ship *shipp, int index)
unsigned int mp_bonehead_hits
struct vec3d::@225::@227 xyz
#define KICK_REASON_BAD_XFER
void multi_io_send_reliable(net_player *pl, ubyte *data, int len)
ship_subsys * target_subsys
int message_filter_multi(int id)
#define NETPLAYER_IS_OBSERVER(player)
void process_debris_update_packet(ubyte *data, header *hinfo)
int find_player_id(short player_id)
void mission_goal_validation_change(int goal_num, int valid)
#define NETPLAYER_STATE_JOINING
void ml_string(const char *string, int add_time)
#define MULTI_END_NOTIFY_EARLY_END
#define PLAYER_FLAGS_HAS_PLAYED_PXO
void send_asteroid_throw(object *objp)
int psnet_rel_send(PSNET_SOCKET_RELIABLE socketid, ubyte *data, int length, int np_index)
void ship_do_cargo_revealed(ship *shipp, int from_network)
void send_file_sig_request(char *file_name)
void send_ship_kill_packet(object *objp, object *other_objp, float percent_killed, int self_destruct)
#define SEF_PLAYER_DELETED
void send_NEW_primary_fired_packet(ship *shipp, int banks_fired)
ai_info Ai_info[MAX_AI_INFO]
vec3d * vm_vec_rotate(vec3d *dest, const vec3d *src, const matrix *m)
void process_countermeasure_success_packet(ubyte *data, header *hinfo)
#define Assertion(expr, msg,...)
#define CAMPAIGN_LIST_ITEMS
int dock_find_dockpoint_used_by_object(object *objp, object *other_objp)
void process_wing_create_packet(ubyte *data, header *hinfo)
#define END_OF_LIST(head)
void process_host_captain_change_packet(ubyte *data, header *hinfo)
void send_game_active_packet(net_addr *addr)
char mission_name[NAME_LENGTH+1]
#define MEF_DIRECTIVE_SPECIAL
#define NETPLAYER_STATE_JOINED
int restore_wss_data(ubyte *block)
ship_subsys * targeted_subsys
#define NETGAME_STATE_STD_HOST_SETUP
void mission_log_add_entry_multi(int type, char *pname, char *sname, int index, fix timestamp, int flags)
unsigned int ms_bonehead_hits
net_player * Multi_pause_pauser
sexp_variable Sexp_variables[MAX_SEXP_VARIABLES]
float shot_aim[MAX_BEAM_SHOTS]
void send_join_packet(net_addr *addr, join_request *jr)
#define MULTI_JOIN_RESTR_MODE_2
ship_subsys * homing_subsys
#define NETPLAYER_STATE_SETTINGS_ACK
void ship_do_cap_subsys_cargo_revealed(ship *shipp, ship_subsys *subsys, int from_network)
void send_netgame_update_packet(net_player *pl)
void process_sexp_packet(ubyte *data, header *hinfo)
int ship_fire_secondary(object *obj, int allow_swarm)
#define MISSION_LIST_ITEMS
void send_repair_info_packet(object *repaired_objp, object *repair_objp, int code)
unsigned int s_shots_fired
log_entry log_entries[MAX_LOG_ENTRIES]
int current_secondary_bank
void send_hud_msg_to_all(char *msg)
void multi_handle_sudden_mission_end()
void process_store_stats_packet(ubyte *data, header *hinfo)
void HUD_sourced_printf(int source, const char *format,...)
void multi_io_send_to_all(ubyte *data, int length, net_player *ignore)
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, int delay)
void multi_team_host_lock_all()
void process_NEW_primary_fired_packet(ubyte *data, header *hinfo)
void multi_debrief_stats_toss()
ship_subsys_info subsys_info[SUBSYSTEM_MAX]
void ship_apply_whack(vec3d *force, vec3d *hit_pos, object *objp)
void process_debrief_info(ubyte *data, header *hinfo)
multi_local_options player_options
vec3d turret_firing_point[MAX_TFP]
void ship_get_global_turret_info(object *objp, model_subsystem *tp, vec3d *gpos, vec3d *gvec)
void multi_create_handle_join(net_player *pl)
void nebl_bolt(size_t type, vec3d *start, vec3d *strike)
unsigned int mp_shots_hit
int psnet_same(net_addr *a1, net_addr *a2)
#define SECONDARY_FIRED_PLR
#define MULTI_JOIN_RESTR_MODE_4
#define MULTI_JOIN_RESTR_MODE_1
void process_new_player_packet(ubyte *data, header *hinfo)
void std_update_player_ping(net_player *p)
void send_host_restr_packet(char *callsign, int code, int mode)
void send_cargo_revealed_packet(ship *shipp)
void multi_handle_end_mission_request()
void ai_do_objects_docked_stuff(object *docker, int docker_point, object *dockee, int dockee_point, bool update_clients=true)
int wep_count[MAX_SHIP_WEAPONS]
void ship_actually_depart(int shipnum, int method)
void debris_hit(object *debris_obj, object *other_obj, vec3d *hitpos, float damage)
void multi_ping_reset(ping_struct *ps)
void process_netgame_update_packet(ubyte *data, header *hinfo)
#define MULTI_END_ERROR_HOST_LEFT
reinforcements Reinforcements[MAX_REINFORCEMENTS]
#define MISSION_GOAL_INFO
#define AI_ACTIVE_GOAL_DYNAMIC
void send_emp_effect(ushort net_sig, float intensity, float time)
void process_host_restr_packet(ubyte *data, header *hinfo)
int multi_endgame_ending()
void send_ping(net_addr *addr)
void process_NEW_countermeasure_fired_packet(ubyte *data, header *hinfo)
player Players[MAX_PLAYERS]
void std_connect_set_host_connect_status()
int mission_remove_scheduled_repair(object *objp)
void process_shield_explosion_packet(ubyte *data, header *hinfo)
void send_netplayer_load_packet(net_player *pl)
unsigned int ms_shots_fired
void send_event_update_packet(int event)
void process_beam_fired_packet(ubyte *data, header *hinfo)
void process_secondary_fired_packet(ubyte *data, header *hinfo, int from_player)
process a packet indicating a secondary weapon was fired
void send_mission_goal_info_packet(int goal_num, int new_status, int valid)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define MAX_SHIP_SECONDARY_BANKS
unsigned int missions_flown
void send_ai_info_update_packet(object *objp, char what, object *other_objp)
void process_pong_packet(ubyte *data, header *hinfo)
void process_game_active_packet(ubyte *data, header *hinfo)
void multi_display_chat_msg(const char *msg, int player_index, int add_id)
#define JOIN_DENY_JR_INGAME_JOIN
void send_bytes_recvd_packet(net_player *pl)
matrix * vm_vector_2_matrix(matrix *m, const vec3d *fvec, const vec3d *uvec, const vec3d *rvec)
void process_hud_message(ubyte *data, header *hinfo)
void send_asteroid_hit(object *objp, object *other_objp, vec3d *hitpos, float damage)
p_object * mission_parse_get_arrival_ship(const char *name)
Returns the parse object on the ship arrival list associated with the given name. ...
void vm_vec_add2(vec3d *dest, const vec3d *src)
int m_okKills[MAX_SHIP_CLASSES]
GLenum GLenum GLenum input
void flak_muzzle_flash(vec3d *pos, vec3d *dir, physics_info *pip, int turret_weapon_class)
ship_subsys * ship_get_indexed_subsys(ship *sp, int index, vec3d *attacker_pos)
void mission_parse_fixup_players()
void multi_join_reset_join_stamp()
void mission_goal_status_change(int goal_num, int new_status)
struct matrix::@228::@230 vec
#define NETINFO_FLAG_AM_MASTER
ubyte reliable_buffer[MAX_PACKET_SIZE]
void send_debrief_event()
#define HUD_SOURCE_COMPUTER
void ml_printf(const char *format,...)
float ship_max_hull_strength
#define MISSION_SYNC_DATA
void vm_vec_scale(vec3d *dest, float s)
void process_lightning_packet(ubyte *data, header *hinfo)
#define JOIN_DENY_JR_FULL
void process_netplayer_load_packet(ubyte *data, header *hinfo)
void process_event_update_packet(ubyte *data, header *hinfo)
#define MULTI_FS_SERVER_COMPATIBLE_VERSION
#define MAX_SHIPS_PER_PACKET
void send_client_update_packet(net_player *pl)
PSNET_SOCKET_RELIABLE reliable_socket
void process_reinforcement_avail(ubyte *data, header *hinfo)
#define NETINFO_FLAG_HAS_CD
char name[MAX_GAMENAME_LEN+1]
void multi_flush_multidata_cache()
void send_game_chat_packet(net_player *from, const char *msg, int msg_mode, net_player *to, const char *expr, int server_msg)
void send_countdown_packet(int time)
#define SHIP_DEPARTED_BAY
unsigned int p_shots_fired
int unreliable_buffer_size
void emp_start_local(float intensity, float time)
float get_hull_pct(object *objp)
void multi_flush_mission_stuff()
#define WSS_WEAPON_SELECT
#define DEFAULT_GAME_PORT
#define STORE_MISSION_STATS
int ship_get_index_from_subsys(ship_subsys *ssp, int objnum, int error_bypass)
#define HOMING_WEAPON_UPDATE
#define NUM_BUTTON_FIELDS
ai_goal goals[MAX_AI_GOALS]
#define ACCEPT_PLAYER_DATA
void mission_event_set_directive_special(int event)
int snd_play_3d(game_snd *gs, vec3d *source_pos, vec3d *listen_pos, float radius, vec3d *source_vel, int looping, float vol_scale, int priority, vec3d *sound_fvec, float range_factor, int force, bool is_ambient)
void multi_team_send_update()
void send_accept_packet(int new_player_num, int code, int ingame_join_team)
mission_event Mission_events[MAX_MISSION_EVENTS]
void process_endgame_packet(ubyte *data, header *hinfo)
#define MULTI_SIG_NON_PERMANENT
void send_change_iff_packet(ushort net_signature, int new_team)
void weapon_hit(object *weapon_obj, object *other_obj, vec3d *hitpos, int quadrant=-1)
void send_player_order_packet(int type, int index, int cmd)
void multi_broadcast_stats(int stats_code)
#define COUNTERMEASURE_FIRED
#define SUBSYS_CARGO_REVEALED
#define MULTI_FS_SERVER_VERSION
#define MAX_MODEL_SUBSYSTEMS
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void hud_squadmsg_send_to_all_fighters(int command, int player_num)
void send_netgame_end_error_packet(int notify_code, int err_code)
char filename[MAX_FILENAME_LEN]
#define WSS_REQUEST_PACKET
int multi_pack_unpack_position(int write, ubyte *data, vec3d *pos)
void set_primary_ammo(int ship_index, int requested_bank, int requested_ammo, int rearm_limit, bool update)
#define NETINFO_FLAG_MISSION_OK
void process_countermeasure_fired_packet(ubyte *data, header *hinfo)
void process_ship_status_packet(ubyte *data, header *hinfo)
void process_weapon_or_ammo_changed_packet(ubyte *data, header *hinfo)
#define NETGAME_END_ERROR
#define MULTI_OBSERVER(np)
void set_secondary_ammo(int ship_index, int requested_bank, int requested_ammo, int rearm_limit, bool update)
#define NETINFO_FLAG_INGAME_JOIN
#define FIRE_TURRET_WEAPON
#define PRIMARY_FIRED_NEW
void process_multi_pause_packet(ubyte *data, header *hinfo)
#define OBJ_VISIBILITY_DOT
void ai_do_objects_repairing_stuff(object *repaired_obj, object *repair_obj, int how)
#define HUD_SOURCE_HIDDEN
model_subsystem beam_sys_info
void send_subsystem_destroyed_packet(ship *shipp, int index, vec3d world_hitpos)
int psnet_send(net_addr *who_to, void *data, int len, int np_index)
#define AG_FLAG_STANDALONE
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
int engine_recharge_index
#define SF_PRIMARY_LINKED
void fill_net_addr(net_addr *addr, ubyte *address, ushort port)
int secondary_bank_weapons[MAX_SHIP_SECONDARY_BANKS]
net_player_server_info s_info
#define NETGAME_STATE_MISSION_SYNC
#define JOIN_DENY_JR_BAD_VERSION
float vm_vec_normalized_dir(vec3d *dest, const vec3d *end, const vec3d *start)
int Multi_connection_speed
void ai_post_process_mission()
#define REPAIR_INFO_WARP_ADD
#define STATS_MISSION_KILLS
void send_ship_weapon_change(ship *shipp, int what, int new_bank, int link_status)
void send_player_settings_packet(net_player *p)
void send_wss_update_packet(int team_num, ubyte *wss_data, int size)
float aggregate_current_hits
#define NETINFO_FLAG_HAXOR
void send_jump_into_mission_packet(net_player *pl)
char mission_name[NAME_LENGTH+1]
SCP_vector< int > medal_counts
#define OF_COULD_BE_PLAYER
void common_set_team_pointers(int team)
#define NETINFO_FLAG_GAME_HOST
#define MISSION_DESC_LENGTH
#define FORCE_MISSION_END
void process_game_query(ubyte *data, header *hinfo)
void send_mission_sync_packet(int mode, int start_campaign)
#define KICK_REASON_CANT_XFER
void do_subobj_destroyed_stuff(ship *ship_p, ship_subsys *subsys, vec3d *hitpos, bool no_explosion)
void send_sexp_packet(ubyte *sexp_packet, int num_ubytes)
void send_multi_pause_packet(int pause)
void process_subsystem_destroyed_packet(ubyte *data, header *hinfo)
void ship_cleanup(int shipnum, int cleanup_mode)
int multi_find_open_player_slot()
void process_netplayer_update_packet(ubyte *data, header *hinfo)
void send_mission_items(net_player *pl)
void hud_squadmsg_repair_rearm_abort(int toggle_state, object *obj)
void multi_respawn_check(object *objp)
#define MULTI_END_NOTIFY_FILE_REJECTED
#define NETPLAYER_IS_DEAD(player)
void process_cargo_hidden_packet(ubyte *data, header *hinfo)
void process_wss_request_packet(ubyte *data, header *hinfo)
int beam_fire(beam_fire_info *fire_info)
#define NETINFO_FLAG_ACCEPT_HOST
void flak_set_range(object *objp, float range)
int turret_num_firing_points
int m_dogfight_kills[MAX_PLAYERS]
int secondary_bank_ammo[MAX_SHIP_SECONDARY_BANKS]
char campaign_name[NAME_LENGTH+1]
beam_info * beam_info_override
void ship_set_new_ai_class(int ship_num, int new_ai_class)
void multi_io_send_reliable_force(net_player *pl)
void ship_recalc_subsys_strength(ship *shipp)
void process_player_settings_packet(ubyte *data, header *hinfo)
vec3d * vm_vec_unrotate(vec3d *dest, const vec3d *src, const matrix *m)
void multi_io_send_force(net_player *pl)
void multi_sync_start_countdown()
void process_client_update_packet(ubyte *data, header *hinfo)
void send_observer_update_packet()
object Objects[MAX_OBJECTS]
void process_firing_info_packet(ubyte *data, header *hinfo)
void multi_warpout_all_players()
char title[NAME_LENGTH+1]
vec3d targeting_laser_offset
int sexp_variable_count()
ushort Multi_current_file_checksum
int multi_rate_add(int np_index, char *type, int size)
#define MULTI_JOIN_RESTR_MODE_3
void send_wss_slots_data_packet(int team_num, int final, net_player *p, int std_request)
void mission_event_unset_directive_special(int event)
const char * XSTR(const char *str, int index)
void multi_kick_get_text(net_player *pl, int reason, char *str)
void send_force_end_mission_packet()
void multi_assign_player_ship(int net_player_num, object *objp, int ship_class)
#define DEBRIS_UPDATE_NUKE
#define MAX_MISSION_ITEMS_BYTES
#define NETINFO_FLAG_LIMBO
#define MULTI_MSG_HOSTILE
#define DEBRIS_UPDATE_REMOVE
void send_debris_update_packet(object *objp, int code)
void process_sw_query_packet(ubyte *data, header *hinfo)
#define JOIN_DENY_JR_PASSWD
#define NETINFO_FLAG_ACCEPT_CLIENT
void get_join_request(ubyte *data, int *size, join_request *jr)
char * ai_get_goal_target_name(const char *name, int *index)
void process_self_destruct_packet(ubyte *data, header *hinfo)
void process_ship_weapon_change(ubyte *data, header *hinfo)
void multi_ts_drop(int from_type, int from_index, int to_type, int to_index, int ship_class, int player_index)
void multi_team_handle_join(net_player *pl)
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
#define GM_STANDALONE_SERVER
#define JOIN_DENY_JR_RANK_LOW
void send_countermeasure_success_packet(int objnum)
void broadcast_game_query()
#define MULTI_END_NOTIFY_NONE
void process_change_ai_class_packet(ubyte *data, header *hinfo)
#define SECONDARY_FIRED_AI
void process_mission_sync_packet(ubyte *data, header *hinfo)
void stuff_netplayer_info(net_player *nplayer, net_addr *addr, int ship_class, player *pplayer)
#define WSS_UPDATE_PACKET
#define NETGAME_STATE_IN_MISSION
GLuint const GLchar * name
#define NETINFO_FLAG_CONNECTED
void multi_options_local_load(multi_local_options *options, net_player *pxo_pl)
void process_mission_item_packet(ubyte *data, header *hinfo)
void multi_server_update_player_weapons(net_player *pl, ship *shipp)
int psnet_broadcast(net_addr *who_to, void *data, int len)
void cmeasure_maybe_alert_success(object *objp)
If this is a player countermeasure, let the player know they evaded a missile.
#define SHIP_WSTATE_CHANGE
void vm_vec_sub(vec3d *dest, const vec3d *src0, const vec3d *src1)
#define JOIN_DENY_JR_STATE
int hud_squadmsg_send_ship_command(int shipnum, int command, int send_message, int update_history, int player_num)
int lookup_ship_status(net_player *p, int unique_id, int remove)
p_object * Arriving_support_ship
int Multi_ts_deleted_objnums[MULTI_TS_MAX_TVT_TEAMS *MULTI_TS_NUM_SHIP_SLOTS]
#define MULTI_SIG_ASTEROID
void get_net_addr(ubyte *data, int *size, net_addr *addr)
int multi_quit_game(int prompt, int notify_code, int err_code, int wsa_error)
GLboolean GLboolean GLboolean b
void send_weapon_or_ammo_changed_packet(int ship_index, int bank_type, int bank_number, int ammo_left, int rearm_limit, int new_weapon_index)
void send_game_info_packet()
void process_netgame_end_error_packet(ubyte *data, header *hinfo)
void send_netplayer_slot_packet()
#define MULTI_PERM_OBSERVER(np)
void process_subsystem_cargo_revealed_packet(ubyte *data, header *hinfo)
#define SFPF_TARGET_LOCKED
void send_ship_depart_packet(object *objp, int method)
SCP_vector< multi_create_info > Multi_create_campaign_list
#define EXTRA_DEATH_WASHED
void send_host_captain_change_packet(short player_id, int captain_change)
void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum, float flak_range)
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
#define WING_INDEX(wingp)
join_request Multi_restr_join_request
void multi_create_setup_list_data(int mode)
SCP_vector< multi_create_info > Multi_create_mission_list
void multi_pause_server_eval_request(net_player *pl, int pause)
void send_wing_create_packet(wing *wingp, int num_to_create, int pre_create_count)
void send_netgame_descript_packet(net_addr *addr, int code)
void process_leave_game_packet(ubyte *data, header *hinfo)
void obj_delete(int objnum)
void multi_options_update_netgame()
void process_bytes_recvd_packet(ubyte *data, header *hinfo)
void multi_process_valid_join_request(join_request *jr, net_addr *who_from, int ingame_join_team)
int ship_launch_countermeasure(object *objp, int rand_val)
void multi_pause_unpause()
#define NETPLAYER_SLOTS_P
int Multi_join_restr_mode
#define BFIF_IS_FIGHTER_BEAM
#define REPAIR_INFO_ABORT
void process_post_sync_data_packet(ubyte *data, header *hinfo)
int wl_drop(int from_bank, int from_list, int to_bank, int to_list, int ship_slot, int player_index, bool dont_play_sound)
void process_game_info_packet(ubyte *data, header *hinfo)
ubyte unreliable_buffer[MAX_PACKET_SIZE]
#define STATS_MISSION_CLASS_KILLS
void weapon_hit_do_sound(object *hit_obj, weapon_info *wip, vec3d *hitpos, bool is_armed)
#define SF_SECONDARY_DUAL_FIRE
int wep[MAX_SHIP_WEAPONS]
#define AIGF_DOCK_INDEXES_VALID
void multi_endgame_init()
#define NG_MODE_RESTRICTED
#define MULTI_MSG_MAX_TEXT_LEN
void process_wss_update_packet(ubyte *data, header *hinfo)
void process_player_order_packet(ubyte *data, header *hinfo)
#define REINFORCEMENT_AVAIL
void multi_join_eval_pong(net_addr *addr, fix pong_time)
void process_ship_depart_packet(ubyte *data, header *hinfo)
void delete_player(int player_num, int kicked_reason)
void mission_bring_in_support_ship(object *requester_objp)
#define MULTI_CONNECTED(np)
#define MULTI_END_NOTIFY_KICKED_CANT_XFER
int std_remove_player(net_player *p)
fix timer_get_fixed_seconds()
void hud_squadmsg_repair_rearm(int toggle_state, object *objp)
void process_asteroid_info(ubyte *data, header *hinfo)
void send_ingame_nak(int state, net_player *p)
void send_ship_status_packet(net_player *pl, button_info *bi, int id)
void send_player_stats_block_packet(net_player *pl, int stats_code, net_player *target, short offset)
#define MULTI_TS_NUM_SHIP_SLOTS
#define MULTI_SYNC_INGAME
void multi_handle_state_special()
#define MULTI_SYNC_POST_BRIEFING
#define MULTI_END_NOTIFY_KICKED_BAD_XFER
void process_deny_packet(ubyte *data, header *hinfo)
void process_ingame_nak(ubyte *data, header *hinfo)
#define NETINFO_FLAG_RESPAWNING
void psnet_rel_connect_to_server(PSNET_SOCKET *socket, net_addr *server_addr)
void process_netplayer_slot_packet(ubyte *data, header *hinfo)
#define STATS_ALLTIME_KILLS
void ship_do_cargo_hidden(ship *shipp, int from_network)
void ship_hit_kill(object *ship_objp, object *other_obj, float percent_killed, int self_destruct)
#define JOIN_DENY_JR_TEMP_CLOSED
#define NETGAME_STATE_HOST_SETUP
#define NETPLAYER_STATE_WSS_ACK
void send_countermeasure_fired_packet(object *objp, int cmeasure_count, int rand_val)
unsigned int p_bonehead_hits
void send_pong(net_addr *addr)
#define MULTIPLAYER_MASTER
SCP_vector< ship_info > Ship_info
#define NETPLAYER_STATE_POST_DATA_ACK
void ai_do_objects_undocked_stuff(object *docker, object *dockee)
#define NETPLAYER_STATE_INGAME_SHIP_SELECT
#define MULTI_PAUSE_REQUEST
void fs2netd_send_game_request()
GLenum GLsizei GLenum GLenum const GLvoid * data
void multi_player_ships_available(int *team_0, int *team_1)
void send_accept_player_data(net_player *npp, int is_ingame)
int Multi_current_file_length
#define MLO_FLAG_LOCAL_BROADCAST
SCP_vector< float > shield_quadrant
int multi_create_player(int net_player_num, player *pl, const char *name, net_addr *addr, int ship_class, short id)
#define OF_SHOULD_BE_DEAD
char mission_desc[MISSION_DESC_LENGTH]
void process_emp_effect(ubyte *data, header *hinfo)
void shipfx_warpout_start(object *objp)
#define DEBRIS_UPDATE_UPDATE
void multi_campaign_start(char *filename)
char callsign[CALLSIGN_LEN+1]
void send_weapon_detonate_packet(object *objp)
wss_unit Wss_slots_teams[MAX_TVT_TEAMS][MAX_WSS_SLOTS]
object * multi_get_network_object(ushort net_signature)
void change_ship_type(int n, int ship_type, int by_sexp)
float vm_vec_dot(const vec3d *v0, const vec3d *v1)
void process_accept_player_data(ubyte *data, header *hinfo)
#define MULTI_END_NOTIFY_KICKED
GLenum GLuint GLenum GLsizei length
void send_asteroid_create(object *new_objp, object *parent_objp, int asteroid_type, vec3d *relvec)
void asteroid_hit(object *pasteroid_obj, object *other_obj, vec3d *hitpos, float damage)
void process_change_iff_packet(ubyte *data, header *hinfo)
#define STATS_DOGFIGHT_KILLS
active_game * multi_update_active_games(active_game *ag)
void multi_get_mission_checksum(const char *filename)
GLsizei GLsizei GLchar * source
void send_homing_weapon_info(int weapon_num)
#define NETGAME_STATE_ENDGAME
#define WEAPON_OR_AMMO_CHANGED
void send_mission_log_packet(int num)
int game_get_default_skill_level()
void multi_apply_ship_status(net_player *p, button_info *bi, int locally)
void ship_self_destruct(object *objp)
#define ACK_FILE_ACCEPTED
void send_debrief_info(int stage_count[], int *stages[])
void multi_jw_handle_join(net_player *pl)
#define AI_GOAL_REARM_REPAIR
void send_change_iff_color_packet(ushort net_signature, int observer_team, int observed_team, int alternate_iff_color)
int ship_index[MAX_SHIPS_PER_WING]
void add_shield_point_multi(int objnum, int tri_num, vec3d *hit_pos)
#define KICK_REASON_INGAME_ENDED
void multi_campaign_next_mission()
void multi_set_network_signature(ushort signature, int what_kind)
void HUD_printf(const char *format,...)
void process_weapon_detonate_packet(ubyte *data, header *hinfo)
#define MISSION_LOG_ENTRY
#define AG_FLAG_CONNECTION_BIT
#define REPAIR_INFO_BEGIN
#define JOIN_DENY_JR_BANNED
int ship_name_lookup(const char *name, int inc_players)
void ship_do_cap_subsys_cargo_hidden(ship *shipp, ship_subsys *subsys, int from_network)
server_item * Game_server_head
void process_accept_packet(ubyte *data, header *hinfo)
int parse_wing_create_ships(wing *wingp, int num_to_create, int force, int specific_instance)
Tries to create a wing of ships.
int multi_can_message(net_player *p)
void hud_update_reticle(player *pp)
void process_player_pain_packet(ubyte *data, header *hinfo)
#define ABORT_REARM_REPAIR_ITEM
int std_connect_set_connect_count()
void process_jump_into_mission_packet(ubyte *data, header *hinfo)
void gamesnd_play_iface(int n)
void process_cargo_revealed_packet(ubyte *data, header *hinfo)
#define NETINFO_FLAG_ACCEPT_OBSERVER
#define JOIN_DENY_JR_RANK_HIGH
#define AI_GOAL_DESTROY_SUBSYSTEM
void process_wss_slots_data_packet(ubyte *data, header *hinfo)
#define NOTIFY_NEW_PLAYER
void multi_io_send_buffered_packets()
net_addr Multi_restr_addr
void multi_ping_eval_pong(ping_struct *ps)
void emp_start_ship(object *ship_objp, float intensity, float time)
void multi_ts_sync_interface()
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)
GLenum const GLvoid * addr
#define NETGAME_STATE_FORMING
void send_leave_game_packet(short player_id, int kicked_reason, net_player *target)
void process_mission_goal_info_packet(ubyte *data, header *hinfo)
void process_player_stats_block_packet(ubyte *data, header *hinfo)
#define INGAME_JOIN_FLAG_PICK_SHIP
void multi_common_add_text(const char *str, int auto_scroll)
void process_join_packet(ubyte *data, header *hinfo)
#define SF_FROM_PLAYER_WING
int multi_find_player_by_object(object *objp)
int parse_create_object(p_object *pobjp)
#define MULTI_IS_TRACKER_GAME
char title[NAME_LENGTH+1]
net_player Net_players[MAX_PLAYERS]
void multi_common_set_text(const char *str, int auto_scroll)
unsigned int ms_shots_hit
void gameseq_post_event(int event)
#define MLO_FLAG_FLUSH_CACHE
int shield_recharge_index
#define JOIN_DENY_JR_CLOSED
void process_file_sig_packet(ubyte *data, header *hinfo)
#define MULTI_QUERY_RESTR_STAMP
#define COUNTERMEASURE_NEW
sound to indicate voice is about to start
void weapon_detonate(object *objp)
#define CLIENT_REPAIR_INFO
void send_firing_info_packet()
multi_global_options Multi_options_g
char ship_name[NAME_LENGTH]
#define JOIN_DENY_JR_TYPE
void debrief_set_multi_clients(int stage_count, int active_stages[])
unsigned int s_bonehead_hits
void send_post_sync_data_packet(net_player *p, int std_request)
void process_file_sig_request(ubyte *data, header *hinfo)
int multi_find_player_by_net_signature(ushort net_signature)
void send_lightning_packet(int bolt_type_internal, vec3d *start, vec3d *strike)
#define NETPLAYER_STATE_STD_HOST_SETUP
#define JOIN_QUERY_RESTRICTED
void send_mission_list_request(int what)
#define NET_PLAYER_NUM(np)
void send_deny_packet(net_addr *addr, int code)
multi_local_options options
#define COUNTERMEASURE_SUCCESS
void send_subsystem_cargo_hidden_packet(ship *shipp, int index)
void process_netgame_descript_packet(ubyte *data, header *hinfo)
int current_target_is_locked
void send_endgame_packet(net_player *pl)
void send_player_pain_packet(net_player *pl, int weapon_info_index, float damage, vec3d *force, vec3d *hitpos, int quadrant_num)
#define MAX_DEBRIEF_STAGES
#define REPAIR_INFO_WARP_REMOVE
void process_mission_log_packet(ubyte *data, header *hinfo)
void send_new_player_packet(int new_player_num, net_player *target)
#define MULTI_END_ERROR_CONNECT_FAIL
void ship_subsystem_set_new_ai_class(int ship_num, char *subsystem, int new_ai_class)
void send_file_sig_packet(ushort sum_sig, int length_sig)
#define NG_FLAG_INGAME_JOINING
int multi_can_end_mission(net_player *p)