iw5 console interface
This commit is contained in:
parent
cfe8c3de0e
commit
af064c5f40
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "stdafx.hpp"
|
#include "stdafx.hpp"
|
||||||
#include "utils/xsk/utils.hpp"
|
#include "utils/xsk/utils.hpp"
|
||||||
|
#include "experimental/iw5c/xsk/iw5c.hpp"
|
||||||
#include "iw5/xsk/iw5.hpp"
|
#include "iw5/xsk/iw5.hpp"
|
||||||
#include "iw6/xsk/iw6.hpp"
|
#include "iw6/xsk/iw6.hpp"
|
||||||
#include "iw7/xsk/iw7.hpp"
|
#include "iw7/xsk/iw7.hpp"
|
||||||
@ -19,46 +20,47 @@
|
|||||||
namespace xsk
|
namespace xsk
|
||||||
{
|
{
|
||||||
|
|
||||||
enum class encd { __, SOURCE, ASSEMBLY, BINARY };
|
enum class encd { _, source, assembly, binary };
|
||||||
enum class mode { __, ASM, DISASM, COMP, DECOMP };
|
enum class mode { _, assemble, disassemble, compile, decompile };
|
||||||
enum class game { __, IW5, IW6, IW7, IW8, S1, S2, S4, H1, H2, T6 };
|
enum class game { _, iw5c, iw5, iw6, iw7, iw8, s1, s2, s4, h1, h2, t6 };
|
||||||
|
|
||||||
const std::map<std::string, encd> exts =
|
const std::map<std::string, encd> exts =
|
||||||
{
|
{
|
||||||
{ ".gsc", encd::SOURCE },
|
{ ".gsc", encd::source },
|
||||||
{ ".cgsc", encd::BINARY },
|
{ ".cgsc", encd::binary },
|
||||||
{ ".gscbin", encd::BINARY },
|
{ ".gscbin", encd::binary },
|
||||||
{ ".gscasm", encd::ASSEMBLY },
|
{ ".gscasm", encd::assembly },
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::map<std::string, mode> modes =
|
const std::map<std::string, mode> modes =
|
||||||
{
|
{
|
||||||
{ "asm", mode::ASM },
|
{ "asm", mode::assemble },
|
||||||
{ "disasm", mode::DISASM },
|
{ "disasm", mode::disassemble },
|
||||||
{ "comp", mode::COMP },
|
{ "comp", mode::compile },
|
||||||
{ "decomp", mode::DECOMP },
|
{ "decomp", mode::decompile },
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::map<std::string, game> games =
|
const std::map<std::string, game> games =
|
||||||
{
|
{
|
||||||
{ "iw5", game::IW5 },
|
{ "iw5c", game::iw5c },
|
||||||
{ "iw6", game::IW6 },
|
{ "iw5", game::iw5 },
|
||||||
{ "iw7", game::IW7 },
|
{ "iw6", game::iw6 },
|
||||||
{ "iw8", game::IW8 },
|
{ "iw7", game::iw7 },
|
||||||
{ "s1", game::S1 },
|
{ "iw8", game::iw8 },
|
||||||
{ "s2", game::S2 },
|
{ "s1", game::s1 },
|
||||||
{ "s4", game::S4 },
|
{ "s2", game::s2 },
|
||||||
{ "h1", game::H1 },
|
{ "s4", game::s4 },
|
||||||
{ "h2", game::H2 },
|
{ "h1", game::h1 },
|
||||||
{ "t6", game::T6 },
|
{ "h2", game::h2 },
|
||||||
|
{ "t6", game::t6 },
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::map<mode, encd> encds =
|
const std::map<mode, encd> encds =
|
||||||
{
|
{
|
||||||
{ mode::ASM , encd::ASSEMBLY },
|
{ mode::assemble , encd::assembly },
|
||||||
{ mode::DISASM, encd::BINARY },
|
{ mode::disassemble, encd::binary },
|
||||||
{ mode::COMP, encd::SOURCE },
|
{ mode::compile, encd::source },
|
||||||
{ mode::DECOMP, encd::BINARY },
|
{ mode::decompile, encd::binary },
|
||||||
};
|
};
|
||||||
|
|
||||||
auto overwrite_prompt(const std::string& file) -> bool
|
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)
|
switch (game)
|
||||||
{
|
{
|
||||||
case game::IW5:
|
case game::iw5c:
|
||||||
|
return iw5c::resolver::token_name(static_cast<std::uint16_t>(id));
|
||||||
|
case game::iw5:
|
||||||
return iw5::resolver::token_name(static_cast<std::uint16_t>(id));
|
return iw5::resolver::token_name(static_cast<std::uint16_t>(id));
|
||||||
case game::IW6:
|
case game::iw6:
|
||||||
return iw6::resolver::file_name(static_cast<std::uint16_t>(id));
|
return iw6::resolver::file_name(static_cast<std::uint16_t>(id));
|
||||||
case game::IW7:
|
case game::iw7:
|
||||||
return iw7::resolver::file_name(id);
|
return iw7::resolver::file_name(id);
|
||||||
case game::IW8:
|
case game::iw8:
|
||||||
return iw8::resolver::file_name(id);
|
return iw8::resolver::file_name(id);
|
||||||
case game::S1:
|
case game::s1:
|
||||||
return s1::resolver::file_name(static_cast<std::uint16_t>(id));
|
return s1::resolver::file_name(static_cast<std::uint16_t>(id));
|
||||||
case game::S2:
|
case game::s2:
|
||||||
return s2::resolver::file_name(static_cast<std::uint16_t>(id));
|
return s2::resolver::file_name(static_cast<std::uint16_t>(id));
|
||||||
case game::S4:
|
case game::s4:
|
||||||
return s4::resolver::file_name(id);
|
return s4::resolver::file_name(id);
|
||||||
case game::H1:
|
case game::h1:
|
||||||
return h1::resolver::token_name(static_cast<std::uint16_t>(id));
|
return h1::resolver::token_name(static_cast<std::uint16_t>(id));
|
||||||
case game::H2:
|
case game::h2:
|
||||||
return h2::resolver::token_name(static_cast<std::uint16_t>(id));
|
return h2::resolver::token_name(static_cast<std::uint16_t>(id));
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
@ -377,7 +381,7 @@ void decompile_file(game game, std::string file)
|
|||||||
}
|
}
|
||||||
else
|
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);
|
auto count = file.find(scriptid);
|
||||||
|
|
||||||
if (count != std::string::npos)
|
if (count != std::string::npos)
|
||||||
@ -400,29 +404,31 @@ void decompile_file(game game, std::string file)
|
|||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
contexts[game::IW5] = std::make_unique<iw5::context>();
|
contexts[game::iw5c] = std::make_unique<iw5c::context>();
|
||||||
contexts[game::IW5]->init(build::prod, utils::file::read);
|
contexts[game::iw5c]->init(build::prod, utils::file::read);
|
||||||
contexts[game::IW6] = std::make_unique<iw6::context>();
|
contexts[game::iw5] = std::make_unique<iw5::context>();
|
||||||
contexts[game::IW6]->init(build::prod, utils::file::read);
|
contexts[game::iw5]->init(build::prod, utils::file::read);
|
||||||
contexts[game::IW7] = std::make_unique<iw7::context>();
|
contexts[game::iw6] = std::make_unique<iw6::context>();
|
||||||
contexts[game::IW7]->init(build::prod, utils::file::read);
|
contexts[game::iw6]->init(build::prod, utils::file::read);
|
||||||
contexts[game::IW8] = std::make_unique<iw8::context>();
|
contexts[game::iw7] = std::make_unique<iw7::context>();
|
||||||
contexts[game::IW8]->init(build::prod, utils::file::read);
|
contexts[game::iw7]->init(build::prod, utils::file::read);
|
||||||
contexts[game::S1] = std::make_unique<s1::context>();
|
contexts[game::iw8] = std::make_unique<iw8::context>();
|
||||||
contexts[game::S1]->init(build::prod, utils::file::read);
|
contexts[game::iw8]->init(build::prod, utils::file::read);
|
||||||
contexts[game::S2] = std::make_unique<s2::context>();
|
contexts[game::s1] = std::make_unique<s1::context>();
|
||||||
contexts[game::S2]->init(build::prod, utils::file::read);
|
contexts[game::s1]->init(build::prod, utils::file::read);
|
||||||
contexts[game::S4] = std::make_unique<s4::context>();
|
contexts[game::s2] = std::make_unique<s2::context>();
|
||||||
contexts[game::S4]->init(build::prod, utils::file::read);
|
contexts[game::s2]->init(build::prod, utils::file::read);
|
||||||
contexts[game::H1] = std::make_unique<h1::context>();
|
contexts[game::s4] = std::make_unique<s4::context>();
|
||||||
contexts[game::H1]->init(build::prod, utils::file::read);
|
contexts[game::s4]->init(build::prod, utils::file::read);
|
||||||
contexts[game::H2] = std::make_unique<h2::context>();
|
contexts[game::h1] = std::make_unique<h1::context>();
|
||||||
contexts[game::H2]->init(build::prod, utils::file::read);
|
contexts[game::h1]->init(build::prod, utils::file::read);
|
||||||
|
contexts[game::h2] = std::make_unique<h2::context>();
|
||||||
|
contexts[game::h2]->init(build::prod, utils::file::read);
|
||||||
|
|
||||||
funcs[mode::ASM] = assemble_file;
|
funcs[mode::assemble] = assemble_file;
|
||||||
funcs[mode::DISASM] = disassemble_file;
|
funcs[mode::disassemble] = disassemble_file;
|
||||||
funcs[mode::COMP] = compile_file;
|
funcs[mode::compile] = compile_file;
|
||||||
funcs[mode::DECOMP] = decompile_file;
|
funcs[mode::decompile] = decompile_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace xsk::gsc
|
} // namespace xsk::gsc
|
||||||
@ -527,13 +533,13 @@ void decompile_file(game game, const std::filesystem::path& file)
|
|||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
contexts[game::T6] = std::make_unique<t6::context>();
|
contexts[game::t6] = std::make_unique<t6::context>();
|
||||||
contexts[game::T6]->init(build::prod, utils::file::read);
|
contexts[game::t6]->init(build::prod, utils::file::read);
|
||||||
|
|
||||||
funcs[mode::ASM] = assemble_file;
|
funcs[mode::assemble] = assemble_file;
|
||||||
funcs[mode::DISASM] = disassemble_file;
|
funcs[mode::disassemble] = disassemble_file;
|
||||||
funcs[mode::COMP] = compile_file;
|
funcs[mode::compile] = compile_file;
|
||||||
funcs[mode::DECOMP] = decompile_file;
|
funcs[mode::decompile] = decompile_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace xsk::arc
|
} // namespace xsk::arc
|
||||||
@ -546,7 +552,7 @@ void execute(mode mode, game game, const std::string& path)
|
|||||||
{
|
{
|
||||||
if (entry.is_regular_file())
|
if (entry.is_regular_file())
|
||||||
{
|
{
|
||||||
if (game < game::T6)
|
if (game < game::t6)
|
||||||
gsc::funcs[mode](game, entry.path().generic_string());
|
gsc::funcs[mode](game, entry.path().generic_string());
|
||||||
else
|
else
|
||||||
arc::funcs[mode](game, std::filesystem::path(entry.path().generic_string(), std::filesystem::path::format::generic_format));
|
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))
|
else if (std::filesystem::is_regular_file(path))
|
||||||
{
|
{
|
||||||
if (game < game::T6)
|
if (game < game::t6)
|
||||||
gsc::funcs[mode](game, path);
|
gsc::funcs[mode](game, path);
|
||||||
else
|
else
|
||||||
arc::funcs[mode](game, std::filesystem::path(path, std::filesystem::path::format::generic_format));
|
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 <mode> <game> <path>\n";
|
std::cout << "usage: gsc-tool.exe <mode> <game> <path>\n";
|
||||||
std::cout << "\t* modes: asm, disasm, comp, decomp\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";
|
std::cout << "\t* paths: file or directory (recursive)\n";
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -708,8 +714,8 @@ void shell()
|
|||||||
void main(std::uint32_t argc, char** argv)
|
void main(std::uint32_t argc, char** argv)
|
||||||
{
|
{
|
||||||
auto path = ""s;
|
auto path = ""s;
|
||||||
mode mode = mode::__;
|
mode mode = mode::_;
|
||||||
game game = game::__;
|
game game = game::_;
|
||||||
|
|
||||||
gsc::init();
|
gsc::init();
|
||||||
arc::init();
|
arc::init();
|
||||||
|
Loading…
Reference in New Issue
Block a user