// update wing structure(s) with dialog data. The data is first checked for errors. If // no errors occur, returns 0. If an error occurs, returns -1. If the update is bypassed, // returns 1. Bypass is necessary to avoid an infinite loop, and it doesn't actually // update the data. Bypass only occurs if bypass mode is active and we still get an error. // Once the error no longer occurs, bypass mode is cleared and data is updated. int wing_editor::update_data(int redraw) { char *str, old_name[255], buf[512]; int i, z; object *ptr; nprintf(("Fred routing", "Wing dialog save\n")); if (!GetSafeHwnd()) return 0; UpdateData(TRUE); UpdateData(TRUE); if (cur_wing >= 0) { if (!strnicmp(m_wing_name, "player ", 7)) { if (bypass_errors) return 1; bypass_errors = 1; z = MessageBox("Wing names can't start with the word 'player'\n" "Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL); if (z == IDCANCEL) return -1; m_wing_name = _T(Wings[cur_wing].name); UpdateData(FALSE); } for (i=0; i<MAX_WINGS; i++) if (Wings[i].wave_count && !stricmp(Wings[i].name, m_wing_name) && (i != cur_wing)) { if (bypass_errors) return 1; bypass_errors = 1; z = MessageBox("This wing name is already being used by another wing\n" "Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL); if (z == IDCANCEL) return -1; m_wing_name = _T(Wings[cur_wing].name); UpdateData(FALSE); } ptr = GET_FIRST(&obj_used_list); while (ptr != END_OF_LIST(&obj_used_list)) { if (ptr->type == OBJ_SHIP) { if (!stricmp(m_wing_name, Ships[ptr->instance].ship_name)) { if (bypass_errors) return 1; bypass_errors = 1; z = MessageBox("This wing name is already being used by a ship\n" "Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL); if (z == IDCANCEL) return -1; m_wing_name = _T(Wings[cur_wing].name); UpdateData(FALSE); } } ptr = GET_NEXT(ptr); } for (i=0; i<MAX_WAYPOINT_LISTS; i++) if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_wing_name)) { if (bypass_errors) return 1; bypass_errors = 1; z = MessageBox("This wing name is already being used by a waypoint path\n" "Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL); if (z == IDCANCEL) return -1; m_wing_name = _T(Wings[cur_wing].name); UpdateData(FALSE); } for (i=0; i<Num_jump_nodes; i++) if (!stricmp(Jump_nodes[i].name, m_wing_name)) { if (bypass_errors) return 1; bypass_errors = 1; z = MessageBox("This wing name is already being used by a hyper buoy\n" "Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL); if (z == IDCANCEL) return -1; m_wing_name = _T(Wings[cur_wing].name); UpdateData(FALSE); } strcpy(old_name, Wings[cur_wing].name); string_copy(Wings[cur_wing].name, m_wing_name, NAME_LENGTH, 1); update_data_safe(); bypass_errors = 0; modified = 0; str = Wings[cur_wing].name; if (stricmp(old_name, str)) { update_sexp_references(old_name, str); ai_update_goal_references(REF_TYPE_WING, old_name, str); for (i=0; i<Num_reinforcements; i++) if (!stricmp(old_name, Reinforcements[i].name)) { Assert(strlen(str) < NAME_LENGTH); strcpy(Reinforcements[i].name, str); } for (i=0; i<Wings[cur_wing].wave_count; i++) { if ((Objects[wing_objects[cur_wing][i]].type == OBJ_SHIP) || (Objects[wing_objects[cur_wing][i]].type == OBJ_START)) { sprintf(buf, "%s %d", str, i + 1); rename_ship(Wings[cur_wing].ship_index[i], buf); } } Update_window = 1; } if (set_reinforcement(str, m_reinforcement) == 1) { free_sexp2(Wings[cur_wing].arrival_cue); Wings[cur_wing].arrival_cue = Locked_sexp_false; } } if (redraw) update_map_window(); return 0; }
void ship_flags_dlg::update_ship(int ship) { if (m_reinforcement.GetCheck() != 2) set_reinforcement(Ships[ship].ship_name, m_reinforcement.GetCheck()); switch (m_cargo_known.GetCheck()) { case 1: if ( !(Ships[ship].flags & SF_CARGO_REVEALED) ) set_modified(); Ships[ship].flags |= SF_CARGO_REVEALED; break; case 0: if ( Ships[ship].flags & SF_CARGO_REVEALED ) set_modified(); Ships[ship].flags &= ~SF_CARGO_REVEALED; break; } // update the flags for IGNORE_COUNT and PROTECT_SHIP switch (m_protect_ship.GetCheck()) { case 1: if (!(Objects[Ships[ship].objnum].flags & OF_PROTECTED) ) set_modified(); Objects[Ships[ship].objnum].flags |= OF_PROTECTED; break; case 0: if ( Objects[Ships[ship].objnum].flags & OF_PROTECTED ) set_modified(); Objects[Ships[ship].objnum].flags &= ~OF_PROTECTED; break; } switch (m_beam_protect_ship.GetCheck()) { case 1: if (!(Objects[Ships[ship].objnum].flags & OF_BEAM_PROTECTED) ) set_modified(); Objects[Ships[ship].objnum].flags |= OF_BEAM_PROTECTED; break; case 0: if ( Objects[Ships[ship].objnum].flags & OF_BEAM_PROTECTED ) set_modified(); Objects[Ships[ship].objnum].flags &= ~OF_BEAM_PROTECTED; break; } switch (m_invulnerable.GetCheck()) { case 1: if ( !(Ships[ship].flags & SF_INVULNERABLE) ) set_modified(); Ships[ship].flags |= SF_INVULNERABLE; break; case 0: if ( Ships[ship].flags & SF_INVULNERABLE ) set_modified(); Ships[ship].flags &= ~SF_INVULNERABLE; break; } switch (m_hidden.GetCheck()) { case 1: if ( !(Ships[ship].flags & SF_HIDDEN_FROM_SENSORS) ) set_modified(); Ships[ship].flags |= SF_HIDDEN_FROM_SENSORS; break; case 0: if ( Ships[ship].flags & SF_HIDDEN_FROM_SENSORS ) set_modified(); Ships[ship].flags &= ~SF_HIDDEN_FROM_SENSORS; break; } switch (m_primitive_sensors.GetCheck()) { case 1: if ( !(Ships[ship].flags2 & SF2_PRIMITIVE_SENSORS) ) set_modified(); Ships[ship].flags2 |= SF2_PRIMITIVE_SENSORS; break; case 0: if ( Ships[ship].flags2 & SF2_PRIMITIVE_SENSORS ) set_modified(); Ships[ship].flags2 &= ~SF2_PRIMITIVE_SENSORS; break; } switch (m_no_subspace_drive.GetCheck()) { case 1: if ( !(Ships[ship].flags2 & SF2_NO_SUBSPACE_DRIVE) ) set_modified(); Ships[ship].flags2 |= SF2_NO_SUBSPACE_DRIVE; break; case 0: if ( Ships[ship].flags2 & SF2_NO_SUBSPACE_DRIVE ) set_modified(); Ships[ship].flags2 &= ~SF2_NO_SUBSPACE_DRIVE; break; } switch (m_weapon_jam.GetCheck()) { case 1: if ( !(Ships[ship].flags2 & SF2_JAMMER_ON) ) set_modified(); Ships[ship].flags2 |= SF2_JAMMER_ON; break; case 0: if ( Ships[ship].flags2 & SF2_JAMMER_ON ) set_modified(); Ships[ship].flags2 &= ~SF2_JAMMER_ON; break; } switch (m_ignore_count.GetCheck()) { case 1: if ( !(Ships[ship].flags & SF_IGNORE_COUNT) ) set_modified(); Ships[ship].flags |= SF_IGNORE_COUNT; break; case 0: if (Ships[ship].flags & SF_IGNORE_COUNT) set_modified(); Ships[ship].flags &= ~SF_IGNORE_COUNT; break; } switch (m_escort.GetCheck()) { case 1: if (!(Ships[ship].flags & SF_ESCORT)) set_modified(); Ships[ship].flags |= SF_ESCORT; m_escort_value.save(&Ships[ship].escort_priority); break; case 0: if (Ships[ship].flags & SF_ESCORT) set_modified(); Ships[ship].flags &= ~SF_ESCORT; break; } // deal with updating the "destroy before the mission" stuff switch (m_destroy.GetCheck()) { case 0: // this means no check in checkbox if ( Ships[ship].flags & SF_KILL_BEFORE_MISSION ) set_modified(); Ships[ship].flags &= ~SF_KILL_BEFORE_MISSION; break; case 1: // this means checkbox is checked if ( !(Ships[ship].flags & SF_KILL_BEFORE_MISSION) ) set_modified(); Ships[ship].flags |= SF_KILL_BEFORE_MISSION; m_destroy_value.save(&Ships[ship].final_death_time); break; } // a mixed state is 2, and since it's not handled, it doesn't change switch (m_no_arrival_music.GetCheck()) { case 0: if (Ships[ship].flags & SF_NO_ARRIVAL_MUSIC) set_modified(); Ships[ship].flags &= ~SF_NO_ARRIVAL_MUSIC; break; case 1: if (!(Ships[ship].flags & SF_NO_ARRIVAL_MUSIC)) set_modified(); Ships[ship].flags |= SF_NO_ARRIVAL_MUSIC; break; } switch (m_scannable.GetCheck()) { case 1: if ( !(Ships[ship].flags & SF_SCANNABLE) ) set_modified(); Ships[ship].flags |= SF_SCANNABLE; break; case 0: if ( Ships[ship].flags & SF_SCANNABLE ) set_modified(); Ships[ship].flags &= ~SF_SCANNABLE; break; } switch (m_red_alert_carry.GetCheck()) { case 1: if ( !(Ships[ship].flags & SF_RED_ALERT_STORE_STATUS) ) set_modified(); Ships[ship].flags |= SF_RED_ALERT_STORE_STATUS; break; case 0: if ( Ships[ship].flags & SF_RED_ALERT_STORE_STATUS ) set_modified(); Ships[ship].flags &= ~SF_RED_ALERT_STORE_STATUS; break; } switch (m_special_warp.GetCheck()) { case 1: if ( !(Objects[Ships[ship].objnum].flags & OF_SPECIAL_WARP) ) set_modified(); Objects[Ships[ship].objnum].flags |= OF_SPECIAL_WARP; break; case 0: if ( (Objects[Ships[ship].objnum].flags & OF_SPECIAL_WARP) ) set_modified(); Objects[Ships[ship].objnum].flags &= (~OF_SPECIAL_WARP); break; } switch (m_no_dynamic.GetCheck()) { case 1: if ( !(Ai_info[Ships[ship].ai_index].ai_flags & AIF_NO_DYNAMIC) ) set_modified(); Ai_info[Ships[ship].ai_index].ai_flags |= AIF_NO_DYNAMIC; break; case 0: if ( Ai_info[Ships[ship].ai_index].ai_flags & AIF_NO_DYNAMIC ) set_modified(); Ai_info[Ships[ship].ai_index].ai_flags &= ~AIF_NO_DYNAMIC; break; } switch (m_kamikaze.GetCheck()) { case 1: { int damage; if ( !(Ai_info[Ships[ship].ai_index].ai_flags & AIF_KAMIKAZE) ) set_modified(); Ai_info[Ships[ship].ai_index].ai_flags |= AIF_KAMIKAZE; m_kdamage.save(&damage); Ai_info[Ships[ship].ai_index].kamikaze_damage = i2fl(damage); break; } case 0: if ( Ai_info[Ships[ship].ai_index].ai_flags & AIF_KAMIKAZE ) set_modified(); Ai_info[Ships[ship].ai_index].ai_flags &= ~AIF_KAMIKAZE; Ai_info[Ships[ship].ai_index].kamikaze_damage = 0.0f; break; } Ships[ship].respawn_priority = 0; if(The_mission.game_type & MISSION_TYPE_MULTI){ m_respawn_priority.save(&Ships[ship].respawn_priority); } }
void ship_flags_dlg::update_ship(int shipnum) { ship *shipp = &Ships[shipnum]; object *objp = &Objects[shipp->objnum]; if (m_reinforcement.GetCheck() != 2) { //Check if we're trying to add more and we've got too many. if( (Num_reinforcements >= MAX_REINFORCEMENTS) && (m_reinforcement.GetCheck() == 1)) { char error_message[256]; sprintf(error_message, "Too many reinforcements; could not add ship '%s' to reinforcement list!", shipp->ship_name); MessageBox(error_message); } //Otherwise, just update as normal. else { set_reinforcement(shipp->ship_name, m_reinforcement.GetCheck()); } } switch (m_cargo_known.GetCheck()) { case 1: if ( !(shipp->flags & SF_CARGO_REVEALED) ) set_modified(); shipp->flags |= SF_CARGO_REVEALED; break; case 0: if ( shipp->flags & SF_CARGO_REVEALED ) set_modified(); shipp->flags &= ~SF_CARGO_REVEALED; break; } // update the flags for IGNORE_COUNT and PROTECT_SHIP switch (m_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_PROTECTED) ) set_modified(); objp->flags |= OF_PROTECTED; break; case 0: if ( objp->flags & OF_PROTECTED ) set_modified(); objp->flags &= ~OF_PROTECTED; break; } switch (m_beam_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_BEAM_PROTECTED) ) set_modified(); objp->flags |= OF_BEAM_PROTECTED; break; case 0: if ( objp->flags & OF_BEAM_PROTECTED ) set_modified(); objp->flags &= ~OF_BEAM_PROTECTED; break; } switch (m_flak_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_FLAK_PROTECTED) ) set_modified(); objp->flags |= OF_FLAK_PROTECTED; break; case 0: if ( objp->flags & OF_FLAK_PROTECTED ) set_modified(); objp->flags &= ~OF_FLAK_PROTECTED; break; } switch (m_laser_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_LASER_PROTECTED) ) set_modified(); objp->flags |= OF_LASER_PROTECTED; break; case 0: if ( objp->flags & OF_LASER_PROTECTED ) set_modified(); objp->flags &= ~OF_LASER_PROTECTED; break; } switch (m_missile_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_MISSILE_PROTECTED) ) set_modified(); objp->flags |= OF_MISSILE_PROTECTED; break; case 0: if ( objp->flags & OF_MISSILE_PROTECTED ) set_modified(); objp->flags &= ~OF_MISSILE_PROTECTED; break; } switch (m_invulnerable.GetCheck()) { case 1: if ( !(objp->flags & OF_INVULNERABLE) ) set_modified(); objp->flags |= OF_INVULNERABLE; break; case 0: if ( objp->flags & OF_INVULNERABLE ) set_modified(); objp->flags &= ~OF_INVULNERABLE; break; } switch (m_targetable_as_bomb.GetCheck()) { case 1: if ( !(objp->flags & OF_TARGETABLE_AS_BOMB) ) set_modified(); objp->flags |= OF_TARGETABLE_AS_BOMB; break; case 0: if ( objp->flags & OF_TARGETABLE_AS_BOMB ) set_modified(); objp->flags &= ~OF_TARGETABLE_AS_BOMB; break; } switch (m_immobile.GetCheck()) { case 1: if ( !(objp->flags & OF_IMMOBILE) ) set_modified(); objp->flags |= OF_IMMOBILE; break; case 0: if ( objp->flags & OF_IMMOBILE ) set_modified(); objp->flags &= ~OF_IMMOBILE; break; } switch (m_hidden.GetCheck()) { case 1: if ( !(shipp->flags & SF_HIDDEN_FROM_SENSORS) ) set_modified(); shipp->flags |= SF_HIDDEN_FROM_SENSORS; break; case 0: if ( shipp->flags & SF_HIDDEN_FROM_SENSORS ) set_modified(); shipp->flags &= ~SF_HIDDEN_FROM_SENSORS; break; } switch (m_primitive_sensors.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_PRIMITIVE_SENSORS) ) set_modified(); shipp->flags2 |= SF2_PRIMITIVE_SENSORS; break; case 0: if ( shipp->flags2 & SF2_PRIMITIVE_SENSORS ) set_modified(); shipp->flags2 &= ~SF2_PRIMITIVE_SENSORS; break; } switch (m_no_subspace_drive.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_SUBSPACE_DRIVE) ) set_modified(); shipp->flags2 |= SF2_NO_SUBSPACE_DRIVE; break; case 0: if ( shipp->flags2 & SF2_NO_SUBSPACE_DRIVE ) set_modified(); shipp->flags2 &= ~SF2_NO_SUBSPACE_DRIVE; break; } switch (m_affected_by_gravity.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_AFFECTED_BY_GRAVITY) ) set_modified(); shipp->flags2 |= SF2_AFFECTED_BY_GRAVITY; break; case 0: if ( shipp->flags2 & SF2_AFFECTED_BY_GRAVITY ) set_modified(); shipp->flags2 &= ~SF2_AFFECTED_BY_GRAVITY; break; } switch (m_toggle_subsystem_scanning.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING) ) set_modified(); shipp->flags2 |= SF2_TOGGLE_SUBSYSTEM_SCANNING; break; case 0: if ( shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING ) set_modified(); shipp->flags2 &= ~SF2_TOGGLE_SUBSYSTEM_SCANNING; break; } switch (m_ignore_count.GetCheck()) { case 1: if ( !(shipp->flags & SF_IGNORE_COUNT) ) set_modified(); shipp->flags |= SF_IGNORE_COUNT; break; case 0: if (shipp->flags & SF_IGNORE_COUNT) set_modified(); shipp->flags &= ~SF_IGNORE_COUNT; break; } switch (m_escort.GetCheck()) { case 1: if (!(shipp->flags & SF_ESCORT)) set_modified(); shipp->flags |= SF_ESCORT; m_escort_value.save(&shipp->escort_priority); break; case 0: if (shipp->flags & SF_ESCORT) set_modified(); shipp->flags &= ~SF_ESCORT; break; } // deal with updating the "destroy before the mission" stuff switch (m_destroy.GetCheck()) { case 0: // this means no check in checkbox if ( shipp->flags & SF_KILL_BEFORE_MISSION ) set_modified(); shipp->flags &= ~SF_KILL_BEFORE_MISSION; break; case 1: // this means checkbox is checked if ( !(shipp->flags & SF_KILL_BEFORE_MISSION) ) set_modified(); shipp->flags |= SF_KILL_BEFORE_MISSION; m_destroy_value.save(&shipp->final_death_time); break; } // a mixed state is 2, and since it's not handled, it doesn't change switch (m_no_arrival_music.GetCheck()) { case 0: if (shipp->flags & SF_NO_ARRIVAL_MUSIC) set_modified(); shipp->flags &= ~SF_NO_ARRIVAL_MUSIC; break; case 1: if (!(shipp->flags & SF_NO_ARRIVAL_MUSIC)) set_modified(); shipp->flags |= SF_NO_ARRIVAL_MUSIC; break; } switch (m_scannable.GetCheck()) { case 1: if ( !(shipp->flags & SF_SCANNABLE) ) set_modified(); shipp->flags |= SF_SCANNABLE; break; case 0: if ( shipp->flags & SF_SCANNABLE ) set_modified(); shipp->flags &= ~SF_SCANNABLE; break; } switch (m_red_alert_carry.GetCheck()) { case 1: if ( !(shipp->flags & SF_RED_ALERT_STORE_STATUS) ) set_modified(); shipp->flags |= SF_RED_ALERT_STORE_STATUS; break; case 0: if ( shipp->flags & SF_RED_ALERT_STORE_STATUS ) set_modified(); shipp->flags &= ~SF_RED_ALERT_STORE_STATUS; break; } switch (m_special_warpin.GetCheck()) { case 1: if ( !(objp->flags & OF_SPECIAL_WARPIN) ) set_modified(); objp->flags |= OF_SPECIAL_WARPIN; break; case 0: if ( (objp->flags & OF_SPECIAL_WARPIN) ) set_modified(); objp->flags &= (~OF_SPECIAL_WARPIN); break; } switch (m_no_dynamic.GetCheck()) { case 1: if ( !(Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC) ) set_modified(); Ai_info[shipp->ai_index].ai_flags |= AIF_NO_DYNAMIC; break; case 0: if ( Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC ) set_modified(); Ai_info[shipp->ai_index].ai_flags &= ~AIF_NO_DYNAMIC; break; } switch (m_kamikaze.GetCheck()) { case 1: { int damage; if ( !(Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE) ) set_modified(); Ai_info[shipp->ai_index].ai_flags |= AIF_KAMIKAZE; m_kdamage.save(&damage); Ai_info[shipp->ai_index].kamikaze_damage = damage; break; } case 0: if ( Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE ) set_modified(); Ai_info[shipp->ai_index].ai_flags &= ~AIF_KAMIKAZE; Ai_info[shipp->ai_index].kamikaze_damage = 0; break; } switch (m_disable_messages.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_BUILTIN_MESSAGES) ) set_modified(); shipp->flags2 |= SF2_NO_BUILTIN_MESSAGES; break; case 0: if ( shipp->flags2 & SF2_NO_BUILTIN_MESSAGES ) set_modified(); shipp->flags2 &= ~SF2_NO_BUILTIN_MESSAGES; break; } switch (m_set_class_dynamically.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY) ) set_modified(); shipp->flags2 |= SF2_SET_CLASS_DYNAMICALLY; break; case 0: if ( shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY ) set_modified(); shipp->flags2 &= ~SF2_SET_CLASS_DYNAMICALLY; break; } switch (m_no_death_scream.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_DEATH_SCREAM) ) set_modified(); shipp->flags2 |= SF2_NO_DEATH_SCREAM; break; case 0: if ( shipp->flags2 & SF2_NO_DEATH_SCREAM ) set_modified(); shipp->flags2 &= ~SF2_NO_DEATH_SCREAM; break; } switch (m_always_death_scream.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM) ) set_modified(); shipp->flags2 |= SF2_ALWAYS_DEATH_SCREAM; break; case 0: if ( shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM ) set_modified(); shipp->flags2 &= ~SF2_ALWAYS_DEATH_SCREAM; break; } switch (m_nav_carry.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NAVPOINT_CARRY) ) set_modified(); shipp->flags2 |= SF2_NAVPOINT_CARRY; break; case 0: if ( shipp->flags2 & SF2_NAVPOINT_CARRY ) set_modified(); shipp->flags2 &= ~SF2_NAVPOINT_CARRY; break; } switch (m_nav_needslink.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NAVPOINT_NEEDSLINK) ) set_modified(); shipp->flags2 |= SF2_NAVPOINT_NEEDSLINK; break; case 0: if ( shipp->flags2 & SF2_NAVPOINT_NEEDSLINK ) set_modified(); shipp->flags2 &= ~SF2_NAVPOINT_NEEDSLINK; break; } switch (m_hide_ship_name.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_HIDE_SHIP_NAME) ) set_modified(); shipp->flags2 |= SF2_HIDE_SHIP_NAME; break; case 0: if ( shipp->flags2 & SF2_HIDE_SHIP_NAME ) set_modified(); shipp->flags2 &= ~SF2_HIDE_SHIP_NAME; break; } switch (m_disable_ets.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_ETS) ) set_modified(); shipp->flags2 |= SF2_NO_ETS; break; case 0: if ( shipp->flags2 & SF2_NO_ETS ) set_modified(); shipp->flags2 &= ~SF2_NO_ETS; break; } switch (m_cloaked.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_CLOAKED) ) set_modified(); shipp->flags2 |= SF2_CLOAKED; break; case 0: if ( shipp->flags2 & SF2_CLOAKED ) set_modified(); shipp->flags2 &= ~SF2_CLOAKED; break; } switch (m_guardian.GetCheck()) { case 1: if ( !(shipp->ship_guardian_threshold) ) set_modified(); shipp->ship_guardian_threshold = SHIP_GUARDIAN_THRESHOLD_DEFAULT; break; case 0: if ( shipp->ship_guardian_threshold ) set_modified(); shipp->ship_guardian_threshold = 0; break; } switch (m_vaporize.GetCheck()) { case 1: if ( !(shipp->flags & SF_VAPORIZE) ) set_modified(); shipp->flags |= SF_VAPORIZE; break; case 0: if ( shipp->flags & SF_VAPORIZE ) set_modified(); shipp->flags &= ~SF_VAPORIZE; break; } switch (m_stealth.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_STEALTH) ) set_modified(); shipp->flags2 |= SF2_STEALTH; break; case 0: if ( shipp->flags2 & SF2_STEALTH ) set_modified(); shipp->flags2 &= ~SF2_STEALTH; break; } switch (m_friendly_stealth_invisible.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS) ) set_modified(); shipp->flags2 |= SF2_FRIENDLY_STEALTH_INVIS; break; case 0: if ( shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS ) set_modified(); shipp->flags2 &= ~SF2_FRIENDLY_STEALTH_INVIS; break; } switch (m_scramble_messages.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_SCRAMBLE_MESSAGES) ) set_modified(); shipp->flags2 |= SF2_SCRAMBLE_MESSAGES; break; case 0: if ( shipp->flags2 & SF2_SCRAMBLE_MESSAGES ) set_modified(); shipp->flags2 &= ~SF2_SCRAMBLE_MESSAGES; break; } switch (m_no_collide.GetCheck()) { case 1: if (objp->flags & OF_COLLIDES) set_modified(); objp->flags &= ~OF_COLLIDES; break; case 0: if (!(objp->flags & OF_COLLIDES)) set_modified(); objp->flags |= OF_COLLIDES; break; } switch (m_no_disabled_self_destruct.GetCheck()) { case 1: if (!(shipp->flags2 & SF2_NO_DISABLED_SELF_DESTRUCT)) set_modified(); shipp->flags2 |= SF2_NO_DISABLED_SELF_DESTRUCT; break; case 0: if (shipp->flags2 & SF2_NO_DISABLED_SELF_DESTRUCT) set_modified(); shipp->flags2 &= ~SF2_NO_DISABLED_SELF_DESTRUCT; break; } shipp->respawn_priority = 0; if(The_mission.game_type & MISSION_TYPE_MULTI) { m_respawn_priority.save(&shipp->respawn_priority); } }
void ship_flags_dlg::update_ship(int shipnum) { ship *shipp = &Ships[shipnum]; object *objp = &Objects[shipp->objnum]; if (m_reinforcement.GetCheck() != 2) set_reinforcement(shipp->ship_name, m_reinforcement.GetCheck()); switch (m_cargo_known.GetCheck()) { case 1: if ( !(shipp->flags & SF_CARGO_REVEALED) ) set_modified(); shipp->flags |= SF_CARGO_REVEALED; break; case 0: if ( shipp->flags & SF_CARGO_REVEALED ) set_modified(); shipp->flags &= ~SF_CARGO_REVEALED; break; } // update the flags for IGNORE_COUNT and PROTECT_SHIP switch (m_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_PROTECTED) ) set_modified(); objp->flags |= OF_PROTECTED; break; case 0: if ( objp->flags & OF_PROTECTED ) set_modified(); objp->flags &= ~OF_PROTECTED; break; } switch (m_beam_protect_ship.GetCheck()) { case 1: if (!(objp->flags & OF_BEAM_PROTECTED) ) set_modified(); objp->flags |= OF_BEAM_PROTECTED; break; case 0: if ( objp->flags & OF_BEAM_PROTECTED ) set_modified(); objp->flags &= ~OF_BEAM_PROTECTED; break; } switch (m_invulnerable.GetCheck()) { case 1: if ( !(objp->flags & OF_INVULNERABLE) ) set_modified(); objp->flags |= OF_INVULNERABLE; break; case 0: if ( objp->flags & OF_INVULNERABLE ) set_modified(); objp->flags &= ~OF_INVULNERABLE; break; } switch (m_targetable_as_bomb.GetCheck()) { case 1: if ( !(objp->flags & OF_TARGETABLE_AS_BOMB) ) set_modified(); objp->flags |= OF_TARGETABLE_AS_BOMB; break; case 0: if ( objp->flags & OF_TARGETABLE_AS_BOMB ) set_modified(); objp->flags &= ~OF_TARGETABLE_AS_BOMB; break; } switch (m_hidden.GetCheck()) { case 1: if ( !(shipp->flags & SF_HIDDEN_FROM_SENSORS) ) set_modified(); shipp->flags |= SF_HIDDEN_FROM_SENSORS; break; case 0: if ( shipp->flags & SF_HIDDEN_FROM_SENSORS ) set_modified(); shipp->flags &= ~SF_HIDDEN_FROM_SENSORS; break; } switch (m_primitive_sensors.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_PRIMITIVE_SENSORS) ) set_modified(); shipp->flags2 |= SF2_PRIMITIVE_SENSORS; break; case 0: if ( shipp->flags2 & SF2_PRIMITIVE_SENSORS ) set_modified(); shipp->flags2 &= ~SF2_PRIMITIVE_SENSORS; break; } switch (m_no_subspace_drive.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_SUBSPACE_DRIVE) ) set_modified(); shipp->flags2 |= SF2_NO_SUBSPACE_DRIVE; break; case 0: if ( shipp->flags2 & SF2_NO_SUBSPACE_DRIVE ) set_modified(); shipp->flags2 &= ~SF2_NO_SUBSPACE_DRIVE; break; } switch (m_affected_by_gravity.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_AFFECTED_BY_GRAVITY) ) set_modified(); shipp->flags2 |= SF2_AFFECTED_BY_GRAVITY; break; case 0: if ( shipp->flags2 & SF2_AFFECTED_BY_GRAVITY ) set_modified(); shipp->flags2 &= ~SF2_AFFECTED_BY_GRAVITY; break; } switch (m_toggle_subsystem_scanning.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING) ) set_modified(); shipp->flags2 |= SF2_TOGGLE_SUBSYSTEM_SCANNING; break; case 0: if ( shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING ) set_modified(); shipp->flags2 &= ~SF2_TOGGLE_SUBSYSTEM_SCANNING; break; } switch (m_ignore_count.GetCheck()) { case 1: if ( !(shipp->flags & SF_IGNORE_COUNT) ) set_modified(); shipp->flags |= SF_IGNORE_COUNT; break; case 0: if (shipp->flags & SF_IGNORE_COUNT) set_modified(); shipp->flags &= ~SF_IGNORE_COUNT; break; } switch (m_escort.GetCheck()) { case 1: if (!(shipp->flags & SF_ESCORT)) set_modified(); shipp->flags |= SF_ESCORT; m_escort_value.save(&shipp->escort_priority); break; case 0: if (shipp->flags & SF_ESCORT) set_modified(); shipp->flags &= ~SF_ESCORT; break; } // deal with updating the "destroy before the mission" stuff switch (m_destroy.GetCheck()) { case 0: // this means no check in checkbox if ( shipp->flags & SF_KILL_BEFORE_MISSION ) set_modified(); shipp->flags &= ~SF_KILL_BEFORE_MISSION; break; case 1: // this means checkbox is checked if ( !(shipp->flags & SF_KILL_BEFORE_MISSION) ) set_modified(); shipp->flags |= SF_KILL_BEFORE_MISSION; m_destroy_value.save(&shipp->final_death_time); break; } // a mixed state is 2, and since it's not handled, it doesn't change switch (m_no_arrival_music.GetCheck()) { case 0: if (shipp->flags & SF_NO_ARRIVAL_MUSIC) set_modified(); shipp->flags &= ~SF_NO_ARRIVAL_MUSIC; break; case 1: if (!(shipp->flags & SF_NO_ARRIVAL_MUSIC)) set_modified(); shipp->flags |= SF_NO_ARRIVAL_MUSIC; break; } switch (m_scannable.GetCheck()) { case 1: if ( !(shipp->flags & SF_SCANNABLE) ) set_modified(); shipp->flags |= SF_SCANNABLE; break; case 0: if ( shipp->flags & SF_SCANNABLE ) set_modified(); shipp->flags &= ~SF_SCANNABLE; break; } switch (m_red_alert_carry.GetCheck()) { case 1: if ( !(shipp->flags & SF_RED_ALERT_STORE_STATUS) ) set_modified(); shipp->flags |= SF_RED_ALERT_STORE_STATUS; break; case 0: if ( shipp->flags & SF_RED_ALERT_STORE_STATUS ) set_modified(); shipp->flags &= ~SF_RED_ALERT_STORE_STATUS; break; } switch (m_special_warpin.GetCheck()) { case 1: if ( !(objp->flags & OF_SPECIAL_WARPIN) ) set_modified(); objp->flags |= OF_SPECIAL_WARPIN; break; case 0: if ( (objp->flags & OF_SPECIAL_WARPIN) ) set_modified(); objp->flags &= (~OF_SPECIAL_WARPIN); break; } switch (m_no_dynamic.GetCheck()) { case 1: if ( !(Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC) ) set_modified(); Ai_info[shipp->ai_index].ai_flags |= AIF_NO_DYNAMIC; break; case 0: if ( Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC ) set_modified(); Ai_info[shipp->ai_index].ai_flags &= ~AIF_NO_DYNAMIC; break; } switch (m_kamikaze.GetCheck()) { case 1: { int damage; if ( !(Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE) ) set_modified(); Ai_info[shipp->ai_index].ai_flags |= AIF_KAMIKAZE; m_kdamage.save(&damage); Ai_info[shipp->ai_index].kamikaze_damage = i2fl(damage); break; } case 0: if ( Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE ) set_modified(); Ai_info[shipp->ai_index].ai_flags &= ~AIF_KAMIKAZE; Ai_info[shipp->ai_index].kamikaze_damage = 0.0f; break; } switch (m_disable_messages.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_BUILTIN_MESSAGES) ) set_modified(); shipp->flags2 |= SF2_NO_BUILTIN_MESSAGES; break; case 0: if ( shipp->flags2 & SF2_NO_BUILTIN_MESSAGES ) set_modified(); shipp->flags2 &= ~SF2_NO_BUILTIN_MESSAGES; break; } switch (m_set_class_dynamically.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY) ) set_modified(); shipp->flags2 |= SF2_SET_CLASS_DYNAMICALLY; break; case 0: if ( shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY ) set_modified(); shipp->flags2 &= ~SF2_SET_CLASS_DYNAMICALLY; break; } switch (m_no_death_scream.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NO_DEATH_SCREAM) ) set_modified(); shipp->flags2 |= SF2_NO_DEATH_SCREAM; break; case 0: if ( shipp->flags2 & SF2_NO_DEATH_SCREAM ) set_modified(); shipp->flags2 &= ~SF2_NO_DEATH_SCREAM; break; } switch (m_always_death_scream.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM) ) set_modified(); shipp->flags2 |= SF2_ALWAYS_DEATH_SCREAM; break; case 0: if ( shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM ) set_modified(); shipp->flags2 &= ~SF2_ALWAYS_DEATH_SCREAM; break; } switch (m_nav_carry.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NAVPOINT_CARRY) ) set_modified(); shipp->flags2 |= SF2_NAVPOINT_CARRY; break; case 0: if ( shipp->flags2 & SF2_NAVPOINT_CARRY ) set_modified(); shipp->flags2 &= ~SF2_NAVPOINT_CARRY; break; } switch (m_nav_needslink.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_NAVPOINT_NEEDSLINK) ) set_modified(); shipp->flags2 |= SF2_NAVPOINT_NEEDSLINK; break; case 0: if ( shipp->flags2 & SF2_NAVPOINT_NEEDSLINK ) set_modified(); shipp->flags2 &= ~SF2_NAVPOINT_NEEDSLINK; break; } switch (m_hide_ship_name.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_HIDE_SHIP_NAME) ) set_modified(); shipp->flags2 |= SF2_HIDE_SHIP_NAME; break; case 0: if ( shipp->flags2 & SF2_HIDE_SHIP_NAME ) set_modified(); shipp->flags2 &= ~SF2_HIDE_SHIP_NAME; break; } switch (m_is_harmless.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_IS_HARMLESS) ) set_modified(); shipp->flags2 |= SF2_IS_HARMLESS; break; case 0: if ( shipp->flags2 & SF2_IS_HARMLESS ) set_modified(); shipp->flags2 &= ~SF2_IS_HARMLESS; break; } switch (m_hide_log_entries.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_HIDE_LOG_ENTRIES) ) set_modified(); shipp->flags2 |= SF2_HIDE_LOG_ENTRIES; break; case 0: if ( shipp->flags2 & SF2_HIDE_LOG_ENTRIES ) set_modified(); shipp->flags2 &= ~SF2_HIDE_LOG_ENTRIES; break; } switch (m_guardian.GetCheck()) { case 1: if ( !(shipp->ship_guardian_threshold) ) set_modified(); shipp->ship_guardian_threshold = SHIP_GUARDIAN_THRESHOLD_DEFAULT; break; case 0: if ( shipp->ship_guardian_threshold ) set_modified(); shipp->ship_guardian_threshold = 0; break; } switch (m_vaporize.GetCheck()) { case 1: if ( !(shipp->flags & SF_VAPORIZE) ) set_modified(); shipp->flags |= SF_VAPORIZE; break; case 0: if ( shipp->flags & SF_VAPORIZE ) set_modified(); shipp->flags &= ~SF_VAPORIZE; break; } switch (m_stealth.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_STEALTH) ) set_modified(); shipp->flags2 |= SF2_STEALTH; break; case 0: if ( shipp->flags2 & SF2_STEALTH ) set_modified(); shipp->flags2 &= ~SF2_STEALTH; break; } switch (m_friendly_stealth_invisible.GetCheck()) { case 1: if ( !(shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS) ) set_modified(); shipp->flags2 |= SF2_FRIENDLY_STEALTH_INVIS; break; case 0: if ( shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS ) set_modified(); shipp->flags2 &= ~SF2_FRIENDLY_STEALTH_INVIS; break; } shipp->respawn_priority = 0; if(The_mission.game_type & MISSION_TYPE_MULTI) { m_respawn_priority.save(&shipp->respawn_priority); } }
void ship_flags_dlg::update_ship(int shipnum) { ship *shipp = &Ships[shipnum]; object *objp = &Objects[shipp->objnum]; if (m_reinforcement.GetCheck() != 2) { //Check if we're trying to add more and we've got too many. if( (Num_reinforcements >= MAX_REINFORCEMENTS) && (m_reinforcement.GetCheck() == 1)) { char error_message[256]; sprintf(error_message, "Too many reinforcements; could not add ship '%s' to reinforcement list!", shipp->ship_name); MessageBox(error_message); } //Otherwise, just update as normal. else { set_reinforcement(shipp->ship_name, m_reinforcement.GetCheck()); } } switch (m_cargo_known.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Cargo_revealed]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Cargo_revealed); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Cargo_revealed] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Cargo_revealed); break; } // update the flags for IGNORE_COUNT and PROTECT_SHIP switch (m_protect_ship.GetCheck()) { case 1: if (!(objp->flags[Object::Object_Flags::Protected]) ) set_modified(); objp->flags.set(Object::Object_Flags::Protected); break; case 0: if ( objp->flags[Object::Object_Flags::Protected] ) set_modified(); objp->flags.remove(Object::Object_Flags::Protected); break; } switch (m_beam_protect_ship.GetCheck()) { case 1: if (!(objp->flags[Object::Object_Flags::Beam_protected]) ) set_modified(); objp->flags.set(Object::Object_Flags::Beam_protected); break; case 0: if ( objp->flags[Object::Object_Flags::Beam_protected] ) set_modified(); objp->flags.remove(Object::Object_Flags::Beam_protected); break; } switch (m_flak_protect_ship.GetCheck()) { case 1: if (!(objp->flags[Object::Object_Flags::Flak_protected]) ) set_modified(); objp->flags.set(Object::Object_Flags::Flak_protected); break; case 0: if ( objp->flags[Object::Object_Flags::Flak_protected] ) set_modified(); objp->flags.remove(Object::Object_Flags::Flak_protected); break; } switch (m_laser_protect_ship.GetCheck()) { case 1: if (!(objp->flags[Object::Object_Flags::Laser_protected]) ) set_modified(); objp->flags.set(Object::Object_Flags::Laser_protected); break; case 0: if ( objp->flags[Object::Object_Flags::Laser_protected] ) set_modified(); objp->flags.remove(Object::Object_Flags::Laser_protected); break; } switch (m_missile_protect_ship.GetCheck()) { case 1: if (!(objp->flags[Object::Object_Flags::Missile_protected]) ) set_modified(); objp->flags.set(Object::Object_Flags::Missile_protected); break; case 0: if ( objp->flags[Object::Object_Flags::Missile_protected] ) set_modified(); objp->flags.remove(Object::Object_Flags::Missile_protected); break; } switch (m_invulnerable.GetCheck()) { case 1: if ( !(objp->flags[Object::Object_Flags::Invulnerable]) ) set_modified(); objp->flags.set(Object::Object_Flags::Invulnerable); break; case 0: if ( objp->flags[Object::Object_Flags::Invulnerable] ) set_modified(); objp->flags.remove(Object::Object_Flags::Invulnerable); break; } switch (m_targetable_as_bomb.GetCheck()) { case 1: if ( !(objp->flags[Object::Object_Flags::Targetable_as_bomb]) ) set_modified(); objp->flags.set(Object::Object_Flags::Targetable_as_bomb); break; case 0: if ( objp->flags[Object::Object_Flags::Targetable_as_bomb] ) set_modified(); objp->flags.remove(Object::Object_Flags::Targetable_as_bomb); break; } switch (m_immobile.GetCheck()) { case 1: if ( !(objp->flags[Object::Object_Flags::Immobile]) ) set_modified(); objp->flags.set(Object::Object_Flags::Immobile); break; case 0: if ( objp->flags[Object::Object_Flags::Immobile] ) set_modified(); objp->flags.remove(Object::Object_Flags::Immobile); break; } switch (m_hidden.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Hidden_from_sensors]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Hidden_from_sensors); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Hidden_from_sensors] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Hidden_from_sensors); break; } switch (m_primitive_sensors.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Primitive_sensors]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Primitive_sensors); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Primitive_sensors] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Primitive_sensors); break; } switch (m_no_subspace_drive.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::No_subspace_drive]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_subspace_drive); break; case 0: if ( shipp->flags[Ship::Ship_Flags::No_subspace_drive] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::No_subspace_drive); break; } switch (m_affected_by_gravity.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Affected_by_gravity]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Affected_by_gravity); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Affected_by_gravity] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Affected_by_gravity); break; } switch (m_toggle_subsystem_scanning.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Toggle_subsystem_scanning]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Toggle_subsystem_scanning); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Toggle_subsystem_scanning] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Toggle_subsystem_scanning); break; } switch (m_ignore_count.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Ignore_count]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Ignore_count); break; case 0: if (shipp->flags[Ship::Ship_Flags::Ignore_count]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Ignore_count); break; } switch (m_escort.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Escort])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Escort); m_escort_value.save(&shipp->escort_priority); break; case 0: if (shipp->flags[Ship::Ship_Flags::Escort]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Escort); break; } // deal with updating the "destroy before the mission" stuff switch (m_destroy.GetCheck()) { case 0: // this means no check in checkbox if ( shipp->flags[Ship::Ship_Flags::Kill_before_mission] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Kill_before_mission); break; case 1: // this means checkbox is checked if ( !(shipp->flags[Ship::Ship_Flags::Kill_before_mission]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Kill_before_mission); m_destroy_value.save(&shipp->final_death_time); break; } // a mixed state is 2, and since it's not handled, it doesn't change switch (m_no_arrival_music.GetCheck()) { case 0: if (shipp->flags[Ship::Ship_Flags::No_arrival_music]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::No_arrival_music); break; case 1: if (!(shipp->flags[Ship::Ship_Flags::No_arrival_music])) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_arrival_music); break; } switch (m_scannable.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Scannable]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Scannable); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Scannable] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Scannable); break; } switch (m_red_alert_carry.GetCheck()) { case 1: if ( !(shipp->flags[Ship::Ship_Flags::Red_alert_store_status]) ) set_modified(); shipp->flags.set(Ship::Ship_Flags::Red_alert_store_status); break; case 0: if ( shipp->flags[Ship::Ship_Flags::Red_alert_store_status] ) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Red_alert_store_status); break; } switch (m_special_warpin.GetCheck()) { case 1: if ( !(objp->flags[Object::Object_Flags::Special_warpin]) ) set_modified(); objp->flags.set(Object::Object_Flags::Special_warpin); break; case 0: if ( (objp->flags[Object::Object_Flags::Special_warpin]) ) set_modified(); objp->flags.remove(Object::Object_Flags::Special_warpin); break; } switch (m_no_dynamic.GetCheck()) { case 1: if ( !(Ai_info[shipp->ai_index].ai_flags[AI::AI_Flags::No_dynamic]) ) set_modified(); Ai_info[shipp->ai_index].ai_flags.set(AI::AI_Flags::No_dynamic); break; case 0: if ( Ai_info[shipp->ai_index].ai_flags[AI::AI_Flags::No_dynamic] ) set_modified(); Ai_info[shipp->ai_index].ai_flags.remove(AI::AI_Flags::No_dynamic); break; } switch (m_kamikaze.GetCheck()) { case 1: { int damage; if ( !(Ai_info[shipp->ai_index].ai_flags[AI::AI_Flags::Kamikaze]) ) set_modified(); Ai_info[shipp->ai_index].ai_flags.set(AI::AI_Flags::Kamikaze); m_kdamage.save(&damage); Ai_info[shipp->ai_index].kamikaze_damage = damage; break; } case 0: if ( Ai_info[shipp->ai_index].ai_flags[AI::AI_Flags::Kamikaze] ) set_modified(); Ai_info[shipp->ai_index].ai_flags.remove(AI::AI_Flags::Kamikaze); Ai_info[shipp->ai_index].kamikaze_damage = 0; break; } switch (m_disable_messages.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::No_builtin_messages])) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_builtin_messages); break; case 0: if (shipp->flags[Ship::Ship_Flags::No_builtin_messages]) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_builtin_messages, false); break; } switch (m_set_class_dynamically.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Set_class_dynamically])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Set_class_dynamically); break; case 0: if (shipp->flags[Ship::Ship_Flags::Set_class_dynamically]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Set_class_dynamically); break; } switch (m_no_death_scream.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::No_death_scream])) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_death_scream); break; case 0: if (shipp->flags[Ship::Ship_Flags::No_death_scream]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::No_death_scream); break; } switch (m_always_death_scream.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Always_death_scream])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Always_death_scream); break; case 0: if (shipp->flags[Ship::Ship_Flags::Always_death_scream]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Always_death_scream); break; } switch (m_nav_carry.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Navpoint_carry])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Navpoint_carry); break; case 0: if (shipp->flags[Ship::Ship_Flags::Navpoint_carry]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Navpoint_carry); break; } switch (m_nav_needslink.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Navpoint_needslink])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Navpoint_needslink); break; case 0: if (shipp->flags[Ship::Ship_Flags::Navpoint_needslink]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Navpoint_needslink); break; } switch (m_hide_ship_name.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Hide_ship_name])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Hide_ship_name); break; case 0: if (shipp->flags[Ship::Ship_Flags::Hide_ship_name]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Hide_ship_name); break; } switch (m_disable_ets.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::No_ets])) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_ets); break; case 0: if (shipp->flags[Ship::Ship_Flags::No_ets]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::No_ets); break; } switch (m_cloaked.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Cloaked])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Cloaked); break; case 0: if (shipp->flags[Ship::Ship_Flags::Cloaked]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Cloaked); break; } switch (m_guardian.GetCheck()) { case 1: if (!(shipp->ship_guardian_threshold)) set_modified(); shipp->ship_guardian_threshold = SHIP_GUARDIAN_THRESHOLD_DEFAULT; break; case 0: if (shipp->ship_guardian_threshold) set_modified(); shipp->ship_guardian_threshold = 0; break; } switch (m_vaporize.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Vaporize])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Vaporize); break; case 0: if (shipp->flags[Ship::Ship_Flags::Vaporize]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Vaporize); break; } switch (m_stealth.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Stealth])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Stealth); break; case 0: if (shipp->flags[Ship::Ship_Flags::Stealth]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Stealth); break; } switch (m_friendly_stealth_invisible.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Friendly_stealth_invis])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Friendly_stealth_invis); break; case 0: if (shipp->flags[Ship::Ship_Flags::Friendly_stealth_invis]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Friendly_stealth_invis); break; } switch (m_scramble_messages.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::Scramble_messages])) set_modified(); shipp->flags.set(Ship::Ship_Flags::Scramble_messages); break; case 0: if (shipp->flags[Ship::Ship_Flags::Scramble_messages]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::Scramble_messages); break; } switch (m_no_collide.GetCheck()) { case 1: if (objp->flags[Object::Object_Flags::Collides]) set_modified(); objp->flags.remove(Object::Object_Flags::Collides); break; case 0: if (!(objp->flags[Object::Object_Flags::Collides])) set_modified(); objp->flags.set(Object::Object_Flags::Collides); break; } switch (m_no_disabled_self_destruct.GetCheck()) { case 1: if (!(shipp->flags[Ship::Ship_Flags::No_disabled_self_destruct])) set_modified(); shipp->flags.set(Ship::Ship_Flags::No_disabled_self_destruct); break; case 0: if (shipp->flags[Ship::Ship_Flags::No_disabled_self_destruct]) set_modified(); shipp->flags.remove(Ship::Ship_Flags::No_disabled_self_destruct); break; } shipp->respawn_priority = 0; if(The_mission.game_type & MISSION_TYPE_MULTI) { m_respawn_priority.save(&shipp->respawn_priority); } }