("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
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);
}
static_cast<uint16_t>(player_pos.second)
};
- dest.write(static_cast<char const *>(static_cast<void const *>(head)), sizeof(head));
- dest.write(static_cast<char const *>(static_cast<void const *>(spos)), sizeof(spos));
+ uint8_t lives = 3;
+ {
+ std::map<char, std::string>::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<uint8_t>(x);
+ }
+ }
+ }
+
+ dest.write(static_cast<char const *>(static_cast<void const *>(head )), sizeof(head ));
+ dest.write(static_cast<char const *>(static_cast<void const *>(spos )), sizeof(spos ));
+ dest.write(static_cast<char const *>(static_cast<void const *>(&lives)), sizeof(lives));
dump_tiles(dest);
dump_items(dest);
std::map<char, std::string> tile_types;
std::map<char, std::string> item_types;
std::map<char, std::string> enemy_types;
+ std::map<char, std::string> level_params;
};
}