diff --git a/data/scenarios/001_yellow_turbans.json b/data/scenarios/001_yellow_turbans.json index 0934e43..e61c042 100644 --- a/data/scenarios/001_yellow_turbans.json +++ b/data/scenarios/001_yellow_turbans.json @@ -267,6 +267,12 @@ "base": { "hp": 24, "atk": 9, "def": 4 } } ] + }, + { + "type": "set_ai_target_priority", + "unit_id": "xiahou_dun", + "priority": 9, + "text": "동쪽 잔병이 하후돈의 선봉을 노린다." } ] }, @@ -298,6 +304,12 @@ "base": { "hp": 24, "atk": 9, "def": 4 } } ] + }, + { + "type": "set_ai_target_priority", + "unit_id": "cao_cao", + "priority": 11, + "text": "남쪽 약탈대가 조조의 본진을 노린다." } ] } diff --git a/tools/smoke_event_ai_priority.gd b/tools/smoke_event_ai_priority.gd index 3cc1151..a0fbddc 100644 --- a/tools/smoke_event_ai_priority.gd +++ b/tools/smoke_event_ai_priority.gd @@ -13,6 +13,7 @@ func _init() -> void: _check_priority_action(state, failures) _check_priority_changes_enemy_targeting(state, failures) + _check_reinforcement_priority_events(failures) if failures.is_empty(): print("event ai priority smoke ok") @@ -57,6 +58,38 @@ func _check_priority_changes_enemy_targeting(state, failures: Array[String]) -> failures.append("AI priority did not affect nearest target scoring: %s" % str(target.get("id", ""))) +func _check_reinforcement_priority_events(failures: Array[String]) -> void: + var state = BattleStateScript.new() + if not state.load_battle("res://data/scenarios/001_yellow_turbans.json"): + failures.append("Could not load stage 1 priority event scenario") + return + + var logs: Array[String] = [] + var feedback: Array[Dictionary] = [] + state.log_added.connect(func(message: String) -> void: + logs.append(message) + ) + state.combat_feedback_requested.connect(func(unit_id: String, text: String, kind: String) -> void: + feedback.append({"unit_id": unit_id, "text": text, "kind": kind}) + ) + + state._run_events("turn_start", "enemy", 4) + if int(state.get_unit("xiahou_dun").get("ai_target_priority", 0)) != 9: + failures.append("Turn 4 reinforcement did not pressure Xiahou Dun") + if not logs.has("동쪽 잔병이 하후돈의 선봉을 노린다."): + failures.append("Turn 4 reinforcement priority log missing") + if not _feedback_has(feedback, "xiahou_dun", "표적", "priority"): + failures.append("Turn 4 reinforcement priority feedback missing") + + state._run_events("turn_start", "enemy", 7) + if int(state.get_unit("cao_cao").get("ai_target_priority", 0)) != 11: + failures.append("Turn 7 reinforcement did not pressure Cao Cao") + if not logs.has("남쪽 약탈대가 조조의 본진을 노린다."): + failures.append("Turn 7 reinforcement priority log missing") + if not _feedback_has(feedback, "cao_cao", "표적", "priority"): + failures.append("Turn 7 reinforcement priority feedback missing") + + func _feedback_has(feedback: Array[Dictionary], expected_unit_id: String, expected_text: String, expected_kind: String) -> bool: for entry in feedback: if (