merge: 迭代22裁决落文批——A单十五条追认收口+B单七条反哺全落文(秘宝.md v3.0/元进度.md v1.17/camp.md v1.3/存档序列化.md v1.6/行动经济.md v0.12/术语表 v1.2)+⑤试炼镐改自动兑付代码批(兑换钮链退役/满8格自动AP+1揭示点兑付AP归零不断轮/C区秘宝槽悬停浮窗进度)+报告⑮提交号勘正(T5=73db171)+06裁决小节收口+07㉑观测点换代(裁决会话逐点裁;冒烟898/0+单测22套+probe click/full全绿;残留人闸=07㉑实机目检)

This commit is contained in:
DKChan committed 2026-10-12 23:23:24 +08:00
commit 8455b4aeff
18 files changed
+140 -190

No files matched your search

+7 -1
View File
@@ -176,10 +176,16 @@
**归属**:[秘宝](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-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 反哺点七条已随 2026-10-12 裁决落文批收口(逐条结果见下方裁决小节;反哺七条全部落文——秘宝.md v3.0/元进度.md v1.17/camp.md v1.3/存档序列化.md v1.6/行动经济.md v0.12;连带⑤改自动兑付代码批过闸=冒烟 898/0+单测 22 套+probe click/full)。残留人闸=实机目检秘宝解锁-装配正常流程体验(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 件退役删行批消解。
#### 迭代 22 代拍板追认单十五条裁决结果+反哺点七条落文(2026-10-12 用户逐裁,裁决会话+反哺落文批执行)
**A 单十五条**(实现报告 §二——①②③⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮ 追认;④ 追认+积点账生命周期裁**战斗级**〔设计留白补记入秘宝.md 代价轴〕;⑤ **推翻·改自动兑付**——满 8 安全格自动当轮 AP+1 无玩家入口,兑换钮链退役+desc 换代+受理闸删+C 区秘宝槽悬停浮窗进度〔用户裁落位〕,代码批四闸重跑全绿);⑮ 附报告提交号勘正(master 实际 T5=73db171,原记 7095505 系 amend 前被弃旧提交)。卡片 §11 三条回补待裁点随 A 单①②③收口。
**B 单七条反哺落文**(实现报告 §三,用户逐点裁「落文」全落):①②③秘宝.md v3.0(目录三表实态列/试炼镐自动兑付换代/代价轴转化获取行含战斗级重置与兑付时序/解锁条件表实录〔钥石 10/25+四条件件三计数键〕/全部「实装批落地前」句换代);④元进度.md v1.17(秘宝匣行实装实录+柜台纪律排期态消解+P1 定价换代);⑤camp.md v1.3(秘宝匣柜台呈现细则节+暂停层 12 行只读概览+退役/封存件口径消解);⑥存档序列化.md v1.6(vision_used 域行+vision_counter_used 断点随件+bonus_aux_carry 退役+v6 扩列不升版注);⑦行动经济.md v0.12(finish_round_stop 转存率参数化注记)。连带:07㉑ 观测点随⑤换代;术语表 v1.2 补「自动兑付/真视使用计数」两词条。
#### 迭代 20 专长实装批 GDD 反哺点(五条清单——2026-10-11 随批登记,逐点待用户裁决后另批落文)
+1 -1
View File
@@ -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)。
@@ -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)同引用直改 |
@@ -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;域名以实装批定名为准) | 三武器等级 + 三甲等级 + 当前武器/甲选中标记(各 1;无特效域;旧档破坏性废弃口径归该批) | [锻造工坊](../跨局循环/锻造工坊.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,3 +193,4 @@ 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 | **迭代 22 反哺落文批(实现报告 §三⑥,用户裁「落文」)**:域清单表补 `vision_used` 行(真视使用终身计数,迭代 22 新增,v6 域后扩列补零不升版本——迭代 21 先例;断点随件 `vision_counter_used` 同批新增、旧随件键 `bonus_aux_carry` 随替换子交互拆除退役);缺键补齐纪律句补 v6 扩列注;零迁移口径复核=SAVE_FORMAT_VERSION 仍 6(`save_manager.gd:49`),无迁移分支新增 |
+4 -3
View File
@@ -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 已投,终值归调参批)。机制零改动 |
+36 -35
View File
@@ -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「维度覆盖检查破缺」「失义道具的掉落投放」两条随批关闭 |
+13 -2
View File
@@ -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 行只读概览);三柜台列秘宝匣行换代指路;退役/封存件呈现语义口径随旧目录删除消解(历史语义留版本历史)。机制零改动 |
+3
View File
@@ -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);对照表补巢穴行 |
+9 -9
View File
@@ -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 反哺批重跑全绿】:原实现绕库存直呼 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 进度文案即可,机制不动)。
+24 -65
View File
@@ -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:
@@ -266,47 +266,16 @@ func _reseed_attune_charges(reset: String) -> void:
# 积点制主动件受理(迭代 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 订阅,
@@ -621,6 +590,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 已换批,授予必须用缓冲期身份,
# 防旧图已挖格在轮末错拿新图同坐标身份)。雷格同样携带(雷安同池——负向兑付的来源格)
@@ -720,23 +701,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 照常兑付——惊动巢穴),
# 标中不发(旗已随挖掘擦除、不入轮末判定基线)。
@@ -1017,11 +981,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;有旗格跳过=旗=玩家承诺不代开)
+2 -2
View File
@@ -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
+5 -12
View File
@@ -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": "刷新练习",
+1 -24
View File
@@ -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)
@@ -1233,32 +1232,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()
@@ -112,9 +112,14 @@ 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 {}
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))]
out.append({
"handle": int(rec.get("handle", 0)),
"item_id": String(rec.get("item_id", "")),
@@ -122,6 +127,7 @@ func inventory_projection() -> Array:
"name": dn,
"used": bool(rec.get("used", false)),
"usable": bool(rec.get("usable", true)),
"note": note,
})
return out
-17
View File
@@ -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
@@ -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()
@@ -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 "")]
+18 -9
View File
@@ -71,19 +71,28 @@ 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)")
# ⑤ 刷新练习(存量账一次性加仓/临时账不动)
var rng5 = load("res://core/rng_service.gd").new(); rng5.set_master_seed(261)