From 5cf7f4b6ae077d2372177ca25517fed9a8020434 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 01:46:35 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E7=AB=8B=E3=80=8A=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E3=80=8B=E6=A6=82=E5=BF=B5=EF=BC=9A=E5=B1=80=E5=86=85=E5=8A=A0?= =?UTF-8?q?=E5=BC=BA=E7=89=A9=E5=93=81=E7=BB=9F=E4=B8=80=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E4=B8=BA=E3=80=8C=E7=89=B9=E6=80=A7=E3=80=8D=EF=BC=8C=E4=B8=A4?= =?UTF-8?q?=E7=A7=8D=E5=BD=A2=E6=80=81=E6=94=B6=E6=95=9B=E4=B8=BA=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E5=80=BC=20+=20=E6=96=87=E6=A1=A3/=E7=A7=B0=E8=B0=93/?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=B1=82=E6=A0=87=E8=AF=86=E7=AC=A6=E7=BB=9F?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 design/gdd/systems/冒险循环/特性.md(概念唯一定义文档) 定义=一次冒险内角色自身得到的提升(不是持有物);作用范围、生命周期、 获取途径(战场奖励/商店·训练)、关联与边界五要素齐全;数值一律指路表不入正文 - 02-系统清单:冒险循环补行 + 命名对照表补 ADVENTURE_FEATURE - registry entities.yaml:新增 feature 概念条目(owner/referenced_by)+ adventure_table 字段名同步 - 数据层标识符 112 处换名(值零变更):BONUS_IDS→FEATURE_KINDS、bonus_token_count→feature_quota、 bonus_value→feature_value、token_*/bonus_*_flat→feature_quota_*/feature_value_* - 称谓统一 94 处:旧称「流派件/数值件/本关强化」→ 特性 + 形态修饰语(规则改写型/属性加成型) - 两张 schema 顶部加概念指路注释,代码可直接查到定义文档 - 06-待办清单:BD 分层条目现状改写 + 新增「命名统一后续」条目(relic 词族与类名对齐待实施) 未动:类名与文件名(Godot .uid/.tscn 引用需跑测试自证)、断点存档键(兼容) --- design/gdd/02-系统清单.md | 3 + design/gdd/06-待办清单.md | 14 +- design/gdd/systems/冒险循环/特性.md | 143 ++++++++++++++++++ design/gdd/systems/表现与支撑/HUD框架.md | 4 +- design/gdd/ux/battle.md | 10 +- design/gdd/ux/level-map.md | 2 +- design/registry/entities.yaml | 23 ++- game/core/adventure_runner.gd | 46 +++--- game/core/battle_orchestrator.gd | 8 +- game/core/config_db.gd | 4 +- game/core/config_db_cross_validator.gd | 10 +- game/core/damage_controller.gd | 4 +- game/core/level_runner.gd | 10 +- game/data/schemas/adventure_table.gd | 108 ++++++------- game/data/schemas/meta_tree_table.gd | 8 +- game/data/schemas/relic_table.gd | 11 +- game/data/schemas/shop_table.gd | 2 +- game/data/tables/adventure.tres | 42 ++--- game/data/tables/meta_tree.tres | 2 +- game/data/tables/relics.tres | 8 +- game/data/tables/shop.tres | 2 +- game/presentation/battle_narrator.gd | 6 +- .../presentation/bonus_interact_controller.gd | 4 +- game/presentation/hud_presenter.gd | 8 +- .../views/hero_info_panel_view.gd | 20 +-- game/presentation/views/level_map_screen.gd | 16 +- game/smoke/adventure_monte_carlo.gd | 4 +- game/smoke/level_autoplay.gd | 8 +- game/smoke/smoke_all.gd | 50 +++--- 29 files changed, 378 insertions(+), 202 deletions(-) create mode 100644 design/gdd/systems/冒险循环/特性.md diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index 198358f4..ad0e25ff 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,6 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | +| `特性.md` | 一次冒险内角色自身得到的提升(规则改写型 / 属性加成型两种形态) | 已实现·2026-10-05 新立定义 | ### 跨局循环(`systems/跨局循环/`) @@ -96,6 +97,7 @@ | 冒险循环 | 关卡节点图生成 | `NODE_MAP_GENERATION` | —(新立无旧代号) | | 冒险循环 | 冒险结构 | `ADVENTURE_STRUCTURE` | c2 | | 冒险循环 | 难度曲线与Boss | `DIFFICULTY_CURVE` | c3 | +| 冒险循环 | 特性 | `ADVENTURE_FEATURE` | —(新立无旧代号) | | 跨局循环 | 元进度 | `META_PROGRESS` | c4 | | 表现与支撑 | HUD框架 | `HUD_FRAMEWORK` | d1 | | 表现与支撑 | 数据配置 | `DATA_CONFIG` | d2 | @@ -126,3 +128,4 @@ | v1.0 | 2026-09-27 | 节点图生成立项批(用户拍板立项——06 条目「关卡内结构随机生成」随批改状态):`systems/冒险循环/` 新建 `关卡节点图生成.md` 设计草案 v0.1(图模板/模板池/抽签三概念、三级台阶路线、MC 测量对账条款、五拍板点);文档树补行 + 命名对照表补 `NODE_MAP_GENERATION` 行 | | v1.1 | 2026-09-27 | 关卡画面 UX spec 建档(关卡画面 UX 批):`ux/` 表补 `level-map.md` 行——选路枢纽三停点布局、GP 常驻徽章、交互映射与 AC 成文,三项设计提案挂 06 待拍板 | | v1.2 | 2026-10-03 | R3 清账批(gdd_lint 分域随批):四处状态单元格日期批注迁出——敌人系统行事件见敌人系统.md 版本历史 v0.5(技能池批);元进度行见本表 v0.8;camp/shop 行=两文 v1.0 落文(2026-09-30 三裁决执行批);语义零变更 | +| v1.3 | 2026-10-05 | 立《特性》:一次冒险内角色自身得到的提升——此前按内部分类被叫成三个名字(规则类称"流派件"、属性类称"数值件"、界面称"本关强化"),现收敛为一个对象的两种形态枚举;文档树冒险循环补行 + 命名对照表补 `ADVENTURE_FEATURE` 行 | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index dd8a5ea0..cd018c3e 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -27,17 +27,17 @@ #### 冒险 BD 两类加强物品获取同渠道、纯概率差(用户口径:获取途径须区分开,2026-10-04 提问登记) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物品两类——**流派件**(机制件,改规则、带流派标签与档位激活,构筑核心,真正改变局内强度)与**数值件**(属性加成,UI 呈现名「本关强化」,写统一加算区;账本实为冒险域、关间不清零)。现行两类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),流派件只占稀有/罕见档(与数值大件混编),商店仅「货架零流派件挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **特性**(2026-10-05 定名,定义见 [特性](systems/冒险循环/特性.md)):规则改写型(改规则、带流派标签与档位激活,构筑核心)与属性加成型(属性加成,写统一加算区;账本实为冒险域、关间不清零)两种形态。旧称「流派件 / 数值件 / 本关强化」一律作废。现行两类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),规则改写型只占稀有/罕见档(与属性大件混编),商店仅「货架零规则改写型挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 -**用户期望改动**:将两类的获取途径区分开,流派件获取节奏不依赖纯概率。已呈四备选(均未拍板):① Boss/精英击杀后流派件**专属三选一**,流派件整体退出共享池〔我方推荐:确定性最高,杀戮尖塔/以撒/哈迪斯参照系全支持,与钥石逐杀 Boss 节奏同构;代价=令牌池配额回收+商店保底改向+MC 锚换代〕;② 行为条件投放(累计玩法行为定向出件,防滚雪球工程量大);③ 计步保底(每 N 奖励面必含流派件,改动最小只缓解不根除);④ 双池分离(每面必见流派件,决策密度过强,不推荐)。 +**用户期望改动**:将两种形态的获取途径区分开(规则改写型走战场奖励、属性加成型走商店训练),规则改写型的获取节奏不依赖纯概率。已呈四备选(均未拍板):① Boss/精英击杀后规则改写型**专属三选一**,规则改写型整体退出共享池〔我方推荐:确定性最高,杀戮尖塔/以撒/哈迪斯参照系全支持,与钥石逐杀 Boss 节奏同构;代价=令牌池配额回收+商店保底改向+MC 锚换代〕;② 行为条件投放(累计玩法行为定向出件,防滚雪球工程量大);③ 计步保底(每 N 奖励面必含规则改写型,改动最小只缓解不根除);④ 双池分离(每面必见规则改写型,决策密度过强,不推荐)。 **归属**:[node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 **状态**:待讨论(2026-10-04 用户提问登记,后续展开) -#### 内部分类禁写入玩家可见面——流派件呈现三处违规待改(2026-10-04 用户立意登记) +#### 内部分类禁写入玩家可见面——特性呈现三处违规待改(2026-10-04 用户立意登记) -**现状**:用户立意(方向已明确):流派/数值等内部分类**不得写进玩家可见的道具名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 件流派件 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店流派件卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题「流派件」+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 +**现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项规则改写型特性的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 **连带裁点**:档位激活(同标签 2 件档一/4 件档二)若完全不呈现,玩家只能靠悟——三路待裁:甲=纯隐藏、机制照跑(以撒套装式,最贴用户「流派是玩家挖掘出来的」原则);乙=档位达成那一刻给一次性风味反馈、不点破流派名;丙=连档位机制一起退役。 @@ -45,6 +45,12 @@ **状态**:方向已明确(禁写类别),违规改法与档位呈现三路待讨论(2026-10-04 登记,后续展开) +#### 特性命名统一后续——代码标识符与文件名的对齐(2026-10-05 立) + +**现状**:概念已统一为「特性」(定义见 [特性](systems/冒险循环/特性.md))。本期完成三件——① 定义文档落位;② 称谓统一(代码注释与玩家可见文案,94 处);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 feature_* 词族,112 处,值零变更)。**未完三件**:① 规则改写型那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 + +**状态**:待实施——须在可跑冒烟的迭代批次内完成(本会话按测试执行两入口铁规零测试,改名无法自证) + #### 棋盘战斗键盘/手柄输入(2026-10-04 用户提问登记,排期 Beta) **现状**:战斗棋盘操作现行唯一输入 = 鼠标——左键已开格 = 移动 / 未开格 = 挖掘,右键 = 封印(旗一次性承诺,无拔旗),悬停承载合法性反馈(可挖域微光 + BFS 路径点迹);全仓无 InputEventKey/JoypadButton 处理,project.godot 无自定义 InputMap 动作。**可行性已核(2026-10-04):可做**——分发接缝现成,board_view `action_requested(cell, kind)`(kind ∈ {dig, move, flag_place, flag_pull})是唯一出口,键盘/手柄作第二输入前端产出同款信号即可,规则引擎合法性校验零改动(非法目标两条路径同拦);Godot InputMap 原生支持键盘与手柄(十字键/摇杆)绑定同一动作,与鼠标并存不冲突。用户期望操作形态:十字方向移动;挖掘/封印各一独立键;方向控制选定 8 向挖掘或封印目标(斜向 = 双方向键组合)——8 向恰与现行可挖域(8 向相邻未开格)同集,十字移动与立绘 4 向既有裁决一致;键盘移动语义 = 逐格步进(现行点击 = 任意已开格 BFS 全程,逐格为等价交互变体)。连带设计点(实施批先裁):① 键盘模式需屏上光标格承载现行悬停反馈(无鼠标 hover,合法性指示改挂光标);② 键盘默认键位与手柄键位映射待定;③ 弹层界面(结算/三选一/商店/设置等)现行全鼠标,手柄全覆盖需焦点导航——本条范围 = 棋盘战斗操作,界面焦点导航是否同批待裁;④ 键位自定义是否进设置面待裁。 diff --git a/design/gdd/systems/冒险循环/特性.md b/design/gdd/systems/冒险循环/特性.md new file mode 100644 index 00000000..013fe5db --- /dev/null +++ b/design/gdd/systems/冒险循环/特性.md @@ -0,0 +1,143 @@ +# 特性(Feature) + +> 一次冒险之内,角色**自身得到提升**的载体。它不是包里的东西,而是角色本人的变化——这点决定了它和持有物是两类完全不同的概念,下面的「关联与边界」一节写了怎么区分。 +> +> 同一个概念下有**两种形态**:改写规则的,和抬高属性的。它们是同一个对象的形态枚举值(`form`:规则改写型 / 属性加成型),不是两类东西。 +> +> 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是特性的唯一定义文档。 +> +> 数值纪律:本文件只写概念、取值域与指路;每件加多少、效果是什么一律不进正文,事实源是 `game/data/tables/relics.tres` 与 `game/data/tables/adventure.tres`。 + +## 设计目的 + +一次冒险要走三关,如果走完时角色和开局毫无区别,中途的每一次取舍就都不算数了。特性就是那个把"这一局玩成了什么样"落下来的东西:让玩家在冒险过程中不断变强,且每一局变强的方向不同。 + +它同时要和跨冒险的成长隔开:永久保留的东西是[魔法道具](../排雷循环/魔法道具.md)(带在身上的物品)与[元进度](../跨局循环/元进度.md)(账号级的树),特性只在当局存在,冒险收束即清零——它不是"你的存档变强了",而是"这一次下矿的你变强了"。 + +**为什么定为"自身提升"而不是"获得物品"**:一旦把它当成捡到的东西,就和魔法道具(持有物)在玩家心里混成一团——而两者的接入方式、生命周期、获取条件都不同。定为自身的提升,边界一句话就能说清:**带在自己身上的是特性,拿在手里的是魔法道具**。 + +## 系统范围 + +| 负责 | 不负责 | +|---|---| +| 特性的定义与形态枚举 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | +| 生命周期边界:何时出现、何时生效、何时清零 | 卡面排版与界面呈现细则——见 [HUD框架](../表现与支撑/HUD框架.md) | +| 获取途径的口径与约束 | 魔法道具与元进度——归上表两份文档 | +| 与相邻概念的边界 | 格面资源、关卡节点、商店本身的规则——归各自所属文档 | + +## 在核心循环中的位置 + +``` +【关内】排雷推理 → 战斗结算 → 通关 ──┐ + ├─→ 得到一项特性 ─→ 后续关卡带着它继续 + 奖励节点・商店 ┘ +``` + +特性处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是两个获取口,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 + +## 核心规则 + +### 1. 形态枚举(form) + +特性只有一个名词;需要区分时才描述它的形态,不给形态另起名字。 + +| 形态 | 它改的是什么 | 落在哪里 | 事实源 | +|---|---|---|---| +| `rule` 规则改写型 | 改规则本身:在结算管线的某个挂点上给自己加一条规则;同一标签的持有件数达到阈值时发生质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | +| `stat` 属性加成型 | 改数值:把自己某项属性抬高,直接改写角色的基础数字 | 冒险加算区(攻击 / 生命上限 / 护甲 / 行动点四轴)、钱包与即时恢复 | `adventure.tres`(配额与值) | + +两种形态的共性:都在当局获得、当局携带、当局失效;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 + +**为什么是同一个对象的两种枚举而不是两个东西**:它们共用一份获取流程、一份持有集、一份生命周期。分成两个名字只会让读者以为有两套系统,而实际上代码里只有一个持有集。 + +### 2. 作用对象与范围 + +- **作用对象**:角色本人,以及角色参与的结算过程。特性不改敌人、不改棋盘生成、不改关卡内容。 +- **时间范围**:整局冒险。两种形态都自获得起对本局剩余所有关卡生效;属性加成型写入加算区后,关与关之间不清零。 +- **归属范围**:不进账号永久进度,不带到下一次冒险。 + +### 3. 生命周期 + +``` +未获得 → 进入候选池 → 作为候选出现 → 选定 → 持有 → 生效 →(冒险收束)清零 + ↑ ↓ + 断点恢复 持有集持续累积 +``` + +| 阶段 | 说明 | +|---|---| +| 候选池构建 | 冒险开局时一次建成。两种形态的候选**现同处一个令牌池**:属性加成型按配额铺开,规则改写型按定义表的有效行铺开。 | +| 出现 | 玩家在两个获取口之一看到若干候选(三选一的形式),看不到整个池。 | +| 选定 | 玩家选定一项后,它从池中剔除,此后任何获取口都不会再见。 | +| 持有与生效 | 进入持有集后立即生效,跨关携带。规则改写型按同一标签的持有项数决定处于哪一档。 | +| 清零 | 冒险以任一结局收束时整集清空;下次开局重建。 | +| 断点恢复 | 进行中的冒险把持有集与剩余候选池一并写入断点,续玩后恢复到同一状态(断点里的键名沿用历史形态,不随本次改名变动)。 | + +### 4. 获取途径 + +| 获取口 | 说明 | 目标渠道分工(尚未实施) | +|---|---|---| +| 战场奖励 | 每关通关给一次三选一(最终关不给——提升只对后续关卡有意义,最终关没有后续);关卡节点图上的奖励节点同样给一次三选一,与之共用同一个候选池。 | 规则改写型今后主要从这里出 | +| 商店 | 花局内金币购买在架的特性;同一种至多一张,买走即从在架令牌移除。 | 属性加成型今后主要从这里出,口径是**训练** | + +**关于商店口径的说明**:商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励那一侧完全相同:都是往同一个持有集里加一项特性。 + +**在册事项**:现行两个获取口完全共用同一个候选池,两种形态出现条件一样、只有出现概率不同。用户已决定把两种形态按渠道分开(规则改写型走战场奖励,属性加成型走商店训练),四个备选方案与执行批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。**本文件 4 节表格里的渠道分工写的是目标状态,尚未实施。** + +### 5. 关联与边界 + +| 相邻概念 | 关系(只写关系,不写对方的规则) | +|---|---| +| [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对:**魔法道具是拿在手里的物品,特性是角色自身的变化**。两者互不相通——特性永不进同调位,魔法道具永不进当局随机渠道。魔法道具跨冒险保留,特性当局清零。 | +| [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,特性管当局构筑,两层互不代替。 | +| [战斗结算](../战斗循环/战斗结算.md) | 规则改写型的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | +| [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | +| [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集。 | +| [关卡节点地图](关卡节点地图.md)、商店 | 是获取口的载体,不是特性的属性。 | +| [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | + +## 依赖与输出 + +| 类型 | 内容 | +|---|---| +| 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包 | +| 依赖(数据) | `relics.tres`(规则改写型定义行)、`adventure.tres`(属性加成型配额与值)、`shop.tres`(货架取舍) | +| 输出(对外) | 持有集、生效中的形态投影、剩余候选池、档位求值结果 | +| 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | + +## P0 最小闭环 / P1・P2 后置 + +- **P0(已实现)**:两种形态可定义 → 进入候选池 → 在两个获取口之一被选中 → 当局生效 → 收束清零。 +- **P1 后置**:两种形态按渠道分开(见第 4 节的在册事项);两项合成高阶项;同一标签收集到四项以上的后期表达。 +- **P2 后置**:商店里的攻击类型转换服务;喂雷流派是否保留(尚未拍板,登记在 [06-待办清单](../../06-待办清单.md))。 + +## 调参表 + +数值所有权归 [难度曲线与Boss](难度曲线与Boss.md);本文件只列参数与取值域,**不列现行值**。 + +| 参数 | 取值域 | 事实源 | +|---|---|---| +| 规则改写型定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | +| 属性加成型种类 | 封闭词表:攻击 / 生命上限 / 护甲 / 金币 / 行动点 / 恢复 | `game/data/schemas/adventure_table.gd` | +| 属性加成型稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | +| 各形态种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | +| 一次三选一的候选展示数 | [1,6] | 同上 | + +## 验收标准 + +1. 两种形态走同一套获取流程,代码里只有一个表示"已持有特性"的集合。 +2. 一次冒险内获得的特性在之后任何关卡都生效;开新冒险后持有集为空。 +3. 一项被选定的特性不再出现在任何后续获取口。 +4. 每个标签至少有一项挂在排雷侧的结算触发点上(防止规则改写型沦为纯战斗数值)。 +5. 玩家可见的文案不出现形态名与内部分类标签——只写效果,归类让玩家自己推断。 +6. 文档与代码里提到它时只有"特性"这一个名字;需要区分形态时用"规则改写型/属性加成型"描述,不得另造称呼。 + +## 待办 + +全部待办单点登记于 [06-待办清单](../../06-待办清单.md)(BD 分层条目、呈现三处待改条目),本节不复制。 + +## 版本历史 + +| 版本 | 日期 | 变更 | +|---|---|---| +| v1.0 | 2026-10-05 | 首次为本概念立定义文档。此前它按内部分类被叫成三个名字,各处互相冲突的定义以本文档为准:统一名词"特性",把原先分开称呼的两类收敛为形态枚举;把性质定为「角色自身得到提升」而非「获得物品」,以此与魔法道具(持有物)划清。 | diff --git a/design/gdd/systems/表现与支撑/HUD框架.md b/design/gdd/systems/表现与支撑/HUD框架.md index bdec3ab5..492afa9e 100644 --- a/design/gdd/systems/表现与支撑/HUD框架.md +++ b/design/gdd/systems/表现与支撑/HUD框架.md @@ -216,7 +216,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 已开格的奖励身份常读;未开格类型微光(英雄周围 8 格内的未开格显示资源类型——概念定义见本篇「未开格类型微光」节) | | [魔法道具](../排雷循环/魔法道具.md) | 库存条常读;使用交互与目标拾取;板级叠加层信息呈现 | | [棋盘生成](../排雷循环/棋盘生成.md) | 零合法板的诚实告知(数据面经战斗结算上抛,本系统只管提示形态) | -| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=流派件段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | +| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=特性段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | ## P0 最小闭环 @@ -300,6 +300,6 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | v0.10 | 2026-09-26 | 渲染技术注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗舞台 Node2D 化——BattleStageView 内部由 PanelContainer+Control 站桩改为 Control 壳 + SubViewportContainer + SubViewport + Node2D 世界(StageWorld/StandeeBody),类名/setter 面/公共方法契约不变、调用点零改造;状态图标行与悬停 tooltip 保留 Control 载体挂壳层(伴随件);C6 字体注入挂点复用(set_world_font);三区布局与性能预算(同屏 draw calls < 200)不变;占位表现等价平移(时序常量逐字对照——等价证明=git 提交 7f24b64,文件已按生命周期条款退役) | | v0.11 | 2026-09-27 | 关卡画面 UX spec 建档([level-map](../../ux/level-map.md),关卡画面 UX 批——用户拍板立项):义务清单「关卡节点地图」行挂屏级 spec 指针;屏级权威行与不负责表改按屏分治口径(战斗屏 = battle.md / 关卡画面 = level-map.md)。文档面零机制改动 | | v0.12 | 2026-09-30 | **未开格类型微光概念收口批(用户裁决落位)**:新增「未开格类型微光」节=全项目唯一正主定义(五要素——作用对象=英雄周围 8 格内的未开格〔与可挖域同圈〕/信息内容=只类型不泄雷安/生命周期=入圈亮出圈灭开格灭/关联边界/实装状态=契约定稿〔样张 v2〕游戏内待实施批);核心规则章六节改七节;呈现义务来源清单「地图战斗资源」行补微光指路;验收标准补微光呈现线。背景:该概念此前只活在 06 登记与 art-bible 复述,「常显/全部未开格」无范围表述酿成理解事故(2026-09-30 用户纠正口径),本批落位正主、他文只许指路 | -| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=流派件段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | +| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=特性段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | | v0.14 | 2026-10-03 | **视野迷雾实施批落籍注记(迭代 11 第④批)**:迷雾节补「实施状态」注记(四裁决逐条对账:纯呈现两态逐位一致/暗淡记忆态灰显可读/LIGHT_RADIUS=8 参数化〔提灯 +2 插值位预留未接〕/类型微光仍贴身 8 邻格);实装状态行「待实施批」改「已实装」;验收标准迷雾行去「待实施批落地后验收」括注转正式验收。机制定义零改动(定义一句话/作用范围/生命周期/关联边界/配套拍板全段原样);黑暗区域渲染规格落 art-bible §6.5(v3.5) | | v0.13 | 2026-09-30 | **视野迷雾概念落位批(用户拍板立项)**:新增「视野迷雾」节=正主定义(菱形灯光区+黑暗边界;区外已开格=暗淡记忆态灰显可读、区外未开格=全黑;灯光半径起步=微光环 8 格同圈;纯呈现层,与已退役雾格无关);验收标准补迷雾线;配套拍板随节登记(魔法提灯灯甲外扩 +2 格、类型微光不随视野扩、初始展开收窄后置 Alpha 差异化批)。实施待主线编卡 | diff --git a/design/gdd/ux/battle.md b/design/gdd/ux/battle.md index 8d5e0128..9cdfd734 100644 --- a/design/gdd/ux/battle.md +++ b/design/gdd/ux/battle.md @@ -105,7 +105,7 @@ - 攻击值 + 修正来源角标(战斗在消费、且站桩上无展示) - 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性) - 魔法道具槽(**已实装**:四槽两步交互,详见 [node-reward.md](node-reward.md)——随身战斗用道具的唯一展示面) - - 本关强化列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) + - 特性列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) - **D 区扫雷图 · AP 条** - AP 点阵 + 停手按钮(现行) - **RAP 读数(点阵+数字)**——自 C 区迁入,置于弃图刷新按钮旁(2026-09-26 拍板:RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮) @@ -120,7 +120,7 @@ | 区 | 位置与尺寸 | 内容 | |---|---|---| | **B 战斗画面** | 全宽 × 252px | 主角站桩立绘(左)+ 兑现演出区(中)+ 敌人站桩立绘 ×1–3(右)——**全站桩形态(2026-09-20 用户拍板,敌人卡形态待办裁决收口):主角与敌人均为无框立绘+底座,零卡片**;主角与敌人站桩 = **HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板)**;底部结算明细带(24px 摘要 / 结算期 84px 实时流);顶部中央轮次·阶段指示 | -| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;魔法道具槽(预留)、本关强化列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | +| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;魔法道具槽(预留)、特性列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | | **D 扫雷图** | 中下 ~1036px × 548px(原右下面板删除后横向加宽,吸收其宽度) | 顶部 AP 条(44px:左——AP 点阵 + 停手按钮;中——RAP 点阵+数字〔自 C 区迁入,贴弃图刷新按钮,2026-09-26 拍板〕;右——图例按钮 + 弃图刷新按钮〔雷图右上角,2026-09-12 拍板〕);棋盘主体(居中,格 36–45px 见方);toast 槽(上缘内侧) | > 布局为 B/C/D 三区——关卡进度条不在战斗屏(节点链进度常驻关卡画面,见 Navigation Position;字母不重编沿用 B/C/D)。 @@ -147,7 +147,7 @@ | B | 结算明细回看 | 模态 overlay | 完整流水逐行(现行 9 类行协议;未生效类行聚合计数) | 关闭 | battle_log_view.gd 改造 | | C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;原「HP/攻击/RAP 显示」——HP 与 RAP 随信息归属拍板迁出本组件) | 只读 | HUDView 拆分 | | C | 魔法道具槽(已实装:四槽两步交互,详见 [node-reward.md](node-reward.md)) | 图标槽 ×4 | 随身战斗用道具的唯一展示面;库存已随迭代 7 落地(C 区四槽+关卡域库存),清库反馈呈现待批 | 悬停 tooltip(道具语义) | 新建(随魔法道具批,已落地) | -| C | 本关强化列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | +| C | 特性列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | | D | AP 条 | 点阵 + 按钮组 | 本轮 AP 点阵、停手按钮(左)、**RAP 点阵+数字(自 C 区迁入 2026-09-26——RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮;RAP 清零可见反馈〔行动经济〕载体随迁)**、弃图刷新按钮(右端·雷图右上角;RAP−8 · 本轮剩 N 次——上限 2 次已随行动经济 2026-09-12 修订生效) | 点击提交意图 | HUDView 拆分 | | D | BoardView | 网格 | 棋盘全部格态 + 小人 + 旗 + 变异纹带 + 奖励身份 icon(已开格;绘制优先级 数字>小人>旗>奖励徽章>变异纹带>底色——徽章不进数字区,样张验收项) | 左/右键意图提交 | ✅ board_view.gd 迁移 | | D | 悬停预承诺光标 | 光标态 | 移动/挖/旗三语义光标 + 目标格边框高亮 | 自动 | 新建(排雷玩法×6③) | @@ -204,7 +204,7 @@ │ │ 魔法道具槽(预留) │ │ │ │AP不足·剩0点 │ 12 12 1 ░ 2 ▓▓ ▓▓ │ │ │ │ ◇ ◇ ◇ ◇ │ │ │ └──────────────────┘ 12 █ 1 1 2 ▓▓ ▓▓ │ │ │ ├──────────────────┤ │ │ 1 2 2 🚩 █ 2 1 1 ▓▓ 👫 1 1 ░ │ │ -│ │ 本关强化(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ +│ │ 特性列表(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ │ │ 锻造+2攻 │ │ │ ▓▓ 1 1 ░ ░ 2 ▓▓ │ │ │ │ (空态=隐藏) │ │ │ ( █=可挖域微光 👫=小人) │ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────┘ │ @@ -440,7 +440,7 @@ | 2026-09-23 | 实现注记(棋盘 Node2D 迁移批 Phase A,代码实装同批;上位裁决 ADR-0006):棋盘渲染 Node2D 化(BoardView = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界,信号/click_cell/_cells 契约保持,新增 push_input 端到端输入探针);格尺寸公式锚点不变(set_cell_area = floor((min(宽,高) − 预留 − (N−1)×格间距) / N) 单点可调),布局与交互语义零改动 | | 2026-09-26 | 实现注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗画面 Node2D 化(BattleStageView = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界,站桩本体 StandeeBody 世界精灵;set_enemies/clear_enemies/on_step_row_fx/gray_all_enemies 等 setter 面签名保持,弹道落点锚点=壳层口径 world_to_shell 单点);状态图标行与悬停 tooltip 保留 Control 载体挂壳层;三区布局尺寸零改动(B 区外框 252px 逐位) | | 2026-09-26 | **封印紫批**(用户拍板):插旗呈现色 旗朱 #C63D22 → 封印紫 #7C3AA8(色相 ≈267°,避开禁入带)——旗字形/已承诺封印框/旗化暴击弹道随批换色;拒绝边框闪语义归危险红;Boss 节点描边归紫赤本色。修订记录历史行旗朱字样系当时口径留痕不改 | -| 2026-09-26 | **战斗屏信息归属批(用户 2026-09-26 三轮纠偏后拍板;代码实装另批——hero_info_panel_view.gd / hud_presenter.gd 改造 + 探针断言迁移,登记待办)**:立两条信息归属原则并全屏贯行——①循环口径原则(战斗屏只展小循环内被消费、影响当下决策的数据;中/大循环资源不得入侵)②单一展示面原则(同一信息全屏唯一展示面;单位本体已承载的信息数据框不重复;资源数字贴唯一消费口)。随拍板落地:① B 区站桩 = HP 与状态效果唯一展示面——C 区 HP 条/HP 文字/立绘占位/状态效果槽×4 退役(重复展示;证据链 = hud_presenter.gd 同一 s.hero.hp/s.hero_effects 双投喂 B/C 两区);② RAP 读数(点阵+数字)迁 D 区 AP 条、置弃图刷新按钮旁(RAP 唯一消费口 = 弃图刷新——就近原则);③ C 区状态槽悬停 tooltip 职责并入 B 区站桩状态小图标;④ GP(中循环)/钥石(大循环)迁出战斗屏,去向挂 OQ14;⑤ C 区改「攻击数据框 + 魔法道具槽(预留)+ 本关强化列表(预留)」——预留区来自魔法道具与关卡内属性提升的既有立项;⑥ 空态/清零反馈/悬停交互/AC/§13 义务表载体同步改写。**批内遗留两项待拍板(OQ13/14)**:护甲 AC 是否补入 C 区数据框;GP/钥石去向 | +| 2026-09-26 | **战斗屏信息归属批(用户 2026-09-26 三轮纠偏后拍板;代码实装另批——hero_info_panel_view.gd / hud_presenter.gd 改造 + 探针断言迁移,登记待办)**:立两条信息归属原则并全屏贯行——①循环口径原则(战斗屏只展小循环内被消费、影响当下决策的数据;中/大循环资源不得入侵)②单一展示面原则(同一信息全屏唯一展示面;单位本体已承载的信息数据框不重复;资源数字贴唯一消费口)。随拍板落地:① B 区站桩 = HP 与状态效果唯一展示面——C 区 HP 条/HP 文字/立绘占位/状态效果槽×4 退役(重复展示;证据链 = hud_presenter.gd 同一 s.hero.hp/s.hero_effects 双投喂 B/C 两区);② RAP 读数(点阵+数字)迁 D 区 AP 条、置弃图刷新按钮旁(RAP 唯一消费口 = 弃图刷新——就近原则);③ C 区状态槽悬停 tooltip 职责并入 B 区站桩状态小图标;④ GP(中循环)/钥石(大循环)迁出战斗屏,去向挂 OQ14;⑤ C 区改「攻击数据框 + 魔法道具槽(预留)+ 特性列表(预留)」——预留区来自魔法道具与关卡内属性提升的既有立项;⑥ 空态/清零反馈/悬停交互/AC/§13 义务表载体同步改写。**批内遗留两项待拍板(OQ13/14)**:护甲 AC 是否补入 C 区数据框;GP/钥石去向 | | 2026-09-26 | **信息归属二轮拍板(用户 2026-09-26,OQ13/14 收口)**:① 我方护甲 AC 补入 C 区攻击数据框(唯一展示面——布局表/组件清单/线框图同步);② GP/钥石去向定案:GP = 关卡画面常驻总量 + 战斗结算画面总量+增量,钥石 = 结算画面 + 营地(具体呈现归对应 UX spec 批次);③ 敌方 AC 展示面挂起——用户口径「敌方 AC 无任何展示」与现行代码冲突(standee_view.gd 底库名字行渲染「名字·护甲·AC%d」,系敌人技能池批克制对策可读性义务),证据链已呈报待终裁,本 spec 暂不改敌人站桩行 | | 2026-09-26 | **敌方 AC 展示终裁收口(用户 2026-09-26 终裁)**:敌方 AC 数值全屏退役(任何区不直接展示)、护甲类型改图标方式展示(形状+色相双通道,终稿图标资产归美术批)、敌人站桩底座下名字行退回纯名字+护甲类型图标;旧「克制对策可读性义务」降级承载——类型保留、数值退役。终裁理由(用户口径):HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性。同步改写:信息归属树敌人站桩行、Component Inventory 敌人站桩立绘行、OQ13。**代码实装说明**:`standee_view.gd` 改造(站桩名字行去 AC 数值 + 护甲类型图标化)由并行代码批执行,本批只做文档同步 | | 2026-09-27 | **UX 文档欠账处置批(用户四项拍板:player-journey 不建 / accessibility 不另立改指 HUD框架 / node-reward 改挂魔法道具内容重定批 / level-clear 建档 design/gdd/ux/level-clear.md)**:① 删 §Player Context ⚠️ player-journey 未建注记,OQ1 改收口注记;② §Accessibility 头、§Transitions 减动效行、OQ2 改指 HUD框架「可访问性基线」节 + 设置与本地化待设计清单 #1(tools/doc_link_known.txt 欠账行随之清空);③ 导航残留修正——§Navigation Position 图胜利分支、§Entry/Exit 离开表、§Interaction Map 胜利 overlay 行改按现行代码实态(胜利后返回关卡画面选路;节点覆盖层 = 关卡画面域、落地奖励/恢复节点时开出;胜利/失败 overlay 组件锚 battle_end_overlay.gd)——原「胜利 → 节点奖励/恢复覆盖层」系停点前移批前残留;④ OQ3 过期陈述更正(interaction-patterns.md 2026-09-12 已建成)、OQ8 改收口注记。本批只动文档面,代码零改动 | diff --git a/design/gdd/ux/level-map.md b/design/gdd/ux/level-map.md index 7bc902e0..972bf000 100644 --- a/design/gdd/ux/level-map.md +++ b/design/gdd/ux/level-map.md @@ -91,7 +91,7 @@ **布局决策 3 —— 放弃冒险二次确认(2026-09-27 拍板)**:放弃 = 整局冒险终结,不可逆(pattern 7 破坏性确认)。首击转入确认态(按钮文案变「再点一次确认放弃——不可逆」,危险红边框脉冲约 3 秒,超时回落),二击才提交。代价语义(已获大奖励保留、同失败结算)常驻按钮文案。 -**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「本关强化列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 +**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「特性列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 ### ASCII Wireframe diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 30eddaf3..385a1614 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -574,6 +574,20 @@ entities: mvp_content: L1 全行(切片转正——7 节点链〔单链特例,合法图形态〕、rest_heal_pct=30);L2 全行已落地(2026-09-17 分支节点图批——首张分支图:9 节点〔入口 0 → 中间三层 2/3/2 → Boss 8〕、真实岔路 4 处、奖励点+恢复点各 1、战斗节点 6 + Boss;行值 provisional 归 难度曲线与Boss v0.7;首页直入口已退役〔2026-09-23 用户拍板〕);**L3 全行已落地(2026-09-20 第三关内容批——「第三层 · 灰矮人矿城」:九节点图复用 L2 同模板〔6 战 + Boss + 奖励 + 恢复、真实岔路 4 处〕,行值全 provisional 归 难度曲线与Boss;测试直入口已退役〔2026-09-23〕)**;2026-09-20 GP+商店房批 rewiring:L2/L3 图版 Boss 重编号 8→9、各新增 (8, shop, next[9]) 商店房节点(Boss 前一位必经位),L1 零改动,图合法性六检零新增——必经位由冒烟断言承载;**2026-09-21 冒险结构实现批:三关正式序列生效**(首页「开始冒险」= L1→L2→L3 连探,AdventureRunner 编排——大奖励/生命账本/GP 冒险账本/主种子归冒险结构层,冒烟断言在案)** referenced_by: [冒险结构, 关卡节点地图, 难度曲线与Boss, 棋盘生成, 数据配置] + - name: feature + type: concept + owner: design/gdd/systems/冒险循环/特性.md + attributes: + definition: 一次冒险之内角色自身得到的提升。它不是持有物——带在自己身上的是特性,拿在手里的是魔法道具;两者由此分开 + form: 封闭枚举 {rule, stat}。rule 规则改写型——在结算管线的某个挂点上给自己加一条规则,同标签持有项数达阈值时质变;stat 属性加成型——抬自己的某项属性数值,写入冒险加算区。两者同属一个对象、共用一份持有集与一份生命周期,是形态枚举而非两个系统 + scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);时间范围 = 整局冒险,跨关携带、关间不清零;归属范围 = 不进账号永久进度,不带到下一次冒险 + lifecycle: 候选池构建(冒险开局一次)→ 在两个获取口之一出现(三选一形式)→ 选定(自池中剔除不再复现)→ 持有生效(跨关携带)→ 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 + acquisition: 两个获取口——战场奖励(每关通关一次,最终关不给;关卡节点图奖励节点共用同一候选池)与商店(花局内金币,口径为「训练」)。**现行两口共用同一候选池**,两形态按渠道分离已定尚未实施,登记于 06-待办清单 BD 分层条目 + boundary: 特性永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 + data_sources: relics.tres(rule 形态逐项定义)/ adventure.tres(stat 形态配额与值)/ shop.tres(货架取舍) + naming_note: 2026-10-05 命名统一——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现统一为「特性」,需要区分时以形态修饰语描述,不另造称呼 + referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] + - name: adventure_table type: schema_data owner: design/gdd/systems/冒险循环/冒险结构.md @@ -582,11 +596,12 @@ entities: fields: | 退役两字段(迭代 10 奖励重构批,2026-09-30 用户拍板):level_clear_hp_bonus(「血回满+上限提升」件随大奖励三件套退役——回血改 clear_heal_pct 部分回血、上限提升改三选一件值列)、keystone_per_level(钥石退役出大奖励改 Boss/精英击杀掉落)。 clear_heal_pct: int [0,100](knob 默认 20——非末关通关部分回血回复生效上限的百分比,封顶上限不回满、满血回 0 合法;难度上压方向,带重扫义务归 难度曲线与Boss) - bonus_attack_flat / bonus_max_hp_flat / bonus_armor_flat: int [0,999](三选一属性件兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) - bonus_gp_amount: int [0,999](GP 袋件定额入钱包);bonus_ap_flat: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](魔法道具件授予件数) + **2026-10-05 命名统一批**:本表的属性加成型特性字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 特性 条目。 + feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性加成型特性兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) + feature_value_gp_common: int [0,999](GP 袋件定额入钱包);feature_value_ap_rarest: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](魔法道具件授予件数) ~~bonus_weight_*(E-S 加权洗牌权重族)~~ / ~~bonus_cap_*(种类次数上限族)~~:**v2.2 令牌池换代退役(迭代 12 TP0——2026-10-03 追认 b 实施批;洗牌改令牌 Fisher-Yates、池消耗即上限)** - token_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) - bonus_attack_flat_large / bonus_max_hp_flat_large / bonus_armor_flat_large / bonus_gp_amount_large: int [0,999](稀有档大数值对——+2/+10/+2/50);bonus_heal_flat: int [0,999](恢复件 +6 当即回血——新入池种类 rare 档);MC 策略 316-f(autoplay 1 级最稀有/2 级最左)随批落地 + feature_quota_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) + feature_value_attack_rare / feature_value_max_hp_rare / feature_value_armor_rare / feature_value_gp_rare: int [0,999](稀有档大数值对——+2/+10/+2/50);feature_value_heal_rare: int [0,999](恢复件 +6 当即回血——新入池种类 rare 档);MC 策略 316-f(autoplay 1 级最稀有/2 级最左)随批落地 transitional_sync_slots: int [0,9](同调位过渡读数源,默认 1——道具持有上限;正主 = attunement_growth.tres 里程碑谓词表,同调实施批落地后切换读数源) mvp_content: 单行全局默认值即 MVP 行(provisional 归 曲线调参批——迭代 10 扩列批注) extension_reserve: 大奖励形态扩列位已消费(迭代 10 奖励重构批落地三选一/攻击型——本键使命完成退役;冒险结构 OQ2 收口) diff --git a/game/core/adventure_runner.gd b/game/core/adventure_runner.gd index cb7e866d..90980f74 100644 --- a/game/core/adventure_runner.gd +++ b/game/core/adventure_runner.gd @@ -80,8 +80,8 @@ var _save_manager = null # 断点承载注入(迭代 8 卡① var _resume_bp := {} # 续玩快照暂存(resume_adventure → _start_current_level 单跳传递) # ---- 三选一停点态(迭代 10 奖励重构批)---- var _bonus_taken := {} # 件获取次数计数(kind 维度派生账本——断点附随件与摘要读数承载;池库存正主=_bonus_deck) -var _bonus_deck: Array = [] # 令牌池(TP0 v2.2——持久多重集,元素 {"kind","tier"};洗牌抽候选/选中踢池未选回池/池耗即枯竭;商店货架同库共账;迭代 12 T1 起机制件带=relic 令牌随表追加) -var _relics: Array[String] = [] # 流派件持有集(迭代 12 T1——局内随机渠道获得、冒险级跨关携带、收束清零;🔴 层级纪律承载面:不入同调位不入局外树) +var _bonus_deck: Array = [] # 令牌池(TP0 v2.2——持久多重集,元素 {"kind","tier"};洗牌抽候选/选中踢池未选回池/池耗即枯竭;商店货架同库共账;迭代 12 T1 起规则改写型特性带=relic 令牌随表追加) +var _relics: Array[String] = [] # 特性持有集(迭代 12 T1——局内随机渠道获得、冒险级跨关携带、收束清零;🔴 层级纪律承载面:不入同调位不入局外树) var _tree_rules: Array = [] # 树 rule 键集(迭代 12 T10——Fork 激活侧 effects 透传;下传 enc.tree_rules 消费面) var _bonus_pending := {} # 停点态:{"candidates": Array, "payload": Dictionary, "chosen"/"incoming": 替换在途}——空 = 无停点 var _bonus_result := {} # 已兑付待推进态(bonus_resolved 载荷副本——中断续玩不重兑付) @@ -128,8 +128,8 @@ func start_adventure(seed_val: int, params: Dictionary = {}) -> bool: _attunement = params.get("attunement", []) if params.get("attunement", []) is Array else [] # additive(迭代 11 第①批 T5) _attune_refresh_y = maxi(0, int(params.get("attune_refresh_y", 0))) # additive(迭代 11 第①批 T5b——Y 冒险周期池) _seed_attune_charges() # 迭代 11 第①批 T6——冒险开始充能账本按装备主动件重置(每冒险充能语义) - # 流派件开局注入(迭代 12 T7——MC 成型画像载体:params.relics_seed 非空=开局持有集〔七流派 - # 各 2 件档一成型——测量面专用;真实局流派件只走局内随机渠道,红线②层级纪律不破〕) + # 特性开局注入(迭代 12 T7——MC 成型画像载体:params.relics_seed 非空=开局持有集〔七流派 + # 各 2 件档一成型——测量面专用;真实局规则改写型特性只走局内随机渠道,红线②层级纪律不破〕) var relic_seed: Array = params.get("relics_seed", []) if params.get("relics_seed", []) is Array else [] _tree_rules = params.get("tree_rules", []) if params.get("tree_rules", []) is Array else [] # 迭代 12 T10——A/B 面 rule 键集 if not relic_seed.is_empty(): @@ -190,7 +190,7 @@ func resume_adventure(bp: Dictionary, params: Dictionary = {}) -> bool: rtok["relic_id"] = String(tok.get("relic_id", "")) restored.append(rtok) _bonus_deck = restored - # 流派件持有集还原(迭代 12 T1——缺键 = 旧版断点防御空集) + # 特性持有集还原(迭代 12 T1——缺键 = 旧版断点防御空集) _relics = [] for r in (bp.get("relics", []) as Array): _relics.append(String(r)) @@ -267,14 +267,14 @@ func _reset_bonus_state() -> void: _node_bonus_pending = {} -# 令牌池构建(TP0 v2.2——按表 kind×tier 配额展开为持久多重集;构建序确定 = BONUS_IDS×TIERS 逐层, -# 随机性只发生在洗牌消费 reward_pick 封闭流的时刻。迭代 12 T1:机制件带=relic 活行每件 1 张追加 +# 令牌池构建(TP0 v2.2——按表 kind×tier 配额展开为持久多重集;构建序确定 = FEATURE_KINDS×TIERS 逐层, +# 随机性只发生在洗牌消费 reward_pick 封闭流的时刻。迭代 12 T1:规则改写型特性带=relic 活行每件 1 张追加 # (rarity common/rare→稀有令牌档、rarest→罕见令牌档——relic 永不入普通档;空表=零追加零扰动)) func _build_bonus_deck() -> Array: var deck: Array = [] - for kind in db.adventure.BONUS_IDS: + for kind in db.adventure.FEATURE_KINDS: for tier in db.adventure.TIERS: - for i in int(db.adventure.bonus_token_count(String(kind), String(tier))): + for i in int(db.adventure.feature_quota(String(kind), String(tier))): deck.append({"kind": String(kind), "tier": String(tier)}) for row in db.relic_rows(): var rtier := "rarest" if String(row.get("rarity", "")) == "rarest" else "rare" @@ -282,7 +282,7 @@ func _build_bonus_deck() -> Array: return deck -# 令牌唯一身份(抽签去重/兑付匹配共用——数值件=kind,机制件=relic_id;同档多张不同 relic 可同屏) +# 令牌唯一身份(抽签去重/兑付匹配共用——属性加成型特性=kind,规则改写型特性=relic_id;同档多张不同 relic 可同屏) func _token_identity(tok: Dictionary) -> String: if String(tok.get("kind", "")) == "relic": return "relic:" + String(tok.get("relic_id", "")) @@ -337,7 +337,7 @@ func continue_to_next_level() -> bool: # ---- 提升三选一(迭代 10 奖励重构批——选择停点零自动推进、重复兑付被拒;兑付恰一件、未选项零生效)---- -# 候选令牌匹配(身份键恒等——数值件 kind+tier、机制件 relic_id;迭代 12 T1 机制件带) +# 候选令牌匹配(身份键恒等——属性加成型特性 kind+tier、规则改写型特性 relic_id;迭代 12 T1 规则改写型特性带) func _find_token(candidates: Array, kind: String, tier: String, relic_id: String = "") -> Dictionary: for t in candidates: var tok: Dictionary = t as Dictionary @@ -351,7 +351,7 @@ func _find_token(candidates: Array, kind: String, tier: String, relic_id: String # 玩家点选兑付(呈现层/冒烟/自动模拟确认入口):令牌 ∈ 停点候选(身份键精确匹配——relic 件 # 另须 relic_id)。属性件写加算区、AP 件写第四轴、GP 件走钱包「奖励入账」入口、恢复件当即回血、 -# relic 件入流派件持有集(🔴 层级纪律:只走局内随机渠道)、道具件受同调位约束(随池种退役不可达)。 +# relic 件入特性持有集(🔴 层级纪律:只走局内随机渠道)、道具件受同调位约束(随池种退役不可达)。 # 消费=选中令牌踢池(未选回池由「抽签不摘牌、兑付才摘牌」语义承载——TP0 v2.2)。 func pick_bonus(kind: String, tier: String = "", relic_id: String = "") -> bool: if state != "running" or _bonus_pending.is_empty(): @@ -361,7 +361,7 @@ func pick_bonus(kind: String, tier: String = "", relic_id: String = "") -> bool: if _find_token(candidates, kind, tier, relic_id).is_empty(): push_error("[冒险结构] pick_bonus 拒绝——令牌不在候选: %s|%s|%s" % [kind, tier, relic_id]) return false - var value: int = int(db.adventure.bonus_value(kind, tier)) + var value: int = int(db.adventure.feature_value(kind, tier)) var hp_before := int(ledger.get("hero_hp", 0)) if kind == "aux_item": return _pick_aux_item(value) # 道具件分派通关渠道(持有容器 = 跨关携带——与节点渠道分轨;池种退役后不可达) @@ -435,7 +435,7 @@ func _consume_deck_token(kind: String, tier: String, relic_id: String = "") -> b return false -# 流派件持有集读面(效果接线/求值/摘要唯一取数口——副本防外部改写) +# 特性持有集读面(效果接线/求值/摘要唯一取数口——副本防外部改写) func relics_held() -> Array: return _relics.duplicate() @@ -457,10 +457,10 @@ func pool_stock(kind: String) -> int: # 写加算区+账本+摘牌(与奖励三选一真单点——买一件=奖励面少一件的库存语义由同库成立)。 # 未知 kind 拒绝(货架词表封闭的前置防御)。 func _consume_pool_purchase(kind: String, tier: String) -> bool: - if not db.adventure.BONUS_IDS.has(kind): + if not db.adventure.FEATURE_KINDS.has(kind): push_error("[冒险结构] 商店购买消费拒绝——件不在池词表: %s" % kind) return false - return _apply_bonus_pick(kind, tier, int(db.adventure.bonus_value(kind, tier))) + return _apply_bonus_pick(kind, tier, int(db.adventure.feature_value(kind, tier))) # 终局池快照(_settle 清账前调用——_reset_bonus_state 会重置 _bonus_taken,摘要 additive 键 @@ -552,7 +552,7 @@ func apply_node_bonus(kind: String, tier: String = "", relic_id: String = "") -> if _find_token(candidates, kind, tier, relic_id).is_empty(): push_error("[冒险结构] apply_node_bonus 拒绝——令牌不在候选: %s|%s|%s" % [kind, tier, relic_id]) return false - var value: int = int(db.adventure.bonus_value(kind, tier)) + var value: int = int(db.adventure.feature_value(kind, tier)) if kind == "aux_item": return _apply_node_aux(value) # 道具件分派节点渠道(持有容器 = 关卡域库存——与通关渠道分轨;池种退役后不可达) if not _apply_bonus_pick(kind, tier, value, relic_id): @@ -573,7 +573,7 @@ func _apply_node_aux(count: int) -> bool: var records: Array = [] if _runner != null and _runner.aux_inventory != null: records = _runner.aux_inventory.holding_records() - # 迭代 11 第①批 T7——守卫随过渡键退役拆除(BONUS_IDS 已除名 aux_item,本分支不可达; + # 迭代 11 第①批 T7——守卫随过渡键退役拆除(FEATURE_KINDS 已除名 aux_item,本分支不可达; # 替换子交互路由随容量闸一并退役——能力件容量闸正主 = 营地装配面满位禁选) if _runner != null: for iid in picked: @@ -739,7 +739,7 @@ func _draw_bonus_candidates() -> Array: if ident.begins_with("relic:"): cand["relic_id"] = String((tok as Dictionary).get("relic_id", "")) out.append(cand) - if out.size() >= int(db.adventure.bonus_candidate_count): + if out.size() >= int(db.adventure.feature_candidate_count): break return out @@ -828,7 +828,7 @@ func _start_current_level() -> bool: if ok: _runner.set_attunement(_attunement) # 迭代 11 第①批 T5——同调装配下传(enc 携带进战斗结算) _runner.set_attune_charges(attune_charges) # 迭代 11 第①批 T6——充能账本下传(能力件骑库存面注入) - _runner.set_relics(_relics) # 迭代 12 T1——流派件持有集下传(begin_battle enc.relics 求值面) + _runner.set_relics(_relics) # 迭代 12 T1——特性持有集下传(begin_battle enc.relics 求值面) _runner.set_tree_rules(_tree_rules) # 迭代 12 T10——树 rule 键集下传(A/B 面消费) if _shop_mode == "pool": # 商店共享池注入(迭代 11 第②批 T3——库存账本引用+消费 handler 双下传;legacy 模式零注入零扰动) @@ -908,7 +908,7 @@ func _settle(result: String) -> void: "aux_cleared_last": _last_aux_cleared, # additive 扩签(迭代 7 T4——末关清空反馈;非末关走 bonus 载荷) "keystone_drops": _keystone_drops.duplicate(true), # additive 扩签(迭代 10——逐杀掉落明细;settle 入账明细/复盘归因数据源) "pool_stock": _pool_stock_snapshot(), # additive 扩签(迭代 11 第②批 T5——终局池读数:清账前快照,商店买走 vs 奖励领走 vs 枯竭的终局面) - "relics": _relics.duplicate(), # additive 扩签(迭代 12 T1——流派件终局持有集:清账前快照,成型判读取数面) + "relics": _relics.duplicate(), # additive 扩签(迭代 12 T1——特性终局持有集:清账前快照,成型判读取数面) } # 败退明细(数值验证工具取数面 2026-09-22——tools/balance_verifier.py 止步节点分布数据源; # 仅失败局附加,键缺省 = 未败退,既有五件事消费方零感知) @@ -941,7 +941,7 @@ func _forward_choices_presented(candidates: Array) -> void: # ---- 断点快照(迭代 8 卡①——七字段拍板面+恢复必需附随件)---- -# 七字段(拍板面):关卡序号/节点位/生命/本关加成区/GP 钱包/商店已购档/已抽模板; +# 七字段(拍板面):关卡序号/节点位/生命/属性加成区/GP 钱包/商店已购档/已抽模板; # 附随件(续玩正确性必需,随批注记):主种子+取数计数器(rng 快照契约回填——续接原时间线)、 # 钥石累计(大奖励中途值——终局摘要五件事不失真)、已到节点序(呈现层图条重建)、道具库存 # (奖励节点已选件——防静默丢失)。注入缺省 null = 整面静默(模拟/冒烟零扰动)。 @@ -976,7 +976,7 @@ func _snapshot_breakpoint() -> void: "aux_items": aux_items, "bonus_taken": _bonus_taken.duplicate(true), # 三选一件获取次数(kind 维度派生账本——断点附随件与读数承载) "bonus_deck": _bonus_deck.duplicate(true), # 令牌池余库(TP0 v2.2——池消耗即上限,续玩余库逐枚还原) - "relics": _relics.duplicate(), # 流派件持有集(迭代 12 T1——局内随机渠道获得态续玩防丢失) + "relics": _relics.duplicate(), # 特性持有集(迭代 12 T1——局内随机渠道获得态续玩防丢失) "bonus_pending": _bonus_pending.duplicate(true), # 三选一停点态(空 = 无停点——选择停点可中断契约) "bonus_result": _bonus_result.duplicate(true), # 已兑付待推进态(空 = 无——中断续玩不重兑付) "bonus_aux_carry": _bonus_aux_carry.duplicate(true), # 道具件跨关携带(注入前中断防静默丢失) diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index 694d9389..a1bfd0be 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -72,7 +72,7 @@ var attunement: Array = [] # 装备中同调件 item_id 集 var _attune_charges_ref: Dictionary = {} # 充能账本共享引用(迭代 11 第①批 T6——use_aux 消费直改) var _attune_bank := 0 # 掘进蓄能积点(battle 域——每 charge_n 安全格 +1 点) var _attune_safe_seen := 0 # 掘进蓄能 battle 域安全开格计数 -# 流派件运行态(迭代 12 T2——relic 持有集经 enc.relics 注入;求值旗注 damage_controller.relic_flags; +# 特性运行态(迭代 12 T2——relic 持有集经 enc.relics 注入;求值旗注 damage_controller.relic_flags; # 魔矢每战首次计数 battle 域。空集=零扰动) var _relic_first_dig_used := false var _relic_combo := 0 # 矿脉直觉连击计数(battle 域——safe +1/mine 清零) @@ -94,7 +94,7 @@ func _attune_mag(item_id: String) -> int: return int(_attune_row(item_id).get("magnitude", 0)) -# 流派件求值(迭代 12 T2——持有集 × relic_table → damage_controller.relic_flags 注入面): +# 特性求值(迭代 12 T2——持有集 × relic_table → damage_controller.relic_flags 注入面): # rider_flat = Σ rider 件 value(奥术余烬 +1 / 魔能共鸣 +2);magic 档一(≥2 件)rider +1、 # 档二(≥4 件)rider 可暴击;clamp 两件直调键;first_dig_spell 旗(魔能共鸣第二效果——魔矢值 # = 件 effects.value)。空集/空表 = 零旗零扰动。 @@ -247,7 +247,7 @@ func begin_battle(enc: Dictionary) -> bool: _attune_safe_seen = 0 _damage.attune_venom = _attune_mag("venom_edge") if _attune_has("venom_edge") else 0 _reward_economy.luck_bias = _attune_mag("luck_coin") if _attune_has("luck_coin") else 0 - # 流派件运行态注入(迭代 12 T2 魔法流——enc.relics 携带持有集;RelicsEngine 求值后注伤害控制器 + # 特性运行态注入(迭代 12 T2 魔法流——enc.relics 携带持有集;RelicsEngine 求值后注伤害控制器 # relic_flags;空集/空表=零扰动。魔矢每战首次开格计数同步归零) _relic_flags_for((enc.get("relics", []) as Array)) _relic_first_dig_used = false @@ -680,7 +680,7 @@ func set_aux_unlocked(ids: Dictionary) -> void: func _grant_routed(snap: Dictionary, polarity: String, source_class: String, cell: Vector2i, ri: int, highlight: String = "", label_suffix: String = "") -> bool: # 迭代 11 第①批 T7——aux 授予分支随掉落/停点渠道退役拆除(reward 词表第十型 aux_item 保留但零投放: - # 无 aux 行入池、BONUS_IDS 词表已除名);剩余类型走极性字典路由。 + # 无 aux 行入池、FEATURE_KINDS 词表已除名);剩余类型走极性字典路由。 var row: Dictionary = _reward_economy.polarity_row(String(snap.get("cell_type", "")), polarity) if row.is_empty(): _fatal("极性字典缺行: %s %s" % [String(snap.get("cell_type", "")), polarity]) diff --git a/game/core/config_db.gd b/game/core/config_db.gd index 3423f028..7e1ff3ee 100644 --- a/game/core/config_db.gd +++ b/game/core/config_db.gd @@ -27,7 +27,7 @@ const TABLE_MANIFEST := { "aux_items": "aux_items.tres", # 迭代 7 T1 魔法道具内容批(AuxItemTable 六行——定义表 Rule 4 豁免;罗盘 retired/失义件 deferred 标记见 schema 头注) "adventure": "adventure.tres", # 冒险结构实现批 2026-09-21(AdventureTable 建表——大奖励与钥石行值单点) "attunement_growth": "attunement_growth.tres", # 迭代 11 第①批 同调实施批 T1(AttunementGrowthTable 单行全局——同调位里程碑谓词表;单行先例 Rule 4 豁免) - "relics": "relics.tres", # 迭代 12 T1 双层 BD 机制件基建(RelicTable 定义表 Rule 4 豁免——AuxItemTable 先例;空表合法态=主时间线零扰动) + "relics": "relics.tres", # 迭代 12 T1 双层 BD 规则改写型特性基建(RelicTable 定义表 Rule 4 豁免——AuxItemTable 先例;空表合法态=主时间线零扰动) } var action_economy: ActionEconomyTable @@ -154,7 +154,7 @@ func relic_row(relic_id: String) -> Dictionary: return relics.row_by_id(relic_id) if relics != null else {} -# 机制件带令牌构建源(池接线——adventure_runner._build_bonus_deck 消费;行 rarity→投放档映射) +# 规则改写型特性带令牌构建源(池接线——adventure_runner._build_bonus_deck 消费;行 rarity→投放档映射) func relic_rows() -> Array: return relics.rows if relics != null else [] diff --git a/game/core/config_db_cross_validator.gd b/game/core/config_db_cross_validator.gd index ad201114..d784a86c 100644 --- a/game/core/config_db_cross_validator.gd +++ b/game/core/config_db_cross_validator.gd @@ -99,18 +99,18 @@ func cross_validate(loaded: Dictionary, push_diag: Callable) -> void: for e in validate_skill_pool_links(skt, en, loaded.get("status_effects")): push_diag.call("error", e.category, e.message) # ⑥ 商店货架 × 冒险共享池跨表校验(M-4 迭代 11 第②批 T1——次数上限域): - # pool_shelf kind 须命中 adventure.BONUS_IDS 且为有限库存种(cap ∈ [1,99]——gp 无上限种/牌库外种 - # 入货架 = 库存账本无锚,加载致命;gp 袋负交易切边/机制件三轴切边由 ShopTable 词表封闭另拦) + # pool_shelf kind 须命中 adventure.FEATURE_KINDS 且为有限库存种(cap ∈ [1,99]——gp 无上限种/牌库外种 + # 入货架 = 库存账本无锚,加载致命;gp 袋负交易切边/规则改写型特性三轴切边由 ShopTable 词表封闭另拦) var adv = loaded.get("adventure") var shp = loaded.get("shop") if adv != null and shp != null: for row in shp.pool_shelf: var kind: String = String(row.get("kind_id", "")) - if not adv.BONUS_IDS.has(kind): - push_diag.call("error", "shelf_dangling_kind", "ShopTable.pool_shelf kind %s 不在 AdventureTable.BONUS_IDS(共享池牌库外种)" % kind) + if not adv.FEATURE_KINDS.has(kind): + push_diag.call("error", "shelf_dangling_kind", "ShopTable.pool_shelf kind %s 不在 AdventureTable.FEATURE_KINDS(共享池牌库外种)" % kind) continue # TP0 令牌池——货架件须为有限令牌种(配额 >0;种类次数上限退役后库存=剩余令牌数) - var quota := int(adv.bonus_token_count(kind, adv.TIER_COMMON)) + int(adv.bonus_token_count(kind, adv.TIER_RARE)) + int(adv.bonus_token_count(kind, adv.TIER_RAREST)) + var quota := int(adv.feature_quota(kind, adv.TIER_COMMON)) + int(adv.feature_quota(kind, adv.TIER_RARE)) + int(adv.feature_quota(kind, adv.TIER_RAREST)) if quota < 1: push_diag.call("error", "shelf_zero_quota", "ShopTable.pool_shelf kind %s 令牌配额为 0(牌库空种入货架 = 库存无锚)" % kind) diff --git a/game/core/damage_controller.gd b/game/core/damage_controller.gd index f2ec3a43..161dce06 100644 --- a/game/core/damage_controller.gd +++ b/game/core/damage_controller.gd @@ -60,7 +60,7 @@ var _outcomes := {} # ticket_id → "redeemed"/"zero"/"voided"( var _seq := 0 # 流水号 var _halted := false # 主角倒下终止旗(死亡事件置位——flush 余单作废) var _hero_ac_override := -1 # 主角护甲等级合流入参(begin_battle 显式设定——-1 = 表值兜底,口径同战斗编排器) -# 流派件求值旗(迭代 12 T2——begin_battle 编排器经 RelicsEngine 求值后注入;空字典=零扰动。 +# 特性求值旗(迭代 12 T2——begin_battle 编排器经 RelicsEngine 求值后注入;空字典=零扰动。 # rider_flat=英雄侧必中附加值〔奥术余烬族〕/rider_crit=档二 rider 可暴击/first_dig_spell=每战首次 # 开安全格追加魔法矢〔消费在编排器授予段〕/clamp_magic_light·clamp_magic_heavy=克制点直调) var relic_flags: Dictionary = {} @@ -418,7 +418,7 @@ func _counter_delta(attack_type: String, armor: String) -> int: return int(row.get(armor, 0)) -# 克制点直调(迭代 12 T2 魔法流/T4 穿刺流 clamp_modifier 件——克制矩阵查表值后的流派件调整; +# 克制点直调(迭代 12 T2 魔法流/T4 穿刺流 clamp_modifier 件——克制矩阵查表值后的特性调整; # 空旗=0 零扰动):魔网织者=magic vs magic(矩阵罚 −1 → 0/正);湛蓝誓约=magic vs heavy(+1 → +2); # 猎手刺剑=pierce vs light(+1——对轻甲敌穿刺提升,对重甲无增益=正负双修)。hero_attack 与 # board_typed 两消费面同享。 diff --git a/game/core/level_runner.gd b/game/core/level_runner.gd index 286d1630..13b9cec2 100644 --- a/game/core/level_runner.gd +++ b/game/core/level_runner.gd @@ -589,7 +589,7 @@ func set_attunement(ids: Array) -> void: _attunement = ids.duplicate() -# 流派件持有集注入(迭代 12 T1——AdventureRunner._start_current_level 唯一调用方;begin_battle +# 特性持有集注入(迭代 12 T1——AdventureRunner._start_current_level 唯一调用方;begin_battle # enc.relics 携带进战斗求值;**共享引用不复制**——关内奖励节点兑付的 relic 须当关后续战斗生效 # (attune_charges 共享账本同款);空集=零扰动) var _relics: Array = [] @@ -599,7 +599,7 @@ func set_relics(ids: Array) -> void: _relics = ids -# 流派件持有集读面(迭代 12 呈现补齐——HUD C 区流派件段数据源) +# 特性持有集读面(迭代 12 呈现补齐——HUD C 区特性段数据源) func relics_held() -> Array: return _relics.duplicate() @@ -776,7 +776,7 @@ func _shop_draw_shelf() -> void: _shop_shelf.append(tok) if _shop_shelf.size() >= 3: break - # 商店保底(迭代 12 T6——「本关变异交互件必刷」简化口径:货架零流派件时**挤掉最后一张普通卡** + # 商店保底(迭代 12 T6——「本关变异交互件必刷」简化口径:货架零特性时**挤掉最后一张普通卡** # 换吞噬流件〔地形交互件广义映射——按关变异精细绑定归数值批,台账披露待追认〕;占位制货架恒 # ≤3;池内无 devour 令牌=不保底合法态) var has_relic := false @@ -831,10 +831,10 @@ func shop_shelf() -> Array: var tier := String((tok as Dictionary).get("tier", "")) var row: Dictionary = db.shop_pool_row(kind) var display := String(row.get("display_name", kind)) - var value := int(db.adventure.bonus_value(kind, tier)) + var value := int(db.adventure.feature_value(kind, tier)) if row.is_empty() and kind == "relic": var rrow: Dictionary = db.relic_row(String(tok.get("relic_id", ""))) - display = String(rrow.get("display_name", "流派件")) + display = String(rrow.get("display_name", "特性")) value = 0 out.append({ "kind_id": kind, diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index 634f9546..508c5be5 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -13,9 +13,13 @@ class_name AdventureTable extends Resource +## 概念指路:本表的属性加成型特性,与 relics.tres 的规则改写型特性,同属一个对象—— +## 「特性」(一次冒险内角色自身得到的提升)。定义见 design/gdd/systems/冒险循环/特性.md。 +## 两者是它的形态枚举(form = rule / stat),不是两个系统;本表承载 stat 形态的配额与值。 +## (2026-10-05 命名统一:旧称「数值件」→ 属性加成型特性;常量与字段随之前缀 feature_*。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 ## aux_item 池种退役(迭代 11 第①批 T7——同调批出池);heal 恢复件新入池(v2.2 令牌池追认 b)。 -const BONUS_IDS: Array[String] = ["attack", "max_hp", "armor", "gp", "ap", "heal"] +const FEATURE_KINDS: Array[String] = ["attack", "max_hp", "armor", "gp", "ap", "heal"] ## 令牌档位词表(v2.2 三档位——稀有度命名对齐 MC 策略判读序 316-f:1 级最稀有=rarest 优先) const TIERS: Array[String] = ["common", "rare", "rarest"] const TIER_COMMON := "common" @@ -30,62 +34,62 @@ const TIER_QUOTAS := {"common": 70, "rare": 25, "rarest": 3} @export var clear_heal_pct: int = 20 # [0,100] knob——回复生效上限的百分比,封顶上限不回满 # —— 三选一候选数(2026-10-02 修复批 T2 魔法数结构化)—— -@export var bonus_candidate_count: int = 3 # [1,6] knob——令牌洗牌不放回抽取张数上界 +@export var feature_candidate_count: int = 3 # [1,6] knob——令牌洗牌不放回抽取张数上界 # —— 令牌配额(kind × tier 计数;未列组合 = 0——heal 只入稀有/ap 只入罕见,v2.2 档位构成)—— -@export var token_attack_common: int = 18 # [0,99] -@export var token_attack_rare: int = 5 # [0,99] -@export var token_max_hp_common: int = 17 # [0,99] -@export var token_max_hp_rare: int = 5 # [0,99] -@export var token_armor_common: int = 17 # [0,99] -@export var token_armor_rare: int = 5 # [0,99] -@export var token_gp_common: int = 18 # [0,99] -@export var token_gp_rare: int = 5 # [0,99] -@export var token_heal_rare: int = 5 # [0,99]——恢复件(新入池种类,当即回血) -@export var token_ap_rarest: int = 3 # [0,99]——AP 件(罕见档;道具件 2 席位随池种退役收窄) +@export var feature_quota_attack_common: int = 18 # [0,99] +@export var feature_quota_attack_rare: int = 5 # [0,99] +@export var feature_quota_max_hp_common: int = 17 # [0,99] +@export var feature_quota_max_hp_rare: int = 5 # [0,99] +@export var feature_quota_armor_common: int = 17 # [0,99] +@export var feature_quota_armor_rare: int = 5 # [0,99] +@export var feature_quota_gp_common: int = 18 # [0,99] +@export var feature_quota_gp_rare: int = 5 # [0,99] +@export var feature_quota_heal_rare: int = 5 # [0,99]——恢复件(新入池种类,当即回血) +@export var feature_quota_ap_rarest: int = 3 # [0,99]——AP 件(罕见档;道具件 2 席位随池种退役收窄) # —— 令牌件值(小/大数值对——v2.2 追认 b 定稿:20/50、+1/+2、+1/+2、+5/+10、恢复+6、AP+1)—— -@export var bonus_attack_flat: int = 1 # [0,999] knob——小增伤 -@export var bonus_attack_flat_large: int = 2 # [0,999] knob——大增伤 -@export var bonus_max_hp_flat: int = 5 # [0,999] knob——小生命 -@export var bonus_max_hp_flat_large: int = 10 # [0,999] knob——大生命 -@export var bonus_armor_flat: int = 1 # [0,999] knob——小护甲 -@export var bonus_armor_flat_large: int = 2 # [0,999] knob——大护甲 -@export var bonus_gp_amount: int = 20 # [0,999] knob——小GP -@export var bonus_gp_amount_large: int = 50 # [0,999] knob——大GP -@export var bonus_heal_flat: int = 6 # [0,999] knob——恢复(当即回血,封顶生效上限) -@export var bonus_ap_flat: int = 1 # [0,10] knob——AP 件每场战斗首轮行动点基线增量 +@export var feature_value_attack_common: int = 1 # [0,999] knob——小增伤 +@export var feature_value_attack_rare: int = 2 # [0,999] knob——大增伤 +@export var feature_value_max_hp_common: int = 5 # [0,999] knob——小生命 +@export var feature_value_max_hp_rare: int = 10 # [0,999] knob——大生命 +@export var feature_value_armor_common: int = 1 # [0,999] knob——小护甲 +@export var feature_value_armor_rare: int = 2 # [0,999] knob——大护甲 +@export var feature_value_gp_common: int = 20 # [0,999] knob——小GP +@export var feature_value_gp_rare: int = 50 # [0,999] knob——大GP +@export var feature_value_heal_rare: int = 6 # [0,999] knob——恢复(当即回血,封顶生效上限) +@export var feature_value_ap_rarest: int = 1 # [0,10] knob——AP 件每场战斗首轮行动点基线增量 ## 令牌配额读数(未列 kind×tier 组合 = 0——heal 无普通档/ap 无普通稀有档按 v2.2 构成) -func bonus_token_count(kind: String, tier: String) -> int: +func feature_quota(kind: String, tier: String) -> int: match [kind, tier]: - ["attack", TIER_COMMON]: return token_attack_common - ["attack", TIER_RARE]: return token_attack_rare - ["max_hp", TIER_COMMON]: return token_max_hp_common - ["max_hp", TIER_RARE]: return token_max_hp_rare - ["armor", TIER_COMMON]: return token_armor_common - ["armor", TIER_RARE]: return token_armor_rare - ["gp", TIER_COMMON]: return token_gp_common - ["gp", TIER_RARE]: return token_gp_rare - ["heal", TIER_RARE]: return token_heal_rare - ["ap", TIER_RAREST]: return token_ap_rarest + ["attack", TIER_COMMON]: return feature_quota_attack_common + ["attack", TIER_RARE]: return feature_quota_attack_rare + ["max_hp", TIER_COMMON]: return feature_quota_max_hp_common + ["max_hp", TIER_RARE]: return feature_quota_max_hp_rare + ["armor", TIER_COMMON]: return feature_quota_armor_common + ["armor", TIER_RARE]: return feature_quota_armor_rare + ["gp", TIER_COMMON]: return feature_quota_gp_common + ["gp", TIER_RARE]: return feature_quota_gp_rare + ["heal", TIER_RARE]: return feature_quota_heal_rare + ["ap", TIER_RAREST]: return feature_quota_ap_rarest return 0 ## 令牌件值(kind × tier;v2.2 数值对——小/大两档) -func bonus_value(kind: String, tier: String = TIER_COMMON) -> int: +func feature_value(kind: String, tier: String = TIER_COMMON) -> int: match [kind, tier]: - ["attack", TIER_COMMON]: return bonus_attack_flat - ["attack", TIER_RARE]: return bonus_attack_flat_large - ["max_hp", TIER_COMMON]: return bonus_max_hp_flat - ["max_hp", TIER_RARE]: return bonus_max_hp_flat_large - ["armor", TIER_COMMON]: return bonus_armor_flat - ["armor", TIER_RARE]: return bonus_armor_flat_large - ["gp", TIER_COMMON]: return bonus_gp_amount - ["gp", TIER_RARE]: return bonus_gp_amount_large - ["heal", TIER_RARE]: return bonus_heal_flat - ["ap", TIER_RAREST]: return bonus_ap_flat + ["attack", TIER_COMMON]: return feature_value_attack_common + ["attack", TIER_RARE]: return feature_value_attack_rare + ["max_hp", TIER_COMMON]: return feature_value_max_hp_common + ["max_hp", TIER_RARE]: return feature_value_max_hp_rare + ["armor", TIER_COMMON]: return feature_value_armor_common + ["armor", TIER_RARE]: return feature_value_armor_rare + ["gp", TIER_COMMON]: return feature_value_gp_common + ["gp", TIER_RARE]: return feature_value_gp_rare + ["heal", TIER_RARE]: return feature_value_heal_rare + ["ap", TIER_RAREST]: return feature_value_ap_rarest return 0 @@ -101,8 +105,8 @@ func tier_rank(tier: String) -> int: ## 档位令牌总数(货架/校验读面) func tier_total(tier: String) -> int: var total := 0 - for kind in BONUS_IDS: - total += bonus_token_count(kind, tier) + for kind in FEATURE_KINDS: + total += feature_quota(kind, tier) return total @@ -115,18 +119,18 @@ func validate() -> Array: var errs: Array[Dictionary] = [] if clear_heal_pct < 0 or clear_heal_pct > 100: errs.append({"category": "domain", "message": "clear_heal_pct 越域 [0,100]: %d" % clear_heal_pct}) - for kind in BONUS_IDS: + for kind in FEATURE_KINDS: for tier in TIERS: - var c := bonus_token_count(kind, tier) + var c := feature_quota(kind, tier) if c < 0 or c > 99: errs.append({"category": "domain", "message": "token_count(%s,%s) 越域 [0,99]: %d" % [kind, tier, c]}) - var v := bonus_value(kind, tier) + var v := feature_value(kind, tier) if v < 0 or v > 999: - errs.append({"category": "domain", "message": "bonus_value(%s,%s) 越域 [0,999]: %d" % [kind, tier, v]}) + errs.append({"category": "domain", "message": "feature_value(%s,%s) 越域 [0,999]: %d" % [kind, tier, v]}) for tier in TIERS: var total := tier_total(tier) if total != int(TIER_QUOTAS.get(tier, -1)): errs.append({"category": "domain", "message": "档位配额结构失锚(v2.2 追认 b——%s 应=%d 实=%d;改总量须重裁)" % [tier, int(TIER_QUOTAS.get(tier, -1)), total]}) - if bonus_candidate_count < 1 or bonus_candidate_count > 6: - errs.append({"category": "domain", "message": "bonus_candidate_count 越域 [1,6]: %d" % bonus_candidate_count}) + if feature_candidate_count < 1 or feature_candidate_count > 6: + errs.append({"category": "domain", "message": "feature_candidate_count 越域 [1,6]: %d" % feature_candidate_count}) return errs diff --git a/game/data/schemas/meta_tree_table.gd b/game/data/schemas/meta_tree_table.gd index 6560f672..603458c7 100644 --- a/game/data/schemas/meta_tree_table.gd +++ b/game/data/schemas/meta_tree_table.gd @@ -13,8 +13,8 @@ # requires Array[node_id](显式前置——父开子脉内链)/ effects Dictionary(stat 四线 flat: # atk/max_hp/hit/armor_class;rule 键封闭 RULE_KEYS)/ fork_group/fork_side(a/b——同组互斥、 # 营地免费切换)。 -# 🔴 层级纪律(任务书红线 2):局外树只放全局规则件——effects 禁流派标签(relic 流派件永不入树, -# archetype 键出域=加载致命);流派件只走局内随机渠道。 +# 🔴 层级纪律(任务书红线 2):局外树只放全局规则件——effects 禁流派标签(relic 特性永不入树, +# archetype 键出域=加载致命);规则改写型特性只走局内随机渠道。 # A/B 只放规则面(定稿 1.3——全树互斥面 ≤10-15% 首期 4 组);两侧「不同强非强弱」MC 验差 <~3pp(T10)。 # 彩蛋 ≤3(定稿 1.4——点满某脉某排免费觉醒;发现率 <5% 改灰色预告——T10 追认单呈报)。 class_name MetaTreeTable @@ -76,9 +76,9 @@ func validate() -> Array: for ek in fx.keys(): if not (STAT_KEYS.has(String(ek)) or RULE_KEYS.has(String(ek))): errs.append({"category": "zero_flat", "message": "%s effects 键出域(四线/rule 词表封闭): %s" % [nid, String(ek)]}) - # 🔴 层级纪律:局外树禁流派件(archetype 键出域=加载致命) + # 🔴 层级纪律:局外树禁规则改写型特性(archetype 键出域=加载致命) if fx.has("archetype"): - errs.append({"category": "load_bearing", "message": "%s effects 含 archetype(🔴 层级纪律——流派件禁入局外树)" % nid}) + errs.append({"category": "load_bearing", "message": "%s effects 含 archetype(🔴 层级纪律——特性禁入局外树)" % nid}) # A/B 互斥对结构:fork 行必带 fork_group+side;同组恰 a/b 各一 if kind == "fork": var fg := String(row.get("fork_group", "")) diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index f6487ef7..f8881546 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -1,8 +1,13 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、 -# 机制件带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) +# 规则改写型特性带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) -# 数据配置 RelicTable schema(双层BD/机制件 回填 owner 批末落文;行 = Dictionary 键 relic_id,Rule 4 豁免 +# 概念指路:本表的规则改写型特性,与 adventure.tres 的属性加成型特性,同属一个对象—— +# 「特性」(一次冒险内角色自身得到的提升)。定义见 design/gdd/systems/冒险循环/特性.md。 +# 两者是它的形态枚举(form = rule / stat),不是两个系统;本表承载 rule 形态的逐项定义。 +# (2026-10-05 命名统一:旧称「流派件」→ 规则改写型特性;表名与 relic_id 沿用历史命名, +# 与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。) +# 数据配置 RelicTable schema(特性·规则改写型定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 # 定义表——AuxItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 @@ -12,7 +17,7 @@ # 仅校验键域不禁纯增益(专项论证件以 positive_only 批注登记,人工清单呈报)。 # 档位激活(整合定稿 设计工具 1——以撒套装/小骨铭文):同标签计数 ≥2→档一(流派核心规则)/≥4→档二 # (完全体);散件单体保底=每件效果独立生效,档位只做质变(反例 B-2)——引擎纯函数 RelicsEngine。 -# 🔴 层级纪律(任务书红线 2):流派件只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位 +# 🔴 层级纪律(任务书红线 2):规则改写型特性只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位 # (aux_items 表)/局外树(T8 节点表);扫雷触发点铁律:每流派 ≥1 行 hook ∈ MINE_HOOKS(加载校验, # 违反=红线①触碰面)。 class_name RelicTable diff --git a/game/data/schemas/shop_table.gd b/game/data/schemas/shop_table.gd index 0595196c..46b2acb7 100644 --- a/game/data/schemas/shop_table.gd +++ b/game/data/schemas/shop_table.gd @@ -10,7 +10,7 @@ # 现价公式 = base_price + price_level_bonus(关卡) + price_increment × 该商品已购档数(已购档数在 冒险结构)。 # price_level_bonus = 关级定价加值行(level_index 连续从 1 递增)。 # pool_shelf = 共享池货架行(M-4 迭代 11 第②批 T1——任务书 v1.3 P1 共享池/P4 ceil):键 kind_id 词表 -# 封闭 = 四切边后种(SHELF_KINDS:attack/max_hp/armor/ap——GP 袋负交易切边、机制件三轴 doctrine 切边); +# 封闭 = 四切边后种(SHELF_KINDS:attack/max_hp/armor/ap——GP 袋负交易切边、规则改写型特性三轴 doctrine 切边); # 库存=上限即库存(账本在 冒险结构 _bonus_taken 单点共享,行族不记库存);price_a/price_b = 乘法价格 # 因子(公式 ceil(base × b^(关序−1) × A^(本次进店已购次数)),provisional 投值——P5 甲研究拍板后置追认)。 # products 行族 + 加法定价随 legacy 模式(shop=off 对照承载)保留,退役归 off 锚换代批。 diff --git a/game/data/tables/adventure.tres b/game/data/tables/adventure.tres index 6144b9f0..e1ce4c3a 100644 --- a/game/data/tables/adventure.tres +++ b/game/data/tables/adventure.tres @@ -5,27 +5,27 @@ [resource] script = ExtResource("1") clear_heal_pct = 20 -bonus_candidate_count = 3 -token_attack_common = 18 -token_attack_rare = 5 -token_max_hp_common = 17 -token_max_hp_rare = 5 -token_armor_common = 17 -token_armor_rare = 5 -token_gp_common = 18 -token_gp_rare = 5 -token_heal_rare = 5 -token_ap_rarest = 3 -bonus_attack_flat = 1 -bonus_attack_flat_large = 2 -bonus_max_hp_flat = 5 -bonus_max_hp_flat_large = 10 -bonus_armor_flat = 1 -bonus_armor_flat_large = 2 -bonus_gp_amount = 20 -bonus_gp_amount_large = 50 -bonus_heal_flat = 6 -bonus_ap_flat = 1 +feature_candidate_count = 3 +feature_quota_attack_common = 18 +feature_quota_attack_rare = 5 +feature_quota_max_hp_common = 17 +feature_quota_max_hp_rare = 5 +feature_quota_armor_common = 17 +feature_quota_armor_rare = 5 +feature_quota_gp_common = 18 +feature_quota_gp_rare = 5 +feature_quota_heal_rare = 5 +feature_quota_ap_rarest = 3 +feature_value_attack_common = 1 +feature_value_attack_rare = 2 +feature_value_max_hp_common = 5 +feature_value_max_hp_rare = 10 +feature_value_armor_common = 1 +feature_value_armor_rare = 2 +feature_value_gp_common = 20 +feature_value_gp_rare = 50 +feature_value_heal_rare = 6 +feature_value_ap_rarest = 1 ; TP0 令牌池换代(2026-10-03,node-reward v2.2 追认 b 落地):三选一池 = 固定配额令牌池—— ; 普通 70/稀有 25/罕见 3 = 98 张(罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项); diff --git a/game/data/tables/meta_tree.tres b/game/data/tables/meta_tree.tres index 05c03313..b37942f9 100644 --- a/game/data/tables/meta_tree.tres +++ b/game/data/tables/meta_tree.tres @@ -411,5 +411,5 @@ rows = [{ ; ≥ 4×(row−1));锻造脉 3 节点收编 forge_levels(钥石付价=现行迁移零痛);钥石脉=工坊解锁收编 ; (free 迁移点亮)+刷新升级移植;同调脉 socket 3(钥石=规则面首站)+Fork 4 对(A/B 集中同调脉 ; 营地免费切换——effects 首期两 rule 键真实接线余组 stat 面 provisional);彩蛋 1(锻造满排觉醒)。 -; 🔴 层级纪律:局外树只放全局规则件——零 archetype 键(schema 校验强制);流派件只走局内随机渠道。 +; 🔴 层级纪律:局外树只放全局规则件——零 archetype 键(schema 校验强制);规则改写型特性只走局内随机渠道。 ; 数值全 provisional 归 M-4 数值批;A/B 两侧差 <~3pp 验收=T10 MC。 diff --git a/game/data/tables/relics.tres b/game/data/tables/relics.tres index 461c09c5..4dfbeb1d 100644 --- a/game/data/tables/relics.tres +++ b/game/data/tables/relics.tres @@ -260,15 +260,15 @@ rows = [{ } }] -; 双层 BD 实施批(2026-10-04):机制件表——行 = 流派件定义 +; 双层 BD 实施批(2026-10-04):规则改写型特性表——行 = 特性定义 ; (relic_id/display_name/rarity/archetype/hook/effects)。 ; T2 魔法流四件(整合定稿 §2.3 S1):奥术余烬〔普通·rider+1 必中附加〕/魔网织者〔稀有·magic vs ; magic 克制罚修正〕/湛蓝誓约〔稀有·magic vs heavy 克制加成〕/魔能共鸣〔罕见锚点·rider+2+每战首次 ; 开格奥术矢——「每关首次」字面落地为「每战首次」台账披露待追认〕;magic 档一(≥2 件)rider+1 / ; 档二(≥4 件)rider 可暴击——引擎 tiers_for 承载。T3-T6 逐流派续填(flag 4/pierce 4/normal 4/ -; dig 4/charge 3/devour 4——整合定稿 §2.3 七流派件面)。 +; dig 4/charge 3/devour 4——整合定稿 §2.3 七流派的件面)。 ; 稀有度→投放档映射:common/rare → 稀有令牌档、rarest → 罕见令牌档(relic 永不入普通令牌档 -; ——「机制件带挂稀有/罕见档」追认 b 接线口径,普通档 70 张纯数值维持)。 -; 🔴 层级纪律:本表行永不入同调位(aux_items)/局外树(T8 节点表)——流派件只走局内随机渠道。 +; ——「规则改写型特性带挂稀有/罕见档」追认 b 接线口径,普通档 70 张纯数值维持)。 +; 🔴 层级纪律:本表行永不入同调位(aux_items)/局外树(T8 节点表)——规则改写型特性只走局内随机渠道。 ; 数值全 provisional 归 M-4 数值批;effects 键白名单封闭(零裸 flat 同族护栏)。 diff --git a/game/data/tables/shop.tres b/game/data/tables/shop.tres index 3976983b..bd1203c1 100644 --- a/game/data/tables/shop.tres +++ b/game/data/tables/shop.tres @@ -94,7 +94,7 @@ price_b = 1.1 ;(用户拍板骨架先行、数值整体后置,行值归 难度曲线与Boss)。 ; GP 商店房重构批(M-4 迭代 11 第②批 T1,2026-10-03——任务书 v1.3 全裁 P1 共享池/P4 ceil/P5 甲): ; pool_shelf 行族 = 共享池货架(kind_id 词表封闭四切边后种 attack/max_hp/armor/ap——GP 袋负交易切边、 -; 机制件三轴 doctrine 切边;库存=上限即库存,账本在 冒险结构 _bonus_taken 单点共享,行族不记库存); +; 规则改写型特性三轴 doctrine 切边;库存=上限即库存,账本在 冒险结构 _bonus_taken 单点共享,行族不记库存); ; 价格公式换代(pool 模式)= ceil(base_price × b^(关序−1) × A^(本次进店已购次数)),price_a=1.8/price_b=1.1 ; provisional 投值(零人工令改 provisional+后置追认,原 P5 甲研究拍板后置);products 行族 + 加法定价 ; 随 legacy 模式(shop=off 对照承载)保留不退役,退役归 off 锚换代批。货架行值全部 provisional 归 diff --git a/game/presentation/battle_narrator.gd b/game/presentation/battle_narrator.gd index f0d917e5..db5b90be 100644 --- a/game/presentation/battle_narrator.gd +++ b/game/presentation/battle_narrator.gd @@ -131,11 +131,11 @@ static func bonus_result_text(result: Dictionary) -> String: return "已选择:%s\n其余选项已丢弃(不可反悔)" % name -# 流派件卡片文案(迭代 12 T1;2026-10-04 呈现补强——第三行=hook 效果摘要,用户反馈「不知道件是 +# 特性卡片文案(迭代 12 T1;2026-10-04 呈现补强——第三行=hook 效果摘要,用户反馈「不知道件是 # 干嘛的」缺口承载;摘要=静态映射表 provisional 文案归代拍板白名单「件文案微调」) static func relic_card_text(row: Dictionary) -> String: if row.is_empty() or String(row.get("relic_id", "")) == "": - return "流派件\n???" + return "特性\n???" var arch_names := {"magic": "魔法", "pierce": "穿刺", "normal": "普攻", "dig": "开格", "flag": "标旗", "charge": "蓄力", "devour": "吞噬"} var arch := String(arch_names.get(String(row.get("archetype", "")), "流派")) @@ -167,7 +167,7 @@ static func relic_card_text(row: Dictionary) -> String: var summary := String(summaries.get(String(row.get("hook", "")), "")) if summary != "": return "%s · %s\n%s" % [String(row.get("display_name", row.get("relic_id", ""))), arch, summary] - return "流派件 · %s\n%s" % [arch, String(row.get("display_name", row.get("relic_id", "")))] + return "特性 · %s\n%s" % [arch, String(row.get("display_name", row.get("relic_id", "")))] # Boss 胜利战斗总结结算行(settlement-summary v1.1——钥石增量行;组合根拼 GP 行后追加) diff --git a/game/presentation/bonus_interact_controller.gd b/game/presentation/bonus_interact_controller.gd index 6abe4178..d6930cbc 100644 --- a/game/presentation/bonus_interact_controller.gd +++ b/game/presentation/bonus_interact_controller.gd @@ -127,9 +127,9 @@ func _bonus_card_texts(candidates: Array, aux_detail: Array = []) -> Array: elif kind == "aux_item": var iid := String(aux_detail[aux_i]) if aux_i < aux_detail.size() else "" aux_i += 1 - text = Narrator.bonus_card_text(kind, tier, int(db.adventure.bonus_value(kind, tier)), _aux_card_line(iid)) + text = Narrator.bonus_card_text(kind, tier, int(db.adventure.feature_value(kind, tier)), _aux_card_line(iid)) else: - text = Narrator.bonus_card_text(kind, tier, int(db.adventure.bonus_value(kind, tier))) + text = Narrator.bonus_card_text(kind, tier, int(db.adventure.feature_value(kind, tier))) out.append({"id": cid, "text": text}) return out diff --git a/game/presentation/hud_presenter.gd b/game/presentation/hud_presenter.gd index f2d6d235..d6e48f48 100644 --- a/game/presentation/hud_presenter.gd +++ b/game/presentation/hud_presenter.gd @@ -19,7 +19,7 @@ extends RefCounted # HP/状态效果单投喂 B 区站桩(原 B/C 双投喂为重复展示——信息归属拍板单一展示面原则) static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApBarView, settlement, runner, level_active: bool, db, refresh_remaining: int) -> void: - # 本关强化列表(v3.5 迭代 9 卡⑫ 2026-09-30——runner 统一加算区投影:商店购买与关卡大奖励 + # 特性列表(v3.5 迭代 9 卡⑫ 2026-09-30——runner 统一加算区投影:商店购买与关卡大奖励 # 共账本〔level_runner bonus{atk,max_hp,armor_class}〕;空加算=整节隐藏〔视图内空态纪律〕。 # 呈现只读投影零核心触碰;行文格式=代拍板白名单项) if runner != null and level_active: @@ -34,7 +34,7 @@ static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApB info.set_level_bonuses(lines) else: info.set_level_bonuses([]) - # 流派件持有投影(迭代 12 呈现补齐 2026-10-04——用户反馈「局内奖励选了什么看不到」: + # 特性持有投影(迭代 12 呈现补齐 2026-10-04——用户反馈「局内奖励选了什么看不到」: # 逐流派聚合行+成型档位;常驻可读+空态隐藏。档位求值=RelicsEngine 纯函数直调) if runner != null and level_active: info.set_relic_holdings(relic_holdings_lines(db, runner.relics_held())) @@ -46,7 +46,7 @@ static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApB return var s: Dictionary = settlement.presentation_snapshot() # 地形变异常驻角标投影(全局作用域变异首发批 2026-10-04——板级变异快照 → 文案行; - # 空态隐藏=流派件段先例;战斗全程常驻防中局遗忘) + # 空态隐藏=特性段先例;战斗全程常驻防中局遗忘) info.set_board_variants(board_variant_lines(db, s.get("board_variants", []))) var hero: Dictionary = s.hero if hero.is_empty() or not bool(hero.get("alive", false)): @@ -93,7 +93,7 @@ static func _refresh_economy(ap_bar: ApBarView, s: Dictionary, db, refresh_remai ap_bar.set_stop_enabled(bool(s.hero.get("alive", false)) and digging) -# 流派件持有聚合文案(迭代 12 呈现补齐——战斗 C 区与关卡选择页两处共用;空持有=空数组) +# 特性持有聚合文案(迭代 12 呈现补齐——战斗 C 区与关卡选择页两处共用;空持有=空数组) static func relic_holdings_lines(db, held: Array) -> Array[String]: var rlines: Array[String] = [] if db == null or db.relics == null or (db.relics.rows as Array).is_empty() or held.is_empty(): diff --git a/game/presentation/views/hero_info_panel_view.gd b/game/presentation/views/hero_info_panel_view.gd index 513a7701..7e84fd36 100644 --- a/game/presentation/views/hero_info_panel_view.gd +++ b/game/presentation/views/hero_info_panel_view.gd @@ -1,6 +1,6 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # 实现 GDD:design/ux/battle.md(C 区角色信息 240×548——2026-09-26 信息归属拍板精简: -# 攻击(+修正来源角标)/护甲 AC 数据框 + 魔法道具槽(预留)+ 本关强化列表(预留)。 +# 攻击(+修正来源角标)/护甲 AC 数据框 + 魔法道具槽(预留)+ 特性列表(预留)。 # HP 条/立绘占位/状态效果槽/RAP 池/GP/钥石退役——HP 与状态唯一展示面 = B 区站桩(同一数据 # hud_presenter 双投喂 B/C 两区的重复展示);RAP 迁 D 区 AP 条(贴弃图刷新消费口); # GP(中循环)/钥石(大循环)迁出战斗屏)。 @@ -19,9 +19,9 @@ var item_slots: HBoxContainer # 魔法道具槽(迭代 7 T4 接 var _slot_panels: Array = [] # 槽 PanelContainer 引用(选中高亮/置灰重刷) var _selected_handle := 0 # 选中态(0=无;组合根回写维持单源) var _slot_handles: Array = [] # 槽位→handle 映射(set_aux_inventory 刷新) -var _bonus_section: VBoxContainer # 本关强化(预留——空态隐藏,接线归大奖励/锻造呈现批) +var _bonus_section: VBoxContainer # 特性(预留——空态隐藏,接线归大奖励/锻造呈现批) var _bonus_list: VBoxContainer -var _relic_section: VBoxContainer # 流派件持有段(迭代 12 呈现补齐——空态隐藏) +var _relic_section: VBoxContainer # 特性持有段(迭代 12 呈现补齐——空态隐藏) var _relic_list: VBoxContainer var _board_variant_section: VBoxContainer # 地形变异常驻角标(全局作用域变异首发批——空态隐藏) var _board_variant_list: VBoxContainer @@ -70,19 +70,19 @@ func _init() -> void: item_slots.add_child(slot) _slot_panels.append(slot) - # 流派件持有段(迭代 12 呈现补齐 2026-10-04——三选一流派件兑付后常驻可读:逐流派聚合行+成型档位; + # 特性持有段(迭代 12 呈现补齐 2026-10-04——三选一特性兑付后常驻可读:逐流派聚合行+成型档位; # 空态整节隐藏。用户试玩反馈「局内奖励选了什么看不到」缺口承载;2026-10-04 二次反馈上移—— # 构筑核心信息优先级高于临时强化,且防 C 区下部裁切不可见) _relic_section = VBoxContainer.new() _relic_section.add_theme_constant_override("separation", 4) _relic_section.visible = false col.add_child(_relic_section) - _relic_section.add_child(UiKit.label("流派件", 16, true)) + _relic_section.add_child(UiKit.label("特性", 16, true)) _relic_list = VBoxContainer.new() _relic_list.add_theme_constant_override("separation", 2) _relic_section.add_child(_relic_list) # 地形变异常驻角标(全局作用域变异首发批 2026-10-04——Boss 图整图型战斗全程可见防中局遗忘; - # 空态整节隐藏=流派件段先例;摆位/文案 provisional 归 HUD 框架批与本地化批) + # 空态整节隐藏=特性段先例;摆位/文案 provisional 归 HUD 框架批与本地化批) _board_variant_section = VBoxContainer.new() _board_variant_section.add_theme_constant_override("separation", 4) _board_variant_section.visible = false @@ -91,13 +91,13 @@ func _init() -> void: _board_variant_list = VBoxContainer.new() _board_variant_list.add_theme_constant_override("separation", 2) _board_variant_section.add_child(_board_variant_list) - # 本关强化(预留):锻造/大奖励/关卡奖励节点的属性提升——中循环数据因改变战斗数学准入; + # 特性(预留):锻造/大奖励/关卡奖励节点的属性提升——中循环数据因改变战斗数学准入; # 与战斗内状态效果(B 区站桩,随战斗消散)分区,防「战斗结束被清」误读;空态整节隐藏 _bonus_section = VBoxContainer.new() _bonus_section.add_theme_constant_override("separation", 4) _bonus_section.visible = false col.add_child(_bonus_section) - _bonus_section.add_child(UiKit.label("本关强化", 16, true)) + _bonus_section.add_child(UiKit.label("特性", 16, true)) _bonus_list = VBoxContainer.new() _bonus_list.add_theme_constant_override("separation", 2) _bonus_section.add_child(_bonus_list) @@ -113,7 +113,7 @@ func set_armor(ac: int) -> void: _armor_label.text = "护甲 AC %d" % ac -# 流派件持有段(迭代 12 呈现补齐):lines = 聚合文案行(「魔法 ×2 · 档一」式)——空数组 = 整节隐藏 +# 特性持有段(迭代 12 呈现补齐):lines = 聚合文案行(「魔法 ×2 · 档一」式)——空数组 = 整节隐藏 func set_relic_holdings(lines: Array) -> void: for c2 in _relic_list.get_children(): _relic_list.remove_child(c2) @@ -135,7 +135,7 @@ func set_board_variants(lines: Array) -> void: _board_variant_section.visible = not lines.is_empty() -# 本关强化列表(预留接线面):lines = 文案行数组(如「锻造 +2 攻击」)——空数组 = 整节隐藏 +# 特性列表(预留接线面):lines = 文案行数组(如「锻造 +2 攻击」)——空数组 = 整节隐藏 func set_level_bonuses(lines: Array) -> void: for c in _bonus_list.get_children(): _bonus_list.remove_child(c) diff --git a/game/presentation/views/level_map_screen.gd b/game/presentation/views/level_map_screen.gd index a03bb209..71dcbe4c 100644 --- a/game/presentation/views/level_map_screen.gd +++ b/game/presentation/views/level_map_screen.gd @@ -6,7 +6,7 @@ # 悬停预承诺(描边加粗+指针)后点击提交;press_candidate 探针入口改走图上命中同路径 # ③ 放弃冒险二次确认(布局决策 3)——首击转确认态(文案+危险红脉冲约 3 秒超时回落),二击提交 # ④ 顶栏语境:关卡名(level_row.display_name)+ GP 常驻徽章(2026-09-26 二轮拍板去向落地面) -# ⑤ 底部状态栏(布局决策 4):生命/属性/本关加成三组常读(零加成隐藏),放弃按钮右端异位 +# ⑤ 底部状态栏(布局决策 4):生命/属性/特性三组常读(零加成隐藏),放弃按钮右端异位 # 关卡画面(独立屏,Level Map Screen——2026-09-28 形态升格批 M-2 迭代 3 T2:原 RouteOverlay 模态 # 覆盖层升格独立屏,spec level-map.md 形态章节同批改写):全屏不透明独占呈现——激活期战斗屏宿主 # 由组合根整体隐藏(非暗幕半透、零透出)。零自动推进的玩家停点语义不变:唯一前进通道 = @@ -56,7 +56,7 @@ var _hp_bar: Control var _attr_value: Label var _bonus_row: HBoxContainer var _bonus_value: Label -var _relic_value: Label # 流派件持有行(迭代 12 呈现补齐——组合根投喂聚合文案) +var _relic_value: Label # 特性持有行(迭代 12 呈现补齐——组合根投喂聚合文案) var _cand_ids: Array[int] = [] # 本停点候选 id 集(图上命中合法集) var _content_size := Vector2(620, 240) # 图内容包络(open_choices 按图拟合——画布 min 尺寸随它) var _hover_id := -1 # 悬停预承诺候选(-1 = 无) @@ -118,13 +118,13 @@ func _init() -> void: _canvas.draw.connect(_draw_graph.bind(_canvas)) _canvas.gui_input.connect(_on_canvas_input) box.add_child(_canvas) - # 底部状态栏(布局决策 4:生命/属性/本关加成三组 + 放弃按钮右端异位) + # 底部状态栏(布局决策 4:生命/属性/特性三组 + 放弃按钮右端异位) var bottom := HBoxContainer.new() bottom.add_theme_constant_override("separation", 10) box.add_child(bottom) bottom.add_child(_status_box("生命", true)) bottom.add_child(_status_box("属性", false)) - # 本关加成框(零加成隐藏——spec 布局决策 4) + # 特性框(零加成隐藏——spec 布局决策 4) _bonus_row = HBoxContainer.new() _bonus_row.add_theme_constant_override("separation", 10) var bonus_box := PanelContainer.new() @@ -132,11 +132,11 @@ func _init() -> void: _bonus_row.add_child(bonus_box) var bonus_inner := VBoxContainer.new() bonus_box.add_child(bonus_inner) - var bonus_cap := UiKit.label("本关加成", 12, false, UiKit.WARM_SOFT) + var bonus_cap := UiKit.label("特性", 12, false, UiKit.WARM_SOFT) bonus_inner.add_child(bonus_cap) _bonus_value = UiKit.label("", 15, true, UiKit.WARM) bonus_inner.add_child(_bonus_value) - # 流派件持有行(迭代 12 呈现补齐 2026-10-04——用户反馈关卡选择页看不到局内奖励;组合根投喂) + # 特性持有行(迭代 12 呈现补齐 2026-10-04——用户反馈关卡选择页看不到局内奖励;组合根投喂) _relic_value = UiKit.label("", 13, false, UiKit.WARM_SOFT) _relic_value.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART bonus_inner.add_child(_relic_value) @@ -189,7 +189,7 @@ func _draw_hp_bar(bar: Control) -> void: # 放弃入口可见性(组合根在冒险启动时开、默认关——语义对象 = 整局冒险) -# 流派件持有投影(迭代 12 呈现补齐——组合根投喂聚合文案;空文案=行隐藏) +# 特性持有投影(迭代 12 呈现补齐——组合根投喂聚合文案;空文案=行隐藏) func set_relic_holdings(text: String) -> void: _relic_value.text = text @@ -324,7 +324,7 @@ func _refresh_status() -> void: if ac_bonus > 0: parts.append("AC +%d" % ac_bonus) _bonus_value.text = " · ".join(parts) - # 流派件持有行可见性(与加成行并框——任一非空整框显示;文案归组合根 set_relic_holdings) + # 特性持有行可见性(与加成行并框——任一非空整框显示;文案归组合根 set_relic_holdings) _bonus_row.visible = not parts.is_empty() or _relic_value.text != "" diff --git a/game/smoke/adventure_monte_carlo.gd b/game/smoke/adventure_monte_carlo.gd index fbc69165..50eb9131 100644 --- a/game/smoke/adventure_monte_carlo.gd +++ b/game/smoke/adventure_monte_carlo.gd @@ -42,8 +42,8 @@ func _initialize() -> void: var shop_mode := "off" if args.size() >= 6 and args[5] in ["off", "on"]: shop_mode = args[5] - # 流派件/树分层开关(迭代 12 T7/T10——off=基线;formed=成型画像开局注入七流派各 2 件档一成型集 - # 〔测量面专用 params.relics_seed——真实局流派件只走局内随机渠道〕;ab_a/ab_b=Fork posture 两侧 + # 特性/树分层开关(迭代 12 T7/T10——off=基线;formed=成型画像开局注入七流派各 2 件档一成型集 + # 〔测量面专用 params.relics_seed——真实局规则改写型特性只走局内随机渠道〕;ab_a/ab_b=Fork posture 两侧 # rule 键集——A/B 面两侧差 <~3pp 验收载体) var relic_mode := "off" if args.size() >= 7 and args[6] in ["off", "formed", "ab_a", "ab_b"]: diff --git a/game/smoke/level_autoplay.gd b/game/smoke/level_autoplay.gd index d80d25eb..ce8160ea 100644 --- a/game/smoke/level_autoplay.gd +++ b/game/smoke/level_autoplay.gd @@ -134,7 +134,7 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ "log_path": "", "policy": policy, "refreshes": 0, "mine_hits": 0, "mine_dmg": 0, "visited_ids": [], "choices": 0, "last_battle_enemies": [], "summary": {}, "wallet_events": [], "encounter_max_hp_seq": [], "reward_events": [], - "relic_mode": String(relic.get("mode", "off")), # 流派件分层开关(迭代 12 T7——off=316-f 通用竞争/on=成型画像优先捕捞 relic) + "relic_mode": String(relic.get("mode", "off")), # 特性分层开关(迭代 12 T7——off=316-f 通用竞争/on=成型画像优先捕捞 relic) "shop_gp_seq": [], # 商店房到达余额序(逐关 1 次——GP 跨关延续验收取数面) "prng": _policy_rng(seed_val), "mine_slips": 0, "skip_digs": 0, "shop_buys": 0, "adv": true, # v3 档位行为开关(选路评分/失误注入/商店购买只挂冒险测量面——单关夹具保持旧语义零扰动) @@ -156,7 +156,7 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ if not attune.is_empty(): adv_params["attunement"] = attune.get("equipped", []) adv_params["attune_refresh_y"] = int(attune.get("refresh_y", 0)) - # 流派件注入(迭代 12 T7——formed 画像=开局注入七流派各 2 件档一成型集;测量面专用) + # 特性注入(迭代 12 T7——formed 画像=开局注入七流派各 2 件档一成型集;测量面专用) if relic.has("seed_ids"): adv_params["relics_seed"] = relic.get("seed_ids", []) # 树规则键注入(迭代 12 T10——A/B 面读数载体:fork 激活侧 effects rule 键集透传) @@ -185,7 +185,7 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ # 终局池读数(迭代 11 第②批 T5——摘要 additive 键 pool_stock:_settle 清账前快照, # 商店买走 vs 奖励领走 vs 枯竭的终局面;事后读 adr.pool_stock 会被收束清账重置=满库假象) st["pool_stock"] = (st.get("summary", {}).get("pool_stock", {}) as Dictionary).duplicate(true) - st["relics"] = (st.get("summary", {}).get("relics", []) as Array).duplicate() # 流派件终局持有集(迭代 12 T1——摘要 additive 键清账前快照,同 pool_stock 模式) + st["relics"] = (st.get("summary", {}).get("relics", []) as Array).duplicate() # 特性终局持有集(迭代 12 T1——摘要 additive 键清账前快照,同 pool_stock 模式) st.log_path = logger.log_path() if own_session: logger.close_session() @@ -268,7 +268,7 @@ static func _on_adventure_bonus(payload: Dictionary, st: Dictionary, adr) -> voi # 三选一确定性选件(TP0 316-f——1 级优先度=最稀有〔档位最高 rarest>rare>common〕、2 级=最左; # 候选并列同档取最左=稳定序保证。空候选/未知档位 = 回退最左防御口径。 # 成型画像(迭代 12 T7——relic 模式 on:候选含 relic 令牌时优先在 relic 集内按 316-f 择一 -# 〔贪心捕捞→流派件入局→成型画像全流派覆盖——R3 乙单锚承载〕;off=relic 与数值件同规则竞争) +# 〔贪心捕捞→特性入局→成型画像全流派覆盖——R3 乙单锚承载〕;off=relic 与属性加成型特性同规则竞争) static func _pick_token(candidates: Array, relic_mode: String = "off") -> Dictionary: var pool: Array = candidates if relic_mode == "on": diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 8acb1cc5..333069c7 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -220,12 +220,12 @@ func _smoke_adventure_table() -> void: check(int(_db.adventure.tier_total(tier)) == int(_db.adventure.TIER_QUOTAS[tier]), "档位配额结构锚(v2.2 追认 b):%s = %d 张" % [tier, int(_db.adventure.TIER_QUOTAS[tier])]) check(int(_db.adventure.deck_total()) == 98, "令牌池总量 = 98 张(普通 70/稀有 25/罕见 3——罕见档随道具件池种退役收窄)") - check(int(_db.adventure.bonus_value("gp", "common")) == 20 and int(_db.adventure.bonus_value("gp", "rare")) == 50 - and int(_db.adventure.bonus_value("attack", "common")) == 1 and int(_db.adventure.bonus_value("attack", "rare")) == 2 - and int(_db.adventure.bonus_value("max_hp", "common")) == 5 and int(_db.adventure.bonus_value("max_hp", "rare")) == 10 - and int(_db.adventure.bonus_value("armor", "common")) == 1 and int(_db.adventure.bonus_value("armor", "rare")) == 2, + check(int(_db.adventure.feature_value("gp", "common")) == 20 and int(_db.adventure.feature_value("gp", "rare")) == 50 + and int(_db.adventure.feature_value("attack", "common")) == 1 and int(_db.adventure.feature_value("attack", "rare")) == 2 + and int(_db.adventure.feature_value("max_hp", "common")) == 5 and int(_db.adventure.feature_value("max_hp", "rare")) == 10 + and int(_db.adventure.feature_value("armor", "common")) == 1 and int(_db.adventure.feature_value("armor", "rare")) == 2, "数值对(v2.2):小GP 20/大GP 50 · 小增伤 +1/大 +2 · 小生命 +5/大 +10 · 小护甲 +1/大 +2") - check(int(_db.adventure.bonus_value("heal", "rare")) == 6 and int(_db.adventure.bonus_value("ap", "rarest")) == 1, + check(int(_db.adventure.feature_value("heal", "rare")) == 6 and int(_db.adventure.feature_value("ap", "rarest")) == 1, "恢复件 +6 当即回血(新入池种类,rare 档)· AP +1(rarest 档)") check(_db.attunement_growth != null and int(_db.attunement_slot_cap()) == 3 and Attunement.slots(_db, null) == 0, @@ -349,7 +349,7 @@ func _smoke_adventure() -> void: var cand_ok := picks.size() == 2 var ks_gain_ok := picks.size() == 2 var resolve_ok := level_resolves.size() == 2 - var max_flat := int(_db.adventure.bonus_max_hp_flat) + var max_flat := int(_db.adventure.feature_value_max_hp_common) var heal_pct := int(_db.adventure.clear_heal_pct) var hp_acc := 0 # max_hp 件累加(回血封顶断言的生效上限推导——TP0 起按兑付令牌实值,大小档分别计) var ks_prefix := 0 @@ -384,7 +384,7 @@ func _smoke_adventure() -> void: var r: Dictionary = level_resolves[i] var rk := String(r.get("picked", "")) var rt := String(r.get("tier", "")) - if _smoke_find_token(p.get("candidates", []) as Array, rk, rt).is_empty() or int(r.get("value", -1)) != int(_db.adventure.bonus_value(rk, rt)): + if _smoke_find_token(p.get("candidates", []) as Array, rk, rt).is_empty() or int(r.get("value", -1)) != int(_db.adventure.feature_value(rk, rt)): resolve_ok = false if rk == "max_hp": hp_acc += int(r.get("value", max_flat)) @@ -397,7 +397,7 @@ func _smoke_adventure() -> void: var exp_base := maxi(1, int(round(float(int(_db.hero.max_hp)) * k))) # 模拟档 v3.4 商店贪心购血(数值修复批)合法抬升——上限窗口 = 基础 + 加算区 3 件 + 购血余量; # TP0 数值对后 max_hp 件有大生命 +10(rare 档)——上界按大件最坏构成 3×10+购血 15=+45(TP0 放宽) - var hp_ceiling := maxi(1, int(round(float(int(_db.hero.max_hp) + 3 * int(_db.adventure.bonus_value("max_hp", "rare")) + 15) * k))) + var hp_ceiling := maxi(1, int(round(float(int(_db.hero.max_hp) + 3 * int(_db.adventure.feature_value("max_hp", "rare")) + 15) * k))) var seq_ok := seq.size() > 0 and int(seq[0]) == exp_base for v in (seq as Array): if int(v) < exp_base or int(v) > hp_ceiling: @@ -592,22 +592,22 @@ func _smoke_adventure() -> void: a13.present_node_bonus(ncands13, ndraw.get("aux_detail", []) as Array) a13.present_node_bonus([{"kind": "gp", "tier": "common"}]) var gp13 := int(a13.ledger.get("gp", 0)) - check(a13.apply_node_bonus("gp", "common") and int(a13.ledger.get("gp", 0)) == gp13 + int(_db.adventure.bonus_value("gp", "common")), - "奖励节点 GP 件入账(钱包「奖励入账」收口——+%d)" % int(_db.adventure.bonus_value("gp", "common"))) + check(a13.apply_node_bonus("gp", "common") and int(a13.ledger.get("gp", 0)) == gp13 + int(_db.adventure.feature_value("gp", "common")), + "奖励节点 GP 件入账(钱包「奖励入账」收口——+%d)" % int(_db.adventure.feature_value("gp", "common"))) check(a13._node_bonus_pending.is_empty(), "节点停点态兑付后清零(恰一次语义同构)") var s10: Dictionary = a10.summary check(String(s10.get("result", "")) == "abandoned" and not bool(s10.get("cleared", true)), "放弃摘要:abandoned · 未打穿(已获大奖励不追回——同失败型结算)") -# ---- 双层 BD 机制件基建冒烟(迭代 12 T1——relic_table/档位激活引擎/机制件带池接线)---- +# ---- 双层 BD 规则改写型特性基建冒烟(迭代 12 T1——relic_table/档位激活引擎/规则改写型特性带池接线)---- func _smoke_relics() -> void: - print("--- 机制件基建(relic_table · 档位激活引擎 · 机制件带接线)---") + print("--- 规则改写型特性基建(relic_table · 档位激活引擎 · 规则改写型特性带接线)---") # ① 现行表牌库构成:七流派 27 件全量入池——98 数值令牌+27 relic 令牌(批次一铺量完成) check(_db.relics != null and (_db.relics.rows as Array).size() == 27, "relic_table 已加载(七流派 27 件全量——批次一 T2-T6 铺量完成)") var a_r0 = load("res://core/adventure_runner.gd").new(_db, _fresh_rng(71)) - check(a_r0.start_adventure(71, {"first_script": true}), "机制件带场景:冒险启动(seed 71)") + check(a_r0.start_adventure(71, {"first_script": true}), "规则改写型特性带场景:冒险启动(seed 71)") var relic_tokens := 0 var rarest_tokens := 0 for t in a_r0._bonus_deck: @@ -616,7 +616,7 @@ func _smoke_relics() -> void: if String((t as Dictionary).get("tier", "")) == "rarest": rarest_tokens += 1 check(relic_tokens == 27 and rarest_tokens == 6 and a_r0._bonus_deck.size() == 125, - "机制件带入池:27 件(rare 档 21 + rarest 锚点 6)——牌库 98+27=125") + "规则改写型特性带入池:27 件(rare 档 21 + rarest 锚点 6)——牌库 98+27=125") check(_db.relics.validate().is_empty(), "relic_table.validate 零违例(有行流派扫雷端铁律——magic first_dig_spell 在案)") # ② 档位激活引擎(纯函数直测——构造表 4 件 magic + 1 件 flag + 1 件 rarest 锚点) var rt := RelicTable.new() @@ -638,17 +638,17 @@ func _smoke_relics() -> void: var hooks := RelicsEngine.hooks_for(["m1", "f1"], rt) check(hooks.size() == 2 and String(hooks[0].get("hook", "")) == "hero_attack_rider", "挂点投影:表序稳定(同集合→同投影)") - # ③ 机制件带接线(临时表注入——relic 令牌入牌库/兑付入持有集/踢池/断点往返;测试尾还原现行表) + # ③ 规则改写型特性带接线(临时表注入——relic 令牌入牌库/兑付入持有集/踢池/断点往返;测试尾还原现行表) var live_rows: RelicTable = _db.relics _db.relics = rt var a_r = load("res://core/adventure_runner.gd").new(_db, _fresh_rng(72)) - check(a_r.start_adventure(72, {"first_script": true}), "机制件带场景:冒险启动(seed 72——注入 5 行临时表)") + check(a_r.start_adventure(72, {"first_script": true}), "规则改写型特性带场景:冒险启动(seed 72——注入 5 行临时表)") var deck_relic := 0 for t in a_r._bonus_deck: if String((t as Dictionary).get("kind", "")) == "relic": deck_relic += 1 check(deck_relic == 5 and a_r._bonus_deck.size() == 103, - "机制件带入池:5 行 relic 每件 1 张(common/rare→稀有档 rarest→罕见档)——牌库 98+5=103") + "规则改写型特性带入池:5 行 relic 每件 1 张(common/rare→稀有档 rarest→罕见档)——牌库 98+5=103") var relic_seen: Dictionary = {} for i in 60: for t in a_r._draw_bonus_candidates(): @@ -726,13 +726,13 @@ func _smoke_relics() -> void: "深挖钻头=开掘 +1 AP/每 4 格深层产出(R4 甲非信息税对价)· 蓄力三件=层值 1/减伤 1/层/满层 ×2") check(orch.action_economy.relic_ap_carry and orch.action_economy.relic_dig_extra == 1, "蓄力/钻头 action_economy 注入(ap_carry 改写停手转存 + 付费开掘对价注入——关着 false/0 零扰动)") - # ⑦c 流派件持有呈现段(2026-10-04 用户反馈补齐——C 区「流派件」节:聚合行+成型档位;空态隐藏) + # ⑦c 特性持有呈现段(2026-10-04 用户反馈补齐——C 区「特性」节:聚合行+成型档位;空态隐藏) var panel = load("res://presentation/views/hero_info_panel_view.gd").new() panel.set_relic_holdings([]) - check(not panel._relic_section.visible, "流派件段空态隐藏(视图空态纪律同本关强化段)") + check(not panel._relic_section.visible, "特性段空态隐藏(视图空态纪律同特性段)") panel.set_relic_holdings(["魔法 ×2 · 档一", "开格 ×1 · 散件"]) check(panel._relic_section.visible and panel._relic_list.get_child_count() == 2, - "流派件段持有呈现(聚合行+成型档位常驻可读——「局内奖励选了什么看不到」缺口承载)") + "特性段持有呈现(聚合行+成型档位常驻可读——「局内奖励选了什么看不到」缺口承载)") # ⑦b 深挖钻头付费开掘回归(2026-10-04 试玩缺陷修复——对价挂付费侧):AP=1 降级照常开格 # (用户实测「AP=1 无法开格只能标旗」的回归闸);AP=2 付全价积付费计数(深层产出配额取数面)。 var ae_dd = load("res://core/action_economy.gd").new(_db) @@ -3773,8 +3773,8 @@ func _smoke_shop_pool() -> void: var val0: int = int(a8.bonus.get(String(val_map[kind]), -999)) check(r8.buy_pool_item(kind), "购买受理(pool 口——%s|%s)" % [kind, tier]) check(int(r8.gp) == gp0 - int(buy_c.get("price", 0)), "钱包扣现价(%d → %d)" % [gp0, int(r8.gp)]) - check(int(a8.bonus.get(String(val_map[kind]), -999)) == val0 + int(_db.adventure.bonus_value(kind, tier)), - "加算区 +令牌档位件值(池件=奖励件本体——%s|%s %+d)" % [kind, tier, int(_db.adventure.bonus_value(kind, tier))]) + check(int(a8.bonus.get(String(val_map[kind]), -999)) == val0 + int(_db.adventure.feature_value(kind, tier)), + "加算区 +令牌档位件值(池件=奖励件本体——%s|%s %+d)" % [kind, tier, int(_db.adventure.feature_value(kind, tier))]) check(int(a8._bonus_taken.get(kind, 0)) == taken0 + 1, "共享池账本 -1(跨渠道单点——taken %d → %d)" % [taken0, int(a8._bonus_taken.get(kind, 0))]) # A 链:同visit 第二购现价 = ceil(base×b^(l2−1)×A^1)(货架已全重抽——新卡新价同公式) var second: Dictionary = {} @@ -3788,7 +3788,7 @@ func _smoke_shop_pool() -> void: check(int(second.get("price", -1)) == expect_p2, "A 链爬价 = ceil(base×b^(关序−1)×A^1)(进店第 2 购——%d)" % expect_p2) check(r8.buy_pool_item(String(second.get("kind_id", ""))), "同 visit 第二购受理(A 链软闸在价不在限)") - # ④ 切边零入店(白-box 重抽 40 次——GP 袋/机制件永不在架;重抽消费 shop_draw 签,场景尾不回写主时间线) + # ④ 切边零入店(白-box 重抽 40 次——GP 袋/规则改写型特性永不在架;重抽消费 shop_draw 签,场景尾不回写主时间线) var cut_seen := false for i in 40: r8._shop_draw_shelf() @@ -3839,7 +3839,7 @@ func _smoke_shop_pool() -> void: for k in ps.keys(): var quota := 0 for tier in _db.adventure.TIERS: - quota += int(_db.adventure.bonus_token_count(String(k), tier)) + quota += int(_db.adventure.feature_quota(String(k), tier)) if int(ps[k]) < 0 or int(ps[k]) > quota: ps_ok = false check(ps_ok, "终局池余量在域 [0,配额](%s)" % str(ps)) @@ -4430,7 +4430,7 @@ func _smoke_save() -> void: and int(bp.get("hero_hp", -1)) == 13, "断点七字段往返:关卡序号/节点位/生命") var bp_bonus: Dictionary = bp.get("bonus", {}) check(int(bp_bonus.get("atk", -1)) == 2 and int(bp_bonus.get("max_hp", -1)) == 5 - and int(bp_bonus.get("armor_class", -1)) == 1, "断点七字段往返:本关加成区") + and int(bp_bonus.get("armor_class", -1)) == 1, "断点七字段往返:属性加成区") check(int(bp.get("gp", -1)) == 17, "断点七字段往返:GP 钱包") var bp_shop: Dictionary = bp.get("shop_purchased", {}) check(int(bp_shop.get("hp_small", -1)) == 2 and int(bp_shop.get("atk_small", -1)) == 1, From 8e7acaa903025b79b74cbfb6bda40f3b485b1666 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 02:48:17 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E7=89=B9=E6=80=A7=20v1.1/v1.2=EF=BC=9A?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E9=87=8D=E6=9E=84=20+=20=E4=B8=93=E9=95=BF?= =?UTF-8?q?=E6=B8=A0=E9=81=93=E8=90=BD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v1.1 分类重构(用户拍板): - 两类由「规则改写型 / 属性加成型」改为「属性提升(ASI)/ 专长(Feat)」 - 属性提升内部再分纯属性组(生命上限 / AC / 攻击)与特殊组 (行动点上限 / 刷新次数 / 专长获取) - 刷新次数的作用对象是选择界面而非角色,作为例外显式登记,不进加算区 - 回答「刷新次数是否构成第三个枚举」:否——枚举轴(是什么)与 渠道轴(从哪来)是两根轴,同项出现在两个渠道不改枚举数量 v1.2 专长渠道落定(用户拍板): - 专长的专属渠道 = 关底 Boss 击败后兑付;不新增节点类型, 节点类型仍为封闭枚举五种,改动落在 Boss 节点兑付面 (「是否扩类」悬案由此收口) - 罕见旁路明确为「普通奖励里的专长 N 选一」,罕见且全局限量 新增待拍板 / 待观察: - gp(金币袋)与 heal(恢复)不进持有集、不持续生效、无生命周期, 按「自身得到提升」的定义是否仍属本类待拍板(甲案移出另立即时兑付 / 乙案放宽定义;动池须重裁档位结构锚 70/25/3) - 最终关 Boss 后是否也兑付专长 - 确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二) 同步:02-系统清单 v1.4、06-待办清单 BD 分层条目改写 + 新立「两个新种类 入池」条目、entities.yaml feature 条目(form → categories、新增 open_questions)、两个 schema 的概念指路注释换用新分类名。 未动:数据层数值与表结构(值零变更);game/ 下运行层旧称谓换名 留待可跑冒烟批次(本会话按测试执行两入口铁规零测试)。 --- design/gdd/02-系统清单.md | 3 +- design/gdd/06-待办清单.md | 24 ++++- design/gdd/systems/冒险循环/特性.md | 150 ++++++++++++++++++++------- design/registry/entities.yaml | 13 +-- game/data/schemas/adventure_table.gd | 9 +- game/data/schemas/relic_table.gd | 15 +-- 6 files changed, 154 insertions(+), 60 deletions(-) diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index ad0e25ff..dc3ba99d 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,7 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | -| `特性.md` | 一次冒险内角色自身得到的提升(规则改写型 / 属性加成型两种形态) | 已实现·2026-10-05 新立定义 | +| `特性.md` | 一次冒险内角色自身得到的提升(属性提升 / 专长两类) | 已实现·2026-10-05 新立定义·v1.1 分类重构 | ### 跨局循环(`systems/跨局循环/`) @@ -129,3 +129,4 @@ | v1.1 | 2026-09-27 | 关卡画面 UX spec 建档(关卡画面 UX 批):`ux/` 表补 `level-map.md` 行——选路枢纽三停点布局、GP 常驻徽章、交互映射与 AC 成文,三项设计提案挂 06 待拍板 | | v1.2 | 2026-10-03 | R3 清账批(gdd_lint 分域随批):四处状态单元格日期批注迁出——敌人系统行事件见敌人系统.md 版本历史 v0.5(技能池批);元进度行见本表 v0.8;camp/shop 行=两文 v1.0 落文(2026-09-30 三裁决执行批);语义零变更 | | v1.3 | 2026-10-05 | 立《特性》:一次冒险内角色自身得到的提升——此前按内部分类被叫成三个名字(规则类称"流派件"、属性类称"数值件"、界面称"本关强化"),现收敛为一个对象的两种形态枚举;文档树冒险循环补行 + 命名对照表补 `ADVENTURE_FEATURE` 行 | +| v1.4 | 2026-10-05 | 《特性》v1.1 分类重构:两类由"规则改写型 / 属性加成型"改为"属性提升(ASI)/ 专长(Feat)",属性提升内部再分纯属性组与特殊组;获取途径由两口共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店)+罕见旁路"专长获取" | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index cd018c3e..1a47dd10 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -25,15 +25,29 @@ **设计知识存续口径**:七流派完整件表/逐项反例条件表/天赋树后备语言(哈迪斯 2 预算制扩容/邻接树改型/GP 价格通胀防线)存整合定稿,随实施批文档吸收迁入各 GDD 正主(元进度/node-reward/战斗结算/地形变异/行动经济/魔法道具边界句/商店 spec)——**吸收完成前定稿不删**;喂雷流待办见上条遗留登记。 -#### 冒险 BD 两类加强物品获取同渠道、纯概率差(用户口径:获取途径须区分开,2026-10-04 提问登记) +#### 冒险 BD 两类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **特性**(2026-10-05 定名,定义见 [特性](systems/冒险循环/特性.md)):规则改写型(改规则、带流派标签与档位激活,构筑核心)与属性加成型(属性加成,写统一加算区;账本实为冒险域、关间不清零)两种形态。旧称「流派件 / 数值件 / 本关强化」一律作废。现行两类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),规则改写型只占稀有/罕见档(与属性大件混编),商店仅「货架零规则改写型挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **特性**(2026-10-05 定名,定义见 [特性](systems/冒险循环/特性.md)):**专长**(改规则、带流派标签与档位激活,构筑核心)与**属性提升**(抬属性,写统一加算区;账本实为冒险域、关间不清零)两类。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」亦作废。现行两类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),专长只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 -**用户期望改动**:将两种形态的获取途径区分开(规则改写型走战场奖励、属性加成型走商店训练),规则改写型的获取节奏不依赖纯概率。已呈四备选(均未拍板):① Boss/精英击杀后规则改写型**专属三选一**,规则改写型整体退出共享池〔我方推荐:确定性最高,杀戮尖塔/以撒/哈迪斯参照系全支持,与钥石逐杀 Boss 节奏同构;代价=令牌池配额回收+商店保底改向+MC 锚换代〕;② 行为条件投放(累计玩法行为定向出件,防滚雪球工程量大);③ 计步保底(每 N 奖励面必含规则改写型,改动最小只缓解不根除);④ 双池分离(每面必见规则改写型,决策密度过强,不推荐)。 +**用户定案(2026-10-05)**:三条渠道分工——**专长走关底 Boss 击败后**(专属三选一,时机确定,构筑节奏可预期);**属性提升走奖励节点与商店训练**(商店口径仍为「训练」)。在属性提升的通用渠道里嵌一个**罕见且全局限量**的「专长获取」项,小概率出现、拿到立刻开一次专长 N 选一,为确定性主渠道加一层赌博感。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。 -**归属**:[node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 +原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:专长挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 -**状态**:待讨论(2026-10-04 用户提问登记,后续展开) +**待拍板/待观察三项**:① **属性提升池里的 gp(金币袋)与 heal(恢复)两项**,按「角色自身得到的提升」的定义是否仍属本类——两者都不进持有集、不持续生效,**没有"获得→持有→清零"的生命周期**。甲案=移出特性另立「即时兑付/补给」类(代价:档位配额 70/25/3 是结构锚,动总量须重裁非调参);乙案=放宽特性定义容纳它们(代价:判据句「带在自己身上的是特性」失效,与魔法道具边界软化)。② **最终关 Boss 后是否也兑付专长**(现行奖励口径是最终关不给——没有后续关卡可消费)。③ **专长总量与档位阈值的匹配**:确定性渠道一局只兑付两次(若最终关不给),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠罕见旁路补齐,是否合预期归曲线调参批观察。 + +**归属**:[特性](systems/冒险循环/特性.md)(定义与目标分工)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 + +**状态**:分工已定,**实施待排批**;两项待拍板(2026-10-05 更新) + +#### 属性提升两个新种类入池——刷新次数、专长获取(2026-10-05 立) + +**现状**:[特性](systems/冒险循环/特性.md) v1.1 立了属性提升的特殊组三项,其中**行动点上限**已在池(罕见档),**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为特性授予的**重抽次数,两者不是一回事,入池前须先划清边界。 + +**连带约束**:`FEATURE_KINDS` 词表封闭(断点附随件与牌库剔除态依赖它),扩种类须走 `adventure_table.gd` + registry 同步修订;档位配额是**结构锚**(普通 70 / 稀有 25 / 罕见 3 = 98 张,入 schema validate 硬断言),新种类入池要占配额——**改总量须重裁而非调参**。专长获取须带全局限量(一局内可获得次数上限)。 + +**归属**:[特性](systems/冒险循环/特性.md) 调参表 + [冒险结构](systems/冒险循环/冒险结构.md) 共享池账本节;数值所有权归 [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md) + +**状态**:待排批——须在可跑冒烟的迭代批次内完成 #### 内部分类禁写入玩家可见面——特性呈现三处违规待改(2026-10-04 用户立意登记) diff --git a/design/gdd/systems/冒险循环/特性.md b/design/gdd/systems/冒险循环/特性.md index 013fe5db..61a2f783 100644 --- a/design/gdd/systems/冒险循环/特性.md +++ b/design/gdd/systems/冒险循环/特性.md @@ -2,7 +2,7 @@ > 一次冒险之内,角色**自身得到提升**的载体。它不是包里的东西,而是角色本人的变化——这点决定了它和持有物是两类完全不同的概念,下面的「关联与边界」一节写了怎么区分。 > -> 同一个概念下有**两种形态**:改写规则的,和抬高属性的。它们是同一个对象的形态枚举值(`form`:规则改写型 / 属性加成型),不是两类东西。 +> 同一个概念下有**两类**:抬高数字的(**属性提升**),和改规则的(**专长**)。它们是同一个对象的两个分类,不是两个系统。 > > 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是特性的唯一定义文档。 > @@ -20,7 +20,7 @@ | 负责 | 不负责 | |---|---| -| 特性的定义与形态枚举 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | +| 特性的定义与两个分类 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | | 生命周期边界:何时出现、何时生效、何时清零 | 卡面排版与界面呈现细则——见 [HUD框架](../表现与支撑/HUD框架.md) | | 获取途径的口径与约束 | 魔法道具与元进度——归上表两份文档 | | 与相邻概念的边界 | 格面资源、关卡节点、商店本身的规则——归各自所属文档 | @@ -30,30 +30,69 @@ ``` 【关内】排雷推理 → 战斗结算 → 通关 ──┐ ├─→ 得到一项特性 ─→ 后续关卡带着它继续 - 奖励节点・商店 ┘ + 奖励节点・商店・Boss 击败后 ┘ ``` -特性处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是两个获取口,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 +特性处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条获取渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 ## 核心规则 -### 1. 形态枚举(form) +### 1. 两类:属性提升(ASI)与专长(Feat) -特性只有一个名词;需要区分时才描述它的形态,不给形态另起名字。 +特性只有一个名词;需要区分时才说它属于哪一类,不给类别另起名字。 -| 形态 | 它改的是什么 | 落在哪里 | 事实源 | +| 分类 | 它改的是什么 | 落点 | 事实源 | |---|---|---|---| -| `rule` 规则改写型 | 改规则本身:在结算管线的某个挂点上给自己加一条规则;同一标签的持有件数达到阈值时发生质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | -| `stat` 属性加成型 | 改数值:把自己某项属性抬高,直接改写角色的基础数字 | 冒险加算区(攻击 / 生命上限 / 护甲 / 行动点四轴)、钱包与即时恢复 | `adventure.tres`(配额与值) | +| **属性提升** ASI | 改数字。把角色某项基础值抬高,或给他多一次选择的机会 | 冒险加算区(生命上限 / AC / 攻击三轴、行动点)、钱包、三选一界面 | `adventure.tres`(种类配额与值) | +| **专长** Feat | 改规则本身。在结算管线的某个挂点上给自己加一条规则;同一标签的持有件数达到阈值时发生质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | -两种形态的共性:都在当局获得、当局携带、当局失效;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 +两类的共性:都在当局获得、当局携带、当局失效;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 -**为什么是同一个对象的两种枚举而不是两个东西**:它们共用一份获取流程、一份持有集、一份生命周期。分成两个名字只会让读者以为有两套系统,而实际上代码里只有一个持有集。 +**为什么是同一个对象的两个分类而不是两个东西**:它们共用一份获取流程、一份持有集、一份生命周期。分成两个系统只会让读者以为有两套账,而实际上代码里只有一个持有集。 + +#### 1.1 属性提升:纯属性组与特殊组 + +属性提升内部按"改的是不是角色身上的数字"分成两组。 + +**纯属性组**——三项,各改一条基础属性轴: + +| 项 | 改什么 | +|---|---| +| 生命上限 | 抬高角色的生命上限 | +| AC(护甲) | 抬高角色的护甲 | +| 攻击 | 抬高角色的攻击 | + +**特殊组**——三项,改的不是基础属性,而是能力上限与机会: + +| 项 | 改什么 | 备注 | +|---|---|---| +| 行动点上限 | 抬高每场战斗首轮的行动点基线 | 罕见档 | +| 刷新次数 | 增加三选一界面的重抽次数 | **作用对象不是角色,是选择界面**——见第 2 节的例外说明;可在奖励节点与商店两个渠道出现 | +| 专长获取 | 拿到时立刻开一次专长三选一 | **罕见且全局限量**;它是跨两类的桥梁——本体属属性提升,产出是专长。见第 4.2 节 | + +三轴的分类边界:纯属性组的三项直接进冒险加算区,跨关携带且关间不清零;特殊组的三项各有各的落点,其中刷新次数不进加算区。 + +#### 1.2 专长:机制增加 + +专长改的是规则而不是数字——它给自己加一条"在某种条件下,本来不会发生的事现在会发生"的规则,因此它不是任何一条属性轴的延伸,玩家也无法用"加了多少"来衡量它。 + +专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归所属结算文档,本文件不展开)。这是它和属性提升最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 + +#### 1.3 一句判据 + +**改数字的是属性提升,改规则的是专长。** + +拿不准的项按这条判:如果把它去掉,角色是"某个数字少了一截",那就是属性提升;如果角色是"某件事做不到了",那就是专长。 + +#### 1.4 命名出处 + +两类都取自 DND 规则书的既有名词,不是本项目自造:属性提升对应 Ability Score Improvement(ASI,属性值提升),专长对应 Feat(专长)。玩家可见文案只写效果,不出现这两类名。 ### 2. 作用对象与范围 - **作用对象**:角色本人,以及角色参与的结算过程。特性不改敌人、不改棋盘生成、不改关卡内容。 -- **时间范围**:整局冒险。两种形态都自获得起对本局剩余所有关卡生效;属性加成型写入加算区后,关与关之间不清零。 +- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是特殊组里唯一一条作用对象不是角色的项——留在特性内是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 +- **时间范围**:整局冒险。两类都自获得起对本局剩余所有关卡生效;属性提升写入加算区后,关与关之间不清零。 - **归属范围**:不进账号永久进度,不带到下一次冒险。 ### 3. 生命周期 @@ -66,23 +105,48 @@ | 阶段 | 说明 | |---|---| -| 候选池构建 | 冒险开局时一次建成。两种形态的候选**现同处一个令牌池**:属性加成型按配额铺开,规则改写型按定义表的有效行铺开。 | -| 出现 | 玩家在两个获取口之一看到若干候选(三选一的形式),看不到整个池。 | -| 选定 | 玩家选定一项后,它从池中剔除,此后任何获取口都不会再见。 | -| 持有与生效 | 进入持有集后立即生效,跨关携带。规则改写型按同一标签的持有项数决定处于哪一档。 | +| 候选池构建 | 冒险开局时一次建成。两类的候选**现同处一个令牌池**:属性提升按配额铺开,专长按定义表的有效行铺开。 | +| 出现 | 玩家在获取口看到若干候选(三选一的形式),看不到整个池。 | +| 选定 | 玩家选定一项后,它从池中剔除,此后任何获取口都不会再见。选到「专长获取」时,立刻再开一次专长三选一——这次选择走专长的渠道语义,不占用原本的获取口。 | +| 持有与生效 | 进入持有集后立即生效,跨关携带。专长按同一标签的持有项数决定处于哪一档。 | | 清零 | 冒险以任一结局收束时整集清空;下次开局重建。 | | 断点恢复 | 进行中的冒险把持有集与剩余候选池一并写入断点,续玩后恢复到同一状态(断点里的键名沿用历史形态,不随本次改名变动)。 | ### 4. 获取途径 -| 获取口 | 说明 | 目标渠道分工(尚未实施) | +#### 4.1 三条渠道的分工 + +| 渠道 | 出哪一类 | 说明 | |---|---|---| -| 战场奖励 | 每关通关给一次三选一(最终关不给——提升只对后续关卡有意义,最终关没有后续);关卡节点图上的奖励节点同样给一次三选一,与之共用同一个候选池。 | 规则改写型今后主要从这里出 | -| 商店 | 花局内金币购买在架的特性;同一种至多一张,买走即从在架令牌移除。 | 属性加成型今后主要从这里出,口径是**训练** | +| **关底 Boss 击败后** | 专长 | 专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。 | +| **奖励节点** | 属性提升 | 每关通关给一次三选一(最终关不给——提升只对后续关卡有意义,最终关没有后续);关卡节点图上的奖励节点同样给一次三选一,与之共用同一个候选池。 | +| **商店** | 属性提升 | 花局内金币购买在架的特性;同一种至多一张,买走即从在架令牌移除。口径是**训练**(见 4.3)。 | -**关于商店口径的说明**:商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励那一侧完全相同:都是往同一个持有集里加一项特性。 +**确定性是这条分工的核心**:专长走专属渠道,是为了让"这一局的构筑往哪个方向走"由玩家决定,而不是由抽取决定。属性提升走通用渠道,数量稳定、每局可预期,负责把角色垫厚。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 -**在册事项**:现行两个获取口完全共用同一个候选池,两种形态出现条件一样、只有出现概率不同。用户已决定把两种形态按渠道分开(规则改写型走战场奖励,属性加成型走商店训练),四个备选方案与执行批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。**本文件 4 节表格里的渠道分工写的是目标状态,尚未实施。** +**在册事项**:现行实现里奖励节点与商店完全共用同一个候选池,两类出现条件一样、只有出现概率不同,专长也走同一个池——上表的渠道分工是**目标状态,尚未实施**。相关的实施批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。 + +**与节点类型词表的关系(已定)**:专长走关底 Boss 击败后兑付,**不新增节点类型**——[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),改动落在 Boss 节点的兑付面上(击败后追加一次专长三选一),词表零扩类。 + +**专长总量与档位阈值的匹配(待观察,不拍板)**:专长的档位激活是同标签 2 件档一 / 4 件档二(阈值归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。三关结构下,若最终关 Boss 后不给(没有后续关卡可消费),确定性渠道一局只兑付两次专长——刚好够档一,档二要靠罕见旁路补齐。最终关给不给、以及这个总量与阈值是否匹配,属曲线调参批的观察项,登记在 [06-待办清单](../../06-待办清单.md),本文件不预设结论。 + +#### 4.2 罕见旁路:专长获取 + +在属性提升的两个通用渠道里,嵌着一个罕见项——**专长获取**。它小概率出现在奖励节点或商店的候选里,效果是立刻开一次专长 N 选一(N 与专长主渠道的候选数同源)。 + +它的作用是在确定性之上加一层赌博感: + +- **不推翻确定性**:专长的主渠道仍然是关底 Boss,玩家不会因为没 roll 到就构筑不起来; +- **只在旁路制造兴奋**:它不常来,来了就是"这一局走运了",让人有记忆点; +- **罕见且全局限量**:配额极小,且一局内的总量有上限——防止它变成第二条专长渠道,也防止它把 4.1 里说的档位阈值冲垮。 + +玩家视角它长这样:在普通的三选一奖励里,偶尔会冒出一张不一样的卡——选它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态。 + +品类原型是以撒的恶魔房/天使房(Boss 战后概率开启,强力内容不走普通池)与哈迪斯的混沌门(概率出现、强力带代价)。 + +#### 4.3 商店口径:训练 + +商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励那一侧完全相同:都是往同一个持有集里加一项特性。 ### 5. 关联与边界 @@ -90,25 +154,25 @@ |---|---| | [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对:**魔法道具是拿在手里的物品,特性是角色自身的变化**。两者互不相通——特性永不进同调位,魔法道具永不进当局随机渠道。魔法道具跨冒险保留,特性当局清零。 | | [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,特性管当局构筑,两层互不代替。 | -| [战斗结算](../战斗循环/战斗结算.md) | 规则改写型的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | +| [战斗结算](../战斗循环/战斗结算.md) | 专长的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | | [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | +| [关卡节点地图](关卡节点地图.md) | 是获取口的载体,不是特性的属性。专长专属渠道涉及节点类型词表的封闭枚举,影响面登记在 06。 | | [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集。 | -| [关卡节点地图](关卡节点地图.md)、商店 | 是获取口的载体,不是特性的属性。 | | [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | ## 依赖与输出 | 类型 | 内容 | |---|---| -| 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包 | -| 依赖(数据) | `relics.tres`(规则改写型定义行)、`adventure.tres`(属性加成型配额与值)、`shop.tres`(货架取舍) | -| 输出(对外) | 持有集、生效中的形态投影、剩余候选池、档位求值结果 | +| 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包、三选一界面 | +| 依赖(数据) | `relics.tres`(专长定义行)、`adventure.tres`(属性提升种类配额与值)、`shop.tres`(货架取舍) | +| 输出(对外) | 持有集、生效中的分类投影、剩余候选池、档位求值结果、可用重抽次数 | | 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | ## P0 最小闭环 / P1・P2 后置 -- **P0(已实现)**:两种形态可定义 → 进入候选池 → 在两个获取口之一被选中 → 当局生效 → 收束清零。 -- **P1 后置**:两种形态按渠道分开(见第 4 节的在册事项);两项合成高阶项;同一标签收集到四项以上的后期表达。 +- **P0(已实现)**:两类可定义 → 进入候选池 → 在获取口被选中 → 当局生效 → 收束清零。 +- **P1 后置**:三类渠道按 4.1 分工(含专长专属节点的设立方式,待拍板);专长获取项入池;刷新次数入池;两项合成高阶项;同一标签收集到四项以上的后期表达。 - **P2 后置**:商店里的攻击类型转换服务;喂雷流派是否保留(尚未拍板,登记在 [06-待办清单](../../06-待办清单.md))。 ## 调参表 @@ -117,27 +181,37 @@ | 参数 | 取值域 | 事实源 | |---|---|---| -| 规则改写型定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | -| 属性加成型种类 | 封闭词表:攻击 / 生命上限 / 护甲 / 金币 / 行动点 / 恢复 | `game/data/schemas/adventure_table.gd` | -| 属性加成型稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | -| 各形态种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | +| 专长定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | +| 属性提升种类 | 封闭词表:攻击 / 生命上限 / 护甲 / 金币 / 行动点 / 恢复(**刷新次数、专长获取两项尚未入表**,见待办) | `game/data/schemas/adventure_table.gd` | +| 属性提升稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | +| 各属性提升种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | +| 专长获取的全局限量 | 整数(一局内可获得的次数上限) | 同上 | | 一次三选一的候选展示数 | [1,6] | 同上 | ## 验收标准 -1. 两种形态走同一套获取流程,代码里只有一个表示"已持有特性"的集合。 +1. 两类走同一套获取流程,代码里只有一个表示"已持有特性"的集合。 2. 一次冒险内获得的特性在之后任何关卡都生效;开新冒险后持有集为空。 3. 一项被选定的特性不再出现在任何后续获取口。 -4. 每个标签至少有一项挂在排雷侧的结算触发点上(防止规则改写型沦为纯战斗数值)。 -5. 玩家可见的文案不出现形态名与内部分类标签——只写效果,归类让玩家自己推断。 -6. 文档与代码里提到它时只有"特性"这一个名字;需要区分形态时用"规则改写型/属性加成型"描述,不得另造称呼。 +4. 每个标签至少有一项挂在排雷侧的结算触发点上(防止专长沦为纯战斗数值)。 +5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 +6. 文档与代码里提到它时只有"特性"这一个名字;需要区分类别时用"属性提升/专长"描述,不得另造称呼。 +7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 ## 待办 -全部待办单点登记于 [06-待办清单](../../06-待办清单.md)(BD 分层条目、呈现三处待改条目),本节不复制。 +全部待办单点登记于 [06-待办清单](../../06-待办清单.md)(BD 分层条目、命名统一后续条目),本节不复制。 + +本节只点出三条由本版新立、尚未登记的判断来源: + +- **金币与恢复的归属待拍板(本版最要紧的一条)**:现行属性提升池里有金币袋与恢复两项,按本版定义它们都不算"角色自身得到的提升"——金币进钱包、恢复是即时兑付,**两者都不进持有集、不持续生效,因此没有"获得→持有→清零"的生命周期**,与特性不共享生命周期。选项:甲=移出特性,另立一类(即时兑付/补给,不进持有集),"特性=自身提升"由此名副其实,**但档位配额 70/25/3 是结构锚,动总量须重裁而非调参**;乙=放宽特性定义为"一次冒险内抽到的增益",GP 与回复也算,代价是判据句「带在自己身上的是特性」失效、与魔法道具的边界软化。尚未拍板,本版不动数据。 +- **专长总量与档位阈值的匹配**:见 4.1 末段(确定性渠道一局两次 vs 档二需同标签 4 件)。 +- **顶层命名待确认**:「特性」这个名是否保留,取决于上一条怎么判——若 GP 与回复移出,则"特性=自身提升"成立、名不必改;若留下,则需换一个能容纳即时兑付的中性名。用户在 2026-10-05 会话中对顶层名提出质疑,尚未收口。 ## 版本历史 | 版本 | 日期 | 变更 | |---|---|---| -| v1.0 | 2026-10-05 | 首次为本概念立定义文档。此前它按内部分类被叫成三个名字,各处互相冲突的定义以本文档为准:统一名词"特性",把原先分开称呼的两类收敛为形态枚举;把性质定为「角色自身得到提升」而非「获得物品」,以此与魔法道具(持有物)划清。 | +| v1.0 | 2026-10-05 | 首次为本概念立定义文档。此前它按内部分类被叫成三个名字,各处互相冲突的定义以本文档为准:统一名词"特性",把原先分开称呼的两类收敛为一个对象下的分类;把性质定为「角色自身得到提升」而非「获得物品」,以此与魔法道具(持有物)划清。 | +| v1.1 | 2026-10-05 | 分类重构(用户拍板):两类由「规则改写型 / 属性加成型」改为「**属性提升**(ASI)/ **专长**(Feat)」,属性提升内部再分纯属性组(生命上限 / AC / 攻击)与特殊组(行动点上限 / 刷新次数 / 专长获取)。获取途径由两个共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店),并在通用渠道内嵌罕见旁路「专长获取」以提供概率性惊喜。新增:刷新次数作用对象的例外登记、金币与恢复归属的待拍板项、专长专属节点对节点类型封闭枚举的影响面。 | +| v1.2 | 2026-10-05 | 专长渠道落定(用户拍板):专长的专属渠道定为**关底 Boss 击败后**兑付——不新增节点类型,节点类型仍为封闭枚举五种,改动落在 Boss 节点兑付面(此前的"是否扩类"悬案由此收口)。罕见旁路明确为"普通奖励里的专长 N 选一"。新增:专长总量与档位阈值(2 件档一 / 4 件档二)的匹配观察项、最终关是否兑付的待确认点;金币与恢复的处置补上生命周期判据与甲乙两案。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 385a1614..40a70f08 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -579,13 +579,14 @@ entities: owner: design/gdd/systems/冒险循环/特性.md attributes: definition: 一次冒险之内角色自身得到的提升。它不是持有物——带在自己身上的是特性,拿在手里的是魔法道具;两者由此分开 - form: 封闭枚举 {rule, stat}。rule 规则改写型——在结算管线的某个挂点上给自己加一条规则,同标签持有项数达阈值时质变;stat 属性加成型——抬自己的某项属性数值,写入冒险加算区。两者同属一个对象、共用一份持有集与一份生命周期,是形态枚举而非两个系统 - scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);时间范围 = 整局冒险,跨关携带、关间不清零;归属范围 = 不进账号永久进度,不带到下一次冒险 - lifecycle: 候选池构建(冒险开局一次)→ 在两个获取口之一出现(三选一形式)→ 选定(自池中剔除不再复现)→ 持有生效(跨关携带)→ 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 两个获取口——战场奖励(每关通关一次,最终关不给;关卡节点图奖励节点共用同一候选池)与商店(花局内金币,口径为「训练」)。**现行两口共用同一候选池**,两形态按渠道分离已定尚未实施,登记于 06-待办清单 BD 分层条目 + categories: 封闭两类 {属性提升 ASI, 专长 Feat}(v1.1 起;v1.0 曾用 {rule, stat} 形态枚举,已作废)。属性提升——抬角色某项基础值或给他多一次选择的机会,内分纯属性组〔生命上限 / AC / 攻击〕与特殊组〔行动点上限 / 刷新次数 / 专长获取〕,落冒险加算区与钱包;专长——在结算管线的某个挂点上给自己加一条规则,同标签持有项数达阈值时质变。两者同属一个对象、共用一份持有集与一份生命周期,是分类而非两个系统 + scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,跨关携带、关间不清零;归属范围 = 不进账号永久进度,不带到下一次冒险 + lifecycle: 候选池构建(冒险开局一次)→ 在获取口出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长三选一,不占原本获取口)→ 持有生效(跨关携带)→ 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 + acquisition: 三条渠道的**目标分工**——专长走关底 Boss 击败后(专属三选一、时机确定;**不新增节点类型**,挂在 Boss 节点兑付面上);属性提升走奖励节点(每关通关一次,最终关不给)与商店(花局内金币,口径为「训练」)。罕见旁路:属性提升的通用渠道里嵌一个罕见且全局限量的「专长获取」项,拿到立刻开一次专长 N 选一。**现行实现三渠道共用同一候选池、两类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 特性永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 - data_sources: relics.tres(rule 形态逐项定义)/ adventure.tres(stat 形态配额与值)/ shop.tres(货架取舍) - naming_note: 2026-10-05 命名统一——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现统一为「特性」,需要区分时以形态修饰语描述,不另造称呼 + data_sources: relics.tres(专长逐项定义)/ adventure.tres(属性提升种类配额与值)/ shop.tres(货架取舍) + open_questions: ①gp(金币袋)与 heal(恢复)两项现行在属性提升池内,但都不进持有集、不持续生效、**没有生命周期**,按「自身得到提升」的定义是否仍属本类待拍板(甲案移出另立「即时兑付」类、乙案放宽定义;动池须重裁档位结构锚);②刷新次数可同时出现在奖励节点与商店两个渠道——这是渠道白名单问题,不产生第三个分类;③最终关 Boss 后是否也兑付专长待确认;④确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察 + naming_note: 2026-10-05 命名统一 + 分类重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现统一为「特性」,需要区分时用「属性提升 / 专长」描述,不另造称呼 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] - name: adventure_table diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index 508c5be5..544263e0 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -13,10 +13,13 @@ class_name AdventureTable extends Resource -## 概念指路:本表的属性加成型特性,与 relics.tres 的规则改写型特性,同属一个对象—— +## 概念指路:本表的属性提升,与 relics.tres 的专长,同属一个对象—— ## 「特性」(一次冒险内角色自身得到的提升)。定义见 design/gdd/systems/冒险循环/特性.md。 -## 两者是它的形态枚举(form = rule / stat),不是两个系统;本表承载 stat 形态的配额与值。 -## (2026-10-05 命名统一:旧称「数值件」→ 属性加成型特性;常量与字段随之前缀 feature_*。) +## 两者是它的两个分类(属性提升 ASI / 专长 Feat),不是两个系统;本表承载「属性提升」类的种类配额与件值。 +## (2026-10-05 命名统一:旧称「数值件」→ 属性提升;常量与字段随之前缀 feature_*。 +## 2026-10-05 分类重构:属性提升内部分纯属性组〔生命上限 / AC / 攻击〕与特殊组 +## 〔行动点上限 / 刷新次数 / 专长获取〕;刷新次数与专长获取两项尚未入表——见 06-待办清单。 +## gp 与 heal 两项是否仍属本类待拍板,见特性文档「待办」节。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 ## aux_item 池种退役(迭代 11 第①批 T7——同调批出池);heal 恢复件新入池(v2.2 令牌池追认 b)。 const FEATURE_KINDS: Array[String] = ["attack", "max_hp", "armor", "gp", "ap", "heal"] diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index f8881546..cadf3a03 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -1,13 +1,14 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、 -# 规则改写型特性带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) +# 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) -# 概念指路:本表的规则改写型特性,与 adventure.tres 的属性加成型特性,同属一个对象—— +# 概念指路:本表的专长,与 adventure.tres 的属性提升,同属一个对象—— # 「特性」(一次冒险内角色自身得到的提升)。定义见 design/gdd/systems/冒险循环/特性.md。 -# 两者是它的形态枚举(form = rule / stat),不是两个系统;本表承载 rule 形态的逐项定义。 -# (2026-10-05 命名统一:旧称「流派件」→ 规则改写型特性;表名与 relic_id 沿用历史命名, -# 与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。) -# 数据配置 RelicTable schema(特性·规则改写型定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 +# 两者是它的两个分类(专长 Feat / 属性提升 ASI),不是两个系统;本表承载「专长」类的逐项定义。 +# (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「专长」; +# 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 +# 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见特性文档 4.1 节。) +# 数据配置 RelicTable schema(特性·专长定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 # 定义表——AuxItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 @@ -17,7 +18,7 @@ # 仅校验键域不禁纯增益(专项论证件以 positive_only 批注登记,人工清单呈报)。 # 档位激活(整合定稿 设计工具 1——以撒套装/小骨铭文):同标签计数 ≥2→档一(流派核心规则)/≥4→档二 # (完全体);散件单体保底=每件效果独立生效,档位只做质变(反例 B-2)——引擎纯函数 RelicsEngine。 -# 🔴 层级纪律(任务书红线 2):规则改写型特性只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位 +# 🔴 层级纪律(任务书红线 2):专长只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位 # (aux_items 表)/局外树(T8 节点表);扫雷触发点铁律:每流派 ≥1 行 hook ∈ MINE_HOOKS(加载校验, # 违反=红线①触碰面)。 class_name RelicTable From 33fcac79e851b9b0829b95af3f6861261817c785 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 03:01:13 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=A5=96=E5=8A=B1=20v2.0=EF=BC=9A?= =?UTF-8?q?=E9=A1=B6=E5=B1=82=E6=94=B9=E5=90=8D=20+=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=B8=BA=E4=B8=A4=E6=A0=B9=E8=BD=B4=EF=BC=88=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E8=BD=B4=20=C3=97=20=E6=B8=A0=E9=81=93=E8=BD=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 顶层概念「特性」改名为「奖励(Reward)」。改名动因:这个筐里既装 "角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物" 已经切不开——边界判据改由生命周期承担: 一次冒险内获得、冒险收束即清零的是奖励;跨冒险跟着你走的是魔法道具。 分类由两类扩为三个枚举(分类轴 = 给的是什么): - 机制类(专长 Feat) → relics.tres - 属性提升类(ASI,生命/AC/攻击三轴)→ adventure.tres - 资源与机会类(命名待定:行动点上限/刷新次数/金币/回复)→ adventure.tres 类内异质性显式登记:金币与回复是即时兑付,不进持有集、不持续生效, 与行动点上限/刷新次数生命周期不同。 新增第 2 节「渠道轴 × 分类轴」交叉开关表:机制类主渠道=关底 Boss 击败后(不新增节点类型),罕见旁路=奖励节点/商店的「专长获取」; 属性提升类与资源与机会类=奖励节点 + 商店。两根轴互不决定。 gp/heal 不再当作"该移出去的脏东西"(用户 2026-10-05 选暂不处置= 不做结构性迁移、不动配额),改为安置在资源与机会类里并登记异质性。 同步:02-系统清单(文档树改名 + ADVENTURE_FEATURE → ADVENTURE_REWARD + v1.5)、06-待办清单(BD 分层条目改写 + 新立「两个新种类入池」条目 + 「命名统一后续」补 feature_* → reward_* 对齐项)、entities.yaml (feature 条目 → reward,新增 axes / 三类 categories / open_questions)、 两个 schema 的概念指路注释、battle.md / level-map.md / HUD框架.md 称谓。 未动:数据层数值与表结构(值零变更);feature_* 标识符尚未换到 reward_*(属临时态,已登记待办,须在可跑冒烟批次收口);game/ 下 运行层称谓换名同批。本会话按测试执行两入口铁规零测试。 --- design/gdd/02-系统清单.md | 5 +- design/gdd/06-待办清单.md | 34 ++-- design/gdd/systems/冒险循环/奖励.md | 232 +++++++++++++++++++++++ design/gdd/systems/冒险循环/特性.md | 217 --------------------- design/gdd/systems/表现与支撑/HUD框架.md | 4 +- design/gdd/ux/battle.md | 10 +- design/gdd/ux/level-map.md | 2 +- design/registry/entities.yaml | 27 +-- game/data/schemas/adventure_table.gd | 16 +- game/data/schemas/relic_table.gd | 12 +- 10 files changed, 292 insertions(+), 267 deletions(-) create mode 100644 design/gdd/systems/冒险循环/奖励.md delete mode 100644 design/gdd/systems/冒险循环/特性.md diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index dc3ba99d..e8dec1a8 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,7 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | -| `特性.md` | 一次冒险内角色自身得到的提升(属性提升 / 专长两类) | 已实现·2026-10-05 新立定义·v1.1 分类重构 | +| `奖励.md` | 一次冒险内各渠道给予玩家的增益总称(机制类 / 属性提升类 / 资源与机会类三个枚举 × 奖励节点·商店·Boss 击败后三条渠道) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | ### 跨局循环(`systems/跨局循环/`) @@ -97,7 +97,7 @@ | 冒险循环 | 关卡节点图生成 | `NODE_MAP_GENERATION` | —(新立无旧代号) | | 冒险循环 | 冒险结构 | `ADVENTURE_STRUCTURE` | c2 | | 冒险循环 | 难度曲线与Boss | `DIFFICULTY_CURVE` | c3 | -| 冒险循环 | 特性 | `ADVENTURE_FEATURE` | —(新立无旧代号) | +| 冒险循环 | 奖励 | `ADVENTURE_REWARD` | `ADVENTURE_FEATURE`(2026-10-05 v2.0 改名退役) | | 跨局循环 | 元进度 | `META_PROGRESS` | c4 | | 表现与支撑 | HUD框架 | `HUD_FRAMEWORK` | d1 | | 表现与支撑 | 数据配置 | `DATA_CONFIG` | d2 | @@ -130,3 +130,4 @@ | v1.2 | 2026-10-03 | R3 清账批(gdd_lint 分域随批):四处状态单元格日期批注迁出——敌人系统行事件见敌人系统.md 版本历史 v0.5(技能池批);元进度行见本表 v0.8;camp/shop 行=两文 v1.0 落文(2026-09-30 三裁决执行批);语义零变更 | | v1.3 | 2026-10-05 | 立《特性》:一次冒险内角色自身得到的提升——此前按内部分类被叫成三个名字(规则类称"流派件"、属性类称"数值件"、界面称"本关强化"),现收敛为一个对象的两种形态枚举;文档树冒险循环补行 + 命名对照表补 `ADVENTURE_FEATURE` 行 | | v1.4 | 2026-10-05 | 《特性》v1.1 分类重构:两类由"规则改写型 / 属性加成型"改为"属性提升(ASI)/ 专长(Feat)",属性提升内部再分纯属性组与特殊组;获取途径由两口共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店)+罕见旁路"专长获取" | +| v1.5 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(机制类 / 属性提升类 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 1a47dd10..af870bd1 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -25,33 +25,35 @@ **设计知识存续口径**:七流派完整件表/逐项反例条件表/天赋树后备语言(哈迪斯 2 预算制扩容/邻接树改型/GP 价格通胀防线)存整合定稿,随实施批文档吸收迁入各 GDD 正主(元进度/node-reward/战斗结算/地形变异/行动经济/魔法道具边界句/商店 spec)——**吸收完成前定稿不删**;喂雷流待办见上条遗留登记。 -#### 冒险 BD 两类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) +#### 冒险 BD 各分类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **特性**(2026-10-05 定名,定义见 [特性](systems/冒险循环/特性.md)):**专长**(改规则、带流派标签与档位激活,构筑核心)与**属性提升**(抬属性,写统一加算区;账本实为冒险域、关间不清零)两类。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」亦作废。现行两类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),专长只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奖励**(2026-10-05 定名,v2.0 由「特性」改名,定义见 [奖励](systems/冒险循环/奖励.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源与机会类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 -**用户定案(2026-10-05)**:三条渠道分工——**专长走关底 Boss 击败后**(专属三选一,时机确定,构筑节奏可预期);**属性提升走奖励节点与商店训练**(商店口径仍为「训练」)。在属性提升的通用渠道里嵌一个**罕见且全局限量**的「专长获取」项,小概率出现、拿到立刻开一次专长 N 选一,为确定性主渠道加一层赌博感。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。 +**用户定案(2026-10-05)**:分类 × 渠道交叉开关表——**机制类**(专长)主渠道=关底 Boss 击败后(专属三选一,时机确定,构筑节奏可预期),罕见旁路=奖励节点/商店里小概率冒出的「专长获取」,商店不出现;**属性提升类**=奖励节点 + 商店(口径「训练」);**资源与机会类**=奖励节点 + 商店;Boss 击败后是否也出这两类=待定。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 -原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:专长挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 +原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:机制类挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 -**待拍板/待观察三项**:① **属性提升池里的 gp(金币袋)与 heal(恢复)两项**,按「角色自身得到的提升」的定义是否仍属本类——两者都不进持有集、不持续生效,**没有"获得→持有→清零"的生命周期**。甲案=移出特性另立「即时兑付/补给」类(代价:档位配额 70/25/3 是结构锚,动总量须重裁非调参);乙案=放宽特性定义容纳它们(代价:判据句「带在自己身上的是特性」失效,与魔法道具边界软化)。② **最终关 Boss 后是否也兑付专长**(现行奖励口径是最终关不给——没有后续关卡可消费)。③ **专长总量与档位阈值的匹配**:确定性渠道一局只兑付两次(若最终关不给),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠罕见旁路补齐,是否合预期归曲线调参批观察。 +**gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源与机会类(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 -**归属**:[特性](systems/冒险循环/特性.md)(定义与目标分工)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 +**待拍板/待观察四项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量——取决于以哪层共性为主),以及**回复是否属该类**(也可能独立成第四类)。② **最终关 Boss 后是否也兑付专长**(现行奖励口径是最终关不给——没有后续关卡可消费)。③ **专长总量与档位阈值的匹配**:确定性渠道一局只兑付两次(若最终关不给),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠罕见旁路补齐,是否合预期归曲线调参批观察。④ **Boss 击败后是否也出属性提升类与资源与机会类**(现标待定)。 -**状态**:分工已定,**实施待排批**;两项待拍板(2026-10-05 更新) +**归属**:[奖励](systems/冒险循环/奖励.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 -#### 属性提升两个新种类入池——刷新次数、专长获取(2026-10-05 立) +**状态**:分工已定,**实施待排批**;四项待拍板/待观察(2026-10-05 v2.0 更新) -**现状**:[特性](systems/冒险循环/特性.md) v1.1 立了属性提升的特殊组三项,其中**行动点上限**已在池(罕见档),**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为特性授予的**重抽次数,两者不是一回事,入池前须先划清边界。 +#### 资源与机会类两个新种类入池——刷新次数、专长获取(2026-10-05 立) + +**现状**:[奖励](systems/冒险循环/奖励.md) v2.0 立了资源与机会类四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 **连带约束**:`FEATURE_KINDS` 词表封闭(断点附随件与牌库剔除态依赖它),扩种类须走 `adventure_table.gd` + registry 同步修订;档位配额是**结构锚**(普通 70 / 稀有 25 / 罕见 3 = 98 张,入 schema validate 硬断言),新种类入池要占配额——**改总量须重裁而非调参**。专长获取须带全局限量(一局内可获得次数上限)。 -**归属**:[特性](systems/冒险循环/特性.md) 调参表 + [冒险结构](systems/冒险循环/冒险结构.md) 共享池账本节;数值所有权归 [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md) +**归属**:[奖励](systems/冒险循环/奖励.md) 调参表 + [冒险结构](systems/冒险循环/冒险结构.md) 共享池账本节;数值所有权归 [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md) **状态**:待排批——须在可跑冒烟的迭代批次内完成 -#### 内部分类禁写入玩家可见面——特性呈现三处违规待改(2026-10-04 用户立意登记) +#### 内部分类禁写入玩家可见面——奖励呈现三处违规待改(2026-10-04 用户立意登记) -**现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项规则改写型特性的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 +**现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项机制类奖励的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 **连带裁点**:档位激活(同标签 2 件档一/4 件档二)若完全不呈现,玩家只能靠悟——三路待裁:甲=纯隐藏、机制照跑(以撒套装式,最贴用户「流派是玩家挖掘出来的」原则);乙=档位达成那一刻给一次性风味反馈、不点破流派名;丙=连档位机制一起退役。 @@ -59,9 +61,13 @@ **状态**:方向已明确(禁写类别),违规改法与档位呈现三路待讨论(2026-10-04 登记,后续展开) -#### 特性命名统一后续——代码标识符与文件名的对齐(2026-10-05 立) +#### 奖励命名统一后续——代码标识符与文件名的对齐(2026-10-05 立) -**现状**:概念已统一为「特性」(定义见 [特性](systems/冒险循环/特性.md))。本期完成三件——① 定义文档落位;② 称谓统一(代码注释与玩家可见文案,94 处);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 feature_* 词族,112 处,值零变更)。**未完三件**:① 规则改写型那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 +**现状**:概念已统一为「奖励」(2026-10-05 v2.0 由「特性」改名,定义见 [奖励](systems/冒险循环/奖励.md))。已完成三件——① 定义文档落位(`design/gdd/systems/冒险循环/奖励.md`);② 称谓统一(代码注释与玩家可见文案,94 处+design/ 侧随改名批同步);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 `feature_*` 词族,112 处,值零变更)。 + +**未完四件**:⓪ **`feature_*` 词族随顶层改名再换到 `reward_*`**(2026-10-05 v2.0 新增)——`FEATURE_KINDS` / `feature_quota()` / `feature_value()` / `feature_candidate_count` / `feature_quota_*` / `feature_value_*`,涉及 `adventure_table.gd` + `adventure.tres` 键名 + registry;**注意** `adventure.tres` 的键名是存档外的表数据,换名只动键不减值,但 `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它,须走本表 + registry 同步修订。① 机制类那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 + +**次序建议**:⓪ 与 ① 同为"词族对不齐",可同批;② 涉及运行层最广,单批;③ 须与存档版本迁移一起裁。**顶层已改名而代码仍是 `feature_*`,属"文档与代码分开"的临时态**,应在下一个可跑冒烟的批次内收口。 **状态**:待实施——须在可跑冒烟的迭代批次内完成(本会话按测试执行两入口铁规零测试,改名无法自证) diff --git a/design/gdd/systems/冒险循环/奖励.md b/design/gdd/systems/冒险循环/奖励.md new file mode 100644 index 00000000..8759401b --- /dev/null +++ b/design/gdd/systems/冒险循环/奖励.md @@ -0,0 +1,232 @@ +# 奖励(Reward) + +> 一次冒险之内,通过各渠道给予玩家的**增益总称**——奖励节点给的、商店里买的、打赢关底 Boss 给的,都是奖励。它装的是"这一局你捞到了什么",不管从哪个渠道来。 +> +> 它是一个概念,不是一套东西。下面有**两根互不相干的轴**: +> +> - **分类轴**回答"给的是什么"——三个枚举:机制类 / 属性提升类 / 资源与机会类; +> - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败后。 +> +> 一个奖励属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 +> +> 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是奖励的唯一定义文档。 +> +> 数值纪律:本文件只写概念、取值域与指路;每件给多少、效果是什么一律不进正文,事实源是 `game/data/tables/relics.tres` 与 `game/data/tables/adventure.tres`。 + +## 设计目的 + +一次冒险要走三关,如果走完时角色和开局毫无区别,中途的每一次取舍就都不算数了。奖励就是那个把"这一局玩成了什么样"落下来的东西:让玩家在冒险过程中不断变强,且每一局变强的方向不同。 + +它同时要和跨冒险的成长隔开:永久保留的东西是[魔法道具](../排雷循环/魔法道具.md)(带在身上的物品)与[元进度](../跨局循环/元进度.md)(账号级的树),奖励只在当局存在,冒险收束即清零——它不是"你的存档变强了",而是"这一次下矿的你变强了"。 + +**边界判据(一句话)**:**一次冒险内获得、冒险收束即清零的,是奖励;跨冒险跟着你走的,是魔法道具。** + +这条判据走的是生命周期,不走"是不是物品"。原因:奖励这个筐里既装"角色自身的变化",也装金币这类一次性兑付物——用"拿在手里 vs 带在身上"去切,切不开它们,但用"当局清零 vs 跨局保留"能一刀切开,且对筐里所有东西都成立。 + +## 系统范围 + +| 负责 | 不负责 | +|---|---| +| 奖励的定义、三个分类、以及分类与渠道的交叉开关 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | +| 生命周期边界:何时出现、何时生效、何时清零 | 卡面排版与界面呈现细则——见 [HUD框架](../表现与支撑/HUD框架.md) | +| 获取渠道的口径与约束 | 魔法道具与元进度——归上表两份文档 | +| 与相邻概念的边界 | 格面资源、关卡节点、商店本身的规则——归各自所属文档 | + +## 在核心循环中的位置 + +``` +【关内】排雷推理 → 战斗结算 → 通关 ──┐ + ├─→ 得到一份奖励 ─→ 后续关卡带着它继续 + 奖励节点・商店・Boss 击败后 ┘ +``` + +奖励处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 + +## 核心规则 + +### 1. 分类轴:三个枚举 + +奖励只有一个名词;需要区分时才说它属于哪个分类,不给分类另起名字。 + +| 分类 | 它给的是什么 | 落点 | 事实源 | +|---|---|---|---| +| **机制类**(专长 Feat) | 给规则。在结算管线某个挂点上给自己加一条规则;同一标签的持有件数达阈值时质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | +| **属性提升类**(ASI) | 给数字。抬高角色某项战斗属性的基础值 | 冒险加算区的生命上限 / AC / 攻击三轴 | `adventure.tres`(种类配额与值) | +| **资源与机会类**(命名待定) | 给"可用的量"。不抬高战斗属性,也不改规则,而是扩充你能调动的余量与机会 | 行动经济、三选一界面、局内钱包;**不进加算区、多数不进持有集** | `adventure.tres`(种类配额与值) | + +三类的共性:都在当局获得、都在当局消费完或随冒险收束清零;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 + +#### 1.1 机制类:专长 + +专长改的是规则而不是数字——它给自己加一条"在某种条件下,本来不会发生的事现在会发生"的规则。它不是任何一条属性轴的延伸,玩家也无法用"加了多少"来衡量它。 + +专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。这是它和另两类最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 + +#### 1.2 属性提升类:纯属性三项 + +三项,各改一条战斗属性轴: + +| 项 | 改什么 | +|---|---| +| 生命上限 | 抬高角色的生命上限 | +| AC(护甲) | 抬高角色的护甲 | +| 攻击 | 抬高角色的攻击 | + +三项都直接进冒险加算区,跨关携带且关间不清零。这一类是封闭的:只有这三项,多一项就要走文档修订。 + +#### 1.3 资源与机会类:四项(命名待定) + +这类装的是"不抬高战斗属性、也不改规则,但让你更有余地"的东西: + +| 项 | 给什么 | 备注 | +|---|---|---| +| 行动点上限 | 每场战斗首轮可用的行动点更多 | 罕见档 | +| 刷新次数 | 三选一界面可重抽的次数更多 | **作用对象是选择界面,不是角色**——见第 3 节的例外登记;奖励节点与商店两个渠道都可出现 | +| 金币(GP) | 局内钱包进账 | 进钱包即花掉,不进持有集、不持续生效 | +| 回复 | 当即回血 | **是否属本类待确认**——同样是即时兑付,不进持有集、不持续生效 | + +**这类为什么单独存在**:它的成员不满足"抬高战斗属性"(那归属性提升类),也不满足"改写规则"(那归机制类),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 + +**这类内部的异质性(要诚实登记)**:金币与回复是**即时兑付**——拿到就消失,不进持有集,也没有"持有→生效→清零"的过程;行动点上限与刷新次数则进持有账本、当局持续有效。它们被归在同一类是因为"给的是余量"这个共同性质,不是因为生命周期相同。这条异质性在此显式登记,防止后续把金币当成会持续生效的东西去结算。 + +#### 1.4 分类判据 + +**给规则的是机制类,给数字的是属性提升类,给余量的是资源与机会类。** + +拿不准的项按这条判:去掉它之后,角色是"某件以前不会的事做不到了"(机制类)、"某个数字少了一截"(属性提升类)、还是"能调动的余地变小了"(资源与机会类)。 + +#### 1.5 命名出处 + +机制类与属性提升类都取自 DND 规则书的既有名词:专长对应 Feat,属性提升对应 Ability Score Improvement(ASI)。资源与机会类的命名**待定**——候选是「资源」「补给」「余量」,取决于最终把哪一层的共性当作这一类的主要性质。玩家可见文案只写效果,不出现任何分类名。 + +### 2. 渠道轴:与分类的交叉 + +三个渠道各只取走分类的一部分。这张表是奖励概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 + +| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败后 | +|---|---|---|---| +| **机制类**(专长) | 罕见旁路(见 2.2) | 不出现 | **主渠道**(见 2.1) | +| **属性提升类** | 出 | 出(口径「训练」) | 待定 | +| **资源与机会类** | 出 | 出 | 待定 | + +#### 2.1 机制类的主渠道:关底 Boss 击败后 + +专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 + +**不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 + +#### 2.2 罕见旁路:专长获取 + +在属性与资源的通用渠道(奖励节点、商店)里,嵌着一个罕见项——**专长获取**。它小概率出现在候选里,效果是立刻开一次专长 N 选一(N 与机制类主渠道的候选数同源)。 + +它的作用是在确定性之上加一层赌博感: + +- **不推翻确定性**:专长的主渠道仍然是 Boss 击败后,玩家不会因为没 roll 到就构筑不起来; +- **只在旁路制造兴奋**:它不常来,来了就是"这一局走运了",让人有记忆点; +- **罕见且全局限量**:配额极小,且一局内的总量有上限——防止它变成第二条专长渠道,也防止它冲垮档位阈值。 + +玩家视角它长这样:在普通的三选一奖励里,偶尔会冒出一张不一样的卡——选它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态。 + +#### 2.3 商店口径:训练 + +商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励节点那一侧完全相同:都是往同一个持有集里加一项奖励。 + +#### 2.4 在册事项 + +现行实现里**三条渠道完全共用同一个候选池**,三个分类出现条件一样、只有出现概率不同——上表的渠道分工是**目标状态,尚未实施**。相关的实施批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。 + +### 3. 作用对象与范围 + +- **作用对象**:角色本人,以及角色参与的结算过程。奖励不改敌人、不改棋盘生成、不改关卡内容。 +- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源与机会类里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 +- **时间范围**:整局冒险。机制类与属性提升类自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源与机会类里的金币与回复是即时兑付,拿到即消费完。 +- **归属范围**:不进账号永久进度,不带到下一次冒险。 + +### 4. 生命周期 + +``` +未获得 → 进入候选池 → 作为候选出现 → 选定 → 持有/兑付 → 生效 →(冒险收束)清零 + ↑ ↓ + 断点恢复 持有集持续累积 +``` + +| 阶段 | 说明 | +|---|---| +| 候选池构建 | 冒险开局时一次建成。三个分类的候选**现同处一个令牌池**:属性提升类与资源与机会类按配额铺开,机制类按定义表的有效行铺开。 | +| 出现 | 玩家在渠道上看到若干候选(三选一的形式),看不到整个池。 | +| 选定 | 玩家选定一项后,它从池中剔除,此后任何渠道都不会再见。选到「专长获取」时,立刻再开一次专长 N 选一——这次选择走机制类的渠道语义,不占用原本的渠道。 | +| 持有与兑付 | 机制类与属性提升类进入持有集后立即生效,跨关携带;机制类按同一标签的持有项数决定处于哪一档。金币与回复即时兑付,不入持有集。 | +| 清零 | 冒险以任一结局收束时整集清空;下次开局重建。 | +| 断点恢复 | 进行中的冒险把持有集与剩余候选池一并写入断点,续玩后恢复到同一状态(断点里的键名沿用历史形态,不随本次改名变动)。 | + +### 5. 关联与边界 + +| 相邻概念 | 关系(只写关系,不写对方的规则) | +|---|---| +| [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对,判据是生命周期:**奖励当局清零,魔法道具跨冒险保留**。两者互不相通——奖励永不进同调位,魔法道具永不进当局随机渠道。 | +| [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,奖励管当局构筑,两层互不代替。 | +| [战斗结算](../战斗循环/战斗结算.md) | 机制类的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | +| [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | +| [关卡节点地图](关卡节点地图.md) | 是渠道的载体,不是奖励的属性。机制类挂在 Boss 节点兑付面上,节点类型词表零扩类。 | +| [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集,也不是渠道给的。 | +| [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | + +## 依赖与输出 + +| 类型 | 内容 | +|---|---| +| 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包、三选一界面 | +| 依赖(数据) | `relics.tres`(机制类定义行)、`adventure.tres`(属性提升类与资源与机会类的种类配额与值)、`shop.tres`(货架取舍) | +| 输出(对外) | 持有集、生效中的分类投影、剩余候选池、档位求值结果、可用重抽次数 | +| 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | + +## P0 最小闭环 / P1・P2 后置 + +- **P0(已实现)**:三个分类可定义 → 进入候选池 → 在渠道上被选中 → 当局生效 → 收束清零。 +- **P1 后置**:三条渠道按第 2 节分工;刷新次数与专长获取两项入池;两项合成高阶项;同一标签收集到四项以上的后期表达。 +- **P2 后置**:商店里的攻击类型转换服务;喂雷流派是否保留(尚未拍板,登记在 [06-待办清单](../../06-待办清单.md))。 + +## 调参表 + +数值所有权归 [难度曲线与Boss](难度曲线与Boss.md);本文件只列参数与取值域,**不列现行值**。 + +| 参数 | 取值域 | 事实源 | +|---|---|---| +| 机制类定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | +| 属性提升类种类 | 封闭三项:生命上限 / AC / 攻击,扩项走文档修订 | `game/data/schemas/adventure_table.gd` | +| 资源与机会类种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | +| 稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | +| 各分类种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | +| 专长获取的全局限量 | 整数(一局内可获得的次数上限) | 同上 | +| 一次三选一的候选展示数 | [1,6] | 同上 | + +## 验收标准 + +1. 三个分类走同一套获取流程,代码里只有一个表示"已持有奖励"的集合。 +2. 一次冒险内获得的奖励在之后任何关卡都生效;开新冒险后持有集为空。 +3. 一项被选定的奖励不再出现在任何后续渠道。 +4. 每个流派标签至少有一项挂在排雷侧的结算触发点上(防止机制类沦为纯战斗数值)。 +5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 +6. 文档与代码里提到它时只有"奖励"这一个名字;需要区分时用"机制类/属性提升类/资源与机会类"描述,不得另造称呼。 +7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 +8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 + +## 待办 + +全部待办单点登记于 [06-待办清单](../../06-待办清单.md)(BD 分层条目、命名统一后续条目),本节不复制。 + +本节只点出四条由本版新立、尚未登记的判断来源: + +- **资源与机会类的命名待定**:候选「资源」「补给」「余量」,取决于以哪层共性为主。定了之后要回头改本文件的类名与 registry。 +- **回复是否属资源与机会类待确认**:它是即时兑付,与金币同类;也可能被视为独立的第四类。 +- **Boss 击败后是否也给属性提升类与资源与机会类**:现标"待定",未拍板。 +- **机制类总量与档位阈值的匹配**:三关结构下,若最终关 Boss 后不给(没有后续关卡可消费),确定性渠道一局只兑付两次专长——刚好够同标签 2 件档一,档二(4 件)要靠罕见旁路补齐。是否合预期归曲线调参批观察。 + +## 版本历史 + +| 版本 | 日期 | 变更 | +|---|---|---| +| v1.0 | 2026-10-05 | 以「特性」为名首次为本概念立定义文档。此前它按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现收敛为一个对象下的分类;性质定为「角色自身得到提升」而非「获得物品」。 | +| v1.1 | 2026-10-05 | 分类重构:两类由「规则改写型 / 属性加成型」改为「属性提升 / 专长」。 | +| v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | +| **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源与机会类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源与机会类里,同时把它们的即时兑付性质显式登记为类内异质性。 | diff --git a/design/gdd/systems/冒险循环/特性.md b/design/gdd/systems/冒险循环/特性.md deleted file mode 100644 index 61a2f783..00000000 --- a/design/gdd/systems/冒险循环/特性.md +++ /dev/null @@ -1,217 +0,0 @@ -# 特性(Feature) - -> 一次冒险之内,角色**自身得到提升**的载体。它不是包里的东西,而是角色本人的变化——这点决定了它和持有物是两类完全不同的概念,下面的「关联与边界」一节写了怎么区分。 -> -> 同一个概念下有**两类**:抬高数字的(**属性提升**),和改规则的(**专长**)。它们是同一个对象的两个分类,不是两个系统。 -> -> 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是特性的唯一定义文档。 -> -> 数值纪律:本文件只写概念、取值域与指路;每件加多少、效果是什么一律不进正文,事实源是 `game/data/tables/relics.tres` 与 `game/data/tables/adventure.tres`。 - -## 设计目的 - -一次冒险要走三关,如果走完时角色和开局毫无区别,中途的每一次取舍就都不算数了。特性就是那个把"这一局玩成了什么样"落下来的东西:让玩家在冒险过程中不断变强,且每一局变强的方向不同。 - -它同时要和跨冒险的成长隔开:永久保留的东西是[魔法道具](../排雷循环/魔法道具.md)(带在身上的物品)与[元进度](../跨局循环/元进度.md)(账号级的树),特性只在当局存在,冒险收束即清零——它不是"你的存档变强了",而是"这一次下矿的你变强了"。 - -**为什么定为"自身提升"而不是"获得物品"**:一旦把它当成捡到的东西,就和魔法道具(持有物)在玩家心里混成一团——而两者的接入方式、生命周期、获取条件都不同。定为自身的提升,边界一句话就能说清:**带在自己身上的是特性,拿在手里的是魔法道具**。 - -## 系统范围 - -| 负责 | 不负责 | -|---|---| -| 特性的定义与两个分类 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | -| 生命周期边界:何时出现、何时生效、何时清零 | 卡面排版与界面呈现细则——见 [HUD框架](../表现与支撑/HUD框架.md) | -| 获取途径的口径与约束 | 魔法道具与元进度——归上表两份文档 | -| 与相邻概念的边界 | 格面资源、关卡节点、商店本身的规则——归各自所属文档 | - -## 在核心循环中的位置 - -``` -【关内】排雷推理 → 战斗结算 → 通关 ──┐ - ├─→ 得到一项特性 ─→ 后续关卡带着它继续 - 奖励节点・商店・Boss 击败后 ┘ -``` - -特性处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条获取渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 - -## 核心规则 - -### 1. 两类:属性提升(ASI)与专长(Feat) - -特性只有一个名词;需要区分时才说它属于哪一类,不给类别另起名字。 - -| 分类 | 它改的是什么 | 落点 | 事实源 | -|---|---|---|---| -| **属性提升** ASI | 改数字。把角色某项基础值抬高,或给他多一次选择的机会 | 冒险加算区(生命上限 / AC / 攻击三轴、行动点)、钱包、三选一界面 | `adventure.tres`(种类配额与值) | -| **专长** Feat | 改规则本身。在结算管线的某个挂点上给自己加一条规则;同一标签的持有件数达到阈值时发生质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | - -两类的共性:都在当局获得、当局携带、当局失效;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 - -**为什么是同一个对象的两个分类而不是两个东西**:它们共用一份获取流程、一份持有集、一份生命周期。分成两个系统只会让读者以为有两套账,而实际上代码里只有一个持有集。 - -#### 1.1 属性提升:纯属性组与特殊组 - -属性提升内部按"改的是不是角色身上的数字"分成两组。 - -**纯属性组**——三项,各改一条基础属性轴: - -| 项 | 改什么 | -|---|---| -| 生命上限 | 抬高角色的生命上限 | -| AC(护甲) | 抬高角色的护甲 | -| 攻击 | 抬高角色的攻击 | - -**特殊组**——三项,改的不是基础属性,而是能力上限与机会: - -| 项 | 改什么 | 备注 | -|---|---|---| -| 行动点上限 | 抬高每场战斗首轮的行动点基线 | 罕见档 | -| 刷新次数 | 增加三选一界面的重抽次数 | **作用对象不是角色,是选择界面**——见第 2 节的例外说明;可在奖励节点与商店两个渠道出现 | -| 专长获取 | 拿到时立刻开一次专长三选一 | **罕见且全局限量**;它是跨两类的桥梁——本体属属性提升,产出是专长。见第 4.2 节 | - -三轴的分类边界:纯属性组的三项直接进冒险加算区,跨关携带且关间不清零;特殊组的三项各有各的落点,其中刷新次数不进加算区。 - -#### 1.2 专长:机制增加 - -专长改的是规则而不是数字——它给自己加一条"在某种条件下,本来不会发生的事现在会发生"的规则,因此它不是任何一条属性轴的延伸,玩家也无法用"加了多少"来衡量它。 - -专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归所属结算文档,本文件不展开)。这是它和属性提升最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 - -#### 1.3 一句判据 - -**改数字的是属性提升,改规则的是专长。** - -拿不准的项按这条判:如果把它去掉,角色是"某个数字少了一截",那就是属性提升;如果角色是"某件事做不到了",那就是专长。 - -#### 1.4 命名出处 - -两类都取自 DND 规则书的既有名词,不是本项目自造:属性提升对应 Ability Score Improvement(ASI,属性值提升),专长对应 Feat(专长)。玩家可见文案只写效果,不出现这两类名。 - -### 2. 作用对象与范围 - -- **作用对象**:角色本人,以及角色参与的结算过程。特性不改敌人、不改棋盘生成、不改关卡内容。 -- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是特殊组里唯一一条作用对象不是角色的项——留在特性内是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 -- **时间范围**:整局冒险。两类都自获得起对本局剩余所有关卡生效;属性提升写入加算区后,关与关之间不清零。 -- **归属范围**:不进账号永久进度,不带到下一次冒险。 - -### 3. 生命周期 - -``` -未获得 → 进入候选池 → 作为候选出现 → 选定 → 持有 → 生效 →(冒险收束)清零 - ↑ ↓ - 断点恢复 持有集持续累积 -``` - -| 阶段 | 说明 | -|---|---| -| 候选池构建 | 冒险开局时一次建成。两类的候选**现同处一个令牌池**:属性提升按配额铺开,专长按定义表的有效行铺开。 | -| 出现 | 玩家在获取口看到若干候选(三选一的形式),看不到整个池。 | -| 选定 | 玩家选定一项后,它从池中剔除,此后任何获取口都不会再见。选到「专长获取」时,立刻再开一次专长三选一——这次选择走专长的渠道语义,不占用原本的获取口。 | -| 持有与生效 | 进入持有集后立即生效,跨关携带。专长按同一标签的持有项数决定处于哪一档。 | -| 清零 | 冒险以任一结局收束时整集清空;下次开局重建。 | -| 断点恢复 | 进行中的冒险把持有集与剩余候选池一并写入断点,续玩后恢复到同一状态(断点里的键名沿用历史形态,不随本次改名变动)。 | - -### 4. 获取途径 - -#### 4.1 三条渠道的分工 - -| 渠道 | 出哪一类 | 说明 | -|---|---|---| -| **关底 Boss 击败后** | 专长 | 专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。 | -| **奖励节点** | 属性提升 | 每关通关给一次三选一(最终关不给——提升只对后续关卡有意义,最终关没有后续);关卡节点图上的奖励节点同样给一次三选一,与之共用同一个候选池。 | -| **商店** | 属性提升 | 花局内金币购买在架的特性;同一种至多一张,买走即从在架令牌移除。口径是**训练**(见 4.3)。 | - -**确定性是这条分工的核心**:专长走专属渠道,是为了让"这一局的构筑往哪个方向走"由玩家决定,而不是由抽取决定。属性提升走通用渠道,数量稳定、每局可预期,负责把角色垫厚。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 - -**在册事项**:现行实现里奖励节点与商店完全共用同一个候选池,两类出现条件一样、只有出现概率不同,专长也走同一个池——上表的渠道分工是**目标状态,尚未实施**。相关的实施批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。 - -**与节点类型词表的关系(已定)**:专长走关底 Boss 击败后兑付,**不新增节点类型**——[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),改动落在 Boss 节点的兑付面上(击败后追加一次专长三选一),词表零扩类。 - -**专长总量与档位阈值的匹配(待观察,不拍板)**:专长的档位激活是同标签 2 件档一 / 4 件档二(阈值归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。三关结构下,若最终关 Boss 后不给(没有后续关卡可消费),确定性渠道一局只兑付两次专长——刚好够档一,档二要靠罕见旁路补齐。最终关给不给、以及这个总量与阈值是否匹配,属曲线调参批的观察项,登记在 [06-待办清单](../../06-待办清单.md),本文件不预设结论。 - -#### 4.2 罕见旁路:专长获取 - -在属性提升的两个通用渠道里,嵌着一个罕见项——**专长获取**。它小概率出现在奖励节点或商店的候选里,效果是立刻开一次专长 N 选一(N 与专长主渠道的候选数同源)。 - -它的作用是在确定性之上加一层赌博感: - -- **不推翻确定性**:专长的主渠道仍然是关底 Boss,玩家不会因为没 roll 到就构筑不起来; -- **只在旁路制造兴奋**:它不常来,来了就是"这一局走运了",让人有记忆点; -- **罕见且全局限量**:配额极小,且一局内的总量有上限——防止它变成第二条专长渠道,也防止它把 4.1 里说的档位阈值冲垮。 - -玩家视角它长这样:在普通的三选一奖励里,偶尔会冒出一张不一样的卡——选它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态。 - -品类原型是以撒的恶魔房/天使房(Boss 战后概率开启,强力内容不走普通池)与哈迪斯的混沌门(概率出现、强力带代价)。 - -#### 4.3 商店口径:训练 - -商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励那一侧完全相同:都是往同一个持有集里加一项特性。 - -### 5. 关联与边界 - -| 相邻概念 | 关系(只写关系,不写对方的规则) | -|---|---| -| [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对:**魔法道具是拿在手里的物品,特性是角色自身的变化**。两者互不相通——特性永不进同调位,魔法道具永不进当局随机渠道。魔法道具跨冒险保留,特性当局清零。 | -| [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,特性管当局构筑,两层互不代替。 | -| [战斗结算](../战斗循环/战斗结算.md) | 专长的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | -| [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | -| [关卡节点地图](关卡节点地图.md) | 是获取口的载体,不是特性的属性。专长专属渠道涉及节点类型词表的封闭枚举,影响面登记在 06。 | -| [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集。 | -| [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | - -## 依赖与输出 - -| 类型 | 内容 | -|---|---| -| 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包、三选一界面 | -| 依赖(数据) | `relics.tres`(专长定义行)、`adventure.tres`(属性提升种类配额与值)、`shop.tres`(货架取舍) | -| 输出(对外) | 持有集、生效中的分类投影、剩余候选池、档位求值结果、可用重抽次数 | -| 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | - -## P0 最小闭环 / P1・P2 后置 - -- **P0(已实现)**:两类可定义 → 进入候选池 → 在获取口被选中 → 当局生效 → 收束清零。 -- **P1 后置**:三类渠道按 4.1 分工(含专长专属节点的设立方式,待拍板);专长获取项入池;刷新次数入池;两项合成高阶项;同一标签收集到四项以上的后期表达。 -- **P2 后置**:商店里的攻击类型转换服务;喂雷流派是否保留(尚未拍板,登记在 [06-待办清单](../../06-待办清单.md))。 - -## 调参表 - -数值所有权归 [难度曲线与Boss](难度曲线与Boss.md);本文件只列参数与取值域,**不列现行值**。 - -| 参数 | 取值域 | 事实源 | -|---|---|---| -| 专长定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | -| 属性提升种类 | 封闭词表:攻击 / 生命上限 / 护甲 / 金币 / 行动点 / 恢复(**刷新次数、专长获取两项尚未入表**,见待办) | `game/data/schemas/adventure_table.gd` | -| 属性提升稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | -| 各属性提升种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | -| 专长获取的全局限量 | 整数(一局内可获得的次数上限) | 同上 | -| 一次三选一的候选展示数 | [1,6] | 同上 | - -## 验收标准 - -1. 两类走同一套获取流程,代码里只有一个表示"已持有特性"的集合。 -2. 一次冒险内获得的特性在之后任何关卡都生效;开新冒险后持有集为空。 -3. 一项被选定的特性不再出现在任何后续获取口。 -4. 每个标签至少有一项挂在排雷侧的结算触发点上(防止专长沦为纯战斗数值)。 -5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 -6. 文档与代码里提到它时只有"特性"这一个名字;需要区分类别时用"属性提升/专长"描述,不得另造称呼。 -7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 - -## 待办 - -全部待办单点登记于 [06-待办清单](../../06-待办清单.md)(BD 分层条目、命名统一后续条目),本节不复制。 - -本节只点出三条由本版新立、尚未登记的判断来源: - -- **金币与恢复的归属待拍板(本版最要紧的一条)**:现行属性提升池里有金币袋与恢复两项,按本版定义它们都不算"角色自身得到的提升"——金币进钱包、恢复是即时兑付,**两者都不进持有集、不持续生效,因此没有"获得→持有→清零"的生命周期**,与特性不共享生命周期。选项:甲=移出特性,另立一类(即时兑付/补给,不进持有集),"特性=自身提升"由此名副其实,**但档位配额 70/25/3 是结构锚,动总量须重裁而非调参**;乙=放宽特性定义为"一次冒险内抽到的增益",GP 与回复也算,代价是判据句「带在自己身上的是特性」失效、与魔法道具的边界软化。尚未拍板,本版不动数据。 -- **专长总量与档位阈值的匹配**:见 4.1 末段(确定性渠道一局两次 vs 档二需同标签 4 件)。 -- **顶层命名待确认**:「特性」这个名是否保留,取决于上一条怎么判——若 GP 与回复移出,则"特性=自身提升"成立、名不必改;若留下,则需换一个能容纳即时兑付的中性名。用户在 2026-10-05 会话中对顶层名提出质疑,尚未收口。 - -## 版本历史 - -| 版本 | 日期 | 变更 | -|---|---|---| -| v1.0 | 2026-10-05 | 首次为本概念立定义文档。此前它按内部分类被叫成三个名字,各处互相冲突的定义以本文档为准:统一名词"特性",把原先分开称呼的两类收敛为一个对象下的分类;把性质定为「角色自身得到提升」而非「获得物品」,以此与魔法道具(持有物)划清。 | -| v1.1 | 2026-10-05 | 分类重构(用户拍板):两类由「规则改写型 / 属性加成型」改为「**属性提升**(ASI)/ **专长**(Feat)」,属性提升内部再分纯属性组(生命上限 / AC / 攻击)与特殊组(行动点上限 / 刷新次数 / 专长获取)。获取途径由两个共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店),并在通用渠道内嵌罕见旁路「专长获取」以提供概率性惊喜。新增:刷新次数作用对象的例外登记、金币与恢复归属的待拍板项、专长专属节点对节点类型封闭枚举的影响面。 | -| v1.2 | 2026-10-05 | 专长渠道落定(用户拍板):专长的专属渠道定为**关底 Boss 击败后**兑付——不新增节点类型,节点类型仍为封闭枚举五种,改动落在 Boss 节点兑付面(此前的"是否扩类"悬案由此收口)。罕见旁路明确为"普通奖励里的专长 N 选一"。新增:专长总量与档位阈值(2 件档一 / 4 件档二)的匹配观察项、最终关是否兑付的待确认点;金币与恢复的处置补上生命周期判据与甲乙两案。 | diff --git a/design/gdd/systems/表现与支撑/HUD框架.md b/design/gdd/systems/表现与支撑/HUD框架.md index 492afa9e..c198990e 100644 --- a/design/gdd/systems/表现与支撑/HUD框架.md +++ b/design/gdd/systems/表现与支撑/HUD框架.md @@ -216,7 +216,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 已开格的奖励身份常读;未开格类型微光(英雄周围 8 格内的未开格显示资源类型——概念定义见本篇「未开格类型微光」节) | | [魔法道具](../排雷循环/魔法道具.md) | 库存条常读;使用交互与目标拾取;板级叠加层信息呈现 | | [棋盘生成](../排雷循环/棋盘生成.md) | 零合法板的诚实告知(数据面经战斗结算上抛,本系统只管提示形态) | -| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=特性段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | +| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=奖励段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | ## P0 最小闭环 @@ -300,6 +300,6 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | v0.10 | 2026-09-26 | 渲染技术注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗舞台 Node2D 化——BattleStageView 内部由 PanelContainer+Control 站桩改为 Control 壳 + SubViewportContainer + SubViewport + Node2D 世界(StageWorld/StandeeBody),类名/setter 面/公共方法契约不变、调用点零改造;状态图标行与悬停 tooltip 保留 Control 载体挂壳层(伴随件);C6 字体注入挂点复用(set_world_font);三区布局与性能预算(同屏 draw calls < 200)不变;占位表现等价平移(时序常量逐字对照——等价证明=git 提交 7f24b64,文件已按生命周期条款退役) | | v0.11 | 2026-09-27 | 关卡画面 UX spec 建档([level-map](../../ux/level-map.md),关卡画面 UX 批——用户拍板立项):义务清单「关卡节点地图」行挂屏级 spec 指针;屏级权威行与不负责表改按屏分治口径(战斗屏 = battle.md / 关卡画面 = level-map.md)。文档面零机制改动 | | v0.12 | 2026-09-30 | **未开格类型微光概念收口批(用户裁决落位)**:新增「未开格类型微光」节=全项目唯一正主定义(五要素——作用对象=英雄周围 8 格内的未开格〔与可挖域同圈〕/信息内容=只类型不泄雷安/生命周期=入圈亮出圈灭开格灭/关联边界/实装状态=契约定稿〔样张 v2〕游戏内待实施批);核心规则章六节改七节;呈现义务来源清单「地图战斗资源」行补微光指路;验收标准补微光呈现线。背景:该概念此前只活在 06 登记与 art-bible 复述,「常显/全部未开格」无范围表述酿成理解事故(2026-09-30 用户纠正口径),本批落位正主、他文只许指路 | -| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=特性段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | +| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=奖励段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | | v0.14 | 2026-10-03 | **视野迷雾实施批落籍注记(迭代 11 第④批)**:迷雾节补「实施状态」注记(四裁决逐条对账:纯呈现两态逐位一致/暗淡记忆态灰显可读/LIGHT_RADIUS=8 参数化〔提灯 +2 插值位预留未接〕/类型微光仍贴身 8 邻格);实装状态行「待实施批」改「已实装」;验收标准迷雾行去「待实施批落地后验收」括注转正式验收。机制定义零改动(定义一句话/作用范围/生命周期/关联边界/配套拍板全段原样);黑暗区域渲染规格落 art-bible §6.5(v3.5) | | v0.13 | 2026-09-30 | **视野迷雾概念落位批(用户拍板立项)**:新增「视野迷雾」节=正主定义(菱形灯光区+黑暗边界;区外已开格=暗淡记忆态灰显可读、区外未开格=全黑;灯光半径起步=微光环 8 格同圈;纯呈现层,与已退役雾格无关);验收标准补迷雾线;配套拍板随节登记(魔法提灯灯甲外扩 +2 格、类型微光不随视野扩、初始展开收窄后置 Alpha 差异化批)。实施待主线编卡 | diff --git a/design/gdd/ux/battle.md b/design/gdd/ux/battle.md index 9cdfd734..e3ec276a 100644 --- a/design/gdd/ux/battle.md +++ b/design/gdd/ux/battle.md @@ -105,7 +105,7 @@ - 攻击值 + 修正来源角标(战斗在消费、且站桩上无展示) - 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性) - 魔法道具槽(**已实装**:四槽两步交互,详见 [node-reward.md](node-reward.md)——随身战斗用道具的唯一展示面) - - 特性列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) + - 奖励列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) - **D 区扫雷图 · AP 条** - AP 点阵 + 停手按钮(现行) - **RAP 读数(点阵+数字)**——自 C 区迁入,置于弃图刷新按钮旁(2026-09-26 拍板:RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮) @@ -120,7 +120,7 @@ | 区 | 位置与尺寸 | 内容 | |---|---|---| | **B 战斗画面** | 全宽 × 252px | 主角站桩立绘(左)+ 兑现演出区(中)+ 敌人站桩立绘 ×1–3(右)——**全站桩形态(2026-09-20 用户拍板,敌人卡形态待办裁决收口):主角与敌人均为无框立绘+底座,零卡片**;主角与敌人站桩 = **HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板)**;底部结算明细带(24px 摘要 / 结算期 84px 实时流);顶部中央轮次·阶段指示 | -| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;魔法道具槽(预留)、特性列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | +| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;魔法道具槽(预留)、奖励列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | | **D 扫雷图** | 中下 ~1036px × 548px(原右下面板删除后横向加宽,吸收其宽度) | 顶部 AP 条(44px:左——AP 点阵 + 停手按钮;中——RAP 点阵+数字〔自 C 区迁入,贴弃图刷新按钮,2026-09-26 拍板〕;右——图例按钮 + 弃图刷新按钮〔雷图右上角,2026-09-12 拍板〕);棋盘主体(居中,格 36–45px 见方);toast 槽(上缘内侧) | > 布局为 B/C/D 三区——关卡进度条不在战斗屏(节点链进度常驻关卡画面,见 Navigation Position;字母不重编沿用 B/C/D)。 @@ -147,7 +147,7 @@ | B | 结算明细回看 | 模态 overlay | 完整流水逐行(现行 9 类行协议;未生效类行聚合计数) | 关闭 | battle_log_view.gd 改造 | | C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;原「HP/攻击/RAP 显示」——HP 与 RAP 随信息归属拍板迁出本组件) | 只读 | HUDView 拆分 | | C | 魔法道具槽(已实装:四槽两步交互,详见 [node-reward.md](node-reward.md)) | 图标槽 ×4 | 随身战斗用道具的唯一展示面;库存已随迭代 7 落地(C 区四槽+关卡域库存),清库反馈呈现待批 | 悬停 tooltip(道具语义) | 新建(随魔法道具批,已落地) | -| C | 特性列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | +| C | 奖励列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | | D | AP 条 | 点阵 + 按钮组 | 本轮 AP 点阵、停手按钮(左)、**RAP 点阵+数字(自 C 区迁入 2026-09-26——RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮;RAP 清零可见反馈〔行动经济〕载体随迁)**、弃图刷新按钮(右端·雷图右上角;RAP−8 · 本轮剩 N 次——上限 2 次已随行动经济 2026-09-12 修订生效) | 点击提交意图 | HUDView 拆分 | | D | BoardView | 网格 | 棋盘全部格态 + 小人 + 旗 + 变异纹带 + 奖励身份 icon(已开格;绘制优先级 数字>小人>旗>奖励徽章>变异纹带>底色——徽章不进数字区,样张验收项) | 左/右键意图提交 | ✅ board_view.gd 迁移 | | D | 悬停预承诺光标 | 光标态 | 移动/挖/旗三语义光标 + 目标格边框高亮 | 自动 | 新建(排雷玩法×6③) | @@ -204,7 +204,7 @@ │ │ 魔法道具槽(预留) │ │ │ │AP不足·剩0点 │ 12 12 1 ░ 2 ▓▓ ▓▓ │ │ │ │ ◇ ◇ ◇ ◇ │ │ │ └──────────────────┘ 12 █ 1 1 2 ▓▓ ▓▓ │ │ │ ├──────────────────┤ │ │ 1 2 2 🚩 █ 2 1 1 ▓▓ 👫 1 1 ░ │ │ -│ │ 特性列表(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ +│ │ 奖励列表(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ │ │ 锻造+2攻 │ │ │ ▓▓ 1 1 ░ ░ 2 ▓▓ │ │ │ │ (空态=隐藏) │ │ │ ( █=可挖域微光 👫=小人) │ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────┘ │ @@ -440,7 +440,7 @@ | 2026-09-23 | 实现注记(棋盘 Node2D 迁移批 Phase A,代码实装同批;上位裁决 ADR-0006):棋盘渲染 Node2D 化(BoardView = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界,信号/click_cell/_cells 契约保持,新增 push_input 端到端输入探针);格尺寸公式锚点不变(set_cell_area = floor((min(宽,高) − 预留 − (N−1)×格间距) / N) 单点可调),布局与交互语义零改动 | | 2026-09-26 | 实现注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗画面 Node2D 化(BattleStageView = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界,站桩本体 StandeeBody 世界精灵;set_enemies/clear_enemies/on_step_row_fx/gray_all_enemies 等 setter 面签名保持,弹道落点锚点=壳层口径 world_to_shell 单点);状态图标行与悬停 tooltip 保留 Control 载体挂壳层;三区布局尺寸零改动(B 区外框 252px 逐位) | | 2026-09-26 | **封印紫批**(用户拍板):插旗呈现色 旗朱 #C63D22 → 封印紫 #7C3AA8(色相 ≈267°,避开禁入带)——旗字形/已承诺封印框/旗化暴击弹道随批换色;拒绝边框闪语义归危险红;Boss 节点描边归紫赤本色。修订记录历史行旗朱字样系当时口径留痕不改 | -| 2026-09-26 | **战斗屏信息归属批(用户 2026-09-26 三轮纠偏后拍板;代码实装另批——hero_info_panel_view.gd / hud_presenter.gd 改造 + 探针断言迁移,登记待办)**:立两条信息归属原则并全屏贯行——①循环口径原则(战斗屏只展小循环内被消费、影响当下决策的数据;中/大循环资源不得入侵)②单一展示面原则(同一信息全屏唯一展示面;单位本体已承载的信息数据框不重复;资源数字贴唯一消费口)。随拍板落地:① B 区站桩 = HP 与状态效果唯一展示面——C 区 HP 条/HP 文字/立绘占位/状态效果槽×4 退役(重复展示;证据链 = hud_presenter.gd 同一 s.hero.hp/s.hero_effects 双投喂 B/C 两区);② RAP 读数(点阵+数字)迁 D 区 AP 条、置弃图刷新按钮旁(RAP 唯一消费口 = 弃图刷新——就近原则);③ C 区状态槽悬停 tooltip 职责并入 B 区站桩状态小图标;④ GP(中循环)/钥石(大循环)迁出战斗屏,去向挂 OQ14;⑤ C 区改「攻击数据框 + 魔法道具槽(预留)+ 特性列表(预留)」——预留区来自魔法道具与关卡内属性提升的既有立项;⑥ 空态/清零反馈/悬停交互/AC/§13 义务表载体同步改写。**批内遗留两项待拍板(OQ13/14)**:护甲 AC 是否补入 C 区数据框;GP/钥石去向 | +| 2026-09-26 | **战斗屏信息归属批(用户 2026-09-26 三轮纠偏后拍板;代码实装另批——hero_info_panel_view.gd / hud_presenter.gd 改造 + 探针断言迁移,登记待办)**:立两条信息归属原则并全屏贯行——①循环口径原则(战斗屏只展小循环内被消费、影响当下决策的数据;中/大循环资源不得入侵)②单一展示面原则(同一信息全屏唯一展示面;单位本体已承载的信息数据框不重复;资源数字贴唯一消费口)。随拍板落地:① B 区站桩 = HP 与状态效果唯一展示面——C 区 HP 条/HP 文字/立绘占位/状态效果槽×4 退役(重复展示;证据链 = hud_presenter.gd 同一 s.hero.hp/s.hero_effects 双投喂 B/C 两区);② RAP 读数(点阵+数字)迁 D 区 AP 条、置弃图刷新按钮旁(RAP 唯一消费口 = 弃图刷新——就近原则);③ C 区状态槽悬停 tooltip 职责并入 B 区站桩状态小图标;④ GP(中循环)/钥石(大循环)迁出战斗屏,去向挂 OQ14;⑤ C 区改「攻击数据框 + 魔法道具槽(预留)+ 奖励列表(预留)」——预留区来自魔法道具与关卡内属性提升的既有立项;⑥ 空态/清零反馈/悬停交互/AC/§13 义务表载体同步改写。**批内遗留两项待拍板(OQ13/14)**:护甲 AC 是否补入 C 区数据框;GP/钥石去向 | | 2026-09-26 | **信息归属二轮拍板(用户 2026-09-26,OQ13/14 收口)**:① 我方护甲 AC 补入 C 区攻击数据框(唯一展示面——布局表/组件清单/线框图同步);② GP/钥石去向定案:GP = 关卡画面常驻总量 + 战斗结算画面总量+增量,钥石 = 结算画面 + 营地(具体呈现归对应 UX spec 批次);③ 敌方 AC 展示面挂起——用户口径「敌方 AC 无任何展示」与现行代码冲突(standee_view.gd 底库名字行渲染「名字·护甲·AC%d」,系敌人技能池批克制对策可读性义务),证据链已呈报待终裁,本 spec 暂不改敌人站桩行 | | 2026-09-26 | **敌方 AC 展示终裁收口(用户 2026-09-26 终裁)**:敌方 AC 数值全屏退役(任何区不直接展示)、护甲类型改图标方式展示(形状+色相双通道,终稿图标资产归美术批)、敌人站桩底座下名字行退回纯名字+护甲类型图标;旧「克制对策可读性义务」降级承载——类型保留、数值退役。终裁理由(用户口径):HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性。同步改写:信息归属树敌人站桩行、Component Inventory 敌人站桩立绘行、OQ13。**代码实装说明**:`standee_view.gd` 改造(站桩名字行去 AC 数值 + 护甲类型图标化)由并行代码批执行,本批只做文档同步 | | 2026-09-27 | **UX 文档欠账处置批(用户四项拍板:player-journey 不建 / accessibility 不另立改指 HUD框架 / node-reward 改挂魔法道具内容重定批 / level-clear 建档 design/gdd/ux/level-clear.md)**:① 删 §Player Context ⚠️ player-journey 未建注记,OQ1 改收口注记;② §Accessibility 头、§Transitions 减动效行、OQ2 改指 HUD框架「可访问性基线」节 + 设置与本地化待设计清单 #1(tools/doc_link_known.txt 欠账行随之清空);③ 导航残留修正——§Navigation Position 图胜利分支、§Entry/Exit 离开表、§Interaction Map 胜利 overlay 行改按现行代码实态(胜利后返回关卡画面选路;节点覆盖层 = 关卡画面域、落地奖励/恢复节点时开出;胜利/失败 overlay 组件锚 battle_end_overlay.gd)——原「胜利 → 节点奖励/恢复覆盖层」系停点前移批前残留;④ OQ3 过期陈述更正(interaction-patterns.md 2026-09-12 已建成)、OQ8 改收口注记。本批只动文档面,代码零改动 | diff --git a/design/gdd/ux/level-map.md b/design/gdd/ux/level-map.md index 972bf000..43811eb7 100644 --- a/design/gdd/ux/level-map.md +++ b/design/gdd/ux/level-map.md @@ -91,7 +91,7 @@ **布局决策 3 —— 放弃冒险二次确认(2026-09-27 拍板)**:放弃 = 整局冒险终结,不可逆(pattern 7 破坏性确认)。首击转入确认态(按钮文案变「再点一次确认放弃——不可逆」,危险红边框脉冲约 3 秒,超时回落),二击才提交。代价语义(已获大奖励保留、同失败结算)常驻按钮文案。 -**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「特性列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 +**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「奖励列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 ### ASCII Wireframe diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 40a70f08..104043a3 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -574,19 +574,20 @@ entities: mvp_content: L1 全行(切片转正——7 节点链〔单链特例,合法图形态〕、rest_heal_pct=30);L2 全行已落地(2026-09-17 分支节点图批——首张分支图:9 节点〔入口 0 → 中间三层 2/3/2 → Boss 8〕、真实岔路 4 处、奖励点+恢复点各 1、战斗节点 6 + Boss;行值 provisional 归 难度曲线与Boss v0.7;首页直入口已退役〔2026-09-23 用户拍板〕);**L3 全行已落地(2026-09-20 第三关内容批——「第三层 · 灰矮人矿城」:九节点图复用 L2 同模板〔6 战 + Boss + 奖励 + 恢复、真实岔路 4 处〕,行值全 provisional 归 难度曲线与Boss;测试直入口已退役〔2026-09-23〕)**;2026-09-20 GP+商店房批 rewiring:L2/L3 图版 Boss 重编号 8→9、各新增 (8, shop, next[9]) 商店房节点(Boss 前一位必经位),L1 零改动,图合法性六检零新增——必经位由冒烟断言承载;**2026-09-21 冒险结构实现批:三关正式序列生效**(首页「开始冒险」= L1→L2→L3 连探,AdventureRunner 编排——大奖励/生命账本/GP 冒险账本/主种子归冒险结构层,冒烟断言在案)** referenced_by: [冒险结构, 关卡节点地图, 难度曲线与Boss, 棋盘生成, 数据配置] - - name: feature + - name: reward type: concept - owner: design/gdd/systems/冒险循环/特性.md + owner: design/gdd/systems/冒险循环/奖励.md attributes: - definition: 一次冒险之内角色自身得到的提升。它不是持有物——带在自己身上的是特性,拿在手里的是魔法道具;两者由此分开 - categories: 封闭两类 {属性提升 ASI, 专长 Feat}(v1.1 起;v1.0 曾用 {rule, stat} 形态枚举,已作废)。属性提升——抬角色某项基础值或给他多一次选择的机会,内分纯属性组〔生命上限 / AC / 攻击〕与特殊组〔行动点上限 / 刷新次数 / 专长获取〕,落冒险加算区与钱包;专长——在结算管线的某个挂点上给自己加一条规则,同标签持有项数达阈值时质变。两者同属一个对象、共用一份持有集与一份生命周期,是分类而非两个系统 - scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,跨关携带、关间不清零;归属范围 = 不进账号永久进度,不带到下一次冒险 - lifecycle: 候选池构建(冒险开局一次)→ 在获取口出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长三选一,不占原本获取口)→ 持有生效(跨关携带)→ 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工**——专长走关底 Boss 击败后(专属三选一、时机确定;**不新增节点类型**,挂在 Boss 节点兑付面上);属性提升走奖励节点(每关通关一次,最终关不给)与商店(花局内金币,口径为「训练」)。罕见旁路:属性提升的通用渠道里嵌一个罕见且全局限量的「专长获取」项,拿到立刻开一次专长 N 选一。**现行实现三渠道共用同一候选池、两类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 - boundary: 特性永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 - data_sources: relics.tres(专长逐项定义)/ adventure.tres(属性提升种类配额与值)/ shop.tres(货架取舍) - open_questions: ①gp(金币袋)与 heal(恢复)两项现行在属性提升池内,但都不进持有集、不持续生效、**没有生命周期**,按「自身得到提升」的定义是否仍属本类待拍板(甲案移出另立「即时兑付」类、乙案放宽定义;动池须重裁档位结构锚);②刷新次数可同时出现在奖励节点与商店两个渠道——这是渠道白名单问题,不产生第三个分类;③最终关 Boss 后是否也兑付专长待确认;④确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察 - naming_note: 2026-10-05 命名统一 + 分类重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现统一为「特性」,需要区分时用「属性提升 / 专长」描述,不另造称呼 + definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奖励。装的是"这一局你捞到了什么",不管从哪个渠道来 + axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奖励属于哪个分类不决定它从哪个渠道来;交叉关系由 [奖励](design/gdd/systems/冒险循环/奖励.md) 第 2 节开关表定死 + categories: 封闭三类 {机制类, 属性提升类, 资源与机会类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源与机会类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres + scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 + lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 + acquisition: 三条渠道的**目标分工(交叉开关)**——机制类:主渠道=关底 Boss 击败后(不新增节点类型,挂 Boss 节点兑付面),罕见旁路=奖励节点/商店的「专长获取」,商店不出现;属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店;Boss 击败后是否也出后两类=待定。**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奖励;跨冒险跟着你走的是魔法道具**。奖励永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 + data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源与机会类的种类配额与值)/ shop.tres(货架取舍) + open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量),回复是否属该类待确认;②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③最终关 Boss 后是否也兑付专长待确认;④确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察;⑤Boss 击败后是否也出属性提升类与资源与机会类 + naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `reward_*`,属临时态,登记于 06-待办清单 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] - name: adventure_table @@ -597,8 +598,8 @@ entities: fields: | 退役两字段(迭代 10 奖励重构批,2026-09-30 用户拍板):level_clear_hp_bonus(「血回满+上限提升」件随大奖励三件套退役——回血改 clear_heal_pct 部分回血、上限提升改三选一件值列)、keystone_per_level(钥石退役出大奖励改 Boss/精英击杀掉落)。 clear_heal_pct: int [0,100](knob 默认 20——非末关通关部分回血回复生效上限的百分比,封顶上限不回满、满血回 0 合法;难度上压方向,带重扫义务归 难度曲线与Boss) - **2026-10-05 命名统一批**:本表的属性加成型特性字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 特性 条目。 - feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性加成型特性兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) + **2026-10-05 命名统一批**:本表的属性提升类奖励字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 reward 条目(v2.0 顶层改名为「奖励」)。 + feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性提升类奖励兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) feature_value_gp_common: int [0,999](GP 袋件定额入钱包);feature_value_ap_rarest: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](魔法道具件授予件数) ~~bonus_weight_*(E-S 加权洗牌权重族)~~ / ~~bonus_cap_*(种类次数上限族)~~:**v2.2 令牌池换代退役(迭代 12 TP0——2026-10-03 追认 b 实施批;洗牌改令牌 Fisher-Yates、池消耗即上限)** feature_quota_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index 544263e0..35a015a1 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -13,13 +13,15 @@ class_name AdventureTable extends Resource -## 概念指路:本表的属性提升,与 relics.tres 的专长,同属一个对象—— -## 「特性」(一次冒险内角色自身得到的提升)。定义见 design/gdd/systems/冒险循环/特性.md。 -## 两者是它的两个分类(属性提升 ASI / 专长 Feat),不是两个系统;本表承载「属性提升」类的种类配额与件值。 -## (2026-10-05 命名统一:旧称「数值件」→ 属性提升;常量与字段随之前缀 feature_*。 -## 2026-10-05 分类重构:属性提升内部分纯属性组〔生命上限 / AC / 攻击〕与特殊组 -## 〔行动点上限 / 刷新次数 / 专长获取〕;刷新次数与专长获取两项尚未入表——见 06-待办清单。 -## gp 与 heal 两项是否仍属本类待拍板,见特性文档「待办」节。) +## 概念指路:本表的属性提升类与资源与机会类,与 relics.tres 的机制类,同属一个对象—— +## 「奖励」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奖励.md。 +## 它们是它的分类轴上的枚举(机制类 / 属性提升类 / 资源与机会类),不是三套系统; +## 本表承载属性提升类与资源与机会类的种类配额与件值。 +## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」。 +## 常量与字段随之前缀 feature_*,**尚未**随顶层改名换到 reward_*——见 06-待办清单。 +## 分类轴三个枚举:属性提升类〔生命上限 / AC / 攻击〕;资源与机会类〔行动点上限 / +## 刷新次数 / 金币 / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 +## 类内异质性:金币与回复是即时兑付,不进持有集、不持续生效。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 ## aux_item 池种退役(迭代 11 第①批 T7——同调批出池);heal 恢复件新入池(v2.2 令牌池追认 b)。 const FEATURE_KINDS: Array[String] = ["attack", "max_hp", "armor", "gp", "ap", "heal"] diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index cadf3a03..9f18ea30 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -2,13 +2,13 @@ # Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、 # 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) -# 概念指路:本表的专长,与 adventure.tres 的属性提升,同属一个对象—— -# 「特性」(一次冒险内角色自身得到的提升)。定义见 design/gdd/systems/冒险循环/特性.md。 -# 两者是它的两个分类(专长 Feat / 属性提升 ASI),不是两个系统;本表承载「专长」类的逐项定义。 -# (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「专长」; +# 概念指路:本表的机制类(专长),与 adventure.tres 的属性提升类、资源与机会类,同属一个对象—— +# 「奖励」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奖励.md。 +# 它们是它分类轴上的枚举(机制类 / 属性提升类 / 资源与机会类),不是三套系统;本表承载「机制类」(专长 Feat)的逐项定义。 +# (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「机制类(专长)」; # 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 -# 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见特性文档 4.1 节。) -# 数据配置 RelicTable schema(特性·专长定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 +# 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奖励文档 2.1 节。) +# 数据配置 RelicTable schema(奖励·机制类定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 # 定义表——AuxItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 From d472ef061f70705f6e6fbbb52849a0afa00375ba Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 03:21:56 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=A5=96=E5=8A=B1=20v2.1=EF=BC=9A?= =?UTF-8?q?=E4=BA=A4=E5=8F=89=E8=A1=A8=E6=94=B6=E5=8F=A3=20+=20=E8=AE=A1?= =?UTF-8?q?=E4=BB=B7=E7=89=A9=E4=B8=8D=E8=87=AA=E5=94=AE=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、Boss 渠道收口(用户拍板) - Boss 渠道**只出专长**:属性提升类与资源与机会类在此均不出现 - 兑付只发生在**终局前**的 Boss;终局 Boss 不给(打赢时冒险已结束, 无后续关卡可消费)——此前"最终关是否也给"的待定项由此收口 - 交叉表形状定为「一块独占 + 两块并行」:专长靠打赢,其余靠抽取与购买, 两者的获取节奏由完全不同的机制决定 二、金币不进商店:写成规则,不拆分类也不开特例(用户提问) 用户问"资源与机会是否拆开?GP 是单独分类还是特判"。定为第三条路: **计价物不自售**——凡是以某渠道的计价物为内容的奖励,不进该渠道货架。 商店计价物=GP,故 GP 不进商店。 - 不拆第四个分类:分类轴回答"给的是什么",GP 给的是余量,与 AP/刷新 同类;按"能不能进商店"反推分类=用渠道轴去切分类轴,两根轴缠回去 - 不开特例:特例是孤立的、靠记忆维护的;规则对所有渠道成立,将来 任何渠道用自己的计价物当奖励内容时自动适用,不需补第二个特例 - 它是**两轴交叉处的一条约束**,实现上是货架候选构建的过滤条件, 不是奖励自身的属性 三、待确认 - 回复当前也不在商店货架(现行 shop.tres 货架只有攻击/生命上限/护甲/ 行动点四项)。回复不是计价物,严格说不适用于「计价物不自售」—— 它不进商店是同一条规则管还是另有口径,待拍板 - 专长总量:终局 Boss 不给已定,一局确定性兑付次数=终局前 Boss 个数 (三关=两次),而档位阈值是同标签 2 件档一 / 4 件档二,档二须靠 罕见旁路补齐——归曲线调参批观察 同步:06-待办清单(BD 分层条目改写为交叉表 + 待拍板项由四项减为两项)、 entities.yaml(acquisition 收口 + 新增 channel_rule + open_questions 去重)、 02-系统清单 v1.6。验收标准补第 9 条(金币不进商店是规则结果而非分类)。 数据层数值零变更;未 merge 回 master(本会话零测试)。 --- design/gdd/02-系统清单.md | 1 + design/gdd/06-待办清单.md | 18 ++++++++++--- design/gdd/systems/冒险循环/奖励.md | 39 +++++++++++++++++++++-------- design/registry/entities.yaml | 5 ++-- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index e8dec1a8..96c526bf 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -131,3 +131,4 @@ | v1.3 | 2026-10-05 | 立《特性》:一次冒险内角色自身得到的提升——此前按内部分类被叫成三个名字(规则类称"流派件"、属性类称"数值件"、界面称"本关强化"),现收敛为一个对象的两种形态枚举;文档树冒险循环补行 + 命名对照表补 `ADVENTURE_FEATURE` 行 | | v1.4 | 2026-10-05 | 《特性》v1.1 分类重构:两类由"规则改写型 / 属性加成型"改为"属性提升(ASI)/ 专长(Feat)",属性提升内部再分纯属性组与特殊组;获取途径由两口共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店)+罕见旁路"专长获取" | | v1.5 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(机制类 / 属性提升类 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | +| v1.6 | 2026-10-05 | 《奖励》v2.1 交叉表收口:Boss 渠道只出专长(终局 Boss 不给),另两类在此不出现;新增「计价物不自售」规则处理金币不进商店——不拆第四个分类、不开特例,而是两轴交叉处的一条约束 | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index af870bd1..bf116925 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -29,17 +29,27 @@ **现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奖励**(2026-10-05 定名,v2.0 由「特性」改名,定义见 [奖励](systems/冒险循环/奖励.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源与机会类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 -**用户定案(2026-10-05)**:分类 × 渠道交叉开关表——**机制类**(专长)主渠道=关底 Boss 击败后(专属三选一,时机确定,构筑节奏可预期),罕见旁路=奖励节点/商店里小概率冒出的「专长获取」,商店不出现;**属性提升类**=奖励节点 + 商店(口径「训练」);**资源与机会类**=奖励节点 + 商店;Boss 击败后是否也出这两类=待定。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 +**用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— + +| 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后 | +|---|---|---|---| +| 机制类(专长) | 罕见旁路 | 不出现 | **主渠道(独占)** | +| 属性提升类 | 出 | 出(训练) | 不出现 | +| 资源与机会类 | 出 | 出(金币除外) | 不出现 | + +**Boss 渠道是专长的独占渠道**——只出机制类,另两类都不走这里;奖励节点与商店是属性提升类与资源与机会类的两个并行出口。形状是"一块独占 + 两块并行",不是三块平分。**终局 Boss 不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在终局之前的 Boss。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:机制类挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 **gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源与机会类(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 -**待拍板/待观察四项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量——取决于以哪层共性为主),以及**回复是否属该类**(也可能独立成第四类)。② **最终关 Boss 后是否也兑付专长**(现行奖励口径是最终关不给——没有后续关卡可消费)。③ **专长总量与档位阈值的匹配**:确定性渠道一局只兑付两次(若最终关不给),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠罕见旁路补齐,是否合预期归曲线调参批观察。④ **Boss 击败后是否也出属性提升类与资源与机会类**(现标待定)。 +**金币不进商店=一条规则,不是特例**:资源与机会类里只有金币不出现在商店(同类的行动点上限与刷新次数都可以)。v2.1 定为**「计价物不自售」**——凡是以某渠道的计价物为内容的奖励,不进该渠道货架;商店计价物是 GP,故 GP 不进商店。**不拆第四个分类**(按"能不能进商店"反推分类=用渠道轴去切分类轴,两根轴缠回一起),**也不开特例**(特例是孤立的、靠记忆维护的;规则对所有渠道成立,将来自动适用)。它是两轴交叉处的一条约束,实现上是货架候选构建的过滤条件,不是奖励自身的属性。 -**归属**:[奖励](systems/冒险循环/奖励.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 +**待拍板/待观察两项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量——取决于以哪层共性为主),以及**回复的两处待确认**——它是否属该类(也可能独立成第四类)、它不进商店是否受同一条规则管(回复不是计价物,严格说不适用于「计价物不自售」)。② **专长总量与档位阈值的匹配**:终局 Boss 不给已定,一局确定性兑付次数=终局前 Boss 的个数(三关结构下为两次),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠罕见旁路补齐,是否合预期归曲线调参批观察。 -**状态**:分工已定,**实施待排批**;四项待拍板/待观察(2026-10-05 v2.0 更新) +**归属**:[奖励](systems/冒险循环/奖励.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底与货架过滤)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 + +**状态**:分工已定,**实施待排批**;两项待拍板/待观察(2026-10-05 v2.1 更新) #### 资源与机会类两个新种类入池——刷新次数、专长获取(2026-10-05 立) diff --git a/design/gdd/systems/冒险循环/奖励.md b/design/gdd/systems/冒险循环/奖励.md index 8759401b..2901de77 100644 --- a/design/gdd/systems/冒险循环/奖励.md +++ b/design/gdd/systems/冒险循环/奖励.md @@ -82,7 +82,7 @@ |---|---|---| | 行动点上限 | 每场战斗首轮可用的行动点更多 | 罕见档 | | 刷新次数 | 三选一界面可重抽的次数更多 | **作用对象是选择界面,不是角色**——见第 3 节的例外登记;奖励节点与商店两个渠道都可出现 | -| 金币(GP) | 局内钱包进账 | 进钱包即花掉,不进持有集、不持续生效 | +| 金币(GP) | 局内钱包进账 | 进钱包即花掉,不进持有集、不持续生效;**不进商店**(计价物不自售,见 2.4) | | 回复 | 当即回血 | **是否属本类待确认**——同样是即时兑付,不进持有集、不持续生效 | **这类为什么单独存在**:它的成员不满足"抬高战斗属性"(那归属性提升类),也不满足"改写规则"(那归机制类),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 @@ -103,16 +103,20 @@ 三个渠道各只取走分类的一部分。这张表是奖励概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 -| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败后 | +| 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后(见 2.1) | |---|---|---|---| -| **机制类**(专长) | 罕见旁路(见 2.2) | 不出现 | **主渠道**(见 2.1) | -| **属性提升类** | 出 | 出(口径「训练」) | 待定 | -| **资源与机会类** | 出 | 出 | 待定 | +| **机制类**(专长) | 罕见旁路(见 2.2) | 不出现 | **主渠道**(唯一渠道中的确定来源) | +| **属性提升类** | 出 | 出(口径「训练」) | 不出现 | +| **资源与机会类** | 出 | 出(**金币除外**,见 2.4) | 不出现 | -#### 2.1 机制类的主渠道:关底 Boss 击败后 +**这张表的形状**:Boss 渠道是**专长的独占渠道**——只出机制类,另两类都不走这里;奖励节点与商店则是属性提升类与资源与机会类的两个并行出口。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奖励的获取节奏**由完全不同的机制决定**,前者靠打赢,后者靠抽取与购买。 + +#### 2.1 机制类的主渠道:终局前 Boss 击败后 专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 +**终局 Boss 不给**:兑付只发生在**终局之前的 Boss** 身上——打赢最终 Boss 时冒险已经结束,没有后续关卡可消费,给了也无处生效。三关结构下,一局的确定性专长兑付次数由此确定(每个终局前 Boss 一次)。 + **不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 #### 2.2 罕见旁路:专长获取 @@ -131,7 +135,21 @@ 商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励节点那一侧完全相同:都是往同一个持有集里加一项奖励。 -#### 2.4 在册事项 +#### 2.4 金币不进商店:一条规则,不是一个特例 + +资源与机会类里只有**金币**不出现在商店,同类的行动点上限与刷新次数都可以。这里不拆分类、也不给金币开特例,而是把它写成一条**规则**: + +> **计价物不自售**——凡是以某渠道的计价物为内容的奖励,不进该渠道的货架。 + +商店的计价物是金币(GP),所以金币不进商店。写成规则而不是特例,是因为一旦写成特例,"为什么只有它不行"就成了一个孤立的、需要靠记忆维护的例外;写成规则,它对所有渠道都成立——将来任何渠道只要用自己的计价物当奖励内容,这条规则自动适用,不需要再补第二个特例。 + +**为什么不拆成第四个分类**:分类轴回答的是"给的是什么",金币给的是余量,和行动点上限、刷新次数同类——按"能不能进商店"去反推分类,等于用渠道轴的性质去切分类轴,两根轴又缠回一起了。而且为一个只有一项的分类立枚举,读者会以为它和另三类并列是一个重量级的划分,实际它只是某一项恰好踩到了一条经济规则。 + +**这条规则落在哪**:它不属于分类轴,也不属于渠道轴,而是**两轴交叉处的一条约束**——分类白名单先筛一遍,这条规则再筛一遍。实现上它是货架候选构建时的一个过滤条件,不是奖励自身的属性。 + +**待确认**:同类的**回复**当前也不在商店货架上(现行 `shop.tres` 的货架只有攻击 / 生命上限 / 护甲 / 行动点四项)。它不进商店是同一条规则管(回复不是计价物,不适用),还是另有口径,尚未拍板,登记在 [06-待办清单](../../06-待办清单.md)。 + +#### 2.5 在册事项 现行实现里**三条渠道完全共用同一个候选池**,三个分类出现条件一样、只有出现概率不同——上表的渠道分工是**目标状态,尚未实施**。相关的实施批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。 @@ -210,6 +228,7 @@ 6. 文档与代码里提到它时只有"奖励"这一个名字;需要区分时用"机制类/属性提升类/资源与机会类"描述,不得另造称呼。 7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 +9. 金币不出现在商店货架上——这是「计价物不自售」规则的结果,不是给金币单独立的一个分类或特例。 ## 待办 @@ -218,9 +237,8 @@ 本节只点出四条由本版新立、尚未登记的判断来源: - **资源与机会类的命名待定**:候选「资源」「补给」「余量」,取决于以哪层共性为主。定了之后要回头改本文件的类名与 registry。 -- **回复是否属资源与机会类待确认**:它是即时兑付,与金币同类;也可能被视为独立的第四类。 -- **Boss 击败后是否也给属性提升类与资源与机会类**:现标"待定",未拍板。 -- **机制类总量与档位阈值的匹配**:三关结构下,若最终关 Boss 后不给(没有后续关卡可消费),确定性渠道一局只兑付两次专长——刚好够同标签 2 件档一,档二(4 件)要靠罕见旁路补齐。是否合预期归曲线调参批观察。 +- **回复的两处待确认**:① 它是否属资源与机会类(即时兑付,与金币同类,也可能独立成第四类);② 它不进商店,是受「计价物不自售」同一条规则管,还是另有口径——回复不是计价物,严格说不适用该规则。 +- **机制类总量与档位阈值的匹配**:终局 Boss 不给已定,一局的确定性专长兑付次数由"终局前 Boss 的个数"决定。三关结构下是两次,刚好够同标签 2 件档一,档二(4 件)要靠罕见旁路补齐。是否合预期归曲线调参批观察。 ## 版本历史 @@ -230,3 +248,4 @@ | v1.1 | 2026-10-05 | 分类重构:两类由「规则改写型 / 属性加成型」改为「属性提升 / 专长」。 | | v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | | **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源与机会类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源与机会类里,同时把它们的即时兑付性质显式登记为类内异质性。 | +| v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源与机会类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 104043a3..fdd88ff5 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -579,14 +579,15 @@ entities: owner: design/gdd/systems/冒险循环/奖励.md attributes: definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奖励。装的是"这一局你捞到了什么",不管从哪个渠道来 + channel_rule: 计价物不自售——凡是以某渠道的计价物为内容的奖励,不进该渠道货架(商店计价物=GP,故 GP 不进商店)。这是两轴交叉处的一条约束,不是第四个分类也不是特例;实现上是货架候选构建的过滤条件,不是奖励自身的属性 axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奖励属于哪个分类不决定它从哪个渠道来;交叉关系由 [奖励](design/gdd/systems/冒险循环/奖励.md) 第 2 节开关表定死 categories: 封闭三类 {机制类, 属性提升类, 资源与机会类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源与机会类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工(交叉开关)**——机制类:主渠道=关底 Boss 击败后(不新增节点类型,挂 Boss 节点兑付面),罕见旁路=奖励节点/商店的「专长获取」,商店不出现;属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店;Boss 击败后是否也出后两类=待定。**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + acquisition: 三条渠道的**目标分工(交叉开关,v2.1 收口)**——机制类:主渠道=**终局前** Boss 击败后(**独占渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),罕见旁路=奖励节点/商店的「专长获取」,商店不出现;属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奖励;跨冒险跟着你走的是魔法道具**。奖励永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源与机会类的种类配额与值)/ shop.tres(货架取舍) - open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量),回复是否属该类待确认;②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③最终关 Boss 后是否也兑付专长待确认;④确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察;⑤Boss 击败后是否也出属性提升类与资源与机会类 + open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复的两处待确认——是否属资源与机会类(也可能独立成第四类)、它不进商店是否受「计价物不自售」同一条规则管(回复不是计价物,严格说不适用于该规则);④确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察 naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `reward_*`,属临时态,登记于 06-待办清单 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] From d6c13809a503c46d7c49abc3c9c5ea8565617ca6 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 03:34:26 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=A5=96=E5=8A=B1=20v2.2=EF=BC=9A?= =?UTF-8?q?=E9=97=A8=E7=A5=A8=E5=BD=A2=E6=80=81=20+=20=E7=BA=A6=E6=9D=9F?= =?UTF-8?q?=E5=88=86=E5=B1=82=20+=20=E9=BB=98=E8=AE=A4=E5=8E=9F=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、非 Boss 渠道给「专长获取」门票(用户明确) 奖励节点与商店不直接给专长,而是给一个道具——拿到后开专长三选一。 交叉表机制类在两渠道由"不出现"改为"**门票形式**"。 - 门票归**机制类**不归资源与机会类:它给的是"一件你以前不会的事", 只是把选择推迟到一次三选一(按 1.4 判据) - 为什么只给门票:若商店能直接买到指定专长,玩家能用金币把构筑买出来, Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(三选一不是指定), 但不让钱定点购买 二、用户质疑「计价物不自售」本质是特判——质疑成立,重构为三层 诚实结论:**形式上它确实是特判**(在分类白名单之外加的一道过滤, 不是从分类推出来的)。与死特判的实质区别在于: 死特判 = "GP 不进商店"(一条记录,每多一个例外加一条,靠记忆维护) 可计算谓词 = "X 是渠道 C 的计价物 → X 不进 C"(一个函数,自动判定) 即:没有消除"白名单外加过滤",但把**枚举例外变成计算谓词**。 渠道约束改写为三层: 一层 分类白名单(分类轴决定渠道) 二层 可计算谓词(结构性关系,新渠道/新奖励自动判定,不用改表) 三层 显式例外清单(人为设计选择,只能逐条加,**每条须写理由**) 判据:结构性原因(计价物/即时兑付/先决条件)写成谓词;设计性原因进清单。 **要害不是有没有例外,而是例外能不能被算出来。** 三方案代价并列摆出不藏折中:甲 GP 单独立类(例外 0 但两轴缠回)/ 乙 谓词(现行,1 条)/丙 死特判(靠记忆维护)。 在册约束就两条:①金币不进商店(二层·谓词)②机制类非 Boss 渠道只给门票(一层)。 三、立默认原则(用户定):除已登记的特殊规则外,分类内的东西都要在 它该出现的渠道池子里——任何"不出现"都要登记理由,没理由的缺格是缺陷。 据此**回复应在商店内**(回复不是计价物,套不上计价物不自售)。现行 shop.tres 货架只有 attack/max_hp/armor/ap 四项,缺回复=现状与表格 不对齐,须在实施批补上。 同步:06-待办清单(交叉表改门票 + 三层约束表 + 待拍板项增为三项)、 entities.yaml(acquisition 收口、channel_rule → channel_constraint_layers、 open_questions 更新)、02-系统清单 v1.7。验收标准补第 10 条(默认原则)。 专长门票尚未入表(出现概率/配额/全局限量无事实源)已登记。 数据层数值零变更;未 merge 回 master(本会话零测试)。 --- design/gdd/06-待办清单.md | 28 +++++++++-- design/gdd/systems/冒险循环/奖励.md | 76 +++++++++++++++++++++-------- design/registry/entities.yaml | 6 +-- 3 files changed, 83 insertions(+), 27 deletions(-) diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index bf116925..3013b628 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -33,19 +33,37 @@ | 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后 | |---|---|---|---| -| 机制类(专长) | 罕见旁路 | 不出现 | **主渠道(独占)** | +| 机制类(专长) | **门票形式** | **门票形式** | **直接给**(唯一直接渠道) | | 属性提升类 | 出 | 出(训练) | 不出现 | -| 资源与机会类 | 出 | 出(金币除外) | 不出现 | +| 资源与机会类 | 出 | 出(金币除外;**回复在内**) | 不出现 | -**Boss 渠道是专长的独占渠道**——只出机制类,另两类都不走这里;奖励节点与商店是属性提升类与资源与机会类的两个并行出口。形状是"一块独占 + 两块并行",不是三块平分。**终局 Boss 不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在终局之前的 Boss。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 +**Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(门票)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**终局 Boss 不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在终局之前的 Boss。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 + +**门票归机制类,不归资源与机会类**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 + +**默认原则(用户 2026-10-05 定)**:**除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里。** 这张表默认值="出",任何"不出现"都要登记理由,没理由的缺格是缺陷不是设计。 原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:机制类挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 **gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源与机会类(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 -**金币不进商店=一条规则,不是特例**:资源与机会类里只有金币不出现在商店(同类的行动点上限与刷新次数都可以)。v2.1 定为**「计价物不自售」**——凡是以某渠道的计价物为内容的奖励,不进该渠道货架;商店计价物是 GP,故 GP 不进商店。**不拆第四个分类**(按"能不能进商店"反推分类=用渠道轴去切分类轴,两根轴缠回一起),**也不开特例**(特例是孤立的、靠记忆维护的;规则对所有渠道成立,将来自动适用)。它是两轴交叉处的一条约束,实现上是货架候选构建的过滤条件,不是奖励自身的属性。 +**渠道约束分三层(v2.2,用户质疑后重构)**:用户问"计价物不自售不就是特判吗"。**诚实结论:形式上是的**——它确实是在分类白名单之外加的一道过滤,不是从分类推出来的。但和死特判有实质区别: -**待拍板/待观察两项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量——取决于以哪层共性为主),以及**回复的两处待确认**——它是否属该类(也可能独立成第四类)、它不进商店是否受同一条规则管(回复不是计价物,严格说不适用于「计价物不自售」)。② **专长总量与档位阈值的匹配**:终局 Boss 不给已定,一局确定性兑付次数=终局前 Boss 的个数(三关结构下为两次),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠罕见旁路补齐,是否合预期归曲线调参批观察。 +| 层 | 是什么 | 新增渠道/奖励时 | +|---|---|---| +| 一层 分类白名单 | 分类轴决定渠道 | 新分类按判据归类,自动继承 | +| 二层 **可计算谓词** | 渠道与奖励的**结构性**关系 | **自动判定,不用改表** | +| 三层 显式例外清单 | 人为设计选择,无内在理由 | **只能逐条加,每条须写理由** | + +死特判="GP 不进商店"(一条记录,每多一个例外加一条,靠记忆维护);谓词="X 是渠道 C 的计价物 → X 不进 C"(一个函数,自动判定)。**它没有消除"在白名单外加过滤",只是把它从枚举例变成了计算谓词。** 判据:结构性原因(计价物/即时兑付/先决条件)可写成谓词;设计性原因只能进三层清单。**要害不是有没有例外,而是例外能不能被算出来。** + +三方案代价并列(不藏折中):甲=GP 单独立第四个分类(例外 0,但用渠道轴切分类轴、两轴缠回、一项一类失衡);**乙=可计算谓词(现行,1 条谓词)**;丙=死特判清单(1 条记录,靠记忆维护)。 + +**在册约束就两条**:① 金币不进商店(二层·谓词,理由=计价物不自售);② 机制类在非 Boss 渠道只给门票(一层·分类自身形态,理由=防用钱定点买构筑)。 + +**回复应在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则它应当在商店出现。现行 `shop.tres` 货架只有 attack / max_hp / armor / ap 四项,**现状与表格不对齐,须在实施批补上**。 + +**待拍板/待观察三项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量);**回复是否属该类**(也可能独立成第四类——它是否出现在商店与此无关,两回事)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配**:终局 Boss 不给已定,一局确定性兑付次数=终局前 Boss 个数(三关=两次),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠门票补齐,是否合预期归曲线调参批观察。 **归属**:[奖励](systems/冒险循环/奖励.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底与货架过滤)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 diff --git a/design/gdd/systems/冒险循环/奖励.md b/design/gdd/systems/冒险循环/奖励.md index 2901de77..a17cadc4 100644 --- a/design/gdd/systems/冒险循环/奖励.md +++ b/design/gdd/systems/冒险循环/奖励.md @@ -62,6 +62,8 @@ 专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。这是它和另两类最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 +**专长门票也归这一类**:非 Boss 渠道不直接给专长,而是给一张名为「专长获取」的门票——拿到后立刻开一次专长 N 选一。它给的是"一件你以前不会的事"(只是把选择推迟到一次三选一),按 1.4 的判据归机制类,不归资源与机会类。详见 2.2。 + #### 1.2 属性提升类:纯属性三项 三项,各改一条战斗属性轴: @@ -83,7 +85,7 @@ | 行动点上限 | 每场战斗首轮可用的行动点更多 | 罕见档 | | 刷新次数 | 三选一界面可重抽的次数更多 | **作用对象是选择界面,不是角色**——见第 3 节的例外登记;奖励节点与商店两个渠道都可出现 | | 金币(GP) | 局内钱包进账 | 进钱包即花掉,不进持有集、不持续生效;**不进商店**(计价物不自售,见 2.4) | -| 回复 | 当即回血 | **是否属本类待确认**——同样是即时兑付,不进持有集、不持续生效 | +| 回复 | 当即回血 | 即时兑付,不进持有集、不持续生效;**在商店内**(见 2.4 的默认原则) | **这类为什么单独存在**:它的成员不满足"抬高战斗属性"(那归属性提升类),也不满足"改写规则"(那归机制类),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 @@ -105,11 +107,13 @@ | 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后(见 2.1) | |---|---|---|---| -| **机制类**(专长) | 罕见旁路(见 2.2) | 不出现 | **主渠道**(唯一渠道中的确定来源) | +| **机制类**(专长) | 门票形式(见 2.2) | 门票形式(见 2.2) | **直接给**(唯一的直接渠道) | | **属性提升类** | 出 | 出(口径「训练」) | 不出现 | | **资源与机会类** | 出 | 出(**金币除外**,见 2.4) | 不出现 | -**这张表的形状**:Boss 渠道是**专长的独占渠道**——只出机制类,另两类都不走这里;奖励节点与商店则是属性提升类与资源与机会类的两个并行出口。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奖励的获取节奏**由完全不同的机制决定**,前者靠打赢,后者靠抽取与购买。 +**这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奖励的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 + +**默认原则(用户 2026-10-05 定)**:**除了显式登记的特殊规则,一个分类里的东西都要在它该出现的渠道池子里。** 也就是说这张表的默认值是"出",任何"不出现"都必须登记一条理由,没有理由的缺格是缺陷不是设计。 #### 2.1 机制类的主渠道:终局前 Boss 击败后 @@ -119,35 +123,65 @@ **不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 -#### 2.2 罕见旁路:专长获取 +#### 2.2 专长门票:非 Boss 渠道怎么给专长 -在属性与资源的通用渠道(奖励节点、商店)里,嵌着一个罕见项——**专长获取**。它小概率出现在候选里,效果是立刻开一次专长 N 选一(N 与机制类主渠道的候选数同源)。 +奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奖励项,选中或买下之后,立刻开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 -它的作用是在确定性之上加一层赌博感: +**它归机制类,不归资源与机会类**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于机制类。所以在交叉表上,机制类在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 -- **不推翻确定性**:专长的主渠道仍然是 Boss 击败后,玩家不会因为没 roll 到就构筑不起来; -- **只在旁路制造兴奋**:它不常来,来了就是"这一局走运了",让人有记忆点; +**为什么非 Boss 渠道只给门票**:如果商店也能直接买到一个指定的专长,玩家就能用金币把构筑买出来,Boss 渠道的"打赢才拿到"就失去意义了。门票保留了惊喜(开出来的还是三选一,不是指定),但不让玩家用钱直接定点购买。 + +它的三个性质: + +- **不推翻确定性**:专长的主渠道仍然是 Boss 击败后,玩家不会因为没抽到门票就构筑不起来; +- **只在旁路制造兴奋**:它不常来(奖励节点)或要花额外的钱(商店),来了就是"这一局走运了",让人有记忆点; - **罕见且全局限量**:配额极小,且一局内的总量有上限——防止它变成第二条专长渠道,也防止它冲垮档位阈值。 -玩家视角它长这样:在普通的三选一奖励里,偶尔会冒出一张不一样的卡——选它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态。 +玩家视角它长这样:在普通的三选一奖励或商店货架里,偶尔会冒出一张不一样的卡——拿到它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态。 #### 2.3 商店口径:训练 商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励节点那一侧完全相同:都是往同一个持有集里加一项奖励。 -#### 2.4 金币不进商店:一条规则,不是一个特例 +#### 2.4 渠道约束分三层:白名单 / 可计算谓词 / 显式例外 -资源与机会类里只有**金币**不出现在商店,同类的行动点上限与刷新次数都可以。这里不拆分类、也不给金币开特例,而是把它写成一条**规则**: +一个"某分类在某渠道出不出现"的判断,实际由三层叠起来决定: -> **计价物不自售**——凡是以某渠道的计价物为内容的奖励,不进该渠道的货架。 +| 层 | 是什么 | 判据来源 | 新增渠道或奖励时 | +|---|---|---|---| +| **一层 分类白名单** | 分类轴决定渠道——机制类走 Boss、另两类走奖励节点与商店 | 分类本身 | 新分类按 1.4 判据归类,自动继承该类的渠道 | +| **二层 可计算谓词** | 渠道与奖励之间的**结构性**关系,能算出来 | 对象与渠道的内在关系 | **自动适用,不用改表** | +| **三层 显式例外清单** | 人为的设计选择,没有内在理由可推 | 设计决定 | **只能逐条加,每条必须写理由** | -商店的计价物是金币(GP),所以金币不进商店。写成规则而不是特例,是因为一旦写成特例,"为什么只有它不行"就成了一个孤立的、需要靠记忆维护的例外;写成规则,它对所有渠道都成立——将来任何渠道只要用自己的计价物当奖励内容,这条规则自动适用,不需要再补第二个特例。 +**先诚实回答"计价物不自售不就是特判吗"**:**形式上是的**——它确实是在分类白名单之外又加了一道过滤,不是从分类推出来的。但它和三层那种"死特判"有实质区别: -**为什么不拆成第四个分类**:分类轴回答的是"给的是什么",金币给的是余量,和行动点上限、刷新次数同类——按"能不能进商店"去反推分类,等于用渠道轴的性质去切分类轴,两根轴又缠回一起了。而且为一个只有一项的分类立枚举,读者会以为它和另三类并列是一个重量级的划分,实际它只是某一项恰好踩到了一条经济规则。 +| | 写法 | 新增渠道/奖励时 | 维护方式 | +|---|---|---|---| +| 死特判 | "GP 不进商店"(一条记录) | 每多一个例外加一条记录 | 靠人记住,容易漏 | +| **可计算谓词** | "X 是渠道 C 的计价物 → X 不进 C"(一个函数) | **自动判定,不用改表** | 判据在对象属性上,不会漏 | -**这条规则落在哪**:它不属于分类轴,也不属于渠道轴,而是**两轴交叉处的一条约束**——分类白名单先筛一遍,这条规则再筛一遍。实现上它是货架候选构建时的一个过滤条件,不是奖励自身的属性。 +所以准确的说法是:**它没有消除"在白名单外加过滤"这件事,但把过滤从"枚举例外"变成了"计算谓词"**。以后新增渠道或奖励,只要"不出现"的原因是**结构性**的——来自奖励与渠道的内在关系(计价物、即时兑付、需要先决条件等)——就能写成谓词自动算;如果原因是**设计性**的("我就是想让它在这一关不出"),那就只能进三层清单。 -**待确认**:同类的**回复**当前也不在商店货架上(现行 `shop.tres` 的货架只有攻击 / 生命上限 / 护甲 / 行动点四项)。它不进商店是同一条规则管(回复不是计价物,不适用),还是另有口径,尚未拍板,登记在 [06-待办清单](../../06-待办清单.md)。 +**所以要害不是"有没有例外",而是"例外能不能被算出来"**。三层清单不是不能用,但每一条都必须写出理由;一条写不出理由的例外,就是坏味道,应该回头质疑分类是不是分错了。 + +**为什么不干脆拆成第四个分类(零例外的那条路)**:分类轴回答的是"给的是什么",金币给的是余量,和行动点上限、刷新次数同类。按"能不能进商店"去反推分类,等于**用渠道轴的性质去切分类轴**,两根轴又缠回一起了——这是本文件 v2.0 专门拆开的东西,不能为了消灭一条例外再缠回去。而且为一个只有一项的分类立枚举,读者会以为它和另三类是同一重量级的划分,实际它只是某一项恰好踩到了一条经济规则。 + +三个方案的真实代价,摆出来不藏: + +| 方案 | 例外数 | 代价 | +|---|---|---| +| 甲:GP 单独立第四个分类 | 0 | 用渠道轴切分类轴,两轴缠回;一项一类,分类失衡 | +| **乙:可计算谓词(现行)** | **1 条谓词** | **分类干净,但"白名单外加过滤"这件事没消失,只是自动化了** | +| 丙:死特判清单 | 1 条记录 | 每加一个例外加一条,靠记忆维护 | + +**回复在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则(除登记的特殊规则外,分类内的都要在池子里)**它应当在商店中出现**。现行 `shop.tres` 的货架只有攻击 / 生命上限 / 护甲 / 行动点四项,回复不在其中——这是**现状与表格不对齐**,须在实施批补上,登记在 [06-待办清单](../../06-待办清单.md)。 + +**当前在册的约束清单**(就这么两条,都要有理由): + +| 约束 | 层 | 理由 | +|---|---|---| +| 金币不进商店 | 二层·谓词 | 计价物不自售——商店的计价物是 GP | +| 机制类在非 Boss 渠道只给门票 | 一层·分类自身的形态 | 见 2.2——防止用钱定点买构筑 | #### 2.5 在册事项 @@ -211,6 +245,7 @@ | 参数 | 取值域 | 事实源 | |---|---|---| | 机制类定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | +| 专长门票(出现概率 / 配额 / 全局限量) | 整数 | **尚未入表**,见待办 | | 属性提升类种类 | 封闭三项:生命上限 / AC / 攻击,扩项走文档修订 | `game/data/schemas/adventure_table.gd` | | 资源与机会类种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | | 稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | @@ -228,7 +263,8 @@ 6. 文档与代码里提到它时只有"奖励"这一个名字;需要区分时用"机制类/属性提升类/资源与机会类"描述,不得另造称呼。 7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 -9. 金币不出现在商店货架上——这是「计价物不自售」规则的结果,不是给金币单独立的一个分类或特例。 +9. 金币不出现在商店货架上——这是「计价物不自售」谓词算出来的结果,不是给金币单独立的一个分类;它确实是在分类白名单之外加的一道过滤,只是这道过滤可自动计算而非靠枚举。 +10. 除已登记的两条约束外(见 2.4 末尾的清单),一个分类里的东西都在它该出现的渠道池子里——任何"不出现"都必须有理由,没理由的缺格是缺陷。 ## 待办 @@ -237,8 +273,9 @@ 本节只点出四条由本版新立、尚未登记的判断来源: - **资源与机会类的命名待定**:候选「资源」「补给」「余量」,取决于以哪层共性为主。定了之后要回头改本文件的类名与 registry。 -- **回复的两处待确认**:① 它是否属资源与机会类(即时兑付,与金币同类,也可能独立成第四类);② 它不进商店,是受「计价物不自售」同一条规则管,还是另有口径——回复不是计价物,严格说不适用该规则。 -- **机制类总量与档位阈值的匹配**:终局 Boss 不给已定,一局的确定性专长兑付次数由"终局前 Boss 的个数"决定。三关结构下是两次,刚好够同标签 2 件档一,档二(4 件)要靠罕见旁路补齐。是否合预期归曲线调参批观察。 +- **回复是否属资源与机会类待确认**:它是即时兑付,与金币同类;也可能独立成第四类。它**在商店内**(不是计价物,套不上「计价物不自售」)——现行 `shop.tres` 货架只有攻击 / 生命上限 / 护甲 / 行动点四项,**现状与表格不对齐,须在实施批补上**。 +- **专长门票尚未入表**:出现概率、配额、全局限量三个参数都没有事实源;入池时同样受档位结构锚约束(改总量须重裁而非调参)。 +- **机制类总量与档位阈值的匹配**:终局 Boss 不给已定,一局的确定性专长兑付次数由"终局前 Boss 的个数"决定。三关结构下是两次,刚好够同标签 2 件档一,档二(4 件)要靠门票补齐。是否合预期归曲线调参批观察。 ## 版本历史 @@ -249,3 +286,4 @@ | v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | | **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源与机会类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源与机会类里,同时把它们的即时兑付性质显式登记为类内异质性。 | | v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源与机会类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | +| v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表机制类在两渠道由"不出现"改为"**门票形式**";门票归机制类(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index fdd88ff5..7cd66113 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -579,15 +579,15 @@ entities: owner: design/gdd/systems/冒险循环/奖励.md attributes: definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奖励。装的是"这一局你捞到了什么",不管从哪个渠道来 - channel_rule: 计价物不自售——凡是以某渠道的计价物为内容的奖励,不进该渠道货架(商店计价物=GP,故 GP 不进商店)。这是两轴交叉处的一条约束,不是第四个分类也不是特例;实现上是货架候选构建的过滤条件,不是奖励自身的属性 + channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奖励的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奖励自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奖励属于哪个分类不决定它从哪个渠道来;交叉关系由 [奖励](design/gdd/systems/冒险循环/奖励.md) 第 2 节开关表定死 categories: 封闭三类 {机制类, 属性提升类, 资源与机会类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源与机会类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工(交叉开关,v2.1 收口)**——机制类:主渠道=**终局前** Boss 击败后(**独占渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),罕见旁路=奖励节点/商店的「专长获取」,商店不出现;属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**(拿到后开专长三选一,门票归机制类——给的是一件以前不会的事,只是把选择推迟;理由=防用钱定点买构筑);属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奖励;跨冒险跟着你走的是魔法道具**。奖励永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源与机会类的种类配额与值)/ shop.tres(货架取舍) - open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复的两处待确认——是否属资源与机会类(也可能独立成第四类)、它不进商店是否受「计价物不自售」同一条规则管(回复不是计价物,严格说不适用于该规则);④确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察 + open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复是否属资源与机会类待确认(也可能独立成第四类)——它**应在商店内**(不是计价物,套不上计价物不自售),现行 shop.tres 货架缺它是现状与表格不对齐,须实施批补上;④专长门票尚未入表(出现概率/配额/全局限量无事实源);⑤确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察 naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `reward_*`,属临时态,登记于 06-待办清单 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] From eaf1ae91846f3cf54313357f0487d3fa6de548df Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 04:25:54 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=A5=96=E5=8A=B1=20v2.3=EF=BC=9A?= =?UTF-8?q?=E9=97=A8=E7=A5=A8=E6=9C=BA=E5=88=B6=E7=BB=86=E5=8C=96=20+=20?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=8E=9F=E5=88=99=E8=A1=A8=E8=BF=B0=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、门票机制四条(用户 2026-10-05 定) - **拿到即开、不可囤积**:不进持有集,选中/买下同一时刻开专长三选一。 可囤积会让玩家把关键决策无限推迟,且把持有物语义从后门放回来; "道具"只是卡面表现,不是持有物 - **罕见只在概率,不在价格**:货架价与其他商品相当,不靠高价劝退 - **一局限购一次**(现行口径) - **计步保底**:连续 5 次三选一展示未出现 → 第 6 次展示必定出现。 计数对象=**展示次数**(刷新后的重新展示计入,用户明定含刷新—— 若刷新不计入,保底与刷新两套机制会打架,玩家可用刷新绕开计数语义); 计数范围=奖励节点与商店**共享**;触发后清零;**限购用满后不再触发** 二、修正 v2.2 的误读(用户指出) v2.2 把"分类在某渠道不出现"当成需理由的缺格,这是错的。 **渠道出哪些分类,是渠道轴自己的定位决定,不是例外**——Boss 只出专长, 另两类"不出现"是它的同义表述。默认原则**只管分类内部**:一个渠道一旦 确定要出某分类,该分类的成员就都要在池子里。两句话管辖范围不同, 已在文档与 registry 分开写死。 三、档位问题按用户决定延后,但两块都登记 - 专长总量 vs 档位阈值(≥2 档一 / ≥4 档二):三关下确定性 2 次 + 门票 最多 3 次,**档二几乎不可达**。用户定"先不调整"(后续有第四关), 复裁触发=第四关内容批落地后实测。登记防忘。 - **charge 标签仅 3 件**(relics.tres),永远达不到 4 件档二—— 数据层缺陷,与渠道结构无关,单独登记勿被上条盖掉。 四、顶层命名待定(用户否决了「奖励」与「收益」,要自造词) 新增待办,并记一条硬约束:**代码 reward 词族已被占用**—— reward_pick(rng 封闭流 scope)/ reward_node(grant_aux_item context)/ reward_preview(道具 kind)。因此 06 里「feature_* → reward_* 对齐」 那条待办**不能照做**,会撞车。候选词:进益 / 造化 / 机缘 / 遇获。 同步 06-待办清单、entities.yaml;验收标准补 11/12 条。数据层零变更。 --- design/gdd/06-待办清单.md | 8 +++-- design/gdd/systems/冒险循环/奖励.md | 45 ++++++++++++++++++++++------- design/registry/entities.yaml | 6 ++-- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 3013b628..89b04bf8 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -41,7 +41,9 @@ **门票归机制类,不归资源与机会类**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 -**默认原则(用户 2026-10-05 定)**:**除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里。** 这张表默认值="出",任何"不出现"都要登记理由,没理由的缺格是缺陷不是设计。 +**门票机制四条(用户 2026-10-05 定)**:① **拿到即开、不可囤积**——不进持有集,选中或买下同一时刻就开专长三选一(可囤积会让玩家把关键决策无限推迟,且把持有物语义从后门放回来;"道具"只是卡面表现)。② **罕见只在概率,不在价格**——货架价与其他商品相当,不靠高价劝退。③ **一局限购一次**(现行口径)。④ **计步保底**——连续 5 次三选一展示未出现门票,第 6 次展示必定出现;计数对象=**展示次数**(刷新后的重新展示计入,用户明定含刷新),计数范围=奖励节点与商店**共享**,触发后清零,**限购用满后保底不再触发**。 + +**渠道定位 vs 默认原则(两句,别混)**:**渠道出哪些分类,是渠道轴自己的定位决定,不是例外**——Boss 渠道只出专长,另两类"不出现"是它的同义表述,不需另外找理由(v2.2 曾把它误当成缺理由的缺格,v2.3 修正)。**默认原则只管分类内部**:一个渠道一旦确定要出某个分类,该分类的成员就都要在它的池子里,缺席须有已登记的规则。 原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:机制类挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 @@ -63,7 +65,9 @@ **回复应在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则它应当在商店出现。现行 `shop.tres` 货架只有 attack / max_hp / armor / ap 四项,**现状与表格不对齐,须在实施批补上**。 -**待拍板/待观察三项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量);**回复是否属该类**(也可能独立成第四类——它是否出现在商店与此无关,两回事)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配**:终局 Boss 不给已定,一局确定性兑付次数=终局前 Boss 个数(三关=两次),而档位阈值是同标签 2 件档一 / 4 件档二——档二须靠门票补齐,是否合预期归曲线调参批观察。 +**待拍板/待观察三项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量);**回复是否属该类**(也可能独立成第四类——它是否出现在商店与此无关,两回事)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加门票最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 +④ **charge 标签件数不足(数据缺陷,独立登记,勿被上条盖掉)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷。 +⑤ **顶层命名待定**:「奖励」与「收益」用户都觉得不妥,拟自造一个"进益兼备"的名词(候选:进益 / 造化 / 机缘 / 遇获),**定了之后要回头改本文档名、全文称谓、entities 条目名与代码词族**。注意:代码里 `reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用 reward 词族,`feature_* → reward_*` 那条对齐待办**不能照做**(会撞车)。 **归属**:[奖励](systems/冒险循环/奖励.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底与货架过滤)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 diff --git a/design/gdd/systems/冒险循环/奖励.md b/design/gdd/systems/冒险循环/奖励.md index a17cadc4..99a520a4 100644 --- a/design/gdd/systems/冒险循环/奖励.md +++ b/design/gdd/systems/冒险循环/奖励.md @@ -113,7 +113,12 @@ **这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奖励的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 -**默认原则(用户 2026-10-05 定)**:**除了显式登记的特殊规则,一个分类里的东西都要在它该出现的渠道池子里。** 也就是说这张表的默认值是"出",任何"不出现"都必须登记一条理由,没有理由的缺格是缺陷不是设计。 +**渠道定位 vs 默认原则(两句,别混)**: + +- **渠道出哪些分类,是渠道轴自己的定位决定,不是例外**——Boss 渠道只出专长,所以另两类在此"不出现",这是"Boss 是专长独占渠道"的同义表述,不需要另外找理由。 +- **默认原则只管分类内部**(用户 2026-10-05 定):一个渠道一旦确定要出某个分类,**该分类的成员就都要在这个渠道的池子里**。它的默认值是"出",任何成员缺席都必须有已登记的规则,没有理由的缺席是缺陷不是设计。 + +两条的管辖范围不同:前者决定"这张表的格子填不填",后者决定"填了的格子里装不装得全"。 #### 2.1 机制类的主渠道:终局前 Boss 击败后 @@ -125,19 +130,34 @@ #### 2.2 专长门票:非 Boss 渠道怎么给专长 -奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奖励项,选中或买下之后,立刻开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 +奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奖励项,选中或买下之后,**立刻**开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 **它归机制类,不归资源与机会类**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于机制类。所以在交叉表上,机制类在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 **为什么非 Boss 渠道只给门票**:如果商店也能直接买到一个指定的专长,玩家就能用金币把构筑买出来,Boss 渠道的"打赢才拿到"就失去意义了。门票保留了惊喜(开出来的还是三选一,不是指定),但不让玩家用钱直接定点购买。 -它的三个性质: +##### 门票的三个性质 -- **不推翻确定性**:专长的主渠道仍然是 Boss 击败后,玩家不会因为没抽到门票就构筑不起来; -- **只在旁路制造兴奋**:它不常来(奖励节点)或要花额外的钱(商店),来了就是"这一局走运了",让人有记忆点; -- **罕见且全局限量**:配额极小,且一局内的总量有上限——防止它变成第二条专长渠道,也防止它冲垮档位阈值。 +- **拿到即开,不可囤积**(用户 2026-10-05 定):门票不进持有集,选中或买下的同一时刻就开专长三选一。玩家不能攒几张一次连开——可囤积会让玩家把关键决策无限推迟到最优时机,破坏 Boss 渠道的节奏感;而且"攥着一张票"就是把持有物语义从后门放回来了。它叫"道具"只是卡面表现,不是持有物。 +- **不推翻确定性**:专长的主渠道仍然是 Boss 击败后,玩家不会因为没抽到门票就构筑不起来。 +- **罕见只在概率,不在价格**:门票的"罕见"**只体现在它出现的概率上**——它在货架上的价格与其他商品相当,不靠高价劝退。一局内**限购一次**(现行口径)。 -玩家视角它长这样:在普通的三选一奖励或商店货架里,偶尔会冒出一张不一样的卡——拿到它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态。 +##### 保底:第 6 次必出 + +光靠概率,运气差的玩家可能整局都见不到门票——那就等于这个机制对他不存在。所以门票带一条**计步保底**: + +> 连续 5 次三选一展示中没有出现门票,**第 6 次展示必定出现**。 + +| 项 | 口径 | +|---|---| +| 计数对象 | 三选一的**展示次数**,不是"节点次数"——**刷新后的重新展示计入次数**(用户 2026-10-05 明定含刷新) | +| 计数范围 | 奖励节点与商店**共享同一计数**,不各算各的 | +| 触发后 | 计数清零,重新累计 | +| 与限购的关系 | 一局限购一次;**已经买过(限购用满)之后,保底不再触发**——门票已经用掉了,没有再给的理由 | + +**为什么是"展示次数"而不是"节点次数"**:保底要保的是"玩家看到的脸",刷新本来就是让玩家多一次看脸的机会,若刷新不计入,保底与刷新两套机制会打架——玩家可以用刷新绕开保底的计数语义。 + +玩家视角它长这样:在普通的三选一奖励或商店货架里,偶尔会冒出一张不一样的卡——拿到它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态;而连续几次没见到之后,它一定会来一次。 #### 2.3 商店口径:训练 @@ -182,6 +202,7 @@ |---|---|---| | 金币不进商店 | 二层·谓词 | 计价物不自售——商店的计价物是 GP | | 机制类在非 Boss 渠道只给门票 | 一层·分类自身的形态 | 见 2.2——防止用钱定点买构筑 | +| 属性提升类与资源与机会类不出现在 Boss 渠道 | **不是约束** | 见 2.1——这是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖 | #### 2.5 在册事项 @@ -264,7 +285,9 @@ 7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 9. 金币不出现在商店货架上——这是「计价物不自售」谓词算出来的结果,不是给金币单独立的一个分类;它确实是在分类白名单之外加的一道过滤,只是这道过滤可自动计算而非靠枚举。 -10. 除已登记的两条约束外(见 2.4 末尾的清单),一个分类里的东西都在它该出现的渠道池子里——任何"不出现"都必须有理由,没理由的缺格是缺陷。 +10. 一个渠道一旦确定要出某个分类,该分类的成员就都在它的池子里——"渠道出哪些分类"不受这条约束,那是渠道轴的定位。 +11. 门票拿到即开,不进持有集,玩家无法囤积——选中或买下的同一时刻就开专长三选一。 +12. 门票带有计步保底:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享,刷新后的重新展示计入次数,限购用满后保底不再触发。 ## 待办 @@ -274,8 +297,9 @@ - **资源与机会类的命名待定**:候选「资源」「补给」「余量」,取决于以哪层共性为主。定了之后要回头改本文件的类名与 registry。 - **回复是否属资源与机会类待确认**:它是即时兑付,与金币同类;也可能独立成第四类。它**在商店内**(不是计价物,套不上「计价物不自售」)——现行 `shop.tres` 货架只有攻击 / 生命上限 / 护甲 / 行动点四项,**现状与表格不对齐,须在实施批补上**。 -- **专长门票尚未入表**:出现概率、配额、全局限量三个参数都没有事实源;入池时同样受档位结构锚约束(改总量须重裁而非调参)。 -- **机制类总量与档位阈值的匹配**:终局 Boss 不给已定,一局的确定性专长兑付次数由"终局前 Boss 的个数"决定。三关结构下是两次,刚好够同标签 2 件档一,档二(4 件)要靠门票补齐。是否合预期归曲线调参批观察。 +- **专长门票尚未入表**:出现概率、配额、限购次数、保底计数阈值四个参数都没有事实源;入池时同样受档位结构锚约束(改总量须重裁而非调参)。 +- **专长总量与档位阈值的匹配——延后复裁(用户 2026-10-05 定"先不调整")**:终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 的个数。三关结构下是两次,加上门票最多三次,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是后续会有第四关,且届时可能另做获取侧的调整。**复裁触发条件:第四关内容批落地后实测,若配合仍太少再调**。登记于此防止它被忘掉。 +- **charge 标签件数不足(数据缺陷,独立登记)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷,随上一条一并延后,但不要被上一条盖掉。 ## 版本历史 @@ -286,4 +310,5 @@ | v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | | **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源与机会类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源与机会类里,同时把它们的即时兑付性质显式登记为类内异质性。 | | v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源与机会类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | +| v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | | v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表机制类在两渠道由"不出现"改为"**门票形式**";门票归机制类(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 7cd66113..87c774d4 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -579,15 +579,15 @@ entities: owner: design/gdd/systems/冒险循环/奖励.md attributes: definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奖励。装的是"这一局你捞到了什么",不管从哪个渠道来 - channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奖励的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奖励自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** + channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奖励的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奖励自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性提升类/资源与机会类不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奖励属于哪个分类不决定它从哪个渠道来;交叉关系由 [奖励](design/gdd/systems/冒险循环/奖励.md) 第 2 节开关表定死 categories: 封闭三类 {机制类, 属性提升类, 资源与机会类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源与机会类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**(拿到后开专长三选一,门票归机制类——给的是一件以前不会的事,只是把选择推迟;理由=防用钱定点买构筑);属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奖励;跨冒险跟着你走的是魔法道具**。奖励永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源与机会类的种类配额与值)/ shop.tres(货架取舍) - open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复是否属资源与机会类待确认(也可能独立成第四类)——它**应在商店内**(不是计价物,套不上计价物不自售),现行 shop.tres 货架缺它是现状与表格不对齐,须实施批补上;④专长门票尚未入表(出现概率/配额/全局限量无事实源);⑤确定性渠道一局两次专长 vs 档位阈值(同标签 2 件档一 / 4 件档二)是否匹配,归曲线调参批观察 + open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复是否属资源与机会类待确认(也可能独立成第四类)——它**应在商店内**(不是计价物,套不上计价物不自售),现行 shop.tres 货架缺它是现状与表格不对齐,须实施批补上;④专长门票尚未入表(出现概率/配额/全局限量无事实源);⑤确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);⑥charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记);⑦顶层命名待定(奖励/收益均不妥,拟造词)——**代码 reward 词族已被 reward_pick/reward_node/reward_preview 占用,feature_* → reward_* 对齐待办不能照做** naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `reward_*`,属临时态,登记于 06-待办清单 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] From a2ce5d7e01b11ad95828630eec47aa0275b1f6f6 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 05:25:28 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=A5=87=E7=89=A9=20v2.4=EF=BC=9A?= =?UTF-8?q?=E9=A1=B6=E5=B1=82=E5=AE=9A=E5=90=8D=20Wondrous=20Item=EF=BC=88?= =?UTF-8?q?=E5=A5=87=E7=89=A9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 顶层概念由「奖励」改名为「奇物」(Wondrous Item)。 定名依据:DND 魔法物品九分类中的 Wondrous Item,官方中文译名即「奇物」, 是专装"不好归类但有奇效之物"的兜底杂类。选它的理由——本概念下三个分类 (规则 / 数字 / 余量)本来就没有共同点,能把它们拢在一起的只有一个 "不好归类但有用"的名字,而奇物天生就是干这个的。 落选者(都登记在 06 备查): - Treasure(宝物):DMG 第 7 章正式术语,定义含 coins/gems/art objects/ magic items,四条筛选全中,但偏"财物",装不下专长这种 "你会了件以前不会的事" - Relic:roguelike 品类惯例(杀戮尖塔 / Soulbound / 铲子骑士 Pocket Dungeon / Die in the Dungeon,后两个明确"局内可买可捡、run 结束清零",与本作同构), 但用户已否决「遗物」 - 全部自造词(进益 / 造化 / 机缘 / 遇获):用户否决 **代码词族定为 curio_* / ADVENTURE_CURIO,不用 reward_***—— reward_pick(rng 封闭流 scope)/ reward_node(grant_aux_item context)/ reward_preview(道具 kind)已占用 reward 词族,照 reward_* 对齐会撞车。 06 里原「feature_* → reward_* 对齐」待办据此改写为 → curio_*。 改名范围(文档名 奖励.md → 奇物.md): - 全文称谓、判据句(当局清零的是奇物,跨局带走的是魔法道具) - 1.5 命名出处节重写(补 Wondrous Item 出处与落选理由) - 02-系统清单:文档树行改名、ADVENTURE_REWARD → ADVENTURE_CURIO、v1.7/v1.8 - 06-待办清单:链接与称谓、三层约束表、命名统一后续条目(目标词族改 curio_*)、 「顶层命名待定」条目改为已定 - entities.yaml:reward → curio、owner 路径、正文称谓(保护「奖励节点」) - battle.md / level-map.md:奇物列表;HUD框架.md:奇物段先例 - 两个 schema 概念指路注释 **保护未动**:「奖励节点」(渠道名)、格面奖励 / 清图奖励 / 大奖励 / 节点奖励 / 奖励重构等历史与他概念用词——全部逐条核对未误伤。 数据层数值零变更;未 merge 回 master(本会话零测试)。 --- design/gdd/02-系统清单.md | 6 +- design/gdd/06-待办清单.md | 22 +-- .../gdd/systems/冒险循环/{奖励.md => 奇物.md} | 67 ++++--- design/gdd/systems/表现与支撑/HUD框架.md | 4 +- design/gdd/ux/battle.md | 10 +- design/gdd/ux/level-map.md | 2 +- design/registry/entities.yaml | 168 +++++++++--------- game/data/schemas/adventure_table.gd | 4 +- game/data/schemas/relic_table.gd | 6 +- 9 files changed, 145 insertions(+), 144 deletions(-) rename design/gdd/systems/冒险循环/{奖励.md => 奇物.md} (89%) diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index 96c526bf..1281c26b 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,7 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | -| `奖励.md` | 一次冒险内各渠道给予玩家的增益总称(机制类 / 属性提升类 / 资源与机会类三个枚举 × 奖励节点·商店·Boss 击败后三条渠道) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | +| `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(机制类 / 属性提升类 / 资源与机会类三个枚举 × 奖励节点·商店·Boss 击败后三条渠道) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | ### 跨局循环(`systems/跨局循环/`) @@ -97,7 +97,7 @@ | 冒险循环 | 关卡节点图生成 | `NODE_MAP_GENERATION` | —(新立无旧代号) | | 冒险循环 | 冒险结构 | `ADVENTURE_STRUCTURE` | c2 | | 冒险循环 | 难度曲线与Boss | `DIFFICULTY_CURVE` | c3 | -| 冒险循环 | 奖励 | `ADVENTURE_REWARD` | `ADVENTURE_FEATURE`(2026-10-05 v2.0 改名退役) | +| 冒险循环 | 奇物 | `ADVENTURE_CURIO` | `ADVENTURE_FEATURE`(v1.0)→ `ADVENTURE_REWARD`(v2.0,v2.4 退役) | | 跨局循环 | 元进度 | `META_PROGRESS` | c4 | | 表现与支撑 | HUD框架 | `HUD_FRAMEWORK` | d1 | | 表现与支撑 | 数据配置 | `DATA_CONFIG` | d2 | @@ -132,3 +132,5 @@ | v1.4 | 2026-10-05 | 《特性》v1.1 分类重构:两类由"规则改写型 / 属性加成型"改为"属性提升(ASI)/ 专长(Feat)",属性提升内部再分纯属性组与特殊组;获取途径由两口共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店)+罕见旁路"专长获取" | | v1.5 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(机制类 / 属性提升类 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | | v1.6 | 2026-10-05 | 《奖励》v2.1 交叉表收口:Boss 渠道只出专长(终局 Boss 不给),另两类在此不出现;新增「计价物不自售」规则处理金币不进商店——不拆第四个分类、不开特例,而是两轴交叉处的一条约束 | +| v1.7 | 2026-10-05 | 《奖励》v2.2:机制类在非 Boss 渠道改为「专长获取」门票形式(不直接给专长);渠道约束重构为三层(分类白名单/可计算谓词/显式例外清单),并承认「计价物不自售」形式上是白名单外的一道过滤、与死特判的区别在可计算;立默认原则——除已登记规则外分类内的都要在池子里,据此回复应在商店内(现行货架缺它,须补) | +| v1.8 | 2026-10-05 | 《奖励》改名为《奇物》并升 v2.4:顶层定名 Wondrous Item(DND 魔法物品九分类中的兜底杂类,官方中文译名「奇物」)。文档树冒险循环行改名;命名对照表 `ADVENTURE_REWARD` → `ADVENTURE_CURIO`(**不用 `reward_*`**——`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用该词族) | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 89b04bf8..faf8029c 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -27,7 +27,7 @@ #### 冒险 BD 各分类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奖励**(2026-10-05 定名,v2.0 由「特性」改名,定义见 [奖励](systems/冒险循环/奖励.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源与机会类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源与机会类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 **用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— @@ -51,10 +51,10 @@ **渠道约束分三层(v2.2,用户质疑后重构)**:用户问"计价物不自售不就是特判吗"。**诚实结论:形式上是的**——它确实是在分类白名单之外加的一道过滤,不是从分类推出来的。但和死特判有实质区别: -| 层 | 是什么 | 新增渠道/奖励时 | +| 层 | 是什么 | 新增渠道/奇物时 | |---|---|---| | 一层 分类白名单 | 分类轴决定渠道 | 新分类按判据归类,自动继承 | -| 二层 **可计算谓词** | 渠道与奖励的**结构性**关系 | **自动判定,不用改表** | +| 二层 **可计算谓词** | 渠道与奇物的**结构性**关系 | **自动判定,不用改表** | | 三层 显式例外清单 | 人为设计选择,无内在理由 | **只能逐条加,每条须写理由** | 死特判="GP 不进商店"(一条记录,每多一个例外加一条,靠记忆维护);谓词="X 是渠道 C 的计价物 → X 不进 C"(一个函数,自动判定)。**它没有消除"在白名单外加过滤",只是把它从枚举例变成了计算谓词。** 判据:结构性原因(计价物/即时兑付/先决条件)可写成谓词;设计性原因只能进三层清单。**要害不是有没有例外,而是例外能不能被算出来。** @@ -67,23 +67,23 @@ **待拍板/待观察三项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量);**回复是否属该类**(也可能独立成第四类——它是否出现在商店与此无关,两回事)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加门票最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 ④ **charge 标签件数不足(数据缺陷,独立登记,勿被上条盖掉)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷。 -⑤ **顶层命名待定**:「奖励」与「收益」用户都觉得不妥,拟自造一个"进益兼备"的名词(候选:进益 / 造化 / 机缘 / 遇获),**定了之后要回头改本文档名、全文称谓、entities 条目名与代码词族**。注意:代码里 `reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用 reward 词族,`feature_* → reward_*` 那条对齐待办**不能照做**(会撞车)。 +⑤ ~~顶层命名待定~~ **已定(v2.4)=「奇物」Wondrous Item**:DND 魔法物品九分类中的兜底杂类,官方中文译名即「奇物」,专装"不好归类但有奇效之物"——正好对应三个互不相干的分类。落选:Treasure(偏财物,装不下专长)、Relic(品类惯例,用户否决「遗物」)、全部自造词(进益/造化/机缘/遇获)。**代码词族随之定为 `curio_*` / `ADVENTURE_CURIO`**——原计划的 `feature_* → reward_*` 对齐**作废**:`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用 reward 词族,照做会撞车。 -**归属**:[奖励](systems/冒险循环/奖励.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底与货架过滤)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 +**归属**:[奇物](systems/冒险循环/奇物.md)(定义与交叉开关表)+ [node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底与货架过滤)+ [关卡节点地图](systems/冒险循环/关卡节点地图.md)(节点类型词表);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 **状态**:分工已定,**实施待排批**;两项待拍板/待观察(2026-10-05 v2.1 更新) #### 资源与机会类两个新种类入池——刷新次数、专长获取(2026-10-05 立) -**现状**:[奖励](systems/冒险循环/奖励.md) v2.0 立了资源与机会类四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 +**现状**:[奇物](systems/冒险循环/奇物.md) v2.0 立了资源与机会类四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 **连带约束**:`FEATURE_KINDS` 词表封闭(断点附随件与牌库剔除态依赖它),扩种类须走 `adventure_table.gd` + registry 同步修订;档位配额是**结构锚**(普通 70 / 稀有 25 / 罕见 3 = 98 张,入 schema validate 硬断言),新种类入池要占配额——**改总量须重裁而非调参**。专长获取须带全局限量(一局内可获得次数上限)。 -**归属**:[奖励](systems/冒险循环/奖励.md) 调参表 + [冒险结构](systems/冒险循环/冒险结构.md) 共享池账本节;数值所有权归 [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md) +**归属**:[奇物](systems/冒险循环/奇物.md) 调参表 + [冒险结构](systems/冒险循环/冒险结构.md) 共享池账本节;数值所有权归 [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md) **状态**:待排批——须在可跑冒烟的迭代批次内完成 -#### 内部分类禁写入玩家可见面——奖励呈现三处违规待改(2026-10-04 用户立意登记) +#### 内部分类禁写入玩家可见面——奇物呈现三处违规待改(2026-10-04 用户立意登记) **现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项机制类奖励的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 @@ -93,11 +93,11 @@ **状态**:方向已明确(禁写类别),违规改法与档位呈现三路待讨论(2026-10-04 登记,后续展开) -#### 奖励命名统一后续——代码标识符与文件名的对齐(2026-10-05 立) +#### 奇物命名统一后续——代码标识符与文件名的对齐(2026-10-05 立) -**现状**:概念已统一为「奖励」(2026-10-05 v2.0 由「特性」改名,定义见 [奖励](systems/冒险循环/奖励.md))。已完成三件——① 定义文档落位(`design/gdd/systems/冒险循环/奖励.md`);② 称谓统一(代码注释与玩家可见文案,94 处+design/ 侧随改名批同步);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 `feature_*` 词族,112 处,值零变更)。 +**现状**:概念已统一为「奇物」(2026-10-05 v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md))。已完成三件——① 定义文档落位(`design/gdd/systems/冒险循环/奇物.md`);② 称谓统一(代码注释与玩家可见文案,94 处+design/ 侧随改名批同步);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 `feature_*` 词族,112 处,值零变更)。 -**未完四件**:⓪ **`feature_*` 词族随顶层改名再换到 `reward_*`**(2026-10-05 v2.0 新增)——`FEATURE_KINDS` / `feature_quota()` / `feature_value()` / `feature_candidate_count` / `feature_quota_*` / `feature_value_*`,涉及 `adventure_table.gd` + `adventure.tres` 键名 + registry;**注意** `adventure.tres` 的键名是存档外的表数据,换名只动键不减值,但 `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它,须走本表 + registry 同步修订。① 机制类那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 +**未完四件**:⓪ **`feature_*` 词族随顶层改名再换到 `curio_*`**(2026-10-05 v2.0 新增、v2.4 改目标词族)——`FEATURE_KINDS` → `CURIO_KINDS` / `feature_quota()` → `curio_quota()` / `feature_value()` → `curio_value()` / `feature_candidate_count` → `curio_candidate_count` / `feature_quota_*` / `feature_value_*`,涉及 `adventure_table.gd` + `adventure.tres` 键名 + registry。**注意两点**:其一,**目标词族是 `curio_*` 不是 `reward_*`**——`reward_pick`(rng 封闭流 scope)/ `reward_node`(`grant_aux_item` context)/ `reward_preview`(道具 kind)已占用 reward 词族,照 `reward_*` 对齐会撞车;其二,`adventure.tres` 的键名是存档外的表数据,换名只动键不减值,但 `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它,须走本表 + registry 同步修订。① 机制类那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 **次序建议**:⓪ 与 ① 同为"词族对不齐",可同批;② 涉及运行层最广,单批;③ 须与存档版本迁移一起裁。**顶层已改名而代码仍是 `feature_*`,属"文档与代码分开"的临时态**,应在下一个可跑冒烟的批次内收口。 diff --git a/design/gdd/systems/冒险循环/奖励.md b/design/gdd/systems/冒险循环/奇物.md similarity index 89% rename from design/gdd/systems/冒险循环/奖励.md rename to design/gdd/systems/冒险循环/奇物.md index 99a520a4..598450fa 100644 --- a/design/gdd/systems/冒险循环/奖励.md +++ b/design/gdd/systems/冒险循环/奇物.md @@ -1,33 +1,33 @@ -# 奖励(Reward) +# 奇物(Wondrous Item) -> 一次冒险之内,通过各渠道给予玩家的**增益总称**——奖励节点给的、商店里买的、打赢关底 Boss 给的,都是奖励。它装的是"这一局你捞到了什么",不管从哪个渠道来。 +> 一次冒险之内,通过各渠道给予玩家的**增益总称**——奖励节点给的、商店里买的、打赢关底 Boss 给的,都是奇物。它装的是"这一局你捞到了什么",不管从哪个渠道来。 > > 它是一个概念,不是一套东西。下面有**两根互不相干的轴**: > > - **分类轴**回答"给的是什么"——三个枚举:机制类 / 属性提升类 / 资源与机会类; > - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败后。 > -> 一个奖励属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 +> 一个奇物属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 > -> 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是奖励的唯一定义文档。 +> 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是奇物的唯一定义文档。 > > 数值纪律:本文件只写概念、取值域与指路;每件给多少、效果是什么一律不进正文,事实源是 `game/data/tables/relics.tres` 与 `game/data/tables/adventure.tres`。 ## 设计目的 -一次冒险要走三关,如果走完时角色和开局毫无区别,中途的每一次取舍就都不算数了。奖励就是那个把"这一局玩成了什么样"落下来的东西:让玩家在冒险过程中不断变强,且每一局变强的方向不同。 +一次冒险要走三关,如果走完时角色和开局毫无区别,中途的每一次取舍就都不算数了。奇物就是那个把"这一局玩成了什么样"落下来的东西:让玩家在冒险过程中不断变强,且每一局变强的方向不同。 -它同时要和跨冒险的成长隔开:永久保留的东西是[魔法道具](../排雷循环/魔法道具.md)(带在身上的物品)与[元进度](../跨局循环/元进度.md)(账号级的树),奖励只在当局存在,冒险收束即清零——它不是"你的存档变强了",而是"这一次下矿的你变强了"。 +它同时要和跨冒险的成长隔开:永久保留的东西是[魔法道具](../排雷循环/魔法道具.md)(带在身上的物品)与[元进度](../跨局循环/元进度.md)(账号级的树),奇物只在当局存在,冒险收束即清零——它不是"你的存档变强了",而是"这一次下矿的你变强了"。 -**边界判据(一句话)**:**一次冒险内获得、冒险收束即清零的,是奖励;跨冒险跟着你走的,是魔法道具。** +**边界判据(一句话)**:**一次冒险内获得、冒险收束即清零的,是奇物;跨冒险跟着你走的,是魔法道具。** -这条判据走的是生命周期,不走"是不是物品"。原因:奖励这个筐里既装"角色自身的变化",也装金币这类一次性兑付物——用"拿在手里 vs 带在身上"去切,切不开它们,但用"当局清零 vs 跨局保留"能一刀切开,且对筐里所有东西都成立。 +这条判据走的是生命周期,不走"是不是物品"。原因:奇物这个筐里既装"角色自身的变化",也装金币这类一次性兑付物——用"拿在手里 vs 带在身上"去切,切不开它们,但用"当局清零 vs 跨局保留"能一刀切开,且对筐里所有东西都成立。 ## 系统范围 | 负责 | 不负责 | |---|---| -| 奖励的定义、三个分类、以及分类与渠道的交叉开关 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | +| 奇物的定义、三个分类、以及分类与渠道的交叉开关 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | | 生命周期边界:何时出现、何时生效、何时清零 | 卡面排版与界面呈现细则——见 [HUD框架](../表现与支撑/HUD框架.md) | | 获取渠道的口径与约束 | 魔法道具与元进度——归上表两份文档 | | 与相邻概念的边界 | 格面资源、关卡节点、商店本身的规则——归各自所属文档 | @@ -36,17 +36,17 @@ ``` 【关内】排雷推理 → 战斗结算 → 通关 ──┐ - ├─→ 得到一份奖励 ─→ 后续关卡带着它继续 + ├─→ 得到一份奇物 ─→ 后续关卡带着它继续 奖励节点・商店・Boss 击败后 ┘ ``` -奖励处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 +奇物处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 ## 核心规则 ### 1. 分类轴:三个枚举 -奖励只有一个名词;需要区分时才说它属于哪个分类,不给分类另起名字。 +奇物只有一个名词;需要区分时才说它属于哪个分类,不给分类另起名字。 | 分类 | 它给的是什么 | 落点 | 事实源 | |---|---|---|---| @@ -99,11 +99,9 @@ #### 1.5 命名出处 -机制类与属性提升类都取自 DND 规则书的既有名词:专长对应 Feat,属性提升对应 Ability Score Improvement(ASI)。资源与机会类的命名**待定**——候选是「资源」「补给」「余量」,取决于最终把哪一层的共性当作这一类的主要性质。玩家可见文案只写效果,不出现任何分类名。 +机制类与属性提升类都取自 DND 规则书的既有名词:专长对应 Feat,属性提升对应 Ability Score Improvement(ASI)。**顶层「奇物」取自 DND 魔法物品的九分类之一 Wondrous Item——官方中文译名就是「奇物」,是那个专门装不好归类但有奇效的东西的兜底杂类。** 用它做顶层名的理由:地下城里挖到的、商店里能买到的、能把你变强的、又确实贵重的东西,在 DND 里没有别的总称,只有 Treasure 和 Wondrous Item 两个候选,而 Treasure 偏向财物,装不下专长这种你会了件以前不会的事。奇物天生是杂类兜底,正好对应本概念下三个互不相干的分类(规则 / 数字 / 余量)——它们本来就没有共同点,能拢在一起的只有一个不好归类但有用的名字。资源与机会类内部的命名**待定**。玩家可见文案只写效果,不出现任何分类名。### 2. 渠道轴:与分类的交叉 -### 2. 渠道轴:与分类的交叉 - -三个渠道各只取走分类的一部分。这张表是奖励概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 +三个渠道各只取走分类的一部分。这张表是奇物概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 | 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后(见 2.1) | |---|---|---|---| @@ -111,7 +109,7 @@ | **属性提升类** | 出 | 出(口径「训练」) | 不出现 | | **资源与机会类** | 出 | 出(**金币除外**,见 2.4) | 不出现 | -**这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奖励的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 +**这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奇物的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 **渠道定位 vs 默认原则(两句,别混)**: @@ -126,11 +124,11 @@ **终局 Boss 不给**:兑付只发生在**终局之前的 Boss** 身上——打赢最终 Boss 时冒险已经结束,没有后续关卡可消费,给了也无处生效。三关结构下,一局的确定性专长兑付次数由此确定(每个终局前 Boss 一次)。 -**不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 +**不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奇物 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 #### 2.2 专长门票:非 Boss 渠道怎么给专长 -奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奖励项,选中或买下之后,**立刻**开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 +奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奇物项,选中或买下之后,**立刻**开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 **它归机制类,不归资源与机会类**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于机制类。所以在交叉表上,机制类在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 @@ -157,30 +155,30 @@ **为什么是"展示次数"而不是"节点次数"**:保底要保的是"玩家看到的脸",刷新本来就是让玩家多一次看脸的机会,若刷新不计入,保底与刷新两套机制会打架——玩家可以用刷新绕开保底的计数语义。 -玩家视角它长这样:在普通的三选一奖励或商店货架里,偶尔会冒出一张不一样的卡——拿到它,立刻再开一次专长选择。它是奖励面里的惊喜,不是奖励面的常态;而连续几次没见到之后,它一定会来一次。 +玩家视角它长这样:在普通的三选一奇物或商店货架里,偶尔会冒出一张不一样的卡——拿到它,立刻再开一次专长选择。它是奇物面里的惊喜,不是奇物面的常态;而连续几次没见到之后,它一定会来一次。 #### 2.3 商店口径:训练 -商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励节点那一侧完全相同:都是往同一个持有集里加一项奖励。 +商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励节点那一侧完全相同:都是往同一个持有集里加一项奇物。 #### 2.4 渠道约束分三层:白名单 / 可计算谓词 / 显式例外 一个"某分类在某渠道出不出现"的判断,实际由三层叠起来决定: -| 层 | 是什么 | 判据来源 | 新增渠道或奖励时 | +| 层 | 是什么 | 判据来源 | 新增渠道或奇物时 | |---|---|---|---| | **一层 分类白名单** | 分类轴决定渠道——机制类走 Boss、另两类走奖励节点与商店 | 分类本身 | 新分类按 1.4 判据归类,自动继承该类的渠道 | -| **二层 可计算谓词** | 渠道与奖励之间的**结构性**关系,能算出来 | 对象与渠道的内在关系 | **自动适用,不用改表** | +| **二层 可计算谓词** | 渠道与奇物之间的**结构性**关系,能算出来 | 对象与渠道的内在关系 | **自动适用,不用改表** | | **三层 显式例外清单** | 人为的设计选择,没有内在理由可推 | 设计决定 | **只能逐条加,每条必须写理由** | **先诚实回答"计价物不自售不就是特判吗"**:**形式上是的**——它确实是在分类白名单之外又加了一道过滤,不是从分类推出来的。但它和三层那种"死特判"有实质区别: -| | 写法 | 新增渠道/奖励时 | 维护方式 | +| | 写法 | 新增渠道/奇物时 | 维护方式 | |---|---|---|---| | 死特判 | "GP 不进商店"(一条记录) | 每多一个例外加一条记录 | 靠人记住,容易漏 | | **可计算谓词** | "X 是渠道 C 的计价物 → X 不进 C"(一个函数) | **自动判定,不用改表** | 判据在对象属性上,不会漏 | -所以准确的说法是:**它没有消除"在白名单外加过滤"这件事,但把过滤从"枚举例外"变成了"计算谓词"**。以后新增渠道或奖励,只要"不出现"的原因是**结构性**的——来自奖励与渠道的内在关系(计价物、即时兑付、需要先决条件等)——就能写成谓词自动算;如果原因是**设计性**的("我就是想让它在这一关不出"),那就只能进三层清单。 +所以准确的说法是:**它没有消除"在白名单外加过滤"这件事,但把过滤从"枚举例外"变成了"计算谓词"**。以后新增渠道或奇物,只要"不出现"的原因是**结构性**的——来自奇物与渠道的内在关系(计价物、即时兑付、需要先决条件等)——就能写成谓词自动算;如果原因是**设计性**的("我就是想让它在这一关不出"),那就只能进三层清单。 **所以要害不是"有没有例外",而是"例外能不能被算出来"**。三层清单不是不能用,但每一条都必须写出理由;一条写不出理由的例外,就是坏味道,应该回头质疑分类是不是分错了。 @@ -210,7 +208,7 @@ ### 3. 作用对象与范围 -- **作用对象**:角色本人,以及角色参与的结算过程。奖励不改敌人、不改棋盘生成、不改关卡内容。 +- **作用对象**:角色本人,以及角色参与的结算过程。奇物不改敌人、不改棋盘生成、不改关卡内容。 - **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源与机会类里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 - **时间范围**:整局冒险。机制类与属性提升类自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源与机会类里的金币与回复是即时兑付,拿到即消费完。 - **归属范围**:不进账号永久进度,不带到下一次冒险。 @@ -236,11 +234,11 @@ | 相邻概念 | 关系(只写关系,不写对方的规则) | |---|---| -| [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对,判据是生命周期:**奖励当局清零,魔法道具跨冒险保留**。两者互不相通——奖励永不进同调位,魔法道具永不进当局随机渠道。 | -| [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,奖励管当局构筑,两层互不代替。 | +| [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对,判据是生命周期:**奇物当局清零,魔法道具跨冒险保留**。两者互不相通——奇物永不进同调位,魔法道具永不进当局随机渠道。 | +| [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,奇物管当局构筑,两层互不代替。 | | [战斗结算](../战斗循环/战斗结算.md) | 机制类的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | | [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | -| [关卡节点地图](关卡节点地图.md) | 是渠道的载体,不是奖励的属性。机制类挂在 Boss 节点兑付面上,节点类型词表零扩类。 | +| [关卡节点地图](关卡节点地图.md) | 是渠道的载体,不是奇物的属性。机制类挂在 Boss 节点兑付面上,节点类型词表零扩类。 | | [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集,也不是渠道给的。 | | [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | @@ -276,12 +274,12 @@ ## 验收标准 -1. 三个分类走同一套获取流程,代码里只有一个表示"已持有奖励"的集合。 -2. 一次冒险内获得的奖励在之后任何关卡都生效;开新冒险后持有集为空。 -3. 一项被选定的奖励不再出现在任何后续渠道。 +1. 三个分类走同一套获取流程,代码里只有一个表示"已持有奇物"的集合。 +2. 一次冒险内获得的奇物在之后任何关卡都生效;开新冒险后持有集为空。 +3. 一项被选定的奇物不再出现在任何后续渠道。 4. 每个流派标签至少有一项挂在排雷侧的结算触发点上(防止机制类沦为纯战斗数值)。 5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 -6. 文档与代码里提到它时只有"奖励"这一个名字;需要区分时用"机制类/属性提升类/资源与机会类"描述,不得另造称呼。 +6. 文档与代码里提到它时只有"奇物"这一个名字;需要区分时用"机制类/属性提升类/资源与机会类"描述,不得另造称呼。 7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 9. 金币不出现在商店货架上——这是「计价物不自售」谓词算出来的结果,不是给金币单独立的一个分类;它确实是在分类白名单之外加的一道过滤,只是这道过滤可自动计算而非靠枚举。 @@ -310,5 +308,6 @@ | v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | | **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源与机会类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源与机会类里,同时把它们的即时兑付性质显式登记为类内异质性。 | | v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源与机会类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | -| v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | | v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表机制类在两渠道由"不出现"改为"**门票形式**";门票归机制类(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | +| v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | +| **v2.4** | 2026-10-05 | **顶层由「奖励」改名为「奇物」(Wondrous Item)**。用户否决了「奖励」「收益」与全部自造词(进益/造化/机缘/遇获),要求回到 DND/西幻既有名词。定名依据:DMG 魔法物品九分类中的 Wondrous Item,官方中文译名即「奇物」,是专装不好归类但有奇效之物的兜底杂类——正好对应本概念下三个互不相干的分类。此前考虑过的 Treasure(宝物)因偏财物、装不下专长而落选;roguelike 品类惯例 Relic 因用户否决遗物落选。**代码词族定为 `curio_*`、`ADVENTURE_CURIO`**(`reward_*` 已被 `reward_pick` / `reward_node` / `reward_preview` 占用,不能对齐)。 | diff --git a/design/gdd/systems/表现与支撑/HUD框架.md b/design/gdd/systems/表现与支撑/HUD框架.md index c198990e..ed70e931 100644 --- a/design/gdd/systems/表现与支撑/HUD框架.md +++ b/design/gdd/systems/表现与支撑/HUD框架.md @@ -216,7 +216,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 已开格的奖励身份常读;未开格类型微光(英雄周围 8 格内的未开格显示资源类型——概念定义见本篇「未开格类型微光」节) | | [魔法道具](../排雷循环/魔法道具.md) | 库存条常读;使用交互与目标拾取;板级叠加层信息呈现 | | [棋盘生成](../排雷循环/棋盘生成.md) | 零合法板的诚实告知(数据面经战斗结算上抛,本系统只管提示形态) | -| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=奖励段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | +| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=奇物段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | ## P0 最小闭环 @@ -300,6 +300,6 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | v0.10 | 2026-09-26 | 渲染技术注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗舞台 Node2D 化——BattleStageView 内部由 PanelContainer+Control 站桩改为 Control 壳 + SubViewportContainer + SubViewport + Node2D 世界(StageWorld/StandeeBody),类名/setter 面/公共方法契约不变、调用点零改造;状态图标行与悬停 tooltip 保留 Control 载体挂壳层(伴随件);C6 字体注入挂点复用(set_world_font);三区布局与性能预算(同屏 draw calls < 200)不变;占位表现等价平移(时序常量逐字对照——等价证明=git 提交 7f24b64,文件已按生命周期条款退役) | | v0.11 | 2026-09-27 | 关卡画面 UX spec 建档([level-map](../../ux/level-map.md),关卡画面 UX 批——用户拍板立项):义务清单「关卡节点地图」行挂屏级 spec 指针;屏级权威行与不负责表改按屏分治口径(战斗屏 = battle.md / 关卡画面 = level-map.md)。文档面零机制改动 | | v0.12 | 2026-09-30 | **未开格类型微光概念收口批(用户裁决落位)**:新增「未开格类型微光」节=全项目唯一正主定义(五要素——作用对象=英雄周围 8 格内的未开格〔与可挖域同圈〕/信息内容=只类型不泄雷安/生命周期=入圈亮出圈灭开格灭/关联边界/实装状态=契约定稿〔样张 v2〕游戏内待实施批);核心规则章六节改七节;呈现义务来源清单「地图战斗资源」行补微光指路;验收标准补微光呈现线。背景:该概念此前只活在 06 登记与 art-bible 复述,「常显/全部未开格」无范围表述酿成理解事故(2026-09-30 用户纠正口径),本批落位正主、他文只许指路 | -| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=奖励段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | +| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=奇物段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | | v0.14 | 2026-10-03 | **视野迷雾实施批落籍注记(迭代 11 第④批)**:迷雾节补「实施状态」注记(四裁决逐条对账:纯呈现两态逐位一致/暗淡记忆态灰显可读/LIGHT_RADIUS=8 参数化〔提灯 +2 插值位预留未接〕/类型微光仍贴身 8 邻格);实装状态行「待实施批」改「已实装」;验收标准迷雾行去「待实施批落地后验收」括注转正式验收。机制定义零改动(定义一句话/作用范围/生命周期/关联边界/配套拍板全段原样);黑暗区域渲染规格落 art-bible §6.5(v3.5) | | v0.13 | 2026-09-30 | **视野迷雾概念落位批(用户拍板立项)**:新增「视野迷雾」节=正主定义(菱形灯光区+黑暗边界;区外已开格=暗淡记忆态灰显可读、区外未开格=全黑;灯光半径起步=微光环 8 格同圈;纯呈现层,与已退役雾格无关);验收标准补迷雾线;配套拍板随节登记(魔法提灯灯甲外扩 +2 格、类型微光不随视野扩、初始展开收窄后置 Alpha 差异化批)。实施待主线编卡 | diff --git a/design/gdd/ux/battle.md b/design/gdd/ux/battle.md index e3ec276a..616dd53c 100644 --- a/design/gdd/ux/battle.md +++ b/design/gdd/ux/battle.md @@ -105,7 +105,7 @@ - 攻击值 + 修正来源角标(战斗在消费、且站桩上无展示) - 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性) - 魔法道具槽(**已实装**:四槽两步交互,详见 [node-reward.md](node-reward.md)——随身战斗用道具的唯一展示面) - - 奖励列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) + - 奇物列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) - **D 区扫雷图 · AP 条** - AP 点阵 + 停手按钮(现行) - **RAP 读数(点阵+数字)**——自 C 区迁入,置于弃图刷新按钮旁(2026-09-26 拍板:RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮) @@ -120,7 +120,7 @@ | 区 | 位置与尺寸 | 内容 | |---|---|---| | **B 战斗画面** | 全宽 × 252px | 主角站桩立绘(左)+ 兑现演出区(中)+ 敌人站桩立绘 ×1–3(右)——**全站桩形态(2026-09-20 用户拍板,敌人卡形态待办裁决收口):主角与敌人均为无框立绘+底座,零卡片**;主角与敌人站桩 = **HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板)**;底部结算明细带(24px 摘要 / 结算期 84px 实时流);顶部中央轮次·阶段指示 | -| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;魔法道具槽(预留)、奖励列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | +| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;魔法道具槽(预留)、奇物列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | | **D 扫雷图** | 中下 ~1036px × 548px(原右下面板删除后横向加宽,吸收其宽度) | 顶部 AP 条(44px:左——AP 点阵 + 停手按钮;中——RAP 点阵+数字〔自 C 区迁入,贴弃图刷新按钮,2026-09-26 拍板〕;右——图例按钮 + 弃图刷新按钮〔雷图右上角,2026-09-12 拍板〕);棋盘主体(居中,格 36–45px 见方);toast 槽(上缘内侧) | > 布局为 B/C/D 三区——关卡进度条不在战斗屏(节点链进度常驻关卡画面,见 Navigation Position;字母不重编沿用 B/C/D)。 @@ -147,7 +147,7 @@ | B | 结算明细回看 | 模态 overlay | 完整流水逐行(现行 9 类行协议;未生效类行聚合计数) | 关闭 | battle_log_view.gd 改造 | | C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;原「HP/攻击/RAP 显示」——HP 与 RAP 随信息归属拍板迁出本组件) | 只读 | HUDView 拆分 | | C | 魔法道具槽(已实装:四槽两步交互,详见 [node-reward.md](node-reward.md)) | 图标槽 ×4 | 随身战斗用道具的唯一展示面;库存已随迭代 7 落地(C 区四槽+关卡域库存),清库反馈呈现待批 | 悬停 tooltip(道具语义) | 新建(随魔法道具批,已落地) | -| C | 奖励列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | +| C | 奇物列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | | D | AP 条 | 点阵 + 按钮组 | 本轮 AP 点阵、停手按钮(左)、**RAP 点阵+数字(自 C 区迁入 2026-09-26——RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮;RAP 清零可见反馈〔行动经济〕载体随迁)**、弃图刷新按钮(右端·雷图右上角;RAP−8 · 本轮剩 N 次——上限 2 次已随行动经济 2026-09-12 修订生效) | 点击提交意图 | HUDView 拆分 | | D | BoardView | 网格 | 棋盘全部格态 + 小人 + 旗 + 变异纹带 + 奖励身份 icon(已开格;绘制优先级 数字>小人>旗>奖励徽章>变异纹带>底色——徽章不进数字区,样张验收项) | 左/右键意图提交 | ✅ board_view.gd 迁移 | | D | 悬停预承诺光标 | 光标态 | 移动/挖/旗三语义光标 + 目标格边框高亮 | 自动 | 新建(排雷玩法×6③) | @@ -204,7 +204,7 @@ │ │ 魔法道具槽(预留) │ │ │ │AP不足·剩0点 │ 12 12 1 ░ 2 ▓▓ ▓▓ │ │ │ │ ◇ ◇ ◇ ◇ │ │ │ └──────────────────┘ 12 █ 1 1 2 ▓▓ ▓▓ │ │ │ ├──────────────────┤ │ │ 1 2 2 🚩 █ 2 1 1 ▓▓ 👫 1 1 ░ │ │ -│ │ 奖励列表(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ +│ │ 奇物列表(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ │ │ 锻造+2攻 │ │ │ ▓▓ 1 1 ░ ░ 2 ▓▓ │ │ │ │ (空态=隐藏) │ │ │ ( █=可挖域微光 👫=小人) │ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────┘ │ @@ -440,7 +440,7 @@ | 2026-09-23 | 实现注记(棋盘 Node2D 迁移批 Phase A,代码实装同批;上位裁决 ADR-0006):棋盘渲染 Node2D 化(BoardView = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界,信号/click_cell/_cells 契约保持,新增 push_input 端到端输入探针);格尺寸公式锚点不变(set_cell_area = floor((min(宽,高) − 预留 − (N−1)×格间距) / N) 单点可调),布局与交互语义零改动 | | 2026-09-26 | 实现注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗画面 Node2D 化(BattleStageView = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界,站桩本体 StandeeBody 世界精灵;set_enemies/clear_enemies/on_step_row_fx/gray_all_enemies 等 setter 面签名保持,弹道落点锚点=壳层口径 world_to_shell 单点);状态图标行与悬停 tooltip 保留 Control 载体挂壳层;三区布局尺寸零改动(B 区外框 252px 逐位) | | 2026-09-26 | **封印紫批**(用户拍板):插旗呈现色 旗朱 #C63D22 → 封印紫 #7C3AA8(色相 ≈267°,避开禁入带)——旗字形/已承诺封印框/旗化暴击弹道随批换色;拒绝边框闪语义归危险红;Boss 节点描边归紫赤本色。修订记录历史行旗朱字样系当时口径留痕不改 | -| 2026-09-26 | **战斗屏信息归属批(用户 2026-09-26 三轮纠偏后拍板;代码实装另批——hero_info_panel_view.gd / hud_presenter.gd 改造 + 探针断言迁移,登记待办)**:立两条信息归属原则并全屏贯行——①循环口径原则(战斗屏只展小循环内被消费、影响当下决策的数据;中/大循环资源不得入侵)②单一展示面原则(同一信息全屏唯一展示面;单位本体已承载的信息数据框不重复;资源数字贴唯一消费口)。随拍板落地:① B 区站桩 = HP 与状态效果唯一展示面——C 区 HP 条/HP 文字/立绘占位/状态效果槽×4 退役(重复展示;证据链 = hud_presenter.gd 同一 s.hero.hp/s.hero_effects 双投喂 B/C 两区);② RAP 读数(点阵+数字)迁 D 区 AP 条、置弃图刷新按钮旁(RAP 唯一消费口 = 弃图刷新——就近原则);③ C 区状态槽悬停 tooltip 职责并入 B 区站桩状态小图标;④ GP(中循环)/钥石(大循环)迁出战斗屏,去向挂 OQ14;⑤ C 区改「攻击数据框 + 魔法道具槽(预留)+ 奖励列表(预留)」——预留区来自魔法道具与关卡内属性提升的既有立项;⑥ 空态/清零反馈/悬停交互/AC/§13 义务表载体同步改写。**批内遗留两项待拍板(OQ13/14)**:护甲 AC 是否补入 C 区数据框;GP/钥石去向 | +| 2026-09-26 | **战斗屏信息归属批(用户 2026-09-26 三轮纠偏后拍板;代码实装另批——hero_info_panel_view.gd / hud_presenter.gd 改造 + 探针断言迁移,登记待办)**:立两条信息归属原则并全屏贯行——①循环口径原则(战斗屏只展小循环内被消费、影响当下决策的数据;中/大循环资源不得入侵)②单一展示面原则(同一信息全屏唯一展示面;单位本体已承载的信息数据框不重复;资源数字贴唯一消费口)。随拍板落地:① B 区站桩 = HP 与状态效果唯一展示面——C 区 HP 条/HP 文字/立绘占位/状态效果槽×4 退役(重复展示;证据链 = hud_presenter.gd 同一 s.hero.hp/s.hero_effects 双投喂 B/C 两区);② RAP 读数(点阵+数字)迁 D 区 AP 条、置弃图刷新按钮旁(RAP 唯一消费口 = 弃图刷新——就近原则);③ C 区状态槽悬停 tooltip 职责并入 B 区站桩状态小图标;④ GP(中循环)/钥石(大循环)迁出战斗屏,去向挂 OQ14;⑤ C 区改「攻击数据框 + 魔法道具槽(预留)+ 奇物列表(预留)」——预留区来自魔法道具与关卡内属性提升的既有立项;⑥ 空态/清零反馈/悬停交互/AC/§13 义务表载体同步改写。**批内遗留两项待拍板(OQ13/14)**:护甲 AC 是否补入 C 区数据框;GP/钥石去向 | | 2026-09-26 | **信息归属二轮拍板(用户 2026-09-26,OQ13/14 收口)**:① 我方护甲 AC 补入 C 区攻击数据框(唯一展示面——布局表/组件清单/线框图同步);② GP/钥石去向定案:GP = 关卡画面常驻总量 + 战斗结算画面总量+增量,钥石 = 结算画面 + 营地(具体呈现归对应 UX spec 批次);③ 敌方 AC 展示面挂起——用户口径「敌方 AC 无任何展示」与现行代码冲突(standee_view.gd 底库名字行渲染「名字·护甲·AC%d」,系敌人技能池批克制对策可读性义务),证据链已呈报待终裁,本 spec 暂不改敌人站桩行 | | 2026-09-26 | **敌方 AC 展示终裁收口(用户 2026-09-26 终裁)**:敌方 AC 数值全屏退役(任何区不直接展示)、护甲类型改图标方式展示(形状+色相双通道,终稿图标资产归美术批)、敌人站桩底座下名字行退回纯名字+护甲类型图标;旧「克制对策可读性义务」降级承载——类型保留、数值退役。终裁理由(用户口径):HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性。同步改写:信息归属树敌人站桩行、Component Inventory 敌人站桩立绘行、OQ13。**代码实装说明**:`standee_view.gd` 改造(站桩名字行去 AC 数值 + 护甲类型图标化)由并行代码批执行,本批只做文档同步 | | 2026-09-27 | **UX 文档欠账处置批(用户四项拍板:player-journey 不建 / accessibility 不另立改指 HUD框架 / node-reward 改挂魔法道具内容重定批 / level-clear 建档 design/gdd/ux/level-clear.md)**:① 删 §Player Context ⚠️ player-journey 未建注记,OQ1 改收口注记;② §Accessibility 头、§Transitions 减动效行、OQ2 改指 HUD框架「可访问性基线」节 + 设置与本地化待设计清单 #1(tools/doc_link_known.txt 欠账行随之清空);③ 导航残留修正——§Navigation Position 图胜利分支、§Entry/Exit 离开表、§Interaction Map 胜利 overlay 行改按现行代码实态(胜利后返回关卡画面选路;节点覆盖层 = 关卡画面域、落地奖励/恢复节点时开出;胜利/失败 overlay 组件锚 battle_end_overlay.gd)——原「胜利 → 节点奖励/恢复覆盖层」系停点前移批前残留;④ OQ3 过期陈述更正(interaction-patterns.md 2026-09-12 已建成)、OQ8 改收口注记。本批只动文档面,代码零改动 | diff --git a/design/gdd/ux/level-map.md b/design/gdd/ux/level-map.md index 43811eb7..4a54f3d3 100644 --- a/design/gdd/ux/level-map.md +++ b/design/gdd/ux/level-map.md @@ -91,7 +91,7 @@ **布局决策 3 —— 放弃冒险二次确认(2026-09-27 拍板)**:放弃 = 整局冒险终结,不可逆(pattern 7 破坏性确认)。首击转入确认态(按钮文案变「再点一次确认放弃——不可逆」,危险红边框脉冲约 3 秒,超时回落),二击才提交。代价语义(已获大奖励保留、同失败结算)常驻按钮文案。 -**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「奖励列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 +**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「奇物列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 ### ASCII Wireframe diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 87c774d4..723c8346 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -21,7 +21,7 @@ entities: attributes: kind: autoload stream_architecture: **统一流(ADR-0007 裁丙 2026-09-27——用户两轮复裁终选「统一用一个流」并拍「全面执行」,七流并一+全事件日志)**:唯一主种子 + 单盐派生 + 唯一全局取数计数器;历史注记 = 2026-09-12 encounter 增流〔遭遇随机化批〕/ 2026-09-16 armor_roll〔护甲掷点批〕+ behavior_roll〔敌人技能池批〕/ 2026-09-20 variant_place〔地形变异批〕/ 2026-09-21 gp_drop〔GP+商店房批〕——分盐分流架构随并流批整体退役;combat_var 已于 2026-09-07 full 评审删除(玩法随机不预置基础设施) - purpose_tags: [board_gen, reward_roll, encounter, armor_roll, behavior_roll, variant_place, gp_drop, node_map, reward_pick, shop_draw](封闭词表 = 并流前七流名全保留 + node_map〔关卡节点图生成 v0.4〕+ reward_pick〔迭代 10 奖励重构〕+ shop_draw〔迭代 11 第②批 T1——商店货架抽签,每次抽 3 恰一 scope〕;扩签需改代码 + 评审;结算表 armor_roll_stream 字段降格为纯标签) + purpose_tags: [board_gen, reward_roll, encounter, armor_roll, behavior_roll, variant_place, gp_drop, node_map, reward_pick, shop_draw](封闭词表 = 并流前七流名全保留 + node_map〔关卡节点图生成 v0.4〕+ reward_pick〔迭代 10 奇物重构〕+ shop_draw〔迭代 11 第②批 T1——商店货架抽签,每次抽 3 恰一 scope〕;扩签需改代码 + 评审;结算表 armor_roll_stream 字段降格为纯标签) stream_facade: open_stream(purpose) 取号(purpose 只进事件日志不参与派生;全局计数器 +1 → 单盐派生 → 返回已播种实例 → 落日志);derive_at(scope) 纯函数供测试/预览/日志回放(不推计数器);open_scope 显式位取号门随子流派生向量退役(behavior_roll 逐敌顺序取号替代) event_log: 冒险会话制全事件落盘——user://logs/rng_log_<主种子>.jsonl,会话行 + 逐次取数行(scope / 用途标签 / 派生种子);写盘失败告警降级不致命;号位全序化后不再单独回答「第 N 次某类事件」(路线依赖为已裁决代价),单点定位由日志承载 new_adventure: 冒险开始重播种入口——调用权 = AdventureRunner.start_adventure 唯一正式调用方(切片单关测试路径 LevelRunner.start_level 除外;冒险结构实现批 2026-09-21——主种子全冒险恰一次注入,冒险内不重置不逐关播种);并流批加重播种同时开日志会话 @@ -90,11 +90,11 @@ entities: rap_refresh_cost: 8(2026-09-22 随 ap_per_round 6→8 同批随动回拨〔登记漏账补同步 2026-09-24〕,保持"满停一轮 = 恰好一刷基线节拍"耦合;解耦须单独立批) move_ap_cost: 0(冻结:P4 探索氛围承载,非经济杠杆) chain_ap_cost: 0(冻结:v2 定稿) - rap_rules: RAP = 停手剩余 AP 1:1 转存(结构,非 knob);战斗域生命周期(battle_over 清零,跨轮跨图保留);来源唯一(停手)、支出唯一(刷新);刷新决策主体 = 玩家发起、挖掘期(Active 相位)当场换图——HUD框架 经组合根/战斗结算 refresh_board 编排调用(2026-09-12 音频 修订:原"结算编排期 Waiting 代理调用"退役);每轮上限 2 次(refresh_cap_per_round 结构位默认 2——HUD框架 提案采纳,RoundStart 重置;原"同一 Waiting 相位多次刷新合法/无结构上限"作废);旧板旗随旧板作废(零兑付、旗 AP 不返还——排雷玩法 EC11 承载);挖掘期当场刷新无结算发生(原"敌方时间税"自惩失效——行动经济 OQ3 阈值联动复核);cleared 轮恒 new_board、stopped/ap_exhausted 轮恒 same_board(战斗结算 回发违约 fail-fast 不变);刷新图不产生清图奖励;无战斗收益——原 ×2/×1 折算与 stop/clear_multiplier 已作废(2026-09-07 用户拍板) + rap_rules: RAP = 停手剩余 AP 1:1 转存(结构,非 knob);战斗域生命周期(battle_over 清零,跨轮跨图保留);来源唯一(停手)、支出唯一(刷新);刷新决策主体 = 玩家发起、挖掘期(Active 相位)当场换图——HUD框架 经组合根/战斗结算 refresh_board 编排调用(2026-09-12 音频 修订:原"结算编排期 Waiting 代理调用"退役);每轮上限 2 次(refresh_cap_per_round 结构位默认 2——HUD框架 提案采纳,RoundStart 重置;原"同一 Waiting 相位多次刷新合法/无结构上限"作废);旧板旗随旧板作废(零兑付、旗 AP 不返还——排雷玩法 EC11 承载);挖掘期当场刷新无结算发生(原"敌方时间税"自惩失效——行动经济 OQ3 阈值联动复核);cleared 轮恒 new_board、stopped/ap_exhausted 轮恒 same_board(战斗结算 回发违约 fail-fast 不变);刷新图不产生清图奇物;无战斗收益——原 ×2/×1 折算与 stop/clear_multiplier 已作废(2026-09-07 用户拍板) flag_rules: 旗 = 排雷玩法 棋盘状态单态(原口袋旗双态作废);随图存续,清图/刷新消失;标中旗 = 怪物 debuff(三向效果定稿),兑付一次性、资格以雷格实例为键(每雷本次战斗至多兑付一次;放置实例仅为当轮结算载体);旗无移除手段(拔旗退役 2026-09-19——原「拔旗重插不恢复已消费资格」OQ5/F1 条款 2 通道结构性消失,重插被 flag_present 拒绝);挖旗格放行、兑付四情况改判归 战斗结算 v0.18(插旗不可逆批 2026-09-19) round_end_carrier: 双发射源(2026-09-07 修订)——棋盘路径(ap_exhausted/cleared)由 排雷玩法 外发(systems-index 原裁决不变),停手路径(stopped)由 行动经济 直发;payload 同构 (path_tag, continuation_hint) arbitration_priority: cleared > stopped > ap_exhausted(同帧/同批次结束路径总仲裁;stop-first 批次腿 deferral 至 排雷玩法 集成测试,义务清单见 systems-index 门禁记录) - downstream_contract: 行动经济 F1 五条款(① 效果当量对照单一线性换算 · ② 标中旗锚严格 > 最低档 + 连锁放大边际基准 + 总吞吐对账 · ③ 挖掘风险不等式 P(安全)×buff > P(雷)×敌方增益,战斗结算 单一闭合 owner · ④ 清图奖励 > 0 且 地图战斗资源 差异化插槽(图类型战斗域恒定) · ⑤ 清图 vs 弃图刷新支配性,战斗结算 闭合强制检查点)——2026-09-07 三轮评审定稿 + downstream_contract: 行动经济 F1 五条款(① 效果当量对照单一线性换算 · ② 标中旗锚严格 > 最低档 + 连锁放大边际基准 + 总吞吐对账 · ③ 挖掘风险不等式 P(安全)×buff > P(雷)×敌方增益,战斗结算 单一闭合 owner · ④ 清图奇物 > 0 且 地图战斗资源 差异化插槽(图类型战斗域恒定) · ⑤ 清图 vs 弃图刷新支配性,战斗结算 闭合强制检查点)——2026-09-07 三轮评审定稿 cross_field_validation: 任一动作成本(dig/flag_place;flag_pull 随拔旗退役 2026-09-19 移出)≤ ap_per_round——ActionEconomyTable schema validate() 跨字段类别,违规加载期致命(2026-09-07 三轮评审增补;条件性夹具登记 数据配置 校验双通道) ap_delta_queue: (**2026-09-20 格面资源八型批新增**)action 型格面资源的下轮行动点修正排队面——queue_ap_delta/pending_ap_delta:结算期 ±power 同轮累加,下一轮开始(notify_round_start)兑现 = 基线 ap_per_round + 排队净值(下限 0、兑现后清零);排队净值不跨轮保留;跨轮携带量口径 = RAP(唯一显式携带资源)+ 一次性修正队列 referenced_by: [棋盘生成, 排雷玩法, 地形变异, 战斗结算, 增益状态, 地图战斗资源, HUD框架, 教学引导] @@ -155,8 +155,8 @@ entities: single_enemy_assumption: **回验结果 = 不成立——敌人系统 定多敌(用户 2026-09-09 拍板;同日 敌人系统 GDD 兑现 增益状态 预授权接口漂移条款)**:MVP 战斗 = 1–3 个同敌种敌单位(EnemyTable.unit_count);效果 side-wide 语义改"全体存活敌单位"(层数 = side 共享池,**增益状态 现接口零变更兼容**);target_ref(单体寻址)= 扩展位义务——首个单体效果上线时 增益状态 补列(随批:战斗结算 归集语义/HUD框架 呈现裁决);增益状态 GDD 正文不改,以本条为准(行动经济 OQ5 收编先例) mechanics: 战斗域统一状态容器(三向效果同构实例)· 单一时限量纲 remaining_settlements(先兑付后衰减,每轮结算 −1,dur=1=一次性;跨轮跨图延续、battle_over 全清不跨战斗)· 按行叠层(stack 授予不触碰 R;refresh 重置取实例授予时快照 D;合并在授予时、结算作用顺序归 战斗结算——两序分离)· 满层授予拒绝原子(false+容器零写)· 合成 = L×m 加算、percent 越域不 clamp(地板/换算归 战斗结算 SettlementTable)· 授予集中在 战斗结算 结算编排(排雷玩法/地图战斗资源 零直接接口)· 零随机(无 RNG 流消费)· 零信号外发(纯被动容器) api: notify_battle_start / apply_effect(effect_id, source) -> bool / query_active(side) -> Array(插入序;六归因字段+display_name+授予时快照投影)/ decay_round() -> int / notify_battle_end() -> bool——战斗结算 消费契约,provisional 登记 - settlement_obligations: 八项(战斗结算 GDD 门禁评审缺项即 blocking)——① 同轮多授予按确定次序调用 ② 事实→授予恰一次转化(增益状态 不去重)③ percent→乘数换算方向与合成值地板成文 ④ 最后一轮 decay 判定 ⑤ F1 条款 1 效果档位对照表以 增益状态 实例为对照实物 ⑥ 每结算编排恰一次 decay_round(2026-09-09 增——decay 基数=1 先决条件)⑦ 结算明细按授予流水逐条标注来源(合并坍缩归因补偿,2026-09-09 增)⑧ “溢出未生效”行进结算明细协议(Rule 5 后半承载,2026-09-09 增)。**履行回执(2026-09-10)**:八项已全数落位 战斗结算 GDD(Core Rules 3/5/8/10/11 + Formulas F0–F2——落位映射 = 战斗结算 AC 覆盖矩阵"上游义务 23 条"行;③的 AP/表界数值随 F0 修订更新为 −520%/−1040%)。**2026-09-20 修订**:⑧ 随伏击单轮上限删除(用户拍板)退役——溢出未生效行类型下线(行协议 10→9 类),满层拒收走奖励未生效行 - presentation_obligations: (2026-09-09 登记 systems-index,缺项即 blocking)HUD框架×4——HUD 常显+EC12 空态规格定稿 / effect_id→icon 映射键契约(形状+色相双通道)/ 有利有害极性呈现映射(数据源 = 战斗结算 SettlementTable 效果语义,非 magnitude 符号)/ 全清状态栏去留;战斗表现×2——溢出行呈现 / origin_cell→玩家可读形态(缩略图/格子高亮);教学引导——“同轮拿满优于跨轮叠”教学(OQ7 配套);地图战斗资源——奖励身份预读(创意风险 #1 切面) + settlement_obligations: 八项(战斗结算 GDD 门禁评审缺项即 blocking)——① 同轮多授予按确定次序调用 ② 事实→授予恰一次转化(增益状态 不去重)③ percent→乘数换算方向与合成值地板成文 ④ 最后一轮 decay 判定 ⑤ F1 条款 1 效果档位对照表以 增益状态 实例为对照实物 ⑥ 每结算编排恰一次 decay_round(2026-09-09 增——decay 基数=1 先决条件)⑦ 结算明细按授予流水逐条标注来源(合并坍缩归因补偿,2026-09-09 增)⑧ “溢出未生效”行进结算明细协议(Rule 5 后半承载,2026-09-09 增)。**履行回执(2026-09-10)**:八项已全数落位 战斗结算 GDD(Core Rules 3/5/8/10/11 + Formulas F0–F2——落位映射 = 战斗结算 AC 覆盖矩阵"上游义务 23 条"行;③的 AP/表界数值随 F0 修订更新为 −520%/−1040%)。**2026-09-20 修订**:⑧ 随伏击单轮上限删除(用户拍板)退役——溢出未生效行类型下线(行协议 10→9 类),满层拒收走奇物未生效行 + presentation_obligations: (2026-09-09 登记 systems-index,缺项即 blocking)HUD框架×4——HUD 常显+EC12 空态规格定稿 / effect_id→icon 映射键契约(形状+色相双通道)/ 有利有害极性呈现映射(数据源 = 战斗结算 SettlementTable 效果语义,非 magnitude 符号)/ 全清状态栏去留;战斗表现×2——溢出行呈现 / origin_cell→玩家可读形态(缩略图/格子高亮);教学引导——“同轮拿满优于跨轮叠”教学(OQ7 配套);地图战斗资源——奇物身份预读(创意风险 #1 切面) ownership_note: 行动经济 OQ5“标中旗 debuff 档位归 地图战斗资源 表设计”经用户 2026-09-08 拍板收编——初值定稿权归 增益状态(2026-09-15 起为七行:标错反噬批两行 + 格面资源批 sapped 一行随批收编),锚验收权仍归 地图战斗资源/战斗结算,修订走接口漂移回写本条 dangling_ref_policy: effect_id 悬空校验**已激活**(2026-09-09 地图战斗资源 RewardTable 首个 effect_id 引用行〔defense_up〕回填——dangling_ref_policy"首个引用字段 owner 补"条款兑现;条件性夹具 = 地图战斗资源 reward_dangling_effect〔AC-17〕) referenced_by: [战斗结算, 地图战斗资源, 敌人系统, HUD框架, 教学引导, 战斗表现] @@ -195,7 +195,7 @@ entities: owner: design/gdd/systems/排雷循环/排雷玩法.md attributes: rule: O₀ = R₀ = 出生 3×3 ∪ 0 格 flood 闭包(与 棋盘生成 F1 求解器初始态同算子同值——运行期镜像,显式不含外扩 1 环);执行时点 = install_board 事务内一次(板级一次跨轮不重放) - properties: 免费(零 try_spend)· 计入清图进度 · 无奖励(channel=initial、reward_eligible=false——game-concept 定稿;战斗结算×3 强制项:不入奖励库)· 永不触雷(R₀ ∩ M = ∅ 为 排雷玩法 侧定理)· 永不触变异(棋盘生成 排除域 + install 不变式②) + properties: 免费(零 try_spend)· 计入清图进度 · 无奇物(channel=initial、reward_eligible=false——game-concept 定稿;战斗结算×3 强制项:不入奇物库)· 永不触雷(R₀ ∩ M = ∅ 为 排雷玩法 侧定理)· 永不触变异(棋盘生成 排除域 + install 不变式②) dual_containment_resolution: 双包含两臂在 排雷玩法 定稿下**构造性成立**——臂① R₀ ⊆ 棋盘生成 排除域(子项关系)· 臂② 棋盘生成 求解器初始态 = R₀(**恰等**)⇒ 棋盘生成 回退口径(出生 3×3 最小态)不触发、度量保真零降级(board_gen_table.minesweeper_dual_containment 的兑现回执) install_invariants: 四条结构不变式 fail-fast(增益状态 无雷 / 增益状态∪R₀ 无变异 / 数字恒真 / **R₀ ≠ S 清图退化板拒绝**——非 棋盘生成 clearable 闸复验,排雷玩法 状态机良构性守卫);诊断类别封闭枚举 {inv1_mine_in_spawn, inv2a_variant_in_spawn, inv2b_variant_in_r0, inv3_digit_invariant, inv4_r0_equals_s}(2026-09-09 评审补) degenerate_gap: **棋盘生成 修订义务(2026-09-09 登记,systems-index 排雷玩法 门禁块)**——反例 B(8×8 八雷先布后删幸存距离-2 雷 → 最终板全 0 格连通 → R₀=S 开局免费清图)与 N=1 行 100% 退化,证明 棋盘生成 布雷数下限必要不充分、F4 断言 A(inferability=1.0)零拦截:义务 = 棋盘生成 F5 legality 增 R₀≠S(违例 = 尝试作废重试)+ F4 断言严格零覆盖 + Rule 4 排除域基准措辞钉死"以最终产物板计";排雷玩法 侧不变式④为纵深防御 @@ -227,38 +227,38 @@ entities: 开轮摇号: 每轮轮次开始时为每个存活敌摇定本拍动作——排除冷却中技能后按权重份额归一抽签,中签率 = 权重 ÷ 可摇权重合计;随机消费在 战斗结算 换算层 behavior_roll 封闭流(敌人系统 首次定义,2026-09-16 敌人技能池批) 保底: 连续 M 拍执行的都是普通攻击 → 下拍必出特殊技(特殊技内按权重、不受冷却限制)——反旱季闸(敌人系统 首次定义,2026-09-16 敌人技能池批) 技能冷却: 施放后连续 N 拍不可摇中的技能行属性——与增益持续(状态行属性)是两个计时器互不相干(敌人系统 首次定义,2026-09-16 敌人技能池批) - 施放行: 增益技的结算明细行型(cast)——0 伤害动作、具名技能、不掷不折(原"不兑付伏击"的读怪奖励语义随 2026-09-20 八型批伏击退役作废);由蓄力行(charge)改型(敌人系统/战斗结算 首次定义,2026-09-16 敌人技能池批) + 施放行: 增益技的结算明细行型(cast)——0 伤害动作、具名技能、不掷不折(原"不兑付伏击"的读怪奇物语义随 2026-09-20 八型批伏击退役作废);由蓄力行(charge)改型(敌人系统/战斗结算 首次定义,2026-09-16 敌人技能池批) 伏击池: 【2026-09-20 格面资源八型批退役——本词条留档】敌方侧共享的伏击层数——本轮踩几颗雷就几层,轮末清零(side-wide 语义,敌人系统 首次定义;继任 = alert 警觉 side-wide 状态,由增益状态容器承载) 死亡即不动手: 轮到某敌人行动时它已死 → 这一下不打、招式轮转停格(2026-09-09 用户拍板,敌人系统 首次定义) 封锁格: 初始展开白送的那批已开格——恒无格面资源、不再有任何加成,但计入清图进度(排雷玩法 首次定义;install 期可精确枚举为 R₀——格面资源摇号清单的排除项;取代旧术语"资格格",2026-09-15 格面资源批) - 格面资源(CellResource): 关联到格子上的资源对象——装板期摇定九型类型身份(attack/defense/heal/blast/weaken/pierce/magic/action/gp——2026-09-18 伤害道具批五→七、2026-09-20 格面资源八型批七→八、同日 GP+商店房批八→九 +gp),安全格与雷格一视同仁、同池同分布;极性不在资源内,由「动作 × 格型」矩阵在结算期决定正向(奖励)或负向(惩罚)(地图战斗资源 首次定义;取代"安全格奖励"旧名) - 批尾: 同一批取号中最后消费的一个号——地图战斗资源 清图奖励身份 = install 批的批尾取号(地图战斗资源 F1 首次定义) + 格面资源(CellResource): 关联到格子上的资源对象——装板期摇定九型类型身份(attack/defense/heal/blast/weaken/pierce/magic/action/gp——2026-09-18 伤害道具批五→七、2026-09-20 格面资源八型批七→八、同日 GP+商店房批八→九 +gp),安全格与雷格一视同仁、同池同分布;极性不在资源内,由「动作 × 格型」矩阵在结算期决定正向(奇物)或负向(惩罚)(地图战斗资源 首次定义;取代"安全格奇物"旧名) + 批尾: 同一批取号中最后消费的一个号——地图战斗资源 清图奇物身份 = install 批的批尾取号(地图战斗资源 F1 首次定义) 死行: 被当前内容态判定为零消费的表行——加载不致命、不入参考池,复活走 GDD 修订连锁(地图战斗资源 F4 首次定义;历史首例 attack_up〔hero atk=0 时代〕已于 2026-09-11 随"基础攻击恒存在"用户裁决复活,当前内容态暂无在册死行) 预推进: 测试中为到达 scope=σ 而先行丢弃式消费 σ 个 scope 的构造——RngService 全新实例首个 open_stream 恒为 scope 0,derive_at 不推计数器(地图战斗资源 AC 前言首次定义) - 完美排雷(perfect_sweep): 板级零误标(flag_judged hit=false=0)∧ ≥1 标中 → 清图奖励当量 ×P_perfect(默认 ×2)——与踩雷正交(盲挖踩雷不破坏、标错才破坏)、全有或全无谓词无部分档、板级计数随 install 重置(战斗结算 Core Rule 13 首次定义) + 完美排雷(perfect_sweep): 板级零误标(flag_judged hit=false=0)∧ ≥1 标中 → 清图奇物当量 ×P_perfect(默认 ×2)——与踩雷正交(盲挖踩雷不破坏、标错才破坏)、全有或全无谓词无部分档、板级计数随 install 重置(战斗结算 Core Rule 13 首次定义) 当量: 统一价值单位,1 当量 = 1 点主角 HP 的期望净变化——四源收益单一线性换算的通货(战斗结算 F1 首次定义) 乘区: 伤害公式里相乘的修正段(本作两段:hero 减伤池 × 敌方削弱池——池内加算、clamp [−100,+100]pp、池间乘算、floor 取整)(战斗结算 F2 首次定义) 溢杀: 一刀超出目标剩余 HP 的部分——丢弃、不转移、无负 hp 中间态(战斗结算 F3 首次定义) 免伤轮: 主角该结算承伤为 0 的结算——percent 池地板(−100pp → 乘数 0)的自然结果;现行值链可达路径 = weaken 饱和(敌侧单结算零输出),defense_up 叠满 = 0.4×(−30×2 帽)不再单侧触地板(战斗结算 F2 首次定义;原"defense_up 顶点 −100% 恰在地板边界"例随减伤墙批退役——2026-09-14 增益状态 接口漂移批同步) 图标键(icon key): "哪个数据行配哪枚图标"的固定对照——数据表主键(effect_id/reward_id/cell_type/enemy_id)直接作图标键,一键一专属纹样、映射全局恒定禁运行时换图(art-bible §4.6 首次定义,2026-09-13 冻结) - 徽章(badge): 画在格子上的身份附属小图标(类型/奖励身份预读)——绘制优先级栈位在旗之下、变异纹理之上,不构成格内第二焦点(art-bible §4.6 首次定义;栈位声明源 = 极性批 git 提交 ddd2960) + 徽章(badge): 画在格子上的身份附属小图标(类型/奇物身份预读)——绘制优先级栈位在旗之下、变异纹理之上,不构成格内第二焦点(art-bible §4.6 首次定义;栈位声明源 = 极性批 git 提交 ddd2960) 极性(polarity): 同一类型兑付的正负方向——正 = 收益侧、负 = 代价侧,行为×格型→符号矩阵见极性提案 R2;视觉通道冻结 = 金族(有利)对红族(有害)+ 满框对缺框(art-bible §4.6 首次冻结视觉侧) 命令式回执驱动: 动作调用返回后组合根立刻重查一次只读面来刷新界面、不等通知信号——旗插拔/移动/AP·RAP 读数/状态/库存五类动作零事件外发或零推送,呈现层刷新由此承载(HUD框架 首次定义;ADR-0001 订阅纪律的配对形态) 程序化占位: 用代码按冻结色板与形状规则直接画出的临时图形——参数取自 art-bible §4.1/§3 参数域、icon 按 §4.6 键位映射表挂槽,终稿美术到位后原位替换、数据层零改动(HUD框架 首次定义;样张未定稿不阻塞呈现层开工的承载形态,占位同样受 §1.4 数字可读性第一验收项约束) 叠加层(overlay): 魔法道具 自持的板级派生信息集(显影/真视/预读三集)——只改"玩家能看见什么"不改棋盘事实,零回写 排雷玩法/地图战斗资源 状态、随图消亡(魔法道具 首次定义) 真视窄域护栏: 替代推理的道具效果(雷位真视)目标域 ≤3×3、全图级仅限恢复推理原料类(显影/预读)——信息层级护栏,防"扫雷退化为路径优化"(魔法道具 Core Rule 3 首次定义,schema 校验强制) - 渗透率: aux 道具期望件数占奖励池的份额——E[N_aux/板] = |U|×Σw_aux/W_total(魔法道具 F1 首次定义;供给面天然限流,P1 护栏的量化形态) + 渗透率: aux 道具期望件数占奇物池的份额——E[N_aux/板] = |U|×Σw_aux/W_total(魔法道具 F1 首次定义;供给面天然限流,P1 护栏的量化形态) 行动: 轮次内挖掘期的原子决策单位——同一事件的三个视角:玩家决策层叫行动、进 排雷玩法 的数据形态叫意图(单意图帧整批提交)、行动经济 计价类别叫动作(action_kind 统一价目);有价行动(挖/插旗;拔旗随插旗不可逆批 2026-09-19 退役)1 AP/次、受每轮 AP 预算约束(现行表值 8),移动/停手免费不计 AP(game-concept 术语层级 2026-09-14 收录) 封印: 插旗动作的玩家可见呈现名(2026-09-25 用户拍板)——玩家对未开格插旗,即对该格(巢穴)实施「封印」,旗 = 封印印记;机制键与规则(flag_place/flag_rules/标中旗三向效果)全不变,纯呈现层命名;封印特效(施印瞬间 + 印记常显形态)待表现批,现行程序化占位 = 封印黑「旗」字形(旗色史:旗朱 #C63D22 → 封印紫 #7C3AA8 2026-09-26 → **封印黑 #000000 2026-09-28 用户拍板**——紫与微光蓝族色相冲突退役;art-bible §3.2 封印条首次定义) 节点: 关卡节点地图上的一个格——关卡内移动的步进单位;层名定稿(2026-09-14 用户裁决:节点 胜 遭遇——成员中立 + 关卡节点地图 注册名/切片 node_* 接口零改动 + 遭遇既有语义 = 战斗不挪用);类型分类学与图形态已展开定稿(2026-09-17 关卡节点地图 v1.0:四类封闭枚举 {battle, reward, rest, boss} + 分支节点图〔连线只朝前进方向、唯一入口、Boss 恒唯一终点、无回头路〕;节点编号 = 关卡内唯一定位地址,数据键 node_depth 沿用;2026-09-20 GP+商店房批扩五类 +shop 商店房——每关恰 1、Boss 前一位必经位,兑付 = 商店覆盖层开闭,见商店房词条) 商店房: 关卡节点图第五类节点——每关恰 1、关底 Boss 前一位必经位(哈迪斯式"决战前最后一个补给点",必经位由冒烟断言承载、图合法性六检零新增);兑付 = 打开商店覆盖层,用金币(GP)购买三属性 flat 档商品(无刷新无三选一、全陈列),购买即时生效、离开后确认回选路,不携带战斗行(关卡节点地图 首次定义,2026-09-20 GP+商店房批) 金币(GP): 冒险内一次性的属性提升货币——战斗掉落(掷定 + 关级加值 + 战斗内缓冲,完成一次战斗后统一到账)与格面金币袋(低概率惊喜获取)进钱包、商店房消费、冒险结束清零;不入存档、不入冒险摘要;玩家侧显示名「金币」,与跨局持久的钥石记账完全分离、永不互兑(冒险结构 首次定义,2026-09-20 GP+商店房批) - 统一冒险加算区: 商店购买与关卡大奖励上限提升共用的同一本属性加账——三轴 {攻击, 生命上限, 护甲等级},入战参数 = 基础表值 + 加算区累加,经战斗开始入参的覆盖值通道生效;购血 = 上限与当前生命同步 +Δ(冒险结构 首次定义,2026-09-20 GP+商店房批) + 统一冒险加算区: 商店购买与关卡大奇物上限提升共用的同一本属性加账——三轴 {攻击, 生命上限, 护甲等级},入战参数 = 基础表值 + 加算区累加,经战斗开始入参的覆盖值通道生效;购血 = 上限与当前生命同步 +Δ(冒险结构 首次定义,2026-09-20 GP+商店房批) 遭遇: 一次完整战斗事件的同义词——战斗节点触发的那一场仗(既有用法:战斗结算"两场遭遇" / HUD框架"双敌种遭遇""Boss 遭遇变体");不作地图层名(2026-09-14 裁决) - 节点奖励: 奖励点节点给的奖励(关卡节点地图 域)——与安全格奖励(地图战斗资源,格内开出)区分;现行(2026-09-29 迭代 7 拍板②丙):奖励节点 = **三选一构筑点**——从可用道具池(aux 活行 ∩ 工坊解锁集)取一件入关卡域库存,选择前不给出口、池空直通合法空态;spec = design/gdd/ux/node-reward.md v1.0;旧「功能道具的正式渠道」拍板(2026-09-17 关卡节点地图 v1.0)已被现行口径取代;**形态沿革(2026-09-30 用户裁决甲)**:现行局内投放系切片期过渡形态,终局 = 魔法道具局外同调件(底稿 design/research/proposal-magic-item-attunement-2026-09-22.md 八拍板),本渠道随同调实施批退役改写——三个"reward"各归各位(2026-09-14 拆名注记) - HP 账本: 冒险域主角血量的唯一记录——冒险结构 持有,每战开始交出、战斗结束收回、恢复点与大奖励入账;关卡切换血条不清零(冒险结构 首次定义;跨战斗 HP 持久性归 关卡节点地图/冒险结构 已锁事实的 冒险结构 半边兑现) + 节点奇物: 奇物点节点给的奇物(关卡节点地图 域)——与安全格奇物(地图战斗资源,格内开出)区分;现行(2026-09-29 迭代 7 拍板②丙):奖励节点 = **三选一构筑点**——从可用道具池(aux 活行 ∩ 工坊解锁集)取一件入关卡域库存,选择前不给出口、池空直通合法空态;spec = design/gdd/ux/node-reward.md v1.0;旧「功能道具的正式渠道」拍板(2026-09-17 关卡节点地图 v1.0)已被现行口径取代;**形态沿革(2026-09-30 用户裁决甲)**:现行局内投放系切片期过渡形态,终局 = 魔法道具局外同调件(底稿 design/research/proposal-magic-item-attunement-2026-09-22.md 八拍板),本渠道随同调实施批退役改写——三个"reward"各归各位(2026-09-14 拆名注记) + HP 账本: 冒险域主角血量的唯一记录——冒险结构 持有,每战开始交出、战斗结束收回、恢复点与大奇物入账;关卡切换血条不清零(冒险结构 首次定义;跨战斗 HP 持久性归 关卡节点地图/冒险结构 已锁事实的 冒险结构 半边兑现) 关卡收束点: 一关就此定局的时点——Boss 节点战斗胜利(通关)或英雄死亡(失败);关卡节点地图 在收束点先调 战斗结算 关卡清库、再向 冒险结构 宣布关卡结束与结果(冒险结构 首次定义;切片 level_runner 先例转正;2026-09-17 关卡节点地图 v1.0 图版措辞——Boss 节点 = 图唯一终点) - 关卡大奖励: 清完一关、进入下一关前的一次性兑付——上限提升 + 血回满 + 钥石入账三件构成,不进背包不占库存域;末关通关不兑付(冒险结构 首次定义;2026-09-17 代币→钥石统一拍板——原「代币记账」即钥石,同一资源两渠道:关卡大奖励入账与 Boss 掉落;game-concept"冒险内大奖励"的落地形态) + 关卡大奇物: 清完一关、进入下一关前的一次性兑付——上限提升 + 血回满 + 钥石入账三件构成,不进背包不占库存域;末关通关不兑付(冒险结构 首次定义;2026-09-17 代币→钥石统一拍板——原「代币记账」即钥石,同一资源两渠道:关卡大奇物入账与 Boss 掉落;game-concept"冒险内大奇物"的落地形态) 永久强化: 跨局成长资源的本作落地名——伴随存档生命周期、可用钥石在营地柜台换取的成长条目集合(元进度定稿批 2026-09-18 用户拍板定名;「元进度 / Meta Progression」保留为系统族名,「营地」为存档内消费枢纽的界面壳非机制实体;「天赋树」同日退役——本作无树形结构,柜台条目为线性清单无分叉无前置;首次定义 元进度 v1.0) referenced_by: [排雷玩法, 敌人系统, 地图战斗资源, 战斗结算, HUD框架, 魔法道具, art-bible, game-concept, 关卡节点地图, 冒险结构, 关卡节点图生成] @@ -278,7 +278,7 @@ entities: hp: int [1,999](knob——难度修饰前基线;MVP 18 provisional 出处待查) atk: int [0,999](knob——attack 行为伤害基值;MVP 4 provisional 出处待查;0 合法不拒——2026-09-20 八型批去"纯伏击伤敌种"旧注) pool: Array of {skill_id, weight}(**2026-09-16 敌人技能池批——池模板**,定义层;weight ∈ (0,9999] knob、池内 skill_id 不重复;每池恰一行普通攻击 + 增益技 ≤1 + skill_id 悬空致命〔加载校验在 config_db.validate_skill_pool_links 跨表通道〕;实例池〔快照+冷却状态〕在 单位容器 spawn——三敌种建议池构成与权重不列于本 registry,读 data/tables/enemy.tres(provisional 归 难度曲线与Boss;EV 锚与含闸长期速率实测读数随验收批另测登记〔2026-09-18 指路化收口〕))。**历史(2026-09-16 退役)**:heavy_multiplier int [1,16](重击倍率归技能行 damage_mult)与 pattern StringList(行为环环数组)两字段随行为环整体退役——固定出招剧本废除 - rowset_rule: 每行集恰一敌种(行集内 enemy_id 唯一 = 表结构校验,违规加载期致命)——同层多遭遇已由节点编号消解(2026-09-17 关卡节点地图 v1.0:node_depth 语义 = 关卡内唯一节点编号,同层不同节点各查各行、键结构零改动);同场多敌种(同一编号行集多行)行集校验放开归 敌人表行集多行批(混编伏击上限取值口径随 2026-09-20 上限删除消解)(战斗侧,排技能池实施批落地后;06-待办清单 敌人系统节同名条目单点登记);精英/Boss 不设编码位——Boss = 最大编号节点(图唯一终点)、精英 P2 内容承载(强敌行集)。**精英怪设定登记(迭代 10 奖励重构批 P-D——实装随怪物批)**:与其他普通小怪同一立绘 + 附加特征标记 + 数值更强;视觉特征三件 = 名称前后缀(「精英·熊地精」式——沿用既有译名不换词根)+ 精英底座光环(程序化零立绘改动)+ 精英描边变色(色板合规与样张闸义务随实装批);掉落挂点 = 钥石 1 个(meta.tres boss_keystone 精英行随实装批落) + rowset_rule: 每行集恰一敌种(行集内 enemy_id 唯一 = 表结构校验,违规加载期致命)——同层多遭遇已由节点编号消解(2026-09-17 关卡节点地图 v1.0:node_depth 语义 = 关卡内唯一节点编号,同层不同节点各查各行、键结构零改动);同场多敌种(同一编号行集多行)行集校验放开归 敌人表行集多行批(混编伏击上限取值口径随 2026-09-20 上限删除消解)(战斗侧,排技能池实施批落地后;06-待办清单 敌人系统节同名条目单点登记);精英/Boss 不设编码位——Boss = 最大编号节点(图唯一终点)、精英 P2 内容承载(强敌行集)。**精英怪设定登记(迭代 10 奇物重构批 P-D——实装随怪物批)**:与其他普通小怪同一立绘 + 附加特征标记 + 数值更强;视觉特征三件 = 名称前后缀(「精英·熊地精」式——沿用既有译名不换词根)+ 精英底座光环(程序化零立绘改动)+ 精英描边变色(色板合规与样张闸义务随实装批);掉落挂点 = 钥石 1 个(meta.tres boss_keystone 精英行随实装批落) mvp_content: **八敌种(2026-09-14 难度曲线与Boss 修订批转正 goblin / bugbear / ogre_chief 三敌种〔DND 更名批用户指令:grub→goblin / ambusher→bugbear / boss_guardian→ogre_chief〕;2026-09-17 分支节点图批新增 giant_spider / drider,本条 2026-09-18 补收编;2026-09-20 第三关内容批新增 duergar / hook_horror / duergar_king,本条随批补收编;敌人系统 物种集断言随批更新为 {goblin, bugbear, ogre_chief, giant_spider, drider, duergar, hook_horror, duergar_king})**:goblin(地精,armor=light)/ bugbear(熊地精,armor=ward)/ ogre_chief(食人魔酋长,armor=heavy)/ giant_spider(巨蜘蛛)/ drider(蛛化卓尔精灵,Boss = 最大编号节点图唯一终点)/ duergar(灰矮人,单体重甲中坚——重甲首次登台,armor=heavy)/ hook_horror(钩爪恐魔,群行捕食者,armor=light)/ duergar_king(灰矮人石君王,L3 Boss,重甲收束「轻甲→魔法甲→重甲」教学梯度)。技能池构成与权重、armor_type 行映射**不列于本 registry**——〔**2026-09-28 M-3 迭代 5 T4 AC 投值批→2026-09-29 返工批 U2 裁 v1 重投**:初版 Boss-only(杂鱼全 0·Boss 8/9/12)被 U2 推翻——终版 **v1 硬梯度**=杂鱼按 T4 报告 §一 软梯度恢复(0~5 带内)+重击手 8/重装手 9(逐行手设值,非精英编码位——解读 A 追认)+Boss 台阶 8/10/12;v1 中间态未入 git,杂鱼行按报告表值代拟恢复(台账 247);演化链与三版读数见 git 提交 8ffc555,裁断全录 git 提交 f9c1a8a;冒烟带宽断言随新形态更新(杂鱼 0~5·重击手/重装手 8~9·Boss 8~12 台阶)〕读 data/tables/enemy.tres(L3 行值语义:duergar 关间台阶 ≈L2 单体 ×1.5 落 [1.3,1.6] 域、hook_horror 复用 bite 共享技能行、两敌种首遇位〔节点 0/1〕固定数量不加骰、Boss 血 75 = Σ普通战生命期望 91 × r_boss≈0.82 provisional 锚;行值全 provisional 归 难度曲线与Boss)。**2026-09-17 数值压缩批·文档同步——hp/atk 等数值列改指路存根**:L1/L2 节点编号行集(D0–D8)共 12 行的 hp · atk · atk_min · atk_max · unit_count · unit_count_max · advantage_per_round_cap · armor_class 等现行值**不列于本 registry**——读 `data/tables/enemy.tres`(数值压缩批注释登记:`L1 D0 24/7 → 8/2`、`L1 D1 13/5 → 4/2`、`L1 D2 40/9 → 13/3`、`L1 D3 18/6 → 6/2`、`L1 D4 150/9 → 50/3` Boss、`L2 D0 30/7 → 10/2`、`L2 D1 15/5 → 5/2`、`L2 D4 14/5 → 5/2`、`L2 D5 38/8 → 13/3`、`L2 D6 12/4 → 4/1`、`L2 D7 13/5 → 4/2`、`L2 D8 175/8 → 58/3` drider);armor_type / armor_class / unit_count 区间 / 技能池权重 / advantage_per_round_cap 不压缩(相对轴与概率轴)。**2026-09-16 敌人技能池批**:行为环拍序列([attack] 单拍环 / [attack,charge,heavy] 三拍环 / [attack,attack,charge,heavy] 四拍环)与 heavy_multiplier=2 退役,改池模板 + 技能表共享技能行(重击倍率 2 = 技能行 damage_mult);出处 = 切片 enemy.tres(技能池批改型),曲线数值与池权重归 难度曲线与Boss load_bearing_rules: 多敌模型(1–3 同敌种单位,增益状态 单敌假设回验不成立——见 status_effect.single_enemy_assumption)· 行为环确定性轮转(零随机;先作用后推进;死亡即不动手——轮到前被杀本拍不打指针冻结;同步轮转定理)· 效果 side-wide(原伏击池 = side 共享、增益状态 零接口变更——伏击池随 2026-09-20 八型批退役,side-wide 承载改由增益状态 alert 行承接)· 行值快照抗热重载(增益状态 EC9 同款——池模板同在快照范围,实例池冷却全零起步)· **技能池摇号出招(2026-09-16 敌人技能池批改写——原"行为环确定性轮转/同步轮转定理"退役)**:每拍做什么 = 实例池权重摇号〔开轮时点,随机消费在 战斗结算 换算层 behavior_roll 封闭流;本系统语义零随机不变、单位容器收确定值〕;两道闸 = 全技能各自冷却 + 保底 M;死亡即不动手(摇定后兑现前死亡 → 本拍作废不进账);拍结构保留(每结算每存活敌恰行动一次/行序/先作用后推进)· 零随机零 UI 零事件订阅(排雷玩法 事件面不含 敌人系统——事实经 战斗结算 转化) settlement_obligations: 六项(敌人系统 GDD 门禁评审缺项即 blocking)——① 行动每结算恰一次(敌单位专属——主角无环)+ 结算内调用序成文 按摇定技能行兑现→apply_damage→commit_action〔2026-09-16 技能池批改型——原 query_attack→apply_damage→advance 随行为环退役〕 ② 雷→伏击恰一次转化 ③ clamp/负值/溢杀与死亡判定时机成文 ④ F1 条款 3 闭合对账(cap 表值 + 量纲 + 棋盘生成 actuals p10 非 target 参数)⑤ 默认目标消费与单体/AOE 分流 ⑥ 伏击 cap 溢出"溢出未生效"明细行协议。**履行回执(2026-09-10)**:六项已全数落位 战斗结算 GDD(Core Rules 5/6/9/10/12 + Formulas F3/F4——落位映射 = 战斗结算 AC 覆盖矩阵)。**2026-09-20 修订**:④⑥ 随伏击单轮上限删除(用户拍板)退役——对账面去 cap 表值、溢出行协议作废;八型批再修订(2026-09-20 格面资源八型批):② 雷→伏击恰一次转化改 雷→警觉恰一次转化 @@ -297,7 +297,7 @@ entities: armor_class: int [0,999](**2026-09-15 护甲等级批新增,2026-09-16 掷点批定稿落地**——主角作为防守方的护甲等级,敌方攻击拍 / 重击拍基线的掷点折扣判定读数;掷点结算归 settlement_table.ac_roll〔战斗结算〕,与 armor_type〔克制属性轴〕两概念不得混用;现行值读 data/tables/hero.tres〔暂定,调参归 难度曲线与Boss〕) armor_type: enum {light, ward, heavy}(**2026-09-18 营地扩展前置批新增**——主角护甲类型轴可配置可修改,缺省 light 向后兼容;消费面 = 战斗结算甲效矩阵〔敌方攻击现行不查矩阵——轴休眠是结构性的非数值性的〔2026-09-18 甲效矩阵调参批归因改述,原「恒 normal 档故中性」依赖普通行恒 100 已退役〕,轴生效待敌方技能攻击类型批〕;现行值读 data/tables/hero.tres) attack_type: enum {normal, pierce, magic}(**2026-09-18 营地扩展前置批新增**——主角基础攻击量〔atk 量轴〕与攻击类型抽象分离的承载字段:营地永久强化"换成魔法/穿刺攻击" = 改此字段,量轴零改动;消费面 = 战斗结算·战斗段基础分量查甲效矩阵〔原硬编码 normal 退役〕;现行值读 data/tables/hero.tres) - rule4_exemption: 单行全局定义表(主角不随关卡自动成长——成长=天赋 元进度/奖励侧;ActionEconomyTable 先例) + rule4_exemption: 单行全局定义表(主角不随关卡自动成长——成长=天赋 元进度/奇物侧;ActionEconomyTable 先例) hp_persistence: 跨战斗 HP 持久性归 关卡节点地图/冒险结构(provisional)——敌人系统 单位接口以初始 hp 入参,不定义冒险内持久性 referenced_by: [战斗结算, 地图战斗资源, 难度曲线与Boss] @@ -336,21 +336,21 @@ entities: weight: int [0, 999](knob)——正向行 = 类型频次;0 = 该型不出(合法极端,取号前剔除);负向行不消费 pool_tag: enum {cell, clear_default}(cell = 格面资源单一池——安全格与雷格一视同仁同池同分布;clear_ 命名空间预留、校验拒绝——棋盘生成 elite_ 同款) # 2026-09-15 safe_cell→cell 更名 + active_inject 删除 tier: int [1, 8](knob)——强度档位序数(与当量零耦合) - cross_field_validation: 加载期致命族——池空(cell 池 ≥1 正向行 weight>0)· 九型正向行齐备 · 九型负向行齐备(字典完整性——缺任一极性行致命——2026-09-20 八型批、同日 GP+商店房批随九型同步)· clear_default 恒正当量(≥1 活行 ∧ power≥1 ∨ effect_id 非空——行动经济 条款④"清图奖励>0"的行级兑现口径)· percent 行 effect_id 必填/flat 行恒空 · flat 行 power≥1 # 2026-09-15 重写——旧 floor_supply_missing / no_damage_row 随可选类删除失义退役 - mechanics: 格面资源身份 install 期预分配(roll_board 恰一次、行主序、消费 reward_roll 封闭流恰一 scope 批〔格批 + 清图批尾一号〕;全部非封锁格逐一摇定类型——安全格与雷格同池同分布、封锁格不入摇号清单;Ready 后只读、无重掷 API)· **极性不在资源内**——「动作 × 格型」矩阵(开安全格/标中雷 = 正向、开雷格/标错安全格 = 负向、插旗安全格直挖 = 零兑付〔四情况④〕;撤旗动作随插旗不可逆批 2026-09-19 退役)字典定义归 地图战斗资源、路由执行归 战斗结算 授予段(结算队列 + 轮末在场旗判定基线——被挖开的旗不入基线)· 授予期零随机(身份恒定跨轮;换图映射消亡)· 负向恒即时(不入库、无库存语义——库存已随可选类删除下线)· 满层零兑付 = 合法例外 + "奖励未生效"行 · 重复受理幂等(同格重复 grant / 同批次重复 grant_clear → 同一快照/身份 + 诊断;受理/兑付恰一次归 战斗结算×②③) + cross_field_validation: 加载期致命族——池空(cell 池 ≥1 正向行 weight>0)· 九型正向行齐备 · 九型负向行齐备(字典完整性——缺任一极性行致命——2026-09-20 八型批、同日 GP+商店房批随九型同步)· clear_default 恒正当量(≥1 活行 ∧ power≥1 ∨ effect_id 非空——行动经济 条款④"清图奇物>0"的行级兑现口径)· percent 行 effect_id 必填/flat 行恒空 · flat 行 power≥1 # 2026-09-15 重写——旧 floor_supply_missing / no_damage_row 随可选类删除失义退役 + mechanics: 格面资源身份 install 期预分配(roll_board 恰一次、行主序、消费 reward_roll 封闭流恰一 scope 批〔格批 + 清图批尾一号〕;全部非封锁格逐一摇定类型——安全格与雷格同池同分布、封锁格不入摇号清单;Ready 后只读、无重掷 API)· **极性不在资源内**——「动作 × 格型」矩阵(开安全格/标中雷 = 正向、开雷格/标错安全格 = 负向、插旗安全格直挖 = 零兑付〔四情况④〕;撤旗动作随插旗不可逆批 2026-09-19 退役)字典定义归 地图战斗资源、路由执行归 战斗结算 授予段(结算队列 + 轮末在场旗判定基线——被挖开的旗不入基线)· 授予期零随机(身份恒定跨轮;换图映射消亡)· 负向恒即时(不入库、无库存语义——库存已随可选类删除下线)· 满层零兑付 = 合法例外 + "奇物未生效"行 · 重复受理幂等(同格重复 grant / 同批次重复 grant_clear → 同一快照/身份 + 诊断;受理/兑付恰一次归 战斗结算×②③) api: 封闭枚举入口(provisional,实现期 ADR 定名)——roll_board / query_identity(返回 {reward_id, cell_type, tier} 引用级投影;未开格恒可查——魔法道具 桥接结构前提;清单外坐标 → null + 诊断)/ grant(同格重复受理幂等 + 诊断)/ grant_clear(同批次重调幂等 + 诊断)/ retire_mapping / equivalence_supply(全活行投影 + tier_min_buff)+ weighted_pick 纯函数面;新增入口 = 接口漂移,新增入口须随附全输入域语义表 # 2026-09-15 删 stock/use/query_inventory/clear_inventory(库存轴下线) mvp_content: 十八行(2026-09-15 格面资源批十行;2026-09-18 伤害道具批增补四行;2026-09-20 格面资源八型批 ambush_double→enemy_alert 换装 + ap_up/ap_drain 两行新增;同日 GP+商店房批 +gp_gain/gp_loss 两行)——格面池正向九行(attack_up / ac_up〔2026-09-16 护甲等级掷点批换装,原 defense_up 减伤 −30% 退役;cell_type defense/权重/档位零改动〕/ spark_aoe / heal_minor / weaken / pierce_strike / magic_bolt〔attack_type 字段载攻击类型轴,查战斗结算克制矩阵、单目标必中全额〕/ ap_up action〔下轮行动点 +1——2026-09-20 八型批新增〕/ gp_gain gp 金币袋〔战斗内 GP 缓冲 +power,兑付编排归 战斗结算、钱包账本归 冒险结构——GP+商店房批新增〕)+ 负向九行纯字典(enrage / off_guard / heal_backlash 直伤〔不经增益状态〕/ enemy_alert blast〔effect_id=alert,敌方护甲等级 +1——2026-09-20 八型批 ambush_double 退役换装〕/ ap_drain action〔下轮行动点 −1〕/ sapped / pierce_snare / magic_recoil〔均主角直伤,不经增益状态〕/ gp_loss gp 破财〔战斗内 GP 缓冲 −power——GP+商店房批新增〕)+ clear_blast(clear_default);类型频次 = 正向行权重合计;tier_min_buff = 2。**2026-09-17 数值压缩批·文档同步——具体数值列(power/weight/power_min/power_max)改指路存根**:现行行值读 `data/tables/reward.tres`(压缩后锚行:spark_aoe power=1 / heal_minor power=[1,1] 定值(原 [2,6] 区间压缩)/ heal_backlash power=1 / clear_blast power_min=8 power_max=18 power=13 中点 / ambush_double stacks=2;类型频次合计 79→67〔heal 权重 15→3〕;2026-09-20 八型批后 67→74——attack 14 / defense 11 / blast 16 / heal 2 / weaken 8 / pierce 8 / magic 8 / 清障炸药 1 / action 6;同日 GP+商店房批九型后 74→76——+gp_gain weight 2) direction_precheck: **刀供给方向预检随可选类删除失义退役(2026-09-15)**——历史读数见底部修订记录;新对账锚 = 行动经济 条款②③ 左臂(正向格面资源当量供给)随格面资源批重推,义务归 难度曲线与Boss 调参批 - settlement_obligations: 四项(战斗结算 GDD 门禁评审缺项即 blocking,清单全文见 地图战斗资源 GDD Dependencies)——① 结算段序骨架(授予→增益/减益→战斗→衰减→判定)② 极性路由受理 + 每格恰一次 + 满层零兑付"奖励未生效"行(含聚合计数字段)③ clear_reward 授予路径(增益状态 OQ4 关闭条件)④ 生命周期编排(battle_over retire 映射消亡)+ roll_board 恰一次 # 2026-09-15 由六项收拢(窗口/道具段与库存编排随可选类删除失义) - hud_obligations: 三项(缺项即 blocking)——① 已开格资源身份恒定可读(挖掘期规划面)+ 未开格类型可查面的呈现深度(预读边界待办)② 结算明细行(效果行/"奖励未生效"〔聚合计数〕/标旗未中行/直伤行)③ H2 清图奖励行强调呈现 # 2026-09-15 由五项收拢(库存常读条/道具窗口随可选类删除失义) - high_glow_nodes: H1 开格拾取瞬间 / H2 清图奖励兑付(奖励侧常规节拍登记;**风险 #2 排雷侧"完美排雷爆发结算"机制本体归 战斗结算 强制检查点、#3 标中旗节拍补偿归 战斗结算——地图战斗资源 只交付插槽与明细行数据面**;呈现义务 HUD框架×③) # 2026-09-15 H3 道具抢杀窗口随可选类删除失义 + settlement_obligations: 四项(战斗结算 GDD 门禁评审缺项即 blocking,清单全文见 地图战斗资源 GDD Dependencies)——① 结算段序骨架(授予→增益/减益→战斗→衰减→判定)② 极性路由受理 + 每格恰一次 + 满层零兑付"奇物未生效"行(含聚合计数字段)③ clear_reward 授予路径(增益状态 OQ4 关闭条件)④ 生命周期编排(battle_over retire 映射消亡)+ roll_board 恰一次 # 2026-09-15 由六项收拢(窗口/道具段与库存编排随可选类删除失义) + hud_obligations: 三项(缺项即 blocking)——① 已开格资源身份恒定可读(挖掘期规划面)+ 未开格类型可查面的呈现深度(预读边界待办)② 结算明细行(效果行/"奇物未生效"〔聚合计数〕/标旗未中行/直伤行)③ H2 清图奇物行强调呈现 # 2026-09-15 由五项收拢(库存常读条/道具窗口随可选类删除失义) + high_glow_nodes: H1 开格拾取瞬间 / H2 清图奇物兑付(奇物侧常规节拍登记;**风险 #2 排雷侧"完美排雷爆发结算"机制本体归 战斗结算 强制检查点、#3 标中旗节拍补偿归 战斗结算——地图战斗资源 只交付插槽与明细行数据面**;呈现义务 HUD框架×③) # 2026-09-15 H3 道具抢杀窗口随可选类删除失义 referenced_by: [战斗结算, HUD框架, 难度曲线与Boss, 魔法道具, 战斗表现, 教学引导] - name: reward_config type: schema_data owner: design/gdd/systems/战斗循环/地图战斗资源.md attributes: - table: "**已删除(2026-09-15 格面资源批)**——RewardConfigTable 随可选类道具整体删除下线:k_dmg / active_p0 / active_decay / n_draft / p_min 全部供给控制器与按板保底参数失义;清图奖励配置并入 RewardTable clear_default 槽;切片 reward_config.tres 随代码修改批删除(历史字段定义见底部修订记录)" + table: "**已删除(2026-09-15 格面资源批)**——RewardConfigTable 随可选类道具整体删除下线:k_dmg / active_p0 / active_decay / n_draft / p_min 全部供给控制器与按板保底参数失义;清图奇物配置并入 RewardTable clear_default 槽;切片 reward_config.tres 随代码修改批删除(历史字段定义见底部修订记录)" referenced_by: [地图战斗资源, 难度曲线与Boss, 战斗结算] - name: settlement_table @@ -360,7 +360,7 @@ entities: table: SettlementTable(数据配置 承载,单行全局;战斗结算 回填 owner,2026-09-10 定稿回填;Rule 4 豁免——单行全局常量/结构表,HeroTable/ActionEconomyTable 先例) fields: equivalence_ref_damage: int [1,999](knob,现行值读 data/tables/settlement.tres——当量参考敞口 D_ref,F1 通货;变更触发全对照表 + 条款③⑤对账重跑,禁独立调参) - p_perfect: int {100,200} percent(knob,默认 200 provisional——完美排雷清图奖励**第二份兑付触发**;2026-09-10 战斗结算 评审批修订:真实双份交付载体〔Core Rule 13#2〕——100 = 仅高光、200 = 双份交付,非整数倍数乘数无运行时载体、域外加载致命;上界受护栏 B 约束〔双读数:D_ref 口径 24 / DPS 严格读数 ≈8,裁决归 难度曲线与Boss〕) + p_perfect: int {100,200} percent(knob,默认 200 provisional——完美排雷清图奇物**第二份兑付触发**;2026-09-10 战斗结算 评审批修订:真实双份交付载体〔Core Rule 13#2〕——100 = 仅高光、200 = 双份交付,非整数倍数乘数无运行时载体、域外加载致命;上界受护栏 B 约束〔双读数:D_ref 口径 24 / DPS 严格读数 ≈8,裁决归 难度曲线与Boss〕) segment_order: StringList(结构冻结——段序骨架 [grant, buff_debuff, combat, decay, verdict];加载期恒等拍板序校验违例致命,防实现乱序静默漂移;2026-09-15 格面资源批五段——item_window/item 两段随可选类删除下线,旧七段序见底部修订记录) source_label_map: Dictionary source_class→文案键(结构冻结——P2 归因呈现映射;键集 = 增益状态 source_class ∪ {判定扩展, enemy_action, flag_miss}——2026-09-10 战斗结算 评审批修订;2026-09-15 格面资源批删"道具"扩展键;新增键 = 接口漂移) effect_pool_map: Dictionary effect_id→pool {hero_offense|hero_defense|enemy_output|enemy_defense|flat_attach}(结构冻结——F2 效果语义映射,增益状态 Rule 7 载体;键 ⊆ StatusEffectTable 活行集、悬空加载期致命;新 effect_id 上线须随批登记——2026-09-15 格面资源批随 sapped 行收编登记:sapped → hero_offense;**2026-09-16 护甲等级掷点批:删 defense_up → hero_defense 键**〔减伤百分比行退役,hero_defense 池现仅 off_guard 正向行〕;ac_up 为 AC 阈值轴效果、不入任何池;**2026-09-16 敌人技能池批:增 empower → enemy_output · fortify → enemy_defense**〔敌方防御池新词汇——硬化载体,消费面 = 主角攻击合计后 ×(100+clamp(enemy_defense))/100,四池对称:敌打主角 = hero_defense × enemy_output、主角打敌 = hero_offense × enemy_defense;切片现状注记:hero_offense 现行走普通分量 attack_up 直乘、未并入合计乘区,正式化归 ADR 批〕;**2026-09-18 结构修复批:删 off_guard → hero_defense 键**〔off_guard 换装 AC 轴不入池——hero_defense 池清空、池结构保留;hero_offense 乘区接线同步落地:主角攻击合计后 ×(100+clamp(hero_offense))/100 ×(100+clamp(enemy_defense))/100 两池串乘,attack_up 普通分量直乘旁路退役——上方"切片现状注记"销项〕) @@ -368,10 +368,10 @@ entities: pool_clamp_hi: int pp(结构冻结 +100——percent 池地板域上界;原"七字段 pool_clamp_lo_hi"措辞作废,数据配置 GDD 行按收编先例以本条为准) round_direction: enum {floor}(结构冻结——单一取整规则) armor_effectiveness: Dictionary 攻击类型×护甲→克制修正点数(加法 delta,域 [−3,+3],缺项回退 0 中性;键集结构冻结 {normal, pierce, magic} × {light, ward, heavy};现行九格读数不列于本 registry——读 data/tables/settlement.tres(**2026-09-18 加法核换装批:量纲由百分比改整数点数,三档 克制 +1/中性 0/被克 −1,五档百分比读数随批退役**);**2026-09-15 命名统一批:改为语义键,原 {base, dmg_a, dmg_b} × {none, a, b} 位置键作废**;数值 provisional 归 难度曲线与Boss) - ac_roll: 护甲等级掷点(**2026-09-16 护甲等级掷点批定稿,数字即规范**——骰面 roll_faces=20、nat 最大面 crit_roll=20、暴击倍率 crit_multiplier=200、攻击加成 attack_bonus=0〔结构位,元进度/武器附魔未来投值〕、伤害下限 damage_floor=1、流名 armor_roll_stream="armor_roll";判定式:掷 1d20,掷点 ≥ 防守方护甲等级 + 攻击加成 → 全额、低掷按缺口查档〔见 ac_discount_tiers〕,nat20 暴击该基础攻击分量 ×2 且恒全额〔双方同规〕;任何攻击落地伤害 ≥ damage_floor〔**2026-09-20 伤害下限全来源批(用户拍板)**:语义扩为任何来源的伤害落地——攻击双方/棋盘克制直伤/爆裂/地形变异/负向反噬全部收进闸内,伤害取值域 [1, +∞) 不设上限;全局 max(1,·)——零值伤害行语义退役,重档折扣行文本记"被压制"〕;吃掷点分量 = 主角先手攻击普通分量 / 敌方技能基础伤害分量〔= 攻击基线 × 技能伤害倍率——2026-09-16 敌人技能池批改述,原"敌方攻击拍与重击拍基线伤害"退役;无伤害分量的增益技不掷不折〕,棋盘来源伤害〔爆裂 / 清障炸药 / 奖励即时——2026-09-19 充能退役后无充能分量;伏击附加项随 2026-09-20 八型批伏击退役移除〕必中全额不掷;回合内随机、消费 armor_roll 封闭流逐次掷逐次取号,可逐位回放) + ac_roll: 护甲等级掷点(**2026-09-16 护甲等级掷点批定稿,数字即规范**——骰面 roll_faces=20、nat 最大面 crit_roll=20、暴击倍率 crit_multiplier=200、攻击加成 attack_bonus=0〔结构位,元进度/武器附魔未来投值〕、伤害下限 damage_floor=1、流名 armor_roll_stream="armor_roll";判定式:掷 1d20,掷点 ≥ 防守方护甲等级 + 攻击加成 → 全额、低掷按缺口查档〔见 ac_discount_tiers〕,nat20 暴击该基础攻击分量 ×2 且恒全额〔双方同规〕;任何攻击落地伤害 ≥ damage_floor〔**2026-09-20 伤害下限全来源批(用户拍板)**:语义扩为任何来源的伤害落地——攻击双方/棋盘克制直伤/爆裂/地形变异/负向反噬全部收进闸内,伤害取值域 [1, +∞) 不设上限;全局 max(1,·)——零值伤害行语义退役,重档折扣行文本记"被压制"〕;吃掷点分量 = 主角先手攻击普通分量 / 敌方技能基础伤害分量〔= 攻击基线 × 技能伤害倍率——2026-09-16 敌人技能池批改述,原"敌方攻击拍与重击拍基线伤害"退役;无伤害分量的增益技不掷不折〕,棋盘来源伤害〔爆裂 / 清障炸药 / 奇物即时——2026-09-19 充能退役后无充能分量;伏击附加项随 2026-09-20 八型批伏击退役移除〕必中全额不掷;回合内随机、消费 armor_roll 封闭流逐次掷逐次取号,可逐位回放) ac_discount_tiers: Dictionary 缺口档边界→档位值 percent(**2026-09-16 定稿**——roll_tier_bounds=[3,7] · roll_tier_discounts=[75,50,25],档数 = 边界数 + 1;缺口 1-3 → ×0.75 · 4-7 → ×0.5 · 8+ → ×0.25,档位不设零档〔非归零〕,取整沿全局 floor;EV 参考数〔按判定式复算〕= AC10 期望减免 21.25% / AC11 25% / AC12 28.75%;微调旋钮 = 边界与档位值,不动 AC 值;难度曲线与Boss 生存链区间带宽补扫含暴击档与折扣档、"零红档"验收保留) validation: segment_order 违例致命 · effect_pool_map 悬空致命 · p_perfect 域 {100,200}(2026-09-10 载体域——100 = "完美必须 ≥ 不加倍"机制语义下界,200 = 双份交付)——战斗结算 冒烟三行致命 manifest(segorder_violation / poolmap_dangling / pperfect_oob) - mechanics: 结算段序骨架唯一权威载体(授予→增益/减益→战斗→衰减→判定——2026-09-15 格面资源批五段,item_window/item 两段随可选类删除下线)· **随机口径(2026-09-15 护甲等级批修订)**:结算换算层引入回合内随机(ac_roll 护甲等级掷点——必中非归零、低掷按 ac_discount_tiers 档位折扣),掷点流归属未定〔rng_service 流封闭清单 board_gen/reward_roll/encounter 不含结算内消费——新增流须改代码+P1 支柱评审、复用 encounter 则改"实例化期恰一 scope"绑定,登记 战斗结算「待办」,rng_service 条目随定稿批修订〕· 可回放契约 = **封闭随机流可回放**(同 master_seed 同意图序列 ⇒ 步骤流逐位复现——数据配置 AC-15 落点,原"结算路径零随机 / 步骤流逐行相同"口径随批作废;开战掷区间 / 装板摇号属初始化随机维持不变)· 调用序钉死 按摇定技能行兑现→apply_damage→commit_action(2026-09-16 技能池批改型——原 query_attack→apply_damage→advance 随行为环退役;行型 10 类同批改型:蓄力行 charge → 施放行 cast〔增益技 0 伤害施放、具名技能、不掷不折——原"不兑伏击"语义随 2026-09-20 八型批伏击退役改述〕)· 衰减恒执行含末轮 · 高光双落载体(perfect_sweep P_perfect——2026-09-10 修订为真实双份兑付载体 / 标中旗 highlight 标记)· 流水行协议字段分层(公共 7 字段 + 行类型特有 target/effect_id/pool_value/聚合计数——2026-09-10 评审批修订;行类型封闭枚举 9 类(2026-09-20 伏击上限删除批下线溢出未生效行 overflow)——2026-09-15 格面资源批由 15 类收拢:删道具行 / 已消耗未生效行 / 使用被拒行 / 窗口打开锚行 window_open / 窗口跳过锚行 window_skip 五类随可选类删除下线〔2026-09-15 窗口锚行批曾由 13 扩为 15,同日回撤〕;行来源断言两层豁免集合同批修订 = 行型豁免 {decay, verdict} × 来源类别豁免 {hero_attack, enemy_action, clear_reward},豁免不等于免检——豁免行仍受公共字段与各自语义约束,清单改动须同步 战斗结算 明细流水一节与 battle_log_view 格式化)· **类型化克制结算规格 = 战斗结算 GDD F6(W3 补全,2026-09-14 重算批;2026-09-15 命名统一批;2026-09-19 充能退役批——挖掘期充能/战斗段消费半边废止,加法核点数修正)**——逐分量 armor_effectiveness 查表(奖励直伤道具消费方保留) + mechanics: 结算段序骨架唯一权威载体(授予→增益/减益→战斗→衰减→判定——2026-09-15 格面资源批五段,item_window/item 两段随可选类删除下线)· **随机口径(2026-09-15 护甲等级批修订)**:结算换算层引入回合内随机(ac_roll 护甲等级掷点——必中非归零、低掷按 ac_discount_tiers 档位折扣),掷点流归属未定〔rng_service 流封闭清单 board_gen/reward_roll/encounter 不含结算内消费——新增流须改代码+P1 支柱评审、复用 encounter 则改"实例化期恰一 scope"绑定,登记 战斗结算「待办」,rng_service 条目随定稿批修订〕· 可回放契约 = **封闭随机流可回放**(同 master_seed 同意图序列 ⇒ 步骤流逐位复现——数据配置 AC-15 落点,原"结算路径零随机 / 步骤流逐行相同"口径随批作废;开战掷区间 / 装板摇号属初始化随机维持不变)· 调用序钉死 按摇定技能行兑现→apply_damage→commit_action(2026-09-16 技能池批改型——原 query_attack→apply_damage→advance 随行为环退役;行型 10 类同批改型:蓄力行 charge → 施放行 cast〔增益技 0 伤害施放、具名技能、不掷不折——原"不兑伏击"语义随 2026-09-20 八型批伏击退役改述〕)· 衰减恒执行含末轮 · 高光双落载体(perfect_sweep P_perfect——2026-09-10 修订为真实双份兑付载体 / 标中旗 highlight 标记)· 流水行协议字段分层(公共 7 字段 + 行类型特有 target/effect_id/pool_value/聚合计数——2026-09-10 评审批修订;行类型封闭枚举 9 类(2026-09-20 伏击上限删除批下线溢出未生效行 overflow)——2026-09-15 格面资源批由 15 类收拢:删道具行 / 已消耗未生效行 / 使用被拒行 / 窗口打开锚行 window_open / 窗口跳过锚行 window_skip 五类随可选类删除下线〔2026-09-15 窗口锚行批曾由 13 扩为 15,同日回撤〕;行来源断言两层豁免集合同批修订 = 行型豁免 {decay, verdict} × 来源类别豁免 {hero_attack, enemy_action, clear_reward},豁免不等于免检——豁免行仍受公共字段与各自语义约束,清单改动须同步 战斗结算 明细流水一节与 battle_log_view 格式化)· **类型化克制结算规格 = 战斗结算 GDD F6(W3 补全,2026-09-14 重算批;2026-09-15 命名统一批;2026-09-19 充能退役批——挖掘期充能/战斗段消费半边废止,加法核点数修正)**——逐分量 armor_effectiveness 查表(奇物直伤道具消费方保留) closure_receipt: 行动经济 F1 条款①②③⑤闭合 owner = 战斗结算(2026-09-10 F0–F5 首版验算完成——F0 瞬时当量口径 + m_w 值域裁决见 status_effect.anchor_warning;条款③ clause3_supply 闭合回执;条款⑤ clause5_dominance 条目;actuals p10 交付后强制重跑) referenced_by: [HUD框架, 战斗表现, 音频, 教学引导, 难度曲线与Boss] @@ -400,7 +400,7 @@ entities: referenced_by: [难度曲线与Boss, 地图战斗资源, 棋盘生成] # 占位表中的原型参考值(伏击 +3、清图 +10、敌 18HP/4ATK 等)为 provisional, -# 不登记为事实——待各 owner GDD(地形变异/增益状态/奖励道具经济/战斗结算/难度曲线与Boss)定稿后由其登记。 +# 不登记为事实——待各 owner GDD(地形变异/增益状态/奇物道具经济/战斗结算/难度曲线与Boss)定稿后由其登记。 # (AP 等七字段已于 2026-09-07 由 行动经济 三次回填登记为 action_economy 条目;旗上限与折算乘数同日作废删除。) # 修订记录:2026-09-07 full 评审(design-review)——删除 combat_var 流、去重键改四元组、 # 快照契约补计数器、R2 增实现级规约与 reward_roll 向量(owner=数据配置 代用户修订); @@ -419,15 +419,15 @@ entities: # 条款 5"消解"→三腿入账两态验算)· variant_pool_gate 增 board_biome 域校验归属与 15 项验收门禁登记—— # 详见 design/archive/gdd-2026-09-14/reviews/a4-terrain-variation-review-log.md 阻塞→修复对照表。 # 2026-09-08 地形变异 re-review 修订(owner=地形变异,NEEDS REVISION #2 6 阻塞同日核销): -# variation_table 增 cross_field_validation(hide_numbers⇒safe_nonzero 致命)与 pricing_constraints(奖励道具经济 三 -# 硬约束)· counter_item_ids 修正为非 knob · mvp_content 的 knob 活值标注 · referenced_by 补 战斗结算/奖励道具经济 · +# variation_table 增 cross_field_validation(hide_numbers⇒safe_nonzero 致命)与 pricing_constraints(奇物道具经济 三 +# 硬约束)· counter_item_ids 修正为非 knob · mvp_content 的 knob 活值标注 · referenced_by 补 战斗结算/奇物道具经济 · # fog_ap_note 预算不等式改增量构成("轮数上限"作废)· 厚度≤2 钉死窗口谓词度量。 # 2026-09-09 增益状态 full 评审修订(owner=增益状态,NEEDS REVISION 7 blocking 同日核销): # status_effect 条目 fields/mvp_content 改逐字段 YAML 键(AC-18 机器对账前提,action_economy 同构)· # settlement_obligations 5→8(⑥ decay 恰一次 ⑦ per-grant 来源标注 ⑧ 溢出行)· 增 single_enemy_assumption 与 -# presentation_obligations(HUD框架×4/战斗表现×2/教学引导/奖励道具经济)· anchor_warning 增修复空间不对称(总暴露读法被 schema 域禁止)。 +# presentation_obligations(HUD框架×4/战斗表现×2/教学引导/奇物道具经济)· anchor_warning 增修复空间不对称(总暴露读法被 schema 域禁止)。 # 2026-09-09 棋盘生成 full 评审修订(owner=棋盘生成,MAJOR REVISION NEEDED 8 blocking 同日修订): -# board_gen_table 条目同步 战斗结算/增益状态/奖励道具经济/B6/B7/B8/R2/R3/R4/R9——inferability_target 域 [0.85,1](P1 绝对锚)· +# board_gen_table 条目同步 战斗结算/增益状态/奇物道具经济/B6/B7/B8/R2/R3/R4/R9——inferability_target 域 [0.85,1](P1 绝对锚)· # fog_target_ratio ≤ min(8d,0.25) 绝对上限 · 布雷数下限 round(d×(W×H−9))≥1 · F2c 成本谓词(att×W×H≤16384 # provisional,禁墙钟逃生)· 达标两项判据(inferability_core = 剔除雾格后的可推理率)· 布雷钉死(先定数后落位/先布后删)· # 断言 B 收紧达成区占比(地形变异⑭ 两件套)· σ 打包 2^20·L+2^12·D 防碰撞 · 指标集六→八项 · 第三轴登记约定 @@ -447,23 +447,23 @@ entities: # 概念原型"每次结算的基础伤害")——"机制开关 MVP=0"与"当前内容态无胜利路径"声明作废;attack_up 复活(消费面 = # 主角战斗段先手攻击,战斗结算 GDD 同批增补 + source_label_map 增 hero_attack 键);锚参照回迁 attack_up 当量(status_effect. # anchor_warning / clause3_supply.direction_precheck 两处迁移注记退役为历史);settlement_obligations 履行回执 2026-09-10 不变; -# 变更 owner = 敌人系统/奖励道具经济/战斗结算 GDD 2026-09-11 同批修订。 +# 变更 owner = 敌人系统/奇物道具经济/战斗结算 GDD 2026-09-11 同批修订。 # -# 2026-09-11 用户裁决批(两级奖励 + 关内延续):RewardTable category 扩为五值两类交付轴(即时 75% / 可选 25%)· +# 2026-09-11 用户裁决批(两级奇物 + 关内延续):RewardTable category 扩为五值两类交付轴(即时 75% / 可选 25%)· # 默认根重登记为八行(attack_up_basic 复活入池 / spark_aoe / heal_minor 新增;heal_pack 稀缺化 w6 p12)· # status_effect attack_up/defense_up duration 2→1(当次结算语义)· 库存关卡域(跨战斗延续、关卡末清空—— # 原战斗域作废)· 窗口单件制(原任意多件作废)· reward_config p_min 4→8。 -# 变更 owner = 奖励道具经济/战斗结算/增益状态 GDD 2026-09-11 同批修订。 +# 变更 owner = 奇物道具经济/战斗结算/增益状态 GDD 2026-09-11 同批修订。 # 2026-09-09 敌人系统 full 评审修订(owner=敌人系统,NEEDS REVISION 8 blocking 同日核销): # enemy.settlement_obligations ① 增调用序成文(query_attack→apply_damage→advance)与敌单位专属口径 · hud_obligations # ① 增预告时序/强度档位、② 改全局恒定 · rowset_rule 增精英/Boss 编码位预登记(敌人系统 OQ7)· clause3_supply # 结构上界改 min(AP, cap) 形(cap 腿松弛收紧)· direction_precheck 裕度 4.7×→2.3× 更正(最低档锚口径)· # account_input 增胜利路径声明注记。详见 design/archive/gdd-2026-09-14/reviews/b2-enemy-system-review-log.md。 -# 2026-09-09 奖励道具经济 定稿回填(owner=奖励道具经济):新增 reward_table 条目(schema 八字段 + 跨字段 +# 2026-09-09 奇物道具经济 定稿回填(owner=奇物道具经济):新增 reward_table 条目(schema 八字段 + 跨字段 # 校验族 + 机制/API 面 + 战斗结算×6/HUD框架×3 义务清单 + 地形变异 三约束承接 + 高光节点条目化);接口漂移改写三处—— -# rng_service.scope_event_binding 的 reward_roll 语义(每次奖励结算 → 每次 board install 批)、 -# status_effect.dangling_ref_policy(首引条件兑现)、clause3_supply.account_input(左臂载体 = 奖励道具经济 F6); -# action_economy.referenced_by 增 奖励道具经济(F6 当量供给消费条款①②)。并行会话冲突经用户裁决:道具段"照常消耗" +# rng_service.scope_event_binding 的 reward_roll 语义(每次奇物结算 → 每次 board install 批)、 +# status_effect.dangling_ref_policy(首引条件兑现)、clause3_supply.account_input(左臂载体 = 奇物道具经济 F6); +# action_economy.referenced_by 增 奇物道具经济(F6 当量供给消费条款①②)。并行会话冲突经用户裁决:道具段"照常消耗" # 拍板为最终语义(覆盖并行草稿"拒绝不消耗"版),清图槽允许 buff 行拍板同批落定。 - name: hud_presentation_surface @@ -486,7 +486,7 @@ entities: owner: design/gdd/systems/排雷循环/魔法道具.md attributes: table: AuxItemTable(数据配置 承载【数据配置×① 修订批登记】,键 = item_id;魔法道具 回填 owner,2026-09-14 定稿登记;定义表非进度成长表——Rule 4 豁免;生效前提 = 地图战斗资源×①…⑤/数据配置×①② 修订批兑现) - slice_scope: 垂直切片期无道具内容(2026-09-17 用户拍板——空清单合法态):AuxItemTable 不随切片建表、六行不入掉落池(掉落频率归战斗奖励侧),F2 维度覆盖谓词挂起至表非空;本条设计登记与机制桥接(战斗结算 query_reward_identity 未开格恒可查)保留,内容随 魔法道具内容批(排垂直切片收尾后)回填。**解锁状态面例外**(元进度实现批 2026-09-21 注记):工坊六件的通关次数解锁渠道已落地(meta.tres workshop_items 行族 + SaveManager item_unlocks 域),局内效果仍归 Alpha 魔法道具整体重设计批——名称沿用本条词表 + slice_scope: 垂直切片期无道具内容(2026-09-17 用户拍板——空清单合法态):AuxItemTable 不随切片建表、六行不入掉落池(掉落频率归战斗奇物侧),F2 维度覆盖谓词挂起至表非空;本条设计登记与机制桥接(战斗结算 query_reward_identity 未开格恒可查)保留,内容随 魔法道具内容批(排垂直切片收尾后)回填。**解锁状态面例外**(元进度实现批 2026-09-21 注记):工坊六件的通关次数解锁渠道已落地(meta.tres workshop_items 行族 + SaveManager item_unlocks 域),局内效果仍归 Alpha 魔法道具整体重设计批——名称沿用本条词表 fields: item_id: String 主键唯一——地图战斗资源 RewardTable.effect_id(aux 行)与 VariationTable.counter_item_ids 的引用键 display_name: String 非空(HUD框架 呈现数据源,本地化归 设置与本地化——敌人系统/增益状态/地图战斗资源 同库惯例) @@ -496,7 +496,7 @@ entities: magnitude: int [0,999](knob)——仅 ap_grant 行消费(= AP 点数,加载校验 ≥1);空间行不消费非校验项 use_phase: enum {active_dig}——MVP 单值(扩枚举走 魔法道具 GDD 修订;地图战斗资源 use_timing 扩值 during_dig 同批对齐——地图战斗资源×③) mvp_content: 六行(值 provisional 归 难度曲线与Boss;显影尘与地穴全图卷的原显影半边随雾格移除失义、效果与目标待重定——随魔法道具整体重设计归 Alpha(2026-09-20 用户拍板,原 06 待办条目移除),名称保留)——probe_dust 显影尘〔info+counter / 效果待重定 / w5 t2〕· sapper_order 工兵令〔action / ap_grant / none / mag 2 / w5 t2〕· loot_compass 探宝罗盘〔plan / reward_preview / area_3x3 / w4 t2〕· nest_pendulum 探巢摆钟〔risk / mine_reveal / area_3x3 / w4 t2〕· catacomb_scroll 地穴全图卷〔info+plan / 效果待重定·随魔法道具整体重设计归 Alpha / board_wide / w1 t3〕· blast_kit 爆破工兵包〔action+risk / ap_grant+mine_reveal / area_3x3 / mag 4 / w1 t3〕——四常规单维(t2)+ 两稀有多维高数值(t3;稀有读数 ≈0.17 件/板,F1) - load_bearing_rules: 真视窄域护栏(承重)——mine_reveal 支持域 ≤area_3x3、board_wide 仅恢复推理原料类效果(显影/预读,显影载体待重定;恢复推理可全图、替代推理必窄域——P1 防塌方;schema 校验强制,夹具 aux_target_violation)· 效果时效随 kind 派生无独立字段(空间 kind 恒本图持续、ap_grant 恒当轮一次性)· 零随机(零 RNG 流消费——信息全部来自 排雷玩法 恒真数字/地图战斗资源 Ready 映射/行动经济 账本三既有事实源)· 零特判延伸(排雷玩法 代码零 魔法道具 分支)· 无效/零信息目标不可用不消耗(可用性门——2026-09-14 用户拍板:板级判据 → 图标灰/入口禁用〔地图战斗资源 usable_now 先例〕、点击级 → 拒绝零消耗、组合行判据取 OR——爆破包 ap_grant 恒可用、真视零雷恒有效;与 地图战斗资源 E10 照常消耗区分——挖掘期非结算管线、守卫 魔法道具 本地可判)· area_3x3 边缘窗口 resolved_target = 窗口 ∩ 板内格(2026-09-14 用户拍板——护栏只缩不扩)· 使用零 AP 成本(不经 try_spend)· 库存关卡域(与 地图战斗资源 库存正交两容器、生命周期同构)· **同调位持有上限(迭代 10 奖励重构批挂约束面,2026-10-01)**——任何渠道 add_item 遇持有数 ≥ transitional_sync_slots(adventure.tres 过渡键,provisional 1)时:停点渠道(三选一/奖励节点)触发替换交互(现有件+新件 N+1 选 N、可放弃新件不获取,终态恒 ≤ 上限),战斗内渠道沉没不入(战斗域零交互纪律);正主 = 同调位里程碑谓词表 attunement_growth.tres(同调实施批),切换读数源注记随该批· Used 不可逆 + load_bearing_rules: 真视窄域护栏(承重)——mine_reveal 支持域 ≤area_3x3、board_wide 仅恢复推理原料类效果(显影/预读,显影载体待重定;恢复推理可全图、替代推理必窄域——P1 防塌方;schema 校验强制,夹具 aux_target_violation)· 效果时效随 kind 派生无独立字段(空间 kind 恒本图持续、ap_grant 恒当轮一次性)· 零随机(零 RNG 流消费——信息全部来自 排雷玩法 恒真数字/地图战斗资源 Ready 映射/行动经济 账本三既有事实源)· 零特判延伸(排雷玩法 代码零 魔法道具 分支)· 无效/零信息目标不可用不消耗(可用性门——2026-09-14 用户拍板:板级判据 → 图标灰/入口禁用〔地图战斗资源 usable_now 先例〕、点击级 → 拒绝零消耗、组合行判据取 OR——爆破包 ap_grant 恒可用、真视零雷恒有效;与 地图战斗资源 E10 照常消耗区分——挖掘期非结算管线、守卫 魔法道具 本地可判)· area_3x3 边缘窗口 resolved_target = 窗口 ∩ 板内格(2026-09-14 用户拍板——护栏只缩不扩)· 使用零 AP 成本(不经 try_spend)· 库存关卡域(与 地图战斗资源 库存正交两容器、生命周期同构)· **同调位持有上限(迭代 10 奇物重构批挂约束面,2026-10-01)**——任何渠道 add_item 遇持有数 ≥ transitional_sync_slots(adventure.tres 过渡键,provisional 1)时:停点渠道(三选一/奖励节点)触发替换交互(现有件+新件 N+1 选 N、可放弃新件不获取,终态恒 ≤ 上限),战斗内渠道沉没不入(战斗域零交互纪律);正主 = 同调位里程碑谓词表 attunement_growth.tres(同调实施批),切换读数源注记随该批· Used 不可逆 overlay_semantics: 板级叠加层三集(魔法道具 自持派生信息层、零回写 排雷玩法/地图战斗资源 状态、随图消亡;现行有效的 = 真视集与预读集,显影集载体待重定)——digit_reveal 显影集(HUD框架 显示被隐藏的数字,本体 = 排雷玩法 恒真数字;载体待重定)/ mine_reveal 真视集(真视≠自动兑付——插旗仍花 1 AP 走既有 flag_hit 路径)/ reward_preview 预读集(徽章数据源 = 战斗结算 query_reward_identity 既有读面——魔法道具 零 地图战斗资源 数据复制) api: 封闭枚举 8 入口(provisional,实现期 ADR 定名)——add_item(item_id, source) / query_inventory(枚举序 = 受理序,Used 保留只读,逐件含 usable 板级零信息可用性预判)/ validate_use(handle, target?) → 效果投影(只读不消耗;目标校验谓词 = 越板/点击级零信息拒绝 + 边缘窗口裁剪 resolved_target = 窗口 ∩ 板内格)/ apply_overlay(kind, target, mag)(战斗结算 逐 kind 调用)/ consume(handle)(Used 不可逆 + 快照回执)/ query_overlays(三集只读投影)/ retire_overlays(战斗结算 编排——与 地图战斗资源 retire_mapping 同点)/ clear_inventory(关卡末幂等);负空间 = 无自动使用入口/无重掷/无事件订阅/无 RNG 直连/无 排雷玩法/地图战斗资源 写入口 use_orchestration: 战斗结算 use_aux 规范序(唯一调用权)= 相位 gate(Active——行动经济 phase getter)→ validate_use(目标校验读 排雷玩法 只读面——使用目标校验谓词表见 魔法道具 GDD)→ 逐 kind 应用(顺序钉死:空间先、ap_grant 后——effect_kinds 列表序非运行时语义)→ consume——序即原子(validate 拦下全部可失败输入;apply/grant 域内无失败路径 → consume 恒达) @@ -545,7 +545,7 @@ entities: attributes: kind: 调参目标带(F5)+ 承伤估算(F4)+ 供给平衡式(F6)——设计期工具式,运行时零新增公式(难度曲线与Boss 定位声明) clear_rate_target: ⚠ 口径退役待重锚(2026-09-23 用户拍板单关直入口口径退役——逐关读数改冒险条件口径派生〔balance_verifier 冒险段〕,带值重锚归曲线调参批,重锚前只测不判;带史 = 2026-09-20 分带批 L1 [35,55]/L2 [25,45] 锚定直入口单关读数〔已随口径退役不可比〕,更早 L1 10-25/L2 20-40 系乱点画像口径亦作废;区间位移机制承载:atk 翻倍 ≈ K 减半 → 绿档;2026-09-18 起永久强化经换算率表按带平移接入,见 meta_progression_conversion_table;**2026-09-30 改带〔迭代 5 返工出口收口批,用户拍板〕:冒险条件口径普通档 L2 [25,45]→[10,15]——原带设定有误裁,返工终态读数 10.6/13.6% 落带、批点丙追认**;成文见难度曲线与Boss 判读口径节) - supply_balance_band: "**关级供给带 [1.1,2.0] 退役(2026-09-14——其验算 0.54 与实测 60% 通关矛盾)**——由生存链区间模型替代:每战 S/K 区间三档判定(绿 S_min>K_max / 黄 E[S]≥E[K]+1 / 红 S_max≤K_min 禁止入表)+ 关级恒等式(atk×ΣR_survive + Σ奖励输出 ≈ Σ敌hp期望×(1+缓冲),actuals 逐项审计闭合)+ 输出占比带 [15%,40%] + 通关余量带(p90≤13 & p10≥3——'通关只剩一点血'量化)" + supply_balance_band: "**关级供给带 [1.1,2.0] 退役(2026-09-14——其验算 0.54 与实测 60% 通关矛盾)**——由生存链区间模型替代:每战 S/K 区间三档判定(绿 S_min>K_max / 黄 E[S]≥E[K]+1 / 红 S_max≤K_min 禁止入表)+ 关级恒等式(atk×ΣR_survive + Σ奇物输出 ≈ Σ敌hp期望×(1+缓冲),actuals 逐项审计闭合)+ 输出占比带 [15%,40%] + 通关余量带(p90≤13 & p10≥3——'通关只剩一点血'量化)" tool_carrier: balance_verifier.py 冒险段(逐关条件通关率/止步归因/营地循环——2026-09-23 起难度读数主载体)/ adventure_monte_carlo.gd / reward_expectation.gd(原 level_monte_carlo.gd 随单关直入口口径退役删除 2026-09-23;棋盘生成 F4 排期倒挂解除载体) calibration_gap: 真人修正系数待 playtest 标定(OQ3——**方向已由试玩批次 1 反向确认:真人显著强于模拟者**〔v2 真人 100% vs 模拟 80%〕;旧"真人预期低于模拟"方向声明由本条替代;带按模拟口径定义,真人系数批次 2 定量) referenced_by: [地图战斗资源, 战斗结算, 冒险结构, 元进度] @@ -571,43 +571,43 @@ entities: nodes: 节点图结构——节点数组 + 连线(node_kind ∈ {battle, reward, rest, boss, shop},切片字段名 type;+shop 随 2026-09-20 GP+商店房批——商店房兑付 = 打开商店覆盖层、离开后确认回选路,不携带战斗行〔零敌人、零棋盘配置行〕;每节点领关卡内唯一**节点编号**,battle/boss 数据键 node_depth 沿用〔v1.0 语义升级:深度 → 节点编号〕;连线 = 出边节点编号表,只朝前进方向、无回头路);单链特例 = 隐式后继(数组序即链,切片现行形态零漂移) rowset_rule: 图合法性校验(2026-09-17 关卡节点地图 v1.0)——节点编号关卡内唯一、入口唯一、Boss 恒唯一终点(编号最大,Dmax 语义平移)、连线无环、所有节点沿连线可达 Boss,违规加载期致命;实现批(2026-09-17 分支节点图批):校验落 LevelTable.validate(单链形态经同一套算法——编号解析单链 = 数组下标 / 图 = node_depth),L1 单链与 L2 图双行集加载全绿断言;商店房编排(每关恰 1、Boss 前一位必经位)由冒烟断言承载、非加载校验——图合法性六检零新增(GP+商店房批 2026-09-20,关卡节点地图 v1.1) cross_table_validation: battle/boss 节点 (L,D) 在 board_gen/enemy 两表存在精确行(数据配置 跨表校验⑧复用 + 冒险结构 AC-7 冒烟断言——序列关数 ⊆ 内容覆盖,越界关卡 = 内容生产缺口) - mvp_content: L1 全行(切片转正——7 节点链〔单链特例,合法图形态〕、rest_heal_pct=30);L2 全行已落地(2026-09-17 分支节点图批——首张分支图:9 节点〔入口 0 → 中间三层 2/3/2 → Boss 8〕、真实岔路 4 处、奖励点+恢复点各 1、战斗节点 6 + Boss;行值 provisional 归 难度曲线与Boss v0.7;首页直入口已退役〔2026-09-23 用户拍板〕);**L3 全行已落地(2026-09-20 第三关内容批——「第三层 · 灰矮人矿城」:九节点图复用 L2 同模板〔6 战 + Boss + 奖励 + 恢复、真实岔路 4 处〕,行值全 provisional 归 难度曲线与Boss;测试直入口已退役〔2026-09-23〕)**;2026-09-20 GP+商店房批 rewiring:L2/L3 图版 Boss 重编号 8→9、各新增 (8, shop, next[9]) 商店房节点(Boss 前一位必经位),L1 零改动,图合法性六检零新增——必经位由冒烟断言承载;**2026-09-21 冒险结构实现批:三关正式序列生效**(首页「开始冒险」= L1→L2→L3 连探,AdventureRunner 编排——大奖励/生命账本/GP 冒险账本/主种子归冒险结构层,冒烟断言在案)** + mvp_content: L1 全行(切片转正——7 节点链〔单链特例,合法图形态〕、rest_heal_pct=30);L2 全行已落地(2026-09-17 分支节点图批——首张分支图:9 节点〔入口 0 → 中间三层 2/3/2 → Boss 8〕、真实岔路 4 处、奇物点+恢复点各 1、战斗节点 6 + Boss;行值 provisional 归 难度曲线与Boss v0.7;首页直入口已退役〔2026-09-23 用户拍板〕);**L3 全行已落地(2026-09-20 第三关内容批——「第三层 · 灰矮人矿城」:九节点图复用 L2 同模板〔6 战 + Boss + 奇物 + 恢复、真实岔路 4 处〕,行值全 provisional 归 难度曲线与Boss;测试直入口已退役〔2026-09-23〕)**;2026-09-20 GP+商店房批 rewiring:L2/L3 图版 Boss 重编号 8→9、各新增 (8, shop, next[9]) 商店房节点(Boss 前一位必经位),L1 零改动,图合法性六检零新增——必经位由冒烟断言承载;**2026-09-21 冒险结构实现批:三关正式序列生效**(首页「开始冒险」= L1→L2→L3 连探,AdventureRunner 编排——大奇物/生命账本/GP 冒险账本/主种子归冒险结构层,冒烟断言在案)** referenced_by: [冒险结构, 关卡节点地图, 难度曲线与Boss, 棋盘生成, 数据配置] - - name: reward + - name: curio type: concept - owner: design/gdd/systems/冒险循环/奖励.md + owner: design/gdd/systems/冒险循环/奇物.md attributes: - definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奖励。装的是"这一局你捞到了什么",不管从哪个渠道来 - channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奖励的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奖励自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性提升类/资源与机会类不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** - axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奖励属于哪个分类不决定它从哪个渠道来;交叉关系由 [奖励](design/gdd/systems/冒险循环/奖励.md) 第 2 节开关表定死 + definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奇物。装的是"这一局你捞到了什么",不管从哪个渠道来 + channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奇物的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奇物自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性提升类/资源与机会类不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** + axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奇物属于哪个分类不决定它从哪个渠道来;交叉关系由 [奇物](design/gdd/systems/冒险循环/奇物.md) 第 2 节开关表定死 categories: 封闭三类 {机制类, 属性提升类, 资源与机会类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源与机会类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 - boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奖励;跨冒险跟着你走的是魔法道具**。奖励永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 + boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奇物;跨冒险跟着你走的是魔法道具**。奇物永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源与机会类的种类配额与值)/ shop.tres(货架取舍) - open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复是否属资源与机会类待确认(也可能独立成第四类)——它**应在商店内**(不是计价物,套不上计价物不自售),现行 shop.tres 货架缺它是现状与表格不对齐,须实施批补上;④专长门票尚未入表(出现概率/配额/全局限量无事实源);⑤确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);⑥charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记);⑦顶层命名待定(奖励/收益均不妥,拟造词)——**代码 reward 词族已被 reward_pick/reward_node/reward_preview 占用,feature_* → reward_* 对齐待办不能照做** - naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `reward_*`,属临时态,登记于 06-待办清单 + open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复是否属资源与机会类待确认(也可能独立成第四类)——它**应在商店内**(不是计价物,套不上计价物不自售),现行 shop.tres 货架缺它是现状与表格不对齐,须实施批补上;④专长门票尚未入表(出现概率/配额/全局限量无事实源);⑤确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);⑥charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记);⑦顶层命名待定(奇物/收益均不妥,拟造词)——**代码 reward 词族已被 reward_pick/reward_node/reward_preview 占用,feature_* → reward_* 对齐待办不能照做** + naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.4 改名为「奇物」(v2.0 曾名「奇物」)(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `curio_*`,属临时态,登记于 06-待办清单 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] - name: adventure_table type: schema_data owner: design/gdd/systems/冒险循环/冒险结构.md attributes: - table: AdventureTable(数据配置 承载,单行全局;冒险结构 回填 owner;Rule 4 豁免——单行全局常量表,HeroTable/SettlementTable 先例;建表走 数据配置 接口漂移规则。**已建表**——data/schemas/adventure_table.gd + data/tables/adventure.tres + ConfigDB 加载行"adventure",冒烟断言在案(冒险结构实现批 2026-09-21);**迭代 10 奖励重构批扩列(2026-10-01)**——见 fields) + table: AdventureTable(数据配置 承载,单行全局;冒险结构 回填 owner;Rule 4 豁免——单行全局常量表,HeroTable/SettlementTable 先例;建表走 数据配置 接口漂移规则。**已建表**——data/schemas/adventure_table.gd + data/tables/adventure.tres + ConfigDB 加载行"adventure",冒烟断言在案(冒险结构实现批 2026-09-21);**迭代 10 奇物重构批扩列(2026-10-01)**——见 fields) fields: | - 退役两字段(迭代 10 奖励重构批,2026-09-30 用户拍板):level_clear_hp_bonus(「血回满+上限提升」件随大奖励三件套退役——回血改 clear_heal_pct 部分回血、上限提升改三选一件值列)、keystone_per_level(钥石退役出大奖励改 Boss/精英击杀掉落)。 + 退役两字段(迭代 10 奇物重构批,2026-09-30 用户拍板):level_clear_hp_bonus(「血回满+上限提升」件随大奇物三件套退役——回血改 clear_heal_pct 部分回血、上限提升改三选一件值列)、keystone_per_level(钥石退役出大奇物改 Boss/精英击杀掉落)。 clear_heal_pct: int [0,100](knob 默认 20——非末关通关部分回血回复生效上限的百分比,封顶上限不回满、满血回 0 合法;难度上压方向,带重扫义务归 难度曲线与Boss) - **2026-10-05 命名统一批**:本表的属性提升类奖励字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 reward 条目(v2.0 顶层改名为「奖励」)。 - feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性提升类奖励兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) + **2026-10-05 命名统一批**:本表的属性提升类奇物字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 curio 条目(v2.0 顶层改名为「奇物」)。 + feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性提升类奇物兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) feature_value_gp_common: int [0,999](GP 袋件定额入钱包);feature_value_ap_rarest: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](魔法道具件授予件数) ~~bonus_weight_*(E-S 加权洗牌权重族)~~ / ~~bonus_cap_*(种类次数上限族)~~:**v2.2 令牌池换代退役(迭代 12 TP0——2026-10-03 追认 b 实施批;洗牌改令牌 Fisher-Yates、池消耗即上限)** feature_quota_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) feature_value_attack_rare / feature_value_max_hp_rare / feature_value_armor_rare / feature_value_gp_rare: int [0,999](稀有档大数值对——+2/+10/+2/50);feature_value_heal_rare: int [0,999](恢复件 +6 当即回血——新入池种类 rare 档);MC 策略 316-f(autoplay 1 级最稀有/2 级最左)随批落地 transitional_sync_slots: int [0,9](同调位过渡读数源,默认 1——道具持有上限;正主 = attunement_growth.tres 里程碑谓词表,同调实施批落地后切换读数源) mvp_content: 单行全局默认值即 MVP 行(provisional 归 曲线调参批——迭代 10 扩列批注) - extension_reserve: 大奖励形态扩列位已消费(迭代 10 奖励重构批落地三选一/攻击型——本键使命完成退役;冒险结构 OQ2 收口) + extension_reserve: 大奇物形态扩列位已消费(迭代 10 奇物重构批落地三选一/攻击型——本键使命完成退役;冒险结构 OQ2 收口) referenced_by: [冒险结构, 元进度, 行动经济, 数据配置] - name: shop_table @@ -636,7 +636,7 @@ entities: attributes: kind: 主角战斗入参覆盖值通道(begin_battle 显式参数传递——切片 E4 封装收口批实现,registry 登记缺口由 冒险结构 定稿批补登) contract: begin_battle 增 hero_hp / hero_atk / hero_max_hp 显式入参 → 敌人系统.spawn 增 atk_override / max_hp_override 参数;-1 = 表值兜底(不覆盖);hero 表运行期不可变(数据配置 单一事实源机制化——表写通道全删) - consumers: HP 账本(冒险结构——跨战斗 HP 持久性 + 大奖励上限提升的传入面)/ 元进度加成(元进度实现批 2026-09-21 接通——MetaProgression.hero_override() 现算 flat 三档,AdventureRunner.start_adventure params.hero_override 显式传入 → LevelRunner base_override 共享;叠加序 = 表值 + 永久强化 flat + 加算区 flat × TunePanel pct)/ 切片 TunePanel(调试通道) + consumers: HP 账本(冒险结构——跨战斗 HP 持久性 + 大奇物上限提升的传入面)/ 元进度加成(元进度实现批 2026-09-21 接通——MetaProgression.hero_override() 现算 flat 三档,AdventureRunner.start_adventure params.hero_override 显式传入 → LevelRunner base_override 共享;叠加序 = 表值 + 永久强化 flat + 加算区 flat × TunePanel pct)/ 切片 TunePanel(调试通道) adr_status: ADR-0009 候选——正式侧 战斗结算/敌人系统 GDD 修订随 ADR-0009 批;冒险结构 GDD 规则 3/4 为 冒险结构 半边(HP 账本供值)的正式定义源 referenced_by: [战斗结算, 敌人系统, 冒险结构, 元进度] @@ -644,10 +644,10 @@ entities: type: schema_data owner: design/gdd/systems/跨局循环/元进度.md attributes: - table: 永久强化换算率表(数据配置 承载;键结构 元进度定稿批 2026-09-18 登记,数值行读 `data/tables/meta.tres` conversion 行族。**已标定投值**:三行 生命 6 / 攻击 9 / 护甲 1 点每级——换算率标定批 2026-09-23,OFAT 冒险注入档与白板同种子配对的逐关条件通关率差实测(每级带平移 +6.0±0.7 / +8.8±0.8 / +1.2±0.4 点取整;冒险条件口径 + 当日 L2 收紧/大奖励 10→5 后现行数值包——直入口口径同日退役使首轮直入口面读数作废),护甲行强条目重测随批履行并暴露修复护甲断链(begin_battle hero_armor_class 参数零消费→_defender_ac 接线);判定端 balance_verifier.py 表值驱动消费(带重锚后随平移判);读数报告 production/qa/conversion-calibration/calibration.raw.md) + table: 永久强化换算率表(数据配置 承载;键结构 元进度定稿批 2026-09-18 登记,数值行读 `data/tables/meta.tres` conversion 行族。**已标定投值**:三行 生命 6 / 攻击 9 / 护甲 1 点每级——换算率标定批 2026-09-23,OFAT 冒险注入档与白板同种子配对的逐关条件通关率差实测(每级带平移 +6.0±0.7 / +8.8±0.8 / +1.2±0.4 点取整;冒险条件口径 + 当日 L2 收紧/大奇物 10→5 后现行数值包——直入口口径同日退役使首轮直入口面读数作废),护甲行强条目重测随批履行并暴露修复护甲断链(begin_battle hero_armor_class 参数零消费→_defender_ac 接线);判定端 balance_verifier.py 表值驱动消费(带重锚后随平移判);读数报告 production/qa/conversion-calibration/calibration.raw.md) kind: 区间平移换算率(2026-09-18 用户拍板启用)——永久强化对难度的影响不直接改难度判据,按统一换算率折算为通关率带平移量后套用(完美档 gate 与 normal 目标带判读口径不变,带随解锁等级平移) key: (conversion_row_id)——一行一柜台商品类型 - first_version_rows: 首版登记三个属性维度(表内即三行条目;用户拍板 2026-09-18,"维度"为拍板用语、"行"为表内同义术语):生命上限强化 / 基础攻击强化 / 护甲等级强化——后续商品上架(道具工坊钥石价、奖励格图鉴)逐条补登记,每次上架伴随一行换算登记(逐行归因纪律) + first_version_rows: 首版登记三个属性维度(表内即三行条目;用户拍板 2026-09-18,"维度"为拍板用语、"行"为表内同义术语):生命上限强化 / 基础攻击强化 / 护甲等级强化——后续商品上架(道具工坊钥石价、奇物格图鉴)逐条补登记,每次上架伴随一行换算登记(逐行归因纪律) strong_row_discipline: 护甲等级行为**强条目**——护甲等级牵动命中判定全链(AC 换装 / 掷点带宽),验收读数必须按解锁后参数重测、不得沿用基线读数外推 value_semantics: 每行折算值 = 每级强化对应的通关率带平移量(pp);营地定价从对应行换算率推(几何递增曲线,起步价与公比随设计批) related_save_domains: 钥石余额 / 永久强化等级表 / 关卡通关次数表 / Boss 首杀标记位(域级契约登记方式随 存档序列化「存档契约条目的登记方式」联合裁决) @@ -660,18 +660,18 @@ entities: table: MetaTable(数据配置 承载——元进度实现批 2026-09-21 建表落籍;schema data/schemas/meta_table.gd + data/tables/meta.tres) kind: 元进度/永久强化数值行单点(定价 / Boss 两档 / 工坊阈值 / 换算率四行族——消费面一律走 ConfigDB.meta_* 访问器,禁直读行集) row_families: forge_products {attr ∈ {max_hp, atk, armor_class} 恰三, display_name, flat_value, base_price, price_ratio_pct ∈ [100,400]} · boss_keystone {level_index 连续从 1, first_kill ≥ repeat_kill} · workshop_items {item_id ∈ registry aux_items 六件词表恰全, display_name, clear_threshold ∈ [1,99]} · conversion {attr 与 forge 词表一致恰三, per_level_shift_pct ∈ [0,100]} - provisional: 数值全 provisional 归元进度设计批配读数(骨架先行先例 = GP+商店房批)——现行落表值:flat 血+3/攻+1/甲+1、base 10 ratio 150 三行同;Boss 两档 **首杀 3 三关统一 / 复杀按关 2/2/3 递进**(**迭代 10 奖励重构批重锚 + 用户 2026-10-01 裁「a 用备选」**——原 L1 5/1 · L2 8/2 · L3 12/3 与代拍板「复杀统一 2」均退役;P-B 乙拍板贴近「Boss 掉 2–3 个」示例量级,L3 3/3 系 first≥repeat 结构约束的合法端点;精英掉 1 预留行随怪物批实装落);工坊阈值 1/1/2/2/3/3(按总通关次数);换算率全 0 占位 + provisional: 数值全 provisional 归元进度设计批配读数(骨架先行先例 = GP+商店房批)——现行落表值:flat 血+3/攻+1/甲+1、base 10 ratio 150 三行同;Boss 两档 **首杀 3 三关统一 / 复杀按关 2/2/3 递进**(**迭代 10 奇物重构批重锚 + 用户 2026-10-01 裁「a 用备选」**——原 L1 5/1 · L2 8/2 · L3 12/3 与代拍板「复杀统一 2」均退役;P-B 乙拍板贴近「Boss 掉 2–3 个」示例量级,L3 3/3 系 first≥repeat 结构约束的合法端点;精英掉 1 预留行随怪物批实装落);工坊阈值 1/1/2/2/3/3(按总通关次数);换算率全 0 占位 impl: core/meta_progression.gd(MetaProgression 账本服务——余额/几何定价〔tier 级价格 = 迭代 floor(p × ratio/100)〕/购买/工坊解锁〔总通关次数渠道〕/settle_adventure Boss 两档入账/hero_override 注入计算;Core 层零 UI 零信号) workshop_unlock_rule: 首版只挂总通关次数渠道(Σ level_clear_counts 达阈值——2026-09-21 实现批代拍板 2 并经用户确认,GDD 未细分);**channel 可替换轴**(同日用户拍板:解锁条件须抽象、可替换、可扩展——渠道由 workshop_items.channel 字段声明〔缺省 total_clears,词表 MetaTable.WORKSHOP_CHANNELS 封闭〕,判定量换算单点 = MetaProgression._workshop_progress,换/加渠道 = 词表加值 + 一 match 分支,阈值比较与解锁写档零改动;未知渠道恒 0 = 永不解锁 fail-safe;候选 adventure_depth 最高通关深度 / keystone 直购双渠道已预留语义未实现);钥石直购价随定价批后补 referenced_by: [元进度, 存档序列化, 数据配置] -# 2026-09-09 奖励道具经济 full 评审修订批(owner=奖励道具经济 代用户修订,NEEDS REVISION 14 blocking 同日核销): +# 2026-09-09 奇物道具经济 full 评审修订批(owner=奇物道具经济 代用户修订,NEEDS REVISION 14 blocking 同日核销): # 新增 reward_config 条目(RewardConfigTable 单行全局——T_fog_min/K_dmg/N_draft/P_min 的 Rule 1 载体); # reward_table 增 display_name(九字段)+ 默认根行集登记 + direction_precheck(刀供给)+ 跨字段护栏两条 # (floor_supply_missing / no_damage_row——敌人系统 OQ9 并案)+ 窗口锚点改授予段后(用户评审拍板:当轮拾取当轮可用) # + 重复受理幂等语义 + 战斗结算×6/HUD框架×3→HUD框架×5 义务清单同步;锚参照迁移传播三处(本条 anchor_warning 迁移注记 / # clause3_supply.direction_precheck 迁移注记 / systems-index 行动经济 OQ5 注记——attack_up 口径历史值与 defense_up -# 数值巧合全等、迁移后预检未重跑事实同批登记);terminology 增 奖励道具经济 六词条(刀/批尾/死行/档位序检查/预推进/烧刀烧包)。 +# 数值巧合全等、迁移后预检未重跑事实同批登记);terminology 增 奇物道具经济 六词条(刀/批尾/死行/档位序检查/预推进/烧刀烧包)。 # 详见 design/archive/gdd-2026-09-14/reviews/b4-reward-item-economy-review-log.md。 # 2026-09-10 战斗结算 定稿回填(owner=战斗结算):新增 settlement_table / clause5_dominance 两条件目 # (SettlementTable 七字段 + 三行致命 manifest + 段序骨架/可回放/高光双落载体;条款⑤主判式 + 保守地板缺口 + @@ -684,7 +684,7 @@ entities: # 2026-09-10 战斗结算 评审批修订(owner=战斗结算,/design-review NEEDS REVISION 同日核销 8 blocking): # settlement_table——p_perfect 载体域 {100,200}(真实双份交付)、pool_clamp_lo_hi 拆 lo/hi 两字段(八字段口径统一、 # 数据配置 GDD 行按收编先例以本条为准)、source_label_map 键集补 enemy_action/flag_miss、mechanics 补行协议字段分层; -# clause5_dominance——模型修订重登(挖穿残余池计价、条款⑤未闭合 + 难度曲线与Boss/奖励道具经济 约束包 + 护栏 B 双读数 + RAP 零价假设); +# clause5_dominance——模型修订重登(挖穿残余池计价、条款⑤未闭合 + 难度曲线与Boss/奇物道具经济 约束包 + 护栏 B 双读数 + RAP 零价假设); # clause3_supply——闭合回执双口径更正(锚行 ≈2.0×/2.6× / 期望 ≈1.2×/1.5×、破线约束两轴)。 # 详见 design/archive/gdd-2026-09-14/reviews/b1-settlement-review-log.md。 # 2026-09-13 HUD框架 定稿回填(owner=HUD框架):新增 hud_presentation_surface 条目(呈现面契约—— @@ -693,11 +693,11 @@ entities: # 2026-09-14 辅助道具 定稿回填(owner=辅助道具,solo 模式一次会话定稿、出稿待人工复核): # 新增 aux_items 条目(AuxItemTable 七字段 + MVP 六行【四常规单维 + 两稀有多维,值 provisional 归 难度曲线与Boss】+ # 真视窄域护栏承重规则 + 叠加层三集语义 + 8 API 面 + use_orchestration 规范序 + F1–F3 + 21 项跨 GDD 义务清单 -# + 地形变异 EC6/OQ2 与 奖励道具经济 OQ2 收口);variation_table.mvp_content.counter_item_ids 回填 [probe_dust](地形变异 预授权 +# + 地形变异 EC6/OQ2 与 奇物道具经济 OQ2 收口);variation_table.mvp_content.counter_item_ids 回填 [probe_dust](地形变异 预授权 # "辅助道具 期回填"兑现——数据配置 表值与悬空校验激活随 数据配置/辅助道具 修订批同批落地)+ dangling_ref_policy 首引兑现改写; # terminology 增四词条(叠加层/真视窄域护栏/渗透率 + referenced_by 增 辅助道具)。 -# 生效前提:奖励道具经济×①…⑤(category 扩值 aux_item/use_timing 扩 during_dig/默认根六行等)与 数据配置×①② 修订批—— -# 未兑现前 RewardTable 含 aux 行会加载致命(奖励道具经济 Rule 1 预留值拒绝)、辅助道具 GDD AC-12/13 登记 deferral。 +# 生效前提:奇物道具经济×①…⑤(category 扩值 aux_item/use_timing 扩 during_dig/默认根六行等)与 数据配置×①② 修订批—— +# 未兑现前 RewardTable 含 aux 行会加载致命(奇物道具经济 Rule 1 预留值拒绝)、辅助道具 GDD AC-12/13 登记 deferral。 # 2026-09-14 跨评审回写批(/review-all-gdds 🔴-1/🔴-2 修复,owner=增益状态/战斗结算/数据配置 GDD 代用户修订): # 批1(数据配置 漂移批 + 增益状态 接口漂移批)——status_effect.mvp_content.defense_up magnitude −50→−30(减伤墙批 # 2026-09-13 难度曲线与Boss 投值的对侧回写落地);rng_service.scope_event_binding 增 encounter 绑定 + referenced_by 增 战斗结算; @@ -707,7 +707,7 @@ entities: # clause3_supply.direction_precheck 增 2026-09-14 重算回执(现行值链破线 ≈0.48×/0.47×、约束升格曲线级—— # 禁独立调参联动网络 m_w↔D_ref↔m_d↔duration_d);clause5_dominance 增重算回执(v3 曲线四态 + 需求 110.3/166.8 + # 裁决②维持 + 护栏 W2 待重推注记);settlement_table.mechanics 增 战斗结算 F6 充能与护甲克制结算规格登记(W3)。 -# 2026-09-15 雾格移除清理批(owner=地形变异/棋盘生成/排雷玩法/奖励道具经济/战斗结算/辅助道具/冒险结构/GDD 代用户修订, +# 2026-09-15 雾格移除清理批(owner=地形变异/棋盘生成/排雷玩法/奇物道具经济/战斗结算/辅助道具/冒险结构/GDD 代用户修订, # 文档侧与代码侧分头执行)——variation_table:mvp_content 改空清单、删 load_bearing_rule 与 fog_ap_note 与 pricing_constraints # 三键、dangling_ref_policy 改"首个真实引用随未来变异行建行批回填"、referenced_by 收敛为 {棋盘生成, 排雷玩法, 辅助道具}; # board_gen_table:fields 删 fog_region_count/fog_target_ratio、cross_field_validation 删 fog_domain_ok、mechanics 改单一达标判据 @@ -727,17 +727,17 @@ entities: # BattleOrchestrator / EnemyCardView / BattleLogView / smoke 全量改键。 # 理由 = 位置键不承载语义,且"无甲/甲A/甲B"在文档间已分裂成四种写法。 # 数值零改动(纯改名);旧名仅在本批注记与各文档「版本历史」中作为"原名"留存,不再作为现行词汇使用。 -# 2026-09-15 攻击类型 / 奖励抽象分离批(同日第二批,用户裁定"攻击类型的定义和格子奖励要分离开;开格|标雷 → 奖励; -# 奖励如何定义是可以修改的;不要将两者绑定")——修正同日第一批遗留的焊死命名:结算表字段 damage_a_per_cell / +# 2026-09-15 攻击类型 / 奇物抽象分离批(同日第二批,用户裁定"攻击类型的定义和格子奇物要分离开;开格|标雷 → 奇物; +# 奇物如何定义是可以修改的;不要将两者绑定")——修正同日第一批遗留的焊死命名:结算表字段 damage_a_per_cell / # damage_a_cap / damage_b_per_flag(及其改名产物 pierce_per_cell / pierce_cap / magic_per_flag)把"攻击类型"与"棋盘来源" # 焊进同一根命名,属概念错误。现行两轴分离:① 攻击类型 = 伤害的属性轴(normal/pierce/magic,只决定查 armor_effectiveness # 哪一行,定义里不含任何棋盘来源);② 充能 = 按攻击类型分桶的附加伤害储备,"谁能充 / 充哪个桶" = settlement_table.charge_grants -# (触发源→{attack_type, per_unit, cap})= 奖励定义,整表替换即改奖励内容,攻击类型与矩阵不动。开格 / 标中旗 / 踩雷 / 清图 -# 一律只作奖励触发源。结算快照 round_facts:charge_dmg_a / charge_dmg_b → charge_counts(各触发源计数)+ charge_points -# (按攻击类型分桶点数);切片 BattlerOrchestrator 侧 _charge_counts 只计数、_charge_points() 按奖励定义投桶。 -# 充能奖励的正式归属(奖励道具经济 面)见 战斗结算「待拍板」。 -# 2026-09-15 格面资源批(用户四点拍板:① 结算队列+抵消过滤 ② 雷安一视同仁+可选类整体删除 ③ 封锁格计入清图 ④ 格面资源/清图奖励对象命名与封装; -# owner=奖励道具经济 v0.4 / 战斗结算 v0.7 / 排雷玩法 v0.3 / registry 侧 7 条;切片代码修改随新会话执行、指导已产出)—— +# (触发源→{attack_type, per_unit, cap})= 奇物定义,整表替换即改奇物内容,攻击类型与矩阵不动。开格 / 标中旗 / 踩雷 / 清图 +# 一律只作奇物触发源。结算快照 round_facts:charge_dmg_a / charge_dmg_b → charge_counts(各触发源计数)+ charge_points +# (按攻击类型分桶点数);切片 BattlerOrchestrator 侧 _charge_counts 只计数、_charge_points() 按奇物定义投桶。 +# 充能奇物的正式归属(奇物道具经济 面)见 战斗结算「待拍板」。 +# 2026-09-15 格面资源批(用户四点拍板:① 结算队列+抵消过滤 ② 雷安一视同仁+可选类整体删除 ③ 封锁格计入清图 ④ 格面资源/清图奇物对象命名与封装; +# owner=奇物道具经济 v0.4 / 战斗结算 v0.7 / 排雷玩法 v0.3 / registry 侧 7 条;切片代码修改随新会话执行、指导已产出)—— # reward_table 结构性重写:category/use_timing/库存/供给轴下线,新增 cell_type ∈ {attack,defense,heal,blast,weaken} × polarity ∈ {positive,negative} # 字段对(同型两行;正向行参与摇号 = 类型频次,负向行纯字典)、pool_tag {safe_cell, active_inject} → {cell}、mvp_content 十行(含负向直伤 heal flat p4、ambush+2 # stacks=2、sapped 行);direction_precheck 旧刀供给预检失义退役;settlement_obligations 六→四、hud_obligations 五→三、high_glow H3 失义下线。 @@ -753,13 +753,13 @@ entities: # 00-游戏概念/01-核心循环/03-内容规模/05-不做清单(旧固定兑付措辞)、UX 文档。历史留痕保留各批原文,现行口径以上方条目为准。 # # 2026-09-15 验收/收口批(owner=战斗结算,代用户修订;零数值零机制改动;**不改 v0.7 文件**)——v0.5/v0.6 两批(命名统一 + 抽象分离) -# 验收核对全绿后收口。范围纪律:战斗结算.md / 奖励道具经济.md 属 v0.7 格面资源批所有者文件、口径仍在移动,本批一律不动; +# 验收核对全绿后收口。范围纪律:战斗结算.md / 奇物道具经济.md 属 v0.7 格面资源批所有者文件、口径仍在移动,本批一律不动; # ③ 收口项登记于此(registry)+ README + active.md,GDD 侧只报告、待 v0.7 批整体收口后回填: # ① 收益对照表充能当量覆盖缺口:现行 flat/percent/完美乘数三式未覆盖「充能类」;候选口径 = 充能当量 = # Σ各桶点数 × 当轮目标护甲平均甲效倍率 ÷ 100(与直伤同类 1 伤害 = 1 当量,守 行动经济 条款①单一当量)——补式 / 登记待拍板二选一待回填批裁定。 # ② 两处已知落差:a) charge_grants 触发源可扩展 vs 切片仅 safe_cell/flag_hit 两处计数埋点(新增源须加埋点); # b) safe_cell/flag_hit 来源标识跨命名空间同名(结算明细行 source_class / charge_grants 键;RewardTable.pool_tag 已随格面资源批改 cell)。 -# 2026-09-19 充能退役批:settlement_table.charge_grants 字段删除(主角攻击回归单分量——克制策略归冒险前配置);上方 ①「充能当量覆盖缺口」与 ②a「触发源扩展 vs 计数埋点」两条充能相关注记随批废止;DamageMath.charge_component 改名 counter_component(奖励直伤唯一消费方)。 +# 2026-09-19 充能退役批:settlement_table.charge_grants 字段删除(主角攻击回归单分量——克制策略归冒险前配置);上方 ①「充能当量覆盖缺口」与 ②a「触发源扩展 vs 计数埋点」两条充能相关注记随批废止;DamageMath.charge_component 改名 counter_component(奇物直伤唯一消费方)。 # 验收读数:冒烟 201 项 0 失败 · 四探针 exit=0 无 FAIL(切片侧仍为 pre-v0.7 实现,代码同步随格面资源批新会话执行)。 # # 2026-09-15 护甲等级批(用户拍板登记,只改 GDD 与 registry、不动代码;owner=战斗结算 v0.8 / 敌人系统 v0.3 / 难度曲线与Boss v0.4 / registry 侧 3 条): @@ -771,10 +771,10 @@ entities: # 护甲等级(数值轴 armor_class)与护甲类型(克制属性轴 armor_type light/ward/heavy)命名区分成文——文档、表字段与代码键不得混用。 # EV 中性引入:期望伤害对齐现行表值,现行数值不重调;难度曲线与Boss 生存链区间补记掷点带宽口径(定稿前扫描维持全额口径),"零红档"验收保留。 # 拍板口径:必中、非归零(低掷按减伤档位折扣,无 miss 无零收益白回合);只对基础攻击掷(主角普通分量 / 敌方攻击拍与重击拍基线); -# 棋盘来源一律无视护甲等级——与"奖励/惩罚必中"同构。 +# 棋盘来源一律无视护甲等级——与"奇物/惩罚必中"同构。 # # 2026-09-16 系统更名批(用户拍板 2026-09-16,只改命名不改内容):两个系统中文规范名更名—— -# "奖励道具经济" → "地图战斗资源"(owner 文件重命名 design/gdd/systems/战斗循环/地图战斗资源.md;其「待拍板」系统更名条目关闭); +# "奇物道具经济" → "地图战斗资源"(owner 文件重命名 design/gdd/systems/战斗循环/地图战斗资源.md;其「待拍板」系统更名条目关闭); # "辅助道具" → "魔法道具"(owner 文件重命名 design/gdd/systems/排雷循环/魔法道具.md)。 # 本表同步:owner 路径(reward_table / reward_config / aux_items 三处)与 referenced_by、各属性文本中的系统名提及全部改新名; # 英文代号 REWARD_ITEM_ECONOMY / AUXILIARY_ITEMS 与条目键 reward_/aux_ 暂沿用(代码标识符与工具链口径),与中文名的对齐另批执行。 @@ -812,7 +812,7 @@ entities: # ② level_table:table 行改节点图结构;nodes 字段 = 节点数组+连线、每节点关卡内唯一节点编号 # (node_depth 数据键沿用、语义升级:深度→节点编号);rowset_rule 改图合法性校验(唯一编号/唯一入口/ # Boss 恒唯一终点〔编号最大,Dmax 平移〕/无环/全可达);MVP 链模板注记单链特例合法; -# ③ 术语「节点」图形态与分类学展开定稿(四类封闭枚举)、「节点奖励」机制定稿(功能道具正式渠道——内容/ +# ③ 术语「节点」图形态与分类学展开定稿(四类封闭枚举)、「节点奇物」机制定稿(功能道具正式渠道——内容/ # 持有/使用归 魔法道具 内容重定批,切片期直通合法空态;覆盖层 = 兑付反馈覆盖层)、「关卡收束点」图版措辞; # ④ enemy_table.rowset_rule:同层多遭遇由节点编号消解;不设精英/Boss 编码位(Boss=最大编号节点、精英 P2 # 内容承载);同场多敌种行集多行 → 敌人表行集多行批(战斗侧,排技能池实施批后, @@ -820,15 +820,15 @@ entities: # ⑤ 06-待办清单:「精英与 Boss 编码位」「多敌数量的消费面」(地图战斗资源节「功能道具的正式渠道」同日) # 三条已解决留痕;敌人系统「同深度第二敌种与精英 / Boss 编码位」部分收口改归属;新增「切片行进代码与 # 定稿的接口漂移」(八条漂移清单)与「图版措辞对齐」(跨文档残留单点清单)两待办。 -# 2026-09-17 代币→钥石统一拍板(用户裁决,06 清单「代币与钥石的资源关系」关闭):冒险结构关卡大奖励 -# 「代币记账 +10/关」即钥石入账——同一资源、两渠道(关卡大奖励 +10/关 provisional 与关底 Boss 掉落); +# 2026-09-17 代币→钥石统一拍板(用户裁决,06 清单「代币与钥石的资源关系」关闭):冒险结构关卡大奇物 +# 「代币记账 +10/关」即钥石入账——同一资源、两渠道(关卡大奇物 +10/关 provisional 与关底 Boss 掉落); # 「代币」措辞全仓退役(冒险结构 v0.3 / 元进度 v0.2 / 数据配置 v0.3 / architecture.md / adr-0005 随批清偿); # adventure_table 字段键改 keystone_per_level(原 token_per_level,AdventureTable 未建表零代码影响); # 钥石产出细则与解锁定价仍归元进度定稿批(关联待办「钥石的重复获取」继续)。 # 2026-09-17 分支节点图批(L2 幽暗地域内容批——关卡节点地图 v1.0 P1 实现批,用户拍板;与切片代码 / # 难度曲线与Boss v0.7 / 06-待办清单 / 关卡节点地图 版本历史同批): # ① level_table:display_name L2 落名"第二层 · 幽暗地域";mvp_content 改"L1 全行 + L2 全行已落地" -# (首张分支图:9 节点 / 岔路 4 处 / 奖励点+恢复点各 1 / 战斗节点 6 + Boss 8;行值 provisional); +# (首张分支图:9 节点 / 岔路 4 处 / 奇物点+恢复点各 1 / 战斗节点 6 + Boss 8;行值 provisional); # rowset_rule 增实现批注记(校验落 LevelTable.validate——单链 = 数组下标编号空间 / 图 = node_depth, # L1 与 L2 双行集经同一套算法,冒烟全绿断言);首页直入口试玩 ≠ 两关序列生效(序列推进仍待办)。 # ② skill_table 新行两行(provisional,投值归 难度曲线与Boss v0.7):撕咬 bite(damage ×1.5 冷却 1—— @@ -907,7 +907,7 @@ entities: # (OFAT 冒险注入档×双画像×na=100 与白板同种子流配对,逐关条件通关率差实测每级带平移 # +6.0±0.7 / +8.8±0.8 / +1.2±0.4 点配对 bootstrap 合并取整;读数报告 # production/qa/conversion-calibration/calibration.raw.md。测量面两换:首轮直入口面读数 -# 6/8/1 因同日单关直入口口径退役作废,且冒险条件口径 + L2 收紧/大奖励 10→5 现行数值包重测); +# 6/8/1 因同日单关直入口口径退役作废,且冒险条件口径 + L2 收紧/大奇物 10→5 现行数值包重测); # ② 护甲行强条目重测履行=重测暴露护甲断链:begin_battle hero_armor_class 参数自元进度实现批 # 传入以来零消费(_defender_ac 主角分支只读 db.hero 表值)——永久强化护甲档与冒险加算区 # 护甲轴的生效值未进战斗;本批接线(缺参/-1 = 表值兜底,白板路径逐位不变,冒烟 553 项 0 失败 diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index 35a015a1..c9079ad9 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -14,10 +14,10 @@ class_name AdventureTable extends Resource ## 概念指路:本表的属性提升类与资源与机会类,与 relics.tres 的机制类,同属一个对象—— -## 「奖励」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奖励.md。 +## 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 ## 它们是它的分类轴上的枚举(机制类 / 属性提升类 / 资源与机会类),不是三套系统; ## 本表承载属性提升类与资源与机会类的种类配额与件值。 -## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」。 +## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」→「奇物」。 ## 常量与字段随之前缀 feature_*,**尚未**随顶层改名换到 reward_*——见 06-待办清单。 ## 分类轴三个枚举:属性提升类〔生命上限 / AC / 攻击〕;资源与机会类〔行动点上限 / ## 刷新次数 / 金币 / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index 9f18ea30..22a16413 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -3,12 +3,12 @@ # 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) # 概念指路:本表的机制类(专长),与 adventure.tres 的属性提升类、资源与机会类,同属一个对象—— -# 「奖励」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奖励.md。 +# 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 # 它们是它分类轴上的枚举(机制类 / 属性提升类 / 资源与机会类),不是三套系统;本表承载「机制类」(专长 Feat)的逐项定义。 # (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「机制类(专长)」; # 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 -# 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奖励文档 2.1 节。) -# 数据配置 RelicTable schema(奖励·机制类定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 +# 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奇物文档 2.1 节。) +# 数据配置 RelicTable schema(奇物·机制类定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 # 定义表——AuxItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 From 128078780f0b7f30592dc53f2e9acb163e458083 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 05:46:54 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E5=A5=87=E7=89=A9=20v2.5=EF=BC=9A?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=B1=BB=E5=AE=9A=E5=90=8D=E3=80=8C=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E7=B1=BB=E3=80=8D+=20=E5=9B=9E=E5=A4=8D=E5=BD=92?= =?UTF-8?q?=E5=B1=9E=E5=AE=9A=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 父节点定为「奇物」后,Q6(第三类命名)解锁,本批收口。 一、第三类定名「资源类」(用户拍板) 四个成员——行动点上限 / 刷新次数 / 金币 / 回复——都是可以调动、可以 花掉的余量,故名资源类。「资源」偏泛(能力资源、财富资源都叫资源), 因此在两处写死判据句,这是把泛用词收回本类定义的唯一凭据: - 1.3 节新增专属判据:**给的是可以调动、可以花掉的余量,不是角色基础 属性的永久抬升**。拿不准时问一句:它会不会进角色自己的属性数值? 会进的归属性提升类,不会进、变成手里多出的次数或钱的,归资源类 - 1.5 命名出处节记明该偏泛性并指回 1.3 的判据句 (1.4 是三分类总判据,1.3 是资源类专属判据,层次不同不重复) 二、回复归属定案:留在资源类,不拆第四类 理由是它与金币同为**即时兑付**、都给的是可花掉的余量,判据完全同源。 拆出去之后第四类只剩两项,且与资源类的判据重合——分类的价值在于判据 能一刀切得开,拆一个判据同源的类只会让读者多查一张表。 三、附带修掉两处结构问题 - **1.5 段末与「### 2. 渠道轴」标题粘连**(缺换行,导致第 2 节标题被 吞进 1.5 段落里,目录层级失真) - entities.yaml open_questions 编号跳号(缺②、含两条已解决项③⑦), 重排为五项:类内异质性登记 / 门票四参数无事实源 / 档二不可达延后复裁 / charge 仅 3 件数据缺陷 / 断点存档键换名待裁 - entities.yaml naming_note 笔误:「v2.0 曾名「奇物」」→ 修正为 「v2.0 改名为「奖励」,v2.4 定名为「奇物」」 同步:06-待办清单(条目标题、交叉表行、待拍板项由三项减为两项、现状 描述)、02-系统清单(文档树行 + v1.8)、两个 schema 概念指路注释。 全文「资源与机会类」零残留(仅 02-系统清单 v1.5 版本历史行保留原名, 按规范版本历史不改写)。 数据层数值与表结构零变更;未 merge 回 master(本会话零测试)。 --- design/gdd/02-系统清单.md | 3 +- design/gdd/06-待办清单.md | 14 ++++----- design/gdd/systems/冒险循环/奇物.md | 44 +++++++++++++++------------- design/registry/entities.yaml | 12 ++++---- game/data/schemas/adventure_table.gd | 8 ++--- game/data/schemas/relic_table.gd | 4 +-- 6 files changed, 45 insertions(+), 40 deletions(-) diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index 1281c26b..b160720f 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,7 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | -| `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(机制类 / 属性提升类 / 资源与机会类三个枚举 × 奖励节点·商店·Boss 击败后三条渠道) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | +| `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(机制类 / 属性提升类 / 资源类三个枚举 × 奖励节点·商店·Boss 击败后三条渠道) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | ### 跨局循环(`systems/跨局循环/`) @@ -133,4 +133,5 @@ | v1.5 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(机制类 / 属性提升类 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | | v1.6 | 2026-10-05 | 《奖励》v2.1 交叉表收口:Boss 渠道只出专长(终局 Boss 不给),另两类在此不出现;新增「计价物不自售」规则处理金币不进商店——不拆第四个分类、不开特例,而是两轴交叉处的一条约束 | | v1.7 | 2026-10-05 | 《奖励》v2.2:机制类在非 Boss 渠道改为「专长获取」门票形式(不直接给专长);渠道约束重构为三层(分类白名单/可计算谓词/显式例外清单),并承认「计价物不自售」形式上是白名单外的一道过滤、与死特判的区别在可计算;立默认原则——除已登记规则外分类内的都要在池子里,据此回复应在商店内(现行货架缺它,须补) | +| v1.8 | 2026-10-05 | 《奇物》v2.5:第三类定名「资源类」(资源偏泛,故在命名出处节写死判据句——给的是可消耗或可重掷的余量,不是属性永久抬升);回复归属定案留在本类不拆第四类;修复 1.5 段末与渠道轴标题粘连 | | v1.8 | 2026-10-05 | 《奖励》改名为《奇物》并升 v2.4:顶层定名 Wondrous Item(DND 魔法物品九分类中的兜底杂类,官方中文译名「奇物」)。文档树冒险循环行改名;命名对照表 `ADVENTURE_REWARD` → `ADVENTURE_CURIO`(**不用 `reward_*`**——`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用该词族) | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index faf8029c..62c359f4 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -27,7 +27,7 @@ #### 冒险 BD 各分类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源与机会类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 **用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— @@ -35,11 +35,11 @@ |---|---|---|---| | 机制类(专长) | **门票形式** | **门票形式** | **直接给**(唯一直接渠道) | | 属性提升类 | 出 | 出(训练) | 不出现 | -| 资源与机会类 | 出 | 出(金币除外;**回复在内**) | 不出现 | +| 资源类 | 出 | 出(金币除外;**回复在内**) | 不出现 | **Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(门票)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**终局 Boss 不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在终局之前的 Boss。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 -**门票归机制类,不归资源与机会类**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 +**门票归机制类,不归资源类**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 **门票机制四条(用户 2026-10-05 定)**:① **拿到即开、不可囤积**——不进持有集,选中或买下同一时刻就开专长三选一(可囤积会让玩家把关键决策无限推迟,且把持有物语义从后门放回来;"道具"只是卡面表现)。② **罕见只在概率,不在价格**——货架价与其他商品相当,不靠高价劝退。③ **一局限购一次**(现行口径)。④ **计步保底**——连续 5 次三选一展示未出现门票,第 6 次展示必定出现;计数对象=**展示次数**(刷新后的重新展示计入,用户明定含刷新),计数范围=奖励节点与商店**共享**,触发后清零,**限购用满后保底不再触发**。 @@ -47,7 +47,7 @@ 原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:机制类挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 -**gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源与机会类(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 +**gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源类(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 **渠道约束分三层(v2.2,用户质疑后重构)**:用户问"计价物不自售不就是特判吗"。**诚实结论:形式上是的**——它确实是在分类白名单之外加的一道过滤,不是从分类推出来的。但和死特判有实质区别: @@ -65,7 +65,7 @@ **回复应在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则它应当在商店出现。现行 `shop.tres` 货架只有 attack / max_hp / armor / ap 四项,**现状与表格不对齐,须在实施批补上**。 -**待拍板/待观察三项**:① **资源与机会类的命名**(候选:资源 / 补给 / 余量);**回复是否属该类**(也可能独立成第四类——它是否出现在商店与此无关,两回事)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加门票最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 +**待拍板/待观察两项**:① ~~资源类的命名~~ 与 ~~回复是否属该类~~ **已定(v2.5)=资源类,回复留在其中不拆第四类**(它与金币同为即时兑付、判据同源;拆出去第四类只剩两项)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加门票最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 ④ **charge 标签件数不足(数据缺陷,独立登记,勿被上条盖掉)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷。 ⑤ ~~顶层命名待定~~ **已定(v2.4)=「奇物」Wondrous Item**:DND 魔法物品九分类中的兜底杂类,官方中文译名即「奇物」,专装"不好归类但有奇效之物"——正好对应三个互不相干的分类。落选:Treasure(偏财物,装不下专长)、Relic(品类惯例,用户否决「遗物」)、全部自造词(进益/造化/机缘/遇获)。**代码词族随之定为 `curio_*` / `ADVENTURE_CURIO`**——原计划的 `feature_* → reward_*` 对齐**作废**:`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用 reward 词族,照做会撞车。 @@ -73,9 +73,9 @@ **状态**:分工已定,**实施待排批**;两项待拍板/待观察(2026-10-05 v2.1 更新) -#### 资源与机会类两个新种类入池——刷新次数、专长获取(2026-10-05 立) +#### 资源类两个新种类入池——刷新次数、专长获取(2026-10-05 立) -**现状**:[奇物](systems/冒险循环/奇物.md) v2.0 立了资源与机会类四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 +**现状**:[奇物](systems/冒险循环/奇物.md) v2.0 立了资源类四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 **连带约束**:`FEATURE_KINDS` 词表封闭(断点附随件与牌库剔除态依赖它),扩种类须走 `adventure_table.gd` + registry 同步修订;档位配额是**结构锚**(普通 70 / 稀有 25 / 罕见 3 = 98 张,入 schema validate 硬断言),新种类入池要占配额——**改总量须重裁而非调参**。专长获取须带全局限量(一局内可获得次数上限)。 diff --git a/design/gdd/systems/冒险循环/奇物.md b/design/gdd/systems/冒险循环/奇物.md index 598450fa..005b77ce 100644 --- a/design/gdd/systems/冒险循环/奇物.md +++ b/design/gdd/systems/冒险循环/奇物.md @@ -4,7 +4,7 @@ > > 它是一个概念,不是一套东西。下面有**两根互不相干的轴**: > -> - **分类轴**回答"给的是什么"——三个枚举:机制类 / 属性提升类 / 资源与机会类; +> - **分类轴**回答"给的是什么"——三个枚举:机制类 / 属性提升类 / 资源类; > - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败后。 > > 一个奇物属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 @@ -52,7 +52,7 @@ |---|---|---|---| | **机制类**(专长 Feat) | 给规则。在结算管线某个挂点上给自己加一条规则;同一标签的持有件数达阈值时质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | | **属性提升类**(ASI) | 给数字。抬高角色某项战斗属性的基础值 | 冒险加算区的生命上限 / AC / 攻击三轴 | `adventure.tres`(种类配额与值) | -| **资源与机会类**(命名待定) | 给"可用的量"。不抬高战斗属性,也不改规则,而是扩充你能调动的余量与机会 | 行动经济、三选一界面、局内钱包;**不进加算区、多数不进持有集** | `adventure.tres`(种类配额与值) | +| **资源类** | 给"可用的量"。不抬高战斗属性,也不改规则,而是扩充你能调动的余量与机会 | 行动经济、三选一界面、局内钱包;**不进加算区、多数不进持有集** | `adventure.tres`(种类配额与值) | 三类的共性:都在当局获得、都在当局消费完或随冒险收束清零;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 @@ -62,7 +62,7 @@ 专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。这是它和另两类最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 -**专长门票也归这一类**:非 Boss 渠道不直接给专长,而是给一张名为「专长获取」的门票——拿到后立刻开一次专长 N 选一。它给的是"一件你以前不会的事"(只是把选择推迟到一次三选一),按 1.4 的判据归机制类,不归资源与机会类。详见 2.2。 +**专长门票也归这一类**:非 Boss 渠道不直接给专长,而是给一张名为「专长获取」的门票——拿到后立刻开一次专长 N 选一。它给的是"一件你以前不会的事"(只是把选择推迟到一次三选一),按 1.4 的判据归机制类,不归资源类。详见 2.2。 #### 1.2 属性提升类:纯属性三项 @@ -76,7 +76,7 @@ 三项都直接进冒险加算区,跨关携带且关间不清零。这一类是封闭的:只有这三项,多一项就要走文档修订。 -#### 1.3 资源与机会类:四项(命名待定) +#### 1.3 资源类:四项 这类装的是"不抬高战斗属性、也不改规则,但让你更有余地"的东西: @@ -89,17 +89,21 @@ **这类为什么单独存在**:它的成员不满足"抬高战斗属性"(那归属性提升类),也不满足"改写规则"(那归机制类),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 +**判据句("资源"这个词太泛,这句是唯一的收口凭据)**:这一类给的是**可以调动、可以花掉的余量**,不是角色基础属性的永久抬升。"资源"是常用词,能力资源、财富资源都叫资源——所以判据必须写死:拿不准一项该归哪类时,问它**会不会进角色自己的属性数值**。会进的归属性提升类,不会进、而是变成你手里多出来的次数或多出来的钱的,归资源类。 + **这类内部的异质性(要诚实登记)**:金币与回复是**即时兑付**——拿到就消失,不进持有集,也没有"持有→生效→清零"的过程;行动点上限与刷新次数则进持有账本、当局持续有效。它们被归在同一类是因为"给的是余量"这个共同性质,不是因为生命周期相同。这条异质性在此显式登记,防止后续把金币当成会持续生效的东西去结算。 #### 1.4 分类判据 -**给规则的是机制类,给数字的是属性提升类,给余量的是资源与机会类。** +**给规则的是机制类,给数字的是属性提升类,给余量的是资源类。** -拿不准的项按这条判:去掉它之后,角色是"某件以前不会的事做不到了"(机制类)、"某个数字少了一截"(属性提升类)、还是"能调动的余地变小了"(资源与机会类)。 +拿不准的项按这条判:去掉它之后,角色是"某件以前不会的事做不到了"(机制类)、"某个数字少了一截"(属性提升类)、还是"能调动的余地变小了"(资源类)。 #### 1.5 命名出处 -机制类与属性提升类都取自 DND 规则书的既有名词:专长对应 Feat,属性提升对应 Ability Score Improvement(ASI)。**顶层「奇物」取自 DND 魔法物品的九分类之一 Wondrous Item——官方中文译名就是「奇物」,是那个专门装不好归类但有奇效的东西的兜底杂类。** 用它做顶层名的理由:地下城里挖到的、商店里能买到的、能把你变强的、又确实贵重的东西,在 DND 里没有别的总称,只有 Treasure 和 Wondrous Item 两个候选,而 Treasure 偏向财物,装不下专长这种你会了件以前不会的事。奇物天生是杂类兜底,正好对应本概念下三个互不相干的分类(规则 / 数字 / 余量)——它们本来就没有共同点,能拢在一起的只有一个不好归类但有用的名字。资源与机会类内部的命名**待定**。玩家可见文案只写效果,不出现任何分类名。### 2. 渠道轴:与分类的交叉 +机制类与属性提升类都取自 DND 规则书的既有名词:专长对应 Feat,属性提升对应 Ability Score Improvement(ASI)。**顶层「奇物」取自 DND 魔法物品的九分类之一 Wondrous Item——官方中文译名就是「奇物」,是那个专门装不好归类但有奇效的东西的兜底杂类。** 用它做顶层名的理由:地下城里挖到的、商店里能买到的、能把你变强的、又确实贵重的东西,在 DND 里没有别的总称,只有 Treasure 和 Wondrous Item 两个候选,而 Treasure 偏向财物,装不下专长这种你会了件以前不会的事。奇物天生是杂类兜底,正好对应本概念下三个互不相干的分类(规则 / 数字 / 余量)——它们本来就没有共同点,能拢在一起的只有一个不好归类但有用的名字。**资源类取"资源"这个常用词**(用户 2026-10-05 定)——行动点上限、刷新次数、金币、回复都是可以调动、可以花掉的余量。它确实偏泛(能力资源、财富资源都叫资源),所以这一类的判据句必须写死:**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**——这一句是把"资源"从泛用词收回到本类定义里的唯一凭据,不能省。玩家可见文案只写效果,不出现任何分类名。 + +### 2. 渠道轴:与分类的交叉 三个渠道各只取走分类的一部分。这张表是奇物概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 @@ -107,7 +111,7 @@ |---|---|---|---| | **机制类**(专长) | 门票形式(见 2.2) | 门票形式(见 2.2) | **直接给**(唯一的直接渠道) | | **属性提升类** | 出 | 出(口径「训练」) | 不出现 | -| **资源与机会类** | 出 | 出(**金币除外**,见 2.4) | 不出现 | +| **资源类** | 出 | 出(**金币除外**,见 2.4) | 不出现 | **这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奇物的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 @@ -130,7 +134,7 @@ 奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奇物项,选中或买下之后,**立刻**开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 -**它归机制类,不归资源与机会类**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于机制类。所以在交叉表上,机制类在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 +**它归机制类,不归资源类**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于机制类。所以在交叉表上,机制类在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 **为什么非 Boss 渠道只给门票**:如果商店也能直接买到一个指定的专长,玩家就能用金币把构筑买出来,Boss 渠道的"打赢才拿到"就失去意义了。门票保留了惊喜(开出来的还是三选一,不是指定),但不让玩家用钱直接定点购买。 @@ -200,7 +204,7 @@ |---|---|---| | 金币不进商店 | 二层·谓词 | 计价物不自售——商店的计价物是 GP | | 机制类在非 Boss 渠道只给门票 | 一层·分类自身的形态 | 见 2.2——防止用钱定点买构筑 | -| 属性提升类与资源与机会类不出现在 Boss 渠道 | **不是约束** | 见 2.1——这是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖 | +| 属性提升类与资源类不出现在 Boss 渠道 | **不是约束** | 见 2.1——这是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖 | #### 2.5 在册事项 @@ -209,8 +213,8 @@ ### 3. 作用对象与范围 - **作用对象**:角色本人,以及角色参与的结算过程。奇物不改敌人、不改棋盘生成、不改关卡内容。 -- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源与机会类里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 -- **时间范围**:整局冒险。机制类与属性提升类自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源与机会类里的金币与回复是即时兑付,拿到即消费完。 +- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源类里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 +- **时间范围**:整局冒险。机制类与属性提升类自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源类里的金币与回复是即时兑付,拿到即消费完。 - **归属范围**:不进账号永久进度,不带到下一次冒险。 ### 4. 生命周期 @@ -223,7 +227,7 @@ | 阶段 | 说明 | |---|---| -| 候选池构建 | 冒险开局时一次建成。三个分类的候选**现同处一个令牌池**:属性提升类与资源与机会类按配额铺开,机制类按定义表的有效行铺开。 | +| 候选池构建 | 冒险开局时一次建成。三个分类的候选**现同处一个令牌池**:属性提升类与资源类按配额铺开,机制类按定义表的有效行铺开。 | | 出现 | 玩家在渠道上看到若干候选(三选一的形式),看不到整个池。 | | 选定 | 玩家选定一项后,它从池中剔除,此后任何渠道都不会再见。选到「专长获取」时,立刻再开一次专长 N 选一——这次选择走机制类的渠道语义,不占用原本的渠道。 | | 持有与兑付 | 机制类与属性提升类进入持有集后立即生效,跨关携带;机制类按同一标签的持有项数决定处于哪一档。金币与回复即时兑付,不入持有集。 | @@ -247,7 +251,7 @@ | 类型 | 内容 | |---|---| | 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包、三选一界面 | -| 依赖(数据) | `relics.tres`(机制类定义行)、`adventure.tres`(属性提升类与资源与机会类的种类配额与值)、`shop.tres`(货架取舍) | +| 依赖(数据) | `relics.tres`(机制类定义行)、`adventure.tres`(属性提升类与资源类的种类配额与值)、`shop.tres`(货架取舍) | | 输出(对外) | 持有集、生效中的分类投影、剩余候选池、档位求值结果、可用重抽次数 | | 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | @@ -266,7 +270,7 @@ | 机制类定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | | 专长门票(出现概率 / 配额 / 全局限量) | 整数 | **尚未入表**,见待办 | | 属性提升类种类 | 封闭三项:生命上限 / AC / 攻击,扩项走文档修订 | `game/data/schemas/adventure_table.gd` | -| 资源与机会类种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | +| 资源类种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | | 稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | | 各分类种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | | 专长获取的全局限量 | 整数(一局内可获得的次数上限) | 同上 | @@ -279,7 +283,7 @@ 3. 一项被选定的奇物不再出现在任何后续渠道。 4. 每个流派标签至少有一项挂在排雷侧的结算触发点上(防止机制类沦为纯战斗数值)。 5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 -6. 文档与代码里提到它时只有"奇物"这一个名字;需要区分时用"机制类/属性提升类/资源与机会类"描述,不得另造称呼。 +6. 文档与代码里提到它时只有"奇物"这一个名字;需要区分时用"机制类/属性提升类/资源类"描述,不得另造称呼。 7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 9. 金币不出现在商店货架上——这是「计价物不自售」谓词算出来的结果,不是给金币单独立的一个分类;它确实是在分类白名单之外加的一道过滤,只是这道过滤可自动计算而非靠枚举。 @@ -293,8 +297,7 @@ 本节只点出四条由本版新立、尚未登记的判断来源: -- **资源与机会类的命名待定**:候选「资源」「补给」「余量」,取决于以哪层共性为主。定了之后要回头改本文件的类名与 registry。 -- **回复是否属资源与机会类待确认**:它是即时兑付,与金币同类;也可能独立成第四类。它**在商店内**(不是计价物,套不上「计价物不自售」)——现行 `shop.tres` 货架只有攻击 / 生命上限 / 护甲 / 行动点四项,**现状与表格不对齐,须在实施批补上**。 +- **回复归属已定(v2.5)**:留在资源类,不独立成第四类。理由是它与金币同为**即时兑付**、都给的是可花掉的余量,拆出去之后第四类只有两项、且与资源类的判据完全同源——分类的价值在于判据能一刀切得开,拆一个判据同源的类只会让读者多查一张表。 - **专长门票尚未入表**:出现概率、配额、限购次数、保底计数阈值四个参数都没有事实源;入池时同样受档位结构锚约束(改总量须重裁而非调参)。 - **专长总量与档位阈值的匹配——延后复裁(用户 2026-10-05 定"先不调整")**:终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 的个数。三关结构下是两次,加上门票最多三次,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是后续会有第四关,且届时可能另做获取侧的调整。**复裁触发条件:第四关内容批落地后实测,若配合仍太少再调**。登记于此防止它被忘掉。 - **charge 标签件数不足(数据缺陷,独立登记)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷,随上一条一并延后,但不要被上一条盖掉。 @@ -306,8 +309,9 @@ | v1.0 | 2026-10-05 | 以「特性」为名首次为本概念立定义文档。此前它按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现收敛为一个对象下的分类;性质定为「角色自身得到提升」而非「获得物品」。 | | v1.1 | 2026-10-05 | 分类重构:两类由「规则改写型 / 属性加成型」改为「属性提升 / 专长」。 | | v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | -| **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源与机会类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源与机会类里,同时把它们的即时兑付性质显式登记为类内异质性。 | -| v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源与机会类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | +| **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源类里,同时把它们的即时兑付性质显式登记为类内异质性。 | +| v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | | v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表机制类在两渠道由"不出现"改为"**门票形式**";门票归机制类(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | | v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | +| **v2.5** | 2026-10-05 | **第三类定名「资源类」**(用户拍板,父节点定为「奇物」后解锁)。定名依据:行动点上限 / 刷新次数 / 金币 / 回复都是可以调动、可以花掉的余量。「资源」偏泛(能力资源、财富资源都叫资源),因此在 1.5 写死判据句——**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**,这一句是把泛用词收回本类定义的唯一凭据。**回复归属同时定案:留在资源类,不独立成第四类**——它与金币同为即时兑付、判据同源,拆出去第四类只剩两项且与本类判据重合。附带修复:1.5 段末与「### 2. 渠道轴」标题粘连(缺换行)。 | | **v2.4** | 2026-10-05 | **顶层由「奖励」改名为「奇物」(Wondrous Item)**。用户否决了「奖励」「收益」与全部自造词(进益/造化/机缘/遇获),要求回到 DND/西幻既有名词。定名依据:DMG 魔法物品九分类中的 Wondrous Item,官方中文译名即「奇物」,是专装不好归类但有奇效之物的兜底杂类——正好对应本概念下三个互不相干的分类。此前考虑过的 Treasure(宝物)因偏财物、装不下专长而落选;roguelike 品类惯例 Relic 因用户否决遗物落选。**代码词族定为 `curio_*`、`ADVENTURE_CURIO`**(`reward_*` 已被 `reward_pick` / `reward_node` / `reward_preview` 占用,不能对齐)。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 723c8346..3f21506d 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -579,16 +579,16 @@ entities: owner: design/gdd/systems/冒险循环/奇物.md attributes: definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奇物。装的是"这一局你捞到了什么",不管从哪个渠道来 - channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奇物的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奇物自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性提升类/资源与机会类不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** + channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奇物的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奇物自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性提升类/资源类不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奇物属于哪个分类不决定它从哪个渠道来;交叉关系由 [奇物](design/gdd/systems/冒险循环/奇物.md) 第 2 节开关表定死 - categories: 封闭三类 {机制类, 属性提升类, 资源与机会类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源与机会类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres + categories: 封闭三类 {机制类, 属性提升类, 资源类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源与机会类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奇物;跨冒险跟着你走的是魔法道具**。奇物永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 - data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源与机会类的种类配额与值)/ shop.tres(货架取舍) - open_questions: ①资源与机会类的命名待定(候选 资源 / 补给 / 余量);②类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同;③回复是否属资源与机会类待确认(也可能独立成第四类)——它**应在商店内**(不是计价物,套不上计价物不自售),现行 shop.tres 货架缺它是现状与表格不对齐,须实施批补上;④专长门票尚未入表(出现概率/配额/全局限量无事实源);⑤确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);⑥charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记);⑦顶层命名待定(奇物/收益均不妥,拟造词)——**代码 reward 词族已被 reward_pick/reward_node/reward_preview 占用,feature_* → reward_* 对齐待办不能照做** - naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.4 改名为「奇物」(v2.0 曾名「奇物」)(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。代码侧 `feature_*` 词族尚未随之换到 `curio_*`,属临时态,登记于 06-待办清单 + data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源类的种类配额与值)/ shop.tres(货架取舍) + open_questions: ①类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同,靠这条描述把"资源"从泛用词收回到本类定义内;②专长门票尚未入表(出现概率/配额/限购次数/保底阈值四参数均无事实源);③确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);④charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记,勿被上条盖掉);⑤断点存档键 5 个(bonus_deck / bonus_taken / bonus_pending / bonus_result / bonus_aux_carry)是否随存档版本迁移换名待裁 + naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」,v2.4 定名为「奇物」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。v2.5 第三类定名为「资源类」(用户拍板)。**代码侧三套词族均尚未对齐**:`feature_*` → `curio_*`(103 处)、`relic_*` → 机制类(162 处)、运行层 `bonus_*`(160 处),属临时态,登记于 06-待办清单,须在可跑冒烟批次收口 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] - name: adventure_table diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index c9079ad9..e06c5784 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -13,13 +13,13 @@ class_name AdventureTable extends Resource -## 概念指路:本表的属性提升类与资源与机会类,与 relics.tres 的机制类,同属一个对象—— +## 概念指路:本表的属性提升类与资源类,与 relics.tres 的机制类,同属一个对象—— ## 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 -## 它们是它的分类轴上的枚举(机制类 / 属性提升类 / 资源与机会类),不是三套系统; -## 本表承载属性提升类与资源与机会类的种类配额与件值。 +## 它们是它的分类轴上的枚举(机制类 / 属性提升类 / 资源类),不是三套系统; +## 本表承载属性提升类与资源类的种类配额与件值。 ## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」→「奇物」。 ## 常量与字段随之前缀 feature_*,**尚未**随顶层改名换到 reward_*——见 06-待办清单。 -## 分类轴三个枚举:属性提升类〔生命上限 / AC / 攻击〕;资源与机会类〔行动点上限 / +## 分类轴三个枚举:属性提升类〔生命上限 / AC / 攻击〕;资源类〔行动点上限 / ## 刷新次数 / 金币 / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 ## 类内异质性:金币与回复是即时兑付,不进持有集、不持续生效。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index 22a16413..879985ab 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -2,9 +2,9 @@ # Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、 # 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) -# 概念指路:本表的机制类(专长),与 adventure.tres 的属性提升类、资源与机会类,同属一个对象—— +# 概念指路:本表的机制类(专长),与 adventure.tres 的属性提升类、资源类,同属一个对象—— # 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 -# 它们是它分类轴上的枚举(机制类 / 属性提升类 / 资源与机会类),不是三套系统;本表承载「机制类」(专长 Feat)的逐项定义。 +# 它们是它分类轴上的枚举(机制类 / 属性提升类 / 资源类),不是三套系统;本表承载「机制类」(专长 Feat)的逐项定义。 # (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「机制类(专长)」; # 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 # 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奇物文档 2.1 节。) From 3c5515aec4d3ab2bd3c6d99f179f22d4db854b6e Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 06:02:21 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=A5=87=E7=89=A9=20v2.6=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=A0=B8=E5=BF=83=E5=BE=AA=E7=8E=AF=E5=9B=BE?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=A5=87=E7=89=A9=E4=B8=8D=E6=98=AF=E6=89=93?= =?UTF-8?q?=E4=B8=80=E5=9C=BA=E6=88=98=E6=96=97=E7=BB=99=E4=B8=80=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户纠错:原图把「关内 排雷推理 → 战斗结算 → 通关 → 得到一份奇物」 画成一条链,读起来就是每场战斗通关都给一份。 **错在哪**:把关内普通战斗的"打完"与关底 Boss 的"击败"混为一谈。 按 [冒险结构](冒险结构.md) 的定义,**通关一关 = 该关关底 Boss 被击杀** ——所以"击败 Boss"与"通过这一关"是**同一个时刻,不是一条链上的两步**。 用户原话点得准:"击败 boss 之后通过关卡,这跟打败 boss 是一个渠道。" 改法(五处,链条口径与渠道名一并统一): 1. **图改分支结构**:普通战斗节点 → 打完不给、往下走;奖励节点 / 商店 各自兑付;关底 Boss 击败 ═ 一次专长三选一 + 通关回血 → 进下一关 2. **显式口径"一关只兑付一次,不是一场战斗给一份"**——写在图下方 3. **2.1 节渠道名**:「终局前 Boss 击败后」→「关底 Boss 击败(即通过这一关)」, 并写明触发点就是关卡推进本身那一刻,不是"战斗结算之后再奖一次" 4. **文首引言加"兑付频率"条**(标为三条渠道的共同前提,先看那条); 交叉表渠道名、registry 的 acquisition 字段同步 5. 06-待办清单新增"兑付频率(用户纠错后写死)"条目,注明勿再改回链式 连带修掉一处 v2.4 遗留污染:2.1 节节点类型封闭枚举五种里的"奖励" 曾被批量替换误伤成"奇物"(节点类型里没有奇物这一类),已复原为 「战斗 / Boss / 奖励 / 恢复 / 商店」。 术语微调:「终局 Boss 不给」→「末关的 Boss 击败后不给」——前者读起来 像在讲一个叫"终局 Boss"的实体,实际是"最后一关的那个 Boss"。 数据层零变更;未 merge 回 master(本会话零测试)。 --- design/gdd/06-待办清单.md | 5 +++-- design/gdd/systems/冒险循环/奇物.md | 31 +++++++++++++++++++++-------- design/registry/entities.yaml | 2 +- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 62c359f4..183c5193 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -31,13 +31,14 @@ **用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— -| 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后 | +| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(末关不给) | |---|---|---|---| | 机制类(专长) | **门票形式** | **门票形式** | **直接给**(唯一直接渠道) | | 属性提升类 | 出 | 出(训练) | 不出现 | | 资源类 | 出 | 出(金币除外;**回复在内**) | 不出现 | -**Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(门票)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**终局 Boss 不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在终局之前的 Boss。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 +**Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(门票)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**末关的 Boss 击败后不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在还有下一关可去的那些关底 Boss 身上。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 +**兑付频率(2026-10-05 用户纠错后写死)**:这条渠道的触发点是**关底 Boss 被击败**,而按 [冒险结构](systems/冒险循环/冒险结构.md) 的定义,**打掉关底 Boss 恰好就等于"通过这一关"**——两者是同一个时刻,不是一条链上的两步。**奇物不是打一场战斗给一份**:关内普通战斗节点打完了什么也不给,一关之内奇物只兑付一次。(此前《奇物》文档的"核心循环位置"图把"战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来像每场战斗通关都给一份——已于 v2.6 修正为分支图并加此口径,勿再改回链式。) **门票归机制类,不归资源类**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 diff --git a/design/gdd/systems/冒险循环/奇物.md b/design/gdd/systems/冒险循环/奇物.md index 005b77ce..2cd0c468 100644 --- a/design/gdd/systems/冒险循环/奇物.md +++ b/design/gdd/systems/冒险循环/奇物.md @@ -5,10 +5,12 @@ > 它是一个概念,不是一套东西。下面有**两根互不相干的轴**: > > - **分类轴**回答"给的是什么"——三个枚举:机制类 / 属性提升类 / 资源类; -> - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败后。 +> - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败(即通过这一关)。 > > 一个奇物属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 > +> **兑付频率(先看这条,它是三条渠道的共同前提)**:奇物**不是打一场战斗给一份**。关内的普通战斗节点打完了什么也不给;一关之内奇物**只兑付一次**,触发点是**关底 Boss 被击败**——而按 [冒险结构](冒险结构.md) 的定义,打掉关底 Boss 恰好就等于"通过这一关",这两件事是同一个时刻,不是一条链上的两步。 +> > 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是奇物的唯一定义文档。 > > 数值纪律:本文件只写概念、取值域与指路;每件给多少、效果是什么一律不进正文,事实源是 `game/data/tables/relics.tres` 与 `game/data/tables/adventure.tres`。 @@ -35,11 +37,20 @@ ## 在核心循环中的位置 ``` -【关内】排雷推理 → 战斗结算 → 通关 ──┐ - ├─→ 得到一份奇物 ─→ 后续关卡带着它继续 - 奖励节点・商店・Boss 击败后 ┘ +一次冒险 = 若干关卡串联,每关 = 一条节点链 + 一个关底 Boss + + 关内普通战斗节点 ──▶ 打完不给奇物,继续往下走 + │ + ├─ 奖励节点 ──▶ 一次三选一(属性提升类 / 资源类,罕见门票) + ├─ 商店 ──▶ 花钱买(属性提升类 / 资源类,罕见门票) + │ + 关底 Boss 击败 ═══╗ ← 打掉关底 Boss 就是「通过这一关」,同一件事 + ╰──────────╬──▶ 一次专长三选一(机制类) + ╰──▶ 通关回血 ──▶ 进下一关,带着它继续 ``` +**关键:一关只兑付一次,不是一场战斗给一份。** 触发点是**关底 Boss 被击败**,而这恰好就等于"通过这一关"([冒险结构](冒险结构.md) 定义:通关一关 = 该关关底 Boss 被击杀)——**这两件事是同一个时刻,不是一条链上的两步**。关内普通战斗节点打完了什么也不给,直接往下走。 + 奇物处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 ## 核心规则 @@ -107,7 +118,7 @@ 三个渠道各只取走分类的一部分。这张表是奇物概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 -| 分类 \ 渠道 | 奖励节点 | 商店 | 终局前 Boss 击败后(见 2.1) | +| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(见 2.1) | |---|---|---|---| | **机制类**(专长) | 门票形式(见 2.2) | 门票形式(见 2.2) | **直接给**(唯一的直接渠道) | | **属性提升类** | 出 | 出(口径「训练」) | 不出现 | @@ -122,13 +133,15 @@ 两条的管辖范围不同:前者决定"这张表的格子填不填",后者决定"填了的格子里装不装得全"。 -#### 2.1 机制类的主渠道:终局前 Boss 击败后 +#### 2.1 机制类的主渠道:关底 Boss 击败(即通过这一关) 专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 -**终局 Boss 不给**:兑付只发生在**终局之前的 Boss** 身上——打赢最终 Boss 时冒险已经结束,没有后续关卡可消费,给了也无处生效。三关结构下,一局的确定性专长兑付次数由此确定(每个终局前 Boss 一次)。 +**这个渠道的触发点就是「关底 Boss 被击败」**——而按 [冒险结构](冒险结构.md) 的定义,打掉关底 Boss 恰好就等于"通过这一关"。所以这条渠道的全名是**关底 Boss 击败(即通过这一关)**:它不是"战斗结算之后再来一次奖励"的独立步骤,而**就是关卡推进本身那一刻**。关内的普通战斗节点打完了什么也不给;一关之内奇物只兑付这一次。 -**不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奇物 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 +**终局那关的 Boss 击败后不给**:兑付只发生在**还有下一关可去**的那些关底 Boss 身上——打赢最终 Boss 时冒险已经结束,没有后续关卡可消费,给了也无处生效。三关结构下,一局的确定性专长兑付次数由此确定(每个终局前 Boss 一次)。 + +**不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 #### 2.2 专长门票:非 Boss 渠道怎么给专长 @@ -313,5 +326,7 @@ | v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | | v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表机制类在两渠道由"不出现"改为"**门票形式**";门票归机制类(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | | v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | +| **v2.6** | 2026-10-05 | **修正核心循环位置图:奇物不是打一场战斗给一份**(用户纠错)。原图把"关内 排雷推理 → 战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来就是每场战斗通关都给一份——**错在把关内普通战斗的通关与关底 Boss 的通关混为一谈**。按 [冒险结构](冒险结构.md) 的定义,**通关一关 = 该关关底 Boss 被击杀**,所以"击败 Boss"与"通过这一关"是同一个时刻、不是一条链上的两步。改法:① 图改为分支结构(普通战斗节点→不给、往下走;关底 Boss 击败→专长三选一+通关回血);② **一关只兑付一次**写成显式口径;③ 2.1 节渠道名由"终局前 Boss 击败后"改为"关底 Boss 击败(即通过这一关)",并写明触发点就是关卡推进本身那一刻;④ 文首引言加"兑付频率"条,交叉表渠道名与 registry 同步;⑤ 连带修掉一处污染——节点类型封闭枚举五种里的"奖励"曾被 v2.4 批量替换误伤成"奇物"(节点类型里没有奇物这一类),已复原。 | + | **v2.5** | 2026-10-05 | **第三类定名「资源类」**(用户拍板,父节点定为「奇物」后解锁)。定名依据:行动点上限 / 刷新次数 / 金币 / 回复都是可以调动、可以花掉的余量。「资源」偏泛(能力资源、财富资源都叫资源),因此在 1.5 写死判据句——**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**,这一句是把泛用词收回本类定义的唯一凭据。**回复归属同时定案:留在资源类,不独立成第四类**——它与金币同为即时兑付、判据同源,拆出去第四类只剩两项且与本类判据重合。附带修复:1.5 段末与「### 2. 渠道轴」标题粘连(缺换行)。 | | **v2.4** | 2026-10-05 | **顶层由「奖励」改名为「奇物」(Wondrous Item)**。用户否决了「奖励」「收益」与全部自造词(进益/造化/机缘/遇获),要求回到 DND/西幻既有名词。定名依据:DMG 魔法物品九分类中的 Wondrous Item,官方中文译名即「奇物」,是专装不好归类但有奇效之物的兜底杂类——正好对应本概念下三个互不相干的分类。此前考虑过的 Treasure(宝物)因偏财物、装不下专长而落选;roguelike 品类惯例 Relic 因用户否决遗物落选。**代码词族定为 `curio_*`、`ADVENTURE_CURIO`**(`reward_*` 已被 `reward_pick` / `reward_node` / `reward_preview` 占用,不能对齐)。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 3f21506d..523aa068 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -584,7 +584,7 @@ entities: categories: 封闭三类 {机制类, 属性提升类, 资源类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**终局前** Boss 击败后(**唯一直接给的渠道**,不新增节点类型、挂 Boss 节点兑付面;终局 Boss 不给——无后续关卡可消费),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**关底 Boss 击败=通过这一关**(**唯一直接给的渠道**;不新增节点类型、挂 Boss 节点兑付面;末关的 Boss 击败后不给——无后续关卡可消费)。**兑付频率**:奇物不是打一场战斗给一份,关内普通战斗节点不给任何奇物,一关之内只兑付一次(奖励节点与商店同理,各节点各自兑付),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奇物;跨冒险跟着你走的是魔法道具**。奇物永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源类的种类配额与值)/ shop.tres(货架取舍) open_questions: ①类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同,靠这条描述把"资源"从泛用词收回到本类定义内;②专长门票尚未入表(出现概率/配额/限购次数/保底阈值四参数均无事实源);③确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);④charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记,勿被上条盖掉);⑤断点存档键 5 个(bonus_deck / bonus_taken / bonus_pending / bonus_result / bonus_aux_carry)是否随存档版本迁移换名待裁 From 483cf2a39bae6ec6445c7c9e96dd7515bcc4f9c2 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 06:15:01 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E5=A5=87=E7=89=A9=E6=89=B9=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B9=A6=20+=20=E7=BC=96=E5=85=A5=20roadmap=20?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=2015?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户令:概念层裁定已完成,代码与配置改动不做,整理成任务书编入迭代 15 作为该迭代的一个需求。任务书须满足 loop engineering 要求。 新增:design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md 按 roadmap §批次 loop 规范八件成文(缺件不开工): ① 目标与完成定义(7 条可验)② 现状事实(代码级,T0 复核) ③ 设计契约(11 条,6 条 🔴 停机级)④ 范围边界(含"收到即停"清单) ⑤ 任务卡 T0-T8(逐卡估时 ≈4.5d,两段切分预案,切分点=T3 出口) ⑥ 验证闸(轻闸/重闸 + **12 条批末专属验收断言** A1-A12) ⑦ 异常分级(含本批预判的 3 个 L3 高风险点) ⑧ 代拍板白名单 5 项 外加:待用户裁点 4 项(不占本批自裁范围)+ 附录**设计裁定链 v1.0→v2.6** (把 6 轮用户裁定的要点列全,供执行者回溯,不用回头翻 9 次提交) 三批内容:①三套旧词族对齐(feature_*→curio_* 103处/relic_*→feat_* 162处/ 运行层 bonus_*→curio_* 160处;**硬约束 reward_* 已被占用不可用**) ②三条渠道按分类分离(现共用 98 张池、三类混编)③两个新种类入池 (刷新次数 + 专长门票四口径)附带 shop.tres 补回复与 charge 补至 ≥4 件。 roadmap 新增迭代 15 行(M-4 里程碑表内),标注: - 与在途 M-4 各批(判式换代/全局变异/配比预设)**撞同一批文件** (adventure_table.gd / level_runner.gd / adventure.tres), **开工门 = 须确认不并行或用户明示插队**——这是本批最实际的调度约束 - 门 = 迭代 14 出口;估时 T0-T8≈4.5d 可两段切分 🔴 红线里最要紧的两条(都是本会话教训固化): - 兑付频率:奇物不是打一场战斗给一份,关底 Boss 击败=通过这一关是 同一个时刻;专长不得挂在"战斗结算后"(v2.6 用户纠错) - 两条轴互不决定:禁止"因为要进商店所以另立分类"这种反向推导 --- ...务书-奇物词族对齐与渠道分离批-2026-10-05.md | 243 ++++++++++++++++++ roadmap.md | 1 + 2 files changed, 244 insertions(+) create mode 100644 design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md diff --git a/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md b/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md new file mode 100644 index 00000000..6f0f921f --- /dev/null +++ b/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md @@ -0,0 +1,243 @@ +# 任务书:奇物概念收口与词族对齐批(迭代 15) + +- 日期:2026-10-05 +- 设计事实源:[奇物.md](../gdd/systems/冒险循环/奇物.md) v2.6(概念唯一定义,2026-10-05 用户逐轮裁定) +- 登记台账:[06-待办清单](../gdd/06-待办清单.md) 三条目(渠道分工目标态 / 资源类两个新种类入池 / 奇物命名统一后续) +- 实体登记:[entities.yaml](../registry/entities.yaml) `curio` 条目 +- 状态:**定稿待发令**——用户 2026-10-05 令:本批只改文档,代码与配置改动整理成任务书编入迭代 15 +- **loop 计划书八件对照**:①目标与完成定义=§一 ②现状事实(代码级,开工自行复核)=§二 ③设计契约(🔴 触碰=L3 停机)=§三 ④范围边界=§四 ⑤任务卡 T0..Tn=§五 ⑥验证闸=§六 ⑦异常分级=§七 ⑧代拍板白名单=§八 +- **本任务书已有约束**:范式为"设计契约先行、代码后跟"——概念已由用户逐轮裁定定稿(v1.0→v2.6 共 6 轮),本批不做二次设计,只做**落地对齐**。任何在执行中冒出的"要不要改设计"念头,一律记 06 不在本批解决 +- 数值全 provisional:本批只改标识符与结构,**不调任何平衡数值**;档位配额 70/25/3=98 是结构锚(schema validate 硬断言),本批零改动 + +--- + +## 一、目标与完成定义 + +一句话目标:把 v2.6 已定稿的「奇物」概念从**文档层**贯彻到**代码层与数据层**——三套旧词族(`feature_*` / `relic_*` / 运行层 `bonus_*`)全部对齐到统一词族,渠道分工与两个新种类入表,使代码与文档不再各说一套。 + +**为什么现在做**:用户 2026-10-05 的原始诉求是"这导致我们的代码实现和文档描述是分开的"。概念层已裁定完(6 轮),但代码层仍是三个旧词族 + 渠道未分离,**债已经欠了 9 次提交**。顶层已改名「奇物」而代码仍叫 `feature_*`,正是用户最初抱怨的"文档与代码分开"的临时态。 + +完成定义(逐条可验): + +1. **词族对齐完成**:`feature_*` → `curio_*`(103 处 / 7 文件)、`relic_*` → `curio_*` 或 `feat_*`(162 处 / 12 文件)、运行层 `bonus_*` → `curio_*`(160 处 / 8 文件)全部改完,`game/` 下 `grep -c "feature_\|relic_\|_bonus_\|pick_bonus\|BonusInteract\|BonusPick"` 归零(存档键 5 个除外,见 T2 裁点) +2. **渠道分工落地**:三条渠道按分类分离——关底 Boss 击败=通过这一关 → 只出机制类;奖励节点 / 商店 → 只出属性提升类 + 资源类,机制类在此只以门票形式出现;三渠道不再共用同一个池 +3. **两个新种类入表**:刷新次数、专长获取门票进入 `adventure.tres`,各自带全参数 +4. **商店货架补回复**:按默认原则,回复必须在商店货架内(现行缺) +5. **数据缺陷修复**:`relics.tres` 的 charge 标签补至 ≥4 件(档二要求同标签 ≥4,现仅 3 件,永远达不到) +6. **冒烟与三闸全绿**:批末 run_smoke 全量 + 三探针 + doc 三闸对基线**零新增** + 熵增闸 PASS +7. **断点存档往返幂等**:改词族不破存档——旧档能读、新档能续(若 T2 裁点选"换名+迁移",须验 v→v+1 往返) + +## 二、现状事实(代码级,T0 开工须自行复核) + +> 以下是 2026-10-05 读出的事实。开工时按 loop 规范 T0 复核,不以本节为准。 + +### 2.1 词族占用实况 + +| 词族 | 处数 | 文件数 | 主要落点 | +|---|---|---|---| +| `feature_*` | 103 | 7 | `adventure_table.gd` / `adventure.tres` / `adventure_runner.gd` / `level_runner.gd` / `config_db_cross_validator.gd` / `bonus_interact_controller.gd` / `smoke_all.gd` | +| `relic_*` | 162 | 12 | `relic_table.gd`(+`.uid`)/ `relics.tres` / `relics_engine.gd` / `config_db.gd` / `battle_orchestrator.gd` / `damage_controller.gd` / `action_economy.gd` / `level_runner.gd` / `battle_narrator.gd` / `adventure_runner.gd` 等 | +| 运行层 `bonus_*` | 160 | 8 | `_bonus_deck` / `_bonus_taken` / `pick_bonus` / `BonusInteractController` / `BonusPickOverlay` / `bonus_interact_controller.gd` / `level_autoplay.gd` / `breakpoint_resume_test.gd` 等 | + +**🔴 硬约束(不可撞车)**:`reward` 词族**已被占用**——`reward_pick`(rng 封闭流 scope)/ `reward_node`(`grant_aux_item` 的 context 字符串)/ `reward_preview`(道具效果 kind)。**统一词族不得使用 `reward_*`**,本批定为 `curio_*`(`treasure` / `trove` / `curio` / `haul` 零占用,2026-10-05 查证)。 + +### 2.2 封闭词表与结构锚(改动即触碰红线) + +- `AdventureTable.FEATURE_KINDS: Array[String]` = `["attack", "max_hp", "armor", "gp", "ap", "heal"]`——**封闭六项**。断点附随件与牌库剔除态依赖它,扩种类须走 schema + registry 同步修订 +- `AdventureTable.TIER_QUOTAS := {"common": 70, "rare": 25, "rarest": 3}`(合计 98)——**结构锚**,schema `validate()` 内有硬断言:"档位配额结构失锚……改总量须重裁"。本批**入新种类须占配额**,若配额总量不够,**只能在本批内重裁并说明**,不得调参绕过 +- `adventure.tres` 现有 22 个键与 schema 的 22 个 `@export` 一一对应(2026-10-05 脚本校验通过),改名须同步两侧 +- 节点类型是**封闭枚举五种**(战斗 / Boss / 奖励 / 恢复 / 商店)——本批**零扩类**(专长挂 Boss 节点兑付面) + +### 2.3 渠道与池的现状 + +- 现行**三渠道共用同一个 98 张固定配额令牌池**(普通 70 / 稀有 25 / 罕见 3),三类混编 +- 机制类(专长)只占稀有/罕见档,与属性大件混编;商店货架靠"零机制类挤掉一张普通卡"保底 +- 商店货架 = 池 ∖ {GP 袋}(`shop.tres` 的 `pool_shelf` 行族,现为 attack / max_hp / armor_class / ap 四项,**缺回复**) +- 奖励节点与通关三选一**共享同一池、同权重同上限**(`node-reward` v2.4) + +### 2.4 数据缺陷(独立于渠道结构,须单独修) + +- `relics.tres` 的 **charge 标签只有 3 件**,而档位激活要求同标签 ≥4 件——**charge 流派永远达不到档二**,即使获取次数无限 +- 一局确定性专长兑付次数 = 终局前 Boss 个数(三关 = 2 次),而档一阈值是同标签 ≥2——档一刚好够,档二(≥4)须靠门票补齐。**此项用户已定延后复裁**(触发=第四关内容批落地后实测),本批只登记不改 + +### 2.5 断点与存档键(5 个) + +`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`——为存档兼容沿用历史名。`adventure_runner.gd` 内同时有 `_node_bonus_pending`(奖励节点停点态)。**是否随存档版本迁移换名须本批裁**(见 T2)。 + +## 三、设计契约(违反即返工,🔴 触碰 = L3 停机) + +1. 🔴 **兑付频率不可改**:奇物**不是打一场战斗给一份**。关内普通战斗节点打完不给任何奇物;一关之内只兑付一次,触发点是**关底 Boss 被击败**——按 [冒险结构](../gdd/systems/冒险循环/冒险结构.md) 定义"通关一关 = 该关关底 Boss 被击杀",**这两件事是同一个时刻,不是一条链上的两步**。任何把专长挂到"战斗结算后"的实现即为 L3 +2. 🔴 **两条轴互不决定**:分类轴(给的是什么:机制类 / 属性提升类 / 资源类)与渠道轴(从哪来:奖励节点 / 商店 / 关底 Boss 击败)**不得互相推导**。禁止"因为它要进商店所以另立一分类"这类反向推导(= 06 已登记的"两轴缠回去") +3. 🔴 **Boss 渠道独占机制类**:关底 Boss 击败=通过这一关**只出机制类**,属性提升类与资源类在此不出现。这是渠道轴的定位决定,不是例外,不需另找理由。末关的 Boss 击败后不给(无后续关卡可消费) +4. 🔴 **专长门票四条口径不可改**:①**拿到即开、不可囤积**(不进持有集,选中/买下同一时刻开专长三选一);②**罕见只在概率、不在价格**(货架价与其他商品相当);③**一局限购一次**;④**计步保底**——连续 5 次三选一展示未出现 → 第 6 次必定出现(计数=**展示次数**,刷新后的重展计入,奖励节点与商店共享计数,触发后清零,限购用满后不再触发) +5. 🔴 **统一词族不得用 `reward_*`**(已被 `reward_pick` / `reward_node` / `reward_preview` 占用,见 §2.1) +6. 🔴 **档位配额结构锚不可绕过**:`TIER_QUOTAS` 的 70/25/3 有 validate 硬断言。改总量须重裁并留说明,不得调参绕过 +7. 🔴 **不新增节点类型**:`关卡节点地图` 的节点类型封闭枚举五种不变,机制类挂 Boss 节点兑付面 +8. 🔴 **魔法道具边界不位移**:奇物**当局清零、跨局带走的是魔法道具**(判据走生命周期,不走"带在身上")。本批任何改动不得让奇物进同调位,也不得让魔法道具进当局随机渠道 +9. 🔴 **层级纪律**:奇物只走当局随机渠道(奖励节点 / 商店 / Boss 兑付),不进元进度天赋树 +10. **本批不改平衡数值**:所有 `feature_value_*` / `feature_quota_*` 的**值零变更**。入新种类属结构改动(占配额),非调参 +11. **零战斗期新动词**:机制类表达全部经"扫雷决策 → 自动结算"间接生效,不新增手动闪避 / 主动施法 + +## 四、范围边界(以下均不在本批,收到即停、不顺手做) + +- **任何平衡数值的调参**——档位阈值、门票四参数的具体取值(概率 / 配额 / 限购次数 / 保底步数)、token 配额重裁方案。门票四参数本批只**建结构与字段**,取值走 provisional + 曲线调参批 +- **第四关内容**——用户已定"后续还会有第四关,到时候试完觉得配合太少再调整"。档二可达性复裁触发条件是第四关落地后实测 +- **charge 补件的内容设计**——本批只把 charge 补到 ≥4 件以打开档二通路,**补哪几件是内容裁决**,走独立内容批;本批若判断内容不可自决,则只做"档二对 charge 不可达"的显式登记(数据缺陷留痕),不硬补 +- **玩家可见面违规改法**(06 独立条目:内部分类禁写入玩家可见面 + 档位呈现三路待裁)——属呈现面设计裁决,须用户拍板,本批不碰 +- **教学引导相关**——用户 2026-10-04 裁改排 Beta +- **资源配比预设 / 判式换代 / 全局变异等 M-4 在途批**——与本批词族改名**撞同一批文件**(`adventure_table.gd` / `level_runner.gd` / `adventure.tres`),**须在 roadmap 排期上确认不与在途批并行**,本批开工门 = 相关在途批出口或用户明示插队 +- **存档键换名的迁移实现**(若 T2 裁"换名")——须与存档版本迁移单独裁定,本批可只做"代码侧改名 + 兼容读旧键",迁移写 v+1 归存档批 + +## 五、任务卡(T0..T8 逐卡估时) + +> **估时合计**(provisional,工作日)≈ 4.5 日,在 ≤3 日软时间盒边缘。**切分预案**:T0-T3 一段(词族对齐)≈ 2 日;T4-T8 二段(渠道分离 + 入表)≈ 2.5 日。切分点 = T3 出口。超限即按 loop 规范切迭代(L3 汇报)。 + +### T0 开工(≈0.3d) + +- 建 worktree(分支名建议 `curio-wordfamily-20261005`),**主工作区只作合并落点** +- 基线复读记档:冒烟全量数字 / 三探针(`ui_input_probe` 十一断言)/ doc 三闸 / MC 对拍基准 / `git status` 归属核对(并行遗留只标旗不碰) +- **复核 §2 全部事实**(词族处数、封闭词表、配额锚、存档键清单),与本节不符以实测为准并回写本任务书 +- 输出:worktree 名 + 基线数字 + 事实复核差异表 + +### T1 词族对齐第一批:`feature_*` → `curio_*`(≈0.7d) + +- 范围:`FEATURE_KINDS` → `CURIO_KINDS`、`feature_quota()` → `curio_quota()`、`feature_value()` → `curio_value()`、`feature_candidate_count` → `curio_candidate_count`、`feature_quota_{kind}_{tier}` → `curio_quota_*`、`feature_value_{kind}_{tier}` → `curio_value_*` +- 涉及:`adventure_table.gd` + `adventure.tres`(键名)+ 6 个引用文件 +- **值零变更**(只改键名与常量名) +- ⚠️ `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它 → 改名须与 `entities.yaml` 同批同步 +- 轻闸:冒烟全量绿 + 存档往返测试绿 + +### T2 词族对齐第二批:运行层 `bonus_*` + **存档键裁点**(≈0.7d) + +- 范围:`_bonus_deck` / `_bonus_taken` / `pick_bonus` / `BonusInteractController` / `BonusPickOverlay` / `bonus_interact_controller.gd` / `level_autoplay.gd` / `breakpoint_resume_test.gd` +- **文件改名须同步 Godot `.uid` 与 `.tscn` 引用**(非文本层,无法靠 grep 自证) +- **裁点(本任务书内唯一待裁,批内自裁可行但须台账留痕)**: + - 五个**断点存档键**(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)换不换名? + - 甲=**不换**(保存档兼容,仅改代码侧变量名)——推荐 + - 乙=换 + 兼容读旧键(旧键读入映射到新键,写出用新键) + - 丙=换 + 存档版本迁移到 v+1(**范围外**,本批不做) + - 建议甲或乙;若判断丙才对,回写本任务书并转 06 +- 轻闸:冒烟全量 + **断点存档往返测试绿** + `ui_click_probe`(触碰 presentation) + +### T3 词族对齐第三批:`relic_*` → 机制类(≈0.8d) + +- 范围:`relic_table.gd`(+`.uid`)/ `relics.tres` / `relics_engine.gd` / 及 9 个引用文件 +- 目标词族:`feat_*`(机制类 = 专长 Feat,**与顶层 `curio_*` 区分**:顶层是容器,内层分类各有各的词族——`curio_*` 是总称、`feat_*` 是机制类、`asi_*` 是属性提升类、`res_*` 是资源类) +- **文件名与 `class_name` 改名须同步 `.uid` 与 `.tscn`**(非文本层) +- **不新增节点类型**;MINE_HOOKS 红线校验逻辑零改动 +- 轻闸:冒烟全量 + 全探针(三) +- **T3 出口 = 切分点**:段落一(词族对齐)完成,出阶段报告 + +### T4 渠道分离:池的拆分(≈0.8d) + +- 目标:三个渠道各按分类白名单取候选,不再共用同一个 98 张池 + - 关底 Boss 击败 → 只出机制类 + - 奖励节点 / 商店 → 机制类**只以门票形式出现** + 属性提升类 + 资源类 +- ⚠️ **配额结构锚处置**:机制类抽离共享池后,属性与资源类的配额总量是否维持 98?**若须改 `TIER_QUOTAS` 总量,走重裁流程并在本任务书回写理由**(不得调参绕过 validate 硬断言) +- 商店货架 = 池 ∖ {GP 袋}(**计价物不自售**规则:凡以某渠道计价物为内容的奖励不进该渠道货架) +- 轻闸:冒烟全量 + 探针 + **MC 逐位对拍**(涉核心,必须) + +### T5 专长门票入表(≈0.7d) + +- 新增门票项到 `adventure.tres`,四参数全部建字段、**取值 provisional**: + - 出现概率 / 配额 / 限购次数(=1)/ 保底步数(=5 展示) +- 机制:**拿到即开、不可囤积**(不进持有集)→ 选中/买下同一时刻开专长三选一 +- **计步保底计数器**:计数=展示次数、刷新后重展计入、奖励节点与商店**共享**计数、触发后清零、限购用满后不触发 +- 稀有档处置须说明:门票进哪一档(罕见?),占多少配额 +- 轻闸:冒烟全量 + 探针 + MC 逐位对拍 + +### T6 刷新次数入表 + 商店补回复(≈0.5d) + +- `FEATURE_KINDS` 扩项须走 schema + registry 同步修订(封闭词表,红线 §3.6) +- ⚠️ **必须先划清边界**:既有「商店独立刷新机制」是**进店后的免费次数 + GP 刷新**(商店自身的服务),本项是**作为奇物授予的**重抽次数——**两者不是一回事**,入表前须在 registry 里把边界写死,防止后续混淆结算 +- 刷新次数的作用对象是**三选一界面而非角色**——不进加算区(§2.2 加算区四轴不含它) +- 补 `shop.tres` 的 `pool_shelf` 货架含回复(按默认原则:除已登记规则外,分类内成员都要在它该出现的渠道池子里) +- 轻闸:冒烟全量 + 探针 + MC 逐位对拍 + +### T7 档位通路与数据缺陷(≈0.4d) + +- 复核 charge 标签件数。若本批能自决则补至 ≥4 件;若内容不可自决,则**只做显式登记**("档二对 charge 不可达,数据缺陷留痕,转内容批")——**不硬补、不塞占位件** +- 档二可达性复裁:**本批只做静态推演与登记**,实测归第四关内容批(用户已定) +- 轻闸:冒烟全量 + +### T8 批末闸与人闸材料(≈0.4d) + +- 重闸:全量轻闸 + doc 三闸(对基线**零新增**)+ 熵增闸 + MC 逐位对拍(涉核心)+ 素材批机检断言(本批无素材则免) +- 人闸材料包(`design/qa/`):真人目检清单(重点 = 奇物列表呈现、档位激活反馈、门票弹出三选一面)+ 代拍板追认清单 + 三渠道兑付点目检指引(**专长兑付发生在关底 Boss 击败那一刻,不是战斗结算后**——这条要单列一个检查项) +- 收口五步:①`active.md` 快照 ②台账条目(查撞号)③里程碑移动更新 roadmap ④`stage.txt` 阶段变更 ⑤闸序列全绿留痕 + +## 六、验证闸 + +### 6.1 轻闸(每轮必跑,headless) + +- `run_smoke` 全量 +- `ui_input_probe`(十一断言) +- 触碰 presentation 时加跑 `ui_click_probe` + `ui_layout_probe`(T2 / T3 触碰) + +### 6.2 重闸(批末 T8) + +- 全量轻闸 + `doc_link` / `gdd_lint` / `doc_term` 三闸**对基线零新增** +- 熵增闸 PASS +- MC 逐位对拍(T4 / T5 / T6 涉核心,必须;T1-T3 纯改名可免但须在报告说明理由) + +### 6.3 本批专属验收断言(概念与代码一致性) + +| # | 断言 | 判据 | +|---|---|---| +| A1 | 词族归零 | `game/` 下 `feature_\|relic_\|_bonus_\|pick_bonus\|BonusInteract\|BonusPick` 命中数 = 0(存档键除外) | +| A2 | 禁词未用 | `game/` 下无 `reward_pick` / `reward_node` / `reward_preview` **新增**(既有三处不动) | +| A3 | 兑付频率正确 | 专长兑付点 = 关底 Boss 击败;**关内普通战斗节点不产奇物**(代码级断言 + 人闸目检双查) | +| A4 | 渠道分离 | 三渠道候选池按分类白名单过滤;机制类在非 Boss 渠道只以门票形态出现 | +| A5 | 门票拿到即开 | 门票不进持有集;选中/买下同帧开专长三选一(断言:持有关卡推进后仍无门票残留) | +| A6 | 保底计数 | 连续 5 次展示未出 → 第 6 次必出;刷新重展计入;限购用满后不触发 | +| A7 | 值零变更 | T1-T3 全部改名的键,值与基线**逐位相等** | +| A8 | 存档往返 | 旧断点可读、可续;存档键按 T2 裁点结论验证 | +| A9 | 池配额锚 | `TIER_QUOTAS` validate 硬断言绿;若改总量须有重裁说明 | +| A10 | 节点类型零扩类 | 节点类型仍为封闭枚举五种 | +| A11 | 玩家可见面无分类名 | 奇物列表 / 三选一面 / 弹窗**不出现**"机制类/属性提升类/资源类"字样(与 06 独立条目协同,本批只做**断言检查**,不改法) | +| A12 | 档二通路 | charge 标签 ≥4 件,或已有显式登记"不可达 + 转内容批" | + +## 七、异常分级(loop 规范) + +- **L1 自救**:一次重试(改名后编译错、`.uid` 未同步等机械错) +- **L2 记录继续**:连续 3 次同红灯升级,写台账继续推进 +- **L3 停机写报告**:触碰 §3 任一 🔴 红线 / 配额结构锚无法自洽 / 发现概念层自相矛盾 / MC 逐位对拍出现无法归因的漂移 + +**本批预判的 L3 高风险点**: +1. `relic_table.gd` 改名连带 `.uid` / `.tscn` 非文本层引用失败(T3) +2. 机制类抽离共享池后配额结构锚失锚,需重裁(T4) +3. 存档键换名导致旧断点读不出(T2) + +## 八、代拍板白名单(批内可自裁,台账留痕) + +1. **词族细分名的具体拼写**——`curio_*` / `feat_*` / `asi_*` / `res_*` 的下划线与单复数形式,在不撞既有占用(`reward_*` 等)的前提下自定 +2. **重命名时的中间态命名**——允许分步改(先改引用再改定义),只要批末归零 +3. **T2 存档键裁点的甲/乙选择**(不选丙) +4. **T7 charge 是否硬补**——若内容不可自决,走"只登记不硬补"(本任务书已授权此判断) +5. **provisional 取值的第一版数字**——门票四参数、刷新次数件值,取 working value 即可,**须标 provisional 且归曲线调参批**,不进终值 + +## 九、待用户裁点(不在本批自裁范围) + +| # | 待裁 | 阻塞面 | 建议 | +|---|---|---|---| +| C1 | 玩家可见面三处违规的改法 + 档位呈现三路 | 06 独立条目;A11 断言只检查不修 | 单独开呈现面批 | +| C2 | 第四关内容与档二可达性复裁 | T7 实测、charge 补件 | 第四关内容批后 | +| C3 | 门票四参数的终值 | T5 provisional 定稿 | 曲线调参批 + MC 采集 | +| C4 | 存档键换名的正式迁移 | T2 裁点丙案 | 存档版本迁移批 | + +--- + +## 附:本任务书引用的设计裁定链(v1.0 → v2.6,供执行者回溯) + +| 版本 | 用户裁定要点 | +|---|---| +| v1.0 | 立《特性》:一次冒险内角色自身得到的提升;命名统一(此前三个名字:流派件 / 数值件 / 本关强化) | +| v1.1 | 分类重构为「属性提升 ASI / 专长 Feat」;刷新次数作用对象是选择界面而非角色,作为例外登记 | +| v1.2 | 专长渠道落定=关底 Boss 击败后;**不新增节点类型**(挂 Boss 节点兑付面) | +| v2.0 | 顶层改名「奖励」;分类扩为三类;重构为**两根轴**(分类轴 × 渠道轴);边界判据改走**生命周期**(当局清零的是奖励,跨局带走的是魔法道具) | +| v2.1 | Boss 渠道只出专长(独占);终局 Boss 不给;金币不进商店写成「计价物不自售」**规则**而非特例 | +| v2.2 | 非 Boss 渠道给**门票**形式(拿到即开、不可囤积);渠道约束重构为**三层**(分类白名单 / 可计算谓词 / 显式例外清单);立**默认原则**——除已登记规则外分类内成员都要在池子里 | +| v2.3 | 门票四条口径细化(含**计步保底**:连续 5 次展示未出第 6 次必出,刷新重展计入);修正默认原则表述——**只管分类内部**,"渠道出哪些分类"是渠道轴自己的定位决定 | +| v2.4 | 顶层定名**「奇物」Wondrous Item**(DND 魔法物品九分类的兜底杂类);落选 Treasure(偏财物)/ Relic(用户否决)/ 全部自造词;**代码词族定为 `curio_*`**(`reward_*` 已被占用) | +| v2.5 | 第三类定名**「资源类」**(偏泛,故在 1.3 写死判据句);**回复留在资源类**不拆第四类 | +| v2.6 | **修正核心循环图**——奇物不是打一场战斗给一份;关底 Boss 击败=通过这一关是同一时刻;兑付频率写进文首 / 2.1 / 待办 / registry | diff --git a/roadmap.md b/roadmap.md index 67eb7fac..3b92ba52 100644 --- a/roadmap.md +++ b/roadmap.md @@ -60,6 +60,7 @@ | 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书=`design/research/任务书-双层BD实施批-2026-10-03.md`(已定稿)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) | | 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) | | 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告=`design/research/方案-挖掘风险不等式修订-2026-10-04.md` §九),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书=`design/research/任务书-全局作用域变异首发批-2026-10-04.md`(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批(A4,2026-10-04 用户令编入本迭代——提案八裁全落,裁决事实源=design/research/提案-冒险前资源配比预设-2026-10-04.md §八§九§十)**:玩家冒险开始前预设格面九型资源分布(预设分布不预设落位,装板摇号定落位)——预算=组合制(总量挪点·九型正向权重总和恒 77+每型上下限包络+容量随营地解锁渐进;gp 首发不可调〔包络 (2,2)〕/预设档 3 套/下限>0);合成序=表值→玩家配比差值→包络钳制→图级变异偏斜→同调硬币偏置(包络只管玩家差值——**序位在②③之后**,三者共用摇号投影点);注入=差值向量 ΣΔ=0 关态逐位零扰动;柜台=奖励格图鉴逐型商品(每型可调权一件);冒险开始锁档中途不可换;包络宽度随容量分级放宽;验收=默认分布锚+极端构筑护栏带。容量定价与包络数值 provisional(包络数值须待②号新当量账+真人读数双锚校准);行动经济对账按包络复算(总量恒 77 只余分布位移变量)。**任务书已起草**=design/research/任务书-冒险前资源配比预设批-2026-10-04.md(T0-T8≈6.0d,两段切分预案在册〔段一机制 T0-T4+T6≈3d/段二界面闸 T5+T7+T8≈3d〕;开工门=②③号卡出口;零新拍板点,provisional 归出口追认;停机点 S1-S3 在册)。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)+配比预设批 A4 T0-T8≈6.0d(两段切分可拆;开工门=②③出口;独立 worktree 合并) | +| 迭代 15 | **奇物概念收口与词族对齐批(2026-10-05 用户令编入)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.6,6 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出机制类;奖励节点/商店→属性提升类+资源类、机制类在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.6,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 迭代 14 出口 | T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) | ## 执行纪律(2026-09-27 用户立规) From b6b43ebc2f045b5f4fca6cc9d8bba9fcd7a1358c Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 06:42:48 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=A5=87=E7=89=A9=20v2.7=EF=BC=9A?= =?UTF-8?q?=E4=B8=89=E4=B8=AA=E5=AD=90=E8=8A=82=E7=82=B9=E6=AD=A3=E5=BC=8F?= =?UTF-8?q?=E5=AE=9A=E5=90=8D=EF=BC=88=E4=B8=93=E9=95=BF=20/=20=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E5=80=BC=E6=8F=90=E5=8D=87=20/=20=E8=B5=84=E6=BA=90?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户指出缺口:父节点有专名,子节点只有描述没有专名。理由站得住——帮助 / 百科 / 成就页一定会把分类露给玩家(「首次集齐 4 件专长」「三件属性值提升」), 效果描述里的指代也需要名字;卡面不带分类是**呈现面规则**,与命名是两件事。 定名:**专长(Feat)/ 属性值提升(ASI)/ 资源**——去掉「类」字后缀。 - 前两个是 DND 官方中文,且与用户 v1.1 原话一致(当时原话就是 「属性提升(ASI)」与「专长」,v1.1 落文时被加了后缀而退化成描述) - 「机制类」这个叫法另有硬伤:28 个成员里没一件是"机制",实际是 "在结算挂点上改一条规则",读者会误解为游戏机制 - 「资源」虽偏泛,但 1.3 已有判据句托底,且是用户自己的裁定 新增 1.6 节「三层结构与命名」——用户拍板的玩家可见三层: 一层 奇物(总称)/二层 专长·属性值提升·资源/三层 具体单件 明确写成规矩:**命名归本节,呈现归 battle.md / node-reward.md 裁决**, 并记明代码侧四套词族对应(curio_* / feat_* / asi_* / res_*)。 连带修掉批量替换撞出的七处自撞(专长(专长)、专长 = 专长、资源(资源))、 1.1 节标题的「专长:专长」、1.5 节残留的「命名待定」与旧括注、 02-系统清单文档树行的重嵌套。另把五处「这一类/这类」改为专名指代—— 专名定下后仍用「这一类」指代会让读者不知道在说哪个。 同步:entities.yaml(categories 补专名与定名依据、新增 hierarchy 字段、 naming_note 记 v2.7)、06-待办清单、02-系统清单 v1.9、任务书 T3 词族目标 (顶层 curio_* 与内层 feat_* 分属两套词族)、两个 schema 概念指路注释。 数据层零变更;未 merge 回 master(本会话零测试)。 --- design/gdd/02-系统清单.md | 9 +- design/gdd/06-待办清单.md | 26 ++-- design/gdd/systems/冒险循环/奇物.md | 111 +++++++++++------- design/registry/entities.yaml | 19 +-- ...务书-奇物词族对齐与渠道分离批-2026-10-05.md | 32 ++--- game/data/schemas/adventure_table.gd | 8 +- game/data/schemas/relic_table.gd | 8 +- 7 files changed, 118 insertions(+), 95 deletions(-) diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index b160720f..cfc58e4f 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,7 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | -| `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(机制类 / 属性提升类 / 资源类三个枚举 × 奖励节点·商店·Boss 击败后三条渠道) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | +| `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(三个分类:专长 / 属性值提升 / 资源 × 三条渠道:奖励节点 / 商店 / 关底 Boss 击败) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | ### 跨局循环(`systems/跨局循环/`) @@ -130,8 +130,9 @@ | v1.2 | 2026-10-03 | R3 清账批(gdd_lint 分域随批):四处状态单元格日期批注迁出——敌人系统行事件见敌人系统.md 版本历史 v0.5(技能池批);元进度行见本表 v0.8;camp/shop 行=两文 v1.0 落文(2026-09-30 三裁决执行批);语义零变更 | | v1.3 | 2026-10-05 | 立《特性》:一次冒险内角色自身得到的提升——此前按内部分类被叫成三个名字(规则类称"流派件"、属性类称"数值件"、界面称"本关强化"),现收敛为一个对象的两种形态枚举;文档树冒险循环补行 + 命名对照表补 `ADVENTURE_FEATURE` 行 | | v1.4 | 2026-10-05 | 《特性》v1.1 分类重构:两类由"规则改写型 / 属性加成型"改为"属性提升(ASI)/ 专长(Feat)",属性提升内部再分纯属性组与特殊组;获取途径由两口共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店)+罕见旁路"专长获取" | -| v1.5 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(机制类 / 属性提升类 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | +| v1.5 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(专长 / 属性值提升 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | | v1.6 | 2026-10-05 | 《奖励》v2.1 交叉表收口:Boss 渠道只出专长(终局 Boss 不给),另两类在此不出现;新增「计价物不自售」规则处理金币不进商店——不拆第四个分类、不开特例,而是两轴交叉处的一条约束 | -| v1.7 | 2026-10-05 | 《奖励》v2.2:机制类在非 Boss 渠道改为「专长获取」门票形式(不直接给专长);渠道约束重构为三层(分类白名单/可计算谓词/显式例外清单),并承认「计价物不自售」形式上是白名单外的一道过滤、与死特判的区别在可计算;立默认原则——除已登记规则外分类内的都要在池子里,据此回复应在商店内(现行货架缺它,须补) | -| v1.8 | 2026-10-05 | 《奇物》v2.5:第三类定名「资源类」(资源偏泛,故在命名出处节写死判据句——给的是可消耗或可重掷的余量,不是属性永久抬升);回复归属定案留在本类不拆第四类;修复 1.5 段末与渠道轴标题粘连 | +| v1.7 | 2026-10-05 | 《奖励》v2.2:专长在非 Boss 渠道改为「专长获取」门票形式(不直接给专长);渠道约束重构为三层(分类白名单/可计算谓词/显式例外清单),并承认「计价物不自售」形式上是白名单外的一道过滤、与死特判的区别在可计算;立默认原则——除已登记规则外分类内的都要在池子里,据此回复应在商店内(现行货架缺它,须补) | +| v1.8 | 2026-10-05 | 《奇物》v2.5:第三类定名「资源」(资源偏泛,故在命名出处节写死判据句——给的是可消耗或可重掷的余量,不是属性永久抬升);回复归属定案留在本类不拆第四类;修复 1.5 段末与渠道轴标题粘连 | +| v1.9 | 2026-10-05 | 《奇物》v2.7 三个子节点正式定名:专长(Feat)/ 属性值提升(ASI)/ 资源——去「类」字后缀,此前是描述式叫法不是专名;新增 1.6 节「三层结构与命名」,定玩家可见的三层(奇物 / 三个分类 / 具体单件),并明确命名与呈现是两件事 | | v1.8 | 2026-10-05 | 《奖励》改名为《奇物》并升 v2.4:顶层定名 Wondrous Item(DND 魔法物品九分类中的兜底杂类,官方中文译名「奇物」)。文档树冒险循环行改名;命名对照表 `ADVENTURE_REWARD` → `ADVENTURE_CURIO`(**不用 `reward_*`**——`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用该词族) | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 183c5193..ad8d320e 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -27,28 +27,28 @@ #### 冒险 BD 各分类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**机制类**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性提升类**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源类**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),机制类只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**专长**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性值提升**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),专长只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 **用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— | 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(末关不给) | |---|---|---|---| -| 机制类(专长) | **门票形式** | **门票形式** | **直接给**(唯一直接渠道) | -| 属性提升类 | 出 | 出(训练) | 不出现 | -| 资源类 | 出 | 出(金币除外;**回复在内**) | 不出现 | +| 专长 | **门票形式** | **门票形式** | **直接给**(唯一直接渠道) | +| 属性值提升 | 出 | 出(训练) | 不出现 | +| 资源 | 出 | 出(金币除外;**回复在内**) | 不出现 | **Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(门票)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**末关的 Boss 击败后不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在还有下一关可去的那些关底 Boss 身上。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 **兑付频率(2026-10-05 用户纠错后写死)**:这条渠道的触发点是**关底 Boss 被击败**,而按 [冒险结构](systems/冒险循环/冒险结构.md) 的定义,**打掉关底 Boss 恰好就等于"通过这一关"**——两者是同一个时刻,不是一条链上的两步。**奇物不是打一场战斗给一份**:关内普通战斗节点打完了什么也不给,一关之内奇物只兑付一次。(此前《奇物》文档的"核心循环位置"图把"战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来像每场战斗通关都给一份——已于 v2.6 修正为分支图并加此口径,勿再改回链式。) -**门票归机制类,不归资源类**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 +**门票归专长,不归资源**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 **门票机制四条(用户 2026-10-05 定)**:① **拿到即开、不可囤积**——不进持有集,选中或买下同一时刻就开专长三选一(可囤积会让玩家把关键决策无限推迟,且把持有物语义从后门放回来;"道具"只是卡面表现)。② **罕见只在概率,不在价格**——货架价与其他商品相当,不靠高价劝退。③ **一局限购一次**(现行口径)。④ **计步保底**——连续 5 次三选一展示未出现门票,第 6 次展示必定出现;计数对象=**展示次数**(刷新后的重新展示计入,用户明定含刷新),计数范围=奖励节点与商店**共享**,触发后清零,**限购用满后保底不再触发**。 **渠道定位 vs 默认原则(两句,别混)**:**渠道出哪些分类,是渠道轴自己的定位决定,不是例外**——Boss 渠道只出专长,另两类"不出现"是它的同义表述,不需另外找理由(v2.2 曾把它误当成缺理由的缺格,v2.3 修正)。**默认原则只管分类内部**:一个渠道一旦确定要出某个分类,该分类的成员就都要在它的池子里,缺席须有已登记的规则。 -原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:机制类挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 +原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:专长挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 -**gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源类(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 +**gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 **渠道约束分三层(v2.2,用户质疑后重构)**:用户问"计价物不自售不就是特判吗"。**诚实结论:形式上是的**——它确实是在分类白名单之外加的一道过滤,不是从分类推出来的。但和死特判有实质区别: @@ -62,11 +62,11 @@ 三方案代价并列(不藏折中):甲=GP 单独立第四个分类(例外 0,但用渠道轴切分类轴、两轴缠回、一项一类失衡);**乙=可计算谓词(现行,1 条谓词)**;丙=死特判清单(1 条记录,靠记忆维护)。 -**在册约束就两条**:① 金币不进商店(二层·谓词,理由=计价物不自售);② 机制类在非 Boss 渠道只给门票(一层·分类自身形态,理由=防用钱定点买构筑)。 +**在册约束就两条**:① 金币不进商店(二层·谓词,理由=计价物不自售);② 专长在非 Boss 渠道只给门票(一层·分类自身形态,理由=防用钱定点买构筑)。 **回复应在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则它应当在商店出现。现行 `shop.tres` 货架只有 attack / max_hp / armor / ap 四项,**现状与表格不对齐,须在实施批补上**。 -**待拍板/待观察两项**:① ~~资源类的命名~~ 与 ~~回复是否属该类~~ **已定(v2.5)=资源类,回复留在其中不拆第四类**(它与金币同为即时兑付、判据同源;拆出去第四类只剩两项)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加门票最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 +**待拍板/待观察两项**:① ~~资源的命名~~ 与 ~~回复是否属该类~~ **已定(v2.5)=资源,回复留在其中不拆第四类**(它与金币同为即时兑付、判据同源;拆出去第四类只剩两项)。② **专长门票尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加门票最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 ④ **charge 标签件数不足(数据缺陷,独立登记,勿被上条盖掉)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷。 ⑤ ~~顶层命名待定~~ **已定(v2.4)=「奇物」Wondrous Item**:DND 魔法物品九分类中的兜底杂类,官方中文译名即「奇物」,专装"不好归类但有奇效之物"——正好对应三个互不相干的分类。落选:Treasure(偏财物,装不下专长)、Relic(品类惯例,用户否决「遗物」)、全部自造词(进益/造化/机缘/遇获)。**代码词族随之定为 `curio_*` / `ADVENTURE_CURIO`**——原计划的 `feature_* → reward_*` 对齐**作废**:`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用 reward 词族,照做会撞车。 @@ -74,9 +74,9 @@ **状态**:分工已定,**实施待排批**;两项待拍板/待观察(2026-10-05 v2.1 更新) -#### 资源类两个新种类入池——刷新次数、专长获取(2026-10-05 立) +#### 资源两个新种类入池——刷新次数、专长获取(2026-10-05 立) -**现状**:[奇物](systems/冒险循环/奇物.md) v2.0 立了资源类四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 +**现状**:[奇物](systems/冒险循环/奇物.md) v2.0 立了资源四项,其中**行动点上限**已在池(罕见档)、**金币与回复**已在池,**刷新次数与专长获取两项尚未入表**。注意与既有「商店独立刷新机制」条分清:那条是进店后的免费次数 + GP 刷新(商店自身的服务),本条指的是**作为奖励授予的**重抽次数,两者不是一回事,入池前须先划清边界。 **连带约束**:`FEATURE_KINDS` 词表封闭(断点附随件与牌库剔除态依赖它),扩种类须走 `adventure_table.gd` + registry 同步修订;档位配额是**结构锚**(普通 70 / 稀有 25 / 罕见 3 = 98 张,入 schema validate 硬断言),新种类入池要占配额——**改总量须重裁而非调参**。专长获取须带全局限量(一局内可获得次数上限)。 @@ -86,7 +86,7 @@ #### 内部分类禁写入玩家可见面——奇物呈现三处违规待改(2026-10-04 用户立意登记) -**现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项机制类奖励的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 +**现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项专长奖励的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 **连带裁点**:档位激活(同标签 2 件档一/4 件档二)若完全不呈现,玩家只能靠悟——三路待裁:甲=纯隐藏、机制照跑(以撒套装式,最贴用户「流派是玩家挖掘出来的」原则);乙=档位达成那一刻给一次性风味反馈、不点破流派名;丙=连档位机制一起退役。 @@ -98,7 +98,7 @@ **现状**:概念已统一为「奇物」(2026-10-05 v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md))。已完成三件——① 定义文档落位(`design/gdd/systems/冒险循环/奇物.md`);② 称谓统一(代码注释与玩家可见文案,94 处+design/ 侧随改名批同步);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 `feature_*` 词族,112 处,值零变更)。 -**未完四件**:⓪ **`feature_*` 词族随顶层改名再换到 `curio_*`**(2026-10-05 v2.0 新增、v2.4 改目标词族)——`FEATURE_KINDS` → `CURIO_KINDS` / `feature_quota()` → `curio_quota()` / `feature_value()` → `curio_value()` / `feature_candidate_count` → `curio_candidate_count` / `feature_quota_*` / `feature_value_*`,涉及 `adventure_table.gd` + `adventure.tres` 键名 + registry。**注意两点**:其一,**目标词族是 `curio_*` 不是 `reward_*`**——`reward_pick`(rng 封闭流 scope)/ `reward_node`(`grant_aux_item` context)/ `reward_preview`(道具 kind)已占用 reward 词族,照 `reward_*` 对齐会撞车;其二,`adventure.tres` 的键名是存档外的表数据,换名只动键不减值,但 `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它,须走本表 + registry 同步修订。① 机制类那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 +**未完四件**:⓪ **`feature_*` 词族随顶层改名再换到 `curio_*`**(2026-10-05 v2.0 新增、v2.4 改目标词族)——`FEATURE_KINDS` → `CURIO_KINDS` / `feature_quota()` → `curio_quota()` / `feature_value()` → `curio_value()` / `feature_candidate_count` → `curio_candidate_count` / `feature_quota_*` / `feature_value_*`,涉及 `adventure_table.gd` + `adventure.tres` 键名 + registry。**注意两点**:其一,**目标词族是 `curio_*` 不是 `reward_*`**——`reward_pick`(rng 封闭流 scope)/ `reward_node`(`grant_aux_item` context)/ `reward_preview`(道具 kind)已占用 reward 词族,照 `reward_*` 对齐会撞车;其二,`adventure.tres` 的键名是存档外的表数据,换名只动键不减值,但 `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它,须走本表 + registry 同步修订。① 专长那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 **次序建议**:⓪ 与 ① 同为"词族对不齐",可同批;② 涉及运行层最广,单批;③ 须与存档版本迁移一起裁。**顶层已改名而代码仍是 `feature_*`,属"文档与代码分开"的临时态**,应在下一个可跑冒烟的批次内收口。 diff --git a/design/gdd/systems/冒险循环/奇物.md b/design/gdd/systems/冒险循环/奇物.md index 2cd0c468..85717557 100644 --- a/design/gdd/systems/冒险循环/奇物.md +++ b/design/gdd/systems/冒险循环/奇物.md @@ -4,7 +4,7 @@ > > 它是一个概念,不是一套东西。下面有**两根互不相干的轴**: > -> - **分类轴**回答"给的是什么"——三个枚举:机制类 / 属性提升类 / 资源类; +> - **分类轴**回答"给的是什么"——三个枚举:专长 / 属性值提升 / 资源; > - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败(即通过这一关)。 > > 一个奇物属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 @@ -41,11 +41,11 @@ 关内普通战斗节点 ──▶ 打完不给奇物,继续往下走 │ - ├─ 奖励节点 ──▶ 一次三选一(属性提升类 / 资源类,罕见门票) - ├─ 商店 ──▶ 花钱买(属性提升类 / 资源类,罕见门票) + ├─ 奖励节点 ──▶ 一次三选一(属性值提升 / 资源,罕见门票) + ├─ 商店 ──▶ 花钱买(属性值提升 / 资源,罕见门票) │ 关底 Boss 击败 ═══╗ ← 打掉关底 Boss 就是「通过这一关」,同一件事 - ╰──────────╬──▶ 一次专长三选一(机制类) + ╰──────────╬──▶ 一次专长三选一(专长) ╰──▶ 通关回血 ──▶ 进下一关,带着它继续 ``` @@ -57,25 +57,25 @@ ### 1. 分类轴:三个枚举 -奇物只有一个名词;需要区分时才说它属于哪个分类,不给分类另起名字。 +奇物只有一个名词,但它下面分三类。**这三类各有自己的专名,不是描述**——文档正文、代码词族、帮助与百科页面都用这三个词指代它们。 | 分类 | 它给的是什么 | 落点 | 事实源 | |---|---|---|---| -| **机制类**(专长 Feat) | 给规则。在结算管线某个挂点上给自己加一条规则;同一标签的持有件数达阈值时质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | -| **属性提升类**(ASI) | 给数字。抬高角色某项战斗属性的基础值 | 冒险加算区的生命上限 / AC / 攻击三轴 | `adventure.tres`(种类配额与值) | -| **资源类** | 给"可用的量"。不抬高战斗属性,也不改规则,而是扩充你能调动的余量与机会 | 行动经济、三选一界面、局内钱包;**不进加算区、多数不进持有集** | `adventure.tres`(种类配额与值) | +| **专长**(Feat) | 给规则。在结算管线某个挂点上给自己加一条规则;同一标签的持有件数达阈值时质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | +| **属性值提升**(ASI) | 给数字。抬高角色某项战斗属性的基础值 | 冒险加算区的生命上限 / AC / 攻击三轴 | `adventure.tres`(种类配额与值) | +| **资源** | 给"可用的量"。不抬高战斗属性,也不改规则,而是扩充你能调动的余量与机会 | 行动经济、三选一界面、局内钱包;**不进加算区、多数不进持有集** | `adventure.tres`(种类配额与值) | 三类的共性:都在当局获得、都在当局消费完或随冒险收束清零;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 -#### 1.1 机制类:专长 +#### 1.1 专长:规则改写 专长改的是规则而不是数字——它给自己加一条"在某种条件下,本来不会发生的事现在会发生"的规则。它不是任何一条属性轴的延伸,玩家也无法用"加了多少"来衡量它。 专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。这是它和另两类最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 -**专长门票也归这一类**:非 Boss 渠道不直接给专长,而是给一张名为「专长获取」的门票——拿到后立刻开一次专长 N 选一。它给的是"一件你以前不会的事"(只是把选择推迟到一次三选一),按 1.4 的判据归机制类,不归资源类。详见 2.2。 +**专长门票也归专长**:非 Boss 渠道不直接给专长,而是给一张名为「专长获取」的门票——拿到后立刻开一次专长 N 选一。它给的是"一件你以前不会的事"(只是把选择推迟到一次三选一),按 1.4 的判据归专长,不归资源。详见 2.2。 -#### 1.2 属性提升类:纯属性三项 +#### 1.2 属性值提升:纯属性三项 三项,各改一条战斗属性轴: @@ -87,9 +87,9 @@ 三项都直接进冒险加算区,跨关携带且关间不清零。这一类是封闭的:只有这三项,多一项就要走文档修订。 -#### 1.3 资源类:四项 +#### 1.3 资源:四项 -这类装的是"不抬高战斗属性、也不改规则,但让你更有余地"的东西: +资源这一类装的是"不抬高战斗属性、也不改规则,但让你更有余地"的东西: | 项 | 给什么 | 备注 | |---|---|---| @@ -98,21 +98,40 @@ | 金币(GP) | 局内钱包进账 | 进钱包即花掉,不进持有集、不持续生效;**不进商店**(计价物不自售,见 2.4) | | 回复 | 当即回血 | 即时兑付,不进持有集、不持续生效;**在商店内**(见 2.4 的默认原则) | -**这类为什么单独存在**:它的成员不满足"抬高战斗属性"(那归属性提升类),也不满足"改写规则"(那归机制类),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 +**资源为什么单独成一类**:它的成员不满足"抬高战斗属性"(那归属性值提升),也不满足"改写规则"(那归专长),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 -**判据句("资源"这个词太泛,这句是唯一的收口凭据)**:这一类给的是**可以调动、可以花掉的余量**,不是角色基础属性的永久抬升。"资源"是常用词,能力资源、财富资源都叫资源——所以判据必须写死:拿不准一项该归哪类时,问它**会不会进角色自己的属性数值**。会进的归属性提升类,不会进、而是变成你手里多出来的次数或多出来的钱的,归资源类。 +**判据句("资源"这个词太泛,这句是唯一的收口凭据)**:资源给的是**可以调动、可以花掉的余量**,不是角色基础属性的永久抬升。"资源"是常用词,能力资源、财富资源都叫资源——所以判据必须写死:拿不准一项该归哪类时,问它**会不会进角色自己的属性数值**。会进的归属性值提升,不会进、而是变成你手里多出来的次数或多出来的钱的,归资源。 -**这类内部的异质性(要诚实登记)**:金币与回复是**即时兑付**——拿到就消失,不进持有集,也没有"持有→生效→清零"的过程;行动点上限与刷新次数则进持有账本、当局持续有效。它们被归在同一类是因为"给的是余量"这个共同性质,不是因为生命周期相同。这条异质性在此显式登记,防止后续把金币当成会持续生效的东西去结算。 +**资源类内部的异质性(要诚实登记)**:金币与回复是**即时兑付**——拿到就消失,不进持有集,也没有"持有→生效→清零"的过程;行动点上限与刷新次数则进持有账本、当局持续有效。它们被归在同一类是因为"给的是余量"这个共同性质,不是因为生命周期相同。这条异质性在此显式登记,防止后续把金币当成会持续生效的东西去结算。 #### 1.4 分类判据 -**给规则的是机制类,给数字的是属性提升类,给余量的是资源类。** +**给规则的是专长,给数字的是属性值提升,给余量的是资源。** -拿不准的项按这条判:去掉它之后,角色是"某件以前不会的事做不到了"(机制类)、"某个数字少了一截"(属性提升类)、还是"能调动的余地变小了"(资源类)。 +拿不准的项按这条判:去掉它之后,角色是"某件以前不会的事做不到了"(专长)、"某个数字少了一截"(属性值提升)、还是"能调动的余地变小了"(资源)。 #### 1.5 命名出处 -机制类与属性提升类都取自 DND 规则书的既有名词:专长对应 Feat,属性提升对应 Ability Score Improvement(ASI)。**顶层「奇物」取自 DND 魔法物品的九分类之一 Wondrous Item——官方中文译名就是「奇物」,是那个专门装不好归类但有奇效的东西的兜底杂类。** 用它做顶层名的理由:地下城里挖到的、商店里能买到的、能把你变强的、又确实贵重的东西,在 DND 里没有别的总称,只有 Treasure 和 Wondrous Item 两个候选,而 Treasure 偏向财物,装不下专长这种你会了件以前不会的事。奇物天生是杂类兜底,正好对应本概念下三个互不相干的分类(规则 / 数字 / 余量)——它们本来就没有共同点,能拢在一起的只有一个不好归类但有用的名字。**资源类取"资源"这个常用词**(用户 2026-10-05 定)——行动点上限、刷新次数、金币、回复都是可以调动、可以花掉的余量。它确实偏泛(能力资源、财富资源都叫资源),所以这一类的判据句必须写死:**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**——这一句是把"资源"从泛用词收回到本类定义里的唯一凭据,不能省。玩家可见文案只写效果,不出现任何分类名。 +专长与属性值提升都取自 DND 规则书的既有名词:专长对应 Feat,属性值提升对应 Ability Score Improvement(ASI)。**顶层「奇物」取自 DND 魔法物品的九分类之一 Wondrous Item——官方中文译名就是「奇物」,是那个专门装不好归类但有奇效的东西的兜底杂类。** 用它做顶层名的理由:地下城里挖到的、商店里能买到的、能把你变强的、又确实贵重的东西,在 DND 里没有别的总称,只有 Treasure 和 Wondrous Item 两个候选,而 Treasure 偏向财物,装不下专长这种你会了件以前不会的事。奇物天生是杂类兜底,正好对应本概念下三个互不相干的分类(专长改规则 / 属性值提升改数字 / 资源给余量)——它们本来就没有共同点,能拢在一起的只有一个不好归类但有用的名字。**资源取"资源"这个常用词**(用户 2026-10-05 定)——行动点上限、刷新次数、金币、回复都是可以调动、可以花掉的余量。它确实偏泛(能力资源、财富资源都叫资源),所以这一类的判据句必须写死:**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**——这一句是把"资源"从泛用词收回到本类定义里的唯一凭据,不能省。**三个分类的专名在 v2.7 去掉了「类」字后缀**——此前写作「机制类 / 属性提升类 / 资源类」,那是描述不是专名;去掉后缀后三个词各自都能独立成词、与 DND 官方中文一致,理由与逐条依据见 1.6 节。玩家可见文案只写效果,不出现任何分类名。 + +### 1.6 三层结构与命名(本概念的完整层级) + +奇物这个概念只有三层,任何一处提到它都属于其中一层: + +| 层 | 名称 | 例子 | 谁看得到 | +|---|---|---|---| +| 一层 总称 | **奇物**(Wondrous Item) | 「这一局你捞到的全部奇物」 | 全部玩家可见面 | +| 二层 分类 | **专长** / **属性值提升** / **资源** | 「这四件是属性值提升」 | 帮百科与成就页可见;卡面与详情页**不出现** | +| 三层 单件 | 具体那一件的名称 | 奥术余烬、贯穿射击、小幅提升生命上限 | 全部玩家可见面 | + +**两层是两件事,别混**: + +- **命名是本节的规矩**——三个分类各有一个专名,文档、代码词族、帮百科一律用它。指代某个分类时直接说「专长」,不说「机制类」「专长那一类」。 +- **呈现是另一件事**(归 [battle](../ux/battle.md) 与 [node-reward](../ux/node-reward.md),本节不裁决):玩家看到某件奇物时,卡面只写**这件东西的名字与效果**,不附带它的分类。玩家可以从效果反推它属于哪一类,但界面不替他说破。 + +**为什么两层都要有**:分类名在卡面上不出现,不等于玩家对它没有概念——帮助手册、百科条目、成就名称三处一定会用到它(「首次集齐 4 件专长」「三件属性值提升」),效果描述里出现指代时也需要名字(「本项属专长,同标签达到 4 件时质变」)。所以它必须是一个**玩家读得懂、读一遍就懂**的正式名词,不能是内部描述或自造词。 + +**代码侧词族对应**(本批只做命名对齐,代码改动见任务书):顶层 `curio_*`(奇物总称)/ 专长 `feat_*` / 属性值提升 `asi_*` / 资源 `res_*`。`reward_*` 已被既有标识符占用(`reward_pick` / `reward_node` / `reward_preview`),**不得使用**。 ### 2. 渠道轴:与分类的交叉 @@ -120,9 +139,9 @@ | 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(见 2.1) | |---|---|---|---| -| **机制类**(专长) | 门票形式(见 2.2) | 门票形式(见 2.2) | **直接给**(唯一的直接渠道) | -| **属性提升类** | 出 | 出(口径「训练」) | 不出现 | -| **资源类** | 出 | 出(**金币除外**,见 2.4) | 不出现 | +| **专长**(专长) | 门票形式(见 2.2) | 门票形式(见 2.2) | **直接给**(唯一的直接渠道) | +| **属性值提升** | 出 | 出(口径「训练」) | 不出现 | +| **资源** | 出 | 出(**金币除外**,见 2.4) | 不出现 | **这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奇物的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 @@ -133,7 +152,7 @@ 两条的管辖范围不同:前者决定"这张表的格子填不填",后者决定"填了的格子里装不装得全"。 -#### 2.1 机制类的主渠道:关底 Boss 击败(即通过这一关) +#### 2.1 专长的主渠道:关底 Boss 击败(即通过这一关) 专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 @@ -147,7 +166,7 @@ 奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奇物项,选中或买下之后,**立刻**开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 -**它归机制类,不归资源类**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于机制类。所以在交叉表上,机制类在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 +**它归专长,不归资源**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于专长。所以在交叉表上,专长在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 **为什么非 Boss 渠道只给门票**:如果商店也能直接买到一个指定的专长,玩家就能用金币把构筑买出来,Boss 渠道的"打赢才拿到"就失去意义了。门票保留了惊喜(开出来的还是三选一,不是指定),但不让玩家用钱直接定点购买。 @@ -184,7 +203,7 @@ | 层 | 是什么 | 判据来源 | 新增渠道或奇物时 | |---|---|---|---| -| **一层 分类白名单** | 分类轴决定渠道——机制类走 Boss、另两类走奖励节点与商店 | 分类本身 | 新分类按 1.4 判据归类,自动继承该类的渠道 | +| **一层 分类白名单** | 分类轴决定渠道——专长走 Boss、另两类走奖励节点与商店 | 分类本身 | 新分类按 1.4 判据归类,自动继承该类的渠道 | | **二层 可计算谓词** | 渠道与奇物之间的**结构性**关系,能算出来 | 对象与渠道的内在关系 | **自动适用,不用改表** | | **三层 显式例外清单** | 人为的设计选择,没有内在理由可推 | 设计决定 | **只能逐条加,每条必须写理由** | @@ -216,8 +235,8 @@ | 约束 | 层 | 理由 | |---|---|---| | 金币不进商店 | 二层·谓词 | 计价物不自售——商店的计价物是 GP | -| 机制类在非 Boss 渠道只给门票 | 一层·分类自身的形态 | 见 2.2——防止用钱定点买构筑 | -| 属性提升类与资源类不出现在 Boss 渠道 | **不是约束** | 见 2.1——这是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖 | +| 专长在非 Boss 渠道只给门票 | 一层·分类自身的形态 | 见 2.2——防止用钱定点买构筑 | +| 属性值提升与资源不出现在 Boss 渠道 | **不是约束** | 见 2.1——这是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖 | #### 2.5 在册事项 @@ -226,8 +245,8 @@ ### 3. 作用对象与范围 - **作用对象**:角色本人,以及角色参与的结算过程。奇物不改敌人、不改棋盘生成、不改关卡内容。 -- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源类里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 -- **时间范围**:整局冒险。机制类与属性提升类自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源类里的金币与回复是即时兑付,拿到即消费完。 +- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 +- **时间范围**:整局冒险。专长与属性值提升自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源里的金币与回复是即时兑付,拿到即消费完。 - **归属范围**:不进账号永久进度,不带到下一次冒险。 ### 4. 生命周期 @@ -240,10 +259,10 @@ | 阶段 | 说明 | |---|---| -| 候选池构建 | 冒险开局时一次建成。三个分类的候选**现同处一个令牌池**:属性提升类与资源类按配额铺开,机制类按定义表的有效行铺开。 | +| 候选池构建 | 冒险开局时一次建成。三个分类的候选**现同处一个令牌池**:属性值提升与资源按配额铺开,专长按定义表的有效行铺开。 | | 出现 | 玩家在渠道上看到若干候选(三选一的形式),看不到整个池。 | -| 选定 | 玩家选定一项后,它从池中剔除,此后任何渠道都不会再见。选到「专长获取」时,立刻再开一次专长 N 选一——这次选择走机制类的渠道语义,不占用原本的渠道。 | -| 持有与兑付 | 机制类与属性提升类进入持有集后立即生效,跨关携带;机制类按同一标签的持有项数决定处于哪一档。金币与回复即时兑付,不入持有集。 | +| 选定 | 玩家选定一项后,它从池中剔除,此后任何渠道都不会再见。选到「专长获取」时,立刻再开一次专长 N 选一——这次选择走专长的渠道语义,不占用原本的渠道。 | +| 持有与兑付 | 专长与属性值提升进入持有集后立即生效,跨关携带;专长按同一标签的持有项数决定处于哪一档。金币与回复即时兑付,不入持有集。 | | 清零 | 冒险以任一结局收束时整集清空;下次开局重建。 | | 断点恢复 | 进行中的冒险把持有集与剩余候选池一并写入断点,续玩后恢复到同一状态(断点里的键名沿用历史形态,不随本次改名变动)。 | @@ -253,9 +272,9 @@ |---|---| | [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对,判据是生命周期:**奇物当局清零,魔法道具跨冒险保留**。两者互不相通——奇物永不进同调位,魔法道具永不进当局随机渠道。 | | [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,奇物管当局构筑,两层互不代替。 | -| [战斗结算](../战斗循环/战斗结算.md) | 机制类的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | +| [战斗结算](../战斗循环/战斗结算.md) | 专长的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | | [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | -| [关卡节点地图](关卡节点地图.md) | 是渠道的载体,不是奇物的属性。机制类挂在 Boss 节点兑付面上,节点类型词表零扩类。 | +| [关卡节点地图](关卡节点地图.md) | 是渠道的载体,不是奇物的属性。专长挂在 Boss 节点兑付面上,节点类型词表零扩类。 | | [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集,也不是渠道给的。 | | [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | @@ -264,7 +283,7 @@ | 类型 | 内容 | |---|---| | 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包、三选一界面 | -| 依赖(数据) | `relics.tres`(机制类定义行)、`adventure.tres`(属性提升类与资源类的种类配额与值)、`shop.tres`(货架取舍) | +| 依赖(数据) | `relics.tres`(专长定义行)、`adventure.tres`(属性值提升与资源的种类配额与值)、`shop.tres`(货架取舍) | | 输出(对外) | 持有集、生效中的分类投影、剩余候选池、档位求值结果、可用重抽次数 | | 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | @@ -280,10 +299,10 @@ | 参数 | 取值域 | 事实源 | |---|---|---| -| 机制类定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | +| 专长定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | | 专长门票(出现概率 / 配额 / 全局限量) | 整数 | **尚未入表**,见待办 | -| 属性提升类种类 | 封闭三项:生命上限 / AC / 攻击,扩项走文档修订 | `game/data/schemas/adventure_table.gd` | -| 资源类种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | +| 属性值提升种类 | 封闭三项:生命上限 / AC / 攻击,扩项走文档修订 | `game/data/schemas/adventure_table.gd` | +| 资源种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | | 稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | | 各分类种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | | 专长获取的全局限量 | 整数(一局内可获得的次数上限) | 同上 | @@ -294,9 +313,9 @@ 1. 三个分类走同一套获取流程,代码里只有一个表示"已持有奇物"的集合。 2. 一次冒险内获得的奇物在之后任何关卡都生效;开新冒险后持有集为空。 3. 一项被选定的奇物不再出现在任何后续渠道。 -4. 每个流派标签至少有一项挂在排雷侧的结算触发点上(防止机制类沦为纯战斗数值)。 +4. 每个流派标签至少有一项挂在排雷侧的结算触发点上(防止专长沦为纯战斗数值)。 5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 -6. 文档与代码里提到它时只有"奇物"这一个名字;需要区分时用"机制类/属性提升类/资源类"描述,不得另造称呼。 +6. 文档与代码里提到它时只有"奇物"这一个名字;需要区分时用"专长/属性值提升/资源"描述,不得另造称呼。 7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 9. 金币不出现在商店货架上——这是「计价物不自售」谓词算出来的结果,不是给金币单独立的一个分类;它确实是在分类白名单之外加的一道过滤,只是这道过滤可自动计算而非靠枚举。 @@ -310,7 +329,7 @@ 本节只点出四条由本版新立、尚未登记的判断来源: -- **回复归属已定(v2.5)**:留在资源类,不独立成第四类。理由是它与金币同为**即时兑付**、都给的是可花掉的余量,拆出去之后第四类只有两项、且与资源类的判据完全同源——分类的价值在于判据能一刀切得开,拆一个判据同源的类只会让读者多查一张表。 +- **回复归属已定(v2.5)**:留在资源,不独立成第四类。理由是它与金币同为**即时兑付**、都给的是可花掉的余量,拆出去之后第四类只有两项、且与资源的判据完全同源——分类的价值在于判据能一刀切得开,拆一个判据同源的类只会让读者多查一张表。 - **专长门票尚未入表**:出现概率、配额、限购次数、保底计数阈值四个参数都没有事实源;入池时同样受档位结构锚约束(改总量须重裁而非调参)。 - **专长总量与档位阈值的匹配——延后复裁(用户 2026-10-05 定"先不调整")**:终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 的个数。三关结构下是两次,加上门票最多三次,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是后续会有第四关,且届时可能另做获取侧的调整。**复裁触发条件:第四关内容批落地后实测,若配合仍太少再调**。登记于此防止它被忘掉。 - **charge 标签件数不足(数据缺陷,独立登记)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷,随上一条一并延后,但不要被上一条盖掉。 @@ -322,11 +341,13 @@ | v1.0 | 2026-10-05 | 以「特性」为名首次为本概念立定义文档。此前它按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现收敛为一个对象下的分类;性质定为「角色自身得到提升」而非「获得物品」。 | | v1.1 | 2026-10-05 | 分类重构:两类由「规则改写型 / 属性加成型」改为「属性提升 / 专长」。 | | v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | -| **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**:机制类(专长)/ 属性提升类(生命·AC·攻击)/ 资源类(行动点上限·刷新次数·金币·回复,命名待定)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源类里,同时把它们的即时兑付性质显式登记为类内异质性。 | -| v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性提升类与资源类在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | -| v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表机制类在两渠道由"不出现"改为"**门票形式**";门票归机制类(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | +| **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**(当时的写法是「机制类 / 属性提升类 / 资源与机会类」,v2.7 才定名为专长 / 属性值提升 / 资源):专长 / 属性值提升(生命·AC·攻击)/ 资源(行动点上限·刷新次数·金币·回复)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源里,同时把它们的即时兑付性质显式登记为类内异质性。 | +| v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性值提升与资源在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | +| v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表专长在两渠道由"不出现"改为"**门票形式**";门票归专长(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | | v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | +| **v2.7** | 2026-10-05 | **三个子节点正式定名(用户拍板:去「类」字后缀)**。此前三个分类只有带后缀的描述(机制类 / 属性提升类 / 资源类),是文档层临时叫法,既非专名也非玩家可读的词。现定专名:**专长**(Feat)/ **属性值提升**(ASI)/ **资源**。定名依据:前两个是 DND 规则书官方中文,且与用户 v1.1 原话一致(当时原话就是「属性提升(ASI)」与「专长」,v1.1 落文时被加了「类」字后缀而退化成描述)。「机制类」这个叫法本身还有硬伤——它的 28 个成员里没有一件是"机制",实际是"在结算挂点上改一条规则",读者看到会误解为游戏机制。 +**新增 1.6 节「三层结构与命名」**(用户 2026-10-05 拍板做玩家可见的三层):奇物(总称)/三个分类/具体单件。明确**命名是本节规矩、呈现是另一件事**——分类名在卡面不出现(归 battle.md / node-reward.md 裁决),但帮百科、成就名、效果描述的指代三处都要用,所以它必须是玩家读一遍就懂的正式名词。连带:修掉批量替换撞出的五处「专长(专长)」类自撞、v2.0 历史行内的自撞并标注当时的旧称、registry 的「资源(命名待定)」过期标注。 | **v2.6** | 2026-10-05 | **修正核心循环位置图:奇物不是打一场战斗给一份**(用户纠错)。原图把"关内 排雷推理 → 战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来就是每场战斗通关都给一份——**错在把关内普通战斗的通关与关底 Boss 的通关混为一谈**。按 [冒险结构](冒险结构.md) 的定义,**通关一关 = 该关关底 Boss 被击杀**,所以"击败 Boss"与"通过这一关"是同一个时刻、不是一条链上的两步。改法:① 图改为分支结构(普通战斗节点→不给、往下走;关底 Boss 击败→专长三选一+通关回血);② **一关只兑付一次**写成显式口径;③ 2.1 节渠道名由"终局前 Boss 击败后"改为"关底 Boss 击败(即通过这一关)",并写明触发点就是关卡推进本身那一刻;④ 文首引言加"兑付频率"条,交叉表渠道名与 registry 同步;⑤ 连带修掉一处污染——节点类型封闭枚举五种里的"奖励"曾被 v2.4 批量替换误伤成"奇物"(节点类型里没有奇物这一类),已复原。 | -| **v2.5** | 2026-10-05 | **第三类定名「资源类」**(用户拍板,父节点定为「奇物」后解锁)。定名依据:行动点上限 / 刷新次数 / 金币 / 回复都是可以调动、可以花掉的余量。「资源」偏泛(能力资源、财富资源都叫资源),因此在 1.5 写死判据句——**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**,这一句是把泛用词收回本类定义的唯一凭据。**回复归属同时定案:留在资源类,不独立成第四类**——它与金币同为即时兑付、判据同源,拆出去第四类只剩两项且与本类判据重合。附带修复:1.5 段末与「### 2. 渠道轴」标题粘连(缺换行)。 | +| **v2.5** | 2026-10-05 | **第三类定名「资源」**(用户拍板,父节点定为「奇物」后解锁)。定名依据:行动点上限 / 刷新次数 / 金币 / 回复都是可以调动、可以花掉的余量。「资源」偏泛(能力资源、财富资源都叫资源),因此在 1.5 写死判据句——**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**,这一句是把泛用词收回本类定义的唯一凭据。**回复归属同时定案:留在资源,不独立成第四类**——它与金币同为即时兑付、判据同源,拆出去第四类只剩两项且与本类判据重合。附带修复:1.5 段末与「### 2. 渠道轴」标题粘连(缺换行)。 | | **v2.4** | 2026-10-05 | **顶层由「奖励」改名为「奇物」(Wondrous Item)**。用户否决了「奖励」「收益」与全部自造词(进益/造化/机缘/遇获),要求回到 DND/西幻既有名词。定名依据:DMG 魔法物品九分类中的 Wondrous Item,官方中文译名即「奇物」,是专装不好归类但有奇效之物的兜底杂类——正好对应本概念下三个互不相干的分类。此前考虑过的 Treasure(宝物)因偏财物、装不下专长而落选;roguelike 品类惯例 Relic 因用户否决遗物落选。**代码词族定为 `curio_*`、`ADVENTURE_CURIO`**(`reward_*` 已被 `reward_pick` / `reward_node` / `reward_preview` 占用,不能对齐)。 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 523aa068..14542970 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -326,7 +326,7 @@ entities: table: RewardTable(数据配置 承载,键 = reward_id;地图战斗资源 回填 owner;**2026-09-15 格面资源批结构性重写**——旧 category / use_timing / 库存 / 供给轴随可选类删除整批下线,五型 × 极性字典取代〔历史结构见底部修订记录〕) fields: reward_id: String(表内主键) - cell_type: enum {attack, defense, heal, blast, weaken, pierce, magic, action, gp}——九型封闭(2026-09-18 伤害道具批五→七、2026-09-20 格面资源八型批七→八 +action、同日 GP+商店房批八→九 +gp;格面资源类型身份;CELL_TYPE_KEYS 词表十八格 = 九型 × 正负,表里出现清单外值加载拒绝 fail-fast) # 2026-09-15 新增,取代 category;2026-09-18 扩七型;2026-09-20 八型批扩八型;同日 GP+商店房批扩九型 + cell_type: enum {attack, defense, heal, blast, weaken, pierce, magic, action, gp}——九型封闭(2026-09-18 伤害道具批五→七、2026-09-20 格面资源八型批七→八 +action、同日 GP+商店房批八→九 +gp;格面资源型身份;CELL_TYPE_KEYS 词表十八格 = 九型 × 正负,表里出现清单外值加载拒绝 fail-fast) # 2026-09-15 新增,取代 category;2026-09-18 扩七型;2026-09-20 八型批扩八型;同日 GP+商店房批扩九型 polarity: enum {positive, negative}——同型两行:正向行参与摇号(权重 = 类型频次),负向行纯兑付字典、不消费权重 # 2026-09-15 新增 effect_id: String 可空——percent 类行(attack/defense/weaken 正负两向)必填(StatusEffectTable 精确引用,悬空校验已激活);flat 直付行(直伤/群伤/治疗)恒空 stacks: int [1,16] 可省——多层授予行(原 blast 负向 ambush_double ×2 层——该行随 2026-09-20 八型批退役,现行表无 stacks 行、字段保留 schema 位);缺省 1 @@ -579,16 +579,17 @@ entities: owner: design/gdd/systems/冒险循环/奇物.md attributes: definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奇物。装的是"这一局你捞到了什么",不管从哪个渠道来 - channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奇物的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奇物自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②机制类在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性提升类/资源类不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** + channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奇物的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奇物自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②专长在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性值提升/资源不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奇物属于哪个分类不决定它从哪个渠道来;交叉关系由 [奇物](design/gdd/systems/冒险循环/奇物.md) 第 2 节开关表定死 - categories: 封闭三类 {机制类, 属性提升类, 资源类}(v2.0 起;v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。机制类(专长 Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性提升类(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源类(命名待定)——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres - scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,机制类与属性提升类跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 + categories: 封闭三类 {专长 Feat, 属性值提升 ASI, 资源}(v2.7 定名,**去「类」字后缀**——此前为描述式叫法「机制类 / 属性提升类 / 资源类」,非专名;用户 v1.1 原话即「属性提升(ASI)」与「专长」,v1.1 落文时被加后缀而退化。v2.0 起为三类、v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。 + hierarchy: 玩家可见的三层(用户 2026-10-05 拍板)——一层总称「奇物」/二层三个分类/三层具体单件(如 奥术余烬、贯穿射击)。**命名与呈现是两件事**:分类各有一个正式专名,文档、代码词族、帮百科/成就名/效果描述的指代一律用它;但卡面与详情页只写单件名与效果、不附带分类(呈现面归 battle.md / node-reward.md 裁决,本条目不预断)专长(Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性值提升(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres + scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,专长与属性值提升跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 - acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——机制类:主渠道=**关底 Boss 击败=通过这一关**(**唯一直接给的渠道**;不新增节点类型、挂 Boss 节点兑付面;末关的 Boss 击败后不给——无后续关卡可消费)。**兑付频率**:奇物不是打一场战斗给一份,关内普通战斗节点不给任何奇物,一关之内只兑付一次(奖励节点与商店同理,各节点各自兑付),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归机制类(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性提升类:奖励节点 + 商店(口径「训练」);资源类:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——专长:主渠道=**关底 Boss 击败=通过这一关**(**唯一直接给的渠道**;不新增节点类型、挂 Boss 节点兑付面;末关的 Boss 击败后不给——无后续关卡可消费)。**兑付频率**:奇物不是打一场战斗给一份,关内普通战斗节点不给任何奇物,一关之内只兑付一次(奖励节点与商店同理,各节点各自兑付),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归专长(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性值提升:奖励节点 + 商店(口径「训练」);资源:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奇物;跨冒险跟着你走的是魔法道具**。奇物永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 - data_sources: relics.tres(机制类定义行)/ adventure.tres(属性提升类与资源类的种类配额与值)/ shop.tres(货架取舍) + data_sources: relics.tres(专长定义行)/ adventure.tres(属性值提升与资源的种类配额与值)/ shop.tres(货架取舍) open_questions: ①类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同,靠这条描述把"资源"从泛用词收回到本类定义内;②专长门票尚未入表(出现概率/配额/限购次数/保底阈值四参数均无事实源);③确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);④charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记,勿被上条盖掉);⑤断点存档键 5 个(bonus_deck / bonus_taken / bonus_pending / bonus_result / bonus_aux_carry)是否随存档版本迁移换名待裁 - naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」,v2.4 定名为「奇物」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。v2.5 第三类定名为「资源类」(用户拍板)。**代码侧三套词族均尚未对齐**:`feature_*` → `curio_*`(103 处)、`relic_*` → 机制类(162 处)、运行层 `bonus_*`(160 处),属临时态,登记于 06-待办清单,须在可跑冒烟批次收口 + naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」,v2.4 定名为「奇物」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。v2.5 第三类定名为「资源」(用户拍板)。**v2.7 三个子节点全部正式定名、去「类」字后缀**:专长(Feat)/ 属性值提升(ASI)/ 资源——此前是描述式叫法不是专名。**代码侧三套词族均尚未对齐**:`feature_*` → `curio_*`(103 处,顶层总称)、`relic_*` → `feat_*`(162 处,专长分类的词族——v2.7 定名后顶层与内层分类各有各的词族)、运行层 `bonus_*` → `curio_*`(160 处),属临时态,登记于 06-待办清单,须在可跑冒烟批次收口 referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] - name: adventure_table @@ -599,8 +600,8 @@ entities: fields: | 退役两字段(迭代 10 奇物重构批,2026-09-30 用户拍板):level_clear_hp_bonus(「血回满+上限提升」件随大奇物三件套退役——回血改 clear_heal_pct 部分回血、上限提升改三选一件值列)、keystone_per_level(钥石退役出大奇物改 Boss/精英击杀掉落)。 clear_heal_pct: int [0,100](knob 默认 20——非末关通关部分回血回复生效上限的百分比,封顶上限不回满、满血回 0 合法;难度上压方向,带重扫义务归 难度曲线与Boss) - **2026-10-05 命名统一批**:本表的属性提升类奇物字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 curio 条目(v2.0 顶层改名为「奇物」)。 - feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性提升类奇物兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) + **2026-10-05 命名统一批**:本表的属性值提升奇物字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 curio 条目(v2.0 顶层改名为「奇物」)。 + feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性值提升奇物兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) feature_value_gp_common: int [0,999](GP 袋件定额入钱包);feature_value_ap_rarest: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](魔法道具件授予件数) ~~bonus_weight_*(E-S 加权洗牌权重族)~~ / ~~bonus_cap_*(种类次数上限族)~~:**v2.2 令牌池换代退役(迭代 12 TP0——2026-10-03 追认 b 实施批;洗牌改令牌 Fisher-Yates、池消耗即上限)** feature_quota_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) diff --git a/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md b/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md index 6f0f921f..0656330f 100644 --- a/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md +++ b/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md @@ -2,7 +2,7 @@ - 日期:2026-10-05 - 设计事实源:[奇物.md](../gdd/systems/冒险循环/奇物.md) v2.6(概念唯一定义,2026-10-05 用户逐轮裁定) -- 登记台账:[06-待办清单](../gdd/06-待办清单.md) 三条目(渠道分工目标态 / 资源类两个新种类入池 / 奇物命名统一后续) +- 登记台账:[06-待办清单](../gdd/06-待办清单.md) 三条目(渠道分工目标态 / 资源两个新种类入池 / 奇物命名统一后续) - 实体登记:[entities.yaml](../registry/entities.yaml) `curio` 条目 - 状态:**定稿待发令**——用户 2026-10-05 令:本批只改文档,代码与配置改动整理成任务书编入迭代 15 - **loop 计划书八件对照**:①目标与完成定义=§一 ②现状事实(代码级,开工自行复核)=§二 ③设计契约(🔴 触碰=L3 停机)=§三 ④范围边界=§四 ⑤任务卡 T0..Tn=§五 ⑥验证闸=§六 ⑦异常分级=§七 ⑧代拍板白名单=§八 @@ -20,7 +20,7 @@ 完成定义(逐条可验): 1. **词族对齐完成**:`feature_*` → `curio_*`(103 处 / 7 文件)、`relic_*` → `curio_*` 或 `feat_*`(162 处 / 12 文件)、运行层 `bonus_*` → `curio_*`(160 处 / 8 文件)全部改完,`game/` 下 `grep -c "feature_\|relic_\|_bonus_\|pick_bonus\|BonusInteract\|BonusPick"` 归零(存档键 5 个除外,见 T2 裁点) -2. **渠道分工落地**:三条渠道按分类分离——关底 Boss 击败=通过这一关 → 只出机制类;奖励节点 / 商店 → 只出属性提升类 + 资源类,机制类在此只以门票形式出现;三渠道不再共用同一个池 +2. **渠道分工落地**:三条渠道按分类分离——关底 Boss 击败=通过这一关 → 只出专长;奖励节点 / 商店 → 只出属性值提升 + 资源,专长在此只以门票形式出现;三渠道不再共用同一个池 3. **两个新种类入表**:刷新次数、专长获取门票进入 `adventure.tres`,各自带全参数 4. **商店货架补回复**:按默认原则,回复必须在商店货架内(现行缺) 5. **数据缺陷修复**:`relics.tres` 的 charge 标签补至 ≥4 件(档二要求同标签 ≥4,现仅 3 件,永远达不到) @@ -51,7 +51,7 @@ ### 2.3 渠道与池的现状 - 现行**三渠道共用同一个 98 张固定配额令牌池**(普通 70 / 稀有 25 / 罕见 3),三类混编 -- 机制类(专长)只占稀有/罕见档,与属性大件混编;商店货架靠"零机制类挤掉一张普通卡"保底 +- 专长只占稀有/罕见档,与属性大件混编;商店货架靠"零专长挤掉一张普通卡"保底 - 商店货架 = 池 ∖ {GP 袋}(`shop.tres` 的 `pool_shelf` 行族,现为 attack / max_hp / armor_class / ap 四项,**缺回复**) - 奖励节点与通关三选一**共享同一池、同权重同上限**(`node-reward` v2.4) @@ -67,16 +67,16 @@ ## 三、设计契约(违反即返工,🔴 触碰 = L3 停机) 1. 🔴 **兑付频率不可改**:奇物**不是打一场战斗给一份**。关内普通战斗节点打完不给任何奇物;一关之内只兑付一次,触发点是**关底 Boss 被击败**——按 [冒险结构](../gdd/systems/冒险循环/冒险结构.md) 定义"通关一关 = 该关关底 Boss 被击杀",**这两件事是同一个时刻,不是一条链上的两步**。任何把专长挂到"战斗结算后"的实现即为 L3 -2. 🔴 **两条轴互不决定**:分类轴(给的是什么:机制类 / 属性提升类 / 资源类)与渠道轴(从哪来:奖励节点 / 商店 / 关底 Boss 击败)**不得互相推导**。禁止"因为它要进商店所以另立一分类"这类反向推导(= 06 已登记的"两轴缠回去") -3. 🔴 **Boss 渠道独占机制类**:关底 Boss 击败=通过这一关**只出机制类**,属性提升类与资源类在此不出现。这是渠道轴的定位决定,不是例外,不需另找理由。末关的 Boss 击败后不给(无后续关卡可消费) +2. 🔴 **两条轴互不决定**:分类轴(给的是什么:专长 / 属性值提升 / 资源)与渠道轴(从哪来:奖励节点 / 商店 / 关底 Boss 击败)**不得互相推导**。禁止"因为它要进商店所以另立一分类"这类反向推导(= 06 已登记的"两轴缠回去") +3. 🔴 **Boss 渠道独占专长**:关底 Boss 击败=通过这一关**只出专长**,属性值提升与资源在此不出现。这是渠道轴的定位决定,不是例外,不需另找理由。末关的 Boss 击败后不给(无后续关卡可消费) 4. 🔴 **专长门票四条口径不可改**:①**拿到即开、不可囤积**(不进持有集,选中/买下同一时刻开专长三选一);②**罕见只在概率、不在价格**(货架价与其他商品相当);③**一局限购一次**;④**计步保底**——连续 5 次三选一展示未出现 → 第 6 次必定出现(计数=**展示次数**,刷新后的重展计入,奖励节点与商店共享计数,触发后清零,限购用满后不再触发) 5. 🔴 **统一词族不得用 `reward_*`**(已被 `reward_pick` / `reward_node` / `reward_preview` 占用,见 §2.1) 6. 🔴 **档位配额结构锚不可绕过**:`TIER_QUOTAS` 的 70/25/3 有 validate 硬断言。改总量须重裁并留说明,不得调参绕过 -7. 🔴 **不新增节点类型**:`关卡节点地图` 的节点类型封闭枚举五种不变,机制类挂 Boss 节点兑付面 +7. 🔴 **不新增节点类型**:`关卡节点地图` 的节点类型封闭枚举五种不变,专长挂 Boss 节点兑付面 8. 🔴 **魔法道具边界不位移**:奇物**当局清零、跨局带走的是魔法道具**(判据走生命周期,不走"带在身上")。本批任何改动不得让奇物进同调位,也不得让魔法道具进当局随机渠道 9. 🔴 **层级纪律**:奇物只走当局随机渠道(奖励节点 / 商店 / Boss 兑付),不进元进度天赋树 10. **本批不改平衡数值**:所有 `feature_value_*` / `feature_quota_*` 的**值零变更**。入新种类属结构改动(占配额),非调参 -11. **零战斗期新动词**:机制类表达全部经"扫雷决策 → 自动结算"间接生效,不新增手动闪避 / 主动施法 +11. **零战斗期新动词**:专长表达全部经"扫雷决策 → 自动结算"间接生效,不新增手动闪避 / 主动施法 ## 四、范围边界(以下均不在本批,收到即停、不顺手做) @@ -119,10 +119,10 @@ - 建议甲或乙;若判断丙才对,回写本任务书并转 06 - 轻闸:冒烟全量 + **断点存档往返测试绿** + `ui_click_probe`(触碰 presentation) -### T3 词族对齐第三批:`relic_*` → 机制类(≈0.8d) +### T3 词族对齐第三批:`relic_*` → 专长(≈0.8d) - 范围:`relic_table.gd`(+`.uid`)/ `relics.tres` / `relics_engine.gd` / 及 9 个引用文件 -- 目标词族:`feat_*`(机制类 = 专长 Feat,**与顶层 `curio_*` 区分**:顶层是容器,内层分类各有各的词族——`curio_*` 是总称、`feat_*` 是机制类、`asi_*` 是属性提升类、`res_*` 是资源类) +- 目标词族:**`feat_*`**(专长 Feat)。**顶层与内层分类各有各的词族**(v2.7 定名后确立):`curio_*` 是总称「奇物」/`feat_*` 是专长/`asi_*` 是属性值提升/`res_*` 是资源 - **文件名与 `class_name` 改名须同步 `.uid` 与 `.tscn`**(非文本层) - **不新增节点类型**;MINE_HOOKS 红线校验逻辑零改动 - 轻闸:冒烟全量 + 全探针(三) @@ -131,9 +131,9 @@ ### T4 渠道分离:池的拆分(≈0.8d) - 目标:三个渠道各按分类白名单取候选,不再共用同一个 98 张池 - - 关底 Boss 击败 → 只出机制类 - - 奖励节点 / 商店 → 机制类**只以门票形式出现** + 属性提升类 + 资源类 -- ⚠️ **配额结构锚处置**:机制类抽离共享池后,属性与资源类的配额总量是否维持 98?**若须改 `TIER_QUOTAS` 总量,走重裁流程并在本任务书回写理由**(不得调参绕过 validate 硬断言) + - 关底 Boss 击败 → 只出专长 + - 奖励节点 / 商店 → 专长**只以门票形式出现** + 属性值提升 + 资源 +- ⚠️ **配额结构锚处置**:专长抽离共享池后,属性与资源的配额总量是否维持 98?**若须改 `TIER_QUOTAS` 总量,走重裁流程并在本任务书回写理由**(不得调参绕过 validate 硬断言) - 商店货架 = 池 ∖ {GP 袋}(**计价物不自售**规则:凡以某渠道计价物为内容的奖励不进该渠道货架) - 轻闸:冒烟全量 + 探针 + **MC 逐位对拍**(涉核心,必须) @@ -187,14 +187,14 @@ | A1 | 词族归零 | `game/` 下 `feature_\|relic_\|_bonus_\|pick_bonus\|BonusInteract\|BonusPick` 命中数 = 0(存档键除外) | | A2 | 禁词未用 | `game/` 下无 `reward_pick` / `reward_node` / `reward_preview` **新增**(既有三处不动) | | A3 | 兑付频率正确 | 专长兑付点 = 关底 Boss 击败;**关内普通战斗节点不产奇物**(代码级断言 + 人闸目检双查) | -| A4 | 渠道分离 | 三渠道候选池按分类白名单过滤;机制类在非 Boss 渠道只以门票形态出现 | +| A4 | 渠道分离 | 三渠道候选池按分类白名单过滤;专长在非 Boss 渠道只以门票形态出现 | | A5 | 门票拿到即开 | 门票不进持有集;选中/买下同帧开专长三选一(断言:持有关卡推进后仍无门票残留) | | A6 | 保底计数 | 连续 5 次展示未出 → 第 6 次必出;刷新重展计入;限购用满后不触发 | | A7 | 值零变更 | T1-T3 全部改名的键,值与基线**逐位相等** | | A8 | 存档往返 | 旧断点可读、可续;存档键按 T2 裁点结论验证 | | A9 | 池配额锚 | `TIER_QUOTAS` validate 硬断言绿;若改总量须有重裁说明 | | A10 | 节点类型零扩类 | 节点类型仍为封闭枚举五种 | -| A11 | 玩家可见面无分类名 | 奇物列表 / 三选一面 / 弹窗**不出现**"机制类/属性提升类/资源类"字样(与 06 独立条目协同,本批只做**断言检查**,不改法) | +| A11 | 玩家可见面无分类名 | 奇物列表 / 三选一面 / 弹窗**不出现**"专长/属性值提升/资源"字样(与 06 独立条目协同,本批只做**断言检查**,不改法) | | A12 | 档二通路 | charge 标签 ≥4 件,或已有显式登记"不可达 + 转内容批" | ## 七、异常分级(loop 规范) @@ -205,7 +205,7 @@ **本批预判的 L3 高风险点**: 1. `relic_table.gd` 改名连带 `.uid` / `.tscn` 非文本层引用失败(T3) -2. 机制类抽离共享池后配额结构锚失锚,需重裁(T4) +2. 专长抽离共享池后配额结构锚失锚,需重裁(T4) 3. 存档键换名导致旧断点读不出(T2) ## 八、代拍板白名单(批内可自裁,台账留痕) @@ -239,5 +239,5 @@ | v2.2 | 非 Boss 渠道给**门票**形式(拿到即开、不可囤积);渠道约束重构为**三层**(分类白名单 / 可计算谓词 / 显式例外清单);立**默认原则**——除已登记规则外分类内成员都要在池子里 | | v2.3 | 门票四条口径细化(含**计步保底**:连续 5 次展示未出第 6 次必出,刷新重展计入);修正默认原则表述——**只管分类内部**,"渠道出哪些分类"是渠道轴自己的定位决定 | | v2.4 | 顶层定名**「奇物」Wondrous Item**(DND 魔法物品九分类的兜底杂类);落选 Treasure(偏财物)/ Relic(用户否决)/ 全部自造词;**代码词族定为 `curio_*`**(`reward_*` 已被占用) | -| v2.5 | 第三类定名**「资源类」**(偏泛,故在 1.3 写死判据句);**回复留在资源类**不拆第四类 | +| v2.5 | 第三类定名**「资源」**(偏泛,故在 1.3 写死判据句);**回复留在资源**不拆第四类 | | v2.6 | **修正核心循环图**——奇物不是打一场战斗给一份;关底 Boss 击败=通过这一关是同一时刻;兑付频率写进文首 / 2.1 / 待办 / registry | diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index e06c5784..b253e991 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -13,13 +13,13 @@ class_name AdventureTable extends Resource -## 概念指路:本表的属性提升类与资源类,与 relics.tres 的机制类,同属一个对象—— +## 概念指路:本表的属性值提升与资源,与 relics.tres 的专长,同属一个对象—— ## 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 -## 它们是它的分类轴上的枚举(机制类 / 属性提升类 / 资源类),不是三套系统; -## 本表承载属性提升类与资源类的种类配额与件值。 +## 它们是它的分类轴上的枚举(专长 / 属性值提升 / 资源),不是三套系统; +## 本表承载属性值提升与资源的种类配额与件值。 ## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」→「奇物」。 ## 常量与字段随之前缀 feature_*,**尚未**随顶层改名换到 reward_*——见 06-待办清单。 -## 分类轴三个枚举:属性提升类〔生命上限 / AC / 攻击〕;资源类〔行动点上限 / +## 分类轴三个枚举:属性值提升〔生命上限 / AC / 攻击〕;资源〔行动点上限 / ## 刷新次数 / 金币 / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 ## 类内异质性:金币与回复是即时兑付,不进持有集、不持续生效。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index 879985ab..6f9a3c65 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -2,13 +2,13 @@ # Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、 # 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) -# 概念指路:本表的机制类(专长),与 adventure.tres 的属性提升类、资源类,同属一个对象—— +# 概念指路:本表的专长,与 adventure.tres 的属性值提升、资源,同属一个对象—— # 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 -# 它们是它分类轴上的枚举(机制类 / 属性提升类 / 资源类),不是三套系统;本表承载「机制类」(专长 Feat)的逐项定义。 -# (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「机制类(专长)」; +# 它们是它分类轴上的枚举(专长 / 属性值提升 / 资源),不是三套系统;本表承载「专长」(专长 Feat)的逐项定义。 +# (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「专长」; # 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 # 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奇物文档 2.1 节。) -# 数据配置 RelicTable schema(奇物·机制类定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 +# 数据配置 RelicTable schema(奇物·专长定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 # 定义表——AuxItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 From aafaa0c6c1e4180e0d1e48e75fd3c2c42d8a15ee Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 06:47:03 +0800 Subject: [PATCH 12/12] =?UTF-8?q?roadmap=20=E8=BF=AD=E4=BB=A3=2015=20?= =?UTF-8?q?=E8=A1=8C=E6=94=B9=E5=86=99=E4=B8=BA=E5=8F=8C=E5=8D=A1=EF=BC=9A?= =?UTF-8?q?=E2=91=A0=E8=B0=83=E8=AF=95=E6=95=B4=E5=90=88=E5=8D=A1=EF=BC=88?= =?UTF-8?q?=E5=B7=B2=E8=90=BD=E7=B1=8D=EF=BC=89+=20=E2=91=A1=E5=A5=87?= =?UTF-8?q?=E7=89=A9=E6=89=B9=EF=BC=88=E6=9C=AC=E6=89=B9=E5=BE=85=E5=BC=80?= =?UTF-8?q?=E5=B7=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 迭代 15 已被调试功能整合批占用(master 8642c2d / 76cad66 已落籍), 用户拍板并入而非改号。按 loop 规范「一迭代 = 一句目标 + 3-8 任务卡」, 两批各作一张卡:卡①已落籍(0.5d),卡②T0-T8≈4.5d。 同时同步本批 v2.7 的子节点定名:分类改用专名「专长 / 属性值提升 / 资源」, 事实源版本 v2.6→v2.7。 --- roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roadmap.md b/roadmap.md index 3b92ba52..442574dc 100644 --- a/roadmap.md +++ b/roadmap.md @@ -60,7 +60,7 @@ | 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书=`design/research/任务书-双层BD实施批-2026-10-03.md`(已定稿)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) | | 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) | | 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告=`design/research/方案-挖掘风险不等式修订-2026-10-04.md` §九),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书=`design/research/任务书-全局作用域变异首发批-2026-10-04.md`(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批(A4,2026-10-04 用户令编入本迭代——提案八裁全落,裁决事实源=design/research/提案-冒险前资源配比预设-2026-10-04.md §八§九§十)**:玩家冒险开始前预设格面九型资源分布(预设分布不预设落位,装板摇号定落位)——预算=组合制(总量挪点·九型正向权重总和恒 77+每型上下限包络+容量随营地解锁渐进;gp 首发不可调〔包络 (2,2)〕/预设档 3 套/下限>0);合成序=表值→玩家配比差值→包络钳制→图级变异偏斜→同调硬币偏置(包络只管玩家差值——**序位在②③之后**,三者共用摇号投影点);注入=差值向量 ΣΔ=0 关态逐位零扰动;柜台=奖励格图鉴逐型商品(每型可调权一件);冒险开始锁档中途不可换;包络宽度随容量分级放宽;验收=默认分布锚+极端构筑护栏带。容量定价与包络数值 provisional(包络数值须待②号新当量账+真人读数双锚校准);行动经济对账按包络复算(总量恒 77 只余分布位移变量)。**任务书已起草**=design/research/任务书-冒险前资源配比预设批-2026-10-04.md(T0-T8≈6.0d,两段切分预案在册〔段一机制 T0-T4+T6≈3d/段二界面闸 T5+T7+T8≈3d〕;开工门=②③号卡出口;零新拍板点,provisional 归出口追认;停机点 S1-S3 在册)。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)+配比预设批 A4 T0-T8≈6.0d(两段切分可拆;开工门=②③出口;独立 worktree 合并) | -| 迭代 15 | **奇物概念收口与词族对齐批(2026-10-05 用户令编入)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.6,6 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出机制类;奖励节点/商店→属性提升类+资源类、机制类在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.6,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 迭代 14 出口 | T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) | +| 迭代 15 | **②奇物概念收口与词族对齐批(2026-10-05 用户令编入本迭代)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.7,7 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出专长;奖励节点/商店→属性值提升+资源、专长在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.7,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 迭代 14 出口 | 卡①已落籍(原估 0.5d);卡②T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) | ## 执行纪律(2026-09-27 用户立规)