From b04434a3cb078e92925c2cd5fb13e1cd47a2399f Mon Sep 17 00:00:00 2001 From: xensik Date: Tue, 23 Aug 2022 14:07:32 +0200 Subject: [PATCH] iw5 console interface --- src/tool/xsk/main.cpp | 142 ++++++++++++++++++++++-------------------- 1 file changed, 74 insertions(+), 68 deletions(-) diff --git a/src/tool/xsk/main.cpp b/src/tool/xsk/main.cpp index b2f75ace..5e30ec5f 100644 --- a/src/tool/xsk/main.cpp +++ b/src/tool/xsk/main.cpp @@ -5,6 +5,7 @@ #include "stdafx.hpp" #include "utils/xsk/utils.hpp" +#include "experimental/iw5c/xsk/iw5c.hpp" #include "iw5/xsk/iw5.hpp" #include "iw6/xsk/iw6.hpp" #include "iw7/xsk/iw7.hpp" @@ -19,46 +20,47 @@ namespace xsk { -enum class encd { __, SOURCE, ASSEMBLY, BINARY }; -enum class mode { __, ASM, DISASM, COMP, DECOMP }; -enum class game { __, IW5, IW6, IW7, IW8, S1, S2, S4, H1, H2, T6 }; +enum class encd { _, source, assembly, binary }; +enum class mode { _, assemble, disassemble, compile, decompile }; +enum class game { _, iw5c, iw5, iw6, iw7, iw8, s1, s2, s4, h1, h2, t6 }; const std::map exts = { - { ".gsc", encd::SOURCE }, - { ".cgsc", encd::BINARY }, - { ".gscbin", encd::BINARY }, - { ".gscasm", encd::ASSEMBLY }, + { ".gsc", encd::source }, + { ".cgsc", encd::binary }, + { ".gscbin", encd::binary }, + { ".gscasm", encd::assembly }, }; const std::map modes = { - { "asm", mode::ASM }, - { "disasm", mode::DISASM }, - { "comp", mode::COMP }, - { "decomp", mode::DECOMP }, + { "asm", mode::assemble }, + { "disasm", mode::disassemble }, + { "comp", mode::compile }, + { "decomp", mode::decompile }, }; const std::map games = { - { "iw5", game::IW5 }, - { "iw6", game::IW6 }, - { "iw7", game::IW7 }, - { "iw8", game::IW8 }, - { "s1", game::S1 }, - { "s2", game::S2 }, - { "s4", game::S4 }, - { "h1", game::H1 }, - { "h2", game::H2 }, - { "t6", game::T6 }, + { "iw5c", game::iw5c }, + { "iw5", game::iw5 }, + { "iw6", game::iw6 }, + { "iw7", game::iw7 }, + { "iw8", game::iw8 }, + { "s1", game::s1 }, + { "s2", game::s2 }, + { "s4", game::s4 }, + { "h1", game::h1 }, + { "h2", game::h2 }, + { "t6", game::t6 }, }; const std::map encds = { - { mode::ASM , encd::ASSEMBLY }, - { mode::DISASM, encd::BINARY }, - { mode::COMP, encd::SOURCE }, - { mode::DECOMP, encd::BINARY }, + { mode::assemble , encd::assembly }, + { mode::disassemble, encd::binary }, + { mode::compile, encd::source }, + { mode::decompile, encd::binary }, }; auto overwrite_prompt(const std::string& file) -> bool @@ -98,23 +100,25 @@ auto choose_resolver_file_name(uint32_t id, game& game) -> std::string { switch (game) { - case game::IW5: + case game::iw5c: + return iw5c::resolver::token_name(static_cast(id)); + case game::iw5: return iw5::resolver::token_name(static_cast(id)); - case game::IW6: + case game::iw6: return iw6::resolver::file_name(static_cast(id)); - case game::IW7: + case game::iw7: return iw7::resolver::file_name(id); - case game::IW8: + case game::iw8: return iw8::resolver::file_name(id); - case game::S1: + case game::s1: return s1::resolver::file_name(static_cast(id)); - case game::S2: + case game::s2: return s2::resolver::file_name(static_cast(id)); - case game::S4: + case game::s4: return s4::resolver::file_name(id); - case game::H1: + case game::h1: return h1::resolver::token_name(static_cast(id)); - case game::H2: + case game::h2: return h2::resolver::token_name(static_cast(id)); default: return ""; @@ -377,7 +381,7 @@ void decompile_file(game game, std::string file) } else { - auto filename = choose_resolver_file_name(std::atoi(scriptid.data()), game); + auto filename = choose_resolver_file_name(std::atoi(scriptid.data()), game);/*xsk::utils::string::va("%s_%04X", scriptid.data(), std::atoi(scriptid.data()));*/ auto count = file.find(scriptid); if (count != std::string::npos) @@ -400,29 +404,31 @@ void decompile_file(game game, std::string file) void init() { - contexts[game::IW5] = std::make_unique(); - contexts[game::IW5]->init(build::prod, utils::file::read); - contexts[game::IW6] = std::make_unique(); - contexts[game::IW6]->init(build::prod, utils::file::read); - contexts[game::IW7] = std::make_unique(); - contexts[game::IW7]->init(build::prod, utils::file::read); - contexts[game::IW8] = std::make_unique(); - contexts[game::IW8]->init(build::prod, utils::file::read); - contexts[game::S1] = std::make_unique(); - contexts[game::S1]->init(build::prod, utils::file::read); - contexts[game::S2] = std::make_unique(); - contexts[game::S2]->init(build::prod, utils::file::read); - contexts[game::S4] = std::make_unique(); - contexts[game::S4]->init(build::prod, utils::file::read); - contexts[game::H1] = std::make_unique(); - contexts[game::H1]->init(build::prod, utils::file::read); - contexts[game::H2] = std::make_unique(); - contexts[game::H2]->init(build::prod, utils::file::read); + contexts[game::iw5c] = std::make_unique(); + contexts[game::iw5c]->init(build::prod, utils::file::read); + contexts[game::iw5] = std::make_unique(); + contexts[game::iw5]->init(build::prod, utils::file::read); + contexts[game::iw6] = std::make_unique(); + contexts[game::iw6]->init(build::prod, utils::file::read); + contexts[game::iw7] = std::make_unique(); + contexts[game::iw7]->init(build::prod, utils::file::read); + contexts[game::iw8] = std::make_unique(); + contexts[game::iw8]->init(build::prod, utils::file::read); + contexts[game::s1] = std::make_unique(); + contexts[game::s1]->init(build::prod, utils::file::read); + contexts[game::s2] = std::make_unique(); + contexts[game::s2]->init(build::prod, utils::file::read); + contexts[game::s4] = std::make_unique(); + contexts[game::s4]->init(build::prod, utils::file::read); + contexts[game::h1] = std::make_unique(); + contexts[game::h1]->init(build::prod, utils::file::read); + contexts[game::h2] = std::make_unique(); + contexts[game::h2]->init(build::prod, utils::file::read); - funcs[mode::ASM] = assemble_file; - funcs[mode::DISASM] = disassemble_file; - funcs[mode::COMP] = compile_file; - funcs[mode::DECOMP] = decompile_file; + funcs[mode::assemble] = assemble_file; + funcs[mode::disassemble] = disassemble_file; + funcs[mode::compile] = compile_file; + funcs[mode::decompile] = decompile_file; } } // namespace xsk::gsc @@ -527,13 +533,13 @@ void decompile_file(game game, const std::filesystem::path& file) void init() { - contexts[game::T6] = std::make_unique(); - contexts[game::T6]->init(build::prod, utils::file::read); + contexts[game::t6] = std::make_unique(); + contexts[game::t6]->init(build::prod, utils::file::read); - funcs[mode::ASM] = assemble_file; - funcs[mode::DISASM] = disassemble_file; - funcs[mode::COMP] = compile_file; - funcs[mode::DECOMP] = decompile_file; + funcs[mode::assemble] = assemble_file; + funcs[mode::disassemble] = disassemble_file; + funcs[mode::compile] = compile_file; + funcs[mode::decompile] = decompile_file; } } // namespace xsk::arc @@ -546,7 +552,7 @@ void execute(mode mode, game game, const std::string& path) { if (entry.is_regular_file()) { - if (game < game::T6) + if (game < game::t6) gsc::funcs[mode](game, entry.path().generic_string()); else arc::funcs[mode](game, std::filesystem::path(entry.path().generic_string(), std::filesystem::path::format::generic_format)); @@ -555,7 +561,7 @@ void execute(mode mode, game game, const std::string& path) } else if (std::filesystem::is_regular_file(path)) { - if (game < game::T6) + if (game < game::t6) gsc::funcs[mode](game, path); else arc::funcs[mode](game, std::filesystem::path(path, std::filesystem::path::format::generic_format)); @@ -609,7 +615,7 @@ void print_usage() { std::cout << "usage: gsc-tool.exe \n"; std::cout << "\t* modes: asm, disasm, comp, decomp\n"; - std::cout << "\t* games: iw5, iw6, iw7, iw8, s1, s2, s4, h1, h2, t6\n"; + std::cout << "\t* games: iw5c, iw5, iw6, iw7, iw8, s1, s2, s4, h1, h2, t6\n"; std::cout << "\t* paths: file or directory (recursive)\n"; } /* @@ -708,8 +714,8 @@ void shell() void main(std::uint32_t argc, char** argv) { auto path = ""s; - mode mode = mode::__; - game game = game::__; + mode mode = mode::_; + game game = game::_; gsc::init(); arc::init();