feat(map-gen/wilderness): 野外暗金怪与特殊 NPC 由硬编码匹配重构为基于 SuperUniques.txt 的数据驱动生成 #57

Closed
opened 2026-09-17 05:20:45 +00:00 by troytt · 1 comment
Owner

背景与现状

当前 src/game/wilderness.ts:3180 中的 spawnLandmarkEntities 采用硬编码方式仅手写了第一幕的 5 处地标实体(卡兰尼休、毕须博须、血鸟、树头木拳、女武神弗拉维)。

暗黑2原版逻辑(Oracle / Ground Truth)

  • 原版所有野外超级暗金怪(如干燥高地的碎骨者、遥远绿洲的甲虫大仙、失落城市的黑手、雪原的冰火魔王等)与特殊 NPC,均由 SuperUniques.txt 与 MonPreset.txt 表驱动在对应地貌预设周围精准生成。

差异点与缺陷表现

  • 第二幕至第五幕的野外地图完全缺失标志性暗金 BOSS 与地标 NPC。

解决建议与改造方案

重构地标生成逻辑,建立基于 SuperUniques.txt 与场景预设关联的通用实体生成流水线。

## 背景与现状 当前 `src/game/wilderness.ts:3180` 中的 `spawnLandmarkEntities` 采用硬编码方式仅手写了第一幕的 5 处地标实体(卡兰尼休、毕须博须、血鸟、树头木拳、女武神弗拉维)。 ## 暗黑2原版逻辑(Oracle / Ground Truth) - 原版所有野外超级暗金怪(如干燥高地的碎骨者、遥远绿洲的甲虫大仙、失落城市的黑手、雪原的冰火魔王等)与特殊 NPC,均由 `SuperUniques.txt` 与 `MonPreset.txt` 表驱动在对应地貌预设周围精准生成。 ## 差异点与缺陷表现 - 第二幕至第五幕的野外地图完全缺失标志性暗金 BOSS 与地标 NPC。 ## 解决建议与改造方案 重构地标生成逻辑,建立基于 `SuperUniques.txt` 与场景预设关联的通用实体生成流水线。
Author
Owner

修复完成并验证通过

  • 关联分支: fix/issue-57
  • 提交记录: 92d6731daee8a3a7ee61ef34bbd8e4ce371d4d1f
  • 核心改动:
    1. 数据驱动重构: 定义并导出 LandmarkEntityDef 与 CANONICAL_LANDMARK_ENTITIES,完整覆盖 Act 1~5 全野外 25 个地标实体(23 个 SuperUniques 暗金怪 + 2 个守卫 NPC: Flavie 与 Hadriel);
    2. 数据表动态解析与覆盖: 实现 buildLandmarkEntitiesFromTables,动态解析 SuperUniques.txt 与 MonPreset.txt(DS1 物件 ID、词缀映射、随从数量、名称键等);
    3. 预设地标锚定与物件放置: 重构 spawnLandmarkEntities,将实体锚定至预设包围盒中心或相对坐标,正确作为 DS1 Type 1 实体写入 canvas.objects(按子瓦片坐标 tileX*5+2, tileY*5+2)及 stats.landmarkEntities;
    4. 多暗金 Boss 关卡支持: 扩展 CANONICAL_SUPER_UNIQUES_BY_LEVEL 与 planLevelMonsters 支持同关卡多 Boss(如 Level 110 血腥丘陵同时生成 Dac Farren 与 Shenk the Overseer);
    5. 单元测试与全量回归: 新增 tests/wilderness-superuniques.test.ts(包含覆盖 1~5 幕、动态表覆盖、多 Boss 生成等单测),更新 tests/wilderness-features.test.ts,全量 34 个测试文件共 642 个单测 100% 通过,npx tsc --noEmit 0 报错。
### 修复完成并验证通过 - **关联分支**: `fix/issue-57` - **提交记录**: `92d6731daee8a3a7ee61ef34bbd8e4ce371d4d1f` - **核心改动**: 1. **数据驱动重构**: 定义并导出 `LandmarkEntityDef` 与 `CANONICAL_LANDMARK_ENTITIES`,完整覆盖 Act 1~5 全野外 25 个地标实体(23 个 SuperUniques 暗金怪 + 2 个守卫 NPC: Flavie 与 Hadriel); 2. **数据表动态解析与覆盖**: 实现 `buildLandmarkEntitiesFromTables`,动态解析 `SuperUniques.txt` 与 `MonPreset.txt`(DS1 物件 ID、词缀映射、随从数量、名称键等); 3. **预设地标锚定与物件放置**: 重构 `spawnLandmarkEntities`,将实体锚定至预设包围盒中心或相对坐标,正确作为 DS1 Type 1 实体写入 `canvas.objects`(按子瓦片坐标 `tileX*5+2, tileY*5+2`)及 `stats.landmarkEntities`; 4. **多暗金 Boss 关卡支持**: 扩展 `CANONICAL_SUPER_UNIQUES_BY_LEVEL` 与 `planLevelMonsters` 支持同关卡多 Boss(如 Level 110 血腥丘陵同时生成 Dac Farren 与 Shenk the Overseer); 5. **单元测试与全量回归**: 新增 `tests/wilderness-superuniques.test.ts`(包含覆盖 1~5 幕、动态表覆盖、多 Boss 生成等单测),更新 `tests/wilderness-features.test.ts`,全量 34 个测试文件共 642 个单测 100% 通过,`npx tsc --noEmit` 0 报错。
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#57
No description provided.