Skip to content

Commit b532a7b

Browse files
committed
properly initialize each reinforcement
1 parent 81695b3 commit b532a7b

7 files changed

Lines changed: 23 additions & 36 deletions

File tree

code/mission/missionparse.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6055,10 +6055,6 @@ void parse_reinforcement(mission *pm)
60556055

60566056
required_string("$Num times:");
60576057
stuff_int(&reinforcement.uses);
6058-
reinforcement.num_uses = 0;
6059-
6060-
// reset the flags to 0
6061-
reinforcement.flags = 0;
60626058

60636059
if ( optional_string("+Arrival delay:") )
60646060
{

code/ship/ship.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7646,6 +7646,23 @@ bool wing::has_display_name() const
76467646
return flags[Ship::Wing_Flags::Has_display_name];
76477647
}
76487648

7649+
reinforcements::reinforcements(const char *reinforcement_name)
7650+
{
7651+
if (reinforcement_name)
7652+
strcpy_s(name, reinforcement_name);
7653+
else
7654+
name[0] = '\0';
7655+
7656+
type = 0;
7657+
uses = 1;
7658+
num_uses = 0;
7659+
arrival_delay = 0;
7660+
flags = 0;
7661+
7662+
memset(no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH);
7663+
memset(yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH);
7664+
}
7665+
76497666
// NOTE: Now that the clear() member function exists, this function only sets the stuff associated with the object and ship class.
76507667
static void ship_set(int ship_index, int objnum, int ship_type)
76517668
{

code/ship/ship.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ struct reinforcements {
8888
int flags;
8989
char no_messages[MAX_REINFORCEMENT_MESSAGES][NAME_LENGTH]; // list of messages to possibly send when calling for reinforcement not available
9090
char yes_messages[MAX_REINFORCEMENT_MESSAGES][NAME_LENGTH]; // list of messages to acknowledge reinforcement on the way
91+
92+
reinforcements(const char *reinforcement_name = nullptr);
9193
};
9294

9395
class ship_weapon {

fred2/management.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,13 +1750,7 @@ int set_reinforcement(const char *name, int state)
17501750

17511751
if (state && (cur == -1)) {
17521752
Assert(strlen(name) < NAME_LENGTH);
1753-
reinforcements reinforcement;
1754-
strcpy_s(reinforcement.name, name);
1755-
reinforcement.uses = 1;
1756-
reinforcement.arrival_delay = 0;
1757-
memset( reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
1758-
memset( reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
1759-
Reinforcements.push_back(std::move(reinforcement));
1753+
Reinforcements.emplace_back(name);
17601754

17611755
// set the reinforcement flag on the ship or wing
17621756
index = ship_name_lookup(name);

fred2/reinforcementeditordlg.cpp

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,6 @@ void reinforcement_editor_dlg::save_data()
138138
if (cur >= 0) {
139139
m_reinforcements[cur].uses = m_uses;
140140
m_reinforcements[cur].arrival_delay = m_delay;
141-
142-
// save the message information to the reinforcement structure. First clear out the string
143-
// entires in the Reinforcement structure
144-
memset( m_reinforcements[cur].no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
145-
memset( m_reinforcements[cur].yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
146141
}
147142
}
148143

@@ -328,15 +323,8 @@ void reinforcement_editor_dlg::OnAdd()
328323
}
329324
}
330325

331-
reinforcements reinforcement;
332-
strcpy_s(reinforcement.name, dlg.name);
333326
((CListBox *) GetDlgItem(IDC_LIST)) -> AddString(dlg.name);
334-
reinforcement.type = 0;
335-
reinforcement.uses = 1;
336-
reinforcement.arrival_delay = 0;
337-
memset( reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
338-
memset( reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
339-
m_reinforcements.push_back(std::move(reinforcement));
327+
m_reinforcements.emplace_back(dlg.name);
340328
}
341329
}
342330

qtfred/src/mission/Editor.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,13 +1553,7 @@ int Editor::set_reinforcement(const char* name, int state) {
15531553

15541554
if (state && (cur == -1)) {
15551555
Assert(strlen(name) < NAME_LENGTH);
1556-
reinforcements reinforcement;
1557-
strcpy_s(reinforcement.name, name);
1558-
reinforcement.uses = 1;
1559-
reinforcement.arrival_delay = 0;
1560-
memset(reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH);
1561-
memset(reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH);
1562-
Reinforcements.push_back(std::move(reinforcement));
1556+
Reinforcements.emplace_back(name);
15631557

15641558
// set the reinforcement flag on the ship or wing
15651559
index = ship_name_lookup(name);

qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,9 @@ bool ReinforcementsDialogModel::apply()
8484
// Properly set all reinforcement info.
8585
Reinforcements.clear();
8686
for (auto& modelReinforcement : _reinforcementList) {
87-
reinforcements reinforcement;
88-
strcpy_s(reinforcement.name, std::get<0>(modelReinforcement).c_str());
87+
reinforcements reinforcement(std::get<0>(modelReinforcement).c_str());
8988
reinforcement.uses = std::get<1>(modelReinforcement);
9089
reinforcement.arrival_delay = std::get<2>(modelReinforcement);
91-
reinforcement.type = 0;
92-
memset( reinforcement.no_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
93-
memset( reinforcement.yes_messages, 0, MAX_REINFORCEMENT_MESSAGES * NAME_LENGTH );
9490
Reinforcements.push_back(std::move(reinforcement));
9591
}
9692

0 commit comments

Comments
 (0)