diff --git a/src/gsc/assembler.cpp b/src/gsc/assembler.cpp index a71b1584..c4c49280 100644 --- a/src/gsc/assembler.cpp +++ b/src/gsc/assembler.cpp @@ -509,6 +509,7 @@ auto assembler::assemble_switch_table(instruction const& inst) -> void } else { + // TODO: Sledgehammer's shenanigans (string id == 0) script_.write((ctx_->engine() == engine::iw9) ? 0 : i + 1); stack_.write_cstr(encrypt_string(inst.data[1 + (4 * i) + 2])); } diff --git a/src/gsc/disassembler.cpp b/src/gsc/disassembler.cpp index 5fbccdee..5b15522e 100644 --- a/src/gsc/disassembler.cpp +++ b/src/gsc/disassembler.cpp @@ -512,8 +512,19 @@ auto disassembler::disassemble_switch_table(instruction& inst) -> void { if (data == 0) { - stack_.read_cstr(); // [0x01 0x00] unencrypted - inst.data.push_back("default"); + auto str = stack_.read_cstr(); // [0x01 0x00] unencrypted + + // Sledgehammer's shenanigans + if (ctx_->engine() == engine::s2 && str != "\x01") + { + inst.data.push_back("case"); + inst.data.push_back(std::format("{}", static_cast(switch_type::string))); + inst.data.push_back(decrypt_string(str)); + } + else + { + inst.data.push_back("default"); + } } else if (data < 0x100000) {