aboutsummaryrefslogtreecommitdiff

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.

Screenshot of profile selection screen showing three names: "Hexedit," "4fun and," and "Profit."

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.

Screenshot of graphical savegame editor

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

  1. https://bgstack15.ddns.net/blog/posts/2024/03/22/initial-research-for-hacking-savegame-files-for-snoopy-vs-the-red-baron/
  2. https://bgstack15.ddns.net/blog/posts/2024/03/26/the-checksum-for-the-savegame-file-for-snoopy-vs-the-red-baron
  3. https://github.com/8051Enthusiast/delsum
  4. https://gist.github.com/Lauszus/6c787a3bc26fea6e842dfb8296ebd630
  5. https://stackoverflow.com/questions/46109815/reversing-the-byte-order-of-a-string-containing-hexadecimal-characters
  6. Walkthrough for Snoopy vs. the Red Baron

Too many to list here. See the References heading in each file for more.

bgstack15