From f91325d4a5aa324835a7b24e4159398ed0256310 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 4 Feb 2019 17:28:59 -0600 Subject: [PATCH] Cleanup and add game version flag to mapjson tool --- data/maps/.gitignore | 2 +- map_data_rules.mk | 6 ++--- tools/mapjson/.gitignore | 1 + tools/mapjson/mapjson.cpp | 54 ++++++++++++++++++++++++--------------- 4 files changed, 39 insertions(+), 24 deletions(-) create mode 100755 tools/mapjson/.gitignore diff --git a/data/maps/.gitignore b/data/maps/.gitignore index c07d4e03a6..59405b1767 100755 --- a/data/maps/.gitignore +++ b/data/maps/.gitignore @@ -1,4 +1,4 @@ -connections.in +connections.inc events.inc groups.inc headers.inc diff --git a/map_data_rules.mk b/map_data_rules.mk index db5c989d68..89308fba17 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -14,18 +14,18 @@ $(BUILD_DIR)/data/map_events.o: data/map_events.s $(MAPS_DIR)/events.inc $(MAP_E $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json - $(MAPJSON) map $< $(LAYOUTS_DIR)/layouts.json + $(MAPJSON) map ruby $< $(LAYOUTS_DIR)/layouts.json $(MAPS_DIR)/%/events.inc: $(MAPS_DIR)/%/header.inc ; $(MAPS_DIR)/%/connections.inc: $(MAPS_DIR)/%/events.inc ; $(MAPS_DIR)/groups.inc: $(MAPS_DIR)/map_groups.json - $(MAPJSON) groups $< + $(MAPJSON) groups ruby $< $(MAPS_DIR)/connections.inc: $(MAPS_DIR)/groups.inc ; $(MAPS_DIR)/events.inc: $(MAPS_DIR)/connections.inc ; $(MAPS_DIR)/headers.inc: $(MAPS_DIR)/events.inc ; include/constants/map_groups.h: $(MAPS_DIR)/headers.inc ; $(LAYOUTS_DIR)/layouts.inc: $(LAYOUTS_DIR)/layouts.json - $(MAPJSON) layouts $< + $(MAPJSON) layouts ruby $< $(LAYOUTS_DIR)/layouts_table.inc: $(LAYOUTS_DIR)/layouts.inc ; include/constants/layouts.h: $(LAYOUTS_DIR)/layouts_table.inc ; diff --git a/tools/mapjson/.gitignore b/tools/mapjson/.gitignore new file mode 100755 index 0000000000..a5d5684797 --- /dev/null +++ b/tools/mapjson/.gitignore @@ -0,0 +1 @@ +mapjson diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index d6ca26ded2..2dd6e5b315 100755 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -50,7 +50,7 @@ string read_text_file(string filepath) { } void write_text_file(string filepath, string text) { - ofstream out_file(filepath); + ofstream out_file(filepath, std::ofstream::binary); if (!out_file.is_open()) FATAL_ERROR("Cannot open file %s for writing.\n", filepath.c_str()); @@ -60,7 +60,7 @@ void write_text_file(string filepath, string text) { out_file.close(); } -string generate_map_header_text(Json map_data, Json layouts_data) { +string generate_map_header_text(Json map_data, Json layouts_data, string version) { string map_layout_id = map_data["layout"].string_value(); vector matched; @@ -102,9 +102,18 @@ string generate_map_header_text(Json map_data, Json layouts_data) { << "\t.byte " << map_data["requires_flash"].bool_value() << "\n" << "\t.byte " << map_data["weather"].string_value() << "\n" << "\t.byte " << map_data["map_type"].string_value() << "\n" - << "\t.2byte 0\n" - << "\t.byte " << map_data["show_map_name"].bool_value() << "\n" - << "\t.byte " << map_data["battle_scene"].string_value() << "\n\n"; + << "\t.2byte 0\n"; + + if (version == "ruby") + text << "\t.byte " << map_data["show_map_name"].bool_value() << "\n"; + else if (version == "emerald") + text << "\tmap_header_flags " + << "allow_bike=" << map_data["allow_bike"].bool_value() << ", " + << "allow_escape_rope=" << map_data["allow_escape_rope"].bool_value() << ", " + << "allow_run=" << map_data["allow_running"].bool_value() << ", " + << "show_map_name=" << map_data["show_map_name"].bool_value() << "\n"; + + text << "\t.byte " << map_data["battle_scene"].string_value() << "\n\n"; return text.str(); } @@ -250,7 +259,7 @@ string get_directory_name(string filename) { return filename.substr(0, dir_pos + 1); } -void process_map(string map_filepath, string layouts_filepath) { +void process_map(string map_filepath, string layouts_filepath, string version) { string mapdata_err, layouts_err; string mapdata_json_text = read_text_file(map_filepath); @@ -264,7 +273,7 @@ void process_map(string map_filepath, string layouts_filepath) { if (layouts_data == Json()) FATAL_ERROR("%s\n", layouts_err.c_str()); - string header_text = generate_map_header_text(map_data, layouts_data); + string header_text = generate_map_header_text(map_data, layouts_data, version); string events_text = generate_map_events_text(map_data); string connections_text = generate_map_connections_text(map_data); @@ -486,8 +495,13 @@ void process_layouts(string layouts_filepath) { } int main(int argc, char *argv[]) { - if (argc < 2) - FATAL_ERROR("USAGE: mapjson [options]\n"); + if (argc < 3) + FATAL_ERROR("USAGE: mapjson [options]\n"); + + char *version_arg = argv[2]; + string version(version_arg); + if (version != "emerald" && version != "ruby") + FATAL_ERROR("ERROR: must be 'emerald' or 'ruby'.\n"); char *mode_arg = argv[1]; string mode(mode_arg); @@ -495,27 +509,27 @@ int main(int argc, char *argv[]) { FATAL_ERROR("ERROR: must be 'layouts', 'map', or 'groups'.\n"); if (mode == "map") { - if (argc != 4) - FATAL_ERROR("USAGE: mapjson map \n"); + if (argc != 5) + FATAL_ERROR("USAGE: mapjson map \n"); - string filepath(argv[2]); - string layouts_filepath(argv[3]); + string filepath(argv[3]); + string layouts_filepath(argv[4]); - process_map(filepath, layouts_filepath); + process_map(filepath, layouts_filepath, version); } else if (mode == "groups") { - if (argc != 3) - FATAL_ERROR("USAGE: mapjson groups \n"); + if (argc != 4) + FATAL_ERROR("USAGE: mapjson groups \n"); - string filepath(argv[2]); + string filepath(argv[3]); process_groups(filepath); } else if (mode == "layouts") { - if (argc != 3) - FATAL_ERROR("USAGE: mapjson layouts \n"); + if (argc != 4) + FATAL_ERROR("USAGE: mapjson layouts \n"); - string filepath(argv[2]); + string filepath(argv[3]); process_layouts(filepath); }