troytt
6f935bccf6
feat(debug): add monster density and elite chance selectors to acts.html ( Fixes #450 )
2026-09-24 14:50:27 +00:00
troytt
ff2d091254
feat(paladin): implement Milestone M8 Paladin Offensive Auras tree
...
- Implement 1.13c exact calculators for all 10 Paladin Offensive Auras in skills.ts:
- Might (98): Party physical %ED (40% + 10%/lvl)
- Holy Fire (102): Radial fire pulse + weapon added fire damage, Resist Fire (+18%) and Salvation (+6%) synergies
- Thorns (103): Melee physical reflection (250% + 40%/lvl), physical resistance mitigation, PvP 1/4th penalty
- Blessed Aim (108): Active party %AR, +5% passive AR per hard point even when inactive
- Concentration (113): Party %ED, 20% uninterrupted attack chance, +50% Blessed Hammer synergy
- Holy Freeze (114): Continuous enemy slow (25%..54%), CBF bypass, cold pulse + weapon cold damage, synergies
- Holy Shock (118): Radial lightning pulse (1..max), weapon lightning damage, Resist Lightning (+12%) and Salvation (+4%) synergies
- Sanctuary (119): Radial magic pulse + knockback vs Undead, sets Undead physical resistance to 0%, %ED vs Undead
- Fanaticism (122): Caster IAS, %AR, asymmetric caster %ED vs ally %ED (strictly half)
- Conviction (123): Enemy defense % and elemental resistance reduction (-30%..-150%), 1/5th immunity breaking (-6%..-30%), zero impact on Poison/Magic, caster immunity
- Engine integrations:
- stat-list.ts: Blessed Aim passive AR (blvl * 5%)
- combat-pipeline.ts: Sanctuary Undead phys res zeroing, Thorns PvP reflection, Fanaticism caster/ally split, Concentration uninterrupted chance, added weapon elemental damage
- state-bus.ts: Thorns melee reflection trigger
- aura-scanner.ts: 50-tick cadence in 2:1 isometric ground space
- per-skill modules: re-export calculators for skills 98-123
- Add comprehensive test suites:
- tests/skills/pal/offensive-auras.test.ts (21 tests)
- tests/skills/pal/adv-pal-auras-stress.test.ts (5 adversarial scenarios)
- Preserve BATCH1_SKILLS length invariant strictly at 38 skills
2026-09-24 14:34:31 +00:00
troytt
967a545116
fix(skill): implement Thunder Storm ambient aura and sky strike ( Fixes #433 )
2026-09-24 14:29:45 +00:00
troytt
a7110143fc
fix(monsters): enforce 1.13c champion [2,4] and unique [3,6] minion pack sizes ( Fixes #448 )
2026-09-24 14:01:16 +00:00
troytt
d9ad6df63f
fix(skill): preserve buff visual persistence and enforce armor mutual exclusion ( Fixes #432 )
2026-09-24 13:55:10 +00:00
troytt
48183d3b82
feat(paladin): implement Milestone M7 Paladin Combat Skills Tree (10 skills)
2026-09-24 13:42:00 +00:00
troytt
62f4b4172e
fix(monsters): align monster density and champion/unique elite generation with 1.13c Levels.txt ( Fixes #448 )
2026-09-24 13:26:34 +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
e3a7918a16
fix(ground): hover ground item reveals label & fix grand charm flippy sprite ( Fixes #447 , Fixes #452 )
...
- Hover ground item icon reveals authentic name label without needing Alt key (Fixes #447 )
- Connect SceneMouseController pointermove/pointerleave with GroundLabelOverlay hover callback and ladder layout rendering
- Correct Grand Charm (cm3) and Gheed's Fortune ground flippy sprite mapping to flpchm3 (Fixes #452 )
- Correct Small Charm (cm1) and Large Charm (cm2) default flippy mappings to flpchm1 and flpchm2
- Add 1.13c charm ground flippy resolution tier and Chinese semantic fallbacks in resolveGroundItemSpriteRect
- Add comprehensive vitest suites in tests/charm-ground-flippy-parity.test.ts and tests/ground-items-alt-labels.test.ts
2026-09-24 13:06:15 +00:00
troytt
af2671c14a
fix(ground): resolve monster-drop ground sprites from padded .d2s item codes
...
Pipeline-built Items carry code as the 4-byte space-padded .d2s field
('dr3 '), so the codeToFlippyFile lookup missed and every drop fell through
to the inventory-size guess (2x2 -> invbox, the Horadric Cube). Picking the
item up rebuilt it via itemToUiInventoryItem, which is why re-dropping
looked correct. Normalize the code (trim, fall back to base.id) in both
resolveItemSpriteRect and resolveGroundItemSpriteRect.
Adds tests/ground-drop-sprite.test.ts: raw-drop sprite == post-pickup sprite
for 400 Act 1 Champ A rolls, and every droppable base with a baked flippy
resolves to it directly.
2026-09-24 12:30:30 +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
0aa6c3680d
feat(paladin): Milestone M6 — 1.13c Paladin assets packaging & metadata registry
...
- Update scripts/pack-missiles.ts with Paladin missiles (fistoftheheavensbolt, foa, blessedhammerex, blood1) with trans: 1 and dark border suppression max(r,g,b) <= 4 -> alpha = 0.
- Update scripts/pack-overlays.ts with 16 Paladin combat, cast, hit, and state overlays (charge, conversion, conversioncast, holy_bolt_cast, fist_of_the_heavens_cast, handofgod, sanctuary_knockback, holy_fire_hit, holy_fire_indicate, thorns_hit, thorns_indicate, cast_resistfire, cast_resistcold, cast_resistlight, cast_resistall, stun) with preDraw flags and trans: 3 dark halo thresholding.
- Bake and mirror assets across public/ and samples/d2-packs/.
- Generate compile-time metadata in src/render/missiles-meta.ts and src/render/overlays-meta.ts with zero runtime MPQ invariant.
- Add comprehensive unit tests in tests/skills/pal/pal-assets.test.ts.
- Add adversarial coverage audit tests in tests/skills/pal/adv-pal-assets-audit.test.ts.
- Resolves Gitea issue #445 .
2026-09-24 11:30:34 +00:00
troytt
ef86fc55f3
test(drop): end-to-end deterministic drop tests and headless browser audit ( Fixes #408 )
2026-09-24 11:13:35 +00:00
troytt
a19ded4c7b
Merge branch 'fix/cave-darkness-tuning'
2026-09-24 10:46:43 +00:00
troytt
c079ea4cb4
fix(lighting): calibrate isometric sub-tile torch radii and cave quadratic falloff
2026-09-24 10:46:30 +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
b5754c0197
feat(ui): drop item to ui inventory item bridge, bilingual tooltip, and pickup loop ( Fixes #407 )
2026-09-24 10:36:23 +00:00
troytt
5079f364ec
feat(ui): add interactive scene lighting selector (#lighting) after variant selector in acts.html
...
- Add <select id="lighting"> in acts.html right after #variant with 9 lighting modes:
* auto: 自动 (原版 1.13c)
* noon: 正午 (明亮日光)
* morning: 清晨 (晨曦暖金)
* sunset: 黄昏 (暮色紫金)
* night: 午夜 (幽暗蓝月)
* cave: 深渊地牢 (火炬暗黑)
* hell: 地狱血月 (第四幕猩红)
* eclipse: 蚀日之咒 (幽蓝暗蚀)
* off: 关闭光照 (全亮无光影)
- Wire real-time zero-reload switching via switchLighting() in act-scene.ts and sync URL ?lighting= query param
2026-09-24 10:20:18 +00:00
troytt
cef09dbd81
fix(ground): synchronize act-scene renderStarted with simulation clock domain and guard bounce height
2026-09-24 09:39:10 +00:00
troytt
1568fcbd10
feat(ground): monster loot and gold ground spawning, isometric scatter, and flippy bounce ( Fixes #406 )
2026-09-24 09:39:09 +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
8a9970aa31
Merge branch 'fix/lighting-visual-artifacts' into main: resolve wall black-hole self-occlusion, clear-color seam, cave torch emitters, and vertical UV shift
2026-09-24 09:16:28 +00:00
troytt
536a712816
fix(lighting): resolve wall black-hole self-occlusion, clear-color seam, torch emitters, and vertical UV shift
...
- LightGrid Radial Ray-Marching (src/game/engine/light-grid.ts):
* Only count line-of-sight blockers (COLLIDE_VISIBLE | COLLIDE_DOOR) in updateObstacles
so floor rocks, stairs, and walkable blockers do not create dark spots.
* Trace radial rays from emitter to target cell (1 <= s < steps) so the emitter's
own cell is never self-occluded when hugging a wall, wall front-faces receive full
illumination, and authentic shadows are cast behind walls.
- Ground-Plane Vertical Elevation Compensation (src/render/renderer.ts):
* Encode vertical sprite elevation (elevationY) in top quad vertices while strictly
preserving the 10-float vertex stride (FLOATS_PER_VERTEX = 10) so upright walls,
objects, characters, and monsters sample the lightmap at their ground footprint.
- Scene Lighting & Clear Color Parity (src/scene/act-scene.ts):
* Set canvas clear color to pure pitch black [0, 0, 0] when lighting is enabled,
eliminating #08080a diamond void bands around cave boundaries.
* Scale light radii by SUB_TILES_PER_LIGHT_CELL (8 sub-tiles per cell: player torch 88).
* Register Objects.txt Lit0..2 emitters (TO, T1, T2, FB, B2, WP, SH, etc.) for cave torches.
* Map all spell skillIds (including Glacial Spike '55') for dynamic projectile lighting.
2026-09-24 09:14:35 +00:00
troytt
3aae6d164c
fix(drops): prevent TC group ascending sub-sequence spillover and restore expansion row for verify:monsters
2026-09-24 08:39:48 +00:00
troytt
ebaa22e26d
feat(drops): implement monster & superunique treasure class resolution ( Fixes #405 )
2026-09-24 08:39:48 +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
f424a92a1d
Merge branch 'feat/lighting-system' into main: Diablo II v1.13c Glide dynamic lighting system
...
- P0: Trans === 1 missile additive blending, || 255 stripped, 136-level lighting metadata
- P1: D2Client dLightMap.c & D2Common D2Environment.cpp reverse engineering
- P1: LightGrid (48x48 integer dynamic lightmap, Alpha-Max-Plus-Beta-Min falloff, obstacle attenuation)
- P1: Environment (25Hz day/night solar sine cycle, Act IV targets, indoor static levels)
- P1: WebGL2 multi-texture shader pipeline, zero vertex stride changes (FLOATS_PER_VERTEX = 10)
- P1: Full act-scene integration with player torch, missiles, explosions, additive objects, unshaded minimap overlay
2026-09-24 08:21:04 +00:00
troytt
b51d839d8c
feat(lighting): implement authentic Diablo II v1.13c Glide dynamic lighting system
...
- P0 Data Contract Fixes:
* Fix missile additive blending to use authentic 1.13c Missiles.txt trans === 1
* Strip developmental || 255 fallback from color channels to preserve authentic 0 values
* Add full 136-level lighting metadata from Levels.txt in levels-meta.ts
* Wire MonStats2 and Overlay lighting in data-registry.ts
- P1 Reverse Engineering & Math Specification:
* Reverse engineer D2Client.dll (dLightMap.c) and D2Common.dll (D2Environment.cpp)
* Implement Alpha-Max-Plus-Beta-Min fast Euclidean distance approximation
* Implement 16.16 fixed-point linear falloff and obstacle attenuation
* Implement intensity-weighted color blending with reciprocal lookup table
- P1 Core Modules:
* LightGrid: 48x48 cell dynamic lightmap with sub-tile bilinear interpolation and RGBA8 export
* Environment: 25Hz day/night clock, outdoor solar sine curve, Act IV targets, indoor static levels
- P1 Shader & Renderer Integration:
* Maintain strict 10-float vertex stride (FLOATS_PER_VERTEX = 10)
* Transform screen coordinates to sub-tiles in vertex shader for v_lightUv
* Glide diffuse modulation in fragment shader with additive blend bypass
* Lazy 48x48 lightmap texture allocation ensuring zero overhead for unlit contexts
* Single-pass draw call batching maintained (drawCalls === 1)
- P1 Scene Integration & Verification:
* Wire LightGrid and Environment into act-scene.ts
* Add player torch with subtle flicker, missile lights, explosion flashes, and additive objects
* Unshaded minimap overlay by resetting lighting prior to minimap.draw
* Add comprehensive test suites: data-contract-lighting, light-grid, scene-lighting
2026-09-24 08:02:29 +00:00
troytt
f64440c378
fix(combat): resolve static typecheck errors and event double-clear race ( Fixes #404 )
2026-09-24 07:18:35 +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
94bc8d78b0
Merge pull request 'fix(waypoint): 修复冰冷之原等 14 处场景小站未渲染缺陷并消除全量跨幕 ID 冲突 ( #409 )' ( #429 ) from fix/issue-409-waypoint-rendering into main
2026-09-24 06:49:37 +00:00
troytt
7f2dff56ee
feat(combat): fix kill event lifecycle & single-drop gate ( Fixes #404 )
2026-09-24 06:15:36 +00:00
troytt
acdeef7daa
fix(waypoint): 修复冰冷之原等14处场景小站未渲染缺陷并消除全量跨幕ID冲突 ( #409 )
...
- 在 object-lookup.ts 中导出权威小站判定辅助函数 isWaypointDs1Object 与 isWaypointObjectsTxtId
- 根除 wilderness.ts 中跨幕混淆的 ALL_WAYPOINT_IDS 扁平集合,使用 isWaypointDs1Object 精确识别预设小站
- 修复 maze.ts 中神秘避难所(Level 74)中心房变体被 assignVariants 覆盖重置的问题,确保 SanctNSEW4.ds1 与小站实体完好保留
- 修复 maze.ts 中迷宫房间内部嵌入小站实体的按幕精确识别与坐标统计
- 完善 pack-act-assets.ts,通过 isWaypointObjectsTxtId 识别 Objects.txt 行号 38(WT,ExpansionWildernessWaypoint),消除亚瑞特高原(Level 112)贴图与交互坐标脱节问题
- 在 verify-packs.ts 中新增全量 39 个小站场景 109 个变体的严格 Ground-Truth Invariant 断言(source 必须为 'object' 且 scene.objects 必含渲染实体)
- 新增 tests/waypoint-fidelity-regression.test.ts 专项全量回归测试套件并更新基线哈希
Closes #409
2026-09-24 06:10:49 +00:00
troytt
51acb0effa
test(skills): persist M4 fire and M5 cross-tree adversarial stress test suites on main
2026-09-24 04:28:37 +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
10ef14b5b2
test(skills): persist M2 cold adversarial stress test suites on main
2026-09-24 02:44:18 +00:00
troytt
2ac10a38e3
feat(ui): organize left and right speedbar skill selection by skill tree rows ( closes #402 )
...
- Group speedbar skills into dedicated horizontal rows by 1.13c ListRow/SkillPage categories:
- Row 0: Universal actions (Attack 0, Throw 2, Unsummon 3, Left Hand Throw 4)
- Rows 1..3: Class skill tree tabs (Tab 1, Tab 2, Tab 3)
- Row 4: Item and charged skills (Townportal, Identify, charged items)
- Compact unlearned or empty tree rows contiguously without blank spacing
- Enforce strict 1.13c left-click filtering (83 active leftskill=1 skills; 26 passives and all auras excluded)
- Orient left popup upward-rightward and right popup upward-leftward with 800x600 canvas clamping
- Sort intra-row skills by reqlevel ascending then skillId ascending
- Add comprehensive 7-class parity test suite covering grouping, compaction, filtering, and geometry
2026-09-24 02:44:09 +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
617fdfec51
test(skills): persist M3 and M4 adversarial stress test suites on main
2026-09-23 21:00:53 +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
72b9f9e7ec
feat(assets): bake 9 missing missile and 9 overlay DCC sprite atlases with dark border thresholding (Milestone M0)
2026-09-23 15:11:21 +00:00
troytt
c2e4c5b067
Merge branch 'feat/refactor-transparency'
2026-09-23 14:30:19 +00:00
troytt
a8295c265d
feat(render): refactor transparency and blend modes for light beams and monsters
2026-09-23 14:29:50 +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
39de19364f
fix(skills): route Blizzard damage calculation, eliminate shard silent fallback, and correct blizzardexplode3 celFile (Ref #400 )
2026-09-23 11:35:28 +00:00
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
troytt
3b6b03b90c
chore(m5): stabilize full-suite test timeouts and track project/test docs
2026-09-22 04:20:32 +00:00
troytt
56619c83f3
feat(ui): implement authentic D2 dynamic cursor and idle state machine ( Fixes #148 )
2026-09-22 04:02:49 +00:00
troytt
05f1ae0d18
feat(ui): implement authentic D2 dynamic cursor and idle state machine ( Fixes #148 )
2026-09-22 04:01:53 +00:00
troytt
c5242c93b7
feat(skill-350): implement 1.13c Delerium Change module and Vitest suite ( #374 )
2026-09-22 03:48:40 +00:00
troytt
468cf5d05e
feat(skill-280): implement 1.13c Royal Strike module and Vitest suite ( #373 )
2026-09-22 03:48:38 +00:00
troytt
2f2116f9fd
feat(skill-279): implement 1.13c Shadow Master module and Vitest suite ( #372 )
2026-09-22 03:48:36 +00:00
troytt
2d558698dc
feat(skill-278): implement 1.13c Venom module and Vitest suite ( #371 )
2026-09-22 03:48:34 +00:00
troytt
7b8f954d32
feat(skill-277): implement 1.13c Blade Shield module and Vitest suite ( #370 )
2026-09-22 03:48:32 +00:00
troytt
dee07295b2
feat(skill-276): implement 1.13c Death Sentry module and Vitest suite ( #369 )
2026-09-22 03:48:30 +00:00
troytt
80e1af9cf4
feat(skill-275): implement 1.13c Dragon Flight module and Vitest suite ( #368 )
2026-09-22 03:48:29 +00:00
troytt
8d30d0b6ed
feat(skill-274): implement 1.13c Blades of Ice module and Vitest suite ( #367 )
2026-09-22 03:48:27 +00:00
troytt
3170f0aa68
feat(skill-273): implement 1.13c Mind Blast module and Vitest suite ( #366 )
2026-09-22 03:48:25 +00:00
troytt
a0e46c9046
feat(skill-272): implement 1.13c Inferno Sentry module and Vitest suite ( #365 )
2026-09-22 03:48:23 +00:00
troytt
fed2fc6688
feat(skill-271): implement 1.13c Lightning Sentry module and Vitest suite ( #364 )
2026-09-22 03:48:21 +00:00
troytt
e91554764f
feat(skill-270): implement 1.13c Dragon Tail module and Vitest suite ( #363 )
2026-09-22 03:48:18 +00:00
troytt
5d33bf09ae
feat(skill-269): implement 1.13c Claws of Thunder module and Vitest suite ( #362 )
2026-09-22 03:48:16 +00:00
troytt
8829f881c8
feat(skill-268): implement 1.13c Shadow Warrior module and Vitest suite ( #361 )
2026-09-22 03:48:14 +00:00
troytt
9bc13289d4
feat(skill-267): implement 1.13c Fade module and Vitest suite ( #360 )
2026-09-22 03:48:12 +00:00
troytt
50725f335b
feat(skill-266): implement 1.13c Blade Fury module and Vitest suite ( #359 )
2026-09-22 03:48:11 +00:00
troytt
bdcb2af7d1
feat(skill-265): implement 1.13c Cobra Strike module and Vitest suite ( #358 )
2026-09-22 03:48:09 +00:00
troytt
9fe4c77754
feat(skill-264): implement 1.13c Cloak of Shadows module and Vitest suite ( #357 )
2026-09-22 03:48:07 +00:00
troytt
53b2f6c9c8
feat(skill-263): implement 1.13c Weapon Block module and Vitest suite ( #356 )
2026-09-22 03:48:05 +00:00
troytt
76a3cf17f9
feat(skill-262): implement 1.13c Wake of Fire Sentry module and Vitest suite ( #355 )
2026-09-22 03:48:03 +00:00
troytt
cf444ded20
feat(skill-261): implement 1.13c Charged Bolt Sentry module and Vitest suite ( #354 )
2026-09-22 03:48:02 +00:00
troytt
4c20bf9fb9
feat(skill-260): implement 1.13c Dragon Claw module and Vitest suite ( #353 )
2026-09-22 03:48:00 +00:00
troytt
3b23f61791
feat(skill-259): implement 1.13c Fists of Fire module and Vitest suite ( #352 )
2026-09-22 03:47:58 +00:00
troytt
190a0c5537
feat(skill-258): implement 1.13c Quickness module and Vitest suite ( #351 )
2026-09-22 03:47:56 +00:00
troytt
039ca21ba5
feat(skill-257): implement 1.13c Blade Sentinel module and Vitest suite ( #350 )
2026-09-22 03:47:54 +00:00
troytt
72570aa522
feat(skill-256): implement 1.13c Shock Field module and Vitest suite ( #349 )
2026-09-22 03:47:52 +00:00
troytt
8dcd62df87
feat(skill-255): implement 1.13c Dragon Talon module and Vitest suite ( #348 )
2026-09-22 03:47:50 +00:00
troytt
e7c09b2e62
feat(skill-254): implement 1.13c Tiger Strike module and Vitest suite ( #347 )
2026-09-22 03:47:48 +00:00
troytt
5b2189a72e
feat(skill-253): implement 1.13c Psychic Hammer module and Vitest suite ( #346 )
2026-09-22 03:47:47 +00:00
troytt
ac9984dcc0
feat(skill-252): implement 1.13c Claw Mastery module and Vitest suite ( #345 )
2026-09-22 03:47:45 +00:00
troytt
0e30660401
feat(skill-251): implement 1.13c Fire Trauma module and Vitest suite ( #344 )
2026-09-22 03:47:43 +00:00
troytt
67d92834ca
feat(skill-250): implement 1.13c Hurricane module and Vitest suite ( #343 )
2026-09-22 03:47:42 +00:00
troytt
a32a8b21c4
feat(skill-249): implement 1.13c Armageddon module and Vitest suite ( #342 )
2026-09-22 03:47:40 +00:00
troytt
ddc040cc90
feat(skill-248): implement 1.13c Fury module and Vitest suite ( #341 )
2026-09-22 03:47:38 +00:00
troytt
996f8edff9
feat(skill-247): implement 1.13c Summon Grizzly module and Vitest suite ( #340 )
2026-09-22 03:47:36 +00:00
troytt
022375e1a3
feat(skill-246): implement 1.13c Spirit of Barbs module and Vitest suite ( #339 )
2026-09-22 03:47:35 +00:00
troytt
25b8330b06
feat(skill-245): implement 1.13c Tornado module and Vitest suite ( #338 )
2026-09-22 03:47:31 +00:00
troytt
493fe0646f
feat(skill-244): implement 1.13c Volcano module and Vitest suite ( #337 )
2026-09-22 03:47:30 +00:00
troytt
3adf8224d6
feat(skill-243): implement 1.13c Shock Wave module and Vitest suite ( #336 )
2026-09-22 03:47:28 +00:00
troytt
75c9aee478
feat(skill-242): implement 1.13c Hunger module and Vitest suite ( #335 )
2026-09-22 03:47:26 +00:00
troytt
7e06e2e64d
feat(skill-241): implement 1.13c Vines module and Vitest suite ( #334 )
2026-09-22 03:47:24 +00:00