+void
+Savegame::set_levelset_state(const std::string& basedir,
+ const std::string& level_filename,
+ bool solved)
+{
+ LevelsetState state = get_levelset_state(basedir);
+
+ HSQUIRRELVM vm = scripting::global_vm;
+ int oldtop = sq_gettop(vm);
+
+ try
+ {
+ sq_pushroottable(vm);
+ get_table_entry(vm, "state");
+ get_or_create_table_entry(vm, "levelsets");
+ get_or_create_table_entry(vm, basedir);
+ get_or_create_table_entry(vm, "levels");
+ get_or_create_table_entry(vm, level_filename);
+
+ bool old_solved = false;
+ scripting::get_bool(vm, "solved", old_solved);
+ scripting::store_bool(vm, "solved", solved || old_solved);
+ }
+ catch(const std::exception& err)
+ {
+ log_warning << err.what() << std::endl;
+ }
+
+ sq_settop(vm, oldtop);
+}
+