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)