Worker w-texdbkey-a1; task texdbkey; research (read-only RE). Read .agent-cache/WORKER.md. Bus: python "%USERPROFILE%/.claude/skills/agent-cache-orchestrator/scripts/acbus.py" Parallel: w-cvartable-a1 reads the same image read-only. Astra workers on another host are idle pending a runtime test. Stay in your lane.
Objective
Find the TexDB lookup key. This is now the LAST unsolved format blocker for custom textures in Wolfenstein II - everything around it fell today.
Answer with code evidence:
- How does the engine turn an
imageresource into a TexDB lookup? Which function, which key, which input? - Can a renamed or newly added image be given a key that resolves? If yes, the derivation. If no, exactly what stops it.
What is already measured - build on it, do not redo it
re_probes/agent_reports/texdb_rewrite.md: the .texdb is a flat key/offset database with NO asset names in it. Header, table and payload are gapless. chunk_24.texdb is ~1 GB, 8586 entries. Names cannot be rewritten there.- REFUTED today, do not build on it: the rule "texdb key = hash_0x60 << 4 |
level" from an earlier worker. w-datahash-a1 measured it over ALL 24
base/*.texdb (24713 distinct
key>>4): chunk_8 4/138, gameresources 650/12194, chunk_1 38/732, chunk_16 20/357 - about 5 %, not 100 %. Control:+0x50matches in 0 cases. Evidence in re_probes/datahash/hash60_survey.txt. - The 1:1 mapping does exist (chunk_8.texdb: 106 ids for 107
$streamedimages), so there IS a rule - the old one just is not it. entry+0x60forimageentries is a value assigned by the build tool. No reader recomputes it (all 13 read sites compare against another stored field, see re_probes/agent_reports/datahash.md). It may still be an INPUT to the key.- The level/mip part of the old rule may well be right; it is the other half that fails. Test the halves separately.
Sources / starting points
- re_probes/runtime_87400/module.bin - read-only capture of the RUNNING, SteamStub-unpacked NewColossus_x64vk.exe. Virtual RVA layout: file offset == RVA. Sections and image base in manifest.json. .pdata gives function bounds.
- Follow the method that worked five times today: go through the code, not
through hash sweeps over data. Read re_probes/agent_reports/idclhash.md and
datahash.md first - they hand you the container parser
(
idResourceStorage::OpenContainer0xACB780-0xACC441), the payload reader (ReadResourceData0xACD7C0-0xACDCFD), FarmHash64 at 0x1363B80 and MurmurHash64B at 0x12BB970. The texture path very likely branches off near ReadResourceData or the streaming path at 0xACD8DB. - Error/usage strings in .rdata mentioning texdb / texture / streamed, and their xrefs, are a second way in.
- tools/probe_texdb.py (read-only) can already parse header, offsets and
streams. tools/probe_datahash.py has a working
murmur64band the hash60 survey code. Reuse rather than rewrite. - capstone 5.0.7 vendored: PYTHONPATH=re_probes/python_deps python ...
- Corpus, READ ONLY:
/steamapps/common/Wolfenstein.II.The.New.Colossus
Ownership
tools/probe_texdbkey.py (new), re_probes/texdbkey/ (new dir), re_probes/agent_reports/texdbkey.md (new).
Forbidden / do not touch
No game launch, no process attach, no writes under the Steam install or "%USERPROFILE%/Saved Games". Do not touch other workers' files: tools/probe_idclhash.py, tools/probe_datahash.py, tools/probe_cmdtable.py, tools/probe_saveverify.py, tools/probe_cvartable.py, tools/probe_texdb.py, tools/tnc_.py, tools/vtpixel.py, re_probes/{idclhash,datahash,cmdtable,saveverify,cvartable,vtrest,map_alias_v3}/, docs/, wolfsdk/*, config.json. No pip install.
Hard constraints
Python 3.11, stdlib plus vendored capstone. Reproducible from the command line, no running game required.
Acceptance criteria
- Positive control at today's bar: reproduce the stored key for a large sample of real image entries across at least three different .texdb, and state the count as n/n. 5 % is a coincidence, 100 % is a rule.
- Negative controls: the derivation must fail on a wrong mip level, a wrong input field, and a deliberately altered name or hash.
- If the key turns out to be assigned by the build tool with no derivable rule, say so - and then answer the practical question instead: can a custom entry simply REUSE an existing retail key, and what breaks if two entries share one? That answer is worth as much as the derivation.
Verification expectations
Every important assurance needs a check designed to fail if it is false. A rule that matches 5 % is not a rule; the refuted hypothesis above is exactly what that looks like, so calibrate against it. Keep "key found in the table" and "key computed from the resource" strictly apart.
Failure honesty
A clean negative with the exact obstacle is a good result. Report failed hypotheses with their hit rates, the way hash60_survey.txt does.
Coordination / deliverable
Checkpoint at milestones. Publish a bus fact when the verdict is known - textures are the last format blocker, so both masters want this. Concise German report in re_probes/agent_reports/texdbkey.md. Finish the bus task when done.