棋盘材质过审与卡片收口: 512×512 三关岩顶/地面定稿、薄边与断续岩块口径落文——art-bible v3.53(§3.2 受光/崖面/材质/投影、§8.1 过审资产规格、§8.5 地形结构例外)、battle.md 内嵌三关过审实图与像素判据、asset-path-map/两清单/待办实况同步;需求卡片 T-A 六项完成、完成定义3/9与T3/T4/T7/§12 全表20组内容锚收口、§16 第九轮14条独立复核全处置并复验通过;7张材质过审预览锚与生成参数登记 golden/README(非引擎帧,不替代 board_L*);凭据: path_check 0问题、pipeline_gate PASS(32/58/7/9)、文档域闸验收通过无新增红、六材质512×512且9/6色

This commit is contained in:
DKChan committed 2026-11-10 03:54:15 +08:00
1 parent 750b491b23
commit d97145ee21
17 files changed
+155 -82

No files matched your search

@@ -0,0 +1,18 @@
<!doctype html>
<html lang="zh-CN"><meta charset="utf-8"><title>棋盘材质预览 v2</title>
<style>
body{margin:0;background:#17130e;color:#f0e2c8;font:15px/1.7 "Microsoft YaHei",sans-serif}
.wrap{max-width:1240px;margin:0 auto;padding:28px 20px 60px}h1{font-size:24px;margin:0 0 6px}
h2{font-size:18px;margin:30px 0 10px;color:#f2c14e}p{color:#b9a582;margin:6px 0}
.row{display:flex;gap:14px;flex-wrap:wrap}figure{flex:1 1 320px;margin:0;background:#221c15;border:1px solid #3a2f22;border-radius:10px;padding:10px}
figure img{width:100%;display:block;image-rendering:pixelated;border-radius:4px}figcaption{color:#b9a582;font-size:13px;text-align:center;margin-top:8px}
.tex{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.tex figure img{max-height:360px;object-fit:contain}
footer{color:#8f7d5f;font-size:12px;margin-top:30px;border-top:1px solid #3a2f22;padding-top:10px}
</style><div class="wrap">
<h1>棋盘材质预览 v2 · 真实像素候选</h1>
<p>同一母图换色;岩顶与地面均为 512×512 无缝材质。整板一次铺图,崖面为断续岩层,顶面黑边收薄。浮空数字、格边 46、间距 2、抬升 20、侧移 5 全部沿用。</p>
<h2>三关整板</h2><div class="row"><figure><img src="data:image/png;base64,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 truncated
<h2>崖面与岩顶细部(3×)</h2><div class="row"><figure><img src="data:image/png;base64,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 truncated
<h2>数字与地面细部(3×)</h2><div class="row"><figure><img src="data:image/png;base64,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 truncated
<h2>无缝材质母图</h2><div class="tex"><figure><img src="data:image/png;base64,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 truncated
<footer>artwork/2026-11-09-棋盘材质候选-v2/ · 材质已于 2026-11-09 录入 game/assets/art/board/;本页为过审视觉基线。</footer></div></html>
@@ -1,10 +1,10 @@
# 需求卡片:棋盘瓦片与立体表现重做批
> 来源:`待办清单.md`「棋盘瓦片与立体表现重做」(2026-11-07 登记)。
> **设计事实源(唯一事实源)**:`design/art/art-bible.md` v3.51 §1.4/§3.2/§4.1「三关棋盘环境八色」/§6.3/§7/§8.2+`design/ux/battle.md`(Last Updated 2026-11-07)「Layout Zones」D 区行/「D 区布局与棋盘画法预览」/「封印格呈现预览」+`design/gdd/systems/表现与支撑/HUD框架.md`(2026-11-07)D 区行与字号下限+`game/tests/golden/README.md`「越格口径」。
> **设计事实源(唯一事实源)**:`design/art/art-bible.md` v3.53 §1.4/§3.2/§4.1「三关棋盘环境八色」/§6.3/§7/§8.1「格边长与材质分工」/§8.2/§8.5「生产分工」+`design/ux/battle.md`(Last Updated 2026-11-09)「Layout Zones」D 区行/「D 区布局与棋盘画法预览」/「封印格呈现预览」+`design/gdd/systems/表现与支撑/HUD框架.md`(2026-11-07)D 区行与字号下限+`game/tests/golden/README.md`「越格口径」。
> **验收档:中**(呈现与交互几何改动,后果玩家可见但不损持久状态;用户 U0 可改判)。
> **预计**:9.5 个工作日(区间 9–10;T0 0.5/T1 1.5/T2 0.5/T3 2.0/T4 1.5/T5 1.5/T6 0.5/T7 1.0/T8 0.5)。
> **卡片状态**:复核记录见 §16;第一轮 19 条、第二轮 23 条、第三轮 4 条、第四轮 5 条、第五轮 1 条、第六轮(合并整合)6 条均已处置,第六轮定向复核通过。
> **预计**:11.0 个工作日(区间 10–12;T0 0.5/T1 1.5/T2 0.5/T-A 0.5/T3 2.5/T4 1.5/T5 1.5/T6 0.5/T7 1.5/T8 0.5)。
> **卡片状态**:复核记录见 §16;第一轮 19 条、第二轮 23 条、第三轮 4 条、第四轮 5 条、第五轮 1 条、第六轮(合并整合)6 条、第七轮(材质实现回退)1 条、第八轮(浮空数字几何)1 条、第九轮(512 材质与过审同步)14 条均已处置,第七/八/九轮定向复核通过。
---
@@ -16,13 +16,13 @@
1. 1280×800 基座档:12×12 格边 38px、14×14 格边 32px;D 区 1036×548;左/右栏各 200px;棋盘 12×12 外框 478×478、**屏幕坐标**原点 (523,296)、board_area 局部原点 (279,44);14×14 外框 474×474、屏幕原点 (525,296)、局部原点 (281,44)。
2. 顶行浮空数字视觉顶 y=258(含 2px 描边+1px 浮空投影),距 D 区上缘 6px;数字、引导线、阴影圆全部在 D 区内,无裁切。
3. 岩体投影:LIFT=round(格边×0.435)、ESHIFT=round(格边×0.109);四邻连通合并;相邻岩顶搭接 2px;南崖高 LIFT、宽 格边+ESHIFT、顶缘 2px 口沿高光取本关受光棱(§4.1);东崖宽 ESHIFT、高 格边+LIFT;北/西 2px 主亮棱+2px 次亮棱+外 2px 深墨边;南/东 2px 深墨内缘+3×2px 内阴影(自缘内 0.217×格边起,α0.27/0.16/0.08);四段投影 4×4px(α0.44/0.30/0.16/0.07);整板悬崖 8px。
3. 岩体投影:LIFT=round(格边×0.435)、ESHIFT=round(格边×0.109);四邻连通合并;相邻岩顶搭接 2px;南崖高 LIFT、宽 格边+ESHIFT、顶缘 1px 受光口沿+1px 深墨线;东崖宽 ESHIFT、高 格边+LIFT;北/西 1px 主亮棱+1px 次亮棱+外 2px 深墨边;南/东 3×1px 内阴影;崖面用低对比、断续且错开的岩块面,任何岩层线不得贯通整条崖面;南向投影 4×4px(α0.25/0.16/0.09/0.04)、东向 α0.22/0.14/0.07/0.04;整板悬崖 8px。
4. 深度排序:深度键=格底 y;岩体取最南格格底;升序绘制;南侧岩体画在小人之后并遮住小人脚底;小人所在格数字仍完整可见。格件顶面贴花/交互反馈随所属格件参与同一深度排序——北侧(脚底≤小人)低于小人(`z=0`),南侧(脚底>小人)随岩体在前(`z=3`);浮空数字仍最顶。
5. 浮空数字:字高 21px、2px 深墨描边+1px 浮空投影、暖白字芯、字底距格顶 15px、2px 双色引导线、10×6 阴影圆(圆心格顶+7,画在开启格地面、位于小人之下);数字与引导线 z 最高,任何地形/小人/特效不遮数字与引导线;小人可遮阴影圆。
6. D 区:左栏 AP 点阵+停手,右栏 RAP 点阵+数字+图例+弃图刷新;`side_rail_w=200` 入布局表;`ap_bar_h` 游戏视图零引用(布局表字段暂留供样张渲染工具,删除归工具批);棋盘底常驻操作提示条退役;toast 槽在左栏顶部且不覆盖棋盘与浮空数字。
7. 旧 `terrain_*` 63 件与 `tile_palette.gd`/`cell_base_layer.gd` 删除;`seal_mark.png` 保留;**普通数字**棋盘绘制路径零 `DIGIT_PLATE`/`plate` 调用;封印格身份字形色牌保留(迭代56封印改版,唯一例外)。
8. 封印呈现按迭代56「受理即揭示」口径:印记居已揭示地面格心、身份字形垫色牌叠于法阵之上、印记与色牌固定低于小人、该格不生成浮空 entries;封印格地面铺本关受光棱色封印石(零新增色,对封印黑对比 6.45–9.94:1),普通已开格地面仍为连续新地面。
9. 三关(dungeon/underdark/deep_underdark)都走新材质与同一画法;三关八色按 art-bible §4.1 冻结(underdark 冷蓝灰、deep 灰黑);三关 golden 基线重制并在渲染闸通过。
9. 三关(dungeon/underdark/deep_underdark)都走 512×512 新材质与同一画法;三关八色按 art-bible §4.1 冻结(underdark 冷蓝灰、deep 灰黑);三关 12×8 材质过审预览锚已按 2026-11-09 用户过审图重制,引擎侧 `board_L*` 三关 golden 基线仍待实现后按渲染闸口径换代并通过。
10. 命中仍按逻辑格矩形:点在抬升岩顶/崖面/浮空数字上不改变格坐标映射;16×16 等非当前板型由同一公式求值。
**不做**:真 3D、HD-2D、A/B 方案对照、旧瓦片回退、逐格新 PNG 瓦片、B/C 区改版、核心规则/数值/RNG 改动。
@@ -31,12 +31,12 @@
## 2. 设计事实源
- **画法与配色**:`design/art/art-bible.md` v3.51 §3.2「棋盘地形体系」八条(术语与定义/投影与搭接/受光与崖面/材质与装饰/投影与整板悬崖/绘制序与遮挡/浮空数字/旧资产处理)+封印印记条、§4.1「棋盘环境子板/三关棋盘环境八色/封印黑/数字色牌」、§6.3「三关 tile_closed/tile_open 终值」、§8.2「封印印记参数表」、§1.4 第一验收项。
- **画法与配色**:`design/art/art-bible.md` v3.53 §3.2「棋盘地形体系」八条(术语与定义/投影与搭接/受光与崖面/材质与装饰/投影与整板悬崖/绘制序与遮挡/浮空数字/旧资产处理)+封印印记条、§4.1「棋盘环境子板/三关棋盘环境八色/封印黑/数字色牌」、§6.3「三关 tile_closed/tile_open 终值」、§8.1「格边长与材质分工」、§8.5「生产分工」、§1.4 第一验收项。
- **封印呈现前置**:迭代56「封印动作改版批」已闭合 `design/gdd/systems/排雷循环/排雷玩法.md` v2.0「封印受理即揭示」与 `design/ux/battle.md`「封印格呈现预览」——封印格 = 已揭示地面+法阵+身份字形色牌;本卡承接其地形换代(承载面改受光棱封印石、圆心仍格心、色牌与法阵层序不变),不重写揭牌逻辑。
- **布局与像素判据**:`design/ux/battle.md`(2026-11-07)D 区行、棋盘格尺寸公式、「D 区布局与棋盘画法预览」像素判据表(含顶面/视觉 rect、悬停/路径 rect、层序)、Component Inventory 三行(行动资源侧栏/棋盘地形层/棋盘浮空数字层)。
- **布局与像素判据**:`design/ux/battle.md`(2026-11-09)D 区行、棋盘格尺寸公式、「D 区布局与棋盘画法预览」像素判据表(含顶面/视觉 rect、悬停/路径 rect、层序)、「棋盘材质过审实图」节(12×8/46/≤32 色/无贯通岩层线)、Component Inventory 三行(行动资源侧栏/棋盘地形层/棋盘浮空数字层)。
- **HUD 契约**:`design/gdd/systems/表现与支撑/HUD框架.md` D 区行(侧栏/全高棋盘/提示条退役)、布局表高度口径、字号下限(浮空数字 21px 固定)。
- **验收面**:`game/tests/golden/README.md`「加严口径(棋盘三图)」「越格口径(2026-11-07 棋盘地形换代)」。
- **上游已裁**:C 方向(合并岩体+越格画法+新大岩板材质)2026-11-07 用户看样张通过;顶栏搬两侧(D)2026-11-07 用户看三方案预览后选定;北/西受光、按样张调深、脚底行排序三项同会话裁定;underdark/deep 两关色板 2026-11-07 用户看方向样张后选定「按目标八色冻结」;棋盘底操作提示条退役同会话选定。
- **上游已裁**:C 方向(合并岩体+越格画法+连续岩顶图/连续地面贴图材质+浮空数字)2026-11-07 用户看样张通过——用户裁的是画面外观,**不含「程序化材质」**;材质=无缝贴图、结构=程序化,分工按 art-bible §8.5。顶栏搬两侧(D)2026-11-07 用户看三方案预览后选定;北/西受光、按样张调深、脚底行排序三项同会话裁定;underdark/deep 两关色板 2026-11-07 用户看方向样张后选定「按目标八色冻结」;棋盘底操作提示条退役同会话选定。写卡段曾把材质误写成程序化,本卡按 2026-11-09 用户裁回退,见 §16 第七轮。**512×512 三关材质、断续岩块与薄边缘**于 2026-11-09 用户目检 `reports/2026-11-09-棋盘材质预览-v2.html` 后确认「没有问题,可以按这样」,本卡按该预览冻结。
---
@@ -64,14 +64,14 @@
| 普通已开危险格「危」当前垫色牌;落牌断言在玩家复制回归件(本卡后普通「危」改浮空、plate=false;封印格「危」仍垫牌) | `game/tests/unit/presentation/player_copy_sweep_test.gd:142-147`(`u.plate == true`) |
| 单元测试入口登记 terrain 套件 | `game/tests/run_all.gd:225` |
| 布局表字段被样张渲染工具读取(本批不改工具) | `tools/layout_config.py:12`;`tools/render_sample_sheet.py:51,956`;`tools/render_sample_sheet_v3.py:862,936` |
| 档期现状:待办清单已「已写卡」、roadmap 待编池「棋盘瓦片与立体表现重做(已写卡,待编排)」、08 已写卡 | `待办清单.md:265-268`;`roadmap.md:9`;`design/gdd/08-Alpha版本标准.md:149` |
| 档期现状:待办清单为「已写卡+已编迭代 57」,roadmap 迭代 57 已登记本卡、状态待开工;08 已写卡 | `待办清单.md` 本条目状态段;`roadmap.md` 迭代 57 行;`design/gdd/08-Alpha版本标准.md` 本卡行 |
---
## 4. 设计契约(🔴 触碰=L3 停机呈报)
1. 🔴 **只改呈现层与必要接线**:禁止改 `game/core/` 的排雷规则、棋盘数据、AP/RAP、战斗结算、RNG;棋盘数据只读。新增/修改只落 `game/presentation/`(含 `main.gd`/`main_debug_flow.gd` 的重建接线)、`game/probe/`、`game/tests/`、`game/data/schemas/`、`game/data/tables/` 与 `reports/`。
2. 🔴 **不做逐格瓦片**:禁止保留或新增 16+5 逐格瓦片路径、`terrain_*` 回退、`TilePalette` 装图链;岩体/地面/崖面必须按整板矩形与格边程序化绘制,连通按四邻。
2. 🔴 **不做逐格瓦片**:禁止保留或新增 16+5 逐格瓦片路径、`terrain_*` 回退、`TilePalette` 装图链;岩顶/地面材质用无缝贴图(按合并岩体与整板一次铺图,UV 用棋盘全局坐标、禁逐格重置;贴图来源与命名见 T-A),崖面/临空边缘/投影/层序等结构件程序化绘制;连通按四邻。
3. 🔴 **普通数字零底牌**:普通数字(含普通已开格的「危」/「?」)只走浮空描边字;禁止 `_digit_ink_mode` 三态、`plate_digit` 在普通数字路径复活。**封印格身份字形色牌为唯一例外**(迭代56封印改版:`plate=true`、`_draw_digit_plate` 保留、字形叠于法阵之上),禁把例外扩回普通数字。
4. 🔴 **浮空分层**:数字+引导线必须比地形/小人/封印/微光/交互反馈都高,任何元素不得遮数字与引导线;**阴影圆相反——画在开启格地面、位于小人之下**,小人站该格时遮住圆;顶行数字必须在 D 区内完整可见。**顶面贴花/交互反馈不得一律置顶**——随所属格件脚底行分档:北侧(脚底≤小人)低于小人,南侧(脚底>小人)随岩体在前;禁恢复“格件一律 z=3”。**封印格例外**:该格不生成浮空 entries/阴影圆,印记与身份色牌固定低于小人(整格 z=0,不参与南侧前推)。
5. 🔴 **命中按逻辑格**:`_cell_at` 仍用逻辑格矩形与 `SEP` 步长;抬升岩顶、崖面、浮空数字不是命中区;顶面左上角点按逻辑公式归属北/西邻格,不做“归本格”特判。
@@ -82,7 +82,7 @@
10. 🔴 **文档不直改**:实现批禁写 `design/`、`game/tests/README.md`(能力清单由写卡段本批入表)、`roadmap.md`、`08-Alpha版本标准.md`、`待办清单.md`;发现条款偏差一律列 `reports/iter<N>-反哺点-<日期>.md`。
11. 🔴 **不删断言换绿**:不得删除或放宽 `board_shot_probe` 的加严口径、渲染闸 2% 判据、`ui_contrast_probe` 对比断言;只允许按本卡 §12「测试削弱申报」列出的旧断言删除/替换。
12. 🔴 **拆分边界**:判据权威=`design/engineering/code-conventions.md` §1.1;每个拆出单元必须有职责语句与单一变化原因(§10);禁止为过阈值凑数拆件;拆不出内聚单元=停卡呈报。
13. 🔴 **RNG 单点**:程序化材质/装饰噪声禁止 `randomize()`、自建 `RandomNumberGenerator`、消耗 `RngService` 共享流;一律用格坐标确定性哈希(同板同参逐位复现)。
13. 🔴 **RNG 单点**:程序化结构/装饰噪声禁止 `randomize()`、自建 `RandomNumberGenerator`、消耗 `RngService` 共享流;一律用格坐标确定性哈希(同板同参逐位复现)。
14. 🔴 **色字面量落点**:三关八色只落 `board_terrain_palette.gd`;用 `Color("#RRGGBB")` 常量,禁 `Color8` 散落;其它绘制点只读 palette,禁第二份色值表。
15. 🔴 **BoardView 公开面不增**:`board_view.gd` 公开方法保持 27、类成员 ≤31(S13 基线;删 `_palette` 后 30);新增地形/浮空/阴影圆层一律落为**固定名字子节点**(`_world` 下 `TerrainBack`/`TerrainFront`/`LabelShadow`,壳层下 `FloatLayer`),三层在 `_init` 创建一次常驻、`rebuild` 只重跑 `setup` 不重建节点,经 `get_node_or_null` 取用,不新增类成员;只允许 `set_cell_area`/`rebuild` 增加可选参数与私有 `_visual_rect_for`/`_top_face_rect`/`_resort_cell_decals`,禁新增公开方法或成员。
16. 🔴 **封印呈现对齐迭代56**:封印印记居已揭示地面格心(不随岩顶 −ESHIFT/−LIFT 偏移);身份字形垫色牌叠于法阵之上(`seal_mark_layer` 子件 `show_behind_parent=true` 或等价实装)、不参与浮空层、不生成阴影圆;印记与色牌固定低于小人(封印格整格 z=0);封印格地面铺本关受光棱色封印石(零新增色,`palette.light_edge`);法阵参数(环径/环壁/十字/光圈)与揭牌逻辑沿迭代56,禁在本卡重写。
@@ -106,13 +106,13 @@
**不收件**:
- B 区舞台/站桩、C 区数据框、AP/RAP 数值与规则、战斗结算、RNG、存档——一律不动。
- 新增地形 PNG 素材:本批按已过审样张做程序化材质;若后续要换成 PNG 材质,另立登记条目走 asset-ingest。
- 已过审 6 张地形贴图之外的再创作、换图或重新量化:T-A 只承接 2026-11-09 已过审的 512×512 六张;本批不再出程序化材质替身,也不以平色回退充当终稿。
- 真 3D/HD-2D、A/B 方案对照、用户试玩结论——试玩只登记不阻塞。
- 三关之外的板型专属美术(16×16 等)——同一公式与材质覆盖,不另出资产。
- 样张渲染工具(`tools/layout_config.py`、`render_sample_sheet*`)的 `ap_bar_h` 字段清理——布局表字段本批保留,工具换代登记待办清单后续直改。
- 三关互辨抽测工具 `tools/glow_discrimination_sheet.py` 的换代(读已删旧 `terrain_*`)——本批不跑;三关互辨由用户过审样张+`board_terrain_test._test_palette_three_boards` 逐值承担,工具换代登记待办清单后续工具批。
**不收件去向**:B/C 区改版→待办清单新条目;PNG 材质替换→asset-ingest 登记;样张/互辨工具换代→待办清单(tools 批);条款偏差→反哺点清单。
**不收件去向**:B/C 区改版→待办清单新条目;已过审六张之外的贴图再创作/换图→另立美术批;样张/互辨工具换代→待办清单(tools 批);条款偏差→反哺点清单。
---
@@ -120,15 +120,15 @@
| 文档 | 关联点(实现会改变它的哪条陈述) | 同步义务 |
|---|---|---|
| `design/art/art-bible.md` §1.2/§3.2/§4.1/§6.3/§6.5/§7/§8.2 | 三关八色、四邻合并、顶面/视觉 rect、阴影视小、浮空字 1px 投影、贴花按脚底行分档、记忆态合成底、提示条 caption 退役;封印印记改已揭示地面格心+受光棱封印石+身份色牌层序(v3.51) | 设计段已按本卡写入 v3.51;实现读数若与条款不符→列反哺点,文档批裁决,实现批禁直改 |
| `design/ux/battle.md` §Layout/§Component/预览判据 | D 区全高、侧栏 200、棋盘 38/32、原点、顶预留 44、层序(贴花/交互按脚底行分档)、悬停/路径 rect、提示条退役;封印格承载面改受光棱封印石、圆心格心、色牌叠法阵 | 设计段已同步(2026-11-07);实现偏差→反哺点 |
| `design/art/art-bible.md` §1.2/§3.2/§4.1/§6.3/§6.5/§7/§8.1/§8.2/§8.5 | 三关八色、四邻合并、顶面/视觉 rect、阴影视小、浮空字 1px 投影、贴花按脚底行分档、记忆态合成底、提示条 caption 退役;封印印记改已揭示地面格心+受光棱封印石+身份色牌层序;岩顶/地面材质=无缝贴图、结构件=程序化(v3.53) | 设计段已按本卡写入 v3.53;实现读数若与条款不符→列反哺点,文档批裁决,实现批禁直改 |
| `design/ux/battle.md` §Layout/§Component/预览判据 | D 区全高、侧栏 200、棋盘 38/32、原点、顶预留 44、层序(贴花/交互按脚底行分档)、悬停/路径 rect、提示条退役;封印格承载面改受光棱封印石、圆心格心、色牌叠法阵;材质过审实图与 12×8/46/≤32 色/无贯通岩层线判据 | 设计段已同步(2026-11-09);实现偏差→反哺点 |
| `design/gdd/systems/表现与支撑/HUD框架.md` D 区/字号 | D 区侧栏、全高棋盘、`ap_bar_h` 不再参与、浮空数字 21px、提示条退役 | 设计段已同步(2026-11-07);实现偏差→反哺点 |
| `game/tests/golden/README.md` | 棋盘裁剪 1036×548、越格口径、类型微光禁越圈范围 | 设计段已同步;实现批禁直改,基线重制按该文件口径执行(重制前用户确认) |
| `design/gdd/术语表.md` 掩尘/裸土/浮空数字/色牌 | 基色值、浮空数字定义、普通数字色牌退役+封印格色牌例外 | 设计段已同步;实现批禁直改 |
| `design/art/asset-path-map.md`/`art-assets-checklist.md` | 旧 terrain_* 退役、seal_mark 保留、普通数字色牌退役+封印格色牌例外、程序化材质无入包 PNG | 设计段已同步;实现删除资产后按反哺点核对 |
| `design/art/asset-path-map.md`/`art-assets-checklist.md` | 旧 terrain_* 退役、seal_mark 保留、普通数字色牌退役+封印格色牌例外、岩顶/地面 6 张无缝贴图入包(`board_rock_*`/`board_ground_*`) | 设计段已同步;实现删除资产后按反哺点核对 |
| `design/engineering/architecture/architecture.md:178` | 单格两绘制域件行把 `cell_base_layer` 记为在役组件;本批删除该件、新增地形/浮空/阴影层 | 架构文档写权限=用户专属(2026-11-07 裁):实现批禁直改,T8 反哺点列「架构表该行待用户发令修订」 |
| `game/tests/README.md` 能力表 | 新增 6 条能力;旧「地形瓦片套与格面数字可读」保留(删除归写卡段后续;实现批禁写);「战斗屏三区几何」代表用例改名 | 写卡段本批入表(本卡同 commit);实现批只核对名字与实际落地一致 |
| `roadmap.md`/`design/gdd/08-Alpha版本标准.md`/`待办清单.md` | 本卡已写/待编排状态 | 编排段与收尾段推进;实现批禁直改 |
| `roadmap.md`/`design/gdd/08-Alpha版本标准.md`/`待办清单.md` | 本卡已写卡/已编迭代 57、待开工 | 编排段与收尾段推进;实现批禁直改 |
---
@@ -136,7 +136,7 @@
| 文件 | 行为改动/非行为 | 职责 | 验收行 |
|---|---|---|---|
| `game/presentation/views/board_terrain_palette.gd`(新增) | 非行为(数据) | 三关八色表:`palette_for(board_type)`;dungeon/underdark/deep 取 art-bible v3.51 §4.1 冻结值;八槽键 `rock_top/ground/cliff/seam/bevel_light/bevel_dark/ink/light_edge`;封印石读 `light_edge`(零新增色);只读 | §12-14 |
| `game/presentation/views/board_terrain_palette.gd`(新增) | 非行为(数据) | 三关八色表:`palette_for(board_type)`+`tex_paths_for(board_type)`;dungeon/underdark/deep 取 art-bible v3.53 §4.1 冻结值;八槽键 `rock_top/ground/cliff/seam/bevel_light/bevel_dark/ink/light_edge`;封印石读 `light_edge`(零新增色);只读 | §12-14 |
| `game/presentation/views/board_terrain_layer.gd`(新增) | 行为 | 地面、合并岩顶、南/东崖面、内阴影、四段投影、封印格受光棱封印石贴片;`setup(cell, cols, rows, wall_at, sealed_at, palette, board_type)`/`set_hero_foot_y()`/`set_pass()`/`mass_rects()`/`terrain_metrics()`;静态 `lift_for()`/`eshift_for()`;back/front 两实例(`_world` 下固定名字 `TerrainBack`/`TerrainFront`,不占 BoardView 成员) | §12-3/4/5/8 |
| `game/presentation/views/board_float_layer.gd`(新增,Control) | 行为 | 外壳层浮空字:2px 描边、1px 浮空投影、双色引导线;`setup()`/`set_entries()`/`set_font()`/`label_rects()`/`label_metrics()`;不画阴影圆;**封印格不生成 entries**;壳层固定名字子节点 `FloatLayer`,不占 BoardView 成员 | §12-6/7 |
| `game/presentation/views/board_label_shadow_layer.gd`(新增,Node2D) | 行为 | 开启格地面 10×6 四层阴影圆;`setup(cell, cells)`/`circle_rects()`(世界局部/格坐标);**封印格不生成圆**;`_world` 下固定名字 `LabelShadow`,不占 BoardView 成员;z=0,位于小人之下 | §12-6/7 |
@@ -189,14 +189,14 @@
| 新文件 | 公开方法预算 | 成员变量预算 | 说明 |
|---|---|---|---|
| `board_terrain_palette.gd` | 1(`palette_for`) | 8 个常量 | 纯数据;不新增类状态 |
| `board_terrain_layer.gd` | ≤7(`setup`/`set_hero_foot_y`/`set_pass`/`mass_rects`/`terrain_metrics`/`lift_for`/`eshift_for`) | ≤13(新增 `_sealed_at` 一个成员——封印石贴片输入;其余同前) | 两个实例共享一个类;`pass_mode` 区分 back/front |
| `board_terrain_palette.gd` | 2(`palette_for`/`tex_paths_for`) | 8 个色常量+2 个路径格式常量 | 纯数据;不新增类状态;贴图路径单点 |
| `board_terrain_layer.gd` | ≤7(`setup`/`set_hero_foot_y`/`set_pass`/`mass_rects`/`terrain_metrics`/`lift_for`/`eshift_for`) | ≤15(新增 `_sealed_at`、`_tex_rock`、`_tex_ground` 三个成员;其余同前) | 两个实例共享一个类;`pass_mode` 区分 back/front;贴图经 `UiKit.load_tex` 装载 |
| `board_float_layer.gd` | ≤5(`setup`/`set_entries`/`set_font`/`label_rects`/`label_metrics`) | ≤8 | 一个 Control;所有数字在一个 `_draw` |
| `board_label_shadow_layer.gd` | ≤2(`setup`/`circle_rects`) | ≤6 | 一个 Node2D;所有圆在一个 `_draw`;坐标=世界局部/格坐标 |
| `ap_bar_view.gd`(改造) | 既有 10 个公开函数不减 | 既有 14 个成员不增(左右栏容器为 `_init` 局部变量) | 不新增公开面/成员;只改 `_init`/`_build_*` |
| 三个测试件 | 每件 ≤20 个 `func _test_*` | 夹具变量 ≤15 | 不计生产接口;测试件无消费面 |
**存量触面**:`board_view.gd` 852 行、公开方法 27、类变量 31→30(删 `_palette`);本批只扩展 `set_cell_area(avail, side_rail_w := 0.0)` 与 `rebuild(board, minesweeper, side_rail_w := 0.0)` 的可选参数,新增 `_visual_rect_for`/`_top_face_rect`/`_resort_cell_decals` 私有方法,**不新增公开方法/成员**;地形/浮空/阴影圆层经固定名字子节点取用(`TerrainBack`/`TerrainFront`/`LabelShadow`/`FloatLayer`);S13 键只降不升。`board_zone_view.gd` 6→7 成员(新增 `_side_rail_w`,默认阈值内)。`board_cell_unit.gd` 12→13 成员(删 `base` 与 `_BASE_LAYER` 预载,新增 `top_face_offset`/`visual_rect`,保留 `plate` 封印色牌;净 +1;`ContactGlow`/`MemoryGround` 用固定名字子节点、不新增成员,默认阈值内)。`ap_bar_view.gd` 14 成员不增。`cell_mark_overlay.gd` 普通数字路径只减面,封印格色牌/字形面保留。迁移函数对账:`cell_base_layer.gd` 的 `draw_base`/`_draw_south_facade`/`_draw_north_projection`/`_draw_e_facade` 不迁入新件同名函数,新件按职责重写并保留像素判据;`tile_palette.gd` 的 `load_board_tiles`/`digit_ink_mode`/`normalize_floor_luma` 不迁移(职责退役)。
**存量触面**:`board_terrain_layer.gd` 新增的贴图成员只服务材质面,不进 `board_view.gd`;`board_view.gd` 852 行、公开方法 27、类变量 31→30(删 `_palette`);本批只扩展 `set_cell_area(avail, side_rail_w := 0.0)` 与 `rebuild(board, minesweeper, side_rail_w := 0.0)` 的可选参数,新增 `_visual_rect_for`/`_top_face_rect`/`_resort_cell_decals` 私有方法,**不新增公开方法/成员**;地形/浮空/阴影圆层经固定名字子节点取用(`TerrainBack`/`TerrainFront`/`LabelShadow`/`FloatLayer`);S13 键只降不升。`board_zone_view.gd` 6→7 成员(新增 `_side_rail_w`,默认阈值内)。`board_cell_unit.gd` 12→13 成员(删 `base` 与 `_BASE_LAYER` 预载,新增 `top_face_offset`/`visual_rect`,保留 `plate` 封印色牌;净 +1;`ContactGlow`/`MemoryGround` 用固定名字子节点、不新增成员,默认阈值内)。`ap_bar_view.gd` 14 成员不增。`cell_mark_overlay.gd` 普通数字路径只减面,封印格色牌/字形面保留。迁移函数对账:`cell_base_layer.gd` 的 `draw_base`/`_draw_south_facade`/`_draw_north_projection`/`_draw_e_facade` 不迁入新件同名函数,新件按职责重写并保留像素判据;`tile_palette.gd` 的 `load_board_tiles`/`digit_ink_mode`/`normalize_floor_luma` 不迁移(职责退役)。
**指标例外申报**:无。若实现期发现 `board_terrain_layer.gd` 超过 7/13,按职责拆 `board_terrain_face_layer.gd`(崖面/投影)——先停卡呈报,不在实现段自行扩面。
@@ -227,7 +227,7 @@
- [ ] 跑 `board_shot_probe` 存三关当前帧与 `board_meta.json`,记下 hash;不重制基线(T7 才换代)。
- [ ] 确认 `game/assets/art/board/` 63 PNG+63 `.import`+`seal_mark.png` 在库;报告列清单。
- [ ] 跑 `python tools/gdstyle_gate.py` 记录 `board_view.gd` 当前 27/31 基线读数;跑 `python tools/capability_audit.py` 记录当前红项(T8 复跑)。
- [ ] 录三关 `board_type` 字符串与 art-bible v3.51 §4.1 三关八色;不采样旧瓦片均值。
- [ ] 录三关 `board_type` 字符串与 art-bible v3.53 §4.1 三关八色;不采样旧瓦片均值。
### T1 布局表与 D 区侧栏(1.5 日)
@@ -258,21 +258,34 @@
- [ ] `ui_input_probe.gd:360-366` 的 `set_cell_area` 恢复调用带 `main.db.presentation.battle_layout.side_rail_w`;`board_gen_reward_test` 的 2 参调用保持(测试独立口径)。
- [ ] 跑 `board_terrain_test` 与 `layout_probe`;报告写读数。
### T3 地形深度层(2.0 日)
### T-A 地形贴图接入(0.5 日,asset-ingest 段,2026-11-09 已完成)
**取用**:T2 的格边/原点;art-bible v3.51 §4.1 三关八色。
**取用**:用户 2026-11-09 目检通过的 `reports/2026-11-09-棋盘材质预览-v2.html`+art-bible v3.53 §8.1/§8.5。
**产出**:三关岩顶/地面 6 张 512×512 无缝贴图入 `game/assets/art/board/`;`asset-path-map`/`art-assets-checklist`/`art-status-checklist` 登记;`.import` 边车;像素域 ≤32 色。
- [x] 资产契约:`board_rock_<board_type>.png`/`board_ground_<board_type>.png`,board_type=dungeon/underdark/deep_underdark;无缝、无边框/无亮边/均匀光照、方形;源尺寸 **512×512**;同一母图换色;单张像素域 ≤32 色。
- [x] 素材已按 asset-ingest 段接入:用户 2026-11-09 对三关整板、崖面/数字细部与 6 张母图确认「没有问题,可以按这样」;预览图作 `board_material_shot_probe` 目标图(非引擎基线),旧 C 方向原稿不再作为新材质基线。
- [x] 落位与边车:6 张全部在 `game/assets/art/board/`,命名合规;Godot 4.7.2 `--import` 已生成 6 个 `.import`。已按 `asset-path-map` §1 把 6 PNG+6 `.import` 同步到主区与 `board-material-fix` 工作区,两区各 12 项一致。
- [x] `asset-path-map.md` 的 `board/` 行改为「512×512 岩顶/地面 6 张无缝贴图+seal_mark」;`art-assets-checklist.md` 记录贴图材质;`art-status-checklist.md` 新增「棋盘岩顶/地面材质 6 张」✅ 行。
- [x] 缺位容错:`UiKit.load_tex` exists 守卫;缺图只在开发态回落 palette 平色,正式包必须 6 张齐;`board_terrain_test._test_material_assets_present` 断言 6 张在库。
- [x] 已删旧候选口径:不再引用 `artwork/2026-11-09-棋盘材质候选/` 的 128×128 稿与 `board_preview_three_levels.png`。
### T3 地形深度层(2.5 日)
**取用**:T2 的格边/原点;T-A 的 6 张贴图;art-bible v3.53 §4.1 三关八色。
**产出**:`board_terrain_palette.gd`、`board_terrain_layer.gd` 两个实例(back/front);`BoardView` 装配;`cell_base_layer.gd` 删除;接触带迁入 CellUnit。
- [ ] `board_terrain_palette.gd`:八色常量(`Color("#...")`)按 art-bible v3.51 §4.1 三关表;八槽键 `rock_top/ground/cliff/seam/bevel_light/bevel_dark/ink/light_edge`;`palette_for(board_type)` 返回 Dictionary;未知 board_type 回退 dungeon 并记录(fail-fast 只在核心,呈现回退不刷错)。
- [ ] `board_terrain_palette.gd`:八色常量(`Color("#...")`)按 art-bible v3.53 §4.1 三关表;八槽键 `rock_top/ground/cliff/seam/bevel_light/bevel_dark/ink/light_edge`;`palette_for(board_type)` 返回 Dictionary;`tex_paths_for(board_type)` 返回岩顶/地面两条 `res://assets/art/board/...` 路径(路径单点);未知 board_type 回退 dungeon 并记录(fail-fast 只在核心,呈现回退不刷错)。
- [ ] `board_terrain_layer.gd` 材质面:`setup` 末尾经 `UiKit.load_tex` 装载 `_tex_rock`/`_tex_ground`(exists 守卫,禁 preload);地面整板一次铺图(`draw_texture_rect` 或等价,UV 用棋盘全局坐标);岩顶按合并岩体一次铺图(同块岩体内相邻格 UV 连续、禁逐格重置、无拼缝);崖面用低对比、断续且错开的岩块面,临空边缘收薄,内阴影与投影按 §1 完成定义 3;缺图时退回 palette 平色(仅开发容错,正式包必须 T-A 6 张齐)。
- [ ] `board_terrain_layer.gd`:`setup(cell, cols, rows, wall_at, sealed_at, palette, board_type)`(`sealed_at` = 封印格查询 Callable);`set_pass("back"/"front")`;`set_hero_foot_y(y)`;`_draw()` 中**地面/投影/封印石/背岩体只在 back 画**(整板悬崖仍由 `BoardWorld._draw` 承担,不重复绘制),岩体按 pass 过滤(back=脚底≤hero,front=>hero),每个 setter 调 `queue_redraw()`;静态 `lift_for(cell)`/`eshift_for(cell)`。
- [ ] 封印石贴片(back):`sealed_at(c)` 为真的格,在连续地面之上铺本格逻辑 rect 的 `palette.light_edge` 实色(可带 1px `palette.seam` 收边),不越格、不加新色;封印黑对受光棱对比 6.45–9.94:1(art-bible v3.51 §3.2/§4.1)。
- [ ] 岩顶公式:`LIFT=round(cell*0.435)`、`ESHIFT=round(cell*0.109)`;四邻连通合并;相邻墙顶搭接 2;板边外延 ESHIFT;南崖高 LIFT、宽 cell+ESHIFT;东崖宽 ESHIFT、高 cell+LIFT;禁竖条纹。
- [ ] 封印石贴片(back):`sealed_at(c)` 为真的格,在连续地面之上铺本格逻辑 rect 的 `palette.light_edge` 实色(可带 1px `palette.seam` 收边),不越格、不加新色;封印黑对受光棱对比 6.45–9.94:1(art-bible v3.53 §3.2/§4.1)。
- [ ] 岩顶公式:`LIFT=round(cell*0.435)`、`ESHIFT=round(cell*0.109)`;四邻连通合并;相邻墙顶搭接 2;板边外延 ESHIFT;南崖高 LIFT、宽 cell+ESHIFT;东崖宽 ESHIFT、高 cell+LIFT;崖面分段由格坐标确定性哈希驱动,任何岩层线不得贯通整条崖面,禁规则三角装饰带与竖条纹。
- [ ] `BoardView` 在 `_init` 以固定名字子节点创建一次常驻的 `_world/TerrainBack`(z=-1)与 `_world/TerrainFront`(z=2),不新增类成员;两层设 `use_parent_material = true`(随 `_world.material` 去饱和);back 画地面/投影/封印石/背岩体;front 画南侧岩体;`hero z=1` 不变;格件 z 按脚底行分档(北侧 0、南侧 3;**封印格恒 0**),由 `_resort_cell_decals` 重算(顶面贴花/交互/迷雾同格件 z);`board_world` 悬崖保留 z=0、`mat` 取新 palette 岩顶色(`_refresh_slab` 不再写 `COL_BRICK`);`rebuild` 清 `_world` 子件时跳过 `TerrainBack`/`TerrainFront`/`LabelShadow`(只清格件与英雄),再对各层重跑 `setup`(不重建节点);`setup` 传入 `_minesweeper.has_seal` 作 `sealed_at`。
- [ ] `BoardView._resort_cell_decals()`(私有):遍历 `_cells`,`u.z_index = 0 if u.seal_on else (3 if c.y > hero.y else 0)`;`ContactGlow`/`MemoryGround` 子件 `z_as_relative=false`、`z_index=-1`(全局 -1:地面之上、阴影圆 0 之下);`refresh` 与 `_update_hero` 末尾调用;hero 缺位时全部按 0 档。
- [ ] `board_view.gd` 删 `_paint_cell_base`/`_paint_cell_facade`(及 `_paint_cell`/`refresh` 调用)、`_floor_tile_for`/`_wall_tile_for`、`_build_cell_unit` 的 `u.base.bevel`;`_paint_cell_ink` 删 `bg` 计算/返回(`COL_FLOOR`/`COL_BRICK` 随之删)但保留 glyph 计算:**封印格写 `u.glyph`/`u.glyph_color`/`u.plate=true`(色牌字形),普通已开格只把 glyph 交给浮空 entries、`u.glyph` 留空**;`_apply_contact_bands`/`_process`/`_reset_breath` 的 `u.base.contact_*` 改调 `ContactGlow.set_bands(bands, corners, color, ground_visible_rect)`(不再经 `u.base`);`COL_DIGIT` 无引用即删;英雄贴图缺位字形「人」回退随基座退役(T4 登记)。
- [ ] 删除 `cell_base_layer.gd`;`board_cell_unit.gd` 去 `_BASE_LAYER` 预载、`base` 成员与 `base.draw_base`,文件头注删 `cell_base_layer` 引用;英雄蓝框随基座退役;接触带绘制迁入固定名字低层子件 `ContactGlow`(`z_as_relative=false`、全局 z=-1:地面之上、阴影圆 0 之下;只画英雄格地面侧,正交整边/斜向角点+两半边,逻辑格边,不进岩体);记忆态地面色/灰罩/记忆墨数字迁入固定名字低层子件 `MemoryGround`(同全局 -1);BoardView 计算 `ground_visible_rect`(本格逻辑 rect 扣除南/东邻未开格岩顶越入,南邻约 LIFT−SEP、东邻约 ESHIFT−SEP)并下发 `MemoryGround.setup(...)`/`ContactGlow.set_bands(..., ground_visible_rect)`,子件不读棋盘、CellUnit 不增成员;两个低层子件只绘地面可见区,禁整矩形覆盖 back 岩顶/崖面;设 `use_parent_material = true`(随世界去饱和);`draw_removed_dim` 墙格改顶面 rect。
- [ ] `standee_present_values_test.gd:79-86`:`cell_src` 源码锚由 `cell_base_layer.gd` 改指 `board_terrain_layer.gd`(北/西主亮棱绘制点),删 `FACADE_HIGHLIGHT_PX), UiKit.BRICK, true` 断言;`body_src` 段保留;跑该件至 0。
- [ ] `board_terrain_test.gd:_test_merged_mass_geometry`:四邻合并、相邻墙顶 rect 相交/搭接 2、无墙顶内框、地面无缝;`_test_projection_ratios`:38 格 LIFT=17、ESHIFT=4、南崖 17×42、南崖顶缘高光=本关受光棱、东崖 4×55、北/西 2+2+外 2 墨边、南/东内阴影 3×2。
- [ ] `board_terrain_test.gd:_test_merged_mass_geometry`:四邻合并、相邻墙顶 rect 相交/搭接 2、无墙顶内框、地面无缝;`_test_projection_ratios`:38 格 LIFT=17、ESHIFT=4、南崖 17×42、南崖顶缘 1px 受光口沿+1px 深墨线、东崖 4×55、北/西 1+1+外 2 墨边、南/东内阴影 3×1、崖面无贯通岩层线;`_test_material_assets_present`:6 张 512×512 贴图在库且 `tex_paths_for` 三关路径非空;`_test_material_vs_structure`:岩顶/地面采样来自贴图(相邻格 UV 连续、无平色断带),崖面/边缘仍为 palette 结构色。
- [ ] `board_terrain_test.gd:_test_depth_order`:三行夹具,断言 back 含北岩体、front 含南岩体、hero 在两者之间;北侧格件 `z_index=0`、南侧格件 `z_index=3`、**封印格(含南侧)`z_index=0`**、`ContactGlow`/`MemoryGround` 全局 -1;南岩体覆盖小人脚底像素(探针)。
- [ ] `run_all.gd` 注册 `board_terrain_test.gd`。
- [ ] 跑三关 golden 采集(先不重制基线)看差异落点;报告写地形层 draw calls。
@@ -282,12 +295,12 @@
**取用**:T2 的原点/格边;T3 的深度分层。
**产出**:`board_float_layer.gd`(Control 外壳)、`board_label_shadow_layer.gd`(Node2D 世界层);`BoardView` 装配;`cell_mark_overlay` 删数字路径。
- [ ] `board_float_layer.gd`:`setup(cell, origin, entries, font)`(origin = 壳层棋盘原点);`_draw()` 画双色引导线(左深右浅、2px、格顶−12..格顶+4)→数字(字高 21、2px 八向描边、1px 浮空投影、暖白芯);`危/?` 同规则;`label_rects()`/`label_metrics()`(壳层局部坐标);全幅 Control(`mouse_filter=IGNORE`)、z 最高;每个 setter 调 `queue_redraw()`;**不画阴影圆;封印格不进 entries**。
- [ ] `board_label_shadow_layer.gd`:`setup(cell, cells)`(世界局部/格坐标系,不传 shell 原点;`cells` = 浮空 entries 的格集,**不含封印格**);`_draw()` 画 10×6 四层同心椭圆(外→内 α40/70/105/140,尺寸 100%/80%/60%/40%;用 `draw_set_transform` 缩放后 `draw_circle` 或 16 点椭圆多边形,禁单用 `draw_circle`);圆心 = 逻辑格心、格顶+7;z=0(小人之下);`circle_rects()`(世界局部);setter 调 `queue_redraw()`。
- [ ] `board_float_layer.gd`:`setup(cell, origin, entries, font)`(origin = 壳层棋盘原点);`_draw()` 画双色引导线(左深右浅、2px、格顶−12..格顶+4,线底接阴影圆上缘)→数字(字高 21、2px 八向描边、1px 浮空投影、暖白芯);`危/?` 同规则;`label_rects()`/`label_metrics()`(壳层局部坐标);全幅 Control(`mouse_filter=IGNORE`)、z 最高;每个 setter 调 `queue_redraw()`;**不画阴影圆;封印格不进 entries**。**几何硬口径**:字高 21 = 字形墨高(不含描边),渲染字号取使墨高=21 的值(现行融合像素字体 27;`FONT_H` 仍记 21 作墨高/矩形高);`draw_string`/`draw_string_outline` 的 pos 是**基线**,一律传 `rect.position + Vector2(0, FONT_H)`(矩形底边),禁把矩形顶当绘制原点;`_label_rect` 行 y 用步距 `(格边 + 2)`(与格件/引导线/阴影圆同式),字底 = `origin.y + c.y × 步距 − 15`、矩形高 21;多行不得按 `c.y × 格边` 落位(逐行漂移 2px)。
- [ ] `board_label_shadow_layer.gd`:`setup(cell, cells)`(世界局部/格坐标系,不传 shell 原点;`cells` = 浮空 entries 的格集,**不含封印格**);`_draw()` 画 10×6 四层同心椭圆(外→内 α30/52/78/108,尺寸 100%/80%/60%/40%;用 `draw_set_transform` 缩放后 `draw_circle` 或 16 点椭圆多边形,禁单用 `draw_circle`);圆心 = 逻辑格心、格顶+7;z=0(小人之下);`circle_rects()`(世界局部);setter 调 `queue_redraw()`。
- [ ] `BoardView` 在 `_init` 以固定名字子节点创建一次常驻的 `FloatLayer`(BoardView 子 Control,全幅,z 最高)与 `_world/LabelShadow`(Node2D,z=0),不新增类成员;`LabelShadow` 设 `use_parent_material = true`,`FloatLayer` 不在 `_world` 材质链,`set_desaturated` 同拍给 `FloatLayer.material = _desat_mat`/`null`(结算期浮空数字同样灰化,禁成彩色例外);`rebuild` 清 `_world` 子件时跳过 `LabelShadow`(T3 同款跳过表);entries 由 `refresh` 的已开记录生成(`1–8`/`危`/`?`),**封印格跳过**(其字形走色牌),记忆态不生成 entries。
- [ ] `BoardView.set_world_font(f)` 同时 `FloatLayer.set_font(f)`;`cell_mark_overlay.gd` 删普通数字字形/色牌路径,**保留封印格字形+`_draw_digit_plate` 色牌**;`BoardCellUnit.plate` 保留(封印格 `true`、普通格 `false`);`board_view.gd` 删 `_digit_ink`/`_palette.digit_*`;`refresh` 字形段删 `_digit_ink` 三档与 `plate_digit` 普通路径(:586-591),封印格写 `u.glyph`/`u.glyph_color`/`u.plate=true`,普通已开格只交 entries(记忆墨仍用 `FOG_MEMORY_INK`;浮空字固定暖白芯);英雄贴图缺位字形「人」回退随基座退役(资产在包,正常路径不可达),实现报告「实现决定记录」登记。
- [ ] `run_all.gd` 注册 `board_float_label_test.gd`。
- [ ] `board_float_label_test.gd:_test_label_geometry`:字高 21、字底距格顶 15、视觉顶距格顶 38、线 2px、1px 投影;`_test_topmost_layer`:`FloatLayer` 为 BoardView 子 Control、z 最高、顶行 rect 在 D 区内(顶行 top=6 local);`_test_shadow_circle`:圆 10×6、圆心格顶+7、`_world/LabelShadow.z==0` 低于 hero、开启格才有圆、封印格无圆;`_test_desaturation`:`set_desaturated(true)` 后 `FloatLayer.material` 与 `TerrainBack/TerrainFront/LabelShadow` 的 `use_parent_material` 同拍生效;`_test_contrast`:四类底复合对比 ≥4.5。
- [ ] `board_float_label_test.gd:_test_label_geometry`:字高 21(墨高;矩形高 21)、字底距格顶 15、视觉顶距格顶 38、线 2px、1px 投影;**行 y 按步距 `(格边+2)` 落位**(至少两行断言,第 2 行起零漂移);三关截图目检数字墨底与引导线相接、线底接住阴影圆上缘、无长线悬空;`_test_topmost_layer`:`FloatLayer` 为 BoardView 子 Control、z 最高、顶行 rect 在 D 区内(顶行 top=6 local);`_test_shadow_circle`:圆 10×6、圆心格顶+7、`_world/LabelShadow.z==0` 低于 hero、开启格才有圆、封印格无圆;`_test_desaturation`:`set_desaturated(true)` 后 `FloatLayer.material` 与 `TerrainBack/TerrainFront/LabelShadow` 的 `use_parent_material` 同拍生效;`_test_contrast`:四类底复合对比 ≥4.5。
- [ ] `board_float_label_test.gd:_test_no_ordinary_plate_path` 与 `board_terrain_test.gd:_test_seal_substrate` 扫描/断言:普通数字路径(`board_view.gd`/`board_float_layer.gd` 与 `cell_mark_overlay` 的非封印分支)零 `plate_digit`/`_digit_ink_mode`;`DIGIT_PLATE`/`_draw_digit_plate` 只在封印格分支命中。
- [ ] 跑 `board_float_label_test`;三关截图看顶行数字越界与小人遮圆;报告写读数。
@@ -298,7 +311,7 @@
- [ ] `BoardView._top_face_rect(c)`(私有)= 墙格 `Rect2(x-ESHIFT, y-LIFT, cell, cell)`、地面格逻辑 rect;`BoardView._visual_rect_for(c)`(私有)= 墙格 `Rect2(x-ESHIFT, y-LIFT, cell+ESHIFT, cell+LIFT)`、地面格逻辑 rect;两者不新增公开方法。
- [ ] `CellUnit` 增 `top_face_offset`(墙格 `(-ESHIFT,-LIFT)`、地面 `(0,0)`)与 `visual_rect`;`_draw` 用 `Rect2(top_face_offset, edge, edge)` 传给 face;`_sync_seal_layer` 调 `setup(edge, visible)`(**不传 top_face_offset**——封印居逻辑格心,见下条);`cell_type_glow_layer.setup(edge, group, top_face_offset)`;`cell_mark_overlay` 的变异/徽章/悬停/退色/路径按该 rect(墙格顶面、地面逻辑;路径点迹只地面逻辑)。
- [ ] 封印圆心:`seal_mark_layer.setup(edge, visible)` 不变(子件本地全幅 draw_rect,圆心 = CellUnit 本地 `(edge/2, edge/2)` = 逻辑格心);**不随岩顶 −ESHIFT/−LIFT 偏移**(art-bible v3.51 §3.2/§8.2);环径/环壁/十字/光圈比例不变;验收 `ring_px` 仍 82%±1。封印子件设 `show_behind_parent = true`,保证身份色牌叠于法阵之上;封印格地面受光棱石由 `board_terrain_layer` back 画(T3)。
- [ ] 封印圆心:`seal_mark_layer.setup(edge, visible)` 不变(子件本地全幅 draw_rect,圆心 = CellUnit 本地 `(edge/2, edge/2)` = 逻辑格心);**不随岩顶 −ESHIFT/−LIFT 偏移**(art-bible v3.53 §3.2/§8.2);环径/环壁/十字/光圈比例不变;验收 `ring_px` 仍 82%±1。封印子件设 `show_behind_parent = true`,保证身份色牌叠于法阵之上;封印格地面受光棱石由 `board_terrain_layer` back 画(T3)。
- [ ] 类型微光:绘制 rect 改顶面 rect;`board_shot_probe`/`type_glow_shot_probe` 的「禁越圈」允许区改顶面 rect;微光不越出本格岩顶。
- [ ] 迷雾:`CellUnit._draw_fog_layer` 墙格画三块黑罩(顶面 rect+南面 `Rect2(x-ESHIFT,y-LIFT+cell,cell+ESHIFT,LIFT)`+东面 `Rect2(x-ESHIFT+cell,y-LIFT,ESHIFT,cell+LIFT)`;只在未开格);记忆态由固定名字低层子件 `MemoryGround` 画新地面色(palette floor)+灰罩+记忆墨数字,不读 `base.tex_base`,不生成浮空 entries;只绘地面可见区(扣南/东邻岩顶越入),不覆盖北/西邻格地面;封印格在记忆态同样随格隐没(印记与色牌不显)。
- [ ] 接触带:绘制迁入固定名字低层子件 `ContactGlow`(全局 z=-1:地面之上、阴影圆 0 之下);`board_view._apply_contact_bands`/`_process`/`_reset_breath` 改调 `ContactGlow.set_bands(bands, corners, color, ground_visible_rect)`,不再经 `u.base.contact_*`;只画英雄格地面侧,正交整边/斜向角点+两半边;只绘地面可见区(扣南/东邻岩顶越入);`_contact_unit` rect 不改;光不进岩体。
@@ -310,21 +323,22 @@
**取用**:T3/T4/T5 绿。
**产出**:63 PNG+63 `.import` 删除;`tile_palette.gd`/`terrain_tile_sets_test.gd` 删除;`player_copy_sweep_test` 落牌断言替换;`ui_contrast_probe` 迷雾派生段替换。
- [ ] 删除 `game/assets/art/board/terrain_*` 63 PNG 与同名 `.import`;保留 `seal_mark.png`+`.import`。
- [ ] 删除 `game/assets/art/board/terrain_*` 63 PNG 与同名 `.import`;保留 `seal_mark.png`+`.import` 与 T-A 的 6 张 `board_rock_*`/`board_ground_*` 贴图。
- [ ] 删除 `tile_palette.gd`、`terrain_tile_sets_test.gd`;`run_all.gd` 移除该套件;`board_view.gd`/`board_world.gd`/`ui_contrast_probe.gd` 的 `TilePalette` 引用全清。
- [ ] `player_copy_sweep_test.gd:142-147`:普通已开危险格 `u.plate==true` 改 `u.plate==false`,并断言浮空 entries 含该格(或 `label_metrics()` 有该格);封印格色牌断言归 `board_terrain_test._test_seal_substrate`;`ui_contrast_probe._fog_derived_check` 改读 `board_terrain_palette` 的新地面/岩顶色或渲染帧取样,三行行值按新地面色重算(±2/255),删除旧瓦片均值段。
- [ ] `board_terrain_test.gd:_test_legacy_assets_absent`:目录无 `terrain_*`、`seal_mark.png` 在库;源码 grep 零 `terrain_`/`TilePalette`/`CellBaseLayer`/`u.base`。
- [ ] `board_terrain_test.gd:_test_legacy_assets_absent`:目录无 `terrain_*`、`seal_mark.png` 在库、6 张 `board_rock_*`/`board_ground_*` 在库;源码 grep 零 `terrain_`/`TilePalette`/`CellBaseLayer`/`u.base`。
- [ ] 跑 `repo_structure_audit.py`、`capability_audit.py` 与 `board_terrain_test`;报告写清单;旧地形行**保留**(实现批禁写 `game/tests/README.md`;删除归写卡段后续,T8 audit 经卡内豁免通道绿)。
### T7 验收面换代与三关 golden(1.0 日)
### T7 验收面换代与三关 golden(1.5 日)
**取用**:T3–T6 全绿。
**产出**:`board_shot_probe` 视图 1036×548、侧栏 200、顶面 rect 微光圈/封印 rect;三关 golden 重制;渲染闸绿;`type_glow_shot_probe`/`layout_probe`/`ui_input_probe`/`ui_contrast_probe` 换代;三关色板逐值/互辨。
- [ ] `board_shot_probe.gd`:`view.size=Vector2(1036,548)`、`view.position=Vector2.ZERO`;`view.rebuild(..., 200)`;`_meta` 写全幅 rect;`_crop_cell` 用 `_visual_rect_for` 的屏幕换算;`_check_dual_frames` 的允许区改顶面 rect(用 `lift_for/eshift_for` 换算);**`_seal_evidence` 保持逻辑格 rect(封印居格心),选择器按迭代56后的 `has_seal` 口径**;注释与 `game/tests/golden/README.md` 口径一致。
- [ ] `type_glow_shot_probe.gd:64-78` 视图改 1036×548、`rebuild(..., 200)`(与生产同格边 38),允许区/取样改顶面 rect;`layout_probe.gd` 的 `_cell_for` 带侧栏;`ui_input_probe.gd` 的恢复调用带侧栏;`ui_contrast_probe` 浮空四类底段与迷雾段换代。
- [ ] 跑一次渲染闸看差异(预判棋盘三图全幅 changed>0,属换代);**显式呈报用户,按 `game/tests/golden/README.md` 现行口径获用户确认后**再按 `tools/golden_baseline_refresh.sh` 重制三关基线;复闸绿。
- [ ] 三关色板逐值核对:`board_terrain_test.gd:_test_palette_three_boards` 与 art-bible v3.51 §4.1 三关八色同值(用户 2026-11-07 已看样张冻结);`glow_discrimination_sheet.py` 读已删旧 `terrain_*`,本批不跑,工具换代登记待办(tools 批);不过即停卡呈报,不调色绕过。
- [ ] 材质过审预览锚(非引擎帧):`game/tests/golden/board_material_L1.png`/`_L2`/`_L3`(三关整板,12×8、格边 46)+`board_material_L1_zoom2.png`/`_digit6`/`_hero4`/`_top4`(第一关机械裁切)已按 2026-11-09 用户目检通过的预览重制,并在 `golden/README.md` 登记为预览锚、明确不替代 `board_L*`;新增/扩展 `board_material_shot_probe` 以同一 12×8、46px 构图复刻,与 512×512 新材质、断续岩块和薄边缘对齐比对(材质/构图差异判据沿用渲染闸容差)。
- [ ] 引擎侧 `board_L1_dungeon`/`board_L2_underdark`/`board_L3_deep_underdark` 仍待实现后换代:先跑一次渲染闸看差异(预判全幅 changed>0,属换代);**显式呈报用户,按 `game/tests/golden/README.md` 现行口径获用户确认后**再按 `tools/golden_baseline_refresh.sh` 重制三关引擎基线;复闸绿。材质过审预览锚不替代本步。
- [ ] 三关色板逐值核对:`board_terrain_test.gd:_test_palette_three_boards` 与 art-bible v3.53 §4.1 三关八色同值(用户 2026-11-07 已看样张冻结);`_test_material_assets_present` 核对 6 张 512×512 与像素域 ≤32(实测岩顶 9 色、地面 6 色);`glow_discrimination_sheet.py` 读已删旧 `terrain_*`,本批不跑,工具换代登记待办(tools 批);不过即停卡呈报,不调色绕过。
- [ ] 跑 `bash tools/run_all_gates.sh --code`;报告写 smoke/unit/probe/render 读数。
### T8 产出物落位(0.5 日)
@@ -346,23 +360,23 @@
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+通过判据) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|---|---|---|---|---|---|---|
| 1. D 区侧栏+提示条退役(判据:`design/ux/battle.md:124`、`design/gdd/systems/表现与支撑/HUD框架.md:62`) | `battle_layout_table.gd`、`battle_layout.tres`、`ap_bar_view.gd`、`board_zone_view.gd:23-37,74-79,91-92` | `board_side_rail_test.gd:_test_side_rail_layout`+`_test_signals`;`stage_background_test.gd:_test_side_rail_width_from_table`;`layout_probe.gd:_ready` | 单元+探针 | `BoardZoneView.new(layout)`→`ap_bar`/`_board_area`(测试读私有) | 左/右栏各宽 200、board_area 高 548、`side_rail_w==200`、hint 节点不存在、toast 不压棋盘 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
| 2. 格边/原点/顶预留/重建接线(判据:`design/ux/battle.md:140,144`) | `board_view.gd:205-232,403-404,428-439`、`main.gd:470`、`main_debug_flow.gd:104` | `board_terrain_test.gd:_test_cell_formula_base`+`_test_hit_test_logical_rect`;`layout_probe.gd:_ready`;`ui_input_probe.gd` | 单元+探针 | `BoardView.set_cell_area(Vector2(1036,548), 200)`/`rebuild(..., 200)` | `_cell_for(12, Vector2(1036,548), 200)==38`、`_cell_for(14, Vector2(1036,548), 200)==32`、局部原点 (279,44)/(281,44)、屏幕 (523,296)、全格命中 | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
| 3. 合并岩体+连续地面(判据:`design/art/art-bible.md:170,173`) | `board_terrain_layer.gd`(新增)、`board_view.gd`、删 `cell_base_layer.gd` | `board_terrain_test.gd:_test_merged_mass_geometry`;`standee_present_values_test.gd:_init`(V11 源码锚改指 `board_terrain_layer.gd`);三关 `board_shot_probe` 截图 | 单元+探针 | `BoardView.rebuild()`→`_world/TerrainBack`、`_world/TerrainFront` 的 `mass_rects()` | 四邻合并、相邻墙顶搭接 2、无墙顶内框、地面无缝、板边外延 ESHIFT;V11 口沿高光新锚在位且全套件绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 4. 投影/崖面/受光(判据:`design/art/art-bible.md:171,172,174`) | `board_terrain_layer.gd` | `board_terrain_test.gd:_test_projection_ratios`;三关 golden | 单元+探针 | 同上 | 38 格 LIFT=17、ESHIFT=4、南崖 17×42、南崖顶缘高光=本关受光棱、东崖 4×55、北/西 2+2+外2、南/东内阴影 3×2 自 0.217 起、投影 4×4 α0.44/0.30/0.16/0.07 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 5. 脚底排序遮挡(判据:`design/art/art-bible.md:175`) | `board_terrain_layer.gd`、`board_world.gd:39,48` | `board_terrain_test.gd:_test_depth_order`;三关截图 | 单元+探针 | 构造 hero 行与南邻墙;`terrain_metrics()["order"]`/`CellUnit.z_index` | back 含脚底≤hero 的岩体、front 含 >hero 的岩体;北侧格件 z=0、南侧格件 z=3、**封印格(含南侧)z=0**、`ContactGlow`/`MemoryGround` 全局 -1;南岩体覆盖小人脚底像素 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 6. 浮空字+阴影圆几何/对比(判据:`design/art/art-bible.md:176`、`design/ux/battle.md:307`) | `board_float_layer.gd`(新增)、`board_label_shadow_layer.gd`(新增) | `board_float_label_test.gd:_test_label_geometry`+`_test_shadow_circle`+`_test_contrast`;`ui_contrast_probe.gd` 浮空字段 | 单元+探针 | `BoardView.refresh()`→`FloatLayer.set_entries()`/`_world/LabelShadow.setup()` | 字高 21、间距 15、视觉顶 38、线 2、1px 投影;圆 10×6、圆心格顶+7、z=0 低于 hero;**封印格无 entries/无圆**;四类底复合对比 ≥4.5 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
| 7. 浮空层最顶/顶行不裁切(判据:`design/ux/battle.md:165,307,313`) | `board_view.gd` 层装配、`board_float_layer.gd` | `board_float_label_test.gd:_test_topmost_layer`+`_test_desaturation`;三关截图 | 单元+探针 | `BoardView` 固定名字子件 z 序与 entries/`set_desaturated()` | `FloatLayer` 为 BoardView 子 Control、z 最高;`TerrainBack`/`TerrainFront`/`LabelShadow` 固定名字在树;顶行 rect top=6 local;无元素遮数字/线;结算期浮空层与地形层同拍灰化 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
| 8. 顶面锚点/封印/交互(判据:`design/art/art-bible.md:167,175`、`design/ux/battle.md:311-312`) | `board_view.gd`、`cell_mark_overlay.gd`、`seal_mark_layer`、`cell_type_glow_layer`、`board_cell_unit.gd` | `board_terrain_test.gd:_test_top_face_anchor`+`_test_seal_substrate`;`seal_mark_params_test.gd`;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.visual_rect`/`CellUnit.z_index`/封印格 `plate` | **封印圆心=逻辑格心(不偏移)**、变异/微光/墙格悬停按 -ESHIFT/-LIFT;地面路径按逻辑 rect;环径 82%±1;封印格 `plate=true`、`glyph` 为危/数字、无浮空/无圆、色牌叠法阵上;封印格 z=0 低于小人,其余格件北 0/南 3 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
| 9. 迷雾几何/记忆态(判据:`design/art/art-bible.md:427-429`) | `board_cell_unit.gd:_draw_fog_layer`/`MemoryGround`、`board_view.gd` | `board_terrain_test.gd:_test_fog_rect`+`_test_memory_cover`;`ui_contrast_probe.gd` 迷雾段;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.fog_state`/`MemoryGround` | 墙格三块黑罩(顶面+南+东)覆盖、北/西邻格非岩顶地面像素零覆盖(岩顶投影可越入邻格屏幕区);地面格不越格;记忆态/退色不覆盖南邻岩顶(`MemoryGround` 只绘地面可见区,重叠区像素来自南邻墙体);封印格记忆态随格隐没;封印格地面=palette.light_edge;记忆态无浮空 entries;记忆墨对比 ≥4.5 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
| 10. 命中逻辑格(判据:`design/ux/battle.md:140`) | `board_view.gd:428-439` | `board_terrain_test.gd:_test_hit_test_logical_rect` | 单元 | `BoardView.cell_center_local()`/`_cell_at()` | 全格 `_cell_at(cell_center_local(c))==c`;顶面左上角点按逻辑归北/西邻格;板外 (-9,-9) | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
| 11. 旧资产退役/普通数字零底牌(判据:`design/art/art-bible.md:177,215`) | `game/assets/art/board/`、`tile_palette.gd`、`cell_base_layer.gd`、`terrain_tile_sets_test.gd` | `board_terrain_test.gd:_test_legacy_assets_absent`;`board_float_label_test.gd:_test_no_ordinary_plate_path`;`repo_structure_audit.py` | 单元+静态 | 扫描 `game/assets/art/board/` 与源码 | 零 `terrain_*`、零 `TilePalette`/`CellBaseLayer`/`u.base`、`seal_mark.png` 在库、普通数字零 `plate_digit`/`_digit_ink_mode`(封印格 `plate`/`DIGIT_PLATE` 为唯一例外) | 新增:旧瓦片退役与普通数字零底牌 |
| 12. 侧栏信号/setter(判据:`design/ux/battle.md:163`) | `ap_bar_view.gd` | `board_side_rail_test.gd:_test_signals` | 单元 | 真实按钮 `pressed`/setter | `stop_pressed`/`refresh_confirmed`/`legend_toggled` 逐信号;`set_ap`/`set_rap`/`set_refresh_state` 读数 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
| 13. 接触带延续(判据:`design/art/art-bible.md:168`) | `board_cell_unit.gd`、`board_view.gd:740,764-765` | `board_terrain_test.gd:_test_contact_glow`;`type_glow_test.gd` | 单元 | `BoardView.refresh()`→`ContactGlow.set_bands(..., ground_visible_rect)` | 英雄格地面侧接触带在位,正交整边/斜向角点+两半边,只绘地面可见区、不进岩体;全局 z=-1 | 既有:未开格类型微光(8 邻作用集、五组色相、零玩法写入) |
| 14. 三关色板/互辨(判据:`design/art/art-bible.md:202,415`) | `board_terrain_palette.gd` | `board_terrain_test.gd:_test_palette_three_boards` | 单元+静态 | `palette_for("dungeon"/"underdark"/"deep_underdark")` | 三关八色与 art-bible v3.51 §4.1 逐值一致;三关同名槽位不全等(用户过审样张冻结);不变槽恒定;封印石读 `light_edge` | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 15. 取证面换代(判据:`game/tests/golden/README.md:28,31`) | `board_shot_probe.gd`、`type_glow_shot_probe.gd`、`layout_probe.gd`、`ui_input_probe.gd`、`ui_contrast_probe.gd` | 三关 `board_shot_probe`+渲染闸;`type_glow_shot_probe`;`layout_probe.gd:_ready`;`ui_input_probe.gd`;`ui_contrast_probe.gd` | 探针+渲染闸 | `res://probe/board_shot_probe.tscn`;`tools/render_gate.sh` | 视图 1036×548、侧栏 200、裁剪全幅、顶面 rect 微光圈、**封印取证保持逻辑格 rect(圆心格心)**、三关 golden 重制后 0 差异 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
| 16. 测试入口/能力审计(判据:`design/engineering/test-conventions.md:196`) | `run_all.gd:225`、新增测试件、`game/tests/README.md` | `bash tools/run_all_gates.sh --code`;`capability_audit.py` | 集成 | 单元测试全套件 | 三新套件在册、terrain 套件移除、能力审计红项 0、全绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 17. 产出物/独立审计(判据:`design/engineering/test-conventions.md:147`) | `reports/` | 末卡产出物落位;`reports/iter<N>-验收审计-<日期>.md` | 集成 | 实现报告/反哺点清单/审计报告 | 三件齐、逐行勾选、审计未过不合并 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
| 1. D 区侧栏+提示条退役(判据:`design/ux/battle.md「Layout Zones」side_rail_w`、`design/gdd/systems/表现与支撑/HUD框架.md「战斗屏三区双舞台:挖掘与结算同屏不切场景」D 区全高归棋盘`) | `battle_layout_table.gd`、`battle_layout.tres`、`ap_bar_view.gd`、`board_zone_view.gd:23-37,74-79,91-92` | `board_side_rail_test.gd:_test_side_rail_layout`+`_test_signals`;`stage_background_test.gd:_test_side_rail_width_from_table`;`layout_probe.gd:_ready` | 单元+探针 | `BoardZoneView.new(layout)`→`ap_bar`/`_board_area`(测试读私有) | 左/右栏各宽 200、board_area 高 548、`side_rail_w==200`、hint 节点不存在、toast 不压棋盘 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
| 2. 格边/原点/顶预留/重建接线(判据:`design/ux/battle.md「Layout Zones」棋盘格尺寸公式`) | `board_view.gd:205-232,403-404,428-439`、`main.gd:470`、`main_debug_flow.gd:104` | `board_terrain_test.gd:_test_cell_formula_base`+`_test_hit_test_logical_rect`;`layout_probe.gd:_ready`;`ui_input_probe.gd` | 单元+探针 | `BoardView.set_cell_area(Vector2(1036,548), 200)`/`rebuild(..., 200)` | `_cell_for(12, Vector2(1036,548), 200)==38`、`_cell_for(14, Vector2(1036,548), 200)==32`、局部原点 (279,44)/(281,44)、屏幕 (523,296)、全格命中 | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
| 3. 合并岩体+连续地面(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系|材质与装饰`) | `board_terrain_layer.gd`(新增)、`board_view.gd`、删 `cell_base_layer.gd` | `board_terrain_test.gd:_test_merged_mass_geometry`+`_test_material_assets_present`+`_test_material_vs_structure`;`standee_present_values_test.gd:_init`(V11 源码锚改指 `board_terrain_layer.gd`);三关 `board_shot_probe` 截图 | 单元+探针 | `BoardView.rebuild()`→`_world/TerrainBack`、`_world/TerrainFront` 的 `mass_rects()`/`tex_paths_for()` | 四邻合并、相邻墙顶搭接 2、无墙顶内框、地面无缝、板边外延 ESHIFT;6 张 512×512 贴图在库且被消费、相邻格 UV 连续;V11 口沿高光新锚在位且全套件绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 4. 投影/崖面/受光(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系|受光与崖面`) | `board_terrain_layer.gd` | `board_terrain_test.gd:_test_projection_ratios`;三关 golden | 单元+探针 | 同上 | 38 格 LIFT=17、ESHIFT=4、南崖 17×42、南崖顶缘 1px 受光口沿+1px 深墨线、东崖 4×55、北/西 1+1+外2、南/东内阴影 3×1、崖面无贯通岩层线、南向投影 4×4 α0.25/0.16/0.09/0.04、东向 α0.22/0.14/0.07/0.04 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 5. 脚底排序遮挡(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系|绘制序与遮挡`) | `board_terrain_layer.gd`、`board_world.gd:39,48` | `board_terrain_test.gd:_test_depth_order`;三关截图 | 单元+探针 | 构造 hero 行与南邻墙;`terrain_metrics()["order"]`/`CellUnit.z_index` | back 含脚底≤hero 的岩体、front 含 >hero 的岩体;北侧格件 z=0、南侧格件 z=3、**封印格(含南侧)z=0**、`ContactGlow`/`MemoryGround` 全局 -1;南岩体覆盖小人脚底像素 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 6. 浮空字+阴影圆几何/对比(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系|浮空数字`、`design/ux/battle.md「D 区布局与棋盘画法预览」浮空字`) | `board_float_layer.gd`(新增)、`board_label_shadow_layer.gd`(新增) | `board_float_label_test.gd:_test_label_geometry`+`_test_shadow_circle`+`_test_contrast`;`ui_contrast_probe.gd` 浮空字段 | 单元+探针 | `BoardView.refresh()`→`FloatLayer.set_entries()`/`_world/LabelShadow.setup()` | 字高 21(墨高)、间距 15、视觉顶 38、线 2(格顶−12..+4,接圆上缘)、1px 投影;**绘制基线 = 矩形底边、行 y 按步距(格边+2)**;圆 10×6、圆心格顶+7、z=0 低于 hero;**封印格无 entries/无圆**;四类底复合对比 ≥4.5 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
| 7. 浮空层最顶/顶行不裁切(判据:`design/ux/battle.md「D 区布局与棋盘画法预览」禁裁切`) | `board_view.gd` 层装配、`board_float_layer.gd` | `board_float_label_test.gd:_test_topmost_layer`+`_test_desaturation`;三关截图 | 单元+探针 | `BoardView` 固定名字子件 z 序与 entries/`set_desaturated()` | `FloatLayer` 为 BoardView 子 Control、z 最高;`TerrainBack`/`TerrainFront`/`LabelShadow` 固定名字在树;顶行 rect top=6 local;无元素遮数字/线;结算期浮空层与地形层同拍灰化 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
| 8. 顶面锚点/封印/交互(判据:`design/art/art-bible.md「3.2 环境几何」封印印记`、`design/ux/battle.md「封印格呈现预览」色牌`) | `board_view.gd`、`cell_mark_overlay.gd`、`seal_mark_layer`、`cell_type_glow_layer`、`board_cell_unit.gd` | `board_terrain_test.gd:_test_top_face_anchor`+`_test_seal_substrate`;`seal_mark_params_test.gd`;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.visual_rect`/`CellUnit.z_index`/封印格 `plate` | **封印圆心=逻辑格心(不偏移)**、变异/微光/墙格悬停按 -ESHIFT/-LIFT;地面路径按逻辑 rect;环径 82%±1;封印格 `plate=true`、`glyph` 为危/数字、无浮空/无圆、色牌叠法阵上;封印格 z=0 低于小人,其余格件北 0/南 3 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
| 9. 迷雾几何/记忆态(判据:`design/art/art-bible.md「6.5 视野迷雾与黑暗区域渲染」记忆态`) | `board_cell_unit.gd:_draw_fog_layer`/`MemoryGround`、`board_view.gd` | `board_terrain_test.gd:_test_fog_rect`+`_test_memory_cover`;`ui_contrast_probe.gd` 迷雾段;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.fog_state`/`MemoryGround` | 墙格三块黑罩(顶面+南+东)覆盖、北/西邻格非岩顶地面像素零覆盖(岩顶投影可越入邻格屏幕区);地面格不越格;记忆态/退色不覆盖南邻岩顶(`MemoryGround` 只绘地面可见区,重叠区像素来自南邻墙体);封印格记忆态随格隐没;封印格地面=palette.light_edge;记忆态无浮空 entries;记忆墨对比 ≥4.5 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
| 10. 命中逻辑格(判据:`design/ux/battle.md「Layout Zones」格边按公式现算`) | `board_view.gd:428-439` | `board_terrain_test.gd:_test_hit_test_logical_rect` | 单元 | `BoardView.cell_center_local()`/`_cell_at()` | 全格 `_cell_at(cell_center_local(c))==c`;顶面左上角点按逻辑归北/西邻格;板外 (-9,-9) | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
| 11. 旧资产退役/普通数字零底牌(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系|旧资产处理`) | `game/assets/art/board/`、`tile_palette.gd`、`cell_base_layer.gd`、`terrain_tile_sets_test.gd` | `board_terrain_test.gd:_test_legacy_assets_absent`;`board_float_label_test.gd:_test_no_ordinary_plate_path`;`repo_structure_audit.py` | 单元+静态 | 扫描 `game/assets/art/board/` 与源码 | 零 `terrain_*`、零 `TilePalette`/`CellBaseLayer`/`u.base`、`seal_mark.png` 与 6 张 `board_rock_*`/`board_ground_*` 在库、普通数字零 `plate_digit`/`_digit_ink_mode`(封印格 `plate`/`DIGIT_PLATE` 为唯一例外) | 新增:旧瓦片退役与普通数字零底牌 |
| 12. 侧栏信号/setter(判据:`design/ux/battle.md「Component Inventory」行动资源侧栏`) | `ap_bar_view.gd` | `board_side_rail_test.gd:_test_signals` | 单元 | 真实按钮 `pressed`/setter | `stop_pressed`/`refresh_confirmed`/`legend_toggled` 逐信号;`set_ap`/`set_rap`/`set_refresh_state` 读数 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
| 13. 接触带延续(判据:`design/art/art-bible.md「3.2 环境几何」可挖域接触带微光`) | `board_cell_unit.gd`、`board_view.gd:740,764-765` | `board_terrain_test.gd:_test_contact_glow`;`type_glow_test.gd` | 单元 | `BoardView.refresh()`→`ContactGlow.set_bands(..., ground_visible_rect)` | 英雄格地面侧接触带在位,正交整边/斜向角点+两半边,只绘地面可见区、不进岩体;全局 z=-1 | 既有:未开格类型微光(8 邻作用集、五组色相、零玩法写入) |
| 14. 三关色板/互辨(判据:`design/art/art-bible.md「4.1 主色板」三关棋盘环境八色`) | `board_terrain_palette.gd` | `board_terrain_test.gd:_test_palette_three_boards`+`_test_material_assets_present` | 单元+静态 | `palette_for("dungeon"/"underdark"/"deep_underdark")`/`tex_paths_for(...)` | 三关八色与 art-bible v3.53 §4.1 逐值一致;三关同名槽位不全等(用户过审样张冻结);不变槽恒定;封印石读 `light_edge`;6 张 512×512 贴图路径在库、单张像素域 ≤32(实测岩顶 9 色、地面 6 色) | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 15. 取证面换代(判据:`game/tests/golden/README.md「基线冻结与审核」才允许出候选图`) | `board_shot_probe.gd`、`board_material_shot_probe`(新增/扩展)、`type_glow_shot_probe.gd`、`layout_probe.gd`、`ui_input_probe.gd`、`ui_contrast_probe.gd` | 三关 `board_shot_probe`+渲染闸;`board_material_shot_probe` 对过审预览图;`type_glow_shot_probe`;`layout_probe.gd:_ready`;`ui_input_probe.gd`;`ui_contrast_probe.gd` | 探针+渲染闸 | `res://probe/board_shot_probe.tscn`;`tools/render_gate.sh`;`game/tests/golden/board_material_L1.png`(过审预览锚) | 视图 1036×548、侧栏 200、裁剪全幅、顶面 rect 微光圈、**封印取证保持逻辑格 rect(圆心格心)**、三关 golden 重制后 0 差异;12×8/46px 材质探针与 512×512 新材质、断续岩块、薄边缘预览对齐,差异在容差内 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
| 16. 测试入口/能力审计(判据:`design/engineering/test-conventions.md「8.9 三层模型」能力清单`) | `run_all.gd:225`、新增测试件、`game/tests/README.md` | `bash tools/run_all_gates.sh --code`;`capability_audit.py` | 集成 | 单元测试全套件 | 三新套件在册、terrain 套件移除、能力审计红项 0、全绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
| 17. 产出物/独立审计(判据:`design/engineering/test-conventions.md「8.6 测试时机」不要求先红后绿`) | `reports/` | 末卡产出物落位;`reports/iter<N>-验收审计-<日期>.md` | 集成 | 实现报告/反哺点清单/审计报告 | 三件齐、逐行勾选、审计未过不合并 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
**测试削弱申报**(允许删除/替换的旧断言):
@@ -384,7 +398,7 @@
- **L2 记录继续**:三关色板派生读数偏差在 ±1 通道内、draw calls 波动 <10%——记入实现报告继续。
- **L3 停机呈报**:
- 新路径与 art-bible 条款冲突(比例/顶预留/圆心/层序/三关色板/封印承载任一不符)——停卡,列反哺点,禁自行改条款。
- 封印呈现与迭代56「受理即揭示」或 art-bible v3.51 封印条冲突(印记落未开格、圆心随岩顶偏移、身份字形进浮空层、色牌层序颠倒、封印石对比 <4.5)——停卡呈报,禁把封印改回旧假设。
- 封印呈现与迭代56「受理即揭示」或 art-bible v3.53 封印条冲突(印记落未开格、圆心随岩顶偏移、身份字形进浮空层、色牌层序颠倒、封印石对比 <4.5)——停卡呈报,禁把封印改回旧假设。
- `board_terrain_layer` 超 7 公开方法/12 成员且按职责拆不出内聚单元——停卡走豁免/还债通道,禁凑数拆绿。
- 机检键与卡片契约互斥(如测试要求保留 `plate` 字段)——停卡呈报,禁为机检保留无效成员。
- 三关色板逐值/互辨不过——停卡呈报,禁调色绕过或改判据。
@@ -399,8 +413,8 @@
允许实现期自行拍板(超清单记入实现报告「实现决定记录」):
1. `board_terrain_layer` 内 back/front 两实例的精确 z 值(只要满足 back<hero<front、float 最高、阴影圆 0)。
2. 程序化材质噪声的确定性哈希种子与采样频率(同板同参逐位复现;禁 RngService/自建 RNG;三关可辨、不出现逐格拼缝)。
3. 阴影圆四层 α 在 ±10% 内的微调与同心椭圆收缩比例(只要落样张轮廓、圆在格面、小人之下)。
2. 程序化结构/装饰噪声的确定性哈希种子与采样频率(同板同参逐位复现;禁 RngService/自建 RNG;三关可辨、不出现逐格拼缝)。
3. 阴影圆四层 α 在 ±10% 内的微调与同心椭圆收缩比例(基准取 2026-11-09 过审预览的 30/52/78/108;只要落样张轮廓、圆在格面、小人之下)。
4. 侧栏按钮的纵向间距与面板内边距(只要左右栏各 200、不压棋盘、不换位)。
5. 记忆态灰罩的绘制方式(只要不出现浮空层、对比 ≥4.5、地面色取 palette)。
6. 测试夹具的构造方式(直接 `new()` 或场景实例化,只要走真实入口)。
@@ -411,7 +425,7 @@
## 15. 待裁点
零待裁点。已裁记录:①underdark/deep 两关色板 2026-11-07 用户看方向样张后选「按目标八色冻结」;②棋盘底操作提示条退役 2026-11-07 用户选定;③合并 master 时与迭代56已闭合的封印改版对齐(用户 2026-11-07 已裁「封印受理即揭示」)——本卡承接其呈现面:已揭示地面格心+身份色牌+受光棱封印石承载(新地面 `#695038` 对封印黑仅 2.35–2.98:1,受光棱 6.45–9.94:1,保 art-bible ≥4.5 判据,零新增色);法阵参数/揭牌逻辑沿迭代56。开工门=U0(用户批卡);U0 前不写实现代码。
零待裁点。已裁记录:①underdark/deep 两关色板 2026-11-07 用户看方向样张后选「按目标八色冻结」;②棋盘底操作提示条退役 2026-11-07 用户选定;③合并 master 时与迭代56已闭合的封印改版对齐(用户 2026-11-07 已裁「封印受理即揭示」)——本卡承接其呈现面:已揭示地面格心+身份色牌+受光棱封印石承载(新地面 `#695038` 对封印黑仅 2.35–2.98:1,受光棱 6.45–9.94:1,保 art-bible ≥4.5 判据,零新增色);法阵参数/揭牌逻辑沿迭代56;④三关 512×512 材质、断续岩块与薄边缘 2026-11-09 用户目检 `reports/2026-11-09-棋盘材质预览-v2.html` 后确认「没有问题,可以按这样」。开工门=U0(用户批卡);U0 前不写实现代码。
---
@@ -480,5 +494,26 @@
| 6 | 同上 | `roadmap.md` 冲突:master 迭代55/56行 vs 本卡旧版(无55/56、旧「二三关棋盘观感」) | 补写 | 保留 master 迭代位/下一步原文,仅把待编池「二三关棋盘观感(待设计+待美术)」替换为「棋盘瓦片与立体表现重做(已写卡,待编排)」 |
| 6 | 同上 | 保留 `plate` 后成员预算变化:`board_cell_unit` 12→13;封印石输入给 `board_terrain_layer` 增 `_sealed_at` 成员 | 补写 | §9 改 `board_cell_unit` 12→13(删 base、加两成员、保留 plate);`board_terrain_layer` 成员预算 ≤13;§7/T3/T4 同步 |
| 6 | 同上 | 测试面需区分普通数字与封印色牌:`player_copy_sweep_test:142-147`、`_test_no_plate_path`、`_test_top_face_anchor` 原断言把封印色牌一并判零 | 补写 | 普通已开危险格 `plate==false`+浮空 entries;`_test_no_ordinary_plate_path`;新增 `_test_seal_substrate`(封印石/色牌/无浮空/无圆/z=0);§7/T4/T5/§12 同步 |
| 7 | 用户(2026-11-09 纠正)+ 写卡会话回填 | 本卡原写「岩体/地面/崖面必须程序化绘制」,与用户过审样张「整块岩石是一张连续的岩顶图」及 art-bible §8.5「材质归模型、结构归程序」冲突;用户未裁过程序化材质 | 退回上游/补写 | 回退为用户原裁:岩顶/地面=无缝贴图(T-A 6 张),崖面/边缘/投影/层序=程序化;§2/§4-2/§5/§6/§8(T-A,T3,T6,T7)/§9/§12 同步;art-bible v3.53 §8.1 改口径;asset-path-map/checklist 同步;估时 9.5→11.0 |
| 8 | 用户(2026-11-09 预览目检)+ 写卡会话回填 | 预览浮空数字的引导线与阴影圆断开(线止于格顶−3、圆画在格心且 20×10);实现侧同源两处硬口径缺失——`draw_string`/`draw_string_outline` 的 pos 被当矩形顶用(实为基线,数字整体上浮 21px、线与字分离)、`_label_rect` 行 y 用格边而非步距(逐行漂移 2px) | 补写 | 预览按条款重画(线格顶−12..+4、圆 10×6 圆心格顶+7、数字墨底−15/墨高 21)并重生成 `board_preview2_*`;T4 增绘制基线/字号/步距硬口径与两行落位断言;§12 行 6 同步 |
第六轮定向复核:通过(第六轮 6 条已处置;合并冲突全部闭合)。
| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 |
|---|---|---|---|---|
| 9 | 独立只读子代理(2026-11-10 材质过审后对抗复核) | T-A 勾六张已入库,但 `board-material-fix` 工作区没有这 12 项,T3/T7 在该区必红 | 补写 | 按 asset-path-map §1 同步 6 PNG+6 `.import` 到工作区;T-A 增跨区同步记录 |
| 9 | 同上 | §5 把 6 张地形贴图列为“不收件”,与 T-A/估时/完成定义冲突 | 补写 | §5 改为“已过审六张之外的再创作/换图不收件”,去向改另立美术批 |
| 9 | 同上 | 7 张预览图放入 golden 目录但未登记,易被当成引擎基线 | 补写 | `golden/README.md` 增“材质过审预览锚(非引擎帧)”类别,明确不参与逐像素比对、不替代 `board_L*` |
| 9 | 同上 | 4 张细部锚无可复现来源 | 补写 | 生成器增 `golden/` 输出与四条裁切参数;README 同步记录参数 |
| 9 | 同上 | 12×8/46 材质样张被称为“三关 golden 基线”,与 12×12/38 引擎基线混同 | 补写 | §1-9 与 T7 拆成“材质过审预览锚”和“引擎侧 `board_L*` 基线”两条 |
| 9 | 同上 | 完成定义“已重制”与 T7“待确认后重制”并存 | 补写 | T7 明确预览锚已重制、`board_L*` 待实现后按审核关卡换代 |
| 9 | 同上 | §12 多行仍是失效行号锚 | 补写 | 第 1/2/5/6/7/8/9/10/11/12/13/16/17 行全部改内容锚;全表判据行零行号锚 |
| 9 | 同上 | 阴影圆 α 卡写 40/70/105/140,过审预览实为 30/52/78/108 | 补写 | T4 与 §14-3 改为过审值 30/52/78/108,白名单基准同步 |
| 9 | 同上 | art-bible §8.5 两条互斥:结构只能素材本体 vs 地形结构程序化 | 退回上游 | §8.5 首条限定“角色、单位与非地形 UI 格件”,显式列棋盘地形例外;§8.1/§3.2 保持材质归模型、结构归程序 |
| 9 | 同上 | 封印格预览仍用退役裸土 `#B39A78` | 补写 | 未开对照改 `#9C8462`、封印两格改 `#C9AF83`、已开对照改 `#695038`;判据旧承载面对比句同步 |
| 9 | 同上 | battle.md 同步日期仍写 2026-11-07,§6 未列材质实图 | 补写 | 卡头与 §2/§6 改 2026-11-09,§6 增材质过审实图与实图判据 |
| 9 | 同上 | §3 档期仍写“待编排” | 补写 | 改为“已写卡+已编迭代 57、待开工” |
| 9 | 同上 | 待办证据引用已不存在的旧 art-bible 条款 | 补写 | 改为历史陈述“旧条款已随 v3.53 解冻” |
| 9 | 同上 | art-assets checklist §3.3 要什么/前置仍按逐格砖面 | 补写 | 改为只出雷格/数字格面语义纹样,六张材质已录入,不再出逐格瓦片 |
第七轮定向复核:通过(1 条已处置;材质口径与样张、§8.5 一致)。
第八轮定向复核:通过(1 条已处置;预览几何与 art-bible §3.2 浮空数字条逐值一致)。
第九轮定向复核:通过(14 条均闭合;§12 全表 20 组内容锚零 MISS,判据列零行号锚)。