T5 core/data结构段: config_db拆R1解析器+跨表校验器两类(门面38消费方签名零变化)+三选一双渠道参数化(_apply_bonus_pick共享/守卫收AuxItems.can_accept/替换子交互保守分轨注记)+rest回血单点+行主序键单点+魔法数结构化(bonus_candidate_count默认3/出生区9/数量域常量——值零改动)+level_runner Phase enum(外部读面零变化)+表访问收口(aux走访问器/行集直扫三处收口/删clamped_pool壳与死变量erow/_minesweeper_ref包装)+tune_sim反向依赖解除(构造注入缺省null兜底)+类型注批量;闸=冲烟636/0+run_all 15套+探针全绿+MC对拍200局逐位一致
This commit is contained in:
1 parent
59f0c70ca3
commit
d1460327a4
21 files changed
+491
-342
No files matched your search
@@ -18,6 +18,10 @@ const BONUS_CAP_UNLIMITED := -1
|
||||
# —— 通关部分回血(固定型,非末关通关兑付)——
|
||||
@export var clear_heal_pct: int = 20 # [0,100] knob——回复生效上限的百分比,封顶上限不回满
|
||||
|
||||
# —— 三选一候选数(2026-10-02 修复批 T2 魔法数结构化:自 adventure_runner 抽签字面量 3 收口进表;
|
||||
# 默认 3 = 现行行为零改动——加权洗牌不放回掷 N 的 N,改值须重扫三选一体验与牌库剔除节奏)——
|
||||
@export var bonus_candidate_count: int = 3 # [1,6] knob——候选数上界受 BONUS_IDS 词表封闭约束
|
||||
|
||||
# —— 三选一件值(兑付面)——
|
||||
@export var bonus_attack_flat: int = 1 # [0,999] knob——攻击轴累加(覆盖值通道)
|
||||
@export var bonus_max_hp_flat: int = 5 # [0,999] knob——生命上限轴累加(不连带当前生命)
|
||||
@@ -93,6 +97,8 @@ func validate() -> Array:
|
||||
errs.append({"category": "domain", "message": "bonus_cap(%s) 越域 [0,99]: %d" % [id, c]})
|
||||
if bonus_aux_item_count < 1 or bonus_aux_item_count > 9:
|
||||
errs.append({"category": "domain", "message": "bonus_aux_item_count 越域 [1,9]: %d" % bonus_aux_item_count})
|
||||
if bonus_candidate_count < 1 or bonus_candidate_count > BONUS_IDS.size():
|
||||
errs.append({"category": "domain", "message": "bonus_candidate_count 越域 [1,%d]: %d" % [BONUS_IDS.size(), bonus_candidate_count]})
|
||||
if transitional_sync_slots < 0 or transitional_sync_slots > 9:
|
||||
errs.append({"category": "domain", "message": "transitional_sync_slots 越域 [0,9]: %d" % transitional_sync_slots})
|
||||
return errs
|
||||
@@ -51,8 +51,8 @@ func validate() -> Array:
|
||||
var att: int = int(row.get("max_gen_attempts", 0))
|
||||
if att < 1 or att > 32:
|
||||
errs.append({"category": "domain", "message": "(%d,%d) max_gen_attempts 越域 [1,32]" % [L, D]})
|
||||
# 布雷数下限(R3)——零雷板拒绝
|
||||
var n_mines := int(round(d * float(w * h - 9)))
|
||||
# 布雷数下限(R3)——零雷板拒绝(−9 = 出生区格数,常量单点 BoardData.SPAWN_AREA_CELLS——2026-10-02 修复批)
|
||||
var n_mines := int(round(d * float(w * h - BoardData.SPAWN_AREA_CELLS)))
|
||||
if n_mines < 1:
|
||||
errs.append({"category": "cross_field", "message": "(%d,%d) 布雷数下限违例 round(d×(W×H−9)) ≥ 1" % [L, D]})
|
||||
# F2b min_safe 可行性
|
||||
|
||||
@@ -15,6 +15,11 @@ extends Resource
|
||||
# 2026-09-15 命名统一批:位置键 {none, a, b} → 语义键 {light, ward, heavy} = 轻甲 / 魔法护甲 / 重甲)
|
||||
const ARMOR_TYPES := ["light", "ward", "heavy"]
|
||||
|
||||
# 实例化数量域(2026-10-02 修复批 T2 魔法数结构化——数量域 [1,3] 双落点收口单点:
|
||||
# 本表 validate 与 单位容器 spawn 守卫共用;遭遇骰结果与行值 unit_count/unit_count_max 同域)
|
||||
const UNIT_COUNT_MIN := 1
|
||||
const UNIT_COUNT_MAX := 3
|
||||
|
||||
|
||||
func validate() -> Array:
|
||||
var errs: Array[Dictionary] = []
|
||||
@@ -39,13 +44,13 @@ func validate() -> Array:
|
||||
if String(row.get("display_name", "")) == "":
|
||||
errs.append({"category": "domain", "message": "%s display_name 空" % eid})
|
||||
var uc: int = int(row.get("unit_count", 0))
|
||||
if uc < 1 or uc > 3:
|
||||
errs.append({"category": "domain", "message": "%s unit_count 越域 [1,3]" % eid})
|
||||
if uc < UNIT_COUNT_MIN or uc > UNIT_COUNT_MAX:
|
||||
errs.append({"category": "domain", "message": "%s unit_count 越域 [%d,%d]" % [eid, UNIT_COUNT_MIN, UNIT_COUNT_MAX]})
|
||||
# unit_count_max(可省略——遭遇随机化批,难度曲线与Boss GDD Core Rule 8):区间 [unit_count, max],缺省 = 定值
|
||||
if row.has("unit_count_max"):
|
||||
var ucm: int = int(row.get("unit_count_max", uc))
|
||||
if ucm < uc or ucm > 3:
|
||||
errs.append({"category": "cross_field", "message": "%s unit_count_max(%d) 越域 [unit_count(%d),3]" % [eid, ucm, uc]})
|
||||
if ucm < uc or ucm > UNIT_COUNT_MAX:
|
||||
errs.append({"category": "cross_field", "message": "%s unit_count_max(%d) 越域 [unit_count(%d),%d]" % [eid, ucm, uc, UNIT_COUNT_MAX]})
|
||||
var hp: int = int(row.get("hp", 0))
|
||||
if hp < 1 or hp > 999:
|
||||
errs.append({"category": "domain", "message": "%s hp 越域 [1,999]" % eid})
|
||||
|
||||
@@ -20,6 +20,14 @@ extends Resource
|
||||
const NODE_TYPES := ["battle", "reward", "rest", "boss", "shop"] # 商店房批 2026-09-21 四→五类(关卡节点地图 v1.1)
|
||||
|
||||
|
||||
# 行单点读取(2026-10-02 修复批 T5 表访问收口——LevelRunner._find_level_row 直扫收口;键 = level_index)
|
||||
func row_by_level_index(level_index: int) -> Dictionary:
|
||||
for row in rows:
|
||||
if int(row.level_index) == level_index:
|
||||
return row
|
||||
return {}
|
||||
|
||||
|
||||
func validate() -> Array:
|
||||
var errs: Array[Dictionary] = []
|
||||
if rows.is_empty():
|
||||
|
||||
Reference in new issue
Block a user