else if (strcmp(lisp_symbol(lisp_car(element)), "properties") == 0)
{
LispReader reader(lisp_cdr(element));
- reader.read_string("name", name);
+ reader.read_string("name", name, true);
reader.read_string("music", music);
}
else if (strcmp(lisp_symbol(lisp_car(element)), "levels") == 0)
level.west = true;
reader.read_string("extro-filename", level.extro_filename);
- reader.read_string("name", level.name);
+ reader.read_string("name", level.name, true);
reader.read_int("x", level.x);
reader.read_int("y", level.y);
level.vertical_flip = false;
if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-level") == 0)
{
LispReader reader(lisp_cdr(root_obj));
- reader.read_string("name", level.title);
+ reader.read_string("name", level.title, true);
}
lisp_free(root_obj);
break;
case GameSession::ES_LEVEL_ABORT:
/* In case the player's abort the level, keep it using the old
- status */
- player_status = old_player_status;
+ status. But the minimum lives and no bonus. */
+ player_status.score = old_player_status.score;
+ player_status.distros = old_player_status.distros;
+ player_status.lives = std::min(old_player_status.lives, player_status.lives);
+ player_status.bonus = player_status.NO_BONUS;
break;
case GameSession::ES_GAME_OVER:
{
bool solved = false;
LispReader level_reader(data);
- level_reader.read_string("name", name);
+ level_reader.read_string("name", name, true);
level_reader.read_bool("solved", solved);
for(Levels::iterator i = levels.begin(); i != levels.end(); ++i)