Skip to content

Commit

Permalink
Cleanup and add game version flag to mapjson tool
Browse files Browse the repository at this point in the history
  • Loading branch information
huderlem committed Feb 4, 2019
1 parent 66059f3 commit f91325d
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 24 deletions.
2 changes: 1 addition & 1 deletion data/maps/.gitignore
@@ -1,4 +1,4 @@
connections.in
connections.inc
events.inc
groups.inc
headers.inc
Expand Down
6 changes: 3 additions & 3 deletions map_data_rules.mk
Expand Up @@ -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 ;
1 change: 1 addition & 0 deletions tools/mapjson/.gitignore
@@ -0,0 +1 @@
mapjson
54 changes: 34 additions & 20 deletions tools/mapjson/mapjson.cpp
Expand Up @@ -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());
Expand All @@ -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<Json> matched;
Expand Down Expand Up @@ -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();
}
Expand Down Expand Up @@ -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);
Expand All @@ -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);

Expand Down Expand Up @@ -486,36 +495,41 @@ void process_layouts(string layouts_filepath) {
}

int main(int argc, char *argv[]) {
if (argc < 2)
FATAL_ERROR("USAGE: mapjson <mode> [options]\n");
if (argc < 3)
FATAL_ERROR("USAGE: mapjson <mode> <game-version> [options]\n");

char *version_arg = argv[2];
string version(version_arg);
if (version != "emerald" && version != "ruby")
FATAL_ERROR("ERROR: <game-version> must be 'emerald' or 'ruby'.\n");

char *mode_arg = argv[1];
string mode(mode_arg);
if (mode != "layouts" && mode != "map" && mode != "groups")
FATAL_ERROR("ERROR: <mode> must be 'layouts', 'map', or 'groups'.\n");

if (mode == "map") {
if (argc != 4)
FATAL_ERROR("USAGE: mapjson map <map_file> <layouts_file>\n");
if (argc != 5)
FATAL_ERROR("USAGE: mapjson map <game-version> <map_file> <layouts_file>\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 <groups_file>\n");
if (argc != 4)
FATAL_ERROR("USAGE: mapjson groups <game-version> <groups_file>\n");

string filepath(argv[2]);
string filepath(argv[3]);

process_groups(filepath);
}
else if (mode == "layouts") {
if (argc != 3)
FATAL_ERROR("USAGE: mapjson layouts <layouts_file>\n");
if (argc != 4)
FATAL_ERROR("USAGE: mapjson layouts <game-version> <layouts_file>\n");

string filepath(argv[2]);
string filepath(argv[3]);

process_layouts(filepath);
}
Expand Down

0 comments on commit f91325d

Please sign in to comment.