[Skill #052] [SOR] Enchant (1.13c Parity) #206

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

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

Field Value
Skill ID 52 (#052)
Skill Name Enchant (skilldesc: enchant)
Class sor (Sorceress)
Required Level (reqlevel) 18
Prerequisites (reqskill1..3) Warmth, Fire Ball, -
Isolated Implementation Module src/game/skills/impl/sor/skill-052-enchant.ts
Isolated Vitest Suite tests/skills/sor/skill-052-enchant.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) 25
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:enchant / tgt:-
Aura / Buff Stats (aurastat1..3) firemindam, firemaxdam, item_tohit_percent
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=25, lvlmana=1 (256-fixed-point << HitShift)
  • Physical / Elemental Damage: MinDam=-, MaxDam=-, EType=fire, EMin=16, EMax=20, ELen=-
  • AST calc1..4: calc1=-, calc2=-, 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-52 -b feat/skill-52 from main.
  • 1.13c Implementation: src/game/skills/impl/sor/skill-052-enchant.ts implements exact 1.13c srvstfunc/srvdofunc/srvprgfunc & numerical evaluation.
  • Automated Unit & Numerical Tests (slvl 1, 10, 20 + blvl Synergies): tests/skills/sor/skill-052-enchant.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=52&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-52 + branch feat/skill-52.
## Diablo II: Lord of Destruction v1.13c Skill Parity Specification | Field | Value | |---|---| | **Skill ID** | `52` (`#052`) | | **Skill Name** | **Enchant** (`skilldesc: enchant`) | | **Class** | `sor` (Sorceress) | | **Required Level (`reqlevel`)** | `18` | | **Prerequisites (`reqskill1..3`)** | `Warmth`, `Fire Ball`, `-` | | **Isolated Implementation Module** | `src/game/skills/impl/sor/skill-052-enchant.ts` | | **Isolated Vitest Suite** | `tests/skills/sor/skill-052-enchant.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`) | `25` | | **`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:enchant` / `tgt:-` | | **Aura / Buff Stats (`aurastat1..3`)** | `firemindam`, `firemaxdam`, `item_tohit_percent` | | **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=25`, `lvlmana=1` (256-fixed-point `<< HitShift`) - **Physical / Elemental Damage**: `MinDam=-`, `MaxDam=-`, `EType=fire`, `EMin=16`, `EMax=20`, `ELen=-` - **AST `calc1..4`**: `calc1=-`, `calc2=-`, `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-52 -b feat/skill-52` from `main`. - [ ] **1.13c Implementation**: `src/game/skills/impl/sor/skill-052-enchant.ts` implements exact 1.13c `srvstfunc`/`srvdofunc`/`srvprgfunc` & numerical evaluation. - [ ] **Automated Unit & Numerical Tests (`slvl` 1, 10, 20 + `blvl` Synergies)**: `tests/skills/sor/skill-052-enchant.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=52&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-52` + branch `feat/skill-52`.
troytt added this to the All Player Skills (v1.13c Parity) milestone 2026-09-22 02:40:06 +00:00
Author
Owner

✅ Completed: [Skill #052] Enchant (SOR) — 1.13c Parity Verified

1. Isolated Worktree & Module Implementation

  • Worktree & Branch: ../wt-skill-052 (feat/skill-052)
  • Skill Module: src/game/skills/impl/sor/skill-052-enchant.ts
  • Vitest Suite: tests/skills/sor/skill-052-enchant.test.ts
  • 1.13c Dispatch: srvstfunc=0, srvdofunc=25, missile=none, state=enchant, 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) 25 (6400) 34 (8704) 44 (11264) 44 (11264)
Phys Dmg (Min-Max) 0-0 0-0 0-0 0-0
Elem Dmg (Min-Max) 8-10 (fire) 25-36 (fire) 68-89 (fire) 191-250 (+180%)
AR % / Duration / Radius +20% / 3600f / 3600 +101% / 9000f / 9000 +191% / 15000f / 15000 +191% / 15000f / 15000

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

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

Skill #052 Enchant

### ✅ Completed: [Skill #052] Enchant (`SOR`) — 1.13c Parity Verified #### 1. Isolated Worktree & Module Implementation - **Worktree & Branch**: `../wt-skill-052` (`feat/skill-052`) - **Skill Module**: `src/game/skills/impl/sor/skill-052-enchant.ts` - **Vitest Suite**: `tests/skills/sor/skill-052-enchant.test.ts` - **1.13c Dispatch**: `srvstfunc=0`, `srvdofunc=25`, `missile=none`, `state=enchant`, `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`)** | `25` (`6400`) | `34` (`8704`) | `44` (`11264`) | `44` (`11264`) | | **Phys Dmg (`Min-Max`)** | `0-0` | `0-0` | `0-0` | `0-0` | | **Elem Dmg (`Min-Max`)** | `8-10` (`fire`) | `25-36` (`fire`) | `68-89` (`fire`) | `191-250` (+180%) | | **AR % / Duration / Radius** | `+20%` / `3600f` / `3600` | `+101%` / `9000f` / `9000` | `+191%` / `15000f` / `15000` | `+191%` / `15000f` / `15000` | #### 3. Headless Chromium (`chromium-1228`) Runtime Telemetry & Screenshot - **Arena State**: `ready=true`, `classCode=sor` (`so`), `castCount=1`, `anim=SC:7`, `totalDamageDealt=0`, `consoleErrors=0` - **Captured PNG Size**: `586529` bytes ![Skill #052 Enchant](https://git.projectdiablo2.cn/attachments/29516206-8325-4621-935a-86ac52dea8bc)
Author
Owner

Milestone M4 — Skill #052: Enchant (SOR) 1.13c Implementation & 7-Dimensional Verification Report

Commit: 2e061b3 (merged to main)
Status: Closed & Verified

7-Dimensional Verification Evidence:

  • D1: 1.13c Data Table Parsing & Schema Integrity:
    • Skills.txt row 52 parsed and validated: Id: 52, skill: Enchant, charclass: sor, reqlevel: 18, mana: 25, lvlmana: 1, manashift: 8, aurastate: enchant, srvdofunc: 25, srvstfunc: 0, InTown: 1, TargetAlly: 1, TargetPet: 1.
    • 5-band damage parameters: EMin: 16, EMinLev1..5: [3, 7, 11, 15, 19], EMax: 20, EMaxLev1..5: [5, 9, 13, 17, 21], HitShift: 7 (0.5 dmg step).
    • AR progression: ToHit: 20, LevToHit: 9. Duration: Param1: 3600, Param2: 600, auralencalc: ln12.
    • Synergy: Param8: 9 (+9%/blvl Warmth), Ranged missile penalty: Param3: 33 (33% damage).
  • D2: Visual Assets & Metadata Integrity:
    • Prebaked overlay assets verified: public/overlays/enchant.png (51.3 KB) and public/overlays/enchant.json (17 frames, FireEnchant).
    • Overlay definitions in overlays-meta.ts mapped: ENCHANT_OVERLAY_META and FIRE_CAST_2_META. Cast overlay mapped via getSkillCastOverlay(52) === 'fire_cast_2'.
  • D3: Formulas & Scaling:
    • Duration formula: 3600 + (slvl - 1) * 600 frames verified at slvls 1 (144s), 10 (360s), 20 (600s), 30 (840s).
    • Attack Rating bonus: 20 + (slvl - 1) * 9% verified at slvls 1 (20%), 10 (101%), 20 (191%), 30 (281%).
    • applyEnchantBuff helper correctly applies buff state to player, allies, and pets.
  • D4: Ranged Penalty (33%) vs Sorceress Melee Double-Dip:
    • Ranged weapon attacks receive strictly 33% of Enchant damage and bypass second Fire Mastery multiplier.
    • Sorceress melee weapon attacks double-dip with Fire Mastery upon hit (Base * (1 + Warmth%) * (1 + FM%)^2).
    • Non-Sorceress melee allies receive 100% Enchant damage without double-dip.
    • Target fire immunity (Res >= 100%) strictly preserved (0 damage dealt). Fire Mastery cannot pierce immunities.
  • D5: Synergy Math & 5-Band Integer Accuracy:
    • 5-band base damage: slvl 1 = 8.0-10.0 (2048-2560 in 256ths), slvl 10 = 25.5-36.5 (6528-9344 in 256ths), slvl 20 = 68.5-89.5 (17536-22912 in 256ths).
    • Warmth synergy (+9%/blvl): 20 hard points yield +180% synergy. Soft points grant 0%.
  • D6: Mana Progression & 0 Cooldown Ticks:
    • Mana cost progression: 25 + (slvl - 1) (slvl 1: 25, slvl 10: 34, slvl 20: 44).
    • Cooldown: 0 ticks (no cast delay).
    • Town casting permissions: Can cast on self, allies, and pets in town; cannot cast on enemies.
  • D7: Invariants & Runtime Execution:
    • BATCH1_SKILLS length invariant strictly maintained at 38.
    • Zero Runtime MPQ invariant preserved.
    • WorldArena cast execution verified.
### Milestone M4 — Skill #052: Enchant (SOR) 1.13c Implementation & 7-Dimensional Verification Report **Commit**: `2e061b3` (merged to `main`) **Status**: Closed & Verified #### 7-Dimensional Verification Evidence: - **D1: 1.13c Data Table Parsing & Schema Integrity**: - `Skills.txt` row 52 parsed and validated: `Id: 52`, `skill: Enchant`, `charclass: sor`, `reqlevel: 18`, `mana: 25`, `lvlmana: 1`, `manashift: 8`, `aurastate: enchant`, `srvdofunc: 25`, `srvstfunc: 0`, `InTown: 1`, `TargetAlly: 1`, `TargetPet: 1`. - 5-band damage parameters: `EMin: 16`, `EMinLev1..5: [3, 7, 11, 15, 19]`, `EMax: 20`, `EMaxLev1..5: [5, 9, 13, 17, 21]`, `HitShift: 7` (0.5 dmg step). - AR progression: `ToHit: 20`, `LevToHit: 9`. Duration: `Param1: 3600`, `Param2: 600`, `auralencalc: ln12`. - Synergy: `Param8: 9` (+9%/blvl Warmth), Ranged missile penalty: `Param3: 33` (33% damage). - **D2: Visual Assets & Metadata Integrity**: - Prebaked overlay assets verified: `public/overlays/enchant.png` (51.3 KB) and `public/overlays/enchant.json` (17 frames, `FireEnchant`). - Overlay definitions in `overlays-meta.ts` mapped: `ENCHANT_OVERLAY_META` and `FIRE_CAST_2_META`. Cast overlay mapped via `getSkillCastOverlay(52) === 'fire_cast_2'`. - **D3: Formulas & Scaling**: - Duration formula: `3600 + (slvl - 1) * 600` frames verified at slvls 1 (144s), 10 (360s), 20 (600s), 30 (840s). - Attack Rating bonus: `20 + (slvl - 1) * 9%` verified at slvls 1 (20%), 10 (101%), 20 (191%), 30 (281%). - `applyEnchantBuff` helper correctly applies buff state to player, allies, and pets. - **D4: Ranged Penalty (33%) vs Sorceress Melee Double-Dip**: - Ranged weapon attacks receive strictly 33% of Enchant damage and bypass second Fire Mastery multiplier. - Sorceress melee weapon attacks double-dip with Fire Mastery upon hit (`Base * (1 + Warmth%) * (1 + FM%)^2`). - Non-Sorceress melee allies receive 100% Enchant damage without double-dip. - Target fire immunity (Res >= 100%) strictly preserved (0 damage dealt). Fire Mastery cannot pierce immunities. - **D5: Synergy Math & 5-Band Integer Accuracy**: - 5-band base damage: slvl 1 = 8.0-10.0 (2048-2560 in 256ths), slvl 10 = 25.5-36.5 (6528-9344 in 256ths), slvl 20 = 68.5-89.5 (17536-22912 in 256ths). - Warmth synergy (+9%/blvl): 20 hard points yield +180% synergy. Soft points grant 0%. - **D6: Mana Progression & 0 Cooldown Ticks**: - Mana cost progression: `25 + (slvl - 1)` (slvl 1: 25, slvl 10: 34, slvl 20: 44). - Cooldown: 0 ticks (no cast delay). - Town casting permissions: Can cast on self, allies, and pets in town; cannot cast on enemies. - **D7: Invariants & Runtime Execution**: - `BATCH1_SKILLS` length invariant strictly maintained at 38. - Zero Runtime MPQ invariant preserved. - WorldArena cast execution verified.
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#206
No description provided.