From 4d03c3457c0369074d6a8d63f419ad239efe644f Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Wed, 21 Oct 2026 04:42:51 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E5=85=B3=E5=8D=A1=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=9B=BE=E9=87=8D=E6=9E=84):=20=E5=85=B3=E5=8D=A1=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E5=9B=BE=E7=94=9F=E6=88=90=20v1.0=20=E8=90=BD?= =?UTF-8?q?=E5=AE=9A=EF=BC=8B=E5=85=B3=E5=8D=A1=E8=8A=82=E7=82=B9=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=20v2.0=20=E5=A4=9A=E7=BB=88=E7=82=B9=E6=8D=A2?= =?UTF-8?q?=E4=BB=A3=E2=80=94=E2=80=94=E4=BA=A7=E5=87=BA=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E5=94=AF=E4=B8=80=E9=99=88=E8=BF=B0=E5=A4=84/=E4=BA=94?= =?UTF-8?q?=E6=97=8B=E9=92=AE=E5=8F=82=E6=95=B0=E6=A1=A3/=E6=B7=B1?= =?UTF-8?q?=E5=BA=A6=E5=B8=A6=E9=85=8D=E6=B1=A0/=E6=AF=8F=E7=BB=88?= =?UTF-8?q?=E7=82=B9=E5=89=8D=E4=B8=80=E5=BA=97=EF=BC=8C=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=9F=9F=E9=97=B8=E5=85=A8=E7=BB=BF=EF=BC=88=E5=9B=9E=E6=89=A7?= =?UTF-8?q?=20domain=3Ddocs=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design/gdd/02-系统清单.md | 1 + design/gdd/08-Alpha版本标准.md | 4 +- design/gdd/systems/冒险循环/关卡节点图生成.md | 119 ++++++++++++++++++ design/gdd/systems/冒险循环/关卡节点地图.md | 33 ++--- design/gdd/systems/冒险循环/冒险结构.md | 4 +- design/gdd/systems/战斗循环/敌人系统.md | 6 +- design/gdd/ux/level-map.md | 2 +- 待办清单.md | 12 +- 8 files changed, 152 insertions(+), 29 deletions(-) create mode 100644 design/gdd/systems/冒险循环/关卡节点图生成.md diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index 7c669554..598fa9ab 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -43,6 +43,7 @@ | 文件 | 一句话概要 | 状态 | |---|---|---| | `关卡节点地图.md` | 单关内的节点图选路与推进 | 已定稿 | +| `关卡节点图生成.md` | 一关的节点图从哪来——生成器按参数产出合法图 | 已定稿 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | | `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(专长=触发器句式的机制件 / 属性值提升 / 补给=给系统资源加一笔的转换源凭证 × 三条渠道:奖励节点 / 商店 / 关底 Boss 击败) | 已实现·迭代 20 专长实装批落地(29 行=基础 27+迁入 2,流派机制退役;池结构案D 四级 104,通关兑付=专长三选一按档配比加权) | diff --git a/design/gdd/08-Alpha版本标准.md b/design/gdd/08-Alpha版本标准.md index 8e723532..3d1bc3ef 100644 --- a/design/gdd/08-Alpha版本标准.md +++ b/design/gdd/08-Alpha版本标准.md @@ -45,8 +45,8 @@ |---|---|---| | 冒险结构 | [冒险结构](systems/冒险循环/冒险结构.md) | 在役 | | 关卡节点地图 | [关卡节点地图](systems/冒险循环/关卡节点地图.md) | 在役(待重构,见下一条) | -| 关卡节点图重构(增加可选节点) | [关卡节点地图](systems/冒险循环/关卡节点地图.md) | 待做(须先做文档设计,不可直接开发) | -| 关卡节点图生成 | 旧版文档已删,随关卡节点图重构批重写 | 在役(待重构,与上一条同批) | +| 关卡节点图重构(增加可选节点) | [关卡节点地图](systems/冒险循环/关卡节点地图.md)+[关卡节点图生成](systems/冒险循环/关卡节点图生成.md) | 待做(文档设计已闭合,待写卡) | +| 关卡节点图生成 | 参数化长图:产出规格与生成参数 | 在役(v1.0 重写完成,与上一条同批实施) | | 难度曲线与 Boss | [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md) | 在役 | | 奇物 | [奇物](systems/冒险循环/奇物.md) | 在役 | diff --git a/design/gdd/systems/冒险循环/关卡节点图生成.md b/design/gdd/systems/冒险循环/关卡节点图生成.md new file mode 100644 index 00000000..b103a984 --- /dev/null +++ b/design/gdd/systems/冒险循环/关卡节点图生成.md @@ -0,0 +1,119 @@ +# 关卡节点图生成 + +> 一句话:一关的节点图从哪来——生成器按参数长出一张合法图 +> 状态:现行为 v1.0 + +## 设计目的 + +固定模板的图太小:第一关一条链零选择,第二三关网状但岔路兑付差不多,「可选节点太少」换画法解决不了。本文把图的来源换成参数化生成——图更大、岔口更多、每条路通向不同的东西,走哪条路决定打谁;规模随关卡推进生长,层高、宽度、节点数逐关递增且增幅变大。改形态=改参数不改代码。 + +## 系统范围 + +负责: + +| 负责 | 说明 | +|---|---| +| 图从哪来 | 按本关参数档长出一张节点图,交付给关卡节点地图 | +| 产出规格 | 什么算一张合法的图——产出约束的唯一陈述处 | +| 生成参数 | 五个旋钮、三套关卡参数档与生长曲线 | +| 节点类型配比 | 节点类型分布怎么掷、商店位这类摆放约束 | + +不负责: + +| 不负责 | 归谁 | +|---|---| +| 图怎么走、每类节点到达时兑付什么 | 关卡节点地图 | +| 节点上具体摆什么料(敌人行集、奖励内容) | 敌人系统、冒险结构等各 owner 文档 | +| 图的画面呈现与多终点标记 | level-map、HUD 框架 | +| 生成算法本身 | 代码——本文只给产出规格与执行边界,图怎么长出来是实现的事 | + +## 在核心循环中的位置 + + 冒险结构 ──开始关卡(关卡序号+参数档)──▶ 关卡节点图生成:长出本关的图 + ──图交付──▶ 关卡节点地图:选路推进 ──关卡结束──▶ 冒险结构 + +生成站在冒险结构与关卡节点地图之间:接「第几关、用哪套参数档」,交「一张合法图」。图一旦交付生成即退场,走图的事全归关卡节点地图。 + +## 核心规则 + +### 图的规格:什么算一张合法的图 + +合法图是一张岔路发散式道路系统:主路+支路,宽度由分叉自然长出,多终点时提前承诺归属。产出约束五条,每张产出图都必须满足: + +| 约束 | 内容 | +|---|---| +| 道路系统 | 图=主路+支路;除岔口节点(两条以上去路的节点)外每个节点恰一条去路;岔口去路 2–3 条 | +| 宽度=分叉生长 | 不摆平行层;同深度节点数由岔口自然长出(1→2→3→4……) | +| 层高=沿路步数 | 入口到终点的最长路径步数;第一关 ≥6,逐关递增且增幅变大 | +| 出口归属锁定 | 多终点时由大岔口把图分成互不连达的分支区域,各区域只通向自己的终点;每个终点前一层节点的去路集合恰含一个终点——选路=提前承诺打谁 | +| 战斗节点保底 | 奖励/恢复/商店占位后战斗节点量不被挤没(保底数进调参表) | + +结构铁律:连线只朝前进方向(无环);入口、终点都可多个(个数=参数档),每条路径恰好从一个入口出发、恰好到达一个终点。 + +执行边界(实现只须遵守这几条,怎么长图是代码的事): + +| 边界 | 内容 | +|---|---| +| 不合格产出禁止进玩法 | 产出不过产出规格即无效,无效图绝不上给玩家 | +| 无兜底图 | 不设固定兜底图——软回退一律禁止 | +| 参数无解即中止 | 参数档本身给不出合法图=配置错误,致命中止 | +| 同种子同图 | 同种子+同参数档产出同一张图;随机只经 RngService 统一流 | + +### 生成参数:五个旋钮与三套关卡参数档 + +| 旋钮 | 管什么 | +|---|---| +| 层深 | 图有多高(沿路步数) | +| 分支密度 | 岔口多少、宽度长多快 | +| 配比 | 节点类型分布(见下节) | +| 入口个数 | 图从几个点进场 | +| 出口个数 | 图通向几个终点(1=单出口;2 及以上=多出口+归属锁定) | + +每关一套参数档(L1/L2/L3),生成器只吃参数档、不认关卡号。生长曲线:层高、宽度、节点总数、路径长度逐关递增且增幅变大;决策点密度逐关递增;第一关即含岔口——第一关也要有选择。单链是分支密度取下限的合法退化形态,不作为三关参数档的取值。 + +### 节点类型配比:类型分布怎么掷、内容归谁 + +配比是生成旋钮:战斗/奖励/恢复/商店各占多少由参数档定,生成器掷出分布落在图上成为节点类型;配比只管非终点节点,终点恒为 Boss、不进配比。类型构成在图上公开呈现——看得见类型才谈得上提前规划,这是选路成为决策的前提。 + +摆放约束:每个终点前一位恰一家商店——每名玩家一局必经恰一家店。 + +内容归各 owner:战斗节点打谁=敌人系统按深度带配池;奖励/恢复/商店的兑付语义=关卡节点地图与各 owner 文档。精英、事件这类新类型进不进图、怎么进,归内容层专题;要进就走本文档修订,类型扩展与配比调整一起落。 + +## 依赖与输出 + +| 方向 | 系统 / 文档 | 接口要点 | +|---|---|---| +| 上游 | 冒险结构 | 开始关卡给出关卡序号与本关参数档 | +| 下游 | 关卡节点地图 | 图的消费方:选路、兑付、加载校验(结构规则以本文产出规格为准) | +| 协作 | 敌人系统 | 战斗节点遭遇按深度带配池,遭遇坐标=关卡序号+深度带;多终点各配 Boss 行 | +| 协作 | 难度曲线与Boss | 图规模(节点数/战斗量)进它的投放节奏账;深度带配池的难度坡归它,本文零数值 | +| 上游 | 数据配置 | 参数档数据的承载与统一读取,数值事实源=data/tables | +| 协作 | level-map | 呈现只读:图形态随参数变化,画布自适应;多终点各带 Boss 标记 | + +## 调参表 + +数值事实源=game/data/tables(定值批落表);本表只留取值域与设计意图。 + +| 参数 | 取值域 | 设计意图 | 状态 | +|---|---|---|---| +| 层深 L1 | ≥6(步) | 第一关不再是零选择短链——够长才有岔口与取舍 | 已锁下限 | +| 层深 L2/L3 | >前一关且增幅变大 | 后期关显著更长,推进感随冒险加深 | provisional | +| 岔口去路数 | 2–3 | 每次取舍在 2–3 条里选:少了没选择,多了不过脑 | 已锁 | +| 分支密度 | 待定值 | 一局遇到多少次取舍(目标量级=一局十几次,待设计验证) | provisional | +| 入口个数 | 1 起 | 多入口给「从哪进场」的第一层选择 | provisional | +| 出口个数 | 1–3 | 多终点让「走哪条=打谁」成立 | 已锁范围 | +| 配比 | 四类占比合计 1,战斗保底优先 | 攻击性/兑付/恢复的节奏配比 | provisional | +| 战斗节点保底数 | ≥ 调参值 | 成长位不挤没战斗——战斗是本作核心量 | provisional | +| 商店数 | =出口数 | 每局决战前恰一次补给,成长保底是结构事实 | 已锁 | + +## 验收标准 + +| 判据 | 内容 | +|---|---| +| 产出合格 | 任意参数档产出的图必过产出约束五条+结构铁律;任意入口出发的任意路径都恰好到达一个终点 | +| 生长递增 | L1/L2/L3 读数:最长路径步数与节点总数均逐关递增;节点总数增幅 Δ(L2→L3)>Δ(L1→L2) | +| 归属锁定 | 多出口图每个终点前一层节点的去路集合恰含一个终点;各分支区域互不连达 | +| 必经恰一店 | 任意入口→终点路径经过且恰经过一家店 | +| 可复现 | 同种子+同参数档=同一张图 | +| 无软回退 | 不存在兜底图路径;参数无解即致命中止 | +| 战斗保底 | 任意合法产出的战斗节点数 ≥ 保底数 | diff --git a/design/gdd/systems/冒险循环/关卡节点地图.md b/design/gdd/systems/冒险循环/关卡节点地图.md index 17c0136a..f0b41963 100644 --- a/design/gdd/systems/冒险循环/关卡节点地图.md +++ b/design/gdd/systems/冒险循环/关卡节点地图.md @@ -1,33 +1,34 @@ # 关卡节点地图 > 一句话:单关内的节点图选路与推进 -> 状态:已定稿 +> 状态:现行为 v2.0 ## 设计目的 -一关不是一场战斗,而是由关卡表配置的一组**节点**(本文含义:关卡内移动的步进单位,画在图上就是一个格)连成的一张**节点图**。玩家从一个入口出发,在每个路口看着几条路选一条走——这条路上有要打的仗、有开奖励的房间、有能歇脚的篝火——最后所有路线汇到关底 Boss。关卡节点地图管的就是这张图上的"走":怎么选路、走到每种节点上发生什么、Boss 分出胜负后怎么把这一关的结局交回去。 +一关不是一场战斗,而是由关卡表配置的一组**节点**(本文含义:关卡内移动的步进单位,画在图上就是一个格)连成的一张**节点图**。玩家从一个入口出发,在每个路口看着几条路选一条走——这条路上有要打的仗、有开奖励的房间、有能歇脚的篝火——最后走到关底 Boss(终点可以有多个,走哪条路决定打谁)。关卡节点地图管的就是这张图上的"走":怎么选路、走到每种节点上发生什么、Boss 分出胜负后怎么把这一关的结局交回去。 用循环的层次说:冒险是外层骨架,关卡是**中循环**,战斗是**小循环**。本文管中循环——图怎么编排、怎么走、每类节点到达时触发什么;一场战斗内部发生什么全部归小循环(战斗结算与敌人系统),本文把控制流移交给它之后就不再看里面。它是[冒险结构](冒险结构.md)(序列、大奖励、重开)与战斗循环(结算与敌人)之间的行进层。 ## 系统范围 -边界这样划:图上**有哪些节点**(具体摆什么、摆几个)是关卡表的内容,归冒险结构;本文管图**怎么走、走到每步发生什么**,以及一张关卡表行集要满足什么结构规则才算合法的图。战斗内部的一切(敌人怎么配、几只、什么技能池、踩雷负向怎么兑)归战斗循环文档(原"伏击怎么叠"随 2026-09-20 八型批伏击退役改述);本文只负责把"第几关、哪个节点"递过去。 +边界这样划:图**从哪来**(按参数长图)与**什么算合法图**(产出规格)归[关卡节点图生成](关卡节点图生成.md);图上**具体摆什么料**(敌人行集、奖励内容)归各 owner 系统;本文管图**怎么走、走到每步发生什么**,以及加载期的合法性校验动作(规则语义以关卡节点图生成的产出规格为准)。战斗内部的一切(敌人怎么配、几只、什么技能池、踩雷负向怎么兑)归战斗循环文档(原"伏击怎么叠"随 2026-09-20 八型批伏击退役改述);本文只负责把"第几关、哪个节点"递过去。 负责: | 负责 | 说明 | |---|---| -| 节点图结构规则 | 什么算一张合法的关卡节点图(唯一编号、唯一入口、唯一终点、不可回头)——结构校验的规则面 | +| 图合法性校验 | 加载期校验动作;合法图的规则语义以[关卡节点图生成](关卡节点图生成.md)的产出规格为准 | | 选路与行进 | 玩家亲手选路前进;兑付后确认、零自动推进(交互形态定稿) | | 节点兑付触发 | 行进到各类型节点时触发对应兑付:战斗移交、奖励入库、恢复请求、商店覆盖层开闭 | -| 战斗发起组装 | 组装定位信息(关卡序号 + 节点编号),移交战斗结算开战 | +| 战斗发起组装 | 组装定位信息(关卡序号 + 节点深度),移交战斗结算开战 | | 关卡收束点 | Boss 战胜利或英雄死亡时定局:先调战斗结算的关卡收束清空库存,再向冒险结构宣布关卡结束 | 不负责: | 不负责 | 归谁 | |---|---| -| 关卡序列与图上摆哪些节点(行集内容、关数) | [冒险结构](冒险结构.md) | +| 关卡序列与关数 | [冒险结构](冒险结构.md) | +| 图从哪来、节点类型构成与合法图规则 | [关卡节点图生成](关卡节点图生成.md) | | 关卡大奖励、跨战斗生命、失败重开 | [冒险结构](冒险结构.md) | | 战斗内部的一切:敌人配置、数量、技能池、踩雷负向 | [敌人系统](../战斗循环/敌人系统.md)与[战斗结算](../战斗循环/战斗结算.md) | | 同场多敌种(同一节点配多种敌人)的表结构与取值口径 | 敌人系统(战斗侧改键批) | @@ -47,7 +48,7 @@ ### 关卡的形状:分支节点图与五类节点 -一关内部是一张**有方向的节点图**:节点之间用连线(本文含义:节点之间允许前进的通道)连接,玩家沿连线从一个节点走到下一个节点。图有三条结构铁律:连线只朝前进方向(没有回头路,整张图无环);图有一个唯一的入口节点;**关底 Boss 恒为全图唯一的终点**——所有路线最终都汇到它,打赢它这一关就通了。违反任何一条的行集是配置违约,加载期拦截。 +一关内部是一张**有方向的节点图**:节点之间用连线(本文含义:节点之间允许前进的通道)连接,玩家沿连线从一个节点走到下一个节点。结构铁律的规则语义以[关卡节点图生成](关卡节点图生成.md)的产出规格为准,走图视角三句:连线只朝前进方向(没有回头路,整张图无环);每条路径恰好从一个入口出发、恰好到达一个终点;终点恒为 Boss(终点可以有多个,走哪条路决定打谁)。违反任何一条的行集是配置违约,加载期拦截。 图上只有五种节点,封闭枚举,扩类一律走文档修订: @@ -59,9 +60,9 @@ | 恢复 | 行进至此向冒险结构发治疗封顶回报;反馈呈现后回到选路 | | 商店 | 行进至此打开商店覆盖层,用 GP(战斗掉落的冒险内货币)购买属性提升;离开后兑付确认回选路;不携带战斗行。**v1.5 兑付换代(pool 模式现行)**:进店从共享池抽 3 展示、买 1 后三件全重抽(未买不保留)、货架买空=空架合法态。**v1.6(2026-10-04 P-C2+Q2 裁/MC-1)**:新增**独立刷新**——基础免费 0 次(天赋/营地侧刷新次数增益位预留)+ GP 付费刷新 ceil(20×1.8^已付费刷) provisional;重抽=共享池同源(shop_draw 同签),推翻本行旧「无独立刷新动作——重抽绑购买」口径;库存与定价归[冒险结构](冒险结构.md)共享池节 | -商店房的编排规则(2026-09-20 用户拍板):每关**恰 1 个**商店房,位置 = **关底 Boss 前一位**——哈迪斯式的"决战前最后一个补给点":买到的属性还有整段战斗可消费,错过的成长也没有第二家店可补。Boss 前一位同时是**必经位**:图拓扑收束使所有入口→Boss 的路径都穿过它,成长保底成为图结构事实而非玩家自觉。这条位置约束不由加载校验承载——图合法性六检零新增,商店房的"每关恰 1 + 必经"由冒烟断言把关。 +商店房的编排规则:**每个终点前一位恰一家店**——哈迪斯式的"决战前最后一个补给点":买到的属性还有整段战斗可消费,错过的成长也没有第二家店可补。终点前一位同时是**必经位**:每名玩家一局恰好必经一家店,成长保底是图结构事实而非玩家自觉。这条位置约束不由加载校验承载,由冒烟断言把关(摆放规则语义见[关卡节点图生成](关卡节点图生成.md)配比节)。 -每个节点在关卡内领一个**节点编号**(本文含义:关卡内不重复的序号,用来当战斗的定位地址;数据键沿用切片字段 `node_depth`)。Boss 的编号恒为全图最大——"最深处的房间是关底"这条直感由此保留。单链特例:一张每步只有一条连线的图就是一条链,此时节点编号等于它前面走过的战斗场数。第一关行集就是单链特例,切片代码零改动运行;分支图行集已落地(v1.0.1 起;图的来源与模板池随关卡节点图重构批重写,旧生成文档已删)。 +每个节点在图上有**节点深度**(本文含义:从入口沿路走过来的步数),用来当战斗的定位地址——遭遇坐标=关卡序号+节点深度,敌人表按**深度带**(深度区间)配池,寻址语义见[敌人系统](../战斗循环/敌人系统.md)。"最深处是关底"的直感由深度承载:终点恒在各路径最深处。单链(每步只有一条连线)是合法退化形态,节点深度等于它前面走过的战斗场数;三关参数档都含岔口,第一关不再是单链。图的来源见[关卡节点图生成](关卡节点图生成.md)。 呈现侧口径(2026-09-17 用户拍板):节点图的画面表达走**方块地牢观感**——节点画成地牢房间的方块、连线画成通道——但逻辑拓扑就是本文的节点图,不产生任何额外选路或探索语义。关卡画面本体即节点链进度的呈现载体(选路覆盖层的常驻形态,节点态直接读图:已过暗金 / 当前金 / 候选下一跳通道亮金 / Boss 封印黑描边(旗朱→封印紫→封印黑 #000000,2026-09-28 用户拍板现行)),不另设进度条组件;视觉规格归 [HUD 框架](../表现与支撑/HUD框架.md)。 @@ -95,7 +96,7 @@ Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选 | 类型 | 兑付动作 | |---|---| -| 战斗 / Boss | 组装定位信息(关卡序号 + 节点编号),移交[战斗结算](../战斗循环/战斗结算.md)开战;战斗结果(胜负与战后生命)经战斗结果上报回流冒险结构(契约语义归[冒险结构](冒险结构.md),本文不复述) | +| 战斗 / Boss | 组装定位信息(关卡序号 + 节点深度),移交[战斗结算](../战斗循环/战斗结算.md)开战;战斗结果(胜负与战后生命)经战斗结果上报回流冒险结构(契约语义归[冒险结构](冒险结构.md),本文不复述) | | 恢复 | 向冒险结构发治疗封顶回报(载荷 = 该关恢复比例,读本关配置行);按比例回血并封顶的执行归冒险结构 | | 奖励 | 触发节点奖励兑付:提升三选一(与通关三选一共享同一令牌库——七种令牌洗牌不放回抽 3 点选一件,池耗即上限;见下节) | | 商店 | 打开商店覆盖层(pool 模式:进店抽 3〔shop_draw 封闭流恰一 scope〕+买 1 全重抽;legacy 对照模式:商品陈列读商店表);购买即时生效、经共享池写统一冒险加算区(与关卡大奖励同一笔——库存语义归[冒险结构](冒险结构.md),本文不复述);离开覆盖层即兑付确认。商店房不携带战斗行:零敌人、零棋盘、零战斗初始化 | @@ -103,7 +104,7 @@ Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选 **遭遇构成的编排面**——本文对"放什么敌人"的全部职责只有三条: 1. 行进到战斗或 Boss 节点,兑付动作就是开战:本文递出定位信息,移交战斗结算。 -2. 定位信息只有两样:**关卡序号 + 节点编号**。战斗侧拿编号查表、配敌、掷数量、跑技能池、兑踩雷负向——一切战斗内部初始化归战斗循环文档(原"叠伏击"随 2026-09-20 八型批伏击退役改述),图的初始化不为战斗初始化做任何决定。 +2. 定位信息只有两样:**关卡序号 + 节点深度**。战斗侧按深度带配池查表、配敌、掷数量、跑技能池、兑踩雷负向——一切战斗内部初始化归战斗循环文档,图的初始化不为战斗初始化做任何决定。 3. 本文不预掷任何战斗数值、不读敌人数量;教学位节点同样掷骰、没有结构豁免("任何掷骰结果下都稳过"的保证是[难度曲线与Boss](难度曲线与Boss.md)的数值责任)。 第二关的"新内容 = 既有池新技能"(技能池构成已定稿入[敌人系统](../战斗循环/敌人系统.md)技能池节)投放时,改的是战斗侧行里引用的技能池内容——节点图结构原样不动,本文无需为投放留任何新结构位。 @@ -143,7 +144,7 @@ Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选 3. 战斗 / Boss 节点:组装关卡序号 + 节点编号,移交战斗结算开战;战斗结束向冒险结构上报战斗结果。 4. 奖励节点:触发节点奖励兑付 = 提升三选一(与通关三选一共享令牌库);恢复节点:向冒险结构发治疗封顶回报;商店节点:打开商店覆盖层,购买即时生效,离开后兑付确认。 5. Boss 战胜利或任意战斗倒下 = 关卡收束点:先调战斗结算的关卡收束清库,再宣布关卡结束。 -6. 第一关行集 = 单链特例(图的最简形态),切片按单链运行零改动;分支图行集与图版实现已落地(v1.0.1 起)。 +6. 单链是合法退化形态;三关参数档都含岔口,第一关即有选择(图的来源见[关卡节点图生成](关卡节点图生成.md))。 ## P1 / P2 后置 @@ -156,20 +157,20 @@ Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选 ## 调参表 -暂无本系统自有的参数——选路与行进无数值可调。图结构合法性(唯一编号、唯一入口、唯一终点、无环)是规则不是参数,由加载校验强制;链上节点构成归冒险结构的关卡表,战斗数值归难度曲线与Boss。 +暂无本系统自有的参数——选路与行进无数值可调。图结构合法性是规则不是参数(规则语义见[关卡节点图生成](关卡节点图生成.md)的产出规格),由加载校验强制;图的来源与节点构成归[关卡节点图生成](关卡节点图生成.md),战斗数值归难度曲线与Boss。 ## 验收标准 -- 图合法:行集通过加载校验——节点编号关卡内唯一、入口唯一、Boss 为唯一终点、连线无环、所有节点沿连线可达 Boss;违规配置加载期致命。 +- 图合法:行集通过加载校验——每条路径恰好从一个入口出发、恰好到达一个终点,终点恒为 Boss(可多个)、连线无环、任意入口出发的任意路径都到达某一个终点;违规配置加载期致命(规则语义见[关卡节点图生成](关卡节点图生成.md)产出规格)。 - 行进自主:从入口到 Boss 的每一次前进都由玩家选路发起(含关卡开始后的第一跳——关卡开始停在图上,入口节点不自动进入);不存在任何自动推进路径;倒下时行进终止。 - 兑付移交:每场开战调用携带(关卡序号 + 节点编号),与节点图上该节点位置一致;每场战斗结束恰一次战斗结果上报。 - 兑付后确认:战斗节点的继续确认挂战斗总结结算(settlement-summary.md),奖励/恢复挂兑付反馈覆盖层;到达与兑付之间无确认步。 - 恢复兑付:治疗封顶回报载荷 = 该关恢复比例(读关卡配置行);满血回复 0 是合法状态(执行语义归冒险结构)。 - 奖励兑付:奖励节点兑付恰触发一次;池空直通空态合法,现行 = 提升三选一(与通关三选一共享令牌库)取一件按件类兑付(spec:node-reward.md v2.x;兑付路由归[冒险结构](冒险结构.md)提升池节)。 -- 商店房编排:每关恰 1 个商店房、Boss 前一位必经位(所有入口→Boss 路径都穿过它)——由冒烟断言把关,图合法性校验零新增检查;商店房不携带战斗行;行进至此打开商店覆盖层、离开后兑付确认回选路。 +- 商店房编排:每个终点前一位恰一家店、每名玩家一局必经恰一家(所有入口→终点路径都穿过且恰穿过一家店)——由冒烟断言把关,图合法性校验零新增检查;商店房不携带战斗行;行进至此打开商店覆盖层、离开后兑付确认回选路。 - 收束有序且唯一:关卡清库发生在关卡结束宣布之前;每关恰宣布一次关卡结束;Boss 胜 = 通关、倒下 = 失败。 - 四件接口全款:与冒险结构登记的开始关卡、战斗结果上报、治疗封顶回报、关卡结束逐件对上,不另起平行通道。 -- 单链特例合法:单链行集(每步恰一条连线)是合法图形态;第一关按单链运行,切片零改动。 +- 单链特例合法:单链行集(每步恰一条连线)是合法退化形态;三关参数档都含岔口,第一关即有选择。 - 呈现只读:节点图结构、当前位置、可选下一节点对呈现层只读可见(读数契约归 HUD 框架)。 ## 待办 diff --git a/design/gdd/systems/冒险循环/冒险结构.md b/design/gdd/systems/冒险循环/冒险结构.md index c024aad8..890add6b 100644 --- a/design/gdd/systems/冒险循环/冒险结构.md +++ b/design/gdd/systems/冒险循环/冒险结构.md @@ -261,7 +261,7 @@ GP(显示名「GP」)是冒险内的一次性属性提升货币:战斗胜 | 参数 | 域 | 现行值 | 说明 | |---|---|---|---| -| 关卡行集(关数与节点链模板) | 关卡表逐关行 | 三关现行(逐关 templates 池 3 关 × 5,模板 0 = 回滚档;生成机制随关卡节点图重构批重写,旧生成文档已删) | 加关 = 内容批(链行 + 敌我数值 + 新元素同批);L1 回滚档模板 = 两战 → 奖励 → 两战 → 恢复 → 关底 Boss(7 节点,战斗深度 5) | +| 关卡行集(关数与图的参数档) | 关卡表逐关行 | 三关现行(图由生成器按参数档产出,见[关卡节点图生成](关卡节点图生成.md);旧模板池随实现批清数据) | 加关 = 内容批(参数档 + 敌我数值 + 新元素同批);确定性 = 固定种子+固定参数档(首局教学与存档复现的固定图由此承载,无兜底模板) | | 恢复比例 | int [0,100],逐关行 | 见 level.tres rest_heal_pct(provisional) | 恢复点回复生效上限的百分比;随上限加成同步放大;100 = 恢复点变全满泉,0 = 死节点 | | 上限提升 | int [0,999],冒险表逐件列 | adventure_table bonus_attack_flat / bonus_max_hp_flat / bonus_armor_flat(provisional) | 三选一属性件各自兑付值;值锚与上调约束归难度曲线与Boss | | 三选一件值(其余) | int [0,999],冒险表 kind×tier 列族 | adventure_table curio_value_*(GP 袋 / AP 件 / 恢复 / 刷新,provisional) | 令牌件值读表;道具件授予件数随秘宝件出池退役 | @@ -272,7 +272,7 @@ GP(显示名「GP」)是冒险内的一次性属性提升货币:战斗胜 | Boss 钥石掉落 | int [0,999],meta 表逐关行 | meta.tres boss_keystone 首杀 3 / 复杀 2(provisional) | 逐杀实时入账;精英怪掉 1 预留;消费方归元进度 | | GP 经济参数 | 商店表逐行 | 见 shop.tres gp_drops / level_gp_bonus / pool_shelf / price_a / price_b(provisional,以 shop.tres 为准;legacy products / price_level_bonus 随对照模式保留) | 掉落均值与区间(普通/精英/Boss)、关级掉落加值、货架基价、A/b 价格因子;公式语义归本文,数值所有权归难度曲线与Boss曲线调参批 | -结构冻结(非调参项):序列线性无跳关、关底 Boss 恒为末节点、倒下即冒险终、大奖励构成 = 通关部分回血 + 专长三选一(按档配比加权抽取——2026-10-11 迭代 20 换代;钥石退役出大奖励,改 Boss/精英击杀掉落——2026-09-30 拍板重构)、一冒险一主种子、收束点先清库后宣布的次序。 +结构冻结(非调参项):序列线性无跳关、终点恒为 Boss(终点可多个、各在路径最深处)、倒下即冒险终、大奖励构成 = 通关部分回血 + 专长三选一(按档配比加权抽取)、一冒险一主种子、收束点先清库后宣布的次序。 参数联动:恢复比例与通关回血比例越厚通关越有余量(对冲杠杆语义归难度曲线与Boss);三选一属性件/AP 件抬高后续战斗强度,件值/权重/上限改值须按难度曲线与Boss的口径重扫通关率带(回血比例自「血回满」改 20% 系难度上压方向,带判定顺带呈报)。 diff --git a/design/gdd/systems/战斗循环/敌人系统.md b/design/gdd/systems/战斗循环/敌人系统.md index 61ee71bf..28bd6f0c 100644 --- a/design/gdd/systems/战斗循环/敌人系统.md +++ b/design/gdd/systems/战斗循环/敌人系统.md @@ -64,14 +64,14 @@ ### 开战生成:主角数据行与一场 1–4 个敌人(行集可混编多种敌种) -战斗开始时,编排方给出遭遇坐标(关卡序号 + 节点深度),本系统据此在敌人表里取出该坐标的整个行集(一行或多行),把本战实际数量的敌人逐行生成出来——每行各按自己的数量行值实例化(单行 1 到 3 个),行集实例总数(各行开战骰后数量求和)不超过 4。同坐标多行即混编遭遇:各敌种同场上阵,生成序 = 表文件行序(行序即契约——目标顺位、摇号子流派生、开战叙述取首行都按它,加载期校验兜底:同坐标多行必须文件内相邻)。单行行集 = 既有形态:一场 1 到 3 个同种同属性敌人,来自同一行表值。战斗中敌人只减不增,不做召唤、增援、分裂。主角同时以当前血量入参生成,血量越界(高于上限或不超过 0)整单拒绝、不留半实例。 +战斗开始时,编排方给出遭遇坐标(关卡序号 + 深度带——节点深度所在的区间),本系统据此在敌人表里取出该坐标的整个行集(一行或多行),把本战实际数量的敌人逐行生成出来——每行各按自己的数量行值实例化(单行 1 到 3 个),行集实例总数(各行开战骰后数量求和)不超过 4。同坐标多行即混编遭遇:各敌种同场上阵,生成序 = 表文件行序(行序即契约——目标顺位、摇号子流派生、开战叙述取首行都按它,加载期校验兜底:同坐标多行必须文件内相邻)。单行行集 = 既有形态:一场 1 到 3 个同种同属性敌人,来自同一行表值。战斗中敌人只减不增,不做召唤、增援、分裂。主角同时以当前血量入参生成,血量越界(高于上限或不超过 0)整单拒绝、不留半实例。 生成拿到的是当时的表值快照:开战那一刻把每行的数值和池模板各抄一份,之后改表不影响已生成的单位。池模板快照成每实例自己的实例池(各技能冷却清零),此后各自独立摇号、互不干涉。某行的数量或攻击基线若配成了区间,由战斗结算用封闭随机流在开战时**按行各掷定一次**(每行掷自己的区间;掷定次数随行数——单行行集的掷定次数与既有口径逐位一致,混编不新增随机源形态)后传入确定值——本系统自身始终零随机;掷定后整场持久,攻击基线不逐拍重掷(数字要可读)。 | 规则 | 含义 | |---|---| | 敌方效果对全体生效 | 范围效果作用于所有存活敌人——混编放开后(2026-10-07 行集多行批)场上可多种敌种共存,结算语义按存活单位逐一生效、不依赖"场上全同种"前提;"只打某一个"的单体寻址暂不开放(见 P1) | -| 行集构成纪律 | 敌人表按(关卡序号 × 节点深度)存放,同一坐标行集允许多行、允许不同敌种混编。纪律三条,违规加载期返回错误并止动:①行集内 enemy_id 唯一(同一敌种在同行集仍只许一行);②同坐标多行必须表文件内相邻,行序 = 声明序 = 生成序(行序即契约);③行集实例总数(各行骰后数量求和)≤ 4,单行数量域 [1,3] 不变(UNIT_COUNT_MAX 语义 = 单种数)。行数不设上限;同关随深度换敌种合法 | +| 行集构成纪律 | 敌人表按(关卡序号 × 深度带)存放;深度带=节点深度的区间——逐局生成使单点深度不再固定,配池按带不按点,难度坡随带递增。同一坐标行集允许多行、允许不同敌种混编;Boss 行按终点配置,多终点各配一行(走哪条路决定打谁)。纪律三条,违规加载期返回错误并止动:①行集内 enemy_id 唯一(同一敌种在同行集仍只许一行);②同坐标多行必须表文件内相邻,行序 = 声明序 = 生成序(行序即契约);③行集实例总数(各行骰后数量求和)≤ 4,单行数量域 [1,3] 不变(UNIT_COUNT_MAX 语义 = 单种数)。行数不设上限;同关随深度换敌种合法 | | 主角数据行 | 主角战斗数值单独放一张全局单行表:生命上限、基础攻击力、护甲等级三字段(见调参表) | | 基础攻击恒存在 | 基础攻击不许配 0(配置为 0 加载期拒绝)——零基线乘任何百分比增益恒为零,"胜利路径恒有"的保障从数据层杜绝死锁 | | 先手攻击不是敌方技能拍 | 每次结算战斗段主角先手攻击顺位最前的存活敌人,这是固定动作;奖励侧的道具与增益是基础攻击之外的规划面伤害,归[地图战斗资源](地图战斗资源.md) | @@ -226,7 +226,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错 配置表共三张。数值纪律(2026-09-17 降级批定稿):**本文只锁字段、取值域与规则,行值一律读配置表(切片 `game/data/tables/` 的 enemy / skills / hero 表),不在本文登记具体数值——防双写失同步**;曲线调参所有权归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)。 -敌人表(按关卡坐标存放,每坐标行集一行或多行——多行即混编遭遇,构成纪律见核心规则「行集构成纪律」;单行行集 = 既有形态): +敌人表(按深度带坐标存放,每坐标行集一行或多行——多行即混编遭遇,构成纪律见核心规则「行集构成纪律」;单行行集 = 既有形态): | 参数 | 取值域 | 说明 | |---|---|---| diff --git a/design/gdd/ux/level-map.md b/design/gdd/ux/level-map.md index 902bc4c3..b83e6ed0 100644 --- a/design/gdd/ux/level-map.md +++ b/design/gdd/ux/level-map.md @@ -7,7 +7,7 @@ > **Template**: UX Spec > **覆盖范围**: 独立屏形态(关卡停点全景)· 入口停点 · 岔路停点 · 单链停点 · 放弃冒险入口 > **不覆盖**: 节点覆盖层(NodeOverlay——奖励/恢复兑付反馈,spec:[node-reward.md](node-reward.md))、商店覆盖层(spec:[shop.md](shop.md))、关卡结算屏([level-clear.md](level-clear.md))、战斗屏([battle.md](battle.md)) -> **机制权威**: [关卡节点地图](../systems/冒险循环/关卡节点地图.md)(选路、兑付、停点语义;节点图的来源随关卡节点图重构批重写,旧生成文档已删——只换图的来源,不换本屏的呈现语义);**系统契约**: [HUD框架](../systems/表现与支撑/HUD框架.md)(订阅纪律、模态层级、可访问性基线) +> **机制权威**: [关卡节点地图](../systems/冒险循环/关卡节点地图.md)(选路、兑付、停点语义);图的来源 = [关卡节点图生成](../systems/冒险循环/关卡节点图生成.md)(参数化长图——只换图的来源与形态,不换本屏的呈现语义;多终点时各终点均带 Boss 标记,标记语义不变、数量随图;图形态随参数变化,布局自适应,形态不进呈现代码);**系统契约**: [HUD框架](../systems/表现与支撑/HUD框架.md)(订阅纪律、模态层级、可访问性基线) --- diff --git a/待办清单.md b/待办清单.md index bfa576ef..47bb7dcb 100644 --- a/待办清单.md +++ b/待办清单.md @@ -101,19 +101,21 @@ **现状**:来源=playnote 用户试玩记录「关卡节点图展示得有问题,希望可以优化一下。可以参考哥布林弹珠的那种方式去移动」。2026-10-13 用户明确定性:**这是当前关卡节点图的重构,不是呈现优化**——理由是**现在的可选节点太少**(用户原话),所以不是换一种画法或移动方式就能解决的事。 +关联文档清单: +- 设计定稿 design/gdd/systems/冒险循环/关卡节点图生成.md v1.0(2026-10-21) +- 设计定稿 design/gdd/systems/冒险循环/关卡节点地图.md v2.0(2026-10-21) + **现行实态**(`level.tres` 实查,三关各 5 张模板):**第一关五张模板全是单链排列变体**——7 个节点=战斗 ×4 + 奖励 + 休整 + Boss,战斗深度序单调保难度坡,**变化面只有奖励与休整两位的先后次序**,全链零分叉,玩家在选路上**没有任何选择**;第二/三关是网状图(10 节点,带 `next` 分支,最大层宽 4–5),有分叉,但用户仍判选择量不足。参考方向=Peglin(哥布林弹珠)的节点图移动与选路方式。 **范围(重构面,非呈现面)**:节点数量、分叉度、选路自由度。连带三面——① 关卡节点图生成(旧版文档已删、随重构重写;现行 15 张骨架=3 关 ×5 已判过期,随重构清理);② [level-map](design/gdd/ux/level-map.md)(选路枢纽三停点布局定稿版,图结构改则屏面随之改);③ [敌人系统](design/gdd/systems/战斗循环/敌人系统.md)(遭遇表按 `enemy.tres` 的 (level_index, node_depth) 坐标索引,节点数与编号一改,行集坐标与首遇教学位断言面全部随动)。 -**量化要求补登(2026-10-16 playnote 用户补写)**:「需要统计一下第 123 关 path 的路径长度,路径长度需要递增,并且后续关卡的节点数增幅应该更大」(第 123 关=第 1/2/3 关)——重构设计讨论的验收方向两条:先实测三关路径长度基线,再定递增曲线与后续关增幅尺度。 +**量化要求补登(2026-10-16 playnote 用户补写)**:「需要统计一下第 123 关 path 的路径长度,路径长度需要递增,并且后续关卡的节点数增幅应该更大」(第 123 关=第 1/2/3 关)——已定稿成验收形态:读数=最长路径步数与节点总数(口径见[关卡节点图生成](design/gdd/systems/冒险循环/关卡节点图生成.md)验收标准),两者逐关递增、节点总数增幅 Δ(L2→L3)>Δ(L1→L2);基线采集发起权归用户,读对象=生成图(旧模板已裁不作参考)。 **前置(用户 2026-10-13 裁)**:**须先做文档设计讨论,不可直接开发**——参考调研+重构方案先行、过人闸后才可开卡。版本标准侧已登记为 Alpha 待做项,见 [08-Alpha版本标准](design/gdd/08-Alpha版本标准.md)「一 · 系统 · 冒险循环」。 -**缺口**:还差参考调研+重构方案的设计讨论(含路径长度基线实测与递增曲线两条验收方向),过人闸后才能开卡。 +**归属**:[关卡节点地图](design/gdd/systems/冒险循环/关卡节点地图.md)(图结构与节点语义,主责)+ [关卡节点图生成](design/gdd/systems/冒险循环/关卡节点图生成.md)(产出规格与生成参数)+ [level-map](design/gdd/ux/level-map.md)(选路呈现)+ [敌人系统](design/gdd/systems/战斗循环/敌人系统.md)(遭遇行集坐标连带);版本标准侧已登记为 Alpha 待做项,见 [08-Alpha版本标准](design/gdd/08-Alpha版本标准.md)「一 · 系统 · 冒险循环」 -**归属**:[关卡节点地图](design/gdd/systems/冒险循环/关卡节点地图.md)(图结构与节点语义,主责)+ 关卡节点图生成(旧版文档已删、随重构重写)+ [level-map](design/gdd/ux/level-map.md)(选路呈现)+ [敌人系统](design/gdd/systems/战斗循环/敌人系统.md)(遭遇行集坐标连带);版本标准侧已登记为 Alpha 待做项,见 [08-Alpha版本标准](design/gdd/08-Alpha版本标准.md)「一 · 系统 · 冒险循环」 - -**状态**:待文档设计 +**状态**:文档设计已闭合 #### 天赋树实装批登记欠账余两件——AP 上限 clamp 与三选一刷新软上限(2026-10-12 登记,来源=批次移交,设计面=文档轨)