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

+2 -1
View File
@@ -3,6 +3,7 @@
> **性质**:表现层升级批与战斗表现批的生产侧清单——把散在战斗表现 / HUD框架 / 关卡节点地图 / 敌人系统里的资产需求收拢成一张可执行的工单视图,**兼资产维度单一登记处**。**规范效力归各 owner 文档**(战斗表现、美术圣经、04-美术音频方向),本文只补「生产视角的需求规格」,冲突时以 owner 文档为准。
> **建立**:场景一(战斗画面呈现)讨论产物;本文为唯一清单。历次修订明细见 git 提交史。
> **更新纪律**:各条目「现状」行顺带更新(未开始 / 候选已出 / 已裁决 / 已交付);做完不删条目,改状态。与待办清单的联动:本文是资产维度明细,待办清单只留指路存根。
> **状态**:现行为 v1.0(2026-11-01)。
## 0. 生产渠道、规格与风格宪法
@@ -94,7 +95,7 @@
- **风格/规格**:三档在**灰度/剪影层也可辨**(双通道纪律);每档动画时长与结算节拍对齐(预告时序 = 下一拍、挖掘期全程可见)。
- **联动**:HUD框架「意图徽标不预告技能名与数值」条款由本拍板承接为动画承载(文字与技能名彻底退出);战斗表现「特殊技两型动画」输入清单按三档改写;映射按 enemy_id 全局恒定(跨 run 禁重掷);契约锚 = art-bible §4.6.4 意图姿态行。
- **来源**:✦/⚙ 自产——三档表演层挂在我们自己的精灵图上,动画本体不可复用;通用蓄力/施法光效素材(♻)仅可作参考与粒子底料,过复用闸。
- **现状**:占位符号已落地(普通攻击「—」/ ⚔ / ✦ / 重击类「蓄力」,技能名退出徽标);终稿动画待样张后开工。
- **现状**:占位符号已落地(普通攻击「—」/ 伤害技 ⚔ / 增益技 ✦ / 妨害技 ☠——攻击系内部分档不作预告,重击与普通伤害技同呈现,技能名退出徽标);终稿动画待样张后开工。
---
+3 -2
View File
@@ -2,6 +2,7 @@
> **性质**:美术圣经 §5(角色设计)的独立承载文档——**人设高频改动、独立成档免动圣经**;圣经 §5 自此为引用存根指向本文件,**小节号 §5.1–§5.6 沿用不变**(跨文档引用经圣经 §5 存根仍可达,新引用直指本文件)。
> **边界**:本文件只定角色呈现;角色承载的机制语义(护甲克制矩阵、技能与状态)以 GDD 为准(敌人系统/增益状态/战斗结算)。色彩系统、形状语言总纲引用美术圣经 [art-bible](art-bible.md) §4/§3,冲突以圣经为准。提示词执行侧(可直贴串)归 [art-prompts](art-prompts.md),本文件是它的规格上游。
> **状态**:现行为 v1.0(2026-11-01)。
---
@@ -21,7 +22,7 @@
## 5.2 头身比与体量档位
- **头身比**:全角色 2~3 头身(chibi)两档——小人剪影须在两档下均成立(§5.1);敌种按 archetype 取档,同一敌种恒定一档(enemy_id 键恒定纪律,圣经 §4.6.4)。←风格基调
- **体量档位 = 生物体型通道(原「强度先验·普通 < 精英 < Boss 单调递增」读法已弃用)**:体量按**物种天性**定,禁按强度档位线性映射——小体型精英与大体型普通怪并存(锁定实例:钩爪恐魔 > 灰矮人、灰矮人 < 熊地精、食人魔酋长 > 熊地精);「大个子多半有重击」的强度先验读法改由意图徽标(§5.6)与甲档(§5.3)承担,体量不再报强度;图像不报数,精确数值只在结算明细。
- **体量档位 = 生物体型通道(原「强度先验·普通 < 精英 < Boss 单调递增」读法已弃用)**:体量按**物种天性**定,禁按强度档位线性映射——小体型精英与大体型普通怪并存(锁定实例:钩爪恐魔 > 灰矮人、灰矮人 < 熊地精、食人魔酋长 > 熊地精);「大个子多半有重击」的强度先验读法改由意图准备动画(§5.6)与甲档(§5.3)承担,体量不再报强度;图像不报数,精确数值只在结算明细。
- 像素画布/精灵尺寸**不在本节**——归圣经 §8 资产规范;本节只锁比例关系与档位次序。
## 5.3 护甲类型视觉区分
@@ -77,6 +78,6 @@
- **三档**:① 普通攻击 = 常态待机(待机即预示,零独立资产);② 攻击技能 = 特殊准备动画(放光/高举武器等"摇号感"动作);③ 重击/硬化类 = 蓄力动作或防御姿态。
- **双通道纪律**:三档在灰度/剪影层可辨(色弱安全,圣经 §4.5 同款要求)。
- **呈现纪律**:不显示文字与技能名(文字与技能名彻底退出预告);映射按 enemy_id **全局恒定、跨 run 禁重掷**;预告时序 = 下一拍,挖掘期全程可见,结算不另设独立意图播片。契约锚 = 圣经 §4.6.4 意图姿态行。
- **终稿帧规格**(帧数/时长/结算节拍对齐)归圣经 §8 资产规范与战斗一屏样张(清单 §2.3);占位符号(—/⚔/✦/蓄力)现行使用,动画到位后原位替换。
- **终稿帧规格**(帧数/时长/结算节拍对齐)归圣经 §8 资产规范与战斗一屏样张(清单 §2.3);占位符号(—/伤害技 ⚔/增益技 ✦/妨害技 ☠——攻击系内部分档不作预告)现行使用,动画到位后原位替换。
---
@@ -0,0 +1,32 @@
# 冒险前资源配比预设退役素材库
> 所属线=跨局循环(元进度·冒险开始参数面)。退役内容留底(活文档,落 `design/content-archive/`,身份判据见 doc-conventions §11)。来源=原待办清单「冒险前资源配比预设(构筑提案)」条(2026-09-18 登记,来源=会话提及)。
> 用途:已退役的构筑提案留底,供日后重新过准入时查证。本文件不是待办——不排期、不占迭代;重启须用户发令立项,按现行元进度与冒险开始参数面口径重走设计讨论,不默认继承原案。
## 原案
**机制**:[元进度](../gdd/systems/跨局循环/元进度.md)「冒险开始参数面与覆盖值通道」——零新机制。玩家在冒险开始前调整资源配比,经既有参数面注入开局。
**裁决与挂起**:八项裁决 2026-10-04 全裁;2026-10-05 起挂起,重启须用户另行发令。立项提案与需求卡片已于 2026-11-04 按用户令删除,八项裁决与全案依据随件入 git 历史可考。
**原启用条件**:用户发令重启(挂起冻结期内零动作);原条带两条特批——〔用户特批 2026-11-04 退役卡片与提案回退待写卡〕〔用户特批 2026-11-05 后置 Beta——Alpha 阶段不排期〕。
**原状态**:文档设计已闭合+待写卡(备选)。原改动面=文档。
**原关联文档清单**:
- [元进度](../gdd/systems/跨局循环/元进度.md)(设计闭合凭据;现行 v1.25 已复核在役)
- [地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md)(基础配比的权重覆盖语义)与 [元进度](../gdd/systems/跨局循环/元进度.md)(解锁容量与注入生产者)共裁
- 呈现面归 [HUD 框架](../gdd/systems/表现与支撑/HUD框架.md) 与 [教学引导](../gdd/systems/表现与支撑/教学引导.md)
## 交汇面(原锻造工坊边界条留底)
原 [锻造工坊](../gdd/systems/跨局循环/锻造工坊.md)「与相邻系统的边界」节为该批挂了两处重启核对项,随提案退役一并迁此留底:
1. 预算包络是否把武器类型计入克制注。
2. 容量柜台与锻造工坊工作间(同在营地)的资源竞争关系。
原条口径=本设计不预设该批的重启口径、不占用其任何冻结裁决、不改其冻结文本。
## 退役裁定
2026-11-09 用户裁「这个东西现在也不做了」——Alpha 与 Beta 均不做;待办清单条目整条删除,[08-Alpha版本标准](../gdd/08-Alpha版本标准.md)「六 · Alpha 不含」条与锻造工坊边界条改指本文件。现行事实源仍为 [元进度](../gdd/systems/跨局循环/元进度.md) 与 [08-Alpha版本标准](../gdd/08-Alpha版本标准.md);本文件不构成现行设计,不得据此开卡、不得据此重启。
@@ -0,0 +1,14 @@
# 格面资源池退役素材库
> 所属线=地图战斗资源(格面资源池)。退役内容留底(活文档,落 `design/content-archive/`,身份判据见 doc-conventions §11)。来源=原待办清单「袋装摇号」条(2026-10-07 登记,来源=会话提及)。
> 用途:已退役的格面资源池结构备选留底,供日后重新过准入时查证。本文件不是待办——不排期、不占迭代;重启任何一件须用户发令立项,按现行摇号结构与保底口径重走设计讨论,不默认继承原案。
## 袋装摇号(格面资源池结构备选)
**原案**:装板时按各档配额数好牌再洗开发放,一格发一张;相对现行「逐格摇号 + 摇完整板校验补签」,保底天然成立、各档分布精确。
**原启用条件**:保底登记型增多、补签逻辑复杂化时。
**代价**:摇号结构重写;订阅加权与 board_skew 两路权重投影须改为按袋面张数投影。
**退役裁定**:2026-11-09 用户裁——Alpha 阶段与 Beta 阶段均不做,待办清单条目删除,想法只在此留底。现行结构继续以 [地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md)「四档概率结构与保底」节为事实源;本文件不构成现行设计,不得据此开卡。
+3
View File
@@ -56,6 +56,9 @@
### 2.4 状态字段语义显式
跨战斗/跨场景携带或恢复的状态字段,其语义来源必须显式(表值 / 明确入参),禁止用入参隐式定义。
### 2.5 玩家可见文案承载——key 单点,文案值住翻译文件
玩家看得见的文字(界面标签、toast、明细行显示名、卡面摘要等)一律两件分离:**文案值只住 `game/data/l10n/strings.csv`**(key 列+`zh_CN` 列,加语言=加列),代码与数据表行只持**文案 key**(全库唯一,点分命名如 `clear_reward.title`);取文案只经 `tr()`(Node 语境)/`atr()`(非 Node 语境),禁在 `.gd`/`.tscn` 内联写死文案字串,禁把文案值塞进 `data/tables/*.tres`(数值表只管数值)。场景静态 `text` 按 key 写入、经 Godot 场景自动翻译解析;数据表文案字段更名 `display_key`/`desc_key`(值域=文案 key,不是文案本身)。豁免面:开发者诊断文字(`push_error`/`assert`/日志)与 `game/sim`/`game/probe`/`game/tests` 的文字不属玩家可见面,不受本条约束。
---
## 3. 测试纪律
+1 -1
View File
@@ -23,7 +23,7 @@
|---|---|---|---|
| 一·登记 | 无(闸管格式) | 待办清单条目 | 条目=标题登记元数据(日期/来源/可选优先级)+正文四属性(实况/缺口/改动面/状态);标题登记后不再变,正文随进程演进。格式与状态机权威=doc-conventions 第 12 节 |
| 二·文档设计/美术设计 | doc-design(文档线,兼任反哺点写入)/asset-ingest(美术录入;样张素材由用户主导产出) | GDD 文档或 art-bible/过审样张素材;画面类需求另出预览图(文档线,2026-11-05 用户裁) | 用户提起或从待办清单取出;会话内进行、用户主导、禁无监管自跑;经用户点头确认心智一致才许写入文档;完成判据=待裁点清零,带未裁点的是讨论稿;设计线闭合凭据记入待办清单实况清单(文档线=文档路径+版本号,美术线=art-bible 条款版本);缺哪条线写在缺口属性,闭合与否写在状态段。画面类需求(新增画面要素/布局/配色/动效等触碰画面呈现规格的改动)设计段先出预览图=目标画面的 HTML/SVG 效果图(diagram-design 通道,AGENTS.md 图优先的同款载体),经用户人审通过才许进写卡段;预览图内嵌对应 ux/ 规格文档并随附像素级视觉判据句(§7 第 2 条同款写法);缺陷修复以现行规格与在库基线为准,不触发新预览 |
| 三·写需求卡片 | req-card | 需求卡片 | 设计线闭合后用户发令;新玩法/新系统/新内容必须有设计定稿前置,例外=需求性工程条目(缺陷修复/重构等改游戏行为)凭实况里的证据指认跳过设计线;配套维护类(工程债/测试基建/工具维护,不动游戏行为)=工程改动直改类,不走本段,由用户发令直改;卡片必经 grilling 多轮复核、零待裁点才成立;复核发现按四类去向处置(2026-11-05 用户立规,定义在 req-card 技能「复核发现四类分流」:自判=查权威文档或查代码现状有唯一答案,复核者自己下结论改卡;补写=卡里漏写,回炉补全;待裁=几种做法都不违规且代价不同、影响玩法取向,才交用户;退回上游=文档设计线未闭合、美术设计线未闭合、或架构与代码规范本身冲突,停笔退对应段);成立凭据=卡内「复核记录」节(2026-11-06 用户裁:不另设复核报告文件),顺序未走完禁对用户称完成、禁落 commit(同 §1 第 2 条卡片复核前置判据);写完在待办清单状态记「已写卡」,卡片路径记入实况清单(防遗忘);画面类需求卡片必引设计段已人审的预览图(验收判据的判据出处行锚指向 ux/ 内嵌预览节,test-conventions §8.3 锚口径不变) |
| 三·写需求卡片 | req-card | 需求卡片 | 设计线闭合后用户发令;新玩法/新系统/新内容必须有设计定稿前置,例外=需求性工程条目(缺陷修复/重构等改游戏行为)凭实况里的证据指认跳过设计线;配套维护类(工程债/测试基建/工具维护,不动游戏行为)=工程改动直改类,不走本段,由用户发令直改;卡片必经 grilling 多轮复核、零待裁点才成立;复核发现按四类去向处置(2026-11-05 用户立规,定义在 req-card 技能「复核发现四类分流」:自判=查权威文档或查代码现状有唯一答案,复核者自己下结论改卡;补写=卡里漏写,回炉补全;待裁=几种做法都不违规且代价不同、影响玩法取向,才交用户;退回上游=文档设计线未闭合、美术设计线未闭合、或架构与代码规范本身冲突,停笔退对应段);成立凭据=卡内「复核记录」节(2026-11-06 用户裁:不另设复核报告文件),顺序未走完禁对用户称完成、禁落 commit(同 §1 第 2 条卡片复核前置判据);写完在待办清单状态记「已写卡」,卡片路径记入实况清单(防遗忘);画面类需求卡片必引设计段已人审的预览图(验收判据的判据出处锚指向 ux/ 内嵌预览节,test-conventions §8.3 锚口径不变) |
| 四·迭代编排 | iter-plan | roadmap 迭代行 | **开工前预检(2026-11-07 用户立)**:收令点名拟编卡集后、五查与落表前,对卡集做一轮只读事实面预检——八类检查、P1/P2/P3 分级去向与只读子代理执行方式=iter-plan 技能「第 3 步·开工前预检」;P1 红项停编排、退回写卡段,禁编入。预检目标=尽量减少实现期停工、非杜绝——环境漂移与卡片并行修改仍可在实现期停工,由实现段异常分级与 iter T0 开工日窄复核兜底。编排五查:①每卡卡片文件存在 ②每卡设计闭合凭据齐(或需求性工程条目的证据指认)③估时与冻结线——所选卡估时按区间**中值**求和(单位工作日、写精确值不取整):**卡片任何工作量均可编入**(2026-10-25 用户立:工作量限制属迭代层、非卡片层);编入后迭代总量 <5 个工作日=迭代行状态「冻结待凑批」、不可开工,凑批 ≥5 后由编排段改「待开工」(迭代体量偏好,2026-10-21 用户立、2026-10-25 改冻结制);5–10 个工作日为常规区间;超过 10 个工作日须经用户确认(确认前呈报整批/拆批两案等裁,禁自行拆分或塞入),确认后迭代行随带日期特批标记;超过 20 个工作日禁止编(硬上限,用户确认也不放行,必须拆批)④每卡复核记录在位(2026-11-05 用户立规;2026-11-06 用户裁凭据换代——复核凭据=「复核记录」节自身,不另查报告文件)——卡内有「复核记录」节;缺节或节内任一条发现没有去向标记则呈报退回写卡段,禁编入,本段不代跑复核也不代补记录(生效=卡片文件名日期 ≥2026-11-06,旧卡不回头改)⑤写完 roadmap 行后跑流水线闸确认绿;编入未完成迭代,新开迭代行经用户确认 |
| 五·实现 | iter | 代码与配置,可运行的游戏 | 需求卡片永不单独施工,统一由用户指定迭代号触发(=U0 开工令),按 iter 技能与本文 §3 执行;**本段是代码实现批:禁写 `design/` 与根规则文件,产出物只落 `reports/`(见 §3 第 12 条)**;设计权威文档(GDD/art-bible)批内一律不更新;完成人闸=实机目检清单+实现决定记录写齐即完成批内义务;画面类需求实现批另按 test-conventions §8.2 黄金图基线冻结口径执行(实跑截图入基线前用户逐张审核确认+审核记录落档,此后渲染闸自动盯);**golden 基线改动批(含非卡片批的迁移/重构/容差修订)merge 前须用户审核通过(test-conventions §8.2 审核关卡),未审核的基线禁合回** |
+9 -6
View File
@@ -1,5 +1,6 @@
# 测试规范(Dungeon Sweeper)
> 现行为 v1.0(2026-11-09)
> 约束范围:`game/probe/ 与 game/sim/`、`game/tests/` 与一切场景探针的编写与验收。
> 分工:测试**执行义务**(改完必须测什么)归 AGENTS.md「硬性红线·改完即测铁规」与 `process-conventions.md` §4;**跑什么闸、什么顺序**归 `tools/run_all_gates.sh`(脚本即清单,本文与 AGENTS.md 均不另列);本文管测试怎么写、怎么算合格。每件测试工具**是什么、判什么、怎么单独跑、什么时候适合单独用**——见 `game/tests/README.md`(测试工具手册),本文不重复工具介绍。
> 归属:随游戏逻辑写/改的测试=需求改动的一部分(随需求卡片同批落地);不伴随逻辑改动的纯测试维护=工程改动(不写卡,用户发令直改)。
@@ -34,7 +35,7 @@
凡模态覆盖层,探针必须断言:打开后自身 visible 且遮挡物已隐藏(模态被遮挡 = 功能存在但不可达)。
**UI 驱动断言须走真输入管线(2026-11-06 立)**:探针里「点按钮/点场景物件」类驱动断言,一律经引擎输入管线承载(合成 InputEvent 走 `push_input`,press+release 成对;合成滚轮同样必须 press+release 成对——只发 press 会把鼠标焦点钉死在按下点控件上,后续点击全部失效);信号直发(`pressed.emit()` 等)绕过命中测试,保不了「玩家点击可达」,只许用于真输入到不了的面并当场标〔接线断言〕(现役例:置灰态穿透钉处理器兜底)。折叠区控件先以真输入滚轮滚入可视区再点。每个动线断言钉「落点」判定(点了之后到哪个屏/哪层可见),防驱动中断后的空转假绿。真输入命中控件时自动登记控件覆盖(探针共用面登记件落 `.gates/` 观测产物),覆盖面生长不靠人记。
**UI 驱动断言两段式:先接线、后真输入(2026-11-06 立;2026-11-09 用户裁两段式)**:探针里「点按钮/点场景物件」类驱动断言按先后两段执行——**第一段接线断言**:信号直发(`pressed.emit()` 等)验证信号接线与处理器逻辑,快速失败(接线不通即红,不必等真输入段定位);**第二段真输入断言**:经引擎输入管线承载(合成 InputEvent 走 `push_input`,press+release 成对;合成滚轮同样必须 press+release 成对——只发 press 会把鼠标焦点钉死在按下点控件上,后续点击全部失效),验证玩家点击可达。真输入绕过不得——信号直发绕过命中测试,保不了「玩家点击可达」;真实入口只认第二段(§8.3 口径不变),第一段不充当能力行的真实入口。真输入到不了的面(现役例:置灰态穿透钉处理器兜底)止于第一段并当场标〔接线断言〕。折叠区控件先以真输入滚轮滚入可视区再点。每个动线断言钉「落点」判定(点了之后到哪个屏/哪层可见),防驱动中断后的空转假绿。真输入命中控件时自动登记控件覆盖(探针共用面登记件落 `.gates/` 观测产物),覆盖面生长不靠人记。
## 3. 缺陷修复必须沉淀回归断言
@@ -62,7 +63,7 @@
| 重放 | 同种子断点回放、改前改后配对 |
| 状态/计数器断言 | 条件解锁、限次、充能——置数据→走路径→断计数值 |
4. **调试注入两层(能力测试与流程体验两分法的落码面)**:自动化测试=测试代码直调核心层写口构造状态(直改数据表行/计数器/存档域,不经 UI、不走正常资源积累流程——冒烟现役做法);人工体验=DebugOverlay/DS_DEBUG 调试面,服务用户目检(发布态该面恒隐、无 UI 开启口,开发期临时启用=本地改 `_debug_entry` 缺省、不提交;能力测试不经 UI,本条口径不受影响)。清单条目的「怎么测」必须写到数据面粒度:改哪张表哪行、置哪个计数、调哪个核心写口。
4. **调试注入两层(能力测试与流程体验两分法的落码面)**:自动化测试=测试代码直调核心层写口构造状态(直改数据表行/计数器/存档域,不经 UI、不走正常资源积累流程——冒烟现役做法);人工体验=DebugOverlay 调试面,服务用户目检(2026-11-09 用户裁:调试入口常驻——「调试」角标恒亮、浮窗经角标真点开启;能力测试不经 UI,本条口径不受影响)。清单条目的「怎么测」必须写到数据面粒度:改哪张表哪行、置哪个计数、调哪个核心写口。
5. **换代批旧验证约束同生死**:删除旧数据行/旧实现代码的批次,必须同批摘除只验证旧实现的断言与护栏校验,由新断言替代——旧件断言残留=冒烟假绿来源;合并后冒烟全绿且全仓无旧件残留引用为证。
6. **违约通道类需求点必须落独立负面套件(2026-10-28 立)**:预期运行期违约/致命路径的需求点(handler 通道、fail-fast 分支)一律落独立负面套件并按 manifest 登记 `expect=1, negative=true`,禁落现役非负面套件——headless 下 assert 失败必产不可捕获的 SCRIPT ERROR,非负面套件的输出被错误扫描命中即假红(先例=reward_dangling_treasure/counter_prefix_fatal/extended_row_violation/run_time_fatal 四件)。
@@ -97,7 +98,7 @@
- **接口**:模块边界的公开契约——数据表加载、存档与断点、事件载荷、命令接口;测试从公开入口进出。接口级断言随单元套件落(`unit/contracts/`),不另设承载目录。
- **跨宿主**:跨宿主的接线、持久、生命周期——例如 LevelRunner 把 level_counters 传给 BattleOrchestrator、两场战斗共享同一个桶、断点续玩;测试必须实例化真实宿主链,禁止用裸 EffectEngine 代替。断言载体归单元层跨系统闭环套件(§1.1 三元组表),验收入口不变。
- **探针/golden**:玩家可达性与观感;真实实例化场景、驱动真实输入。
- **golden 测试项扩项(2026-11-05 立)**:触碰画面呈现规格的需求批(新增画面要素/布局/配色/动效;判据=设计段出了预览图),实现段把该画面纳入渲染闸机器面:截图采集清单扩项+实跑截图冻结进 `game/tests/golden/`(基线属入库测试资产,render_gate.sh 在册例外)。黄金图=游戏真实渲染截屏冻结的逐像素基准,比对器与容差口径见 render_gate.sh 头注释(脚本即清单,本文不另列)。基线冻结(新建与换代同口径)=**用户逐张审核确认后执行**,触发原因写进当批提交说明(`tools/golden_baseline_refresh.sh` 现役义务);此后渲染闸逐像素自动盯、零人工。预览图(HTML/SVG 效果图)与引擎渲染是两套管线,禁直接充当比对基线——预览图只作人审参照与验收判据句的出处(判据出处行锚指向 ux/ 内嵌预览节);缺陷修复以现行规格与在库基线为准,不触发新预览。
- **golden 测试项扩项(2026-11-05 立)**:触碰画面呈现规格的需求批(新增画面要素/布局/配色/动效;判据=设计段出了预览图),实现段把该画面纳入渲染闸机器面:截图采集清单扩项+实跑截图冻结进 `game/tests/golden/`(基线属入库测试资产,render_gate.sh 在册例外)。黄金图=游戏真实渲染截屏冻结的逐像素基准,比对器与容差口径见 render_gate.sh 头注释(脚本即清单,本文不另列)。基线冻结(新建与换代同口径)=**用户逐张审核确认后执行**,触发原因写进当批提交说明(`tools/golden_baseline_refresh.sh` 现役义务);此后渲染闸逐像素自动盯、零人工。预览图(HTML/SVG 效果图)与引擎渲染是两套管线,禁直接充当比对基线——预览图只作人审参照与验收判据句的出处(判据出处锚指向 ux/ 内嵌预览节);缺陷修复以现行规格与在库基线为准,不触发新预览。
- **golden 基线冻结审核关卡(2026-11-08 用户立)**:基线=人定标准、机器守标准——**任何基线的新建/换代/迁移/容差修订,呈报用户逐张审核、确认后才能提交入库生效**;该关卡适用于两类批:①画面类需求批(候选基线对照该卡预览图逐张呈报)②**非卡片批的基线操作**(目录重构/平台迁移/容差修订等工程批——同样逐张呈报审核,禁以「纯搬运/纯工程」为由跳过)。确认记录登记于 `game/tests/golden/README.md` 审核记录节(审核人+时间+基线清单),**未审核的基线禁合回**。机器侧前置:探针自检 PASS(结构断言在案)才允许出候选图,采集失败不得送审。基线**跨平台单套**(同日用户裁:跨平台渲染必须一致,全平台对拍同一份基线,跨平台字形锯齿噪声由容差带吸收,禁以加基线方式消化差异;细则=golden/README「基线冻结与审核」节)。
分层不是形式。改动发生在哪一层,验收就必须从那一层的真实入口进入。测试绕过了改动点,就不算这个改动的验收——这正是「断言存在、接线坏了却不红」的来源。
@@ -115,9 +116,11 @@
- **反向**:diff 里每个行为改动至少一行;没有对应行的改动,必须写明「非行为改动」或「由第 X 行覆盖」。
- **测试侧**:新增或改写的每条断言至少挂一行;挂不上的孤儿断言删掉或补挂到需求点。
**判据出处行锚(2026-11-05 立,自 2026-11-05 起对文件名日期不早于该日的需求卡片生效;旧卡不回头改,被编入迭代开工前由写卡段按本粒度补挂)**:对照表「需求点」列每行必须带**判据出处行锚**——该行验收判据所依据的现行文档句子,格式「`<文档相对路径>:<行号>`」。现行文档=`design/` 全域现行文档(含 `ux/` 交互规格与 art-bible 的判据行);已退役的需求卡片不是现行文档,不得充当判据出处。作用=断言预期值从规格句抄出,不从实现反推:实现行为与规格句冲突时断言红;规格缺席的行写不出锚,即停卡退回写卡段(那是需求澄清缺口,不是测试缺口)。机检=`tools/pipeline_gate.py` 判据 C5(锚格式与指向存在性,按卡文件名日期分流)+`tools/capability_audit.py` 链式锚检查(断言→套件→能力行→系统文档,见 §8.9)。
**判据出处锚(2026-11-05 立;2026-11-09 用户裁内容化改版——行号形态废止,内容节锚为唯一形态)**:对照表「需求点」列每行必须带**判据出处锚**——该行验收判据所依据的现行文档句子,格式「`<文档相对路径>「节名」<行关键词>`」。现行文档=`design/` 全域现行文档(含 `ux/` 交互规格与 art-bible 的判据行);已退役的需求卡片不是现行文档,不得充当判据出处。节名=判据句所在节的标题词(节名首段「·」前须命中目标文档标题行);行关键词=判据句上的无空白子串(须落在该节块内)。锚指向内容不指向行号——文档增删行不牵动锚与测试代码,只有判据句内容真被改动才使锚失配;失配(节名不在档/关键词不命中)=红,改动该句的文档批同批改锚。作用=断言预期值从规格句抄出,不从实现反推:实现行为与规格句冲突时断言红;规格缺席的行写不出锚,即停卡退回写卡段(那是需求澄清缺口,不是测试缺口)。机检=`tools/pipeline_gate.py` 判据 C5(内容锚形态唯一+节名在档+关键词命中节内,核验口径归 `tools/anchor_util.py` 共用件;行号形态出现即红)+`tools/capability_audit.py` 链式锚检查(断言→套件→能力行→系统文档,见 §8.9)。
**测试函数的判据出处注记(2026-11-06 立)**:`game/tests/**` 与 `game/probe/**` 内每个**验证函数**(函数体含 `check(`/`check_quiet(`/`_problems.append(`/`push_error(` 判定调用的函数——定义行与 `_check(` 前缀不作判定计)必须带至少一条**判据出处注记**,格式「`# 判据出处: <design/相对路径>:<行号> <判据一句>`」——指针在前、判据摘要句在后;锚形态两档:行号锚(默认)与节锚(`<design/相对路径>「节名」<行关键词>`)——所指文档整节重排时同批把行号锚重锚为节锚,免行号漂移(2026-11-07 架构收窄批立),断言预期值的出处随断言走:断言红时读注记即达出处文档句,零查表。指针空间=`design/` 全域现行文档(行为测试锚 owner 系统文档「验收标准」句或 `ux/` 规格句;惯例类测试〔封装扫描、判定通道纪律、驱动契约〕锚规约条款行;测量面驱动契约锚 `game/sim/` 实现件文件头注——规范句在哪锚哪,2026-11-09 架构收敛批立);`game/sim/` 不进扫描面(测量面直构惯例)。与链式锚的分工:链式锚(断言→套件→能力行→系统文档)不变、属义务清单层;本注记属执行证据层、写在断言文件内,非独立账本(§8.9 法则 4 不变)。写新测试函数时当场挂注记;被指规格句改行号时随批维护指针——死指针即红。局限如实声明:注记是被动文本,句内容改而行数不变时机检抓不到(与卡片判据 C5 同限)。机检=`tools/capability_audit.py` 判据出处注记道(覆盖检查+指针存在性;扫描面零文件自检红)。规格缺席写不出锚=发现规格缺口:记发现不造锚、收尾呈报,禁锚到非现行文档凑数。
**测试函数的判据出处注记(2026-11-06 立;2026-11-09 内容化改版——内容节锚唯一形态)**:`game/tests/**` 与 `game/probe/**` 内每个**验证函数**(函数体含 `check(`/`check_quiet(`/`_problems.append(`/`push_error(` 判定调用的函数——定义行与 `_check(` 前缀不作判定计)必须带至少一条**判据出处注记**,格式「`# 判据出处: <design/相对路径>「节名」<行关键词> <判据一句>`」——指针在前、判据摘要句在后;节名与行关键词口径同上(卡片判据锚同款,`game/sim/` 测量面实现件无标题结构,节名与关键词按文件内子串命中),断言预期值的出处随断言走:断言红时读注记即达出处文档句,零查表。指针空间=`design/` 全域现行文档(行为测试锚 owner 系统文档「验收标准」句或 `ux/` 规格句;惯例类测试〔封装扫描、判定通道纪律、驱动契约〕锚规约条款行;测量面驱动契约锚 `game/sim/` 实现件文件头注或本节「批量模拟测量语义」句——规范句在哪锚哪,2026-11-09 架构收敛批立);`game/sim/` 不进扫描面(测量面直构惯例)。与链式锚的分工:链式锚(断言→套件→能力行→系统文档)不变、属义务清单层;本注记属执行证据层、写在断言文件内,非独立账本(§8.9 法则 4 不变)。写新测试函数时当场挂注记;判据句被改动使关键词失配时,改动该句的文档批同批改锚——失配即红。局限如实声明:注记核验到「关键词命中节内」粒度,判据句被改写而关键词仍为其子串时语义漂移机检抓不到,由复核门实读兜(与卡片判据 C5 同限)。机检=`tools/capability_audit.py` 判据出处注记道(覆盖检查+内容锚核验,行号形态出现即红;扫描面零文件自检红)。规格缺席写不出锚=发现规格缺口:记发现不造锚、收尾呈报,禁锚到非现行文档凑数。
**批量模拟测量语义(测量面驱动契约,2026-11-09 用户裁落文)**:调试浮窗批量模拟(tune_sim,呈现层调参测量件)与 headless 扫描同口径(同款自动策略驱动);逐帧步进每局恰占一帧——第 0 局在调用点同步段执行,第 i 局(i≥1)在第 i 帧信号发射点执行,收尾恒在第 n 帧发射点;n=0 退化路径为调用点同步收尾零帧;进度逐局更新,报告注入与运行态复位在整批收尾之后。双实现对拍套件(产品码帧步进形态 vs 旧 await 形态夹具)以本句为判据出处。
**验收档申报(2026-11-04 立,自 2026-11-05 起对文件名日期不早于该日的需求卡片生效;旧卡不回头改)**:每张需求卡片在头部信息区(与设计事实源声明同区)申报一个验收档,三档:高/中/低。判据=失败代价单维——这条改动做错了,后果随存档或结算传播的(存档写读与迁移、RNG 流、战斗结算公式与乘区、经济入账、数值表结构校验)=高;后果玩家可见但不损持久状态的(常规玩法逻辑、门控、交互逻辑、呈现数据面)=中;后果即看即知且无状态残留的(文案、纯呈现样式、布局微调)=低。一张卡触多档按最高档申报;申报由写卡段落笔,用户批卡(U0)时确认或改判。档位只调节 §8.7 审计深度——闸机与 CI 的域划分、选闸算法、全量强制档一概不因档位变化,真实入口、判据绑定面、禁削弱等验收闭合判据全部照旧。未申报档位的卡一律按高档全量审计。机检=`tools/pipeline_gate.py` 判据 C4:卡内须含「验收档:高/中/低」申报行。
@@ -153,7 +156,7 @@
2. 抽查判据绑定面:断言从真实入口进入、钉在被测改动的特有可观测提交面上,且当轮真实跑批执行过;
3. 检查测试削弱:删除断言、放宽阈值、缩小扫描面、换下层直调,逐处要卡片申报或用户批准。
4. 核对内部字段直查的受控例外:直查行是否已在对照表注明理由(该行为无公开可观测面可钉)。
5. 核对判据出处:抽查断言的预期值能否从其判据出处行锚(§8.3)的规格句独立写出——预期值只在实现里有的(同义反复,判据镜像实现),判红。
5. 核对判据出处:抽查断言的预期值能否从其判据出处锚(§8.3)的规格句独立写出——预期值只在实现里有的(同义反复,判据镜像实现),判红。
**审计深度分级(2026-11-04 立)**:审计按卡内申报的验收档(§8.3)逐卡定深度;梯度只落在昂贵的判断件上,机械且堵造假向量的两件(削弱检查、例外核对)三档全保留不抽。中/低档省略的测试复跑以远端 CI 读数为执行证据——`tools/ci_check.sh <合并提交>` 的现查输出(commit+run 号+conclusion)是机器产物,run 号在远端永久可复核,审计报告照抄该行即可;照抄前先核对读数必须是「绿」——「未验」(零触发批跑闸步全跳过)与「不可判」不作证据,那种批的回补办法是等一次含代码面的合回或用户自发全量回归(2026-11-04 用户裁:回执等待件退役,证据由落盘文件改为现查读数;「不采信实现者自述已全绿」的口径不变):
+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 条,配检查脚本。
+75 -13
View File
@@ -2,7 +2,7 @@
> **Status**: Complete(现行)
> **Author**: user + ux-designer
> **Last Updated**: 2026-11-09
> **Last Updated**: 2026-11-10
> **Platform Target**: PC (Steam)——Keyboard/Mouse 主(全部操作纯鼠标可完成)、Gamepad Partial 非 MVP、Touch None(同 technical-preferences)
> **上游修订依赖**: 弃图刷新挖掘期受理依赖上游现行规则(行动经济 Active 受理 + 每轮上限 2 次、排雷玩法 Active·仅刷新路径装板、战斗结算的挖掘期刷新编排 + 恒同盘不变、系统索引的刷新规则同步——见布局决策 4 与 OQ11)
> **Template**: UX Spec
@@ -100,7 +100,7 @@
- **B 区战斗画面**
- 主角站桩:立绘、HP 血条、状态效果小图标行 ← **HP 与状态的唯一展示面**(2026-09-26 拍板:C 区同信息展示退役)
- 敌人站桩 ×1–3:HP 血条、顺位徽标、状态小图标行、意图徽标、护甲类型图标(AC 数值不展示——2026-09-26 终裁)
- 兑现演出区 / 结算明细带 / 轮次·阶段指示
- 兑现演出区 / 轮次·阶段指示(结算明细带已退役,2026-11-10 用户裁)
- **C 区角色信息(规划数据框)**
- 攻击值 + 修正来源角标(战斗在消费、且站桩上无展示)
- 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性)
@@ -115,11 +115,11 @@
### Layout Zones
采用用户拍板的布局图(2026-09-12),按 1280×800 基座落尺寸。**分区几何的唯一事实源 = `game/data/tables/battle_layout.tres`**(经 `ConfigDb.presentation.battle_layout` 读取;字段 `stage_h` / `ground_h`(B 区连续地面层高)/ `info_panel_w` / `side_rail_w`(D 区行动资源侧栏宽,2026-11-07 顶栏搬两侧后新增)/ `log_band_h_dig` / `log_band_h_settle`;游戏视图不再读 `ap_bar_h`;布局表字段暂留供样张渲染工具,删除归工具批)。本节只写结构关系与内容职责,不复写数值;任何文档与代码不另立第二份布局值。
采用用户拍板的布局图(2026-09-12),按 1280×800 基座落尺寸。**分区几何的唯一事实源 = `game/data/tables/battle_layout.tres`**(经 `ConfigDb.presentation.battle_layout` 读取;字段 `stage_h` / `ground_h`(B 区连续地面层高)/ `info_panel_w` / `side_rail_w`(D 区行动资源侧栏宽,2026-11-07 顶栏搬两侧后新增)/ `log_band_h_dig` / `log_band_h_settle`;游戏视图不再读 `ap_bar_h` 与 `log_band_h_dig`/`log_band_h_settle`(明细带退役,2026-11-10 用户裁);布局表字段暂留供样张渲染工具,删除归工具批)。本节只写结构关系与内容职责,不复写数值;任何文档与代码不另立第二份布局值。
| 区 | 位置与几何 | 内容 |
|---|---|---|
| **B 战斗画面** | 全宽,高读 `stage_h`(2026-10-06 方案二拍板:演出 ≈1/3 屏) | 主角站桩立绘(左)+ 兑现演出区(中)+ 敌人站桩立绘 ×1–3(右)——**全站桩形态(2026-09-20 用户拍板):主角与敌人均为无框立绘+底座,零卡片**;主角与敌人站桩 = **HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板)**;底部结算明细带(挖掘期收起高读 `log_band_h_dig`,结算期展开高读 `log_band_h_settle`);顶部中央轮次·阶段指示 |
| **B 战斗画面** | 全宽,高读 `stage_h`(2026-10-06 方案二拍板:演出 ≈1/3 屏) | 主角站桩立绘(左)+ 兑现演出区(中)+ 敌人站桩立绘 ×1–3(右)——**全站桩形态(2026-09-20 用户拍板):主角与敌人均为无框立绘+底座,零卡片**;主角与敌人站桩 = **HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板)**;结算明细带已退役(2026-11-10 用户裁,B 区零文字带,规格见「即时反馈画面化预览」节);顶部中央轮次·阶段指示 |
| **C 角色信息** | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 攻击值(含修正显示)、护甲 AC;秘宝槽、奇物列表(现行标题「特性」)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区右栏;GP/钥石迁出战斗屏) |
| **D 扫雷图** | 中下,宽 = 基准屏宽 − C 区宽 − 列间距,高同 C 区(2026-11-07 顶栏搬两侧:**D 区全高归棋盘**,不再让出 AP 条高度;棋盘不缩,格边按公式现算) | 左栏(宽读 `side_rail_w`,贴棋盘左缘):AP 点阵 + 停手按钮;右栏(同宽,贴棋盘右缘):RAP 点阵+数字 + 图例按钮 + 弃图刷新按钮(RAP 贴唯一消费口,2026-09-26 拍板);棋盘主体居中(格边长见下方「棋盘格尺寸公式」;上方留 44px 给浮空数字越出棋盘,下方 12px+悬崖 8px);toast 槽(D 区上缘内侧左栏顶部,不覆盖棋盘与浮空数字);棋盘底常驻操作提示条退役(2026-11-07 用户裁,不占棋盘高度) |
@@ -190,6 +190,69 @@
算例不入文档:棋盘区可用面积随布局表与板型变化,不是契约值——现算并绘在整屏样张上,本文件不复写。
### 即时反馈画面化预览(2026-11-10 用户裁:明细带退役+清图兑付浮字+Boss 解锁技零提示;三屏预览 2026-11-10 用户人审通过)
**清图兑付浮字**:全图最后一块安全格开启的瞬间,在既有金粒喷泉+彩纸(§2.3)之上,兑付内容以**单行浮字**自棋盘中央上方升起——只写兑付值(例:「全体敌人 14 伤害」),无「清图奖励」标题、无底牌、不遮棋盘任何格;替代退役前的「清图奖励:××」toast。浮字规格:字高 17px(基座档)、暖白字芯+2px 深墨描边+微金光晕,约 2.5s 内上浮约 40px 并渐隐,时序落在喷泉 3–5s 窗口内、先于换新图 install。
像素判据:浮字全程不与棋盘格面重叠(浮字底缘恒在棋盘上缘上方 ≥6px);渐隐连续无跳变(帧间 alpha 步进 ≤0.1);兑付值在浮字生命期 ≥60% 时长内保持全可读。
**Boss 解锁技零提示**:解锁拍(Boss 血量跌破闩阈值)**不新增任何 UI 元素**——血条跌破本身即视觉事件,「我把它打到半血 → 它亮新招」因果自明;下一拍开轮摇中新技时,既有意图徽标(类型级预告,敌人系统 Rule 8⑤)按现行规格自然顶头,具名随预告承载。原「一次性技能名 toast」规格退役([敌人系统](../gdd/systems/战斗循环/敌人系统.md) v2.1 同步改写)。
像素判据:解锁拍 B 区新增可见元素数为 0(与前一帧逐元素比对);意图徽标几何沿用现行规格(悬浮头顶上方、探顶档压胸),零新增资产。
**战斗屏纵向**:明细带退役后 B 区舞台(高读 `stage_h`)直连 D 区——挖掘期 D 区可用高 +24、结算期 +84,棋盘格边按「棋盘格尺寸公式」现算放大,公式与垂直预留(上 44 / 下 12)不变;`log_band_h_dig`/`log_band_h_settle` 不再被游戏视图读取。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 240" width="920" height="240">
<rect x="0" y="0" width="920" height="240" fill="#2E2620"/>
<g font-family="sans-serif" font-size="12" fill="#C9AF83">
<text x="150" y="20" text-anchor="middle">清图兑付浮字</text>
<text x="460" y="20" text-anchor="middle">解锁拍(零新增)</text>
<text x="770" y="20" text-anchor="middle">下拍开轮(意图徽标顶头)</text>
</g>
<!-- 屏1 棋盘+浮字 -->
<g>
<rect x="30" y="60" width="240" height="150" fill="#3A332A" stroke="#55483A" stroke-width="2"/>
<g fill="#57503F">
<rect x="38" y="68" width="28" height="26"/><rect x="70" y="68" width="28" height="26"/><rect x="102" y="68" width="28" height="26"/><rect x="134" y="68" width="28" height="26"/><rect x="166" y="68" width="28" height="26"/><rect x="198" y="68" width="28" height="26"/><rect x="230" y="68" width="28" height="26"/>
<rect x="38" y="98" width="28" height="26"/><rect x="70" y="98" width="28" height="26"/><rect x="102" y="98" width="28" height="26"/><rect x="134" y="98" width="28" height="26"/><rect x="166" y="98" width="28" height="26"/><rect x="198" y="98" width="28" height="26"/><rect x="230" y="98" width="28" height="26"/>
<rect x="38" y="128" width="28" height="26"/><rect x="70" y="128" width="28" height="26"/><rect x="102" y="128" width="28" height="26"/><rect x="134" y="128" width="28" height="26"/><rect x="166" y="128" width="28" height="26"/><rect x="198" y="128" width="28" height="26"/><rect x="230" y="128" width="28" height="26"/>
<rect x="38" y="158" width="28" height="26"/><rect x="70" y="158" width="28" height="26"/><rect x="102" y="158" width="28" height="26"/><rect x="134" y="158" width="28" height="26"/><rect x="166" y="158" width="28" height="26"/><rect x="198" y="158" width="28" height="26"/><rect x="230" y="158" width="28" height="26"/>
</g>
<g fill="#F0C75E"><circle cx="70" cy="82" r="2"/><circle cx="130" cy="74" r="2"/><circle cx="200" cy="88" r="2"/><circle cx="100" cy="140" r="2"/><circle cx="220" cy="168" r="2"/></g>
<g fill="#E06050"><rect x="90" y="70" width="5" height="7" transform="rotate(20 92 73)"/></g>
<g fill="#5AA0D8"><rect x="160" y="66" width="5" height="7" transform="rotate(-15 162 69)"/></g>
<text x="150" y="52" text-anchor="middle" font-family="sans-serif" font-size="15" font-weight="500" fill="#F5EAD0" stroke="#17130F" stroke-width="0.8" paint-order="stroke">全体敌人 14 伤害</text>
<text x="150" y="228" text-anchor="middle" font-family="sans-serif" font-size="10" fill="#8A7D68">浮字底缘恒在棋盘上缘上方 ≥6px</text>
</g>
<!-- 屏2 解锁拍零新增 -->
<g>
<rect x="340" y="60" width="240" height="150" fill="#241F19"/>
<rect x="340" y="158" width="240" height="52" fill="#443B2C"/>
<rect x="376" y="94" width="56" height="60" rx="6" fill="#4D443A"/>
<rect x="376" y="158" width="56" height="5" fill="#33291F"/><rect x="376" y="158" width="40" height="5" fill="#B8483D"/>
<text x="404" y="176" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#C9BDA1">探险者</text>
<rect x="516" y="88" width="68" height="66" rx="6" fill="#5A4436"/>
<rect x="516" y="158" width="68" height="5" fill="#33291F"/><rect x="516" y="158" width="29" height="5" fill="#D8863D"/>
<text x="550" y="176" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#C9BDA1">石君王 42%</text>
<text x="460" y="120" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#6B6052">(无任何新增元素)</text>
<text x="460" y="228" text-anchor="middle" font-family="sans-serif" font-size="10" fill="#8A7D68">血条跌破即视觉事件 · B 区新增元素数 = 0</text>
</g>
<!-- 屏3 意图徽标顶头 -->
<g>
<rect x="650" y="60" width="240" height="150" fill="#241F19"/>
<rect x="650" y="158" width="240" height="52" fill="#443B2C"/>
<rect x="686" y="94" width="56" height="60" rx="6" fill="#4D443A"/>
<rect x="686" y="158" width="56" height="5" fill="#33291F"/><rect x="686" y="158" width="40" height="5" fill="#B8483D"/>
<text x="714" y="176" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#C9BDA1">探险者</text>
<rect x="820" y="88" width="68" height="66" rx="6" fill="#5A4436"/>
<rect x="820" y="158" width="68" height="5" fill="#33291F"/><rect x="820" y="158" width="29" height="5" fill="#D8863D"/>
<text x="854" y="176" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#C9BDA1">石君王</text>
<rect x="838" y="46" width="32" height="32" rx="5" fill="#2C2415" stroke="#B8483D" stroke-width="2"/>
<text x="854" y="68" text-anchor="middle" font-size="15" fill="#F0C75E">⛰</text>
<rect x="834" y="82" width="40" height="16" rx="3" fill="#000000" fill-opacity="0.55"/>
<text x="854" y="94" text-anchor="middle" font-family="sans-serif" font-size="10" fill="#D8C9A1">岩崩</text>
<text x="770" y="228" text-anchor="middle" font-family="sans-serif" font-size="10" fill="#8A7D68">既有意图徽标规格 · 几何零改动</text>
</g>
</svg>
### Component Inventory
| 区 | 组件 | 类型 | 内容 | 交互 | 载体 |
@@ -197,8 +260,8 @@
| B | 主角站桩立绘 | 站桩(无框立绘+落影) | HP 条落底盘(2026-10-06 方案二拍板:站桩排式 = **立绘→血条→状态**,全场血条对齐一线;血条嵌石板位、台缘线留作地面线;不悬浮头顶——高盒下血条-立绘空洞,用户点名否决)、状态效果小图标一排挂血条正下方(形状+色相双通道、层数角标;空态不占位退化为空行)——**HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板;悬停 tooltip〔来源+语义+剩余结算次数〕职责在本组件)**;攻击值等规划数据仍归 C 区数据框(2026-09-20 全站桩拍板,英雄卡退役) | 悬停状态小图标看 tooltip | HUD 视图拆分改造 |
| B | 敌人站桩立绘 ×1–3 | 站桩(无框立绘+落影) | 血条+顺位徽标落底盘(同主角排式,2026-10-06 方案二;**大体档〔显示 >150px 级:drider/duergar_king〕允许向上溢出盒顶 N px(N 由实装实算,溢出判定与背景无关),血条仍落底**)、状态小图标挂血条正下方(敌方增益按个体呈现——各立绘只显示它自己名下的状态实例〔蓄力/硬化/削弱/暴走/警觉,2026-11-02 个体化裁〕;数据源 = 战斗结算流水经增益状态投影,敌人系统×4④;无行为环点〔proposal §2.4〕,意图占位 = 本拍摇定结果的动画占位——普通攻击零表示 / 特殊技类型级提示,**意图徽标悬浮头顶上方,探顶档压胸**,敌方增益〔蓄力/硬化〕入状态图标行);死亡灰化加碎裂退场直接演在立绘上(2026-09-20 全站桩拍板,敌人卡退役);血条下名字行 = 纯名字 + 护甲类型图标(形状+色相双通道,与状态图标同行共存,状态空时为纯名字),AC 数值不展示——2026-09-26 终裁(用户口径:HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性——类型可读、数值隐藏) | 只读 | 新建 |
| B | 轮次·阶段指示 | 标签 | "第 N 轮 · 挖掘中/结算中"(终局定格「战斗结束」;Boss 变体附 Boss 名) | 只读 | 新建 |
| B | 结算明细带 | 摘要位+叙述行 | 逐行流水文字呈现已退役(2026-11-07 用户裁):挖掘期显示上轮摘要 1 行与冒险叙述行,结算期空带+FX 排播链承接演出;流水协议保留在数据面([战斗结算](../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议,供日志落盘与回放对账) | 无明细回看——带保留单行摘要,冒险中回看归「生涯」 | 改造 |
| B | 结算明细回看(已退役) | —— | 冒险中回看归「生涯」;回看覆盖层为未接线遗留件(待办清单登记) | —— | 未接线 |
| B | 结算明细带(已退役) | —— | 明细带整条退役(2026-11-10 用户裁):挖掘期摘要位为恒空死区(写入函数随 2026-11-07 逐行退役批删除)、冒险叙述行对玩家零信息增量——舞台底高归还(挖掘期 +24 / 结算期 +84 归 D 区棋盘区,格边按「棋盘格尺寸公式」现算);冒险叙述行六类随带全砍——关卡开场数字归 C 区数据框(同值重复)、恢复点回血归节点弹窗、商店 GP 归商店浮层、钥石结算归胜负浮层账行、节点横幅与岔路口文字砍(节点类型与可选交互自明);逐行流水文字呈现此前已退役(2026-11-07 用户裁);流水协议保留在数据面([战斗结算](../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议,供日志落盘与回放对账) | —— | 退役 |
| B | 结算明细回看(已退役) | —— | 冒险中回看归「生涯」;回看覆盖层为未接线遗留件,与明细带同批报废(2026-11-10 用户裁) | —— | 退役 |
| C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;HP 与状态归 B 区站桩、RAP 归 D 区右栏,不在本组件) | 只读 | HUD 视图拆分 |
| C | 秘宝槽 | 图标槽 ×4 | 四槽壳在役、空槽占位(标题「秘宝」,悬停「秘宝槽(空)」);局内两步使用与关卡域库存随秘宝过渡形态退役——现行秘宝 = 营地同调装配件(秘宝.md),本区展示重接归装配面 | 悬停 tooltip | 已实装 |
| C | 奇物列表(现行标题「特性」) | 列表/图标行 | 已实装——逐件行「件名 ×N」呈现、零内部分类字样;锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 已实装 |
@@ -214,6 +277,8 @@
| 全屏 | 胜利/失败 overlay | 模态 | 金蜡封/暮蓝收印 + 判定行(无明细回看入口——回看归「生涯」) | 继续/下一节点 | 已实装 |
| 调试 | 调试浮窗 | 调试面板 | 种子/数值调整/批量模拟/两层调试入口(发布态恒隐,无 UI 开启口;调试开关门控口径见「调试变体」行;调参面板已退役入调试浮窗) | 调试 | 调试浮窗 |
> **按钮组等宽纪律(2026-11-09 用户裁)**:同一直接父容器内 ≥2 个可见按钮,宽度必须相等(差 ≤1px)——组内等宽,结构探针 equal_width 审计按本句全站执行。现行例:AP 条停手钮与图例钮同横排容器,两钮宽度统一 64px。
**布局决策 2 —(已删除,编号留空)**:编号留空,免布局决策 3/4 的既有交叉引用失锚。
**布局决策 3 — 移动路径预览 = 合法性指示**(排雷玩法×6⑤ 悬案裁决):悬停已开格时高亮 BFS 路径(小人蓝细线点迹),移动执行为 ≤150ms 短滑。
@@ -247,9 +312,7 @@
│ (落影) [ 兑现演出区 ] /蛆虫\ /蛆虫\ │
│ HP▓▓▓▓░ (结算期: 光带→弹道→受击) ①HP▓▓▓░ ②HP▓▓░░ │
│ ⬆2 🛡1 ←血条状态落底排·全场对齐(状态空 = 名字行)〔意图徽标悬浮头顶上方〕 │
│ ├─ 结算明细带 ────────────────────────────────────────────────────────────┤ │
│ │ ▸上轮: 主角攻击3→蛆虫-3 | 攻击+50%(1结算) | 警觉+1×2 … │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ (明细带已退役——舞台直连 D 区,挖掘期 +24 / 结算期 +84 归棋盘区) │
├─[C] 角色信息 ─────────┬─[D] 扫雷图(顶栏已搬两侧) ───────────────────────────┤
│ ┌──────────────────┐ │ ┌──────┐ ┌───────────────────────────┐ ┌──────┐ │
│ │ 攻击 6 (+50%) │ │ │ AP │ │ (上方 44px 留白) │ │ RAP │ │
@@ -373,8 +436,8 @@
| State / Variant | Trigger | What Changes |
|---|---|---|
| **挖掘阶段(默认态)** | 轮次开始 / 结算完毕回 Active 相位 | B 区敌人待机(意图徽标全程可见——敌人系统 Rule 8⑤),D 区棋盘可交互,左右行动资源侧栏点亮;能量 2/10,唯悬停呼吸微光在动(§2.1) |
| **结算阶段** | round_end 触发(AP 尽/停手/清图) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);B 区播放五段编排演出(授予段 → 增益/减益段 → 战斗段 → 衰减段 → 判定段,战斗结算 段序冻结);明细带按结算期档展开(高读 `log_band_h_settle`)——settle 态空带+叙述行承载,零逐行文字;阶段指示→"结算中";能量 7/10 |
| **清图瞬间** | 全部安全格开完 | 金粒喷泉 + 彩纸 3–5s 即收(§2.3);清图奖励行强调呈现(H2,地图战斗资源×④——金框高亮行);随后换新图 install |
| **结算阶段** | round_end 触发(AP 尽/停手/清图) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);B 区播放五段编排演出(授予段 → 增益/减益段 → 战斗段 → 衰减段 → 判定段,战斗结算 段序冻结);明细带已退役——结算演出全程在棋盘与立绘上,零文字带;阶段指示→"结算中";能量 7/10 |
| **清图瞬间** | 全部安全格开完 | 金粒喷泉 + 彩纸 3–5s 即收(§2.3);兑付浮字随喷泉升起——只写兑付内容(如「全体敌人 14 伤害」),无标题、无底牌、不遮棋盘(规格与像素判据见「即时反馈画面化预览」节);随后换新图 install |
| **完美封印高光** | 战斗结算高光判定(全图标中/零误标类) | 全屏喝彩级反馈(§2.2 最高档):金光带加倍扫射 + 「完美封印 ×2」横幅——P2 爆发兑现节点(创意风险 #2 落点) |
| **封印标中高光** | 封印判定·标中 | 该印记化暴击弹道加重 + 明细行金框——chord 缺席的即时兑现补偿(创意风险 #3 落点) |
| **敌人死亡呈现** | 敌 hp=0(流水行击杀标记) | 该敌人立绘血条归零 → 立绘灰化 + 碎裂退场(**禁瞬消**——敌人系统资产下限「死亡瞬间须可辨识、禁止直接消失」,同等 blocking);战斗段短路的重击被掐灭不产行动明细行,由行序可推断(战斗结算);动画密度归战斗表现,呈现语义在本 spec |
@@ -440,7 +503,7 @@
| 时刻 | 过渡 | 依据 |
|---|---|---|
| 进入战斗屏 | 棋盘 install 淡入(200ms)+ 初始 3×3 展开涟漪 + Boss 战先播紫赤影子爬棋盘(§2.6) | 棋盘生成 install / §2.6 |
| 挖掘→结算 | 明细带自底展开(150ms)+ 棋盘去饱和 + 金橙色相偏移 + 阶段指示翻转 | §2.2 色彩转金橙主导、饱和拉高、明度不变(状态区分经饱和/色相——art-bible §2) |
| 挖掘→结算 | 棋盘去饱和 + 金橙色相偏移 + 阶段指示翻转 | §2.2 色彩转金橙主导、饱和拉高、明度不变(状态区分经饱和/色相——art-bible §2) |
| 结算逐行兑现 | 光带自棋盘行起点横扫 → 开格化箭雨/印记化暴击弹道飞向敌人立绘 → 受击闪白 + 血条直角递减 | §2.2 承载元素;因果全程可见可归因(P2) |
| 清图换新图 | 金粒喷泉 3–5s → 旧图碎裂淡出 → 新图 install 淡入 | §2.3 短促丰收不拖节奏 |
| RAP 清零(冒险收束) | RAP 数字滚动归零(D 区右栏)+「随冒险结束消散」微文案 | 行动经济可见反馈义务 |
@@ -495,7 +558,6 @@
- **源语言中文(CJK)**:运行时默认字体无 CJK 字形——**CJK 字体随包为硬性前置**(已锁),实现 AC 覆盖
- **按钮文案单行约束**:「停手」「弃图刷新」——按钮宽度按 4 汉字上限设计;译为英文("Hold"/"Reroll")不超 1.6× 不破版;德语长词("Aufgeben+Neu"类复合词)风险 HIGH——弃图刷新按钮允许两行或图标+缩写
- **明细带行文案**:来源标注格式「{行为} {值} → {目标}(来源)」为模板插值,最长 token = 来源标签(4 汉字,如「清图奖励」「封印未中」——战斗结算的来源标签封闭枚举);行模板预留 40% 膨胀宽度(固定槽高 + 裁剪兜底)
- **数字格式**:全部整数,无本地化格式需求;AP 点阵为图形载体不依赖文本
- **术语表锚定**:封印/雷/停手/弃图刷新/轮次/结算 已在 GDD 体系内定名,译文须同步 `design/gdd/术语表.md`