re: all 24 settings objects named -- stage\StageParameter_S<NN>.tbl
The queued item (the 29-object resource manifest) turned out to be already settled by challenge-mission-gate.md and stage-mission-tables.md, so the iteration moved to the open question those docs make answerable. Hashing EVERY string that appears in any IDXD object on the disc resolves all 24: StageParameter_S01..S16 (story), S24..S29 (challenge), StageParameter_ Tutorial shared by all six tutorials, and StageParameter_Test. 16+6+1+1 = 24, which is exactly why the settings family is 24 against 29 stage records. IsBoss16Enable confirmed independently: that object is StageParameter_S16. GravityFactor is non-zero in S10 (700), S11 (400), S03 (250), S27 (250); the three unscored objects are S24, S27, S28; the one without SplinterCell is _Test. Refuted on the way: TOC order is not stage order (the TOC is hash-sorted and the Boss16 object is 17th, not 16th), and neither the StageResource template nor a real 19-field record names the settings table. The AUTO_SETTINGS filenames are a different scheme -- none of the 28 hashes to any of these 24. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -98,6 +98,32 @@ def main():
|
||||
except Exception:
|
||||
pass
|
||||
full.sort()
|
||||
# name every settings object: harvest all IDXD strings and hash them
|
||||
harvest = set()
|
||||
for pp in sorted(glob.glob(os.path.join(DAT, '**', '*.pak'), recursive=True)):
|
||||
for _, s2 in pak_entries(pp):
|
||||
if s2[:4] != b'IDXD':
|
||||
continue
|
||||
try:
|
||||
for r in U.parse(s2):
|
||||
for _, nm, v in r['fields']:
|
||||
harvest.add(v)
|
||||
except Exception:
|
||||
pass
|
||||
want = {h for h, _ in tables}
|
||||
named = {}
|
||||
for c in harvest:
|
||||
if not c or len(c) > 90:
|
||||
continue
|
||||
for pre in ('', 'stage\\', 'message\\'):
|
||||
hh = U.name_hash(pre + c)
|
||||
if hh in want:
|
||||
named.setdefault(hh, pre + c)
|
||||
print()
|
||||
print('settings objects named from harvested disc strings: %d/%d' % (len(named), len(want)))
|
||||
for h in sorted(named, key=lambda k: named[k]):
|
||||
print(' %#010x %s' % (h, named[h]))
|
||||
|
||||
print()
|
||||
print('the rest of the settings object (%d objects):' % len(full))
|
||||
shapes = collections.Counter(tuple(sorted(d)) for _, d in full)
|
||||
|
||||
Reference in New Issue
Block a user