fix(skill): 修复雷云风暴 (Thunder Storm #57) 施法后脚底缺少持续雷云环绕特效 (thunderstormback) 及命中敌人缺失天降闪电打击 (thunderstorm1 / LightningboltBig) 动画缺陷 #433
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
1. 缺陷概述 (Issue Summary)
在当前网页端移植版本中,法师(Sorceress)释放 24 级闪电系核心 Buff 技能 雷云风暴 (Thunder Storm, Skill ID: 57) 时,存在两项严重的视觉表现与机制缺失缺陷:
light_cast_2),完全缺失了原版暗黑2标志性的自天际垂直轰然劈下的巨大闪电落雷动画 (thunderstorm1/LightningboltBig) 及落雷音效。2. Diablo II v1.13c Ground Truth 权威数据与规范依据
严格遵循暗黑破坏神 II v1.13c 反编译逻辑与官方 MPQ 数据表(
Skills.txt,Missiles.txt,Overlay.txt,States.txt):2.1
Skills.txt(Row 57: Thunder Storm)Thunder Storm), charclass:sorthunderstorm(激活状态标识)sorceress_thunder_cast(施法音效)light_cast_2lightningthunderstorm1(权威落雷投射物定义)1, perdelay:(100-dm56) * par4/100 + par3(周期性索敌打击节奏)800(基础持续 32 秒), Param2:200(+8 秒/级)25(最小打击间隔 25 帧 = 1.0 秒), Param4:100, Param7:17(索敌半径 17 格 = 340px)2.2
Overlay.txt(Row 98 ~ 100)thunderstormcast: FilenameThunderstormCast, 10 frames, AnimRate 16, Trans 3, PreDraw 0(施法瞬态脚下雷光迸发)thunderstormback: FilenameThunderstormCast_operate, 19 frames, AnimRate 16, Trans 3, PreDraw 1(持续状态地表预绘制雷云光圈)left: -41, top: -21,完美环绕对齐角色足下地表平面。2.3
Missiles.txt(Row 166: thunderstorm1)thunderstorm1)LightningboltBigleft: -18, top: -106top: -106px的空中天际 纵向劈贯而下,直接灌击在目标怪物足部坐标上,呈现震撼的天罚落雷!sorceress_thunder_bolt(权威天降惊雷打击音效)2.4 本地静态资源已就绪状态
项目中已完整打包该技能所需的全部 DCC/CEL 元数据及纹理,但均未被运行时消费:
public/overlays/thunderstormback.json&thunderstormback.pngpublic/overlays/thunderstormcast.json&thunderstormcast.pngpublic/missiles/thunderstorm1.json&thunderstorm1.pngpublic/missiles/lightningboltbig.json&lightningboltbig.png3. 代码根因深度剖析 (Root Cause Analysis)
3.1 施法分支缺少脚底光环生成
在
src/scene/act-scene.ts约第 1752-1770 行:对比同文件中的冰甲与能量护盾:
雷云风暴此处彻底遗漏了
engine.spawnOverlay调用,未生成thunderstormcast(施法瞬态)与thunderstormback(持续循环)。3.2 周期性索敌命中仅使用地面小光斑,缺失天降落雷动画
在
src/game/engine.ts约第 602-628 行:spawnOverlay('light_cast_2', ...),light_cast_2仅为一个 5 帧的小微弱火花,误将Skills.txt的castoverlay当作打击动画。thunderstorm1(LightningboltBig) 是一个自顶向下贯穿 113px 的天降雷柱,此处完全未实例化投射物或落雷打击特效。3.3 缺少 Buff 到期清理逻辑
在
src/game/engine.ts的 Tick 循环中:当
player.thunderstormTicks <= 0时,缺乏像coldArmorTicks一样对绑定在 player 身上的thunderstormback进行ov.expired = true清理的收尾逻辑。4. 修复方案设计 (Proposed Architecture & Implementation Plan)
4.1 施法阶段:激活脚底雷云与施法光斑
在
src/scene/act-scene.ts释放 Skill 57 时:engine.spawnOverlay('thunderstormcast', { x: player.x, y: player.y }, 'player')engine.spawnOverlay('thunderstormback', { x: player.x, y: player.y }, 'player', { loop: true })4.2 打击阶段:生成
thunderstorm1天降落雷动画在
src/game/engine.ts索敌命中后:missileType: 'thunderstorm1'(对应LightningboltBig),坐标锚定在{ x: nearestMonster.x, y: nearestMonster.y },播放 8 帧垂直劈击动画。light_cast_2或lightning,并推送受击事件。sorceress_thunder_bolt打击音效。4.3 状态管理与生命周期回收
在
src/game/engine.ts中:当
player.thunderstormTicks <= 0时,扫描清理所有ov.overlayName === 'thunderstormback' && ov.casterId === 'player'的特效,确保特效与 Buff 状态完全同步。4.4 测试验证 (Verification Plan)
tests/skills/sor/skill-057-thunder-storm.test.ts,验证施法时存在thunderstormbackOverlay;tests/challenger-m4-thunder-storm-energy-shield-mastery.test.ts,断言索敌命中时生成thunderstorm1(LightningboltBig) 动画实体。Verification & Resolution Summary for Issue #433
967a545(fix(skill): implement Thunder Storm ambient aura and sky strike (Fixes #433))origin/main(branchmain).1. Implementation Details
src/game/skills.ts):thunderstorm1andthunderstormtoisHarmlessEmitterintickProjectiles.LightningboltBig, 8 frames) to play to completion.src/game/engine.ts):GameEngine.tick, when a monster is targeted by Thunder Storm periodic strike:damageMonster(this.world, nearestMonster.index, dmg).spawnOverlay('light_cast_2', ...).thunderstorm1) at monster coordinates (ttl: 8,pierce: true,damage: 0).monsterHitandmissileHitevents.thunderstormbackstate overlay when!player.thunderstormTicks || player.thunderstormTicks <= 0.src/scene/act-scene.ts):slvlfromhudManager(fallback 1) instead of staticslvl = 1.Skill 63) level and integrated multiplicative damage bonus.player.thunderstormDamageRange.tests/skills/sor/issue-433-thunder-storm-visuals.test.ts):2. Verification Results
npm run typecheck(tsc --noEmit): Passed (0 errors).tests/skills/sor/issue-433-thunder-storm-visuals.test.ts(15/15 passed)tests/skills/sor/skill-057-thunder-storm.test.ts(15/15 passed)tests/challenger-m4-thunder-storm-energy-shield-mastery.test.ts(15/15 passed)tests/challenger-m4-thunderstorm-energyshield-mastery-stress.test.ts(20/20 passed)tests/skills/sor/issue-432-buff-visual-persistence.test.ts(9/9 passed)