15 #elif defined SCP_UNIX 
   16 #include <sys/types.h> 
   17 #include <sys/socket.h> 
   18 #include <netinet/in.h> 
   19 #include <arpa/inet.h> 
   96 #define MULTI_CLIENT_OBJ_TIMEOUT                10 
   97 #define MAX_SHIPS_PER_QUERY                     10 
  224         if ( net_signature == 0 )
 
  255         unsigned int sum1,sum2;
 
  261                 if (sum1 >= 255 ) sum1 -= 255;
 
  266         return (
unsigned short)((sum1<<8)+ sum2);
 
  275 #define NUM_DEATH_WORDS 40 
  284                         return XSTR(
"zapped",853);
 
  286                         return XSTR(
"caulked",854);
 
  288                         return XSTR(
"killed",855);
 
  290                         return XSTR(
"waxed",856);
 
  292                         return XSTR(
"popped",857);
 
  294                         return XSTR(
"murdered",858);
 
  296                         return XSTR(
"bludgeoned",859);
 
  298                         return XSTR(
"destroyed",860);
 
  300                         return XSTR(
"iced",861);
 
  302                         return XSTR(
"obliterated",862);
 
  304                         return XSTR(
"toasted",863);
 
  306                         return XSTR(
"roasted",864);
 
  308                         return XSTR(
"turned into anti-matter",865);
 
  310                         return XSTR(
"killed like a pig",866);
 
  312                         return XSTR(
"taught a lesson",867);
 
  314                         return XSTR(
"slaughtered with impunity",868);
 
  316                         return XSTR(
"spanked like a naughty boy",869);
 
  318                         return XSTR(
"skunked",870);
 
  320                         return XSTR(
"beat senseless",871);
 
  322                         return XSTR(
"shot up",872);
 
  324                         return XSTR(
"spaced",873);
 
  326                         return XSTR(
"hosed",874);
 
  328                         return XSTR(
"capped",875);
 
  330                         return XSTR(
"beat down",876);
 
  332                         return XSTR(
"hit wit da shizzo",877);
 
  334                         return XSTR(
"sk00led",878);
 
  336                         return XSTR(
"whooped up",879);
 
  338                         return XSTR(
"brought to the all-you-can-take whoop ass buffet",880);
 
  340                         return XSTR(
"served up a whoop ass sandwich...hold the mercy",881);
 
  342                         return XSTR(
"gibbed by Kayser Sozay's rocket",882);
 
  344                         return XSTR(
"shot down",883);
 
  346                         return XSTR(
"given early retirement",884);
 
  348                         return XSTR(
"instructed",885);
 
  350                         return XSTR(
"eviscerated",886);
 
  352                         return XSTR(
"pummelled",887);
 
  354                         return XSTR(
"eradicated",888);
 
  356                         return XSTR(
"cleansed",889);
 
  358                         return XSTR(
"perforated",890);
 
  360                         return XSTR(
"canned",891);
 
  362                         return XSTR(
"decompressed",892);
 
  373 #define NUM_CHAT_START_WORDS    8 
  374 #define MAX_CHAT_PHRASE_LEN     25              // be careful not to exceed (or update if exceeded) 
  383                         return XSTR(
"says",893);
 
  385                         return XSTR(
"bleats",894);
 
  387                         return XSTR(
"opines",895);
 
  389                         return XSTR(
"postulates",896);
 
  391                         return XSTR(
"declares",897);
 
  393                         return XSTR(
"vomits out",898);
 
  395                         return XSTR(
"whines",899);
 
  397                         return XSTR(
"barks",900);
 
  413         int player_ship_class = -1;
 
  415                 if ( !
stricmp(it->name, ship_name) ) {
 
  416                         player_ship_class = std::distance(
Ship_info.cbegin(), it);
 
  421         return player_ship_class;
 
  576         if(ship_name == NULL){
 
  587         if (inc_respawning) {
 
  591                 if((idx >= 0) && (idx < MAX_PLAYERS)){
 
  629                    if(found_first == -1) {
 
  635         if(i == MAX_PLAYERS){
 
  636                 if(found_first == -1)
 
  655         if ( i == MAX_PLAYERS )
 
  730         int player_ship_class = ship_class;
 
  731         int current_player_count;
 
  744         if ( ship_class == -1 ) {
 
  745                 nprintf((
"Network",
"Network ==> ship class is -1, creating a default ship for multiplayer\n"));
 
  751                                 player_ship_class = std::distance(
Ship_info.cbegin(), it);
 
  756                 if (player_ship_class == -1)    
 
  760                                 player_ship_class = 0;
 
  761                                 Warning(
LOCATION, 
"Invalid default player ship specified in ship tables. Setting to %s", 
Ship_info[player_ship_class].name);
 
  765                                 Error(
LOCATION, 
"No ships have been loaded, but we are attempting to set a ship!!");
 
  770         if ( player_ship_class >= static_cast<int>(
Ship_info.size()) ) {
 
  771                 nprintf((
"Network",
"Network ==> Ship class was %d Creating a default ship for multiplayer\n", player_ship_class));
 
  864         char notify_string[256] = 
"";
 
  906                                 int found_new_host = 0;
 
  944                 if ( 
Net_players[player_num].m_player->objnum != -1 ){
 
  998         Multi_client_update_times[player_num] = -1;
 
 1001 #define INACTIVE_LIMIT_NORMAL (15 * F1_0) 
 1002 #define INACTIVE_LIMIT_WAIT   (20 * F1_0) 
 1034                 if ( (current_time - 
Net_players[i].last_heard_time) > inactive_limit) {
 
 1036                         nprintf((
"Network", 
"Assuming %s is a zombie, removing from game\n", 
Net_players[i].m_player->callsign));
 
 1055         memset( addr->
addr, 0x00, 6);
 
 1074                         memcpy(&temp_addr.s_addr, address, 4);
 
 1075                         strcpy( text, inet_ntoa(temp_addr) );
 
 1092         float x1, y1, x2, y2;
 
 1094         if(m->
vec.rvec.xyz.z < 0) data[16] |= (1<<0);   
 
 1095         if(m->
vec.uvec.xyz.z < 0) data[16] |= (1<<1);   
 
 1096         if(m->
vec.fvec.xyz.z < 0) data[16] |= (1<<2);   
 
 1097         if(m->
vec.fvec.xyz.x < 0) data[16] |= (1<<3);   
 
 1098         if(m->
vec.fvec.xyz.y < 0) data[16] |= (1<<4);   
 
 1105         memcpy(&data[0], &x1, 4);               
 
 1106         memcpy(&data[4], &y1, 4);               
 
 1107         memcpy(&data[8], &x2, 4);               
 
 1108         memcpy(&data[12], &y2, 4);              
 
 1115         float x1, y1, x2, y2;
 
 1117         memcpy(&x1, &data[0], 4);
 
 1118         memcpy(&y1, &data[4], 4);
 
 1119         memcpy(&x2, &data[8], 4);
 
 1120         memcpy(&y2, &data[12],4);
 
 1133         m->
vec.rvec.xyz.z *= (data[16] & (1<<0)) ? -1.0f : 1.0f;
 
 1134         m->
vec.uvec.xyz.z *= (data[16] & (1<<1)) ? -1.0f : 1.0f;
 
 1135         m->
vec.fvec.xyz.z *= (data[16] & (1<<2)) ? -1.0f : 1.0f;
 
 1136         m->
vec.fvec.xyz.x *= (data[16] & (1<<3)) ? -1.0f : 1.0f;
 
 1137         m->
vec.fvec.xyz.y *= (data[16] & (1<<4)) ? -1.0f : 1.0f;
 
 1217                 if ( bi->
status[i] == 0 )
 
 1220                 for ( j = 0; j < 32; j++ ) {
 
 1223                         if ( bi->
status[i] & (1<<j) ) {
 
 1229                                                 bi->
status[i] &= ~(1<<j);
 
 1238 #define MULTI_SHIP_STATUS_TIME                  350 
 1257                 int should_send = 0;
 
 1260                         if(Multi_ship_status_bi.
status[idx] != 0){
 
 1272                 memset(&Multi_ship_status_bi, 0, 
sizeof(
button_info));
 
 1343                 if((sum_sig == 0xffff) && (length_sig == -1)){
 
 1509                 nprintf((
"Network",
"Socket connection terminated and/or nonexistent, bailing..\n"));
 
 1517                 nprintf((
"Network", 
"Error %d received on reliable socket -- ignoring\n", error));
 
 1522                 nprintf((
"Network",
"Received WSAESHUTDOWN on client socket. Cool.\n"));
 
 1532                 nprintf((
"Network", 
"pitching player because drop on reliable socket\n"));
 
 1542                 nprintf((
"Network", 
"Communications to server lost -- quitting game\n"));
 
 1558         Assert( dest_objp != source_objp );
 
 1574         int objnum, pobj_num;
 
 1580                 Error(
LOCATION, 
"Failed to create standalone observer object! Please investigate!");
 
 1626         if ( new_game == NULL ) {
 
 1627                 nprintf((
"Network", 
"Cannot allocate space for new active game structure\n"));
 
 1669                 } 
while (gp != stop);
 
 1748                         moveup = moveup->
next;
 
 1763         if ( new_game == NULL ) {
 
 1764                 nprintf((
"Network", 
"Cannot allocate space for new server_item structure\n"));
 
 1790                         moveup = moveup->
next;
 
 1948         int team0_avail,team1_avail;
 
 1949         char knock_message[256], knock_callsign[
CALLSIGN_LEN+1], jr_ip_string[16]; 
 
 1957         strcpy (knock_callsign, jr->
callsign);
 
 1965                         sprintf(knock_message, 
"%s has tried to join!", knock_callsign);
 
 2083                 sprintf(knock_message, 
"Banned user %s with IP: %s attempted to join server", knock_callsign, 
psnet_addr_to_string(jr_ip_string, addr));
 
 2095                 if((team0_avail == 0) && (team1_avail == 0)){
 
 2228                 ml_string(
"Server received endgame request, proceeding...");                    
 
 2255         int stack_depth,current_depth;  
 
 2274         if(stack_depth == 0){           
 
 2280                 current_depth = stack_depth;
 
 2322                 } 
while(current_depth > 0);     
 
 2339         if(filename == NULL){
 
 2344         len = strlen(filename);
 
 2345         for(idx=0;idx<
len;idx++){
 
 2346                 filename[
idx] = (char)tolower(filename[idx]);
 
 2361         if((filename[0] != 
'\0') && !
cf_access(filename, cf_type, 00) && (
cf_access(filename, cf_type, 02) == -1)){     
 
 2365                 popup(
PF_USE_AFFIRMATIVE_ICON, 1, 
XSTR(
"&Ok", 713), 
XSTR(
"An outdated copy of this file exists, but it cannot be overwritten by the server because it is set to be read-only. Change the permissions on this file next time.", 714));           
 
 2391 #define MULTI_LAG_VAL           400 
 2418         int net_player_num,player_num;
 
 2425         Assert((net_player_num != -1) && (player_num != -1));                   
 
 2602         Multi_client_update_times[net_player_num] = -1;
 
 2611         int key1=-1,key2=-1;    
 
 2651         if((k == key1) || (k == key2)){
 
 2663                         team_val = (k == 
key1) ? 0 : -1;
 
 2668                         team_val = (k == 
key1) ? 0 : -1;                        
 
 2673                         team_val = (k == 
key1) ? 1 : -1;                        
 
 2678                         team_val = (k == 
key1) ? 0 : 1;                 
 
 2725                         if(mp_team_num == 0){
 
 2727                         } 
else if(mp_team_num == 1){
 
 2754                 nprintf((
"Network", 
"bashing %s's current sbank to 0\n", shipp->
ship_name));
 
 2780         nprintf((
"Network",
"FLUSHING MULTIDATA CACHE\n"));
 
 2929         in = 
cfopen(filename,
"rb");
 
 2935                 in = 
cfopen(filename,
"rb");
 
 2971         ret = (char)(unit * 127.0
f);
 
 2979         ret = (
float)val / 127.0
f;
 
 3002         const char *connection_speed;
 
 3010         if ( !
stricmp(connection_speed, 
NOX(
"Slow")) ) {
 
 3012         } 
else if ( !
stricmp(connection_speed, 
NOX(
"56K")) ) {
 
 3014         } 
else if ( !
stricmp(connection_speed, 
NOX(
"ISDN")) ) {
 
 3016         } 
else if ( !
stricmp(connection_speed, 
NOX(
"Cable")) ) {
 
 3018         } 
else if ( !
stricmp(connection_speed, 
NOX(
"Fast")) ) {
 
 3030         if (strstr(valid_string, 
"invalid"))
 
 3033         if (strstr(valid_string, 
"valid"))
 
 3044         char next_line[512];
 
 3045         char status_string[50];
 
 3051         bool was_cancelled = 
false;
 
 3071                 while ( !
cfeof(in) ) {
 
 3073                         memset(next_line, 0, 512);
 
 3074                         cfgets(next_line, 512, in);
 
 3080                         memset(temp, 0, 256);
 
 3081                         tok = strtok(next_line, 
" ");
 
 3092                         memset(status_string, 0, 50);
 
 3093                         memset(temp, 0, 256);
 
 3094                         tok = strtok(NULL,
" \n");
 
 3107                         if (file_index >= 0)
 
 3120         if (was_cancelled) {
 
 3180 DCF(multi,
"changes multiplayer settings (Multiplayer)")
 
 3238                 dc_printf(
"Desired vel : %d\n", 1 << 8);
 
 3241                 dc_printf(
"Desired rotvel : %d\n", 1 << 10);
 
 3247                 dc_printf(
"Network object sorting %s\n", OO_sort ? 
"ENABLED" : 
"DISABLED");
 
 3264         char description[512] = { 0 };
 
 3266         char gametype[32] = { 0 };
 
 3271         file_names = (
char**)
vm_malloc(
sizeof(
char*) * max_files);
 
 3273         if (file_names != NULL) {
 
 3274                 memset(wild_card, 0, 10);
 
 3285                 out = fopen(full_name, 
"wt");
 
 3292                 while (*p && (offset < 
sizeof(description))) {
 
 3294                                 description[offset++] = 
'"';
 
 3295                                 description[offset++] = 
'"';
 
 3297                                 description[offset++] = *
p;
 
 3304                 fprintf(out, 
"filename,CRC32,mission type,max players,description\r\n");
 
 3308                         memset( full_name, 0, 
sizeof(full_name) );                      
 
 3326                         while (*p && (offset < 
sizeof(filename))) {
 
 3328                                         filename[offset++] = 
'"';
 
 3329                                         filename[offset++] = 
'"';
 
 3331                                         filename[offset++] = *
p;
 
 3347                         fprintf(out, 
"\"%s\",%u,\"%s\",%d,\"%s\"\r\n", filename, checksum, gametype, 
The_mission.
num_players, description);
 
 3354                 if (file_names != NULL) {
 
 3356                                 if (file_names[
idx] != NULL) {
 
 3358                                         file_names[
idx] = NULL;
 
 3438 DCF(pxospew,
"spew PXO 32 bit checksums for all visible mission files (Multiplayer)")
 
 3444                 dc_printf(
"Usage: pxospew <max_files> <filename>\n");
 
 3462         for(idx=0;idx<
count;idx++){
 
 3477 #pragma optimize("", off) 
 3480 typedef struct bitbuffer {
 
 3490         bitbuf->mask = 0x80;
 
 3491         bitbuf->data = 
data;
 
 3492         bitbuf->org_data = 
data;
 
 3498         if ( bitbuf->mask != 0x80 )     {
 
 3499         *bitbuf->data++ = (
ubyte)bitbuf->rack;
 
 3501         return bitbuf->data-bitbuf->org_data;
 
 3506         return bitbuf->data-bitbuf->org_data;
 
 3513         mask = 1L << ( bit_count - 1 );
 
 3514         while ( mask != 0) {
 
 3515                 if ( mask & data )      {
 
 3516                         bitbuf->rack |= bitbuf->mask;
 
 3519                 if ( bitbuf->mask == 0 ) {
 
 3520                         *bitbuf->data++=(
ubyte)bitbuf->rack;
 
 3522                         bitbuf->mask = 0x80;
 
 3533         mask = 1L << ( bit_count - 1 );
 
 3536         while ( mask != 0)      {
 
 3537                 if ( bitbuf->mask == 0x80 ) {
 
 3538                         bitbuf->rack = *bitbuf->data++;
 
 3540                 if ( bitbuf->rack & bitbuf->mask )      {
 
 3541                         return_value |= 
mask;
 
 3545                 if ( bitbuf->mask == 0 )        {
 
 3546                         bitbuf->mask = 0x80;
 
 3550         return return_value;
 
 3558         mask = 1L << ( bit_count - 1 );
 
 3561         while ( mask != 0)      {
 
 3562                 if ( bitbuf->mask == 0x80 ) {
 
 3563                         bitbuf->rack = *bitbuf->data++;
 
 3565                 if ( bitbuf->rack & bitbuf->mask )      {
 
 3566                         return_value |= 
mask;
 
 3570                 if ( bitbuf->mask == 0 )        {
 
 3571                         bitbuf->mask = 0x80;
 
 3576         return_value <<= (32-bit_count);
 
 3578         return ((
int)return_value)>>(32-bit_count);
 
 3597                 a = 
fl2i(pos->
xyz.x*105.0f+0.5f); 
 
 3598                 b = 
fl2i(pos->
xyz.y*105.0f+0.5f);
 
 3599                 c = 
fl2i(pos->
xyz.z*105.0f+0.5f);
 
 3600                 CAP(a,-8388608,8388607);
 
 3601                 CAP(b,-8388608,8388607);
 
 3602                 CAP(c,-8388608,8388607);
 
 3689         #define D_SCALE 32768.0f 
 3690         #define D_MAX_RANGE 32767 
 3691         #define D_MIN_RANGE -32768 
 3693         #define N_SCALE 2048.0f 
 3694         #define N_MAX_RANGE 2047 
 3695         #define N_MIN_RANGE -2048 
 3700                 if((ang.
h > 3.130) && (ang.
h < 3.150)){
 
 3736                         non_degenerate_count++;
 
 3741                         theta = theta*2.0f/
PI-1.0f;                     
 
 3802                         theta = (theta+1.0f)*
PI_2;
 
 3961                 if(max_vel.
xyz.x > 0.0f){
 
 3964                 if(max_vel.
xyz.y > 0.0f){
 
 3967                 if(max_vel.
xyz.z > 0.0f){
 
 3977                 if ( max_vel.
xyz.x > 0.0f )     {
 
 3978                         r = r / max_vel.
xyz.x;
 
 3979                         a = 
fl2i( r * 128.0f );
 
 3984                 if ( max_vel.
xyz.y > 0.0f )     {
 
 3985                         u = u / max_vel.
xyz.y;
 
 3986                         a = 
fl2i( u * 128.0f );
 
 3991                 if ( max_vel.
xyz.z > 0.0f )     {
 
 3992                         f = f / max_vel.
xyz.z;
 
 3993                         a = 
fl2i( f * 128.0f );
 
 4007                 if ( fields & (1<<0) )  {
 
 4014                 if ( fields & (1<<1) )  {
 
 4021                 if ( fields & (1<<2) )  {
 
 4131                 if ( fields & (1<<0) )  {               
 
 4137                 if ( fields & (1<<1) )  {               
 
 4143                 if ( fields & (1<<2) )  {               
 
 4182 #pragma optimize("", on) 
#define NETINFO_FLAG_WARPING_OUT
 
#define NG_MODE_RANK_BELOW
 
void multi_pinfo_notify_drop(net_player *np)
 
int Multi_client_update_times[MAX_PLAYERS]
 
int timestamp(int delta_ms)
 
void multi_update_valid_missions()
 
#define FS_MISSION_FILE_EXT
 
#define MY_NET_PLAYER_NUM
 
#define NETGAME_STATE_DEBRIEF
 
#define MULTI_JOIN_SERVER_TIMEOUT_LOCAL
 
void obj_set_flags(object *obj, uint new_flags)
 
int observer_create(matrix *orient, vec3d *pos)
 
int multi_show_ingame_ping()
 
int tracker_security_last
 
void vm_matrix_to_rot_axis_and_angle(const matrix *m, float *theta, vec3d *rot_axis)
 
#define timestamp_elapsed_safe(_a, _b)
 
int multi_netplayer_flag_check(int flags, int ignore_standalone)
 
#define INACTIVE_LIMIT_WAIT
 
#define MESSAGE_REINFORCEMENTS
 
void player_set_squad_bitmap(player *p, char *fname, bool ismulti)
 
np_update np_updates[MAX_PLAYERS]
 
#define CONNECTION_SPEED_SISDN
 
int multi_num_connections()
 
char name[MAX_GAMENAME_LEN+1]
 
void multi_subsys_update_all()
 
int multi_pack_unpack_orient(int write, ubyte *data, matrix *orient)
 
void hud_escort_add_player(short id)
 
#define NETGAME_STATE_PAUSED
 
active_game * multi_new_active_game(void)
 
#define INGAME_SHIP_UPDATE_TIME
 
char Game_current_mission_filename[MAX_FILENAME_LEN]
 
#define JOIN_DENY_JR_NOOBS
 
SCP_vector< game_snd > Snds
 
#define MESSAGE_BETA_ARRIVED
 
char default_player_ship[255]
 
char image_filename[MAX_FILENAME_LEN+1]
 
ushort Next_non_perm_signature
 
void drop_trailing_white_space(char *str)
 
server_item * multi_new_server_item(void)
 
#define IS_MISSION_MULTI_TEAMS
 
char * multi_xfer_get_filename(int handle)
 
#define MULTI_SHIP_STATUS_TIME
 
#define MULTI_JOIN_SERVER_TIMEOUT
 
#define NETINFO_FLAG_DO_NETWORKING
 
int find_player(net_addr *addr)
 
uint PSNET_SOCKET_RELIABLE
 
void multi_send_anti_timeout_ping()
 
ushort multi_get_next_network_signature(int what_kind)
 
int multi_eval_join_request(join_request *jr, net_addr *addr)
 
#define CONNECTION_SPEED_T1
 
int multi_ignore_controls(int key)
 
void multi_untag_player_ships()
 
int Multi_restr_query_timestamp
 
void multi_respawn_player_leave(net_player *pl)
 
#define CONNECTION_SPEED_288
 
#define MISSION_FLAG_TOGGLE_DEBRIEFING
 
const char * multi_random_chat_start()
 
#define NETGAME_STATE_BRIEFING
 
void object_set_gliding(object *objp, bool enable, bool force)
 
ushort Next_ship_signature
 
#define NG_FLAG_INGAME_JOINING_CRITICAL
 
void shipfx_warpin_frame(object *objp, float frametime)
 
void send_netplayer_update_packet(net_player *pl)
 
void multi_team_handle_drop()
 
#define MULTI_STANDALONE(np)
 
#define MVALID_STATUS_INVALID
 
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 std_destroy_gen_dialog()
 
int multi_process_restricted_keys(int k)
 
int multi_obs_create_player(int player_num, char *name, net_addr *addr, player *pl)
 
void multi_ping_send_all()
 
bool dc_maybe_stuff_int(int *i)
Tries to stuff an int from the Command_string. 
 
#define NETINFO_FLAG_OBSERVER
 
#define MESSAGE_SUPPORT_KILLED
 
#define MESSAGE_ARRIVE_ENEMY
 
#define MULTI_VALID_MISSION_FILE
 
int weapon_recharge_index
 
void server_verify_filesig(short player_id, ushort sum_sig, int length_sig)
 
int multi_kill_limit_reached()
 
int multi_is_builtin_mission()
 
int multi_netplayer_state_check(int state, int ignore_standalone)
 
void multi_maybe_send_repair_info(object *dest_objp, object *source_objp, int code)
 
void multi_msg_display_mission_text(const char *msg, int player_index)
 
int bitbuffer_read_flush(bitbuffer *bitbuf)
 
void multi_make_player_ai(object *pobj)
 
int multi_find_player_by_signature(int signature)
 
struct vec3d::@225::@227 xyz
 
int find_player_id(short player_id)
 
#define NETPLAYER_STATE_JOINING
 
void ml_string(const char *string, int add_time)
 
#define JOIN_FLAG_AS_OBSERVER
 
void multi_ping_send(net_player *p)
 
#define MISSION_TYPE_MULTI
 
int multi_get_highest_rank()
 
void bitbuffer_put(bitbuffer *bitbuf, uint data, int bit_count)
 
ai_info Ai_info[MAX_AI_INFO]
 
#define MULTI_END_ERROR_CONTACT_LOST
 
int multi_get_connection_speed()
 
void multi_spew_pxo_checksums(int max_files, const char *outfile)
 
int multi_client_server_dead()
 
#define END_OF_LIST(head)
 
int multi_pack_unpack_vel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi)
 
int multi_pinfo_popup_active()
 
char mission_name[NAME_LENGTH+1]
 
#define NETGAME_STATE_STD_HOST_SETUP
 
#define MULTI_JOIN_RESTR_MODE_2
 
#define NETINFO_FLAG_OBS_PLAYER
 
void vm_vec_scale_add2(vec3d *dest, const vec3d *src, float k)
 
int multi_ship_class_lookup(const char *ship_name)
 
const char * os_config_read_string(const char *section, const char *name, const char *default_value)
 
void send_netgame_update_packet(net_player *pl)
 
int cf_create_default_path_string(char *path, uint path_max, int pathtype, const char *filename, bool localize)
 
void send_repair_info_packet(object *repaired_objp, object *repair_objp, int code)
 
int current_secondary_bank
 
#define MESSAGE_GAMMA_ARRIVED
 
void multi_handle_sudden_mission_end()
 
void multi_cull_zombies()
 
void HUD_sourced_printf(int source, const char *format,...)
 
char * Cmdline_spew_mission_crcs
 
int button_function_critical(int n, net_player *p=NULL)
 
GLenum GLuint GLenum GLsizei const GLchar * buf
 
void multi_msg_text_flush()
 
multi_local_options player_options
 
void multi_create_handle_join(net_player *pl)
 
#define STANDALONE_SHIP_SIG
 
#define BUTTON_INFO_SAVE_COUNT
 
#define CF_TYPE_MULTI_CACHE
 
void multi_do_client_warp(float frame_time)
 
char callsign[CALLSIGN_LEN+1]
 
int psnet_same(net_addr *a1, net_addr *a2)
 
#define MULTI_JOIN_RESTR_MODE_4
 
int multi_find_player_by_ship_name(const char *ship_name, bool inc_respawning)
 
#define MULTI_JOIN_RESTR_MODE_1
 
int multi_netplayer_state_check2(int state, int state2, int ignore_standalone)
 
int Multi_ship_status_stamp
 
#define DCF(function_name, help_text)
The potent DCF macro, used to define new debug commands for the console. 
 
void send_host_restr_packet(char *callsign, int code, int mode)
 
void multi_make_fake_players(int count)
 
void multi_handle_end_mission_request()
 
void multi_ping_reset(ping_struct *ps)
 
#define MULTI_END_ERROR_HOST_LEFT
 
int multi_num_observers()
 
player Players[MAX_PLAYERS]
 
#define CONNECTION_SPEED_56K
 
void multi_eval_socket_error(PSNET_SOCKET sock, int error)
 
void std_connect_set_host_connect_status()
 
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
 
#define NG_MODE_RANK_ABOVE
 
void afterburners_stop(object *objp, int key_released)
 
void multi_display_chat_msg(const char *msg, int player_index, int add_id)
 
#define JOIN_DENY_JR_INGAME_JOIN
 
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 multi_kick_player(int player_index, int ban, int reason)
 
void multi_data_handle_incoming(int handle)
 
GLdouble GLdouble GLdouble r
 
int multi_create_lookup_mission(char *fname)
 
struct matrix::@228::@230 vec
 
#define NETINFO_FLAG_AM_MASTER
 
void send_debrief_event()
 
char * get_text_address(char *text, ubyte *address)
 
void ml_printf(const char *format,...)
 
uint bitbuffer_get_unsigned(bitbuffer *bitbuf, int bit_count)
 
int voice_token_timestamp
 
#define JOIN_DENY_JR_FULL
 
#define MULTI_FS_SERVER_COMPATIBLE_VERSION
 
multi_server_options options
 
PSNET_SOCKET_RELIABLE reliable_socket
 
int Game_do_state_should_skip
 
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)
 
#define MSO_FLAG_INGAME_XFER
 
char * cfgets(char *buf, int n, CFILE *cfile)
 
#define CONNECTION_SPEED_CABLE
 
GLboolean GLboolean GLboolean GLboolean a
 
void bitbuffer_init(bitbuffer *bitbuf, ubyte *data)
 
int unreliable_buffer_size
 
void multi_flush_mission_stuff()
 
void multi_maybe_send_ship_status()
 
bool object_get_gliding(object *objp)
 
#define MULTI_END_NOTIFY_SERVER_LEFT
 
#define NUM_BUTTON_FIELDS
 
#define ACCEPT_PLAYER_DATA
 
void send_accept_packet(int new_player_num, int code, int ingame_join_team)
 
int cfile_flush_dir(int dir_type)
 
void multi_xfer_handle_force_dir(int handle, int cf_type)
 
#define MULTI_SIG_NON_PERMANENT
 
void multi_broadcast_stats(int stats_code)
 
void multi_rate_reset(int np_index)
 
void vm_orthogonalize_matrix(matrix *m_src)
 
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
 
int bitbuffer_write_flush(bitbuffer *bitbuf)
 
GLuint64EXT GLuint GLuint GLenum GLenum GLuint GLuint GLenum GLuint GLuint key1
 
void std_gen_set_text(char *str, int field_num)
 
#define MULTI_TEMP_OBSERVER(np)
 
int multi_pack_unpack_position(int write, ubyte *data, vec3d *pos)
 
#define SF_HIDDEN_FROM_SENSORS
 
#define NETINFO_FLAG_MISSION_OK
 
void mission_hotkey_exit()
 
#define IS_MISSION_MULTI_DOGFIGHT
 
void multi_xfer_xor_flags(int handle, int flags)
 
#define MULTI_OBSERVER(np)
 
#define NETINFO_FLAG_INGAME_JOIN
 
void std_add_chat_text(const char *text, int player_index, int add_id)
 
#define NUM_CHAT_START_WORDS
 
#define HUD_SOURCE_HIDDEN
 
#define MSO_FLAG_SS_LEADERS
 
#define MULTI_XFER_FLAG_REJECT
 
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
 
int multi_xfer_send_file(PSNET_SOCKET_RELIABLE who, char *filename, int cfile_flags, int flags)
 
int engine_recharge_index
 
#define SF_PRIMARY_LINKED
 
void pilot_set_short_callsign(player *p, int max_width)
 
void multi_data_handle_drop(int player_index)
 
void fill_net_addr(net_addr *addr, ubyte *address, ushort port)
 
net_player_server_info s_info
 
#define CONNECTION_SPEED_NONE
 
#define NETGAME_STATE_MISSION_SYNC
 
#define JOIN_DENY_JR_BAD_VERSION
 
const char * multi_random_death_word()
 
#define NETINFO_FLAG_HAXOR
 
char mission_name[NAME_LENGTH+1]
 
#define OF_COULD_BE_PLAYER
 
#define NETINFO_FLAG_GAME_HOST
 
int multi_netplayer_state_check3(int state, int state2, int state3, int ignore_standalone)
 
void multi_data_handle_join(int player_index)
 
bool dc_optional_string_either(const char *str1, const char *str2)
Searches for an optional string and it's alias. 
 
int multi_find_open_netplayer_slot()
 
angles * vm_extract_angles_matrix(angles *a, const matrix *m)
 
#define KICK_REASON_CANT_XFER
 
char passwd[MAX_PASSWD_LEN+1]
 
void multi_pinfo_popup_kill()
 
int multi_find_open_player_slot()
 
void debrief_handle_player_drop()
 
bool fs2netd_player_banned(net_addr *addr)
 
#define NETPLAYER_IS_DEAD(player)
 
int multi_pack_unpack_desired_vel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi, ship_info *sip)
 
void multi_file_xfer_notify(int handle)
 
void multi_join_notify_new_game()
 
void multi_free_server_list()
 
int reliable_connect_time
 
float multi_char_to_unit(float val)
 
button_info Multi_ship_status_bi
 
int multi_find_player_by_callsign(const char *callsign)
 
int find_player_no_port(net_addr *addr)
 
#define MULTI_MAX_PLAYERS
 
object Objects[MAX_OBJECTS]
 
void add_net_button_info(net_player *p, button_info *bi, int unique_id)
 
int get_mission_info(const char *filename, mission *mission_p, bool basic)
 
void multi_warpout_all_players()
 
ushort Multi_current_file_checksum
 
char pxo_squad_name[LOGIN_LEN]
 
#define MULTI_JOIN_RESTR_MODE_3
 
const char * XSTR(const char *str, int index)
 
void multi_kick_get_text(net_player *pl, int reason, char *str)
 
void multi_assign_player_ship(int net_player_num, object *objp, int ship_class)
 
#define IS_MISSION_MULTI_COOP
 
int multi_string_to_status(char *valid_string)
 
#define JOIN_DENY_JR_PASSWD
 
button_info last_buttons[BUTTON_INFO_SAVE_COUNT]
 
int cf_chksum_short(const char *filename, ushort *chksum, int max_size, int cf_type)
 
#define MULTIPLAYER_STANDALONE
 
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
 
void multi_create_standalone_object()
 
int cf_chksum_long(const char *filename, uint *chksum, int max_size, int cf_type)
 
#define JOIN_DENY_JR_RANK_LOW
 
void hud_scrollback_exit()
 
#define MULTI_END_NOTIFY_NONE
 
int last_buttons_id[BUTTON_INFO_SAVE_COUNT]
 
#define MVALID_STATUS_VALID
 
void stuff_netplayer_info(net_player *nplayer, net_addr *addr, int ship_class, player *pplayer)
 
#define INGAME_JOIN_FLAG_FILE_XFER
 
#define NETGAME_STATE_IN_MISSION
 
void dc_stuff_int(int *i)
Stuffs an int to the given variable. Supports binary (0b), hexadecimal (0x), and octal (0o) formats...
 
GLuint const GLchar * name
 
void remove_ship_status_item(net_player *p, int id)
 
#define NETINFO_FLAG_CONNECTED
 
void multi_server_update_player_weapons(net_player *pl, ship *shipp)
 
ushort Next_asteroid_signature
 
#define JOIN_DENY_JR_STATE
 
#define NETPLAYER_STATE_MISSION_XFER
 
char * cf_add_ext(const char *filename, const char *ext)
 
int lookup_ship_status(net_player *p, int unique_id, int remove)
 
int multi_message_should_broadcast(int type)
 
void dc_stuff_string_white(char *out_str, size_t maxlen)
Stuffs a whitespace delimited string to out_str from the command line, stopping at the end of the com...
 
#define MULTI_SIG_ASTEROID
 
int multi_quit_game(int prompt, int notify_code, int err_code, int wsa_error)
 
GLboolean GLboolean GLboolean b
 
#define MULTI_PERM_OBSERVER(np)
 
void send_host_captain_change_packet(short player_id, int captain_change)
 
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
 
join_request Multi_restr_join_request
 
SCP_vector< multi_create_info > Multi_create_mission_list
 
void multi_free_active_games()
 
void obj_delete(int objnum)
 
void multi_options_update_netgame()
 
void multi_process_valid_join_request(join_request *jr, net_addr *who_from, int ingame_join_team)
 
int Multi_join_restr_mode
 
void CAP(T &v, T mn, T mx)
 
void hud_escort_remove_player(short id)
 
int multi_query_lag_status()
 
int cfputs(const char *str, CFILE *cfile)
 
#define NG_FLAG_TEMP_CLOSED
 
#define SF_SECONDARY_DUAL_FIRE
 
#define NG_MODE_RESTRICTED
 
void multi_unpack_orient_matrix(ubyte *data, matrix *m)
 
int set_target_objnum(ai_info *aip, int objnum)
 
void delete_player(int player_num, int kicked_reason)
 
#define INACTIVE_LIMIT_NORMAL
 
#define MULTI_CONNECTED(np)
 
#define MULTI_END_NOTIFY_KICKED_CANT_XFER
 
fix last_full_update_time
 
int std_remove_player(net_player *p)
 
fix timer_get_fixed_seconds()
 
int multi_find_player_by_parse_object(p_object *p_objp)
 
void send_ingame_nak(int state, net_player *p)
 
void send_ship_status_packet(net_player *pl, button_info *bi, int id)
 
char passwd[MAX_PASSWD_LEN+1]
 
void send_player_stats_block_packet(net_player *pl, int stats_code, net_player *target, short offset)
 
void multi_handle_state_special()
 
int std_player_is_banned(const char *name)
 
bool fs2netd_get_valid_missions()
 
#define NETINFO_FLAG_RESPAWNING
 
int multi_pack_unpack_desired_rotvel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi, ship_info *sip)
 
#define JOIN_DENY_JR_TEMP_CLOSED
 
#define PLAYER_FLAGS_STRUCTURE_IN_USE
 
#define MULTIPLAYER_MASTER
 
An overhauled/updated debug console to allow monitoring, testing, and general debugging of new featur...
 
SCP_vector< ship_info > Ship_info
 
int multi_get_player_ship(int np_index)
 
vec3d afterburner_max_vel
 
int multi_msg_text_process(int k)
 
GLenum GLsizei GLenum GLenum const GLvoid * data
 
void multi_player_ships_available(int *team_0, int *team_1)
 
int Multi_current_file_length
 
#define MLO_FLAG_LOCAL_BROADCAST
 
int multi_create_player(int net_player_num, player *pl, const char *name, net_addr *addr, int ship_class, short id)
 
void shipfx_warpout_start(object *objp)
 
void button_strip_noncritical_keys(button_info *bi)
 
char callsign[CALLSIGN_LEN+1]
 
void vm_quaternion_rotate(matrix *M, float theta, const vec3d *u)                    
 
void drop_leading_white_space(char *str)
 
object * multi_get_network_object(ushort net_signature)
 
#define IP_ADDRESS_LENGTH
 
#define MVALID_STATUS_UNKNOWN
 
float vm_vec_dot(const vec3d *v0, const vec3d *v1)
 
int bitbuffer_get_signed(bitbuffer *bitbuf, int bit_count)
 
#define NETINFO_FLAG_KICKED
 
void std_create_gen_dialog(char *title)
 
active_game * multi_update_active_games(active_game *ag)
 
void multi_get_mission_checksum(const char *filename)
 
int multi_kick_is_banned(net_addr *addr)
 
void multi_ts_handle_player_drop()
 
#define NETGAME_STATE_ENDGAME
 
char multi_unit_to_char(float unit)
 
void multi_apply_ship_status(net_player *p, button_info *bi, int locally)
 
bool dc_optional_string(const char *pstr)
Searches for an optional string. 
 
#define ACK_FILE_ACCEPTED
 
void std_add_player(net_player *p)
 
#define MLO_FLAG_XFER_MULTIDATA
 
void dc_printf(const char *format,...)
Prints the given char string to the debug console. 
 
#define KICK_REASON_INGAME_ENDED
 
void multi_set_network_signature(ushort signature, int what_kind)
 
void control_config_cancel_exit()
 
active_game * Active_game_head
 
int find_player_socket(PSNET_SOCKET_RELIABLE sock)
 
void HUD_printf(const char *format,...)
 
char squad_filename[MAX_FILENAME_LEN+1]
 
fix last_buttons_time[BUTTON_INFO_SAVE_COUNT]
 
void multi_pack_orient_matrix(ubyte *data, matrix *m)
 
ushort multi_assign_network_signature(int what_kind)
 
#define JOIN_DENY_JR_BANNED
 
server_item * Game_server_head
 
int multi_is_valid_unknown_packet(ubyte type)
 
int multi_can_message(net_player *p)
 
int std_connect_set_connect_count()
 
char * psnet_addr_to_string(char *text, net_addr *address)
 
#define JOIN_DENY_JR_RANK_HIGH
 
int cfclose(CFILE *cfile)
 
void psnet_rel_close_socket(PSNET_SOCKET_RELIABLE *sockp)
 
net_addr Multi_restr_addr
 
GLenum const GLvoid * addr
 
#define NETGAME_STATE_FORMING
 
void send_leave_game_packet(short player_id, int kicked_reason, net_player *target)
 
void std_multi_setup_goal_tree()
 
int multi_ts_get_team(char *ship_name)
 
int multi_find_player_by_object(object *objp)
 
int cf_get_file_list(SCP_vector< SCP_string > &list, int pathtype, const char *filter, int sort=CF_SORT_NONE, SCP_vector< file_list_info > *info=NULL)
 
int parse_create_object(p_object *pobjp)
 
#define MULTI_IS_TRACKER_GAME
 
void chatbox_add_line(const char *msg, int pid, int add_id)
 
char title[NAME_LENGTH+1]
 
net_player Net_players[MAX_PLAYERS]
 
int timer_get_milliseconds()
 
int multi_msg_text_mode()
 
void gameseq_post_event(int event)
 
int shield_recharge_index
 
#define SHORT_CALLSIGN_PIXEL_W
 
#define JOIN_DENY_JR_CLOSED
 
sound to indicate voice is about to start 
 
ushort netmisc_calc_checksum(void *vptr, int len)
 
multi_global_options Multi_options_g
 
int multi_pause_eat_keys()
 
int cfilelength(CFILE *cfile)
 
char ship_name[NAME_LENGTH]
 
int multi_find_player_by_net_signature(ushort net_signature)
 
#define JOIN_QUERY_RESTRICTED
 
int cf_access(const char *filename, int dir_type, int mode)
 
multi_local_options options
 
void send_endgame_packet(net_player *pl)
 
#define MULTI_MAX_CONNECTIONS
 
int shifted_ascii_table[]
 
p_object * Player_start_pobject
 
int server_all_filesigs_ok()
 
struct fs_builtin_mission * game_find_builtin_mission(char *)
 
char std_passwd[STD_PASSWD_LEN+1]
 
#define NG_FLAG_INGAME_JOINING
 
ushort Next_debris_signature
 
int multi_can_end_mission(net_player *p)
 
int multi_pack_unpack_rotvel(int write, ubyte *data, matrix *orient, vec3d *pos, physics_info *pi)