diff --git a/design/gdd/systems/表现与支撑/数据配置.md b/design/gdd/systems/表现与支撑/数据配置.md index 547fba9a..d6606bd3 100644 --- a/design/gdd/systems/表现与支撑/数据配置.md +++ b/design/gdd/systems/表现与支撑/数据配置.md @@ -1,7 +1,7 @@ # 数据配置 > 一句话:数值表与单一事实源管线 -> 状态:已定稿;现行为 v1.3 +> 状态:已定稿;现行为 v1.4 ## 设计目的 @@ -101,7 +101,7 @@ | 错误类别 | 什么情况 | 处置 | |---|---|---| -| 加载期校验错误 | 字段越界、类型不符、表为空、缺入口锚行、重复键、权重和为零、悬空引用、段序违例 | 收集后统一显示错误,致命中止并输出错误清单 | +| 加载期校验错误 | 字段越界、类型不符、表为空、缺入口锚行、重复键、权重和为零、悬空引用、跨表量级越界、段序违例 | 收集后统一显示错误,致命中止并输出错误清单 | | 运行期致命 | 进度坐标越域请求、未设主种子就取随机数 | 不分构建走致命错误路径;无窗口模式进程非 0 退出 | ``` @@ -119,6 +119,20 @@ 举证:本节为校验纪律约定,无计算。逐表引用字段的登记见各回填责任方文档。 +### 跨表量级校验:组合数值的上界不得突破目标字段的取值域 + +单表校验各管各的字段取值域,但两张表各自合法取值,组合起来仍可能量级失控:敌人攻击取域内高位、难度攻击乘数也取域内高位,乘出来的实际攻击可以远超主角生命任何可能的取值。跨表量级校验在加载期把这类组合拦下。它只查取值域之间的量级相容性,不查玩法平衡——数值定得合不合理归各回填责任方与[难度曲线与Boss](../冒险循环/难度曲线与Boss.md),本校验只问组合结果是否突破结构上可能的上界。 + +现行激活的量级检查一条: + +| 检查 | 组合式 | 上界 | 越界处置 | +|---|---|---|---| +| 敌人攻击 × 难度攻击乘数 | 敌人表每行攻击上界(有攻击区间取区间上限,否则取基值)× 难度表全行攻击乘数的最大值(越域乘数按域边界值计) | 主角表生命上限字段的取值域上界 | 加载期校验错误,致命中止 | + +难度表为空表时跳过本检查:零乘数修饰即攻击不放大,单表域校验已覆盖。Boss 数值走行值直填、不经难度表,其攻击上界就是行值本身,单表域校验已覆盖,不另查。各取值域的具体数值归表结构声明(game/data/schemas/),本文不转载。 + +举证:本节为校验纪律约定,无计算。 + ### 进度坐标查行:跟着冒险进度成长的表带两维坐标 跟着冒险进度成长的表(难度、生成参数、敌人配置)每行带(关卡序号 × 节点深度)两维坐标——难度曲线的雕刻轴从第一天就留在表结构层,而不是散落各处的魔法数字。解析规则两条:其一,进度坐标向上取整(2026-09-18 用户拍板)——无精确行时取**不低于**请求坐标的最近已有行并留一条警告(警告按"哪张表、缺哪维、停在哪个键"去重,是开发期异常信号而非审计工具);取整方向的理由是**保证偏难**:宁可在内容缺口上高估难度让工具读数保守,不可静默降难掩盖断档;请求坐标低于合法域(关卡序号 <1、节点深度 <0)不属于取整,走运行期致命;请求高于最大已有行时**取最大已有行封顶**(2026-09-18 追加拍板:可取范围内向上取整,超出最大值就用最大值,封顶同样留警告)。其二,实体键精确匹配,那一行没有这个名字就是悬空引用,直接致命中止——进度可以向上近似,"是哪种敌人"不能近似,身份近似会静默改变遭遇构成。 @@ -190,12 +204,14 @@ | 随机流口径 | 统一流单盐单计数器 + 七用途标签封闭词表 | 统一口径为 2026-09-27 裁决;扩签 = 改代码 + 评审,有意设卡 | | 进度坐标解析策略 | 可取范围内向上取整 + 警告(保证偏难);超出最大行封顶取最大值 + 警告;域越界致命(2026-09-18 两段拍板) | 冻结:静默降难会掩盖难度断档 | | 入口锚行校验 | 写死开 | 非调参项;重议走文档修订流程 | +| 跨表量级校验 | 写死开 | 非调参项;重议走文档修订流程 | | 调试覆盖开关 | 仅调试构建,默认关 | 正式构建结构性不存在;覆盖值永不回写表文件 | ## 验收标准 - 干净检出:无窗口冒烟脚本从干净检出启动,表清单内全部表加载成功且表目录无清单外文件;任一失败输出错误清单并退出非 0。 -- 校验类别全覆盖:越界、文件缺失、空表、缺锚行、重复键、权重和为零、悬空引用各有一份测试夹具,逐类断言错误类别。 +- 校验类别全覆盖:越界、文件缺失、空表、缺锚行、重复键、权重和为零、悬空引用、跨表量级越界各有一份测试夹具,逐类断言错误类别。 +- 跨表量级护栏:敌人攻击上界与难度攻击乘数最大值的组合超过主角生命上限取值域上界时,加载期报对应错误类别并致命中止;合法组合与空难度表零误报。 - 致命真的会死:任一致命夹具经正式通道加载,进程非 0 退出,而非仅"校验器能发现"。 - 黄金向量:随机派生纯函数对登记向量逐个复算相等;同输入恒同输出;同序号重复调用恒等。 - 计数器纪律:连续取号跨模拟关卡切换,计数器单调不重置;热重载成败都不改变主种子与计数器。 diff --git a/待办清单.md b/待办清单.md index 3a1f7d26..cd3574e9 100644 --- a/待办清单.md +++ b/待办清单.md @@ -9,13 +9,6 @@ **改动面**:文档 **状态**:待文档设计 -#### 未决问题迁移——战斗末可选类 j==0 补发 1 件兜底是否采纳(2026-11-07 登记,来源=批次移交) - -**实况**:原 architecture.md「未决问题」QQ-05(git 历史可考,架构收窄批迁出)。切片遗留待办的兜底条款采纳与否。 -**缺口**:还差 playtest 数据+[地图战斗资源](design/gdd/systems/战斗循环/地图战斗资源.md) GDD 修订批裁决。 -**改动面**:文档 -**状态**:待文档设计 - #### 未决问题迁移——可选类退出格子池后 buff 频率被动上升的难度对冲杠杆(2026-11-07 登记,来源=批次移交) **实况**:原 architecture.md「未决问题」QQ-06(git 历史可考,架构收窄批迁出)。buff 频率 44%→59% 的对冲杠杆(敌 HP/权重/幅度三选)。 @@ -23,27 +16,6 @@ **改动面**:文档+游戏代码 **状态**:待文档设计 -#### 未决问题迁移——标错惩罚不对称裁决(2026-11-07 登记,来源=批次移交) - -**实况**:原 architecture.md「未决问题」QQ-07(git 历史可考,架构收窄批迁出)。A2 OQ1:候选敌方伏击+1;hit=false 无去重的不对称裁决。 -**缺口**:还差原型小补丁实测会话裁决。 -**改动面**:文档 -**状态**:待文档设计 - -#### 未决问题迁移——B5 双舞台陷阱(2026-11-07 登记,来源=批次移交) - -**实况**:原 architecture.md「未决问题」QQ-08(git 历史可考,架构收窄批迁出)。战斗发生在棋盘上还是独立场景,B5 立项前置。 -**缺口**:还差战斗表现美术测试后裁决。 -**改动面**:文档 -**状态**:待文档设计 - -#### 未决问题迁移——C3 消费 B1 对账输出的事实依赖回写系统清单(2026-11-07 登记,来源=批次移交) - -**实况**:原 architecture.md「未决问题」QQ-09(git 历史可考,架构收窄批迁出)。C3 消费 B1 对账输出的事实依赖回写 `design/gdd/02-系统清单.md`。 -**缺口**:C3 GDD 定稿时回写核对。 -**改动面**:文档 -**状态**:待文档设计 - #### 未决问题迁移——A1 生成性能姿态 F2c 常数定稿(2026-11-07 登记,来源=批次移交) **实况**:原 architecture.md「未决问题」QQ-11(git 历史可考,架构收窄批迁出)。切片实证 10×10/12×12 同步生成可接受,WorkerThread 留扩展。 @@ -53,10 +25,9 @@ #### 未决问题迁移——零伤害死局跨字段跨表护栏落点(2026-11-07 登记,来源=批次移交) -**实况**:原 architecture.md「未决问题」QQ-12(git 历史可考,架构收窄批迁出)。B2 OQ9;推荐 D2 跨表校验(切片 LevelTable 校验先例)。 -**缺口**:还差 D2 校验设计批裁决落点。 -**改动面**:文档 -**状态**:待文档设计 +**实况**:原 architecture.md「未决问题」QQ-12(git 历史可考,架构收窄批迁出)。设计定稿:design/gdd/systems/表现与支撑/数据配置.md v1.4(2026-11-09,跨表量级校验节——域级判据,加载期致命)。 +**改动面**:文档+游戏代码 +**状态**:文档设计已闭合 #### 未决问题迁移——A1 EC5 运行期熔断(2026-11-07 登记,来源=批次移交)