merge: 关卡节点图生成立项批——设计草案 v0.1 成文(图模板/模板池/抽签+N=1 回滚档+三级台阶+MC 测量对账+五拍板点待定);02 入册+06 立项改状态+registry 反向边;06 采购条目在飞改动 stash 舞步护送

This commit is contained in:
DKChan committed 2026-09-27 15:16:58 +08:00
commit 98a2e78752
4 files changed
+176 -6

No files matched your search

+3
View File
@@ -42,6 +42,7 @@
| 文件 | 一句话概要 | 状态 |
|---|---|---|
| `关卡节点地图.md` | 单关内的节点图选路与推进 | 已定稿 |
| `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施未开工) | 设计草案·已立项待拍板 |
| `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 |
| `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 |
| `元进度.md` | 跨局成长(旧体系未单独成文) | 已定稿·已实现(2026-09-21 实现批,数值 provisional 归设计批标定) |
@@ -82,6 +83,7 @@
| 战斗循环 | 地图战斗资源 | `REWARD_ITEM_ECONOMY` | b4 |
| 战斗循环 | 战斗表现 | `COMBAT_PRESENTATION` | b5 |
| 冒险循环 | 关卡节点地图 | `LEVEL_NODE_MAP` | c1 |
| 冒险循环 | 关卡节点图生成 | `NODE_MAP_GENERATION` | —(新立无旧代号) |
| 冒险循环 | 冒险结构 | `ADVENTURE_STRUCTURE` | c2 |
| 冒险循环 | 难度曲线与Boss | `DIFFICULTY_CURVE` | c3 |
| 冒险循环 | 元进度 | `META_PROGRESS` | c4 |
@@ -111,3 +113,4 @@
| v0.7 | 2026-09-17 | 关卡节点地图定稿批:`关卡节点地图.md` 状态行改**已定稿**(v1.0——分支节点图形态重开〔用户拍板重开 05 清单路径分支后置裁定〕、四类节点封闭枚举、全节点确认选路、遭遇构成编排面三条、节点奖励=功能道具正式渠道;概要行"节点链"改"节点图";配套 05 清单移除路径分支条目、06 清单三悬案收口 + 两条新增、registry level_table 与术语回填) |
| v0.8 | 2026-09-21 | 元进度实现批:`元进度.md` 状态列「范围草案·待设计」→「已定稿·已实现」(2026-09-21 实现批落地,数值 provisional 归设计批标定) |
| v0.9 | 2026-09-27 | UX 文档欠账处置批:`ux/` 目录入索引(battle.md / interaction-patterns.md / 新建 level-clear.md);四项欠账处置——player-journey 不建、accessibility-requirements 不另立(改指 HUD框架 基线 + 设置与本地化)、node-reward 挂魔法道具内容重定批(06 登记)、level-clear 建档 |
| v1.0 | 2026-09-27 | 节点图生成立项批(用户拍板立项——06 条目「关卡内结构随机生成」随批改状态):`systems/冒险循环/` 新建 `关卡节点图生成.md` 设计草案 v0.1(图模板/模板池/抽签三概念、三级台阶路线、MC 测量对账条款、五拍板点);文档树补行 + 命名对照表补 `NODE_MAP_GENERATION` 行 |
+3 -3
View File
@@ -215,11 +215,11 @@
#### 关卡内结构随机生成(哈迪斯 / 哥布林弹珠式布局变化)
**现状**:用户 2026-09-20 方向性提及(哈迪斯 / 哥布林弹珠式的关卡内布局随机变化)。现行切片关卡为固定流程——节点图行集读关卡表,图版结构不随局随机;本事项未立项、未设计。
**现状**:用户 2026-09-20 方向性提及布局随机变化(哈迪斯 / 哥布林弹珠式);现行节点图读关卡表固定行集。**2026-09-27 用户拍板立项**,设计文档已交付:[关卡节点图生成](systems/冒险循环/关卡节点图生成.md)——图模板池逐局抽签(N=1 回滚档)+ 三级台阶 + MC 测量对账;实施未开工。五拍板点待定:① L1 是否抽签 ② `node_map` 增流 ③ 实施时点 ④ 首版池规模 ⑤ 抽签时点,荐值见文档拍板点表。
**归属**:[关卡节点地图](systems/冒险循环/关卡节点地图.md)
**归属**:[关卡节点图生成](systems/冒险循环/关卡节点图生成.md)(设计 owner;行集内容责任方仍为[冒险结构](systems/冒险循环/冒险结构.md),行进与图合法性校验归[关卡节点地图](systems/冒险循环/关卡节点地图.md))
**状态**:方向观察待立项(2026-09-20 登记防散佚;立项前不展开设计)
**状态**:已立项·设计草案待拍板(2026-09-27)
### 难度曲线与Boss
@@ -0,0 +1,167 @@
# 关卡节点图生成
> 一句话:单关节点图怎么从固定配置变成逐局随机——图模板池、抽签与实例化
> 状态:设计草案(2026-09-27 用户拍板立项;五项拍板点待裁决,实施未开工)
> 旧版参考:无(旧体系未单独成文;本事项自 2026-09-20 起登记 [06-待办清单](../../06-待办清单.md)「关卡内结构随机生成」条目)
## 设计目的
现行每关的节点图是关卡表里写死的一行行集——玩家每一局走的是完全相同的图。对照参照游戏:杀戮尖塔每层抽一张新地图,哈迪斯的房间编排逐局变化——布局变化本身就是"再来一局"的驱动力的一部分,而本作这块目前是零。
本文立项把单关节点图从固定配置升级为逐局随机。边界先说死:本文只管**图从哪里来**;图怎么走、走到每个节点发生什么、图合法性怎么校验,全部仍是[关卡节点地图](关卡节点地图.md)的现行规则,本设计对它们零改动——生成侧的职责止于"生产一张合法的图",生产出来的图进的是既有校验、既有行进、既有兑付。
## 系统范围
边界这样划:图模板与模板池是内容资产(与敌人表行、棋盘参数同级的配置内容),抽签是玩法随机(消费主种子派生流),实例化的产物就是关卡表行集——行集内容的责任方仍是[冒险结构](冒险结构.md),本文管的是行集**怎么被生产出来**。
负责:
| 负责 | 说明 |
|---|---|
| 图模板的结构定义 | 一张模板有哪些组成部分、满足什么条件才算一张合法模板 |
| 模板池与关卡表接线 | 每关从哪个池抽、池怎么随关卡表配置 |
| 抽签时机与随机流 | 什么时候抽、消费哪条封闭流、可复现域怎么覆盖 |
| 实例化与校验交接 | 模板落成行集,交给既有的图合法性校验 |
| 台阶路线与测量对账 | 三级台阶的推进条件;模拟读数不被随机污染的口径 |
不负责:
| 不负责 | 归谁 |
|---|---|
| 节点图怎么走、选路、兑付触发、收束点 | [关卡节点地图](关卡节点地图.md)(现行规则零改动) |
| 图合法性校验的检查项与算法 | [关卡节点地图](关卡节点地图.md)(LevelTable.validate 现行——生成侧只是它的上游供给方) |
| 池里放几张模板、每张模板里放什么遭遇数值 | [冒险结构](冒险结构.md)(行集内容责任方)与[难度曲线与Boss](难度曲线与Boss.md)(数值所有权) |
| 战斗节点内部的敌人配置与初始化 | 战斗循环(节点编号寻址口径零改动) |
| 节点图的画面呈现 | [HUD框架](../表现与支撑/HUD框架.md)(节点态照旧读图,零新呈现语义) |
## 在核心循环中的位置
```
冒险结构 ──开始关卡──▶ 关卡节点图生成(抽模板 → 实例化行集)──行集──▶ 关卡节点地图(校验 → 选路行进)
```
[核心循环](../../01-核心循环.md)里"关卡:节点链逐节点推进"这一段之前,多了一步"这一关的图是哪张"的抽签——本系统就站在这一步。它向上接冒险结构的开始关卡请求,向下把实例化好的行集交给关卡节点地图;生成之后的一切(校验、行进、兑付、收束)与本系统无关。
## 核心规则
### 概念三件套:图模板、模板池、图模板抽签
**人话阶段**:本系统只有三个概念,弄清它们谁包含谁,整个系统就读懂了。
**图模板**(本文含义:一张手工编写的合法节点图骨架——一个节点集合〔每个节点带类型标注与关卡内唯一编号〕加一个连线集合)是内容资产,不是运行期生成物。**实例化**(本文含义:把模板原样照抄落成该关的行集——节点集合与连线进关卡表行,零变换)之后,它就是关卡节点地图要加载的那张图。
| 概念 | 一句话定义 | 归谁 |
|---|---|---|
| 图模板 | 手工编写的合法节点图骨架;实例化即行集 | 本文(结构规则);内容归冒险结构 |
| 模板池 | 关卡表逐关行配置的同关可抽模板集合,池大小 N(N≥1) | 本文(规则);配置承载归数据配置 |
| 图模板抽签 | 关卡开始时从池中均匀抽一张 | 本文(时机与流);流基础设施归数据配置 |
模板池挂在关卡表逐关行上:行集从"单一节点集合"扩为"模板池"。**N=1 的池里只有现行那张图,逐局抽签退化回固定图**——这是**回滚档**(本文含义:任何一关把池缩回一张模板,该关行为就与今日固定配置逐位等价的保险形态)。整个设计因此可增量落地:先全关 N=1,再逐关扩池。
抽签消费主种子派生的封闭命名流,流名提案 `node_map`(增流须单独拍板——rng_service 流清单是封闭的,见拍板点②)。
**内容纪律**:每张新模板等于一个小内容批——模板里每个战斗与 Boss 节点都必须在敌人与棋盘生成的数值表里有精确行,义务从冒险结构加关纪律的"每关一行集"细化到"每模板一行集";冒烟覆盖义务同批扩为遍历池内全部模板校验,不只抽中的那张。
### 抽签时机与可复现
**人话阶段**:什么时候抽、抽完怎么保证复盘对得上,是本系统接入现有随机纪律的两件事。抽签时点 = **开始关卡处理内、加载节点图之前**,逐关各抽一次(不是冒险开始一次抽齐三关)——抽签时机贴着"这一关的图要用"的时点,主种子的复现域天然覆盖。
```
冒险结构(开始关卡:关卡序号、当前生命、生效上限)
→ 关卡节点图生成:按关卡序号取模板池 → 抽一张(图模板抽签流,恰一 scope)
→ 实例化为行集 → 交图合法性校验(关卡节点地图现行,零改动)
→ 关卡节点地图加载行集 → 呈现选路停点(现行流程原样续跑)
```
可复现域沿用既有口径:主种子 + 各随机流计数器(语义权威归[冒险结构](冒险结构.md)「失败重开与主种子」节,本文不复述)。抽签每次消费恰一个带编号的 scope,计数器随既有快照契约入档——[存档序列化](../表现与支撑/存档序列化.md)零新增域。同主种子同操作序列的两局,逐位同一张图。
第一关注记:第一关现行单链模板保持池中唯一(N=1)即天然固定,教学位纪律不需要新机制——是否维持由拍板点①裁决。
### 三级台阶路线
**人话阶段**:2026-09-21 呈报的三级台阶(图模板抽签 → 骨架固定+属性随机 → 全程序生成)随本批立项成文为正式路线。每一级都比上一级多一点随机,每一级都必须过同样两条不变量:①产物过图合法性校验(检查项口径归关卡节点地图,本文不复述);②商店房"每关恰 1、关底 Boss 前一位必经位"的编排约束在生成侧成立——冒烟断言照旧把关,校验零新增。
| 台阶 | 内容 | 前置条件 |
|---|---|---|
| 一:图模板抽签 | 每关模板池 N≥1,逐局从池中抽一张手工模板实例化 | 测量对账条款先行(见下节);每张新模板按内容纪律配齐数值行 |
| 二:骨架固定+属性随机 | 模板拓扑定型,节点类型在**候选槽位**(本文含义:模板给某个可变位列出的允许节点类型集合,实例化时从集合内均匀掷一个——例:某槽位允许{奖励,恢复},掷中哪个就是哪个)内掷定 | 台阶一收口;商店房所在位排除出候选槽位(保必经位) |
| 三:全程序生成 | 读参数(深度、分支密度、节点类型配比)直接构造图,构造失败重掷(重掷预算同棋盘生成 max_gen_attempts 纪律) | 台阶二收口;图合法性校验作最终守门 |
台阶二的随机量入账:候选槽位掷定消费同一条图模板抽签流的后续 scope,计数器域照旧覆盖,可复现性零损失。台阶三的参数取值域届时随本文修订登记,本草案不预设。
### 测量对账:别让随机污染读数
**人话阶段**:2026-09-21 呈报暂缓的三理由之一是"污染 MC 读数"——模拟试玩与数值验证的通关率是按固定图测的,图一随机,读数波动就混进了布局差异。本节是消解条款,三条:
1. **分层出数**:模拟试玩与数值验证工具的读数按「关卡 × 图模板」分层记录;混合池的整体通关率 = 各模板条件通关率的加权平均(权重 = 抽中概率,均匀池即算术平均)。
2. **基线可比**:基线批(对拍、重投)跑固定模板口径——把池临时缩到 N=1(回滚档)或固定抽签 scope,保证新旧基线在同一张图上对话。
3. **实施门**:台阶一实施排在[难度曲线与Boss](难度曲线与Boss.md)曲线调参批收口之后——现行行值 provisional 收带前叠加布局随机,归因会失真(拍板点③)。
另两条暂缓理由随批消解:**类型集未稳**——五类节点封闭枚举已随商店房批定稿,扩类走文档修订的既有通道对模板同样适用(模板 schema 跟随枚举走);**内容量不足**——台阶一的模板就是内容批,按内容批节奏逐张走,不设批量生产目标。
## 拍板点(登记 [06-待办清单](../../06-待办清单.md),随批更新条目)
| # | 拍板点 | 推荐 |
|---|---|---|
| ① | L1 教学关是否参与抽签 | L1 池 N=1 固定单链(教学位纪律),L2 起抽 |
| ② | `node_map` 随机流增流 | 准——按 rng_service 封闭流增流纪律(改代码 + 金向量补登 + 冒烟断言) |
| ③ | 台阶一实施时点 | 曲线调参批收口后(测量对账条款的实施门) |
| ④ | 首版池规模 | L2/L3 各 2–3 张起步,provisional 随内容批扩 |
| ⑤ | 抽签时点 = 关卡开始逐关抽(本草案口径) | 确认——若改冒险开始一次预抽,随批修订本文 |
## 依赖与输出
这张表就是删除任何一方时的影响面清单。
| 方向 | 系统 / 文档 | 接口要点 |
|---|---|---|
| 上游 | [冒险结构](冒险结构.md) | 开始关卡流程是抽签时点的宿主;主种子与派生流的语义权威;行集内容责任方(模板内容归它) |
| 上游 | [数据配置](../表现与支撑/数据配置.md) | 关卡表模板池列的承载与统一读取;`node_map` 流(提案待拍板)与流种子派生公式的基础设施 |
| 上游 | [难度曲线与Boss](难度曲线与Boss.md) | 模板内遭遇数值的所有权;曲线调参批收口是台阶一的实施门 |
| 下游 | [关卡节点地图](关卡节点地图.md) | 实例化行集的供给方;其图合法性校验与全部行进规则零改动 |
| 下游 | [存档序列化](../表现与支撑/存档序列化.md) | 抽签 scope 计数器入既有快照契约(主种子 + 流计数器),零新增域 |
| 下游 | [HUD框架](../表现与支撑/HUD框架.md) | 零新语义——节点态照旧读图,模板差异对呈现层透明 |
## P0 最小闭环(台阶一实施批)
1. 关卡表逐关行扩模板池结构(承载归数据配置,schema 细节随实施批定)。
2. 池内全部模板加载期预校验(违规致命,fail-fast 不变)。
3. 开始关卡处理内抽签实例化(`node_map` 流恰一 scope)。
4. 既有图合法性校验照跑零改动;关卡节点地图与战斗侧全链零改动。
5. 冒烟断言:抽签确定性(同种子逐位同图)、池内全模板校验、N=1 池与现行固定图逐位等价。
## P1 / P2 后置
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| P1 | 台阶二:骨架固定+属性随机(候选槽位掷定) | 台阶一收口后另批立项;商店必经位的槽位排除规则随批成文 |
| P2 | 台阶三:全程序生成(参数化构造) | 台阶二收口后另批立项;参数取值域与重掷预算随批修订本文 |
## 调参表
本系统无已锁数值。台阶一实施后进表:
| 参数 | 域 | 现行值 | 说明 |
|---|---|---|---|
| 模板池大小 N | int [1,+∞),关卡表逐关行 | provisional(拍板点④) | N=1 = 回滚档;扩池 = 内容批 |
| 重掷预算(台阶三) | 未立项不设值 | — | 台阶三立项时随本文修订登记 |
## 验收标准(草案——随拍板点裁决收口,实施批落地时按本节验收)
- 池内全模板加载期通过图合法性校验,违规致命(校验面不只抽中的那张)。
- 抽签确定性:同主种子同操作序列逐位同一张图;抽签 scope 可独立回放。
- 回滚档成立:N=1 池的关卡与现行固定图逐位等价。
- 商店房编排约束在每张模板上成立:每关恰 1 个商店房、关底 Boss 前一位必经位。
- 零新面:关卡节点地图行进/兑付/收束断言与战斗侧寻址断言全绿,零改动。
- 测量分层:模拟读数含「关卡 × 图模板」维度;基线批可固定模板复现。
- 内容纪律:每张新模板的战斗与 Boss 节点在敌人与棋盘生成的数值表中有精确行(冒烟遍历池内全模板)。
## 待办
本系统待办条目已统一收编至 [06-待办清单](../../06-待办清单.md)(「关卡内结构随机生成」条目),本节不再逐条登记。
## 版本历史
| 版本 | 日期 | 说明 |
|---|---|---|
| v0.1 | 2026-09-27 | **设计草案成文(立项批,用户拍板立项——06 条目「关卡内结构随机生成」随批改状态)**:概念三件套(图模板/模板池/图模板抽签,N=1 回滚档)、抽签时机(开始关卡内逐关抽、主种子派生 `node_map` 流提案)、三级台阶路线(抽签→属性随机→全程序)、MC 测量对账三条款(分层出数/基线可比/实施门=曲线调参批后)、五拍板点、依赖表与验收草案。实施未开工;术语入 registry 词汇表随定稿批执行 |
+3 -3
View File
@@ -27,7 +27,7 @@ entities:
scope_event_binding: board_gen=每次生成新扫雷图(棋盘生成);reward_roll=每次 board install(格奖励批 + 清图奖励批)(地图战斗资源——2026-09-09 接口漂移改写,原"每次奖励结算 roll 批次";地图战斗资源 Rule 2/AC-1 为契约源);encounter=每次战斗实例化恰一 scope(战斗结算 begin_battle 实例化期、扫雷开始前——unit_count 区间均匀骰,挖掘决策域之外 P1 合规);armor_roll=每次掷点恰一 scope(战斗结算 战斗段吃掷点分量逐次判定——1d20,护甲等级掷点批 2026-09-16);variant_place=每次装板恰一 scope(战斗结算 布置段——地形变异首批类型定稿批 2026-09-20);gp_drop=每场战斗结束的掉落掷定恰一 scope(战斗结算 战斗结束分支——GP+商店房批 2026-09-20)
unseeded_access: 致命中止
snapshot_contract: 续玩/复盘快照 = master_seed + 各流 scope 计数器(消费方 存档序列化)
referenced_by: [棋盘生成, 战斗结算, 地图战斗资源, 冒险结构, 存档序列化]
referenced_by: [棋盘生成, 战斗结算, 地图战斗资源, 冒险结构, 存档序列化, 关卡节点图生成]
- name: stream_seed_derivation
type: formula
@@ -49,7 +49,7 @@ entities:
reproducibility_claim: 同冒险内同流各 scope 无碰撞 + 跨版本恒定(不做跨 master_seed 全局单射声明)
master_seed_int64_min: 致命(abs 恒等回绕→与 0 静默别名)
set_master_seed_precondition: 仅全流计数器全零时受理(7 流——2026-09-14 数据配置 漂移批口径 + 2026-09-16 护甲等级掷点批 armor_roll 增流 + 同日敌人技能池批 behavior_roll 增流 + 2026-09-20 地形变异首批类型定稿批 variant_place 增流 + 同日 GP+商店房批 gp_drop 增流)
referenced_by: [棋盘生成, 战斗结算, 地图战斗资源, 冒险结构, 存档序列化]
referenced_by: [棋盘生成, 战斗结算, 地图战斗资源, 冒险结构, 存档序列化, 关卡节点图生成]
- name: difficulty_row_resolution
type: formula
@@ -266,7 +266,7 @@ entities:
关卡收束点: 一关就此定局的时点——Boss 节点战斗胜利(通关)或英雄死亡(失败);关卡节点地图 在收束点先调 战斗结算 关卡清库、再向 冒险结构 宣布关卡结束与结果(冒险结构 首次定义;切片 level_runner 先例转正;2026-09-17 关卡节点地图 v1.0 图版措辞——Boss 节点 = 图唯一终点)
关卡大奖励: 清完一关、进入下一关前的一次性兑付——上限提升 + 血回满 + 钥石入账三件构成,不进背包不占库存域;末关通关不兑付(冒险结构 首次定义;2026-09-17 代币→钥石统一拍板——原「代币记账」即钥石,同一资源两渠道:关卡大奖励入账与 Boss 掉落;game-concept"冒险内大奖励"的落地形态)
永久强化: 跨局成长资源的本作落地名——伴随存档生命周期、可用钥石在营地柜台换取的成长条目集合(元进度定稿批 2026-09-18 用户拍板定名;「元进度 / Meta Progression」保留为系统族名,「营地」为存档内消费枢纽的界面壳非机制实体;「天赋树」同日退役——本作无树形结构,柜台条目为线性清单无分叉无前置;首次定义 元进度 v1.0)
referenced_by: [排雷玩法, 敌人系统, 地图战斗资源, 战斗结算, HUD框架, 魔法道具, art-bible, game-concept, 关卡节点地图, 冒险结构]
referenced_by: [排雷玩法, 敌人系统, 地图战斗资源, 战斗结算, HUD框架, 魔法道具, art-bible, game-concept, 关卡节点地图, 冒险结构, 关卡节点图生成]
- name: enemy
type: schema_data