- fprintf(fi,";SuperTux-Level\n");
- fprintf(fi,"(supertux-level\n");
-
- fprintf(fi," (version %d)\n", 1);
- fprintf(fi," (name \"%s\")\n", name.c_str());
- fprintf(fi," (theme \"%s\")\n", theme.c_str());
- fprintf(fi," (music \"%s\")\n", song_title.c_str());
- fprintf(fi," (background \"%s\")\n", bkgd_image.c_str());
- fprintf(fi," (particle_system \"%s\")\n", particle_system.c_str());
- fprintf(fi," (bkgd_red %d)\n", bkgd_red);
- fprintf(fi," (bkgd_green %d)\n", bkgd_green);
- fprintf(fi," (bkgd_blue %d)\n", bkgd_blue);
- fprintf(fi," (time %d)\n", time_left);
- fprintf(fi," (width %d)\n", width);
- fprintf(fi," (gravity %2.1f)\n", gravity);
- fprintf(fi," (background-tm ");
-
- for(int y = 0; y < 15; ++y)
- {
- for(int i = 0; i < width; ++i)
- fprintf(fi," %d ", bg_tiles[y][i]);
- }
-
- fprintf( fi,")\n");
- fprintf(fi," (interactive-tm ");
-
- for(int y = 0; y < 15; ++y)
- {
- for(int i = 0; i < width; ++i)
- fprintf(fi," %d ", ia_tiles[y][i]);
- }
-
- fprintf( fi,")\n");
- fprintf(fi," (foreground-tm ");
-
- for(int y = 0; y < 15; ++y)
- {
- for(int i = 0; i < width; ++i)
- fprintf(fi," %d ", fg_tiles[y][i]);
- }
-
- fprintf( fi,")\n");
- fprintf( fi,"(objects\n");
-
- for(std::vector<BadGuyData>::iterator it = badguy_data.begin();
- it != badguy_data.end();
- ++it)
- fprintf( fi,"(%s (x %d) (y %d))\n",badguykind_to_string((*it).kind).c_str(),(*it).x,(*it).y);
-
- fprintf( fi,")\n");
-
- fprintf( fi,")\n");
-
- fclose(fi);
+ writer.write_comment("SuperTux level made using the built-in leveleditor");
+ writer.start_list("supertux-level");
+
+ writer.write_int("version", 1);
+ writer.write_string("name", name);
+ writer.write_string("author", author);
+ writer.write_string("music", song_title);
+ writer.write_string("background", bkgd_image);
+ writer.write_string("particle_system", particle_system);
+ writer.write_int("bkgd_speed", bkgd_speed);
+ writer.write_int("bkgd_red_top", bkgd_top.red);
+ writer.write_int("bkgd_green_top", bkgd_top.green);
+ writer.write_int("bkgd_blue_top", bkgd_top.blue);
+ writer.write_int("bkgd_red_bottom", bkgd_bottom.red);
+ writer.write_int("bkgd_green_bottom", bkgd_bottom.green);
+ writer.write_int("bkgd_blue_bottom", bkgd_bottom.blue);
+ writer.write_int("time", time_left);
+ writer.write_int("width", width);
+ writer.write_int("height", height);
+ writer.write_bool("back_scrolling", back_scrolling);
+ writer.write_float("hor_autoscroll_speed", hor_autoscroll_speed);
+ writer.write_float("gravity", gravity);
+
+ writer.write_int_vector("background-tm", bg_tiles);
+ writer.write_int_vector("interactive-tm", ia_tiles);
+ writer.write_int_vector("foreground-tm", fg_tiles);
+
+ writer.start_list("reset-points");
+ for(std::vector<ResetPoint>::iterator i = reset_points.begin();
+ i != reset_points.end(); ++i) {
+ writer.start_list("point");
+ writer.write_int("x", i->x);
+ writer.write_int("y", i->y);
+ }
+ writer.end_list("reset-points");
+
+ // write objects
+ writer.start_list("objects");
+ // pick all objects that can be written into a levelfile
+ for(std::vector<GameObject*>::iterator it = world->gameobjects.begin();
+ it != world->gameobjects.end(); ++it) {
+ Serializable* serializable = dynamic_cast<Serializable*> (*it);
+ if(serializable)
+ serializable->write(writer);
+ }
+ writer.end_list("objects");
+
+ writer.end_list("supertux-level");
+ out.close();