[Skill #042] [SOR] Static Field (1.13c Parity) #196

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 42 (#042)
Skill Name Static Field (skilldesc: static field)
Class sor (Sorceress)
Required Level (reqlevel) 6
Prerequisites (reqskill1..3) -, -, -
Isolated Implementation Module src/game/skills/impl/sor/skill-042-static-field.ts
Isolated Vitest Suite tests/skills/sor/skill-042-static-field.test.ts

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

Function Slot 1.13c Value
srvstfunc (Server Start / Pre-Cast) -
srvdofunc (Server Action Frame 0x01/0x02) 20
srvprgfunc1..3 (Progressive Charge Release) - / - / -
cltstfunc / cltdofunc (Client Start / Action) - / -
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:-, b:-, c:-
Client Missiles (cltmissile / cltmissilea) - / -
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=9, lvlmana=0 (256-fixed-point << HitShift)
  • Physical / Elemental Damage: MinDam=-, MaxDam=-, EType=ltng, EMin=-, EMax=-, ELen=-
  • AST calc1..4: calc1=par4, calc2=par3, calc3=-, calc4=-
  • Synergy Calculations (blvl strictly base allocated STAT_SKILLPTS only):
    • EDmgSymPerCalc: -
    • DmgSymPerCalc: -
    • ELenSymPerCalc: -

4. R3 Verification & Merge Checklist

  • Isolated Git Worktree: Created via git worktree add ../wt-skill-42 -b feat/skill-42 from main.
  • 1.13c Implementation: src/game/skills/impl/sor/skill-042-static-field.ts implements exact 1.13c srvstfunc/srvdofunc/srvprgfunc & numerical evaluation.
  • Automated Unit & Numerical Tests (slvl 1, 10, 20 + blvl Synergies): tests/skills/sor/skill-042-static-field.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=42&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-42 + branch feat/skill-42.
## Diablo II: Lord of Destruction v1.13c Skill Parity Specification | Field | Value | |---|---| | **Skill ID** | `42` (`#042`) | | **Skill Name** | **Static Field** (`skilldesc: static field`) | | **Class** | `sor` (Sorceress) | | **Required Level (`reqlevel`)** | `6` | | **Prerequisites (`reqskill1..3`)** | `-`, `-`, `-` | | **Isolated Implementation Module** | `src/game/skills/impl/sor/skill-042-static-field.ts` | | **Isolated Vitest Suite** | `tests/skills/sor/skill-042-static-field.test.ts` | --- ### 1. Authoritative 1.13c `Skills.txt` Function & Handler Dispatch | Function Slot | 1.13c Value | |---|---| | **`srvstfunc`** (Server Start / Pre-Cast) | `-` | | **`srvdofunc`** (Server Action Frame `0x01`/`0x02`) | `20` | | **`srvprgfunc1..3`** (Progressive Charge Release) | `-` / `-` / `-` | | **`cltstfunc` / `cltdofunc`** (Client Start / Action) | `-` / `-` | | **`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:-`, `b:-`, `c:-` | | **Client Missiles (`cltmissile` / `cltmissilea`)** | `-` / `-` | | **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=9`, `lvlmana=0` (256-fixed-point `<< HitShift`) - **Physical / Elemental Damage**: `MinDam=-`, `MaxDam=-`, `EType=ltng`, `EMin=-`, `EMax=-`, `ELen=-` - **AST `calc1..4`**: `calc1=par4`, `calc2=par3`, `calc3=-`, `calc4=-` - **Synergy Calculations (`blvl` strictly base allocated `STAT_SKILLPTS` only)**: - `EDmgSymPerCalc`: `-` - `DmgSymPerCalc`: `-` - `ELenSymPerCalc`: `-` --- ### 4. R3 Verification & Merge Checklist - [ ] **Isolated Git Worktree**: Created via `git worktree add ../wt-skill-42 -b feat/skill-42` from `main`. - [ ] **1.13c Implementation**: `src/game/skills/impl/sor/skill-042-static-field.ts` implements exact 1.13c `srvstfunc`/`srvdofunc`/`srvprgfunc` & numerical evaluation. - [ ] **Automated Unit & Numerical Tests (`slvl` 1, 10, 20 + `blvl` Synergies)**: `tests/skills/sor/skill-042-static-field.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=42&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-42` + branch `feat/skill-42`.
troytt added this to the All Player Skills (v1.13c Parity) milestone 2026-09-22 02:40:05 +00:00
Author
Owner

✅ Completed: [Skill #042] Static Field (SOR) — 1.13c Parity Verified

1. Isolated Worktree & Module Implementation

  • Worktree & Branch: ../wt-skill-042 (feat/skill-042)
  • Skill Module: src/game/skills/impl/sor/skill-042-static-field.ts
  • Vitest Suite: tests/skills/sor/skill-042-static-field.test.ts
  • 1.13c Dispatch: srvstfunc=0, srvdofunc=20, missile=none, 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) 9 (2304) 9 (2304) 9 (2304) 9 (2304)
Phys Dmg (Min-Max) 0-0 0-0 0-0 0-0
Elem Dmg (Min-Max) 0-0 (ltng) 0-0 (ltng) 0-0 (ltng) 0-0 (+0%)
AR % / Duration / Radius +0% / 0f / 5 +0% / 0f / 14 +0% / 0f / 24 +0% / 0f / 24

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

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

Skill #042 Static Field

### ✅ Completed: [Skill #042] Static Field (`SOR`) — 1.13c Parity Verified #### 1. Isolated Worktree & Module Implementation - **Worktree & Branch**: `../wt-skill-042` (`feat/skill-042`) - **Skill Module**: `src/game/skills/impl/sor/skill-042-static-field.ts` - **Vitest Suite**: `tests/skills/sor/skill-042-static-field.test.ts` - **1.13c Dispatch**: `srvstfunc=0`, `srvdofunc=20`, `missile=none`, `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`)** | `9` (`2304`) | `9` (`2304`) | `9` (`2304`) | `9` (`2304`) | | **Phys Dmg (`Min-Max`)** | `0-0` | `0-0` | `0-0` | `0-0` | | **Elem Dmg (`Min-Max`)** | `0-0` (`ltng`) | `0-0` (`ltng`) | `0-0` (`ltng`) | `0-0` (+0%) | | **AR % / Duration / Radius** | `+0%` / `0f` / `5` | `+0%` / `0f` / `14` | `+0%` / `0f` / `24` | `+0%` / `0f` / `24` | #### 3. Headless Chromium (`chromium-1228`) Runtime Telemetry & Screenshot - **Arena State**: `ready=true`, `classCode=sor` (`so`), `castCount=1`, `anim=SC:7`, `totalDamageDealt=7500`, `consoleErrors=0` - **Captured PNG Size**: `588277` bytes ![Skill #042 Static Field](https://git.projectdiablo2.cn/attachments/90839382-1515-4596-a325-455691c56d6e)
Author
Owner

✅ Completed: [Skill #042] Static Field (SOR) — 1.13c Parity Verified

1. Isolated Worktree & Module Implementation

  • Worktree & Branch: ../wt-skill-042 (feat/skill-042)
  • Skill Module: src/game/skills/impl/sor/skill-042-static-field.ts
  • Vitest Suite: tests/skills/sor/skill-042-static-field.test.ts
  • 1.13c Dispatch: srvstfunc=0, srvdofunc=20, missile=none, 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) 9 (2304) 9 (2304) 9 (2304) 9 (2304)
Phys Dmg (Min-Max) 0-0 0-0 0-0 0-0
Elem Dmg (Min-Max) 0-0 (ltng) 0-0 (ltng) 0-0 (ltng) 0-0 (+0%)
AR % / Duration / Radius +0% / 0f / 5 +0% / 0f / 14 +0% / 0f / 24 +0% / 0f / 24

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

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

Skill #042 Static Field

### ✅ Completed: [Skill #042] Static Field (`SOR`) — 1.13c Parity Verified #### 1. Isolated Worktree & Module Implementation - **Worktree & Branch**: `../wt-skill-042` (`feat/skill-042`) - **Skill Module**: `src/game/skills/impl/sor/skill-042-static-field.ts` - **Vitest Suite**: `tests/skills/sor/skill-042-static-field.test.ts` - **1.13c Dispatch**: `srvstfunc=0`, `srvdofunc=20`, `missile=none`, `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`)** | `9` (`2304`) | `9` (`2304`) | `9` (`2304`) | `9` (`2304`) | | **Phys Dmg (`Min-Max`)** | `0-0` | `0-0` | `0-0` | `0-0` | | **Elem Dmg (`Min-Max`)** | `0-0` (`ltng`) | `0-0` (`ltng`) | `0-0` (`ltng`) | `0-0` (+0%) | | **AR % / Duration / Radius** | `+0%` / `0f` / `5` | `+0%` / `0f` / `14` | `+0%` / `0f` / `24` | `+0%` / `0f` / `24` | #### 3. Headless Chromium (`chromium-1228`) Runtime Telemetry & Screenshot - **Arena State**: `ready=true`, `classCode=sor` (`so`), `castCount=1`, `anim=SC:7`, `totalDamageDealt=7500`, `consoleErrors=0` - **Captured PNG Size**: `588277` bytes ![Skill #042 Static Field](https://git.projectdiablo2.cn/attachments/b6b2e713-8676-4df6-b2b1-9c59871bfd1a)
Author
Owner

Milestone M1: 1.13c Static Field (Skill 42) Implementation & 7-Dimensional Verification Report

Commit: 35b9267 (Merged into main)
Test Suite: tests/skills/sor/skill-042-static-field.test.ts (20 of 20 tests passed)

7-Dimensional Verification Results:

  • D1 (1.13c Data Table Parsing & Ground Truth): Verified Skills.txt row 42 (Static Field: Id: 42, srvdofunc: 20, mana: 9, lvlmana: 0, LineOfSight: 4, Param1: 5, Param2: 1, Param4: 25, aurarangecalc: ln12, castoverlay: light_cast_1, non-projectile).
  • D2 (Visual Assets & Metadata Integrity): Verified atlas sprite sheets public/overlays/light_cast_1.png/.json (48KB) and public/overlays/lightning.png/.json (17KB) with additive blend mode.
  • D3 (Instantaneous 360° AoE Geometry & Radius Scaling): Verified (4 + slvl) yards at 40 px/yard:
    • slvl 1: 5 yards = 200 px
    • slvl 10: 14 yards = 560 px
    • slvl 20: 24 yards = 960 px (covers full 800x600 screen)
    • Targets within radius take damage; targets outside take 0 damage.
  • D4 (25% Current HP Cut, Resistance & Immunity Scaling): Verified integer division Math.floor(currentHp / 4), sequential damage scaling (1000 -> 750 -> 562 -> 421), lightning resistance scaling (50% resist = 12.5% cut), and immunity (>= 100 resist = 0 damage). Verified 0% synergy.
  • D5 (Line-of-Sight Raycast Obstruction): Verified Bresenham line-of-sight raycast hasLineOfSight: targets behind solid wall tiles receive 0 damage; targets with open line of sight receive full damage.
  • D6 (Difficulty Floor Clamps & Assembly Pre-Check Invariant): Verified D2Game.dll 0x6FC62F13 assembly pre-check invariant (if (currentHp <= hpFloor) return 0;) and floor clamps:
    • Normal: Floor 1 HP (0% max HP)
    • Nightmare: Floor 33% max HP
    • Hell: Floor 50% max HP
    • Prevents reducing HP below the difficulty floor threshold.
  • D7 (WorldArena & Runtime Cast Integration): Verified integration with executeStaticField, castSkill, flat mana 9, 0 cooldown, cast overlay light_cast_1, and hit overlay lightning.
### Milestone M1: 1.13c Static Field (Skill 42) Implementation & 7-Dimensional Verification Report **Commit**: `35b9267` (Merged into `main`) **Test Suite**: `tests/skills/sor/skill-042-static-field.test.ts` (20 of 20 tests passed) #### 7-Dimensional Verification Results: - **D1 (1.13c Data Table Parsing & Ground Truth)**: Verified `Skills.txt` row 42 (Static Field: `Id: 42`, `srvdofunc: 20`, `mana: 9`, `lvlmana: 0`, `LineOfSight: 4`, `Param1: 5`, `Param2: 1`, `Param4: 25`, `aurarangecalc: ln12`, `castoverlay: light_cast_1`, non-projectile). - **D2 (Visual Assets & Metadata Integrity)**: Verified atlas sprite sheets `public/overlays/light_cast_1.png`/`.json` (48KB) and `public/overlays/lightning.png`/`.json` (17KB) with additive blend mode. - **D3 (Instantaneous 360° AoE Geometry & Radius Scaling)**: Verified (4 + slvl) yards at 40 px/yard: - slvl 1: 5 yards = 200 px - slvl 10: 14 yards = 560 px - slvl 20: 24 yards = 960 px (covers full 800x600 screen) - Targets within radius take damage; targets outside take 0 damage. - **D4 (25% Current HP Cut, Resistance & Immunity Scaling)**: Verified integer division `Math.floor(currentHp / 4)`, sequential damage scaling (1000 -> 750 -> 562 -> 421), lightning resistance scaling (50% resist = 12.5% cut), and immunity (>= 100 resist = 0 damage). Verified 0% synergy. - **D5 (Line-of-Sight Raycast Obstruction)**: Verified Bresenham line-of-sight raycast `hasLineOfSight`: targets behind solid wall tiles receive 0 damage; targets with open line of sight receive full damage. - **D6 (Difficulty Floor Clamps & Assembly Pre-Check Invariant)**: Verified D2Game.dll 0x6FC62F13 assembly pre-check invariant (`if (currentHp <= hpFloor) return 0;`) and floor clamps: - Normal: Floor 1 HP (0% max HP) - Nightmare: Floor 33% max HP - Hell: Floor 50% max HP - Prevents reducing HP below the difficulty floor threshold. - **D7 (WorldArena & Runtime Cast Integration)**: Verified integration with `executeStaticField`, `castSkill`, flat mana 9, 0 cooldown, cast overlay `light_cast_1`, and hit overlay `lightning`.
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#196
No description provided.