X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/84f14b5b80ace3691343be066491adaa97780468..5337261a68ea89b88624ca6fd7319cadd662e057:/mock/tools/level-converter.cc?ds=sidebyside diff --git a/mock/tools/level-converter.cc b/mock/tools/level-converter.cc index 803da3e..eb8b1c6 100644 --- a/mock/tools/level-converter.cc +++ b/mock/tools/level-converter.cc @@ -6,6 +6,7 @@ extern "C" { } #include +#include #include #include @@ -18,10 +19,10 @@ extern "C" { #include enum { - LEVEL_LINE_COUNT = 13 + LEVEL_LINE_COUNT = 14 }; -#define PATH_PREFIX "../badge/jumpnrun/" +#define PATH_PREFIX "../badge/jumpnrun/levels/" namespace jnrcpp { struct descriptors { @@ -33,22 +34,32 @@ namespace jnrcpp { ("tube_right" , JUMPNRUN_TILE_TYPE_TUBE_RIGHT ) ("brick" , JUMPNRUN_TILE_TYPE_BRICK ) ("square" , JUMPNRUN_TILE_TYPE_SQUARE ) + ("spike_up" , JUMPNRUN_TILE_TYPE_SPIKE_UP ) + ("spike_right" , JUMPNRUN_TILE_TYPE_SPIKE_RIGHT ) + ("spike_down" , JUMPNRUN_TILE_TYPE_SPIKE_DOWN ) + ("spike_left" , JUMPNRUN_TILE_TYPE_SPIKE_LEFT ) ; items.add - ("doc", JUMPNRUN_ITEM_TYPE_DOCUMENT) + ("doc" , JUMPNRUN_ITEM_TYPE_DOCUMENT ) + ("checkpoint" , JUMPNRUN_ITEM_TYPE_CHECKPOINT ) + ("key" , JUMPNRUN_ITEM_TYPE_KEY ) + ("doc_encrypted", JUMPNRUN_ITEM_TYPE_ENCRYPTED_DOCUMENT) ; enemies.add - ("cat" , JUMPNRUN_ENEMY_TYPE_CAT ) - ("mushroom" , JUMPNRUN_ENEMY_TYPE_MUSHROOM ) - ("bunny" , JUMPNRUN_ENEMY_TYPE_BUNNY ) - ("kaninchen", JUMPNRUN_ENEMY_TYPE_BUNNY ) // legacy - ("snake" , JUMPNRUN_ENEMY_TYPE_SNAKE ) - ("spiral" , JUMPNRUN_ENEMY_TYPE_SPIRAL ) - ("rotor" , JUMPNRUN_ENEMY_TYPE_ROTOR ) - ("dog" , JUMPNRUN_ENEMY_TYPE_DOG ) - ("giraffe" , JUMPNRUN_ENEMY_TYPE_GIRAFFE ) + ("cat" , JUMPNRUN_ENEMY_TYPE_CAT ) + ("mushroom" , JUMPNRUN_ENEMY_TYPE_MUSHROOM ) + ("bunny" , JUMPNRUN_ENEMY_TYPE_BUNNY ) + ("kaninchen" , JUMPNRUN_ENEMY_TYPE_BUNNY ) // legacy + ("snake" , JUMPNRUN_ENEMY_TYPE_SNAKE ) + ("spiral" , JUMPNRUN_ENEMY_TYPE_SPIRAL ) + ("rotor" , JUMPNRUN_ENEMY_TYPE_ROTOR ) + ("dog" , JUMPNRUN_ENEMY_TYPE_DOG ) + ("giraffe" , JUMPNRUN_ENEMY_TYPE_GIRAFFE ) + ("bird" , JUMPNRUN_ENEMY_TYPE_BIRD ) + ("bird_straight", JUMPNRUN_ENEMY_TYPE_BIRD_STRAIGHT) + ("bird_dip" , JUMPNRUN_ENEMY_TYPE_BIRD_DIP ) ; } @@ -59,15 +70,15 @@ namespace jnrcpp { struct level_name_map { level_name_map() { - std::ifstream in(PATH_PREFIX "levels.txt"); + std::ifstream in("levels.txt"); if(!in) { - throw std::logic_error(PATH_PREFIX "levels.txt konnte nicht geöffnet werden."); + throw std::logic_error("levels.txt konnte nicht geöffnet werden."); } std::string name; while(std::getline(in, name)) { - if(name != "") { + if(boost::trim_copy(name) != "") { names.push_back(name); } } @@ -104,10 +115,12 @@ namespace jnrcpp { objmap = &item_types; } else if(line == "[enemies]") { objmap = &enemy_types; + } else if(line == "[parameters]") { + objmap = &level_params; } else { throw std::invalid_argument("Unkown type: " + line); } - } else if(line != "") { + } else if(boost::trim_right_copy(line) != "") { char c; std::string tok; std::istringstream parser(line); @@ -226,8 +239,21 @@ namespace jnrcpp { static_cast(player_pos.second) }; - dest.write(static_cast(static_cast(head)), sizeof(head)); - dest.write(static_cast(static_cast(spos)), sizeof(spos)); + uint8_t lives = 3; + { + std::map::const_iterator iter = level_params.find('L'); + if(iter != level_params.end()) { + unsigned x; + std::istringstream parser(iter->second); + if(parser >> x) { + lives = static_cast(x); + } + } + } + + dest.write(static_cast(static_cast(head )), sizeof(head )); + dest.write(static_cast(static_cast(spos )), sizeof(spos )); + dest.write(static_cast(static_cast(&lives)), sizeof(lives)); dump_tiles(dest); dump_items(dest); @@ -240,6 +266,7 @@ namespace jnrcpp { std::map tile_types; std::map item_types; std::map enemy_types; + std::map level_params; }; }