A complete step-by-step guide on how to transfer a co-op save to another user while retaining all progress.
The process will require some collaboration between both parties.
The entire process takes about 15 minutes.
Note
So far I've only tested it with 2 players
Game version tested with v0.1.3.0
- Download and install Notepad++ (Highly recommended)
Note
This can be any other editor that can handle large documents and provides the ability to Search & Replace all occurrences in a file
- Download and install the latest version of Python
Important
During installation, make sure to select the Add python X.X to PATH
checkbox
- Download and extract palworld-save-tools by cheahjs
Caution
Any version older than v0.4
will create corrupt Level.sav
files when converting from JSON to SAV
The save directory can be located at the following path
C:\Users\%username%\AppData\Local\Pal\Saved\SaveGames\<YourSteamID>
This directory will contain all of your Palworld saves including the ones from the worlds you've visited.
If you see more than one save, the simplest way to identify the correct one is by loading it in the game, saving it and then sorting the directories by 'Date modified'
, the latest should be the one.
Important
Manually backup your entire save to avoid losing it to data corruption
Tip
To simplify the process as much as possible, avoid collisions and having to repeat the process from the start, I highly recommend sticking to my naming conventions
- Create a new folder anywhere where it is convenient for you and name it
Work
- Inside the
Work
folder create a new folder and name itJSON_backup
- Inside the
Work
folder create a new text document and name itGuid
In this step both parties have to cooperate in order to retrieve some values which will be crucial in the following steps
Note
Host - refers to the current host
Client - refers to the current client
The same naming convention will be maintained throughout the entire procedure
- Create a new world with multiplayer enabled and wait for the Host to join
- After the Host joins, save and exit the game
- Follow Step 1 to locate the new world's save
- Open the new world's
Players
folder, there should now be two.sav
files one of which is named000...001.sav
, that's your file - Share with the Host the name of their player file
- Join the Client in their newly created world
- Wait for the Client to provide you with the name of your player file
- Paste the file name in the
Guid
text document - On the next line write down the first 8 characters of the file name in lower case
followed by
-0000-0000-0000-000000000000
- On the next line Create a new value from the previous value stripped of the
-
characters - Open the
Players
folder, there you should see at least 2 files,000...001.sav
is your file- If there are more than 2 files inside, follow the Client's instructions to figure out how to acquire their file name
- Repeat instructions 3 through 5 for the Client's file name
- Name the values you've just created
Host_name
,Host_guid
,Host_group
,Client_name
,Client_guid
andClient_group
respectively
If both parties did everything correctly you should end up with a text document that contains 6 values with their associated names similar to this:
B8222BF0000000000000000000000000 Host_name
b8222bf0-0000-0000-0000-000000000000 Host_guid
b8222bf0000000000000000000000000 Host_group
F632C4E9000000000000000000000000 Client_name
f632c4e9-0000-0000-0000-000000000000 Client_guid
f632c4e9000000000000000000000000 Client_group
The values above are meant to serve as an EXAMPLE only, using them will corrupt your save
- Paste the following instructions in your
Guid
text document and format them swapping the variables with their associated values
1. SEARCH -> ("value": "00000000-0000-0000-0000-000000000001") 1. REPLACE -> ("value": "Host_guid")
2. SEARCH -> ("value": "Client_guid") 2. REPLACE -> ("value": "00000000-0000-0000-0000-000000000001")
3. SEARCH -> (_uid": "00000000-0000-0000-0000-000000000001") 3. REPLACE -> (_uid": "Host_guid")
4. SEARCH -> (_uid": "Client_guid") 4. REPLACE -> (_uid": "00000000-0000-0000-0000-000000000001")
5. SEARCH -> ("group_name": "00000000000000000000000000000001") 5. REPLACE -> ("group_name": "Host_group")
6. SEARCH -> ("group_name": "Client_group") 6. REPLACE -> ("group_name": "00000000000000000000000000000001")
7. SEARCH -> ([\r\n "00000000-0000-0000-0000-000000000001") 7. REPLACE -> ([\r\n "Host_guid")
8. SEARCH -> (,\r\n "00000000-0000-0000-0000-000000000001") 8. REPLACE -> (,\r\n "Host_guid")
Caution
Additional formatting may be required if your editor does not recognize \r\n
as a line break
Your Guid
text document is now in its complete state and should look similar to this:
B8222BF0000000000000000000000000 Host_name
b8222bf0-0000-0000-0000-000000000000 Host_guid
b8222bf0000000000000000000000000 Host_group
F632C4E9000000000000000000000000 Client_name
f632c4e9-0000-0000-0000-000000000000 Client_guid
f632c4e9000000000000000000000000 Client_group
1. SEARCH -> ("value": "00000000-0000-0000-0000-000000000001") 1. REPLACE -> ("value": "b8222bf0-0000-0000-0000-000000000000")
2. SEARCH -> ("value": "f632c4e9-0000-0000-0000-000000000000") 2. REPLACE -> ("value": "00000000-0000-0000-0000-000000000001")
3. SEARCH -> (_uid": "00000000-0000-0000-0000-000000000001") 3. REPLACE -> (_uid": "b8222bf0-0000-0000-0000-000000000000")
4. SEARCH -> (_uid": "f632c4e9-0000-0000-0000-000000000000") 4. REPLACE -> (_uid": "00000000-0000-0000-0000-000000000001")
5. SEARCH -> ("group_name": "00000000000000000000000000000001") 5. REPLACE -> ("group_name": "b8222bf0000000000000000000000000")
6. SEARCH -> ("group_name": "f632c4e9000000000000000000000000") 6. REPLACE -> ("group_name": "00000000000000000000000000000001")
7. SEARCH -> ([\r\n "00000000-0000-0000-0000-000000000001") 7. REPLACE -> ([\r\n "b8222bf0-0000-0000-0000-000000000000")
8. SEARCH -> (,\r\n "00000000-0000-0000-0000-000000000001") 8. REPLACE -> (,\r\n "b8222bf0-0000-0000-0000-000000000000")
The values above are meant to serve as an EXAMPLE only, using them will corrupt your save
After verifying and confirming that you've replaced the variables with their correct values, you may save and close the Guid
file, we'll return to it shortly
- Copy the following files into the
Work
folder
Level.sav
Players\000...001.sav
Players\Client_Guid.sav
- Drag and drop the copied files one by one onto the
convert-single-sav-to-json.bat
file in thepalworld-save-tools
directory
Warning
Converting Level.sav
to JSON may take some time and will produce a large file of ~2GB
- Copy the newly generated JSON files from the
Work
folder into theJSON_backup
folder
Tip
This backup will serve as a fallback point for you to avoid repeating the conversion process should anything go wrong
Using the text editor of your choice, open the newly generated player.sav.json
files from the Work
folder
- Replace all occurrences of
00000000-0000-0000-0000-000000000001
withHost_guid
- Save and close the file
- Replace all occurrences of
Client_guid
with00000000-0000-0000-0000-000000000001
- Save and close the file
Using the text editor of your choice, open the newly generated Level.sav.json
file from the Work
folder
Caution
The following actions must be performed in the exact order they're listed in to avoid collisions
- 1..8. Open the
Guid
text document and follow your own personalized instructions searching for all occurrences and replacing them with their corresponding values between(
and)
- Find and replace ONLY THE FIRST occurrence of
00000000-0000-0000-0000-000000000001
withHost_guid
Caution
Only applicable if the host has not been changed previously! see notes1
- Replace ALL occurrences of
Client_guid
with00000000-0000-0000-0000-000000000001
- Save and close the file
Now with the tedious part out of the way, there are just a few simple steps left
- Convert the edited JSON files back to SAV by dragging them one by one onto the
convert-single-json-to-sav.bat
file in thepalworld-save-tools
directory - Rename the newly generated
000...001.sav
file toHost_name.sav
- Rename the newly generated
Client_name.sav
file to00000000000000000000000000000001.sav
- Replace the old files in your save folder with their edited versions
Lastly, the contents of the save folder should be transferred to the new Host and dropped into the save folder
Note
To retain the map data, both parties should keep their LocalData.sav
files
Note
Both the host and the client might have to disable steam cloud to load the save for the first time
If the original Host attempts to load the save
- The Host will take over the Client's character and progress
- The Client will be prompted with the character creation screen
If the Client attempts to load the save
- Both the Client and the Host will retain their own characters and progress
If you managed to follow me to this point then Congratulations!
You have successfully swapped roles, characters and progress with the second party.
Huge thanks to cheahjs for making this possible!
Footnotes
-
If the host has been changed previously, you can no longer rely on their struct's position in the save file, you'll have to manually locate the user's struct using their NickName or InstanceID which can be found in their player file, the GUID will be located at the top of the struct ↩