[Skill #041] [SOR] Inferno (1.13c Parity) #195

Closed
opened 2026-09-22 02:40:05 +00:00 by troytt · 3 comments
Owner

Diablo II: Lord of Destruction v1.13c Skill Parity Specification

Field Value
Skill ID 41 (#041)
Skill Name Inferno (skilldesc: inferno)
Class sor (Sorceress)
Required Level (reqlevel) 6
Prerequisites (reqskill1..3) -, -, -
Isolated Implementation Module src/game/skills/impl/sor/skill-041-inferno.ts
Isolated Vitest Suite tests/skills/sor/skill-041-inferno.test.ts

1. Authoritative 1.13c Skills.txt Function & Handler Dispatch

Function Slot 1.13c Value
srvstfunc (Server Start / Pre-Cast) 11
srvdofunc (Server Action Frame 0x01/0x02) 19
srvprgfunc1..3 (Progressive Charge Release) - / - / -
cltstfunc / cltdofunc (Client Start / Action) 15 / 24
cltprgfunc1..3 (Client Progressive Release) - / - / -
passive / checkfunc passive=- / checkfunc=-
auraevent1 / auraeventfunc1 - / -

2. Associated Missiles, States, Auras, Curses & Summons

Subsystem 1.13c Configuration
Server Missiles (srvmissile / a..c) - / a:infernoflame1, b:infernoflame1, c:infernoflame1
Client Missiles (cltmissile / cltmissilea) - / infernoflame1
Aura / Buff States (aurastate / auratgtstate) self:- / tgt:-
Aura / Buff Stats (aurastat1..3) -, -, -
Passive State & Stats (passivestate / passivestat1..3) state:- / -, -, -
Curse Priority (cursetype) -
Summon / Pet (summon / pettype / petmax) mon:- / type:- / max:-

3. 1.13c Base Numerical & Synergy Formulas (Patch_D2.mpq)

  • Mana Cost: mana=36, lvlmana=1 (256-fixed-point << HitShift)
  • Physical / Elemental Damage: MinDam=-, MaxDam=-, EType=fire, EMin=32, EMax=64, ELen=-
  • AST calc1..4: calc1=ln12/2, calc2=20, calc3=-, calc4=-
  • Synergy Calculations (blvl strictly base allocated STAT_SKILLPTS only):
    • EDmgSymPerCalc: (skill('Warmth'.blvl))*par8
    • DmgSymPerCalc: -
    • ELenSymPerCalc: -

4. R3 Verification & Merge Checklist

  • Isolated Git Worktree: Created via git worktree add ../wt-skill-41 -b feat/skill-41 from main.
  • 1.13c Implementation: src/game/skills/impl/sor/skill-041-inferno.ts implements exact 1.13c srvstfunc/srvdofunc/srvprgfunc & numerical evaluation.
  • Automated Unit & Numerical Tests (slvl 1, 10, 20 + blvl Synergies): tests/skills/sor/skill-041-inferno.test.ts passes 100% in Vitest verifying ManaCost, MinDmg, MaxDmg, ToHit, Duration, Radius, synergy scaling, and runtime combat/missile/state/summon effect.
  • Real-Browser Casting & Screenshot: Executed in headless Chromium (acts.html?arena=1&class=sor&skill=41&slvl=20&autocast=1) with zero console/page errors and PNG screenshot attached to this Issue.
  • Merge & Cleanup: Merged to main with fixes #<issue_number>, pushed to origin/main, verified Issue is closed, and removed worktree ../wt-skill-41 + branch feat/skill-41.
## Diablo II: Lord of Destruction v1.13c Skill Parity Specification | Field | Value | |---|---| | **Skill ID** | `41` (`#041`) | | **Skill Name** | **Inferno** (`skilldesc: inferno`) | | **Class** | `sor` (Sorceress) | | **Required Level (`reqlevel`)** | `6` | | **Prerequisites (`reqskill1..3`)** | `-`, `-`, `-` | | **Isolated Implementation Module** | `src/game/skills/impl/sor/skill-041-inferno.ts` | | **Isolated Vitest Suite** | `tests/skills/sor/skill-041-inferno.test.ts` | --- ### 1. Authoritative 1.13c `Skills.txt` Function & Handler Dispatch | Function Slot | 1.13c Value | |---|---| | **`srvstfunc`** (Server Start / Pre-Cast) | `11` | | **`srvdofunc`** (Server Action Frame `0x01`/`0x02`) | `19` | | **`srvprgfunc1..3`** (Progressive Charge Release) | `-` / `-` / `-` | | **`cltstfunc` / `cltdofunc`** (Client Start / Action) | `15` / `24` | | **`cltprgfunc1..3`** (Client Progressive Release) | `-` / `-` / `-` | | **`passive` / `checkfunc`** | `passive=-` / `checkfunc=-` | | **`auraevent1` / `auraeventfunc1`** | `-` / `-` | ### 2. Associated Missiles, States, Auras, Curses & Summons | Subsystem | 1.13c Configuration | |---|---| | **Server Missiles (`srvmissile` / `a..c`)** | `-` / `a:infernoflame1`, `b:infernoflame1`, `c:infernoflame1` | | **Client Missiles (`cltmissile` / `cltmissilea`)** | `-` / `infernoflame1` | | **Aura / Buff States (`aurastate` / `auratgtstate`)** | `self:-` / `tgt:-` | | **Aura / Buff Stats (`aurastat1..3`)** | `-`, `-`, `-` | | **Passive State & Stats (`passivestate` / `passivestat1..3`)** | `state:-` / `-`, `-`, `-` | | **Curse Priority (`cursetype`)** | `-` | | **Summon / Pet (`summon` / `pettype` / `petmax`)** | `mon:-` / `type:-` / `max:-` | ### 3. 1.13c Base Numerical & Synergy Formulas (`Patch_D2.mpq`) - **Mana Cost**: `mana=36`, `lvlmana=1` (256-fixed-point `<< HitShift`) - **Physical / Elemental Damage**: `MinDam=-`, `MaxDam=-`, `EType=fire`, `EMin=32`, `EMax=64`, `ELen=-` - **AST `calc1..4`**: `calc1=ln12/2`, `calc2=20`, `calc3=-`, `calc4=-` - **Synergy Calculations (`blvl` strictly base allocated `STAT_SKILLPTS` only)**: - `EDmgSymPerCalc`: `(skill('Warmth'.blvl))*par8` - `DmgSymPerCalc`: `-` - `ELenSymPerCalc`: `-` --- ### 4. R3 Verification & Merge Checklist - [ ] **Isolated Git Worktree**: Created via `git worktree add ../wt-skill-41 -b feat/skill-41` from `main`. - [ ] **1.13c Implementation**: `src/game/skills/impl/sor/skill-041-inferno.ts` implements exact 1.13c `srvstfunc`/`srvdofunc`/`srvprgfunc` & numerical evaluation. - [ ] **Automated Unit & Numerical Tests (`slvl` 1, 10, 20 + `blvl` Synergies)**: `tests/skills/sor/skill-041-inferno.test.ts` passes 100% in Vitest verifying `ManaCost`, `MinDmg`, `MaxDmg`, `ToHit`, `Duration`, `Radius`, synergy scaling, and runtime combat/missile/state/summon effect. - [ ] **Real-Browser Casting & Screenshot**: Executed in headless Chromium (`acts.html?arena=1&class=sor&skill=41&slvl=20&autocast=1`) with zero console/page errors and PNG screenshot attached to this Issue. - [ ] **Merge & Cleanup**: Merged to `main` with `fixes #<issue_number>`, pushed to `origin/main`, verified Issue is `closed`, and removed worktree `../wt-skill-41` + branch `feat/skill-41`.
troytt added this to the All Player Skills (v1.13c Parity) milestone 2026-09-22 02:40:05 +00:00
Author
Owner

✅ Completed: [Skill #041] Inferno (SOR) — 1.13c Parity Verified

1. Isolated Worktree & Module Implementation

  • Worktree & Branch: ../wt-skill-041 (feat/skill-041)
  • Skill Module: src/game/skills/impl/sor/skill-041-inferno.ts
  • Vitest Suite: tests/skills/sor/skill-041-inferno.test.ts
  • 1.13c Dispatch: srvstfunc=11, srvdofunc=19, missile=infernoflame1, state=none, summon=none

2. 1.13c Numerical & Synergy Verification Table

Metric slvl = 1 slvl = 10 slvl = 20 (0 Syn) slvl = 20 (+20 blvl Syn)
Mana Cost (usmc) 0 (144) 0 (180) 0 (220) 0 (220)
Phys Dmg (Min-Max) 0-0 0-0 0-0 0-0
Elem Dmg (Min-Max) 0-1 (fire) 3-4 (fire) 8-8 (fire) 29-31 (+260%)
AR % / Duration / Radius +0% / 0f / 3 +0% / 0f / 9 +0% / 0f / 17 +0% / 0f / 17

3. Headless Chromium (chromium-1228) Runtime Telemetry & Screenshot

  • Arena State: ready=true, classCode=sor (so), castCount=1, anim=SQ:7, totalDamageDealt=9, consoleErrors=0
  • Captured PNG Size: 586882 bytes

Skill #041 Inferno

### ✅ Completed: [Skill #041] Inferno (`SOR`) — 1.13c Parity Verified #### 1. Isolated Worktree & Module Implementation - **Worktree & Branch**: `../wt-skill-041` (`feat/skill-041`) - **Skill Module**: `src/game/skills/impl/sor/skill-041-inferno.ts` - **Vitest Suite**: `tests/skills/sor/skill-041-inferno.test.ts` - **1.13c Dispatch**: `srvstfunc=11`, `srvdofunc=19`, `missile=infernoflame1`, `state=none`, `summon=none` #### 2. 1.13c Numerical & Synergy Verification Table | Metric | `slvl = 1` | `slvl = 10` | `slvl = 20` (0 Syn) | `slvl = 20` (+20 `blvl` Syn) | | :--- | :---: | :---: | :---: | :---: | | **Mana Cost (`usmc`)** | `0` (`144`) | `0` (`180`) | `0` (`220`) | `0` (`220`) | | **Phys Dmg (`Min-Max`)** | `0-0` | `0-0` | `0-0` | `0-0` | | **Elem Dmg (`Min-Max`)** | `0-1` (`fire`) | `3-4` (`fire`) | `8-8` (`fire`) | `29-31` (+260%) | | **AR % / Duration / Radius** | `+0%` / `0f` / `3` | `+0%` / `0f` / `9` | `+0%` / `0f` / `17` | `+0%` / `0f` / `17` | #### 3. Headless Chromium (`chromium-1228`) Runtime Telemetry & Screenshot - **Arena State**: `ready=true`, `classCode=sor` (`so`), `castCount=1`, `anim=SQ:7`, `totalDamageDealt=9`, `consoleErrors=0` - **Captured PNG Size**: `586882` bytes ![Skill #041 Inferno](https://git.projectdiablo2.cn/attachments/699a2a6b-10f8-4e48-adf9-51fee1d51f6d)
Author
Owner

✅ Completed: [Skill #041] Inferno (SOR) — 1.13c Parity Verified

1. Isolated Worktree & Module Implementation

  • Worktree & Branch: ../wt-skill-041 (feat/skill-041)
  • Skill Module: src/game/skills/impl/sor/skill-041-inferno.ts
  • Vitest Suite: tests/skills/sor/skill-041-inferno.test.ts
  • 1.13c Dispatch: srvstfunc=11, srvdofunc=19, missile=infernoflame1, state=none, summon=none

2. 1.13c Numerical & Synergy Verification Table

Metric slvl = 1 slvl = 10 slvl = 20 (0 Syn) slvl = 20 (+20 blvl Syn)
Mana Cost (usmc) 0 (144) 0 (180) 0 (220) 0 (220)
Phys Dmg (Min-Max) 0-0 0-0 0-0 0-0
Elem Dmg (Min-Max) 0-1 (fire) 3-4 (fire) 8-8 (fire) 29-31 (+260%)
AR % / Duration / Radius +0% / 0f / 3 +0% / 0f / 9 +0% / 0f / 17 +0% / 0f / 17

3. Headless Chromium (chromium-1228) Runtime Telemetry & Screenshot

  • Arena State: ready=true, classCode=sor (so), castCount=1, anim=SQ:7, totalDamageDealt=9, consoleErrors=0
  • Captured PNG Size: 586882 bytes

Skill #041 Inferno

### ✅ Completed: [Skill #041] Inferno (`SOR`) — 1.13c Parity Verified #### 1. Isolated Worktree & Module Implementation - **Worktree & Branch**: `../wt-skill-041` (`feat/skill-041`) - **Skill Module**: `src/game/skills/impl/sor/skill-041-inferno.ts` - **Vitest Suite**: `tests/skills/sor/skill-041-inferno.test.ts` - **1.13c Dispatch**: `srvstfunc=11`, `srvdofunc=19`, `missile=infernoflame1`, `state=none`, `summon=none` #### 2. 1.13c Numerical & Synergy Verification Table | Metric | `slvl = 1` | `slvl = 10` | `slvl = 20` (0 Syn) | `slvl = 20` (+20 `blvl` Syn) | | :--- | :---: | :---: | :---: | :---: | | **Mana Cost (`usmc`)** | `0` (`144`) | `0` (`180`) | `0` (`220`) | `0` (`220`) | | **Phys Dmg (`Min-Max`)** | `0-0` | `0-0` | `0-0` | `0-0` | | **Elem Dmg (`Min-Max`)** | `0-1` (`fire`) | `3-4` (`fire`) | `8-8` (`fire`) | `29-31` (+260%) | | **AR % / Duration / Radius** | `+0%` / `0f` / `3` | `+0%` / `0f` / `9` | `+0%` / `0f` / `17` | `+0%` / `0f` / `17` | #### 3. Headless Chromium (`chromium-1228`) Runtime Telemetry & Screenshot - **Arena State**: `ready=true`, `classCode=sor` (`so`), `castCount=1`, `anim=SQ:7`, `totalDamageDealt=9`, `consoleErrors=0` - **Captured PNG Size**: `586882` bytes ![Skill #041 Inferno](https://git.projectdiablo2.cn/attachments/c213922a-5cc2-4874-a60d-e975c1382283)
Author
Owner

7-Dimensional Verification Report — Inferno (Skill ID: 41)

  • Dimension 1 (Static Data Table Parsing): Verified Skills.txt row 41 and Missiles.txt ID 60 (infernoflame1) and ID 61 (infernoflame2). Range: 30, Vel: 12, AnimLen: 15, AnimSpeed: 16, Trans: 1, Light: 5.
  • Dimension 2 (Pre-baked Visual Assets): Pre-baked visual assets public/missiles/infernoflame1.png (30.9KB), public/missiles/infernoflame2.png (32.8KB), and cast overlay public/overlays/fire_cast_2.png (32KB) verified with atlas metadata INFERNOFLAME1_META and INFERNOFLAME2_META.
  • Dimension 3 (Kinematics & Stream Cone Geometry): Stream range progression in yards (20 + 3 * (slvl - 1)) / 2 (10y at slvl 1, 23.5y at slvl 10, 38.5y at slvl 20) and screen pixels (150px at slvl 1, 352.5px at slvl 10, 577.5px at slvl 20). Stream flames advance at Vel = 12 (300 px/s) with 30-frame TTL.
  • Dimension 4 (Collision & Stream Ticks): Continuous per-frame stream ticks with NextDelay = 0 (hitTargets.clear() every frame). Piercing stream flames persist through targets.
  • Dimension 5 (Damage Scaling & Synergies): Exact 1.13c 5-band damage progression in 256ths precision (EMin 32, EMax 64, bands [24, 26, 28, 32, 36]). Synergy: Warmth (+13%/lvl) with hard-point synergy enforcement (soft points yield 0 synergy).
  • Dimension 6 (Mana Progression & Cooldown): Initial cast mana strictly 6. Continuous mana drain in 256ths per frame (36 + (slvl - 1)) * 4 (144 at slvl 1, 180 at slvl 10, 220 at slvl 20). Cooldown strictly 0 frames (streaming skill).
  • Dimension 7 (Invariants & Integration): BATCH1_SKILLS length invariant strictly maintained at 38. Standalone calculation decoupling into src/game/engine/missile-engine.ts. Zero runtime MPQ queries. All tests passing 100%.
### 7-Dimensional Verification Report — Inferno (Skill ID: 41) - **Dimension 1 (Static Data Table Parsing)**: Verified Skills.txt row 41 and Missiles.txt ID 60 (infernoflame1) and ID 61 (infernoflame2). Range: 30, Vel: 12, AnimLen: 15, AnimSpeed: 16, Trans: 1, Light: 5. - **Dimension 2 (Pre-baked Visual Assets)**: Pre-baked visual assets `public/missiles/infernoflame1.png` (30.9KB), `public/missiles/infernoflame2.png` (32.8KB), and cast overlay `public/overlays/fire_cast_2.png` (32KB) verified with atlas metadata `INFERNOFLAME1_META` and `INFERNOFLAME2_META`. - **Dimension 3 (Kinematics & Stream Cone Geometry)**: Stream range progression in yards `(20 + 3 * (slvl - 1)) / 2` (10y at slvl 1, 23.5y at slvl 10, 38.5y at slvl 20) and screen pixels (150px at slvl 1, 352.5px at slvl 10, 577.5px at slvl 20). Stream flames advance at Vel = 12 (300 px/s) with 30-frame TTL. - **Dimension 4 (Collision & Stream Ticks)**: Continuous per-frame stream ticks with NextDelay = 0 (`hitTargets.clear()` every frame). Piercing stream flames persist through targets. - **Dimension 5 (Damage Scaling & Synergies)**: Exact 1.13c 5-band damage progression in 256ths precision (EMin 32, EMax 64, bands [24, 26, 28, 32, 36]). Synergy: Warmth (+13%/lvl) with hard-point synergy enforcement (soft points yield 0 synergy). - **Dimension 6 (Mana Progression & Cooldown)**: Initial cast mana strictly 6. Continuous mana drain in 256ths per frame `(36 + (slvl - 1)) * 4` (144 at slvl 1, 180 at slvl 10, 220 at slvl 20). Cooldown strictly 0 frames (streaming skill). - **Dimension 7 (Invariants & Integration)**: `BATCH1_SKILLS` length invariant strictly maintained at 38. Standalone calculation decoupling into `src/game/engine/missile-engine.ts`. Zero runtime MPQ queries. All tests passing 100%.
Sign in to join this conversation.
No Label
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#195
No description provided.