troytt
230c20da67
fix(entities): bake the Hell Bovine (MonStats Code EC) art for the Moo Moo Farm
...
Commit 2e73d7b changed the Hell Bovine art token from CW to EC
(MonStats.txt hellbovine, Code EC) but never added EC to the act 1 list
of ACT_MONSTER_SPECS, so pack-entity-assets baked no ec-hth atlas and the
Moo Moo Farm's (level 39) Hell Bovines had no art.
- ACT_MONSTER_SPECS[1]: add { token: "EC", weapon: "hth" }.
- Re-baked entities: 70 monster atlases (was 69). entities/index.json is
now sha256 675757cf...; the new ec-hth entry is its only change.
- Tests: pin 70 entities, 66 unique specs and the new index hash.
TAG=agy
CONV=a4f9163c-a011-4161-b169-7f361b1ed57e
2026-09-27 15:18:30 +00:00
troytt
bad680600f
feat(scene): replace G-key map transition with mouse-click warp & entrance interaction
2026-09-27 14:26:13 +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
ffda82d650
Merge branch 'fix/vendor-item-bg-color' into main
2026-09-27 08:36:09 +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
8c5ae5c623
fix(ui): 补齐物品栏金币按钮 (goldcoinbtn.dc6) 并对齐金币栏数值
2026-09-27 08:16:53 +00:00
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