troytt
855d610168
fix(ui): 点击商人面板买/卖/修理按钮后鼠标样式切换为原版 buysell.dc6 交易光标 ( Fixes #491 )
2026-09-27 07:47:31 +00:00
troytt
57c57c2662
Merge pull request 'fix(ui): restore authentic D2 v1.13c NPC dialog popup menu ( Fixes #489 )' ( #495 ) from fix/issue-489-npc-menu-ui into main
2026-09-27 06:41:34 +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
9c2e3ca81c
fix(drop): prevent items and gold from dropping into player-unreachable locations ( Fixes #492 )
2026-09-27 06:09:02 +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
f3c500978d
fix(ui): 对齐技能树剩余技能点凹槽、移除底部冗余横幅并归位关闭按钮插槽
2026-09-27 05:50:42 +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
7cc56ed967
Merge pull request 'fix(portal): 修正背包打开时右击回城书生成传送门遮挡、pointerEvents 穿透与城镇变体坐标同步 ( #394 )' ( #490 ) from fix/issue-394-portal-visibility into main
2026-09-27 05:34:29 +00:00
troytt
5c19d92334
fix(portal): 修正背包打开时右击回城书生成传送门遮挡、pointerEvents 穿透与城镇变体坐标同步 ( #394 )
2026-09-27 05:32:13 +00:00
troytt
e29d743f38
Merge pull request 'feat(portal): 实装回城之书/卷轴、1.13c 城镇传送门坐标与双向传送 ( #394 )' ( #488 ) from feat/issue-394-town-portal into main
2026-09-26 15:11:58 +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
cccc6ff527
chore(scripts): include anim, missiles, overlays, entities, and world-graph in publish-packs
2026-09-26 13:32:51 +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
b7ccc448b4
fix(items): strictly align item names & stat descriptions with 1.13c .tbl across inventory, stash, and ground ( fixes #480 )
2026-09-26 05:23:09 +00:00
troytt
c09e237ff8
fix(drop): unify monster and inventory ground drops on 16x8 sub-tile lattice with bilingual metadata parity
...
1. Sub-Tile Scatter Spacing (D2Common.dll COLLISION_GetFreeCoordinatesImpl 0x6FD9D140):
- Unify GameEngine.triggerMonsterDrop, GameEngine.dropItem, GameEngine.dropGold,
and net-scene monster drops on findIsometricDropPosition (16x8 sub-tile diamond
lattice, 16px orthogonal / 8px vertical spacing) instead of 80x40px macro cells.
- Derive GroundItemEntity (cellX, cellY) from final scattered (finalX, finalY)
via worldToCell rather than overwriting with stale origin cell coordinates.
2. Monster vs. Inventory Drop Metadata & Bilingual Name Parity:
- Add formatBilingualGroundItemName in src/game/ground-items.ts using
translateItemName / translateMagicName / translateRareName so raw monster-dropped
Item objects receive identical '中文名 (English Name)' nameZh as UiInventoryItem.
- Detect runes via isRuneCode in resolveItemQualityString so monster-dropped runes
render with #ff9c18 orange labels matching inventory-dropped runes.
- Preserve flippyFile, dropSound, and dropSfxFrame in itemToUiInventoryItem, fix
socket count resolution so unsocketed items do not inherit base.gemsockets, and
add embedded drop table fallback in resolveGroundItemMetadata.
3. Anti-Stacking for Sequential Player Inventory/Body Drops:
- Simplify act-scene onDropItemToGround / onDropGoldToGround to delegate directly
to engine.dropItem / engine.dropGold at (player.x, player.y) so every dropped
item checks engine.groundItems.all and scatters to a unique sub-tile slot.
Fixes #479
2026-09-26 04:51:32 +00:00
troytt
9022579306
feat(drop): overhaul item drop engine for strict 1.13c assembly parity ( Fixes #412 , #413 , #414 , #415 , #416 , #417 , #418 , #419 , #420 , #421 , #422 , #423 , #424 , #425 , #426 , #427 , #428 )
...
- M1 (#412 , #413 , #414 ): Embed canonical DifficultyLevels.txt (RAW_DIFFICULTY_LEVELS), remove DEFAULT_DIFFICULTY_LEVEL_ODDS and synthetic rollDrop dead code, and enforce fail-fast monsterLevel/TC validation in GameEngine.
- M2 (#415 , #416 , #417 , #418 ): Add 'boss' to MonsterRank (monsterType = 4), enforce Champion (+2) and Unique/Minion/SuperUnique (+3) mlvl modifiers, wire equipped Magic Find with 1.13c diminishing returns, and wire /players N NoDrop scaling.
- M3 (#419 , #420 , #421 , #422 ): Spawn physical ground gold piles with 3-tier flpgld sprites and 10,000*level inventory capacity, gate drops on DT->DD death animation frame completion, trigger base item dropsound at dropsfxframe via AudioManager, and place drops via collision-grounded quadrant spiral search.
- M4 (#423 , #424 , #425 , #427 ): Remove procedural colored rectangle fallbacks and verify 100% flippy DC6 coverage, apply #808080 gray ground labels for ethereal/socketed normal & superior items, align pickup bounds to 2-subtile collision reach with 2-pass auto-belt potion slotting, and synchronize multiplayer lockstep drops via monster dwInitSeed.
- M5 (#426 , #428 ): Enforce 6-item drop cap per monster for Countess bonus rune TCs, wire Act Boss quest first-kill TreasureClass4 with save persistence, implement rollHellforgeDrop (1 rune + 4 gems), and complete full-spectrum statistical and 136-level verification.
Fixes #412
Fixes #413
Fixes #414
Fixes #415
Fixes #416
Fixes #417
Fixes #418
Fixes #419
Fixes #420
Fixes #421
Fixes #422
Fixes #423
Fixes #424
Fixes #425
Fixes #426
Fixes #427
Fixes #428
2026-09-25 22:37:17 +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
d393a48043
feat(drop): embed MonStats and SuperUniques with 1.13c multi-diff TC parity ( Fixes #410 , #411 )
...
- Pack and embed authentic 1.13c MonStats drop columns (734 kinds) with noRatio support
- Embed SuperUniques multi-difficulty TCs (66 unique bosses) and fail-fast loading
- Fix SuperUnique minion TC3 inheritance and minion monsterType identification
- Add adversarial drop parity audit and superunique minion test suites
- Update D2MOO oracle seed generator and Paladin skill tree parity
2026-09-25 13:44:35 +00:00
troytt
395f0b22bc
feat(drlg): overhaul outdoor wilderness generator with strict D2MOO 1.13c parity ( Fixes #455 )
...
- Refactor entire wilderness generation pipeline under src/game/wilderness/
- Implement DRLGOUTPLACE dynamic level connection dimensions and orientation flags
- Align outer river double-column generation (x = nGridWidth - 2) replacing perimeter trees
- Implement authentic 4-pass secondary borders with 52 groups of DS1 substitution patterns
- Align 56x8 TownSTrans gate to river boundary and place all 5 canonical presets
- Replace dual road generators with single-pass orthogonal dirt path rasterizer
- Initialize 0x40002 base floor grass and apply LvlSub.txt SubType 6 clustered replacements
- Add D2MOO native mapgen parity fixtures and comprehensive stress & reachability test suites
2026-09-25 04:48:57 +00:00
troytt
16f2f5ef4a
feat(skills): add Milestone M30 All 7 Classes Global Master Parity Gate suite
2026-09-25 04:01:20 +00:00
troytt
a70ab93a61
test(skills): implement Assassin Milestone M29 Class Gate & End-to-End Suite (30/30 skills)
...
- Add adv-ass-e2e-gate.test.ts covering all 8 core cross-tree scenarios:
1. Traps Tree Synergy Network & 5-Band Progression (LS +720%, DS corpse explosion, Blade weapon scaling 3/8 and 3/4).
2. Martial Arts Charge-Up & Finisher Discharge Pipeline (multi-skill charges, single-tier Phoenix Strike, Dragon Talon multi-kicks, Dragon Claw dual strikes).
3. Shadow Disciplines Buff Mechanics & Venom Bitrate Clamp (BoS vs Fade cancellation, Venom 10-frame clamp, CoS recast lockout).
4. Minion & Summon Caps (5 Traps + 1 Shadow = 6 Max concurrent pets).
5. NextDelay Collision Avoidance Across Trees (WoF 4f, Shock Web 25f, Dragon Flight 4f).
6. Cross-Tree Hybrid Build Integration (Trapper / Kicksin / Shadow).
7. Crowd Control & Status Effects (Mind Blast 4y stun/conversion, Psychic Hammer KB, CoS blind).
8. Complete 30-Skill Assassin Tree Data Registry & Invariants (IDs 251..280 exist in D2DataRegistry, BATCH1_SKILLS length = 38).
- All 34 Assassin test files pass (166/166 tests passed).
- TypeScript Typecheck (tsc --noEmit) passes with 0 errors.
2026-09-25 03:52:03 +00:00
troytt
8d15aac80f
feat(skills): implement Assassin Shadow Disciplines tree with 1.13c parity (Milestone M28)
...
- Implement Claw Mastery scaling (AR, ED, diminishing returns Critical Strike).
- Implement ShadowBuffTracker for Burst of Speed vs Fade mutual cancellation, duration, and Venom coexistence.
- Implement resolveVenomPoisonClamp for strict 10-frame (0.4s) duration clamp and bitrate summing.
- Implement resolveWeaponBlock with dual-claw requirement and 0% block while running.
- Implement Cloak of Shadows defense debuff/buff, duration, and recast lockout.
- Implement Psychic Hammer 50/50 phys/magic damage and target-rank knockback scaling.
- Implement Mind Blast physical damage, 4-yard AOE stun, and conversion chance with boss/unique immunity.
- Implement ShadowMinionManager for PetType limit = 1, mutual replacement, Warrior mirroring, and Master autonomous slvl scaling.
- Add adv-ass-shadow-stress.test.ts verifying all 7 adversarial test categories (21 tests passed).
- All 10 Shadow Disciplines unit tests (#252 , #253 , #258 , #263 , #264 , #267 , #268 , #273 , #278 , #279 ) and typecheck pass.
2026-09-25 03:45:44 +00:00
troytt
3e85a8059d
feat(skills): implement Assassin Martial Arts tree with 1.13c parity (Milestone M27)
...
- Implement ChargeOrbManager for 1..3 tier charge accumulation, 375-frame (15.0s) duration, timeout expiration, duration refresh, and multi-skill coexistence.
- Implement resolveFinisherDischarge for full discharge on finisher contact (Tiger Strike ED%, Cobra Strike life/mana steal, Claws of Thunder cumulative elemental tiers, Phoenix Strike single tier payload).
- Implement Dragon Talon multi-kicks (1 + floor(slvl/6)) and AR scaling.
- Implement Dragon Claw dual-claw check, 2 strikes, and Claw Mastery synergy.
- Implement Dragon Tail physical-to-fire conversion (50 + 10*(slvl-1)%), 6 subtiles AOE, and knockback.
- Implement Dragon Flight teleport kick, NextDelay = 4 frames, and ED% scaling.
- Add adv-ass-martial-stress.test.ts verifying all 7 adversarial test categories (16 tests passed).
- All 10 Martial Arts unit tests (#254 , #255 , #259 , #260 , #265 , #269 , #270 , #274 , #275 , #280 ) and typecheck pass.
2026-09-25 03:38:21 +00:00
troytt
880b196c43
feat(ass): Milestone M26 Assassin Asset Pipeline and Trap Mechanics ( closes #473 )
2026-09-25 03:30:28 +00:00
troytt
2e65415aed
feat(dru): Milestone M25 Druid Class Gate & End-to-End Suite across all 30 skills ( closes #472 )
2026-09-25 03:11:06 +00:00
troytt
853f61d634
feat(dru): Milestone M24 Druid Summoning skills, pet exclusivity, spirit auras, corpse cycles, and stress suite ( closes #471 )
2026-09-25 03:06:36 +00:00
troytt
0c5f5a88ab
feat(dru): Milestone M23 Druid Shape Shifting skills, form states, charge orbs, contagion, and stress suite ( closes #470 )
2026-09-25 02:56:20 +00:00
troytt
5eded536ef
feat(dru): Milestone M22 Druid elemental skills pure calculators, absorption, kinematics, and stress suite ( closes #469 )
2026-09-25 02:51:27 +00:00
troytt
51ac3b2d77
feat(dru): Milestone M21 Druid asset pipeline and foundation ( closes #468 )
2026-09-25 02:35:14 +00:00
troytt
1f14b311c7
feat(bar): Barbarian Class Final Quality Gate & E2E Verification (30/30 Skills)
...
- Complete E2E verification across all 30 Barbarian skills (IDs 126–155)
- Cross-tree Warcry buff duration network (Shout, Battle Orders, Battle Command)
- Berserk 100% magic conversion & zero-defense vulnerability duration
- Frenzy momentum speed scaling & dual-wield requirements
- Whirlwind uninterruptible path sweeping & 4-frame hit checks
- War Cry 5-band physical damage progression & stun length
- Combat Masteries & Critical Strike sequential roll without 4x stacking
- Refined weapon matching for cryptic axe, poleaxe, and mauls
- Enforces BATCH1_SKILLS length invariant = strictly 38
- Fixes #467
2026-09-25 02:12:47 +00:00
troytt
dbd80db251
feat(bar): implement Barbarian Warcries (IDs 130, 131, 137, 138, 142, 146, 149, 150, 154, 155)
...
- Authoritative 1.13c parity for 10 Barbarian Warcries
- Exact Shout, Battle Orders, Battle Command duration scaling & mutual synergies
- Exact 5-band physical damage progression for War Cry with +6%/blvl synergies
- Authentic Battle Cry defense/damage debuff scaling and duration
- Authentic Taunt forced melee & debuff progression
- Diminishing returns for Find Potion and Find Item
- Grim Ward 1000-frame (40s) totem duration & flee radius scaling
- Adversarial stress tests (slvl 0, 1, 10, 20, 99)
- Enforces BATCH1_SKILLS length invariant = strictly 38
- Fixes #466
2026-09-25 02:07:49 +00:00
troytt
0c3388b18b
feat(bar): implement Barbarian Combat Masteries (IDs 127-129, 134-136, 141, 145, 148, 153)
...
- Authoritative 1.13c parity for 10 Barbarian Combat Masteries
- Exact linear AR, Damage, Stamina, Defense progression
- Exact diminishing returns Critical Strike (dm56), Speed, Resist All (dm12)
- Sequential roll for Critical Strike & Deadly Strike
- Adversarial stress tests (slvl 0, 1, 10, 20, 99)
- Enforces BATCH1_SKILLS length invariant = strictly 38
- Fixes #465
2026-09-25 02:02:04 +00:00
troytt
bd4920f3aa
feat(bar): implement Barbarian Combat Skills (IDs 126, 132, 133, 139, 140, 143, 144, 147, 151, 152)
...
- Authoritative 1.13c parity for 10 Barbarian Combat skills
- Exact damage, attack rating, mana, duration, and knockback formulas
- 6-part synergy integration (Bash, Stun, Double Swing, Concentrate, Frenzy, Berserk)
- Adversarial stress tests (slvl 0, 1, 10, 20, 99)
- Enforces BATCH1_SKILLS length invariant = strictly 38
- Fixes #464
2026-09-25 01:56:23 +00:00
troytt
98210321da
feat(bar): Milestone M16 Barbarian asset pipeline and foundation
...
- Extracted and baked authentic Diablo II v1.13c missile DCC sprites from MPQ archives:
* BAYellShockWave01 (Howl, Shout, Battle Cry, Battle Command, Battle Orders)
* WarcryShockwave (War Cry)
* GrimWardSmallStart, GrimWardSmall, GrimWardSmallStop
* GrimWardMediumStart, GrimWardMedium, GrimWardMediumStop
* GrimWardLargeStart, GrimWardLarge, GrimWardLargeStop
- Extracted and baked authentic v1.13c overlay DCC sprites with Trans=3 additive blending:
* ShoutStart, Shout, BattleCry, BattleOrdersStart, BattleOrders
* BattleCommandStart, BattleCommand, BerserkOverlay, Frenzy, WarcryHit
- Added aliases for Taunt (CurseConfuseEffect) and Stun (Stun)
- Generated typed metadata in src/render/missiles-meta.ts and src/render/overlays-meta.ts
- Added comprehensive unit and adversarial test suites:
* tests/skills/bar/bar-assets.test.ts
* tests/skills/bar/adv-bar-assets-audit.test.ts
- Passed 38/38 test files (196/196 tests green, 0 typecheck errors)
- Preserved BATCH1_SKILLS length = 38 and zero runtime MPQ invariant
Closes #463
2026-09-25 01:46:57 +00:00
troytt
143383b93c
feat(skills): add Amazon class gate and full E2E verification suite ( closes #462 )
...
- Add adv-ama-e2e-gate.test.ts covering all 30 Amazon skills (IDs 6–35)
- Verify cross-tree synergies (Guided Arrow + Pierce + Critical Strike, Lightning Fury + Pierce cascades, Valkyrie + Decoy)
- Validate crowd control mechanics (Slow Missiles velocity dampening, Inner Sight flat defense reduction)
- Verify Fend multi-target thrash & 1.13c Dodge/Avoid/Evade evasion interrupt bug handling
- Verify casting delays (Poison Javelin 12f, Plague Javelin 100f, Immolation Arrow 25f, Valkyrie 150f)
- 36/36 Amazon test files passing (182/182 tests green), typecheck clean, 0 regressions
2026-09-25 01:29:04 +00:00
troytt
8ba4908572
feat(skills): implement Amazon Javelin and Spear skill tree with 1.13c parity ( closes #461 )
...
- Implement 10 Javelin & Spear skills: Jab (10), Power Strike (14), Poison Javelin (15), Impale (19), Lightning Bolt (20), Charged Strike (24), Plague Javelin (25), Fend (30), Lightning Strike (34), Lightning Fury (35)
- Wire 1.13c 5-band scaling, synergy matrices, mana curves, casting delays (Poison Javelin 12f, Plague Javelin 100f)
- Add comprehensive adversarial stress test suite adv-ama-javelin-spear-stress.test.ts (13/13 passing)
- Maintain BATCH1_SKILLS length = 38 invariant and zero runtime MPQ reads
- 100% typecheck clean and 0 regressions against existing test suite
2026-09-25 01:24:22 +00:00
troytt
3e4350e50d
fix(ama): safely dereference owner stateBus in slow missiles tick ( #460 )
2026-09-24 20:19:29 +00:00
troytt
1e5b02f0d6
feat(ama): implement Milestone M13 Amazon Passive and Magic skills tree ( #460 )
2026-09-24 20:10:40 +00:00
troytt
52b0bbaf2b
fix(ama): isolate guided arrow maxTurn clamp and align magic arrow weaponless damage ( #459 )
2026-09-24 19:19:25 +00:00
troytt
88c57f7ed6
feat(ama): implement Milestone M12 Amazon Bow and Crossbow skills tree ( #459 )
2026-09-24 19:08:16 +00:00
troytt
e3f03b255e
fix(ama): update baseline entity count and explodingarrowexp test expectations ( #458 )
2026-09-24 18:23:28 +00:00
troytt
e6b3c5b06d
feat(ama): implement Milestone M11 Amazon assets, animations & foundation setup ( #458 )
2026-09-24 18:07:04 +00:00
troytt
7b1a1de8c0
fix(necro): resolve 7 pre-existing 1.13c parity test regressions ( #453 )
2026-09-24 17:32:34 +00:00
troytt
b2b8a270b4
fix(test): align test expectations and monster max resistance with 1.13c parity
2026-09-24 17:30:38 +00:00
troytt
4e79c4731d
feat(pal): implement Milestone M10 Paladin Gate and full class E2E verification suite
2026-09-24 17:22:01 +00:00
troytt
a88b02ae33
test: fix 29 pre-existing vitest failures and ensure test hygiene ( Fixes #451 )
2026-09-24 17:15:59 +00:00
troytt
cc994fe3c8
fix(skill): fix Fire Ball explosion missile asset and 80px AoE radius ( Fixes #440 )
2026-09-24 16:54:28 +00:00