chore: phase 0 — skeleton + dat asset inventory

Brand-new solution targeting .NET 10, using Chorizite.DatReaderWriter 2.1.4
to walk a retail AC dat directory and print how many of each asset type live
in client_portal / client_cell_1 / client_highres / client_local_English.

Opens the four dats in ~16 ms and counts 887,381 indexed assets across 40+
tracked DBObj types. Cell-database terrain (LandBlock, LandBlockInfo, EnvCell)
uses mask-based IDs that DatReaderWriter 2.1.4's GetAllIdsOfType<T> does not
support; worked around with a manual b-tree walk in CountCellByLow16.

Sanity check: LandBlock count is 65,025 = 255 x 255, exactly the AC world grid.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-04-10 09:02:56 +02:00
commit 020ec2a35d
5 changed files with 227 additions and 0 deletions

22
README.md Normal file
View file

@ -0,0 +1,22 @@
# 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](https://github.com/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 directory
- `references/` — 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.