Files
skate-3-rust-engine/tools/vault-inspect/find_field.py
T
Hails 418dcecd41 Audio: interim cue tables retired, native water splash, published tools
- The interim cue tables and their opt-outs are gone; the native runtime is the only audio path. Old
  settings/audio.json files still load ("interim" / "native" ignored). Missing native data logs an error
  instead of falling back.
- Water splash from retail's mechanism (SFXObj_OffBoard start / update): Skate_Collisions 1187 / 1197 once
  per water stay, 1198 when the board is in water.
- The random interim riding bed is removed; riding collision and cloth sounds compared with the recomp
  (doc 11). Native output otherwise byte-identical (13 scenarios + 5 sessions).
- Published tools under tools/ (one folder per tool with a README; the recomp ones labelled for use with the
  research hooks), doc 14 and PR plan bucket L.
- Docs: doc 11 (retirement, bail density measured against the recomp, collision posts), doc 13 (usage guide).
2026-10-03 10:20:08 -06:00

36 lines
1.5 KiB
Python

"""Find vault field hashes in the install's converted database (skater-collections.json): prints class,
collection, field, type and the decoded value (big-endian float or int for 4-byte values) of every hit.
usage: py -3.13 tools/vault-inspect/find_field.py HASH [HASH ...] [--vault JSON]
HASH: 16 hex digits, with or without Hash_.
--vault defaults to assets/private/stock/skater-collections.json (written by setup).
"""
import argparse
import json
import struct
from pathlib import Path
DEFAULT = Path(__file__).resolve().parents[2] / 'assets/private/stock/skater-collections.json'
def main():
parser = argparse.ArgumentParser(description='Find vault field hashes in skater-collections.json.')
parser.add_argument('hashes', nargs='+', help='16 hex digits, with or without Hash_')
parser.add_argument('--vault', type=Path, default=DEFAULT, help='converted database (default: %(default)s)')
args = parser.parse_args()
want = {('Hash_' + h.replace('Hash_', '').upper().zfill(16)) for h in args.hashes}
for c in json.loads(args.vault.read_text())['collections']:
for w in want & set(c['fields']):
v = c['fields'][w]
h = ''.join(v.get('data', '').split())
val = h
if 'Float' in v['type'] and len(h) == 8:
val = struct.unpack('>f', bytes.fromhex(h))[0]
elif len(h) == 8:
val = struct.unpack('>i', bytes.fromhex(h))[0]
print(c['class'], c['key'], w, v['type'], val)
if __name__ == '__main__':
main()