diff --git a/src/game/engine/src/autoloads/turn_manager.gd b/src/game/engine/src/autoloads/turn_manager.gd index 8b70fc5f..3b1a926d 100644 --- a/src/game/engine/src/autoloads/turn_manager.gd +++ b/src/game/engine/src/autoloads/turn_manager.gd @@ -217,13 +217,19 @@ func next_player() -> void: # RUST_FAUNA_ENCOUNTERS env flag is set (off by default). proc._process_rust_fauna_encounters() proc._process_wild_creatures() - # Diplomacy tick: decay timed modifiers and agreements once per full turn. - (diplomacy as DiplomacyScript).process_turn() - # Protection building effects: write mitigation fields onto city tiles - # BEFORE climate runs so aerosol_mitigation is active. + # DISABLED: Diplomacy.process_turn() — empty stub module. + # See turn_processor.gd top-of-file out-of-scope list. Revive once + # the diplomacy module is rebuilt. + # (diplomacy as DiplomacyScript).process_turn() + # DISABLED: EconomyScript.apply_protection_effects — empty stub + # module has no such method; the call aborts next_player and kills + # the arena turn loop. See turn_processor.gd top-of-file out-of-scope + # list. Revive once the economy module is rebuilt. var game_map_for_climate: RefCounted = GameState.get_game_map() - if game_map_for_climate != null: - EconomyScript.apply_protection_effects(game_map_for_climate, GameState.players) + # if game_map_for_climate != null: + # EconomyScript.apply_protection_effects( + # game_map_for_climate, GameState.players + # ) # Climate processing: weather injects deltas, then physics propagates them. # Must run once per full game turn after all players have moved. if game_map_for_climate != null: diff --git a/src/game/engine/src/modules/management/turn_processor.gd b/src/game/engine/src/modules/management/turn_processor.gd index 860af872..70da62c6 100644 --- a/src/game/engine/src/modules/management/turn_processor.gd +++ b/src/game/engine/src/modules/management/turn_processor.gd @@ -5,6 +5,9 @@ extends RefCounted ## healing, economy). Still known-broken and out of scope: _process_culture, ## _process_golden_age, _process_loot_decay, _process_spell_system, ## _process_government — all blocked on empty module stubs. +## Calls disabled in turn_manager.gd::next_player (Diplomacy.process_turn) +## and turn_processor.gd::_process_* until these modules are rebuilt. +## Grep for `DISABLED:` to find every guarded call site. const PlayerScript: GDScript = preload("res://engine/src/entities/player.gd") const UnitScript: GDScript = preload("res://engine/src/entities/unit.gd") @@ -293,18 +296,24 @@ func _process_economy(player: RefCounted, game_map: RefCounted) -> void: # Play player.gold += income -func _process_culture(player: RefCounted, game_map: RefCounted) -> void: # Player, GameMap - ## Delegate per-city culture accumulation and border expansion to Culture system, - ## then accumulate toward global social policy pool. - player.culture_per_turn = 0 - for city: Variant in player.cities: - if city is CityScript: - CultureScript.process_turn(city, game_map, player) - CultureScript.process_global_culture(player) +func _process_culture(_player: RefCounted, _game_map: RefCounted) -> void: # Player, GameMap + ## DISABLED: CultureScript is an empty stub; both `process_turn` and + ## `process_global_culture` raise nonexistent-function errors. See the + ## top-of-file out-of-scope list. Revive once the culture module is rebuilt. + ## Original body: + ## player.culture_per_turn = 0 + ## for city in player.cities: + ## if city is CityScript: + ## CultureScript.process_turn(city, game_map, player) + ## CultureScript.process_global_culture(player) + pass -func _process_golden_age(player: RefCounted, game_map: RefCounted) -> void: # Player, GameMap - HappinessScript.process_turn(player, game_map) +func _process_golden_age(_player: RefCounted, _game_map: RefCounted) -> void: # Player, GameMap + ## DISABLED: HappinessScript is an empty stub with no `process_turn`. + ## See top-of-file out-of-scope list. Revive once happiness is rebuilt. + ## Original body: HappinessScript.process_turn(player, game_map) + pass func _process_wild_creatures() -> void: @@ -326,45 +335,13 @@ func _process_rust_fauna_encounters() -> void: RustFaunaIntegrationScript.run_all_players() -func _process_spell_system(player: RefCounted) -> void: # Player - ## Tick overworld casting queue and enchantment upkeep for this player. - var sys: SpellSystemScript = spell_system as SpellSystemScript - if sys == null: - return - # Only tick overworld cast for the current player - if sys.overworld_queue.has(player.index): - sys.tick_overworld_casts() - # Tick enchantments once per full game turn (after all players processed) - # We tick here per-player to deduct their upkeep - sys.tick_enchantments() - _apply_dead_zone_enchantment_decay(sys, player) - # Spawn pending summons - if not sys.pending_summons.is_empty(): - var remaining: Array[Dictionary] = [] - for summon: Dictionary in sys.pending_summons: - if summon.get("player_index", -1) == player.index: - var unit: RefCounted = unit_manager.create_unit( - summon.get("unit_id", ""), - player.index, - summon.get("position", Vector2i.ZERO), - player - ) - if unit != null: - (unit as UnitScript).is_summoned = true - var capital: Variant = null - for city: Variant in player.cities: - var is_cap: bool = false - if city is Dictionary: - is_cap = city.get("is_capital", false) - elif city is Object: - is_cap = bool(city.get("is_capital")) - if is_cap: - capital = city - break - EventBus.city_unit_completed.emit(capital, unit) - else: - remaining.append(summon) - sys.pending_summons.assign(remaining) +func _process_spell_system(_player: RefCounted) -> void: # Player + ## DISABLED: SpellSystem has no `overworld_queue` property on its current + ## stub; the first access aborts the method. Pending-summon spawning also + ## depends on a `unit_manager.create_unit` that does not exist. See the + ## top-of-file out-of-scope list. Revive once SpellSystem is rebuilt and + ## the unit-manager spawn helper ships. + pass func _process_ascension(player: RefCounted) -> void: # Player @@ -398,8 +375,11 @@ func _form_high_archon(player: RefCounted) -> void: EventBus.archon_created.emit(archon, capital) -func _process_government(player: RefCounted) -> void: # Player - GovernmentScript.process_anarchy(player) +func _process_government(_player: RefCounted) -> void: # Player + ## DISABLED: GovernmentScript is an empty stub with no `process_anarchy`. + ## See top-of-file out-of-scope list. Revive once government is rebuilt. + ## Original body: GovernmentScript.process_anarchy(player) + pass func _process_climate(game_map: RefCounted) -> void: # GameMap @@ -418,56 +398,12 @@ func _process_climate(game_map: RefCounted) -> void: # GameMap ) -func _apply_dead_zone_enchantment_decay(sys: RefCounted, player: RefCounted) -> void: - ## Dead-zone enchantments owned by `player` get an extra decay tick. - var game_map: RefCounted = GameState.get_game_map() - if game_map == null: - return - var params: Dictionary = DataLoader.get_ley_line_params() - var dead_threshold: float = params.get("dead_zone", {}).get("threshold", 0.1) - var decay_mult: float = params.get("dead_zone", {}).get("enchantment_decay_multiplier", 2.0) - if decay_mult <= 1.0: - return - var spell_sys: SpellSystemScript = sys as SpellSystemScript - var rem: Array[int] = [] - for i: int in range(spell_sys.unit_enchantments.size()): - var enc: Dictionary = spell_sys.unit_enchantments[i] - if enc.get("caster_player", -1) != player.index: - continue - var dur: int = enc.get("turns_remaining", -1) - if dur < 0: - continue - # Find the target unit's position - var unit_id: String = enc.get("unit_id", "") - var target_unit: Variant = null - for p: Variant in GameState.players: - for u: Variant in p.units: - if u is UnitScript and (u as UnitScript).id == unit_id: - target_unit = u - break - if target_unit != null: - break - if target_unit == null: - continue - var tile: Variant = game_map.get_tile((target_unit as UnitScript).position) - if tile == null: - continue - var density: float = tile.mana_density if "mana_density" in tile else 0.0 - if density >= dead_threshold: - continue - # Extra decay tick (the normal tick already fired above) - enc["turns_remaining"] = dur - 1 - if enc["turns_remaining"] <= 0: - rem.append(i) - EventBus.enchantment_removed.emit(target_unit, enc.get("spell_id", "")) - for i: int in range(rem.size() - 1, -1, -1): - spell_sys.unit_enchantments.remove_at(rem[i]) - - func _process_loot_decay() -> void: - var game_map: RefCounted = GameState.get_game_map() - if game_map != null: - ItemSystemScript.process_loot_decay(game_map) + ## DISABLED: ItemSystemScript.process_loot_decay expects a different + ## GameMap type than the live RefCounted GameMap wrapper, so the call + ## raises a type-mismatch error. See top-of-file out-of-scope list. + ## Revive once ItemSystem is updated to the current GameMap signature. + pass func _process_improvements(player: RefCounted) -> void: # Player