Modern open-source C# .NET 10 Asheron's Call client. Faithful port of retail client behaviour to Silk.NET with a plugin API.
Find a file
Erik 04c98be154 feat(overlay): surface Chat + Combat state in DebugOverlay + ship OpenAL-Soft native
Two visible wins that prove today's wire-layer work is actually doing
something:

1. Chat panel (bottom-left): live tail of the last 10 ChatLog entries.
   Color-coded by kind — Tell cyan, Channel green, System yellow, Popup
   red, local/ranged white. Bound to WorldSession via the existing
   GameEventWiring path (H.1) so server ChannelBroadcast / Tell /
   TransientString / Popup + HearSpeech all render live. Includes a
   synthetic \"connecting / connected\" system message so the panel
   isn't blank before anyone talks.

2. Event panel (bottom-right): last 8 combat events from CombatState
   (E.4). Damage taken (red), damage dealt (yellow), evaded-incoming
   (green), missed-outgoing (grey). Each entry fades out over 5s.
   DebugOverlay.BindCombat wires the listeners.

3. Silk.NET.OpenAL.Soft.Native 1.23.1 added. Before this, OpenAL
   managed bindings loaded but the native runtime was absent so
   IsAvailable returned false and audio was silently disabled. Now
   soft_oal.dll ships to runtimes/win-x64/native/ and the engine
   reports \"OpenAL engine ready (16 voices, 3D positional)\" on
   launch. Footsteps + other motion-hook sounds now audible.

GameWindow: after constructing DebugOverlay, assign .Chat + .Combat
and call BindCombat to hook the event stream.

Build green, 628 tests still pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:11:50 +02:00
docs docs: session 2026-04-18 memory + roadmap update 2026-04-18 17:15:32 +02:00
memory docs: final session tally — 19 commits, 628 tests, ~7700 lines 2026-04-18 17:23:20 +02:00
src feat(overlay): surface Chat + Combat state in DebugOverlay + ship OpenAL-Soft native 2026-04-18 23:11:50 +02:00
tests feat(net): AppraiseInfoParser — full PropertyBundle deserializer 2026-04-18 17:22:00 +02:00
tools feat(core): port decompiled AC client physics — CollisionPrimitives + PhysicsBody 2026-04-12 23:54:51 +02:00
.gitignore chore: phase 0 — skeleton + dat asset inventory 2026-04-10 09:02:56 +02:00
AcDream.slnx feat(net): AcDream.Core.Net scaffold + ISAAC keystream (Phase 4.1) 2026-04-11 14:14:28 +02:00
CLAUDE.md docs: comprehensive architecture plan for acdream 2026-04-13 14:23:50 +02:00
launch.log feat(overlay): surface Chat + Combat state in DebugOverlay + ship OpenAL-Soft native 2026-04-18 23:11:50 +02:00
README.md chore: phase 0 — skeleton + dat asset inventory 2026-04-10 09:02:56 +02:00

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 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.