Files
gplan-2/design/gdd/systems/冒险循环/关卡节点地图.md
T

20 KiB
Raw Blame History

关卡节点地图

一句话:单关内的节点图选路与推进 状态:现行为 v2.3

设计目的

一关不是一场战斗,而是由关卡表配置的一组节点(本文含义:关卡内移动的步进单位,画在图上就是一个格)连成的一张节点图。玩家从一个入口出发,在每个路口看着几条路选一条走——这条路上有要打的仗、有开奖励的房间、有能歇脚的篝火——最后走到关底 Boss(终点可以有多个,走哪条路决定打谁)。关卡节点地图管的就是这张图上的"走":怎么选路、走到每种节点上发生什么、Boss 分出胜负后怎么把这一关的结局交回去。

用循环的层次说:冒险是外层骨架,关卡是中循环,战斗是小循环。本文管中循环——图怎么编排、怎么走、每类节点到达时触发什么;一场战斗内部发生什么全部归小循环(战斗结算与敌人系统),本文把控制流移交给它之后就不再看里面。它是冒险结构(序列、大奖励、重开)与战斗循环(结算与敌人)之间的行进层。

系统范围

边界这样划:图从哪来(按参数长图)与什么算合法图(产出规格)归关卡节点图生成;图上具体摆什么料(敌人行集、奖励内容)归各 owner 系统;本文管图怎么走、走到每步发生什么,以及加载期的合法性校验动作(规则语义以关卡节点图生成的产出规格为准)。战斗内部的一切(敌人怎么配、几只、什么技能池、踩雷负向怎么兑)归战斗循环文档;本文只负责把"第几关、哪个节点"递过去。

负责:

负责 说明
图合法性校验 加载期校验动作;合法图的规则语义以关卡节点图生成的产出规格为准
选路与行进 玩家亲手选路前进;兑付后确认、零自动推进(交互形态定稿)
节点兑付触发 行进到各类型节点时触发对应兑付:战斗移交、奖励入库、恢复请求、商店覆盖层开闭
战斗发起组装 组装定位信息(关卡序号 + 节点深度),移交战斗结算开战
关卡收束点 Boss 战胜利或英雄死亡时定局:先调战斗结算的关卡收束清空库存,再向冒险结构宣布关卡结束

不负责:

不负责 归谁
关卡序列与关数 冒险结构
图从哪来、节点类型构成与合法图规则 关卡节点图生成
关卡大奖励、跨战斗生命、失败重开 冒险结构
战斗内部的一切:敌人配置、数量、技能池、踩雷负向 敌人系统与战斗结算
同场多敌种(同一节点配多种敌人)的表结构与取值口径 敌人系统
节点奖励件的分类与凭证定义 奇物(提升池构成与库存归冒险结构)
敌我数值曲线与遭遇投放节奏 难度曲线与Boss
节点图的画面呈现、方块地牢观感 HUD 框架

在核心循环中的位置

冒险结构 ──开始关卡──▶ 关卡节点地图:节点图选路推进(战斗 / 奖励 / 恢复 / 商店 → 关底 Boss)──关卡结束──▶ 冒险结构

核心循环里"关卡:节点链逐节点推进"这一段就是本系统在跑:它从冒险结构接过一关,把玩家沿图送到关底 Boss,再把结局交回去。图上每场战斗都由本系统发起移交;战斗内部的事不归它管。

核心规则

关卡的形状:分支节点图与五类节点

一关内部是一张有方向的节点图:节点之间用连线(本文含义:节点之间允许前进的通道)连接,玩家沿连线从一个节点走到下一个节点。结构铁律的规则语义以关卡节点图生成的产出规格为准,走图视角三句:连线只朝前进方向(没有回头路,整张图无环);每条路径恰好从一个入口出发、恰好到达一个终点;终点恒为 Boss(终点可以有多个,走哪条路决定打谁)。违反任何一条的行集是配置违约,加载期拦截。

图上现行五种节点,可扩展枚举(扩展通道=加枚举类型+落兑付实现+调生成配比+本文档与关卡节点图生成同批修订;扩展位见关卡节点图生成配比节):

节点类型 机制承诺
战斗 携带节点深度;行进至此开战(兑付见下节);胜利后回到选路
Boss 恒为图终点;行进至此开 Boss 战;胜利即关卡收束点
奖励 行进至此触发节点奖励(兑付见下节);反馈呈现后回到选路
恢复 行进至此向冒险结构发治疗封顶回报;反馈呈现后回到选路
商店 行进至此打开商店覆盖层,用 GP(战斗掉落的冒险内货币)购买属性提升;离开后兑付确认回选路;不携带战斗行。进店从共享池抽 3 展示、买 1 后三件全重抽(未买不保留)、货架买空=空架合法态(pool 模式现行);独立刷新:基础免费 0 次(天赋/营地侧刷新次数增益位预留)+ GP 付费刷新 ceil(20×1.8^已付费刷) provisional,重抽=共享池同源(shop_draw 同签);库存与定价归冒险结构共享池节

商店房的编排规则:每个终点前一位恰一家店——哈迪斯式的"决战前最后一个补给点":买到的属性还有整段战斗可消费,错过的成长也没有第二家店可补。终点前一位同时是必经位:每名玩家一局恰好必经一家店,成长保底是图结构事实而非玩家自觉。这条位置约束不由加载校验承载,由冒烟断言把关(摆放规则语义见关卡节点图生成配比节)。

每个节点在图上有节点深度(本文含义:自入口沿路走到该节点的最长路径步数;多入口时取距任一入口的最长路径),用来当战斗的定位地址——遭遇坐标=关卡序号+节点深度,敌人表按深度带(深度区间)配池,寻址语义见敌人系统。不用最短路径:合流节点或多入口图上取最短,会让某些出边指向深度不增甚至更浅的节点,破坏「连线只朝前进方向」的无环判据。"最深处是关底"的直感由深度承载:终点恒在各路径最深处。单链(每步只有一条连线)是合法退化形态,节点深度等于它前面走过的战斗场数;三关参数档都含岔口,第一关不再是单链。图的来源见关卡节点图生成。

呈现侧口径(2026-09-17 用户拍板):节点图的画面表达走方块地牢观感——节点画成地牢房间的方块、连线画成通道——但逻辑拓扑就是本文的节点图,不产生任何额外选路或探索语义。关卡画面本体即节点链进度的呈现载体(选路覆盖层的常驻形态,节点态直接读图:已过暗金 / 当前金 / 候选下一跳通道亮金 / Boss 紫赤描边(紫赤+深墨环,视觉定稿见 level-map)),不另设进度条组件;视觉规格归 HUD 框架。

商店覆盖层呈现(呈现 spec:design/gdd/ux/shop.md v1.0;pool 模式货架面=共享池三选一同构卡〔进店抽 3/买 1 全重抽/空架售罄态〕,与三选一奖励同一交互语言;legacy 固定三件面随对照模式保留。库存余量不呈现(2026-10-04 用户裁)——货架卡不带「库存余 N/∞」字样,库存语义仍在共享池令牌库、只是不呈现):兑付 = 打开商店覆盖层(模态)——货架卡陈列、GP 余额读数、购买/离开;离开后兑付确认回选路。本节锁编排面(何时开/何时关/回选路),呈现细节归 spec;定价数值归难度曲线与Boss(shop.tres)。

行进与选路:兑付后确认,选路就是行进

结论:关卡里没有一次自动前进——每一步都是玩家亲手走出来的。关卡画面(节点图,选路覆盖层的常驻形态)是单关内的常驻枢纽:关卡开始即呈现,此后每次兑付结束都回到它再选路。

行进的完整循环如下:

关卡开始 → 呈现节点图选路停点(关卡画面;入口不自动进入,第一次选路就是"出发")
  → 玩家选一条连线 → 到达所选节点 → 节点兑付(开战 / 发奖 / 回血)
  → 兑付反馈呈现 → 玩家确认 → 返回关卡画面(战后回图)
  → 再选路……直到 Boss 分出胜负

两条纪律:

纪律 内容
兑付后确认 到达节点立即兑付,不设"进入前确认"步;兑付反馈呈现完,玩家确认才回图。战斗节点的确认挂在战斗总结结算上(呈现 spec:design/gdd/ux/settlement-summary.md),奖励/恢复节点挂在兑付反馈覆盖层上,商店节点挂在商店覆盖层的离开动作上——复用既有呈现位,零新增交互范式
零自动推进 确认之后回到关卡画面的选路口:岔路口玩家选一条连线,单链路口确认"继续"。选了才走;不选就停在图上

Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选路——关卡已定局,后续流程归冒险结构。

选路信息可见性:近处见类型,远处起雾

看图选路时玩家知道什么,三条:

层 可见什么
图结构 全图可见:节点、连线、入口、终点位置——路线形状永远明牌
节点类型 可见范围(邻近 N 层)内可见;范围外信息迷雾,只见结构、不见类型
节点内详情 图上从不显示——打谁、给什么到兑付才揭晓;内容生成时已定,不是到达随机

终点恒为 Boss,Boss 标记与终点身份不入雾——「走哪条=打谁」是提前承诺,承诺必须有信息前提:雾遮的是途中有什么,不遮终局打谁。N 为本系统自有参数(见调参表)。

实现语义三句:层距=从入口出发的 BFS 层差;Boss(含终点)与当前候选节点双豁免,恒显类型;可见性只算当前这一圈——已走过的节点回雾,不累积记忆。

节点兑付:把控制流移交给小循环

人话阶段:节点兑付就是"走到这个房间里,这个房间的事开始发生"。本文按节点类型触发兑付,然后把属于别家领域的事交还给别家——本文自始至终不生产任何数值。

类型 兑付动作
战斗 / Boss 组装定位信息(关卡序号 + 节点深度),移交战斗结算开战;战斗结果(胜负与战后生命)经战斗结果上报回流冒险结构(契约语义归冒险结构,本文不复述)
恢复 向冒险结构发治疗封顶回报(载荷 = 该关恢复比例,读本关配置行);按比例回血并封顶的执行归冒险结构
奖励 触发节点奖励兑付:提升三选一(与关卡完成三选一共享同一令牌库——七种令牌洗牌不放回抽 3 点选一件,池耗即上限;见下节)
商店 打开商店覆盖层(pool 模式:进店抽 3〔shop_draw 封闭流恰一 scope〕+买 1 全重抽;legacy 对照模式:商品陈列读商店表);购买即时生效、经共享池写统一冒险加算区(与关卡大奖励同一笔——库存语义归冒险结构,本文不复述);离开覆盖层即兑付确认。商店房不携带战斗行:零敌人、零棋盘、零战斗初始化

遭遇构成的编排面——本文对"放什么敌人"的全部职责只有三条:

  1. 行进到战斗或 Boss 节点,兑付动作就是开战:本文递出定位信息,移交战斗结算。
  2. 定位信息只有两样:关卡序号 + 节点深度。战斗侧按深度带配池查表、配敌、掷数量、跑技能池、兑踩雷负向——一切战斗内部初始化归战斗循环文档,图的初始化不为战斗初始化做任何决定。
  3. 本文不预掷任何战斗数值、不读敌人数量;教学位节点同样掷骰、没有结构豁免("任何掷骰结果下都稳过"的保证是难度曲线与Boss的数值责任)。

第二关的"新内容 = 既有池新技能"(技能池构成已定稿入敌人系统技能池节)投放时,改的是战斗侧行里引用的技能池内容——节点图结构原样不动,本文无需为投放留任何新结构位。

节点奖励 = 提升三选一(用户 2026-10-01 拍板:与通关三选一共享同池):奖励节点到达即开三选一(呈现 = 提升三选一覆盖层共用面,spec:node-reward.md v2.0)——从提升池七种(攻击/生命上限/护甲/GP 袋/行动点件/恢复件/刷新件)按同一令牌库洗牌不放回抽 3(同 kind 去重、同一封闭随机流),玩家点选一件兑付(选中踢池、未选回池;秘宝件已出池,满位替换子交互随之不再触发)。件获取次数计数与令牌库为冒险级单例——两渠道同一令牌库合计消耗。「池空直通」为合法态——池耗即枯竭,空库 = 零候选合法态直通(见冒险结构令牌池节)。

关卡收束点:先清库、后宣布

关卡收束点(一关就此定局的时点)有两个触发:Boss 战胜利(关卡完成),或主角在任意一场战斗倒下(失败)。收束点的动作次序固定,不可换:

关卡收束点(Boss 战胜利 或 英雄死亡)
  ① 调战斗结算的关卡收束:清空关卡域库存
  ② 向冒险结构宣布关卡结束(携带结果)

本文与冒险结构之间按接口契约四件套(开始关卡 / 战斗结果上报 / 治疗封顶回报 / 关卡结束)全款承接——语义权威在冒险结构的「与关卡节点地图的边界」一节,本文不复述其载荷细节。本文对战斗域与库存域零直调:清库存只经战斗结算的关卡收束接口,绝不亲手做。

依赖与输出

这张表就是删除任何一方时的影响面清单。

方向 系统 / 文档 接口要点
上游 / 下游 冒险结构 接口契约四件套(开始关卡 / 战斗结果上报 / 治疗封顶回报 / 关卡结束)+ 收束点次序语义:向下接开始关卡,向上报战斗结果、恢复请求与关卡结束
上游 奇物 节点奖励件的分类、凭证与持有语义(提升池构成与共享池库存归冒险结构)
上游 敌人系统 定位信息的消费方:本文递出关卡序号+节点深度,敌人侧按深度带配池生成单位
上游 难度曲线与Boss 敌我数值曲线与遭遇投放节奏的调参所有权;本文零数值
上游 数据配置 商店表(商品行 / GP 掉落参数 / 价格参数)的承载与统一读取;商店覆盖层的商品与定价数据源
下游 战斗结算 两个调用入口的发起方:战斗发起组装(定位信息)、关卡收束(清库)
下游 HUD 框架 节点图呈现(方块地牢观感;关卡画面节点态即节点链进度呈现载体)、当前位置与选路口、兑付反馈覆盖层的数据源

P0 最小闭环

  1. 从冒险结构接收开始关卡(关卡序号、当前生命、生效上限),加载本关节点图并呈现选路停点(关卡画面),玩家在图上选出第一跳,行进自所选节点开始(入口节点不自动进入)。
  2. 每节点兑付完成并确认后返回关卡画面,玩家再选路前进;岔路选一条、单链点继续;零自动推进。
  3. 战斗 / Boss 节点:组装关卡序号 + 节点深度,移交战斗结算开战;战斗结束向冒险结构上报战斗结果。
  4. 奖励节点:触发节点奖励兑付 = 提升三选一(与关卡完成三选一共享令牌库);恢复节点:向冒险结构发治疗封顶回报;商店节点:打开商店覆盖层,购买即时生效,离开后兑付确认。
  5. Boss 战胜利或任意战斗倒下 = 关卡收束点:先调战斗结算的关卡收束清库,再宣布关卡结束。
  6. 单链是合法退化形态;三关参数档都含岔口,第一关即有选择(图的来源见关卡节点图生成)。

P1 / P2 后置

后置项逐条列出;复活任何一条都走本文修订,不许静默加回。

优先级 内容 后置原因
P2 精英节点与精英遭遇 不设编码位——精英以内容方式承载(某编号节点配强敌行集);与难度曲线、战斗侧批联动设计。精英怪设定已登记预留(同立绘+附加特征标记+数值更强、钥石掉 1 个预留——实装随怪物批,本文件行集零改动)
P2 事件类节点候选 商店房已落地,"商人类撞抽象货币红线"的旧注记由不做清单的现行条款替代;事件类节点仍无内容系统承载;扩类一律走文档修订

调参表

本系统自有参数一项——信息可见层数 N(int ≥ 1,provisional,已落数据表:level.tres 的 info_visible_layers,现行值 2):节点类型可见距离(层),范围外信息迷雾只见结构。图结构合法性是规则不是参数(规则语义见关卡节点图生成的产出规格),由加载校验强制;图的来源与节点构成归关卡节点图生成,战斗数值归难度曲线与Boss。

验收标准

  • 图合法:行集通过加载校验——每条路径恰好从一个入口出发、恰好到达一个终点,终点恒为 Boss(可多个)、连线无环、任意入口出发的任意路径都到达某一个终点;违规配置加载期致命(规则语义见关卡节点图生成产出规格)。
  • 行进自主:从入口到 Boss 的每一次前进都由玩家选路发起(含关卡开始后的第一跳——关卡开始停在图上,入口节点不自动进入);不存在任何自动推进路径;倒下时行进终止。
  • 兑付移交:每场开战调用携带(关卡序号 + 节点深度),与节点图上该节点位置一致;每场战斗结束恰一次战斗结果上报。
  • 兑付后确认:战斗节点的继续确认挂战斗总结结算(settlement-summary.md),奖励/恢复挂兑付反馈覆盖层;到达与兑付之间无确认步。
  • 恢复兑付:治疗封顶回报载荷 = 该关恢复比例(读关卡配置行);满血回复 0 是合法状态(执行语义归冒险结构)。
  • 奖励兑付:奖励节点兑付恰触发一次;池空直通空态合法,现行 = 提升三选一(与关卡完成三选一共享令牌库)取一件按件类兑付(spec:node-reward.md v2.x;兑付路由归冒险结构提升池节)。
  • 商店房编排:每个终点前一位恰一家店、每名玩家一局必经恰一家(所有入口→终点路径都穿过且恰穿过一家店)——由冒烟断言把关,图合法性校验零新增检查;商店房不携带战斗行;行进至此打开商店覆盖层、离开后兑付确认回选路。
  • 收束有序且唯一:关卡清库发生在关卡结束宣布之前;每关恰宣布一次关卡结束;Boss 胜 = 关卡完成、倒下 = 失败。
  • 四件接口全款:与冒险结构登记的开始关卡、战斗结果上报、治疗封顶回报、关卡结束逐件对上,不另起平行通道。
  • 单链特例合法:单链行集(每步恰一条连线)是合法退化形态;三关参数档都含岔口,第一关即有选择。
  • 呈现只读:节点图结构、当前位置、可选下一节点对呈现层只读可见(读数契约归 HUD 框架)。

待办

本系统待办条目已统一收编至 待办清单,本节不再逐条登记。