清理(退役效果词面·用户令直改): 删 9 个秘宝旧词形与零落点词面 bias_wallet 的词表登记(效果引擎词表 31→30); 连带清 MAGNITUDE_KINDS/REVEAL_KINDS/交叉字段校验、cell_removal 与 bonus_refresh 死分支、闭集计数断言、假数据件名、豁免清单与工具旧名映射; 旧概念名称与描述移入 design/content-archive/道具退役素材库.md 表一附; 体验验证清单/node-reward 举例改现役件; 待办条整条删除、roadmap 待编池去条、两份普查过程件退役。保留边界: 运行时叠加层键(真视红框/预读徽章/行动点)、table_structure_guard 守卫断言用词、退役指路句、四组封闭词表其余零订阅与预留埋点一项未动。本步凭据: 文档域闸【验收通过】无新增红; 冒烟测试 15 项 0 失败 PASS(三闸全过); 单元测试/系统测试/场景探针/静态扫描全绿; 渲染闸全绿(golden board 三屏 0.00%/菜单 0.67%/lmap 双 Shot 0.00%); 环境坑清偿=worktree 素材同步补拷 31 件+导入刷新、渲染闸 python3 指向 gamedev venv PIL。

This commit is contained in:
DKChan committed 2026-11-08 06:54:34 +08:00
1 parent 7b6bbea9cf
commit e34310de35
20 files changed
+56 -173

No files matched your search

+10 -17
View File
@@ -16,15 +16,11 @@ extends Resource
const UNLOCK_COUNTER_KEYS := ["adventure_cleared", "boss_kill_count", "vision_used"]
const DIMENSIONS := ["info", "risk", "action", "plan", "counter"]
# enum 九 kind 全部条件触发/机制修正类;mine_reveal/ap_grant 语义不变。
# cell_removal = 中立移除危险格通道;mine_hit_halve 系固定
# 「减半」语义不消费 magnitude(反弹 N 由 reflect_damage 行 magnitude 承载)。
# enum kind 全部条件触发/机制修正类;词面只收现役效果类型。
# 主动件 kind 词族(reveal_tiles/preview/grant_ap/remove_mines/
# refresh_pick——效果引擎 ACTIVE_KINDS 同名闭集);被动件不走 effect_kinds 词族
# (passive 行走 triggers 事件订阅形态);旧词保留共存至迁移完成。
const EFFECT_KINDS := ["mine_reveal", "reward_preview", "ap_grant",
"mine_hit_halve", "reflect_damage", "ap_rounds_front", "ap_charge_safe", "cell_removal",
"reward_weight_bias", "bonus_refresh",
# (passive 行走 triggers 事件订阅形态)。
const EFFECT_KINDS := ["ap_charge_safe",
"reveal_tiles", "preview", "grant_ap", "remove_mines", "refresh_pick",
# 以下八型:
# 常时参数面六型(无事件订阅——开局/装板参数注入,注入面按装配集 kind 分发读取):
@@ -45,12 +41,11 @@ const TIER_RANK := {"common": 1, "excellent": 2, "rare": 3, "legendary": 4}
# 充能重置周期(现役仅 adventure=每冒险;battle=每战重置〔线香〕/level=每关重置〔天眼〕)
const CHARGE_RESETS := ["adventure", "battle", "level"]
# magnitude 消费面(≥1 校验):grant_ap 与同调 N 值 kind;其余 kind 活行 magnitude 恒 0
const MAGNITUDE_KINDS := ["ap_grant", "reflect_damage", "ap_rounds_front",
"ap_charge_safe", "reward_weight_bias", "bonus_refresh", "grant_ap",
const MAGNITUDE_KINDS := ["ap_charge_safe", "grant_ap",
"light_radius_bonus", "rap_transfer_mult", "dig_range_bonus", "seal_range_free",
"refresh_stock_grant", "shop_refresh_bonus"]
# 真视类 kind(护栏:活行 target 必须 ∈ {area_3x3, cell}:真视窄域 ≤3×3 契约)
const REVEAL_KINDS := ["mine_reveal", "reveal_tiles"]
const REVEAL_KINDS := ["reveal_tiles"]
# 🔴 零裸 flat 结构护栏:行键白名单封闭(键出域=加载致命)——机制轴禁无条件属性加项的表结构承载
const KEY_WHITELIST := ["item_id", "display_name", "dimension_tags", "effect_kinds", "target",
"magnitude", "use_phase", "retired", "deferred", "form", "charges_per_adventure", "slot_cost",
@@ -149,13 +144,13 @@ func _validate_row_active(row: Dictionary, iid: String, kind_seen: Dictionary) -
if kind_seen.has(String(rv)) and not (target == "area_3x3" or target == "cell"):
errs.append({"category": "load_bearing", "message": "%s 真视窄域护栏:%s 行 target 必须 area_3x3 或 cell,实得 %s(秘宝 GDD 结构冻结)" % [iid, String(rv), target]})
# 承重护栏②board_wide 仅恢复推理类:全图域行禁替推理效果
if target == "board_wide" and kind_seen.has("mine_reveal"):
errs.append({"category": "load_bearing", "message": "%s board_wide 行 effect_kinds 不得含 mine_reveal(全图域仅恢复推理原料类——Alpha 重定后落位)" % iid})
if target == "board_wide" and kind_seen.has("reveal_tiles"):
errs.append({"category": "load_bearing", "message": "%s board_wide 行 effect_kinds 不得含 reveal_tiles(全图域仅恢复推理原料类——Alpha 重定后落位)" % iid})
errs.append_array(_validate_row_magnitude(row, iid, kind_seen))
return errs
## N 值语义域:magnitude 越域与 MAGNITUDE_KINDS 行消费(≥1);其余活行恒 0(同调批 T1——消费面自 ap_grant 扩至 N 值 kind)
## N 值语义域:magnitude 越域与 MAGNITUDE_KINDS 行消费(≥1);其余活行恒 0(同调批 T1——消费面覆盖 N 值 kind)
func _validate_row_magnitude(row: Dictionary, iid: String, kind_seen: Dictionary) -> Array[Variant]:
var errs: Array[Variant] = []
var mag: int = int(row.get("magnitude", 0))
@@ -233,10 +228,8 @@ func _validate_row_effect_numbers(row: Dictionary, iid: String, kind_seen: Dicti
var eff_rounds: int = int(row.get("effective_rounds", 0))
if eff_rounds < 0 or eff_rounds > 999:
errs.append({"category": "domain", "message": "%s effective_rounds 越域 [0,999]: %d" % [iid, eff_rounds]})
if kind_seen.has("ap_rounds_front") and eff_rounds < 1:
errs.append({"category": "cross_field", "message": "%s ap_rounds_front 行 effective_rounds 应 ≥1(P4 甲表值化),实得 %d" % [iid, eff_rounds]})
if not kind_seen.has("ap_rounds_front") and eff_rounds != 0 and not row.has("triggers"):
errs.append({"category": "cross_field", "message": "%s 非 ap_rounds_front 行 effective_rounds 应 0(trigger 行=when value_from 取数源豁免),实得 %d" % [iid, eff_rounds]})
if eff_rounds != 0 and not row.has("triggers"):
errs.append({"category": "cross_field", "message": "%s 无 triggers 行 effective_rounds 应 0(trigger 行=when value_from 取数源豁免),实得 %d" % [iid, eff_rounds]})
var charge_n: int = int(row.get("charge_n", 0))
if charge_n < 0 or charge_n > 999:
errs.append({"category": "domain", "message": "%s charge_n 越域 [0,999]: %d" % [iid, charge_n]})