美术圣经去数值化批(用户裁 2026-11-07 两准则: 有落点补指针/无落点建脚本承载): art-bible v3.43→v3.44 全文定值剥离——头注定值单点纪律(数量面唯一事实源=执行件, 例外=WCAG 标准引用名与数据索引)+§8 头注两张表制退役+§4.1 主色板全 hex 清零(语义岗句+ui_kit 指针)+§4.2 五组微光/呈现参数/禁入带+§2 能量档改八拍序(数字退役)+世界底层两子带区间数值迁执行件+§3.2 封印/高墙 px 群+§6.1/6.2 舞台与营地坐标群+§6.5 迷雾定值群+§7.2/7.4/7.6 UI token/字号/控件态+§8.1/8.2/8.4 档位与帧数+换色合并沿革压缩归 git 史+六对欠账迁出; 执行件三件落地——glow_discrimination_sheet 增机检 E 门(世界底层两子带: 背景侧上沿+结构间隔, 地板侧归 tile_palette 归一化目标 0.10 渲染面, --no-sheet 全绿 exit=0)+新套件 animation_frame_spec_test(帧数档 4/6/2 规格表落码+现役单帧形制锚定, 经 UiKit.load_tex 装载链)+新套件 palette_token_pairwise_test(ui_kit Color 常量面两两互查, 存量 36 对在册豁免账含〔欠账〕四对, 账外零新增); run_all manifest 65→86 全量单元位次不变+能力清单帧数行入册+互查套件挂主题行; oracle 锚注记换代六件(seal/type_glow/standee/theme_projection/terrain/ui_contrast_probe——定值面=本测试措辞); art-pipeline-tools 升格执行件门值登记面(14 行定值落点索引)+边界句换代; 下游复写换代七件(术语表/08-Alpha/camp/battle/character-design/两清单); 待办清单去数值化条目推进文档设计已闭合+欠账条目新立。凭据: 圣经 hex 字面量 0+七触碰套件单跑 all green(exit=0)+熵增闸 PASS(--docs 内)+流水线闸 PASS(34 条目)+能力审计红 0(110 行·86 套·链断 0)+doc_term 零命中(销账/随批/收口/若干四词自清扫)+--docs 域闸【验收通过】exit=0
This commit is contained in:
1 parent
77c1d360f6
commit
85abe37cf5
22 files changed
+342
-130
No files matched your search
@@ -0,0 +1,44 @@
|
||||
# tests/unit/presentation/animation_frame_spec_test.gd — 动画帧数规格守门(定值面=本测试)
|
||||
# 断言面:①帧数规格表冻结(待机循环 4 帧/攻击准备 6 帧单次/受击 2 帧——样张冻结定值落码于本表,
|
||||
# 文档侧只述规则并指路本测试);②现役四态单帧形制锚定(idle/walk 32×32、attack 92×92、
|
||||
# hit 88×92——现役为单帧状态件,序列帧资产入包时按规格表逐件判帧数并同批换代本套件);
|
||||
# ③死亡=灰化+碎裂退场(非帧件,无帧数断言面)。
|
||||
# 运行:godot --headless --path game --script res://tests/unit/presentation/animation_frame_spec_test.gd
|
||||
extends SceneTree
|
||||
|
||||
const Kit := preload("res://tests/unit/test_kit.gd")
|
||||
|
||||
# 帧数规格表(样张冻结值——多帧序列帧资产的生产规格;现役单帧占位件不适用本表)
|
||||
const SPEC := {"idle": 4, "attack": 6, "hit": 2}
|
||||
# 现役单帧形制(宽,高)——序列帧资产替换形制时同批修订本表并激活规格逐件断言
|
||||
const CURRENT_FORM := {
|
||||
"character_hero_idle.png": Vector2i(32, 32),
|
||||
"character_hero_walk.png": Vector2i(32, 32),
|
||||
"character_hero_attack.png": Vector2i(92, 92),
|
||||
"character_hero_hit.png": Vector2i(88, 92),
|
||||
}
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
# oracle: design/art/art-bible.md:538 (帧数规格条——样张冻结定值组)
|
||||
_test_spec_table()
|
||||
_test_current_form()
|
||||
quit(Kit.finish("animation_frame_spec_test"))
|
||||
|
||||
|
||||
# ① 规格表冻结面(帧数档定值单点=本表)
|
||||
func _test_spec_table() -> void:
|
||||
# oracle: design/art/art-bible.md:538 (帧数规格表冻结组)
|
||||
Kit.check("待机循环 4 帧在表〔帧规格 V1〕", SPEC.get("idle", 0) == 4)
|
||||
Kit.check("攻击准备 6 帧单次在表〔帧规格 V2〕", SPEC.get("attack", 0) == 6)
|
||||
Kit.check("受击 2 帧在表〔帧规格 V3〕", SPEC.get("hit", 0) == 2)
|
||||
|
||||
|
||||
# ② 现役单帧形制锚定(真实加载链——资产被换形制而未走规格表时此处红)
|
||||
func _test_current_form() -> void:
|
||||
# oracle: design/art/art-bible.md:538 (现役单帧形制组)
|
||||
for fn: String in CURRENT_FORM:
|
||||
var tex: Texture2D = load("res://assets/art/character/" + fn)
|
||||
var want := Vector2(CURRENT_FORM[fn])
|
||||
Kit.check("现役件在库且形制冻结:%s %s〔帧规格 V4〕" % [fn, want],
|
||||
tex != null and tex.get_size() == want)
|
||||
@@ -0,0 +1 @@
|
||||
uid://d0afgefg84yin
|
||||
@@ -0,0 +1,101 @@
|
||||
# tests/unit/presentation/palette_token_pairwise_test.gd — 语义/UI token 板两两互查守门
|
||||
# 断言面:ui_kit 全部 Color 常量两两 RGB 三通道差禁止全部 <8/255(色板增量纪律第二道门的存量面;
|
||||
# 文档侧只述纪律并指路本测试,数值门=本件 NEAR_EPS);六对已登记欠账走豁免账(清偿批逐对销账,
|
||||
# 债务登记=待办清单「色板近色欠账六对清偿」条;新增欠账禁直入本账,须走待办清单修订)。
|
||||
# 豁免账中两对伙伴色(3e3731/3e4048/3f4147)为迷雾合成底素材侧色——不在 ui_kit 常量面,
|
||||
# 其清偿随素材批处理;本测试扫常量面,素材侧对子由互辨抽测件近色读数承载。
|
||||
# 运行:godot --headless --path game --script res://tests/unit/presentation/palette_token_pairwise_test.gd
|
||||
extends SceneTree
|
||||
|
||||
const Kit := preload("res://tests/unit/test_kit.gd")
|
||||
const UI_KIT_PATH := "res://presentation/views/ui_kit.gd"
|
||||
|
||||
const NEAR_EPS := 8
|
||||
|
||||
# 存量近色关系在册账(键=两色 hex 升序拼接,值=性质标签)。账面=常量面全量现状的机器真值;
|
||||
# 闸只拦「账外新增」。标「欠账」四对=art-bible 原六对债的常量面部分(清偿批销账);
|
||||
# 另两对(3e362c3e3731/3e40483f4147)伙伴为迷雾合成底素材侧色,不在常量面,随素材批清偿。
|
||||
# 同一键可覆盖多名对(同值别名与其伙伴构成的同 hex 对)。
|
||||
const EXEMPT_LEDGER := {
|
||||
"140f0d18120c": "深墨族(DIM↔DIM_NIGHT)",
|
||||
"140f0d181410": "深墨族(DIM↔INK_ROUTE)",
|
||||
"18120c181410": "深墨族(DIM_NIGHT↔INK_ROUTE)〔欠账〕",
|
||||
"18120c1e1812": "深墨族(DIM_NIGHT↔FOG_OUTLINE)",
|
||||
"291f172e2218": "暗底族(INK_LABEL↔TIP_BG)",
|
||||
"2820182e2218": "暗底族(CAMP_BADGE_PANEL↔INK_LABEL)",
|
||||
"282018291f17": "暗底族(CAMP_BADGE_PANEL↔TIP_BG)",
|
||||
"33261b342a20": "墨族近结构件(E_FACADE_FOOT_COL↔INK)",
|
||||
"33261b362b20": "墨族近屏底(INK↔BG_OVERLAY)〔欠账〕",
|
||||
"342a20362b20": "结构件暗棕近屏底(E_FACADE_FOOT_COL↔BG_OVERLAY)",
|
||||
"342a203a2e22": "结构件暗棕近屏底(E_FACADE_FOOT_COL↔BG_ROOT)",
|
||||
"362b203a2e22": "屏底双件(BG_OVERLAY↔BG_ROOT)〔欠账〕",
|
||||
"3a3a3a403a34": "暗板族(DARK_UPCOMING↔FOG_MEMORY_PLATE)",
|
||||
"4537234a3b2a": "暖亮底双件(BG_BRIGHT↔BG_MAP_TOP)〔欠账〕",
|
||||
"4a3b2a4a3e30": "同域暗棕(BG_MAP_TOP↔HINT_STRIP_EDGE)",
|
||||
"6e45266e4526": "α 派生别名(CAMP_HEADER_BAND↔CAMP_HUD_BAND,非色板新增)",
|
||||
"786e58786e58": "文档别名(DOT_OFF↔PANEL_BORDER——兼熄灭点阵)",
|
||||
"1a17141e1812": "深墨族(FOG_OUTLINE↔ICON_TINT_ON_GOLD)",
|
||||
"1814101a1714": "深墨族(ICON_TINT_ON_GOLD↔INK_ROUTE)",
|
||||
"1a17141e1a16": "深墨族(ICON_TINT_ON_GOLD↔INK_TITLE)",
|
||||
"1814101e1812": "深墨族(FOG_OUTLINE↔INK_ROUTE)",
|
||||
"1e18121e1a16": "深墨族(FOG_OUTLINE↔INK_TITLE)",
|
||||
"1814101e1a16": "深墨族(INK_ROUTE↔INK_TITLE)",
|
||||
"1a1a1c1e1a16": "深墨族(HP_BAR_TRACK↔INK_TITLE)",
|
||||
"2e221833261b": "墨族(INK↔INK_LABEL)",
|
||||
"c9b88ecdb88c": "暖米族(MAP_VDIV↔WARM_FAINT)",
|
||||
"e0b860e6be5a": "金族亮档双件(GOLD_BRIGHT↔GOLD_LIT)",
|
||||
"f0e2c8f0e2c8": "同值别名(INK_L_WARM↔WARM)",
|
||||
"f0e2c8f0e4c8": "暖米板族(INK_L_WARM/MAP_BAR_PLATE/WARM 同 hex 双名对)",
|
||||
"f0e2c8f0e6ce": "暖米板族(CAMP_ROW_PLATE↔INK_L_WARM/WARM 同 hex 双名对)",
|
||||
"f0e4c8f0e6ce": "暖米板族(CAMP_ROW_PLATE↔MAP_BAR_PLATE)",
|
||||
"f0e6cef5ead3": "暖米板族(CAMP_ROW_PLATE↔DIGIT_PLATE)",
|
||||
"f0e8d6f5ead3": "暖纸板族(DIGIT_PLATE↔TOAST_BG)",
|
||||
"f5ead3f6eeda": "暖纸板族(DIGIT_PLATE↔INK_ON_DEEP)",
|
||||
"f0e8d6f6eeda": "暖纸板族(INK_ON_DEEP↔TOAST_BG)",
|
||||
"f8e2a8f8e3a8": "同族亮金墨(INK_L_GOLD↔RAP_DOT_CORE_WARM)",
|
||||
}
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
# oracle: design/art/art-bible.md:220 (色板增量纪律条——存量两两互查组)
|
||||
_test_pairwise()
|
||||
quit(Kit.finish("palette_token_pairwise_test"))
|
||||
|
||||
|
||||
func _token_colors() -> Dictionary:
|
||||
var script: Script = load(UI_KIT_PATH)
|
||||
var cmap: Dictionary = script.get_script_constant_map()
|
||||
var out: Dictionary = {}
|
||||
for name: String in cmap:
|
||||
if cmap[name] is Color:
|
||||
out[name] = cmap[name]
|
||||
return out
|
||||
|
||||
|
||||
func _hex(c: Color) -> String:
|
||||
return "%02x%02x%02x" % [c.r8, c.g8, c.b8]
|
||||
|
||||
|
||||
# 存量两两互查:豁免账外零近色对(扫描面>0 前置防静默绿)
|
||||
func _test_pairwise() -> void:
|
||||
# oracle: design/art/art-bible.md:220 (色板增量纪律条——存量两两互查组)
|
||||
var tokens := _token_colors()
|
||||
Kit.check("token 面非空(扫描面>0)〔token互查 V1〕", tokens.size() >= 40)
|
||||
var names: Array = tokens.keys()
|
||||
names.sort()
|
||||
var bad: Array = []
|
||||
for i in range(names.size()):
|
||||
for j in range(i + 1, names.size()):
|
||||
var a: Color = tokens[names[i]]
|
||||
var b: Color = tokens[names[j]]
|
||||
if absi(a.r8 - b.r8) < NEAR_EPS and absi(a.g8 - b.g8) < NEAR_EPS \
|
||||
and absi(a.b8 - b.b8) < NEAR_EPS:
|
||||
var pair: Array = [_hex(a), _hex(b)]
|
||||
pair.sort()
|
||||
var key: String = pair[0] + pair[1]
|
||||
if not EXEMPT_LEDGER.has(key):
|
||||
bad.append("%s↔%s(%s)" % [names[i], names[j], key])
|
||||
Kit.check("豁免账外零新增近色对〔token互查 V2〕", bad.is_empty())
|
||||
if not bad.is_empty():
|
||||
for item: String in bad:
|
||||
print(" [近色对] ", item)
|
||||
@@ -1,5 +1,5 @@
|
||||
# tests/unit/presentation/seal_mark_params_test.gd — 封印印记参数化绘制守门(卡④ R1–R4)
|
||||
# 断言面:五常量取值逐项相等(ui_kit ↔ art-bible §8.2 对照);着色器文件存在且七个 uniform 名在文;
|
||||
# 断言面:五常量取值逐项相等(封印六参数定值面=本测试断言);着色器文件存在且七个 uniform 名在文;
|
||||
# 迷雾门控(seal_on × fog_state → 封印子件可见性)〔seal批 V1–V4〕。
|
||||
# 运行:godot --headless --path game --script res://tests/unit/presentation/seal_mark_params_test.gd
|
||||
extends SceneTree
|
||||
@@ -17,7 +17,7 @@ func _init() -> void:
|
||||
quit(Kit.finish("seal_mark_params_test"))
|
||||
|
||||
|
||||
# R1–R3/R7 前置:五常量取值逐项相等(art-bible §8.2 定值)
|
||||
# R1–R3/R7 前置:五常量取值逐项相等(定值面=本组断言)
|
||||
func _test_param_values() -> void:
|
||||
# oracle: design/ux/battle.md:128 (环径与法阵定值组)
|
||||
Kit.check("SEAL_RING_FRAC = 0.82〔seal批 V1〕", UiKit.SEAL_RING_FRAC == 0.82)
|
||||
|
||||
@@ -122,7 +122,7 @@ func _init() -> void:
|
||||
|
||||
# ---- V13–V18 立绘显示档(迭代 48 卡②——显示档 = 三档绝对高,入包件 = 原稿紧裁零降采样) ----
|
||||
|
||||
# 规格钉值(显示档定值单点 = art-bible §8.2;源高 = 原稿表值——旧降采样稿必红;
|
||||
# 规格钉值(显示档定值单点 = 本测试钉值;源高 = 原稿表值——旧降采样稿必红;
|
||||
# 显示宽 = round(源宽×档高/源高),食人魔酋长 157 为已接受超宽项):
|
||||
# 键 → [源高, 显示档高, 显示宽]
|
||||
const _DISPLAY_SPEC := {
|
||||
|
||||
@@ -673,7 +673,7 @@ func _smoke_contrast_inks() -> void:
|
||||
# oracle: design/gdd/systems/表现与支撑/HUD框架.md:281 (对比度墨色锚组)
|
||||
print("--- UI 残余 <4.5:1 文字位换墨(V4 对比度锚定)---")
|
||||
var uikit_s = load("res://presentation/views/ui_kit.gd")
|
||||
var stage: Color = uikit_s.SLOT_BACKDROP # 舞台底对比锚改读合并目标(art-bible §4.1 换色合并③——阈值与判据不变)
|
||||
var stage: Color = uikit_s.SLOT_BACKDROP # 舞台底对比锚读合并目标色(换色合并沿革查 git 提交史——阈值与判据不变)
|
||||
var r_order := _theme_contrast(uikit_s.GOLD_BRIGHT, stage)
|
||||
Kit.check("V4 顺位徽标/重甲徽标 GOLD_BRIGHT 对舞台底 %.2f:1 ≥4.5:1" % r_order, r_order >= 4.5)
|
||||
var r_ward := _theme_contrast(uikit_s.HERO_BLUE_BRIGHT, stage)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# tests/unit/presentation/type_glow_test.gd — 未开格类型微光数据面直验
|
||||
# 断言面 = 纯函数/常量域(无渲染):① 九 cell_type → 五组封闭判定(含清单外显式失败、
|
||||
# 禁子串匹配、与卡顶带 tg_band 的归组差异锚定——Q3 甲案两带并存);② 五组色值冻结面
|
||||
# (HSV 对照 art-bible §4.2 冻结值只准动明度档——群伤组
|
||||
# (冻结值落码于本文件 FROZEN/IMPL,只准动明度档——群伤组
|
||||
# #A61D37 为终值,本测试即该判据的守门件);③ 呈现参数锚定(α170/带宽 cell÷8);④ 合成空间
|
||||
# 阶梯单调 + 相邻组模型 CR ≥1.20(色弱灰度互辨的数据面预判,终审在渲染取证探针实测);
|
||||
# ⑤ probe API 形状(默认开/空态键集)。
|
||||
@@ -13,13 +13,13 @@ const Kit := preload("res://tests/unit/test_kit.gd")
|
||||
const UiKitScript := preload("res://presentation/views/ui_kit.gd")
|
||||
const BoardViewScript := preload("res://presentation/views/board_view.gd")
|
||||
|
||||
# art-bible §4.2 样张 v2 冻结五组(F3 抄录表——本测试的冻结面基准)
|
||||
# 样张 v2 冻结五组(F3 定值面=本表——本测试的冻结面基准)
|
||||
const FROZEN := {
|
||||
"BUFF": Color8(0xD6, 0xC1, 0x3A), "HEAL": Color8(0x5C, 0xB8, 0x3A),
|
||||
"PIERCE": Color8(0x2E, 0x9E, 0x9E), "MAGIC": Color8(0x7B, 0x5B, 0xD6),
|
||||
"AOE": Color8(0xFF, 0x2D, 0x55),
|
||||
}
|
||||
# 九 cell_type 全值域 → 期望组号(art-bible §4.2 成员集合逐字照抄)
|
||||
# 九 cell_type 全值域 → 期望组号(微光五组成员集合,与 ui_kit 封闭判定逐字一致)
|
||||
const TYPE_EXPECT := {
|
||||
"attack": UiKitScript.GLOW_BUFF, "defense": UiKitScript.GLOW_BUFF,
|
||||
"weaken": UiKitScript.GLOW_BUFF, "action": UiKitScript.GLOW_BUFF,
|
||||
@@ -79,7 +79,7 @@ func _test_grouping_closed() -> void:
|
||||
UiKitScript.glow_color_for_group(99) == Color(0, 0, 0, 0))
|
||||
|
||||
|
||||
# ② 冻结色相面:逐组 HSV 对照 art-bible §4.2 冻结值——只准动明度(ΔH≤0.2°/ΔS≤0.01)
|
||||
# ② 冻结色相面:逐组 HSV 对照本文件 FROZEN 冻结值——只准动明度(ΔH≤0.2°/ΔS≤0.01)
|
||||
func _test_frozen_hue_face() -> void:
|
||||
# oracle: design/engineering/test-conventions.md:56 (判定上报通道——验证函数组)
|
||||
for g in FROZEN:
|
||||
@@ -98,7 +98,7 @@ func _test_frozen_hue_face() -> void:
|
||||
Kit.check("群伤组专项:V=0.65 明度档( provisional 域内)", absf(aoe_m.v - 166.0 / 255.0) < 0.002)
|
||||
|
||||
|
||||
# ③ 呈现参数锚定(art-bible §4.2 v2 冻结参数)
|
||||
# ③ 呈现参数锚定(v2 冻结参数,定值面=本测试与 ui_kit 常量)
|
||||
func _test_render_params() -> void:
|
||||
# oracle: design/engineering/test-conventions.md:56 (判定上报通道——验证函数组)
|
||||
Kit.check("泛光强度 α = 170/255(v2 呈现参数冻结)",
|
||||
|
||||
Reference in new issue
Block a user