From 39c806771ee181cda5bb13f366e05769b9231814 Mon Sep 17 00:00:00 2001 From: Goober5000 Date: Tue, 9 Jun 2026 00:08:17 -0400 Subject: [PATCH] when disbanding a wing, delete its reinforcement entry Also rename `remove_wing` to `disband_wing` for clarity. --- fred2/fredview.cpp | 2 +- fred2/wing.cpp | 4 +++- fred2/wing.h | 2 +- fred2/wing_editor.cpp | 2 +- qtfred/src/mission/Editor.cpp | 4 +++- qtfred/src/mission/Editor.h | 2 +- qtfred/src/mission/dialogs/WingEditorDialogModel.cpp | 2 +- qtfred/src/ui/FredView.cpp | 2 +- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/fred2/fredview.cpp b/fred2/fredview.cpp index 89efcc5bfb..7d3cdee94d 100644 --- a/fred2/fredview.cpp +++ b/fred2/fredview.cpp @@ -2466,7 +2466,7 @@ int query_single_wing_marked() void CFREDView::OnDisbandWing() { if (query_single_wing_marked()) { - remove_wing(cur_wing); + disband_wing(cur_wing); FREDDoc_ptr->autosave("wing disband"); } else diff --git a/fred2/wing.cpp b/fred2/wing.cpp index a49feaa920..8f2a3674e9 100644 --- a/fred2/wing.cpp +++ b/fred2/wing.cpp @@ -442,7 +442,7 @@ void remove_ship_from_wing(int ship, int min) { rename_ship(ship, buf); } -void remove_wing(int wing_num) +void disband_wing(int wing_num) { int i, total; object *ptr; @@ -450,6 +450,8 @@ void remove_wing(int wing_num) if (check_wing_dependencies(wing_num)) return; + delete_reinforcement(Wings[wing_num].name); + Ship_editor_dialog.bypass_errors = Wing_editor_dialog.bypass_errors = 1; Ship_editor_dialog.update_data(0); total = Wings[wing_num].wave_count; diff --git a/fred2/wing.h b/fred2/wing.h index 4c0b854407..7863ee8f76 100644 --- a/fred2/wing.h +++ b/fred2/wing.h @@ -27,7 +27,7 @@ int create_wing(); * * @param[in] wing_num Index of the wing */ -void remove_wing(int wing_num); +void disband_wing(int wing_num); /** * @brief Takes a ship out of a wing, deleting the wing if that was the only ship in it. diff --git a/fred2/wing_editor.cpp b/fred2/wing_editor.cpp index f9a123344f..5a1c7a1534 100644 --- a/fred2/wing_editor.cpp +++ b/fred2/wing_editor.cpp @@ -1078,7 +1078,7 @@ void wing_editor::OnDeleteWing() void wing_editor::OnDisbandWing() { modified = 0; // no need to run update checks, since wing will be gone shortly anyway. - remove_wing(cur_wing); + disband_wing(cur_wing); } void wing_editor::OnGoals2() diff --git a/qtfred/src/mission/Editor.cpp b/qtfred/src/mission/Editor.cpp index a78bce664b..d530431fde 100644 --- a/qtfred/src/mission/Editor.cpp +++ b/qtfred/src/mission/Editor.cpp @@ -1563,7 +1563,7 @@ int Editor::set_reinforcement(const char* name, int state) { return 0; } -void Editor::remove_wing(int wing_num) { +void Editor::disband_wing(int wing_num) { int i, total; object* ptr; @@ -1572,6 +1572,8 @@ void Editor::remove_wing(int wing_num) { return; } + delete_reinforcement(Wings[wing_num].name); + total = Wings[wing_num].wave_count; for (i = 0; i < total; i++) { ptr = &Objects[wing_objects[wing_num][i]]; diff --git a/qtfred/src/mission/Editor.h b/qtfred/src/mission/Editor.h index 0fe7ce21ee..7241028435 100644 --- a/qtfred/src/mission/Editor.h +++ b/qtfred/src/mission/Editor.h @@ -233,7 +233,7 @@ class Editor : public QObject { * * @param[in] wing_num Index of the wing */ - void remove_wing(int wing_num); + void disband_wing(int wing_num); void delete_marked(); diff --git a/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp b/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp index 635d84bb07..410eff5f90 100644 --- a/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp @@ -733,7 +733,7 @@ void WingEditorDialogModel::disbandCurrentWing() if (!wingIsValid()) return; - _editor->remove_wing(_currentWingIndex); + _editor->disband_wing(_currentWingIndex); reloadFromCurWing(); } diff --git a/qtfred/src/ui/FredView.cpp b/qtfred/src/ui/FredView.cpp index 3fbbb5de5c..4cba59ffbe 100644 --- a/qtfred/src/ui/FredView.cpp +++ b/qtfred/src/ui/FredView.cpp @@ -2694,7 +2694,7 @@ void FredView::on_actionWingForm_triggered(bool /*enabled*/) { } void FredView::on_actionWingDisband_triggered(bool /*enabled*/) { if (fred->query_single_wing_marked()) { - fred->remove_wing(fred->cur_wing); + fred->disband_wing(fred->cur_wing); } else { showButtonDialog(DialogType::Error, "Error",