snprintf(str, 1024, "%s.png", filename);
if(faccessible(str))
{
- texture_load(&image,str,IGNORE_ALPHA);
+ image = new Surface(str,IGNORE_ALPHA);
}
else
{
snprintf(filename, 1024, "%s/images/status/level-subset-info.png", datadir.c_str());
- texture_load(&image,filename,IGNORE_ALPHA);
+ image = new Surface(filename,IGNORE_ALPHA);
}
}
title.clear();
description.clear();
name.clear();
- texture_free(&image);
+ delete image;
levels = 0;
}
+Level::Level()
+{
+}
+
+Level::Level(const std::string& subset, int level)
+{
+ load(subset, level);
+}
+
+Level::Level(const std::string& filename)
+{
+ load(filename);
+}
+
void
Level::init_defaults()
{
song_title = "Mortimers_chipdisko.mod";
bkgd_image = "arctis.png";
width = 21;
+ start_pos_x = 100;
+ start_pos_y = 170;
time_left = 100;
gravity = 10.;
- bkgd_top_red = 0;
- bkgd_top_green = 0;
- bkgd_top_blue = 0;
- bkgd_bottom_red = 0;
- bkgd_bottom_green = 0;
- bkgd_bottom_blue = 0;
+ bkgd_top.red = 0;
+ bkgd_top.green = 0;
+ bkgd_top.blue = 0;
+ bkgd_bottom.red = 255;
+ bkgd_bottom.green = 255;
+ bkgd_bottom.blue = 255;
endpos = 0;
for(int i = 0; i < 15; ++i)
{
- ia_tiles[i] = (unsigned int*) malloc((width+1)*sizeof(unsigned int));
+ ia_tiles[i].resize(width+1, 0);
ia_tiles[i][width] = (unsigned int) '\0';
+
for(int y = 0; y < width; ++y)
ia_tiles[i][y] = 0;
- ia_tiles[i][width] = (unsigned int) '\0';
- bg_tiles[i] = (unsigned int*) malloc((width+1)*sizeof(unsigned int));
+ bg_tiles[i].resize(width+1, 0);
bg_tiles[i][width] = (unsigned int) '\0';
for(int y = 0; y < width; ++y)
bg_tiles[i][y] = 0;
- bg_tiles[i][width] = (unsigned int) '\0';
- fg_tiles[i] = (unsigned int*) malloc((width+1)*sizeof(unsigned int));
+ fg_tiles[i].resize(width+1, 0);
fg_tiles[i][width] = (unsigned int) '\0';
for(int y = 0; y < width; ++y)
fg_tiles[i][y] = 0;
- fg_tiles[i][width] = (unsigned int) '\0';
}
}
if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-level") == 0)
{
LispReader reader(lisp_cdr(root_obj));
-
reader.read_int("version", &version);
reader.read_int("width", &width);
+ if (!reader.read_int("start_pos_x", &start_pos_x)) start_pos_x = 100;
+ if (!reader.read_int("start_pos_y", &start_pos_y)) start_pos_y = 170;
reader.read_int("time", &time_left);
- reader.read_int("bkgd_top_red", &bkgd_top_red);
- reader.read_int("bkgd_top_green", &bkgd_top_green);
- reader.read_int("bkgd_top_blue", &bkgd_top_blue);
- reader.read_int("bkgd_bottom_red", &bkgd_bottom_red);
- reader.read_int("bkgd_bottom_green", &bkgd_bottom_green);
- reader.read_int("bkgd_bottom_blue", &bkgd_bottom_blue);
+
+ reader.read_int("bkgd_top_red", &bkgd_top.red);
+ reader.read_int("bkgd_top_green", &bkgd_top.green);
+ reader.read_int("bkgd_top_blue", &bkgd_top.blue);
+
+ reader.read_int("bkgd_bottom_red", &bkgd_bottom.red);
+ reader.read_int("bkgd_bottom_green", &bkgd_bottom.green);
+ reader.read_int("bkgd_bottom_blue", &bkgd_bottom.blue);
+
reader.read_float("gravity", &gravity);
reader.read_string("name", &name);
reader.read_string("author", &author);
for(int i = 0; i < 15; ++i)
{
- ia_tiles[i] = (unsigned int*) calloc((width +1) , sizeof(unsigned int) );
- bg_tiles[i] = (unsigned int*) calloc((width +1) , sizeof(unsigned int) );
- fg_tiles[i] = (unsigned int*) calloc((width +1) , sizeof(unsigned int) );
+ ia_tiles[i].resize(width + 1, 0);
+ bg_tiles[i].resize(width + 1, 0);
+ fg_tiles[i].resize(width + 1, 0);
}
int i = 0;
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_top_red %d)\n", bkgd_top_red);
- fprintf(fi," (bkgd_top_green %d)\n", bkgd_top_green);
- fprintf(fi," (bkgd_top_blue %d)\n", bkgd_top_blue);
- fprintf(fi," (bkgd_bottom_red %d)\n", bkgd_bottom_red);
- fprintf(fi," (bkgd_bottom_green %d)\n", bkgd_bottom_green);
- fprintf(fi," (bkgd_bottom_blue %d)\n", bkgd_bottom_blue);
+ fprintf(fi," (bkgd_top_red %d)\n", bkgd_top.red);
+ fprintf(fi," (bkgd_top_green %d)\n", bkgd_top.green);
+ fprintf(fi," (bkgd_top_blue %d)\n", bkgd_top.blue);
+ fprintf(fi," (bkgd_bottom_red %d)\n", bkgd_bottom.red);
+ fprintf(fi," (bkgd_bottom_green %d)\n", bkgd_bottom.green);
+ fprintf(fi," (bkgd_bottom_blue %d)\n", bkgd_bottom.blue);
fprintf(fi," (time %d)\n", time_left);
fprintf(fi," (width %d)\n", width);
fprintf(fi," (gravity %2.1f)\n", gravity);
Level::cleanup()
{
for(int i=0; i < 15; ++i)
- free(bg_tiles[i]);
- for(int i=0; i < 15; ++i)
- free(ia_tiles[i]);
- for(int i=0; i < 15; ++i)
- free(fg_tiles[i]);
+ {
+ bg_tiles[i].clear();
+ ia_tiles[i].clear();
+ fg_tiles[i].clear();
+ }
name.clear();
author.clear();
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());
- texture_load(&img_bkgd, fname, IGNORE_ALPHA);
+ img_bkgd = new Surface(fname, IGNORE_ALPHA);
}
else
{
void
Level::free_gfx()
{
- texture_free(&img_bkgd);
+ delete img_bkgd;
}
/* Load a level-specific graphic... */
void
-Level::load_image(texture_type* ptexture, string theme,const char * file, int use_alpha)
+Level::load_image(Surface** ptexture, string theme,const char * file, int use_alpha)
{
char fname[1024];
if(!faccessible(fname))
snprintf(fname, 1024, "%s/images/themes/%s/%s", datadir.c_str(), theme.c_str(), file);
- texture_load(ptexture, fname, use_alpha);
-}
-
-void tilemap_change_size(unsigned int** tilemap[15], int w, int old_w)
-{
- int j,y;
- for(y = 0; y < 15; ++y)
- {
- *tilemap[y] = (unsigned int*) realloc(*tilemap[y],(w+1)*sizeof(unsigned int));
- if(w > old_w)
- for(j = 0; j < w - old_w; ++j)
- *tilemap[y][old_w+j] = 0;
- *tilemap[y][w] = 0;
- }
+ *ptexture = new Surface(fname, use_alpha);
}
/* Change the size of a level (width) */
if(new_width < 21)
new_width = 21;
- tilemap_change_size((unsigned int***)&ia_tiles, new_width, width);
- tilemap_change_size((unsigned int***)&bg_tiles, new_width, width);
- tilemap_change_size((unsigned int***)&fg_tiles, new_width, width);
+ for(int y = 0; y < 15; ++y)
+ {
+ ia_tiles[y].resize(new_width, 0);
+ bg_tiles[y].resize(new_width, 0);
+ fg_tiles[y].resize(new_width, 0);
+ }
width = new_width;
}
free(song_path);
}
-
unsigned int
Level::gettileid(float x, float y)
{