-
- i = j = 0;
- for(vector<int>::iterator it = bg_tm.begin(); it != bg_tm.end(); ++it, ++i)
- {
-
- bg_tiles[j][i] = (*it);
- if(i == width - 1)
- {
- i = -1;
- ++j;
- }
- }
-
- i = j = 0;
- for(vector<int>::iterator it = fg_tm.begin(); it != fg_tm.end(); ++it, ++i)
- {
-
- fg_tiles[j][i] = (*it);
- if(i == width - 1)
- {
- i = -1;
- ++j;
- }
- }
-
- lisp_free(root_obj);
- return 0;
-}
-
-/* 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 made using the built-in leveleditor\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);
- fprintf(fi," (height %d)\n", height);
- 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 < height; ++y)
- {
- for(int i = 0; i < width; ++i)
- fprintf(fi," %d ", bg_tiles[y][i]);
- fprintf(fi,"\n");
- }
-
- fprintf( fi,")\n");
- fprintf(fi," (interactive-tm ");
-
- for(int y = 0; y < height; ++y)
- {
- for(int i = 0; i < width; ++i)
- fprintf(fi," %d ", ia_tiles[y][i]);
- fprintf(fi,"\n");
- }
-
- fprintf( fi,")\n");
- fprintf(fi," (foreground-tm ");
-
- for(int y = 0; y < height; ++y)
- {
- for(int i = 0; i < width; ++i)
- fprintf(fi," %d ", fg_tiles[y][i]);
- fprintf(fi,"\n");
- }
-
- 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();