- const lisp::Lisp* savegame = root->get_lisp("supertux-savegame");
- if(!savegame)
- throw std::runtime_error("File is not a supertux-savegame file.");
-
- /* Get the Map filename and then load it before setting level settings */
- std::string cur_map_filename = map_filename;
- savegame->get("map", map_filename);
- load_map();
-
- savegame->get("intro-displayed", intro_displayed);
- savegame->get("lives", player_status->lives);
- savegame->get("coins", player_status->coins);
- savegame->get("max-score-multiplier", player_status->max_score_multiplier);
- if (player_status->lives < 0)
+ if (PHYSFS_exists(filename.c_str())) // savegame exists
+ {
+ try {
+ lisp::Parser parser;
+
+ std::auto_ptr<lisp::Lisp> root (parser.parse(filename));
+
+ const lisp::Lisp* savegame = root->get_lisp("supertux-savegame");
+ if(!savegame)
+ throw std::runtime_error("File is not a supertux-savegame file.");
+
+ /* Get the Map filename and then load it before setting level settings */
+ std::string cur_map_filename = map_filename;
+ savegame->get("map", map_filename);
+ load_map();
+
+ savegame->get("intro-displayed", intro_displayed);
+ savegame->get("lives", player_status->lives);
+ savegame->get("coins", player_status->coins);
+ savegame->get("max-score-multiplier", player_status->max_score_multiplier);
+ if (player_status->lives < 0)