Commit Graph

5 Commits

Author SHA1 Message Date
troytt 13b2a4c326 refactor(client): remove leftover single-player client code
Delete the 29 src/client files that were no longer reachable from
src/client/main.ts (launcher/play-entry, world/act-runtime, the SP scene
modules, sim/*, cull/roofs/unit-sprites/animation/char-appearance,
ground-labels, browser-mpq-source, and the dead barrels/re-export shims).

Strip the GameEngine coupling from the online HUD: HudManager no longer
binds/syncs an engine (bindEngine, syncFromEngine, switchClass,
classProfiles, grantExperience/takeDamage/heal, pickupGroundGold, ...) or
publishes window.__d2webHud/__d2webHudInstance; inventory/world-panels drop
_boundEngine; globes stop writing __d2webHud. world-renderer,
lighting-presets and ground-item-renderer keep only the online halves.

Remove demo-only exports from src/common and src/client
(DEFAULT_UNIVERSAL/SORCERESS_SKILLS, STARTER_EQUIPPED_GEAR/BAG_ITEMS,
DEFAULT_BELT_POTIONS, BeltModel.seedDefaultPotions,
createStarterProfileForClass, CLASS_DEFAULT_SKILLS). The data now lives in
tests/fixtures/demo-profile-data.ts. Tables re-exported by
src/server/world/class-starter-profiles.ts are kept.

Tests: retarget imports of re-exported helpers to their origin modules;
delete cases that only covered removed SP code; rewrite surviving
behavior against GameEngine / common data (p0-520, p0-521, p0-528,
starter-items, issue-503/506, class-switching, glacial-spike,
skill-quickbar-tooltip, monster-target-bar MonUMod). e2e-module-split now
targets src/client/main.ts instead of play-entry. Tools that imported
deleted modules are removed or trimmed (verify-renderer-lifecycle).
2026-10-01 06:03:55 +00:00
troytt 7db8c3c9b8 fix(client): neutral not-ready HUD state and server-authoritative HUD commands (P1/P2)
- Stats 6-11 decoded per ItemStatCost ValShift 8 (unconditional >>8, no
  magnitude heuristic); evidence in self.ts doc (capture 1e 07 00 32 = 50<<8).
- Neutral defaults: no Sorceress/lvl85/850k gold/starter gear/belt potions/
  quests/waypoints; class null until server assigns it; XP from
  D2_EXPERIENCE_TABLE_99; no 'Wanderer'/'Player'/'sor'/||100 fallbacks.
- HudCommandSink: HudManager routes stat/skill alloc, skill select, belt use,
  weapon swap, item pick/place/equip/unequip/drop/use, gold drop, transmute and
  waypoint to HudModel commands with no local mutation; render stamina tick
  removed; fabricated skill damage strings removed.
- HudModel.syncFromWorld rebuilds skills/quickbar/containers/waypoints/quests
  unconditionally; derived stats via derived-stats.ts; BeltUse uses real ids.
- netproto: C2S 0x50 DropGold command + encoder.
- ClientWorld: waypoint unitId from 0x63, 0x79 self/partner trade gold split,
  pseudo StatSet ids (>0x1ff) never enter StatLists.
- Tests migrated to explicit demo fixtures (tests/fixtures/hud-demo-state.ts)
  plus new hud-server-authority / drop-gold regression tests.
2026-10-01 01:41:13 +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 8ddfbd318a feat(drlg,rng): unify 64-bit D2Rng and 136-level 1:1 DRLG port (DRLG_ACT_VARIANTS=1, seed 0x5eed0100) 2026-09-29 09:24:58 +00:00
troytt 92966abdee feat(skills): complete 1.13c D2MOO parity for Assassin and Universal skills (#154-#374) 2026-09-25 22:13:38 +00:00