diff --git a/design/art/art-bible.md b/design/art/art-bible.md index 14b0bed9..e6b2017f 100644 --- a/design/art/art-bible.md +++ b/design/art/art-bible.md @@ -27,7 +27,7 @@ *设计测试:当某信息歧义于"画进格子"还是"收进面板"时,画进格子。* -**原则二|明亮为皮,明度分档为骨**(取自 Moonlighter、Peglin;锚定 P1 可读性前提、P4 探险氛围;2026-09-29 v3.0 修订——原「色牌为骨」降级,病根与修法见 `design/research/art-bible-ux-review-2026-09-29.md` 病根 3) +**原则二|明亮为皮,明度分档为骨**(取自 Moonlighter、Peglin;锚定 P1 可读性前提、P4 探险氛围;2026-09-29 v3.0 修订——原「色牌为骨」降级,病根与修法见审视报告(已退役,git fbaadb8)病根 3) 取 Moonlighter 的暖质地砖与亲和冒险者气质、Peglin 的明快全年龄洞穴色彩:全局暖倾向、无压抑。可读性由**格底明度分档**承载——已开格(数字所在格)明度走世界底层档(§2 明度分层;格态语义见《排雷玩法》;美术侧据此未开格走受光墙顶档、已开格走挖出空间沉暗档,与 §8.5 图底分离同轴),亮族数字墨直接画在格底上,对比硬指标不变(≥4.5:1 恒成立)。**数字色牌降级为后备手段**——仅复杂格底(物件纹样/变异纹带/微光叠加致格底对比不足)时垫牌兜底(画法 §3.3、色值 §4.1)。格子本体美术自此放开:纹理、材质、装饰变体、类型纹样皆可入画;格底参数域见 §4.1 硬指标(分档明度域、饱和上限),仍避 Boss 禁入色相带。与参考之别:ITB 以半透明压暗板承载信息;本作格底功能分档(信息可读性服务,属 §2 明度分层允许域),情绪压暗仍禁。 @@ -503,8 +503,8 @@ - **v3.4(2026-10-01)数字呈现三态修订(甲案深墨族方案渲染帧取证证伪后改版)**:v3.3 的「L2/L3 切深墨族直画」经 board_shot_probe 渲染帧取证证伪——underdark 系地板双峰纹理(近黑斑 p10 0.011+近白筋 p90 0.40+)上深墨直画融黑斑隐形(用户实机复测「还是看不清」实证),任何墨族直画不可救;改**三态**:dungeon 亮族直画(门 p90≥4.5/均值≥2.5)/中暗板深墨直画(门 p90≥4.5/均值≥3.0)/双峰板**色牌垫底**(素牌+深墨 12:1,v2 色牌形制复役);机检三关呈现模式断言 19/19;目视验证面=board_shot_probe 渲染帧取证入流程(机检≠看得清)。§1.4 样张闸第四验收项判读随三态口径件注记。 - **v3.3(2026-10-01)数字墨按板自适应修订(L2/L3 亮瓦融字缺陷修复,用户裁甲案「墨色按关自适应+补三关对比断言」)**:§4.1 数字墨双色制①改**按板自适应双族**——暗纹理板维持亮族三档(样张 v3 冻结原样),亮筋纹板(underdark/deep_underdark)切深墨族三档(青墨/赭墨/锈墨复役);选族判据=所选族对归一后地板 p90 亮斑 ≥4.5:1 且对均值 ≥2.0:1,落码单点 `board_view._digit_ink_mode`,机检=`terrain_tile_sets_test` 三关对比断言 21/21;缺盘平色回退默认深墨族。§4.1 其余条款(字形唯一载体/三档色温/垫牌后备)不变。 - **v3.1(2026-09-30)越权清理批(用户指令:按域内审查修订案修改,概念定义归还 GDD 正主)**:①**微光口径四处改指路**——§1.2 原则三/§1.4 样张清单去「常显」、§4.2 色带条去「常显」、§4.6.3 去「全部未开格」,统一指路《HUD框架》「未开格类型微光」节(2026-09-30 收口批落位的唯一正主,他文只许指路);②**概念越权剥离**——雷格叙事属名与换轴史、封印插旗语义(→registry「封印」条+《排雷玩法》玩家说法)、极性定义(→《地图战斗资源》极性提案)、完美排雷定义与兑付结构(→同)、敌意图预告语义与「待机即预示」(→《敌人系统》意图线索节)、奖励 weight 与兑付/库存语义(→《地图战斗资源》)、键名沿革史(empower/fortify 来源=敌方技能施放、alert 2026-09-20 八型批换装、ac_up 2026-09-16 换装——自 §4.6.1 移除留痕)、甲档 armor 数据实态(L1 全轻甲/L2 除 drider 外全轻甲/L3 duergar·duergar_king 重甲)与旧键集史({grub, ambusher} 随 DND 更名退役——自 §4.6.4 移除留痕)、「敌不占格」断言、「类型分布即先验」机制 rationale、「分布属初始化随机」归属断言(改画法口径「分布每板一次跨轮不复掷」);③**实装状态与排期注记移本历史留痕**——游戏 UiKit.HERO_BLUE 已同步 #2E6E8E→#2E86DE、UiKit.CONTACT_GLOW 同值 #D6ECFF、旧可挖域绿相 DIG_EDGE 已随接触带方案退役、死亡表现切片实装=程序化 tween(灰化罩+碎块弹飞 5 块 0.45s,挂 unit_died)、封印特效「待表现批」、§6.1 背景插画「排期归表现层升级批」、panel_stone/button_stone 接线归最近表现批、§7.2 对比度违例「修复归表现批」、§7.5「占位不空窗」注记;④**角嵌退役条改写**为现行「未开格预读通道(微光单通道)」条(退役史见 v2.12);⑤**残留矛盾清除**——§3.2 呈现基准条「装饰变体一律纹理级」旧措辞随 v3.0 物件级解禁同步;⑥§2.8 营地承载元素/§7.5 钥石呈现位改指 §6.2(事实源边界在该节);⑦**补漏五处(同批完工审计发现,同类剥离留痕)**——§4.1 危险红「机关红」更名史、§6.2 营地贴图「排期归 UI 贴图重构批」与「占位不空窗」注记、§7.4 字体「接入归表现批」注记、§8.1 扩板与 1920 档换算值「归表现层升级批成文」(改债务指路 06「分辨率档位与棋盘格边长口径」条)、§8.3 「终稿目录归表现批定」注记、§1.4 整屏样张闸「表现层落码批开工前」改屏级落码开工前、§7.1 「样式终稿归样张后表现批」改随样张闸后定稿。**零美术信息损失**:全部色值/机检断言/纹样描述/画法参数不动,样张 v2 四冻结之②③维持 -- **v3.2(2026-09-30)样张 v3 冻结批+缩放分级修订+案甲落定(迭代 9 T1/T2/T9;任务书=`design/research/任务书-美术圣经v3.5冻结与落码-2026-09-29.md`)**:①§1.4 补**样张 v3 冻结记录**——机检 17/17 全绿,断言定值两件(A3b 图底分离定值 Δ≥30〔实测 38〕/A4 尺寸基线硬等冻结 立绘 46×48+小人源 32×32),F6 沿用 v3.4;**四冻结①④重冻**——①砖面形态=E 格高墙 30% 词表扩展+格底明度分档(世界底层档 L≈0.10)+装饰物件级解禁/④数字形制=亮墨三档直画+色牌后备;②色板③动画维持冻结。产物 `artwork/mockups/sample-batch-v3-final-2026-09-30.png`+机检报告【冻结】;气质终审=2026-09-29 用户验收豁免(台账 281)。②**§8.2 缩放纪律分级修订**(2026-09-26 用户裁「改规则不豁免」落文,修订窗口=v3.0 落籍):甲类文本语义件(数字/图标/旗/砖面/纹样)维持严格整数倍;乙类角色精灵允许运行时非整数倍(NEAREST 不变,判据=实机目检可感不适即回整数档);1920 档策略经三裁决**案甲落定**(全局等比 stretch keep——v3.2 当日 T9 落文,详见 §8.2)。头注「现行为」随批 v3.2。 -- **v3.0(2026-09-29)中修批(案 B,用户拍板;审视报告=`design/research/art-bible-ux-review-2026-09-29.md`,六病根+三案呈报)**:①**§2 明度恒定→明度分层**——三档明度带(信息面层/世界中层/世界底层),情绪与状态明暗禁令保留(状态区分仍只走色相/饱和/运动/元素),空间纵深/光照/形体塑造开允许域;§2.1/2.2/2.3/2.5/2.7 各状态条措辞随改,§2.7 增「明度带随深度微移」候选。②**原则二色牌降级**——「明亮为皮,色牌为骨」改「明度分档为骨」:已开格走世界底层档(候选 L 0.20–0.32),棋盘数字墨亮族直画(候选 L≥0.75,冷亮/暖白/金亮三档色温承袭密度语义),色牌仅复杂格底后备(垫牌场景用深墨族,12.3:1 实测保留);§1.4 验收 1/2/4 与判定回退口径同步,样张 v2 四冻结之①④(砖面形态之数字承载面/数字形制)**解冻待样张 v3 重冻**(②③冻结〔色板/动画〕不受影响)。③**语义色适用域限定**——§4.2 各条「X 只说 Y」约束信息层与语义物件,纯环境氛围解禁(焦点预算与低饱和后退接管防抢焦);紫赤禁入带环境层低饱和可入、高饱和独占不变;§4.3 换皮槽与不变槽口径随改。④**装饰变体物件级解禁**——专属装饰形状家族+零信息纪律不变+焦点预算约束,配额候选 3–5 种(原则三/§3.2)。⑤**§6.1 舞台正面目标**——B 区=地窟看台(地台/落影/光源氛围候选),补原条只有负面约束之缺。⑥**§1.4 整屏样张闸新增**——战斗/关卡/菜单/营地四屏,验收四项(全局文字 ≥4.5:1/明度三档带/整屏焦点预算/文字禁压纹理),闸形=方向稿目检先行→机检冻结。⑦**§7 三件**——7.1 占位收口条款(占位=临时态,终稿闸=整屏样张)/7.2 全局文字可读性硬指标/7.4 字号下限 16/14px 对齐 ux-designer PC 规范+层级手段解禁(字号档差+墨色+字重)。⑧**§8.2 档位上调方向候选**(主角 64×96/敌 64/96/128 评估,归整屏样张闸,本批不重产资产)。⑨**§9 参考表**——Moonlighter 取列增光照层次、§9.2 DD 条款改名+新增「传统扫雷白牌」反面行。⑩**§3.4 焦点双机制**(完整度+明度带)。**连带文档同步**:character-design.md(提灯点亮解禁候选)/interaction-patterns.md/level-map.md/art-assets-checklist.md/battle.md/04-美术音频方向.md 引用口径随批。**挂账(06 登记)**:样张 v3 重跑批(断言改造+新参数冻结)/ui_kit 与棋盘渲染落码批(明度分层/格底分档/亮墨/UI 对比度修复)/资产升档重产批/mockup v3 方向稿(按 v3.0 重出)。**代拍板三项 2026-09-29 当日已追认**(闸形两段式/色牌后备范围/升档只立方向)。 +- **v3.2(2026-09-30)样张 v3 冻结批+缩放分级修订+案甲落定(迭代 9 T1/T2/T9;任务书已退役(git 710f9b7 出口批))**:①§1.4 补**样张 v3 冻结记录**——机检 17/17 全绿,断言定值两件(A3b 图底分离定值 Δ≥30〔实测 38〕/A4 尺寸基线硬等冻结 立绘 46×48+小人源 32×32),F6 沿用 v3.4;**四冻结①④重冻**——①砖面形态=E 格高墙 30% 词表扩展+格底明度分档(世界底层档 L≈0.10)+装饰物件级解禁/④数字形制=亮墨三档直画+色牌后备;②色板③动画维持冻结。产物 `artwork/mockups/sample-batch-v3-final-2026-09-30.png`+机检报告【冻结】;气质终审=2026-09-29 用户验收豁免(台账 281)。②**§8.2 缩放纪律分级修订**(2026-09-26 用户裁「改规则不豁免」落文,修订窗口=v3.0 落籍):甲类文本语义件(数字/图标/旗/砖面/纹样)维持严格整数倍;乙类角色精灵允许运行时非整数倍(NEAREST 不变,判据=实机目检可感不适即回整数档);1920 档策略经三裁决**案甲落定**(全局等比 stretch keep——v3.2 当日 T9 落文,详见 §8.2)。头注「现行为」随批 v3.2。 +- **v3.0(2026-09-29)中修批(案 B,用户拍板;审视报告=git fbaadb8(已退役),六病根+三案呈报)**:①**§2 明度恒定→明度分层**——三档明度带(信息面层/世界中层/世界底层),情绪与状态明暗禁令保留(状态区分仍只走色相/饱和/运动/元素),空间纵深/光照/形体塑造开允许域;§2.1/2.2/2.3/2.5/2.7 各状态条措辞随改,§2.7 增「明度带随深度微移」候选。②**原则二色牌降级**——「明亮为皮,色牌为骨」改「明度分档为骨」:已开格走世界底层档(候选 L 0.20–0.32),棋盘数字墨亮族直画(候选 L≥0.75,冷亮/暖白/金亮三档色温承袭密度语义),色牌仅复杂格底后备(垫牌场景用深墨族,12.3:1 实测保留);§1.4 验收 1/2/4 与判定回退口径同步,样张 v2 四冻结之①④(砖面形态之数字承载面/数字形制)**解冻待样张 v3 重冻**(②③冻结〔色板/动画〕不受影响)。③**语义色适用域限定**——§4.2 各条「X 只说 Y」约束信息层与语义物件,纯环境氛围解禁(焦点预算与低饱和后退接管防抢焦);紫赤禁入带环境层低饱和可入、高饱和独占不变;§4.3 换皮槽与不变槽口径随改。④**装饰变体物件级解禁**——专属装饰形状家族+零信息纪律不变+焦点预算约束,配额候选 3–5 种(原则三/§3.2)。⑤**§6.1 舞台正面目标**——B 区=地窟看台(地台/落影/光源氛围候选),补原条只有负面约束之缺。⑥**§1.4 整屏样张闸新增**——战斗/关卡/菜单/营地四屏,验收四项(全局文字 ≥4.5:1/明度三档带/整屏焦点预算/文字禁压纹理),闸形=方向稿目检先行→机检冻结。⑦**§7 三件**——7.1 占位收口条款(占位=临时态,终稿闸=整屏样张)/7.2 全局文字可读性硬指标/7.4 字号下限 16/14px 对齐 ux-designer PC 规范+层级手段解禁(字号档差+墨色+字重)。⑧**§8.2 档位上调方向候选**(主角 64×96/敌 64/96/128 评估,归整屏样张闸,本批不重产资产)。⑨**§9 参考表**——Moonlighter 取列增光照层次、§9.2 DD 条款改名+新增「传统扫雷白牌」反面行。⑩**§3.4 焦点双机制**(完整度+明度带)。**连带文档同步**:character-design.md(提灯点亮解禁候选)/interaction-patterns.md/level-map.md/art-assets-checklist.md/battle.md/04-美术音频方向.md 引用口径随批。**挂账(06 登记)**:样张 v3 重跑批(断言改造+新参数冻结)/ui_kit 与棋盘渲染落码批(明度分层/格底分档/亮墨/UI 对比度修复)/资产升档重产批/mockup v3 方向稿(按 v3.0 重出)。**代拍板三项 2026-09-29 当日已追认**(闸形两段式/色牌后备范围/升档只立方向)。 - **v2.15(2026-09-28)人设旗脱钩批(用户拍板)**:§5.4 速览背包旗改旗朱红矩形旗+§4.1 封印黑条红族口径限定棋盘侧;封印黑仍为棋盘封印专属色不变;人设侧详见 character-design 对应版本行(v1.7) - **v2.14(2026-09-28)关卡画面样张 v1 冻结批(M-2 迭代 4 T1–T4,机检闸形 A——11/11 全绿即冻结)**:§7.2 增「暗底呈现态双色墨制」条(暗底系图标/读数=暖白 #F0E2C8、当前金底转深墨 #181410,各态 ≥4.5:1;已过节点暗金冻结 **GOLD_DONE #68562C** 专用呈现态值——旧 GOLD_DIM #8C743C 对双色墨均不达标;Boss 描边=紫赤 2px+外缘 1px 深墨环灰度冗余通道——§4.2 色相独占本色不变);冻结面=节点图标形制(♻ kenney-board-game-icons 五键 bow/award/campfire/crown_b/pouch,20px 烘焙 1:1 消费,WARM 单色,复用闸①②③④)+通道质感(折线 2/3/4px 直角肘形)+画布公式(70+层×122+34/52+槽×58+26+8 下限 620×240——routebug 83c11a1 根修件同源)+底栏样式(暗数据框 WARM/WARM_SOFT 双墨)+屏底(BG_ROOT+backdrop_stone);换层色板渐变挂点落码(§2.7 切片档——level_index→tint 表候选值随 §6.3 方向,明度带归一,终值归色板样张批)。规格承载=level-map.md(修订记录同日行);产物=`artwork/mockups/level-map-sheet-v1-2026-09-28.png`,机检报告=git 提交 9a79927;气质终审=M-2 出口闸真人目检 - **v2.9(2026-09-26)高墙瓦片体系定稿批**(高墙批全程收官,用户拍板;台账 163/164):§3.2 新增「高墙瓦片体系」条——未挖格=一整块 32×32 自含凸起岩体(方案甲核心定义)+术语(墙瓦片/地面瓦片)+墨线边界纪律(1px 深墨线直线零锯齿,职责=分隔不融合)+单一北受光(北缘 1px 微亮棱/南缘立面窄暗条/凹角角点+立面侧 1px 齐平收头),定稿=`game/assets/art/board/terrain_*` 21 枚;§8.5 增「生产分工」条——材质归模型(AI 只出无缝填充纹理)、结构归程序(autotile 拼接约束超 2D 生图能力,实证在案)+镜像规则(只许 flip_h 禁旋转)。条口径=样张批追认(与 §8.4 方向集先例同)。词表与查表逻辑、搜包评估记录归 design/research 两档;过程文档随批清退(中间产物不入库先例,台账 127)。 diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index 62f00f89..85e48c33 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -45,6 +45,7 @@ | `关卡节点图生成.md` | 单关节点图的逐局随机来源:图模板池、抽签与实例化(实施排队 ADR-0007 裁决后) | 设计草案·拍板点全落文 | | `冒险结构.md` | 整局冒险的关卡序列、失败与大奖励 | 已定稿·自旧体系迁移 | | `难度曲线与Boss.md` | 难度曲线、期望值带与 Boss 设计 | 已定稿·自旧体系迁移 | +| `奇物.md` | 一次冒险内各渠道给予玩家的增益总称(三个分类:专长 / 属性值提升 / 资源 × 三条渠道:奖励节点 / 商店 / 关底 Boss 击败) | 已实现·2026-10-05 新立定义·v2.0 改名并重构为两根轴 | ### 跨局循环(`systems/跨局循环/`) @@ -96,6 +97,7 @@ | 冒险循环 | 关卡节点图生成 | `NODE_MAP_GENERATION` | —(新立无旧代号) | | 冒险循环 | 冒险结构 | `ADVENTURE_STRUCTURE` | c2 | | 冒险循环 | 难度曲线与Boss | `DIFFICULTY_CURVE` | c3 | +| 冒险循环 | 奇物 | `ADVENTURE_CURIO` | `ADVENTURE_FEATURE`(v1.0)→ `ADVENTURE_REWARD`(v2.0,v2.4 退役) | | 跨局循环 | 元进度 | `META_PROGRESS` | c4 | | 表现与支撑 | HUD框架 | `HUD_FRAMEWORK` | d1 | | 表现与支撑 | 数据配置 | `DATA_CONFIG` | d2 | @@ -114,8 +116,6 @@ ## 版本历史 -| 版本 | 日期 | 改动 | -|---|---|---| | v0.1 | 2026-09-15 | 根索引随新骨架建立:循环 × 子系统总表 + 子系统命名对照表 | | v0.2 | 2026-09-15 | 雾格残留清理:`地形变异.md` 概要行去掉"雾格已从设计中移除"的迁移期注记(移除事实以[不做清单](05-不做清单.md)为单一出处)。文档树形状不变 | | v0.3 | 2026-09-16 | 更名批(用户拍板 2026-09-16):两个系统中文规范名更名——"奖励道具经济"→"地图战斗资源"、"辅助道具"→"魔法道具";循环表文件行与命名对照表中文规范名同步(文件重命名 地图战斗资源.md / 魔法道具.md);英文代号暂沿用更名前名称,对齐另批 | @@ -129,3 +129,11 @@ | v1.1 | 2026-09-27 | 关卡画面 UX spec 建档(关卡画面 UX 批):`ux/` 表补 `level-map.md` 行——选路枢纽三停点布局、GP 常驻徽章、交互映射与 AC 成文,三项设计提案挂 06 待拍板 | | v1.2 | 2026-10-03 | R3 清账批(gdd_lint 分域随批):四处状态单元格日期批注迁出——敌人系统行事件见敌人系统.md 版本历史 v0.5(技能池批);元进度行见本表 v0.8;camp/shop 行=两文 v1.0 落文(2026-09-30 三裁决执行批);语义零变更 | | v1.3 | 2026-10-05 | **消歧更名批(用户拍板 2026-10-05)**:a5 行中文规范名「魔法道具」→「**秘宝**」,文档树文件名同步(systems/排雷循环/魔法道具.md → 秘宝.md);英文代号 `AUXILIARY_ITEMS` 沿用不变(代码标识符不同步属已知欠债,另批);旧代号列不变(a5 仍指 2026-09-14 归档快照)。更名理由为「魔法」一词已被本作征用为敌方侧伤害/护甲语汇(`魔法矢`/`魔法族`/`魔法护甲`),详见[秘宝](systems/排雷循环/秘宝.md) v0.9。历史定稿文档(research/qa/archive)原样保留 | +| v1.4 | 2026-10-05 | 立《特性》:一次冒险内角色自身得到的提升——此前按内部分类被叫成三个名字(规则类称"流派件"、属性类称"数值件"、界面称"本关强化"),现收敛为一个对象的两种形态枚举;文档树冒险循环补行 + 命名对照表补 `ADVENTURE_FEATURE` 行 | +| v1.5 | 2026-10-05 | 《特性》v1.1 分类重构:两类由"规则改写型 / 属性加成型"改为"属性提升(ASI)/ 专长(Feat)",属性提升内部再分纯属性组与特殊组;获取途径由两口共用池改为三条分工渠道(专长走特定节点、属性提升走奖励节点与商店)+罕见旁路"专长获取" | +| v1.6 | 2026-10-05 | 《特性》改名为《奖励》并升 v2.0:顶层概念改为"一次冒险内各渠道给予玩家的增益总称",边界判据由"自身提升 vs 持有物"改为生命周期(当局清零的是奖励,跨局带走的是魔法道具);分类由两类扩为三个枚举(专长 / 属性值提升 / 资源与机会类),并新增分类 × 渠道交叉开关表——两根轴互不决定。文档树冒险循环行改名 + 命名对照表 `ADVENTURE_FEATURE` → `ADVENTURE_REWARD` | +| v1.7 | 2026-10-05 | 《奖励》v2.1 交叉表收口:Boss 渠道只出专长(终局 Boss 不给),另两类在此不出现;新增「计价物不自售」规则处理金币不进商店——不拆第四个分类、不开特例,而是两轴交叉处的一条约束 | +| v1.8 | 2026-10-05 | 《奖励》v2.2:专长在非 Boss 渠道改为「专长获取」门票形式(不直接给专长);渠道约束重构为三层(分类白名单/可计算谓词/显式例外清单),并承认「计价物不自售」形式上是白名单外的一道过滤、与死特判的区别在可计算;立默认原则——除已登记规则外分类内的都要在池子里,据此回复应在商店内(现行货架缺它,须补) | +| v1.9 | 2026-10-05 | 《奖励》改名为《奇物》并升 v2.4:顶层定名 Wondrous Item(DND 魔法物品九分类中的兜底杂类,官方中文译名「奇物」)。文档树冒险循环行改名;命名对照表 `ADVENTURE_REWARD` → `ADVENTURE_CURIO`(**不用 `reward_*`**——`reward_pick` 流 / `reward_node` context / `reward_preview` kind 已占用该词族) | +| v1.10 | 2026-10-05 | 《奇物》v2.5:第三类定名「资源」(资源偏泛,故在命名出处节写死判据句——给的是可消耗或可重掷的余量,不是属性永久抬升);回复归属定案留在本类不拆第四类;修复 1.5 段末与渠道轴标题粘连 | +| v1.11 | 2026-10-05 | 《奇物》v2.7 三个子节点正式定名:专长(Feat)/ 属性值提升(ASI)/ 资源——去「类」字后缀,此前是描述式叫法不是专名;新增 1.6 节「三层结构与命名」,定玩家可见的三层(奇物 / 三个分类 / 具体单件),并明确命名与呈现是两件事 | diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 46bc04a6..0b573c5b 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -25,19 +25,68 @@ **设计知识存续口径**:七流派完整件表/逐项反例条件表/天赋树后备语言(哈迪斯 2 预算制扩容/邻接树改型/GP 价格通胀防线)存整合定稿,随实施批文档吸收迁入各 GDD 正主(元进度/node-reward/战斗结算/地形变异/行动经济/秘宝边界句/商店 spec)——**吸收完成前定稿不删**;喂雷流待办见上条遗留登记。 -#### 冒险 BD 两类加强物品获取同渠道、纯概率差(用户口径:获取途径须区分开,2026-10-04 提问登记) +#### 冒险 BD 各分类获取同渠道、纯概率差——渠道分工目标态(2026-10-04 提问登记;2026-10-05 用户定分工) -**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物品两类——**流派件**(机制件,改规则、带流派标签与档位激活,构筑核心,真正改变局内强度)与**数值件**(属性加成,UI 呈现名「本关强化」,写统一加算区;账本实为冒险域、关间不清零)。现行两类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),流派件只占稀有/罕见档(与数值大件混编),商店仅「货架零流派件挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 +**现状**:BD 分层口径(用户定):基础 BD(账号级,局外天赋树+同调装配)与冒险 BD(局内一次冒险的构筑)两层;冒险 BD 的加强物 = **奇物**(2026-10-05 定名,v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md)),下分**三个枚举分类**:**专长**(专长——改规则、带流派标签与档位激活,构筑核心)、**属性值提升**(生命/AC/攻击三轴,写统一加算区;账本实为冒险域、关间不清零)、**资源**(行动点上限·刷新次数·金币·回复——给"可用的量",命名待定)。旧称「流派件 / 数值件 / 本关强化」一律作废;v1.0 的「规则改写型 / 属性加成型」与 v1.1 的两分类亦作废。现行三个分类**共用同一获取渠道**:三选一(奖励节点+通关)+ 商店货架 + 格面令牌同属 98 张固定配额池(普通 70/稀有 25/罕见 3),专长只占稀有/罕见档(与属性大件混编),商店仅「货架零专长挤掉一张普通卡」保底——获取途径与条件完全相同、仅概率不同,构筑核心的获取节奏纯看脸。 -**用户期望改动**:将两类的获取途径区分开,流派件获取节奏不依赖纯概率。已呈四备选(均未拍板):① Boss/精英击杀后流派件**专属三选一**,流派件整体退出共享池〔我方推荐:确定性最高,杀戮尖塔/以撒/哈迪斯参照系全支持,与钥石逐杀 Boss 节奏同构;代价=令牌池配额回收+商店保底改向+MC 锚换代〕;② 行为条件投放(累计玩法行为定向出件,防滚雪球工程量大);③ 计步保底(每 N 奖励面必含流派件,改动最小只缓解不根除);④ 双池分离(每面必见流派件,决策密度过强,不推荐)。 +**用户定案(2026-10-05,v2.1 收口)**:分类 × 渠道交叉开关表—— -**归属**:[node-reward](ux/node-reward.md)(令牌池与奖励面)+ [冒险结构](systems/冒险循环/冒险结构.md)(商店货架保底);与上条「双层 BD 延期与备选内容总登记」二期件组相关但不同面。 +| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(末关不给) | +|---|---|---|---| +| 专长 | **门票形式** | **门票形式** | **直接给**(唯一直接渠道) | +| 属性值提升 | 出 | 出(训练) | 不出现 | +| 资源 | 出 | 出(金币除外;**回复在内**) | 不出现 | -**状态**:待讨论(2026-10-04 用户提问登记,后续展开) +**Boss 渠道是专长的独占渠道,也是唯一直接给专长的渠道**——另两类都不走这里;奖励节点与商店不直接给专长,而是给一个**「专长获取」道具(门票)**,拿到后开专长三选一。形状是"一块独占 + 两块并行",不是三块平分。**末关的 Boss 击败后不给**(打赢时冒险已结束,无后续关卡可消费),兑付只发生在还有下一关可去的那些关底 Boss 身上。用户原话:"我在获取特性的时候,可以有些比较罕见的道具,让我立马得到一个专长,就给它一点不确定性,一点随机性"。**确定性优先**:专长不因没 roll 到就构筑不起来。用户同时明确:先定大意念再分小类,渠道与分类是两根互不决定的轴。 +**兑付频率(2026-10-05 用户纠错后写死)**:这条渠道的触发点是**关底 Boss 被击败**,而按 [冒险结构](systems/冒险循环/冒险结构.md) 的定义,**打掉关底 Boss 恰好就等于"通过这一关"**——两者是同一个时刻,不是一条链上的两步。**奇物不是打一场战斗给一份**:关内普通战斗节点打完了什么也不给,一关之内奇物只兑付一次。(此前《奇物》文档的"核心循环位置"图把"战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来像每场战斗通关都给一份——已于 v2.6 修正为分支图并加此口径,勿再改回链式。) -#### 内部分类禁写入玩家可见面——流派件呈现三处违规待改(2026-10-04 用户立意登记) +**门票归专长,不归资源**:它给的不是"余量"而是"一件你以前不会的事",只是把选择推迟到一次三选一。**为什么只给门票**:若商店能直接买到指定专长,玩家就能用金币把构筑买出来,Boss 渠道"打赢才拿到"就失去意义;门票保留惊喜(开出的是三选一不是指定),但不让钱定点购买。 -**现状**:用户立意(方向已明确):流派/数值等内部分类**不得写进玩家可见的道具名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 件流派件 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店流派件卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题「流派件」+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 +**门票机制四条(用户 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 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷。 +⑤ ~~顶层命名待定~~ **已定(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-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-04 用户立意登记) + +**现状**:用户立意(方向已明确):形态(规则改写型/属性加成型)等内部分类**不得写进玩家可见的名称、介绍词或界面**——玩家可根据效果自行推断类别,游戏不得直接点破。查证实态:26 项专长奖励的 display_name 全风味名(奥术余烬/贯穿射击/矿工的执拗等,合规,符合 2026-09-29 playnote 既有批评);**违规三处**(均系迭代 12 呈现补齐批所落,承载用户「局内奖励选了什么看不到」反馈——缺口承载需求仍成立,撤的只是分类字样):① 三选一+商店特性卡面第二行印流派名(`battle_narrator.gd` relic_card_text,「奥术余烬 · 魔法」式);② 战斗屏 C 区列表标题(现为「特性」)+逐流派聚合行「魔法 ×2 · 档一」(`hero_info_panel_view.gd` + `hud_presenter.gd` relic_holdings_lines);③ 关卡选择页复用同一聚合文案(`level_map_screen.gd`)。**边界**:效果摘要行(「普攻附加必中伤害」)保留——那是件本身在做什么,是玩家推断归类的依据。 **连带裁点**:档位激活(同标签 2 件档一/4 件档二)若完全不呈现,玩家只能靠悟——三路待裁:甲=纯隐藏、机制照跑(以撒套装式,最贴用户「流派是玩家挖掘出来的」原则);乙=档位达成那一刻给一次性风味反馈、不点破流派名;丙=连档位机制一起退役。 @@ -45,6 +94,16 @@ **状态**:方向已明确(禁写类别),违规改法与档位呈现三路待讨论(2026-10-04 登记,后续展开) +#### 奇物命名统一后续——代码标识符与文件名的对齐(2026-10-05 立) + +**现状**:概念已统一为「奇物」(2026-10-05 v2.4 由「奖励」改名、v2.0 由「特性」改名,定义见 [奇物](systems/冒险循环/奇物.md))。已完成三件——① 定义文档落位(`design/gdd/systems/冒险循环/奇物.md`);② 称谓统一(代码注释与玩家可见文案,94 处+design/ 侧随改名批同步);③ 数据层标识符统一(`adventure_table.gd` / `adventure.tres` 的常量与字段整体换到 `feature_*` 词族,112 处,值零变更)。 + +**未完四件**:⓪ **`feature_*` 词族随顶层改名再换到 `curio_*`**(2026-10-05 v2.0 新增、v2.4 改目标词族)——`FEATURE_KINDS` → `CURIO_KINDS` / `feature_quota()` → `curio_quota()` / `feature_value()` → `curio_value()` / `feature_candidate_count` → `curio_candidate_count` / `feature_quota_*` / `feature_value_*`,涉及 `adventure_table.gd` + `adventure.tres` 键名 + registry。**注意两点**:其一,**目标词族是 `curio_*` 不是 `reward_*`**——`reward_pick`(rng 封闭流 scope)/ `reward_node`(`grant_aux_item` context)/ `reward_preview`(道具 kind)已占用 reward 词族,照 `reward_*` 对齐会撞车;其二,`adventure.tres` 的键名是存档外的表数据,换名只动键不减值,但 `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它,须走本表 + registry 同步修订。① 专长那套的 relic 词族(RelicTable / relics.tres / relic_id / _relics)与统一词族对齐——文件名与 class_name 改名须同步 Godot `.uid` 与 `.tscn` 引用,非文本层可自证;② 运行层标识符(`_bonus_deck` / `bonus` 加算区 / `_bonus_taken` / `pick_bonus` / BonusInteractController / BonusPickOverlay)换名;③ 断点与存档键(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)为存档兼容沿用历史名,是否随存档版本迁移一并换名待定。 + +**次序建议**:⓪ 与 ① 同为"词族对不齐",可同批;② 涉及运行层最广,单批;③ 须与存档版本迁移一起裁。**顶层已改名而代码仍是 `feature_*`,属"文档与代码分开"的临时态**,应在下一个可跑冒烟的批次内收口。 + +**状态**:待实施——须在可跑冒烟的迭代批次内完成(本会话按测试执行两入口铁规零测试,改名无法自证) + #### 棋盘战斗键盘/手柄输入(2026-10-04 用户提问登记,排期 Beta) **现状**:战斗棋盘操作现行唯一输入 = 鼠标——左键已开格 = 移动 / 未开格 = 挖掘,右键 = 封印(旗一次性承诺,无拔旗),悬停承载合法性反馈(可挖域微光 + BFS 路径点迹);全仓无 InputEventKey/JoypadButton 处理,project.godot 无自定义 InputMap 动作。**可行性已核(2026-10-04):可做**——分发接缝现成,board_view `action_requested(cell, kind)`(kind ∈ {dig, move, flag_place, flag_pull})是唯一出口,键盘/手柄作第二输入前端产出同款信号即可,规则引擎合法性校验零改动(非法目标两条路径同拦);Godot InputMap 原生支持键盘与手柄(十字键/摇杆)绑定同一动作,与鼠标并存不冲突。用户期望操作形态:十字方向移动;挖掘/封印各一独立键;方向控制选定 8 向挖掘或封印目标(斜向 = 双方向键组合)——8 向恰与现行可挖域(8 向相邻未开格)同集,十字移动与立绘 4 向既有裁决一致;键盘移动语义 = 逐格步进(现行点击 = 任意已开格 BFS 全程,逐格为等价交互变体)。连带设计点(实施批先裁):① 键盘模式需屏上光标格承载现行悬停反馈(无鼠标 hover,合法性指示改挂光标);② 键盘默认键位与手柄键位映射待定;③ 弹层界面(结算/三选一/商店/设置等)现行全鼠标,手柄全覆盖需焦点导航——本条范围 = 棋盘战斗操作,界面焦点导航是否同批待裁;④ 键位自定义是否进设置面待裁。 @@ -59,7 +118,7 @@ **归属**:[难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md)提案,战斗结算闭合共裁 -**状态**:对账复跑出讫(2026-09-29 迭代 8 卡⑧——投值后风险端当量 ×1.9,破线缓解未闭合;全量复算见 git 提交 d70f6c3 §二;结构性修订维持 Alpha 批归属)。**2026-10-04 判读收官+修订立项**:结构性修订已全裁(用户两轮「按推荐的来」+grill 七问——甲+丙先行/形态(a)兑付溢价 δ=1.25/β 带 [1.2,2.5]/条件二落文登记已知破·机制小批转绿,裁决回执=方案报告 §九,`design/research/方案-挖掘风险不等式修订-2026-10-04.md`);**判式换代批编入 roadmap 迭代 14(②号卡)**,任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d,待 U0)——**原「Alpha 批归属」作废**(M-3 已关闭)。**本条正式收口(2026-10-05 判式换代批 T3 落文=兑现条件)**:判式三层已重立落文(行动经济 F1 条款3 v0.8——聚合健康式只留下限 0 / 旗边际引理 / 条件二旗溢价 δ=0.25 provisional 形态 a,登记已知破·本批 T4 机制闭合)、β 带 [1.2,2.5] 判读制度化(u=3 β=1.17 微破下限=登记态)、registry `clause3_inequality` 重立条+改前静态锚+P7 两点修正注记落位、runsum 五字段(η 读数面)落码。**残留转登记面**:①u=3 微破下限与条件二等号压线不强制回滚(方案 §九 点名);②δ 敏感度判读(≥5pp 判据)随本批出口报告;③后续调参按 β 带逐 u 检算(难度曲线与Boss 调参联动表 +6 行)——不再立独立重跑批 +**状态**:对账复跑出讫(2026-09-29 迭代 8 卡⑧——投值后风险端当量 ×1.9,破线缓解未闭合;全量复算见 git 提交 d70f6c3 §二;结构性修订维持 Alpha 批归属)。**2026-10-04 判读收官+修订立项**:结构性修订已全裁(用户两轮「按推荐的来」+grill 七问——甲+丙先行/形态(a)兑付溢价 δ=1.25/β 带 [1.2,2.5]/条件二落文登记已知破·机制小批转绿,裁决回执=方案报告 §九(已退役,git 1da9a41));**判式换代批编入 roadmap 迭代 14(②号卡)**,任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d,待 U0)——**原「Alpha 批归属」作废**(M-3 已关闭)。**本条正式收口(2026-10-05 判式换代批 T3 落文=兑现条件)**:判式三层已重立落文(行动经济 F1 条款3 v0.8——聚合健康式只留下限 0 / 旗边际引理 / 条件二旗溢价 δ=0.25 provisional 形态 a,登记已知破·本批 T4 机制闭合)、β 带 [1.2,2.5] 判读制度化(u=3 β=1.17 微破下限=登记态)、registry `clause3_inequality` 重立条+改前静态锚+P7 两点修正注记落位、runsum 五字段(η 读数面)落码。**残留转登记面**:①u=3 微破下限与条件二等号压线不强制回滚(方案 §九 点名);②δ 敏感度判读(≥5pp 判据)随本批出口报告;③后续调参按 β 带逐 u 检算(难度曲线与Boss 调参联动表 +6 行)——不再立独立重跑批 diff --git a/design/gdd/systems/冒险循环/关卡节点地图.md b/design/gdd/systems/冒险循环/关卡节点地图.md index 8c53869d..e65ea100 100644 --- a/design/gdd/systems/冒险循环/关卡节点地图.md +++ b/design/gdd/systems/冒险循环/关卡节点地图.md @@ -109,7 +109,7 @@ Boss 兑付(胜利或英雄死亡)触发关卡收束点,此后不再有选 第二关的"新内容 = 既有池新技能"(技能池构成已定稿入[敌人系统](../战斗循环/敌人系统.md)技能池节)投放时,改的是战斗侧行里引用的技能池内容——节点图结构原样不动,本文无需为投放留任何新结构位。 -**节点奖励 = 提升三选一(迭代 10 追加批——用户 2026-10-01 拍板:与通关三选一共享同池)**:奖励节点到达即开三选一(呈现 = 提升三选一覆盖层共用面,spec:[node-reward.md](../../ux/node-reward.md) v2.0)——从提升池六种(攻击/生命上限/护甲/GP 袋/秘宝/行动点件)按同一加权洗牌抽 3(同权重、同全冒险次数上限、同 reward_pick 封闭流),玩家点选一件兑付;道具件满位触发替换子交互(与通关三选一同构)。件获取次数计数与牌库剔除态为冒险级单例——两渠道合计判上限。原「秘宝投放渠道三选一」(迭代 7 拍板②丙过渡形态)随批退役;终局=秘宝局外同调件的改写义务仍归同调实施批(proposal-magic-item-attunement-2026-09-22.md §9)。「池空直通」合法态随共享池退役——池含无上限 GP/道具件,牌库恒非空。 +**节点奖励 = 提升三选一(迭代 10 追加批——用户 2026-10-01 拍板:与通关三选一共享同池)**:奖励节点到达即开三选一(呈现 = 提升三选一覆盖层共用面,spec:[node-reward.md](../../ux/node-reward.md) v2.0)——从提升池六种(攻击/生命上限/护甲/GP 袋/秘宝/行动点件)按同一加权洗牌抽 3(同权重、同全冒险次数上限、同 reward_pick 封闭流),玩家点选一件兑付;道具件满位触发替换子交互(与通关三选一同构)。件获取次数计数与牌库剔除态为冒险级单例——两渠道合计判上限。原「秘宝投放渠道三选一」(迭代 7 拍板②丙过渡形态)随批退役;终局=秘宝局外同调件的改写义务仍归同调实施批(原提案 §9,git 57da58c 已退役)。「池空直通」合法态随共享池退役——池含无上限 GP/道具件,牌库恒非空。 ### 关卡收束点:先清库、后宣布 diff --git a/design/gdd/systems/冒险循环/冒险结构.md b/design/gdd/systems/冒险循环/冒险结构.md index 7cb00093..42b50a9a 100644 --- a/design/gdd/systems/冒险循环/冒险结构.md +++ b/design/gdd/systems/冒险循环/冒险结构.md @@ -182,7 +182,7 @@ GP(显示名「金币」)是冒险内的一次性属性提升货币:战斗 **抽取机制 = 令牌池洗牌不放回(v0.14 追认 b 实施形态,取代 E-S 加权洗牌)**:池 = 固定配额令牌库(普通 70/稀有 25/罕见 3=98 张,kind×tier 多重集);洗牌 = Fisher-Yates 不放回抽 3(**同 kind 去重每 kind 至多一枚**——「三选一=三种不同选项」体验延续;kind 出现率∝剩余令牌数,档位配额即分布、无独立权重 knob);**选中踢池、未选回池**(抽签不摘牌、兑付才摘牌);**池耗即枯竭**(余库不足出齐剩余,空库=零候选合法态直通);**种类次数上限退役**(池消耗即上限)。消费 reward_pick 封闭随机流(主种子派生、[数据配置](../表现与支撑/数据配置.md)口径),同种子同操作序列同三选项可复放。**MC 策略 316-f**:autoplay 1 级优先度=最稀有(rarest>rare>common)、2 级=最左。**提升池为冒险级单例**(迭代 10 追加批):关卡内奖励节点的三选一与通关三选一共享同一令牌库(同库同摘牌),兑付语义归[关卡节点地图](关卡节点地图.md)。 -**秘宝件受同调位约束**:道具持有上限 = 同调位数。本批挂过渡读数源 transitional_sync_slots(provisional 初始 1——首次冒险即可持 1 件道具,L1 通关大奖励即可体验道具件);正主 = 同调位里程碑谓词表([proposal-magic-item-attunement-2026-09-22](../../../research/proposal-magic-item-attunement-2026-09-22.md):0 起步、硬上限 3、增长 = 通关次数 + Boss 击杀数走 attunement_growth.tres),同调实施批落地后切换读数源为谓词表实时求值。获取渠道约束形态(迭代 10 过渡承载):三选一道具件超位触发**替换交互**(现有件与新件 N+1 选 N——丢任一原有件腾位收新,或放弃新件不获取;终态恒 ≤ 同调位);奖励节点与战斗内渠道超位**不授予**(候选拒绝 + 掉落沉没,逐行归因留痕)——停点渠道全覆盖的替换交互随同调实施批统一收口(06 在册)。 +**秘宝件受同调位约束**:道具持有上限 = 同调位数。本批挂过渡读数源 transitional_sync_slots(provisional 初始 1——首次冒险即可持 1 件道具,L1 通关大奖励即可体验道具件);正主 = 同调位里程碑谓词表(原提案八拍板(git 57da58c 已退役):0 起步、硬上限 3、增长 = 通关次数 + Boss 击杀数走 attunement_growth.tres),同调实施批落地后切换读数源为谓词表实时求值。获取渠道约束形态(迭代 10 过渡承载):三选一道具件超位触发**替换交互**(现有件与新件 N+1 选 N——丢任一原有件腾位收新,或放弃新件不获取;终态恒 ≤ 同调位);奖励节点与战斗内渠道超位**不授予**(候选拒绝 + 掉落沉没,逐行归因留痕)——停点渠道全覆盖的替换交互随同调实施批统一收口(06 在册)。 最后一关通关不发三选一与部分回血:没有下一战可受益——只做冒险完成结算,末关 Boss 钥石照常入账。设计意图:清库之后才兑付、末关不兑付,都是从「奖励只朝下一战生效」这一条推出来的。 diff --git a/design/gdd/systems/冒险循环/奇物.md b/design/gdd/systems/冒险循环/奇物.md new file mode 100644 index 00000000..85717557 --- /dev/null +++ b/design/gdd/systems/冒险循环/奇物.md @@ -0,0 +1,353 @@ +# 奇物(Wondrous Item) + +> 一次冒险之内,通过各渠道给予玩家的**增益总称**——奖励节点给的、商店里买的、打赢关底 Boss 给的,都是奇物。它装的是"这一局你捞到了什么",不管从哪个渠道来。 +> +> 它是一个概念,不是一套东西。下面有**两根互不相干的轴**: +> +> - **分类轴**回答"给的是什么"——三个枚举:专长 / 属性值提升 / 资源; +> - **渠道轴**回答"从哪来"——奖励节点 / 商店 / 关底 Boss 击败(即通过这一关)。 +> +> 一个奇物属于哪个分类,不决定它从哪个渠道来;反过来也一样。两者的交叉由第 2 节那张开关表定死。 +> +> **兑付频率(先看这条,它是三条渠道的共同前提)**:奇物**不是打一场战斗给一份**。关内的普通战斗节点打完了什么也不给;一关之内奇物**只兑付一次**,触发点是**关底 Boss 被击败**——而按 [冒险结构](冒险结构.md) 的定义,打掉关底 Boss 恰好就等于"通过这一关",这两件事是同一个时刻,不是一条链上的两步。 +> +> 状态:**已实现**(2026-10-04 双层 BD 实施批落地)。本文件是奇物的唯一定义文档。 +> +> 数值纪律:本文件只写概念、取值域与指路;每件给多少、效果是什么一律不进正文,事实源是 `game/data/tables/relics.tres` 与 `game/data/tables/adventure.tres`。 + +## 设计目的 + +一次冒险要走三关,如果走完时角色和开局毫无区别,中途的每一次取舍就都不算数了。奇物就是那个把"这一局玩成了什么样"落下来的东西:让玩家在冒险过程中不断变强,且每一局变强的方向不同。 + +它同时要和跨冒险的成长隔开:永久保留的东西是[魔法道具](../排雷循环/魔法道具.md)(带在身上的物品)与[元进度](../跨局循环/元进度.md)(账号级的树),奇物只在当局存在,冒险收束即清零——它不是"你的存档变强了",而是"这一次下矿的你变强了"。 + +**边界判据(一句话)**:**一次冒险内获得、冒险收束即清零的,是奇物;跨冒险跟着你走的,是魔法道具。** + +这条判据走的是生命周期,不走"是不是物品"。原因:奇物这个筐里既装"角色自身的变化",也装金币这类一次性兑付物——用"拿在手里 vs 带在身上"去切,切不开它们,但用"当局清零 vs 跨局保留"能一刀切开,且对筐里所有东西都成立。 + +## 系统范围 + +| 负责 | 不负责 | +|---|---| +| 奇物的定义、三个分类、以及分类与渠道的交叉开关 | 每件效果怎么接入结算——归挂点所属文档([战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md)) | +| 生命周期边界:何时出现、何时生效、何时清零 | 卡面排版与界面呈现细则——见 [HUD框架](../表现与支撑/HUD框架.md) | +| 获取渠道的口径与约束 | 魔法道具与元进度——归上表两份文档 | +| 与相邻概念的边界 | 格面资源、关卡节点、商店本身的规则——归各自所属文档 | + +## 在核心循环中的位置 + +``` +一次冒险 = 若干关卡串联,每关 = 一条节点链 + 一个关底 Boss + + 关内普通战斗节点 ──▶ 打完不给奇物,继续往下走 + │ + ├─ 奖励节点 ──▶ 一次三选一(属性值提升 / 资源,罕见门票) + ├─ 商店 ──▶ 花钱买(属性值提升 / 资源,罕见门票) + │ + 关底 Boss 击败 ═══╗ ← 打掉关底 Boss 就是「通过这一关」,同一件事 + ╰──────────╬──▶ 一次专长三选一(专长) + ╰──▶ 通关回血 ──▶ 进下一关,带着它继续 +``` + +**关键:一关只兑付一次,不是一场战斗给一份。** 触发点是**关底 Boss 被击败**,而这恰好就等于"通过这一关"([冒险结构](冒险结构.md) 定义:通关一关 = 该关关底 Boss 被击杀)——**这两件事是同一个时刻,不是一条链上的两步**。关内普通战斗节点打完了什么也不给,直接往下走。 + +奇物处在「一次冒险」这一层:它不是一场战斗里的临时状态,也不跨冒险留存。上游是三条渠道,下游是之后所有关卡的排雷与结算——拿到了,下一关就开始生效。 + +## 核心规则 + +### 1. 分类轴:三个枚举 + +奇物只有一个名词,但它下面分三类。**这三类各有自己的专名,不是描述**——文档正文、代码词族、帮助与百科页面都用这三个词指代它们。 + +| 分类 | 它给的是什么 | 落点 | 事实源 | +|---|---|---|---| +| **专长**(Feat) | 给规则。在结算管线某个挂点上给自己加一条规则;同一标签的持有件数达阈值时质变 | 各结算段挂点;标签与档位由求值服务统一算 | `relics.tres`(逐项定义) | +| **属性值提升**(ASI) | 给数字。抬高角色某项战斗属性的基础值 | 冒险加算区的生命上限 / AC / 攻击三轴 | `adventure.tres`(种类配额与值) | +| **资源** | 给"可用的量"。不抬高战斗属性,也不改规则,而是扩充你能调动的余量与机会 | 行动经济、三选一界面、局内钱包;**不进加算区、多数不进持有集** | `adventure.tres`(种类配额与值) | + +三类的共性:都在当局获得、都在当局消费完或随冒险收束清零;都不写账号进度——出现与否由抽取决定,玩家的账号强弱不影响它出现在哪一局。 + +#### 1.1 专长:规则改写 + +专长改的是规则而不是数字——它给自己加一条"在某种条件下,本来不会发生的事现在会发生"的规则。它不是任何一条属性轴的延伸,玩家也无法用"加了多少"来衡量它。 + +专长带流派标签,同一标签的持有件数达到阈值时发生质变(档位机制归 [战斗结算](../战斗循环/战斗结算.md),本文件不展开)。这是它和另两类最直观的体感差别:属性提升是"我更耐打了",专长是"我现在会一件以前不会的事"。 + +**专长门票也归专长**:非 Boss 渠道不直接给专长,而是给一张名为「专长获取」的门票——拿到后立刻开一次专长 N 选一。它给的是"一件你以前不会的事"(只是把选择推迟到一次三选一),按 1.4 的判据归专长,不归资源。详见 2.2。 + +#### 1.2 属性值提升:纯属性三项 + +三项,各改一条战斗属性轴: + +| 项 | 改什么 | +|---|---| +| 生命上限 | 抬高角色的生命上限 | +| AC(护甲) | 抬高角色的护甲 | +| 攻击 | 抬高角色的攻击 | + +三项都直接进冒险加算区,跨关携带且关间不清零。这一类是封闭的:只有这三项,多一项就要走文档修订。 + +#### 1.3 资源:四项 + +资源这一类装的是"不抬高战斗属性、也不改规则,但让你更有余地"的东西: + +| 项 | 给什么 | 备注 | +|---|---|---| +| 行动点上限 | 每场战斗首轮可用的行动点更多 | 罕见档 | +| 刷新次数 | 三选一界面可重抽的次数更多 | **作用对象是选择界面,不是角色**——见第 3 节的例外登记;奖励节点与商店两个渠道都可出现 | +| 金币(GP) | 局内钱包进账 | 进钱包即花掉,不进持有集、不持续生效;**不进商店**(计价物不自售,见 2.4) | +| 回复 | 当即回血 | 即时兑付,不进持有集、不持续生效;**在商店内**(见 2.4 的默认原则) | + +**资源为什么单独成一类**:它的成员不满足"抬高战斗属性"(那归属性值提升),也不满足"改写规则"(那归专长),但玩家拿到时的感受是一致的——"我能做的事变多了"。把它们跟属性提升混在一起,会让"加了多少攻击"这种可度量的提升和"多一次重抽"这种不可度量的余地摆在同一张候选卡上,玩家没法比。 + +**判据句("资源"这个词太泛,这句是唯一的收口凭据)**:资源给的是**可以调动、可以花掉的余量**,不是角色基础属性的永久抬升。"资源"是常用词,能力资源、财富资源都叫资源——所以判据必须写死:拿不准一项该归哪类时,问它**会不会进角色自己的属性数值**。会进的归属性值提升,不会进、而是变成你手里多出来的次数或多出来的钱的,归资源。 + +**资源类内部的异质性(要诚实登记)**:金币与回复是**即时兑付**——拿到就消失,不进持有集,也没有"持有→生效→清零"的过程;行动点上限与刷新次数则进持有账本、当局持续有效。它们被归在同一类是因为"给的是余量"这个共同性质,不是因为生命周期相同。这条异质性在此显式登记,防止后续把金币当成会持续生效的东西去结算。 + +#### 1.4 分类判据 + +**给规则的是专长,给数字的是属性值提升,给余量的是资源。** + +拿不准的项按这条判:去掉它之后,角色是"某件以前不会的事做不到了"(专长)、"某个数字少了一截"(属性值提升)、还是"能调动的余地变小了"(资源)。 + +#### 1.5 命名出处 + +专长与属性值提升都取自 DND 规则书的既有名词:专长对应 Feat,属性值提升对应 Ability Score Improvement(ASI)。**顶层「奇物」取自 DND 魔法物品的九分类之一 Wondrous Item——官方中文译名就是「奇物」,是那个专门装不好归类但有奇效的东西的兜底杂类。** 用它做顶层名的理由:地下城里挖到的、商店里能买到的、能把你变强的、又确实贵重的东西,在 DND 里没有别的总称,只有 Treasure 和 Wondrous Item 两个候选,而 Treasure 偏向财物,装不下专长这种你会了件以前不会的事。奇物天生是杂类兜底,正好对应本概念下三个互不相干的分类(专长改规则 / 属性值提升改数字 / 资源给余量)——它们本来就没有共同点,能拢在一起的只有一个不好归类但有用的名字。**资源取"资源"这个常用词**(用户 2026-10-05 定)——行动点上限、刷新次数、金币、回复都是可以调动、可以花掉的余量。它确实偏泛(能力资源、财富资源都叫资源),所以这一类的判据句必须写死:**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**——这一句是把"资源"从泛用词收回到本类定义里的唯一凭据,不能省。**三个分类的专名在 v2.7 去掉了「类」字后缀**——此前写作「机制类 / 属性提升类 / 资源类」,那是描述不是专名;去掉后缀后三个词各自都能独立成词、与 DND 官方中文一致,理由与逐条依据见 1.6 节。玩家可见文案只写效果,不出现任何分类名。 + +### 1.6 三层结构与命名(本概念的完整层级) + +奇物这个概念只有三层,任何一处提到它都属于其中一层: + +| 层 | 名称 | 例子 | 谁看得到 | +|---|---|---|---| +| 一层 总称 | **奇物**(Wondrous Item) | 「这一局你捞到的全部奇物」 | 全部玩家可见面 | +| 二层 分类 | **专长** / **属性值提升** / **资源** | 「这四件是属性值提升」 | 帮百科与成就页可见;卡面与详情页**不出现** | +| 三层 单件 | 具体那一件的名称 | 奥术余烬、贯穿射击、小幅提升生命上限 | 全部玩家可见面 | + +**两层是两件事,别混**: + +- **命名是本节的规矩**——三个分类各有一个专名,文档、代码词族、帮百科一律用它。指代某个分类时直接说「专长」,不说「机制类」「专长那一类」。 +- **呈现是另一件事**(归 [battle](../ux/battle.md) 与 [node-reward](../ux/node-reward.md),本节不裁决):玩家看到某件奇物时,卡面只写**这件东西的名字与效果**,不附带它的分类。玩家可以从效果反推它属于哪一类,但界面不替他说破。 + +**为什么两层都要有**:分类名在卡面上不出现,不等于玩家对它没有概念——帮助手册、百科条目、成就名称三处一定会用到它(「首次集齐 4 件专长」「三件属性值提升」),效果描述里出现指代时也需要名字(「本项属专长,同标签达到 4 件时质变」)。所以它必须是一个**玩家读得懂、读一遍就懂**的正式名词,不能是内部描述或自造词。 + +**代码侧词族对应**(本批只做命名对齐,代码改动见任务书):顶层 `curio_*`(奇物总称)/ 专长 `feat_*` / 属性值提升 `asi_*` / 资源 `res_*`。`reward_*` 已被既有标识符占用(`reward_pick` / `reward_node` / `reward_preview`),**不得使用**。 + +### 2. 渠道轴:与分类的交叉 + +三个渠道各只取走分类的一部分。这张表是奇物概念的第二个维度——它和分类轴互不决定,改其中一根不必动另一根。 + +| 分类 \ 渠道 | 奖励节点 | 商店 | 关底 Boss 击败=通过这一关(见 2.1) | +|---|---|---|---| +| **专长**(专长) | 门票形式(见 2.2) | 门票形式(见 2.2) | **直接给**(唯一的直接渠道) | +| **属性值提升** | 出 | 出(口径「训练」) | 不出现 | +| **资源** | 出 | 出(**金币除外**,见 2.4) | 不出现 | + +**这张表的形状**:Boss 渠道是**专长的独占渠道**,也是唯一**直接**给专长的渠道;奖励节点与商店不直接给专长,但会出现通往专长的**门票**。另两类不走 Boss 渠道,只在奖励节点与商店两个并行出口出现。三条渠道的分工因此是"一块独占 + 两块并行",不是三块平分。这条形状本身要记住:它意味着专长的获取节奏与其他奇物的获取节奏**由完全不同的机制决定**——前者靠打赢,后者靠抽取与购买。 + +**渠道定位 vs 默认原则(两句,别混)**: + +- **渠道出哪些分类,是渠道轴自己的定位决定,不是例外**——Boss 渠道只出专长,所以另两类在此"不出现",这是"Boss 是专长独占渠道"的同义表述,不需要另外找理由。 +- **默认原则只管分类内部**(用户 2026-10-05 定):一个渠道一旦确定要出某个分类,**该分类的成员就都要在这个渠道的池子里**。它的默认值是"出",任何成员缺席都必须有已登记的规则,没有理由的缺席是缺陷不是设计。 + +两条的管辖范围不同:前者决定"这张表的格子填不填",后者决定"填了的格子里装不装得全"。 + +#### 2.1 专长的主渠道:关底 Boss 击败(即通过这一关) + +专长的专属渠道,时机确定——打赢就有,不需要看脸。构筑的节奏由此可预期:玩家能规划"第几关拿到第一个专长"。品类原型是杀戮尖塔(每层 Boss 后必给遗物)与哈迪斯(Boss 后必给恩赐)——打赢了一定拿到东西,是这类游戏的通例。 + +**这个渠道的触发点就是「关底 Boss 被击败」**——而按 [冒险结构](冒险结构.md) 的定义,打掉关底 Boss 恰好就等于"通过这一关"。所以这条渠道的全名是**关底 Boss 击败(即通过这一关)**:它不是"战斗结算之后再来一次奖励"的独立步骤,而**就是关卡推进本身那一刻**。关内的普通战斗节点打完了什么也不给;一关之内奇物只兑付这一次。 + +**终局那关的 Boss 击败后不给**:兑付只发生在**还有下一关可去**的那些关底 Boss 身上——打赢最终 Boss 时冒险已经结束,没有后续关卡可消费,给了也无处生效。三关结构下,一局的确定性专长兑付次数由此确定(每个终局前 Boss 一次)。 + +**不新增节点类型**:专长挂在 Boss 节点的兑付面上(击败后追加一次专长三选一),[关卡节点地图](关卡节点地图.md) 的节点类型仍是封闭枚举五种(战斗 / Boss / 奖励 / 恢复 / 商店),词表零扩类。此前"要不要为专长新设一类节点"的悬案由此收口。 + +#### 2.2 专长门票:非 Boss 渠道怎么给专长 + +奖励节点与商店**不直接给专长**——它们给的是一张**门票**:一个名为「专长获取」的奇物项,选中或买下之后,**立刻**开一次专长 N 选一(N 与 Boss 渠道的候选数同源)。 + +**它归专长,不归资源**:它给的不是"余量",而是"一件你以前不会的事"——只是把选择推迟到一次三选一。按 1.4 的分类判据(去掉它之后角色少了什么),它属于专长。所以在交叉表上,专长在非 Boss 渠道的表现是**只以门票形式出现**,不是"不出现"。 + +**为什么非 Boss 渠道只给门票**:如果商店也能直接买到一个指定的专长,玩家就能用金币把构筑买出来,Boss 渠道的"打赢才拿到"就失去意义了。门票保留了惊喜(开出来的还是三选一,不是指定),但不让玩家用钱直接定点购买。 + +##### 门票的三个性质 + +- **拿到即开,不可囤积**(用户 2026-10-05 定):门票不进持有集,选中或买下的同一时刻就开专长三选一。玩家不能攒几张一次连开——可囤积会让玩家把关键决策无限推迟到最优时机,破坏 Boss 渠道的节奏感;而且"攥着一张票"就是把持有物语义从后门放回来了。它叫"道具"只是卡面表现,不是持有物。 +- **不推翻确定性**:专长的主渠道仍然是 Boss 击败后,玩家不会因为没抽到门票就构筑不起来。 +- **罕见只在概率,不在价格**:门票的"罕见"**只体现在它出现的概率上**——它在货架上的价格与其他商品相当,不靠高价劝退。一局内**限购一次**(现行口径)。 + +##### 保底:第 6 次必出 + +光靠概率,运气差的玩家可能整局都见不到门票——那就等于这个机制对他不存在。所以门票带一条**计步保底**: + +> 连续 5 次三选一展示中没有出现门票,**第 6 次展示必定出现**。 + +| 项 | 口径 | +|---|---| +| 计数对象 | 三选一的**展示次数**,不是"节点次数"——**刷新后的重新展示计入次数**(用户 2026-10-05 明定含刷新) | +| 计数范围 | 奖励节点与商店**共享同一计数**,不各算各的 | +| 触发后 | 计数清零,重新累计 | +| 与限购的关系 | 一局限购一次;**已经买过(限购用满)之后,保底不再触发**——门票已经用掉了,没有再给的理由 | + +**为什么是"展示次数"而不是"节点次数"**:保底要保的是"玩家看到的脸",刷新本来就是让玩家多一次看脸的机会,若刷新不计入,保底与刷新两套机制会打架——玩家可以用刷新绕开保底的计数语义。 + +玩家视角它长这样:在普通的三选一奇物或商店货架里,偶尔会冒出一张不一样的卡——拿到它,立刻再开一次专长选择。它是奇物面里的惊喜,不是奇物面的常态;而连续几次没见到之后,它一定会来一次。 + +#### 2.3 商店口径:训练 + +商店这一侧走的叙事是「**训练**」——花代价向某位师父学习、借某种卷轴修炼、或把战斗攒下的钱换成一身本领。它不是买一个东西回来,而是把钱换成自己的本领,所以落到命名空间上和奖励节点那一侧完全相同:都是往同一个持有集里加一项奇物。 + +#### 2.4 渠道约束分三层:白名单 / 可计算谓词 / 显式例外 + +一个"某分类在某渠道出不出现"的判断,实际由三层叠起来决定: + +| 层 | 是什么 | 判据来源 | 新增渠道或奇物时 | +|---|---|---|---| +| **一层 分类白名单** | 分类轴决定渠道——专长走 Boss、另两类走奖励节点与商店 | 分类本身 | 新分类按 1.4 判据归类,自动继承该类的渠道 | +| **二层 可计算谓词** | 渠道与奇物之间的**结构性**关系,能算出来 | 对象与渠道的内在关系 | **自动适用,不用改表** | +| **三层 显式例外清单** | 人为的设计选择,没有内在理由可推 | 设计决定 | **只能逐条加,每条必须写理由** | + +**先诚实回答"计价物不自售不就是特判吗"**:**形式上是的**——它确实是在分类白名单之外又加了一道过滤,不是从分类推出来的。但它和三层那种"死特判"有实质区别: + +| | 写法 | 新增渠道/奇物时 | 维护方式 | +|---|---|---|---| +| 死特判 | "GP 不进商店"(一条记录) | 每多一个例外加一条记录 | 靠人记住,容易漏 | +| **可计算谓词** | "X 是渠道 C 的计价物 → X 不进 C"(一个函数) | **自动判定,不用改表** | 判据在对象属性上,不会漏 | + +所以准确的说法是:**它没有消除"在白名单外加过滤"这件事,但把过滤从"枚举例外"变成了"计算谓词"**。以后新增渠道或奇物,只要"不出现"的原因是**结构性**的——来自奇物与渠道的内在关系(计价物、即时兑付、需要先决条件等)——就能写成谓词自动算;如果原因是**设计性**的("我就是想让它在这一关不出"),那就只能进三层清单。 + +**所以要害不是"有没有例外",而是"例外能不能被算出来"**。三层清单不是不能用,但每一条都必须写出理由;一条写不出理由的例外,就是坏味道,应该回头质疑分类是不是分错了。 + +**为什么不干脆拆成第四个分类(零例外的那条路)**:分类轴回答的是"给的是什么",金币给的是余量,和行动点上限、刷新次数同类。按"能不能进商店"去反推分类,等于**用渠道轴的性质去切分类轴**,两根轴又缠回一起了——这是本文件 v2.0 专门拆开的东西,不能为了消灭一条例外再缠回去。而且为一个只有一项的分类立枚举,读者会以为它和另三类是同一重量级的划分,实际它只是某一项恰好踩到了一条经济规则。 + +三个方案的真实代价,摆出来不藏: + +| 方案 | 例外数 | 代价 | +|---|---|---| +| 甲:GP 单独立第四个分类 | 0 | 用渠道轴切分类轴,两轴缠回;一项一类,分类失衡 | +| **乙:可计算谓词(现行)** | **1 条谓词** | **分类干净,但"白名单外加过滤"这件事没消失,只是自动化了** | +| 丙:死特判清单 | 1 条记录 | 每加一个例外加一条,靠记忆维护 | + +**回复在商店内**(用户 2026-10-05 定):回复不是计价物,套不上「计价物不自售」,按默认原则(除登记的特殊规则外,分类内的都要在池子里)**它应当在商店中出现**。现行 `shop.tres` 的货架只有攻击 / 生命上限 / 护甲 / 行动点四项,回复不在其中——这是**现状与表格不对齐**,须在实施批补上,登记在 [06-待办清单](../../06-待办清单.md)。 + +**当前在册的约束清单**(就这么两条,都要有理由): + +| 约束 | 层 | 理由 | +|---|---|---| +| 金币不进商店 | 二层·谓词 | 计价物不自售——商店的计价物是 GP | +| 专长在非 Boss 渠道只给门票 | 一层·分类自身的形态 | 见 2.2——防止用钱定点买构筑 | +| 属性值提升与资源不出现在 Boss 渠道 | **不是约束** | 见 2.1——这是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖 | + +#### 2.5 在册事项 + +现行实现里**三条渠道完全共用同一个候选池**,三个分类出现条件一样、只有出现概率不同——上表的渠道分工是**目标状态,尚未实施**。相关的实施批次登记在 [06-待办清单](../../06-待办清单.md) 的 BD 分层条目下,本文件不复制。 + +### 3. 作用对象与范围 + +- **作用对象**:角色本人,以及角色参与的结算过程。奇物不改敌人、不改棋盘生成、不改关卡内容。 +- **刷新次数的例外**:它作用在三选一界面上,改的是"这一局里你能重选几次",而不是角色身上的任何数字。它是资源里唯一一条作用对象不是角色的项——留在这里是因为它满足另外三条:当局获得、当局有效、进同一份持有账本。这条例外在此显式登记,避免后续把它当成角色属性去结算。 +- **时间范围**:整局冒险。专长与属性值提升自获得起对本局剩余所有关卡生效,跨关携带且关间不清零;资源里的金币与回复是即时兑付,拿到即消费完。 +- **归属范围**:不进账号永久进度,不带到下一次冒险。 + +### 4. 生命周期 + +``` +未获得 → 进入候选池 → 作为候选出现 → 选定 → 持有/兑付 → 生效 →(冒险收束)清零 + ↑ ↓ + 断点恢复 持有集持续累积 +``` + +| 阶段 | 说明 | +|---|---| +| 候选池构建 | 冒险开局时一次建成。三个分类的候选**现同处一个令牌池**:属性值提升与资源按配额铺开,专长按定义表的有效行铺开。 | +| 出现 | 玩家在渠道上看到若干候选(三选一的形式),看不到整个池。 | +| 选定 | 玩家选定一项后,它从池中剔除,此后任何渠道都不会再见。选到「专长获取」时,立刻再开一次专长 N 选一——这次选择走专长的渠道语义,不占用原本的渠道。 | +| 持有与兑付 | 专长与属性值提升进入持有集后立即生效,跨关携带;专长按同一标签的持有项数决定处于哪一档。金币与回复即时兑付,不入持有集。 | +| 清零 | 冒险以任一结局收束时整集清空;下次开局重建。 | +| 断点恢复 | 进行中的冒险把持有集与剩余候选池一并写入断点,续玩后恢复到同一状态(断点里的键名沿用历史形态,不随本次改名变动)。 | + +### 5. 关联与边界 + +| 相邻概念 | 关系(只写关系,不写对方的规则) | +|---|---| +| [魔法道具](../排雷循环/魔法道具.md) | 最需要分清的一对,判据是生命周期:**奇物当局清零,魔法道具跨冒险保留**。两者互不相通——奇物永不进同调位,魔法道具永不进当局随机渠道。 | +| [元进度](../跨局循环/元进度.md)(树) | 树管账号永久的规则与容量,奇物管当局构筑,两层互不代替。 | +| [战斗结算](../战斗循环/战斗结算.md) | 专长的挂点位于结算管线的各段;挂点清单与语义归结算文档。 | +| [行动经济](../排雷循环/行动经济.md)、[地形变异](../排雷循环/地形变异.md) | 部分挂点落在行动点结转与地形处理上,语义归各自文档。 | +| [关卡节点地图](关卡节点地图.md) | 是渠道的载体,不是奇物的属性。专长挂在 Boss 节点兑付面上,节点类型词表零扩类。 | +| [地图战斗资源](../战斗循环/地图战斗资源.md)(格面资源) | 无关:格面资源是单格的一次性产出,不进持有集,也不是渠道给的。 | +| [存档序列化](../表现与支撑/存档序列化.md) | 断点负载记录持有集与剩余候选池;键名与版本迁移策略归存档文档。 | + +## 依赖与输出 + +| 类型 | 内容 | +|---|---| +| 依赖(概念) | 角色、结算管线、行动点、地形、关卡节点地图、局内金币钱包、三选一界面 | +| 依赖(数据) | `relics.tres`(专长定义行)、`adventure.tres`(属性值提升与资源的种类配额与值)、`shop.tres`(货架取舍) | +| 输出(对外) | 持有集、生效中的分类投影、剩余候选池、档位求值结果、可用重抽次数 | +| 明确边界 | 不写账号进度、不改敌人与关卡内容、不承载具体数值 | + +## P0 最小闭环 / P1・P2 后置 + +- **P0(已实现)**:三个分类可定义 → 进入候选池 → 在渠道上被选中 → 当局生效 → 收束清零。 +- **P1 后置**:三条渠道按第 2 节分工;刷新次数与专长获取两项入池;两项合成高阶项;同一标签收集到四项以上的后期表达。 +- **P2 后置**:商店里的攻击类型转换服务;喂雷流派是否保留(尚未拍板,登记在 [06-待办清单](../../06-待办清单.md))。 + +## 调参表 + +数值所有权归 [难度曲线与Boss](难度曲线与Boss.md);本文件只列参数与取值域,**不列现行值**。 + +| 参数 | 取值域 | 事实源 | +|---|---|---| +| 专长定义行(标识 / 显示名 / 稀有度 / 标签 / 挂点 / 效果字典) | 各字段封闭枚举,行键白名单封闭 | `game/data/tables/relics.tres` | +| 专长门票(出现概率 / 配额 / 全局限量) | 整数 | **尚未入表**,见待办 | +| 属性值提升种类 | 封闭三项:生命上限 / AC / 攻击,扩项走文档修订 | `game/data/schemas/adventure_table.gd` | +| 资源种类 | 行动点上限 / 金币 / 回复(**刷新次数与专长获取两项尚未入表**,见待办) | 同上 | +| 稀有度档位 | 封闭三档(普通 / 稀有 / 罕见);三档配额是结构锚,改总量须重新拍板而非调参 | 同上 | +| 各分类种类 × 档位的配额与值 | 整数 | `game/data/tables/adventure.tres` | +| 专长获取的全局限量 | 整数(一局内可获得的次数上限) | 同上 | +| 一次三选一的候选展示数 | [1,6] | 同上 | + +## 验收标准 + +1. 三个分类走同一套获取流程,代码里只有一个表示"已持有奇物"的集合。 +2. 一次冒险内获得的奇物在之后任何关卡都生效;开新冒险后持有集为空。 +3. 一项被选定的奇物不再出现在任何后续渠道。 +4. 每个流派标签至少有一项挂在排雷侧的结算触发点上(防止专长沦为纯战斗数值)。 +5. 玩家可见的文案不出现分类名与内部分组标签——只写效果,归类让玩家自己推断。 +6. 文档与代码里提到它时只有"奇物"这一个名字;需要区分时用"专长/属性值提升/资源"描述,不得另造称呼。 +7. 刷新次数不进角色加算区——它只改三选一界面的可用重抽次数。 +8. 金币与回复不进持有集——它们是即时兑付,拿到即消费完。 +9. 金币不出现在商店货架上——这是「计价物不自售」谓词算出来的结果,不是给金币单独立的一个分类;它确实是在分类白名单之外加的一道过滤,只是这道过滤可自动计算而非靠枚举。 +10. 一个渠道一旦确定要出某个分类,该分类的成员就都在它的池子里——"渠道出哪些分类"不受这条约束,那是渠道轴的定位。 +11. 门票拿到即开,不进持有集,玩家无法囤积——选中或买下的同一时刻就开专长三选一。 +12. 门票带有计步保底:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享,刷新后的重新展示计入次数,限购用满后保底不再触发。 + +## 待办 + +全部待办单点登记于 [06-待办清单](../../06-待办清单.md)(BD 分层条目、命名统一后续条目),本节不复制。 + +本节只点出四条由本版新立、尚未登记的判断来源: + +- **回复归属已定(v2.5)**:留在资源,不独立成第四类。理由是它与金币同为**即时兑付**、都给的是可花掉的余量,拆出去之后第四类只有两项、且与资源的判据完全同源——分类的价值在于判据能一刀切得开,拆一个判据同源的类只会让读者多查一张表。 +- **专长门票尚未入表**:出现概率、配额、限购次数、保底计数阈值四个参数都没有事实源;入池时同样受档位结构锚约束(改总量须重裁而非调参)。 +- **专长总量与档位阈值的匹配——延后复裁(用户 2026-10-05 定"先不调整")**:终局 Boss 不给已定,一局确定性专长次数=终局前 Boss 的个数。三关结构下是两次,加上门票最多三次,而档位阈值是同标签 ≥2 档一 / ≥4 档二——**档二(完全体)在三关结构下几乎不可达**。用户决定不动,理由是后续会有第四关,且届时可能另做获取侧的调整。**复裁触发条件:第四关内容批落地后实测,若配合仍太少再调**。登记于此防止它被忘掉。 +- **charge 标签件数不足(数据缺陷,独立登记)**:档二要求同标签 ≥4 件,而 `relics.tres` 里 charge 标签**只有 3 件**——即使获取次数无限,charge 流派也永远达不到档二。这与渠道结构无关,是数据层缺陷,随上一条一并延后,但不要被上一条盖掉。 + +## 版本历史 + +| 版本 | 日期 | 变更 | +|---|---|---| +| v1.0 | 2026-10-05 | 以「特性」为名首次为本概念立定义文档。此前它按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),现收敛为一个对象下的分类;性质定为「角色自身得到提升」而非「获得物品」。 | +| v1.1 | 2026-10-05 | 分类重构:两类由「规则改写型 / 属性加成型」改为「属性提升 / 专长」。 | +| v1.2 | 2026-10-05 | 专长渠道落定:关底 Boss 击败后兑付,不新增节点类型;罕见旁路明确为"普通奖励里的专长 N 选一"。 | +| **v2.0** | 2026-10-05 | **顶层改名为「奖励」并重构为两根轴**。改名动因:筐里既装"角色自身的变化"也装金币这类一次性兑付物,用"自身提升 vs 持有物"已切不开,边界判据改由生命周期承担——**当局清零的是奖励,跨局带走的是魔法道具**。分类由两类改为**三个枚举**(当时的写法是「机制类 / 属性提升类 / 资源与机会类」,v2.7 才定名为专长 / 属性值提升 / 资源):专长 / 属性值提升(生命·AC·攻击)/ 资源(行动点上限·刷新次数·金币·回复)。新增第 2 节分类 × 渠道交叉开关表,明确两根轴互不决定;金币与回复不再被当作"该移出去的脏东西",而是安置在资源里,同时把它们的即时兑付性质显式登记为类内异质性。 | +| v2.1 | 2026-10-05 | **交叉表收口(用户拍板)**:Boss 渠道**只出专长**,属性值提升与资源在此均不出现——三条渠道的形状定为"一块独占 + 两块并行",专长靠打赢、其余靠抽取与购买。Boss 兑付明确为**终局前**的 Boss,终局 Boss 不给(无后续关卡可消费)。新增 2.4 节**「计价物不自售」规则**:金币不进商店既不拆分类也不开特例,而是写成两轴交叉处的一条约束——商店的计价物是金币,故金币不进商店;按"能不能进商店"反推分类等于用渠道轴去切分类轴,两根轴会缠回去。 | +| v2.2 | 2026-10-05 | **门票形态 + 约束分层 + 默认原则**。① 用户明确:奖励节点与商店不直接给专长,而是给一个**「专长获取」道具**,拿到后开专长三选一——交叉表专长在两渠道由"不出现"改为"**门票形式**";门票归专长(给的是一件以前不会的事,只是把选择推迟),理由是防止用钱定点买构筑。② 用户质疑「计价物不自售」本质是特判——**承认成立**:它确实是在分类白名单之外加的一道过滤,与死特判的区别在于把"枚举例外"变成"**可计算谓词**"(新渠道/新奖励自动判定)。2.4 改写为**三层约束**(分类白名单 / 可计算谓词 / 显式例外清单),并给出判断标准:结构性原因可写成谓词,设计性原因只能进清单且每条须写理由;三个方案(单独分类 / 谓词 / 死特判)的代价并列摆出,不藏折中。③ 用户定**默认原则**:除已登记的特殊规则外,分类内的东西都要在池子里——据此**回复应在商店内**,现行 shop.tres 货架缺它是"现状与表格不对齐",须在实施批补上。 | +| v2.3 | 2026-10-05 | **门票机制细化 + 默认原则表述修正**。① 门票**拿到即开、不可囤积**(用户定)——不进持有集,防止玩家把关键决策无限推迟,也防持有物语义从后门回来。② 门票的"罕见"**只在概率不在价格**,一局限购一次,并加**计步保底**:连续 5 次三选一展示未出现则第 6 次必出;计数跨奖励节点与商店共享、**刷新后的重新展示计入**(用户明定含刷新),限购用满后保底不再触发。③ **修正 v2.2 的误读**:把"分类在某渠道不出现"当成需要理由的缺格是错的——渠道出哪些分类是渠道轴的定位(Boss 只出专长),不是例外;默认原则只管**分类内部**的成员齐不齐。④ 专长总量与档位阈值的匹配按用户决定**延后**(待第四关内容批后实测复裁),另单独登记 charge 标签仅 3 件、永远达不到档二的数据缺陷。 | +| **v2.7** | 2026-10-05 | **三个子节点正式定名(用户拍板:去「类」字后缀)**。此前三个分类只有带后缀的描述(机制类 / 属性提升类 / 资源类),是文档层临时叫法,既非专名也非玩家可读的词。现定专名:**专长**(Feat)/ **属性值提升**(ASI)/ **资源**。定名依据:前两个是 DND 规则书官方中文,且与用户 v1.1 原话一致(当时原话就是「属性提升(ASI)」与「专长」,v1.1 落文时被加了「类」字后缀而退化成描述)。「机制类」这个叫法本身还有硬伤——它的 28 个成员里没有一件是"机制",实际是"在结算挂点上改一条规则",读者看到会误解为游戏机制。 +**新增 1.6 节「三层结构与命名」**(用户 2026-10-05 拍板做玩家可见的三层):奇物(总称)/三个分类/具体单件。明确**命名是本节规矩、呈现是另一件事**——分类名在卡面不出现(归 battle.md / node-reward.md 裁决),但帮百科、成就名、效果描述的指代三处都要用,所以它必须是玩家读一遍就懂的正式名词。连带:修掉批量替换撞出的五处「专长(专长)」类自撞、v2.0 历史行内的自撞并标注当时的旧称、registry 的「资源(命名待定)」过期标注。 +| **v2.6** | 2026-10-05 | **修正核心循环位置图:奇物不是打一场战斗给一份**(用户纠错)。原图把"关内 排雷推理 → 战斗结算 → 通关 → 得到一份奇物"画成一条链,读起来就是每场战斗通关都给一份——**错在把关内普通战斗的通关与关底 Boss 的通关混为一谈**。按 [冒险结构](冒险结构.md) 的定义,**通关一关 = 该关关底 Boss 被击杀**,所以"击败 Boss"与"通过这一关"是同一个时刻、不是一条链上的两步。改法:① 图改为分支结构(普通战斗节点→不给、往下走;关底 Boss 击败→专长三选一+通关回血);② **一关只兑付一次**写成显式口径;③ 2.1 节渠道名由"终局前 Boss 击败后"改为"关底 Boss 击败(即通过这一关)",并写明触发点就是关卡推进本身那一刻;④ 文首引言加"兑付频率"条,交叉表渠道名与 registry 同步;⑤ 连带修掉一处污染——节点类型封闭枚举五种里的"奖励"曾被 v2.4 批量替换误伤成"奇物"(节点类型里没有奇物这一类),已复原。 | + +| **v2.5** | 2026-10-05 | **第三类定名「资源」**(用户拍板,父节点定为「奇物」后解锁)。定名依据:行动点上限 / 刷新次数 / 金币 / 回复都是可以调动、可以花掉的余量。「资源」偏泛(能力资源、财富资源都叫资源),因此在 1.5 写死判据句——**给的是可消耗或可重掷的余量,不是角色基础属性的永久抬升**,这一句是把泛用词收回本类定义的唯一凭据。**回复归属同时定案:留在资源,不独立成第四类**——它与金币同为即时兑付、判据同源,拆出去第四类只剩两项且与本类判据重合。附带修复:1.5 段末与「### 2. 渠道轴」标题粘连(缺换行)。 | +| **v2.4** | 2026-10-05 | **顶层由「奖励」改名为「奇物」(Wondrous Item)**。用户否决了「奖励」「收益」与全部自造词(进益/造化/机缘/遇获),要求回到 DND/西幻既有名词。定名依据:DMG 魔法物品九分类中的 Wondrous Item,官方中文译名即「奇物」,是专装不好归类但有奇效之物的兜底杂类——正好对应本概念下三个互不相干的分类。此前考虑过的 Treasure(宝物)因偏财物、装不下专长而落选;roguelike 品类惯例 Relic 因用户否决遗物落选。**代码词族定为 `curio_*`、`ADVENTURE_CURIO`**(`reward_*` 已被 `reward_pick` / `reward_node` / `reward_preview` 占用,不能对齐)。 | diff --git a/design/gdd/systems/排雷循环/地形变异.md b/design/gdd/systems/排雷循环/地形变异.md index d1c4e85d..9e2cec3b 100644 --- a/design/gdd/systems/排雷循环/地形变异.md +++ b/design/gdd/systems/排雷循环/地形变异.md @@ -131,7 +131,7 @@ region 型变异是「格子级」的:布置段往候选格域写格子快照 | 优先级 | 内容 | 后置原因 | |---|---|---| | 迭代 12(调研前置) | 反制路径重定(原:首批四类型的反制道具兑现,counter_items 回填——已作废) | 2026-10-03 用户终裁:同调位反制件=层级错配失败设计,义务作废;变异应对是否以局内形态补入,待双层 BD 调研仲裁后重新立项 | -| ~~Alpha~~ **已落地** | 全局作用域变异(精英/Boss 图整图生效的变异形态) | **2026-10-04 全局作用域变异首发批落地**(迭代 14 ③号卡)——首批型=贫矿脉(案A 资源面·微贫向偏斜,替换制/恒定制/L1 Boss 免疫/三层预告);裁决全录见任务书(design/research/任务书-全局作用域变异首发批-2026-10-04.md);带 A 杠杆注册全局难度批(M-4)随批读数只测不判;精英图留词表前向位(首发零表行) | +| ~~Alpha~~ **已落地** | 全局作用域变异(精英/Boss 图整图生效的变异形态) | **2026-10-04 全局作用域变异首发批落地**(迭代 14 ③号卡)——首批型=贫矿脉(案A 资源面·微贫向偏斜,替换制/恒定制/L1 Boss 免疫/三层预告);裁决全录见调研报告 §7(design/research/调研-全局作用域变异设计空间-2026-10-04.md;原任务书已退役,git b3bbea5/01bfc15);带 A 杠杆注册全局难度批(M-4)随批读数只测不判;精英图留词表前向位(首发零表行) | | P2 | "地形成本修饰"价目钩子启用 | 由行动经济持有;启用须随变异类型扩展,与行动经济重议按格定价的接口 | | P2 | 变异解锁节奏复核 | "每关至少引入一个新元素"的推进节奏,随[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)定稿复核 | | P2 | 变异格视觉标识与预告呈现 | 首批为遭遇式(未开无预告);标识位随表现层升级批 | diff --git a/design/gdd/systems/排雷循环/秘宝.md b/design/gdd/systems/排雷循环/秘宝.md index fad0be4f..b7fee86f 100644 --- a/design/gdd/systems/排雷循环/秘宝.md +++ b/design/gdd/systems/排雷循环/秘宝.md @@ -10,7 +10,7 @@ 秘宝存在**两态**,关系=形态替换而非机制积累。**替换已于 2026-10-03 完成**(M-4 迭代 11 第①批,worktree m4-iter11a-attune-20261003): - ~~**过渡形态**(2026-09-29 迭代 7 落籍)~~ **已退役**:掉落投放(2026-10-01 已随「挖格不掉道具」退役)/奖励节点三选一道具卡(2026-10-03 T7 出池)/关卡域库存/挖掘期两步使用——本文以下正文章节「掉落池获取」「关卡域库存」「什么时候怎么用」诸节随之整体退役,保留为历史口径(本节横幅为准)。 -- **终局形态(现行)= 局外同调件**:开局前在营地装配(营地·道具工坊柜台「同调装配」段)、占同调位(0 起步、硬上限 3,slot_cost 恒 1)、被动件整局生效/主动件每冒险充能(冒险开始重置)。设计权威底稿 = [proposal-magic-item-attunement-2026-09-22.md](../../../research/proposal-magic-item-attunement-2026-09-22.md)(2026-09-22 用户八条拍板)+ 任务书 v1.1(P1-P8 全裁)。 +- **终局形态(现行)= 局外同调件**:开局前在营地装配(营地·道具工坊柜台「同调装配」段)、占同调位(0 起步、硬上限 3,slot_cost 恒 1)、被动件整局生效/主动件每冒险充能(冒险开始重置)。设计权威底稿 = 原提案(git 57da58c 已退役——2026-09-22 用户八条拍板)+ 任务书 v1.1(P1-P8 全裁,已退役)。 **现行形态速览**(实现面 = `game/data/tables/attunement_growth.tres` + `aux_items.tres` + `game/core/attunement.gd`): @@ -211,7 +211,7 @@ playtest 预警(预注册,归难度曲线与Boss): | v0.4 | 2026-09-17 | 数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 data/tables/*.tres 与 registry),1 处失同步修正(AP 8→6 漏改:爆破工兵包定位读数段的「每轮行动点默认 8」改指路 action_economy.tres)——道具加量、供给读数、调参表六行 w/t/mag、道具依赖预警阈值 50% 均改指路 registry `aux_items`;行名与表结构列保留 | | v0.6 | 2026-10-04 | **迭代 13 D6 实装修订**:爆破工兵包换装启用(deferred 留位 → active_charged 装配件 charges 2)+「中立移除」实装口径节落文(P1 甲邻接数字冻结/P2 甲退色降档,裁决吸收自批任务书)+投放态注记换代(获渠=营地同调装配,过渡投放池零行) | | v0.5 | 2026-09-29 | **内容批落地修订(迭代 7——用户八拍板)**:①道具定义表六行入表(AuxItemTable——三有效实装:工兵令 ap_grant/探巢摆钟真视/爆破工兵包组合;**探宝罗盘退役留痕**(拍板①乙——未开格类型微光常显覆盖预读价值,retired 标记词表兼容);显影尘/地穴全图卷 deferred「能力封存」(拍板④甲,Alpha 重定);②F2 维度覆盖改**投放维度覆盖**口径+豁免面 {plan, info, counter} 显式登记(罗盘退役+显影件悬置所致,豁免随 Alpha 重定/天赋批消减);③解锁语义定稿=工坊解锁→进掉落投放池(拍板③甲,未解锁权重 0);④奖励节点=三选一构筑点(拍板②丙,node-reward.md v1.0);⑤掉落投放三件总权重 10/池 88(拍板⑥甲,provisional) | -| v0.6 | 2026-09-30 | **拍板点 1 收口批(2026-09-30 用户裁决甲:同调=终局方向)**:①新增「定位与形态沿革」节——现行正文定性=切片期过渡形态、终局=局外同调件(设计权威底稿 proposal-magic-item-attunement-2026-09-22.md 八拍板),两态关系=形态替换、衔接纪律与事故留痕入节;②正文口径回写四处:五维度表信息/规划/反制三行改现行态(罗盘退役/显影件封存/豁免面入正文)、覆盖检查改投放维度覆盖口径、掉落池获取节补解锁门控(2026-09-29 拍板③甲)、板级叠加层预读集改「机制在案无投放来源」;③验收两条(护栏/覆盖检查)与调参表投放态注记、地形变异依赖行同步;④实施批登记见 06「秘宝同调实施批」条。审计冲突 C19/C29 随批收口(全录见审计报告 git 提交 c095916,报告已退役) | +| v0.6 | 2026-09-30 | **拍板点 1 收口批(2026-09-30 用户裁决甲:同调=终局方向)**:①新增「定位与形态沿革」节——现行正文定性=切片期过渡形态、终局=局外同调件(设计权威底稿=原提案八拍板,git 57da58c 已退役),两态关系=形态替换、衔接纪律与事故留痕入节;②正文口径回写四处:五维度表信息/规划/反制三行改现行态(罗盘退役/显影件封存/豁免面入正文)、覆盖检查改投放维度覆盖口径、掉落池获取节补解锁门控(2026-09-29 拍板③甲)、板级叠加层预读集改「机制在案无投放来源」;③验收两条(护栏/覆盖检查)与调参表投放态注记、地形变异依赖行同步;④实施批登记见 06「秘宝同调实施批」条。审计冲突 C19/C29 随批收口(全录见审计报告 git 提交 c095916,报告已退役) | | v0.7 | 2026-10-01 | **奖励节点渠道改写注记(迭代 10 追加批——用户拍板「奖励节点与通关三选一共享同池」)**:①「奖励节点三选一构筑点」形态(v0.5 ④)退役——奖励节点改提升三选一共享池(秘宝件为池中 1/6 权重选项,同调位满位替换交互随 BonusPickOverlay 共用面生效,spec:node-reward.md v2.0);②道具件经节点渠道入本关库存(来源归因 reward_node,与掉落/三选一渠道同受 transitional_sync_slots 过渡上限约束);③战斗掉落渠道零改动;④本批过渡约束形态与切换义务注记见 registry aux_items 条同日批注;同调实施批的全渠道统一收口义务不变 | | v0.8 | 2026-10-03 | **反制契约作废批(2026-10-03 用户终裁——层级错配失败设计)**:①五维度「反制」行与豁免面 {plan, info, counter} 的 counter 注记改终裁态(原框架契约「每变异≥1反制道具」作废,终裁理由见地形变异.md v0.6/本文件 v0.8 版本行(原 06 条目已收口移除));②上游地形变异依赖行、P2 后置行同步改「迭代 12 调研前置重定」;③地形变异.md v0.6 同批落义务作废注记;④迭代 11 范围裁定(同调→商店→迷雾三批)见 roadmap 迭代 11+ 行——反制批移迭代 12 | | v0.9 | 2026-10-05 | **消歧更名批(用户拍板 2026-10-05):系统更名「魔法道具」→「秘宝」**。**更名理由**:「魔法」一词在本作已被征用为敌方侧伤害/护甲语汇(`magic_bolt 魔法矢` / `magic_recoil 魔法反噬` / `magic 魔法族` 格面微光 / `ward 魔法护甲`),「魔法道具」易被读成"魔法属性的道具";「秘宝」取"神秘·强大·稀有"义,与九件内容气质(工兵/工程/手艺向)契合,且与局内道具(奇物)不冲突。**同调位机制名保留不变**(attunement 仍为 DND 词,机制血统不受更名影响)。**本批仅改文档称谓,代码不动**——代码标识符仍为 `aux_*` / `AUXILIARY_ITEMS`(auxiliary 词根为过渡形态遗留,与中文名不同步属已知欠债,另批处理);退役路径残留玩家可见文案(`battle_narrator.gd:117-118`、`bonus_interact_controller.gd:76`)亦留另批。历史定稿文档(research/ 提案与任务书、qa/ 检查单、archive/ 归档)按换名先例原样保留不改。 | diff --git a/design/gdd/systems/排雷循环/行动经济.md b/design/gdd/systems/排雷循环/行动经济.md index b32bc68b..96217eea 100644 --- a/design/gdd/systems/排雷循环/行动经济.md +++ b/design/gdd/systems/排雷循环/行动经济.md @@ -137,7 +137,7 @@ ``` 条款 3(2026-10-05 判式换代批重立——三层口径并行立,2026-10-04 用户裁 P2; - 设计权威 = design/research/方案-挖掘风险不等式修订-2026-10-04.md §四/§九) + 设计权威 = 方案报告 §四/§九(已退役,git 1da9a41;现行判式口径=registry clause3_inequality 条)) 条款 2(标中旗锚,既有不动):标中旗的减益档位必须严格高于最低档安全格增益。 diff --git a/design/gdd/systems/表现与支撑/HUD框架.md b/design/gdd/systems/表现与支撑/HUD框架.md index 497e5deb..8507f25c 100644 --- a/design/gdd/systems/表现与支撑/HUD框架.md +++ b/design/gdd/systems/表现与支撑/HUD框架.md @@ -216,7 +216,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 已开格的奖励身份常读;未开格类型微光(英雄周围 8 格内的未开格显示资源类型——概念定义见本篇「未开格类型微光」节) | | [秘宝](../排雷循环/秘宝.md) | 库存条常读;使用交互与目标拾取;板级叠加层信息呈现 | | [棋盘生成](../排雷循环/棋盘生成.md) | 零合法板的诚实告知(数据面经战斗结算上抛,本系统只管提示形态) | -| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=流派件段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | +| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=奇物段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 | ## P0 最小闭环 @@ -300,6 +300,6 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | v0.10 | 2026-09-26 | 渲染技术注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗舞台 Node2D 化——BattleStageView 内部由 PanelContainer+Control 站桩改为 Control 壳 + SubViewportContainer + SubViewport + Node2D 世界(StageWorld/StandeeBody),类名/setter 面/公共方法契约不变、调用点零改造;状态图标行与悬停 tooltip 保留 Control 载体挂壳层(伴随件);C6 字体注入挂点复用(set_world_font);三区布局与性能预算(同屏 draw calls < 200)不变;占位表现等价平移(时序常量逐字对照——等价证明=git 提交 7f24b64,文件已按生命周期条款退役) | | v0.11 | 2026-09-27 | 关卡画面 UX spec 建档([level-map](../../ux/level-map.md),关卡画面 UX 批——用户拍板立项):义务清单「关卡节点地图」行挂屏级 spec 指针;屏级权威行与不负责表改按屏分治口径(战斗屏 = battle.md / 关卡画面 = level-map.md)。文档面零机制改动 | | v0.12 | 2026-09-30 | **未开格类型微光概念收口批(用户裁决落位)**:新增「未开格类型微光」节=全项目唯一正主定义(五要素——作用对象=英雄周围 8 格内的未开格〔与可挖域同圈〕/信息内容=只类型不泄雷安/生命周期=入圈亮出圈灭开格灭/关联边界/实装状态=契约定稿〔样张 v2〕游戏内待实施批);核心规则章六节改七节;呈现义务来源清单「地图战斗资源」行补微光指路;验收标准补微光呈现线。背景:该概念此前只活在 06 登记与 art-bible 复述,「常显/全部未开格」无范围表述酿成理解事故(2026-09-30 用户纠正口径),本批落位正主、他文只许指路 | -| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=流派件段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | +| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=奇物段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 | | v0.14 | 2026-10-03 | **视野迷雾实施批落籍注记(迭代 11 第④批)**:迷雾节补「实施状态」注记(四裁决逐条对账:纯呈现两态逐位一致/暗淡记忆态灰显可读/LIGHT_RADIUS=8 参数化〔提灯 +2 插值位预留未接〕/类型微光仍贴身 8 邻格);实装状态行「待实施批」改「已实装」;验收标准迷雾行去「待实施批落地后验收」括注转正式验收。机制定义零改动(定义一句话/作用范围/生命周期/关联边界/配套拍板全段原样);黑暗区域渲染规格落 art-bible §6.5(v3.5) | | v0.13 | 2026-09-30 | **视野迷雾概念落位批(用户拍板立项)**:新增「视野迷雾」节=正主定义(菱形灯光区+黑暗边界;区外已开格=暗淡记忆态灰显可读、区外未开格=全黑;灯光半径起步=微光环 8 格同圈;纯呈现层,与已退役雾格无关);验收标准补迷雾线;配套拍板随节登记(魔法提灯灯甲外扩 +2 格、类型微光不随视野扩、初始展开收窄后置 Alpha 差异化批)。实施待主线编卡 | diff --git a/design/gdd/systems/跨局循环/元进度.md b/design/gdd/systems/跨局循环/元进度.md index b88c8035..63827d85 100644 --- a/design/gdd/systems/跨局循环/元进度.md +++ b/design/gdd/systems/跨局循环/元进度.md @@ -61,7 +61,7 @@ | 柜台 | 内容 | 解锁渠道 | |---|---|---| | 属性锻造 | 生命上限、基础攻击、护甲等级——三档可重复升级的属性强化 | 钥石直购 | -| 道具工坊 | 秘宝解锁(现行六行定义,进投放池三件:工兵令/探巢摆钟/爆破工兵包;探宝罗盘已退役、显影尘/地穴全图卷能力封存——退役/封存件不入投放池,营地呈现「已退役 / 已解锁·能力封存中」) | **首版全走关卡通关次数达标**(总通关次数渠道,读 meta.tres workshop_items);钥石直购价随定价批后补,最终双渠道并存。**形态沿革(2026-09-30 用户裁决甲)**:终局=秘宝局外同调件,本柜台职责随同调实施批改写(解锁→谓词表+装配入口,底稿 proposal-magic-item-attunement-2026-09-22.md §9) | +| 道具工坊 | 秘宝解锁(现行六行定义,进投放池三件:工兵令/探巢摆钟/爆破工兵包;探宝罗盘已退役、显影尘/地穴全图卷能力封存——退役/封存件不入投放池,营地呈现「已退役 / 已解锁·能力封存中」) | **首版全走关卡通关次数达标**(总通关次数渠道,读 meta.tres workshop_items);钥石直购价随定价批后补,最终双渠道并存。**形态沿革(2026-09-30 用户裁决甲)**:终局=秘宝局外同调件,本柜台职责随同调实施批改写(解锁→谓词表+装配入口,底稿=原提案 §9(git 57da58c 已退役)) | | 奖励格图鉴 | 特殊奖励格的解锁——更强效果的格面 | 结构位现定;格子内容排 Alpha,随[地图战斗资源](../战斗循环/地图战斗资源.md)差异化批落地 | **投值语言锁定(2026-09-18 数值语言拍板)**:三柜台属性强化一律 **flat 整数加减**("每级 +1 基础攻击"式,而非"+50% 攻击"式)——避开百分比词条被数值成长稀释的先例陷阱、守住数字可读性锚;具体每级数值仍归元进度设计批投值。 diff --git a/design/gdd/ux/battle.md b/design/gdd/ux/battle.md index 85fe2922..2ee8fdec 100644 --- a/design/gdd/ux/battle.md +++ b/design/gdd/ux/battle.md @@ -105,7 +105,7 @@ - 攻击值 + 修正来源角标(战斗在消费、且站桩上无展示) - 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性) - 秘宝槽(**已实装**:四槽两步交互,详见 [node-reward.md](node-reward.md)——随身战斗用道具的唯一展示面) - - 本关强化列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) + - 奇物列表(**预留**——锻造/大奖励/关卡奖励节点获得的属性提升;与战斗内状态效果分区呈现,防「战斗结束被清」误读) - **D 区扫雷图 · AP 条** - AP 点阵 + 停手按钮(现行) - **RAP 读数(点阵+数字)**——自 C 区迁入,置于弃图刷新按钮旁(2026-09-26 拍板:RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮) @@ -120,7 +120,7 @@ | 区 | 位置与尺寸 | 内容 | |---|---|---| | **B 战斗画面** | 全宽 × 252px | 主角站桩立绘(左)+ 兑现演出区(中)+ 敌人站桩立绘 ×1–3(右)——**全站桩形态(2026-09-20 用户拍板,敌人卡形态待办裁决收口):主角与敌人均为无框立绘+底座,零卡片**;主角与敌人站桩 = **HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板)**;底部结算明细带(24px 摘要 / 结算期 84px 实时流);顶部中央轮次·阶段指示 | -| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;秘宝槽(预留)、本关强化列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | +| **C 角色信息** | 左下 240px × 548px | 攻击值(含修正显示)、护甲 AC;秘宝槽(预留)、奇物列表(预留)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) | | **D 扫雷图** | 中下 ~1036px × 548px(原右下面板删除后横向加宽,吸收其宽度) | 顶部 AP 条(44px:左——AP 点阵 + 停手按钮;中——RAP 点阵+数字〔自 C 区迁入,贴弃图刷新按钮,2026-09-26 拍板〕;右——图例按钮 + 弃图刷新按钮〔雷图右上角,2026-09-12 拍板〕);棋盘主体(居中,格 36–45px 见方);toast 槽(上缘内侧) | > 布局为 B/C/D 三区——关卡进度条不在战斗屏(节点链进度常驻关卡画面,见 Navigation Position;字母不重编沿用 B/C/D)。 @@ -147,7 +147,7 @@ | B | 结算明细回看 | 模态 overlay | 完整流水逐行(现行 9 类行协议;未生效类行聚合计数) | 关闭 | battle_log_view.gd 改造 | | C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;原「HP/攻击/RAP 显示」——HP 与 RAP 随信息归属拍板迁出本组件) | 只读 | HUDView 拆分 | | C | 秘宝槽(已实装:四槽两步交互,详见 [node-reward.md](node-reward.md)) | 图标槽 ×4 | 随身战斗用道具的唯一展示面;库存已随迭代 7 落地(C 区四槽+关卡域库存),清库反馈呈现待批 | 悬停 tooltip(道具语义) | 新建(随秘宝批,已落地) | -| C | 本关强化列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | +| C | 奇物列表(预留) | 列表/图标行 | 锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 新建 | | D | AP 条 | 点阵 + 按钮组 | 本轮 AP 点阵、停手按钮(左)、**RAP 点阵+数字(自 C 区迁入 2026-09-26——RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮;RAP 清零可见反馈〔行动经济〕载体随迁)**、弃图刷新按钮(右端·雷图右上角;RAP−8 · 本轮剩 N 次——上限 2 次已随行动经济 2026-09-12 修订生效) | 点击提交意图 | HUDView 拆分 | | D | BoardView | 网格 | 棋盘全部格态 + 小人 + 旗 + 变异纹带 + 奖励身份 icon(已开格;绘制优先级 数字>小人>旗>奖励徽章>变异纹带>底色——徽章不进数字区,样张验收项) | 左/右键意图提交 | ✅ board_view.gd 迁移 | | D | 悬停预承诺光标 | 光标态 | 移动/挖/旗三语义光标 + 目标格边框高亮 | 自动 | 新建(排雷玩法×6③) | @@ -204,7 +204,7 @@ │ │ 秘宝槽(预留) │ │ │ │AP不足·剩0点 │ 12 12 1 ░ 2 ▓▓ ▓▓ │ │ │ │ ◇ ◇ ◇ ◇ │ │ │ └──────────────────┘ 12 █ 1 1 2 ▓▓ ▓▓ │ │ │ ├──────────────────┤ │ │ 1 2 2 🚩 █ 2 1 1 ▓▓ 👫 1 1 ░ │ │ -│ │ 本关强化(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ +│ │ 奇物列表(预留) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │ │ │ 锻造+2攻 │ │ │ ▓▓ 1 1 ░ ░ 2 ▓▓ │ │ │ │ (空态=隐藏) │ │ │ ( █=可挖域微光 👫=小人) │ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────┘ │ diff --git a/design/gdd/ux/level-map.md b/design/gdd/ux/level-map.md index 7bc902e0..4a54f3d3 100644 --- a/design/gdd/ux/level-map.md +++ b/design/gdd/ux/level-map.md @@ -91,7 +91,7 @@ **布局决策 3 —— 放弃冒险二次确认(2026-09-27 拍板)**:放弃 = 整局冒险终结,不可逆(pattern 7 破坏性确认)。首击转入确认态(按钮文案变「再点一次确认放弃——不可逆」,危险红边框脉冲约 3 秒,超时回落),二击才提交。代价语义(已获大奖励保留、同失败结算)常驻按钮文案。 -**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「本关强化列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 +**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「奇物列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 ### ASCII Wireframe diff --git a/design/qa/中间产物死亡清单-2026-10-02.md b/design/qa/中间产物死亡清单-2026-10-02.md index 202bdcea..f182c42d 100644 --- a/design/qa/中间产物死亡清单-2026-10-02.md +++ b/design/qa/中间产物死亡清单-2026-10-02.md @@ -2,15 +2,16 @@ > **清单状态:2026-10-02 用户令挂起**——其他工作完成后用户回来再处理剩余项;挂起期间本单不再有执行批。 > 执行状态:①A1/A2/B1/B2 四桶 2026-10-02 执行完毕(git rm 83 件+主工作区直删未跟踪 10 件,指路句改写 37 处;明细归 git a6833b6/合并 5b3f345 与台账 305/308);②表 C·sim-data 2026-10-02 用户授权整批删——白名单外 100 件 git rm(白名单 17 件留:README/.gitignore/_snap/analyze.py/growth_model.py/iteration_log/三设计 md/现行 MC 锚 8 件);③同日 .gitignore 裁决落文——artwork/ 整目录不入库(取消 md 例外,原两跟踪件解跟踪磁盘保留)、.qoder/ 与 .workbuddy/ 入忽略(合并见台账尾);④**artwork/ 全目录内容 2026-10-02 用户裁永久保留**——美术素材工作区只留磁盘不入 git,.gitignore `artwork/` 强制永不提交,无删除时机(原「ui-redesign 点名 v2 后死」一并撤销)。已删条目不再列于本单。 -> 执行依据:doc-conventions §11「文档生命周期:吸收即死」(2026-10-01 用户立规)。引用面口径:**活引用阻塞面 = design/gdd + design/art + design/dev + design/registry + roadmap.md + tools/**(死链闸扫描域);active.md 台账引用不阻塞。 +> 执行依据:doc-conventions §11「文档生命周期:吸收即死」(2026-10-01 用户立规)。 +> ⑤**2026-10-05 退役批(用户令「12 份任务本体已完成——都删除」)**:git rm 12 件=上二表四行(美术圣经v3.5任务书/perfect-l1/秘宝提案/A3提案/playnote机制提案)+七件 2026-10-02 后新建且已落籍的中间文档(视野迷雾/GP商店房/魔法道具同调/双层BD/全局作用域变异五任务书+挖掘风险不等式方案+art-bible-ux-review);指路句改写 12 文件(roadmap 五处/06/行动经济/entities 三处/art-bible 两处/地形变异/秘宝 两处/冒险结构/关卡节点地图/元进度/clear_dominance_audit.py+reward_expectation.gd 注释核正);秘宝提案八拍板、A3 否决、playnote 题二裁决均以 git 号留痕(57da58c/a404a65/12e934b)。引用面口径:**活引用阻塞面 = design/gdd + design/art + design/dev + design/registry + roadmap.md + tools/**(死链闸扫描域);active.md 台账引用不阻塞。 > 本单只登记**未删项**,每项标明**未删原因**与**待用户动作**。本清单自身亦为中间文档:全部桶收口后随批自删。 ## 一、挂债项(迭代 9 在飞域——出口批顺带处置,现在无需任何动作) | 文件 | 原桶 | 未删原因 | 待用户动作 | |---|---|---|---| -| 任务书-美术圣经v3.5冻结与落码-2026-09-29.md(design/research/) | A2 | roadmap 迭代 9 行指路(在飞返工会话域,改指路会撞在飞批) | 无——迭代 9 出口批将指路句改 git 提交号后删 | -| perfect-l1-lever-proposal-2026-09-29.md(design/research/) | A2 | 06「战斗阶段数值问题」在飞条目指路 | 同上 | +| 任务书-美术圣经v3.5冻结与落码-2026-09-29.md(design/research/) | A2 | roadmap 迭代 9 行指路(在飞返工会话域,改指路会撞在飞批) | ✅ 已执行(2026-10-05 退役批:git rm+roadmap 指路改 git 710f9b7) | +| perfect-l1-lever-proposal-2026-09-29.md(design/research/) | A2 | 06「战斗阶段数值问题」在飞条目指路 | ✅ 已执行(2026-10-05 退役批 git rm——被带换代四带甲案取代,未批准未执行) | | m3-iter5-lever-scan-2026-09-28.md(design/qa/) | B2 | 06 在飞条目指路(证据锚) | 同上 | | m3-iter5-rework-readings-2026-09-29.md(design/qa/) | B2 | 06 在飞条目指路(读数与归因锚) | 同上 | | m3-iter9-9a-checklist / t8-rulings / t17-fullflow-checklist / t18-07-audit(design/qa/ 四件) | B3 | 迭代 9 在飞会话域 | 无——T20 出口批按同规则处置 | @@ -25,9 +26,9 @@ | prototype-report-minesweeper-battle-concept.md | 概念原型 v3 PROCEED 决策记录(项目原点档案) | 原单标「留否由用户裁」——**维持留活,若要删随时说一声** | | 优化方案.md(sim-data/,白名单内) | PackageB 提案母稿——表改项已随 54f2da3 落籍;结构改候选未逐项验吸收(删前核 2026-10-02:暂留) | 后续数值批复核结构改候选去留后裁 | | **artwork/ 整目录**(mockups/、qa-screens×2、remote-gen-2026-09-26、ui-redesign-2026-09-29 等全部产物,磁盘 89MB) | 2026-10-02 用户裁**永久保留**——美术素材工作区只留磁盘不入 git,无删除时机(原「ui-redesign 点名 v2 后死」一并撤销) | 无任何动作(.gitignore `artwork/` 强制永不提交,全会话经 CLAUDE.md Project Layout 获知此裁) | -| proposal-magic-item-attunement-2026-09-22.md | 同调实施批设计权威底稿(06/registry/五文档引用) | 同调实施批落籍后随批死 | -| proposal-reward-cell-differentiation-2026-09-17.md | Alpha 差异化批调研底座(06 指路) | Alpha 差异化批落籍后随批死 | -| proposal-playnote-mechanisms-2026-09-30.md | 06 指路留痕;题一重写未决 | 题一重写落定后死 | +| proposal-magic-item-attunement-2026-09-22.md | 同调实施批设计权威底稿(06/registry/五文档引用) | ✅ 已执行(2026-10-05 退役批:git rm+五正主引用改 git 57da58c) | +| proposal-reward-cell-differentiation-2026-09-17.md | Alpha 差异化批调研底座(06 指路) | ✅ 已执行(2026-10-05 退役批 git rm——差异化批 2026-10-04 用户否决,死条件以否决收口成就;reward_expectation.gd 旧基准注释顺手核正) | +| proposal-playnote-mechanisms-2026-09-30.md | 06 指路留痕;题一重写未决 | ✅ 已执行(2026-10-05 退役批 git rm——题一迷雾已落籍、题二 09-30 已裁不动;「标雷激励待新方向」随用户删除令作放弃,git 12e934b 留痕) | | playnote.md | 试玩反馈正主 | 无(正主不死于本单) | | roguelike-difficulty-benchmark-2026-10-01.md | 难度目标外部类型基准(带值拍板依据) | 新带值拍板落籍后可议死 | | board-tile-vocab-plan-a-2026-09-26.md | 高墙瓦片现行规格(art-bible+两 render 脚本+remote-gen-prompts 活引用) | 无(活规格) | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 1d83ed9a..5c9c068f 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -256,7 +256,7 @@ entities: 金币(GP): 冒险内一次性的属性提升货币——战斗掉落(掷定 + 关级加值 + 战斗内缓冲,完成一次战斗后统一到账)与格面金币袋(低概率惊喜获取)进钱包、商店房消费、冒险结束清零;不入存档、不入冒险摘要;玩家侧显示名「金币」,与跨局持久的钥石记账完全分离、永不互兑(冒险结构 首次定义,2026-09-20 GP+商店房批) 统一冒险加算区: 商店购买与关卡大奖励上限提升共用的同一本属性加账——三轴 {攻击, 生命上限, 护甲等级},入战参数 = 基础表值 + 加算区累加,经战斗开始入参的覆盖值通道生效;购血 = 上限与当前生命同步 +Δ(冒险结构 首次定义,2026-09-20 GP+商店房批) 遭遇: 一次完整战斗事件的同义词——战斗节点触发的那一场仗(既有用法:战斗结算"两场遭遇" / HUD框架"双敌种遭遇""Boss 遭遇变体");不作地图层名(2026-09-14 裁决) - 节点奖励: 奖励点节点给的奖励(关卡节点地图 域)——与安全格奖励(地图战斗资源,格内开出)区分;现行(2026-09-29 迭代 7 拍板②丙):奖励节点 = **三选一构筑点**——从可用道具池(aux 活行 ∩ 工坊解锁集)取一件入关卡域库存,选择前不给出口、池空直通合法空态;spec = design/gdd/ux/node-reward.md v1.0;旧「功能道具的正式渠道」拍板(2026-09-17 关卡节点地图 v1.0)已被现行口径取代;**形态沿革(2026-09-30 用户裁决甲)**:现行局内投放系切片期过渡形态,终局 = 秘宝局外同调件(底稿 design/research/proposal-magic-item-attunement-2026-09-22.md 八拍板),本渠道随同调实施批退役改写——三个"reward"各归各位(2026-09-14 拆名注记) + 节点奖励: 奖励点节点给的奖励(关卡节点地图 域)——与安全格奖励(地图战斗资源,格内开出)区分;现行(2026-09-29 迭代 7 拍板②丙):奖励节点 = **三选一构筑点**——从可用道具池(aux 活行 ∩ 工坊解锁集)取一件入关卡域库存,选择前不给出口、池空直通合法空态;spec = design/gdd/ux/node-reward.md v1.0;旧「功能道具的正式渠道」拍板(2026-09-17 关卡节点地图 v1.0)已被现行口径取代;**形态沿革(2026-09-30 用户裁决甲)**:现行局内投放系切片期过渡形态,终局 = 秘宝局外同调件(底稿=原提案八拍板,git 57da58c 已退役),本渠道随同调实施批退役改写——三个"reward"各归各位(2026-09-14 拆名注记) HP 账本: 冒险域主角血量的唯一记录——冒险结构 持有,每战开始交出、战斗结束收回、恢复点与大奖励入账;关卡切换血条不清零(冒险结构 首次定义;跨战斗 HP 持久性归 关卡节点地图/冒险结构 已锁事实的 冒险结构 半边兑现) 关卡收束点: 一关就此定局的时点——Boss 节点战斗胜利(通关)或英雄死亡(失败);关卡节点地图 在收束点先调 战斗结算 关卡清库、再向 冒险结构 宣布关卡结束与结果(冒险结构 首次定义;切片 level_runner 先例转正;2026-09-17 关卡节点地图 v1.0 图版措辞——Boss 节点 = 图唯一终点) 关卡大奖励: 清完一关、进入下一关前的一次性兑付——上限提升 + 血回满 + 钥石入账三件构成,不进背包不占库存域;末关通关不兑付(冒险结构 首次定义;2026-09-17 代币→钥石统一拍板——原「代币记账」即钥石,同一资源两渠道:关卡大奖励入账与 Boss 掉落;game-concept"冒险内大奖励"的落地形态) @@ -327,7 +327,7 @@ entities: table: RewardTable(数据配置 承载,键 = reward_id;地图战斗资源 回填 owner;**2026-09-15 格面资源批结构性重写**——旧 category / use_timing / 库存 / 供给轴随可选类删除整批下线,五型 × 极性字典取代〔历史结构见底部修订记录〕) fields: reward_id: String(表内主键) - cell_type: enum {attack, defense, heal, blast, weaken, pierce, magic, action, gp}——九型封闭(2026-09-18 伤害道具批五→七、2026-09-20 格面资源八型批七→八 +action、同日 GP+商店房批八→九 +gp;格面资源类型身份;CELL_TYPE_KEYS 词表十八格 = 九型 × 正负,表里出现清单外值加载拒绝 fail-fast) # 2026-09-15 新增,取代 category;2026-09-18 扩七型;2026-09-20 八型批扩八型;同日 GP+商店房批扩九型 + cell_type: enum {attack, defense, heal, blast, weaken, pierce, magic, action, gp}——九型封闭(2026-09-18 伤害道具批五→七、2026-09-20 格面资源八型批七→八 +action、同日 GP+商店房批八→九 +gp;格面资源型身份;CELL_TYPE_KEYS 词表十八格 = 九型 × 正负,表里出现清单外值加载拒绝 fail-fast) # 2026-09-15 新增,取代 category;2026-09-18 扩七型;2026-09-20 八型批扩八型;同日 GP+商店房批扩九型 polarity: enum {positive, negative}——同型两行:正向行参与摇号(权重 = 类型频次),负向行纯兑付字典、不消费权重 # 2026-09-15 新增 effect_id: String 可空——percent 类行(attack/defense/weaken 正负两向)必填(StatusEffectTable 精确引用,悬空校验已激活);flat 直付行(直伤/群伤/治疗)恒空 stacks: int [1,16] 可省——多层授予行(原 blast 负向 ambush_double ×2 层——该行随 2026-09-20 八型批退役,现行表无 stacks 行、字段保留 schema 位);缺省 1 @@ -392,7 +392,7 @@ entities: type: formula owner: design/gdd/systems/排雷循环/行动经济.md attributes: - rule: (2026-10-05 判式换代批重立——迭代14②号卡 T3,2026-10-04 用户两轮拍板+grill 七问全裁,设计权威=design/research/方案-挖掘风险不等式修订-2026-10-04.md §九)行动经济 F1 条款3 三层口径并行立——**条款3 聚合健康式**:(1−ρ̂)·E_dig(u) − ρ̂·V_mine(u) ≥ 0 对全部参考板形 × u ∈ {1,2,3}(下限 0 唯一保留,上限 U_band 删〔grill Q3〕由 β_hi 独家承载);**旗边际引理**(同池结构定理):EV_flag−EV_blind = (q+ρ̂−1)(E_dig+V_mine),旗优于盲挖 ⇔ q > 1−ρ̂,与全部当量表值无关;旗对已知安全格边际恒 ≤ 0(L2 结构破线层);**条件二旗溢价式**:E[标中兑付] ≥ (1+δ)·E_dig(u),δ=0.25 provisional(形态 a 兑付溢价 settlement.flag_hit_premium=125 percent 域;形态 b 专属池不启——雷安同池冻结);**β 比值带**:β(u)=V_mine(u)÷E_dig(u) ∈ [1.2, 2.5](2026-10-04 用户裁 P4);**η 读数**(非判式):η=flag_hit÷flag_placed,分母=全部插旗数〔grill Q5〕,标空率次读数——承载=MC runsum 五字段(flag_placed/flag_hit/flag_miss/flag_hit_gain/flag_miss_penalty,2026-10-05 T1 落码) + rule: (2026-10-05 判式换代批重立——迭代14②号卡 T3,2026-10-04 用户两轮拍板+grill 七问全裁,设计权威=方案报告 §九(已退役,git 1da9a41))行动经济 F1 条款3 三层口径并行立——**条款3 聚合健康式**:(1−ρ̂)·E_dig(u) − ρ̂·V_mine(u) ≥ 0 对全部参考板形 × u ∈ {1,2,3}(下限 0 唯一保留,上限 U_band 删〔grill Q3〕由 β_hi 独家承载);**旗边际引理**(同池结构定理):EV_flag−EV_blind = (q+ρ̂−1)(E_dig+V_mine),旗优于盲挖 ⇔ q > 1−ρ̂,与全部当量表值无关;旗对已知安全格边际恒 ≤ 0(L2 结构破线层);**条件二旗溢价式**:E[标中兑付] ≥ (1+δ)·E_dig(u),δ=0.25 provisional(形态 a 兑付溢价 settlement.flag_hit_premium=125 percent 域;形态 b 专属池不启——雷安同池冻结);**β 比值带**:β(u)=V_mine(u)÷E_dig(u) ∈ [1.2, 2.5](2026-10-04 用户裁 P4);**η 读数**(非判式):η=flag_hit÷flag_placed,分母=全部插旗数〔grill Q5〕,标空率次读数——承载=MC runsum 五字段(flag_placed/flag_hit/flag_miss/flag_hit_gain/flag_miss_penalty,2026-10-05 T1 落码) mechanism_carrier: settlement.tres flag_hit_premium = 125(percent 域 provisional,2026-10-05 T4 落地)——标中旗正向兑付按同型正向 ×(1+δ):flat 行乘 power、percent 行乘幅度(apply_effect magnitude_override 通道)、gp 行乘 power;取整=四舍五入(与伤害管线 round_direction=floor **分域**——溢价系兑付构造非伤害管线取整,登记注记);标空/挖格/清图兑付不乘溢价;DamageController 零改、雷安同池冻结不动、直伤雷 6/8/8 与 p_perfect 不动(契约红线) prechange_snapshot: **改前静态锚(2026-10-05 T0,audit 工具常量刷新后跑出,改后判读的基准)**——池 77 权重(attack14/defense11/blast16/heal4/weaken8/pierce8/magic8/action6/gp2,clear_blast 不入格池):E_dig(1/2/3)=1.442/1.948/2.455,V_mine(1/2/3)=2.460/2.670/2.881(九型负向字典口径乙=唯一口径,伏击口径甲退役删除),β=1.71/1.37/1.17(u=1/2 带内、u=3 微破下限=登记态点名不强制回滚),盲挖净期望(名义ρ)=+0.47/+0.79/+1.12 恒正(条款3 聚合健康式现行即绿),逐型净期望破线残留=pierce −1.25 / magic −0.50 / heal 0 踩线(名义ρ;实测ρ̂ 10×10 下 pierce −0.16 唯一实测也破、magic/heal 转正),条件二改前恒假(E[标中]=E_dig < 1.25·E_dig——登记已知破,T4 机制闭合);改前行为锚=MC n400 种子窗 76000 系+verifier 双窗(T2,读数随批出口报告) p7_corrections: **P7 口径修正注记(2026-10-04 用户裁随批登记)**:①d70f6c3 §二(迭代8 卡⑧全量复算)池 76 系历史混计——clear_blast(清图槽对象)不该入格池,现行口径=77;②同读数直伤雷 4/5/5 已时效化——2026-10-01 数值修复批 6/8/8 + 2026-10-03 带换代转正,现行单雷期望直伤 ≈1.97 HP(×2.2);heal 权重 2→4(Package B 第 2 轮)同链时效 @@ -524,7 +524,7 @@ entities: type: schema_data owner: design/gdd/systems/排雷循环/秘宝.md attributes: - table: AttunementGrowthTable(数据配置 承载,单行全局常量表——AdventureTable 单行先例 Rule 4 豁免;迭代 11 第①批 同调实施批 T1 落籍 2026-10-03;设计权威 = proposal-magic-item-attunement-2026-09-22 §2.1 用户点名要求) + table: AttunementGrowthTable(数据配置 承载,单行全局常量表——AdventureTable 单行先例 Rule 4 豁免;迭代 11 第①批 同调实施批 T1 落籍 2026-10-03;设计权威 = 原提案 §2.1 用户点名要求(git 57da58c 已退役)) fields: slot_cap int [0,9](硬上限 3——底稿裁决)· milestones 行族 {id 唯一, grant ∈ [1,slot_cap], requires = (计数键,阈值) AND 列表非空}——同调位读数唯一口径 = Σ达成 grant clamp slot_cap counter_keys: 封闭枚举 {clear_count(通关次数按关累计——save 复用零改动), boss_kill_count(Boss 击杀总数含重复——本批 T2 新增收束记账)};预留可插拔位 boss_firstkill_count/adventure_count/no_damage_clear_count/run_depth_best(加行即扩展,底稿 §2.1) schema_guards: 阈值 [1,999] · Σgrant ≤ slot_cap · 计数键出域=加载致命;数值全 provisional 归 难度曲线与Boss(形态锁死、调平衡=改表不动码) @@ -583,9 +583,27 @@ entities: nodes: 节点图结构——节点数组 + 连线(node_kind ∈ {battle, reward, rest, boss, shop},切片字段名 type;+shop 随 2026-09-20 GP+商店房批——商店房兑付 = 打开商店覆盖层、离开后确认回选路,不携带战斗行〔零敌人、零棋盘配置行〕;每节点领关卡内唯一**节点编号**,battle/boss 数据键 node_depth 沿用〔v1.0 语义升级:深度 → 节点编号〕;连线 = 出边节点编号表,只朝前进方向、无回头路);单链特例 = 隐式后继(数组序即链,切片现行形态零漂移) rowset_rule: 图合法性校验(2026-09-17 关卡节点地图 v1.0)——节点编号关卡内唯一、入口唯一、Boss 恒唯一终点(编号最大,Dmax 语义平移)、连线无环、所有节点沿连线可达 Boss,违规加载期致命;实现批(2026-09-17 分支节点图批):校验落 LevelTable.validate(单链形态经同一套算法——编号解析单链 = 数组下标 / 图 = node_depth),L1 单链与 L2 图双行集加载全绿断言;商店房编排(每关恰 1、Boss 前一位必经位)由冒烟断言承载、非加载校验——图合法性六检零新增(GP+商店房批 2026-09-20,关卡节点地图 v1.1) cross_table_validation: battle/boss 节点 (L,D) 在 board_gen/enemy 两表存在精确行(数据配置 跨表校验⑧复用 + 冒险结构 AC-7 冒烟断言——序列关数 ⊆ 内容覆盖,越界关卡 = 内容生产缺口) - mvp_content: L1 全行(切片转正——7 节点链〔单链特例,合法图形态〕、rest_heal_pct=30);L2 全行已落地(2026-09-17 分支节点图批——首张分支图:9 节点〔入口 0 → 中间三层 2/3/2 → Boss 8〕、真实岔路 4 处、奖励点+恢复点各 1、战斗节点 6 + Boss;行值 provisional 归 难度曲线与Boss v0.7;首页直入口已退役〔2026-09-23 用户拍板〕);**L3 全行已落地(2026-09-20 第三关内容批——「第三层 · 灰矮人矿城」:九节点图复用 L2 同模板〔6 战 + Boss + 奖励 + 恢复、真实岔路 4 处〕,行值全 provisional 归 难度曲线与Boss;测试直入口已退役〔2026-09-23〕)**;2026-09-20 GP+商店房批 rewiring:L2/L3 图版 Boss 重编号 8→9、各新增 (8, shop, next[9]) 商店房节点(Boss 前一位必经位),L1 零改动,图合法性六检零新增——必经位由冒烟断言承载;**2026-09-21 冒险结构实现批:三关正式序列生效**(首页「开始冒险」= L1→L2→L3 连探,AdventureRunner 编排——大奖励/生命账本/GP 冒险账本/主种子归冒险结构层,冒烟断言在案)** + mvp_content: L1 全行(切片转正——7 节点链〔单链特例,合法图形态〕、rest_heal_pct=30);L2 全行已落地(2026-09-17 分支节点图批——首张分支图:9 节点〔入口 0 → 中间三层 2/3/2 → Boss 8〕、真实岔路 4 处、奖励点+恢复点各 1、战斗节点 6 + Boss;行值 provisional 归 难度曲线与Boss v0.7;首页直入口已退役〔2026-09-23 用户拍板〕);**L3 全行已落地(2026-09-20 第三关内容批——「第三层 · 灰矮人矿城」:九节点图复用 L2 同模板〔6 战 + Boss + 奖励 + 恢复、真实岔路 4 处〕,行值全 provisional 归 难度曲线与Boss;测试直入口已退役〔2026-09-23〕)**;2026-09-20 GP+商店房批 rewiring:L2/L3 图版 Boss 重编号 8→9、各新增 (8, shop, next[9]) 商店房节点(Boss 前一位必经位),L1 零改动,图合法性六检零新增——必经位由冒烟断言承载;**2026-09-21 冒险结构实现批:三关正式序列生效**(首页「开始冒险」= L1→L2→L3 连探,AdventureRunner 编排——大奇物/生命账本/GP 冒险账本/主种子归冒险结构层,冒烟断言在案)** referenced_by: [冒险结构, 关卡节点地图, 难度曲线与Boss, 棋盘生成, 数据配置] + - name: curio + type: concept + owner: design/gdd/systems/冒险循环/奇物.md + attributes: + definition: 一次冒险之内通过各渠道给予玩家的增益总称——奖励节点给的、商店买的、打赢关底 Boss 给的,都是奇物。装的是"这一局你捞到了什么",不管从哪个渠道来 + channel_constraint_layers: 渠道约束分三层——一层 分类白名单(分类轴决定渠道);二层 可计算谓词(渠道与奇物的结构性关系,如「计价物不自售」:X 是渠道 C 的计价物 → X 不进 C;新渠道/新奇物自动判定,不用改表);三层 显式例外清单(人为设计选择,只能逐条加,每条须写理由)。要害不是有没有例外,而是例外能不能被算出来——结构性原因写成谓词,设计性原因进清单。在册约束两条:①金币不进商店(二层·谓词)②专长在非 Boss 渠道只给门票(一层·分类形态)。**注意**:属性值提升/资源不出现在 Boss 渠道**不是约束**——那是渠道轴的定位(Boss 是专长独占渠道),不属默认原则管辖。**「计价物不自售」形式上确是在白名单外加的一道过滤(用户质疑成立),与死特判的区别在于把枚举例外变成计算谓词** + axes: 两根互不决定的轴——**分类轴**(给的是什么)与**渠道轴**(从哪来)。一个奇物属于哪个分类不决定它从哪个渠道来;交叉关系由 design/gdd/systems/冒险循环/奇物.md 第 2 节开关表定死 + categories: 封闭三类 {专长 Feat, 属性值提升 ASI, 资源}(v2.7 定名,**去「类」字后缀**——此前为描述式叫法「机制类 / 属性提升类 / 资源类」,非专名;用户 v1.1 原话即「属性提升(ASI)」与「专长」,v1.1 落文时被加后缀而退化。v2.0 起为三类、v1.1 曾用两类、v1.0 曾用 {rule, stat},均已作废)。 + hierarchy: 玩家可见的三层(用户 2026-10-05 拍板)——一层总称「奇物」/二层三个分类/三层具体单件(如 奥术余烬、贯穿射击)。**命名与呈现是两件事**:分类各有一个正式专名,文档、代码词族、帮百科/成就名/效果描述的指代一律用它;但卡面与详情页只写单件名与效果、不附带分类(呈现面归 battle.md / node-reward.md 裁决,本条目不预断)专长(Feat)——在结算管线某个挂点上给自己加一条规则,同标签持有项数达阈值时质变,事实源 relics.tres;属性值提升(ASI)——抬高生命上限 / AC / 攻击三轴基础值,进冒险加算区,事实源 adventure.tres;资源——给"可用的量",不抬高战斗属性也不改规则:行动点上限 / 刷新次数 / 金币 / 回复,不进加算区、多数不进持有集,事实源 adventure.tres + scope: 作用对象 = 角色本人与其参与的结算(不改敌人、不改棋盘生成、不改关卡内容);**例外**——刷新次数作用在三选一界面而非角色身上,不进加算区;时间范围 = 整局冒险,专长与属性值提升跨关携带、关间不清零,金币与回复即时兑付;归属范围 = 不进账号永久进度,不带到下一次冒险 + lifecycle: 候选池构建(冒险开局一次)→ 在渠道上出现(三选一形式)→ 选定(自池中剔除不再复现;选到「专长获取」时立刻再开一次专长 N 选一)→ 持有生效或即时兑付 → 冒险以任一结局收束时整集清零;断点记录持有集与剩余候选池 + acquisition: 三条渠道的**目标分工(交叉开关,v2.2 收口)**——专长:主渠道=**关底 Boss 击败=通过这一关**(**唯一直接给的渠道**;不新增节点类型、挂 Boss 节点兑付面;末关的 Boss 击败后不给——无后续关卡可消费)。**兑付频率**:奇物不是打一场战斗给一份,关内普通战斗节点不给任何奇物,一关之内只兑付一次(奖励节点与商店同理,各节点各自兑付),奖励节点与商店**只给「专长获取」门票**——**拿到即开、不可囤积**,不进持有集(选中/买下同一时刻开专长三选一;可囤积会让玩家无限推迟关键决策,且把持有物语义从后门放回)。门票归专长(给的是一件以前不会的事,只是把选择推迟)。罕见**只在概率不在价格**,一局限购一次,**计步保底**:连续 5 次三选一展示未出现→第 6 次必出(计数=展示次数、刷新重展计入、奖励节点与商店共享、触发清零、限购用满后不再触发);属性值提升:奖励节点 + 商店(口径「训练」);资源:奖励节点 + 商店(**金币除外、回复在内**);后两类均不出现在 Boss 渠道。形状=「一块独占 + 两块并行」,专长靠打赢、其余靠抽取与购买。**默认原则**:除已登记的特殊规则外,分类内的东西都要在它该出现的渠道池子里——任何不出现都须登记理由**现行实现三渠道共用同一候选池、三类混编**,分工尚未实施,登记于 06-待办清单 BD 分层条目 + boundary: 判据走生命周期——**一次冒险内获得、冒险收束即清零的是奇物;跨冒险跟着你走的是魔法道具**。奇物永不进同调位,魔法道具永不进当局随机渠道;与元进度天赋树两层互不代位 + data_sources: relics.tres(专长定义行)/ adventure.tres(属性值提升与资源的种类配额与值)/ shop.tres(货架取舍) + open_questions: ①类内异质性已登记——金币与回复是即时兑付、不进持有集不持续生效,与行动点上限/刷新次数生命周期不同,靠这条描述把"资源"从泛用词收回到本类定义内;②专长门票尚未入表(出现概率/配额/限购次数/保底阈值四参数均无事实源);③确定性渠道一局两次专长 vs 档位阈值(同标签 ≥2 档一 / ≥4 档二)——**档二在三关结构下几乎不可达**,用户定延后复裁(触发=第四关内容批后实测);④charge 标签仅 3 件、永远达不到档二(数据层缺陷,独立登记,勿被上条盖掉);⑤断点存档键 5 个(bonus_deck / bonus_taken / bonus_pending / bonus_result / bonus_aux_carry)是否随存档版本迁移换名待裁 + naming_note: 2026-10-05 命名统一 + 两次重构——此前按内部分类被叫成三个名字(规则类称「流派件」、属性类称「数值件」、界面称「本关强化」),v1.0 统一为「特性」,v2.0 改名为「奖励」,v2.4 定名为「奇物」(因筐里也装金币这类一次性兑付物,"自身提升 vs 持有物"已切不开,判据改由生命周期承担)。v2.5 第三类定名为「资源」(用户拍板)。**v2.7 三个子节点全部正式定名、去「类」字后缀**:专长(Feat)/ 属性值提升(ASI)/ 资源——此前是描述式叫法不是专名。**代码侧三套词族均尚未对齐**:`feature_*` → `curio_*`(103 处,顶层总称)、`relic_*` → `feat_*`(162 处,专长分类的词族——v2.7 定名后顶层与内层分类各有各的词族)、运行层 `bonus_*` → `curio_*`(160 处),属临时态,登记于 06-待办清单,须在可跑冒烟批次收口 + referenced_by: [冒险结构, 关卡节点地图, 战斗结算, 行动经济, 地形变异, HUD框架, 魔法道具, 元进度, 数据配置] + - name: adventure_table type: schema_data owner: design/gdd/systems/冒险循环/冒险结构.md @@ -594,11 +612,12 @@ entities: fields: | 退役两字段(迭代 10 奖励重构批,2026-09-30 用户拍板):level_clear_hp_bonus(「血回满+上限提升」件随大奖励三件套退役——回血改 clear_heal_pct 部分回血、上限提升改三选一件值列)、keystone_per_level(钥石退役出大奖励改 Boss/精英击杀掉落)。 clear_heal_pct: int [0,100](knob 默认 20——非末关通关部分回血回复生效上限的百分比,封顶上限不回满、满血回 0 合法;难度上压方向,带重扫义务归 难度曲线与Boss) - bonus_attack_flat / bonus_max_hp_flat / bonus_armor_flat: int [0,999](三选一属性件兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) - bonus_gp_amount: int [0,999](GP 袋件定额入钱包);bonus_ap_flat: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](秘宝件授予件数) + **2026-10-05 命名统一批**:本表的属性值提升奇物字段与常量整体换名(旧 → 新)——BONUS_IDS → FEATURE_KINDS、bonus_token_count() → feature_quota()、bonus_value() → feature_value()、bonus_candidate_count → feature_candidate_count、token_{kind}_{tier} → feature_quota_{kind}_{tier}、bonus_*_flat/_amount(_large) → feature_value_{kind}_{tier};值零变更(句柄改称不改数),断点附随键名沿用历史形态不动(存档兼容)。换名动因见 curio 条目(v2.0 顶层改名为「奇物」)。 + feature_value_attack_common / feature_value_max_hp_common / feature_value_armor_common: int [0,999](三选一属性值提升奇物兑付值——加算区攻击/生命上限/护甲轴累加,经覆盖值通道;值锚与上调约束归 难度曲线与Boss) + feature_value_gp_common: int [0,999](GP 袋件定额入钱包);feature_value_ap_rarest: int [0,10](AP 件每场战斗首轮行动点基线增量);bonus_aux_item_count: int [1,9](魔法道具件授予件数) ~~bonus_weight_*(E-S 加权洗牌权重族)~~ / ~~bonus_cap_*(种类次数上限族)~~:**v2.2 令牌池换代退役(迭代 12 TP0——2026-10-03 追认 b 实施批;洗牌改令牌 Fisher-Yates、池消耗即上限)** - token_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) - bonus_attack_flat_large / bonus_max_hp_flat_large / bonus_armor_flat_large / bonus_gp_amount_large: int [0,999](稀有档大数值对——+2/+10/+2/50);bonus_heal_flat: int [0,999](恢复件 +6 当即回血——新入池种类 rare 档);MC 策略 316-f(autoplay 1 级最稀有/2 级最左)随批落地 + feature_quota_{kind}_{tier}: int [0,99](**TP0 令牌配额族**——kind×tier 计数:attack 18/5 · max_hp 17/5 · armor 17/5 · gp 18/5 · heal 0/5 · ap 0/0/3〔common/rare/rarest〕;未列组合=0;档位结构锚 70/25/3=98 张入 schema validate 硬断言〔罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项〕) + feature_value_attack_rare / feature_value_max_hp_rare / feature_value_armor_rare / feature_value_gp_rare: int [0,999](稀有档大数值对——+2/+10/+2/50);feature_value_heal_rare: int [0,999](恢复件 +6 当即回血——新入池种类 rare 档);MC 策略 316-f(autoplay 1 级最稀有/2 级最左)随批落地 transitional_sync_slots: int [0,9](同调位过渡读数源,默认 1——道具持有上限;正主 = attunement_growth.tres 里程碑谓词表,同调实施批落地后切换读数源) mvp_content: 单行全局默认值即 MVP 行(provisional 归 曲线调参批——迭代 10 扩列批注) extension_reserve: 大奖励形态扩列位已消费(迭代 10 奖励重构批落地三选一/攻击型——本键使命完成退役;冒险结构 OQ2 收口) diff --git a/design/research/art-bible-ux-review-2026-09-29.md b/design/research/art-bible-ux-review-2026-09-29.md deleted file mode 100644 index 35450620..00000000 --- a/design/research/art-bible-ux-review-2026-09-29.md +++ /dev/null @@ -1,130 +0,0 @@ -# 美术圣经审视报告:界面丑的根因是否在圣经本身(ux-designer 方法) - -- **日期**:2026-09-29 · **方法**:ux-designer skill 流程 + WCAG/字体/色彩外部规范对照 + 三组图像实证(现行截图 `artwork/ui-redesign-2026-09-29/current/`、严格按圣经制作的 mockup v2 `artwork/ui-redesign-2026-09-29/mockup/`、圣经点名参考图 `design/art/references/`) -- **起因**:用户假设——「界面丑的根因在美术圣经,它的指导就是错的,所以不管怎么生成画面都丑」 -- **审查对象**:`design/art/art-bible.md` v2.15(499 行全文逐条核) - ---- - -## 判决(一句话) - -**假设成立,但有精确边界:圣经有六条立法直接致丑、一处结构性缺失(全文档只规定"不许怎么丑",从未定义"什么是美");同时它的信息层骨架(图标键契约/色弱双通道/语义色思想/情绪能量谱)是真资产,不能连孩子一起倒掉。** 决定性证据:同日交付的 mockup v2 严格 100% 遵守圣经(对比度全达标、冻结件全保留),成品仍然是一个棕米单色的电子表格,不像游戏——执行无误,丑在图纸。 - ---- - -## 决定性对照:守法成品 vs 点名参考 - -| | mockup v2(100% 按圣经) | Moonlighter(圣经 §9.1 点名要学) | -|---|---|---| -| 色相 | 全屏棕-米一族,彩色只剩指甲盖大的语义点 | 紫墙、青地板、红伤害数字、多彩敌人同屏共存 | -| 明暗 | 无明暗层次(圣经 §2 禁止),全屏同一明度带,糊 | 亮地板 / 黑洞深渊 / 发光道具三档明度,纵深明确 | -| 数字呈现 | 白色便签矩阵贴在格子上(圣经原则二色牌制) | 数字/文字直接融进世界,靠环境明度承载 | -| 角色存在感 | 48px 立绘贴在平色底上,无舞台无光影 | 角色占屏高约 15%,有光照、有投影、有环境烘托 | -| 质感 | 纯色平板 UI(程序化占位即现状) | 每个面板有材质、描边、厚度 | - -讽刺实证:现行战斗屏恰恰是**违反**圣经(下半屏深棕黑、明度割裂)才有了点对比;mockup v2 **遵守**圣经后全屏统一成米棕——违反了丑,遵守了也丑。两头堵的条款,问题在立法不在执行。 - ---- - -## 病根清单(按杀伤力排序,条款引用 + 实证 + 机制) - -### 病根 1|棕-米独裁:语义色纪律错把"色彩"判给了信息层独占 - -- **条款**:§4.2「红只说危险 / 金只说收益 / 蓝只说己方 / 绿只说自然生机 / 紫赤 Boss 独占 / HSV 300°–345° 全场禁入带」+ §4.4/§7.2「UI 不新增语义色,数据只穿墨」+ §6.1 背景「低对比自然后退」(只说不能怎样)。 -- **实证**:mockup v2 全屏色相跨度约 30°(棕到米);Moonlighter 同屏色相跨 200°+。ux-designer 色彩参考里一个健康游戏 UI 需 10+ 功能色(health/mana/XP/success/warning/info/selected/hover/disabled),圣经色域给 UI 只剩米色、墨色、棕石色。 -- **机制**:立法初衷(信息不被色彩噪音淹没)正确,但手段是**把色相本身收缴为信息层专属资源**,世界侧(环境/背景/装饰)被剥夺用色权。真实游戏的做法相反:世界侧色彩丰富但低饱和后退,信息侧靠明度/位置/饱和突出——"防抢焦"是焦点预算(§3.4)的职责,"防语义混淆"才是色彩纪律的职责,圣经让色彩纪律越界把两件事都管了,管死了世界。 - -### 病根 2|明度恒定硬规则:阉割了光影这个最强层次工具 - -- **条款**:§2「全作所有状态共用同一基准明度,禁止以变亮/变暗作为情绪表达或状态区分手段;状态区分只允许色相、饱和、运动、元素」。 -- **实证**:Moonlighter 的洞穴感几乎全部来自明度(亮地板/暗深渊/发光体)。圣经禁掉明度后,画面只剩色相和饱和两个弱手段造层次,结果是平、灰、糊。 -- **机制**:立法动机对头——§9.2 反 Darkest Dungeon 式压暗、roguelike 失败重开"世界无光暗记忆",这些反对的是**用变暗表达情绪/惩罚**,不是明度本身。正确的立法是「明度变化禁用于状态/情绪表达,允许用于空间纵深与光照层次」(砖缘厚度立体面已开了这个先例——§3.2 明确"形体塑造不受明度恒定约束",等于承认了例外必要,但没有把例外上升为通则)。 -- **附带伤害**:病根 3 的直接成因。 - -### 病根 3|数字色牌制:用 UI 补丁解决美术问题,"上世纪扫雷"观感的直接来源 - -- **条款**:原则二「明亮为皮,色牌为骨」——数字一律垫 #F5EAD3 素色直角小牌,「格底不再承担数字对比义务」。 -- **实证**:现行战斗屏与 mockup v2 的棋盘 = 几十个白色便签贴满深色土,这就是"Windows 扫雷/电子表格"观感的来源。ITB(圣经自己的参考)的数字直接画在格子上,靠格子明度设计承载可读性。 -- **机制**:连环债——明度恒定(病根 2)→ 格底不能压暗 → 深色数字在亮底上对比设计空间被锁死 → 只能垫牌。色牌解决了 WCAG(12:1),制造了碎片化。它把"格子美术与数字协调设计"这条正路立法放弃了。 - -### 病根 4|结构性缺失:一份"禁令文档",从未定义目标 - -- **实证**:全文"禁/不得"出现 40+ 次,全部是过程约束;没有一个章节描述"整屏最终画面应该是什么样"。§9.1 取/弃表把三款参考的**功能骨架**取了(ITB 信息分层/Moonlighter 砖缝/Peglin 明快色彩),把它们的**表现魅力**弃了(ITB 的 HUD 材质工艺、Moonlighter 的光照、Peglin 的角色体积魅力——这些恰恰是它们好看的原因)。§1.4 样张验收只验单格,**整屏构图从未有过验收闸**(战斗一屏样张自立项起挂账至今)。 -- **机制**:约束的交集只能收敛出"不违规的安全区",收敛不出"美"。所有生图/执行只能在安全区里打转——这就是"不管怎么生成都丑"的文档级解释。 - -### 病根 5|装饰配额制:「约 2 种、纹理级、低对比」把棋盘判了无期徒刑 - -- **条款**:§1.2 原则三/§3.2——装饰变体约 2 种、一律纹理级、禁物件级(巨石/小石堆)、低对比自然后退。 -- **实证**:10×10 格 100 格几乎全同,大面积重复。ITB 地表耐看恰因每格有物件级变化(石块/草丛/水渍/裂缝)。 -- **机制**:立法初衷(装饰不得伪装逻辑差异、零信息纪律)正确;正确手段不是禁物件级,而是「物件级装饰必须有专属形状家族、与信息元素(数字/小人/旗/纹样)形状语言隔离」——焦点预算管得了"抢读",不需要灭绝装饰。 - -### 病根 6|舞台与体量缺失:角色没有存在感 - -- **条款**:§8.2 主角 48×72 / 敌立绘 48/64/96px 档;§6.1 对 B 区背景只有负面约束(不得抢焦),无正面目标(舞台是什么)。 -- **实证**:1280×800 屏上主角占屏高 9%,周围无任何环境烘托,像贴纸;Moonlighter 约 15% 且有光照投影。mockup v2 已尽力加石台名牌,仍被 48px 资产上限锁死。 - -### 病根 7|UI 全局可读性盲区:圣经只管了格子里的数字 - -- **条款**:棋盘数字 ≥4.5:1 硬指标(§4.1)做得很好;但**全局 UI 文字对比度无硬指标**(§7.2 双色墨制只覆盖关卡屏暗底件),字号下限 13/14px 低于 ux-designer PC 规范(1080p body ≥16px/tooltip ≥14px;本作 1280×800 更低分辨率同字号实际更小),「像素字不作字重区分」自断一层级手段。 -- **实证**:现行 8 处文字实测 4 处不达标(C 区属性行 1.31:1、菜单说明 2.58:1、副标题 3.54:1、放弃冒险 4.42:1 擦线)——全部落在圣经没立规矩的自由发挥区。 - -### 病根 8(执行层,非圣经立法):程序化占位被当成了现状 - -- §7.5/§6.2 允许「现行程序化占位不空窗」,纯色平板 UI 遂成事实标准。panel_stone/button_stone 资产已在包里未接线(mockup v2 已验证可用)。圣经缺一条「占位=临时态,终稿闸=整屏样张」的收口规则——与病根 4 同源。 - ---- - -## 强项保留清单(推翻圣经时这些不能倒) - -1. **图标键契约 §4.6**:键=数据表主键、身份=形状纹样、极性=金/红色相槽+满缺框形——工程与可读性双扎实,ux-designer 规范级。 -2. **色弱双通道纪律 §4.5**:九对语义逐对点名冗余通道,比外部规范还细。 -3. **语义色思想内核**:红=危险/金=收益/蓝=己方的分配本身没问题——病在"只说 X"的独占式立法收缴了世界用色,不在分配本身。 -4. **§2 情绪能量谱**(八状态 × 0–10 能量 × 主情绪/承载元素):框架是真资产,只需删掉"明度恒定"这个手段枷锁。 -5. **形状语言总纲**「圆角为世、直线为信」+ **焦点预算 §3.4**:一致的形式语法,问题只是焦点预算被明度恒定削弱了手段。 -6. **明度恒定的立法动机**(反压抑、失败不惩罚、非暗黑风基调):动机保留,手段换掉。 - ---- - -## 修法备选案(呈报拍板;每案代价与联动如实列) - -### 案 A|最小修(不动 §2,补盲区) -改 4 处:① 语义色"全场独占"改"信息层独占",世界侧色相解禁但低饱和(焦点预算接管防抢焦);② 补全局 UI 文字 ≥4.5:1 硬指标;③ 装饰变体解禁物件级(专属形状家族隔离);④ 补整屏样张验收闸。 -- **代价**:小,一周级;冻结件全保留。 -- **局限**:明度恒定还在,光影层次仍然没有;数字色牌还在,白牌矩阵不变。**能改善"单色世界",改善不了"平"。** - -### 案 B|中修(推荐) -在案 A 基础上加三条: -1. **§2 明度恒定改「明度分层」**:明度禁用于状态/情绪表达(立法初衷保留),允许用于空间纵深与光照——给三档明度带(世界底层/世界中层/信息面层),砖缘立体面既有例外上升为通则;Darkest Dungeon 式压暗仍在 §9.2 反面清单。 -2. **数字色牌降级为后备手段**:格底明度分档(未开亮/已开暗一档差)承载数字对比,色牌只在复杂格底启用;需重跑 §1.4 样张(机检断言改造,工作量已知)。 -3. **§8.2 资产档位上调评估**:主角/敌立绘升一档(如 64×96/96 档),配合 B 区舞台规范(光照/投影/地台进 §6.1 正面目标)。 -- **代价**:中——§1.4 样张重跑、棋盘渲染参数调整、部分冻结件(色牌形制/样张 v2 四冻结之①④)需解冻重冻;ui_kit 色板批联动。 -- **收益**:画面获得光影层次 + 色相解放 + 去白牌,直指三大观感根因。 - -### 案 C|推翻重写 -以 Moonlighter 式光照像素地牢为目标重写圣经。 -- **代价**:大——全部样张、四冻结、21 枚瓦片资产、色板定稿作废重来;前期美术投入沉没。 -- **何时才值**:若用户认为"明快暖石地牢"这个风格基调本身也不要了。本报告判断:基调没错(Moonlighter 同基调且好看),错的是手段,**故不推荐 C**。 - -### 不在三案内的独立小修(随任一案附带) -- 字号下限对齐 ux-designer PC 规范(body ≥16px/tooltip ≥14px @1280×800);解禁字重两档。 -- 「占位=临时态,整屏样张=终稿闸」收口条款(治病根 8)。 - ---- - -## 待拍板清单(登记口径:06-待办清单,待用户逐条表态) - -1. 三案选型(A / B / C,或 B 的子集勾选)。 -2. 若选 B:§1.4 样张重跑的闸形(沿用机检闸形 A 还是先目检方向稿)。 -3. 若选 B:数字色牌退役范围(全退 / 复杂格底后备)。 -4. 资产档位上调是否本批做(牵涉在制敌立绘/主角三态资产返工面)。 -5. 本报告结论是否收编入 art-bible 版本历史(v3.0 修订立项)。 - ---- - -## 证据索引 - -- 现行截图三屏:`artwork/ui-redesign-2026-09-29/current/`(战斗屏上下明度割裂、菜单文字 2.58:1 实证) -- mockup v2 三屏:`artwork/ui-redesign-2026-09-29/mockup/`(严格守法成品实证) -- 对比度实测数据:`artwork/ui-redesign-2026-09-29/对比报告.md` §一(8 处 4 处不达标,最低 1.31:1) -- 参考图:`design/art/references/moonlighter_1.jpg`(色相跨域/明度层次对照) -- 外部规范:ux-designer skill `references/color-palettes.md`(WCAG 对比度/功能色表)、`references/font-guidelines.md`(PC 字号下限) diff --git a/design/research/perfect-l1-lever-proposal-2026-09-29.md b/design/research/perfect-l1-lever-proposal-2026-09-29.md deleted file mode 100644 index 4fc2418b..00000000 --- a/design/research/perfect-l1-lever-proposal-2026-09-29.md +++ /dev/null @@ -1,33 +0,0 @@ -# 完美 L1 加难杠杆设计提案(M-3 迭代 5 返工批 T-B,2026-09-29) - -- **裁决来源**:U2 人闸 a 项推翻丙裁**甲=新杠杆授权**;待批点乙两子路按推荐取 **② L1 专属加难内容**(①敌方攻击基线上探会连坐普通档 L1——其落带余量仅 ~15 点,定向性差)。 -- **本提案状态**:**待用户批准**(行值不在代拍板白名单——批准前零投值)。 -- **目标**:完美档 L1 条件通关率 85–89% → 带内 [35,65];普通档 L1 保持带内 [35,55](现行读数 46–50%,余量 ~11–15 点)。 - -## 一、设计空间复盘(T3 扫描结论为底) - -完美 L1 的强势来源 = 10×10 板形 × 完美画像挖掘效率 × 奖励经济学,不在已注册旋钮的已扫量程内。L1 定向杠杆实测:荆棘 +1 = 完美 −7pp/普通 −2pp(**定向比 3.5:1,全网格最优**);酋长加血对完美无感(L1 Boss 胜率 98%);群战上探被校验域封死。 - -## 二、推荐方案:阶段一 = 荆棘 effect_value 扫描外延(零新注册) - -**关键发现**:荆棘(thorn)为 L1 dungeon 池**独占**变异类型(L2/L3 池无 thorn)——effect_value 天然就是 L1 专属杠杆,且 registry 域为 [1,9]、现行值 1。T3 扫描只试了 1→2(「弱」的结论是相对 −24pp 的目标缺口,不是旋钮本身弱)。 - -- **投值候选**:effect_value 1→3(预估完美 −14pp → ~75%,可能仍差带缘)或 1→4(预估完美 −21pp → ~68%,贴带上缘;普通 L1 预估 −4~−6pp → 44–46% 仍在带)。 -- **线性外推警示**:−7pp/格 的斜率按踩雷频次≈常数假设;实际挖掘策略会自适应(完美画像可能少开低价值邻格),真实读数须配对种子扫描实测,外推仅供立项参考。 -- **配套义务**:荆棘踩雷直伤加大后,与「挖掘风险不等式」风险端定价联动(该挂账本来就在册——风险端定价不足,本投值顺向收窄缺口);恢复数学(恢复概率 1/4 · 恢复量 1/6)不动。 -- **成本**:一次配对种子 OFAT + 组合扫描(对 C1+v1 现行表态),~1 小时;若 1→4 入带即收口,**零新内容、零新注册**。 - -## 三、备用方案:阶段二 = 新增 L1 专属变异类型(仅当阶段一不够) - -若荆棘拉到域内合理上限(建议 ≤5,超过后单格 5 伤在小血量池手感过罚)仍不达带,再立新杠杆——候选形态:**「塌顶」**(rockfall 的 L1 姊妹型:flat_damage on_open,dungeon 池新行,走杠杆注册+类型定稿批流程)。成本 = 新变异类型批(表行+呈现+反制预留),~1 个内容批。 - -## 四、否决面(不予推荐) - -- 敌方攻击基线上探(子路①):全敌轴,普通 L1 连坐超余量,且与 AC v1 重投互相叠加难以归因。 -- L1 Boss 血量/数量:完美对酋长胜率 98%,血量轴已证无感。 -- 板形回退(L1 恢复混编板):推翻棋盘统一批裁决,代价外溢。 - -## 五、批准点 - -1. 阶段一荆棘外延是否批准(批准即跑扫描,入带行值随批落表+registry 同步); -2. 若阶段一不足,阶段二「塌顶」是否立项(或接受完美 L1 残余越带挂账——届时带缺口数字已知,可再次三选一)。 diff --git a/design/research/proposal-magic-item-attunement-2026-09-22.md b/design/research/proposal-magic-item-attunement-2026-09-22.md deleted file mode 100644 index beb2f59a..00000000 --- a/design/research/proposal-magic-item-attunement-2026-09-22.md +++ /dev/null @@ -1,182 +0,0 @@ -# 提案:魔法道具重设计批定稿(局外同调机制件) - -> **⚠ 名称已变更(2026-10-05,用户拍板)**:本文定稿时系统名为「魔法道具」,该名**已改为「秘宝」**。原因:「魔法」一词在本作已被征用为敌方侧伤害/护甲语汇(`魔法矢` / `魔法族` / `魔法护甲`),「魔法道具」易被读成"魔法属性的道具"。**本文正文按历史定稿原样保留旧名**(改写定稿会破坏提案的留痕价值),现行正主 = [秘宝](../gdd/systems/排雷循环/秘宝.md)。读本文时「魔法道具」= 现行「秘宝」,机制内容零变更(仅称谓更名,同调位机制名亦保留不变)。 - -> 日期:2026-09-22 -> 性质:定稿提案(只读提案,未动任何 GDD 正文、表与代码;本批只落档设计,实施另行立项) -> 定位一句话:魔法道具从「局内掉落消耗品」重定义为「开局前在营地装配、占同调位、带每冒险充能的机制增强件」——哈迪斯2 塔罗牌 × 灵魂石幸存者天赋 × DND 同调的合体 -> 依据:现行 [秘宝](../gdd/systems/排雷循环/秘宝.md)(v0.4,切片期空内容合法态,六件设计登记在 registry `aux_items`);[元进度](../gdd/systems/跨局循环/元进度.md) v1.3(营地三柜台、道具工坊解锁渠道、Boss 首杀标记位、覆盖值注入通道);[行动经济](../gdd/systems/排雷循环/行动经济.md)(ap_per_round 调参史 8→6、下轮修正队列);[地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md) v0.15(九型字典、reward_roll 流、雷安同池冻结);[06-待办清单](../gdd/06-待办清单.md)「探宝罗盘两方案评估」与「未开格类型微光」条;GP 商店房提案(proposal-gp-shop-room-2026-09-20.md)三件全陈列无刷新裁决;[art-bible](../art/art-bible.md) §4.2/§4.5/§4.6.3(类型微光颜色冲突 T1) -> 行值纪律:本文只给**结构、键形态与候选锚点**;正式行值一律随实施批落表(`attunement_growth.tres` / 道具定义表),数值所有权归[难度曲线与Boss](../gdd/systems/冒险循环/难度曲线与Boss.md),不在此双写 - -## 裁决记录(2026-09-22 用户拍板八条) - -**本节是实施批的设计权威:正文中与该节冲突的表述一律以该节为准。** - -1. **定位**:魔法道具为**局外同调件**;局内**不掉落**任何机制道具。局内即便后续增加掉落,也只是**商店式数值道具**,永不含机制。 -2. **轴归属铁律**:魔法道具**只走机制轴**;数值轴只属于「初始天赋(永久强化·属性锻造)」与「局内增强(GP 商店)」。 -3. **初始同调位 = 0**:开局玩家没有任何魔法道具可用(同调位与道具池同步冷启动)。 -4. **同调位增长来源 = 通关次数 + Boss 击杀数(含重复)**:仅按 Boss 首杀计增长被判太简单,弃用。 -5. **单件占位统一 1 槽**。 -6. **道具形态混合**:被动件与主动充能件并存。 -7. **AP 件做两件**:A 被动限时(前 3 轮每轮 +1 AP,之后失效);B 主动充能(本场战斗开够 N 个安全格,触发一次临时 +AP)。 -8. **类型微光全免费(06 清单「探宝罗盘两方案」取备选方案路线)**:奖励类型预读成为人人免费的基础常显能力,`探宝罗盘`(预读类型)随之**退役**。先按此设计,试玩若 imba 再调。 - -## 0. 一句话结论 - -三轴 doctrine 锁死成长边界:**跨局数值轴 = 属性锻造,局内数值轴 = GP 商店(含未来数值掉落),局外装配的机制轴 = 魔法道具同调**——魔法道具是本作唯一的机制修正来源,永不发裸 flat 数值,触及伤害一律做成靠打好雷图挣来的条件触发;同调位从 0 起步、由「通关次数 + Boss 击杀数」经**数据驱动的里程碑谓词表**增长、硬上限 3,作为机制轴的总功率闸。全部增长条件与解锁条件做成可配置表、可插拔计数源,试玩后改平衡 = 改表不动代码。 - -## 1. 系统定位与边界 - -### 1.1 与现行魔法道具 GDD 的关系:重定义(替换) - -现行 `魔法道具.md` 的全部机制骨架——掉落池获取、关卡域库存、挖掘期主动使用、四步编排、板级叠加层随图消亡——**整体退役**,替换为: - -``` -营地(局外)装配 ──占同调位──▶ 带入冒险 ──被动件整局生效 / 主动件按充能于挖掘期发起──▶ 冒险结束充能归零,装配关系可换 -``` - -从旧设计继承的承重资产(不随骨架退役): - -| 继承项 | 新语义 | -|---|---| -| 真视 ≤3×3 窄域护栏(加载期校验) | 原样保留,探巢摆钟适用 | -| 五维度框架(信息/风险/行动/规划/反制) | 从「掉落自查清单」改「装配池内容自查清单」;类型微光免费后「规划(预读奖励身份)」维度失义,维度表随实施批收缩为 {信息→并入风险、风险(真视)、行动、反制}——具体收缩形态实施批拍板 | -| 不做清单边界锚(允许恢复推理原料,不允许道具替代推理) | 原样保留 | -| 「收益在少赌不在单赌更安全」判读口径 | 原样保留,真视件判读沿用 | -| 零随机、使用不扣 AP、效果即时可见 | 原样保留 | -| 主动件挖掘期发起 + 战斗结算四步编排 | 原样保留给主动充能件(信息类件的板级叠加层机制沿用) | - -### 1.2 三轴 doctrine(裁决记录 1+2 的结晶) - -| 轴 | 载体 | 生命周期 | 内容 | 数值语言 | -|---|---|---|---|---| -| 数值轴·跨局 | 永久强化(属性锻造) | 入存档持久 | flat 攻/血/甲 | flat 整数(已锁) | -| 数值轴·局内 | GP 商店(+ 未来数值掉落位) | 冒险内清零 | flat 攻/血/甲 | flat 整数(已锁) | -| **机制轴·局外装配** | **魔法道具同调(本系统)** | 装配关系跨局、充能每冒险重置 | 循环机制修正、条件触发、信息干预 | **禁 flat 裸数值**(本文立约) | - -三轴互不越界:魔法道具永不发无条件裸数值(否则与两数值轴同源叠爆);数值轴永不改循环机制。**「和永久强化会不会叠太强」的结构性回答**:数值威力仍只在两数值轴上(均已有换算率表带平移建模);机制件给的是选项、容错与能动性,难度带本身按"玩家会好好打"计;机制轴总功率被同调位上限 3 × 每冒险充能双重闸死;实施批验收按 attune=off/on 分层读数(照搬商店分层先例)。 - -## 2. 同调位(Attunement Slots) - -背景口径(DND 式):使用魔法道具需要**同调**——冒险者的心神与遗物共鸣,同调位有限,能同时共鸣的神器就有数。同调位上限 3。 - -| 参数 | 定稿值 | 说明 | -|---|---|---| -| 初始槽数 | **0** | 白板存档无可装(裁决 3)——首件同调位的解锁是玩家第一次「装备上遗物」的高光时刻,首里程碑阈值宜低(表值归调参批) | -| 单件占位 | **1 槽** | 统一,无稀有件多占(裁决 5) | -| 硬上限 | **3** | 表字段 `slot_cap`,调整改表 | -| 增长来源 | **通关次数 + Boss 击杀数(含重复)** | 数据驱动,见 §2.1(裁决 4) | -| 装配时机 | 冒险开始前的营地 | 装配关系入存档持久;跨局可换装 | - -### 2.1 ★ 易改易拓展的增长设计:计数器 + 里程碑谓词表(用户点名要求) - -设计目标:试玩后觉得"太简单/太难",改增长曲线必须是**改表行为**,不是代码行为;想加一种新增长来源,必须是**加枚举 + 加计数器**的增量扩展,不动既有逻辑。 - -**计数源(可扩展封闭枚举,存档逐域记账,`save_file` 新增域)**: - -| 计数键 | 语义 | 事件源 | 现状 | -|---|---|---|---| -| `clear_count` | 累计通关次数(按关卡计,含重复关) | 冒险结构·关卡收束 | 通关次数表**已有**(元进度 v1.3 四件存档义务之一),直接复用 | -| `boss_kill_count` | Boss 击杀总数(**含重复击杀**) | 冒险结构·Boss 击杀事件 | 新增累计计数器(首杀标记位已有,总数另记) | - -预留可插拔位(本期不实现,加行不破坏 schema):`boss_firstkill_count`(由首杀标记位派生)、`adventure_count`、`no_damage_clear_count`、`run_depth_best`。 - -**里程碑表 `attunement_growth.tres`(新建;数值全 provisional 归调参批)**: - -``` -slot_cap = 3 -milestones = [ - # 每行 = 一组 AND 谓词,全部满足即授予 grant 槽;同调位数 = Σ已达成 grant,clamp 到 slot_cap - { id = "m1"; grant = 1; requires = [ ("clear_count", 1) ] }, - { id = "m2"; grant = 1; requires = [ ("boss_kill_count", 3) ] }, - { id = "m3"; grant = 1; requires = [ ("clear_count", 3), ("boss_kill_count", 6) ] }, -] -``` - -- `requires` 为 (计数键, 阈值) 对的 AND 列表——谓词形态,schema 校验计数键 ∈ 封闭枚举、阈值 [1,999]、Σgrant ≤ slot_cap;OR/复合需求出现时升级谓词形态走本文修订。 -- **试玩后调平衡的全部动作都落在表上**:嫌 m2 太简单→阈值 3→8;想换成首杀口径→计数键改 `boss_firstkill_count`;想全换通关口径→改行;想开第 4 槽→`slot_cap` 3→4 加一行里程碑。零代码改动。 -- 行示例中的阈值是**形态示意不是候选值**,正式行值随实施批投表。 - -**道具解锁条件同用谓词形态**(§3)——两套条件共享一个谓词 schema 与计数源,一处扩展两处受益。 - -### 2.2 获取条件(按用户指示先放宽) - -**试玩/实施首批:全部道具默认已解锁**(解锁表全达成或直读"全解锁"开关),聚焦验证机制手感。正式态渠道归[元进度](../gdd/systems/跨局循环/元进度.md)道具工坊柜台:解锁条件从"通关次数达标"起步、可扩任意计数键,走同一谓词表(每件道具一行 `unlock_requires`),逐件可调。 - -## 3. 道具目录(机制轴八件 + 一件退役) - -> 形态:被动 = 装上整局生效;主动 = 每冒险 N 次充能,挖掘期发起(冒险结束充能归零,装配关系保留)。数值为候选锚点,正式值归调参批。 - -| 轴 | 道具 | 形态 | 效果 | 设计意图 / 风险注记 | -|---|---|---|---|---| -| 伤害 | **淬毒刃纹** | 被动 | 对被克制敌人的穿刺/魔法直伤 +N | 条件触发、复用克制矩阵,引导"读敌拍板"选装;目录中最接近数值的一件,试玩若与两数值轴体感叠爆,改造为纯触发件(见 §8) | -| 伤害 | **标中殉爆** | 被动 | 每标中一面旗,全体存活敌吃 N 点群伤 | 把正确推理直接兑成伤害;与标中既有正向兑付叠加的上限归效果对照表对账 | -| 伤害 | **惊巢反制** | 被动 | 挖开雷格时该次惩罚减半,并反弹 N 点伤害 | 风险对冲件——盲赌区的保险,警惕其把"踩雷学费"变得无所谓(调 N 收紧) | -| 雷图·AP | **工兵晨令**(裁决 7-A) | 被动·限时 | 每场战斗**前 3 轮**每轮 +1 AP,之后失效 | 只 buff 开局抢速段,不做常驻 AP 加量——避开 ap_per_round 平衡阀门(8→6 调参史在案) | -| 雷图·AP | **掘进蓄能**(裁决 7-B) | 主动·充能 | 本场战斗每开够 N 个安全格积 1 点,可发起一次 +临时 AP(当轮生效) | 充能靠打循环挣——AP 增益从"白给"变"劳动所得",守五条经济契约不破口 | -| 雷图·真视 | **探巢摆钟** | 主动·充能 | 3×3 窗口标出惩罚格(真视窄域护栏 ≤3×3 原样) | **类型微光揭示奖励类型、不揭示雷位(雷安同池下类型≠危险性),真视价值独立成立** | -| 雷图·炸格 | **爆破工兵包** | 主动·充能 | 移除指定格(含雷格):不兑付奖励、不触发惩罚、不计清图进度 | **中立移除格态**是对排雷玩法/战斗结算/清图判定的增补实现面,改动最重——实施前先出影响评估(待办 C) | -| 雷图·概率 | **偏运硬币** | 被动 | 装板摇号时稀有正向资源(heal/gp/pierce/magic)权重 +N | 只动池内权重、雷安仍同池同分布,不破冻结项;属玩家侧杠杆,禁独立调参,带分层验收随批 | - -**退役**:`探宝罗盘`(预读奖励身份)——裁决 8 类型微光全免费后失义,从六件登记中除名。`工兵令`/`显影尘`/`地穴全图卷`的旧效果定位随本批重设计整体并入或除名,实施批在 registry `aux_items` 重构时逐件销账。 - -## 4. 使用限制(三层闸) - -| 闸 | 限什么 | 载体 | -|---|---|---| -| 同调位 | 一次冒险**能带几件** | `attunement_growth.tres` 里程碑表 + `slot_cap` | -| 每冒险充能 | 主动件一次冒险**能用几次** | 道具定义表 `charges_per_adventure`,冒险开始重置 | -| 窄域与合法性护栏 | 单次使用**能照多大、什么目标算数** | ≤3×3 真视校验(加载期致命)、零信息不消耗、边缘交集受理——三件旧裁定原样继承 | - -成本语言变更:旧设计"成本在获取时已付(来源格没出战斗奖励)"随掉落退役而作废;新成本 = **机会成本(3 个槽位你带哪 3 件)+ 充能节奏(这几次干预花在哪张图上)**。 - -## 5. 商店刷新件的去留(裁决遗留开放项) - -GP 商店现行裁决为"三件全陈列、无刷新、无三选一"(2026-09-20)。**商旅信物类(商店房 +1 免费刷新 / 折扣)与该校裁决正面冲突,本批目录先不含此件**。解禁路径二选一,留实施批前拍板:① 商店侧开出"道具特权刷新"(机制件是刷新的唯一入口,商店本体维持无刷新);② 改效果为"到店时商品档位 −1 级价 / 折扣",不碰刷新语义。 - -## 6. 实现拆批预估(本文不实施,仅给排期形状) - -| 集 | 内容 | 落点 | -|---|---|---| -| A 表与 schema | `attunement_growth.tres` 新建 + 谓词 schema;道具定义表重构(形态/充能/占位/解锁谓词行);registry `aux_items` 重构 + `attunement_slots` 新条目 | `data/tables/` + `design/registry/entities.yaml` | -| B 存档与账本 | `save_file` 新增:装配关系、同调位里程碑达成态(或纯派生)、`boss_kill_count`、主动件充能余量;`clear_count` 复用现有表 | 存档序列化 + 元进度账本服务邻接 | -| C 运行期 | 营地装配覆盖层(局外入口);被动件注入通道(沿用 `hero_override`/追加-替换集合语义);主动件挖掘期发起编排(复用旧四步受理)与充能扣减;八件效果各自接入点(淬毒→克制结算、殉爆→旗判定、晨令/蓄能→`queue_ap_delta`/开轮兑现、摆钟→叠加层、炸格→待办 C 评估、硬币→`reward_roll` 权重投影) | 切片代码 | -| D 验证 | 冒烟:谓词表达成/clamp/装配持久/充能重置;**MC 增 attune=off/on 开关 + 贪心装配画像分层读数**;换算率表新增"同调轴"登记行(行值归曲线调参批) | `smoke/` + `production/qa/` | - -## 7. 验收纪律(分层不混读) - -1. attune=off 续用现行基线带(L1 [35,55] / L2 [25,45]),attune=on 带平移归曲线调参批投值——商店(shop=off/on)分层先例同法。 -2. 机制件不当量进换算率表不豁免:淬毒刃纹/偏运硬币/两件 AP 件各有独立带敏感性,逐件一行、逐行归因(护甲行强条目纪律同族)。 -3. MC 读数 ≥50 distinct seeds;确定性装配画像保证同种子可复现。 -4. 红线复查:真视窄域加载护栏、道具不替代推理(不做清单边界锚)、机制件零无条件 flat 数值(本文 §1.2 立约,schema 校验可查"效果字段无裸属性加项"的形态约束——具体校验设计实施批出)。 - -## 8. 开放问题(留给试玩与实施批,不阻塞落档) - -| # | 问题 | 现状 | -|---|---|---| -| 1 | 淬毒刃纹是否改纯触发件 | 试玩判读:与两数值轴的体感叠爆度 | -| 2 | 被动限时件"前 3 轮"是否扩为可调 knob | 倾向表值化(`effective_rounds = 3`),实施批定 | -| 3 | 反制维度道具(地形变异 counter)目录空位 | 框架契约在案(每变异 ≥1 反制件),首批是否铺量随实施批 | -| 4 | 装配 UI 呈现(营地第四柜台 or 道具工坊扩容) | 归营地/HUD 协作批,本批只锁机制面 | -| 5 | 主动件可否在冒险中途换装 | 默认不可(装配 = 冒险开始前的决定);开放留 Alpha | - -## 9. 连带修订登记面(实施批执行,本文不碰 GDD 正文) - -- `魔法道具.md`:定位重写 + 掉落/库存节退役(本文即其重设计权威底稿) -- `元进度.md`:道具工坊柜台职责改写(解锁→谓词表 + 装配入口);Boss 击杀计数与同调位增长登记 -- `06-待办清单.md`:探宝罗盘两方案条目**收口**(裁决 8:类型微光全免费路线 + 罗盘退役);新增待办 B(商店刷新件依赖,随 §5 开放项销行)、待办 C(炸格件实现影响评估) -- `地图战斗资源.md`:偏运硬币权重投影接口注记(池结构与冻结项零触碰) -- `行动经济.md`:两件 AP 件的兑现通道注记(复用 `queue_ap_delta`/开轮兑现,账本零新机制) -- `05-不做清单.md`:道具替代推理边界锚复核(原样保留即通过) -- registry `entities.yaml`:`aux_items` 重构、`attunement_growth`/`attunement_slots` 新条目、`save_file` 新域注记 -- art-bible T1(类型微光颜色冲突):裁决 8 采"全免费常显"路线,颜色方案冲突面移交美术批裁决(微光机制本体仍卡 art-bible §4.2 语义色条款,**本裁决不解除该冲突**,两线独立推进) - -## 10. 拍板状态 - -八条裁决已于 2026-09-22 全部拍板(见裁决记录),本文自讨论预案转为**定稿提案落档**。实施批待用户另行立项;§5、§8 为明列开放项,不阻塞。 - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1.0 | 2026-09-22 | 提案落档:讨论预案 v2 定稿登记(用户八条拍板随批),未动任何 GDD 正文 | diff --git a/design/research/proposal-playnote-mechanisms-2026-09-30.md b/design/research/proposal-playnote-mechanisms-2026-09-30.md deleted file mode 100644 index ac3717ad..00000000 --- a/design/research/proposal-playnote-mechanisms-2026-09-30.md +++ /dev/null @@ -1,221 +0,0 @@ -# 设计提案:试玩反馈两条机制——信息暴露面(视野/初始展开/魔法提灯)与标雷激励 - -> **性质**:设计提案——只设计与记录,不改任何游戏代码与数据表;全部裁决权留用户,文末以待拍板点清单收尾。 -> **日期**:2026-09-30 -> **修订**:v2(2026-09-30 同日)——题一按用户裁决的微光正确口径(**英雄周围 8 格内的未开格显示类型微光**,非全板常显)重写;v1 中「微光常显与视野限制互斥/不遮微光的视野机制是空操作」结论与案甲1(微光收进灯下)作废——它们建立在「微光全板恒亮」的错误前提上;题二不受影响。 -> **裁决(2026-09-30 用户拍板)**:**题一=案甲视野迷雾立项**——已开格政策=暗淡记忆态(灰显可见);菱形半径起步=与微光环 8 格同圈;魔法提灯=灯甲外扩 +2 格、类型微光不随视野扩;初始展开收窄不配套、后置 Alpha 差异化批窗口。**题二=不动**——各案均不采用,标雷激励问题保留待新方向。概念正主已落 HUD框架「未开格类型微光」「视野迷雾」两节;实施编排归主线 roadmap。 -> **上游触发**:真人试玩反馈(`design/research/playnote.md`)两则: -> ① 「每次开图就是开了片面积,是否有生成图计算如此?」「扫雷棋盘增加视野限制;联动道具『魔法提灯』可以看到所有的棋盘视野,或者视野范围变大」; -> ② 「有什么办法可以让玩家去标雷?比如怪物触发了某个状态,你正常打开安全格,普通伤害会变得非常低,但是标雷可以造成满的甚至是倍率的伤害——这样是否可以让玩家主动去标雷;不然的话玩家肯定尽可能开更多安全格,把资源投入到获得清图奖励的伤害了」。 -> **登记**:[06-待办清单](../gdd/06-待办清单.md) 排雷循环→排雷玩法(题一)、战斗循环→地图战斗资源(题二)各一条。 -> **纪律**:雷安同池为结构冻结项,碰它的案只标「破冻结、随 Alpha 差异化批」,不设计绕行暗改;雷罚直伤三行 4/5/5 为 provisional 且数值挂起归用户自行探讨,本提案零触碰;新机制数值一律小整数加法核(flat 点数档),不提乘法堆叠与连续数值;难度只立在数值包络内,雷格=策略纹理不是难度墙;新信息面逐案回答「在哪展示、为何不重复」;全部行号引用已复核(2026-09-30)。 - ---- - -## 题一:信息暴露面——视野限制、初始展开区收窄、魔法提灯 - -### 0. 先用白话把图景讲清 - -现在的每张雷图,玩家能看到**整张板的样貌**:砖面、装饰、已开格上的数字,全板一目了然。类型信息则只亮在**英雄身边**——8 格内的未开格头顶有微光(这格是增益还是治疗……),走出圈子,身后的微光就熄了。玩家要推理的始终只有一件事:**哪块是雷**。 - -试玩反馈要的是把这个「灯光」逻辑推到底:**菱形灯光之外全是黑暗**——像在洞穴里举灯探索,走到哪照亮到哪,只有移动角色才能继续看见。这是视野迷雾。 - -「开图开一大片」是另一个旋钮:开局白开一大片地(免费、计入清图进度、封锁格无资源),要不要少开点。两个旋钮天然配套——迷雾之下,白开的大片地你也看不见。 - -### 1. 现状事实(全部复核过) - -| # | 事实 | 依据 | -|---|---|---| -| 1 | 棋盘无视野迷雾机制:格态只有已开/未开两态(雾格 2026-09-15 整体退役);**渲染上整张板恒可见**——砖面、装饰、全部已开格的数字不分区内外 | `design/gdd/systems/排雷循环/排雷玩法.md` v0.2 版本行及格态规则 | -| 2 | 未开格类型微光:**英雄周围 8 格内的未开格显示资源类型微光**,随角色移动动态亮灭(2026-09-30 用户裁决口径;概念正主已落 `HUD框架.md`「未开格类型微光」节);只表达类型、不泄雷安;实装状态=呈现契约已定稿(样张 v2 冻结五组色相)、**游戏内待实施批**(呈现层仅接触带微光在跑) | `design/gdd/systems/表现与支撑/HUD框架.md`「未开格类型微光」节;art-bible §4.2 | -| 3 | 初始展开 = 装板期免费翻开出生 3×3 及连通开阔地:免费、计入清图进度、**封锁格恒无格面资源**、装板只发生一次;结构前提校验含「初始展开没有大到直接吞掉全图」;10×10 板均值约 66.5 格(全板占比 48–67% 历史实测) | `排雷玩法.md`「开局初始展开」节;active.md 台账 122 口径 | -| 4 | 移动免费:点任何已开格,小人沿已探明区一次走到位,不花行动点——「走过去看」的成本是一次点击,不是资源 | `排雷玩法.md`「挖、插旗、移动」节 | -| 5 | 先例警示:探宝罗盘(预读 3×3 未开格奖励身份)2026-09-29 退役,理由=类型微光覆盖预读价值(3×3 与英雄周边 8 格同区域)——**该先例与微光正确口径自洽** | 06-待办清单「探宝罗盘效果重定」收口行;`aux_items.tres` loot_compass 行 `retired: true` | -| 6 | 魔法提灯只在美术侧:主角立绘提灯元素;「提灯点亮」呈现解禁候选挂「资产升档重产批」随迭代 9 卡⑤整屏样张闸重议;玩法侧零登记 | 06-待办清单「资产升档重产批」条 | -| 7 | 道具载体现成六行(aux_items.tres):显影尘(deferred)、工兵令、探宝罗盘(retired)、**探巢摆钟(雷位揭示 3×3)**、**地穴全图卷(board_wide 信息位,deferred)**、**爆破工兵包(雷位揭示 3×3 + 行动点)**——「雷在哪」已有两个在售道具,「全板信息」有一个封存位 | `game/data/tables/aux_items.tres` 六行(2026-09-30 复核) | -| 8 | 美术语言已有「灯光边界」世界观:未开格=墙、已开格=挖出的空间、接触带微光=空间的灯光边界——视野迷雾与既有美术叙事同向 | art-bible §2.1、§3.2、§4.2 蓝条 | - -### 2. 备选案全表 - -#### 案甲:视野迷雾(试玩反馈原案) - -机制描述:以角色为中心的菱形可见区;界外一切(含已开格)呈迷雾/黑暗;移动角色逐步照亮。**纯呈现层机制**——游戏数据(已开格、数字真值、清图判定、微光规则)零改动,迷雾只改「画多少」。 - -本案内嵌三个设计决策(子项,不是独立案): - -| 子项 | 选项 | 影响 | -|---|---|---| -| 已开格政策 | a 全黑(要看走回去)/ b 暗淡记忆态(灰显可见)/ c 照常亮只黑未开区 | 决定迷雾吃掉多少推理燃料——远处的**数字**是规划素材;a 是探索感最强、记忆税最重的一档,b 是多数洞穴探索游戏的折中 | -| 菱形半径 | 与微光环(8 格)同圈 / 更大 | 同圈=灯光边界统一;更大=圈外砖可见但不亮类型 | -| 配套收窄 | 是否连初始展开一并收(见 §3) | 迷雾之下白开的地看不见,收窄才让「开图开大片」的体感真正消失 | - -冲击面:**棋盘生成零改动**(纯呈现遮罩);**微光呈现零政策翻转**(本就只在 8 格内亮——迷雾只是把「圈外不亮」扩展成「圈外全黑」,两者天然同边界、零概念冲突);art-bible 需**新增**迷雾渲染规格(黑暗语义、明度分层下的暗区档)——归 art-bible 越权审查后的修订批,属增量不属翻案;**读数机采面预计近中性**(移动免费,策略可达性不变;模拟策略不消费渲染)——验证靠真人试玩。 - -#### 案乙:迷雾 + 收窄初始展开(配套案) - -案甲之上把「白开大片」一并收掉。理由:只上迷雾不收窄,初始展开仍在装板期把大片地开掉(进度被消耗、资源位被封冻),只是玩家看不见——体感问题只解决一半。收窄方案见 §3。实施窗口与读数重测义务随 §3。 - -#### 案丙:维持现状 - -不开迷雾、不收窄。试玩反馈的回答=「开图开大片是计算如此(初始展开=出生 3×3+连通开阔地,含防吞全图的结构前提),不是缺陷;看不看得到是另一道题」。零改动、零读数影响。 - -### 3. 初始展开区收窄方案(若走收窄,无论挂在案乙还是单独走) - -**收窄到什么量级(四档候选)**: - -| 档 | 口径 | 量级感(10×10 为例) | 代价 | -|---|---|---|---| -| 窄① | 只开出生 3×3,不泛洪开阔地 | 9 格(约 9%) | 开局数字极少、开局必猜风险最高;「初始展开恰等」验收线改动最大 | -| 窄② | 泛洪上限 K 格(K=20 / 30 两档候选,触顶即截断) | 20–30%(现状 66.5%) | 截断处半开的走廊观感生硬;K 是新参数 | -| 窄③ | 生成侧密度法:抬升出生区外围雷密度,开阔地自然变小 | 由生成参数涌现,形态自然 | 动棋盘生成参数与可推理性保证的联合检算;P(安全) 分布漂移 | -| 窄④ | 维持现状 | 66.5% | 零 | - -**按板形还是固定值**:推荐按板形参数化——board_gen.tres 每行(板形各异:10×10 小板 / 12×12 Boss / 13×13、14×14 矿城)带自己的展开口径(格数或占比),不做全局一刀切。窄①②是排雷玩法「初始展开恰等」验收线的修订(GDD 修订流程);窄③是棋盘生成参数批。 - -**对清图奖励完成度的影响(必读的连锁账)**:清图=全部安全格开完。初始展开每收窄 1 格,玩家就要实挖 1 格上下(每格 1 行动点);以 10×10 从 66.5 收到 30 计,每板约多挖 36 格 ≈ 多 4–5 轮(现行每轮行动点=8,`action_economy.tres` Package B 首版投值)——**每板战斗拉长三到五成,敌方输出轮次同比增多**。这是包络内的真实加压:关级恒等式(奖励输出占比带)与清图支配性条款须同批重推。对冲面:封锁格同步变少,可挖格资源总量上升(每个非封锁格独立摇类型身份),玩家总收益与总时长同涨——当量对账两头一起算。**全部读数基线作废重测**,与当前 Alpha 读数冻结期正面冲突——实施窗口只能归 Alpha 差异化批或其后,这也是把收窄与「雷格与安全格的资源分布差异化(Alpha 批)」合并立项的天然理由。 - -### 4. 魔法提灯定位 - -迷雾之下提灯生态位直接成立:**灯=视野资源**(玩家原话「可以看到所有的棋盘视野,或者视野范围变大」就是它)。三形态: - -| 形态 | 机制 | 价值锚 | 相容性 | -|---|---|---|---| -| 灯甲·视野扩大(推荐) | 光照圈外扩 +2 格(flat 整数档,键候选 `lantern_radius_bonus`) | 多看远处的已开格数字与板面布局,规划余量变大 | 与微光/探巢摆钟信息面不重叠 | -| 灯乙·全图视野 | 持有即全板可见 | 一步到顶 | **撞地穴全图卷**(board_wide 信息位,deferred 随 Alpha 重定)——两个都留必须分语义,分工归该批一并裁 | -| 灯丙·临时点亮 | 消耗品,点亮指定区域一轮 | 一次性侦察 | **撞显影尘**(info 位,deferred 随 Alpha 重定)——分工归同一批 | - -**微光耦合(本案新增的待拍点)**:视野扩大后,8 格类型微光跟不跟着扩?两种读法都通——微光锚定「可挖域」(不跟扩:灯只照亮砖面与数字,类型先读永远只贴身)或锚定「可见范围」(跟扩:灯下远处未开格也亮类型,提灯变成「远处的类型侦察」)。后者信息增量更大、也更接近原罗盘的生态位,需显式裁决。 - -**载体建议**:aux_items 新行(`dimension_tags` 走 `["info","plan"]` 词表;`effect_kinds` 需新枚举一词如 `vision_expand`)。**登记时机=随显影尘/地穴全图卷的 Alpha 重定批一并**(信息 family 一次定清)。呈现面(提灯点亮画面)已挂「资产升档重产批」随迭代 9 卡⑤样张闸,实装排期两边对齐。 - -**UI 两铁律回答**:迷雾不新增任何信息面板——只改「画多少格」;提灯持有态在战斗屏 C 区道具槽既有位呈现,不重复展示。 - -### 5. 信息经济学分析 - -- **推理价值**:迷雾把「一眼看全图数字」改成「逐区探索」——全局规划(远处哪片数字好)降级,局部推理(数字恒真的邻接 deduction)原样保留。配合**移动免费**,缺的信息一次点击就能补——所以迷雾的成本货币是**注意力与节奏**,不是行动点。这是本案最重要的定性:它是体感/节奏机制,不是经济机制。 -- **挫败感**:风险集中在已开格政策——取「全黑」则玩家必须记路或走回头路(记忆税);「暗淡记忆态」是常见折中。迷雾本身不制造必猜点(可推理性由棋盘生成参数保证,本案不动它们)。 -- **节奏**:迷雾不改挖掘次数,改的是「看」的方式;真正的节奏旋钮是收窄初始展开(§3 的连锁账:每收 1 格 ≈ +1/8 轮,AP=8)。若两案配套,体感变化叠加——试玩另有一条「轮间没有结算过程」的反馈在办,板子拉长会放大该不满,两案实施时互相知会。 - -**验收读数建议**(标注采集面): - -| 读数 | 采集面 | 看什么 | -|---|---|---| -| 每板实际挖掘数 / 每板轮数 / 清图完成度 | 机采 | 收窄档的节奏与支配性代价(条款⑤) | -| 通关率带、每板正向兑付总量 | 机采 | 收窄的包络闭合检查(恒等式带) | -| 已探索区重复访问率(同格二次进入次数) | 机采(可埋点) | 已开格政策的记忆税定量——「全黑」档的直接代价读数 | -| 微光误读率(圈内抽测口径不变) | 机采+样张抽检 | 无障碍底线(微光口径不变,本项目不受迷雾影响) | -| 探索体感/迷雾外信息需求问卷、走回头路主观负担 | **仅真人试玩** | 迷雾的核心验证面(机采近中性) | -| 提灯感知价值 | **仅真人试玩** | 灯甲/乙/丙取舍依据 | - -### 6. 题一待拍板点 - -1. 是否引入视野迷雾(案甲)。 -2. 已开格政策三选:全黑 / 暗淡记忆态 / 照常亮只黑未开区。 -3. 菱形半径口径:与微光环(8 格)同圈,还是更大(几格)。 -4. 是否配套收窄初始展开(案乙)+ §3 四档量级与按板形参数 vs 全局。 -5. 魔法提灯是否立项、形态(灯甲/乙/丙)、**微光是否随视野扩**(锚=可挖域 or 可见范围)、载体时机(建议随 Alpha 信息件重定批)。 -6. art-bible 迷雾渲染规格的修订窗口(与越权审查批衔接:先审后改)。 - ---- - -## 题二:标雷激励机制 - -### 0. 先用白话把图景讲清 - -现在插一面旗花 1 行动点(和挖一格同价)。旗插对了(旗下真是雷):轮末结算时那颗雷被「控制」,兑付它身上摇到的资源类型的一份正向收益(比如增伤、护甲);旗插错了(旗下是安全格):兑付一份负向。另外标中金币雷格还有 GP 入账。听起来有价值,但真玩起来玩家不标——原因是一笔很简单的账:**挖安全格=增益+清图进度(清图奖励是战斗的大头),插旗=只有兑付、没有进度**。行动点永远不够花,全砸开格是理性的。试玩反馈问的正是:能不能给标雷造一个「值得花行动点」的独立理由。 - -有个现成的坑要先指出来:2026-09-19 充能退役批把「标雷攒充能换伤害」这条路整个拆了(三分量伤害模型废弃,主角攻击=唯一基础分量)——任何「标雷充能」形态的方案都是在已退役的轴上盖楼,本题一律不再列。另外「倍率伤害」的原始设想按数值纪律平移:小整数加法核下没有倍率,只有 flat 点数档,下文所有「满的/倍率的」都翻译成 flat 加值。 - -### 1. 现状事实(全部复核过) - -| # | 事实 | 依据 | -|---|---|---| -| 1 | 插旗=标准价 1 行动点(`flag_place_ap_cost=1`,域 [0,8];现行表值:每轮 AP=8、挖=1、刷新门槛=8、每轮刷新≤2 次) | `game/data/tables/action_economy.tres`(2026-09-30 复核;AP=8 为 Package B 首版投值) | -| 2 | 插旗不可逆(2026-09-19 批):无拔旗动作,纠错=直接挖开该格;插雷格再挖开=只受挖雷一层惩罚、标中不发 | `排雷玩法.md` v0.5;`battle_orchestrator.gd:297-305` 四情况注 | -| 3 | 旗判定=每轮轮末逐旗上报;兑付五条硬约束:一次性/当轮结算/资格认雷格实例/不逐轮重复/换图重置——「认雷不认旗」;标中=该雷格资源正向兑付(每雷实例一次),标空=安全格资源负向(每安全格实例一次) | `行动经济.md`「标中旗的兑付约束」;`排雷玩法.md` 旗生命周期节;`battle_orchestrator.gd:69,265-266,524-547`(`_flag_consumed` 以雷格实例为键) | -| 4 | 标中金币雷格=GP 入账;挖开金币安全格亦然 | `battle_orchestrator.gd:442,455`(`_apply_gp_row`) | -| 5 | 锚原则(行动经济条款②):**标中旗的减益档位必须严格高于最低档安全格增益,否则没人愿意插旗**;条款①单一当量(新收益源须入同一对照表);条款⑤清图支配性 | `行动经济.md`「收益直兑与五条经济契约」 | -| 6 | 挖雷负向:极性字典按雷格类型取负向行,直伤只有三行 4/5/5 provisional(heal 反噬 4 / pierce 穿刺陷阱 5 / magic 魔法反噬 5),其余六型零直伤(暴走/失衡/警觉=敌 AC+1/乏力/AP−1/破财);**数值挂起归用户自行探讨,本提案零触碰** | 06-待办清单「雷格负向当量抬升」状态行(2026-09-29 迭代 8 出口闸裁决) | -| 7 | 削弱系现状:同名状态叠层=续时刷新(层数恒 1);sapped(乏力)=hero_offense −25%(percent,既有轴);主角攻击=唯一基础伤害分量(充能退役后) | `增益状态.md`;`battle_orchestrator.gd:614-616` 注 | -| 8 | 任何伤害取值域 [1,+∞)、全来源最小 1 | 伤害下限全来源批(2026-09-20 落籍) | -| 9 | GP/钥石已迁出战斗屏(战斗内 GP 兑付无即时展示位) | 06-待办清单「GP/钥石迁出战斗屏后的展示面接线」 | -| 10 | 战斗核心层零 await 结算契约:玩家动作经批次结算入口、按固定语义序仲裁,轮末兑现 | `排雷玩法.md` 批次仲裁节 | - -### 2. 备选案全表(含淘汰案)与推荐序 - -#### 案B·标中旗追加 flat 直伤——「工兵爆破」(推荐★首选) - -机制描述:旗判定标中时,在既有兑付(该雷格资源正向)之外**追加一笔 flat 直伤 +1**(显示名候选「工兵爆破」,英文键候选 `flag_detonation`),全体存活敌人各一笔(沿 spark_aoe 全体惯例);+1/+2 两档候选留拍板。每雷实例一次(`_flag_consumed` 现成),不逐轮重复,零新状态、零新窗口、零新随机。 - -- **当量代价**:一张 10×10 板雷约 8–12 颗,全标中=全场多打 8–12 点 flat;跨一场战斗(3–4 板)约 20–40 点——对血量 14–50+ 的敌人阶梯是有感的添头,不是决胜刀。新伤害源按条款①入同一对照表。 -- **与锚原则相容性**:同向加强——标中旗总兑付(资源正向+工兵直伤)仍严格高于最低档安全格增益,且差距拉大。金币雷格=GP+直伤双份,当量对账时计入。 -- **与「雷格=策略纹理」相容性**:几案中最好。它把标雷变成一条干净的**行动点兑换管道**:挖安全格=行动点换增益+进度,标中雷=行动点换直伤——两条管道并行,玩家在「确定能标中」时才换,推理好的人换得更多。插旗不可逆+标空负向是现成的惩罚秤:信心不足乱标=行动点沉没+负向兑付,喷旗自然被抑制,不需要新护栏。 -- **冻结面**:不碰雷安同池、不碰插旗不可逆、不碰 4/5/5、不碰零 await 契约(兑付在轮末既有单据管线内)。文档层须把「标中旗兑付=资源正向」改写为「资源正向+工兵直伤」(战斗结算.md + 行动经济条款②注记),属文档修订非结构冻结。 -- **UI 两铁律**:直伤走既有伤害数字流+标中旗高光(双落高光已在),零新信息面。 -- **实施窗口建议**:表行+结算钩子的小批即可实施;因标旗率上升会轻微扰动轮数读数,建议随下一个平衡窗口同批落,避开 Alpha 读数冻结。 - -#### 案A·状态联动窗口(试玩反馈原案,敌方技能形态)——次选,内容批窗口 - -机制描述:新敌方状态词「龟缩」(显示名候选:龟缩/岩壳;英文键候选 `hardened`):特定怪物施放,自身获得持续 2 记号的龟缩——期间**主角攻击伤害 −2 flat**(伤害下限 1 兜底;只削攻击分量,**格子兑付不动**),期间**标中旗追加直伤 +3 flat**(比常驻档高,即「满的甚至倍率」的加法核翻译)。 - -- **成立/不成立判断**:**作为特定怪物的内容技能=成立;作为全局常驻激励=不成立。** 依据:① 全局化=把「开格贬值」常态化,系统性压低主循环(挖格)的收益线,惩罚结构变常驻杠杆,违背「雷格=策略纹理」立场,也压锚原则的地板;作为个别怪的插曲技能,窗口是节奏变奏不是税,立场无恙。② 触发源归敌方技能池(第四类型妨害技有先例:sapped 首发于第二关 Boss 卓尔);变异格触发作为备选源会叠加两层随机(板随机×变异随机),逐行归因变糊,列为备选不推荐。③ 现行 sapped 已占「削主角输出」词位(−25% percent),窗口衰减若复用 sapped 需破「同名叠层=刷新、层数恒 1」——**不复用,新词新行**,各自独立计时,加法核下两笔衰减并存无冲突。 -- **子档**:「标中即碎」(标中解除龟缩)反馈爽点强、天然限次(每只怪一次),但引入新触发类型(状态被动作打破)=增益状态.md 修订;「不解除」=零新触发类型(纯定时状态+结算期查窗口),持续压力但因果不如前者直观。推荐前者,修订代价已标注。 -- **冻结面**:不碰三大结构面;新技能词走敌人技能池既有修订流程;数值新增(窗口当量改变战斗期望)→ **后 Alpha 内容批+平衡批**,当前冻结期不动。 - -#### 案D·标中旗返行动点——条件备选(第三顺位) - -机制描述:标中旗→下轮行动点 +1(复用 `queue_ap_delta` 修正队列,现成机制)。 -- **为什么不是「当场返还」**:插旗瞬间退款=系统直接告诉玩家「这格是雷」,泄露雷安身份,违反「微光不泄雷安」同一呈现契约——当场返还这条路封死;轮末判定后入下轮队列不泄露(判定时标中已公开)。 -- **当量代价**:标中旗净价从 1 行动点变 0——强激励,且重开「首轮全标旗」的赌徒节拍(2026-09-16 AP 压速批刚杀过一轮标旗 rush),包络敏感度是几案最高。 -- **相容性**:锚原则同向;纹理立场中性(换一种行动点管道)。 -- **冻结面**:零新机制(队列现成);窗口=后 Alpha 平衡批,且建议只在案B 落地后读数仍偏低时再议,不并行叠两套激励。 - -#### 案C·标中雷计入清图进度 / 清图奖励加档——留档,不推荐 - -- 强形态(清图改判为「安全格全开+全雷标中」):把激励做成强制税——不标雷就清不了图,直接违背「激励而非强制」的反馈初衷,且动排雷玩法清图判定(冻结设计:清图=安全格全部开完)=GDD 修订流程。淘汰。 -- 弱形态(C′:清图奖励按标中数加 flat 档):不强制但反馈时点后置到清图瞬间——玩家标旗当下没有体感,激励信号最弱的一档,与案B 同质而反馈更差。留档。 - -#### 案E·纯行动经济位(降旗价/零价)——淘汰 - -旗价是「标不标」这杆秤的秤砣:降价=推理价值稀释,零价=喷旗噪声(每格都插一面当笔记用)。「便宜」不等于「值得」,方向就错了。淘汰。 - -#### 案F·标中雷充能魔法道具——淘汰 - -充能轴 2026-09-19 整体退役(三分量伤害模型废弃),轴已死,无楼可盖。若未来魔法道具内容批要给标雷找联动,那是新轴立项题,不在本题范围。淘汰留痕。 - -#### 案G·标中雷给 GP——淘汰 - -金币雷格已有此兑付(认雷格实例);泛化到全部雷=把元进度货币塞进战斗微决策,且 GP 已迁出战斗屏——战斗内兑付没有即时展示位,玩家标中了也看不见(UI 铁律「就近原则」破坏)。淘汰。 - -#### 案H·标中雷联动 C 区本关强化列表——留档 - -战斗屏 C 区强化列表接线本身还是欠账(06「战斗屏 C 区预留区接线」条),欠账上叠新机制=归因灾难。留档待 C 区接线落籍后再议。 - -**推荐序**:**案B(首选,纯增量小批)→ 案A(次选,后 Alpha 内容批,特定怪技能)→ 案D(条件备选,B 后读数仍低再议)→ 案C′/案H(留档)→ 案C 强形态/案E/案F/案G(淘汰,依据如上)**。B 与 A 不互斥:B 是常驻地基,A 是地基上的内容变奏,可分批先后落。 - -### 3. 验收读数建议 - -| 读数 | 采集面 | 看什么 | -|---|---|---| -| 标旗数/板、标中率、标空率 | 机采 | 激励是否改变行为(现状基线极低,正是本题动机) | -| AP 剩余率/轮 | 机采 | 激励有效的最直接证据:行动点从「全砸开格」变成有第二去处 | -| 通关率带、挖掘风险不等式对账 | 机采 | 案B/A 的包络闭合检查(直伤总量与窗口当量入恒等式) | -| 弃图率 | 机采 | 与清图支配性联动检查 | -| 「值得标吗」体感问卷、案A 窗口可读性(知道为什么开格不疼了)、标中直伤的反馈感知 | **仅真人试玩** | 激励的「被感知」面只有真人能答 | - -### 4. 题二待拍板点 - -1. 主案选型(推荐序见上;B 单独走 / B+A 分批 / 只 A / 全部不动)。 -2. 若取案B:直伤档位(+1 / +2)与作用面(全体存活敌【推荐,沿 spark_aoe 惯例】/ 仅最近敌)。 -3. 若取案A:触发源(敌方技能【推荐】/ 变异格)、子档(标中即碎【推荐】/ 不解除)、施放怪种与窗口当量(归内容批投值)。 -4. 案D 是否保留为条件备选(建议保留,B 落地后凭读数议)。 -5. 实施窗口追认:案B 建议随下一个平衡窗口;案A/D 后 Alpha——均避让当前读数冻结期。 - ---- - -## 附:两题共享的边界声明 - -- 本提案未改任何游戏代码与数据表(.tres);写入面=本文件 + 06-待办清单条目 + HUD框架「未开格类型微光」概念节(2026-09-30 概念收口批落位,见其版本历史 v0.12)。 -- 雷罚直伤三行 4/5/5 维持 provisional 原样;「雷格与安全格的资源分布差异化」维持 Alpha 批归属,本提案不提前动它的任何参数。 -- 全部新数值(菱形半径、收窄档、flat 直伤档、窗口当量)为候选档位非投值;任何案的实装都须经对应批的计划书投值+读数闭环。 -- v1→v2 修订记录:题一全节按微光正确口径(英雄周围 8 格内未开格显示,2026-09-30 用户裁决)重写;v1 的案甲1(微光收进灯下)删除——它描述的就是现状;「微光常显与视野限制互斥」结论作废——它建立在错误前提上;题二零改动。 diff --git a/design/research/proposal-reward-cell-differentiation-2026-09-17.md b/design/research/proposal-reward-cell-differentiation-2026-09-17.md deleted file mode 100644 index 9b1a59ea..00000000 --- a/design/research/proposal-reward-cell-differentiation-2026-09-17.md +++ /dev/null @@ -1,331 +0,0 @@ -# 调研:地图战斗资源·雷安同池现状与差异化/整体权重调整空间 - -> **性质**:研究报告——只读取证,不修改任何文件,不下设计结论。 -> **日期**:2026-09-17 -> **上游触发**:用户「棋盘格战斗资源拟重新设计」关注(06-待办清单既有语境)+ 行动经济表注记「保留标中旗正向兑付——雷格/安全格概率差异化设计的前提」(`data/tables/action_economy.tres:18-19`)。 -> **纪律**:全文禁止「应该/建议/我推荐」;只呈现「现状 → 改这条会动什么 → 风险」链与「若决策方向是 X,则路径 Y」的条件映射。所有事实断言引用 §9 附录所列文件 + 行号;推演值(计算所得)显式标注〔推演〕。 - ---- - -## 1. 调研目标与方法 - -**目标**:盘点「地图战斗资源」系统的雷安同池现状(A 层)、按格型差异化的候选路径空间(B 层)、整体权重调整空间(C 层)、外部同类做法(D 层),为后续设计决策提供事实与权衡依据。 - -**方法**(四层): - -| 层 | 手段 | 产出 | -|---|---|---| -| 事实层 | 逐文件读取 §9 清单全部文件 | 第 2、3 章现状盘点 | -| 关系层 | 全仓关键词检索:`雷安同池`(15 处,排除 archive)、`类型频次合计`、`_rollable_rows`、`roll_board`、`equivalence_supply` | 第 2 章 A3 证据链 | -| 推演层 | 权重敏感性计算、路径改动面推导 | 第 4、5 章(推演值标〔推演〕) | -| 对照层 | 外部案例联网核验两例(Peglin / Let's! Revolution!),其余为知识盘点并标注 | 第 6 章 | - -**边界**:本报告不触 v0.4/v0.6 结构冻结项的任何现行文件;第 7 章只列冻结项当前状态。文档/代码如有不一致,只并列呈现、方向归用户拍板(先例:三种方向都出现过,不默认代码为准)。 - ---- - -## 2. 现状盘点·结构与通道(A1/A2/A3) - -### 2.1 A1:reward 表 11 行逐行行值 - -事实源 = `game/data/tables/reward.tres`(行号指该文件): - -| # | reward_id | cell_type | polarity | power | power_min/max | weight | stacks | effect_id | display_name | pool_tag | tier | -|---|---|---|---|---|---|---|---|---|---|---|---| -| 1 | attack_up | attack | positive | 0 | — | 20 | 1(缺省) | attack_up | 增伤 | cell | 2 | -| 2 | ac_up | defense | positive | 0 | — | 16 | 1(缺省) | ac_up | 护甲强化 | cell | 2 | -| 3 | spark_aoe | blast | positive | 1 | — | 16 | 1(缺省) | —(空) | 爆裂粉尘 | cell | 1 | -| 4 | heal_minor | heal | positive | 1 | [1,1] | 3 | 1(缺省) | —(空) | 急救敷料 | cell | 1 | -| 5 | weaken | weaken | positive | 0 | — | 12 | 1(缺省) | weaken | 削弱 | cell | 1 | -| 6 | enrage | attack | negative | 0 | — | 0 | 1(缺省) | enrage | 敌方暴走 | cell | 2 | -| 7 | off_guard | defense | negative | 0 | — | 0 | 1(缺省) | off_guard | 我方失衡 | cell | 2 | -| 8 | heal_backlash | heal | negative | 1 | — | 0 | 1(缺省) | —(空) | 反噬震荡 | cell | 1 | -| 9 | ambush_double | blast | negative | 0 | — | 0 | **2** | —(空) | 敌方伏击 | cell | 1 | -| 10 | sapped | weaken | negative | 0 | — | 0 | 1(缺省) | sapped | 我方乏力 | cell | 1 | -| 11 | clear_blast | blast | positive | 13 | [8,18] | 1 | 1(缺省) | —(空) | 清障炸药 | clear_default | 2 | - -- 行 1–5 = 正向五行(#8-16、18-26、28-36、38-48、50-58);行 6–10 = 负向五行(#60-68、70-78、80-88、90-99、101-109);行 11 = 清图槽(#111-121)。 -- `stacks` 仅 ambush_double 显式携带 2(#96);其余行无 `stacks` 键,缺省 1(schema `data/schemas/reward_table.gd:57`)。 -- 区间字段仅 heal_minor [1,1](#44-45,定值占位——注释明言「区间字段保留 min=max=1 占位,量级再调时恢复区间结构」,`reward.tres:141-142`)与 clear_blast [8,18](#117-118)。 -- 区间行 schema 约束:必成对、percent 行禁止、`power = (min+max)/2` 中点锚(`reward_table.gd:70-84`)。 - -### 2.2 A2:类型频次合计 67 的来源分解 - -类型频次 = cell 池正向行 weight 合计(`reward.tres:126,145`;GDD `design/gdd/systems/战斗循环/地图战斗资源.md:72,76`): - -| 行 | weight | 占比〔推演〕 | -|---|---|---| -| attack_up(attack) | 20 | 29.9% | -| ac_up(defense) | 16 | 23.9% | -| spark_aoe(blast) | 16 | 23.9% | -| heal_minor(heal) | 3 | 4.5% | -| weaken(weaken) | 12 | 17.9% | -| **合计** | **67** | 100% | - -- 历史:v0.6 批时合计 79(heal 15);v0.7 数值压缩批 heal 15→3,合计降至 67(`地图战斗资源.md:232-233`;`reward.tres:140-145`)。 -- clear_blast weight=1 **不入**类型频次:`_rollable_rows()` 只收 `pool_tag == "cell"`(`core/reward_economy.gd:211`),清图槽走独立 `_pool_rows("clear_default")`(`reward_economy.gd:63`)。 -- 频次涌现机制:每非封锁格独立 `weighted_pick`(`reward_economy.gd:66-67`),大数频率收敛于行权重比例;reward_expectation 实测即验证此涌现(`smoke/reward_expectation.gd:58-70`)。 - -### 2.3 A3:雷安同池证据链(精确行号) - -三处声明 + 两处执行 + 测试断言,全链如下: - -**声明① 代码头注释**:`core/reward_economy.gd:6`——「安全格与雷格一视同仁(同一类型池、同一权重分布——雷安同池);封锁格不入摇号清单」。 - -**声明② 数据注释段**:`data/tables/reward.tres:125`——「安全格与雷格同池同分布(雷安同池)」;连带语义在 `reward.tres:143-144`——「heal 权重下调同比例降低踩中 heal 型雷(反噬)的频率」(雷安同池的自动同侧效应,标注「结构冻结,自动同侧」)。 - -**声明③ GDD**:`design/gdd/systems/战斗循环/地图战斗资源.md:61`(摇号纪律表「雷安同池」行,含「分布按格型差异化若未来需要,走本文修订」的预留出口)、`:207`(结构冻结七项含雷安同池)、`:212`(验收标准「任何'按格型差异化分配'的分支不存在」)。 - -**执行① 摇号实现**:`reward_economy.gd` `roll_board`(36-81 行)——`_rollable_rows()`(207-213 行,211 行过滤 `pool_tag=cell & polarity=positive & weight>0`,**无任何格型参数**)产出的单一行集对全部 eligible 格逐一 `weighted_pick`(65-67 行,64 行行内注释「① 身份批:每非封锁格恰一类型身份(雷安同池——同一行集同一权重分布)」)。 - -**执行② 资格清单与揭示通道**: -- 资格清单构建:`core/battle_orchestrator.gd:140-151`——eligible = 全部安全格 + 全部雷格、各自剔除 R₀(144-150 行),安全格与雷格进**同一个数组**(140 行注释「资格格 = 全部非封锁格(安全格 + 雷格,雷安同池)」)。 -- 揭示通道:`core/minesweeper_rules.gd` `cell_revealed` 信号(10 行);`_do_dig`(236-274 行)内雷格 emit `resource: true`(262-265 行)、安全格 emit `resource: true`(268-271 行),资格注释在 258-259 行(「chain/dig 恒 true——安全格与雷格一视同仁(雷格亦携带,负向兑付归 战斗结算 极性路由)」);initial 通道(封锁格)恒 `resource: false`(100-103 行)。 - -**测试断言**:`smoke/smoke_all.gd:1347`(chain/dig 揭示事件 resource 恒 true——「雷安同池」命名断言)、`:1349`(雷格揭示携带资源 ≥1)、`:1365-1367`(封锁格 R₀ 身份查询 = null;未开雷格身份恒可查);分布涌现实测 = `smoke/reward_expectation.gd:58-72`。 - -**同池的运行时含义**:格子的资源类型身份在 install 期摇定(雷格同样携带身份);格子的**极性不在资源内**,由「动作 × 格型」矩阵在结算期决定(开安全格/标中雷 = positive,开雷格/标错安全格 = negative)——路由执行 = `battle_orchestrator.gd:253-260`(`_grant_routed` → `polarity_row`),字典查询面 = `reward_economy.gd:165-172`。**因此「雷格 vs 安全格」的差异通道在现行架构里 = 极性通道,而非类型分布通道。** - ---- - -## 3. 现状盘点·字典与同步状态(A4/A5/A6) - -### 3.1 A4:五型 × 极性字典完整内容(10 行兑付语义) - -字典完整性为加载前提:五型 × 正负缺任一行即加载致命(`reward_table.gd:92-96`;运行时缺行 `_fatal`:`reward_economy.gd:171`)。兑付分派:effect_id 非空 = percent 行进增益状态容器;空 = flat 行当场兑付(`battle_orchestrator.gd:264-269`)。幅度行值源 = `data/tables/status_effects.tres`(九行)。 - -| 类型 | 正向兑付语义(格面池行 → 效果行) | 负向兑付语义(字典行 → 效果行) | -|---|---|---| -| attack | attack_up → 增益状态 attack_up:+50 percent、hero_offense 池、dur 1、max 2(`status_effects.tres:8-15`) | enrage → 敌方暴走:+25 percent、enemy_output 池、max 16(`status_effects.tres:44-51`) | -| defense | ac_up → 护甲强化:+1 ac/层 ×2 层,**AC 掷点阈值轴、不入任何池**(`status_effects.tres:17-24`;`design/gdd/systems/战斗循环/增益状态.md:132,154`) | off_guard → 我方失衡:+25 percent、hero_defense 池(承伤加深)、max 16(`status_effects.tres:53-60`) | -| heal | heal_minor → flat 治疗定值 1(满血零兑付照旧,`地图战斗资源.md:112`) | heal_backlash → **主角直伤 1,不经增益状态**(`reward.tres:80-88`;`地图战斗资源.md:112`;量级锚待办见 `06-待办清单.md:329-335`) | -| blast | spark_aoe → flat 群伤 1,全体存活敌各一笔 | ambush_double → 伏击 +2 层(stacks=2,`reward.tres:96`),受敌人系统单轮伏击上限 advantage_per_round_cap 护栏、溢出记「溢出未生效」行(`敌人系统.md:254`;`战斗结算.md:142`;冒烟直验 `smoke_all.gd:1309-1321`) | -| weaken | weaken → 削弱:−65 percent、enemy_output 池(`status_effects.tres:35-42`) | sapped → 我方乏力:−25 percent、hero_offense 池(`status_effects.tres:62-69`;`增益状态.md:159,219`) | - -负向行为纯字典不消费权重(`reward_economy.gd:208`);负向恒即时、无库存语义(`地图战斗资源.md:122-124`)。四池对称口径:敌打主角 = hero_defense × enemy_output,主角打敌 = hero_offense × enemy_defense(`增益状态.md:163`)。 - -### 3.2 A5:当前测试在跑的分布假设与等价性断言 - -| 工具 | 与奖励分布的关系 | 具体断言/口径 | -|---|---|---| -| `smoke/reward_expectation.gd` | **直接**:类型频次涌现实测(N=200 板/深度,9 行) | ① 类型频次应涌现自正向行权重——**但头注释(4 行)与尾注(71-72 行)仍写「heal 15 · 合计 79 · heal 19.0%」旧基准(v0.7 压缩批未同步,见 3.3)**;② 封锁格零泄漏 = R₀ 格 `is_mapped` 恒 false(52-57 行) | -| `smoke/smoke_all.gd` | **直接**:资源资格面 + 负向字典 | ① chain/dig 事件 resource 恒 true(1347 行)② initial 恒 false(1348 行)③ 雷格携带资源 ≥1(1349 行)④ R₀ 查询 null / 未开雷格可查(1365-1367 行)⑤ 负向五型逐型直验(1244-1321 行)——**1255-1256 行注记:heal 权重 15→3 后单板五型齐备不再必然(无 heal 板概率 ≈1/3),改 6 板扫描取第一块齐备板** | -| `smoke/monte_carlo.gd` | 间接消费 | 无同池断言;统计攻防 buff 授予数(28、64 行:attack_up/ac_up 计数)与每轮承伤 | -| `smoke/level_monte_carlo.gd` | 间接消费 | 「踩雷/战 = 每战斗负向兑付触发期望」(106 行口径);完美档零踩雷构造断言(107-109 行);F4 承伤带 / 通关率带读数出口 | -| `smoke/experiment_density.gd` | **零耦合** | FakeDB 只供 `resolve_board_gen`/`status_effect_row`(59-64 行)——不消费 reward 表,密度实验与奖励分布无关 | -| `smoke/auto_player.gd` | 等价性载体 | 「等价性证明:smoke_all 同种子回放断言(步骤流逐行相同)在重构后保持全绿」(7 行)——确定性回放是全部奖励读数的前提 | - -**雷安同池等价性测试的现状归纳**:现无「安全格分布 == 雷格分布」的统计等价断言(如卡方检验);等价性以**结构断言**承载(同一行集、同一清单、resource 恒 true)+ **涌现实测**(类型频次不分格型统计)。若未来差异化落地,`reward_expectation.gd` 的频次统计(58-61 行按格聚合,不分公司 kind)需按格型拆列才可验证差异。 - -### 3.3 A6:registry 与 .tres 的同步状态(v0.7 指路化后) - -**结论:数值本体已单源化(.tres),但派生快照仍有三处需随批同步,且已发现两处漏网。** - -- registry `design/registry/entities.yaml:320`(reward_table.mvp_content):2026-09-17 数值压缩批「具体数值列(power/weight/power_min/power_max)**改指路存根**:现行行值读 `data/tables/reward.tres`」——但同段保留了「压缩后锚行快照」(spark_aoe power=1 / heal_minor [1,1] / clear_blast [8,18] 中点 13 / **类型频次合计 79→67**)。即现行形态 = **指路存根 + 锚行快照**混合:weight 再动时锚行快照即失同步,需按 doc-conventions §5① 双写失同步禁止条款随批更新(`docs/doc-conventions.md:68`)。 -- GDD 调参表已指路化:`地图战斗资源.md:193-203` 现行值列全部为「见 `data/tables/reward.tres` + registry mvp_content」存根,表格只锁字段语义与取值域(v0.7 双写失同步收口,`地图战斗资源.md:233`)。 -- **漏网实证①**:`smoke/reward_expectation.gd:4`(「heal 15 / weaken 12,合计 79」)与 `:71-72`(「heal 19.0%」等 79 基准百分比)——v0.7 压缩批只同步了 .tres/smoke_all/GDD/registry/06 清单,此文件注释未同步,现行实测输出与注释口径已不一致。 -- **漏网实证②**:`core/reward_economy.gd:184`(tier_min_buff 注释「attack_up/defense_up」——defense_up 已于 2026-09-16 换装为 ac_up,`status_effects.tres:97-99`)。功能不受影响(判据按 effect_id 查表 target_side,见 5.3),注释文本过期。 - ---- - -## 4. 差异化路径对比(B1–B5) - -**先行事实**:差异化在 GDD 侧已有预留出口——「分布按格型差异化若未来需要,走本文修订」(`地图战斗资源.md:61`);行动经济表注记已把「保留标中旗正向兑付」表述为「雷格/安全格概率差异化设计的前提」(`action_economy.tres:18-19`)。三条候选路径按「改动从表到逻辑递深」排列。 - -### 4.1 B1+B2+B3:三路径对比表 - -| 维度 | 路径甲:双池切分 | 路径乙:格型权重列 | 路径丙:修饰位摇后过滤 | -|---|---|---|---| -| **核心思路** | pool_tag 增值(`cell` / `mine_cell`),雷、安各持一套正向权重行集 | 同表每行增设可选列 `weight_mine`(缺省 = weight,向后兼容),摇号按格的雷/安身份选列 | 身份仍同池摇定;对雷格(或带变异标签的格)在身份批后追加一次重摇/替换 pass,修饰规则独立成表 | -| **schema 层变化** | `POOL_TAGS` 枚举增值 + `clear_` 预留拒绝逻辑并存(`reward_table.gd:15,43-47`);池空护栏拆为双池各 ≥1 活行(`reward_table.gd:97-99`);字典完整性校验轴扩为(池 × 类型 × 极性)(`reward_table.gd:86-96`) | 新增可选配对列校验(缺省回退 weight——区间字段「缺省 = 定值行向后兼容」同款先例,`reward_table.gd:70-84`);行数不变 | 修饰规则新表(或 board_gen 行加列);`BoardData.variants` 字段已在板契约存在(`core/board_data.gd:14`),若挂变异标签可零新表 | -| **数据层变化** | reward.tres 正向 5 行复制出雷池行集(行数 11→16+),或负向行侧挂雷池权重 | 11 行各加一列(或仅正向 5 行加),初值同构 = 零行为变更上线 | 新增修饰规则行(如「雷格 heal 重摇为 attack」);现有 11 行不动 | -| **逻辑层变化** | `_rollable_rows()` 分池双份(`reward_economy.gd:207-213`);eligible 清单需携带雷/安事实(现 `battle_orchestrator.gd:144-150` 构建时无 kind 字段——需分两组或加字段);`roll_board` 65-67 行按格取对应池 | `weighted_pick` 选列参数化(`reward_economy.gd:195-204` 纯函数面签名变化);`_pool_weight` 双轨(224-228 行) | `roll_board` ③ 段(区间 roll,70-77 行)后插修饰 pass;若重掷则 reward_roll 流取号序变化 | -| **B2 差异化粒度** | 按格型(雷/安)× 行——两池各自独立的 5 行权重面 | 同甲:按格型 × 行;单表内维护 | 最细:可按格型 / biome(`board_data.gd:15`)/ 变异标签(`board_data.gd:14`)/ 坐标任意轴组合——粒度过细时逐行归因复杂化 | -| **B3 回归面** | `reward.tres` · `reward_table.gd` · `reward_economy.gd` · `battle_orchestrator.gd` · `smoke_all.gd`(1347/1349/1365 断言重写)· `reward_expectation.gd`(频次统计需按格型拆列)· registry mechanics/mvp_content(`entities.yaml:318,320`)· GDD 冻结项修订 | 与甲同文件集,少 pool_tag 枚举扩散、多 `weighted_pick` 签名变化;equivalence_supply 活行口径需定义(取哪列,`reward_economy.gd:177-190`) | `reward_economy.gd` 确定性链 · 排雷玩法变异不变式 inv2a/inv2b(`minesweeper_rules.gd:124-137`)· 全部既有种子读数(修饰 pass 改变取号序则黄金向量全变) | -| **确定性/回放影响** | 取号次数不变(每格仍恰一次);同种子回放保持,但身份表内容随池权重变化 → 既有种子读数作废重测 | 同左 | 若修饰不额外取号(确定性映射)则取号序不变;若重摇则 reward_roll 流消耗序变化,同种子身份表全变 | -| **对账面(行动经济 F1)** | P(安全)/P(雷) 两侧类型分布分化 → 条款③挖掘风险不等式、条款⑤清图支配性需按侧重推(`design/gdd/systems/排雷循环/行动经济.md:110-128`) | 同左 | 同左(若修饰只动类型边际分布,等价于甲/乙的分布结果) | -| **B4 破冻结判定** | **破 v0.4 冻结**(雷安同池 + 验收标准 212 行),走 GDD 修订 | **同破**(结构上同为「按格型差异化分配」分支) | **实质等效于破**(「同一权重分布摇定」的字面保留、分布实质改变——212 行语义被绕过,需修订裁决其是否算差异化分支) | - -### 4.2 B4:v0.4 + v0.6「结构冻结」项范围(改哪项算破冻结) - -**v0.4 结构冻结七项**(`地图战斗资源.md:207`,改动走 GDD 修订流程、不走调参): - -1. 五型封闭枚举(加第六型 = 修订文档,`:116`) -2. **雷安同池**(差异化三路径全部命中此项——`候选集合`节 :72-77 与验收标准 :212 同锚) -3. 极性矩阵(「动作 × 格型 → 符号」定义,`:90-100`) -4. 装板期预分配且无重摇(`:56-60`) -5. 负向恒即时无库存(`:122-124`) -6. 清图恒非空(`:136`;schema 护栏 `reward_table.gd:100-102`) -7. 除摇号外零随机(`:15,162`) - -**v0.6 批内零改动承诺**(非长期冻结,是批次范围声明):「cell_type defense / 权重 16 / 档位 2 零改动(类型频次合计 79 不变)」(`reward.tres:133-135`;`地图战斗资源.md:232`)——v0.7 已改 heal 权重证明该承诺是批内性的;类型频次合计本身**不在冻结范围**(79→67 已发生,`地图战斗资源.md:233-234`)。 - -**冻结边界的现行口径**:权重数值 = 调参(provisional 归难度曲线与Boss,`地图战斗资源.md:157,187`);权重所附着的结构(单池、正向行集、极性字典五型×正负) = 冻结。「只调 weight 数值」永不破冻结;「让雷格与安全格读到不同权重/行集」必破第 2 项。 - -### 4.3 B5:旧提案「行权重 vs 类型权重」区分的可借鉴点 - -`design/research/proposal-reward-polarity-2026-09-13.md` 与差异化的四点衔接: - -1. **「类型 = 行的家族属性,类型频次由行权重涌现」**(R1,`:20`)——差异化后若想分别控制雷、安两侧的类型频次,沿用该原则意味着两池各自维护行权重、频次各自涌现;若想直接以「类型频次」为调参对象(而非行权重),需新增类型→行的聚合换算层,proposal 当时明确放弃了这层(「难度曲线与Boss 调参对象 = 行权重」)。 -2. **「roll 保持单段 weighted_pick 结构不动(不引入两段式)」**(R1 实现面钉死,`:20`)——该钉死与路径丙(摇后修饰 pass)的实现形态相悖;甲/乙保持单段摇号、只在入口分行集/分列,与该钉死兼容。 -3. **`mine_cell` 池成案**:v3 §3 曾设计「pool_tag 新值 mine_cell;roll_board 批次扩雷格 roll(同一 scope 批内)」(`:49`)——路径甲在旧提案时代有完整 schema/批次设计先例;v4 用户裁决(2026-09-15)最终落地为「雷安一视同仁 + 可选类删除」(`:94`),`mine_cell` 随之搁置,**结构图纸仍在案可翻**。 -4. **playtest 预注册指标**(§4,`:67-73`):路线选择率、图标误读率、类型选择性探测率三项可直接复用为差异化落地后的验收观测面(指标定义与「类型分布即先验信息是有意的规划素材」拍板——R3,`:29`——在差异化场景语义更强:两侧分布差值本身成为可读信息)。 - ---- - -## 5. 整体权重调整空间(C1–C5) - -### 5.1 C1:权重敏感性——单行 ±25%/±50% 对类型频次的影响 - -**口径**〔推演〕:单行独立调整、其余四行不动;份额 = weight′/合计′。现行基准 67(`reward.tres:126,145`)。 - -| 调整行(现行 weight / 份额) | +25% | +50% | −25% | −50% | -|---|---|---|---|---| -| attack_up(20 / 29.9%) | 25 → 34.7%(+4.9pt,合计 72) | 30 → 39.0%(+9.1pt,合计 77) | 15 → 24.2%(−5.7pt,合计 62) | 10 → 17.5%(−12.3pt,合计 57) | -| ac_up(16 / 23.9%) | 20 → 28.2%(+4.3pt,合计 71) | 24 → 32.0%(+8.1pt,合计 75) | 12 → 19.0%(−4.8pt,合计 63) | 8 → 13.6%(−10.3pt,合计 59) | -| spark_aoe(16 / 23.9%) | 同 ac_up 对称 | 同上 | 同上 | 同上 | -| heal_minor(3 / 4.5%) | 3.75 → **非整数**(取 4 → 5.9%,合计 68) | 4.5 → **非整数**(取 4 → 5.9% 或 5 → 7.2%) | 2.25 → 取 2 → 3.0%(合计 66) | 1.5 → 取 1 → 1.5% 或取 2 → 3.0% | -| weaken(12 / 17.9%) | 15 → 21.4%(+3.5pt,合计 70) | 18 → 24.7%(+6.8pt,合计 73) | 9 → 14.1%(−3.9pt,合计 64) | 6 → 10.3%(−7.6pt,合计 58) | - -**三点敏感性结论**〔推演〕: - -1. **整数权重域的最小步长问题**:weight 域 [0,999](`reward_table.gd:53`),但 heal_minor 现值 3 的 ±25% 落非整数——小权重行(≤3)的可调粒度是 ±1(33%/50% 步长),做不了 ±25% 级别的细调。v0.7 的 15→3 实际步长就是 −80%。 -2. **同池线性传导到负向字典命中率**:雷安同池下,踩雷格/标错格命中某型负向的频率 = 该型类型频次 × 格位雷概率——类型频次变多少,该型负向兑付频率同比例变。特例已由 v0.7 注记背书:「heal 权重下调同比例降低踩中 heal 型雷(反噬)的频率」(`reward.tres:143-144`)。 -3. **五型齐备板概率对 heal 权重高度敏感**:单板无 heal 格概率 = (64/67)^非封锁格数〔推演〕。smoke_all 负向字典直验因此已改 6 板扫描(`smoke_all.gd:1255-1256,1284`——heal 权重若再降,该断言的扫描通过率继续下降;heal 3→2 时〔推演〕非封锁格 55 格的板无 heal 概率约 8%→19%,6 板扫描失败概率约 0→35% 量级)。 -4. **全行同比例缩放 = 零频次影响**:份额不变,但 reward_roll 取号域宽度变化(`reward_economy.gd:67` 的 `randi_range(0, 合计−1)`)会改变同种子下各格摇中的 reward_id——「整体权重轴」调整若不动相对结构,频次读数不变而**既有种子读数仍作废**。 - -### 5.2 C2:区间行离散度对局体验影响 - -- **heal_minor [1,1]**:区间已塌缩为定值占位(`reward.tres:44-45,141-142`——「量级再调时恢复区间结构」)。重开区间掷点**零新机制**:schema 配对/中点锚校验在位(`reward_table.gd:70-84`)、身份批内追加取号实现在位(`reward_economy.gd:70-74`)、快照 power 覆盖授予链路在位(`battle_orchestrator.gd:259`)。重开的唯一变量 = 治疗量的局内方差。 -- **clear_blast [8,18]**:现行区间跨度 10、中点 13、相对半宽 ≈38%〔推演〕;摇定时机 = 装板批尾、**每板恰一次**跨轮不变(`reward_economy.gd:68-69,75-77`),非每次清图重掷。波动影响的是「清图轮的斩杀线稳定性」(Boss 前最后一张板的清图奖励量级浮动),期望当量由中点锚锁定(行动经济条款①锚口径,`reward_table.gd:82-84`)。 -- 区间行与定值行的并存先例:v0.7 压缩批同时动过两种形态([25,55]→[8,18] 与 [2,6]→[1,1],`reward.tres:138-142`)——「开不开区间」在现行 schema 里是行级自由度,不是机制级开关。 - -### 5.3 C3:tier_min_buff 当前算法与影响行 - -算法(`reward_economy.gd:177-190`):遍历 reward 全表,取 `pool_tag=cell & polarity=positive & effect_id≠""`(= percent 正向行)且其状态行 `target_side == "hero"` 的行集,`tier_min_buff = min(tier)`。 - -- **当前命中行**:attack_up(tier 2,状态行 target_side=hero,`status_effects.tres:10`)、ac_up(tier 2,target_side=hero,`status_effects.tres:19`)→ **tier_min_buff = 2**(registry 同值:`entities.yaml:320`「tier_min_buff = 2」)。weaken 虽是 percent 正向行但 target_side=enemy(`status_effects.tres:37`),被排除。 -- **口径注记**:ac_up 是 AC 阈值轴行、不入任何池(`增益状态.md:132`),但判据只查 target_side 不查 unit——ac 行目前参与「我侧增益最低档」计算。该判据文本写于换装批之前(184 行注释仍称 defense_up,见 3.3 漏网②)。 -- **影响面**:tier_min_buff 是「最低档安全格增益」的数据源——行动经济条款②「标中旗锚:标中旗的减益档位必须严格高于最低档安全格增益」(`行动经济.md:113`;`增益状态.md:165`)。凡 target_side=hero 的 percent 正向行 tier 变动,或未来 heal/blast 增挂 effect_id 行,都会改变该锚值。 -- **消费方现状**:`equivalence_supply()` 在切片代码内**零调用**(全仓 grep 仅定义处 `reward_economy.gd:177`)——当量对账目前是文档层义务(战斗结算为唯一对账责任方,`战斗结算.md:103`),非运行时强制。 - -### 5.4 C4:equivalence_supply 当前活行清单与权值 - -活行 = `weight > 0` 全行投影(`reward_economy.gd:180-183`):attack_up 20 · ac_up 16 · spark_aoe 16 · heal_minor 3 · weaken 12 · clear_blast 1,共 **6 活行**;负向 5 行 weight=0 不入。对账锚关系:条款①单一当量(对照表载体归战斗结算,`战斗结算.md:103`)、条款②锚 = tier_min_buff(见 5.3)、条款③⑤不等式两侧的原材料 = 正向当量与惩罚当量(`行动经济.md:122-128`)。上游对账约束:关级通关恒等式「奖励输出占比 ∈ [15%, 40%]」(`难度曲线与Boss.md:100-104`)——活行权重/威力的单边移动必须走恒等式联合检算(`:153`)。 - -### 5.5 C5:调权重连带必动位置清单(当前实测) - -v0.6 先例用「零改动」避开连带(`reward.tres:134`);v0.7 先例实动一处权重(heal 15→3),连带同步面实测如下——**第 4、5 项即该批漏网处**: - -| # | 位置 | 性质 | 证据 | -|---|---|---|---| -| 1 | `data/tables/reward.tres` 行值 + 注释段合计数 | 数据本体 | `reward.tres:14-145`(注释段 137-145 记压缩前后值) | -| 2 | registry `entities.yaml` mvp_content 锚行快照 + 合计 | 派生快照 | `entities.yaml:320`(「79→67」已随批写) | -| 3 | GDD `地图战斗资源.md` 候选集合节合计 + v0.x 版本历史 | 派生快照 | `地图战斗资源.md:72,76`(67);`:232-234` | -| 4 | `smoke/reward_expectation.gd` 头注释与尾注基准值 | **漏网实证(现行过期)** | `reward_expectation.gd:4,71-72`(仍 79 基准) | -| 5 | `core/reward_economy.gd` 行内注释(行名引用) | **漏网实证(现行过期)** | `reward_economy.gd:184`(仍写 defense_up) | -| 6 | `smoke/smoke_all.gd` 五型齐备断言口径 | 随 heal 权重敏感 | `smoke_all.gd:1255-1256,1284` | -| 7 | 难度曲线恒等式与通关率带读数重跑 | 对账义务 | `难度曲线与Boss.md:100-104,115,153`;EV/读数重锚随批纪律先例 `:275` | -| 8 | 行动经济 F1 条款②③⑤重推 | 对账义务 | `行动经济.md:110-128` | -| 9 | doc-conventions §5 五步收口流程 | 流程义务 | `doc-conventions.md:68`(①双写失同步禁止⑤五步全收) | - ---- - -## 6. 外部参考(D1–D2) - -> 说明:D1/D2 案例中 Peglin 与 Let's! Revolution! 经联网核验(来源见 §9 附录);其余为知识盘点、未逐项联网核验,置信度逐条标注。本节只做事实盘点。 - -### 6.1 D1:雷格 vs 安全格差异化在其他游戏里的常见做法 - -| 做法 | 案例 | 与本项目结构的关系 | -|---|---|---| -| 格下内容物混布、**不分格型**同池 | Let's! Revolution!(2023,核验):雷图翻格 roguelite,格下混布金子/敌人/通路,挖到金子=收益、惊动敌人=战斗——极性由**内容物**决定,与本项目「极性由动作 × 格型决定」取向相反 | 与现行雷安同池同构度最高 | -| **按节点/格型分池**,每型独立奖励池 | Slay the Spire:地图节点分型(战斗/精英/商店/宝箱),各型独立掉落表(知识盘点) | 路径甲(双池切分)的同构先例——节点型 ≈ 格型 | -| 板内**位型差异化密度**(特殊位限量混布) | Peglin(2022,核验):板混布普通钉与特殊钉(暴击/刷新/爆炸/治疗钉),特殊钉有独立效果与生成控制 | 与「雷/安二值绑定」不同:特殊位是增量维度,不与「危险/安全」二值共轴 | -| **按格修饰位**改变产出 | Loop Hero:地形卡改变格子刷出的怪物与资源(知识盘点) | 路径丙(修饰位过滤)的同构先例 | -| 单池统一权重表 + 稀有度列 | Luck be a Landlord:符号池加权摇号(知识盘点) | 现行结构(单池行权重)的同类 | -| 无资源层 | 传统扫雷及其多数变体(知识盘点) | 差异化问题的空白基线 | - -### 6.2 D2:同类「按格型差异化权重」做与不做的案例 - -- **做的**:Slay the Spire(节点型分池,路线规划 = 核心策略层);Peglin(特殊钉密度即难度旋钮);杀戮尖塔式「按节点类型选路」与本项目「未开格类型预读 → 读敌拍板」(proposal §4 指标,`:69-73`)在设计动机上同族。 -- **不做的**:Let's! Revolution!(资源与危险混布、不按格型分权重——其策略素材来自数字推理而非分布先验);传统扫雷变体(无资源层可差异)。 -- **中间态事实**:本次盘点未发现「同格型空间、雷格与安全格同池但权重不同」的知名先例——现有作品要么全同池(Let's! Revolution!),要么彻底按型分池(StS 节点)。中间态的体验先例缺口本身是一个待验证风险(无对照读数可借)。 - ---- - -## 7. 风险与冻结项(v0.4 + v0.6 拍板项当前状态) - -### 7.1 冻结项清单与差异化/调权的关系 - -| v0.4 冻结项(`地图战斗资源.md:207`) | 纯调 weight 是否触碰 | 差异化三路径是否触碰 | -|---|---|---| -| 五型封闭枚举 | 否 | 甲/乙:否(类型集不变);丙:视修饰规则(若把某格摇成清单外类型则触碰) | -| **雷安同池** | 否 | **甲/乙/丙全部触碰**(见 4.1 B4 行) | -| 极性矩阵 | 否 | 否(三路径都不动「动作 × 格型 → 符号」) | -| 装板期预分配且无重摇 | 否 | 甲/乙:否;丙:若修饰 = 重摇则触碰第 4 项、若为确定性映射则不触碰 | -| 负向恒即时无库存 | 否 | 否 | -| 清图恒非空 | 否 | 否(clear_default 池在三路径中均不动) | -| 除摇号外零随机 | 否 | 丙:修饰 pass 若引入摇号外的随机即触碰;甲/乙:否 | - -**综合判定**:整体权重调整(C 层)在现行冻结框架内是纯调参(provisional 归难度曲线与Boss,`地图战斗资源.md:157,187`),零破冻结;差异化(B 层三路径)必破 v0.4 冻结第 2 项、走 GDD 修订流程(`地图战斗资源.md:61` 预留出口即为此设)。 - -### 7.2 风险登记 - -1. **确定性读数作废风险**:任何 weight 变动(含同比例缩放)改变同种子身份表(5.1 结论 4)——冒烟 296 断言中依赖具体身份的用例、种子 421 等既有读数、验收批读数全部重测(先例纪律:`难度曲线与Boss.md:275`「行值零改动、重锚与权重投值随批合并」;上一轮换装/压缩批后「全部旧读数失效、验收读数另批重测」为既有惯例)。 -2. **连带同步缺口风险**:v0.7 批实测漏网两处(3.3);doc-conventions §5① 已把三类同步定为完成判据(`doc-conventions.md:68`),但 §5 覆盖清单是**文档类**字段——smoke 脚本注释与 .gd 行内注释不在其列(第 4、5 项均属此类),流程上需扩充口径或另立检查项。 -3. **对账耦合风险**:heal 权重与行动经济条款③⑤不等式、难度曲线恒等式 [15,40]% 带、通关率带三方耦合(5.4、5.5 #7/#8)——单动 heal 权重即触发三处对账义务(v0.7 已实测触发:`06-待办清单.md:331`「量级当量对账待难度曲线与Boss 调参批执行」)。 -4. **差异化后信息面风险**:若雷、安分布分化且未开格类型可预读(待办 `地图战斗资源.md:180`;06 清单 `:323`),类型分布本身从「零信息」变为「雷/安属性的先验证据」——proposal R3 已拍板「类型分布即先验信息是有意的规划素材」(`:29`),差异化将该拍板的强度放大(分布差值成为可推理量),与排雷推理本征的边界需重新裁决。 -5. **小权重行整数化风险**:heal_minor=3 已落入 ±25% 不可整调区间(5.1 结论 1)——后续任何以百分比为步长的 heal 调参都会遇到取整歧义。 -6. **equivalence_supply 零消费方**:当量对账为文档层人工义务、无运行时守卫(5.3)——差异化若使两侧当量结构分化,人工对账的出错面扩大。 - ---- - -## 8. 后续设计决策待决项清单(用户拍板时须给出的输入) - -1. **差异化的问题定义**:要区分的轴是什么——雷格 vs 安全格(分布差异化)?还是类型本身的出现频率(纯权重调整)?两者分属 B 层(破冻结、走修订)与 C 层(调参、零破冻结)。 -2. **若决策方向是差异化**:粒度选择——甲(双池,行集独立)/ 乙(单池双列)/ 丙(修饰位,粒度最细)——三路径的取舍依据见 4.1 对比表;甲有 `mine_cell` 旧成案可翻(4.3)。 -3. **若决策方向是差异化**:负向字典是否随差异化的分布侧联动(如某型在雷池权重为 0 时,其负向行仍须在字典内——字典完整性校验 `reward_table.gd:92-96` 不因权重为零而豁免)。 -4. **若决策方向是纯权重调整**:调整的对账义务批次窗口——恒等式带 [15,40]%、通关率带、条款③⑤重推是否同批执行(7.2 风险 3)。 -5. **heal 权重档位**:现行 3 的相邻整数档(2/4/5)各有不同离散后果(5.1 表)——取整规则(四舍五入/向下/手工指定)与档位粒度须明示。 -6. **clear_blast 区间**:维持 [8,18]、收窄、或塌缩为定值(C2)——机制面三态零成本,属纯体验方差决策。 -7. **tier_min_buff 口径**:ac 行(AC 阈值轴)是否应计入「我侧增益最低档」(5.3 口径注记)——影响行动经济条款②锚值。 -8. **同步流程口径**:smoke 脚本注释与 .gd 行内注释是否纳入 doc-conventions §5 强制收口范围(7.2 风险 2——两处现行漏网皆属此类)。 - ---- - -## 9. 附录:必读资料引用表 - -| 文件(§3 清单) | 本报告引用的关键行 | -|---|---| -| `game/core/reward_economy.gd` | 6, 36-81(roll_board), 62-67, 70-77, 165-172(polarity_row), 177-190(equivalence_supply/tier_min_buff), 184, 195-213(weighted_pick/_rollable_rows) | -| `game/core/minesweeper_rules.gd` | 10(信号), 100-103(initial 通道), 124-137(不变式), 236-274(_do_dig), 258-259, 262-271(resource 通道) | -| `game/core/board_data.gd` | 14(variants), 15(biome), 81-86(safe_cells), 90-103(compute_r0) | -| `game/core/battle_orchestrator.gd` | 75, 131-161(_install_new_board/roll_board 调用), 166-178(facts 缓冲), 200-260(授予段/极性路由), 253-260, 264-269 | -| `game/data/schemas/reward_table.gd` | 13-16(枚举), 53-59(weight/stacks 域), 57, 70-84(区间/中点锚), 86-102(字典完整性/池护栏) | -| `game/data/tables/reward.tres` | #7-122(11 行), 124-145(注释段:同池声明 125 / 频次 126 / 换装 133-135 / 压缩批 137-145) | -| `game/data/tables/status_effects.tres` | #7-88(九行), 90-113(批注:减伤墙/换装/技能池/压缩) | -| `game/data/tables/board_gen.tres` | #7-139(12 行板参数), 141-154(调参登记) | -| `game/data/tables/action_economy.tres` | 7-14(行值), 16-23(AP 压速批注——差异化前提注记 18-19) | -| `game/smoke/reward_expectation.gd` | 4, 9, 21-72(频次实测/口径注——过期基准 4,71-72) | -| `game/smoke/monte_carlo.gd` | 8, 28, 54-68(读数口径) | -| `game/smoke/experiment_density.gd` | 59-69(FakeDB——零 reward 耦合) | -| `game/smoke/level_monte_carlo.gd` | 45-48, 100-109(带口径/完美档断言) | -| `game/smoke/level_autoplay.gd` | 18-21, 85-89(mine_hits 埋点), 122-191(双策略档驱动) | -| `game/smoke/smoke_all.gd` | 91, 1244-1321(负向字典直验——1255-1256, 1284), 1326-1367(资源面断言——1347,1349,1365-1367) | -| `game/smoke/auto_player.gd` | 7(同种子回放等价性), 31-48(完美策略档) | -| `design/gdd/systems/战斗循环/地图战斗资源.md` | 9, 52-61(摇号纪律——61 雷安同池行), 70-88(候选集合), 90-100(极性矩阵), 104-118(五型字典), 122-124(负向即时), 128-141(清图), 153, 157, 187, 191-205(调参表指路化), **207(结构冻结七项)**, 209-217(验收标准——212), 225-234(版本历史 v0.4-v0.8) | -| `design/gdd/systems/战斗循环/战斗结算.md` | 103(对账唯一责任方), 124(极性路由兑付), 142(伏击溢出), 146(标错类型化), 180(奖励定义分离) | -| `design/gdd/systems/战斗循环/增益状态.md` | 132, 138(九行), 154-161(状态行表), 163(四池对称), 165(当量锚), 214-221(调参表) | -| `design/gdd/systems/战斗循环/敌人系统.md` | 151(反灾难护栏), 254(advantage_per_round_cap) | -| `design/gdd/systems/冒险循环/难度曲线与Boss.md` | 9, 21, 35, 100-104(关级恒等式 [15,40]%), 115(通关率带), 153(联合检算), 174, 220-236(投值表), 255-257, 275(EV 重锚纪律) | -| `design/gdd/systems/排雷循环/行动经济.md` | 88, 106-118(五条款), 122-135(推导与锚表) | -| `design/research/proposal-reward-polarity-2026-09-13.md` | 20(R1 行权重/单段钉死), 29(R3 分布先验拍板), 44(雷池权重独立可调), 49(mine_cell 成案), 67-73(预注册指标), 89-98(v4 四点裁决) | -| `design/registry/entities.yaml` | 300-325(reward_table 条目——318 mechanics / 319 api / **320 mvp_content 指路存根+锚行快照**) | -| `design/gdd/06-待办清单.md` | 11, 125-131(连锁溢出), 133(充能归属), 315-319(功能道具渠道), 323(预读深度), 329-335(heal 量级锚), 409(大奖励联动) | -| `docs/doc-conventions.md` | 68(§5 数值纪律·强制收口五条款) | -| 外部(联网核验) | Peglin:[Peglin Wiki – Critical Peg](https://peglin.wiki.gg/wiki/Critical_Peg);Let's! Revolution!:[GameOrNought 评测](https://gameornought.wordpress.com/2023/07/19/lets-revolution-review/)、[Game Developer postmortem](https://www.gamedeveloper.com/production/prototyping-i-let-s-revolution-i-transforming-i-minesweeper-i-into-a-turn-based-strategy-roguelike)、[Steam 页面](https://store.steamcommunity.com/app/1966280) | - ---- - -*报告完。全文未修改任何被引用文件;推演值均已标注〔推演〕;未含任何「应该/建议/推荐」式结论。* diff --git a/design/research/任务书-GP商店房重构-三选一同构化-2026-10-02.md b/design/research/任务书-GP商店房重构-三选一同构化-2026-10-02.md deleted file mode 100644 index 6ad06d64..00000000 --- a/design/research/任务书-GP商店房重构-三选一同构化-2026-10-02.md +++ /dev/null @@ -1,113 +0,0 @@ -# 任务书:GP 商店房重构——三选一同构化(v1.3 定稿——P1-P5+子项 P1-a/P1-b 全裁,待 Alpha 后发令开工) - -> 成文 2026-10-02。裁决权威 = [06-待办清单](../gdd/06-待办清单.md)「GP 商店房重构——三选一同构化」条(2026-10-02 用户裁决,取代 2026-09-20「三件全陈列、无刷新」裁决)+本文 §五 裁决记录。**开工门 = Alpha 到手后 M-4 迭代 11 评估窗口(与同调实施批并列排序,动奖励经济必扰通关率读数);排期随用户发令,本文不占迭代号。批体估 5-5.5 工作日 = 知情超限单批(迭代 9/同调批 P6 先例)。** - -## 一、迭代目标与完成定义 - -**目标一句话**:商店房从「固定三件常驻、按件计档加价」改写为与三选一奖励同构的「进店抽 3、买 1 全重抽、双系数乘法定价」的重复购买循环——奖励=一次免费购买,商店=付费可重复购买,同一个交互语言。 - -**完成定义**:①进店从共享池抽 3 展示(统一随机流新用途标签);②买 1 → 三个全重抽(未买不保留),循环购买以**池库存尽=硬闸、A 链爬价=软闸**双重收敛;③价格 = 基价 × b^(关序−1) × A^(本次进店已购次数)(A/b 表 knob,provisional,ceil 取整);④**共享池账本落地**(P1 改裁:商店池=奖励池同一池,跨渠道消耗,库存=上限);⑤断点兼容(P2 甲:货架+池账本入断点);⑥MC autoplay 策略更新+shop=off/on 分层+通关率双窗复测出讫;⑦连带修订面落文+重闸全绿+出口人闸过。 - -## 二、现状事实(代码级,2026-10-02 核证) - -| 面 | 现状 | 位置 | -|---|---|---| -| 商品面 | **固定三件常驻**:atk_up+1 价 4 / hp_up+3 价 2 / armor_up+1 价 4;买完不消失、可对同件重复购买加档 | `game/data/tables/shop.tres` products 三行 | -| 定价 | 加法公式:`base_price + price_level_bonus(关) + price_increment(步长2) × 该件已购档数` | `game/core/level_runner.gd:620-626`(呈现层禁复算定价公式——只读投影纪律) | -| 购买 | `buy_product`:未知商品/属性键出域/余额不足三拒绝零副作用;出账→加算区→购血同步当前生命封顶 | `level_runner.gd:632-654` | -| 断点 | `shop_purchased`(product_id→档数)入 run 快照七字段;冒险开始清零 | `level_runner.gd:62,145,187`;`save_manager.gd:148,705` | -| rng | 用途标签封闭词表,扩签=改代码+评审(未知标签 assert 致命 EC12)——商店抽签需新标签 | `game/core/rng_service.gd:17,94-98` | -| 模拟面 | MC autoplay 商店策略=「贪心买齐」(读 shop_products 投影逐件买至钱尽),shop_gp_seq 读数面在册 | `game/smoke/level_autoplay.gd:25,212-213,258-273` | -| 冒烟断言 | 现价硬编码断言(现价 6/4/6 等)——新公式下期望随动 | `game/smoke/smoke_all.gd:476,3240-3267` | -| registry | shop_table 行族四轴(gp_drops/level_gp_bonus/products/price_level_bonus),全 provisional-pending-调参批 | `design/registry/entities.yaml:573-585` | - -## 三、设计契约(违反即返工,🔴 触碰=L3 停机) - -1. 🔴 **三轴 doctrine**:**机制件永不入店面**——共享池中的「魔法道具件」对商店抽签域**切边剔除**(奖励面照常,商店面只出数值件);2026-09-22 同调裁决 1 锁死,本批不动摇。GP 袋同剔除(用钱买钱恒负交易,经济无意义;如需保留须用户明示翻案)。 -2. 🔴 **核心层零 await**——MC 逐位对拍漂移即 L3;**shop=off 必须与现行锚逐位一致**(商店关着时零扰动是硬断言——P1-b 乙全冒险一次性库存是 off 态等价的前提,见 §五)。 -3. 🔴 **共享池单点账本**:商店购买与奖励三选一消费**同一库存状态源**(per-adventure stock ledger),两渠道不得各自私记库存;「属性件上限 3/AP 件上限 2 达上限剔牌库」语义统一并入库存数(库存=上限,行为等价断言随 T6 验证)。 -4. **统一随机流纪律**:商店抽签=新用途标签扩签(单盐派生),不私开流、不复用战斗流取数。 -5. **呈现层禁复算定价公式**(现行纪律维持):现价只在 core 现算,UI 只读投影。 -6. **数值主权**:池行值/A/b/取整档全部 provisional 归难度曲线与Boss;本文与任务卡只锁形态。 -7. **断点确定性**:断点写读往返+续玩确定性对拍不破(迭代 8 纪律)。 -8. 素材不入 git;UI 程序占位(P3 甲)用 UiKit 既有件。 - -## 四、范围边界 - -**本批做**:共享池账本(含奖励侧库存接线的行为等价改写)+抽签货架+重抽循环+乘法定价+断点改写+UI 程序占位+MC/读数复测+连带修订面。 - -**本批不做**:商店房节点位置/出现规则改版(关卡节点图不动);GP 掉落面(gp_drops 行族零触碰);**机制件与 GP 袋入店面(切边,永久,除非用户翻案)**;UI 视觉终稿(P3 甲,归表现批);三选一奖励侧的**结构性**改动(其刷新增强归同调批;本批奖励侧只做「上限剔牌→库存账本」的行为等价改写)。 - -## 五、裁决记录(2026-10-02 用户全裁)+ 待裁子项 - -#### P1 【改裁】商店池=奖励池同一池(共享库存池)——用户 10-02 二次裁决,取代 v1.0 甲/乙/丙三案 - -**裁决原文语义**:商店池与三选一奖励池是**同一个池**——某些东西会被买完,或被奖励领完。**可以办到**,且比双池更干净:池=迭代 10 提升池六种现行形态(攻击/生命上限/护甲/GP 袋/魔法道具/行动点件,权重属性/GP 各 3、道具/AP 各 1),商店与奖励从同一池抽件、跨渠道消耗同一库存账本——买完或领完即从池移除。 - -**两处 doctrine/经济切边(随裁决自动生效,用户可翻案)**: -- **魔法道具件对店面切边**:六种之一「魔法道具」=机制件,入店违反三轴 doctrine(09-22 裁决 1「机制件永不入店」锁死)——奖励面照常,商店抽签域剔除。 -- **GP 袋对店面切边**:用钱买钱恒负交易(A 链爬价下尤其无意义)——商店面剔除;奖励面照常。 - -**库存模型(形态锁死,数值 provisional)**:per-adventure 库存账本——属性件各 3 份、AP 件 2 份(=现行「达上限剔牌库」语义并入库存,奖励侧行为等价)、GP 袋/道具件奖励面无限;商店可购面=五种减切边=属性 3+3+3+AP 2 共 **11 份有限库存**;「无限购买」收敛为**钱尽或池空为止**(池空=硬闸、A 链=软闸);商店空货架=合法态(奖励面 GP/道具无限故永不空)。 - -**战略张力(预期设计意图,随批读数注记)**:商店花钱与奖励留件互斥——买一件,奖励面就少一件;「现在买强还是留池等三选一」成为新决策面。 - -**衍生子拍板点【已裁(2026-10-02 用户「没有问题」=双甲)】**: -- **P1-a 每行库存数形态【已裁·甲】**:沿用现行上限口径(属性件 3 份/AP 件 2 份,上限即库存)——off 态等价的前提成立。 -- **P1-b 跨关补给【已裁·甲】**:**全冒险一次性**——现行「全冒险次数上限」语义零变化,shop=off 逐位等价成立;L1 买光则 L2/L3 商店与奖励属性件枯竭(池空硬闸的既定后果,用户知情)。 - -#### P2 断点粒度【已裁·甲】 - -**甲·货架三件+池账本入断点**:续玩恢复原货架与库存态——「中断恢复至最近停点」纪律同向,确定性对拍最友好;断点域扩列(3 商品 id+库存账本)。 - -#### P3 UI 档位【已裁·甲】 - -**甲·程序占位**:UiKit 既有行板件改三选一卡面,视觉终稿归表现批,不卡样张闸。 - -#### P4 乘法价格取整【已裁·甲】 - -**甲·ceil 向上取整**:玩家不利向,杜绝「差 1 GP 反复钓」套利角。 - -#### P5 A/b 系数研究时点【已裁·甲】 - -**甲·随批立项先跑**:T6 挂 game-balancer 研究卡——定价锚沿用现行「正常运气/运气极好可购档数」期望读数纪律,方向 A≈1.5-2 ≫ b≈1.1,研究出提案值→用户拍板→落表。 - -## 六、任务卡(T0–T8) - -| 卡 | 内容 | 估时 | -|---|---|---| -| T0 | 开工基线:worktree+归属核对+冒烟复读+MC 现行锚对拍基准记档 | 0.5h | -| T1 | **表与 schema**:共享池账本建模(六种行+库存字段;products 行族退役入池行族)+A/b 两 knob+registry shop_table 行族改写+rng 扩签 `shop_draw` | 0.5-1d | -| T2 | **共享池账本与奖励侧接线**:per-adventure 库存账本(单点状态源);三选一 pick 改读库存(上限剔牌逻辑退役,行为等价断言);商店侧抽签域=切边后五种子集 | 1d | -| T3 | **抽签货架**:进店抽 3(无放回)+买 1 全重抽循环+池空硬闸/空货架合法态+shop=off 直通开关面 | 0.5d | -| T4 | **乘法定价**:基价×b^(关序−1)×A^(进店已购次数)(P4 ceil);price_level_bonus/price_increment 退役改写;`_shop_purchased`→进店购买次计数 | 0.5d | -| T5 | **UI 程序占位**(P3 甲):商店覆盖层三选一卡面+买后重抽+现价贴卡+库存余量呈现(就近原则);wallet_changed 事件链适配;ui_click_probe 断言 | 0.5-1d | -| T6 | **断点改写**(P2 甲):货架+A 链+池账本入 run 快照+写读往返+续玩确定性对拍断言 | 0.5d | -| T7 | **MC 与读数**:autoplay 贪心策略适配(共享池机会成本注记:买件=奖励面少一件);shop=off/on 分层;通关率双窗复测;GP 供给对账复跑;A/b 研究卡(P5 甲)出提案值呈报 | 1d | -| T8 | **连带修订面**:冒险结构 GP 冒险账本节/关卡节点地图 商店房词条/难度曲线与Boss 商店与 GP 经济杠杆节/node-reward.md(池共享改写 v2.2)/registry/06 收口 | 0.5d | -| T9 | 重闸+出口人闸:全量轻闸+doc 三闸+熵增闸+MC 对拍+出口检查单+代拍板追认 | 0.5h+人闸 | - -## 七、验证闸 - -轻闸(每轮):run_smoke 全量+ui_input_probe+ui_click_probe(商店覆盖层触碰 presentation)。重闸(T9):全量+doc 三闸零新增+熵增闸+MC 逐位对拍(**shop=off 与现行锚逐位一致**硬断言——成立前提=P1-b 甲全冒险一次性库存+库存制/上限剔牌制奖励侧行为逐位等价断言随 T2 验证)。读数纪律:shop=off 续用现行带;shop=on 带平移归调参批(shop 分层先例同法);现价硬编码冒烟断言改公式推导或随表重锚。 - -## 八、异常分级 - -L1 自救一次重试;L2 连续 3 次同红灯记录继续+升级呈报;L3 停机(触发面:契约 1-3、shop=off 锚漂移、断点确定性破、库存制与上限剔牌制奖励侧不等价且无法调和、P1-a/P1-b 子项裁乙引发读数面超预期漂移)。 - -## 九、代拍板白名单 - -可代拍:池权重与库存具体数值(形态已锁、provisional 归调参批)、无放回抽 3 的回补细节、空货架呈现文案、冒烟断言期望随表重锚、doc 措辞。禁代拍:P1/P2/P3/P4/P5 裁决本体、**P1-a/P1-b 子项**、切边面翻案(机制件/GP 袋回店面须用户明示)、带值、A/b 语义变更。 - -## 十、连带修订面(执行于 T7) - -`冒险结构.md`(GP 冒险账本节+商店定价公式换代)/ `关卡节点地图.md`(商店房词条改写)/ `难度曲线与Boss.md`(商店与 GP 经济杠杆节——shop=on 带平移投值义务)/ `node-reward.md`(池共享改写 v2.2——共享库存账本+切边注记)/ `registry/entities.yaml`(shop_table 行族改写+共享池账本+rng 标签注记)/ `06-待办清单.md`(本条收口)/ 断点 v2 域注记随 save 文档。 - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1.0(草案) | 2026-10-02 | 成文:P1-P5 拍板点呈报(池扩容/断点粒度/UI 档位/取整/研究时点)+T0-T8;现状按 2026-10-02 代码核证 | -| v1.1 | 2026-10-02 | §五由四列表格展开为逐项详述节(每案含内容+代价+联动+推荐标注——拍板呈报规范加厚,裁决内容零变化) | -| v1.2 | 2026-10-02 | **P1-P5 全裁落文**:P1 改裁**共享池**(商店池=奖励池同一池,跨渠道消耗,库存=上限;魔法道具件/GP 袋对店面切边);P2-P5 甲落锁;新增子项 P1-a(库存数形态)/P1-b(跨关补给)待裁;T0-T9 卡随裁重排(+共享池账本与奖励侧接线);「无限购买」收敛为钱尽或池空 | -| v1.3 | 2026-10-02 | **子项双甲落锁,全裁定稿**:P1-a 甲(库存=现行上限口径 3/2)/P1-b 甲(全冒险一次性,L1 买光则后关枯竭为池空硬闸既定后果,用户知情)——裁决面全闭,开工门=Alpha 后发令 | diff --git a/design/research/任务书-全局作用域变异首发批-2026-10-04.md b/design/research/任务书-全局作用域变异首发批-2026-10-04.md deleted file mode 100644 index 767af154..00000000 --- a/design/research/任务书-全局作用域变异首发批-2026-10-04.md +++ /dev/null @@ -1,106 +0,0 @@ -# 任务书:全局作用域变异首发批(迭代 14 ③号卡) - -> 一句话:L2/L3 Boss 图恒定一型整图变异(scope=global 首发型=资源面微贫向偏斜「险地肥矿」),替换 region 布置;开战横幅+HUD 常驻角标+帮助手册行三层预告;带A 判读后置 M-4 只测不判。 -> 状态:**裁决已齐零待裁**(2026-10-04 用户:调研报告拍板点 P1-P8+盘问前沿 Q1-Q4 全按推荐案落)——待用户发令开工(U0)。 -> 归属:迭代 14 ③号卡(roadmap M-4 表已编卡;批内序位待用户排;门=迭代 13 出口)。 -> 事实源:[调研-全局作用域变异设计空间-2026-10-04.md](调研-全局作用域变异设计空间-2026-10-04.md) v1.1(§7 裁决记录+§8 实现面补强注记为本任务书直接依据)。本任务书按逐段自包含原则重录裁决与参数,机理与外部先例论证不重复展开。 - -## 一、立项依据与裁决记录(已齐,实施批零拍板点) - -**立项链**:06「全局作用域变异」条(2026-09-19 拍板「Boss 图变异暂无设计想法,留 Alpha 再设计」)→ 2026-10-04 设计空间调研(六案+四先例一手核证)→ **用户裁决 P1-P8+Q1-Q4 全按推荐案** → 编入迭代 14 ③号卡(本批)→ 本任务书。 - -| # | 裁决 | 内容 | -|---|---|---| -| P1 | 立项 | 撤「Alpha 再设计」挂起,立项首发批 | -| P2 | 首发型=案A 资源面 | 经 Q1 勘误换形=**微贫向偏斜**(见 §二) | -| P3 | **替换制** | scope=global 上板的 Boss/精英图**不再布 region 片**(每图一型纪律的板级推广:普通图=region,Boss/精英图=global)——L2 完美 Boss 承伤 55.8% 已越 ≤50% 带,叠加制火上浇油不采纳 | -| P4 | 恒定制+固定演进 | L2/L3 Boss 图 100% 带一型;首发批 L2/L3 同上一型(Q2 甲);类型是配置事实非掷定结果——Boss 图 `variant_place` 流零取号=合法态 | -| P5 | 三层预告 | 开战横幅一行+HUD 常驻角标+帮助手册一行(region 遭遇式口径对整图语义不适用——藏着等于暗改规则) | -| P6 | L1 Boss 免疫 | 带 B(白板 L1 通过率 [50,85],首关=过滤器不是墙)教学保护;门控第三维按关卡+节点身份双重约束 | -| P7 | 带 A 杠杆注册 M-4 | 全局变异注册进全局难度批(M-4)杠杆表;落地批 off/on 对拍只测不判,带 A 收敛判读统一归 M-4(Q4 甲) | -| P8 | 远期案留档 | 案B 诡雷(远期)/案E 信息面(冻结,解封条件三件在案)/案C 规则改写(远期概念池)按调研报告档位留档;案F 结构面不进变异框架 | -| Q1 | 案A 换形=微贫向偏斜 | v1.0「沃土+雷密对冲」形**勘误作废**——雷数与密度是生成器事实(board_generator 产物),变异布置在装板序第 4 步(生成之后)加不了雷;改生成端=破坏生成/布置两阶段结构(与案F 否决同一条理由)。定稿形见 §二 | -| Q2 | L2/L3 双关同型 | 关间台阶纪律由 L3 既有新内容(落石/矿尘/灰矮人/钩爪恐魔)满足;同型双关白送同型对照读数 | -| Q3 | 四件应对件失效=知情代价 | 替换制+案A(无地形伤)⇒ 迭代 12 四件地形应对件(地脉采撷/荆棘编织者/净化工兵/熔火之躯)在 Boss 图无的放矢——主战场普通图(每关 6/7 张,Boss 覆盖 1/7),registry/调参日志随批登记知情,MC on 档读数观察 | -| Q4 | 独立批先行 | 本批落地与读数取证独立先行,带 A 收敛判读后置 M-4(与判式换代批②号卡解绑) | -| 代拍 | 偏运硬币合成序 | 图级偏斜投影先、件级 luck_bias 后(环境事实先定型、玩家构筑叠其上);随批逐位锚登记,实现期可翻 | - -## 二、形态定稿(首发型=案A 资源面·微贫向偏斜) - -**语义**:整图修摇号分布(板级作用域),不修任何格子数据、不动生成端。正向格面池**合计守恒**(77,挖掘风险批口径——clear_blast 系清图槽不挂格),内部结构倾斜: - -| 面 | 行 | 处理 | -|---|---|---| -| 进攻族(上浮) | attack_up / spark_aoe / pierce_strike / magic_bolt | 权重等比上浮 | -| 生存族(下调) | heal_minor / ac_up | 权重按 effect_value% 下调 | -| 豁免(白名单) | weaken / gp_gain / ap_up | 权重恒不动(gp/action 豁免防商店分层带联动破线;weaken 维持报告 §8-2 口径,provisional) | -| 负向九行 | — | 不参与摇号口径不变,零触碰 | - -下调量按进攻族原权重比例分配,重归一到原合计 77。**总期望微降 3-5% 为 provisional 设计目标**(生存族当量价值高于进攻族的静态估计)——精确方向与幅度归 T7 读数批判读(只测不判)。玩家体验=「这层奶薄、枪很肥」:生存资源变薄、进攻资源变肥,转向用进攻续命的主动策略——不是纯挨打(深挖钻头净负期望二连反馈红线已避开)。 - -**替换制**:Boss/精英图布置全局型时跳过 region 布置;普通图 region 路径逐位不变。**兜底回落**:Boss/精英图全局候选池为空时回落 region 布置(保守向后兼容,防配置缺行静默裸奔——provisional,与普通图「池空=静默零布置」合法态口径并行)。 - -**承载**:`BoardData` 加板级字段 `board_variants: Array[String]`(板级只读快照,随图生灭同 `variants`);门控第三维=节点身份(normal/boss/elite,读 encounter 既有字段)——normal 候选池遇 scope=global 行静默跳过(筛空回落池空合法态,零报错零警告);**不动 level.tres 结构**(Boss→变异绑定是门控结果,非表行)。boss 与 elite 前向兼容进同一全局池,首发批只放 boss。 - -**三层预告**:①开战横幅一行(board_variants 非空时显示;减动效开=静态化,轮横幅先例)②HUD 常驻角标(战斗全程可见防中局遗忘;摆位 provisional 归 HUD 框架批内定,空态隐藏=流派件段先例)③帮助手册一行(教学定稿批 P4 丙「手册零再教」承载位,零交互教学)。 - -**MC 三态对账链**(读数批依据):现行锚(旧·Boss 图带 region 片)→ **off**(effect_value=0:替换制生效+偏斜中性=零变异 Boss 图)→ **on**(替换制+偏斜 30)。off 隔离替换制单项效应、on/off 差值=偏斜效应;off 与现行锚语义不同(Boss 图少了 region 片)须在读数报告注明,旧 Boss 读数(含台账 96 承伤 55.8%)换代作废只测不判。 - -## 三、参数面(一行新类型+一枚新旋钮,走 ConfigDB) - -| 参数 | 域(建议) | 现值(建议投值) | 说明 | -|---|---|---|---| -| variation.tres 新行 variant_id | — | skewed_veins | display_name=贫矿脉(provisional 文案归本地化批);scope=global;unlock_level=2;effect=resource_face;trigger=always(新词);placement=any;board_types=∅ 通配(L2/L3 双关同型由 unlock_level+门控节点身份承载);counter_items 恒空 | -| effect_value(resource_face 行语义) | int [0, 50] | 30 | 生存族权重下调百分比;0=中性合法态(off 锚用)。**不适用 flat_damage 的 [1,9] 加法核互锁**——新域随本表定稿;加载期校验违例致命 | - -域值与投值实施批 T0 定稿;effect_value 为调参项(非结构冻结),后续走调参不走修订。 - -## 四、T 卡分解(估时合计 ≈5.75 日;切分预案见末尾) - -| 卡 | 内容 | 估时 | -|---|---|---| -| T0 | **schema 词表与新行**:variation_table.gd——EFFECTS 加 `resource_face`、TRIGGERS 加 `always`;跨字段互锁三条(resource_face ⇒ scope=global;scope=global ⇒ placement=any 且 trigger=always;scope=global ⇒ effect=resource_face)+ effect_value 新域 [0,50] 校验(互锁顺序须保证既有六 region 行零误伤);variation.tres 加 skewed_veins 行;registry variation_table 条目换代 | 0.5d | -| T1 | **板级承载+门控第三维**:BoardData 加 `board_variants` 字段+访问器;config_db.variant_pool 扩节点身份参数(battle_orchestrator 调用点同步);普通图遇 global 行跳过断言;boss/elite 全局池分离逻辑 | 0.5d | -| T2 | **布置段全局分支+替换制**:_place_variants 加 Boss/精英分支——全局池恰一行=确定性取用(不消费 variant_place 流,零取号合法态)→ 写 board_variants+跳过 region 布置;全局池空回落 region(兜底);普通图路径零改动 | 0.75d | -| T3 | **资源面偏斜投影+合成序**:reward_economy 图级投影(effect_value 单旋钮:生存族 ×(1−v/100)、进攻族等比上浮、重归一 77、白名单豁免);合成序=图级先(乘法偏斜)、件级后(luck_bias 加法)——与⑥A4 配比批全链序相容(全链=表值→玩家配比差值→包络钳制→**图级变异偏斜**→同调硬币偏置;本批落地中段+末段衔接,前两段⑥批落位前缺位=逐位等价图级直投);**值面静态推演**呈报(期望变化方向与幅度,3-5% provisional 目标的静态核对) | 1d | -| T4 | **呈现三层**:开战横幅(战斗初始化段一行+减动效双态)+HUD 常驻角标(空态隐藏)+帮助手册一行;文案全 provisional 归本地化批 | 0.75d | -| T5 | **文档批七正主+06 收口**:地形变异.md v0.7(类型清单加行+scope=global 语义节+「每图一型」板级推广+替换制注记)/难度曲线与Boss.md(P2「全局投放计划」行升级现行+调参表 resource_face 行 provisional)/registry(variation_table+variant_pool_gate 两条件目)/HUD框架.md(横幅+角标义务)/教学引导.md(手册行)/行动经济.md(P2 价目钩子行注记=案D 留位不启用)/06「全局作用域变异」条解决移除 | 0.5d | -| T6 | **重闸:断言+确定性回归**:smoke 新段(T0-T4 全断言集中:互锁负样本/门控兜底/替换制 Boss 图恰一行+零 region 格/零取号/白名单 off 逐位零扰动/合成序构造例/三层呈现/呈现件 Boss 图闲置=无格子级变异标记);**普通图布置逐位回归断言**(同种子布置快照对拍批前基线——golden 或重导);普通图 region 布置与资源摇号全链路确定性断言 | 1d | -| T7 | **MC 读数批(可切独立后批)**:三态对账链取证——现行锚(只读既有)/off/on 双档 N=60 同种子配对;读数面=战役通关率+Boss 场承伤+奖励占比带 [15,40] 复算+偏斜期望实测;**只测不判**(带 A 判读归 M-4,Q4 甲);读数报告注明 off 语义(§二);⚠ 跑批须用户批准(先推算后重跑) | 0.5d | -| T8 | **出口**:人闸材料(实机目检清单:L2 Boss 横幅/角标/「奶薄枪肥」体感/手册行/L1 Boss 无变异/普通图零角标+provisional 追认单=偏斜幅度 30/命名/文案/N=60)+registry/调参日志登记 Q3 知情代价+roadmap ③卡状态更新 | 0.25d | - -**切分预案**:T0-T6+T8 = 实施批 ≈5.25d;T7 = 读数批 ≈0.5d 可切独立后批(读数与判读本就后置 M-4;切分时实施批出口闸=冒烟+doc 三闸+确定性回归断言)。 - -## 五、拍板点(零) - -裁决全落(§一)。全部 provisional 值(偏斜幅度 30/variant 命名/横幅与角标文案/角标摆位/N=60/兜底回落行为)随批出口追认单呈报,不阻塞实施。 - -## 六、批级验收标准 - -- 替换制生效:Boss 图恰一行 board_variants+零 region 变异格;普通图 region 路径逐位不变(布置快照对拍批前基线全绿)。 -- off 态零扰动:effect_value=0 时资源摇号结果与无偏斜逐位相同;luck_bias=0 叠加仍逐位相同;白名单三行任何状态下逐位不动。 -- 门控正确:普通图遇 global 行静默跳过零报错;L1 Boss 零全局变异(免疫);Boss 图全局池空回落 region(兜底断言)。 -- 合计守恒:偏斜后正向池权重合计=77(基准口径);负向行不参与摇号口径不变。 -- 互锁零误伤:既有六 region 行加载全绿;新互锁负样本全部拒绝。 -- 确定性复现:同种子同图两遍布置/摇号逐位相同;Boss 图 variant_place 零取号断言。 -- 闸全绿:冒烟+run_all 关联套件+doc 三闸零新增(loop 开发挂出口闸,两入口铁规)。 -- 文档七正主随批落籍;06 条目收口移除。 - -## 七、红线与停机点 - -**红线(违反即停)**: -1. 排雷玩法/棋盘生成器零 diff(零特判原则+生成/布置两阶段结构——board_generator.gd 与 minesweeper_rules.gd 不许出现本批任何改动)。 -2. 数字恒真与可推理率 ≥0.85 绝对锚零触碰。 -3. 雷安同池+池成员集合不变(九型不增删,偏斜只动六行权重数值);负向行不参与摇号、负向兑付零改动。 -4. DamageController 零改(案A 无伤害面);直伤雷 6-8-8 与判式批 δ=1.25 零交集。 -5. 禁触碰信息型(R4 甲:信息型永不对冲永不清除——案E 冻结,本批零实现)。 -6. 清图槽(clear_default/clear_blast)与完美排雷第二份兑付零改动(独立池,不受偏斜影响)。 - -**停机点**: -- **S1** = 普通图布置/摇号逐位漂移(回归破)→ 停工归因,禁带病前进。 -- **S2** = 读数批占比带 [15,40] 越界或 Boss 承伤异常 → 只呈报不回调(行值 provisional 归曲线调参批;带 A 判读归 M-4)。 -- **S3** = 新互锁误伤既有 region 行加载 → 停工修互锁顺序。 - -## 八、并行面 - -迭代 14 内①初始展开收窄批(生成器域)/②挖掘风险判式换代批(兑付公式 δ 一处)/③本批(布置段+资源摇号投影+呈现)三轴互不撞;**②与③共享 battle_orchestrator.gd 不同区域**(兑付公式 vs 布置段)——合并序后落者解撞,预期零语义冲突。④技能池执行批/⑤提灯接线小卡同理。**⑥A4 配比预设批开工门=②③出口(③=本批)**——本批落地的图级偏斜投影点是⑥合成链(表值→配比差值→包络→图级偏斜→硬币偏置)的中段,序位上③应先于⑥开工;两批同用摇号投影点,⑥落位时本批投影函数留参承接(前两段缺位=逐位等价图级直投)。读数批各自分开归因(roadmap ③卡在案)。 diff --git a/design/research/任务书-双层BD实施批-2026-10-03.md b/design/research/任务书-双层BD实施批-2026-10-03.md deleted file mode 100644 index fd622c99..00000000 --- a/design/research/任务书-双层BD实施批-2026-10-03.md +++ /dev/null @@ -1,132 +0,0 @@ -# 任务书:双层 BD 实施批(迭代 12) - -- 日期:2026-10-03 -- 设计事实源:[双层BD体系-整合定稿-2026-10-03.md](双层BD体系-整合定稿-2026-10-03.md)(双模型并行调研仲裁版) -- 状态:**五裁全落(2026-10-03 用户):R1 甲/R2 乙/R3 乙/R4 甲/R5 甲——任务书定稿,待用户发令升 loop 计划书 → T0 开工**;已编入 roadmap 迭代 12(反制批位移承接位);R2 乙=两层全入本迭代,超软时间盒在批次一出口切 12/12b。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」(任务书退役不丢内容) -- **loop 计划书八件对照(2026-10-03 核验齐备)**:①目标与完成定义=§一 ②现状事实(代码级)=整合定稿 §2.2 锚点+§三开工复核条款 ③设计契约(🔴 停机级)=§二 ④范围边界=§三 ⑤任务卡 T0..Tn 逐卡估时=§四 ⑥验证闸=§五 ⑦异常分级=§六 ⑧代拍板白名单=§七;§八/§九=裁定存档。升格动作=T0(复制 `.zcode/plans/m4-iter12-loop-plan-<日期>.md`+计划书头+U0 呈批节) -- 数值全 provisional:本批只锁机制形态与交互关系,具体数字归数值批/游戏平衡师联审;所有 ~N 为占位 - ---- - -## 一、目标与完成定义 - -一句话目标:局内 BD 从「纯数值件」扩为「七流派+标签档位」的构筑面,地形变异从纯税转第三资源带(承接被废反制批的应对义务);局外三体系(锻造/钥石/同调)收敛为一棵营地天赋树。 - -完成定义: -1. 七核心流派各 ≥3 件入局内随机渠道,标签+档位激活引擎可判「成型」; -2. 七流派成型态 MC 读数可判、红线自检①全流派通过(R3 乙单锚全量); -3. 天赋树可购可切可迁移(R1 甲融合案落码)、存档 v4 往返幂等(R2 乙=本迭代批次二); -4. 文档正主七处吸收落文(见整合定稿 §文档面); -5. 批末闸:冒烟+run_all+探针+doc 三闸/熵增零新增;MC 锚按两入口铁规只在本批数值验证点触发。 - -## 二、红线(违反即返工,🔴 触碰=L3 停机) - -1. 🔴 **扫雷推理保持胜利主因**:任何件不得使「按数字推理雷位」降格为次要变量;每流派 ≥1 件挂扫雷结算触发点;信息型地形对冲边界=R4 裁定面。 -2. 🔴 **层级纪律**:流派件只走局内随机渠道(三选一/商店/格面);局外树只放全局规则件;两层不互相代位;流派件禁入同调位。 -3. 🔴 **零战斗期新动词**:流派表达全部经「扫雷决策→自动结算」间接生效;不新增手动闪避/主动施法。 -4. **数值 provisional**:机制形态本批锁死,数值批联调;本批 MC 只验「分岔方向」不验具体值。 - -## 三、前置依赖(开工闸)与范围边界 - -| 依赖 | 状态 | 影响 | -|---|---|---| -| 迭代 11 出口(同调批→商店批→迷雾批三批串行) | 未开工 | 本批门=迭代 11 出口 | -| M-4 数值批:70/25/5 令牌池落地(node-reward v2.2) | 已裁待实施 | 机制件带挂进令牌池稀有/罕见档;令牌池未落地则机制件带延后 | -| 商店重构批共享池(迭代 11 ②) | 任务书在案 | 商店机制件上架+保底逻辑建在其终局池上 | -| 同调实施批 0/3+谓词表(迭代 11 ①) | 任务书在案 | (批次二天赋树)树批收编 Socket 节点的输入;同调批按已裁任务书独立落地不为树批预留 | - -**范围边界(以下均不在本批,已在 06 正主登记,收到即停、不顺手做)**: -- 喂雷流/巢穴经济流(R5 甲——06「双层 BD 实施批」条遗留登记) -- 二期件组六件(跨阶段回流/穿甲锥/孤注一掷/悬浮魔法球/置换服务/件派生动词白名单)+三期合成进化+淘金流立派(06「双层 BD 延期与备选内容总登记」) -- 信息型清除件族/深挖钻头「信息 −1」原案/概率收窄派生动词(R4 甲冻结组,同上条) -- 魔法道具同调位体系重设计(本批只加一句「流派件禁入同调位」边界说明;重设计归同调批 2026-10-02 任务书) -- 数值终值与验收带(本批 provisional 投值;终审归 M-4 数值批/游戏平衡师联审) -- 树内容门区扩量(首期树=收编 item_unlocks 现有解锁+骨架+三脉+Fork 4-6 槽;新道具/新板型等内容件不入本批) -- 营地树 UI 美术终稿(T9 只做功能重构+程序占位呈现;视觉终稿归资产升档决策窗) - -## 四、任务卡(T0-T10 逐卡估时;已裁口径:R3 乙=七流派批次一全量铺,R2 乙=天赋树批次二并入本迭代) - -> **估时合计**(provisional,工作日):批次一 T0-T7 ≈ 6 日——**超软时间盒(≤3 日/迭代),按 12/12b 切分为预期执行**,切分点=T7 出口闸;批次二 T8-T10 ≈ 4 日。卡数 11 超「3-8 更改任务」粒度界——按迭代 9 先例两段式组织一次合并,段排布随 loop 计划书 U0 追认。 - -**批次一(局内流派全量铺量,T0-T7,估 ~6 工作日)** -- **T0** 计划书升格+基线确认(估 ~0.5 日):升格 `.zcode/plans/m4-iter12-loop-plan-<日期>.md`(本任务书八件已齐,补计划书头+U0 呈批节)→呈 U0 批准;五裁结果复核(R1 甲/R2 乙/R3 乙/R4 甲/R5 甲均已落任务书);代码锚点复核(整合定稿 §2.2 行号);MC 锚规划(遵 316-f 裁:策略 1 级最稀有 2 级最左;只在本批触发点跑 normal 档)。 -- **T1** 机制件基建(估 ~1 日):新 schema relic_table(件 id/稀有度〔普通/稀有/罕见〕/流派标签/挂点枚举/正负双修参数/档位贡献)+标签档位激活引擎(集 2 件→档一/4 件→档二,散件单体保底)+三选一池机制件带接线(挂令牌池稀有/罕见档配额)。 -- **T2** 魔法流四件+英雄侧 rider 配方(估 ~0.5 日):奥术余烬/魔网织者/湛蓝誓约/魔能共鸣;damage_controller 扩 hero_attack_rider(enemy_skill rider 为对称先例);克制矩阵联动。单元测试+rider 必中不掷骰断言。 -- **T3** 标旗流四件+旗伤开单点(估 ~0.5 日):雷区图谱/猎巢人/完美布防/战旗军规;flag_judged 批后开单(复用 board_typed 零新配方);巢穴控制数查询口。单元测试+盲标盈亏平衡断言(信息不足板旗伤期望低于开格轮)。 -- **T4** 穿刺流四件+普攻流四件(估 ~1 日):贯穿射击(溢出弹射)/连珠矢/猎弱本能(折扣档前移)/猎手刺剑 + 矿工的执拗/矿工重锤/专注(免掷骰改写)/碎甲震击;掷骰路径改写挂点。单元测试+重锤高 AC 负期望断言。 -- **T5** 开格流+蓄力流(估 ~1 日):贪婪矿灯/矿脉直觉(连击计数)/赌徒的血签(件乘区槽)+深挖钻头(**R4 甲已裁=改设计为非信息税形态**:深层资源代价候选=开掘需额外 ~1 AP 或踩雷惩罚加重,数值批择一投值;原「雷位信息 −1」案已冻结迁 06 备选登记)+整备军备(AP 结转段+cleared 作废口径改写)/铁壁整备/厚积薄发;mine_hit 监听(普攻执拗清零判定同口)。 -- **T6** 吞噬流+地形转化件+商店保底(估 ~1 日):地脉采撷/荆棘编织者/净化工兵(**R4 甲已裁=仅限伤害型** thorn/magma/rockfall)/熔火之躯(variant 监听反打);reward.tres 地脉补偿行;商店保底(本关变异交互件必刷,前置=商店批落地)。信息型清除工具件族**不做**(R4 甲,备选案迁 06)。 -- **T7** 批次一 MC 锚+全流派红线自检+出口(估 ~0.5 日):七流派成型态通关率分岔全读数(验收带参照:成型流派不得 >基线 +5pp 除有专项论证;每流派场均开格/旗占比不塌陷);报告 design/qa/;批次一出口闸(切 12/12b 判定点)。 - -**批次二(天赋树+存档 v4+营地 UI,T8-T10,估 ~4 工作日)** -- **T8** 树系统(R1 甲融合案)(估 ~1.5 日):节点表 schema(脉/币种/档位/前置/Fork 面)+主干脊柱 row-gating+锻造/钥石/同调三脉+A/B Fork 集中同调脉+彩蛋觉醒节点 ≤3;四线(生命/攻击/命中/护甲)+首期 Fork 4-6 槽落值(provisional)。 -- **T9** 存档 v3→v4+三体系迁移(估 ~1.5 日):tree 域+差额补偿+旧域只读一版+迁移链自注册;营地 UI 重构(三柜台→一树;装配交互不动)。 -- **T10** 树验证+批末出口(估 ~1 日):v2/v3 存档迁移幂等断言、A/B 面切换后读数分岔(两侧差 <~3pp)、批末闸(冒烟+run_all+探针+doc 三闸/熵增)+目检人闸(七流派成型观感+件文案+营地树 UI)+**R4 复查闸**:呈报信息型三型(藤蔓/烬覆/矿尘)真人行为读数(绕开率/挫败信号),仅呈报不提案。 - -## 五、验证闸 - -1. 每卡:单元测试+相关探针;批次末:MC 锚(只测本批触发点,normal 档为主——两入口铁规)。 -2. 红线自检①硬断言:各流派成型态「场均安全开格数」「旗占比」不得显著塌陷(阈值数值批定,方向本批锁)。 -3. 档位激活确定性断言:同集合同标签件集→同档位状态(MC 逐位可复放)。 -4. 批末:冒烟+run_all 15 套+探针+doc 三闸/熵增零新增;目检人闸=用户实机(流派成型观感/件文案/营地树 UI)。 - -## 六、异常分级 - -- L1(表值/文案):批内自修自记。 -- L2(机制形态与任务书冲突):停卡呈报,改任务书再继续。 -- L3(🔴 红线触碰/R1-R5 改选引发的连锁):停机呈报用户。 - -## 七、代拍板白名单(批内可自裁,台账留痕) - -1. 件文案/命名微调(机制不变)。 -2. 档位效果具体数值 provisional 投值(数值批终审)。 -3. 探针断言阈值随读数校准(方向不改)。 -4. 非红线交互细则(如同持件优先级)按整合定稿推荐案落,登记待追认。 - -## 八、裁断点 R1-R5 裁定状态 - -| # | 裁断点 | 裁定 | 内容 | -|---|--------|------|------| -| R1 | 树形态 | **甲(2026-10-03 用户)** | 融合案:主干脊柱 row-gating+锻造/钥石/同调三脉+彩蛋 ≤3+区制语义(A/B 集中同调脉、命中第四线、双币铁律、MC 两侧差 <~3pp) | -| R2 | 迭代 12 范围 | **乙(2026-10-03 用户)** | 两层全入迭代 12(批次一 T0-T7 局内流派+批次二 T8-T10 天赋树);超软时间盒切 12/12b,切分点=批次一出口 | -| R3 | 首批流派节奏 | **乙(2026-10-03 用户)** | 七流派批次一全量铺(放弃「魔法+标旗先行验证对」两段铺法;管线风险由 T1 基建卡先行+每卡单元测试吸收) | -| R4 | 信息型地形+信息类边界 | **甲(2026-10-03 用户)** | 永不对冲:净化工兵仅限伤害型;信息型清除工具件族不做;深挖钻头改非信息税设计;信息类派生动词维持全禁;附复查闸(批次二出口呈报信息型真人读数,仅呈报不提案);乙案备选内容已迁 06「双层 BD 延期与备选内容总登记」 | -| R5 | 喂雷流(实验性) | **甲(2026-10-03 用户)** | 迭代 12 不做;06 已留正式待办(重启条件+砍除判据),设计存整合定稿 §2.3 S8 | - -## 九、R4 裁断详报:信息型地形与信息类边界(2026-10-03 呈报待裁) - -### 9.1 背景 - -- **信息型地形是什么**:六变异中三型——藤蔓缠绕(L1)/烬覆(L2)/矿尘(L3),效果=hide_number:该格挖开后显示「?」而非数字(触发 on_number_shown;不进伤害结算,纯信息剥夺,board_view.gd:192-200/:692)。它们是每关的信息轴难度:数字是扫雷推理的唯一解题原料,遮蔽数字=在瞎区里做推理。 -- **为什么现在没手段**:反制道具已终裁废弃(层级错配:跨局常驻件对抗关卡局部威胁);counter_items 恒空=合法态。信息型三型今天是**纯税**(无解、必吃)。 -- **R4 问题**:伤害型三型(荆棘/岩浆/落石)已由吞噬流转成「第三资源带」(明码定价:开格前有危险红角标可见)。**同样的局内件待遇给不给信息型三型**——即玩家能不能通过局内随机获取的件,清除/穿透遮蔽、拿回数字?附带裁决「信息类」的边界在哪(派生动词、自携信息税件)。 - -### 9.2 具体改动点(R4 落在哪五处) - -| # | 改动点 | R4 甲(永不对冲) | R4 乙(限量可对冲) | -|---|--------|-------------------|---------------------| -| 1 | **净化工兵**(吞噬流件 3,T6):标中旗中和相邻地形格 | 范围锁伤害型(现行文本) | 扩展至信息型:标中旗可清除相邻一格藤蔓/烬覆/矿尘(恢复数字),限价限量(如每关 ~N 次) | -| 2 | **信息型清除工具件族**(新件,T6) | **不做**——该件族不存在 | 做一件独立工具件(如「除尘风箱」稀有):限次清除遮蔽;只在局内随机渠道+对应关卡商店保底 | -| 3 | **深挖钻头**(开格流件 3,T5):开深层资源但「雷位信息 −1」(主动吃信息税换收益) | 改设计——信息税换成别的代价(如额外 AP 成本/踩雷惩罚加重),或退役(开格流剩 3 件+档位引擎仍够成型) | 保留原设计(自携信息税=风险重定价合法形态) | -| 4 | **二期件派生动词白名单边界**(§2.4 B 级预案) | 禁一切信息类派生动词(探测/收窄/重开已揭数字全禁) | 允许「概率收窄」类(花 AP 把某格是雷概率收窄,非确定信息);确定性信息仍禁 | -| 5 | **文档落文口径**:地形变异.md「第三资源带」节+红线①表述 | 「伤害型=资源带;信息型=永久税(红线①看门税,设计上不可对冲)」 | 「六型皆入资源带;信息型清除限价限量」+红线①附「限量信息对冲」豁免条款 | - -> 不在 R4 裁决面内但受同一红线监控:天赋树 Fork「稳健拓荒」B 面(每关开局点亮 ~2 安全格)——属局外全局规则件,量级小,已有反例条件监控(A-3/A-4),两案下都保留。 - -### 9.3 两案影响对照 - -| 维度 | 甲(永不对冲) | 乙(限量可对冲) | -|------|----------------|------------------| -| 红线①(推理主因) | 最稳:信息遮蔽区推理仍是唯一解;遮蔽税的难度意义永久成立 | 有实质风险:清除=花钱买回信息,若定价/获取率偏松,信息型退化成「小 GP 罚款」,L3 后期退化回标准扫雷;护栏(限次+局内随机+商店保底)是否够**只有 MC+真人读数能验证**,存在验证失败返工成本 | -| 流派素材利用率 | 6 变异只有 3 型入带;信息型=设计上故意无解的死角 | 6/6 全入带;「先推理定位→再花资源清除」本身也是推理应用(乙稿判据②:利用它须先经扫雷信息) | -| 玩家体验风险 | 反向风险:若 playtest 出现「看到矿尘就烦、毫无可玩性」信号(乙稿反例条件同族),甲案没有释放阀 | 无死角抱怨;但口子打开后二期件设计会持续试探边界(滑坡风险,靠限价限量+红线复审压) | -| 可逆性 | **甲→乙可随时放宽**(后补一件即可,随时做) | **乙→甲难收回**(删件+管理玩家已建立的「可以清」预期) | -| 实现成本 | 零新增(净化工兵范围更小;深挖钻头改设计或删) | 新增清除件+限次状态+信息型中和逻辑(地形格状态机扩展) | - -### 9.4 推荐:甲(可附「复查闸」) - -推荐**甲**:红线①是本作难度口径基石,甲的代价(三型无解)是**设计声明**而非缺陷,且甲→乙单向可逆——先声明永不对冲,拿迭代 12 出口读数(含信息型格的绕开行为/挫败信号)说话,若确有释放阀需求再以带数据的 mini 裁断放宽到乙。乙的本钱(6/6 利用率+释放阀)真实但全部建立在「护栏够」的未验证假设上,且收回不可逆。若裁甲,可加一条**复查闸**(代拍板白名单外、L2 级):批次二出口目检时呈报信息型三型的真人行为读数,仅呈报不提案。 - -### 9.5 裁定(2026-10-03 用户) - -**裁甲+复查闸**。落点:T5 深挖钻头改非信息税设计(原案冻结)/T6 净化工兵仅限伤害型+清除工具件族不做/T10 复查闸呈报/信息类派生动词维持全禁/文档口径=「伤害型=资源带;信息型=永久税(红线①看门税,设计上不可对冲)」。**乙案备选内容(信息型清除工具件族/深挖钻头原案/概率收窄派生动词)已自包含迁 06「双层 BD 延期与备选内容总登记」**——重启条件=R4 甲复查闸读数支持+用户显式放宽红线①边界(属红线变更,须用户发起),任务书/定稿退役后内容不丢。 diff --git a/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md b/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md new file mode 100644 index 00000000..0656330f --- /dev/null +++ b/design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md @@ -0,0 +1,243 @@ +# 任务书:奇物概念收口与词族对齐批(迭代 15) + +- 日期:2026-10-05 +- 设计事实源:[奇物.md](../gdd/systems/冒险循环/奇物.md) v2.6(概念唯一定义,2026-10-05 用户逐轮裁定) +- 登记台账:[06-待办清单](../gdd/06-待办清单.md) 三条目(渠道分工目标态 / 资源两个新种类入池 / 奇物命名统一后续) +- 实体登记:[entities.yaml](../registry/entities.yaml) `curio` 条目 +- 状态:**定稿待发令**——用户 2026-10-05 令:本批只改文档,代码与配置改动整理成任务书编入迭代 15 +- **loop 计划书八件对照**:①目标与完成定义=§一 ②现状事实(代码级,开工自行复核)=§二 ③设计契约(🔴 触碰=L3 停机)=§三 ④范围边界=§四 ⑤任务卡 T0..Tn=§五 ⑥验证闸=§六 ⑦异常分级=§七 ⑧代拍板白名单=§八 +- **本任务书已有约束**:范式为"设计契约先行、代码后跟"——概念已由用户逐轮裁定定稿(v1.0→v2.6 共 6 轮),本批不做二次设计,只做**落地对齐**。任何在执行中冒出的"要不要改设计"念头,一律记 06 不在本批解决 +- 数值全 provisional:本批只改标识符与结构,**不调任何平衡数值**;档位配额 70/25/3=98 是结构锚(schema validate 硬断言),本批零改动 + +--- + +## 一、目标与完成定义 + +一句话目标:把 v2.6 已定稿的「奇物」概念从**文档层**贯彻到**代码层与数据层**——三套旧词族(`feature_*` / `relic_*` / 运行层 `bonus_*`)全部对齐到统一词族,渠道分工与两个新种类入表,使代码与文档不再各说一套。 + +**为什么现在做**:用户 2026-10-05 的原始诉求是"这导致我们的代码实现和文档描述是分开的"。概念层已裁定完(6 轮),但代码层仍是三个旧词族 + 渠道未分离,**债已经欠了 9 次提交**。顶层已改名「奇物」而代码仍叫 `feature_*`,正是用户最初抱怨的"文档与代码分开"的临时态。 + +完成定义(逐条可验): + +1. **词族对齐完成**:`feature_*` → `curio_*`(103 处 / 7 文件)、`relic_*` → `curio_*` 或 `feat_*`(162 处 / 12 文件)、运行层 `bonus_*` → `curio_*`(160 处 / 8 文件)全部改完,`game/` 下 `grep -c "feature_\|relic_\|_bonus_\|pick_bonus\|BonusInteract\|BonusPick"` 归零(存档键 5 个除外,见 T2 裁点) +2. **渠道分工落地**:三条渠道按分类分离——关底 Boss 击败=通过这一关 → 只出专长;奖励节点 / 商店 → 只出属性值提升 + 资源,专长在此只以门票形式出现;三渠道不再共用同一个池 +3. **两个新种类入表**:刷新次数、专长获取门票进入 `adventure.tres`,各自带全参数 +4. **商店货架补回复**:按默认原则,回复必须在商店货架内(现行缺) +5. **数据缺陷修复**:`relics.tres` 的 charge 标签补至 ≥4 件(档二要求同标签 ≥4,现仅 3 件,永远达不到) +6. **冒烟与三闸全绿**:批末 run_smoke 全量 + 三探针 + doc 三闸对基线**零新增** + 熵增闸 PASS +7. **断点存档往返幂等**:改词族不破存档——旧档能读、新档能续(若 T2 裁点选"换名+迁移",须验 v→v+1 往返) + +## 二、现状事实(代码级,T0 开工须自行复核) + +> 以下是 2026-10-05 读出的事实。开工时按 loop 规范 T0 复核,不以本节为准。 + +### 2.1 词族占用实况 + +| 词族 | 处数 | 文件数 | 主要落点 | +|---|---|---|---| +| `feature_*` | 103 | 7 | `adventure_table.gd` / `adventure.tres` / `adventure_runner.gd` / `level_runner.gd` / `config_db_cross_validator.gd` / `bonus_interact_controller.gd` / `smoke_all.gd` | +| `relic_*` | 162 | 12 | `relic_table.gd`(+`.uid`)/ `relics.tres` / `relics_engine.gd` / `config_db.gd` / `battle_orchestrator.gd` / `damage_controller.gd` / `action_economy.gd` / `level_runner.gd` / `battle_narrator.gd` / `adventure_runner.gd` 等 | +| 运行层 `bonus_*` | 160 | 8 | `_bonus_deck` / `_bonus_taken` / `pick_bonus` / `BonusInteractController` / `BonusPickOverlay` / `bonus_interact_controller.gd` / `level_autoplay.gd` / `breakpoint_resume_test.gd` 等 | + +**🔴 硬约束(不可撞车)**:`reward` 词族**已被占用**——`reward_pick`(rng 封闭流 scope)/ `reward_node`(`grant_aux_item` 的 context 字符串)/ `reward_preview`(道具效果 kind)。**统一词族不得使用 `reward_*`**,本批定为 `curio_*`(`treasure` / `trove` / `curio` / `haul` 零占用,2026-10-05 查证)。 + +### 2.2 封闭词表与结构锚(改动即触碰红线) + +- `AdventureTable.FEATURE_KINDS: Array[String]` = `["attack", "max_hp", "armor", "gp", "ap", "heal"]`——**封闭六项**。断点附随件与牌库剔除态依赖它,扩种类须走 schema + registry 同步修订 +- `AdventureTable.TIER_QUOTAS := {"common": 70, "rare": 25, "rarest": 3}`(合计 98)——**结构锚**,schema `validate()` 内有硬断言:"档位配额结构失锚……改总量须重裁"。本批**入新种类须占配额**,若配额总量不够,**只能在本批内重裁并说明**,不得调参绕过 +- `adventure.tres` 现有 22 个键与 schema 的 22 个 `@export` 一一对应(2026-10-05 脚本校验通过),改名须同步两侧 +- 节点类型是**封闭枚举五种**(战斗 / Boss / 奖励 / 恢复 / 商店)——本批**零扩类**(专长挂 Boss 节点兑付面) + +### 2.3 渠道与池的现状 + +- 现行**三渠道共用同一个 98 张固定配额令牌池**(普通 70 / 稀有 25 / 罕见 3),三类混编 +- 专长只占稀有/罕见档,与属性大件混编;商店货架靠"零专长挤掉一张普通卡"保底 +- 商店货架 = 池 ∖ {GP 袋}(`shop.tres` 的 `pool_shelf` 行族,现为 attack / max_hp / armor_class / ap 四项,**缺回复**) +- 奖励节点与通关三选一**共享同一池、同权重同上限**(`node-reward` v2.4) + +### 2.4 数据缺陷(独立于渠道结构,须单独修) + +- `relics.tres` 的 **charge 标签只有 3 件**,而档位激活要求同标签 ≥4 件——**charge 流派永远达不到档二**,即使获取次数无限 +- 一局确定性专长兑付次数 = 终局前 Boss 个数(三关 = 2 次),而档一阈值是同标签 ≥2——档一刚好够,档二(≥4)须靠门票补齐。**此项用户已定延后复裁**(触发=第四关内容批落地后实测),本批只登记不改 + +### 2.5 断点与存档键(5 个) + +`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`——为存档兼容沿用历史名。`adventure_runner.gd` 内同时有 `_node_bonus_pending`(奖励节点停点态)。**是否随存档版本迁移换名须本批裁**(见 T2)。 + +## 三、设计契约(违反即返工,🔴 触碰 = L3 停机) + +1. 🔴 **兑付频率不可改**:奇物**不是打一场战斗给一份**。关内普通战斗节点打完不给任何奇物;一关之内只兑付一次,触发点是**关底 Boss 被击败**——按 [冒险结构](../gdd/systems/冒险循环/冒险结构.md) 定义"通关一关 = 该关关底 Boss 被击杀",**这两件事是同一个时刻,不是一条链上的两步**。任何把专长挂到"战斗结算后"的实现即为 L3 +2. 🔴 **两条轴互不决定**:分类轴(给的是什么:专长 / 属性值提升 / 资源)与渠道轴(从哪来:奖励节点 / 商店 / 关底 Boss 击败)**不得互相推导**。禁止"因为它要进商店所以另立一分类"这类反向推导(= 06 已登记的"两轴缠回去") +3. 🔴 **Boss 渠道独占专长**:关底 Boss 击败=通过这一关**只出专长**,属性值提升与资源在此不出现。这是渠道轴的定位决定,不是例外,不需另找理由。末关的 Boss 击败后不给(无后续关卡可消费) +4. 🔴 **专长门票四条口径不可改**:①**拿到即开、不可囤积**(不进持有集,选中/买下同一时刻开专长三选一);②**罕见只在概率、不在价格**(货架价与其他商品相当);③**一局限购一次**;④**计步保底**——连续 5 次三选一展示未出现 → 第 6 次必定出现(计数=**展示次数**,刷新后的重展计入,奖励节点与商店共享计数,触发后清零,限购用满后不再触发) +5. 🔴 **统一词族不得用 `reward_*`**(已被 `reward_pick` / `reward_node` / `reward_preview` 占用,见 §2.1) +6. 🔴 **档位配额结构锚不可绕过**:`TIER_QUOTAS` 的 70/25/3 有 validate 硬断言。改总量须重裁并留说明,不得调参绕过 +7. 🔴 **不新增节点类型**:`关卡节点地图` 的节点类型封闭枚举五种不变,专长挂 Boss 节点兑付面 +8. 🔴 **魔法道具边界不位移**:奇物**当局清零、跨局带走的是魔法道具**(判据走生命周期,不走"带在身上")。本批任何改动不得让奇物进同调位,也不得让魔法道具进当局随机渠道 +9. 🔴 **层级纪律**:奇物只走当局随机渠道(奖励节点 / 商店 / Boss 兑付),不进元进度天赋树 +10. **本批不改平衡数值**:所有 `feature_value_*` / `feature_quota_*` 的**值零变更**。入新种类属结构改动(占配额),非调参 +11. **零战斗期新动词**:专长表达全部经"扫雷决策 → 自动结算"间接生效,不新增手动闪避 / 主动施法 + +## 四、范围边界(以下均不在本批,收到即停、不顺手做) + +- **任何平衡数值的调参**——档位阈值、门票四参数的具体取值(概率 / 配额 / 限购次数 / 保底步数)、token 配额重裁方案。门票四参数本批只**建结构与字段**,取值走 provisional + 曲线调参批 +- **第四关内容**——用户已定"后续还会有第四关,到时候试完觉得配合太少再调整"。档二可达性复裁触发条件是第四关落地后实测 +- **charge 补件的内容设计**——本批只把 charge 补到 ≥4 件以打开档二通路,**补哪几件是内容裁决**,走独立内容批;本批若判断内容不可自决,则只做"档二对 charge 不可达"的显式登记(数据缺陷留痕),不硬补 +- **玩家可见面违规改法**(06 独立条目:内部分类禁写入玩家可见面 + 档位呈现三路待裁)——属呈现面设计裁决,须用户拍板,本批不碰 +- **教学引导相关**——用户 2026-10-04 裁改排 Beta +- **资源配比预设 / 判式换代 / 全局变异等 M-4 在途批**——与本批词族改名**撞同一批文件**(`adventure_table.gd` / `level_runner.gd` / `adventure.tres`),**须在 roadmap 排期上确认不与在途批并行**,本批开工门 = 相关在途批出口或用户明示插队 +- **存档键换名的迁移实现**(若 T2 裁"换名")——须与存档版本迁移单独裁定,本批可只做"代码侧改名 + 兼容读旧键",迁移写 v+1 归存档批 + +## 五、任务卡(T0..T8 逐卡估时) + +> **估时合计**(provisional,工作日)≈ 4.5 日,在 ≤3 日软时间盒边缘。**切分预案**:T0-T3 一段(词族对齐)≈ 2 日;T4-T8 二段(渠道分离 + 入表)≈ 2.5 日。切分点 = T3 出口。超限即按 loop 规范切迭代(L3 汇报)。 + +### T0 开工(≈0.3d) + +- 建 worktree(分支名建议 `curio-wordfamily-20261005`),**主工作区只作合并落点** +- 基线复读记档:冒烟全量数字 / 三探针(`ui_input_probe` 十一断言)/ doc 三闸 / MC 对拍基准 / `git status` 归属核对(并行遗留只标旗不碰) +- **复核 §2 全部事实**(词族处数、封闭词表、配额锚、存档键清单),与本节不符以实测为准并回写本任务书 +- 输出:worktree 名 + 基线数字 + 事实复核差异表 + +### T1 词族对齐第一批:`feature_*` → `curio_*`(≈0.7d) + +- 范围:`FEATURE_KINDS` → `CURIO_KINDS`、`feature_quota()` → `curio_quota()`、`feature_value()` → `curio_value()`、`feature_candidate_count` → `curio_candidate_count`、`feature_quota_{kind}_{tier}` → `curio_quota_*`、`feature_value_{kind}_{tier}` → `curio_value_*` +- 涉及:`adventure_table.gd` + `adventure.tres`(键名)+ 6 个引用文件 +- **值零变更**(只改键名与常量名) +- ⚠️ `FEATURE_KINDS` 是封闭词表、断点附随件与牌库剔除态依赖它 → 改名须与 `entities.yaml` 同批同步 +- 轻闸:冒烟全量绿 + 存档往返测试绿 + +### T2 词族对齐第二批:运行层 `bonus_*` + **存档键裁点**(≈0.7d) + +- 范围:`_bonus_deck` / `_bonus_taken` / `pick_bonus` / `BonusInteractController` / `BonusPickOverlay` / `bonus_interact_controller.gd` / `level_autoplay.gd` / `breakpoint_resume_test.gd` +- **文件改名须同步 Godot `.uid` 与 `.tscn` 引用**(非文本层,无法靠 grep 自证) +- **裁点(本任务书内唯一待裁,批内自裁可行但须台账留痕)**: + - 五个**断点存档键**(`bonus_deck` / `bonus_taken` / `bonus_pending` / `bonus_result` / `bonus_aux_carry`)换不换名? + - 甲=**不换**(保存档兼容,仅改代码侧变量名)——推荐 + - 乙=换 + 兼容读旧键(旧键读入映射到新键,写出用新键) + - 丙=换 + 存档版本迁移到 v+1(**范围外**,本批不做) + - 建议甲或乙;若判断丙才对,回写本任务书并转 06 +- 轻闸:冒烟全量 + **断点存档往返测试绿** + `ui_click_probe`(触碰 presentation) + +### T3 词族对齐第三批:`relic_*` → 专长(≈0.8d) + +- 范围:`relic_table.gd`(+`.uid`)/ `relics.tres` / `relics_engine.gd` / 及 9 个引用文件 +- 目标词族:**`feat_*`**(专长 Feat)。**顶层与内层分类各有各的词族**(v2.7 定名后确立):`curio_*` 是总称「奇物」/`feat_*` 是专长/`asi_*` 是属性值提升/`res_*` 是资源 +- **文件名与 `class_name` 改名须同步 `.uid` 与 `.tscn`**(非文本层) +- **不新增节点类型**;MINE_HOOKS 红线校验逻辑零改动 +- 轻闸:冒烟全量 + 全探针(三) +- **T3 出口 = 切分点**:段落一(词族对齐)完成,出阶段报告 + +### T4 渠道分离:池的拆分(≈0.8d) + +- 目标:三个渠道各按分类白名单取候选,不再共用同一个 98 张池 + - 关底 Boss 击败 → 只出专长 + - 奖励节点 / 商店 → 专长**只以门票形式出现** + 属性值提升 + 资源 +- ⚠️ **配额结构锚处置**:专长抽离共享池后,属性与资源的配额总量是否维持 98?**若须改 `TIER_QUOTAS` 总量,走重裁流程并在本任务书回写理由**(不得调参绕过 validate 硬断言) +- 商店货架 = 池 ∖ {GP 袋}(**计价物不自售**规则:凡以某渠道计价物为内容的奖励不进该渠道货架) +- 轻闸:冒烟全量 + 探针 + **MC 逐位对拍**(涉核心,必须) + +### T5 专长门票入表(≈0.7d) + +- 新增门票项到 `adventure.tres`,四参数全部建字段、**取值 provisional**: + - 出现概率 / 配额 / 限购次数(=1)/ 保底步数(=5 展示) +- 机制:**拿到即开、不可囤积**(不进持有集)→ 选中/买下同一时刻开专长三选一 +- **计步保底计数器**:计数=展示次数、刷新后重展计入、奖励节点与商店**共享**计数、触发后清零、限购用满后不触发 +- 稀有档处置须说明:门票进哪一档(罕见?),占多少配额 +- 轻闸:冒烟全量 + 探针 + MC 逐位对拍 + +### T6 刷新次数入表 + 商店补回复(≈0.5d) + +- `FEATURE_KINDS` 扩项须走 schema + registry 同步修订(封闭词表,红线 §3.6) +- ⚠️ **必须先划清边界**:既有「商店独立刷新机制」是**进店后的免费次数 + GP 刷新**(商店自身的服务),本项是**作为奇物授予的**重抽次数——**两者不是一回事**,入表前须在 registry 里把边界写死,防止后续混淆结算 +- 刷新次数的作用对象是**三选一界面而非角色**——不进加算区(§2.2 加算区四轴不含它) +- 补 `shop.tres` 的 `pool_shelf` 货架含回复(按默认原则:除已登记规则外,分类内成员都要在它该出现的渠道池子里) +- 轻闸:冒烟全量 + 探针 + MC 逐位对拍 + +### T7 档位通路与数据缺陷(≈0.4d) + +- 复核 charge 标签件数。若本批能自决则补至 ≥4 件;若内容不可自决,则**只做显式登记**("档二对 charge 不可达,数据缺陷留痕,转内容批")——**不硬补、不塞占位件** +- 档二可达性复裁:**本批只做静态推演与登记**,实测归第四关内容批(用户已定) +- 轻闸:冒烟全量 + +### T8 批末闸与人闸材料(≈0.4d) + +- 重闸:全量轻闸 + doc 三闸(对基线**零新增**)+ 熵增闸 + MC 逐位对拍(涉核心)+ 素材批机检断言(本批无素材则免) +- 人闸材料包(`design/qa/`):真人目检清单(重点 = 奇物列表呈现、档位激活反馈、门票弹出三选一面)+ 代拍板追认清单 + 三渠道兑付点目检指引(**专长兑付发生在关底 Boss 击败那一刻,不是战斗结算后**——这条要单列一个检查项) +- 收口五步:①`active.md` 快照 ②台账条目(查撞号)③里程碑移动更新 roadmap ④`stage.txt` 阶段变更 ⑤闸序列全绿留痕 + +## 六、验证闸 + +### 6.1 轻闸(每轮必跑,headless) + +- `run_smoke` 全量 +- `ui_input_probe`(十一断言) +- 触碰 presentation 时加跑 `ui_click_probe` + `ui_layout_probe`(T2 / T3 触碰) + +### 6.2 重闸(批末 T8) + +- 全量轻闸 + `doc_link` / `gdd_lint` / `doc_term` 三闸**对基线零新增** +- 熵增闸 PASS +- MC 逐位对拍(T4 / T5 / T6 涉核心,必须;T1-T3 纯改名可免但须在报告说明理由) + +### 6.3 本批专属验收断言(概念与代码一致性) + +| # | 断言 | 判据 | +|---|---|---| +| A1 | 词族归零 | `game/` 下 `feature_\|relic_\|_bonus_\|pick_bonus\|BonusInteract\|BonusPick` 命中数 = 0(存档键除外) | +| A2 | 禁词未用 | `game/` 下无 `reward_pick` / `reward_node` / `reward_preview` **新增**(既有三处不动) | +| A3 | 兑付频率正确 | 专长兑付点 = 关底 Boss 击败;**关内普通战斗节点不产奇物**(代码级断言 + 人闸目检双查) | +| A4 | 渠道分离 | 三渠道候选池按分类白名单过滤;专长在非 Boss 渠道只以门票形态出现 | +| A5 | 门票拿到即开 | 门票不进持有集;选中/买下同帧开专长三选一(断言:持有关卡推进后仍无门票残留) | +| A6 | 保底计数 | 连续 5 次展示未出 → 第 6 次必出;刷新重展计入;限购用满后不触发 | +| A7 | 值零变更 | T1-T3 全部改名的键,值与基线**逐位相等** | +| A8 | 存档往返 | 旧断点可读、可续;存档键按 T2 裁点结论验证 | +| A9 | 池配额锚 | `TIER_QUOTAS` validate 硬断言绿;若改总量须有重裁说明 | +| A10 | 节点类型零扩类 | 节点类型仍为封闭枚举五种 | +| A11 | 玩家可见面无分类名 | 奇物列表 / 三选一面 / 弹窗**不出现**"专长/属性值提升/资源"字样(与 06 独立条目协同,本批只做**断言检查**,不改法) | +| A12 | 档二通路 | charge 标签 ≥4 件,或已有显式登记"不可达 + 转内容批" | + +## 七、异常分级(loop 规范) + +- **L1 自救**:一次重试(改名后编译错、`.uid` 未同步等机械错) +- **L2 记录继续**:连续 3 次同红灯升级,写台账继续推进 +- **L3 停机写报告**:触碰 §3 任一 🔴 红线 / 配额结构锚无法自洽 / 发现概念层自相矛盾 / MC 逐位对拍出现无法归因的漂移 + +**本批预判的 L3 高风险点**: +1. `relic_table.gd` 改名连带 `.uid` / `.tscn` 非文本层引用失败(T3) +2. 专长抽离共享池后配额结构锚失锚,需重裁(T4) +3. 存档键换名导致旧断点读不出(T2) + +## 八、代拍板白名单(批内可自裁,台账留痕) + +1. **词族细分名的具体拼写**——`curio_*` / `feat_*` / `asi_*` / `res_*` 的下划线与单复数形式,在不撞既有占用(`reward_*` 等)的前提下自定 +2. **重命名时的中间态命名**——允许分步改(先改引用再改定义),只要批末归零 +3. **T2 存档键裁点的甲/乙选择**(不选丙) +4. **T7 charge 是否硬补**——若内容不可自决,走"只登记不硬补"(本任务书已授权此判断) +5. **provisional 取值的第一版数字**——门票四参数、刷新次数件值,取 working value 即可,**须标 provisional 且归曲线调参批**,不进终值 + +## 九、待用户裁点(不在本批自裁范围) + +| # | 待裁 | 阻塞面 | 建议 | +|---|---|---|---| +| C1 | 玩家可见面三处违规的改法 + 档位呈现三路 | 06 独立条目;A11 断言只检查不修 | 单独开呈现面批 | +| C2 | 第四关内容与档二可达性复裁 | T7 实测、charge 补件 | 第四关内容批后 | +| C3 | 门票四参数的终值 | T5 provisional 定稿 | 曲线调参批 + MC 采集 | +| C4 | 存档键换名的正式迁移 | T2 裁点丙案 | 存档版本迁移批 | + +--- + +## 附:本任务书引用的设计裁定链(v1.0 → v2.6,供执行者回溯) + +| 版本 | 用户裁定要点 | +|---|---| +| v1.0 | 立《特性》:一次冒险内角色自身得到的提升;命名统一(此前三个名字:流派件 / 数值件 / 本关强化) | +| v1.1 | 分类重构为「属性提升 ASI / 专长 Feat」;刷新次数作用对象是选择界面而非角色,作为例外登记 | +| v1.2 | 专长渠道落定=关底 Boss 击败后;**不新增节点类型**(挂 Boss 节点兑付面) | +| v2.0 | 顶层改名「奖励」;分类扩为三类;重构为**两根轴**(分类轴 × 渠道轴);边界判据改走**生命周期**(当局清零的是奖励,跨局带走的是魔法道具) | +| v2.1 | Boss 渠道只出专长(独占);终局 Boss 不给;金币不进商店写成「计价物不自售」**规则**而非特例 | +| v2.2 | 非 Boss 渠道给**门票**形式(拿到即开、不可囤积);渠道约束重构为**三层**(分类白名单 / 可计算谓词 / 显式例外清单);立**默认原则**——除已登记规则外分类内成员都要在池子里 | +| v2.3 | 门票四条口径细化(含**计步保底**:连续 5 次展示未出第 6 次必出,刷新重展计入);修正默认原则表述——**只管分类内部**,"渠道出哪些分类"是渠道轴自己的定位决定 | +| v2.4 | 顶层定名**「奇物」Wondrous Item**(DND 魔法物品九分类的兜底杂类);落选 Treasure(偏财物)/ Relic(用户否决)/ 全部自造词;**代码词族定为 `curio_*`**(`reward_*` 已被占用) | +| v2.5 | 第三类定名**「资源」**(偏泛,故在 1.3 写死判据句);**回复留在资源**不拆第四类 | +| v2.6 | **修正核心循环图**——奇物不是打一场战斗给一份;关底 Boss 击败=通过这一关是同一时刻;兑付频率写进文首 / 2.1 / 待办 / registry | diff --git a/design/research/任务书-秘宝代码词族对齐批-2026-10-05.md b/design/research/任务书-秘宝代码词族对齐批-2026-10-05.md new file mode 100644 index 00000000..bb4b8a31 --- /dev/null +++ b/design/research/任务书-秘宝代码词族对齐批-2026-10-05.md @@ -0,0 +1,348 @@ +# 任务书:秘宝代码词族对齐批(v1.0 定稿,待发令开工) + +> 成文 2026-10-05。**性质**:纯代码标识符改名 + 玩家可见文案清零,**零行为变更、零数值变更、零 schema 契约变更**。 +> 设计权威 = [秘宝 GDD](../gdd/systems/排雷循环/秘宝.md) v0.9 版本行(2026-10-05 用户拍板「魔法道具」→「秘宝」);[registry `aux_items` 条目](../registry/entities.yaml) 仍是条目键事实源(**本批不改条目键**,见 §4 范围边界)。 +> 归属迭代:**迭代 15 · 需求③**(迭代 15 现有 ① 调试功能整合批〔已落籍〕+ ② 奇物词族对齐与渠道分离批〔T0-T8 在册〕)。 +> 满足 loop engineering 八件(见 §9 逐条对照);本任务书 = 计划书八节的前五节落地,§6 任务卡为执行单元。 +> **用户三项拍板(2026-10-05)**:①编入迭代 15(追加)②**全族彻底改(含数据表)** ③**断点存档键一律保留**。 + +> 🔴 **撞批警示(与同迭代 ② 奇物批)**:本批与 `任务书-奇物词族对齐与渠道分离批-2026-10-05.md` 撞同一批文件(`core/level_runner.gd` · `data/tables/adventure.tres` · `core/adventure_runner.gd` 断点区),且**双方都动断点存档键**(本批禁改、②批内有"存档键正式迁移"待裁点)。 +> **2026-10-05 07:29 复核:② 奇物批已收口落库**(合并提交 `c571af2`,"merge: 奇物概念收口与词族对齐(迭代15②号卡·文档与数据层)")——**并行撞批风险已解除,本批可独立开工**。但 ② 已改动 `adventure_runner.gd`(46 行) / `config_db.gd` / `level_runner.gd`(10 行) / `adventure_table.gd`(113 行) / `adventure.tres`(42 行) / `relic_table.gd` / `shop_table.gd`,**本批事实表须按 T0 重新复核**(已做首轮复核,见 §2 F1/F3 修订)。 + +--- + +## 1. 目标与完成定义 + +### 1.1 一句话目标 + +把代码层 `aux_*` / `AuxItem*` 词族(**358 处 / 35 文件**)整体换词为「秘宝」词族,使**代码词根、中文规范名、玩家可见文案三者对齐**,消除「魔法道具」进入玩家视野的残余通道。 + +### 1.2 完成定义(出口判定清单——五条全满足才算本批落籍) + +| # | 判定项 | 量化标准 | +|---|---|---| +| 1 | 词族换尽 | `game/` 下 `aux_*`/`AuxItem*`/`AUX_ITEM*`/`"aux_item"` 出现处**仅剩 §4.0 三类例外**(敌方语汇 / 道具工坊 / §4.1 十二处存档键 + 冒烟夹具),其余全数换词。**裁决后无待定欠债——全改** | +| 2 | 玩家可见清零 | `grep -rn "魔法道具" game/` **零命中**(2026-10-05 收口后复核现基线 = **5 处玩家可见字符串**,见 §3 组 A;其余 60+ 命中均为注释,由组 D 清) | +| 3 | 重闸全绿 | 冒烟 **747/0**(现基线,迭代 15 前实测值)· 十一探针全绿 · MC 逐位对拍**零漂移** · doc 三闸**对基线零新增** · 熵增闸 PASS | +| 4 | 人闸完成 | 目检清单过 + 代拍板追认清单过 + §8 白名单外无代拍板 | +| 5 | 收口五步 | active.md 快照 / 台账条目 / roadmap 里程碑行 / stage.txt(如变)/ 闸序列留痕 | + +> ⚠️ **基线纪律**:迭代 15 调试整合批已把冒烟推进到 **747 项**。本批开工前必须重测基线取实际值(本任务书不写死数字,T0 复核后回填),**禁止用本文档的历史数字当闸门**。 + +## 2. 现状事实(代码级,T0 须自行复核) + +| # | 事实 | 读数 | +|---|---|---| +| F1 | `aux_*` / `AuxItem*` 词族规模 | **358 处 / 36 文件**(`game/` 下 `.gd` + `.tres`)——⚠️ **2026-10-05 收口后复核:文件数 35→36**(`presentation/views/hero_info_panel_view.gd`,奇物批带入引用),处数不变 | +| F2 | 重灾文件 | `core/adventure_runner.gd`(79) · `core/level_runner.gd`(27) · `presentation/bonus_interact_controller.gd`(19) · `core/battle_orchestrator.gd`(18) · `smoke/smoke_all.gd`(14) · `presentation/aux_interact_controller.gd`(14) · `core/config_db.gd`(14) · `presentation/main.gd`(13) | +| F3 | 玩家可见「魔法道具」文案 | **⚠️ 2026-10-05 收口后复核 = 5 处**(初查 3 处,漏 2 处 UI 文案):`battle_narrator.gd:117` · `battle_narrator.gd:118` · `bonus_interact_controller.gd:76` · **`hero_info_panel_view.gd:56`**(`UiKit.label("魔法道具", 16, true)` 槽位标题)· **`hero_info_panel_view.gd:178`**(`slot.tooltip_text = "魔法道具槽(空)"` 悬停提示) | +| F4 | 🔴 **`battle_narrator.gd` 同屏两义共现** | 117-118 行输出"魔法道具" ‖ 同文件 **139 行** `arch_names := {"magic": "魔法", ...}` = 敌方伤害语汇——同一 narrator 内两义并存,是歧义的**唯一真实暴露点** | +| F5 | 断点存档键(**禁改**) | `bonus_aux_carry` · `aux_detail` · `aux_cleared` · `aux_cleared_last` · `aux_items`(断点快照数组)· `attunement_charges` —— **2026-10-05 收口后复核 = 34 处引用**(初查 28 处,增量来自②奇物批带入的调用点;**②未迁移任何键名**,diff 核实无键名改动) | +| F6 | 🔴 **冲突面:`aux_items` 一名两义** | 既是**断点存档键**(`adventure_runner.gd:976` 写入 / `:951-953` 读取,跨局持久,改名即破档)**又是** registry 条目键与 ConfigDB 持有变量名(`config_db.gd:50` `var aux_items: AuxItemTable`)——**同一字符串,语义不同层** | +| F7 | 🔴 **冲突面:`"aux_item"` 是加载期校验域串** | `reward_table.gd:15` `CELL_TYPES` 封闭枚举含 `"aux_item"`(十型之一)· `:16` `AUX_ITEM_TYPE` 常量 · `smoke_all.gd:3932-3933` **断言 `CELL_TYPES.size() == 10` 且 `has("aux_item")`** —— 改此串 = 改 schema 契约 + 改 .tres 数据行 + 改冒烟断言,**三重连锁** | +| F8 | Godot 类名/文件名 | `AuxItemTable`(schema) · `aux_items.gd` · `aux_item_table.gd` · `aux_interact_controller.gd` —— 改名须同步 `.uid` + `.tscn` 引用(迭代 14.5 有实证先例:主区跑前须 `--import` 重刷类名缓存) | +| F9 | 中文注释层现状 | 大量注释仍写"魔法道具"(如 `aux_items.gd:2` `aux_items_test.gd:2` `bonus_interact_controller.gd:92` `config_db.gd:27`)——**注释属本批清理对象**(与 §1.2 判定 2 同批) | +| F10 | 文档侧已完成 | 2026-10-05 消歧更名批(`430419c` + `06e94b7`):26 个设计文档已改「秘宝」,`秘宝.md` 已重命名,registry 30 处已同步,owner 路径已指向新文件。**本批只做代码侧,文档侧除 §3 链接修复外不动** | + +## 3. 改动清单(分六组,逐组独立可提交) + +### 组 A · 玩家可见文案(**P0,最高优先**) + +| 文件:行 | 现状 | 改为 | +|---|---|---| +| `presentation/battle_narrator.gd:117` | `return "魔法道具\n%s" % aux_line` | `return "秘宝\n%s" % aux_line` | +| `presentation/battle_narrator.gd:118` | `return "魔法道具\n随机获得一件"` | `return "秘宝\n随机获得一件"` | +| `presentation/bonus_interact_controller.gd:76` | `toast.show_toast("上关剩余 %d 件魔法道具已随关卡结束清空" ...)` | `"上关剩余 %d 件秘宝已随关卡结束清空"` | +| **`presentation/views/hero_info_panel_view.gd:56`** | `col.add_child(UiKit.label("魔法道具", 16, true))` | `UiKit.label("秘宝", 16, true)` | +| **`presentation/views/hero_info_panel_view.gd:178`** | `slot.tooltip_text = "魔法道具槽(空)"` | `slot.tooltip_text = "秘宝槽(空)"` | + +> **后两处是 2026-10-05 收口后补入的**(初查仅命中 3 处,漏了 UI 标签与 tooltip 两处——`grep "魔法道具"` 命中 60+ 行但绝大多数是注释,**这两处是真实玩家可见字符串**)。 +> **组 A 独立成一个提交**——它是本批唯一有玩家可见效果的部分,先行落地上游台账可独立验收。**F4 两义共现随本组一并消解**(117-118 改后同屏不再出现两个"魔法")。 +> **目检提示**:组 A 落地后须实机确认 C 区槽位标题与悬停提示——这是玩家唯一会看到的「秘宝」二字。 + +### 组 B · schema 与数据表文件(类名 + 文件名 + @export) + +| 现状 | 改为 | 注意 | +|---|---|---| +| `data/schemas/aux_item_table.gd` | `treasure_item_table.gd` | 类名 `AuxItemTable` → `TreasureItemTable`;`@export` 字段名与 `item_id` 主键**不动** | +| `data/tables/aux_items.tres` | `treasure_items.tres` | 表内行键(`item_id` 值 / `effect_kinds` / 效果字段)**全不动**;仅文件名与 `ext_resource` 路径改 | +| `core/aux_items.gd` | `core/treasure_items.gd` | 类名 `AuxItems` → `TreasureItems`;`inventory_count` / `snapshot_inventory` / `validate_use` 等**方法名不动** | +| `core/config_db.gd:50` | `var aux_items: AuxItemTable` | `var treasure_items: TreasureItemTable`(**变量名改**;⚠️ 与 F6 存档键冲突面相关,见 §7 C2) | +| `core/config_db.gd:27` | `"aux_items": "aux_items.tres"` | `"treasure_items": "treasure_items.tres"`(注册表键) | +| `core/config_db.gd` 访问器 | `aux_item_row()` / `aux_items_transitional_rows()` 等 | 统一换词;**调用方全量跟改**(`battle_orchestrator` / `level_runner` / `meta_progression` / 三个 presentation / `attunement`) | + +> **`.uid` / `.tscn` 同步强制**:改名后须 `godot --headless --path game --import` 重刷类名缓存(迭代 14.5 实证:主区跑前不刷会命中旧类名缓存),并在 T0 记录导入前后 `.uid` 清单差异。 + +### 组 C · 文档链接修复(**仅链接,不改称谓**) + +历史文档正文按换名先例原样保留旧名,但**指向旧文件名的活链接必须修**(重命名已使其失效): + +| 文件:行 | 链接 | 修法 | +|---|---|---| +| `research/proposal-magic-item-attunement-2026-09-22.md:6` | 已于 `430419c` 修好 | ✅ 免 | +| `research/调研-全局作用域变异设计空间-2026-10-04.md:322` | 已于 `430419c` 修好 | ✅ 免 | +| `design/dev/architecture/architecture.md:113` | `../../design/gdd/...` 断链 | **既有欠债**(多一层 `design/`),本批顺带修(`../../gdd/...`) | +| `design/dev/architecture/architecture.md:196` | 同上 | 同上 | + +> 该断链**改动前即存在**(已用 `git show HEAD:` 复现验证),本批顺带清偿,不单独计工时。 + +### 组 D · 中文注释层(**与组 A 同批**) + +`game/` 下所有注释中的「魔法道具」→「秘宝」。**注意区分不得改的两类**: + +| 词 | 处置 | +|---|---| +| `魔法矢` / `魔法反噬` / `魔法族` / `魔法护甲` / `arch_names["magic"]` | 🔴 **敌方伤害/护甲语汇,一律不动** | +| 格面类型微光色带描述(紫/穿刺蓝/…) | 不动(属 `magic` 格面家族) | +| 「魔法道具」 | ✅ 改「秘宝」 | +| 「道具工坊」 | 不动(营地柜台名,玩家可见面现名,本批不改) | + +### 组 E · 测试文件名与内部变量(**最后做**) + +| 类别 | 文件/标识符 | 改法 | +|---|---|---| +| 测试文件 | `tests/unit/core/aux_items_test.gd` · `tests/unit/data_config/aux_target_violation_test.gd` · `tests/unit/data_config/reward_dangling_aux_test.gd` | 文件名 + 内部 `AuxItemsScript` preload 路径 + 套件名(`tests/run_all.gd:35` 登记行同步) | +| 内部变量 | `_last_aux_cleared` · `_bonus_aux_carry` · `_last_draw_aux` · `aux_inventory` · `aux_items`(局部) | ✅ 换词(**非存档键的**局部变量;存档键见 §4) | +| 🔴 冒烟断言 | `smoke_all.gd:3932-3933` `CELL_TYPES.size() == 10 and has("aux_item")` | **见 §7 C1 裁决**——本批不动断言值即需同步改 .tres 与 enum,两条路由 C1 定 | + +### 组 F · 分派语汇与域串(**C1 裁决后新增,全改**) + +`"aux_item"` 字面量 **16 处**,全部代码内闭合、**无存档依赖**,一律换词(建议 `treasure_item`;若与局内「奇物」`curio_*` 词族冲突,改 `treasure_*` 全族统一前缀): + +| 文件 | 行 | 处置 | +|---|---|---| +| `core/adventure_runner.gd` | 231 / 366 / 490 / 510 / 556 / 583 / 601 / 672 | ✅ 8 处分派与兑付字面量全改(同源,须一次改齐) | +| `data/schemas/reward_table.gd` | 15 `CELL_TYPES` / 16 `AUX_ITEM_TYPE` / 50 校验分支 | ✅ 改(枚举项 + 常量名 + 分支引用三者同改) | +| `presentation/battle_narrator.gd` | 115 | ✅ 改(叙述分派键) | +| `presentation/bonus_interact_controller.gd` | 127 | ✅ 改(呈现分派键) | +| `smoke/smoke_all.gd` | 562 / 3847 / **3932-3933** | ✅ 改(**断言 `has("aux_item")` 与 `size()==10` 必须同步,否则冒烟红**) | +| `tests/unit/data_config/reward_dangling_aux_test.gd` | 25 | ✅ 改(夹具注入串 `"cell_type": "aux_item"`) | + +> ⚠️ **`reward.tres` 无需改**(已核:零 `aux_item` 数据行,池种随迭代 11 T7 退役)。 +> ⚠️ **枚举项改名后 `CELL_TYPES.size() == 10` 仍为 10**(改的是字面量不是项数),但 `has()` 的参数须同步——这是本组唯一的机械陷阱。 +> 🔴 **`smoke_all.gd:4473/4495` 的 `"aux_items"` 夹具键禁改**(见 §4.2)——它们构造的是断点存档快照,改了夹具就与真存档脱节。 + +## 4. 范围边界(🔴 不可越界) + +### 4.0 ✅ 改名总原则(用户 2026-10-05 拍板:**全改,保证一致性**) + +> **凡属本作"秘宝"概念对象的标识符——无论是文件、类、变量、方法、枚举值、字符串字面量,还是注册表键——全部统一换词。** +> 判据一句话:**该标识符是否指向"秘宝"这个概念?** 是 → 改;不是(敌方语汇 / 通用词 / 存档历史键)→ 不改。 + +**三类例外(唯一不改项,穷举)**: + +| 例外 | 具体 | 理由 | +|---|---|---| +| ① **敌方语汇** | `magic` 格面族 · `magic_bolt` / `magic_recoil` · `ward 魔法护甲` · `arch_names["magic"]` | 属敌方伤害/护甲语汇,与秘宝无概念关联 | +| ② **玩家可见既有柜台名** | 「道具工坊」 | 营地三柜台之一,玩家已习惯,本批不动(与秘宝是父子关系,非同义) | +| ③ **跨局存档历史键** | 见 §4.2 白名单 | 改则破档 | + +### 4.1 禁改:跨局存档键(用户 2026-10-05 明令,破档即玩家进度丢失) + +**判据**:凡**写入断点存档 / 跨局持久化**的键名,一律不改。 + +| 键名 | 写入点 | 性质 | +|---|---|---| +| `bonus_aux_carry` | `adventure_runner.gd:982` | 断点:道具件跨关携带 | +| `aux_items` | `adventure_runner.gd:976` 写 / `:844` 读 | 断点:持有集快照 | +| `aux_detail` | `adventure_runner.gd:880/890/538/635/654/665/227/228/685` 读写 | 断点:三选一掷定详情 | +| `aux_cleared` | `adventure_runner.gd:887` 写 / `:864` 读 / `level_runner.gd:523` 写 / `bonus_interact_controller.gd:75` 读 | 断点:关末清空计数 | +| `aux_cleared_last` | `adventure_runner.gd:908` 写 | 断点:末关清空反馈 | +| `attunement_charges` | `adventure_runner.gd:970` 写 / `:251` 读 | 断点:同调主动件充能余量 | + +> **上述键在代码旁必须加显式禁改注释**:`// 🔴 存档键(历史名 aux_*,与中文名「秘宝」对应),禁改——改则破档` +> **配套动作**:对应的**内部变量**(`_bonus_aux_carry` / `_last_draw_aux` / `aux_inventory` / `_last_aux_cleared`)**照改不误**——变量名不落盘,禁改的只是键名字面量。这正是解 C2 一名两义的关键。 + +### 4.2 `aux_items` 三处同名用法(**C2 裁决落地**) + +同一个字面 `aux_items` 在三处语义不同,**处置各异**: + +| 位置 | 实际语义 | 处置 | +|---|---|---| +| `config_db.gd:27` `var aux_items` = `AuxItemTable` | **注册表键 + 持有变量** | ✅ **改**(`treasure_items` / `TreasureItemTable`)——纯进程内,加载期从 `loaded.get()` 取,不落盘 | +| `config_db.gd:27` `"aux_items": "aux_items.tres"` | **表注册项** | ✅ **改**(ConfigDB 内部映射,两端同改即闭合) | +| `adventure_runner.gd:976/844` `"aux_items"` | **断点存档键** | 🔴 **禁改** + 加注释标记 | +| `smoke_all.gd:4473/4495` `"aux_items": [...]` | **冒烟夹具(构造断点快照)** | 🔴 **禁改**——它构造的就是存档键,改了则夹具与真存档脱节、测试失去意义 | + +### 4.3 ✅ C1 裁决落地:`"aux_item"` 域串**照改**(连锁面已实测收窄) + +**用户 2026-10-05 拍板全改。实测复核后连锁面比预估小得多**: + +| 原判断 | 实测 | 结论 | +|---|---|---| +| 要改 `reward.tres` 数据行 | **`reward.tres` 已零 `aux_item` 数据行**(aux_item 池种随迭代 11 第①批 T7 退役) | ✅ **无需改数据文件** | +| 要改冒烟断言 | `smoke_all.gd:3932-3933` 断言 `size()==10 and has("aux_item")` | ⚠️ 断言**必须同步改**(枚举与断言同源) | +| schema 契约 | `reward_table.gd:15/16/50` | ✅ 改(枚举 + 常量 + 校验分支) | + +**全仓 `"aux_item"` 字面量 16 处(全部代码内闭合,**无跨局存档依赖**)**: + +| 文件:行 | 用途 | +|---|---| +| `adventure_runner.gd:231/366/490/510/556/583/601/672` | 分派与兑付(8 处,同一分派语汇) | +| `reward_table.gd:15` `CELL_TYPES` · `:16` `AUX_ITEM_TYPE` | 枚举与常量 | +| `battle_narrator.gd:115` | 叙述分派键 | +| `bonus_interact_controller.gd:127` | 呈现分派键 | +| `smoke_all.gd:562/3847/3932` | 冒烟断言与夹具判断 | +| `reward_dangling_aux_test.gd:25` | 夹具注入串 | + +> ✅ **这 16 处无一是存档键**(对比 §4.1 的 12 处)——**可彻底改,无兼容风险**。 +> ⚠️ 改后 `smoke_all.gd:3932` 断言须同步为新字面量,否则冒烟红。 + +### 4.4 其他禁改项 + +### 本批**不做**(硬边界,违反即 L3 停机) + +| 禁项 | 理由 | +|---|---| +| **断点存档键一律保留** | 用户 2026-10-05 明令。`bonus_aux_carry` / `aux_detail` / `aux_cleared` / `aux_cleared_last` / `aux_items`(断点数组)/ `attunement_charges` **一字不改**——破档即玩家进度丢失 | +| **registry 条目键 `aux_items` 不改** | 属数据契约键(`design/registry/entities.yaml`),与 06 更名批的"条目键沿用"口径一致。⚠️ 注意与 §4.2 的 ConfigDB 表注册键区分:**registry 条目键禁改,ConfigDB 表注册键可改** | +| **数值零触碰** | 本批纯改名。`magnitude` / `charge_n` / `w` / `t` / 权重档位**一律不动** | +| **行为零变更** | 不得借改名之机重构逻辑、调参数、改流程 | +| **`magic` 格面族与 `ward` 护甲** | 敌方语汇,与本批无关(组 D 已锁) | +| **Godot 类名/文件名改动须同步 `.uid`+`.tscn`** | 漏改 = 类名缓存错乱(迭代 14.5 实证坑) | +| **不改 `game/README.md`** | 文档侧已由 `430419c` 收口,本批零文档债 | + +### 降级面(可接受的**部分完成**形态) + +若 T1 之后发现全族换词的连锁面超出预期,**允许降级**,但必须按序: + +| 级 | 降级形态 | 代价 | +|---|---|---| +| G1 | 组 A + D 完成,组 B/C/E 留 backlog | 玩家可见歧义已消,代码词根仍不一致——**可接受终态** | +| G2 | A+B+C+D 完成,组 E 留 backlog | 测试文件名/局部变量暂旧——**可接受终态**(测试仍跑得通) | +| G3 | 仅组 A 完成 | 玩家歧义消但代码债留存——**下限,不可再降** | + +> **降级总则**:一轮一降级;连续两卡降级 = L2 记录;🔴 契约项不可降级(存档键 / 数值 / schema 契约)。 + +## 5. 设计契约(🔴 触碰 = L3 停机) + +| # | 契约 | 验证方式 | +|---|---|---| +| 🔴 R1 | **存档兼容零破坏** | 断点续玩回归:存 → 退 → 读 → 持有集/充能余量/候选详情逐项一致;`attunement_charges` 充能账本不丢 | +| 🔴 R2 | **数值零漂移** | MC 逐位对拍(`adventure_monte_carlo.gd` 锚种子)输出**逐位相同**;冒烟数值断言全绿 | +| 🔴 R3 | **schema 契约面零变更** | 加载期校验行为一致:格面十型封闭校验、悬空引用校验、跨表校验(`config_db_cross_validator.gd`)错误消息语义不变(**文案可变、行为不可变**) | +| 🔴 R4 | **零 schema 字段更名** | `item_id` 主键 / `effect_kinds` 值域 / `form` 值域 / `slot_cost` 全部原样 | +| 🔴 R5 | **零 await 保持** | 核心层(`core/`)不因改名引入 await/异步——破坏可回放性(MC 逐位对拍的前提) | + +> R1–R5 任一破 = **L3 停机写报告**,不自行修复后继续。 + +## 6. 任务卡(逐卡一个 loop 轮次) + +| 卡 | 内容 | 估时 | 轻闸 | 完成判据 | +|---|---|---|---|---| +| **T0** | 开工:worktree + 基线复读(冒烟实际值/十一探针/MC 基准/三闸)+ `git status` 归属核对 + 记录 `.uid` 清单 + **回填 §1.2 基线数字** | 0.5d | 全量冒烟基线 | 基线数字回填进本文档 §1.2 且全绿 | +| **T1** | **组 A + D**(玩家可见文案 + 中文注释层) | 0.5d | 冒烟 + `grep "魔法道具" game/` 零命中 | 组 D 分色表零误改(`魔法矢`/`魔法护甲` 未被误改) | +| **T2** | **组 C**(链接修复,含 architecture.md 既有断债清偿) | 0.25d | doc 三闸 | `doc_link` 对基线**零新增** | +| **T3** | **组 F**(`"aux_item"` 分派语汇与域串 16 处,含冒烟断言同步) | 0.5d | 冒烟 + MC 对拍 | `smoke_all.gd:3932` 断言同步后绿;`reward.tres` 零改动 | +| **T4** | **组 B-1**(schema 文件名 + 类名 + `.uid` 同步 + `--import` 重刷) | 0.75d | 冒烟 + `--import` 后类名解析 | `TreasureItemTable` 加载零报错 | +| **T5** | **组 B-2**(ConfigDB 持有变量 + 表注册键 + 访问器 + 全部调用方跟改) | 0.75d | 冒烟 + MC 对拍 | 冒烟数值断言全绿;**§4.2 四处同名用法按表分置** | +| **T6** | **组 E-1**(测试文件名 + preload + run_all 登记) | 0.5d | 冒烟(十五套件全跑) | `run_all` 无 fixture 缺失 | +| **T7** | **组 E-2**(内部变量换词,**存档键字面量除外**) | 0.5d | 冒烟 + MC 对拍 | MC 逐位零漂移;§4.1 十二处存档键**逐字未变**(diff 专项核) | +| **T8** | **重闸**:全量轻闸 + doc 三闸 + 熵增闸 + MC 逐位对拍 | 0.5d | 重闸全绿 | §1.2 判定 3 五项全绿 | +| **T9** | **人闸**:目检清单(含 C 区槽位标题与 tooltip 实机确认)+ 代拍板追认 | 0.5d | 目检过 | §1.2 判定 4 | +| **T10** | **收口五步** | 0.25d | — | §1.2 判定 5 | + +> 估时合计 ≈ **5.5 日**,**超 roadmap 软盒 3 日上限**。知情预挂:T8 后按 L3 呈报切点,不擅切(沿迭代 9 先例)。或执行中触发 G1/G2 降级可压至 3 日内。 +> +> **T7 的存档键零变更核验方法**:`git diff` 后逐条比对 §4.1 表中 12 处键名字面量,须**逐字节一致**——这是本批最容易破档的一卡,须专项核。 + +## 7. 冲突面裁决记录(C1/C2/C3 **已全部关闭**) + +### C1 · `"aux_item"` 格面域串改不改? ✅ **已裁决:全改(用户 2026-10-05)** + +**原事实**:`"aux_item"` 是加载期校验域串,改动 = 三重连锁(enum + .tres 数据行 + 冒烟断言)。 + +**裁决后实测收窄(关键)**: + +| 原判断 | 实测结果 | +|---|---| +| 需改 `reward.tres` 数据行 | **`reward.tres` 已零 `aux_item` 数据行**(池种随迭代 11 T7 退役)→ **该连锁项消失** | +| 需改冒烟断言 | `smoke_all.gd:3932-3933` 断言必须同步改(**唯一保留的连锁项**) | +| schema 契约 | `reward_table.gd:15/16/50` 照改 | + +**结论**:全仓 `"aux_item"` 字面量 **16 处,全部代码内闭合,无跨局存档依赖** → **可彻底改,无兼容风险**。落地细则见 §4.3。 + +### C2 · `aux_items` 一名两义拆不拆? ✅ **已裁决:拆(用户 2026-10-05)** + +**裁决**:内部持有变量与注册表键 ✅ 全改;断点存档键 🔴 保留 + 加禁改注释;冒烟夹具 🔴 保留(它构造的就是存档键)。 + +**解法核心**:**"键名禁改"与"变量名禁改"是两回事**——禁改的只是落盘的键名字面量,进程内的变量名/注册表键照改不误。这就把一处危险同名拆成了「两个可改 + 两个不可改」的清晰边界。 + +| 位置 | 语义 | 处置 | +|---|---|---| +| `config_db.gd:27` `var aux_items` / `:50` 持有变量 | 进程内持有 | ✅ 改 `treasure_items` | +| `config_db.gd:27` `"aux_items": "aux_items.tres"` | 表注册项 | ✅ 改(两端同改闭合) | +| `adventure_runner.gd:976/844` `"aux_items"` | 断点存档键 | 🔴 禁改 + 注释 | +| `smoke_all.gd:4473/4495` `"aux_items"` | 冒烟夹具 | 🔴 禁改(改则夹具与真存档脱节) | + +落地细则见 §4.2。 + +### C3 · 与同迭代 ② 奇物批的串行次序(✅ **2026-10-05 已消解**) + +**原事实冲突**:两批同属迭代 15、**撞同一批文件**、**双方都动断点存档键**。 + +**✅ 消解结论(2026-10-05 07:29 复核)**:② 奇物批**已收口落库**(合并提交 `c571af2`),**并行撞批风险解除**。本批现为迭代 15 唯一在途需求,可独立开工。 + +**⚠️ 残留义务**: +1. **T0 须重新取基线**——② 已把冒烟推进(判式换代批 T5 出口读数 **750/0**、奇物批又动数据层),§1.2 的 747 是②之前的旧数,**禁止沿用**。 +2. **T0 须复核 §2 全部事实表**——② 改动面覆盖 `adventure_runner.gd` / `config_db.gd` / `level_runner.gd` / `adventure_table.gd` / `adventure.tres` / `relic_table.gd` / `shop_table.gd`,其中 `adventure_runner.gd` 是本批 F2 第一重灾文件(79 处)。 +3. **② 的"存档键正式迁移"待裁点状态须查清**——若 ② 已迁移了 `bonus_aux_carry` / `aux_items` 等键名,本批 §4 的禁改清单须同步更新(**这是本批唯一仍需向用户确认的残留项**)。 + +## 8. 代拍板白名单 + +**白名单内**(执行会话可直接决断,commit 记录): +- 内部变量/方法/文件/类的具体英文词形选择(`treasure_items` / `secret_treasure` 等,须语义贴"秘宝") +- 新旧标识符在同一文件不同位置的**注释措辞** +- 改名顺序与提交粒度(§3 五组可再细分) + +**白名单外**(须回报用户): +- 任何 🔴 R1–R5 契约的取舍 +- 降级级别选择(G1/G2/G3) +- 冒烟基线数字与本文档不符时的取用 +- **§4.1 存档键白名单的任何增补**(增补即意味着扩大破档面) +- **§4.0 三类例外的边界质疑**(例如某个 `magic_` 标识符到底属敌方语汇还是秘宝概念) + +> ✅ **C1 / C2 已于 2026-10-05 裁决关闭**(全改保一致),不再是待裁点。 + +## 9. loop engineering 八件对照(合规自证) + +| # | 八件要求 | 本文对应 | 状态 | +|---|---|---|---| +| 1 | 计划书八节(目标完成定义/现状事实/设计契约/范围边界/任务卡/验证闸/异常分级/代拍板白名单) | §1 目标与完成定义 · §2 现状事实 · §5 设计契约 · §4 范围边界 · §6 任务卡 · §6/§7 验证闸 · §10 异常分级 · §8 白名单 | ✅ 八节齐 | +| 2 | T0 开工(worktree + 基线复读 + 归属核对) | §6 T0 卡 | ✅ | +| 3 | 循环骨架(一轮一卡:读卡→对事实源→实装→轻闸→提交→台账) | §6 各卡 · 纪律见下 | ✅ | +| 4 | 轻闸(冒烟 + 十一探针;触 presentation 加 click/layout) | §6 各卡轻闸列 | ✅ 组 A/B-2 触 presentation → 须加 `ui_click_probe` + `ui_layout_probe` | +| 5 | 重闸(批末:全量轻闸 + doc 三闸 + 熵增闸 + MC 逐位对拍) | §6 T7 · §1.2 判定 3 | ✅ 本批涉 core → **MC 逐位对拍必跑** | +| 6 | 人闸(目检 + 代拍板追认 + 异步终审) | §6 T8 | ✅ 本批无样张类 → 异步终审触点不适用(可省) | +| 7 | 异常分级(L1 自救 / L2 记录 / L3 停机) | §10 | ✅ | +| 8 | 收口五步 | §6 T9 | ✅ | + +**执行纪律补充**(承 roadmap §执行纪律): +- **一批一 loop**:本批单独成 loop,不与他批并行;单 worktree 多点提交一次合并 +- **worktree 铁律**:开工必建 worktree(`../g-plan2-iter15-code-align`),轮内禁开第二个 +- **测试执行两入口铁规**:改标识符后**无法靠文档层自证**,冒烟必须在 T1 之后每轮实跑 +- **归零式改名慎独**:358 处机械替换,**必须分组 + 分轮**,禁止一次性全仓 sed(否则断链与误改不可定位) +- **提交粒度**:A/D 一组、B-1、B-2、E-1、E-2 各一提交,便于逐段回滚定位 + +## 10. 异常分级 + +| 级 | 触发 | 处置 | +|---|---|---| +| **L1** | 单点改名后冒烟红 | 一次重试(自查字面漏改/`.uid` 未刷);仍红 → L2 | +| **L2** | 同类错误连续 3 轮 / 连锁面超预期 | 记录进本任务书 §4 降级面 + 台账,降级继续(不阻断全批) | +| **L3** | 任一 🔴 R1–R5 破 / C1·C2 久决不下 / 需动数值或 schema 契约 | **停机写报告**(列事实+影响面+方案对比),等用户发令;**不自行决断** | + +## 11. 现状留痕(供执行会话读序) + +``` +1. 本文 §7 冲突面 C1/C2/C3 → 若用户未拍板,T0 后即停机呈报 +2. design/gdd/systems/排雷循环/秘宝.md v0.9(设计权威·换名理由与代码欠债登记) +3. design/registry/entities.yaml(条目键 aux_items = 数据契约键,禁改依据) +4. design/gdd/06-待办清单.md(「命名统一后续」条目 = 本批的 06 登记源) +5. design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md(同迭代 ②·撞批对象,见 §7 C3) +6. .zcode/inflight-active-backup-*.md 台账 352(迭代 15 需求① 落籍态) +``` + +> **注 1**:`entities.yaml` 无法被标准 YAML 解析器读取(项目把 `**粗体**` 当键名用,改动前即如此)——校验结构须用正则提取键集合比对,**勿用 `yaml.safe_load`**。 +> +> **注 2**:局内「奇物」概念文档 = [奇物.md](../gdd/systems/冒险循环/奇物.md) v2.7(7 轮裁定定稿,2026-10-05 落文),任务书 = `任务书-奇物词族对齐与渠道分离批-2026-10-05.md`。**本批与它分属两套词族**(`aux_*` = 局外秘宝 / `feature_*`·`relic_*`·`bonus_*` = 局内奇物),但撞同一批文件——见 §7 C3。 diff --git a/design/research/任务书-美术圣经v3.5冻结与落码-2026-09-29.md b/design/research/任务书-美术圣经v3.5冻结与落码-2026-09-29.md deleted file mode 100644 index c3603ff6..00000000 --- a/design/research/任务书-美术圣经v3.5冻结与落码-2026-09-29.md +++ /dev/null @@ -1,54 +0,0 @@ -# 任务书:美术圣经 v3.5 冻结与落码(棋盘高墙+UI 视觉规格落地,迭代 9 前置卡组) - -> 2026-09-29 由主会话固化,交执行会话。用户新 v3.5 方向稿验收通过(原话「暂时没有其他问题,可以使用」,台账 281 验收记录)后立项;本任务书=批 A(机检冻结)+批 B(落码)两段的执行规格,编入 roadmap 迭代 9 前置卡组。 -> **执行前必读**(按序): -> 1. `tools/render_sample_sheet_v3.py`——**视觉规格正文**(用户验收态脚本,新 v3.5=merge 4f6ac17);三条用户指令的落地实现都在此文件 -> 2. `design/art/art-bible.md` v3.0(2026-09-29 中修批——明度分层/色牌降级/语义色域限定/装饰解禁/整屏样张闸/舞台正面目标/全局对比度/字号 16-14) -> 3. `design/research/art-bible-ux-review-2026-09-29.md`(六病根审视报告——本批修法依据,merge d88dae8) -> 4. `artwork/mockups/sample-batch-v35-draft-2026-09-29.png` + `v35-new-board-zoom-2026-09-29.png`——**用户验收基准图**(落码后实机与此对齐) -> 5. `artwork/mockups/v33-tile-consensus-2026-09-29.png`——板块共识图((a)–(j) 概念定案,用户全确认) -> 6. `CLAUDE.md` 分支纪律(worktree 铁律) -> 规格均已拍板,勿重新发明需求;**规格理解有分歧→停下向用户复述确认,勿自行变通**(2026-09-29 流程红线:复述确认制——视觉类改动先文字复述+疑点列清,用户逐条确认后才动手;「顺手改」零容忍)。 - -## 1. 背景与现状 - -- 圣经 v3.0 中修批已落(案 B,merge 9d69c7e);样张方向稿 v3.x 系列经用户逐轮目检+复述确认制收敛至**新 v3.5**(旧 v3.5/v3.6 被用户删除视同不存在,基线=v3.4 文件+三条指令)。 -- **新 v3.5 视觉规格(用户验收定案,本任务事实源)**: - 1. **格底明度分档**:已开格底=地板瓦片归一 L≈0.10(候选带 0.08–0.14;现行瓦片 L0.036 实为**提亮**;方向稿用程序归一示意,终稿归地板素材重产,§8.5); - 2. **数字亮墨直画**:三档色温——1–3 冷亮 `#D8ECF0`/4–5 暖白 `#F0E2C8`/6–8 金亮 `#F8E3A8`,直接画已开格底,实测对比 6.0–6.3:1; - 3. **色牌后备**:`#F5EAD3` 仅复杂格底(物件纹样/装饰变体格)垫牌兜底,牌上用深墨族(12:1); - 4. **E 格高墙(用户三条指令)**:地面格南邻墙→南部 **30%** 承接墙面(=墙顶瓦片纹理**原亮度**直贴,零暗档零阴影——用户终裁「没有什么阴影影响,它们是同样颜色的」);(b)-(c) 连接处**无边框**(渲染格线跳过该交界段);连续墙体内侧不出立面; - 5. **南向厚度面**:v3.4 现状保留(南向墙格底部暗档+D 投影黑带在用户验收图内,本批不动); - 6. **装饰物件级解禁**(小石块堆演示态,专属形状家族+零信息纪律)、**B 区舞台**(世界底层暗背景+顶光柱+地台落影,§6.1); - 7. **整屏四屏方向稿已出**(战斗=样张内嵌;关卡/菜单/营地=`artwork/mockups/v3-draft-2026-09-29/`;营地屏首次成稿)。 - -## 2. 批 A:机检冻结批(纯脚本断言定值,零视觉变化,半日级) - -- **A1 断言定值**:`render_sample_sheet_v3.py` 内「候选/参考/待校准」口径转正式——A3b 图底分离 Δ≥30 定值(实测 38);F6 沿用 v3.4 双明度带口径;A4 尺寸基线按现行资产实态固化(立绘 46×48 等)。 -- **A2 产物转正**:输出名转 `sample-batch-v3-final-<日期>.png`+机检报告落 `design/research/` 标注「冻结」;圣经 §1.4 补样张 v3 冻结条目(四冻结之①④**重冻**:数字形制=亮墨直画+色牌后备;砖面形态=E 格高墙 30% 词表扩展)——圣经版本号 v3.1。 -- **A3 人闸豁免说明**:气质终审已由用户 2026-09-29 验收完成(台账 281),冻结批不再开人闸。 -- **验收**:机检 17/17 全绿+圣经 v3.1 落籍。 - -## 3. 批 B:落码批(迭代 9 前置卡组,逐卡对应 06 条目) - -- **B1 棋盘渲染**(`board_world.gd`/`board_cell_unit.gd`):E 格高墙进实机渲染(方向稿 draw_facade/is_facade_cell 算法移植——30% 高/顶面纹理原亮度/连续墙内不出立面;(b)-(c) 交界无边框=格线绘制跳过该段);地板归一 L0.10(程序归一同方向稿,素材重产归资产批);南向厚度面保持现行。 -- **B2 数字承载切换**(`ui_kit.gd`+数字渲染路径):亮墨三档直画+色牌后备路径(复杂格底判定=物件纹样/装饰变体格);旧「数字必垫色牌」路径退役。 -- **B3 ui_kit 对比度与字号**:现行 4 处不达标修复(C 区属性行 1.31:1/结算明细条 2.63:1/菜单说明 2.58:1/菜单副标题 3.54:1——实测数据=`artwork/ui-redesign-2026-09-29/对比报告.md` §一,其「落地顺序」1/2 步并入本卡);字号下限正文 ≥16px/tooltip ≥14px;暗底呈现态双色墨制扩展到全部暗底件。 -- **B4 B 区舞台**:世界底层暗背景+立绘地台落影+顶光柱氛围(§6.1 正面目标落码;方向稿 B 区画法=render_sample_sheet_v3.py render_battle_screen)。 -- **B5 整屏样张闸首跑**(§1.4 新闸):战斗/关卡/菜单/营地四屏断言——全局文字 ≥4.5:1/明度三档带(信息面>世界中>世界底)/整屏焦点预算/文字禁压纹理;HTML 方向稿(v3-draft 目录)为关卡/菜单/营地屏基准。 -- **B6 探针与冒烟**:ui_input/click/layout 三探针随动+run_smoke 全量;**重闸**=全量轻闸+doc 三闸+熵增闸(涉呈现不涉核心,MC 对拍预期零扰动——呈现层改动不触逻辑)。 -- **人闸**:实机目检由用户终验(对照 v35 验收基准图)。 - -## 4. 纪律与边界 - -- worktree 铁律;**复述确认制**(视觉类改动先复述后动手);素材不入 git(`load_tex` exists 守卫);§8.5 结构件纪律(禁渐变伪造结构件)。 -- **明确不在本批**:资产升档重产(64/96 档——06「资产升档重产批」独立挂账)/地板瓦片素材重产(落码用程序归一,重产归资产批)/underdark·deep_underdark 换色/营地 2D 画面(M-4)/关卡地图屏结构改动(冻结件不动)。 -- 已知限制逐条知悉,不在本批顺手修。 - -## 5. 参考料 - -- 06-待办清单对应条目:「样张 v3 重跑批」(本任务书批 A 即其执行)/「ui_kit 与棋盘渲染落码批」(=批 B)/「资产升档重产批」(不在本批)。 -- 用户验收链:审视报告(d88dae8)→圣经 v3.0(9d69c7e)→方向稿 v3.x 系列(273-281 台账)→新 v3.5 验收(4f6ac17)。 -- 反面清单(已有教训,勿重犯):E 墙面禁平涂新颜色(材质必须取墙顶瓦片);禁自加光影/明度分档类「专业表达」;改渲染层先清查既有结构件叠加时序;worktree remove 前先拷产物回主区。 - -*任务书 2026-09-29 由主会话固化;规格源头=用户逐条拍板(台账 273–281+圣经 v3.0+新 v3.5 三条指令)。* diff --git a/design/research/任务书-视野迷雾实施批-2026-10-02.md b/design/research/任务书-视野迷雾实施批-2026-10-02.md deleted file mode 100644 index cc4b2f18..00000000 --- a/design/research/任务书-视野迷雾实施批-2026-10-02.md +++ /dev/null @@ -1,65 +0,0 @@ -# 任务书:视野迷雾实施批(编卡草案——裁决已齐,待主线排期点名) - -> 成文 2026-10-02。裁决权威 = [HUD框架](../gdd/systems/表现与支撑/HUD框架.md)「视野迷雾:菱形灯光区与黑暗边界」节 v0.13(全项目唯一正主,2026-09-30 用户拍板立项+四配套裁决随节)+ [06-待办清单](../gdd/06-待办清单.md)「视野限制/魔法提灯」条状态节。**本批无待裁拍板点**——四裁决(甲案迷雾/暗淡记忆态/8 格同圈/提灯+2 微光不扩)全部已落正主节。**排期:默认 M-4 窗口(迷雾改玩家可见信息面,若插 Alpha 前会顺延 T19 真人读数采集——插队须用户点名);点名即开工,本文不占迭代号。** - -## 一、迭代目标与完成定义 - -**目标一句话**:棋盘只完整渲染以角色为中心的菱形灯光区(起步半径=微光环 8 格同圈),区外未开格全黑、区外已开格暗淡记忆态(灰显可读、数字可读),灯光随角色移动实时跟随——洞穴举灯探索的纯呈现层机制。 - -**完成定义**:①迷雾遮蔽+灯光区跟随上线(迷雾开关可分层验证);②暗淡记忆态呈现(区外已开格灰显、数字仍可读);③art-bible 黑暗区域渲染规格落文(暗淡态明度/迷雾过渡——现圣经零此节,T1 补);④探针断言(迷雾边界/记忆态/两态逐位一致);⑤正主节验收线(HUD框架:264)全过+实机目检人闸。 - -## 二、现状事实(代码级,2026-10-02 核证) - -| 面 | 现状 | 位置 | -|---|---|---| -| 正主定义 | 迷雾节 v0.13 全定义在案(生命周期/边界/验收线 264),**实施零开工** | `design/gdd/systems/表现与支撑/HUD框架.md:157-168,264,299` | -| art-bible | **无黑暗区域/迷雾渲染节**——暗淡态明度与迷雾过渡规格缺位,归本批补 | `design/art/art-bible.md`(grep 零命中) | -| 格态 | 已开/未开两态(雾格 2026-09-15 整体退役);初始展开=出生 3×3+连通开阔地(10×10 板均值 66.5 格——**收窄不在本案**) | 排雷玩法 v0.2 版本行 | -| 微光 | 英雄周围 8 格未开格类型微光(五组色相样张 v2 冻结,art-bible §4.2)——灯光圈与微光环同圈起步 | art-bible §4.2 | -| 提灯 | **效果载体不在本批**:提灯=aux_items 新行随 Alpha 信息件重定批登记;灯甲呈现面挂「资产升档重产批」——本批只把半径做成参数化(+2 留插值位) | HUD框架:168 | -| 渲染载体 | CellUnit 逐格 CanvasItem(144 格/12×12 板)——per-cell 调制为最小侵入路径;结算期去饱和偏移(settlement_fx_view)为同族先例 | `game/presentation/views/` | -| 探针 | ui_input_probe 十一断言现行——迷雾新增呈现态断言随批扩 | `game/smoke/ui_input_probe.gd` | - -## 三、设计契约(违反即返工,🔴 触碰=L3 停机) - -1. 🔴 **纯呈现层**:已开/未开格态、数字真值、清图判定零影响——同板同动作序列迷雾开/关两态结算结果**逐位一致**(MC 对拍零扰动是硬断言);核心层零改动零触碰。 -2. 🔴 **类型微光不随视野扩**(裁决④):类型先读仍只贴身 8 格,微光锚=可挖域;迷雾只遮蔽「灯光区外」的视觉,不改微光语义。 -3. **黑暗区域规格先落 art-bible 再落码**(规格不重发明纪律——T1 前置 T2)。 -4. 素材不入 git;迷雾渲染零新素材(程序化遮罩/调制)。 -5. 半径参数化(LIGHT_RADIUS 表值/常量),+2 提灯插值位预留但不接效果。 - -## 四、范围边界 - -**本批做**:迷雾遮蔽+菱形灯光区(8 格起步参数化)+暗淡记忆态+art-bible 黑暗区域节+探针断言+实机目检人闸。 - -**本批不做**:初始展开收窄(后置与「雷格与安全格资源分布差异化」Alpha 批窗口合并再议);提灯效果接线(aux_items 行归 Alpha 信息件重定批);提灯灯甲立绘呈现(挂资产升档重产批);微光语义任何改动;核心层任何改动。 - -## 五、任务卡(T0–T6) - -| 卡 | 内容 | 估时 | -|---|---|---| -| T0 | 开工基线:worktree+归属核对+冒烟复读+MC 对拍基准记档(纯呈现批零漂移预挂) | 0.5h | -| T1 | **art-bible 黑暗区域渲染规格落文**(新节):区外未开格全黑(不透明 vs 高遮蔽档二选一落定)、暗淡记忆态明度值(灰显可读档)、迷雾过渡边(硬边 vs 渐过渡)、与亮墨三档/色牌的叠读可辨性自查 | 0.5d | -| T2 | **迷雾渲染落码**:菱形灯光区(曼哈顿距离 ≤8 参数化)随角色位置实时跟随;区外未开格全黑遮蔽;战斗内持续/换图重置生命周期 | 1d | -| T3 | **暗淡记忆态**:区外已开格灰显+数字仍可读(明度按 T1 冻结值);与结算期去饱和的叠加态共存校验 | 0.5d | -| T4 | **探针断言**:迷雾开/关两态结算逐位一致(确定性夹具)、灯光边界格呈态、记忆态可读性、半径参数生效 | 0.5d | -| T5 | **连带修订**:HUD框架 迷雾节补「已实施」注记+art-bible 版本行+06 条目收口 | 0.5h | -| T6 | 重闸+出口人闸:全量轻闸+MC 对拍零漂移+实机目检(迷雾观感/记忆态可读性/移动跟随流畅度) | 0.5h+人闸 | - -## 六、验证闸 - -轻闸(每轮):run_smoke 全量+ui_input_probe(触碰 presentation 加 ui_click_probe+ui_layout_probe)。重闸(T6):全量+doc 三闸零新增+熵增闸+**MC 逐位对拍零漂移**(纯呈现硬断言)。 - -## 七、异常分级 - -L1 自救一次重试;L2 连续 3 次同红灯记录继续;L3 停机(触发面:契约 1 两态漂移、契约 2 微光语义被触碰、渲染性能塌方〔迷雾层致 draw calls 超 200 基线——须回 T2 换遮罩实现〕)。 - -## 八、代拍板白名单 - -可代拍:T1 规格落文的明度具体值(样张闸自检锚)、探针断言期望、doc 措辞。禁代拍:全黑 vs 高遮蔽档(人闸目检裁)、半径基准值改动、任何微光/格态语义。 - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1.0 | 2026-10-02 | 编卡草案成文:正主节四裁决已齐故无待裁拍板点;T0-T6;提灯效果面划出本批(归 Alpha 信息件批) | diff --git a/design/research/任务书-魔法道具同调实施批-2026-10-02.md b/design/research/任务书-魔法道具同调实施批-2026-10-02.md deleted file mode 100644 index ff31e4d9..00000000 --- a/design/research/任务书-魔法道具同调实施批-2026-10-02.md +++ /dev/null @@ -1,95 +0,0 @@ -# 任务书:魔法道具同调实施批(v1.1 定稿——P1-P8 已全裁,待 Alpha 后发令开工) - -> **⚠ 名称已变更(2026-10-05,用户拍板)**:本任务书成文时系统名为「魔法道具」,该名**已改为「秘宝」**(「魔法」一词在本作已被征用为敌方侧伤害/护甲语汇)。**本文正文按定稿原样保留旧名**,现行正主 = [秘宝](../gdd/systems/排雷循环/秘宝.md)。读本文时「魔法道具」= 现行「秘宝」;**任务内容与 P1-P8 裁决零变更**,同调位机制名亦保留不变。 - -> 成文 2026-10-02(v1.0 草案同日获 P1-P8 全裁,v1.1 落文)。设计权威底稿 = [proposal-magic-item-attunement-2026-09-22.md](proposal-magic-item-attunement-2026-09-22.md)(2026-09-22 用户八条拍板在案,本文不得与该裁决记录冲突)。**开工门(P7 乙)= Alpha 到手(M-3 关闭)+ 用户发任务书;届时迭代归属 M-4 迭代 11 评估窗口,与反制批/商店重构批并列排序。** - -## 一、迭代目标与完成定义 - -**目标一句话**:魔法道具从「局内掉落+关卡域库存+挖掘期两步使用」的切片期过渡形态,整体替换为「开局前营地装配、占同调位(0 起步/硬上限 3/里程碑谓词表增长)、被动件整局生效/主动件每冒险充能」的终局形态(八拍板底稿 §1.1)。 - -**完成定义**:①`attunement_growth.tres` 谓词表上线,同调位读数源从 `transitional_sync_slots` 过渡键切换(迭代 10 欠账③清偿);②营地装配覆盖层可装配/换装,装配关系入存档持久;③**九件**(被动 6+主动 3,含刷新件)效果全部接线可用;④局内 aux 获取渠道(掉落投放/停点渠道 aux 卡)退役,三选一池收缩注记;⑤attune=off/on 分层读数出讫;⑥连带修订面(§十)全部落文;⑦重闸全绿+出口人闸过。 - -## 二、现状事实(代码级,2026-10-02 核证) - -| 面 | 现状 | 位置 | -|---|---|---| -| 过渡键 | `transitional_sync_slots = 1`(provisional,schema 钳 [0,9]) | `game/data/tables/adventure.tres:24`;schema `adventure_table.gd` | -| 上限约束接线 | 停点渠道满位触发替换交互(N+1 选 N、可放弃);战斗内渠道满位沉没不入 | `game/core/level_runner.gd:562-566`(注释自认「全渠道统一收口随同调实施批」)、`game/core/battle_orchestrator.gd:375-378` | -| aux 表 | AuxItemTable 七字段 + MVP 六行(罗盘 retired/失义件 deferred);effect_kinds 现枚举 `mine_reveal/reward_preview/ap_grant`,dimensions 五维,use_phase 单值 `active_dig` | `game/data/schemas/aux_item_table.gd:24-29` | -| 存档 | v3 现行(断点附随件+摘要 keystone_drops);meta 域已有 `level_clear_counts`/`boss_first_kill`/`keystone_balance`/`forge_levels`/`item_unlocks`;**无 boss 击杀总数(含重复)计数器** | `game/core/save_manager.gd:33,78-79,202-224` | -| 计数源 | `clear_count()` 按关累计已有(裁决 4 的一半);Boss 首杀标记位已有、**总数另记未做** | `save_manager.gd:202-207` | -| 营地 | CampOverlay 三柜台(属性锻造/道具工坊/奖励格图鉴),行板结构带探针依赖 | `game/presentation/views/camp_overlay_view.gd:4-27` | -| 奖励面耦合 | 迭代 10 三选一池含 aux_item 候选卡(冒烟 a11 `_bonus_aux_carry` 断言在册)——同调批须把 aux 卡从池退役并收缩池 | `game/smoke/smoke_all.gd:517-529` | -| 工坊 | `workshop_items` 行族 clear_threshold [1,99] 六件,解锁门槛挂总通关次数 | `design/registry/entities.yaml:622` | - -## 三、设计契约(违反即返工,🔴 触碰=L3 停机) - -1. 🔴 **机制轴禁裸 flat 数值**(底稿 §1.2 立约)——效果字段出现无条件属性加项即返工;schema 校验「形态约束」随 T1 落。 -2. 🔴 **真视窄域护栏 ≤3×3**(承重,加载期校验)——探巢摆钟沿用,不得扩域。 -3. 🔴 **核心层零 await**(battle_orchestrator 文件头契约)——MC 逐位对拍漂移即 L3。 -4. **零随机**纪律:主动件效果信息全部来自既有事实源(恒真数字/Ready 映射/账本),零 RNG 流消费;三选一刷新的重抽消费 reward_pick 既有洗牌流,不开新流。 -5. **排雷玩法零特判延伸**:代码零魔法道具分支(现有承重规则,随批复核)。 -6. **雷安同池冻结不动**:偏运硬币只动池内权重投影,不碰池结构(底稿 §3)。 -7. **数值主权**:里程碑阈值/充能数/效果 N 值/X/Y 值全部 provisional 投表,归难度曲线与Boss;本文与任务卡只锁形态。 -8. **素材不入 git 维持**;装配 UI 程序占位面用 UiKit 既有件(字形回退合法)。 - -## 四、范围边界 - -**本批做**:A 表与 schema / B 存档与账本 / C 运行期(装配+被动+主动+三选一刷新)/ 退役面切换 / D 分层验证 / 连带修订面。 - -**本批不做**:装配 UI 视觉终稿(P2 甲——归营地批,本批程序占位);**GP 商店房重构(P1 衍生另立项,06 在册「GP 商店房重构」条)**;反制件铺量(§8.3,Alpha 反制批);淬毒刃纹形态终裁(§8.1 随试玩判读,本批按提案现形态投 provisional);属性锻造/GP 商店两数值轴任何改动;教学/引导面。 - -**退役面清单**(T7 执行):①掉落投放三件渠道(迭代 7 投放权重面)②停点渠道 aux_item 卡(三选一池收缩,注记随批)③关卡域库存+挖掘期两步使用的 aux 面拆改(四步受理保留给主动充能件复用)④`transitional_sync_slots` 过渡键退役(读取点切换 attunement 求值,迭代 10 欠账③注记)⑤F2 覆盖面与工坊「已退役」呈现面改写。 - -## 五、前置拍板点裁决记录(2026-10-02 用户全裁) - -| # | 拍板点 | 裁决 | -|---|---|---| -| P1 | 商店刷新件去留 | **甲+衍生新工作项**:①三选一刷新=X/Y 双源——X=魔法道具刷新件(**同调目录新增第九件**,占 1 同调位,每次碰三选一重新给 X 次、优先消耗、不结转)+Y=营地升级行(每冒险开局给 Y 次、冒险周期池、用完即无);初始 0=无刷新能力(与同调位 0 起步同构);刷新=重抽三候选,池规则(不放回/达上限剔牌/掷定前置直显/可中断停点)全保留。②**GP 商店房重构另立项**(06 已登记):与三选一同构交互——进店随机池抽 3、买 1 → **三个全重抽**(未买不保留)、无独立刷新动作(重抽绑定购买)、价格=基价×b^(关序−1)×A^(本次进店已购次数)(A 方向 1.5-2 ≫ b 方向 1.1,系数归 game-balancer 研究提案后用户拍板);商店池维持纯数值道具(三轴 doctrine 裁决 1 锁死);**2026-09-20「三件全陈列、无刷新」裁决正式取代** | -| P2 | 装配 UI 本批做到哪 | **甲**·程序占位面(复用 CampOverlay 行板件;视觉终稿归营地批,不卡样张闸) | -| P3 | 首批铺量 | **甲**·八件全上(淬毒/殉爆/惊巢/晨令/蓄能/摆钟/炸格/硬币)+P1 刷新件=九件 | -| P4 | 「前 3 轮」表值化 | **甲**·`effective_rounds=3` 入道具定义表(调平衡改表不改码) | -| P5 | 爆破工兵包 | **甲**·T6 前置半日影响评估(中立移除格态触排雷玩法/战斗结算/清图判定三面),破面大即拆后批 | -| P6 | 批体形态 | **甲**·知情超限单批(估 7-8 工作日 vs 软盒 3 日,迭代 9 两段式先例) | -| P7 | 迭代归属与门 | **乙**·M-4 迭代 11 评估窗口(**Alpha 到手后**开工;依据:aux 卡退役+同调带再扰通关率读数,迭代 10 刚锚 80000,Alpha 读数采完再动内容面) | -| P8 | 存档版本 | **甲**·v4+兼容迁移体(semver 断言,迭代 10 g 裁先例) | - -## 六、任务卡(T0–T10) - -| 卡 | 内容 | 估时 | -|---|---|---| -| T0 | 开工基线:worktree+归属核对+冒烟复读+MC 现行锚对拍基准记档 | 0.5h | -| T1 | **A 表与 schema**:`attunement_growth.tres` 新建(slot_cap/milestones 谓词行:计数键封闭枚举+阈值 [1,999]+Σgrant≤slot_cap 校验);道具定义表重构(形态 passive/active_charged、`charges_per_adventure`、`slot_cost=1`、`unlock_requires` 谓词行、`effective_rounds`)+**刷新件行(X 表值)**;「零裸 flat」形态校验入 schema;registry `attunement_growth`/`attunement_slots` 新条目 | 1d | -| T2 | **B 存档与账本**:save v4(装配关系/里程碑达成态〔或纯派生〕/`boss_kill_count` 总数/主动件充能余量/**Y 升级解锁态**);Boss 击杀总数事件挂收束入账处(`save_manager.gd:216-224` 邻接);`clear_count` 复用零改动 | 0.5-1d | -| T3 | **求值服务**:里程碑谓词实时求值(营地进冒险前求同调位 Slots=Σ达成 grant clamp slot_cap);过渡键读取点切换(level_runner/battle_orchestrator 两处+smoke 断言随动);迭代 10 欠账③切换注记 | 0.5d | -| T4 | **营地装配覆盖层**(P2 甲 程序占位):第四柜台 or 工坊扩容;装配/换装/同调位点亮呈现+**Y 升级行(购买/等级呈现)**;装配关系写存档;探针断言(装配持久/满位禁选) | 1d | -| T5 | **被动件接入**(P3 甲):淬毒→克制结算面;标中殉爆→旗判定面;惊巢反制→雷罚兑付减半+反弹;工兵晨令→`queue_ap_delta` 前 N 轮(P4 表值);偏运硬币→`reward_roll` 权重投影(池结构零触碰);**刷新件→三选一刷新消费逻辑**(BonusPickOverlay 刷新钮+X/Y 双计数器+优先 X+重抽保池规则) | 1.5-2d | -| T6 | **主动件充能编排**(P5 甲 前置半日影响评估,破面大拆后批):复用旧四步受理+每冒险充能扣减+冒险开始重置;掘进蓄能开格计数;探巢摆钟叠加层;爆破工兵包按评估结论 | 1.5d | -| T7 | **退役面切换**(§四清单五件):掉落渠道/停点 aux 卡/库存两步使用拆改/过渡键退役/F2 与工坊呈现改写;三选一池收缩与权重注记 | 1d | -| T8 | **D 验证**:冒烟新增断言(谓词达成/clamp/装配持久/充能重置/退役面零残/**刷新双计数器语义**);MC 增 attune=off/on 开关+贪心装配画像分层读数(≥50 distinct seeds;autoplay **默认不刷**——钓鱼归玩家,策略面注记随批;off 态 X=Y=0 零扰动);换算率表新增「同调轴」登记行(行值归调参批) | 1d | -| T9 | **连带修订面**(§十清单)+doc 三闸+熵增闸 | 0.5d | -| T10 | 重闸+出口人闸:全量轻闸+MC 对拍+出口检查单+代拍板追认清单 | 0.5h+人闸 | - -## 七、验证闸 - -轻闸(每轮):run_smoke 全量+ui_input_probe;触碰 presentation 加跑 ui_click_probe+ui_layout_probe。重闸(T10):全量+doc 三闸零新增+熵增闸+MC 逐位对拍(**attune=off 必须与现行锚逐位一致**——机制轴关着时零扰动是硬断言)。分层读数:attune=off 续用现行带;attune=on 带平移归调参批投值(底稿 §7,商店 shop=off/on 分层先例同法)。 - -## 八、异常分级 - -L1 自救一次重试;L2 连续 3 次同红灯记录继续+升级呈报;L3 停机写报告(触发面:契约 1-3 任何一条、炸格影响评估破面、MC off 态漂移、谓词表 schema 无法表达用户裁决的增长形态)。 - -## 九、代拍板白名单 - -可代拍:provisional 表值具体数字(形态已锁、归调参批复核)、冒烟断言期望值随实现微调、doc 措辞。禁代拍:目录增删件、同调位增长形态变更(谓词 schema 升级)、带值、X/Y 语义变更。 - -## 十、连带修订面(执行于 T9,底稿 §9 展开) - -`魔法道具.md`(定位重写+掉落/库存节退役,底稿即权威底稿)/ `元进度.md`(道具工坊柜台职责改写+Boss 击杀计数登记+**Y 刷新升级行登记**)/ `地图战斗资源.md`(硬币权重投影注记)/ `行动经济.md`(两 AP 件兑现通道注记)/ `05-不做清单.md`(道具替代推理边界锚复核)/ `关卡节点地图.md`+`node-reward.md`(奖励节点渠道退役改写 v2.1 随批修订+**三选一刷新注记**)/ registry `entities.yaml`(aux_items 重构+attunement 两新条目+save_file 新域注记)/ `06-待办清单.md`(同调实施批条目收口+迭代 10 欠账③销账+炸格待办 C 处置)/ art-bible 微光语义色冲突面(独立线,本批零触碰)。 - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1.0 | 2026-10-02 | 草案成文:提案 §6/§9 细化为 T0-T10+P1-P8 拍板点;现状事实按 2026-10-02 代码核证 | -| v1.1 | 2026-10-02 | **P1-P8 全裁落文**:三选一刷新 X/Y 双源入批(目录第九件刷新件+Y 营地升级行+T5 消费逻辑);GP 商店房重构另立项(06 在册);九件目录/T1-T8 卡调整;P7 乙定门=Alpha 后 M-4 迭代 11 评估窗口 | diff --git a/design/research/方案-挖掘风险不等式修订-2026-10-04.md b/design/research/方案-挖掘风险不等式修订-2026-10-04.md deleted file mode 100644 index e7db1e73..00000000 --- a/design/research/方案-挖掘风险不等式修订-2026-10-04.md +++ /dev/null @@ -1,326 +0,0 @@ -# 方案:挖掘风险不等式结构性修订(纯调研,零代码) - -> 日期:2026-10-04 -> 性质:调研报告——只推演、不跑模拟、不动代码与表值;拍板点全部归用户(见 §八) -> 事实源:战斗结算.md / 难度曲线与Boss.md / 增益状态.md(三正主)+ git 提交 d70f6c3 §二 + 现行 `game/data/tables/*.tres` + `tools/clear_dominance_audit.py`(注册重跑入口) - -## 一、摘要 - -**破线不是一个点,是四层,其中两层是结构性的(表值调不掉),两层是数值性的(现行值链下已有变化)。** - -| 层 | 判式 | 现行状态 | 量级 | 性质 | -|---|---|---|---|---| -| L1 界形式条款3 | P(安全)×增益当量**下界** > P(雷)×惩罚**上界** | 破线 | ×4.4 ~ ×13.3(缺口倍数) | **结构性**——最弱奖励 0.2 当量 vs 最强惩罚 8 当量,量纲断裂,任何表值微调闭不上 | -| L2 旗对已知安全格边际 | E[标中兑付] vs E[挖已知安全格] | 恒 ≤ 0 | 相对损失 = 清图进度 + 信息价值(当量外) | **结构性**——雷安同池 + 同正向字典 ⇒ 旗兑付分布 ≡ 安全格兑付分布,期望永不胜出;d70f6c3 的风险端 ×1.9 对此层**零效力** | -| L3 逐型条件净期望 | (1−ρ)P_t > ρN_t 逐型 | pierce 型破线 / magic 型破线 / heal 型踩线 | −1.25 / −0.50 / 0 当量·格(名义 ρ);pierce 型实测 ρ 下仍 −0.16 | 数值性——直伤三型(权重 26%)是残留破线的具体格子 | -| L4 盲挖净期望(聚合) | (1−ρ)E_dig − ρV_mine ≥ 0 | **已翻正** | +0.47 ~ +1.12 当量·格(u=1..3,名义 ρ) | 数值性——6/8/8 转正后比 d70f6c3 复算时更健康;但 V/E 比值在 u=3(多敌满配)最劣,与历史「多敌满配深度破线」同源 | - -**另一关键结论(推演引理,§四.3)**:雷安同池结构下,「标中旗 vs 盲挖」的比较退化为纯概率比较 **q > 1−ρ**(q = 玩家对该格为雷的置信),与全部当量表值无关——雷当量抬到多高都动不了这一支。风险端定价只影响「盲挖有多舒服」,不影响「旗相对盲挖有多值」。这就是 d70f6c3「缓解未闭合」的结构根源:**缓解的是 L3/L4,闭不了 L1/L2。** - -修订主推:**案甲(判式换代双条件)+ 案丙(比值带判读)组合**——先立新尺(判式换代是文档修订不是调参),旗溢价条款给 L2 结构破线一个正当地位。案乙(η 系数)降格为案甲的实测化读数而非独立判式;案丁(异池/累积惩罚)列结构后备,与 6/8/8 刚转正 + 普通 L2 缺口加深的现状有方向冲突,须用户裁。 - ---- - -## 二、口径与判式沿革 - -### 2.1 判式的四个历史形态 - -1. **注册判式(首版验算所据,现行文档已退役待重立)**——旧版行动经济五条契约条款3 原文: - ``` - 条款 3(挖掘决策健康不等式): - P(安全) × 增益当量下界 > P(雷) × 敌方增益当量上界 - ``` - 出处:git `7876642^`(八型批前)行动经济.md。首版验算破线记录见 06-待办清单「挖掘风险不等式对账破线」条(归档值链:防御增益时长 1、行值 −30;两参考板形破线、多敌满配深度破线;升格曲线级约束——相关参数处禁独立调参联动)。 -2. **八型批改写(2026-09-20,现行文本)**——行动经济.md:130:「原『敌方伏击暴露不等式』随伏击机制退役作废——blast 负向现况 = 警觉……**惩罚当量对账模型归难度曲线与Boss 调参批重立**」。→ 本报告即「重立」的底稿。 -3. **重立记录(M-3 迭代 5 T3,2026-09-28)**——`design/qa/m3-iter5-lever-scan-2026-09-28.md` §三②:当量换算走效果档位对照表(flat E=表值;percent E=|层×行值|÷100×D_ref 每结算每层;**AC 轴=点数×5pp×D_ref=0.2 当量/次攻击**);结论「风险端定价对收益端系统性不足的状态未闭合;修正位=雷格惩罚行值/负向权重池,不在本批注册杠杆集」。 -4. **全量复算(迭代 8 卡⑧,2026-09-29,git d70f6c3 §二)**:直伤三行 1/2/2→4/5/5 后风险端当量 ×1.9,「与收益端的差距收窄但未反转(收益端含资源/成长复利,风险端为一次性直伤)——破线状态缓解、未闭合;结构性修订(雷安同池/差异化/累积惩罚)留 Alpha 批」。 - -### 2.2 本任务工作定义与口径判读 - -任务书定义:「标中旗的期望收益必须优于随便挖一格(当量比较式)」。与在册条款的映射:这是**条款2(标中旗锚)+ 条款3(挖掘风险不等式)合并的行为学读法**——条款2 只保「weaken > 最低档增益」的单点对照,条款3 管「挖一格净期望 > 0」,两者都管不住「旗 vs 挖」的**边际比较**。本报告按任务定义展开推演,同时把三层口径(条款2 单点锚 / 条款3 聚合健康 / 旗-挖边际)分开判读——**口径取舍本身列为拍板点 P2**。 - -### 2.3 事实源核证两处(与 d70f6c3 §二 的口径差异) - -- **格池 = 77 权重,不是 76**。代码核证:`reward_economy.gd` `_rollable_rows()`(207-213 行一带)收 `pool_tag=cell & polarity=positive & weight>0` 全集;`clear_blast` pool_tag=`clear_default` 是**清图槽对象、不挂格**(地图战斗资源.md §清图槽明文)。d70f6c3 §二 的 76 口径把清障炸药 weight 1 混计入池,系历史混计。现行正向行权重:attack 14 / defense 11 / blast 16 / heal **4** / weaken 8 / pierce 8 / magic 8 / action 6 / gp 2 = **77**。 -- **直伤雷现行 6/8/8,不是 4/5/5**。d70f6c3 投的是 4/5/5(provisional);2026-10-01 数值修复批「配套直伤雷当量同步上调(reward.tres 4/5/5→6/8/8,雷痛回归用户口径)」;2026-10-03 带换代批「直伤雷当量 6/8/8 转正(去 provisional)」。heal 权重同批链 2→4(Package B 第 2 轮)。**即 d70f6c3 复算之后风险端又被抬了一轮,其「×1.9」读数已时效化**——本报告 §四 为现行值链重算。 - ---- - -## 三、现行值链快照与推演假设 - -### 3.1 表值快照(全部读表核证,2026-10-04) - -| 件 | 值 | 出处 | -|---|---|---| -| 参考敞口 D_ref | 4 | settlement.tres equivalence_ref_damage | -| 完美乘数 p_perfect | 200(×2 第二份) | settlement.tres | -| AC 掷点 | d20;缺口 1-3→×0.75 / 4-7→×0.5 / 8+→×0.25;nat20 ×2 恒全额;floor 1 | settlement.tres | -| 主角 | max_hp 26 / atk 2 / armor_class 10 | hero.tres | -| 行动经济 | ap_per_round 8 / dig 1 / flag 1 / refresh 8(cap 2) | action_economy.tres | -| 棋盘 | 10×10(L1 前段)与 12×12(后段/Boss),mine_density 0.25,inferability 0.88 | board_gen.tres | -| 实测幸存雷率 | 10×10 ≈ 12.91/100 ≈ 0.129;12×12 ≈ 22.6/144 ≈ 0.157(先布后删落地值) | smoke/board_stat_probe 200 样本(2026-09-19 读数;板形行值此后未变) | -| 格池正向行 | attack_up 14(+50%×1拍)/ ac_up 11(AC+1×1拍)/ spark_aoe 16(flat 1 全体)/ heal_minor 4(flat 2)/ weaken 8(−65% 敌输出,dur2=有效1拍)/ pierce_strike 8(flat 2+克制)/ magic_bolt 8(flat 2)/ ap_up 6(+1AP)/ gp_coin 2(+3GP) | reward.tres(77 合计) | -| 负向字典行(weight=0) | enrage +25%×1拍(attack)/ off_guard AC−1×1拍(defense)/ 警觉 敌AC+1×1拍(blast)/ heal_backlash **6**(heal)/ sapped −25%×1拍(weaken)/ pierce_snare **8**(pierce)/ magic_recoil **8**(magic)/ ap_drain −1AP(action)/ gp_lose −2GP(gp) | reward.tres + status_effects.tres | - -### 3.2 推演假设(判读时必须带着看) - -- **A1 当量口径**:效果档位对照表单一口径(战斗结算.md 收益对照表 + lever-scan 重立模型):flat E=表值;percent E=|层×行值|÷100×D_ref(每结算每层);AC 轴=点数×5pp×D_ref(每吃掷点攻击)。 -- **A2 u 缩放**:u = 敌方单位数。hero 侧单目标效果不随 u 缩放;enemy 侧 side-wide 效果(ac_up 承伤面 / spark_aoe / weaken / enrage / off_guard)随 u 缩放——沿 audit 工具既有口径。 -- **A3 duration**:weaken dur2 按「先兑付后衰减」计有效 1 拍;enrage/off_guard/警觉/sapped dur1 计 1 拍。 -- **A4 警觉消费面**:主角每拍恰 1 次攻击 × 警觉 1 拍寿命 ⇒ E = 0.2 当量,u 无关。 -- **A5 gp 当量 = flat power 代理**(金币袋 3 / 破财 2)。对照表 flat 类枚举(直伤、治疗、行动点)**不含 gp——口径空白,本报告按代理计并登记**;精确口径应经商店定价换算(1 GP 的边际属性当量),归状态层/商店批复核。 -- **A6 ap 当量 = flat 表值 1**。机会成本口径(+1AP ≈ 多挖一格 ≈ E_dig + 进度 + 信息)更高——差异登记,不进主算。 -- **A7 ρ 双口径**:名义 0.25 与实测包络(0.129 / 0.157)并报;主表用名义(保守)。 -- **A8 复利不建模**:收益端静态口径。d70f6c3/lever-scan 的「收益端含资源/成长复利」作为定性输入保留——含复利口径下 L4 的判读会更保守,量化归复算批(需先给复利系数定义,见拍板点 P5)。 -- **A9 简化**:治疗不做满血封顶折减、溢杀不折减、清图奖励不入逐格当量(单独在 §四.4 讨论其对旗激励的支配性)。 - ---- - -## 四、① 破线残留的具体位置与量级(静态推演) - -### 4.1 单格收益端 E_dig(u) 与风险端 V_mine(u) - -E_dig = Σ_t w_t·P_t ÷ 77(安全格类型正向期望当量);V_mine = Σ_t w_t·N_t ÷ 77(踩雷/标空惩罚期望当量,同池同分布)。 - -| 分型(权重) | P_t(正向当量) | N_t(负向当量) | P_t 项合计 | N_t 项合计 | -|---|---|---|---|---| -| attack(14) | 0.50×4 = 2.0 | 0.25×4×u = 1.0u | 28.0 | 14.0u | -| defense(11) | 1×0.05×4×u = 0.2u | 0.2u | 2.2u | 2.2u | -| blast(16) | 1×u = 1.0u | 0.2(警觉,A4) | 16.0u | 3.2 | -| heal(4) | 2 | **6** | 8.0 | 24.0 | -| weaken(8) | 0.65×4×u = 2.6u | 0.25×4 = 1.0 | 20.8u | 8.0 | -| pierce(8) | max(1, 2−1) = **1**(轻甲 −1) | **8** | 8.0 | 64.0 | -| magic(8) | max(1, 2+0) = 2 | **8** | 16.0 | 64.0 | -| action(6) | 1(A6) | 1 | 6.0 | 6.0 | -| gp(2) | 3(A5 代理) | 2 | 6.0 | 4.0 | - -| | u=1 | u=2 | u=3 | -|---|---|---|---| -| **E_dig** | 111.0/77 = **1.442** | 150.0/77 = **1.948** | 189.0/77 = **2.455** | -| **V_mine** | 189.4/77 = **2.460** | 205.6/77 = **2.670** | 221.8/77 = **2.881** | -| **V/E 比值** | **1.71** | **1.37** | **1.17** | -| 盲挖净期望(名义 ρ=0.25) | 0.75×1.442−0.25×2.460 = **+0.47** | **+0.79** | **+1.12** | -| 盲挖净期望(实测 ρ=0.129,10×10) | **+0.94** | — | — | -| 界形式(min P_t × 0.75 vs max N_t × 0.25) | 0.15 vs 2.00 → **缺 13.3×** | 0.30 vs 2.00 → 6.7× | 0.45 vs 2.00 → **4.4×** | -| 界形式(实测 ρ=0.129,u=1) | 0.174 vs 1.033 → **缺 5.9×** | — | — | - -### 4.2 逐型条件净期望(挖一格已知其类型,名义 ρ=0.25) - -(1−ρ)P_t − ρN_t,单位当量/格: - -| 型 | 净期望 | 判 | 备注 | -|---|---|---|---| -| attack | +1.25 | ✓ | | -| defense | +0.10u | ✓ | 对称轴,恒 3:1 | -| blast | +0.75u − 0.05 | ✓ | | -| **heal** | **0**(1.5 − 1.5) | **踩线** | 恰好等号;实测 ρ 下 +0.97 转正 | -| weaken | +1.70(u=1) | ✓ | | -| **pierce** | **−1.25**(0.75 − 2.00) | **破线** | 实测 ρ 下仍 **−0.16**——唯一实测口径也破的型 | -| **magic** | **−0.50**(1.50 − 2.00) | **破线** | 实测 ρ 下 +0.71 转正 | -| action | +0.50 | ✓ | | -| gp | +1.75(代理口径) | ✓ | | - -加权合计 +0.466/格(与 4.1 聚合式吻合,交叉验证通过)。**残留破线的具体格子 = 直伤三型,根源是同轴镜像比失衡**:pierce 正 1 vs 负 8(1:8)、magic 正 2 vs 负 8(1:4)、heal 正 2 vs 负 6(1:3)——d70f6c3 投值时的设计意图是「负向 ≈ 正向 2–2.5 倍」,6/8/8 转正后实为 **3/4/4 倍**,叠加甲效加法核对穿刺正向下行(轻甲 −1 点 → 落地 1),pierce 轴被压到 1:8。 - -### 4.3 引理:旗-盲挖比较的概率化退化(同池结构定理) - -设玩家对某格为雷的置信为 q,旗判式两侧(标中兑付 W、标空惩罚 C)与盲挖两侧(安全格收益 R、踩雷惩罚 M): - -``` -EV_flag(q) = q·W − (1−q)·C -EV_blind = (1−ρ)·R − ρ·M -雷安同池 + 极性矩阵同字典 ⇒ W = R = E_dig,C = M = V_mine -⇒ EV_flag − EV_blind = (q + ρ − 1)(E_dig + V_mine) -``` - -因 E_dig + V_mine > 0 恒成立,**符号只由 q + ρ − 1 决定**: - -- 旗优于盲挖 ⇔ **q > 1−ρ**。名义 ρ=0.25 → 阈值 0.75;**实测幸存雷率 0.129 → 阈值 0.87**(「先布后删」删掉的雷把盲挖变安全,间接抬高了插旗的置信门槛)。 -- **与 E_dig、V_mine、D_ref、直伤雷 6/8/8 全部无关**。风险端定价影响的是「盲挖有多舒服」(L3/L4),不是「旗相对盲挖有多值」——d70f6c3 ×1.9 的「缓解」不落在此支。 -- 可推理率 ι=0.88 下,可推理格的 q ∈ {0,1}(证明级),可证雷的旗恒胜盲挖——**真正卡住旗的是与「挖已知安全格」的边际比较**(下条)。 - -### 4.4 L2 结构破线:旗对已知安全格恒非正 + 完美排雷的支配性 - -``` -EV_flag(q) − E_dig = −(1−q)(E_dig + V_mine) ≤ 0,等号仅 q=1 -``` - -q=1 时旗与挖已知安全格**期望兑付恰好相等**(同为 E_dig),但挖格额外产出:①清图进度(通往清图奖励 + 终局)②数字信息(抬全体后续 q)。⇒ **完美信息下旗仍严格次优**。现行旗的真实经济支柱不是标中兑付,而是**完美排雷 ×2**(需至少一面标中:clear_blast 32 当量级第二份,比 E_dig 高一个数量级)。这解释了行为面:旗只在「凑完美排雷」时被策略性插,日常边际上无人为兑付插旗——与 d70f6c3「缓解未闭合」的行为学含义一致。 - -### 4.5 d70f6c3 §二 读数的时效性修正 - -| 指标 | d70f6c3 时(4/5/5,heal 2,池 76 口径) | 现行(6/8/8,heal 4,池 77) | 变化 | -|---|---|---|---| -| 直伤型概率 | 18/76 = 23.7% | 20/77 = **26.0%** | +2.3pp | -| 直伤型雷条件期望 power | 3.78 | (4×6+8×8+8×8)/20 = **7.60** | ×2.01 | -| 单雷期望直伤(条件于踩雷) | 0.89 HP | 0.260×7.60 = **1.97 HP** | **×2.2** | -| V_mine 全字典(u=1) | 125.4/76 = 1.650 | **2.460** | ×1.49 | -| V/E 比值(u=1) | ≈1.19 | **1.71** | 风险端相对更重 | - -即:**d70f6c3 之后的两批(数值修复批 6/8/8 + heal 4)已把风险端再推高一截,静态口径下 L4 聚合已翻正、L3 只剩 pierce/magic 两型、L1/L2 两层结构性破线依旧**。「破线残留」的准确表述:结构层(L1 界形式、L2 旗边际)未动;数值层(L3/L4)在现行值链下已大体闭合,唯 pierce 型与 u=3 比值劣化点(1.17,多敌满配与历史「多敌满配深度破线」同源)仍在带外。 - ---- - -## 五、② 结构性修订候选案 - -> 每案给:数学形态 / 对难度包络的冲击方向 / 实施与复算设计 / 代价与风险。**全部为提案,选型归用户。** - -### 案甲:判式换代——单点不等式改双条件 - -**数学形态**(接替旧界形式条款3,落行动经济 F1 条款3 重立 + 战斗结算对照验收): - -``` -条件一(挖掘健康式,聚合): - 0 ≤ (1−ρ̂)·E_dig(u) − ρ̂·V_mine(u) ≤ U_band 对全部参考板形 × u ∈ {1,2,3} - (ρ̂ = 名义 ρ 与实测幸存雷率取包络;下限 0 = 盲挖不为负;上限 U_band = 防收益端通胀) -条件二(旗溢价式,直击 L2): - E[标中兑付当量] ≥ (1+δ)·E_dig(u) δ = 旗溢价系数(provisional 0.25–0.5) -``` - -条件二的实施形态二选一(P3 拍板):**(a) 兑付溢价**——标中兑付按同型正向 ×(1+δ) 兑付(改战斗结算兑付公式,一处);**(b) 专属池重摇**——标中兑付从加重的强化池重摇类型(改地图战斗资源摇号结构,打破同池 parity,W 可独立于 R 抬升,是唯一能让引理失效的结构改动)。 - -**对难度包络的冲击方向**:抬旗吸引力 → 早期标旗率↑ → AP 从挖掘转向插旗 → 清图进度变慢、轮数↑ → 敌方结算次数↑(**难度上行**);同时完美排雷达成率↑ → 清图奖励第二份频度↑(**难度下行**)。两向对冲,净方向须 MC 判读;形态 (a) 实施最小、(b) 语义最正(溢价来自「巢穴被控制」的叙事位)。 - -**实施与复算**:文档修订批(行动经济 F1 / 战斗结算收益对照表与验收标准 / 难度曲线联动表 / registry clause3 重立条)+ 若取 (a) 一处兑付公式 + smoke 断言随批。复算 = §七锚全套。 - -**代价与风险**:δ 与 p_perfect 叠加会放大旗激励 → **标旗 rush 退化复发风险**(AP 压速批的根因正是首轮全标旗)——须与 ap_per_round 联动检算;形态 (b) 动摇「雷安同池」结构冻结项,走修订不走调参。 - -### 案乙:引入旗命中率系数 η - -**数学形态**:把判式的玩家侧参数显式化为可测命中率 η = 标中旗数 ÷ 总插旗数(按策略画像实测),判式改为可验收的行为锚: - -``` -锚一(正期望线):η ≥ V_mine ÷ (E_dig + V_mine) 现行 u=1:η ≥ 2.46/3.90 = 0.63 -锚二(占优盲挖线):η ≥ 1 − ρ̂ 名义 0.75 / 实测 0.87 -``` - -**对难度包络的冲击方向**:零直接冲击(不改任何表值)——它给后续调参提供**合法方向与预警线**:任何抬 ρ / 抬直伤雷的提案须先过「η 阈值会不会被推过画像实际命中率」的检算;反过来 η 实测值长期高于锚 = 风险端定价不足的实锤。 - -**实施与复算**:runsum 扩字段(flag_placed / flag_hit / flag_miss——结算流水 source_label 已有 flag_hit/flag_miss,聚合即可、零新随机);MC 双画像各取 η 读数;判式锚值随 V/E 比值联动重算。 - -**代价与风险**:η 依赖策略画像定义(模拟档位重构先例——画像漂移则锚漂移);普通档画像若不插旗(现行近似如此),η 读数无意义,锚退化为只对完美档成立——须与教学引导批的「教扫雷」口径对齐(只教扫雷已裁定,插旗教学面现状=零)。 - -### 案丙:当量锚改区间判读(比值带) - -**数学形态**:把点值判式换成**带判读**,与 2026-10-03 四带验收(带 A–D)同族形态: - -``` -主带:β(u) = V_mine(u) ÷ E_dig(u) ∈ [β_lo, β_hi] - β_lo = 风险端定价下限(旗的避险价值为真) - β_hi = 盲挖健康上限:β_hi < (1−ρ̂)÷ρ̂ (保证条件一 L4 恒成立) - 现行读数:β = 1.71 / 1.37 / 1.17(u=1/2/3);名义 ρ 上限 3.0,实测 ρ 上限 6.7 - 参考带端点(provisional 待拍):[1.2, 2.5] —— 现行 u=1/2 落带内,u=3(1.17)微破下限 -响应曲线:β 对直伤雷行值/ρ 的边际 ≤15pp·S 形(接带 D 形状纪律) -``` - -**对难度包络的冲击方向**:框架批零冲击(先立尺);后续按带调参时,β 下限约束「不许再单向削雷罚」,β 上限约束「不许把盲挖打到负」——**把 d70f6c3 那类单点投值(×1.9)升级为带内判读**,投值前先看落带。 - -**实施与复算**:audit 工具(clear_dominance_audit.py)加 β 输出与带判定(工具自述「重跑批按当期 .tres 更新默认值即可,公式本体不动」);registry 登记带端点;复算 = 静态全表 + 改表值提案逐个落带检算。 - -**代价与风险**:β 端点是新的用户拍板面(P4);带不解决 L2 结构破线(旗边际与 β 无关)——**必须与案甲条件二配套**,单独立丙只是把「未闭合」量得更准。 - -### 案丁:风险端结构化(d70f6c3 点名的三结构,列后备) - -1. **雷安异池(差异化)**:雷格负向从独立权重池摇定——打破引理前提,W 独立于 R,是 L2 的根治理形态(案甲形态 (b) 的完整版);代价 = 摇号器第二池 + 「雷安同池」结构冻结项修订 + 全对账重跑。 -2. **累积惩罚**:第 N 颗起逐颗加价(如第 3 颗起直伤 ×2)——tail-risk 定价,专打盲挖流;**方向冲突登记**:普通档踩雷 ~2.5/战画像、普通 L2 通关率 7.9% 已越下带缺口加深,6/8/8 刚转正,再单向加难与「缺口四选一」待裁案(甲·维持)相抵——**须先裁缺口口径再谈此案**。 -3. **惩罚分布化**:直伤雷部分换掷点折扣型(把 8 flat 的一部分折成警觉类分布惩罚)——降低 tail、保期望,对 normal 档友好;代价 = 新负向行 + 对照表口径扩写。 - ---- - -### 案对比与推荐 - -| | 数学形态 | 触 L1 | 触 L2 | 触 L3/L4 | 表值改动 | 结构改动 | -|---|---|---|---|---|---|---| -| 甲 双条件 | 判式换代+旗溢价 δ | ✓(条件一替换界形式) | ✓(条件二) | ✓ | δ 兑付面(可选) | (a) 无 / (b) 池结构 | -| 乙 η 系数 | 行为锚 | ✗ | 间接(读数) | ✗ | 无 | 无 | -| 丙 比值带 | 带判读 | ✓(β_hi 蕴含 L4) | ✗ | ✓(β 双向) | 无 | 无 | -| 丁 结构化 | 池/tail | ✗ | ✓(异池根治) | ✓ | 有 | 有 | - -**推荐**:**甲+丙组合先行**(判式换代是文档修订非调参,丙给甲的条件一提供带形态;乙的 η 作为甲条件二的实测化读数随批落字段),丁挂后备待缺口口径拍板后再议。理由:L1/L2 是结构破线,只有甲的二条件对得上病灶;丙把数值层(L3/L4)的日常判读制度化,防止下一次单点投值再盲投。 - ---- - -## 六、③ 修订后进入「禁独立调参联动」清单的参数 - -既存网络维持(难度曲线与Boss.md 调参联动表 + 战斗结算调参表注:全部结算/曲线参数每次调参须重跑收益对照表与五契约对账)。修订**新增**联动行如下(按案标注生效条件): - -| 新增联动组 | 对方 | 生效条件 | 纪律 | -|---|---|---|---| -| 旗溢价系数 δ ↔ 完美乘数 p_perfect ↔ ap_per_round | 战斗结算、行动经济 | 案甲 | 旗激励三件套同窗检算(防标旗 rush 复发:δ 与 ×2 叠加通胀、AP 吞吐上限)——任一变动须重跑双画像标旗率读数 | -| 标中强化池权重(若形态 b) ↔ 正向池权重(77 分母) ↔ 关级恒等式奖励占比 [15,40%] | 地图战斗资源、难度曲线 | 案甲(b) | 双池分布变动 = E_dig 与 W 同时漂移,须联合检算 + 恒等式占比复核 | -| η 读数 ↔ 模拟画像定义 ↔ 可推理率 ι ↔ min_safe_count/生成尝试上限 | sim 档位、棋盘生成 | 案乙/甲读数面 | η 是画像条件量:画像重构即锚漂移,重锚随批;可推理率三元组既有联动扩一员 | -| 比值带端点 β_lo/β_hi ↔ D_ref ↔ hero max_hp ↔ AC 折扣档(5pp 模型系数) | 战斗结算、难度曲线 | 案丙 | 带是 D_ref 的函数:换锚(D_ref/max_hp)须全带重推;AC 档值变更改 5pp 系数,同罪 | -| 直伤雷三行(6/8/8) ↔ 正向同轴行(heal_minor/pierce_strike/magic_bolt) | 地图战斗资源 | 无条件(本报告已证同轴镜像比是 L3 破线根源) | **同轴镜像比入对账面**:负向/正向比超出注册区间(案丙带内推导)即越带;单边动负向三行(d70f6c3、数值修复批两先例)今后必须带正向镜像行联合检算 | -| clear_blast 区间(24/40/32) ↔ p_perfect | 地图战斗资源、难度曲线 | 案甲(旗激励对账面扩容) | 完美排雷第二份的补贴基数进旗激励对账;单边动清图奖励 = 变相动旗 | - -通用纪律不变式:以上任一参数修订 → 调参日志留联合检算记录 + 重跑五契约对账 + 带判读;越带回滚或登记,禁带病前进(既有四级回滚阶梯照用,判式换代属文档修订、不走该阶梯)。 - ---- - -## 七、④ 验收读数设计(改前改后锚) - -**总原则(用户既定规)**:先推算后重跑——静态推演为第一读数,昂贵的 MC/verifier 只用于行为级验证与锚换代;冒烟一遍即权威(固定种子确定性复放)。 - -1. **改前静态锚(本报告 §四 即锚)**:E_dig(u)/V_mine(u)/β(u)/逐型净期望/双条件判值六张表(2026-10-04 值链快照)——落 registry(clause3 重立条附读数快照)或随批 qa 报告留档,作为修订批的「改前」基准。 -2. **工具锚(修订批 T0 义务)**:`tools/clear_dominance_audit.py` 常量刷新——67→**77** 池、SPARK 1 / HEAL 2 / BACKLASH **6** / SNARE **8** / RECOIL **8**、C_MIN/MAX→**24/40**(中点 32)、AP_R→**8**、OFF_GUARD→ac 轴 −1(0.2u 模型)、ambush 历史口径退役、V_mine 口径乙换现行字典、板形实测值随 board_stat_probe 复测——该工具是条款3/⑤ 的常设重跑入口,刷新后一次跑出改前全套判值(**先刷新工具,再谈任何表值提案**)。 -3. **MC 对拍锚**:改前 = 现行锚系(`runsum_m4iter12_t7off_n20_20261004` 现行对拍正主 + `runsum_numfix_final_n200_20261001`);改后 = `runsum_<案名>_n_` 按现行命名换代;种子窗 76000 系、N≥200/策略(≥50 distinct seeds 铁规满足);对拍字段 hero_dmg / mine_hits / 通关率。**判读注意**:纯判式/判读案(乙、丙)预期零行为位移——对拍逐位 PASS 本身就是验收判据;表值案(甲 a/b、丁)才预期位移。 -4. **行为读数新增(旗经济首次可测)**:runsum 扩字段 flag_placed / flag_hit / flag_miss / 标中兑付当量合计 / 标空惩罚当量合计——全部自结算流水 source_label(flag_hit / flag_miss / 标旗未中行)聚合,零新随机源;派生读数 η = flag_hit÷flag_placed 与标空率,按双画像分列。改前改后各测一轮,即为案乙双锚的实测基线。 -5. **verifier 双窗**:冒险条件通关率(na=150 / k=100 / hp_first 口径,与迭代 8 同参)改前改后各一窗;普通 L2 7.9% 缺口读数随窗复测——**与「缺口四选一」待裁案同窗呈报,不单独判读**。 -6. **人闸**:判式换代文本(行动经济 F1 条款3 / 战斗结算验收标准 / 难度曲线联动表三处)修订稿随批呈用户;表值类案的所有行值变动逐行呈报(含镜像行联动检算记录);带端点/δ 值为拍板项不代拟终值。 - ---- - -## 八、拍板点汇总(全归用户) - -| # | 拍板点 | 备选 | -|---|---|---| -| P1 | 案选型 | 甲+丙组合(推荐)/ 甲单行 / 乙丙轻量(零表值)/ 丁结构案 / 维持现状只刷新工具锚 | -| P2 | 判式换代口径 | 任务书定义(旗-挖边际式)单立 / 三层口径并行立(条款2 锚+条款3 聚合+旗边际,本报告形态)/ 维持旧界形式不改 | -| P3 | 若案甲:δ 值与形态 | 兑付溢价 ×1.25 / ×1.5;专属池重摇(b);δ 域 [0.25, 0.5] provisional | -| P4 | 若案丙:带端点 | [1.2, 2.5](参考值,u=3 微破下限的现状即被点名)/ 其他端点;判读用名义 ρ 或实测包络 | -| P5 | 复利系数是否立项量化 | 收益端复利维持定性(现状)/ 立项定义复利系数入对照表(前置:先有定义才能进带判读) | -| P6 | 直伤雷 6/8/8 与普通 L2 缺口的处置序 | 先裁「缺口四选一」再议案丁 / 缺口与修订并行呈报(本报告按并行呈报) | -| P7 | 口径修正登记 | d70f6c3 §二 池 76→77 混计、直伤 4/5/5→6/8/8 时效化两点,是否随批在 registry 留修正注记 | - -## 九、判读与 grill 裁决回填(2026-10-04,用户两轮「按推荐的来」全裁) - -**§八 拍板点全裁**:P1=甲+丙组合先行(乙 η 降为读数非判式、丁挂后备)/P2=三层口径并行立(条款2 锚+条款3 聚合健康式+旗边际引理)/P3=形态 **(a) 兑付溢价 · δ=1.25(provisional)**——(b) 专属池重摇不启,留给丁案异池立项一并裁/P4=带端点 **[1.2, 2.5]**,u=3(β=1.17)微破下限=登记态点名,不强制回滚/P5=复利维持定性/P6=缺口并行呈报;iter8「缺口四选一」(普通 L2 7.9% 处置)**确认仍独立在案**,与本修订解绑/P7=随批 registry 修正注记。 - -**grill 七问全按推荐裁**: - -- **Q2 落文即越带**:判式先行,条件二现行值按「越带登记」纪律落文为**已知破·限期闭合**(T 机制小批转绿),文档批不被代码批绑架。 -- **Q3 判式文本瘦身**:条件一删 U_band——只留下限 0(盲挖不为负),上限由 β_hi 独家承载(同一约束单一承载);丙案删「≤15pp·S 形」装饰条款,改「直伤雷行值/ρ 每次提案逐档检算落带」。 -- **Q4 δ 行为敏感度判据**:≥5pp(N=200 可辨线)为「有感」;行为无效时 δ **仍保留**(规范条款,不等式诚实性不依赖行为弹性),登记「行为无感」读数——防修订批出口重演「缓解未闭合」官司。 -- **Q5 η 分母**:=全部插旗数(可测零歧义),标空率作次读数分列;防呆旗未来成风再扩字段。 -- **Q7 立项时点**:任务书草案已呈(`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`,T0-T5≈2.5 日),待 U0 批准开工。**2026-10-04 用户续裁:本批编入 roadmap 迭代 14、作为迭代内需求之一(②号卡)**——原「独立 mini-loop、不占迭代 13/14 序」表述作废;迭代内序位待排,开工门不变=U0。 - -**数学注记(T4 判读用)**:δ=1.25 时条件二以**等号压线成立**(E[标中]=1.25·E_dig = (1+0.25)·E_dig,判式取 ≥ 故成立);严格大于须 δ>0.25,×1.5 档留余量。形态 (a) 落地后 L2 首次翻正:旗对已知安全格边际 = +0.25·E_dig ≈ +0.36 当量(u=1)——四层病灶(L1 由条件一+β 带接替、L2 由条件二接替、L3/L4 由带判读看护)全覆盖确认。 - -## 附录 A:判值全表(复算用,名义 ρ=0.25) - -``` -E_dig(1)=1.442 E_dig(2)=1.948 E_dig(3)=2.455 (当量/安全格) -V_mine(1)=2.460 V_mine(2)=2.670 V_mine(3)=2.881 (当量/雷) -β=V/E: 1.71 / 1.37 / 1.17 (u=1/2/3) -盲挖净期望: +0.47 / +0.79 / +1.12 (名义 ρ) -盲挖净期望(ρ̂=0.129): +0.94(u=1);ρ̂=0.157(12×12): +0.83(u=1) -界形式缺口: 13.3×(u1) / 6.7×(u2) / 4.4×(u3);实测 ρ̂ u1 = 5.9× -逐型净期望: attack +1.25 / defense +0.10u / blast +0.70(u1) / heal 0 / - weaken +1.70(u1) / pierce −1.25 / magic −0.50 / action +0.50 / gp +1.75 -旗-盲挖阈值: q > 1−ρ̂(0.75 名义 / 0.87 实测 10×10) -旗-已知安全格边际: −(1−q)(E_dig+V_mine) ≤ 0(u1 满置信差值 = 进度+信息价值) -η 正期望线: 0.63(u1);η 占优线: 0.75 名义 / 0.87 实测 -单雷期望直伤: 1.97 HP(0.260×7.60);d70f6c3 时 0.89 → ×2.2 -``` - -## 附录 B:主要事实源索引 - -- 判式原文(界形式):git `7876642^` design/gdd/systems/排雷循环/行动经济.md(五条经济契约节) -- 八型批改写条:design/gdd/systems/排雷循环/行动经济.md:130-134、136-146(推导节) -- 全量复算 §二:git show d70f6c3(design/qa/m3-iter8-t7-mine-power-readings-2026-09-29.md §二) -- 重立模型与 5pp/0.2 当量口径:design/qa/m3-iter5-lever-scan-2026-09-28.md §三② -- 判式常设重跑入口:tools/clear_dominance_audit.py(E_dig / V_mine 甲乙双口径 / 板形双口径) -- 池语义与 77 权重:game/core/reward_economy.gd(_rollable_rows)+ design/gdd/systems/战斗循环/地图战斗资源.md(雷安同池节、清图槽节)+ game/data/tables/reward.tres -- 破线升格与对账义务:design/gdd/06-待办清单.md「挖掘风险不等式对账破线」条 + 难度曲线与Boss.md(调参联动表、P1 后置行) -- 当量对照表正主:design/gdd/systems/战斗循环/战斗结算.md(收益对照表节)+ 增益状态.md(削弱行=当量锚容器侧落点节) -- 现行带与验收形态:难度曲线与Boss.md「带换代(2026-10-03 四带甲案)」节 diff --git a/game/core/adventure_runner.gd b/game/core/adventure_runner.gd index d6101e4b..fe300572 100644 --- a/game/core/adventure_runner.gd +++ b/game/core/adventure_runner.gd @@ -80,8 +80,8 @@ var _save_manager = null # 断点承载注入(迭代 8 卡① var _resume_bp := {} # 续玩快照暂存(resume_adventure → _start_current_level 单跳传递) # ---- 三选一停点态(迭代 10 奖励重构批)---- var _bonus_taken := {} # 件获取次数计数(kind 维度派生账本——断点附随件与摘要读数承载;池库存正主=_bonus_deck) -var _bonus_deck: Array = [] # 令牌池(TP0 v2.2——持久多重集,元素 {"kind","tier"};洗牌抽候选/选中踢池未选回池/池耗即枯竭;商店货架同库共账;迭代 12 T1 起机制件带=relic 令牌随表追加) -var _relics: Array[String] = [] # 流派件持有集(迭代 12 T1——局内随机渠道获得、冒险级跨关携带、收束清零;🔴 层级纪律承载面:不入同调位不入局外树) +var _bonus_deck: Array = [] # 令牌池(TP0 v2.2——持久多重集,元素 {"kind","tier"};洗牌抽候选/选中踢池未选回池/池耗即枯竭;商店货架同库共账;迭代 12 T1 起规则改写型特性带=relic 令牌随表追加) +var _relics: Array[String] = [] # 特性持有集(迭代 12 T1——局内随机渠道获得、冒险级跨关携带、收束清零;🔴 层级纪律承载面:不入同调位不入局外树) var _tree_rules: Array = [] # 树 rule 键集(迭代 12 T10——Fork 激活侧 effects 透传;下传 enc.tree_rules 消费面) var _bonus_pending := {} # 停点态:{"candidates": Array, "payload": Dictionary, "chosen"/"incoming": 替换在途}——空 = 无停点 var _bonus_result := {} # 已兑付待推进态(bonus_resolved 载荷副本——中断续玩不重兑付) @@ -128,8 +128,8 @@ func start_adventure(seed_val: int, params: Dictionary = {}) -> bool: _attunement = params.get("attunement", []) if params.get("attunement", []) is Array else [] # additive(迭代 11 第①批 T5) _attune_refresh_y = maxi(0, int(params.get("attune_refresh_y", 0))) # additive(迭代 11 第①批 T5b——Y 冒险周期池) _seed_attune_charges() # 迭代 11 第①批 T6——冒险开始充能账本按装备主动件重置(每冒险充能语义) - # 流派件开局注入(迭代 12 T7——MC 成型画像载体:params.relics_seed 非空=开局持有集〔七流派 - # 各 2 件档一成型——测量面专用;真实局流派件只走局内随机渠道,红线②层级纪律不破〕) + # 特性开局注入(迭代 12 T7——MC 成型画像载体:params.relics_seed 非空=开局持有集〔七流派 + # 各 2 件档一成型——测量面专用;真实局规则改写型特性只走局内随机渠道,红线②层级纪律不破〕) var relic_seed: Array = params.get("relics_seed", []) if params.get("relics_seed", []) is Array else [] _tree_rules = params.get("tree_rules", []) if params.get("tree_rules", []) is Array else [] # 迭代 12 T10——A/B 面 rule 键集 if not relic_seed.is_empty(): @@ -190,7 +190,7 @@ func resume_adventure(bp: Dictionary, params: Dictionary = {}) -> bool: rtok["relic_id"] = String(tok.get("relic_id", "")) restored.append(rtok) _bonus_deck = restored - # 流派件持有集还原(迭代 12 T1——缺键 = 旧版断点防御空集) + # 特性持有集还原(迭代 12 T1——缺键 = 旧版断点防御空集) _relics = [] for r in (bp.get("relics", []) as Array): _relics.append(String(r)) @@ -267,14 +267,14 @@ func _reset_bonus_state() -> void: _node_bonus_pending = {} -# 令牌池构建(TP0 v2.2——按表 kind×tier 配额展开为持久多重集;构建序确定 = BONUS_IDS×TIERS 逐层, -# 随机性只发生在洗牌消费 reward_pick 封闭流的时刻。迭代 12 T1:机制件带=relic 活行每件 1 张追加 +# 令牌池构建(TP0 v2.2——按表 kind×tier 配额展开为持久多重集;构建序确定 = FEATURE_KINDS×TIERS 逐层, +# 随机性只发生在洗牌消费 reward_pick 封闭流的时刻。迭代 12 T1:规则改写型特性带=relic 活行每件 1 张追加 # (rarity common/rare→稀有令牌档、rarest→罕见令牌档——relic 永不入普通档;空表=零追加零扰动)) func _build_bonus_deck() -> Array: var deck: Array = [] - for kind in db.adventure.BONUS_IDS: + for kind in db.adventure.FEATURE_KINDS: for tier in db.adventure.TIERS: - for i in int(db.adventure.bonus_token_count(String(kind), String(tier))): + for i in int(db.adventure.feature_quota(String(kind), String(tier))): deck.append({"kind": String(kind), "tier": String(tier)}) for row in db.relic_rows(): var rtier := "rarest" if String(row.get("rarity", "")) == "rarest" else "rare" @@ -282,7 +282,7 @@ func _build_bonus_deck() -> Array: return deck -# 令牌唯一身份(抽签去重/兑付匹配共用——数值件=kind,机制件=relic_id;同档多张不同 relic 可同屏) +# 令牌唯一身份(抽签去重/兑付匹配共用——属性加成型特性=kind,规则改写型特性=relic_id;同档多张不同 relic 可同屏) func _token_identity(tok: Dictionary) -> String: if String(tok.get("kind", "")) == "relic": return "relic:" + String(tok.get("relic_id", "")) @@ -337,7 +337,7 @@ func continue_to_next_level() -> bool: # ---- 提升三选一(迭代 10 奖励重构批——选择停点零自动推进、重复兑付被拒;兑付恰一件、未选项零生效)---- -# 候选令牌匹配(身份键恒等——数值件 kind+tier、机制件 relic_id;迭代 12 T1 机制件带) +# 候选令牌匹配(身份键恒等——属性加成型特性 kind+tier、规则改写型特性 relic_id;迭代 12 T1 规则改写型特性带) func _find_token(candidates: Array, kind: String, tier: String, relic_id: String = "") -> Dictionary: for t in candidates: var tok: Dictionary = t as Dictionary @@ -351,7 +351,7 @@ func _find_token(candidates: Array, kind: String, tier: String, relic_id: String # 玩家点选兑付(呈现层/冒烟/自动模拟确认入口):令牌 ∈ 停点候选(身份键精确匹配——relic 件 # 另须 relic_id)。属性件写加算区、AP 件写第四轴、GP 件走钱包「奖励入账」入口、恢复件当即回血、 -# relic 件入流派件持有集(🔴 层级纪律:只走局内随机渠道)、道具件受同调位约束(随池种退役不可达)。 +# relic 件入特性持有集(🔴 层级纪律:只走局内随机渠道)、道具件受同调位约束(随池种退役不可达)。 # 消费=选中令牌踢池(未选回池由「抽签不摘牌、兑付才摘牌」语义承载——TP0 v2.2)。 func pick_bonus(kind: String, tier: String = "", relic_id: String = "") -> bool: if state != "running" or _bonus_pending.is_empty(): @@ -361,7 +361,7 @@ func pick_bonus(kind: String, tier: String = "", relic_id: String = "") -> bool: if _find_token(candidates, kind, tier, relic_id).is_empty(): push_error("[冒险结构] pick_bonus 拒绝——令牌不在候选: %s|%s|%s" % [kind, tier, relic_id]) return false - var value: int = int(db.adventure.bonus_value(kind, tier)) + var value: int = int(db.adventure.feature_value(kind, tier)) var hp_before := int(ledger.get("hero_hp", 0)) if kind == "aux_item": return _pick_aux_item(value) # 道具件分派通关渠道(持有容器 = 跨关携带——与节点渠道分轨;池种退役后不可达) @@ -435,7 +435,7 @@ func _consume_deck_token(kind: String, tier: String, relic_id: String = "") -> b return false -# 流派件持有集读面(效果接线/求值/摘要唯一取数口——副本防外部改写) +# 特性持有集读面(效果接线/求值/摘要唯一取数口——副本防外部改写) func relics_held() -> Array: return _relics.duplicate() @@ -457,10 +457,10 @@ func pool_stock(kind: String) -> int: # 写加算区+账本+摘牌(与奖励三选一真单点——买一件=奖励面少一件的库存语义由同库成立)。 # 未知 kind 拒绝(货架词表封闭的前置防御)。 func _consume_pool_purchase(kind: String, tier: String) -> bool: - if not db.adventure.BONUS_IDS.has(kind): + if not db.adventure.FEATURE_KINDS.has(kind): push_error("[冒险结构] 商店购买消费拒绝——件不在池词表: %s" % kind) return false - return _apply_bonus_pick(kind, tier, int(db.adventure.bonus_value(kind, tier))) + return _apply_bonus_pick(kind, tier, int(db.adventure.feature_value(kind, tier))) # 终局池快照(_settle 清账前调用——_reset_bonus_state 会重置 _bonus_taken,摘要 additive 键 @@ -552,7 +552,7 @@ func apply_node_bonus(kind: String, tier: String = "", relic_id: String = "") -> if _find_token(candidates, kind, tier, relic_id).is_empty(): push_error("[冒险结构] apply_node_bonus 拒绝——令牌不在候选: %s|%s|%s" % [kind, tier, relic_id]) return false - var value: int = int(db.adventure.bonus_value(kind, tier)) + var value: int = int(db.adventure.feature_value(kind, tier)) if kind == "aux_item": return _apply_node_aux(value) # 道具件分派节点渠道(持有容器 = 关卡域库存——与通关渠道分轨;池种退役后不可达) if not _apply_bonus_pick(kind, tier, value, relic_id): @@ -573,7 +573,7 @@ func _apply_node_aux(count: int) -> bool: var records: Array = [] if _runner != null and _runner.aux_inventory != null: records = _runner.aux_inventory.holding_records() - # 迭代 11 第①批 T7——守卫随过渡键退役拆除(BONUS_IDS 已除名 aux_item,本分支不可达; + # 迭代 11 第①批 T7——守卫随过渡键退役拆除(FEATURE_KINDS 已除名 aux_item,本分支不可达; # 替换子交互路由随容量闸一并退役——能力件容量闸正主 = 营地装配面满位禁选) if _runner != null: for iid in picked: @@ -739,7 +739,7 @@ func _draw_bonus_candidates() -> Array: if ident.begins_with("relic:"): cand["relic_id"] = String((tok as Dictionary).get("relic_id", "")) out.append(cand) - if out.size() >= int(db.adventure.bonus_candidate_count): + if out.size() >= int(db.adventure.feature_candidate_count): break return out @@ -828,7 +828,7 @@ func _start_current_level() -> bool: if ok: _runner.set_attunement(_attunement) # 迭代 11 第①批 T5——同调装配下传(enc 携带进战斗结算) _runner.set_attune_charges(attune_charges) # 迭代 11 第①批 T6——充能账本下传(能力件骑库存面注入) - _runner.set_relics(_relics) # 迭代 12 T1——流派件持有集下传(begin_battle enc.relics 求值面) + _runner.set_relics(_relics) # 迭代 12 T1——特性持有集下传(begin_battle enc.relics 求值面) _runner.set_tree_rules(_tree_rules) # 迭代 12 T10——树 rule 键集下传(A/B 面消费) if _shop_mode == "pool": # 商店共享池注入(迭代 11 第②批 T3——库存账本引用+消费 handler 双下传;legacy 模式零注入零扰动) @@ -908,7 +908,7 @@ func _settle(result: String) -> void: "aux_cleared_last": _last_aux_cleared, # additive 扩签(迭代 7 T4——末关清空反馈;非末关走 bonus 载荷) "keystone_drops": _keystone_drops.duplicate(true), # additive 扩签(迭代 10——逐杀掉落明细;settle 入账明细/复盘归因数据源) "pool_stock": _pool_stock_snapshot(), # additive 扩签(迭代 11 第②批 T5——终局池读数:清账前快照,商店买走 vs 奖励领走 vs 枯竭的终局面) - "relics": _relics.duplicate(), # additive 扩签(迭代 12 T1——流派件终局持有集:清账前快照,成型判读取数面) + "relics": _relics.duplicate(), # additive 扩签(迭代 12 T1——特性终局持有集:清账前快照,成型判读取数面) } # 败退明细(数值验证工具取数面 2026-09-22——tools/balance_verifier.py 止步节点分布数据源; # 仅失败局附加,键缺省 = 未败退,既有五件事消费方零感知) @@ -941,7 +941,7 @@ func _forward_choices_presented(candidates: Array) -> void: # ---- 断点快照(迭代 8 卡①——七字段拍板面+恢复必需附随件)---- -# 七字段(拍板面):关卡序号/节点位/生命/本关加成区/GP 钱包/商店已购档/已抽模板; +# 七字段(拍板面):关卡序号/节点位/生命/属性加成区/GP 钱包/商店已购档/已抽模板; # 附随件(续玩正确性必需,随批注记):主种子+取数计数器(rng 快照契约回填——续接原时间线)、 # 钥石累计(大奖励中途值——终局摘要五件事不失真)、已到节点序(呈现层图条重建)、道具库存 # (奖励节点已选件——防静默丢失)。注入缺省 null = 整面静默(模拟/冒烟零扰动)。 @@ -976,7 +976,7 @@ func _snapshot_breakpoint() -> void: "aux_items": aux_items, "bonus_taken": _bonus_taken.duplicate(true), # 三选一件获取次数(kind 维度派生账本——断点附随件与读数承载) "bonus_deck": _bonus_deck.duplicate(true), # 令牌池余库(TP0 v2.2——池消耗即上限,续玩余库逐枚还原) - "relics": _relics.duplicate(), # 流派件持有集(迭代 12 T1——局内随机渠道获得态续玩防丢失) + "relics": _relics.duplicate(), # 特性持有集(迭代 12 T1——局内随机渠道获得态续玩防丢失) "bonus_pending": _bonus_pending.duplicate(true), # 三选一停点态(空 = 无停点——选择停点可中断契约) "bonus_result": _bonus_result.duplicate(true), # 已兑付待推进态(空 = 无——中断续玩不重兑付) "bonus_aux_carry": _bonus_aux_carry.duplicate(true), # 道具件跨关携带(注入前中断防静默丢失) diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index 3b6d5ca5..c5b0dff6 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -72,7 +72,7 @@ var attunement: Array = [] # 装备中同调件 item_id 集 var _attune_charges_ref: Dictionary = {} # 充能账本共享引用(迭代 11 第①批 T6——use_aux 消费直改) var _attune_bank := 0 # 掘进蓄能积点(battle 域——每 charge_n 安全格 +1 点) var _attune_safe_seen := 0 # 掘进蓄能 battle 域安全开格计数 -# 流派件运行态(迭代 12 T2——relic 持有集经 enc.relics 注入;求值旗注 damage_controller.relic_flags; +# 特性运行态(迭代 12 T2——relic 持有集经 enc.relics 注入;求值旗注 damage_controller.relic_flags; # 魔矢每战首次计数 battle 域。空集=零扰动) var _relic_first_dig_used := false var _relic_combo := 0 # 矿脉直觉连击计数(battle 域——safe +1/mine 清零) @@ -94,7 +94,7 @@ func _attune_mag(item_id: String) -> int: return int(_attune_row(item_id).get("magnitude", 0)) -# 流派件求值(迭代 12 T2——持有集 × relic_table → damage_controller.relic_flags 注入面): +# 特性求值(迭代 12 T2——持有集 × relic_table → damage_controller.relic_flags 注入面): # rider_flat = Σ rider 件 value(奥术余烬 +1 / 魔能共鸣 +2);magic 档一(≥2 件)rider +1、 # 档二(≥4 件)rider 可暴击;clamp 两件直调键;first_dig_spell 旗(魔能共鸣第二效果——魔矢值 # = 件 effects.value)。空集/空表 = 零旗零扰动。 @@ -247,7 +247,7 @@ func begin_battle(enc: Dictionary) -> bool: _attune_safe_seen = 0 _damage.attune_venom = _attune_mag("venom_edge") if _attune_has("venom_edge") else 0 _reward_economy.luck_bias = _attune_mag("luck_coin") if _attune_has("luck_coin") else 0 - # 流派件运行态注入(迭代 12 T2 魔法流——enc.relics 携带持有集;RelicsEngine 求值后注伤害控制器 + # 特性运行态注入(迭代 12 T2 魔法流——enc.relics 携带持有集;RelicsEngine 求值后注伤害控制器 # relic_flags;空集/空表=零扰动。魔矢每战首次开格计数同步归零) _relic_flags_for((enc.get("relics", []) as Array)) _relic_first_dig_used = false @@ -680,7 +680,7 @@ func set_aux_unlocked(ids: Dictionary) -> void: func _grant_routed(snap: Dictionary, polarity: String, source_class: String, cell: Vector2i, ri: int, highlight: String = "", label_suffix: String = "") -> bool: # 迭代 11 第①批 T7——aux 授予分支随掉落/停点渠道退役拆除(reward 词表第十型 aux_item 保留但零投放: - # 无 aux 行入池、BONUS_IDS 词表已除名);剩余类型走极性字典路由。 + # 无 aux 行入池、FEATURE_KINDS 词表已除名);剩余类型走极性字典路由。 var row: Dictionary = _reward_economy.polarity_row(String(snap.get("cell_type", "")), polarity) if row.is_empty(): _fatal("极性字典缺行: %s %s" % [String(snap.get("cell_type", "")), polarity]) diff --git a/game/core/config_db.gd b/game/core/config_db.gd index 3423f028..7e1ff3ee 100644 --- a/game/core/config_db.gd +++ b/game/core/config_db.gd @@ -27,7 +27,7 @@ const TABLE_MANIFEST := { "aux_items": "aux_items.tres", # 迭代 7 T1 魔法道具内容批(AuxItemTable 六行——定义表 Rule 4 豁免;罗盘 retired/失义件 deferred 标记见 schema 头注) "adventure": "adventure.tres", # 冒险结构实现批 2026-09-21(AdventureTable 建表——大奖励与钥石行值单点) "attunement_growth": "attunement_growth.tres", # 迭代 11 第①批 同调实施批 T1(AttunementGrowthTable 单行全局——同调位里程碑谓词表;单行先例 Rule 4 豁免) - "relics": "relics.tres", # 迭代 12 T1 双层 BD 机制件基建(RelicTable 定义表 Rule 4 豁免——AuxItemTable 先例;空表合法态=主时间线零扰动) + "relics": "relics.tres", # 迭代 12 T1 双层 BD 规则改写型特性基建(RelicTable 定义表 Rule 4 豁免——AuxItemTable 先例;空表合法态=主时间线零扰动) } var action_economy: ActionEconomyTable @@ -154,7 +154,7 @@ func relic_row(relic_id: String) -> Dictionary: return relics.row_by_id(relic_id) if relics != null else {} -# 机制件带令牌构建源(池接线——adventure_runner._build_bonus_deck 消费;行 rarity→投放档映射) +# 规则改写型特性带令牌构建源(池接线——adventure_runner._build_bonus_deck 消费;行 rarity→投放档映射) func relic_rows() -> Array: return relics.rows if relics != null else [] diff --git a/game/core/config_db_cross_validator.gd b/game/core/config_db_cross_validator.gd index ad201114..d784a86c 100644 --- a/game/core/config_db_cross_validator.gd +++ b/game/core/config_db_cross_validator.gd @@ -99,18 +99,18 @@ func cross_validate(loaded: Dictionary, push_diag: Callable) -> void: for e in validate_skill_pool_links(skt, en, loaded.get("status_effects")): push_diag.call("error", e.category, e.message) # ⑥ 商店货架 × 冒险共享池跨表校验(M-4 迭代 11 第②批 T1——次数上限域): - # pool_shelf kind 须命中 adventure.BONUS_IDS 且为有限库存种(cap ∈ [1,99]——gp 无上限种/牌库外种 - # 入货架 = 库存账本无锚,加载致命;gp 袋负交易切边/机制件三轴切边由 ShopTable 词表封闭另拦) + # pool_shelf kind 须命中 adventure.FEATURE_KINDS 且为有限库存种(cap ∈ [1,99]——gp 无上限种/牌库外种 + # 入货架 = 库存账本无锚,加载致命;gp 袋负交易切边/规则改写型特性三轴切边由 ShopTable 词表封闭另拦) var adv = loaded.get("adventure") var shp = loaded.get("shop") if adv != null and shp != null: for row in shp.pool_shelf: var kind: String = String(row.get("kind_id", "")) - if not adv.BONUS_IDS.has(kind): - push_diag.call("error", "shelf_dangling_kind", "ShopTable.pool_shelf kind %s 不在 AdventureTable.BONUS_IDS(共享池牌库外种)" % kind) + if not adv.FEATURE_KINDS.has(kind): + push_diag.call("error", "shelf_dangling_kind", "ShopTable.pool_shelf kind %s 不在 AdventureTable.FEATURE_KINDS(共享池牌库外种)" % kind) continue # TP0 令牌池——货架件须为有限令牌种(配额 >0;种类次数上限退役后库存=剩余令牌数) - var quota := int(adv.bonus_token_count(kind, adv.TIER_COMMON)) + int(adv.bonus_token_count(kind, adv.TIER_RARE)) + int(adv.bonus_token_count(kind, adv.TIER_RAREST)) + var quota := int(adv.feature_quota(kind, adv.TIER_COMMON)) + int(adv.feature_quota(kind, adv.TIER_RARE)) + int(adv.feature_quota(kind, adv.TIER_RAREST)) if quota < 1: push_diag.call("error", "shelf_zero_quota", "ShopTable.pool_shelf kind %s 令牌配额为 0(牌库空种入货架 = 库存无锚)" % kind) diff --git a/game/core/damage_controller.gd b/game/core/damage_controller.gd index f2ec3a43..161dce06 100644 --- a/game/core/damage_controller.gd +++ b/game/core/damage_controller.gd @@ -60,7 +60,7 @@ var _outcomes := {} # ticket_id → "redeemed"/"zero"/"voided"( var _seq := 0 # 流水号 var _halted := false # 主角倒下终止旗(死亡事件置位——flush 余单作废) var _hero_ac_override := -1 # 主角护甲等级合流入参(begin_battle 显式设定——-1 = 表值兜底,口径同战斗编排器) -# 流派件求值旗(迭代 12 T2——begin_battle 编排器经 RelicsEngine 求值后注入;空字典=零扰动。 +# 特性求值旗(迭代 12 T2——begin_battle 编排器经 RelicsEngine 求值后注入;空字典=零扰动。 # rider_flat=英雄侧必中附加值〔奥术余烬族〕/rider_crit=档二 rider 可暴击/first_dig_spell=每战首次 # 开安全格追加魔法矢〔消费在编排器授予段〕/clamp_magic_light·clamp_magic_heavy=克制点直调) var relic_flags: Dictionary = {} @@ -418,7 +418,7 @@ func _counter_delta(attack_type: String, armor: String) -> int: return int(row.get(armor, 0)) -# 克制点直调(迭代 12 T2 魔法流/T4 穿刺流 clamp_modifier 件——克制矩阵查表值后的流派件调整; +# 克制点直调(迭代 12 T2 魔法流/T4 穿刺流 clamp_modifier 件——克制矩阵查表值后的特性调整; # 空旗=0 零扰动):魔网织者=magic vs magic(矩阵罚 −1 → 0/正);湛蓝誓约=magic vs heavy(+1 → +2); # 猎手刺剑=pierce vs light(+1——对轻甲敌穿刺提升,对重甲无增益=正负双修)。hero_attack 与 # board_typed 两消费面同享。 diff --git a/game/core/level_runner.gd b/game/core/level_runner.gd index eb1be7f5..186e4c6f 100644 --- a/game/core/level_runner.gd +++ b/game/core/level_runner.gd @@ -590,7 +590,7 @@ func set_attunement(ids: Array) -> void: _attunement = ids.duplicate() -# 流派件持有集注入(迭代 12 T1——AdventureRunner._start_current_level 唯一调用方;begin_battle +# 特性持有集注入(迭代 12 T1——AdventureRunner._start_current_level 唯一调用方;begin_battle # enc.relics 携带进战斗求值;**共享引用不复制**——关内奖励节点兑付的 relic 须当关后续战斗生效 # (attune_charges 共享账本同款);空集=零扰动) var _relics: Array = [] @@ -600,7 +600,7 @@ func set_relics(ids: Array) -> void: _relics = ids -# 流派件持有集读面(迭代 12 呈现补齐——HUD C 区流派件段数据源) +# 特性持有集读面(迭代 12 呈现补齐——HUD C 区特性段数据源) func relics_held() -> Array: return _relics.duplicate() @@ -779,7 +779,7 @@ func _shop_draw_shelf() -> void: _shop_shelf.append(tok) if _shop_shelf.size() >= 3: break - # 商店保底(迭代 12 T6——「本关变异交互件必刷」简化口径:货架零流派件时**挤掉最后一张普通卡** + # 商店保底(迭代 12 T6——「本关变异交互件必刷」简化口径:货架零特性时**挤掉最后一张普通卡** # 换吞噬流件〔地形交互件广义映射——按关变异精细绑定归数值批,台账披露待追认〕;占位制货架恒 # ≤3;池内无 devour 令牌=不保底合法态) var has_relic := false @@ -834,10 +834,10 @@ func shop_shelf() -> Array: var tier := String((tok as Dictionary).get("tier", "")) var row: Dictionary = db.shop_pool_row(kind) var display := String(row.get("display_name", kind)) - var value := int(db.adventure.bonus_value(kind, tier)) + var value := int(db.adventure.feature_value(kind, tier)) if row.is_empty() and kind == "relic": var rrow: Dictionary = db.relic_row(String(tok.get("relic_id", ""))) - display = String(rrow.get("display_name", "流派件")) + display = String(rrow.get("display_name", "特性")) value = 0 out.append({ "kind_id": kind, diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index 82adf06a..54d8e4b0 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -13,9 +13,18 @@ class_name AdventureTable extends Resource +## 概念指路:本表的属性值提升与资源,与 relics.tres 的专长,同属一个对象—— +## 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 +## 它们是它的分类轴上的枚举(专长 / 属性值提升 / 资源),不是三套系统; +## 本表承载属性值提升与资源的种类配额与件值。 +## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」→「奇物」。 +## 常量与字段随之前缀 feature_*,**尚未**随顶层改名换到 reward_*——见 06-待办清单。 +## 分类轴三个枚举:属性值提升〔生命上限 / AC / 攻击〕;资源〔行动点上限 / +## 刷新次数 / 金币 / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 +## 类内异质性:金币与回复是即时兑付,不进持有集、不持续生效。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 ## aux_item 池种退役(迭代 11 第①批 T7——同调批出池);heal 恢复件新入池(v2.2 令牌池追认 b)。 -const BONUS_IDS: Array[String] = ["attack", "max_hp", "armor", "gp", "ap", "heal"] +const FEATURE_KINDS: Array[String] = ["attack", "max_hp", "armor", "gp", "ap", "heal"] ## 令牌档位词表(v2.2 三档位——稀有度命名对齐 MC 策略判读序 316-f:1 级最稀有=rarest 优先) const TIERS: Array[String] = ["common", "rare", "rarest"] const TIER_COMMON := "common" @@ -30,65 +39,65 @@ const TIER_QUOTAS := {"common": 70, "rare": 25, "rarest": 3} @export var clear_heal_pct: int = 20 # [0,100] knob——回复生效上限的百分比,封顶上限不回满 # —— 三选一候选数(2026-10-02 修复批 T2 魔法数结构化)—— -@export var bonus_candidate_count: int = 3 # [1,6] knob——令牌洗牌不放回抽取张数上界 +@export var feature_candidate_count: int = 3 # [1,6] knob——令牌洗牌不放回抽取张数上界 @export var shop_refresh_free: int = 0 # [0,9] knob(MC-1 provisional——进店免费刷新次数;基础 0=Q2 裁,天赋增益位预留) @export var shop_refresh_cost_base: int = 20 # [1,999] knob(MC-1 provisional——GP 刷新基价) @export var shop_refresh_cost_curve: float = 1.8 # [1.0,4.0] knob(MC-1 provisional——按已付费刷新数幂曲线,A 链同族) # —— 令牌配额(kind × tier 计数;未列组合 = 0——heal 只入稀有/ap 只入罕见,v2.2 档位构成)—— -@export var token_attack_common: int = 18 # [0,99] -@export var token_attack_rare: int = 5 # [0,99] -@export var token_max_hp_common: int = 17 # [0,99] -@export var token_max_hp_rare: int = 5 # [0,99] -@export var token_armor_common: int = 17 # [0,99] -@export var token_armor_rare: int = 5 # [0,99] -@export var token_gp_common: int = 18 # [0,99] -@export var token_gp_rare: int = 5 # [0,99] -@export var token_heal_rare: int = 5 # [0,99]——恢复件(新入池种类,当即回血) -@export var token_ap_rarest: int = 3 # [0,99]——AP 件(罕见档;道具件 2 席位随池种退役收窄) +@export var feature_quota_attack_common: int = 18 # [0,99] +@export var feature_quota_attack_rare: int = 5 # [0,99] +@export var feature_quota_max_hp_common: int = 17 # [0,99] +@export var feature_quota_max_hp_rare: int = 5 # [0,99] +@export var feature_quota_armor_common: int = 17 # [0,99] +@export var feature_quota_armor_rare: int = 5 # [0,99] +@export var feature_quota_gp_common: int = 18 # [0,99] +@export var feature_quota_gp_rare: int = 5 # [0,99] +@export var feature_quota_heal_rare: int = 5 # [0,99]——恢复件(新入池种类,当即回血) +@export var feature_quota_ap_rarest: int = 3 # [0,99]——AP 件(罕见档;道具件 2 席位随池种退役收窄) # —— 令牌件值(小/大数值对——v2.2 追认 b 定稿:20/50、+1/+2、+1/+2、+5/+10、恢复+6、AP+1)—— -@export var bonus_attack_flat: int = 1 # [0,999] knob——小增伤 -@export var bonus_attack_flat_large: int = 2 # [0,999] knob——大增伤 -@export var bonus_max_hp_flat: int = 5 # [0,999] knob——小生命 -@export var bonus_max_hp_flat_large: int = 10 # [0,999] knob——大生命 -@export var bonus_armor_flat: int = 1 # [0,999] knob——小护甲 -@export var bonus_armor_flat_large: int = 2 # [0,999] knob——大护甲 -@export var bonus_gp_amount: int = 20 # [0,999] knob——小GP -@export var bonus_gp_amount_large: int = 50 # [0,999] knob——大GP -@export var bonus_heal_flat: int = 6 # [0,999] knob——恢复(当即回血,封顶生效上限) -@export var bonus_ap_flat: int = 1 # [0,10] knob——AP 件每场战斗首轮行动点基线增量 +@export var feature_value_attack_common: int = 1 # [0,999] knob——小增伤 +@export var feature_value_attack_rare: int = 2 # [0,999] knob——大增伤 +@export var feature_value_max_hp_common: int = 5 # [0,999] knob——小生命 +@export var feature_value_max_hp_rare: int = 10 # [0,999] knob——大生命 +@export var feature_value_armor_common: int = 1 # [0,999] knob——小护甲 +@export var feature_value_armor_rare: int = 2 # [0,999] knob——大护甲 +@export var feature_value_gp_common: int = 20 # [0,999] knob——小GP +@export var feature_value_gp_rare: int = 50 # [0,999] knob——大GP +@export var feature_value_heal_rare: int = 6 # [0,999] knob——恢复(当即回血,封顶生效上限) +@export var feature_value_ap_rarest: int = 1 # [0,10] knob——AP 件每场战斗首轮行动点基线增量 ## 令牌配额读数(未列 kind×tier 组合 = 0——heal 无普通档/ap 无普通稀有档按 v2.2 构成) -func bonus_token_count(kind: String, tier: String) -> int: +func feature_quota(kind: String, tier: String) -> int: match [kind, tier]: - ["attack", TIER_COMMON]: return token_attack_common - ["attack", TIER_RARE]: return token_attack_rare - ["max_hp", TIER_COMMON]: return token_max_hp_common - ["max_hp", TIER_RARE]: return token_max_hp_rare - ["armor", TIER_COMMON]: return token_armor_common - ["armor", TIER_RARE]: return token_armor_rare - ["gp", TIER_COMMON]: return token_gp_common - ["gp", TIER_RARE]: return token_gp_rare - ["heal", TIER_RARE]: return token_heal_rare - ["ap", TIER_RAREST]: return token_ap_rarest + ["attack", TIER_COMMON]: return feature_quota_attack_common + ["attack", TIER_RARE]: return feature_quota_attack_rare + ["max_hp", TIER_COMMON]: return feature_quota_max_hp_common + ["max_hp", TIER_RARE]: return feature_quota_max_hp_rare + ["armor", TIER_COMMON]: return feature_quota_armor_common + ["armor", TIER_RARE]: return feature_quota_armor_rare + ["gp", TIER_COMMON]: return feature_quota_gp_common + ["gp", TIER_RARE]: return feature_quota_gp_rare + ["heal", TIER_RARE]: return feature_quota_heal_rare + ["ap", TIER_RAREST]: return feature_quota_ap_rarest return 0 ## 令牌件值(kind × tier;v2.2 数值对——小/大两档) -func bonus_value(kind: String, tier: String = TIER_COMMON) -> int: +func feature_value(kind: String, tier: String = TIER_COMMON) -> int: match [kind, tier]: - ["attack", TIER_COMMON]: return bonus_attack_flat - ["attack", TIER_RARE]: return bonus_attack_flat_large - ["max_hp", TIER_COMMON]: return bonus_max_hp_flat - ["max_hp", TIER_RARE]: return bonus_max_hp_flat_large - ["armor", TIER_COMMON]: return bonus_armor_flat - ["armor", TIER_RARE]: return bonus_armor_flat_large - ["gp", TIER_COMMON]: return bonus_gp_amount - ["gp", TIER_RARE]: return bonus_gp_amount_large - ["heal", TIER_RARE]: return bonus_heal_flat - ["ap", TIER_RAREST]: return bonus_ap_flat + ["attack", TIER_COMMON]: return feature_value_attack_common + ["attack", TIER_RARE]: return feature_value_attack_rare + ["max_hp", TIER_COMMON]: return feature_value_max_hp_common + ["max_hp", TIER_RARE]: return feature_value_max_hp_rare + ["armor", TIER_COMMON]: return feature_value_armor_common + ["armor", TIER_RARE]: return feature_value_armor_rare + ["gp", TIER_COMMON]: return feature_value_gp_common + ["gp", TIER_RARE]: return feature_value_gp_rare + ["heal", TIER_RARE]: return feature_value_heal_rare + ["ap", TIER_RAREST]: return feature_value_ap_rarest return 0 @@ -104,8 +113,8 @@ func tier_rank(tier: String) -> int: ## 档位令牌总数(货架/校验读面) func tier_total(tier: String) -> int: var total := 0 - for kind in BONUS_IDS: - total += bonus_token_count(kind, tier) + for kind in FEATURE_KINDS: + total += feature_quota(kind, tier) return total @@ -118,18 +127,18 @@ func validate() -> Array: var errs: Array[Dictionary] = [] if clear_heal_pct < 0 or clear_heal_pct > 100: errs.append({"category": "domain", "message": "clear_heal_pct 越域 [0,100]: %d" % clear_heal_pct}) - for kind in BONUS_IDS: + for kind in FEATURE_KINDS: for tier in TIERS: - var c := bonus_token_count(kind, tier) + var c := feature_quota(kind, tier) if c < 0 or c > 99: errs.append({"category": "domain", "message": "token_count(%s,%s) 越域 [0,99]: %d" % [kind, tier, c]}) - var v := bonus_value(kind, tier) + var v := feature_value(kind, tier) if v < 0 or v > 999: - errs.append({"category": "domain", "message": "bonus_value(%s,%s) 越域 [0,999]: %d" % [kind, tier, v]}) + errs.append({"category": "domain", "message": "feature_value(%s,%s) 越域 [0,999]: %d" % [kind, tier, v]}) for tier in TIERS: var total := tier_total(tier) if total != int(TIER_QUOTAS.get(tier, -1)): errs.append({"category": "domain", "message": "档位配额结构失锚(v2.2 追认 b——%s 应=%d 实=%d;改总量须重裁)" % [tier, int(TIER_QUOTAS.get(tier, -1)), total]}) - if bonus_candidate_count < 1 or bonus_candidate_count > 6: - errs.append({"category": "domain", "message": "bonus_candidate_count 越域 [1,6]: %d" % bonus_candidate_count}) + if feature_candidate_count < 1 or feature_candidate_count > 6: + errs.append({"category": "domain", "message": "feature_candidate_count 越域 [1,6]: %d" % feature_candidate_count}) return errs diff --git a/game/data/schemas/meta_tree_table.gd b/game/data/schemas/meta_tree_table.gd index 6560f672..603458c7 100644 --- a/game/data/schemas/meta_tree_table.gd +++ b/game/data/schemas/meta_tree_table.gd @@ -13,8 +13,8 @@ # requires Array[node_id](显式前置——父开子脉内链)/ effects Dictionary(stat 四线 flat: # atk/max_hp/hit/armor_class;rule 键封闭 RULE_KEYS)/ fork_group/fork_side(a/b——同组互斥、 # 营地免费切换)。 -# 🔴 层级纪律(任务书红线 2):局外树只放全局规则件——effects 禁流派标签(relic 流派件永不入树, -# archetype 键出域=加载致命);流派件只走局内随机渠道。 +# 🔴 层级纪律(任务书红线 2):局外树只放全局规则件——effects 禁流派标签(relic 特性永不入树, +# archetype 键出域=加载致命);规则改写型特性只走局内随机渠道。 # A/B 只放规则面(定稿 1.3——全树互斥面 ≤10-15% 首期 4 组);两侧「不同强非强弱」MC 验差 <~3pp(T10)。 # 彩蛋 ≤3(定稿 1.4——点满某脉某排免费觉醒;发现率 <5% 改灰色预告——T10 追认单呈报)。 class_name MetaTreeTable @@ -76,9 +76,9 @@ func validate() -> Array: for ek in fx.keys(): if not (STAT_KEYS.has(String(ek)) or RULE_KEYS.has(String(ek))): errs.append({"category": "zero_flat", "message": "%s effects 键出域(四线/rule 词表封闭): %s" % [nid, String(ek)]}) - # 🔴 层级纪律:局外树禁流派件(archetype 键出域=加载致命) + # 🔴 层级纪律:局外树禁规则改写型特性(archetype 键出域=加载致命) if fx.has("archetype"): - errs.append({"category": "load_bearing", "message": "%s effects 含 archetype(🔴 层级纪律——流派件禁入局外树)" % nid}) + errs.append({"category": "load_bearing", "message": "%s effects 含 archetype(🔴 层级纪律——特性禁入局外树)" % nid}) # A/B 互斥对结构:fork 行必带 fork_group+side;同组恰 a/b 各一 if kind == "fork": var fg := String(row.get("fork_group", "")) diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index f6487ef7..6f9a3c65 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -1,8 +1,14 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、 -# 机制件带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) +# 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1) # Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3) -# 数据配置 RelicTable schema(双层BD/机制件 回填 owner 批末落文;行 = Dictionary 键 relic_id,Rule 4 豁免 +# 概念指路:本表的专长,与 adventure.tres 的属性值提升、资源,同属一个对象—— +# 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。 +# 它们是它分类轴上的枚举(专长 / 属性值提升 / 资源),不是三套系统;本表承载「专长」(专长 Feat)的逐项定义。 +# (2026-10-05 命名统一 + 分类重构:旧称「流派件」→「规则改写型特性」→ 现定名「专长」; +# 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 +# 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奇物文档 2.1 节。) +# 数据配置 RelicTable schema(奇物·专长定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 # 定义表——AuxItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 @@ -12,7 +18,7 @@ # 仅校验键域不禁纯增益(专项论证件以 positive_only 批注登记,人工清单呈报)。 # 档位激活(整合定稿 设计工具 1——以撒套装/小骨铭文):同标签计数 ≥2→档一(流派核心规则)/≥4→档二 # (完全体);散件单体保底=每件效果独立生效,档位只做质变(反例 B-2)——引擎纯函数 RelicsEngine。 -# 🔴 层级纪律(任务书红线 2):流派件只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位 +# 🔴 层级纪律(任务书红线 2):专长只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位 # (aux_items 表)/局外树(T8 节点表);扫雷触发点铁律:每流派 ≥1 行 hook ∈ MINE_HOOKS(加载校验, # 违反=红线①触碰面)。 class_name RelicTable diff --git a/game/data/schemas/shop_table.gd b/game/data/schemas/shop_table.gd index 0595196c..46b2acb7 100644 --- a/game/data/schemas/shop_table.gd +++ b/game/data/schemas/shop_table.gd @@ -10,7 +10,7 @@ # 现价公式 = base_price + price_level_bonus(关卡) + price_increment × 该商品已购档数(已购档数在 冒险结构)。 # price_level_bonus = 关级定价加值行(level_index 连续从 1 递增)。 # pool_shelf = 共享池货架行(M-4 迭代 11 第②批 T1——任务书 v1.3 P1 共享池/P4 ceil):键 kind_id 词表 -# 封闭 = 四切边后种(SHELF_KINDS:attack/max_hp/armor/ap——GP 袋负交易切边、机制件三轴 doctrine 切边); +# 封闭 = 四切边后种(SHELF_KINDS:attack/max_hp/armor/ap——GP 袋负交易切边、规则改写型特性三轴 doctrine 切边); # 库存=上限即库存(账本在 冒险结构 _bonus_taken 单点共享,行族不记库存);price_a/price_b = 乘法价格 # 因子(公式 ceil(base × b^(关序−1) × A^(本次进店已购次数)),provisional 投值——P5 甲研究拍板后置追认)。 # products 行族 + 加法定价随 legacy 模式(shop=off 对照承载)保留,退役归 off 锚换代批。 diff --git a/game/data/tables/adventure.tres b/game/data/tables/adventure.tres index 6144b9f0..e1ce4c3a 100644 --- a/game/data/tables/adventure.tres +++ b/game/data/tables/adventure.tres @@ -5,27 +5,27 @@ [resource] script = ExtResource("1") clear_heal_pct = 20 -bonus_candidate_count = 3 -token_attack_common = 18 -token_attack_rare = 5 -token_max_hp_common = 17 -token_max_hp_rare = 5 -token_armor_common = 17 -token_armor_rare = 5 -token_gp_common = 18 -token_gp_rare = 5 -token_heal_rare = 5 -token_ap_rarest = 3 -bonus_attack_flat = 1 -bonus_attack_flat_large = 2 -bonus_max_hp_flat = 5 -bonus_max_hp_flat_large = 10 -bonus_armor_flat = 1 -bonus_armor_flat_large = 2 -bonus_gp_amount = 20 -bonus_gp_amount_large = 50 -bonus_heal_flat = 6 -bonus_ap_flat = 1 +feature_candidate_count = 3 +feature_quota_attack_common = 18 +feature_quota_attack_rare = 5 +feature_quota_max_hp_common = 17 +feature_quota_max_hp_rare = 5 +feature_quota_armor_common = 17 +feature_quota_armor_rare = 5 +feature_quota_gp_common = 18 +feature_quota_gp_rare = 5 +feature_quota_heal_rare = 5 +feature_quota_ap_rarest = 3 +feature_value_attack_common = 1 +feature_value_attack_rare = 2 +feature_value_max_hp_common = 5 +feature_value_max_hp_rare = 10 +feature_value_armor_common = 1 +feature_value_armor_rare = 2 +feature_value_gp_common = 20 +feature_value_gp_rare = 50 +feature_value_heal_rare = 6 +feature_value_ap_rarest = 1 ; TP0 令牌池换代(2026-10-03,node-reward v2.2 追认 b 落地):三选一池 = 固定配额令牌池—— ; 普通 70/稀有 25/罕见 3 = 98 张(罕见档原列「道具件 2」随 aux_item 池种退役收窄——台账自决披露项); diff --git a/game/data/tables/meta_tree.tres b/game/data/tables/meta_tree.tres index 05c03313..b37942f9 100644 --- a/game/data/tables/meta_tree.tres +++ b/game/data/tables/meta_tree.tres @@ -411,5 +411,5 @@ rows = [{ ; ≥ 4×(row−1));锻造脉 3 节点收编 forge_levels(钥石付价=现行迁移零痛);钥石脉=工坊解锁收编 ; (free 迁移点亮)+刷新升级移植;同调脉 socket 3(钥石=规则面首站)+Fork 4 对(A/B 集中同调脉 ; 营地免费切换——effects 首期两 rule 键真实接线余组 stat 面 provisional);彩蛋 1(锻造满排觉醒)。 -; 🔴 层级纪律:局外树只放全局规则件——零 archetype 键(schema 校验强制);流派件只走局内随机渠道。 +; 🔴 层级纪律:局外树只放全局规则件——零 archetype 键(schema 校验强制);规则改写型特性只走局内随机渠道。 ; 数值全 provisional 归 M-4 数值批;A/B 两侧差 <~3pp 验收=T10 MC。 diff --git a/game/data/tables/relics.tres b/game/data/tables/relics.tres index 461c09c5..4dfbeb1d 100644 --- a/game/data/tables/relics.tres +++ b/game/data/tables/relics.tres @@ -260,15 +260,15 @@ rows = [{ } }] -; 双层 BD 实施批(2026-10-04):机制件表——行 = 流派件定义 +; 双层 BD 实施批(2026-10-04):规则改写型特性表——行 = 特性定义 ; (relic_id/display_name/rarity/archetype/hook/effects)。 ; T2 魔法流四件(整合定稿 §2.3 S1):奥术余烬〔普通·rider+1 必中附加〕/魔网织者〔稀有·magic vs ; magic 克制罚修正〕/湛蓝誓约〔稀有·magic vs heavy 克制加成〕/魔能共鸣〔罕见锚点·rider+2+每战首次 ; 开格奥术矢——「每关首次」字面落地为「每战首次」台账披露待追认〕;magic 档一(≥2 件)rider+1 / ; 档二(≥4 件)rider 可暴击——引擎 tiers_for 承载。T3-T6 逐流派续填(flag 4/pierce 4/normal 4/ -; dig 4/charge 3/devour 4——整合定稿 §2.3 七流派件面)。 +; dig 4/charge 3/devour 4——整合定稿 §2.3 七流派的件面)。 ; 稀有度→投放档映射:common/rare → 稀有令牌档、rarest → 罕见令牌档(relic 永不入普通令牌档 -; ——「机制件带挂稀有/罕见档」追认 b 接线口径,普通档 70 张纯数值维持)。 -; 🔴 层级纪律:本表行永不入同调位(aux_items)/局外树(T8 节点表)——流派件只走局内随机渠道。 +; ——「规则改写型特性带挂稀有/罕见档」追认 b 接线口径,普通档 70 张纯数值维持)。 +; 🔴 层级纪律:本表行永不入同调位(aux_items)/局外树(T8 节点表)——规则改写型特性只走局内随机渠道。 ; 数值全 provisional 归 M-4 数值批;effects 键白名单封闭(零裸 flat 同族护栏)。 diff --git a/game/data/tables/shop.tres b/game/data/tables/shop.tres index 3976983b..bd1203c1 100644 --- a/game/data/tables/shop.tres +++ b/game/data/tables/shop.tres @@ -94,7 +94,7 @@ price_b = 1.1 ;(用户拍板骨架先行、数值整体后置,行值归 难度曲线与Boss)。 ; GP 商店房重构批(M-4 迭代 11 第②批 T1,2026-10-03——任务书 v1.3 全裁 P1 共享池/P4 ceil/P5 甲): ; pool_shelf 行族 = 共享池货架(kind_id 词表封闭四切边后种 attack/max_hp/armor/ap——GP 袋负交易切边、 -; 机制件三轴 doctrine 切边;库存=上限即库存,账本在 冒险结构 _bonus_taken 单点共享,行族不记库存); +; 规则改写型特性三轴 doctrine 切边;库存=上限即库存,账本在 冒险结构 _bonus_taken 单点共享,行族不记库存); ; 价格公式换代(pool 模式)= ceil(base_price × b^(关序−1) × A^(本次进店已购次数)),price_a=1.8/price_b=1.1 ; provisional 投值(零人工令改 provisional+后置追认,原 P5 甲研究拍板后置);products 行族 + 加法定价 ; 随 legacy 模式(shop=off 对照承载)保留不退役,退役归 off 锚换代批。货架行值全部 provisional 归 diff --git a/game/presentation/battle_narrator.gd b/game/presentation/battle_narrator.gd index f0d917e5..db5b90be 100644 --- a/game/presentation/battle_narrator.gd +++ b/game/presentation/battle_narrator.gd @@ -131,11 +131,11 @@ static func bonus_result_text(result: Dictionary) -> String: return "已选择:%s\n其余选项已丢弃(不可反悔)" % name -# 流派件卡片文案(迭代 12 T1;2026-10-04 呈现补强——第三行=hook 效果摘要,用户反馈「不知道件是 +# 特性卡片文案(迭代 12 T1;2026-10-04 呈现补强——第三行=hook 效果摘要,用户反馈「不知道件是 # 干嘛的」缺口承载;摘要=静态映射表 provisional 文案归代拍板白名单「件文案微调」) static func relic_card_text(row: Dictionary) -> String: if row.is_empty() or String(row.get("relic_id", "")) == "": - return "流派件\n???" + return "特性\n???" var arch_names := {"magic": "魔法", "pierce": "穿刺", "normal": "普攻", "dig": "开格", "flag": "标旗", "charge": "蓄力", "devour": "吞噬"} var arch := String(arch_names.get(String(row.get("archetype", "")), "流派")) @@ -167,7 +167,7 @@ static func relic_card_text(row: Dictionary) -> String: var summary := String(summaries.get(String(row.get("hook", "")), "")) if summary != "": return "%s · %s\n%s" % [String(row.get("display_name", row.get("relic_id", ""))), arch, summary] - return "流派件 · %s\n%s" % [arch, String(row.get("display_name", row.get("relic_id", "")))] + return "特性 · %s\n%s" % [arch, String(row.get("display_name", row.get("relic_id", "")))] # Boss 胜利战斗总结结算行(settlement-summary v1.1——钥石增量行;组合根拼 GP 行后追加) diff --git a/game/presentation/bonus_interact_controller.gd b/game/presentation/bonus_interact_controller.gd index 6abe4178..d6930cbc 100644 --- a/game/presentation/bonus_interact_controller.gd +++ b/game/presentation/bonus_interact_controller.gd @@ -127,9 +127,9 @@ func _bonus_card_texts(candidates: Array, aux_detail: Array = []) -> Array: elif kind == "aux_item": var iid := String(aux_detail[aux_i]) if aux_i < aux_detail.size() else "" aux_i += 1 - text = Narrator.bonus_card_text(kind, tier, int(db.adventure.bonus_value(kind, tier)), _aux_card_line(iid)) + text = Narrator.bonus_card_text(kind, tier, int(db.adventure.feature_value(kind, tier)), _aux_card_line(iid)) else: - text = Narrator.bonus_card_text(kind, tier, int(db.adventure.bonus_value(kind, tier))) + text = Narrator.bonus_card_text(kind, tier, int(db.adventure.feature_value(kind, tier))) out.append({"id": cid, "text": text}) return out diff --git a/game/presentation/hud_presenter.gd b/game/presentation/hud_presenter.gd index f2d6d235..d6e48f48 100644 --- a/game/presentation/hud_presenter.gd +++ b/game/presentation/hud_presenter.gd @@ -19,7 +19,7 @@ extends RefCounted # HP/状态效果单投喂 B 区站桩(原 B/C 双投喂为重复展示——信息归属拍板单一展示面原则) static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApBarView, settlement, runner, level_active: bool, db, refresh_remaining: int) -> void: - # 本关强化列表(v3.5 迭代 9 卡⑫ 2026-09-30——runner 统一加算区投影:商店购买与关卡大奖励 + # 特性列表(v3.5 迭代 9 卡⑫ 2026-09-30——runner 统一加算区投影:商店购买与关卡大奖励 # 共账本〔level_runner bonus{atk,max_hp,armor_class}〕;空加算=整节隐藏〔视图内空态纪律〕。 # 呈现只读投影零核心触碰;行文格式=代拍板白名单项) if runner != null and level_active: @@ -34,7 +34,7 @@ static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApB info.set_level_bonuses(lines) else: info.set_level_bonuses([]) - # 流派件持有投影(迭代 12 呈现补齐 2026-10-04——用户反馈「局内奖励选了什么看不到」: + # 特性持有投影(迭代 12 呈现补齐 2026-10-04——用户反馈「局内奖励选了什么看不到」: # 逐流派聚合行+成型档位;常驻可读+空态隐藏。档位求值=RelicsEngine 纯函数直调) if runner != null and level_active: info.set_relic_holdings(relic_holdings_lines(db, runner.relics_held())) @@ -46,7 +46,7 @@ static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApB return var s: Dictionary = settlement.presentation_snapshot() # 地形变异常驻角标投影(全局作用域变异首发批 2026-10-04——板级变异快照 → 文案行; - # 空态隐藏=流派件段先例;战斗全程常驻防中局遗忘) + # 空态隐藏=特性段先例;战斗全程常驻防中局遗忘) info.set_board_variants(board_variant_lines(db, s.get("board_variants", []))) var hero: Dictionary = s.hero if hero.is_empty() or not bool(hero.get("alive", false)): @@ -93,7 +93,7 @@ static func _refresh_economy(ap_bar: ApBarView, s: Dictionary, db, refresh_remai ap_bar.set_stop_enabled(bool(s.hero.get("alive", false)) and digging) -# 流派件持有聚合文案(迭代 12 呈现补齐——战斗 C 区与关卡选择页两处共用;空持有=空数组) +# 特性持有聚合文案(迭代 12 呈现补齐——战斗 C 区与关卡选择页两处共用;空持有=空数组) static func relic_holdings_lines(db, held: Array) -> Array[String]: var rlines: Array[String] = [] if db == null or db.relics == null or (db.relics.rows as Array).is_empty() or held.is_empty(): diff --git a/game/presentation/views/hero_info_panel_view.gd b/game/presentation/views/hero_info_panel_view.gd index 97c18bb5..3add280e 100644 --- a/game/presentation/views/hero_info_panel_view.gd +++ b/game/presentation/views/hero_info_panel_view.gd @@ -1,6 +1,6 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # 实现 GDD:design/ux/battle.md(C 区角色信息 240×548——2026-09-26 信息归属拍板精简: -# 攻击(+修正来源角标)/护甲 AC 数据框 + 魔法道具槽(预留)+ 本关强化列表(预留)。 +# 攻击(+修正来源角标)/护甲 AC 数据框 + 魔法道具槽(预留)+ 特性列表(预留)。 # HP 条/立绘占位/状态效果槽/RAP 池/GP/钥石退役——HP 与状态唯一展示面 = B 区站桩(同一数据 # hud_presenter 双投喂 B/C 两区的重复展示);RAP 迁 D 区 AP 条(贴弃图刷新消费口); # GP(中循环)/钥石(大循环)迁出战斗屏)。 @@ -19,9 +19,9 @@ var item_slots: HBoxContainer # 魔法道具槽(迭代 7 T4 接 var _slot_panels: Array = [] # 槽 PanelContainer 引用(选中高亮/置灰重刷) var _selected_handle := 0 # 选中态(0=无;组合根回写维持单源) var _slot_handles: Array = [] # 槽位→handle 映射(set_aux_inventory 刷新) -var _bonus_section: VBoxContainer # 本关强化(预留——空态隐藏,接线归大奖励/锻造呈现批) +var _bonus_section: VBoxContainer # 特性(预留——空态隐藏,接线归大奖励/锻造呈现批) var _bonus_list: VBoxContainer -var _relic_section: VBoxContainer # 流派件持有段(迭代 12 呈现补齐——空态隐藏) +var _relic_section: VBoxContainer # 特性持有段(迭代 12 呈现补齐——空态隐藏) var _relic_list: VBoxContainer var _board_variant_section: VBoxContainer # 地形变异常驻角标(全局作用域变异首发批——空态隐藏) var _board_variant_list: VBoxContainer @@ -70,19 +70,19 @@ func _init() -> void: item_slots.add_child(slot) _slot_panels.append(slot) - # 流派件持有段(迭代 12 呈现补齐 2026-10-04——三选一流派件兑付后常驻可读:逐流派聚合行+成型档位; + # 特性持有段(迭代 12 呈现补齐 2026-10-04——三选一特性兑付后常驻可读:逐流派聚合行+成型档位; # 空态整节隐藏。用户试玩反馈「局内奖励选了什么看不到」缺口承载;2026-10-04 二次反馈上移—— # 构筑核心信息优先级高于临时强化,且防 C 区下部裁切不可见) _relic_section = VBoxContainer.new() _relic_section.add_theme_constant_override("separation", 4) _relic_section.visible = false col.add_child(_relic_section) - _relic_section.add_child(UiKit.label("流派件", 16, true)) + _relic_section.add_child(UiKit.label("特性", 16, true)) _relic_list = VBoxContainer.new() _relic_list.add_theme_constant_override("separation", 2) _relic_section.add_child(_relic_list) # 地形变异常驻角标(全局作用域变异首发批 2026-10-04——Boss 图整图型战斗全程可见防中局遗忘; - # 空态整节隐藏=流派件段先例;摆位/文案 provisional 归 HUD 框架批与本地化批) + # 空态整节隐藏=特性段先例;摆位/文案 provisional 归 HUD 框架批与本地化批) _board_variant_section = VBoxContainer.new() _board_variant_section.add_theme_constant_override("separation", 4) _board_variant_section.visible = false @@ -91,13 +91,13 @@ func _init() -> void: _board_variant_list = VBoxContainer.new() _board_variant_list.add_theme_constant_override("separation", 2) _board_variant_section.add_child(_board_variant_list) - # 本关强化(预留):锻造/大奖励/关卡奖励节点的属性提升——中循环数据因改变战斗数学准入; + # 特性(预留):锻造/大奖励/关卡奖励节点的属性提升——中循环数据因改变战斗数学准入; # 与战斗内状态效果(B 区站桩,随战斗消散)分区,防「战斗结束被清」误读;空态整节隐藏 _bonus_section = VBoxContainer.new() _bonus_section.add_theme_constant_override("separation", 4) _bonus_section.visible = false col.add_child(_bonus_section) - _bonus_section.add_child(UiKit.label("本关强化", 16, true)) + _bonus_section.add_child(UiKit.label("特性", 16, true)) _bonus_list = VBoxContainer.new() _bonus_list.add_theme_constant_override("separation", 2) _bonus_section.add_child(_bonus_list) @@ -113,7 +113,7 @@ func set_armor(ac: int) -> void: _armor_label.text = "护甲 AC %d" % ac -# 流派件持有段(迭代 12 呈现补齐):lines = 聚合文案行(「魔法 ×2 · 档一」式)——空数组 = 整节隐藏 +# 特性持有段(迭代 12 呈现补齐):lines = 聚合文案行(「魔法 ×2 · 档一」式)——空数组 = 整节隐藏 func set_relic_holdings(lines: Array) -> void: for c2 in _relic_list.get_children(): _relic_list.remove_child(c2) @@ -135,7 +135,7 @@ func set_board_variants(lines: Array) -> void: _board_variant_section.visible = not lines.is_empty() -# 本关强化列表(预留接线面):lines = 文案行数组(如「锻造 +2 攻击」)——空数组 = 整节隐藏 +# 特性列表(预留接线面):lines = 文案行数组(如「锻造 +2 攻击」)——空数组 = 整节隐藏 func set_level_bonuses(lines: Array) -> void: for c in _bonus_list.get_children(): _bonus_list.remove_child(c) diff --git a/game/presentation/views/level_map_screen.gd b/game/presentation/views/level_map_screen.gd index edf60bcb..6ffb3b5c 100644 --- a/game/presentation/views/level_map_screen.gd +++ b/game/presentation/views/level_map_screen.gd @@ -6,7 +6,7 @@ # 悬停预承诺(描边加粗+指针)后点击提交;press_candidate 探针入口改走图上命中同路径 # ③ 放弃冒险二次确认(布局决策 3)——首击转确认态(文案+危险红脉冲约 3 秒超时回落),二击提交 # ④ 顶栏语境:关卡名(level_row.display_name)+ GP 常驻徽章(2026-09-26 二轮拍板去向落地面) -# ⑤ 底部状态栏(布局决策 4):生命/属性/本关加成三组常读(零加成隐藏),放弃按钮右端异位 +# ⑤ 底部状态栏(布局决策 4):生命/属性/特性三组常读(零加成隐藏),放弃按钮右端异位 # 关卡画面(独立屏,Level Map Screen——2026-09-28 形态升格批 M-2 迭代 3 T2:原 RouteOverlay 模态 # 覆盖层升格独立屏,spec level-map.md 形态章节同批改写):全屏不透明独占呈现——激活期战斗屏宿主 # 由组合根整体隐藏(非暗幕半透、零透出)。零自动推进的玩家停点语义不变:唯一前进通道 = @@ -57,7 +57,7 @@ var _hp_bar: Control var _attr_value: Label var _bonus_row: HBoxContainer var _bonus_value: Label -var _relic_value: Label # 流派件持有行(迭代 12 呈现补齐——组合根投喂聚合文案) +var _relic_value: Label # 特性持有行(迭代 12 呈现补齐——组合根投喂聚合文案) var _cand_ids: Array[int] = [] # 本停点候选 id 集(图上命中合法集) var _content_size := Vector2(620, 240) # 图内容包络(open_choices 按图拟合——画布 min 尺寸随它) var _hover_id := -1 # 悬停预承诺候选(-1 = 无) @@ -159,10 +159,14 @@ func _init() -> void: strip.add_child(_bonus_row) var bonus_box := VBoxContainer.new() _bonus_row.add_child(bonus_box) - bonus_box.add_child(UiKit.label("本关加成", 11, false, Color8(110, 69, 52))) - _bonus_value = UiKit.label("", 15, true, UiKit.INK_TITLE) - bonus_box.add_child(_bonus_value) - _relic_value = UiKit.label("", 12, false, Color8(110, 69, 52)) + var bonus_inner := VBoxContainer.new() + bonus_box.add_child(bonus_inner) + var bonus_cap := UiKit.label("特性", 12, false, UiKit.WARM_SOFT) + bonus_inner.add_child(bonus_cap) + _bonus_value = UiKit.label("", 15, true, UiKit.WARM) + bonus_inner.add_child(_bonus_value) + # 特性持有行(迭代 12 呈现补齐 2026-10-04——用户反馈关卡选择页看不到局内奖励;组合根投喂) + _relic_value = UiKit.label("", 13, false, UiKit.WARM_SOFT) _relic_value.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART bonus_box.add_child(_relic_value) var spacer := Control.new() @@ -200,7 +204,7 @@ func _draw_hp_bar(bar: Control) -> void: # 放弃入口可见性(组合根在冒险启动时开、默认关——语义对象 = 整局冒险) -# 流派件持有投影(迭代 12 呈现补齐——组合根投喂聚合文案;空文案=行隐藏) +# 特性持有投影(迭代 12 呈现补齐——组合根投喂聚合文案;空文案=行隐藏) func set_relic_holdings(text: String) -> void: _relic_value.text = text @@ -335,7 +339,7 @@ func _refresh_status() -> void: if ac_bonus > 0: parts.append("AC +%d" % ac_bonus) _bonus_value.text = " · ".join(parts) - # 流派件持有行可见性(与加成行并框——任一非空整框显示;文案归组合根 set_relic_holdings) + # 特性持有行可见性(与加成行并框——任一非空整框显示;文案归组合根 set_relic_holdings) _bonus_row.visible = not parts.is_empty() or _relic_value.text != "" diff --git a/game/smoke/adventure_monte_carlo.gd b/game/smoke/adventure_monte_carlo.gd index c0ec6cc1..c21fe5ea 100644 --- a/game/smoke/adventure_monte_carlo.gd +++ b/game/smoke/adventure_monte_carlo.gd @@ -42,8 +42,8 @@ func _initialize() -> void: var shop_mode := "off" if args.size() >= 6 and args[5] in ["off", "on"]: shop_mode = args[5] - # 流派件/树分层开关(迭代 12 T7/T10——off=基线;formed=成型画像开局注入七流派各 2 件档一成型集 - # 〔测量面专用 params.relics_seed——真实局流派件只走局内随机渠道〕;ab_a/ab_b=Fork posture 两侧 + # 特性/树分层开关(迭代 12 T7/T10——off=基线;formed=成型画像开局注入七流派各 2 件档一成型集 + # 〔测量面专用 params.relics_seed——真实局规则改写型特性只走局内随机渠道〕;ab_a/ab_b=Fork posture 两侧 # rule 键集——A/B 面两侧差 <~3pp 验收载体) var relic_mode := "off" if args.size() >= 7 and args[6] in ["off", "formed", "ab_a", "ab_b"]: diff --git a/game/smoke/level_autoplay.gd b/game/smoke/level_autoplay.gd index f22898ad..fce5a090 100644 --- a/game/smoke/level_autoplay.gd +++ b/game/smoke/level_autoplay.gd @@ -137,7 +137,7 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ "log_path": "", "policy": policy, "refreshes": 0, "mine_hits": 0, "mine_dmg": 0, "visited_ids": [], "choices": 0, "last_battle_enemies": [], "summary": {}, "wallet_events": [], "encounter_max_hp_seq": [], "reward_events": [], - "relic_mode": String(relic.get("mode", "off")), # 流派件分层开关(迭代 12 T7——off=316-f 通用竞争/on=成型画像优先捕捞 relic) + "relic_mode": String(relic.get("mode", "off")), # 特性分层开关(迭代 12 T7——off=316-f 通用竞争/on=成型画像优先捕捞 relic) "shop_gp_seq": [], # 商店房到达余额序(逐关 1 次——GP 跨关延续验收取数面) # 旗经济五字段(迭代14②判式换代批 T1——与 run_level 同口径,见彼处注释) "flag_placed": 0, "flag_hit": 0, "flag_miss": 0, "flag_hit_gain": 0, "flag_miss_penalty": 0, @@ -161,7 +161,7 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ if not attune.is_empty(): adv_params["attunement"] = attune.get("equipped", []) adv_params["attune_refresh_y"] = int(attune.get("refresh_y", 0)) - # 流派件注入(迭代 12 T7——formed 画像=开局注入七流派各 2 件档一成型集;测量面专用) + # 特性注入(迭代 12 T7——formed 画像=开局注入七流派各 2 件档一成型集;测量面专用) if relic.has("seed_ids"): adv_params["relics_seed"] = relic.get("seed_ids", []) # 树规则键注入(迭代 12 T10——A/B 面读数载体:fork 激活侧 effects rule 键集透传) @@ -190,7 +190,7 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ # 终局池读数(迭代 11 第②批 T5——摘要 additive 键 pool_stock:_settle 清账前快照, # 商店买走 vs 奖励领走 vs 枯竭的终局面;事后读 adr.pool_stock 会被收束清账重置=满库假象) st["pool_stock"] = (st.get("summary", {}).get("pool_stock", {}) as Dictionary).duplicate(true) - st["relics"] = (st.get("summary", {}).get("relics", []) as Array).duplicate() # 流派件终局持有集(迭代 12 T1——摘要 additive 键清账前快照,同 pool_stock 模式) + st["relics"] = (st.get("summary", {}).get("relics", []) as Array).duplicate() # 特性终局持有集(迭代 12 T1——摘要 additive 键清账前快照,同 pool_stock 模式) st.log_path = logger.log_path() if own_session: logger.close_session() @@ -273,7 +273,7 @@ static func _on_adventure_bonus(payload: Dictionary, st: Dictionary, adr) -> voi # 三选一确定性选件(TP0 316-f——1 级优先度=最稀有〔档位最高 rarest>rare>common〕、2 级=最左; # 候选并列同档取最左=稳定序保证。空候选/未知档位 = 回退最左防御口径。 # 成型画像(迭代 12 T7——relic 模式 on:候选含 relic 令牌时优先在 relic 集内按 316-f 择一 -# 〔贪心捕捞→流派件入局→成型画像全流派覆盖——R3 乙单锚承载〕;off=relic 与数值件同规则竞争) +# 〔贪心捕捞→特性入局→成型画像全流派覆盖——R3 乙单锚承载〕;off=relic 与属性加成型特性同规则竞争) static func _pick_token(candidates: Array, relic_mode: String = "off") -> Dictionary: var pool: Array = candidates if relic_mode == "on": diff --git a/game/smoke/reward_expectation.gd b/game/smoke/reward_expectation.gd index 9b57ae86..4087900e 100644 --- a/game/smoke/reward_expectation.gd +++ b/game/smoke/reward_expectation.gd @@ -1,7 +1,7 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # Date: 2026-09-11(2026-09-15 格面资源批重写:类型频次测量——供给控制器批口径随可选类删除退役) # 奖励期望测量:逐深度实测 |非封锁格|(safe ∪ mines ∖ R₀)分布、格面资源类型频次 -# (应涌现自正向行权重 attack 20 / defense 16 / blast 16 / heal 15 / weaken 12,合计 79)、 +# (应涌现自正向行九型权重 attack 14 / defense 11 / blast 16 / heal 4 / weaken 8 / pierce 8 / magic 8 / action 6 / gp 2,合计 77——reward.tres 现行)、 # 封锁格零泄漏(R₀ 格不在摇号清单)——走真实 地图战斗资源.roll_board 管线。 # 运行:Godot_console.exe --headless --path . --script res://smoke/reward_expectation.gd extends SceneTree diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 569c7410..f652a814 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -220,12 +220,12 @@ func _smoke_adventure_table() -> void: check(int(_db.adventure.tier_total(tier)) == int(_db.adventure.TIER_QUOTAS[tier]), "档位配额结构锚(v2.2 追认 b):%s = %d 张" % [tier, int(_db.adventure.TIER_QUOTAS[tier])]) check(int(_db.adventure.deck_total()) == 98, "令牌池总量 = 98 张(普通 70/稀有 25/罕见 3——罕见档随道具件池种退役收窄)") - check(int(_db.adventure.bonus_value("gp", "common")) == 20 and int(_db.adventure.bonus_value("gp", "rare")) == 50 - and int(_db.adventure.bonus_value("attack", "common")) == 1 and int(_db.adventure.bonus_value("attack", "rare")) == 2 - and int(_db.adventure.bonus_value("max_hp", "common")) == 5 and int(_db.adventure.bonus_value("max_hp", "rare")) == 10 - and int(_db.adventure.bonus_value("armor", "common")) == 1 and int(_db.adventure.bonus_value("armor", "rare")) == 2, + check(int(_db.adventure.feature_value("gp", "common")) == 20 and int(_db.adventure.feature_value("gp", "rare")) == 50 + and int(_db.adventure.feature_value("attack", "common")) == 1 and int(_db.adventure.feature_value("attack", "rare")) == 2 + and int(_db.adventure.feature_value("max_hp", "common")) == 5 and int(_db.adventure.feature_value("max_hp", "rare")) == 10 + and int(_db.adventure.feature_value("armor", "common")) == 1 and int(_db.adventure.feature_value("armor", "rare")) == 2, "数值对(v2.2):小GP 20/大GP 50 · 小增伤 +1/大 +2 · 小生命 +5/大 +10 · 小护甲 +1/大 +2") - check(int(_db.adventure.bonus_value("heal", "rare")) == 6 and int(_db.adventure.bonus_value("ap", "rarest")) == 1, + check(int(_db.adventure.feature_value("heal", "rare")) == 6 and int(_db.adventure.feature_value("ap", "rarest")) == 1, "恢复件 +6 当即回血(新入池种类,rare 档)· AP +1(rarest 档)") check(_db.attunement_growth != null and int(_db.attunement_slot_cap()) == 3 and Attunement.slots(_db, null) == 0, @@ -349,7 +349,7 @@ func _smoke_adventure() -> void: var cand_ok := picks.size() == 2 var ks_gain_ok := picks.size() == 2 var resolve_ok := level_resolves.size() == 2 - var max_flat := int(_db.adventure.bonus_max_hp_flat) + var max_flat := int(_db.adventure.feature_value_max_hp_common) var heal_pct := int(_db.adventure.clear_heal_pct) var hp_acc := 0 # max_hp 件累加(回血封顶断言的生效上限推导——TP0 起按兑付令牌实值,大小档分别计) var ks_prefix := 0 @@ -386,7 +386,7 @@ func _smoke_adventure() -> void: var r: Dictionary = level_resolves[i] var rk := String(r.get("picked", "")) var rt := String(r.get("tier", "")) - if _smoke_find_token(p.get("candidates", []) as Array, rk, rt).is_empty() or int(r.get("value", -1)) != int(_db.adventure.bonus_value(rk, rt)): + if _smoke_find_token(p.get("candidates", []) as Array, rk, rt).is_empty() or int(r.get("value", -1)) != int(_db.adventure.feature_value(rk, rt)): resolve_ok = false if rk == "max_hp": hp_acc += int(r.get("value", max_flat)) @@ -399,7 +399,7 @@ func _smoke_adventure() -> void: var exp_base := maxi(1, int(round(float(int(_db.hero.max_hp)) * k))) # 模拟档 v3.4 商店贪心购血(数值修复批)合法抬升——上限窗口 = 基础 + 加算区 3 件 + 购血余量; # TP0 数值对后 max_hp 件有大生命 +10(rare 档)——上界按大件最坏构成 3×10+购血 15=+45(TP0 放宽) - var hp_ceiling := maxi(1, int(round(float(int(_db.hero.max_hp) + 3 * int(_db.adventure.bonus_value("max_hp", "rare")) + 15) * k))) + var hp_ceiling := maxi(1, int(round(float(int(_db.hero.max_hp) + 3 * int(_db.adventure.feature_value("max_hp", "rare")) + 15) * k))) var seq_ok := seq.size() > 0 and int(seq[0]) == exp_base for v in (seq as Array): if int(v) < exp_base or int(v) > hp_ceiling: @@ -594,22 +594,22 @@ func _smoke_adventure() -> void: a13.present_node_bonus(ncands13, ndraw.get("aux_detail", []) as Array) a13.present_node_bonus([{"kind": "gp", "tier": "common"}]) var gp13 := int(a13.ledger.get("gp", 0)) - check(a13.apply_node_bonus("gp", "common") and int(a13.ledger.get("gp", 0)) == gp13 + int(_db.adventure.bonus_value("gp", "common")), - "奖励节点 GP 件入账(钱包「奖励入账」收口——+%d)" % int(_db.adventure.bonus_value("gp", "common"))) + check(a13.apply_node_bonus("gp", "common") and int(a13.ledger.get("gp", 0)) == gp13 + int(_db.adventure.feature_value("gp", "common")), + "奖励节点 GP 件入账(钱包「奖励入账」收口——+%d)" % int(_db.adventure.feature_value("gp", "common"))) check(a13._node_bonus_pending.is_empty(), "节点停点态兑付后清零(恰一次语义同构)") var s10: Dictionary = a10.summary check(String(s10.get("result", "")) == "abandoned" and not bool(s10.get("cleared", true)), "放弃摘要:abandoned · 未打穿(已获大奖励不追回——同失败型结算)") -# ---- 双层 BD 机制件基建冒烟(迭代 12 T1——relic_table/档位激活引擎/机制件带池接线)---- +# ---- 双层 BD 规则改写型特性基建冒烟(迭代 12 T1——relic_table/档位激活引擎/规则改写型特性带池接线)---- func _smoke_relics() -> void: - print("--- 机制件基建(relic_table · 档位激活引擎 · 机制件带接线)---") + print("--- 规则改写型特性基建(relic_table · 档位激活引擎 · 规则改写型特性带接线)---") # ① 现行表牌库构成:七流派 27 件全量入池——98 数值令牌+27 relic 令牌(批次一铺量完成) check(_db.relics != null and (_db.relics.rows as Array).size() == 27, "relic_table 已加载(七流派 27 件全量——批次一 T2-T6 铺量完成)") var a_r0 = load("res://core/adventure_runner.gd").new(_db, _fresh_rng(71)) - check(a_r0.start_adventure(71, {"first_script": true}), "机制件带场景:冒险启动(seed 71)") + check(a_r0.start_adventure(71, {"first_script": true}), "规则改写型特性带场景:冒险启动(seed 71)") var relic_tokens := 0 var rarest_tokens := 0 for t in a_r0._bonus_deck: @@ -618,7 +618,7 @@ func _smoke_relics() -> void: if String((t as Dictionary).get("tier", "")) == "rarest": rarest_tokens += 1 check(relic_tokens == 27 and rarest_tokens == 6 and a_r0._bonus_deck.size() == 125, - "机制件带入池:27 件(rare 档 21 + rarest 锚点 6)——牌库 98+27=125") + "规则改写型特性带入池:27 件(rare 档 21 + rarest 锚点 6)——牌库 98+27=125") check(_db.relics.validate().is_empty(), "relic_table.validate 零违例(有行流派扫雷端铁律——magic first_dig_spell 在案)") # ② 档位激活引擎(纯函数直测——构造表 4 件 magic + 1 件 flag + 1 件 rarest 锚点) var rt := RelicTable.new() @@ -640,17 +640,17 @@ func _smoke_relics() -> void: var hooks := RelicsEngine.hooks_for(["m1", "f1"], rt) check(hooks.size() == 2 and String(hooks[0].get("hook", "")) == "hero_attack_rider", "挂点投影:表序稳定(同集合→同投影)") - # ③ 机制件带接线(临时表注入——relic 令牌入牌库/兑付入持有集/踢池/断点往返;测试尾还原现行表) + # ③ 规则改写型特性带接线(临时表注入——relic 令牌入牌库/兑付入持有集/踢池/断点往返;测试尾还原现行表) var live_rows: RelicTable = _db.relics _db.relics = rt var a_r = load("res://core/adventure_runner.gd").new(_db, _fresh_rng(72)) - check(a_r.start_adventure(72, {"first_script": true}), "机制件带场景:冒险启动(seed 72——注入 5 行临时表)") + check(a_r.start_adventure(72, {"first_script": true}), "规则改写型特性带场景:冒险启动(seed 72——注入 5 行临时表)") var deck_relic := 0 for t in a_r._bonus_deck: if String((t as Dictionary).get("kind", "")) == "relic": deck_relic += 1 check(deck_relic == 5 and a_r._bonus_deck.size() == 103, - "机制件带入池:5 行 relic 每件 1 张(common/rare→稀有档 rarest→罕见档)——牌库 98+5=103") + "规则改写型特性带入池:5 行 relic 每件 1 张(common/rare→稀有档 rarest→罕见档)——牌库 98+5=103") var relic_seen: Dictionary = {} for i in 60: for t in a_r._draw_bonus_candidates(): @@ -728,13 +728,13 @@ func _smoke_relics() -> void: "深挖钻头=开掘 +1 AP/每 4 格深层产出(R4 甲非信息税对价)· 蓄力三件=层值 1/减伤 1/层/满层 ×2") check(orch.action_economy.relic_ap_carry and orch.action_economy.relic_dig_extra == 1, "蓄力/钻头 action_economy 注入(ap_carry 改写停手转存 + 付费开掘对价注入——关着 false/0 零扰动)") - # ⑦c 流派件持有呈现段(2026-10-04 用户反馈补齐——C 区「流派件」节:聚合行+成型档位;空态隐藏) + # ⑦c 特性持有呈现段(2026-10-04 用户反馈补齐——C 区「特性」节:聚合行+成型档位;空态隐藏) var panel = load("res://presentation/views/hero_info_panel_view.gd").new() panel.set_relic_holdings([]) - check(not panel._relic_section.visible, "流派件段空态隐藏(视图空态纪律同本关强化段)") + check(not panel._relic_section.visible, "特性段空态隐藏(视图空态纪律同特性段)") panel.set_relic_holdings(["魔法 ×2 · 档一", "开格 ×1 · 散件"]) check(panel._relic_section.visible and panel._relic_list.get_child_count() == 2, - "流派件段持有呈现(聚合行+成型档位常驻可读——「局内奖励选了什么看不到」缺口承载)") + "特性段持有呈现(聚合行+成型档位常驻可读——「局内奖励选了什么看不到」缺口承载)") # ⑦b 深挖钻头付费开掘回归(2026-10-04 试玩缺陷修复——对价挂付费侧):AP=1 降级照常开格 # (用户实测「AP=1 无法开格只能标旗」的回归闸);AP=2 付全价积付费计数(深层产出配额取数面)。 var ae_dd = load("res://core/action_economy.gd").new(_db) @@ -3857,8 +3857,8 @@ func _smoke_shop_pool() -> void: var val0: int = int(a8.bonus.get(String(val_map[kind]), -999)) check(r8.buy_pool_item(kind), "购买受理(pool 口——%s|%s)" % [kind, tier]) check(int(r8.gp) == gp0 - int(buy_c.get("price", 0)), "钱包扣现价(%d → %d)" % [gp0, int(r8.gp)]) - check(int(a8.bonus.get(String(val_map[kind]), -999)) == val0 + int(_db.adventure.bonus_value(kind, tier)), - "加算区 +令牌档位件值(池件=奖励件本体——%s|%s %+d)" % [kind, tier, int(_db.adventure.bonus_value(kind, tier))]) + check(int(a8.bonus.get(String(val_map[kind]), -999)) == val0 + int(_db.adventure.feature_value(kind, tier)), + "加算区 +令牌档位件值(池件=奖励件本体——%s|%s %+d)" % [kind, tier, int(_db.adventure.feature_value(kind, tier))]) check(int(a8._bonus_taken.get(kind, 0)) == taken0 + 1, "共享池账本 -1(跨渠道单点——taken %d → %d)" % [taken0, int(a8._bonus_taken.get(kind, 0))]) # A 链:同visit 第二购现价 = ceil(base×b^(l2−1)×A^1)(货架已全重抽——新卡新价同公式) var second: Dictionary = {} @@ -3872,7 +3872,7 @@ func _smoke_shop_pool() -> void: check(int(second.get("price", -1)) == expect_p2, "A 链爬价 = ceil(base×b^(关序−1)×A^1)(进店第 2 购——%d)" % expect_p2) check(r8.buy_pool_item(String(second.get("kind_id", ""))), "同 visit 第二购受理(A 链软闸在价不在限)") - # ④ 切边零入店(白-box 重抽 40 次——GP 袋/机制件永不在架;重抽消费 shop_draw 签,场景尾不回写主时间线) + # ④ 切边零入店(白-box 重抽 40 次——GP 袋/规则改写型特性永不在架;重抽消费 shop_draw 签,场景尾不回写主时间线) var cut_seen := false for i in 40: r8._shop_draw_shelf() @@ -3923,7 +3923,7 @@ func _smoke_shop_pool() -> void: for k in ps.keys(): var quota := 0 for tier in _db.adventure.TIERS: - quota += int(_db.adventure.bonus_token_count(String(k), tier)) + quota += int(_db.adventure.feature_quota(String(k), tier)) if int(ps[k]) < 0 or int(ps[k]) > quota: ps_ok = false check(ps_ok, "终局池余量在域 [0,配额](%s)" % str(ps)) @@ -4514,7 +4514,7 @@ func _smoke_save() -> void: and int(bp.get("hero_hp", -1)) == 13, "断点七字段往返:关卡序号/节点位/生命") var bp_bonus: Dictionary = bp.get("bonus", {}) check(int(bp_bonus.get("atk", -1)) == 2 and int(bp_bonus.get("max_hp", -1)) == 5 - and int(bp_bonus.get("armor_class", -1)) == 1, "断点七字段往返:本关加成区") + and int(bp_bonus.get("armor_class", -1)) == 1, "断点七字段往返:属性加成区") check(int(bp.get("gp", -1)) == 17, "断点七字段往返:GP 钱包") var bp_shop: Dictionary = bp.get("shop_purchased", {}) check(int(bp_shop.get("hp_small", -1)) == 2 and int(bp_shop.get("atk_small", -1)) == 1, diff --git a/roadmap.md b/roadmap.md index 86845b9e..e5dd122f 100644 --- a/roadmap.md +++ b/roadmap.md @@ -50,17 +50,20 @@ | 迭代 6 | 战斗演出完善(原 M-4 迭代 7,2026-09-29 前移;2026-09-28 用户立项,收编历史登记「战斗表现批」——台账 106「真实立绘/动画密度终稿归战斗表现批」,前置 P0 样张已随 M-1 解除) | 迭代 5 出口(已解) | ①资产管线正式化:pixelfixer 网格段+封闭灰袋清除并入 `tools/pixelize_candidates.py`(--fixer)+九张 48px 站桩槽位档生成(8 敌种+主角 normal,底中锚/NEAREST)②敌种立绘落位:按 `ui_kit.gd` TEX_ENEMY_* 常量名入 `game/assets/art/character/`,字形「敌」回退退役,目检 ③主角 portrait 替换(新 normal 态)+attack/hit 两态素材入包(命名/路径随计划书定)④主角三态切换挂事件:攻击演出→attack 态/受击→hit 态/回 idle,槽位 2× 整数放大适配 ⑤命中特效密度终稿:命中瞬间打击特效(台账 106 动画密度欠账清偿)⑥受击白光/演出链复核:弹道→闪白→血条→灰化全链+flash_hit 强度时长 ⑦fx_probe 断言扩充+轻闸接线 ⑧用户实机目检清单(战斗演出专项,本迭代人闸);**2026-09-29 全流程审计追加四件(用户裁定归本迭代,台账 243)**:⑨终局面板「明细回看」z 序修复(main.gd:361 绕模态栈直开,回看层登记序在终局层下、被全屏遮罩压死——改走 _open_modal+ui_click_probe 补终局入口断言)⑩GP 冒险收束呈现(adventure_runner.gd:231 清零前,冒险终局面板补「本局 GP 入账」行,兑现 ui_assembler.gd:52 双展示位承诺)⑪主角受击反馈+死亡演出(敌→主角伤害弹道 main.gd:505 直接 return、无白光——补弹道+flash_hit,死亡补专属演出,与敌方演出密度对等)⑫flat_damage 变异格视觉标记(tex_mutation 槽恒空、数字照常显示——接变异纹理或角标,可归因)。**T0 注(2026-09-29 裁定)**:美术素材不入 git 维持,`game/assets/art/` 目录补 .gitignore(现行素材在盘不入库,缺位走字形回退;素材移交方式=用户放盘,打包发布方案随 Alpha 前另议);**2026-09-29 落地**:T0-T8 十轮全落(worktree m3-iter6-20260929,台账 247-255)——卡①-⑫全兑现+审计四件;重闸全绿(冒烟 576/0+五探针+doc 三闸/熵增零新增+素材机检 11/11+MC 对拍 400/400 逐位一致〔锚已重锚 HEAD,原迭代 5 锚过期〕);**出口人闸=T9 目检进行中**(检查单+代拍板追认五项=git 提交 8e74483(检查单已按生命周期条款退役),素材移交口径更新=八敌+主角三态已管线自产落盘用户无需放盘);**已完成(2026-09-29 用户 U2 目检过闸,台账 256)**——迭代 6 出口成立,迭代 7 门解 | | 迭代 7 | 魔法道具内容+元进度数值标定(原迭代 8+ 前两项编入) | 迭代 6 出口 | node-reward spec 随批出生+C 区道具槽接线+魔法道具内容(奖励节点空占位 node_overlay.gd:36 由本迭代兑现,营地工坊六件死解锁同批接局内效果);换算率复核/柜台定价标定;批末复跑 verifier 关键带(新力量源入局读数漂移属预期,破带才回调);**2026-09-29 落地**:T0-T8 八卡全落(worktree m3-iter7-20260929,台账 259-263)——八拍板点裁决落锁(①乙罗盘退役/②丙三选一/③甲解锁进投放池/④甲封存呈现/⑤甲两步交互/⑥甲三件 10/池 88/⑦⑧读数后裁与只测不判);重闸=冒烟 577/0+五探针+单测 12 套(含 aux 三新套件)+doc 三闸/熵增零新增+素材机检 11/11+MC 剥 additive 字段 0/400 逐位(门控空集=夹具态零投放零扰动);verifier 换算率复核读数出讫(生命 6→实测 1.7/攻击 9→4.1/护甲 1→0.0——U1 呈报待裁);**已完成(2026-09-29 用户 U2 目检过闸——七项目检过+追认五项全认+T5-hotfix 实机复验;台账 267)**——迭代 7 出口成立,迭代 8 门解 | | 迭代 8 | 冒险续玩断点+设置面+打磨包(2026-09-29 立项:用户裁「中断可续玩/退出即结算」两口径分离+审计 #5#6 随移;**同日二批:真人试玩反馈三件编入+排布与选型已追认**〔2026-09-29 用户拍板:雷当量甲·直伤当量抬升/胜利总结结算接线按既有拍板面/轮间节奏甲·演出层排播队列,三件全编本迭代——计划书 `.zcode/plans/m3-iter8-loop-plan-2026-09-29.md`〕) | 迭代 7 出口 | ①run 快照序列化:停点粒度断点(关卡序号/节点位/生命/本关加成区/GP 钱包/商店已购档/已抽模板),入 save.json 新域+schema 版本迁移;战斗中中断不存棋盘中局,续玩恢复至最近停点、当场战斗从头打 ②开始菜单「继续上局」按钮(存在断点才亮起;续玩与新冒险互斥确认)③中断/退出口径分离:中断=关游戏留断点可续;退出冒险=现行放弃流程(失败结算+清除断点)④最小设置面(音量/全屏/退出按钮/减动效开关从测试调整板转正+调试入口门控)⑤打磨包(RAP 与九徽章图例解码入 legend、封印旗纹理落位退役文字占位、放弃按钮文案收敛至 level-map 4 字上限、判定文案两处措辞统一)⑥**战斗胜利总结结算接线**(冒险模式普通战斗胜利挂 BattleEndOverlay 胜利形态:金蜡封+GP 增量+总量+判定行+「下一节点」——battle.md OQ14 已拍板面接线,Boss/失败分支不动;06「战斗胜利总结结算接线」条目)⑦**轮间结算节奏化**(演出层排播队列:结算行按段分组阶梯延迟进明细带+轮切换「第 N 轮」横幅驻留——核心层零 await 契约与 MC 对拍不破、减动效开=延迟归零横幅静态化,与卡④减动效开关联动;06「轮间结算节奏化」条目)⑧**雷格负向当量抬升**(直伤三行 power 抬档投值+挖掘风险不等式对账复跑+通关率双窗复测;前置=普通 L2 缺口数字批点丙追认;06「雷格负向当量抬升」条目)⑨冒烟/探针断言:断点写读往返、续玩幂等、退出清断点、无断点时按钮隐藏+卡⑥结算框呈现断言+卡⑦节奏断言(减动效双态)⑩实机目检人闸(中断重开续玩全流程+战后结算框+轮间节奏);**2026-09-29 落地(T0-T10 全落,worktree m3-iter8-20260929 六批次,台账 274-277+280,合并 77cc727)**:断点域 save v2(七字段+附随件,续玩确定性 400 局对拍零扰动)+继续上局/互斥确认/退出口径分离+最小设置面(减动效转正/DS_DEBUG 门控)+打磨包三件一降级(旗纹理缺盘 06 债务)+战斗胜利总结结算框+轮间排播队列与轮横幅(核心层零 await 零触碰,pacing_queue_test 第 15 套)+雷当量 4/5/5 provisional(MC 完美档读数逐位不动=只打踩雷轴反证;**普通 L2 7.9% 缺口加深四选一待裁**)+人闸三件交付=git 提交 d70f6c3(检查单已按生命周期条款退役);**已完成(2026-09-29 用户三轮目检过闸,台账 287)**——迭代 8 出口成立,迭代 9 门解(T7 数值四选一用户裁决挂起自行探讨,表值维持 4/5/5) | -| 迭代 9 | **视觉规格落码 + Alpha 验收**(2026-09-29 用户验收样张新 v3.5 并立项插入:美术圣经 v3.0 中修+方向稿收敛后的落码批为 Alpha 验收前置——验收对象应是视觉完整版本;任务书=`design/research/任务书-美术圣经v3.5冻结与落码-2026-09-29.md`;**2026-09-30 用户扩编**:呈现欠账四件+样张闸同窗件全编入〔06 在册欠账清偿,台账 288〕) | 迭代 8 出口 | **前置卡组·视觉落码**(任务书批 A+批 B):⓪批 A 机检冻结(断言定值+产物转正+圣经 v3.1 记录,人闸已由 2026-09-29 方向稿验收豁免)①棋盘渲染落码(E 格高墙 30%/连接无边框/地板归一 L0.10)②数字承载切换(亮墨三档直画+色牌后备)③ui_kit 对比度修复(现行 4 处不达标+字号 16/14)④B 区舞台(暗背景+地台落影+顶光柱)⑤整屏样张闸首跑(四屏断言;**随闸三裁决**=1920 档缩放策略对照/动画帧数规格/资产升档与否〔06「美术资产规格两项」「资产升档重产批」两欠账随闸呈,裁升档→主角三态+八敌种重产转加卡〕)⑥探针与冒烟重闸;**扩编卡组·呈现欠账**(2026-09-30 用户拍板第一/二档全编):⑪关卡画面 GP 常驻徽章接线(level-map spec 顶栏徽章,纯呈现欠账——06「GP/钥石迁出展示面接线」剩余面)⑫C 区「本关强化列表」数据接线(壳已落,set_level_bonuses→runner 加算区投影)⑬封印旗纹理自产+tex_flag 接线(迭代 8 卡⑤降级债务清偿,程序槽位零改码)⑭营地界面视觉终稿(解锁界面剩余面,前置=本迭代样张闸过审)⑮分辨率档位与格边长落码+HUD 框架「两档定值 36/45px」条款修订(1280×800/1920×1080 已定案)⑯art-bible §8.2 缩放纪律分级修订落文(甲文本/乙角色两类,圣经 v3.0 落籍窗口已开)⑰B 档视口截图像素断言试点+C 档黄金图基准建立(测试分级批同窗件,C 档后置于⑤冻结);**Alpha 验收(原卡组不变)**:⑦draw calls 真机测量(270→<200)⑧真人目检清单总清 ⑨07-体验验证清单总对账 ⑩真人通关率标定(真人 k 补跑并入)。**代排待追认**:卡数超 8 卡上限,计划书按「视觉落码段(⓪-⑥+⑪-⑰)→ Alpha 验收段(⑦-⑩)」两段组织、一次合并,段排布随计划书 U0 追认;呈现/文档卡全不扰卡⑩真人读数(数值/内容面不编入本迭代,归 M-4)。**⚠ 2026-10-01 用户否决迭代 9 标完成(数值轴)**:真人实证推翻模拟尺(旧普通档=新手画像弱真人 20 倍/完美档非元游戏上界)——数值修复批落籍(数字可读甲案+模拟档位重构+数值三刀,报告 design/qa/numfix-newruler-readings-2026-10-01.md)后**迭代 9 维持未过闸,卡用户实机验收新数值+新带值拍板**;全旧带读数作废待新尺重锚;**✅ 完成(2026-10-03 出口闸过,台账 315)**:9B Alpha 验收段收口——T17 36 项全判(13✅/35 两处修复/32 环境限制)+T16 修复批 11 件全落(硬锁 v3.1/演播后排窗/出度≤2/掉落渠道退役等)+T19 真人批佐证级收口(有效局 2 用户裁+k=0.60 落 >0.5 带内)+带值四带甲案落正主(A[0,10]/B[50,85]/C[30,60] 预立/D 响应曲线 ≤15pp·S 形,旧三带作废)+81000 锚(非数值验证——k 源+出度重建位移存档)+06 draw calls 销号(504→196)+stage.txt 换代;批末闸=冒烟 636/0+run_all 15 套+探针 4/5 绿(click_probe 已知红挂 06 专项)。**出口检查单=design/qa/m3-iter9-exit-checklist-2026-10-03.md**——**迭代 9 出口成立、M-3 关闭、Alpha 到手、M-4 门解** | +| 迭代 9 | **视觉规格落码 + Alpha 验收**(2026-09-29 用户验收样张新 v3.5 并立项插入:美术圣经 v3.0 中修+方向稿收敛后的落码批为 Alpha 验收前置——验收对象应是视觉完整版本;任务书已退役(git 710f9b7 出口批);**2026-09-30 用户扩编**:呈现欠账四件+样张闸同窗件全编入〔06 在册欠账清偿,台账 288〕) | 迭代 8 出口 | **前置卡组·视觉落码**(任务书批 A+批 B):⓪批 A 机检冻结(断言定值+产物转正+圣经 v3.1 记录,人闸已由 2026-09-29 方向稿验收豁免)①棋盘渲染落码(E 格高墙 30%/连接无边框/地板归一 L0.10)②数字承载切换(亮墨三档直画+色牌后备)③ui_kit 对比度修复(现行 4 处不达标+字号 16/14)④B 区舞台(暗背景+地台落影+顶光柱)⑤整屏样张闸首跑(四屏断言;**随闸三裁决**=1920 档缩放策略对照/动画帧数规格/资产升档与否〔06「美术资产规格两项」「资产升档重产批」两欠账随闸呈,裁升档→主角三态+八敌种重产转加卡〕)⑥探针与冒烟重闸;**扩编卡组·呈现欠账**(2026-09-30 用户拍板第一/二档全编):⑪关卡画面 GP 常驻徽章接线(level-map spec 顶栏徽章,纯呈现欠账——06「GP/钥石迁出展示面接线」剩余面)⑫C 区「本关强化列表」数据接线(壳已落,set_level_bonuses→runner 加算区投影)⑬封印旗纹理自产+tex_flag 接线(迭代 8 卡⑤降级债务清偿,程序槽位零改码)⑭营地界面视觉终稿(解锁界面剩余面,前置=本迭代样张闸过审)⑮分辨率档位与格边长落码+HUD 框架「两档定值 36/45px」条款修订(1280×800/1920×1080 已定案)⑯art-bible §8.2 缩放纪律分级修订落文(甲文本/乙角色两类,圣经 v3.0 落籍窗口已开)⑰B 档视口截图像素断言试点+C 档黄金图基准建立(测试分级批同窗件,C 档后置于⑤冻结);**Alpha 验收(原卡组不变)**:⑦draw calls 真机测量(270→<200)⑧真人目检清单总清 ⑨07-体验验证清单总对账 ⑩真人通关率标定(真人 k 补跑并入)。**代排待追认**:卡数超 8 卡上限,计划书按「视觉落码段(⓪-⑥+⑪-⑰)→ Alpha 验收段(⑦-⑩)」两段组织、一次合并,段排布随计划书 U0 追认;呈现/文档卡全不扰卡⑩真人读数(数值/内容面不编入本迭代,归 M-4)。**⚠ 2026-10-01 用户否决迭代 9 标完成(数值轴)**:真人实证推翻模拟尺(旧普通档=新手画像弱真人 20 倍/完美档非元游戏上界)——数值修复批落籍(数字可读甲案+模拟档位重构+数值三刀,报告 design/qa/numfix-newruler-readings-2026-10-01.md)后**迭代 9 维持未过闸,卡用户实机验收新数值+新带值拍板**;全旧带读数作废待新尺重锚;**✅ 完成(2026-10-03 出口闸过,台账 315)**:9B Alpha 验收段收口——T17 36 项全判(13✅/35 两处修复/32 环境限制)+T16 修复批 11 件全落(硬锁 v3.1/演播后排窗/出度≤2/掉落渠道退役等)+T19 真人批佐证级收口(有效局 2 用户裁+k=0.60 落 >0.5 带内)+带值四带甲案落正主(A[0,10]/B[50,85]/C[30,60] 预立/D 响应曲线 ≤15pp·S 形,旧三带作废)+81000 锚(非数值验证——k 源+出度重建位移存档)+06 draw calls 销号(504→196)+stage.txt 换代;批末闸=冒烟 636/0+run_all 15 套+探针 4/5 绿(click_probe 已知红挂 06 专项)。**出口检查单=design/qa/m3-iter9-exit-checklist-2026-10-03.md**——**迭代 9 出口成立、M-3 关闭、Alpha 到手、M-4 门解** | | 迭代 10 | **奖励结构重构——通关三选一 + 钥石掉落挪转 + 精英怪立项预留 + 通关部分回血**(2026-09-30 用户拍板案丙+P-A~P-E,计划书=`.zcode/plans/m3-iter10-loop-plan-2026-09-30.md`;**2026-10-01 用户提前开工拍板**:不合入 master、渲染层验证冻结——T0 开工门改规随批追认) | 迭代 9 出口(**改规注记**:Alpha 验收未过闸,用户拍板提前并行开工——并行安全性由「不合入」保证,master 读数面零污染) | **T0-T10+追加批全落**(worktree m3-iter10-20261001,10 提交 34dd8de→7f5caa3):①大奖励三件套退役改三层框架——部分回血 20%(clear_heal_pct)+提升三选一(池六种加权洗牌 E-S 不放回/reward_pick 扩签/属性件上限 3·AP 件上限 2 达上限剔牌库/选择停点零自动推进可中断)②加算区四轴+行动点(AP 件每战首轮 +1,排队通道兑现;行动经济.md 失同步清偿 AP 6→8)③钥石退役出大奖励改 Boss/精英逐杀掉落(boss_keystone 重锚首杀 3/复杀 2/2/3——a 裁备选;末关照常入账;收束无二次派生)④同调位过渡承载(transitional_sync_slots=1;三选一面替换子交互两路/战斗内沉没;正主归同调实施批)⑤**奖励节点共享池**(追加批用户拍板——与通关三选一同池同权重同上限,node-reward.md v2.1 掷定前置卡片直显具体道具)⑥断点 save v3(奖励选择态+件计数+aux_detail;v1/v2→v3 semver 兼容断言——g 裁)⑦BonusPickOverlay 共用面+目检修复批(候选一致降级为现状注记);**裁决面**:七项代拍板全裁(a 用备选/b-f 认同/g semver)+e 白话追认;**实机目检一轮**:1/3/4/5/6/9/14 PASS(8 项根因=减动效开关遗留已翻回;2/12 延后同调批;逐行结算演出定性迭代 8 事项不追);**合并 master 数值修复批**(bc737fb 解 2 冲突——autoplay 注释双留/smoke_all 取新断言+模拟档购血容差窗)后冒烟 628/0+run_all 15 套+五探针+三闸零新增(死链 4=存量;master 新引 1 条环境死链已修)+熵增 PASS;**MC 四代锚** 77000/78000/79000/80000 各 400 局(普通 L1 41.8%/L2 10.2% 带内、完美 L1 86.5%/L2 15.6%、钥石 1.38/3.01——报告 design/qa/m3-iter10-clear-rate-readings-2026-10-01.md);**人工参与项入 07 清单⑩**;**已完成(2026-10-01 开发闭合)**——迭代 11 门解(M-3 内顺延),Alpha 总闸仍卡迭代 9 数值实机验收 | ### M-4 Alpha 后深化与内容扩展(Release 4,**现行里程碑**(2026-10-03 M-3 关闭升现行);2026-09-29 起内容闭环迭代(战斗演出/魔法道具/元进度标定)上移 M-3,本里程碑=Alpha 验收通过后的深化批) | # | 迭代 | 门(进入条件) | 更改任务 | |---|---|---|---| -| 迭代 11+ | **✅ 三批已落籍(2026-10-03,台账 323-325)**:①魔法道具同调实施批 bc17b66(冒烟 645/0→671/0 基线演进)→ ②GP 商店房重构批 395b2ab(共享池账本+抽 3 买 1 全重抽+A=1.8/b=1.1 provisional+MC off 对拍逐位 PASS+on 新锚 N=60)→ ④视野迷雾实施批 e6260a5(菱形灯光区 R8+区外全黑+暗淡记忆态+探针 case⑮;纯呈现 MC 零跑)——各批合并后主区全量冒烟复跑全绿;**迭代 11 门=待出口人闸关闭(人闸材料包=design/qa/m4-iter11-exit-package-2026-10-03.md:三批检查单+追认清单 18 项+迷雾目检指引+读数报告)**。原登记:**2026-10-03 用户裁迭代 11 范围(三批,推荐序)**:①魔法道具同调实施批 → ②GP 商店房重构批 → ④视野迷雾实施批(各批独立出口闸;同调批先行——商店批共享池账本与通关率复测建在 aux 卡退役后的终局池上,读数只锚一次;迷雾批纯呈现不扰读数,序位可穿插);**反制批移迭代 12**(前置=双层 BD 外部调研+仲裁后重新立项;2026-10-03 用户终裁=同调位反制道具层级错配失败设计废弃,「每变异≥1反制道具」契约作废——地形变异.md v0.6/魔法道具.md v0.8 同批落文(06 条目已收口移除));**Beta 方向立项撤出本窗口**(待 Alpha 内容填充+试玩轮次后再议);关卡内容扩展留讨论位(世界观设定待用户补正主——摩索不达城 repo 无载)。↓ 原登记:反制批 Alpha · **魔法道具同调实施批**(任务书 v1.1 全裁 P1-P8=`design/research/任务书-魔法道具同调实施批-2026-10-02.md`,2026-10-02 用户裁 P7 乙归本窗口,发令即开工——任务书含 T0-T10 可升 loop 计划书)· **GP 商店房重构批**(2026-10-02 用户裁三选一同构化:买一全重抽/重抽绑购买/价格=基价×b^(关序−1)×A^(进店已购次数)〔系数归 game-balancer 研究〕,取代 09-20 无刷新裁决——06「GP 商店房重构」条在册待立项)· 关卡内容扩展 · Beta 方向立项(原迭代 10+ 三主题顺延——迭代 10 位已由奖励结构重构批占用,2026-09-30 用户拍板 P-E;各批顺序按 Alpha 读数定;含营地 2D 画面议题——2026-09-29 裁缓至此再议) | M-3 出口闸(**已解**——2026-10-03 迭代 9 出口闸收官:M-3 关闭、Alpha 到手) | 立项时按「迭代粒度界定」拆任务卡 | -| 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书=`design/research/任务书-双层BD实施批-2026-10-03.md`(已定稿)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) | +| 迭代 11+ | **✅ 三批已落籍(2026-10-03,台账 323-325)**:①魔法道具同调实施批 bc17b66(冒烟 645/0→671/0 基线演进)→ ②GP 商店房重构批 395b2ab(共享池账本+抽 3 买 1 全重抽+A=1.8/b=1.1 provisional+MC off 对拍逐位 PASS+on 新锚 N=60)→ ④视野迷雾实施批 e6260a5(菱形灯光区 R8+区外全黑+暗淡记忆态+探针 case⑮;纯呈现 MC 零跑)——各批合并后主区全量冒烟复跑全绿;**迭代 11 门=待出口人闸关闭(人闸材料包=design/qa/m4-iter11-exit-package-2026-10-03.md:三批检查单+追认清单 18 项+迷雾目检指引+读数报告)**。原登记:**2026-10-03 用户裁迭代 11 范围(三批,推荐序)**:①魔法道具同调实施批 → ②GP 商店房重构批 → ④视野迷雾实施批(各批独立出口闸;同调批先行——商店批共享池账本与通关率复测建在 aux 卡退役后的终局池上,读数只锚一次;迷雾批纯呈现不扰读数,序位可穿插);**反制批移迭代 12**(前置=双层 BD 外部调研+仲裁后重新立项;2026-10-03 用户终裁=同调位反制道具层级错配失败设计废弃,「每变异≥1反制道具」契约作废——地形变异.md v0.6/魔法道具.md v0.8 同批落文(06 条目已收口移除));**Beta 方向立项撤出本窗口**(待 Alpha 内容填充+试玩轮次后再议);关卡内容扩展留讨论位(世界观设定待用户补正主——摩索不达城 repo 无载)。↓ 原登记:反制批 Alpha · **魔法道具同调实施批**(任务书 v1.1 全裁 P1-P8(任务书已退役,落籍=①bc17b66),2026-10-02 用户裁 P7 乙归本窗口,发令即开工——任务书含 T0-T10 可升 loop 计划书)· **GP 商店房重构批**(2026-10-02 用户裁三选一同构化:买一全重抽/重抽绑购买/价格=基价×b^(关序−1)×A^(进店已购次数)〔系数归 game-balancer 研究〕,取代 09-20 无刷新裁决——06「GP 商店房重构」条在册待立项)· 关卡内容扩展 · Beta 方向立项(原迭代 10+ 三主题顺延——迭代 10 位已由奖励结构重构批占用,2026-09-30 用户拍板 P-E;各批顺序按 Alpha 读数定;含营地 2D 画面议题——2026-09-29 裁缓至此再议) | M-3 出口闸(**已解**——2026-10-03 迭代 9 出口闸收官:M-3 关闭、Alpha 到手) | 立项时按「迭代粒度界定」拆任务卡 | +| 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书已退役(落籍=e780063)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) | | 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) | -| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告=`design/research/方案-挖掘风险不等式修订-2026-10-04.md` §九),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**✅ 实施批落地(2026-10-05,worktree m4iter14-mineq-20261005 台账 354)**:T0-T5 全落——audit 工具常量刷新(改前静态锚与方案报告 §四 逐位吻合)+runsum 五字段(行侧判据考证=授予行专带 highlight,87行==87插旗1:1)+F1 条款3 重立三层口径(v0.8)+战斗结算 v0.25+难度联动表+6 行+registry clause3_inequality 重立条(改前锚+P7 修正注记)+06 破线条收口+**T4 标中兑付溢价机制**(settlement.flag_hit_premium=125 provisional,grant 单点只挂 flag_hit 正向·percent 幅度贯穿应用与呈现,标空/挖格不乘,DamageController 零改/同池冻结)+smoke 750/0(+3 断言;max 路径种子 42→43 重采);判读三件=β 带 u=1/2 带内 u=3 登记态/δ 敏感度行为无感(η 位移 <1.4pp<5pp,保留+登记)/条件二判式口径等号压线转绿(整数量级实现 u=1/2 绿·u=3 微欠 −1.1% 登记面);改后锚换代 runsum_m4iter14mineq_post_n200_20261005(perfect 冒险通关 65.3%→72.0% 增强向位移,四带判读归 M-4);出口报告=design/qa/m4iter14-mineq-exit-report-2026-10-05.md(provisional 追认单 8 项+07⑫ 人工项);damage_probe A1 红灯=改前既有非本批新增(在册)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书=`design/research/任务书-全局作用域变异首发批-2026-10-04.md`(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 |**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书=`design/research/任务书-全局作用域变异首发批-2026-10-04.md`(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 | -| 迭代 15 | **调试功能整合批(2026-10-05 用户令自「14.5」临时卡改编入册——原周期外 0.5 卡,落地事实与验证读数零变化,只改编号归属)**:主菜单三调试散件(随机种子输入框/角色数值调整板/两层调试入口)收一张调试浮窗 DebugOverlay——入口=开始覆盖层右下角「调试」角标(与主按钮组非平级,DS_DEBUG=1 环境变量门控沿用迭代 8 卡④口径);浮窗=悬浮菜单之上 Dialog(不隐藏开始层,同确认弹窗形态;旧 TunePanel「与开始层互斥」形态与类整体吸收退役含 .uid);可扩展滚动列表页四区块(随机种子/数值调整/批量模拟/两层调试入口——后续调试项往下追加滚轮下探)。四拍板全落(2026-10-04 用户裁)=P1 甲 DS_DEBUG 门控/P2 乙全摊平/P3 仅开始菜单可开·对局不可达(_show_debug_overlay 门禁护栏+对局发起随开随收)/P4 可扩展列表。**✅ 已全批落籍(2026-10-05,worktree iter145-debug-hub 两提交 48c0b34/46dadbb,主区 merge --no-ff d0a3c6b/10c301b,台账 352)**:闸=冒烟 747/0+探针 ui_tune/ui_click/ui 三绿(worktree+主区双跑,主区跑前 --import 重刷类名缓存在册坑);遗留=实机目检归用户(DS_DEBUG=1 启动→右下角角标→浮窗四区块→两层调试入口) | 迭代 14 出口(注:本卡先于迭代 14 出口落籍——编入时点迭代 14 ③已闭/①②④⑤在飞/⑥挂起,门列仅记编入时点状态,不构成追溯闸) | 单批已落地(原估 0.5d,实际一次会话);后续扩调试项=debug_overlay.gd _build() 列表区追加区块(P4 扩展口径) | +| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告 §九(已退役,git 1da9a41)),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**✅ 实施批落地(2026-10-05,worktree m4iter14-mineq-20261005 台账 354)**:T0-T5 全落——audit 工具常量刷新(改前静态锚与方案报告 §四 逐位吻合)+runsum 五字段(行侧判据考证=授予行专带 highlight,87行==87插旗1:1)+F1 条款3 重立三层口径(v0.8)+战斗结算 v0.25+难度联动表+6 行+registry clause3_inequality 重立条(改前锚+P7 修正注记)+06 破线条收口+**T4 标中兑付溢价机制**(settlement.flag_hit_premium=125 provisional,grant 单点只挂 flag_hit 正向·percent 幅度贯穿应用与呈现,标空/挖格不乘,DamageController 零改/同池冻结)+smoke 750/0(+3 断言;max 路径种子 42→43 重采);判读三件=β 带 u=1/2 带内 u=3 登记态/δ 敏感度行为无感(η 位移 <1.4pp<5pp,保留+登记)/条件二判式口径等号压线转绿(整数量级实现 u=1/2 绿·u=3 微欠 −1.1% 登记面);改后锚换代 runsum_m4iter14mineq_post_n200_20261005(perfect 冒险通关 65.3%→72.0% 增强向位移,四带判读归 M-4);出口报告=design/qa/m4iter14-mineq-exit-report-2026-10-05.md(provisional 追认单 8 项+07⑫ 人工项);damage_probe A1 红灯=改前既有非本批新增(在册)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 |**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 | +| 迭代 15 | **①调试功能整合批(2026-10-05 用户令自「14.5」临时卡改编入册——原周期外 0.5 卡,落地事实与验证读数零变化,只改编号归属)**:主菜单三调试散件(随机种子输入框/角色数值调整板/两层调试入口)收一张调试浮窗 DebugOverlay——入口=开始覆盖层右下角「调试」角标(与主按钮组非平级,DS_DEBUG=1 环境变量门控沿用迭代 8 卡④口径);浮窗=悬浮菜单之上 Dialog(不隐藏开始层,同确认弹窗形态;旧 TunePanel「与开始层互斥」形态与类整体吸收退役含 .uid);可扩展滚动列表页四区块(随机种子/数值调整/批量模拟/两层调试入口——后续调试项往下追加滚轮下探)。四拍板全落(2026-10-04 用户裁)=P1 甲 DS_DEBUG 门控/P2 乙全摊平/P3 仅开始菜单可开·对局不可达(_show_debug_overlay 门禁护栏+对局发起随开随收)/P4 可扩展列表。**✅ 已全批落籍(2026-10-05,worktree iter145-debug-hub 两提交 48c0b34/46dadbb,主区 merge --no-ff d0a3c6b/10c301b,台账 352)**:闸=冒烟 747/0+探针 ui_tune/ui_click/ui 三绿(worktree+主区双跑,主区跑前 --import 重刷类名缓存在册坑);遗留=实机目检归用户(DS_DEBUG=1 启动→右下角角标→浮窗四区块→两层调试入口) | 卡①门:迭代 14 出口(注:本卡先于迭代 14 出口落籍——编入时点迭代 14 ③已闭/①②④⑤在飞/⑥挂起,门列仅记编入时点状态,不构成追溯闸) | 单批已落地(原估 0.5d,实际一次会话);后续扩调试项=debug_overlay.gd _build() 列表区追加区块(P4 扩展口径) | +| 迭代 15 | **②奇物概念收口与词族对齐批(2026-10-05 用户令编入本迭代)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.7,7 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出专长;奖励节点/商店→属性值提升+资源、专长在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.7,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 卡②门:迭代 14 出口 | 卡①已落籍(原估 0.5d);卡②T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) | +| 迭代 15 | **③秘宝代码词族对齐批(2026-10-05 用户令编入本迭代)**:设计侧已完成(消歧更名批 `430419c`+`06e94b7`,26 个设计文档「魔法道具」→「**秘宝**」,同调位机制名保留不变),本批只做**代码侧对齐**、不做二次设计。内容:`aux_*`/`AuxItem*` 词族全族换词 **358 处 / 36 文件**(重灾 `adventure_runner.gd`79 / `level_runner.gd`27 / `bonus_interact_controller.gd`19 / `battle_orchestrator.gd`18 / `config_db.gd`14 / `main.gd`13),分五组落:**A 玩家可见文案(P0,5 处)**=`battle_narrator.gd:117-118` + `bonus_interact_controller.gd:76` + `hero_info_panel_view.gd:56`(槽位标题 `UiKit.label`)+ `:178`(tooltip)· B schema 与数据表(`aux_item_table.gd`/`aux_items.tres`/`aux_items.gd` 文件名+类名+`ConfigDB` 持有变量与访问器全链跟改,**须同步 Godot `.uid`/`.tscn` + `--import` 重刷类名缓存**——迭代 14.5 实证在册坑)· C 文档链接修复(含 `architecture.md` 两处既有断债顺带清偿)· D 中文注释层(**须分色**:`魔法矢`/`魔法反噬`/`魔法族`/`魔法护甲` 属敌方伤害护甲语汇🔴不动)· E 测试文件名+内部变量。**用户三项拍板**:全族彻底改(含数据表)· **断点存档键一律保留**(`bonus_aux_carry`/`aux_detail`/`aux_cleared`/`aux_cleared_last`/`aux_items` 断点数组/`attunement_charges` 共 34 处引用一字不改,破档即进度丢失)· registry 条目键 `aux_items` 不改(数据契约键)。设计事实源=`design/gdd/systems/排雷循环/秘宝.md` v0.9,任务书=`design/research/任务书-秘宝代码词族对齐批-2026-10-05.md`(T0-T9≈5.0d,**超软盒 3 日上限·知情预挂**:T7 段末闸后 L3 呈报切点不擅切;**三档降级面 G1/G2/G3 在册**〔G3 下限=仅组 A 完成〕;5 条设计契约含 5 条 🔴 停机级〔存档兼容零破坏/数值零漂移/schema 契约面零变更/零字段更名/核心层零 await〕;代拍板白名单 5 项;**C1/C2 已裁关闭·全改保一致·待裁点 0 项**)。**撞批已消解**:② 奇物批 2026-10-05 收口落库(合并 `c571af2`),并行风险解除,本批为迭代 15 唯一在途需求;**T0 须重取基线**(判式换代批 T5 读数 750/0、② 又动数据层,§1.2 的 747 为②前旧数禁沿用)并复核事实表。**✅ 裁决(用户 2026-10-05「全改保一致」)**:C1 `"aux_item"` 域串**照改**(实测连锁面收窄——`reward.tres` 已零 aux_item 数据行,池种随迭代 11 T7 退役;16 处字面量全在代码内闭合无存档依赖;唯一连锁项=`smoke_all.gd:3932` 断言须同步)· C2 `aux_items` 一名两义**拆分**(ConfigDB 持有变量+表注册键✅改 / 断点存档键+冒烟夹具🔴禁改——**「键名禁改」与「变量名禁改」是两回事**,禁改的只是落盘字面量)。新增**组 F**(分派语汇与域串 16 处),任务卡扩为 T0-T10≈5.5d。**开工门**:✅ 已无待裁点,可直接发 T0 | 卡③门:迭代 14 出口(**裁点已全决·可开工**) | 卡①已落籍(原估 0.5d);卡②已落籍(`c571af2`);**卡③可开工**(无待裁点;T0 取基线后回填估时) | + ## 执行纪律(2026-09-27 用户立规) 1. **一迭代一 loop**:所有更改任务(功能/文档/数值/素材接线)一律进本路线图的迭代,每迭代先立计划书再开工,一个迭代一次合并登记——**零散并行会话退场**(多会话并行 = 冲突源+介入成本;2026-09-27 起单迭代串行执行)。台账记「批」= 本文件记「迭代」,同物异名。 diff --git a/tools/clear_dominance_audit.py b/tools/clear_dominance_audit.py index f74a5a75..545de94d 100644 --- a/tools/clear_dominance_audit.py +++ b/tools/clear_dominance_audit.py @@ -28,7 +28,7 @@ V_mine 只保留现行矩阵加权口径(原口径乙升为主口径)。 - V_mine 换现行九型负向字典(enrage/off_guard/警觉/backlash/sapped/snare/recoil/ ap_drain/gp_lose——ap_drain 按 A6 flat 1、gp_lose 按 A5 代理 2 计)。 - - 新增 β 比值带判读与逐型净期望输出(方案-挖掘风险不等式修订-2026-10-04 §四/§九): + - 新增 β 比值带判读与逐型净期望输出(原方案报告 §四/§九,已退役 git 1da9a41): β(u)=V_mine/E_dig ∈ [1.2, 2.5];条件一 (1−ρ̂)E_dig−ρ̂V_mine ≥ 0(下限 0,上限归 β_hi); 条件二 E[标中兑付] ≥ (1+δ)·E_dig(δ=1.25 provisional,兑付溢价形态 a)。 """