add --language option to disassemble_quest_script
This commit is contained in:
+2
-2
@@ -1163,9 +1163,9 @@ Action a_disassemble_quest_script(
|
||||
if (!args.get<bool>("decompressed")) {
|
||||
data = prs_decompress(data);
|
||||
}
|
||||
uint8_t language = args.get<bool>("japanese") ? 0 : 1;
|
||||
uint8_t override_language = args.get<uint8_t>("language", 0xFF);
|
||||
bool reassembly_mode = args.get<bool>("reassembly");
|
||||
string result = disassemble_quest_script(data.data(), data.size(), version, language, reassembly_mode);
|
||||
string result = disassemble_quest_script(data.data(), data.size(), version, override_language, reassembly_mode);
|
||||
write_output_data(args, result.data(), result.size(), "txt");
|
||||
});
|
||||
Action a_disassemble_quest_map(
|
||||
|
||||
+22
-4
@@ -900,7 +900,7 @@ opcodes_by_name_for_version(Version v) {
|
||||
return index;
|
||||
}
|
||||
|
||||
std::string disassemble_quest_script(const void* data, size_t size, Version version, uint8_t language, bool reassembly_mode) {
|
||||
std::string disassemble_quest_script(const void* data, size_t size, Version version, uint8_t override_language, bool reassembly_mode) {
|
||||
StringReader r(data, size);
|
||||
deque<string> lines;
|
||||
lines.emplace_back(string_printf(".version %s", name_for_enum(version)));
|
||||
@@ -908,6 +908,7 @@ std::string disassemble_quest_script(const void* data, size_t size, Version vers
|
||||
bool use_wstrs = false;
|
||||
size_t code_offset = 0;
|
||||
size_t function_table_offset = 0;
|
||||
uint8_t language;
|
||||
switch (version) {
|
||||
case Version::DC_NTE: {
|
||||
const auto& header = r.get<PSOQuestHeaderDCNTE>();
|
||||
@@ -923,8 +924,12 @@ std::string disassemble_quest_script(const void* data, size_t size, Version vers
|
||||
const auto& header = r.get<PSOQuestHeaderDC>();
|
||||
code_offset = header.code_offset;
|
||||
function_table_offset = header.function_table_offset;
|
||||
if (header.language < 5) {
|
||||
if (override_language != 0xFF) {
|
||||
language = override_language;
|
||||
} else if (header.language < 5) {
|
||||
language = header.language;
|
||||
} else {
|
||||
language = 1;
|
||||
}
|
||||
lines.emplace_back(string_printf(".quest_num %hu", header.quest_number.load()));
|
||||
lines.emplace_back(string_printf(".language %hhu", header.language));
|
||||
@@ -939,8 +944,12 @@ std::string disassemble_quest_script(const void* data, size_t size, Version vers
|
||||
const auto& header = r.get<PSOQuestHeaderPC>();
|
||||
code_offset = header.code_offset;
|
||||
function_table_offset = header.function_table_offset;
|
||||
if (header.language < 8) {
|
||||
if (override_language != 0xFF) {
|
||||
language = override_language;
|
||||
} else if (header.language < 8) {
|
||||
language = header.language;
|
||||
} else {
|
||||
language = 1;
|
||||
}
|
||||
lines.emplace_back(string_printf(".quest_num %hu", header.quest_number.load()));
|
||||
lines.emplace_back(string_printf(".language %hhu", header.language));
|
||||
@@ -957,8 +966,12 @@ std::string disassemble_quest_script(const void* data, size_t size, Version vers
|
||||
const auto& header = r.get<PSOQuestHeaderGC>();
|
||||
code_offset = header.code_offset;
|
||||
function_table_offset = header.function_table_offset;
|
||||
if (header.language < 5) {
|
||||
if (override_language != 0xFF) {
|
||||
language = override_language;
|
||||
} else if (header.language < 5) {
|
||||
language = header.language;
|
||||
} else {
|
||||
language = 1;
|
||||
}
|
||||
lines.emplace_back(string_printf(".quest_num %hhu", header.quest_number));
|
||||
lines.emplace_back(string_printf(".language %hhu", header.language));
|
||||
@@ -973,6 +986,11 @@ std::string disassemble_quest_script(const void* data, size_t size, Version vers
|
||||
const auto& header = r.get<PSOQuestHeaderBB>();
|
||||
code_offset = header.code_offset;
|
||||
function_table_offset = header.function_table_offset;
|
||||
if (override_language != 0xFF) {
|
||||
language = override_language;
|
||||
} else {
|
||||
language = 1;
|
||||
}
|
||||
lines.emplace_back(string_printf(".quest_num %hu", header.quest_number.load()));
|
||||
lines.emplace_back(string_printf(".episode %s", name_for_header_episode_number(header.episode)));
|
||||
lines.emplace_back(string_printf(".max_players %hhu", header.episode));
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ struct PSOQuestHeaderBB {
|
||||
|
||||
Episode episode_for_quest_episode_number(uint8_t episode_number);
|
||||
|
||||
std::string disassemble_quest_script(const void* data, size_t size, Version version, uint8_t language, bool reassembly_mode);
|
||||
std::string disassemble_quest_script(const void* data, size_t size, Version version, uint8_t override_language = 0xFF, bool reassembly_mode = false);
|
||||
std::string assemble_quest_script(const std::string& text);
|
||||
|
||||
Episode find_quest_episode_from_script(const void* data, size_t size, Version version);
|
||||
|
||||
Reference in New Issue
Block a user