diff --git a/CLAUDE.md b/CLAUDE.md index 5a676f46..b8d5d225 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -82,7 +82,7 @@ **第三段·实现**——产出代码与配置文件,可运行的游戏。 - 触发:需求卡片永不单独施工,统一由用户指定迭代号触发(=U0 开工令);执行按 /iter 技能与下方批次工作流标准清单。 - **设计权威文档(GDD/art-bible 等承载设计决定的文档)在实现批内一律不更新**——文档与用户想法等同对等,任何更新必须经用户同意;实现批只出迭代实现报告(见下方第 12 条文档同步闸)。 -- 收口人闸:实机目检清单+代拍板追认单交用户;后置不阻塞收口,用户验完才算真完。 +- 收口人闸:实机目检清单+代拍板追认单登记交用户即完成批内义务;真人检测不阻塞收口、不阻塞后续迭代开工,用户自行安排时间验收(2026-10-12 用户立规,替代旧「用户验完才算真完」口径)。 ## 批次工作流标准清单(2026-10-06 用户确认固化) @@ -107,7 +107,7 @@ 10. **合并后主区全量复跑**——合并本身可能引入冲突或环境差异,落回 master 后再跑一遍全套验证 11. **会话收口落记**——`active.md` 快照与状态记录更新(含删除已完结旧条目,退役规则见 `design/dev/doc-conventions.md` §10);跨会话有效的教训写入记忆库 12. **文档同步闸 v2(2026-10-10 用户改立,替代 2026-10-09 版)**——文档更新时间点分两层:**机械面文档**(roadmap 行换代、registry、active.md 记账、README/工具注)合并/入库前随批更新完毕方算收口(原口径不变);**设计权威文档**(GDD/art-bible 等承载用户设计决定的文档)实现批内一律不更新——文档与用户想法等同,更新必须经用户同意:实现批收口产出**迭代实现报告**(`design/qa/iter-实现报告-<日期>.md`,一个迭代一份,含各卡状态+代拍板追认单+**GDD 反哺点节**——实现与设计的差异/缺口逐条列明),反哺点收口时同步登记 `design/gdd/06-待办清单.md`,用户逐点裁决后另批落文(可随批捎带,窗口长短由用户控制)。反哺点未落文期间,相关 GDD 节按 06 登记视为待反哺状态——读该节做新设计/写新卡前先查 06,勿把旧文当现行事实。需求卡片仍必列「关联文档同步面」,同步义务按两层标注(机械面=随批更新;设计面=报告反哺) -13. **实机目检归用户**——真机人闸由用户执行,用户亲口确认才算验收通过 +13. **实机目检归用户,只登记不阻塞**——真人检测项由 agent 登记进迭代实现报告目检总清单与 07-体验验证清单,登记完毕批内义务即完成;自动化闸全绿即可合并收口,用户自行安排时间验收,结论按 07 清单回流路径回流;禁止把「等用户目检」当作停工理由或任务完成的必要前置(2026-10-12 用户立规,替代原「用户验完才算验收通过」口径) 14. **中间产物吸收即死**——结论先迁入权威文档(GDD/待办清单/路线图),中间文件即删且永不提交(细则见硬性红线) ## 硬性红线(勿违反) @@ -119,6 +119,7 @@ - **用语红线(2026-10-04 用户立规,黑话审计后落文)**:面向用户的一切输出——文档、状态记录(active.md)、报告、清单、对话——禁止自造黑话与代号式命名;判据 = 业内读者没读过项目历史也能一遍看懂,需要作者解释才能懂的词必须展开成完整白话句(三种固定形态、本仓反例全表与正确写法见 `design/dev/doc-conventions.md` 第 4 节) - **呈报六问铁规(2026-10-07 用户立规)**:向用户呈报一切事物——bug、需求、概念设计、提案——一律按六问结构顺序展开,确认后才动手实现:①**What 现状与差异**——现在是什么样(引用文件、行为等事实)+ 要做什么/改什么;②**Why 期望与动机**——目标态是什么样、为什么值得改,含「不做的代价」;③**How 怎么改**——修改路径,有备选案全部列出不私藏;④**Where 影响面**——改动波及哪些系统、文件、流程、既有裁决;⑤**怎么算改对了**——可判定的验收标准,不写模糊话;⑥**不确定的地方**——没把握、需要用户裁决的点,单列收尾不埋正文。**Who/When 不进呈报正文**——谁来执行、什么时候做由用户决定,由 roadmap 与需求卡片承接,呈报里最多一句话带过。**适用范围(2026-10-08 用户补立)**——六问结构只用于**首次描述需求、bug 缺陷或相关方案**的呈报;同一方案的后续对答(追问、讨论、细化、执行汇报)不再套用六问结构,除非用户显式要求 +- **真人检测不阻塞(2026-10-12 用户立规)**:一切需要真人检测/实机目检/人工验收的事项一律「只登记、不等待」——登记进 07-体验验证清单(或当批实现报告目检总清单)即完成 agent 侧义务;自动化闸全绿即可合并收口,后续迭代照常开工,验收时间由用户自行安排。禁止把等真人检测当作任务阻塞点、停工理由或收口必要条件,也禁止因往期遗留真人检测项而拦截新迭代开工 - **数值单一事实源**:玩法数值只存 `data/tables/`(.tres),经 `ConfigDB` autoload 类型化单点读取;禁止数值字面量与自建 `load()` 表路径 - **RNG 单点**:禁止 `randomize()` / 自建 RandomNumberGenerator——随机只经 `RngService` 统一流(单盐单计数器+用途标签+全事件日志,ADR-0007 裁丙 2026-09-27) - **Core 层零 UI 依赖**:完整战斗必须可 `--headless --script` 跑通 diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 031edb47..e6948b07 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -10,20 +10,6 @@ **状态**:待数值批触发时重采;重锚前一切 MC 旧读数只作历史存档,不得与新行为对拍。——**已增补进 Alpha 收官 M4 数值批〔未排期,2026-10-07 用户令移出迭代 18 暂不启动〕〔2026-10-06 用户令自迭代 17 卡②移出——不影响 17 在飞开发〕需求卡片 v1.1(2026-10-06:T0 推算稿第五件+T6 四带复算按案C 新行为首采;design/research/需求卡片-M4数值批-2026-10-05.md)** -#### 刷新双源 X/Y 语义倒置——待用户裁(2026-10-07 本会话考证登记) - -**现状**:实现语义与用户口径镜像互换——代码:X(装配刷新件源)每碰三选一重置不结转(adventure_runner.gd:658-659,调用点 :568/:984)、Y(营地升档源)整局持久不重置(:77/:130/:216,全文件无重置点)、消费先扣 X 后扣 Y(:706-709);用户口径:X 持久、Y 每节点重置、先扣 Y。合并显示(X+Y 合计,curio_pick_overlay.set_refresh_display 链路)与穷尽转 GP 两点两侧一致。真实局因主菜单传参缺陷 X/Y 恒 0,语义从未实机暴露。 - -**归属**:迭代 19 卡⓪范围外单列(原记迭代 20,2026-10-08 随卡并迁)——裁甲(按用户口径改实现,几行换位)/裁乙(认代码现状,用户口径更新)后随批落 GDD 机制定义;未裁不动 - -**状态**:语义已定案(2026-10-10 用户复述确认:两本账=一份持久存量+一份每次三选一呈现重置的临时量,消耗**先扣临时、不足再扣存量**;字母 X/Y 仅为代码字段名,用户明示「换成 AB 也一样」无字母之争)——残留仅剩代码字段名与两账的对应核对,归秘宝实装批 T0;秘宝.md 已随裁定批改用「存量账/临时账」称谓(v2.0) - -#### 魔法提灯(fog_lantern)在秘宝新旧目录的归属(2026-10-09 登记) - -**现状**:迭代 19 卡④将魔法提灯落为秘宝第十件(同调位新行,已实装在役);同日秘宝.md v1.5 立「目录(重设计 v1)」15 件新现行事实源、旧目录全数退役,但处置名单只写九件、未含提灯。重叠面:新目录普通档「阔视野带」(微光 8→12 格)与提灯(灯光区半径+2)效果域相交。去留三案:①留任(第十一件/并入新目录)②退役(效果并入阔视野带)③改型重定。 - -**状态**:✅ **已裁=退役**(2026-10-09 用户令——「新目录没收就去掉;有也不需要,已有对应设计」)——功能由新目录普通档阔视野带(类型微光 8→12 格)承接;fog_lantern 数据行与迭代 19 卡④接线(board_view.set_fog_lantern 链/断言面/fog_lantern_wiring_test)拆除归退役删行批(实装批);素材库已由待核表迁入秘宝退役表。本条随拆线入库后收口移除 - #### 双层 BD 延期与备选内容总登记(2026-10-03 立项——需求卡片退役保险) **目的**:需求卡片/整合定稿系中间文档,落地完成后按吸收即死退役——用户令「只删除已完成落地的内容」,本条自承载全部**未落地**内容防丢失(每项自包含,不依赖指针)。 @@ -47,64 +33,19 @@ **设计知识存续口径**:七流派完整件表/逐项反例条件表/天赋树后备语言(哈迪斯 2 预算制扩容/邻接树改型/GP 价格通胀防线)存整合定稿,随实施批文档吸收迁入各 GDD 权威文档(元进度/node-reward/战斗结算/地形变异/行动经济/秘宝边界句/商店 spec)——**吸收完成前定稿不删**;喂雷流待办见上条遗留登记。 -#### 冒险 BD 各分类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) +#### 关卡节点图重构——可选节点太少(2026-10-13 用户定性为重构,须先做文档设计) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**专长**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性值提升**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),专长只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:来源 = playnote 用户试玩记录「关卡节点图展示得有问题,希望可以优化一下。可以参考哥布林弹珠的那种方式去移动」。2026-10-13 用户明确定性:**这是当前关卡节点图的重构,不是呈现优化**——理由是**现在的可选节点太少**(用户原话),所以不是换一种画法或移动方式就能解决的事。 -**用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— +**现行实态**(`level.tres` 实查,三关各 5 张模板):**第一关五张模板全是单链排列变体**——7 个节点 = 战斗 ×4 + 奖励 + 休整 + Boss,战斗深度序单调保难度坡,**变化面只有奖励与休整两位的先后次序**,全链零分叉,玩家在选路上**没有任何选择**;第二 / 三关是网状图(10 节点,带 `next` 分支,最大层宽 4–5),有分叉,但用户仍判选择量不足。参考方向 = Peglin(哥布林弹珠)的节点图移动与选路方式。 -| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(末关不给) | -|---|---|---|---| -| 专长 | **凭证形式** | **凭证形式** | **直接给**(唯一直接渠道) | -| 属性值提升 | 出 | 出(训练) | 不出现 | -| 资源 | 出 | 出(金币除外;**回复在内**) | 不出现 | +**范围(重构面,非呈现面)**:节点数量、分叉度、选路自由度。连带三面——① [关卡节点图生成](systems/冒险循环/关卡节点图生成.md)(模板池与抽签机制,现行 15 张骨架 = 3 关 × 5 需重生成);② [level-map](ux/level-map.md)(选路枢纽三停点布局定稿版,图结构改则屏面随之改);③ [敌人系统](systems/战斗循环/敌人系统.md)(遭遇表按 `enemy.tres` 的 (level_index, node_depth) 坐标索引,节点数与编号一改,行集坐标与首遇教学位断言面全部随动)。 -**Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(凭证)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**末关的 Boss 击败后不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在还有下一关可去的那些关底 Boss 身上。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 -**兑付频率(2026-10-05 用户纠错后写死)**:这条渠道的触发点是**关底 Boss 被击败**,而按 [冒险结构](systems/冒险循环/冒险结构.md) 的定义,**打掉关底 Boss 恰好就等于"通过这一关"**——两者是同一个时刻,不是一条链上的两步。**奇物不是打一场战斗给一份**:关内普通战斗节点打完了什么也不给,一关之内奇物只兑付一次。(此前《奇物》文档的"核心循环位置"图把"战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来像每场战斗通关都给一份——已于 v2.6 修正为分支图并加此口径,勿再改回链式。) +**前置(用户 2026-10-13 裁)**:**须先做文档设计讨论,不可直接开发**——方案与参考调研先行、过人闸后才可开卡。与下方「奇物呈现优化探讨备忘两孤儿点」(f)「关卡节点图展示改版先出参考调研+方案人闸」同源,两处互相指认,不重复立项。 -**凭证归专长,不归资源**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给凭证**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;凭证保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 +**归属**:[关卡节点地图](systems/冒险循环/关卡节点地图.md)(图结构与节点语义,主责)+ [关卡节点图生成](systems/冒险循环/关卡节点图生成.md)(模板池与抽签)+ [level-map](ux/level-map.md)(选路呈现)+ [敌人系统](systems/战斗循环/敌人系统.md)(遭遇行集坐标连带);版本标准侧已登记为 Alpha 待做项,见 [08-Alpha版本标准](08-Alpha版本标准.md)「一 · 系统 · 冒险循环」 -**凭证机制四条(用户 2026-10-05 定)**:① **拿到即开、不可囤积**——不进持有集,选中或买下同一时刻就开专长三选一(可囤积会让玩家把关键决策无限推迟,且把持有物语义从后门放回来;"道具"只是卡面表现)。② **罕见只在概率,不在价格**——货架价与其他商品相当,不靠高价劝退。③ **一局限购一次**(现行口径)。④ **计步保底**——连续 5 次三选一展示未出现凭证,第 6 次展示必定出现;计数对象=**展示次数**(刷新后的重新展示计入,用户明定含刷新),计数范围=奖励节点与商店**共享**,触发后清零,**限购用满后保底不再触发**。 - -**渠道定位 vs 默认原则(两句,别混)**:**渠道出哪些分类,是渠道轴自己的定位决定,不是例外**——Boss 渠道只出专长,另两类"不出现"是它的同义表述,不需另外找理由(v2.2 曾把它误当成缺理由的缺格,v2.3 修正)。**默认原则只管分类内部**:一个渠道一旦确定要出某个分类,该分类的成员就都要在它的池子里,缺席须有已登记的规则。 - -原四备选(① 专长专属三选一 ② 行为条件投放 ③ 计步保底 ④ 双池分离)已被上述定案覆盖——定案≈备选①的确定性路线,余三备选不再单独推进。**节点类型不扩类**:专长挂在 Boss 节点兑付面上(击败后追加一次专长三选一),[关卡节点地图](systems/冒险循环/关卡节点地图.md) 的节点类型仍为封闭枚举五种——此前的"是否新增节点类型"悬案由此收口。 - -**gp/heal 已安置,不再走迁移**:v2.0 把它们放进资源(用户 2026-10-05 选"暂不处置"=不做结构性迁移、不动配额),并在该类内显式登记异质性——**金币与回复是即时兑付,不进持有集、不持续生效**,与行动点上限/刷新次数(进持有账本、当局持续有效)生命周期不同。这条异质性必须留在文档里,防止后续把它们当持续生效的东西去结算。 - -**渠道约束分三层(v2.2,用户质疑后重构)**:用户问"计价物不自售不就是特判吗"。**诚实结论:形式上是的**——它确实是在分类白名单之外加的一道过滤,不是从分类推出来的。但和死特判有实质区别: - -| 层 | 是什么 | 新增渠道/奇物时 | -|---|---|---| -| 一层 分类白名单 | 分类轴决定渠道 | 新分类按判据归类,自动继承 | -| 二层 **可计算谓词** | 渠道与奇物的**结构性**关系 | **自动判定,不用改表** | -| 三层 显式例外清单 | 人为设计选择,无内在理由 | **只能逐条加,每条须写理由** | - -死特判="GP 不进商店"(一条记录,每多一个例外加一条,靠记忆维护);谓词="X 是渠道 C 的计价物 → X 不进 C"(一个函数,自动判定)。**它没有消除"在白名单外加过滤",只是把它从枚举例变成了计算谓词。** 判据:结构性原因(计价物/即时兑付/先决条件)可写成谓词;设计性原因只能进三层清单。**要害不是有没有例外,而是例外能不能被算出来。** - -三方案代价并列(不藏折中):甲=GP 单独立第四个分类(例外 0,但用渠道轴切分类轴、两轴缠回、一项一类失衡);**乙=可计算谓词(现行,1 条谓词)**;丙=死特判清单(1 条记录,靠记忆维护)。 - -**在册约束就两条**:① 金币不进商店(二层·谓词,理由=计价物不自售);② 专长在非 Boss 渠道只给凭证(一层·分类自身形态,理由=防用钱定点买构筑)。 - -**回复应在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则它应当在商店出现。现行 `shop.tres` 货架只有 attack / max_hp / armor / ap 四项,**现状与表格不对齐,须在实施批补上**。 - -**待拍板/待观察项**:① ~~资源的命名~~ 与 ~~回复是否属该类~~ **已定(v2.5)=资源,回复留在其中不拆第四类**(它与金币同为即时兑付、判据同源;拆出去第四类只剩两项)。② **专长凭证尚未入表**:出现概率 / 配额 / 全局限量三个参数都没有事实源,入池同样受档位结构锚约束。③ **专长总量与档位阈值的匹配——延后复裁**(用户 2026-10-05 定"先不调整"):终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 个数;**三关结构下是两次,加凭证最多三次**,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是**后续会有第四关**,且届时可能另做获取侧调整。**复裁触发:第四关内容批落地后实测,配合仍太少再调。** 先不调≠不成问题,登记于此防忘。 -④ **charge 标签件数不足(数据缺陷,独立登记,勿被上条盖掉)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷。**探讨态注记(2026-10-07 用户令撤回前日编入)**:补件设计仍在文档探讨阶段、上下文不足,未排批不进迭代 18(重启=用户发令;落地形态考证在册=纯 .tres 数据行、新件限现有效果 hook 则零代码) -⑤ ~~顶层命名待定~~ **已定(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 延期与备选内容总登记」二期件组相关但不同面。 - -**状态**:分工已定,**实施待排批**(2026-10-11 更新:Boss 渠道直接给专长已裁随专长实装批**本批落地**不再分期——见[奇物](systems/冒险循环/奇物.md) 2.5;池结构=案 D 已定,解耦三案系实装侧自选非用户裁定项);两项待拍板/待观察(2026-10-05 v2.1 更新) - -#### 资源两个新种类入池——刷新次数、专长获取(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) - -**状态**:待排批——须在可跑冒烟的迭代批次内完成——**实查更新+收窄(2026-10-06)**:两项实已随迭代 15②/三选一刷新批入池(刷新次数=treasure_items.tres「三选一刷新件」行;专长获取=shop.tres+adventure_table.gd 凭证行),本条收窄为边界核对与条目收口,**仍在文档探讨探索阶段、上下文不足,未排批不进迭代 18〔2026-10-07 用户令撤回前日编入;重启=用户发令〕** +**状态**:待办(**Alpha 阶段需完成**)——**设计讨论先行**:2026-10-13 用户裁:此事复杂,须先走文档设计讨论,不是可以直接开发的批次;未排期、不开卡,重启 = 用户发令。版本标准侧已列为 Alpha 待做项,见 [08-Alpha版本标准](08-Alpha版本标准.md)「一 · 系统 · 冒险循环」 #### 武器锻造系统——攻击/护甲成长差异化提案(2026-10-06 playnote 用户提案,同日令入迭代 18) @@ -156,58 +97,17 @@ **状态**:**已完成(2026-10-12)**——C/D 全部替换 + `smoke_all.gd:1199` 断言同步 + 残留肃清,均已在 worktree 分支执行并合入 master(`0c93a71` 改名主批 + `0144f60` 残留肃清批;冒烟两跑均 864 项检查 0 项失败,FAIL 仅存量 fx_reveal 脚本错误——迭代20 T1 a57489e9 遗留、iter21 在册,与本批无关)。**配套文档面**:① 地图战斗资源.md 版本表补 v0.23 跟随登记;② art-bible.md §4.6.1/§4.6.2 两表 display_name 列跟随(契约句"键名随其修订自动跟随");③ 07 体验验证清单⑫目检行跟随;④ **registry entities.yaml 登记"祝福"条目、旧名"X锻升"退役未执行**——归锻造工坊实装批术语登记面(迁移面八项⑦同域)一并做。 -#### 天赋树实装批 — 待办(开工门=用户发令;2026-10-11 用户令整卡编入迭代 21)(原「已建未接面两件」+「结构重构批」两条合并;2026-10-11 天赋树设计会话终裁扩充+同日攻防所有权切分/一线一节点/Fork一节点双态三轮换代) +#### 天赋树实装批登记欠账三条——AP 上限 clamp / 三选一刷新软上限 / Y 不入断点存档(2026-10-12 随批入册自实现报告迁立专条;2026-10-13 原批条目随入库销号拆出) -**背景**:天赋树随迭代 12 实装在役(33 节点,2026-10-04 合并 e780063);2026-10-10/11 天赋树设计会话完成全部裁决(结构换代+分叉效果定案+营地统一案甲),2026-10-11 锻造工坊裁决会话攻防所有权切分+同日用户一线一节点/Fork一节点双态裁三轮定案树侧连带换代,设计权威文档 = [天赋树](systems/跨局循环/天赋树.md) v0.8(2026-10-11 落文)。本条合并原「天赋树已建未接面两件」(2026-10-09)与「天赋树结构重构批」(2026-10-10)两专条,承载换代实装全量。 +**现状**:迭代 21 天赋树实装批已全量入库(2026-10-12,worktree g-plan2-iter21-tree,T1-T6 代码批+T7 文档同步批;实现报告=design/qa/iter21-实现报告-2026-10-12.md),批内登记欠账三条「本批不做、随批入册」;原批条目销号后由本专条承接。2026-10-13 代码复核:①③实态与登记一致仍在案;②原「另立待办」从未成条,本条即其落位。 -**内容**:① 结构换代——`meta_tree.tres` 33→12 节点:脊柱换代两轮——砍攻击淬炼×4 层+护甲淬炼×4 层(攻防所有权切分 2026-10-11 用户裁——攻/AC 唯一入口=锻造工坊路线,树零攻防来源=红线)+一线一节点收编(2026-10-11 用户裁:一个内容一个节点、等级在节点内、不拆多节点——生命淬炼/命中淬炼各一节点×4 级,原层行并级、row 字段退役;行门槛 SPINE_ROW_GATE=4 主语平移=节点第 N 级需全树总投入 ≥4×(N−1)、达成节奏重算归数值批);Fork 三组六行并三行(2026-10-11 用户裁:一节点双态——开局姿态/危险直觉/财富之道各一节点、购买解锁默认 A 态、营地零币切换 A/B、互斥由单态承载,行持 a/b 双效果键、效果按激活态取值);锻造枝三属性节点(武器锻造/护身锻造/甲胄锻造)删除,换单个免费解锁节点「锻造工坊」(前置=无,free 直接可点亮——2026-10-11 裁,原等级阈值前置作废);克制专精 Fork 组删除(Fork 词表 4→3 组);地脉共鸣解锁条件改「生命/命中两线全部买满(两节点均 4 级拉满)且 同调位 1/2/3 全部解锁」、效果改生命/命中两线 flat(攻/护分量摘除,上限 3 枚不变);同调位 1 改无前置根节点(串行 1→2→3 保留)。② 营地统一(案甲机制+四柜台呈现)——树=营地本体:生命/命中淬炼唯一入口=树脊柱淬炼节点,攻/AC 唯一入口=锻造工坊路线(所有权切分);旧属性锻造柜台退役(生命档吸收进脊柱、攻/护档归「锻造工坊实装批」路线化改造;落地前柜台维持现役);营地界面呈现=四柜台并排(树淬炼/锻造工坊/秘宝匣/奖励格图鉴——锻造工坊柜台钥匙点亮前=锁定态,宽度不足横向滚动条兜底,2026-10-11 A② 裁;程序占位先行,视觉终稿归 HUD 营地批)。③ 叠加公式换代——开局属性 = 角色基础值 + 树生命/命中淬炼 flat + 锻造路线加值 + 局内加算区(旧「柜台三档 flat」项随退役移除;命中线在账未注入披露不变)。④ 迁移重做——**已整体删除(2026-10-11 用户裁 Q3:开发阶段无迁移,旧档破坏性废弃重置,禁迁移/折算;`migrate_tree` 与 `forge_levels` 旧域随批清退删除;原「forge_levels 映射脊柱对应线」需求随脊柱换代一并作废)**。⑤ schema 面——「等级阈值前置」新形态去留=R1 开放待裁点(2026-10-11 呈报:钥匙改无前置后现无消费者,推荐裁撤);row 字段随一线一节点退役;Fork 组词表 4→3 组+单行双态(行持 a/b 双效果键,效果按激活态取值;tree_buy_fork=购买解锁默认 A 态、tree_toggle_fork=零币切态);RULE_KEYS 2→6 键扩表(三组 Fork 效果定案:开局姿态=每关首轮窗〔先手压制=每关首轮 AP+1 / 稳健拓荒=每关首轮内受击减伤〕、危险直觉=锋踩中危险格伤害减半 / 守危险格标记错误返还行动点·均每关限次、财富之道=聚 GP 获取增益 / 散消费折价;现役两键占位态随批终结);「道具工坊」改名「秘宝匣」代码连带面(文档正文已随 2026-10-10 跨文档同步批扫改,代码标识符 workshop_items 与界面文案归本批)。⑥ 刷新升级节点接线缺陷修复——树上购买写 attune_refresh_level 同一账本(定性=缺陷修复:树上购买现无消费面=白花钱;两入口并存收敛口径随批)。⑦ 同调位 2/3 槽位收编——槽位判定源从谓词表切换/合并到树节点(与秘宝实装批的槽位定序点见其进展注记)。⑧ 命中线 flat 注入——**归数值批**(先定值域再接线),随本批接线。⑨ T0 实查一项:危险直觉守侧「误标返 AP」前提 = 标错机制存在性——**已预查结案(2026-10-12),T0 免查**:查实存在且有代价(`minesweeper_rules.gd:410` 插旗零事件外发、`battle_orchestrator.gd:1117-1135` 标错分支负向兑付 + `perfect_broken` 归因锚 + 完美保险豁免 `_fx_insurance`);**原「查无→守侧换安全网向等价效果经用户裁」contingency 作废**,守侧按需求卡片**契约 12** 直落(当回合标错 + 结算时旗仍在场 ⇒ 下一轮 AP+N;单格最多一次=失误补偿;末轮标错不返)。**关联**:与「锻造工坊实装批」共用 meta_tree/forge_levels 与营地柜台面,排期两批合并评估;与「秘宝体系实现重构落地批」存在槽位定序点(见其进展注记)。 +- **① AP 上限 clamp 缺位(缺陷)**:树「开局姿态」(每关首轮 AP+1)、AP 件、时沙同走 `action_economy.gd:239 _pending_ap_delta` 排队,轮始兑现仅下限钳制(`:254 maxi(0, …)`,无上限)——旧单源时代缺陷不可观测,新叠加源使其可观测化。 +- **② 三选一刷新软上限(设计问)**:停点内 GP 付费刷新倍率增长(×1.8/次曲线)×停点间基础价随进度递增,全程无软上限——是否设上限归调参批裁决。 +- **③ Y(_attune_refresh_y)不入断点存档(可利用漏洞)**:断点快照存 `_refresh_stock`(adventure_runner.gd:236 回填)与 Y 升级档(账号级 attune_refresh_level),不存当局 Y 余量;续玩路径自参数面重新整额注入(:225)——用完 Y 退菜单再续玩即满血复活。V15 仅验账本一致性,未覆盖该面;刷新链路可用性不受影响。 -**归属**:[天赋树](systems/跨局循环/天赋树.md) v0.8 实装(树结构换代+营地统一;跨 [锻造工坊](systems/跨局循环/锻造工坊.md)(工作间=其柜台改造对象,攻防数值唯一实装面在彼批)/ [元进度](systems/跨局循环/元进度.md)(注入通道与柜台退役面)/ [秘宝](systems/跨局循环/秘宝.md)(同调位求值与秘宝匣工作间)/ 数值批(命中值域与全部 provisional 数值)) +**归属**:① [行动经济](systems/排雷循环/行动经济.md);② 行动经济+三选一/商店刷新经济(数值归 Alpha 收官 M4 数值批);③ [存档序列化](systems/表现与支撑/存档序列化.md)(断点域)+ [冒险结构](systems/冒险循环/冒险结构.md)(续玩参数面)——三件均系缺陷修批/调参批输入,未排批 -**状态**:✅ **已入库(2026-10-12,/goal+iter U0 开工——worktree g-plan2-iter21-tree 全量交付;T1-T6 代码批+T7 文档同步批,批末重闸全绿;实现报告=design/qa/iter21-实现报告-2026-10-12.md)**。R1 按卡片既定默认=裁撤案执行(schema 只保留点亮前置,未增设 requires_level),出口报告追认单列明。**登记欠账三条随批入册**:①AP 上限 clamp 缺位(树+AP 件+时沙同走 _pending_ap_delta 无上限——新叠加源使既有缺陷可观测化);②三选一刷新软上限(停点内倍率增长×停点间基础价随进度递增,另立待办);③Y(_attune_refresh_y)不入断点存档漏洞(用完退菜单再续玩满血复活——V15 仅验账本一致性,刷新链路可用性不受本批影响)。**需求卡片 v1.7(2026-10-12 完备性审查十一裁)**——在 v1.4→v1.6 三轮换代基础上新增裁决:①账号层攻/AC 空窗期**知情接受**(Alpha 开发阶段,不设过渡、不登记欠账);②**守侧=失误补偿**(契约 12:触发主语=当回合标错动作非在场标错旗;单格最多一次;末轮不返);③折扣(散)**只覆盖商品购买价格、不含刷新**(实现=范围口径特判 `level_runner._spend_discounted`,不走效果引擎合成订阅、无效果键名;若改走合成订阅须避让已被 `yield_mult` 占用的 `cost_mult`),聚的乘算落**入账前**;④限次承载=`adventure_counters`+`domain:"adventure"`+关卡切换点清零(**不升 v7**);⑤**开发阶段无视任何文档层条款**,不为本批增设豁免/例外条款;⑥**生涯页三投影整行删**(`forge_level`/`workshop_status`/`tree_nodes`——生涯不统计天赋树与账号成长态);⑦三条登记欠账、本批不做=AP 上限 clamp / 三选一刷新软上限(另立待办)/ Y 不入断点;⑧§5 之外另查到的 42 处旧表述**不做清扫**(不做加法)。**需求卡片 v1.4→v1.6 连带换代(2026-10-11 攻防所有权切分+一线一节点+Fork一节点双态三轮)**:design/research/需求卡片-天赋树实装批-2026-10-11.md——结构目标 33→12 全卡换代(脊柱=生命/命中一线一节点×4 级、Fork=三节点双态〔购买解锁默认 A 态、零币切换、行持 a/b 双效果键〕)、锻造工坊钥匙前置改无、地脉共鸣条件效果换代、注入公式换代、营地呈现措辞对齐四柜台、行门槛平移节点等级(用户驳「合并破坏统计/门槛」之疑——节点等级可区分可计数,门槛主语=第 N 级);T 估时复核 ≈7.0-8.0d(T1 下修,其余不动);**开放待裁点 R1=schema「等级阈值前置」新形态去留(钥匙改无前置后现无消费者,推荐裁撤)**——裁决前不阻开工门(默认按裁撤案排程,用户推翻即先改文档);2026-10-11 用户令整卡编入迭代 21(不切分)不变。**历史落卡记录(v1.1→v1.3)**:grilling 五裁全落(Q1 刷新升级双入口并存·秘宝侧重复后续审查轮用户自办/Q2 槽位数量树说了算+旧条件作废删除随批清扫/Q3 开发阶段无迁移·旧存档废弃重置·迁移需求整体删除/Q4 本批程序占位重排/Q5 转排期规则默认先行);歧义扫描六裁(/grilling)已落 GDD v0.4:术语回归「危险格/安全格」/彩蛋三线/行门槛含全部节点/聚仅战斗掉落+散全消费面/限次生命周期/三处旧裁决换代(彩蛋三线后随 v0.6 攻防所有权切分换代为两线);架构面结论=现有分层承载得住零重构,三处小扩〔schema 阈值前置形态(去留=R1 待裁)/效果引擎关卡域状态/营地呈现重排〕随批 - -#### 秘宝体系实现重构落地批 — 已编入迭代 22(2026-10-11 用户令)(2026-10-10 用户令「文档层已改完,记录新设计的实现重构落地」登记) - -**背景**:文档层已全部换代完毕——现行事实源=秘宝.md「目录(重设计 v1)」新 15 件(三档 12 件+解锁混合制〔基础件钥石购买+特定件条件解锁〕+设计骨架〔效果轴三方向×代价轴三段〕,数值 provisional 归调参批);第一版 14 件(旧九件+表外四件+魔法提灯)已全数裁退役入素材库(2026-10-10 用户裁「退役与封存都进素材库」,deferred 态清零——显影尘/地穴全图卷原 deferred 封存态一并终结);「道具工坊」更名「秘宝匣」(2026-10-10 天赋树裁定批,文档正文已扫改)。**代码与数据层未落**——`treasure_items.tres` 现行行仍系旧体系:表外四行(显影尘/地穴全图卷字段值 deferred、工兵令/探宝罗盘 retired)+旧九件行+魔法提灯行及卡④接线。 - -**内容**:① 新目录 12 件按「目录(重设计 v1)」实装(2026-10-11 裁:回能器删〔孤儿件〕、换装券撤〔终裁冒险中不存在任何更换途径〕、第四只手删〔净收益为零自指件〕)(数据行重建/迁移、解锁混合制——钥石购买面+解锁条件表〔由 attunement_growth.tres 改造,逐件条件随需求卡片〕、装配与同调位面、秘宝匣柜台语义、使用代价各形态实现〔关卡级/战斗级限量、转化获取三通道——见秘宝.md 设计骨架代价轴〕);② 旧数据行清理(表外四行+旧九件行+提灯行拆线+卡④接线拆除,deferred 态清零——文档与数据表的窗口期不一致随本批消解);③ 专长侧联动:`feats.tres` 27 件旧行删除(名单=素材库表二)+新专长框架实装衔接;④ 空配置验收闸(三选一池空兜底/商店空货架/装配面空目录);⑤ 池结构选型三案(概率上限解耦的耦合案随批选型)与配额数字;⑥ 效果引擎扩签核实与停手挂点;⑦ 件级跨事件状态账、秘宝参数注入面两疑似漏项 T0 核实。 - -**需求卡片**:design/research/需求卡片-秘宝体系实现重构落地批-2026-10-11.md(v1.0 定稿零待裁——C1-C5 已裁,2026-10-11;含逐件分配锁定表/装配不可变契约/槽位树接缝) - -**归属**:[秘宝](systems/跨局循环/秘宝.md)「目录(重设计 v1)」实装 + [道具退役素材库](../research/道具退役素材库.md) 对应清理面 - -**状态**:✅ **已入库(2026-10-12,/goal+iter U0 开工令——worktree g-plan2-iter22-treasure,T1-T6 五提交全量交付;批末重闸全绿=冒烟 898/0+run_all 22 套+probe 含 click/full+render_gate+doc 三闸对基线零新增+熵增 PASS;实现报告=design/qa/iter22-实现报告-2026-10-12.md,代拍板追认单与 GDD 反哺点随报告待用户)。残留人闸=实机目检秘宝解锁-装配正常流程体验(07 ㉑ 在册)**。条目②旧数据行清理随 T1 全量换代销号;③专长侧联动已由迭代 20 承载销账(进展注记在案);magic_vs_magic 交叉核对已结(魔网织者在删除名单——锻造工坊批③作废,2026-10-11 D 组核结);本条目余项(①④⑤⑥⑦)随本批交付或经反哺点/另批承接,逐项去向见实现报告 §六 - -**进展注记(2026-10-10)**:数据文件面本批不依赖锻造工坊线;**槽位面依赖修正(2026-10-10 设计骨架批后)**——同调位数量与品质的语义已裁归天赋树同调位节点(树侧接线归天赋树线/天赋树实装批),本批与该批存在槽位定序点(先树后宝或合并评估,随排期裁),现役谓词表求值作为本批落地前的过渡基座仍成立;秘宝体系文档正确性检查已过(五文件交叉核对:仅 registry 三处现行旧称「魔法道具」残留,已随检查批修正;其余命中均为版本历史与更名记载的合法引述)——**检查通过;设计侧裁点经 grilling 审查轮+设计骨架批已清零(秘宝.md v2.3),按三段流程设计段完成**。**③专长侧联动已拆出独立成卡(2026-10-11 用户发令;同日用户纠正=奇物线单独成卡、秘宝面不并入)**:design/research/需求卡片-专长实装批-2026-10-11.md(T0-T10 ≈10-12d 单迭代交付;**Q1-Q3 已全裁清零**〔Q1 Boss 兑付换代/Q2 占位值/Q3 单迭代〕——**卡片成立,零待裁点;✅ 专长实装批已入库(2026-10-11 迭代 20 T0-T10 全落 master——③专长侧联动由该批承载销账:feats.tres 29 行换代/词表扩签/停手挂点 dig_stop 全落)**;奇物侧设计+命名+裁定齐备〔奇物.md v3.15〕)——本条目余项(①②④⑤⑥⑦)维持冻结待发令,其中⑥效果引擎扩签核实与停手挂点由专长实装批 T1 先行承载。两条线交叉核对点一处随本批 T0:feats.tres 的 magic_vs_magic 条件值所属专长件是否在素材库表二 27 件删除名单内(若在,锻造工坊实装批③「改值复活」随之作废)——**已核结(2026-10-11 锻造工坊裁决会话 D 组)**:所属件=魔网织者(mana_weaver),在名单内,③「改值复活」作废,废卡随专长 27 件退役删行批消解。 - - -#### 迭代 20 专长实装批 GDD 反哺点(五条清单——2026-10-11 随批登记,逐点待用户裁决后另批落文) - -**内容**:迭代 20 实现与设计权威的差异/缺口清单,全文见 [迭代 20 实现报告](../qa/iter20-实现报告-2026-10-11.md) §四——①奇物.md 预评估口径(N-1 落值)+疼痛记忆/血税/时沙/弃图兑换四件落法回写;②冒险结构.md「关卡大奖励」节对齐(专长三选一+按档配比加权);③难度曲线与Boss.md 配额投放读数(四级 104 构成/曝光槽止步分布位移);④02-系统清单.md 奇物行换代(29 件已实装/流派机制退役);⑤奇物呈现——✅ 已随 2026-10-12 呈现修复批落地销账(逐件行「件名 ×N」+卡面摘族名入库,474)。 - -**归属**:各设计权威文档(奇物.md/冒险结构.md/难度曲线与Boss.md/02-系统清单.md)+呈现面(06 在册奇物呈现条) - -**状态**:**①②③④全部落文(2026-10-12,用户逐裁令)**——①奇物.md v3.16(N-1 落行注记+疼痛记忆笔误改法+时沙/弃图/血税落法回写+扩签登记承载换代+血税卡面 desc fe0970d);②冒险结构.md v0.20(关卡大奖励节换代=专长三选一按档配比加权+回血,提升池机制段移交奇物.md);③难度曲线与Boss.md v0.28(投放读数只测不判注记——数值不动);④02-系统清单.md v1.24(奇物行换代);⑤✅ 已随 2026-10-12 呈现修复批销账(474)。**①-⑤全部出清,本条随下次收口清理批移除** - -#### 迭代 20 代拍板追认单十条裁决结果(2026-10-12 用户逐裁——全追认) - -**逐条结果**(实现报告 §三 对应):①件数 29 行追认(卡 §10.4 推荐案补签);②四级配额 70/25/9/0=104 追认(凭证四件入稀有档 +6 张 provisional 归调参批);③传说档 0 追认(无内容设计,空集合法);④词表落法映射追认(FACTS+9/事件+2/效果类型+7/算子+1);⑤预评估 N-1 追认(触发计数正常,测试钉住);⑥疼痛记忆「下一次攻击」追认——**设计措辞「下场战斗」系笔误**,落文直接改件表措辞,无需 battle-gate 面;⑦时沙=下一战首轮兑付追认;⑧弃图兑换=停手首攻全额附加不拆分追认;⑨血税滞后一战生效追认——**件表行与卡面 desc 补生效时点,修正案**:「本局每触一次陷阱,最大生命 −2;每封印命中一次,攻击 +1(下一战起生效)」(随反哺批落文终稿);⑩潜伏缺陷修正两件追认。 - -**连带裁定**:血税件本体**保留**(2026-10-12 用户裁——契约尖点件,双向同账设计成立,数值归调参批)。 - -**术语澄清(用户重申 2026-10-12)**:流派=**对外永不显示**(命名铁律不变),**对内保留大致划分**(现行=事件族五系:开格/插旗/踩雷/节奏/战斗)——v2.9「框架级作废」所指=流派标签作玩法机制(集件质变/FeatsEngine 流派档位),**非对内划分本身**;后续文档与呈报表述按此口径,勿再以「流派已裁废」否定对内归属问答。 - -**归属**:奇物.md 反哺落文批(随上方反哺点①合并一批——**已执行,2026-10-12 奇物.md v3.16**) - -**状态**:十条全追认;落文批已执行(奇物.md v3.16+血税卡面 desc fe0970d,冒烟 864/0 全绿) - -#### 效果引擎条件事实扩签——生命比例(背水实现前置需求)(2026-10-11 用户批登记) - -**内容**:效果引擎条件事实词表新增「生命比例」事实(当前生命 ≤50% 类条件判定)——[奇物](systems/冒险循环/奇物.md) 专长件「背水」(when 生命 ≤50%:受伤额外 −N,v3.13 生存件扩容批)的**实现前置需求**,用户明令标注;随专长实装批一并落(实装批=上方「秘宝体系实现重构落地批」③ 专长侧联动)。 - -**归属**:[奇物](systems/冒险循环/奇物.md)「扩签登记」节(词表扩项现行事实源)+ 效果引擎(`game/core/effect_engine.gd` 条件事实词表修订随实装批) - -**状态**:✅ 已落地销号(2026-10-11 专长实装批 T1——hp_ratio 事实入 FACTS 词表〔百分比 int 口径〕,背水行 when hp_ratio lte 50 在役;effect_words_t1_test 钉面) +**状态**:待办(缺陷①③+设计问②;2026-10-13 自 06「天赋树实装批」条拆出专条并代码复核) #### 现役 UI/文案两处自相冲突(2026-10-09 登记——审查批呈报 B5,用户裁「记录待办、后续迭代解决」) @@ -263,6 +163,26 @@ **状态**:待办 +#### 第一关遭遇表数值异常——难度曲线倒挂与敌种疑似填错(2026-10-13 实查登记,Alpha 阶段需完成) + +**现状**:来源 = playnote 用户试玩记录「第一关的第二个节点数值有问题」。2026-10-13 实查 `enemy.tres`(按 `(level_index, node_depth)` 索引),第一关五行如下: + +| 坐标 | 敌种 | hp | atk | 数量 | +|---|---|---|---|---| +| (1,0) | 地精 | 8 | 1 | 1–2 | +| (1,1) | 地精一伙 | 4 | 1 | 2–3 | +| (1,2) | 熊地精 | 50 | 1 | 1 | +| (1,3) | 大地精 | 14 | 1 | 2–3 | +| (1,4) | 食人魔酋长(关底 Boss) | 72 | 1 | 1 | + +三处异常:① **难度倒挂**——(1,1) 血量 4 低于前一节点 (1,0) 的 8;② **曲线不单调**——(1,2) 熊地精血量 50,是前一节点的 12.5 倍、下一节点大地精(14)的 3.6 倍、逼近关底 Boss(72)的七成,而 (1,3) 又跌回 14;③ **敌种疑似填错**——熊地精的正式位置是第二关的 (2,5) 混编遭遇行,出现在第一关第三个节点不合常理。 + +**与 M4 数值批的区别(用户 2026-10-13 就此提问)**:M4 是「形状对、调大小」的全局数值统一标定;本条是**形状本身不对**,属配置错误级别,不是标定问题。等 M4 一并处理会让第一关的崩坏长期挂在 Alpha 里——玩家第一局就会撞上。 + +**归属**:[敌人系统](systems/战斗循环/敌人系统.md)(遭遇表行值与敌种归属)+ [难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md)(难度曲线单调性) + +**状态**:待办(**Alpha 阶段需完成**)——**修复方式待裁**:甲 = 即时修(单独开小批,不依赖 M4)/乙 = 归 M4 数值批一并调整/丙 = 先排查定性再定修复方式。呈报方推荐甲(与全局标定是两件事,等 M4 会长期挂账)。连带面已同步 [08-Alpha版本标准](08-Alpha版本标准.md)「二 · 内容量」敌种池行 + #### 削弱档位的最终数值 **现状**:削弱取值域 [60,85] 与投值 −65 来自旧体系裁决;"标中旗必须比随便挖一格更值"的当量终值由[战斗结算](systems/战斗循环/战斗结算.md)与[地图战斗资源](systems/战斗循环/地图战斗资源.md)共裁,尚未闭合。**语义侧已定案(2026-09-18 盘问会话,结构修复批落地)**:削弱叠层改续时——同名重复授予只刷新剩余结算数、层数恒 1(结构性消饱和,×2 叠满池触底 ×0 的免伤轮从根杜绝);现行表值为临时值(provisional),duration 终值与当量锚复算归状态层重设计批 @@ -349,6 +269,18 @@ **状态**:待办(挂号备查,未排期) +#### 战斗节点地图类型差异化(更多地图主题)——排 Beta(2026-10-13 用户裁定) + +**现状**:来源 = playnote 用户试玩记录「修改地图的奖励类型:战斗节点增加不同的地图类型,比如有些图踩雷受到更多的伤害,有些图标雷可以造成更多的伤害,有些图伤害会减半需要凑更多清图奖励(这些都是暂时的设定)」。 + +**已实装的部分**:整图变异「贫矿脉」(回复与护甲资源减少、攻击资源增多)已落地,Boss 图每张都带,目检项见 [07-体验验证清单](07-体验验证清单.md) ⑪——它正是本条思路的首发形态。本条剩余面 = 在此之上再做**更多地图主题**(踩雷伤害更高 / 标雷伤害更高 / 伤害减半需凑更多清图奖励)。 + +**2026-10-13 用户裁定**:**排 Beta 版本,Alpha 不做**——已移入 [08-Alpha版本标准](08-Alpha版本标准.md)「六 · Alpha 不含」节。 + +**归属**:[棋盘生成](systems/排雷循环/棋盘生成.md)(board_biome 图主题词表)+ [地图战斗资源](systems/战斗循环/地图战斗资源.md)(图主题差异化插槽)+ [地形变异](systems/排雷循环/地形变异.md)(整图变异承载面) + +**状态**:待办(**Beta 阶段**,Alpha 不做)——重启 = Beta 立项时按本条原始想法重新评估(用户标注「这些都是暂时的设定」,到时需重订而非照抄) + #### 基线通关率越带,加难杠杆扫描未执行 **现状**:现行扫描读数 60%,越 [30%, 50%] 上界(2026-09-18 注:目标带已随 2026-09-17 数值纪律收口批改为 [10%, 25%]〔用户拍板〕,旧读数 60% 系压缩批前口径、已失效——本条现状文本按新带校正:新带下加难紧迫性待验收批重测后重判)。三类杠杆候选已登记:血量锚走廊 r_boss [1.1, 1.35](Boss 生命 180–207)(2026-09-17 注:数值压缩批后 Boss 生命已 ÷3 缩水,180–207 为压缩前基线锚,复算随调参批)、群战上探、注入衰减 0.5 → 0.6;扫描步未执行。落带前全部现行行值维持 provisional-pending-scan。**2026-09-20 地形变异首批类型定稿批注记(台账 96)**:变异已天然加难一大步——R3+unique 基线格读数(atk+0%/hp+0%,对无变异基线):普通档 L1 83%→43% / L2 87%→60%、完美档 L1 87%→70% / L2 87%→60%,加难扫描的紧迫性与剩余缺口随本批重判;**新增调参杠杆位 = 变异 effect_value(荆棘丛 1 / 岩浆 2)与 percent_of_cells(5%)/ per_level_bonus(+2/关)**,扫描时与既有三类杠杆合并比较(行值全部 provisional 归本批)。**2026-09-20 重投基线批注记(台账 105〔登记时撞并行会话 103 号,顺延让号〕)**:主角增益续时+伏击退役/警觉+行动点第八型三批行为变更后全量重投(N=300/画像/关,production/qa/mc-reinvest-baseline-2026-09-20.md)——普通档 L1 47% / L2 34%;同日基线通关率带随用户拍板分带修正为 L1 [35,55] / L2 [25,45](旧 [10,25] 失锚作废)——**新带下普通档双关落带,加难紧迫性解除**;完美档 56%/40% 亦落带(完美档带 [35,65] 不变);本条剩余面 = 调参批的行值 provisional→正式扫描义务(门 = 真人批 k 系数) @@ -388,6 +320,18 @@ **状态**:待办(2026-10-06 曾编入迭代 18 卡②,2026-10-07 用户令撤回——探讨阶段未排批;同日短暂编入迭代 19,随迭代 19 清空一并撤出,是否再排批待用户确认) +#### 第二 / 三关棋盘观感——亮度与对比度(2026-10-13 用户裁定,Alpha 阶段需完成) + +**现状**:来源 = playnote 用户试玩记录「UI 优化,第二第三关的棋盘看着太累了;不知道是因为亮度还是对比度的原因,看着非常费劲,非常不舒服」。2026-10-13 用户裁定:**这是需要做的**,且本就属版本标准的覆盖范围——[08-Alpha版本标准](08-Alpha版本标准.md)「五 · 表现」已新增「棋盘观感(第二 / 三关亮度与对比度)」行,标待做(此前是隐式覆盖,现显式化,免得被当成已完成)。 + +**开工前须先定性(沿用既有裁决)**:是**素材轴**问题(棋盘瓦片与格面图标本身的明度与色相),还是 **UI 轴**问题(舞台底色与叠加层的对比关系)——两轴修法完全不同,定性错了等于白改一轮。该定性要求原登记于下方「奇物呈现优化探讨备忘两孤儿点」(e),本条承接并转为正式待办。 + +**与相邻条目的分工**:① 本条管**棋盘区域整体的观感**(亮度 / 对比度 / 费劲感),是体感问题;② 上方「呈现层残余 <4.5:1 文字位」管**具体文字位的对比度读数不达标**(B 区站桩名行 / 敌顺位徽标 / RAP 反馈行三处),是机检可判的硬指标。两条不同面,不互相替代,各自保留。 + +**归属**:[HUD框架](systems/表现与支撑/HUD框架.md)(UI 轴:舞台底与叠加层)+ [美术圣经](../art/art-bible.md)(素材轴:瓦片与格面图标的明度色相)——定性前两方共裁 + +**状态**:待办(**Alpha 阶段需完成**)——开工前先过「素材轴 / UI 轴」定性人闸;未排批 + #### 棋盘格边长三方取值不一致——待扩板定档处置(2026-10-06 登记) **现状**:迭代 16「UI 设计对齐批」P2 已裁「棋盘格边长零改动」(本次不动棋盘游戏画面),由此三方取值不一致作为**已知偏差**登记:①代码 = `board_view.gd:251` 动态公式 `clampi(cell, 26, 46)` + `:114` 默认 46.0;②art-bible §8.1(:433) 冻结锚点 = 45px(10×10)/ 36px(12×12);③demo 原型 = 44px(`src/ui-prototype.html:288`);另有 HUD框架:72 装板校验区间 [30,45]。**当前未被任何断言触发**(属潜在不一致,不是缺陷)。按需求卡片契约 R7「禁单侧改完留漂移」,本批**代码与文档均不改**;处置时机 = 扩板(13×13/14×14)定档时随格边长专项一并处理(§8.1 亦注明扩板换算值未定稿)。来源=`UI对齐批需求卡片(已退役,git 历史可查)` §2.1「已知偏差」行。 @@ -404,6 +348,18 @@ **状态**:**已裁决案乙(2026-09-30 迭代 9 三裁决,用户「按推荐来」)**——本迭代不升档,先收 Alpha 真人读数再定(B 区舞台落影已改善存在感;T10 黄金图基准本迭代内建成不被作废);升档批=M-4 候选位,届时提灯点亮解禁候选一并重议;A4 尺寸基线冻结(立绘 46×48/小人源 32×32)维持有效。**2026-10-04 用户令:暂不做、先忽略**(真人读数虽已收,用户裁不编入当前迭代表、挂起不讨论;重启=用户点名)。**2026-10-06 用户令:优先级再降**(维持挂起;同日 playnote 立绘批评〔像素粒度过低看不清 / 怪物大小比例不合理〕留 playnote 在案,重启时并入设计输入——**该批评实已由同日「立绘逐键定档批」承接兑现**:①像素粒度过低 → 派生管线改「pixel-1 紧裁 → 等比缩至各自档高 → dom_block_resize」,八敌源档 36–94 全过可读门槛(实测 24 糊 / 32 可读 / 48 清楚);②怪物大小比例不合理 → 体量语义改**生物体型**(character-design §5.2,弃强度线性映射)+ 八敌逐键定档〔art-bible §8.2〕)。**2026-10-06 方案二批收口注记**:v3.0 的「档位上调方向候选」已被 art-bible v3.7 八敌逐键定档(源档 36–94、显示 ×2 整数)**实质收口**——存在感问题改经方案二(B 区 270 / 立绘显示上限 188 / 血条状态落底排)解决,不再走 64/96/128 升档路线;本条剩余挂起项 = 提灯点亮解禁候选(重启=用户点名或 M-4 升档批)。 +#### 立绘清晰度回退评估——是否改用高清图(2026-10-13 用户裁定归美术线,Alpha 阶段需完成) + +**现状**:来源 = playnote 用户试玩记录「现在的立绘太丑了,像素化的粒度太低了,导致根本看不清立绘;看是否可以改回用较为高清的图片?还有一个问题是大小的问题……现在地精的图片看起来比熊地精还要大,这并不合理」。2026-10-13 用户裁定:与「第二 / 三关棋盘观感」同属**美术线更新**。 + +**两个子问题现状不同,勿混为一谈**: +- **子问题一 = 怪物大小比例不合理**:**已兑现**——体量语义改生物体型(character-design §5.2,弃强度线性映射)+ 八敌逐键定档(art-bible §8.2)。剩余面 = 用户是否复核验收。 +- **子问题二 = 像素粒度过低看不清 / 是否改回高清图**:**未决,且与既定方向冲突**。粒度问题已改派生管线(八敌源档 36–94 全过可读门槛:24 糊 / 32 可读 / 48 清楚),但用户「改回高清图」这句提问与现行**像素风定档**是相反方向。方向未裁:是维持像素风继续优化派生管线,还是真的回退到高清图。 + +**归属**:[角色设计](../art/character-design.md)(立绘规格与体量语义)+ [美术圣经](../art/art-bible.md)(像素管线与档位) + +**状态**:待办(**Alpha 阶段需完成**)——**方向待裁**(维持像素风 vs 回退高清图),已列 [08-Alpha版本标准](08-Alpha版本标准.md)「七 · 未决项」第 11 项;子问题一(大小比例)待用户复核验收 + #### 站桩帧动画——Alpha 定版闸前完成(2026-10-06 P0-3 延后登记,用户拍板) **现状**:审计报告 P0-3——定稿立绘零帧动画;现行动画全部程序化(死亡碎裂/受击闪白/意图徽标弹入 = 程序 tween,非帧资产),用户裁定**动画是较往后的优化,Alpha 版本定版时间点之前完成即可**——当前 Alpha 开发期达成「看上去可游玩」即可。路线未拍板,审计报告三路线供重启时裁决:①**拆件驱动**(报告推荐:定稿立绘切部件〔头/躯干/臂/腿/武器〕+ 节点层级 tween 驱动——零身份漂移、帧数无限、内存小;项目已有先例 = shovel_swing 三帧 + 程序化死亡碎裂)②AI 关键姿势 + 人工修 + 程序补帧 ③全 AI 逐帧(不推荐:身份漂移/像素抖动)。前置依赖 = 「立绘→派生形态」管线(等比整数缩放 + 降色 ≤32 + 脚底基线对齐 + 命名合规)——该管线同时是棋盘小人重出与八敌档位重算的前提。 @@ -502,27 +458,6 @@ **状态**:待办(机制已落码;调参、天赋增益与文档回写未落) -#### active.md 定性与裁剪 — 裁决零(定性)+ 四项推论待裁(2026-10-09 会话呈报) - -**背景**:根目录 active.md 已从状态文件漂移成追加式日志——928 行约 1MB,快照节标题写「≤10 行」实际堆了 129 条,编号条目四百多条,另有五个 2026 年 9 月时代的死节;「只追加不删除」成因已定案=收口协议只定义追加从未定义退役(遗漏而非规定)+doc-conventions.md:177「状态记录=历史变更记录」豁免句系 agent 起草越权(用户从未裁决永久保留)。2026-10-09 用户指出定性是前置问题:若是状态记录(历史变更记录),可全量记录+定期归档成文件链;若是状态文件,只追加的做法本身不成立。先定性,其余裁断随之收敛。完整论证见 active.md 状态记录 416 号条目。 - -**裁决零:active.md 的定性——状态文件还是状态记录(前置)**。agent 推荐定性为状态文件,论据三条:①出身——文件第一行自述「会话状态……唯一状态源」,日志是收口协议起草时搭进来的器官,「收口记一笔」的动作用户批准过,但「该文件因此是历史档案、旧条目永久保留」的身份从未被决定;②职能——它存在的理由是会话开工时回答「现在」时态的问题(在哪/什么进行中/什么阻塞/下一步),历史时态的问题各有现行事实源(git 提交史承载批次级叙述、06 承载待裁、GDD 版本历史承载规则演变);③宪法一致——2026-10-01 吸收即死已立「git=变更记录」,177 行豁免句是全库唯一偏离,定性为状态不是立新规而是把既有宪法补齐到这个文件。日志承担的跨会话接力职能由滚动窗口保住(快照 ≤10 条+当前迭代条目),删前迁移检查(吸收即死程序)保证没被现行事实源吸收的结论零丢失。 -备选定性=状态记录:名正言顺全量记录+按里程碑滚入归档文件形成文件链(如 worklog-2026-09→2026-10);自洽且常见,收益=单一入口可翻全部历史,代价=多养一份资产+一套归档流程+与 git 双份记账。agent 不荐:先按状态定性跑,日后若发现 git 提交史不够翻,归档链随时可从 git 生成,届时建链零成本。裁=定性为状态文件(荐)/定性为状态记录+建归档链。 - -**定性为状态文件时,四项推论**: -- 推论一(doc-conventions.md:177 定性句):就是把裁决零落文的动作——改为「状态记录=当前状态与最近批次的记录;历史变更一律以 git 提交史为准」,同行「日志引用不阻塞其他文档删除」功能保留。裁=认可措辞或改字。 -- 推论二(清旧条目时机):窗口怎么滑——甲=每迭代收口时清已合入 master 批次的旧条目(荐),丙=超 30 条兜底可与甲并用;乙=每里程碑清是日志身份才需要的归档节奏,状态定性下撤除。规则原文:「迭代收口落账后,删除状态记录中已合入 master 的历史批次条目,只保留当前迭代的记录与未决事项;删除前确认结论已吸收进权威文档(06 待办/roadmap/GDD),未吸收的先迁再删。」(末句系吸收即死既有铁律自动适用。) -- 推论三(一次性大裁保留线五项)=状态定义本身:①文件头指针节(阶段/引擎/架构/文档索引);②项目当前位置(按当前真实状态重写);③状态快照节(执行标题既有「≤10 行」,只留最近十条);④未决面(进行中批次/待人闸/待裁点);⑤最近一个迭代的日志条目。其余约九成删除,编号 416 起继续递增不重排(提交信息与记忆均引编号)。裁=照单或增补。 -- 推论四(九月死节五节)=纯死状态直接删:「GDD 设计顺序(前 10 = MVP)」「GDD 写作纪律」「垂直切片速度日志(2026-09-10 启动)」「Session Extract — /review-all-gdds 2026-09-14」「项目当前位置」旧内容(节本体在推论三②保留);删前按吸收即死过一遍独有规则先吸进 doc-conventions。裁=照准全删。 - -**若定性为状态记录**:推论三改为近期条目留正文+旧条目按里程碑滚入归档文件;推论四死节先归档再删;推论一、二不变(177 句改为「状态记录=历史变更记录,按里程碑归档」口径)。 - -**执行方式**(不另设裁决):大裁=独立小批、无并行批次窗口、主区直改 active.md(豁免面)、改完先给用户摘要再提交。 - -**归属**:文档治理(active.md 定性、生命周期与收口协议) - -**状态**:已裁决并执行(2026-10-09 用户裁:定性=状态文件/退役=每迭代收口清+30 条兜底/保留线含当前迭代条目/九月死节全删;立宪六处已随 03c4b4c 入库;active.md 大裁与本案状态改注在工作区,提交待用户过目摘要后放行) - ### 文档与结构 #### 文档/结构闸存量欠账(2026-10-08 迭代 19 总收口批登记) diff --git a/design/gdd/07-体验验证清单.md b/design/gdd/07-体验验证清单.md index 23f50bc9..c8ba1a61 100644 --- a/design/gdd/07-体验验证清单.md +++ b/design/gdd/07-体验验证清单.md @@ -1,6 +1,6 @@ # 07-体验验证清单 -本文登记**需要真人体验/观测才能下结论**的验证项,与 [06-待办清单](06-待办清单.md) 分工:06 登记"要拍板的事",本文登记"要玩过才知道的事"。每条注明**结论回流**路径——体验感受不满不等于当场改数:数值终值归其登记的归属批,体验反馈是该批的输入。 +本文登记**需要真人体验/观测才能下结论**的验证项,与 [06-待办清单](06-待办清单.md) 分工:06 登记"要拍板的事",本文登记"要玩过才知道的事"。每条注明**结论回流**路径——体验感受不满不等于当场改数:数值终值归其登记的归属批,体验反馈是该批的输入。**登记不阻塞(2026-10-12 用户立规)**:真人检测项登记进本清单后,实现批照常合并收口、后续迭代照常开工,验收时间由用户自行安排,结论按各条回流路径回流。 状态词汇设计权威=增益状态 状态词表节(原提案 v1.0 已按生命周期条款退役,git 提交 7f24b64 可考) @@ -205,7 +205,7 @@ - **解锁面**:攒钥石→秘宝匣柜台钥石购买(余额不足钮禁用、购买后行板即时刷新为已解锁);条件件进度呈现(远程镐=通关 1 次/刷新执照=Boss 击杀 3 次/天眼=通关 3 且 Boss 4/信标网络=真视使用 10——达标未解锁时开营地/冒险收束即自动入账)。 - **装配面**:槽位=树同调位点亮数(未点亮树=0 槽不能装配);件档≤格档(普通/优秀/稀有递增向下兼容——稀有件装普通格被拒);未解锁件装配钮禁用;满位禁选。 -- **生效面抽查**:晨操令/双管装填首轮 AP、阔视野带视野 8→12、巢穴预告开局报雷数 toast、线香单格真视(战斗级一次)、天眼 3×3 安全格直开(关卡级一次)、试炼镐 HUD 兑换钮积点滑耗、储备罐停手转存变厚、远程镐距 2 可挖、信标网络任意格插旗、刷新练习/刷新执照加仓。 +- **生效面抽查**:晨操令/双管装填首轮 AP、阔视野带视野 8→12、巢穴预告开局报雷数 toast、线香单格真视(战斗级一次)、天眼 3×3 安全格直开(关卡级一次)、试炼镐每开 8 安全格自动 AP+1(自动兑付——C 区秘宝槽悬停浮窗看进度 N/8;AP 恰归零时兑付优先、轮不结束)、储备罐停手转存变厚、远程镐距 2 可挖、信标网络任意格插旗、刷新练习/刷新执照加仓。(原「HUD 兑换钮积点滑耗」观测点随 2026-10-12 反哺批⑤自动兑付裁决换代) - **装配不可变**:冒险中无任何换装入口(三选一/奖励节点/战斗内零替换交互——旧替换子交互已拆)。 - 验证方式:用户实机目检(本批自动闸外唯一人闸;能力验证半已由自动化闸覆盖=V1-V19)。 diff --git a/design/gdd/systems/排雷循环/行动经济.md b/design/gdd/systems/排雷循环/行动经济.md index 5a4c830b..fa88abd9 100644 --- a/design/gdd/systems/排雷循环/行动经济.md +++ b/design/gdd/systems/排雷循环/行动经济.md @@ -79,7 +79,7 @@ ### 停手与储备行动点 -停手是玩家在挖掘期任意时刻的主动决定:立即结束本轮,剩余行动点按 1:1 原值存入储备池——没有乘数、没有加成。图没开完,下一轮接着在同一张图上挖。停手不是收入来源,而是纯粹的风险管理工具:它买到的是"退出权",不是战斗收益。停手意图经排雷玩法的批次提交入口进入账本(保证单一结算序),由账本仲裁后自行外发轮次结束消息。 +停手是玩家在挖掘期任意时刻的主动决定:立即结束本轮,剩余行动点按 1:1 原值存入储备池——基线没有乘数、没有加成。图没开完,下一轮接着在同一张图上挖。停手不是收入来源,而是纯粹的风险管理工具:它买到的是"退出权",不是战斗收益。停手意图经排雷玩法的批次提交入口进入账本(保证单一结算序),由账本仲裁后自行外发轮次结束消息。**转存率参数化(迭代 22 秘宝批反哺落文,2026-10-12)**:转存率实现为 `finish_round_stop(transfer_pct)` 参数面——缺省 100=1:1 与旧口径逐位一致;秘宝「储备罐」注入 125=1.25:1(整数除法向下取整——每 4 点剩余 AP 多转 1 点 RAP,零头顺延向下);无装配时行为与参数化前逐位相同。转存率归秘宝操作包络参数,本账本的仲裁与发射结构不变。 储备池的生命周期以一场战斗为界:战斗内跨轮次、跨雷图一直累积;战斗结束立刻清零。清零必须在界面上可见,防止玩家觉得"攒的钱凭空没了"。MVP 阶段储备池没有上限。 @@ -267,6 +267,7 @@ | v0.2 | 2026-09-16 | AP 压速批文档面值同步(用户拍板 8→6,削标旗 rush 单轮兑付吞吐为无伤通关根因的主阀门):ap_per_round 与 rap_refresh_cost 现行值 8→6,随动保持"满预算停手 = 恰好一刷"耦合;数据表与 registry 已同批改,本批补文档面正文两处与调参表两行 | | v0.3 | 2026-09-17 | 数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 data/tables/*.tres 与 registry),0 处失同步修正——价目改「统一价目 / 标准价(见 action_economy.tres)」口径,每轮点数与刷新门槛改表值指路;调参表「现行值」列整列指路化;注记 refresh_cap_per_round 与表字段 refresh_max_per_round 命名不一致(字段名对齐待批)。顺带:P0 闭环「扣 1 点」改「按价扣费」;终扫补两处漏网——巢穴约束例句「每轮花 2 点重插」改「重复计费重插」、P0 闭环「每轮至多 2 次」改刷新上限读表 | | v0.4 | 2026-09-19 | 插旗不可逆批(用户拍板全套落地):拔旗动作退役——设计目的/统一价目/价目表/布尔入口清单/P0 闭环/调参表六处删"拔旗",flag_pull_ap_cost 字段随 schema 与 data 表同批删除;插旗行补"旗 = 一次性承诺、纠错 = 直接挖开"口径 | +| v0.12 | 2026-10-12 | **迭代 22 反哺落文批(实现报告 §三⑦,用户裁「落文」)**:「停手与储备行动点」节补转存率参数化注记——`finish_round_stop(transfer_pct)` 缺省 100=1:1 逐位同旧;秘宝「储备罐」注入 125=1.25:1(整数除法向下取整,每 4 点剩余 AP 多转 1)。机制结构零改动(参数面已随迭代 22 T3 在役) | | v0.5 | 2026-09-20 | **格面资源八型批同步(用户拍板——与敌人系统 / 战斗结算 / 地图战斗资源 / registry / 切片代码同批)**:① F1 条款 3 改写——原"敌方伏击暴露不等式"随伏击机制退役作废,惩罚当量对账模型归难度曲线与Boss 调参批重立;② 新增「下轮行动点修正」节——action 型格面资源经 queue_ap_delta 排队、下一轮开始兑现(基线 ap_per_round + 净值、下限 0、兑现后清零),跨轮携带量口径改写(RAP 唯一显式携带资源 + 一次性修正队列);③ 节拍不变式(满停一轮 = 恰好一刷)补扰动注记 | | v0.6 | 2026-10-01 | **失同步清偿 + 跨冒险行动点加成轴节(迭代 10 奖励重构批——与冒险结构 / registry 同批)**:①失同步欠账清偿——ap_per_round 真实配置 = **8**(action_economy.tres,Package B 2026-09-22 批 6→8 回调,表内批注在案);v0.2 批 8→6 系最后一次文档面记录,此后配置面单独回调未回写本文,本批补记(rap_refresh_cost 与 ap_per_round 的「满预算停手 = 恰好一刷」节拍耦合以现行 8/8 维持);②新增「跨冒险行动点加成轴」节——统一冒险加算区扩第四轴(行动点),经战斗开始入参覆盖值通道、只在每场战斗开轮首轮兑现一次;价值锚 = 冒险表 bonus_ap_flat / bonus_cap_ap(迭代 10 三选一 AP 件,全冒险 2 次上限),调参表补跨表行 | | v0.7 | 2026-10-03 | **两 AP 件兑现通道注记(迭代 11 第①批同调实施批——需求卡片 §十连带)**:同调目录两 AP 件兑现通道落位——①工兵晨令(被动·限时)=战斗开始首轮 queue_ap_delta 入队 + 轮始段续队(前 effective_rounds 轮每轮 +1,表值化 P4 甲),复用「跨冒险行动点加成轴」同族排队通道;②掘进蓄能(主动·充能)=grant_ap 当轮加量(同挖掘期 ap_grant 通道),受理闸=战斗域安全开格积点(charge_n 格/点);账本零新机制(queue_ap_delta/grant_ap 两既有原语),充能扣减经共享账本(attune_charges)同引用直改 | diff --git a/design/gdd/systems/表现与支撑/存档序列化.md b/design/gdd/systems/表现与支撑/存档序列化.md index 1331287e..197b5bcb 100644 --- a/design/gdd/systems/表现与支撑/存档序列化.md +++ b/design/gdd/systems/表现与支撑/存档序列化.md @@ -99,12 +99,13 @@ SaveManager 不依赖任何玩法系统就能工作:它是被动的承载方 | `recent_summaries` | 最近冒险摘要副本,最新在前,最多 10 条 | [冒险结构](../冒险循环/冒险结构.md) | | `first_adventure_done` | 首冒险完成标记(新档默认 false;旧档缺省按已完成兜底) | [元进度](../跨局循环/元进度.md) | | `adventure_total` | 冒险总局数终身计数(开局即计、含放弃与失败,v6) | [生涯](../跨局循环/生涯.md) | -| `adventure_cleared` | 通关局数终身计数(三关全通才计 1,v6) | [生涯](../跨局循环/生涯.md) | +| `adventure_cleared` | 通关局数终身计数(三关全通才计 1,v6;秘宝条件解锁计数键) | [生涯](../跨局循环/生涯.md) | +| `vision_used` | 真视类工具累计使用次数终身计数(迭代 22 新增——信标网络解锁行为条件;**v6 域后扩列补零、不升版本**;写入唯一经 `add_vision_used`,冒险收束聚合入账;断点随件键=`vision_counter_used`,续玩回填缺省 0) | [秘宝](../跨局循环/秘宝.md) | | ~~`forge_levels`~~ | ~~属性锻造三档等级~~ | **已退役**(迭代 21 T5:行族/访问器/域随攻防所有权切分删除——`save_manager.gd:12-14/:399-401` 白名单收口;继任 = 锻造工坊路线等级域,见下行计划登记) | | `forge_routes`(**已落地 v7——锻造工坊实装批 T5,迭代 23**) | {levels: 六路线等级(sword/spear/staff/light/heavy/ward), unlocked: 直购解锁路线 id 清单, weapon: 当前武器路线 id, armor: 当前甲路线 id};无特效域;旧档缺键补齐 = 初始持有态 | [锻造工坊](../跨局循环/锻造工坊.md) | | `breakpoint` | 冒险断点快照(停点粒度续玩域;空字典 = 无断点合法态——「继续上局」隐藏) | [冒险结构](../冒险循环/冒险结构.md) | -v4/v5/v6 各域缺键由读取方按默认值补齐(空集合/0),旧档零迁移损失;收束自增域(通关次数/Boss 计数/终身计数)的唯一入账点 = `apply_adventure_summary`。 +v4/v5/v6 各域缺键由读取方按默认值补齐(空集合/0),旧档零迁移损失;收束自增域(通关次数/Boss 计数/终身计数/真视使用计数)的唯一入账点 = `apply_adventure_summary`(vision_used 走 `add_vision_used` 收束)。**v6 域后扩列不升版先例**:`vision_used`(迭代 22,2026-10-12——迭代 21 同款口径;断点随件 `vision_counter_used` 同批新增;旧断点随件键 `bonus_aux_carry` 已随替换子交互拆除退役,迭代 22 T5)。 消费面纪律:其他系统只经 SaveManager 的类型化访问器(读余额/加钥石/花钥石、读写树等级等)与域更新原语(`apply_adventure_summary`)操作存档,不碰内部数据结构。 @@ -192,4 +193,5 @@ MVP 不要求本系统的闭环([不做清单](../../05-不做清单.md)把单 | v1.3 | 2026-10-01 | **版本兼容口径批(迭代 10 追加批 g 裁——用户拍板:版本兼容对齐 semantic version 标准)**:①版本策略成文口径——本域版本号语义 = **向后兼容的次序版本**:升版只允许「旧档在新代码可读可玩可续玩」(缺新键=合法空态、内容零丢失、断点可续),禁「新档在旧代码可读」承诺(向前兼容不做);②v2→v3 迁移体=空迁移(断点附随件扩列〔bonus_taken/bonus_pending/bonus_result/bonus_aux_carry/keystone_drops + bonus.ap 轴〕与摘要 additive 键 keystone_drops 均由读取方 .get 兜底——兼容性由冒烟 v1→v3 与 v2→v3 断点续玩断言承载,2026-10-01 增);③中断节点兼容义务:每升版必须在冒烟断言「旧版断点→新版续玩受理」(现行三档 v1/v2/v3 齐) | | v1.4 | 2026-10-09 | **文档正确性审查批·独立复核(worktree docaudit-2026-10-09——版本滞后四代换代,全部代码实证 save_manager.gd SAVE_FORMAT_VERSION=6)**:①数据模型 JSON 与域清单表换代 v2→v6——补 v4 同调三域(boss_kill_count/attunement_equipped/attune_refresh_level,迭代 11①)、v5 树域(tree_nodes/fork_sides,迭代 12)、v6 生涯两终身计数域(adventure_total/adventure_cleared,迭代 18 卡④)逐域 owner 行;②版本与迁移节换代——当前=6、迁移链五件(v1→v2…v5→v6,含 v4→v5 三体系迁移指路天赋树);③调参表版本常量 2→6;④缺键补齐纪律句补记(读取方默认补零/空集合,收束自增唯一入账=apply_adventure_summary)。注:v3/v4/v5/v6 四次升版当时均未回写本文,本批一次性清偿 | | v1.5 | 2026-10-12 | **锻造工坊完备性检查批随迁(用户令:新加内容现在补、不等实装批)**:①**预登记锻造路线域**(计划 v7):域清单表 + 版本沿革补 `forge_routes`(三武器等级+三甲等级+当前选中标记、无特效域、旧档破坏性废弃归锻造工坊实装批;域名以实装批定名为准);②**清偿 forge_levels 残留**——JSON 示例、域清单表删该域(代码侧已随迭代 21 T5 删除:`save_manager.gd:12-14/:399-401` 白名单收口);迁移链 v4→v5 的「三体系迁移」体改述为已删除(`save_manager.gd:96-98`、`meta_progression.gd:294-295`);③**补登两漏域**(代码实证 `save_manager.gd:119-139`):`tree_struct`(树结构版本标记,迭代 21 T5,缺失=换代前结构加载废弃重置,owner 天赋树)、`first_adventure_done`(首冒险完成标记,新档默认 false、旧档缺省按已完成兜底,`meta_progression.gd:100` 置位,owner 元进度);④消费面纪律句「读写锻造等级」→「读写树等级」(访问器已随行族退役删除)。版本号常量仍 =6(v7 未落地) | -| v1.6 | 2026-10-12 | **锻造工坊实装批随迁(迭代 23 T5——v7 落地)**:①域清单表 `forge_routes` 计划行→实际落地态({levels 六路线等级 + unlocked 直购解锁清单 + weapon/armor 当前选中标记},域内键名以实装批定名);②版本与迁移节——当前 =7、迁移链补 v6→v7(空迁移=缺键补齐模式,解锁态派生不落档三通道);③旧档口径订正——「破坏性废弃」→「缺键补齐 = 初始持有态」(开发阶段禁迁移禁折算纪律不变,契约 4);④域界注记——forge_routes 属 meta 永久进度域(契约 2 反面清单不涉) | +| v1.6 | 2026-10-12 | **迭代 22 反哺落文批(实现报告 §三⑥,用户裁「落文」)**:域清单表补 `vision_used` 行(真视使用终身计数,迭代 22 新增,v6 域后扩列补零不升版本——迭代 21 先例;断点随件 `vision_counter_used` 同批新增、旧随件键 `bonus_aux_carry` 随替换子交互拆除退役);缺键补齐纪律句补 v6 扩列注;零迁移口径复核=SAVE_FORMAT_VERSION 仍 6(`save_manager.gd:49`),无迁移分支新增 | +| v1.7 | 2026-10-12 | **锻造工坊实装批随迁(迭代 23 T5——v7 落地;承 v1.6 的 vision_used 登记)**:①域清单表 `forge_routes` 计划行→实际落地态({levels 六路线等级 + unlocked 直购解锁清单 + weapon/armor 当前选中标记},域内键名以实装批定名);②版本与迁移节——当前 =7、迁移链补 v6→v7(空迁移=缺键补齐模式,解锁态派生不落档三通道);③旧档口径订正——「破坏性废弃」→「缺键补齐 = 初始持有态」(开发阶段禁迁移禁折算纪律不变,契约 4);④域界注记——forge_routes 属 meta 永久进度域(契约 2 反面清单不涉) | diff --git a/design/gdd/systems/跨局循环/元进度.md b/design/gdd/systems/跨局循环/元进度.md index 7dac4742..178572bd 100644 --- a/design/gdd/systems/跨局循环/元进度.md +++ b/design/gdd/systems/跨局循环/元进度.md @@ -62,7 +62,7 @@ | 柜台 | 内容 | 解锁渠道 | |---|---|---| | 属性锻造 | 生命上限、基础攻击、护甲等级——三档可重复升级的属性强化 | 钥石直购 | -| 秘宝匣 | 秘宝解锁与同调装配——**件的目录与效果权威定义在[秘宝](秘宝.md)「目录(重设计 v1)」**(12 件三档〔2026-10-11 裁回能器删/换装券撤/第四只手删〕;旧目录全退役只作素材库) | 解锁=混合制(基础件钥石购买/特定件条件解锁——见秘宝.md「道具从哪来」;装配只在冒险开始前配置,冒险中零更换途径〔2026-10-11 终裁〕);同调装配段已随同调实施批落地(2026-10-03,见版本历史 v1.6);钥石定价与阈值归定价批/调参批 | +| 秘宝匣 | 秘宝解锁与同调装配——**件的目录与效果权威定义在[秘宝](秘宝.md)「目录(重设计 v1)」**(12 件三档〔2026-10-11 裁回能器删/换装券撤/第四只手删〕;旧目录全退役只作素材库) | 解锁=混合制(基础件钥石购买/特定件条件解锁——见秘宝.md「道具从哪来」;装配只在冒险开始前配置,冒险中零更换途径〔2026-10-11 终裁〕);**迭代 22 实装批落地(2026-10-12)**:购买钮(余额不足禁用态)+条件解锁进度呈现+分档装配呈现(名后缀·档位/未解锁禁装)+空目录合法态;柜台数据投影=`treasure_shop_status`(解锁态/条件进度/价格单点);旧道具工坊渠道面(行族/词表/解锁函数)已随批退役;钥石定价与阈值 provisional 归调参批 | | 奖励格图鉴 | 特殊奖励格的解锁——更强效果的格面 | 结构位现定;格子内容排 Alpha,随[地图战斗资源](../战斗循环/地图战斗资源.md)差异化批落地 | 属性锻造的树形节点结构已随迭代 12 落地在役——**结构/节点/数值的现行事实源 = [天赋树](天赋树.md),本文不复制树侧内容、只作指路**;本柜台三档直线强化与树淬炼 flat 在注入面叠加生效(注入口径见下文「跨局注入」节)。 @@ -73,7 +73,7 @@ **投值语言锁定(2026-09-18 数值语言拍板)**:三柜台属性强化一律 **flat 整数加减**("每级 +1 基础攻击"式,而非"+50% 攻击"式)——避开百分比词条被数值成长稀释的先例陷阱、守住数字可读性锚;具体每级数值仍归元进度设计批投值。 -三条柜台纪律:**定价曲线一律几何递增**(每级费用按公比上浮——原则已拍板,起步价与公比数字归设计批配读数),与产出逻辑配套:深层关钥石产出多、后级强化贵,逼玩家往深处走。**秘宝匣首版只挂通关次数渠道**是排期裁决(定价体系未建时的零定价依赖落地形态),不是终态。**存档义务随柜台产生**:钥石余额、永久强化等级表、每关通关次数表、Boss 首杀标记位——四件已逐域登记在 registry `save_file` 条目(内容 owner = 元进度,承载 owner = [存档序列化](../表现与支撑/存档序列化.md))。 +三条柜台纪律:**定价曲线一律几何递增**(每级费用按公比上浮——原则已拍板,起步价与公比数字归设计批配读数),与产出逻辑配套:深层关钥石产出多、后级强化贵,逼玩家往深处走。~~秘宝匣首版只挂通关次数渠道~~(历史排期裁决已消解:秘宝匣现役=钥石直购+条件解锁混合制,迭代 22 落地,2026-10-12)。**存档义务随柜台产生**:钥石余额、永久强化等级表、每关通关次数表、Boss 首杀标记位——四件已逐域登记在 registry `save_file` 条目(内容 owner = 元进度,承载 owner = [存档序列化](../表现与支撑/存档序列化.md))。 护甲等级进首版属性柜台是 2026-09-18 拍板(用户选 A),其代价条款见下方换算率节的强条目登记。 @@ -130,7 +130,7 @@ MVP 不要求本系统的闭环([不做清单](../../05-不做清单.md)整体 | 优先级 | 内容 | 后置原因 | |---|---|---| | P1 | 三柜台内容铺量与定价数字 | 柜台结构已定稿;清单明细、几何定价的起步价与公比、Boss 两档产出数值,随设计批配读数投值 | -| P1 | 秘宝匣钥石直购价 | 首版只挂通关次数渠道(零定价依赖);定价体系建成后补价,收敛双渠道 | +| P1 | 秘宝匣钥石直购价 | **已投 provisional 占位**(普通档 10/优秀档 25 钥石,迭代 22 落地,2026-10-12);终值归调参批(原「首版只挂通关次数渠道」排期态随混合制落地消解) | | P1 | 奖励格图鉴的格子内容 | 排 Alpha,随[地图战斗资源](../战斗循环/地图战斗资源.md)差异化批 | | P1 | 换算率表数值行标定 | **已完成**(2026-09-23 换算率标定批——首版三行投值 6/9/1,护甲行强条目重测随批履行并修复护甲断链)(原系笔误孤例,registry 与 meta.tres 均为 6/9/1——2026-09-30 勘误) | | P2 | 营地界面与解锁呈现实现 | 归[HUD 框架](../表现与支撑/HUD框架.md)协作批,以表现层样张过审为前置 | @@ -183,3 +183,4 @@ MVP 不要求本系统的闭环([不做清单](../../05-不做清单.md)整体 | v1.14 | 2026-10-11 | **营地统一案甲随迁(2026-10-11 天赋树设计会话终裁)**:三柜台节补「营地统一」段——树=营地本体、属性升级唯一入口=树脊柱淬炼节点、本属性锻造柜台随 06「天赋树实装批」退役吸收进脊柱(落地前维持现役)、锻造柜台与秘宝匣转工作间钥匙模型、图鉴常开;设计权威文档指路 = 天赋树.md v0.2。机制零改动(退役与公式换代随实装批) | | v1.15 | 2026-10-11 | 锻造工坊更名批随迁(机械扫):三柜台节指路句随系统更名「武器锻造→锻造工坊」换代链接与名称(06 实装批条名同步「锻造工坊实装批」;版本历史行内旧名按历史记载保留)。机制零改动 | | v1.16 | 2026-10-12 | **完备性检查批随迁(用户令:有缺漏即补齐)**:①「跨局注入」节补开局属性四层叠加公式(角色基础值+树生命/命中 flat+锻造路线加值+局内加算区 flat;入战 AC 三层)——锻造工坊与天赋树两文档共指本节为「通道现行事实源」而公式缺位,本次落实;原「属性锻造三档是数值覆盖」随迭代 21 T5 行族退役换代;②锻造工坊 v0.6 引用版本号 v0.1→v0.5 连带校正(三柜台节)。机制零改动 | +| v1.17 | 2026-10-12 | **迭代 22 反哺落文批(实现报告 §三④,用户裁「落文」)**:秘宝匣行补迭代 22 实装实录(购买钮禁用态/条件进度呈现/分档装配呈现/空目录合法态/treasure_shop_status 投影/旧道具工坊渠道面退役);柜台纪律「首版只挂通关次数渠道」排期态消解注记;P1 秘宝匣定价行换代(provisional 10/25 已投,终值归调参批)。机制零改动 | diff --git a/design/gdd/systems/跨局循环/秘宝.md b/design/gdd/systems/跨局循环/秘宝.md index 2c4cc0d8..621281ef 100644 --- a/design/gdd/systems/跨局循环/秘宝.md +++ b/design/gdd/systems/跨局循环/秘宝.md @@ -7,55 +7,55 @@ ## 定位与形态 -**现行形态 = 局外同调件**:开局前在营地装配(营地·秘宝匣柜台「同调装配」段)、占同调位(0 起步、固定 3 格,每件固定占 1 格)、被动件整局生效/主动件每冒险充能(冒险开始重置)。实现面 = `treasure_items.tres` + `game/core/attunement.gd`(同调位数量判定源=天赋树同调位节点点亮数——2026-10-11 Q2 裁甲、迭代 21 T4 槽位收编落地;原 `attunement_growth.tres` 谓词表已随批退役;解锁条件表由秘宝实装批另建承载);新目录实装批落地前,现役代码按本框架运行。 +**现行形态 = 局外同调件**:开局前在营地装配(营地·秘宝匣柜台「同调装配」段)、占同调位(0 起步、固定 3 格,每件固定占 1 格)、被动件整局生效/主动件每冒险充能(冒险开始重置)。实现面 = `treasure_items.tres` + `game/core/attunement.gd`(同调位数量判定源=天赋树同调位节点点亮数——2026-10-11 Q2 裁甲、迭代 21 T4 槽位收编落地;原 `attunement_growth.tres` 谓词表已随批退役;解锁条件=数据行内 `unlock_requires` 字段承载——迭代 22 实装落地,2026-10-12)。**新目录 12 件已随迭代 22 实装批全量落地(2026-10-12,T1-T7)**,逐件实录见「目录(重设计 v1)」各表实态列。 **沿革一句话**:本系统前身为切片期掉落消耗品形态(2026-09-29 迭代 7),2026-10-03 随同调实施批整体替换为现行形态;旧目录九件已全数退役入素材库(2026-10-08/10 用户裁)。历史细节见版本历史与 git 提交史。 **现行形态速览**: -- **同调位分档**(2026-10-07 用户裁):同调位分三档=普通格/优秀格/稀有格;装配规则=**槽位可装 ≤ 槽位档位的件**(向下兼容,不惩罚早解锁);格品质随天赋树同调位节点递增(1=普通格/2=优秀格/3=稀有格,2026-10-10 用户裁;树侧接线由天赋树的批次承接)。装配面须呈现槽位档位;实装归实装批。 -- **旧目录退役指针**:旧目录九件、魔法提灯、机制向三件处置已全数退役入素材库(表一 14 件)——现行目录见下方「目录(重设计 v1)」节。 +- **同调位分档**(2026-10-07 用户裁):同调位分三档=普通格/优秀格/稀有格;装配规则=**槽位可装 ≤ 槽位档位的件**(向下兼容,不惩罚早解锁);格品质随天赋树同调位节点递增(1=普通格/2=优秀格/3=稀有格,2026-10-10 用户裁;树侧接线=迭代 21 T4 槽位收编落地)。装配面呈现槽位档位(迭代 22 秘宝匣柜台落地)。 +- **旧目录退役指针**:旧目录九件、魔法提灯、机制向三件处置已全数退役入素材库(表一 14 件)——现行目录见下方「目录(重设计 v1)」节;代码旧行已全数删除(迭代 20 先行删 2 行+迭代 22 T1 删 12 行,2026-10-12)。 - **三选一刷新双源**:刷新能力=**存量账+临时账**两本账——存量账=持久(开局注入基值 0;来源=秘宝匣刷新升级行购买〔meta.tres attune_refresh_upgrade 行族〕+刷新练习件加仓;跨呈现持续、用完即无)、临时账=每次三选一呈现重置为基线 0(来源=效果件的临时注入,未用不结转);**消耗顺序=先扣临时、不足再扣存量**(2026-10-10 用户复述定案;代码字段名 X/Y 与两账的字母对表归实装批 T0,正文不依赖字母)。重抽复用现有洗牌逻辑(reward_pick),池规则全保留;自动游玩模式默认不刷。**GP(局内金币)付费档(2026-10-06 用户令)**:免费双源用尽后可 GP 付费刷新,价=ceil(20×1.8^本次停点已付费刷) provisional(与商店货架刷新读同两个调参参数 shop_refresh_*,单点调参);付费刷计数每停点清零;钱包=冒险 GP 同一账本(唯一入口 LevelRunner.spend_gp);余额不足=钮禁用(不隐藏)。店内专长凭证三选一暂不挂刷新面(扩面须先裁凭证保底计数交互)。**两账语义**两账语义的框架定义见[核心循环](../../01-核心循环.md)「生命周期轴」节。「三选一呈现」是比节点更细的事件——奖励节点、Boss 通关奖励、商店(凭证)三处都触发。奇物「刷新次数+1」类资源件的语义=存量账一次性加仓。 - **🔴 承重契约**(红线;其中真视范围等由数据加载校验强制):效果不允许写成直接加减属性的裸数值——效果类型只能取封闭白名单;真视(直接标出危险格的效果,定义见「核心规则」)单次范围 ≤3×3;核心逻辑不做异步等待;零随机;排雷玩法零特判;危险格与安全格的分布同池冻结——资源类件只能调整权重投影、不能改池结构;**棋盘事实不可变**(秘宝效果不移除、不增改危险格位置与邻接数字——效果形态只允许信息呈现与开格动作;2026-10-10 用户裁,原爆破工兵包「中立移除」即违规形态、随件退役废止)。 - **验收分层**:难度验收分两层——同调系统关闭时沿用现行通关率验收带;开启时验收带按投值平移(归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)投值;商店开关分层同法)。 ## 目录(重设计 v1) -> 秘宝目录的权威版本(2026-10-08 用户终审全落——「都可以先落;旧的去掉只保留新的」)。代号制:正式命名归用户;数值全 provisional 归调参批;实装归实装批。准入约束(机能件判定尺/定义卡 3+1 句)见[核心循环](../../01-核心循环.md)「道具三层职责与分界」节。旧目录全数退役,名单与处置映射见[道具退役素材库](../../../research/道具退役素材库.md)表一。 +> 秘宝目录的权威版本(2026-10-08 用户终审全落——「都可以先落;旧的去掉只保留新的」;**2026-10-12 迭代 22 实装批全量落地**,逐件实态=item_id/解锁/效果实现三实态列)。代号制:正式命名归用户;数值全 provisional 归调参批。准入约束(机能件判定尺/定义卡 3+1 句)见[核心循环](../../01-核心循环.md)「道具三层职责与分界」节。旧目录全数退役,名单与处置映射见[道具退役素材库](../../../research/道具退役素材库.md)表一。 ### 三档骨架 - 数量:普通档 7 件 / 优秀档 3 件 / 稀有档 2 件(优秀档两位空位=2026-10-11 回能器删〔孤儿件〕/换装券撤〔冒险中零更换途径无此件〕;稀有档一位空位=2026-10-11 第四只手删〔净收益为零的自指件——占一槽换一槽、携带量 3=3 且自锁唯一稀有格〕——空位不构成补件议程;传说位留空,与跨系统的四级稀有度框架〔普通/优秀/稀有/传说〕兼容——秘宝不用满四档)。 -- 解锁方式(2026-10-10 用户裁**混合制**):基础件=秘宝匣内**钥石购买**解锁(定价归定价批);特定件=**条件解锁**(游玩里程碑或行为条件——如通关次数、某类工具使用次数,逐件定条件写解锁条件表,阈值 provisional 归调参批)。逐件分配(哪几件钥石、哪几件条件)随实装批需求卡片定;旧「档位谓词分级(普通 0/优秀中/稀有高里程碑)」口径作废。 +- 解锁方式(2026-10-10 用户裁**混合制**):基础件=秘宝匣内**钥石购买**解锁(定价归定价批);特定件=**条件解锁**(游玩里程碑或行为条件,阈值 provisional 归调参批)。逐件分配已随实装批锁定(2026-10-11 用户裁 C1):钥石购买 8 件(普通 7 件各 10 钥石+双管装填 25 钥石)+条件解锁 4 件(远程镐=生涯通关≥1/刷新执照=Boss 击杀≥3/天眼=通关≥3 且 Boss 击杀≥4/信标网络=真视类工具累计使用≥10);解锁条件承载=`treasure_items.tres` 行内 `unlock_requires` 字段(计数键 adventure_cleared/boss_kill_count/vision_used,schema 词表校验单点——2026-10-12 迭代 22 落地);旧「档位谓词分级(普通 0/优秀中/稀有高里程碑)」口径作废。 - 验收纪律:**同档内不许存在严格支配关系**(同档 A 在所有维度不劣于 B 即违规)——防首选内定的结构检查。 - 装配面:同调位分档(普通格/优秀格/稀有格,槽位可装 ≤ 槽位档位的件)——见「定位与形态」速览。 ### 普通档(7 件) -| 代号 | 一句话 | 写哪本账/时点 | -|---|---|---| -| 晨操令 | 每场战斗第 1 轮 +1 AP | AP 池/轮始 | -| 阔视野带 | 类型微光范围 8 格→12 格 | 视野参数/常时 | -| 试炼镐 | 每开 4 安全格积 1 点,满 2 点换当轮 +1 AP | AP 池/主动触发 | -| 刷新练习 | 三选一刷新存量 +1 | 刷新存量账/装配即得 | -| 储备罐 | 停手转存率 1:1 → 1.25:1 | 储备行动点(RAP)转存率参数/停手时 | -| 巢穴预告 | 装板后揭示本板危险格数量 | 危险格计数(不碰危险格分布)/装板时 | -| 线香 | 每战一次:真视单格 | 真视窄域(≤3×3 契约内)/主动 | +| 代号 | item_id | 一句话 | 写哪本账/时点 | 解锁(迭代 22 实态) | 效果实现 | +|---|---|---|---|---|---| +| 晨操令 | morning_order | 每场战斗第 1 轮 +1 AP | AP 池/轮始 | 钥石 10 provisional | 订阅行 round_start→grant_ap | +| 阔视野带 | wide_scout_band | 类型微光范围 8 格→12 格 | 视野参数/常时 | 钥石 10 provisional | 参数面 light_radius_bonus(+4) | +| 试炼镐 | trial_pick | 每开 8 个安全格,当轮 AP +1(自动) | AP 池/开格自动兑付 | 钥石 10 provisional | ap_charge_safe 满 charge_n=8 自动 grant_ap(2026-10-12 反哺批⑤用户裁自动兑付) | +| 刷新练习 | refresh_practice | 三选一刷新存量 +1 | 刷新存量账/装配即得 | 钥石 10 provisional | 参数面 refresh_stock_grant | +| 储备罐 | reserve_jar | 停手转存率 1:1 → 1.25:1 | 储备行动点(RAP)转存率参数/停手时 | 钥石 10 provisional | 参数面 rap_transfer_mult(125) | +| 巢穴预告 | nest_forecast | 装板后揭示本板危险格数量 | 危险格计数(不碰危险格分布)/装板时 | 钥石 10 provisional | 订阅行 board_installed→mine_count_preview(呈现=开局 toast) | +| 线香 | incense_stick | 每战一次:真视单格 | 真视窄域(≤3×3 契约内)/主动 | 钥石 10 provisional | reveal_tiles(战斗级充能) | ### 优秀档(3 件) -| 代号 | 一句话 | 写哪本账/时点 | -|---|---|---| -| 双管装填 | 每战前 2 轮各 +1 AP | AP 池/轮始 | -| 远程镐 | 挖掘距离 +1(可挖距英雄 2 格的格) | 可达性规则/常时 | -| 刷新执照 | 商店免费刷新 +2/店 | 商店刷新计数/进店时 | +| 代号 | item_id | 一句话 | 写哪本账/时点 | 解锁(迭代 22 实态) | 效果实现 | +|---|---|---|---|---|---| +| 双管装填 | twin_loader | 每战前 2 轮各 +1 AP | AP 池/轮始 | 钥石 25 provisional | 订阅行 round_start→grant_ap | +| 远程镐 | ranged_pick | 挖掘距离 +1(可挖距英雄 2 格的格) | 可达性规则/常时 | 条件:生涯通关 ≥1 provisional | 参数面 dig_range_bonus | +| 刷新执照 | refresh_license | 商店免费刷新 +2/店 | 商店刷新计数/进店时 | 条件:Boss 击杀 ≥3 provisional | 参数面 shop_refresh_bonus | ### 稀有档(2 件) -| 代号 | 一句话 | 写哪本账/时点 | -|---|---|---| -| 天眼 | 每关一次:选 3×3,危险格显示且安全格直接开 | 真视+开格复合/主动 | -| 信标网络 | 插旗不限相邻(可对任何未开格插旗) | 旗的可达性规则/常时 | +| 代号 | item_id | 一句话 | 写哪本账/时点 | 解锁(迭代 22 实态) | 效果实现 | +|---|---|---|---|---|---| +| 天眼 | sky_eye | 每关一次:选 3×3,危险格显示且安全格直接开 | 真视+开格复合/主动 | 条件:通关 ≥3 且 Boss 击杀 ≥4 provisional | reveal_tiles+safe_dig(关卡级充能;安全格开格按普通挖格全额兑付免 AP——C5 裁) | +| 信标网络 | beacon_network | 插旗不限相邻(可对任何未开格插旗) | 旗的可达性规则/常时 | 条件:真视类工具累计使用 ≥10 provisional(vision_used 生涯计数域) | 参数面 flag_range_free | ## 设计骨架(可设计方向 × 代价空间) @@ -74,16 +74,16 @@ ### 代价轴(新件设计时与效果格组合选用) -**获取代价**(解锁侧):钥石购买(基础件)/ 条件解锁(游玩里程碑·行为条件,逐件写解锁条件表)。 +**获取代价**(解锁侧):钥石购买(基础件)/ 条件解锁(游玩里程碑·行为条件)——逐件分配与阈值实录见「目录(重设计 v1)」三表解锁列。 **使用代价**(使用侧,按重置周期分层): | 形态 | 语义 | 计量与重置 | 现状 | |---|---|---|---| -| 冒险级限量 | 每次冒险共 N 次 | 开局满额,用完即止 | 现役形态(旧目录主动件充能 2 次;新目录暂无对应件) | +| 冒险级限量 | 每次冒险共 N 次 | 开局满额,用完即止 | 空位(旧目录主动件充能 2 次形态随目录退役) | | 关卡级限量 | 每关 N 次 | 每关开始重置 | 天眼(每关一次) | | 战斗级限量 | 每场战斗 N 次 | 每场战斗开始重置 | 线香(每战一次) | -| 转化获取 | 付出换取使用次数:行为转化(开 N 格→+1)/ 资源转化(耗 N AP→+1)/ 时间触发(每 N 回合→+1) | 积点或触发账本,滑动消耗 | 试炼镐(行为通道在役);资源/时间两通道空位 | +| 转化获取 | 付出换取使用次数:行为转化(开 N 格→+1)/ 资源转化(耗 N AP→+1)/ 时间触发(每 N 回合→+1) | 行为账本满额即时兑付 | 试炼镐(行为通道在役——**每开 8 个安全格自动兑当轮 AP+1:无玩家发起入口、账即时清空〔2026-10-12 反哺批⑤用户裁自动兑付〕;战斗级重置=账即时清空自然无感;兑付时序=揭示先于本格扣费,AP 归零恰逢满点时先兑再扣、轮次不因本格结束**);资源/时间两通道空位 | | 常时(无使用代价) | 被动件无「使用」概念——占装配位即全部代价 | — | 现役被动件 | **恢复机制**(独立参数,不与限量周期混同):基准=冒险开局满额;中途回充现役**无来源**——回能器已删(2026-10-11 用户裁孤儿件:新目录无冒险级限量件,而关卡级/战斗级件天然周期重置、开局回充对其结构性冗余);恢复机制留作骨架参数,未来冒险级限量件出现时启用。 @@ -96,7 +96,7 @@ 2. 档位(普通/优秀/稀有)=代价×效果的预置平衡带:普通=弱效果配松代价,稀有=强效果配紧代价——骨架与档位体系在此接口。 3. 覆盖检查只跑效果三方向;细分格空位**不构成补件议程**(预读格教训记录在案)。 4. 信息方向的价值检验按目的做(减少了多少盲赌),不按信息形式堆料;强效果必须配紧代价。 -5. 各周期账本独立、互不换算;全部限量值 provisional 归调参批;逐件的效果格与代价格归属随实装批登记。 +5. 各周期账本独立、互不换算;全部限量值 provisional 归调参批;逐件的效果格与代价格归属见「目录(重设计 v1)」三表(2026-10-12 迭代 22 落地登记)。 ## 设计目的 @@ -111,7 +111,7 @@ | 负责 | 说明 | |---|---| -| 道具定义表 | 秘宝件的字段定义:名称、效果格归属、效果组合、目标形态、数值;现行目录=「目录(重设计 v1)」节 12 件(实装归实装批,实装批落地前表内旧目录同调行冻结维持);承重护栏在加载期校验中强制 | +| 道具定义表 | 秘宝件的字段定义:名称、效果格归属、效果组合、目标形态、数值;现行目录=「目录(重设计 v1)」节 12 件(已随迭代 22 实装批全量落地,2026-10-12);承重护栏在加载期校验中强制 | | 设计骨架与覆盖检查 | 效果三方向(信息/行动资源/操作能力)覆盖检查——每方向至少一件承载(口径见「设计骨架」节);加载后自动检查 | | 同调装配与充能账 | 营地装配入同调位(每件固定占 1 格、共 3 格;分档规则见「定位与形态」速览);主动件充能每冒险开始重置 | | 使用规则与目标校验 | 什么时候能用、目标合不合法、失败分几级、哪一级不消耗 | @@ -158,12 +158,12 @@ ### 道具从哪来:解锁与营地装配 -秘宝不可购买、不可合成,唯一来路=**营地解锁**(2026-10-10 用户裁混合制——基础件钥石购买/特定件条件解锁)。**装配只在冒险开始前于营地配置;冒险中不存在任何更换途径**(2026-10-11 用户裁,无例外——拾取与效果均不产生装配变化;原当日早间试行的「冒险拾取未知秘宝」渠道同日废止,奇物侧无对应实现)。解锁细目:**特定件**凭条件解锁(游玩里程碑或行为条件,逐件定条件写解锁条件表——秘宝实装批另建承载表、改表不动码,阈值 provisional 归调参批(原「现役同调增长表 attunement_growth.tres 改造」句随表退役换代——迭代 21 T5))。同调位槽位由天赋树同调位节点提供(1=普通格/2=优秀格/3=稀有格递增,共 3 格)——树与秘宝同为角色属性的贡献者,槽位参数的提供方在树侧。开局前在营地·秘宝匣柜台「同调装配」段装入同调位(每件固定占 1 格;分档装配规则见「定位与形态」速览)。 +秘宝不可合成,唯一来路=**营地解锁**(2026-10-10 用户裁混合制——基础件钥石购买/特定件条件解锁;冒险中无购买)。**装配只在冒险开始前于营地配置;冒险中不存在任何更换途径**(2026-10-11 用户裁,无例外——拾取与效果均不产生装配变化;原当日早间试行的「冒险拾取未知秘宝」渠道同日废止,奇物侧无对应实现)。解锁条件实录(2026-10-12 迭代 22 落地,阈值 provisional 归调参批):钥石购买 8 件(晨操令/阔视野带/试炼镐/刷新练习/储备罐/巢穴预告/线香各 10 钥石+双管装填 25 钥石);条件解锁 4 件——远程镐=生涯通关 ≥1(adventure_cleared)、刷新执照=Boss 击杀 ≥3(boss_kill_count)、天眼=通关 ≥3 且 Boss 击杀 ≥4、信标网络=真视类工具累计使用 ≥10(vision_used,行为计数域随迭代 22 新增);承载=`treasure_items.tres` 行内 `unlock_requires` 字段(改表不动码;schema 计数键词表校验单点)。同调位槽位由天赋树同调位节点提供(1=普通格/2=优秀格/3=稀有格递增,共 3 格)——树与秘宝同为角色属性的贡献者,槽位参数的提供方在树侧。开局前在营地·秘宝匣柜台「同调装配」段装入同调位(每件固定占 1 格;分档装配规则见「定位与形态」速览)。 ### 什么时候怎么用:挖掘期发起,战斗结算编排 -受理框架为新目录主动件(线香/天眼/试炼镐)沿用;新目录实装批落地前,现役代码按同框架运行。 +受理框架现役=主动使用件线香/天眼(2026-10-12 迭代 22 落地);**试炼镐为自动兑付件,无使用动作、不经本节四步**(每开 8 个安全格自动当轮 AP+1——2026-10-12 反哺批⑤用户裁,兑付时序见「设计骨架·代价轴」转化获取行)。 使用动作在挖掘期发起:轮次进行中的任意时点都行。战斗阶段没有道具使用窗口(战斗道具已于 2026-09-15 随可选类删除下线),秘宝的使用窗口独占挖掘期。发起之后由战斗结算编排受理,按固定次序走四步: @@ -176,7 +176,7 @@ 所有会失败的情况都被前两步拦下,后两步在合法输入下不会失败——"产生效果"和"消耗道具"永远成对发生。带两个效果的稀有道具,施加顺序钉死为先空间效果、后加行动点;定义表里效果的书写顺序不承载运行时语义。 -用道具不扣行动点:成本在装配时已经付过——它占了一格同调位;挖格、插旗的价格不受任何影响。道具只产生信息与行动点、不产生动作:系统没有任何自动使用入口——不会自动替你挖,也不会自动替你插旗。真视尤其要说清:它是信息不是保护,被标出的危险格挖开照样惊动;靠真视插旗仍按标准动作价计费(价目见 action_economy.tres),标中收益照走既有结算路径。本节纯流程,无计算。 +用道具不扣行动点:成本在装配时已经付过——它占了一格同调位;挖格、插旗的价格不受任何影响。道具只产生信息与行动点、不产生动作:使用入口仅线香/天眼两主动件——不会自动替你挖,也不会自动替你插旗(试炼镐的自动兑付是行为转化的兑付、非使用动作——它不挖格不插旗,只在玩家自己挖格时按开格数兑行动点)。真视尤其要说清:它是信息不是保护,被标出的危险格挖开照样惊动;靠真视插旗仍按标准动作价计费(价目见 action_economy.tres),标中收益照走既有结算路径。本节纯流程,无计算。 ### 信息住在哪:整图叠加层,随图消亡 @@ -228,11 +228,11 @@ ## 调参表 -道具定义表的全部数值均为 provisional,归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)调参;registry `aux_items` 条目现承载旧目录历史口径,新目录 12 件登记随实装批换代;表 schema 归[数据配置](../表现与支撑/数据配置.md)承载、本系统回填。 +道具定义表的全部数值均为 provisional,归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)调参;registry `aux_items` 条目已随迭代 22 换代为新目录 12 件登记(2026-10-12);表 schema 归[数据配置](../表现与支撑/数据配置.md)承载、本系统回填。 结构冻结(非调参项,改动走本文修订流程):真视窄域护栏、零信息目标不消耗、边缘窗口照常受理、使用零行动点成本、同调位装配与充能每冒险重置、用后不可逆、零随机。 -效果声明形态(内容数据驱动扩展批落地,在役沿用):被动件的效果行为=**订阅行**——行内声明**订阅哪个事件(on)/ 什么条件(when)/ 什么效果(do)**,由效果引擎统一解释执行;主动件按效果类型通用分发(受理闸=使用事件订阅+积点计数器账本)。事件/效果类型/条件事实/算子四词表封闭(效果引擎单一事实源);卡面效果摘要=行 `desc` 字段直读(文案表值化)。新目录 12 件的效果行随实装批登记。 +效果声明形态(内容数据驱动扩展批落地,在役沿用):被动件的效果行为=**订阅行**——行内声明**订阅哪个事件(on)/ 什么条件(when)/ 什么效果(do)**,由效果引擎统一解释执行;主动件按效果类型通用分发(受理闸=使用事件订阅);常时参数面件(阔视野带/储备罐/远程镐/信标网络/刷新练习/刷新执照六件)effect_kinds 挂参数 kind、由注入面按装配集分发读取;试炼镐=自动兑付(ap_charge_safe 满 charge_n 直接 grant_ap)。事件/效果类型/条件事实/算子四词表封闭(效果引擎单一事实源);卡面效果摘要=行 `desc` 字段直读(文案表值化)。新目录 12 件的效果行已随迭代 22 落地登记。 playtest 预警(预注册,归难度曲线与Boss): @@ -243,8 +243,8 @@ playtest 预警(预注册,归难度曲线与Boss): ## 验收标准 -- 护栏强制:任何标出危险格的道具定义,目标域字段超过 3×3 时数据加载直接报错拒绝;现役表内旧目录行维持加载通过至实装批替换,新目录 12 件逐件过护栏校验归实装批验收。 -- 覆盖检查:效果三方向(信息/行动资源/操作能力)各有新目录承载,检查按「设计骨架」节口径执行;逐件的效果格归属随实装批登记。 +- 护栏强制:任何标出危险格的道具定义,目标域字段超过 3×3 时数据加载直接报错拒绝;现行 12 件逐件过护栏校验(迭代 22 已交付,2026-10-12)。 +- 覆盖检查:效果三方向(信息/行动资源/操作能力)各有新目录承载,检查按「设计骨架」节口径执行;逐件的效果格归属见「目录(重设计 v1)」三表。 - 两域正交:秘宝件经同调位装配生效,不入局内道具背包,与奇物背包互不混装。 - 使用窗口:非挖掘期的使用请求被拒绝且不消耗;挖掘期任意时点可发起。 - 零消耗拒绝:目标不合法(例如点在已挖开的格子上)时道具不消耗、装配位不变、反馈可辨认;整图零信息时图标置灰、入口禁用。 @@ -263,6 +263,7 @@ playtest 预警(预注册,归难度曲线与Boss): | 版本 | 日期 | 改动 | |---|---|---| +| v3.0 | 2026-10-12 | **迭代 22 反哺落文批(实现报告 §三①②③,用户逐点裁「落文」)**:①目录三表补实态三列(item_id/解锁〔价格或条件,阈值 provisional〕/效果实现 kind)+试炼镐行换代自动兑付语义+全部「实装批落地前」现状句换代(定位形态节/目录引言/负责表/受理框架节/调参表/验收护栏覆盖两行)+旧目录退役指针补代码旧行已删;②代价轴转化获取行换代=试炼镐每开 8 安全格自动兑当轮 AP+1(2026-10-12 用户裁:无玩家发起入口、战斗级重置、兑付时序=揭示先于扣费故 AP 归零恰逢满点轮不结束)——设计留白〔积点账重置周期〕随裁补记;③解锁混合制节条件表实录(钥石 8 件 10/25+条件 4 件三计数键阈值)+承载换代=行内 unlock_requires 字段 | | v0.1 | 2026-09-15 | 自归档 GDD 压缩改写 | | v0.2 | 2026-09-16 | 更名批(用户拍板 2026-09-16):系统更名"辅助道具"→"秘宝"——定位已非纯数值道具,含信息/妙用向效果;文件同步重命名;英文代号 AUXILIARY_ITEMS 暂沿用 | | v0.3 | 2026-09-17 | 切片期空内容拍板(用户拍板):道具定义表为空列为合法态——五维度覆盖检查改为仅对非空清单执行;验收标准覆盖检查条目同步;06「维度覆盖检查破缺」「失义道具的掉落投放」两条随批关闭 | diff --git a/design/gdd/ux/camp.md b/design/gdd/ux/camp.md index 2a6fee3a..77a26113 100644 --- a/design/gdd/ux/camp.md +++ b/design/gdd/ux/camp.md @@ -12,7 +12,7 @@ ## 布局与交互 - 石纹全屏底(样张 v2 冻结件,浅 dim 透出)+ 顶栏铭牌与钥石徽(余额常驻)。 -- 三柜台列:属性锻造(三档行:等级/价格/购买钮)、秘宝匣(行:解锁进度与状态呈现——「已解锁·能力封存中」=deferred 件、「已退役」=retired 件)、奖励格图鉴(结构位)。 +- 三柜台列:属性锻造(三档行:等级/价格/购买钮)、秘宝匣(**迭代 22 实装态呈现,2026-10-12**——见下方「秘宝匣柜台呈现细则」节)、奖励格图鉴(结构位)。 - 树面板(图鉴柜台下段,现役程序占位):营地内天赋树的节点购买与 Fork A/B 面切换承载——系统现行事实源=[天赋树](../systems/跨局循环/天赋树.md)(33 节点在役),呈现终稿归 [HUD框架](../systems/表现与支撑/HUD框架.md);信号 `tree_buy_requested` / `tree_fork_toggled`。(本行 2026-10-09 补登——树侧跨文档欠账清偿:此前本 spec 零树面板登记。) - 底栏:关闭钮 + 操作注记;最近冒险收底栏条带(逐行只读账面)。 - 购买意图 `buy_requested(attr)` 经组合根转发 MetaProgression(纯视图 setter 面——零核心写调用、零账本持有);购买成功 `refresh_camp` 就地重刷(零重建回流)。 @@ -21,9 +21,19 @@ ## 口径 - 呈现数据源 = MetaProgression 只读投影经组合根喂入;本层不持有账本、不算价。 -- 退役/封存件呈现语义(探宝罗盘「已退役」;显影尘/地穴全图卷「已解锁·能力封存中」)为本层职责——2026-09-30 前该语义无 spec 权威定义(node-reward.md 曾悬空指认),随本 spec 落位。 +- 退役/封存件呈现语义已随旧目录整体退役消解(探宝罗盘/显影尘/地穴全图卷等状态行已删——迭代 22 旧 12 行删除后目录内零 deferred/retired 态,2026-10-12);历史语义见版本历史 v1.1。 - 双入口框架(主菜单入口+局内暂停层只读入口)的需求面归元进度「解锁双入口框架」节;暂停层入口已实装(2026-10-06 迭代 17 卡③——实机目检待用户,06 登记条在册),其呈现面不归本 spec。 +## 秘宝匣柜台呈现细则(迭代 22 实装态,2026-10-12) + +秘宝匣柜台=解锁面+同调装配段两部分(数据投影=`treasure_shop_status` 单点): + +- **解锁面**:逐件一行——钥石购买件带**购买钮**(余额不足=禁用态不隐藏;已解锁=钮消失转已解锁态);条件解锁件带**条件进度呈现**(计数键现值/阈值,如「通关 2/3」);件名后缀·档位(普通/优秀/稀有);悬停浮窗=行 `desc` 直读。 +- **装配段**(同调装配):装配行带**档位标签**(件档≤格档约束的可见面);未解锁件**禁装**(列表不可选);满位禁选;每件固定占 1 格。 +- **空目录合法态**:白板档(12 件全未解锁)柜台零可装行=合法态非缺陷(装配面空目录断言 V18 在役)。 +- **暂停层只读概览**:局内暂停层秘宝匣段=12 行只读清单(解锁态+装配态概览,零写入口——装配只在营地)。 +- 机制权威=元进度/秘宝.md;本节只锁呈现规则。 + ## 版本历史 | 版本 | 日期 | 改动 | @@ -31,3 +41,4 @@ | v1.0 | 2026-09-30 | 首版落文(审计拍板点 4A 裁决:乙案新建+元进度配套更改;9A 视觉终稿实态成文) | | v1.1 | 2026-10-09 | 文档正确性审查批:①头注「M-3 迭代 9」前缀按里程碑口径删除只留「迭代 9」;②口径节「暂停层入口未实装(随 HUD 批 M-4)」过期订正——暂停层只读入口已实装(迭代 17 卡③,2026-10-06,实机目检待用户) | | v1.2 | 2026-10-10 | 「道具工坊」改名「秘宝匣」扫改(2026-10-10 天赋树设计会话裁):定位句与三柜台列两处。机制零改动 | +| v1.3 | 2026-10-12 | **迭代 22 反哺落文批(实现报告 §三⑤,用户裁「落文」)**:新增「秘宝匣柜台呈现细则」节(购买钮禁用态/条件进度/名后缀·档位/装配行档位标签/未解锁禁装/悬停 desc/空目录合法态/暂停层 12 行只读概览);三柜台列秘宝匣行换代指路;退役/封存件呈现语义口径随旧目录删除消解(历史语义留版本历史)。机制零改动 | diff --git a/design/gdd/术语表.md b/design/gdd/术语表.md index dfebcac0..50050032 100644 --- a/design/gdd/术语表.md +++ b/design/gdd/术语表.md @@ -38,6 +38,8 @@ | 同调位 | 玩家出征前携带秘宝的装配槽(0 起步、基础 3 格) | | 秘宝匣 | 营地柜台之一:秘宝的解锁(钥石购买/条件解锁)与同调装配面 | | 主动件 / 被动件 | 需要花充能主动使用的秘宝 / 装配后整局持续生效的秘宝 | +| 自动兑付 | 无使用动作的秘宝效果兑付形态:满足条件(如试炼镐每开 8 个安全格)自动生效,无玩家发起入口(2026-10-12 用户裁——原「积点兑换钮」手动形态退役) | +| 真视使用计数 | 真视类工具累计使用次数的生涯终身计数(存档域 `vision_used`)——信标网络的解锁行为条件(2026-10-12 迭代 22 新增) | | 充能 | 主动件的使用次数账:每冒险开局满额(或按使用代价形态重置),用完即不可用 | | 操作包络 | 玩家可执行的操作的范围与效率——视野/行动点/刷新/挖掘距离/转存率等(秘宝只加强它,不出战斗属性值) | | 效果格 / 代价格 | 秘宝设计骨架的两个轴:件改变玩家什么(信息/行动资源/操作能力)× 件怎么限制(获取/使用/装配代价)(见[秘宝](systems/跨局循环/秘宝.md)设计骨架) | @@ -94,6 +96,7 @@ | 版本 | 日期 | 改动 | |---|---|---| +| v1.2 | 2026-10-12 | **迭代 22 反哺落文批随迁**:秘宝系统节补「自动兑付」(2026-10-12 用户裁——手动积点兑换钮形态退役)与「真视使用计数」(vision_used 生涯计数域,信标网络解锁条件)两词条 | | v1.1 | 2026-10-11 | **怪物巢穴类型概念退役批(用户裁「目前没有具体的怪物巢穴类型,全部改成危险格」)**:删怪物巢穴词条、危险格与旗/控制两行换代;世界观风味层的「巢穴」隐喻〔00-游戏概念巢穴隐喻轴,产品名清巢者出处〕与美术纹样名保留,机制文档零巢穴 | | v1.0 | 2026-10-11 | 首版建立(用户令「做一个专用术语表,让读者查表阅读」):格与棋盘/资源与经济/秘宝系统/道具体系四节+退役词对照表;同批全库统一更名=危险格(原雷格/惩罚格)/整图(原板级)/专长凭证(原门票) | | v1.2 | 2026-10-11 | **机制表述巢穴补扫收尾(用户裁无类型划分)**:行动经济/音频/敌人系统等机制文档「惊动巢穴/巢穴被控制」系表述全量换代危险格(惊动 4/标中 1/被控制 2);对照表补巢穴行 | diff --git a/design/qa/iter22-实现报告-2026-10-12.md b/design/qa/iter22-实现报告-2026-10-12.md index e71592e2..200cb103 100644 --- a/design/qa/iter22-实现报告-2026-10-12.md +++ b/design/qa/iter22-实现报告-2026-10-12.md @@ -13,16 +13,16 @@ | T2 | 解锁服务换代(buy_treasure_unlock/refresh_treasure_unlocks/treasure_shop_status/_treasure_unlock_progress 单点)+工坊渠道面退役(行族/词表/三函数/访问器全删)+vision_used 生涯计数域(补零不升版本)+toggle_attunement 三重校验(未解锁拒+满位禁选+件档 rank≤装入位序)+秘宝匣呈现数据管道换代 | a7bd4e4 | | T3 | board_installed 发射+巢穴预告读数口/天眼 safe_dig=fx_reveal 通道复用(C5 全额兑付免 AP)/reveal_tiles 入真视叠加层/试炼镐 use_attune_convert 积点受理口+计数通用化/充能重置周期 _reseed_attune_charges(battle/level)/常时参数面注入(挖距/旗可达/转存率/刷新加仓/商店刷新)/vision 计数链(共享 dict→summary→settle 入档+断点随件)/validate_use 扩 cell+新空间 kind/修现役潜伏缺陷(use_treasure 板维度读不存在的 Rules.width)+新单测 treasure_effects_test(V7 附属表 12 件逐件正常/边界/反例) | T3 提交 | | T4 | 秘宝匣柜台购买钮+分档呈现+档位标签+未解锁禁装/呈现桥换代(旧提灯布尔桥退役→set_fog_glow_bonus 参数面,main._sync_treasure_glow)/巢穴预告 toast/试炼镐 HUD 兑换钮(ap_bar+board_zone 转发链)/ui_input_probe case⑮ 换代主语+4/V13 功能残留换代/修 BoardZoneView 缺 convert_pressed 转发(呈现组装挂死根因) | b7a2ead | -| T5 | 替换子交互整体拆除(装配不可变契约 1 死通道:core 六函数+_bonus_treasure_carry 携带+_last_draw_treasure 掷定链+bonus_aux_carry 断点键+grant_treasure_item+holding_records+呈现三态+overlay replace 状态机+探针/autoplay 策略)/treasure_inventory 保留注记(主动件骑库存承载在役)/apply_node_curio 普通兑付主体误删补回 | 7095505(amend 后) | +| T5 | 替换子交互整体拆除(装配不可变契约 1 死通道:core 六函数+_bonus_treasure_carry 携带+_last_draw_treasure 掷定链+bonus_aux_carry 断点键+grant_treasure_item+holding_records+呈现三态+overlay replace 状态机+探针/autoplay 策略)/treasure_inventory 保留注记(主动件骑库存承载在役)/apply_node_curio 普通兑付主体误删补回 | 73db171(amend 后;原 7095505 系 amend 前被弃旧提交含误入素材——2026-10-12 追认批提交号勘正) | | T6 | 验收闸断言(V9 词表零改写/V10 三方向覆盖/V18 空目录合法态/V6 装配不可变三面同源快照)+批末重闸全绿+ui_probe 柜台行数断言换代(6→12) | T6 两提交 | -## 二、代拍板追认单(十五条,待用户逐条追认) +## 二、代拍板追认单(十五条——2026-10-12 用户逐条裁决收口:①②③⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮ 追认;④ 追认+积点账生命周期裁战斗级;⑤ 推翻·改自动兑付——反哺落文批同日执行) -1. **回补点 1 执行**:按设计权威 12 件全量落地,刷新练习归钥石购买(C1「普通档全钥石」直接应用)——卡片推荐案。 -2. **回补点 2 消解**:迭代 20 已删 venom_edge/flag_burst,本批实删 12 行(非 14)。 -3. **回补点 3 执行形态**:treasure_inventory **部分拆除+保留注记**——拆除=替换子交互死通道全清(装配不可变实现面保证);保留=库存类本体(新目录主动件线香/天眼的骑库存承载在役:handle 注入+use_treasure 受理+断点 aux_items 快照)。卡片「拆除或保留注记」双路线并写的第三形态,理由=T3 复用现役机制零新建。 -4. **试炼镐两级积点单级化**:设计「每开 4 安全格积 1 点、满 2 点换 AP+1」→ 实现=ap_charge_safe charge_n=8 滑耗(行为等价:每 8 格兑 1 AP,免上限滑动消耗)——代拍板白名单「订阅行等价实现细节」;desc 保留设计原文两级表述。 -5. **试炼镐受理口与入口**:绕库存直呼 use_attune_convert(charges=0 零骑库存)+HUD 行动条兑换钮(ap_bar convert_pressed 转发链,未装配隐藏、积点未达禁用、文案含进度 N/M)——卡片未列明入口形态,本批落 HUD 最小入口。 +1. **回补点 1 执行**【追认】:按设计权威 12 件全量落地,刷新练习归钥石购买(C1「普通档全钥石」直接应用)——卡片推荐案。 +2. **回补点 2 消解**【追认】:迭代 20 已删 venom_edge/flag_burst,本批实删 12 行(非 14)。 +3. **回补点 3 执行形态**【追认】:treasure_inventory **部分拆除+保留注记**——拆除=替换子交互死通道全清(装配不可变实现面保证);保留=库存类本体(新目录主动件线香/天眼的骑库存承载在役:handle 注入+use_treasure 受理+断点 aux_items 快照)。卡片「拆除或保留注记」双路线并写的第三形态,理由=T3 复用现役机制零新建。 +4. **试炼镐两级积点单级化**【追认+积点账生命周期裁战斗级(每场战斗清零——设计留白处 2026-10-12 用户裁)】:设计「每开 4 安全格积 1 点、满 2 点换 AP+1」→ 实现=ap_charge_safe charge_n=8 滑耗(行为等价:每 8 格兑 1 AP,免上限滑动消耗)——代拍板白名单「订阅行等价实现细节」;desc 保留设计原文两级表述(反哺批⑤ 后随自动兑付换代)。 +5. **试炼镐受理口与入口**【**推翻·改自动兑付**(2026-10-12 用户裁,反哺落文批执行):满 charge_n=8 自动当轮 grant_ap、无玩家发起入口——HUD 兑换钮整链(convert_pressed 信号/转发/接线/set_convert_state)退役、use_attune_convert 受理口消解、行内 counter_spend 受理闸删除、desc 换代「每开 8 个安全格,当轮 AP +1(自动)」;兑付时序=揭示先于本格扣费(cell_revealed 批先于 spend),AP 归零恰逢满点时先兑再扣、轮次不因本格结束;进度显示挂 C 区秘宝槽悬停浮窗(attune_convert_state 读数口改造为进度投影);单测④段重写自动兑付断言,冒烟 898/0+单测 22 套+probe click/full 反哺批重跑全绿。**呈现集成补丁(同日修复批)**:charges=0 件不入骑库存〔注入循环跳过〕致 C 区原无试炼镐槽、浮窗进度无处承载——C 区投影末段补自动兑付件展示行(合成 handle=-1+note 进度+点击说明 toast);单测新增④b 展示行断言两条;重闸全绿(含 render_gate golden 0.00%+doc 三闸存量对比+熵增闸)】:原实现绕库存直呼 use_attune_convert(charges=0 零骑库存)+HUD 行动条兑换钮——卡片未列明入口形态,本批落 HUD 最小入口。 6. **解锁条件表落位**:卡片 T1「attunement_growth.tres 改造为解锁条件表」——该表已被迭代 21 删除,落位改为 treasure_items 行内 unlock_requires(单一事实源,schema 校验单点)。 7. **计数键换代**:UNLOCK_COUNTER_KEYS 旧键 clear_count(旧工坊按关累计语义)与 C6 通关口径不符,换名 adventure_cleared(生涯通关局数)+扩 vision_used——旧键零行消费安全换名。 8. **vision_used 承载**:save v6 meta 域补零新键(不升版本,迭代 21 先例)+断点随件 vision_counter_used;计数点=use_treasure 受理成功(真视类 kind),冒险共享 dict 聚合、收束 add_vision_used 入档。 @@ -32,9 +32,9 @@ 12. **价格 provisional 占位**:普通档 10 钥石/优秀档 25 钥石(稀有档全条件无价)——调参批终值。 13. **magic_vs_magic 结案维持**:行已随迭代 20 删除(grep 零命中),锻造工坊实装批③「改值复活」作废(06 已核结)。 14. **reward_dangling_treasure_test 保留**:悬空引用拦截机制在役,注入主语=故意悬空旧 id(fixture 本体非旧件验证)——V13「随行清亡」指注入行,机制测试保留。 -15. **过程修正**:T5 提交误入拷贝嵌套素材(assets/ui/ui/ 9 png)已 amend 剔除,终态零素材变更。 +15. **过程修正**【追认+提交号勘正】:T5 提交误入拷贝嵌套素材(assets/ui/ui/ 9 png)已 amend 剔除,终态零素材变更——原记录「7095505(amend 后)」有误:7095505 系 amend **前**被弃旧提交(含误入素材、不在任何分支),master 实际 T5=73db171(零素材),§一 T5 行已随追认批勘正(2026-10-12 裁决会话取证:merge-base 实证 7095505 非最终史祖先、73db171 素材计数 0)。 -## 三、GDD 反哺点(实现与设计权威差异——待用户逐点裁决后另批落文,本批零直改 GDD) +## 三、GDD 反哺点(实现与设计权威差异——**2026-10-12 用户逐点裁「落文」,七条已随反哺落文批全部落文**:秘宝.md v3.0〔①②③〕/元进度.md v1.17〔④〕/camp.md v1.3〔⑤〕/存档序列化.md v1.6〔⑥〕/行动经济.md v0.12〔⑦〕) 1. **秘宝.md「目录(重设计 v1)」节**:逐件表补实录列(item_id/tier/解锁方式与价格或条件/参数 kind);「实装批落地前表内旧目录同调行冻结维持」「受理框架为新目录主动件沿用——现役代码按同框架运行」两处现状句已过期须换代;旧目录退役指针节补「代码旧行已删(2026-10-12)」。 2. **秘宝.md 代价轴**:试炼镐两级积点结构→单级 8 格滑耗等价实现注记(若用户裁保两级呈现,改 desc 与 HUD 进度文案即可,机制不动)。 diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index 8c328c92..3419c36e 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -77,7 +77,7 @@ var _flag_consumed := {} # 兑付资格以雷格实例为键 # 同调装配运行态(迭代 11 第①批 T5——begin_battle 经 enc.attunement 注入;off=空集全部效果零扰动) var attunement: Array = [] # 装备中同调件 item_id 集 var _attune_charges_ref: Dictionary = {} # 充能账本共享引用(迭代 11 第①批 T6——use_treasure 消费直改) -var _attune_safe_seen := 0 # 积点制件 battle 域安全开格计数(迭代 22 T3 通用化——装配集 ap_charge_safe 行扫描;积点账本=行 triggers counter_spend 声明的计数器,旧 dig_charge_bank 硬编码随行退役) +var _attune_safe_seen := 0 # 积点制件 battle 域安全开格计数(迭代 22 T3 通用化——装配集 ap_charge_safe 行扫描;反哺批⑤ 2026-10-12 用户裁:满 charge_n 自动兑付当轮 AP+1,无玩家发起入口) # ---- 效果引擎扩签运行态(迭代 20 专长实装批 T1——新效果类型施加面;空订阅零扰动)---- var _fx_hero_ac_base := -1 # 主角 AC 基线快照(enc.hero_armor_class;-1=表值兜底未解析) var _fx_ac_round := 0 # ac_bonus 本轮累积器(封印桩形态——round_start 清零) @@ -204,9 +204,9 @@ func _attune_has(item_id: String) -> bool: return attunement.has(item_id) -# 装配集只读出口(迭代 19 卡④立——呈现桥消费面现归 attune_param_sum〔迭代 22 T4 换代〕;本口保留 -# board_view.set_fog_lantern。_attune_has 契约化出口,save v6 只读访问器先例;private 面内部调用 -# 零改动。只读零副作用——呈现侧判定专用,非结算写入口) +# 装配集只读出口(迭代 19 卡④立——呈现桥消费面现归 attune_param_sum〔迭代 22 T4 换代〕。 +# _attune_has 契约化出口,save v6 只读访问器先例;private 面内部调用零改动。只读零副作用—— +# 呈现侧判定专用,非结算写入口) func attune_has(item_id: String) -> bool: return _attune_has(item_id) @@ -251,7 +251,7 @@ func _reseed_attune_charges(reset: String) -> void: continue var want := int(arow.get("charges_per_adventure", 0)) if want < 1: - continue # charges=0=积点制(试炼镐——不走骑库存面,受理=use_attune_convert 积点口) + continue # charges=0=自动兑付件(试炼镐——不走骑库存面,兑付=_on_cell_revealed 积点段自动 grant_ap) if _attune_charges_ref != null: _attune_charges_ref[iid] = want if treasure_inventory != null: @@ -263,50 +263,16 @@ func _reseed_attune_charges(reset: String) -> void: treasure_inventory.add_item(iid, "attunement", Vector2i(-1, -1), 0) -# 积点制主动件受理(迭代 22 秘宝批 T3——试炼镐「转化获取」唯一入口:不经库存 handle -# 〔charges=0 零骑库存〕,受理闸=行 triggers counter_spend 积点账〔dig_reveal 通用化计数段 -# 逐 charge_n 积 1 点〕;消耗成功才兑付当轮 AP=magnitude。返回 use_treasure 同构 verdict) -func use_attune_convert(item_id: String) -> Dictionary: - var arow: Dictionary = db.treasure_item_row(item_id) - if arow.is_empty() or String(arow.get("form", "")) != "active_charged" \ - or not (arow.get("effect_kinds", []) as Array).has("ap_charge_safe") \ - or not _attune_has(item_id): - return {"ok": false, "reason": "非装配积点件"} - if action_economy.phase != action_economy.PHASE_ACTIVE: - return {"ok": false, "reason": "非挖掘期(使用窗口=Active)"} - var bank_id := "" - for tr_v in (arow.get("triggers", []) as Array): - var dd: Dictionary = (tr_v as Dictionary).get("do", {}) as Dictionary - if String(dd.get("kind", "")) == "counter_spend": - bank_id = String(dd.get("counter_id", "")) - break - if bank_id == "": - return {"ok": false, "reason": "行缺积点受理闸"} - if not _fx.counter_spend(bank_id, 1): - var cn := int(arow.get("charge_n", 0)) - return {"ok": false, "reason": "%s:安全格积点未达(%d/%d)" % [String(arow.get("display_name", "")), _attune_safe_seen % cn if cn > 0 else 0, cn]} - if not action_economy.grant_ap(int(arow.get("magnitude", 0))): - return {"ok": false, "reason": "行动点加量被拒(相位防御)"} - # 兑付反馈=AP 条即时刷新(use_treasure 同款纪律——结算明细无道具行:效果即时可见零明细行) - return {"ok": true, "item_id": item_id} - - -# 积点制件受理状态读数(迭代 22 秘宝批 T4——HUD 兑换钮态数据源:assembled=装配在册/ -# points=积点账现值/need=受理闸阈值〔行 counter_spend value〕。未装配=assembled false) +# 积点制件进度读数(迭代 22 反哺批⑤——自动兑付无玩家发起入口,读数口=C 区秘宝槽悬停浮窗进度行: +# assembled=装配在册/points=本战安全格进度(charge_n 取余)/need=charge_n/item_id=装配行 id。 +# 未装配=assembled false) func attune_convert_state() -> Dictionary: var row := _attune_charge_safe_row() if row.is_empty() or String(row.get("form", "")) != "active_charged": - return {"assembled": false, "points": 0, "need": 0, "display_name": ""} - var bank := "" - var need := 1 - for tr_v in (row.get("triggers", []) as Array): - var dd: Dictionary = (tr_v as Dictionary).get("do", {}) as Dictionary - if String(dd.get("kind", "")) == "counter_spend": - bank = String(dd.get("counter_id", "")) - need = maxi(1, int(dd.get("value", 1))) - break - return {"assembled": true, "points": _fx.counter(bank) if bank != "" else 0, "need": need, - "display_name": String(row.get("display_name", ""))} + return {"assembled": false, "points": 0, "need": 0, "display_name": "", "item_id": ""} + var cn := int(row.get("charge_n", 0)) + return {"assembled": true, "points": _attune_safe_seen % cn if cn > 0 else 0, "need": cn, + "display_name": String(row.get("display_name", "")), "item_id": String(row.get("item_id", ""))} # 特性求值(内容数据驱动扩展批 T3——_feat_flags_for 挂点求值退役:效果行为=数据行 triggers 订阅, @@ -622,6 +588,18 @@ func _on_cell_revealed(evt: Dictionary) -> void: # fx_reveal 通道事件旁路缓冲(迭代 20 T1——专长揭示的奖励由 _flush_pending_reveals 兑付点 # 直接入账,此处缓冲会导致二次兑付)。 if battle_result == "" and not _fx_revealing: + # 积点自动兑付(迭代 11 同调批 T6 → 迭代 22 秘宝批 T3 通用化 → 反哺批⑤ 2026-10-12 用户裁: + # 满 charge_n 直接当轮 grant_ap,无玩家发起入口、无积点账中转〔账即时清空,battle 域重置 + # 自然无感〕。落位=揭示缓冲点——事件序 cell_revealed 批先于本格扣费,AP 归零恰逢积点满时 + # 先兑再扣,轮次不因本格结束;授予段已无积点段(本段唯一计数点)。fx_reveal 旁路不计数= + # 沿现役缓冲路径口径〔天眼开格不计积点〕。grant_ap 相位防御在 ACTIVE 挖格链内恒过) + if String(evt.get("kind", "")) == "safe": + var cs_row: Dictionary = _attune_charge_safe_row() + if not cs_row.is_empty(): + _attune_safe_seen += 1 + var cn_b: int = int(cs_row.get("charge_n", 999)) + if cn_b > 0 and _attune_safe_seen % cn_b == 0: + action_economy.grant_ap(int(cs_row.get("magnitude", 1))) if bool(evt.get("resource", false)): # 身份快照随缓冲捕获(批次隔离——轮内刷新后 mapping 已换批,授予必须用缓冲期身份, # 防旧图已挖格在轮末错拿新图同坐标身份)。雷格同样携带(雷安同池——负向兑付的来源格) @@ -721,23 +699,6 @@ func _settle() -> void: "奥术矢", "board", int((spell_hits[0] as Dictionary).get("value", 0)), DamageController.TARGET_FRONT_ALIVE, ri, evt.cell, "magic") _submit(spell_t, false) - # 积点制计数(迭代 11 同调批 T6 → 迭代 22 秘宝批 T3 通用化:装配集 ap_charge_safe 行 - # 〔新目录=试炼镐;旧 dig_charge id 特判随行退役摘除〕——模判定留编排器侧:「每 N 格积 - # 1 点」在发射点施加架构下无法行内表达先增后判(when 于 dispatch 预评估),逐位等价优先; - # 积点账本 counter_id=行 triggers counter_spend 声明单点,charge_n 读行零字面量) - var cs_row: Dictionary = _attune_charge_safe_row() - if not cs_row.is_empty(): - _attune_safe_seen += 1 - var cn_b: int = int(cs_row.get("charge_n", 999)) - if cn_b > 0 and _attune_safe_seen % cn_b == 0: - var bank_b := "" - for tr_b in (cs_row.get("triggers", []) as Array): - var dd_b: Dictionary = (tr_b as Dictionary).get("do", {}) as Dictionary - if String(dd_b.get("kind", "")) == "counter_spend": - bank_b = String(dd_b.get("counter_id", "")) - break - if bank_b != "": - _fx.counter_add(bank_b, 1) elif evt.kind == "mine": # 插旗不可逆四情况②:插雷格再挖开 = 只受挖雷一层惩罚(mine_hit 照常兑付——惊动巢穴), # 标中不发(旗已随挖掘擦除、不入轮末判定基线)。 @@ -1018,11 +979,6 @@ func use_treasure(handle: int, target: Vector2i) -> Dictionary: if kinds.has("ap_grant"): if not action_economy.grant_ap(int(v.magnitude)): return {"ok": false, "reason": "行动点加量被拒(相位防御)"} - if kinds.has("ap_charge_safe"): - # 积点件兑付(迭代 11 同调批 T6——临时 AP 当轮生效;库存通道积点件已由 use_attune_convert - # 承载〔charges=0 零骑库存〕,本分支保留=charges>0 且挂 ap_charge_safe 的历史形态兼容) - if not action_economy.grant_ap(int(v.magnitude)): - return {"ok": false, "reason": "行动点加量被拒(相位防御)"} if kinds.has("safe_dig"): # 天眼安全格直开(迭代 22 秘宝批 T3——C5 裁全额兑付:fx_reveal 通道复用=免 AP 零相位、 # 连锁与格面资源与普通挖格同链;危险格仅真视显示不移除=契约 3;有旗格跳过=旗=玩家承诺不代开) diff --git a/game/core/treasure_items.gd b/game/core/treasure_items.gd index 1a4d6c6b..9542f69a 100644 --- a/game/core/treasure_items.gd +++ b/game/core/treasure_items.gd @@ -90,13 +90,13 @@ func discard_item(handle: int) -> bool: # 板级零信息可用性预判(图标置灰/入口禁用判据——GDD「整张图都没东西可看」级): # 真视恒可用(零雷窗口=信息非空);AP 类恒可用(组合判据取 OR——任一效果有信息即可用); -# 纯预读行 = 板上还有未开格才可用。 +# 纯预读行 = 板上还有未开格才可用。(积点件不入使用面——反哺批⑤自动兑付无玩家入口) func _usable_now(item_id: String, board_has_preview_info: Callable) -> bool: var row: Dictionary = _item_row(item_id) if row.is_empty(): return false var kinds: Array = row.get("effect_kinds", []) - if kinds.has("mine_reveal") or kinds.has("ap_grant") or kinds.has("ap_charge_safe"): + if kinds.has("mine_reveal") or kinds.has("ap_grant"): return true return bool(board_has_preview_info.call()) if board_has_preview_info.is_valid() else true diff --git a/game/data/tables/treasure_items.tres b/game/data/tables/treasure_items.tres index b2c1b6f4..5c451922 100644 --- a/game/data/tables/treasure_items.tres +++ b/game/data/tables/treasure_items.tres @@ -12,8 +12,9 @@ script = ExtResource("1") ; 真视类工具累计使用(本批新增计数域)。全部数值 provisional 归调参批(契约 7)。 ; 常时参数面件(无订阅行——效果=开局/装板参数注入,非事件订阅):阔视野带/储备罐/远程镐/信标网络/刷新练习/ ; 刷新执照六件 effect_kinds 挂参数 kind,由注入面按装配集 kind 分发读取(_attune_refresh_x_total 先例)。 -; 主动件:线香(battle 级充能)/天眼(level 级充能)charge_reset 扩签;试炼镐=积点制(charges=0 无上限, -; ap_charge_safe 滑耗单级化——设计「4 格积 1 点满 2 点换 AP」两级结构的行为等价实现,8 格兑 1 AP)。 +; 主动件:线香(battle 级充能)/天眼(level 级充能)charge_reset 扩签;试炼镐=自动兑付(charges=0 无上限, +; ap_charge_safe 满 charge_n=8 自动当轮 grant_ap——2026-10-12 反哺批⑤用户裁:无玩家发起入口、 +; 旧行 counter_spend 受理闸随裁删除;挖格扣 AP 后、轮末判定前兑付;战斗级重置=账即时清空自然无感)。 rows = [{ "item_id": "morning_order", "display_name": "晨操令", @@ -56,7 +57,7 @@ rows = [{ "item_id": "trial_pick", "display_name": "试炼镐", "dimension_tags": ["action"], -"desc": "每开 4 安全格积 1 点,满 2 点换当轮 AP +1", +"desc": "每开 8 个安全格,当轮 AP +1(自动)", "tier": "common", "effect_kinds": ["ap_charge_safe"], "target": "none", @@ -66,15 +67,7 @@ rows = [{ "slot_cost": 1, "charges_per_adventure": 0, "charge_n": 8, -"unlock_keystone_cost": 10, -"triggers": [{ -"on": "treasure_used", -"do": { -"kind": "counter_spend", -"counter_id": "trial_pick_bank", -"value": 1 -} -}] +"unlock_keystone_cost": 10 }, { "item_id": "refresh_practice", "display_name": "刷新练习", diff --git a/game/presentation/main.gd b/game/presentation/main.gd index a59f046f..f5cfdc84 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -235,7 +235,6 @@ func _build_ui() -> void: info_panel.treasure_slot_clicked.connect(_treasure_ui.on_slot_clicked) # 迭代 7 T4——两步交互第一步 board_zone.stop_pressed.connect(_on_stop_pressed) board_zone.refresh_confirmed.connect(_on_refresh_confirmed) - board_zone.convert_pressed.connect(_on_convert_pressed) # 积点兑换(迭代 22 秘宝批 T4——试炼镐 HUD 入口) board_zone.legend_toggled.connect(_on_legend_toggled) board_zone.hover_forbidden.connect(_on_hover_forbidden) board_zone.chord_attempted.connect(_on_chord_attempted) @@ -1240,32 +1239,10 @@ func _refresh_presentations() -> void: # 每个核心信号/写调用返回后的全量重查装配(更新触发注记——无推送信号,命令式重查) var refresh_remaining: int = maxi(0, int(db.action_economy.refresh_cap_per_round) - _refresh_used_round) HudPresenter.refresh(stage, info_panel, ap_bar, settlement, runner, _level_active, db, refresh_remaining) - _sync_convert_button() + _treasure_ui.refresh_slots() # C 区秘宝槽重查(反哺批⑤——试炼镐积点进度随挖格刷新悬停浮窗) _sync_settlement_visuals() -# 积点兑换钮态(迭代 22 秘宝批 T4——读数口命令式重查;未装配=隐藏零占位) -func _sync_convert_button() -> void: - if settlement == null: - board_zone.ap_bar.set_convert_state(false, 0, 0, "") - return - var cs: Dictionary = settlement.attune_convert_state() - board_zone.ap_bar.set_convert_state(bool(cs.get("assembled", false)), int(cs.get("points", 0)), - int(cs.get("need", 0)), String(cs.get("display_name", ""))) - - -func _on_convert_pressed() -> void: - if settlement == null: - return - var v: Dictionary = settlement.use_attune_convert("trial_pick") - if not bool(v.get("ok", false)): - board_zone.toast.show_toast(String(v.get("reason", "无法兑换")), "warn") - return - logger.log_action("convert", Vector2i(-1, -1), true) - board_view.refresh() - _refresh_presentations() - - func _sync_settlement_visuals() -> void: # 结算阶段(round_end → 下一轮):D 区去饱和+金橙偏移锁输入(明度不变)+ 明细带展开 84px var settling := _is_settling() diff --git a/game/presentation/treasure_interact_controller.gd b/game/presentation/treasure_interact_controller.gd index 51613b21..f5137d1b 100644 --- a/game/presentation/treasure_interact_controller.gd +++ b/game/presentation/treasure_interact_controller.gd @@ -52,7 +52,8 @@ func active_selection() -> int: return _use_selection -# 槽点击(第一步):AP 类(target=none)点击即用(无目标);空间类进/出选中态(toggle 取消)。 +# 槽点击(第一步):AP 类(target=none)点击即用(无目标);空间类进/出选中态(toggle 取消); +# 自动兑付件展示行(handle<0)无使用动作——点击给说明提示(反哺批⑤)。 func on_slot_clicked(slot_handle: int) -> void: var settlement = _settlement_get.call() var runner = _runner_get.call() @@ -62,6 +63,9 @@ func on_slot_clicked(slot_handle: int) -> void: _use_selection = 0 refresh_slots() return + if slot_handle < 0: + toast.show_toast("自动兑付件:满足条件自动生效,无需手动使用", "info") + return var rec: Dictionary = {} for r in inventory_projection(): if int(r.get("handle", 0)) == slot_handle: @@ -112,9 +116,16 @@ func inventory_projection() -> Array: cb = func(_c: Vector2i) -> bool: return ms.has_unrevealed() # 只读查询面(排雷玩法 has_unrevealed——手搓全板双循环收口) var out: Array = [] + var cs: Dictionary = settlement.attune_convert_state() if settlement != null else {} + var auto_seen := false # 自动兑付件是否已随骑库存出现(恒否——charges=0 不入骑库存;守合成行重复) for rec in runner.treasure_inventory.query_inventory(cb): var arow: Dictionary = db.treasure_item_row(String(rec.get("item_id", ""))) var dn := String(arow.get("display_name", "")) + # 积点进度浮窗行(反哺批⑤——自动兑付件 C 区悬停 tooltip 补 N/M 进度;件 id 锁定=装配行唯一) + var note := "" + if bool(cs.get("assembled", false)) and String(cs.get("item_id", "")) == String(rec.get("item_id", "")): + note = "积点 %d/%d" % [int(cs.get("points", 0)), int(cs.get("need", 0))] + auto_seen = true out.append({ "handle": int(rec.get("handle", 0)), "item_id": String(rec.get("item_id", "")), @@ -122,7 +133,22 @@ func inventory_projection() -> Array: "name": dn, "used": bool(rec.get("used", false)), "usable": bool(rec.get("usable", true)), + "note": note, }) + # 自动兑付件展示行(反哺批⑤补——charges=0 不入骑库存〔_reseed_attune_charges 跳过注入〕, + # C 区四槽末尾补合成行承载悬停进度;handle=-1 非库存句柄:槽点击走说明 toast 分支不进两步交互) + if bool(cs.get("assembled", false)) and not auto_seen: + var adn := String(cs.get("display_name", "")) + if adn != "": + out.append({ + "handle": -1, + "item_id": String(cs.get("item_id", "")), + "glyph": adn.left(1), + "name": adn, + "used": false, + "usable": true, + "note": "积点 %d/%d" % [int(cs.get("points", 0)), int(cs.get("need", 0))], + }) return out diff --git a/game/presentation/views/ap_bar_view.gd b/game/presentation/views/ap_bar_view.gd index efa27b5f..743595cf 100644 --- a/game/presentation/views/ap_bar_view.gd +++ b/game/presentation/views/ap_bar_view.gd @@ -13,7 +13,6 @@ extends PanelContainer signal stop_pressed signal refresh_confirmed signal legend_toggled -signal convert_pressed # 积点兑换意图(迭代 22 秘宝批 T4——写口唯一=BattleOrchestrator.use_attune_convert) const COL_GOLD := UiKit.GOLD const COL_DOT_OFF := UiKit.DOT_OFF @@ -22,7 +21,6 @@ const COL_INK := UiKit.INK var _dots: HBoxContainer var _ap_label: Label var _btn_stop: Button -var _btn_convert: Button # 积点兑换钮(迭代 22 秘宝批 T4——试炼镐 HUD 入口;未装配隐藏) var _btn_legend: Button var _btn_refresh: Button var _refresh_sub: Label @@ -63,12 +61,6 @@ func _init() -> void: _btn_stop.pressed.connect(_emit_stop_pressed) row.add_child(_btn_stop) - _btn_convert = UiKit.button("兑换", 0.0) # 行板紧凑钮豁免——积点兑换(试炼镐;未装配隐藏) - _btn_convert.size_flags_vertical = Control.SIZE_SHRINK_CENTER - _btn_convert.visible = false - _btn_convert.pressed.connect(func(): convert_pressed.emit()) - row.add_child(_btn_convert) - var spacer := Control.new() spacer.size_flags_horizontal = Control.SIZE_EXPAND_FILL row.add_child(spacer) @@ -136,15 +128,6 @@ func set_refresh_cost(cost: int) -> void: _confirm_lab.text = "RAP−%d · 旧板旗作废" % cost -# 积点兑换钮(迭代 22 秘宝批 T4——试炼镐转化获取 HUD 入口:装配时在列〔visible〕、 -# 积点未达 disabled;文案=件名+进度。未装配=隐藏零占位) -func set_convert_state(assembled: bool, points: int, need: int, display_name: String) -> void: - _btn_convert.visible = assembled - if assembled: - _btn_convert.text = "%s %d/%d" % [display_name, points, need] - _btn_convert.disabled = points < need - - func set_refresh_state(remaining: int, ready: bool) -> void: _refresh_sub.text = "RAP−%d · 剩 %d 次" % [refresh_cost, remaining] _btn_refresh.disabled = not ready diff --git a/game/presentation/views/board_zone_view.gd b/game/presentation/views/board_zone_view.gd index 79b7a61b..1fef6e35 100644 --- a/game/presentation/views/board_zone_view.gd +++ b/game/presentation/views/board_zone_view.gd @@ -18,7 +18,6 @@ var _board_area: Control # resized 命名转发用(原 lambda 局部捕获 signal action_requested(cell: Vector2i, kind: String) signal stop_pressed signal refresh_confirmed -signal convert_pressed # 积点兑换意图转发(迭代 22 秘宝批 T4——试炼镐 HUD 入口,源=ap_bar) signal legend_toggled signal hover_forbidden(cell: Vector2i) signal chord_attempted(cell: Vector2i) @@ -83,7 +82,6 @@ func _init() -> void: board_view.chord_attempted.connect(_forward_chord) ap_bar.stop_pressed.connect(_emit_stop_pressed) ap_bar.refresh_confirmed.connect(_emit_refresh_confirmed) - ap_bar.convert_pressed.connect(_emit_convert_pressed) ap_bar.legend_toggled.connect(_emit_legend_toggled) @@ -107,10 +105,6 @@ func _emit_stop_pressed() -> void: stop_pressed.emit() -func _emit_convert_pressed() -> void: - convert_pressed.emit() - - func _emit_refresh_confirmed() -> void: refresh_confirmed.emit() diff --git a/game/presentation/views/hero_info_panel_view.gd b/game/presentation/views/hero_info_panel_view.gd index 21ce6d46..3b972820 100644 --- a/game/presentation/views/hero_info_panel_view.gd +++ b/game/presentation/views/hero_info_panel_view.gd @@ -220,4 +220,8 @@ func set_treasure_inventory(items: Array, selected_handle: int) -> void: var border_col: Color = UiKit.GOLD if selected else UiKit.PANEL_BORDER slot.add_theme_stylebox_override("panel", UiKit.panel_flat(UiKit.PANEL_DATA, border_col, 0, 1 if not selected else 2, Vector4(4, 4, 4, 4))) - slot.tooltip_text = "%s%s" % [String(rec.get("name", "")), "(已用)" if used else ("(不可用——当前无有效目标)" if not usable else "")] + # note=积点进度行(反哺批⑤——自动兑付件悬停浮窗补「积点 N/M」,进度随挖格经组合根重查刷新) + var note := String(rec.get("note", "")) + slot.tooltip_text = "%s%s%s" % [String(rec.get("name", "")), + "(%s)" % note if note != "" else "", + "(已用)" if used else ("(不可用——当前无有效目标)" if not usable else "")] diff --git a/game/tests/unit/core/treasure_effects_test.gd b/game/tests/unit/core/treasure_effects_test.gd index fc39a852..4bf8880b 100644 --- a/game/tests/unit/core/treasure_effects_test.gd +++ b/game/tests/unit/core/treasure_effects_test.gd @@ -71,19 +71,45 @@ func _init() -> void: var ob4 = orch_s.new(db, rng4) Kit.check_quiet(ob4.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp), "attunement": ["trial_pick"]}), "试炼镐:装配起战") - var v_bad: Dictionary = ob4.use_attune_convert("trial_pick") - Kit.check_quiet(not bool(v_bad.get("ok", true)) and String(v_bad.get("reason", "")).contains("积点未达"), - "试炼镐边界:积点未达拒绝零副作用(受理闸 counter_spend)") + # 自动兑付(反哺批⑤ 2026-10-12 用户裁):无玩家入口——揭示缓冲点即时计数,满 charge_n 自动 + # grant_ap(cell_revealed 先于本格扣费→AP 归零恰逢满点时先兑再扣、轮不结束)。直调揭示处理器 + # 构造 7+1 格序列(缓冲路径与真挖格同链;授予段无积点段无二次计数) var ap_before4 := int(ob4.action_economy._ap) - ob4._fx.counter_add("trial_pick_bank", 1) # 直摆积点(模拟 8 安全格积点——计数链断言归冒烟集成段) - Kit.check_quiet(bool(ob4.use_attune_convert("trial_pick").get("ok", false)) - and int(ob4.action_economy._ap) == ap_before4 + 1, - "试炼镐正常:满点兑付当轮 AP +1(counter_spend 消耗+grant_ap)") + for _i7 in 7: + ob4._on_cell_revealed({"kind": "safe", "cell": Vector2i(0, _i7)}) + Kit.check_quiet(int(ob4.action_economy._ap) == ap_before4, + "试炼镐边界:7 格未达阈值零兑付(AP 不变)") + ob4._on_cell_revealed({"kind": "safe", "cell": Vector2i(0, 7)}) + Kit.check_quiet(int(ob4.action_economy._ap) == ap_before4 + 1, + "试炼镐正常:第 8 格自动兑付当轮 AP+1(无玩家入口)") + var cs4: Dictionary = ob4.attune_convert_state() + Kit.check_quiet(bool(cs4.get("assembled", false)) and int(cs4.get("points", -1)) == 0 + and int(cs4.get("need", -1)) == 8 and String(cs4.get("item_id", "")) == "trial_pick", + "试炼镐读数口:兑付后进度归零(8 取余)、阈值=charge_n、C 区浮窗数据源") var rng4b = load("res://core/rng_service.gd").new(); rng4b.set_master_seed(252) var ob4b = orch_s.new(db, rng4b) ob4b.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp)}) - Kit.check_quiet(not bool(ob4b.use_attune_convert("trial_pick").get("ok", true)), - "试炼镐反例:未装配拒绝(且积点清账——用后清账滑耗)") + ob4b._on_cell_revealed({"kind": "safe", "cell": Vector2i(0, 0)}) + var ap_base := int(db.action_economy.ap_per_round) + Kit.check_quiet(int(ob4b.action_economy._ap) == ap_base and not bool(ob4b.attune_convert_state().get("assembled", true)), + "试炼镐反例:未装配零兑付零计数(AP=整轮表值、读数口 assembled=false)") + + # ④b 自动兑付件 C 区展示行(反哺批⑤补——charges=0 不入骑库存〔_reseed 注入循环跳过〕, + # 展示行=C 区悬停浮窗进度唯一承载:handle=-1 非库存句柄+note 进度;空骑库存桩直构投影链) + var rng4c = load("res://core/rng_service.gd").new(); rng4c.set_master_seed(253) + var ob4c = orch_s.new(db, rng4c) + ob4c.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp), "attunement": ["trial_pick"]}) + var ctrl4 = load("res://presentation/treasure_interact_controller.gd").new(db, null, null, null, null, + func(): return ob4c, func(): return StubAutoInvRunner.new()) + var proj4: Array = ctrl4.inventory_projection() + Kit.check_quiet(proj4.size() == 1 and int(proj4[0].get("handle", 0)) == -1 + and String(proj4[0].get("item_id", "")) == "trial_pick" + and String(proj4[0].get("note", "")) == "积点 0/8", + "试炼镐 C 区展示行:装配即入投影(handle=-1 合成行+悬停进度 note=积点 N/8——charges=0 不入骑库存的浮窗承载)") + ob4c._on_cell_revealed({"kind": "safe", "cell": Vector2i(0, 0)}) + var proj4b: Array = ctrl4.inventory_projection() + Kit.check_quiet(String(proj4b[0].get("note", "")) == "积点 1/8", + "试炼镐展示行进度刷新:开格后 note=积点 1/8(组合根重查链)") # ⑤ 刷新练习(存量账一次性加仓/临时账不动) var rng5 = load("res://core/rng_service.gd").new(); rng5.set_master_seed(261) @@ -310,3 +336,14 @@ func _cell_at(orch, c: Vector2i) -> Vector2i: if b != null and b.in_bounds(c): return c return Vector2i(-9, -9) + + +# 自动兑付件展示行测试桩(反哺批⑤——空骑库存 runner 桩:charges=0 件不入骑库存, +# 展示行合成逻辑在 treasure_interact_controller.inventory_projection 末段) +class StubAutoInvRunner: + extends RefCounted + var treasure_inventory: StubAutoInv = StubAutoInv.new() + class StubAutoInv: + extends RefCounted + func query_inventory(_cb: Callable) -> Array: + return []