Skip to content

Commit 3fb5634

Browse files
committed
Engine: adjust for RTTI update (dynarray types)
1 parent e8494db commit 3fb5634

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

Engine/game/savegame_components.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,6 +1672,12 @@ HSaveError ReadManagedPool(Stream *in, int32_t /*cmp_ver*/, soff_t cmp_size, con
16721672
return HSaveError::None();
16731673
}
16741674

1675+
enum RTTISaveVersion
1676+
{
1677+
kRTTISvgVer_Initial = 4000000,
1678+
kRTTISvgVer_400_22 = 4000022,
1679+
};
1680+
16751681
HSaveError WriteRTTI(Stream *out)
16761682
{
16771683
// Write the minimal necessary RTTI data, enough to resolve types when restoring a save;
@@ -1695,6 +1701,9 @@ HSaveError WriteRTTI(Stream *out)
16951701
out->WriteInt32(type.parent_id);
16961702
out->WriteInt32(type.flags);
16971703
out->WriteInt32(type.size);
1704+
// kRTTISvgVer_400_22
1705+
out->WriteInt32(type.base_id);
1706+
out->WriteInt32(type.dim_num);
16981707
// Managed ptrs offsets
16991708
const auto man_offs = helper->GetManagedOffsetsForType(type.this_id);
17001709
out->WriteInt32(man_offs.second - man_offs.first);
@@ -1725,7 +1734,14 @@ HSaveError ReadRTTI(Stream *in, int32_t cmp_ver, soff_t cmp_size, const Preserve
17251734
uint32_t parent_id = in->ReadInt32();
17261735
uint32_t flags = in->ReadInt32();
17271736
uint32_t size = in->ReadInt32();
1728-
rb.AddType(buf, i, loc_id, parent_id, flags | RTTI::kType_Generated, size);
1737+
uint32_t base_id = 0u;
1738+
uint32_t dim_num = 0u;
1739+
if (cmp_ver >= kRTTISvgVer_400_22)
1740+
{
1741+
base_id = in->ReadInt32();
1742+
dim_num = in->ReadInt32();
1743+
}
1744+
rb.AddType(buf, i, loc_id, base_id, parent_id, flags | RTTI::kType_Generated, size, dim_num);
17291745
// Read managed ptrs offsets and generate pseudo-fields for these
17301746
uint32_t num_offs = in->ReadInt32();
17311747
for (uint32_t oi = 0; oi < num_offs; ++oi)
@@ -1940,8 +1956,8 @@ ComponentHandler ComponentHandlers[] =
19401956
},
19411957
{
19421958
"RTTI",
1943-
4000000,
1944-
4000000,
1959+
kRTTISvgVer_400_22,
1960+
kRTTISvgVer_Initial,
19451961
kSaveCmp_Scripts, // must go along with scripts
19461962
WriteRTTI,
19471963
ReadRTTI,

0 commit comments

Comments
 (0)