Issue draft: GuildExtraSaveDataMap.Value.Expedition.RawData breaks parsers that keep guild-map parsing enabled
Repo: EternalWraith/PalEdit
Title: GuildExtraSaveDataMap.Value.Expedition.RawData (post-2026.7 saves) breaks third-party parsers that keep guild-map decoding enabled
Summary
After the Palworld update in late July 2026, Level.sav saves gained a new
field inside each GuildExtraSaveDataMap entry: Expedition (with an
Expedition.RawData ArrayProperty payload).
PalEdit's MAIN_SKIP_PROPERTIES skips the entire
.worldSaveData.GuildExtraSaveDataMap as an opaque blob, so this never
surfaces in PalEdit itself. However, third-party tools that need to decode
guild chest data (e.g. server-side guild-chest capacity mods that read
GuildItemStorage.RawData → container_id) keep the guild map enabled and
crash while decoding the new Expedition.RawData field:
UnicodeDecodeError / Exception: Error decoding utf-16-le string of length ...
Root cause
Expedition.RawData is an ArrayProperty whose element structs are not
covered by the vendored palworld_save_tools custom-property decoders
(guild_item_storage.decode / guild_lab.decode handle GuildItemStorage
and Lab but not Expedition), so the generic decoder walks into unknown
nested structs and misaligns the byte cursor.
Suggested fix
Add a custom-property entry so downstream consumers can skip just the
Expedition blob while still decoding the rest of the guild map:
".worldSaveData.GuildExtraSaveDataMap.Value.Expedition.RawData": (
skip_decode,
skip_encode,
),
Using a skip_decode/skip_encode pair (read header metadata + raw payload,
write back verbatim) round-trips byte-identically and keeps
GuildItemStorage/Lab/container_id decoding intact. Verified locally:
save parses, all guild chest entries report correct SlotNum, and the save
re-serializes without the skipped field being modified.
Additional note
The same drift guard applies to other post-2026.7 top-level fields
(OilrigSaveData, SupplySaveData, RandomizerSaveData,
InvaderDeclarationSaveData, FixedWeaponDestroySaveData) — a documented
"skip list for fields added after the parser freeze" would help any tool that
mirrors PalEdit's MAIN_SKIP_PROPERTIES approach while keeping selective
decoding enabled.
Issue draft: GuildExtraSaveDataMap.Value.Expedition.RawData breaks parsers that keep guild-map parsing enabled
Repo: EternalWraith/PalEdit
Title:
GuildExtraSaveDataMap.Value.Expedition.RawData(post-2026.7 saves) breaks third-party parsers that keep guild-map decoding enabledSummary
After the Palworld update in late July 2026,
Level.savsaves gained a newfield inside each
GuildExtraSaveDataMapentry:Expedition(with anExpedition.RawDataArrayProperty payload).PalEdit'sMAIN_SKIP_PROPERTIESskips the entire.worldSaveData.GuildExtraSaveDataMapas an opaque blob, so this neversurfaces in PalEdit itself. However, third-party tools that need to decode
guild chest data (e.g. server-side guild-chest capacity mods that read
GuildItemStorage.RawData→container_id) keep the guild map enabled andcrash while decoding the new
Expedition.RawDatafield:Root cause
Expedition.RawDatais anArrayPropertywhose element structs are notcovered by the vendored
palworld_save_toolscustom-property decoders(
guild_item_storage.decode/guild_lab.decodehandleGuildItemStorageand
Labbut notExpedition), so the generic decoder walks into unknownnested structs and misaligns the byte cursor.
Suggested fix
Add a custom-property entry so downstream consumers can skip just the
Expeditionblob while still decoding the rest of the guild map:Using a
skip_decode/skip_encodepair (read header metadata + raw payload,write back verbatim) round-trips byte-identically and keeps
GuildItemStorage/Lab/container_iddecoding intact. Verified locally:save parses, all guild chest entries report correct
SlotNum, and the savere-serializes without the skipped field being modified.
Additional note
The same drift guard applies to other post-2026.7 top-level fields
(
OilrigSaveData,SupplySaveData,RandomizerSaveData,InvaderDeclarationSaveData,FixedWeaponDestroySaveData) — a documented"skip list for fields added after the parser freeze" would help any tool that
mirrors PalEdit's
MAIN_SKIP_PROPERTIESapproach while keeping selectivedecoding enabled.