From c8694a7abe2255a69b442aa7d78d0e11e177e7f1 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 5 Nov 2026 15:32:12 +0000 Subject: [PATCH] Decompile fn_19616 (CNavigationManager::LoadReplayState) Batch #12397 by cremane: 0 byte-identical, 1 confirmed by peer review. - fn_19616 CNavigationManager::LoadReplayState: logic confirmed by peer review Peer-reviewed-by: Yommy, dori, codeplay Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Contents/NavigationRoute.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/Contents/NavigationRoute.cpp b/Source/Contents/NavigationRoute.cpp index ef3cc102..dc6e641f 100644 --- a/Source/Contents/NavigationRoute.cpp +++ b/Source/Contents/NavigationRoute.cpp @@ -1761,6 +1761,7 @@ int CNavigationManager::LoadReplayState(const std::vector& data) std::vector buffer; NavigationReplayHeader header; unsigned offset = 6; + header.Read(data.data()); if (header.tag != 8000) { offset = static_cast(-1); @@ -1768,12 +1769,11 @@ int CNavigationManager::LoadReplayState(const std::vector& data) while (offset < data.size()) { header.Read(data.data() + offset); offset += 6; - if (header.tag == 8001) { - this->ResumeRoute(); - break; - } switch (header.tag) { + case 8001: + this->ResumeRoute(); + return static_cast(offset); case 8002: std::memcpy(&this->unknown_127D, data.data() + offset, header.size); offset += header.size; @@ -1791,7 +1791,7 @@ int CNavigationManager::LoadReplayState(const std::vector& data) offset += header.size; break; case 8006: { - buffer.resize(header.size + 1); + buffer.resize(header.size + 1, 0); std::memcpy(buffer.data(), data.data() + offset, header.size); offset += header.size; NavigationTarget target = this->ReadTarget(buffer.data(), header.size); @@ -1801,13 +1801,13 @@ int CNavigationManager::LoadReplayState(const std::vector& data) break; } case 8007: - buffer.resize(header.size + 1); + buffer.resize(header.size + 1, 0); std::memcpy(buffer.data(), data.data() + offset, header.size); offset += header.size; this->currentTarget = this->ReadTarget(buffer.data(), header.size); break; case 8008: - buffer.resize(header.size + 1); + buffer.resize(header.size + 1, 0); std::memcpy(buffer.data(), data.data() + offset, header.size); offset += header.size; this->savedTarget = this->ReadTarget(buffer.data(), header.size); @@ -1837,7 +1837,7 @@ int CNavigationManager::LoadReplayState(const std::vector& data) offset += header.size; break; case 8015: - buffer.resize(header.size + 1); + buffer.resize(header.size + 1, 0); std::memcpy(buffer.data(), data.data() + offset, header.size); offset += header.size; this->unknown_1264 = buffer.data(); @@ -1863,7 +1863,7 @@ int CNavigationManager::LoadReplayState(const std::vector& data) offset += header.size; break; case 8021: { - buffer.resize(header.size + 1); + buffer.resize(header.size + 1, 0); std::memcpy(buffer.data(), data.data() + offset, header.size); offset += header.size; const int* route = reinterpret_cast(buffer.data()); @@ -1906,7 +1906,7 @@ int CNavigationManager::LoadReplayState(const std::vector& data) break; } case 8022: { - buffer.resize(header.size + 1); + buffer.resize(header.size + 1, 0); std::memcpy(buffer.data(), data.data() + offset, header.size); offset += header.size; CNavi_Link* node = this->ReadObject(buffer.data());