53 #define MAX_PXO_TEXT_LEN                                        255 
   56 #define MULTI_PXO_NUM_BUTTONS                           15 
   57 #define MULTI_PXO_PLIST_UP                                      0 
   58 #define MULTI_PXO_PLIST_DOWN                            1 
   59 #define MULTI_PXO_RANKINGS                                      2 
   60 #define MULTI_PXO_PINFO                                         3 
   61 #define MULTI_PXO_FIND                                          4 
   62 #define MULTI_PXO_MOTD                                          5 
   63 #define MULTI_PXO_JOIN                                          6 
   64 #define MULTI_PXO_JOIN_PRIV                             7 
   65 #define MULTI_PXO_CHAN_UP                                       8 
   66 #define MULTI_PXO_CHAN_DOWN                             9 
   67 #define MULTI_PXO_TEXT_UP                                       10 
   68 #define MULTI_PXO_TEXT_DOWN                             11 
   69 #define MULTI_PXO_EXIT                                          12 
   70 #define MULTI_PXO_HELP                                          13 
   71 #define MULTI_PXO_GAMES                                         14 
  111 #define MULTI_PXO_NUM_TEXT                      16 
  166 #define MULTI_PXO_ANIM_FNAME                            "pxologo" 
  167 #define MULTI_PXO_ANIM_X                                        0 
  168 #define MULTI_PXO_ANIM_Y                                        4 
  172 #define MULTI_PXO_RANK_TIME                             (5.0f)   
  182 #define MULTI_PXO_MODE_NORMAL                   0                       // normal mode 
  183 #define MULTI_PXO_MODE_PRIVATE          1                       // private channel popup 
  184 #define MULTI_PXO_MODE_FIND                     2                       // find player popup 
  271 #define MAX_CHANNEL_NAME_LEN                    32 
  272 #define MAX_CHANNEL_DESCRIPT_LEN                120 
  275 #define SWITCHING_CHANNELS()                    (Multi_pxo_channel_switch.num_users != -1) 
  276 #define ON_CHANNEL()                                            (Multi_pxo_channel_current.num_users != -1) 
  291 #define MULTI_PXO_AUTOJOIN_PREFIX                                       "#lobby"         
  294 #define MULTI_PXO_AUTOJOIN_CHANNEL                                      "#autoselect" 
  306 #define CHAN_PLAYERS_COLUMN             0 
  307 #define CHAN_GAMES_COLUMN                       1 
  313 #define CHANNEL_REFRESH_TIME                    (75.0f) 
  316 #define CHANNEL_SERVER_REFRESH_TIME     (35.0f) 
  390 #define MAX_PLAYER_NAME_LEN             32 
  465 DCF(players, 
"Adds the specified number of bogus players to the PXO listing (Multiplayer)")
 
  479 #define MAX_CHAT_LINES                                  60 
  480 #define MAX_CHAT_LINE_LEN                               256 
  511 #define MULTI_PXO_SERVER_PREFIX         "*** " 
  514 #define MULTI_PXO_HAS_LEFT                              "has left" 
  517 #define CHAT_MODE_NORMAL                                0                       // normal chat from someone 
  518 #define CHAT_MODE_SERVER                                1                       // is from the server, display appropriately 
  519 #define CHAT_MODE_CARRY                                 2                       // is a carryover from a previous line 
  520 #define CHAT_MODE_PRIVATE                               3                       // is a private message 
  521 #define CHAT_MODE_CHANNEL_SWITCH                4                       // "switching channels" message - draw in red 
  522 #define CHAT_MODE_MOTD                                  5                       // message of the day from the chat server 
  564 #define MULTI_PXO_SWITCH_DELAY_TIME                     2000 
  591 static int Can_scroll_down = 0;
 
  622 #define MAX_PXO_MOTD_LEN                        1024 
  623 #define PXO_MOTD_BLINK_TIME             500 
  677 #define MULTI_PXO_COM_NUM_BUTTONS               2 
  678 #define MULTI_PXO_COM_CANCEL                            0 
  679 #define MULTI_PXO_COM_OK                                        1 
  692 #define MULTI_PXO_COM_NUM_TEXT                  2 
  754 #define MULTI_PXO_PRIV_MAX_TEXT_LEN             30 
  821 #define MULTI_PXO_PINFO_NUM_BUTTONS             2 
  822 #define MULTI_PXO_PINFO_MEDALS                  0 
  823 #define MULTI_PXO_PINFO_OK                                      1 
  837 #define MULTI_PXO_PINFO_NUM_TEXT                        2 
  861 #define MULTI_PXO_PINFO_NUM_LABELS                      18 
  881         10,20,10,10,20,10,10,20,10,10,20,10,10,20,10,20,10,0
 
  912 #define MULTI_PXO_NOTIFY_TIME                           4000 
  913 #define MULTI_PXO_NOTIFY_Y                                      435 
  936 #define MULTI_PXO_HELP_NUM_BUTTONS                      3 
  937 #define MULTI_PXO_HELP_PREV                                     0 
  938 #define MULTI_PXO_HELP_NEXT                                     1 
  939 #define MULTI_PXO_HELP_CONTINUE                         2 
  954 #define MULTI_PXO_HELP_NUM_TEXT                         1 
  965 #define MULTI_PXO_HELP_FILE                     "pxohelp.txt" 
  966 #define MULTI_PXO_MAX_LINES_PP          57 
  967 #define MULTI_PXO_MAX_PAGES                     5 
 1021 #define PXO_BANNERS_CONFIG_FILE                 "pxobanners.cfg" 
 1034 #define PXO_BAN_MODE_LIST_STARTUP               0               // start downloading list 
 1035 #define PXO_BAN_MODE_LIST                                       1               // downloading list 
 1036 #define PXO_BAN_MODE_IMAGES_STARTUP             2               // start downloading images 
 1037 #define PXO_BAN_MODE_IMAGES                             3               // downloading images 
 1038 #define PXO_BAN_MODE_IMAGES_DONE                        4               // done downloading everything - now maybe load an image 
 1039 #define PXO_BAN_MODE_IDLE                                       5               // done with everything - doing nothing 
 1040 #define PXO_BAN_MODE_CHOOSE_RANDOM              6               // choose a bitmap we've already downloaded at random 
 1096         Assert(Multi_pxo_com_bitmap != -1);
 
 1147         Multi_pxo_channel_button.
hide();
 
 1151         Multi_pxo_player_button.
hide();
 
 1159         Multi_pxo_ban_button.
hide();
 
 1170         memset(&Multi_pxo_channel_current,0,
sizeof(
pxo_channel));
 
 1171         Multi_pxo_channel_current.
num_users = -1;
 
 1174         memset(&Multi_pxo_channel_switch,0,
sizeof(
pxo_channel));        
 
 1175         Multi_pxo_channel_switch.
num_users = -1;        
 
 1181         Multi_pxo_switch_delay = -1;
 
 1200                 char anim_filename[32] = 
"2_";
 
 1371         int k = Multi_pxo_window.
process();
 
 1387                 Multi_pxo_chat_input.
hide();
 
 1388                 Multi_pxo_chat_input.
disable();
 
 1390                 Multi_pxo_chat_input.
enable();
 
 1391                 Multi_pxo_chat_input.
unhide();
 
 1405                 if ( !validate_code ) {
 
 1463         Multi_pxo_window.
draw();
 
 1518         memset(&Multi_pxo_channel_current,0,
sizeof(
pxo_channel));
 
 1519         Multi_pxo_channel_current.
num_users = -1;
 
 1534         ml_printf(
"PXO:  Got DISCONNECT from server!");
 
 1553         tok = strtok(midway,
" ");
 
 1555                 strcpy(string2,tok);
 
 1566         int r = (
int) ShellExecute(NULL, 
NOX(
"open"), url, NULL, NULL, SW_SHOW);
 
 1570                         case ERROR_BAD_FORMAT: 
 
 1571                         case SE_ERR_ACCESSDENIED: 
 
 1572                         case SE_ERR_ASSOCINCOMPLETE: 
 
 1573                         case SE_ERR_DDEBUSY:
 
 1574                         case SE_ERR_DDEFAIL:
 
 1575                         case SE_ERR_DDETIMEOUT:
 
 1576                         case SE_ERR_DLLNOTFOUND:
 
 1579                         case SE_ERR_NOASSOC:
 
 1580                         case ERROR_FILE_NOT_FOUND:
 
 1581                         case ERROR_PATH_NOT_FOUND:
 
 1593 #ifndef HARDWARE_ONLY 
 1629         char nick_temp[512];
 
 1633         if((string1 == NULL) || (string2 == NULL)){
 
 1638         memset(nick_temp,0,512);
 
 1642         tok = strtok(nick_temp,
" ");
 
 1644                 strcpy(string2,tok);
 
 1647                 tok = strtok(NULL,
" ");
 
 1650                                 strcat(string2,
"_");
 
 1651                                 strcat(string2,tok);
 
 1654                         tok = strtok(NULL,
" ");
 
 1657                 strcpy(string2,string1);
 
 1672         tok = strtok(tmp,
" ");
 
 1786                 if(Multi_pxo_player_select != NULL){
 
 1795                                 sprintf(stats,
XSTR(
"Could not get stats for %s\n(May not be a registered pilot)",946),Multi_pxo_player_select->
name);
 
 1900                         nprintf((
"Network",
"PXO : using last channel\n"));
 
 1904                         nprintf((
"Network",
"PXO : using autojoin channel\n"));
 
 1932         char join_fail_str[256];
 
 1946                 memset(join_str, 0, 256);
 
 1947                 memset(join_fail_str, 0, 256);
 
 1951                         strcpy_s(join_str, 
XSTR(
"Joining last channel (", 982));
 
 1955                         strcpy_s(join_fail_str, 
XSTR(
"Unable to join last channel", 983));
 
 1957                         strcpy_s(join_str, 
XSTR(
"Autojoining public channel", 984));
 
 1958                         strcpy_s(join_fail_str, 
XSTR(
"Unable to autojoin public channel", 985));
 
 2049                                 memset(msg_str, 0, 512);
 
 2077                                 memset( &Multi_pxo_channel_current, 0, 
sizeof(
pxo_channel) );
 
 2078                                 Multi_pxo_channel_switch.
num_users = -1;                        
 
 2087                                 if (lookup == NULL) {
 
 2124         from = strtok(data,
" ");
 
 2125         to = strtok(NULL,
"");
 
 2126         if((from != NULL) && (to != NULL)){
 
 2177         if (lookup != NULL) {
 
 2180                 nprintf((
"Network",
"PXO : updated channel %s server count to %d\n",name,count));
 
 2181                 ml_printf(
"PXO : updated channel %s server count to %d", name, count);
 
 2183                 ml_printf(
"PXO : unable to locate channel when trying to update count for %s", name);
 
 2236         if(Multi_pxo_channels != NULL){         
 
 2243                                 moveup = moveup->
next;                  
 
 2248                         } 
while(moveup != Multi_pxo_channels);
 
 2249                         Multi_pxo_channels = NULL;
 
 2253                 Multi_pxo_channels = NULL;
 
 2257                 Multi_pxo_channel_start = NULL;
 
 2261                 Multi_pxo_channel_select = NULL;
 
 2270         char *name_tok,*user_tok,*desc_tok;
 
 2275         nprintf((
"Network",
"Making some channels!\n"));
 
 2280         name_tok = strtok(chan_str,
" ");
 
 2281         if(name_tok == NULL){
 
 2287                 user_tok = strtok(NULL,
" ");
 
 2290                 desc_tok = strtok(NULL,
"$");
 
 2293                 if((name_tok == NULL) || (user_tok == NULL) || (desc_tok == NULL)){
 
 2298                 num_users = (
ubyte)atoi(user_tok);
 
 2319                 name_tok = strtok(NULL,
" ");
 
 2320         } 
while(name_tok != NULL);
 
 2349         if ( new_channel == NULL ) {
 
 2350                 nprintf((
"Network", 
"Cannot allocate space for new pxo_channel structure\n"));
 
 2358         if ( *list != NULL ) {
 
 2360                 new_channel->
next->
prev = new_channel;
 
 2361                 (*list)->
next = new_channel;
 
 2362                 new_channel->
prev = *list;
 
 2364                 *list = new_channel;
 
 2365                 (*list)->
next = (*list)->
prev = *list;
 
 2389                 moveup = moveup->
next;
 
 2390         } 
while((moveup != list) && (moveup != NULL));
 
 2404         if((Multi_pxo_channel_start == NULL) && (Multi_pxo_channels != NULL)){
 
 2410         if((Multi_pxo_channel_select == NULL) && (Multi_pxo_channels != NULL)){
 
 2418         if((Multi_pxo_switch_delay != -1) && 
timestamp_elapsed(Multi_pxo_switch_delay)){
 
 2419                 Multi_pxo_switch_delay = -1;
 
 2423         if(Multi_pxo_channel_button.
pressed()){
 
 2432                         for(idx=0;idx<item_index;idx++){
 
 2433                                 Multi_pxo_channel_select = Multi_pxo_channel_select->
next;
 
 2452                 nprintf((
"Network",
"Refreshing channels\n"));
 
 2474         if (lookup == NULL) {
 
 2479                 if ( strlen(lookup->
name) ) {
 
 2485                 lookup = lookup->
next;
 
 2486         } 
while ( (lookup != NULL) && (lookup != Multi_pxo_channels) );
 
 2498         if ( strlen(Multi_pxo_channel_current.
name) ) {
 
 2511         char chan_users[15];
 
 2512         char chan_servers[15];
 
 2513         int user_w,server_w;
 
 2514         int disp_count,y_start;
 
 2526                 if(moveup == Multi_pxo_channel_select){
 
 2535                 memset(chan_users, 0, 15);
 
 2542                 memset(chan_servers,0,15);
 
 2562                 y_start += line_height;         
 
 2565                 moveup = moveup->
next;
 
 2575         if((Multi_pxo_channel_start == NULL) || (Multi_pxo_channel_start == Multi_pxo_channels)){
 
 2581         Multi_pxo_channel_start = Multi_pxo_channel_start->
prev;
 
 2592         if((Multi_pxo_channel_start == NULL) || (Multi_pxo_channel_start->
next == Multi_pxo_channels)){
 
 2604         Multi_pxo_channel_start = Multi_pxo_channel_start->
next;
 
 2614         char switch_msg[256];
 
 2641                 memset(&Multi_pxo_channel_current,0,
sizeof(
pxo_channel));
 
 2642                 Multi_pxo_channel_current.
num_users = -1;
 
 2647                 memcpy(&Multi_pxo_channel_switch,chan,
sizeof(
pxo_channel));
 
 2653                 memset(switch_msg,0,256);
 
 2655                 if(strlen(Multi_pxo_channel_switch.
name) > 1){
 
 2656                         sprintf(switch_msg, 
"[Switching to channel %s]", Multi_pxo_channel_switch.
name + 1);
 
 2658                         sprintf(switch_msg, 
"[Switching to channel %s]", Multi_pxo_channel_switch.
name);
 
 2684                 memset(&Multi_pxo_channel_switch,0,
sizeof(
pxo_channel));
 
 2685                 Multi_pxo_channel_switch.
num_users = -1;
 
 2698                 memcpy(&Multi_pxo_channel_current,&Multi_pxo_channel_switch,
sizeof(
pxo_channel));
 
 2699                 Multi_pxo_channel_switch.
num_users = -1;
 
 2740         if(Multi_pxo_players != NULL){          
 
 2747                                 moveup = moveup->
next;                  
 
 2752                         } 
while(moveup != Multi_pxo_players);
 
 2753                         Multi_pxo_players = NULL;
 
 2757         Multi_pxo_player_start = NULL;  
 
 2758         Multi_pxo_player_select = NULL;
 
 2770         if ( new_player == NULL ) {
 
 2771                 nprintf((
"Network", 
"Cannot allocate space for new player_list structure\n"));
 
 2778         if ( Multi_pxo_players != NULL ) {
 
 2779                 new_player->
next = Multi_pxo_players->
next;
 
 2780                 new_player->
next->
prev = new_player;
 
 2781                 Multi_pxo_players->
next = new_player;
 
 2784                 Multi_pxo_players = new_player;
 
 2810                         if(lookup->
next == lookup){
 
 2811                                 Assert(lookup == Multi_pxo_players);
 
 2813                                 Multi_pxo_players = NULL;
 
 2822                                 if((lookup == Multi_pxo_player_select) && (Multi_pxo_player_select != NULL)){
 
 2823                                         Multi_pxo_player_select = Multi_pxo_player_select->
next;
 
 2827                                 if(lookup == Multi_pxo_player_start){
 
 2829                                         if(Multi_pxo_players == lookup){
 
 2830                                                 Multi_pxo_player_start = Multi_pxo_player_start->
next;
 
 2835                                                 Multi_pxo_player_start = Multi_pxo_player_start->
prev;
 
 2840                                 if(lookup == Multi_pxo_players){
 
 2841                                         Multi_pxo_players = Multi_pxo_players->
next;                                    
 
 2845                                 lookup->
next = NULL;
 
 2846                                 lookup->
prev = NULL;
 
 2859                 lookup = lookup->
next;
 
 2860         } 
while((lookup != NULL) && (lookup != Multi_pxo_players));
 
 2880                 lookup = lookup->
next;
 
 2881         } 
while((lookup != NULL) && (lookup != Multi_pxo_players));
 
 2896         if((Multi_pxo_player_start == NULL) && (Multi_pxo_players != NULL)){
 
 2901         if((Multi_pxo_player_select == NULL) && (Multi_pxo_players != NULL)){
 
 2906         if(Multi_pxo_player_button.
pressed()){
 
 2918                 if(item_index == 0){
 
 2924                         lookup = lookup->
next;
 
 2929                                 Multi_pxo_player_select = lookup;
 
 2932                 } 
while((lookup != Multi_pxo_players) && (item_index > 0));             
 
 2943         int disp_count,y_start;
 
 2955                 if(moveup == Multi_pxo_player_select){
 
 2972                 y_start += line_height;
 
 2975                 moveup = moveup->
next;
 
 2985         if((Multi_pxo_player_start == NULL) || (Multi_pxo_player_start == Multi_pxo_players)){
 
 2991         Multi_pxo_player_start = Multi_pxo_player_start->
prev;  
 
 3006         if(lookup == NULL ){
 
 3011         while(lookup->
next != Multi_pxo_players){
 
 3012                 lookup = lookup->
next;
 
 3018                 Multi_pxo_player_start = Multi_pxo_player_start->
next;
 
 3037         Multi_pxo_chat = NULL;
 
 3038         Multi_pxo_chat_add = NULL;
 
 3039         Multi_pxo_chat_start = NULL;
 
 3040         Multi_pxo_chat_start_index = -1;
 
 3047                 Assert(new_line != NULL);               
 
 3048                 if(new_line == NULL){
 
 3052                 new_line->
prev = NULL;
 
 3053                 new_line->
next = NULL;          
 
 3056                 if(Multi_pxo_chat == NULL){
 
 3057                         Multi_pxo_chat = new_line;
 
 3061                         Multi_pxo_chat->
prev = new_line;
 
 3063                         Multi_pxo_chat = new_line;
 
 3080         while(moveup != NULL){
 
 3082                 moveup = moveup->
next;
 
 3088         Multi_pxo_chat = NULL;
 
 3089         Multi_pxo_chat_add = NULL;
 
 3090         Multi_pxo_chat_start = NULL;
 
 3091         Multi_pxo_chat_start_index = -1;
 
 3092         Multi_pxo_chat_count = 0;
 
 3105         while(moveup != NULL){
 
 3107                 moveup = moveup->
next;
 
 3111         Multi_pxo_chat_count = 0;
 
 3125         Assert(Multi_pxo_chat_add != NULL);
 
 3130         if(Multi_pxo_chat_add->
next == NULL) {
 
 3132                 temp = Multi_pxo_chat->
next;
 
 3138                 Multi_pxo_chat->
next = NULL;
 
 3141                 Multi_pxo_chat = 
temp;
 
 3144                 Multi_pxo_chat_add = Multi_pxo_chat_add->
next;
 
 3151                 Multi_pxo_chat_add = Multi_pxo_chat_add->
next;
 
 3156                 Multi_pxo_chat_count++;
 
 3170         char msg_total[512],line[512];
 
 3173         const char      *p_str[20];                     
 
 3174         const char *priv_ptr;   
 
 3184         if(priv_ptr != NULL){           
 
 3193         if(priv_ptr != NULL){
 
 3216         Assert((n_lines != -1) && (n_lines <= 20));
 
 3217         if((n_lines < 0) || (n_lines > 20)) {
 
 3228                 memcpy(line,p_str[0],n_chars[0]);
 
 3229                 line[n_chars[0]] = 
'\0';
 
 3233                 for(idx=1; idx<n_lines; idx++){
 
 3234                         memcpy(line,p_str[idx],n_chars[idx]);
 
 3235                         line[n_chars[
idx]] = 
'\0';                      
 
 3251         int y_start, line_height;
 
 3252         int disp_count,token_width;
 
 3261                 if(strlen(Multi_pxo_channel_current.
name) > 1){
 
 3267                 strcpy_s(title,
XSTR(
"Parallax Online - No Channel", 956));
 
 3279         while((moveup != NULL) && (moveup != Multi_pxo_chat_add) && (disp_count < (Multi_pxo_max_chat_display[
gr_screen.
res]))){
 
 3280                 switch(moveup->
mode){
 
 3297                         tok = strtok(piece,
" ");
 
 3307                                 tok = strtok(NULL,
"");
 
 3329                 moveup = moveup->
next;
 
 3331                 y_start += line_height;
 
 3334         if ((moveup != Multi_pxo_chat_add) && (moveup != NULL)) {
 
 3335                 Can_scroll_down = 1;
 
 3337                 Can_scroll_down = 0;
 
 3349         if (Multi_pxo_chat == NULL) {
 
 3354         if(Multi_pxo_chat_count <= Multi_pxo_max_chat_display[
gr_screen.
res]){
 
 3362         if (!Can_scroll_down)
 
 3366                 for(idx=0; idx<Multi_pxo_max_chat_display[
gr_screen.
res]; idx++){
 
 3368                         backup = backup->
prev;          
 
 3371                 Multi_pxo_chat_start = backup;
 
 3384         if ((Multi_pxo_chat_start == NULL) || (Multi_pxo_chat_start == Multi_pxo_chat)) {
 
 3390         Multi_pxo_chat_start = Multi_pxo_chat_start->
prev;      
 
 3407         if (lookup == NULL) {
 
 3411         while (lookup != Multi_pxo_chat_add) {
 
 3412                 lookup = lookup->
next;
 
 3417         if (count > Multi_pxo_max_chat_display[
gr_screen.
res]) {
 
 3431                 Multi_pxo_chat_start = Multi_pxo_chat_start->
next;              
 
 3447         int msg_pixel_width;
 
 3451         memset(msg, 0, 512);
 
 3452         Multi_pxo_chat_input.
get_text(msg);
 
 3458         if ( msg_pixel_width >= (Multi_pxo_input_coords[
gr_screen.
res][2])) {
 
 3459                 remainder = strrchr(msg, 
' ');
 
 3475                         Multi_pxo_chat_input.
set_text(remainder);
 
 3481                 int x = strlen(msg);
 
 3501                         Multi_pxo_chat_input.
set_text(remainder);               
 
 3513 #define PMSG_FROM                       "private message from " 
 3514 #define PMSG_TO                 "private message to " 
 3519         if( strlen(txt) > from_len ){   
 
 3522                         return &txt[from_len];
 
 3527         size_t to_len = strlen( 
PMSG_TO );
 
 3528         if( strlen(txt) > to_len ){     
 
 3531                         return &txt[to_len];
 
 3611         if (Multi_pxo_chat == NULL) {
 
 3612                 Multi_pxo_chat_start_index = -1;                
 
 3617         Multi_pxo_chat_start_index = 0;
 
 3619         while((moveup != Multi_pxo_chat_start) && (moveup != NULL)){
 
 3620                 Multi_pxo_chat_start_index++;
 
 3621                 moveup = moveup->
next;
 
 3650         int cur_len = strlen(Pxo_motd);
 
 3665         if(strlen(text) <= motd_prefix_len){
 
 3670         new_len = strlen(text + motd_prefix_len) - 1;
 
 3672                 strcat_s(Pxo_motd, text + motd_prefix_len + 1);
 
 3674                 mprintf((
"MOTD ADD : %s\n", Pxo_motd));
 
 3686         mprintf((
"MOTD ALL : %s\n", Pxo_motd));
 
 3701                 cfread(&old_chksum, 
sizeof(old_chksum), 1, in);
 
 3705                 if(new_chksum == old_chksum){
 
 3711         if(strlen(Pxo_motd)){
 
 3715                         cfwrite(&new_chksum, 
sizeof(new_chksum), 1, out);
 
 3723         Pxo_motd_blink_stamp = -1;
 
 3725                 Pxo_motd_blink_on = 0;
 
 3726                 if(!Pxo_motd_blinked_already){
 
 3728                         Pxo_motd_blink_on = 1;
 
 3732         Pxo_motd_blinked_already = 1;
 
 3753         if(Pxo_motd_end && !Pxo_motd_read && (Pxo_motd_blink_stamp != -1)){
 
 3761                 if(Pxo_motd_blink_on){
 
 3819         Multi_pxo_com_window.
destroy();
 
 3828         if(Multi_pxo_com_top_text[0] != 
'\0'){
 
 3832         if(Multi_pxo_com_middle_text[0] != 
'\0'){
 
 3836         if(Multi_pxo_com_bottom_text[0] != 
'\0'){
 
 3847         if((txt != NULL) && strlen(txt)){
 
 3848                 strcpy_s(Multi_pxo_com_top_text,txt);
 
 3858         if((txt != NULL) && strlen(txt)){
 
 3859                 strcpy_s(Multi_pxo_com_middle_text,txt);
 
 3869         if((txt != NULL) && strlen(txt)){
 
 3870                 strcpy_s(Multi_pxo_com_bottom_text,txt);
 
 3889         Multi_pxo_priv_return_code = -1;        
 
 3926         k = Multi_pxo_com_window.
process();
 
 3932                 Multi_pxo_priv_return_code = 0;
 
 3949         Multi_pxo_com_window.
draw();    
 
 3957         switch(Multi_pxo_priv_return_code){
 
 3997         char priv_chan_name[128];
 
 4001                 Multi_pxo_priv_return_code = 0;
 
 4005                 Multi_pxo_com_input.
get_text(priv_chan_name);
 
 4009                 if(strlen(priv_chan_name) <= 0){
 
 4010                         Multi_pxo_priv_return_code = 0;
 
 4014                 Multi_pxo_priv_return_code = 1;
 
 4024         char priv_chan_name[128];
 
 4027         if(Multi_pxo_com_input.
pressed()){
 
 4028                 Multi_pxo_com_input.
get_text(priv_chan_name);
 
 4032                 if(strlen(priv_chan_name) <= 0){
 
 4033                         Multi_pxo_priv_return_code = 0;
 
 4038                 Multi_pxo_priv_return_code = 1;
 
 4042                 strcat_s(Multi_pxo_priv_chan, priv_chan_name);
 
 4061         Multi_pxo_find_return_code = -1;
 
 4067         Multi_pxo_searching = 0; 
 
 4073         strcpy_s(Multi_pxo_find_channel,
"");
 
 4107         k = Multi_pxo_com_window.
process();
 
 4113                 Multi_pxo_find_return_code = 0;
 
 4133         Multi_pxo_com_window.
draw();    
 
 4141         switch(Multi_pxo_find_return_code){
 
 4158                 if(Multi_pxo_find_channel[0] != 
'\0'){
 
 4196                 Multi_pxo_find_return_code = 0;
 
 4200                 Multi_pxo_find_return_code = 1;
 
 4211         if(Multi_pxo_com_input.
pressed()){
 
 4213                 if(!Multi_pxo_searching){
 
 4218                         Multi_pxo_com_input.
get_text(name_lookup);
 
 4222                         if(name_lookup[0] != 
'\0'){
 
 4223                                 char search_text[512];
 
 4226                                 Multi_pxo_searching = 1;
 
 4232                                 memset(search_text,0,512);
 
 4233                                 sprintf(search_text,
XSTR(
"Searching for %s",963),name_lookup);
 
 4252         if(!Multi_pxo_searching){
 
 4262                 if((
ptr_s)channel == -1){
 
 4264                         strcpy_s(Multi_pxo_find_channel,
"");
 
 4266                         if(channel[0] == 
'*'){
 
 4268                                 strcpy_s(Multi_pxo_find_channel,
"");
 
 4271                                 memset(p_text,0,512);
 
 4274                                 if(channel[0] == 
'#'){                  
 
 4275                                         sprintf(p_text,
XSTR(
"Found %s on :",966),name_lookup);
 
 4282                                         strcpy_s(Multi_pxo_find_channel,channel);               
 
 4284                                         if(Multi_pxo_find_channel[strlen(Multi_pxo_find_channel) - 1] == 
' '){
 
 4285                                                 Multi_pxo_find_channel[strlen(Multi_pxo_find_channel) - 1] = 
'\0';
 
 4289                                 else if(channel[0] == 
'+'){
 
 4290                                         sprintf(p_text,
XSTR(
"Found %s on a private channel",967),name_lookup);
 
 4293                                         strcpy_s(Multi_pxo_find_channel,
"");
 
 4299                 Multi_pxo_searching = 0;
 
 4321         switch (Multi_pxo_retrieve_mode)
 
 4333                         if (ret_string != NULL) {
 
 4335                                 if ( (
int)ret_string[0] == -1) {
 
 4340                                 if ( !
stricmp(ret_string,
"-1") ) {
 
 4346                                 tok = strtok(temp_string, 
" ");
 
 4350                                         strcpy_s(Multi_pxo_retrieve_id, tok);
 
 4353                                         tok = strtok(NULL, 
"");
 
 4356                                                 strcpy_s(Multi_pxo_retrieve_name, tok);
 
 4368                                 Multi_pxo_retrieve_mode = 1;
 
 4390                                         Multi_pxo_retrieve_mode = 2;
 
 4433         Multi_pxo_retrieve_mode = 0;
 
 4434         strcpy_s(Multi_pxo_retrieve_name, name);
 
 4480         memset(Multi_pxo_pinfo_vals[0], 0, 50);
 
 4485         memset(Multi_pxo_pinfo_vals[1], 0, 50); 
 
 4490         memset(Multi_pxo_pinfo_vals[2], 0, 50);
 
 4494         memset(Multi_pxo_pinfo_vals[3], 0, 50);
 
 4498         memset(Multi_pxo_pinfo_vals[4], 0, 50);
 
 4502         memset(Multi_pxo_pinfo_vals[5], 0, 50);
 
 4506         memset(Multi_pxo_pinfo_vals[6], 0, 50);
 
 4510         memset(Multi_pxo_pinfo_vals[7], 0, 50);
 
 4512                 strcpy_s(Multi_pxo_pinfo_vals[7], 
XSTR(
"No missions flown", 970) );
 
 4515                 tm *tmr = gmtime( &tmp_lf );
 
 4518                         strftime(Multi_pxo_pinfo_vals[7], 30, 
"%m/%d/%y %H:%M", tmr);   
 
 4520                         strcpy_s(Multi_pxo_pinfo_vals[7], 
"");
 
 4524         memset(Multi_pxo_pinfo_vals[8], 0, 50);
 
 4528         memset(Multi_pxo_pinfo_vals[9],0,50);
 
 4532         memset(Multi_pxo_pinfo_vals[10], 0, 50);
 
 4536                 strcpy_s(Multi_pxo_pinfo_vals[10], 
"0%");
 
 4540         memset(Multi_pxo_pinfo_vals[11], 0, 50);
 
 4544         memset(Multi_pxo_pinfo_vals[12], 0, 50);
 
 4548         memset(Multi_pxo_pinfo_vals[13], 0, 50);
 
 4552                 strcpy_s(Multi_pxo_pinfo_vals[13], 
"0%");
 
 4556         memset(Multi_pxo_pinfo_vals[14], 0, 50);
 
 4560         memset(Multi_pxo_pinfo_vals[15], 0, 50);
 
 4564                 strcpy_s(Multi_pxo_pinfo_vals[15], 
"0%");
 
 4568         memset(Multi_pxo_pinfo_vals[16], 0, 50);
 
 4572         memset(Multi_pxo_pinfo_vals[17], 0, 50);
 
 4576                 strcpy_s(Multi_pxo_pinfo_vals[17], 
"0%");
 
 4592         Assert(Multi_pxo_pinfo_bitmap != -1);
 
 4615         Multi_pxo_pinfo_stats_labels[0] = 
vm_strdup(
XSTR(
"Name", 1532));
 
 4616         Multi_pxo_pinfo_stats_labels[1] = 
vm_strdup(
XSTR(
"Rank", 1533));
 
 4617         Multi_pxo_pinfo_stats_labels[2] = 
vm_strdup(
XSTR(
"Kills", 1534));
 
 4618         Multi_pxo_pinfo_stats_labels[3] = 
vm_strdup(
XSTR(
"Assists", 1535));
 
 4619         Multi_pxo_pinfo_stats_labels[4] = 
vm_strdup(
XSTR(
"Friendly kills", 1536));
 
 4620         Multi_pxo_pinfo_stats_labels[5] = 
vm_strdup(
XSTR(
"Missions flown", 1537));
 
 4621         Multi_pxo_pinfo_stats_labels[6] = 
vm_strdup(
XSTR(
"Flight time", 1538));
 
 4622         Multi_pxo_pinfo_stats_labels[7] = 
vm_strdup(
XSTR(
"Last flown", 1539));
 
 4623         Multi_pxo_pinfo_stats_labels[8] = 
vm_strdup(
XSTR(
"Primary shots fired", 1540));
 
 4624         Multi_pxo_pinfo_stats_labels[9] = 
vm_strdup(
XSTR(
"Primary shots hit", 1541));
 
 4625         Multi_pxo_pinfo_stats_labels[10] = 
vm_strdup(
XSTR(
"Primary hit %", 1542));
 
 4626         Multi_pxo_pinfo_stats_labels[11] = 
vm_strdup(
XSTR(
"Secondary shots fired", 1543));
 
 4627         Multi_pxo_pinfo_stats_labels[12] = 
vm_strdup(
XSTR(
"Secondary shots hit", 1544));
 
 4628         Multi_pxo_pinfo_stats_labels[13] = 
vm_strdup(
XSTR(
"Secondary hit %", 1545));
 
 4629         Multi_pxo_pinfo_stats_labels[14] = 
vm_strdup(
XSTR(
"Primary friendly hits", 1546));
 
 4630         Multi_pxo_pinfo_stats_labels[15] = 
vm_strdup(
XSTR(
"Primary friendly hit %", 1547));
 
 4631         Multi_pxo_pinfo_stats_labels[16] = 
vm_strdup(
XSTR(
"Secondary friendly hits", 1548));
 
 4632         Multi_pxo_pinfo_stats_labels[17] = 
vm_strdup(
XSTR(
"Secondary friendly hit %", 1549));
 
 4643         int k = Multi_pxo_pinfo_window.
process();
 
 4675         Multi_pxo_pinfo_window.
draw();  
 
 4695         Multi_pxo_pinfo_window.
destroy();
 
 4698         if(Multi_pxo_pinfo_bitmap != -1){
 
 4704                 vm_free(Multi_pxo_pinfo_stats_labels[i]);
 
 4728                 y_start += Multi_pxo_pinfo_stats_spacing[
idx];
 
 4774         strcpy_s(Multi_pxo_notify_text, txt);
 
 4788         if(Multi_pxo_notify_stamp == -1){
 
 4794                 Multi_pxo_notify_stamp = -1;
 
 4813         if(Multi_pxo_help_bitmap < 0){
 
 4845         Multi_pxo_help_cur = 0;
 
 4861         int k = Multi_pxo_help_window.
process();
 
 4877         if(Multi_pxo_help_bitmap != -1){
 
 4881         Multi_pxo_help_window.
draw();
 
 4901         Multi_pxo_help_window.
destroy();
 
 4905                 for(idx2=0; idx2<Multi_pxo_help_pages[
idx].
num_lines; idx2++){
 
 4907                         if(Multi_pxo_help_pages[idx].text[idx2] != NULL){
 
 4908                                 vm_free(Multi_pxo_help_pages[idx].text[idx2]);
 
 4909                                 Multi_pxo_help_pages[
idx].
text[idx2] = NULL;
 
 4931         Multi_pxo_help_num_pages = 0;
 
 4935         Multi_pxo_help_num_pages = 0;
 
 4936         cp = &Multi_pxo_help_pages[0];
 
 4950                         Multi_pxo_help_num_pages++;
 
 4951                         Assert(Multi_pxo_help_num_pages < MULTI_PXO_MAX_PAGES);
 
 4952                         if(Multi_pxo_help_num_pages >= MULTI_PXO_MAX_PAGES){
 
 4953                                 Multi_pxo_help_num_pages--;
 
 4971         int y_start, line_height;
 
 4979                 if(cp->
text[idx][0] == 
'@'){
 
 4991                 y_start += line_height;
 
 5019                 if(Multi_pxo_help_cur == 0){
 
 5022                         Multi_pxo_help_cur--;
 
 5029                 if(Multi_pxo_help_cur == Multi_pxo_help_num_pages){
 
 5032                         Multi_pxo_help_cur++;
 
 5064                 Multi_pxo_ban_get = NULL;
 
 5068                 Multi_pxo_ban_get = NULL;
 
 5083         char url_string[512] = 
"";
 
 5084         char local_file[512] = 
"";
 
 5087         switch(Multi_pxo_ban_mode){
 
 5097                 Multi_pxo_ban_get = NULL;
 
 5100                 if (Multi_pxo_ban_get == NULL) {
 
 5114                         Multi_pxo_ban_get = NULL;
 
 5126                         Multi_pxo_ban_get = NULL;
 
 5137                 if ( (strlen(Multi_pxo_banner.
ban_file) <= 0) || (strlen(Multi_pxo_banner.
ban_file_url) <= 0) ) {
 
 5152                 Multi_pxo_ban_get = NULL;
 
 5155                 if (Multi_pxo_ban_get == NULL) {
 
 5169                         Multi_pxo_ban_get = NULL;
 
 5181                         Multi_pxo_ban_get = NULL;
 
 5189                 if (Multi_pxo_banner.
ban_file[0] != 
'\0')
 
 5199                 if ( Multi_pxo_ban_button.
pressed() ) {
 
 5218         if(Multi_pxo_ban_get != NULL){
 
 5221                 Multi_pxo_ban_get = NULL;
 
 5236         char file_url[512] = 
"";
 
 5237         char banners[10][512];
 
 5241         int num_banners, 
idx;
 
 5255         for(idx=0; idx<10; idx++){
 
 5261         if(
cfgets(file_url, 254, in) == NULL){
 
 5271         while(num_banners < 10){
 
 5273                 if(
cfgets(banners[num_banners], 254, in) == NULL){
 
 5277                 if(
cfgets(urls[num_banners], 254, in) == NULL){
 
 5295         if(num_banners <= 0){           
 
 5300         if(choose_existing){
 
 5302                 for(idx=0; idx<10; idx++){
 
 5308                 for (idx = 0; idx < num_banners; idx++) {
 
 5316                 if(exist_count <= 0){
 
 5322                 if(select >= exist_count){
 
 5323                         select = exist_count - 1;
 
 5328                 for(idx=0; idx<exist_count; idx++){
 
 5338                 if(idx < exist_count){
 
 5354                 if(idx >= num_banners){
 
 5355                         idx = num_banners - 1;
 
 5398         if((Multi_pxo_banner.
ban_bitmap >= 0) && (Multi_pxo_banner.
ban_url[0] != 
'\0')){
 
void gr_rect(int x, int y, int w, int h, int resize_mode)
 
player Multi_pxo_pinfo_player
 
#define PXO_BAN_MODE_CHOOSE_RANDOM
 
#define MULTI_PXO_TEXT_DOWN
 
void set_text(const char *in)
 
int Multi_pxo_pinfo_coords[GR_NUM_RESOLUTIONS][4]
 
void set_highlight_action(void(*_user_function)(void))
 
void multi_pxo_notify_add(const char *txt)
 
int timestamp(int delta_ms)
 
pxo_channel Multi_pxo_channel_current
 
pxo_channel * multi_pxo_add_channel(char *name, pxo_channel **list)
 
int gameseq_get_previous_state()
 
float Multi_pxo_channel_server_refresh
 
#define UI_INPUTBOX_FLAG_EAT_USED
 
InetGetFile * Multi_pxo_ban_get
 
struct chat_line chat_line
 
uint os_config_read_uint(const char *section, const char *name, uint default_value)
 
#define PXO_MOTD_BLINK_TIME
 
void multi_pxo_priv_button_pressed(int n)
 
void add_XSTR(char *string, int _xstr_id, int _x, int _y, UI_GADGET *_assoc, int _color_type, int _font_id=-1)
 
char Multi_fs_tracker_channel[MAX_PATH]
 
void multi_pxo_handle_kick()
 
#define MULTI_PXO_HELP_NUM_TEXT
 
int cf_delete(const char *filename, int path_type)
Delete the specified file. 
 
#define PXO_BAN_MODE_IMAGES_STARTUP
 
#define CHANNEL_SERVER_REFRESH_TIME
 
help_page Multi_pxo_help_pages[MULTI_PXO_MAX_PAGES]
 
UI_WINDOW Multi_pxo_help_window
 
void multi_pxo_pinfo_blit()
 
void game_do_state_common(int, int)
 
void game_set_frametime(int)
 
void multi_pxo_load_palette()
 
void multi_sg_rank_build_name(char *in, char *out)
 
void multi_pxo_chat_process_incoming(const char *txt, int mode=CHAT_MODE_NORMAL)
 
float frand_range(float min, float max)
Return a floating point number in the range min..max. 
 
char Multi_pxo_mask_fname[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
 
char ban_url[MULTI_OPTIONS_STRING_LEN+1]
 
ui_button_info Multi_pxo_help_buttons[GR_NUM_RESOLUTIONS][MULTI_PXO_HELP_NUM_BUTTONS]
 
chat_line * Multi_pxo_chat
 
int cfread(void *buf, int elsize, int nelem, CFILE *fp)
 
INT64 INT64 INT64 remainder
 
void drop_trailing_white_space(char *str)
 
char * Multi_pxo_com_mask_fname[GR_NUM_RESOLUTIONS]
 
void multi_pxo_help_init()
 
void multi_pxo_clear_players()
 
int Multi_pxo_switch_delay
 
int Multi_pxo_notify_stamp
 
#define MULTI_PXO_HELP_NEXT
 
void multi_pxo_check_buttons()
 
int Multi_pxo_chat_start_index
 
void multi_pxo_channel_refresh_current()
 
int gameseq_get_state(void)
 
void multi_pxo_pinfo_init()
 
#define GR_NUM_RESOLUTIONS
 
void multi_pxo_autojoin()
 
int Multi_pxo_max_chat_display[GR_NUM_RESOLUTIONS]
 
#define MULTI_PXO_COM_NUM_TEXT
 
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
 
void multi_pxo_help_button_pressed(int n)
 
int multi_pxo_is_nick_command(char *msg)
 
int Multi_pxo_must_autojoin
 
void multi_pxo_chat_clear()
 
void multi_pxo_com_set_bottom_text(const char *txt)
 
general failure sound for any event 
 
pxo_channel * multi_pxo_find_channel(char *name, pxo_channel *list)
 
#define MAX_PLAYER_NAME_LEN
 
float Multi_pxo_channel_last_refresh
 
void multi_pxo_com_set_middle_text(const char *txt)
 
void multi_pxo_scroll_chat_up()
 
int bm_get_info(int handle, int *w, int *h, ubyte *flags, int *nframes, int *fps)
Gets info on the bitmap indexed by handle. 
 
int Multi_pxo_com_bottom_text_y[GR_NUM_RESOLUTIONS]
 
int Multi_pxo_must_validate
 
#define PXO_BANNERS_CONFIG_FILE
 
#define PXO_BAN_MODE_IMAGES
 
void multi_pxo_chat_adjust_start()
 
void multi_pxo_get_data(char *name)
 
void multi_pxo_motd_maybe_blit()
 
int Multi_pxo_pinfo_stats_spacing[MULTI_PXO_PINFO_NUM_LABELS]
 
void multi_pxo_button_pressed(int n)
 
#define GR_MAYBE_CLEAR_RES(bmap)
 
#define MULTI_PXO_PRIV_MAX_TEXT_LEN
 
int fs2netd_get_pilot_info(const char *callsign, player *out_plr, bool first_call)
 
#define MAX_CHANNEL_DESCRIPT_LEN
 
void multi_pxo_init(int use_last_channel)
 
void gr_set_color_fast(color *dst)
 
UI_WINDOW Multi_pxo_com_window
 
int cf_create_default_path_string(char *path, uint path_max, int pathtype, const char *filename, bool localize)
 
player_list * multi_pxo_find_player(char *name)
 
unsigned int s_shots_fired
 
void multi_pxo_priv_process_buttons()
 
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
 
void multi_pxo_find_close()
 
void multi_pxo_set_end_of_motd()
 
void multi_pxo_chat_add_line(const char *txt, int mode)
 
int multi_pxo_chat_is_left_message(const char *txt)
 
int Multi_pxo_chat_title_y[GR_NUM_RESOLUTIONS]
 
#define MULTI_PXO_PINFO_NUM_BUTTONS
 
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot. 
 
int Multi_pxo_status_coords[GR_NUM_RESOLUTIONS][4]
 
int Multi_pxo_channel_count
 
#define CF_TYPE_MULTI_CACHE
 
char callsign[CALLSIGN_LEN+1]
 
void multi_pxo_help_close()
 
void generic_anim_unload(generic_anim *ga)
 
#define DCF(function_name, help_text)
The potent DCF macro, used to define new debug commands for the console. 
 
UI_WINDOW Multi_pxo_window
 
char name_lookup[MAX_PXO_TEXT_LEN]
 
int Multi_pxo_must_connect
 
int Multi_pxo_priv_return_code
 
void multi_pxo_ban_clicked()
 
void fs2netd_update_game_count(const char *chan_name)
 
UI_XSTR Multi_pxo_pinfo_text[GR_NUM_RESOLUTIONS][MULTI_PXO_PINFO_NUM_TEXT]
 
void multi_pxo_run_medals()
 
void multi_pxo_motd_add_text(const char *text)
 
int Multi_pxo_help_coords[GR_NUM_RESOLUTIONS][2]
 
pxo_banner Multi_pxo_banner
 
float Multi_pxo_ranking_last
 
void multi_pxo_pinfo_show()
 
void draw_forced(int frame_num)
 
void multi_pxo_blit_channels()
 
void multi_pxo_help_blit_page()
 
void multi_pxo_notify_blit()
 
#define MULTI_PXO_MAX_PAGES
 
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
 
unsigned int missions_flown
 
void set_mask_bmap(char *fname)
 
char ban_file[MAX_FILENAME_LEN+1]
 
int set_bmaps(char *ani_filename, int nframes=3, int start_frame=1)
 
void game_format_time(long, char *)
 
void multi_pxo_ban_close()
 
#define MULTI_PXO_NUM_TEXT
 
void medal_main_init(player *pl, int mode)
 
void multi_pxo_ban_draw()
 
#define MULTI_PXO_HAS_LEFT
 
void set_numberItems(int _numberItems, int _reset=1)
 
#define MULTI_PXO_JOIN_PRIV
 
GLdouble GLdouble GLdouble r
 
char Multi_pxo_bitmap_fname[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
 
char Multi_pxo_status_text[MAX_PXO_TEXT_LEN]
 
void ml_printf(const char *format,...)
 
void multi_pxo_pinfo_close()
 
char Multi_pxo_notify_text[MAX_PXO_TEXT_LEN]
 
#define MULTI_PXO_PLIST_DOWN
 
char * cfgets(char *buf, int n, CFILE *cfile)
 
unsigned int p_shots_fired
 
int multi_pxo_autojoin_do()
 
player_list * Multi_pxo_player_select
 
void multi_pxo_scroll_channels_down()
 
void create(UI_WINDOW *wnd, int _x, int _y, int _w, int _h, int _numberItems, char *_bitmapSliderControl, void(*_upCallback)(), void(*_downCallback)(), void(*_captureCallback)())
 
void multi_pxo_priv_init()
 
#define PXO_CHAT_END_OF_MOTD_PREFIX
 
#define strnicmp(s1, s2, n)
 
#define MULTI_PXO_NOTIFY_TIME
 
int Multi_pxo_chars_per_line[GR_NUM_RESOLUTIONS]
 
#define MULTI_PXO_AUTOJOIN_PREFIX
 
UI_INPUTBOX Multi_pxo_com_input
 
void multi_pxo_api_process()
 
int Multi_pxo_player_slider_coords[GR_NUM_RESOLUTIONS][4]
 
char * Multi_pxo_pinfo_mask_fname[GR_NUM_RESOLUTIONS]
 
char * GetChannelByUser(char *nickname)
 
void generic_anim_render(generic_anim *ga, float frametime, int x, int y, bool menu)
 
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
 
void multi_pxo_priv_close()
 
void multi_pxo_priv_process_input()
 
#define CHAT_MODE_CHANNEL_SWITCH
 
#define MULTI_PXO_MODE_PRIVATE
 
int Multi_pxo_pinfo_bitmap
 
void multi_pxo_scroll_channels_up()
 
#define PXO_BAN_MODE_IMAGES_DONE
 
int multi_pxo_is_end_of_motd_text(const char *txt)
 
uint cf_add_chksum_long(uint seed, ubyte *buffer, int size)
 
int Multi_pxo_help_bitmap
 
int Multi_pxo_input_coords[GR_NUM_RESOLUTIONS][4]
 
void multi_pxo_url(char *url)
 
char Multi_pxo_com_top_text[MAX_PXO_TEXT_LEN]
 
UI_BUTTON Multi_pxo_ban_button
 
#define MULTI_PXO_HELP_CONTINUE
 
pxo_channel * Multi_pxo_channels
 
#define PXO_BAN_MODE_IDLE
 
int Pxo_ban_coords[GR_NUM_RESOLUTIONS][4]
 
int Multi_pxo_com_top_text_coords[GR_NUM_RESOLUTIONS][2]
 
#define MULTI_PXO_NOTIFY_Y
 
char Multi_tracker_id_string[255]
 
void multi_pxo_channel_refresh_servers()
 
void multi_pxo_process_channels()
 
int Multi_pxo_player_count
 
int split_str(const char *src, int max_pixel_w, int *n_chars, const char **p_str, int max_lines, char ignore_char)
 
#define PXO_BAN_MODE_LIST
 
int cfwrite(const void *buf, int elsize, int nelem, CFILE *cfile)
 
int multi_pxo_pinfo_cond()
 
int Multi_pxo_com_input_coords[GR_NUM_RESOLUTIONS][4]
 
void DisconnectFromChatServer()
 
#define MULTI_PXO_MAX_LINES_PP
 
UI_SLIDER2 Multi_pxo_chat_slider
 
#define MULTI_PXO_SWITCH_DELAY_TIME
 
void multi_pxo_help_process_buttons()
 
#define MULTI_OPTIONS_STRING_LEN
 
void multi_pxo_goto_bottom()
 
int Multi_pxo_max_player_display[GR_NUM_RESOLUTIONS]
 
char name[MAX_PLAYER_NAME_LEN+1]
 
int multi_pxo_get_select_index()
 
char Multi_pxo_nick[NAME_LENGTH+1]
 
GLint GLint GLint GLint GLint x
 
void multi_pxo_make_channels(char *chan_str)
 
const char * SendChatString(const char *line, int raw)
 
void multi_pxo_process_nick_change(char *data)
 
char * Multi_pxo_pinfo_stats_labels[MULTI_PXO_PINFO_NUM_LABELS]
 
#define MULTI_PXO_HELP_NUM_BUTTONS
 
const char * XSTR(const char *str, int index)
 
pxo_channel Multi_pxo_channel_switch
 
void multi_pxo_do_normal()
 
void multi_pxo_chat_process()
 
#define MULTI_PXO_MODE_FIND
 
void force_currentItem(int _currentItem)
 
user_click (mouse selects a control) 
 
UI_WINDOW Multi_pxo_pinfo_window
 
void multi_pxo_com_init()
 
#define CHAN_PLAYERS_COLUMN
 
void multi_pxo_unload_palette()
 
int multi_pxo_priv_popup()
 
char * text[MULTI_PXO_MAX_LINES_PP]
 
struct pxo_banner pxo_banner
 
int multi_pxo_is_autojoin(char *name)
 
UI_BUTTON Multi_pxo_channel_button
 
UI_XSTR Multi_pxo_com_text[GR_NUM_RESOLUTIONS][MULTI_PXO_COM_NUM_TEXT]
 
int Multi_pxo_channel_start_index
 
#define MULTI_PXO_MODE_NORMAL
 
chat_line * Multi_pxo_chat_start
 
void multi_pxo_pinfo_build_vals()
 
int Multi_pxo_use_last_channel
 
#define MULTI_PXO_AUTOJOIN_CHANNEL
 
void multi_pxo_com_set_top_text(const char *txt)
 
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
 
#define MAX_CHANNEL_NAME_LEN
 
int Multi_pxo_find_return_code
 
int multi_pxo_can_scroll_down()
 
char * Multi_pxo_com_fname[GR_NUM_RESOLUTIONS]
 
player_list * multi_pxo_add_player(char *name)
 
#define MULTI_PXO_RANKINGS
 
void PSNET_TOP_LAYER_PROCESS()
 
pxo_channel * Multi_pxo_channel_select
 
#define MULTI_PXO_COM_CANCEL
 
char Multi_pxo_channel_last[MAX_CHANNEL_NAME_LEN+1]
 
#define MULTI_PXO_PINFO_NUM_LABELS
 
char * GetChannelList(void)
 
char * Multi_pxo_chat_slider_name[GR_NUM_RESOLUTIONS]
 
#define PXO_CHAT_MOTD_PREFIX
 
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later. 
 
int Multi_pxo_chan_coords[GR_NUM_RESOLUTIONS][4]
 
struct generic_anim::@239::@241 ani
 
int multi_pxo_find_popup()
 
void multi_pxo_com_close()
 
#define MULTI_PXO_HELP_FILE
 
#define MULTI_PXO_CHAN_UP
 
int multi_pxo_connect_do()
 
void multi_pxo_join_channel(pxo_channel *chan)
 
void multi_pxo_ban_init()
 
void multi_pxo_clear_channels()
 
int Multi_pxo_retrieve_mode
 
pxo_channel * Multi_pxo_channel_start
 
void multi_pxo_channel_count_update(char *name, int count)
 
#define MULTI_PXO_TEXT_UP
 
void multi_pxo_underscore_nick(char *string1, char *string2)
 
void link_hotspot(int num)
 
const char * multi_pxo_chat_is_private(const char *txt)
 
void multi_pxo_process_players()
 
void create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _w, int _h, int do_repeat=0, int ignore_focus=0)
 
int Multi_pxo_chat_slider_coords[GR_NUM_RESOLUTIONS][4]
 
#define MULTI_PXO_PINFO_NUM_TEXT
 
void multi_pxo_find_search_process()
 
void multi_pxo_motd_init()
 
int Multi_pxo_chat_coords[GR_NUM_RESOLUTIONS][4]
 
#define UI_XSTR_COLOR_PINK
 
#define CHAT_MODE_PRIVATE
 
char Multi_pxo_retrieve_name[MAX_PLAYER_NAME_LEN+1]
 
#define MULTI_PXO_PLIST_UP
 
void palette_use_bm_palette(int n)
 
char * Multi_pxo_player_slider_name[GR_NUM_RESOLUTIONS]
 
void create(int _x, int _y, int _w, int _h, int _flags, int _f_id=-1)
 
int Multi_pxo_player_coords[GR_NUM_RESOLUTIONS][4]
 
fix timer_get_fixed_seconds()
 
int gr_force_fit_string(char *str, int max_str, int max_width)
 
int multi_pxo_on_private_channel()
 
char * Multi_pxo_help_mask_fname[GR_NUM_RESOLUTIONS]
 
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
 
#define MULTI_PXO_CHAN_DOWN
 
void generic_anim_init(generic_anim *ga)
 
ui_button_info Multi_pxo_pinfo_buttons[GR_NUM_RESOLUTIONS][MULTI_PXO_PINFO_NUM_BUTTONS]
 
void multi_pxo_ban_parse_banner_file(int choose_existing)
 
int Multi_pxo_lines_pp[GR_NUM_RESOLUTIONS]
 
void multi_pxo_handle_channel_change()
 
UI_XSTR Multi_pxo_help_text[GR_NUM_RESOLUTIONS][MULTI_PXO_HELP_NUM_TEXT]
 
#define MULTI_PXO_RANK_TIME
 
char Multi_fs_tracker_filter[MAX_PATH]
 
unsigned int p_bonehead_hits
 
char * Multi_pxo_help_fname[GR_NUM_RESOLUTIONS]
 
An overhauled/updated debug console to allow monitoring, testing, and general debugging of new featur...
 
void common_play_highlight_sound()
 
void create(UI_WINDOW *wnd, int _x, int _y, int _w, int _textlen, char *_text, int _flags=0, int pixel_lim=-1, color *clr=NULL)
 
void main_hall_start_music()
 
GLenum GLsizei GLenum GLenum const GLvoid * data
 
void multi_pxo_handle_disconnect()
 
#define timestamp_elapsed(stamp)
 
void get_mouse_pos(int *xx, int *yy)
 
#define UI_INPUTBOX_FLAG_INVIS
 
int Multi_pxo_com_coords[GR_NUM_RESOLUTIONS][2]
 
char Multi_pxo_find_channel[MAX_CHANNEL_NAME_LEN+1]
 
int Multi_pxo_com_middle_text_y[GR_NUM_RESOLUTIONS]
 
void multi_pxo_find_button_pressed(int n)
 
player_list * Multi_pxo_players
 
BM_TYPE bm_get_type(int handle)
Returns the image type of the given bitmap handle. 
 
#define PXO_BAN_MODE_LIST_STARTUP
 
void drop_leading_white_space(char *str)
 
generic_anim Multi_pxo_anim
 
int multi_pxo_is_motd_text(const char *txt)
 
void multi_pxo_set_status_text(const char *txt)
 
void multi_pxo_process_common()
 
#define CHANNEL_REFRESH_TIME
 
void multi_pxo_find_init()
 
#define MULTI_PXO_COM_NUM_BUTTONS
 
ui_button_info Multi_pxo_buttons[GR_NUM_RESOLUTIONS][MULTI_PXO_NUM_BUTTONS]
 
rank_stuff Ranks[NUM_RANKS]
 
char pxo_rank_url[MULTI_OPTIONS_STRING_LEN]
 
void gr_bitmap(int _x, int _y, int resize_mode)
 
void multi_pxo_find_process_input()
 
#define UI_XSTR_COLOR_GREEN
 
#define MULTI_PXO_HELP_PREV
 
void multi_pxo_chat_blit()
 
int multi_pxo_is_server_text(const char *txt)
 
void multi_pxo_blit_players()
 
int SetNewChatChannel(char *channel)
 
void multi_pxo_get_channels()
 
int Pxo_motd_blinked_already
 
char Multi_pxo_retrieve_id[128]
 
void multi_pxo_chat_init()
 
void multi_pxo_ban_process()
 
#define CHAN_GAMES_COLUMN
 
char pxo_ip[MULTI_OPTIONS_STRING_LEN]
 
char Multi_pxo_priv_chan[MULTI_PXO_PRIV_MAX_TEXT_LEN+100]
 
char ban_file_url[MULTI_OPTIONS_STRING_LEN+1]
 
int bm_unload(int handle, int clear_render_targets, bool nodebug)
Unloads a bitmap's data, but not the bitmap info. 
 
struct help_page help_page
 
void multi_pxo_scroll_players_down()
 
#define MULTI_PXO_ANIM_FNAME
 
#define MULTI_PXO_SERVER_PREFIX
 
char name[MAX_CHANNEL_NAME_LEN+1]
 
void gamesnd_play_iface(int n)
 
int cfclose(CFILE *cfile)
 
char Multi_pxo_com_bottom_text[MAX_PXO_TEXT_LEN]
 
struct ui_button_info ui_button_info
 
struct pxo_channel pxo_channel
 
#define SWITCHING_CHANNELS()
 
char text[MAX_CHAT_LINE_LEN+1]
 
void multi_pxo_scroll_players_up()
 
void multi_pxo_find_process_buttons()
 
player_list * Multi_pxo_player_start
 
int process(int key_in=-1, int process_mouse=1)
 
int generic_anim_stream(generic_anim *ga)
 
void multi_pxo_com_blit_text()
 
void multi_pxo_strip_space(char *string1, char *string2)
 
void multi_pxo_help_load()
 
char * Multi_pxo_pinfo_fname[GR_NUM_RESOLUTIONS]
 
void gameseq_post_event(int event)
 
struct player_list player_list
 
#define UI_INPUTBOX_FLAG_KEYTHRU
 
int ConnectToChatServer(char *serveraddr, char *nickname, char *trackerid)
 
void multi_pxo_chat_free()
 
#define MAX_CHAT_LINE_LEN
 
chat_line * Multi_pxo_chat_add
 
void multi_pxo_del_player(char *name)
 
char Multi_pxo_com_middle_text[MAX_PXO_TEXT_LEN]
 
char Multi_pxo_pinfo_vals[MULTI_PXO_PINFO_NUM_LABELS][50]
 
multi_global_options Multi_options_g
 
int Multi_pxo_help_num_pages
 
ui_button_info Multi_pxo_com_buttons[GR_NUM_RESOLUTIONS][MULTI_PXO_COM_NUM_BUTTONS]
 
int Multi_pxo_max_chan_display[GR_NUM_RESOLUTIONS]
 
void multi_pxo_blit_status_text()
 
#define MULTI_PXO_PINFO_MEDALS
 
unsigned int s_bonehead_hits
 
void multi_pxo_motd_dialog()
 
#define UI_INPUTBOX_FLAG_ESC_CLR
 
int cf_exists(const char *filename, int dir_type)
 
char desc[MAX_CHANNEL_DESCRIPT_LEN+1]
 
UI_XSTR Multi_pxo_text[GR_NUM_RESOLUTIONS][MULTI_PXO_NUM_TEXT]
 
UI_INPUTBOX Multi_pxo_chat_input
 
#define MULTI_PXO_PINFO_OK
 
#define MULTI_PXO_NUM_BUTTONS
 
UI_BUTTON Multi_pxo_player_button
 
int Multi_pxo_pinfo_val_x[GR_NUM_RESOLUTIONS]
 
void multi_pxo_scroll_chat_down()
 
char * GetTrackerIdByUser(char *nickname)
 
void set_custom_cursor_bmap(int bmap_id)
 
int multi_pxo_pinfo_get(char *name)
 
Chat_command * GetChatCommand()
 
void multi_pxo_blit_all()