Commit Graph

7 Commits

Author SHA1 Message Date
troytt 3feb58fcfc fix(client): fix Multiple Shot missile key, UnitStateSet iteration, local player state overlays, and arrow classId (#550) 2026-10-02 13:12:50 +00:00
troytt 8dac79e4e4 feat(client,netproto): complete D2GS v1.13c online gameplay loops (R1-R5: item tooltips, container ops, NPC dialogue/travel, mercenaries, warps/portals/SkillCast/death, party/trade/quest panels) 2026-10-02 06:08:32 +00:00
troytt 820ca12221 refactor: split into isolated common/netproto/server/client/baker modules
Split the mixed src/ and scripts/ trees into five compiler-enforced modules
aligned with the 1.13c DLL architecture, plus tools/:

- src/common/   (D2Common/Storm/D2Lang): formats, MPQ, data tables, DRLG,
                items/skills/units metadata, RNG, pack contracts. No DOM/Node.
- src/netproto/ (D2Net/Bnclient/D2MCPClient): BNCS/MCP/D2GS protocol; external
                code imports only src/netproto/index.ts.
- src/server/   (D2Game): authoritative simulation + LocalLoopbackAdapter.
                All 23 reverse deps into client removed; no Math.random /
                Date.now / performance.now.
- src/client/   (D2Client/D2Gfx/D2Win/D2Launch/D2Sound): render, UI, frontend,
                audio, session, toolbar and the play.html entry.
- src/baker/    Node-only offline packers/extractors + unified `npm run bake`.
- tools/        bot, replay, unlock, verify/audit/benchmark CLIs.

play.html is now the only HTML entry; index.html, acts*.html and bnet.html
plus legacy entry glue (src/main.ts, act-scene, net-scene, lockstep src/net)
are removed.

Adds tsconfig.{common,netproto,server,client,baker}.json wired into
`npm run typecheck`, and tests/arch/boundaries.test.ts enforcing the module
boundaries with zero whitelist exceptions.

Verification: typecheck 6/6 clean; vitest 556 files / 6640 tests pass;
npm run build clean; bake --verify (136/136 levels, universal DT1s);
netproto-replay --strict 0 unknown/opaque/errors; d2-bot walk hardSnaps=0;
audit-levels 136/136; verify-play 9/9 gates at 800x600 and 1024x768.
2026-10-01 00:10:18 +00:00
troytt be6158826e feat(netproto,client): implement pure-browser D2 1.13c online client (N0-N10)
- Add isolated zero-dependency protocol engine in src/netproto/ (BNCS OLS xsha1,
  CheckRevision, CD-Key hash, MCP realm session, Fog.dll Huffman codec, 167-opcode
  D2GS S2C/C2S codecs, 0x9C/0x9D item bitstreams, D2OnlineFlow, and TS server
  adapter stub) enforced by tsconfig.netproto.json and boundary.test.ts.
- Add deterministic 1.13c binary table extractor (scripts/extract-d2net-tables.ts),
  live headless bot (scripts/d2-bot.ts), .d2s save unlocker (scripts/d2s-unlock.ts),
  tile atlas packer (scripts/pack-tiles.ts), and strict .d2cap offline replay
  verifier (scripts/netproto-replay.ts) with 4 live server capture fixtures.
- Add runtime seed-driven DRLG MapService, TileAtlas, A* sub-tile pathfinder,
  LocalMovementPredictor, and RemoteEntityInterpolator verified across all 136
  levels and 5-Act live waypoint tours.
- Build play.html and src/client/ online session, WebGL2 TileAtlasGpuCache +
  renderSceneSourceFrame, dual 800x600 / 1024x768 viewports, top DOM Toolbar
  (host validation, live ZH/EN toggle, 7 lighting presets, automap reveal,
  Packet Inspector), SoundService, OpfsMpqManager, and 5-tier E2E test suite.

TAG=agy
CONV=a30b2fd5-74b7-4c2f-8d0b-f09c1d751495
2026-09-30 04:41:08 +00:00
troytt 14aa512e85 feat(automap): implement authentic Diablo II v1.13c isometric sprite Automap & Minimap 2026-09-28 01:27:10 +00:00
troytt 69d499d744 docs(m5): mark M5 milestone DONE in PROJECT.md 2026-09-22 04:27:03 +00:00
troytt 3b6b03b90c chore(m5): stabilize full-suite test timeouts and track project/test docs 2026-09-22 04:20:32 +00:00