- 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);
+ bkgd_speed = 2;
+ 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_tm);
+
+ if (!reader.read_int_vector("interactive-tm", &ia_tm))
+ reader.read_int_vector("tilemap", &ia_tm);
+
+ reader.read_int_vector("foreground-tm", &fg_tm);
+
+ { // 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 BadGuys
+ lisp_object_t* cur = 0;
+ if (reader.read_lisp("objects", &cur))
+ {
+ while (!lisp_nil_p(cur))
+ {
+ lisp_object_t* data = lisp_car(cur);
+
+ BadGuyData bg_data;
+ bg_data.kind = badguykind_from_string(lisp_symbol(lisp_car(data)));
+ LispReader reader(lisp_cdr(data));
+ reader.read_int("x", &bg_data.x);
+ reader.read_int("y", &bg_data.y);
+ reader.read_bool("stay-on-platform", &bg_data.stay_on_platform);
+
+ badguy_data.push_back(bg_data);
+
+ cur = lisp_cdr(cur);
+ }
+ }
+ }
+
+ // Convert old levels to the new tile numbers
+ if (version == 0)
+ {
+ std::map<char, int> 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<int>::iterator i = ia_tm.begin(); i != ia_tm.end(); ++i)
+ {
+ if (*i == '0' || *i == '1' || *i == '2')
+ {
+ badguy_data.push_back(BadGuyData(static_cast<BadGuyKind>(*i-'0'),
+ x*32, y*32, false));
+ *i = 0;
+ }
+ else
+ {
+ 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);
+ }
+ ++x;
+ if (x >= width)
+ {
+ x = 0;
+ ++y;
+ }
+ }
+ }