feat(迭代24): N1 (1,2)降档hp22/ac2 + N2 毒吐盾击两行六池投放——expect_pools六键同步+V1/V3/V4断言随批(冒烟945/0)
This commit is contained in:
1 parent
b89c3feb2f
commit
26d669f83d
4 files changed
+129
-10
No files matched your search
@@ -80,3 +80,5 @@
|
||||
- **485(2026-10-13,R1 机制位批——requires_level 等级阈值前置随批重立)**:用户对迭代 21 追认单 #1 裁「b) 推翻,补机制位小批」并令当场做(不占迭代号——用户令小批模式)。落地=卡片 v1.7 留任案形态:meta_tree_table.gd KEY_WHITELIST+requires_level 字段(Dictionary{node_id: n})+validate 三拒(键悬空/阈值<1/类型错);meta_progression.gd tree_can_buy 等级阈值判定分支+tree_gate_text 门槛文案+tree_camp_rows 投影行 gate_text;camp_overlay_view.gd 行板未达标 🔒 标+悬停文案;新单测 tree_requires_level_test 八断言(schema 四拒一过+判定三态+投影两态——首跑抓出测试自身时序 bug〔零配置行断言跑在 cap 满状态后〕重排修正)入 run_all(24→25 套);现役 12 行零配置=机制位空转零行为影响(配置归表行随需填)。闸=冒烟 938/0+run_all 25 套+probe --click/--full+render_gate 全绿(零漂移;MC 豁免=零数值零行为)+doc 三闸对基线零新增+熵增 PASS。文档=天赋树.md v0.10(六处 R1 表述换代:状态行/范围表/schema 连带/购买校验③/调参表/验收前置行)+iter21 报告 §四 #1 推翻标注+§八兑现注。合并 29b08d4(基点含并行 UI 主题卡片批 89b0008);主区 run_all 25 套兜底绿;worktree 与分支已清理。**迭代 21 追认单终态:十二条全收口**(十条追认+#1 推翻重立+#4 追认带意向);悬置仅剩 #10 锻造段异议结论(状态面板改名已落地)。(worktree r1mech-20261013;编号顺延 485——483 系并行术语表微批、484 系本会话改名批登记)
|
||||
|
||||
- **486(2026-10-13,迭代 21 追认单终清——#10 裁维持现状)**:用户裁「维持现状就行了,到时候效果有问题,我再让你做对应的优化更改。现在不用动」——状态面板不补锻造概览(原属性锻造三行的信息缺口:锻造工坊武器/护甲路线等级面板不可见,用户知悉并接受,将来实际游玩效果有问题时按需提优化)。iter21 报告 §四 #10 标注追认结果收口。**至此迭代 21 待用户事项全部出清**(追认单十二条+反哺六条+欠账三条全链闭环);各批(20/21/22/23)追认与反哺全部出清,项目待用户面仅剩四批实机目检人闸+存量未决面(美术 P0 两项/去毒残留词/喂雷流 R5/通关口径 273 处)。快照/主战场换代。零代码零游戏文件。(worktree log486-20261013;编号顺延 486)
|
||||
|
||||
- **487(2026-10-13,迭代 24 敌人表内容修批(三关)开工——U0 单会话交付)**:定义入库 0c083bb(主区守卫拦 commit 坑再证——b89c3fe worktree 提交 --no-ff 合回舞步);开工门=需求卡片 v1.1 零待裁点(Q1-Q9 全裁用户令「按推荐方式」)。基线复读:冒烟 938/0 + run_all **25 套**(卡片/roadmap 记 24 系 485 R1 批加套前旧基线,随批换代呈报)+ probe --click 全绿;改前 MC 锚落盘 sim-data/runsum_iter24_pre_n40both_20261013.jsonl(二档 N=20×both·seed0=9000 沿用迭代 23 配对种子:normal L1 通关 3/20·taken 中位 29.5;perfect L1 19/20·L2 8/20·全通 6/20·taken 中位 76.5)。T1 N1 落地=enemy.tres (1,2) hp 50→22·ac 3→2+表尾批注(阶名化解方案实机未达预期重裁沿革)+V1 两断言(降档锚定+相邻总量比≤2.5 护栏);T2 N2 落地=skills.tres 12→14 行(venom_spit 毒吐 ×1.6/CD2·shield_bash 盾击 ×1.7/CD3 均无 rider)+六池投放(蜘蛛 (2,5)-(2,7)+毒吐 2、灰矮人 (3,0)/(3,5)/(3,7)+盾击 2、首遇位 (2,4) 不动)+expect_pools 六键同步+旧「技能表十二行」断言换代十四行+V3/V4 五断言(两行字段域/两投放面/逐池增益妨害纪律)。冒烟 945/0+probe 全绿。T3 N3 进行中。(worktree g-plan2-iter24-enemy)
|
||||
@@ -50,7 +50,7 @@ rows = [{
|
||||
"enemy_id": "bugbear",
|
||||
"display_name": "熊地精",
|
||||
"unit_count": 1,
|
||||
"hp": 50,
|
||||
"hp": 22,
|
||||
"atk": 1,
|
||||
"atk_min": 0,
|
||||
"atk_max": 2,
|
||||
@@ -65,7 +65,7 @@ rows = [{
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "light",
|
||||
"armor_class": 3
|
||||
"armor_class": 2
|
||||
}, {
|
||||
"level_index": 1,
|
||||
"node_depth": 3,
|
||||
@@ -224,6 +224,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "charge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "venom_spit",
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "light",
|
||||
"armor_class": 2
|
||||
@@ -247,6 +250,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "charge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "venom_spit",
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "light",
|
||||
"armor_class": 2
|
||||
@@ -270,6 +276,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "charge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "venom_spit",
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "light",
|
||||
"armor_class": 3
|
||||
@@ -321,6 +330,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "heavy",
|
||||
"weight": 2
|
||||
}, {
|
||||
"skill_id": "shield_bash",
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "heavy",
|
||||
"armor_class": 2
|
||||
@@ -388,6 +400,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "heavy",
|
||||
"weight": 2
|
||||
}, {
|
||||
"skill_id": "shield_bash",
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "heavy",
|
||||
"armor_class": 9
|
||||
@@ -434,6 +449,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "heavy",
|
||||
"weight": 2
|
||||
}, {
|
||||
"skill_id": "shield_bash",
|
||||
"weight": 2
|
||||
}],
|
||||
"armor_type": "heavy",
|
||||
"armor_class": 4
|
||||
@@ -624,3 +642,7 @@ rows = [{
|
||||
; 读数预期:(2,5) 场敌人 3-4 只(3=重击手 1+蜘蛛 2,4=蜘蛛掷 3);L2 难度带位移读数随 Alpha 收官 M4 数值批
|
||||
; 统一执行(07 在册义务——MC 取证跑批届时另报批,本批零跑)。禁区排查:巨蜘蛛首遇位 (2,4)「固定 2 不加骰」
|
||||
; 零触碰、Boss d9 零触碰、跨关混编禁令过(两敌种首遇关均 ≤L2)、既有 19 行现值零变更。
|
||||
; 敌人表内容修批 N1(2026-10-13 用户令「按推荐方式」,迭代 24 卡①):(1,2) 熊地精降档 hp 50>>22、armor_class 3>>2——
|
||||
; 2026-09-24 阶名化解方案((1,3) 改名大地精以阶名归位化解同族血量倒挂观感)实机验证未达预期,按体验反馈重裁:
|
||||
; 第一关总量曲线 12/10/50/35/72 的 5 倍墙消除(22 后曲线 12/10/22/35/72 相邻比最大 2.2);敌种 bugbear/池/数量/atk 区间零改动。
|
||||
; 曲线标定其余行归 M4 数值批。
|
||||
@@ -81,6 +81,18 @@ rows = [{
|
||||
"type": "damage",
|
||||
"damage_mult": 2.5,
|
||||
"cooldown_beats": 4
|
||||
}, {
|
||||
"skill_id": "venom_spit",
|
||||
"display_name": "毒吐",
|
||||
"type": "damage",
|
||||
"damage_mult": 1.6,
|
||||
"cooldown_beats": 2
|
||||
}, {
|
||||
"skill_id": "shield_bash",
|
||||
"display_name": "盾击",
|
||||
"type": "damage",
|
||||
"damage_mult": 1.7,
|
||||
"cooldown_beats": 3
|
||||
}]
|
||||
|
||||
; 敌人技能池批(2026-09-16 用户拍板——设计权威 docs/proposal-skill-pool.md v1.0,全值 provisional 投值归 难度曲线与Boss):
|
||||
@@ -131,3 +143,13 @@ rows = [{
|
||||
; atk=3(L2 精英/L3 全系):attack 3 / lunge·bite 5(×1.667 +11pp)/ heavy 6 / venom_burst 8(×2.667 +6.7pp)/
|
||||
; venom_curb 6(=名义)/ quake_smash 8 / rockslide 8
|
||||
; atk=4(区间上界):全精确(4/6/6/8/10/8/10)
|
||||
;
|
||||
; 敌人表内容修批 N2(2026-10-13 用户令「按推荐方式」,迭代 24 卡①)——普通敌错峰两行(12→14 行):
|
||||
; venom_spit 毒吐 = 伤害 ×1.6 冷却 2(巨蜘蛛族普通敌池载体,挂 (2,5)/(2,6)/(2,7),首遇教学位 (2,4) 不投——
|
||||
; 「独占技随关错峰」首轨只做在 Boss 侧的补齐;venom_spit 自 (2,5) 起投)。
|
||||
; shield_bash 盾击 = 伤害 ×1.7 冷却 3(灰矮人族普通敌池载体,挂 (3,0)/(3,5)/(3,7))。
|
||||
; 两行均不带 rider_mult:L2/L3 普通敌 atk 1–3,floor(atk×r) 恒被 damage_floor 兜成 1,与 0.75 档效果
|
||||
; 完全相同——白占字段(毒绕开护甲由 damage 直伤表达已足够)。
|
||||
; 有效倍率(int(round) 半值上取):毒吐 atk1→2/atk2→3/atk3→5;盾击 atk1→2/atk2→3/atk3→5。
|
||||
; 倍率 provisional 归 M4 数值批。池权重均 2;逐池「恰一普攻/增益≤1/妨害≤1」纪律复查过
|
||||
; (巨蜘蛛族增益仍仅 charge、灰矮人族 (3,0)/(3,7) 仅 charge·(3,5) 无增益、两族妨害 0)。
|
||||
+81
-8
@@ -1303,6 +1303,42 @@ func _smoke_ac_swap_guard() -> void:
|
||||
boss_ac[int(row.get("level_index", 0))] = int(row.get("armor_class", 0))
|
||||
check(int(boss_ac.get(1, 0)) < int(boss_ac.get(2, 0)) and int(boss_ac.get(2, 0)) < int(boss_ac.get(3, 0)),
|
||||
"Boss AC 关卡台阶严格递增(%d < %d < %d)" % [int(boss_ac.get(1, 0)), int(boss_ac.get(2, 0)), int(boss_ac.get(3, 0))])
|
||||
# ③c 迭代 24 N1(2026-10-13):(1,2) 降档锚定 + 第一关总量曲线护栏
|
||||
# 降档裁决沿革:2026-09-24 阶名化解方案(50 血系设计非填错)实机未达预期,按体验反馈重裁 hp 22 / ac 2;
|
||||
# 敌种 bugbear 与池 attack6/charge2/heavy2 钉死不动(防顺手改多——hobgoblin 无立绘,改敌种案已否决);
|
||||
# 曲线护栏 = 相邻节点「hp × 中位数量」总量比 ≤ 2.5(12/10/22/35/72 现行全绿;不用单调不回撤——会红在 (1,0)→(1,1))
|
||||
var l12_row: Dictionary = {}
|
||||
for row in _db.enemy.rows:
|
||||
if int(row.get("level_index", -1)) == 1 and int(row.get("node_depth", -1)) == 2:
|
||||
l12_row = row
|
||||
break
|
||||
var l12_pool := {}
|
||||
for entry in l12_row.get("pool", []):
|
||||
l12_pool[String(entry.skill_id)] = int(entry.weight)
|
||||
check(String(l12_row.get("enemy_id", "")) == "bugbear" and int(l12_row.get("hp", -1)) == 22 \
|
||||
and int(l12_row.get("armor_class", -1)) == 2 \
|
||||
and l12_pool == {"attack": 6, "charge": 2, "heavy": 2},
|
||||
"第一关 (1,2) 降档锚定(bugbear 保留 · hp 22 · ac 2 · 池 attack6/charge2/heavy2 零改动——迭代 24 N1)")
|
||||
var l1_totals := {}
|
||||
for row in _db.enemy.rows:
|
||||
if int(row.get("level_index", -1)) != 1:
|
||||
continue
|
||||
var cnt_lo: int = int(row.get("unit_count", 1))
|
||||
var cnt_hi: int = int(row.get("unit_count_max", cnt_lo))
|
||||
l1_totals[int(row.get("node_depth", -1))] = int(row.get("hp", 0)) * (cnt_lo + cnt_hi) / 2.0
|
||||
var curve_ok := true
|
||||
var curve_detail := ""
|
||||
var depths_sorted := l1_totals.keys()
|
||||
depths_sorted.sort()
|
||||
for i in range(1, depths_sorted.size()):
|
||||
var prev: float = float(l1_totals[depths_sorted[i - 1]])
|
||||
var curr: float = float(l1_totals[depths_sorted[i]])
|
||||
var ratio: float = curr / prev if prev > 0.0 else 999.0
|
||||
if ratio > 2.5:
|
||||
curve_ok = false
|
||||
curve_detail += " (%d→%d):%.2f" % [depths_sorted[i - 1], depths_sorted[i], ratio]
|
||||
check(curve_ok, "第一关相邻节点总量比 ≤ 2.5(12/10/22/35/72——迭代 24 N1 曲线护栏,越带%s)" % [
|
||||
curve_detail if curve_detail != "" else "无"])
|
||||
# ④ 掷点参数域(加载校验已过——此处钉形状语义)
|
||||
var bounds: Array = _db.settlement.roll_tier_bounds
|
||||
var discounts: Array = _db.settlement.roll_tier_discounts
|
||||
@@ -3168,7 +3204,7 @@ func _smoke_skill_pool() -> void:
|
||||
|
||||
# ① 数据面:技能表行集 + 普攻锁死 + 建议池行值 + 空池不可能(结构断言)
|
||||
func _smoke_skill_pool_data() -> void:
|
||||
check(_db.skill.rows.size() == 12, "技能表十二行(普攻/突刺/蓄力/重击/硬化 + 撕咬/毒爆/蛛网束缚 + 大地脉动 + 震地怒击/遏毒/岩崩——前三批 + Boss 半血解锁技三行〔迭代14④ T5〕)")
|
||||
check(_db.skill.rows.size() == 14, "技能表十四行(普攻/突刺/蓄力/重击/硬化 + 撕咬/毒爆/蛛网束缚 + 大地脉动 + 震地怒击/遏毒/岩崩 + 毒吐/盾击——前三批 + Boss 半血解锁技三行〔迭代14④ T5〕+ 普通敌错峰两行〔迭代 24 N2〕)")
|
||||
var basic: Dictionary = _db.skill.row_by_id("attack")
|
||||
check(not basic.is_empty() and String(basic.type) == "basic" and int(basic.cooldown_beats) == 0
|
||||
and (not basic.has("damage_mult") or is_equal_approx(float(basic.damage_mult), 1.0)),
|
||||
@@ -3206,6 +3242,26 @@ func _smoke_skill_pool_data() -> void:
|
||||
var off_guard_row: Dictionary = _db.status_effect_row("off_guard")
|
||||
check(not off_guard_row.is_empty() and String(off_guard_row.target_side) == "hero" and String(off_guard_row.unit) == "ac",
|
||||
"失衡状态行(hero · ac 轴——妨害技落点,ConfigDB side 守卫正例)")
|
||||
# 迭代 24 N2(2026-10-13):普通敌错峰两新行——毒吐/盾击(V3)
|
||||
var spit: Dictionary = _db.skill.row_by_id("venom_spit")
|
||||
check(not spit.is_empty() and String(spit.display_name) == "毒吐" and String(spit.type) == "damage" \
|
||||
and is_equal_approx(float(spit.damage_mult), 1.6) and int(spit.cooldown_beats) == 2 and not spit.has("rider_mult"),
|
||||
"毒吐行(伤害 ×1.6 · 冷却 2 · 无 rider——低 atk 下 rider 恒被 damage_floor 兜成 1 白占字段,迭代 24 N2)")
|
||||
var bash: Dictionary = _db.skill.row_by_id("shield_bash")
|
||||
check(not bash.is_empty() and String(bash.display_name) == "盾击" and String(bash.type) == "damage" \
|
||||
and is_equal_approx(float(bash.damage_mult), 1.7) and int(bash.cooldown_beats) == 3 and not bash.has("rider_mult"),
|
||||
"盾击行(伤害 ×1.7 · 冷却 3 · 无 rider——迭代 24 N2)")
|
||||
var spit_sole_ok := true # 毒吐只挂巨蜘蛛族且首遇位 (2,4) 不投(Q6——教学位池零新招)
|
||||
var bash_sole_ok := true # 盾击只挂灰矮人族三行
|
||||
for row in _db.enemy.rows:
|
||||
for entry in row.pool:
|
||||
var sid := String(entry.skill_id)
|
||||
if sid == "venom_spit" and not (String(row.enemy_id) == "giant_spider" and int(row.level_index) == 2 and int(row.node_depth) >= 5):
|
||||
spit_sole_ok = false
|
||||
if sid == "shield_bash" and not (String(row.enemy_id) == "duergar" and int(row.level_index) == 3):
|
||||
bash_sole_ok = false
|
||||
check(spit_sole_ok, "毒吐投放面(仅 (2,5)/(2,6)/(2,7) 巨蜘蛛族——首遇位 (2,4) 池不动,迭代 24 N2/Q6)")
|
||||
check(bash_sole_ok, "盾击投放面(仅 (3,0)/(3,5)/(3,7) 灰矮人族——钩爪恐魔零触碰,迭代 24 N2)")
|
||||
# 行集键 = (level_index, node_depth, enemy_id)——分支节点图批起 bugbear 等敌种跨关异池,enemy_id 不再唯一;
|
||||
# 2026-10-07 行集多行批:同坐标混编多行后每行各一池,键升维到三元组(行序 = 文件序 = 契约序)
|
||||
var expect_pools := {
|
||||
@@ -3217,17 +3273,17 @@ func _smoke_skill_pool_data() -> void:
|
||||
"2_0_bugbear": {"attack": 6, "lunge": 1, "heavy": 2},
|
||||
"2_1_bugbear": {"attack": 6, "lunge": 1, "heavy": 2},
|
||||
"2_4_giant_spider": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"2_5_giant_spider": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"2_5_giant_spider": {"attack": 6, "bite": 2, "charge": 1, "venom_spit": 2},
|
||||
"2_5_bugbear": {"attack": 5, "lunge": 2, "heavy": 2},
|
||||
"2_6_giant_spider": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"2_7_giant_spider": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"2_6_giant_spider": {"attack": 6, "bite": 2, "charge": 1, "venom_spit": 2},
|
||||
"2_7_giant_spider": {"attack": 6, "bite": 2, "charge": 1, "venom_spit": 2},
|
||||
"2_9_drider": {"attack": 6, "heavy": 2, "venom_burst": 2, "web_snare": 2, "venom_curb": 2},
|
||||
"3_0_duergar": {"attack": 6, "charge": 2, "heavy": 2},
|
||||
"3_0_duergar": {"attack": 6, "charge": 2, "heavy": 2, "shield_bash": 2},
|
||||
"3_1_hook_horror": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"3_4_hook_horror": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"3_5_duergar": {"attack": 5, "lunge": 2, "heavy": 2},
|
||||
"3_5_duergar": {"attack": 5, "lunge": 2, "heavy": 2, "shield_bash": 2},
|
||||
"3_6_hook_horror": {"attack": 6, "bite": 2, "charge": 1},
|
||||
"3_7_duergar": {"attack": 6, "charge": 2, "heavy": 2},
|
||||
"3_7_duergar": {"attack": 6, "charge": 2, "heavy": 2, "shield_bash": 2},
|
||||
"3_9_duergar_king": {"attack": 6, "heavy": 2, "earth_pulse": 2, "rockslide": 2},
|
||||
}
|
||||
var pools_ok := true
|
||||
@@ -3241,7 +3297,7 @@ func _smoke_skill_pool_data() -> void:
|
||||
got[String(entry.skill_id)] = int(entry.weight)
|
||||
if got != expect_pools[rk]:
|
||||
pools_ok = false
|
||||
check(pools_ok, "二十行九种池模板 = 建议池行值((L,D,enemy_id) 三元键逐行精确比对——2026-10-07 行集多行批口径;L1 地精 9/1 · 熊地精 6/2/2 · 酋长 6/2/2;L2 熊地精 6/1/2 · 蜘蛛 6/2/1 · 重击手 5/2/2 · 蛛化卓尔精灵 6/2/2/2〔(2,9)——商店房批 Boss 重编号〕;L3 灰矮人 6/2/2 · 钩爪恐魔 6/2/1 · 重装手 5/2/2 · 石君王 6/2/2〔earth_pulse·(3,9)〕——全部 provisional;三 Boss 池尾 +1 门控条目〔quake_smash/venom_curb/rockslide 权重 2+unlock_hp_pct 50——迭代14④ T5〕;混编行集同坐标多行各一池合法——首批投放 (2,5) 双行〔迭代 18 卡⑤:重击手+巢群,新行行值复制 (2,6)〕,其余坐标仍恰一行)")
|
||||
check(pools_ok, "二十行九种池模板 = 建议池行值((L,D,enemy_id) 三元键逐行精确比对——2026-10-07 行集多行批口径;L1 地精 9/1 · 熊地精 6/2/2 · 酋长 6/2/2;L2 熊地精 6/1/2 · 蜘蛛 6/2/1+毒吐2〔(2,5)-(2,7) 投放,首遇位 (2,4) 不投——迭代 24 N2〕 · 重击手 5/2/2 · 蛛化卓尔精灵 6/2/2/2〔(2,9)——商店房批 Boss 重编号〕;L3 灰矮人 6/2/2+盾击2〔(3,0)/(3,7)〕 · 钩爪恐魔 6/2/1 · 重装手 5/2/2+盾击2 · 石君王 6/2/2〔earth_pulse·(3,9)〕——全部 provisional;三 Boss 池尾 +1 门控条目〔quake_smash/venom_curb/rockslide 权重 2+unlock_hp_pct 50——迭代14④ T5〕;混编行集同坐标多行各一池合法——首批投放 (2,5) 双行〔迭代 18 卡⑤:重击手+巢群,新行行值复制 (2,6)〕,其余坐标仍恰一行)")
|
||||
var basic_count_ok := true
|
||||
for row in _db.enemy.rows:
|
||||
var n := 0
|
||||
@@ -3252,6 +3308,23 @@ func _smoke_skill_pool_data() -> void:
|
||||
if n != 1:
|
||||
basic_count_ok = false
|
||||
check(basic_count_ok, "每池恰一行普攻(空池不可能的加载校验同款)")
|
||||
# 迭代 24 N2 复查(V4):池构成纪律零违反——增益 ≤1 / 妨害 ≤1(敌人系统 v0.13 结构冻结;载入期
|
||||
# validate_skill_pool_links 已硬闸,此处冒烟侧显式复核新投放后仍绿)
|
||||
var comp_ok := true
|
||||
for row in _db.enemy.rows:
|
||||
var n_buff := 0
|
||||
var n_debuff := 0
|
||||
for entry in row.pool:
|
||||
var srow: Dictionary = _db.skill_row(String(entry.skill_id))
|
||||
if srow.is_empty():
|
||||
continue
|
||||
if String(srow.type) == "buff":
|
||||
n_buff += 1
|
||||
elif String(srow.type) == "debuff":
|
||||
n_debuff += 1
|
||||
if n_buff > 1 or n_debuff > 1:
|
||||
comp_ok = false
|
||||
check(comp_ok, "逐池增益 ≤1 · 妨害 ≤1(池构成纪律——迭代 24 N2 毒吐/盾击投放后复查)")
|
||||
# Boss 半血解锁技·编排集成断言(迭代14④ T6——真实编排回路:半血 → 下轮开轮闩检查 → 解锁行恰一次)
|
||||
var st_unlock: Dictionary = {"rows": []}
|
||||
var sett_u = load("res://core/battle_orchestrator.gd").new(_db, _fresh_rng(4242))
|
||||
|
||||
Reference in new issue
Block a user