Skip to content

feat: add GlobalPalStorage.sav conversion support#167

Open
LFM097384 wants to merge 1 commit intodeafdudecomputers:mainfrom
LFM097384:feature/global-pal-storage-conversion
Open

feat: add GlobalPalStorage.sav conversion support#167
LFM097384 wants to merge 1 commit intodeafdudecomputers:mainfrom
LFM097384:feature/global-pal-storage-conversion

Conversation

@LFM097384
Copy link
Copy Markdown

Summary

This PR adds full read/write support for GlobalPalStorage.sav, the dedicated global Pal storage container introduced in Palworld v0.3.x+.

Closes no existing issue, but extends the conversion and save-management capabilities of the toolset.


Changes

New file

src/palworld_toolsets/convert_global_pal_storage.py

  • Two-way conversion: GlobalPalStorage.sav → JSON and JSON → GlobalPalStorage.sav
  • Integrated with the existing Conversion Options dialog (no separate entry point needed)

GUI

src/palworld_aio/ui/tools_tab.py
Added two new options to ConversionOptionsDialog (indices 8 and 9):

  • Convert GlobalPalStorage.sav to JSON
  • Convert GlobalPalStorage.json to SAV

Core logic

src/palworld_aio/utils.py

  • load_global_pal_storage(save_dir) – locates and deserializes GlobalPalStorage.sav next to Level.sav
  • get_global_pal_storage_entries(gvas_file) – extracts the SaveParameterArray for downstream processing

src/palworld_aio/constants.py
Added global_pal_storage_gvas and global_pal_storage_path to global state.

src/palworld_aio/save_manager.py

  • Auto-loads GlobalPalStorage.sav on every save-folder open and reload
  • Writes it back on every save operation alongside Level.sav
  • Includes GlobalPalStorage Pals in the existing Pal audit / diagnostic report flow

src/palworld_aio/main.py / ** unc_manager.py**

  • GlobalPalStorage is loaded at startup alongside Level.sav
  • Priority ordering for location labels now includes Global Pal Storage

Internationalisation

All 8 supported locales (de_DE, en_US, es_ES, r_FR, ja_JP, ko_KR,
u_RU, zh_CN) updated with three new keys:

  • ool.convert.global_pal_storage.to_json
  • ool.convert.global_pal_storage.to_sav
  • ool.convert.global_pal_storage_done

Technical notes

  • Save type PLM / Oodle compression (save_type = 49) is handled transparently by the existing GVAS pipeline — no new decompression logic required.
  • Container header: /Script/Pal.PalGlobalPalStorageSaveGame, 960-slot fixed array.
  • Fully backward-compatible: if GlobalPalStorage.sav is absent the tool simply skips it without error.
  • No changes to the Level.sav parsing flow.

This PR adds full read/write support for GlobalPalStorage.sav, the dedicated
global Pal storage container introduced in Palworld v0.3.x+.

## What changed

### New conversion module
src/palworld_toolsets/convert_global_pal_storage.py
- Two-way conversion: GlobalPalStorage.sav <-> JSON
- Accessible through the existing Conversion Options dialog in the Tools tab

### GUI
src/palworld_aio/ui/tools_tab.py
- Added two new options to ConversionOptionsDialog (indices 8 and 9):
  - Convert GlobalPalStorage.sav to JSON
  - Convert GlobalPalStorage.json to SAV

### Core logic
src/palworld_aio/utils.py
- load_global_pal_storage(save_dir): locates and deserializes GlobalPalStorage.sav
- get_global_pal_storage_entries(gvas_file): extracts the SaveParameterArray

src/palworld_aio/constants.py
- Added global_pal_storage_gvas and global_pal_storage_path to global state

src/palworld_aio/save_manager.py
- Auto-loads GlobalPalStorage on every save-folder open/reload
- Writes GlobalPalStorage.sav back on every save operation
- Includes GlobalPalStorage Pals in the existing Pal audit / report flow

src/palworld_aio/main.py / unc_manager.py
- GlobalPalStorage is loaded at startup alongside Level.sav
- Priority list for location ordering now includes 'Global Pal Storage'

### Internationalisation
All 8 supported locales updated with three new keys:
- 	ool.convert.global_pal_storage.to_json
- 	ool.convert.global_pal_storage.to_sav
- 	ool.convert.global_pal_storage_done

## Technical notes
- Save type: PLM / Oodle compression (save_type=49), handled transparently
  by the existing GVAS pipeline
- Container header: /Script/Pal.PalGlobalPalStorageSaveGame with 960 slots
- No breaking changes to existing save-loading paths; GlobalPalStorage is
  loaded in addition to, not instead of, the standard Level.sav flow
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant