From 03f2f6c789b4fdb6ab8db5aff3d19360a30f58c4 Mon Sep 17 00:00:00 2001 From: forkless Date: Mon, 1 Jun 2026 02:16:58 +0200 Subject: [PATCH] Simplify playtime extraction to scan_double_near --- _scan_test.py | 9 +++++++++ src/gvas.rs | 6 ++---- 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 _scan_test.py diff --git a/_scan_test.py b/_scan_test.py new file mode 100644 index 0000000..ecea1b5 --- /dev/null +++ b/_scan_test.py @@ -0,0 +1,9 @@ +import struct +d = open('samples/savegame_0.sav','rb').read() +i = d.find(b'ElapsedTimeDouble') +print('ElapsedTimeDouble found at:', i) +i2 = d.find(b'Elapsed') +print('Elapsed found at:', i2) +# Check FName encoding at position i2-4 +print('u32 at i2-4:', struct.unpack_from(' Result { saves_count: extract_int_property(&data, "SavesCount"), latest_version: extract_int_property(&data, "LatestVersion"), data_version: extract_int_property(&data, "DataVersion"), - playtime_seconds: extract_double_property(&data, "ElapsedTimeDouble") - .or_else(|| scan_double_near(&data, b"Elapsed")), + playtime_seconds: scan_double_near(&data, b"Elapsed"), }) } @@ -329,8 +328,7 @@ pub fn extract_metadata(path: &Path) -> Result { }; let is_online = extract_bool_property(&data, "bIsMultiplayerSave").unwrap_or(false); - let playtime_seconds = extract_double_property(&data, "ElapsedTimeDouble") - .or_else(|| scan_double_near(&data, b"Elapsed")); + let playtime_seconds = scan_double_near(&data, b"Elapsed"); Ok(SaveMetadata { slot_name, display_name,