From d07c784ae5f2b9763896267e6105f71d7242e440 Mon Sep 17 00:00:00 2001 From: Chris Beck Date: Wed, 19 Feb 2014 10:30:40 -0500 Subject: [PATCH] carryover WML is applied at start of scenario by playcampaign.cpp --- src/playcampaign.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/playcampaign.cpp b/src/playcampaign.cpp index 19ef856c97ee..f833d1d8dbb8 100644 --- a/src/playcampaign.cpp +++ b/src/playcampaign.cpp @@ -69,6 +69,28 @@ static void team_init(config& level, game_state& gamestate){ } } +static void do_carryover_WML(config & level, game_state& gamestate){ + + if(gamestate.snapshot.child_or_empty("variables")["turn_number"].to_int(-1)<1){ + + carryover_info sides(gamestate.carryover_sides_start); + + end_level_data end_level_ = sides.get_end_level(); + + if(!end_level_.next_scenario_settings.empty()) { + level.merge_with(end_level_.next_scenario_settings); + } + } +} + +static void clear_carryover_WML (game_state & gamestate) { + + if (gamestate.carryover_sides.has_child("end_level_data")) { + config & eld = gamestate.carryover_sides.child("end_level_data"); + eld.clear_children("next_scenario_settings"); + } +} + static void store_carryover(game_state& gamestate, playsingle_controller& playcontroller, display& disp, const end_level_data& end_level){ bool has_next_scenario = !resources::gamedata->next_scenario().empty() && resources::gamedata->next_scenario() != "null"; @@ -234,7 +256,9 @@ static LEVEL_RESULT playsingle_scenario(const config& game_config, int num_turns = (*level)["turns"].to_int(-1); config init_level = *level; + do_carryover_WML(init_level, state_of_game); team_init(init_level, state_of_game); + clear_carryover_WML(state_of_game); LOG_NG << "creating objects... " << (SDL_GetTicks() - ticks) << "\n"; playsingle_controller playcontroller(init_level, state_of_game, ticks, num_turns, game_config, disp.video(), skip_replay); @@ -281,7 +305,9 @@ static LEVEL_RESULT playmp_scenario(const config& game_config, int num_turns = (*level)["turns"].to_int(-1); config init_level = *level; + do_carryover_WML(init_level, state_of_game); team_init(init_level, state_of_game); + clear_carryover_WML(state_of_game); playmp_controller playcontroller(init_level, state_of_game, ticks, num_turns, game_config, disp.video(), skip_replay, io_type == IO_SERVER);