Restructure into multi-game UltraWidePatches umbrella
Generalize the project from a single GB4 fix into a collection that can host
ultrawide patches for many games.
- games/<Game>/{SUWSF.ini,game.conf,README.md}; GB4 moved in as the first entry
- game.conf carries all game-specific data (appid, exe, paths, loader, launch
option), so install.sh is fully generic: ./install.sh <Game> [uninstall]
- installer gains GAME_DIR / PREFIX_INI_FILE / LOADER_NAME overrides; verified
install -> idempotent re-run -> uninstall leaves the tree pristine
- tools de-hardcoded: dump_decrypted.py takes an exe name, read_protonlog.sh
takes an appid, aob.py takes a dump + game ini, build_release.sh takes a game
- README rewritten as an umbrella index with an "adding a game" guide
- LICENSE copyright -> programmingPug
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+7
-8
@@ -1,21 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify (or derive) SUWSF AOB patterns against a decrypted GB4 dump.
|
||||
"""Verify (or derive) SUWSF AOB patterns against a decrypted game dump.
|
||||
|
||||
- Reads patch/SUWSF.ini, extracts every [Patch:*] Pattern, and reports how many
|
||||
- Reads a game's SUWSF.ini, extracts every [Patch:*] Pattern, and reports how many
|
||||
matches each has in the dump produced by dump_decrypted.py.
|
||||
- 1 clean match -> pattern is good, ship it.
|
||||
- 0 matches -> pattern needs deriving for GB4 (see notes printed).
|
||||
- 0 matches -> pattern needs deriving for this game (see notes printed).
|
||||
- many matches -> pattern too loose; tighten or set Match to a specific index.
|
||||
|
||||
Usage:
|
||||
python3 tools/aob.py [dump.bin] [SUWSF.ini]
|
||||
python3 tools/aob.py <dump.bin> [games/<Game>/SUWSF.ini]
|
||||
"""
|
||||
import re, sys, os
|
||||
|
||||
DUMP = sys.argv[1] if len(sys.argv) > 1 else \
|
||||
"/tmp/claude-1000/-home-ckoch-Documents-Development-BG4-UltraWide-fix/1a8ebba4-6fbe-45ae-a873-0e69d867e0db/scratchpad/gb4dump/gb4_decrypted.bin"
|
||||
DUMP = sys.argv[1] if len(sys.argv) > 1 else ""
|
||||
INI = sys.argv[2] if len(sys.argv) > 2 else \
|
||||
os.path.join(os.path.dirname(__file__), "..", "patch", "SUWSF.ini")
|
||||
os.path.join(os.path.dirname(__file__), "..", "games", "GundamBreaker4", "SUWSF.ini")
|
||||
|
||||
|
||||
def parse_pattern(pat):
|
||||
@@ -65,7 +64,7 @@ def load_patches(ini_path):
|
||||
|
||||
|
||||
def main():
|
||||
if not os.path.exists(DUMP):
|
||||
if not DUMP or not os.path.exists(DUMP):
|
||||
print(f"[!] dump not found: {DUMP}\n Run tools/dump_decrypted.py while the game is running.")
|
||||
sys.exit(1)
|
||||
data = open(DUMP, "rb").read()
|
||||
|
||||
Reference in New Issue
Block a user