From fdcf67801cc37b611f897a9ba6edfeae17606c0d Mon Sep 17 00:00:00 2001 From: Natalie Date: Mon, 8 Jun 2026 20:29:12 -0700 Subject: [PATCH] =?UTF-8?q?fix(@projects/@magic-civilization):=20?= =?UTF-8?q?=F0=9F=90=9B=20adjust=20science=20yield=20calculation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/game/engine/src/modules/ai/ai_turn_bridge.gd | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/game/engine/src/modules/ai/ai_turn_bridge.gd b/src/game/engine/src/modules/ai/ai_turn_bridge.gd index 1bf2de8e..e209dc5a 100644 --- a/src/game/engine/src/modules/ai/ai_turn_bridge.gd +++ b/src/game/engine/src/modules/ai/ai_turn_bridge.gd @@ -512,6 +512,11 @@ static func _refresh_learned_player_snapshot(gd_state: RefCounted) -> void: # matching the `cy["food"]`/`cy["production"]` semantics. var game_map: RefCounted = GameState.get_game_map() var city_dicts: Array[Dictionary] = [] + # p1-29k Inc-2.5b — accumulate real per-turn science from the SAME + # `cy["science"]` the autoplay economy uses (`_calculate_science_income` + # = sum of city `get_yields()["science"]`; `PlayerScript.science_per_turn` + # is 0 in the live world — science is computed per-turn, not cached). + var science_total: int = 0 for c: RefCounted in p.cities: if c == null: continue @@ -527,6 +532,7 @@ static func _refresh_learned_player_snapshot(gd_state: RefCounted) -> void: if not cy.is_empty(): food_yield = int(round(float(cy.get("food", 2)))) prod_yield = int(round(float(cy.get("production", 2)))) + science_total += int(round(float(cy.get("science", 0)))) city_dicts.append({ "col": c_off.x, "row": c_off.y, @@ -551,9 +557,10 @@ static func _refresh_learned_player_snapshot(gd_state: RefCounted) -> void: # divergence after yields + tech. GDScript `science_per_turn` maps to # the Rust `science_yield` obs input. if gd_state.has_method("set_player_economy_from_dict"): + var base_sci: int = int(p.get("science_per_turn")) if p.get("science_per_turn") != null else 0 gd_state.set_player_economy_from_dict(pi, { "gold": int(p.get("gold")) if p.get("gold") != null else 0, - "science_yield": int(p.get("science_per_turn")) if p.get("science_per_turn") != null else 0, + "science_yield": base_sci + science_total, "culture_total": int(p.get("culture_total")) if p.get("culture_total") != null else 0, })