- char filename[1024];
-
- /* Load data file: */
-
- snprintf(filename, 1024, "%s/levels/%s/level%d.stl", st_dir, subset, level);
- if(!faccessible(filename))
- snprintf(filename, 1024, "%s/levels/%s/level%d.stl", datadir.c_str(), subset, level);
-
- return level_load(plevel, filename);
-}
-
-int level_load(st_level* plevel, const char* filename)
-{
- int x, y;
- FILE * fi;
- lisp_object_t* root_obj = 0;
- fi = fopen(filename, "r");
- if (fi == NULL)
- {
- perror(filename);
- return -1;
- }
-
- lisp_stream_t stream;
- lisp_stream_init_file (&stream, fi);
- root_obj = lisp_read (&stream);
-
- if (root_obj->type == LISP_TYPE_EOF || root_obj->type == LISP_TYPE_PARSE_ERROR)
- {
- printf("World: Parse Error in file %s", filename);
- }
-
- vector<int> vi;
-
- if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-level") == 0)
- {
- LispReader reader(lisp_cdr(root_obj));
-
- reader.read_int("width", &plevel->width);
- reader.read_int("time", &plevel->time_left);
- reader.read_int("bkgd_red", &plevel->bkgd_red);
- reader.read_int("bkgd_green", &plevel->bkgd_green);
- reader.read_int("bkgd_blue", &plevel->bkgd_blue);
- reader.read_float("gravity", &plevel->gravity);
- reader.read_string("name", &plevel->name);
- reader.read_string("theme", &plevel->theme);
- reader.read_string("music", &plevel->song_title);
- reader.read_string("background", &plevel->bkgd_image);
- reader.read_int_vector("tilemap", &vi);
- }
-
-
- int i;
- for( i = 0; i < 15; ++i)
- plevel->tiles[i] = (unsigned int*) calloc((plevel->width +1) , sizeof(unsigned int) );
-
- i = 0;
- int j = 0;
- for(vector<int>::iterator it = vi.begin(); it != vi.end(); ++it, ++i)
- {
-
- plevel->tiles[j][i] = (*it);
- if(i == plevel->width - 1)
- {
- i = -1;
- ++j;
- }
- }
-
- /* Set the global gravity to the latest loaded level's gravity */
- gravity = plevel->gravity;
-
- /* Mark the end position of this level! - Is a bit wrong here thought */
-
- for (y = 0; y < 15; ++y)
- {
- for (x = 0; x < plevel->width; ++x)
- {
- if(plevel->tiles[y][x] == '|')
- {
- if(x*32 > endpos)
- endpos = x*32;
- }
- }
- }
-
- fclose(fi);
- return 0;