Commit Graph

37 Commits

Author SHA1 Message Date
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 de5530f1fe feat(necro): implement Milestone M4 Necromancer Summoning Spells Tree (10 skills)
- Implement core 1.13c summoning formulas and invariants:
  - Skeleton Mastery (69): passive flat HP (+8/lvl), flat damage (+2/lvl), revive HP % (+5%/lvl), damage % (+10%/lvl), defense (+10/lvl).
  - Raise Skeleton (70): max count formula ((slvl < 4) ? slvl : 2 + floor(slvl/3)), corpse requirement.
  - Clay Golem (75): Golem Group 3 exclusivity, slow-on-hit effect against targets and melee attackers, synergy from Blood Golem.
  - Golem Mastery (79): passive HP % (20% + 25%/lvl) and diminishing run/walk speed bonuses.
  - Raise Skeletal Mage (80): max count formula matching warriors, 4 elemental types, ranged elemental missile firing.
  - Blood Golem (85): 70% life link healing on damage dealt, damage sharing with player.
  - Summon Resist (89): diminishing passive elemental & poison resistances (dm12(20, 75)) capped at 75%.
  - Iron Golem (90): consumes metallic weapon/armor item from ground, inherits base damage/defense/auras, innate Thorns reflection (150% + 15%/lvl).
  - Fire Golem (94): Holy Fire pulse aura every 50 ticks, 100% fire absorption healing, Fire Nova death explosion.
  - Revive (95): max count = slvl, copies target monster stats with +200% HP and +215% damage, 180s (4500 frames) lifespan timer.
- Integrate with SummonManager, CombatPipeline, and ActScene:
  - Group 3 Golem mutual exclusivity (Clay, Blood, Iron, Fire).
  - Synchronous corpse consumption (non-boss corpses only).
  - Fire Golem 100% fire damage absorption to health.
  - Clay Golem attacker in melee slow debuff.
  - Iron Golem Thorns physical melee reflection.
  - Blood Golem life link healing to player.
  - Preserve BATCH1_SKILLS length invariant (strictly 38).
  - Enforce 2:1 isometric ground geometry (ISO_GROUND_ASPECT_RATIO = 0.5).
- Add comprehensive verification test suites:
  - tests/skills/nec/summoning.test.ts (unit tests for all 10 summoning skills)
  - tests/skills/nec/adv-summoning-stress.test.ts (stress & boundary tests)
2026-09-24 10:38:37 +00:00
troytt bfc1164d9b feat(necro): implement Milestone M3 Necromancer Curses Tree (10 skills)
- Implement core curse formulas (radius, duration, debuff stats, immunity breaking)
- Enforce 1.13c ground truth invariants:
  * Amplify Damage (-100% phys res, or -20% on immune)
  * Decrepify (-50% phys res / -10% on immune, -50% speed, -50% attack rate, -50% damage dealt)
  * Lower Resist (-dm56% on fire/lightning/cold/poison, 1/5th penalty on immune)
  * Life Tap (50% physical life leech on hit)
  * Iron Maiden (reflects 200%..675% physical melee damage back to attacker)
  * Weaken (-33% damage dealt)
  * Attract (cursetype = 2, immune to overwrite, cannot recast on attracted unit)
  * Mental curse immunity for Bosses & Champions (Dim Vision, Terror, Confuse, Attract)
  * 2:1 isometric radius targeting and overhead animated overlays
- Add primary verification suite (tests/skills/nec/curses.test.ts)
- Add adversarial challenger stress suite (tests/skills/nec/adv-curses-stress.test.ts)
2026-09-24 09:21:30 +00:00
troytt 29a53233a8 fix(necro): remediate challenger findings for Poison & Bone spells
- Fix dagger classification in getAttackWeaponInfo: authentic 1.13c dagger 'Blade' (bld, knif) properly classified as dagger instead of sword
- Prevent runaway recursive sub-missile explosion cascade loops on piercing missiles (Bone Spear, Teeth, Bone Spirit)
- Fix Bone Spirit homing scalar speed doubling on non-horizontal angles (ensure scalar speed is invariant to homing angle)
- Ensure Poison Nova projectile TTL is exactly 50 frames per D2 1.13c standard
- Include adv-pnb-kinematics-stress.test.ts and adv-pnb-synergy-stress.test.ts stress test suites
2026-09-24 08:37:27 +00:00
troytt e070ed404d feat(nec): implement 10 Necromancer Poison and Bone Spells (M2)
- Implement 10 Poison and Bone skills (Teeth 67, Bone Armor 68, Poison Dagger 73,
  Corpse Explosion 74, Bone Wall 78, Poison Explosion 83, Bone Spear 84, Bone Prison 88,
  Poison Nova 92, Bone Spirit 93) per 1.13c ground truth.
- Decouple damage formulas into standalone exported functions: calculateTeethDamage,
  calculateBoneArmorCapacity, calculatePoisonDaggerDamage, calculateCorpseExplosionDamage,
  calculateBoneWallStats, calculatePoisonExplosionDamage, calculateBoneSpearDamage,
  calculateBonePrisonStats, calculatePoisonNovaDamage, calculateBoneSpiritDamage.
- Preserve BATCH1_SKILLS length strictly at 38 skills.
- Enforce 2:1 isometric ground projection geometry (ISO_GROUND_ASPECT_RATIO = 0.5)
  for collision, radial Poison Nova bursts (64 bolts), and trajectory kinematics.
- Implement Bone Spirit homing steering and Bone Spear piercing (collideKill = 0).
- Integrate casting lifecycle in act-scene: mana deduction, overlays, corpse consumption,
  and dagger weapon requirement for Poison Dagger.
- Add comprehensive 37-test suite in tests/skills/nec/poison-bone.test.ts.
2026-09-24 08:37:27 +00:00
troytt b327e5ee77 test(skills): persist Necromancer M1 asset challenger adversarial stress test suites 2026-09-24 07:04:38 +00:00
troytt ac9999cd5b feat(nec): bake missing Necromancer missiles, overlays, and register metadata (M1)
- Update scripts/pack-missiles.ts to include missing Necromancer missiles: corpseexplosion, poisoncorpseexplosion, poisonexplosioncloud, poisonpuff, cursecast, bonecast, bonespeartrail, revive
- Update scripts/pack-overlays.ts to include 15 Necromancer overlays: 10 Curses overhead state icons, 2 hit overlays, 3 Bone Armor overlays
- Extract and bake 32-bit RGBA sprite sheets into public/missiles/ and public/overlays/ with transparent border thresholding (max(r,g,b) <= 4 -> alpha = 0)
- Generate strongly-typed metadata in src/render/missiles-meta.ts and src/render/overlays-meta.ts
- Add comprehensive Vitest test suite in tests/skills/nec/necro-assets.test.ts verifying physical file existence, JSON frame geometry, and 0 transparent border artifacts
- Verified typecheck with 0 errors and all asset test suites passing 100%
2026-09-24 07:04:38 +00:00
troytt 84956115dd feat(skill-095): implement 1.13c Revive module and Vitest suite (#249) 2026-09-22 03:44:50 +00:00
troytt 3fba1e79bc feat(skill-094): implement 1.13c FireGolem module and Vitest suite (#248) 2026-09-22 03:44:48 +00:00
troytt 536d736803 feat(skill-093): implement 1.13c Bone Spirit module and Vitest suite (#247) 2026-09-22 03:44:47 +00:00
troytt 4f6d8d44e9 feat(skill-092): implement 1.13c Poison Nova module and Vitest suite (#246) 2026-09-22 03:44:45 +00:00
troytt c2c139f17b feat(skill-091): implement 1.13c Lower Resist module and Vitest suite (#245) 2026-09-22 03:44:43 +00:00
troytt 8189f3c643 feat(skill-090): implement 1.13c IronGolem module and Vitest suite (#244) 2026-09-22 03:44:42 +00:00
troytt 494409e04a feat(skill-089): implement 1.13c Summon Resist module and Vitest suite (#243) 2026-09-22 03:44:40 +00:00
troytt 83bbb4abf6 feat(skill-088): implement 1.13c Bone Prison module and Vitest suite (#242) 2026-09-22 03:44:38 +00:00
troytt d7993ebc3e feat(skill-087): implement 1.13c Decrepify module and Vitest suite (#241) 2026-09-22 03:44:37 +00:00
troytt cf075924de feat(skill-086): implement 1.13c Attract module and Vitest suite (#240) 2026-09-22 03:44:35 +00:00
troytt 130c22e563 feat(skill-085): implement 1.13c BloodGolem module and Vitest suite (#239) 2026-09-22 03:44:33 +00:00
troytt 8ccee8dd3d feat(skill-084): implement 1.13c Bone Spear module and Vitest suite (#238) 2026-09-22 03:44:31 +00:00
troytt 997a4f68b9 feat(skill-083): implement 1.13c Poison Explosion module and Vitest suite (#237) 2026-09-22 03:44:29 +00:00
troytt 779f14b114 feat(skill-082): implement 1.13c Life Tap module and Vitest suite (#236) 2026-09-22 03:44:27 +00:00
troytt 9c9e093da8 feat(skill-081): implement 1.13c Confuse module and Vitest suite (#235) 2026-09-22 03:44:26 +00:00
troytt 384eac60dd feat(skill-080): implement 1.13c Raise Skeletal Mage module and Vitest suite (#234) 2026-09-22 03:44:24 +00:00
troytt 3775cfaa06 feat(skill-079): implement 1.13c Golem Mastery module and Vitest suite (#233) 2026-09-22 03:44:22 +00:00
troytt e342512ac8 feat(skill-078): implement 1.13c Bone Wall module and Vitest suite (#232) 2026-09-22 03:44:20 +00:00
troytt 5f74e58900 feat(skill-077): implement 1.13c Terror module and Vitest suite (#231) 2026-09-22 03:44:19 +00:00
troytt fabfa0ae83 feat(skill-076): implement 1.13c Iron Maiden module and Vitest suite (#230) 2026-09-22 03:44:17 +00:00
troytt 81b4cd878b feat(skill-075): implement 1.13c Clay Golem module and Vitest suite (#229) 2026-09-22 03:44:16 +00:00
troytt f46d668c00 feat(skill-074): implement 1.13c Corpse Explosion module and Vitest suite (#228) 2026-09-22 03:44:14 +00:00
troytt 729491d31f feat(skill-073): implement 1.13c Poison Dagger module and Vitest suite (#227) 2026-09-22 03:44:12 +00:00
troytt 7f05cc4669 feat(skill-072): implement 1.13c Weaken module and Vitest suite (#226) 2026-09-22 03:44:11 +00:00
troytt 1e0675195d feat(skill-071): implement 1.13c Dim Vision module and Vitest suite (#225) 2026-09-22 03:44:09 +00:00
troytt 72c2138106 feat(skill-070): implement 1.13c Raise Skeleton module and Vitest suite (#224) 2026-09-22 03:44:07 +00:00
troytt fee3778263 feat(skill-069): implement 1.13c Skeleton Mastery module and Vitest suite (#223) 2026-09-22 03:44:06 +00:00
troytt 20ad021bfa feat(skill-068): implement 1.13c Bone Armor module and Vitest suite (#222) 2026-09-22 03:44:04 +00:00
troytt 4800674898 feat(skill-067): implement 1.13c Teeth module and Vitest suite (#221) 2026-09-22 03:44:02 +00:00
troytt 400df5ed46 feat(skill-066): implement 1.13c Amplify Damage module and Vitest suite (#220) 2026-09-22 03:44:01 +00:00