Modern open-source C# .NET 10 Asheron's Call client. Faithful port of retail client behaviour to Silk.NET with a plugin API.
User reported that even with the Phase 4.9 ack pump, acdream's character still rendered to other clients as the purple loading haze. Spent another round in holtburger's references and found two more gaps in the post-EnterWorld handshake: 1. Server sends DddInterrogation (game opcode 0xF7E5) and waits for the client to acknowledge dat-list versions. We never replied. Build the canonical empty response (12 bytes: opcode + language=1 + count=0 lists) and ship it as soon as DddInterrogation arrives. 2. LoginComplete was being sent immediately after CharacterEnterWorld in Phase 4.8, which is too early — the server hasn't finished creating the player object yet so it ignores LoginComplete and the player stays in transition state. The correct trigger is the server's PlayerCreate (0xF746) game message for our character; that's when holtburger fires send_login_complete (see references/ holtburger/.../client/messages.rs::PlayerCreate handler). Wired both into ProcessDatagram. Removed the unconditional LoginComplete from the EnterWorld flow. Added a _loginCompleteSent latch so re-PlayerCreate (e.g., across portal teleports) doesn't re-fire LoginComplete during the same session. Reference repo cited per the new CLAUDE.md guidance — holtburger is the authoritative client-behavior reference. Should have looked there sooner; this would have saved the Phase 4.8 false fix. 220 tests still 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.