Skip to content

Commit bbca63d

Browse files
authored
Merge pull request #7185 from Goober5000/cannot_perform_scan_show_cargo
show and hide cargo variants of cannot-perform-scan
2 parents 2436ef2 + 849acf2 commit bbca63d

7 files changed

Lines changed: 199 additions & 191 deletions

File tree

code/mission/mission_flags.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ namespace Mission {
110110
SF_Fail_sound_locked_primary, // Kiloku - Plays fail sound when firing with locked weapons
111111
SF_Fail_sound_locked_secondary, // Kiloku - Plays fail sound when firing with locked weapons
112112
SF_Aspect_immune, // Kiloku - Ship cannot be locked onto by aspect seeking weapons
113-
SF_Cannot_perform_scan, // Goober5000 - ship cannot scan other ships
113+
SF_Cannot_perform_scan_hide_cargo, // Goober5000 - ship cannot scan other ships, and cargo will not be shown on the HUD
114+
SF_Cannot_perform_scan_show_cargo, // Goober5000 - ship cannot scan other ships, but cargo will be shown on the HUD
114115
SF_No_targeting_limits, // MjnMixael - Ship is always targetable regardless of AWACS or targeting range limits
115116
SF_From_player_wing, // set for ships that are members of any player starting wing
116117

code/mission/missionparse.cpp

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,8 @@ flag_def_list_new<Ship::Ship_Flags> Parse_ship_flags[] = {
314314
{"fail-sound-locked-primary", Ship::Ship_Flags::Fail_sound_locked_primary, true, false},
315315
{"fail-sound-locked-secondary", Ship::Ship_Flags::Fail_sound_locked_secondary, true, false},
316316
{"aspect-immune", Ship::Ship_Flags::Aspect_immune, true, false},
317-
{"cannot-perform-scan", Ship::Ship_Flags::Cannot_perform_scan, true, false},
317+
{"cannot-perform-scan-hide-cargo", Ship::Ship_Flags::Cannot_perform_scan_hide_cargo, true, false},
318+
{"cannot-perform-scan-show-cargo", Ship::Ship_Flags::Cannot_perform_scan_show_cargo, true, false},
318319
{"no-targeting-limits", Ship::Ship_Flags::No_targeting_limits, true, false},
319320
{"force-shields-on", Ship::Ship_Flags::Force_shields_on, true, false},
320321
{"Destroy before Mission", Ship::Ship_Flags::Kill_before_mission,true, false}, //Not Printed to misson so can use descriptive name
@@ -484,7 +485,8 @@ flag_def_list_new<Mission::Parse_Object_Flags> Parse_object_flags[] = {
484485
{ "fail-sound-locked-primary", Mission::Parse_Object_Flags::SF_Fail_sound_locked_primary, true, false },
485486
{ "fail-sound-locked-secondary", Mission::Parse_Object_Flags::SF_Fail_sound_locked_secondary, true, false },
486487
{ "aspect-immune", Mission::Parse_Object_Flags::SF_Aspect_immune, true, false },
487-
{ "cannot-perform-scan", Mission::Parse_Object_Flags::SF_Cannot_perform_scan, true, false },
488+
{ "cannot-perform-scan-hide-cargo", Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo, true, false },
489+
{ "cannot-perform-scan-show-cargo", Mission::Parse_Object_Flags::SF_Cannot_perform_scan_show_cargo, true, false },
488490
{ "no-targeting-limits", Mission::Parse_Object_Flags::SF_No_targeting_limits, true, false},
489491
};
490492

@@ -550,7 +552,8 @@ parse_object_flag_description<Mission::Parse_Object_Flags> Parse_object_flag_des
550552
{ Mission::Parse_Object_Flags::SF_Fail_sound_locked_primary, "Play the firing fail sound when the weapon is locked."},
551553
{ Mission::Parse_Object_Flags::SF_Fail_sound_locked_secondary, "Play the firing fail sound when the weapon is locked."},
552554
{ Mission::Parse_Object_Flags::SF_Aspect_immune, "Ship cannot be targeted by Aspect Seekers."},
553-
{ Mission::Parse_Object_Flags::SF_Cannot_perform_scan, "Ship cannot scan other ships."},
555+
{ 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."},
556+
{ 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."},
554557
{ Mission::Parse_Object_Flags::SF_No_targeting_limits, "Ship is always targetable regardless of AWACS or targeting range limits."},
555558
};
556559

@@ -3126,8 +3129,10 @@ void resolve_parse_flags(object *objp, flagset<Mission::Parse_Object_Flags> &par
31263129
if (parse_flags[Mission::Parse_Object_Flags::SF_Aspect_immune])
31273130
shipp->flags.set(Ship::Ship_Flags::Aspect_immune);
31283131

3129-
if (parse_flags[Mission::Parse_Object_Flags::SF_Cannot_perform_scan])
3130-
shipp->flags.set(Ship::Ship_Flags::Cannot_perform_scan);
3132+
if (parse_flags[Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo])
3133+
shipp->flags.set(Ship::Ship_Flags::Cannot_perform_scan_hide_cargo);
3134+
if (parse_flags[Mission::Parse_Object_Flags::SF_Cannot_perform_scan_show_cargo])
3135+
shipp->flags.set(Ship::Ship_Flags::Cannot_perform_scan_show_cargo);
31313136

31323137
if (parse_flags[Mission::Parse_Object_Flags::SF_No_targeting_limits])
31333138
shipp->flags.set(Ship::Ship_Flags::No_targeting_limits);
@@ -3521,28 +3526,36 @@ int parse_object(mission *pm, int /*flag*/, p_object *p_objp)
35213526
// set flags
35223527
if (optional_string("+Flags:"))
35233528
{
3524-
SCP_vector<SCP_string> unparsed;
3525-
parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed);
3526-
if (!unparsed.empty()) {
3527-
for (size_t k = 0; k < unparsed.size(); ++k) {
3528-
WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed[k].c_str());
3529+
SCP_vector<SCP_string> unparsed_vec;
3530+
parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed_vec);
3531+
if (!unparsed_vec.empty()) {
3532+
for (const auto& unparsed: unparsed_vec) {
3533+
// catch typos or deprecations
3534+
if (!stricmp(unparsed.c_str(), "no-collide") || !stricmp(unparsed.c_str(), "no_collide")) {
3535+
p_objp->flags.set(Mission::Parse_Object_Flags::OF_No_collide);
3536+
} else if (!stricmp(unparsed.c_str(), "cannot-perform-scan")) {
3537+
p_objp->flags.set(Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo);
3538+
} else {
3539+
WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed.c_str());
3540+
}
35293541
}
35303542
}
35313543
}
35323544

35333545
// second set - Goober5000
35343546
if (optional_string("+Flags2:"))
35353547
{
3536-
SCP_vector<SCP_string> unparsed;
3537-
parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed);
3538-
if (!unparsed.empty()) {
3539-
for (size_t k = 0; k < unparsed.size(); ++k) {
3548+
SCP_vector<SCP_string> unparsed_vec;
3549+
parse_string_flag_list(p_objp->flags, Parse_object_flags, Num_parse_object_flags, &unparsed_vec);
3550+
if (!unparsed_vec.empty()) {
3551+
for (const auto& unparsed: unparsed_vec) {
35403552
// catch typos or deprecations
3541-
if (!stricmp(unparsed[k].c_str(), "no-collide") || !stricmp(unparsed[k].c_str(), "no_collide")) {
3553+
if (!stricmp(unparsed.c_str(), "no-collide") || !stricmp(unparsed.c_str(), "no_collide")) {
35423554
p_objp->flags.set(Mission::Parse_Object_Flags::OF_No_collide);
3543-
}
3544-
else {
3545-
WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed[k].c_str());
3555+
} else if (!stricmp(unparsed.c_str(), "cannot-perform-scan")) {
3556+
p_objp->flags.set(Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo);
3557+
} else {
3558+
WarningEx(LOCATION, "Unknown flag in parse object flags: %s", unparsed.c_str());
35463559
}
35473560
}
35483561
}

code/missioneditor/missionsave.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3800,8 +3800,10 @@ int Fred_mission_save::save_objects()
38003800
fout(" \"fail-sound-locked-secondary\"");
38013801
if (shipp->flags[Ship::Ship_Flags::Aspect_immune])
38023802
fout(" \"aspect-immune\"");
3803-
if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan])
3804-
fout(" \"cannot-perform-scan\"");
3803+
if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan_hide_cargo])
3804+
fout(" \"cannot-perform-scan-hide-cargo\"");
3805+
if (shipp->flags[Ship::Ship_Flags::Cannot_perform_scan_show_cargo])
3806+
fout(" \"cannot-perform-scan-show-cargo\"");
38053807
if (shipp->flags[Ship::Ship_Flags::No_targeting_limits])
38063808
fout(" \"no-targeting-limits\"");
38073809
fout(" )");

code/parse/sexp.cpp

Lines changed: 21 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3522,65 +3522,32 @@ int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, s
35223522
break;
35233523

35243524
case OPF_SHIP_FLAG:
3525-
{
3526-
bool found = false;
3527-
for ( i = 0; i < Num_object_flag_names; i++) {
3528-
if (!stricmp(Object_flag_names[i].flag_name, CTEXT(node))) {
3529-
found = true;
3530-
break;
3531-
}
3532-
}
3533-
3534-
if (!found) {
3535-
for ( i = 0; i < (int)Num_ship_flag_names; i++) {
3536-
if (!stricmp(Ship_flag_names[i].flag_name, CTEXT(node))) {
3537-
found = true;
3538-
break;
3539-
}
3540-
}
3541-
}
3542-
3543-
if (!found) {
3544-
for ( i = 0; i < (int)Num_parse_object_flags; i++) {
3545-
if (!stricmp(Parse_object_flags[i].name, CTEXT(node))) {
3546-
found = true;
3547-
break;
3548-
}
3549-
}
3550-
}
3551-
3552-
if (!found) {
3553-
for ( i = 0; i < Num_ai_flag_names; i++) {
3554-
if (!stricmp(Ai_flag_names[i].flag_name, CTEXT(node))) {
3555-
found = true;
3556-
break;
3557-
}
3558-
}
3559-
}
3525+
{
3526+
Object::Object_Flags object_flag = Object::Object_Flags::NUM_VALUES;
3527+
Ship::Ship_Flags ship_flag = Ship::Ship_Flags::NUM_VALUES;
3528+
Mission::Parse_Object_Flags parse_obj_flag = Mission::Parse_Object_Flags::NUM_VALUES;
3529+
AI::AI_Flags ai_flag = AI::AI_Flags::NUM_VALUES;
3530+
sexp_check_flag_arrays(CTEXT(node), object_flag, ship_flag, parse_obj_flag, ai_flag);
35603531

3561-
if (!found) {
3532+
if (object_flag == Object::Object_Flags::NUM_VALUES && ship_flag == Ship::Ship_Flags::NUM_VALUES
3533+
&& parse_obj_flag == Mission::Parse_Object_Flags::NUM_VALUES && ai_flag == AI::AI_Flags::NUM_VALUES) {
35623534
return SEXP_CHECK_INVALID_SHIP_FLAG;
35633535
}
35643536

35653537
break;
3566-
}
3538+
}
35673539

35683540
case OPF_WING_FLAG:
3569-
{
3570-
bool found = false;
3571-
for ( i = 0; i < (int)Num_wing_flag_names; i++) {
3572-
if (!stricmp(Wing_flag_names[i].flag_name, CTEXT(node))) {
3573-
found = true;
3574-
break;
3575-
}
3576-
}
3541+
{
3542+
Ship::Wing_Flags wing_flag = Ship::Wing_Flags::NUM_VALUES;
3543+
sexp_check_flag_array(CTEXT(node), wing_flag);
35773544

3578-
if (!found) {
3545+
if (wing_flag == Ship::Wing_Flags::NUM_VALUES) {
35793546
return SEXP_CHECK_INVALID_WING_FLAG;
35803547
}
35813548

35823549
break;
3583-
}
3550+
}
35843551

35853552
case OPF_TEAM_COLOR:
35863553
if (type2 != SEXP_ATOM_STRING) {
@@ -17940,6 +17907,13 @@ bool sexp_check_flag_arrays(const char *flag_name, Object::Object_Flags &object_
1794017907
}
1794117908
}
1794217909

17910+
// check for deprecated flags
17911+
if (!stricmp("cannot-perform-scan", flag_name)) {
17912+
ship_flag = Ship::Ship_Flags::Cannot_perform_scan_hide_cargo;
17913+
parse_obj_flag = Mission::Parse_Object_Flags::SF_Cannot_perform_scan_hide_cargo;
17914+
send_multi = true;
17915+
}
17916+
1794317917
return send_multi;
1794417918
}
1794517919

0 commit comments

Comments
 (0)