/** * This tool handles everything assets-related including extracting and building. */ #include #include #include #include "dkr_assets_tool_classes/common/util.h" #include "dkr_assets_tool_classes/extractor/extractor.h" #include "dkr_assets_tool_classes/builder/builder.h" #include "dkr_assets_tool_classes/make_asset_files/asset_enums_header.h" #include "dkr_assets_tool_classes/make_asset_files/asset_asm_data.h" #include "dkr_assets_tool_classes/compiler/compiler.h" /**************************************************************************/ void print_usage() { std::cout << "---- Usages -------------------------------------------------------------" << std::endl; std::cout << "Extracting assets: ./dkr_assets_tool -e " << std::endl; std::cout << "Building an asset: ./dkr_assets_tool -b " << std::endl; std::cout << "Build enums cache: ./dkr_assets_tool -bc " << std::endl; std::cout << "Creating includes: ./dkr_assets_tool -i " << std::endl; std::cout << "Compiling assets: ./dkr_assets_tool -c " << std::endl; std::cout << "Compress file: ./dkr_assets_tool -fc " << std::endl; std::cout << "Decompress file: ./dkr_assets_tool -fd " << std::endl; std::cout << "-------------------------------------------------------------------------" << std::endl; } /**************************************************************************/ struct Command { std::string flag; int args; void (*func)(const std::vector&); }; void extract(const std::vector& args); void build(const std::vector& args); void asset_includes(const std::vector& args); void asset_compile(const std::vector& args); void asset_compress(const std::vector& args); void asset_decompress(const std::vector& args); void build_enums_cache(const std::vector& args); static const std::vector COMMANDS = { // Extract { .flag = "-e", .args = 5, .func = &extract, }, // Build { .flag = "-b", .args = 4, .func = build, }, // Build enums cache { .flag = "-bc", .args = 2, .func = build_enums_cache, }, // Asset includes { .flag = "-i", .args = 5, .func = asset_includes, }, // Asset compile { .flag = "-c", .args = 2, .func = asset_compile, }, // Asset compress file { .flag = "-fc", .args = 2, .func = asset_compress, }, // Asset decompress file { .flag = "-fd", .args = 2, .func = asset_decompress, }, }; void extract(const std::vector& args) { std::string version = args[0]; // us_1.0 std::string assetsDir = args[1]; // /assets std::string configsPath = args[2]; // /extract-ver std::string baseromsPath = args[3]; // /baseroms std::string outputPath = args[4]; // set_assets_folder_path(assetsDir + "/vanilla"); set_version(version); Extractor extractor(version, configsPath, baseromsPath, outputPath); } void build(const std::vector& args) { std::string version = args[0]; // us_1.0 std::string assetsDir = args[1]; // /assets std::string sourcePath = args[2]; // Input .json filepath std::string outputPath = args[3]; // Output .bin filepath set_assets_folder_path(assetsDir); set_version(version); Builder builder(sourcePath, outputPath); } void asset_includes(const std::vector& args) { std::string version = args[0]; // us_1.0 std::string assetsDir = args[1]; // /assets std::string includeDir = args[2]; // /include std::string buildDir = args[3]; // /build std::string assetsAsmDir = args[4]; // /asm/assets set_assets_folder_path(assetsDir); set_version(version); AssetEnumsHeader assetEnumsHeader(includeDir); AssetAsmIncludes assetAsmIncludes(assetsDir + "/" + version, buildDir + "/" + version, assetsAsmDir); } void asset_compile(const std::vector& args) { std::string version = args[0]; // us_1.0 std::string assetsDir = args[1]; // /assets set_assets_folder_path(assetsDir); set_version(version); AssetCompiler compiler; } void asset_compress(const std::vector& args) { DKRCompression compression; std::string inputFilename = args[0]; std::string outputFilename = args[1]; std::vector inputBinary, outputBinary; if(compression.readBinaryFile(inputBinary, inputFilename)) { if(inputBinary.size() == 0) { compression.writeBinaryFile(inputBinary, outputFilename); } else { outputBinary = compression.compressBuffer(inputBinary); compression.writeBinaryFile(outputBinary, outputFilename); } } else { display_error_and_abort("Could not read file: ", inputFilename); } } void asset_decompress(const std::vector& args) { DKRCompression compression; std::string inputFilename = args[0]; std::string outputFilename = args[1]; std::vector inputBinary, outputBinary; if(compression.readBinaryFile(inputBinary, inputFilename)) { if(inputBinary.size() == 0) { compression.writeBinaryFile(inputBinary, outputFilename); } else { outputBinary = compression.decompressBuffer(inputBinary); compression.writeBinaryFile(outputBinary, outputFilename); } } else { display_error_and_abort("Could not read file: ", inputFilename); } } void build_enums_cache(const std::vector& args) { std::string version = args[0]; // us_1.0 std::string enumsHeaderPath = args[1]; // /include/enums.h set_version(version); generate_enums_cache(enumsHeaderPath); } int main(int argc, char *argv[]) { if (argc == 1) { print_usage(); return 1; } std::string flag = argv[1]; auto it = std::find_if(COMMANDS.begin(), COMMANDS.end(), [&flag](const Command& cmd) { return cmd.flag == flag; }); if (it == COMMANDS.end()) { print_usage(); return 1; } if (argc - 2 != it->args) { display_error_and_abort("Expected ", it->args, " args but was given ", argc - 2, "."); return 1; } std::vector args(argv + 2, argv + argc); it->func(args); return 0; }