feat(map-gen/maze): 补齐迷宫楼梯表 MAZE_LEVEL_TYPE_PROFILES,消除 215 处兜底楼梯 #37
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景说明
M8「世界连通」(#23)已经把
Levels.txt的Vis0..7/Warp0..7提炼成了一张全局世界图,并且发现 DS1 的type = 10 / 11特殊瓦片的style字段就是Warp0..7的槽位编号——也就是说,原版美术资源自己就标注了每一处楼梯口的精确坐标。烘焙管线(scripts/pack-act-assets.ts的buildSceneLinks)因此按五遍优先级定位每一条出入口:findWarpTiles(ds1)—— 美术瓦片标注,标记为source: 'tile',这是真实坐标;'tile';source: 'room',房间对、房间内位置近似;findBorderOpening从碰撞图反推无缝接缝;source: 'fallback'。第 5 遍存在的唯一理由是「进得去出不来的关卡比一个位置不准的楼梯更糟」。但它是一个谎言,
verify-packs每次都会把它的数量打印出来:本 issue 追踪消除这 215 处兜底楼梯。
根因
src/game/maze.ts中的MAZE_LEVEL_TYPE_PROFILES(约 L486-601)逐条转写了DRLGMAZE_GenerateLevel内联的ReplaceRoomPreset调用序列——也就是「把布局里的哪个房间换成Prev/Next/Down/Quest楼梯间」这张表。目前只转写了一部分关卡类型,其余全部是specials: [],于是生成器根本不盖楼梯间,第 3 遍无料可用;而这些关卡类型所用的拼图碎片恰好又不带type = 10 / 11标记,第 1 遍也落空,只能落到兜底。specials: []的关卡类型清单Act 1 - BarracksAct 2 - SewerAct 2 - TombprevChain: 'tomb'Act 2 - LairAct 2 - HaremAct 2 - BasementAct 3 - SpiderAct 3 - KurastAct 3 - DungeonAct 4 - LavaAct 5 - Ice CavesAct 5 - TempleAct 5 - BaalprevChain: 'baal'Act 5 - LavalavaPairs: trueAct 3 - Sewer属于部分转写:只有levelIds: [92]的一条prev,其余楼梯仍然缺失。待实现内容 (TODOs)
补齐
MAZE_LEVEL_TYPE_PROFILESDRLGMAZE_GenerateLevel里对应分支的ReplaceRoomPreset调用序列,填出specials数组:kind(prev/next/down/quest/treasure)、候选entries()(plainSides/sides/direction)、以及levelIds/exceptLevelIds/inPlaceOnly限定。prevChain、singleRoom、lavaPairs、ring、grow、theme、opening。核对第 1 遍与第 3 遍的一致性
'tile'优于'room'),现有placedWarps去重逻辑已经保证了这一点,但需要补一条回归断言。收紧验收阈值
scripts/verify-packs.ts目前只统计并打印兜底数量。补齐之后应把它改成断言:fallback === 0,让这个数字再也涨不回来。顺带处理的关联缺口
UNIMPLEMENTED_PASSES里的DRLGMAZE_PlaceAct2TombStuff、DRLGMAZE_PlaceAct2LairStuff、DRLGMAZE_PlaceAct3DungeonStuff、DRLGMAZE_PlaceAct3SewerStuff、DRLGMAZE_PlaceAct3MephistoStuff、DRLGMAZE_PlaceAct5TempleStuff、DRLGMAZE_PlaceAct5BaalStuff、DRLGMAZE_PlaceAct5IceStuff与本 issue 是同一批分支上的代码,转写楼梯表时顺手一起看比分两次看便宜。验收标准
MAZE_LEVEL_TYPE_PROFILES中不再有specials: [](除非确实核对过原版该类型就是没有ReplaceRoomPreset,并在注释里写明)。npm run verify:packs报告 兜底 0。npx tsx scripts/verify-generators.ts全绿,迷宫连通性检查不回退。关联代码位置
src/game/maze.ts的MAZE_LEVEL_TYPE_PROFILES(约 L486-601)、SpecialStep/entries()(约 L387-475)、findSpecial(约 L1099)、stamp()(约 L1592-1690)scripts/pack-act-assets.ts的buildSceneLinks(第 3 遍与第 5 遍)src/game/warp-tiles.tsscripts/verify-packs.ts关联 issue:#23(M8 世界连通)