- 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_string("particle_system", &plevel->particle_system);
- reader.read_int_vector("background-tm", &bg_tm);
-
- if (!reader.read_int_vector("interactive-tm", &ia_tm))
- reader.read_int_vector("tilemap", &ia_tm);
-
- reader.read_int_vector("dynamic-tm", &dn_tm);
- reader.read_int_vector("foreground-tm", &fg_tm);
-
- // Convert old levels to the new tile numbers
- if (version == 0)
- {
- std::map<char, int> transtable;
- transtable['.'] = 0;
- transtable['0'] = 1000;
- transtable['1'] = 1001;
- transtable['2'] = 1002;
- 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;
-
- for(std::vector<int>::iterator i = ia_tm.begin(); i != ia_tm.end(); ++i)
- {
- std::map<char, int>::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);
+ if(!reader.read_int("width", &width))
+ st_abort("No width specified for level.", "");
+ 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");
+ }
+
+ height = 15;
+ 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);
+ reader.read_int("bkgd_green_top", &bkgd_top.green);
+ reader.read_int("bkgd_blue_top", &bkgd_top.blue);
+
+ bkgd_bottom.red = bkgd_bottom.green = bkgd_bottom.blue = 0;
+ reader.read_int("bkgd_red_bottom", &bkgd_bottom.red);
+ reader.read_int("bkgd_green_bottom", &bkgd_bottom.green);
+ reader.read_int("bkgd_blue_bottom", &bkgd_bottom.blue);
+
+ gravity = 10;
+ reader.read_float("gravity", &gravity);
+ name = "Noname";
+ reader.read_string("name", &name);
+ author = "unknown author";
+ reader.read_string("author", &author);
+ song_title = "";
+ reader.read_string("music", &song_title);
+ bkgd_image = "";
+ reader.read_string("background", &bkgd_image);
+ particle_system = "";
+ reader.read_string("particle_system", &particle_system);
+
+ reader.read_int_vector("background-tm", &bg_tiles);
+ if(int(bg_tiles.size()) != width * height)
+ st_abort("Wrong size of backgroundtilemap", "");
+
+ if (!reader.read_int_vector("interactive-tm", &ia_tiles))
+ reader.read_int_vector("tilemap", &ia_tiles);
+ if(int(ia_tiles.size()) != width * height)
+ st_abort("Wrong size of interactivetilemap", "");
+
+ reader.read_int_vector("foreground-tm", &fg_tiles);
+ if(int(fg_tiles.size()) != width * height)
+ st_abort("Wrong size of foregroundtilemap", "");
+
+ { // Read ResetPoints
+ lisp_object_t* cur = 0;
+ if (reader.read_lisp("reset-points", &cur))
+ {
+ while (!lisp_nil_p(cur))
+ {
+ lisp_object_t* data = lisp_car(cur);
+
+ ResetPoint pos;
+
+ LispReader reader(lisp_cdr(data));
+ if (reader.read_int("x", &pos.x)
+ && reader.read_int("y", &pos.y))
+ {
+ reset_points.push_back(pos);
+ }
+
+ cur = lisp_cdr(cur);
+ }
+ }
+ }
+
+ { // Read Objects
+ lisp_object_t* cur = 0;
+ if (reader.read_lisp("objects", &cur))
+ {
+ if(world)
+ world->parse_objects(cur);
+ }
+ }
+
+ { // Read Camera
+ lisp_object_t* cur = 0;
+ if (reader.read_lisp("camera", &cur))
+ {
+ LispReader reader(cur);
+ if(world) {
+ world->camera->read(reader);