diff options
-rw-r--r-- | README.md | 74 | ||||
-rwxr-xr-x | srb.py | 14 | ||||
-rw-r--r-- | srb_lib.py | 2 |
3 files changed, 86 insertions, 4 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..44c2d90 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +<!-- +.. File: README.md +.. Location: https://bgstack15.ddns.net/cgit/srb_lib +.. Author: bgstack15 +.. SPDX-License-Identifier: GPL-3.0-only +.. Startdate: 2024-03-20-4 10:14 +.. Title: Readme for savegame editor for Snoopy vs. the Red Baron +.. Project: srb_lib +.. Purpose: Read it. +.. Usage: Read it. +.. Reference: See heading References +.. Improve: +.. Documentation: Read it. +--> + +# 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)](https://en.wikipedia.org/wiki/Snoopy_vs._the_Red_Baron_(video_game). + +# 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,done --file "Profile 1.sav" + ./srb.py --profile 1 --set-health 4 --file "Profile 1.sav" + +Note that `--set-level 5,done` 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 +Just python3. + +## 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. + +## 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](https://gamefaqs.gamespot.com/pc/930591-snoopy-vs-the-red-baron/faqs/46161) @@ -1,15 +1,21 @@ #!/usr/bin/env python3 +# File: srb.py +# Location: https://bgstack15.ddns.net/cgit/srb_lib +# Author: bgstack15 +# SPDX-License-Identifier: GPL-3.0-only # Startdate: 2024-03-08-6 15:28 -# File: srb_lib.py +# Title: Frontend for savegame editor for Snoopy vs. the Red Baron +# Project: srb_lib # Purpose: frontend for srb_lib # History: # Usage: # tl;dr: ./srb.py --profile 1 --unlock-everything --buy-everything "Profile 1.sav" # Reference: -# blog posts 2024-03 -# delsum from github # bgconf.py -# WORKHERE: still some confusion around the --unlock-everything --lock-everything and the levelset available levels. +# Improve: +# still some confusion around the --unlock-everything --lock-everything and the levelset available levels. +# Documentation: README.md +# Dependencies: import srb_lib, argparse, sys from srb_lib import ferror, debuglev @@ -19,6 +19,8 @@ # Fuctions that worked: <https://gist.github.com/Lauszus/6c787a3bc26fea6e842dfb8296ebd630> Author: Lauszus # <https://stackoverflow.com/questions/46109815/reversing-the-byte-order-of-a-string-containing-hexadecimal-characters> # <https://gamefaqs.gamespot.com/pc/930591-snoopy-vs-the-red-baron/faqs/46161> +# Improve: +# test all functions after trying '<1I' for unsigned int # Documentation: # winetricks vd=1024x768 # winetricks vd=off |