fix(scene): 修复野外与地下城火炬、蜡烛、环境火焰动画及 DT1 瓦片动画并在全地图重烘焙 #398

Closed
opened 2026-09-23 08:09:44 +00:00 by troytt · 1 comment
Owner

问题现状

目前城镇(罗格营地等)内的火炬、篝火等已经正确动起来了,但在野外和地下城(洞穴、墓穴、监牢、地下墓穴等)中,火炬、蜡烛、火堆及墙面火炬等仍然处于静止状态。

根本原因

  1. 预烘焙资源包过期:samples/d2-packs 中除城镇外的绝大部分地下城和野外地图文件为 9月21日历史数据,未包含 #387 引入的对象动画帧数据(animatedFrames: undefined)。
  2. DT1 瓦片动画丢失:scripts/pack-act-assets.ts 在序列化地形与墙面时,将 draw.animatedFrames 丢弃,导致全游戏所有 DT1 动画瓦片(如墙壁火炬、水流等)丢失多帧索引。
  3. 环境火源非循环冻结:Objects.txt 中部分环境火堆(FX/FY/FZ)和火盆(BR)在 OP 模式下 CycleAnim=0,导致播放 1 轮后永久定格在最后一帧。

修复目标与验收标准

  • 修复 scripts/pack-act-assets.ts 瓦片动画序列化,保留 animatedFrames
  • 确保环境火堆、火盆、火炬、蜡烛对象循环动画正确(cycleAnim)
  • 重新全量烘焙地图资源包并更新 samples/d2-packs
  • 编写并通过单测,验证地下城/野外地图中的火炬、蜡烛动画帧与播放状态
  • 验证后合并回 main 分支
## 问题现状 目前城镇(罗格营地等)内的火炬、篝火等已经正确动起来了,但在野外和地下城(洞穴、墓穴、监牢、地下墓穴等)中,火炬、蜡烛、火堆及墙面火炬等仍然处于静止状态。 ## 根本原因 1. **预烘焙资源包过期**:`samples/d2-packs` 中除城镇外的绝大部分地下城和野外地图文件为 9月21日历史数据,未包含 #387 引入的对象动画帧数据(`animatedFrames: undefined`)。 2. **DT1 瓦片动画丢失**:`scripts/pack-act-assets.ts` 在序列化地形与墙面时,将 `draw.animatedFrames` 丢弃,导致全游戏所有 DT1 动画瓦片(如墙壁火炬、水流等)丢失多帧索引。 3. **环境火源非循环冻结**:`Objects.txt` 中部分环境火堆(FX/FY/FZ)和火盆(BR)在 OP 模式下 `CycleAnim=0`,导致播放 1 轮后永久定格在最后一帧。 ## 修复目标与验收标准 - [ ] 修复 `scripts/pack-act-assets.ts` 瓦片动画序列化,保留 `animatedFrames` - [ ] 确保环境火堆、火盆、火炬、蜡烛对象循环动画正确(`cycleAnim`) - [ ] 重新全量烘焙地图资源包并更新 `samples/d2-packs` - [ ] 编写并通过单测,验证地下城/野外地图中的火炬、蜡烛动画帧与播放状态 - [ ] 验证后合并回 `main` 分支
Author
Owner

修复与验证完成汇报 (Fixes #398)

  1. DT1 瓦片动画序列化契约修复:

    • 在 scripts/pack-act-assets.ts 中将多帧动画瓦片完整序列化为 [draw.frameIndex, draw.x, draw.y, draw.cellX, draw.cellY, ...draw.animatedFrames],彻底解决了离线打包丢失 DT1 瓦片动画帧的问题。
  2. 常亮环境火源循环保底与防漂移:

    • 针对 PERSISTENT_ILLUMINATION_TOKENS(火炬 TO、蜡烛烛台 A1/A2/3O/3o、火堆 FX/FY/FZ、火盆 BR、骨火 BF、火木 FL)强制 cycleAnim = true,防止播放单次后被定格。
    • 锚定 baseX / baseY 坐标基准,防止帧切换时精灵坐标漂移。
  3. 全量地图重烘焙:

    • 多 Worker 并发刷新了 Act 1 ~ Act 5 全部 365 张地图的 samples/d2-packs 资源包,磁盘验证涵盖 146,247 个动画瓦片与 2,712 个常亮火源对象。
  4. 自动化验证与合并:

    • 编写了 tests/dungeon-wilderness-animations.test.ts(12/12 通过)。
    • 全库回归测试 401 个测试文件(3,910 个单测)100% 全部通过。
    • TypeScript 类型检查 0 报错。
    • 成果已合并回 main 分支(Commit ce6fdf1 / 806bc9c)。
## 修复与验证完成汇报 (Fixes #398) 1. **DT1 瓦片动画序列化契约修复**: - 在 `scripts/pack-act-assets.ts` 中将多帧动画瓦片完整序列化为 `[draw.frameIndex, draw.x, draw.y, draw.cellX, draw.cellY, ...draw.animatedFrames]`,彻底解决了离线打包丢失 DT1 瓦片动画帧的问题。 2. **常亮环境火源循环保底与防漂移**: - 针对 `PERSISTENT_ILLUMINATION_TOKENS`(火炬 `TO`、蜡烛烛台 `A1`/`A2`/`3O`/`3o`、火堆 `FX`/`FY`/`FZ`、火盆 `BR`、骨火 `BF`、火木 `FL`)强制 `cycleAnim = true`,防止播放单次后被定格。 - 锚定 `baseX` / `baseY` 坐标基准,防止帧切换时精灵坐标漂移。 3. **全量地图重烘焙**: - 多 Worker 并发刷新了 Act 1 ~ Act 5 全部 365 张地图的 `samples/d2-packs` 资源包,磁盘验证涵盖 146,247 个动画瓦片与 2,712 个常亮火源对象。 4. **自动化验证与合并**: - 编写了 `tests/dungeon-wilderness-animations.test.ts`(12/12 通过)。 - 全库回归测试 401 个测试文件(3,910 个单测)100% 全部通过。 - TypeScript 类型检查 0 报错。 - 成果已合并回 `main` 分支(Commit `ce6fdf1` / `806bc9c`)。
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#398
No description provided.