Commit Graph

34 Commits

Author SHA1 Message Date
troytt a05c97c438 fix(ui,tests): cover multi-color ÿc tooltip alignment, High-DPI HUD/label scaling, and socket/pack test parity (Fixes #504) 2026-09-28 14:20:23 +00:00
troytt fc1085418c feat(runeword): implement authentic 1.13c Runeword, socketing & Horadric Cube transmutation system 2026-09-28 13:40:16 +00:00
troytt 1d7445a64e fix(ui): align CharacterSheet stone recess centers, bilingual CJK+space wrapping, bnet.html @font-face & pack:ui font parity (Fixes #504) 2026-09-28 12:56:17 +00:00
troytt 9d0138f69b fix(ui,fonts): hybrid DC6+CJK rendering, middle-dot atlas mask, TTF contour refinement, and recess centering (Issue #504 R2 review) 2026-09-28 12:53:32 +00:00
troytt f488ac8743 fix(ui,fonts): fix Formal 436 quest/dialog prose, TTF glyph contours, and char-sheet spacing (Issue #504 R1 review) 2026-09-28 12:53:32 +00:00
troytt 3ced5b08b9 feat(ui): integrate authentic 1.13c Exocet & Formal 436 DC6 bitmap & TrueType fonts (#504) 2026-09-28 12:53:32 +00:00
troytt 768a2cc920 feat(socket): implement 1.13c jewel, gem & rune socketing system (Closes #507)
- Jewels ('jew' / 'jewl') can be socketed into any socketed equipment (weapon, helm, armor, shield) and apply their rolled modifiers identically regardless of slot.
- Un-socketed Jewels display 'Can be Inserted into Socketed Items' / '可镶嵌进有凹槽的装备'.
- Gems (35 codes) and Runes (r01..r33, 33 codes) dispatch slot-dependent modifiers (weaponMods vs helmMods/armor vs shieldMods) per 1.13c Gems.txt.
- Recalculate host item defense, weapon damage, reqStr, reqDex, reqLevel, indestructibility, rune letter sequences, and Runeword completion.
- Support left-click interactive socketing and visual socket overlay rendering across Inventory (10x4), Equipped paperdoll slots, Private Stash (6x8), and Horadric Cube (3x4).
- Add unit & parity test suite in tests/socket-system.test.ts.
2026-09-28 12:47:24 +00:00
troytt 4e461e1fdb feat(ui,items): implement 1.13c character equipment restrictions and red requirement display (#506) 2026-09-28 12:13:26 +00:00
troytt ef8a7ffff6 fix(i18n): resolve all Iteration 1 bilingual parity findings for Issue #503
- Prefer item.damageEn in ENG item tooltips and normalize 2H, versatile 1H/2H, and throwing weapon damage labels in localizeStarterTooltipLine and item-bridge.ts
- Fix starter set item tooltip regex ordering (+所有技能 without trailing $ and +生命补给 before +生命)
- Use getLocalizedNpcName for Town NPC stone menu headers in both ENG and CHI modes across getNpcMenuLayout, handleNpcMenuClick, and drawNpcMenu
- Add SUPERUNIQUE_TBL_ALIASES in monsterDisplayName for 7 SuperUniques whose SuperUniques.txt IDs differ from .tbl keys
- Export cleanChiItemName in ground-labels.ts and apply to CHI ground item labels and drop-to-ground status messages
- Update verify-issue-503-browser.ts LeftDockPanelKind loop + vendor/NPC coverage and expand issue-503-bilingual-parity.test.ts

Refs #503
2026-09-28 07:35:16 +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 0be447fab3 fix(hud): enforce 1.13c Line 1 rank color prefix, MonUMod champion subtype IDs, and elite=all demotion
- Apply abilityColorPrefix (ÿc4 for Unique/Boss, ÿc3 for Champion, '' for Normal/Minion) across the entire Line 1 subtext in buildMonsterHoverSubtext per D2Client.dll 0x6fb719b0 / 0x6fb71a20 so <Race> (Demon/Undead) and race-only Champions/Bosses (DescStr == 'dummy') render in their rank color instead of white (ÿc0), and single-token overflow truncation preserves the rank color.
- Support numeric MonUMod.txt Champion subtype IDs ('16', '36'..'39' from .rdata:0x6fb86d64), case-insensitive modifier keys, and target.affixes fallback in resolveMonsterTitleAndColor, and forward descStr, subType, and affixes in monsterToTargetHudInfo.
- Demote already-elite packs in rebudgetMonsterPacks before re-promoting when elite === 'all' to prevent double-multiplying HP (9x/16x) and level (+4/+6).
- Call mouseController.syncMonsterTargetHud(camX, camY) before reading getActiveTargetMonster() in onRender so moving monsters/camera have zero 1-frame lag on the [1.25, 1.25, 1.25, 1.0] sprite highlight tint.
- Add Round 2 regression tests in tests/monster-target-bar.test.ts.

TAG=agy
CONV=4761a588-f887-4d60-a654-44297372fd6a
2026-09-28 06:19:49 +00:00
troytt 3a4cb77d06 fix(hud): resolve monster lifebar review findings, dummy DescStr filter, thief umod, and target lock 2026-09-28 05:04:38 +00:00
troytt b084aaba7f feat(hud): implement authentic 1.13c monster hover lifebar and 2-line subtext tooltip 2026-09-28 04:18:50 +00:00
troytt a06777be07 fix(ui): remove non-authentic deposit/withdraw buttons over stash bottom keyhole area 2026-09-28 01:27:10 +00:00
troytt 1c738c5445 Merge branch 'fix/cube-transmute-btn' 2026-09-27 08:36:41 +00:00
troytt 3bf9a8c220 fix(ui): restore Horadric Cube Transmute and Close buttons per D2Client.dll 1.13c parity 2026-09-27 08:36:19 +00:00
troytt 598f8f2421 fix(ui): align vendor and gamble item background colors with D2 1.13c item usability rules 2026-09-27 08:35:32 +00:00
troytt 855d610168 fix(ui): 点击商人面板买/卖/修理按钮后鼠标样式切换为原版 buysell.dc6 交易光标 (Fixes #491) 2026-09-27 07:47:31 +00:00
troytt d998a0551b fix(ui): restore authentic D2 v1.13c NPC dialog popup menu (Fixes #489) 2026-09-27 06:41:10 +00:00
troytt d2358ede37 Merge pull request 'fix(ui): align Private Stash header and gold text inside TradeStash.dc6 recessed boxes (#493)' (#494) from fix/stash-text-align into main
Merge pull request 'fix(ui): align Private Stash header and gold text inside TradeStash.dc6 recessed boxes (#493)' (#494) from fix/stash-text-align into main
2026-09-27 05:55:32 +00:00
troytt 4d023e815f fix(ui): align Private Stash header and gold text inside TradeStash.dc6 recessed boxes (Fixes #493) 2026-09-27 05:54:58 +00:00
troytt e9c3b41768 feat(items): spawn magic/rare/set/unique drops unidentified and implement full 1.13c identification 2026-09-27 05:39:21 +00:00
troytt 7295dc8b3e feat(portal): implement v1.13c Town Portal tome/scroll, DS1 town positions & two-way travel (#394)
- Resolve exact Diablo II v1.13c DS1 Type-2 Object #33 (Objects.txt ID 59) Town Portal sub-tiles across all 9 town presets (Acts 1-5) in src/game/portal.ts
- Implement TownPortalSlot.mouthInLevel(levelId) and enterFrom(levelId) per ObjMode.cpp:3245 (wilderness -> town keeps portal open; town -> wilderness closes portal)
- Add 20-charge quantity tracking for Tome of Town Portal (tbk) and Tome of Identify (ibk), right-click casting for tbk/tsc in inventory, and scroll-to-tome refill
- Bake authentic TP DCC sprite atlases (tptrlitophth, tphdlitophth, tptrlitonhth, tphdlitonhth) into public/overlays/town_portal_*
- Render Town Portal entity with OP/ON DCC animation, dynamic blue light (Light=19, RGB 64/110/255), overhead destination label, and proximity walk-to-interact in src/scene/act-scene.ts
- Add unit and parity tests in tests/town-portal.test.ts

Closes #394
2026-09-26 15:11:09 +00:00
troytt 43599963e4 fix(ui): separate left-click move/stack/identify-target from right-click use for tomes, scrolls, and cube (Fixes #487) 2026-09-26 14:17:57 +00:00
troytt bdb3b4145a fix(ui): restore 1.13c buysell.dc6 vendor panel, tabs, and repair buttons 2026-09-26 11:45:37 +00:00
troytt 3b993cf04a feat(vendor): implement 1.13c vendor inventory generator, pricing engine & town NPC UI (Fixes #481, #482, #483, #484, #485, #486) 2026-09-26 05:49:03 +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 6cba99f017 fix(ui): waypoint menu icons and click logic 1.13c parity (#393)
- Ground Truth Invariant (D2Client.dll 1.13c at 0x6fb5b2f4-0x6fb5b355 & 0x6fb5a53d):
  - In waygateicons.dc6 (5 frames):
    - Frame 0 (sx=0): Current waypoint unhovered state (blue portal).
    - Frame 1 (sx=30): Current waypoint hovered state (blue portal lit).
    - Frame 3 (sx=90): Activated destination waypoint unhovered state (stone icon).
    - Frame 4 (sx=120): Activated destination waypoint hovered state (stone icon lit).
    - Locked waypoint: Skips sprite draw call completely (je 0x6fb5b355), text drawn in gray.
  - Waypoint click handling:
    - Current waypoint click is a no-op (player already present at location).
    - Locked waypoint click is a no-op.
    - Activated destination waypoint click initiates teleport and closes panel.
- Track current waypoint, current level, and act tab across act-scene and world-panels.
- Update tests in tests/world-panels.test.ts to verify authentic 1.13c behavior.
2026-09-23 06:43:05 +00:00
troytt e033ae53e6 fix(ui): authentic tab indexing for skill tree and waypoint panels 2026-09-23 01:22:51 +00:00
troytt 8f8ee010ca docs: update README with art assets, JSON data specifications, and UI parity 2026-09-22 13:12:25 +00:00
troytt 775f4113c9 feat(quest): authentic Diablo II 1.13c quest log tbl strings (Fixes #381) 2026-09-22 11:24:02 +00:00
troytt 6f3cf6b8bb feat(ui): authentic D2 1.13c waypoint tabs and icons (Fixes #378) 2026-09-22 09:59:54 +00:00
troytt db82a5da32 feat(stash): implement camp town stash entities across 5 acts and 6x8 storage panel (Fixes #150) 2026-09-22 05:33:57 +00:00
troytt e2a74cc8f0 feat(ui/controls): 实现完整 UI/HUD 系统、操作快捷键对齐与装备词条染色 (fixes #134, fixes #135, fixes #136, fixes #137, fixes #138, fixes #139, fixes #140)
- R1 (Issue #134): 离线烘焙预生成 UI 图集 (public/ui/) 与 embedded DropTables,彻底消除 2 秒纯色占位回退,实现零运行期 MPQ/DLL 依赖
- R2 (Issue #135): 修复地图缩放 (0.4x~8.0x) 及多 DPR 下 NPC 名称标签与模型顶部的投影对齐
- R3 (Issue #136): HUD 与全屏画布采用 1:1 纵横比等比缩放与居中,彻底修复宽屏下红蓝球被横向拉伸为椭圆的问题
- R4 (Issue #137): 传送点菜单 (Waypoint Menu) 支持点击无缝跨场景传送,随机选取地图变体并平稳降落在对应小站子网格
- R5 (Issue #138): 角色属性面板 (InvChar6) 文本与数字完美对准背景凹槽石框,加点按钮对齐
- R6 (Issue #139): 物品栏 5 级回退 DC6 图标渲染,消灭空白占位框;装备 Tooltip 等比缩放与视口翻折防遮挡
- R7 (Issue #140): 任务日志界面集成 1~5 幕全量 27 个任务图标 (a1q1..a5q6) 及 27 帧已完成印章,第 4 幕自动进行插槽钳制保护
- Controls Parity: 还原原版左键移动/NPC交互/小站/攻击,Shift 强制原地站立攻击,右键释放技能与被动/无技能移动回退,解除 A/W/S/1..4 快捷键与移动冲突
- Tooltips & Dyes: 基于 1.13c PL2 调色板 Table 104 (cgrn) 渲染翡翠绿军帽,战争召唤按 descpriority 完整呈现 11 行符文之语属性与三行正统标题
2026-09-21 11:09:10 +00:00