+Tile::Tile(const TileSet *new_tileset, std::vector<std::string> images, Rect rect, Uint32 attributes, Uint32 data, float animfps)
+ : tileset(new_tileset), attributes(attributes), data(data), anim_fps(animfps)
+{
+ for(std::vector<std::string>::iterator i = images.begin(); i != images.end(); ++i) {
+ imagespecs.push_back(ImageSpec(*i, rect));
+ }
+ correct_attributes();
+}
+
+Tile::~Tile()
+{
+ for(std::vector<Surface*>::iterator i = images.begin(); i != images.end();
+ ++i) {
+ delete *i;
+ }
+}
+
+uint32_t
+Tile::parse(const lisp::Lisp& reader)
+{
+ uint32_t id;
+ if(!reader.get("id", id)) {
+ throw std::runtime_error("Missing tile-id.");
+ }
+
+ bool value = false;
+ if(reader.get("solid", value) && value)
+ attributes |= SOLID;
+ if(reader.get("unisolid", value) && value)
+ attributes |= UNISOLID | SOLID;
+ if(reader.get("brick", value) && value)
+ attributes |= BRICK;
+ if(reader.get("ice", value) && value)
+ attributes |= ICE;
+ if(reader.get("water", value) && value)
+ attributes |= WATER;
+ if(reader.get("hurts", value) && value)
+ attributes |= HURTS;
+ if(reader.get("fire", value) && value)
+ attributes |= FIRE;
+ if(reader.get("fullbox", value) && value)
+ attributes |= FULLBOX;
+ if(reader.get("coin", value) && value)
+ attributes |= COIN;
+ if(reader.get("goal", value) && value)
+ attributes |= GOAL;
+
+ if(reader.get("north", value) && value)
+ data |= WORLDMAP_NORTH;
+ if(reader.get("south", value) && value)
+ data |= WORLDMAP_SOUTH;
+ if(reader.get("west", value) && value)
+ data |= WORLDMAP_WEST;
+ if(reader.get("east", value) && value)
+ data |= WORLDMAP_EAST;
+ if(reader.get("stop", value) && value)
+ data |= WORLDMAP_STOP;
+
+ reader.get("data", data);
+ reader.get("anim-fps", anim_fps);
+
+ if(reader.get("slope-type", data)) {
+ attributes |= SOLID | SLOPE;
+ }
+
+ const lisp::Lisp* images;
+#ifdef DEBUG
+ images = reader.get_lisp("editor-images");
+ if(images)
+ parse_images(*images);
+ else {
+#endif /*DEBUG*/
+ images = reader.get_lisp("images");
+ if(images)
+ parse_images(*images);
+#ifdef DEBUG
+ }
+#endif /*DEBUG*/
+
+ correct_attributes();
+ return id;
+}
+
+void
+Tile::parse_images(const lisp::Lisp& images_lisp)