X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.cpp;h=485e5e82d301e9d68206fa693d94546f7c473065;hb=5dba61177d71c5572fd29af172fcdab7b1f9a561;hp=3a55398840c5b0b2f414c4c1ebd5e553b265730f;hpb=61208b33a84be619f69d22199a9da9b785e7f5c6;p=supertux.git diff --git a/src/level.cpp b/src/level.cpp index 3a5539884..485e5e82d 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -223,12 +223,10 @@ Level::init_defaults() bkgd_image = "arctis.jpg"; width = 0; height = 0; - start_pos_x = 100; - start_pos_y = 170; + start_pos.x = 100; + start_pos.y = 170; time_left = 100; gravity = 10.; - back_scrolling = false; - hor_autoscroll_speed = 0; bkgd_speed = 50; bkgd_top.red = 0; bkgd_top.green = 0; @@ -265,7 +263,9 @@ Level::load(const std::string& filename, World* world) if (root_obj->type == LISP_TYPE_EOF || root_obj->type == LISP_TYPE_PARSE_ERROR) { - printf("World: Parse Error in file %s", filename.c_str()); + lisp_free(root_obj); + std::cout << "World: Parse Error in file '" << filename + << "'.\n"; return -1; } @@ -277,25 +277,20 @@ Level::load(const std::string& filename, World* world) reader.read_int("version", &version); if(!reader.read_int("width", &width)) st_abort("No width specified for level.", ""); - 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; + if (!reader.read_float("start_pos_x", &start_pos.x)) start_pos.x = 100; + if (!reader.read_float("start_pos_y", &start_pos.y)) start_pos.y = 170; time_left = 500; if(!reader.read_int("time", &time_left)) { - printf("Warning no time specified for level.\n"); + printf("Warning: no time specified for level.\n"); } height = 15; - reader.read_int("height", &height); - - back_scrolling = false; - reader.read_bool("back_scrolling", &back_scrolling); - - hor_autoscroll_speed = 0; - reader.read_float("hor_autoscroll_speed", &hor_autoscroll_speed); + if(!reader.read_int("height", &height)) { + printf("Warning: no height specified for level.\n"); + } bkgd_speed = 50; reader.read_int("bkgd_speed", &bkgd_speed); - bkgd_top.red = bkgd_top.green = bkgd_top.blue = 0; reader.read_int("bkgd_red_top", &bkgd_top.red); @@ -355,7 +350,7 @@ Level::load(const std::string& filename, World* world) } } - { // Read BadGuys + { // Read Objects lisp_object_t* cur = 0; if (reader.read_lisp("objects", &cur)) { @@ -364,77 +359,16 @@ Level::load(const std::string& filename, World* world) } } -#if 0 // TODO fix this or remove it - // Convert old levels to the new tile numbers - if (version == 0) - { - std::map transtable; - transtable['.'] = 0; - transtable['x'] = 104; - transtable['X'] = 77; - transtable['y'] = 78; - transtable['Y'] = 105; - transtable['A'] = 83; - transtable['B'] = 102; - transtable['!'] = 103; - transtable['a'] = 84; - transtable['C'] = 85; - transtable['D'] = 86; - transtable['E'] = 87; - transtable['F'] = 88; - transtable['c'] = 89; - transtable['d'] = 90; - transtable['e'] = 91; - transtable['f'] = 92; - - transtable['G'] = 93; - transtable['H'] = 94; - transtable['I'] = 95; - transtable['J'] = 96; - - transtable['g'] = 97; - transtable['h'] = 98; - transtable['i'] = 99; - transtable['j'] = 100 - ; - transtable['#'] = 11; - transtable['['] = 13; - transtable['='] = 14; - transtable[']'] = 15; - transtable['$'] = 82; - transtable['^'] = 76; - transtable['*'] = 80; - transtable['|'] = 79; - transtable['\\'] = 81; - transtable['&'] = 75; - - int x = 0; - int y = 0; - for(std::vector::iterator i = ia_tm.begin(); i != ia_tm.end(); ++i) - { - if (*i == '0' || *i == '1' || *i == '2') - { - badguy_data.push_back(BadGuyData(static_cast(*i-'0'), - x*32, y*32, false)); - *i = 0; - } - else - { - std::map::iterator j = transtable.find(*i); - if (j != transtable.end()) - *i = j->second; - else - printf("Error: conversion will fail, unsupported char: '%c' (%d)\n", *i, *i); - } - ++x; - if (x >= width) - { - x = 0; - ++y; - } + { // Read Camera + lisp_object_t* cur = 0; + if (reader.read_lisp("camera", &cur)) + { + LispReader reader(cur); + if(world) { + world->camera->read(reader); } - } -#endif + } + } } lisp_free(root_obj); @@ -450,13 +384,13 @@ Level::save(const std::string& subset, int level, World* world) char str[80]; /* Save data file: */ - sprintf(str, "/levels/%s/", subset.c_str()); + snprintf(str, sizeof(str), "/levels/%s/", subset.c_str()); fcreatedir(str); - snprintf(filename, 1024, "%s/levels/%s/level%d.stl", st_dir, subset.c_str(), - level); + snprintf(filename, sizeof(filename), + "%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); + snprintf(filename, sizeof(filename), "%s/levels/%s/level%d.stl", + datadir.c_str(), subset.c_str(), level); std::ofstream out(filename); if(!out.good()) { @@ -484,8 +418,6 @@ Level::save(const std::string& subset, int level, World* world) 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);