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()