X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/926f4cca0bec5b39f4d45dc9cdece5ddcedbcd95..HEAD:/mock/tools/level-converter.cc?ds=sidebyside diff --git a/mock/tools/level-converter.cc b/mock/tools/level-converter.cc index cdd4662..eb8b1c6 100644 --- a/mock/tools/level-converter.cc +++ b/mock/tools/level-converter.cc @@ -6,6 +6,7 @@ extern "C" { } #include +#include #include #include @@ -21,7 +22,7 @@ enum { LEVEL_LINE_COUNT = 14 }; -#define PATH_PREFIX "../badge/jumpnrun/" +#define PATH_PREFIX "../badge/jumpnrun/levels/" namespace jnrcpp { struct descriptors { @@ -40,8 +41,10 @@ namespace jnrcpp { ; items.add - ("doc" , JUMPNRUN_ITEM_TYPE_DOCUMENT ) - ("checkpoint", JUMPNRUN_ITEM_TYPE_CHECKPOINT) + ("doc" , JUMPNRUN_ITEM_TYPE_DOCUMENT ) + ("checkpoint" , JUMPNRUN_ITEM_TYPE_CHECKPOINT ) + ("key" , JUMPNRUN_ITEM_TYPE_KEY ) + ("doc_encrypted", JUMPNRUN_ITEM_TYPE_ENCRYPTED_DOCUMENT) ; enemies.add @@ -67,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); } } @@ -112,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); @@ -234,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); @@ -248,6 +266,7 @@ namespace jnrcpp { std::map tile_types; std::map item_types; std::map enemy_types; + std::map level_params; }; }