Reported symptom: Abandon, New, Record, Start, First and Last all unclickable.
That Abandon was in the list is what identified it — Abandon is deliberately
unwired, so if it behaved the same as the others the cause could not be wiring.
UiButton read authored property 0x0D as "starts disabled" (Enabled = !0x0D).
It was the one property read in that file with no citation, and it was wrong.
Every button on the Journal panel authors 0x0D, so every one built disabled:
visible, because drawing never consults Enabled, and unclickable, because
UiElement.HitTest skips disabled elements. Exactly the reported shape.
The evidence is a sweep of every installed layout (LayoutDump gained --ghosted
for it): 85 elements author 0x0D and ALL 85 author it TRUE — not one False
anywhere in the client — and no panel ever clears it, the only four
SetAttribute_Bool(.., 0xd, ..) sites in the binary being chargen appearance,
the keymap option and the barber. A flag that is only ever true, never cleared,
and sits on New, Record, Start, Delete and Reset cannot mean "dead button";
under the old reading 85 elements were permanently dead in a shipping game.
It is not a pure ghosted LOOK either, which is why this ignores it rather than
moving it to appearance: the same 85 mix live buttons with inert column headers
("Contract", "Status", "Title", "Timer", "Label", "#"), and one appearance
cannot be right for both. Registered as QJ-2 with the measurement, so the open
question is recorded rather than quietly decided.
The test that asserted the old behaviour carried no citation either — it
encoded the same assumption. It now asserts the evidenced behaviour, with a
companion test proving the state machine's own Ghosted transition still
suppresses a click: that mechanism is separate and did not change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| A8CellAudit | ||
| AnimHookScan | ||
| cdb | ||
| cdb-scripts | ||
| diag-logs | ||
| dump-keymap | ||
| ghidra_project | ||
| IconForge | ||
| InspectCoatTex | ||
| jsonl | ||
| LayoutDump | ||
| MosswartArt | ||
| pdb-extract | ||
| PesChainAudit | ||
| ProjectileVfxAudit | ||
| RainMeshProbe | ||
| RetailTimeProbe | ||
| SetupInspect | ||
| ShaderCompiler | ||
| SkyObjectInspect | ||
| SpellDump | ||
| StarsProbe | ||
| TextureDump | ||
| WeatherEnumerator | ||
| WeatherSetupProbe | ||
| analyze_265_steep_slope_capture.py | ||
| analyze_269_slope_stop_capture.py | ||
| analyze_resolve_capture.py | ||
| audit-test-inventory.ps1 | ||
| CampaignLaProcessCorrelation.ps1 | ||
| capture-campaign-la-session-process.ps1 | ||
| compile-shaders.ps1 | ||
| connected-dense-town.route.txt | ||
| connected-r6-soak.route.txt | ||
| connected-world-lifecycle.route.txt | ||
| connected-world-reconnect.route.txt | ||
| decompile_acclient.py | ||
| decompile_full.py | ||
| DecompileTargets.java | ||
| ghidra_decompile.py | ||
| new-campaign-la-update-fixture.ps1 | ||
| publish-bin.ps1 | ||
| README.md | ||
| run-blank-world-ab-probe.ps1 | ||
| run-blank-world-surface-probe.ps1 | ||
| run-campaign-la-preflight.ps1 | ||
| run-connected-loss-gate.ps1 | ||
| run-connected-r6-soak.ps1 | ||
| run-connected-world-lifecycle-gate.ps1 | ||
| run-offline-pixel-gate.ps1 | ||
| run-offline-vulkan-capture.ps1 | ||
| run-portal-churn-soak.ps1 | ||
| run-release-gate.ps1 | ||
| run-repeat-connected-gate.ps1 | ||
| test-campaign-la-gate-helpers.ps1 | ||
| test-campaign-la-script-safety.ps1 | ||
| test-campaign-la-session-status.ps1 | ||
| update-package-locks.ps1 | ||
| verify_un2_fmul.py | ||
Maintained .NET tools
Every .csproj under tools/ is part of AcDream.slnx. The complete Release
gate restores and builds these tools, so a missing personal checkout or an API
change cannot leave a tracked tool silently broken. They are diagnostic/manual
programs: the gate builds them but does not run data-dependent investigations.
| Tool | Purpose | Runtime prerequisite |
|---|---|---|
A8CellAudit |
Inspect landblock, EnvCell, portal, and collision topology. | Installed AC DAT files / the arguments documented by the program. |
dump-keymap |
Extract the retail master input maps and decoded actions. | Installed client_portal.dat. |
PesChainAudit |
Walk weather PES call chains and particle emitters. | Installed AC DAT files. |
ProjectileVfxAudit |
Audit projectile physics-script and particle-emitter VFX mappings. | Installed AC DAT files. |
RainMeshProbe |
Inspect rain surfaces, polygon sidedness, and generated mesh counts. | Installed AC DAT files. |
RetailTimeProbe |
Read retail time-of-day and sky state for comparison. | Windows, a running retail client, and process-read access. |
SetupInspect |
Dump Setup parts, placement poses, and animation frames. | Installed AC DAT files and a Setup ID. |
ShaderCompiler |
Compile the Vulkan GLSL shader set to committed SPIR-V. | Source and output directory arguments. |
SkyObjectInspect |
Inspect Dereth sky/day-group objects and texture data. | Installed AC DAT files. |
StarsProbe |
Audit sky-object geometry, UV ranges, and surfaces. | Installed AC DAT files. |
TextureDump |
Dump render-surface statistics and texture images. | Installed AC DAT files. |
WeatherEnumerator |
Enumerate weather sky objects and their bounds. | Installed AC DAT files. |
WeatherSetupProbe |
Inspect the parts and surfaces of weather Setups. | Installed AC DAT files. |
Build the complete maintained graph with:
dotnet restore AcDream.slnx --locked-mode --force-evaluate
dotnet build AcDream.slnx -c Release --no-restore
Use pwsh ./tools/run-release-gate.ps1 for the authoritative bounded gate.
Package versions and lock-file maintenance are documented in
docs/release-gate.md.