From e614773aecef54ed30d9d631ebc74665321c2afc Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 3 Nov 2026 23:50:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E8=AE=BE=E8=AE=A1(=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E5=AE=A1=E6=9F=A55.2=C2=B7EC8=E6=92=A4=E5=9B=9E=C2=B7?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A3=81):=20=E7=83=AD=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E8=A7=84=E6=A0=BC=E6=81=A2=E5=A4=8D=E5=8E=9F=E7=8A=B6=E2=80=94?= =?UTF-8?q?=E2=80=94=E7=94=A8=E6=88=B7=E8=A3=81=E5=86=B3=E8=BF=91=E6=9C=9F?= =?UTF-8?q?=E5=B0=86=E5=AE=8C=E5=96=84=E5=AE=9E=E8=A3=85(=E5=AE=9E?= =?UTF-8?q?=E8=A3=85=E5=8E=BB=E5=90=91=3D=E7=94=A8=E6=88=B7=E5=8F=A6?= =?UTF-8?q?=E7=AB=8B=E5=BE=85=E5=8A=9E=E6=9D=A1=E7=9B=AE+=E4=BB=96?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E5=86=99=E5=8D=A1,=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E5=8D=B3=E5=AE=9E=E8=A3=85=E5=BA=95=E7=A8=BF),=E6=9C=AC?= =?UTF-8?q?=E6=89=B9=E4=B8=80=E5=BA=A6=E6=91=98=E9=99=A4=E7=9A=84GDD?= =?UTF-8?q?=E4=BE=A7=E8=A7=84=E6=A0=BC=E5=85=A8=E9=83=A8=E6=92=A4=E5=9B=9E?= =?UTF-8?q?:=E4=B8=89=E4=BB=BDGDD(=E6=95=B0=E6=8D=AE=E9=85=8D=E7=BD=AE/?= =?UTF-8?q?=E6=88=98=E6=96=97=E7=BB=93=E7=AE=97/=E6=A3=8B=E7=9B=98?= =?UTF-8?q?=E7=94=9F=E6=88=90)checkout=E5=9B=9E=E9=80=80=E8=87=B3=E6=9C=AC?= =?UTF-8?q?=E6=89=B9=E5=89=8D=E5=8E=9F=E7=8A=B6(=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=A1=8C=E9=9A=8F=E5=86=85=E5=AE=B9=E5=BD=92=E4=BD=8Dv1.2/v1.6?= =?UTF-8?q?/v1.2),architecture.md=E6=8A=97=E7=83=AD=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E5=BF=AB=E7=85=A7=E5=8F=A5=E6=81=A2=E5=A4=8D=E5=8E=9F=E6=8E=AA?= =?UTF-8?q?=E8=BE=9E+=E6=9C=80=E8=BF=91=E6=9B=B4=E6=96=B0=E8=A1=8C?= =?UTF-8?q?=E5=A6=82=E5=AE=9E=E6=B3=A8=E8=AE=B0=E6=92=A4=E5=9B=9E;?= =?UTF-8?q?=E6=9C=AC=E6=96=87=E6=A1=A3=E6=89=B9=E5=87=80=E6=95=88=E6=9E=9C?= =?UTF-8?q?=3D=E4=B8=BB=E8=A7=92=E8=B4=A6=E4=B8=89=E4=BB=B6=E4=B8=8E?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E8=B4=A6=E4=BB=B6=E8=A1=A5=E7=99=BB=E8=AE=B0?= =?UTF-8?q?+MetaProgression=E8=A1=A5=E8=A1=8C+=E5=86=BB=E7=BB=93=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E6=91=98=E9=99=A4+CurioStop/RunLedger=E6=97=A7?= =?UTF-8?q?=E6=8C=87=E7=A7=B0=E8=AE=A2=E6=AD=A3(architecture.md=20v1.32);?= =?UTF-8?q?=20=E6=96=87=E6=A1=A3=E5=9F=9F=E9=97=B8=E5=85=A8=E7=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engineering/architecture/architecture.md | 4 ++-- design/gdd/systems/战斗循环/战斗结算.md | 6 +++--- design/gdd/systems/排雷循环/棋盘生成.md | 4 ++-- design/gdd/systems/表现与支撑/数据配置.md | 18 +++++++++++------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/design/engineering/architecture/architecture.md b/design/engineering/architecture/architecture.md index e2ff7478..4fc7fcb2 100644 --- a/design/engineering/architecture/architecture.md +++ b/design/engineering/architecture/architecture.md @@ -3,7 +3,7 @@ ## 文档状态 - 版本:1.32 -- 最近更新:2026-11-03(架构审查 5.2 文档漂移订正——主角账三件与刷新账件四行补登记替代失效的 HeroLedger 行、MetaProgression 基础层补登记行(四 Autoload 唯一跨 Autoload 依赖件)、拆件定稿节冻结计数摘除(活体清单不冻结计数)、CurioStop 行落账指称随拆件改指;沿革查 git) +- 最近更新:2026-11-03(架构审查 5.2 文档漂移订正——主角账三件与刷新账件四行补登记替代失效的 HeroLedger 行、MetaProgression 基础层补登记行(四 Autoload 唯一跨 Autoload 依赖件)、拆件定稿节冻结计数摘除(活体清单不冻结计数)、CurioStop 行落账指称随拆件改指;EC8 热重载规格经用户裁决保留原状(实装排期另立待办条目)、本批一度摘除已撤回,本文「抗热重载」快照句随规格保留;沿革查 git) - 引擎:Godot 4.7.2-stable(GDScript 单语言;2026-09-07 锁定) - 评审模式:solo(`review-mode.txt`,2026-09-12 用户拍板——TD/LP 门禁按 solo 跳过,用户授权架构产出自主推进、迭代期回调) - 覆盖 GDD:现行全集(根索引=`design/gdd/02-系统清单.md`,文档树构成以根索引为准) @@ -413,7 +413,7 @@ CJK 字体随包发行并设为 theme 默认字体——运行时默认字体无 | 各系统 → D2 | ConfigDB 类型化属性单点读取 | 禁绕过 ConfigDB load 表、禁缓存副本、禁玩法数值字面量、禁 randomize()/自建 RNG | 校验双通道 + fail-fast 致命 | | A1 → A2 | Board 产物 class_name 数据契约 | install 四不变式校验(violation = 拒绝 + 五类诊断枚举) | 生成期合法性闸(R₀≠S / clearable / min_safe) | | A1 ↔ B1 | attempt 边界非 scope 事件;actuals p10 为对账输入(非 target 参数) | 编排不把重试当取号 | 生成期指标集输出(实测可推理率 / 实际雷数与安全格数 / 重试次数 / 降级与非法产物标记) | -| B4 → B3 | buff 类经 B1 调 apply_effect(B4 零跨系统读、零直接接口) | 满层拒绝 = 零兑付 + 明细行(无折算) | 授予时数值快照(授予时定格) | +| B4 → B3 | buff 类经 B1 调 apply_effect(B4 零跨系统读、零直接接口) | 满层拒绝 = 零兑付 + 明细行(无折算) | 授予时数值快照(抗热重载) | | B1 → D1 | [步骤流行协议](../../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋)(基础行型+扩展行两层封闭 + 公共字段 type/source_class/origin_cell/round_index/display_name/value/highlight? + 特有字段 target/effect_id/pool_value) | 无来源行 = 断言失败;呈现侧禁按行序重演 B2 状态机 | 可回放步骤流(同种子逐行相同) | **引擎类型核验注记**:接口使用的引擎类型 = Resource / .tres(D2 全表)、RefCounted(容器类)、Signal/Callable(事件载体)、Control/CanvasLayer/Drawing(D1)、SceneTree headless 协议(测试)——均属 4.x 基线稳定面;4.7 Control 域增量(offset_transform_* 等)已在 breaking-changes.md 登记,D1 采纳前对照核实。 diff --git a/design/gdd/systems/战斗循环/战斗结算.md b/design/gdd/systems/战斗循环/战斗结算.md index 102eef72..a361cf43 100644 --- a/design/gdd/systems/战斗循环/战斗结算.md +++ b/design/gdd/systems/战斗循环/战斗结算.md @@ -1,7 +1,7 @@ # 战斗结算 > 一句话:轮末结算的编排与逐行兑现 -> 状态:已定稿(自旧体系迁移);现行为 v1.7 +> 状态:已定稿(自旧体系迁移);现行为 v1.6 ## 设计目的 @@ -284,7 +284,7 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值 崩壁冲击若击杀最后敌人,仍由本轮判定段按既有顺序判胜,不新增挖掘期即时胜利出口。换图系效果使用扩展行留痕:崩壁冲击走伤害单据,石层缓冲在受伤消费行体现减免,坑道小憩与矿道红利分别走治疗与 GP 入账记录。刷新事实来源不指向单一棋盘格,使用明细流水的专长刷新效果来源豁免,不伪造来源格。 -战斗开始按固定序列开张:初始化状态池、掷骰定敌方实际数量、生成敌人、装板并预分配资源恰一次、变异布置([地形变异](../排雷循环/地形变异.md)——棋盘设置顺序第 4 步:生成棋盘 → 打开状态初始化 → 战斗资源格设置 → 变异格设置,消费 `variant_place` 封闭流)、发开轮通知并执行开轮摇号(摇定首轮各敌本拍动作)。上一关的大奖励(如血上限提升)经战斗开始入参的覆盖值通道生效,内容归[冒险结构](../冒险循环/冒险结构.md)。 +战斗开始按固定序列开张:关上配置热重载的闸门、初始化状态池、掷骰定敌方实际数量、生成敌人、装板并预分配资源恰一次、变异布置([地形变异](../排雷循环/地形变异.md)——棋盘设置顺序第 4 步:生成棋盘 → 打开状态初始化 → 战斗资源格设置 → 变异格设置,消费 `variant_place` 封闭流)、发开轮通知并执行开轮摇号(摇定首轮各敌本拍动作)。上一关的大奖励(如血上限提升)经战斗开始入参的覆盖值通道生效,内容归[冒险结构](../冒险循环/冒险结构.md)。 举证:本节为编排流程,无计算。 @@ -294,7 +294,7 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值 | 方向 | 系统 | 接口要点 | |---|---|---| -| 上游 | [数据配置](../表现与支撑/数据配置.md) | 结算配置表(段序、当量、封顶、甲效与护甲等级掷点参数)的承载与读取,本系统是回填责任方 | +| 上游 | [数据配置](../表现与支撑/数据配置.md) | 结算配置表(段序、当量、封顶、甲效与护甲等级掷点参数)的承载与读取,本系统是回填责任方;战斗中热重载被闸门拒绝 | | 上游 | [行动经济](../排雷循环/行动经济.md) | 轮末两字段消息的接收方;回发换图指令、结算完成与战斗结束通知;挖掘期刷新经它扣费;五条经济契约的对账责任方 | | 上游 | [排雷玩法](../排雷循环/排雷玩法.md) | 订阅其三事件流(挖开格、封印判定、轮次结束);换图时调用装板与退役 | | 上游 | [棋盘生成](../排雷循环/棋盘生成.md) | 换图时调用其生成接口 | diff --git a/design/gdd/systems/排雷循环/棋盘生成.md b/design/gdd/systems/排雷循环/棋盘生成.md index 21b22ef4..9559015d 100644 --- a/design/gdd/systems/排雷循环/棋盘生成.md +++ b/design/gdd/systems/排雷循环/棋盘生成.md @@ -1,7 +1,7 @@ # 棋盘生成 > 一句话:棋盘怎么生成、怎么保证可推理可清图 -> 状态:已定稿(自旧体系迁移);现行为 v1.3 +> 状态:已定稿(自旧体系迁移);现行为 v1.2 ## 设计目的 @@ -61,7 +61,7 @@ ④ 产出上报 ─── 交出棋盘 + 生成期指标集 ``` -生成期间的每一次随机取数——布雷、重试——都从本图专属的一条"棋盘生成随机流"按固定顺序取:一张图只开一条流、用到底,重试不开新流;流之外零随机,全局随机函数一律禁用。参数行开始时一次快照。管线本身无状态——这些合起来就是"同种子同参数必产同图"的根基。(变异布置不消费本流——其取数走专用 variant_place 流,归战斗结算 布置段。) +生成期间的每一次随机取数——布雷、重试——都从本图专属的一条"棋盘生成随机流"按固定顺序取:一张图只开一条流、用到底,重试不开新流;流之外零随机,全局随机函数一律禁用。参数行开始时一次快照,配置表中途热重载不影响进行中的生成。管线本身无状态——这些合起来就是"同种子同参数必产同图"的根基。(变异布置不消费本流——其取数走专用 variant_place 流,归战斗结算 布置段。) 各阶段的失败都有明确语义,全部失败路径都不让玩家卡死(本节为纯流程规则,无计算;数值与校验式见后续各节): diff --git a/design/gdd/systems/表现与支撑/数据配置.md b/design/gdd/systems/表现与支撑/数据配置.md index d63d89ae..eb46fa93 100644 --- a/design/gdd/systems/表现与支撑/数据配置.md +++ b/design/gdd/systems/表现与支撑/数据配置.md @@ -1,7 +1,7 @@ # 数据配置 > 一句话:数值表与单一事实源管线 -> 状态:已定稿(自旧体系迁移);现行为 v1.3 +> 状态:已定稿(自旧体系迁移);现行为 v1.2 ## 设计目的 @@ -19,7 +19,7 @@ |---|---| | 全部数值表的结构与数据 | 表结构类(声明每列的类型、取值域与默认值)与数据文件成对交付;结构先行,数值由各回填责任方回填 | | 全局读取口与随机服务 | 两个进程级单例:类型化读取口与统一随机流服务 | -| 加载与校验管线 | 启动加载、fail-fast 校验 | +| 加载、校验与热重载管线 | 启动加载、fail-fast 校验、调试构建热重载的状态管理 | | 进度坐标查行 | 进度键表(跟着冒险进度成长的表)按(关卡序号 × 节点深度)两维坐标解析取行 | | 表清单与对账 | 表路径固定、清单封闭;表实与 schema 声明逐字段对账 | @@ -46,7 +46,7 @@ 单一事实源(本文含义:每个玩法数值只有一处权威载体,其余一律引用它)落到两条禁令上。第一,玩法代码零数值字面量:凡是设计师要调的数字,只存在于 data/tables/ 下的数据表里,代码里写死玩法数值即评审阻塞项。 -第二,取数只走一个口:全部系统经全局读取口的类型化属性读数(读出来就是带类型的值,例如每轮行动点就是行动经济表里那个整数字段),禁止绕过它自己加载表文件或长期缓存副本——副本绕过校验,不在单一事实源管线内。 +第二,取数只走一个口:全部系统经全局读取口的类型化属性读数(读出来就是带类型的值,例如每轮行动点就是行动经济表里那个整数字段),禁止绕过它自己加载表文件或长期缓存副本——副本绕过校验,热重载换新值时它也不知情。 表结构与数据成对交付:结构定义先行(每个字段带类型、取值域与默认值),本系统先建齐全部占位表,具体数值由回填责任方按其系统文档回填——先有格子,后填数字。表结构零界面依赖:本系统代码不引用任何界面类,无窗口的命令行模式(headless)下也能跑完整战斗,自动化测试才有载体。 @@ -109,7 +109,7 @@ └─ 任一错误 ──▶ 输出错误清单,致命中止 ``` -加载与校验在任何构建形态一律致命:任一表加载或校验失败,输出错误清单并致命中止——fail-fast 全域统一,无软着陆例外。随机服务的状态线独立于表加载:加载成败都不触碰主种子与计数器。 +热重载(不重启进程、当场重新加载表文件的调试手段,仅调试构建)单独一套处置:战斗进行中的重载请求被闸门拒绝(闸门由[战斗结算](../战斗循环/战斗结算.md)在战斗开始时置位、结束复位),重载校验失败时保留旧表继续运行并给出错误清单——不杀调试会话,这是全部规则里唯一的软着陆。调试构建之外,加载与校验在任何构建形态一律致命。随机服务的状态线独立于表加载:重载成败都不触碰主种子与计数器。 举证:本节为处置纪律约定,无计算。校验双通道与夹具注入为实现参照,本文不转载。 @@ -151,12 +151,13 @@ | 下游 | [敌人系统](../战斗循环/敌人系统.md) | 敌人表与主角表承载 | | 下游 | [增益状态](../战斗循环/增益状态.md) | 状态效果表承载;悬空引用校验的被指方 | | 下游 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 奖励表与奖励配置表承载;reward_roll 流取号 | -| 下游 | [战斗结算](../战斗循环/战斗结算.md) | 结算表承载;encounter 流取号 | +| 下游 | [战斗结算](../战斗循环/战斗结算.md) | 结算表承载;热重载闸门置位与复位;encounter 流取号 | | 下游 | [秘宝](../跨局循环/秘宝.md) | 秘宝表承载 | | 下游 | [冒险结构](../冒险循环/冒险结构.md) | 关卡表与冒险表承载(登记现状见「待办」);主种子注入入口 | | 下游 | [难度曲线与Boss](../冒险循环/难度曲线与Boss.md) | 难度表承载(占位);进度坐标查行的消费方 | | 下游 | [元进度](../跨局循环/元进度.md) | 元进度表占位承载 | | 下游 | [存档序列化](存档序列化.md) | 随机快照契约(主种子 + 全局取数计数器) | +| 下游 | [HUD 框架](HUD框架.md) | 调试热重载完成通知(仅调试构建) | | 外发 | 无订阅 | 本系统不订阅任何玩法事件 | ## P0 最小闭环 @@ -166,7 +167,8 @@ 3. 进程启动:逐表加载、逐表校验,错误收集后统一显示错误;全绿进入就绪态。 4. 全部系统经全局读取口读数,无第二取数路径。 5. 冒险开始注入主种子并开事件日志会话,统一流按事件取号。 -6. 无窗口冒烟脚本跑通加载、校验、取数、派生全链路,退出码 0。 +6. 调试构建热重载即改即验:战斗中被闸门拒绝,结束后手动再触发。 +7. 无窗口冒烟脚本跑通加载、校验、取数、派生全链路,退出码 0。 ## P1 / P2 后置 @@ -176,6 +178,7 @@ | P1 | 难度曲线导出工具(无窗口导出行解析矩阵供比对) | 难度审计的离线载体,[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)期交付物 | | P2 | 正式包构建的致命表现验证与调试覆盖结构性不存在验证 | 挂首次正式导出检查清单 | | P2 | 进度键表的调试覆盖行寻址语法 | 调试覆盖现只支持单行全局表字段,行寻址登记为后续扩展 | +| P2 | 编辑器内表文件热重载自动化 | 低优先,未指派 | ## 调参表 @@ -195,9 +198,10 @@ - 校验类别全覆盖:越界、文件缺失、空表、缺锚行、重复键、权重和为零、悬空引用各有一份测试夹具,逐类断言错误类别。 - 致命真的会死:任一致命夹具经正式通道加载,进程非 0 退出,而非仅"校验器能发现"。 - 黄金向量:随机派生纯函数对登记向量逐个复算相等;同输入恒同输出;同序号重复调用恒等。 -- 计数器纪律:连续取号跨模拟关卡切换,计数器单调不重置;表加载不改变主种子与计数器。 +- 计数器纪律:连续取号跨模拟关卡切换,计数器单调不重置;热重载成败都不改变主种子与计数器。 - 向上取整解析:请求无精确行时返回**不低于**请求坐标的最近行并留一条警告;请求超出最大已有行时封顶取最大行并留警告;同类警告去重;精确命中零警告。 - 越域与未播种:坐标低于合法域(关卡序号 <1、节点深度 <0)在进入解析前致命中止(Fatal 级诊断 + 进程非 0 退出,无兜底);高于最大已有行走封顶取最大行(警告留痕,不致命);未设主种子就取随机数致命中止,无默认种子兜底。 +- 热重载门:战斗中重载被拒绝且读数不变、不发通知;门未置位时新值可读且通知恰一次;校验失败保留旧表停留就绪态。 - 零字面量、零第二路径:静态扫描加人工复核确认玩法代码无数值字面量、无读取口之外的表加载、无全局随机函数调用。 - 零界面依赖:本系统代码不引用任何界面类,无窗口实跑通过(静态扫描与实跑两项合成判定)。 - 表实一致:各表结构与已锁字段和表结构声明逐字段一致。