21 KiB
关卡节点地图
一句话:单关内的节点图选路与推进 状态:已定稿 旧版参考:../../../archive/gdd-2026-09-14/systems-index.md(旧体系未单独成文,散见于归档索引)
设计目的
一关不是一场战斗,而是若干节点(本文含义:关卡内移动的步进单位,画在图上就是一个格)连成的一张节点图。玩家从一个入口出发,在每个路口看着几条路选一条走——这条路上有要打的仗、有开奖励的房间、有能歇脚的篝火——最后所有路线汇到关底 Boss。关卡节点地图管的就是这张图上的"走":怎么选路、走到每种节点上发生什么、Boss 分出胜负后怎么把这一关的结局交回去。
用循环的层次说:冒险是外层骨架,关卡是中循环,战斗是小循环。本文管中循环——图怎么编排、怎么走、每类节点到达时触发什么;一场战斗内部发生什么全部归小循环(战斗结算与敌人系统),本文把控制流移交给它之后就不再看里面。它是冒险结构(序列、大奖励、重开)与战斗循环(结算与敌人)之间的行进层。
系统范围
边界这样划:图上有哪些节点(具体摆什么、摆几个)是关卡表的内容,归冒险结构;本文管图怎么走、走到每步发生什么,以及一张关卡表行集要满足什么结构规则才算合法的图。战斗内部的一切(敌人怎么配、几只、什么技能池、踩雷负向怎么兑)归战斗循环文档(原"伏击怎么叠"随 2026-09-20 八型批伏击退役改述);本文只负责把"第几关、哪个节点"递过去。
负责:
| 负责 | 说明 |
|---|---|
| 节点图结构规则 | 什么算一张合法的关卡节点图(唯一编号、唯一入口、唯一终点、不可回头)——结构校验的规则面 |
| 选路与行进 | 玩家亲手选路前进;兑付后确认、零自动推进(交互形态定稿) |
| 节点兑付触发 | 行进到各类型节点时触发对应兑付:战斗移交、奖励入库、恢复请求、商店覆盖层开闭 |
| 战斗发起组装 | 组装定位信息(关卡序号 + 节点编号),移交战斗结算开战 |
| 关卡收束点 | Boss 战胜利或英雄死亡时定局:先调战斗结算的关卡收束清空库存,再向冒险结构宣布关卡结束 |
不负责:
| 不负责 | 归谁 |
|---|---|
| 关卡序列与图上摆哪些节点(行集内容、关数) | 冒险结构 |
| 关卡大奖励、跨战斗生命账本、失败重开 | 冒险结构 |
| 战斗内部的一切:敌人配置、数量、技能池、踩雷负向 | 敌人系统与战斗结算 |
| 同场多敌种(同一节点配多种敌人)的表结构与取值口径 | 敌人系统(战斗侧改键批) |
| 节点奖励的道具内容、持有与使用语义 | 魔法道具(内容重定批) |
| 敌我数值曲线与遭遇投放节奏 | 难度曲线与Boss |
| 节点图的画面呈现、方块地牢观感 | HUD 框架 |
在核心循环中的位置
冒险结构 ──开始关卡──▶ 关卡节点地图:节点图选路推进(战斗 / 奖励 / 恢复 / 商店 → 关底 Boss)──关卡结束──▶ 冒险结构
核心循环里"关卡:节点链逐节点推进"这一段就是本系统在跑:它从冒险结构接过一关,把玩家沿图送到关底 Boss,再把结局交回去。图上每场战斗都由本系统发起移交;战斗内部的事不归它管。
核心规则
关卡的形状:分支节点图与五类节点
一关内部是一张有方向的节点图:节点之间用连线(本文含义:节点之间允许前进的通道)连接,玩家沿连线从一个节点走到下一个节点。图有三条结构铁律:连线只朝前进方向(没有回头路,整张图无环);图有一个唯一的入口节点;关底 Boss 恒为全图唯一的终点——所有路线最终都汇到它,打赢它这一关就通了。违反任何一条的行集是配置违约,加载期拦截。
图上只有五种节点,封闭枚举,扩类一律走文档修订:
| 节点类型 | 机制承诺 |
|---|---|
| 战斗 | 携带节点编号;行进至此开战(兑付见下节);胜利后回到选路 |
| Boss | 恒为图终点;行进至此开 Boss 战;胜利即关卡收束点 |
| 奖励 | 行进至此触发节点奖励(兑付见下节);反馈呈现后回到选路 |
| 恢复 | 行进至此向冒险结构发治疗封顶回报;反馈呈现后回到选路 |
| 商店 | 行进至此打开商店覆盖层,用 GP(显示名「金币」,战斗掉落的冒险内货币)购买属性提升;离开后兑付确认回选路;不携带战斗行 |
商店房的编排规则(2026-09-20 用户拍板):每关恰 1 个商店房,位置 = 关底 Boss 前一位——哈迪斯式的"决战前最后一个补给点":买到的属性还有整段战斗可消费,错过的成长也没有第二家店可补。Boss 前一位同时是必经位:图拓扑收束使所有入口→Boss 的路径都穿过它,成长保底成为图结构事实而非玩家自觉。这条位置约束不由加载校验承载——图合法性六检零新增,商店房的"每关恰 1 + 必经"由冒烟断言把关。
每个节点在关卡内领一个节点编号(本文含义:关卡内不重复的序号,用来当战斗的定位地址;数据键沿用切片字段 node_depth)。Boss 的编号恒为全图最大——"最深处的房间是关底"这条直感由此保留。单链特例:一张每步只有一条连线的图就是一条链,此时节点编号等于它前面走过的战斗场数。第一关行集就是单链特例,切片代码零改动运行;分支图行集随第二关内容批落地(见 P1)。
呈现侧口径(2026-09-17 用户拍板):节点图的画面表达走方块地牢观感——节点画成地牢房间的方块、连线画成通道——但逻辑拓扑就是本文的节点图,不产生任何额外选路或探索语义。关卡画面本体即节点链进度的呈现载体(选路覆盖层的常驻形态,节点态直接读图:已过暗金 / 当前金 / 候选下一跳通道亮金 / Boss 紫赤描边(旗朱→紫赤 2026-09-26 封印紫批)),不另设进度条组件;视觉规格归 HUD 框架。
行进与选路:兑付后确认,选路就是行进
结论:关卡里没有一次自动前进——每一步都是玩家亲手走出来的。关卡画面(节点图,选路覆盖层的常驻形态)是单关内的常驻枢纽:关卡开始即呈现,此后每次兑付结束都回到它再选路。
行进的完整循环如下:
关卡开始 → 呈现节点图选路停点(关卡画面;入口不自动进入,第一次选路就是"出发")
→ 玩家选一条连线 → 到达所选节点 → 节点兑付(开战 / 发奖 / 回血)
→ 兑付反馈呈现 → 玩家确认 → 返回关卡画面(战后回图)
→ 再选路……直到 Boss 分出胜负
两条纪律:
| 纪律 | 内容 |
|---|---|
| 兑付后确认 | 到达节点立即兑付,不设"进入前确认"步;兑付反馈呈现完,玩家确认才回图。战斗节点的确认挂在战斗结算画面上,奖励/恢复节点挂在兑付反馈覆盖层上,商店节点挂在商店覆盖层的离开动作上——复用既有呈现位,零新增交互范式 |
| 零自动推进 | 确认之后回到关卡画面的选路口:岔路口玩家选一条连线,单链路口确认"继续"。选了才走;不选就停在图上 |
Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选路——关卡已定局,后续流程归冒险结构。
节点兑付:把控制流移交给小循环
人话阶段:节点兑付就是"走到这个房间里,这个房间的事开始发生"。本文按节点类型触发兑付,然后把属于别家领域的事交还给别家——本文自始至终不生产任何数值。
| 类型 | 兑付动作 |
|---|---|
| 战斗 / Boss | 组装定位信息(关卡序号 + 节点编号),移交战斗结算开战;战斗结果(胜负与战后生命)经战斗结果上报回流冒险结构(契约语义归冒险结构,本文不复述) |
| 恢复 | 向冒险结构发治疗封顶回报(载荷 = 该关恢复比例,读本关配置行);按比例回血并封顶的执行归冒险结构 |
| 奖励 | 触发节点奖励兑付:获得一件功能道具并入持有域(见下) |
| 商店 | 打开商店覆盖层(商品陈列与定价读商店表);购买即时生效、写统一冒险加算区(与关卡大奖励同一本账——账本语义归冒险结构,本文不复述);离开覆盖层即兑付确认。商店房不携带战斗行:零敌人、零棋盘、零战斗初始化 |
遭遇构成的编排面——本文对"放什么敌人"的全部职责只有三条:
- 行进到战斗或 Boss 节点,兑付动作就是开战:本文递出定位信息,移交战斗结算。
- 定位信息只有两样:关卡序号 + 节点编号。战斗侧拿编号查表、配敌、掷数量、跑技能池、兑踩雷负向——一切战斗内部初始化归战斗循环文档(原"叠伏击"随 2026-09-20 八型批伏击退役改述),图的初始化不为战斗初始化做任何决定。
- 本文不预掷任何战斗数值、不读敌人数量;教学位节点同样掷骰、没有结构豁免("任何掷骰结果下都稳过"的保证是难度曲线与Boss的数值责任)。
第二关的"新内容 = 既有池新技能"(技能池提案已定)投放时,改的是战斗侧行里引用的技能池内容——节点图结构原样不动,本文无需为投放留任何新结构位。
节点奖励 = 功能道具的正式渠道(2026-09-17 拍板,原 06 清单条目已解决移除):奖励节点兑付 = 获得一件功能道具并进入持有域。道具内容、持有域归属与使用窗口语义归魔法道具内容重定批——切片期道具内容整批后置,奖励节点零兑付直通是合法空态,不是缺陷。
关卡收束点:先清库、后宣布
关卡收束点(一关就此定局的时点)有两个触发:Boss 战胜利(通关),或主角在任意一场战斗倒下(失败)。收束点的动作次序固定,不可换:
关卡收束点(Boss 战胜利 或 英雄死亡)
① 调战斗结算的关卡收束:清空关卡域库存
② 向冒险结构宣布关卡结束(携带结果)
本文与冒险结构之间按接口契约四件套(开始关卡 / 战斗结果上报 / 治疗封顶回报 / 关卡结束)全款承接——语义权威在冒险结构的「与关卡节点地图的边界」一节,本文不复述其载荷细节。本文对战斗域与库存域零直调:清库存只经战斗结算的关卡收束接口,绝不亲手做。
依赖与输出
这张表就是删除任何一方时的影响面清单。
| 方向 | 系统 / 文档 | 接口要点 |
|---|---|---|
| 上游 / 下游 | 冒险结构 | 接口契约四件套(开始关卡 / 战斗结果上报 / 治疗封顶回报 / 关卡结束)+ 收束点次序语义:向下接开始关卡,向上报战斗结果、恢复请求与关卡结束 |
| 上游 | 魔法道具 | 节点奖励的道具内容、持有域与使用窗口语义(内容重定批交付;切片期直通空态) |
| 上游 | 敌人系统 | 定位信息的消费方:本文递出关卡序号 + 节点编号,按编号生成单位归它 |
| 上游 | 难度曲线与Boss | 敌我数值曲线与遭遇投放节奏的调参所有权;本文零数值 |
| 上游 | 数据配置 | 商店表(商品行 / GP 掉落参数 / 价格参数)的承载与统一读取;商店覆盖层的商品与定价数据源 |
| 下游 | 战斗结算 | 两个调用入口的发起方:战斗发起组装(定位信息)、关卡收束(清库) |
| 下游 | HUD 框架 | 节点图呈现(方块地牢观感;关卡画面节点态即节点链进度呈现载体)、当前位置与选路口、兑付反馈覆盖层的数据源 |
P0 最小闭环
- 从冒险结构接收开始关卡(关卡序号、当前生命、生效上限),加载本关节点图并呈现选路停点(关卡画面),玩家在图上选出第一跳,行进自所选节点开始(入口节点不自动进入)。
- 每节点兑付完成并确认后返回关卡画面,玩家再选路前进;岔路选一条、单链点继续;零自动推进。
- 战斗 / Boss 节点:组装关卡序号 + 节点编号,移交战斗结算开战;战斗结束向冒险结构上报战斗结果。
- 奖励节点:触发节点奖励兑付(切片期 = 直通合法空态);恢复节点:向冒险结构发治疗封顶回报;商店节点:打开商店覆盖层,购买即时生效,离开后兑付确认。
- Boss 战胜利或任意战斗倒下 = 关卡收束点:先调战斗结算的关卡收束清库,再宣布关卡结束。
- 第一关行集 = 单链特例(图的最简形态),切片按单链运行零改动;分支图行集与图版实现随第二关内容批(P1)。
P1 / P2 后置
后置项逐条列出;复活任何一条都走本文修订,不许静默加回。
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| P1 | 分支节点图内容与实现批 | 图结构行集(节点+连线)、切片行进代码的图版实现、跨文档"节点深度/节点链"措辞对齐——随第二关内容批同批落;落地前单链特例运行(合法态) |
| P2 | 精英节点与精英遭遇 | 不设编码位——精英以内容方式承载(某编号节点配强敌行集);与难度曲线、战斗侧批联动设计 |
| P2 | 事件类节点候选 | 商店房已随 2026-09-20 GP+商店房批落地(v1.1),"商人类撞抽象货币红线"的旧注记由不做清单的现行条款替代;事件类节点仍无内容系统承载;扩类一律走文档修订 |
调参表
暂无本系统自有的参数——选路与行进无数值可调。图结构合法性(唯一编号、唯一入口、唯一终点、无环)是规则不是参数,由加载校验强制;链上节点构成归冒险结构的关卡表,战斗数值归难度曲线与Boss。
验收标准
- 图合法:行集通过加载校验——节点编号关卡内唯一、入口唯一、Boss 为唯一终点、连线无环、所有节点沿连线可达 Boss;违规配置加载期致命。
- 行进自主:从入口到 Boss 的每一次前进都由玩家选路发起(含关卡开始后的第一跳——关卡开始停在图上,入口节点不自动进入);不存在任何自动推进路径;倒下时行进终止。
- 兑付移交:每场开战调用携带(关卡序号 + 节点编号),与节点图上该节点位置一致;每场战斗结束恰一次战斗结果上报。
- 兑付后确认:战斗节点的继续确认挂战斗结算画面,奖励/恢复挂兑付反馈覆盖层;到达与兑付之间无确认步。
- 恢复兑付:治疗封顶回报载荷 = 该关恢复比例(读关卡配置行);满血回复 0 是合法状态(执行语义归冒险结构)。
- 奖励兑付:奖励节点兑付恰触发一次;切片期直通空态合法,内容批后 = 功能道具入库。
- 商店房编排:每关恰 1 个商店房、Boss 前一位必经位(所有入口→Boss 路径都穿过它)——由冒烟断言把关,图合法性校验零新增检查;商店房不携带战斗行;行进至此打开商店覆盖层、离开后兑付确认回选路。
- 收束有序且唯一:关卡清库发生在关卡结束宣布之前;每关恰宣布一次关卡结束;Boss 胜 = 通关、倒下 = 失败。
- 四件接口全款:与冒险结构登记的开始关卡、战斗结果上报、治疗封顶回报、关卡结束逐件对上,不另起平行通道。
- 单链特例合法:单链行集(每步恰一条连线)是合法图形态;第一关按单链运行,切片零改动。
- 呈现只读:节点图结构、当前位置、可选下一节点对呈现层只读可见(读数契约归 HUD 框架)。
待办
本系统待办条目已统一收编至 06-待办清单,本节不再逐条登记。
版本历史
| 版本 | 日期 | 说明 |
|---|---|---|
| v0.1 | 2026-09-15 | 自归档线索整合为范围草案(旧体系未单独成文) |
| v0.2 | 2026-09-15 | 待拍板"多敌数量的消费面"条目同步教学位掷骰口径(随难度曲线与Boss同批修订):删除"教学位节点固定不掷" |
| v1.0 | 2026-09-17 | 定稿(逐问题拍板,全用户裁决):① 形态重开——用户拍板重开05-不做清单「路径分支地图后置」裁定,定稿为分支节点图(分层节点图,杀戮尖塔 / 哥布林弹珠同构;方块地牢美术观感、逻辑为节点图),P0 图定稿 + 单链特例先行;② 节点类型定稿四类封闭枚举不扩类;③ 行进交互定稿全节点确认 + 兑付后确认、零自动推进;④ 遭遇构成收窄为编排面三条(战斗内部初始化全归战斗小循环),寻址定稿节点编号升级(node_depth 语义升级为关卡内唯一节点编号,表键与字段名零改动,单链零漂移);⑤ 节点奖励拍板为功能道具的正式渠道(内容归魔法道具内容重定批,切片期直通为合法空态);⑥ 「精英与 Boss 编码位」(同层多遭遇由节点编号消解,不设编码位)与「多敌数量的消费面」(关卡层零消费)两悬案收口,同场多敌种面拆归战斗侧;⑦ 切片行进代码对照的接口漂移清单登记 06 |
| v1.0.1 | 2026-09-17 | P1 分支节点图内容与实现批落地(用户拍板任务批——切片代码 / 难度曲线与Boss v0.7 / registry / 06 待办同批):首张分支图 = 切片关卡 2「第二层 · 幽暗地域」行集落地(9 节点网状图:入口 0 → 中间三层 2/3/2 → Boss 8,真实岔路 4 处,奖励点 + 恢复点各 1,战斗节点 6 + Boss);行进器图版推进(choices_presented 选路态 + pick_next_node——零自动推进,战斗胜利不再自动推进、continue_after_node 泛化为兑付确认,06 接口漂移清单 ④⑤⑧ 清偿);图合法性校验落地 LevelTable.validate(单链与图同一套算法,L1 零迁移过校验,违规加载致命);节点图选路 UI(选路覆盖层整图自绘——房间方块 + 通道连线 + 当前/候选高亮,占位图形质量;顶栏图形态渲染行进序列 + 候选);首页"关卡 2 试玩"直入口(测试模式,≠ 两关序列生效)。本版本号只记实现批状态,图规则口径零改动 |
| v1.1 | 2026-09-20 | 商店房扩类(GP+商店房批,用户拍板——与冒险结构 / 战斗结算 / 地图战斗资源 / 难度曲线与Boss / registry / 切片同批):① 节点封闭枚举四类→五类(+商店房);② 编排规则定稿——每关恰 1、关底 Boss 前一位必经位(哈迪斯式"决战前最后一个补给点"定位);必经位由冒烟断言承载、图合法性六检零新增;③ 兑付定稿——打开商店覆盖层、购买即时生效写统一冒险加算区(与关卡大奖励同账,归冒险结构)、离开后兑付确认;商店房不携带战斗行;④ 节点兑付表 / 纪律表 / 依赖表 / P0 闭环 / 验收标准 / P2「事件类节点候选」注记同步 |
| v1.2 | 2026-09-23 | 停点前移批(冒险入口流程倒置修复,用户 2026-09-23 拍板;上位裁决 ../../../dev/architecture/adr-0006-board-node2d-rendering.md 与 ../../../dev/architecture/board-node2d-migration-plan.md §1,代码实装另批并行):① 行进循环改停点前移口径——关卡开始即呈现节点图选路停点(关卡画面 = 选路覆盖层常驻化,入口节点不自动进入,第一次选路就是"出发"),选路确认进节点,兑付确认后返回关卡画面再选路(战后回图);兑付后确认、零自动推进两条纪律语义不变,只改承载位;② 呈现侧口径补进度承载条款——关卡画面本体即节点链进度呈现载体(节点态直接读图:已过暗金 / 当前金 / 候选下一跳通道亮金 / Boss 旗朱描边),不另设进度条组件(战斗屏 A 区进度条随批退役);③ P0 闭环两条、依赖表 HUD 框架行、验收标准「行进自主」条同步。批内代拍板三项已追认(2026-09-24 用户确认):① B/C/D 字母保持不重编;② 28px 纵向空间划归 C/D 底行;③ 关卡画面进度呈现由选路覆盖层节点态承载(登记面见 HUD框架 v0.8) |