+ special_tile.north = true;
+ special_tile.east = true;
+ special_tile.south = true;
+ special_tile.west = true;
+
+ reader.read_int("x", special_tile.x);
+ reader.read_int("y", special_tile.y);
+ reader.read_string("level", special_tile.level_name, false);
+
+ special_tile.vertical_flip = false;
+ reader.read_bool("vertical-flip", special_tile.vertical_flip);
+
+ special_tile.map_message.erase();
+ reader.read_string("map-message", special_tile.map_message);
+ special_tile.passive_message = false;
+ reader.read_bool("passive-message", special_tile.passive_message);
+
+ special_tile.teleport_dest_x = special_tile.teleport_dest_y = -1;
+ reader.read_int("teleport-to-x", special_tile.teleport_dest_x);
+ reader.read_int("teleport-to-y", special_tile.teleport_dest_y);
+
+ special_tile.invisible = false;
+ reader.read_bool("invisible-tile", special_tile.invisible);
+
+ special_tile.apply_action_north = special_tile.apply_action_south =
+ special_tile.apply_action_east = special_tile.apply_action_west =
+ true;
+ std::string apply_direction;
+ reader.read_string("apply-to-direction", apply_direction);
+ if(!apply_direction.empty())
+ {
+ special_tile.apply_action_north = special_tile.apply_action_south =
+ special_tile.apply_action_east = special_tile.apply_action_west =
+ false;
+ if(apply_direction.find("north") != std::string::npos)
+ special_tile.apply_action_north = true;
+ if(apply_direction.find("south") != std::string::npos)
+ special_tile.apply_action_south = true;
+ if(apply_direction.find("east") != std::string::npos)
+ special_tile.apply_action_east = true;
+ if(apply_direction.find("west") != std::string::npos)
+ special_tile.apply_action_west = true;
+ }
+
+ reader.read_string("extro-filename", special_tile.extro_filename);
+ reader.read_string("next-world", special_tile.next_worldmap);
+ special_tile.quit_worldmap = false;
+ reader.read_bool("exit-game", special_tile.quit_worldmap);
+
+ special_tile.auto_path = true;
+ reader.read_bool("auto-path", special_tile.auto_path);
+
+ special_tiles.push_back(special_tile);
+ }
+
+ /* Kept for backward compability */
+ else if (strcmp(lisp_symbol(lisp_car(element)), "level") == 0)
+ {
+ SpecialTile special_tile;
+ LispReader reader(lisp_cdr(element));
+ special_tile.solved = false;
+
+ special_tile.north = true;
+ special_tile.east = true;
+ special_tile.south = true;
+ special_tile.west = true;
+
+ special_tile.invisible = false;
+
+ special_tile.apply_action_north = special_tile.apply_action_south =
+ special_tile.apply_action_east = special_tile.apply_action_west =
+ true;
+ special_tile.vertical_flip = false;
+ special_tile.teleport_dest_x = special_tile.teleport_dest_y = -1;
+
+ reader.read_string("extro-filename", special_tile.extro_filename);
+ if(!special_tile.extro_filename.empty())
+ special_tile.quit_worldmap = true;
+ reader.read_string("name", special_tile.level_name, true);
+ reader.read_int("x", special_tile.x);
+ reader.read_int("y", special_tile.y);
+
+
+ special_tiles.push_back(special_tile);