-/* Save data for level: */
-
-void
-Level::save(const std::string& subset, int level)
-{
- char filename[1024];
- char str[80];
-
- /* Save data file: */
- sprintf(str, "/levels/%s/", subset.c_str());
- fcreatedir(str);
- snprintf(filename, 1024, "%s/levels/%s/level%d.stl", st_dir, subset.c_str(),
- level);
- if(!fwriteable(filename))
- snprintf(filename, 1024, "%s/levels/%s/level%d.stl", datadir.c_str(),
- subset.c_str(), level);
-
- FILE * fi = fopen(filename, "w");
- if (fi == NULL)
- {
- perror(filename);
- st_shutdown();
- exit(-1);
- }
-
-
- /* Write header: */
- 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," (author \"%s\")\n", author.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_speed %d)\n", bkgd_speed);
- fprintf(fi," (bkgd_red_top %d)\n", bkgd_top.red);
- fprintf(fi," (bkgd_green_top %d)\n", bkgd_top.green);
- fprintf(fi," (bkgd_blue_top %d)\n", bkgd_top.blue);
- fprintf(fi," (bkgd_red_bottom %d)\n", bkgd_bottom.red);
- fprintf(fi," (bkgd_green_bottom %d)\n", bkgd_bottom.green);
- fprintf(fi," (bkgd_blue_bottom %d)\n", bkgd_bottom.blue);
- fprintf(fi," (time %d)\n", time_left);
- fprintf(fi," (width %d)\n", width);
- if(back_scrolling)
- fprintf(fi," (back_scrolling #t)\n");
- else
- fprintf(fi," (back_scrolling #f)\n");
- fprintf(fi," (hor_autoscroll_speed %2.1f)\n", hor_autoscroll_speed);
- 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,"(reset-points\n");
- for(std::vector<ResetPoint>::iterator i = reset_points.begin();
- i != reset_points.end(); ++i)
- fprintf( fi,"(point (x %d) (y %d))\n",i->x, i->y);
- 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) (stay-on-platform %s))\n",
- badguykind_to_string((*it).kind).c_str(),(*it).x,(*it).y,
- it->stay_on_platform ? "#t" : "#f");
-
- fprintf( fi,")\n");
-
- fprintf( fi,")\n");
-
- fclose(fi);
-}
-
-
-/* Unload data for this level: */
-
-void
-Level::cleanup()
-{
- for(int i=0; i < 15; ++i)
- {
- bg_tiles[i].clear();
- ia_tiles[i].clear();
- fg_tiles[i].clear();
- }
-
- reset_points.clear();
- name = "";
- author = "";
- song_title = "";
- bkgd_image = "";
-
- badguy_data.clear();
-}
-
-void
-Level::load_gfx()
-{
- if(!bkgd_image.empty())
- {
- char fname[1024];
- snprintf(fname, 1024, "%s/background/%s", st_dir, bkgd_image.c_str());
- if(!faccessible(fname))
- snprintf(fname, 1024, "%s/images/background/%s", datadir.c_str(), bkgd_image.c_str());
- delete img_bkgd;
- img_bkgd = new Surface(fname, IGNORE_ALPHA);
- }
- else
- {
- delete img_bkgd;
- img_bkgd = 0;
- }
-}
-
-/* Load a level-specific graphic... */
-void Level::load_image(Surface** ptexture, string theme,const char * file, int use_alpha)