void CMissionGoalsDlg::OnOk() { char buf[256], names[2][MAX_GOALS][NAME_LENGTH]; int i, count; for (i=0; i<Num_goals; i++) free_sexp2(Mission_goals[i].formula); UpdateData(TRUE); if (query_modified()) set_modified(); count = 0; for (i=0; i<Num_goals; i++) Mission_goals[i].satisfied = 0; // use this as a processed flag // rename all sexp references to old events for (i=0; i<m_num_goals; i++) if (m_sig[i] >= 0) { strcpy(names[0][count], Mission_goals[m_sig[i]].name); strcpy(names[1][count], m_goals[i].name); count++; Mission_goals[m_sig[i]].satisfied = 1; } // invalidate all sexp references to deleted events. for (i=0; i<Num_goals; i++) if (!Mission_goals[i].satisfied) { sprintf(buf, "<%s>", Mission_goals[i].name); strcpy(buf + NAME_LENGTH - 2, ">"); // force it to be not too long strcpy(names[0][count], Mission_goals[i].name); strcpy(names[1][count], buf); count++; } Num_goals = m_num_goals; for (i=0; i<Num_goals; i++) { Mission_goals[i] = m_goals[i]; Mission_goals[i].formula = m_goals_tree.save_tree(Mission_goals[i].formula); if ( The_mission.game_type & MISSION_TYPE_MULTI_TEAMS ) { Assert( Mission_goals[i].team != -1 ); } } // now update all sexp references while (count--) update_sexp_references(names[0][count], names[1][count], OPF_GOAL_NAME); theApp.record_window_data(&Mission_goals_wnd_data, this); CDialog::OnOK(); }
void CShipTexturesDlg::OnClose() { int z; if (query_modified()) { z = MessageBox("Do you want to keep your changes?", "Close", MB_ICONQUESTION | MB_YESNOCANCEL); if (z == IDCANCEL) return; if (z == IDYES) { OnOK(); return; } } CDialog::OnClose(); }
void asteroid_editor::OnClose() { int z; update_init(); if (query_modified()) { z = MessageBox("Do you want to keep your changes?", "Close", MB_ICONQUESTION | MB_YESNOCANCEL); if (z == IDCANCEL) return; if (z == IDYES) { OnOK(); return; } } CDialog::OnClose(); }
void CustomWingNames::OnClose() { int z; UpdateData(TRUE); if (query_modified()) { z = MessageBox("Do you want to keep your changes?", "Close", MB_ICONQUESTION | MB_YESNOCANCEL); if (z == IDCANCEL){ return; } if (z == IDYES) { OnOK(); return; } } CDialog::OnClose(); }
void event_editor::OnClose() { int z; if (query_modified()) { z = MessageBox("Do you want to keep your changes?", "Close", MB_ICONQUESTION | MB_YESNOCANCEL); if (z == IDCANCEL){ return; } if (z == IDYES) { OnOk(); return; } } theApp.record_window_data(&Events_wnd_data, this); delete Event_editor_dlg; Event_editor_dlg = NULL; }
void CMessageEditorDlg::OnClose() { int z; modified = query_modified(); if (modified) { z = MessageBox("Do you want to keep your changes?", "Close", MB_ICONQUESTION | MB_YESNOCANCEL); if (z == IDCANCEL) return; if (z == IDYES) { OnOK(); return; } } theApp.record_window_data(&Messages_wnd_data, this); delete Message_editor_dlg; Message_editor_dlg = NULL; }
void event_editor::OnOk() { char buf[256], names[2][MAX_MISSION_EVENTS][NAME_LENGTH]; int i, count; audiostream_close_file(m_wave_id, 0); m_wave_id = -1; save(); if (query_modified()) set_modified(); for (i=0; i<Num_mission_events; i++) { free_sexp2(Mission_events[i].formula); if (Mission_events[i].objective_text) free(Mission_events[i].objective_text); if (Mission_events[i].objective_key_text) free(Mission_events[i].objective_key_text); } count = 0; for (i=0; i<Num_mission_events; i++) Mission_events[i].result = 0; // use this as a processed flag // rename all sexp references to old events for (i=0; i<m_num_events; i++) if (m_sig[i] >= 0) { strcpy_s(names[0][count], Mission_events[m_sig[i]].name); strcpy_s(names[1][count], m_events[i].name); count++; Mission_events[m_sig[i]].result = 1; } // invalidate all sexp references to deleted events. for (i=0; i<Num_mission_events; i++) if (!Mission_events[i].result) { sprintf(buf, "<%s>", Mission_events[i].name); strcpy(buf + NAME_LENGTH - 2, ">"); // force it to be not too long strcpy_s(names[0][count], Mission_events[i].name); strcpy_s(names[1][count], buf); count++; } Num_mission_events = m_num_events; for (i=0; i<m_num_events; i++) { Mission_events[i] = m_events[i]; Mission_events[i].formula = m_event_tree.save_tree(m_events[i].formula); Mission_events[i].objective_text = m_events[i].objective_text; Mission_events[i].objective_key_text = m_events[i].objective_key_text; Mission_events[i].mission_log_flags = m_events[i].mission_log_flags; } // now update all sexp references while (count--) update_sexp_references(names[0][count], names[1][count], OPF_EVENT_NAME); for (i=Num_builtin_messages; i<Num_messages; i++) { if (Messages[i].avi_info.name) free(Messages[i].avi_info.name); if (Messages[i].wave_info.name) free(Messages[i].wave_info.name); } Num_messages = m_num_messages + Num_builtin_messages; for (i=0; i<m_num_messages; i++) Messages[i + Num_builtin_messages] = m_messages[i]; theApp.record_window_data(&Events_wnd_data, this); delete Event_editor_dlg; Event_editor_dlg = NULL; }
void CShipTexturesDlg::OnOK() { int i, k, write_index, z, not_found, temp_bmp, temp_frames, temp_fps; CString missing_files, message; char buf[10]; // update, in case of a last-minute edit OnSelchangeOldTextureList(); // quick skip if nothing modified if (query_modified()) { // sort according to new sort_textures(SORT_NEW); // check for filenames not found not_found = 0; missing_files = _T(""); for (i=0; i<texture_count; i++) { // make sure we have a texture if (strlen(new_texture_name[i])) { // try loading it (bmpman should take care of eventually unloading them) temp_bmp = bm_load( new_texture_name[i] ); // if PCX not found, look for ANI if (temp_bmp < 0) { temp_bmp = bm_load_animation(new_texture_name[i], &temp_frames, &temp_fps, NULL, 1); } // check if loaded if (temp_bmp < 0) { not_found++; missing_files += " "; missing_files += new_texture_name[i]; missing_files += '\n'; } } } // alert user if any textures were not found if (not_found) { sprintf(buf, "%d", not_found); message = "FRED was unable to find "; message += buf; message += ((not_found > 1) ? " files:\n" : " file:\n"); message += missing_files; message += "\nContinue anyway?"; z = MessageBox(message, ((not_found > 1) ? "Some textures were not found." : "A texture was not found."), MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON2); if (z == IDCANCEL) { return; } } // re-sort according to old sort_textures(); // overwrite old stuff k = 0; write_index = 0; while (k<(MAX_SHIPS * MAX_REPLACEMENT_TEXTURES)) { //WMC - This loop will go on for a REALLY LONG TIME //I don't think we need to copy empty entries. if(!strlen(Fred_texture_replacements[k].ship_name)) break; if (stricmp(Fred_texture_replacements[k].ship_name, Ships[self_ship].ship_name)) { // move up, but when copying, src and dest can't be the same if (k != write_index) { texture_set(&Fred_texture_replacements[write_index], &Fred_texture_replacements[k]); } write_index++; } k++; } Fred_num_texture_replacements = write_index; // finally, assign duplicate textures to Fred array for (i=0; i<texture_count; i++) { // make sure there is an entry if (strlen(new_texture_name[i])) { // assign to global FRED array strcpy_s(Fred_texture_replacements[Fred_num_texture_replacements].old_texture, old_texture_name[i]); strcpy_s(Fred_texture_replacements[Fred_num_texture_replacements].new_texture, new_texture_name[i]); strcpy_s(Fred_texture_replacements[Fred_num_texture_replacements].ship_name, Ships[self_ship].ship_name); // increment Fred_num_texture_replacements++; } } } // skipped here if nothing modified CDialog::OnOK(); }
void CShipTexturesDlg::OnOK() { int i, z, not_found, temp_bmp, temp_frames, temp_fps; CString missing_files, message; char buf[10]; // update, in case of a last-minute edit OnSelchangeOldTextureList(); // quick skip if nothing modified if (query_modified()) { // sort according to new sort_textures(SORT_NEW); // check for filenames not found not_found = 0; missing_files = _T(""); for (i=0; i<texture_count; i++) { // make sure we have a texture if (strlen(new_texture_name[i])) { // allow invisible textures without doing a file check if (!stricmp(new_texture_name[i], "invisible")) continue; // try loading the texture (bmpman should take care of eventually unloading it) temp_bmp = bm_load( new_texture_name[i] ); // if PCX not found, look for ANI if (temp_bmp < 0) { temp_bmp = bm_load_animation(new_texture_name[i], &temp_frames, &temp_fps, NULL, 1); } // check if loaded if (temp_bmp < 0) { not_found++; missing_files += " "; missing_files += new_texture_name[i]; missing_files += '\n'; } } } // alert user if any textures were not found if (not_found) { sprintf(buf, "%d", not_found); message = "FRED was unable to find "; message += buf; message += ((not_found > 1) ? " files:\n" : " file:\n"); message += missing_files; message += "\nContinue anyway?"; z = MessageBox(message, ((not_found > 1) ? "Some textures were not found." : "A texture was not found."), MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON2); if (z == IDCANCEL) { return; } } // re-sort according to old sort_textures(); // overwrite all the old entries that refer to this ship SCP_vector<texture_replace>::iterator ii, end; end = Fred_texture_replacements.end(); for (ii = Fred_texture_replacements.begin(); ii != end; ++ii) { if (!stricmp(ii->ship_name, Ships[self_ship].ship_name)) { end--; if (end == ii) break; texture_set(&(*ii), &(*end)); } } if (end != Fred_texture_replacements.end()) Fred_texture_replacements.erase(end); // now put the new entries on the end of the list for (i=0; i<texture_count; i++) { // make sure there is an entry if (strlen(new_texture_name[i])) { texture_replace tr; strcpy_s(tr.old_texture, old_texture_name[i]); strcpy_s(tr.new_texture, new_texture_name[i]); strcpy_s(tr.ship_name, Ships[self_ship].ship_name); tr.new_texture_id = -1; // assign to global FRED array Fred_texture_replacements.push_back(tr); } } } // skipped here if nothing modified CDialog::OnOK(); }
int CMessageEditorDlg::update(int num) { char *ptr, buf[4096]; int i, node, fnode; CListBox *list; UpdateData(TRUE); if (num >= 0) { ptr = (char *) (LPCTSTR) m_message_name; for (i=0; i<Num_messages; i++) if ((i != num) && (!stricmp(m_message_name, Messages[i].name))) break; if (i == Num_messages) { // update name if no conflicts, otherwise keep old name update_sexp_references(Messages[num].name, ptr, OPF_MESSAGE); string_copy(Messages[num].name, m_message_name, NAME_LENGTH - 1); list = (CListBox *) GetDlgItem(IDC_MESSAGE_LIST); list->DeleteString(num); list->InsertString(num, m_message_name); } string_copy(Messages[num].message, m_message_text, MESSAGE_LENGTH - 1); if (Messages[num].avi_info.name) free(Messages[num].avi_info.name); ptr = (char *) (LPCTSTR) m_avi_filename; if (!ptr || !strlen(ptr)) Messages[num].avi_info.name = NULL; else Messages[num].avi_info.name = strdup(ptr); if (Messages[num].wave_info.name) free(Messages[num].wave_info.name); ptr = (char *) (LPCTSTR) m_wave_filename; if (!ptr || !strlen(ptr)) Messages[num].wave_info.name = NULL; else Messages[num].wave_info.name = strdup(ptr); // update the persona to the message. We subtract 1 for the "None" at the beginning of the combo // box list. Messages[num].persona_index = m_persona - 1; if (m_tree.query_false()) { if (m_event_num >= 0) { // need to delete event i = m_event_num; free_sexp2(Mission_events[i].formula); Assert(i < Num_mission_events); while (i < Num_mission_events - 1) { Mission_events[i] = Mission_events[i + 1]; i++; } Num_mission_events--; m_event_num = -1; } } else { if (m_event_num >= 0) free_sexp2(Mission_events[m_event_num].formula); else { if (Num_mission_events == MAX_MISSION_EVENTS) { MessageBox("You have reached the limit on mission events.\n" "Can't add an event to send this message."); goto exit; } Assert(Num_mission_events < MAX_MISSION_EVENTS); m_event_num = Num_mission_events++; string_copy(Mission_events[m_event_num].name, m_message_name, NAME_LENGTH - 1); Mission_events[m_event_num].repeat_count = 1; Mission_events[m_event_num].interval = 1; Mission_events[m_event_num].score = 0; Mission_events[m_event_num].chain_delay = -1; Mission_events[m_event_num].objective_text = NULL; Mission_events[m_event_num].objective_key_text = NULL; } fnode = m_tree.save_tree(); ptr = (char *) (LPCTSTR) m_message_name; node = alloc_sexp(ptr, SEXP_ATOM, SEXP_ATOM_STRING, -1, -1); ((CComboBox *) GetDlgItem(IDC_PRIORITY))->GetLBText(m_priority, buf); node = alloc_sexp(buf, SEXP_ATOM, SEXP_ATOM_STRING, -1, node); ((CComboBox *) GetDlgItem(IDC_SENDER))->GetLBText(m_sender, buf); node = alloc_sexp(buf, SEXP_ATOM, SEXP_ATOM_STRING, -1, node); node = alloc_sexp("send-message", SEXP_ATOM, SEXP_ATOM_OPERATOR, -1, node); node = alloc_sexp("", SEXP_LIST, SEXP_ATOM_LIST, node, -1); node = alloc_sexp("", SEXP_LIST, SEXP_ATOM_LIST, fnode, node); node = alloc_sexp("when", SEXP_ATOM, SEXP_ATOM_OPERATOR, -1, node); Mission_events[m_event_num].formula = node; } } exit: if (query_modified()) set_modified(); modified = 0; return 0; }
void CMissionNotesDlg::OnOK() { int new_m_type, flags, is_multi = 0, is_training = 0, is_single = 0; UpdateData(); is_single = (((CButton *) GetDlgItem(IDC_SINGLE))->GetCheck() == 1); is_multi = (((CButton *) GetDlgItem(IDC_MULTI))->GetCheck() == 1); is_training = (((CButton *) GetDlgItem(IDC_TRAINING))->GetCheck() == 1); // deal with changing the mission type. Code is done this way since training missions // just override anything else. new_m_type = 0; if (is_training) { new_m_type = MISSION_TYPE_TRAINING; } else { if (is_single){ new_m_type = MISSION_TYPE_SINGLE; } if (is_multi) { new_m_type |= MISSION_TYPE_MULTI; if (coop->GetCheck()){ new_m_type |= MISSION_TYPE_MULTI_COOP; } else if (team->GetCheck()){ new_m_type |= MISSION_TYPE_MULTI_TEAMS; } else if(dogfight->GetCheck()){ new_m_type |= MISSION_TYPE_MULTI_DOGFIGHT; } else { Int3(); // get allender -- multiplayer mode not set!!! } } } if (!new_m_type) { MessageBox("You must select the game type: training, single, or multiplayer", "Error"); return; } MODIFY(The_mission.game_type, new_m_type ); MODIFY(The_mission.red_alert, m_red_alert ); MODIFY(The_mission.scramble, m_scramble ); MODIFY(The_mission.num_respawns, (int)m_num_respawns ); MODIFY(The_mission.support_ships.max_support_ships, (m_disallow_support) ? 0 : -1); MODIFY(The_mission.support_ships.max_hull_repair_val, m_max_hull_repair_val); MODIFY(The_mission.support_ships.max_subsys_repair_val, m_max_subsys_repair_val); // set the flags for no promotion flags = The_mission.flags; if ( m_no_promotion ) { The_mission.flags |= MISSION_FLAG_NO_PROMOTION; } else { The_mission.flags &= ~MISSION_FLAG_NO_PROMOTION; } // set flags for no builtin messages if ( m_no_builtin_msgs ) { The_mission.flags |= MISSION_FLAG_NO_BUILTIN_MSGS; } else { The_mission.flags &= ~MISSION_FLAG_NO_BUILTIN_MSGS; } // set no traitor flags if ( m_no_traitor ) { The_mission.flags |= MISSION_FLAG_NO_TRAITOR; } else { The_mission.flags &= ~MISSION_FLAG_NO_TRAITOR; } //set ship trail flags if ( m_ship_trails ) { The_mission.flags |= MISSION_FLAG_SHIP_TRAILS; } else { The_mission.flags &= ~MISSION_FLAG_SHIP_TRAILS; } //set support ship repairing flags if ( m_support_repairs_hull ) { The_mission.flags |= MISSION_FLAG_SUPPORT_REPAIRS_HULL; } else { The_mission.flags &= ~MISSION_FLAG_SUPPORT_REPAIRS_HULL; } // set default beam free if ( m_beam_free_all_by_default ) { The_mission.flags |= MISSION_FLAG_BEAM_FREE_ALL_BY_DEFAULT; } else { The_mission.flags &= ~MISSION_FLAG_BEAM_FREE_ALL_BY_DEFAULT; } // set warp effect /*if ( m_old_warp_effect ) { The_mission.flags |= MISSION_FLAG_OLD_WARP_EFFECT; } else { The_mission.flags &= ~MISSION_FLAG_OLD_WARP_EFFECT; }*/ // set briefing if ( m_no_briefing ) { The_mission.flags |= MISSION_FLAG_NO_BRIEFING; } else { The_mission.flags &= ~MISSION_FLAG_NO_BRIEFING; } // set debriefing if ( m_no_debriefing ) { The_mission.flags |= MISSION_FLAG_NO_DEBRIEFING; } else { The_mission.flags &= ~MISSION_FLAG_NO_BRIEFING; } if ( flags != The_mission.flags ){ set_modified(); } string_copy(The_mission.name, m_mission_title, NAME_LENGTH, 1); string_copy(The_mission.author, m_designer_name, NAME_LENGTH, 1); string_copy(The_mission.loading_screen[GR_640], m_loading_640, NAME_LENGTH,1); string_copy(The_mission.loading_screen[GR_1024], m_loading_1024, NAME_LENGTH,1); deconvert_multiline_string(The_mission.notes, m_mission_notes, NOTES_LENGTH); deconvert_multiline_string(The_mission.mission_desc, m_mission_desc, MISSION_DESC_LENGTH); // copy squad stuff if(m_squad_name == CString(NO_SQUAD)){ strcpy(The_mission.squad_name, ""); strcpy(The_mission.squad_filename, ""); } else { string_copy(The_mission.squad_name, m_squad_name, NAME_LENGTH); string_copy(The_mission.squad_filename, m_squad_filename, MAX_FILENAME_LEN); } MODIFY(Current_soundtrack_num, m_music - 1); MODIFY(Mission_all_attack, m_full_war); if (query_modified()){ set_modified(); } theApp.record_window_data(&Mission_notes_wnd_data, this); // update the Num_teams variable accoriding to mission types Num_teams = 1; if ( (The_mission.game_type & MISSION_TYPE_MULTI) && (The_mission.game_type & MISSION_TYPE_MULTI_TEAMS) ){ Num_teams = 2; } CDialog::OnOK(); }