Commit Graph

7 Commits

Author SHA1 Message Date
troytt 812eb55d36 feat(client): server-driven vendor, repair, stash-gold and gamble UI
- NPC menu: Trade -> 0x38 action 1, Gamble -> action 2 (classes
  147/199/254/405/512/514 only), Repair via the trade window, close -> 0x30.
- Store shelves render ClientWorld.containers.shop by storePage tab;
  buy / shift-buy / sell / repair / repair-all go out as 0x32/0x33/0x35
  with 2000 ms throttling and the #10107/#10071 display price.
- 0x2A results show TransactionResults* tbl messages; sale plays 0xdd.
- Stash gold dialog modes 0/3/4 (strDropGoldHowMuch / strBankGoldDeposit /
  strBankGoldWithdraw) send 0x50 / 0x4F 0x14 / 0x4F 0x13; amounts are
  clamped to the source balance only, 0 sends nothing.
- Removed every local gold/item mutation, VendorSessionManager usage,
  fake stock and the Boolean.prototype hacks.
- PLAYER_GOLD_CAP (2,500,000) removed: inventory gold is clvl*10000;
  STASH_GOLD_CAP 2,500,000 (D2Common #11060) moved to inventory-model.
- NPC strings packed from the MPQ tbls (16 new whitelist keys incl.
  index alias patchstring#95); canonical-tbl-strings gains only those.
2026-10-01 11:09:53 +00:00
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 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 7367f2a36a fix(state): unify player HP/MP/gold/inventory single source of truth in GameEngine (#520)
Delegate HUD player state reads and mutations to GameEngine as the single
authoritative owner of HP, MP, gold, inventory, belt, and equipment state.

TAG=agy
CONV=4e31689c-063a-4965-968b-59c0f5795f97
2026-09-29 21:01:47 +00:00
troytt 6fa9c7784e feat(i18n): implement full Chinese (CHI) and English (ENG) bilingual versions (#503)
- Add src/i18n/lang.ts for URL/query/storage language detection, runtime state, and language switcher URL generation preserving query parameters
- Expand scripts/pack-canonical-tbl.ts and regenerate src/data/canonical-tbl-strings.ts with 3,721 ENG and 3,374 CHI 1.13c .tbl entries (UI, monsters, SuperUniques, levels, skills, items)
- Add completedEn speech strings for Act II Quest 2 and Act IV Quest 2 in src/data/canonical-quest-data.ts
- Add index.html bilingual entry portal, acts-zh.html (CHI), acts-en.html (ENG), and language switcher in acts.html; configure multi-page rollup inputs in vite.config.ts
- Localize all 15 UI/game modules (level-names-zh, character-sheet, control-bar, globes, ground-items, ground-labels, item-bridge, inventory, skill-tree-panel, hotkeys, npc-table, world-panels, monsters, hud-manager, act-scene) for authentic CHI and zero-CJK ENG modes
- Add tests/issue-503-bilingual-parity.test.ts and scripts/verify-issue-503-browser.ts

TAG=agy
CONV=5016e6fd-4af8-421f-ae4b-6d443a0a102a
2026-09-28 07:35:16 +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
troytt b5754c0197 feat(ui): drop item to ui inventory item bridge, bilingual tooltip, and pickup loop (Fixes #407) 2026-09-24 10:36:23 +00:00