普通攻击图标动态切换(空手拳头/持武剑)及新增投掷、取消召唤通用技能 #376

Closed
opened 2026-09-22 08:41:41 +00:00 by troytt · 0 comments
Owner

1. 问题背景与现状

在当前技能快捷键弹窗与底部技能槽中(对应 Issue #151 后续完善):

  1. 普通攻击 (Attack, skillId: 0) 的图标未正确渲染或仅显示为静态占位图,且未根据当前角色武器装备状态进行动态区分。
  2. 通用默认技能缺失:缺少暗黑破坏神 2 原版中所有角色均具备的基础通用技能:
    • 投掷 (Throw, skillId: 2):当玩家装备标枪、投掷斧、投掷飞刀或投掷药剂等武器时,应当提供投掷技能。
    • 取消召唤 (Unsummon, skillId: 3):玩家可用右键点击取消已召唤的仆从/宠物/石魔/骷髅。

2. 暗黑 2 v1.13c 原版规则与资产映射 (Ground Truth)

2.1 技能定义与图标索引 (SkillDesc.txt)

在 SkillDesc.txt 中,通用技能对应 data/global/ui/SPELLS/Skillicon.DC6 资产:

  • Row 0 (attack): IconCel = 2 -> 持武器普通攻击(一把剑 / Sword)
  • Row 1 (kick / unarmed attack): IconCel = 0 -> 空手攻击 / 踢(拳头 / Fist)
  • Row 2 (throw): IconCel = 6 -> 投掷(投掷动作 / Throw)
  • Row 3 (unsummon): IconCel = 4 -> 取消召唤(骷髅头加红叉 / Unsummon)

2.2 图标资产 (data/global/ui/SPELLS/Skillicon.DC6)

  • Skillicon.DC6 包含 24 帧(每方向 24 帧,48x48 像素),通用技能以成对方式存放(正常态 / 激活高亮态):
    • Frame 0 (Cel 0): 空手拳头 (Fist) - 空手普通攻击
    • Frame 2 (Cel 2): 锋利单手剑 (Sword) - 持武器普通攻击
    • Frame 4 (Cel 4): 骷髅头加红叉 (Unsummon) - 取消召唤
    • Frame 6 (Cel 6): 挥臂投掷 (Throw) - 投掷武器技能

3. 实现要求与规格

3.1 资产提取与管线打包

  • 从 Skillicon.DC6 中导出 Frame 0、Frame 2、Frame 4、Frame 6 并转换为 Web 格式(PNG/WebP),集成至技能图标打包管线(如 public/skills/generic_attack_bare.png, public/skills/generic_attack_weapon.png, public/skills/generic_throw.png, public/skills/generic_unsummon.png 或保留原版 sprite sheet 索引)。

3.2 普通攻击图标动态切换逻辑

  • 监听/查询当前角色的主手装备槽(equipped.weapon1 或主/副手武器):
    • 若未装备任何武器(空手):技能选择菜单与快捷栏的普通攻击图标渲染为 拳头 (Frame 0)。
    • 若已装备武器(单手武器/双手武器/法杖/弓等):技能选择菜单与快捷栏的普通攻击图标渲染为 剑 (Frame 2)。

3.3 投掷与取消召唤通用技能支持

  1. 投掷 (Throw, ID: 2):
    • 可绑定在左键或右键快捷槽。
    • 当装备有投掷属性的武器时可用;未装备投掷类武器时置灰或不可选择。
  2. 取消召唤 (Unsummon, ID: 3):
    • 默认放入右键可用技能列表。
    • 施放目标判定为己方召唤物,点击后解散/消灭选中的召唤生物。

3.4 验收标准 (Acceptance Criteria)

  1. 角色脱下武器时,快捷栏与技能弹窗中的普通攻击立即变为拳头图标。
  2. 角色穿戴武器时,普通攻击图标立即切换为剑图标。
  3. 技能列表包含投掷 (Throw) 与取消召唤 (Unsummon),图标与 D2 1.13c 原版一致。
  4. TypeScript 类型检查与单元测试全部通过。
## 1. 问题背景与现状 在当前技能快捷键弹窗与底部技能槽中(对应 Issue #151 后续完善): 1. **普通攻击 (Attack, skillId: 0)** 的图标未正确渲染或仅显示为静态占位图,且未根据当前角色武器装备状态进行动态区分。 2. **通用默认技能缺失**:缺少暗黑破坏神 2 原版中所有角色均具备的基础通用技能: - **投掷 (Throw, skillId: 2)**:当玩家装备标枪、投掷斧、投掷飞刀或投掷药剂等武器时,应当提供投掷技能。 - **取消召唤 (Unsummon, skillId: 3)**:玩家可用右键点击取消已召唤的仆从/宠物/石魔/骷髅。 --- ## 2. 暗黑 2 v1.13c 原版规则与资产映射 (Ground Truth) ### 2.1 技能定义与图标索引 (`SkillDesc.txt`) 在 `SkillDesc.txt` 中,通用技能对应 `data/global/ui/SPELLS/Skillicon.DC6` 资产: - **Row 0 (`attack`)**: `IconCel = 2` -> 持武器普通攻击(一把剑 / Sword) - **Row 1 (`kick` / unarmed attack)**: `IconCel = 0` -> 空手攻击 / 踢(拳头 / Fist) - **Row 2 (`throw`)**: `IconCel = 6` -> 投掷(投掷动作 / Throw) - **Row 3 (`unsummon`)**: `IconCel = 4` -> 取消召唤(骷髅头加红叉 / Unsummon) ### 2.2 图标资产 (`data/global/ui/SPELLS/Skillicon.DC6`) - `Skillicon.DC6` 包含 24 帧(每方向 24 帧,48x48 像素),通用技能以成对方式存放(正常态 / 激活高亮态): - **Frame 0 (Cel 0)**: 空手拳头 (Fist) - 空手普通攻击 - **Frame 2 (Cel 2)**: 锋利单手剑 (Sword) - 持武器普通攻击 - **Frame 4 (Cel 4)**: 骷髅头加红叉 (Unsummon) - 取消召唤 - **Frame 6 (Cel 6)**: 挥臂投掷 (Throw) - 投掷武器技能 --- ## 3. 实现要求与规格 ### 3.1 资产提取与管线打包 - 从 `Skillicon.DC6` 中导出 Frame 0、Frame 2、Frame 4、Frame 6 并转换为 Web 格式(PNG/WebP),集成至技能图标打包管线(如 `public/skills/generic_attack_bare.png`, `public/skills/generic_attack_weapon.png`, `public/skills/generic_throw.png`, `public/skills/generic_unsummon.png` 或保留原版 sprite sheet 索引)。 ### 3.2 普通攻击图标动态切换逻辑 - 监听/查询当前角色的主手装备槽(`equipped.weapon1` 或主/副手武器): - 若未装备任何武器(空手):技能选择菜单与快捷栏的普通攻击图标渲染为 **拳头 (Frame 0)**。 - 若已装备武器(单手武器/双手武器/法杖/弓等):技能选择菜单与快捷栏的普通攻击图标渲染为 **剑 (Frame 2)**。 ### 3.3 投掷与取消召唤通用技能支持 1. **投掷 (Throw, ID: 2)**: - 可绑定在左键或右键快捷槽。 - 当装备有投掷属性的武器时可用;未装备投掷类武器时置灰或不可选择。 2. **取消召唤 (Unsummon, ID: 3)**: - 默认放入右键可用技能列表。 - 施放目标判定为己方召唤物,点击后解散/消灭选中的召唤生物。 ### 3.4 验收标准 (Acceptance Criteria) 1. 角色脱下武器时,快捷栏与技能弹窗中的普通攻击立即变为拳头图标。 2. 角色穿戴武器时,普通攻击图标立即切换为剑图标。 3. 技能列表包含投掷 (Throw) 与取消召唤 (Unsummon),图标与 D2 1.13c 原版一致。 4. TypeScript 类型检查与单元测试全部通过。
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#376
No description provided.