+ reader.read_int("lives", &player_status.lives);
+ reader.read_int("score", &player_status.score);
+ reader.read_int("distros", &player_status.distros);
+
+ lisp_object_t* tux_cur = 0;
+ if (reader.read_lisp("tux", &tux_cur))
+ {
+ Point p;
+ LispReader tux_reader(tux_cur);
+ tux_reader.read_int("x", &p.x);
+ tux_reader.read_int("y", &p.y);
+
+ tux->set_tile_pos(p);
+ }
+
+ lisp_object_t* level_cur = 0;
+ if (reader.read_lisp("levels", &level_cur))
+ {
+ while(level_cur)
+ {
+ lisp_object_t* sym = lisp_car(lisp_car(level_cur));
+ lisp_object_t* data = lisp_cdr(lisp_car(level_cur));
+
+ if (strcmp(lisp_symbol(sym), "level") == 0)
+ {
+ std::string name;
+ bool solved = false;
+ std::string back_str ="";
+ Direction back = NONE;
+
+ LispReader level_reader(data);
+ level_reader.read_string("name", &name);
+ level_reader.read_bool("solved", &solved);
+ if (level_reader.read_string("back", &back_str))
+ back = string_to_direction(back_str);
+
+ std::cout << "Name: " << name << " " << solved << std::endl;
+
+ for(Levels::iterator i = levels.begin(); i != levels.end(); ++i)
+ {
+ if (name == i->name)
+ i->solved = solved;
+ }
+ }
+
+ level_cur = lisp_cdr(level_cur);
+ }
+ }
+ }