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框架, 魔法道具, 元进度, 数据配置]