diff --git a/code/mission/mission_flags.h b/code/mission/mission_flags.h index 771de7b630a..88c5dcd01b0 100644 --- a/code/mission/mission_flags.h +++ b/code/mission/mission_flags.h @@ -110,7 +110,8 @@ namespace Mission { SF_Fail_sound_locked_primary, // Kiloku - Plays fail sound when firing with locked weapons SF_Fail_sound_locked_secondary, // Kiloku - Plays fail sound when firing with locked weapons SF_Aspect_immune, // Kiloku - Ship cannot be locked onto by aspect seeking weapons - SF_Cannot_perform_scan, // Goober5000 - ship cannot scan other ships + SF_Cannot_perform_scan_hide_cargo, // Goober5000 - ship cannot scan other ships, and cargo will not be shown on the HUD + SF_Cannot_perform_scan_show_cargo, // Goober5000 - ship cannot scan other ships, but cargo will be shown on the HUD SF_No_targeting_limits, // MjnMixael - Ship is always targetable regardless of AWACS or targeting range limits SF_From_player_wing, // set for ships that are members of any player starting wing diff --git a/code/mission/missionparse.cpp b/code/mission/missionparse.cpp index adb05131e7c..c9cc60e3b9f 100644 --- a/code/mission/missionparse.cpp +++ b/code/mission/missionparse.cpp @@ -309,7 +309,8 @@ flag_def_list_new Parse_ship_flags[] = { {"fail-sound-locked-primary", Ship::Ship_Flags::Fail_sound_locked_primary, true, false}, {"fail-sound-locked-secondary", Ship::Ship_Flags::Fail_sound_locked_secondary, true, false}, {"aspect-immune", Ship::Ship_Flags::Aspect_immune, true, false}, - {"cannot-perform-scan", Ship::Ship_Flags::Cannot_perform_scan, true, false}, + {"cannot-perform-scan-hide-cargo", Ship::Ship_Flags::Cannot_perform_scan_hide_cargo, true, false}, + {"cannot-perform-scan-show-cargo", Ship::Ship_Flags::Cannot_perform_scan_show_cargo, true, false}, {"no-targeting-limits", Ship::Ship_Flags::No_targeting_limits, true, false}, {"force-shields-on", Ship::Ship_Flags::Force_shields_on, true, false}, {"Destroy before Mission", Ship::Ship_Flags::Kill_before_mission,true, false}, //Not Printed to misson so can use descriptive name @@ -479,7 +480,8 @@ flag_def_list_new Parse_object_flags[] = { { "fail-sound-locked-primary", Mission::Parse_Object_Flags::SF_Fail_sound_locked_primary, true, false }, { "fail-sound-locked-secondary", Mission::Parse_Object_Flags::SF_Fail_sound_locked_secondary, true, false }, { "aspect-immune", Mission::Parse_Object_Flags::SF_Aspect_immune, true, false }, - { "cannot-perform-scan", Mission::Parse_Object_Flags::SF_Cannot_perform_scan, true, false }, + { "cannot-perform-scan-hide-cargo", Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo, true, false }, + { "cannot-perform-scan-show-cargo", Mission::Parse_Object_Flags::SF_Cannot_perform_scan_show_cargo, true, false }, { "no-targeting-limits", Mission::Parse_Object_Flags::SF_No_targeting_limits, true, false}, }; @@ -545,7 +547,8 @@ parse_object_flag_description Parse_object_flag_des { Mission::Parse_Object_Flags::SF_Fail_sound_locked_primary, "Play the firing fail sound when the weapon is locked."}, { Mission::Parse_Object_Flags::SF_Fail_sound_locked_secondary, "Play the firing fail sound when the weapon is locked."}, { Mission::Parse_Object_Flags::SF_Aspect_immune, "Ship cannot be targeted by Aspect Seekers."}, - { Mission::Parse_Object_Flags::SF_Cannot_perform_scan, "Ship cannot scan other ships."}, + { Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo, "Ship cannot scan other ships, and the cargo line will not be shown on the HUD."}, + { Mission::Parse_Object_Flags::SF_Cannot_perform_scan_show_cargo, "Ship cannot scan other ships, but the cargo line will be shown on the HUD."}, { Mission::Parse_Object_Flags::SF_No_targeting_limits, "Ship is always targetable regardless of AWACS or targeting range limits."}, }; @@ -3111,8 +3114,10 @@ void resolve_parse_flags(object *objp, flagset &par if (parse_flags[Mission::Parse_Object_Flags::SF_Aspect_immune]) shipp->flags.set(Ship::Ship_Flags::Aspect_immune); - if (parse_flags[Mission::Parse_Object_Flags::SF_Cannot_perform_scan]) - shipp->flags.set(Ship::Ship_Flags::Cannot_perform_scan); + if (parse_flags[Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo]) + shipp->flags.set(Ship::Ship_Flags::Cannot_perform_scan_hide_cargo); + if (parse_flags[Mission::Parse_Object_Flags::SF_Cannot_perform_scan_show_cargo]) + shipp->flags.set(Ship::Ship_Flags::Cannot_perform_scan_show_cargo); if (parse_flags[Mission::Parse_Object_Flags::SF_No_targeting_limits]) shipp->flags.set(Ship::Ship_Flags::No_targeting_limits); @@ -3506,11 +3511,18 @@ int parse_object(mission *pm, int /*flag*/, p_object *p_objp) // set flags if (optional_string("+Flags:")) { - SCP_vector unparsed; - parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed); - if (!unparsed.empty()) { - for (size_t k = 0; k < unparsed.size(); ++k) { - WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed[k].c_str()); + SCP_vector unparsed_vec; + parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed_vec); + if (!unparsed_vec.empty()) { + for (const auto& unparsed: unparsed_vec) { + // catch typos or deprecations + if (!stricmp(unparsed.c_str(), "no-collide") || !stricmp(unparsed.c_str(), "no_collide")) { + p_objp->flags.set(Mission::Parse_Object_Flags::OF_No_collide); + } else if (!stricmp(unparsed.c_str(), "cannot-perform-scan")) { + p_objp->flags.set(Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo); + } else { + WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed.c_str()); + } } } } @@ -3518,16 +3530,17 @@ int parse_object(mission *pm, int /*flag*/, p_object *p_objp) // second set - Goober5000 if (optional_string("+Flags2:")) { - SCP_vector unparsed; - parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed); - if (!unparsed.empty()) { - for (size_t k = 0; k < unparsed.size(); ++k) { + SCP_vector unparsed_vec; + parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed_vec); + if (!unparsed_vec.empty()) { + for (const auto& unparsed: unparsed_vec) { // catch typos or deprecations - if (!stricmp(unparsed[k].c_str(), "no-collide") || !stricmp(unparsed[k].c_str(), "no_collide")) { + if (!stricmp(unparsed.c_str(), "no-collide") || !stricmp(unparsed.c_str(), "no_collide")) { p_objp->flags.set(Mission::Parse_Object_Flags::OF_No_collide); - } - else { - WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed[k].c_str()); + } else if (!stricmp(unparsed.c_str(), "cannot-perform-scan")) { + p_objp->flags.set(Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo); + } else { + WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed.c_str()); } } } diff --git a/code/parse/sexp.cpp b/code/parse/sexp.cpp index 0023f9977ca..60d91fe1685 100644 --- a/code/parse/sexp.cpp +++ b/code/parse/sexp.cpp @@ -3492,65 +3492,32 @@ int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, s break; case OPF_SHIP_FLAG: - { - bool found = false; - for ( i = 0; i < Num_object_flag_names; i++) { - if (!stricmp(Object_flag_names[i].flag_name, CTEXT(node))) { - found = true; - break; - } - } - - if (!found) { - for ( i = 0; i < (int)Num_ship_flag_names; i++) { - if (!stricmp(Ship_flag_names[i].flag_name, CTEXT(node))) { - found = true; - break; - } - } - } - - if (!found) { - for ( i = 0; i < (int)Num_parse_object_flags; i++) { - if (!stricmp(Parse_object_flags[i].name, CTEXT(node))) { - found = true; - break; - } - } - } - - if (!found) { - for ( i = 0; i < Num_ai_flag_names; i++) { - if (!stricmp(Ai_flag_names[i].flag_name, CTEXT(node))) { - found = true; - break; - } - } - } + { + Object::Object_Flags object_flag = Object::Object_Flags::NUM_VALUES; + Ship::Ship_Flags ship_flag = Ship::Ship_Flags::NUM_VALUES; + Mission::Parse_Object_Flags parse_obj_flag = Mission::Parse_Object_Flags::NUM_VALUES; + AI::AI_Flags ai_flag = AI::AI_Flags::NUM_VALUES; + sexp_check_flag_arrays(CTEXT(node), object_flag, ship_flag, parse_obj_flag, ai_flag); - if (!found) { + if (object_flag == Object::Object_Flags::NUM_VALUES && ship_flag == Ship::Ship_Flags::NUM_VALUES + && parse_obj_flag == Mission::Parse_Object_Flags::NUM_VALUES && ai_flag == AI::AI_Flags::NUM_VALUES) { return SEXP_CHECK_INVALID_SHIP_FLAG; } break; - } + } case OPF_WING_FLAG: - { - bool found = false; - for ( i = 0; i < (int)Num_wing_flag_names; i++) { - if (!stricmp(Wing_flag_names[i].flag_name, CTEXT(node))) { - found = true; - break; - } - } + { + Ship::Wing_Flags wing_flag = Ship::Wing_Flags::NUM_VALUES; + sexp_check_flag_array(CTEXT(node), wing_flag); - if (!found) { + if (wing_flag == Ship::Wing_Flags::NUM_VALUES) { return SEXP_CHECK_INVALID_WING_FLAG; } break; - } + } case OPF_TEAM_COLOR: if (type2 != SEXP_ATOM_STRING) { @@ -17843,6 +17810,13 @@ bool sexp_check_flag_arrays(const char *flag_name, Object::Object_Flags &object_ } } + // check for deprecated flags + if (!stricmp("cannot-perform-scan", flag_name)) { + ship_flag = Ship::Ship_Flags::Cannot_perform_scan_hide_cargo; + parse_obj_flag = Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo; + send_multi = true; + } + return send_multi; } diff --git a/code/playerman/playercontrol.cpp b/code/playerman/playercontrol.cpp index c9708e13fb2..2311cde4a19 100644 --- a/code/playerman/playercontrol.cpp +++ b/code/playerman/playercontrol.cpp @@ -1658,7 +1658,7 @@ bool player_inspect_cargo(float frametime, char *outstr) outstr[0] = 0; - if ( Player_ai->target_objnum < 0 || Player_ship->flags[Ship::Ship_Flags::Cannot_perform_scan] ) { + if ( Player_ai->target_objnum < 0 || Player_ship->flags[Ship::Ship_Flags::Cannot_perform_scan_hide_cargo] ) { return false; } @@ -1737,78 +1737,85 @@ bool player_inspect_cargo(float frametime, char *outstr) return true; } - // see if player is within inspection range - ship_info* player_sip = &Ship_info[Player_ship->ship_info_index]; - float scan_dist = MAX(player_sip->scan_range_normal, (cargo_objp->radius + player_sip->scan_range_normal - CARGO_RADIUS_REAL_DELTA)); - scan_dist *= player_sip->scanning_range_multiplier; + // if we can't do any scanning, then skip over it + if (!Player_ship->flags[Ship::Ship_Flags::Cannot_perform_scan_show_cargo]) { + // see if player is within inspection range + ship_info* player_sip = &Ship_info[Player_ship->ship_info_index]; + float scan_dist = MAX(player_sip->scan_range_normal, (cargo_objp->radius + player_sip->scan_range_normal - CARGO_RADIUS_REAL_DELTA)); + scan_dist *= player_sip->scanning_range_multiplier; + + if ( Player_ai->current_target_distance < scan_dist ) { + vec3d vec_to_cargo; + + // check if player is facing cargo, do not proceed with inspection if not + vm_vec_normalized_dir(&vec_to_cargo, &cargo_objp->pos, &Player_obj->pos); + float dot = vm_vec_dot(&vec_to_cargo, &Player_obj->orient.vec.fvec); + if ( dot < CARGO_MIN_DOT_TO_REVEAL ) { + if (reveal_cargo) { + if (cargo_sp->cargo_title[0] != '\0') { + if (cargo_sp->cargo_title[0] == '#') { + strcpy(outstr, XSTR("", 1852)); + } else { + sprintf(outstr, XSTR("%s: ", 1850), cargo_sp->cargo_title); + } + } else { + strcpy(outstr, XSTR("cargo: ", 86)); + } + } else { + strcpy(outstr, XSTR("not scanned", 87)); + } - if ( Player_ai->current_target_distance < scan_dist ) { - vec3d vec_to_cargo; + hud_targetbox_end_flash(TBOX_FLASH_CARGO); + Player->cargo_inspect_time = 0; + return true; + } + + // player is facing the cargo, and within range, so proceed with inspection + if ( hud_sensors_ok(Player_ship, 0) ) { + Player->cargo_inspect_time += (int)std::lround(frametime*1000); + } - // check if player is facing cargo, do not proceed with inspection if not - vm_vec_normalized_dir(&vec_to_cargo, &cargo_objp->pos, &Player_obj->pos); - float dot = vm_vec_dot(&vec_to_cargo, &Player_obj->orient.vec.fvec); - if ( dot < CARGO_MIN_DOT_TO_REVEAL ) { if (reveal_cargo) { if (cargo_sp->cargo_title[0] != '\0') { if (cargo_sp->cargo_title[0] == '#') { - strcpy(outstr, XSTR("", 1852)); + strcpy(outstr, XSTR("inspecting", 1853)); } else { - sprintf(outstr, XSTR("%s: ", 1850), cargo_sp->cargo_title); + sprintf(outstr, XSTR("%s: inspecting", 1851), cargo_sp->cargo_title); } } else { - strcpy(outstr, XSTR("cargo: ", 86)); + strcpy(outstr, XSTR("cargo: inspecting", 88)); } } else { - strcpy(outstr, XSTR("not scanned", 87)); + strcpy(outstr, XSTR("scanning", 89)); } - hud_targetbox_end_flash(TBOX_FLASH_CARGO); - Player->cargo_inspect_time = 0; - return true; - } - - // player is facing the cargo, and within range, so proceed with inspection - if ( hud_sensors_ok(Player_ship, 0) ) { - Player->cargo_inspect_time += (int)std::lround(frametime*1000); - } + float scan_time = i2fl(cargo_sip->scan_time); + scan_time *= player_sip->scanning_time_multiplier; - if (reveal_cargo) { - if (cargo_sp->cargo_title[0] != '\0') { - if (cargo_sp->cargo_title[0] == '#') { - strcpy(outstr, XSTR("inspecting", 1853)); - } else { - sprintf(outstr, XSTR("%s: inspecting", 1851), cargo_sp->cargo_title); - } - } else { - strcpy(outstr, XSTR("cargo: inspecting", 88)); + if ( Player->cargo_inspect_time > scan_time ) { + ship_do_cargo_revealed( cargo_sp ); + snd_play( gamesnd_get_game_sound(GameSounds::CARGO_REVEAL), 0.0f ); + Player->cargo_inspect_time = 0; } - } else { - strcpy(outstr, XSTR("scanning", 89)); + + return true; } + } - float scan_time = i2fl(cargo_sip->scan_time); - scan_time *= player_sip->scanning_time_multiplier; + // the code will reach this point if we are not scanning, if we cannot scan, or if the scan is not complete - if ( Player->cargo_inspect_time > scan_time ) { - ship_do_cargo_revealed( cargo_sp ); - snd_play( gamesnd_get_game_sound(GameSounds::CARGO_REVEAL), 0.0f ); - Player->cargo_inspect_time = 0; - } - } else { - if (reveal_cargo){ - if (cargo_sp->cargo_title[0] != '\0') { - if (cargo_sp->cargo_title[0] == '#') { - strcpy(outstr, XSTR("", 1852)); - } else { - sprintf(outstr, XSTR("%s: ", 1850), cargo_sp->cargo_title); - } + if (reveal_cargo) { + if (cargo_sp->cargo_title[0] != '\0') { + if (cargo_sp->cargo_title[0] == '#') { + strcpy(outstr, XSTR("", 1852)); } else { - strcpy(outstr, XSTR("cargo: ", 86)); + sprintf(outstr, XSTR("%s: ", 1850), cargo_sp->cargo_title); } } else { - strcpy(outstr, XSTR("not scanned", 87)); + strcpy(outstr, XSTR("cargo: ", 86)); } + } else { + strcpy(outstr, XSTR("not scanned", 87)); } return true; @@ -1827,7 +1834,7 @@ bool player_inspect_cap_subsys_cargo(float frametime, char *outstr) outstr[0] = 0; subsys = Player_ai->targeted_subsys; - if ( subsys == NULL || Player_ship->flags[Ship::Ship_Flags::Cannot_perform_scan] ) { + if ( subsys == nullptr || Player_ship->flags[Ship::Ship_Flags::Cannot_perform_scan_hide_cargo] ) { return false; } @@ -1885,96 +1892,104 @@ bool player_inspect_cap_subsys_cargo(float frametime, char *outstr) return true; } - // see if player is within inspection range [ok for subsys] - vec3d subsys_pos; - float subsys_rad; - int subsys_in_view, x, y; - float scan_dist; + // if we can't do any scanning, then skip over it + if (Player_ship->flags[Ship::Ship_Flags::Cannot_perform_scan_show_cargo]) { + // see if player is within inspection range [ok for subsys] + vec3d subsys_pos; + float subsys_rad; + int subsys_in_view, x, y; + float scan_dist; - get_subsystem_world_pos(cargo_objp, Player_ai->targeted_subsys, &subsys_pos); - subsys_rad = subsys->system_info->radius; + get_subsystem_world_pos(cargo_objp, Player_ai->targeted_subsys, &subsys_pos); + subsys_rad = subsys->system_info->radius; - // Goober5000 - ship_info* player_sip = &Ship_info[Player_ship->ship_info_index]; - if (cargo_sip->is_huge_ship()) { - scan_dist = MAX(player_sip->scan_range_capital, (subsys_rad + player_sip->scan_range_capital - CARGO_RADIUS_REAL_DELTA)); - } else { - scan_dist = MAX(player_sip->scan_range_normal, (subsys_rad + player_sip->scan_range_normal - CARGO_RADIUS_REAL_DELTA)); - } - scan_dist *= player_sip->scanning_range_multiplier; + // Goober5000 + ship_info* player_sip = &Ship_info[Player_ship->ship_info_index]; + if (cargo_sip->is_huge_ship()) { + scan_dist = MAX(player_sip->scan_range_capital, (subsys_rad + player_sip->scan_range_capital - CARGO_RADIUS_REAL_DELTA)); + } else { + scan_dist = MAX(player_sip->scan_range_normal, (subsys_rad + player_sip->scan_range_normal - CARGO_RADIUS_REAL_DELTA)); + } + scan_dist *= player_sip->scanning_range_multiplier; - if ( Player_ai->current_target_distance < scan_dist ) { - vec3d vec_to_cargo; + if ( Player_ai->current_target_distance < scan_dist ) { + vec3d vec_to_cargo; - // check if player is facing cargo, do not proceed with inspection if not - vm_vec_normalized_dir(&vec_to_cargo, &subsys_pos, &Player_obj->pos); - float dot = vm_vec_dot(&vec_to_cargo, &Player_obj->orient.vec.fvec); - int hud_targetbox_subsystem_in_view(object *target_objp, int *sx, int *sy); - subsys_in_view = hud_targetbox_subsystem_in_view(cargo_objp, &x, &y); + // check if player is facing cargo, do not proceed with inspection if not + vm_vec_normalized_dir(&vec_to_cargo, &subsys_pos, &Player_obj->pos); + float dot = vm_vec_dot(&vec_to_cargo, &Player_obj->orient.vec.fvec); + subsys_in_view = hud_targetbox_subsystem_in_view(cargo_objp, &x, &y); + + if ( (dot < CARGO_MIN_DOT_TO_REVEAL) || (!subsys_in_view) ) { + if (reveal_cargo) { + if (subsys->subsys_cargo_title[0] != '\0') { + if (subsys->subsys_cargo_title[0] == '#') { + strcpy(outstr, XSTR("", 1852)); + } else { + sprintf(outstr, XSTR("%s: ", 1850), subsys->subsys_cargo_title); + } + } else { + strcpy(outstr, XSTR("cargo: ", 86)); + } + } else { + strcpy(outstr,XSTR( "not scanned", 87)); + } + + hud_targetbox_end_flash(TBOX_FLASH_CARGO); + Player->cargo_inspect_time = 0; + return true; + } + + // player is facing the cargo, and within range, so proceed with inspection + if ( hud_sensors_ok(Player_ship, 0) ) { + Player->cargo_inspect_time += (int)std::lround(frametime*1000); + } - if ( (dot < CARGO_MIN_DOT_TO_REVEAL) || (!subsys_in_view) ) { if (reveal_cargo) { if (subsys->subsys_cargo_title[0] != '\0') { if (subsys->subsys_cargo_title[0] == '#') { - strcpy(outstr, XSTR("", 1852)); + strcpy(outstr, XSTR("inspecting", 1853)); } else { - sprintf(outstr, XSTR("%s: ", 1850), subsys->subsys_cargo_title); + sprintf(outstr, XSTR("%s: inspecting", 1851), subsys->subsys_cargo_title); } } else { - strcpy(outstr, XSTR("cargo: ", 86)); + strcpy(outstr, XSTR("cargo: inspecting", 88)); } } else { - strcpy(outstr,XSTR( "not scanned", 87)); + strcpy(outstr,XSTR( "scanning", 89)); + } + + float scan_time; + if (subsys->system_info->scan_time > 0) + scan_time = i2fl(subsys->system_info->scan_time); + else + scan_time = i2fl(cargo_sip->scan_time); + scan_time *= player_sip->scanning_time_multiplier; + + if ( Player->cargo_inspect_time > scan_time ) { + ship_do_cap_subsys_cargo_revealed( cargo_sp, subsys, 0); + snd_play( gamesnd_get_game_sound(GameSounds::CARGO_REVEAL), 0.0f ); + Player->cargo_inspect_time = 0; } - hud_targetbox_end_flash(TBOX_FLASH_CARGO); - Player->cargo_inspect_time = 0; return true; } + } - // player is facing the cargo, and within range, so proceed with inspection - if ( hud_sensors_ok(Player_ship, 0) ) { - Player->cargo_inspect_time += (int)std::lround(frametime*1000); - } + // the code will reach this point if we are not scanning, if we cannot scan, or if the scan is not complete - if (reveal_cargo) - if (subsys->subsys_cargo_title[0] != '\0') { - if (subsys->subsys_cargo_title[0] == '#') { - strcpy(outstr, XSTR("inspecting", 1853)); - } else { - sprintf(outstr, XSTR("%s: inspecting", 1851), subsys->subsys_cargo_title); - } + if (reveal_cargo) { + if (subsys->subsys_cargo_title[0] != '\0') { + if (subsys->subsys_cargo_title[0] == '#') { + strcpy(outstr, XSTR("", 1852)); } else { - strcpy(outstr, XSTR("cargo: inspecting", 88)); + sprintf(outstr, XSTR("%s: ", 1850), subsys->subsys_cargo_title); } - else - strcpy(outstr,XSTR( "scanning", 89)); - - float scan_time; - if (subsys->system_info->scan_time > 0) - scan_time = i2fl(subsys->system_info->scan_time); - else - scan_time = i2fl(cargo_sip->scan_time); - scan_time *= player_sip->scanning_time_multiplier; - - if ( Player->cargo_inspect_time > scan_time ) { - ship_do_cap_subsys_cargo_revealed( cargo_sp, subsys, 0); - snd_play( gamesnd_get_game_sound(GameSounds::CARGO_REVEAL), 0.0f ); - Player->cargo_inspect_time = 0; + } else { + strcpy(outstr, XSTR("cargo: ", 86)); } } else { - if (reveal_cargo) - if (subsys->subsys_cargo_title[0] != '\0') { - if (subsys->subsys_cargo_title[0] == '#') { - strcpy(outstr, XSTR("", 1852)); - } else { - sprintf(outstr, XSTR("%s: ", 1850), subsys->subsys_cargo_title); - } - } else { - strcpy(outstr, XSTR("cargo: ", 86)); - } - else - strcpy(outstr,XSTR( "not scanned", 87)); + strcpy(outstr, XSTR("not scanned", 87)); } return true; diff --git a/code/ship/ship.cpp b/code/ship/ship.cpp index 1747a59eaea..1c55a11be51 100644 --- a/code/ship/ship.cpp +++ b/code/ship/ship.cpp @@ -630,7 +630,8 @@ ship_flag_name Ship_flag_names[] = { { Ship_Flags::Fail_sound_locked_primary, "fail-sound-locked-primary"}, { Ship_Flags::Fail_sound_locked_secondary, "fail-sound-locked-secondary"}, { Ship_Flags::Aspect_immune, "aspect-immune"}, - { Ship_Flags::Cannot_perform_scan, "cannot-perform-scan"}, + { Ship_Flags::Cannot_perform_scan_hide_cargo, "cannot-perform-scan-hide-cargo"}, + { Ship_Flags::Cannot_perform_scan_show_cargo, "cannot-perform-scan-show-cargo"}, { Ship_Flags::No_targeting_limits, "no-targeting-limits"}, { Ship_Flags::No_death_scream, "no-death-scream"}, { Ship_Flags::Always_death_scream, "always-death-scream"}, @@ -670,7 +671,8 @@ ship_flag_description Ship_flag_descriptions[] = { { Ship_Flags::Fail_sound_locked_primary, "Play the firing fail sound when the weapon is locked."}, { Ship_Flags::Fail_sound_locked_secondary, "Play the firing fail sound when the weapon is locked."}, { Ship_Flags::Aspect_immune, "Ship cannot be targeted by Aspect Seekers."}, - { Ship_Flags::Cannot_perform_scan, "Ship cannot scan other ships."}, + { Ship_Flags::Cannot_perform_scan_hide_cargo, "Ship cannot scan other ships, and the cargo line will not be shown on the HUD."}, + { Ship_Flags::Cannot_perform_scan_show_cargo, "Ship cannot scan other ships, but the cargo line will be shown on the HUD."}, { Ship_Flags::No_targeting_limits, "Ship is always targetable regardless of AWACS or targeting range limits."}, { Ship_Flags::No_death_scream, "Ship will never send a death message when destroyed."}, { Ship_Flags::Always_death_scream, "Ship will always send a death message when destroyed."}, diff --git a/code/ship/ship_flags.h b/code/ship/ship_flags.h index 683dc43ad53..06a9368ce69 100644 --- a/code/ship/ship_flags.h +++ b/code/ship/ship_flags.h @@ -136,7 +136,8 @@ namespace Ship { Fail_sound_locked_secondary, // Kiloku -- Play the firing fail sound when the weapon is locked. Subsystem_cache_valid, // Goober5000 - whether the subsystem list index caches can be used Aspect_immune, // Kiloku -- Ship cannot be targeted by Aspect Seekers. - Cannot_perform_scan, // Goober5000 - ship cannot scan other ships + Cannot_perform_scan_hide_cargo, // Goober5000 - ship cannot scan other ships, and cargo will not be shown on the HUD + Cannot_perform_scan_show_cargo, // Goober5000 - ship cannot scan other ships, but cargo will be shown on the HUD No_targeting_limits, //MjnMixael -- Ship is always targetable regardless of AWACS or targeting range limits Maneuver_despite_engines, // Goober5000 - ship can move even when engines are disabled or disrupted Force_primary_unlinking, // plieblang - turned on when the ship is under good-primary-time diff --git a/fred2/missionsave.cpp b/fred2/missionsave.cpp index 6ea4ea45f1f..6b93fce69af 100644 --- a/fred2/missionsave.cpp +++ b/fred2/missionsave.cpp @@ -3972,8 +3972,10 @@ int CFred_mission_save::save_objects() fout(" \"fail-sound-locked-secondary\""); if (shipp->flags[Ship::Ship_Flags::Aspect_immune]) fout(" \"aspect-immune\""); - if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan]) - fout(" \"cannot-perform-scan\""); + if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan_hide_cargo]) + fout(" \"cannot-perform-scan-hide-cargo\""); + if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan_show_cargo]) + fout(" \"cannot-perform-scan-show-cargo\""); if (shipp->flags[Ship::Ship_Flags::No_targeting_limits]) fout(" \"no-targeting-limits\""); fout(" )"); diff --git a/qtfred/src/mission/missionsave.cpp b/qtfred/src/mission/missionsave.cpp index ef55a82c00e..7ac53bf0825 100644 --- a/qtfred/src/mission/missionsave.cpp +++ b/qtfred/src/mission/missionsave.cpp @@ -3952,8 +3952,11 @@ int CFred_mission_save::save_objects() if (shipp->flags[Ship::Ship_Flags::Aspect_immune]) { fout(" \"aspect-immune\""); } - if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan]) { - fout(" \"cannot-perform-scan\""); + if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan_hide_cargo]) { + fout(" \"cannot-perform-scan-hide-cargo\""); + } + if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan_show_cargo]) { + fout(" \"cannot-perform-scan-show-cargo\""); } if (shipp->flags[Ship::Ship_Flags::No_targeting_limits]) { fout(" \"no-targeting-limits\"");