diff --git a/src/simulator/crates/mc-turn/src/game_state.rs b/src/simulator/crates/mc-turn/src/game_state.rs index 4862dc44..6c01567a 100644 --- a/src/simulator/crates/mc-turn/src/game_state.rs +++ b/src/simulator/crates/mc-turn/src/game_state.rs @@ -715,6 +715,15 @@ pub struct PlayerState { /// keep their current behaviour without any changes. #[serde(default)] pub building_priors: mc_ai::tactical::state::BuildingPriors, + /// Stage 3 (mod system) — controller registry id used by + /// `mc_player_api::dispatch::drive_ai_slot` to look up which + /// `AiController` impl decides this slot's turn. Defaults to + /// `"scripted:default"` (the in-box MCTS+heuristic). Mod-supplied + /// controllers register their own id (`"learned:duel-v1b"`, + /// `"community:foo"`, ...) and the game-setup UI picks per slot. + /// Empty = fall-through to default at dispatch time. + #[serde(default)] + pub controller_id: String, /// Accumulated expansion capacity (earned from the `expansion` axis). pub expansion_points: u32, /// Per-city list of constructed building IDs. Aligned with `cities`.