From b532a7b855c032c172dca214799bd63ad45d86a7 Mon Sep 17 00:00:00 2001 From: Goober5000 Date: Fri, 15 May 2026 20:19:39 -0400 Subject: [PATCH] properly initialize each reinforcement --- code/mission/missionparse.cpp | 4 ---- code/ship/ship.cpp | 17 +++++++++++++++++ code/ship/ship.h | 2 ++ fred2/management.cpp | 8 +------- fred2/reinforcementeditordlg.cpp | 14 +------------- qtfred/src/mission/Editor.cpp | 8 +------- .../dialogs/ReinforcementsEditorDialogModel.cpp | 6 +----- 7 files changed, 23 insertions(+), 36 deletions(-) diff --git a/code/mission/missionparse.cpp b/code/mission/missionparse.cpp index 53895b39b2..852b620434 100644 --- a/code/mission/missionparse.cpp +++ b/code/mission/missionparse.cpp @@ -6055,10 +6055,6 @@ void parse_reinforcement(mission *pm) required_string("$Num times:"); stuff_int(&reinforcement.uses); - reinforcement.num_uses = 0; - - // reset the flags to 0 - reinforcement.flags = 0; if ( optional_string("+Arrival delay:") ) { diff --git a/code/ship/ship.cpp b/code/ship/ship.cpp index 16c1390160..36884818f3 100644 --- a/code/ship/ship.cpp +++ b/code/ship/ship.cpp @@ -7646,6 +7646,23 @@ bool wing::has_display_name() const return flags[Ship::Wing_Flags::Has_display_name]; } +reinforcements::reinforcements(const char *reinforcement_name) +{ + if (reinforcement_name) + strcpy_s(name, reinforcement_name); + else + name[0] = '\0'; + + type = 0; + uses = 1; + num_uses = 0; + arrival_delay = 0; + flags = 0; + + memset(no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH); + memset(yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH); +} + // NOTE: Now that the clear() member function exists, this function only sets the stuff associated with the object and ship class. static void ship_set(int ship_index, int objnum, int ship_type) { diff --git a/code/ship/ship.h b/code/ship/ship.h index 1166b30053..e3d7e6663e 100644 --- a/code/ship/ship.h +++ b/code/ship/ship.h @@ -88,6 +88,8 @@ struct reinforcements { int flags; char no_messages[MAX_REINFORCEMENT_MESSAGES][NAME_LENGTH]; // list of messages to possibly send when calling for reinforcement not available char yes_messages[MAX_REINFORCEMENT_MESSAGES][NAME_LENGTH]; // list of messages to acknowledge reinforcement on the way + + reinforcements(const char *reinforcement_name = nullptr); }; class ship_weapon { diff --git a/fred2/management.cpp b/fred2/management.cpp index 704c465bdb..4b445c2a76 100644 --- a/fred2/management.cpp +++ b/fred2/management.cpp @@ -1750,13 +1750,7 @@ int set_reinforcement(const char *name, int state) if (state && (cur == -1)) { Assert(strlen(name) < NAME_LENGTH); - reinforcements reinforcement; - strcpy_s(reinforcement.name, name); - reinforcement.uses = 1; - reinforcement.arrival_delay = 0; - memset( reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); - memset( reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); - Reinforcements.push_back(std::move(reinforcement)); + Reinforcements.emplace_back(name); // set the reinforcement flag on the ship or wing index = ship_name_lookup(name); diff --git a/fred2/reinforcementeditordlg.cpp b/fred2/reinforcementeditordlg.cpp index e8876c895e..fd253c1291 100644 --- a/fred2/reinforcementeditordlg.cpp +++ b/fred2/reinforcementeditordlg.cpp @@ -138,11 +138,6 @@ void reinforcement_editor_dlg::save_data() if (cur >= 0) { m_reinforcements[cur].uses = m_uses; m_reinforcements[cur].arrival_delay = m_delay; - - // save the message information to the reinforcement structure. First clear out the string - // entires in the Reinforcement structure - memset( m_reinforcements[cur].no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); - memset( m_reinforcements[cur].yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); } } @@ -328,15 +323,8 @@ void reinforcement_editor_dlg::OnAdd() } } - reinforcements reinforcement; - strcpy_s(reinforcement.name, dlg.name); ((CListBox *) GetDlgItem(IDC_LIST)) -> AddString(dlg.name); - reinforcement.type = 0; - reinforcement.uses = 1; - reinforcement.arrival_delay = 0; - memset( reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); - memset( reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); - m_reinforcements.push_back(std::move(reinforcement)); + m_reinforcements.emplace_back(dlg.name); } } diff --git a/qtfred/src/mission/Editor.cpp b/qtfred/src/mission/Editor.cpp index 869f6cd7ec..d97137f0c4 100644 --- a/qtfred/src/mission/Editor.cpp +++ b/qtfred/src/mission/Editor.cpp @@ -1553,13 +1553,7 @@ int Editor::set_reinforcement(const char* name, int state) { if (state && (cur == -1)) { Assert(strlen(name) < NAME_LENGTH); - reinforcements reinforcement; - strcpy_s(reinforcement.name, name); - reinforcement.uses = 1; - reinforcement.arrival_delay = 0; - memset(reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH); - memset(reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH); - Reinforcements.push_back(std::move(reinforcement)); + Reinforcements.emplace_back(name); // set the reinforcement flag on the ship or wing index = ship_name_lookup(name); diff --git a/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp b/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp index 9744cfa54a..96154b521e 100644 --- a/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp @@ -84,13 +84,9 @@ bool ReinforcementsDialogModel::apply() // Properly set all reinforcement info. Reinforcements.clear(); for (auto& modelReinforcement : _reinforcementList) { - reinforcements reinforcement; - strcpy_s(reinforcement.name, std::get<0>(modelReinforcement).c_str()); + reinforcements reinforcement(std::get<0>(modelReinforcement).c_str()); reinforcement.uses = std::get<1>(modelReinforcement); reinforcement.arrival_delay = std::get<2>(modelReinforcement); - reinforcement.type = 0; - memset( reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); - memset( reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH ); Reinforcements.push_back(std::move(reinforcement)); }