1
0

README, gitignore and HexFiend templates

Signed-off-by: Markus Birth <markus@birth-online.de>
This commit is contained in:
2025-11-03 03:01:00 +00:00
parent 7c210d1e3e
commit 80e315ca50
5 changed files with 163 additions and 2 deletions

7
.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
.DS_Store
Metadata.dat
SaveGame.dat
SaveGame.dec.dat
SavedState.dat
SavedState.dec.dat
SaveGameScreenshot.png

View File

@@ -0,0 +1,34 @@
# The Outer Worlds
# SaveGame.dat is compressed using zlib
# Decompress with: cat SaveGame.dat | perl -MCompress::Zlib -E 'undef $/;print uncompress(<>)' > SaveGame.dec.dat
little_endian
requires 4 "53 47 44 46"
set tlen [uint32 "TypeStr Len"]
ascii $tlen "Type"
hex 6 "???"
set numfiles 0
while {![end]} {
set flen [uint32]
set fname [ascii $flen]
incr numfiles
section -collapsed "$fname" {
set plen [uint32]
set ptypelen [uint32 "TypeStr Len"] ;# 4
set ptype [ascii $ptypelen "Type"] ;# $ptypelen (5 or 6)
hex 6 "???" ;# 6
sectionvalue "$ptype / $plen Bytes"
incr plen -10
incr plen -$ptypelen
hex $plen "Payload"
}
}
entry "File Count" $numfiles

View File

@@ -0,0 +1,55 @@
# The Outer Worlds
# .types = ( Metadata.dat )
little_endian
requires 4 "47 4D 48 46"
set tlen [uint32 "TypeStr Len"]
ascii $tlen "Type"
int32 "???"
int16 "???"
int32 "???"
uint8_bits 1 "Autosave?" ;# has 02h for Autosaves, 00h for normal saves
int8 "???"
set ilen [int32 "ID length"]
ascii $ilen "Identifier"
int32 "???Mission ID???"
set nlen [int32 "Name length"]
ascii $nlen "Name"
int32 "Level"
hex 16 "???"
hex 8 "???"
int32 "Playtime d"
int32 "Playtime h"
int32 "Playtime m"
hex 16 "???"
set slen [int32 "Path length"]
ascii $slen "Path to Screenshot"
hex 8 "???"
hex 8 "???"
hex 5 "???"
set vlen [int32 "Version length"]
ascii $vlen "Version"
set rlen [int32 "Release length"]
ascii $rlen "Release"
int16 "???"
int16 "Normal Save?" ;# has 1 for normal saves, 0 for Autosaves
hex 3 "???"
int32 "Uncompressed Size"
int32 "???"
int32 "???"
hex 16 "???"

View File

@@ -0,0 +1,35 @@
# The Outer Worlds (Nintendo Switch)
# SavedState.dat is compressed using zlib
# Decompress with: cat SavedState.dat | perl -MCompress::Zlib -E 'undef $/;print uncompress(<>)' > SavedState.dec.dat
little_endian
uint32 "Total Size"
uint32 "File Count"
set numfiles 0
while {![end]} {
set flen [uint64]
set fname [utf16 [expr $flen * 2]]
incr numfiles
section -collapsed "$fname" {
set plen [uint32]
set ptypelen [uint32 "TypeStr Len"]
set ptype [ascii $ptypelen "Type"]
hex 6 "???"
sectionvalue "$ptype / $plen Bytes"
set p2len [uint32 "Length"]
incr plen -14
incr plen -$ptypelen
if {$p2len <= $plen} {
hex $p2len "Actual Payload"
move -$p2len
}
hex $plen "Payload"
}
}
entry "File Count" $numfiles

View File

@@ -5,16 +5,46 @@ This is a tool to convert savegames of **The Outer Worlds** from Switch format t
PC (either original or Spacer's Choice Extended version).
Export from Switch
------------------
If you have an unpatched Switch and are running a custom firmware, you can use
FBI or any other savegame manager to export your savegames.
If you're not running a custom firmware, [memloader](https://switchtools.sshnuke.net)
will let you expose your userdata to a PC. You'll also need something like
[ninfs](https://github.com/ihaveamac/ninfs) to mount the encrypted filesystem.
Usage
-----
./convert.py <FOLDERNAME>
This will create a folder `FOLDERNAME_PC` with the converted savegame. Copy this
to the savegame directory of the PC version of the game and remove the `_PC` suffix.
Savegame locations
------------------
Steam Deck Original Version
### Steam Deck Original Version
~/.local/share/Steam/steamapps/compatdata/578650/pfx/drive_c/users/steamuser/Saved Games/The Outer Worlds/
Steam Deck Spacer's Choice
### Steam Deck Spacer's Choice
~/.local/share/Steam/steamapps/compatdata/1920490/pfx/drive_c/users/steamuser/Saved Games/The Outer Worlds Spacers Choice/<Steam User ID>/
HexFiend templates
------------------
I've also included my templates for the [HexFiend](https://hexfiend.com) hex editor. Copy them to the HexFiend templates folder.
The actual savegame files are compressed using zlib. Do decompress, run this command:
cat SaveGame.dat | perl -MCompress::Zlib -E 'undef $/;print uncompress(<>)' > SaveGame.dec.dat
You can then open the `SaveGame.dec.dat` in HexFiend and select the template from the dropdown.