Captures all the "this looks wrong" findings from the Phase 5 visual
verification and assigns each to a future phase. Top-of-document is
phases done, then phases ahead in suggested order, then a quick
lookup table that maps user complaints to their owning phase.
Phases ahead:
6 Animation system (creature poses, walk/attack motions, breathe-idle)
7 Multi-floor interiors + dungeons (second floors, foundry interior,
subterranean rooms)
8 Player input → server (movement, interact, ack pump, combat)
9 Visual polish (portals, mesh-origin offsets, exact palette ranges,
lighting/shadows)
10 UI / HUD (chat, inventory, character panel, spellbook, minimap)
11 Sound (SoundTable, audio engine, 3D positional audio)
12 Streaming + perf (chunked landblock loading, frustum culling, LOD,
background net thread)
Each phase entry has: what it owns, what it requires, references in the
existing references/ tree, and rough effort estimate.
Document is intentionally a living roadmap — updated whenever a phase
lands or when a new defect is observed that doesn't fit the existing
buckets.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8.5 KiB
acdream — phase roadmap
Status: Living document. Updated 2026-04-11 after Phase 5 visual verification. Purpose: Every observed defect and missing feature has a named phase that owns it. When something looks wrong, look here first to find which phase will fix it.
Phases done
| Phase | What landed | Verification |
|---|---|---|
| 1 | Terrain rendering, plugin host scaffold | Visual ✓ |
| 2a | Static stabs/buildings (126 entities) | Visual ✓ |
| 2b | Textured 3×3 landblock grid + FlyCamera + IGameState | Visual ✓ |
| 2c | Procedural scenery (419 trees/rocks/bushes) | Visual ✓ |
| 2d | Interior EnvCell walker (475 static interior objects) | Visual ✓ |
| 3a/3b | Directional sun lighting + per-vertex terrain normals | Visual ✓ |
| 3c | Per-cell terrain texture blending (alpha atlas) | Visual ✓ |
| 4 | Full UDP codec + handshake + character login + WorldSession | Live ✓ |
| 5 | ObjDesc: AnimPart + TextureChanges + SubPalettes + ObjScale + Placement.Resting | Live ✓ partial |
Phase 5 status: characters, doors, signs, NPCs, statues all spawn and render with correct positions, scales, and per-entity textures + palettes. The Holtburg sign now stands upright thanks to Resting placement. The Nullified Statue of a Drudge renders at correct scale and color but in the wrong pose (deferred — see Phase 6).
Phases ahead, in suggested order
Phase 6 — Animation system
Owns:
- Drudge statue rendering in aggressive crouch instead of upright "Resting" stance (creatures don't have a Resting placement frame; their idle pose comes from animations, not Setup placements)
- All characters and NPCs rendering in Setup-default pose (T-pose-ish or default crouch) instead of breathing/idling
- No walk/attack/gesture animations for any entity
- Player character has no movement animation when WASD-flying
What it requires:
MotionTabledat parser (animation frame keyframes per motion id)Animationdat parser (the actual frame data)- Per-entity animation state: current motion id, current frame, time-since-frame-start
- Per-frame interpolation between keyframes
- Apply interpolated frame to PartArray.Frames per part (replaces our static
Setup.PlacementFrames[Default]lookup) - Default-on-spawn motion:
Motion_Readyor similar idle motion for every alive creature
Reference:
references/ACViewer/ACViewer/Physics/PartArray.cs::UpdateParts— the per-frame motion application loopreferences/ACViewer/ACViewer/Physics/Animation/AnimSequence.cs— sequence interpolationreferences/ACE/Source/ACE.DatLoader/FileTypes/MotionTable.cs— motion table layout
Estimated effort: 1-2 sessions. The motion system is the single biggest visual quality lever left.
Phase 7 — Multi-floor interiors + dungeons
Owns:
- "Interior houses missing second floors" — our Phase 2d EnvCell walker only walks the ground-floor cells of a landblock and stops
- "Doors that lead under something" — opening a door reveals subterranean cells we don't load
- Dungeons (the Holtburg foundry interior, mines, etc.) — entirely missing
- Building roofs and upper-story walls
What it requires:
- Walk EnvCell
0xAAAA0100+Nfor the FULL range, not just N=0 (currently we stop early for some setups) - Recognize "stairs" / "floor transitions" in the cell graph and walk them
- Handle dungeon landblock format:
0xAAAA0000family with interior-only cell hierarchies - Possibly: load the dungeon when the player approaches a door that leads to it (streaming)
Reference:
- ACViewer's level loader and ACE's
EnvCellparsing - WorldBuilder's dat browser for inspecting EnvCell structures of multi-floor buildings
Estimated effort: 1 session, mostly debugging the cell-walk graph.
Phase 8 — Player input → server
Owns:
- "I can fly around in acdream but I'm not actually MOVING in the game world from the server's perspective"
- Standing still while live → server eventually drops us (no ack pump → no heartbeat)
- Can't pick up items, click NPCs, talk to vendors, cast spells
- No combat
What it requires:
- Outbound
PlayerAutonomousMoveGameMessage from acdream → server - Outbound
Ackpump (background timer that sendsAckSequencepackets every ~250ms) - Outbound interact:
Use,UseWithTarget,PickUp - Outbound chat:
SendTell,SendChat - Map acdream's WASD camera position to server-space player position
- Resolve character collision against terrain (so the server accepts the move)
Reference:
- ACE.Server
Network/Handlers/MovementHandler.cs,UseObjectHandler.cs - holtburger session/send.rs for the outbound side patterns
Estimated effort: 1-2 sessions. The ack pump is small; the move-and-interact protocol surface is large.
Phase 9 — Visual polish
Owns:
- Portals rendering as black squares (probably needs special material handling — clipmap + animated UV)
- Some entities with mesh-origin offsets that look wrong (non-Resting setups still float or sink)
- Skin/hair/eye palette ranges on characters that aren't quite right
- Lighting shadows and reflections
- Better color tone overall
What it requires:
- Portal-specific shader path or texture animation system
- Per-Setup mesh-origin diagnostic and fixup (or accept and document)
- Verify palette range offsets/lengths against retail screenshots
- Optionally: shadow maps, dynamic lighting
Estimated effort: 1 session. Mostly tuning and edge cases.
Phase 10 — UI / HUD
Owns:
- No chat window
- No inventory display
- No character info panel
- No spell book
- No minimap
- No nameplates above characters/NPCs
What it requires:
- 2D rendering layer (Silk.NET supports this via ortho projection + a separate shader)
- Font rendering (port a TTF rasterizer, e.g. FreeType bindings via Silk.NET, or use bitmap fonts)
- Layout system or fixed-position widgets
- Bind to GameState events for inventory updates, chat messages, etc.
Estimated effort: 2-3 sessions. UI is unbounded.
Phase 11 — Sound
Owns:
- No audio at all
What it requires:
SoundTableparser (each weenie has a SoundTable for footsteps, hits, voice)- Sound dat decode (probably WAV-like format)
- Audio engine (NAudio or OpenAL via Silk.NET.OpenAL)
- Per-entity 3D positional audio
- Music
Estimated effort: 1-2 sessions.
Phase 12 — Streaming + perf
Owns:
- Currently we render a fixed 3×3 landblock window. Walking out of it would crash or show emptiness.
- No frustum culling. Some parts of the world are always submitted.
- No LOD. Distant trees use the same vertex count as near ones.
- Single-threaded packet pump. Could miss packets under load.
What it requires:
- Chunk-based terrain loading (deferred Phase 3d work — port WorldBuilder's
TerrainRenderManager) - Visibility scan as the player moves; load nearby chunks, unload far ones
- Frustum cull chunks before submitting draw calls
- Background thread for net I/O so render thread is never blocked
- Async dat decoding to avoid hitches when new entities arrive
Estimated effort: 1-2 sessions for streaming, additional polish ongoing.
Things explicitly out of scope
- Server emulation — we use ACE for server, never reimplement
- Account creation — direct user to ACE's auto-create or manual DB
- Anti-cheat / GMS / live-ops — irrelevant for personal use
- Cross-platform — Windows-only is fine; Silk.NET is cross-platform but the dat assumptions assume retail Windows install paths
"When will my specific complaint be fixed?" — quick lookup
| Observation | Phase |
|---|---|
| Drudge statue in wrong pose (crouch) | Phase 6 (Animation) |
| Characters in T-pose / wrong idle | Phase 6 |
| Houses missing second floors | Phase 7 (Interiors) |
| Doors leading underground / nowhere | Phase 7 |
| Foundry interior missing | Phase 7 |
| Portals are black squares | Phase 9 (Polish) |
| Holtburg sign half-buried | Phase 5d FIXED ✓ |
| Statue too small / wrong size | Phase 5c FIXED ✓ |
| Characters naked | Phase 5a FIXED ✓ |
| Wrong colors on characters / statue | Phase 5b FIXED ✓ |
| Foundry statue not appearing at all | Phase 4.7 FIXED ✓ |
| Skin/hair color slightly off | Phase 9 (likely a palette range tweak) |
| Walking around doesn't move me on the server | Phase 8 (Player input) |
| Can't talk to NPCs | Phase 8 |
| No chat window | Phase 10 (UI) |
| No sound | Phase 11 |
| Can't walk to the next landblock | Phase 12 (Streaming) |
If you see something not on this list, tell me and I'll add it.