Merge branch 'master' into board-material-fix

# Conflicts:
#	reports/需求卡片-棋盘瓦片与立体表现重做批-2026-11-07.md
This commit is contained in:
DKChan committed 2026-11-10 03:54:48 +08:00
commit d3018a5948
174 files changed
+2682 -970

No files matched your search

+1 -1
View File
@@ -24,7 +24,7 @@ MVP 不加新敌种,也不做同深度多敌种混搭;敌种扩容走 `enemy
## 棋盘
**尺寸按关配置**(板形随关卡行投值,不再固定两档;Boss 战的台阶靠换更大的板制造):现行第一关 10×10 / 12×12 两档、第二关全关 12×12、第三关 13×13(Boss 14×14)。具体尺寸面值与雷密度读 `data/tables/board_gen.tres`(以表为准)。密度全程一档,不做密度爬坡;可推理率目标全程恒定,目标值归[排雷玩法](systems/排雷循环/排雷玩法.md)口径。
**尺寸按关配置**(板形随关卡行投值,不再固定两档;Boss 战的台阶靠换更大的板制造):现行第一关 10×10 / 12×12 两档、第二关全关 12×12、第三关 13×13(Boss 14×14)。具体尺寸面值与雷密度读 `data/tables/board_gen.tres`(以表为准)。密度全程一档,不做密度爬坡。
地形变异现行六类型、两轴 × 三关已落地:荆棘丛/藤蔓缠绕(第一关)+ 岩浆/烬覆(第二关)+ 落石/矿尘(第三关),行值见 `data/tables/variation.tres`。
+1 -1
View File
@@ -196,7 +196,7 @@ Alpha 内以玩法循环本身的内容与表现为主(棋盘、关卡、战
| 素材升档重产 | 排 Beta;原始动机已由八敌逐键定档解决,剩余提灯候选随 Beta 资产批重议([待办清单](../../待办清单.md)) |
| 站桩帧动画 | 排 Beta(用户裁);三路线与「立绘→派生形态」管线前置依赖见 [待办清单](../../待办清单.md)「站桩帧动画」条 |
| 元进度件贴图终稿 | 排 Beta;元进度图标在 Alpha 保留占位,不碍在役判定([美术资产清单](../art/art-assets-checklist.md))——营地场景图已列入 Alpha(见「三 · 界面」表) |
| 冒险前资源配比预设(构筑提案) | 排 Beta(用户裁 2026-11-05);Alpha 不排期,设计闭合凭据与重启条件见 [待办清单](../../待办清单.md)「冒险前资源配比预设(构筑提案)」条 |
| 冒险前资源配比预设(构筑提案) | 不做(用户裁 2026-11-09);原案留底见 [冒险前资源配比预设退役素材库](../content-archive/冒险前资源配比预设退役素材库.md) |
---
@@ -1,7 +1,7 @@
# 难度曲线与Boss
> 一句话:难度曲线、期望值带与 Boss 设计
> 状态:已定稿;现行为 v1.6
> 状态:已定稿;现行为 v1.8
## 设计目的
@@ -28,7 +28,7 @@
| 不负责 | 归谁 |
|---|---|
| 生成算法与可推理率度量 | [棋盘生成](../排雷循环/棋盘生成.md)(本文只投参数行值,禁反向调用生成) |
| 生成算法 | [棋盘生成](../排雷循环/棋盘生成.md)(本文只投参数行值,禁反向调用生成) |
| 结算规则、伤害合成与护甲克制矩阵本体 | [战斗结算](../战斗循环/战斗结算.md)(本文只投矩阵数值) |
| 敌种机制、技能池语义与表结构 | [敌人系统](../战斗循环/敌人系统.md)(本文只投行值) |
| 奖励机制、库存与注入机制 | [地图战斗资源](../战斗循环/地图战斗资源.md)(本文只投权重、威力、注入参数) |
@@ -187,7 +187,7 @@ boss_hp ≈ round( Σ普通战斗敌方生命期望 × r_boss ) r_boss
Σ 的逐数闭合口径:数量走开战掷骰的区间期望(区间中点),教学位同样掷骰、按区间期望计入;各坐标行值一律读敌人表,本文不重复登记具体数值——防与配置双写失同步。
Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板参数仍受[棋盘生成](../排雷循环/棋盘生成.md)的可推理率绝对锚约束——加难不许加到不可推理。Boss 战胜利即关卡完成,编排归[冒险结构](冒险结构.md);登场仪式感归[战斗表现](../战斗循环/战斗表现.md)。
Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表)。Boss 战胜利即关卡完成,编排归[冒险结构](冒险结构.md);登场仪式感归[战斗表现](../战斗循环/战斗表现.md)。
### 护甲克制:本文锁行值,矩阵本体归战斗结算
@@ -203,14 +203,14 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
|---|---|---|
| 敌方生命 ↔ 奖励供给 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 单边移动必须走关级恒等式的联合检算 |
| 数量区间 ↔ 棋盘密度与惩罚上限 | [棋盘生成](../排雷循环/棋盘生成.md)、[战斗结算](../战斗循环/战斗结算.md) | 成群行上线前强制复算挖掘风险不等式 |
| 密度 ↔ 可推理率 ↔ 生成尝试上限 | [棋盘生成](../排雷循环/棋盘生成.md) | 三元组联动;禁止为难度牺牲可推理率绝对锚 |
| 密度 ↔ 板形 | [棋盘生成](../排雷循环/棋盘生成.md) | 板形与密度行值联动;尺寸与密度域校验归对方参数表 |
| 每轮行动点 ↔ 停手转存规模 | [行动经济](../排雷循环/行动经济.md) | 联动评估记录归本文,调参所有权在行动经济 |
| 削弱强度 ↔ 当量锚 | [增益状态](../战斗循环/增益状态.md)、[战斗结算](../战斗循环/战斗结算.md) | 联动值禁独立调参,修订须重跑锚对照 |
| 护甲类型 ↔ 克制矩阵 | [战斗结算](../战斗循环/战斗结算.md) | 敌种护甲变更须复算击杀区间 |
| 护甲等级 ↔ 攻击基线 ↔ 区间带宽 | [战斗结算](../战斗循环/战斗结算.md) | 敌种与主角的护甲等级行值变更须复算生存链区间(掷点带宽随折扣档位与攻击基线同向放大);掷点形式与档位已定稿(d20 三档——档位读 `settlement.tres`;nat20 暴击形式留档,倍率同表),护甲等级行值变更仍须复算生存链区间——现行行值读 `hero.tres` / `enemy.tres` 的 armor_class 列(均暂定),敌方正式行值随怪物设定批投值、与加难杠杆扫描合并调 |
| GP 供给 ↔ 商品定价 | [冒险结构](冒险结构.md)、[关卡节点地图](关卡节点地图.md) | 供给 × 定价 = 入关属性参数,单边移动须复算分层关卡完成率带(商店与 GP 经济杠杆节)——动供给必复算分层带,禁独立调参 |
| 封印溢价系数 δ ↔ 完美乘数 p_perfect ↔ ap_per_round | [战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md) | 封印激励三件套同窗检算(防封印 rush 复发:δ 与 ×2 叠加通胀、AP 吞吐上限)——任一变动须重跑双画像封印率读数 |
| η 读数 ↔ 模拟画像定义 ↔ 可推理率 ι ↔ min_safe_count/生成尝试上限 | sim 档位、[棋盘生成](../排雷循环/棋盘生成.md) | η 是画像条件量:画像重构即锚漂移,重锚顺带;可推理率三元组联动 |
| η 读数 ↔ 模拟画像定义 | sim 档位 | η 是画像条件量:画像重构即锚漂移,重锚顺带 |
| β 带端点 β_lo/β_hi ↔ D_ref ↔ hero max_hp ↔ AC 折算档(5pp 系数) | [战斗结算](../战斗循环/战斗结算.md) | 带是 D_ref 的函数:换锚(D_ref/max_hp)须全带重推;AC 档值变更改 5pp 系数,同罪 |
| 直伤雷三行(6/8/8) ↔ 正向同轴行(heal_minor/pierce_strike/magic_bolt) | [地图战斗资源](../战斗循环/地图战斗资源.md) | **同轴镜像比入对账面**:负向/正向比超出 β 带内推导区间即越带;单边动负向三行今后必须带正向镜像行联合检算 |
| clear_blast 区间(24/40/32) ↔ p_perfect | [地图战斗资源](../战斗循环/地图战斗资源.md) | 完美封印第二份的补贴基数进封印激励对账;单边动清图奖励 = 变相动封印 |
@@ -282,13 +282,14 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
群伤负向 = 警觉(敌方护甲等级 +1);一轮踩雷数由行动点预算天然封顶。攻击浮动开战时掷定一次、整战持久;数量区间同流掷定,教学位与首遇位都不豁免——没有区间上界的行自然取定值,那不是豁免,是区间宽度为零。
技能池投值(池权重/冷却/保底/触发条件的所有权本文,机制归[敌人系统](../战斗循环/敌人系统.md);行值读 `skills.tres` 与 `enemy.tres` 的 pool,全部 provisional):
技能池投值(池权重/冷却/保底/特殊间隔/触发条件的所有权本文,机制归[敌人系统](../战斗循环/敌人系统.md);行值读 `skills.tres` 与 `enemy.tres` 的 pool,全部 provisional):
| 参数 | 说明 |
|---|---|
| 池权重 | 权重即旋钮:抬特殊技权重 = 抬输出频率,EV 随之重锚;各敌种行集读表 |
| 技能冷却(拍) | 逐技能行读表;普攻冷却恒 0 不可配(空池不可能的结构前提——域校验锁死);撕咬 = 与突刺同倍率错开冷却轴的高频小爆发轮廓;毒爆 = 蛛化卓尔精灵专属池独占技 |
| 保底 M | 全局单旋钮,读技能表 pity_threshold;连续 M 拍执行普攻 → 下拍必出特殊技;单特殊技低权重池受保底支配 |
| 特殊间隔 K | 全局单旋钮,读技能表 special_interval;任一特殊技兑现后该敌连续 K 拍只能执行普通攻击(闸期内特殊技不进可摇与保底集合,保底顺延),0=关闭;与保底 M 同读一表、合闸期口径见敌人系统「三道闸」表 |
| 触发条件 | 情境技与闩型解锁的 fact 阈值读技能表 trigger 行值(词表与机制归敌人系统「触发条件」节);情境技的池内份额照走池权重行。**已投放两示范(provisional)**:地精池孤注守势(self_hp_pct lte 35,纯增益技)+ L2/L3 群行位趁隙偷袭(last_round_end eq 停手,伤害技)——fact 阈值、权重、倍率与冷却逐行读表,本表零复制;地精池投放稀释含闸长期速率,EV 抽样锚已换代(带宽注记随 `enemy.tres` 表注) |
| 池 EV 锚 | 静态份额与含闸长期速率实测读数登记于调参日志(EV 重锚与权重投值随本表修订)。节奏实测判读口径:种子数下限 50 判读;20 种子以下批次有种子偏置假象;过旱按用户判读带集中在短命杂鱼(生存时长问题非池配置——见待办清单 Alpha 条目移交注记) |
@@ -297,7 +298,7 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
| 表 | 字面 |
|---|---|
| 主角表 | 生命上限 / 基础攻击 / 护甲等级(armor_class) |
| 棋盘参数 | 板形 / 雷密度 / 可推理率目标 / 生成尝试上限(按关卡 × 节点深度坐标行存放;奖励点/恢复点不开战斗无板行) |
| 棋盘参数 | 板形 / 雷密度(按关卡 × 节点深度坐标行存放;奖励点/恢复点不开战斗无板行) |
战斗侧与奖励侧的关键投值(机制归对方、数值所有权本文;行值读 `settlement.tres` / `reward.tres` / `status_effects.tres`,全部 provisional——本文只登记口径与取值域):
@@ -1,7 +1,7 @@
# 增益状态
> 一句话:增益/减益的状态池、叠层与衰减
> 状态:已定稿;现行为 v1.7
> 状态:已定稿;现行为 v1.8
## 设计目的
@@ -159,7 +159,7 @@
| 字段 | 取值 | 说明 |
|---|---|---|
| effect_id | 文本,全表唯一 | 状态标识 |
| display_name | 文本 | 界面与结算明细用名 |
| display_key | 文案 key | 界面与结算明细用名的索引,文案值住 strings.csv(code-conventions §2.5) |
| target_side | hero / enemy | 作用侧 |
| magnitude | 整数 | 幅度:百分比行 ∈ [−100,100] 且非 0;固定值行 ≥ 1;护甲等级行 ∈ [−20,20] 且非 0 |
| unit | percent / flat / ac | 百分比修正 / 固定值 / 护甲等级(掷点折扣判定阈值轴) |
@@ -1,7 +1,7 @@
# 战斗结算
> 一句话:轮末结算的编排与逐行兑现
> 状态:已定稿;现行为 v2.0
> 状态:已定稿;现行为 v2.1
## 设计目的
@@ -84,7 +84,7 @@
| 判定行 | 胜 / 负 / 继续各一行;终局判定行同时是胜负画面的数据锚 |
| 高光行 | 完美封印成立时一行,只记实际有效兑付 |
每行还携带公共字段:来源类别、来源格、轮次、显示名、数值,以及可空的高光标记(用于强调封印标中、清图奖励这类值得高亮的结果)。**显示名等玩家可见文案是数据面字段:文案值登记在数据表行,代码按来源类别与效果身份读表拼行,不在代码里写死文案字串**(2026-11-06 用户裁——文案归属数据表承载;承载表与字段形态归表结构设计段定,设计闭合后由实装批落表)。奖励直伤行的数值字段沿用 `effectiveness` 键名、值为整数点数——键名与量纲是数据导出与分析工具的兼容契约,改动须连动分析工具面。没生效也要留痕:奖励未生效行如实记录四类合法例外(reason 键封闭:full_layers/full_hp/no_enemy_alive/hero_down),呈现面按 reason 归因(聚合计数呈现已随明细带退役)。**日志落盘零文案:text 与 display_name 不落盘**,玩家可见文案仅呈现面消费。
每行还携带公共字段:来源类别、来源格、轮次、显示名、数值,以及可空的高光标记(用于强调封印标中、清图奖励这类值得高亮的结果)。**显示名等玩家可见文案是数据面字段:数据表行只登记文案 key,文案值登记在 strings.csv(data/l10n/),代码按 key 从翻译文件取文案拼行,不在代码里写死文案字串**(2026-11-09 用户裁——文案值归 strings.csv 承载;承载细则与字段形态 = `design/engineering/code-conventions.md` §2.5,实装批落表)。奖励直伤行的数值字段沿用 `effectiveness` 键名、值为整数点数——键名与量纲是数据导出与分析工具的兼容契约,改动须连动分析工具面。没生效也要留痕:奖励未生效行如实记录四类合法例外(reason 键封闭:full_layers/full_hp/no_enemy_alive/hero_down),呈现面按 reason 归因(聚合计数呈现已随明细带退役)。**日志落盘零文案:text 与 display_key 不落盘**,玩家可见文案仅呈现面消费。
任何一行找不到来源即断言失败——宁可返回错误,也不让"合并到看不出来源"的呈现混过数据层。但有些行天然没有棋盘来源,断言为此留了两层豁免,豁免集合是封闭清单,改动同样走本文修订。
+18 -17
View File
@@ -1,7 +1,7 @@
# 敌人系统
> 一句话:敌人数据、技能池出招、意图呈现
> 状态:已定稿;现行为 v1.9
> 状态:已定稿;现行为 v2.2
## 设计目的
@@ -97,7 +97,7 @@
| 字段 | 适用类型 | 说明 |
|---|---|---|
| skill_id | 全部 | 主键,池条目引用键 |
| display_name | 全部 | 玩家可见名(明细行与动画共用) |
| display_key | 全部 | 玩家可见名的文案 key(明细行与动画共用),文案值住 strings.csv(code-conventions §2.5) |
| type | 全部 | 封闭枚举 {普通攻击, 伤害, 增益, 妨害}(现行事实源=敌人系统.md 词汇表/增益状态.md;多段命中经用户拍板退役不入枚举);新类型走本文修订 |
| damage_mult | 仅伤害 | 伤害倍率;域 [1.1, 16] provisional。普通攻击恒 1、不可配 |
| rider_mult | 仅伤害、可省 | **必中附加分量**:域 (0, 1],缺省无字段 = 无附加;分量值 = max(伤害下限, floor(攻击基线 × rider_mult))——随施放者攻击基线缩放,后置加法、必中全额、不进乘区、不出暴击(后置加法同族);价位锚 0.75 = AC 折扣档最轻档"不掉档的稳定伤害" |
@@ -110,19 +110,20 @@
池构成纪律(加载校验,违规拒绝入表):**每池恰一行普通攻击**(普攻冷却恒 0 → 可摇集合恒非空,"空池不可能"由结构保证,最坏情况怪物平砍等待——那是玩家的反打窗口而非死拍);**每池增益类技能 ≤1**(非 RPG,怪物连出不同增益显得呆);**每池妨害类技能 ≤1**;**每池至少一行不带触发条件的特殊技**(普攻不算——保底特殊技集合恒非空的结构保证);池条目 skill_id 悬空致命;权重 > 0、冷却 ≥ 0。
两道闸(表值 provisional,投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md),行值读技能表):
三道闸(表值 provisional,投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md),行值读技能表):
| 闸 | 语义 |
|---|---|
| 技能冷却 | 每技能行带冷却拍数;施放后连续 N 拍不可摇中——普攻恒 0 不可配,其余行值读技能表 |
| 保底 | 连续 M 拍执行的都是普通攻击 → 下一拍必出特殊技(特殊技内按权重,不受冷却限制);M 读技能表 pity_threshold |
| 保底 | 连续 M 拍执行的都是普通攻击 → 下一拍必出特殊技(条件满足且不在间隔闸期内的特殊技内按权重,不受冷却限制;闸期内保底顺延);M 读技能表 pity_threshold |
| 全局特殊间隔 | 任一特殊技兑现后,该敌接下来 K 拍只能执行普通攻击——闸期内特殊技不进可摇集合与保底集合;K 读技能表 special_interval,0=关闭 |
结构红利:增益存续期内下一拍必是伤害技(池里其余全是伤害技、增益自身还在冷却)——**增益不可能白白过期**,"连出不同增益"被池构成纪律结构性消除。同一技能连发不可能(自身冷却杜绝);异名特殊技背靠背概率低(是变化不是失控,全局特殊间隔闸登记 P1 备用旋钮)。
结构红利:特殊技兑现后强制普攻 K 拍(全局特殊间隔闸),增益窗首拍必有普攻承接——**增益不可能白白过期**;"连出不同增益"被池构成纪律结构性消除(增益 ≤1、自身进冷却)。同一技能连发不可能(自身冷却杜绝);异名特殊技背靠背不可能(闸期内特殊技不进可摇集合)。
开轮摇号时序(随机消费全部在[战斗结算](战斗结算.md)换算层):
```
开轮(轮次开始):排除冷却中与触发条件不满足的技能 → 按行序逐敌摇定本拍行动(behavior_roll 封闭流,每敌独立子流)→ 冷却递减
开轮(轮次开始):排除冷却中、间隔闸期内与触发条件不满足的技能 → 按行序逐敌摇定本拍行动(behavior_roll 封闭流,每敌独立子流)→ 冷却与间隔闸计数递减
挖掘期:按摇定结果播类型级动画(特殊技)/ 零表示(普通攻击)
结算段:按技能行兑现——掷点、乘区、增益挂接、明细落行
判定段之后进入下一轮开轮……
@@ -136,7 +137,7 @@
Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错峰两轨口径**:**Boss 轨** = L1 酋长池含独占增益技"硬化"〔敌方防御池词汇载体〕+ 半血解锁伤害技"震地怒击";L2 卓尔池独占妨害技"蛛网束缚"+伤害技"毒爆"+ 半血解锁"遏毒";L3 石君王池独占妨害技"大地脉动"+ 半血解锁"岩崩"——独占技随关错峰投放,三行解锁技=每 Boss 一行新独占伤害技〔用户裁案甲,2026-10-04〕;**普通敌轨** = L2/L3 普通敌种技能随关错峰投放(巨蜘蛛族+毒吐〔(2,5)/(2,6)/(2,7),首遇教学位 (2,4) 不投〕、灰矮人族+盾击〔(3,0)/(3,5)/(3,7)〕)——第一关不见的招式第二/三关普通战可见;增益 ≤1 纪律下蓄力拍不进 Boss 池)。
举证:**摇定结果 = 可摇集合按权重份额归一的一次抽签;当前可摇集合 = 实例池排除冷却中与触发条件不满足的技能(保底命中时 = 条件满足的全部特殊技)。**连带可判别:把权重当固定百分比、把冷却当只锁高伤技、把蓄力当重击前奏,都是与本规约相悖的旧口径。
举证:**摇定结果 = 可摇集合按权重份额归一的一次抽签;当前可摇集合 = 实例池排除冷却中、间隔闸期内与触发条件不满足的技能(保底命中时 = 条件满足且不在间隔闸期内的全部特殊技——闸期内保底集合可为空,保底不兑现、顺延到闸后)。**连带可判别:把权重当固定百分比、把冷却当只锁高伤技、把蓄力当重击前奏,都是与本规约相悖的旧口径。
### 精英行:现役敌种的强化版,池=继承基础池+附加技
@@ -176,15 +177,15 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
| 机制 | 规则 |
|---|---|
| 冷却 | 照常——条件与冷却各自独立排除,同一拍可叠加 |
| 保底 | 保底特殊技集合同样排除条件不满足的技能(保底禁止逼出条件不满足的技);池构成纪律"每池至少一行无条件特殊技"保证该集合恒非空 |
| 保底 | 保底特殊技集合同样排除条件不满足的技能(保底禁止逼出条件不满足的技);池构成纪律"每池至少一行无条件特殊技"保证该集合闸外恒非空——间隔闸期内可被闸排空,保底顺延(见「三道闸」表) |
| 死亡作废 | 照常——摇定后兑现前死亡,本拍作废、不进冷却不进保底计数 |
| 意图呈现 | 三档规格不变——情境技属特殊技,走类型级预告+结算明细具名,因果由技能名承载(如"趁隙偷袭");闩型保留解锁弹出规格(见"目标顺位与意图线索"节) |
| 意图呈现 | 三档规格不变——情境技属特殊技,走类型级预告+结算明细具名,因果由技能名承载(如"趁隙偷袭");闩型解锁拍零新增呈现,告知归既有意图预告承载(见"目标顺位与意图线索"节) |
半血解锁:Boss 解锁技=trigger {fact: self_hp_pct, op: lte, value: 行值, latch: 真}——解锁弹出规格(归因明细行+一次性技能名 toast)、单向闩语义、双面过滤。
半血解锁:Boss 解锁技=trigger {fact: self_hp_pct, op: lte, value: 行值, latch: 真}——解锁拍零新增呈现(归因明细行照记数据面)、单向闩语义、双面过滤。
首批落地(已实装):①三 Boss 解锁技为闩型条件;②两个示范投放——地精池+低血防御增益「孤注守势」(self_hp_pct lte 35,纯增益)、L2/L3 群行位+停手偷袭伤害技「趁隙偷袭」(last_round_end eq 停手)。投放敌种、权重与阈值投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md);"每池增益≤1"纪律不动,条件技照常计入预算。
举证:触发条件为门槛过滤规则,无计算——可摇集合 = 实例池排除冷却中与触发条件不满足的技能(保底命中时 = 条件满足的全部特殊技)。
举证:触发条件为门槛过滤规则,无计算——可摇集合 = 实例池排除冷却中、间隔闸期内与触发条件不满足的技能(保底命中时 = 条件满足且不在间隔闸期内的全部特殊技)。
### 伏击(已退役)与群伤负向现况
@@ -202,9 +203,9 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
| 特殊技 | 技能动画占位(攻击系 / 增益系 / 妨害系三族)——纯类型级提醒,不预告技能名与数值 | 明细行具名技能 + 数值 |
| nat20 暴击 | 无前置表示(掷点层,与技能重击严格区分) | 明细行"(暴击)"标注 |
即:普攻完全不可预测;特殊技有一次类型级预告,不可撤销,但给"继续挖还是停手"的决策依据。
即:普攻完全不可预测;特殊技有一次类型级预告,不可撤销,但给"继续挖还是停手"的决策依据。攻击系内部不分档预告——重击与普通伤害技的预告呈现完全相同,强度差异的感知通道是敌人本体的准备动画(规格见[角色设计](../../../art/character-design.md) §5.6 意图准备动画三档)。
**半血解锁弹出规格(解锁判定点=通用事件「血量阈值 `enemy_hp_threshold`」的发射点,对所有带闩型血量触发条件的敌人逐个发射、非 Boss 专属——Boss 语义留给订阅条件判定;条件载体=技能行 trigger 闩型,见「触发条件」节)**:Boss 血量降至解锁阈值(trigger 行值,域 [1,99],缺省无字段=无门槛)时,下一个开轮摇号前出一次归因明细行「XX 解锁了 YY」(高光键为技能解锁,行型复用高光行零新增);呈现层对该行弹**一次性技能名 toast**(轻量提示,非演出——零动画资产、不改演出规格),只报技能名不报数值,池与权重不公开纪律不变。解锁=单向闩(治疗抬血不解锁);锁定条目双面过滤(不进可摇集合与保底特殊技集合——保底禁止逼出未解锁技);解锁后冷却初值 0 即可摇。投放纪律=机制通用、闩型解锁用例仅 Boss 专属技投放(enemy 表无 boss 编码位,硬闸须跨表查节点类型——不做硬闸,本句即文档纪律登记)。技能动画的攻/防系映射归[战斗表现](战斗表现.md),敌人侧摇定动画位归[HUD 框架](../表现与支撑/HUD框架.md)(呈现载体 = 站桩立绘,2026-09-20 全站桩拍板),本系统只锁上面这张三档规格。
**半血解锁呈现规格(解锁判定点=通用事件「血量阈值 `enemy_hp_threshold`」的发射点,对所有带闩型血量触发条件的敌人逐个发射、非 Boss 专属——Boss 语义留给订阅条件判定;条件载体=技能行 trigger 闩型,见「触发条件」节)**:Boss 血量降至解锁阈值(trigger 行值,域 [1,99],缺省无字段=无门槛)时,下一个开轮摇号前出一次归因明细行「XX 解锁了 YY」(高光键为技能解锁,行型复用高光行零新增——数据面照记,玩家不可见面)。**解锁拍零新增呈现(2026-11-10 用户裁,替代原一次性技能名 toast)**:血条跌破本身即视觉事件,新增提示条、弹窗、浮字一概不做——玩家刚把 Boss 打进阈值,「它亮新招」因果自明;新技的玩家告知由既有意图预告承载(下一拍开轮摇中即类型级徽标顶头,具名随预告),与杀戮尖塔敌人能力变化走头顶意图的惯例同轨。池与权重不公开纪律不变。解锁=单向闩(治疗抬血不解锁);锁定条目双面过滤(不进可摇集合与保底特殊技集合——保底禁止逼出未解锁技);解锁后冷却初值 0 即可摇。投放纪律=机制通用、闩型解锁用例仅 Boss 专属技投放(enemy 表无 boss 编码位,硬闸须跨表查节点类型——不做硬闸,本句即文档纪律登记)。技能动画的攻/防系映射归[战斗表现](战斗表现.md),敌人侧摇定动画位归[HUD 框架](../表现与支撑/HUD框架.md)(呈现载体 = 站桩立绘,2026-09-20 全站桩拍板),本系统只锁上面这张三档规格。
| 规格 | 含义 |
|---|---|
@@ -237,7 +238,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
## P0 最小闭环
1. 战斗开始:战斗结算按遭遇坐标调本系统生成单位——读表快照实例化本战数量的敌人(池模板快照成实例池、冷却全零),主角以血量入参生成。
2. 开轮摇号:战斗结算换算层排除冷却中技能、按行序逐敌摇定本拍动作写入实例池,随后冷却递减(首轮同样摇;轮内刷新换图不重摇)。
2. 开轮摇号:战斗结算换算层排除冷却中与间隔闸期内技能、按行序逐敌摇定本拍动作写入实例池,随后冷却与间隔闸计数递减(首轮同样摇;轮内刷新换图不重摇)。
3. 挖掘期踩雷:事实经战斗结算转化为警觉施加——每颗雷恰一次、逐层记账(无上限)。
4. 每轮结算战斗段:主角先基础攻击顺位最前的存活敌人,随后每个存活敌人按摇定技能行兑付(伤害技 = 基线 × 倍率,增益技 = 施放行 + 状态授予);地图奖励与惩罚的伤害兑付殿后到战斗段末统一落地(案C 2026-10-06 用户裁,见战斗结算)。
5. 受击上报、血量递减;归 0 即移出顺位(摇定后兑现前死亡 → 本拍作废不进账)。
@@ -252,7 +253,6 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
| P1 | 情境条件触发器(低血触发防御、玩家停手时偷袭技等) | 已实装(三 Boss 闩型+两示范投放,见「触发条件」节与「首批落地」段) |
| P1 | 个体化变体池(同种个体分型:A 型好斗 / B 型守势) | 共识点 A 的 A2 案;排期 Beta,登记[待办清单](../../../../待办清单.md) |
| P1 | 精英遭遇接线、精英底座光环与描边变色、精英钥石掉落 | 精英行已落表静置(见「精英行」节);接线归[待办清单](../../../../待办清单.md)「战斗节点遭遇编排方式」条目,视觉二件随怪物设定批,钥石随接线批 |
| P1 | 全局特殊间隔旋钮 | 特殊技背靠背实测仍嫌时的备用闸;登记[待办清单](../../../../待办清单.md) |
| P1 | 新效应词汇(妨害技 + 必中附加分量已实装——实装面 = L2 Boss 卓尔;多段命中经用户拍板退役) | 妨害类型 + rider_mult 字段已落地;登记[待办清单](../../../../待办清单.md)(已解决移除,去向见状态记录) |
| P1 | 敌种扩容与投放节奏(含第二关池与投放) | 投放节奏是关卡命脉,归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md) |
| P1 | 单体寻址("只打某一个敌人"的目标指定) | 归集语义与呈现已裁定(语义归[增益状态](增益状态.md)〈单体寻址扩展位〉节);实现随首个单体效果的内容批落地 |
@@ -291,6 +291,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
| cooldown_beats | [0, 99] | 施放后连续 N 拍不可摇中;普通攻击恒 0 不可配(域校验锁死——空池不可能的结构前提) |
| buff_ref / buff_duration | 效果引用 / [1, 99] | 仅增益与妨害技(target_side 路由);悬空引用加载期拒绝 |
| pity_threshold(保底 M) | [1, 99] | 全局单旋钮:连续 M 拍执行普攻 → 下拍必出特殊技 |
| special_interval(特殊间隔 K) | [0, 99] | 全局单旋钮:任一特殊技兑现后该敌连续 K 拍只能执行普通攻击,0=关闭(旧口径等价);投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md) |
| trigger | {fact, op, value, latch},词表见核心规则「触发条件」节;value 类型随 fact(数值事实整数、百分比事实域 [1,99]、枚举事实枚举串) | 全部可省,缺省=无条件技;出域加载期拒绝;情境技与解锁阈值的行值投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md) |
主角表(单行全局):
@@ -305,13 +306,13 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
各敌种行值、池权重与池 EV 读数(含闸长期速率实测)一律读配置表与调参日志,本文不登记具体数值;EV 重锚与权重投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)。
结构冻结(非调参项,修订走本文流程):技能类型枚举封闭、每池恰一普攻、每池增益 ≤1、死亡即不动手(摇定后兑现前死亡作废不进账)、每结算每存活敌恰行动一次、行序、先作用后推进、固定顺位、**行集构成纪律(行集内 enemy_id 唯一 + 同带键多行文件内相邻且行序 = 声明序 = 生成序 + 行集实例总数 ≤ 4)**、零随机(本系统自身语义零随机不变——摇号与掷点随机一律在[战斗结算](战斗结算.md)结算换算层按封闭随机流掷定,可回放契约 = 同种子同输入逐位复现,单敌出招轨迹可独立复放)。联动纪律:技能倍率 × 攻击(伤害拍支配)、权重 × 冷却 × 保底(池节奏三联动)禁止独立调参,联调须重跑方向性预检并同步登记册(登记 [待办清单](../../../../待办清单.md))。
结构冻结(非调参项,修订走本文流程):技能类型枚举封闭、每池恰一普攻、每池增益 ≤1、死亡即不动手(摇定后兑现前死亡作废不进账)、每结算每存活敌恰行动一次、行序、先作用后推进、固定顺位、**行集构成纪律(行集内 enemy_id 唯一 + 同带键多行文件内相邻且行序 = 声明序 = 生成序 + 行集实例总数 ≤ 4)**、零随机(本系统自身语义零随机不变——摇号与掷点随机一律在[战斗结算](战斗结算.md)结算换算层按封闭随机流掷定,可回放契约 = 同种子同输入逐位复现,单敌出招轨迹可独立复放)。联动纪律:技能倍率 × 攻击(伤害拍支配)、权重 × 冷却 × 保底 × 特殊间隔(池节奏四联动)禁止独立调参,联调须重跑方向性预检并同步登记册(登记 [待办清单](../../../../待办清单.md))。
## 验收标准
- 开战生成:按遭遇坐标取出该坐标行集(一行或多行,逐行实例化——行序 = 文件序),实例化数量与数值投影同行值快照;行集实例总数(各行骰后)≤ 4;池模板快照成实例池且冷却全零;主角以血量入参,越界(高于上限或不超过 0)拒绝且不留半实例。
- 摇号确定性:同种子回放逐位复现(步骤流与各实例摇定动作序列逐位相同);单敌轨迹独立复放——只喂该敌子流(scope = 生成序 × 派生向量 + 摇号序)即可逐位重建其出招序列、互不穿插。
- 池节奏:中签率 = 权重 ÷ 可摇权重合计(排除冷却中与触发条件不满足的技能后归一);施放后连续 N 拍不可摇中;连续 M 拍执行普攻 → 下拍必出特殊技(条件满足的特殊技内按权重、不受冷却限制);同技能连发不可能;首轮摇号、每轮恰摇一次、轮内刷新不重摇。
- 池节奏:中签率 = 权重 ÷ 可摇权重合计(排除冷却中、间隔闸期内与触发条件不满足的技能后归一);施放后连续 N 拍不可摇中;任一特殊技兑现后该敌连续 K 拍只执行普通攻击(K=0 关闭=旧口径);连续 M 拍执行普攻 → 下拍必出特殊技(条件满足且不在间隔闸期内的特殊技内按权重、不受冷却限制,闸期内顺延);同技能连发不可能;异名特殊技背靠背不可能(K ≥ 1);首轮摇号、每轮恰摇一次、轮内刷新不重摇。
- 触发条件:条件不满足的技能不进可摇集合与保底集合(保底禁止逼出条件不满足的技);条件求值零随机、同种子回放逐位复现;闩型条件首次为真后整场保持(治疗抬血不回锁);每池至少一行无条件特殊技(加载校验);缺省无 trigger 字段=无条件技,旧表零变化。
- 死亡即不动手:摇定后、兑现前被杀——本拍技能作废(零行动明细行),不进冷却、不进保底计数;行动完成后才死——已兑付已进账;对已死亡单位上报受击被拒绝且状态不变。
- 空池不可能:每池恰一行普通攻击(域校验),普攻冷却恒 0 → 任意实例任意拍可摇集合恒非空。
+34 -93
View File
@@ -1,26 +1,25 @@
# 棋盘生成
> 一句话:棋盘怎么生成、怎么保证可推理可清图
> 状态:已定稿;现行为 v1.3
> 一句话:棋盘怎么生成——确定性随机布雷,不做质量承诺
> 状态:已定稿;现行为 v1.4
## 设计目的
棋盘生成是全项目扫雷图的唯一生产者:战斗结算每要一张新图,它就按关卡序号与节点深度对应的参数行,确定性造出一张可推理、可清图的雷图。它在生成时刻就作出质量承诺——玩家只会输给自己选的赌(比如终局只能猜的一格),不会拿到大面积无解的局;这是核心循环里"推理的确定性"卖点的生成端保障。同种子同参数必产同图,回放、测试、复盘都能精确复现——确定性既是卖点,也是调试工具。
棋盘生成是全项目扫雷图的唯一生产者:战斗结算每要一张新图,它就按关卡序号与节点深度对应的参数行,确定性造出一张雷图。生成端不做质量承诺——不担保"好推理"、不担保"不用猜",随机布雷允许猜局,猜是玩法的一部分(踩雷不是死亡是事实上报,归[排雷玩法](排雷玩法.md))。同种子同参数必产同图,回放、测试、复盘都能精确复现——确定性既是卖点,也是调试工具。
## 系统范围
边界这样划:本系统管"图从哪来、生成时承诺什么质量"。图上的动作怎么执行归[排雷玩法](排雷玩法.md),什么时候换图归[战斗结算](../战斗循环/战斗结算.md)编排,数值定多少归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)(本系统只提供参数表给数值落点),变异内容是什么归[地形变异](地形变异.md)(本系统不为变异做任何工作——变异格赋予在战斗初始化第 4 步执行,生成器产物恒零变异格)。本系统是个无状态的生产者:进参数与种子,出棋盘与指标,自己不留任何记忆。
边界这样划:本系统管"图从哪来"。图上的动作怎么执行归[排雷玩法](排雷玩法.md),什么时候换图归[战斗结算](../战斗循环/战斗结算.md)编排,数值定多少归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)(本系统只提供参数表给数值落点),变异内容是什么归[地形变异](地形变异.md)(本系统不为变异做任何工作——变异格赋予在战斗初始化第 4 步执行,生成器产物恒零变异格)。本系统是个无状态的生产者:进参数与种子,出棋盘与指标,自己不留任何记忆。
负责:
| 负责 | 说明 |
|---|---|
| 四阶段确定性生成管线 | 读参数 → 布雷 → 生成-验证 → 产出上报;顺序冻结,不调换、不跳步(变异布置段已移出管线) |
| 四阶段确定性生成管线 | 读参数 → 布雷 → 出板检查 → 产出上报;顺序冻结,不调换、不跳步(变异布置段已移出管线) |
| 棋盘生成参数表 | 全项目第一张按进度键(关卡序号 × 节点深度)回填的配置表;表结构归本系统定 |
| 可推理率度量与达标判定 | 生成时刻的质量承诺,含计算口径与定义版本号 |
| 出生区与反退化保证 | 出生 3×3 无雷、最小安全格数、开局白给板拒绝、清图可达性(变异不落出生区与展开域由布置段顺序保障) |
| 加载期参数校验 | 参数域、布雷数下限、可行性与成本闸校验;违例加载期致命 |
| 生成期指标集产出 | 实测可推理率、实际雷数等,供调参与下游对账 |
| 出生区与反退化保证 | 出生 3×3 无雷、开局白给板拒绝(变异不落出生区与展开域由布置段顺序保障) |
| 加载期参数校验 | 参数域与布雷数下限校验;违例加载期致命 |
| 生成期指标集产出 | 实际雷数、安全格数、重摇次数等,供调参与下游对账 |
不负责:
@@ -56,93 +55,51 @@
│ 在"全格 − 出生 3×3"范围均匀布雷
│ 开局免费展开域外扩一圈,圈内的雷移除(只减不增、不重投、无迭代)
▼
③ 生成-验证 ── 实测可推理率;不达标在同一张图的随机数配额内重试,至上限按出口分发
③ 出板检查 ─── 只查两条:出生区无雷、开局不全开;白给板同流重摇,直到不全开
▼
④ 产出上报 ─── 交出棋盘 + 生成期指标集
```
生成期间的每一次随机取数——布雷、重试——都从本图专属的一条"棋盘生成随机流"按固定顺序取:一张图只开一条流、用到底,重试不开新流;流之外零随机,全局随机函数一律禁用。参数行开始时一次快照,配置表中途热重载不影响进行中的生成。管线本身无状态——这些合起来就是"同种子同参数必产同图"的根基。(变异布置不消费本流——其取数走专用 variant_place 流,归战斗结算 布置段。)
生成期间的每一次随机取数——布雷、重摇——都从本图专属的一条"棋盘生成随机流"按固定顺序取:一张图只开一条流、用到底,重摇不开新流;流之外零随机,全局随机函数一律禁用。参数行开始时一次快照,配置表中途热重载不影响进行中的生成。管线本身无状态——这些合起来就是"同种子同参数必产同图"的根基。(变异布置不消费本流——其取数走专用 variant_place 流,归战斗结算 布置段。)
各阶段的失败都有明确语义,全部失败路径都不让玩家卡死(本节为纯流程规则,无计算;数值与校验式见后续各节):
各阶段的失败都有明确语义(本节为纯流程规则,无计算;数值与校验式见后续各节):
| 阶段 | 失败情形 | 语义 |
|---|---|---|
| 参数解析 | 行缺失或域违例 | 加载期校验已拦,运行期不会失败 |
| 布雷 | 雷数为 0 | 不会发生(零雷板加载期已拒) |
| 生成-验证 | 重试耗尽 | 按三分支出图(见"生成重试与成本闸") |
| 出板检查 | 开局白给板 | 同流重摇,直到不全开——这是唯一的重摇理由 |
| 产出 | —— | 无失败路径,交出棋盘与指标 |
### 出生区安全与反退化布雷:脚下无雷、废板不出厂
### 出生区安全与反退化布雷:脚下无雷、白给板不出厂
玩家开局站在棋盘上的 3×3 出生区,开局不花行动点就能看到一片区域——出生 3×3 加上从它出发经连锁展开(翻到八邻无雷的格时整片免费翻开的机制,玩家可见名"坍塌显形")免费带出的格,下文称**开局免费展开域**。本规则保证两件事:其一,脚下永远安全——出生区与开局免费展开域内恒无雷(变异亦然——变异格赋予在初始展开之后执行,天然不落已开区,见[地形变异](地形变异.md)布置段);其二,流出的每张图都可正常游玩——零雷板、安全格寥寥的板、开局白给的板、带孤岛安全格的板,都在生成期被拦下或整张弃用。
玩家开局站在棋盘上的 3×3 出生区,开局不花行动点就能看到一片区域——出生 3×3 加上从它出发经连锁展开(翻到八邻无雷的格时整片免费翻开的机制,玩家可见名"坍塌显形")免费带出的格,下文称**开局免费展开域**。本规则保证两件事:其一,脚下永远安全——出生区与开局免费展开域内恒无雷(变异亦然——变异格赋予在初始展开之后执行,天然不落已开区,见[地形变异](地形变异.md)布置段);其二,开局不全开——开局免费展开域覆盖全部安全格的板等于白给,重摇弃用。
**结论**:雷数先定数、再落位;零雷板与安全格不足的参数组合在加载期就被拒绝。
**结论**:雷数先定数、再落位;零雷板的参数组合在加载期就被拒绝。
```
布雷数 N = round(mine_density × (board_width × board_height − 出生格数)) (出生格数 = 出生区边长²,读表;出生区恒排除)
下限校验:N ≥ 1(零雷板加载期拒绝)
计数可行:board_width × board_height − N ≥ min_safe_count(加载期校验)
产物断言:实际安全格数 ≥ min_safe_count;实际雷数 ≤ N(先布后删只减不增)
产物断言:实际雷数 ≤ N(先布后删只减不增)
```
| 符号 | 含义 |
|---|---|
| mine_density | 雷密度参数,与图尺寸解耦 |
| board_width / board_height | 图尺寸参数 |
| min_safe_count | 最小安全格数下限参数——对冲"图上没几格安全、随便挖挖就清图领奖励"的刷奖励打法 |
| N | 该参数行每张图的目标雷数 |
| 反退化规则 | 内容 |
|---|---|
| 先布后删 | 先把 N 颗雷在"全格 − 出生 3×3"上布完,再把剃雷域内的雷移除——只减不增、不重投、无迭代,必然终止且可复现;实际雷数与 N 的差额随指标观测。**剃雷域**:「出生 3×3 ∪ 外扩 r 环」(切比雪夫距离 ≤1+r,r=shave_ring_radius 现行 1 → 5×5=25 格)——全域剃雷=开局免费展开巨大(10×10 板 R₀ 均值 68.6=板面 68.6%)的根因;现口径下开局免费展开=出生邻域剃雷诱发的自然连锁,均值降至板面约四成(10×10 实测 39.7) |
| 出生区安全 | 出生 3×3 与开局免费展开域内恒无雷;变异不落两域由布置段顺序保障(非本管线义务) |
| 开局白给板拒绝 | 开局免费展开域禁止覆盖全部安全格——等于即退化板,尝试弃用重试;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) |
| 清图可达性 | 每个安全格都必须能从出生区沿安全格八向连通走到;带孤岛安全格的板判非法,不进降级候选 |
| R₀≤cap 重掷闸 | 每次尝试出板后实测自然 R₀(开局免费展开格数),超过该行 r0_max_cap 即整板作废同流重试——合法性先于质量评分(同白给板先例);全部尝试超阈 → 既有三分出口接受最不坏+非法产物标记诚实降级,玩家永不卡死;闸触发次数随指标集 r0_cap_rejected 观测(占比过高=剃雷半径与闸配比失衡信号) |
| 开局白给板拒绝 | 开局免费展开域禁止覆盖全部安全格——等于即退化板,同流重摇弃用;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) |
清图可达性与可推理率是两道独立的闸:合法性先查、质量分后算——一张"分高但通不了"的图没有意义。另一条推理前提也由本系统保证:数字恒真,每个非危险格的数字恒等于它的八邻雷数,整局推理都建立在这句话上。
数字恒真是布雷算法的本分:每个非危险格的数字由八邻雷数直接算出,构造上恒成立,不设运行期检查——算错了是算法缺陷,修算法,不是加检查。
### 可推理率承诺:生成时就担保玩家算得对
### 不做质量承诺:猜局是玩法的一部分
可推理率(inferability)回答一个问题:这张图上有多少安全格,玩家不靠赌、纯凭逻辑就能挖开?它是整张图的"不靠赌占比":把开局免费展开、连锁展开、数字推导三种通道能确定挖开的安全格数,除以安全格总数。生成端承诺每张图实测占比不低于该行及格线——玩家可以输给自己选的赌,但不会拿到一张大面积无解的图。
**结论**:每张图生成时实测可推理率,实测值 ≥ 该行及格线;及格线取值域 [0.85, 1],域下限 0.85 是"不许纯猜局"的绝对锚(结构冻结——调整走文档修订,不是调参)。
```
可推理率(图) = 不靠赌能确定挖开的安全格数 ÷ 安全格总数
不靠赌揭示闭包:从开局免费展开域出发,交替应用两条规则直到不再新增——
① 连锁:翻到 0 格(八邻无雷的数字格)→ 其八邻安全格全部计入
② 推导:与已揭示区八向相邻的安全格,求解器凭可见数字能唯一断定其非雷 → 计入
```
| 口径 | 内容 |
|---|---|
| 与玩家信息同步 | 评分模拟只看玩家能看见的盘面:没开的格看不见,危险格位置不许偷看 |
| 三通道计入 | 免费展开、连锁、推导挖开的格都算"不靠赌";免费展开格同时计入分子与分母 |
| 次序无关 | 先连锁还是先推导,闭包结果相同——分数与玩家的操作顺序无关 |
| 版本防漂移 | 指标输出带定义版本号(当前 1);改推理定义 = 文档修订 + 黄金图向量重制,版本号随之跳变 |
推理规则域 solver_rules 冻结为 single_subset(单点规则加子集消减——经典扫雷式确定性推理:凭单个数字、以及两组数字的差能唯一断定的格)。它是可推理率定义的一部分,不是调参项;放宽或收紧它都等于改"算得对"的定义,须走文档修订。
### 生成重试与成本闸:重试有上限、降级必上报
一张图生成后先实测可推理率,不达标就在同一张图的随机数配额内重试——不开新图、不换种子。重试不是无限的:总取数规模受成本闸约束,且禁止拿真实耗时当逃生阀——否则同一颗种子在快慢机器上会产出不同的图,"同种子同图"就不成立了。
**结论**:重试次数与图尺寸联合受成本闸约束。
```
成本闸:max_gen_attempts × board_width × board_height ≤ 成本闸护栏常数 (结构护栏常数,见棋盘参数表字段定义;provisional 量级,正式值待实现期定)
```
| 出口 | 何时走 | 发生什么 |
|---|---|---|
| 达标即出 | 重试中出现合法且达标的图 | 出最早达标的那张,不追求全场最高分 |
| 接受最优 | 重试耗尽,有合法图但无一达标 | 出合法图中可推理率最高的一张(并列取最早)+ 强告警 + 降级标记 |
| 接受最不坏 | 重试耗尽且一张合法图都没有 | 按确定性劣度排序出最不坏的一张 + 最高级告警 + 非法产物标记 |
最后一条出口是诚实降级:玩家永不卡死——哪怕找不到合法板也照常出图;但绝不静默——非法产物标记随指标集上抛,由[战斗结算](../战斗循环/战斗结算.md)编排、经 [HUD 框架](../表现与支撑/HUD框架.md)诚实告知玩家(提示、补偿还是回退,呈现细节归下游)。运行期安全网兜住体验,质量红线靠调参期批量断言守住:非法产物严格零容忍、低于及格线的板数严格为零——两层不许互相折算。
每次尝试先过合法性关——清图可达、安全格数达标、结构不变式全过——再谈质量分;非法尝试弃用重试。合法性闸在质量评分之前,质量分禁止掩盖功能残废。
生成端不度量"好不好推理"、不筛选"够不够好推理"的板:经典扫雷式随机布雷天然允许猜局,玩家靠数字推理推进,推不动的格子自己权衡赌不赌(挖开危险格不是死亡是事实上报,归[排雷玩法](排雷玩法.md))。推理求解程序(凭可见数字做确定性推导的程序)只保留在离线模拟测量(MC 批量模拟)中作测量工具,不参与生成管线。
### 图类型标签与第三轴预留:主题恒定、Boss 板有座位
@@ -165,8 +122,7 @@
| 上游 | [数据配置](../表现与支撑/数据配置.md) | 参数表承载、类型化读取与加载期校验通道;棋盘生成随机流的种子派生(每图开一次流) |
| 相邻 | [地形变异](地形变异.md) | 相邻事实依赖:布置执行位在战斗初始化第 4 步(战斗结算 编排段),生成器产物恒零变异格;出生区/展开域"无变异"承诺由该顺序结构保障 |
| 下游 | [排雷玩法](排雷玩法.md) | 棋盘产物消费方;开局免费展开由对方执行,展开域口径按双方登记的回验条款对齐 |
| 下游 | [战斗结算](../战斗循环/战斗结算.md) | 换图调用方与指标对账方;零合法板的玩家侧诚实告知由其编排 |
| 下游 | [行动经济](行动经济.md) | 单向事实依赖:P(安全)(挖掘目标格为安全格的概率)是对方挖掘风险不等式的概率锚,锚值由本系统供给——实测可推理率分布的低分位值,不是及格线参数 |
| 下游 | [战斗结算](../战斗循环/战斗结算.md) | 换图调用方与指标对账方 |
| 下游 | [难度曲线与Boss](../冒险循环/难度曲线与Boss.md) | 参数数值所有权方;只按表调参,禁反向调用生成 |
| 下游 | [关卡节点地图](../冒险循环/关卡节点地图.md) | 第三轴 Boss 板落点约定的共同输入 |
| 下游 | [地图战斗资源](../战斗循环/地图战斗资源.md) | board_type 作图类型上下文(行参数静态恒定) |
@@ -174,27 +130,23 @@
| 对外接口 | 形态 |
|---|---|
| 生成入口 | 生成(关卡序号, 节点深度, 种子) → 棋盘 + 生成期指标集;无状态纯函数 |
| 生成期指标集 | 实测可推理率(带定义版本号)、实际雷数与安全格数、重试次数、降级/非法产物标记 |
措辞登记(防口径混写):可推理率是整图级的"不靠赌占比",生成侧口径;P(安全) 是单格认知概率,决策侧口径——免赌集内 P(安全) 恒为 1,风险全部收缩到剩余盲猜集。本系统供给前者,不定义后者。
| 生成期指标集 | 实际雷数与安全格数、目标雷数、重摇次数、剃雷数、开局免费展开格数 |
## P0 最小闭环
1. 战斗结算以(关卡序号,节点深度)调用生成,本系统开一条棋盘生成随机流。
2. 读取并快照参数行(加载期校验已通过)。
3. 先定数布雷、先布后删;出生区安全与反退化不变式全过。
4. 实测可推理率,不达标在流内重试至上限,按三分支出图(变异布置不在本管线——装板后由战斗结算 布置段执行)。
3. 先定数布雷、先布后删;出生区无雷检查过。
4. 开局白给板检查,违例同流重摇直到不全开(变异布置不在本管线——装板后由战斗结算 布置段执行)。
5. 交出棋盘 + 指标集:排雷玩法消费棋盘,战斗结算消费指标对账——循环闭合于下一次换图请求。
## P1 / P2 后置
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| P1 | 调参期批量断言工具全量交付(逐行数百样本;可推理率零违例、及格线下限、非法产物零容忍、难度方向 advisory 与分位报告) | 调参期离线工具域;冒烟只载缩样 |
| P1 | 与战斗结算的接线断言(图内重试不当作新流事件、对账消费实测分布) | 断言登记在对方验收清单 |
| P1 | 调参期批量断言工具全量交付(逐行数百样本;确定性复现、出生区安全、白给板零容忍) | 调参期离线工具域;冒烟只载缩样 |
| P1 | 与战斗结算的接线断言(图内重摇不当作新流事件、对账消费实测分布) | 断言登记在对方验收清单 |
| P1 | 与排雷玩法的展开域回验集成 | 回验两臂登记在对方文档,集成随对方排期 |
| P2 | 推理域扩展(solver_rules 启用其他规则集或新增信息源) | 改可推理率定义 = 文档修订,MVP 冻结 |
| P2 | 生成异步化与成本闸正式值定稿 | 实现期决策,随性能预算批 |
| P2 | ~~变异布置内容接入~~(已完成——布置执行位在战斗初始化第 4 步,管线零布置义务) | — |
## 调参表
@@ -205,31 +157,20 @@
|---|---|---|---|
| board_width / board_height | int [8, 64] | 两档结构,现行面值见 board_gen.tres(provisional 参考行) | 图尺寸 |
| mine_density | float (0, 0.5] | 现行值见 board_gen.tres | 雷密度,与尺寸解耦 |
| inferability_target | float [0.85, 1] | 现行值见 board_gen.tres | 可推理率及格线;域下限 0.85 绝对锚 |
| solver_rules | enum {single, single_subset} | single_subset(冻结,非调参) | 推理规则域 |
| min_safe_count | int [1, 999] | 现行值见 board_gen.tres | 最小安全格数下限 |
| max_gen_attempts | int [1, 32] | 域 [1, 32],现行按行取值见 board_gen.tres | 生成-验证重试上限;受成本闸联合约束 |
| board_type | String,词表 {dungeon, underdark, deep_underdark} | 现行值见 board_gen.tres(词表 v1.1) | 图类型标签(玩家侧「地图类型」);域校验 = 词表成员检查 |
| shave_ring_radius | int [0, 2] | 现行 1(board_gen.tres 全行) | 先布后删剃雷半径:剃雷域=距出生中心切比雪夫距离 ≤1+r 的格(r=1 → 5×5=25 格;r=0 即只剃出生 3×3 本身=无环剃雷)。调参项非结构冻结 |
| r0_max_cap | int [出生格数, 板格数一半](护栏,违例加载期致命;出生格数=出生区边长自乘,读出生区行) | 现行按板形:10×10=45 / 12×12=43 / 13×13=51 / 14×14=59(board_gen.tres) | 自然 R₀(开局免费展开格数)上限闸=合法性门;超阈整板重掷、耗尽走三分出口。板面锚现行值 = 45/43/51/59(10×10 行经用户裁上调——r=1 自然均值 39>30 结构性倒挂;其余行维持 30% 锚) |
| 出生区边长 | int [3, 5],奇数(中心对称,side = 2r+1);现行值读 board_gen.tres 表头 | 表头全局单值(非逐行) | 玩家出生区为以出生中心对称的 side×side 方区,区内恒无雷;布雷域基与 r0_max_cap 护栏下限均由它导出(格数 = side²)。入表后格数零字面量 |
| 出生区边长 | int [3, 5],奇数(中心对称,side = 2r+1);现行值读 board_gen.tres 表头 | 表头全局单值(非逐行) | 玩家出生区为以出生中心对称的 side×side 方区,区内恒无雷;布雷域基由它导出(格数 = side²)。入表后格数零字面量 |
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段已移出管线)、solver_rules、可推理率的合法信息源枚举、及格线域下限 0.85、成本闸常数(结构护栏,登记在案,调整走文档修订)、先布后删语义。
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段已移出管线)、先布后删语义、出板检查只两条(出生区无雷、开局不全开)。
## 验收标准
- 确定性复现:同参数行同种子生成两遍,格状态与指标集逐位相同;换种子产物不全同。
- 出生区安全:出生 3×3 与开局免费展开域内零雷(零变异由布置段顺序保障——生成器产物恒零变异格)。
- 数字恒真:每个非危险格的数字恒等于其八邻雷数。
- 布雷纪律:N ≥ 1、实际雷数 ≤ N、实际安全格数 ≥ min_safe_count。
- 无开局白给板:开局免费展开域 ≠ 全部安全格,违例尝试弃用重试。
- 可清图:每个安全格都能从出生区沿安全格八向连通到达;合法性闸先于质量评分。
- 及格线:每张图实测可推理率 ≥ 该行及格线;任何行及格线 ≥ 0.85。
- 重试有界:实际重试次数落在 [1, max_gen_attempts];同一次生成内的重试不开新随机流。
- 成本闸:max_gen_attempts × 宽 × 高超过成本闸护栏常数(结构护栏常数,见棋盘参数表字段定义)的行加载期被拒;同种子同参数在任意机器上出图逐位一致。
- 降级诚实:零合法板照常出图,必带非法产物标记与最高级告警;进程不死锁,玩家界面得到诚实告知。
- 加载期校验:布雷数下限、计数可行性、标签非空等违例组合加载期致命。
- 黄金图回归:手工核验小板集的可推理率输出与登记整数对逐位相等(整数对比对,禁浮点容差);换生成参数(推理定义、信息源、定义版本号)必须重制向量并入版本库。
- R₀≤cap 闸:每张出图自然 R₀ ≤ 该行 r0_max_cap(合法板),或带非法产物标记(接受最不坏·诚实降级);闸触发次数入指标集 r0_cap_rejected。
- 布雷纪律:N ≥ 1、实际雷数 ≤ N。
- 无开局白给板:开局免费展开域 ≠ 全部安全格,违例同流重摇。
- 重摇同流:同一次生成内的重摇不开新随机流;重摇次数入指标集。
- 加载期校验:布雷数下限、尺寸与密度域、标签词表等违例组合加载期致命。
- 黄金图回归:手工核验小板集的整板格状态与登记向量逐位相等;换生成参数必须重制向量并入版本库。
- 剃雷域参数化:剃雷域=出生中心切比雪夫 ≤1+shave_ring_radius 的方域,出图 ring_removed ≤ 域内候选危险格数 (3+2r)²−9。
- 表实一致:配置表字段与棋盘参数表字段定义一致。
- 表实一致:配置表字段与棋盘参数表字段定义一致。
@@ -1,7 +1,7 @@
# 行动经济
> 一句话:每轮行动点怎么花、停手与刷新的代价
> 状态:已定稿;现行为 v1.7
> 状态:已定稿;现行为 v1.8
## 设计目的
@@ -180,7 +180,7 @@ action 型格面资源:正向行 ap_up = 下轮行动点 +1,负向行 ap_dra
<text x="340" y="348" text-anchor="middle" dominant-baseline="central" font-family="sans-serif" font-size="12" fill="#B5D4F4">弃图刷新=推理死路的退路,不是更划算的打法</text>
</svg>
**结论**:前四条契约由战斗结算作为唯一对账责任方闭合验收;第五条是行为说明,不设对账读数。概率侧由棋盘生成的可推理率参数锚定;条款3 数值层由 β 比值带 [1.2, 2.5] 判读看护(清图支配性审计为常设重跑项),封印边际结构层由条件二封印溢价接替(机制载体 settlement.flag_hit_premium)。
**结论**:前四条契约由战斗结算作为唯一对账责任方闭合验收;第五条是行为说明,不设对账读数。条款3 数值层由 β 比值带 [1.2, 2.5] 判读看护(清图支配性审计为常设重跑项),封印边际结构层由条件二封印溢价接替(机制载体 settlement.flag_hit_premium)。
推导:
@@ -57,7 +57,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
| 区 | 位置与几何 | 管什么 |
|---|---|---|
| B 战斗画面 | 全宽,高读布局表 `stage_h`(背景三关变体+连续地面层高另读 `ground_h`) | 三关舞台背景+连续地面层、主角站桩立绘、敌人站桩立绘 ×1–3(**全站桩形态,2026-09-20 用户拍板:无框立绘+底座、状态小图标挂血条下,英雄卡/敌人卡退役**)、轮次阶段指示、结算明细带 |
| B 战斗画面 | 全宽,高读布局表 `stage_h`(背景三关变体+连续地面层高另读 `ground_h`) | 三关舞台背景+连续地面层、主角站桩立绘、敌人站桩立绘 ×1–3(**全站桩形态,2026-09-20 用户拍板:无框立绘+底座、状态小图标挂血条下,英雄卡/敌人卡退役**)、轮次阶段指示(结算明细带已退役,2026-11-10 用户裁——B 区零文字带,规格见 [battle.md](../../../ux/battle.md)「即时反馈画面化预览」节) |
| C 角色信息 | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 生命 / 攻击 / 储备数据框、状态效果槽、小人立绘 |
| D 扫雷图 | 中下,宽 = 基准屏宽 − C 区宽 − 列间距,高同 C 区(2026-11-07 顶栏搬两侧:D 区全高归棋盘) | 左/右行动资源侧栏、棋盘本体、toast 槽(棋盘底常驻操作提示条退役) |
@@ -80,7 +80,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
### 提示与弹层:轻提示随起随消、重弹层排队进出
界面弹出的东西分两族。toast(从棋盘区上缘内侧浮出的轻提示条)是非模态的:弹出期间玩家照常操作棋盘,约 2.5 秒自动消退、不劫持输入。模态覆盖层(弹出期间挡住下方操作、要先处理才能继续的那种弹层)则相反,图例面板、结算明细回看、胜负终局画面都属于这族。
界面弹出的东西分两族。toast(从棋盘区上缘内侧浮出的轻提示条)是非模态的:弹出期间玩家照常操作棋盘,约 2.5 秒自动消退、不劫持输入。模态覆盖层(弹出期间挡住下方操作、要先处理才能继续的那种弹层)则相反,图例面板、胜负终局画面都属于这族(结算明细回看覆盖层已随明细带退役报废,2026-11-10 用户裁)。
| 弹出物 | 模态性 | 进出规则 |
|---|---|---|
@@ -195,12 +195,12 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
|---|---|---|
| 上游 | [排雷玩法](../排雷循环/排雷玩法.md) | 棋盘只读投影(格态、数字、封印印记、小人)与移动路径查询;玩家意图批次经组合根提交 |
| 上游 | [行动经济](../排雷循环/行动经济.md) | 行动点 / 储备 / 相位只读值;刷新入口可用性预判加返回值兜底 |
| 上游 | [战斗结算](../战斗循环/战斗结算.md) | 明细流水是结算明细带的统一数据源(现行 9 类行封闭协议);段序编排信号经组合根接线 |
| 上游 | [战斗结算](../战斗循环/战斗结算.md) | 明细流水 9 类行封闭协议(明细带已退役——流水消费面=日志落盘与回放对账,HUD 不再消费);段序编排信号经组合根接线 |
| 上游 | [敌人系统](../战斗循环/敌人系统.md) | 英雄与敌人的只读投影(血量、顺位、摇定动作〔技能标识·类型·名称〕、敌方增益、存活——经战斗结算呈现快照;敌人技能池定稿:当前拍/行动环进度字段拆除,池与权重不公开) |
| 上游 | [增益状态](../战斗循环/增益状态.md) | 状态投影经战斗结算呈现面取得,零直读 |
| 上游 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 已开格奖励身份投影(只读回调,组合根注入)零直读 |
| 上游 | [关卡节点地图](../冒险循环/关卡节点地图.md) | 节点链、当前节点、跨战斗生命携带的读数;胜利后推进 |
| 下游 | [战斗表现](../战斗循环/战斗表现.md) | 交付三区布局、明细带呈现位、敌人呈现语义(站桩形态);它只叠加动画密度与演出 |
| 下游 | [战斗表现](../战斗循环/战斗表现.md) | 交付三区布局、敌人呈现语义(站桩形态);它只叠加动画密度与演出(明细带呈现位随带退役,2026-11-10 用户裁) |
| 下游 | [音频](音频.md) | 挂点事件源(明细行类型流、toast 触发);MVP 无音频 |
| 下游 | [教学引导](教学引导.md) | toast 与图例面板两个承载位——教学内容装进这两个容器 |
| 下游 | [设置与本地化](设置与本地化.md) | 中文字体随包、按钮宽度等契约的消费方 |
@@ -225,7 +225,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
1. 进入战斗屏:三区同屏就绪,半秒内首格可点。
2. 挖掘期鼠标操作经单意图帧整批提交(唯一写路径,经组合根)。
3. 回执链:组合根重查只读面,界面字段级就地刷新。
4. 轮末进入结算:棋盘区锁输入,明细带展开逐行兑现(战斗结算流水驱动)。
4. 轮末进入结算:棋盘区锁输入,结算演出在棋盘与立绘上逐段兑现(战斗结算段序驱动;明细带已退役)。
5. 终局呈现(胜利 / 失败)伴随状态全清与储备清零反馈。
6. 关卡末清库反馈:义务载体 = 秘宝背包(关卡域库存——秘宝过渡形态机械惰性承载,投放渠道全退役后恒空;拆线归实装批,见[战斗结算](../战斗循环/战斗结算.md)「轮次生命周期」节注)。
@@ -244,7 +244,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
## 调参表
本系统的参数全部是呈现节奏与可读性常量,不是玩法数值——玩法数值一律归[数据配置](数据配置.md)的表,与本表无关。修订本文常量走文档修订流程。**本表常量无数据表承载,为文档面唯一事实源;入驻 .tres 时本列改指路。** 布局几何(B 区高 / B 区连续地面层高 / C 区宽 / D 区侧栏宽 / 明细带两态高)已入驻 `game/data/tables/battle_layout.tres`,不在本表重复。
本系统的参数全部是呈现节奏与可读性常量,不是玩法数值——玩法数值一律归[数据配置](数据配置.md)的表,与本表无关。修订本文常量走文档修订流程。**本表常量无数据表承载,为文档面唯一事实源;入驻 .tres 时本列改指路。** 布局几何(B 区高 / B 区连续地面层高 / C 区宽 / D 区侧栏宽 / 明细带两态高〔已不被游戏视图读取,字段删除归工具批〕)已入驻 `game/data/tables/battle_layout.tres`,不在本表重复。
| 参数 | 域 | 现行值(文档自持,无表承载) | 说明 |
|---|---|---|---|
@@ -1,7 +1,7 @@
# 数据配置
> 一句话:数值表与单一事实源管线
> 状态:已定稿;现行为 v1.4
> 状态:已定稿;现行为 v1.5
## 设计目的
@@ -57,7 +57,7 @@
| 表 | 载什么 | 回填责任方 |
|---|---|---|
| 行动经济表 | 每轮行动点、动作价目、停手与刷新门槛 | [行动经济](../排雷循环/行动经济.md) |
| 棋盘生成参数表 | 板尺寸、雷密度、可推理率目标等(进度键表) | [棋盘生成](../排雷循环/棋盘生成.md) |
| 棋盘生成参数表 | 板尺寸、雷密度、图类型等(进度键表) | [棋盘生成](../排雷循环/棋盘生成.md) |
| 变异表 | 变异类型清单(现行六行:region 六行两轴×三关;global 整图型贫矿脉行已删,global 型机制代码保留) | [地形变异](../排雷循环/地形变异.md) |
| 敌人表 | 敌种基线数值、遭遇数量区间、护甲类型、技能池模板(进度键表) | [敌人系统](../战斗循环/敌人系统.md) |
| 技能表 | 技能行定义(类型/倍率/冷却/增益引用/触发条件)与保底阈值 | [敌人系统](../战斗循环/敌人系统.md) |
@@ -1,7 +1,7 @@
# 设置与本地化
> 一句话:设置项与多语言
> 状态:范围草案·最小设置面已兑现;现行为 v1.2
> 状态:范围草案·最小设置面已兑现;现行为 v1.3
## 设计目的
@@ -20,7 +20,7 @@
| 设置项清单与语义 | 收拢全游戏的可调选项;目前能确证的输入见核心规则一节,全集待设计 |
| 减动效开关 | 可访问性基线已承诺的选项:开启后动画有时长减半或直达终态的通路 |
| 音量控制入口 | 音量在设置里调(接口位,白话:给对方预留的接入位置;生效侧归音频系统) |
| 多语言生产流程 | 全部玩家可见文案的翻译生产与语言切换——教学引导已在"不负责"表登记归本文 |
| 多语言生产流程 | 全部玩家可见文案的翻译生产与语言切换——教学引导已在"不负责"表登记归本文;文案承载细则(key 单点、strings.csv 承载)已闭合,归 `design/engineering/code-conventions.md` §2.5 |
| 调试面板退役后的常规设置 | 切片调试面板 TunePanel 正式版退役,其常规设置部分归本文(见核心规则) |
不负责:
@@ -119,6 +119,6 @@ MVP 不要求本系统的闭环:[不做清单](../../05-不做清单.md)把设
1. 设置项全集:画面、键位、可访问性、语言各类别各收哪些项——目前有来源的只有减动效与音量入口两条。
2. 设置持久化(已拍板 2026-09-19):独立存储,不随存档——系统级设置一安装一份;具体文件格式与读写时机随存档序列化对齐(设置域归本系统所有)。
3. 语言清单与字体覆盖:做哪些语言,字体对相应字符集的覆盖怎么保证。
4. 文案生产流程:文本键(每条文案在工程里的唯一编号,机器据此找到译文)怎么管理、谁负责校对、翻译在流程的哪一步介入。
4. 文案生产流程:文本键(每条文案在工程里的唯一编号,机器据此找到译文)的管理规则已闭合——文案 key 单点、文案值住 strings.csv(data/l10n/),细则 = `design/engineering/code-conventions.md` §2.5;尚待设计的是谁负责校对、翻译在流程的哪一步介入。
5. 设置界面的入口与形态:从哪里打开、什么时刻可以打开——与 HUD 框架协作定。
6. 键位映射表是否转化为改键设置项。
+3 -14
View File
@@ -1,7 +1,7 @@
# 秘宝
> 一句话:营地装配、整局冒险生效的角色机能件——操作包络加强(视野/行动点/刷新/挖掘距离等),不出角色战斗属性值、不改战斗结算机制(经济与操作参数——视野/距离/行动点/刷新/转存率——属操作包络;分界规则归[核心循环](../../01-核心循环.md)「道具三层职责与分界」节)
> 状态:已定稿(现行形态=局外同调件);现行为 v1.3
> 状态:已定稿(现行形态=局外同调件);现行为 v1.5
> 定位与形态:见下节
> 术语:本文件的项目术语(同调位/RAP/GP/真视/危险格/整图等)定义见[术语表](../../术语表.md)
@@ -145,18 +145,7 @@
凡是"直接告诉你危险格在哪"的效果(下文称真视),一次最多照亮 3×3 的窗口,任何道具都不允许全图看雷。全图级范围只留给恢复推理原料类的效果——显影、预读这类把已有事实交还玩家的信息,允许大范围(原则上被允许,见不做清单的边界锚)。这条限制写进数据校验:任何真视类道具的目标域字段超过 3×3,加载数据时直接返回错误并拒绝——护栏由加载期强制,不靠运行时拦截。
**道具的收益在"少赌",不在"单赌更安全"**:信息类道具不改变棋盘,只减少玩家必须盲赌的次数。真视把 k 格移出盲挖候选域——这 k 格从"要赌"变成"必避或必封印"的确定决策;情报类道具抬高棋盘可推理率,收缩"只能赌"的格子池。单次盲赌的命中率会随格子池收缩而上升,这是正常读数——收益按"赌的次数变少、期望踩雷下降"计,不按单次命中率计。
```
残余盲赌安全格数 n_s = (1 − ι) × |S|
单次盲赌踩雷概率 P(雷) = |M| ÷ (|M| + n_s)
```
| 变量 | 含义 | 来源 |
|---|---|---|
| ι | 棋盘可推理率(不必赌、可直接推理开挖的格子占比) | [棋盘生成](../排雷循环/棋盘生成.md)的整图实际值 |
| \|M\| / \|S\| | 板上危险格数 / 安全格数 | 棋盘事实 |
| n_s | 推理覆盖之外、只能盲赌的安全格数 | 上式派生 |
**道具的收益在"少赌",不在"单赌更安全"**:信息类道具不改变棋盘,只减少玩家必须盲赌的次数。真视把 k 格移出盲挖候选域——这 k 格从"要赌"变成"必避或必封印"的确定决策;情报类道具收缩"只能赌"的格子池。收益按"赌的次数变少、期望踩雷下降"计,不按单次命中率计。
设计意图一句话:恢复推理的效果可以大,代替推理的效果必须小而贵——花钱全图看雷,等于把扫雷换成走格子。定量当量换算归[战斗结算](../战斗循环/战斗结算.md)的效果对照表,MVP 不入表。
@@ -236,7 +225,7 @@
结构冻结(非调参项,改动走本文修订流程):真视窄域护栏、零信息目标不消耗、边缘窗口照常受理、使用零行动点成本、同调位装配与充能每冒险重置、用后不可逆、零随机。
效果声明形态(在役沿用):被动件的效果行为=**订阅行**——行内声明**订阅哪个事件(on)/ 什么条件(when)/ 什么效果(do)**,由效果引擎统一解释执行;主动件按效果类型通用分发(受理闸=使用事件订阅);常时参数面件(阔视野带/储备罐/远程镐/信标网络/刷新练习/刷新执照六件)effect_kinds 挂参数 kind、由注入面按装配集分发读取;试炼镐=自动兑付(ap_charge_safe 满 charge_n 直接 grant_ap)。事件/效果类型/条件事实/算子四词表封闭(效果引擎单一事实源);卡面效果摘要=行 `desc` 字段直读(文案表值化)。现行目录 14 件的效果行已落地登记。
效果声明形态(在役沿用):被动件的效果行为=**订阅行**——行内声明**订阅哪个事件(on)/ 什么条件(when)/ 什么效果(do)**,由效果引擎统一解释执行;主动件按效果类型通用分发(受理闸=使用事件订阅);常时参数面件(阔视野带/储备罐/远程镐/信标网络/刷新练习/刷新执照六件)effect_kinds 挂参数 kind、由注入面按装配集分发读取;试炼镐=自动兑付(ap_charge_safe 满 charge_n 直接 grant_ap)。事件/效果类型/条件事实/算子四词表封闭(效果引擎单一事实源);卡面效果摘要=行 `desc_key` 经 strings.csv 取文案(code-conventions §2.5)。现行目录 14 件的效果行已落地登记。
playtest 预警(预注册,归难度曲线与Boss):
@@ -1,7 +1,7 @@
# 锻造工坊
> 一句话:营地的武器与护甲成长——武器锻造区三条路线、护甲锻造区三条路线各练各的,钥石消费,一次冒险各选一件,满级特效留位本期不做
> 状态:**v0.13**——全部数值 provisional,终值归 Alpha 收官 M4 数值批〔未排期〕
> 状态:**v0.14**——全部数值 provisional,终值归 Alpha 收官 M4 数值批〔未排期〕
## 设计目的
用户原案(playnote 2026-10-06):把现役"营地花钱买攻击 +1"改造成有等级、有成长、有满级特效的**武器升级路线**;新增长枪(穿刺)与法杖(魔法)实现武器间差异化;护甲同理——初始只有轻甲(升级只提 AC),最高等级后解锁重甲/魔法护甲,基础 AC 各异、各带满级特效。
@@ -126,10 +126,10 @@
- **奇物属性件**:分层并存,互不侵入。武器/护甲锻造动的是**账号层基础值**(营地永久强化,冒险开始时经参数面传入);奇物属性件动的是**单次冒险加算区**(关间不清零、冒险结束清零)。本设计不扩奇物"生命/AC/攻击"三轴封闭分类、不动渠道开关表、不往局内池加任何东西。入战 AC 的三层语义清晰可加:甲型基础 AC + 营地甲路线等级加值 + 局内加算区累加。
- **克制矩阵(2a 裁:伪裁点消解)**:**伤害结算只有一套,类型不是待仲裁的槽位**。每份伤害单据自带攻击类型栏——主角基础攻击单据取当前武器的攻击类型,棋盘格面直伤件(穿刺弹 / 魔法矢)取奖励表自身的类型——各自按**同一张 3×3 克制矩阵**取克制修正。因此"叠加 / 替代 / 互斥"三分法不成立:两根参数之间无冲突可裁,也不需要任何共存规则。二者的真实差异只在**单据形态与生命周期**(主角基础攻击走掷点折扣 + 暴击;棋盘克制直伤走必中全额不掷点;且前者 = 账号层永久、后者 = 局内一次性)——那是两条不同的伤害来源,不是两种类型语义。矩阵九格满格结构冻结(2b 随 3a 自动消解:魔法护甲 = 现役 ward,不存在第四甲型)。
- **工作间两区定名 + 路线行名(8a 裁)**:锻造工坊工作间内先立两个分区,各装三条锻造路线(路线行名统一为"件名 + 锻造")——①**武器锻造区**:长剑锻造 / 长枪锻造 / 法杖锻造;②**护甲锻造区**:轻甲锻造 / 重甲锻造 / 魔法护甲锻造。两区并列、机制层面零顺序门槛(A③ 裁),区内路线各自独立升级。
- **局内不存在武器/护甲的提升(8a 裁连带核结)**:用户指出"局内没有可以提升武器的地方"——**属实**。查实:局内商店货架的三行(现名"攻击祝福 / 生命祝福 / 护甲祝福"),**正是奇物「属性值提升」三轴(攻击 / 生命上限 / AC)的货架前台标签**——`shop.tres` pool_shelf 六行用种类字段指向冒险表的奇物种类词表(其中凭证行为显式豁免种、不入该词表,六行中五行命中),`display_name` 只是这层的前台名;买到的东西进**冒险加算区**、冒险结束清零。所以它们是**奇物属性件**,既不是武器也不是护甲,局内不改变任何锻造等级。命名上的隐患确凿:行名里的"锻"字与营地锻造同字,是误读的直接来源。**命名(2026-10-12 用户裁)**:三行按「属性 + 后缀」改名,后缀取 **祝福** ⇒ **攻击祝福 / 生命祝福 / 护甲祝福**(D&D 参照调研:Blessing 为"神赐恩惠"义;用户同时裁定——参考书目里出现过「祝福」一词不构成禁用)。**改名后这三条在语感上彻底脱离"锻造"一词,与营地工作间不再有字面关联**,而结构关系不变(仍是奇物「属性值提升」三轴,机制分类名不动,只改玩家向显示名)。改名已执行完毕(shop.tres 六行锻升→祝福;reward.tres / status_effects.tres 护甲强化→盾牌加护)。
- **局内不存在武器/护甲的提升(8a 裁连带核结)**:用户指出"局内没有可以提升武器的地方"——**属实**。查实:局内商店货架的三行(现名"攻击祝福 / 生命祝福 / 护甲祝福"),**正是奇物「属性值提升」三轴(攻击 / 生命上限 / AC)的货架前台标签**——`shop.tres` pool_shelf 六行用种类字段指向冒险表的奇物种类词表(其中凭证行为显式豁免种、不入该词表,六行中五行命中),`display_key` 只是这层的前台名索引(文案值住 strings.csv,code-conventions §2.5);买到的东西进**冒险加算区**、冒险结束清零。所以它们是**奇物属性件**,既不是武器也不是护甲,局内不改变任何锻造等级。命名上的隐患确凿:行名里的"锻"字与营地锻造同字,是误读的直接来源。**命名(2026-10-12 用户裁)**:三行按「属性 + 后缀」改名,后缀取 **祝福** ⇒ **攻击祝福 / 生命祝福 / 护甲祝福**(D&D 参照调研:Blessing 为"神赐恩惠"义;用户同时裁定——参考书目里出现过「祝福」一词不构成禁用)。**改名后这三条在语感上彻底脱离"锻造"一词,与营地工作间不再有字面关联**,而结构关系不变(仍是奇物「属性值提升」三轴,机制分类名不动,只改玩家向显示名)。改名已执行完毕(shop.tres 六行锻升→祝福;reward.tres / status_effects.tres 护甲强化→盾牌加护)。
- **专长联动**:现役专长均为跨攻击类型通用件(不按 attack_type 分系——既无 normal 条件件、也无 pierce/magic 条件件,`feats.tres` 29 行实证),武器类型差异只经克制矩阵的 matchup 行体现;「选某类型激活某系专长」在本项目专长体系下不成立。现有死条件 `magic_vs_magic`(魔法打"魔法甲"——现行甲域无此型,永不可触发 = 废卡):**复活作废**——所属件魔网织者在素材库表二退役名单,该行已随专长退役消解,本系统零触碰。「魔法打魔法护甲」的克制语义由矩阵九格承载(magic vs ward = −1),新专长框架如需同类件 = 彼批的新卡设计题。
- **天赋树**:同钥石经济;注入面分层叠加且**所有权切分**(2026-10-11 裁)——树脊柱只持生命/命中淬炼(树零攻防来源),攻/AC 唯一入口=本系统路线加值(只按当前选中武器/甲生效)。
- **冒险前资源配比预设批(挂起冻结中)**:本设计不预设该批的重启口径、不占用其任何冻结裁决、不改其冻结文本。该批重启时须显式核对两处交汇面:①预算包络是否把武器类型计入克制注;②容量柜台与锻造工坊工作间(同在营地)的资源竞争关系。
- **冒险前资源配比预设批(已退役)**:2026-11-09 用户裁该提案不做,原案留底见 [冒险前资源配比预设退役素材库](../../../content-archive/冒险前资源配比预设退役素材库.md);本设计不再挂该批的重启口径与两处交汇面核对义务。
## 裁决结果清单
+8 -1
View File
@@ -1,7 +1,7 @@
# 术语表
> 全库专用术语的唯一对照表(2026-10-11 用户令建立)。规矩:新术语先登记本表、再在文档使用;退役词见文末对照表,文档正文一律使用现行词。文档中遇到看不懂的词,查本表。用词纪律(禁用词、替换值、豁免范围)见「用语规范」节。
> 状态:**现行 v1.29**——2026-10-11 建立;历次升版明细见 git 提交史。
> 状态:**现行 v1.30**——2026-10-11 建立;历次升版明细见 git 提交史。
## 格与棋盘
@@ -122,6 +122,13 @@
| 逐需求点验收清单 | 需求卡片验证闸的必备清单:每个需求点列明测什么(具体断言或行为)/怎么测(测试落点与注入方式)/谁验(自动闸或用户目检);查不出验收条目的需求点=卡片不成立(规矩见 req-card 技能,测试落码写法见 [code-conventions](../engineering/code-conventions.md) §3.5) |
| 测试方式两分法 | 能力验证与体验验证分开走(2026-10-11 用户定):能力验证=通过调试接口直接修改游戏数据(改钥石/槽位/解锁状态等,不走正常资源积累流程);体验验证=用户目检完整流程,登记体验验证清单观测项 |
## 文案承载(2026-11-09 用户裁立)
| 术语 | 定义 |
|---|---|
| 文案 key | 玩家可见文案的唯一索引键(点分命名如 `clear_reward.title`):数据表行与代码只持 key,文案值住 strings.csv(data/l10n/,key 列+`zh_CN` 列),取文案走承载细则的单点接口;硬纪律原文 = [code-conventions](../engineering/code-conventions.md) §2.5 |
| strings.csv | 文案值的唯一承载文件(data/l10n/strings.csv):第一列文案 key、第二列中文文案,Alpha 单中文列;加语言=加列,多语言生产仍归[设置与本地化](systems/表现与支撑/设置与本地化.md)后置排期 |
## 用语规范(2026-10-15 用户令立)
词面纪律的登记处。通用禁用词与选词以**简明技术中文(STC)词表**为权威:外部同名词表,约 170 条,配检查脚本。