The Battle for Wesnoth  1.15.9+dev
saved_game.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2018 by the Battle for Wesnoth Project https://www.wesnoth.org/
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY.
10 
11  See the COPYING file for more details.
12 */
13 
14 #pragma once
15 
16 #include "config.hpp"
17 #include "game_classification.hpp"
18 #include "mp_game_settings.hpp"
19 #include "replay_recorder_base.hpp"
20 
21 class config_writer;
22 
24 {
25  enum class starting_point {
26  /** There is no scenario stating pos data (start-of-scenario). */
27  NONE,
28  /** We have a [snapshot] (mid-game-savefile). */
29  SNAPSHOT,
30  /** We have a [scenario] (start-of-scenario) savefile. */
31  SCENARIO,
32  /** We failed to get a starting pos in expand_scenario. */
33  INVALID
34  };
35 
36 public:
37  saved_game();
38  saved_game(const saved_game& state);
39  explicit saved_game(config cfg);
41 
42  saved_game& operator=(const saved_game& other) = delete;
44  void swap(saved_game& other);
45  /** destroys the passed config. */
46  void set_data(config& cfg);
47  void clear();
48  /** writes the config information into a stream (file) */
49  void write_config(config_writer& out) const;
50  void write_general_info(config_writer& out) const;
51  void write_carryover(config_writer& out) const;
52  void write_starting_point(config_writer& out) const;
53  config to_config() const;
56 
57  /** Multiplayer parameters for this game */
59  const mp_game_settings& mp_settings() const { return mp_settings_; }
60 
61  void set_carryover_sides_start(config carryover_sides_start);
62 
63  /**
64  * copies the content of a [scenario] with the correct id attribute from the game config into this object.
65  * reloads the game config from disk if necessary.
66  */
67  void expand_scenario();
68  /**
69  * merges [carryover_sides_start] into [scenario] and saves the rest into [carryover_sides]
70  * Removes [carryover_sides_start] afterwards
71  */
72  void expand_carryover();
73  /**
74  * adds [event]s from [era] and [modification] into this scenario
75  * does NOT expand [option]s because variables are persitent anyway to we don't need it
76  * should be called after expand_scenario() but before expand_carryover()
77  */
78  void expand_mp_events();
79  /** helper for expand_mp_events(); */
80  void load_non_scenario(const std::string& type, const std::string& id, size_t pos);
81  /**
82  * adds values of [option]s into [carryover_sides_start][variables] so that they are applied in the next level.
83  * Note that since [variabels] are persistent we only use this once at the beginning
84  * of a campaign but calling it multiple times is no harm eigher
85  */
86  void expand_mp_options();
87  /**
88  * takes care of generate_map=, generate_scenario=, map= attributes
89  * This should be called before expanding carryover or mp_events because this might completely replace starting_point_.
90  */
92  /** copies attributes & tags from the 'outer' [scenario] to the scenario that is generated by scenario_generation= */
93  static void post_scenario_generation(const config& old_scenario, config& generated_scenario);
94  /** reads scenario["map_file"] */
95  static void expand_map_file(config& scenario);
96  /** Add addon_id information if needed. */
98  bool valid() const;
99  /** @return the snapshot in the savefile (get_starting_point) */
100  config& set_snapshot(config snapshot);
101  void set_scenario(config scenario);
102  void remove_snapshot();
103 
104  bool is_mid_game_save() const
105  {
107  }
108  /**
109  * converts a normal savegame form the end of a scenaio to a start-of-scenario savefile for the next scenaio,
110  * The saved_game must contain a [snapshot] made during the linger mode of the last scenaio.
111  */
112  void convert_to_start_save();
113  /** sets the random seed if that didn't already happen. */
114  void set_random_seed();
115  /** @return the starting pos for replays. Usually this is [replay_start] but it can also be a [scenario] if no [replay_start] is present */
117  /** @return the id of the currently played scenario or the id of the next scenario if this is a between-scenaios-save (also called start-of-scenario-save). */
118  std::string get_scenario_id() const;
119  /** @return the config from which the game will be started. (this is [scenario] or [snapshot] in the savefile) */
121  const config& get_starting_point() const { return starting_point_; }
123  const config& replay_start() const { return replay_start_; }
124 
125  bool not_corrupt() const;
126  /** sets classification().label to the correct value. */
127  void update_label();
128 
129  void cancel_orders();
130  /* removes network_ai and network controller types*/
131  void unify_controllers();
132  /** does some post loading stuff must be used before passing the data to connect_engine */
133  void set_defaults();
135  const replay_recorder_base& get_replay() const { return replay_data_; }
136 
137  /** Whether to play [story] tags */
138  bool skip_story() const { return skip_story_; }
140 
141 private:
143  /**
144  depends on has_carryover_expanded_:
145  if true: The carryover information for all sides from the previous scenario that aren't used in this scenario (to be carried over to the next scenario).
146  if false: The carryover information for all sides from the previous scenario.
147  */
149  /** snapshot made before the start event. To be used as a starting pos for replays */
151  /** some general information of the game that doesn't change during the game */
154 
156  /**
157  The starting pos where the (non replay) game will be started from.
158  This can eigher be a [scenario] for a fresh game or a [snapshot] if this is a reloaded game
159  */
161 
163 
165 };
166 
167 /** Implement non-member swap function for std::swap (calls @ref saved_game::swap). */
168 void swap(saved_game& lhs, saved_game& rhs);
void check_require_scenario()
Add addon_id information if needed.
Definition: saved_game.cpp:295
config replay_start_
snapshot made before the start event.
Definition: saved_game.hpp:150
void write_general_info(config_writer &out) const
Definition: saved_game.cpp:209
bool is_mid_game_save() const
Definition: saved_game.hpp:104
void expand_scenario()
copies the content of a [scenario] with the correct id attribute from the game config into this objec...
Definition: saved_game.cpp:267
config & replay_start()
Definition: saved_game.hpp:122
void set_scenario(config scenario)
Definition: saved_game.cpp:565
void write_starting_point(config_writer &out) const
Definition: saved_game.cpp:194
void set_defaults()
does some post loading stuff must be used before passing the data to connect_engine ...
Definition: saved_game.cpp:215
void write_config(config_writer &out) const
writes the config information into a stream (file)
Definition: saved_game.cpp:178
replay_recorder_base & get_replay()
Definition: saved_game.hpp:134
void write_carryover(config_writer &out) const
Definition: saved_game.cpp:203
void unify_controllers()
Definition: saved_game.cpp:701
void expand_random_scenario()
takes care of generate_map=, generate_scenario=, map= attributes This should be called before expandi...
Definition: saved_game.cpp:475
bool valid() const
Definition: saved_game.cpp:552
const config & replay_start() const
Definition: saved_game.hpp:123
void clear()
Definition: saved_game.cpp:791
config starting_point_
The starting pos where the (non replay) game will be started from.
Definition: saved_game.hpp:160
config & set_snapshot(config snapshot)
Definition: saved_game.cpp:557
static void post_scenario_generation(const config &old_scenario, config &generated_scenario)
copies attributes & tags from the 'outer' [scenario] to the scenario that is generated by scenario_genera...
Definition: saved_game.cpp:509
Definitions for the interface to Wesnoth Markup Language (WML).
bool skip_story() const
Whether to play [story] tags.
Definition: saved_game.hpp:138
std::string get_scenario_id() const
Definition: saved_game.cpp:647
We failed to get a starting pos in expand_scenario.
const game_classification & classification() const
Definition: saved_game.hpp:55
static void expand_map_file(config &scenario)
reads scenario["map_file"]
Definition: saved_game.cpp:459
void set_random_seed()
sets the random seed if that didn't already happen.
Definition: saved_game.cpp:166
void expand_mp_options()
adds values of [option]s into [carryover_sides_start][variables] so that they are applied in the next...
Definition: saved_game.cpp:411
Class for writing a config out to a file in pieces.
void update_label()
sets classification().label to the correct value.
Definition: saved_game.cpp:670
config carryover_
depends on has_carryover_expanded_: if true: The carryover information for all sides from the previou...
Definition: saved_game.hpp:148
config & get_starting_point()
Definition: saved_game.cpp:581
bool skip_story_
Definition: saved_game.hpp:164
void load_non_scenario(const std::string &type, const std::string &id, size_t pos)
helper for expand_mp_events();
Definition: saved_game.cpp:313
starting_point starting_point_type_
Definition: saved_game.hpp:155
void set_data(config &cfg)
destroys the passed config.
Definition: saved_game.cpp:737
bool not_corrupt() const
Definition: saved_game.cpp:665
const replay_recorder_base & get_replay() const
Definition: saved_game.hpp:135
game_classification classification_
some general information of the game that doesn't change during the game
Definition: saved_game.hpp:152
const config & get_starting_point() const
Definition: saved_game.hpp:121
const config & get_replay_starting_point()
Definition: saved_game.cpp:586
There is no scenario stating pos data (start-of-scenario).
We have a [scenario] (start-of-scenario) savefile.
mp_game_settings mp_settings_
Definition: saved_game.hpp:153
void expand_mp_events()
adds [event]s from [era] and [modification] into this scenario does NOT expand [option]s because vari...
Definition: saved_game.cpp:370
void expand_carryover()
merges [carryover_sides_start] into [scenario] and saves the rest into [carryover_sides] Removes [car...
Definition: saved_game.cpp:536
void swap(saved_game &other)
Definition: saved_game.cpp:722
void cancel_orders()
Definition: saved_game.cpp:684
replay_recorder_base replay_data_
Definition: saved_game.hpp:162
game_classification & classification()
Definition: saved_game.hpp:54
void set_carryover_sides_start(config carryover_sides_start)
Definition: saved_game.cpp:160
saved_game & operator=(const saved_game &other)=delete
void set_skip_story(bool skip_story)
Definition: saved_game.hpp:139
void convert_to_start_save()
converts a normal savegame form the end of a scenaio to a start-of-scenario savefile for the next sce...
Definition: saved_game.cpp:605
config to_config() const
Definition: saved_game.cpp:624
We have a [snapshot] (mid-game-savefile).
const mp_game_settings & mp_settings() const
Definition: saved_game.hpp:59
void remove_snapshot()
Definition: saved_game.cpp:575
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:60
bool has_carryover_expanded_
Definition: saved_game.hpp:142
mp_game_settings & mp_settings()
Multiplayer parameters for this game.
Definition: saved_game.hpp:58