fix(skill): 修复九头海蛇 (Hydra #62) 缺失海蛇实体与动画 (仅显示三个色块黄点) 以及未实装最大召唤数量上限缺陷 #436
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)
当前网页端实现中,女巫 30 级核心火焰召唤技能 九头海蛇 (Hydra, Skill ID: 62) 存在两项破坏游戏表现与机制平衡的严重缺陷:
renderer.drawSolid矩形),完全没有原版标志性的从地表岩浆火坑中破土钻出的三头火蛇实体、摇曳身躯以及张嘴喷射火弹的完整 DCC 动画;2. Diablo II v1.13c Ground Truth 权威数据与机制分析
严格依据暗黑破坏神 II v1.13c 官方数据表(
Skills.txt,Overlay.txt,MonStats.txt,PetType.txt)及底层召唤物管线:2.1
Skills.txt(Row 62: Hydra)hydra1(对应的召唤物生物代码)hydra(宠物/召唤物分组类型)S2(召唤出现模式为 S2: Special 2 - 钻出地表动画)S140(1.6s 施法延迟), Param1:250(持续时间 10 秒)2.2
Overlay.txt(Rows 174 ~ 182) 地表岩浆火坑特效原版九头海蛇生成时,地面三个蛇头基座位置有完整的岩浆火焰 Overlay:
hydra_start1..3: CelFileHydraGroundFireStart(16 帧,地表裂开喷火)hydra_loop1..3: CelFileHydraGroundFire(20 帧,持续循环地表岩浆烈火)hydra_end1..3: CelFileHydraGroundFireEnd(16 帧,地表火焰熄灭闭合)(-6, -11),Head 2:(0, -7),Head 3:(+4, -15)2.3
MonStats.txt/ 召唤物动画模态 (DCC Models)在原版中,海蛇由三只独立的蛇头怪组成:
hydra1(Token:HX),hydra2(Token:21),hydra3(Token:HZ)hydra(firebolt) 火弹;2.4 上限规则与 FIFO 淘汰机制 (Summon Cap & FIFO Eviction)
3. 当前代码根因剖析 (Root Cause Analysis)
3.1 渲染管线使用占位
drawSolid硬编码色块替代了动画在
src/scene/act-scene.ts(第 4420–4432 行):3.2 施法逻辑绕过召唤物管理,无上限与淘汰检测
在
src/scene/act-scene.ts(第 1827–1845 行):src/game/engine/summon-manager.ts(其内部原本具备完整的petmax与 FIFO 淘汰机制),而是把海蛇当作 3 个匿名的普通投射物硬塞进engine.projectiles;push,从未检查场上已存在的isTurret或hydra_turret数量,因此完全没有最大数量上限限制,老海蛇也不会被替换淘汰。4. 修复与对齐方案设计 (Proposed Architecture & Implementation Plan)
4.1 引入海蛇实体外观与地表火 Overlay 表现
Overlay.txt中定义的hydra_loop1..3(或HydraGroundFire)循环底座特效,锚定在三个偏移点(-6, -11),(0, -7),(+4, -15);renderer.drawSolid占位色块,真实还原暗黑2经典海蛇视觉体验。4.2 实装最大召唤上限与先进先出 (FIFO) 淘汰机制
MAX_ACTIVE_HYDRAS = 6(即最大 6 组,共 18 个活动蛇头);engine.projectiles中标记为missileType === 'hydra_turret'的海蛇,按施放批次(或组 ID)排序;MAX_ACTIVE_HYDRAS时,找到最老的一组海蛇(3 个蛇头),将其ttl立即置为 0(或标记过期退出),完成 FIFO 淘汰;4.3 单元测试与验证计划 (Verification Plan)
tests/hydra-missile-113c.test.ts,连续执行 7 次castSkill(62, ...);6 * 3 = 18个,第 1 次施放的海蛇在第 7 次施放后被正确淘汰销毁。