# VERTICAL SLICE - NOT FOR PRODUCTION # Date: 2026-09-12 # 数据配置 DifficultyTable schema(难度曲线与Boss GDD Core Rule 1 兑现——敌人系统 Rule 10 "接口未定 provisional" 的建表兑现,走 数据配置 接口漂移规则)。 # 全局修饰结构位:按 (L,D) 精确匹配施加乘数于 EnemyTable 行值(敌人系统.spawn 实例化时、行值快照前)。 # MVP 空表(零行为——AC-10);首个使用场景 = 精英节点(关卡节点地图 定稿联动,难度曲线与Boss OQ5);Boss 走 Dmax 直填行不走本表。 class_name DifficultyTable extends Resource @export var rows: Array = [] # Array[Dictionary]:{level_index, node_depth, hp_mult, atk_mult} const MULT_MIN := 0.1 const MULT_MAX := 10.0 func validate() -> Array: var errs: Array = [] var seen := {} for row in rows: var L: int = int(row.get("level_index", 0)) var D: int = int(row.get("node_depth", -1)) var key := "%d_%d" % [L, D] if seen.has(key): errs.append({"category": "dup_key", "message": "DifficultyTable 键重复: %s" % key}) seen[key] = true if L < 1 or D < 0: errs.append({"category": "domain", "message": "难度键越域 (%d,%d)" % [L, D]}) # 乘数越域 = warning 级(使用时 clamp——组合事故非配置事故,难度曲线与Boss GDD Edge Case 预登记) for k in ["hp_mult", "atk_mult"]: var v: float = float(row.get(k, 1.0)) if v < MULT_MIN or v > MULT_MAX: errs.append({"category": "mult_oor_warning", "message": "%s (%s) 越域 [0.1,10] 使用时 clamp: %f" % [key, k, v]}) return errs