summaryrefslogtreecommitdiff
path: root/src/loadsave.cc
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2017-09-07 12:53:57 +0200
committerBardur Arantsson <bardur@scientician.net>2017-09-07 12:53:57 +0200
commit39e1689130e87732cf410aaea7458dfdc399d50e (patch)
tree1dab000e95f28816522ea0997f022ec8ca64ef40 /src/loadsave.cc
parentb4dafbb7604b8840c702455022096e8c17c8726b (diff)
Move special_level[] to Game struct
Refactor into a multi_array<> to make it more robust.
Diffstat (limited to 'src/loadsave.cc')
-rw-r--r--src/loadsave.cc26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/loadsave.cc b/src/loadsave.cc
index 3d45bf0f..3c843a36 100644
--- a/src/loadsave.cc
+++ b/src/loadsave.cc
@@ -454,6 +454,28 @@ static void do_random_spell(random_spell *s_ptr, ls_flag_t flag)
do_std_bool(&s_ptr->untried, flag);
}
+static void do_level_marker(level_marker *marker, ls_flag_t flag)
+{
+ std::string v;
+
+ if (flag == ls_flag_t::SAVE)
+ {
+ v = level_marker_values().stringify(*marker);
+ }
+
+ do_std_string(v, flag);
+
+ if (flag == ls_flag_t::LOAD)
+ {
+ bool valid = level_marker_values().parse(v.c_str(), marker);
+ if (!valid)
+ {
+ note(fmt::format("Bad level marker: {}!", v).c_str());
+ abort();
+ }
+ }
+}
+
/*
* Misc. other data
*/
@@ -496,12 +518,12 @@ static bool_ do_extra(ls_flag_t flag)
{
for (std::size_t j = 0; j < tmp16u; j++)
{
- do_bool(&special_lvl[j][i], flag);
+ do_level_marker(&game->level_markers[j][i], flag);
}
}
}
- do_bool(&generate_special_feeling, flag);
+ do_std_bool(&game->generate_special_feeling, flag);
/* Load the quick start data */
do_quick_start(flag, game->previous_char);