Modern open-source C# .NET 10 Asheron's Call client. Faithful port of retail client behaviour to Silk.NET with a plugin API.
Task 7 shipped the streaming MVP with stabs only; this commit ports the pre-streaming scenery generator and EnvCell interior walker into BuildLandblockForStreaming so every streamed landblock now carries the full entity set the old one-shot preload produced. Scenery (trees/rocks/bushes) from SceneryGenerator.Generate runs per-landblock on the worker thread with a landblock-derived id namespace (0x80000000 | (lbId & 0x00FFFF00) | local_index) so scenery ids don't collide across landblocks. Interior (EnvCell walls/floors/ceilings via Phase 7.1 CellMesh plus static interior objects) runs on the worker thread with a 0x40000000-based id namespace. Cell sub-meshes are pre-built on the worker and handed to the render thread via a ConcurrentDictionary<uint, IReadOnlyList<GfxObjSubMesh>> which ApplyLoadedTerrain drains before its per-MeshRef upload loop. The per-MeshRef upload loop in ApplyLoadedTerrain now skips non-0x01xxxxxx ids (EnvCell synthetic ids, Setup ids) so it no longer attempts GfxObj.Get on ids that aren't GfxObj dat records. The cross-thread cell-mesh dictionary is the only shared mutable state between the worker and render threads — everything else flows through the Channel<LandblockStreamResult> outbox. 212 tests green. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| docs | ||
| src | ||
| tests | ||
| .gitignore | ||
| AcDream.slnx | ||
| CLAUDE.md | ||
| README.md | ||
acdream
Experimental modern open-source Asheron's Call client in C# / .NET 10.
Status: pre-alpha, not playable. Phase 0 only — dat file asset inventory.
Stack: .NET 10, Chorizite.DatReaderWriter for dat parsing. Silk.NET + Avalonia planned for rendering/UI (not yet wired up).
Requires: A retail Asheron's Call install (Turbine/Microsoft property — supply your own). Set ACDREAM_DAT_DIR environment variable to the directory containing client_portal.dat, client_cell_1.dat, client_highres.dat, and client_local_English.dat, or pass it as the first CLI argument.
Layout
src/AcDream.Cli/— console app that dumps asset counts from a dat directoryreferences/— local read-only reference material (ACE, ACViewer, WorldBuilder, DatReaderWriter, holtburger, retail AC install). Gitignored.
Run
dotnet run --project src/AcDream.Cli -- "C:\path\to\Asheron's Call"
Or set ACDREAM_DAT_DIR and run without args.