[Skill #059] 暴风雪 (Blizzard) — 1.13c 区域持续冰雹投射物实装规范 #400

Closed
opened 2026-09-23 10:31:18 +00:00 by troytt · 1 comment
Owner

技能规范:[Skill #059] 暴风雪 (Blizzard) — 1.13c Parity

权威真值来源:Diablo II v1.13c D2Game.dll (0x6FC63FA0, 0x6FC60CA0, 0x6FD1C960), D2Common.dll (0x6FDB9DDE), D2Client.dll (0x6FB629B0), Skills.txt, Missiles.txt, Overlay.txt, AnimData.d2


1. 核心真值参数 (Ground Truth Data)

1.1 Skills.txt 数据表定义 (Skill ID: 59)

字段 1.13c 取值 说明
skill Blizzard 技能标识
Id 59 索格林巫师 (Sorceress) 冰霜系 24 级高阶技能
charclass sor 巫师职业
skilldesc blizzard 技能描述映射
srvdofunc 28 施法服务端逻辑 (SKILLS_SrvDo28_Blizzard, VA 0x6FC63FA0)
cltdofunc 28 施法客户端表现
srvmissilea blizzardcenter 控制器投射物 (ID 158)
delay 45 施法延迟 (Cast Delay): 45 逻辑刻 (1.80 秒)
manashift 8 法力精度移位系数 (2^8 = 256, 完整 1 点法力精度)
mana 23 基础法力消耗
lvlmana 1 每级增加法力消耗
castoverlay ice_cast_3 施法者脚底召唤冰环覆盖层 (IceCastNew03.dcc, 16 帧, Trans: 3, RGB: 81, 81, 255)
Param1 7 轰炸半径: 7 次格子 (subtiles)
Param3 4 冰雹降落间隔 (Missile delay): 4 逻辑刻 (0.16 秒)
Param4 0 持续时间由 Missiles.txt 决定 (100 逻辑刻 = 4.0 秒)
Param8 5 协同加成基础比例 (每点 +5% 冰霜伤害)
HitShift 8 伤害定点数精度 (2^8 = 256)
EType cold 冰霜属性伤害
EMin / EMax 45 / 75 基础冰霜伤害下限/上限
5 阶成长 EMinLev [15, 30, 45, 55, 65] 5 阶段每级最小伤害增量
5 阶成长 EMaxLev [16, 31, 46, 56, 66] 5 阶段每级最大伤害增量
ELen 100 减速冻结时长: 100 逻辑刻 (4.00 秒)
EDmgSymPerCalc (skill('Ice Bolt'.blvl)+skill('Ice Blast'.blvl)+skill('Glacial Spike'.blvl))*par8 仅受纯基础硬点数加成,每点 +5% 冰霜伤害

1.2 Missiles.txt 级联投射物族群体系

投射物标识 ID pSrvDoFunc pCltDoFunc pCltHitFunc 存活 (Range) 速度 (Vel) 动画贴图 (CelFile) 帧数 混合 (Trans) 碰撞/爆炸行为
blizzardcenter 158 10 13 null 100 刻 (4.0s) 0 null (无形控制器) 2 1 每 4 刻按 64 点表散射 1 枚落冰,共计 25 枚
blizzard1 159 3 1 19 9 刻 (0.36s) 0 icestormfallvar01 6 1 高度 120px 垂直降落,触敌/触地引爆 blizzardexplode1
blizzard2 160 3 1 19 9 刻 (0.36s) 0 icestormfallvar02 6 1 高度 120px 垂直降落,触敌/触地引爆 blizzardexplode2
blizzard3 161 3 1 19 9 刻 (0.36s) 0 Blizzard 8 1 高度 120px 垂直降落,触敌/触地引爆 blizzardexplode3
blizzard4 162 3 1 19 9 刻 (0.36s) 0 Blizzard (复用 var3) 8 1 表现同 blizzard3,引爆 blizzardexplode1
blizzardexplode1 163 1 1 null 6 刻 (0.24s) 0 icestormimpactvar01 6 1 原地爆炸,造成范围冰伤与 100 刻减速
blizzardexplode2 164 1 1 null 6 刻 (0.24s) 0 icestormimpactvar02 6 1 原地爆炸变体 2,造成范围冰伤与 100 刻减速
blizzardexplode3 165 1 1 null 6 刻 (0.24s) 0 icestormimpactvar01 (复用 var1) 6 1 原地爆炸变体 3,造成范围冰伤与 100 刻减速

1.3 权威 64 点离散圆周坐标表 (D2Game.dll VA 0x6FD1C960, 0x6FD1CA60)

原版暴风雪落点通过 64 点离散圆周表计算方位,半径为 30 subtiles:

export const BLIZZARD_CIRCLE_X = [
  0, 2, 5, 8, 11, 14, 16, 19,
  21, 23, 24, 26, 27, 28, 29, 29,
  30, 29, 29, 28, 27, 26, 24, 23,
  21, 19, 16, 14, 11, 8, 5, 2,
  0, -2, -5, -8, -11, -14, -16, -19,
  -21, -23, -24, -26, -27, -28, -29, -29,
  -30, -29, -29, -28, -27, -26, -24, -23,
  -21, -19, -16, -14, -11, -8, -5, -2
] as const;

export const BLIZZARD_CIRCLE_Y = [
  30, 29, 29, 28, 27, 26, 24, 23,
  21, 19, 16, 14, 11, 8, 5, 2,
  0, -2, -5, -8, -11, -14, -16, -19,
  -21, -23, -24, -26, -27, -28, -29, -29,
  -30, -29, -29, -28, -27, -26, -24, -23,
  -21, -19, -16, -14, -11, -8, -5, -2,
  0, 2, 5, 8, 11, 14, 16, 19,
  21, 23, 24, 26, 27, 28, 29, 29
] as const;
  • 2:1 二等角投影大地缩放:
    X_{\text{offset}} = \frac{X_{\text{tbl}} \times 7}{30} + \text{jitter}_x
    Y_{\text{offset}} = \left(\frac{Y_{\text{tbl}} \times 7}{30} + \text{jitter}_y\right) \times 0.5

2. 数学公式与机制规则

  1. 法力消耗公式:
    \text{ManaCost}(\text{slvl}) = 23 + (\text{slvl} - 1) \times 1
    • slvl 1: 23 点法力
    • slvl 10: 32 点法力
    • slvl 20: 42 点法力
  2. 5 阶段基础冰霜伤害公式 (D2Common.dll 0x6FDB9DDE):
    • Band 1 (slvl 1–8): Min 45 + (\text{slvl}-1) \times 15, Max 75 + (\text{slvl}-1) \times 16
    • Band 2 (slvl 9–16): Min 150 + (\text{slvl}-8) \times 30, Max 187 + (\text{slvl}-8) \times 31
    • Band 3 (slvl 17–22): Min 390 + (\text{slvl}-16) \times 45, Max 435 + (\text{slvl}-16) \times 46
    • Band 4 (slvl 23–28): Min 660 + (\text{slvl}-22) \times 55, Max 711 + (\text{slvl}-22) \times 56
    • Band 5 (slvl 29+): Min 990 + (\text{slvl}-28) \times 65, Max 1047 + (\text{slvl}-28) \times 66
    • 基准伤害值:
      • slvl 1: 45 – 75
      • slvl 10: 210 – 249
      • slvl 20: 570 – 619
      • slvl 30: 1120 – 1179
  3. 协同加成 (Synergies):
    \text{Multiplier} = 1 + (\text{blvl}_{\text{Ice Bolt}} + \text{blvl}_{\text{Ice Blast}} + \text{blvl}_{\text{Glacial Spike}}) \times 0.05
    • 投入 20 点纯基础点数:1 + 20 \times 0.05 = 2.0\times (+100% 冰霜伤害)
    • 满协同 60 点:1 + 60 \times 0.05 = 4.0\times (+300% 冰霜伤害)
  4. NextDelay = 0 铁律:
    • Missiles.txt 中 Blizzard 投射物与爆炸的 NextDelay 均为 0(无全局受击无敌帧)。
    • 多个落冰重叠时可对大型目标连续独立造成全额杀伤。

3. 资产与离线烘焙规划 (Zero Runtime MPQ Invariant)

  1. DCC 提取与 PNG 烘焙清单:
    • blizzard1: data/global/missiles/icestormfallvar01.dcc (6 帧, 512x198, Trans: 1)
    • blizzard2: data/global/missiles/icestormfallvar02.dcc (6 帧, 512x195, Trans: 1)
    • blizzard3: data/global/missiles/Blizzard.dcc (8 帧, 512x307, Trans: 1)
    • blizzardexplode1: data/global/missiles/icestormimpactvar01.dcc (6 帧, 512x145, Trans: 1)
    • blizzardexplode2: data/global/missiles/icestormimpactvar02.dcc (6 帧, 512x141, Trans: 1)
  2. 别名映射:
    • blizzard4 -> blizzard3
    • blizzardexplode3 -> blizzardexplode2
  3. 施法覆盖层:
    • ice_cast_3 已经预烘焙于 public/overlays/ice_cast_3.png,直接复用 ICE_CAST_3_META。
  4. 渲染混合:
    • 全体暴风雪投射物与爆炸帧统一采用 Trans: 1 加色混合 (ctx.globalCompositeOperation = "lighter")。

4. 7 维全覆盖验证验收清单 (Acceptance Criteria)

  • 维度 1:静态数据真值校验 (Skills.txt ID 59, Missiles.txt ID 158-165, delay 45, duration 100, radius 7)
  • 维度 2:烘焙资产与别名完整性 (blizzard1..3, blizzardexplode1..2 存在于 public/missiles/, 别名映射正确, Trans: 1 加色混合)
  • 维度 3:控制器步进与时序 (100 刻总时长, 每 4 刻生成 1 枚落冰, 合计恰好 25 枚落冰)
  • 维度 4:64 点离散圆周与 2:1 椭圆修正 (严格采用 64 点表, Y 分量乘入 0.5 椭圆地面修正)
  • 维度 5:下落弹道与触地爆炸 (120px 屏幕高程, 9 刻降落至 0, 碰撞或终点派生 blizzardexplode)
  • 维度 6:5 阶伤害与协同公式 (slvl 1/10/20/30 精确匹配 45-75/210-249/570-619/1120-1179, 协同 +5%/点)
  • 维度 7:NextDelay = 0 杀伤判定 (多枚冰雹重叠命中同一目标全部计入全额伤害, 0 免疫帧)
# 技能规范:[Skill #059] 暴风雪 (Blizzard) — 1.13c Parity > **权威真值来源**:Diablo II v1.13c `D2Game.dll` (0x6FC63FA0, 0x6FC60CA0, 0x6FD1C960), `D2Common.dll` (0x6FDB9DDE), `D2Client.dll` (0x6FB629B0), `Skills.txt`, `Missiles.txt`, `Overlay.txt`, `AnimData.d2` --- ## 1. 核心真值参数 (Ground Truth Data) ### 1.1 `Skills.txt` 数据表定义 (Skill ID: 59) | 字段 | 1.13c 取值 | 说明 | | :--- | :--- | :--- | | `skill` | `Blizzard` | 技能标识 | | `Id` | `59` | 索格林巫师 (Sorceress) 冰霜系 24 级高阶技能 | | `charclass` | `sor` | 巫师职业 | | `skilldesc` | `blizzard` | 技能描述映射 | | `srvdofunc` | `28` | 施法服务端逻辑 (`SKILLS_SrvDo28_Blizzard`, VA 0x6FC63FA0) | | `cltdofunc` | `28` | 施法客户端表现 | | `srvmissilea` | `blizzardcenter` | 控制器投射物 (ID 158) | | `delay` | `45` | **施法延迟 (Cast Delay)**: 45 逻辑刻 (1.80 秒) | | `manashift` | `8` | 法力精度移位系数 ($2^8 = 256$, 完整 1 点法力精度) | | `mana` | `23` | 基础法力消耗 | | `lvlmana` | `1` | 每级增加法力消耗 | | `castoverlay` | `ice_cast_3` | 施法者脚底召唤冰环覆盖层 (`IceCastNew03.dcc`, 16 帧, Trans: 3, RGB: 81, 81, 255) | | `Param1` | `7` | **轰炸半径**: 7 次格子 (subtiles) | | `Param3` | `4` | **冰雹降落间隔 (Missile delay)**: 4 逻辑刻 (0.16 秒) | | `Param4` | `0` | 持续时间由 Missiles.txt 决定 (100 逻辑刻 = 4.0 秒) | | `Param8` | `5` | 协同加成基础比例 (每点 +5% 冰霜伤害) | | `HitShift` | `8` | 伤害定点数精度 ($2^8 = 256$) | | `EType` | `cold` | 冰霜属性伤害 | | `EMin` / `EMax` | `45` / `75` | 基础冰霜伤害下限/上限 | | 5 阶成长 `EMinLev` | `[15, 30, 45, 55, 65]` | 5 阶段每级最小伤害增量 | | 5 阶成长 `EMaxLev` | `[16, 31, 46, 56, 66]` | 5 阶段每级最大伤害增量 | | `ELen` | `100` | 减速冻结时长: 100 逻辑刻 (4.00 秒) | | `EDmgSymPerCalc` | `(skill('Ice Bolt'.blvl)+skill('Ice Blast'.blvl)+skill('Glacial Spike'.blvl))*par8` | 仅受纯基础硬点数加成,每点 +5% 冰霜伤害 | --- ### 1.2 `Missiles.txt` 级联投射物族群体系 | 投射物标识 | ID | `pSrvDoFunc` | `pCltDoFunc` | `pCltHitFunc` | 存活 (`Range`) | 速度 (`Vel`) | 动画贴图 (`CelFile`) | 帧数 | 混合 (`Trans`) | 碰撞/爆炸行为 | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- | :---: | :---: | :--- | | **`blizzardcenter`** | 158 | **10** | 13 | *null* | 100 刻 (4.0s) | 0 | *null* (无形控制器) | 2 | 1 | 每 4 刻按 64 点表散射 1 枚落冰,共计 25 枚 | | **`blizzard1`** | 159 | 3 | 1 | **19** | 9 刻 (0.36s) | 0 | `icestormfallvar01` | 6 | 1 | 高度 120px 垂直降落,触敌/触地引爆 `blizzardexplode1` | | **`blizzard2`** | 160 | 3 | 1 | **19** | 9 刻 (0.36s) | 0 | `icestormfallvar02` | 6 | 1 | 高度 120px 垂直降落,触敌/触地引爆 `blizzardexplode2` | | **`blizzard3`** | 161 | 3 | 1 | **19** | 9 刻 (0.36s) | 0 | `Blizzard` | 8 | 1 | 高度 120px 垂直降落,触敌/触地引爆 `blizzardexplode3` | | **`blizzard4`** | 162 | 3 | 1 | **19** | 9 刻 (0.36s) | 0 | `Blizzard` (复用 var3) | 8 | 1 | 表现同 blizzard3,引爆 `blizzardexplode1` | | **`blizzardexplode1`** | 163 | 1 | 1 | *null* | 6 刻 (0.24s) | 0 | `icestormimpactvar01` | 6 | 1 | 原地爆炸,造成范围冰伤与 100 刻减速 | | **`blizzardexplode2`** | 164 | 1 | 1 | *null* | 6 刻 (0.24s) | 0 | `icestormimpactvar02` | 6 | 1 | 原地爆炸变体 2,造成范围冰伤与 100 刻减速 | | **`blizzardexplode3`** | 165 | 1 | 1 | *null* | 6 刻 (0.24s) | 0 | `icestormimpactvar01` (复用 var1) | 6 | 1 | 原地爆炸变体 3,造成范围冰伤与 100 刻减速 | --- ### 1.3 权威 64 点离散圆周坐标表 (`D2Game.dll` VA 0x6FD1C960, 0x6FD1CA60) 原版暴风雪落点通过 64 点离散圆周表计算方位,半径为 30 subtiles: ```typescript export const BLIZZARD_CIRCLE_X = [ 0, 2, 5, 8, 11, 14, 16, 19, 21, 23, 24, 26, 27, 28, 29, 29, 30, 29, 29, 28, 27, 26, 24, 23, 21, 19, 16, 14, 11, 8, 5, 2, 0, -2, -5, -8, -11, -14, -16, -19, -21, -23, -24, -26, -27, -28, -29, -29, -30, -29, -29, -28, -27, -26, -24, -23, -21, -19, -16, -14, -11, -8, -5, -2 ] as const; export const BLIZZARD_CIRCLE_Y = [ 30, 29, 29, 28, 27, 26, 24, 23, 21, 19, 16, 14, 11, 8, 5, 2, 0, -2, -5, -8, -11, -14, -16, -19, -21, -23, -24, -26, -27, -28, -29, -29, -30, -29, -29, -28, -27, -26, -24, -23, -21, -19, -16, -14, -11, -8, -5, -2, 0, 2, 5, 8, 11, 14, 16, 19, 21, 23, 24, 26, 27, 28, 29, 29 ] as const; ``` - **2:1 二等角投影大地缩放**: $$X_{\text{offset}} = \frac{X_{\text{tbl}} \times 7}{30} + \text{jitter}_x$$ $$Y_{\text{offset}} = \left(\frac{Y_{\text{tbl}} \times 7}{30} + \text{jitter}_y\right) \times 0.5$$ --- ## 2. 数学公式与机制规则 1. **法力消耗公式**: $$\text{ManaCost}(\text{slvl}) = 23 + (\text{slvl} - 1) \times 1$$ - slvl 1: 23 点法力 - slvl 10: 32 点法力 - slvl 20: 42 点法力 2. **5 阶段基础冰霜伤害公式 (`D2Common.dll` 0x6FDB9DDE)**: - Band 1 (slvl 1–8): Min $45 + (\text{slvl}-1) \times 15$, Max $75 + (\text{slvl}-1) \times 16$ - Band 2 (slvl 9–16): Min $150 + (\text{slvl}-8) \times 30$, Max $187 + (\text{slvl}-8) \times 31$ - Band 3 (slvl 17–22): Min $390 + (\text{slvl}-16) \times 45$, Max $435 + (\text{slvl}-16) \times 46$ - Band 4 (slvl 23–28): Min $660 + (\text{slvl}-22) \times 55$, Max $711 + (\text{slvl}-22) \times 56$ - Band 5 (slvl 29+): Min $990 + (\text{slvl}-28) \times 65$, Max $1047 + (\text{slvl}-28) \times 66$ - 基准伤害值: - slvl 1: 45 – 75 - slvl 10: 210 – 249 - slvl 20: 570 – 619 - slvl 30: 1120 – 1179 3. **协同加成 (Synergies)**: $$\text{Multiplier} = 1 + (\text{blvl}_{\text{Ice Bolt}} + \text{blvl}_{\text{Ice Blast}} + \text{blvl}_{\text{Glacial Spike}}) \times 0.05$$ - 投入 20 点纯基础点数:$1 + 20 \times 0.05 = 2.0\times$ (+100% 冰霜伤害) - 满协同 60 点:$1 + 60 \times 0.05 = 4.0\times$ (+300% 冰霜伤害) 4. **NextDelay = 0 铁律**: - `Missiles.txt` 中 Blizzard 投射物与爆炸的 `NextDelay` 均为 0(无全局受击无敌帧)。 - 多个落冰重叠时可对大型目标连续独立造成全额杀伤。 --- ## 3. 资产与离线烘焙规划 (Zero Runtime MPQ Invariant) 1. **DCC 提取与 PNG 烘焙清单**: - `blizzard1`: `data/global/missiles/icestormfallvar01.dcc` (6 帧, 512x198, Trans: 1) - `blizzard2`: `data/global/missiles/icestormfallvar02.dcc` (6 帧, 512x195, Trans: 1) - `blizzard3`: `data/global/missiles/Blizzard.dcc` (8 帧, 512x307, Trans: 1) - `blizzardexplode1`: `data/global/missiles/icestormimpactvar01.dcc` (6 帧, 512x145, Trans: 1) - `blizzardexplode2`: `data/global/missiles/icestormimpactvar02.dcc` (6 帧, 512x141, Trans: 1) 2. **别名映射**: - `blizzard4` -> `blizzard3` - `blizzardexplode3` -> `blizzardexplode2` 3. **施法覆盖层**: - `ice_cast_3` 已经预烘焙于 `public/overlays/ice_cast_3.png`,直接复用 `ICE_CAST_3_META`。 4. **渲染混合**: - 全体暴风雪投射物与爆炸帧统一采用 `Trans: 1` 加色混合 (`ctx.globalCompositeOperation = "lighter"`)。 --- ## 4. 7 维全覆盖验证验收清单 (Acceptance Criteria) - [ ] **维度 1:静态数据真值校验** (Skills.txt ID 59, Missiles.txt ID 158-165, delay 45, duration 100, radius 7) - [ ] **维度 2:烘焙资产与别名完整性** (blizzard1..3, blizzardexplode1..2 存在于 public/missiles/, 别名映射正确, Trans: 1 加色混合) - [ ] **维度 3:控制器步进与时序** (100 刻总时长, 每 4 刻生成 1 枚落冰, 合计恰好 25 枚落冰) - [ ] **维度 4:64 点离散圆周与 2:1 椭圆修正** (严格采用 64 点表, Y 分量乘入 0.5 椭圆地面修正) - [ ] **维度 5:下落弹道与触地爆炸** (120px 屏幕高程, 9 刻降落至 0, 碰撞或终点派生 blizzardexplode) - [ ] **维度 6:5 阶伤害与协同公式** (slvl 1/10/20/30 精确匹配 45-75/210-249/570-619/1120-1179, 协同 +5%/点) - [ ] **维度 7:NextDelay = 0 杀伤判定** (多枚冰雹重叠命中同一目标全部计入全额伤害, 0 免疫帧)
Author
Owner

Blizzard (Skill #059) Implementation & Verification Complete

Status: Merged to main (commit 39de193) and verified across all dimensions.

1. Diablo II v1.13c Ground Truth Parity

  • 5-Band Damage Formula: Implemented exact 1.13c level scaling (D2Common.dll 0x6FD9DDB0 & 0x6FDBA580) across all 5 bands ([1..8], [9..16], [17..22], [23..28], [29+]) and +5%/point hard synergies (blvl only per 1.13c synergy rules).
  • Controller & Falling Shards: Missiles 158 (blizzardcenter), 159–162 (blizzard1–blizzard4), and 163–165 (blizzardexplode1–blizzardexplode3).
  • Cadence & Trajectory: 25 shards dropped over 100 ticks (cadence 4, step 13 mod 64) with 2:1 isometric aspect ratio scaling (ISO_GROUND_ASPECT_RATIO = 0.5) referencing the authoritative 64-entry circle table from D2Game.dll (0x6FD1C960 & 0x6FD1CA60).
  • NextDelay Invariant: NextDelay = 0 allowing overlapping shard sweet-spot bursts without temporary hit immunity.
  • CelFile Alignment: Corrected CANONICAL_113C_MISSILES.blizzardexplode3.celFile to icestormimpactvar02.
  • Damage Routing: Eliminated silent fallback; shards strictly inherit evaluated controller damage.

2. Asset Baking (Zero Runtime MPQ Invariant)

  • Baked blizzard1.png / blizzard2.png / blizzard3.png / blizzard4.png and JSON metadata to public/missiles/.
  • Baked blizzardexplode1.png / blizzardexplode2.png / blizzardexplode3.png and JSON metadata to public/missiles/.
  • Exported TypeScript metadata definitions in src/render/missiles-meta.ts.

3. Verification & Quality Gate Results

  • TypeScript Typecheck: Passed cleanly with 0 errors (npm run typecheck).
  • Dedicated Unit Tests: 16/16 passed (tests/skills/sor/skill-059-blizzard.test.ts & tests/blizzard-missile-113c.test.ts).
  • Challenger & Stress Tests: 24/24 passed (tests/blizzard-challenger-stress.test.ts & tests/blizzard-stress.test.ts).
    • 100,000-tick continuous simulation passed (2,223 casts, 10,653 hits, bounded heap +12.23 MB, 0 NaNs, 0 leaks).
  • Forensic Auditor: CLEAN (teamwork_preview_auditor_blizzard).
  • Reviewers: APPROVE (teamwork_preview_reviewer_blizzard_verify, teamwork_preview_reviewer_blizzard_2).
  • Challengers: APPROVE (teamwork_preview_challenger_blizzard_1, teamwork_preview_challenger_blizzard_2).

4. Lifecycle & Hygiene

  • Merged to main via --ff-only and pushed to origin/main.
  • Worktree .worktrees/skill-blizzard removed and branch feat/skill-59-blizzard deleted.
### Blizzard (Skill #059) Implementation & Verification Complete **Status**: Merged to `main` (commit `39de193`) and verified across all dimensions. #### 1. Diablo II v1.13c Ground Truth Parity - **5-Band Damage Formula**: Implemented exact 1.13c level scaling (`D2Common.dll` 0x6FD9DDB0 & 0x6FDBA580) across all 5 bands ([1..8], [9..16], [17..22], [23..28], [29+]) and +5%/point hard synergies (`blvl` only per 1.13c synergy rules). - **Controller & Falling Shards**: Missiles 158 (`blizzardcenter`), 159–162 (`blizzard1`–`blizzard4`), and 163–165 (`blizzardexplode1`–`blizzardexplode3`). - **Cadence & Trajectory**: 25 shards dropped over 100 ticks (cadence 4, step 13 mod 64) with 2:1 isometric aspect ratio scaling (`ISO_GROUND_ASPECT_RATIO = 0.5`) referencing the authoritative 64-entry circle table from `D2Game.dll` (0x6FD1C960 & 0x6FD1CA60). - **NextDelay Invariant**: `NextDelay = 0` allowing overlapping shard sweet-spot bursts without temporary hit immunity. - **CelFile Alignment**: Corrected `CANONICAL_113C_MISSILES.blizzardexplode3.celFile` to `icestormimpactvar02`. - **Damage Routing**: Eliminated silent fallback; shards strictly inherit evaluated controller damage. #### 2. Asset Baking (Zero Runtime MPQ Invariant) - Baked `blizzard1.png` / `blizzard2.png` / `blizzard3.png` / `blizzard4.png` and JSON metadata to `public/missiles/`. - Baked `blizzardexplode1.png` / `blizzardexplode2.png` / `blizzardexplode3.png` and JSON metadata to `public/missiles/`. - Exported TypeScript metadata definitions in `src/render/missiles-meta.ts`. #### 3. Verification & Quality Gate Results - **TypeScript Typecheck**: Passed cleanly with **0 errors** (`npm run typecheck`). - **Dedicated Unit Tests**: **16/16 passed** (`tests/skills/sor/skill-059-blizzard.test.ts` & `tests/blizzard-missile-113c.test.ts`). - **Challenger & Stress Tests**: **24/24 passed** (`tests/blizzard-challenger-stress.test.ts` & `tests/blizzard-stress.test.ts`). - 100,000-tick continuous simulation passed (2,223 casts, 10,653 hits, bounded heap +12.23 MB, 0 NaNs, 0 leaks). - **Forensic Auditor**: **CLEAN** (`teamwork_preview_auditor_blizzard`). - **Reviewers**: **APPROVE** (`teamwork_preview_reviewer_blizzard_verify`, `teamwork_preview_reviewer_blizzard_2`). - **Challengers**: **APPROVE** (`teamwork_preview_challenger_blizzard_1`, `teamwork_preview_challenger_blizzard_2`). #### 4. Lifecycle & Hygiene - Merged to `main` via `--ff-only` and pushed to `origin/main`. - Worktree `.worktrees/skill-blizzard` removed and branch `feat/skill-59-blizzard` deleted.
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#400
No description provided.