README for Savegame Editor for Snoopy vs. the Red Baron
Modify an existing savegame file for the PC game Snoopy vs. the Red Baron (2006).
tl;dr
./srb.py --profile 1 --unlock-everything --buy-everything ~/"Documents/Snoopy vs. the Red Baron/Profile 1/Profile 1.sav"
Upstream
This project's upstream is at https://bgstack15.ddns.net/cgit/srb_lib/.
Alternatives
None found.
Reason for existence
The author was unable to find any trainer or savegame editor for this game, and I wanted to be able to reset certain elements or cheat and give myself everything. Mostly I wanted "Octo-gun" and I was concerned I wasn't good enough to beat every level (mostly boss levels) with rank General. I did actually beat the game with 100% completion before I finished this tool.
Using
Most capabilities have "set" and "get" parameters. Some have "set" and "add/remove" parameters. To see a full list of commands, run ./srb.py --help
.
Some common examples.
./srb.py --profile 1 --set-name "newname" --file "Profile 1.sav"
./srb.py --profile 1 --set-money 10000 --file "Profile 1.sav"
./srb.py --profile 1 --set-level 5,all --file "Profile 1.sav"
./srb.py --profile 1 --set-level 6,none --file "Profile 1.sav"
./srb.py --profile 1 --set-health 4 --file "Profile 1.sav"
Note that --set-level 5,all
operates three separate parameters that could be done individually:
--set-level-status 5,general
--set-level-balloons 5,all
--set-level-letters 5,all
Individual letter/balloon control is not implemented at this time.
Dependencies
For the library and cli, just python3.
For the graphical frontend:
sudo apt-get install python3-tkinter python3-pil.imagetk
Building
N/A
Design notes
The checksum used is this crc32:
crc width=32 poly=0x4c11db7 init=0x0 xorout=0x235b4b9c refin=false refout=false out_endian=little
Which I only learned through the reverse-engineering efforts of https://github.com/8051Enthusiast/delsum.
Before I learned this, none of this savegame editing was possible.
The binary contents are stored in little-endian, which makes visual inspection of the file in a hexeditor slower.
Graphical frontend
There is an included python tcl/tk frontend:
./srb_tk.py
The tool loads the default "Profile 1.sav" file right away. Clicking any widget effects an immediate change to the checksum. To save the file, you must select "Save" from the menu.
Credits
Unless a graphic was taken from the game, any icons come from icons8.
Main program icon icon by Icons8 Hay Bale icon by Icons8 Barrel icon by Icons8 Geyser icon by Icons8 Pumpkin icon by Icons8 Battery icon by Icons8
License
GPL 3.0. Contributions welcome!
References
- https://bgstack15.ddns.net/blog/posts/2024/03/22/initial-research-for-hacking-savegame-files-for-snoopy-vs-the-red-baron/
- https://bgstack15.ddns.net/blog/posts/2024/03/26/the-checksum-for-the-savegame-file-for-snoopy-vs-the-red-baron
- https://github.com/8051Enthusiast/delsum
- https://gist.github.com/Lauszus/6c787a3bc26fea6e842dfb8296ebd630
- https://stackoverflow.com/questions/46109815/reversing-the-byte-order-of-a-string-containing-hexadecimal-characters
- Walkthrough for Snoopy vs. the Red Baron
Too many to list here. See the References heading in each file for more.