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
f12fd5674a
fix(skill): extend Meteor ground fire duration and add extinction decay animation ( Fixes #437 )
2026-09-24 16:17:38 +00:00
troytt
e33738d394
fix(missile): implement authentic Charged Bolt snake-like random walk kinematics ( Fixes #435 )
2026-09-24 15:55:57 +00:00
troytt
48183d3b82
feat(paladin): implement Milestone M7 Paladin Combat Skills Tree (10 skills)
2026-09-24 13:42:00 +00:00
troytt
0e70ad1662
fix(skill): implement Frost Nova 64-missile radial spread and slow ( Fixes #431 )
2026-09-24 13:18:31 +00:00
troytt
71466df5e7
fix(skill): implement Glacial Spike explosion and 64px AoE freeze ( Fixes #430 )
2026-09-24 12:23:39 +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
2e061b3257
feat(skills): implement Enchant (52) and Fire Mastery (61) with authentic 1.13c parity
...
- Implement 1.13c Enchant 5-band weapon fire damage progression (HitShift 7, Warmth 9%/blvl synergy)
- Implement Enchant Attack Rating bonus (20% + 9%/slvl) and duration (3600 + 600/slvl frames)
- Implement Fire Mastery passive fire damage bonus (30% + 7%/slvl) in stat-list and combat-pipeline
- Implement authentic Sorceress melee double-dip and ranged 33% weapon fire damage penalty
- Enforce fire immunity preservation (res >= 100% takes 0 fire damage, Fire Mastery cannot pierce)
- Wire Enchant cast skill (52) and overlay animation in act-scene and engine
- Maintain BATCH1_SKILLS invariant strictly at 38
- Add comprehensive 7-dimensional verification suites for Enchant and Fire Mastery (31 tests passing)
- Closes #206 , Closes #215
2026-09-24 03:59:47 +00:00
troytt
6aa951e8cc
fix(skills): remediate Milestone 3 gate failures for Inferno range and channeled mana drain
...
- Fix calculateInfernoRangePx to authentic 1.13c ratio: calculateInfernoRange(slvl) * 32 (32 px/subtile).
- Update act-scene.ts flame stream ttl calculation to Math.min(60, Math.round(rangePx / speed)) allowing authentic travel reach.
- Connect continuous channeled mana drain in act-scene.ts: drain (36 + slvl - 1) * 4 / 256 mana per frame with fractional accumulator, stopping channel on mana depletion.
- Update tests/skills/sor/skill-041-inferno.test.ts assertions to 320/752/1232 px and add runtime continuous mana drain tests.
- Persist adversarial stress test suites (adv-fire-m3-math-stress.test.ts and adv-fire-m3-geom-stress.test.ts).
2026-09-24 03:20:48 +00:00
troytt
df4c5b66b0
feat(skills): implement Fire Wall, Blaze, and Inferno with 1.13c parity ( closes #205 , closes #200 , closes #195 )
2026-09-24 02:46:20 +00:00
troytt
375f3296f9
feat(skills): implement Ice Blast, Glacial Spike, and Cold Mastery with 1.13c parity ( closes #199 , closes #209 , closes #219 )
2026-09-24 01:43:59 +00:00
troytt
2d6bbb93a2
fix(sor-cold): remediate number overload contract and wire reactive combat hooks (Issue #194 , #204 , #214 )
...
- Fix calculateShiverArmorDamage and calculateChillingArmorDamage number overload to treat number as allocated synergy points (synPoints) with 1.13c percentage scaling, supporting explicit options.synMultiplier override
- Guard duration and chill/freeze length calculators against negative synergy inputs with Math.max(0, synPoints)
- Wire reactive combat hooks in combat.ts (tickMonsters/updateMonsters and hitPlayerWithMissile):
* Frozen Armor: reactively freezes attacking monster upon taking physical melee damage
* Shiver Armor: proactively chills and damages attacking monster upon melee attack initiation
* Chilling Armor: reflects retaliatory chillingarmorbolt on incoming ranged missiles with returnFire=false
- Wire proactive and reactive combat events in combat-pipeline.ts (executeSUnitDmg):
* Dispatches attackedinmelee proactively before hit resolution
* Dispatches damagedinmelee post-damage on melee hits
* Dispatches hitbymissile post-damage on missile hits
* Exposes attackerStatesApplied, attackerColdDamage256, reflectedPhys256, and spawnedMissiles on SUnitDmgOutcome
- Add comprehensive remediation test suite tests/skills/sor/cold-armors-remediation.test.ts
2026-09-24 01:06:25 +00:00
troytt
e7d105dce0
feat(skills): implement Frozen Armor, Shiver Armor, and Chilling Armor with 1.13c parity ( closes #194 , closes #204 , closes #214 )
2026-09-24 00:29:57 +00:00
troytt
a0567c2473
feat(skills): implement Thunder Storm, Energy Shield, and Lightning Mastery with 1.13c parity ( closes #211 , closes #212 , closes #217 )
...
- Thunder Storm (57):
* Authentic 1.13c duration: 800 + (slvl - 1) * 200 frames (Param1=800, Param2=200).
* Hyperbolic cadence decay: Math.max(25, 125 - Math.floor((110 * slvl) / (slvl + 6))) frames.
* Range: 17 subtiles = 340px (Param7=17).
* 5-band piecewise lightning damage (1-100 base, +10/+10/+11 across bands).
* Authentic missile 'thunderstorm1' (ID 166, CelFile 'LightningboltBig', animLen 8) and cast overlay 'light_cast_2'.
* Zero synergies in 1.13c; multiplicative scaling with Lightning Mastery.
- Energy Shield (58):
* Authentic duration: 3600 + (slvl - 1) * 1500 frames (Param1=3600, Param2=1500).
* 1.13c piecewise absorb percentage: 20% lvl 1, +5% lvl 2-8, +2% lvl 9-16, +1% lvl 17+, strictly hard capped at 95% (slvl 40).
* Telekinesis hard synergy ratio: (32 - Math.min(20, Math.max(0, tkBlvl))) / 16 (2.0 down to 0.75). Hard points only (blvl); soft points ignored.
* Absorbs raw incoming damage BEFORE player resistances are applied. Remainder mitigated by player resistances.
* Poison (elemType === 'pois' || isPoison) and Open Wounds strictly bypass ES directly to HP.
* Mana depletion drains mana to 0, collapses shield, and spills unabsorbed damage to HP.
* Overlays: 'energyshield' looping body overlay and 'energyshieldhit0' directional hit overlay.
- Lightning Mastery (63):
* Passive formula: 50 + (slvl - 1) * 12 percent (+50% at lvl 1, +62% at lvl 2, +158% at lvl 10, +278% at lvl 20, +518% at lvl 40).
* Multiplicative scaling with synergies across all 5 lightning skills (Charged Bolt, Lightning, Chain Lightning, Nova, Thunder Storm): Final = Math.floor(Base * (1 + Syn/100) * (1 + Mastery/100)).
* StatList accrued stat 'passive_ltng_mastery' integration and combat pipeline executeSUnitDmg support.
- 7-Dimensional Vitest Suites:
* Full 7-D coverage for skill-057-thunder-storm.test.ts (15 tests passing).
* Full 7-D coverage for skill-058-energy-shield.test.ts (15 tests passing).
* Full 7-D coverage for skill-063-lightning-mastery.test.ts (17 tests passing).
* Invariants: BATCH1_SKILLS length strictly 38, zero runtime MPQ queries.
* Full repo test suite passing (414 test files, 4213 tests passing, 0 errors).
2026-09-23 20:33:24 +00:00
troytt
728d641646
feat(skills): implement Charged Bolt (38) and Telekinesis (43) with 1.13c parity ( #192 , #197 )
...
- Fix double-append bug in src/game/engine.ts lines 446-449
- Implement Charged Bolt (38) kinematics, NextDelay 0, 5-band damage, 32-entry discrete orthogonal jitter, and +6% Lightning synergy
- Implement Telekinesis (43) 600px range, remote object triggering, ground item pickup whitelist, 1-2 damage, 35% knockback, 35 stun ticks, and Energy Shield hard synergy
- Add comprehensive 7-Dimensional test suites for Charged Bolt (38) and Telekinesis (43)
- Verify 100% pass across all 4,175 unit tests and clean typecheck
2026-09-23 19:30:47 +00:00
troytt
6fefc684ef
feat(skills): implement Sorceress Lightning (49) & Chain Lightning (53) with 1.13c parity ( closes #203 , closes #207 )
...
- Implement 1.13c piecewise 5-band damage and +8%/+4% synergies for Lightning and Chain Lightning
- Implement authentic missile kinematics, NextDelay 4, ping-pong retargeting excluding immediate victim, and infinite beam piercing
- Wire casting overlays, 0 frame cooldown, and 1.13c mana formulas in missile-engine.ts, skills.ts, and act-scene.ts
- Add comprehensive 7-dimensional verification test suites in tests/skills/sor/ (40/40 passing)
- Full repo test suite passing: 4,140 passed, 0 failed, 0 typecheck errors
2026-09-23 18:24:28 +00:00
troytt
0e0cd3adee
feat(skills): harden 1.13c Nova and Static Field against adversarial probes ( fixes #196 , #202 )
...
- Fix ghost property resistLightning to respect monster resistances and lightningResist in act-scene.ts
- Wire monster resistances across MonsterStats and applyEliteModifiers in combat.ts and monsters.ts
- Clamp Static Field damage non-lethally post-resistance scaling and protect against difficulty floor underflow in missile-engine.ts
- Implement continuous sub-step collision and raycast line-of-sight in missile-engine.ts and skills.ts
- Add persistent NextDelay tracking on GameEngine with automatic per-tick expired entry pruning
- Align Nova (64 bolts, aspect ratio 0.5, NextDelay 4) and Static Field in executeSkillCore113c
2026-09-23 17:14:53 +00:00
troytt
35b926749e
feat(skills): implement 1.13c Nova and Static Field with 7-D test verification ( fixes #196 , #202 )
2026-09-23 16:27:57 +00:00
troytt
84c7730382
fix(skills): implement falling meteor dual sprite trajectory, frame indexing, exact tick-60 detonation, and wall collision
...
- Dual sprite falling trajectory: render falling meteor fireball (meteor) and flame tail (meteortail) descending diagonally during 60-tick countdown with additive blending
- Animation frame indexing: meteorcenter advances monotonically starting at frame 0, meteorfire plays emergence once (0..11) then loops 12..36 indefinitely
- Detonation timing: center expires and detonates at tick 60 exact (isExpired when ttl <= 1)
- Wall collision: drop meteorfire ground patches landing inside solid walls in MissileEngine
- Full test coverage: Dimensions 8 & 9 added to skill-056-meteor.test.ts, stress and adversarial test suites verified
2026-09-23 13:06:24 +00:00
troytt
96eee679b4
feat(skills): implement Skill #056 Meteor with 1.13c ground truth parity (Ref #401 )
2026-09-23 12:36:17 +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
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
c3bb79e403
feat(skills): implement Frozen Orb with 1.13c parity and visual assets
2026-09-23 08:07:47 +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
550787cb0a
feat(engine): implement R1 universal 1.13c skill engine, 7-class renderer, arena harness, and M2/E2E suites
2026-09-22 03:22:02 +00:00