Compare commits

...
6 Commits
Author SHA1 Message Date
DKChan 559b79b9e7 合并(卷轴视口批·规范修订+文档设计+写卡三段): 批A 规范修订(概念/实现分界用户立2026-11-05——doc-conventions 数值纪律换代: GDD 只定概念/机制/规则,取值域与字段契约=data/schemas 域校验执法·现行值=tables·呈现实现规格=ux/ 呈现实现设计规格层豁免;禁实现内容数据索引例外扩及 schemas;骨架调参表节改参数契约;AGENTS 术语行同步)+批B 文档设计段(案②滚动视口用户裁落地: level-map v2.0 布局决策5 四口子+效果图人审内嵌+像素级判据四条+随动登记换代/生成 v1.5 调参表改参数契约+图包络退役/待办条目推进)+批C 写卡段(需求卡片-卷轴视口批-2026-11-05 v1.0: grilling 复核门缺陷四条用户裁实现级自闭环全落,验收档中,T0–T4 中值 3.5 工作日,对照表 R1–R8 锚内联+能力行三行入表;待办条目已写卡); 分支内先并 master(0ba7209b 工程批)零冲突后并红修复(能力审计真实入口核形 红项0); 文档域闸 8 道全绿+流水线闸 PASS(卡片口径 3 张); post-merge 钩子推送触发远端 CI
ci / gates (push) Successful in 26s
2026-11-05 06:25:24 +08:00
DKChan 9961efdf1d 写卡(卷轴视口批·闸红修复): 能力行真实入口核形修正——视口平移行补 ProbeUiUtil.push_drag_at()/push_wheel_at() 调用形、视口指引行补 LevelMapScreen.open_choices() 真实停点入口; 缘起=并 master(a1e62789) 复跑闸出新增红(能力审计 exit=1 红项 2——真实入口列无可核 类.方法() 形); 修复后读数: 能力审计 红项 0(103 行·链断 0)+流水线闸 PASS+文档域闸全绿 2026-11-05 06:25:12 +08:00
DKChan a1e62789b4 Merge branch 'master' into constitution-split 2026-11-05 06:23:31 +08:00
DKChan 21e1463c4e 写卡(案②卷轴视口批·写卡段): 需求卡片 v1.0 成文 reports/需求卡片-卷轴视口批-2026-11-05.md——设计事实源=level-map v2.0 布局决策5+生成 v1.5 参数契约, 验收档申报中, 对照表 R1–R8(判据出处行锚内联+能力行三新增入 README 能力表)+非行为改动行(schema 头注反转)走结构图申报, T0–T4 估时 3–4.5 中值 3.5, 落位复用预检+规范预算+拆分边界+代拍板白名单五项+零待裁点; grilling 复核门: 自审七查+引擎技术面初查出缺陷四条(输入判定落画布 _gui_input 防父子路由竞争/reanchor 重入杀旧 tween/clamp 浅图居中分支/探针宿主沿 ui_struct_probe :204 真实屏模式)——用户裁实现级自闭环全落卡(2026-11-05); 待办清单「超预算图」条目推进已写卡(卡片路径入实况,状态行零括号合规); 能力清单三行入表(关卡画面视口跟随/平移/指引——真实入口=合成沿 push_input+真实停点); 本步凭据: 流水线闸 PASS(卡片口径 3 张全过)+文档域闸全绿 all_green 基线 937d14a1 无新增红 2026-11-05 06:23:22 +08:00
DKChan e680f42b09 设计(案②卷轴视口·文档设计段闭合): level-map.md v2.0——布局决策 5 卷轴视口范式落文(四口子: 跟随+拖拽+滚轮/平滑滚动 provisional 0.3s 减动效瞬切/当前节点居中锚 x=640±2/不做缩放缩略图)+视口效果图内嵌(2026-11-05 用户人审通过)+像素级视觉判据四条+生成图随动登记换代(0–13 深度不受屏预算约束,原挂账闭合)+States/Interaction/Transitions/AC 六处随动(节点图完整可达口径换代); 关卡节点图生成.md v1.5——调参表改参数契约节(概念面 11 行+取值域指路 data/schemas)+图包络行退役(图规模无呈现侧上限句落核心规则)+支路互异行去取值域措辞; 待办清单「超预算图」条目推进(缺口删,状态=文档设计已闭合+待写卡,凭据=level-map v2.0+生成 v1.5); 本步凭据: 流水线闸 PASS(25 条目·交叉核零红)+文档域闸全绿 all_green 基线 66b2ed20 无新增红 2026-11-05 06:01:57 +08:00
DKChan 66b2ed20f3 规约(概念/实现分界·用户立2026-11-05): doc-conventions 数值纪律换代——GDD 概念文档只定概念/机制/规则,数量面与呈现实现细节不进概念正文;分工三处定案(取值域与字段契约=game/data/schemas/*.gd 域校验执法·现行值=data/tables/*.tres·呈现实现规格=design/gdd/ux/ 呈现实现设计规格层豁免概念纯度);禁实现内容行数据索引例外扩及 data/schemas;收口条款 1/2/5 随动(GDD 表格正文→概念规则句·调参表锁数删列→概念文档不存现行值·压缩批 GDD 表格→参数契约节);§6 骨架调参表节改参数契约(概念面+指路 schema);AGENTS 术语行同步(规则=owner 概念面·取值域=schemas);存量旧调参表节清扫归独立批、消化期不作机检对象(闸无此项判据);本步凭据: 文档域闸 8 道全 exit=0,回执 all_green=true 基线 937d14a1,判定=闸况与基线一致无新增红 2026-11-05 05:31:11 +08:00
7 changed files with 259 additions and 52 deletions

No files matched your search

+1 -1
View File
@@ -48,7 +48,7 @@
| 概念切分与互链 | `design/engineering/concept-conventions.md`——概念封装 / 跨文档引用 / 归档与事实源 |
| 系统设计 / 增删文档 | `design/gdd/02-系统清单.md`——根索引 + 中文规范名↔英文代号对照 |
| 架构(唯一事实源) | `design/engineering/architecture/architecture.md`——历史决策沿革查 git commit log,不另设决策文档 |
| 术语与已锁数值 | 规范名与定义 = `design/gdd/术语表.md`(全库唯一对照表,仅 owner 文档可修订);现行数值 = `game/data/tables/*.tres`;规则与取值域 = 各系统 owner 文档。冲突须显式提出,禁默默改值 |
| 术语与已锁数值 | 规范名与定义 = `design/gdd/术语表.md`(全库唯一对照表,仅 owner 文档可修订);现行数值 = `game/data/tables/*.tres`;规则(概念面)= 各系统 owner 文档;取值域与字段契约 = `game/data/schemas/*.gd`。冲突须显式提出,禁默默改值 |
| 现在做什么 / 待办与待裁 | 根 `roadmap.md` 顶部「当前位」节+迭代总表六列 · 待办唯一登记处 `待办清单.md` · 批次过程与结论查 git 提交信息与 `reports/` |
## 回答风格规则(只管对话输出;文档写作归 doc-conventions §2–§4)
+6 -6
View File
@@ -67,21 +67,21 @@
| 一页纸节点 | 一节、一条规则 ≤一页纸(约 ≤80 行);装不下就拆节 |
| 一系统一文档 | 不建 analysis 推演件;两三句能说清的"为什么"直接写进设计目的或规则正文 |
| 正文只写现行规则 | 禁删除线、"(作废)"、"(日期+拍板)"式注记;审计信息入对应文档附录 |
| 禁实现内容 | 系统文档与概念文档全文禁写实现细节——代码路径(`.gd`/`.py`/`.sh` 与运行时文件路径)、测试文件名、断言名、类名/方法名/信号名/常量名/调试与遥测入口名、提交号一律不出现;唯一例外=数据索引(`game/data/tables/*.tres` 这类表路径与表名、表字段名与表内枚值、存档键、封闭词表标签)。实现事实归 `architecture.md`;验收标准只写玩家或系统可观测面。本行由文档域闸的能力审计机检两个可判死的面(带后缀路径、反引号调用形态),其余靠写卡段人工核对;闸件清单与域划分的唯一出处=`tools/run_all_gates.sh` 头部 |
| 禁实现内容 | 系统文档与概念文档全文禁写实现细节——代码路径(`.gd`/`.py`/`.sh` 与运行时文件路径)、测试文件名、断言名、类名/方法名/信号名/常量名/调试与遥测入口名、提交号一律不出现;唯一例外=数据索引(`game/data/tables/*.tres` 与 `game/data/schemas/` 的表路径与表名、表字段名与表内枚值、存档键、封闭词表标签)。实现事实归 `architecture.md`;验收标准只写玩家或系统可观测面。本行由文档域闸的能力审计机检两个可判死的面(带后缀路径、反引号调用形态),其余靠写卡段人工核对;闸件清单与域划分的唯一出处=`tools/run_all_gates.sh` 头部 |
| 正文单点维护 | 一条规则句只写在定义它的那份文档(owner 文档);其他文档要引用时写指针或语义概括,禁复制色值、尺寸、路径等可核对的具体值——上一句管不住数值之外的双写,本句补上。豁免面 = 执行侧文件必须带字面值才能工作时(生图提示词里的十六进制色、脚本参数),转写不算双写,但该文件头部必须写明"冲突时以 owner 文档为准" |
| 禁写变更记录 | 文档与代码文件内一律禁设「版本历史/修订记录/变更记录/修改记录/更新记录/更新日志」节或表格,禁逐版本叙述「改了哪些条款」;沿革与改动明细只进 git commit log。版本号可作为文档现行身份标记出现在文首状态行与正文引用中,但不得再挂变更表 |
| 后置 ≠ 删除 | P1/P2 后置内容逐条列出;复活后置项 = 修订文档,禁静默加回 |
| 活体清单不冻结计数 | 对会生长的清单(文档树构成、UI 层项、RNG 流词表等)不写死计数与枚举——写指针到 owner(根索引/常量表/实现文件),现状值由 owner 承载;历史计数只进 git 提交信息 |
**数值纪律**:正文定规则、取值域、单位;平衡值进 `data/tables/`,provisional 必须标注;已锁数值事实源 = `game/data/tables/*.tres`(现行值)与 owner 文档正文(规则、取值域、单位)。
**数值纪律(概念/实现分界,2026-11-05 用户立)**:GDD 概念文档只定概念、机制与规则——是什么、有什么、为什么;数量面(多大、多少、多大概率)与呈现实现细节不进概念文档正文。分工三处:取值域与字段契约归 `game/data/schemas/*.gd`(表结构定义+域校验执法,provisional 随值标注);现行值归 `game/data/tables/*.tres`;呈现实现规格(冻结公式、像素值、动效参数)居 `design/gdd/ux/`=呈现实现设计规格层,豁免概念纯度约束。存量系统文档的旧调参表节由独立清扫批消化,消化期不作机检对象(现行闸无此项判据)。
**登记处唯一性**:`design/registry/`(`entities.yaml`/`architecture.yaml`)已注销删除,禁再建第二处事实登记——术语进 术语表、数值进 `.tres`、架构进 架构文档、影响面靠全仓搜索概念规范名得出。强制收口条款:
1. **双写失同步禁止**——任何数值变更必须同时同步引用该数值的 GDD 表格正文、`data/tables/` 行值与 schema 校验域、相关待办清单现状——三类之一未更新即视为变更未完成。
2. **调参表锁数后删现行值列**——仅留 schema 模板与取值域,指针指向 `.tres` 对应行键。
1. **双写失同步禁止**——任何数值变更必须同步受影响三处:概念文档正文中表述该数值的规则句(若有)、`data/tables/` 行值与 schema 校验域、相关待办清单现状——其一未更新即视为变更未完成。
2. **锁数后概念文档不存现行值**——概念文档参数契约节只留概念与意图,指针指向 `.tres` 对应行键与 schema 域校验。
3. **覆盖范围** = 奖励/状态/敌人/技能/充能/护甲等级/区间掷点/难度曲线/D_ref 等所有数值字段。
4. **维护通道** = 「设计批 → 同步批」两段式;数值表改完不等于修订完成。
5. **压缩/换装批** = 「`.tres` 落批 + 切片 smoke 跑通 + GDD 表格改为只留取值域与 `.tres` 指针 + 待办清单刷新」四步全收才记版本号。
5. **压缩/换装批** = 「`.tres` 落批 + 切片 smoke 跑通 + 概念文档参数契约节改为概念句与指针 + 待办清单刷新」四步全收才记版本号。
## 6. 文档类型与骨架
@@ -98,7 +98,7 @@
| `待办清单.md`(仓库根) | 流水线唯一登记处:条目=登记元数据标题+四属性正文,状态随流水线段推进(格式与状态机见第 12.1 节);各系统文档「待办」节只留指路存根 |
| `roadmap.md`(根目录) | 里程碑表+迭代总表,一行一迭代,记录编排与实现进度(六列格式见第 12.2 节) |
**系统文档骨架**(`systems/` 下统一采用):文首引言(一句话定位+状态)/设计目的(2-4 句白话)/系统范围(负责/不负责两表)/在核心循环中的位置(字符画一行+两句白话)/核心规则(领域章节 ×2–6,每节一页纸)/依赖与输出(表格;引用纪律见 concept-conventions)/P0 最小闭环与 P1·P2 后置/调参表(取值域+provisional 标注)/验收标准(玩家或系统可观测的判据,禁实现细节)/待办(指路存根)。
**系统文档骨架**(`systems/` 下统一采用):文首引言(一句话定位+状态)/设计目的(2-4 句白话)/系统范围(负责/不负责两表)/在核心循环中的位置(字符画一行+两句白话)/核心规则(领域章节 ×2–6,每节一页纸)/依赖与输出(表格;引用纪律见 concept-conventions)/P0 最小闭环与 P1·P2 后置/参数契约(概念面:本系统有哪些参数、各自设计意图一句话;取值域与字段契约指路 `game/data/schemas/`,不进本文)/验收标准(玩家或系统可观测的判据,禁实现细节)/待办(指路存根)。
**命名**:中文、见名知意;禁 a1_/b1_ 编号前缀;不留纯空目录。正文指代子系统一律用中文规范名;英文代号对照表见 `02-系统清单.md`,旧代号(a1–d6)仅限解读归档。
@@ -1,7 +1,7 @@
# 关卡节点图生成
> 一句话:一关的节点图从哪来——生成器按参数长出一张合法图
> 状态:现行为 v1.4
> 状态:现行为 v1.5
## 设计目的
@@ -43,10 +43,10 @@
| 约束 | 内容 |
|---|---|
| 道路系统 | 图=主路+支路;除岔口节点(两条以上去路的节点)外每个节点恰一条去路;岔口去路 2–3 条 |
| 宽度=分叉生长 | 不摆平行层;同深度节点数由岔口自然长出,至宽度上限为止(上限读参数档,见调参表) |
| 宽度=分叉生长 | 不摆平行层;同深度节点数由岔口自然长出,至宽度上限为止(上限读参数档,见参数契约) |
| 层高=沿路步数 | 入口到终点的最长路径步数;第一关 ≥6,逐关递增且增幅变大 |
| 出口归属锁定 | 多终点时由大岔口把图分成互不连达的分支区域,各区域只通向自己的终点;每个终点前一层节点的去路集合恰含一个终点——选路=提前承诺打谁 |
| 战斗节点保底 | 奖励/恢复/商店占位后战斗节点量不被挤没(保底数进调参表) |
| 战斗节点保底 | 奖励/恢复/商店占位后战斗节点量不被挤没(保底数进参数档,见参数契约) |
| 多终点深度互异 | 多终点(多 Boss 节点)必须落在互异的节点深度;同一节点深度出现两个终点即判产出无效——共深会让「走哪条路打谁」落空 |
节点深度的算法:自入口沿路走到该节点的最长路径步数;多入口时取距任一入口的最长路径。不用最短路径——合流节点或多入口图上取最短,会让某些出边指向深度不增甚至更浅的节点,破坏「连线只朝前进方向」的无环判据。
@@ -74,6 +74,8 @@
每关一套参数档(L1/L2/L3),生成器只吃参数档、不认关卡号。生长曲线:层高、宽度、节点总数、路径长度逐关递增且增幅变大;决策点密度逐关递增;第一关即含岔口——第一关也要有选择。单链是分支密度取下限的合法退化形态,不作为三关参数档的取值。
图规模无呈现侧上限:关卡画面为卷轴视口呈现,画布随图生长、屏为窗口(呈现规格归 [level-map](../../ux/level-map.md));规模由参数档与生长曲线约束,参数档给不出合法图即致命中止。
### 节点类型配比:类型分布怎么掷、内容归谁
配比是生成旋钮:战斗/奖励/恢复/商店各占多少由参数档定,生成器掷出分布落在图上成为节点类型;配比只管非终点节点,终点恒为 Boss、不进配比。节点类型在可见范围内对玩家公开(可见性规则归关卡节点地图)——看得见的类型才谈得上提前规划。
@@ -85,7 +87,7 @@
| 商店位 | 每个终点前一位恰一家商店——每名玩家一局必经恰一家店 |
| 岔路取舍·下一跳 | 一个岔口分出的各条去路,下一节点类型互不相同——下一跳必在可见范围,是决策的可见锚(实现侧已兑现:候选集强制豁免类型可见性) |
| 岔路取舍·支路构成 | 一个岔口分出的各条支路,整条支路的节点类型构成互不相同——每条支路至少有一个别的支路没有的类型(例:一路有恢复节点、一路有奖励节点) |
| 支路互异上限=出口数 3 | 商店与 Boss 每条支路必有,可供支路互斥的类型只剩战斗/奖励/恢复三类——一条链上的岔口最多切出 3 条互异支路,故出口个数取值域为 1–3(见生成参数旋钮表) |
| 支路互异上限=出口数 3 | 商店与 Boss 每条支路必有,可供支路互斥的类型只剩战斗/奖励/恢复三类——一条链上的岔口最多切出 3 条互异支路,故出口个数至多 3(见生成参数旋钮表) |
内容归各 owner:战斗节点打谁=敌人系统按深度带配池;奖励/恢复/商店的兑付语义=关卡节点地图与各 owner 文档。
@@ -100,27 +102,25 @@
| 协作 | 敌人系统 | 战斗节点遭遇按深度带配池,遭遇坐标=关卡序号+深度带;多终点各配 Boss 行 |
| 协作 | 难度曲线与Boss | 图规模(节点数/战斗量)进它的投放节奏账;深度带配池的难度坡归它,本文零数值 |
| 上游 | 数据配置 | 参数档数据的承载与统一读取,数值事实源=data/tables |
| 协作 | level-map | 呈现只读:图形态随参数变化,画布自适应;多终点各带 Boss 标记 |
| 协作 | level-map | 呈现只读:图形态随参数变化,画布随图生长(卷轴视口呈现,规格归 level-map);多终点各带 Boss 标记 |
## 调参表
## 参数契约
数值事实源=data/tables;本表只留取值域与设计意图。
本表只留概念面——本系统有哪些参数、各自管什么;取值域与字段契约的单点=数据 schema 层(`game/data/schemas/` 的关卡节点图参数结构,域校验执法),现行值=`game/data/tables/level_gen_params.tres`,provisional 标注随 schema 注释。本文不存取值域。
| 参数 | 取值域 | 设计意图 | 状态 |
|---|---|---|---|
| 层深 L1 | ≥6(步) | 第一关不再是零选择短链——够长才有岔口与取舍 | 已锁下限 |
| 层深 L2/L3 | >前一关且增幅变大 | 后期关显著更长,推进感随冒险加深 | provisional |
| 岔口去路数 | 2–3 | 每次取舍在 2–3 条里选:少了没选择,多了不过脑 | 已锁 |
| 岔口取三去路概率 | percent [0, 100] | 允许三去路的岔口中,实际长出第三条去路的比例——控制宽图出现频率 | provisional |
| 同深度节点宽度上限 | int [2, 6] | 同一深度最多并排几个节点;岔口生长到此即止,不再加宽 | provisional |
| 填充交替起始 | percent [0, 100] | 恢复/奖励节点交替填充时,先放恢复节点的概率(50 为对称) | provisional |
| 分支密度 | 待定值 | 一局遇到多少次取舍(目标量级=一局十几次,待设计验证) | provisional |
| 入口个数 | 1 起 | 多入口给「从哪进场」的第一层选择 | provisional |
| 出口个数 | L1 恒 1;L2/L3 1–3 | 多终点让「走哪条=打谁」成立;大岔口自第二关起 | 已锁范围 |
| 配比 | 四类占比合计 1,战斗保底优先 | 攻击性/兑付/恢复的节奏配比 | provisional |
| 战斗节点保底数 | ≥ 调参值 | 成长位不挤没战斗——战斗是本作核心量 | provisional |
| 商店数 | =出口数 | 每局决战前恰一次补给,成长保底是结构事实 | 已锁 |
| 图包络 | ≤ 屏预算(1280×800 下约 10 层×8 槽) | 超预算只许限参数档,禁改画布冻结公式 | 已锁 |
| 参数 | 设计意图(概念面) |
|---|---|
| 层深 | 图有多高(沿路步数);第一关不再是零选择短链,后期关显著更长,推进感随冒险加深 |
| 岔口去路数 | 每次取舍在少量去路里选:少了没选择,多了不过脑 |
| 岔口取三去路概率 | 允许三去路的岔口中,实际长出第三条去路的比例——控制宽图出现频率 |
| 同深度节点宽度上限 | 同一深度最多并排几个节点;岔口生长到此即止,不再加宽 |
| 填充交替起始 | 恢复/奖励节点交替填充时,先放恢复节点的比例 |
| 分支密度 | 一局遇到多少次取舍(目标量级待设计验证) |
| 入口个数 | 多入口给「从哪进场」的第一层选择 |
| 出口个数 | 多终点让「走哪条=打谁」成立;大岔口自第二关起 |
| 配比 | 攻击性/兑付/恢复的节奏配比,战斗保底优先 |
| 战斗节点保底数 | 成长位不挤没战斗——战斗是本作核心量 |
| 商店数 | 每局决战前恰一次补给,成长保底是结构事实 |
## 验收标准
+84 -17
View File
@@ -1,14 +1,14 @@
# UX Spec: 关卡画面(选路枢纽,Level Map)
> **Status**: 定稿版(现行——三项设计提案已拍板:底栏状态展示 / 图上点击选路·候选按钮退役 / 放弃二次确认;形态为独立屏;视觉终稿已冻结)
> **Status**: 定稿版 v2.0(现行——四项设计拍板:底栏状态展示 / 图上点击选路·候选按钮退役 / 放弃二次确认 / 卷轴视口范式〔2026-11-05 用户拍板〕;形态为独立屏;视觉终稿已冻结——视口行为见布局决策 5)
> **Author**: user + ZCode
> **Last Updated**: 2026-10-29
> **Last Updated**: 2026-11-05
> **Platform Target**: PC (Steam)——Keyboard/Mouse 主,全部操作纯鼠标可完成(同 [battle.md](battle.md))
> **Template**: UX Spec
> **覆盖范围**: 独立屏形态(关卡停点全景)· 入口停点 · 岔路停点 · 单链停点 · 放弃冒险入口
> **不覆盖**: 节点覆盖层(NodeOverlay——奖励/恢复兑付反馈,spec:[node-reward.md](node-reward.md))、商店覆盖层(spec:[shop.md](shop.md))、关卡结算屏([level-clear.md](level-clear.md))、战斗屏([battle.md](battle.md))
> **机制权威**: [关卡节点地图](../systems/冒险循环/关卡节点地图.md)(选路、兑付、停点语义);图的来源 = [关卡节点图生成](../systems/冒险循环/关卡节点图生成.md)(参数化长图——只换图的来源与形态,不换本屏的呈现语义;多终点时各终点均带 Boss 标记,标记语义不变、数量随图;图形态随参数变化,布局自适应,形态不进呈现代码);**系统契约**: [HUD框架](../systems/表现与支撑/HUD框架.md)(订阅纪律、模态层级、可访问性基线)
> **生成图随动登记**:入口停点候选数=入口个数(1 或多,多入口并列呈现,首跳即选从哪个入口进场);节点数字=图内句柄 id(非节点深度、非数组序);生成图深度域 L3 上探至 0–13,超出画布冻结公式约 10 层的屏预算——等比缩放与滚动视口两案均未设计(见待办清单「超预算图策略升级路径」条),本 spec 冻结值暂不变。
> **生成图随动登记**:入口停点候选数=入口个数(1 或多,多入口并列呈现,首跳即选从哪个入口进场);节点数字=图内句柄 id(非节点深度、非数组序);生成图深度域 L3 上探至 0–13——卷轴视口范式(布局决策 5)下画布随图生长、屏为窗口,深度不再受屏预算约束(2026-11-05 用户裁:滚动视口案落地、等比缩放案否决;原「超预算」挂账闭合)。
---
@@ -18,7 +18,7 @@
一句话目的:**让「我在图上哪、下一步能去哪、去了会发生什么」一眼可读,选路即出发。**
- 节点图本体承载 P4(地牢下探隐喻):方块地牢观感的整层纵览,本层的形状与去路尽收眼底
- 节点图本体承载 P4(地牢下探隐喻):方块地牢观感的整层纵览——当前节点与去路一眼在目,深处支路经卷轴视口拖拽/滚轮可达(布局决策 5)
- 候选选路口承载 P1(推理的掌控感):下一步的去向明示(节点类型字面),零自动推进——每一步都是玩家亲手走出来的
- 底部状态栏承载规划原料:生命、属性与本关已选加成常读,支撑「低血先疗、缺攻先补」一类选路判断(2026-09-27 拍板:底栏 = 状态展示)
@@ -61,12 +61,12 @@
### Layout Zones
按 1280×800 基座(2026-09-12 定)。本屏为独立屏独占呈现:屏底(深底背景色 + 石纹底噪〔框材组冻结件,缺位纯色回退〕)铺满,内容居中三段。
按 1280×800 基座(2026-09-12 定)。本屏为独立屏独占呈现:屏底(深底背景色 + 石纹底噪〔框材组冻结件,缺位纯色回退〕)铺满,内容三段;节点图区为卷轴视口(布局决策 5)——画布可超屏,屏为窗口。
| 区 | 位置与尺寸 | 内容 |
|---|---|---|
| **顶栏语境** | 居中横排,图区上方,高约 32px | 左:关卡名(关卡表 `display_name` 行值,如「第二层 · 幽暗地域」);右:GP 常驻徽章(GP 图标+数字,直角细线数据框——GP 值域超点阵适用档,走 pattern 5 的 When-NOT-to-Use 路线);HP 归底部状态栏(2026-09-27 拍板完成) |
| **节点图区** | 居中 | 整幅节点图自绘:节点方块 + 通道折线 + 节点态着色 + Boss 紫赤描边。画布随图自适应(**冻结公式**:宽 = 70+层深×122+44.5、高 = 52+槽位×58+25+24,下限 620×256——路线缺陷根修后定值);通道折线**冻结 2/3/4px**(未点亮石灰 STONE/候选亮金 GOLD_LIT/悬停加粗);节点方块 52×36 内**节点图标 20px 烘焙 1:1**(♻ kenney 五键:战=弓/赏=桂冠/疗=篝火/王=王冠/商=钱袋,WARM 单色、当前金底转深墨——双色墨制)+ 编号(图内句柄 id)10px 右上角 |
| **节点图区** | 居中 | 卷轴视口承载整幅节点图自绘:节点方块 + 通道折线 + 节点态着色 + Boss 紫赤描边。画布随图自适应(**冻结公式不变**:宽 = 70+层深×122+44.5、高 = 52+槽位×58+25+24,下限 620×256),**可超屏**——屏为窗口,视口行为见布局决策 5;通道折线**冻结 2/3/4px**(未点亮石灰 STONE/候选亮金 GOLD_LIT/悬停加粗);节点方块 52×36 内**节点图标 20px 烘焙 1:1**(♻ kenney 五键:战=弓/赏=桂冠/疗=篝火/王=王冠/商=钱袋,WARM 单色、当前金底转深墨——双色墨制)+ 编号(图内句柄 id)10px 右上角 |
| **底部状态栏** | 图区下方横排,高约 48px | 左-中:状态数据框组(直角细线,pattern 5 族)——生命(当前/上限 + 迷你血条)、属性(攻击 / 护甲 AC,有效值 + 加成角标)、本关加成(攻+X · 上限+Y · AC+Z,零加成隐藏);右端:放弃冒险按钮(危险红族文字,与状态数据框保持间距——破坏性确认异位,pattern 7) |
### Component Inventory
@@ -75,7 +75,7 @@
|---|---|---|---|---|
| 关卡名标签 | 文本 | 关卡表 `display_name` 行值(关卡表行读数) | 只读 | 新建(现行标题位升级) |
| GP 常驻徽章 | 直角细线数据框 | GP 图标 + 数字(冒险钱包读数;刷新经钱包变动信号投影〔gain/buy/clear 三事件〕或写路径回执后重查) | 只读 | 新建(GP 去向拍板承载面) |
| 节点图画布 | 自绘 Control | 节点图标(五键 20px 烘焙,双色墨制)+ 编号(图内句柄 id)、通道折线、节点态着色、Boss 紫赤描边+深墨环(BOSS_PURPLE——紫赤本色) | 悬停预承诺 / 点击提交选路(唯一通道) | ✅ 已实装(视觉终稿已落码) |
| 节点图画布 | 自绘 Control(卷轴视口承载) | 节点图标(五键 20px 烘焙,双色墨制)+ 编号(图内句柄 id)、通道折线、节点态着色、Boss 紫赤描边+深墨环(BOSS_PURPLE——紫赤本色) | 悬停预承诺 / 点击提交选路(唯一通道)/ 拖拽·滚轮平移视口(布局决策 5) | ✅ 已实装(视觉终稿已落码;视口行为随卷轴范式批落地) |
| 状态数据框组 | 直角细线数据框 ×3 | 生命(当前/上限 + 迷你血条)、属性(攻击 / 护甲 AC 有效值 + 加成角标)、本关加成(加算区增量列表,零加成隐藏) | 只读 | 新建(2026-09-27 拍板:底栏状态展示) |
| 放弃冒险按钮 | 按钮(危险红族) | 「放弃冒险(同失败结算——已获大奖励保留)」;二次确认态已拍板(见布局决策 3) | 点击(首击转确认态、二击提交) | ✅ 已实装(可见性归组合根,仅冒险模式开) |
| 标题行 | 文本 | 停点语境提示(见布局决策 1 三停点标题) | 只读 | ✅ 已实装(措辞已按布局决策 1 改稿) |
@@ -94,24 +94,82 @@
**布局决策 4 —— 底部状态栏(2026-09-27 拍板)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「奇物列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。
**布局决策 5 —— 卷轴视口范式(2026-11-05 用户拍板)**:生成图实测深度域 L3 0–13 超出画布屏预算(原挂账「超预算图策略升级路径」),用户裁滚动视口案落地、等比缩放案否决(像素纪律——非整数缩放碰 20px 图标 1:1 与折线 2/3/4px 冻结值)。行为四条:
| 行为 | 规格 |
|---|---|
| 视口锚点 | 当前节点居中(屏中线 x=640±2);入口停点尚无当前节点,锚定入口节点组居中 |
| 视口跟随 | 停点切换与兑付确认回图时,视口平滑滚动至新当前节点(时长 provisional 0.3s,单段缓动);减动效开=跳终态(瞬切),同 UiKit.motion 通道 |
| 手动平移 | 拖拽画布+滚轮横滚;平移范围 clamp 在画布包络内(不出露屏底空档);拖拽与图上点击以拖动距离阈值区分(阈值 provisional,实现期定值),拖拽不触发选路提交 |
| 指引 | 不做缩放、不做缩略图(等比缩放案已否决);视口边缘 70px 渐隐带+图区底部居中平移提示 chip(240×30、圆角 6、深底石灰描边、文案 14px——色值随 art-bible 冻结色板,provisional)作「视口外还有内容」的暗示;其余暗示形态(如到达边缘回弹)后置,试玩反馈再定 |
视口为纯呈现态:平移位置零核心写、不进存档(重进本屏按锚点规则重新定位)。
**视口效果图**(2026-11-05 用户人审通过,内嵌备查;节点类型字与色值为占位示意,终稿以在库 kenney 五键图标与 art-bible §4.1 冻结色板为准):
<svg viewBox="0 0 1280 800" width="100%" style="min-width:720px" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="lmap-viewport-title lmap-viewport-desc">
<title id="lmap-viewport-title">卷轴视口效果图——第三关岔路停点</title>
<desc id="lmap-viewport-desc">当前节点居中锚定,画布 1700px 超出 1280px 屏,两侧渐隐与平移提示 chip;深度 0 与 12–13(含 Boss)拖拽滚轮可达。</desc>
<defs>
<linearGradient id="lmap-bg" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#4A3B2A"/><stop offset="1" stop-color="#33291F"/></linearGradient>
<linearGradient id="lmap-fadeL" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#3A2E22" stop-opacity="0.9"/><stop offset="1" stop-color="#3A2E22" stop-opacity="0"/></linearGradient>
<linearGradient id="lmap-fadeR" x1="1" y1="0" x2="0" y2="0"><stop offset="0" stop-color="#33291F" stop-opacity="0.9"/><stop offset="1" stop-color="#33291F" stop-opacity="0"/></linearGradient>
</defs>
<rect width="1280" height="800" fill="url(#lmap-bg)"/>
<text x="24" y="24" font-size="16" fill="#E8DCC8" font-weight="500">第三层 · 灰矮人矿城</text>
<rect x="1140" y="7" width="116" height="25" fill="none" stroke="#8A8578"/><text x="1198" y="24" font-size="14" fill="#E8DCC8" text-anchor="middle">◈ 128</text>
<text x="640" y="56" font-size="16" fill="#D9CBAE" text-anchor="middle" font-weight="500">选择下一节点</text>
<g fill="none" stroke="#8A8578" stroke-width="2" opacity="0.75">
<polyline points="152,311 274,369"/><polyline points="274,369 396,369"/><polyline points="396,369 518,311"/><polyline points="396,369 518,427"/>
<polyline points="884,253 1006,253"/><polyline points="884,369 1006,369"/><polyline points="1006,369 1128,311"/>
</g>
<g fill="none" stroke="#E3C05C" stroke-width="3"><polyline points="640,369 762,311"/><polyline points="640,369 762,427"/></g>
<g fill="none" stroke="#8A8578" stroke-width="2" stroke-dasharray="5,5" opacity="0.5"><polyline points="1250,369 1280,369"/></g>
<rect x="0" y="344" width="66" height="50" rx="8" fill="#68562C"/><text x="33" y="374" font-size="14" fill="#2d2a22" text-anchor="middle" font-weight="700">战</text>
<rect x="115" y="286" width="73" height="50" rx="8" fill="#68562C"/><text x="152" y="316" font-size="14" fill="#2d2a22" text-anchor="middle" font-weight="700">战</text>
<rect x="237" y="344" width="73" height="50" rx="8" fill="#68562C"/><text x="274" y="374" font-size="14" fill="#2d2a22" text-anchor="middle" font-weight="700">疗</text>
<rect x="359" y="344" width="73" height="50" rx="8" fill="#68562C"/><text x="396" y="374" font-size="14" fill="#2d2a22" text-anchor="middle" font-weight="700">战</text>
<rect x="481" y="286" width="73" height="50" rx="8" fill="#68562C"/><text x="518" y="316" font-size="14" fill="#2d2a22" text-anchor="middle" font-weight="700">商</text>
<rect x="604" y="344" width="73" height="50" rx="8" fill="#C9A22F" stroke="#F0E3B8" stroke-width="2"/><text x="640" y="374" font-size="14" fill="#2d2a22" text-anchor="middle" font-weight="700">战</text>
<rect x="726" y="286" width="73" height="50" rx="8" fill="#3E362A" stroke="#E3C05C" stroke-width="3"/><text x="762" y="316" font-size="14" fill="#E8DCC8" text-anchor="middle" font-weight="700">赏</text>
<rect x="726" y="402" width="73" height="50" rx="8" fill="#3E362A" stroke="#E3C05C" stroke-width="3"/><text x="762" y="432" font-size="14" fill="#E8DCC8" text-anchor="middle" font-weight="700">战</text>
<rect x="848" y="228" width="73" height="50" rx="8" fill="#3E362A"/><text x="884" y="258" font-size="14" fill="#B7AB93" text-anchor="middle">战</text>
<rect x="848" y="344" width="73" height="50" rx="8" fill="#3E362A"/><text x="884" y="374" font-size="14" fill="#B7AB93" text-anchor="middle">疗</text>
<rect x="970" y="344" width="73" height="50" rx="8" fill="#3E362A"/><text x="1006" y="374" font-size="14" fill="#B7AB93" text-anchor="middle">战</text>
<rect x="1092" y="286" width="73" height="50" rx="8" fill="#3E362A"/><text x="1128" y="316" font-size="14" fill="#B7AB93" text-anchor="middle">商</text>
<rect x="1214" y="344" width="66" height="50" rx="8" fill="#3E362A"/><text x="1247" y="374" font-size="14" fill="#B7AB93" text-anchor="middle">战</text>
<rect x="0" y="60" width="70" height="680" fill="url(#lmap-fadeL)"/>
<rect x="1210" y="60" width="70" height="680" fill="url(#lmap-fadeR)"/>
<rect x="520" y="688" width="240" height="30" rx="6" fill="#2A2118" fill-opacity="0.85" stroke="#8A8578"/>
<text x="640" y="708" font-size="14" fill="#D9CBAE" text-anchor="middle">◄ 拖拽画布 / 滚轮平移 ►</text>
<rect x="0" y="744" width="1280" height="56" fill="#2A2118" fill-opacity="0.6"/>
<rect x="24" y="757" width="63" height="10" rx="5" fill="#B0453A"/>
<text x="122" y="768" font-size="14" fill="#E8DCC8">生命 14/20</text>
<text x="230" y="768" font-size="14" fill="#E8DCC8">攻击 6 ⁺2</text>
<text x="330" y="768" font-size="14" fill="#E8DCC8">AC 12 ⁺1</text>
<text x="430" y="768" font-size="14" fill="#D9CBAE">本关加成: 攻⁺2 · 上限⁺5 · AC⁺1</text>
<text x="1256" y="768" font-size="14" fill="#C0454E" text-anchor="end" font-weight="500">放弃冒险</text>
</svg>
像素级视觉判据(效果图随附,写卡与实现基线对照用):①视口锚点=当前节点方块中心居屏中线 x=640±2;②画布超窗不缩放——屏缘裁切、图标 20px 1:1 与折线 2/3/4px 原值呈现,屏缘两侧各 70px 渐隐带;③平移提示 chip 图区底部居中 240×30(圆角 6、文案 14px);④拖拽/滚轮后深度 0 首列与深度 13 末列(含 Boss 紫赤描边)均可达屏内。
### ASCII Wireframe
```
1280 × 800 ────────────────────────────────────────────────────────────────────
│ (独立屏底——战斗屏整体隐藏,零透出) │
│ 第二层 · 幽暗地域 [◈ 128](GP 常驻徽章) │
│ │
│ [战0]──┐ │
│ ├──[战3]──┬──[赏6]──┐ │
│ [战1]──┤ │ ├──[王8] ←悬停候选=亮金加粗+指针 │
│ [战2]──┴──[疗4]──┴──[战7]──┘ (战=已过·暗金 疗=当前·金 │
│ 亮金描边=候选 王=紫赤描边·Boss) │
│ 第三层 · 灰矮人矿城 [◈ 128](GP 常驻徽章) │
│ 选择下一节点 │
│ ◄渐隐│ …[战0]─[战3]─[疗6]─●[战9]─◇[赏10]─[疗13]─[战16]─[商19]…│渐隐► │
│ │ 画布 1700px 超屏(卷轴视口):当前节点●居中锚定; │
│ │ 深度 0 与 12–13(含 Boss 紫)视口外,拖拽/滚轮可达 ◇=候选亮金描边 │ │
│ [◄ 拖拽画布 / 滚轮平移 ►] │
│ │
│ HP ▓▓▓░ 14/20 │ 攻击 6 ⁺2 │ 护甲 AC 12 ⁺1 │ 本关加成: 攻⁺2·上限⁺5·AC⁺1 放弃冒险 │
└──────────────────────────────────────────────────────────────────────────────┘
```
> 图为岔路停点示意(第二关行集):已过节点暗金(GOLD_DONE #68562C)、当前节点金、候选节点亮金描边、Boss 紫赤描边+外缘深墨细环(灰度冗余通道)。终稿 = 节点图标组(♻ kenney 五键已接线,样张 v1 冻结)+ 通道折线 2/3/4px(已落码)。
> 图为岔路停点示意(第三关行集,卷轴视口):已过节点暗金(GOLD_DONE #68562C)、当前节点金(居中锚定)、候选节点亮金描边、Boss 紫赤描边+外缘深墨细环(灰度冗余通道,在视口外深处);屏缘 70px 渐隐带 + 平移提示 chip。终稿 = 节点图标组(♻ kenney 五键已接线,样张 v1 冻结)+ 通道折线 2/3/4px(已落码)。像素级效果参见布局决策 5 内嵌效果图。
---
@@ -123,9 +181,11 @@
| **单链停点** | 兑付确认后、恰 1 个下一跳 | 标题「继续前进」;单候选节点图上点击提交(候选按钮已退役——图上点击为唯一通道) |
| **岔路停点** | 兑付确认后、≥2 个下一跳 | 标题「选择下一节点」;候选节点图上点击提交(候选按钮已退役——图上点击为唯一通道);亮金通道与候选描边逐一分叉可辨 |
| **悬停预承诺** | 悬停候选节点 | 该节点亮金描边加粗 + 所属通道增亮 + 光标切指针态;移出即回落(仅预承诺,点击才提交) |
| **视口跟随** | 停点切换或兑付确认回图(当前节点变化) | 视口平滑滚动至新当前节点居中(provisional 0.3s;减动效跳终态)——布局决策 5 |
| **手动平移** | 拖拽画布或滚轮横滚 | 视口随动、clamp 画布包络;拖拽不触发选路(拖动距离阈值区分,provisional);平移位置零核心写、不进存档 |
| **放弃确认态** | 首击放弃按钮 | 文案转确认语 + 危险红边框脉冲约 3 秒;超时或移出回落;二击提交放弃请求 |
| **换层进入** | 上一关结算确认 → 新关开始 | 本屏以新关卡数据淡入;屏底世界侧随层进换挡(**换层色板渐变挂点**——§2.7 切片档:只动色相/饱和、明度带归一,level_index→tint 表候选值 = art-bible §6.3 三关方向,终值随色板样张校准) |
| **减动效** | 设置开关(设置面承载;TunePanel 已退役) | 淡入、描边脉冲等全部 tween 时长减半或跳终态(UiKit.motion 单点包装,同 battle.md 通道) |
| **减动效** | 设置开关(设置面承载;TunePanel 已退役) | 淡入、描边脉冲等全部 tween 时长减半或跳终态;视口跟随平滑滚动跳终态(瞬切)(UiKit.motion 单点包装,同 battle.md 通道) |
**无拒绝子态**:候选提交恒合法(候选集即合法集),本屏无资源面/棋盘面拒绝路径;战斗中放弃由组合根可见性封死(按钮只在选路停点可见——接口契约:战斗中放弃一律拒绝)。
@@ -136,6 +196,7 @@
| 组件 | 动作 | 输入 | 即时反馈 | 结果(经组合根) |
|---|---|---|---|---|
| 候选节点(图上,唯一通道) | 提交选路 | 左键 | 悬停预承诺(描边加粗 + 通道增亮 + 指针)→ 点击本屏关闭 | 选路提交 → 关卡推进方受理——到达即兑付,无进入前确认步 |
| 节点图画布(视口) | 平移视口 | 左键拖拽 / 滚轮横滚 | 视口随动、clamp 画布边界;拖拽超阈值不触发选路 | 纯呈现态——零核心写、不进存档 |
| 放弃冒险按钮 | 终结整局冒险 | 左键(二击提交——首击转确认态,2026-09-27 布局决策 3) | 危险红族反馈 | 放弃请求 → 组合根走冒险落幕(同失败结算——已获大奖励保留) |
**零自动推进纪律**(关卡节点地图 定稿):本屏是唯一的行进发起口——不选就停在图上;没有任何定时、默认或顺延的自动前进路径。兑付后确认挂各兑付面(战斗总结结算〔settlement-summary.md〕/ 节点覆盖层 / 商店覆盖层离开动作),本屏不重复确认步。
@@ -163,6 +224,7 @@
| 时刻 | 过渡 | 依据 |
|---|---|---|
| 打开(进图 / 兑付确认后回图) | 独立屏淡入(约 200ms,同装板淡入档;alpha 淡入非明度变化——§2) | 屏级切换;战斗屏整体隐藏 |
| 视口跟随(停点切换/回图) | 平滑滚动至新当前节点居中(provisional 300ms 单段缓动;减动效跳终态) | 布局决策 5 |
| 选路提交 | 本屏关闭,直达所选节点兑付流程 | 到达即兑付(关卡节点地图) |
| 放弃确认态(拍板落定) | 危险红边框脉冲约 3 秒(单段呼吸,非频闪) | pattern 7;闪烁基线(≤3 次/秒)内 |
| 减动效 | 上述全部时长减半或跳终态 | HUD框架 可访问性基线 |
@@ -195,7 +257,7 @@
**布局与可读**
- [ ] 关卡开始即出图(停点前移语义),入口节点不自动进入;每次兑付确认后回到本屏
- [ ] 1280×800 与 16:9 全屏下顶栏/图区/动作栏无遮挡、无重叠、无内容裁切;节点图完整可见(含 Boss)
- [ ] 1280×800 与 16:9 全屏下顶栏/图区/动作栏无遮挡、无重叠;节点图经卷轴视口完整可达(拖拽/滚轮后首列与末列含 Boss 均可入屏)——画布不超屏的浅图仍整幅居中无裁切
- [ ] 节点四态(已过/当前/候选/未来)+ Boss 描边在灰度截图下可分类;色值对 art-bible §4.1 色板在案
- [ ] 顶栏关卡名与 GP 常驻徽章可见、读数与关卡推进方现值一致(GP 经 gain/buy/clear 事件刷新)
@@ -204,6 +266,9 @@
- [ ] 三停点标题按布局决策 1 呈现,入口停点不出现「继续前进(战斗房)」措辞
- [ ] 候选提交经组合根唯一写路径(选路提交 → 关卡推进方受理),到达即兑付;零自动推进(无任何不选而行的路径)
- [ ] 图上点击为唯一选路提交通道(候选按钮退役,2026-09-27 拍板);悬停预承诺反馈可见
- [ ] 视口跟随:停点切换与兑付回图后当前节点居中(屏中线 x=640±2);平滑滚动呈现,减动效开时瞬切
- [ ] 手动平移:拖拽与滚轮均移动视口且 clamp 画布边界;拖拽不触发选路提交;平移位置零核心写(不进存档)
- [ ] 视口指引:屏缘 70px 渐隐带与平移提示 chip 呈现(像素级判据①–④见布局决策 5 效果图)
- [ ] 底部状态栏三组读数可见且与关卡推进方现值一致(生命当前/上限、攻击/AC 有效值、本关加成增量——零加成隐藏);兑付确认返回后读数刷新
- [ ] 放弃按钮仅冒险模式可见(调试两层不可达);单击不提交、确认态超时回落、二击才终结(已拍板)
- [ ] 放弃后走冒险落幕(同失败结算),已获大奖励保留语义可见
@@ -222,6 +287,8 @@
**已完成(2026-09-28)**:④ **视觉终稿**——节点图标形制/通道质感/画布公式/底栏数据框样式/屏底以关卡画面样张 v1 冻结落码。
**已完成(2026-11-05 用户拍板)**:⑤ **卷轴视口范式**——跟随+拖拽+滚轮、平滑滚动(减动效瞬切)、当前节点居中锚;「图包络 ≤ 屏预算」约束随卷轴范式退役(画布随图生长,规模归参数档——关卡节点图生成 v1.5 参数契约节);等比缩放案否决(像素纪律)。效果图人审通过并内嵌布局决策 5。
---
## 上游义务对照表
+3
View File
@@ -159,6 +159,9 @@ tests/
| 营地大门两分支确认与断点续玩接线 | 营地交互流 | 大门命中区 → 合成鼠标事件经 `push_input` 真点(`ProbeUiUtil.push_click_at`)→ ConfirmDialog 真钮(三出口)→ `main._on_confirm_accepted()`(新冒险确认)/`main._resume_from_menu()`(断点续玩) | `ui_click_probe.gd:_ready`(大门两分支段/断点确认段——真输入 push_click 驱动,2026-11-05 真输入化);`presentation_encapsulation_sweep_test.gd:_init`(迭代52卡③组合根交接面结构性主证——pres封装 V1–V4 四组私取零命中+新公开面正锚,2026-11-05 补链锚) |
| 四柜台拆解后五界面入口改挂与写口零回归 | 营地五界面 | 五界面意图信号 → `CampShopPresenter` → `MetaProgression.tree_buy()` 写口 | `forge_workbench_test.gd:_run`(承载类同迁断言十二项);`ui_click_probe.gd:_ready`(写口链段) |
| 营地篝火回主菜单与笔记本改挂动线 | 营地交互流 | 笔记本命中区 → `CareerOverlay.open()`;篝火命中区 → ConfirmDialog 二次确认 → 主菜单 | `ui_struct_probe.gd:_ready`(career 段);`screen_flow_probe.gd:_ready`(篝火/开合段) |
| 关卡画面视口跟随 | 关卡画面(选路枢纽) | 停点切换与兑付回图经真实屏流程;读面 `LevelMapViewport.viewport_center_canvas_pos()` | `level_map_viewport_probe.gd:_probe_follow_anchor`;`level_map_viewport_probe.gd:_probe_smooth_scroll_reduced_motion` |
| 关卡画面视口平移 | 关卡画面(选路枢纽) | 合成拖拽沿与滚轮沿经 `push_input`(`ProbeUiUtil.push_drag_at()`/`push_wheel_at()`) | `level_map_viewport_probe.gd:_probe_drag_pan`;`level_map_viewport_probe.gd:_probe_wheel_pan`;`level_map_viewport_probe.gd:_probe_clamp_bounds`;`level_map_viewport_probe.gd:_probe_drag_no_submit` |
| 关卡画面视口指引 | 关卡画面(选路枢纽) | 深图经 `LevelMapScreen.open_choices()` 真实停点 | `level_map_viewport_probe.gd:_probe_guidance_chrome` |
| 营地图鉴占位挂起态与反参照结构纪律 | 营地场景视图 | 布告板命中区 → `CampSceneView._gui_input()`(object_pressed 信号) → 图鉴占位视图;营地根态场景树审计 | `ui_struct_probe.gd:_ready`(占位禁词/禁行段);`ui_struct_probe.gd:_ready`(结构禁词段) |
| 营地刷新单口与场景根 HUD 同步 | 营地刷新总线 | 写口尾 → `CampRefreshBus.refresh()` → 现开界面刷新+场景根 HUD 刷新 | `ui_struct_probe.gd:_ready`(顶栏位段);`ui_click_probe.gd:_ready`(写口尾刷新段) |
| Esc 浮窗唤起与三出口动线 | 营地 Esc 流 | 营地场景根态合成 Esc 键事件→ `main_esc_flow.on_esc_input()` → `ui.flow.open/close`;浮窗三钮 `pressed` → 三出口 | `screen_flow_probe.gd:_ready`(Esc 唤起/子界面开态不唤起/再按关窗/非营地不唤起段);`screen_flow_probe.gd:_ready`(返回动线/设置双路径段) |
@@ -0,0 +1,140 @@
# 需求卡片:卷轴视口批(关卡画面选路屏视口化)
- 来源:[待办清单](../待办清单.md)「超预算图策略升级路径——等比缩放与滚动视口两案待裁」条(状态=文档设计已闭合+待写卡,2026-11-05 用户裁滚动视口案落地)。
- **唯一事实源**:[level-map.md v2.0](../design/gdd/ux/level-map.md) §布局决策 5(行为四条表 :101–104+内嵌视口效果图 :108–153+像素级视觉判据 :154)+[关卡节点图生成.md v1.5](../design/gdd/systems/冒险循环/关卡节点图生成.md) §参数契约(图规模无呈现侧上限)。设计讨论四口子与效果图人审均 2026-11-05 用户裁决在案。
- **验收档:中**(呈现交互面——玩家可见但不损持久状态;无存档写读、无结算公式、无 RNG 触碰;批卡 U0 时确认或改判)。
## 1. 目标与完成定义
关卡画面(选路屏)落卷轴视口范式:画布随图生长可超屏,屏为窗口——①视口锚点=当前节点居中;②停点切换与兑付回图平滑滚动跟随(减动效瞬切);③拖拽+滚轮手动平移(clamp 画布包络、拖拽不触发选路);④屏缘渐隐带+平移提示 chip 指引。
完成定义:验证闸对照表 R1–R9 全部有绿读数;场景探针家族扩展件当轮真实跑批通过;代码域闸全绿;用户实机目检「深度 13 图拖拽可达首末列、推进跟随方向感」登记不阻塞。
## 2. 现状事实(开工自行复核)
- [level_map_screen.gd:26-32](../game/presentation/views/level_map_screen.gd) 冻结公式常量:`LAYER_BASE_X=70`/`LAYER_STEP_X=122`/`SLOT_BASE_Y=52`/`SLOT_STEP_Y=58`/`NODE_ICON_PX=20.0`/`NODE_HALF(36.5,25)`(52×36 的 1.4× 绘制)/`HIT_PAD=6.0`。
- [level_map_screen.gd:66-69](../game/presentation/views/level_map_screen.gd) `_content_size(620,240)`、`_layout_cache`——`open_choices` 按图拟合画布尺寸。
- [level_map_screen.gd:77-82](../game/presentation/views/level_map_screen.gd) 画布由 `CenterContainer`(`PRESET_FULL_RECT`)承载:整幅居中、无裁切无平移——超屏图(L3 层深 13,画布宽 1700.5px)两侧各 ~210px 出屏。
- [level_gen_params.tres:41](../game/data/tables/level_gen_params.tres) L3 `layers=13`——深度 13 是现行定值,非极端情形。
- [level_gen_params.gd:3-4、:69](../game/data/schemas/level_gen_params.gd) 头注「域校验沿关卡节点图生成.md v1.1 调参表已锁条款」「域并单点(关卡节点图生成.md v1.4 调参表)」——owner 文档已 v1.5 换代参数契约节,指针失效待反转(本卡 T4 随动)。
- [ui_kit.gd:231-232](../game/presentation/views/ui_kit.gd) `UiKit.motion(dur)` 呈现层 tween 时长单点包装(减动效面)。
- [ui_struct_probe.gd:204](../game/probe/ui_struct_probe.gd) `_audit("level_map", ...)` 既有结构审计锚;[golden/README.md:8](../game/tests/golden/README.md) level_map 全屏 golden=历史留根、现行闸件未对拍(本批不触渲染闸对拍)。
- 全文件 662 行——超 code-conventions §1.1 的 ~400 行审视线,视口承载拆件有据。
## 3. 设计契约(违反=L3 停机呈报)
- 🔴 **冻结值零改动**:节点图标 20px 烘焙 1:1、通道折线 2/3/4px、画布公式(宽=70+层深×122+44.5、高=52+槽位×58+25+24、下限 620×256)、节点方块 52×36×1.4 绘制、编号 10px——视口批只加行为,不动任何像素冻结件(level-map.md:69、:154)。
- 🔴 **视口纯呈现态**:平移位置零核心写、不进存档(重进本屏按锚点规则重新定位);Core 层零触碰、RNG 零触碰(level-map.md:103 行、:107 视口为纯呈现态句)。
- 🔴 **选路唯一通道**:图上点击提交语义零改动;拖拽超阈值不得触发选路提交(level-map.md:103)。
- 🔴 **零自动推进**:视口跟随只随停点切换/兑付回图发生,不构成任何自动前进路径(level-map.md:141 零自动推进纪律不变)。
- 🔴 **拆分边界纪律**(code-conventions §1.1,2026-10-28 用户裁):每个拆出单元有可陈述职责语句与单一变化原因;拆出单元有集体身份;「过阈值」只作发现信号;拆不出内聚单元=停卡走豁免通道,禁硬拆凑绿。
- 🔴 **禁为机检文本保留无效成员**(code-conventions §1.1⑤):机检键与卡片契约互斥=停卡呈报,禁自造第三条路。
## 4. 范围边界
做:视口承载件、锚点跟随、平滑滚动、减动效瞬切、拖拽/滚轮平移、clamp、渐隐带与提示 chip、探针断言、schema 头注指针反转。
不做:缩放与缩略图(等比缩放案已否决)、其余视口暗示形态(边缘回弹等——布局决策 5 注后置)、顶栏/底栏/放弃按钮/覆盖层改动、生成器与参数表改动、键盘/手柄输入(排 Beta)。
## 5. 关联文档同步面
| 文档 | 关联点 | 同步义务 |
|---|---|---|
| [level-map.md](../design/gdd/ux/level-map.md) v2.0 | 布局决策 5 行为实现与 AC :260–271——实现若发现 spec 缺口 | 设计权威——实现批禁写,缺口逐条列反哺点清单由文档批落 |
| [game/tests/README.md](../game/tests/README.md) 能力清单 | 本卡新增能力行三行(写卡段已同批落表,见 §8 能力行列) | 机械面——实现批禁写;批末收尾核对表上名与落地一致(改名则回表) |
| [level_gen_params.gd](../game/data/schemas/level_gen_params.gd) | 头注 :3-4/:69 指针失效(owner 已 v1.5 参数契约) | 本卡 T4 随批反转指针(非行为改动——`game/` 内实现批可写面) |
| [关卡节点图生成.md](../design/gdd/systems/冒险循环/关卡节点图生成.md) v1.5 | 无——本批实现不改变其任何陈述 | 无同步义务 |
## 6. 文件结构图(行为改动→对照表行互指)
| 文件 | 职责 | 改动性质 |
|---|---|---|
| `game/presentation/views/level_map_viewport.gd` | 新增——卷轴视口承载件:画布宿主与裁切、平移状态与 clamp、锚点跟随、平滑滚动、指引件(拖拽/滚轮判定留画布 `_gui_input`——事件流同源) | 行为改动(R2–R8)·新增 |
| `game/presentation/views/level_map_screen.gd` | 修改——CenterContainer 承载换视口件;停点切换/回图接线 `reanchor()`;`_content_size` 拟合后调 `reanchor(false)` 首锚 | 行为改动(R1+R2/R3 随动)·复用既有文件 |
| `game/data/schemas/level_gen_params.gd` | 修改——头注指针反转(owner 单点改为本文件域校验+参数契约指针) | 非行为改动(R9)·复用既有文件 |
| `game/probe/level_map_viewport_probe.gd` + `.tscn` | 新增——视口行为场景探针(真输入驱动) | 行为改动(R2–R8 验收载体)·新增 |
| `game/probe/probe_ui_util.gd` | 修改——新增拖拽沿与滚轮沿真输入合成工具 `push_drag_at`/`push_wheel_at`(沿 `push_click_at` :717-733 同式;探针共用面唯一落点) | 非行为改动(探针侧工具)·复用既有文件 |
## 7. 任务卡 T0..T4
### T0 读数与基线(0.5 工作日)
- [ ] 核对 `tools/gdstyle_baseline.txt` 有无 `level_map_screen` 相关 S13 键;有则记录登记值(改后只降不升),无则记「无键、按工具默认」
- [ ] 跑场景探针现状读数:`…console.exe --headless --path . res://probe/ui_struct_probe.tscn`(level_map 审计段绿)+ `res://probe/screen_flow_probe.tscn`——读数记入本步提交信息
- [ ] 跑冒烟 `python tools/run_smoke.py`——基线读数在案
### T1 视口承载件与手动平移(1–1.5 工作日)
- [ ] 新增 `level_map_viewport.gd`(接口块见 §10):`setup(canvas, anchor_provider, viewport_size)`、`pan_by(delta)`、`viewport_center_canvas_pos() -> Vector2`、`is_clamped_at_edge() -> bool`;`clip_contents=true`;成员 ≤8
- [ ] `level_map_screen.gd` 承载改造:CenterContainer 换视口件实例;`open_choices` 拟合后调 `reanchor(false)` 首锚(入口停点锚入口组、其余锚当前节点——`anchor_provider` 由 screen 提供画布坐标)
- [ ] 拖拽/滚轮判定落**画布既有 `_gui_input`**(画布已持有鼠标事件流——悬停/选路同源,禁在视口件层做父子事件路由竞争;视口件只管裁切/offset/clamp/跟随):拖动距离阈值(provisional 8px)判定,超阈值进拖拽态逐帧调 `viewport.pan_by()`;滚轮横滚映射 `pan_by`(代拍板:滚轮下=向右/前进向)
- [ ] clamp:`pan_by` 后 offset 收敛在画布包络内(`viewport_center_canvas_pos()` 画布坐标恒在 `[half_view, canvas_size-half_view]` 夹紧域;**画布小于视口=居中分支**——夹紧域退化为居中定位);探针宿主沿 ui_struct_probe :204 同款(组合根真实屏 `main.ui.modals.run.level_screen`),禁合成投喂替代真实路径
- [ ] 探针 `level_map_viewport_probe.gd`:断言 R3(拖拽移视口)、R4(滚轮移视口)、R5(clamp 边界)、R6(拖拽不触发选路——`route_chosen` 零发射);真实入口=probe_ui_util 合成沿走 `push_input`
### T2 锚点跟随与平滑滚动(0.5–1 工作日)
- [ ] `reanchor(smooth)`:目标 offset=锚点画布坐标−视口半宽(居中);`smooth=true` 走单段缓动 tween 时长 `UiKit.motion(0.3)`(provisional);`smooth=false` 即达;重入先杀在飞 tween 再建新(快速连续停点切换防叠加)
- [ ] 减动效:`UiKit.motion` 通道既有减动效语义下滚动跳终态——探针断言 R7(减动效开=位置即达,无 tween 中间帧)
- [ ] level_map_screen.gd 停点切换与兑付回图路径接 `reanchor(true)`——入口停点锚入口节点组(多入口取组包围盒居中)
- [ ] 探针断言 R2(停点切换后当前节点画布坐标投影=视口中线 x=640±2)
### T3 指引件(0.5 工作日)
- [ ] 视口件内渐隐带:屏缘左右各 70px 渐变(色取屏底同族——代拍板渐变 stops);浅图画布不超屏时渐隐带隐藏(无暗示必要)
- [ ] 平移提示 chip:240×30 圆角 6、深底石灰描边、文案「◄ 拖拽画布 / 滚轮平移 ►」14px;图区底部居中(level-map.md:104)
- [ ] 探针断言 R8(渐隐带与 chip 可见性+几何判据——像素级判据②③,level-map.md:154)
### T4 指针反转与收口(0.5 工作日)
- [ ] `level_gen_params.gd` 头注 :3-4/:69 反转:「取值域与字段契约单点=本文件域校验;概念与设计意图=关卡节点图生成.md v1.5 参数契约节」(非行为改动——grep 判据 R9)
- [ ] 全探针最窄回归:ui_struct_probe level_map 段+screen_flow_probe 复跑绿(波内修复只做出红最小单元的最窄确认)
- [ ] 产出物落位:`reports/iter<N>-实现报告-<日期>.md`(各卡状态+实机目检总清单+实现决定记录)+ `reports/iter<N>-反哺点-<日期>.md`(同步面所列逐条落点)——轻闸全绿后、合并前写齐
估时合计:3–4.5 工作日(中值 3.5)。
## 8. 验证闸(改动—验收对照表)
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|---|---|---|---|---|---|---|
| R1 浅图整幅居中无裁切+画布入视口件承载(锚 design/gdd/ux/level-map.md:260) | level_map_screen.gd(CenterContainer→viewport 件) | `level_map_viewport_probe.gd:_probe_shallow_no_crop`〔卷轴批 V1〕 | 探针 | 场景探针实例化本屏+open_choices 真实停点 | 画布尺寸≤视口时居中分支 offset 定位、无裁切 | 新增:关卡画面视口跟随 |
| R2 视口锚点:停点切换/回图后当前节点居中 x=640±2(锚 design/gdd/ux/level-map.md:101、:269) | level_map_viewport.gd `reanchor`+screen 接线 | `level_map_viewport_probe.gd:_probe_follow_anchor`〔卷轴批 V2〕 | 探针 | 合成推进停点切换经真实屏流程 | 当前节点画布坐标经 `viewport_center_canvas_pos()` 投影=640±2 | 新增:关卡画面视口跟随 |
| R3 拖拽平移移动视口(锚 design/gdd/ux/level-map.md:103) | 画布 `_gui_input`(level_map_screen.gd)拖拽态调 `pan_by` | `level_map_viewport_probe.gd:_probe_drag_pan`〔卷轴批 V3〕 | 探针 | `ProbeUiUtil.push_drag_at` 拖拽沿走 `push_input` | `_offset` 位移量=拖拽位移(clamp 前) | 新增:关卡画面视口平移 |
| R4 滚轮横滚移动视口(锚 design/gdd/ux/level-map.md:103) | 画布 `_gui_input` wheel 分支调 `pan_by` | `level_map_viewport_probe.gd:_probe_wheel_pan`〔卷轴批 V4〕 | 探针 | `ProbeUiUtil.push_wheel_at` 合成滚轮沿走 `push_input` | `_offset` 位移=滚轮步进映射 | 新增:关卡画面视口平移 |
| R5 clamp 边界与首末列可达:不出露屏底空档、拖拽两极首列与末列(含 Boss)入屏(锚 design/gdd/ux/level-map.md:103、:260) | `pan_by` 收敛逻辑+包络两极 | `level_map_viewport_probe.gd:_probe_clamp_bounds`〔卷轴批 V5〕 | 探针 | 极端拖拽沿(超包络、两极到边) | `viewport_center_canvas_pos()` 恒在夹紧域;浅图居中分支;`is_clamped_at_edge()` 翻转;两极时深度 0 与深度 13 列中心入视口 | 新增:关卡画面视口平移 |
| R6 拖拽不触发选路提交(锚 design/gdd/ux/level-map.md:103) | 画布 `_gui_input` 阈值判定(provisional 8px) | `level_map_viewport_probe.gd:_probe_drag_no_submit`〔卷轴批 V6〕 | 探针 | 拖拽沿起止于候选节点上方 | `route_chosen` 零发射+屏幕未关 | 新增:关卡画面视口平移 |
| R7 平滑滚动与减动效瞬切(锚 design/gdd/ux/level-map.md:102、:188、:227) | `UiKit.motion(0.3)` tween/减动效跳终态 | `level_map_viewport_probe.gd:_probe_smooth_scroll_reduced_motion`〔卷轴批 V7〕 | 探针 | 停点切换+设置面减动效置位 | smooth=true 有 tween 中间帧;减动效开=位置即达 | 新增:关卡画面视口跟随 |
| R8 指引件:渐隐带 70px+chip 240×30 呈现(锚 design/gdd/ux/level-map.md:104、:154) | 视口件指引子件 | `level_map_viewport_probe.gd:_probe_guidance_chrome`〔卷轴批 V8〕 | 探针 | 深图 open_choices 真实停点 | 像素级判据②③(level-map.md:154)——可见性+几何 | 新增:关卡画面视口指引 |
非行为改动行:schema 头注指针反转(level_gen_params.gd:3-4/:69)——判据=全仓无「域并单点=调参表」残留、头注含「参数契约节」指向(锚 design/gdd/systems/冒险循环/关卡节点图生成.md:109);由 §6 文件结构图该行覆盖,T4 落步,实现报告对照表列非行为改动行。
锚行核对义务:开工时行号以当版文件为准(本卡锚基于 v2.0/v1.5 抄录)。
- 测试方式两分法:R1–R8 全走探针自动化(调试注入不适用——本卡零数据面改动,状态经真实停点与真实输入驱动);用户目检项=「深度 13 图拖拽可达首末列、跟随方向感、chip 不碍选路」登记进实现报告实机目检总清单(登记不阻塞)。
- 回归措辞:里程碑步(T 段)出口跑一次场景探针族全套;波内修复只做出红最小单元的最窄确认;新增探针先行孤立验证再并入全套。
- 测试削弱申报:无删旧断言申报;ui_struct_probe level_map 段既有审计判据不改——承载改造若触其结构断言面,适配性调整须在实现报告申报并保持判据语义。
- 独立验收审计:`reports/iter<N>-验收审计-<日期>.md`,由未参与实现的会话执行;本卡验收档=中,审计深度按 test-conventions §8.7 中档执行(对照表逐行全量、判据绑定面抽查、削弱检查逐处、直查例外逐条、最窄复跑以远端 CI 现查读数代证)。
## 9. 异常分级
- L1 自救:探针断言红→改后只跑出红探针的最小单元;闸红只跑红件。
- L2 记录继续:画布 `_gui_input` 内拖拽态与悬停/选路命中分支次序的调整、渐变/chip 视觉微调(provisional 区间内)、S13 读数波动在只降不升约束内的消化。
- L3 停机写报告等用户:触碰 §3 任一 🔴;S13 键上升且无法只降;拆不出内聚单元;机检预算互斥=上游缺陷停卡退回写卡段;拖拽误触选路提交且路由层面消不掉。
## 10. 落位与可复用性预检
- **level_map_viewport.gd(新增)**:不复用 `ScrollContainer`——其滚动条 UI、焦点/滚动语义与本屏「纯鼠标、无滚动条、锚点居中跟随」冲突,且平滑滚动与 clamp 语义仍需全自管;承载裁切用 Control `clip_contents`(引擎内建,项目已有 clip 先例)。唯一面:视口 offset 状态只落本件(screen 的 `_layout_cache` 仍管布局、不管视口);全仓 grep 无第二处视口/平移逻辑。分层:呈现层内部子件——构造注入(canvas/anchor_provider/viewport_size 一次交齐,code-conventions §1.6 拆分交接);读核心只读面经 screen 既有出口,零新增核心触点。
- **probe_ui_util.gd 增补(复用既有文件)**:`push_drag_at`/`push_wheel_at` 落探针共用面唯一落点——禁另起工具文件散落;`push_click_at`(ui_input_probe :717-733 同式)点击沿同式扩展。
- **指引件(渐隐带/chip)**:随视口件承载(同职责:视口呈现行为);不立独立文件——拆出「命不出名字的打包」即凑计数袋。
- **level_gen_params.gd 头注反转(复用既有文件)**:注释单行改动,无新增件。
## 11. 实现规范预算
- **新增 level_map_viewport.gd 三查**:①接口块公开方法 4(setup/pan_by/viewport_center_canvas_pos/is_clamped_at_edge)≤20 ✓;②成员变量 ≤8(_canvas/_anchor_provider/_viewport_size/_offset/_tween/_drag_active/_drag_accum/_guided_visible)≤15 ✓;③无迁移函数(新件零存量函数迁入——screen 侧只是接线改造,hover/命中逻辑零迁移)。
- **存量触面**:level_map_screen.gd——T0 记 S13 键基线;本批改动为承载替换与 reanchor 接线,预期键值持平或只降;达成手段=T4 复跑 S13 对账。
- 指标例外:无申报。
## 12. 代拍板白名单
1. 画布 `_gui_input` 内拖拽态与悬停/选路命中的事件分支次序(红线=R6 判据不破)。
2. 拖拽距离阈值具体值(8px 附近 provisional 区间内定值)。
3. 平滑滚动缓动曲线类型(单段缓动家族内选型)。
4. 渐隐带渐变 stops 与 chip 深底/描边色值(art-bible §4.1 冻结色板同族取值)。
5. 滚轮方向映射(下=向右/前进向)。
超清单决定记入实现报告「实现决定记录」节。
## 13. 待裁点
零待裁点,开工门=U0(四口子与效果图 2026-11-05 用户已裁决;验收档「中」随批卡确认)。
+3 -6
View File
@@ -22,15 +22,12 @@
#### 超预算图策略升级路径——等比缩放与滚动视口两案待裁(2026-10-24 登记,来源=批次移交)
**实况**:图源按「参数限图」交付,图包络约 10 层×8 槽即当前冻结画布的屏预算上限。若后续定值批需要更大的完整可见图,两条升级路径都要动冻结件,均未设计:①等比缩放——动「节点图标 20px 烘焙 1:1」与「通道折线冻结 2/3/4px」两条冻结值;②滚动视口——新增视口交互范式。生成图实测深度域 L3 达 0–13,已超出该上限(level-map 已登记随动缺口,未裁方案前禁改画布冻结件)。
- 相关文档 design/gdd/systems/冒险循环/关卡节点图生成.md v1.3(调参表「图包络」行)
- 相关文档 design/gdd/ux/level-map.md(画布冻结公式)
**缺口**:两案需用户裁决后再走设计讨论;未裁前禁改画布冻结件。
**实况**:2026-11-05 用户裁滚动视口案落地(等比缩放案否决——像素纪律):关卡画面卷轴视口,跟随+拖拽+滚轮、平滑滚动(减动效瞬切)、当前节点居中锚;「图包络 ≤ 屏预算」约束退役,画布随图生长、规模归参数档。设计闭合凭据:design/gdd/ux/level-map.md v2.0(布局决策 5+视口效果图内嵌,2026-11-05 人审通过);design/gdd/systems/冒险循环/关卡节点图生成.md v1.5(参数契约节+图规模无呈现侧上限句)。需求卡片=reports/需求卡片-卷轴视口批-2026-11-05.md(grilling 复核裁决全落,验收档中)。
- 相关文档:关卡节点图参数取值域已归数据 schema 层;schema 头注「域并单点=调参表」指针反转随实现批顺带(卡片随动项);需求卡片 reports/需求卡片-卷轴视口批-2026-11-05.md(grilling 复核裁决全落,验收档中)。
**改动面**:文档
**状态**:待文档设计
**状态**:文档设计已闭合+已写卡
#### UI 贴图重构批——元进度件仍是程序化占位(2026-10-13 登记,来源=审计发现)