Commit Graph

472 Commits

Author SHA1 Message Date
troytt adaef0d222 test(skills): add comprehensive Blizzard missile physics stress verification suite (Ref #400) 2026-09-23 11:35:28 +00:00
troytt ddad686654 feat(skills): implement Blizzard (Skill 59) with 1.13c parity and baked missile assets (Ref #400)
- Add authoritative 64-entry circle lookup table (BLIZZARD_CIRCLE_X, BLIZZARD_CIRCLE_Y) matching D2Game.dll 0x6FD1C960 with 2:1 isometric projection (ISO_GROUND_ASPECT_RATIO = 0.5)
- Pack authentic DCC missile sprites (blizzard1..3, blizzardexplode1..2, blizzard4 alias, blizzardexplode3 alias) from d2data.mpq into public/missiles/ and export metadata in missiles-meta.ts
- Implement 1.13c simulation in skills.ts and missile-engine.ts:
  * Controller missile 158 blizzardcenter: 100 ticks lifetime, emits 1 falling shard every 4 ticks (Param3=4), coprime step 13 mod 64, radius 7 subtiles
  * Falling shards (blizzard1..4): 9 ticks range, vertical screen altitude descent from 120 px to 0 px
  * Impact explosions (blizzardexplode1..3): 6 ticks duration, cold damage, 100 ticks chill, NextDelay = 0
  * Authentic 5-band level scaling [15, 30, 45, 55, 65] and +5%/pt synergies
- Integrate Blizzard casting in act-scene.ts: spawn blizzardcenter, handle altitude offset, aliased art fallback, and ice_cast_3 overlay
- Add comprehensive 10-case verification test suite (tests/blizzard-missile-113c.test.ts)
2026-09-23 11:35:28 +00:00
troytt 2b6b6d7fd5 feat(skills): full 33 Paladin aura visual overlays & offline UI atlases parity (Fixes #397)
- Implement all 33 Paladin aura overlay targets (13 front/back pairs + 7 full rings) with authentic 1.13c Overlay.txt definitions
- Update offline overlay baking script scripts/pack-overlays.ts and generated metadata src/render/overlays-meta.ts with zero runtime MPQ parsing
- Align baked UI atlases and manifest in public/ui/ and src/ui/baked-ui-meta.ts
- Expand tests/skills/aura-target-parity.test.ts to 7 dimensions including 3D Isometric Aura Ring Sandwich depth layering
- Fix hero class walk offset assertion in tests/hero-classes-art.test.ts
- Add set item icon dye tests in tests/set-items-icons-dye.test.ts
2026-09-23 10:33:34 +00:00
troytt 39c25dfe6f fix(skills): eliminate idle hydra turret inward crossfire self-targeting (Ref #399)
- Remove targetX and targetY from stationary turret projectile definition in castSkill (act-scene.ts)
- Remove idle fallback to projectile.targetX/Y in tickProjectiles (skills.ts) so turrets only fire when an alive target is found within range
- Add negative unit test in Dimension 3 verifying 0 projectiles are spawned over 50 ticks with empty targets array
2026-09-23 09:58:57 +00:00
troytt ebaa1b4df2 feat(skills): implement Hydra (Skill 62) with 1.13c parity and visual assets (Ref #399) 2026-09-23 09:58:57 +00:00
troytt ef2dbcdbdf feat(pipeline): multi-worker concurrency architecture for entity animation packing (Fixes #396) 2026-09-23 09:55:05 +00:00
troytt 806bc9c8bc test(render): tighten assertions and add anti-drift/edge-case tests for Issue #398 2026-09-23 09:25:08 +00:00
troytt e5a34af708 feat(skills): implement Diablo II v1.13c aura skills system with town/wilderness target filtering and visual parity (Fixes #397)
- Implement all 20 Paladin auras (offensive & defensive) with 1.13c MPQ parameters
- Town vs Wilderness filtering: friendly auras buff only self in town, broadcast to allies/mercenaries/summons in wilderness; offensive pulses and redemption suspended in town
- Conviction (#123) asymmetry: caster ring visual only with 0 self debuffs; wilderness enemies receive -Def% and -Res% debuffs with green spikes foot ring; suspended in town
- Holy Freeze (#114) parity: caster displays cyan ring, wilderness enemies take cold pulse damage, item_slow, and blue chill tint with ZERO enemy foot rings
- Offline asset baking: baked 20 aura overlay animations into public/overlays and generated src/render/overlays-meta.ts with zero runtime MPQ parsing
- Full test coverage in tests/skills/aura-target-parity.test.ts passing 6/6 tests and full TypeScript typecheck passing
2026-09-23 09:15:48 +00:00
troytt ce6fdf131e fix(render): animated torches, candles, environmental fires, and DT1 tile sequences (Fixes #398) 2026-09-23 08:58:23 +00:00
troytt c3bb79e403 feat(skills): implement Frozen Orb with 1.13c parity and visual assets 2026-09-23 08:07:47 +00:00
troytt e5c40fa244 fix(inventory): correct Swirling Crystal inventory size to 1x3 and fix Oculus sprite parity
- Correct Swirling Crystal (oba) invWidth from 2 to 1 (1x3) per canonical 1.13c weapons.txt for both The Oculus (STARTER_EQUIPPED_GEAR.weapon1) and Tal Rasha's Lidless Eye (CLASS_EXCLUSIVE_SETS.sor.weapon1)
- Fix The Oculus invFile from invbst (1x4 Battle Staff) to canonical invob5 (1x3 Swirling Crystal sprite)
- Audit all starter item dimensions across all 7 classes against canonical 1.13c weapons.txt, armor.txt, and misc.txt
- Add tests/starter-items-inv-size-parity.test.ts to prevent inventory size regressions
2026-09-23 07:25:25 +00:00
troytt b1479b31ac fix(render): authentic Diablo II v1.13c ground items flippy sprites and clean pickup lifecycle
- Extract and stitch all 213 Blizzard flp*.dc6 resting frames into items-atlas.png
- Support all 4 flpgld gold pile size groups and color dye transforms
- Implement resolveGroundItemSpriteRect() in src/ui/inventory.ts
- Render authentic isometric ground art with contact shadow in drawGroundItem()
- Eliminate synthetic blue boxes, 2D perspective shear hacks, and sparkle white dots
- Fix engine pickup entity matching so picked items are cleanly removed with zero residual dots
- Add tests/ground-items-flippy-parity.test.ts
2026-09-23 07:03:17 +00:00
troytt 807585a615 Merge branch 'issue-393' into main: fix waypoint menu icons parity (#393) 2026-09-23 06:43:24 +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 263286c0c2 fix(render): isometric grid drop dispersal and authentic ground slanted sprite perspective 2026-09-23 06:23:21 +00:00
troytt 15948eb896 fix(skills): remove translucent solid light boxes during cast overlay animation (#386, #395) 2026-09-23 06:14:11 +00:00
troytt 88bb16238d fix(render): remove duplicate blendMode declaration and add mock activeTexture 2026-09-23 05:56:33 +00:00
troytt da24f9944f Merge branch 'issue-386' into main (Fixes #386) 2026-09-23 05:54:15 +00:00
troytt e3ab3d8552 test: align renderer mock calls in missile-skills test 2026-09-23 05:49:34 +00:00
troytt c814376e8a fix(ground-items): authentic ground item icon sprites and eliminate residual white dot 2026-09-23 05:48:03 +00:00
troytt ff347bb946 Merge branch 'issue-387' into main (Fixes #387) 2026-09-23 05:37:19 +00:00
troytt 6eaeab4619 feat(skills): authentic 1.13c Cast Overlay system and elemental spell animations (Fixes #386) 2026-09-23 03:53:57 +00:00
troytt ea8644c2ea feat(feedback): authentic inventory full flippy bounce animation & audio-visual refusal (Fixes #392) 2026-09-23 03:22:28 +00:00
troytt 3704e7d088 feat(scene): authentic 1.13c animated map objects and phase staggering (Fixes #387)
- Decode and extract all frames for map objects (DCC/DC6) in scripts/pack-act-assets.ts
- Deduplicate unique member art across object placements and pack into objectPages atlas
- Serialize animatedFrames, frameDelta, frameDurationMs, cycleAnim, and sync from Objects.txt into scene.json
- Support multi-frame MapRuntime ObjectDrawable ticking and rendering in src/scene/act-scene.ts
- Introduce SplitMix64 spatial phase hash (computeObjectPhaseOffsetMs) for non-synced objects to eliminate unnatural mechanical synchronization across scene torches and campfires
- Preserve backward-compatibility for single-frame static objects (Stash B6)
- Add 100% passing test suite in tests/object-animation-113c.test.ts
2026-09-23 03:14:14 +00:00
troytt 53a9ef3f9b feat(interaction): implement authentic ground item & gold pickup with pathfinding (Fixes #391) 2026-09-23 03:12:06 +00:00
troytt 7d7925ab2b Merge branch 'issue-390' into main (Fixes #390) 2026-09-23 02:36:16 +00:00
troytt ff867a13e3 feat(skills): authentic baked missile DCC atlas and explosion rendering 2026-09-23 02:35:55 +00:00
troytt 30e8ecee5f feat(ui): authentic Alt key ground item floating labels and ladder collision avoidance (Fixes #390) 2026-09-23 02:35:05 +00:00
troytt 2733ba625b feat(render): authentic ground item rendering and glint sparkles (Fixes #389) 2026-09-23 02:27:31 +00:00
troytt 3f78ad782e feat(items): authentic 1.13c ground items entity, safe drop radial search and item/gold dropping (Fixes #388) 2026-09-23 02:19:12 +00:00
troytt 627af83e97 feat(skills): authentic 1.13c Fire Bolt projectile physics from Missiles.txt (Fixes #385) 2026-09-23 02:09:50 +00:00
troytt e033ae53e6 fix(ui): authentic tab indexing for skill tree and waypoint panels 2026-09-23 01:22:51 +00:00
troytt 752d7e8066 feat(map): authentic Diablo II 1.13c shadow layer (type 13) rendering and pack verification 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 4f6eadea6c feat(ui): authentic Diablo II 1.13c quickbar cd mask, aura styling, charges and passive filtering (Fixes #382) 2026-09-22 11:35:47 +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 090de33935 feat(ui): authentic Diablo II 1.13c skill quickbar & speedbar tooltips (Fixes #380) 2026-09-22 10:57:58 +00:00
troytt 7f810e40e3 feat(class): complete 7-class switching with signature sets and stash treasures (Fixes #379) 2026-09-22 10:45:48 +00:00
troytt 67cf0e576b feat(ui): dynamic attack icon (fist/sword) and add throw & unsummon default skills (Fixes #376) 2026-09-22 10:14:11 +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 0c4af3770d feat(ui): replicate authentic D2 1.13c skill tree tabs and skill points banner (Fixes #377) 2026-09-22 09:50:40 +00:00
troytt 43748eac53 feat(inventory): support ring, amulet, jewel, and charm VarInvGfx graphic variants (Fixes #375) 2026-09-22 09:36:29 +00:00
troytt 82e32a813e feat(ui): implement widescreen left/right panel docking and central vision corridor (Fixes #153) 2026-09-22 07:56:21 +00:00
troytt 9fac33a1e2 fix(skills): reconstruct skill tooltips to 1.13c formula and next level preview (Fixes #152) 2026-09-22 07:13:00 +00:00
troytt bc6b5cd331 feat(skills): add normal attack icon and enable dual left/right slot binding (Fixes #151) 2026-09-22 06:19:19 +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 e7d9070bb8 test(inventory): track challenger M4 inventory audit suite 2026-09-22 05:02:56 +00:00
troytt 317b170a22 fix(inventory): align authentic 1.13c charm dimensions and graphic variants (Fixes #149) 2026-09-22 04:48:23 +00:00
troytt fd2af5353b fix(inventory): audit base item invfiles and pack authentic charm icons (Fixes #149) 2026-09-22 04:26:29 +00:00
troytt e96c3a42ce fix(inventory): audit base item invfiles and pack authentic charm icons (Fixes #149) 2026-09-22 04:26:18 +00:00