// process pilot callsign void barracks_accept_new_pilot_callsign() { char buf[CALLSIGN_LEN + 1]; char name[MAX_FILENAME_LEN]; int i; int z = 0; Inputbox.get_text(buf); drop_white_space(buf); if (!isalpha(*buf)) { z = 1; } else { for (i=1; buf[i]; i++) { if (!isalpha(buf[i]) && !isdigit(buf[i]) && !strchr(VALID_PILOT_CHARS, buf[i])) { z = 1; return; } } } for (i=1; i<Num_pilots; i++) { if (!stricmp(buf, Pilots[i])) { z = 1; if (pilot_verify_overwrite() == 1) { strcpy_s(name, Pilots[Selected_line]); for (z=i; z<Num_pilots-1; z++) { strcpy(Pilots[z], Pilots[z + 1]); Pilot_ranks[z] = Pilot_ranks[z + 1]; } Num_pilots--; delete_pilot_file(name); z = 0; } return; } } if (!*buf || (i < Num_pilots)) { // duplicate name, alert user z = 1; } if (z) { gamesnd_play_iface(SND_GENERAL_FAIL); return; } strcpy(Pilots[0], buf); strcpy_s(Cur_pilot->callsign, buf); init_new_pilot(Cur_pilot, !Clone_flag); // again, make sure we set his flags correctly to ensure that he gets saved to the proper directory and gets // displayed correctly if (Player_sel_mode == PLAYER_SELECT_MODE_SINGLE) { Cur_pilot->flags &= ~(PLAYER_FLAGS_IS_MULTI); } else { Cur_pilot->flags |= PLAYER_FLAGS_IS_MULTI; Cur_pilot->stats.flags |= STATS_FLAG_MULTIPLAYER; } if ( !(Game_mode & GM_STANDALONE_SERVER) ) { Pilot.save_player(Cur_pilot); } Selected_line = 0; barracks_new_pilot_selected(); barracks_set_callsign_enter_mode(false); }
void pilot_manage_button_pressed(int n) { switch (n) { //scroll pilot list up case PM_UP_BUTTON: pilot_manage_scroll_callsign_up(); break; // scroll pilot list down case PM_DOWN_BUTTON: pilot_manage_scroll_callsign_down(); break; // switch to single mode case PM_SINGLE_MODE_BUTTON: if (Player_sel_mode != PLAYER_SELECT_MODE_SINGLE) { gamesnd_play_iface(SND_USER_SELECT); // switching to multi so save multi player offset prev_multi_player = Selected_line; pilot_manage_init_player_stuff(PLAYER_SELECT_MODE_SINGLE); } break; // switch to multi mode case PM_MULTI_MODE_BUTTON: if (Player_sel_mode != PLAYER_SELECT_MODE_MULTI) { gamesnd_play_iface(SND_USER_SELECT); // switching to multi so save single player offset prev_single_player = Selected_line; pilot_manage_init_player_stuff(PLAYER_SELECT_MODE_MULTI); } break; //create new pilot case PM_CREATE_BUTTON: Clone_flag = 0; pilot_manage_create_new_pilot(); break; // select pilot case PM_ACTIVE_BUTTON: if (pilot_manage_new_pilot_selected()){ gamesnd_play_iface(SND_GENERAL_FAIL); // throw up a popup telling the player that he should create a pilot first if(Player_sel_mode == PLAYER_SELECT_MODE_SINGLE){ popup(PF_USE_AFFIRMATIVE_ICON,1,POPUP_OK,XSTR( "You must create a single player pilot.", 66)); } else { popup(PF_USE_AFFIRMATIVE_ICON,1,POPUP_OK,XSTR( "You must create a multi player pilot.", 67)); } } else { gamesnd_play_iface(SND_SCROLL); } break; // clone pilot case PM_CLONE_BUTTON: //case B_PILOT_CLONE_BUTTON: if (Num_pilots < 1) { gamesnd_play_error_beep(); break; } Clone_flag = 1; pilot_manage_create_new_pilot(); break; // convert pilot single/multi case PM_CONVERT_BUTTON: { char temp[256], *str; char old_pic[256] = ""; char old_squad_pic[256] = ""; char old_squad[256] = ""; int z; if (!pilot_manage_new_pilot_selected()) { if (Player_sel_mode == PLAYER_SELECT_MODE_SINGLE) str = XSTR( "multiplayer", 68); else str = XSTR( "single player", 69); sprintf(temp, XSTR( "This will overwrite your %s pilot. Proceed?", 70), str); if (!verify_pilot_file(Cur_pilot->callsign, Player_sel_mode == PLAYER_SELECT_MODE_MULTI)) { z = popup(0, 2, POPUP_CANCEL, POPUP_OK, temp); if (z != 1) break; } strcpy(old_pic, Cur_pilot->image_filename); strcpy(old_squad_pic, Cur_pilot->squad_filename); strcpy(old_squad, Cur_pilot->squad_name); init_new_pilot(Cur_pilot, 0); strcpy(Cur_pilot->image_filename, old_pic); strcpy(Cur_pilot->squad_filename, old_squad_pic); strcpy(Cur_pilot->squad_name, old_squad); if (Player_sel_mode == PLAYER_SELECT_MODE_SINGLE) { Cur_pilot->flags |= PLAYER_FLAGS_IS_MULTI; write_pilot_file(); pilot_manage_init_player_stuff(PLAYER_SELECT_MODE_MULTI); } else { write_pilot_file(); pilot_manage_init_player_stuff(PLAYER_SELECT_MODE_SINGLE); } gamesnd_play_iface(SND_USER_SELECT); } else { gamesnd_play_iface(SND_GENERAL_FAIL); } break; } // delete pilot case PM_DELETE_BUTTON: pilot_manage_delete_pilot(); break; // exit pilot selection case PM_EXIT_BUTTON: if (Num_pilots && !pilot_manage_pilot_accepted()) { gamesnd_play_iface(SND_COMMIT_PRESSED); gameseq_post_event(GS_EVENT_PREVIOUS_STATE); } else { gamesnd_play_iface(SND_GENERAL_FAIL); // throw up a popup telling the player that he should create a pilot first if(Player_sel_mode == PLAYER_SELECT_MODE_SINGLE){ popup(PF_USE_AFFIRMATIVE_ICON,1,POPUP_OK,XSTR( "You must create a single player pilot.", 66)); } else { popup(PF_USE_AFFIRMATIVE_ICON,1,POPUP_OK,XSTR( "You must create a multi player pilot.", 67)); } } break; case PM_TC_BUTTON: popup_tc(); // want to switch it over to multiplayer pilots prev_single_player = Selected_line; pilot_manage_init_player_stuff(PLAYER_SELECT_MODE_MULTI); break; } }
void player_select_process_input(int k) { char buf[CALLSIGN_LEN + 1]; int idx,z; // if the player is in the process of typing in a new pilot name... switch (k) { // cancel create pilot case KEY_ESC: player_select_cancel_create(); break; // accept a new pilot name case KEY_ENTER: Player_select_input_box.get_text(buf); drop_white_space(buf); z = 0; if (!isalpha(*buf)) { z = 1; } else { for (idx=1; buf[idx]; idx++) { if (!isalpha(buf[idx]) && !isdigit(buf[idx]) && !strchr(VALID_PILOT_CHARS, buf[idx])) { z = 1; break; } } } for (idx=1; idx<Player_select_num_pilots; idx++) { if (!stricmp(buf, Pilots[idx])) { // verify if it is ok to overwrite the file if (pilot_verify_overwrite() == 1) { // delete the pilot and select the beginning of the list Player_select_pilot = idx; player_select_delete_pilot(); Player_select_pilot = 0; idx = Player_select_num_pilots; z = 0; } else z = 1; break; } } if (!*buf || (idx < Player_select_num_pilots)) { z = 1; } if (z) { gamesnd_play_iface(SND_GENERAL_FAIL); break; } // Create the new pilot, and write out his file strcpy(Pilots[0], buf); // if this is the first guy, we should set the Player struct if (Player == NULL) { Player = &Players[0]; Player->reset(); Player->flags |= PLAYER_FLAGS_STRUCTURE_IN_USE; } strcpy_s(Player->callsign, buf); init_new_pilot(Player, !Player_select_clone_flag); // set him as being a multiplayer pilot if we're in the correct mode if (Player_select_mode == PLAYER_SELECT_MODE_MULTI) { Player->flags |= PLAYER_FLAGS_IS_MULTI; Player->stats.flags |= STATS_FLAG_MULTIPLAYER; } // create his pilot file Pilot.save_player(Player); // unset the player Player->reset(); Player = NULL; // make this guy the selected pilot and put him first on the list Player_select_pilot = 0; // unset the input mode player_select_set_input_mode(0); // clear any pending bottom text player_select_set_bottom_text(""); // clear any pending middle text player_select_set_middle_text(""); // ungray all the controls player_select_set_controls(0); // evaluate whether or not this is the very first pilot player_select_eval_very_first_pilot(); break; case 0: break; // always kill middle text when a char is pressed in input mode default: player_select_set_middle_text(""); break; } }
// this will make a TC pilot based on his info from the database void pilot_manage_make_tc_pilot(Idline id, char *name) { // play sound for pilot creation gamesnd_play_iface(SND_SCROLL); // only write pilot file if there is an active pilot if (strlen(Player->callsign)) { write_pilot_file(); } int z = 0; for (int i=0; i<Num_pilots; i++) { if (!stricmp(name, Pilots[i])) { z = 1; if (pilot_verify_overwrite() == 1) { for (z=i; z<Num_pilots-1; z++) { strcpy(Pilots[z], Pilots[z + 1]); Pilot_ranks[z] = Pilot_ranks[z + 1]; } Num_pilots--; delete_pilot_file(name, 0); z = 0; } else return; } } if (!*name || (i < Num_pilots)) { // duplicate name, alert user z = 1; } if (z) { gamesnd_play_iface(SND_GENERAL_FAIL); return; } // move other pilot names and ranks down to make room for the new one int idx = Num_pilots; Assert(Num_pilots >= 0); while (idx--) { strcpy(Pilots[idx + 1], Pilots[idx]); Pilot_ranks[idx + 1] = Pilot_ranks[idx]; } Selected_line = 0; Num_pilots++; Pilots[Selected_line][0] = 0; Pilot_ranks[Selected_line] = 0; List_scroll_offset = 0; strcpy(Pilots[0], name); // make sure his rank pip matches his actual rank Pilot_ranks[0] = get_rank(id.rank); strcpy(Cur_pilot->callsign, name); init_new_pilot(Cur_pilot, !Clone_flag); Cur_pilot->flags |= PLAYER_FLAGS_IS_MULTI; Cur_pilot->stats.flags |= STATS_FLAG_MULTIPLAYER; Cur_pilot->stats.rank = get_rank(id.rank); Cur_pilot->stats.fchg = get_fchg(id.fchg); make_medals(&Cur_pilot->stats, id.medals); write_pilot_file(Cur_pilot); pilot_manage_new_pilot_selected(); }