iter56-收尾
This commit is contained in:
1 parent
5ec4a311bb
commit
cedc2e0b5d
21 files changed
+1065
-529
No files matched your search
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
## 运行与验证(工作目录 = 含 project.godot 的切片目录)
|
## 运行与验证(工作目录 = 含 project.godot 的切片目录)
|
||||||
|
|
||||||
- **合回验证 = 前置检查 + 远端 CI(前置检查 2026-11-06 用户裁)**:主区 `git merge --no-ff` 落合并提交前,pre-merge-commit 钩子(`tools/hooks/pre-merge-commit`)自动跑 `tools/run_all_gates.sh --premerge`——冒烟测试+单元测试全套件(4 分片),热导入缓存约 2 分钟;红=合并提交不落(修红后 git commit 续合,或 git merge --abort 放弃),快进合并不触发钩子,`--no-verify` 可跳过且仅属用户。git merge 合回 master 落地后,post-merge 钩子(`tools/hooks/post-merge`)自动 `git push origin master` 触发远端 CI(Gitea Actions,runner=Mac 本机 host 模式,环境自举件=`tools/ci/mac_setup.sh`),工作流(`.gitea/workflows/ci.yml`)按改动域分流(分流算法单点=`tools/ci/domain_route.sh`):游戏码批=两域全量含渲染闸,文档批=文档域秒级闸,纯闸件/管线批=零触发。远端结果**按需现查**:`tools/ci_check.sh <合并提交>` 读该提交任务的 run `status`/`conclusion`,只呈报、不落盘(2026-11-04 用户裁:合回不等待、不唤醒;判据=run 落定后的终局态,且绿须坐实跑闸步真跑过——零触发批呈报「未验」不作绿证,细则=process-conventions §1 第 3 条)。**合回落地即向用户呈报本批总结并止回合**,禁前台 sleep/轮询等 CI。CI 红态不回滚合并——红项在案、修复批合回即再推再验追绿;开工先跑现查件读 CI 状态,红未修不开新批。同一份字节禁止第二次人手跑。`tools/run_all_gates.sh` 仍是全部验证闸的**唯一入口与唯一清单,域划分与选闸算法只写在它这一个地方**,文档禁另列清单;`--code`/`--docs`/`--quick` 是开发期改完即测的选档入口(细则见 process-conventions §4),全量档不替代它。**runner 依赖**:Mac 需开机在线(关机=远端任务排队延后);换机/重装按 `tools/ci/mac_setup.sh` 自举
|
- **合回验证 = 前置检查 + 远端 CI(前置检查 2026-11-06 用户裁)**:主区 `git merge --no-ff` 落合并提交前,pre-merge-commit 钩子(`tools/hooks/pre-merge-commit`)自动跑 `tools/run_all_gates.sh --premerge`——冒烟测试+单元测试全套件(4 分片),热导入缓存约 2 分钟;红=合并提交不落(一律 git merge --abort 放弃 → 回 worktree 处理 → 重新 git merge --no-ff;禁 git commit 续合,该路径两合回钩子零触发),快进合并不触发钩子,`--no-verify` 可跳过且仅属用户。git merge 合回 master 落地后,post-merge 钩子(`tools/hooks/post-merge`)自动 `git push origin master` 触发远端 CI(Gitea Actions,runner=Mac 本机 host 模式,环境自举件=`tools/ci/mac_setup.sh`),工作流(`.gitea/workflows/ci.yml`)按改动域分流(分流算法单点=`tools/ci/domain_route.sh`):游戏码批=两域全量含渲染闸,文档批=文档域秒级闸,纯闸件/管线批=零触发。远端结果**按需现查**:`tools/ci_check.sh <合并提交>` 读该提交任务的 run `status`/`conclusion`,只呈报、不落盘(2026-11-04 用户裁:合回不等待、不唤醒;判据=run 落定后的终局态,且绿须坐实跑闸步真跑过——零触发批呈报「未验」不作绿证,细则=process-conventions §1 第 3 条)。**合回落地即向用户呈报本批总结并止回合**,禁前台 sleep/轮询等 CI。CI 红态不回滚合并——红项在案、修复批合回即再推再验追绿;开工先跑现查件读 CI 状态,红未修不开新批。同一份字节禁止第二次人手跑。`tools/run_all_gates.sh` 仍是全部验证闸的**唯一入口与唯一清单,域划分与选闸算法只写在它这一个地方**,文档禁另列清单;`--code`/`--docs`/`--quick` 是开发期改完即测的选档入口(细则见 process-conventions §4),全量档不替代它。**runner 依赖**:Mac 需开机在线(关机=远端任务排队延后);换机/重装按 `tools/ci/mac_setup.sh` 自举
|
||||||
- 单件直跑(=改完即测的最窄确认,其读数就是那一步的凭据;跨改动面的漏网由合回后远端全量档兜):冒烟测试 `python tools/run_smoke.py`(`game/tests/smoke_boot.tscn` 极小启动场景)· 系统测试 `python tools/run_system_test.py`(宿主 `game/tests/system_test.gd`)· 场景探针 `…console.exe --headless --path . res://probe/ui_probe.tscn` · 单元测试 `… --script res://tests/run_all.gd`
|
- 单件直跑(=改完即测的最窄确认,其读数就是那一步的凭据;跨改动面的漏网由合回后远端全量档兜):冒烟测试 `python tools/run_smoke.py`(`game/tests/smoke_boot.tscn` 极小启动场景)· 系统测试 `python tools/run_system_test.py`(宿主 `game/tests/system_test.gd`)· 场景探针 `…console.exe --headless --path . res://probe/ui_probe.tscn` · 单元测试 `… --script res://tests/run_all.gd`
|
||||||
- 调参批量:`--script res://sim/adventure_monte_carlo.gd`(全冒险期望)· `res://sim/reward_expectation.gd`(奖励期望);关卡完成率/难度类测量一律走全冒险
|
- 调参批量:`--script res://sim/adventure_monte_carlo.gd`(全冒险期望)· `res://sim/reward_expectation.gd`(奖励期望);关卡完成率/难度类测量一律走全冒险
|
||||||
- 数值验证:`python tools/balance_verifier.py`(采集端 `res://sim/verifier_batch.gd`,报告与原始数据落 `sim-data/`)
|
- 数值验证:`python tools/balance_verifier.py`(采集端 `res://sim/verifier_batch.gd`,报告与原始数据落 `sim-data/`)
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
| 条款 | 对出图的具体要求 |
|
| 条款 | 对出图的具体要求 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 一句话视觉规则 | 明快的地牢,轻快的扫荡,仔细的推理——**明亮像素幻想,全年龄,非暗黑**,角色 2~3 头身 |
|
| 一句话视觉规则 | 明快的地牢,轻快的扫荡,仔细的推理——**明亮像素幻想,全年龄,非暗黑**,角色 2~3 头身 |
|
||||||
| 原则一「预告上格」 | 格内绘制优先级 **数字(含色牌)> 小人 > 封印印记 > 变异纹带 > 装饰变体 > 底色**;任何元素禁止遮挡数字字形区;类型微光为底效泛光层,不入遮挡栈 |
|
| 原则一「预告上格」 | 格内绘制优先级 **浮空数字与引导线(最顶)> 小人 > 封印印记 > 交互反馈 > 变异纹带 > 装饰变体 > 底色**;北侧贴花低于小人、南侧随岩体在前;任何元素禁止遮挡浮空数字与引导线;类型微光为底效泛光层,不入遮挡栈 |
|
||||||
| 原则二「明亮为皮,明度分档为骨」 | 暖倾向;数字亮墨直画已开格底(对比过 WCAG AA,art-bible §4.1);色牌为复杂格底后备;未开格底亮度地板与饱和上限同 §4.1(门值定值面=互辨抽测件) |
|
| 原则二「明亮为皮,明度分档为骨」 | 暖倾向;浮空数字暖白芯+2px 深墨描边(art-bible §3.2/§4.1);普通数字色牌退役(封印格身份字形色牌保留);未开格底亮度地板与饱和上限同 §4.1(门值定值面=互辨抽测件) |
|
||||||
| 原则三「一砖一世界」 | 变体优先换色板不加新资产;危险状态必须**形状+颜色双通道**(色弱灰度可辨) |
|
| 原则三「一砖一世界」 | 变体优先换色板不加新资产;危险状态必须**形状+颜色双通道**(色弱灰度可辨) |
|
||||||
| 类型预读单通道(§4.6.3) | 未开格 = **类型常显微光**(五组色带 §4.2:芥末黄/黄绿/青/紫罗兰/绯红,色相+明度双码,避 300°–345° 禁入带,样张冻结);不呈现极性、不泄危险格与安全格(角嵌形状通道已不存在——微光格只留微光) |
|
| 类型预读单通道(§4.6.3) | 未开格 = **类型常显微光**(五组色带 §4.2:芥末黄/黄绿/青/紫罗兰/绯红,色相+明度双码,避 300°–345° 禁入带,样张冻结);不呈现极性、不泄危险格与安全格(角嵌形状通道已不存在——微光格只留微光) |
|
||||||
| 剪影哲学(§5.1) | **所有角色自带轮廓通道:亮色描边+落影底盘**,识别不依赖背景;四类原型见各条目 |
|
| 剪影哲学(§5.1) | **所有角色自带轮廓通道:亮色描边+落影底盘**,识别不依赖背景;四类原型见各条目 |
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
### 1.1 格子样张(砖面形态定稿闸)⚙
|
### 1.1 格子样张(砖面形态定稿闸)⚙
|
||||||
|
|
||||||
- **要什么**:一张按 art-bible §1.4 参数画成的格子风格试验图。**内容清单与验收四项以 art-bible §1.4 为唯一定义处**(含类型微光呈现组),本条只登记生产视角差异:图类型色板变体组至少两套、样张含至少一处砖缘/岛缘厚度与一格装饰立牌示例(§3.2 呈现基准)。
|
- **要什么**:一张按 art-bible §1.4 参数画成的格子风格试验图。**内容清单与验收四项以 art-bible §1.4 为唯一定义处**(含类型微光呈现组),本条只登记生产视角差异:图类型色板变体组至少两套、样张含至少一处砖缘/岛缘厚度与一格装饰立牌示例(§3.2 呈现基准)。
|
||||||
- **风格/规格**:色板 token 直接取 ui_kit 常量组(语义岗清单见 art-bible §4.1:掩尘、裸土、数字墨三档、封印黑、危险红、奖励金、小人蓝、数字色牌)。
|
- **风格/规格**:棋盘三关八色取 art-bible §4.1「三关棋盘环境八色」;语义岗 token 取 ui_kit 常量组(封印黑、危险红、奖励金、小人蓝;普通数字色牌退役,封印格身份字形色牌保留)。
|
||||||
- **验收**:art-bible §1.4 四项按序判定(数字可读性 WCAG ≥4.5:1 硬指标 → 格态三形与微光互辨灰度可辨 → 焦点预算 → 图类型换皮抽测)。**通过 = 砖面形态与色板冻结**。
|
- **验收**:art-bible §1.4 四项按序判定(数字可读性 WCAG ≥4.5:1 硬指标 → 格态三形与微光互辨灰度可辨 → 焦点预算 → 图类型换皮抽测)。**通过 = 砖面形态与色板冻结**。
|
||||||
- **来源**:⚙ 脚本管线自产——样张是验收闸本身,必须按圣经参数画,无复用意义。
|
- **来源**:⚙ 脚本管线自产——样张是验收闸本身,必须按圣经参数画,无复用意义。
|
||||||
- **现状**:验收标准已成文,**测试未跑**。
|
- **现状**:验收标准已成文,**测试未跑**。
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
| Kenney 全系(ui-pack/fantasy-ui-borders/game-icons/board-game-icons/kenney-fonts/roguelike 系/tiny-dungeon/tiny-town) | CC0 | 无 | ui-reuse 待审;tiny-dungeon 终局否决(架构不适配);余顺带否决;kenney-fonts 拉丁字候选退役(全局字体定稿 Fusion Pixel 单套,不再接入) |
|
| Kenney 全系(ui-pack/fantasy-ui-borders/game-icons/board-game-icons/kenney-fonts/roguelike 系/tiny-dungeon/tiny-town) | CC0 | 无 | ui-reuse 待审;tiny-dungeon 终局否决(架构不适配);余顺带否决;kenney-fonts 拉丁字候选退役(全局字体定稿 Fusion Pixel 单套,不再接入) |
|
||||||
| OGA Pixel UI 750(Kenney 作) / PixUI(CamTatz) / Handpainted stone | CC0 | 无 | ui-reuse 待审 |
|
| OGA Pixel UI 750(Kenney 作) / PixUI(CamTatz) / Handpainted stone | CC0 | 无 | ui-reuse 待审 |
|
||||||
| DENZI public domain art | CC0 | 无 | 否决 |
|
| DENZI public domain art | CC0 | 无 | 否决 |
|
||||||
| beast-cave(OGA) | CC0 | 无 | **已退役**(源包归档;地砖现行 = terrain_ 自产全套) |
|
| beast-cave(OGA) | CC0 | 无 | **已退役**(源包归档;地砖随 2026-11-07 棋盘地形重做退役——棋盘改程序化材质) |
|
||||||
| JaggedStone / Screaming Brain / ExileGL / Corey Archer(OGA) | CC0 | 无 | 否决 |
|
| JaggedStone / Screaming Brain / ExileGL / Corey Archer(OGA) | CC0 | 无 | 否决 |
|
||||||
| Calciumtrice / Buch / bart cobblestone(OGA) | CC-BY 3.0 | **需署名** | 否决 |
|
| Calciumtrice / Buch / bart cobblestone(OGA) | CC-BY 3.0 | **需署名** | 否决 |
|
||||||
| LD rogue / Evert cave / poikilos underworld(OGA) | OGA-BY 3.0 | **需署名** | 否决 |
|
| LD rogue / Evert cave / poikilos underworld(OGA) | OGA-BY 3.0 | **需署名** | 否决 |
|
||||||
@@ -212,7 +212,7 @@
|
|||||||
| Fusion Pixel 缝合像素字体 | SIL OFL 1.1 | 保留许可证 | **已接入终稿**(全局 UI 字体;用户裁现状即终稿——单套单字重,拉丁沿用自带字形) |
|
| Fusion Pixel 缝合像素字体 | SIL OFL 1.1 | 保留许可证 | **已接入终稿**(全局 UI 字体;用户裁现状即终稿——单套单字重,拉丁沿用自带字形) |
|
||||||
| DCSS dngn / Lost Garden / Cavernlock / Aftertile / Voirol / oga-zelda-like(armm1998) | CC0 | 无 | 评估否决(架构/风格不适配;zelda-like 留作干净度基准) |
|
| DCSS dngn / Lost Garden / Cavernlock / Aftertile / Voirol / oga-zelda-like(armm1998) | CC0 | 无 | 评估否决(架构/风格不适配;zelda-like 留作干净度基准) |
|
||||||
| Golden UI 系列 | CC-BY-SA | — | **闸④不过,未下载** |
|
| Golden UI 系列 | CC-BY-SA | — | **闸④不过,未下载** |
|
||||||
| Gemini 生图(用户自跑) | 自产 | 无 | **terrain_ 高墙瓦片材质源(现行定稿)** |
|
| Gemini 生图(用户自跑) | 自产 | 无 | **已退役**(2026-11-07 棋盘地形重做;旧 terrain_ 瓦片全删) |
|
||||||
|
|
||||||
### 复用四闸(现行)
|
### 复用四闸(现行)
|
||||||
色板量化 / 禁入带吸色 / 灰度可辨 / 授权干净(SA 不可、来路不明不可)。
|
色板量化 / 禁入带吸色 / 灰度可辨 / 授权干净(SA 不可、来路不明不可)。
|
||||||
+76
-63
@@ -1,10 +1,10 @@
|
|||||||
# 美术圣经(Art Bible)— Dungeon Sweeper
|
# 美术圣经(Art Bible)— Dungeon Sweeper
|
||||||
|
|
||||||
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.48,历次修订明细见 git 提交史
|
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.51,历次修订明细见 git 提交史
|
||||||
>
|
>
|
||||||
> **Art Director Sign-Off(AD-ART-BIBLE)**:历次批均未签核——此为 Lean/Solo 模式(非 PHASE-GATE)下的现行治理状态;full 门禁签核时机待用户表态。
|
> **Art Director Sign-Off(AD-ART-BIBLE)**:历次批均未签核——此为 Lean/Solo 模式(非 PHASE-GATE)下的现行治理状态;full 门禁签核时机待用户表态。
|
||||||
> 风格基调:地牢题材但**非暗黑风**——轻快明亮的幻想冒险风,全年龄;像素风;角色 2~3 头身。
|
> 风格基调:地牢题材但**非暗黑风**——轻快明亮的幻想冒险风,全年龄;像素风;角色 2~3 头身。
|
||||||
> 参考池(用户审阅选定,三者相融):**Into the Breach**(网格信息分层;雷图棋盘呈现基准 = 其战棋地块质感 × 正俯视角,见 §3.2)× **Moonlighter**(明亮像素地牢质感)× **Peglin**(明快全年龄地牢色彩);参考截图存于 `design/art/references/`(三款 × 2 张,与点名池一一对应);Enter the Gungeon 不作参考,反面条款见 §9.2。
|
> 参考池(用户审阅选定,2026-11-07 扩充):**Into the Breach**(网格信息分层;雷图棋盘呈现基准 = 战棋地块质感 × 正俯视角,见 §3.2)× **Moonlighter**(明亮像素地牢质感)× **Peglin**(明快全年龄地牢色彩)× **Stardew Valley**(连续地面与大地块地形的平铺控制、暖色可读性)× **Minish Cap**(圆润岩体轮廓与紧凑像素可读性);补充参考:**Necesse**(大块地形按连续面画、不按逐格物件画)、**Link's Awakening 原版/DX 2D**(抬升台面与南向崖面;2019 重制 3D 立体模型版不作参考)。参考截图存于 `design/art/references/`(原三款 × 2 张在库;新增参考图证待补,不阻塞画法条款);Enter the Gungeon 不作参考,反面条款见 §9.2。
|
||||||
> 约束:本圣经是**纯表现层文档**——明亮轻快是美术风格,不是玩法成分。圣经禁止引入、暗示或预设任何玩法语义,不改变任何 GDD 已锁机制;凡表现层需要玩法钩子才能表达之处(如完美封印检测、Boss 预警),一律标注「待 GDD 定夺」,圣经只规定"若有,则如何呈现"。GDD 机制与圣经冲突时,机制语义以 GDD 为准,呈现方案以本圣经为准。
|
> 约束:本圣经是**纯表现层文档**——明亮轻快是美术风格,不是玩法成分。圣经禁止引入、暗示或预设任何玩法语义,不改变任何 GDD 已锁机制;凡表现层需要玩法钩子才能表达之处(如完美封印检测、Boss 预警),一律标注「待 GDD 定夺」,圣经只规定"若有,则如何呈现"。GDD 机制与圣经冲突时,机制语义以 GDD 为准,呈现方案以本圣经为准。
|
||||||
> **条款验收标注纪律(全文书写规范)**:条款尾部按三档标注验收方式——**`验收:机检〈判据>`**(可量化,脚本能断言)/**`验收:目检〈判据>`**(机器测不了,但看什么、怎么算有明确判据)/**`验收:方向性`**(气质与方向原则,不承担验收);推导源尾注「←」继续表达推导来源,与验收标注同句并存时,验收标注放句末;数值类条款推荐「**待定现用**」态(现行即执法、修订走登记,释义见 §4.1)
|
> **条款验收标注纪律(全文书写规范)**:条款尾部按三档标注验收方式——**`验收:机检〈判据>`**(可量化,脚本能断言)/**`验收:目检〈判据>`**(机器测不了,但看什么、怎么算有明确判据)/**`验收:方向性`**(气质与方向原则,不承担验收);推导源尾注「←」继续表达推导来源,与验收标注同句并存时,验收标注放句末;数值类条款推荐「**待定现用**」态(现行即执法、修订走登记,释义见 §4.1)
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
**原则一|预告上格**(取自 Into the Breach;锚定 P1 推理的掌控感、P2 规划的延迟兑现)
|
**原则一|预告上格**(取自 Into the Breach;锚定 P1 推理的掌控感、P2 规划的延迟兑现)
|
||||||
|
|
||||||
继承其格内信息分层与"攻击预告画在目标格上"的范式:一切威胁、伤害与结算预告必须直接绘制在雷图格本体上,禁止只进侧栏或悬浮提示;格内绘制优先级固定:**数字(含色牌) > 小人标记 > 封印印记 > 变异纹带 > 装饰变体 > 底色**,任何元素禁止遮挡数字。格面类型预读 = 类型微光单通道,色相+明度双码(色带见 §4.2、键契约见 §4.6;徽章小图标族保留给库存与结算明细;类型微光为底效泛光层,不入遮挡栈、不遮任何元素)。与 ITB 之别:只取其信息骨架,弃其冷暗军事色调。验收:目检〈预告画在雷图格本体上,任何元素不遮挡数字〉
|
继承其格内信息分层与"攻击预告画在目标格上"的范式:一切威胁、伤害与结算预告必须直接绘制在雷图格本体上,禁止只进侧栏或悬浮提示;格上绘制优先级固定:**浮空数字与引导线(最顶层,永不被遮挡) > 小人标记 > 封印印记/类型微光 > 交互反馈(悬停/路径/可挖域微光) > 变异纹带 > 装饰变体 > 岩体顶面/地面底色**,任何元素禁止遮挡浮空数字与引导线。屏幕层序按脚底行分档:顶面贴花与交互反馈随所属格件 z——北侧(脚底≤小人)低于小人,南侧(脚底>小人)随岩体在前;封印印记与封印格身份色牌固定低于小人(不参与南侧前推);信息优先级不变(北侧重叠时小人压过贴花)。格面类型预读 = 类型微光单通道,色相+明度双码(色带见 §4.2、键契约见 §4.6;徽章小图标族保留给库存与结算明细;类型微光为底效泛光层,不入遮挡栈、不遮任何元素)。与 ITB 之别:只取其信息骨架,弃其冷暗军事色调。验收:目检〈预告画在雷图格本体上,任何元素不遮挡浮空数字与引导线〉
|
||||||
|
|
||||||
*范围注:本原则约束"已存在的信息往哪里画",不新增信息种类;预告类信息以战斗侧 GDD 实际定义的为准(如 P2 已锁的结算来源标注),GDD 未定义的预告不因本条而存在。*
|
*范围注:本原则约束"已存在的信息往哪里画",不新增信息种类;预告类信息以战斗侧 GDD 实际定义的为准(如 P2 已锁的结算来源标注),GDD 未定义的预告不因本条而存在。*
|
||||||
|
|
||||||
@@ -30,38 +30,38 @@
|
|||||||
|
|
||||||
**原则二|明亮为皮,明度分档为骨**(取自 Moonlighter、Peglin;锚定 P1 可读性前提、P4 探险氛围)
|
**原则二|明亮为皮,明度分档为骨**(取自 Moonlighter、Peglin;锚定 P1 可读性前提、P4 探险氛围)
|
||||||
|
|
||||||
取 Moonlighter 的暖质地砖与亲和冒险者气质、Peglin 的明快全年龄洞穴色彩:全局暖倾向、无压抑。可读性由**格底明度分档**承载——已开格(数字所在格)明度走世界底层档(§2 明度分层;格态语义见《排雷玩法》;美术侧据此未开格走受光墙顶档、已开格走挖出空间沉暗档,与 §8.5 图底分离同轴),亮族数字墨直接画在格底上,直画对比 ≥4.5:1 恒成立。**数字色牌为后备手段**——仅复杂格底(物件纹样/变异纹带/微光叠加致格底对比不足)时垫牌后备(画法 §3.3、色值 §4.1)。格子本体美术放开:纹理、材质、装饰变体、类型纹样皆可入画;格底参数域见 §4.1 硬指标(分档明度域、饱和上限),仍避 Boss 禁入色相带。与参考之别:ITB 以半透明压暗板承载信息;本作格底功能分档(信息可读性服务)。验收:机检〈1–8 全档数字对所在已开格底对比 ≥4.5:1〉
|
取 Moonlighter 的暖质地砖与亲和冒险者气质、Peglin 的明快全年龄洞穴色彩:全局暖倾向、无压抑。可读性由**岩顶/地面明度分档 + 浮空描边字**承载——已开格地面走世界底层档、未开格岩顶走世界中层(§2 明度分层;格态语义见《排雷玩法》;美术侧据此未开格走受光岩顶档、已开格走挖出空间沉暗档,与 §8.5 图底分离同轴);数字以浮空描边字画在格上方(字芯暖白 + 2px 深墨描边,§3.2/§4.1),不使用数字底牌。格子本体美术放开:纹理、材质、装饰变体、类型纹样皆可入画;岩顶/地面参数域见 §4.1 硬指标(分档明度域、饱和上限),仍避 Boss 禁入色相带。与参考之别:ITB 以半透明压暗板承载信息;本作岩顶/地面功能分档 + 浮空数字(信息可读性服务)。验收:机检〈四类底复合对比 ≥4.5(判据 §4.1)〉
|
||||||
|
|
||||||
*设计测试:当格子美术与数字可读性冲突时,先调格底明度档,复杂格底垫色牌后备,不动格子画。*
|
*设计测试:当格子美术与数字可读性冲突时,先调岩顶/地面明度档,禁止使用数字底牌,不动浮空数字画法。*
|
||||||
|
|
||||||
**原则三|一砖一世界**(融合 Moonlighter 地砖观;锚定 P3 风险与收益同源、P4 地牢下探隐喻)
|
**原则三|一砖一世界**(融合 Moonlighter 地砖观;锚定 P3 风险与收益同源、P4 地牢下探隐喻)
|
||||||
|
|
||||||
格子即地牢地砖:未开 = 覆尘完整砖,已开 = 碎裂裸露,雷 = 被惊动的巢穴(格态定义与玩家说法见《排雷玩法》),图类型(board_type)= 同款地砖换色板。图类型与变异格的视觉差异一律先做色板变体,不做新资产;一切危险状态必须"形状 + 颜色"双通道冗余,色弱可辨。像 Moonlighter 之处在砖缝质感与暖色道具,但装饰禁止伪装成逻辑差异——玩家须一眼分清"好看"与"有雷"。验收:目检〈危险状态均为形状+颜色双通道,色弱模拟下可辨〉
|
格子即地牢地形:未开 = 抬升合并岩体,已开 = 连续地面,雷 = 地面上的巢穴(格态定义与玩家说法见《排雷玩法》),图类型(board_type)= 同款材质换色板。图类型与变异格的视觉差异一律先做色板变体,不做新资产;一切危险状态必须"形状 + 颜色"双通道冗余,色弱可辨。像 Moonlighter 之处在岩板缝质感与暖色道具,但装饰禁止伪装成逻辑差异——玩家须一眼分清"好看"与"有雷"。验收:目检〈危险状态均为形状+颜色双通道,色弱模拟下可辨〉
|
||||||
|
|
||||||
格子同时是**内容舞台**,格与格的美术表达按格内实态分层多样化(画法细则 §3.2)。已开格按当格结果整格表达——产资源格嵌对应家族物件纹样(地图战斗资源九类型,§4.6.3)、纯安全格呈现干净裸土、危险格巢穴更凶。未开格在覆尘完整砖之上叠加**装饰变体**(裂纹/碎石斑/物件级点缀等氛围层),用途是破除大面积同砖平铺的重复感。物件级装饰(小石块/陶片/骨殖等)须走**专属装饰形状家族**:形与信息元素(数字/小人/封印印记/纹样)形状语言隔离,灰度下不与任何逻辑元素同形。零信息纪律:随机分布、与雷/安/类型零相关、禁止构成可读线索、分布每板一次跨轮不复掷。焦点预算约束:装饰不构成完整凸形、不抢读(§3.4);数量配额按图类型定(候选 3–5 种,样张已冻结,§1.4)。未开格的类型预读画为**类型微光单通道**(色相+明度双码;仍只表达类型,不泄危险格与安全格——呈现契约见 §4.6.3;概念定义、可见范围与生命周期见《HUD框架》「未开格类型微光」节)。验收:目检〈物件级装饰与逻辑元素形状隔离;装饰不构成完整凸形〉
|
格子同时是**内容舞台**,格与格的美术表达按格内实态分层多样化(画法细则 §3.2)。已开格按当格结果整格表达——产资源格嵌对应家族物件纹样(地图战斗资源九类型,§4.6.3)、纯安全格呈现干净裸土、危险格巢穴更凶。未开格在抬升岩体顶面之上叠加**装饰变体**(裂纹/碎石斑/物件级点缀等氛围层),用途是破除大面积同材质平铺的重复感。物件级装饰(小石块/陶片/骨殖等)须走**专属装饰形状家族**:形与信息元素(浮空数字/小人/封印印记/纹样)形状语言隔离,灰度下不与任何逻辑元素同形。零信息纪律:随机分布、与雷/安/类型零相关、禁止构成可读线索、分布每板一次跨轮不复掷。焦点预算约束:装饰不构成完整凸形、不抢读(§3.4);数量配额按图类型定(候选 3–5 种,样张已冻结,§1.4)。未开格的类型预读画为**类型微光单通道**(色相+明度双码;仍只表达类型,不泄危险格与安全格——呈现契约见 §4.6.3;概念定义、可见范围与生命周期见《HUD框架》「未开格类型微光」节)。验收:目检〈物件级装饰与逻辑元素形状隔离;装饰不构成完整凸形〉
|
||||||
|
|
||||||
*设计测试:当新图类型或新变异格需要新视觉时,先换色板加形状,再谈新资产;当格子多样化与"好看/有雷"之辨冲突时,砍装饰,不动逻辑通道。*
|
*设计测试:当新图类型或新变异格需要新视觉时,先换色板加形状,再谈新资产;当格子多样化与"好看/有雷"之辨冲突时,砍装饰,不动逻辑通道。*
|
||||||
|
|
||||||
### 1.4 格子样张测试(验收标准)
|
### 1.4 格子样张测试(验收标准)
|
||||||
|
|
||||||
> 立意:扫雷数字可读性与暗色氛围相冲突,由一次格子样张测试定风格,具体形态由样张测试定稿。**样张** = 一张按本圣经参数画成的格子风格试验图,是砖面形态的定稿闸——样张通过前,§3.2/§4.1 的一切参数只是候选,通过后冻结为制作标准。
|
> 立意:扫雷数字可读性与暗色氛围相冲突,由一次格子样张测试定风格,具体形态由样张测试定稿。**样张** = 一张按本圣经参数画成的格子风格试验图,是棋盘地形形态(岩体+地面+浮空数字)的定稿闸——样张通过前,§3.2/§4.1 的一切参数只是候选,通过后冻结为制作标准。
|
||||||
|
|
||||||
**样张内容清单**(一图齐备,缺项即无效):未开格(覆尘完整砖,含至少两种装饰变体)、已开格(碎裂裸露,含 0 格与 1–8 全档数字)、危险格(被惊动的巢穴)、封印印记、小人两态(独立占格 + 与数字同格——后者须验"边框高亮不覆盖文本")、图类型色板变体组(§4.3 四槽换色,至少两套)、数字呈现组(已开格底亮墨直画组 + 复杂格底色牌后备组——素底/装饰变体底/变异纹带底至少三种格底上各一组数字)、已开格结果表达组(纯安全格 + 至少两类型物件纹样)、**类型微光呈现组**(至少三个类型的微光在纯砖格上呈现——样张为静态定格测试图,非运行时行为承诺,实际可见时机见《HUD框架》「未开格类型微光」节;含两两相邻格微光并列;微光格内零角嵌/箭头/加号类附加图形)。验收:目检〈样张图含清单全部组项〉
|
**样张内容清单**(一图齐备,缺项即无效):未开格(合并岩体:岩顶大板+南/东崖面,含至少两种装饰变体)、已开格(连续地面,含 0 格与 1–8 全档浮空数字)、危险格(地面上的巢穴纹)、封印印记(画在已揭示地面+受光棱封印石上)、小人两态(独立占格 + 与数字同格——后者须验"数字与引导线完整可见")、图类型色板变体组(§4.3 四槽换色,至少两套)、数字呈现组(浮空数字+引导线:地面格/岩顶格/顶行越出棋盘三种背景各一组,含 1–8 全档)、已开格结果表达组(纯安全格 + 至少两类型物件纹样)、**遮挡组**(小人站在南邻岩体的北侧,脚底被岩体自然遮住;小人与数字同格时数字仍完整可见)、**类型微光呈现组**(至少三个类型的微光在纯岩顶格上呈现——样张为静态定格测试图,非运行时行为承诺,实际可见时机见《HUD框架》「未开格类型微光」节;含两两相邻格微光并列;微光格内零角嵌/箭头/加号类附加图形)。验收:目检〈样张图含清单全部组项〉
|
||||||
|
|
||||||
**验收项按序判定,第一项不过 = 整张否决(数字可读性定风格,风格服从可读)**:
|
**验收项按序判定,第一项不过 = 整张否决(数字可读性定风格,风格服从可读)**:
|
||||||
|
|
||||||
1. **第一验收项|数字可读性(硬指标,可测)**:1–8 全档数字对其所在**已开格底**直画 WCAG 对比 ≥4.5:1(参数域见 §4.1:已开格底走世界底层档、棋盘数字墨亮族);复杂格底(物件纹样/变异纹带/微光叠加致直画对比不足)启用**色牌后备**,牌墨组合 ≥4.5:1(色牌与牌上深墨族数字的定值见 §4.1),牌缘灰度可分;0.5× 缩放抽检数字仍可辨;纹带/裂纹/巢穴纹/物件纹样禁止侵入数字字形占位区(砖心留白,§3.2)。验收:机检〈1–8 数字对已开格底直画与牌墨组合对比均 ≥4.5:1〉
|
1. **第一验收项|数字可读性(硬指标,可测)**:棋盘数字一律为浮空描边字(§3.2「浮空数字」条):字芯暖白 `#F0E2C8`、2px 深墨描边 `#1A140E`、1px 浮空投影、2px 双色引导线;不使用数字底牌。对比判据 = `max(字芯对底, 描边对底) ≥4.5:1` 且 `字芯对描边 ≥4.5:1`;抽测底 = 地面 `#695038`、岩顶 `#9C8462`、崖面 `#403325`、板外暗底四类;最亮底岩顶实测描边对底 5.1:1 过门。0.5× 缩放抽检数字仍可辨;纹带/裂纹/巢穴纹/物件纹样禁止侵入浮空数字与引导线占位区(浮空层独立于格面,格面纹样禁止升到浮空层)。验收:机检〈四类底上 max(字芯对底,描边对底) ≥4.5 且字芯对描边 ≥4.5〉
|
||||||
2. **格态三形可辨(灰度通道)**:未开/已开/雷三态转灰度截图后仍可逐格分类;明度差(墙亮/空间暗)与碎裂形同为合法分类通道,双通道冗余(§3.2 完整度叙事)。装饰变体禁止制造新的分类特征——同一格态下带与不带变体的灰度差异禁止成为三态分类线索。色弱模拟(去色相)下封印印记、巢穴纹不与裂纹混淆。**五组类型微光互辨**:色弱玩家的类型主通道 = 微光,色相+明度双码,微光以明度梯度承载分组(组内不细分,属 §2 信息面层内梯度);微光禁止侵入数字字形占位区,明度梯度禁止压破格底明度档(三态分类不受扰)。验收:目检〈三态灰度逐格可分类;五组微光互辨;色弱模拟下封印印记、巢穴纹不与裂纹混淆〉
|
2. **格态三形可辨(灰度通道)**:未开/已开/雷三态转灰度截图后仍可逐格分类;合并岩体不改变三态分类——未开 = 抬升岩体,已开 = 连续地面,雷 = 地面上的巢穴纹;明度差(岩顶亮/地面暗)与巢穴形同为合法分类通道,双通道冗余(§3.2 完整度叙事)。装饰变体禁止制造新的分类特征——同一格态下带与不带变体的灰度差异禁止成为三态分类线索。色弱模拟(去色相)下封印印记、巢穴纹不与裂纹混淆。**五组类型微光互辨**:色弱玩家的类型主通道 = 微光,色相+明度双码,微光以明度梯度承载分组(组内不细分,属 §2 信息面层内梯度);微光禁止侵入浮空数字占位区,明度梯度禁止压破岩顶/地面明度档(三态分类不受扰)。验收:目检〈三态灰度逐格可分类;五组微光互辨;色弱模拟下封印印记、巢穴纹不与裂纹混淆〉
|
||||||
3. **焦点预算成立(§3.4)**:任意一格至多一个完整凸形;数字所在格无第二焦点。验收:目检〈任一格至多一个完整凸形,数字所在格无第二焦点〉
|
3. **焦点预算成立(§3.4)**:任意一格至多一个信息完整凸形(浮空数字/小人/封印印记);岩体为连续地形,不作单格凸形计;数字所在格无第二信息焦点。验收:目检〈任一格至多一个信息完整凸形,数字所在格无第二焦点〉
|
||||||
4. **图类型换皮抽测(§4.3)**:变体组中数字墨亮族三档、封印黑、危险红、奖励金、小人蓝、数字色牌(后备件)、类型微光五组恒定不动;变体格底仍过第 1、2 项指标。验收:机检〈换皮后不变槽色值恒定,变体格底仍过第 1、2 项〉
|
4. **图类型换皮抽测(§4.3)**:变体组中浮空数字字芯/描边、封印黑、危险红、奖励金、小人蓝、类型微光五组恒定不动;变体岩顶/地面底仍过第 1、2 项指标。验收:机检〈换皮后不变槽色值恒定,变体岩顶/地面底仍过第 1、2 项〉
|
||||||
|
|
||||||
**判定与回退**:第 1 项不过时按原则二设计测试回退——先调格底明度档,复杂格底垫色牌后备,禁止缩字号换字形逃避;第 2–4 项不过时修形不修数。样张通过 = 砖面形态与色板冻结;新增图类型/变异色板须重跑本测试(§4.3)。执行时机:正式砖面资产开工前;《HUD框架》以本节为引用依据。验收:机检〈样张机检断言集全绿后方可冻结砖面形态与色板〉
|
**判定与回退**:第 1 项不过时按原则二设计测试回退——先调岩顶/地面明度档,禁止使用数字底牌;浮空字描边是唯一可读性装置,禁止缩字号换字形逃避;第 2–4 项不过时修形不修数。样张通过 = 棋盘地形形态与色板冻结;新增图类型/变异色板须重跑本测试(§4.3)。执行时机:正式地形资产或程序化材质开工前;《HUD框架》以本节为引用依据。验收:机检〈样张机检断言集全绿后方可冻结地形形态与色板〉
|
||||||
|
|
||||||
**整屏样张闸**:格子样张验"格",整屏样张验"屏"——战斗屏/关卡屏/菜单屏/营地屏各出一张整屏样张,验收四项:①全部文字(含菜单/说明/tooltip/按钮)对其直接背景 ≥4.5:1(WCAG AA),大字(≥18px 或加粗档)底线 3:1、目标 4.5:1;②明度分层三档带成立(信息面层 > 世界中层 > 世界底层,层间灰度可分);③整屏焦点预算(§3.4:首焦唯一——数字区/立绘/主按钮,无第二焦点竞争;负空间服务焦点,不属空窗);④文字禁直接压纹理底(垫容器或罩层)。验收顺序 = **方向稿目检先行**(防"机检过闸但气质否决"式返工),目检过后机检冻结。执行时机 = 屏级视觉落码开工前;过闸前一切屏级视觉为占位临时态(§7.1 完成条款)。**样张判定物的产出手段与素材输入级别不进圣经定值**——圣经只定样张要验什么,不定样张以何种手段产出、也不定它取哪一级别素材输入。验收:机检〈整屏样张四项断言全绿,且目检先行过审〉
|
**整屏样张闸**:格子样张验"格",整屏样张验"屏"——战斗屏/关卡屏/菜单屏/营地屏各出一张整屏样张,验收四项:①全部文字(含菜单/说明/tooltip/按钮)对其直接背景 ≥4.5:1(WCAG AA),大字(≥18px 或加粗档)底线 3:1、目标 4.5:1;②明度分层三档带成立(信息面层 > 世界中层 > 世界底层,层间灰度可分);③整屏焦点预算(§3.4:首焦唯一——数字区/立绘/主按钮,无第二焦点竞争;负空间服务焦点,不属空窗);④文字禁直接压纹理底(垫容器或罩层)。**浮空数字为描边字,按 §1.4 第一验收项的复合对比判据,不套本条文字直画 4.5:1 口径。** 验收顺序 = **方向稿目检先行**(防"机检过闸但气质否决"式返工),目检过后机检冻结。执行时机 = 屏级视觉落码开工前;过闸前一切屏级视觉为占位临时态(§7.1 完成条款)。**样张判定物的产出手段与素材输入级别不进圣经定值**——圣经只定样张要验什么,不定样张以何种手段产出、也不定它取哪一级别素材输入。验收:机检〈整屏样张四项断言全绿,且目检先行过审〉
|
||||||
|
|
||||||
**战斗一屏样张**:整屏样张闸已过——整屏四项机检全绿,方向稿目检已通过(用户实机目检核销,沿革查 git 提交史)
|
**战斗一屏样张**:整屏样张闸已过——整屏四项机检全绿,方向稿目检已通过(用户实机目检核销,沿革查 git 提交史)
|
||||||
|
|
||||||
**样张现状**:格子样张已冻结,冻结凭据 = §4.1/§8.2 定值表;样张 v3 产物原件已丢失、未入 git。现行冻结态:色板与帧数档维持冻结;数字形制 = 亮墨三档直画 + 色牌后备(值见 §4.1);新增图类型/变异色板须重跑本节测试。验收:机检〈冻结项定值均以 §4.1/§8.2 对应 owner 表为准〉
|
**样张现状**:格子样张已冻结,冻结凭据 = §4.1/§8.2 定值表;样张 v3 产物原件已丢失、未入 git。现行冻结态:色板与帧数档维持冻结;数字形制 = 浮空描边字(暖白字芯 + 2px 深墨描边 + 双色引导线,值见 §4.1/§3.2);普通数字色牌退役(封印格身份字形色牌保留,见 §3.2 封印印记条);新增图类型/变异色板须重跑本节测试。验收:机检〈冻结项定值均以 §4.1/§8.2 对应 owner 表为准〉
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -159,29 +159,31 @@
|
|||||||
|
|
||||||
### 3.2 环境几何
|
### 3.2 环境几何
|
||||||
|
|
||||||
- **雷图棋盘呈现基准**:战棋地块质感 × 正俯视角——取 ITB 参考图(`references/itb_1.jpg`)的地表质感骨架:地块纹理多样、起伏体块感、岛缘/砖缘厚度、格上装饰小立牌;但相机一律正上方垂直向下,格线屏轴对齐,**禁等距/斜视角与菱形格**;形状语言仍守总纲圆角方形。砖缘厚度与岛缘立体面属形体塑造(顶面格底仍守 §4.1 参数域)。装饰小立牌属 ITB 参考的观感元素,本作不采用;装饰变体走氛围层纪律(纹理级/物件级形状家族,见下方装饰变体条),零信息纪律以原则三为准。验收:目检〈棋盘正俯视、格线屏轴对齐、无菱形格〉 ←原二;原三;§2
|
- **雷图棋盘呈现基准**:战棋地块质感 × 正俯视角——取 ITB 参考图(`references/itb_1.jpg`)的地表质感骨架:地块纹理多样、起伏体块感、岛缘/砖缘厚度;但相机一律正上方垂直向下,格线屏轴对齐,**禁等距/斜视角与菱形格**;形状语言仍守总纲圆角方形。**立体表现取抬升合并岩体+南/东崖面**(2026-11-07 用户裁,采 Link's Awakening 原版/DX 2D 的台面抬升与崖面观感,2019 重制 3D 立体模型版不作参考);砖缘厚度与岛缘立体面属形体塑造(岩顶/地面仍守 §4.1 参数域)。装饰小立牌属 ITB 参考的观感元素,本作不采用;装饰变体走氛围层纪律(纹理级/物件级形状家族,见下方装饰变体条),零信息纪律以原则三为准。验收:目检〈棋盘正俯视、格线屏轴对齐、无菱形格;未开格呈抬升合并岩体+南/东崖面〉 ←原二;原三;§2
|
||||||
- **地砖**:一切环境体由同一圆角方形衍生:未开 = 完整凸砖,已开 = 同形缺角碎裂,雷 = 碎裂加巢穴纹(危险格玩家说法见《排雷玩法》);只以"完整度"叙事,不为状态新造形。验收:目检〈三格态仅以完整度区分,无新造状态形〉 ←原三;P4
|
- **地形**:一切环境体由同一圆角方形衍生:未开 = 抬升岩体(完整),已开 = 连续地面(挖出空间),雷 = 地面上的巢穴纹(危险格玩家说法见《排雷玩法》);只以“完整/挖开”叙事,不为状态新造形。验收:目检〈三格态仅以完整/挖开与巢穴纹区分,无新造状态形〉 ←原三;P4
|
||||||
- **装饰变体(未开格氛围层)**:覆尘完整砖之上叠加裂纹/碎石斑/物件级点缀等装饰。物件级装饰(小石块/陶片/骨殖等)须走**专属装饰形状家族**(与信息元素形状语言隔离、灰度下不与任何逻辑元素同形),数量配额按图类型定(候选 3–5 种,样张已冻结,§1.4),一律残缺、内凹、低对比而自然后退(§3.4);零信息纪律(分布随机、与雷/安/类型零相关、灰度下禁止制造新分类特征、分布每板一次跨轮不复掷)以原则三为准,此处不赘。验收:目检〈物件级装饰不与任何逻辑元素同形;装饰残缺低对比后退〉 ←原三
|
- **装饰变体(未开格氛围层)**:抬升岩体的顶面之上叠加裂纹/碎石斑/物件级点缀等装饰。物件级装饰(小石块/陶片/骨殖等)须走**专属装饰形状家族**(与信息元素形状语言隔离、灰度下不与任何逻辑元素同形),数量配额按图类型定(候选 3–5 种,样张已冻结,§1.4),一律残缺、内凹、低对比而自然后退(§3.4);零信息纪律(分布随机、与雷/安/类型零相关、灰度下禁止制造新分类特征、分布每板一次跨轮不复掷)以原则三为准,此处不赘。验收:目检〈物件级装饰不与任何逻辑元素同形;装饰残缺低对比后退〉 ←原三
|
||||||
- **结果整格表达(已开格)**:已开格按当格结果整格表达(结果清单见原则三);画法——产资源格的家族物件纹样用 §3.1 道具点剪影语言(直线几何体)角嵌于砖缘,砖心与数字字形占位区留白(已开格仍承载数字);危险格巢穴纹较已开格更凶一档,形状+颜色双通道。验收:目检〈产资源格嵌家族纹样且砖心留白;巢穴纹更凶一档〉 ←原三;P3
|
- **结果整格表达(已开格)**:已开格按当格结果整格表达(结果清单见原则三);画法——产资源格的家族物件纹样用 §3.1 道具点剪影语言(直线几何体)角嵌于格面边缘,格心留白(数字已迁浮空层,格面纹样不再需要给字形让位;封印格身份字形走色牌例外,见封印印记条,仍禁止升到浮空层);危险格巢穴纹较已开格更凶一档,形状+颜色双通道。验收:目检〈产资源格嵌家族纹样且格心留白;巢穴纹更凶一档〉 ←原三;P3
|
||||||
- **未开格预读通道(微光单通道)**:类型预读 = 类型微光单通道(色相+明度双码,色带 §4.2);色弱类型主通道 = 微光明度梯度(组粒度——组间互辨;§2 微光明度例外);格内零角嵌/箭头/加号类附加形(微光格只留微光)。验收:目检〈微光格内零角嵌/箭头/加号类附加形〉 ←原一;原三
|
- **未开格预读通道(微光单通道)**:类型预读 = 类型微光单通道(色相+明度双码,色带 §4.2);色弱类型主通道 = 微光明度梯度(组粒度——组间互辨;§2 微光明度例外);格内零角嵌/箭头/加号类附加形(微光格只留微光)。微光画在抬升后的岩顶面内,锚点随岩顶偏移(−ESHIFT/−LIFT),禁止越出本格岩顶。验收:目检〈微光格内零角嵌/箭头/加号类附加形;微光不越本格岩顶〉 ←原一;原三
|
||||||
- **封印印记**:封印动作的叙事呈现 = **封印**(玩家可见专名,术语定义见 [术语表](../gdd/术语表.md)「封印」条;动作面见《排雷玩法》)——封印动作落在格上的印记称封印印记。**形 = 法阵**:一圈外环+环内一个十字,十字四端顶到环内沿、与环连成一体——两层构成取法阵通用骨架(外环=圈定范围,环内图形=力量图形,非指特定作品):环=封印圈定,十字=钉住此格。**画法 = 参数化绘制**(着色器按格边实时画环与十字,不出贴图):格边 26–46px 连续可变,任何贴图源都得非整数缩放(32px 源在 28 格缩到 0.875、在 46 格放到 1.44),像素必宽窄不均;参数化按比例画,任意格边清晰。**环外光圈**:印记外面一圈**压暗光**(纯黑只加透明度)——自环外缘起、向外衰减到格边为止、**不外溢邻格**,作用 =「此格被罩住」;禁中心亮、禁色相、禁呼吸。**尺寸定值**见 §8.2「封印印记参数表」(本处不复述数值)。**色** = 封印黑 `#000000`(§4.1),光圈只改 alpha、不新增色。**占位**:印记居格心,环外留 9% 格宽给光圈(见 §8.2);封印印记出现在**已揭示格(地板瓦片)**上(封印受理即揭示——机制口径见《排雷玩法》动作合法性节,呈现规格与预览见《ux/battle》「封印格呈现预览」节)——格下身份字形(危/数字)按格内栈位(§1.2 数字 > 印记)垫色牌叠于法阵之上,印记与数字同格合法。格内栈位见 §1.2;层序纪律——印记层低于小人,且迷雾态(区外全黑/记忆态)隐藏(§6.5「封印随格隐没」)。封印特效两件:常显形态即本件,施印瞬间未实装。战末金蜡封徽记仍取贴图 `seal_mark.png`(与棋盘侧参数化绘制并存,两处互不依赖)。验收:目检〈环径占格宽 82%±1px;光圈只在环外且不出格;纯黑无色相〉 ←原一;P2
|
- **封印印记**:封印动作的叙事呈现 = **封印**(玩家可见专名,术语定义见 [术语表](../gdd/术语表.md)「封印」条;动作面见《排雷玩法》)——封印动作落在格上的印记称封印印记。**形 = 法阵**:一圈外环+环内一个十字,十字四端顶到环内沿、与环连成一体——两层构成取法阵通用骨架(外环=圈定范围,环内图形=力量图形,非指特定作品):环=封印圈定,十字=钉住此格。**画法 = 参数化绘制**(着色器按格边实时画环与十字,不出贴图):格边 26–46px 连续可变,任何贴图源都得非整数缩放(32px 源在 28 格缩到 0.875、在 46 格放到 1.44),像素必宽窄不均;参数化按比例画,任意格边清晰。**环外光圈**:印记外面一圈**压暗光**(纯黑只加透明度)——自环外缘起、向外衰减到格边为止、**不外溢邻格**,作用 =「此格被罩住」;禁中心亮、禁色相、禁呼吸。**尺寸定值**见 §8.2「封印印记参数表」(本处不复述数值)。**色** = 封印黑 `#000000`(§4.1),光圈只改 alpha、不新增色。**占位**:印记居**格心**(已揭示连续地面;环外留 9% 格宽给光圈,见 §8.2);封印印记出现在**已揭示格**上(封印受理即揭示——机制口径见《排雷玩法》动作合法性节,呈现规格与预览见《ux/battle》「封印格呈现预览」节)——格下身份字形(危/数字)按格内栈位(§1.2 数字 > 印记)垫色牌叠于法阵之上,印记与数字同格合法;该格字形不参与浮空数字层。**承载面**:封印格地面铺本关受光棱色封印石(dungeon `#C9AF83`/underdark `#A1B1BF`/deep_underdark `#918E8B`,§4.1)——新连续地面 `#695038` 系对封印黑仅 2.35–2.98:1,不达 §4.1 ≥4.5:1;受光棱系 6.45–9.94:1,零新增色。格内栈位见 §1.2;层序纪律——印记与身份色牌固定低于小人(不参与南侧格件前推),且迷雾态(区外全黑/记忆态)隐藏(§6.5「封印随格隐没」)。封印特效两件:常显形态即本件,施印瞬间未实装。战末金蜡封徽记仍取贴图 `seal_mark.png`(与棋盘侧参数化绘制并存,两处互不依赖)。验收:目检〈环径占格宽 82%±1px;光环居格心、只在环外且不出格;纯黑无色相〉 ←原一;P2
|
||||||
- **可挖域接触带微光(交互反馈层)**:挖掘期,英雄格周界与可挖域(概念见《排雷玩法》动作合法性节;呈现义务见《HUD框架》可挖域指示)的接触面画呼吸微光——正交邻墙 = 该侧整条边,斜向邻墙 = 共享角点 + 向两侧各延伸半条边;光只画英雄格(空间)一侧、不进墙格(与装饰变体零冲突,数字砖心不涉);微光 = 空间的灯光边界(画法规则)。色相 = 蓝族浅一档(§4.2 蓝条;与主角蓝框的分层由样张测试定,§1.4);呼吸 = §2.1 挖掘期唯一在动元素,减动效停格。角点为斜墙与正交墙共享、不逐格归因,逐格指认 = 悬停金框(呈现交互归《HUD框架》悬停指示域)。验收:目检〈微光只画英雄格一侧接触面:正交邻墙整条边、斜向邻墙角点 + 半边〉 ←§2.1;§4.2;P1
|
- **可挖域接触带微光(交互反馈层)**:挖掘期,英雄格周界与可挖域(概念见《排雷玩法》动作合法性节;呈现义务见《HUD框架》可挖域指示)的接触面画呼吸微光——正交邻墙 = 该侧整条边,斜向邻墙 = 共享角点 + 向两侧各延伸半条边;光只画英雄格(空间/地面)一侧、不进岩体(岩体抬升不改变接触带的逻辑格边;光画在地面侧,不贴岩顶;与装饰变体零冲突);微光 = 空间的灯光边界(画法规则)。色相 = 蓝族浅一档(§4.2 蓝条;与主角蓝框的分层由样张测试定,§1.4);呼吸 = §2.1 挖掘期唯一在动元素,减动效停格。角点为斜墙与正交墙共享、不逐格归因,逐格指认 = 悬停金框(呈现交互归《HUD框架》悬停指示域)。验收:目检〈微光只画英雄格一侧接触面:正交邻墙整条边、斜向邻墙角点 + 半边;光不进岩体〉 ←§2.1;§4.2;P1
|
||||||
- **墙体**:圆角砌块堆叠,禁尖刺装饰——尖刺专属危险语义,装饰禁止伪装逻辑差异。验收:目检〈墙体无尖刺装饰〉 ←原三
|
- **岩体**:圆角岩体堆叠/合并,禁尖刺装饰——尖刺专属危险语义,装饰禁止伪装逻辑差异。验收:目检〈岩体无尖刺装饰〉 ←原三
|
||||||
- **高墙瓦片体系|术语与定义**:未挖格 = **一整块 32×32 自含凸起岩体**;素材语义名——未开格素材 = **墙瓦片**,已开格素材 = **地面瓦片**。瓦片以自含岩体为单位,Tiny Dungeon 拼块套不进自含岩体定义,不作瓦片参考。验收:目检〈未开格为整块凸起岩体,无拼块接缝感〉 ←原三
|
- **棋盘地形体系|术语与定义**:未开格 = **抬升岩体**——连通的未开格(四邻:上下左右;斜角不连)合并为一块岩体,共享一块岩顶与连续崖面;已开格 = **连续地面**。素材语义名——岩顶材质 = **大岩板**,南/东崖面材质 = **崖面**,已开地面 = **地面**;**不做逐格自含瓦片**,Tiny Dungeon 拼块套与逐格 16+5 墙/地瓦片套均退役(2026-11-07 用户裁)。验收:目检〈连通未开格共享一块岩顶与连续崖面,无逐格拼缝〉 ←原三
|
||||||
- **高墙瓦片体系|边界墨线纪律**:墙瓦片与相邻格分界一律 1px 深墨线、直线贴格边、零锯齿;墨线职责 = 分隔,不追求与地面融合。验收:目检〈分界为 1px 深墨直线贴格边、零锯齿〉
|
- **棋盘地形体系|投影与搭接**:整块岩顶向北偏西抬升——LIFT = round(格边 × 0.435)(46 格 20px、26 格 11px,下限 1),ESHIFT = round(格边 × 0.109)(46 格 5px、26 格 3px,下限 1);南/东崖面沉在岩体格内(南面高 = LIFT,东面宽 = ESHIFT,东面高 = 格边 + LIFT),不侵下一行地面;相邻岩体的岩顶按 2px 互相搭接盖住格缝;板边岩顶向外延伸 ESHIFT 铺到板缘。单个墙格的**顶面 rect** = 格矩形左上偏移 (−ESHIFT, −LIFT)、边长 = 格边;**整格视觉 rect** = 顶面 rect 向右补 ESHIFT、向下补 LIFT。验收:机检〈LIFT/ESHIFT 比例与下限;相邻岩顶搭接 2px;崖面不越格〉
|
||||||
- **高墙瓦片体系|光照纪律(单一北受光)**:北缘 = 墨线内侧 1px 微亮棱(就地取色提亮,禁宽亮带);西/东缘 = 墨线后直进纹理、不加修饰;南缘 = 墨线 + 立面窄暗条(约 1/3 格高,横层理叠石、禁竖条纹栅栏感)。验收:目检〈北缘亮棱、南缘窄暗条;无宽亮带、无竖条纹栅栏感〉
|
- **棋盘地形体系|受光与崖面**:光照 = **北/西受光**(2026-11-07 用户裁)——北/西临空缘 = 2px 主亮棱 + 2px 次亮棱(暖白族就地提亮),再外 2px 深墨临空边线;南/东临空缘 = 2px 深墨内缘 + 3 段 ×2px 顶面内阴影(自缘内 0.217×格边起,黑 α≈0.27/0.16/0.08)。南崖面 = 高 LIFT、宽 = 格边 + ESHIFT,顶缘 2px 口沿高光取本关受光棱(§4.1,dungeon `#C9AF83`)+1px 深墨线,面身横向层理叠石(大岩板同族、背光暗面),禁竖条纹栅栏;东崖面 = 宽 ESHIFT、高随岩顶南缘,横向层理、外缘 1px 深墨。验收:目检〈北/西亮棱、南/东内阴影与崖面层理;南崖不越下一行、东崖不越下一列;无竖条纹〉
|
||||||
- **高墙瓦片体系|凹角收头**:角点单像素落线;南立面侧凹角加 1px 立面收头——带身与转角竖线同列收尾,禁悬空、禁突出。验收:目检〈凹角收头与转角竖线同列,无悬空突出〉
|
- **棋盘地形体系|材质与装饰**:岩顶 = **大岩板**(低频率斑驳 + 稀疏大板块缝 + 板缘浮雕倒角,单块材质覆盖整块岩体;禁逐格小砖纹与逐格边框);地面 = 连续暖褐土(低对比石屑、碎石斑;无缝,禁逐格砖缝);装饰变体 = 岩顶材质内的低对比裂纹/麻点/碎石贴花,走原则三零信息纪律,不新增逐格资产。验收:目检〈岩顶为单块大岩板、无逐格拼缝;地面连续无缝;装饰不构成逻辑线索〉
|
||||||
- **高墙瓦片体系|现行定稿**:`game/assets/art/board/terrain_*`(16 唯一墙瓦片 + 5 地面瓦片变体;词表与查表逻辑落码于 `board_world.gd`)。验收:机检〈terrain_* 素材 16 墙瓦片 + 5 地面变体在库,查表逻辑与词表一致〉
|
- **棋盘地形体系|投影与整板悬崖**:南/东临空岩体在地面投 4 段 ×4px 渐隐影(黑 α 0.44/0.30/0.16/0.07,自崖面外缘起);整板悬崖 = 板底/右侧 `DEPTH_PX 8px` 暗面 + 岩层横纹 + 口沿高光 + 接触 AO + 底线收边 + 悬浮影,色取棋盘环境子板(§4.1)。验收:目检〈南/东投影四段渐隐;整板悬崖结构件齐备〉
|
||||||
- **高墙瓦片体系|高墙感 D 投影档与整板悬崖**:南临空墙格 = 立面口沿高光 2px `#C9AF83`(201,175,131——代码色 `BRICK`,与掩尘枚同源单点) + 双段暗带(0.16/0.25 格边,黑罩 α0.60/0.82);北邻墙地面格 = 三段渐隐投影(顶带 0.22 格边,α0.28 起);整板悬崖 = 板底/右侧 `DEPTH_PX 8px` 暗面 + 列分隔竖缝 + 岩层横纹 + 口沿高光 + 接触 AO + 底线收边 + 悬浮影(游戏 `board_world.gd` 同款结构件,样张脚本与游戏渲染常量同源)。验收:目检〈南临空墙格呈口沿高光+双段暗带;北邻墙地面格呈三段渐隐投影;整板悬崖结构件齐备〉
|
- **棋盘地形体系|绘制序与遮挡**:层序 = 地面(封印格地面铺本关受光棱色封印石)→ 投影 → 数字所属格的**地面阴影圆**(开启格地面,位于小人之下,小人站该格时遮住圆)→ **按脚底 y 排序的深度对象**(岩体 = 其最南格格底;小人 = 所在格格底;升序绘制,南侧岩体自然遮住小人脚底)→ 顶面贴花(类型微光/变异纹带,随岩顶锚点偏移 −ESHIFT/−LIFT;只在未开格岩顶)与交互反馈(悬停/路径/可挖域微光)随所属格件同序——北侧(脚底≤小人)低于小人,南侧(脚底>小人)随岩体在前;封印印记与封印格身份色牌在已揭示地面、固定低于小人(不参与南侧前推)→ **浮空数字+引导线(最顶)**。验收:机检〈深度对象按脚底升序绘制;格件贴花/交互随脚底行分档;浮空层 z 最高〉+目检〈南侧岩体遮住小人脚底;顶行数字越出棋盘仍完整〉
|
||||||
- **变异格形状通道**(双通道之"形",与色无关):底砖圆角外轮廓不变,砖面内缘绘一圈定宽专属几何纹带(纹带形全作不与他类共用),砖心留白予数字与封印印记;验收标准 = **灰度截图下仍可分类**。种类清单 = 地形变异六类型已定稿(地形变异 GDD;荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘):**纹带形按轴只分两种**——伤害轴(荆棘丛/岩浆/落石)= 刺/缺排斥形,信息轴(藤蔓缠绕/烬覆/矿尘)= 遮蔽/缠绕形;同轴跨图类型只做色板变体(§4.3 `variant_tint` 槽),不做新纹形。岩浆纹带橙红须与危险红互辨(变异格不是雷,色相邻近有混淆风险);信息轴遮蔽呈现禁止侵入数字字形占位区(§1.4 验收 1 延伸)。验收:目检〈六类型纹带灰度下仍可分类,同轴不新增纹形;岩浆纹带与危险红互辨〉 ←原一(纹理位次第 4,让位于数字/小人/封印印记);原三
|
- **棋盘地形体系|浮空数字(信息层)**:数字与格面字形(危/?)脱离格面,浮在格上方——**封印格除外**,其身份字形按封印印记条垫色牌叠于法阵之上、不进浮空层;字高 21px(7px 像素字 ×3,固定不随格边缩放)、2px 深墨描边、字芯暖白 `#F0E2C8`、1px 浮空投影;字底距格顶 15px;引导线 = 2px 双色实线(左深 `#1A140E`/右浅 `#E8D3AB`),自字底 +3 落到格顶 +4;格顶 +7 处画 10×6 四层柔边小阴影圆(标明数字所属格),圆画在开启格地面、位于小人之下,不盖小人。浮空层 z 最高,任何地形/小人/特效不遮数字与引导线。顶行数字出棋盘上缘,D 区上方预留 44px(字高 21+间距 15+描边 2+余量 6)。验收:机检〈字高 21、间距 15、顶预留 44;浮空层 z 最高;封印格无浮空 entries〉+目检〈顶行数字与引导线完整;阴影圆指向正确格〉
|
||||||
|
- **棋盘地形体系|旧资产处理**:旧 `terrain_*` 63 件(16 墙瓦片 + 5 地面变体,三关各一套)全部退役——无参考价值者直接删除,不归档;`seal_mark.png` 保留(战末金蜡封专用)。验收:机检〈旧 terrain_* 零引用、零在库;seal_mark 在库〉
|
||||||
|
- **变异格形状通道**(双通道之"形",与色无关):岩体外形由合并岩体决定、不因变异改变;变异纹带画在本格抬升岩顶面内缘(锚点随岩顶偏移 −ESHIFT/−LIFT),一圈定宽专属几何纹带(纹带形全作不与他类共用),格心留白(数字已迁浮空层;封印印记在已揭示地面承载,不与变异纹带同格);验收标准 = **灰度截图下仍可分类**。种类清单 = 地形变异六类型已定稿(地形变异 GDD;荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘):**纹带形按轴只分两种**——伤害轴(荆棘丛/岩浆/落石)= 刺/缺排斥形,信息轴(藤蔓缠绕/烬覆/矿尘)= 遮蔽/缠绕形;同轴跨图类型只做色板变体(§4.3 `variant_tint` 槽),不做新纹形。岩浆纹带橙红须与危险红互辨(变异格不是雷,色相邻近有混淆风险);信息轴遮蔽呈现禁止侵入浮空数字与引导线占位区(§1.4 验收 1 延伸)。验收:目检〈六类型纹带灰度下仍可分类,同轴不新增纹形;岩浆纹带与危险红互辨〉 ←原一(纹理位次第 4,让位于浮空数字/小人/封印印记);原三
|
||||||
|
|
||||||
### 3.3 UI 形状语法(方向指导,细则见 §7.1)
|
### 3.3 UI 形状语法(方向指导,细则见 §7.1)
|
||||||
|
|
||||||
**方向指导**:半拟物——容器穿戏服、数据素面;圆角 = 可触摸的物件,直角 = 须精确的信息(总纲「圆角为世,直线为信」的 UI 侧落法)。画法细则(面板/按钮/蜡封/数字色牌/参考分界)成文于 **§7.1**。验收:方向性 ←原二;§2.4
|
**方向指导**:半拟物——容器穿戏服、数据素面;圆角 = 可触摸的物件,直角 = 须精确的信息(总纲「圆角为世,直线为信」的 UI 侧落法)。画法细则(面板/按钮/蜡封/参考分界)成文于 **§7.1**。验收:方向性 ←原二;§2.4
|
||||||
|
|
||||||
### 3.4 主角形状与对比预算
|
### 3.4 主角形状与对比预算
|
||||||
|
|
||||||
显著度 = 完整度:**每格至多一个"完整凸形"**(数字/小人/封印印记,依 1.2 优先级让位;装饰变体贴砖缘分布、不构成第二完整凸形——§4.6;数字色牌随数字一体,不作独立焦点;类型微光为底效泛光,不作焦点、不抢完整凸形预算),底砖与装饰一律残缺、内凹、低对比而自然后退;危险用刺与缺(排斥形),收益用满与圆(吸引形),同表预算、此消彼长。焦点分配双机制:**完整度**(形状,本条上文)+ **明度带**(§2 明度分层——信息面层恒亮于世界层,焦点天然落信息面);明暗只做层间分离,层内禁明暗竞争(不靠明暗抢焦)。验收:目检〈任一格至多一个完整凸形;信息面层恒亮于世界层〉 ←原二;P1;P3
|
显著度 = 完整度:**每格至多一个信息完整凸形**(浮空数字/小人/封印印记,依 1.2 优先级让位)。岩体为连续地形,不作单格凸形计;装饰变体贴岩顶分布、不构成第二完整凸形(§4.6);浮空数字的引导线与阴影圆随数字一体,不作独立焦点;类型微光为底效泛光,不作焦点、不抢完整凸形预算。岩体与装饰一律残缺、内凹、低对比而自然后退;危险用刺与缺(排斥形),收益用满与圆(吸引形),同表预算、此消彼长。焦点分配双机制:**完整度**(形状,本条上文)+ **明度带**(§2 明度分层——信息面层恒亮于世界层,焦点天然落信息面);明暗只做层间分离,层内禁明暗竞争(不靠明暗抢焦)。验收:目检〈任一格至多一个信息完整凸形;信息面层恒亮于世界层〉 ←原二;P1;P3
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -193,17 +195,24 @@
|
|||||||
|
|
||||||
### 4.1 主色板
|
### 4.1 主色板
|
||||||
|
|
||||||
- **掩尘 `#C9AF83`**|未开格底色,覆尘完整砖:全作的"未知",画面最大沉默面。验收:机检〈未开格底色 = #C9AF83〉 ←原二;§2.1
|
- **掩尘 `#9C8462`**|未开格**岩体顶面基色**(覆尘完整岩体):全作的"未知",画面最大沉默面;原 `#C9AF83` 收缩为受光棱/口沿高光专用(代码 `BRICK` 保留为高光锚色,不再作未开格基色)。验收:机检〈未开格岩顶基色 = #9C8462;#C9AF83 只作受光棱/口沿高光〉 ←原二;§2.1
|
||||||
- **裸土 `#B39A78`**|已开格底色,碎裂裸露:更收更退;明度分层——已开格(挖出的空间)走**世界底层档**,明度低于未开格墙体一档(与 §8.5 图底分离同轴),L 0.08–0.14 带(更高明度底实测达不到 4.5:1,故取本带;样张已冻结,§1.4)。验收:机检〈已开格底 L 落在 0.08–0.14,对亮墨数字 ≥4.5:1〉 ←原三
|
- **裸土 `#695038`**|已开格**连续地面基色**:更收更退;明度分层——已开格(挖出的空间)走**世界底层档**,明度低于未开格岩体一档(与 §8.5 图底分离同轴),L 0.08–0.14 带(样张实测 L≈0.09)。验收:机检〈已开格地面基色 = #695038,L 落 0.08–0.14〉 ←原三
|
||||||
- **数字墨双色制**:1–8 **不做八色分色**,按密度分三档色温(冷 = 稀疏,暖 = 密集);**字形为唯一数值载体**,色温只作密度氛围。验收:目检〈1–8 数字按密度呈三档色温而非八色〉 ←原一/原二;P3
|
- **棋盘环境子板(分层②,不占 48 token 额度)**|现行基座档八色:岩顶 `#9C8462`、地面 `#695038`、崖面 `#403325`、板块缝 `#64523A`、倒角亮 `#CCB288`、倒角暗 `#766248`、临空墨线 `#261E15`、受光棱 `#C9AF83`;单张像素域 ≤32,三关按 §4.3 换色不新增 token。验收:机检〈八色在册、单张像素域 ≤32〉
|
||||||
- **棋盘数字呈现 = 按板自适应三态**:暗纹理板(dungeon 系)= **亮族**三档 1–3 冷亮青白 #D8ECF0/4–5 暖白 #F0E2C8/6–8 金亮 #F8E3A8 直画(判据 = 族最弱成员对 p90 ≥4.5:1 且对均值 ≥2.5:1);双峰纹理板(underdark/deep_underdark 系)= **色牌垫底**(素牌 DIGIT_PLATE + 深墨 #33261B 12:1,纹理免疫——双峰纹理板上任何墨族直画都不可读,渲染帧取证;判据 = 亮深两族皆不过门,深族均值门 3.0);缺盘平色回退态(#B39A78 中明度底)默认深墨直画。选模式管线落码单点 `board_view._digit_ink_mode`(三态:亮直/深直/落牌),机检面 = `terrain_tile_sets_test` 三关呈现模式断言;目视验证面 = board_shot_probe 渲染帧取证(机检≠看得清)。验收:机检〈terrain_tile_sets_test 三关呈现模式断言全绿,board_shot_probe 渲染帧目视复核〉
|
|
||||||
- **垫牌与 UI 数据墨 = 深墨族 `#33261B` 系**(L≤0.027,§7.2)。验收:机检〈垫牌与 UI 数据墨取深墨族,L≤0.027〉
|
**三关棋盘环境八色(2026-11-07 用户看样张通过,冻结)**:槽位顺序 = 岩顶/地面/崖面/板块缝/倒角亮/倒角暗/临空墨线/受光棱。
|
||||||
|
- dungeon:`#9C8462`/`#695038`/`#403325`/`#64523A`/`#CCB288`/`#766248`/`#261E15`/`#C9AF83`。
|
||||||
|
- underdark:`#7B8894`/`#4F5A64`/`#31373D`/`#4D565F`/`#A5B4C2`/`#5C6770`/`#1D2124`/`#A1B1BF`。
|
||||||
|
- deep_underdark:`#706E6B`/`#4C4947`/`#2E2D2C`/`#484644`/`#93908D`/`#555351`/`#1B1B1A`/`#918E8B`。
|
||||||
|
换皮只换这八色与 §4.3 tint 槽;数字字芯/描边、封印黑、危险红、小人蓝、类型微光五组三关恒定。旧瓦片均值不作终值(旧 16+5 套已退役);三关互辨抽测按新材质重跑。验收:机检〈三关八色在册且与 §4.3 不变槽恒定〉
|
||||||
|
- **数字墨单色制(浮空字)**:1–8 **不做八色分色**,统一暖白字芯 `#F0E2C8` + 2px 深墨描边 `#1A140E`;**字形为唯一数值载体**,密度氛围不靠换字色。验收:目检〈1–8 数字芯色一致、非八色分色〉 ←原一/原二;P3
|
||||||
|
- **棋盘数字呈现 = 浮空描边字(全板统一,2026-11-07 定)**:字芯暖白 `#F0E2C8` + 2px 深墨描边 `#1A140E` + 1px 浮空投影;引导线 2px 双色(左深 `#1A140E`/右浅 `#E8D3AB`);不使用数字底牌、不随图类型换色、不再有亮直/深直/落牌三态。对比判据 = `max(字芯对底, 描边对底) ≥4.5:1` 且 `字芯对描边 ≥4.5:1`(最亮底岩顶 `#9C8462` 实测描边对底 5.1:1);机检面 = 浮空字几何/对比测试,目视验证面 = board_shot_probe 渲染帧。验收:机检〈四类底复合对比 ≥4.5;字高 21/间距 15/顶部预留 44 定值〉
|
||||||
|
- **UI 数据墨 = 深墨族 `#33261B` 系**(L≤0.027,§7.2);棋盘数字底牌已退役、不再使用。验收:机检〈UI 数据墨取深墨族,L≤0.027〉
|
||||||
- **八色弃用**:八色必与红/金/蓝/紫赤语义冲突,故弃。验收:方向性
|
- **八色弃用**:八色必与红/金/蓝/紫赤语义冲突,故弃。验收:方向性
|
||||||
- **封印黑 `#000000`**|封印宣告色,无色相:玩家的宣告"此格封印"。封印现行 = 无色相黑——紫色与微光蓝族(魔法微光 256° 等)色相冲突,黑色无色相天然避开 300°–345° 禁入带与全部微光色带;裸土底(`#B39A78`,印记现行承载面——封印格已揭示,见 §3.2 封印印记条)明度对纯黑对比 ≈7.8:1、未开格墙顶明度 ≈113 对纯黑对比 ≥4.4:1,纯黑实心剪影单靠明度差即成立,不依赖任何浅色细件。封印紫不再用于棋盘(色史归 git 提交史);红族棋盘侧只剩危险红;主角随身背包件为朱红矩形件(人设侧见 character-design),与棋盘封印色脱钩。验收:机检〈封印宣告色 = #000000,裸土底对其对比 ≥4.5:1〉 ←原一;P2
|
- **封印黑 `#000000`**|封印宣告色,无色相:玩家的宣告"此格封印"。封印现行 = 无色相黑——紫色与微光蓝族(魔法微光 256° 等)色相冲突,黑色无色相天然避开 300°–345° 禁入带与全部微光色带;承载面 = 本关受光棱色封印石(dungeon `#C9AF83`/underdark `#A1B1BF`/deep_underdark `#918E8B`,见 §3.2 封印印记条)对纯黑对比 9.94/9.56/6.45:1,纯黑实心剪影单靠明度差即成立,不依赖任何浅色细件;新连续地面 `#695038` 系对纯黑仅 2.35–2.98:1,故不作封印承载面。旧裸土 `#B39A78` 随旧地板瓦片退役。封印紫不再用于棋盘(色史归 git 提交史);红族棋盘侧只剩危险红;主角随身背包件为朱红矩形件(人设侧见 character-design),与棋盘封印色脱钩。验收:机检〈封印宣告色 = #000000,受光棱封印石对其对比 ≥4.5:1〉 ←原一;P2
|
||||||
- **危险红 `#A8321F`**|危险色:雷 = 被惊动的巢穴,兑现档红,更深更沉。验收:机检〈危险语义色 = #A8321F〉 ←原三;P2
|
- **危险红 `#A8321F`**|危险色:雷 = 被惊动的巢穴,兑现档红,更深更沉。验收:机检〈危险语义色 = #A8321F〉 ←原三;P2
|
||||||
- **奖励金 `#F0A828`**|已兑现的收益:GP/宝箱/蜡封,全作唯一亮金。验收:机检〈收益语义色 = #F0A828〉 ←P2;§2.3/2.4
|
- **奖励金 `#F0A828`**|已兑现的收益:GP/宝箱/蜡封,全作唯一亮金。验收:机检〈收益语义色 = #F0A828〉 ←P2;§2.3/2.4
|
||||||
- **小人蓝 `#2E86DE`**|小人主色:棋盘唯一"己方",与光标准线同族。验收:机检〈己方语义色 = #2E86DE〉 ←P1;§2.1
|
- **小人蓝 `#2E86DE`**|小人主色:棋盘唯一"己方",与光标准线同族。验收:机检〈己方语义色 = #2E86DE〉 ←P1;§2.1
|
||||||
- **数字色牌 `#F5EAD3`**|数字底具,**后备手段**:素色暖纸白直角小牌,仅复杂格底(物件纹样/变异纹带/微光叠加致直画对比不足)垫于数字正下方;素面无纹理、不随图类型/装饰变体变。验收:机检〈色牌 L≥0.70,仅复杂格底垫用〉 ←原二
|
- **数字色牌 `#F5EAD3`**|**普通数字棋盘侧退役**(2026-11-07 浮空数字定案;普通数字不再使用底牌);**封印格身份字形色牌保留**(`UiKit.DIGIT_PLATE`+`DIGIT_PLATE_EDGE`,叠于法阵之上,见 §3.2 封印印记条,2026-11-07 封印改版定案)。token 若被 UI 其他面复用按 UI 侧登记,不属棋盘数字呈现;棋盘普通数字绘制路径零色牌调用,封印格色牌为唯一例外。验收:机检〈普通数字绘制路径零色牌调用;封印格色牌在位〉 ←原二
|
||||||
- **收益金亮档 `#E0B860`(GOLD_BRIGHT)**|UI 徽标可读性亮档 token:敌顺位徽标①②③与重甲徽标对舞台底 6.47:1(GOLD_DEEP 3.26:1 不达 §7.2 带,故另立亮档);金族亮档,与奖励金 #F0A828 同族不同岗——奖励金 = 已兑现收益语义(§4.2 金条),本 token 只承载徽标可读性、不占收益语义。GOLD_DEEP/HERO_BLUE 常量本尊不动(standee 意图判据等语义岗现行使用)。验收:机检〈GOLD_BRIGHT 对舞台底 ≥4.5:1〉
|
- **收益金亮档 `#E0B860`(GOLD_BRIGHT)**|UI 徽标可读性亮档 token:敌顺位徽标①②③与重甲徽标对舞台底 6.47:1(GOLD_DEEP 3.26:1 不达 §7.2 带,故另立亮档);金族亮档,与奖励金 #F0A828 同族不同岗——奖励金 = 已兑现收益语义(§4.2 金条),本 token 只承载徽标可读性、不占收益语义。GOLD_DEEP/HERO_BLUE 常量本尊不动(standee 意图判据等语义岗现行使用)。验收:机检〈GOLD_BRIGHT 对舞台底 ≥4.5:1〉
|
||||||
- **小人蓝亮档 `#7EBAF0`(HERO_BLUE_BRIGHT)**|魔法护甲徽标对舞台底 5.88:1(HERO_BLUE 3.23:1 不达带,故另立亮档);蓝族亮档,与小人蓝 #2E86DE 同族不同岗——本 token 只承载徽标可读性,不占用「蓝只说己方」的语义。验收:机检〈HERO_BLUE_BRIGHT 对舞台底 ≥4.5:1〉
|
- **小人蓝亮档 `#7EBAF0`(HERO_BLUE_BRIGHT)**|魔法护甲徽标对舞台底 5.88:1(HERO_BLUE 3.23:1 不达带,故另立亮档);蓝族亮档,与小人蓝 #2E86DE 同族不同岗——本 token 只承载徽标可读性,不占用「蓝只说己方」的语义。验收:机检〈HERO_BLUE_BRIGHT 对舞台底 ≥4.5:1〉
|
||||||
- **图标槽柔和档 `#806A4E`(SLOT_BACKDROP_SOFT)**|BCard 图标槽底:对米色卡面 PANEL_DATA 3.69:1(深档 SLOT_BACKDROP #3E362C 8.53:1 过强、像硬贴补丁,故槽底另立柔和档),槽内白图标 5.14:1,满足 ≥3:1 图形参考线硬约束;仅 BCard 图标槽换档,B 区状态槽仍用深档 SLOT_BACKDROP。验收:机检〈槽内白图标对槽底 ≥3:1〉
|
- **图标槽柔和档 `#806A4E`(SLOT_BACKDROP_SOFT)**|BCard 图标槽底:对米色卡面 PANEL_DATA 3.69:1(深档 SLOT_BACKDROP #3E362C 8.53:1 过强、像硬贴补丁,故槽底另立柔和档),槽内白图标 5.14:1,满足 ≥3:1 图形参考线硬约束;仅 BCard 图标槽换档,B 区状态槽仍用深档 SLOT_BACKDROP。验收:机检〈槽内白图标对槽底 ≥3:1〉
|
||||||
@@ -215,7 +224,7 @@
|
|||||||
- **换色合并登记五处(用户裁,部件色落值)**|按本表「不过门即触发换色合并、禁加色绕行」执行,五处**零新增额度**(各件原拟新增候选一律不取):① 主角铲刃浅铁灰(原拟 `#A8AEB8`)→ 并入 `FOG_MEMORY_INK #C4C4C4`,**部件取值 = `#C4C4C4`**;② 主角提灯铜色(原拟 `#C08A3A`)→ 并入 `GOLD_DEEP #B07A14`,**部件取值 = `#B07A14`**;③ 食人魔酋长暖褐皮(原拟 `#B08050` / `#A97C4E`)→ 并入 `暖石 #B8A582`,**部件取值 = `#B8A582`**;④ 石君王灰皮(原拟 `#9A968C` / `#949089`,按**次级皮**口径——板甲视同体块主色、灰皮属次级皮故不受 L 0.22–0.45 约束)→ 并入 `STONE #786E62`,**部件取值 = `#786E62`**;⑤ 轻甲护甲图标木色 `#8A5A34`(深素底下 2.72:1 不过门;原拟新增木色亮档 `#C49A5E`)→ 并入 `WARM_FAINT #CDB88C`,**部件取值 = `#CDB88C`**(8.08:1)。**一色两岗代价已随裁定接受**:① 的 `#C4C4C4` 语义岗 = 迷雾记忆墨(§6.5)、② 的 `#B07A14` 属金族(§4.2 金只说收益与兑现)——两者均作角色随身件材质色用,不进信息层与语义物件岗;③④⑤ 无语义岗冲突。验收:机检〈五处部件取值点全部改指合并目标色,四枚原拟新增候选值零入板〉
|
- **换色合并登记五处(用户裁,部件色落值)**|按本表「不过门即触发换色合并、禁加色绕行」执行,五处**零新增额度**(各件原拟新增候选一律不取):① 主角铲刃浅铁灰(原拟 `#A8AEB8`)→ 并入 `FOG_MEMORY_INK #C4C4C4`,**部件取值 = `#C4C4C4`**;② 主角提灯铜色(原拟 `#C08A3A`)→ 并入 `GOLD_DEEP #B07A14`,**部件取值 = `#B07A14`**;③ 食人魔酋长暖褐皮(原拟 `#B08050` / `#A97C4E`)→ 并入 `暖石 #B8A582`,**部件取值 = `#B8A582`**;④ 石君王灰皮(原拟 `#9A968C` / `#949089`,按**次级皮**口径——板甲视同体块主色、灰皮属次级皮故不受 L 0.22–0.45 约束)→ 并入 `STONE #786E62`,**部件取值 = `#786E62`**;⑤ 轻甲护甲图标木色 `#8A5A34`(深素底下 2.72:1 不过门;原拟新增木色亮档 `#C49A5E`)→ 并入 `WARM_FAINT #CDB88C`,**部件取值 = `#CDB88C`**(8.08:1)。**一色两岗代价已随裁定接受**:① 的 `#C4C4C4` 语义岗 = 迷雾记忆墨(§6.5)、② 的 `#B07A14` 属金族(§4.2 金只说收益与兑现)——两者均作角色随身件材质色用,不进信息层与语义物件岗;③④⑤ 无语义岗冲突。验收:机检〈五处部件取值点全部改指合并目标色,四枚原拟新增候选值零入板〉
|
||||||
- **换色合并登记三处**|按本表「不过门即触发换色合并、禁加色绕行」执行,三处零新增额度:①地台顶缘受光线 `#C4AC84` 已并入 `#C9AF83`(掩尘枚 `BRICK`,与 §8.2 高墙口沿高光同枚)——源常量已删除(全仓零引用,退役断言测试串为预期例外),绘制点全部改指 `#C9AF83`;②地台描边 `#5A4C3A` 已并入 `#4C4038`(代码 `PLAZA_EDGE`,ui_kit 唯一落点)——源常量已删除,绘制点全部改指;③舞台底 `#3E342A`(代码 `STAGE_BG`)→ 并入 `#3E362C`(状态槽底)——源常量已删除(常量表零键),背景资产接管该绘制面,程序化平色缺图回退改指 `SLOT_BACKDROP`(`#3E362C`)。程序化回退绘制与已落合并值的贴图保持一致。验收:机检〈①②两枚源常量全仓零引用,绘制点全部改指合并目标色〉
|
- **换色合并登记三处**|按本表「不过门即触发换色合并、禁加色绕行」执行,三处零新增额度:①地台顶缘受光线 `#C4AC84` 已并入 `#C9AF83`(掩尘枚 `BRICK`,与 §8.2 高墙口沿高光同枚)——源常量已删除(全仓零引用,退役断言测试串为预期例外),绘制点全部改指 `#C9AF83`;②地台描边 `#5A4C3A` 已并入 `#4C4038`(代码 `PLAZA_EDGE`,ui_kit 唯一落点)——源常量已删除,绘制点全部改指;③舞台底 `#3E342A`(代码 `STAGE_BG`)→ 并入 `#3E362C`(状态槽底)——源常量已删除(常量表零键),背景资产接管该绘制面,程序化平色缺图回退改指 `SLOT_BACKDROP`(`#3E362C`)。程序化回退绘制与已落合并值的贴图保持一致。验收:机检〈①②两枚源常量全仓零引用,绘制点全部改指合并目标色〉
|
||||||
|
|
||||||
**对比硬指标(可测)**:数字可读性由**格底明度分档**承载——棋盘数字亮墨 **L≥0.75** 对**已开格底 L 0.08–0.14** ⇒ 直画对比 **≥4.5:1 恒成立**(WCAG AA,样张逐组合抽测冻结);**色牌后备**:色牌素色恒定 **L≥0.70**、牌上数字深墨 **L≤0.027** ⇒ 任意牌墨组合 ≥4.5:1(实测样例:#33261B/#F5EAD3 = 12.3:1)。未开格底槽(含全部图类型)与类型微光、已开格底之间存在**相对亮度与相对饱和关系**——禁止底槽吞没微光环、禁止底槽与已开格底同档;本节只定这层关系,阈值与准入判定由图类型色板互辨抽测的执行件承载(用法登记见 [art-pipeline-tools](art-pipeline-tools.md))。已开格底走世界底层档(见上)。物件识别不依赖格底(§5.1 轮廓通道),封印印记、金色不作识别依赖。验收:机检〈亮墨对已开格底 ≥4.5:1;未开格底对微光环与对已开格底的相对亮度关系经互辨抽测准入;任意牌墨组合 ≥4.5:1〉 ←原二;地形变异 AC-9
|
**对比硬指标(可测)**:数字可读性由**浮空描边字**承载——棋盘数字字芯暖白 `#F0E2C8` + 2px 深墨描边 `#1A140E`,判据 = `max(字芯对底, 描边对底) ≥4.5:1` 且 `字芯对描边 ≥4.5:1`;抽测底 = 地面/岩顶/崖面/板外暗底四类(最亮底岩顶实测描边对底 5.1:1);普通数字不使用数字底牌、无色牌后备(封印格身份字形色牌为唯一例外,见 §3.2 封印印记条)。岩顶/地面/崖面底槽(含全部图类型)与类型微光之间存在**相对亮度与相对饱和关系**——禁止底槽吞没微光环、禁止岩顶与地面同档;本节只定这层关系,阈值与准入判定由图类型色板互辨抽测的执行件承载(用法登记见 [art-pipeline-tools](art-pipeline-tools.md))。已开格地面走世界底层档(见上)。物件识别不依赖底色(§5.1 轮廓通道),封印印记、金色不作识别依赖。验收:机检〈四类底复合对比 ≥4.5;岩顶/地面底对微光环与对彼此的相对亮度关系经互辨抽测准入〉 ←原二;地形变异 AC-9
|
||||||
|
|
||||||
**色板增量纪律(数值状态 = 待定现用)**:全作色板硬上限 **48 色**(防色板无限膨胀的封口条款;**额度已用尽、余量 0**,后续余量以色板检查器实报为准);新色入板须同时过两道门:①§4.2 语义检查(不占语义色段/禁入带);②**与既有任一色的 RGB 三通道差禁止全部 <8/255**——即三通道里至少一通道 ≥8/255 即过门,「三通道差全部 <8」才算不过门(条文原写的「三通道差 ≥8/255」有「逐通道全过」与「禁止全灭」两种互斥读法,前者下现行色板 247 对不达标、与本节自认的「现行即执法」合规状态不能同真,故取后者;用户裁)。**额度已用尽:后续任何新增须先压缩或合并既有色**——按本节「额度不足时呈报作者」口径呈报,**压缩或合并哪几枚由作者裁,本节不代裁、不预指对象**。反例实证:#3A2E22 ↔ #362B20 三通道差均 <5,肉眼不可辨,同板共存只增噪。不过门即触发「换色合并」(把意图色并进最近既有色),**禁加色绕行**;加色义务同时登记于本表修订。**「待定现用」态释义**:数值**现行即执法**(色板检查器按此拦,§8.3)——非候选(不存在"等冻结"空窗)、非死规(后续需求引入时可变);调整走本节修订并登记,改值 = 修订不是违约。验收:机检〈色板总数 ≤48;新色入板过两道门〉
|
**色板增量纪律(数值状态 = 待定现用)**:全作色板硬上限 **48 色**(防色板无限膨胀的封口条款;**额度已用尽、余量 0**,后续余量以色板检查器实报为准);新色入板须同时过两道门:①§4.2 语义检查(不占语义色段/禁入带);②**与既有任一色的 RGB 三通道差禁止全部 <8/255**——即三通道里至少一通道 ≥8/255 即过门,「三通道差全部 <8」才算不过门(条文原写的「三通道差 ≥8/255」有「逐通道全过」与「禁止全灭」两种互斥读法,前者下现行色板 247 对不达标、与本节自认的「现行即执法」合规状态不能同真,故取后者;用户裁)。**额度已用尽:后续任何新增须先压缩或合并既有色**——按本节「额度不足时呈报作者」口径呈报,**压缩或合并哪几枚由作者裁,本节不代裁、不预指对象**。反例实证:#3A2E22 ↔ #362B20 三通道差均 <5,肉眼不可辨,同板共存只增噪。不过门即触发「换色合并」(把意图色并进最近既有色),**禁加色绕行**;加色义务同时登记于本表修订。**「待定现用」态释义**:数值**现行即执法**(色板检查器按此拦,§8.3)——非候选(不存在"等冻结"空窗)、非死规(后续需求引入时可变);调整走本节修订并登记,改值 = 修订不是违约。验收:机检〈色板总数 ≤48;新色入板过两道门〉
|
||||||
|
|
||||||
@@ -235,8 +244,8 @@
|
|||||||
- **紫赤只说 Boss 与精英** `#8F2F6A`(色相 323°):郑重来自色相独占,不来自压暗。禁:**HSV 色相 300°–345° 为信息层与语义物件禁入带**——UI、粒子、类型微光、语义物件及图类型色板信息面禁止落入;环境层(背景/装饰)可入但限低饱和,高饱和紫赤仍 Boss 独占。验收:机检〈信息层与语义物件色值色相不落 300°–345°;高饱和紫赤仅 Boss 战〉 ←§2.6;原三
|
- **紫赤只说 Boss 与精英** `#8F2F6A`(色相 323°):郑重来自色相独占,不来自压暗。禁:**HSV 色相 300°–345° 为信息层与语义物件禁入带**——UI、粒子、类型微光、语义物件及图类型色板信息面禁止落入;环境层(背景/装饰)可入但限低饱和,高饱和紫赤仍 Boss 独占。验收:机检〈信息层与语义物件色值色相不落 300°–345°;高饱和紫赤仅 Boss 战〉 ←§2.6;原三
|
||||||
- **绿只说自然生机**(环境植被;恢复类状态若有则用绿——待增益状态定夺)。**例外:类型微光治疗组**(见下条「类型微光色带」)。禁(信息层域):绿禁止承载逻辑状态(微光色带除外),禁止与红构成唯一区分对。验收:目检〈信息层域绿色仅微光治疗组;绿红不构成唯一区分对〉 ←原三
|
- **绿只说自然生机**(环境植被;恢复类状态若有则用绿——待增益状态定夺)。**例外:类型微光治疗组**(见下条「类型微光色带」)。禁(信息层域):绿禁止承载逻辑状态(微光色带除外),禁止与红构成唯一区分对。验收:目检〈信息层域绿色仅微光治疗组;绿红不构成唯一区分对〉 ←原三
|
||||||
- **类型微光色带 = 格面类型先验专用逻辑色带**(未开格类型预读的色彩通道;概念定义、可见范围与生命周期见《HUD框架》「未开格类型微光」节):未开格类型微光的信息色彩按以下五组执行——**通用增益组**(attack/defense/weaken/action/gp 五族)芥末黄 `#D6C13A`(≈52°)、**治疗组**(heal)黄绿 `#5CB83A`(≈104°)、**穿刺组**(pierce)青 `#2E9E9E`(≈180°)、**魔法组**(magic)紫罗兰 `#7B5BD6`(≈256°)、**群伤组**(blast)绯红 `#FF2D55`(≈349°,刻意避开危险红色相段与 300°–345° 禁入带)。验收:机检〈类型微光五组色值与本表一致〉
|
- **类型微光色带 = 格面类型先验专用逻辑色带**(未开格类型预读的色彩通道;概念定义、可见范围与生命周期见《HUD框架》「未开格类型微光」节):未开格类型微光的信息色彩按以下五组执行——**通用增益组**(attack/defense/weaken/action/gp 五族)芥末黄 `#D6C13A`(≈52°)、**治疗组**(heal)黄绿 `#5CB83A`(≈104°)、**穿刺组**(pierce)青 `#2E9E9E`(≈180°)、**魔法组**(magic)紫罗兰 `#7B5BD6`(≈256°)、**群伤组**(blast)绯红 `#FF2D55`(≈349°,刻意避开危险红色相段与 300°–345° 禁入带)。验收:机检〈类型微光五组色值与本表一致〉
|
||||||
- **微光呈现参数**:内缘带状泛光 α170、带宽 cell÷8(亮度不压格底明度档,§2 微光例外);组间互辨以抽检核对。验收:机检〈微光泛光 α=170、带宽=cell÷8〉
|
- **微光呈现参数**:内缘带状泛光 α170、带宽 cell÷8(亮度不压岩顶/地面明度档,§2 微光例外);组间互辨以抽检核对。验收:机检〈微光泛光 α=170、带宽=cell÷8〉
|
||||||
- **微光分域纪律与双码**:微光色相只承载类型先验,不迁移复用为物件/阵营/UI 语义色;微光 = **色相+明度双码**——明度梯度承载分组(组间五色相、组内不细分:通用增益组五族同色相、不承诺组内分型;§2 微光明度例外:梯度禁止压破格底明度档与三态分类);色弱玩家的类型主通道 = 微光双码(组粒度:组间五色相 + 各组一档明度互辨)。验收:目检〈五组微光两两互辨,明度梯度不压破格底明度档与三态分类〉 ←§4.6.3
|
- **微光分域纪律与双码**:微光色相只承载类型先验,不迁移复用为物件/阵营/UI 语义色;微光 = **色相+明度双码**——明度梯度承载分组(组间五色相、组内不细分:通用增益组五族同色相、不承诺组内分型;§2 微光明度例外:梯度禁止压破岩顶/地面明度档与三态分类);色弱玩家的类型主通道 = 微光双码(组粒度:组间五色相 + 各组一档明度互辨)。验收:目检〈五组微光两两互辨,明度梯度不压破岩顶/地面明度档与三态分类〉 ←§4.6.3
|
||||||
- **金/红兼作极性色相槽(§4.6)**:极性(概念定义与符号矩阵见《地图战斗资源》极性提案)的视觉取色只在这两族间——有利兑付 = 金族,有害兑付 = 红族,不新增语义色。验收:目检〈极性视觉取色仅金/红两族〉 ←§4.6;原二
|
- **金/红兼作极性色相槽(§4.6)**:极性(概念定义与符号矩阵见《地图战斗资源》极性提案)的视觉取色只在这两族间——有利兑付 = 金族,有害兑付 = 红族,不新增语义色。验收:目检〈极性视觉取色仅金/红两族〉 ←§4.6;原二
|
||||||
|
|
||||||
### 4.3 图类型色板换皮规则(board_type)
|
### 4.3 图类型色板换皮规则(board_type)
|
||||||
@@ -248,7 +257,7 @@
|
|||||||
- `wall_ambient` 墙雾氛围 tint:可带主题色相,L≥0.30。验收:机检〈wall_ambient tint L≥0.30〉
|
- `wall_ambient` 墙雾氛围 tint:可带主题色相,L≥0.30。验收:机检〈wall_ambient tint L≥0.30〉
|
||||||
- `variant_tint` 变异纹带染槽:只改色相不改纹形(纹带形按轴两分,见 §3.2 变异格形状通道;种类 = 地形变异六类型已定稿)。验收:目检〈同纹带形跨图类型仅色相不同〉
|
- `variant_tint` 变异纹带染槽:只改色相不改纹形(纹带形按轴两分,见 §3.2 变异格形状通道;种类 = 地形变异六类型已定稿)。验收:目检〈同纹带形跨图类型仅色相不同〉
|
||||||
|
|
||||||
**不变槽**:棋盘数字墨亮族三档、数字色牌(后备件)、封印黑、危险红、奖励金、小人蓝、紫赤、绿、类型微光五组——**信息与语义层全图类型恒定**;换挡动色相饱和,格底两档明度关系(墙亮/空间暗)全图类型恒定(§2 明度分层)。新增色板须重跑 §1.4 格子样张(灰度可辨+对比抽测)。验收:机检〈换皮前后不变槽色值逐项一致〉 ←原三/原二;地形变异 AC-9
|
**不变槽**:棋盘浮空数字字芯/描边、封印黑、危险红、奖励金、小人蓝、紫赤、绿、类型微光五组——**信息与语义层全图类型恒定**;换挡动色相饱和,岩顶/地面两档明度关系(岩顶亮/地面暗)全图类型恒定(§2 明度分层)。新增色板须重跑 §1.4 格子样张(灰度可辨+对比抽测)。验收:机检〈换皮前后不变槽色值逐项一致〉 ←原三/原二;地形变异 AC-9
|
||||||
|
|
||||||
### 4.4 UI 色板(方向指导,细则迁 §7.2)
|
### 4.4 UI 色板(方向指导,细则迁 §7.2)
|
||||||
|
|
||||||
@@ -260,7 +269,7 @@
|
|||||||
|
|
||||||
1. 已开 vs 未开:§3.2 完整/碎裂形承载,无需另加。验收:目检〈色弱模拟下两态以完整度可辨〉
|
1. 已开 vs 未开:§3.2 完整/碎裂形承载,无需另加。验收:目检〈色弱模拟下两态以完整度可辨〉
|
||||||
2. 已开 vs 变异格:纹带形状通道,灰度截图可辨,无需另加。验收:目检〈灰度截图下变异格可辨〉
|
2. 已开 vs 变异格:纹带形状通道,灰度截图可辨,无需另加。验收:目检〈灰度截图下变异格可辨〉
|
||||||
3. 封印印记 vs 巢穴(危险格):印记形物件对砖面巢穴纹,无需另加。验收:目检〈色弱模拟下印记与巢穴纹可辨〉
|
3. 封印印记 vs 巢穴(危险格):印记形物件对格面巢穴纹,无需另加。验收:目检〈色弱模拟下印记与巢穴纹可辨〉
|
||||||
4. 奖励金 vs 危险红(色弱下皆偏褐):§3.1 道具点两类剪影 + §3.4 满圆对刺缺 + 金粒运动,无需另加。验收:目检〈色弱模拟下奖励金与危险红可辨〉
|
4. 奖励金 vs 危险红(色弱下皆偏褐):§3.1 道具点两类剪影 + §3.4 满圆对刺缺 + 金粒运动,无需另加。验收:目检〈色弱模拟下奖励金与危险红可辨〉
|
||||||
5. Boss 紫赤 vs 其他敌:§5.1 形状独占,无需另加。验收:目检〈色弱模拟下 Boss 可辨〉
|
5. Boss 紫赤 vs 其他敌:§5.1 形状独占,无需另加。验收:目检〈色弱模拟下 Boss 可辨〉
|
||||||
6. 小人蓝 vs 青墨数字:明度悬殊 + 小人轮廓与底盘,无需另加。验收:目检〈色弱模拟下小人与数字可辨〉
|
6. 小人蓝 vs 青墨数字:明度悬殊 + 小人轮廓与底盘,无需另加。验收:目检〈色弱模拟下小人与数字可辨〉
|
||||||
@@ -403,10 +412,10 @@
|
|||||||
|
|
||||||
### 6.3 三关图类型色板候选(board_type 换挡方向)
|
### 6.3 三关图类型色板候选(board_type 换挡方向)
|
||||||
|
|
||||||
- **模板与不变槽**:换皮只换 §4.3 四槽(`tile_closed`/`tile_open`/`wall_ambient`/`variant_tint`),信息与语义层全图类型恒定——本节的三关两槽终值**已冻结**。**冻结口径(本节不抄色值字面量)**:各关 `tile_closed` 终值=该关在役墙瓦片三块底型件(素砖/裂纹/碎石斑)顶面受光档的实测最亮值,`wall_ambient` 取同关同槽值(两槽同值;同属 §4.1 分层②场景环境子板,零新增色值、不占 48 额度);实测值与准入判定只在执行件里算,执行件用法登记见 [art-pipeline-tools](art-pipeline-tools.md)。**冻结凭据**=「三关色相 × 五组类型微光」互辨抽测闭合(机检 17 项 0 红+目检四条全过;抽测样图与 2026-11-05 出图件同哈希,目检面未重跑)+ §1.4 格子样张重跑机检 30/31 绿(唯一红灯=改前/改后对拍一件,因在途素材区无改前基线件、属素材区环境坑不属色板回归,沿革查 git 提交史)——砖面形态与色板维持冻结。验收:机检〈三关行两槽终值与互辨抽测执行件的实测读数同值(该件三行铺底代表值判定全过),且本节三关行不含色值字面量〉
|
- **模板与不变槽**:换皮只换 §4.3 四槽(`tile_closed`/`tile_open`/`wall_ambient`/`variant_tint`),信息与语义层全图类型恒定——本节的三关两槽终值**已冻结**。**冻结口径(本节不抄色值字面量)**:各关 `tile_closed` 终值=该关**岩体顶面基色**(dungeon 基准档 `#9C8462`;underdark/deep 取 §4.1「三关棋盘环境八色」的岩顶/地面值),`wall_ambient` 取同关同槽值(两槽同值;同属 §4.1 分层②场景环境子板,零新增色值、不占 48 额度);实测值与准入判定只在执行件里算,执行件用法登记见 [art-pipeline-tools](art-pipeline-tools.md)。**2026-11-07 棋盘地形换代**:旧「在役墙瓦片三块底型件实测最亮值」口径随 16+5 瓦片套退役失效;三关 `tile_closed`/`tile_open` 终值 = §4.1「三关棋盘环境八色」的岩顶/地面色(2026-11-07 用户看样张通过,冻结),旧瓦片均值不作终值;三关互辨抽测按新材质同批重跑(旧冻结凭据沿革查 git 提交史)。验收:机检〈三关行两槽终值与互辨抽测执行件的实测读数同值(该件三行铺底代表值判定全过),且本节三关行不含色值字面量〉
|
||||||
- **三关背景变体**:§6.1 的三张背景取本节三关方向作为岩体形态、剪影语言与色族差异(dungeon 暖石棕+地精巢穴支洞/木栈道/木桩围栏;underdark 冷蓝灰+卓尔巨柱/石笋/蛛网/螺旋塔剪影/巨菇/石桥;deep_underdark 灰黑+灰矮人石笋城郭/棱角石厅/矿道口/烟囱塔);背景不复用 `wall_ambient` tint(该槽作用于棋盘/世界),背景色值归战斗屏场景环境子板。验收:目检〈三关背景可辨为不同洞窟,非同一图换色〉
|
- **三关背景变体**:§6.1 的三张背景取本节三关方向作为岩体形态、剪影语言与色族差异(dungeon 暖石棕+地精巢穴支洞/木栈道/木桩围栏;underdark 冷蓝灰+卓尔巨柱/石笋/蛛网/螺旋塔剪影/巨菇/石桥;deep_underdark 灰黑+灰矮人石笋城郭/棱角石厅/矿道口/烟囱塔);背景不复用 `wall_ambient` tint(该槽作用于棋盘/世界),背景色值归战斗屏场景环境子板。验收:目检〈三关背景可辨为不同洞窟,非同一图换色〉
|
||||||
- **深度轴叙事**(§2.7 下探过渡):色相层进预告「更深更险」,明度档不动——
|
- **深度轴叙事**(§2.7 下探过渡):色相层进预告「更深更险」,明度档不动——
|
||||||
- **dungeon 地精洞窟**(第一关):现行掩尘系暖石棕(`#C9AF83` 基)即基准档,`wall_ambient` 暖棕;
|
- **dungeon 地精洞窟**(第一关):现行岩体系暖石棕(岩顶 `#9C8462` 基)即基准档,`wall_ambient` 暖棕;
|
||||||
- **underdark 幽暗地域**(第二关;方向:**冷调幽暗**):主调**灰白蓝**候选(低饱和蓝灰域,`tile_closed`),少量紫黑倾向点缀——紫系取紫罗兰域(≈256°)候选,禁入带 300°–345° 不变;`wall_ambient` 冷蓝灰;
|
- **underdark 幽暗地域**(第二关;方向:**冷调幽暗**):主调**灰白蓝**候选(低饱和蓝灰域,`tile_closed`),少量紫黑倾向点缀——紫系取紫罗兰域(≈256°)候选,禁入带 300°–345° 不变;`wall_ambient` 冷蓝灰;
|
||||||
- **deep_underdark 灰矮人矿城**(第三关;方向:**灰黑主调 + 矿脉金属色点缀**候选,守 §4.1 明度地板 L≥0.30):矿脉点缀走金属质感族(冷银/铜灰候选)——「金属色」以材质感承载,奖励金亮金仍禁上格底(§4.2),不占用收益语义金;`wall_ambient` 铁灰。
|
- **deep_underdark 灰矮人矿城**(第三关;方向:**灰黑主调 + 矿脉金属色点缀**候选,守 §4.1 明度地板 L≥0.30):矿脉点缀走金属质感族(冷银/铜灰候选)——「金属色」以材质感承载,奖励金亮金仍禁上格底(§4.2),不占用收益语义金;`wall_ambient` 铁灰。
|
||||||
- **共同纪律**:三套候选色相均须与五组类型微光色带(§4.2)抽测互辨(格底与微光同在未开格面,邻近色相有吞没风险);避 300°–345° 禁入带;L≥0.30、饱和 ≤0.55(§4.1 硬指标)。
|
- **共同纪律**:三套候选色相均须与五组类型微光色带(§4.2)抽测互辨(格底与微光同在未开格面,邻近色相有吞没风险);避 300°–345° 禁入带;L≥0.30、饱和 ≤0.55(§4.1 硬指标)。
|
||||||
@@ -422,9 +431,9 @@
|
|||||||
|
|
||||||
- **菱形灯光区(遮罩几何)**:灯光区 = 以角色所在格为中心、**曼哈顿距离 ≤ LIGHT_RADIUS** 的格集,区内照常渲染。LIGHT_RADIUS 走表值/常量参数化,**基准 8**——现行事实源「灯光区起步半径=微光环 8 格」的落码取值(半径数值沿微光「周围 8 格」的 8 起步,实测后可调)。**两圈分立注**:类型微光作用圈 = 英雄贴身 8 邻格(与可挖域同圈,现行事实源《HUD框架》「未开格类型微光」节),**不随灯光区扩**(权威文档配套裁决)——灯光区只裁可见性,微光锚仍是可挖域,两圈几何分立、半径参数互不读写。提灯插值位:FOG_LANTERN_BONUS = **+2**(flat 整数档,权威文档配套裁决;落码常量名 `board_view.gd FOG_LANTERN_BONUS`),**已接效果入库**(载体=秘宝·同调位 fog_lantern「魔法提灯」行,组合根每战装配链显式重算接线;呈现画法零改动——本节只管"怎么画",机制现行事实源仍归《HUD框架》)。边界随角色格位逐格重算,无半径插值动画。←现行事实源;§2 光照氛围允许域
|
- **菱形灯光区(遮罩几何)**:灯光区 = 以角色所在格为中心、**曼哈顿距离 ≤ LIGHT_RADIUS** 的格集,区内照常渲染。LIGHT_RADIUS 走表值/常量参数化,**基准 8**——现行事实源「灯光区起步半径=微光环 8 格」的落码取值(半径数值沿微光「周围 8 格」的 8 起步,实测后可调)。**两圈分立注**:类型微光作用圈 = 英雄贴身 8 邻格(与可挖域同圈,现行事实源《HUD框架》「未开格类型微光」节),**不随灯光区扩**(权威文档配套裁决)——灯光区只裁可见性,微光锚仍是可挖域,两圈几何分立、半径参数互不读写。提灯插值位:FOG_LANTERN_BONUS = **+2**(flat 整数档,权威文档配套裁决;落码常量名 `board_view.gd FOG_LANTERN_BONUS`),**已接效果入库**(载体=秘宝·同调位 fog_lantern「魔法提灯」行,组合根每战装配链显式重算接线;呈现画法零改动——本节只管"怎么画",机制现行事实源仍归《HUD框架》)。边界随角色格位逐格重算,无半径插值动画。←现行事实源;§2 光照氛围允许域
|
||||||
- **区外未开格:全黑不渲染(不透明档,照抄现行事实源)**:现行事实源原文「区外**未开格=全黑不渲染**」——不透明纯黑(L=0),**非高遮蔽半透档**。理由注记(为何不用高遮蔽档):①三档信息阶梯干净——未开格不可见=零信息、记忆格=弱信息、活格=全信息,叠读不打架;②高遮蔽档下砖面纹理隐约残留,与「类型微光=未开格唯一信息通道」(§4.2/§4.6.3)冲突——纹理残影泄格面观感;③现行事实源验收线「区外未开格不可见」须二值态才能逐格断言。←现行事实源;§4.2
|
- **区外未开格:全黑不渲染(不透明档,照抄现行事实源)**:现行事实源原文「区外**未开格=全黑不渲染**」——不透明纯黑(L=0),**非高遮蔽半透档**。理由注记(为何不用高遮蔽档):①三档信息阶梯干净——未开格不可见=零信息、记忆格=弱信息、活格=全信息,叠读不打架;②高遮蔽档下砖面纹理隐约残留,与「类型微光=未开格唯一信息通道」(§4.2/§4.6.3)冲突——纹理残影泄格面观感;③现行事实源验收线「区外未开格不可见」须二值态才能逐格断言。←现行事实源;§4.2
|
||||||
- **区外已开格:暗淡记忆态(灰显可读档)**:画法 = **地板纹理原样 + 灰罩压顶**——纹理直画后 `FOG_MEMORY_PLATE #3A3A3A` α0.66 灰罩盖顶,素材零改动(原「程序化素色记忆板平涂」已弃用);格内元素灰阶随罩隐现:**记忆墨 #C4C4C4(中性灰 L≈0.55)**。双峰板色牌格在记忆态**退牌归板**——牌面并入记忆态、数字以记忆墨直画。**封印印记不在记忆态面**:印记只落在未开格,区外未开格全黑——印记随格隐没、灯光区移回复显(纯呈现,封印数据零影响,现行事实源的显式推论)。←HUD框架 可访问性基线;§4.1;§3.2
|
- **区外已开格:暗淡记忆态(灰显可读档)**:画法 = **地面材质原样 + 灰罩压顶**——地面直画后 `FOG_MEMORY_PLATE #3A3A3A` α0.66 灰罩盖顶,素材零改动(原「程序化素色记忆板平涂」已弃用);格内元素灰阶随罩隐现:**记忆墨 #C4C4C4(中性灰 L≈0.55)**。记忆态数字以记忆墨直画、不使用数字底牌(浮空层随格隐没)。**封印印记与封印格身份色牌不在记忆态面**:封印格已揭示,区外记忆态灰罩下印记与色牌随格隐没、灯光区移回复显(纯呈现,封印数据零影响,现行事实源的显式推论)。←HUD框架 可访问性基线;§4.1;§3.2
|
||||||
- **记忆态可读性判据**:数字对合成底**归一后(真实渲染面)三关 ≥4.5:1**(WCAG 硬指标;合成底 L1 #4C4038/L2 #3F4147/L3 #3E4048;行值与素材随动,测点=ui_contrast_probe 迷雾段)。**归一注**:装载亮度归一是现行生产路径(`board_view._normalize_floor_luma`),原图均值≠渲染面,复算须落归一后底。可辨性自查(三通道,随样张/实机自检):①对全黑未开格——合成底 #3E3731(L≈0.036)对 L0,实机目检常光档可分(暗房档一并抽检);②对灯光区内活态已开格——主判据=数字墨灰度差(记忆墨 L0.55 对亮墨三档 L≥0.75 / 色牌 #F5EAD3 L≈0.83,灰度 ΔL≥0.20)+ 色相通道(记忆态近中性灰,对活态暖底暖墨);③格态三形在记忆态保持灰度可辨——形通道经纹理+灰罩形态不变,沿 §1.4 验收 2 同源判据。验收:机检〈ui_contrast_probe 迷雾段记忆墨对比 ≥4.5:1〉←§1.4
|
- **记忆态可读性判据**:数字对合成底**归一后(真实渲染面)三关 ≥4.5:1**(WCAG 硬指标;合成底取 §4.1 三关地面色叠加 `FOG_MEMORY_PLATE` α0.66;行值以实现批 `ui_contrast_probe` 实测登记,测点=该探针迷雾段)。旧瓦片均值派生随 `terrain_*` 退役,不再作为测点基准。可辨性自查(三通道,随样张/实机自检):①对全黑未开格——合成底 #3E3731(L≈0.036)对 L0,实机目检常光档可分(暗房档一并抽检);②对灯光区内活态已开格——主判据=数字墨灰度差(记忆墨 L0.55 对活态字芯 #F0E2C8 L≈0.77,灰度 ΔL≥0.20)+ 色相通道(记忆态近中性灰,对活态暖底暖字芯);③格态三形在记忆态保持灰度可辨——形通道经材质+灰罩形态不变,沿 §1.4 验收 2 同源判据。验收:机检〈ui_contrast_probe 迷雾段记忆墨对比 ≥4.5:1〉←§1.4
|
||||||
- **迷雾过渡边:硬边(逐格二值)**:灯光区边界 = **整格二值切换**(区内全渲染 / 区外全黑或记忆态),**不做渐变过渡带、不做半透明晕边**。理由:①边界是信息边界不是氛围晕——渐变中间态 =「看得见但看不清」,破数字可读硬指标与记忆态明度档;②现行事实源验收断言(边界格呈态、两态逐位一致)须格级二值可判;③与砖面整格表达(§3.2 高墙瓦片体系)、ITB 格内信息分层气质同轴。无动画,减动效无涉。←现行事实源;§1.2 原则一;§3.2
|
- **迷雾过渡边:硬边(逐格二值)**:灯光区边界 = **整格二值切换**(区内全渲染 / 区外全黑或记忆态),**不做渐变过渡带、不做半透明晕边**。理由:①边界是信息边界不是氛围晕——渐变中间态 =「看得见但看不清」,破数字可读硬指标与记忆态明度档;②现行事实源验收断言(边界格呈态、两态逐位一致)须格级二值可判;③与棋盘地形体系(§3.2)的整格表达、ITB 格内信息分层气质同轴。无动画,减动效无涉。←现行事实源;§1.2 原则一;§3.2
|
||||||
- **与结算期去饱和的叠加共存**:结算期去饱和偏移(settlement_fx_view,同族先例)与迷雾调制叠加规则 = **记忆态为终态档**——区外已开格在结算期保持记忆态档、**不再叠加**结算去饱和(灰显已含去饱和语义,二次调制无信息增量且明度不可控);灯光区内格照常吃结算去饱和;全黑格两态无差。叠加态随实施批共存校验 + 探针断言(provisional,实机目检可代拍)。验收:机检〈叠加态下记忆态灰显不被二次调制〉
|
- **与结算期去饱和的叠加共存**:结算期去饱和偏移(settlement_fx_view,同族先例)与迷雾调制叠加规则 = **记忆态为终态档**——区外已开格在结算期保持记忆态档、**不再叠加**结算去饱和(灰显已含去饱和语义,二次调制无信息增量且明度不可控);灯光区内格照常吃结算去饱和;全黑格两态无差。叠加态随实施批共存校验 + 探针断言(provisional,实机目检可代拍)。验收:机检〈叠加态下记忆态灰显不被二次调制〉
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -435,7 +444,7 @@
|
|||||||
|
|
||||||
### 7.1 形状语法细则(自 §3.3 迁入)
|
### 7.1 形状语法细则(自 §3.3 迁入)
|
||||||
|
|
||||||
**半拟物:容器穿戏服,数据素面。**面板=石板圆角矩形(与地砖同圆角率,全 UI 恒定),按钮=凸圆角的"可按的砖"(按压态=下沉一档,运动手段 §2),仪式性确认(胜利等)=圆形蜡封(呼应 §2.4);数字框、准线、进度条一律直角细线、无纹理;**数字色牌 = 直角小素牌**(后备件)——宽随数字位、无纹理无装饰,仅复杂格底兜底时垫于数字正下方一层(色值 §4.1),属"须精确的信息"侧、走直角律。判据:圆角=可触摸的物件,直角=须精确的信息。与参考分界:取 ITB 的信息分层,弃其冷硬斜切 HUD;取 Moonlighter 的木石亲和,不做全拟物。验收:目检〈面板圆角/按钮凸圆角/数据直角三态可辨〉
|
**半拟物:容器穿戏服,数据素面。**面板=石板圆角矩形(与地砖同圆角率,全 UI 恒定),按钮=凸圆角的"可按的砖"(按压态=下沉一档,运动手段 §2),仪式性确认(胜利等)=圆形蜡封(呼应 §2.4);数字框、准线、进度条一律直角细线、无纹理;**棋盘数字已改浮空描边字(§3.2),UI 不再有数字色牌形态**;其余数据件属"须精确的信息"侧、走直角律。判据:圆角=可触摸的物件,直角=须精确的信息。与参考分界:取 ITB 的信息分层,弃其冷硬斜切 HUD;取 Moonlighter 的木石亲和,不做全拟物。验收:目检〈面板圆角/按钮凸圆角/数据直角三态可辨〉
|
||||||
|
|
||||||
- **极性强调冗余**(§4.5⑦):UI 红/金强调对必须补图标+文案冗余;破坏性确认与常规确认禁止同位(位置通道)。验收:目检〈红/金强调位有图标+文案,破坏性确认独立位〉
|
- **极性强调冗余**(§4.5⑦):UI 红/金强调对必须补图标+文案冗余;破坏性确认与常规确认禁止同位(位置通道)。验收:目检〈红/金强调位有图标+文案,破坏性确认独立位〉
|
||||||
- **圆角率单点注记**:容器/按钮圆角值收敛为全站唯一 `RADIUS_OBJECT = 5`(ui_kit 单点;面板与按钮同圆角率即满足本节「全 UI 恒定圆角率」);数据框/数字牌/AP 点阵/准线/血条维持 0 直角;**例外三件保留**=标题屏底座椭圆 17/结算金印 200(圆形蜡封)/状态脉冲环 100(圆形)。验收:机检〈ui_kit 圆角取值仅 RADIUS_OBJECT 与例外三件〉
|
- **圆角率单点注记**:容器/按钮圆角值收敛为全站唯一 `RADIUS_OBJECT = 5`(ui_kit 单点;面板与按钮同圆角率即满足本节「全 UI 恒定圆角率」);数据框/数字牌/AP 点阵/准线/血条维持 0 直角;**例外三件保留**=标题屏底座椭圆 17/结算金印 200(圆形蜡封)/状态脉冲环 100(圆形)。验收:机检〈ui_kit 圆角取值仅 RADIUS_OBJECT 与例外三件〉
|
||||||
@@ -461,9 +470,9 @@
|
|||||||
### 7.4 字体与字号
|
### 7.4 字体与字号
|
||||||
|
|
||||||
- **字体**:全局一套像素字,单套即终稿——缝合像素字体 Fusion Pixel(OFL,已接入 `game/assets/fonts/ui_font_fusion_pixel_zh_hans.ttf`),拉丁字符与数字沿用其自带拉丁字形,不另设拉丁专件(现状即终稿;旧拉丁候选 Kenney Fonts 已弃;生产工单=清单 §3.6);墨色走主墨系(§7.2);换字体 = 全局决策。验收:机检〈主题字体指向 Fusion Pixel 件〉
|
- **字体**:全局一套像素字,单套即终稿——缝合像素字体 Fusion Pixel(OFL,已接入 `game/assets/fonts/ui_font_fusion_pixel_zh_hans.ttf`),拉丁字符与数字沿用其自带拉丁字形,不另设拉丁专件(现状即终稿;旧拉丁候选 Kenney Fonts 已弃;生产工单=清单 §3.6);墨色走主墨系(§7.2);换字体 = 全局决策。验收:机检〈主题字体指向 Fusion Pixel 件〉
|
||||||
- **字号**:像素字体**整数倍缩放,禁非整数缩放**(像素模糊);下限(1280×800 基座):棋盘数字 ≥18px(公式 = `max(18, ceil(格边长 × 0.5))`不变)、**正文/明细 ≥16px、tooltip ≥14px**(1280×800 低于 1080p 基准,同字号实际更小)。验收:机检〈静态文字位点字号 ≥ 档位表值〉
|
- **字号**:像素字体**整数倍缩放,禁非整数缩放**(像素模糊);下限(1280×800 基座):棋盘浮空数字字高 **21px 固定**(7px 像素字 ×3,不随格边缩放;见 §3.2 浮空数字)、**正文/明细 ≥16px、tooltip ≥14px**(1280×800 低于 1080p 基准,同字号实际更小)。验收:机检〈静态文字位点字号 ≥ 档位表值〉
|
||||||
- **字号档位表(六档)**:全站 UI 文字字号只经 `UiKit.FS_*` 单点取值,裸数字字号弃用——`FS_CAPTION 12`/`FS_HINT 14`/`FS_BODY 16`/`FS_SUB 18`/`FS_TITLE 24`/`FS_H1 34`。旧实测档按就近归档收编(10/11/12→CAPTION、13/14→HINT、15/16→BODY、17/18/20→SUB、21/22/24/26→TITLE、32/40→H1;静态位点全归档,数据驱动动态字号位点除外);棋盘数字公式 `maxi(18, ceil(格边长×0.5))` 与站桩血数 11px(条带内读数豁免)不入表。注:六档相邻比 12→14→16→18 三段 <1.25×,系裁决值优先于字重纪律的档差参考线,该参考线对新层级设计仍有效。验收:机检〈全站无裸数字字号,位点走 FS_*〉
|
- **字号档位表(六档)**:全站 UI 文字字号只经 `UiKit.FS_*` 单点取值,裸数字字号弃用——`FS_CAPTION 12`/`FS_HINT 14`/`FS_BODY 16`/`FS_SUB 18`/`FS_TITLE 24`/`FS_H1 34`。旧实测档按就近归档收编(10/11/12→CAPTION、13/14→HINT、15/16→BODY、17/18/20→SUB、21/22/24/26→TITLE、32/40→H1;静态位点全归档,数据驱动动态字号位点除外);棋盘浮空数字 21px 定值(非 UI 文字档)与站桩血数 11px(条带内读数豁免)不入表。注:六档相邻比 12→14→16→18 三段 <1.25×,系裁决值优先于字重纪律的档差参考线,该参考线对新层级设计仍有效。验收:机检〈全站无裸数字字号,位点走 FS_*〉
|
||||||
- **小字号豁免条款(合并单条不开两口子)**:下款两类**豁免于本节下限**——①**条带内读数**:压在窄条带(血条/进度条等 ≤12px 高带)内居中的数字,受条带高度物理约束,维持 11px 下限,且必须按 §7.2 垫素色牌后计对比(实装=B 区站桩血数 11px 压 HP_BAR_BACK 牌 14.3:1);②**装饰性 overline/caption**:不承载须精确读取的信息、仅作分区标题或氛围小字者,可至 **12px**。**豁免逐处清单(撤除史归 git 提交史,余清单如下)**:条带内读数=B 区站桩血数一处;装饰 caption 档(FS_CAPTION)在册面=棋盘底操作提示条/营地柜台说明文与结构位预留注记/图例 RAP 词条说明/设置警示文两处/关卡地图底栏组标(生命/属性/特性)与分隔系/站桩消散提示/B 区状态槽微计数(×N●○)/bcard 脚注/RAP 反馈行/刷新余量徽标——清单外 11-13px 文字一律按正文/tooltip 下限提档,新增 caption 位须同批增补本清单。**站桩顺位徽标 ①②③ 不增列本清单**:既不在①条带内读数在册面、也不在②装饰 caption 在册面,按本条纪律取 `FS_HINT` 14 归六档;为它单独入册等于开第二口子,与「合并单条不开两口子」的立条理由正面相撞。**站桩名字行同理**:名字行(敌人名与护甲文字)承载须精确读取的信息,不在①②两在册面,按本条纪律取 `FS_HINT` 14 归六档、不增列②在册面,名字行几何(素底牌矩形、文字基线、宽度测量)随档位联动。②装饰 caption 在册面逐处维持不变。验收:机检〈豁免文字位均可对上本清单,清单外无 <14px;站桩顺位徽标与站桩名字行绘制点取 UiKit.FS_HINT,且②在册面不含该两位〉
|
- **小字号豁免条款(合并单条不开两口子)**:下款两类**豁免于本节下限**——①**条带内读数**:压在窄条带(血条/进度条等 ≤12px 高带)内居中的数字,受条带高度物理约束,维持 11px 下限,且必须按 §7.2 垫素色牌后计对比(实装=B 区站桩血数 11px 压 HP_BAR_BACK 牌 14.3:1);②**装饰性 overline/caption**:不承载须精确读取的信息、仅作分区标题或氛围小字者,可至 **12px**。**豁免逐处清单(撤除史归 git 提交史,余清单如下)**:条带内读数=B 区站桩血数一处;装饰 caption 档(FS_CAPTION)在册面=营地柜台说明文与结构位预留注记/图例 RAP 词条说明/设置警示文两处/关卡地图底栏组标(生命/属性/特性)与分隔系/站桩消散提示/B 区状态槽微计数(×N●○)/bcard 脚注/RAP 反馈行/刷新余量徽标——清单外 11-13px 文字一律按正文/tooltip 下限提档,新增 caption 位须同批增补本清单。**站桩顺位徽标 ①②③ 不增列本清单**:既不在①条带内读数在册面、也不在②装饰 caption 在册面,按本条纪律取 `FS_HINT` 14 归六档;为它单独入册等于开第二口子,与「合并单条不开两口子」的立条理由正面相撞。**站桩名字行同理**:名字行(敌人名与护甲文字)承载须精确读取的信息,不在①②两在册面,按本条纪律取 `FS_HINT` 14 归六档、不增列②在册面,名字行几何(素底牌矩形、文字基线、宽度测量)随档位联动。②装饰 caption 在册面逐处维持不变。验收:机检〈豁免文字位均可对上本清单,清单外无 <14px;站桩顺位徽标与站桩名字行绘制点取 UiKit.FS_HINT,且②在册面不含该两位〉
|
||||||
- **字重纪律(字重两档不启用)**:层级手段为两件——**字号档差(相邻层级 ≥1.25×)+ 墨色深浅**;全局单字重,不上第二个字重(**重开钩子已注销**——整屏样张复核确认:屏内各级文字全部能归进本节六档字号,顺位徽标与站桩名字行两处按本节纪律提档即可,屏内实测对比全部达标(暖白对舞台底 9.49:1、GOLD_BRIGHT 6.47:1、血数 14.3:1),**未实证标题层级不足**,维持单字重,不另立条目);数字禁描边/阴影伪加粗不变(字形为唯一数值载体,§4.1 同源纪律)。验收:机检〈主题仅注册单字重〉/目检〈屏内标题与正文层级仅靠字号档差与墨色深浅两件即可分辨,无一处需要第二字重才读得清〉
|
- **字重纪律(字重两档不启用)**:层级手段为两件——**字号档差(相邻层级 ≥1.25×)+ 墨色深浅**;全局单字重,不上第二个字重(**重开钩子已注销**——整屏样张复核确认:屏内各级文字全部能归进本节六档字号,顺位徽标与站桩名字行两处按本节纪律提档即可,屏内实测对比全部达标(暖白对舞台底 9.49:1、GOLD_BRIGHT 6.47:1、血数 14.3:1),**未实证标题层级不足**,维持单字重,不另立条目);数字禁描边/阴影伪加粗不变(字形为唯一数值载体,§4.1 同源纪律)。验收:机检〈主题仅注册单字重〉/目检〈屏内标题与正文层级仅靠字号档差与墨色深浅两件即可分辨,无一处需要第二字重才读得清〉
|
||||||
|
|
||||||
### 7.5 营地界面
|
### 7.5 营地界面
|
||||||
@@ -510,12 +519,12 @@
|
|||||||
### 8.1 分辨率档位与格边长
|
### 8.1 分辨率档位与格边长
|
||||||
|
|
||||||
- **两档定案**:1280×800(基座)+ 1920×1080,窗口不可调;后续调整走修订。验收:机检〈工程分辨率配置与两档一致〉
|
- **两档定案**:1280×800(基座)+ 1920×1080,窗口不可调;后续调整走修订。验收:机检〈工程分辨率配置与两档一致〉
|
||||||
- **格边长取值**:按档位与板形计算——固定档位下格子量增加则格边长相应变小;公式、单位与现行算例的唯一出处 = [battle.md](../ux/battle.md)「棋盘格尺寸公式」,本节不复述数值。资产侧锁两条比例:**瓦片整格铺满**(32×32 源随格边长缩放,允许非整数倍——瓦片不适用 §8.2 甲类整数倍纪律)、**棋盘小人显示占位 ≤ 0.75× 格边长**。(1920 档已裁决全局等比缩放)验收:机检〈瓦片显示尺寸随格边长、小人占位 ≤0.75×〉
|
- **格边长取值**:按档位与板形计算——固定档位下格子量增加则格边长相应变小;公式、单位与现行算例的唯一出处 = [battle.md](../ux/battle.md)「棋盘格尺寸公式」,本节不复述数值。资产侧锁两条比例:**棋盘地形不铺逐格瓦片**(岩顶/地面/崖面材质按整板矩形与格边程序化绘制,允许连续缩放——地形材质不适用 §8.2 甲类整数倍纪律)、**棋盘小人显示占位 ≤ 0.75× 格边长**。(1920 档已裁决全局等比缩放)验收:机检〈地形材质随格边/整板绘制、小人占位 ≤0.75×〉
|
||||||
|
|
||||||
### 8.2 像素基准与画布
|
### 8.2 像素基准与画布
|
||||||
|
|
||||||
- **缩放纪律(硬规则,按资产两类分级;不做个案豁免)**:
|
- **缩放纪律(硬规则,按资产两类分级;不做个案豁免)**:
|
||||||
- **甲类·文本与语义件**(数字、图标、格面纹样):维持严格整数倍缩放硬规则——可读性与语义精确性优先,**禁非整数缩放不变**。封印印记不属本类(参数化绘制件,见本条末「封印印记参数表」)。砖面 tile 亦不属本类,随格边长整格铺满(见 §8.1)。验收:机检〈甲类件显示尺寸为源整数倍〉
|
- **甲类·文本与语义件**(数字、图标、格面纹样):维持严格整数倍缩放硬规则——可读性与语义精确性优先,**禁非整数缩放不变**。封印印记不属本类(参数化绘制件,见本条末「封印印记参数表」)。棋盘地形材质亦不属本类,按整板连续绘制(见 §8.1)。验收:机检〈甲类件显示尺寸为源整数倍〉
|
||||||
- **全局纹理过滤与平滑渐变件例外**:`project.godot` `default_texture_filter=0`(Nearest)全局——像素风 UI 皮(九宫格/主题石纹样式盒/滑轨抓子/勾选/箭头图标)翻 Nearest=意图面;**显式 LINEAR 豁免清单(有意例外)= vignette / gradient_base / beams 三件程序化平滑渐变件**——保平滑连续 alpha 的程序化氛围件(§7.6 三已裁);新增平滑件须同批入册本清单,禁静默挂 LINEAR。翻转面枚举与冒烟断言(6 条)在闸。验收:机检〈过滤面枚举与 LINEAR 清单逐项一致〉
|
- **全局纹理过滤与平滑渐变件例外**:`project.godot` `default_texture_filter=0`(Nearest)全局——像素风 UI 皮(九宫格/主题石纹样式盒/滑轨抓子/勾选/箭头图标)翻 Nearest=意图面;**显式 LINEAR 豁免清单(有意例外)= vignette / gradient_base / beams 三件程序化平滑渐变件**——保平滑连续 alpha 的程序化氛围件(§7.6 三已裁);新增平滑件须同批入册本清单,禁静默挂 LINEAR。翻转面枚举与冒烟断言(6 条)在闸。验收:机检〈过滤面枚举与 LINEAR 清单逐项一致〉
|
||||||
- **显示档登记例外(64 源 0.5×,待素材批消除)**:柜台四枚 `icon_forge/workshop/atlas/keystone`(64×64 源)显示档统一 **32px = 0.5×**;状态九枚(32×32 源)mini(站桩)档 **16px = 0.5×**。两处均系「显示尺寸侧唯一可调、素材一字节禁改」红线下的人工检整数半倍档,登记为**待消除例外**——素材设计出 32px 源后回归 1×。常规档显示一律 1×(状态九枚 32px、手绘十枚 20px/40px 双档、BCard 图标槽 40px=2×、**护甲类型图标三枚 24px=1×**——源 24×24,归甲类整数倍纪律)。验收:机检〈显示档与登记表一致〉
|
- **显示档登记例外(64 源 0.5×,待素材批消除)**:柜台四枚 `icon_forge/workshop/atlas/keystone`(64×64 源)显示档统一 **32px = 0.5×**;状态九枚(32×32 源)mini(站桩)档 **16px = 0.5×**。两处均系「显示尺寸侧唯一可调、素材一字节禁改」红线下的人工检整数半倍档,登记为**待消除例外**——素材设计出 32px 源后回归 1×。常规档显示一律 1×(状态九枚 32px、手绘十枚 20px/40px 双档、BCard 图标槽 40px=2×、**护甲类型图标三枚 24px=1×**——源 24×24,归甲类整数倍纪律)。验收:机检〈显示档与登记表一致〉
|
||||||
- **乙类·角色与单位精灵**(有机形体、非文字):允许运行时非整数倍缩放(NEAREST 过滤不变),容忍轻度像素宽窄不均;判据 = 实机目检,可感不适即回整数档。乙类免逐案豁免。验收:目检〈立绘无可感拉花〉
|
- **乙类·角色与单位精灵**(有机形体、非文字):允许运行时非整数倍缩放(NEAREST 过滤不变),容忍轻度像素宽窄不均;判据 = 实机目检,可感不适即回整数档。乙类免逐案豁免。验收:目检〈立绘无可感拉花〉
|
||||||
@@ -523,10 +532,10 @@
|
|||||||
- **1920×1080 档策略**:全局等比(stretch=canvas_items+aspect **keep**)——16:10 设计在 16:9 窗口=等比 1.35×+左右黑边各 ~96px,构图与 1280×800 基准档完全一致;甲类 1.35 非整数缩放例外注记:轻度宽窄不均系本档位接受代价(像素游戏 shipped 常态),实机目检可感不适→回乙案(1920 独立 2× 基准)重议;乙类同前款。验收:目检〈1920 档构图与 1280 档一致〉
|
- **1920×1080 档策略**:全局等比(stretch=canvas_items+aspect **keep**)——16:10 设计在 16:9 窗口=等比 1.35×+左右黑边各 ~96px,构图与 1280×800 基准档完全一致;甲类 1.35 非整数缩放例外注记:轻度宽窄不均系本档位接受代价(像素游戏 shipped 常态),实机目检可感不适→回乙案(1920 独立 2× 基准)重议;乙类同前款。验收:目检〈1920 档构图与 1280 档一致〉
|
||||||
- **画布基准(暂定值)**:
|
- **画布基准(暂定值)**:
|
||||||
- **主角人设原图 = 48×72**(1× 基准,暂定;与站姿降采样可读性验证一致);
|
- **主角人设原图 = 48×72**(1× 基准,暂定;与站姿降采样可读性验证一致);
|
||||||
- **棋盘小人 = 32×32 二头身派生版(暂定,允许更小)**——独立资产,自人设定稿压缩派生(character-design §5.4),不吞数字位、占位 ≤ 0.75× 格边长;板越小占比摩擦越大(13×13 / 14×14 更小,算例见 [battle.md](../ux/battle.md)「棋盘格尺寸公式」),32px 源档的去留已定终值 = **保留 32×32 源档**(沿「独立小源档」路线;N=12 板下显示占位上限 27px = 0.84 倍,正落本节乙类非整数缩放许可范围,**连豁免都不用再办**),待决标注注销;
|
- **棋盘小人 = 32×32 二头身派生版(暂定,允许更小)**——独立资产,自人设定稿压缩派生(character-design §5.4),不吞数字位、占位 ≤ 0.75× 格边长;板越小占比摩擦越大(13×13 / 14×14 更小,算例见 [battle.md](../ux/battle.md)「棋盘格尺寸公式」),32px 源档的去留已定终值 = **保留 32×32 源档**(沿「独立小源档」路线;N=12 板 38px 档下显示占位上限 = 0.75×38 ≈ 28px,正落本节乙类非整数缩放许可范围,**连豁免都不用再办**),待决标注注销;
|
||||||
- **封印印记参数表(绘制件,非贴图件)**:形与画法见 §3.2。定值——**环外径 = 0.82 × 格边**(26 格 21.3px/46 格 37.7px);**环壁厚 = 0.11 × 环径**(≈2.3/4.1px);**十字臂宽 = 0.156 × 环径**(≈3.3/5.9px);**环外光圈宽 = 0.09 × 格边**(≈2.3/4.1px),向外衰减指数 1.6、峰值 alpha 0.50;圆心 = 格心。色 = 封印黑单色(光圈只改 alpha)。本件随格边连续缩放,**不适用甲类整数倍纪律**(非贴图件,见上条清单)。参数单点 = `ui_kit.gd` 六枚常量 `SEAL_RING_FRAC`/`SEAL_WALL_FRAC`/`SEAL_ARM_FRAC`/`SEAL_HALO_ALPHA`/`SEAL_HALO_GAMMA`/`SEAL_HALO_FRAC`,本节为条款侧对照值。改值须本节与 §3.2 同批修订。验收:机检〈ui_kit 六常量与本表逐值一致〉+目检〈渲染帧量环径落 82%±1px、光圈不越格边〉
|
- **封印印记参数表(绘制件,非贴图件)**:形与画法见 §3.2。定值——**环外径 = 0.82 × 格边**(26 格 21.3px/46 格 37.7px);**环壁厚 = 0.11 × 环径**(≈2.3/4.1px);**十字臂宽 = 0.156 × 环径**(≈3.3/5.9px);**环外光圈宽 = 0.09 × 格边**(≈2.3/4.1px),向外衰减指数 1.6、峰值 alpha 0.50;**圆心 = 格心**(已揭示地面;承载面 = 本关受光棱色封印石,见 §3.2;不再随岩顶偏移)。色 = 封印黑单色(光圈只改 alpha)。本件随格边连续缩放,**不适用甲类整数倍纪律**(非贴图件,见上条清单)。参数单点 = `ui_kit.gd` 六枚常量 `SEAL_RING_FRAC`/`SEAL_WALL_FRAC`/`SEAL_ARM_FRAC`/`SEAL_HALO_ALPHA`/`SEAL_HALO_GAMMA`/`SEAL_HALO_FRAC`,本节为条款侧对照值。改值须本节与 §3.2 同批修订。验收:机检〈ui_kit 六常量与本表逐值一致〉+目检〈渲染帧量环径落 82%±1px、圆心落格心、光圈不越格边〉
|
||||||
- **站桩立绘显示档 = 三档绝对高**:小型 96 / 中型 144 / 大型 188。逐件归档——小:地精、巨蜘蛛、灰矮人;中:主角、钩爪恐魔、熊地精;大:食人魔酋长、蛛化卓尔、灰矮人石君王。**源 = 原稿像素网格**(八敌 `pixel-1`、主角手修 2× 三态稿),紧裁后原样入包,**禁再降采样**;显示倍率 = 档高 ÷ 源高,NEAREST,宽度随源图比例(高定宽随不变,见上条)。定档依据 = 生物体型(体量=物种体型,非强度线性映射,见 character-design §5.2),**顺序由显示档承载、不由源高承载**。已接受项:中型三件与地精/巨蜘蛛的源高(92/94/123/90/81)低于档高,属放大显示;食人魔酋长显示宽 157 超桩盒 150。验收:机检〈standee_asset_check 逐件显示档高与归档一致、纵横倍率恒等〉+目检〈同屏体量顺序成立〉
|
- **站桩立绘显示档 = 三档绝对高**:小型 96 / 中型 144 / 大型 188。逐件归档——小:地精、巨蜘蛛、灰矮人;中:主角、钩爪恐魔、熊地精;大:食人魔酋长、蛛化卓尔、灰矮人石君王。**源 = 原稿像素网格**(八敌 `pixel-1`、主角手修 2× 三态稿),紧裁后原样入包,**禁再降采样**;显示倍率 = 档高 ÷ 源高,NEAREST,宽度随源图比例(高定宽随不变,见上条)。定档依据 = 生物体型(体量=物种体型,非强度线性映射,见 character-design §5.2),**顺序由显示档承载、不由源高承载**。已接受项:中型三件与地精/巨蜘蛛的源高(92/94/123/90/81)低于档高,属放大显示;食人魔酋长显示宽 157 超桩盒 150。验收:机检〈standee_asset_check 逐件显示档高与归档一致、纵横倍率恒等〉+目检〈同屏体量顺序成立〉
|
||||||
- **站桩立绘排版**:① 区高 B 区 ≈1/3 屏 / C 区 ≈2/3 屏,**扫雷盘原尺寸不缩、格子不变**(区高事实源 = 布局表 `battle_layout.tres`;压缩由 C 区面板空档吸收);② 站桩内部重排——立绘双脚落石台上缘(弃盒内居中)、**血条+状态/名字行落底排**(立绘→血条→状态 顺序,全场血条对齐一线;血条嵌石板位、台缘线留作地面线、落影保留接地感),状态空时该行退化为名字行;③ 大体档(显示 >150px 级:食人魔酋长/蛛化卓尔/灰矮人石君王)**允许向上溢出盒顶 N px**(N 按实测尺寸算定,**与背景/光柱无关**——现行溢出区恰为临时光柱氛围层〔§6.1 方向稿四柱,x 基准 110/900/1055/1210@1280,`battle_stage_view.gd:47-56`〕,正式舞台背景插画(三关变体)到位后该层直接退役(背景不画光柱),**溢出判定不随之变更**;横向禁止压到顶部中央轮次·阶段指示,溢出上限用真图复算 x 区间定),血条仍落底(落底排的第二个收益=头部探顶不带出血条);意图徽标悬浮头顶上方(探顶档压胸);④ 「血条悬浮头顶+立绘盒内居中」排式已弃——盒顶固定 y 与盒内居中在高盒下拉开血条-立绘空洞。验收:目检〈血条一线对齐、大体档溢出不压轮次指示〉
|
- **站桩立绘排版**:① 区高 B 区 ≈1/3 屏 / C 区 ≈2/3 屏,**扫雷盘不从 D 区裁尺寸**(区高事实源 = 布局表 `battle_layout.tres`;2026-11-07 顶栏搬两侧后 D 区全高归棋盘,格边按 battle.md 公式现算——基座档 12×12=38px、14×14=32px,不再受 AP 条高度挤压);② 站桩内部重排——立绘双脚落石台上缘(弃盒内居中)、**血条+状态/名字行落底排**(立绘→血条→状态 顺序,全场血条对齐一线;血条嵌石板位、台缘线留作地面线、落影保留接地感),状态空时该行退化为名字行;③ 大体档(显示 >150px 级:食人魔酋长/蛛化卓尔/灰矮人石君王)**允许向上溢出盒顶 N px**(N 按实测尺寸算定,**与背景/光柱无关**——现行溢出区恰为临时光柱氛围层〔§6.1 方向稿四柱,x 基准 110/900/1055/1210@1280,`battle_stage_view.gd:47-56`〕,正式舞台背景插画(三关变体)到位后该层直接退役(背景不画光柱),**溢出判定不随之变更**;横向禁止压到顶部中央轮次·阶段指示,溢出上限用真图复算 x 区间定),血条仍落底(落底排的第二个收益=头部探顶不带出血条);意图徽标悬浮头顶上方(探顶档压胸);④ 「血条悬浮头顶+立绘盒内居中」排式已弃——盒顶固定 y 与盒内居中在高盒下拉开血条-立绘空洞。验收:目检〈血条一线对齐、大体档溢出不压轮次指示〉
|
||||||
- **站桩石板地台件**:`scene_stage_plaza.png`,源 48×12、九宫格横向拉伸、顶缘受光线 2px 不随拉伸变形;跨三关恒定、不吃 §4.3 `wall_ambient` tint(独立理由见 §6.1 近景地台独立件条)。验收:机检〈地台件按九宫格拉伸后顶缘受光线宽度恒为 2px〉
|
- **站桩石板地台件**:`scene_stage_plaza.png`,源 48×12、九宫格横向拉伸、顶缘受光线 2px 不随拉伸变形;跨三关恒定、不吃 §4.3 `wall_ambient` tint(独立理由见 §6.1 近景地台独立件条)。验收:机检〈地台件按九宫格拉伸后顶缘受光线宽度恒为 2px〉
|
||||||
|
|
||||||
### 8.3 导出格式与命名规范
|
### 8.3 导出格式与命名规范
|
||||||
@@ -547,14 +556,14 @@
|
|||||||
|
|
||||||
- **结构件完整性**:格面立体感(高墙顶面/坡缘/角件/周界轮廓)只能来自**素材本体绘制的结构件拼装**(样例=Necesse 式缘件:专属底色+手绘细节+暗轮廓线的独立贴图);禁止以调色、渐变、明暗滤镜、跨格投影等生成手段伪造素材中不存在的结构。样稿暴露缺件时,正确动作=停下报告缺口与「换素材/自产缺件」选项,由用户裁决后执行。验收:目检〈立体感逐件来自素材本体,无滤镜伪造〉
|
- **结构件完整性**:格面立体感(高墙顶面/坡缘/角件/周界轮廓)只能来自**素材本体绘制的结构件拼装**(样例=Necesse 式缘件:专属底色+手绘细节+暗轮廓线的独立贴图);禁止以调色、渐变、明暗滤镜、跨格投影等生成手段伪造素材中不存在的结构。样稿暴露缺件时,正确动作=停下报告缺口与「换素材/自产缺件」选项,由用户裁决后执行。验收:目检〈立体感逐件来自素材本体,无滤镜伪造〉
|
||||||
- **参考核验**:宣称「参考 X 游戏」前,必须取得并实际查看 X 的截图证据(像素级放大核验其实现方式),证据存 `artwork/mockups/` 或 `design/art/references/`;仅凭文字资料、记忆或宏观印象作出「X 是这样做」的断言无效。验收:目检〈参考结论有截图证据在库〉
|
- **参考核验**:宣称「参考 X 游戏」前,必须取得并实际查看 X 的截图证据(像素级放大核验其实现方式),证据存 `artwork/mockups/` 或 `design/art/references/`;仅凭文字资料、记忆或宏观印象作出「X 是这样做」的断言无效。验收:目检〈参考结论有截图证据在库〉
|
||||||
- **图底分离**:已开地面的明度须低于未开格墙体,由素材选型承载(选更暗的地板砖),不靠渲染压暗实现。验收:机检〈已开格底明度低于墙顶面〉
|
- **图底分离**:已开地面的明度须低于未开格岩体,由材质选型承载(地面基色 `#695038` 低于岩顶 `#9C8462`),不靠渲染压暗实现。验收:机检〈已开地面明度低于岩顶面〉
|
||||||
- **生产分工**:格面地形类素材=**材质归模型、结构归程序**——AI 生图模型只出无缝填充纹理(无边框/无亮边/均匀光照/方形);一切结构件(缘件/轮廓/立面/角件/收头)一律程序化绘制或手修,因为 autotile 任意拼接的边界像素约束超出 2D 生图模型能力(实证:生图 5×5 瓦片表每枚砖自带啃咬边框与宽亮带,提示词无法根除)。**镜像规则**:东西对称结构件只许水平翻转(flip_h)复用、**禁旋转**——北受光下东西侧缘光照对称,镜像无损真;旋转会把北受光转到东边。验收:目检〈瓦片表无自带边框/亮带;对称件仅 flip_h〉
|
- **生产分工**:格面地形类素材=**材质归模型、结构归程序**——AI 生图模型只出无缝填充纹理(无边框/无亮边/均匀光照/方形);一切结构件(缘件/轮廓/立面/角件/收头)一律程序化绘制或手修,因为 autotile 任意拼接的边界像素约束超出 2D 生图模型能力(实证:生图 5×5 瓦片表每枚砖自带啃咬边框与宽亮带,提示词无法根除)。**镜像规则**:东西对称结构件只许水平翻转(flip_h)复用、**禁旋转**——北受光下东西侧缘光照对称,镜像无损真;旋转会把北受光转到东边。验收:目检〈瓦片表无自带边框/亮带;对称件仅 flip_h〉
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. 参考与反参考(References & Anti-References)
|
## 9. 参考与反参考(References & Anti-References)
|
||||||
|
|
||||||
> **白话**:正面参考 = 向谁抄什么;反面参考 = 避什么。两者同等效力——方案违反反面条款时,禁止以「参考了某游戏」辩护。参考图库存于 `design/art/references/`(点名池三款×2 张,与头注点名池一一对应)。
|
> **白话**:正面参考 = 向谁抄什么;反面参考 = 避什么。两者同等效力——方案违反反面条款时,禁止以「参考了某游戏」辩护。参考图库存于 `design/art/references/`(原三款×2 张在库;2026-11-07 新增参考图证待补,不阻塞画法条款)。
|
||||||
|
|
||||||
### 9.1 正面参考(点名池,用户审阅选定)
|
### 9.1 正面参考(点名池,用户审阅选定)
|
||||||
|
|
||||||
@@ -563,6 +572,10 @@
|
|||||||
| **Into the Breach** | 格内信息分层、攻击预告上格范式、战棋地块质感骨架(§1.2 原则一;§3.2) | 冷暗军事色调、压暗信息板、斜切 HUD(原则二;§3.3) |
|
| **Into the Breach** | 格内信息分层、攻击预告上格范式、战棋地块质感骨架(§1.2 原则一;§3.2) | 冷暗军事色调、压暗信息板、斜切 HUD(原则二;§3.3) |
|
||||||
| **Moonlighter** | 暖质地砖与砖缝质感、亲和冒险者气质、木石暖色道具(原则二/原则三);**光照层次与明度纵深**(亮地板/暗深渊/发光体三档,§2 明度分层) | 全拟物倾向(§3.3 半拟物边界);Darkest 式压暗(§9.2 反面基准) |
|
| **Moonlighter** | 暖质地砖与砖缝质感、亲和冒险者气质、木石暖色道具(原则二/原则三);**光照层次与明度纵深**(亮地板/暗深渊/发光体三档,§2 明度分层) | 全拟物倾向(§3.3 半拟物边界);Darkest 式压暗(§9.2 反面基准) |
|
||||||
| **Peglin** | 明快全年龄洞穴色彩、胖体量亲和怪(§5.1 普通怪原型) | 色块依赖——先读轮廓后读颜色(§5.1) |
|
| **Peglin** | 明快全年龄洞穴色彩、胖体量亲和怪(§5.1 普通怪原型) | 色块依赖——先读轮廓后读颜色(§5.1) |
|
||||||
|
| **Stardew Valley** | 连续地面与大地块地形的平铺控制、暖色可读性(§3.2 地形材质与装饰) | 农务 UI、角色比例、柔光/渐变 |
|
||||||
|
| **Minish Cap** | 圆润岩体轮廓、紧凑像素可读性(§3.2 岩体受光与崖面) | GBA 分辨率限制、过小角色比例 |
|
||||||
|
| **Necesse**(补充) | 大块地形按连续面画、不按逐格物件画(§3.2 术语与定义) | 生存制作 UI |
|
||||||
|
| **Link's Awakening 原版/DX 2D**(补充) | 抬升台面与南向崖面的 2D 观感(§3.2 投影与搭接) | 2019 重制 3D 立体模型版(风格不合,排除) |
|
||||||
|
|
||||||
- **反面条款已成文**(§9.2);反面参考**图证**待本作素材生成后增补。验收:方向性
|
- **反面条款已成文**(§9.2);反面参考**图证**待本作素材生成后增补。验收:方向性
|
||||||
|
|
||||||
@@ -571,9 +584,9 @@
|
|||||||
| 反面参考 | 违反条款 | 立法理由 |
|
| 反面参考 | 违反条款 | 立法理由 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| **Darkest Dungeon** 式压暗 | §9.2 反面基准(风格取向记录,非禁令——压暗属普通设计决策,逐案走样张与目检) | 失败重开,世界无光暗记忆——明亮基调下不以整屏变暗作常态表达 |
|
| **Darkest Dungeon** 式压暗 | §9.2 反面基准(风格取向记录,非禁令——压暗属普通设计决策,逐案走样张与目检) | 失败重开,世界无光暗记忆——明亮基调下不以整屏变暗作常态表达 |
|
||||||
| **传统扫雷白牌/贴纸式数字承载** | §1.2 原则二(明度分档为骨) | 数字由格底明度分档承载、直画入世界;色牌仅复杂格底后备——满屏白牌=电子表格观感,非游戏画面 |
|
| **传统扫雷白牌/贴纸式数字承载** | §1.2 原则二(明度分档为骨);§3.2 浮空数字 | 数字由浮空描边字承载、画在世界之上;不使用数字底牌——满屏白牌=电子表格观感,非游戏画面 |
|
||||||
| **Enter the Gungeon** 式粒子与色相爆炸 | §3.4 焦点预算;§4.2 色相纪律 | 信息层禁止被特效与杂色吞没,特效入画先过焦点预算 |
|
| **Enter the Gungeon** 式粒子与色相爆炸 | §3.4 焦点预算;§4.2 色相纪律 | 信息层禁止被特效与杂色吞没,特效入画先过焦点预算 |
|
||||||
| **Hades** 式特效密度 | §2.2 兑现爽感的上限 | 爽感靠逐行因果归因,不靠满屏特效;承载元素以 §2.2 清单为界 |
|
| **Hades** 式特效密度 | §2.2 兑现爽感的上限 | 爽感靠逐行因果归因,不靠满屏特效;承载元素以 §2.2 清单为界 |
|
||||||
| **传统扫雷 1–8 八色分色** | §4.1 数字墨三档 | 八色必撞红/金/蓝/紫赤语义色段;数字只走墨族三档色温,字形为唯一数值载体 |
|
| **传统扫雷 1–8 八色分色** | §4.1 数字墨单色制 | 八色必撞红/金/蓝/紫赤语义色段;数字只走单色浮空字芯,字形为唯一数值载体 |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
| `character/` | 角色棋盘帧 + B 区立绘 | character_hero_idle/walk(棋盘 32×32 朝左基准)、character_hero_portrait(B 区立绘 46×48)+ character_enemy_<键> 八敌 |
|
| `character/` | 角色棋盘帧 + B 区立绘 | character_hero_idle/walk(棋盘 32×32 朝左基准)、character_hero_portrait(B 区立绘 46×48)+ character_enemy_<键> 八敌 |
|
||||||
| `fx/` | 特效帧 | shovel_swing_f0/f1/f2(挥铲三帧,握把锚 (18,12)) |
|
| `fx/` | 特效帧 | shovel_swing_f0/f1/f2(挥铲三帧,握把锚 (18,12)) |
|
||||||
| `scene/` | **场景图**(背景层 + 地面层 + 围墙层 + 可点物件层;营地场景图首批) | 营地 10 张:`scene_camp_bg`(背景层,不透明全幅=天空+远山+地面+门洞小路)+ `scene_camp_wall`(围墙层,透明底、门洞留透明缺口)+ `scene_camp_gate / forge / chest / notebook / dummy / board / campfire`(七个可点物件)+ `scene_camp_tent`(承载件,不可点)+ `scene_stage_bg_dungeon` / `scene_stage_bg_underdark` / `scene_stage_bg_deep_underdark`(B 区战斗舞台背景层三关变体,✦ 插画级,顶部空区+远景天然洞壁,不画近景地面,按 board_type 选图)+ `scene_stage_ground`(B 区连续近景地面层,✦ 插画级,泥土/砂砾/碎石+顶缘分隔带,跨关恒定)+ `scene_stage_plaza`(B 区角色脚下小石台,48×12 九宫格件)——B 区战斗舞台背景与连续地面已入包;营地 10 张已入包(`scene_camp_*` 十件在役、`TEX_CAMP_*` 十键消费;用户游戏内终审如有置换,按本行键名同径替换) |
|
| `scene/` | **场景图**(背景层 + 地面层 + 围墙层 + 可点物件层;营地场景图首批) | 营地 10 张:`scene_camp_bg`(背景层,不透明全幅=天空+远山+地面+门洞小路)+ `scene_camp_wall`(围墙层,透明底、门洞留透明缺口)+ `scene_camp_gate / forge / chest / notebook / dummy / board / campfire`(七个可点物件)+ `scene_camp_tent`(承载件,不可点)+ `scene_stage_bg_dungeon` / `scene_stage_bg_underdark` / `scene_stage_bg_deep_underdark`(B 区战斗舞台背景层三关变体,✦ 插画级,顶部空区+远景天然洞壁,不画近景地面,按 board_type 选图)+ `scene_stage_ground`(B 区连续近景地面层,✦ 插画级,泥土/砂砾/碎石+顶缘分隔带,跨关恒定)+ `scene_stage_plaza`(B 区角色脚下小石台,48×12 九宫格件)——B 区战斗舞台背景与连续地面已入包;营地 10 张已入包(`scene_camp_*` 十件在役、`TEX_CAMP_*` 十键消费;用户游戏内终审如有置换,按本行键名同径替换) |
|
||||||
| `board/` | 砖面(三关换皮);seal_mark.png 现役用途=战末金蜡封徽记专用(战末弹层消费——棋盘侧贴图绘制路径已退役) | terrain_floor_<board_type>_<n>.png(三关地面系)、seal_mark.png(战末蜡封专用) |
|
| `board/` | 棋盘地形材质(2026-11-07 重做后改程序化绘制,无入包地形 PNG);seal_mark.png 现役用途=战末金蜡封徽记专用(战末弹层消费——棋盘侧贴图绘制路径已退役) | seal_mark.png(战末蜡封专用);旧 `terrain_*` 63 件(16 墙瓦片+5 地面变体×三关)随重做退役删除 |
|
||||||
|
|
||||||
## 4. 坐标/朝向等工程侧约定备查
|
## 4. 坐标/朝向等工程侧约定备查
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 营地场景 · 分层生图提示词卡 v1.9
|
# 营地场景 · 分层生图提示词卡 v1.10
|
||||||
|
|
||||||
> **性质**:营地场景图(1280×800,一张可点击场景图 + 十张分层:背景层 1 + 围墙层 1 + 八个物件层)的出图执行侧文件。**场景级资产,与角色级 [art-prompts](art-prompts.md) 并列,两文件互不覆盖**。
|
> **性质**:营地场景图(1280×800,一张可点击场景图 + 十张分层:背景层 1 + 围墙层 1 + 八个物件层)的出图执行侧文件。**场景级资产,与角色级 [art-prompts](art-prompts.md) 并列,两文件互不覆盖**。
|
||||||
> **依据**:色彩与氛围 = [art-bible](art-bible.md) §2.8 与 §6.2(营地的暖由晒白的地面、木色与烛光件承载;远景走正午强日照、天空淡晴蓝,与冒险中的地下城形成对比;本卡不复述色值);坐标与层序 = 本卡 §2.3(运行期单一事实源 = `game/data/tables/camp_scene_layout.tres`);物件命名与消费链 = [asset-path-map](asset-path-map.md);画法与交付形态 = [art-bible](art-bible.md) §6.2。画法与用色冲突时以 art-bible 为准。
|
> **依据**:色彩与氛围 = [art-bible](art-bible.md) §2.8 与 §6.2(营地的暖由晒白的地面、木色与烛光件承载;远景走正午强日照、天空淡晴蓝,与冒险中的地下城形成对比;本卡不复述色值);坐标与层序 = 本卡 §2.3(运行期单一事实源 = `game/data/tables/camp_scene_layout.tres`);物件命名与消费链 = [asset-path-map](asset-path-map.md);画法与交付形态 = [art-bible](art-bible.md) §6.2。画法与用色冲突时以 art-bible 为准。
|
||||||
@@ -248,3 +248,4 @@ A campfire made of a ring of grey stones around crossed stacked logs with a warm
|
|||||||
10. **描边颜色**:奶油色追认——去底脚本「奶油描边膨胀 3px 当屏障」的技术前提随现值锁定(§1 注记同源);改深灰褐须换去底方案全量重出,不裁
|
10. **描边颜色**:奶油色追认——去底脚本「奶油描边膨胀 3px 当屏障」的技术前提随现值锁定(§1 注记同源);改深灰褐须换去底方案全量重出,不裁
|
||||||
11. **营地环境子板色值**:不前置拍板——量化场景实际用色后按 art-bible §4.1 两道门登记(语义检查+RGB 三通道差 ≥8/255),本卡仍不复述色值
|
11. **营地环境子板色值**:不前置拍板——量化场景实际用色后按 art-bible §4.1 两道门登记(语义检查+RGB 三通道差 ≥8/255),本卡仍不复述色值
|
||||||
12. **围墙显示几何与墙脚入土(2026-11-07 用户裁)**:围墙显示矩形 `(0, 220, 1280, 200)`(顶 y220、高 200、底锚 y420);大门 240×138 尺寸不变、底压墙底 → `(520, 282)`;告示板 130×121 尺寸不变、随墙顶下移 17px → `(845, 241)`;墙脚按 1–7px 低频起伏裁透明缺口透出地面纹理(入土线,判据归 art-bible §6.2)
|
12. **围墙显示几何与墙脚入土(2026-11-07 用户裁)**:围墙显示矩形 `(0, 220, 1280, 200)`(顶 y220、高 200、底锚 y420);大门 240×138 尺寸不变、底压墙底 → `(520, 282)`;告示板 130×121 尺寸不变、随墙顶下移 17px → `(845, 241)`;墙脚按 1–7px 低频起伏裁透明缺口透出地面纹理(入土线,判据归 art-bible §6.2)
|
||||||
|
13. **其余六件落位(2026-11-05 用户裁;2026-11-08 复核补录)**:dummy `(340, 474, 120, 180)`/命中同矩形;forge `(40, 421, 240, 193)`/命中 `(40, 374, 240, 240)`;tent `(982, 335, 251, 170)`;chest `(1097, 654, 106, 90)`/命中 `(1085, 654, 130, 90)`;notebook `(870, 515, 100, 66)`/命中 `(870, 501, 100, 80)`;campfire `(560, 525, 160, 149)`/命中 `(560, 594, 160, 80)`。行内四元组=texture_rect `(x, y, w, h)`,「命中」=hotspot;运行期唯一事实源仍是 `game/data/tables/camp_scene_layout.tres`。
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
1. **worktree 车道(一切面)**:每回合先建独立 worktree(建区粒度=回合,会话单区细则见第 5 条):`git worktree add ../g-plan2-<任务名> -b <任务分支>`;建区后立刻跑 `tools/setup_worktree_userdir.sh`——给该区独立 Godot user 目录(测试夹具、试玩日志、截图产物不与其他区共用;主区不生成,真实档保持原位)。所有改动与提交都在 worktree 内自由进行——commit 点零钩子检查(`tools/hooks/pre-commit` 已删除)。豁免面仅 `.zcode/`(钩子与配置)与 `.qoder/`(本机 harness 配置)允许主工作区直改——两份实测均不入 git(走 worktree 反而带不进去,改动只对本机生效)
|
1. **worktree 车道(一切面)**:每回合先建独立 worktree(建区粒度=回合,会话单区细则见第 5 条):`git worktree add ../g-plan2-<任务名> -b <任务分支>`;建区后立刻跑 `tools/setup_worktree_userdir.sh`——给该区独立 Godot user 目录(测试夹具、试玩日志、截图产物不与其他区共用;主区不生成,真实档保持原位)。所有改动与提交都在 worktree 内自由进行——commit 点零钩子检查(`tools/hooks/pre-commit` 已删除)。豁免面仅 `.zcode/`(钩子与配置)与 `.qoder/`(本机 harness 配置)允许主工作区直改——两份实测均不入 git(走 worktree 反而带不进去,改动只对本机生效)
|
||||||
2. **收口顺序(固定)**:**冻结 → 件核 → 并 master → 重塑 → 主区合回 → 删区**——代码与断言改完即冻结,全仓件核 grep 查残留;master 已被别的批次推进时先在 worktree 内 `git merge master` 解冲突(必须在合回之前,合回后才并=CI 验的是中间态);**重塑**=迭代分支(iter<N> 形)合回前执行 `python tools/reshape_cards.py`,把分支线性史按卡末态快照压成一卡一笔(可选追加一笔纯文档收尾),master 台账由此每卡一行——工具自带「重塑前后树逐字节一致」断言与 backup 分支,不改任何文件内容;非迭代批免重塑;然后主工作区 `git merge --no-ff <任务分支>`(pre-merge-commit 钩子先跑前置检查——冒烟+单元全套件约 2 分钟,红则停合并提交,细则见第 4 条 ③)——这是主区唯一合法写动作(合回守卫对迭代分支数卡校验,未归卡提交拦下)。**合回落地即 `git worktree remove`+删分支(合回即删,2026-09-19 原裁);post-merge 钩子已在合回落地时自动触发 CI,红态不回滚合并——新开修复 worktree(`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡)修复提交再合,落地复验追绿后删修复区**。批内的验证义务按 §4 改完即测铁规履行——改完即测自己改过的那部分,不请示、不等点名;收口顺序本身不设跑批关口。**卡片复核前置判据(2026-11-05 用户裁)**:需求卡片的 grilling 复核先于卡片提交、卡片提交先于合回——复核未跑完、缺陷清单未裁完,禁把卡片落 commit(落了也不算成立),`master` 永不落未成立卡;本条与 §2 段三出口铁律、doc-conventions §12.1「已写卡」凭据同判。
|
2. **收口顺序(固定)**:**冻结 → 件核 → 并 master → 重塑 → 主区合回 → 删区**——代码与断言改完即冻结,全仓件核 grep 查残留;master 已被别的批次推进时先在 worktree 内 `git merge master` 解冲突(必须在合回之前,合回后才并=CI 验的是中间态);**重塑**=迭代分支(iter<N> 形)合回前执行 `python tools/reshape_cards.py`,把分支线性史按卡末态快照压成一卡一笔(可选追加一笔纯文档收尾),master 台账由此每卡一行——工具自带「重塑前后树逐字节一致」断言与 backup 分支,不改任何文件内容;非迭代批免重塑;然后主工作区 `git merge --no-ff <任务分支>`(pre-merge-commit 钩子先跑前置检查——冒烟+单元全套件约 2 分钟,红则停合并提交,细则见第 4 条 ③)——这是主区唯一合法写动作(合回守卫对迭代分支数卡校验,未归卡提交拦下)。**合回落地即 `git worktree remove`+删分支(合回即删,2026-09-19 原裁);post-merge 钩子已在合回落地时自动触发 CI,红态不回滚合并——新开修复 worktree(`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡)修复提交再合,落地复验追绿后删修复区**。批内的验证义务按 §4 改完即测铁规履行——改完即测自己改过的那部分,不请示、不等点名;收口顺序本身不设跑批关口。**卡片复核前置判据(2026-11-05 用户裁)**:需求卡片的 grilling 复核先于卡片提交、卡片提交先于合回——复核未跑完、缺陷清单未裁完,禁把卡片落 commit(落了也不算成立),`master` 永不落未成立卡;本条与 §2 段三出口铁律、doc-conventions §12.1「已写卡」凭据同判。
|
||||||
3. **合回后验证(远端 CI,2026-11-03 用户裁)**:git merge 合回 master 落地后 post-merge 钩子(`tools/hooks/post-merge`)自动 `git push origin master` 触发远端 CI(Gitea Actions,runner=Mac 本机 host 模式),工作流按改动域分流(分流算法单点=`tools/ci/domain_route.sh`:游戏码批=两域全量含渲染闸,文档批=文档域秒级闸,纯闸件/管线批=零触发)——唯一强制全量验证点。远端结果用 `tools/ci_check.sh <合并提交>` 按需现查(读该提交任务的 run 自身 `status`/`conclusion`,只呈报、不落盘),agent 开工先读 CI 状态的纪律不变,红未修不开新批。**绿须坐实**:零触发批的 run 照样建、照样 conclusion=success,但跑闸步是 `skipped`(run 55 实证)——一条闸都没跑不构成验证,现查件对此呈报「未验」(退出码 4),禁当绿证用;job 列表为空、取不到步级读数或工作流里没有跑闸步时呈报「不可判」,同样禁当绿证。CI 红态不回滚合并——修复走新开修复 worktree(`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡),修复合回落地即再推再验追绿(追绿同链)。导入缓存刷新(.godot 不入 git 的在册坑)由工作流「导入缓存刷新」步接管。**合回零等待纪律(2026-11-04 用户裁,取代 2026-11-02 回执等待纪律)**:合回落地即向用户呈报本批总结并止回合——不挂后台轮询、不等回执、不被唤醒;CI 结论什么时候要看就现查一次(`tools/ci_check.sh`,run 那时早已落定,秒级)。退役缘由=原轮询件把「commit status 离开 pending」当终局判据,会把 run 未落定期的尝试级失败写成终局红(run 37 实证:开跑 36 秒写红,该 run 三分半后 `conclusion=success`),且零触发批与 runner 排队必熬满超时再写红;同 commit 的多路轮询还重复覆写同一份判定。跑闸等一切分钟级跑批的等待纪律不变——后台运行,禁前台 sleep/轮询循环。
|
3. **合回后验证(远端 CI,2026-11-03 用户裁)**:git merge 合回 master 落地后 post-merge 钩子(`tools/hooks/post-merge`)自动 `git push origin master` 触发远端 CI(Gitea Actions,runner=Mac 本机 host 模式),工作流按改动域分流(分流算法单点=`tools/ci/domain_route.sh`:游戏码批=两域全量含渲染闸,文档批=文档域秒级闸,纯闸件/管线批=零触发)——唯一强制全量验证点。远端结果用 `tools/ci_check.sh <合并提交>` 按需现查(读该提交任务的 run 自身 `status`/`conclusion`,只呈报、不落盘),agent 开工先读 CI 状态的纪律不变,红未修不开新批。**绿须坐实**:零触发批的 run 照样建、照样 conclusion=success,但跑闸步是 `skipped`(run 55 实证)——一条闸都没跑不构成验证,现查件对此呈报「未验」(退出码 4),禁当绿证用;job 列表为空、取不到步级读数或工作流里没有跑闸步时呈报「不可判」,同样禁当绿证。CI 红态不回滚合并——修复走新开修复 worktree(`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡),修复合回落地即再推再验追绿(追绿同链)。导入缓存刷新(.godot 不入 git 的在册坑)由工作流「导入缓存刷新」步接管。**合回零等待纪律(2026-11-04 用户裁,取代 2026-11-02 回执等待纪律)**:合回落地即向用户呈报本批总结并止回合——不挂后台轮询、不等回执、不被唤醒;CI 结论什么时候要看就现查一次(`tools/ci_check.sh`,run 那时早已落定,秒级)。退役缘由=原轮询件把「commit status 离开 pending」当终局判据,会把 run 未落定期的尝试级失败写成终局红(run 37 实证:开跑 36 秒写红,该 run 三分半后 `conclusion=success`),且零触发批与 runner 排队必熬满超时再写红;同 commit 的多路轮询还重复覆写同一份判定。跑闸等一切分钟级跑批的等待纪律不变——后台运行,禁前台 sleep/轮询循环。
|
||||||
4. **执法分层(全机械,零自觉依赖)**:①`.zcode/hooks/worktree-guard.sh`(PreToolUse,本机件不入 git)——agent 侧:主工作区 Edit/Write 与主区非 merge `git commit` 拦截(豁免 `.zcode/`、`.qoder/`;worktree 内目标快速放行;合并收尾提交凭 MERGE_HEAD 豁免)、`git commit --no-verify` 拦截(该旗标仅属用户)、iter<N> 分支合回的一卡一提交数卡校验、规则闸(写 design//game/ 前核对会话规约读取记录)。②post-merge 钩子——远端 CI 触发(只推送,不挂等待;仅主工作区,任务 worktree 内的合并不触发)。③git 层钩子=合回链两件:pre-merge-commit(合回前置检查,2026-11-06 用户裁:主区 merge 落合并提交前自动跑 `tools/run_all_gates.sh --premerge`=冒烟+单元全套件 4 分片,热导入缓存约 2 分钟;exit≠0 拦合并提交不拦合并动作——红态仓库停 MERGE_HEAD 态,修红 git commit 续合或 git merge --abort 放弃;快进合并不触发;--no-verify 可跳过且仅属用户)+post-merge(远端 CI 触发,只推送,不挂等待);合回链之外 git 层不设车道钩子——用户手工改动不受限;ZCode 层只约束 agent(子代理不经守卫层)
|
4. **执法分层(全机械,零自觉依赖)**:①`.zcode/hooks/worktree-guard.sh`(PreToolUse,本机件不入 git)——agent 侧:主工作区 Edit/Write 与主区非 merge `git commit` 拦截(豁免 `.zcode/`、`.qoder/`;worktree 内目标快速放行;主区一切非 merge 的 git commit 均拦(含 MERGE_HEAD 态续合;冲突/红态一律 git merge --abort → 回 worktree → 重新 git merge --no-ff))、`git commit --no-verify` 拦截(该旗标仅属用户)、iter<N> 分支合回的一卡一提交数卡校验、规则闸(写 design//game/ 前核对会话规约读取记录)。②post-merge 钩子——远端 CI 触发(只推送,不挂等待;仅主工作区,任务 worktree 内的合并不触发)。③git 层钩子=合回链两件:pre-merge-commit(合回前置检查,2026-11-06 用户裁:主区 merge 落合并提交前自动跑 `tools/run_all_gates.sh --premerge`=冒烟+单元全套件 4 分片,热导入缓存约 2 分钟;exit≠0 拦合并提交不拦合并动作——红态仓库停 MERGE_HEAD 态,处置唯一=git merge --abort → 回 worktree 处理 → 重新 git merge --no-ff(禁 git commit 续合);快进合并不触发;--no-verify 可跳过且仅属用户)+post-merge(远端 CI 触发,只推送,不挂等待);合回链之外 git 层不设车道钩子——用户手工改动不受限;ZCode 层只约束 agent(子代理不经守卫层)
|
||||||
5. **会话单区(2026-11-04 用户裁)**:建区粒度=回合——同一时刻每会话至多一个 worktree 在役;合入删区之前,会话内用户追加的事项一律并入在役区推进,禁为追加事项另开新区。区内全部事项完成后只做一次合入(一次 `git merge --no-ff`、post-merge 一次推送、远端 CI 只跑一次),追加事项在合入提交信息里分列;无改动需求的事项不建区。合回删区后用户再发令的事项=新回合,另开新区(区名取该回合主任务名)。CI 红的 `fix-<任务名>` 修复区属同一回合的追绿延续,不另算新区。迭代实现批(iter<N> 形分支)独占回合——其他类事项不得并入迭代区(合回守卫数卡校验本就拦未归卡提交),待其合回后按新回合另开。
|
5. **会话单区(2026-11-04 用户裁)**:建区粒度=回合——同一时刻每会话至多一个 worktree 在役;合入删区之前,会话内用户追加的事项一律并入在役区推进,禁为追加事项另开新区。区内全部事项完成后只做一次合入(一次 `git merge --no-ff`、post-merge 一次推送、远端 CI 只跑一次),追加事项在合入提交信息里分列;无改动需求的事项不建区。合回删区后用户再发令的事项=新回合,另开新区(区名取该回合主任务名)。CI 红的 `fix-<任务名>` 修复区属同一回合的追绿延续,不另算新区。迭代实现批(iter<N> 形分支)独占回合——其他类事项不得并入迭代区(合回守卫数卡校验本就拦未归卡提交),待其合回后按新回合另开。
|
||||||
|
|
||||||
## 2. 五段流水线
|
## 2. 五段流水线
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ Alpha 内以玩法循环本身的内容与表现为主(棋盘、关卡、战
|
|||||||
| 像素美术风格与色板 | [美术圣经](../art/art-bible.md) | 在役 |
|
| 像素美术风格与色板 | [美术圣经](../art/art-bible.md) | 在役 |
|
||||||
| 棋盘瓦片与格面资源图标 | [美术圣经](../art/art-bible.md) | 在役 |
|
| 棋盘瓦片与格面资源图标 | [美术圣经](../art/art-bible.md) | 在役 |
|
||||||
| 未开格类型微光(五组色相+明度档) | [HUD框架](systems/表现与支撑/HUD框架.md) | 在役(明度档 provisional 值登记见 art-bible 的 git 提交史;观感复核已随战斗一屏样张过闸完成——用户实机目检核销,沿革查 git 提交史) |
|
| 未开格类型微光(五组色相+明度档) | [HUD框架](systems/表现与支撑/HUD框架.md) | 在役(明度档 provisional 值登记见 art-bible 的 git 提交史;观感复核已随战斗一屏样张过闸完成——用户实机目检核销,沿革查 git 提交史) |
|
||||||
| 棋盘观感(第二 / 三关亮度与对比度) | [待办清单](../../待办清单.md) | 待做(开工前置=先做素材轴/UI 轴对照截图定性,再按定轴修复;旧卡 v1.4 存 reports/ 作素材、非已写卡状态,重启须重新立卡;出口=用户实机目检第二、三关不再判「看着费劲」) |
|
| 棋盘瓦片与立体表现重做 | [待办清单](../../待办清单.md) | 已写卡(待编排)——设计闭合=C 方向+D 布局+三关八色冻结(art-bible v3.51/battle.md 2026-11-07/HUD框架 2026-11-07);卡片=[需求卡片](../../reports/需求卡片-棋盘瓦片与立体表现重做批-2026-11-07.md)(卡内 §16 复核通过);出口=用户实机目检棋盘立体感与素材观感达标 |
|
||||||
| 立绘显示清晰度(原稿分辨率+三档显示) | [角色设计](../art/character-design.md) | 在役(原稿分辨率入包禁降采样、显示按三档绝对高缩放、现有形象即终稿;定值单点=art-bible §8.2(档值定值面=站桩守门测试);实机目检清晰度与同屏体量顺序登记体验验证清单 ㊻) |
|
| 立绘显示清晰度(原稿分辨率+三档显示) | [角色设计](../art/character-design.md) | 在役(原稿分辨率入包禁降采样、显示按三档绝对高缩放、现有形象即终稿;定值单点=art-bible §8.2(档值定值面=站桩守门测试);实机目检清晰度与同屏体量顺序登记体验验证清单 ㊻) |
|
||||||
| 敌人立绘(全敌种) | [角色设计](../art/character-design.md) | 在役 |
|
| 敌人立绘(全敌种) | [角色设计](../art/character-design.md) | 在役 |
|
||||||
| 主角立绘三态 | [角色设计](../art/character-design.md) | 在役 |
|
| 主角立绘三态 | [角色设计](../art/character-design.md) | 在役 |
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| B 战斗画面 | 全宽,高读布局表 `stage_h`(背景三关变体+连续地面层高另读 `ground_h`) | 三关舞台背景+连续地面层、主角站桩立绘、敌人站桩立绘 ×1–3(**全站桩形态,2026-09-20 用户拍板:无框立绘+底座、状态小图标挂血条下,英雄卡/敌人卡退役**)、轮次阶段指示、结算明细带 |
|
| B 战斗画面 | 全宽,高读布局表 `stage_h`(背景三关变体+连续地面层高另读 `ground_h`) | 三关舞台背景+连续地面层、主角站桩立绘、敌人站桩立绘 ×1–3(**全站桩形态,2026-09-20 用户拍板:无框立绘+底座、状态小图标挂血条下,英雄卡/敌人卡退役**)、轮次阶段指示、结算明细带 |
|
||||||
| C 角色信息 | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 生命 / 攻击 / 储备数据框、状态效果槽、小人立绘 |
|
| C 角色信息 | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 生命 / 攻击 / 储备数据框、状态效果槽、小人立绘 |
|
||||||
| D 扫雷图 | 中下,宽 = 基准屏宽 − C 区宽 − 列间距,高同 C 区 | 行动点条与按钮组、棋盘本体、toast 槽 |
|
| D 扫雷图 | 中下,宽 = 基准屏宽 − C 区宽 − 列间距,高同 C 区(2026-11-07 顶栏搬两侧:D 区全高归棋盘) | 左/右行动资源侧栏、棋盘本体、toast 槽(棋盘底常驻操作提示条退役) |
|
||||||
|
|
||||||
分区几何的唯一事实源 = `game/data/tables/battle_layout.tres`(经 `ConfigDb.presentation.battle_layout` 读取);分区尺寸与组件落位的像素级裁决归 [battle.md](../../../ux/battle.md),两份文档只写结构关系、不复写数值。三区结构与双舞台常驻是结构冻结项,修订走文档修订而非调参。节点链进度不在战斗屏呈现——它由关卡画面(选路覆盖层常驻形态)的节点态承载,见[关卡节点地图](../冒险循环/关卡节点地图.md)。
|
分区几何的唯一事实源 = `game/data/tables/battle_layout.tres`(经 `ConfigDb.presentation.battle_layout` 读取);分区尺寸与组件落位的像素级裁决归 [battle.md](../../../ux/battle.md),两份文档只写结构关系、不复写数值。三区结构与双舞台常驻是结构冻结项,修订走文档修订而非调参。节点链进度不在战斗屏呈现——它由关卡画面(选路覆盖层常驻形态)的节点态承载,见[关卡节点地图](../冒险循环/关卡节点地图.md)。
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
|
|||||||
| 变量 | 含义 | 现行值 |
|
| 变量 | 含义 | 现行值 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| N | 棋盘边长格数 | 读[棋盘生成](../排雷循环/棋盘生成.md)(现行四档;事实源 board_gen.tres) |
|
| N | 棋盘边长格数 | 读[棋盘生成](../排雷循环/棋盘生成.md)(现行四档;事实源 board_gen.tres) |
|
||||||
| 棋盘区宽 / 高 | 扫雷图区基准尺寸 | 由 D 区尺寸扣行动点条高(读 `ap_bar_h`)得出,本表不复制现算值 |
|
| 棋盘区宽 / 高 | 扫雷图区基准尺寸 | 高 = D 区全高(不再扣 AP 条);宽按 battle.md 格尺寸公式扣 `side_rail_w` 侧栏,本表不复制现算值 |
|
||||||
|
|
||||||
装板可行性由上面的不等式保证;格边长的可读下限见 [battle.md](../../../ux/battle.md),算例由样张渲染脚本按布局表现算、不入文档。棋盘数字直接显示排雷玩法给的真值——呈现层禁止自己算数字,这是"数据层从不说谎"在呈现侧的镜像。
|
装板可行性由上面的不等式保证;格边长的可读下限见 [battle.md](../../../ux/battle.md),算例由样张渲染脚本按布局表现算、不入文档。棋盘数字直接显示排雷玩法给的真值——呈现层禁止自己算数字,这是"数据层从不说谎"在呈现侧的镜像。
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
|
|||||||
|---|---|
|
|---|---|
|
||||||
| 对比度 | 全部数字对格底 ≥4.5:1 |
|
| 对比度 | 全部数字对格底 ≥4.5:1 |
|
||||||
| 色弱安全 | 无信息仅靠色相承载;格态在灰度截图下可逐格分类 |
|
| 色弱安全 | 无信息仅靠色相承载;格态在灰度截图下可逐格分类 |
|
||||||
| 字号下限 | 棋盘数字 ≥18px、明细正文 ≥14px、tooltip ≥13px(1280×800 基座) |
|
| 字号下限 | 棋盘浮空数字字高 21px 固定、明细正文 ≥14px、tooltip ≥13px(1280×800 基座) |
|
||||||
| 闪烁 | 无每秒超过三次的闪烁 |
|
| 闪烁 | 无每秒超过三次的闪烁 |
|
||||||
| 减动效 | 提供全部动画时长减半或跳终态的开关;结算逐行兑现是信息载体——可加速、不可整体跳过 |
|
| 减动效 | 提供全部动画时长减半或跳终态的开关;结算逐行兑现是信息载体——可加速、不可整体跳过 |
|
||||||
| 输入 | 全部操作纯鼠标可完成 |
|
| 输入 | 全部操作纯鼠标可完成 |
|
||||||
@@ -244,7 +244,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
|
|||||||
|
|
||||||
## 调参表
|
## 调参表
|
||||||
|
|
||||||
本系统的参数全部是呈现节奏与可读性常量,不是玩法数值——玩法数值一律归[数据配置](数据配置.md)的表,与本表无关。修订本文常量走文档修订流程。**本表常量无数据表承载,为文档面唯一事实源;入驻 .tres 时本列改指路。** 布局几何(B 区高 / B 区连续地面层高 / C 区宽 / AP 条高 / 明细带两态高)已入驻 `game/data/tables/battle_layout.tres`,不在本表重复。
|
本系统的参数全部是呈现节奏与可读性常量,不是玩法数值——玩法数值一律归[数据配置](数据配置.md)的表,与本表无关。修订本文常量走文档修订流程。**本表常量无数据表承载,为文档面唯一事实源;入驻 .tres 时本列改指路。** 布局几何(B 区高 / B 区连续地面层高 / C 区宽 / D 区侧栏宽 / 明细带两态高)已入驻 `game/data/tables/battle_layout.tres`,不在本表重复。
|
||||||
|
|
||||||
| 参数 | 域 | 现行值(文档自持,无表承载) | 说明 |
|
| 参数 | 域 | 现行值(文档自持,无表承载) | 说明 |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|
|||||||
+6
-5
@@ -103,12 +103,13 @@
|
|||||||
|
|
||||||
| 术语 | 定义 |
|
| 术语 | 定义 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 样张 | 按美术圣经参数画成的风格试验图,是砖面形态等视觉定稿的验收闸(规格见[美术圣经](../art/art-bible.md) §1.4) |
|
| 样张 | 按美术圣经参数画成的风格试验图,是棋盘地形形态(岩体+地面+浮空数字)等视觉定稿的验收闸(规格见[美术圣经](../art/art-bible.md) §1.4) |
|
||||||
| 整屏样张 | 整屏级样张——战斗/关卡/菜单/营地屏各出一张,验屏级文字对比度、明度分层与焦点预算 |
|
| 整屏样张 | 整屏级样张——战斗/关卡/菜单/营地屏各出一张,验屏级文字对比度、明度分层与焦点预算 |
|
||||||
| 掩尘 | 未开格底色的专色名——覆尘完整砖的「未知」面色 |
|
| 掩尘 | 未开格岩体顶面基色的专色名——覆尘完整岩体的「未知」面色(现行值 `#9C8462`,见美术圣经 §4.1) |
|
||||||
| 裸土 | 已开格底色的专色名——碎裂裸露空间的沉暗面色 |
|
| 裸土 | 已开格连续地面基色的专色名——挖出空间的沉暗面色(现行值 `#695038`,见美术圣经 §4.1) |
|
||||||
| 色牌 | 垫在数字正下方的素色直角小牌,复杂格底时保数字可读的后备手段 |
|
| 色牌 | 棋盘数字底具——普通数字已退役(2026-11-07 浮空数字定案,棋盘普通数字不再使用底牌);封印格身份字形色牌保留(2026-11-07 封印改版,叠于法阵之上);沿革查美术圣经 §4.1 |
|
||||||
| 图类型 | 棋盘生成产物 `board_type` 的中文名——三关换皮的单位(同款地砖换色板) |
|
| 浮空数字 | 棋盘数字的现行呈现——数字与格面字形浮在格上方,暖白字芯+2px 深墨描边+双色引导线;字高 21px、字底距格顶 15px(规格见[美术圣经](../art/art-bible.md) §3.2) |
|
||||||
|
| 图类型 | 棋盘生成产物 `board_type` 的中文名——三关换皮的单位(同款地形材质换色板) |
|
||||||
| 方向稿 | 冻结前的方向性候选稿,供气质目检;过目检后才进机检冻结 |
|
| 方向稿 | 冻结前的方向性候选稿,供气质目检;过目检后才进机检冻结 |
|
||||||
| 站桩 | 战斗画面区(B 区)里角色直立立绘的显示形态(配血条与状态行) |
|
| 站桩 | 战斗画面区(B 区)里角色直立立绘的显示形态(配血条与状态行) |
|
||||||
| 显示档 | 站桩立绘的显示尺寸规则——源用原稿分辨率入包(禁降采样),显示按三档绝对高缩放、宽随源比例;定值单点见[美术圣经](../art/art-bible.md) §8.2 站桩立绘显示档条(档值定值面=站桩呈现守门测试) |
|
| 显示档 | 站桩立绘的显示尺寸规则——源用原稿分辨率入包(禁降采样),显示按三档绝对高缩放、宽随源比例;定值单点见[美术圣经](../art/art-bible.md) §8.2 站桩立绘显示档条(档值定值面=站桩呈现守门测试) |
|
||||||
|
|||||||
+135
-39
@@ -81,7 +81,7 @@
|
|||||||
本屏必须传达的全部信息,按注视优先级分五层:
|
本屏必须传达的全部信息,按注视优先级分五层:
|
||||||
|
|
||||||
1. **扫雷图本体**(第一注视点,挖掘期占视觉预算大头):两格态(已开格 / 未开格——排雷玩法×6② 一眼可辨)、数字、封印印记、小人、可挖域(8 向相邻常驻指示)、变异纹理
|
1. **扫雷图本体**(第一注视点,挖掘期占视觉预算大头):两格态(已开格 / 未开格——排雷玩法×6② 一眼可辨)、数字、封印印记、小人、可挖域(8 向相邻常驻指示)、变异纹理
|
||||||
2. **本轮行动资源**:AP 余量(决定还能挖几格)、RAP 池(弃图刷新货币)、停手/弃图刷新按钮——紧贴棋盘上缘(动作发生地)
|
2. **本轮行动资源**:AP 余量(决定还能挖几格)、RAP 池(弃图刷新货币)、停手/弃图刷新按钮——紧贴棋盘左右两侧(动作发生地;2026-11-07 顶栏搬两侧后由侧栏承载)
|
||||||
3. **战果兑现面**(结算期为第一注视点):敌人血条变化、逐行结算明细、高光(完美封印/封印标中)
|
3. **战果兑现面**(结算期为第一注视点):敌人血条变化、逐行结算明细、高光(完美封印/封印标中)
|
||||||
4. **规划面**(边缘注视,常读):攻击值与修正来源(C 区数据框)、敌人意图徽标与顺位(B 区站桩);HP 与状态效果由单位本体(B 区站桩)唯一承载——数据框不重复展示
|
4. **规划面**(边缘注视,常读):攻击值与修正来源(C 区数据框)、敌人意图徽标与顺位(B 区站桩);HP 与状态效果由单位本体(B 区站桩)唯一承载——数据框不重复展示
|
||||||
5. **进度语境**:轮次/阶段指示、图例入口(关卡节点进度常驻关卡画面,战斗屏不承载——见 Navigation Position)
|
5. **进度语境**:轮次/阶段指示、图例入口(关卡节点进度常驻关卡画面,战斗屏不承载——见 Navigation Position)
|
||||||
@@ -106,22 +106,22 @@
|
|||||||
- 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性)
|
- 护甲 AC(2026-09-26 二轮拍板补入——我方 AC 的唯一展示面;掷点判定轴,受击侧可读性)
|
||||||
- 秘宝槽(四槽壳在役、空槽占位——局内两步使用与关卡域库存随秘宝过渡形态退役;现行秘宝 = 营地同调装配件,本区展示内容归装配面重接)
|
- 秘宝槽(四槽壳在役、空槽占位——局内两步使用与关卡域库存随秘宝过渡形态退役;现行秘宝 = 营地同调装配件,本区展示内容归装配面重接)
|
||||||
- 奇物列表(**已实装**——现行标题「特性」;锻造/大奖励/关卡奖励节点获得的属性提升,逐件行「件名 ×N」呈现、零内部分类字样上屏;与战斗内状态效果分区呈现,防「战斗结束被清」误读)
|
- 奇物列表(**已实装**——现行标题「特性」;锻造/大奖励/关卡奖励节点获得的属性提升,逐件行「件名 ×N」呈现、零内部分类字样上屏;与战斗内状态效果分区呈现,防「战斗结束被清」误读)
|
||||||
- **D 区扫雷图 · AP 条**
|
- **D 区扫雷图 · 行动资源侧栏(原 AP 条,2026-11-07 顶栏搬两侧)**
|
||||||
- AP 点阵 + 停手按钮(现行)
|
- 左栏:AP 点阵 + 停手按钮
|
||||||
- **RAP 读数(点阵+数字)**——置于弃图刷新按钮旁(2026-09-26 拍板:RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮)
|
- 右栏:**RAP 读数(点阵+数字)** + 图例按钮 + 弃图刷新按钮——RAP 贴弃图刷新(2026-09-26 拍板:RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮)
|
||||||
- **战斗屏不承载(2026-09-26 二轮拍板)**
|
- **战斗屏不承载(2026-09-26 二轮拍板)**
|
||||||
- GP(中循环资源——商店房消费):**关卡画面常驻总量** + **战斗总结结算(总量+增量)**(呈现 spec:[settlement-summary.md](settlement-summary.md))
|
- GP(中循环资源——商店房消费):**关卡画面常驻总量** + **战斗总结结算(总量+增量)**(呈现 spec:[settlement-summary.md](settlement-summary.md))
|
||||||
- 钥石(大循环永久资源):**战斗总结结算(Boss/精英击杀增量行)+ 冒险总结结算(收束明细)+ 营地**(呈现 spec:[settlement-summary.md](settlement-summary.md))
|
- 钥石(大循环永久资源):**战斗总结结算(Boss/精英击杀增量行)+ 冒险总结结算(收束明细)+ 营地**(呈现 spec:[settlement-summary.md](settlement-summary.md))
|
||||||
|
|
||||||
### Layout Zones
|
### 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` / `ap_bar_h` / `log_band_h_dig` / `log_band_h_settle`)。本节只写结构关系与内容职责,不复写数值;任何文档与代码不另立第二份布局值。
|
采用用户拍板的布局图(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`;布局表字段暂留供样张渲染工具,删除归工具批)。本节只写结构关系与内容职责,不复写数值;任何文档与代码不另立第二份布局值。
|
||||||
|
|
||||||
| 区 | 位置与几何 | 内容 |
|
| 区 | 位置与几何 | 内容 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| **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 信息归属拍板)**;底部结算明细带(挖掘期收起高读 `log_band_h_dig`,结算期展开高读 `log_band_h_settle`);顶部中央轮次·阶段指示 |
|
||||||
| **C 角色信息** | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 攻击值(含修正显示)、护甲 AC;秘宝槽、奇物列表(现行标题「特性」)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区 AP 条;GP/钥石迁出战斗屏) |
|
| **C 角色信息** | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 攻击值(含修正显示)、护甲 AC;秘宝槽、奇物列表(现行标题「特性」)——HP 条/RAP 池/状态效果槽/立绘占位/钱包行退役(2026-09-26 信息归属拍板:HP 与状态唯一展示面 = B 区站桩;RAP 迁 D 区右栏;GP/钥石迁出战斗屏) |
|
||||||
| **D 扫雷图** | 中下,宽 = 基准屏宽 − C 区宽 − 列间距,高同 C 区(2026-10-06 方案二:底行压缩全部由面板空档吸收,**棋盘原尺寸不缩、格子不变**) | 顶部 AP 条(高读 `ap_bar_h`:左——AP 点阵 + 停手按钮;中——RAP 点阵+数字〔贴弃图刷新按钮,2026-09-26 拍板〕;右——图例按钮 + 弃图刷新按钮〔雷图右上角,2026-09-12 拍板〕);棋盘主体(居中,格边长见下方「棋盘格尺寸公式」);toast 槽(上缘内侧) |
|
| **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 用户裁,不占棋盘高度) |
|
||||||
|
|
||||||
> 布局为 B/C/D 三区——关卡进度条不在战斗屏(节点链进度常驻关卡画面,见 Navigation Position;字母不重编沿用 B/C/D)。
|
> 布局为 B/C/D 三区——关卡进度条不在战斗屏(节点链进度常驻关卡画面,见 Navigation Position;字母不重编沿用 B/C/D)。
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
|
|
||||||
### 封印格呈现预览(2026-11-07 用户裁「封印受理即揭示」的呈现规格;2026-11-07 用户人审通过——按此先落实现,观感细化后置,不阻塞基线冻结)
|
### 封印格呈现预览(2026-11-07 用户裁「封印受理即揭示」的呈现规格;2026-11-07 用户人审通过——按此先落实现,观感细化后置,不阻塞基线冻结)
|
||||||
|
|
||||||
封印受理后格子进入**已揭示+封印**态:墙瓦片换地板瓦片(裸土),封印法阵(环+十字)叠在其上,格下身份字形(危险格「危」朱字/安全格数字)按既有绘制优先级(数字 > 小人 > 封印印记)叠于法阵之上、垫既有色牌机制保可读。轮末判定后印记不撤,随图存续。
|
封印受理后格子进入**已揭示+封印**态:墙格换已揭示连续地面,封印法阵(环+十字)叠在其上,格下身份字形(危险格「危」朱字/安全格数字)按既有绘制优先级(数字 > 小人 > 封印印记)叠于法阵之上、垫既有色牌机制保可读。棋盘重做批后承载面取本关受光棱色封印石(新连续地面 `#695038` 系对封印黑仅 2.35–2.98:1,不达 ≥4.5:1;受光棱系 6.45–9.94:1,零新增色,见 art-bible §3.2/§4.1)。轮末判定后印记不撤,随图存续。
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 128" width="560" height="128">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 128" width="560" height="128">
|
||||||
<defs>
|
<defs>
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
像素级判据句(实现批验收锚):①印记参数沿用现行五常量单点(环外径 0.82 格边、环壁 0.11 环径、十字臂宽 0.156 环径、光圈 alpha 0.50/γ1.6),零新增美术件、零参数改动;②封印格承载 = 地板瓦片(裸土),印记居格心、环外留 9% 格宽光圈、光圈不外溢邻格;③身份字形(危/数字)垫既有色牌件叠于法阵之上——色牌取现行色板素色小牌件,墨字对色牌对比 ≥4.5:1;④封印黑对裸土底对比 ≈7.8:1(≥4.5:1);⑤未开格与已开普通格观感与现行逐像素一致(对照列)。
|
像素级判据句(实现批验收锚):①印记参数沿用现行五常量单点(环外径 0.82 格边、环壁 0.11 环径、十字臂宽 0.156 环径、光圈 alpha 0.50/γ1.6),零新增美术件、零参数改动;②封印格承载 = 已揭示地面(棋盘重做批后为本关受光棱色封印石),印记居格心、环外留 9% 格宽光圈、光圈不外溢邻格;③身份字形(危/数字)垫既有色牌件叠于法阵之上——色牌取现行色板素色小牌件,墨字对色牌对比 ≥4.5:1;④封印黑对承载面对比:旧裸土 ≈7.8:1,棋盘重做批后受光棱 6.45–9.94:1(均 ≥4.5:1);⑤未开格与已开普通格观感按棋盘重做批新地形规格(对照列)。
|
||||||
|
|
||||||
> 可挖域微光画法定稿(2026-09-25 用户拍板):**接触带·空间侧 + 蓝族**——光画英雄格周界接触面(正交邻墙=整边,斜向邻墙=角点+两半边),详见 art-bible §3.2;现行墙格整框绿相呼吸为待退役占位,切换待表现侧实现(含探针断言)。
|
> 可挖域微光画法定稿(2026-09-25 用户拍板):**接触带·空间侧 + 蓝族**——光画英雄格周界接触面(正交邻墙=整边,斜向邻墙=角点+两半边),详见 art-bible §3.2;现行墙格整框绿相呼吸为待退役占位,切换待表现侧实现(含探针断言)。
|
||||||
|
|
||||||
@@ -179,13 +179,14 @@
|
|||||||
**棋盘格尺寸公式**(本节是格边长口径的唯一出处;其他文档只写规则与指针,不复制算例):
|
**棋盘格尺寸公式**(本节是格边长口径的唯一出处;其他文档只写规则与指针,不复制算例):
|
||||||
|
|
||||||
```
|
```
|
||||||
格边长 = clampi( floor((min(棋盘区宽 − 12 − 悬崖厚度, 棋盘区高 − 24 − 悬崖厚度) − (N−1) × 格间距) / N), 26, 46 )
|
格边长 = clampi( floor((min(棋盘区宽 − 2 × 侧栏宽 − 12 − 悬崖厚度, 棋盘区高 − 44 − 12 − 悬崖厚度) − (N−1) × 格间距) / N), 26, 46 )
|
||||||
```
|
```
|
||||||
|
|
||||||
- N = 棋盘长宽两边的较大者;格间距 2px;垂直预留 24px(上 12 / 下 12);悬崖厚度 8px;结构钳制区间 [26, 46]px。
|
- **棋盘区** = D 区矩形(宽 = 基准屏宽 − C 区宽 − 列间距,高 = 基准屏高 − B 区高);2026-11-07 顶栏搬两侧后,D 区全高归棋盘,AP 条高度不再参与算式。
|
||||||
- 格边长可读性以用户验收的现行画面为锚点(2026-11-01 用户裁——现行渲染值即基准,基座档 14×14=28px 达标);全域不设人造的格边长可读阈值。结构钳制 [26, 46] 只管算式结果不越界;格边长接线守卫=生产写入值与上式单点算式的返回值严格相等,最大板型的推定读数仅留痕观察、不作判红依据。
|
- N = 棋盘长宽两边的较大者;格间距 2px;侧栏宽读布局表 `side_rail_w`(基座档 200);水平预留 12px(左右各 6);垂直预留 56px(**上 44 / 下 12**——上方 44px 给浮空数字越出棋盘上缘,推导 = 字高 21+字底距格顶 15+描边 2+余量 6);悬崖厚度 8px;结构钳制区间 [26, 46]px。
|
||||||
|
- 格边长可读性以用户验收的现行画面为锚点(2026-11-01 用户裁——现行渲染值即基准;2026-11-07 顶栏搬两侧后基座档 12×12=38px、14×14=32px);全域不设人造的格边长可读阈值。结构钳制 [26, 46] 只管算式结果不越界;格边长接线守卫=生产写入值与上式单点算式的返回值严格相等,最大板型的推定读数仅留痕观察、不作判红依据。
|
||||||
- N 的取值与每关板型的对应关系读[棋盘生成](../gdd/systems/排雷循环/棋盘生成.md),现行值的事实源是 `data/tables/board_gen.tres`。
|
- N 的取值与每关板型的对应关系读[棋盘生成](../gdd/systems/排雷循环/棋盘生成.md),现行值的事实源是 `data/tables/board_gen.tres`。
|
||||||
- 数字字号 = max(18, ceil(格边长 × 0.5)),像素字体整数倍缩放(canvas_items stretch 保证清晰)。
|
- 浮空数字字高 = 21px(7px 像素字 ×3,固定,不随格边缩放)+2px 深墨描边;引导线 2px、字底距格顶 15px;旧「数字字号 = max(18, ceil(格边长 × 0.5))」随格内数字退役。
|
||||||
|
|
||||||
算例不入文档:棋盘区可用面积随布局表与板型变化,不是契约值——现算并绘在整屏样张上,本文件不复写。
|
算例不入文档:棋盘区可用面积随布局表与板型变化,不是契约值——现算并绘在整屏样张上,本文件不复写。
|
||||||
|
|
||||||
@@ -198,11 +199,13 @@
|
|||||||
| B | 轮次·阶段指示 | 标签 | "第 N 轮 · 挖掘中/结算中"(终局定格「战斗结束」;Boss 变体附 Boss 名) | 只读 | 新建 |
|
| B | 轮次·阶段指示 | 标签 | "第 N 轮 · 挖掘中/结算中"(终局定格「战斗结束」;Boss 变体附 Boss 名) | 只读 | 新建 |
|
||||||
| B | 结算明细带 | 滚动列表 | 结算期逐行流水([战斗结算](../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议);挖掘期收起为上轮摘要 1 行 | 无明细回看——带保留单行摘要,冒险中回看归「生涯」 | 改造 |
|
| B | 结算明细带 | 滚动列表 | 结算期逐行流水([战斗结算](../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议);挖掘期收起为上轮摘要 1 行 | 无明细回看——带保留单行摘要,冒险中回看归「生涯」 | 改造 |
|
||||||
| B | 结算明细回看(已退役) | —— | 冒险中回看归「生涯」;回看覆盖层为未接线遗留件(待办清单登记) | —— | 未接线 |
|
| B | 结算明细回看(已退役) | —— | 冒险中回看归「生涯」;回看覆盖层为未接线遗留件(待办清单登记) | —— | 未接线 |
|
||||||
| C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;HP 与状态归 B 区站桩、RAP 归 D 区 AP 条,不在本组件) | 只读 | HUD 视图拆分 |
|
| C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;HP 与状态归 B 区站桩、RAP 归 D 区右栏,不在本组件) | 只读 | HUD 视图拆分 |
|
||||||
| C | 秘宝槽 | 图标槽 ×4 | 四槽壳在役、空槽占位(标题「秘宝」,悬停「秘宝槽(空)」);局内两步使用与关卡域库存随秘宝过渡形态退役——现行秘宝 = 营地同调装配件(秘宝.md),本区展示重接归装配面 | 悬停 tooltip | 已实装 |
|
| C | 秘宝槽 | 图标槽 ×4 | 四槽壳在役、空槽占位(标题「秘宝」,悬停「秘宝槽(空)」);局内两步使用与关卡域库存随秘宝过渡形态退役——现行秘宝 = 营地同调装配件(秘宝.md),本区展示重接归装配面 | 悬停 tooltip | 已实装 |
|
||||||
| C | 奇物列表(现行标题「特性」) | 列表/图标行 | 已实装——逐件行「件名 ×N」呈现、零内部分类字样;锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 已实装 |
|
| C | 奇物列表(现行标题「特性」) | 列表/图标行 | 已实装——逐件行「件名 ×N」呈现、零内部分类字样;锻造/大奖励/关卡奖励节点获得的属性提升——中循环数据,因改变战斗数学且无其他展示面准入战斗屏;与战斗内状态效果(B 区站桩)分区,防「战斗结束被清」误读 | 只读 | 已实装 |
|
||||||
| D | AP 条 | 点阵 + 按钮组 | 本轮 AP 点阵、停手按钮(左)、**RAP 点阵+数字(RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮——2026-09-26 拍板;RAP 清零可见反馈〔行动经济〕)**、弃图刷新按钮(右端·雷图右上角;RAP−8 · 本轮剩 N 次,上限 2 次为行动经济口径) | 点击提交意图 | HUD 视图拆分 |
|
| D | 行动资源侧栏(原 AP 条) | 两侧点阵 + 按钮组 | 左栏:本轮 AP 点阵、停手按钮;右栏:**RAP 点阵+数字(RAP 唯一消费口 = 弃图刷新,资源数字贴消费按钮——2026-09-26 拍板;RAP 清零可见反馈〔行动经济〕)**、图例按钮、弃图刷新按钮(RAP−8 · 本轮剩 N 次,上限 2 次为行动经济口径)。2026-11-07 顶栏搬两侧——原顶部整条 AP 条退役,数据按左/右栏分置,D 区全高归棋盘 | 点击提交意图 | HUD 视图拆分改造 |
|
||||||
| D | 棋盘视图 | 网格 | 棋盘全部格态 + 小人 + 封印印记 + 变异纹带 + 奖励身份 icon(已开格;绘制优先级 数字>小人>封印印记>奖励徽章>变异纹带>底色——徽章不进数字区,样张验收项) | 左/右键意图提交 | ✅ 已实装 |
|
| D | 棋盘地形层 | 合并岩体/连续地面 | 地面连续无缝;连通未开格(四邻)合并为抬升岩体(岩顶大板+南/东崖面+四段投影+整板悬崖);岩顶向北偏西抬升(LIFT/ESHIFT 比例见 art-bible §3.2);三关八色见 art-bible §4.1「三关棋盘环境八色」;不铺逐格瓦片;深度对象按脚底 y 排序,南侧岩体可遮住小人脚底(2026-11-07 用户裁) | 只读 | 新建(替换 cell_base_layer/tile_palette) |
|
||||||
|
| D | 棋盘浮空数字层 | 最顶层文字层 | 数字与格面字形(危/?)浮在格上方:字高 21px、2px 深墨描边、1px 浮空投影、暖白字芯、2px 双色引导线;字底阴影圆 10×6 画在开启格地面(格顶+7,位于小人之下,小人站该格时遮住圆);顶行数字越出棋盘上缘(D 区上方预留 44px);数字与引导线 z 最高,任何地形/小人/特效不遮数字与引导线;封印格身份字形走色牌、不进浮空层;普通数字色牌退役 | 只读 | 新建 |
|
||||||
|
| D | 棋盘视图 | 网格 | 棋盘全部格态 + 小人 + 封印印记 + 变异纹带 + 奖励身份 icon(已开格;信息层叠放序 浮空数字>小人>封印印记>奖励徽章/类型微光>交互反馈>变异纹带>地形底色——浮空数字永不被遮,徽章不进数字区;屏幕层序按脚底行分档:北侧贴花低于小人、南侧随岩体在前;封印印记与封印格身份色牌固定低于小人,样张验收项) | 左/右键意图提交 | 改造 |
|
||||||
| D | 悬停预承诺光标 | 光标态 | 移动/挖/封印三语义光标 + 目标格边框高亮 | 自动 | 新建(排雷玩法×6③) |
|
| D | 悬停预承诺光标 | 光标态 | 移动/挖/封印三语义光标 + 目标格边框高亮 | 自动 | 新建(排雷玩法×6③) |
|
||||||
| D | 可挖域指示 | 常驻微高亮 | 小人 8 向相邻可操作格 | 自动 | 新建(排雷玩法×6③) |
|
| D | 可挖域指示 | 常驻微高亮 | 小人 8 向相邻可操作格 | 自动 | 新建(排雷玩法×6③) |
|
||||||
| D | 移动路径预览 | 路径高亮 | 悬停已开格显示 BFS 路径(合法性指示) | 自动 | 新建(排雷玩法×6⑤,裁决见下) |
|
| D | 移动路径预览 | 路径高亮 | 悬停已开格显示 BFS 路径(合法性指示) | 自动 | 新建(排雷玩法×6⑤,裁决见下) |
|
||||||
@@ -216,7 +219,7 @@
|
|||||||
**布局决策 3 — 移动路径预览 = 合法性指示**(排雷玩法×6⑤ 悬案裁决):悬停已开格时高亮 BFS 路径(小人蓝细线点迹),移动执行为 ≤150ms 短滑。
|
**布局决策 3 — 移动路径预览 = 合法性指示**(排雷玩法×6⑤ 悬案裁决):悬停已开格时高亮 BFS 路径(小人蓝细线点迹),移动执行为 ≤150ms 短滑。
|
||||||
- 备选(不采纳):穿行动画轨道——移动免费高频,动画时间税违反 P4 点击摩擦护栏(每轮输入动作:AP ≤2 的观测假设);正式版若 playtest 反馈"移动太瞬"再议
|
- 备选(不采纳):穿行动画轨道——移动免费高频,动画时间税违反 P4 点击摩擦护栏(每轮输入动作:AP ≤2 的观测假设);正式版若 playtest 反馈"移动太瞬"再议
|
||||||
|
|
||||||
**布局决策 4 — 弃图刷新 = 挖掘期当场换图(2026-09-12 用户拍板)**:按钮置 AP 条右端(雷图右上角)。点击即当轮就地换新图继续挖——AP 不重置、剩余 AP 保留,RAP−8,本轮上限 2 次。
|
**布局决策 4 — 弃图刷新 = 挖掘期当场换图(2026-09-12 用户拍板;2026-11-07 按钮位随顶栏搬两侧改到 D 区右栏)**:按钮置 D 区右栏(贴棋盘右缘)。点击即当轮就地换新图继续挖——AP 不重置、剩余 AP 保留,RAP−8,本轮上限 2 次。
|
||||||
- **上游修订(OQ11)**:① 行动经济 Active 相位受理刷新意图 + 每轮上限 2 次(Waiting 代理退役)② 排雷玩法装板受理域增 Active·仅刷新路径 ③ 编排 owner = **战斗结算的挖掘期刷新编排**(行动经济扣费 → 排雷玩法退役旧板 → 棋盘生成出新图 → 排雷玩法装板 → 地图战斗资源摇奖励恰一次;无结算段、无轮次结束——战斗结算编排唯一性原则保持)④ 旧板封印印记随旧板**作废**(零兑付、封印 AP 不返还——排雷玩法 EC11 全量重置承载;确认微交互须显式提示)。**经济预警**:当场刷新无结算发生,原「敌方时间税」自惩失效——行动经济 OQ3 弃图率/刷新率预警阈值联动复核。
|
- **上游修订(OQ11)**:① 行动经济 Active 相位受理刷新意图 + 每轮上限 2 次(Waiting 代理退役)② 排雷玩法装板受理域增 Active·仅刷新路径 ③ 编排 owner = **战斗结算的挖掘期刷新编排**(行动经济扣费 → 排雷玩法退役旧板 → 棋盘生成出新图 → 排雷玩法装板 → 地图战斗资源摇奖励恰一次;无结算段、无轮次结束——战斗结算编排唯一性原则保持)④ 旧板封印印记随旧板**作废**(零兑付、封印 AP 不返还——排雷玩法 EC11 全量重置承载;确认微交互须显式提示)。**经济预警**:当场刷新无结算发生,原「敌方时间税」自惩失效——行动经济 OQ3 弃图率/刷新率预警阈值联动复核。
|
||||||
- 备选(已否决):结算期决策提示(Waiting 内联)——结算期不做刷新决策(用户拍板);挖掘期预承诺 stop+reroll 复合——决策即终轮,不符「换图继续挖」语义。
|
- 备选(已否决):结算期决策提示(Waiting 内联)——结算期不做刷新决策(用户拍板);挖掘期预承诺 stop+reroll 复合——决策即终轮,不符「换图继续挖」语义。
|
||||||
|
|
||||||
@@ -247,20 +250,109 @@
|
|||||||
│ ├─ 结算明细带 ────────────────────────────────────────────────────────────┤ │
|
│ ├─ 结算明细带 ────────────────────────────────────────────────────────────┤ │
|
||||||
│ │ ▸上轮: 主角攻击3→蛆虫-3 | 攻击+50%(1结算) | 警觉+1×2 … │ │
|
│ │ ▸上轮: 主角攻击3→蛆虫-3 | 攻击+50%(1结算) | 警觉+1×2 … │ │
|
||||||
│ └────────────────────────────────────────────────────────────────────────┘ │
|
│ └────────────────────────────────────────────────────────────────────────┘ │
|
||||||
├─[C] 角色信息 ─────────┬─[D] 扫雷图 ───────────────────────────────────────────┤
|
├─[C] 角色信息 ─────────┬─[D] 扫雷图(顶栏已搬两侧) ───────────────────────────┤
|
||||||
│ ┌──────────────────┐ │ ┌─────────────────────────────────────────────────┐ │
|
│ ┌──────────────────┐ │ ┌──────┐ ┌───────────────────────────┐ ┌──────┐ │
|
||||||
│ │ 攻击 6 (+50%) │ │ │ AP ●●●●●○○○ 5/8 RAP ▓▓▓░ 3/8 │ │
|
│ │ 攻击 6 (+50%) │ │ │ AP │ │ (上方 44px 留白) │ │ RAP │ │
|
||||||
│ │ 护甲 AC 12 │ │ │ [⏹停手] [?图例] [↻刷新 8|剩2] │ │
|
│ │ 护甲 AC 12 │ │ │ ●●●● │ │ 1 2 ░ 3 ... │ │ ▓▓▓░ │ │
|
||||||
│ ├──────────────────┤ │ │ ┌─toast────────────┐ │ │
|
│ ├──────────────────┤ │ │ ●○○○ │ │ ╱│ ╱│ ... │ │ 3/8 │ │
|
||||||
│ │ 秘宝槽 │ │ │ │AP不足·剩0点 │ 12 12 1 ░ 2 ▓▓ ▓▓ │ │
|
│ │ 秘宝槽 │ │ │ 5/8 │ │ ┌───────────────────────┐ │ │[?图例]│ │
|
||||||
│ │ ◇ ◇ ◇ ◇ │ │ │ └──────────────────┘ 12 █ 1 1 2 ▓▓ ▓▓ │ │
|
│ │ ◇ ◇ ◇ ◇ │ │ │ │ │ │ 岩体顶面(合并岩体) │ │ │[↻刷新]│ │
|
||||||
│ ├──────────────────┤ │ │ 1 2 2 🚩 █ 2 1 1 ▓▓ 👫 1 1 ░ │ │
|
│ ├──────────────────┤ │ │[⏹停手]│ │ │ 南/东崖面+四段投影 │ │ │ 8|剩2 │ │
|
||||||
│ │ 特性(奇物) │ │ │ ░ 1 ▓▓ 👫 1 1 ░ ▓▓ 1 1 ░ ░ 2 │ │
|
│ │ 特性(奇物) │ │ │ │ │ │ 1 2 👫 1 1 ░ 2 │ │ └──────┘ │
|
||||||
│ │ 锻造+2攻 │ │ │ ▓▓ 1 1 ░ ░ 2 ▓▓ │ │
|
│ │ 锻造+2攻 │ │ │ │ │ │ ▓▓ 1 1 ░ ░ 2 ▓▓ │ │ │
|
||||||
│ │ (空态=隐藏) │ │ │ ( █=可挖域微光 👫=小人) │ │
|
│ │ (空态=隐藏) │ │ └──────┘ └───────────────────────────┘ │ │
|
||||||
│ └──────────────────┘ │ └─────────────────────────────────────────────────┘ │
|
│ └──────────────────┘ │ 左栏 AP 棋盘居中·浮空数字最顶 右栏 RAP │
|
||||||
└───────────────────────┴──────────────────────────────────────────────────────┘
|
└───────────────────────┴──────────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
> **D 区结构注记(2026-11-07 用户裁)**:原顶部 AP 条整条退役,AP 在左栏、RAP/图例/弃图刷新在右栏;棋盘占 D 区全高,上方 44px 留白给顶行浮空数字越出棋盘;棋盘地形为合并岩体+南/东崖面,浮空数字+引导线为最顶层。
|
||||||
|
|
||||||
|
### D 区布局与棋盘画法预览(2026-11-07 用户人审通过,内嵌备查)
|
||||||
|
|
||||||
|
> 预览依据 = art-bible §3.2/§4.1(v3.51)+本节布局表与格边公式。效果图是目标画面;像素判据以 1280×800 基座档钉死,实现批按此冻结基线(test-conventions §8.2)。
|
||||||
|
|
||||||
|
<svg viewBox="0 0 1036 548" width="100%" style="min-width:760px" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="battle-d-title battle-d-desc">
|
||||||
|
<title id="battle-d-title">D 区布局——顶栏搬两侧、棋盘全高、上方 44px 浮空数字预留</title>
|
||||||
|
<desc id="battle-d-desc">D 区 1036×548:左栏 200px 放 AP 与停手,右栏 200px 放 RAP、图例、弃图刷新;棋盘 12×12 格 38px 居中,上方留白 44px,下方 12px+悬崖 8px。</desc>
|
||||||
|
<rect width="1036" height="548" fill="#221C15"/>
|
||||||
|
<rect x="0" y="0" width="200" height="548" fill="#1F1A14"/>
|
||||||
|
<rect x="836" y="0" width="200" height="548" fill="#1F1A14"/>
|
||||||
|
<text x="16" y="28" font-size="14" fill="#E8DCC8">左栏 · AP</text>
|
||||||
|
<text x="852" y="28" font-size="14" fill="#E8DCC8">右栏 · RAP</text>
|
||||||
|
<g fill="#E8C878">
|
||||||
|
<circle cx="24" cy="70" r="7"/><circle cx="50" cy="70" r="7"/><circle cx="76" cy="70" r="7"/><circle cx="102" cy="70" r="7"/><circle cx="128" cy="70" r="7"/>
|
||||||
|
<circle cx="24" cy="96" r="7"/><circle cx="50" cy="96" r="7"/><circle cx="76" cy="96" r="7" opacity="0.35"/><circle cx="102" cy="96" r="7" opacity="0.35"/><circle cx="128" cy="96" r="7" opacity="0.35"/>
|
||||||
|
</g>
|
||||||
|
<rect x="16" y="126" width="120" height="34" rx="5" fill="#342B20" stroke="#60503A"/>
|
||||||
|
<text x="76" y="148" font-size="14" fill="#E8DCC8" text-anchor="middle">停手</text>
|
||||||
|
<g fill="#7EBAF0"><circle cx="856" cy="70" r="6"/><circle cx="880" cy="70" r="6"/><circle cx="904" cy="70" r="6"/><circle cx="928" cy="70" r="6" opacity="0.35"/></g>
|
||||||
|
<text x="944" y="76" font-size="15" fill="#CBE4FA">3</text>
|
||||||
|
<rect x="852" y="100" width="100" height="34" rx="5" fill="#342B20" stroke="#60503A"/><text x="902" y="122" font-size="14" fill="#E8DCC8" text-anchor="middle">图例</text>
|
||||||
|
<rect x="852" y="144" width="150" height="34" rx="5" fill="#342B20" stroke="#60503A"/><text x="927" y="166" font-size="14" fill="#E8DCC8" text-anchor="middle">弃图刷新</text>
|
||||||
|
<text x="852" y="198" font-size="12" fill="#9C8A6C">RAP−8 · 剩 2 次</text>
|
||||||
|
|
||||||
|
<rect x="200" y="0" width="636" height="548" fill="#221C15"/>
|
||||||
|
<line x1="279" y1="44" x2="757" y2="44" stroke="#F2C14E" stroke-width="2" stroke-dasharray="6 4"/>
|
||||||
|
<text x="518" y="30" font-size="14" fill="#F2C14E" text-anchor="middle">上方 44px · 浮空数字越出棋盘</text>
|
||||||
|
|
||||||
|
<rect x="279" y="44" width="478" height="478" fill="#695038"/>
|
||||||
|
<!-- 合并岩体示意:顶面上移 17、左移 4;南/东崖面沉在格内 -->
|
||||||
|
<g>
|
||||||
|
<rect x="275" y="27" width="120" height="38" fill="#9C8462"/>
|
||||||
|
<rect x="275" y="65" width="120" height="17" fill="#403325"/>
|
||||||
|
<rect x="275" y="65" width="120" height="2" fill="#C9AF83"/>
|
||||||
|
<rect x="275" y="82" width="120" height="16" fill="#000" opacity="0.18"/>
|
||||||
|
<rect x="355" y="27" width="38" height="38" fill="#9C8462"/>
|
||||||
|
<rect x="389" y="27" width="4" height="38" fill="#403325"/>
|
||||||
|
<rect x="393" y="27" width="16" height="38" fill="#000" opacity="0.16"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect x="435" y="27" width="38" height="38" fill="#9C8462"/>
|
||||||
|
<rect x="435" y="65" width="38" height="17" fill="#403325"/>
|
||||||
|
<rect x="435" y="65" width="38" height="2" fill="#C9AF83"/>
|
||||||
|
<rect x="435" y="82" width="38" height="16" fill="#000" opacity="0.18"/>
|
||||||
|
<rect x="555" y="27" width="80" height="38" fill="#9C8462"/>
|
||||||
|
<rect x="555" y="65" width="80" height="17" fill="#403325"/>
|
||||||
|
<rect x="555" y="65" width="80" height="2" fill="#C9AF83"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect x="275" y="107" width="78" height="38" fill="#9C8462"/>
|
||||||
|
<rect x="275" y="145" width="78" height="17" fill="#403325"/>
|
||||||
|
<rect x="275" y="145" width="78" height="2" fill="#C9AF83"/>
|
||||||
|
<rect x="353" y="107" width="4" height="38" fill="#403325"/>
|
||||||
|
</g>
|
||||||
|
<!-- 浮空数字示意:暖白字芯 + 2px 深墨描边(八向偏移)+ 双色引导线 + 阴影圆 -->
|
||||||
|
<g>
|
||||||
|
<circle cx="434" cy="51" r="5" fill="#100C08" opacity="0.55"/>
|
||||||
|
<line x1="433" y1="32" x2="433" y2="48" stroke="#1A140E" stroke-width="2"/>
|
||||||
|
<line x1="434" y1="32" x2="434" y2="48" stroke="#E8D3AB" stroke-width="1"/>
|
||||||
|
<g font-family="monospace" font-size="21" text-anchor="middle" fill="#1A140E">
|
||||||
|
<text x="426" y="27">2</text><text x="430" y="27">2</text>
|
||||||
|
<text x="426" y="31">2</text><text x="430" y="31">2</text>
|
||||||
|
<text x="424" y="29">2</text><text x="432" y="29">2</text>
|
||||||
|
<text x="428" y="25">2</text><text x="428" y="33">2</text>
|
||||||
|
</g>
|
||||||
|
<text x="428" y="29" font-family="monospace" font-size="21" text-anchor="middle" fill="#F0E2C8">2</text>
|
||||||
|
</g>
|
||||||
|
<text x="279" y="540" font-size="12" fill="#9C8A6C">棋盘 478×478(12×12 · 格 38 · 间距 2)</text>
|
||||||
|
<text x="757" y="540" font-size="12" fill="#9C8A6C" text-anchor="end">悬崖 8 · 下方 12</text>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
**像素判据(1280×800 基座档;实现批按此冻结基线)**
|
||||||
|
|
||||||
|
| 判据 | 读数 |
|
||||||
|
|---|---|
|
||||||
|
| D 区 | x 244–1280、y 252–800,1036×548 |
|
||||||
|
| 侧栏 | 左栏 x 244–444、右栏 x 1080–1280,各宽 200(布局表 `side_rail_w`) |
|
||||||
|
| 棋盘 12×12 | 格边 38、格间距 2、外框 478×478;原点 x=523、y=296;棋盘底 774、悬崖到 782、屏底余 18 |
|
||||||
|
| 棋盘 14×14 | 格边 32、外框 474×474;原点 x=525、y=296;棋盘底 770、悬崖到 778、屏底余 22 |
|
||||||
|
| 上方预留 | y 252–296 共 44;顶行字视觉顶 y=258(含 2px 描边),距 D 区上缘 6 |
|
||||||
|
| 浮空字 | 字高 21、字底距格顶 15、视觉顶距格顶 38;2px 深墨描边+1px 浮空投影;引导线 2px(左深右浅),自格顶−12 到格顶+4;字底阴影圆 10×6、圆心格顶+7,画在开启格地面、位于小人之下 |
|
||||||
|
| 岩体投影 | LIFT=round(38×0.435)=17;ESHIFT=round(38×0.109)=4;相邻岩顶搭接 2;板边岩顶外延 ESHIFT;南崖高 17、宽 42(38+4)、顶缘 2px 口沿高光取本关受光棱(dungeon #C9AF83)+1px 深墨线;东崖宽 4、高 55(38+17);北/西临空缘 2px 主亮棱+2px 次亮棱+外 2px 深墨边;南/东临空缘 2px 深墨内缘+3 段×2px 内阴影(自缘内 0.217×格边起,α0.27/0.16/0.08);南/东投影 4 段×4px 渐隐(α0.44/0.30/0.16/0.07);整板悬崖 8 |
|
||||||
|
| 深度遮挡 | 深度键 = 脚底格底 y;岩体取最南格格底;升序绘制;南侧岩体(键更大)画在小人之后、遮住小人脚底 |
|
||||||
|
| 层序 | 地面(封印格地面铺受光棱色封印石)→投影→开启格地面阴影圆(小人之下)→深度对象(岩体+小人;格件顶面贴花〔微光/变异〕与交互反馈随脚底行同序——北侧低于小人、南侧随岩体在前;封印印记与封印格身份色牌固定低于小人)→浮空数字+引导线(z 最高) |
|
||||||
|
| 顶面/视觉 rect | 墙格顶面 rect = 格矩形左上偏移 (−ESHIFT,−LIFT)、边长=格边;整格视觉 rect = 顶面向右补 ESHIFT、向下补 LIFT;微光/变异锚顶面 rect;封印锚逻辑格心;迷雾黑罩覆盖顶面+南面+东面三块 |
|
||||||
|
| 悬停/路径 rect | 墙格悬停金框按顶面 rect;已开地面格悬停/路径点迹按逻辑 rect(不偏移) |
|
||||||
|
| 禁裁切 | 顶行数字、引导线、阴影圆全部落在 D 区内;任何地形/小人/特效不遮浮空数字与引导线 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -268,7 +360,7 @@
|
|||||||
|
|
||||||
| State / Variant | Trigger | What Changes |
|
| State / Variant | Trigger | What Changes |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| **挖掘阶段(默认态)** | 轮次开始 / 结算完毕回 Active 相位 | B 区敌人待机(意图徽标全程可见——敌人系统 Rule 8⑤),D 区棋盘可交互,AP 条点亮;能量 2/10,唯悬停呼吸微光在动(§2.1) |
|
| **挖掘阶段(默认态)** | 轮次开始 / 结算完毕回 Active 相位 | B 区敌人待机(意图徽标全程可见——敌人系统 Rule 8⑤),D 区棋盘可交互,左右行动资源侧栏点亮;能量 2/10,唯悬停呼吸微光在动(§2.1) |
|
||||||
| **结算阶段** | round_end 触发(AP 尽/停手/清图) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);B 区播放五段编排演出(授予段 → 增益/减益段 → 战斗段 → 衰减段 → 判定段,战斗结算 段序冻结);明细带按结算期档展开(高读 `log_band_h_settle`)逐行滚动;阶段指示→"结算中";能量 7/10 |
|
| **结算阶段** | round_end 触发(AP 尽/停手/清图) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);B 区播放五段编排演出(授予段 → 增益/减益段 → 战斗段 → 衰减段 → 判定段,战斗结算 段序冻结);明细带按结算期档展开(高读 `log_band_h_settle`)逐行滚动;阶段指示→"结算中";能量 7/10 |
|
||||||
| **清图瞬间** | 全部安全格开完 | 金粒喷泉 + 彩纸 3–5s 即收(§2.3);清图奖励行强调呈现(H2,地图战斗资源×④——金框高亮行);随后换新图 install |
|
| **清图瞬间** | 全部安全格开完 | 金粒喷泉 + 彩纸 3–5s 即收(§2.3);清图奖励行强调呈现(H2,地图战斗资源×④——金框高亮行);随后换新图 install |
|
||||||
| **完美封印高光** | 战斗结算高光判定(全图标中/零误标类) | 全屏喝彩级反馈(§2.2 最高档):金光带加倍扫射 + 「完美封印 ×2」横幅——P2 爆发兑现节点(创意风险 #2 落点) |
|
| **完美封印高光** | 战斗结算高光判定(全图标中/零误标类) | 全屏喝彩级反馈(§2.2 最高档):金光带加倍扫射 + 「完美封印 ×2」横幅——P2 爆发兑现节点(创意风险 #2 落点) |
|
||||||
@@ -295,10 +387,10 @@
|
|||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| 未开相邻格 | 挖掘 | 左键 | 格碎裂 + 连锁展开(免费)+ 奖励身份揭显 | 意图入当帧批次 → 排雷玩法的意图批次提交 |
|
| 未开相邻格 | 挖掘 | 左键 | 格碎裂 + 连锁展开(免费)+ 奖励身份揭显 | 意图入当帧批次 → 排雷玩法的意图批次提交 |
|
||||||
| 已开格 | 移动 | 左键 | 悬停时路径预览高亮(布局决策 3);执行 ≤150ms 短滑 | 意图入批(BFS 移动,免费) |
|
| 已开格 | 移动 | 左键 | 悬停时路径预览高亮(布局决策 3);执行 ≤150ms 短滑 | 意图入批(BFS 移动,免费) |
|
||||||
| 未开格 | 封印 | 右键 | **受理即揭示**:墙瓦片换地板 + 封印印记落下(封印黑)+ 格下身份揭显(危/数字) | 意图入批(1 AP / 免费;受理当场零兑付——兑付在轮末判定批) |
|
| 未开格 | 封印 | 右键 | **受理即揭示**:墙格换已揭示地面 + 封印印记落下(封印黑)+ 格下身份揭显(危/数字,垫色牌) | 意图入批(1 AP / 免费;受理当场零兑付——兑付在轮末判定批) |
|
||||||
| 已封印格(已揭示) | 无 | 左键/右键 | 禁止光标 + 悬停说明(封印格无可用动作) | 零意图(不入批——封印格拒绝挖掘、不可通行、不可再封印;封印印记无移除手段,封印不可逆) |
|
| 已封印格(已揭示) | 无 | 左键/右键 | 禁止光标 + 悬停说明(封印格无可用动作) | 零意图(不入批——封印格拒绝挖掘、不可通行、不可再封印;封印印记无移除手段,封印不可逆) |
|
||||||
| 停手按钮 | 主动结束轮次 | 左键 | 按钮下压 + AP→RAP 飞行数字 | 停手随当帧意图批次提交(**经排雷玩法批次,不直调行动经济**——单意图帧批次契约) |
|
| 停手按钮 | 主动结束轮次 | 左键 | 按钮下压 + AP→RAP 飞行数字 | 停手随当帧意图批次提交(**经排雷玩法批次,不直调行动经济**——单意图帧批次契约) |
|
||||||
| 弃图刷新按钮(雷图右上角) | 当轮就地换图继续挖 | 左键 | 确认微交互(RAP−8 代价显式 + 旧板弃置提示);RAP<8 → 资源面拒绝可见(行动经济 EC13) | 刷新意图提交(**Active 相位当场换图继续挖**——AP 不重置、本轮剩 N 次扣减;受理口径见布局决策 4/OQ11) |
|
| 弃图刷新按钮(D 区右栏) | 当轮就地换图继续挖 | 左键 | 确认微交互(RAP−8 代价显式 + 旧板弃置提示);RAP<8 → 资源面拒绝可见(行动经济 EC13) | 刷新意图提交(**Active 相位当场换图继续挖**——AP 不重置、本轮剩 N 次扣减;受理口径见布局决策 4/OQ11) |
|
||||||
| 图例按钮 | 开图例 | 左键 | 模态 overlay | 恒可开(图例条目恒在) |
|
| 图例按钮 | 开图例 | 左键 | 模态 overlay | 恒可开(图例条目恒在) |
|
||||||
| 状态小图标(B 区站桩) | 悬停 | hover | 状态 tooltip(来源+语义+剩余结算次数) | 只读 |
|
| 状态小图标(B 区站桩) | 悬停 | hover | 状态 tooltip(来源+语义+剩余结算次数) | 只读 |
|
||||||
| 胜利 overlay | 下一节点 | 左键 | → 关卡画面(选路枢纽)/ 关卡结算(末节点) | 关卡推进方推进 |
|
| 胜利 overlay | 下一节点 | 左键 | → 关卡画面(选路枢纽)/ 关卡结算(末节点) | 关卡推进方推进 |
|
||||||
@@ -339,7 +431,7 @@
|
|||||||
| 挖掘→结算 | 明细带自底展开(150ms)+ 棋盘去饱和 + 金橙色相偏移 + 阶段指示翻转 | §2.2 色彩转金橙主导、饱和拉高、明度不变(状态区分经饱和/色相——art-bible §2) |
|
| 挖掘→结算 | 明细带自底展开(150ms)+ 棋盘去饱和 + 金橙色相偏移 + 阶段指示翻转 | §2.2 色彩转金橙主导、饱和拉高、明度不变(状态区分经饱和/色相——art-bible §2) |
|
||||||
| 结算逐行兑现 | 光带自棋盘行起点横扫 → 开格化箭雨/印记化暴击弹道飞向敌人立绘 → 受击闪白 + 血条直角递减 | §2.2 承载元素;因果全程可见可归因(P2) |
|
| 结算逐行兑现 | 光带自棋盘行起点横扫 → 开格化箭雨/印记化暴击弹道飞向敌人立绘 → 受击闪白 + 血条直角递减 | §2.2 承载元素;因果全程可见可归因(P2) |
|
||||||
| 清图换新图 | 金粒喷泉 3–5s → 旧图碎裂淡出 → 新图 install 淡入 | §2.3 短促丰收不拖节奏 |
|
| 清图换新图 | 金粒喷泉 3–5s → 旧图碎裂淡出 → 新图 install 淡入 | §2.3 短促丰收不拖节奏 |
|
||||||
| RAP 清零(战斗结束) | RAP 数字滚动归零(D 区 AP 条)+ 「随战斗结束消散」微文案 | 行动经济可见反馈义务 |
|
| RAP 清零(战斗结束) | RAP 数字滚动归零(D 区右栏)+ 「随战斗结束消散」微文案 | 行动经济可见反馈义务 |
|
||||||
| 敌人死亡 | 血条直角递减至零 → 卡体灰化 + 碎裂退场(禁瞬消) | 敌人系统资产下限(同等 blocking);动画密度归战斗表现 |
|
| 敌人死亡 | 血条直角递减至零 → 卡体灰化 + 碎裂退场(禁瞬消) | 敌人系统资产下限(同等 blocking);动画密度归战斗表现 |
|
||||||
| 状态图标行全清(战斗结束) | 状态逐枚化光收回(B 区站桩图标行)+ 「状态随战斗结束消散」微文案 | 增益状态×4④;RAP 清零同款先例 |
|
| 状态图标行全清(战斗结束) | 状态逐枚化光收回(B 区站桩图标行)+ 「状态随战斗结束消散」微文案 | 增益状态×4④;RAP 清零同款先例 |
|
||||||
| 胜利 | 蜡封自上落下弹跳定格 → 碎砖拼纹章 → overlay 暖金渐显 | §2.4 克制不狂欢 |
|
| 胜利 | 蜡封自上落下弹跳定格 → 碎砖拼纹章 → overlay 暖金渐显 | §2.4 克制不狂欢 |
|
||||||
@@ -377,11 +469,11 @@
|
|||||||
|
|
||||||
无障碍基线权威 = [HUD框架](../gdd/systems/表现与支撑/HUD框架.md)「可访问性基线」节;不再另立专项文档(2026-09-27 拍板,见 OQ2)。本 spec 内建基线承诺(呈现侧落地):
|
无障碍基线权威 = [HUD框架](../gdd/systems/表现与支撑/HUD框架.md)「可访问性基线」节;不再另立专项文档(2026-09-27 拍板,见 OQ2)。本 spec 内建基线承诺(呈现侧落地):
|
||||||
|
|
||||||
- **对比**:全部格底/面板底对数字墨 ≥4.5:1(WCAG AA)——art-bible §4.1 硬指标已可测(#33261B/#C9AF83 = 6.9:1 实测);UI 数据一律墨族素面
|
- **对比**:浮空数字按 art-bible §1.4 第一验收项的复合判据过门(四类底上 max(字芯对底,描边对底) ≥4.5 且字芯对描边 ≥4.5;最亮底岩顶实测描边对底 5.1:1);UI 数据一律墨族素面对面板底 ≥4.5:1
|
||||||
- **色弱冗余**:无任何信息仅靠色相承载——格态靠完整/碎裂形;奖励金 vs 危险红靠剪影+运动;UI 红/金强调对加图标+文案冗余;Boss 靠形状独占(art-bible §4.5 清单逐项成立)
|
- **色弱冗余**:无任何信息仅靠色相承载——格态靠完整/碎裂形;奖励金 vs 危险红靠剪影+运动;UI 红/金强调对加图标+文案冗余;Boss 靠形状独占(art-bible §4.5 清单逐项成立)
|
||||||
- **灰度可辨**:变异格纹带、格态在灰度截图下可分类(art-bible §3.2 验收标准)
|
- **灰度可辨**:变异格纹带、格态在灰度截图下可分类(art-bible §3.2 验收标准)
|
||||||
- **非色彩破坏性确认**:弃图刷新(消耗 RAP 8 点)的确认交互与常规确认**不同位**(位置通道,色弱清单 #7)
|
- **非色彩破坏性确认**:弃图刷新(消耗 RAP 8 点)的确认交互与常规确认**不同位**(位置通道,色弱清单 #7)
|
||||||
- **字号下限**:棋盘数字 ≥18px、明细带正文 ≥14px、tooltip ≥13px(1280×800 基座)
|
- **字号下限**:浮空数字字高 21px(固定,含描边视觉 25px)、明细带正文 ≥14px、tooltip ≥13px(1280×800 基座)
|
||||||
- **运动**:无闪烁 >3次/秒;结算光带为方向性扫动非频闪;提供减动效选项(§Transitions)
|
- **运动**:无闪烁 >3次/秒;结算光带为方向性扫动非频闪;提供减动效选项(§Transitions)
|
||||||
- **键盘/Gamepad**:MVP 纯鼠标可完成全部操作(technical-preferences 平台注记);**MVP 纯键盘导航/焦点序不做**(2026-09-12 拍板——回合制点击驱动,平台仅承诺纯鼠标);gamepad 导航序延后(Open Questions)
|
- **键盘/Gamepad**:MVP 纯鼠标可完成全部操作(technical-preferences 平台注记);**MVP 纯键盘导航/焦点序不做**(2026-09-12 拍板——回合制点击驱动,平台仅承诺纯鼠标);gamepad 导航序延后(Open Questions)
|
||||||
|
|
||||||
@@ -401,12 +493,16 @@
|
|||||||
|
|
||||||
**布局与可读**
|
**布局与可读**
|
||||||
|
|
||||||
- [ ] 1280×800 与 16:9 全屏(canvas_items/expand)下三区(B/C/D)无遮挡、无重叠、无内容裁切(棋盘 12×12 全部格子 + 数字完整可见)
|
- [ ] 1280×800 与 16:9 全屏(canvas_items/expand)下三区(B/C/D)无遮挡、无重叠、无内容裁切(棋盘 12×12 全部格子 + 浮空数字与引导线完整可见)
|
||||||
|
- [ ] D 区基座档读数落预览判据:左/右栏各 200、棋盘 12×12 格 38(原点 x=523、y=296)、14×14 格 32;上方 44px 预留内顶行字完整、无裁切
|
||||||
|
- [ ] 棋盘地形为合并岩体+连续地面:连通未开格共享岩顶/崖面无逐格拼缝;北/西受光棱、南/东崖面与四段投影在位;旧 16+5 瓦片路径零引用、零在库
|
||||||
|
- [ ] 浮空数字+引导线 z 最高:任何地形/小人/特效不遮数字与引导线;格顶阴影圆标出数字所属格
|
||||||
|
- [ ] 深度排序:南侧岩体画在小人之后并自然遮住小人脚底;小人所在格数字仍完整可见
|
||||||
- [ ] 进入战斗屏 ≤500ms 内可交互(棋盘 install 淡入完成后首格可点);同屏 draw calls < 200(technical-preferences 预算)
|
- [ ] 进入战斗屏 ≤500ms 内可交互(棋盘 install 淡入完成后首格可点);同屏 draw calls < 200(technical-preferences 预算)
|
||||||
- [ ] 两种格态(已开格 / 未开格)灰度截图下一眼可辨(排雷玩法×6②)
|
- [ ] 两种格态(已开格 / 未开格)灰度截图下一眼可辨(排雷玩法×6②)
|
||||||
- [ ] 悬停光标区分移动/挖/封印三语义;可挖域(8 向相邻)常驻指示;非相邻格悬停显禁止反馈(排雷玩法×6③)
|
- [ ] 悬停光标区分移动/挖/封印三语义;可挖域(8 向相邻)常驻指示;非相邻格悬停显禁止反馈(排雷玩法×6③)
|
||||||
- [ ] 已引爆危险格呈"可通行可读"(排雷玩法×6④)
|
- [ ] 已引爆危险格呈"可通行可读"(排雷玩法×6④)
|
||||||
- [ ] 全部数字对所在格底对比 ≥4.5:1;明度分层规则无违例(art-bible §2/§4.1——格底功能分档合法,格态语义由形与色相承载)
|
- [ ] 浮空数字按 art-bible §1.4 第一验收项的复合对比判据过门(四类底上 max(字芯对底,描边对底) ≥4.5 且字芯对描边 ≥4.5);明度分层规则无违例(art-bible §2/§4.1——岩顶/地面功能分档合法,格态语义由形与色相承载);棋盘普通数字绘制路径零色牌调用(封印格身份字形色牌为唯一例外)
|
||||||
|
|
||||||
**交互与反馈**
|
**交互与反馈**
|
||||||
|
|
||||||
@@ -426,7 +522,7 @@
|
|||||||
- [ ] 零合法板(棋盘生成 EC5 降级)出现时玩家侧诚实提示(toast,非静默)
|
- [ ] 零合法板(棋盘生成 EC5 降级)出现时玩家侧诚实提示(toast,非静默)
|
||||||
- [ ] 效果行数值为单次贡献值,禁止与池合成值相加呈现;零值伤害行可见不被吞;衰减行按聚合计数呈现(战斗结算 呈现细则)
|
- [ ] 效果行数值为单次贡献值,禁止与池合成值相加呈现;零值伤害行可见不被吞;衰减行按聚合计数呈现(战斗结算 呈现细则)
|
||||||
- [ ] 未生效类行(奖励未生效)携带形状冗余(icon/划线),非色相独载
|
- [ ] 未生效类行(奖励未生效)携带形状冗余(icon/划线),非色相独载
|
||||||
- [ ] 奖励徽章绘制优先级:封印印记之下、变异纹带之上、不进数字区;拾取瞬间 tier 档位可读(地图战斗资源 H1)
|
- [ ] 奖励徽章绘制优先级:封印印记之下、变异纹带之上、不遮浮空数字与引导线;拾取瞬间 tier 档位可读(地图战斗资源 H1)
|
||||||
|
|
||||||
**场景级测试**(缺项即 blocking)
|
**场景级测试**(缺项即 blocking)
|
||||||
|
|
||||||
@@ -469,7 +565,7 @@
|
|||||||
| 排雷玩法×6 | ④ 引爆危险格可通行可读 | §AC |
|
| 排雷玩法×6 | ④ 引爆危险格可通行可读 | §AC |
|
||||||
| 排雷玩法×6 | ⑤ 路径预览裁决 | 布局决策 3 |
|
| 排雷玩法×6 | ⑤ 路径预览裁决 | 布局决策 3 |
|
||||||
| 排雷玩法×6 | ⑥ 单意图帧+voided+拒绝可感知 | §Interaction Map + §States 拒绝子态 + AC |
|
| 排雷玩法×6 | ⑥ 单意图帧+voided+拒绝可感知 | §Interaction Map + §States 拒绝子态 + AC |
|
||||||
| 行动经济 | AP/RAP 常显+刷新入口+清零反馈+双源 | §Layout D 区 AP 条(RAP 贴弃图刷新按钮——2026-09-26 信息归属拍板)+ §Transitions + AC |
|
| 行动经济 | AP/RAP 常显+刷新入口+清零反馈+双源 | §Layout D 区行动资源侧栏(RAP 贴弃图刷新按钮——2026-09-26 信息归属拍板;2026-11-07 顶栏搬两侧)+ §Transitions + AC |
|
||||||
| 战斗结算×3 | ①高光行强调呈现(封印标中金框行/清图 H2 金框行)②完美封印呈现形态 ③棋盘生成 EC5 零合法板提示/补偿/回退形态(toast 提示;补偿/回退不提供——2026-09-12 选型) | §States 高光/清图 + §States 拒绝子态 + §AC;注:结算明细屏 = 战斗结算 UX Flag 事项,由本 spec 承载 |
|
| 战斗结算×3 | ①高光行强调呈现(封印标中金框行/清图 H2 金框行)②完美封印呈现形态 ③棋盘生成 EC5 零合法板提示/补偿/回退形态(toast 提示;补偿/回退不提供——2026-09-12 选型) | §States 高光/清图 + §States 拒绝子态 + §AC;注:结算明细屏 = 战斗结算 UX Flag 事项,由本 spec 承载 |
|
||||||
| 敌人系统×4 | 意图映射/恒定/顺位/敌方池 | §Component Inventory 敌人站桩立绘 + **意图线索映射目录(敌人系统×4① 成文占位,资产定稿归战斗表现)** + AC |
|
| 敌人系统×4 | 意图映射/恒定/顺位/敌方池 | §Component Inventory 敌人站桩立绘 + **意图线索映射目录(敌人系统×4① 成文占位,资产定稿归战斗表现)** + AC |
|
||||||
| 增益状态×4 | 常显+空态/来源标注/溢出/去留 | §States 空态 + §AC |
|
| 增益状态×4 | 常显+空态/来源标注/溢出/去留 | §States 空态 + §AC |
|
||||||
|
|||||||
+10
-4
@@ -138,17 +138,23 @@ tests/
|
|||||||
| 日志 step 行零文案与结构化判读等价 | 表现与支撑 | `PlaytestLogger._on_step_row()`→`PlaytestLogger._append()`(真实结算→落盘 JSONL 读回) | `playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload`;`reward_ineffective_reason_test.gd:_assert_four_reasons` |
|
| 日志 step 行零文案与结构化判读等价 | 表现与支撑 | `PlaytestLogger._on_step_row()`→`PlaytestLogger._append()`(真实结算→落盘 JSONL 读回) | `playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload`;`reward_ineffective_reason_test.gd:_assert_four_reasons` |
|
||||||
| 模态覆盖层编排与输入锁 | HUD框架 | `ModalFlow.locks_input()`/`ModalFlow.open_after_playback()` | `modal_flow_test.gd:_init`;`reward_overlay_test.gd:_run` |
|
| 模态覆盖层编排与输入锁 | HUD框架 | `ModalFlow.locks_input()`/`ModalFlow.open_after_playback()` | `modal_flow_test.gd:_init`;`reward_overlay_test.gd:_run` |
|
||||||
| 模态句柄分域寻址面 | HUD框架 | 局内/菜单/营地三子容器句柄经注册面合同寻址(`UiRegistry.node()` 逐键取层)+模态编排口开合(`ModalFlow.open()`/`ModalFlow.close()`) | `ui_struct_probe.gd:_modal_registry_contract`(registry 合同序段+分域句柄段) |
|
| 模态句柄分域寻址面 | HUD框架 | 局内/菜单/营地三子容器句柄经注册面合同寻址(`UiRegistry.node()` 逐键取层)+模态编排口开合(`ModalFlow.open()`/`ModalFlow.close()`) | `ui_struct_probe.gd:_modal_registry_contract`(registry 合同序段+分域句柄段) |
|
||||||
| 未开格类型微光(8 邻作用集/五组色相/零玩法写入) | HUD框架 | `BoardView.type_glow_probe()`/`UiKit.glow_group_for_cell_type()` | `theme_projection_test.gd:_smoke_type_glow`;`type_glow_test.gd:_test_grouping_closed`;`type_glow_test.gd:_test_frozen_hue_face` |
|
| 未开格类型微光(8 邻作用集、五组色相、零玩法写入) | HUD框架 | `BoardView.type_glow_probe()`/`UiKit.glow_group_for_cell_type()` | `theme_projection_test.gd:_smoke_type_glow`;`type_glow_test.gd:_test_grouping_closed`;`type_glow_test.gd:_test_frozen_hue_face` |
|
||||||
| 棋盘悬停反馈(三语义光标/目标格边框/路径预览点迹) | HUD框架 | `ui_input_probe` 合成鼠标事件→`BoardView._gui_input()`;读面 `BoardView.hover_probe()` | `ui_input_probe.gd:_ready`(case①到达②禁入③路径预览三语义) |
|
| 棋盘悬停反馈(三语义光标/目标格边框/路径预览点迹) | HUD框架 | `ui_input_probe` 合成鼠标事件→`BoardView._gui_input()`;读面 `BoardView.hover_probe()` | `ui_input_probe.gd:_ready`(case①到达②禁入③路径预览三语义) |
|
||||||
| UI 全局主题与按钮五态(含对比度锚) | HUD框架 | `UiKit.button()`/`UiKit.primary_button()` | `theme_projection_test.gd:_smoke_global_theme`;`theme_projection_test.gd:_smoke_button_five_states`;`theme_projection_test.gd:_smoke_contrast_inks`;`palette_token_pairwise_test.gd:_test_pairwise`(色板近色纪律存量面) |
|
| UI 全局主题与按钮五态(含对比度锚) | HUD框架 | `UiKit.button()`/`UiKit.primary_button()` | `theme_projection_test.gd:_smoke_global_theme`;`theme_projection_test.gd:_smoke_button_five_states`;`theme_projection_test.gd:_smoke_contrast_inks`;`palette_token_pairwise_test.gd:_test_pairwise`(色板近色纪律存量面) |
|
||||||
| 中文字体随包与字形覆盖 | HUD框架 | `UiKit.load_font()` | `ui_font_asset_test.gd:_init`;`theme_projection_test.gd:_smoke_global_theme` |
|
| 中文字体随包与字形覆盖 | HUD框架 | `UiKit.load_font()` | `ui_font_asset_test.gd:_init`;`theme_projection_test.gd:_smoke_global_theme` |
|
||||||
| 地形瓦片套与格面数字可读 | HUD框架 | `TilePalette.digit_ink_mode()`/`TilePalette.normalize_floor_luma()` | `terrain_tile_sets_test.gd:_test_set_completeness`;`terrain_tile_sets_test.gd:_test_hue_domains`;`terrain_tile_sets_test.gd:_test_digit_ink_modes` |
|
| 地形瓦片套与格面数字可读 | HUD框架 | `TilePalette.digit_ink_mode()`/`TilePalette.normalize_floor_luma()` | `terrain_tile_sets_test.gd:_test_set_completeness`;`terrain_tile_sets_test.gd:_test_hue_domains`;`terrain_tile_sets_test.gd:_test_digit_ink_modes`(旧行保留,删行归写卡段后续,实现批禁写) |
|
||||||
|
| 棋盘合并岩体与连续地面(深度遮挡、投影、崖面) | 美术圣经 | `BoardTerrainLayer.setup()`/`BoardTerrainLayer.terrain_metrics()` | `board_terrain_test.gd:_test_merged_mass_geometry`;`board_terrain_test.gd:_test_projection_ratios`;`board_terrain_test.gd:_test_depth_order` |
|
||||||
|
| 棋盘浮空数字与引导线(最顶层、顶部预留) | 美术圣经 | `BoardFloatLayer.set_entries()`/`BoardFloatLayer.label_metrics()`/`BoardLabelShadowLayer.setup()` | `board_float_label_test.gd:_test_label_geometry`;`board_float_label_test.gd:_test_topmost_layer`;`board_float_label_test.gd:_test_contrast` |
|
||||||
|
| 棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) | 美术圣经 | `BoardView.refresh()`/`BoardView._visual_rect_for()`/`CellUnit.fog_state` | `board_terrain_test.gd:_test_top_face_anchor`;`board_terrain_test.gd:_test_fog_rect` |
|
||||||
|
| D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) | HUD框架 | `ApBarView.set_ap()`/`ApBarView.set_rap()`/`BoardZoneView._on_board_area_resized()` | `board_side_rail_test.gd:_test_side_rail_layout`;`board_side_rail_test.gd:_test_signals`;`stage_background_test.gd:_test_side_rail_width_from_table` |
|
||||||
|
| 棋盘点击命中与格边公式(逻辑格矩形) | HUD框架 | `BoardView.set_cell_area()`/`BoardView.cell_center_local()` | `board_terrain_test.gd:_test_cell_formula_base`;`board_terrain_test.gd:_test_hit_test_logical_rect`;`layout_probe.gd:_ready` |
|
||||||
|
| 旧瓦片退役与普通数字零底牌 | 美术圣经 | `BoardView.rebuild()`/`BoardView.refresh()`(资产装载与绘制路径) | `board_terrain_test.gd:_test_legacy_assets_absent`;`board_float_label_test.gd:_test_no_ordinary_plate_path` |
|
||||||
| 站桩敌人呈现与结算演出落点 | 战斗表现 | `BattleStageView.enemy_standee_center()`/`BattleEndOverlay.open_victory()` | `standee_fx_sweep_test.gd:_init`;`pacing_queue_test.gd:_init` |
|
| 站桩敌人呈现与结算演出落点 | 战斗表现 | `BattleStageView.enemy_standee_center()`/`BattleEndOverlay.open_victory()` | `standee_fx_sweep_test.gd:_init`;`pacing_queue_test.gd:_init` |
|
||||||
| 站桩呈现定值与素材绑定 | 战斗表现 | `UiKit.load_tex()`/`StandeeBody.name_line_probe()` | `standee_present_values_test.gd:_init` |
|
| 站桩呈现定值与素材绑定 | 战斗表现 | `UiKit.load_tex()`/`StandeeBody.name_line_probe()` | `standee_present_values_test.gd:_init` |
|
||||||
| 站桩显示档与素材分辨率绑定 | 战斗表现 | `StandeeBody.portrait_probe()`/`StandeeMotion.PORTRAIT_DISPLAY_H` | `standee_present_values_test.gd:_check_display_tier` |
|
| 站桩显示档与素材分辨率绑定 | 战斗表现 | `StandeeBody.portrait_probe()`/`StandeeMotion.PORTRAIT_DISPLAY_H` | `standee_present_values_test.gd:_check_display_tier` |
|
||||||
| B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役) | HUD框架 | `BattleStageView.set_board_type()` | `stage_background_test.gd:_test_background_selection`;`stage_background_test.gd:_test_ground_layer_geometry`;`stage_background_test.gd:_test_beams_retired` |
|
| B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役) | HUD框架 | `BattleStageView.set_board_type()` | `stage_background_test.gd:_test_background_selection`;`stage_background_test.gd:_test_ground_layer_geometry`;`stage_background_test.gd:_test_beams_retired` |
|
||||||
| 动画帧数规格(待机/攻击/受击;现役单帧形制锚定) | 战斗表现 | `UiKit.load_tex()`(`TEX_HERO_*` 四态件装载链——棋盘站立/行走与舞台三态同源) | `animation_frame_spec_test.gd:_test_spec_table`;`animation_frame_spec_test.gd:_test_current_form` |
|
| 动画帧数规格(待机/攻击/受击;现役单帧形制锚定) | 战斗表现 | `UiKit.load_tex()`(`TEX_HERO_*` 四态件装载链——棋盘站立/行走与舞台三态同源) | `animation_frame_spec_test.gd:_test_spec_table`;`animation_frame_spec_test.gd:_test_current_form` |
|
||||||
| 战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) | HUD框架 | `BoardView.set_cell_area()`(D 区可用面积 → 格边长);读面 `BoardView.cell_size` | `layout_probe.gd:_ready`;`board_gen_reward_test.gd:_smoke_layout_cell_formula`;`stage_background_test.gd:_test_ap_bar_height_from_table`/`_test_log_band_settle_height`(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) |
|
| 战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) | HUD框架 | `BoardView.set_cell_area()`(D 区可用面积 → 格边长);读面 `BoardView.cell_size` | `layout_probe.gd:_ready`;`board_gen_reward_test.gd:_smoke_layout_cell_formula`;`stage_background_test.gd:_test_side_rail_width_from_table`/`_test_log_band_settle_height`(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) |
|
||||||
| 调参测速批量模拟(逐帧步进与统计读数) | 调参测量 | `TuneSimController.run()`(调试浮窗批量模拟入口) | `tune_sim_batch_parity_test.gd:_init`(配对对拍套件) |
|
| 调参测速批量模拟(逐帧步进与统计读数) | 调参测量 | `TuneSimController.run()`(调试浮窗批量模拟入口) | `tune_sim_batch_parity_test.gd:_init`(配对对拍套件) |
|
||||||
| sim 驱动循环单点(缺省零变化与策略/日志回调形态) | 调参测量 | `BattleDriver.drive_round()`(两参缺省与五参回调两形态) | `battle_driver_drive_test.gd:_smoke_drive_round_contract` |
|
| sim 驱动循环单点(缺省零变化与策略/日志回调形态) | 调参测量 | `BattleDriver.drive_round()`(两参缺省与五参回调两形态) | `battle_driver_drive_test.gd:_smoke_drive_round_contract` |
|
||||||
| 模拟玩家 0 格连锁算子(经真实闭包,零盲挖语义保持) | 调参测量×排雷玩法 | `AutoPlayer._deduce()`(经 `perfect_action()` 装配链) | `auto_player_deduce_test.gd:_smoke_zero_chain_rule` |
|
| 模拟玩家 0 格连锁算子(经真实闭包,零盲挖语义保持) | 调参测量×排雷玩法 | `AutoPlayer._deduce()`(经 `perfect_action()` 装配链) | `auto_player_deduce_test.gd:_smoke_zero_chain_rule` |
|
||||||
@@ -218,7 +224,7 @@ tests/
|
|||||||
| 排雷循环 | 排雷玩法.md | 装板与开局免费展开(封锁格无资源、计入清图);挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒);封印受理即揭示(身份可查、受理零事件);清图口径换代(挖开∪封印、封印可完成清图) | 已覆盖 | — |
|
| 排雷循环 | 排雷玩法.md | 装板与开局免费展开(封锁格无资源、计入清图);挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒);封印受理即揭示(身份可查、受理零事件);清图口径换代(挖开∪封印、封印可完成清图) | 已覆盖 | — |
|
||||||
| 排雷循环 | 棋盘生成.md | 棋盘按参数行出图、数字恒真;同参数同种子逐位复现、异种子不退化;可推理率与清图可达(合法性先于质量分)、重试有界、降级诚实 | 已覆盖 | — |
|
| 排雷循环 | 棋盘生成.md | 棋盘按参数行出图、数字恒真;同参数同种子逐位复现、异种子不退化;可推理率与清图可达(合法性先于质量分)、重试有界、降级诚实 | 已覆盖 | — |
|
||||||
| 排雷循环 | 行动经济.md | AP 扣费、末点耗尽即收轮与战斗收束清零;停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励);下轮行动点修正排队与兑现 | 已覆盖 | — |
|
| 排雷循环 | 行动经济.md | AP 扣费、末点耗尽即收轮与战斗收束清零;停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励);下轮行动点修正排队与兑现 | 已覆盖 | — |
|
||||||
| 表现与支撑 | HUD框架.md | 拒绝反馈分面可辨与未知兜底文案;结算期零逐行文字与 FX 排播链保持;模态覆盖层编排与输入锁;未开格类型微光(8 邻作用集/五组色相/零玩法写入);UI 全局主题与按钮五态(含对比度锚);中文字体随包与字形覆盖;地形瓦片套与格面数字可读;战斗叙述与终局文案(数值带入/胜负互异);玩家面文案与危险格格面字形;战斗屏三区几何与棋盘格边长(分辨率两档×四档板型);B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役);模态句柄分域寻址面 | 已覆盖 | — |
|
| 表现与支撑 | HUD框架.md | 拒绝反馈分面可辨与未知兜底文案;结算期零逐行文字与 FX 排播链保持;模态覆盖层编排与输入锁;未开格类型微光(8 邻作用集、五组色相、零玩法写入);UI 全局主题与按钮五态(含对比度锚);中文字体随包与字形覆盖;地形瓦片套与格面数字可读(旧行保留,删行归写卡段后续,实现批禁写);棋盘合并岩体与连续地面(深度遮挡、投影、崖面);棋盘浮空数字与引导线(最顶层、顶部预留);D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘);棋盘点击命中与格边公式(逻辑格矩形);旧瓦片退役与普通数字零底牌;棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心);战斗叙述与终局文案(数值带入/胜负互异);玩家面文案与危险格格面字形;战斗屏三区几何与棋盘格边长(分辨率两档×四档板型);B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役);模态句柄分域寻址面 | 已覆盖 | — |
|
||||||
| 表现与支撑 | 存档序列化.md | 存档写盘⇄读回往返保真;三槽位隔离与激活失败回滚;槽位摘要窥视与坏槽三态;启动态无激活不写盘;旧档迁移链与断点续玩零跳号;存档⇄RNG 快照往返保真 | 已覆盖 | — |
|
| 表现与支撑 | 存档序列化.md | 存档写盘⇄读回往返保真;三槽位隔离与激活失败回滚;槽位摘要窥视与坏槽三态;启动态无激活不写盘;旧档迁移链与断点续玩零跳号;存档⇄RNG 快照往返保真 | 已覆盖 | — |
|
||||||
| 表现与支撑 | 教学引导.md | — | 未覆盖 | 教学形态与首遇时机待设计;见待办清单「教学形态未定」条 |
|
| 表现与支撑 | 教学引导.md | — | 未覆盖 | 教学形态与首遇时机待设计;见待办清单「教学形态未定」条 |
|
||||||
| 表现与支撑 | 数据配置.md | 全表装载、就绪态与表清单目录对账;进度坐标查行:精确命中/向上取整/封顶/警告去重;运行期越域致命与进程非 0 退出;加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — |
|
| 表现与支撑 | 数据配置.md | 全表装载、就绪态与表清单目录对账;进度坐标查行:精确命中/向上取整/封顶/警告去重;运行期越域致命与进程非 0 退出;加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — |
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
`windows/` 与 `mac/` 子目录各持一套,平台内部照常严格比对,跨平台不互比;
|
`windows/` 与 `mac/` 子目录各持一套,平台内部照常严格比对,跨平台不互比;
|
||||||
平台选择实现单点 = `tools/gate_platform.sh` 的 `gate_platform_id`,比较器 `tools/golden_compare.py`
|
平台选择实现单点 = `tools/gate_platform.sh` 的 `gate_platform_id`,比较器 `tools/golden_compare.py`
|
||||||
自动拼平台子目录)。本目录现持:`windows/`(棋盘三图 `board_L1_dungeon` / `board_L2_underdark` /
|
自动拼平台子目录)。本目录现持:`windows/`(棋盘三图 `board_L1_dungeon` / `board_L2_underdark` /
|
||||||
`board_L3_deep_underdark`,裁剪区 900×760 + 启动态菜单 `menu_boot`,全屏 + 关卡视口两 Shot
|
`board_L3_deep_underdark`,裁剪区 1036×548(D 区基座档全幅;2026-11-07 棋盘地形换代后由探针视图全幅裁剪,
|
||||||
|
原 900×760 口径退役)+ 启动态菜单 `menu_boot`,全屏 + 关卡视口两 Shot
|
||||||
`lmap_entry` / `lmap_boss`——2026-11-05 用户裁两 Shot 面:只对拍关卡最开始(入口停点)与
|
`lmap_entry` / `lmap_boss`——2026-11-05 用户裁两 Shot 面:只对拍关卡最开始(入口停点)与
|
||||||
关卡 Boss 节点(末列锚定),中间过程不对拍)、
|
关卡 Boss 节点(末列锚定),中间过程不对拍)、
|
||||||
`level_map`(关卡画面全屏,历史基线留根——现行闸件未对拍它,由两 Shot 面接替)、
|
`level_map`(关卡画面全屏,历史基线留根——现行闸件未对拍它,由两 Shot 面接替)、
|
||||||
@@ -24,6 +25,9 @@
|
|||||||
- **判有效**(changed 远低于 2% 阈值):基线**留在位**,不得顺手重制;
|
- **判有效**(changed 远低于 2% 阈值):基线**留在位**,不得顺手重制;
|
||||||
- **判失效**(changed 超阈值或换代面落在裁剪区外):**显式重制 + 呈报 + 复闸**,
|
- **判失效**(changed 超阈值或换代面落在裁剪区外):**显式重制 + 呈报 + 复闸**,
|
||||||
禁止先动后判、禁止用「重制一下就绿了」掩盖真实视觉回归。
|
禁止先动后判、禁止用「重制一下就绿了」掩盖真实视觉回归。
|
||||||
- **加严口径(棋盘三图)**:棋盘图 changed>0 且差异像素落在棋盘裁剪区内(900×760)一律按**判失效**
|
- **加严口径(棋盘三图)**:棋盘图 changed>0 且差异像素落在棋盘裁剪区内(1036×548)一律按**判失效**
|
||||||
处理——占比远低于 2% 阈值也不判有效,显式呈报后由用户定是否重制。该口径只收紧棋盘三图的判读,
|
处理——占比远低于 2% 阈值也不判有效,显式呈报后由用户定是否重制。该口径只收紧棋盘三图的判读,
|
||||||
不改写 2% 容差本身的语义(`golden_compare.py` 判据不动);启动态菜单不适用本口径。
|
不改写 2% 容差本身的语义(`golden_compare.py` 判据不动);启动态菜单不适用本口径。
|
||||||
|
- **越格口径(2026-11-07 棋盘地形换代)**:棋盘地形允许越格绘制——岩顶抬升、南/东崖面、四段投影、
|
||||||
|
浮空数字与引导线均按 art-bible §3.2 越出逻辑格边界;**「禁越圈」只约束类型微光层**(按该格抬升后
|
||||||
|
岩顶面 rect 判,不按逻辑格 rect),不约束地形/小人/浮空层。棋盘金标仍按上一条加严口径整幅严格比对。
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# 迭代 56 独立验收审计(结算期文字列表退役批+封印动作改版批)
|
||||||
|
|
||||||
|
> 2026-11-08。审计人=未参与实现的独立子代理;仓库 `D:\code\g-plan2-iter56`(分支 iter56,HEAD=043c24c0,工作区干净);diff 范围 a0ea828f..HEAD(13 个提交,48 文件,+1301/−485)。审计依据=test-conventions §8.7;卡1 验收档=中、卡2 验收档=高(两卡头部申报在案)。全部 grep、diff 与复跑为审计人独立执行,不采信实现报告自述。
|
||||||
|
|
||||||
|
## 一、执行深度声明
|
||||||
|
|
||||||
|
| 审计动作 | 卡1(中档) | 卡2(高档) |
|
||||||
|
|---|---|---|
|
||||||
|
| 对照表逐行核对 | 全量 5 行(R1-R5) | 全量 12 行(R1-R12) |
|
||||||
|
| 判据绑定面抽查 | 3 行(R1/R3/R5,超 ≥2 下限) | 6 行(V1/V2/V3/V4/V9/V10,超 ≥5 下限) |
|
||||||
|
| 测试削弱检查 | 逐处(diff 全部删除行/改判行逐一对申报清单) | 逐处(同左) |
|
||||||
|
| 直查例外核对 | 逐条 | 逐条 |
|
||||||
|
| 最窄测试复跑 | 档位规定省略;实际超额跑 2 件(R1/R5,退出码 0×2) | 跑 1 件(minesweeper_rules_test,含 V1-V4,退出码 0) |
|
||||||
|
| 判据出处抽查 | 3 行(R1/R3/R5 锚句实读) | 6 行(V1/V2/V3/V4/V5/V10 锚句实读对照) |
|
||||||
|
|
||||||
|
## 二、卡1 对照表逐行核对(R1-R5)
|
||||||
|
|
||||||
|
| 行 | 判定 | 依据 |
|
||||||
|
|---|---|---|
|
||||||
|
| R1 结算期零逐行文字 | **缺漏(记账级)——测试实质通过** | 测试在位:`game/tests/unit/presentation/battle_log_zero_text_test.gd`(新增)。真实入口实证=main.tscn 实例→`_start_adventure_from_menu`→选节点→真实战斗→`ms.settle_batch` 挖掘/停手→断言 `main.ui.battle.log_view` 组合根链,未绕过改动点(停手经规则批次入口,与生产停手同路径;行流经真实 step_row→row_pacer 信号链)。尾缀〔退役改 V-退役卡 R1〕grep 命中断言 3 处(:77/:81/:85)+run_all 注册行。绑定面=三时点 parsed_text 冻结于进节点叙述基线(非终屏态),复跑 exit 0。**缺漏本体**:卡 §10 与 game/tests/README.md:137 点名函数 `_smoke_settle_zero_rows` 全仓不存在(断言内联在 `_init`)——白名单 1 授权命名自判,但 §8.9「改名则回表」未履行(能力清单仍载旧名),且实现报告 §三 记「落地一致」失实 |
|
||||||
|
| R2 FX 与 toast 链不断 | 通过(附注记) | `pacing_queue_test.gd:_assert_fx_chain`(:190)在位,尾缀〔退役改 V-退役卡 R2〕命中 8 处断言;真实行集=main.tscn 真实结算采样 step_row,重放独立 RowPacer(生产类),弹道/标出/色环/横幅/toast 计数从行型分布独立推导(防同义反复形态);`standee_fx_sweep_test.gd:_init` 在位未改。附注:卡绑定面写「与改前逐位一致」,落地改为「期望独立推导逐位一致」+「FX 链三函数零 diff」(f0390714 可证)——防镜像性更强,判等价兑现 |
|
||||||
|
| R3 日志零文案、字段不缺 | 通过 | `playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload`(:37)在位;真实入口=LevelAutoplay.run_level 挂 logger→落盘 JSONL 读回(:41-48),非直调 logger。尾缀 R3 命中断言 4 处。改动面核对:playtest_logger.gd 删 text 键+平铺跳 display_name,其余字段与 payload 一行未减(diff 实证) |
|
||||||
|
| R4 分析判读等价 | 通过(读数为提交记载,未独立复采) | `tools/analyze_parity_check.py` 在位(剥名逐位 diff+exit 语义完整);analyze_playtest.py 三处 text 判读改结构化 reason 优先+text 子串兜底双分支(diff 实证,effect_id_of 既有双分支未动)。T0 两份基线快照在盘:`sim-data/改前判读基线_历史锚71000_20261107.md`(3394 行)、`改前判读基线_同种子71000_20261107.md`(149 行),与报告读数行数吻合;三读数一致记载于提交 82725501。改后同种子日志未留盘,审计未复采(复采属读数类采集,不在审计义务内)——以工具+基线+提交读数为凭 |
|
||||||
|
| R5 未生效原因结构化 | 通过 | `reward_ineffective_reason_test.gd:_assert_four_reasons`(:63)在位;真实入口=begin_battle→grant_routed→轮末结账,四类 reason 逐一命中,复跑 exit 0(12 checks)。六发射点 reason 键全部落地(damage_controller/reward_grant×3/combat_segment/grant_segment,diff 实证)。尾缀 R5 的 grep 载体=run_all.gd:216 注册行;套件内断言消息未带尾缀(卡1 各套件落点不统一,注记不判缺) |
|
||||||
|
|
||||||
|
**卡1 削弱检查(逐处)**:diff 全部删除/改判行共 8 处,逐一对申报——①pacing_queue「末信号行原文在明细带」→卡 §10 申报面(:108-120)改判 FX 承接 ✓;②theme_projection 9 类格式化闸→卡 §10 申报(_smoke_battle_log_view)改写 FX 落拍闸 ✓;③player_copy_sweep u6→卡 §10 申报(_sweep_source_names)改防回潮 ✓;④feat_vouchers A12→申报外,§5.5 同生死登记(追认单 #3)✓;⑤ui_click_probe wr1-b 反转+开场行判定面→追认单 #6 ✓;⑥theme/player_copy/ui_probe:133-135 零改动→git diff 实证 ui_probe.gd 空 diff,追认单 #11 属实 ✓;⑦run_all.gd 只增不删 ✓。**未发现申报外削弱**。
|
||||||
|
|
||||||
|
**卡1 直查例外(逐条)**:①reward_ineffective_reason_test hero hp=0/敌 hp=1 直改——测试头注 :7 随行申报「无公开 setter」,报告 R5 行同记 ✓;②该件 `settlement._reward_economy`/`_enemy_system` 私有域直查——旧版 seal_polarity_test 已有 4 处同款(git show a0ea828f 实证),头注注记「seal_polarity 负向直验同款形态」,按既有先例豁免;③pacing_queue/theme_projection 的 FakeStage/FakeFx/FakeBoardZone 为测试替身记参件,非产品内字段直查,不属例外。
|
||||||
|
|
||||||
|
## 三、卡2 对照表逐行核对(R1-R12)
|
||||||
|
|
||||||
|
| 行 | 判定 | 依据 |
|
||||||
|
|---|---|---|
|
||||||
|
| R1 封印受理即揭示 | 通过 | `minesweeper_rules_test.gd:_test_seal_reveal_identity`(:201)在位;**真实入口=settle_batch**(:209/:225 提交 seal_place,未直调 `_do_seal_place`);身份断言=has_seal+`BoardData.cell_identity` 组合(T1b 落位重设计后形态,公开面);受理零 cell_revealed 哨兵在位;尾缀 V1 命中 4 断言。复跑 exit 0 |
|
||||||
|
| R2 挖封印格被拒 | 通过 | `_test_dig_sealed_rejected`(:234)在位:sub_reason=="target_sealed"+封印/揭示/AP 三态零变化,经 settle_batch;seal_polarity 四情况组 ②④改判为拒绝断言(diff 实证,见削弱①);V2 尾缀命中 minesweeper_rules_test 2 处+seal_polarity 8 处 |
|
||||||
|
| R3 清图口径换代 | 通过 | `_test_clear_by_seal`(:255)在位:非末封 false→唯一未完成格=已封印 true→干净板逐格封至清图、round_end 恰一条 path_tag=cleared;全部经 settle_batch。V3 尾缀命中 5 断言 |
|
||||||
|
| R4 能清图的封最优先 | 通过 | `_test_classify_seal_clears`(:292)在位:同批 stop+清图封,赢家=清图封居执行序首、stop voided、round_end=cleared;经 settle_batch。V4 尾缀命中 4 断言 |
|
||||||
|
| R5 判定批与溢价零改动 | 通过 | seal_polarity 保留组(末点 AP/标中溢价/标空负向/完美封印双份)断言原样未改(diff 实证删改仅限四情况 ②④改判面);V5 判据出处注记 grep 命中 2 处(:51/:444)——T4 提交说明称「三函数」,实落 2 处(注记级出入,两保留组函数均有载体,不判缺) |
|
||||||
|
| R6 受理零兑付、改判路径死 | **缺漏(载体级)——实质通过** | 实质面:settlement_wiring_snapshot_test.gd 零改动(git diff 空),内嵌 golden 在「挖+封+停」驱动序下绿(提交 92086027 四套件绿含 wiring_snapshot)——golden 未漂移=改判路径零触发实证;grant_segment :102-104 作废行块删净+流水零作废行(代码 diff 实证)。**缺漏本体**:〔封印改 V6〕尾缀全仓(game/+tools/)grep 零命中——卡原定载体=golden 重录,实测零漂移未重录后载体消失;卡 F9 只为 V11/V12 补了「报告+提交说明」载体豁免,V6 漏补同类豁免 |
|
||||||
|
| R7 破封一击退役、词除名 | 通过 | feats.tres 删行(diff 实证,feat_id=breaker_strike 整块);effect_engine 词表删 dug_under_seal(diff 实证);effect_words_t1 新增出册防回潮断言+adventure_feats V7 注记(:722);grep dug_under_seal/breaker_strike 非测试面=0(审计独立 grep 实证)。注记:effect_words_t1 断言尾缀用卡1 家族「退役改 V7」而非「封印改 V7」——V7 载体在 adventure_feats 在位,家族混用不判缺 |
|
||||||
|
| R8 封印格呈现三件套 | 通过(附注记) | `seal_mark_params_test.gd:_test_seal_on_revealed_visible`(:62)在位:seal_on 与揭示同真印记仍可见(新组合态);board_shot_probe 选择器换代(:145);ui_input_probe case④b 印记落位断言在位。**附注**:卡探针半句「身份字形可查」在 case④b 无显式断言载体——身份字形可观测面由 golden 三图(含字形像素,R12)+V1 身份查询断言+board_view 读 cell_identity 代码(diff 实证)合围,无旧断言被删,不算削弱。直查例外:`u._seal_layer` 直读随行申报(测试注记+卡 §8 R8 行+复核 F12)✓ |
|
||||||
|
| R9 已封印格零动作 | 通过 | ui_input_probe case④c(:288-312 新增):真输入左/右键已封印格 action_requested 零发射+CURSOR_FORBIDDEN+封印禁入框+图例说明在册含「受理即揭示」;V9 尾缀命中 5 断言;判据出处 ux/battle.md 已封印格行(Interaction Map)实读吻合 |
|
||||||
|
| R10 文案四件 | 通过 | hud_presenter_test 文案逐字换代(seal_present 新句+target_sealed 新句,diff 实测与 hud_presenter.gd 逐字一致);player_copy_sweep u4 图例断言换代(含零雷字守恒);ui_click_probe 图例行断言换代(:1218,V10 尾缀在位)。措辞按白名单 2 授权 |
|
||||||
|
| R11 sim 策略对齐+MC 同批重锚 | 通过(载体=报告+提交,卡 F9 豁免在案) | auto_player._constraints 封印身份增强(标中计已知雷/标空剔除,读 board.cell_identity 公开面);level_autoplay 标雷误挖退役→错触直挖 NORMAL_MISDIG_P=0.10(白名单 5+用户裁③);新锚 `sim-data/runsum_iter56reanchor_81000_n50both_20261108.jsonl` 在盘 100 行(审计实证);sim-data/README 现行锚指针换代+改前锚迁历史节+59% 失实注记(diff 实证);三方对照读数与偏差 -1.08 记报告 §四+追认单 #5+提交 043c24c0;规模 50/档=2026-11-08 用户批准在案 |
|
||||||
|
| R12 渲染基线换代 | 通过(载体=报告+提交,卡 F9 豁免在案) | golden 三图 windows 三件换代(diff stat 二进制变更实证);提交 91882776 记 board_shot 双帧取证 PASS+渲染闸三屏绿;用户预览图人审 2026-11-07 在案;mac 三件缺件记遗留(卡 T7 预案:渲染闸 SKIP 不判红)。渲染闸未由审计复跑(昂贵件,以提交读数+基线字节换代为凭) |
|
||||||
|
|
||||||
|
**卡2 削弱检查(逐处)**:diff 删除/改判行共 11 处——①seal_polarity 四情况「直挖受理/隐式退役/零兑付作废」→卡 §8 削弱① ✓(改判后正向断言钉新语义:target_sealed+判定照发);②minesweeper_rules preview 形态 B→卡 §8 削弱② ✓(改判「preview 封印格零外扩」);③hud_presenter/player_copy_sweep 文案逐字→卡 §8 削弱③ ✓;④settlement_wiring golden→卡 §8 削弱④,实测零漂移未重录(追认单 #9),零削弱 ✓;⑤adventure_feats 破封一击断言删→卡 §8 R7 行明示 ✓;⑥种子 42→43+表行 37→36/优秀 13→12 判值换代→申报外 §5.5 同生死(追认单 #7,主区基线 42 绿对照坐实)✓;⑦effect_words 词表断言换代→卡 §8 R7 ✓;⑧board_shot 选择器放宽(has_seal 单条件)→取证选择器非断言放宽,卡 §8 R8 申报 ✓;⑨ui_click_probe 行为②摘除+恢复现场死调用删+簿记调整→卡 §7/§8 R9+追认单 #8 ✓;⑩ui_input_probe case④b 判据出处注记换代、断言体保留 ✓;⑪smoke/critical-paths.md 第 4 条改写→卡 §5/T4 申报 ✓。**未发现申报外削弱**。
|
||||||
|
|
||||||
|
**卡2 直查例外(逐条)**:①seal_mark_params `u._seal_layer` 直读——随行申报 ✓(见 R8 行);②minesweeper_rules_test `_ae._phase=1` 直置与 `_ae._ap` 直读——测试 :34-35 注记「与既有单测直读 action_economy._ap 先例同款」在案;`_ae._ap` 有公开读数(ap)可用,直读属非必要但注记在案、只读断言面,不判缺;③`_rules._safe_remaining()` 私有读——旧版同款既有面;④`_rules.dig_range_bonus=99`/`seal_range_free=true`——公开属性,注记在案;⑤`_board.cell_identity`——公开方法(T1b 后),非例外;⑥cells_probe()/legend ENTRIES——探针公开取证面。
|
||||||
|
|
||||||
|
## 四、判据出处抽查(卡2 6 行+卡1 3 行,规格句实读对照)
|
||||||
|
|
||||||
|
| 行 | 锚 | 独立可写性判定 |
|
||||||
|
|---|---|---|
|
||||||
|
| V1 | 排雷玩法.md:52 | 锚句「封印被受理的那一刻……格下身份当场可见……受理当场零兑付、零事件」——kind/digit 断言与零 cell_revealed 均可独立写出 ✓ |
|
||||||
|
| V2 | 排雷玩法.md:56 | 合法性表「挖|8 向相邻、未开、无封印|……已封印」+「拒绝原因独立可辨」——target_sealed+三态零变化可独立写出 ✓ |
|
||||||
|
| V3 | 排雷玩法.md:139 | 「清图 = 全部安全格完成,完成 = 挖开或封印——封印可以完成清图」——两阶段断言可独立写出 ✓ |
|
||||||
|
| V4 | 排雷玩法.md:167 | 批次语义序表「最先|能清图的挖或封——防止耗尽优先把清图高光结算成最差结局」——赢家断言可独立写出 ✓ |
|
||||||
|
| V5 | 战斗结算.md:139 | 判定批兑付表「标中则兑正向……标空则记归因行+负向」——保留组预期可独立写出 ✓ |
|
||||||
|
| V10 | ux/battle.md:284 | 拒绝细分与 toast 要求实读吻合;字句按白名单 2 授权润色,语义四件(受理即揭示/不可再挖开/随图存续/零动作)全部溯至排雷玩法 :52/:56 ✓ |
|
||||||
|
| 卡1 R1/R3/R5 | 08-Alpha:154/战斗结算:87/:80 | 零逐行文字、日志零文案全字段、四类合法例外 reason——预期值均可自锚句独立写出,非实现镜像 ✓ |
|
||||||
|
|
||||||
|
抽查结论:未发现「预期值只在实现里有的」同义反复断言。R2 的期望计数从行型分布独立推导(非抄实现),形态更优。
|
||||||
|
|
||||||
|
## 五、最窄测试复跑读数(审计独立执行)
|
||||||
|
|
||||||
|
| 测试 | 覆盖 | 结果 |
|
||||||
|
|---|---|---|
|
||||||
|
| `res://tests/unit/core/minesweeper_rules_test.gd` | 卡2 V1-V4(经 settle_batch) | **exit 0**(all green,36 checks;V1-V4 断言全 PASS) |
|
||||||
|
| `res://tests/unit/battle_settlement/reward_ineffective_reason_test.gd` | 卡1 R5 | **exit 0**(all green,12 checks;四类 reason 全命中) |
|
||||||
|
| `res://tests/unit/presentation/battle_log_zero_text_test.gd` | 卡1 R1 | **exit 0**(该测试 _problems 非空才 quit(1),exit 0 即全绿) |
|
||||||
|
|
||||||
|
环境:Godot_v4.7.2-stable_win64_console.exe --headless,工作目录 `D:\code\g-plan2-iter56\game`。只跑单件,未跑全套。
|
||||||
|
|
||||||
|
## 六、缺漏汇总与整改义务
|
||||||
|
|
||||||
|
| # | 缺漏 | 级别 | 整改义务与去向 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 1 | 卡1 R1 点名函数 `_smoke_settle_zero_rows` 未落(断言内联 `_init`);game/tests/README.md:137 仍载旧名;实现报告 §三「落地一致」记载失实;改名未回表 | 记账级(测试实质完整:真实入口/尾缀/绑定面/复跑全过) | 回表改 capability 行函数名=写卡段通道(实现批禁写 README,无法合并前自行修);实现报告 §三 勘误=实现会话合并前可改(reports/ 面合法) |
|
||||||
|
| 2 | 卡2 R6〔封印改 V6〕尾缀全仓无 grep 载体(golden 零漂移未重录,原定载体消失;F9 豁免只补了 V11/V12) | 载体级(实质由未改动绿 golden+grant_segment 删净承接) | 补一处载体注记(settlement_wiring_snapshot_test 或实现报告 R6 行明示载体改报告+提交说明)——随追认单或文档批处理 |
|
||||||
|
| 3 | 观察项(不判缺漏):T4 提交说明称 V5「三函数」实落 2 处;effect_words_t1 尾缀家族用「退役改 V7」;ui_click_probe `_play_one_action` 残留一处不可达 return(:1390 附近,死代码,解析无碍——探针 exit 0 实证可跑);reward_ineffective_reason_test 断言消息未带 R5 尾缀(载体在 run_all 注册行);smoke/critical-paths.md 第 7 条「明细逐行呈现」残留旧口径(卡1 未申报面,建议列反哺点);sim-data/README.md「历史锚(只读不判)」节标题重复两处(:12/:17,编辑残留) | 轻微 | 随下批顺手清或文档批收口 |
|
||||||
|
|
||||||
|
## 七、结论
|
||||||
|
|
||||||
|
**通过**(附上表 2 项记账级缺漏——均不触验收实质:无申报外削弱、无同义反复判据、无真实入口绕过、无直查例外未申报;缺漏 1 的回表通道归写卡段、缺漏 2 归载体注记补登,均不构成合并阻断)。
|
||||||
|
|
||||||
|
依据:17 行对照表全量核对,14 行干净通过、2 行缺漏(R1卡1/R6卡2,实质面均由独立证据承接)、1 行附注(R8 探针半句由 golden+V1 合围);削弱检查逐处零申报外删改;直查例外逐条有申报或既有先例;判据出处 9 行抽查全部可独立写出;最窄测试 3 件复跑全绿(exit 0×3)。卡1 中档四件全做+复跑超额执行;卡2 高档五件全做。
|
||||||
|
|
||||||
|
审计人注:本报告为合并前独立审计(test-conventions §8.7);卡1 中档的远端 CI 现查读数代证义务在合回后由 `tools/ci_check.sh <合并提交>` 兑现,本报告复跑读数已超额覆盖该档复跑面。
|
||||||
@@ -1,292 +0,0 @@
|
|||||||
# 需求卡片:第二 / 三关棋盘观感——亮度与对比度批(T1 定性人闸 · T2 按轴修法 · 验收三件套 · 文档面全走反哺点)
|
|
||||||
|
|
||||||
- 版本:**v1.4(2026-10-17 开工前预授权 U1〔用户于开工前一次性决断,防开发中反复打断〕——①Q2 甲/乙由「延裁·T1 出口现场裁」改**判据自动裁**:甲案候选样张读数达标即直接走甲不停机,仅当读数证伪「纹理太碎」假说时才呈报裁乙;②V2 定向目标带数值授权批内按 T1 实测读数自定并随定性报告呈报,T1 出口人闸只确认轴归因与修法方向;③详见 §10 Q2 条与开工门 U1 预授权条);v1.3(2026-10-17 文档同步闸 v3 口径修订,纯文档批〔分支 carddoc-20261017〕按用户六条裁定执行——①本批(代码实现批)禁写 `design/` 整目录与根规则文件,§5 同步面的同步义务一律执行为「列进 `reports/iter30-反哺点-<完成日>.md`(哪个文件哪一节、改成什么、依据),用户会话裁决后归文档批落文」;②产出物落位换代:实现报告/代拍板追认单/反哺点清单三份落 `reports/`,不再 `design/qa/`;③T5 末卡改「产出物落位卡」(三份 reports/ 文件写齐才算收口);④闸口径按域选档:重闸 = `tools/run_all_gates.sh` 按改动域选档(本批 → `--code`),卡内不再写死闸件名单与「全量档」类字样;⑤实机目检项写进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单,「登记 07」转反哺点;§10 裁决留痕原文不动);v1.2(2026-10-16 裁决留痕版:三卡待裁项按用户令定案——Q3 已裁甲·同批、Q2 延裁留痕并将裁点挂至 T1 出口呈报硬流程步骤、排期栏定实「已编入迭代 30」与三卡串行序位、§4B 跨卡依赖按已裁事实改实、全卡零悬空待裁点;v1.1 同日 grilling 审查修订见 §11;v1.0 同日成文)**
|
|
||||||
- **指路订正(2026-10-20)**:徽章卡(迭代 30 卡①)已按 doc-conventions §11「吸收即死」退役,本卡对其三处指路句改为结论内联+提交号 `7ffd1dc0`,裁决内容零变更。
|
|
||||||
- 来源:[06-待办清单](../design/gdd/06-待办清单.md)「第二 / 三关棋盘观感——亮度与对比度」小节(2026-10-13 用户裁定条)+ [playnote](../playnote.md) 用户试玩原始记录:「UI优化,第二第三关的棋盘看着太累了;不知道是因为亮度还是对比度的原因,看着非常费劲,非常不舒服」
|
|
||||||
- 归属:**表现层美术修批**(06 在册条目直接写卡;两轴归属 = [HUD框架](../design/gdd/systems/表现与支撑/HUD框架.md)(UI 轴)+ [美术圣经](../design/art/art-bible.md)(素材轴),定性前两方共裁——沿用 06 条裁决)
|
|
||||||
- 排期:**已编入迭代 30(2026-10-16 用户令编入,roadmap 行已在案;批内状态刷新列反哺点)**。同迭代三卡串行序位第 3:未开格类型徽章批卡(迭代 30 卡①,已入库合并 7ffd1dc0,卡片已退役)→[战斗一屏样张批卡](需求卡片-战斗一屏样张批-2026-10-16.md)→本卡(徽章→样张→观感)。**并行例外**:本卡 T1/T1b 采样与定性读数允许与前两卡并行穿插——依据=采样是只读动作(出帧/读数/样张均不触碰 golden 三张、样张主板、§5 同步面文档等汇聚文件),落码修改(T2 起)仍按上述序位串行。开工门 = U0,须用户 `/iter` 发令;且 T1 出口定性人闸未过之前禁止动码——该闸 = [06 本条](../design/gdd/06-待办清单.md)既有裁决硬步骤(「开工前先过『素材轴 / UI 轴』定性人闸」,2026-10-13 用户裁定;[08 git 提交史](../design/gdd/08-Alpha版本标准.md) v0.3 同款注),**不是待裁点**(v1.1 撤销原 Q1,见 §10)。
|
|
||||||
- **立场前提(用户原话,本卡设计的第一约束)**:此条立项原因就是用户实机觉得现在的画面累眼、且对「纯程序化重产现状」明确不满——「如果还是用原有方式弄出来的东西,有没有可能还是我不满意的?」。本卡对此的正面回应 = ①第一步定性用**可量化的读数归因**(明度直方图 / 相邻格对比 / 高频能量 / WCAG 对),禁止凭感觉猜轴;②两条修法各自的产出物写清**相对现状新增什么**(§6 T2 两案效果上限表);③**诚实的效果声明**:观感是主观项,机检只能证伪(读数红 = 必有问题)不能证真(读数绿 ≠ 用户满意),**阻塞性人闸全部前置**(T1 定性闸 + 契约 4 方向闸),入库后实机目检按 2026-10-12 用户令口径**登记不阻塞**——目检项登记进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单(「入册 07」列反哺点;[AGENTS.md](../AGENTS.md) 红线「真人检测只登记不阻塞——禁以等目检为停工理由」口径不变),用户复判否决走 §7 V4 回补机制(行回待做 + 06 立残留条,落文按 v3 口径归文档批)。防「改一轮还是不满意」的机制 = **先出改前/改后并排对比读数样张给用户定性确认方向,方向过了人闸才落码**(🔴 契约 4)——方向若被否决,返工停在样张层,不烧落码与基线。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 0. 前置依赖与既有裁决
|
|
||||||
|
|
||||||
| # | 前置 | 内容 |
|
|
||||||
|---|---|---|
|
|
||||||
| P1 | **定性人闸(06 条既有裁决——流程硬步骤,非待裁点)** | 06 原文(445 节内):「开工前须先定性(沿用既有裁决)……两轴修法完全不同,定性错了等于白改一轮」+ 状态行「开工前先过『素材轴 / UI 轴』定性人闸」(2026-10-13 用户裁定条;该要求最早载于 06「奇物呈现优化探讨备忘两孤儿点」(e),本条承接转正)。本卡 T1 即该闸承载,结论过用户确认才进 T2——v1.0 曾把此闸再列 Q1 待裁,v1.1 撤销(禁再问已裁项) |
|
|
||||||
| P2 | **与「呈现层残余 <4.5:1 文字位」条的分工(06 条既有注记)** | 06:451 分工句原文:「本条管**棋盘区域整体的观感**(亮度/对比度/费劲感),是体感问题;『呈现层残余 <4.5:1 文字位』管**具体文字位的对比度读数不达标**(B 区站桩名行/敌顺位徽标/RAP 反馈行三处),是机检可判的硬指标。两条不同面,不互相替代,各自保留」;该文字位条已随迭代 26 T3 完成(06:443)。本卡管棋盘区域整体观感(体感问题),**禁吞并该条**(🔴 契约 2);T1 读数若发现新的文字位红点,另行登记,不并入本卡 |
|
|
||||||
| P3 | **08 标准覆盖行** | [08-Alpha版本标准](../design/gdd/08-Alpha版本标准.md)「五 · 表现」表「棋盘观感(第二/三关亮度与对比度)」行(08:145)现为**待做**(事实源指向本 06 条);Alpha 完成判据 = 全部条目在役 ⇒ 本卡完成时该行 待做→在役 改写列反哺点(§6 T5;时机=本批入库,落文归文档批,目检复判否决的回补机制见 V4) |
|
|
||||||
| P4 | **08 未决项关联(按名指路;v1.1 按实查改写)** | 08「七 · 未决项」现行表含「**素材升档重产进不进 Alpha**」行(2026-10-16 实查为该表第 6 行,另有「**立绘清晰度回退评估**」行——未决项表 2026-10-16 v1.6 重编号过,**行号不作指路依据,一律按名找**);「素材升档重产」在「五 · 表现」表现为**待裁**(08:154)。06「资产升档重产批」条现行状态注记 = 2026-10-04 用户令「暂不做、先忽略,重启=用户点名」+ 2026-10-06「优先级再降」+ 2026-10-06 方案二注记(原升档路线已被八敌逐键定档实质走完、剩余挂起项=提灯点亮解禁候选)。划界:该批面向**立绘/小人帧尺寸升档**,本卡素材轴乙案 = **L2/L3 棋盘瓦片色板/纹理方案重做**——对象、管线、闸面均不同面,**裁本卡乙案 ≠ 放开升档重产**,呈报时须带此划界(§6 T2 乙案行) |
|
|
||||||
| P5 | **渲染闸与基线现状** | 棋盘三关 golden 基线冻结于 2026-09-30(`tools/golden_compare.py:11`),改瓦片/改常量**必然**破 Δ≤16/changed≤2% 容差 ⇒ 基线换代是本卡的确定义务而非例外处理(§7 V3) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. 目标与完成定义
|
|
||||||
|
|
||||||
**目标**:把 L2/L3 棋盘「看着太累」的观感问题**归因到轴**(素材轴 / UI 轴 / 两轴共因),按轴修复,并经用户实机复核确认体感改善。
|
|
||||||
|
|
||||||
**完成定义**(五件齐才算完成,缺一即该条在 06 保持待办):
|
|
||||||
1. T1 定性报告交付:逐关三测面(棋盘瓦片区 / 舞台底与屏根 / 叠加层)读数表 + 归因结论(轴判定,引用具体数值);**T1 出口定性人闸过**(06 已裁硬步骤,P1);
|
|
||||||
2. T2 修法按裁定轴别落码/落素材,既有样张口径闸全部保持绿(A6 梯度均值 ≥4.70、F6 立面双明度带 Δ≥18、格底明度档 §4.1、图底分离——见 §2.4;**注**:该组断言现行落点=样张主板(dungeon 拼板,`render_sample_sheet_v3.py:130-131`),L2/L3 分关实测属本批新建读数件(T1b),见 §11 攻击面 2);
|
|
||||||
3. 验收三件套走完:机检读数达标 + 渲染闸 golden 基线显式重制并呈报换代面 + 用户实机目检轮**登记**(目检项登记进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单,「入册 07」列反哺点;2026-10-12 用户令=登记不阻塞入库,否决走 V4 回补);
|
|
||||||
4. 08「五 · 表现」棋盘观感行 待做→在役 改写列反哺点(含 07 目检登记注;落文归文档批);
|
|
||||||
5. §5 同步面每条在 `reports/iter30-反哺点-<完成日>.md` 有落点(06 对应条目状态更新条在内);权威文档与根规则文件零直改。
|
|
||||||
|
|
||||||
**效果不确定性的诚实声明**:观感是主观项。机检读数能证伪(超带 = 必有问题)不能证真(达标 ≠ 满意)。证真面由**前置人闸**承担(T1 定性闸 + 契约 4 方向样张闸——方向不过不落码);入库后的实机目检轮按 2026-10-12 用户令「真人检测只登记不阻塞」执行,用户复判若仍不满意 = V4 回补机制触发(08 行回待做 + 06 记残留、下批重开),不算本批未入库。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. 现状事实(2026-10-16 实查;开工日自行复核行号)
|
|
||||||
|
|
||||||
### 2.1 关级与瓦片(素材轴现状)
|
|
||||||
|
|
||||||
| # | 事实 | 出处 |
|
|
||||||
|---|---|---|
|
|
||||||
| F1 | 三关板型与图类型:L2 12×12 underdark / L3 13×13 deep_underdark;**L1 行群主体 10×10 dungeon、但含 12×12 dungeon 行**(2026-10-16 逐行实查 `board_gen.tres`——level_index 1 段内有一行 12×12),故 T1 的 L1 参照位读数面须覆盖两种板型(词表 v1.1) | `game/data/tables/board_gen.tres` 各行;`game/data/schemas/board_gen_table.gd:13` |
|
|
||||||
| F2 | 每关瓦片 = **墙 16 件 + 地面 5 变体,合计 21 件**(v1.0 误写「墙类 21 件」,v1.1 订正:16 唯一墙名单单点在 `TILE_WALL_NAMES` 常量数组,件名数=16;21 为总数)按 `terrain_%s_%s.png` / `terrain_floor_%s_%d.png` 格式装载;源 dungeon 套为 v9.3 定稿,underdark/deep_underdark 套由程序换色产出;另有**不参与换色的板面相关件**:`flag_seal.png`(封印旗,三关共用独立可选件) | `game/presentation/views/board_view.gd:80-89`;`tools/recolor_terrain_tiles.py` 头注;素材实盘 `game/assets/art/board/`(underdark/deep_underdark 各 21 件与 dungeon 套同构;素材不入 git,用户裁定) |
|
|
||||||
| F3 | 换色方法 = 槽位家族重映射(wall/facade/floor/crater 四族),**亮度秩序逐像素保持**、确定性零随机、唯一色数与源一致;目标色表在脚本 `PALETTES` 内 | `tools/recolor_terrain_tiles.py:10-12`(方法注)+ `:40-60`(色表) |
|
|
||||||
| F4 | 现行换色色表读值:underdark 地面 `G_BASE (62,66,80)`、crater 最深 `P_DEEP (9,10,15)`;deep_underdark 地面 `G_BASE (46,48,64)`、crater 最深 `P_DEEP (5,5,9)`——**冷蓝紫、低明度、crater 近纯黑**;对照 dungeon 源 `G_BASE (88,66,50)` 暖中明度 | 同上 `PALETTES` |
|
|
||||||
| F5 | 色相域方向(机检在案):underdark ≈180°–260° 灰白蓝紫 / deep_underdark ≈200°–280° 蓝黑紫黑;断言「deep 墙顶明度恒暗于 underdark」 | `game/tests/unit/presentation/terrain_tile_sets_test.gd:61-64, :82`;方向权威 = art-bible §4.3 |
|
|
||||||
| F6 | 图类型换皮四槽(`tile_closed`/`tile_open`/`wall_ambient`/`variant_tint`)与恒定不变槽(信息语义色全图型恒定、格底两档明度关系恒定);格底硬指标:未开墙顶 L≥0.30、已开底走世界底层档候选 L 0.08–0.14、饱和 ≤0.55、避 300°–345° 禁入带 | [art-bible](../design/art/art-bible.md) §4.3 / §4.1「对比硬指标」/ §4.2 紫赤条 |
|
|
||||||
|
|
||||||
### 2.2 UI 轴现状(舞台底与叠加层常量位点)
|
|
||||||
|
|
||||||
| # | 事实 | 出处 |
|
|
||||||
|---|---|---|
|
|
||||||
| F7 | 舞台底 `STAGE_BG #3E342A`(62,52,42)= B 区舞台面板暗底;屏根 `BG_ROOT #3A2E22`;暖亮档 `BG_BRIGHT #453723`(提暖提亮禁近黑配色总纲在册) | `game/presentation/views/ui_kit.gd:111-113, :121`;`battle_stage_view.gd:44-47` |
|
|
||||||
| F8 | 视野迷雾叠加层:灯光区半径 `FOG_RADIUS 8`(基准值改动 = 非白名单须用户);**区外未开格 = 全黑不渲染(不透明纯黑盖全部叠层)**;区外已开格 = 记忆态灰显;雾轮廓 `UiKit.FOG_OUTLINE` | `board_view.gd:137, :817-822`;`board_cell_unit.gd:111-117, :252-256`;规格 = art-bible §6.5 + HUD框架「视野迷雾」节 |
|
|
||||||
| F9 | 数字墨三态管线(v3.4 定案):双峰纹理板(underdark/deep_underdark 系)= 色牌垫底 `DIGIT_PLATE + 深墨 #33261B`;亮族判据 p90 ≥4.5:1 / 均值 ≥2.5:1 | `board_view.gd:987-989`;art-bible §4.1 数字墨条 |
|
|
||||||
| F10 | 类型微光 v2 呈现**规格** = 内缘带状泛光 α170 / 带宽 cell÷8,亮度不压格底明度档(§2 微光例外);五组色带样张 v2 定稿。**v1.1 注**:类型微光游戏内**尚无独立实装**(呈现层仅接触带微光在跑;实施归同迭代 30 的未开格徽章批,见 §4A)——本卡 T1 的微光测面读数源=样张 v2 静态定稿图,实机渲染帧里没有该层 | art-bible §4.2「类型微光色带」条;HUD框架「未开格类型微光」节实装状态行(:130-142) |
|
|
||||||
|
|
||||||
### 2.3 L2/L3 差异面(同批与否的判据)
|
|
||||||
|
|
||||||
- 板型不同(12×12 vs 13×13)、色板不同(F4/F5 两套槽值,deep 系整体再暗一档)、格边长换算随板型变(06 在册「格边长三方取值不一致」条为已知偏差,本卡不动);数字墨模式两关同属双峰板色牌态(F9)。⇒ L2、L3 观感读数**必须分开设点**,修法同批——Q3 已裁甲·同批(2026-10-16 用户令,§10),两关槽值差异由 T1 分关读数(T1b)承载。
|
|
||||||
|
|
||||||
### 2.4 既有量化口径(样张 v3 与机检链,验收判据引用面)
|
|
||||||
|
|
||||||
| # | 口径 | 定值 | 出处 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| C1 | **A6 观感密度:明度梯度均值**(相邻像素相对亮度差均值——高频细节能量;低频双峰由 A3 承载) | ≥4.70(v1 同口径实测 4.09 上调 15%) | `tools/render_sample_sheet_v3.py:26, :338, :1007-1022`(历史脚本注释含 v1 实测值)。**v1.1 核注**:该组断言(A3/A6/F6)现行作用面 = 样张主板(`terrain_*_dungeon` 拼板,脚本 `:130-131`)——L2/L3 瓦片改动**既不会触动这组闸、也测不到它们**;「分关实测」属本批新建读数件(T1b),非现成能力 |
|
|
||||||
| C2 | **F6 立面双明度带** | Δ≥18(现行执法定值 `FACADE_MIN`) | 同上 `:339`、`:996` 消费点与 v3.5 冻结口径注(`:1154`) |
|
|
||||||
| C3 | **A3 图底分离**(墙/地) | **现行执法 = v3.5 冻结定值 A3b Δ≥30**(方向稿实测 38);旧 Δ≥55 系色牌制地板 L0.036 时代校定,与格底分档带数学冲突已退役 | 同上 `:975-979`(退役注+现行 check)、`:1154`;`:23, :340` 之 55 为历史注释残迹 |
|
|
||||||
| C4 | 格底明度档 | §4.1:世界底层档候选 L 0.08–0.14 / 墙顶 L≥0.30 / 饱和 ≤0.55(48 色上限与 RGB 三通道差 ≥8/255 双门在 §4.1 增量纪律在案;「待定现用」态释义同节) | art-bible §4.1 |
|
|
||||||
| C5 | 渲染闸现行链 | `tools/render_gate.sh` 四段:shot_probe 七屏→`shot_checker.py` A–D+F 语义断言(B 文字对比 ≥4.5:1 / C 明度三档带 / D 文字禁压纹理 / F 文字在判据〔2026-10-15 补〕;E 焦点预算归人闸)→ fx/board 取证 → 棋盘三张 golden(差 ≤16、changed ≤2%)→ 菜单 golden;基线重制工具 `tools/golden_baseline_refresh.sh`(缺省模式=棋盘三张;`--menu`=菜单全屏;素材缺位拒跑;呈现批 agent 自行换代+提交说明强制写明触发原因——权限口径在其头注) | `render_gate.sh:8-25, :109-155`;`shot_checker.py:8-19`;`golden_baseline_refresh.sh:2-14` |
|
|
||||||
| C6 | 三关棋盘抓帧承载(读数采样源) | `board_shot_probe` targets = L1_dungeon / L2_underdark / L3_deep_underdark,随 render_gate 周期跑;同关驱动确定性=种子 420000+关号 + novice 18 步 + 1.2s 动画完结等待(可复现)。**v1.1 边界注**:帧面 = 空视口上裸挂 BoardView(900×900)——棋盘瓦片区与迷雾遮罩层**在帧内**,**舞台底/屏根像素不在帧内**(battle_stage_view/BG_ROOT 未实例化);「舞台底/叠加层只在渲染帧里存在」系 v1.0 不准确表述,舞台底为常量平铺(UiKit 可读值)。且 render_gate 过程帧落 mktemp 即弃禁入 git——T1 用帧须自行留档于库外目录 | `game/smoke/board_shot_probe.gd:34, :38-66`;`render_gate.sh:22`(过程产物纪律) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. 设计契约(红线,违反 = L3 停机呈报)
|
|
||||||
|
|
||||||
🔴 **契约 1 · 零玩法逻辑变更**:只动呈现(瓦片素材/色表、舞台底与叠加层常量、样张脚本判据)。板生成、数字真值、迷雾判定逻辑、`FOG_RADIUS` 基准值(改动须用户,`board_view.gd:137` 注)零触碰。
|
|
||||||
|
|
||||||
🔴 **契约 2 · 禁吞并文字位条**:「呈现层残余 <4.5:1 文字位」是另一面(该条已随迭代 26 完成,本卡不复活、不并账);本卡发现的任何文字位新红点 = 新登记条目,另批处理。
|
|
||||||
|
|
||||||
🔴 **契约 3 · 色板纪律不破**:任何换色/重产色板须过 art-bible §4.1 增量纪律双门(48 色上限、与既有任一色 RGB 三通道差 ≥8/255)+ §4.2 语义检查与信息面禁入带 300°–345°;素材轴甲案并须保持 recolor 脚本的亮度秩序逐像素保持方法学(改了方法 = 换案,须重述本契约)。
|
|
||||||
|
|
||||||
🔴 **契约 4 · 样张先行、方向人闸后落码**:T2 任一修法落码前,必先出**改前/改后并排对比样张 + 读数表**给用户定性;用户未确认方向 = 停在样张层,禁先行改素材改常量。此条是「防改一轮还是不满意」的机制本体。**v1.2 注**:素材轴甲/乙裁决呈报件(§6 T1 呈报硬步骤)与本闸是同批产物——用户呈报现场裁甲后,裁甲案时本闸即已过关、不重复呈报;裁乙案时乙方向样张另走本闸。
|
|
||||||
|
|
||||||
🔴 **契约 5 · 机检 ≠ 观感,前置人闸承担方向证真**:读数达标只构成必要条件,机检不能证明满意——「证真」面由**前置**人闸承担(T1 定性闸〔06 已裁〕+ 契约 4 方向样张闸)。入库后的实机目检轮按 2026-10-12 用户令口径执行(AGENTS.md 红线「真人检测只登记不阻塞」):目检项登记进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单即完成义务、不卡入库(「入册 07」列反哺点);**禁把「机检全绿」写成「用户满意」的等价表述**——用户复判否决时按 V4 回补(08 行回待做 + 06 记残留、下批重开,落文按 v3 口径归文档批)。(v1.1 改写注:v1.0 本条「完成判定必须含用户实机目检轮、目检未过禁宣布在役」与 2026-10-12 用户令冲突,已对齐。)
|
|
||||||
|
|
||||||
🔴 **契约 6 · golden 基线换代显式化**:改图必破基线——重制走 `tools/golden_baseline_refresh.sh` 显式流程(缺省模式重制棋盘三张:board_shot_probe 抓帧→`golden_board_crop.py` 按 meta 坐标裁剪→覆盖 `game/tests/golden/` 三张;触及菜单态加跑 `--menu`),并逐屏呈报换代面(新旧基线并排,沿 render_gate S2 停机点口径);权限与义务=呈现批 agent 自行换代、**提交说明强制写明触发原因**(refresh 脚本头注 Q6 在册);前置=素材齐盘(脚本逐项守卫,缺位拒跑)。**禁先刷基线后改图**(基线是判据不是障碍物)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. 范围边界
|
|
||||||
|
|
||||||
**做**:L2/L3 棋盘区域观感的定性归因(T1)、按轴修复落码(T2)、同批策略(T3)、验收三件套与基线换代(T4)、产出物落位(T5)。
|
|
||||||
|
|
||||||
**不做**(明示去向):
|
|
||||||
- 不动 L1 dungeon 套外观——除非 T1 读数显示问题为系统性共因(如迷雾档/舞台底全关同因,则 UI 轴修法天然全关生效,素材轴仍只动 L2/L3 色表);
|
|
||||||
- 不动数字墨三态管线本身(`_digit_ink_mode` 选模逻辑维持),只动其消费的板面;改后三模式断言 `terrain_tile_sets_test` 必仍绿;
|
|
||||||
- 不做「格边长三方取值不一致」条的处置(06 在册待扩板定档,另批);
|
|
||||||
- 不做「立绘清晰度回退评估」/「素材升档重产」两未决项的代裁(本卡甲/乙裁点仅覆盖棋盘瓦片重产路线,且已挂至 T1 出口呈报硬流程步骤——裁决留痕见 §10,未决项不代裁、禁重开);
|
|
||||||
- 不动未开格类型微光的呈现规格(§4.2 单通道纪律维持;**该层引擎尚未实装,实施归未开格徽章批——§4B**;T1 会把微光层列为读数额外测面〔证据级别=样张 v2 静态图,F10〕,T2 无「动参数」可言——若归因指向它,处置为联裁或走 art-bible §4.2 修订登记)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4B. 跨卡依赖(同迭代 30 的两张同板面批——v1.1 新增;v1.2 按 2026-10-16 三卡已裁定案改实)
|
|
||||||
|
|
||||||
本卡与**未开格类型徽章批**(迭代 30 卡①,已入库合并 7ffd1dc0,卡片已退役)、**战斗一屏样张批**(`需求卡片-战斗一屏样张批-2026-10-16.md`)共用 L2/L3 板面,事实与已裁结果如下(只列事实与裁决留痕,他批未裁项仍不代裁):
|
|
||||||
|
|
||||||
| # | 交叠面 | 事实 | 本卡处置 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| X1 | **徽章批微光层 × 本卡格底/墙顶瓦片改色,同一张未开格面** | 徽章批把五组类型微光实装进未开格(其 T0-② 五组明度档以 art-bible §4.1「未开格底 L≥0.30 不被压破」为约束基线);本卡素材轴改的正是 `tile_closed`(墙顶/未开底)明度——**两批改同一板面、先后互为约束**:本卡若抬/压墙顶档,徽章批五组明度档取值基线随之移动。art-bible §4.3 共同纪律已册:「三套候选色相均须与五组类型微光色带(§4.2)抽测互辨(格底与微光同在未开格面,邻近色相有吞没风险)」(:379) | 色板/微光互辨复测两批并档一次跑;本卡新色表呈报件须含「对五组微光色带吞没风险」逐项比对;**v1.2 定实(2026-10-16 用户令)**:三卡串行序位徽章→样张→观感(排期栏),golden 棋盘三张换代次数=先落者(徽章批)刷一次、本卡作为后落者再刷一次,不再挂呈报定序;徽章批微光**明度档 provisional 值**(其 Q2 已裁甲=本批定档)与本卡**格底明度档同基线**(art-bible §4.1 格底档 L 0.08–0.14、墙顶/未开格底 L≥0.30)——两卡改格底/叠光时须逐位比对 golden 防互踩,该约束已同步写入 §6 T2 修法约束 |
|
|
||||||
| X2 | **战斗一屏样张批 Q1(素材输入级别)/Q3(渲染手段)与本卡乙案(瓦片重产)** | 样张批 Q1 丙案语义 =「样张反向给素材重产提规格」;样张批明示「本批不重产任何正式素材」——**重产的产出义务全在本卡(若裁乙)**,样张的规格输入义务也在本卡上游对齐;若样张批先以占位板面冻结,本卡乙案重产后整屏样张的板面内容过期 | **v1.2 定实(2026-10-16 用户令)**:样张批已裁 **Q1 丙**(样张反提素材规格)/**Q3 乙**(引擎实拍+shader)——本卡乙案(远程生图重产)**若**在 T1 出口呈报后被裁,瓦片规格**必须与样张卡已冻结的目标规格清单对齐,先后次序=样张规格先行、本卡乙案在后**;甲案 recolor 换色不触样张主板(dungeon 拼板,C1 核注),对样张批零连带、不受该次序约束 |
|
|
||||||
| X3 | **徽章批「不动格底明度档、棋盘瓦片素材、图类型换皮四槽」红线(其 §4 不做条)** | 徽章批单向避撞本卡面;反向不成立——本卡改瓦片会动其微光绘制基面(其 F5:微光画在 CellUnit `_draw` 瓦片层上) | 本卡任何改图产物过 V5 时须同时跑徽章批既有断言面(若其已入库);串行序位已定实(徽章→样张→观感,排期栏)——徽章批先落,本卡 T1 报告按该序位复核 X1/X3 承接项,不再挂定序呈报 |
|
|
||||||
|
|
||||||
**结论笔**:两依赖均为**次序与规格联动**问题,不是范围冲突;2026-10-16 用户令已定案——串行序位徽章→样张→观感(排期栏)、Q3 已裁甲(同批)、Q2 甲/乙裁点挂 T1 出口呈报硬流程步骤(§6 T1/§10);本卡无悬空待裁点。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. 关联文档同步面
|
|
||||||
|
|
||||||
> **v1.3 执行口径(2026-10-17 文档同步闸 v3)**:本批(代码实现批)**禁写 `design/` 整目录与根规则文件**,唯一可写目录 = `reports/`(`active.md` 唯一例外)。下表「同步义务」列一律执行为「列进 `reports/iter30-反哺点-<完成日>.md`:哪个文件哪一节、改成什么、依据,用户会话裁决后归文档批落文」——下表保留原关联点事实供写反哺点条目时对表。
|
|
||||||
|
|
||||||
| 文档 | 关联点 | 同步义务(v1.3 全部=反哺点列清单,另注者除外) |
|
|
||||||
|---|---|---|
|
|
||||||
| [06-待办清单](../design/gdd/06-待办清单.md) 本条 | 状态行改写(定性报告交付/完成注记);T1 发现的新红点若立新条则同批登记 | 反哺点 · 列清单待裁 |
|
|
||||||
| [08-Alpha版本标准](../design/gdd/08-Alpha版本标准.md) 「五 · 表现」棋盘观感行 | 待做→在役(完成定义第 4 件;批入库时改写并顺带 07 目检登记注;用户复判否决走 V4 回补——行回待做+06 记残留) | 反哺点 · 完成时列清单 |
|
|
||||||
| [art-bible](../design/art/art-bible.md) §4.1/§4.3(素材轴改色表值)或 §6.5/§7(UI 轴改常量方向) | 数值定值单点纪律:改值 = 走该节修订并登记(「待定现用」态),禁只改代码不改文档 | 反哺点 · 列清单待裁(条目写明改值与修订登记要求) |
|
|
||||||
| [HUD框架](../design/gdd/systems/表现与支撑/HUD框架.md) 视野迷雾节 | 仅当 T2 裁到迷雾灰显档参数时 | 反哺点 · 条件列清单 |
|
|
||||||
| [07-体验验证清单](../design/gdd/07-体验验证清单.md) | T4 登记实机目检条目(L1/L2/L3 并排看后问卷式回报) | 反哺点 · 列清单待裁(目检项另进 reports/ 实现报告目检总清单) |
|
|
||||||
| [roadmap](../roadmap.md) | 迭代 30 行已编入(2026-10-16 用户令,行已在案);余留义务=估时刷新(T5) | 反哺点 · 列清单待裁 |
|
|
||||||
| `active.md` 状态记录 | 本批条目进度刷新 | **本批更新(唯一例外 · 会话状态源)** |
|
|
||||||
| `tools/recolor_terrain_tiles.py` / `game/tests/golden/` | 甲案色表修订 = 脚本内定值换代;golden 基线三张重制 | 工程面 · 随修法落地(可写) |
|
|
||||||
| [playnote](../playnote.md) | 历史试玩记录不回改(沿革留档),本卡即其正式承接 | 无义务 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. 任务卡
|
|
||||||
|
|
||||||
> 估时按工作日口径;每卡出口自跑轻闸;批末重闸 = `tools/run_all_gates.sh` 按改动域选档(本批 → `--code`)全绿才合入(脚本即唯一闸清单,卡内不另列名单)。
|
|
||||||
|
|
||||||
### T1 定性步骤(人闸前置;含 T1b 新建采样件合计 ≈2–2.5d,**必先做,产出物 = 定性报告 + 对比样张**)
|
|
||||||
|
|
||||||
逐关(L1 参照位·注意含 10×10 与 12×12 两板型〔F1〕 / L2 / L3)三测面采样。**采样源按测面分治(v1.1 修正)**:
|
|
||||||
- 测面一(棋盘瓦片区)与测面三(迷雾遮罩部分)= `board_shot_probe` 实机渲染帧(确定性可复现,C6;过程帧 render_gate 即弃——本批帧自行留档于库外目录,读数表进 `reports/iter30-实现报告-<完成日>.md`);**禁拿素材文件代替渲染帧**(迷雾遮罩/揭示态只在渲染帧里存在);
|
|
||||||
- 测面二(舞台底与屏根)= **现有探针拿不到**(board_shot_probe 帧内无舞台底/屏根像素;shot_probe 战斗屏只到 L1 首战)⇒ 由 **T1b 新建采样件**补齐,见下;退而求其次可用 UiKit 常量×帧内实测值合成 WCAG 对(可算,但板缘对比带需几何语境,合成判据只能佐证不能实证);
|
|
||||||
- 测面三中的类型微光贡献 = 读数源仅样张 v2 静态定稿图(引擎未实装,F10),T1 报告如实标注该测面的证据级别。
|
|
||||||
|
|
||||||
输出读数表:
|
|
||||||
|
|
||||||
| 测面 | 指标(全部数值化,禁裸形容词) |
|
|
||||||
|---|---|
|
|
||||||
| 棋盘瓦片区 | 整板明度直方图 p10/p50/p90;A6 同口径**明度梯度均值**(相邻格/相邻像素亮度差——高频能量);唯一色数与色域跨度 |
|
|
||||||
| 舞台底与屏根 | `STAGE_BG`/`BG_ROOT` 对棋盘墙顶、米白装饰族的两两 **WCAG 对比对**;三档带序(shot_checker C 断言口径的层带思想,按帧实测复算——其现行取样面是 L1 战斗屏,不直接复用)实测值——**取样依赖 T1b 全框帧** |
|
|
||||||
| 叠加层 | 迷雾**全黑档面积占比**(区外未开格 = 不透明纯黑)与记忆档灰显值;色牌占板面像素占比;微光带宽与泛光 α 的观感贡献(**证据级别=样张 v2 静态图,引擎未实装——F10**;若徽章批同迭代先行实装则可升级为帧内实测,见 §4B) |
|
|
||||||
|
|
||||||
**T1b 新建采样件(批内任务,≈0.5–1d;v1.1 补——v1.0 默认现成件够用,实查不成立)**:给测面二供帧、并承载 **L2/L3 分关读数**(直方图/A6 同口径梯度按关出值——样张 v3 断言现只跑主板,C1 核注)。落点取一(白名单 1 域内):① 扩 `board_shot_probe` 加全框模式(BoardView 挂进 battle_stage_view/屏根底之上出 L2/L3 全框帧,与既有三张 golden 取样帧互不污染);② 新建 L2/L3 战斗整屏取证探针(shot_probe 真实路径口径只达 L1 首战,扩关需确定性到达方案)。出口判据:帧面含棋盘+舞台底+屏根三层且逐跑可复现。
|
|
||||||
|
|
||||||
**归因判据(写死在报告模板里)**:
|
|
||||||
- 素材轴信号 = L2/L3 板区读数与 L1 参照位在 明度带(对照 §4.1 档)/ 梯度均值 / 色域 上的偏离为主因(例:crater `P_DEEP (5,5,9)` 近纯黑叠加迷雾纯黑 ⇒ 大面积死黑;亮部墙顶跨度过大 ⇒ 闪烁感;「纹理太碎」假说在案最强证据 = 2026-10-14 美术审计结论条「第二 / 三关地面是近黑斑加亮筋的双峰纹理——数字无论亮墨还是垫牌,盯久了都会累。这不是再叠一层界面能救的」〔`reports/美术审计-cursor会话存档-2026-10-14.md` 结论区〕);
|
|
||||||
- UI 轴信号 = 舞台底/叠加层贡献为主因(例:全黑面积占比 × 边缘对比产生的频闪感;`STAGE_BG` 对板缘对比带过宽);
|
|
||||||
- 两轴共因 = 两类偏离同时显著(报告须给出各自量级占比,修法按主次分配工作量)。
|
|
||||||
|
|
||||||
出口 = 定性报告 + **改前基准样张**提交用户,过 **T1 出口定性人闸**——06 已裁硬步骤(P1:「开工前先过『素材轴 / UI 轴』定性人闸」),闸上同时冻结轴归因结论与 §7 V2 定向目标带数值;v1.0 曾误把该闸本身列为待裁点 Q1,v1.1 撤销(禁再问已裁项)。
|
|
||||||
|
|
||||||
**T1 出口素材轴甲/乙裁决呈报点(v1.2 新增硬流程步骤——Q2 延裁所挂裁点的具名呈报动作,裁决留痕见 §10)**:
|
|
||||||
- **触发条件**:T1 归因结论产出即触发,随定性报告一并呈报(无论归因指向哪条轴,呈报不可省略);
|
|
||||||
- **动作**:开工默认先做**甲案(recolor 换色)候选样张**——按甲案试算槽值出改前/改后并排样张,用 T1b 分关读数证伪「纹理太碎」假说(甲样张读数达标而用户方向仍否决 = 指向乙);
|
|
||||||
- **产物与落点**:改前/改后并排样张 + 分关读数表(含甲案试算槽值清单)随定性报告呈报用户。**v1.4 预授权(2026-10-17 用户裁)**:甲案样张读数达标即按 §10 Q2 判据**自动走甲**、不停机等现场裁;仅当读数证伪「纹理太碎」假说时才呈报裁乙(呈报内容照旧:改前/改后并排样张+分关读数表)。结论按 §10 格式补记留痕后即成 T2 执行依据——裁点由该具名动作承载,全卡不留悬空待裁点。
|
|
||||||
|
|
||||||
### T2 修法(按轴分支;≈1.5–2.5d,落码前须过契约 4 对比样张人闸)
|
|
||||||
|
|
||||||
**素材轴——甲/乙裁点已由 2026-10-16 用户令定为「延至 T1 定性读数出具后再裁;开工默认先做甲案候选样张以证伪纹理说」(裁决留痕 §10;呈报硬流程步骤见 §6 T1 末)**:
|
|
||||||
|
|
||||||
| 案 | 产出物**相对现状新增什么** | 效果上限 | 成本与风险 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| **甲 · recolor 程序换色重校** | 新色表(`PALETTES` 两族槽值修订:抬地面明度地板、压 crater 近黑与墙顶亮端跨度、家族间 Δ 重排)+ 改前/改后并排样张 + 基线换代。输入面(v1.1 实查):脚本只重映射 wall/facade/floor/crater 四族颜色的 `terrain_*_dungeon.png`→underdark/deep_underdark 两套,**L2/L3 板面瓦片 2×21 件全在其输入面内**;不在输入面的板面相关件=`flag_seal.png`(三关共用,若归因触它另行呈报) | 确定性、可复现、逐项可机检比对;**明度水平与色相可调,纹理高频结构逐像素保持**——若 T1 归因指向「亮度秩序/对比带」,本案直达;若指向「纹理本身太碎/太 busy」,本案调不动(方法学上限——脚本头注定死「亮度秩序逐像素保持」,高频结构不改;在案佐证=2026-10-14 美术审计「双峰纹理…不是再叠一层界面能救的」) | 低;零新素材;不破 §4.3 三关方向需在修订登记中说明偏转幅度 |
|
|
||||||
| **乙 · 瓦片重产(远程生图管线)** | 按新规格重出 L2/L3 瓦片([remote-gen-prompts](../design/art/remote-gen-prompts.md) 对话操作单 + [art-prompts](../design/art/art-prompts.md) 词库),纹理本体可重设计 | 上限高——高频细节/材质/装饰密度均可换;代价 = 非确定性、过闸周期长、需重锁色板与重跑 `terrain_tile_sets_test`+样张全套 | 高;与 08「五 · 表现」**待裁**行「素材升档重产」及 06「资产升档重产批」条(按名指路,08 未决项表行号以实查为准)方向相邻不同面——该批=立绘/小人帧尺寸升档(2026-10-04 用户令暂不做、重启=用户点名),本卡=棋盘瓦片色板/纹理方案重做,**裁本案不等于放开升档**,呈报须带划界;样张批 Q1 已裁丙案(样张反提素材规格,2026-10-16 用户令)——本案规格以其已冻结目标规格清单为上游,次序=样张规格先行(§4B X2) |
|
|
||||||
|
|
||||||
**T2 修法约束(v1.2 新增,承载 §4B X1/X2 已裁事实)**:①本卡改格底明度档与徽章批叠微光同基线(art-bible §4.1 格底档 L 0.08–0.14)——落码后两卡逐位比对 golden 棋盘三张防互踩;②串行序位徽章→样张→观感(排期栏),本卡落码在两批落码之后,基线换代走契约 6 显式流程;③若 T1 出口裁乙,瓦片规格与样张卡已冻结目标规格清单对齐,次序=样张规格先行(§4B X2);裁甲则对样张批零连带。
|
|
||||||
|
|
||||||
**UI 轴——参数重校(现读常量与候选方向,全部走样张人闸后定值)**:
|
|
||||||
- 迷雾全黑档:现值 = 不透明纯黑盖全部叠层(HUD框架/art-bible §6.5 三档信息阶梯的既有裁决,改它 = 改概念定义,须回 HUD框架 修订);候选方向 = 保持三档结构下调不透明度或对纯黑加主题 tint——**列为 T2 内二级裁点,报告须呈报不动定义的纯参数位有哪些先穷尽**;
|
|
||||||
- 舞台底:`STAGE_BG #3E342A` 对板缘对比带宽——候选 = 向 `BG_BRIGHT #453723` 方向提一档或收窄棋盘外缘留白;
|
|
||||||
- 色牌/微光占用:色牌垫底是 v3.4 定案(改板纹理高频结构才谈撤牌);**类型微光引擎未实装(F10),本卡对该层无可动参数——读数若显示微光规格(α170/带宽 cell÷8)贡献显著,处置=与未开格徽章批联裁实施参数或走 art-bible §4.2 修订登记,呈报为 L3 停机点(触既定裁决面),不在本卡单方改动**。
|
|
||||||
|
|
||||||
### T3 L2/L3 同批与否(≈0.25d 结论笔)
|
|
||||||
|
|
||||||
事实:两关色板两套槽值、板型 12×12 vs 13×13、数字墨同模式(§2.3)。两案成本对照(v1.1 中立化留档;v1.2 已裁,见下):**同批** = 一次基线换代、一轮目检登记,色表两套槽值各改各的、互不连带;**分两批** = golden 链换代两次、目检登记两轮,单批体量更小、L3 可在 L2 复判后单独叫停。**Q3 已裁(2026-10-16 用户令,§10):甲·同批**——理由=基线换代与目检各只走一轮;两关槽值差异由 T1 分关读数(T1b)承载,不需以拆批消化。
|
|
||||||
|
|
||||||
### T4 验收三件套与换代(≈1–1.5d)
|
|
||||||
|
|
||||||
1. 机检读数达标:见 §7 V2 判据表;
|
|
||||||
2. **渲染闸基线换代**:跑 `tools/golden_baseline_refresh.sh`(缺省模式=棋盘三张;触及菜单态加 `--menu`)显式重制基线,呈报换代面与新旧读数差、提交说明写明触发原因(契约 6 实操步骤);
|
|
||||||
3. 用户实机目检轮:目检项(玩法:L1/L2/L3 各开一局,并排回报「费劲感」相对改善)登记进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单——登记即完成本批义务、不阻塞入库(2026-10-12 用户令;「入册 07」列反哺点);用户复判否决走 V4 回补。方向级否决(样张层)已在契约 4 前置拦截,本步只剩终验。
|
|
||||||
|
|
||||||
### T5 产出物落位卡(≈0.5d,末卡——三份 reports/ 文件写齐才算收口)
|
|
||||||
|
|
||||||
轻闸全绿后、合并前,把本批三份 `reports/` 产出物写齐(权威文档与根规则文件零直改;`active.md` 状态记录照常更新):
|
|
||||||
|
|
||||||
1. `reports/iter30-实现报告-<完成日>.md`——各卡状态+**实机目检总清单**(T4-3 目检条目)+遗留读数义务+T1 定性报告读数表归档指引+变异验证记录表(新建断言/读数件的注入实验记录);
|
|
||||||
2. `reports/iter30-代拍板追认单-<完成日>.md`——§9 白名单内代拍板逐项留痕(含 Q2 甲/乙现场裁决的留痕补记);
|
|
||||||
3. `reports/iter30-反哺点-<完成日>.md`——§5 同步面每条一落点(哪个文件哪一节、改成什么、依据):06 本条状态行、08「五 · 表现」棋盘观感行(含 07 目检登记注与 V4 回补条款)、art-bible §4.1/§4.3 或 §6.5/§7 修订登记条(色值/常量若动)、HUD框架迷雾节(迷雾参数若动)、07 入册条、roadmap 估时刷新。
|
|
||||||
|
|
||||||
**原 §5 机械面直改义务零执行(v3 口径),落文归文档批。**
|
|
||||||
|
|
||||||
**估时合计 ≈ 5–7d**(v1.1 上调:T1 新增 T1b 采样件 0.5–1d;v1.0 为 4–6d——彼时漏了采样件,批内各卡加总实为 4.25–6.25d);**v1.2 估时不动**:Q2 延裁的甲案候选样张与契约 4/T2 样张同源产出,仅时点前移至 T1 出口呈报点,批内不新增总量;T1b 职责不变(全框帧+分关读数与甲/乙裁决无涉),不因本批裁决再调;天然切分点:**T1 末**(定性报告+甲/乙裁决呈报即交付物,人闸天然停点)、**T2+T3 末**(修法落地)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. 验证闸(逐需求点验收清单)
|
|
||||||
|
|
||||||
| # | 需求点 | 测什么 | 判据 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| V1 | T1 定性报告 | 读数表覆盖 3 关 × 3 测面 × 各指标(§6 T1 表全列,测面二经 T1b 全框帧);L1 参照位在场(含两板型,F1);归因结论引用数值;**v1.2 增**:甲/乙裁决呈报件(甲案候选样张+分关读数表)随报告同出、用户当场裁决记录在案(§6 T1 呈报硬步骤) | 报告模板齐件 + 用户过闸记录在案(**T1 出口定性人闸=06 已裁硬步骤,P1**;**v1.4 预授权:人闸只确认轴归因与修法方向,V2 定向目标带数值由批内按 T1 实测读数自定并随定性报告呈报,禁拍脑袋现编**)+ 裁决留痕补记 §10 |
|
|
||||||
| V2 | 修法后机检达标 | **既有口径不破坏**:样张主板断言 A6 ≥4.70 / F6 Δ≥18 / A3b Δ≥30 / 格底明度档(已开 L 0.08–0.14 / 墙顶 ≥0.30 / 饱和 ≤0.55)保持绿(v1.1 注:该组现行只跑 dungeon 拼板主板,对 L2/L3 属「不动即可」约束而非覆盖,C1 核注);**L2/L3 分关实测 = T1b 新建读数件出值**;shot_checker A–D+F 零新增红;`terrain_tile_sets_test`/`ui_contrast_probe` 全绿。**定向判据**(针对「累眼」的归因侧):若 T1 判「死黑面积」→ 全黑档面积占比与明度直方图 p10 改善入目标带;若判「对比带过宽」→ 墙顶/地面 Δ 与板/舞台底对值入 T1 定标带——目标带数值由 T1 报告给出、**T1 出口定性人闸冻结**,禁拍脑袋现编。**目标带自设的合法性注(v1.1)**:art-bible §4.1「待定现用」态只管圣经在册数值(现行即执法、调整=修订登记,:207 释义);本卡自设目标带**首先只是批次验收判据**,过闸即合法生效于本批;若某带值要长期执法,须写入 art-bible 相应节修订登记转「待定现用」态,禁以批次判据身份直接成为执法值 | 读数表(改前/改后并排)进 `reports/iter30-实现报告-<完成日>.md`;**v1.4 预授权:目标带数值由批内按 T1 实测读数自定、随定性报告呈报即生效**(原「人闸冻结目标带」改为「人闸确认方向与量级」,数值仍禁拍脑袋现编) |
|
|
||||||
| V3 | 渲染闸换代 | 先跑 `render_gate.sh` 见棋盘 golden 段红(确认破的是预期面)→ 跑 `golden_baseline_refresh.sh`(缺省=棋盘三张,菜单态触及加 `--menu`;素材齐盘前置)→ 复跑 `render_gate.sh` 全绿;三张新旧基线并排呈报,changed 面 = 预期面,零超预期漂移 | 闸日志 + 呈报件;提交说明含触发原因(契约 6) |
|
|
||||||
| V4 | 用户实机目检 | 目检项登记(实现报告目检总清单;「入册 07」列反哺点)+ 用户回报「费劲感」相对改善且 L1 无退化——**登记不阻塞入库(2026-10-12 用户令)**;用户复判否决 = 回补机制触发:08 行回待做、06 本条记残留重开(落文按 v3 口径经反哺点归文档批)、返工起点=T1/T2 重议(不回滚已入库码面,按新条处置) | 主观判据的唯一权威=用户回报;入库前方向由契约 4 样张闸把关 |
|
|
||||||
| V5 | 邻接零回归 | 冒烟全套 + 单元 + 探针链零新增红(呈现面触碰加跑 ui_contrast);同迭代徽章批断言面零回归(§4B X3) | 重闸 = `tools/run_all_gates.sh --code`(脚本即唯一闸清单) |
|
|
||||||
| V6 | 反哺点清单 | §5 所列各条(08 行改写要求+目检登记注、06 状态刷新、art-bible 修订登记〔色值若动〕、HUD框架〔迷雾参数若动〕、07 入册、roadmap 估时)在 `reports/iter30-反哺点-<完成日>.md` 逐条有落点(文件/节/改成什么/依据) | 件核:§5 反哺点行数=清单条数 |
|
|
||||||
|
|
||||||
**闸口径**:机检(V2/V3/V5)自动判;V1 = 人闸停点(T1 出口定性闸,06 已裁);V4 = 登记后回补机制(非停点,2026-10-12 用户令);契约 5——机检绿 ≠ 用户满意,禁作等价表述写入 06/08。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. 异常分级
|
|
||||||
|
|
||||||
- **L1(自救)**:采样脚本参数笔误、读数表排版缺件、文档行号漂移——立红即修。
|
|
||||||
- **L2(记录继续)**:色表具体槽值、候选样张的构图取舍、07 目检条目的问法措辞——批内消化并登记。
|
|
||||||
- **L3(停机呈报)**:①T1 读数显示 L1 同病(范围外溢,重划批次);②归因指向三态墨管线/迷雾概念定义本体(触既有裁决面);③用户否决对比样张方向两次以上(说明读数口径与体感脱节,须重议 T1 指标本身);④golden 重制后 changed 面超出预期(隐性回归);⑤色板增量纪律双门过不了且无合并方案;⑥跨卡同板面次序破裂——与徽章批/样张批的 §4B 联动被裁决成互相破坏已冻结断言面的顺序(§4B 呈报件被否即停,禁单方推进)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. 代拍板白名单(超清单必呈报)
|
|
||||||
|
|
||||||
1. 采样读数脚本的实现落点(新工具件 vs 扩 `shot_checker.py`,禁动其现有 A–D+F 断言语义)。**v1.1 注**:T1b 全框帧件(扩 board_shot_probe 或新建 L2/L3 整屏探针)即落在本条授权域内。
|
|
||||||
2. 明度直方图/梯度均值在「整板」与「灯光区内」两口径的取舍(以 T1 报告说明为准)。
|
|
||||||
3. 甲案色表的具体槽值设计(参数域内自由,出域即 L3)。
|
|
||||||
4. 对比样张的排版形式(并排同屏 vs 逐关两帧)。
|
|
||||||
5. 目检轮的注册话术与回报表格式(07 口径内)。
|
|
||||||
6. 基线重制的执行时机(T2 出口 vs T4 出口,取一)。
|
|
||||||
7. 提交切分与 worktree 分支命名(走既有纪律)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. 裁决留痕(v1.2 换代:原 Q1 撤销结论保留——已裁项禁再问;Q3 已裁甲·同批;Q2 延裁留痕;全卡零悬空待裁点)
|
|
||||||
|
|
||||||
**统一来源(逐条留痕均引此令)**:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」。以下 Q2/Q3 各行引该令留痕;两案选项原文照录,供后续复看。
|
|
||||||
|
|
||||||
**已裁移除项(原 Q1「定性报告要不要用户过目才进 T2」)——撤销结论不动(2026-10-16 用户令未触及,维持 grilling 结论)**:06 本条条内已明文裁决——「开工前须先定性(沿用既有裁决)……**开工前先过『素材轴 / UI 轴』定性人闸**」(06:449/:453,2026-10-13 用户裁定条;08 的 git 提交史同款注「P2 棋盘观感标『Alpha 阶段需完成 · 开工前过素材轴/UI 轴定性人闸』」)。「要不要过闸」不成立为问句,本卡处置 = 落为 T1 出口**流程硬步骤**(P1/V1),闸上同时冻结轴归因与 V2 目标带数值——**既裁人闸,不占裁点**。
|
|
||||||
|
|
||||||
### Q2 · 素材轴修法走哪案:程序换色重校(甲)还是瓦片重产(乙)?——**延裁留痕**
|
|
||||||
|
|
||||||
- **裁决(2026-10-16 用户令,来源句见本节顶)**:「待 T1 定性读数出来后再裁甲/乙;开工默认先做甲案(recolor 换色)候选样张以证伪纹理说」。
|
|
||||||
- **v1.4 预授权(2026-10-17 用户裁):延裁改判据自动裁,不再停机等现场裁**——甲案候选样张读数达标(进入 §7 V2 定向目标带)→ **直接走甲**;仅当读数**证伪**「纹理太碎」假说(甲样张读数不达标、方向仍不成立)时才呈报裁乙。乙案分支的代价与划界(P4/§6 乙案行:本卡重产 ≠ 放开升档、规格与样张卡已冻结目标规格清单对齐)全部不变。
|
|
||||||
- **延裁≠回避**:裁点挂到 T1 出口的**具名呈报动作**——硬流程步骤(触发条件/动作/产物)已成文于 §6 T1「素材轴甲/乙裁决呈报点」:产物=改前/改后并排样张+分关读数表,呈报后**用户当场裁**。本节不留悬空 Q。
|
|
||||||
- **判据(原文照录)**:判据 = T1 归因指向:亮度秩序/对比带问题 → 甲可直达;纹理本身太碎太 busy → 甲调不动(recolor 头注定死「亮度秩序逐像素保持」,方法学上限;碎纹理假说在案证据 = 2026-10-14 美术审计双峰纹理结论条),须乙。乙与 08/06「素材升档重产」的关系已划界(P4/§6 乙案行):本卡重产 ≠ 放开升档,裁乙不重开该未决项。
|
|
||||||
- **选项原文(保留)**:甲=recolor 换色重校(确定性、可复现、逐项可机检比对、零新素材;效果上限 = 参数域内明度/色相重排);乙=远程生图重产(可重设计纹理与高频细节,上限高;周期长、非确定性、全套闸重跑;若裁,规格与样张卡已冻结目标规格清单对齐、样张规格先行——§4B X2)。
|
|
||||||
- **换向处置**:呈报点甲样张被当场否决→裁乙,属裁决规则本身(即「证伪纹理说」动作的出口分岔),不计入 §8 L3③「否决两次以上重议 T1 指标」计数;裁乙即为批次正式进入 T2 乙案行执行。
|
|
||||||
|
|
||||||
### Q3 · L2 与 L3 同批修还是分两批?——**已裁·甲(同批)**
|
|
||||||
|
|
||||||
- **裁决(2026-10-16 用户令,来源句见本节顶)**:**甲·同批**。理由 = 基线换代与目检登记各只走一轮;两关槽值差异(两套色板槽值、12×12 vs 13×13)由 T1 分关读数(§2.3 分关设点 / T1b)承载,无需拆批消化。
|
|
||||||
- **事实(原文保留)**:两关色板两套槽值、板型 12×12 vs 13×13、数字墨同属双峰板色牌态;06 以单条覆盖两关。
|
|
||||||
- **选项原文(保留)**:甲=同批(一次基线换代、一轮目检登记,色表各改各的);乙=分两批先 L2 后 L3(单批更小、L3 可在 L2 复判后单独叫停;基线换代两次、目检登记两轮)。
|
|
||||||
|
|
||||||
**开工门(v1.2 定实)**:Q3 已裁甲·同批;Q2 裁点由 T1 出口呈报硬流程步骤承载(§6 T1)——开工门 = U0,用户 `/iter` 发令即开(已编入迭代 30,2026-10-16 用户令,排期栏);原「Q2/Q3 裁决落」前置表述不再成立。本卡全卡无悬空待裁点(§10 之外各处 Q 指涉均已改为裁决留痕/流程步骤引用)。
|
|
||||||
|
|
||||||
**U1 预授权(2026-10-17 用户于开工前一次性决断,防开发中反复打断)**:
|
|
||||||
1. **Q2 判据自动裁**——甲案候选样张读数达标即走甲,不停机等现场裁;仅读数证伪「纹理太碎」才呈报裁乙(§10 Q2、§6 T1 出口呈报点)。
|
|
||||||
2. **V2 定向目标带授权批内自定**——按 T1 实测读数定并随定性报告呈报;T1 出口定性人闸(06 已裁硬步骤,不可跳过)只确认轴归因与修法方向。
|
|
||||||
3. 其余 L3 停机点维持不变:触既有裁决面类(L1 同病外溢/迷雾概念定义本体/方向被否决两次以上/golden changed 超预期/色板双门/跨卡次序破裂)一律停机呈报。三卡串行序位不变(徽章→样张→观感),本卡位第 3。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 11. grilling 审查记录(v1.0→v1.1,2026-10-16 对抗性审查;逐攻击面:结论/证据/处置)
|
|
||||||
|
|
||||||
| # | 攻击面 | 结论 | 证据(2026-10-16 实查) | v1.1 处置 |
|
|
||||||
|---|---|---|---|---|
|
|
||||||
| 1 | 工具实存性 | `board_shot_probe` **实存非臆名**(三关 targets 名/行号 :34 全对,且自带确定性驱动可复现);render_gate/golden_compare/shot_checker 能力与 C5 描述相符。**翻案**:board_shot_probe 帧 = 空视口裸挂 BoardView,**不含舞台底/屏根像素**(探针只实例化 BoardView,battle_stage_view/BG_ROOT 未挂载);shot_probe 战斗屏真实路径只达 **L1 首战**(其头注商店房不纳屏段自证)⇒ T1「舞台底与屏根」测面与「L2/L3 分关实测」均**无现成采样件**,v1.0「采样源=board_shot_probe 渲染帧」对该测面不成立 | `game/smoke/board_shot_probe.gd:34, :55-61`;`game/smoke/shot_probe.gd:12-14, :159-164`;`tools/render_gate.sh:9, :55-68, :95-107` | 新增 **T1b 新建采样件任务**(≈0.5–1d,白名单 1 域内);T1 估时上调、合计 4–6d→**5–7d**;C6 加帧面边界注 + 过程帧即弃纪律注 |
|
|
||||||
| 2 | 量化判据出处 | A6 ≥4.70(`:26/:338/:1021-1022`,v1 4.09×1.15)、F6 Δ≥18(`:339/:996`)、格底档 L 0.08–0.14/墙顶 ≥0.30/饱和 ≤0.55(art-bible :194/:205/:225-227)、48 色+三通道差 ≥8/255(art-bible :207)**全部实值相符**。**翻案两件**:①A3 现行执法 = **v3.5 冻结定值 Δ≥30**(实测 38),Δ≥55 已数学冲突退役(`:975-979`),v1.0 C3「开工时以当期为准复核」含糊化——已写死;②样张 v3 断言(A3/A6/F6)只跑 **dungeon 拼板主板**(`:130-131`),S3 underdark 仅为 HSV 示意不参断言——「分关实测」非现成能力。自设目标带合法性:「待定现用」态释义(:207)只覆盖**圣经在册数值**的执法态,不自动覆盖批次自设判据——二者不冲突但须写明边界 | 如上各行号 | C1–C3 加核注重写;V2 增「批次判据身份≠执法值,转执法须 art-bible 修订登记」条款;T1b 承载分关读数 |
|
|
||||||
| 3 | 「重产≠放开升档」划界 | 划界**成立但引据须换代**:08 未决项表 2026-10-16 v1.6 已重编号(八项减七项)——行号指路不可靠,按名「素材升档重产进不进 Alpha」「立绘清晰度回退评估」现行确在第 6/7 行(实查);06「资产升档重产批」现行状态 = 2026-10-04 令暂不做 + 2026-10-06 优先级再降 + **2026-10-06 方案二注记:原 64/96/128 升档路线已被八敌逐键定档实质走完,剩余挂起=提灯点亮解禁候选**——v1.0 P4「该条方向=帧尺寸升档」表述滞后 | 08:154, :209-210, v1.6 行(:226);06 升档批条状态行全文 | P4 重写(按名指路+行号注明以实查为准+方案二注记现状);T2 乙案行同改 |
|
|
||||||
| 4 | recolor 能力边界 | 头注方法=仅对 `terrain_*_dungeon.png` 按 wall/facade/floor/crater 四族槽重映射、输出 underdark/deep_underdark 两套;实盘 board/ 目录两套各 21 件(**墙 16+地 5**)与脚本输入面完全对齐,`flag_seal.png` 不在输入面。v1.0 F2「墙类 21 件」**件数错**(21 为总数,16 唯一墙名单单点 `TILE_WALL_NAMES`)。「纹理太碎调不动」有实证:recolor 头注定死亮度秩序逐像素保持(方法学上限)+ 2026-10-14 美术审计结论区「第二/三关地面=近黑斑加亮筋双峰纹理,盯久了累,不是再叠一层界面能救的」(该审计 md 在盘;同日另存 2026-10-06 旧审计 HTML,其棋盘相关结论未涉 L2L3 瓦片碎度) | `tools/recolor_terrain_tiles.py:1-12`;`game/presentation/views/board_view.gd:81-88`(16 件名数组+头注「16 唯一墙瓦片名单」);`reports/美术审计-cursor会话存档-2026-10-14.md` 结论区;Glob `game/assets/art/board/` 两套件名清点 | F2 订正件数+flag_seal 例外注;甲案行写明输入面全覆盖;T1 归因判据与 Q2 引审计实证 |
|
|
||||||
| 5 | 文字位条分工句 | 06:451 原文在册:「两条不同面,不互相替代,各自保留」;三处文字位=站桩名行/敌顺位徽标/RAP 反馈行,06:443 已随迭代 26 T3 完成——v1.0 P2 语义与原文一致 | 06:451, :437-443 | P2 补原文引述 |
|
|
||||||
| 6 | V 条判具 | V2=样张 v3(主板)+T1b 分关读数+shot_checker A–D**+F**(v1.0 漏 F 判据,2026-10-15 已入闸)+`terrain_tile_sets_test`/`ui_contrast_probe`(两探针实存);V3=`golden_baseline_refresh.sh` **实存**且用法查明:缺省模式=棋盘三张(probe 抓帧→crop→覆盖 `game/tests/golden/`),`--menu`=菜单全屏,素材缺位拒跑,呈现批 agent 自换代+提交说明强制写触发原因(其头注 Q5/Q6/S3 在册) | `tools/golden_baseline_refresh.sh:2-14, :52-76`;`tools/shot_checker.py:8-19` | C5/契约 6/T4/V2/V3 补齐实操步骤与 F 断言 |
|
|
||||||
| 7 | Q1/Q3 已裁检索 | **Q1 属已裁项**:06:449 条内明文「开工前须先定性(沿用既有裁决)」+ 状态行「开工前先过定性人闸」(2026-10-13 用户裁定)+ 08 的 git 提交史同款注——v1.0 一边在 P1 引该裁决、一边把同一闸列为 Q1 待裁,自相矛盾,触用户红线。Q3(同批与否)与 Q2(甲/乙)全库检索**无既裁**(06 单条覆盖两关但未裁批次数;playnote 无;git log 无)——保留为待裁 | 06:445-453;08:220(v0.3);playnote.md:5;git log 2026-10 检索 | Q1 从 §10 删除、改 P1/T1 出口/V1 流程硬步骤引用(§10 载明移除理由);Q2/Q3 保留 |
|
|
||||||
| 8 | 中立性 | v1.0 四处「推荐」:Q1(已裁项附裁决,撤销后消失)、T1 出口句(撤销)、T3「推荐=同批」与 §10 Q3「推荐 甲」(**无既裁依据→中立化**)、Q2 立场句「开工默认先做甲案候选样张」(改写为白名单内样张层探针动作,非路线裁决) | 全文 grep 推荐=0 残留(仅剩「已删字样」自述与列名注) | 列头改「卡片立场(不代裁)」;§10/§6 T3 中立化 |
|
|
||||||
| 9 | 跨卡依赖 | 两卡同抢 L2/L3 板面:徽章批(类型微光实装者,其 T0-② 五组明度档以未开格底 L≥0.30 为基线——本卡改的正是该基线;art-bible :379 已册「格底与微光同在未开格面,邻近色相有吞没风险」互辨复测义务;其 §4「不动格底/瓦片/四槽」系单向避撞);样张批(Q1 丙案语义=样张反提素材规格、Q3 路线选型——本卡乙案重产与其冻结次序互锁) | `徽章卡(迭代 30 卡①,合并 7ffd1dc0,卡片已退役):13/82/109`;`需求卡片-战斗一屏样张批:33/59/70-71/168/170`;art-bible:379 | 新增 **§4B 跨卡依赖**(X1/X2/X3 三行+结论笔:次序与规格联动问题,不新增裁点,随 Q2/Q3 呈报交用户定序);§8 L3 增⑥跨卡次序破裂停机型 |
|
|
||||||
| 10 | 外加翻案(非清单内,敌意自查所得) | **契约 5/完成定义 3/V4/T5「目检未过禁宣布完成/在役」与 2026-10-12 用户令红线冲突**:AGENTS.md「真人检测只登记不阻塞——禁以等目检为停工理由」(入库先例:迭代 25/26/28 均入库翻行、07 目检留残,git 提交 d337c9e5 立规)。另:F1「L1 10×10」不全——`board_gen.tres` level_index 1 段含一行 **12×12 dungeon**;F10/C6:类型微光引擎未实装(徽章批 F2 引 HUD框架实装状态行佐证),v1.0 把它当实机可测层不成立 | AGENTS.md:68;git log d337c9e5;roadmap 迭代 25/28 行「残留人闸=目检」先例;`game/data/tables/board_gen.tres` 行段实查 | 契约 5 重写(阻塞闸全前置:T1 定性闸+契约 4;V4 改登记不阻塞+回补机制:否决→08 行回待做+06 记残留重开);F1 补两板型注;F10/T1 微光测面降为样张 v2 证据级别并注升级路径 |
|
|
||||||
|
|
||||||
**词面合规自查**:v1.1 全部新增/改写文本已按仓库现行用语规范禁词表逐词 grep 复扫,命中 0(他文档引文原貌除外);本次修订同时把卡片里 v1.0 残留的两处旧措辞换代为规范词。**v1.2 增补**:本次裁决留痕新增/改写文本同口径 grep 复扫,禁词命中 0。**v1.2 留档注**:下表 §11 中「Q2/Q3 保留待裁」「随 Q2/Q3 呈报交用户定序」「无既裁→中立化」均为 v1.1 时点的审查动作实录,不作现行状态读——2026-10-16 用户令已定案(Q3=甲·同批;Q2=延裁挂 T1 出口呈报硬步骤),现行裁决状态一律以 §10 为准。
|
|
||||||
@@ -0,0 +1,484 @@
|
|||||||
|
# 需求卡片:棋盘瓦片与立体表现重做批
|
||||||
|
|
||||||
|
> 来源:`待办清单.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`「越格口径」。
|
||||||
|
> **验收档:中**(呈现与交互几何改动,后果玩家可见但不损持久状态;用户 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 条均已处置,第六轮定向复核通过。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 目标与完成定义
|
||||||
|
|
||||||
|
把棋盘从「逐格 32×32 墙/地瓦片+格内立面」换成**合并岩体+连续地面**的 2.5D 画法:连通未开格(四邻)共享一块抬升岩顶与连续南/东崖面,北/西受光,南/东投影;数字脱离格面,变成**浮空数字+双色引导线+格面小阴影圆**,数字与引导线永远最顶、阴影圆在小人之下;封印按迭代56已闭合的「受理即揭示」呈现——印记居已揭示地面格心、身份字形垫色牌叠于法阵之上、不参与浮空层,承载面取本关受光棱色封印石以保 ≥4.5:1 对比;D 区顶部 AP 条整条撤掉,AP 放左栏、RAP/图例/弃图刷新放右栏,棋盘占 D 区全高并在上方预留 44px 给顶行浮空数字越出棋盘;棋盘底常驻操作提示条退役;小人与南侧岩体按脚底 y 排序遮挡;旧 `terrain_*` 63 件与普通数字底牌路径退役(封印格身份色牌保留);三关色板按已过审样张冻结。
|
||||||
|
|
||||||
|
**完成定义**(全部满足才算完):
|
||||||
|
|
||||||
|
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。
|
||||||
|
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 基线重制并在渲染闸通过。
|
||||||
|
10. 命中仍按逻辑格矩形:点在抬升岩顶/崖面/浮空数字上不改变格坐标映射;16×16 等非当前板型由同一公式求值。
|
||||||
|
|
||||||
|
**不做**:真 3D、HD-2D、A/B 方案对照、旧瓦片回退、逐格新 PNG 瓦片、B/C 区改版、核心规则/数值/RNG 改动。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 设计事实源
|
||||||
|
|
||||||
|
- **画法与配色**:`design/art/art-bible.md` v3.51 §3.2「棋盘地形体系」八条(术语与定义/投影与搭接/受光与崖面/材质与装饰/投影与整板悬崖/绘制序与遮挡/浮空数字/旧资产处理)+封印印记条、§4.1「棋盘环境子板/三关棋盘环境八色/封印黑/数字色牌」、§6.3「三关 tile_closed/tile_open 终值」、§8.2「封印印记参数表」、§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 三行(行动资源侧栏/棋盘地形层/棋盘浮空数字层)。
|
||||||
|
- **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 用户看方向样张后选定「按目标八色冻结」;棋盘底操作提示条退役同会话选定。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 现状事实(代码级,开工自行复核)
|
||||||
|
|
||||||
|
| 现状 | 证据 |
|
||||||
|
|---|---|
|
||||||
|
| D 区当前是「AP 条 44px+棋盘区+底部提示条」的 VBox 结构;board_area 实际高度需扣 VBox 间距与提示条(T0 实读,禁预设 504) | `game/presentation/views/board_zone_view.gd:23-37`(VBox+`ApBarView`+board_area+hint);`ap_bar_view.gd:35`(`custom_minimum_size.y = layout.ap_bar_h`);`board_zone_view.gd:74-79`(hint 条) |
|
||||||
|
| 布局表只有 `ap_bar_h`,没有 `side_rail_w` | `game/data/schemas/battle_layout_table.gd:10,21-22`;`game/data/tables/battle_layout.tres` |
|
||||||
|
| 格边公式预留为「上 12+下 12+悬崖 8」,无顶栏/侧栏项 | `game/presentation/views/board_view.gd:205-232`(`_cell_for`:`reserve := 24.0 + d`、`avail.x - 12.0 - d`) |
|
||||||
|
| 棋盘原点由 CenterContainer 居中;`cell_origin` 读 `_svp_container.position` | `board_view.gd:403-404`;`_wrap`/`_svp_container` 建于 `board_view.gd:90-110` |
|
||||||
|
| 棋盘逐格 16 墙瓦片+5 地面变体,按 `board_type` 装 PNG | `game/presentation/views/tile_palette.gd:17-20,66-94`;`board_view.gd:118,264-267` |
|
||||||
|
| 数字有「亮直/深直/落牌」三态与色牌垫底;封印格身份字形同走色牌 | `tile_palette.gd:50,88-94,166`;`board_view.gd:517-518,586-591`;`cell_mark_overlay.gd:74-104` |
|
||||||
|
| 封印当前代码仍是「未开格+`seal_on = seal and not revealed`」;迭代56封印改版已编未开工(本卡排其后,按其实装后的「已揭示地面+身份色牌」口径承接) | `board_view.gd:536-545`;`board_cell_unit.gd:31,39,51-77`;`seal_mark_layer.gd:12-20`;`reports/需求卡片-封印动作改版批-2026-11-07.md` §7 |
|
||||||
|
| 封印取证选择器仍 `has_seal and not is_revealed`、取证 rect 按逻辑格(圆心格心) | `game/probe/board_shot_probe.gd:264-281`;迭代56卡片 §7 换代选择器 |
|
||||||
|
| 格内立面/北投影/东立面全在本格内画;接触带也在基座层 | `game/presentation/views/cell_base_layer.gd:60,82-91,109-115,168,183,196` |
|
||||||
|
| 小人 z=1、落影相对 z=-1(全局 0);无脚底排序;格件默认 z=0 | `game/presentation/views/board_world.gd:39,48`;`board_cell_unit.gd`(全文无 `z_index` 赋值) |
|
||||||
|
| 旧 `terrain_*` 63 件(16+5,三关各一套)在库 | `game/assets/art/board/`(63 PNG+63 `.import`+`seal_mark.png`+其 `.import`) |
|
||||||
|
| 棋盘取证探针视图 900×900,微光「禁越圈」按逻辑格;封印取证也按逻辑 rect | `game/probe/board_shot_probe.gd:179,261,318,369` |
|
||||||
|
| 微光取证探针同用逻辑 rect | `game/probe/type_glow_shot_probe.gd:126,161` |
|
||||||
|
| 变格边长探针恢复时调 `set_cell_area(bv.size)`(无侧栏参) | `game/probe/ui_input_probe.gd:360-366` |
|
||||||
|
| 布局探针等价断言 `_cell_for(n, bv.size)`(无侧栏参) | `game/probe/layout_probe.gd:108-120` |
|
||||||
|
| 对比度探针的迷雾派生段依赖 TilePalette | `game/probe/ui_contrast_probe.gd:119-147,164-190` |
|
||||||
|
| 能力清单旧行「地形瓦片套与格面数字可读」仍引用 terrain 套件 | `game/tests/README.md`(旧行保留;删除归写卡段后续) |
|
||||||
|
| 普通已开危险格「危」当前垫色牌;落牌断言在玩家复制回归件(本卡后普通「危」改浮空、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` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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` 装图链;岩体/地面/崖面必须按整板矩形与格边程序化绘制,连通按四邻。
|
||||||
|
3. 🔴 **普通数字零底牌**:普通数字(含普通已开格的「危」/「?」)只走浮空描边字;禁止 `_digit_ink_mode` 三态、`plate_digit` 在普通数字路径复活。**封印格身份字形色牌为唯一例外**(迭代56封印改版:`plate=true`、`_draw_digit_plate` 保留、字形叠于法阵之上),禁把例外扩回普通数字。
|
||||||
|
4. 🔴 **浮空分层**:数字+引导线必须比地形/小人/封印/微光/交互反馈都高,任何元素不得遮数字与引导线;**阴影圆相反——画在开启格地面、位于小人之下**,小人站该格时遮住圆;顶行数字必须在 D 区内完整可见。**顶面贴花/交互反馈不得一律置顶**——随所属格件脚底行分档:北侧(脚底≤小人)低于小人,南侧(脚底>小人)随岩体在前;禁恢复“格件一律 z=3”。**封印格例外**:该格不生成浮空 entries/阴影圆,印记与身份色牌固定低于小人(整格 z=0,不参与南侧前推)。
|
||||||
|
5. 🔴 **命中按逻辑格**:`_cell_at` 仍用逻辑格矩形与 `SEP` 步长;抬升岩顶、崖面、浮空数字不是命中区;顶面左上角点按逻辑公式归属北/西邻格,不做“归本格”特判。
|
||||||
|
6. 🔴 **脚底排序**:深度键=格底 y;岩体取最南格格底;升序绘制;南侧岩体必须能遮住小人脚底;格件贴花/交互反馈按同一格底 y 分档(北侧 z=0 低于小人、南侧 z=3 随岩体在前;**封印格恒 0**);禁止退回“全部岩体先画、小人最后画”。
|
||||||
|
7. 🔴 **顶预留 44px**:`TOP_RESERVE=44`、`BOTTOM_RESERVE=12`、`DEPTH_PX=8`;公式与预览判据一致;禁止用 AP 条高度重新挤压棋盘;board_area 高 = D 区全高 548。
|
||||||
|
8. 🔴 **侧栏宽表单源**:`side_rail_w` 只从 `BattleLayoutTable` 读,视图内禁止硬编码 200;`ap_bar_h` 游戏视图零引用(布局表字段暂留供样张工具,删除归工具批)。
|
||||||
|
9. 🔴 **旧资产先验后删**:T0 采样三关当前画面读数入报告;新路径三关 golden 绿后,才允许删除 63 件 PNG 与 `.import`;`seal_mark.png` 禁删。
|
||||||
|
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` 共享流;一律用格坐标确定性哈希(同板同参逐位复现)。
|
||||||
|
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,禁在本卡重写。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 范围边界
|
||||||
|
|
||||||
|
**收件**:
|
||||||
|
|
||||||
|
- D 区布局(左右侧栏、全高棋盘、44px 顶预留、toast 槽移位、底部提示条退役)。
|
||||||
|
- 棋盘地形深度层(连续地面、合并岩顶、南/东崖面、内阴影、四段投影、整板悬崖)。
|
||||||
|
- 浮空数字层(阴影圆、引导线、描边字、1px 浮空投影、数字/线最顶、顶行越界)。
|
||||||
|
- 小人与岩体的脚底排序;阴影圆在小人之下。
|
||||||
|
- 封印印记/身份色牌的承载面与层序(已揭示地面格心+受光棱封印石+色牌叠于法阵之上且低于小人);类型微光/变异纹带/奖励徽章/悬停/路径/可挖域微光的锚点迁移(顶面 rect)。
|
||||||
|
- 迷雾黑罩/记忆态与抬升岩顶的几何对齐。
|
||||||
|
- 布局表 schema/tres、AP 条→侧栏的视图改造、命中测试。
|
||||||
|
- 旧瓦片与普通数字色牌路径退役(封印格身份色牌保留)、三关色板、三关 golden 基线重制、测试与能力行落地。
|
||||||
|
- 棋盘底常驻操作提示条退役(`board_zone_view` 的 hint 条删除)。
|
||||||
|
|
||||||
|
**不收件**:
|
||||||
|
|
||||||
|
- B 区舞台/站桩、C 区数据框、AP/RAP 数值与规则、战斗结算、RNG、存档——一律不动。
|
||||||
|
- 新增地形 PNG 素材:本批按已过审样张做程序化材质;若后续要换成 PNG 材质,另立登记条目走 asset-ingest。
|
||||||
|
- 真 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 批);条款偏差→反哺点清单。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 关联文档同步面
|
||||||
|
|
||||||
|
| 文档 | 关联点(实现会改变它的哪条陈述) | 同步义务 |
|
||||||
|
|---|---|---|
|
||||||
|
| `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/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/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` | 本卡已写/待编排状态 | 编排段与收尾段推进;实现批禁直改 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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_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 |
|
||||||
|
| `game/presentation/views/ap_bar_view.gd`(修改,保留类名/字段名) | 行为 | 根改为全幅 Control(IGNORE)+左右两个 PanelContainer(`_init` 局部变量,不新增成员);左 AP+停手,右 RAP+图例+弃图刷新;信号/setter 名不变;`side_rail_w` 从布局表读 | §12-1/12 |
|
||||||
|
| `game/presentation/views/board_view.gd`(修改) | 行为 | 新格边公式、顶预留 44、棋盘原点、地形/浮空/阴影圆固定名字子节点装配(不新增成员)、`rebuild` 清场跳过三层、`_resort_cell_decals` 按脚底行分档、命中测试、refresh 清理(删 `_paint_cell_base`/`_paint_cell_facade` 与 `u.base.*`)、迷雾 rect、rebuild/set_cell_area 侧栏参 | §12-2~9 |
|
||||||
|
| `game/presentation/views/board_zone_view.gd`(修改) | 行为 | 去掉 VBox/AP 条/hint;board_area 全幅;侧栏叠层;toast 左栏顶部;`_side_rail_w` 存 layout 值 | §12-1 |
|
||||||
|
| `game/presentation/views/board_world.gd`(修改) | 行为 | 悬崖保留 z=0、材质色接新 palette;小人 z=1、落影相对 z=-1;格子 z 对齐 | §12-5 |
|
||||||
|
| `game/presentation/views/board_cell_unit.gd`(修改) | 行为 | 去基座层(删 `base` 成员);新增 `top_face_offset`/`visual_rect`;**保留 `plate`**(封印格身份色牌);`z_index` 按脚底行分档(北侧 0/南侧 3;**封印格恒 0**,由 `_resort_cell_decals` 重算);`glyph` 只写封印格(色牌字形),普通数字不写格面;封印子件 `show_behind_parent=true`(法阵在色牌下);迷雾三块;记忆态地面色/灰罩/记忆墨数字迁入固定名字低层子件 `MemoryGround`(`z_as_relative=false`、全局 z=-1:地面之上、阴影圆 0 之下),不整矩形压南邻岩顶;`draw_removed_dim` 墙格改顶面 rect;接触带迁入固定名字低层子件 `ContactGlow`(同全局 -1);文件头注删 `cell_base_layer` 引用 | §12-8/9/13 |
|
||||||
|
| `game/presentation/views/cell_mark_overlay.gd`(修改) | 行为 | 删普通数字字形/色牌路径;**保留封印格字形+`_draw_digit_plate` 色牌+徽章**;保留变异/路径/高亮/退色;顶面 rect 参数 | §12-8/11 |
|
||||||
|
| `game/presentation/views/cell_base_layer.gd`(删除) | 非行为(清理) | 逐格基座/立面/投影/接触带职责移交 | §12-3/13 |
|
||||||
|
| `game/presentation/views/tile_palette.gd`(删除) | 非行为(清理) | 16+5 装图/三态墨色职责退役 | §12-11 |
|
||||||
|
| `game/data/schemas/battle_layout_table.gd`(修改) | 非行为(数据契约) | 增 `side_rail_w`;`ap_bar_h` 保留字段(游戏视图零读) | §12-1 |
|
||||||
|
| `game/data/tables/battle_layout.tres`(修改) | 非行为(数据) | `side_rail_w = 200`;`ap_bar_h` 字段保留 | §12-1 |
|
||||||
|
| `game/presentation/main.gd`/`main_debug_flow.gd`(修改) | 非行为(接线) | `BoardView.rebuild(..., side_rail_w)` 传布局表值 | §12-2 |
|
||||||
|
| `game/probe/board_shot_probe.gd`(修改) | 非行为(取证) | 视图 1036×548、侧栏 200、顶面 rect 微光圈;**封印取证保持逻辑格 rect(圆心格心)**,选择器按迭代56后 `has_seal` 口径;三关截图 | §12-15 |
|
||||||
|
| `game/probe/type_glow_shot_probe.gd`(修改) | 非行为(取证) | 视图 1036×548、`rebuild(..., 200)`、微光允许区改顶面 rect | §12-15 |
|
||||||
|
| `game/probe/layout_probe.gd`(修改) | 非行为(取证) | `_cell_for` 带侧栏;D 区/原点/顶预留读数(含 1920 档) | §12-2/15 |
|
||||||
|
| `game/probe/ui_input_probe.gd`(修改) | 非行为(取证) | `set_cell_area` 恢复时带侧栏参 | §12-2/15 |
|
||||||
|
| `game/probe/ui_contrast_probe.gd`(修改) | 非行为(取证) | 去旧瓦片均值段;加浮空字四类底复合对比;迷雾派生段改读新 palette | §12-6/9 |
|
||||||
|
| `game/tests/unit/presentation/board_terrain_test.gd`(新增) | 非行为(测试) | 格边/合并/投影/深度/锚点/命中/迷雾/接触/色板/旧资产/封印承载与色牌 | §12-2~5,8,9,11,13,14 |
|
||||||
|
| `game/tests/unit/presentation/board_float_label_test.gd`(新增) | 非行为(测试) | 字高/间距/顶预留/最顶/阴影视小/复合对比/普通数字零底牌(封印格跳过) | §12-6/7/11 |
|
||||||
|
| `game/tests/unit/presentation/board_side_rail_test.gd`(新增) | 非行为(测试) | 侧栏几何、信号、setter、提示条退役 | §12-1/12 |
|
||||||
|
| `game/tests/unit/presentation/terrain_tile_sets_test.gd`(删除) | 非行为(测试) | 旧瓦片套断言整体退役 | §12-11 |
|
||||||
|
| `game/tests/unit/presentation/stage_background_test.gd`(修改) | 非行为(测试) | 新增 `_test_side_rail_width_from_table`(现无 AP 条高度测试) | §12-1 |
|
||||||
|
| `game/tests/unit/presentation/player_copy_sweep_test.gd`(修改) | 非行为(测试) | 普通已开危险格:`u.plate==true` 改 `u.plate==false`+浮空 entries 含该格;封印格色牌断言归 `board_terrain_test` | §12-6/11 |
|
||||||
|
| `game/tests/unit/presentation/standee_present_values_test.gd`(修改) | 非行为(测试) | V11 口沿高光源码锚由 `cell_base_layer.gd` 改指 `board_terrain_layer.gd`(北/西主亮棱);`body_src` 段保留 | §12-3/11 |
|
||||||
|
| `game/tests/run_all.gd`(修改) | 非行为(测试入口) | 注册三个新套件、移除 terrain 套件 | §12-16 |
|
||||||
|
| `game/tests/README.md`(写卡段本批改) | 非行为(能力清单) | 新增 6 条能力;旧地形行保留(删除归写卡段后续);代表用例改名 | §12 全表 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 落位与可复用性预检
|
||||||
|
|
||||||
|
| 新增件 | 复用面(为什么不能复用既有) | 唯一面 | 分层与交互 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `board_terrain_palette.gd` | 现有 `TilePalette` 只装 PNG/算墨色,不含三关程序化八色;改它会保留装图职责,职责混杂,故新件只放色表 | 三关八色只在此文件定义;视图只读 `palette_for()` | 纯数据件,不引用 UI/节点;`board_terrain_layer` 消费 |
|
||||||
|
| `board_terrain_layer.gd` | `cell_base_layer.gd` 是逐格基座,无法表达合并岩体/脚底排序;扩它会变成两个职责,故新件承接地形 | 地面/岩体/崖面/投影只在此件绘制;`cell_base_layer` 删除;LIFT/ESHIFT 只在此件静态函数 | 由 `BoardView` 创建两个实例(back/front),读 `wall_at` Callable 与 palette;不反向调用 BoardView |
|
||||||
|
| `board_float_layer.gd` | `cell_mark_overlay` 是逐格绘制域件,无法做跨格最高层与引导线;且 SubViewport 尺寸只到棋盘+悬崖,顶行浮空字会被裁,故必须做 BoardView 外壳 Control 覆盖层 | 数字/引导线只在此件绘制;`cell_mark_overlay` 删数字路径;不画阴影圆 | 由 `BoardView` 创建为全幅 Control;读 entries(cell/glyph);不写核心 |
|
||||||
|
| `board_label_shadow_layer.gd` | 浮空层在外壳、会盖小人;阴影圆必须在小人之下且在地面之上,无法复用浮空层或格件(格件 z=3 会盖小人) | 阴影圆只在此件绘制;开启格局部圆心格顶+7 | 由 `BoardView` 创建于 `_world`,z=0;读 entries 的 cell 列表;不反向调用 BoardView |
|
||||||
|
| `ap_bar_view.gd`(改造不换名) | 现有 `ApBarView` 已含 AP/RAP/确认/图例/刷新全部逻辑与信号,且被组合根/探针以字段名 `ap_bar` 引用;改名会波及 7 个接线文件,收益低风险高,故保留类名/字段名,只改布局职责 | 侧栏只此一件;`BoardZoneView` 只持有它 | 由 `BoardZoneView` 创建;信号经原有组合根路径上抛 |
|
||||||
|
| 三个测试件 | 现有 `terrain_tile_sets_test` 只测旧瓦片套;新职责无法复用;按职责拆三件(地形/浮空/侧栏) | 每个测试件只测对应域 | 经真实 `BoardView`/`BoardZoneView` 入口实例化;不直调核心写 |
|
||||||
|
|
||||||
|
**唯一面核查**:`LIFT`/`ESHIFT`/`TOP_RESERVE`/`side_rail_w` 各只有一个定义点;普通数字路径 `DIGIT_PLATE`/`plate` 零引用(封印格身份色牌为唯一例外,`cell_mark_overlay`/`CellUnit.plate`);`terrain_*` 零引用;三关八色只在 palette 件;封印格承载色只读 `palette.light_edge`;层节点名 `_world/TerrainBack`/`_world/TerrainFront`/`_world/LabelShadow`/壳层 `FloatLayer` 各只有一个创建点,`rebuild` 只清格件与英雄、不误清三层。
|
||||||
|
|
||||||
|
**分层与交互**:Core 零 UI、数据只经 ConfigDB、RNG 零触碰、命中只读——全部保持;新增件不互相反向持宿主引用。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 实现规范预算
|
||||||
|
|
||||||
|
| 新文件 | 公开方法预算 | 成员变量预算 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `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_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` 超过 7/13,按职责拆 `board_terrain_face_layer.gd`(崖面/投影)——先停卡呈报,不在实现段自行扩面。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. 拆分边界纪律
|
||||||
|
|
||||||
|
判据权威 = `design/engineering/code-conventions.md` §1.1;本卡不复制定义,只写条款:
|
||||||
|
|
||||||
|
- 每个拆出单元(地形层/浮空层/阴影圆层/侧栏)必须有可陈述的职责语句与单一变化原因(实现报告逐件一行承载)。
|
||||||
|
- 拆出单元必须有集体身份,命不出名字的「剩下的成员」打包=凑计数袋,禁止。
|
||||||
|
- 过阈值只作发现信号,作拆分或收拢动机即违规。
|
||||||
|
- 按职责拆不出内聚单元→停卡呈报走豁免/还债通道,禁硬拆凑绿。
|
||||||
|
|
||||||
|
职责语句:`board_terrain_layer`=「把棋盘格态画成连续地面/合并岩体/崖面/投影」;`board_float_layer`=「把开启格字形画成高于一切的浮空标注」;`board_label_shadow_layer`=「把浮空标注的所属格画成小人脚下的地面阴影圆」;`ap_bar_view`=「承载 D 区左/右行动资源读数与按钮」。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. 任务卡 T0..T8
|
||||||
|
|
||||||
|
### T0 读数与基线(0.5 日)
|
||||||
|
|
||||||
|
**取用**:无(首卡)。
|
||||||
|
**产出**:`reports/iter<N>-实现报告-<日期>.md` 的 T0 读数段;当前棋盘 golden 三图 hash;三关当前画面读数。
|
||||||
|
|
||||||
|
- [ ] 实读 `battle_layout.tres`:`stage_h=252`/`info_panel_w=240`/`ap_bar_h=44`/`log_band_h_dig=24`/`log_band_h_settle=84`,写入报告。
|
||||||
|
- [ ] 实读当前 `board_area.size` 与 `BoardView.cell_size`(含 VBox 间距/hint 扣减;禁预设 504/37);写入报告。
|
||||||
|
- [ ] 跑 `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 三关八色;不采样旧瓦片均值。
|
||||||
|
|
||||||
|
### T1 布局表与 D 区侧栏(1.5 日)
|
||||||
|
|
||||||
|
**取用**:T0 读数。
|
||||||
|
**产出**:`BattleLayoutTable.side_rail_w`(200);`ApBarView` 双侧栏改造;`BoardZoneView` 全高 board_area+toast 左栏+hint 删除;`stage_background_test` 改名断言。
|
||||||
|
|
||||||
|
- [ ] `battle_layout_table.gd` 增 `@export var side_rail_w: int = 200`;`validate()` 增域 [160,260];`ap_bar_h` 保留字段与校验(游戏视图零读)。
|
||||||
|
- [ ] `battle_layout.tres` 写 `side_rail_w = 200`;`ap_bar_h` 保留。
|
||||||
|
- [ ] `ap_bar_view.gd`:根改全幅 `Control`(`mouse_filter=IGNORE`),内部左右两个 `PanelContainer`(各宽 `layout.side_rail_w`,贴 D 区左右缘;两个容器用 `_init` 局部变量创建并 `add_child`,不新增成员);左栏 `_build_ap_face`(含停手按钮);右栏 `_build_rap_face`+`_build_legend_refresh`+`_build_refresh_confirm`;保留 `class_name ApBarView`、`stop_pressed`/`refresh_confirmed`/`legend_toggled` 与 `set_ap`/`set_rap`/`set_refresh_cost`/`set_refresh_state`/`set_stop_enabled` 签名;删除 `custom_minimum_size = layout.ap_bar_h`。
|
||||||
|
- [ ] `BoardZoneView` 删 VBox;`ap_bar` 字段保留、改为全幅叠层子件(不再挂 VBox);删 hint 条(`board_zone_view.gd:74-79`);根 PanelContainer 清空 panel style(或改 Control 根),`board_area` 占满 D 区(1036×548);toast 挂 `ap_bar` 左上、宽 `side_rail_w`;`_init(layout)` 存 `_side_rail_w = layout.side_rail_w`;`_on_board_area_resized` 调 `board_view.set_cell_area(_board_area.size, float(_side_rail_w))`。
|
||||||
|
- [ ] `stage_background_test.gd`:新增 `_test_side_rail_width_from_table`(该件现无 AP 条高度测试;读 `layout.side_rail_w==200`,并断言 `ApBarView` 无 `custom_minimum_size.y==ap_bar_h` 路径)。
|
||||||
|
- [ ] `board_side_rail_test.gd` 新建:`_test_side_rail_layout`(左/右栏 x 宽、board_area 高 548、toast 不压棋盘、hint 节点不存在)+`_test_signals`(三个信号与 setter)。
|
||||||
|
- [ ] `run_all.gd` 注册 `board_side_rail_test.gd`。
|
||||||
|
- [ ] 跑 `board_side_rail_test` 与 `stage_background_test`;报告写读数。
|
||||||
|
|
||||||
|
### T2 格边公式、顶预留与命中(0.5 日)
|
||||||
|
|
||||||
|
**取用**:T1 的 `side_rail_w`;`BoardZoneView._side_rail_w`。
|
||||||
|
**产出**:`board_view.gd` 的 `TOP_RESERVE=44`/`BOTTOM_RESERVE=12`、`_cell_for(n, avail, side_rail_w := 0.0)`、棋盘原点、命中不变;`layout_probe`/`ui_input_probe` 带侧栏参。
|
||||||
|
|
||||||
|
- [ ] `board_view.gd` 加 `const TOP_RESERVE := 44.0`、`const BOTTOM_RESERVE := 12.0`;`set_cell_area(avail: Vector2, side_rail_w: float = 0.0)`、`rebuild(board, minesweeper, side_rail_w: float = 0.0)`(公开方法数保持 27;`rebuild` 内调 `set_cell_area(size, side_rail_w)`)。
|
||||||
|
- [ ] `_cell_for(n: int, avail: Vector2, side_rail_w: float = 0.0)`:`floor((min(avail.x - 2*side_rail_w - 12 - DEPTH_PX, avail.y - TOP_RESERVE - BOTTOM_RESERVE - DEPTH_PX) - (n-1)*SEP)/n)`,`clampi [26,46]` 不变。
|
||||||
|
- [ ] `_wrap` 由 `CenterContainer` 改为全幅 `Control`(`mouse_filter=IGNORE`);`board_px` = 棋盘外框(`cols*stride - SEP`,12×12=478;**不含悬崖 8**);`_svp_container.position = Vector2((avail.x - board_px.x)*0.5, TOP_RESERVE)`;容器尺寸 = `board_px + Vector2(DEPTH_PX, DEPTH_PX)`(`_update_world_size` 现有 `px` 含悬崖,仅用于容器尺寸);`_update_world_size`/`set_cell_area` 同一处写入;`cell_origin`/`_cell_at` 继续读该 position;`set_cell_area` 同拍重跑 `TerrainBack/Front.setup(...)`、`FloatLayer.setup(cell, origin, entries, font)`、`LabelShadow.setup(cell, cells)`(格边/原点变更)。
|
||||||
|
- [ ] `main.gd:470` 与 `main_debug_flow.gd:104` 的 `rebuild` 调用传布局表值(main 用 `db.presentation.battle_layout.side_rail_w`;debug flow 用 `root.db.presentation.battle_layout.side_rail_w`);`ApBarView` 不新增公开 `side_rail_w` 成员。
|
||||||
|
- [ ] `board_terrain_test.gd:_test_cell_formula_base`:`_cell_for(12, Vector2(1036,548), 200)==38`、`_cell_for(14, Vector2(1036,548), 200)==32`;`cell_origin(Vector2i(0,0))==Vector2(279,44)`(board_area 局部;屏幕 523,296);14×14 局部 (281,44)。
|
||||||
|
- [ ] `board_terrain_test.gd:_test_hit_test_logical_rect`:`_cell_at(cell_center_local(c))==c` 对 12×12 全格;顶面左上角点按逻辑公式归属北/西邻格(不做归本格特判);板外返回 `(-9,-9)`。
|
||||||
|
- [ ] `layout_probe.gd` 的 `_cell_for` 调用带 `main.db.presentation.battle_layout.side_rail_w`;加 D 区/棋盘原点/顶预留读数;1920 档按全局等比 1.35 断言构图一致。
|
||||||
|
- [ ] `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 日)
|
||||||
|
|
||||||
|
**取用**:T2 的格边/原点;art-bible v3.51 §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_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;禁竖条纹。
|
||||||
|
- [ ] `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_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。
|
||||||
|
|
||||||
|
### T4 浮空数字层与阴影圆(1.5 日)
|
||||||
|
|
||||||
|
**取用**: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()`。
|
||||||
|
- [ ] `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_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`;三关截图看顶行数字越界与小人遮圆;报告写读数。
|
||||||
|
|
||||||
|
### T5 交互/封印/微光/迷雾锚点(1.5 日)
|
||||||
|
|
||||||
|
**取用**:T3 的地形顶面;T4 的浮空层/阴影圆。
|
||||||
|
**产出**:`cell_mark_overlay`/`cell_unit`/`seal_mark_layer`/`cell_type_glow_layer`/`board_view` 锚点与 fog rect;`board_terrain_test` 锚点/迷雾断言。
|
||||||
|
|
||||||
|
- [ ] `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)。
|
||||||
|
- [ ] 类型微光:绘制 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 不改;光不进岩体。
|
||||||
|
- [ ] `board_terrain_test.gd:_test_top_face_anchor`:**封印圆心 = 逻辑格心(不偏移)**、变异纹带/微光 rect 按 `-ESHIFT/-LIFT`;`_test_seal_substrate`:封印格地面像素 = 本关 `palette.light_edge`、普通已开格 = `palette.ground`;封印格 `plate=true`、`glyph` 为危/数字、无浮空 entries/无阴影圆;封印格 `z_index=0`;`_test_fog_rect`:墙格三块黑罩覆盖顶面+南+东、地面格不越格;采样北邻格左上 (x_n+2,y_n+2) 与西邻格左上 (x_w+2,y_w+2) 的非岩顶地面像素 = 原地面色、零黑罩(岩顶投影可越入邻格屏幕区);`_test_memory_cover`:记忆态格与南邻墙体重叠区采样,`MemoryGround` 只绘地面可见区,记忆地面/灰罩/记忆墨与 `removed_dim` 不覆盖南邻岩顶(重叠区像素来自南邻墙体);`_test_contact_glow`:接触带只绘地面可见区、在英雄格地面侧且全局 z=-1。
|
||||||
|
- [ ] 跑 `seal_mark_params_test`/`type_glow_test`/`board_terrain_test`;报告写读数。
|
||||||
|
|
||||||
|
### T6 旧瓦片与旧路径退役(0.5 日)
|
||||||
|
|
||||||
|
**取用**: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`。
|
||||||
|
- [ ] 删除 `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`。
|
||||||
|
- [ ] 跑 `repo_structure_audit.py`、`capability_audit.py` 与 `board_terrain_test`;报告写清单;旧地形行**保留**(实现批禁写 `game/tests/README.md`;删除归写卡段后续,T8 audit 经卡内豁免通道绿)。
|
||||||
|
|
||||||
|
### T7 验收面换代与三关 golden(1.0 日)
|
||||||
|
|
||||||
|
**取用**: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 批);不过即停卡呈报,不调色绕过。
|
||||||
|
- [ ] 跑 `bash tools/run_all_gates.sh --code`;报告写 smoke/unit/probe/render 读数。
|
||||||
|
|
||||||
|
### T8 产出物落位(0.5 日)
|
||||||
|
|
||||||
|
**取用**:T7 全绿。
|
||||||
|
**产出**:`reports/iter<N>-实现报告-<日期>.md`(各卡状态+实机目检总清单+遗留读数义务+实现决定记录);`reports/iter<N>-反哺点-<日期>.md`(§6 每条同步面的落点);本卡验收对照表逐行勾选。
|
||||||
|
|
||||||
|
- [ ] 实现报告写 T0–T7 状态、三关实机目检清单、draw calls/格边/原点/锚点读数、旧资产删除清单、三关色板读数。
|
||||||
|
- [ ] 反哺点清单逐条列 §6 各行的落点:已同步的写“无新增”,实现偏差写“待文档批裁决”,架构表 `cell_base_layer` 行写“待用户发令修订”。
|
||||||
|
- [ ] 验收对照表 §12 每行勾选;未过行标红并停卡,不合并。
|
||||||
|
- [ ] 独立验收审计(未参与实现的会话/子代理)按 `test-conventions §8.7` 跑;报告落 `reports/iter<N>-验收审计-<日期>.md`;未过不合并。
|
||||||
|
- [ ] 复跑 `capability_audit.py`(红项 0)与 `pipeline_gate.py`(卡片自身零红);能力表名实一致(旧地形行为保留行,不参与核对;删除归写卡段后续)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. 验证闸(改动—验收对照表)
|
||||||
|
|
||||||
|
> 层级:单元/接口/集成/探针;真实入口列写实际驱动面;判据绑定面写被测改动特有的可观测面;能力行名称与 `game/tests/README.md` 同批入表。
|
||||||
|
|
||||||
|
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+通过判据) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||||
|
|---|---|---|---|---|---|---|
|
||||||
|
| 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` | 集成 | 实现报告/反哺点清单/审计报告 | 三件齐、逐行勾选、审计未过不合并 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||||
|
|
||||||
|
**测试削弱申报**(允许删除/替换的旧断言):
|
||||||
|
|
||||||
|
- `terrain_tile_sets_test.gd` 整件删除(旧瓦片套/三态墨色已退役);其“格套完整性/色相域/墨模式”覆盖由 `board_terrain_test`/`board_float_label_test` 接班。
|
||||||
|
- `ui_contrast_probe.gd` 旧瓦片均值段与 `_fog_derived_check` 的 TilePalette 依赖删除;改为读新 palette/渲染帧,浮空字四类底段新增。
|
||||||
|
- `stage_background_test.gd` 新增 `_test_side_rail_width_from_table`(该件无旧 AP 条高度测试可改名),等价断言 `side_rail_w==200`;`player_copy_sweep_test.gd:142-147` 的普通已开危险格 `u.plate==true` 改 `u.plate==false`+浮空 entries 含该格(封印格色牌保留,归 `_test_seal_substrate`)。
|
||||||
|
- `board_view.gd` 的 `_paint_cell_base`/`_paint_cell_facade` 段随基座退役(其立面/投影/蓝框覆盖由 `board_terrain_test` 的岩体/崖面/接触带断言接班);`u.base.*` 无残留。
|
||||||
|
- `standee_present_values_test.gd:79-86` 的 `cell_src` 源码锚由 `cell_base_layer.gd` 改指 `board_terrain_layer.gd`(旧口沿高光绘制点随基座退役,等价断言改新落点);`body_src` 的 V11 断言保留。
|
||||||
|
- `board_shot_probe.gd` 的 900×900 视图与逻辑格“禁越圈”允许区替换为 1036×548 与顶面 rect;加严口径本身不删、不放宽。
|
||||||
|
- 其它旧断言禁止删除/放宽;未申报的删除由独立验收审计判红。
|
||||||
|
|
||||||
|
**判据绑定面口径**:所有行为行都绑被测改动特有的可观测面(绘制 rect/z 序/常量/信号/读数);`board_terrain_test` 的地形断言读 `mass_rects()`/`terrain_metrics()`,不读私有 `_draw` 内部;浮空断言读 `label_rects()`/`label_metrics()`/`circle_rects()`;侧栏读公开 setter/信号;golden 绑渲染帧。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. 异常分级
|
||||||
|
|
||||||
|
- **L1 自救**:测试环境缺 `user://`、字体、导入缓存——按 `game/tests/README.md` 现行坑册处置。
|
||||||
|
- **L2 记录继续**:三关色板派生读数偏差在 ±1 通道内、draw calls 波动 <10%——记入实现报告继续。
|
||||||
|
- **L3 停机呈报**:
|
||||||
|
- 新路径与 art-bible 条款冲突(比例/顶预留/圆心/层序/三关色板/封印承载任一不符)——停卡,列反哺点,禁自行改条款。
|
||||||
|
- 封印呈现与迭代56「受理即揭示」或 art-bible v3.51 封印条冲突(印记落未开格、圆心随岩顶偏移、身份字形进浮空层、色牌层序颠倒、封印石对比 <4.5)——停卡呈报,禁把封印改回旧假设。
|
||||||
|
- `board_terrain_layer` 超 7 公开方法/12 成员且按职责拆不出内聚单元——停卡走豁免/还债通道,禁凑数拆绿。
|
||||||
|
- 机检键与卡片契约互斥(如测试要求保留 `plate` 字段)——停卡呈报,禁为机检保留无效成员。
|
||||||
|
- 三关色板逐值/互辨不过——停卡呈报,禁调色绕过或改判据。
|
||||||
|
- 三关 golden 重制后仍有非预期差异——停卡,先判有效/失效,禁“重制一下就绿”。
|
||||||
|
- 迷雾黑罩覆盖北/西邻格地面——停卡,按三块形状修正,禁扩大/缩小判据掩盖。
|
||||||
|
- 固定名字层子件(`TerrainBack`/`TerrainFront`/`LabelShadow`/`FloatLayer`)在 `rebuild`/换板后出现重名、丢失或被清场误删——停卡,按固定名字表修正,禁改成 BoardView 成员绕过 S13。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. 代拍板白名单
|
||||||
|
|
||||||
|
允许实现期自行拍板(超清单记入实现报告「实现决定记录」):
|
||||||
|
|
||||||
|
1. `board_terrain_layer` 内 back/front 两实例的精确 z 值(只要满足 back<hero<front、float 最高、阴影圆 0)。
|
||||||
|
2. 程序化材质噪声的确定性哈希种子与采样频率(同板同参逐位复现;禁 RngService/自建 RNG;三关可辨、不出现逐格拼缝)。
|
||||||
|
3. 阴影圆四层 α 在 ±10% 内的微调与同心椭圆收缩比例(只要落样张轮廓、圆在格面、小人之下)。
|
||||||
|
4. 侧栏按钮的纵向间距与面板内边距(只要左右栏各 200、不压棋盘、不换位)。
|
||||||
|
5. 记忆态灰罩的绘制方式(只要不出现浮空层、对比 ≥4.5、地面色取 palette)。
|
||||||
|
6. 测试夹具的构造方式(直接 `new()` 或场景实例化,只要走真实入口)。
|
||||||
|
7. 记忆态地面/灰罩/记忆墨拆入低层子件的具体绘制顺序(只要不覆盖南邻岩顶、对比 ≥4.5)。
|
||||||
|
8. 封印石贴片的收边方式(整格或内缩 0–1px、是否加 1px `palette.seam` 收边)——只要不越格、对比 ≥4.5、零新增色。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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 前不写实现代码。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 16. 复核记录
|
||||||
|
|
||||||
|
| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 1 | 未参与本卡撰写的只读子代理(独立复核,2026-11-07) | 改 `ApBarView` 类名/删 `ap_bar` 字段的波及未列、照卡会编译失败 | 自判 | 保留 `ApBarView` 类名与 `ap_bar` 字段名,只改布局职责;文件结构/预检同步 |
|
||||||
|
| 1 | 同上 | 能力表同批未闭合:capability_audit 4 红、新增实为 6 条非 5 条 | 补写 | README 恢复旧地形行至 T6、修真实入口 `类.方法()`、覆盖表换新能力;audit 复跑 |
|
||||||
|
| 1 | 同上 | 同步面漏 HUD框架(AP 条/高度口径/字号 18/旧能力行) | 补写 | §6 增 HUD框架行;HUD 文档同步 D 区/高度/21px/提示条退役 |
|
||||||
|
| 1 | 同上 | 旧瓦片均值派生 underdark/deep 与旧套退役冲突 | 待裁 | 用户 2026-11-07 选「先补两关样张再写卡」,看样张后裁「按目标八色冻结」;art-bible §4.1/§6.3 写入 |
|
||||||
|
| 1 | 同上 | 浮空字漏 1px 投影、崖面/棱/内阴影/投影 α 不完整 | 补写 | §1/§2/§12 行4 与 battle 像素判据补齐(1px 投影、2+2+外2、3×2 α、4×4 α、东崖 55) |
|
||||||
|
| 1 | 同上 | 阴影圆放 z=4 浮空层会盖小人 | 补写 | 拆 `board_label_shadow_layer`(z=0,小人之下);浮空层只画数字/线;art-bible/battle 层序同步 |
|
||||||
|
| 1 | 同上 | 层序未闭合、CellUnit z=0 会被 front z=2 盖、`rebuild` 清子件生命周期、`board_world` 悬崖二选一 | 补写 | 明确 terrain back=-1/front=2、cell=3、hero=1、阴影圆=0;`rebuild` 重挂两层;BoardWorld 悬崖保留 z=0 |
|
||||||
|
| 1 | 同上 | 删 `cell_base_layer` 后接触带无承接 | 补写 | T5 明确接触带迁入 `CellUnit._draw`,只画英雄格地面侧;`_test_contact_glow` |
|
||||||
|
| 1 | 同上 | 合并岩体下迷雾几何未定,顶面黑罩会压邻格 | 自判 | 按 art-bible「区外未开格全黑」与抬升形状定为顶面+南+东三块;测试断言北/西邻格地面像素零覆盖(岩顶投影可越格) |
|
||||||
|
| 1 | 同上 | `visual_rect_for` 宽高未给、封印 offset 无来源、悬停/路径偏移无设计句 | 补写 | 定义私有 `_top_face_rect`/`_visual_rect_for` 精确 Rect2;CellUnit `top_face_offset` 下发 seal/glow;battle 增悬停/路径 rect 行 |
|
||||||
|
| 1 | 同上 | 判据锚/入口错:`BoardView.paint()` 不存在、`cell_origin==(523,44)` 混用、`_cell_for(12,548,200)` 第二参非 Vector2、顶面左上角归本格必错 | 补写 | 改 `refresh`;局部原点 (279,44)/屏 (523,296);`_cell_for(12, Vector2(1036,548), 200)`;顶面左上角按逻辑归北/西邻格 |
|
||||||
|
| 1 | 同上 | 预算与步骤冲突:新增 `set_side_rail_w`/`visual_rect_for` 公开方法、10 个公开函数、`paint`/`_build_stop` 无调用点、两套件未注册 | 补写 | 改为 `set_cell_area`/`rebuild` 可选参 + 私有 rect;预算改 10 公开函数/13+2 成员;T1 补 run_all 注册;去掉不存在调用点 |
|
||||||
|
| 1 | 同上 | 既有验证面漏 `type_glow_shot_probe`、`board_shot_probe._seal_evidence` | 补写 | T7/§7/§12 行15 增两件;允许区/取样改顶面 rect |
|
||||||
|
| 1 | 同上 | 测试削弱未申报:`player_copy_sweep_test:145` 的 plate、`ui_contrast_probe` 迷雾派生段、Color8 静态段 | 补写 | §12 削弱申报列两处;T6 改断言/改 palette 读取;palette 用 `Color("#...")` |
|
||||||
|
| 1 | 同上 | 程序化噪声“种子”未定源,可能触 RNG 单点 | 补写 | §4 契约 13/白名单 2 改确定性坐标哈希,禁 RngService/自建 RNG |
|
||||||
|
| 1 | 同上 | 拆分边界未写判据权威 code-conventions §1.1、四条款无引用 | 补写 | §10 补权威与四条款 |
|
||||||
|
| 1 | 同上 | golden 重制权限冲突(README 需用户确认 vs 脚本头注可自换代) | 自判 | 按较严的 golden README:T7 显式呈报并获用户确认后才重制 |
|
||||||
|
| 1 | 同上 | 现状读数 `AP 44+棋盘区 504` 未扣 VBox 间距/hint;待办/roadmap 状态与卡不符 | 补写 | T0 改实读 board_area/cell(禁预设 504/37);§3 补 hint 行;状态推进由编排/收尾段做 |
|
||||||
|
| 1 | 同上 | 新层 setter 未写 `queue_redraw`;10×6 圆不能用 `draw_circle` | 补写 | T3/T4 每 setter 调 `queue_redraw()`;圆用 `draw_set_transform` 缩放/椭圆多边形 |
|
||||||
|
|
||||||
|
| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 2 | 独立只读子代理(第二轮定向复核,2026-11-07) | BoardView 计划新增 4 个层成员(31+4=35),与契约 15/S13 基线「只降不升」冲突 | 补写 | 层改固定名字子节点(`_world/TerrainBack`、`_world/TerrainFront`、`_world/LabelShadow`、壳层 `FloatLayer`),经 `get_node_or_null` 取用,零新增成员;`rebuild` 跳过三层 |
|
||||||
|
| 2 | 同上 | `ap_bar_view.gd` 实际 14 个成员,计划加 2 个 PanelContainer=16,预算表写 13+2≤15 | 补写 | 左右栏容器改 `_init` 局部变量,成员保持 14;§9/T1 同步 |
|
||||||
|
| 2 | 同上 | `standee_present_values_test.gd:79-86` 读 `cell_base_layer.gd` 源码作 V11 断言,删件后断源未申报 | 补写 | §7 增该测试行;T3 改源码锚到 `board_terrain_layer.gd`;§12 行3/削弱申报同步 |
|
||||||
|
| 2 | 同上 | 引证落点错:`board_cell_unit.gd:91-98` 是 `_draw` 不是 z_index;`board_shot_probe.gd:14-16` 不支撑 900×900 | 补写 | §3 改「`board_cell_unit.gd` 全文无 `z_index` 赋值」;探针证据改 `:112` |
|
||||||
|
| 2 | 同上 | `type_glow_shot_probe.gd:78` 的 `rebuild` 未获侧栏参,900px 下 clampi 到 46,与生产格边不一致 | 补写 | T7/§7 改视图 1036×548、`rebuild(..., 200)` |
|
||||||
|
| 2 | 同上 | §12 行1 真实入口写 `board_area`(实为私有 `_board_area`) | 补写 | 改 `ap_bar`/`_board_area`(测试读私有) |
|
||||||
|
| 2 | 同上 | 记忆态整格填色与 `removed_dim` 在 z=3 会压南邻越入岩顶(约 15px) | 补写 | T3/T5 增 `_memory_ground` 低层子件与 `draw_removed_dim` 顶面 rect;§12 行9 增 `_test_memory_cover` |
|
||||||
|
| 2 | 写卡会话自查(第二轮同轮) | 阴影圆层在 `_world` 内却传 shell 原点,坐标系混用 | 补写 | `board_label_shadow_layer.setup(cell, cells)`(世界局部/格坐标),`circle_rects()` 明确世界局部;§7/T4 同步 |
|
||||||
|
| 2 | 写卡会话自查(第二轮同轮) | T3「整板悬崖只在 back 画」与 `BoardWorld` 悬崖 z=0 重复绘制 | 补写 | T3 改为背岩体;整板悬崖仍由 `BoardWorld._draw` 承担,禁重复绘制 |
|
||||||
|
| 2 | 写卡会话自查(第二轮同轮) | `architecture.md:178` 仍记 `cell_base_layer` 在役;架构写权限属用户 | 补写 | §6 增架构行:实现批禁直改,T8 反哺点列「架构表该行待用户发令修订」 |
|
||||||
|
| 2 | 写卡会话自查(第二轮同轮) | 另立 `reports/复核-*.md` 与 2026-11-06 用户裁「不另设复核报告文件」冲突 | 自判 | 删除该报告;复核凭据只留本卡 §16(`pipeline_gate` 判据同步) |
|
||||||
|
| 2 | 写卡会话自查(第二轮同轮) | 去饱和材质链未覆盖新层/低层子件,结算期会出现彩色例外 | 补写 | T3/T4 增 `use_parent_material` 与 `FloatLayer.material` 同拍挂摘;§12 行7 增 `_test_desaturation` |
|
||||||
|
| 2 | 后台第二轮复核(补审,2026-11-07) | 顶面贴花一律 z=3 与 art-bible §1.2/§3.2「印记低于小人」冲突 | 补写 | 格件 z 按脚底行分档(北 0/南 3),`_resort_cell_decals`;art-bible v3.50 §1.2/§3.2 与 battle 层序同步 |
|
||||||
|
| 2 | 同上 | `board_view.gd` 仍写 `u.base.*`(`_paint_cell_base`/`_paint_cell_facade`/`_apply_contact_bands`/`_process`/`_reset_breath`/`_build_cell_unit`),删件后报错 | 补写 | T3/T5 明列删除/改调 `ContactGlow`;§12 削弱申报;`_test_legacy_assets_absent` 覆盖 |
|
||||||
|
| 2 | 同上 | `stage_background_test.gd` 无 `_test_ap_bar_height_from_table`,「改名」无源 | 补写 | T1/§7 改「新增 `_test_side_rail_width_from_table`」 |
|
||||||
|
| 2 | 同上 | `glow_discrimination_sheet.py` 读已删旧 `terrain_*`,T7 抽测必断 | 补写 | T7/§12 行14 改 palette 逐值+过审样张;工具换代登记 tools 批 |
|
||||||
|
| 2 | 同上 | T6 删 README 旧地形行违 §4-10 禁写 | 补写 | 旧行保留,删除归写卡段后续;T6/T8/§6 同步 |
|
||||||
|
| 2 | 同上 | art-bible §6.5 旧 `_normalize_floor_luma`、assets-checklist 色牌未退 | 补写 | art-bible v3.50 §6.5 改新 palette;checklist 三处色牌退役 |
|
||||||
|
| 2 | 同上 | T1 `_build_stop` 不存在 | 补写 | 改 `_build_ap_face`(含停手) |
|
||||||
|
| 2 | 同上 | T3/T4 未注册 terrain/float 套件 | 补写 | T3/T4 增 run_all 注册 |
|
||||||
|
| 2 | 同上 | T5 接触带写 `CellUnit._draw` 与 T3 低层子件矛盾 | 补写 | 统一 `ContactGlow` 子件,BoardView 三处改调 |
|
||||||
|
| 2 | 同上 | §12 行13 art-bible:167 应为 168 | 补写 | 改 168 |
|
||||||
|
| 2 | 同上 | §12 行16 battle:298 不支撑审计 | 补写 | 改 test-conventions:196 |
|
||||||
|
| 3 | 独立只读子代理(第三轮定向复核,2026-11-07) | §12 行2 `_cell_for(12,548,200)` 第二参标量 | 补写 | 改 `Vector2(1036,548)` |
|
||||||
|
| 3 | 同上 | §16「第二轮 11 条」与 12 行不符;第二轮表无表头 | 补写 | 改 23 条;补表头 |
|
||||||
|
| 3 | 同上 | §9 `board_cell_unit` 成员数算错(实为 12) | 补写 | 明确 12 成员(删 `plate`/`base`、加两成员,净 0);`ContactGlow`/`MemoryGround` 固定名字不占成员 |
|
||||||
|
| 3 | 同上 | T8 反哺点二分类未含「待用户发令修订」 | 补写 | T8 增该去向 |
|
||||||
|
| 4 | 独立只读子代理(第四轮定向复核,2026-11-07) | 低层子件全局 -1 与 back 地形同 z,仍会盖 back 岩顶/崖面;T3/T5「不覆盖南邻岩顶」在 back 档不成立 | 补写 | T3/T5/§12 行9/13 增「只绘地面可见区(扣南/东邻岩顶越入)」;测试采样 |
|
||||||
|
| 4 | 同上 | `board_cell_unit.gd` 实为 12 个顶层 var,§9 写 12→13 | 补写 | §9/§16 改 12(净 0) |
|
||||||
|
| 4 | 同上 | T7 产出/§13 L3 仍写「三关互辨抽测」 | 补写 | 改「三关色板逐值/互辨」 |
|
||||||
|
| 4 | 同上 | README 旧行仍写「T6 与套件同拍退役」;T8 名实一致无例外 | 补写 | README 改「旧行保留;删行归写卡段后续」;卡 §3/T8 同步 |
|
||||||
|
| 4 | 同上 | §16 补审/第三轮行前空行断表 | 补写 | 去空行并入同表 |
|
||||||
|
| 5 | 独立只读子代理(第五轮定向复核,2026-11-07) | §16 第四轮 5 行前空行断表 | 补写 | 去空行并入同表;复核通过 |
|
||||||
|
| 6 | 写卡会话(合并 master 整合复核,2026-11-07) | master 迭代56已闭合「封印受理即揭示」:印记在已揭示地面+身份字形垫色牌;本卡原写「封印在未开格岩顶+普通数字零底牌」与上游冲突 | 补写 | 全卡改配:封印居已揭示地面格心(不随岩顶偏移)、`plate` 保留且仅封印格为真、字形不进浮空层、封印格 z=0 低于小人;§1/§3/§4-3/§4-16/§5/§7/§9/T3/T4/T5/T7/§12 行8/9/11 同步;art-bible v3.51/battle.md/术语表/checklist 同步 |
|
||||||
|
| 6 | 同上 | 新连续地面 `#695038` 对封印黑仅 2.35–2.98:1,低于 art-bible ≥4.5 判据;旧裸土 `#B39A78` 随旧地板退役 | 补写 | 封印格地面铺本关受光棱色封印石(6.45–9.94:1,零新增色,读 `palette.light_edge`);art-bible §3.2/§4.1/§8.2、battle.md 封印预览判据、卡 §1-2/§12 行8/§13 同步 |
|
||||||
|
| 6 | 同上 | `game/tests/README.md` 冲突:master 迭代56「结算期零逐行文字与 FX 排播链保持」+旧地形行 vs 本卡新能力行 | 补写 | 合并保留 master 迭代56句与旧地形行(父注「旧行保留」),追加本卡 6 条新能力;能力名改「旧瓦片退役与普通数字零底牌」「棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心)」 |
|
||||||
|
| 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 同步 |
|
||||||
|
|
||||||
|
第六轮定向复核:通过(第六轮 6 条已处置;合并冲突全部闭合)。
|
||||||
@@ -1,26 +1,77 @@
|
|||||||
# 需求卡片 · 营地场景重排接线
|
# 需求卡片 · 营地场景重排接线
|
||||||
|
|
||||||
> 批名:营地场景重排接线 · 日期:2026-11-07 · 验收档:中(布局呈现数据面,无存档/结算传播)
|
> 批名:营地场景重排接线 · 日期:2026-11-07 · 验收档:中(布局呈现数据面,无存档/结算传播)
|
||||||
> 来源:待办清单「营地场景重排接线——十层新矩形与游戏内终审」条目(2026-11-07 登记,批次移交)
|
> **接管必读**:本卡对应工作已有部分实现落库且未做完。已完成项/未完成项见 §2「写卡时实查基线」;接管人必须先按 §1.3 做 T0 扫描,逐项复核当前 commit 的真实状态,禁按「未做」整批重写,也禁按「已有」跳过核对。
|
||||||
> 设计事实源(唯一):[camp-scene-prompts](../design/art/camp-scene-prompts.md) v1.9 §2.3/§3/§5 第 12 条(2026-11-05 与 2026-11-07 用户裁)+[art-bible](../design/art/art-bible.md) v3.48 §6.2(围墙显示矩形与墙脚入土线)+[camp](../design/ux/camp.md) 第 29 行(围墙带 y220–420)+2026-11-07 用户裁原话(墙高 200、顶 y220、门/板跟随、墙脚入土;预览过审 `artwork/2026-11-07-营地接线预览/camp_new_layout_preview_c.png`)
|
> 来源:待办清单「营地场景重排接线——十层新矩形与游戏内终审」条目(2026-11-07 登记,批次移交;**已补回**,状态「已写卡」,见 `待办清单.md`)。
|
||||||
|
> 设计事实源(唯一):[camp-scene-prompts](../design/art/camp-scene-prompts.md) v1.10 §2.3/§3/§5 第 12 条+第 13 条+[art-bible](../design/art/art-bible.md) v3.48 §6.2+[camp](../design/ux/camp.md) 第 29 行+2026-11-07 用户讨论定稿(土线覆盖围墙底与门扇底;最终墙件预览过目;渲染闸与独立审计入场)+2026-11-05 用户裁定的六件落位值。**设计已补录**:六件逐值矩形(dummy/forge/tent/chest/notebook/campfire)已补入 `camp-scene-prompts.md` v1.10 §5 第 13 条(2026-11-08);art-bible §6.2 门扇底同口径仍列反哺点(不阻塞本卡成立)。
|
||||||
|
> 本版任务边界:**只出需求卡片与两条上游缺口补录**(设计文档六件逐值、待办条目);不实现游戏代码、不提交、不合并。实现与提交须用户另行发令。
|
||||||
|
|
||||||
## 1. 目标与完成定义
|
## 1. 目标与完成定义
|
||||||
|
|
||||||
把营地十层的运行数据换成重排后的新矩形:围墙 (0,220,1280,200)、大门/告示板尺寸不变跟随、其余六件(dummy/forge/tent/chest/notebook/campfire)按 2026-11-05 裁定落位;新围墙件(1280×164,补尖+墙脚入土缺口)入包;布局表几何红线单测与冒烟全绿;游戏内营地图层按新矩形铺底、墙脚无贯通直线。
|
### 1.1 目标
|
||||||
|
|
||||||
完成定义:`camp_scene_layout_test.gd` V14 全绿(含新值钉断言)+冒烟测试 exit 0+`palette_check` 围墙对八件零新增色+`path_check` 0 问题;游戏内目检归用户(登记不阻塞)。
|
把营地十层换成重排后的新矩形:围墙 (0,220,1280,200)、大门/告示板尺寸不变跟随、其余六件(dummy/forge/tent/chest/notebook/campfire)按 2026-11-05 裁定落位;围墙最终件(1280×164,补尖+底边入土缺口)入包;**土线同时覆盖围墙底与门扇底**,实机读作插在土里;十层结构不变(不新增图层);最终墙件重新出预览并经用户过目;布局/土线/渲染/独立审计全部有读数;营地屏按 `test-conventions.md:100` 纳入渲染闸 golden 机器面。
|
||||||
|
|
||||||
## 2. 现状事实(开工自行复核)
|
### 1.2 完成定义
|
||||||
|
|
||||||
- 数据表 [camp_scene_layout.tres](../game/data/tables/camp_scene_layout.tres):wall `texture_rect=(0,261,1280,49)`、gate `(520,250,240,211)`、board `(845,268,130,121)`、tent `(982,520,251,170)`、forge `(40,467,240,193)`、dummy `(340,520,120,180)`、chest `(1097,700,106,90)`、notebook `(818,704,100,66)`、campfire `(560,571,160,149)`;`wall_band=(0,240,1280,70)`;`gate_gap=(520,760)`。
|
本批算完成,必须同时满足:
|
||||||
- 视图按表建层、`TextureRect.STRETCH_SCALE` 拉伸到矩形尺寸:[camp_scene_view.gd:136](../game/presentation/views/camp_scene_view.gd#L136);子节点序=表序=z 序(同文件头注)。
|
|
||||||
- schema 加载期 fail-fast:validate 入口 [camp_scene_layout_table.gd:15](../game/data/schemas/camp_scene_layout_table.gd#L15);贴图矩形不出画布、命中区不出画布/不侵 y<48/两两不相交、`wall_band` 必须包含 wall 贴图矩形([camp_scene_layout_table.gd:67](../game/data/schemas/camp_scene_layout_table.gd#L67))。
|
1. 最终墙件预览已用 `scene_camp_wall_final.png` 重新生成,并经用户过目(U0)。
|
||||||
- 单测读表动态取值、以关系谓词为主:[camp_scene_layout_test.gd:82](../game/tests/unit/presentation/camp_scene_layout_test.gd#L82)(门扇命中对齐 gate_gap)、`:87`(布告板命中顶落围墙带)、`:77`(篝火命中贴贴图底)。
|
2. 十层 `.tres` 值与 §3 逐字一致;schema 默认值、视图层构建一致;层数仍为 10,bg/wall 仍占 z0/z1。
|
||||||
- 包内围墙件仍是旧 1280×49(`game/assets/art/scene/scene_camp_wall.png`);门扇件 240×211 由运行时压扁到矩形高(STRETCH_SCALE,2026-11-07 用户裁「不动美术素材」),无需换件。
|
3. 土线(围墙底+门扇底)与过审预览读感一致;底边界不是贯通全宽的直线;门扇底不再单独露直边,也不出现独立灰影;门扇 NORMAL/HOVER/DISABLED 切换后土线仍在。
|
||||||
|
4. 营地单测 V14+新钉值+门扇状态土线保留单测全绿;结构探针 PASS;营地截图的土线机检 PASS;营地屏 camp golden 已冻结并经用户确认;渲染闸全绿。
|
||||||
|
5. 独立验收审计(未参与实现的会话或子代理)通过,报告落 `reports/验收审计-营地场景重排接线-<实现日期>.md`(日期取审计当日)。
|
||||||
|
6. 游戏内终审已登记(用户自排,登记不阻塞);art-status-checklist 的营地行补录事实已列反哺点。
|
||||||
|
7. 代码域闸全绿,远端 CI 对合并提交为绿(跑闸步真跑过);静态扫描零新增红(S11「雷格」已在当前基线修复)。
|
||||||
|
8. 实现报告与反哺点清单写齐;实现报告内含**完成进度扫描记录**(见 1.3)。
|
||||||
|
9. 上游缺口已闭合:设计文档六件逐值已补录(`camp-scene-prompts.md` v1.10 §5 第 13 条);待办清单条目已在册(状态「已写卡」)。编入迭代/开工/提交/合并仍须用户发令。
|
||||||
|
|
||||||
|
### 1.3 完成需求时的完成进度扫描(收口前置,必做)
|
||||||
|
|
||||||
|
**任何卡或批次在宣称完成、写实现报告、请求合并之前,必须先扫描当前仓库的完成进度。未扫描不得宣称完成。**
|
||||||
|
|
||||||
|
- 扫描时以实查为准:已存在的实现也要逐项对照本卡,不因“看起来已有”而跳过;不假设“应该没做”或“应该已经做了”。
|
||||||
|
- 发现缺失、值不一致、素材与卡不符、测试缺读数、文档未同步,一律记为未完成;逐条列缺口,不得用一句“已完成”带过。
|
||||||
|
- 扫描记录写进实现报告,至少含:检查时间、当前 commit、每一项的实查值/实际状态、与卡的差异、结论。
|
||||||
|
- 扫描时点:**T0 开工扫描一次(基线)**;**T4 收口再扫描一次(最终)**。两次都留读数。
|
||||||
|
|
||||||
|
扫描面(逐项勾):
|
||||||
|
|
||||||
|
| 面 | 要读什么 | 完成判据 |
|
||||||
|
|---|---|---|
|
||||||
|
| 布局表 | `game/data/tables/camp_scene_layout.tres` 十层 texture_rect/hotspot、wall_band、gate_gap | 与 §3 表逐字一致;层序不变 |
|
||||||
|
| schema | `game/data/schemas/camp_scene_layout_table.gd` 默认值/注释 | wall_band=(0,220,1280,200);validate 通过 |
|
||||||
|
| 视图 | `game/presentation/views/camp_scene_view.gd` 层构建、`expand_mode`、土线材质、门扇状态材质 | 门扇 138 高生效;土线覆盖墙+门扇底;NORMAL/HOVER/DISABLED 不丢土线;10 层 |
|
||||||
|
| 素材 | `scene_camp_wall.png` 尺寸/色数/柱尖/底边;`scene_camp_gate.png`;`scene_camp_bg.png`;源/包 md5 | 墙 1280×164、不透明 12 色、柱尖完整、底边有缺口、源包 md5 一致;门扇 240×211;背景 1280×800 |
|
||||||
|
| 导入缓存 | `game/.godot/imported/*.ctex` 的 mtime 与 `source_md5` | 与盘上源文件 md5 一致;改素材后已强制重导入 |
|
||||||
|
| 单测 | `camp_scene_layout_test.gd` V14+钉值+门扇状态土线保留 | 全 PASS,exit 0 |
|
||||||
|
| 结构探针 | `ui_struct_probe` camp 段 | PASS |
|
||||||
|
| 渲染/土线/golden | `shot_probe` 营地截图+`check_soil_line`+camp golden+`render_gate.sh` | 土线断言 PASS;camp golden 在位且经用户确认;渲染闸全绿 |
|
||||||
|
| 设计文档 | `design/art/camp-scene-prompts.md` §5 第 6 条/第 13 条、`design/art/art-bible.md` §6.2 | 六件逐值在册(本卡前置);门扇底同口径/240×147 与 138 口径统一属文档批反哺点,不阻塞本卡 |
|
||||||
|
| 审计 | 独立验收审计报告 | 报告在位、发现已闭合 |
|
||||||
|
| 文档/记录 | art-status-checklist、实现报告、反哺点清单、终审登记 | 各自落位;反哺点有去向 |
|
||||||
|
| 仓库红账 | 当前 master 静态扫描/CI | 本卡改动面零新增红;静态扫描 S11 零命中;外部红有处置结论 |
|
||||||
|
|
||||||
|
## 2. 现状事实(开工复核基线,本卡不预写完成结论)
|
||||||
|
|
||||||
|
- 当前分支**已经包含**本卡的部分实现(历史合并所致),且**未做完**。开工先按 §1.3 扫描,按实查值决定“已对/需改/缺件”,禁按“未做”整批重写,也禁按“已有”跳过核对。
|
||||||
|
- 数据表 [camp_scene_layout.tres](../game/data/tables/camp_scene_layout.tres):以 §3 为目标值逐层核对;当前值以实查为准。
|
||||||
|
- 视图 [camp_scene_view.gd:130](../game/presentation/views/camp_scene_view.gd#L130) 按表建层,[camp_scene_view.gd:136](../game/presentation/views/camp_scene_view.gd#L136) 有 `EXPAND_IGNORE_SIZE`;土线材质是本案新增面。
|
||||||
|
- schema 加载期 fail-fast:[camp_scene_layout_table.gd:15](../game/data/schemas/camp_scene_layout_table.gd#L15);`wall_band` 包络校验在 [:59–:62](../game/data/schemas/camp_scene_layout_table.gd#L59-L62)。
|
||||||
|
- 单测 [camp_scene_layout_test.gd:26](../game/tests/unit/presentation/camp_scene_layout_test.gd#L26) 读表动态取值;[:88](../game/tests/unit/presentation/camp_scene_layout_test.gd#L88) 起为 2026-11-07 钉值断言。
|
||||||
|
- 素材:包内 [scene_camp_wall.png](../game/assets/art/scene/scene_camp_wall.png)、[scene_camp_bg.png](../game/assets/art/scene/scene_camp_bg.png)、[scene_camp_gate.png](../game/assets/art/scene/scene_camp_gate.png);尺寸与色数以 T0 实查为准。
|
||||||
|
- **素材源路径**:最终墙件 `scene_camp_wall_final.png` 在主区 `D:/code/g-plan2/artwork/2026-11-07-营地接线预览/`(artwork 不入 git,worktree 无副本);T0 从主区取源,核 md5 与包内一致。
|
||||||
|
- **写卡时实查基线(2026-11-08,worktree 基线 89f4fc78,供 T0 对照,不作完成结论)**:
|
||||||
|
- **已完成(实查)**:`.tres` 十层与 §3 逐字一致;schema 默认 `wall_band=(0,220,1280,200)`;view 有 `EXPAND_IGNORE_SIZE`/`STRETCH_SCALE`;V14 钉值断言在位;包内墙件 1280×164、全色 16(含透明/边缘 alpha)、不透明 12 色,与主区源件 md5 一致;门扇 240×211;背景 1280×800;`bash tests/static_scan.sh` S11 ok。
|
||||||
|
- **未完成(实查)**:土线裁切材质(wall/gate);门扇 NORMAL/HOVER/DISABLED 保土线;土线机检 `check_soil_line`;门扇状态单测 `_test_gate_state_keeps_soil_cut`;camp golden+`render_gate.sh` camp 段+`golden_baseline_refresh.sh --camp`;最终墙件预览 U0;游戏内终审登记;实现报告/反哺点。
|
||||||
|
- **接手动作**:上述均为写卡时点读数,接管人必须按 §1.3 做 T0 扫描复核当前 commit 的真实状态;已存在项逐项对照,不因「看起来已有」跳过;未完成项逐条补,不以一句「已完成」带过。
|
||||||
|
- **导入缓存坑(本会话实证)**:主区曾出现 `.ctex` 停在 11-06、源文件已是 11-07 的旧缓存;旧缓存会让渲染闸拿到旧背景/旧围墙,绿读数无效。改素材后必须 `--editor --quit` 强制重导入,并核对 `source_md5`。
|
||||||
|
- **S11 现状**:worktree 基线 89f4fc78 的 `game/probe/board_shot_probe.gd:34,35` 已是「危险格」;`bash tests/static_scan.sh` 实跑 S11 ok(扫描面 317 个文件)。历史日志里的「雷格」为旧读数,不构成本卡开工门;T3 复跑静态扫描,零新增红。
|
||||||
|
- 待办清单条目已补回(状态「已写卡」);设计文档六件逐值已补录 `camp-scene-prompts.md` v1.10 §5 第 13 条;见头部。
|
||||||
|
|
||||||
## 3. 设计契约(违反即返工)
|
## 3. 设计契约(违反即返工)
|
||||||
|
|
||||||
🔴 逐层锁定值(写进 .tres,值逐字照此):
|
🔴 逐层锁定值(写进 `.tres`,值逐字照此):
|
||||||
|
|
||||||
| 层键 | texture_rect | hotspot | hotspot_key |
|
| 层键 | texture_rect | hotspot | hotspot_key |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
@@ -35,103 +86,193 @@
|
|||||||
| notebook | (870,515,100,66) | (870,501,100,80) | notebook |
|
| notebook | (870,515,100,66) | (870,501,100,80) | notebook |
|
||||||
| campfire | (560,525,160,149) | (560,594,160,80) | campfire |
|
| campfire | (560,525,160,149) | (560,594,160,80) | campfire |
|
||||||
|
|
||||||
表级:`canvas=(1280,800)`、`hud_band_h=48`、`gate_gap=(520,760)`、`wall_band=(0,220,1280,200)`;层数组序不变(bg,wall,board,gate,dummy,forge,tent,chest,notebook,campfire)。
|
表级:`canvas=(1280,800)`、`hud_band_h=48`、`gate_gap=(520,760)`、`wall_band=(0,220,1280,200)`;层数组序不变(bg,wall,board,gate,dummy,forge,tent,chest,notebook,campfire),**总层数仍为 10**。
|
||||||
|
|
||||||
🔴 围墙件:1280×164、RGBA、≤32 色(实测 12 色)、顶行仅柱尖若干列不透明(柱尖补全)、底行全透明(入土缺口 1–7px 低频起伏);源文件=主检出 `artwork/2026-11-07-营地接线预览/scene_camp_wall_final.png`。
|
🔴 围墙最终件:1280×164、RGBA、≤32 色(全色 16 含透明/边缘 alpha;**不透明色实测 12**)、柱尖完整、奶油描边(与既有物件同色)、底边 1–7px 低频起伏透明缺口(按 200 高拉伸后约 1.2–8.5px);显示矩形 (0,220,1280,200),运行时按 200 高拉伸;源文件主区 `artwork/2026-11-07-营地接线预览/scene_camp_wall_final.png` 与包内文件 md5 必须一致(写卡时实查 md5 `328b83fa3a79a97ae3d0c02f5abf4604`)。
|
||||||
|
|
||||||
🔴 门扇 hotspot 高 147=贴图 138+底部 9px 余量(沿用旧表「命中比贴图高 9」口径,属实现微决策,见 §9 代拍板)。门扇件不换件:现 240×211 由运行时压扁到矩形(用户 2026-11-07 裁「不动美术素材」;设计文档中「随门洞压扁重画」旧句已在本批改为运行时压扁口径)。
|
🔴 门扇:沿用 240×211,不换件;运行时压扁到矩形 240×138,底压 y420;hotspot 240×147(贴图 138+9px 余量);门扇件底行中心区不透明(写卡时实查:底行局部 x99–143、全局 619–663 不透明,两侧为透明拱边),土线作用于底边中心可见区,两侧透明像素本就透出背景。
|
||||||
|
|
||||||
🔴 其余六件的 hotspot 由旧表相对关系同偏移得出(dummy 同贴图;forge y−46/高+46;chest y−46/x−12/宽+24;notebook y−14/高+14;campfire y−46/高 80;board 同贴图 y/高+19)——值已列上表,禁止再自拟。
|
🔴 **土线/入土线(围墙底+门扇底,2026-11-07 用户讨论定稿)**:
|
||||||
|
|
||||||
|
- 目标读感:围墙底与门扇底都不与地面形成直边,边界按低频起伏裁切,裁切处透出背景层同列地面像素;门扇底不能单独露直边加灰影。
|
||||||
|
- 实现形态:在 `CampSceneView` 内新增一个**土线裁切材质**(shader 字符串常量+一个私有应用函数),同时挂到 wall 层与 gate 层;不改 10 层结构、不新增图层、不新增运行时图片素材、不重画门扇件。
|
||||||
|
- 裁切参数:底边基线 y420;起伏带**名义 9px**(基准顶线 411,即基线往上 9px);逐列顶线 `top = 411 + round(2 + 1.5*sin(gx/11.0) + 1.0*sin(gx/29.0+1.3))`,公式摆动后**实际顶线 410–416(裁切深度 4–10px)**;`round` 半值方向按引擎实现,机检容差 ±1;`y ≥ top` 的像素裁掉(透出背景);紧邻裁切口的**最后可见行 `y = top−1` 压暗 0.85**(1px 暗边;`top` 行已被裁掉,压暗它无意义)。
|
||||||
|
- 全局坐标:`gx = UV.x * u_width + u_x_offset`(wall:offset 0、width 1280;gate:offset 520、width 240);`gy = u_y_offset + UV.y * u_height`(wall:220/200;gate:282/138)。不用 `FRAGCOORD`,避免视口缩放/黑边影响。gate 局部 x 经 offset 520 还原成画布全局 x,保证墙与门扇接缝处同一条边界。
|
||||||
|
- 材质与状态:土线材质直接挂 wall/gate 节点的 `material`。gate 的 NORMAL/HOVER **不得把 `material` 置 null**;DISABLED **不得替换成 `_desat_mat`**——土线 shader 内含 `desat` 强度 uniform(默认 0),gate DISABLED 时置 1、NORMAL/HOVER 时置 0;forge/chest 仍走既有 `_desat_mat`。`_apply_disabled` 改为 `_apply_disabled(key: StringName, node: Control) -> void` 以区分 gate;`_apply_state`/`_apply_hover` 的 `node.material = null` 对 gate 改为保留土线材质。wall 无状态切换,材质常驻。
|
||||||
|
- 层序:视图子节点序=表序(bg 0、wall 1、board 2、gate 3、dummy 4、forge 5、tent 6、chest 7、notebook 8、campfire 9);设计 z 层为 wall z1、gate z3、其余物件 z4–z6(同 z 内按表序)。土线是 wall/gate 自身的材质,不新增节点/图层,**10 层不变**;其余物件绘制在 wall/gate 之后,土线不遮物件。
|
||||||
|
- 悬停浮动:gate 既有 1–4px 整像素浮动沿用;土线裁切按节点基准矩形的 UV 计算,浮动时随节点整体移动(读作门扇抬起离土),验收截图取 NORMAL 态;浮动期 1–4px 离土读感不在本卡土线判据内。
|
||||||
|
- 验收:营地截图在墙底与门扇底都能看到同一条起伏边界;边界不是贯通全宽的直线;裁切边界以下首行像素与背景层同列地面像素颜色距离 ≤ 容差,且与墙件不透明色集合的最小距离 > 容差(排除灰影/墙色);接缝 x519/521 的顶线差 ≤1px;门扇底无单独直边/灰影。
|
||||||
|
- 素材与材质关系:围墙件底边 1–7px 缺口保留为素材属性(拉伸后约 1.2–8.5px);运行时土线材质按 4–10px 裁切;最终可见边界取两者**较深者(并集)**,两者都是低频起伏、方向一致,不冲突。
|
||||||
|
|
||||||
|
🔴 **最终墙件预览**:过审预览 `camp_new_layout_preview_c.png` 用的是候选墙 `wall_tipped_preview.png`;实现前必须用最终墙件(主区 artwork `scene_camp_wall_final.png`)重新生成预览(含土线裁切效果,裁切参数与 §3 同源),用户过目后才可开工。预览未过目=U0 未过,停。
|
||||||
|
|
||||||
|
🔴 背景:`scene_camp_bg.png` 1280×800(远景片+地面片拼接),接缝在围墙后;改素材后强制重导入。
|
||||||
|
|
||||||
## 4. 范围边界
|
## 4. 范围边界
|
||||||
|
|
||||||
做:上表十层数据、围墙件入包、单测新值钉断言(追加,不删旧断言)。
|
做:§3 十层数据与视图、土线裁切材质与门扇状态材质保留、最终墙件预览、单测/结构探针/土线机检/camp golden/渲染闸、独立审计、实现报告与反哺点。
|
||||||
不做:门扇/布告板/其余七件素材重出;背景层;土线改为独立代码层(入土效果落在围墙件缺口,零新代码);camp.md/art-bible/camp-scene-prompts 的进一步改写(归文档批)。
|
|
||||||
不收件去向:art-status-checklist 营地行状态更新归文档批(反哺点);游戏内终审归用户(登记不阻塞)。
|
不做:重画背景;重画门扇/布告板/其余七件素材;新增第 11 层;新增运行时图片素材(golden 测试基线除外);把土线做成独立图层;直接改 `design/`、根规则文件、`待办清单.md`、`体验验证清单.md`、`game/tests/README.md`(实现批禁写;一律列反哺点);不改 `board_shot_probe.gd`(S11 已在当前基线修复,非本卡面)。
|
||||||
|
|
||||||
|
不收件去向:art-status-checklist 营地行 → 文档批反哺点;门扇底口径/240×147 与 138 口径 → doc-design(六件逐值已补录);待办条目状态 → 登记段(已补回);编入迭代 → 编排段;游戏内终审 → 用户(登记不阻塞);README 能力行代表用例 → 反哺点。
|
||||||
|
|
||||||
## 5. 关联文档同步面
|
## 5. 关联文档同步面
|
||||||
|
|
||||||
| 文档 | 关联点 | 同步义务 |
|
| 文档 | 关联点 | 同步义务 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| design/art/art-bible.md §6.2 | 围墙显示矩形与墙脚入土线(已随设计批改到 v3.48) | 实现批不直改;若实现取此卡值时偏差则列反哺点 |
|
| design/art/art-bible.md §6.2 :405 | 入土线条款只写围墙底;§3 要求门扇底同口径 | 实现批不直改;反哺点,文档批补一句“门扇底同口径” |
|
||||||
| design/art/camp-scene-prompts.md §2.3/§3/§5 | 坐标表(已随设计批改到 v1.9) | 同上 |
|
| design/art/camp-scene-prompts.md §5 第 12 条 :250 | 现写墙脚 1–7px;门扇底与最终墙件口径需补 | 反哺点,归文档批 |
|
||||||
| design/ux/camp.md 第 29 行 | 围墙带 y220–420(已随设计批改) | 同上 |
|
| design/art/camp-scene-prompts.md §5 第 3 条 :241 vs §2.3 :114 | :241 写“显示矩形 240×147”,:114 写“门扇可见 y282–420(高 138)”;本卡口径=显示矩形 240×138、命中 240×147 | 反哺点,文档批统一口径 |
|
||||||
| design/art/art-status-checklist.md 营地行 | 需补「围墙件 2026-11-07 换代」事实 | 反哺点,归文档批落文 |
|
| design/art/camp-scene-prompts.md §5 第 6 条 :244+第 13 条 | 第 6 条只载“宝箱离底、其余上移 46px”关系句;六件逐值已由第 13 条补录 | 已闭合(2026-11-08 补录);实现批不直改设计文档 |
|
||||||
|
| design/ux/camp.md 第 29 行 | 现写围墙带/墙脚入土;门扇底土线需补 | 反哺点,归文档批 |
|
||||||
|
| design/art/art-status-checklist.md 营地行 | 需补“围墙件最终件 2026-11-07 换代+土线”事实 | 反哺点,归文档批 |
|
||||||
|
| game/tests/README.md:165 能力表 | 营地能力行代表用例需补 `check_soil_line`、`_test_gate_state_keeps_soil_cut`、camp golden | 实现批禁写;反哺点 |
|
||||||
|
| roadmap.md / 待办清单.md | 本卡编入迭代与状态推进 | 待办条目已补回(状态「已写卡」);编入迭代归编排段 |
|
||||||
|
| 体验验证清单.md | 游戏内终审登记项 | 归文档批/实现报告登记,实现批不直改 |
|
||||||
|
|
||||||
|
## 5.5 文件结构图(T 卡分解依据)
|
||||||
|
|
||||||
|
| 文件 | 职责 | 改动性质 | 验收对照表行 | 复用/新增 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| `game/data/tables/camp_scene_layout.tres` | 十层 texture_rect/hotspot/表级值唯一数据源 | 行为改动(数据);T0/T1 核对,若已一致则零改动 | 1–3 | 复用既有 |
|
||||||
|
| `game/data/schemas/camp_scene_layout_table.gd` | 默认值/加载期校验 | 非行为(仅核对;默认值已一致) | 1(schema 前置) | 复用既有 |
|
||||||
|
| `game/presentation/views/camp_scene_view.gd` | 十层建层、`EXPAND_IGNORE_SIZE`、土线裁切材质、门扇状态材质保留 | 行为改动 | 4、6、7 | 复用既有(新增 1 个 shader 常量+1 个私有函数+`_apply_disabled` 签名调整;不新增类变量) |
|
||||||
|
| `game/tests/unit/presentation/camp_scene_layout_test.gd` | V14 钉值+门扇状态土线保留单测 | 非行为(测试) | 1–3、7 | 复用既有(新增 1 个测试函数) |
|
||||||
|
| `tools/shot_checker.py` | 土线机检 `check_soil_line` | 非行为(闸机检) | 6 | 复用既有(新增 1 个函数) |
|
||||||
|
| `tools/render_gate.sh` | camp 全屏 golden 段 | 非行为(闸机检) | 8 | 复用既有(新增 1 段) |
|
||||||
|
| `tools/golden_baseline_refresh.sh` | `--camp` 冻结模式 | 非行为(闸机检) | 8 | 复用既有(新增 1 模式) |
|
||||||
|
| `game/tests/golden/<platform>/camp.png` | camp 全屏逐像素基线 | 非行为(测试资产) | 8 | **新增**(测试基线;test-conventions:100 在册例外;运行时零新增图片) |
|
||||||
|
| `game/assets/art/scene/scene_camp_wall.png` | 围墙最终件 | 资产改动(运行时) | 5 | 复用既有(覆盖同名件) |
|
||||||
|
| `reports/实现报告-营地场景重排接线-<实现日期>.md` | T4 产出物 | 非行为(报告) | — | 新增产出物 |
|
||||||
|
| `reports/反哺点-营地场景重排接线-<实现日期>.md` | T4 产出物 | 非行为(报告) | — | 新增产出物 |
|
||||||
|
| `reports/验收审计-营地场景重排接线-<实现日期>.md` | 独立审计报告 | 非行为(报告) | — | 新增产出物 |
|
||||||
|
| `artwork/2026-11-07-营地接线预览/compose_preview.py` | 最终预览生成 | 非行为(工作区,不入 git) | —(U0 人审) | 复用既有(改墙源/土线) |
|
||||||
|
|
||||||
## 6. 任务卡
|
## 6. 任务卡
|
||||||
|
|
||||||
### T0 围墙件入包(≈0.25 工作日)
|
### T0 最终墙件预览+导入基线+开工扫描(≈0.25 天)
|
||||||
|
|
||||||
- 取用:无。产出:`game/assets/art/scene/scene_camp_wall.png`(覆盖)。
|
- 取用:无。产出:用户过目的最终预览、导入缓存基线、开工扫描记录。
|
||||||
- [ ] 从主检出 `artwork/2026-11-07-营地接线预览/scene_camp_wall_final.png` 拷入 → 核对尺寸 1280×164、模式 RGBA
|
- [ ] 从主区 `D:/code/g-plan2/artwork/2026-11-07-营地接线预览/` 取 `scene_camp_wall_final.png`;把 `compose_preview.py` 的墙源改为该件;把“土线贴条”改为与 §3 同参数的裁切(wall+gate、`gx` 全局坐标、顶线公式、`top−1` 暗边),生成 `camp_new_layout_preview_final.png`。
|
||||||
- [ ] 建隔离基线目录并跑色板闸:`mkdir -p /tmp/wall_base /tmp/wall_only && cp game/assets/art/scene/scene_camp_{board,gate,dummy,forge,tent,chest,notebook,campfire}.png /tmp/wall_base/ && cp game/assets/art/scene/scene_camp_wall.png /tmp/wall_only/ && python tools/palette_check.py /tmp/wall_only --baseline /tmp/wall_base` → 围墙零新增色(八件基线)
|
- [ ] 用户过目最终预览(U0);未过目停。
|
||||||
- [ ] 跑 `python tools/path_check.py` → 0 问题(worktree 缺 `artwork/mockups` 时该项 SKIP/FAIL 属环境坑:以主检出 `--repo` 口径复核)
|
- [ ] 跑 `Godot_console.exe --headless --path game --editor --quit` 强制重导入;核对 `scene_camp_bg/wall/gate` 的 `.ctex` mtime 与 `source_md5` 和源文件一致,记录读数。
|
||||||
|
- [ ] 按 §1.3 做 T0 扫描:读 `.tres`、schema、view、素材、单测、设计文档、golden、静态扫描,逐项记录实查值与差异;扫描记录进实现报告草稿。
|
||||||
|
- [ ] 跑 `python tools/palette_check.py game/assets/art --baseline game/tests/golden/palette_baseline` 与 `python tools/path_check.py --repo D:/code/g-plan2`(artwork 在主区,worktree 无副本),核源/包 md5 一致;记录读数;预览文件不入 git(artwork 工作区)。
|
||||||
|
|
||||||
### T1 布局表换代(≈0.25 工作日)
|
### T1 十层布局与视图(≈0.25 天)
|
||||||
|
|
||||||
- 取用:T0 的素材。产出:`game/data/tables/camp_scene_layout.tres`(十层+表级值)。
|
- 取用:T0 的扫描基线。产出:与 §3 逐字一致的 `.tres`/schema/视图。
|
||||||
- [ ] 按 §3 表逐字改十层 texture_rect/hotspot 与 wall_band → 跑 `godot --headless --path game --script res://tests/unit/presentation/camp_scene_layout_test.gd`(加载期 validate+钉值+关系谓词全绿,exit 0)
|
- [ ] 按 §3 表逐层核对 `camp_scene_layout.tres` 的 texture_rect/hotspot/hotspot_key、`wall_band`、`gate_gap`;不一致的按表改,已一致的保留并记录“已对”。
|
||||||
- [ ] `_build_layer_node` 的 TextureRect 加 `expand_mode = EXPAND_IGNORE_SIZE`(否则门扇节点被贴图最小高 211 夹住、矩形 138 不生效)→ 场景探针 ui_struct_probe camp V1 转绿
|
- [ ] 核对 `camp_scene_layout_table.gd:9` 默认 `wall_band=(0,220,1280,200)` 与注释。
|
||||||
|
- [ ] 核对 `camp_scene_view.gd:136` 的 `TextureRect.EXPAND_IGNORE_SIZE`+`STRETCH_SCALE`;确认门扇节点高 138。
|
||||||
|
- [ ] 跑 `Godot_console.exe --headless --path game --script res://tests/unit/presentation/camp_scene_layout_test.gd` → exit 0;跑 `Godot_console.exe --headless --path game res://probe/ui_struct_probe.tscn` → PASS。
|
||||||
|
- 产出:布局/视图一致;两条读数。
|
||||||
|
|
||||||
### T2 新值钉断言+收口(≈0.25 工作日)
|
### T2 土线(围墙底+门扇底)+机检+camp golden(≈0.5 天)
|
||||||
|
|
||||||
- 取用:T1 的表。产出:`game/tests/unit/presentation/camp_scene_layout_test.gd`(追加断言);`reports/iter<N>-实现报告-2026-11-07.md`;`reports/iter<N>-反哺点-2026-11-07.md`。
|
- 取用:T1 的 view。产出:土线材质+土线机检+camp golden+营地截图读数。
|
||||||
- [ ] 在 `_test_layout_hotspot_geometry` 追加:wall/gate/board/wall_band 四条钉值(已在本批落笔);六件落位钉值一条(逐层 Rect2 比对)
|
- [ ] 在 `camp_scene_view.gd` 新增 `_SOIL_CUT_SHADER_SRC`(字符串常量)与 `_apply_soil_cut(node: TextureRect, x_offset: float, rect_w: float, y_offset: float, rect_h: float) -> void`;按 §3 的参数裁 wall/gate 底边;`_apply_disabled` 改为 `_apply_disabled(key: StringName, node: Control) -> void`,gate 走 `desat` uniform、NORMAL/HOVER 保留土线材质;不新增文件、不新增图层、不新增运行时素材、不新增类变量。
|
||||||
- [ ] 跑 `python tools/run_smoke.py` → exit 0;跑营地套件 `godot --headless --path game --script res://tests/unit/presentation/camp_scene_layout_test.gd` → exit 0;跑场景探针 `…console.exe --headless --path . res://probe/shot_probe.tscn` + `python tools/shot_checker.py <截图目录>` → A 段 PASS
|
- [ ] 在 `camp_scene_layout_test.gd` 新增 `_test_gate_state_keeps_soil_cut` 并接入 `_run_all`:实例化 `CampSceneView`,对 gate 依次 NORMAL/HOVER/DISABLED,断言 `gate.material` 始终为土线材质、`desat` 参数随态变化;跑单测 → exit 0。
|
||||||
- [ ] 写实现报告(各卡状态+目检清单+决定记录)与反哺点清单(§5 四条逐条落点)
|
- [ ] 在 `tools/shot_checker.py` 新增 `check_soil_line(img: Image.Image, failures: list) -> None`,在 `main()` 处理 `shot_camp.png` 时调用;对墙底与门扇底取样:按截图宽高与设计基准 1280×800 的比例换算坐标(禁写死 1280/420);墙底取可见段(避开帐篷/门扇覆盖),门扇底取底行不透明中心区(写卡时实查全局 x619–663);断言顶线 410–416、≥3 个不同顶线值、接缝 x519/521 差 ≤1px、边界下首行对 `scene_camp_bg.png` 同列颜色距离 ≤ 容差且非墙色、`top−1` 暗边、gate 底无直边/灰影;失败写入 failures。
|
||||||
|
- [ ] 窗口化跑 `Godot_console.exe --path game --quit-after 3000 res://probe/shot_probe.tscn -- <截图目录>` 产出营地截图;跑 `python tools/shot_checker.py <截图目录> shot_camp.png` → PASS。
|
||||||
|
- [ ] 在 `tools/golden_baseline_refresh.sh` 增 `--camp` 模式(`shot_probe` 截图 → `game/tests/golden/<platform>/camp.png`);用户对照最终预览确认 `shot_camp.png` 后跑 `bash tools/golden_baseline_refresh.sh --camp` 冻结;未确认不得冻结。
|
||||||
|
- [ ] 在 `tools/render_gate.sh` 菜单 golden 段后增加 camp 全屏 golden 段(比对 `camp.png`,容差沿用脚本头注释口径);跑 `bash tools/render_gate.sh game` → 全绿。
|
||||||
|
- [ ] 记录营地截图的 std/colors/eff 与土线断言读数。
|
||||||
|
|
||||||
|
### T3 全量验证与独立审计(≈0.5 天)
|
||||||
|
|
||||||
|
- 取用:T2 的土线+机检+camp golden。产出:代码域全绿、独立审计报告、CI 读数。
|
||||||
|
- [ ] 改素材后再次强制重导入;跑 `bash tools/run_all_gates.sh --code` → 冒烟/系统/单元 4 分片/探针/渲染/色板/静态扫描全绿;静态扫描零新增红(S11 已在基线修复)。
|
||||||
|
- [ ] 独立验收审计:未参与实现的会话或子代理按本卡 §7 逐行核;发现按四类分流处置;报告落 `reports/验收审计-营地场景重排接线-<实现日期>.md`;未过不得合并。
|
||||||
|
- [ ] 游戏内终审登记到实现报告实机目检总清单(用户自排,不阻塞)。
|
||||||
|
- [ ] 合并后按需 `tools/ci_check.sh <合并提交>` 现查;绿必须坐实“跑闸”步真跑过;clone 失败不算绿。
|
||||||
|
|
||||||
|
### T4 收口产出物+最终完成进度扫描(≈0.25 天)
|
||||||
|
|
||||||
|
- 取用:T0–T3 全部读数。产出:实现报告、反哺点清单、最终扫描记录。
|
||||||
|
- [ ] 写 `reports/实现报告-营地场景重排接线-<实现日期>.md`:各卡状态、实机目检总清单、遗留读数义务、实现决定记录;**内含 §1.3 的 T4 完成进度扫描记录**。
|
||||||
|
- [ ] 写 `reports/反哺点-营地场景重排接线-<实现日期>.md`:§5 每条同步面都有落点;art-status-checklist、README 能力行、体验验证清单按实况列。
|
||||||
|
- [ ] 按 §1.3 做 T4 扫描:逐项实查;缺项/偏差列清单;未闭合不得宣称完成。
|
||||||
|
- [ ] 提交与合并前向用户请示;未获指令不得 commit/merge。
|
||||||
|
|
||||||
## 7. 验证闸(改动—验收对照表)
|
## 7. 验证闸(改动—验收对照表)
|
||||||
|
|
||||||
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||||
|---|---|---|---|---|---|---|
|
|---|---|---|---|---|---|---|
|
||||||
| 围墙显示矩形 220/200(判据出处 design/ux/camp.md:29) | camp_scene_layout.tres wall | V14 围墙矩形钉值(camp_scene_layout_test.gd `_test_layout_hotspot_geometry`) | 单元 | load 表+validate | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 围墙显示矩形 220/200(判据出处 design/ux/camp.md:29) | `camp_scene_layout.tres` wall | V14 围墙矩形钉值(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | load 表+validate | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
| 门/板跟随(判据出处 design/art/camp-scene-prompts.md:250) | .tres gate/board | V14 门板矩形钉值 | 单元 | 同上 | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 门/板跟随(判据出处 design/art/camp-scene-prompts.md:250) | `.tres` gate/board | V14 门扇/告示板矩形钉值(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | 同上 | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
| 其余六件落位(判据出处 design/art/camp-scene-prompts.md:244) | .tres 六件 | V14 六件落位钉值+七命中区几何红线(validate+不相交+不越界) | 单元 | 同上 | texture_rect/hotspot 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 其余六件落位(判据出处 design/art/camp-scene-prompts.md:244+§5 第 13 条) | `.tres` 六件 | V14 六件落位钉值+几何红线(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | 同上 | texture_rect/hotspot 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
| 门扇显示高 138(判据出处 design/art/camp-scene-prompts.md:250) | camp_scene_view.gd `_build_layer_node` 加 `EXPAND_IGNORE_SIZE` | 场景探针 ui_struct_probe camp V1「层贴图矩形≠layout 表」 | 探针 | `res://probe/ui_struct_probe.tscn`(camp 段) | 节点 position/size 逐值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 门扇显示高 138(判据出处 design/art/camp-scene-prompts.md:250) | `camp_scene_view.gd` `EXPAND_IGNORE_SIZE` | `ui_struct_probe` camp V1 层贴图矩形(`ui_struct_probe.gd:_ready` camp 段) | 探针 | `res://probe/ui_struct_probe.tscn` | 节点 position/size | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
| 围墙件换代(判据出处 design/art/art-bible.md:212) | scene_camp_wall.png | T0 `palette_check`/`path_check` | 资产 | 文件读数 | 色数 12、零新增色 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 围墙最终件(判据出处 design/art/art-bible.md:404) | `scene_camp_wall.png` | T0 `palette_check`/`path_check`+最终墙预览过目 | 资产 | 文件读数+用户过目 | 尺寸 1280×164、不透明 12 色、柱尖/奶油描边/底缺口、源包 md5 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
| 墙脚入土(判据出处 design/art/art-bible.md:396) | 围墙件底行 | 目检(游戏内终审,登记式) | 目检 | 营地屏 | 墙底无贯通直线 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 土线覆盖围墙底+门扇底(判据出处 design/art/art-bible.md:405) | `camp_scene_view.gd` 土线裁切材质挂 wall/gate | `shot_checker.py:check_soil_line(img, failures)`+`shot_camp.png`:顶线 410–416、≥3 个不同顶线值、接缝差≤1px、边界下首行对背景同列颜色距离≤容差且非墙色、`top−1` 暗边、gate 底无直边/灰影 | 探针 | `shot_probe` 营地窗口化截图 | 截图像素:边界行/颜色距离/暗边亮度 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
| 营地屏铺底不回归(判据出处 design/ux/camp.md:29) | 十层矩形整体 | 场景探针 `shot_probe` camp 截图+`shot_checker` A 段(角色/面板骨架不回归) | 探针 | `--headless --path . res://probe/shot_probe.tscn` | 截图色彩数/骨架 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
| 门扇状态切换保留土线(判据出处 design/art/art-bible.md:405) | `camp_scene_view.gd` `_apply_state`/`_apply_hover`/`_apply_disabled` | `camp_scene_layout_test.gd:_test_gate_state_keeps_soil_cut`:实例化 `CampSceneView`,对 gate 依次 NORMAL/HOVER/DISABLED,断言 `gate.material` 始终为土线材质、`desat` 参数随态变化 | 单元 | `camp_scene_view.gd` 真实类+`camp_scene_layout.tres` | `gate.material` 引用+shader uniform 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
|
| 营地屏渲染不回归+golden(判据出处 design/engineering/test-conventions.md:100) | 十层+土线整体;`tools/render_gate.sh` camp 段;`game/tests/golden/<platform>/camp.png` | `render_gate.sh` 七屏+A-D+土线机检+camp golden 逐像素 | 探针 | `bash tools/render_gate.sh game` | 截图色彩/骨架/土线/camp.png 逐像素 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||||
|
|
||||||
注:未删改任何旧断言;新增 5 条钉值断言(围墙/门扇/告示板/围墙带/六件落位),测试削弱申报:无。
|
注:未删改 V14 旧断言;新增钉值、门扇状态土线保留单测、土线机检与 camp golden 属追加。测试削弱申报:无。
|
||||||
|
|
||||||
**独立验收审计**:入口=未参与实现的独立会话或子代理(对照本卡 §7 逐行核);报告文件 `reports/iter<N>-验收审计-2026-11-07.md`;未过不得合并。
|
**独立验收审计**:入口=未参与实现的独立会话或子代理(对照本卡 §7 逐行核);报告文件 `reports/验收审计-营地场景重排接线-<实现日期>.md`;未过不得合并。
|
||||||
|
|
||||||
## 8. 异常分级
|
## 8. 异常分级
|
||||||
|
|
||||||
L1 自救:格式/导入缓存类异常自行重跑。L2 记录继续:非本卡面的既有红记录进报告。L3 停机:表值触 schema fail-fast 或与 §3 冲突=停卡呈报(上游缺陷退写卡段);素材缺位=停卡(不得用旧 49px 墙凑合)。
|
- L1 自救:导入缓存/格式类异常自行重跑重导入。
|
||||||
|
- L2 记录继续:非本卡面的存量红记录归属;若挡住代码域全绿,停在该红上,不修别批文件。当前基线 S11 已清零;若 T3 复跑出现新红,按红账不清不开新批处置。
|
||||||
|
- L3 停机呈报:表值与 §3 冲突、schema fail-fast、最终墙预览未过目、土线机检失败、camp golden 未获用户确认即冻结、独立审计未过、CI 红、gdstyle/预算互斥——停卡写报告等用户;机检预算互斥=上游缺陷,退回写卡段。
|
||||||
|
|
||||||
## 9. 代拍板白名单
|
## 9. 代拍板白名单
|
||||||
|
|
||||||
门扇 hotspot 高 147(贴图 138+9 余量);七件 hotspot 的平移口径(§3 已列值);T2 钉值断言的命名与位置(同套件内追加)。超出=记实现报告「实现决定记录」。
|
- 门扇 hotspot 高 147、六件 hotspot 平移口径(§3 已定值)。
|
||||||
|
- 土线 shader 的内部结构、uniform/material 命名;土线机检的取样窗口、颜色距离容差、暗边阈值;camp golden 的比对容差沿用 `render_gate.sh` 现行口径(但起伏带名义 9px/顶线 410–416、`top−1` 0.85 暗边、顶部函数为锁定值)。
|
||||||
|
- 新测试函数命名与所在行:`check_soil_line(img: Image.Image, failures: list) -> None`、`_test_gate_state_keeps_soil_cut`(以本卡 §7 为准,实现照单落名)。
|
||||||
|
- 超出=记实现报告“实现决定记录”。
|
||||||
|
|
||||||
## 10. 待裁点
|
## 10. 待裁点
|
||||||
|
|
||||||
零待裁点(用户已裁:墙 220/200、门板跟随、入土线;2026-11-07)。开工门=U0。
|
零待裁点。上游缺口已闭合(设计文档六件逐值补录于 `camp-scene-prompts.md` v1.10 §5 第 13 条;待办清单条目已补回,状态「已写卡」)。开工门=U0:最终墙件预览用户过目;提交/合并须用户发令。
|
||||||
|
|
||||||
## 11. 落位与可复用性预检
|
## 11. 落位与可复用性预检
|
||||||
|
|
||||||
本批零新增代码文件、零新增函数:改既有 `camp_scene_layout.tres`(数据行唯一落点)、既有单测追加断言、覆盖既有 `scene_camp_wall.png`(消费名不变,`UiKit.TEX_CAMP_WALL`);另产出两份 `reports/` 过程件(实现报告、反哺点清单)。复用面:视图/装载/校验链现成(camp_scene_view.gd、schema.validate、camp_scene_layout_test.gd),不新增渲染件。唯一面:坐标只落表一处,视图/探针/单测均读表。
|
- 土线裁切:新增 1 个 shader 字符串常量+1 个私有应用函数+`_apply_disabled` 签名调整;落 `camp_scene_view.gd`;盘上无同类土线 shader(`_DESAT_SHADER_SRC` 是禁用态去饱和,职责不同,不能复用);wall/gate 共用同一 wave 函数,唯一落点在该文件;不新增文件、不新增图层、不新增运行时素材;土线材质挂节点 `material`,不新增类变量。
|
||||||
|
- 土线机检:在 `tools/shot_checker.py` 新增 1 个函数,复用现有 PIL 读图与 `main()` 循环;不新增脚本文件;对 `shot_camp.png` 调用。
|
||||||
|
- camp golden:新增 1 张测试基线 `game/tests/golden/<platform>/camp.png`(test-conventions:100 在册例外);`tools/golden_baseline_refresh.sh` 增 `--camp` 模式、`tools/render_gate.sh` 增 camp 段,均不新增脚本。
|
||||||
|
- 预览:只改 `artwork/` 工作区 `compose_preview.py`(不入 git),不改游戏素材;最终预览是用户过目件,不是运行时资产。
|
||||||
|
- 数据/素材:无新增运行时数据件、无新增运行时图片;十层结构不变;墙件覆盖同名件。
|
||||||
|
|
||||||
## 12. 实现规范预算
|
## 12. 实现规范预算
|
||||||
|
|
||||||
零新增文件、零新增方法 → gdstyle 阈值面无新增;存量触面:camp_scene_layout_test.gd 追加一段断言(方法数不变、成员数不变)。
|
- `camp_scene_view.gd` 存量触面:`tools/gdstyle_baseline.txt` 无本文件登记键(实查零命中);按默认阈值 20/15 自查:公开方法 4/20、类变量 13/15;新增面=1 个 shader 常量+1 个私有函数+`_apply_disabled` 签名调整,**不新增类变量**;改后 4/20、13/15;超预算=停卡。
|
||||||
|
- `tools/shot_checker.py` 新增 1 个函数,不新增文件;无 gdstyle 约束。
|
||||||
|
- `tools/render_gate.sh`/`tools/golden_baseline_refresh.sh` 各增 1 段/1 模式,不新增文件;无 gdstyle 约束。
|
||||||
|
- 零新增 `.gd` 文件、零新增 `.tscn`、零新增运行时资源;shader 以字符串常量存在,不新增 `.gdshader`;唯一新增入库件=`game/tests/golden/<platform>/camp.png`(测试基线,test-conventions:100 在册例外)。
|
||||||
|
|
||||||
## 13. 复核记录
|
## 13. 复核记录
|
||||||
|
|
||||||
|
> 第 1 轮=写卡人自审(非独立);第 2 轮=独立只读子代理复核(未参与本卡撰写,2026-11-08,17 条发现、零待裁);第 3 轮=复核处置中自审。17 条已全部处置:15 条就地改卡,2 条退回上游后经用户 2026-11-08 授权闭合(设计文档六件逐值补录、待办条目补回)。复核证据(文件/行锚/实跑命令)已并入 §2、§5、§7 与本节各条;复核报告文件按用户 2026-11-08 裁清理,不提交、不合回。**卡片达到成立判据;编入迭代/开工/提交/合并仍须用户发令。**
|
||||||
|
|
||||||
| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 |
|
| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| 1 | 前台只读复核子代理(未参与撰写) | 七件/六件计数不一(§1/§3/§7) | 补写 | 统一为六件(dummy/forge/tent/chest/notebook/campfire) |
|
| 1 | 写卡人自审(非独立) | 旧方案把土线限定为“围墙件缺口、零新代码”,会丢掉门扇底土线 | 补写 | 本卡 §3 改为 wall+gate 共用土线裁切材质;10 层不变;不新增素材 |
|
||||||
| 1 | 同上 | 六件新值未钉,V14 只证互斥/边界 | 补写 | T2 增六件落位钉值断言,本批已落(PASS 实测) |
|
| 1 | 同上 | 过审预览用候选墙,最终墙件未单独过目 | 补写 | 本卡 §3/T0 增加最终墙预览用户过目(U0) |
|
||||||
| 1 | 同上 | T2 单元套件无真实入口命令 | 补写 | 改为 `godot --headless --path game --script res://tests/unit/presentation/camp_scene_layout_test.gd` |
|
| 1 | 同上 | 渲染闸 A-D 不覆盖土线像素,旧完成定义只写单测/冒烟 | 补写 | 本卡 §1.2/§7/T2 增加土线机检与渲染闸 |
|
||||||
| 1 | 同上 | T1 `python -c` 不能读 .tres;`db.load_tables` 无命令入口 | 补写 | T1 改为直跑该单测(加载期 validate+钉值) |
|
| 1 | 同上 | 旧导入缓存会让渲染闸拿旧素材,绿读数无效 | 补写 | 本卡 §2/§6 T0/T3 增加强制重导入与 source_md5 核对 |
|
||||||
| 1 | 同上 | T0 基线写占位目录;扫全 scene 会带 stage 件红 | 补写 | 写入临时隔离基线命令(八件拷贝)与限定扫描面;path_check 环境坑注明 |
|
| 1 | 同上 | 独立审计、游戏内终审、art-status-checklist 未进完成定义 | 补写 | 本卡 §1.2/§5/§6 T3/T4 补齐 |
|
||||||
| 1 | 同上 | prompts §5 第 9 条布告板旧值 (845,224) | 退回上游 | 文档区已修:(845,241,130,121),底 362 落在墙内 |
|
| 1 | 同上 | 待办清单已无本条目,卡片来源悬空 | 退回上游 | 头部记登记缺口;§10 开工门;编入迭代前由登记段补回 |
|
||||||
| 1 | 同上 | art-bible §6.2 门扇旧句「贴图 240×138 随门洞压扁重画、y283–367」 | 退回上游 | 文档区已修:运行时压扁、底压 y420 |
|
| 1 | 同上 | 写卡时曾见外部 S11 红(board_shot_probe「雷格」),会挡住代码域全绿 | 自判 | 实查当前基线 89f4fc78 已修复为「危险格」,`static_scan.sh` S11 ok;本卡去除该开工门,T3 复跑确认零新增红 |
|
||||||
| 1 | 同上 | prompts §2.3 门洞 y282–420 与在包墙件全高缺口不相符 | 退回上游 | 文档区已修:墙件缺口全高 220–420、门扇可见 282–420 |
|
| 1 | 同上 | 10 层结构不能新增图层,土线必须挂在既有 wall/gate 层 | 自判 | 本卡 §3/§11 采用裁切材质挂 wall/gate,不新增第 11 层 |
|
||||||
| 1 | 同上 | art-bible:395 不含色数判据 | 补写 | 锚改 art-bible.md:212(营地子板色数行) |
|
| 2 | 独立只读子代理(未参与本卡撰写) | §7 art-bible 锚 `:395/:396` 实为 `:404/:405` | 自判 | 已改 §7 行 5/6 锚为 `:404/:405` |
|
||||||
| 1 | 同上 | §13 复核报告文件行违反 2026-11-06 裁(凭据=本节) | 自判 | 删除该行 |
|
| 2 | 同上 | 六件逐值未载于设计文档(`prompts:244` 仅关系句;`grep design/` 零命中) | 退回上游(已闭合) | 用户 2026-11-08 授权补录:`camp-scene-prompts.md` v1.10 §5 第 13 条载六件逐值;头部/§5/§7/§10 同步 |
|
||||||
| 1 | 同上 | 门扇「重画 138」vs 运行时压扁,§10 零待裁是否成立 | 自判 | 用户 2026-11-07 明裁「不需要动任何美术素材」,运行时压扁即终稿;§10 零待裁成立 |
|
| 2 | 同上 | 顶部公式实际 410–416(裁 4–10px),与“9px 带”表述矛盾 | 自判 | §3 改为“名义 9px(基准顶线 411)+实际 410–416”;§9 同步 |
|
||||||
| 2 | 后台只读复核子代理(未参与撰写) | schema 默认 `wall_band=(0,240,1280,70)` 与注释仍旧值 | 补写 | schema 默认改 (0,220,1280,200)+注释同步 |
|
| 2 | 同上 | “y≥top 裁掉”与“top 行压暗”互斥(被裁行不可见) | 自判 | §3 改为“最后可见行 `top−1` 压暗 0.85” |
|
||||||
| 2 | 同上 | §7「未新增/删除任何断言」措辞与 +5 条钉值矛盾 | 补写 | 改为「未删改旧断言,新增 5 条钉值断言」 |
|
| 2 | 同上 | “其余物件 z4–z6”与视图子节点 0–9 混淆 | 自判 | §3 写明视图子节点序 0–9+设计 z 层 wall1/gate3/其余 z4–z6 |
|
||||||
| 2 | 同上 | test.gd 头注「禁坐标字面量」与新钉值冲突 | 补写 | 头注改为「关系谓词为主+重排钉值」,钉值前加 `# oracle:` 行锚 |
|
| 2 | 同上 | 单一材质无法处理 gate 局部 x 的 +520 偏移 | 补写 | §3 钉 `gx=UV.x*u_width+u_x_offset`(wall 0/1280;gate 520/240) |
|
||||||
|
| 2 | 同上 | gate NORMAL 置 null、DISABLED 换 `_desat_mat` 会抹掉土线 | 补写 | §3 钉土线材质常驻+`desat` uniform;§7 增行 7;新增单测 `_test_gate_state_keeps_soil_cut` |
|
||||||
|
| 2 | 同上 | 缺 camp golden(`test-conventions.md:100`) | 补写 | §1.2/§6 T2/T3/§7 行 8/§11/§12 增 camp golden;`render_gate.sh`+`golden_baseline_refresh.sh --camp` |
|
||||||
|
| 2 | 同上 | 土线机检写死 1280 且“同源”判据循环 | 补写 | §6 T2 改为按截图宽高比例取样;对 `scene_camp_bg.png` 同列颜色距离+非墙色;容差归白名单 |
|
||||||
|
| 2 | 同上 | 缺文件结构图 | 补写 | 增 §5.5 文件结构图 |
|
||||||
|
| 2 | 同上 | 测试函数名未钉(“或等价函数”、§9 循环) | 补写 | 钉 `check_soil_line(img: Image.Image, failures: list) -> None`+`_test_gate_state_keeps_soil_cut`;§7/§9 同步 |
|
||||||
|
| 2 | 同上 | §2 行锚错:schema `:67`→`:59–:62`、view `:133`→`:130`、test `:82`→`:26` | 自判 | 已改 |
|
||||||
|
| 2 | 同上 | §12 写 S13 键,但 `camp_scene_view.gd` 无登记键 | 自判 | §12 改为“无登记键;默认 20/15;现状公开方法 4、类变量 13;不新增类变量” |
|
||||||
|
| 2 | 同上 | 外部 S11 已不成立(`board_shot_probe` 现为「危险格」) | 自判 | §1.2/§2/§4/§8/§10/§13 去除 S11 红;T3 静态扫描零新增红 |
|
||||||
|
| 2 | 同上 | `prompts` §5 第 3 条 `:241` 240×147 与 §2.3 `:114` 138 矛盾未列同步面 | 补写 | §5 增行;本卡口径=显示 240×138、命中 240×147 |
|
||||||
|
| 2 | 同上 | §13 无独立复核记录 | 补写 | 本节增 17 行+复核报告路径 |
|
||||||
|
| 2 | 同上 | 待办清单无本条目 | 退回上游(已闭合) | 用户 2026-11-08 授权补回:`待办清单.md` 条目状态「已写卡」;头部/§5/§10 同步 |
|
||||||
|
| 3 | 写卡人自审(复核处置中,非独立) | 原文写“门扇件底行 alpha 全 255”,实查底行仅局部 x99–143 不透明、两侧 195px 透明,表述失真 | 自判 | §3 改为“底行中心区不透明+两侧透明拱边”;T2 门扇取样窗口钉全局 x619–663 |
|
||||||
+2
-1
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
- **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。
|
- **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。
|
||||||
- **迭代位**:迭代 1–55 已完成。迭代 56 已编待开工(结算期文字列表退役+封印动作改版两卡)。各迭代收口与批后收尾沿革查 git 提交信息与 `reports/`。
|
- **迭代位**:迭代 1–55 已完成。迭代 56 已编待开工(结算期文字列表退役+封印动作改版两卡)。各迭代收口与批后收尾沿革查 git 提交信息与 `reports/`。
|
||||||
- **下一步**:发令开工 56(≈12.25 日,两卡:结算期文字退役先行+封印改版);待编池:效果通道与事件词零现役普查(唯一遗留待裁=秘宝表 schema 旧词面 9 词收尾)、结算明细文案入表(待文档设计)、二三关棋盘观感(待设计+待美术)、测试面真输入化批发现四项待裁(待执行);EC8 热重载实装待用户另立条目。
|
- **下一步**:发令开工 56(≈12.25 日,两卡:结算期文字退役先行+封印改版);待编池:效果通道与事件词零现役普查(唯一遗留待裁=秘宝表 schema 旧词面 9 词收尾)、结算明细文案入表(待文档设计)、棋盘瓦片与立体表现重做(已写卡,待编排)、测试面真输入化批发现四项待裁(待执行);EC8 热重载实装待用户另立条目。
|
||||||
|
|
||||||
## 里程碑时间线
|
## 里程碑时间线
|
||||||
|
|
||||||
@@ -90,6 +90,7 @@
|
|||||||
| 迭代 54 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.625 个工作日 | 已退役(git 历史可考) |
|
| 迭代 54 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.625 个工作日 | 已退役(git 历史可考) |
|
||||||
| 迭代 55 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.75 个工作日 | 已退役(git 历史可考) |
|
| 迭代 55 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.75 个工作日 | 已退役(git 历史可考) |
|
||||||
| 迭代 56 | 待开工 | reports/需求卡片-结算期文字列表退役批-2026-11-07.md<br>reports/需求卡片-封印动作改版批-2026-11-07.md | 2026-11-07 | ≈12.25 个工作日〔用户特批 2026-11-07 超 10 个工作日〕 | — |
|
| 迭代 56 | 待开工 | reports/需求卡片-结算期文字列表退役批-2026-11-07.md<br>reports/需求卡片-封印动作改版批-2026-11-07.md | 2026-11-07 | ≈12.25 个工作日〔用户特批 2026-11-07 超 10 个工作日〕 | — |
|
||||||
|
| 迭代 57 | 待开工 | reports/需求卡片-营地场景重排接线-2026-11-07.md<br>reports/需求卡片-棋盘瓦片与立体表现重做批-2026-11-07.md | 2026-11-08 | ≈11.25 个工作日〔用户特批 2026-11-08 超 10 个工作日〕 | — |
|
||||||
|
|
||||||
- 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。
|
- 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。
|
||||||
- 「已退役(git 历史可考)」= 需求卡片或实现报告曾存在,已按「证据只留最新」退役;已完成迭代的实现报告列只填 reports/ 现存路径或本保留字,不填「—」。
|
- 「已退役(git 历史可考)」= 需求卡片或实现报告曾存在,已按「证据只留最新」退役;已完成迭代的实现报告列只填 reports/ 现存路径或本保留字,不填「—」。
|
||||||
|
|||||||
+1
-2
@@ -14,7 +14,6 @@
|
|||||||
- `runsum_m3iter9exit_81000_n400_20261003.jsonl`(迭代 56 前任现行锚,N=400/档)——**其 perfect 通关 59% 系 2026-10-03 旧代码读数**:0 格连锁算子补齐等两月演进已使模拟行为漂移,改前代码 2026-11-08 现跑 50 局 perfect 通关 0%——带值引用须注明「旧行为基线」口径
|
- `runsum_m3iter9exit_81000_n400_20261003.jsonl`(迭代 56 前任现行锚,N=400/档)——**其 perfect 通关 59% 系 2026-10-03 旧代码读数**:0 格连锁算子补齐等两月演进已使模拟行为漂移,改前代码 2026-11-08 现跑 50 局 perfect 通关 0%——带值引用须注明「旧行为基线」口径
|
||||||
- 其余 23 份 `runsum_*.jsonl`,文件名=批+锚名+日期可辨。出度≤2 重建后旧锚结构已失义,仅留换代对照;处置挂中间产物死亡清单随批处理。
|
- 其余 23 份 `runsum_*.jsonl`,文件名=批+锚名+日期可辨。出度≤2 重建后旧锚结构已失义,仅留换代对照;处置挂中间产物死亡清单随批处理。
|
||||||
|
|
||||||
## 历史锚(只读不判)
|
|
||||||
|
|
||||||
其余 23 份 `runsum_*.jsonl`,文件名=批+锚名+日期可辨。出度≤2 重建后旧锚结构已失义,仅留换代对照;处置挂中间产物死亡清单随批处理。
|
其余 23 份 `runsum_*.jsonl`,文件名=批+锚名+日期可辨。出度≤2 重建后旧锚结构已失义,仅留换代对照;处置挂中间产物死亡清单随批处理。
|
||||||
|
|
||||||
@@ -24,7 +23,7 @@
|
|||||||
|
|
||||||
| 档 | 用途(唯一触发面) | 局数上限 | 单次耗时 | 判读力(能下什么结论) |
|
| 档 | 用途(唯一触发面) | 局数上限 | 单次耗时 | 判读力(能下什么结论) |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| 一档·调研 | 调研/数值分析 | 总量 >40(100+ 为常用锚量级);N 按分析方案:60/档=结构回归(80% 功效 ≥25pp)/ 100=95% CI ±9.8pp / 170=±7.5pp(15pp 带半宽)/ 400 满档=±4.9pp 贴边裁决(normal 独立满档 ~8 分钟同属一档) | 16–65 分钟 | 带值判定/CI 结论仅本档可下;≥60 局须 N=5 pilot 前置 |
|
| 一档·调研 | 调研/数值分析 | 总量 >40(100 为常用锚量级);N 按分析方案两选一:50=95% CI ±13.9pp / 100=95% CI ±9.8pp | 8–16 分钟 | 带值判定/CI 结论仅本档可下;≥60 局须 N=5 pilot 前置 |
|
||||||
| 二档·验证 | 数值修改后回归验证 | 总量 ≤40(每档 ≤20) | ~3.2 分钟 | 结构性大位移可判(≥~40pp;改前/改后同种子配对下 ~30pp)——带值判读不在本档 |
|
| 二档·验证 | 数值修改后回归验证 | 总量 ≤40(每档 ≤20) | ~3.2 分钟 | 结构性大位移可判(≥~40pp;改前/改后同种子配对下 ~30pp)——带值判读不在本档 |
|
||||||
| 三档·小调 | 小调整后快检 | 总量 ≤20(每档 ≤10) | ~1.6 分钟 | 只测不判——仅灾难级破坏(通关率腰斩级)可判 |
|
| 三档·小调 | 小调整后快检 | 总量 ≤20(每档 ≤10) | ~1.6 分钟 | 只测不判——仅灾难级破坏(通关率腰斩级)可判 |
|
||||||
| 四档·微量 | 微调后确认没大问题 | 总量 ≤5 | <1 分钟 | 零统计判读——通过判据=不崩+RUNSUM 字段完整+方向不反直觉 |
|
| 四档·微量 | 微调后确认没大问题 | 总量 ≤5 | <1 分钟 | 零统计判读——通过判据=不崩+RUNSUM 字段完整+方向不反直觉 |
|
||||||
|
|||||||
+21
-9
@@ -20,6 +20,8 @@ gate_game_path() {
|
|||||||
|
|
||||||
# 杀整棵进程树(<pid>)——递归杀子进程后杀本进程。macOS/Linux 走 pgrep -P;
|
# 杀整棵进程树(<pid>)——递归杀子进程后杀本进程。macOS/Linux 走 pgrep -P;
|
||||||
# Windows 侧 MSYS kill 对其可见进程有效,带 wrapper 树的场景仍由调用方原 taskkill /T 逻辑负责。
|
# Windows 侧 MSYS kill 对其可见进程有效,带 wrapper 树的场景仍由调用方原 taskkill /T 逻辑负责。
|
||||||
|
# 注意:Windows Git Bash 实测无 pgrep/pkill(2026-11-08 修复批)——本函数在 Windows 退化成只杀
|
||||||
|
# 顶格进程,引擎子进程残留由调用方段末 kill_orphans 清场兜底(probe_gate/render_gate 均有段后清点)。
|
||||||
gate_kill_tree() {
|
gate_kill_tree() {
|
||||||
local p c
|
local p c
|
||||||
kill -9 "$1" 2>/dev/null
|
kill -9 "$1" 2>/dev/null
|
||||||
@@ -29,26 +31,36 @@ gate_kill_tree() {
|
|||||||
# 带超时执行(coreutils timeout 的纯 bash 替代,双平台同语义):
|
# 带超时执行(coreutils timeout 的纯 bash 替代,双平台同语义):
|
||||||
# gate_run_timeout <秒> <日志路径> <命令...>
|
# gate_run_timeout <秒> <日志路径> <命令...>
|
||||||
# 命令输出重定向到日志;退出码=命令退出码,超时=124(与 coreutils 语义一致,判据与既有闸一致)。
|
# 命令输出重定向到日志;退出码=命令退出码,超时=124(与 coreutils 语义一致,判据与既有闸一致)。
|
||||||
# 实现=后台启动+守卫落标志文件(probe_gate run_suite 同款手法:taskkill 强杀后 wait 报 0 的
|
# 实现=后台启动+守卫轮询(守卫每 0.2 秒醒一次,看两样:停止文件在不在/到点没;
|
||||||
# 假绿以标志文件纠偏);超时先杀整树再回 124。
|
# 命令先完时父流程放停止文件,守卫看见即自己退场——没有嵌套长 sleep,从机制上无孤儿可留;
|
||||||
|
# 2026-11-08 修复批:旧版 mktemp 建标志文件「建时即真」致退出码恒 124+守卫被杀留孤儿 sleep
|
||||||
|
# 占输出管道至满档);到点未见停止文件=真超时:落标志文件+杀整树+回 124。
|
||||||
gate_run_timeout() {
|
gate_run_timeout() {
|
||||||
local t="$1" log="$2"; shift 2
|
local t="$1" log="$2"; shift 2
|
||||||
local kf
|
local kf stop
|
||||||
kf="$(mktemp "${TMPDIR:-/tmp}/gatetime_XXXXXX")"
|
kf="${TMPDIR:-/tmp}/gatetime.$$.$RANDOM.kf" # 只赋路径、不建文件——建时即真=旧缺陷病根(probe_gate run_suite 同款)
|
||||||
|
stop="${TMPDIR:-/tmp}/gatetime.$$.$RANDOM.stop"
|
||||||
|
rm -f "$kf" "$stop"
|
||||||
"$@" >"$log" 2>&1 &
|
"$@" >"$log" 2>&1 &
|
||||||
local pid=$!
|
local pid=$!
|
||||||
( sleep "$t" 2>/dev/null
|
( end=$((SECONDS+t))
|
||||||
touch "$kf"
|
until [ -f "$stop" ] || [ "$SECONDS" -ge "$end" ]; do
|
||||||
gate_kill_tree "$pid"
|
sleep 0.2 2>/dev/null || sleep 1
|
||||||
|
done
|
||||||
|
if [ ! -f "$stop" ]; then
|
||||||
|
touch "$kf"
|
||||||
|
gate_kill_tree "$pid"
|
||||||
|
fi
|
||||||
true ) &
|
true ) &
|
||||||
local guard=$!
|
local guard=$!
|
||||||
wait "$pid"; local st=$?
|
wait "$pid"; local st=$?
|
||||||
kill "$guard" 2>/dev/null; wait "$guard" 2>/dev/null
|
touch "$stop" # 放停止文件=通知守卫收工,0.2 秒内自退,无需 kill
|
||||||
|
wait "$guard" 2>/dev/null
|
||||||
if [ -f "$kf" ]; then
|
if [ -f "$kf" ]; then
|
||||||
gate_kill_tree "$pid"
|
gate_kill_tree "$pid"
|
||||||
st=124
|
st=124
|
||||||
fi
|
fi
|
||||||
rm -f "$kf"
|
rm -f "$kf" "$stop"
|
||||||
return "$st"
|
return "$st"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# 合回前置检查钩子(git pre-merge-commit,2026-11-06 用户裁)——主工作区 git merge 落合并提交前
|
# 合回前置检查钩子(git pre-merge-commit,2026-11-06 用户裁)——主工作区 git merge 落合并提交前
|
||||||
# 跑最小验证面:tools/run_all_gates.sh --premerge(冒烟测试+单元与集成全套件 4 分片,热导入缓存约 2 分钟)。
|
# 跑最小验证面:tools/run_all_gates.sh --premerge(冒烟测试+单元与集成全套件 4 分片,热导入缓存约 2 分钟)。
|
||||||
# 语义(git 2.45.2.windows.1 本机实测):本钩子拦的是「合并提交」不是「合并动作」——exit≠0 时合并结果
|
# 语义(git 2.45.2.windows.1 本机实测):本钩子拦的是「合并提交」不是「合并动作」——exit≠0 时合并结果
|
||||||
# 已进暂存区、仓库停 MERGE_HEAD 待提交态;处置二选一:修红后 git commit 续合,或 git merge --abort 放弃。
|
# 已进暂存区、仓库停 MERGE_HEAD 待提交态;处置唯一:git merge --abort 放弃 → 回 worktree 处理 → 重新 git merge --no-ff(禁 git commit 续合:该路径 pre-merge-commit/post-merge 两钩子零触发)。
|
||||||
# 快进合并不触发本钩子(git 语义)——本仓合回铁规恒 --no-ff,漏写时远端 CI 兜底仍在。
|
# 快进合并不触发本钩子(git 语义)——本仓合回铁规恒 --no-ff,漏写时远端 CI 兜底仍在。
|
||||||
# --no-verify 可整体跳过(实测)——仅属用户,agent 禁用(worktree-guard 在案)。
|
# --no-verify 可整体跳过(实测)——仅属用户,agent 禁用(worktree-guard 在案)。
|
||||||
# 仅主工作区触发(worktree 内合并不触发,与 post-merge 同款 git-dir 判别)。
|
# 仅主工作区触发(worktree 内合并不触发,与 post-merge 同款 git-dir 判别)。
|
||||||
@@ -18,7 +18,7 @@ RC=$?
|
|||||||
if [ "$RC" -ne 0 ]; then
|
if [ "$RC" -ne 0 ]; then
|
||||||
echo "" >&2
|
echo "" >&2
|
||||||
echo "[pre-merge-commit] ✗ 前置检查红(读数如上)——合并提交未落,仓库停 MERGE_HEAD 待提交态。" >&2
|
echo "[pre-merge-commit] ✗ 前置检查红(读数如上)——合并提交未落,仓库停 MERGE_HEAD 待提交态。" >&2
|
||||||
echo " 处置二选一:① 修红后 git commit 续合本合并;② 放弃整次合并=git merge --abort。" >&2
|
echo " 处置唯一:git merge --abort 放弃 → 回 worktree 处理 → 重新 git merge --no-ff(禁 git commit 续合:两合回钩子零触发)。" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "[pre-merge-commit] ✓ 前置检查绿——合并提交继续。"
|
echo "[pre-merge-commit] ✓ 前置检查绿——合并提交继续。"
|
||||||
|
|||||||
@@ -90,24 +90,6 @@
|
|||||||
**改动面**:文档+游戏代码
|
**改动面**:文档+游戏代码
|
||||||
**状态**:待写卡
|
**状态**:待写卡
|
||||||
|
|
||||||
#### 流水线闸认锚式不含中文名文档——判据出处行锚对半数现行文档失效(2026-11-05 登记,来源=批次移交)
|
|
||||||
|
|
||||||
**实况**:判据出处行锚的机检式 `ANCHOR_RE`(`tools/pipeline_gate.py:68`)字符类=`[A-Za-z0-9_\-.\\/]`,不含中文段——凡验收判据句落在中文名现行文档(本库 GDD 多为此形态:`HUD框架.md`/`关卡节点地图.md`/`待办清单.md`),机检一律认不到锚、判「判据出处行锚缺失」红。
|
|
||||||
- 批次实证=营地交互修复批需求卡片(2026-11-05,已退役 git 历史可考):R2/R3/R4/R8 四行的真出处是中文名文档,只能另挂一个 ASCII 路径文档当替身锚才过闸
|
|
||||||
- 发现与依据=该卡独立复核第 22 条(`tools/pipeline_gate.py:68`,已退役 git 历史可考)
|
|
||||||
|
|
||||||
**改动面**:工具代码
|
|
||||||
|
|
||||||
**状态**:待执行
|
|
||||||
|
|
||||||
#### 合回链两钩子冲突路径绕过(2026-11-07 登记,来源=批次移交)
|
|
||||||
|
|
||||||
**实况**:合并遇冲突时 pre-merge-commit 不触发(合并策略失败未到提交点),续提交 `git commit` 收束 MERGE_HEAD 时两钩子(pre-merge-commit/post-merge)均不触发——前置检查由 agent 手动补跑、推送由 agent 手动补做。证据=合并提交 2a17260c 冲突续提交流(git 历史可考)+主区 .gates 前置检查补跑读数(冒烟绿/单元绿)。修法方向=续提交路径补钩子触发(pre-commit 侧判 MERGE_HEAD 分流到 premerge 语义,post-merge 侧同理),细则归工程改动。
|
|
||||||
|
|
||||||
**改动面**:工具代码
|
|
||||||
|
|
||||||
**状态**:待执行
|
|
||||||
|
|
||||||
#### 层序落位单口检查的扫描面不含子目录——视图层插位不在该闸视野(2026-11-05 登记,来源=会话提及)
|
#### 层序落位单口检查的扫描面不含子目录——视图层插位不在该闸视野(2026-11-05 登记,来源=会话提及)
|
||||||
|
|
||||||
**实况**:契约件 `game/tests/unit/contracts/source_guard_test.gd` 的「V1d 层序落位单口」用平铺列目录(`:86-99`,只收 `.gd` 文件名、不递归),注释 `:85` 仍写「presentation 无子目录」;而 `game/presentation/` 现实有 `views/` 与 `scenes/` 两目录,视图层全部文件不在该闸视野内。
|
**实况**:契约件 `game/tests/unit/contracts/source_guard_test.gd` 的「V1d 层序落位单口」用平铺列目录(`:86-99`,只收 `.gd` 文件名、不递归),注释 `:85` 仍写「presentation 无子目录」;而 `game/presentation/` 现实有 `views/` 与 `scenes/` 两目录,视图层全部文件不在该闸视野内。
|
||||||
@@ -262,16 +244,23 @@
|
|||||||
|
|
||||||
**状态**:待文档设计
|
**状态**:待文档设计
|
||||||
|
|
||||||
#### 第二 / 三关棋盘观感——亮度与对比度(2026-10-13 登记,来源=playnote)
|
#### 棋盘瓦片与立体表现重做(2026-11-07 登记,来源=会话提及)
|
||||||
|
|
||||||
**实况**:来源=playnote 试玩记录「第二第三关棋盘看着费劲」;用户裁定要做,[08-Alpha版本标准](design/gdd/08-Alpha版本标准.md)「五 · 表现」已立行标待做。旧卡 reports/需求卡片-二三关棋盘观感批-2026-10-16.md(v1.4)在册但非已写卡状态,重启须重新立卡。分工:本条管棋盘区域整体观感(亮度/对比度/费劲感,体感问题),与已注销的「呈现层残余 <4.5:1 文字位」条(机检硬指标)不同面不互代。Alpha 出口=用户实机目检不再判「看着费劲」。
|
**实况**:用户裁定(2026-11-07 会话)棋盘难看根因=瓦片素材与立体画法,非亮度/对比度;原「第二 / 三关棋盘观感——亮度与对比度」条误诊退役、旧卡已删除。真 3D 与 HD-2D 排除(风格不合)。证据:art-bible §3.2「未挖格=一整块 32×32 自含凸起岩体」冻结条款锁死立体表现;cell_base_layer.gd 南立面/北投影全在本格内、board_view.gd 无 y-sort;tile_palette.gd digit_plate 落牌=亮度修补已失败(违 §9.2 满屏白牌反参考)。设计已闭合(C 方向+D 布局+三关八色冻结;art-bible v3.51/battle.md 2026-11-07/HUD框架 2026-11-07)。
|
||||||
|
- 相关文档:[美术圣经](design/art/art-bible.md) §3.2/§4.1/§6.3(画法解冻+三关八色)+ [battle.md](design/ux/battle.md)(D 区布局与像素判据)+ [需求卡片](reports/需求卡片-棋盘瓦片与立体表现重做批-2026-11-07.md)(已写卡,卡内 §16 复核通过)
|
||||||
|
|
||||||
**缺口**:还差「素材轴 / UI 轴」定性设计讨论与甲(recolor 现瓦片)/乙(远程生图重产)素材裁点裁决——定性是既有条款的开工前置;素材轴若走重产,依赖战斗一屏样张批目标规格清单(已随 art-bible v3.22 落定)。
|
**改动面**:文档+美术素材+游戏代码
|
||||||
- 相关文档:[HUD框架](design/gdd/systems/表现与支撑/HUD框架.md)(UI 轴:舞台底与叠加层)+ [美术圣经](design/art/art-bible.md)(素材轴:瓦片与格面图标的明度色相)——定性前两方共裁
|
|
||||||
|
**状态**:已写卡+已编迭代 57
|
||||||
|
|
||||||
|
#### 营地场景重排接线——十层新矩形与游戏内终审(2026-11-07 登记,来源=批次移交)
|
||||||
|
|
||||||
|
**实况**:用户 2026-11-05/2026-11-07 裁定营地十层重排——围墙显示矩形 `(0,220,1280,200)`、大门/告示板跟随、其余六件按裁定落位;围墙最终件 1280×164 入包;土线同时覆盖围墙底与门扇底(门扇运行时压扁 240×138);最终墙件预览过目(U0)与游戏内终审归实现批。设计已闭合(`camp-scene-prompts.md` v1.10 §5 第 13 条六件逐值;`art-bible.md` v3.48 §6.2 :404–405;`camp.md:29`)。需求卡片:[需求卡片-营地场景重排接线-2026-11-07.md](reports/需求卡片-营地场景重排接线-2026-11-07.md)(独立复核 17 条已处置,复核记录在卡内 §13);实现待编排。
|
||||||
|
- 相关文档:[营地场景提示词卡](design/art/camp-scene-prompts.md) §5 第 6/12/13 条+[美术圣经](design/art/art-bible.md) §6.2+[营地 UX](design/ux/camp.md) 第 29 行;复核记录见[需求卡片](reports/需求卡片-营地场景重排接线-2026-11-07.md) §13
|
||||||
|
|
||||||
**改动面**:美术素材+游戏代码
|
**改动面**:美术素材+游戏代码
|
||||||
|
|
||||||
**状态**:待文档设计+待美术设计
|
**状态**:文档设计已闭合+美术设计已闭合+已写卡+已编迭代 57
|
||||||
|
|
||||||
#### 站桩帧动画——Alpha 定版闸前完成(2026-10-06 登记,来源=审计发现)
|
#### 站桩帧动画——Alpha 定版闸前完成(2026-10-06 登记,来源=审计发现)
|
||||||
|
|
||||||
@@ -384,14 +373,6 @@
|
|||||||
|
|
||||||
**状态**:待执行
|
**状态**:待执行
|
||||||
|
|
||||||
#### 闸机超时守卫缺陷修复——gate_run_timeout 标志文件恒真(2026-11-06 登记,来源=批次移交)
|
|
||||||
|
|
||||||
**实况**:tools/gate_platform.sh 的 gate_run_timeout 用 mktemp 预建超时标志文件,判据 `[ -f ]` 建时即真、超时态无法与正常完成区分(Windows Git Bash 实测直接调用 4 秒返回 124;远端各闸以工件锚定未受影响)。连带 tools/golden_baseline_refresh.sh 的 guard 子Shell sleep 420 未被 kill 短路(重采集等待 7 分钟症状)。修法=kf 先赋路径+rm -f 后置守卫(probe_gate.sh:97 run_suite 同款正确写法)。证据=tools/gate_platform.sh:37/:48+迭代53实现报告遗留呈报 1(git 历史可考)。
|
|
||||||
|
|
||||||
**改动面**:工具代码
|
|
||||||
|
|
||||||
**状态**:待执行
|
|
||||||
|
|
||||||
#### 关卡视口两 Shot 基线 mac 侧冻结(2026-11-06 登记,来源=批次移交)
|
#### 关卡视口两 Shot 基线 mac 侧冻结(2026-11-06 登记,来源=批次移交)
|
||||||
|
|
||||||
**实况**:golden/windows/ 已锚 lmap_entry/lmap_boss(提交 6394abf7);mac 子目录无该两 Shot——渲染闸对 mac 缺基线记 SKIP 不判红,两平台同盯缺一。义务=Mac 侧跑 tools/golden_baseline_refresh.sh --lmap 冻结 mac 基线并呈报确定性读数。证据=game/tests/golden/README.md 现持清单行与时效判定纪律行+迭代53实现报告遗留 2(git 历史可考)。
|
**实况**:golden/windows/ 已锚 lmap_entry/lmap_boss(提交 6394abf7);mac 子目录无该两 Shot——渲染闸对 mac 缺基线记 SKIP 不判红,两平台同盯缺一。义务=Mac 侧跑 tools/golden_baseline_refresh.sh --lmap 冻结 mac 基线并呈报确定性读数。证据=game/tests/golden/README.md 现持清单行与时效判定纪律行+迭代53实现报告遗留 2(git 历史可考)。
|
||||||
|
|||||||
Reference in new issue
Block a user