From fc30e984c6dabb4652630c6d2299088318583d35 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Sun, 1 Nov 2026 23:02:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=8D=A1(=E7=AB=8B=E7=BB=98=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=A1=A3=E6=89=B9=20v1.1=C2=B7grilling+godot-master?= =?UTF-8?q?=20=E5=8F=8C=E5=AE=A1=E5=90=8E=E6=89=A7=E8=A1=8C=E7=BA=A7?= =?UTF-8?q?=E8=AE=A2=E6=AD=A3):=20reports/=E9=9C=80=E6=B1=82=E5=8D=A1?= =?UTF-8?q?=E7=89=87-=E7=AB=8B=E7=BB=98=E6=98=BE=E7=A4=BA=E6=A1=A3?= =?UTF-8?q?=E6=89=B9-2026-11-01.md=20=E6=96=B0=E7=AB=8B(T0=E2=80=93T3=20?= =?UTF-8?q?=E4=BC=B0=200.85d=E3=80=81=E9=9B=B6=E5=BE=85=E8=A3=81=E7=82=B9?= =?UTF-8?q?=E3=80=81=E9=AA=8C=E6=94=B6=20V13=E2=80=93V18=20=E7=BB=91?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=A1=A3=E9=AB=98/=E7=BA=B5=E6=A8=AA?= =?UTF-8?q?=E5=80=8D=E7=8E=87/=E6=BA=90=E9=AB=98=E9=92=89=E5=80=BC/?= =?UTF-8?q?=E9=94=AE=E9=9B=86=E8=87=AA=E6=A3=80)=EF=BC=8Breports/=E5=A4=8D?= =?UTF-8?q?=E6=A0=B8-=E5=8F=8C=E5=AE=A1-...md=20=E5=8F=8C=E5=AE=A1?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E3=80=82=E9=98=BB=E6=96=AD=E4=B8=A4=E6=9D=A1?= =?UTF-8?q?=E5=B7=B2=E8=A1=A5=E5=8D=A1:=E2=91=A0=E5=8E=9F=E7=A8=BF?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=B8=8D=E5=85=A5=20git=20=E4=B8=94=20sync?= =?UTF-8?q?=5Fworktree=5Fassets=20=E4=B8=8D=E5=90=8C=E6=AD=A5=20artwork?= =?UTF-8?q?=E3=80=81pixelize=20=E7=BC=BA=E4=BB=B6=E9=9D=99=E9=BB=98?= =?UTF-8?q?=E7=A9=BA=E8=B7=91=20exit=200=E2=80=94=E2=80=94T1=20=E8=A1=A5?= =?UTF-8?q?=E6=98=BE=E5=BC=8F=E4=B8=BB=E5=8C=BA=E6=A0=B9=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=EF=BC=8B=E4=BA=A7=E7=89=A9=E8=AE=A1=E6=95=B0=E8=87=AA=E8=AF=81?= =?UTF-8?q?=3D9;=E2=91=A1=E7=B4=A0=E6=9D=90=E4=B8=8D=E5=85=A5=20git?= =?UTF-8?q?=E3=80=81worktree=E2=86=92=E4=B8=BB=E5=8C=BA=E6=97=A0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=80=9A=E9=81=93=E4=B8=94=20standee=5Fasset=5Fcheck?= =?UTF-8?q?=20=E4=B8=8D=E5=9C=A8=E9=97=B8=E6=B8=85=E5=8D=95,=E5=90=88?= =?UTF-8?q?=E5=9B=9E=E5=90=8E=E6=95=8C=E4=BE=A7=E8=90=BD=E4=BD=8D=E6=97=A0?= =?UTF-8?q?=E4=BA=BA=E7=9C=8B=E5=AE=88=E2=80=94=E2=80=94T3=20=E8=A1=A5?= =?UTF-8?q?=E3=80=8C=E4=B9=9D=E4=BB=B6=E8=90=BD=E9=80=92=E4=B8=BB=E5=8C=BA?= =?UTF-8?q?=E5=86=8D=E8=A7=A6=E5=8F=91=20CI=E3=80=8D=E6=94=B6=E5=8F=A3?= =?UTF-8?q?=E6=AD=A5=E3=80=81V13=20=E9=80=90=E4=BB=B6=E9=92=89=E6=BA=90?= =?UTF-8?q?=E9=AB=98=E9=98=B2=E6=97=A7=E9=99=8D=E9=87=87=E6=A0=B7=E7=A8=BF?= =?UTF-8?q?=E8=92=99=E6=B7=B7=E3=80=82=E5=85=B6=E4=BD=99=E8=AE=A2=E6=AD=A3?= =?UTF-8?q?:=E6=A0=B7=E5=BC=A0=20A4=20=E7=A1=AC=E9=94=81=2046=C3=9748=20?= =?UTF-8?q?=E4=B8=8E=2096=C3=9796=20=E6=96=B9=E6=A1=86=E5=88=97=E5=85=A5?= =?UTF-8?q?=E8=A7=A3=E5=86=BB=E9=9D=A2=E3=80=81=E4=B8=BB=E8=A7=92=E6=BA=90?= =?UTF-8?q?=E6=98=8E=E5=86=99=E5=88=87=202=C3=97=20=E7=A8=BF=E3=80=81get(k?= =?UTF-8?q?ey,96.0)=20=E5=85=9C=E5=BA=95=E8=BF=9D=E5=8F=8D=E8=87=AA?= =?UTF-8?q?=E5=8D=A1=E5=A5=91=E7=BA=A6=202/6=20=E6=94=B9=20push=5Ferror+V1?= =?UTF-8?q?8=20=E9=94=AE=E9=9B=86=E8=87=AA=E6=A3=80=E3=80=81=E7=81=B0?= =?UTF-8?q?=E7=9F=AE=E4=BA=BA=200.76=C3=97=20=E4=B8=8E=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=200.52=C3=97=20=E8=A1=A5=E5=B7=B2=E6=8E=A5?= =?UTF-8?q?=E5=8F=97=E9=A1=B9=E5=B9=B6=E7=82=B9=E5=90=8D=E7=9B=AE=E6=A3=80?= =?UTF-8?q?=E3=80=81T1/T3=20=E9=97=B8=E4=BB=B6=E5=8F=A3=E5=BE=84=E6=97=B6?= =?UTF-8?q?=E7=82=B9=E4=B8=89=E5=A4=84=E4=BA=92=E6=96=A5=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=B8=BA=E5=90=8C=E6=89=B9=E3=80=81=E6=B3=A8=E9=87=8A=E9=9A=8F?= =?UTF-8?q?=E5=8A=A8=E9=9D=A2=E8=A1=A5=E5=85=A8(=E5=90=AB=E5=8F=8D?= =?UTF-8?q?=E5=90=91=E5=BC=95=E7=94=A8=E5=B7=B2=E6=B3=A8=E9=94=80=E7=A6=81?= =?UTF-8?q?=E4=BB=A4=E7=9A=84=E6=97=A7=E5=8F=A5)=E3=80=81=C2=A714=20?= =?UTF-8?q?=E6=B3=A8=E9=94=80=E3=80=8C=E6=A0=B8=E6=B5=8B=E8=AF=95=E9=94=AE?= =?UTF-8?q?=E7=99=BB=E8=AE=B0=E5=80=BC=E3=80=8D=E7=A9=BA=E6=93=8D=E4=BD=9C?= =?UTF-8?q?(gdstyle=20=E4=B8=8D=E6=89=AB=20tests)=E3=80=81=E6=B5=AE?= =?UTF-8?q?=E7=82=B9=E5=88=A4=E7=AD=89=E4=B8=80=E5=BE=8B=20is=5Fequal=5Fap?= =?UTF-8?q?prox=E3=80=81=E4=B8=A4=E8=A1=A8=E5=AF=B9=E8=B4=A6=E5=8F=8C?= =?UTF-8?q?=E5=AE=A1=E7=BB=93=E8=AE=BA=E7=9B=B8=E5=B7=A6=E6=95=85=20V17=20?= =?UTF-8?q?=E7=9C=9F=E6=96=AD=E8=A8=80=EF=BC=8B=E8=AF=BB=E4=B8=8D=E5=88=B0?= =?UTF-8?q?=E8=B5=B0=20L2=20=E7=A6=81=E5=BD=93=E7=BA=A2=E7=A6=81=E5=BD=93?= =?UTF-8?q?=E7=BB=BF=E3=80=82=E8=83=BD=E5=8A=9B=E6=B8=85=E5=8D=95=E8=A1=A5?= =?UTF-8?q?=E8=A1=8C=E3=80=8C=E7=AB=99=E6=A1=A9=E6=98=BE=E7=A4=BA=E6=A1=A3?= =?UTF-8?q?=E4=B8=8E=E7=B4=A0=E6=9D=90=E5=88=86=E8=BE=A8=E7=8E=87=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E3=80=8D(=E5=86=99=E5=8D=A1=E6=AE=B5=E4=B9=89?= =?UTF-8?q?=E5=8A=A1,=E4=BB=A3=E8=A1=A8=E7=94=A8=E4=BE=8B=20=5Fcheck=5Fdis?= =?UTF-8?q?play=5Ftier)=E3=80=82=E5=BE=85=E5=8A=9E=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A8=E8=BF=9B=E3=80=8C=E7=BE=8E=E6=9C=AF?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=B7=B2=E9=97=AD=E5=90=88=EF=BC=8B=E5=B7=B2?= =?UTF-8?q?=E5=86=99=E5=8D=A1=E3=80=8D=E3=80=82=E9=97=B8=E5=86=B5:pipeline?= =?UTF-8?q?=5Fgate=20PASS(9=20=E5=8D=A1)=E3=80=81--docs=20=E9=9B=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BA=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/tests/README.md | 3 +- ...lling与godot-master-立绘显示档批-2026-11-01.md | 50 ++++ reports/需求卡片-立绘显示档批-2026-11-01.md | 244 ++++++++++++++++++ 待办清单.md | 13 +- 4 files changed, 302 insertions(+), 8 deletions(-) create mode 100644 reports/复核-双审-grilling与godot-master-立绘显示档批-2026-11-01.md create mode 100644 reports/需求卡片-立绘显示档批-2026-11-01.md diff --git a/game/tests/README.md b/game/tests/README.md index dc273539..afa26e32 100644 --- a/game/tests/README.md +++ b/game/tests/README.md @@ -134,6 +134,7 @@ tests/ | 地形瓦片套与格面数字可读 | 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` | | 站桩敌人呈现与结算演出落点 | 战斗表现 | `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` | +| 站桩显示档与素材分辨率绑定 | 战斗表现 | `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` | | 战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) | HUD框架 | `BoardView.set_cell_area()`(D 区可用面积 → 格边长);读面 `BoardView.cell_size` | `layout_probe.gd:_ready`;`board_gen_reward_test.gd:_smoke_layout_cell_formula` | | 调参测速批量模拟(逐帧步进与统计读数) | 调参测量 | `TuneSimController.run()`(调试浮窗批量模拟入口) | `tune_sim_batch_parity_test.gd:_init`(配对对拍套件,随测速循环批建) | @@ -176,7 +177,7 @@ tests/ | 战斗循环 | 地图战斗资源.md | 清图奖励双份与零路径;GP 钱包/escrow/商店收口/共享池;封印与极性路由/不可逆 | 已覆盖 | — | | 战斗循环 | 增益状态.md | 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理;封印与极性路由/不可逆 | 部分覆盖 | 增益叠层/衰减/清除结算链无断言;见待办清单「能力清单覆盖缺口补齐」条 | | 战斗循环 | 战斗结算.md | 伤害公式与掷点乘区;伤害单据编排与回放;轮内流与结算五段全序 | 已覆盖 | — | -| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点;站桩呈现定值与素材绑定 | 部分覆盖 | 死亡灰化与减动效演出档仅探针与人工目检;见待办清单「能力清单覆盖缺口补齐」条 | +| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点;站桩呈现定值与素材绑定;站桩显示档与素材分辨率绑定 | 部分覆盖 | 死亡灰化与减动效演出档仅探针与人工目检;见待办清单「能力清单覆盖缺口补齐」条 | | 战斗循环 | 敌人系统.md | 技能池数据面与回放独立;Boss 半血解锁技门控;敌人技能池跨表链接校验 | 已覆盖 | — | | 排雷循环 | 地形变异.md | 变异布置门控;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — | | 排雷循环 | 排雷玩法.md | 装板与开局免费展开(封锁格无资源、计入清图);挖/封印合法性与可辨拒绝(拒绝零副作用);封印不可逆与挖开封印格放行(兑付改判四情况) | 已覆盖 | — | diff --git a/reports/复核-双审-grilling与godot-master-立绘显示档批-2026-11-01.md b/reports/复核-双审-grilling与godot-master-立绘显示档批-2026-11-01.md new file mode 100644 index 00000000..f9b535d4 --- /dev/null +++ b/reports/复核-双审-grilling与godot-master-立绘显示档批-2026-11-01.md @@ -0,0 +1,50 @@ +# 双审复核 · 立绘显示档批(grilling + godot-master,2026-11-01) + +> **性质**:卡片 v1.0 的独立复核产出物(req-card 纪律「grilling 复核门」+迭代 47 双审先例)。两个未参与撰写的会话各自只读复核,本报告记发现与处置去向。 +> **被审对象**:`reports/需求卡片-立绘显示档批-2026-11-01.md` v1.0。 +> **总判**:方案本体成立(引擎语义、乙类条款、闸纪律全部咬合),卡片**改后可开工**——两条阻断均为「补执行步骤」级,不动设计。 + +--- + +## 一、阻断(两条,双审同指) + +| # | 发现 | 证据 | 处置 | +|---|---|---|---| +| B1 | **原稿输入面在实现 worktree 必然缺位,且管线对缺件静默零产出**:`artwork/` 整目录不入 git,`sync_worktree_assets.sh` 只同步 `game/assets/art`+`.import`,不同步 artwork;`pixelize_candidates.py` 缺件走 `isfile` 跳过,exit 0、零文件、零报错 | `tools/sync_worktree_assets.sh:26-34`;`tools/pixelize_candidates.py:474-478,507-508` | 卡 v1.1 T1 补「显式传主区原稿根路径」+「产物计数自证 = 9 件,不足即停」 | +| B2 | **素材落递主工作区无收口步,合回后验收有洞**:素材不入 git、worktree 合回即删;本地 CI 在主区跑,主区仍是旧 46×48 稿,只有 V16「主角源高 ≥92」会报警,敌侧「原稿分辨率落位」在册闸件 `standee_asset_check` 不在闸清单,等于无人看守 | `game/tests/run_all.gd:191`;`tools/run_all_gates.sh`(grep 无 standee_asset_check);盘上主区素材实测 | 卡 v1.1 ①V13 逐件加钉源高=原稿表值(旧降采样稿必红);②T3 补「9 件落递主区再触发 CI」收口步 | + +--- + +## 二、建议(已并入卡 v1.1) + +| # | 发现 | 出处 | 卡片处置 | +|---|---|---|---| +| S1 | 样张脚本 A4 硬锁 `PORTRAIT_SRC.size==(46,48)`,T1 换代必红;另有 `:1501` 强制 96×96 方框 mockup | `tools/render_sample_sheet_v3.py:1135-1139,1501` | 列入 F11 现状与 T3 随动步(显式解冻重校) | +| S2 | T1 未明写主角源从 `*_1x.png` 切 `*_2x.png` | `tools/pixelize_candidates.py:476,481` | T1 补独立步 | +| S3 | `PORTRAIT_DISPLAY_H.get(key, 96.0)` 兜底字面量 = 档值第二处散落,与契约 2/6 自相矛盾 | 卡 v1.0 §7.3 | 改「查表必中+键集覆盖自检」,禁静默兜底 | +| S4 | 灰矮人 126→96 是全批唯一 <0.8 档(0.76× 真降档,NEAREST 抽行约每 4 行断 1px 描边),不在已接受清单 | 双审同指 | 补进契约 5 已接受项+目检①点名(头号回退候选) | +| S5 | 关卡地图头像由 ≈1× 变 0.52× 降采样,是全消费面降级最狠一处 | `level_map_screen.gd:176-190` | §4 不做面点名+目检③专列 | +| S6 | 主角三态宽度不一(88/92/88)且 `apply_hero_state` 换纹理不重摆,态切换有约 3–6px 横跳(现行 2px 的放大版) | `standee_motion.gd:85-86` | §4 明列不做(重摆=行为改动,禁实现批顺手加)+目检清单登记 | +| S7 | T1/T3 闸件口径切换时点三处互斥(T1 说「T2 未就绪允许红」、闸件排在 T3、§15 说已提前到 T1) | 卡 v1.0 §7.2/§7.4/§15 | 统一:闸件口径改造并入 T1(素材与闸件同批),删矛盾句 | +| S8 | 注释随动面漏 `standee_motion.gd:38-39,59,65`(反向引用已不存在的「禁非整数缩放」禁令)与 `level_map_screen.gd:176` | 双审同指 | T2 补点名 | +| S9 | 「两表同值」观测面局限申报说重了:grilling 判 Godot editor 版 `FileAccess` 可读 `../tools/`,godot-master 判无稳定通路——两审相左 | 双审 §6/§O5 | 卡 v1.1 改「尝试真断言(读 `../tools/pixelize_candidates.py` 逐键对账),读不到走 L2 记录退回双端字面钉值+审计对账」,禁把争议当定论 | +| S10 | §14 所核 `gdstyle_baseline.txt` 无该测试键,且 gdstyle 扫描面只含 `game/core|data|presentation`(tests 不在面) | `tools/gdstyle_gate.py:49` | §14 改口径:测试文件不在扫描面,只核 `standee_motion.gd` 在面件 | +| S11 | 卡片头行引用待办状态「待写卡」已过时;§7 交叉引用「见 §9 行 V1–V4」应为 §8 | 卡 v1.0 | 就地修正 | + +## 三、观察(不改卡,记录在案) + +- **几何实测**:立绘落位只在换纹理拍执行、按缺省盒高 96 算——大档顶 y=−2、中档 20、小档 44;溢出 2px < VBox 间距 4px,**恒不碰顶部轮次指示**(卡 L3#3 的「碰邻位」实际难触发,仍留作停机条款);立绘链上无 ClipControl,不被裁;意图徽标 y=86 在中/大档为「压胸」,符合圣经③;大档脚底越盒底由明细带面板遮住(现行卓尔/石君王已如此,本批食人魔加深 40px)。 +- **1920 档**:三档是 1280 基准壳坐标绝对高,`stretch=canvas_items`+aspect keep 下整壳 ×1.35 等比,构图恒等,无需新条款。附带发现:`project.godot` 未显式声明 `window/stretch/aspect`,依赖引擎缺省——**与本批无关,建议另立工程批钉死**。 +- **未登记 enemy_id**(如 hobgoblin 缺口行)无立绘 → `load_tex` 返回 null → 字形回退,不进 `_place_portrait`,显示档不涉,非待裁点。 +- **素材侧健康度**:九件原稿色数 30–32、alpha 二值、底缘不透明、敌侧暖白描边 68.4–98.9%(阈值 40% 全过)——T3「其余四断言不变」可保绿。 +- **事实核对**:F1–F15 逐条复核通过(F3 的 :197 实为 :198、F10 断言②止于 :100,属微差);F7 降采样等值由 grilling 独立重跑四件字节级复现。 +- **浮点判据**:0.99/1.57 档回程有 ULP 级残差,V13/V15 须 `is_equal_approx`,禁裸 `==`。 + +--- + +## 四、呈用户裁决项(卡片不动,等发令) + +1. **是否把 `standee_asset_check` 编进代码域闸**(`run_all_gates.sh` 闸件增减属工程改动,另批走)。 +2. **灰矮人 0.76× 与关卡地图头像 0.52× 两处降采样**:本卡按「已接受+目检」处理;若实机判不可受,回退路径只有「灰矮人改归中档」或「地图头像出 48 专件」,均须另裁。 +3. **主角态切换横跳**(S6):本卡不做重摆;若要修,另立小批。 +4. **`project.godot` 显式声明 stretch/aspect**(观察项):另立工程批。 diff --git a/reports/需求卡片-立绘显示档批-2026-11-01.md b/reports/需求卡片-立绘显示档批-2026-11-01.md new file mode 100644 index 00000000..41fb9101 --- /dev/null +++ b/reports/需求卡片-立绘显示档批-2026-11-01.md @@ -0,0 +1,244 @@ +# 需求卡片 · 立绘显示档批(v1.1) + +> **用途**:迭代实现批的实施合同(卡①单卡批)。v1.1=双审(grilling+godot-master)后执行级订正,设计面零改动(复核记录=`reports/复核-双审-grilling与godot-master-立绘显示档批-2026-11-01.md`)。 +> **来源**:待办清单「立绘清晰度回退评估——原稿分辨率+三档显示」条目(状态=美术设计已闭合+已写卡)。 +> **唯一事实源**:`design/art/art-bible.md` §8.2「站桩立绘显示档 = 三档绝对高」条(v3.32)+ `design/art/character-design.md` §5.2/§5.5 指路行。 +> **改动面**:美术素材+游戏代码。 **估时**:≈0.85 个工作日。 + +--- + +## 1. 目标与完成定义 + +**做什么**:把 9 件站桩立绘(八敌 + 主角三态)从「原稿降采样到 48–94 再 ×2 显示」改成「原稿分辨率入包 + 显示按三档绝对高缩放」。 + +| 档 | 绝对显示高 | 归档 | +|---|---|---| +| 小型 | 96 | 地精 goblin、巨蜘蛛 giant_spider、灰矮人 duergar | +| 中型 | 144 | 主角 hero、钩爪恐魔 hook_horror、熊地精 bugbear | +| 大型 | 188 | 食人魔酋长 ogre_chief、蛛化卓尔 drider、灰矮人石君王 duergar_king | + +宽度一律随源图比例(高定宽随),缩放过滤 NEAREST。 + +**什么状态算完**: + +1. 9 件素材 = 原稿紧裁原样落 `game/assets/art/character/`,盘上无任何降采样痕迹; +2. `standee_motion.gd` 硬编码 ×2 退役,显示倍率由逐件档高算出; +3. `tools/standee_asset_check.py` 与 `tools/pixelize_candidates.py` 改按显示档与原稿高校验,全绿; +4. 真实入口断言钉住逐件显示档高、纵横倍率恒等、两表同值; +5. 样张脚本站桩段与探针文案随动; +6. 代码域闸全绿 + 改前/改后并排对照图落盘 + 产出物三份齐。 + +--- + +## 2. 现状事实(代码级,开工复核) + +| # | 事实 | 出处 | +|---|---|---| +| F1 | 显示倍率硬编码:`w/h = tex.get_width/height() * 2.0`、`scale = Vector2(2.0, 2.0)` | [standee_motion.gd:63](game/presentation/views/standee_motion.gd#L63) | +| F2 | 立绘盒几何:`box := Vector2(150, 176)`;立绘盒矩形 `(0,44)-(box.x, box.y-80)` → 立绘区 150×96,高于 96 者按 `(box_h-h)*0.5` 向上溢出 | [standee_body.gd:24](game/presentation/views/standee_body.gd#L24)、[:309](game/presentation/views/standee_body.gd#L309)、[standee_motion.gd:62](game/presentation/views/standee_motion.gd#L62) | +| F3 | 盒宽常量与盒高注入:`_STANDEE_W := 150.0`;`hero_standee.box = Vector2(_STANDEE_W, box_h)`(盒高=行高) | [battle_stage_view.gd:10](game/presentation/views/battle_stage_view.gd#L10)、[:197](game/presentation/views/battle_stage_view.gd#L197) | +| F4 | 主角立绘装载与三态注册(含「48px 档」注释);敌侧 `_enemy_portrait_tex(enemy_id)` 查表后 `set_portrait_texture` | [battle_stage_view.gd:132-140](game/presentation/views/battle_stage_view.gd#L132)、[:252-267](game/presentation/views/battle_stage_view.gd#L252) | +| F5 | 纹理路径常量单点在 UiKit(八敌 + 主角三态) | [ui_kit.gd:233-247](game/presentation/views/ui_kit.gd#L233) | +| F6 | 现行入包稿尺寸:主角三态 46×48 / 48×48 / 46×48;八敌 36×36、48×38、34×46、46×58、51×62、62×74、67×90、66×94 | 盘上 `game/assets/art/character/`(素材不入 git) | +| F7 | **现行入包稿 = 原稿降采样,逐像素相同**:`dom_block_resize(pixel-1, 74/90/94)` 与 ogre_chief/drider/duergar_king 三件 diff 框为空(2026-11-01 会话实测) | 管线 [pixelize_candidates.py:430-457](tools/pixelize_candidates.py#L430) | +| F8 | 原稿在盘:八敌 `pixel-1.png` 高 81–189(地精 89×90/巨蜘蛛 102×81/灰矮人 93×126/钩爪 74×94/熊地精 102×123/酋长 158×189/卓尔 140×189/石君王 133×189);主角手修 2× 三态稿内容 88×92 / 92×92 / 88×92 | `artwork/remote-gen-2026-09-26/`(不入 git) | +| F9 | 派生管线末步即降采样:`build_standee48` 紧裁 → 等比缩至 `STANDEE_TIER_H` → `dom_block_resize` | [pixelize_candidates.py:28](tools/pixelize_candidates.py#L28)、[:38-43](tools/pixelize_candidates.py#L38)、[:459-504](tools/pixelize_candidates.py#L459) | +| F10 | 闸件按源档高校验:`DISPLAY_SCALE=2`、`SRC_W_MAX=75`、断言①档高、断言②源宽×2≤150 | [standee_asset_check.py:50-53](tools/standee_asset_check.py#L50)、[:75-98](tools/standee_asset_check.py#L75) | +| F11 | 样张脚本站桩段硬编码「立绘盒 96px(48 源 ×2)」;另有 A4 尺寸基线硬锁 `PORTRAIT_SRC.size==(46,48)` 与战斗语境 96×96 方框 mockup(脚本自述「换代须显式解冻重校」) | [render_sample_sheet_v3.py:775-791](tools/render_sample_sheet_v3.py#L775)、[:1135-1139](tools/render_sample_sheet_v3.py#L1135)、[:1501](tools/render_sample_sheet_v3.py#L1501) | +| F12 | 探针文案「48px 档」(判据只查 `has_tex`,非尺寸断言) | [ui_probe.gd:139-144](game/probe/ui_probe.gd#L139) | +| F13 | 另两消费面按固定框装载同一素材:标题屏 138×144/46×96/80×96(`STRETCH_KEEP_ASPECT_CENTERED`+NEAREST);关卡地图头像定高 48、宽随源比 | [ui_assembler.gd:170](game/presentation/ui_assembler.gd#L170)、[level_map_screen.gd:176-190](game/presentation/views/level_map_screen.gd#L176) | +| F14 | 能力清单现行行「站桩呈现定值与素材绑定」→ `standee_present_values_test.gd`(V5–V12 在此套件) | [README:136](game/tests/README.md#L136) | +| F15 | 舞台高 252(溢出上限的物理边界) | `game/data/tables/battle_layout.tres` | + +--- + +## 3. 设计契约(违反即返工;标 🔴 触碰=L3 停机呈报) + +1. 🔴 **禁改形象**:9 件素材 = 原稿紧裁原样,禁重画、禁生成、禁 `dom_block_resize` 降档(art-bible §8.2 v3.32)。 +2. 🔴 **显示档定值单点** = art-bible §8.2;GDScript 侧 `PORTRAIT_DISPLAY_H` 与 Python 侧 `STANDEE_DISPLAY_H` 逐键同值、两侧各自钉死字面值,跨语言对账由 V17 承担(读不到文件走 L2,见 §8/§9);禁第三处复写,**禁查表兜底字面量**。 +3. 🔴 **纵横倍率恒等**(高定宽随),禁方框强拉(art-bible §8.2 槽位条)。 +4. 🔴 **体量顺序由显示档承载**:小 < 中 < 大;禁按强度重排(character-design §5.2)。 +5. 🔴 **已接受项不得当缺陷回炉**:①五件源高低于档高属放大显示(主角 92/钩爪 94/熊地精 123/地精 90/巨蜘蛛 81,倍率 1.07–1.57);②灰矮人 126→96 是全批唯一 <0.8 档(0.76× 抽行,NEAREST 描边约每 4 行断点),列目检①头号回退候选;③食人魔酋长显示宽 157 超桩盒 150;④关卡地图头像由 ≈1× 变 0.52× 降采样,列目检③。 +6. 🔴 显示档数值只落显示档表,绘制点与检查器一律读表,禁字面量散落(数值单点纪律)。 +7. 🔴 素材不入 git(art-bible §8.3);本批入 git 的只有代码/工具/测试/文档件,素材落盘由实现批执行并在实现报告逐件留读数。 + +--- + +## 4. 范围边界 + +**做**:9 件素材按档派生落盘;`standee_motion.gd` 显示倍率改造;`pixelize_candidates.py`/`standee_asset_check.py` 改显示档;样张脚本站桩段随动;探针与装载点注释随动;`standee_present_values_test.gd` 增显示档断言。 + +**不做(去向明示)**: + +- 不重画、不生成任何图像(现有形象即终稿)。 +- 不动棋盘小人(`character_hero_idle/walk.png` 32×32 独立资产)——另属棋盘面。 +- 不改标题屏与关卡地图头像的框尺寸(两面只随素材分辨率自动变化;若目检判需专件,另批)。 +- 不动色板与 `#A79CB8`(保留在板、本批不消费;色板额度议题另批讨论)。 +- 不做站桩帧动画(待办清单「站桩帧动画」条)。 +- 不做主角态切换重摆(`standee_motion.gd:85-86` `apply_hero_state` 换纹理不重算 position,三态源宽 88/92/88 → 切换有约 3–6px 横跳,系现行 2px 的放大版;重摆=行为改动,禁实现批顺手加,要修另批)。 +- 不做关卡地图 48px 头像专件(新源在该面为 0.52× 降采样;目检判不可受则另批出专件)。 +- 不做桩盒宽 150 与 >150 溢出档的布局重排(食人魔超宽 8px 按已接受项走;实机若碰邻位则 L3 停机,布局另批)。 + +--- + +## 5. 关联文档同步面 + +| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务 | +|---|---|---| +| `design/art/art-bible.md` §8.2 | 显示档条与排版条 >150 举例 | **已落**(前置文档批 v3.32,本区已改)——实现批禁写 `design/`,本批零义务 | +| `design/art/art-bible.md` §8.2 槽位条 | 「高度的整数倍档」与绝对档高+非整数倍率字面冲突 | **已落**(双审后随设计批改「高度的绝对档(档高取整数像素值)」) | +| `design/art/art-assets-checklist.md` §0 分辨率档位行 | 旧口径「站桩源高 48/敌种逐键源档 36–94/整数倍缩放纪律」 | **已落**(改指 §8.2 显示档条) | +| `design/art/character-design.md` §5.5 | 指路行 | 同上,已落 v3.32 配套 | +| `design/gdd/08-Alpha版本标准.md` 覆盖行 | 出口从「重产完成」改「9 件按档落位+目检」 | 已落 v1.22;实现完成后「待做→在役」列**反哺点**呈裁 | +| `待办清单.md` 本条 | 状态推进(已写卡→已编迭代→完成删条) | 各段按状态机推进,非实现批直改 → 列**反哺点** | +| `design/art/art-prompts.md` §5.4 产出状态 | 「待实装批落位」→「已落位」 | 实现完成后 → 列**反哺点** | +| `design/art/art-status-checklist.md`/`art-assets-checklist.md` 站桩行 | 「按档派生落位归本条实装批」→ ✅ 已交付 | 实现完成后 → 列**反哺点** | +| `game/tests/README.md` 能力清单 | 新能力行「站桩显示档与素材分辨率绑定」 | **写卡段已同批补行**(本卡 §9 能力行与之一致);实现批禁写该文件 | +| `design/gdd/术语表.md` | 「显示档」是否立条 | 列**反哺点**呈裁 | +| `体验验证清单.md` | 实机目检项(9 件清晰度、同屏体量顺序、标题屏/地图头像消费面) | 实现批禁写 → 列**反哺点**,目检清单先落实现报告 | + +--- + +## 6. 卡前文件结构图 + +| 文件 | 职责 | 改动性质 | 验收行 | +|---|---|---|---| +| `game/presentation/views/standee_motion.gd` | 显示档表 `PORTRAIT_DISPLAY_H` + `_place_portrait` 按档算倍率 | **行为改动** | V1 V2 V3 | +| `game/presentation/views/standee_body.gd` | 探针 `portrait_probe()` 扩显示读数(几何出口单点) | **行为改动**(观测面扩展,绘制零改) | V3 V4 | +| `game/presentation/views/battle_stage_view.gd` | 「48px 档」注释随动 | 非行为 | — | +| `game/probe/ui_probe.gd` | 文案随动(判据不变) | 非行为 | — | +| `game/tests/unit/presentation/standee_present_values_test.gd` | 增 V13–V16 显示档断言(复用既有套件,禁新增文件) | 新增测试 | V1–V4 | +| `tools/pixelize_candidates.py` | `STANDEE_TIER_H` → `STANDEE_DISPLAY_H`;`build_standee48` 改紧裁不降档 | 工具(非行为) | V5 | +| `tools/standee_asset_check.py` | 断言①改源高=原稿表+显示宽;断言②宽上限按显示宽;表名随动 | 闸件(非行为) | V5 | +| `tools/render_sample_sheet_v3.py` | 站桩 mockup 按显示档取数 | 工具(非行为) | V7 | +| `game/assets/art/character/`(9 件,不入 git) | 原稿紧裁落盘 | 资产 | V5 | +| `artwork/candidates/立绘显示档批-<日期>/`(不入 git) | 改前/改后并排对照图 | 取证 | V6 | + +--- + +## 7. 任务卡 T0..T3 + +### 7.1 T0——改前读数与基线(估时 0.1 个工作日) + +- [ ] 跑 `python tools/standee_asset_check.py` 记录现行 9 件读数(尺寸/档高/色数/描边占比),存实现报告改前基线表。 +- [ ] 跑 `python tools/pixelize_candidates.py --standee48 --standee-out /tmp/precheck` 确认现行管线产物与盘上素材逐件同尺寸(证明 F7 降采样链在位)。 +- [ ] 跑代码域闸确认改前全绿(确切命令见 §9 末注)。 + +**取用**:无。**产出**:改前基线读数表(T3 对照用)。 + +### 7.2 T1——素材按档派生落盘+闸件同批改口径(估时 0.25 个工作日) + +- [ ] `tools/pixelize_candidates.py`:`STANDEE_TIER_H` 改名 `STANDEE_DISPLAY_H`,值改显示档 `{goblin:96, giant_spider:96, duergar:96, hook_horror:144, bugbear:144, ogre_chief:188, drider:188, duergar_king:188}`,主角侧 `STANDEE_SLOT_H` 改 `144`;新增原稿高表 `STANDEE_SRC_H = {goblin:90, giant_spider:81, duergar:126, hook_horror:94, bugbear:123, ogre_chief:189, drider:189, duergar_king:189, hero:92}`。 +- [ ] `build_standee48` 改紧裁不降档:内容紧裁 → 底中锚 → 原样存盘;**删除 `dom_block_resize` 调用路径**(函数与 CLI 旗标改名按档派生);主角源由 `hero-ref/edit/*_1x.png` 改指 `*_2x.png`(canvas 94×112/96×112,紧裁后 88×92/92×92/88×92)。 +- [ ] **原稿输入面显式定径**:`python tools/pixelize_candidates.py D:/code/g-plan2/artwork/remote-gen-2026-09-26 --standee-out game/assets/art/character`——worktree 的 `artwork/` 不含原稿(`sync_worktree_assets.sh:26-34` 只同步 `game/assets/art` 与 `.import`),缺省根路径在本区必**静默空跑**(缺件逐键 `isfile` 跳过、exit 0)。 +- [ ] 产物计数自证:九件逐件尺寸 == `STANDEE_SRC_H` 表值,**计数 ≠ 9 即停(L3#2)**,禁回退用旧降采样稿顶替。 +- [ ] `tools/standee_asset_check.py` 同批改口径(素材与闸件同批,禁中间态报红):import 改 `STANDEE_DISPLAY_H/STANDEE_SRC_H`;断言①「源高 == 原稿表值(禁降档)」;断言②「显示宽 = round(源宽×档高/源高) ≤ 150,食人魔酋长 157 登记例外」;其余四断言(底中锚/色数≤32/alpha 二值/描边占比)不变。跑至九件全 PASS。 +- [ ] 跑 `D:\code\godot\Godot_v4.7.2-stable_win64_console.exe --headless --editor --quit --path game` 刷 `.godot` 导入缓存,确认九件 `.ctex` 在位。 + +**取用**:T0 基线表。**产出**:九件原稿分辨率素材(盘上)+ `STANDEE_DISPLAY_H`/`STANDEE_SRC_H` 两张 Python 表+新口径闸。 + +### 7.3 T2——代码显示倍率改造(估时 0.25 个工作日) + +- [ ] `standee_motion.gd` 增常量表 `PORTRAIT_DISPLAY_H`(九键字面值钉死;**禁 `.get(key, 96.0)` 类兜底字面量**——档值第二处散落即违契约 2/6)。 +- [ ] `_place_portrait` 改:`key` 主角取 `"hero"`、敌取 `_owner.enemy_id()`;查无键 → `push_error` 并按 1× 落位(不崩、不静默兜档),由 V18 键集自检在测试期报警;命中 → `s = disp_h / 源高`、`scale = Vector2(s, s)`、`w/h = 源尺寸 × s`,`position` 式沿用 F2 居中溢出机制。 +- [ ] `standee_body.gd` `portrait_probe()` 扩两读数:`display_size`(Vector2)、`display_scale`(float)。 +- [ ] `standee_present_values_test.gd` 增私有函数 `_check_display_tier()` 承载 V13–V18(断言内写死规格值;**浮点判等一律 `is_equal_approx` 或 `absf(...)<0.01`**——0.99/1.57 档回程有 ULP 级残差,裸 `==` 会假红)。 +- [ ] 注释随动:`standee_motion.gd:38-39,59,65`(旧「盒高 96=48 源整数 2×/§8.2 禁非整数缩放」已反向引用注销条款)、`battle_stage_view.gd:134`、`ui_probe.gd:140,144`、`level_map_screen.gd:176`(「定高 48px=1×」)。 +- [ ] 跑 `standee_present_values_test.gd` 单件至 exit 0。 + +**取用**:T1 素材与 Python 表。**产出**:`PORTRAIT_DISPLAY_H`、`portrait_probe()` 两读数、V13–V18 断言。 + +### 7.4 T3——样张随动、对照取证、素材落递与批末收口(估时 0.25 个工作日) + +- [ ] `render_sample_sheet_v3.py`:站桩段按显示档取数;A4 尺寸基线冻结断言(`:1135-1139` 锁 `PORTRAIT_SRC.size==(46,48)`)与战斗语境 96×96 方框(`:1501`)**显式解冻重校到新档**,禁放宽阈值凑绿。 +- [ ] 出改前/改后并排对照图(同屏站桩区+标题屏看台+关卡地图头像三面)落 `artwork/candidates/立绘显示档批-<日期>/`,路径写进实现报告。 +- [ ] **素材落递主工作区**:合回落地后、删区前,把九件新稿拷回 `D:/code/g-plan2/game/assets/art/character/` 并逐件复核尺寸 == 表值——素材不入 git、worktree→主区无同步通道,漏这步则主区 CI 只有 V16 一处报警、敌侧无人看守。 +- [ ] 跑代码域闸全绿(§9 末注),读数与闸况写进实现报告。 +- [ ] **产出物落位卡**:`reports/iter-实现报告-<日期>.md`(各卡状态+实机目检总清单:①九件清晰度含灰矮人 0.76× 判读、②同屏体量顺序、③标题屏看台与地图头像 0.52×、④酋长超宽不碰邻位、⑤主角态切换横跳读数+遗留读数义务)/`reports/iter-代拍板追认-<日期>.md`/`reports/iter-反哺点-<日期>.md`(§5 每条都有落点)。 +- [ ] 独立验收审计入口与报告:`reports/iter-验收审计-<日期>.md`(未过不得合并)。 + +**取用**:T1 素材+T2 表与探针。**产出**:闸全绿回执+主区素材追平+三份产出物。 + +--- + +## 8. 验证闸(改动—验收对照表) + +| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 | +|---|---|---|---|---|---|---| +| 逐件显示档高 | `standee_motion.gd` 新增 `PORTRAIT_DISPLAY_H` + `_place_portrait` | 「九键显示档实读 = 96/144/188 逐键钉值,且源高 == 原稿表值(旧降采样稿必红)」`standee_present_values_test.gd:_check_display_tier`〔立绘显示档 V13〕 | 单元 | `StandeeBody.new("enemy")` → `set_data(enemy_id)` → `set_portrait_texture(真纹理)` → `portrait_probe()` | `display_size.y` 与 `display_scale × 源高` 双读数 ≈ 档高(`is_equal_approx`);九键逐一 | 新增:站桩显示档与素材分辨率绑定 | +| 硬编码 ×2 退役 | `standee_motion.gd:63-65` | 「`_place_portrait` 体内引用 `PORTRAIT_DISPLAY_H` 且零 `Vector2(2.0, 2.0)`」〔V14〕 | 单元(静态判据) | `FileAccess` 读 `res://presentation/views/standee_motion.gd` | 源锚正证(读表)+反证(无字面 2× 倍率) | 新增:站桩显示档与素材分辨率绑定 | +| 纵横倍率恒等 | 同上 | 「`scale.x == scale.y` 且 `display_size.x == round(源宽×档高/源高)`」〔V15〕 | 单元 | 同 V13 入口 | 探针 `display_scale`/`display_size` 实读 | 新增:站桩显示档与素材分辨率绑定 | +| 主角中档 144(三态) | 素材 = 手修 2× 稿;`register_hero_state` 面 | 「主角三态纹理源高 ≥92 且显示高 = 144」〔V16〕 | 单元 | `BattleStageView` 组合根装载后 `hero_standee.portrait_probe()`,再逐态 `apply_hero_state` 复读 | 探针显示高逐态实读 | 新增:站桩显示档与素材分辨率绑定 | +| 素材不降采样 | 9 件 = 原稿紧裁;`standee_asset_check.py` 新口径 | 「源高 == 原稿表值 +显示宽 ≤150(酋长例外)+色数 ≤32+底中锚+alpha 二值+描边占比」 | 闸(工具) | `python tools/standee_asset_check.py` | 逐件源高/显示宽读数 == 表值 | 既有:站桩呈现定值与素材绑定 | +| 两表同值不漂移 | Python `STANDEE_DISPLAY_H` ↔ GDScript `PORTRAIT_DISPLAY_H` | 「读 `../tools/pixelize_candidates.py` 源文本逐键对账」〔V17〕 | 单元(静态判据) | `FileAccess` 读仓库内 `tools/` 件(双审对此点结论相左,见复核报告 S9) | 两表逐键相等;**读不到文件 → L2 记录、退回双端字面钉值+独立审计对账,禁当红亦禁当绿** | 新增:站桩显示档与素材分辨率绑定 | +| 显示档表键集完整 | 同上 | 「表键集 ⊇ 八敌 ∪ hero 且无多余键」〔V18〕 | 单元 | 读 `PORTRAIT_DISPLAY_H` | 键集对账(防新敌种漏登记被 `push_error` 静默) | 新增:站桩显示档与素材分辨率绑定 | +| 样张口径随动 | `render_sample_sheet_v3.py` 站桩段 | 样张脚本自跑断言(脚本内 CHECKS 全绿)+改前改后并排图 | 工具 | `python tools/render_sample_sheet_v3.py` | 脚本内站桩档高读数 | 既有:站桩呈现定值与素材绑定 | +| 实机观感 | 9 件显示档 + 两消费面 | 用户目检:①9 件清晰度可接受;②同屏体量顺序小<中<大;③标题屏看台与关卡地图头像无可感劣化;④酋长超宽不碰邻位 | 目检(登记不阻塞) | 实机战斗屏/标题屏/地图屏 | 目检总清单落实现报告 | 新增:站桩显示档与素材分辨率绑定 | + +**测试削弱申报**:本批不删不改任何既有断言;`ui_probe` 只改文案(判据 `has_tex` 不变);样张脚本改取数方式,其机检项断言不减。 +**判据口径**:全批无变异类/撤销类取证;每行从真实入口进入、绑被测改动特有的可观测读数。 +**代码域闸命令(里程碑步出口跑一次全套,波内修复只做出红件最窄确认)**:`bash tools/run_all_gates.sh --code`。 + +--- + +## 9. 异常分级 + +- **L1 自救**:`.import`/`.ctex` 缺位 → 重跑 `--editor --quit` 刷缓存;对照图目录不存在 → 建目录。 +- **L2 记录继续**:样张脚本整屏读数偏移但四项机检仍绿 → 读数写实现报告,不返工;V17 读 `../tools/` 路径不通 → 记录后退回「双端字面钉值+独立审计对账」,禁判红。 +- **L3 停机写报告等用户**: + 1. V13–V16 任一断言在真实跑批中做不出(判据绑不上)→ 停卡呈报,禁放宽阈值或换下层直调; + 2. 原稿缺件(任一 `pixel-1`/手修 2× 稿不在盘)→ 停机呈报,**禁回退用旧降采样稿顶替**; + 3. 食人魔酋长实机碰邻位/压到顶部轮次指示 → 停机呈报(布局重排另批); + 4. 机检预算互斥=上游缺陷停卡退回写卡段(新增件契约与闸键冲突时禁自造第三条路)。 + +--- + +## 10. 代拍板白名单(超清单必呈报) + +1. `portrait_probe()` 新读数键名(`display_size`/`display_scale` 之外的等价命名)。 +2. `pixelize_candidates.py` 函数与 CLI 旗标改名措辞(`--standee48` → 按档派生类命名)。 +3. 测试尾缀用词〔立绘显示档 V13〕的括注格式。 +4. 对照图目录名与文件名(保持 `artwork/candidates/立绘显示档批-<日期>/` 形态)。 +5. 主角取 key 的实现写法(`_owner.enemy_id()` 空值判 hero,或经 kind 判定),只要最终表键集为九键。 + +--- + +## 11. 待裁点 + +**零待裁点,开工门 = U0。** 三档绝对高、逐件归档、放大与超宽两项已接受,均由用户在写卡前的设计会话中裁定(凭据见 §2 与待办清单本条实况)。 + +--- + +## 12. 落位与可复用性预检 + +| 新增件 | 复用面(盘上是否已有同职责件) | 唯一面 | 分层与交互面 | +|---|---|---|---| +| `PORTRAIT_DISPLAY_H`(`standee_motion.gd` const) | 无同类——现行倍率是 `_place_portrait` 内字面量(F1),本表是把它从「隐式 ×2」变「显式逐件档高」;不新增文件 | 显示档在 GDScript 侧只落这一张表;绘制点只此一处读表 | 呈现层内部件,不跨层;取 key 走宿主 `StandeeBody.enemy_id()` 既有出口,禁 Core 依赖 | +| `portrait_probe()` 两读数 | 复用既有探针出口(`standee_body.gd:283`),不新建探针件 | 显示尺寸读数唯一出口 | 测试侧只读,不反向驱动绘制 | +| 测试 V13–V16 | **复用既有套件** `standee_present_values_test.gd`(能力=站桩呈现定值与素材绑定,先例=迭代 46 卡B 在同文件加 V10–V12)——不新增测试文件 | 一套件一能力域 | headless 无渲染面,像素采样以探针几何+源锚承载(沿该套件既有口径) | +| `STANDEE_DISPLAY_H`/`STANDEE_SRC_H`(Python) | 改名/扩表,不新增脚本;`dom_block_resize` 保留为管线其他用途件(禁删函数本体) | Python 侧显示档只此一处,`standee_asset_check.py` 经 import 读(沿 F10 现例) | 工具侧,不进游戏运行时 | +| 9 件素材 | 复用原稿(F8),零新增绘制 | 一素材一路径,键名不变(F5 常量单点不动) | 素材不入 git(契约 7) | + +--- + +## 13. 禁为机检文本保留无效成员 + +本批为呈现改造,仍立条款:若 `standee_asset_check.py` 或测试的消息文本要求保留旧键名(`STANDEE_TIER_H`/`STANDEE_SLOT_H`)凑计数或凑正则,一律停卡呈报;闸键与卡片契约互斥时禁自造第三条路,禁为过闸保留无消费方的别名。 + +--- + +## 14. 实现规范预算 + +- **新件三查**:本批**无新增 .gd 文件**(§12 复用面已定),三查不适用;新增常量表 1 个、探针读数 2 个,不触公开方法/var 阈值。 +- **扫描面事实(双审核正)**:gdstyle 只扫 `game/core|data|presentation`(`tools/gdstyle_gate.py:49`),**tests 不在面**,`tools/gdstyle_baseline.txt` 内亦无该测试键——v1.0 所写「核该测试键登记值」属空操作,注销。 +- **存量触面一查(S13 键只降不升,适用在面件)**:`standee_motion.gd`(在面)——只增一个常量表并改 `_place_portrait` 换算式,branches 不变、不产新键;`standee_body.gd:portrait_probe()`(在面)——返回字典扩两键,branches 不变。 +- **测试侧纪律**:V13–V18 提私有函数 `_check_display_tier()` 承载(拆分不改语义,非凑机检);新写测试码按 test-conventions §7 带全类型标注。 +- **指标例外申报**:无。 + +--- + +## 15. 估时与切分预案 + +≈0.85 个工作日(T0 0.1/T1 0.25/T2 0.25/T3 0.25)。 + +切分预案:素材与闸件已在 T1 同批改口径(不留中间态报红窗口);若 T3 三面对照图+主区素材追平压超软盒,切分点=把 T3 的「样张随动」独立成卡②,两卡同迭代合回,不拆迭代;若实机判酋长超宽碰邻位或灰矮人 0.76× 不可受,本卡止于 L3 停机/回设计段裁档,另立新条。 diff --git a/待办清单.md b/待办清单.md index 11d4727e..9da54b57 100644 --- a/待办清单.md +++ b/待办清单.md @@ -298,16 +298,15 @@ **状态**:已写卡+已编迭代 46 -#### 立绘清晰度回退评估——是否改用高清图(2026-10-13 登记,来源=playnote) +#### 立绘清晰度回退评估——原稿分辨率+三档显示(2026-10-13 登记,来源=playnote) -**实况**:来源=playnote 用户试玩记录「现在的立绘太丑了,像素化的粒度太低了,导致根本看不清立绘;看是否可以改回用较为高清的图片?还有一个问题是大小的问题……现在地精的图片看起来比熊地精还要大,这并不合理」。2026-10-13 用户裁定:与「第二 / 三关棋盘观感」同属**美术线更新**。**两个子问题现状不同**:子问题一=怪物大小比例不合理——**已兑现**(体量语义改生物体型〔character-design §5.2,弃强度线性映射〕+八敌逐键定档〔art-bible §8.2〕),剩余面=用户是否复核验收;子问题二=像素粒度过低/是否改回高清图——**方向已裁(2026-10-14 用户裁)**:「还是像素风格立绘,但是不需要像现在太过于像素」,定性为**精细手绘像素**(不是插画、不是 HD-2D、不回退高清图;裁决录=[美术审计-cursor会话存档](reports/美术审计-cursor会话存档-2026-10-14.md) §2.2;权威面 art-bible/character-design 口径节反哺另批),粒度问题已改派生管线(八敌源档 36–94 全过可读门槛:24 糊/32 可读/48 清楚)。[08-Alpha版本标准](design/gdd/08-Alpha版本标准.md) 未决项已随裁删除(2026-10-16 状态刷新批)。Alpha 出口裁决:Alpha 范围=主角+三个 Boss 按新口径重产,其余敌种当前可读则保留到 Beta。 +**实况**:来源=playnote 用户试玩记录「现在的立绘太丑了,像素化的粒度太低了,导致根本看不清立绘;看是否可以改回用较为高清的图片?还有一个问题是大小的问题……现在地精的图片看起来比熊地精还要大,这并不合理」。2026-10-13 用户裁定:与「第二 / 三关棋盘观感」同属**美术线更新**。**两个子问题均已定**:子问题一=怪物大小比例——体量语义改生物体型(character-design §5.2,弃强度线性映射),2026-11-01 进一步归并为三档绝对显示高;子问题二=像素粒度/是否回退高清——2026-10-14 裁不回退高清(裁决录=[美术审计-cursor会话存档](reports/美术审计-cursor会话存档-2026-10-14.md) §2.2),2026-11-01 会话查明根因=入包前 `dom_block_resize` 把原稿 189px 细节砍到 74–94(现行入包稿与原稿降采样**逐像素相同**),当日用户裁终态方案:**保留原稿分辨率、入包禁再降采样、显示按三档绝对高缩放**(小型 96=地精/巨蜘蛛/灰矮人;中型 144=主角/钩爪恐魔/熊地精;大型 188=食人魔酋长/蛛化卓尔/灰矮人石君王;宽随源比例、NEAREST)。同日裁:2026-10-14「须手绘重产」方向作废,现有形象即终稿、禁改形象。已接受项:五件源高低于档高属放大显示(主角 92/钩爪 94/熊地精 123/地精 90/巨蜘蛛 81);食人魔酋长显示宽 157 超桩盒 150。2026-10-28 为重产新增的色板额度议题(含 `#A79CB8` 去留)按用户令保留在板、另批讨论,本批不动色板。 +- 相关文档:[美术圣经](design/art/art-bible.md) §8.2 站桩立绘显示档条(v3.32,显示档定值单点)+ [角色设计](design/art/character-design.md) §5.2/§5.5 + [生图提示词卡](design/art/art-prompts.md) §5.4 按档派生工单(v2.13)+ [08-Alpha版本标准](design/gdd/08-Alpha版本标准.md) v1.22 覆盖行 +- 需求卡片:[需求卡片-立绘显示档批-2026-11-01](reports/需求卡片-立绘显示档批-2026-11-01.md) -**缺口**:还差立绘按「精细手绘像素」新口径重产的设计——整屏方向稿与地面/立绘密度同批锁(与战斗一屏样张批联动)后才可出重产工单。 -- 相关文档:[角色设计](design/art/character-design.md)(立绘规格与体量语义)+ [美术圣经](design/art/art-bible.md)(像素管线与档位) +**改动面**:美术素材+游戏代码 -**改动面**:美术素材 - -**状态**:待美术设计 +**状态**:美术设计已闭合+已写卡 #### 站桩帧动画——Alpha 定版闸前完成(2026-10-06 登记,来源=审计发现)