Editor: slightly less hardcoded teleport map
This commit is contained in:
+22
-2
@@ -33,9 +33,22 @@ uint8_t read8Bits(std::ifstream &file) {
|
||||
file.read((char *)&data, sizeof(uint8_t) / sizeof(char));
|
||||
return data;
|
||||
}
|
||||
std::string readString(std::ifstream &file) {
|
||||
std::string res = "";
|
||||
char tmp{};
|
||||
file.read(&tmp, 1);
|
||||
while (tmp != '\0') {
|
||||
res += tmp;
|
||||
file.read(&tmp, 1);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
void write8Bits(std::ofstream &file, uint8_t data) {
|
||||
file.write((char *)&data, sizeof(uint8_t) / sizeof(char));
|
||||
}
|
||||
void writeString(std::ofstream &file, const std::string &text) {
|
||||
file.write(text.c_str(), text.size() + 1);
|
||||
}
|
||||
|
||||
uint16_t read16Bits(std::ifstream &file) {
|
||||
uint16_t data;
|
||||
@@ -74,6 +87,7 @@ MapObject parseBlock(std::ifstream &map_file) {
|
||||
uint8_t character_id = 0;
|
||||
uint32_t modifier_id = 0;
|
||||
uint8_t modifier_data = 0;
|
||||
std::string modifier_text = "";
|
||||
uint16_t wide_terrain = read16Bits(map_file);
|
||||
auto terrain = separateWideTerrain(wide_terrain);
|
||||
uint16_t terrain_id = terrain.first;
|
||||
@@ -86,6 +100,9 @@ MapObject parseBlock(std::ifstream &map_file) {
|
||||
auto modifier = separateAdditionalData(additional_data);
|
||||
modifier_id = modifier.first | 0x6000;
|
||||
modifier_data = modifier.second;
|
||||
if(modifier_id == TELEPORT_MODIFIER_ID) {
|
||||
modifier_text = readString(map_file);
|
||||
}
|
||||
} else {
|
||||
// character
|
||||
auto character = separateAdditionalData(additional_data);
|
||||
@@ -94,7 +111,7 @@ MapObject parseBlock(std::ifstream &map_file) {
|
||||
}
|
||||
}
|
||||
return MapObject(terrain_id, terrain_type, character_id, character_type,
|
||||
modifier_id, modifier_data);
|
||||
modifier_id, modifier_data, modifier_text);
|
||||
}
|
||||
|
||||
void loadEmptyMap(std::vector<mapColumnType> &objects, size_t editor_width) {
|
||||
@@ -167,7 +184,7 @@ void loadMapV01(std::shared_ptr<SDLPP::Scene> &scene,
|
||||
mushroom = true;
|
||||
}
|
||||
if (!editor && block.getModifierId() == TELEPORT_MODIFIER_ID) {
|
||||
teleport_level = "test.marmap";
|
||||
teleport_level = block.getModifierText();
|
||||
}
|
||||
// TODO add modifiers to createTerrainBlock
|
||||
if (block.getTerrainId() != 0) {
|
||||
@@ -270,6 +287,9 @@ void saveMap(const std::string &file, std::vector<mapColumnType> &objects) {
|
||||
}
|
||||
if (additional_data) {
|
||||
write8Bits(output_file, additional_data);
|
||||
if(additional_data & ADDITIONAL_IS_MOD && additional_data & !block.getModifierText().empty()) {
|
||||
writeString(output_file, block.getModifierText());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user