The Battle for Wesnoth  1.15.1+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 
23 
25 {
27  {
28  /// There is no scenario stating pos data (start-of-scenario).
30  /// We have a [snapshot] (mid-game-savefile).
32  /// We have a [scenario] (start-of-scenario) savefile.
34  /// We failed to get a starting pos in expand_scenario.
36  };
37 public:
38  saved_game();
39  saved_game(const saved_game& state);
40  explicit saved_game(config cfg);
42 
43  saved_game& operator=(const saved_game& other) = delete;
45  void swap(saved_game& other);
46  /// destroys the passed config.
47  void set_data(config& cfg);
48  void clear();
49  /// writes the config information into a stream (file)
50  void write_config(config_writer& out) const;
51  void write_general_info(config_writer& out) const;
52  void write_carryover(config_writer& out) const;
53  void write_starting_point(config_writer& out) const;
54  config to_config() const;
57 
58  /** Multiplayer parameters for this game */
60  const mp_game_settings& mp_settings() const { return mp_settings_; }
61 
62  void set_carryover_sides_start(config carryover_sides_start);
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  void expand_scenario();
67  /// merges [carryover_sides_start] into [scenario] and saves the rest into [carryover_sides]
68  /// Removes [carryover_sides_start] afterwards
69  void expand_carryover();
70  /// adds [event]s from [era] and [modification] into this scenario
71  /// does NOT expand [option]s because variables are persitent anyway to we don't need it
72  /// should be called after expand_scenario() but before expand_carryover()
73  void expand_mp_events();
74  /// helper for expand_mp_events();
75  void load_mod(const std::string& type, const std::string& id, size_t pos);
76  /// adds values of [option]s into [carryover_sides_start][variables] so that they are applied in the next level.
77  /// Note that since [variabels] are persistent we only use this once at the beginning
78  /// of a campaign but calling it multiple times is no harm eigher
79  void expand_mp_options();
80  /// takes care of generate_map=, generate_scenario=, map= attributes
81  /// This should be called before expanding carryover or mp_events because this might completely replace starting_point_.
83  /// copies attributes & tags from the 'outer' [scenario] to the scenario that is generated by scenario_generation=
84  static void post_scenario_generation(const config& old_scenario, config& generated_scenario);
85  /// Add addon_id information if needed.
87  bool valid() const;
88  /// @return the snapshot in the savefile (get_starting_point)
89  config& set_snapshot(config snapshot);
90  void set_scenario(config scenario);
91  void remove_snapshot();
92 
93  bool is_mid_game_save() const
94  {
96  }
97  /// converts a normal savegame form the end of a scenaio to a start-of-scenario savefile for the next scenaio,
98  /// The saved_game must contain a [snapshot] made during the linger mode of the last scenaio.
99  void convert_to_start_save();
100  /// sets the random seed if that didn't already happen.
101  void set_random_seed();
102  /// @return the starting pos for replays. Usually this is [replay_start] but it can also be a [scenario] if no [replay_start] is present
104  /// @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).
105  std::string get_scenario_id();
106  /// @return the config from which the game will be started. (this is [scenario] or [snapshot] in the savefile)
108  const config& get_starting_point() const { return starting_point_; }
110  const config& replay_start() const { return replay_start_; }
111 
112  bool not_corrupt() const;
113  /** sets classification().label to the correct value. */
114  void update_label();
115 
116  void cancel_orders();
117  /* removes network_ai and network controller types*/
118  void unify_controllers();
119  /** does some post loading stuff must be used before passing the data to connect_engine */
120  void set_defaults();
122  const replay_recorder_base& get_replay() const { return replay_data_; }
123 
124  /// Whether to play [story] tags
125  bool skip_story() const { return skip_story_; }
127 
128 private:
130  /**
131  depends on has_carryover_expanded_:
132  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).
133  if false: The carryover information for all sides from the previous scenario.
134  */
136  /** snapshot made before the start event. To be used as a starting pos for replays */
138  /** some general information of the game that doesn't change during the game */
141 
143  /**
144  The starting pos where the (non replay) game will be started from.
145  This can eigher be a [scenario] for a fresh game or a [snapshot] if this is a reloaded game
146  */
148 
150 
152 };
153 
154 /** Implement non-member swap function for std::swap (calls @ref saved_game::swap). */
155 void swap(saved_game& lhs, saved_game& rhs);
void check_require_scenario()
Add addon_id information if needed.
Definition: saved_game.cpp:289
config replay_start_
snapshot made before the start event.
Definition: saved_game.hpp:137
void write_general_info(config_writer &out) const
Definition: saved_game.cpp:210
bool is_mid_game_save() const
Definition: saved_game.hpp:93
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:262
config & replay_start()
Definition: saved_game.hpp:109
void set_scenario(config scenario)
Definition: saved_game.cpp:527
void write_starting_point(config_writer &out) const
Definition: saved_game.cpp:195
void set_defaults()
does some post loading stuff must be used before passing the data to connect_engine ...
Definition: saved_game.cpp:216
void write_config(config_writer &out) const
writes the config information into a stream (file)
Definition: saved_game.cpp:179
replay_recorder_base & get_replay()
Definition: saved_game.hpp:121
void write_carryover(config_writer &out) const
Definition: saved_game.cpp:204
void unify_controllers()
Definition: saved_game.cpp:661
void expand_random_scenario()
takes care of generate_map=, generate_scenario=, map= attributes This should be called before expandi...
Definition: saved_game.cpp:434
bool valid() const
Definition: saved_game.cpp:514
const config & replay_start() const
Definition: saved_game.hpp:110
void clear()
Definition: saved_game.cpp:751
config starting_point_
The starting pos where the (non replay) game will be started from.
Definition: saved_game.hpp:147
config & set_snapshot(config snapshot)
Definition: saved_game.cpp:519
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:471
Definitions for the interface to Wesnoth Markup Language (WML).
bool skip_story() const
Whether to play [story] tags.
Definition: saved_game.hpp:125
const game_classification & classification() const
Definition: saved_game.hpp:56
void set_random_seed()
sets the random seed if that didn't already happen.
Definition: saved_game.cpp:167
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:403
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:630
config carryover_
depends on has_carryover_expanded_: if true: The carryover information for all sides from the previou...
Definition: saved_game.hpp:135
config & get_starting_point()
Definition: saved_game.cpp:543
bool skip_story_
Definition: saved_game.hpp:151
void set_data(config &cfg)
destroys the passed config.
Definition: saved_game.cpp:697
bool not_corrupt() const
Definition: saved_game.cpp:625
const replay_recorder_base & get_replay() const
Definition: saved_game.hpp:122
game_classification classification_
some general information of the game that doesn't change during the game
Definition: saved_game.hpp:139
const config & get_starting_point() const
Definition: saved_game.hpp:108
const config & get_replay_starting_point()
Definition: saved_game.cpp:548
We failed to get a starting pos in expand_scenario.
Definition: saved_game.hpp:35
mp_game_settings mp_settings_
Definition: saved_game.hpp:140
std::string get_scenario_id()
Definition: saved_game.cpp:609
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:363
void expand_carryover()
merges [carryover_sides_start] into [scenario] and saves the rest into [carryover_sides] Removes [car...
Definition: saved_game.cpp:498
void load_mod(const std::string &type, const std::string &id, size_t pos)
helper for expand_mp_events();
Definition: saved_game.cpp:310
void swap(saved_game &other)
Definition: saved_game.cpp:682
void cancel_orders()
Definition: saved_game.cpp:644
replay_recorder_base replay_data_
Definition: saved_game.hpp:149
game_classification & classification()
Definition: saved_game.hpp:55
void set_carryover_sides_start(config carryover_sides_start)
Definition: saved_game.cpp:161
saved_game & operator=(const saved_game &other)=delete
void set_skip_story(bool skip_story)
Definition: saved_game.hpp:126
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:567
config to_config() const
Definition: saved_game.cpp:586
We have a [snapshot] (mid-game-savefile).
Definition: saved_game.hpp:31
const mp_game_settings & mp_settings() const
Definition: saved_game.hpp:60
void remove_snapshot()
Definition: saved_game.cpp:537
STARTING_POINT_TYPE starting_point_type_
Definition: saved_game.hpp:142
There is no scenario stating pos data (start-of-scenario).
Definition: saved_game.hpp:29
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:92
bool has_carryover_expanded_
Definition: saved_game.hpp:129
mp_game_settings & mp_settings()
Multiplayer parameters for this game.
Definition: saved_game.hpp:59
We have a [scenario] (start-of-scenario) savefile.
Definition: saved_game.hpp:33