X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/9ae835c864d2b3e651a86ac4af7cfac0979f136a..36890cbce498784c05cd591b41e16b5c69f6f29e:/mock/tools/level-converter.cc diff --git a/mock/tools/level-converter.cc b/mock/tools/level-converter.cc index 7f67732..eccd3e0 100644 --- a/mock/tools/level-converter.cc +++ b/mock/tools/level-converter.cc @@ -33,10 +33,17 @@ 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 @@ -107,6 +114,8 @@ 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); } @@ -229,8 +238,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); @@ -243,6 +265,7 @@ namespace jnrcpp { std::map tile_types; std::map item_types; std::map enemy_types; + std::map level_params; }; }