README, gitignore and HexFiend templates
Signed-off-by: Markus Birth <markus@birth-online.de>
This commit is contained in:
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
.DS_Store
|
||||
Metadata.dat
|
||||
SaveGame.dat
|
||||
SaveGame.dec.dat
|
||||
SavedState.dat
|
||||
SavedState.dec.dat
|
||||
SaveGameScreenshot.png
|
||||
34
HexFiend Templates/The Outer Worlds (zlib).tcl
Normal file
34
HexFiend Templates/The Outer Worlds (zlib).tcl
Normal 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
|
||||
55
HexFiend Templates/The Outer Worlds Metadata.tcl
Normal file
55
HexFiend Templates/The Outer Worlds Metadata.tcl
Normal 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 "???"
|
||||
35
HexFiend Templates/The Outer Worlds Switch (zlib).tcl
Normal file
35
HexFiend Templates/The Outer Worlds Switch (zlib).tcl
Normal 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
|
||||
34
README.md
34
README.md
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user