bug(map-gen): 户外地图 (Wilderness/Siege) 缺少内部地形结构、石质围墙、道路与预设工事 (如血腥丘陵/Act1荒野) #35
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?
问题描述 (Problem Description)
当前户外地图生成器(
src/game/wilderness.ts,对应Levels.txt中DrlgType == 3的 31 张户外地图)生成的地形与原版《暗黑破坏神 II》存在显著缺失,导致户外场景空旷平坦、缺少标志性建筑与战术地形结构:第五幕户外攻城战地图(如血腥丘陵 Bloody Foothills
LevelId = 110)几乎完全是平地:Act 5 - Siege 1,240×48 格)是一条从哈洛加斯城门层层向上推进的阶梯式攻城战壕,包含:Siege Boss预设块)。110-act-5-siege-1-var1仅生成了240×48 = 11520 地面 / 0 墙 · 对象 0,整张地图完全是一马平川的泥土地面,没有任何台阶、堑壕或火炬。第一幕等户外荒野地图(Act 1 Wilderness
LevelId = 2..7)缺少内部石质围墙(Stone Walls)、木栅栏与蜿蜒道路网:根因分析 (Root Cause Analysis)
1. 第五幕攻城地图 (
LevelId = 110血腥丘陵 /111冰冻高地 /112亚瑞特高原) 未接入DRLGOUTSIEGE序列预设拼接D2MOO/source/D2Common/src/Drlg/DrlgOutSiege.cpp的DRLGOUTSIEGE_InitAct5Siege/DRLGOUTSIEGE_PlaceSpecialPresets)中:Act 5 - Siege 1(LevelId = 110)虽然DrlgType = 3,但它的SubType = -1,不依赖随机LvlSub散落;240×48(30×6 个 8×8 Block)的狭长走廊,按固定拓扑顺序拼接LvlPrest.txtDef 819..843(Act 5 - Siege 1至Act 5 - Siege 8、Siege Boss山克高台、Siege To Barricade等) 的完整预设 DS1 地图块;src/game/wilderness.ts既未实现DRLGOUTSIEGE的序列预设拼接,SPECIAL_PRESETS_BY_LEVEL[110]亦为空,且该 LevelType 无通用borderPieces,导致生成器仅执行了fillGround()铺满 11,520 格泥土地板,产生0 墙 / 0 对象的空地图。2. 第一幕内部石质围墙 (
LvlSub.txtBordType/DRLGTILESUB) 被错误限制且未按线性围墙规则生成src/game/wilderness.ts的applySubstitutions(第 1058–1066 行)中:bordType === 0(恰对应LvlSub.txt中的 Act 1 Stone Wall / Wooden Fence 围墙组)硬编码限制为全图最多仅生成 1 个 cluster;DRLGOUTPLACE.cpp与DRLGTILESUB.cpp中,内部石质围墙并非只贴 1 个孤立 DS1 碎片,而是先在荒野 Block 网格中规划内部区域分割线(Sub-room Divider Lines / Border Chains),或通过LvlSub的levels[]方向变体(直线段、拐角、门洞端头)沿网格生成连续贯通的石质围墙/木栅栏院落。3. 户外主干道路网 (
DRLGOUTDOORS_BuildRoad) 尚未实现src/game/wilderness.ts顶部的UNIMPLEMENTED_PASSES明确记录了尚未实现的生成阶段:修复方案规划 (Proposed Solution)
DRLGOUTSIEGE/DRLGOUTBARRICADE):LevelId = 110(血腥丘陵 Bloody Foothills):解析LvlPrest.txt中的Act 5 - Siege *预设 DS1 序列(含城门过渡区、中段阶梯堑壕、山克 Boss 平台Siege Boss、通往冰冻高地的隘口),将其完整拼接到240×48画布上,保留全部多层台阶墙体(Walls)、碰撞网格与火盆/火炬对象(Objects);LevelId = 111(冰冻高地 Frigid Highlands)与112(亚瑞特高原 Arreat Plateau):补齐Act 5 - Barricade攻城塔、拒马防线、野蛮人战俘营(Prison Pens)及高台预设块。applySubstitutions中对bordType === 0的错误单次限制;LvlPrest/DT1中的道路地砖(Road Floor Tiles)连接入口、出口及核心地标。已在提交
25ae728完成修复并重新生成samples/d2-packs户外地图包:1. Act 5 血腥丘陵 (
LevelId = 110/Act 5 - Siege 1) 15 段预制攻城条带拼接stampAct5SiegeStrips(DRLGOUTSIEGE_InitAct5OutdoorLevel复刻):按原版由西向东(x = 0..224,每段宽 16 格)精确拼接 15 个16×48攻城条带 (Def 879Siege To Barricade->Def 878..866Siege Strip 13..1督军山克高台 ->Def 865Siege To Town哈洛加斯城门)。240×48纯泥地(10个图块帧、0墙体、0对象)。548个独立图块帧(9 页 PNG)、1,190个墙体/台阶/悬崖/战壕格、417个对象(包含134个带动画/贴图的燃烧火盆、火炬、投石车、拒马、宝箱及山克等预设事件点),14 条接缝处 48/48 瓦片 100% 吻合,缺失瓦片0。2. Act 5 冰冻高地 (
111) 与 亚瑞特高原 (112)pack-act-assets.ts中对Snow预设片的过早过滤,并在generateWilderness中按LevelId精确分配泥地防御工事 (111) 与雪地悬崖/峡谷/瑞resh Socket 祭坛 (112)。Act 5 - Barricade 1..4(攻城塔楼与防线)、Barricade Prison 1..3(野蛮人战俘营)、红门入口 (Abaddon/Pit of Acheron)、传送点与废墟预设。3. Act 1 户外荒野地图 (
LevelId = 2..7鲜血荒地、冰冷之原、石块旷野等)stampAct1DirtRoads):复刻DRLGOUTDOORS_SpawnAct1DirtPaths,自动铺设连接入口、中央十字路口、出口与地标建筑的 2 格宽蜿蜒泥土小径 (style = 5, prop1 = 194)。stampAct1InteriorStoneWalls):复刻 Act 1 荒野标志性的横纵石墙 (style = 2, prop1 = 129) 与转角石柱 (type = 3),在道路穿过处自动留出拱门通道并同步碰撞阻挡。Act 1 - DOE Entrance)、洞穴入口 (Cave Entrance)、石墙围栏 (Fence Fill 1..6) 及石质废墟 (Act 1 - Ruin)。已完成对 Acts 1–5 全部 136 张地图的系统性排查与修复(提交
6025650),并重新生成全部 66 个户外/特殊地图包:1. Act 4 混沌避难所 (
LevelId = 108/108-act-4-diablo-1)DrlgType = 3(wilderness) 且未实现十字圣殿拼接,原为120×120纯平地面(9帧、0墙、0对象)。stampAct4ChaosSanctuary,精确拼接Act 4 - Diablo Heart(中心五芒星)、Arm N/W/E/S(三大封印翼与南走廊)、Entry与Bridge 2。现含 458 个图块帧、459 格墙体、130 个可视对象(五大封印与五芒星齐全),缺失瓦片0。2. Act 3 热带雨林三图 (
LevelId = 76, 77, 78蜘蛛森林、庞大湿地、剥皮魔丛林)64×192纯绿草地(12帧、0墙、0对象)。Act 3 - Clearing预制库并新增stampAct3Jungle,按2×6的32×32区块拼装南北连接端(Jungle Head/Jungle Tail)、蜿蜒丛林河流(Riv*.ds1)与丛林空地地标(Webby蜘蛛洞穴、Boggy沼泽地洞、Pygmy剥皮魔村落与吉得宾祭坛)。现含 499~613 个图块帧、2,002~2,360 格墙体/丛林河流、72~103 个对象,缺失瓦片0。3. Act 3 崔凡克 (
83) 与 库拉斯特三城 (79, 80, 81)83):修复LvlPrest.txt中"Act 3 - Travincal N "与"Act 3 - Travincal S "末尾空格导致的匹配遗漏,新增stampAct3Travincal完整拼装 6 大神殿区块(TravNW/N/NE/SW/S/SE)。对象数从1提升至 66 个可视对象(75 总对象),包含最高评议会主殿、克林姆的意志宝珠与憎恨的囚牢入口。79) / 商场 (80) / 上层 (81):按区域严格隔离Slums/Burbs/Metro边框,并配置内部16×16街区、残破神殿/废弃寺院等六大神殿入口、下水道入口与传送点,对象数从1~3提升至 45~71 个。4. Act 2 沙漠六图 (
41..46) & Act 5 冰冻苔原 (117)41..46):补齐石制古墓 (Tomb 1)、死亡之殿、绿洲水池 (Oasis 1..3)、蛆虫巢穴 (Lair 1)、古代通道 (Ruins Sewer)、利爪蝮蛇神殿 (Tomb 2Viper1.ds1) 与塔拉夏七大古墓 cliff 入口。117):补齐远古之路冰洞入口 (To Cave 32x16 Snow)、地狱深坑红门 (Hell Portal N)、雪地攻城塔楼与冰湖,图块帧提升至 405 帧、对象提升至 27/54 个。