From b47a8034b494078c3b50af8930ab3a7c80359127 Mon Sep 17 00:00:00 2001 From: Natalie Date: Wed, 13 May 2026 12:42:34 -0700 Subject: [PATCH] =?UTF-8?q?fix(@projects/@magic-civilization):=20?= =?UTF-8?q?=F0=9F=90=9B=20update=20beacon=5Ftower=20unlocks=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../age-of-dwarves/data/techs/dwarven_warfare.json | 8 ++++---- .../games/age-of-dwarves/data/techs/foundations.json | 4 +--- src/game/engine/src/entities/unit.gd | 3 ++- .../engine/tests/unit/ai/test_ai_turn_bridge_mcts.gd | 11 ++++++++--- .../engine/tests/unit/entities/test_unit_actions.gd | 8 ++++---- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/public/games/age-of-dwarves/data/techs/dwarven_warfare.json b/public/games/age-of-dwarves/data/techs/dwarven_warfare.json index a742767a..9ad469d1 100644 --- a/public/games/age-of-dwarves/data/techs/dwarven_warfare.json +++ b/public/games/age-of-dwarves/data/techs/dwarven_warfare.json @@ -473,13 +473,13 @@ "gunpowder" ], "unlocks": { - "buildings": [ - "beacon_tower" - ], + "buildings": [], "units": [ "beacon_bearer" ], - "improvements": [] + "improvements": [ + "beacon_tower" + ] }, "flavor": "Fire speaks faster than any runner. But fire can be put out.", "encyclopedia": { diff --git a/public/games/age-of-dwarves/data/techs/foundations.json b/public/games/age-of-dwarves/data/techs/foundations.json index 56a0f09f..ce72b354 100644 --- a/public/games/age-of-dwarves/data/techs/foundations.json +++ b/public/games/age-of-dwarves/data/techs/foundations.json @@ -296,9 +296,7 @@ "tracking" ], "unlocks": { - "buildings": [ - "tunnel_mouth" - ], + "buildings": [], "units": [ "tunnel_runner" ], diff --git a/src/game/engine/src/entities/unit.gd b/src/game/engine/src/entities/unit.gd index 3ea8ef56..88c52137 100644 --- a/src/game/engine/src/entities/unit.gd +++ b/src/game/engine/src/entities/unit.gd @@ -320,7 +320,8 @@ func get_legal_actions() -> Array[Dictionary]: is_deployed, is_embarked, has_adjacent_water, - has_adjacent_land + has_adjacent_land, + {} ) diff --git a/src/game/engine/tests/unit/ai/test_ai_turn_bridge_mcts.gd b/src/game/engine/tests/unit/ai/test_ai_turn_bridge_mcts.gd index da7824f6..14792209 100644 --- a/src/game/engine/tests/unit/ai/test_ai_turn_bridge_mcts.gd +++ b/src/game/engine/tests/unit/ai/test_ai_turn_bridge_mcts.gd @@ -288,10 +288,15 @@ func test_build_json_embeds_clan_weights_when_ctrl_present() -> void: GameState.players = [p0] var ctrl: RefCounted = ClassDB.instantiate("GdMcTreeController") - var data_dir: String = ProjectSettings.globalize_path( - "res://public/games/age-of-dwarves/data" + # build_mc_tree_state expects ai_personalities.json *contents* (JSON string), + # not a directory path — the Rust bridge variant is + # scoring_weights_for_clan_json. Loading the file contents here matches the + # production path (ai_turn_bridge.gd::_load_ai_personalities_json). + var personalities_path: String = ( + "res://public/games/age-of-dwarves/data/ai_personalities.json" ) - var gs: Dictionary = StateScript.build_mc_tree_state(ctrl, data_dir) + var personalities_json: String = FileAccess.get_file_as_string(personalities_path) + var gs: Dictionary = StateScript.build_mc_tree_state(ctrl, personalities_json) var players_arr: Array = gs["players"] as Array var p_dict: Dictionary = players_arr[0] as Dictionary diff --git a/src/game/engine/tests/unit/entities/test_unit_actions.gd b/src/game/engine/tests/unit/entities/test_unit_actions.gd index d27d1539..d0659bb8 100644 --- a/src/game/engine/tests/unit/entities/test_unit_actions.gd +++ b/src/game/engine/tests/unit/entities/test_unit_actions.gd @@ -126,7 +126,7 @@ func test_gd_unit_actions_bridge_legal_actions_for_military() -> void: pass_test("GdUnitActions not loaded in headless — skipping bridge test") return var bridge: RefCounted = ClassDB.instantiate("GdUnitActions") as RefCounted - var actions: Array[Dictionary] = bridge.legal_actions_for("military", "", true, false, false, false, false, false, false) + var actions: Array[Dictionary] = bridge.legal_actions_for("military", "", true, false, false, false, false, false, false, {}) assert_true(actions.size() >= 2, "military unit with movement gets multiple actions") var kinds: Array[String] = [] for d: Dictionary in actions: @@ -140,7 +140,7 @@ func test_gd_unit_actions_bridge_founder_gets_found_city() -> void: pass_test("GdUnitActions not loaded in headless — skipping bridge test") return var bridge: RefCounted = ClassDB.instantiate("GdUnitActions") as RefCounted - var actions: Array[Dictionary] = bridge.legal_actions_for("civilian", "founder", true, false, false, false, false, false, false) + var actions: Array[Dictionary] = bridge.legal_actions_for("civilian", "founder", true, false, false, false, false, false, false, {}) var kinds: Array[String] = [] for d: Dictionary in actions: kinds.append(d.get("kind", "")) @@ -152,7 +152,7 @@ func test_gd_unit_actions_bridge_fortified_cannot_fortify_again() -> void: pass_test("GdUnitActions not loaded in headless — skipping bridge test") return var bridge: RefCounted = ClassDB.instantiate("GdUnitActions") as RefCounted - var actions: Array[Dictionary] = bridge.legal_actions_for("military", "", false, true, false, false, false, false, false) + var actions: Array[Dictionary] = bridge.legal_actions_for("military", "", false, true, false, false, false, false, false, {}) for d: Dictionary in actions: if d.get("kind", "") == "fortify": assert_false(d.get("enabled", true), "fortify disabled when already fortified") @@ -164,7 +164,7 @@ func test_gd_unit_actions_bridge_sentrying_unit_shows_unsentry() -> void: return var bridge: RefCounted = ClassDB.instantiate("GdUnitActions") as RefCounted # is_sentrying = true - var actions: Array[Dictionary] = bridge.legal_actions_for("melee", "", true, false, true, false, false, false, false) + var actions: Array[Dictionary] = bridge.legal_actions_for("melee", "", true, false, true, false, false, false, false, {}) var by_kind: Dictionary = {} for d: Dictionary in actions: by_kind[d.get("kind", "")] = d