docs: close #189 (fountain water spray) — user visual gate passed

"Fountain is back! We can close it." Root cause was #190 (entity-id
overflow), not the light-carrier hydration fix directly. Moved to
Recently closed with the mechanism summary; the candle-flame
identification sub-thread is noted as an unraised residual rather than
a new open issue, since the user didn't re-flag it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-09 12:44:13 +02:00
parent 6e034ac610
commit 754b299f7a

View file

@ -46,62 +46,6 @@ Copy this block when adding a new issue:
---
## #189 — Ambient particle scripts (fountain water, possibly candle flames) don't render indoors
**Status:** 🟡 LIKELY FIXED (`e651cb6d`, #190) — pending final user visual re-confirmation
**Severity:** MEDIUM
**Filed:** 2026-07-09
**Component:** rendering — particles / PhysicsScript
**Description:** In the Town Network fountain room (`0x00070144`), the fountain
has no visible water-spray particle effect. User also reported missing candle
flames in the same area (unconfirmed which object(s) those are — see Root
cause below).
**Root cause / status:** NOT the A7.L1 mesh-empty hydration gate itself
(`EntityHydrationRules.ShouldKeepEntity`) — directly refuted via dat-truth
(`Issue93TownNetworkFountainRoomLightInspectionTests.
FountainAndCandleSetup_DefaultScriptAndMeshSurvivorCount_Dump`): the fountain's
Setup (`0x02000AA3`) has a surviving mesh part (not dropped) AND a real
`DefaultScript.DataId = 0x33000B21` (almost certainly the water-spray
PhysicsScript) — hydration itself was fine.
**Found instead (via revert-test, per user request): #190, an entity-id
overflow the light fix triggered as a SIDE EFFECT.** The mesh-carrier fix
kept ~394 more entities alive per landblock, pushing the Town Network's
interior-entity counter from 248 to 277 — past the id scheme's 8-bit budget
(`ACDREAM_DUMP_ENTITY=0x02000AA3` showed the fountain's `entity.Id` shift from
`0x400007F8` to `0x40000815`, misdecoding as landblock Y=0x08 instead of the
true Y=0x07). `EntityScriptActivator` keys script/particle tracking on
`entity.Id` directly, so the aliased id broke the fountain's script tracking.
Fixed by `#190` (widened the id counter 8→12 bits). Post-fix,
`ACDREAM_DUMP_ENTITY` confirmed the fountain's id (`0x40007115`) decodes
correctly again — **not yet re-confirmed visually by the user** (session moved
on to an FPS question, then a movement bug, before the fountain was re-checked).
The guessed "candle" objects (`0x02001967`, 16 arranged around the fountain)
turned out to have real mesh and `DefaultScript == 0` — they are NOT candles
and carry no script at all, so the actual candle-flame source objects are
still unidentified; that part of this issue stays open regardless of #190.
**Next steps:**
1. Get the user's visual confirmation that the fountain water spray is back.
2. Identify the real candle-flame source objects in this room (not
`0x02001967`) before assuming they share a root cause with the fountain.
**Files:**
- `src/AcDream.App/Rendering/Vfx/EntityScriptActivator.cs`
- `src/AcDream.Core/World/InteriorEntityIdAllocator.cs` (the #190 fix)
- `src/AcDream.App/Streaming/GpuWorldState.cs` (DefaultScript fire/stop sites)
- `src/AcDream.Core/Vfx/ParticleHookSink.cs`
- `tests/AcDream.Core.Tests/Rendering/Issue93TownNetworkFountainRoomLightInspectionTests.cs` (dat-truth apparatus, reusable)
**Acceptance:** The Town Network fountain shows a water-spray particle effect
matching retail; candle/torch flame sources in the same room are identified
and render correctly.
---
## #191 — Tapping W (brief forward press) glides forward without playing the step animation
**Status:** OPEN
@ -7401,6 +7345,23 @@ outdoors at the angle that previously erased it.
# Recently closed
## #189 — Ambient particle scripts (fountain water, possibly candle flames) don't render indoors
**Status:** DONE (2026-07-09, user visual gate passed — "Fountain is back! We
can close it"). Root cause was NOT the A7.L1 mesh-carrier hydration fix itself
(the fountain's Setup `0x02000AA3` always had a surviving mesh part + a real
`DefaultScript.DataId`) — it was `#190`, an entity-id overflow that fix
triggered as a side effect (see `#190` below for the full mechanism). Fixed by
`e651cb6d`; `ACDREAM_DUMP_ENTITY` confirmed the fountain's id decodes
correctly post-fix, and the user confirmed the water spray visually. **Residual
note, not re-raised by the user, kept for a future session:** the guessed
"candle" objects (`0x02001967`, 16 arranged around the fountain) turned out to
have real mesh and `DefaultScript == 0` — not candles, no script at all — so
if candle-flame absence resurfaces, the actual source objects in this room are
still unidentified.
---
## #190 — Interior entity id counter overflowed past its 8-bit budget, aliasing into the next landblock
**Status:** DONE (2026-07-09, `e651cb6d`). Found while investigating #189