+ Surface* surface = create_surface(lisp_car(cur));
+ if (surface)
+ surfs.push_back(surface);
+ else
+ std::cout << "Tile: Couldn't create image" << std::endl;
+
+ cur = lisp_cdr(cur);
+ }
+
+ return surfs;
+}
+
+Tile::Tile()
+ : id(-1), attributes(0), data(0), next_tile(0), anim_speed(25)
+{
+}
+
+Tile::~Tile()
+{
+ for(std::vector<Surface*>::iterator i = images.begin(); i != images.end();
+ ++i) {
+ delete *i;
+ }
+ for(std::vector<Surface*>::iterator i = editor_images.begin();
+ i != editor_images.end(); ++i) {
+ delete *i;
+ }
+}
+
+int
+Tile::read(LispReader& reader)
+{
+ if(!reader.read_int("id", id)) {
+ std::cerr << "Missing tile-id.\n";
+ return -1;
+ }
+
+ bool value;
+ if(reader.read_bool("solid", value) && value)
+ attributes |= SOLID;
+ if(reader.read_bool("unisolid", value) && value)
+ attributes |= GOAL;
+ if(reader.read_bool("brick", value) && value)
+ attributes |= BRICK;
+ if(reader.read_bool("ice", value) && value)
+ attributes |= ICE;
+ if(reader.read_bool("water", value) && value)
+ attributes |= WATER;
+ if(reader.read_bool("spike", value) && value)
+ attributes |= SPIKE;
+ if(reader.read_bool("fullbox", value) && value)
+ attributes |= FULLBOX;
+ if(reader.read_bool("distro", value) && value)
+ attributes |= COIN;
+ if(reader.read_bool("coin", value) && value)
+ attributes |= COIN;
+ if(reader.read_bool("goal", value) && value)
+ attributes |= GOAL;
+
+ reader.read_int("data", data);
+ reader.read_int("anim-speed", anim_speed);
+ reader.read_int("next-tile", next_tile);
+
+ slope_angle = 0;
+ reader.read_float("slope-angle", slope_angle);
+ if(slope_angle != 0)
+ { // convert angle to radians from degrees:
+ slope_angle = (slope_angle * M_PI) / 180;
+ attributes |= SOLID;