[Skill Parity] 强化 (Enchant) 释放后身周火焰特效 (FireEnchant) 应仅单次播放 (One-shot),而非在 buff 期间持续循环播放 (loop: true) #438
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?
问题描述 (Bug Description)
在当前游戏中,法师释放技能 强化 (Enchant, 技能 ID 52) 后,围绕在角色身周旋转升腾的火焰特效 (
FireEnchant) 会随着角色不断循环播放(每隔约 1 秒循环一次),在长达数分钟的 buff 持续期间一直存在。原版 Diablo II 1.13c 中,强化施放成功后身周升腾的火焰特效为一次性赋能/生效特效 (One-shot Cast/Application Overlay),播放完 17 帧后自然消散,绝非持续在角色身周死循环旋转的常驻火圈。
原版 1.13c 地面真理 (Diablo II 1.13c Ground Truth Invariants)
Skills.txt&Overlay.txt):Enchant(Skill ID 52,aurastate: enchant)。Overlay.txt中的enchant(Filename:FireEnchant.dc6)。Frames: 17,AnimRate: 16,Trans: 3(耗时约 1.06 秒 / 27 帧逻辑帧)。Frozen Armor、Shiver Armor、Chilling Armor)和能量护盾(Energy Shield),属于持续防护罩,在整个持续时间内需要在角色体表常驻循环显示 (loop: true)。One-shot),播放完毕后该 Overlay 即自然销毁。缺陷代码定位 (Root Cause Analysis)
施法逻辑错误开启了
loop: true:src/scene/act-scene.ts(行 1813): 此处错误传入了{ loop: true },导致引擎在动画播完第 17 帧后执行取模循环:overlay.frame = overlay.frame % overlay.maxFrames,从而无限重复播放。引擎将 Overlay 存活绑定到整个 Buff 持续时长:
src/game/engine.ts(行 651-655): 引擎误将enchantoverlay 的生命周期设计为与player.enchantTicks(数千 ticks)强绑定,进一步助长了长时间循环播放的问题。修复建议 (Proposed Fix)
src/scene/act-scene.ts中,将spawnOverlay('enchant', ...)的{ loop: true }移除(或置为{ loop: false }):engine.ts中已有完善的非循环 Overlay 逻辑:当overlay.frame >= overlay.maxFrames时,若非overlay.loop,则直接标记overlay.expired = true并过滤清理。