diff --git a/.gitignore b/.gitignore index 1ea801c871..bd3a231d0a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ cmake-build-debug/* .idea/* build/* decompiler_out/* +decompiler_out2/* logs/* # wsl apparently builds to here? diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 4493324bd7..a3788edd51 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -211,6 +211,34 @@ void TypeSystem::forward_declare_type_method_count(const std::string& name, int m_forward_declared_method_counts[name] = num_methods; } +/*! + * forward declare, but allow the method count to be too large by up to 3 because jak2 stores + * method counts in v2/v4's like n*4 + 3. + */ +void TypeSystem::forward_declare_type_method_count_multiple_of_4(const std::string& name, + int num_methods) { + auto existing_fwd = m_forward_declared_method_counts.find(name); + if (existing_fwd != m_forward_declared_method_counts.end() && + existing_fwd->second + 3 < num_methods) { + throw_typesystem_error( + "Type {} was originally forward declared with {} methods and is now being forward declared " + "with {} methods", + name, existing_fwd->second, num_methods); + } + + auto existing_type = m_types.find(name); + if (existing_type != m_types.end()) { + int existing_count = get_next_method_id(existing_type->second.get()); + if (existing_count + 3 < num_methods) { + throw_typesystem_error( + "Type {} was defined with {} methods and is now being forward declared with {} methods", + name, existing_count, num_methods); + } + } + + m_forward_declared_method_counts[name] = num_methods; +} + int TypeSystem::get_type_method_count(const std::string& name) const { auto result = try_get_type_method_count(name); if (result) { diff --git a/common/type_system/TypeSystem.h b/common/type_system/TypeSystem.h index 8943d6548f..c21467558b 100644 --- a/common/type_system/TypeSystem.h +++ b/common/type_system/TypeSystem.h @@ -128,6 +128,8 @@ class TypeSystem { void forward_declare_type_as_type(const std::string& name); void forward_declare_type_as(const std::string& new_type, const std::string& parent_type); void forward_declare_type_method_count(const std::string& name, int num_methods); + void forward_declare_type_method_count_multiple_of_4(const std::string& name, int num_methods); + int get_type_method_count(const std::string& name) const; std::optional try_get_type_method_count(const std::string& name) const; std::string get_runtime_type(const TypeSpec& ts); diff --git a/common/util/dgo_util.cpp b/common/util/dgo_util.cpp index 4a7635239e..3d940b29e1 100644 --- a/common/util/dgo_util.cpp +++ b/common/util/dgo_util.cpp @@ -19,33 +19,35 @@ void assert_string_empty_after(const char* str, int size) { } std::string get_object_file_name(const std::string& original_name, u8* data, int size) { - const std::string art_group_text = - fmt::format("/src/next/data/art-group{}/", - versions::ART_FILE_VERSION); // todo, this may change in other games + const std::string art_group_text_strings[] = { + fmt::format("/src/next/data/art-group{}/", versions::jak1::ART_FILE_VERSION), + fmt::format("/src/jak2/final/art-group{}/", versions::jak2::ART_FILE_VERSION)}; const std::string suffix = "-ag.go"; - int len = int(art_group_text.length()); - for (int start = 0; start < size; start++) { - bool failed = false; - for (int i = 0; i < len; i++) { - if (start + i >= size || data[start + i] != art_group_text[i]) { - failed = true; - break; - } - } - - if (!failed) { - for (int i = 0; i < int(original_name.length()); i++) { - if (start + len + i >= size || data[start + len + i] != original_name[i]) { - ASSERT(false); + for (auto& art_group_text : art_group_text_strings) { + int len = int(art_group_text.length()); + for (int start = 0; start < size; start++) { + bool failed = false; + for (int i = 0; i < len; i++) { + if (start + i >= size || data[start + i] != art_group_text[i]) { + failed = true; + break; } } - ASSERT(int(suffix.length()) + start + len + int(original_name.length()) < size); - ASSERT( - !memcmp(data + start + len + original_name.length(), suffix.data(), suffix.length() + 1)); + if (!failed) { + for (int i = 0; i < int(original_name.length()); i++) { + if (start + len + i >= size || data[start + len + i] != original_name[i]) { + ASSERT(false); + } + } - return original_name + "-ag"; + ASSERT(int(suffix.length()) + start + len + int(original_name.length()) < size); + ASSERT(!memcmp(data + start + len + original_name.length(), suffix.data(), + suffix.length() + 1)); + + return original_name + "-ag"; + } } } diff --git a/common/util/dgo_util.h b/common/util/dgo_util.h index 10baaef466..5915bfea90 100644 --- a/common/util/dgo_util.h +++ b/common/util/dgo_util.h @@ -2,6 +2,7 @@ #include #include "common/common_types.h" +#include "common/versions.h" void assert_string_empty_after(const char* str, int size); std::string get_object_file_name(const std::string& original_name, u8* data, int size); \ No newline at end of file diff --git a/common/versions.h b/common/versions.h index de8cf234d4..e414f63f8a 100644 --- a/common/versions.h +++ b/common/versions.h @@ -14,12 +14,19 @@ constexpr s32 GOAL_VERSION_MINOR = 9; constexpr int DECOMPILER_VERSION = 4; +namespace jak1 { // these versions are from the game constexpr u32 ART_FILE_VERSION = 6; constexpr u32 LEVEL_FILE_VERSION = 30; constexpr u32 DGO_FILE_VERSION = 1; constexpr u32 RES_FILE_VERSION = 1; constexpr u32 TX_PAGE_VERSION = 7; +} // namespace jak1 + +namespace jak2 { +constexpr u32 ART_FILE_VERSION = 7; +} + } // namespace versions // GOAL kernel version (OpenGOAL changes this version from the game's version) @@ -28,4 +35,6 @@ constexpr int KERNEL_VERSION_MINOR = 0; // OVERLORD version returned by an RPC constexpr int IRX_VERSION_MAJOR = 2; -constexpr int IRX_VERSION_MINOR = 0; \ No newline at end of file +constexpr int IRX_VERSION_MINOR = 0; + +enum class GameVersion { Jak1 = 1, Jak2 = 2 }; \ No newline at end of file diff --git a/decompiler/Disasm/InstructionDecode.cpp b/decompiler/Disasm/InstructionDecode.cpp index 3aaa0e1625..daff8a7849 100644 --- a/decompiler/Disasm/InstructionDecode.cpp +++ b/decompiler/Disasm/InstructionDecode.cpp @@ -4,6 +4,7 @@ * This is the part of the disassembler that decodes MIPS instructions. */ +#include "third-party/fmt/core.h" #include "InstructionDecode.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "common/util/Assert.h" @@ -93,6 +94,7 @@ static InstructionKind decode_cop2(OpcodeFields fields) { return IK::CTC2; default: + ASSERT(false); return IK::UNKNOWN; } break; @@ -149,6 +151,10 @@ static InstructionKind decode_cop2(OpcodeFields fields) { ASSERT(fields.data & (1 << 25)); return IK::VFTOI12; + case 0b00101111111: + ASSERT(fields.data & (1 << 25)); + return IK::VFTOI15; + case 0b00100111100: ASSERT(fields.data & (1 << 25)); return IK::VITOF0; @@ -197,10 +203,16 @@ static InstructionKind decode_cop2(OpcodeFields fields) { ASSERT(fields.data & (1 << 25)); return IK::VOPMULA; + case 0b01011111101: + return IK::VMSUBA; + case 0b01100111100: ASSERT(fields.data & (1 << 25)); return IK::VMOVE; + case 0b01100111101: + return IK::VMR32; + case 0b01110111100: ASSERT(fields.data & (1 << 25)); return IK::VDIV; @@ -343,6 +355,7 @@ static InstructionKind decode_cop2(OpcodeFields fields) { ASSERT(fields.dest() == 0b0); return IK::VCALLMS; default: + ASSERT_MSG(false, fmt::format("unknown cop2 lower11 case 0b{:b}\n", fields.lower11())); return IK::UNKNOWN; } } @@ -355,6 +368,7 @@ static InstructionKind decode_W(OpcodeFields fields) { ASSERT(fields.ft() == 0); return IK::CVTSW; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -416,6 +430,7 @@ static InstructionKind decode_S(OpcodeFields fields) { ASSERT(fields.fd() == 0); return IK::CLES; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -432,6 +447,7 @@ static InstructionKind decode_BC1(OpcodeFields fields) { case 0b00011: return IK::BC1TL; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -454,6 +470,7 @@ static InstructionKind decode_cop1(OpcodeFields fields) { case 0b10100: return decode_W(fields); default: + ASSERT(false); return IK::UNKNOWN; } } @@ -467,6 +484,7 @@ static InstructionKind decode_c0(OpcodeFields fields) { ASSERT(fields.sa() == 0 && fields.rd() == 0 && fields.rt() == 0); return IK::EI; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -486,6 +504,7 @@ static InstructionKind decode_mt0(OpcodeFields fields) { if (fields.rd() == 0b11001 && fields.sa() == 0 && (fields.data & 1) == 1) { return IK::MTPC; } else { + ASSERT(false); return IK::UNKNOWN; } } @@ -500,6 +519,7 @@ static InstructionKind decode_mf0(OpcodeFields fields) { if (fields.rd() == 0b11001 && fields.sa() == 0 && (fields.data & 1) == 1) { return IK::MFPC; } else { + ASSERT(false); return IK::UNKNOWN; } } @@ -514,6 +534,7 @@ static InstructionKind decode_cop0(OpcodeFields fields) { case 0b10000: return decode_c0(fields); default: + ASSERT(false); return InstructionKind::UNKNOWN; } } @@ -533,6 +554,7 @@ static InstructionKind decode_mmi3(OpcodeFields fields) { ASSERT(fields.rs() == 0); return IK::PCPYH; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -546,6 +568,8 @@ static InstructionKind decode_mmi2(OpcodeFields fields) { return IK::PMADDH; case 0b10010: return IK::PAND; + case 0b10011: + return IK::PXOR; case 0b11100: return IK::PMULTH; case 0b11110: @@ -553,6 +577,7 @@ static InstructionKind decode_mmi2(OpcodeFields fields) { case 0b11111: return IK::PROT3W; default: + ASSERT_MSG(false, fmt::format("unknown mmi2: 0b{:b}\n", fields.MMI_func())); return IK::UNKNOWN; } } @@ -576,7 +601,10 @@ static InstructionKind decode_mmi1(OpcodeFields fields) { return IK::PEXTUH; case 0b11010: return IK::PEXTUB; + case 0b11011: + return IK::QFSRV; default: + ASSERT_MSG(false, fmt::format("unknown mmi1: 0b{:b}\n", fields.MMI_func())); return IK::UNKNOWN; } } @@ -594,8 +622,14 @@ static InstructionKind decode_mmi0(OpcodeFields fields) { return IK::PMAXW; case 0b00100: return IK::PADDH; + case 0b00101: + return IK::PSUBH; case 0b00111: return IK::PMAXH; + case 0b01000: + return IK::PADDB; + case 0b01010: + return IK::PCGTB; case 0b10010: return IK::PEXTLW; case 0b10011: @@ -609,6 +643,7 @@ static InstructionKind decode_mmi0(OpcodeFields fields) { case 0b11011: return IK::PPACB; default: + ASSERT_MSG(false, fmt::format("unknown mmi0: 0b{:b}\n", fields.MMI_func())); return IK::UNKNOWN; } } @@ -631,6 +666,7 @@ static InstructionKind decode_pmfhl(OpcodeFields fields) { ASSERT(fields.rt() == 0); return IK::PMFHL_LH; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -675,13 +711,14 @@ static InstructionKind decode_mmi(OpcodeFields fields) { case 0b111111: return IK::PSRAW; default: + ASSERT(false); return IK::UNKNOWN; } } -static InstructionKind decode_regimm(OpcodeFields files) { +static InstructionKind decode_regimm(OpcodeFields fields) { typedef InstructionKind IK; - switch (files.rt()) { + switch (fields.rt()) { case 0b00000: return IK::BLTZ; case 0b00001: @@ -692,7 +729,10 @@ static InstructionKind decode_regimm(OpcodeFields files) { return IK::BGEZL; case 0b10001: return IK::BGEZAL; + case 0b11000: + return IK::MTSAB; default: + ASSERT_MSG(false, fmt::format("unknown regimm: 0b{:b}\n", fields.rt())); return IK::UNKNOWN; } } @@ -710,6 +750,7 @@ static InstructionKind decode_sync(OpcodeFields fields) { } else if (stype == 0b10000) { return IK::SYNCP; } else { + ASSERT(false); return IK::UNKNOWN; } } @@ -855,6 +896,7 @@ static InstructionKind decode_special(OpcodeFields fields) { ASSERT(fields.rs() == 0); return IK::DSRA32; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -867,6 +909,7 @@ static InstructionKind decode_cache(OpcodeFields fields) { case 0b10100: return IK::CACHE_DXWBIN; default: + ASSERT(false); return IK::UNKNOWN; } } @@ -988,6 +1031,7 @@ static InstructionKind decode_opcode(uint32_t code) { case 0b111111: return IK::SD; default: + ASSERT(false); return IK::UNKNOWN; break; } diff --git a/decompiler/Disasm/InstructionDecode.h b/decompiler/Disasm/InstructionDecode.h index 45a2991637..5470e539bf 100644 --- a/decompiler/Disasm/InstructionDecode.h +++ b/decompiler/Disasm/InstructionDecode.h @@ -5,10 +5,6 @@ * The Instruction Decoder - converts a LinkedWord into a Instruction. * This is the part of the disassembler that decodes MIPS instructions. */ - -#ifndef NEXT_INSTRUCTIONDECODE_H -#define NEXT_INSTRUCTIONDECODE_H - #include "Instruction.h" namespace decompiler { @@ -17,4 +13,3 @@ class LinkedObjectFile; Instruction decode_instruction(LinkedWord& word, LinkedObjectFile& file, int seg_id, int word_id); } // namespace decompiler -#endif // NEXT_INSTRUCTIONDECODE_H diff --git a/decompiler/Disasm/OpcodeInfo.cpp b/decompiler/Disasm/OpcodeInfo.cpp index fb3c3c540d..7e7c1cbcc9 100644 --- a/decompiler/Disasm/OpcodeInfo.cpp +++ b/decompiler/Disasm/OpcodeInfo.cpp @@ -278,12 +278,18 @@ void init_opcode_info() { def(IK::SYNCL, "sync.l"); // Synchronize Shared Memory (Load) def(IK::ERET, "eret"); // Exception Return def(IK::EI, "ei"); // Enable Interrupt + def(IK::MTSAB, "mtsab") + .src_gpr(FT::RS) + .src(FT::ZIMM16, DT::IMM); // Move Byte Count to Shift Amount Register + drd_srs_srt(def(IK::QFSRV, "qfsrv")).gpr128(); // Quadword Funnel Shift Right Variable drd_srs_srt(def(IK::PPACB, "ppacb").gpr128()); // Parallel Pack to Byte drd_srs_srt(def(IK::PPACH, "ppach").gpr128()); // Parallel Pack to Halfword drd_srs_srt(def(IK::PPACW, "ppacw").gpr128()); // Parallel Pack to Word + drd_srs_srt(def(IK::PADDB, "paddb").gpr128()); // Parallel Add Byte drd_srs_srt(def(IK::PADDH, "paddh").gpr128()); // Parallel Add Halfword drd_srs_srt(def(IK::PADDW, "paddw").gpr128()); // Parallel Add Word + drd_srs_srt(def(IK::PSUBH, "psubh").gpr128()); // Parallel Subtract Halfword drd_srs_srt(def(IK::PSUBW, "psubw").gpr128()); // Parallel Subtract Word drd_srs_srt(def(IK::PMINH, "pminh").gpr128()); // Parallel Minimize Halfword drd_srs_srt(def(IK::PMINW, "pminw").gpr128()); // Parallel Minimize Word @@ -293,6 +299,7 @@ void init_opcode_info() { drd_srs_srt(def(IK::PEXTLH, "pextlh").gpr128()); // Parallel Extend Lower from Halfword drd_srs_srt(def(IK::PEXTLW, "pextlw").gpr128()); // Parallel Extend Lower from Word drd_srs_srt(def(IK::PCGTW, "pcgtw").gpr128()); // Parallel Compare for Greater Than Word + drd_srs_srt(def(IK::PCGTB, "pcgtb").gpr128()); // Parallel Compare for Greater Than Byte drd_srs_srt(def(IK::PCEQB, "pceqb").gpr128()); // Parallel Compare for Equal Byte drd_srs_srt(def(IK::PCEQW, "pceqw").gpr128()); // Parallel Compare for Equal Word drd_srs_srt(def(IK::PEXTUB, "pextub").gpr128()); // Parallel Extend Upper from Byte @@ -306,6 +313,7 @@ void init_opcode_info() { drd_srs_srt(def(IK::PAND, "pand").gpr128()); // Parallel And drd_srs_srt(def(IK::POR, "por").gpr128()); // Parallel Or drd_srs_srt(def(IK::PNOR, "pnor").gpr128()); // Parallel Not Or + drd_srs_srt(def(IK::PXOR, "pxor").gpr128()); // Parallel Exclusive Or def(IK::PEXEW, "pexew").gpr128().dst_gpr(FT::RD).src_gpr(FT::RT); // Parallel Exchange Even Word @@ -372,6 +380,7 @@ void init_opcode_info() { cd_dvft_svfs(def(IK::VFTOI0, "vftoi0")); // Conversion to Fixed Point cd_dvft_svfs(def(IK::VFTOI4, "vftoi4")); // Conversion to Fixed Point cd_dvft_svfs(def(IK::VFTOI12, "vftoi12")); // Conversion to Fixed Point + cd_dvft_svfs(def(IK::VFTOI15, "vftoi15")); // Conversion to Fixed Point cd_dvft_svfs(def(IK::VITOF0, "vitof0")); // Conversion to Floating Point Number cd_dvft_svfs(def(IK::VITOF12, "vitof12")); // Conversion to Floating Point Number cd_dvft_svfs(def(IK::VITOF15, "vitof15")); // Conversion to Floating Point Number @@ -407,6 +416,7 @@ void init_opcode_info() { cd_dacc_svfs_svft(def(IK::VMULA, "vmula")); cd_dacc_svfs_svft(def(IK::VADDA, "vadda")); cd_dacc_svfs_svft(def(IK::VMADDA, "vmadda")); + cd_dacc_svfs_svft(def(IK::VMSUBA, "vmsuba")); cd_dacc_svfs_svft(def(IK::VOPMULA, "vopmula")); @@ -431,6 +441,7 @@ void init_opcode_info() { .src(FT::ZERO, DT::VU_Q); def(IK::VRGET, "vrget").src(FT::DEST, DT::DEST).dst_vf(FT::FT); + def(IK::VMR32, "vmr32").src(FT::DEST, DT::DEST).src_vf(FT::FT).dst_vf(FT::FS); // integer def(IK::VMTIR, "vmtir").dst(FT::RT, DT::VI).src_vf(FT::FS).src(FT::BC, DT::BC); diff --git a/decompiler/Disasm/OpcodeInfo.h b/decompiler/Disasm/OpcodeInfo.h index 407ef78dec..1fdb5613d4 100644 --- a/decompiler/Disasm/OpcodeInfo.h +++ b/decompiler/Disasm/OpcodeInfo.h @@ -5,9 +5,6 @@ * Decoding info for each opcode. */ -#ifndef NEXT_OPCODEINFO_H -#define NEXT_OPCODEINFO_H - #include namespace decompiler { @@ -128,6 +125,8 @@ enum class InstructionKind { EI, CACHE_DXWBIN, PREF, + MTSAB, + QFSRV, // MMI unsorted PSLLW, @@ -144,6 +143,7 @@ enum class InstructionKind { PEXTLW, PPACH, PSUBW, + PCGTB, PCGTW, PEXTLH, PEXTLB, @@ -153,6 +153,8 @@ enum class InstructionKind { PADDH, PMAXW, PPACW, + PSUBH, + PADDB, // MMI 1 PCEQW, @@ -171,6 +173,7 @@ enum class InstructionKind { PMADDH, PMULTH, PEXEW, + PXOR, // MMI 3 POR, @@ -212,6 +215,7 @@ enum class InstructionKind { VFTOI0, VFTOI4, VFTOI12, + VFTOI15, VITOF0, VITOF12, VITOF15, @@ -247,6 +251,7 @@ enum class InstructionKind { VMULA, VADDA, VMADDA, + VMSUBA, VOPMULA, VDIV, @@ -268,6 +273,7 @@ enum class InstructionKind { VRNEXT, VNOP, VWAITQ, + VMR32, VCALLMS, // last cop2 macro instruction EE_OP_MAX @@ -361,4 +367,3 @@ extern OpcodeInfo gOpcodeInfo[(uint32_t)InstructionKind::EE_OP_MAX]; void init_opcode_info(); } // namespace decompiler -#endif // NEXT_OPCODEINFO_H diff --git a/decompiler/ObjectFile/LinkedObjectFile.cpp b/decompiler/ObjectFile/LinkedObjectFile.cpp index dc805fdf6b..bb38fb9ec1 100644 --- a/decompiler/ObjectFile/LinkedObjectFile.cpp +++ b/decompiler/ObjectFile/LinkedObjectFile.cpp @@ -444,6 +444,8 @@ void LinkedObjectFile::disassemble_functions() { decode_instruction(words_by_seg.at(seg).at(word), *this, seg, word)); if (function.instructions.back().is_valid()) { stats.decoded_ops++; + } else { + lg::error("Failed to decode op: 0x{:08x}", words_by_seg.at(seg).at(word).data); } } } @@ -582,6 +584,9 @@ std::string LinkedObjectFile::print_function_disassembly(Function& func, result += " ;;"; auto& word = words_by_seg[seg].at(func.start_word + i); append_word_to_string(result, word); + } else { + result += line; + result += '\n'; } if (in_delay_slot) { diff --git a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp index 0eb536f712..4234bebe0f 100644 --- a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp +++ b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp @@ -219,7 +219,8 @@ static uint32_t c_symlink3(LinkedObjectFile& f, static void link_v2_or_v4(LinkedObjectFile& f, const std::vector& data, const std::string& name, - DecompilerTypeSystem& dts) { + DecompilerTypeSystem& dts, + GameVersion version) { const auto* header = (const LinkHeaderV4*)&data.at(0); ASSERT(header->version == 4 || header->version == 2); @@ -251,6 +252,13 @@ static void link_v2_or_v4(LinkedObjectFile& f, const uint8_t* code_start = &data.at(code_offset); const uint8_t* code_end = &data.at(code_offset + code_size - 1) + 1; // get the pointer to one past the end. + + if (version == GameVersion::Jak2) { + while (((code_end - code_start) % 4)) { + code_end++; + } + } + ASSERT(((code_end - code_start) % 4) == 0); f.set_segment_count(1); for (auto x = code_start; x < code_end; x += 4) { @@ -605,7 +613,7 @@ static void link_v3(LinkedObjectFile& f, const std::vector& data, const std::string& name, DecompilerTypeSystem& dts, - int game_version) { + GameVersion game_version) { auto header = (const LinkHeaderV3*)(&data.at(0)); ASSERT(name == header->name); ASSERT(header->segments == 3); @@ -652,11 +660,11 @@ static void link_v3(LinkedObjectFile& f, // HACK! // why is this a thing? // HACK! - if (game_version == 1 && name == "level-h" && seg_id == 0) { + if (game_version == GameVersion::Jak1 && name == "level-h" && seg_id == 0) { segment_size++; } - if (game_version == 2) { + if (game_version == GameVersion::Jak2) { bool adjusted = false; while (segment_size % 4) { segment_size++; @@ -756,7 +764,16 @@ static void link_v3(LinkedObjectFile& f, s_name = (const char*)(&data.at(link_ptr)); } else { s_name = (const char*)(&data.at(link_ptr)); - dts.ts.forward_declare_type_method_count(s_name, reloc & 0x7f); + switch (game_version) { + case GameVersion::Jak1: + dts.ts.forward_declare_type_method_count(s_name, (reloc & 0x7f)); + break; + case GameVersion::Jak2: + dts.ts.forward_declare_type_method_count_multiple_of_4(s_name, (reloc & 0x7f) * 4 + 3); + break; + default: + ASSERT(false); + } kind = SymbolLinkKind::TYPE; } @@ -795,7 +812,7 @@ static void link_v3(LinkedObjectFile& f, LinkedObjectFile to_linked_object_file(const std::vector& data, const std::string& name, DecompilerTypeSystem& dts, - int game_version) { + GameVersion game_version) { LinkedObjectFile result; const auto* header = (const LinkHeaderCommon*)&data.at(0); @@ -805,7 +822,7 @@ LinkedObjectFile to_linked_object_file(const std::vector& data, link_v3(result, data, name, dts, game_version); } else if (header->version == 4 || header->version == 2) { ASSERT(header->type_tag == 0xffffffff); - link_v2_or_v4(result, data, name, dts); + link_v2_or_v4(result, data, name, dts, game_version); } else if (header->version == 5) { link_v5(result, data, name, dts); } else { diff --git a/decompiler/ObjectFile/LinkedObjectFileCreation.h b/decompiler/ObjectFile/LinkedObjectFileCreation.h index a165c51714..ed4ac5442a 100644 --- a/decompiler/ObjectFile/LinkedObjectFileCreation.h +++ b/decompiler/ObjectFile/LinkedObjectFileCreation.h @@ -13,5 +13,5 @@ class DecompilerTypeSystem; LinkedObjectFile to_linked_object_file(const std::vector& data, const std::string& name, DecompilerTypeSystem& dts, - int game_version); + GameVersion game_version); } // namespace decompiler diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index 47232a7898..c3d182d54a 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -115,7 +115,7 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, Timer timer; lg::info("-Loading types..."); - dts.parse_type_defs({"decompiler", "config", "all-types.gc"}); + dts.parse_type_defs({config.all_types_file}); if (!obj_file_name_map_file.empty()) { lg::info("-Loading obj name map file..."); @@ -407,7 +407,9 @@ std::string ObjectFileDB::generate_obj_listing(const std::unordered_set 0) { @@ -530,7 +532,7 @@ void ObjectFileDB::find_code(const Config& config) { obj.linked_data.find_functions(); obj.linked_data.disassemble_functions(); - if (config.game_version == 1 || obj.to_unique_name() != "effect-control-v0") { + if (config.game_version == GameVersion::Jak1 || obj.to_unique_name() != "effect-control-v0") { obj.linked_data.process_fp_relative_links(); } else { lg::warn("Skipping process_fp_relative_links in {}", obj.to_unique_name().c_str()); diff --git a/decompiler/config.cpp b/decompiler/config.cpp index ad330b5d1f..00b15eb60b 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -34,12 +34,15 @@ Config read_config_file(const std::string& path_to_config_file, cfg[key] = val; } - config.game_version = cfg.at("game_version").get(); + int version_int = cfg.at("game_version").get(); + ASSERT(version_int == 1 || version_int == 2); + config.game_version = (GameVersion)version_int; config.text_version = cfg.at("text_version").get(); config.game_name = cfg.at("game_name").get(); if (cfg.contains("expected_elf_name")) { config.expected_elf_name = cfg.at("expected_elf_name").get(); } + config.all_types_file = cfg.at("all_types_file").get(); auto inputs_json = read_json_file_from_config(cfg, "inputs_file"); config.dgo_names = inputs_json.at("dgo_names").get>(); diff --git a/decompiler/config.h b/decompiler/config.h index 6974b116ad..74f41c3561 100644 --- a/decompiler/config.h +++ b/decompiler/config.h @@ -7,6 +7,7 @@ #include #include "decompiler/Disasm/Register.h" #include "decompiler/data/game_text.h" +#include "common/versions.h" namespace decompiler { struct RegisterTypeCast { @@ -82,7 +83,7 @@ struct DecompileHacks { }; struct Config { - int game_version = -1; + GameVersion game_version = GameVersion::Jak1; std::vector dgo_names; std::vector object_file_names; std::vector str_file_names; @@ -91,6 +92,7 @@ struct Config { std::vector streamed_audio_file_names; std::string obj_file_name_map_file; + std::string all_types_file; bool disassemble_code = false; bool decompile_code = false; diff --git a/decompiler/config/all-types2.gc b/decompiler/config/all-types2.gc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/decompiler/config/jak1_ntsc_black_label.jsonc b/decompiler/config/jak1_ntsc_black_label.jsonc index 85a75cff27..56801b8fef 100644 --- a/decompiler/config/jak1_ntsc_black_label.jsonc +++ b/decompiler/config/jak1_ntsc_black_label.jsonc @@ -78,6 +78,7 @@ "inputs_file": "decompiler/config/jak1_ntsc_black_label/inputs.jsonc", "art_info_file": "decompiler/config/jak1_ntsc_black_label/art_info.jsonc", "import_deps_file": "decompiler/config/jak1_ntsc_black_label/import_deps.jsonc", + "all_types_file": "decompiler/config/all-types.gc", // optional: a predetermined object file name map from a file. // this will make decompilation naming consistent even if you only run on some objects. diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index cc85744d56..0e0dcd235c 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -1,10 +1,3 @@ { - "gkernel":[ - [16, "(function process symbol)"], - [22, "(function process symbol)"], - [25, "(function process symbol)"], - [28, "(function process symbol)"], - [30, "(function process symbol)"], - [32, "(function process symbol)"] - ] + } \ No newline at end of file diff --git a/decompiler/config/jak2/art_info.jsonc b/decompiler/config/jak2/art_info.jsonc new file mode 100644 index 0000000000..779d289cff --- /dev/null +++ b/decompiler/config/jak2/art_info.jsonc @@ -0,0 +1,4 @@ +{ + "files":{}, + "functions":{} +} \ No newline at end of file diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index d7451025e0..178d08b27e 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -4,10 +4,7 @@ //////////////////////////// "types_with_bad_inspect_methods": [ - "engine", - "bsp-header", - "joint-anim-matrix", - "part-tracker" + ], "no_type_analysis_functions_by_name": [], @@ -16,368 +13,27 @@ // the second argument is the name of the first condition in the cond. Use print_cfg to find it out. // The third argument is the number of cases. If you set it too small it may fail to build the CFG. "cond_with_else_max_lengths": [ - ["(method 20 res-lump)", "b0", 2], - ["(method 11 res-lump)", "b0", 1], - ["(method 12 res-lump)", "b0", 1] + ], // if a cond with an else case is being used a value in a place where it looks wrong // you can add the function name to this list and it will more aggressively reject this rewrite. "aggressively_reject_cond_to_value_rewrite": [ - "(method 10 res-lump)", - "(method 11 res-lump)", - "(method 12 res-lump)", - "(method 7 texture-page)" + ], // this provides a hint to the decompiler that these functions will have a lot of inline assembly. // currently it just leaves pcpyld as an asm op. - "hint_inline_assembly_functions": ["matrix-transpose!"], + "hint_inline_assembly_functions": [], "asm_functions_by_name": [ - // gcommon - "quad-copy!", - - // gkernel - "(method 11 cpu-thread)", - "throw", - "return-from-thread", - "return-from-thread-dead", - "reset-and-call", - "(method 10 cpu-thread)", - "(method 0 catch-frame)", - "throw-dispatch", - "set-to-run-bootstrap", - "run-function-in-process", // not asm, but it uses the stack. - - // pskernel - "return-from-exception", // F: eret - "kernel-read-function", // F: delay slot tricks - "kernel-write-function", // F: delay slot tricks - "kernel-copy-function", - "kernel-check-hardwired-addresses", - - // math - "rand-uint31-gen", - - // bounding box - "(method 9 bounding-box)", // F: asm branching - "(method 14 bounding-box)", - - // matrix - "(method 9 matrix)", // F: asm branching - "matrix-axis-sin-cos!", // F: asm branching - "matrix-axis-sin-cos-vu!", - - // geometry - "circle-circle-xz-intersect", // F: asm branching - - // trigonometry - "exp", // BUG: cfg is wrong. - "atan0", // P: manual use of stack - "sincos!", // P: manual use of stack - "sincos-rad!", - - // dma-h - "dma-count-until-done", // F: asm branching - "dma-sync-with-count", // F: asm branching - "dma-send-no-scratch", // F: asm branching - "dma-sync-fast", - - // dma - "symlink3", // F: asm branching - "symlink2", // F: asm branching - "dma-sync-hang", - - // display - "vblank-handler", // F: weird asm for interrupt handler - "vif1-handler", // F: weird asm for interrupt handler - "vif1-handler-debug", - - // vector - "vector=", // asm branching - - // collide-mesh-h - "(method 11 collide-mesh-cache)", - - // collide-func - "moving-sphere-triangle-intersect", // P: weird branching - "collide-do-primitives", // P: asm branching - - // joint - "calc-animation-from-spr", // F: asm branching - "decompress-frame-data-pair-to-accumulator", // P: asm calling - "decompress-frame-data-to-accumulator", // P: asm calling - "decompress-fixed-data-to-accumulator", // P: asm calling - "normalize-frame-quaternions", // F: asm branching, return - "clear-frame-accumulator", // F: asm branching - "cspace<-parented-transformq-joint!", - - // sprite - - // merc-blend-shape - "setup-blerc-chains-for-one-fragment", // F: asm branching - "merc-dma-chain-to-spr", // F: asm branching - "blerc-a-fragment", - - // ripple - "ripple-matrix-scale", - "ripple-apply-wave-table", - "ripple-create-wave-table", - "ripple-execute-init", - - // bones - "draw-bones-hud", - "draw-bones", - "draw-bones-check-longest-edge-asm", - "draw-bones-merc", - "bones-mtx-calc-execute", - "bones-mtx-calc", - "texscroll-execute", - - // generic-effect - "generic-debug-light-proc", - "generic-none-dma-wait", - "generic-copy-vtx-dclr-dtex", - "generic-light", - "generic-envmap-only-proc", - "generic-no-light", - "generic-no-light+envmap", - "generic-no-light-dproc", - "generic-no-light-dproc-only", - "generic-no-light-proc", - "generic-interp-dproc", - "generic-envmap-dproc", - "generic-prepare-dma-single", - "generic-prepare-dma-double", - "generic-envmap-proc", - "generic-light-proc", - "generic-dma-from-spr", - "upload-vu0-program", - - // generic-merc - "generic-merc-execute-all", - "generic-merc-execute-asm", // CFG - "high-speed-reject", - "mercneric-convert", - "mercneric-bittable-asm", - "mercneric-shader-asm", - "mercneric-matrix-asm", - "generic-merc-init-asm", - - // generic-tie - "generic-tie-convert", - "generic-tie-convert-proc", - "generic-tie-upload-next", - "generic-tie-decompress", - "generic-tie-dma-to-spad-sync", - - // shadow-cpu - "shadow-execute", - "shadow-add-double-edges", - "shadow-add-double-tris", - "shadow-add-single-edges", - "shadow-add-facing-single-tris", - "shadow-add-verts", - "shadow-find-double-edges", - "shadow-find-facing-double-tris", - "shadow-find-single-edges", - "shadow-find-facing-single-tris", - "shadow-scissor-top", - "shadow-scissor-edges", - "shadow-calc-dual-verts", - - // background - "background-upload-vu0", - - // draw-node - "draw-node-cull", - - // shrubbery - "test-func", - "draw-inline-array-instance-shrub", - - // tfrag - "stats-tfrag-asm", - "draw-inline-array-tfrag-near", - "draw-inline-array-tfrag", - - // tie-methods - "draw-inline-array-prototype-tie-near-asm", - "draw-inline-array-prototype-tie-asm", - "draw-inline-array-prototype-tie-generic-asm", - "draw-inline-array-instance-tie", - - // sparticle-launcher - "sp-init-fields!", - - // sparticle - "memcpy", - "sp-process-block-3d", - "sp-process-block-2d", - "sp-launch-particles-var", - "particle-adgif", - "sp-init-fields!", - - // time-of-day - "time-of-day-interp-colors-scratch", - "time-of-day-interp-colors", - - // sky-tng - "clip-polygon-against-negative-hyperplane", - "clip-polygon-against-positive-hyperplane", - "draw-large-polygon", - - // load-boundary - "render-boundary-tri", - "render-boundary-quad", - "draw-boundary-polygon", - - // collide-probe - "collide-probe-instance-tie", // CFG - "collide-probe-node", // CFG - - // collide-edge-grab - "(method 13 collide-edge-work)", // CFG - "(method 17 collide-edge-work)", // CFG - "(method 15 collide-edge-work)", // CFG - "(method 16 collide-edge-work)", // CFG - "(method 9 edge-grab-info)", // CFG - "(method 18 collide-edge-work)", // CFG - "(method 10 collide-edge-hold-list)", // CFG - - // collide-shape - "(method 15 collide-shape-prim-mesh)", // CFG - "(method 15 collide-shape-prim-sphere)", // CFG - "(method 16 collide-shape-prim)", // CFG - "(method 15 collide-shape-prim-group)", // CFG - "(method 18 collide-shape-prim-sphere)", - "(method 23 collide-shape-prim-sphere)", // CFG - "(method 23 collide-shape-prim-mesh)", // BUG - crash in variable pass - "(method 24 collide-shape-prim)", // CFG - "(method 23 collide-shape-prim-group)", // CFG - "(method 42 collide-shape)", // CFG - - // process-drawable BUG - "cspace-inspect-tree", - "(method 19 process-drawable)", - - // ambient - "ambient-inspect", - - // target BUG - "target-falling-anim-trans", // CFG resolution - - // target2 BUG - "look-for-points-of-interest", // Failed to split nested sc - looks like dead code to me - - // drawable-tree - "(method 16 drawable-tree)", - - // collide-cache - "(method 10 collide-puss-work)", // CFG - "(method 9 collide-puss-work)", // decompiler crash - "(method 19 collide-cache)", // decompiler crash - "(method 10 collide-cache-prim)", // CFG - "(method 9 collide-cache-prim)", // CFG - "(method 30 collide-cache)", // unsupported asm - c.le.s - "(method 13 collide-shape-prim-group)", // CFG - "(method 13 collide-shape-prim-mesh)", // CFG - "(method 14 collide-shape-prim-group)", // CFG - "(method 14 collide-shape-prim-mesh)", // CFG - "(method 12 collide-shape-prim-group)", // CFG - "(method 12 collide-shape-prim-mesh)", // CFG - "(method 27 collide-cache)", // CFG - "(method 14 collide-cache)", // CFG - "(method 28 collide-cache)", // CFG - "(method 26 collide-cache)", // CFG - "(method 21 collide-cache)", // CFG - "(method 32 collide-cache)", // CFG - - // memory-usage BUG - //"(method 14 level)", - - // navigate BUG - "(method 32 nav-control)", - - // ocean - "draw-large-polygon-ocean", // CFG - - // ocean-vu0 - "ocean-generate-verts", // crash - "ocean-interp-wave", - - // ropebridge BUG - "(method 27 ropebridge)", - - // all unchecked and in level DGO code - "(anon-function 21 plant-boss)", // CFG - // "(anon-function 10 ice-cube)", - // "(anon-function 15 ice-cube)", - "mistycannon-find-best-solution", - "target-flut-falling-anim-trans", // CFG failure - "kermit-check-to-hit-player?", - "(anon-function 36 mistycannon)", - "(anon-function 2 target-tube)", - "(anon-function 5 orbit-plat)", - "(anon-function 2 ogreboss)" ], // these functions use pairs and the decompiler // will be less picky about types related to pairs. "pair_functions_by_name": [ - "ref", - "last", - "member", - "nmember", - "assoc", - "assoce", - "append!", - "delete!", - "delete-car!", - "insert-cons!", - "sort", - "unload-package", - "(method 4 pair)", - "nassoc", - "nassoce", - "lookup-level-info", - "(method 21 level-group)", - "(method 12 level)", - "update-sound-banks", - "(method 16 level-group)", - "bg", - "(method 18 game-info)", - "debug-menu-context-default-selection", - "debug-menu-rebuild", - "debug-menu-func-decode", - "debug-menu-make-from-template", - "debug-menu-render", - "debug-menu-context-select-next-or-prev-item", - "debug-menu-context-select-new-item", - "debug-menu-send-msg", - "debug-menu-find-from-template", - "build-continue-menu", - "(method 8 process-tree)", - "(method 16 load-state)", - "(method 15 load-state)", - "build-continue-menu", - "entity-remap-names", - "(method 21 swamp-rat-nest-dummy-a)", - "(method 21 swamp-rat-nest-dummy-b)", - "(method 21 swamp-rat-nest-dummy-c)", - "(method 27 battlecontroller)", - "load-boundary-from-template", - "command-get-time", - "command-get-param", - "command-get-quoted-param", - "command-get-trans", - "command-get-camera", - "(method 14 camera-tracker)", - "(enter billy-playing)", - "(code target-continue)", - "next-level" + ], // If format is used with the wrong number of arguments, @@ -385,108 +41,11 @@ // that they used the correct number. This will override the decompiler's // automatic detection. "bad_format_strings": { - "ERROR: dma tag has data in reserved bits ~X~%": 0, - "#: value of symbol ~A in task-controls is not a task-control~%": 0, - "~0K~10,'-S--~5,'-DK-of-~5,'-DK--~5,'-DK-of-~5,'-DK--": 5, - " bsp ~192H~5DK ~280Hdebug~456H~5DK~%": 2, - " bsp-leaf-vis-iop ~192H~5DK~%": 1, - " bsp-leaf-vis-adj ~192H~5DK~%": 1, - " level-code ~192H~5DK~%": 1, - " tfrag ~192H~5DK ~280Htfragment~456H~5DK~%": 2, - " tie-proto ~192H~5DK ~280Hsky~456H~5DK~%": 2, - " tie-instance ~192H~5DK ~280Htie-fragment~456H~5DK~%": 2, - " shrub-proto ~192H~5DK ~280Htie-near~456H~5DK~%": 2, - " shrub-instance ~192H~5DK ~280Hshrubbery~456H~5DK~%": 2, - " collision ~192H~5DK ~280Htie-generic~456H~5DK~%": 2, - " pris-geo ~192H~5DK ~280Hpris-fragment~456H~5DK~%": 2, - " pris-anim ~192H~5DK ~280Hpris-generic~456H~5DK~%": 2, - " textures ~192H~5DK ~280Htextures~456H~5DK~%": 2, - " entity ~192H~5DK~%": 1, - " misc ~192H~5DK ~280Hsprite~456H~5DK~%": 2, - "ERROR: ~A in spool anim loop for ~A ~D, but not loaded.~": 3, - "~0k~5d/~d ~6d/~d ~6d/~d ": 6, - "~0k~s~%": 1, - "money ~A was killed in pickup~%": 0 + }, "blocks_ending_in_asm_branch": { - "closest-pt-in-triangle": [17], - // this one is all asm branches - "circle-circle-xz-intersect": [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 - ], - - "find-knot-span": [0, 1, 2, 3, 5, 6, 7, 8, 9], - - "curve-evaluate!": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], - - "(method 9 texture-page-dir)": [4, 5], - - "adgif-shader<-texture-with-update!": [0, 1], - - "display-loop": [44, 49, 66, 96], - - "load-game-text-info": [12, 13, 14, 16, 17, 18], - - "real-main-draw-hook": [75, 77], - - "(method 12 perf-stat)": [0], - "(method 11 perf-stat)": [0], - "raw-ray-sphere-intersect": [0, 1, 2, 3, 4, 5], - "ray-cylinder-intersect": [0, 1, 2, 3, 4, 5], - "ray-triangle-intersect": [0, 1, 2, 3, 4], - "bsp-camera-asm": [1, 2, 3], - "level-remap-texture": [2, 3, 4, 5, 6], - "start-perf-stat-collection": [26], - "end-perf-stat-collection": [0], - "sprite-draw-distorters": [4, 5], - "draw-string": [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189 - ], - "get-string-length": [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 - ], - "unpack-comp-rle": [1, 3, 5, 6], - "(method 16 level)": [1, 5, 13, 14, 15, 19, 26, 53], - "unpack-comp-huf": [2, 4, 5, 6, 7, 8, 9], - "blerc-execute": [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 - ], - "(method 11 fact-info-target)": [42], - "(anon-function 9 game-save)": [3, 4, 5, 6, 7, 8, 10], - //"(anon-function 9 game-save)":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], - "particle-adgif": [0, 1, 2, 3, 4, 5, 7], - "sp-launch-particles-var": [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66 - ], - "(method 11 sparticle-launch-control)": [27, 28, 35, 46, 48, 49, 77], - "upload-vis-bits": [0, 1, 2, 3, 4, 5, 6], - - "draw-drawable-tree-tfrag": [6, 8, 13, 15], - "draw-drawable-tree-trans-tfrag": [6, 8, 13, 15], - "draw-drawable-tree-dirt-tfrag": [6, 8, 13, 15], - "draw-drawable-tree-ice-tfrag": [6, 8, 13, 15], - - "birth-pickup-at-point": [0] }, // Sometimes the game might use format strings that are fetched dynamically, @@ -495,51 +54,26 @@ // e.g. "function-name":[[op, argc], [op, argc], ...] // where "op" is the op number for the call to format. "dynamic_format_arg_counts": { - "(method 35 progress)": [ - [44, 1], - [92, 1] - ], - "(method 49 progress)": [[35, 1]], - "(method 37 progress)": [[41, 1]], - "(method 38 progress)": [[106, 1]], - "(method 39 progress)": [[41, 1]], - "(method 41 progress)": [[73, 1]], - "(method 42 progress)": [[41, 1]], - "(method 43 progress)": [ - [51, 1], - [94, 1] - ], - "": [] + }, "mips2c_functions_by_name": [ - "sp-init-fields!", - "particle-adgif", - "sp-launch-particles-var", - "sp-process-block-2d", - "sp-process-block-3d", - "draw-large-polygon", - "clip-polygon-against-positive-hyperplane", - "clip-polygon-against-negative-hyperplane", - "render-sky-quad", - "render-sky-tri", - "init-sky-regs", - "set-tex-offset", - "adgif-shader<-texture-with-update!", - "init-boundary-regs", - "draw-boundary-polygon", - "render-boundary-quad", - "render-boundary-tri", - "draw-inline-array-tfrag", - "stats-tfrag-asm", - "time-of-day-interp-colors-scratch" + + ], + "mips2c_jump_table_functions": { + + }, + // there are some missing textures. I don't know what the game actually does here. // the format for entries is [level, tpage, index] - "missing_textures": [ - ["finalboss", 1419, 3] + "missing_textures": [], + + // some object files have garbage pad data at the end which makes the decompiler + // assume they must be different files, such as the art group for orb-cache-top. + // this just suppresses a message. + "expected_merged_objs": [ + ] } - - diff --git a/decompiler/config/jak2/import_deps.jsonc b/decompiler/config/jak2/import_deps.jsonc new file mode 100644 index 0000000000..0e0dcd235c --- /dev/null +++ b/decompiler/config/jak2/import_deps.jsonc @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index db79427b11..432e6311c5 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -7,163 +7,163 @@ // most objects are part of CGO/DGO files (both go in dgo_names). This includes levels and the engine // the DGOs will be processed in this order. Usually it's best to have KERNEL, ENGINE, then the levels when // you want to run on the entire game. - "dgo_names": [/* - "CGO/ART.CGO", - "CGO/KERNEL.CGO", - "CGO/ENGINE.CGO", - "CGO/GAME.CGO", - "CGO/COMMON.CGO", - "DGO/LWIDEB.DGO", - "DGO/LMEETBRT.DGO", - "DGO/CTA.DGO", - "DGO/PALOUT.DGO", - "DGO/STD.DGO", - "DGO/FOR.DGO", - "DGO/CASEXT.DGO", - "DGO/HIDEOUT.DGO", - "DGO/LWIDESTA.DGO", - "DGO/LRACELIT.DGO", - "DGO/CTB.DGO", - "DGO/KIOSK.DGO", - "DGO/DG1.DGO", - "DGO/FEB.DGO", - "DGO/DMI.DGO", - "DGO/ORACLE.DGO", - "DGO/LERLTESS.DGO", - "DGO/DRI.DGO", - "DGO/LBRNERMK.DGO", - "DGO/LRACECF.DGO", - "DGO/CTC.DGO", - "DGO/LTHRNOUT.DGO", - "DGO/FRA.DGO", - "DGO/LGARCSTA.DGO", - "DGO/MTN.DGO", - "DGO/INTROCST.DGO", - "DGO/DRB.DGO", - "DGO/ATE.DGO", - "DGO/LERROL.DGO", - "DGO/LTRNYSAM.DGO", - "DGO/LOUTCSTB.DGO", - "DGO/LASHTHRN.DGO", - "DGO/TOC.DGO", - "DGO/CFB.DGO", - "DGO/CAB.DGO", - "DGO/STC.DGO", - "DGO/STR.DGO", - "DGO/ATO.DGO", - "DGO/SEB.DGO", - "DGO/LPRSNCST.DGO", - "DGO/SWB.DGO", - "DGO/LPOWER.DGO", - "DGO/FOB.DGO", - "DGO/CIB.DGO", - "DGO/LSHUTTLE.DGO", - "DGO/LJAKDAX.DGO", - "DGO/FORDUMPC.DGO", - "DGO/LTRNTESS.DGO", - "DGO/TBO.DGO", - "DGO/THR.DGO", - "DGO/PRI.DGO", - "DGO/LKIDDOGE.DGO", - "DGO/NESTT.DGO", - "DGO/LWIDEC.DGO", - "DGO/SAG.DGO", - "DGO/NEB.DGO", - "DGO/COB.DGO", - "DGO/LBOMBBOT.DGO", - "DGO/DEMO.DGO", - "DGO/LRACEDF.DGO", - "DGO/LERLCHAL.DGO", - "DGO/LHIPOUT.DGO", - "DGO/OUTROCST.DGO", - "DGO/NES.DGO", - "DGO/PAR.DGO", - "DGO/LERBRNGD.DGO", - "DGO/MTX.DGO", - "DGO/FDA.DGO", - "DGO/LKEIRIFT.DGO", - "DGO/LWHACK.DGO", - "DGO/LJKDXASH.DGO", - "DGO/CAS.DGO", - "DGO/COA.DGO", - "DGO/LTESS.DGO", - "DGO/CFA.DGO", - "DGO/TOMBEXT.DGO", - "DGO/LCGUARD.DGO", - "DGO/TOE.DGO", - "DGO/PALBOSS.DGO", - "DGO/FRB.DGO", - "DGO/PAE.DGO", - "DGO/TITLE.DGO", - "DGO/FORDUMPD.DGO", - "DGO/D3A.DGO", - "DGO/DRILLMTN.DGO", - "DGO/PAC.DGO", - "DGO/LTENTOB.DGO", - "DGO/LRACEBF.DGO", - "DGO/LPROTECT.DGO", - "DGO/FEA.DGO", - "DGO/ONINTENT.DGO", - "DGO/STA.DGO", - "DGO/CGC.DGO", - "DGO/CMA.DGO", - "DGO/FDB.DGO", - "DGO/SKA.DGO", - "DGO/LTRNKRKD.DGO", - "DGO/CIA.DGO", - "DGO/TOB.DGO", - "DGO/LRACEDB.DGO", - "DGO/LDJAKBRN.DGO", - "DGO/TOA.DGO", - "DGO/STADBLMP.DGO", - "DGO/UND.DGO", - "DGO/LYSKDCD.DGO", - "DGO/HALFPIPE.DGO", - "DGO/LSAMERGD.DGO", - "DGO/PAS.DGO", - "DGO/LBBUSH.DGO", - "DGO/LPACKAGE.DGO", - "DGO/LINTCSTB.DGO", - "DGO/LPORTRUN.DGO", - "DGO/LASHGRD.DGO", - "DGO/CGB.DGO", - "DGO/D3B.DGO", - "DGO/STB.DGO", - "DGO/GARAGE.DGO", - "DGO/PORTWALL.DGO", - "DGO/LHELLDOG.DGO", - "DGO/SWE.DGO", - "DGO/LRACECB.DGO", - "DGO/GGA.DGO", - "DGO/TOD.DGO", - "DGO/MCN.DGO", - "DGO/SEW.DGO", - "DGO/VIN.DGO", - "DGO/CGA.DGO", - "DGO/CMB.DGO", - "DGO/LGUARD.DGO", - "DGO/CPA.DGO", - "DGO/LCITYLOW.DGO", - "DGO/LTENTOUT.DGO", - "DGO/UNB.DGO", - "DGO/CPO.DGO", - "DGO/CAP.DGO", - "DGO/CWI.DGO", - "DGO/CTYKORA.DGO", - "DGO/RUI.DGO", - "DGO/LSACK.DGO", - "DGO/CTYASHA.DGO", - "DGO/LPRTRACE.DGO", - "DGO/LWIDEA.DGO", - "DGO/HIPHOG.DGO", - "DGO/LSMYSBRT.DGO", - "DGO/LRACEBB.DGO", - "DGO/CASCITY.DGO", - "DGO/LYSAMSAM.DGO", - "DGO/VI1.DGO"*/ - ], + "dgo_names": [ + "./CGO/ART.CGO", + "./CGO/KERNEL.CGO", + "./CGO/ENGINE.CGO", + "./CGO/GAME.CGO", + "./CGO/COMMON.CGO", + "./DGO/LWIDEB.DGO", + "./DGO/LMEETBRT.DGO", + "./DGO/CTA.DGO", + "./DGO/PALOUT.DGO", + "./DGO/STD.DGO", + "./DGO/FOR.DGO", + "./DGO/CASEXT.DGO", + "./DGO/HIDEOUT.DGO", + "./DGO/LWIDESTA.DGO", + "./DGO/LRACELIT.DGO", + "./DGO/CTB.DGO", + "./DGO/KIOSK.DGO", + "./DGO/DG1.DGO", + "./DGO/FEB.DGO", + "./DGO/DMI.DGO", + "./DGO/ORACLE.DGO", + "./DGO/LERLTESS.DGO", + "./DGO/DRI.DGO", + "./DGO/LBRNERMK.DGO", + "./DGO/LRACECF.DGO", + "./DGO/CTC.DGO", + "./DGO/LTHRNOUT.DGO", + "./DGO/FRA.DGO", + "./DGO/LGARCSTA.DGO", + "./DGO/MTN.DGO", + "./DGO/INTROCST.DGO", + "./DGO/DRB.DGO", + "./DGO/ATE.DGO", + "./DGO/LERROL.DGO", + "./DGO/LTRNYSAM.DGO", + "./DGO/LOUTCSTB.DGO", + "./DGO/LASHTHRN.DGO", + "./DGO/TOC.DGO", + "./DGO/CFB.DGO", + "./DGO/CAB.DGO", + "./DGO/STC.DGO", + "./DGO/STR.DGO", + "./DGO/ATO.DGO", + "./DGO/SEB.DGO", + "./DGO/LPRSNCST.DGO", + "./DGO/SWB.DGO", + "./DGO/LPOWER.DGO", + "./DGO/FOB.DGO", + "./DGO/CIB.DGO", + "./DGO/LSHUTTLE.DGO", + "./DGO/LJAKDAX.DGO", + "./DGO/FORDUMPC.DGO", + "./DGO/LTRNTESS.DGO", + "./DGO/TBO.DGO", + "./DGO/THR.DGO", + "./DGO/PRI.DGO", + "./DGO/LKIDDOGE.DGO", + "./DGO/NESTT.DGO", + "./DGO/LWIDEC.DGO", + "./DGO/SAG.DGO", + "./DGO/NEB.DGO", + "./DGO/COB.DGO", + "./DGO/LBOMBBOT.DGO", + "./DGO/DEMO.DGO", + "./DGO/LRACEDF.DGO", + "./DGO/LERLCHAL.DGO", + "./DGO/LHIPOUT.DGO", + "./DGO/OUTROCST.DGO", + "./DGO/NES.DGO", + "./DGO/PAR.DGO", + "./DGO/LERBRNGD.DGO", + "./DGO/MTX.DGO", + "./DGO/FDA.DGO", + "./DGO/LKEIRIFT.DGO", + "./DGO/LWHACK.DGO", + "./DGO/LJKDXASH.DGO", + "./DGO/CAS.DGO", + "./DGO/COA.DGO", + "./DGO/LTESS.DGO", + "./DGO/CFA.DGO", + "./DGO/TOMBEXT.DGO", + "./DGO/LCGUARD.DGO", + "./DGO/TOE.DGO", + "./DGO/PALBOSS.DGO", + "./DGO/FRB.DGO", + "./DGO/PAE.DGO", + "./DGO/TITLE.DGO", + "./DGO/FORDUMPD.DGO", + "./DGO/D3A.DGO", + "./DGO/DRILLMTN.DGO", + "./DGO/PAC.DGO", + "./DGO/LTENTOB.DGO", + "./DGO/LRACEBF.DGO", + "./DGO/LPROTECT.DGO", + "./DGO/FEA.DGO", + "./DGO/ONINTENT.DGO", + "./DGO/STA.DGO", + "./DGO/CGC.DGO", + "./DGO/CMA.DGO", + "./DGO/FDB.DGO", + "./DGO/SKA.DGO", + "./DGO/LTRNKRKD.DGO", + "./DGO/CIA.DGO", + "./DGO/TOB.DGO", + "./DGO/LRACEDB.DGO", + "./DGO/LDJAKBRN.DGO", + "./DGO/TOA.DGO", + "./DGO/STADBLMP.DGO", + "./DGO/UND.DGO", + "./DGO/LYSKDCD.DGO", + "./DGO/HALFPIPE.DGO", + "./DGO/LSAMERGD.DGO", + "./DGO/PAS.DGO", + "./DGO/LBBUSH.DGO", + "./DGO/LPACKAGE.DGO", + "./DGO/LINTCSTB.DGO", + "./DGO/LPORTRUN.DGO", + "./DGO/LASHGRD.DGO", + "./DGO/CGB.DGO", + "./DGO/D3B.DGO", + "./DGO/STB.DGO", + "./DGO/GARAGE.DGO", + "./DGO/PORTWALL.DGO", + "./DGO/LHELLDOG.DGO", + "./DGO/SWE.DGO", + "./DGO/LRACECB.DGO", + "./DGO/GGA.DGO", + "./DGO/TOD.DGO", + "./DGO/MCN.DGO", + "./DGO/SEW.DGO", + "./DGO/VIN.DGO", + "./DGO/CGA.DGO", + "./DGO/CMB.DGO", + "./DGO/LGUARD.DGO", + "./DGO/CPA.DGO", + "./DGO/LCITYLOW.DGO", + "./DGO/LTENTOUT.DGO", + "./DGO/UNB.DGO", + "./DGO/CPO.DGO", + "./DGO/CAP.DGO", + "./DGO/CWI.DGO", + "./DGO/CTYKORA.DGO", + "./DGO/RUI.DGO", + "./DGO/LSACK.DGO", + "./DGO/CTYASHA.DGO", + "./DGO/LPRTRACE.DGO", + "./DGO/LWIDEA.DGO", + "./DGO/HIPHOG.DGO", + "./DGO/LSMYSBRT.DGO", + "./DGO/LRACEBB.DGO", + "./DGO/CASCITY.DGO", + "./DGO/LYSAMSAM.DGO", + "./DGO/VI1.DGO" +], - // some objects are part of STR files (streaming data). In Jak 1 this is just animations + // some objects are part of STR files (streaming data). "str_file_names": [ ], @@ -177,11 +177,13 @@ "TEXT/5COMMON.TXT", "TEXT/6COMMON.TXT", "TEXT/7COMMON.TXT" - ], +], // uncomment the next line to extract audio to wave files. //"audio_dir_file_name": "jak1/VAG", "audio_dir_file_name": "", - "streamed_audio_file_names": ["VAGWAD.ENG", "VAGWAD.JAP"] + "streamed_audio_file_names": [], + + "levels_to_extract": [] } diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index 64cd24a635..34c387cbf9 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -1,5045 +1,4 @@ { - "run-function-in-process": [ - [16, ["array", "uint64", 6]], - [64, "catch-frame"] - ], - - "matrixp*!": [[16, "matrix"]], - - "vector3s-matrix*!": [[16, "vector"]], - - "vector3s-rotate*!": [[16, "vector"]], - - "matrix-rotate-zyx!": [ - [16, "matrix"], - [80, "matrix"] - ], - "matrix-rotate-xyz!": [ - [16, "matrix"], - [80, "matrix"] - ], - "matrix-rotate-zxy!": [ - [16, "matrix"], - [80, "matrix"] - ], - "matrix-rotate-yxz!": [ - [16, "matrix"], - [80, "matrix"] - ], - "matrix-rotate-yzx!": [ - [16, "matrix"], - [80, "matrix"] - ], - "matrix-rotate-yxy!": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - "matrix-rotate-yx!": [[16, "matrix"]], - "transform-matrix-calc!": [ - [16, "matrix"], - [80, "matrix"] - ], - "transform-matrix-parent-calc!": [ - [16, "matrix"], - [80, "matrix"] - ], - "matrix-with-scale->quaternion": [[16, "matrix"]], - "quaternion-exp!": [[16, "vector"]], - "quaternion-slerp!": [[16, "vector"]], - "quaternion-zxy!": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - "vector-x-quaternion!": [[16, "matrix"]], - "vector-y-quaternion!": [[16, "matrix"]], - "vector-z-quaternion!": [[16, "matrix"]], - "quaternion-y-angle": [[16, "vector"]], - "quaternion-rotate-local-x!": [[16, "quaternion"]], - "quaternion-rotate-local-y!": [[16, "quaternion"]], - "quaternion-rotate-local-z!": [[16, "quaternion"]], - "quaternion-rotate-y!": [[16, "quaternion"]], - "quaternion-rotate-x!": [ - [16, "quaternion"], - [32, "vector"] - ], - "quaternion-rotate-z!": [ - [16, "quaternion"], - [32, "vector"] - ], - "quaternion-delta-y": [ - [16, "vector"], - [32, "vector"] - ], - "quaternion-rotate-y-to-vector!": [ - [16, "quaternion"], - [32, "vector"], - [48, "quaternion"] - ], - "quaternion-xz-angle": [ - [16, "matrix"], - [80, "vector"] - ], - "vector-rotate-y!": [ - [16, "quaternion"], - [32, "matrix"] - ], - "eul->matrix": [[16, "vector"]], - "eul->quat": [[16, "matrix"]], - "quat->eul": [[16, "matrix"]], - "vector-line-distance": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - "vector-line-distance-point!": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - "forward-up-nopitch->inv-matrix": [[16, "vector"]], - "forward-up-nopitch->quaternion": [[16, "matrix"]], - "forward-up->quaternion": [ - [16, "matrix"], - [80, "vector"] - ], - "quaternion-from-two-vectors!": [[16, "vector"]], - "quaternion-from-two-vectors-max-angle!": [[16, "vector"]], - "matrix-from-two-vectors!": [[16, "vector"]], - "matrix-from-two-vectors-max-angle!": [[16, "vector"]], - "matrix-from-two-vectors-max-angle-partial!": [[16, "vector"]], - "matrix-from-two-vectors-partial-linear!": [[16, "vector"]], - "matrix-remove-z-rot": [ - [16, "vector"], - [32, "matrix"] - ], - "matrix-rot-diff!": [ - [16, "quaternion"], - [32, "quaternion"], - [48, "quaternion"] - ], - "quaternion-seek": [ - [16, "matrix"], - [80, "matrix"], - [144, "quaternion"] - ], - "vector-deg-seek": [[16, "matrix"]], - "vector-deg-slerp": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"] - ], - "circle-test": [ - [16, "sphere"], - [32, "sphere"], - [48, "vector"], - [64, "vector"] - ], - "move-target-from-pad": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"] - ], - "draw-sprite2d-xy": [[16, "draw-context"]], - "screen-gradient": [[16, "draw-context"]], - "(method 10 oscillating-vector)": [[16, "vector"]], - "show-mc-info": [[16, "mc-slot-info"]], - "update-mood-erase-color2": [[16, "mood-fog"]], - "make-light-kit": [[16, "matrix"]], - "matrix<-parented-transformq!": [[16, "vector"]], - "(method 20 trsqv)": [[16, "vector"]], - "(method 19 trsqv)": [[16, "vector"]], - "(method 17 trsqv)": [ - [16, "quaternion"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"] - ], - "(method 25 trsqv)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - "(method 16 trsqv)": [ - [16, "matrix"], - [80, "matrix"] - ], - "(method 14 trsqv)": [[16, "vector"]], - "(method 13 trsqv)": [[16, "vector"]], - "(method 12 trsqv)": [ - [16, "vector"], - [32, "vector"] - ], - "(method 11 trsqv)": [[16, "vector"]], - "(method 10 trsqv)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 23 trsqv)": [[16, "vector"]], - "(method 24 trsqv)": [[16, "vector"]], - - "vector-sincos!": [[16, "vector"]], - - "init-for-transform": [ - [16, "matrix"], - [80, "matrix"], - [144, "vector4s-3"], - [192, "vector"], - [208, "vector4s-3"] - ], - "string->sound-name": [[16, "qword"]], - "(method 15 trajectory)": [ - [16, "vector"], - [32, "vector"] - ], - "ripple-add-debug-sphere": [[16, "vector"]], - "camera-teleport-to-entity": [ - [16, "transformq"], - [64, "event-message-block"] - ], - "(method 10 cam-vector-seeker)": [[16, "vector"]], - "joint-mod-look-at-handler": [ - [16, "vector"], - [32, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"] - ], - "joint-mod-world-look-at-handler": [ - [16, "vector"], - [32, "vector"], - [64, "vector"], - [80, "matrix"], - [144, "vector"], - [160, "vector"], - [176, "matrix"] - ], - "joint-mod-rotate-handler": [ - [16, "quaternion"], - [32, "quaternion"], - [48, "quaternion"] - ], - "joint-mod-wheel-callback": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - "draw-end-credits": [[16, "font-context"]], - "draw-title-credits": [[16, "font-context"]], - "moving-sphere-sphere-intersect": [[16, "vector"]], - "moving-sphere-moving-sphere-intersect": [ - [16, "vector"], - [32, "vector"] - ], - "(method 9 cylinder-flat)": [ - [16, "vector"], - [32, "vector"], - [48, "cylinder-flat-verts"], - [208, "cylinder-flat-verts"], - [368, "matrix"], - [432, "vector"] - ], - "(method 9 cylinder)": [ - [16, "vector"], - [32, "vector"], - [48, "cylinder-verts"], - [432, "cylinder-verts"], - [816, "matrix"], - [880, "matrix"] - ], - "ray-arbitrary-circle-intersect": [ - [16, "vector"], - [32, "vector"] - ], - "(method 10 cylinder-flat)": [ - [16, "vector"], - [32, "vector"] - ], - "(method 10 cylinder)": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-sphere-from-table": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - "make-debug-sphere-table": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - "(method 20 actor-link-info)": [[16, "event-message-block"]], - "(method 21 actor-link-info)": [[16, "event-message-block"]], - "(method 23 actor-link-info)": [[16, "event-message-block"]], - "(method 24 actor-link-info)": [[16, "event-message-block"]], - "internal-draw-debug-line": [ - [16, "vector4w-2"], - [48, "vector4w-2"] - ], - "internal-draw-debug-text-3d": [ - [16, "vector4w"], - [32, "font-context"] - ], - "add-debug-triangle-normal": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-flat-triangle": [ - [16, "vector4w-3"], - [64, "vector4w-3"] - ], - "add-debug-point": [[16, "vector4w-2"]], - "add-debug-line2d": [ - [16, "vector4w"], - [32, "vector4w"] - ], - "add-debug-box": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-x": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-sphere-with-transform": [[16, "vector"]], - "add-debug-circle": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-vector": [[16, "vector"]], - "add-debug-yrot-vector": [[16, "vector"]], - "add-debug-arc": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-curve": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-points": [[16, "vector"]], - "add-debug-light": [[16, "vector"]], - "dma-timeout-cam": [ - [16, "vector"], - [32, "matrix"] - ], - - "(method 18 tracking-spline)": [ - [16, "tracking-spline-sampler"], - [32, "tracking-spline-sampler"] - ], - - "draw-ocean-transition": [[16, "sphere"]], - - "dm-cam-mode-func": [[16, "event-message-block"]], - "ocean-trans-add-upload-table": [[16, "vector"]], - - "dm-cam-settings-func": [[16, "event-message-block"]], - - "dm-cam-render-float": [[16, "event-message-block"]], - - "debug-create-cam-restore": [[16, "euler-angles"]], - - "dm-task-resolution": [[16, "event-message-block"]], - - "dm-task-get-money": [[16, "event-message-block"]], - - "dm-give-all-cells": [[16, "event-message-block"]], - - "dm-give-cell": [[16, "event-message-block"]], - - "(anon-function 13 default-menu)": [[16, "event-message-block"]], - - "(anon-function 12 default-menu)": [[16, "event-message-block"]], - - "(anon-function 11 default-menu)": [[16, "event-message-block"]], - - "(method 22 level)": [[16, "event-message-block"]], - "(method 9 level)": [[16, "event-message-block"]], - "(method 10 load-state)": [[16, "event-message-block"]], - "cam-slave-get-rot": [[16, "quaternion"]], - - "draw-joint-spheres": [[16, "vector"]], - "(method 16 process-drawable)": [ - [16, "matrix"], - [80, "matrix"], - [144, "vector"], - [160, "vector"] - ], - "(anon-function 494 task-control)": [[16, "event-message-block"]], - "(anon-function 493 task-control)": [[16, "event-message-block"]], - "(anon-function 480 task-control)": [[16, "event-message-block"]], - "(anon-function 477 task-control)": [[16, "event-message-block"]], - "(anon-function 476 task-control)": [[16, "event-message-block"]], - "(anon-function 475 task-control)": [[16, "event-message-block"]], - "(anon-function 474 task-control)": [[16, "event-message-block"]], - "(anon-function 455 task-control)": [[16, "event-message-block"]], - "(anon-function 445 task-control)": [[16, "event-message-block"]], - "(anon-function 435 task-control)": [[16, "event-message-block"]], - "(anon-function 426 task-control)": [[16, "event-message-block"]], - "(anon-function 425 task-control)": [[16, "event-message-block"]], - "(anon-function 415 task-control)": [[16, "event-message-block"]], - "(anon-function 414 task-control)": [[16, "event-message-block"]], - "(anon-function 403 task-control)": [[16, "event-message-block"]], - "(anon-function 400 task-control)": [[16, "event-message-block"]], - "(anon-function 393 task-control)": [[16, "event-message-block"]], - "(anon-function 390 task-control)": [[16, "event-message-block"]], - "(anon-function 383 task-control)": [[16, "event-message-block"]], - "(anon-function 380 task-control)": [[16, "event-message-block"]], - "(anon-function 369 task-control)": [[16, "event-message-block"]], - "(anon-function 368 task-control)": [[16, "event-message-block"]], - "(anon-function 367 task-control)": [[16, "event-message-block"]], - "(anon-function 366 task-control)": [[16, "event-message-block"]], - "(anon-function 365 task-control)": [[16, "event-message-block"]], - "(anon-function 364 task-control)": [[16, "event-message-block"]], - "(anon-function 363 task-control)": [[16, "event-message-block"]], - "(anon-function 362 task-control)": [[16, "event-message-block"]], - "(anon-function 337 task-control)": [[16, "event-message-block"]], - "(anon-function 336 task-control)": [[16, "event-message-block"]], - "(anon-function 286 task-control)": [[16, "event-message-block"]], - "(anon-function 227 task-control)": [[16, "event-message-block"]], - "(anon-function 38 task-control)": [[16, "event-message-block"]], - "(anon-function 28 task-control)": [[16, "event-message-block"]], - "(method 10 border-plane)": [[16, "vector"]], - "(method 9 game-info)": [[16, "event-message-block"]], - "(method 9 continue-point)": [[16, "vector"]], - "(method 9 game-save)": [[16, "file-stream"]], - "(method 10 game-save)": [[16, "file-stream"]], - "vector-vector-deg-slerp!": [ - [16, "vector"], - [32, "vector"], - [48, "quaternion"], - [64, "quaternion"], - [80, "quaternion"], - [96, "vector"] - ], - "closest-pt-in-triangle": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - "vector-circle-tangent-new": [ - [16, "sphere"], - [32, "vector"], - [48, "vector"] - ], - "vector-circle-tangent": [ - [16, "sphere"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - "vector-plane-distance": [[16, "vector"]], - "curve-length": [ - [16, "vector"], - [32, "vector"] - ], - "curve-closest-point": [ - [16, "vector"], - [32, "vector"] - ], - "(method 27 seagull)": [ - [16, "vector"], - [32, "vector"] - ], - "add-debug-air-box": [ - [16, "vector"], - [32, "vector"] - ], - "mem-size": [[16, "memory-usage-block"]], - "display-loop": [[16, "sphere"]], - "(method 14 curve-control)": [[16, "vector"]], - "(method 19 path-control)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - "progress-allowed?": [[16, "event-message-block"]], - "(method 9 align-control)": [ - [16, "matrix"], - [80, "quaternion"] - ], - "(method 10 align-control)": [[16, "vector"]], - "(method 15 load-state)": [ - [16, "event-message-block"], - [96, "event-message-block"] - ], - - "(method 43 farmer)": [[16, "vector"]], - - "yakow-post": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"] - ], - - "anim-tester-save-object-seqs": [[16, "file-stream"]], - "anim-test-obj-list-handler": [[16, "event-message-block"]], - "anim-test-anim-list-handler": [[16, "event-message-block"]], - "anim-test-sequence-list-handler": [[16, "event-message-block"]], - "anim-test-edit-seq-insert-item": [[16, "event-message-block"]], - "anim-test-edit-sequence-list-handler": [ - [112, "event-message-block"], - [16, "font-context"] - ], - "anim-tester-add-newobj": [[16, "event-message-block"]], - "anim-tester-start": [[16, "event-message-block"]], - "anim-tester-add-sequence": [[16, "event-message-block"]], - - "instance-tfragment-add-debug-sphere": [[16, "vector"]], - - "cam-state-from-entity": [[16, "curve"]], - - "(method 9 cam-index)": [[16, "vector"]], - - "(method 10 cam-index)": [[16, "vector"]], - - "(method 15 tracking-spline)": [ - [16, "tracking-spline-sampler"], - [32, "tracking-point"] - ], - "(method 16 tracking-spline)": [ - [16, "tracking-spline-sampler"], - [32, "vector"] - ], - "(method 20 tracking-spline)": [ - [16, "vector"], - [32, "vector"] - ], - "(method 21 tracking-spline)": [ - [16, "tracking-spline-sampler"], - [32, "vector"] - ], - "(method 22 tracking-spline)": [ - [16, "tracking-spline-sampler"], - [32, "vector"] - ], - "cam-slave-init": [[16, "event-message-block"]], - "cam-curve-pos": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - "cam-calc-follow!": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"] - ], - "mat-remove-z-rot": [ - [16, "vector"], - [32, "matrix"] - ], - "slave-matrix-blend-2": [ - [16, "vector"], - [32, "quaternion"], - [48, "quaternion"], - [64, "quaternion"] - ], - "vector-into-frustum-nosmooth!": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"] - ], - "slave-set-rotation!": [ - [16, "vector"], - [32, "matrix"], - [96, "vector"], - [112, "matrix"], - [176, "vector"] - ], - "v-slrp2!": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "matrix"], - [128, "vector"] - ], - "v-slrp3!": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "matrix"], - [128, "vector"] - ], - - "(code cam-combiner-active)": [ - [16, "vector"], - [32, "matrix"], - [80, "vector"], - [96, "matrix"] - ], - "cam-master-init": [ - [16, "vector"], - [32, "vector"] - ], - "plane-from-points": [[16, "vector"]], - "update-view-planes": [ - [16, "view-frustum"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "vector"] - ], - "move-camera-from-pad": [[16, "vector"]], - "cam-free-floating-move": [[16, "camera-free-floating-move-info"]], - "update-camera": [ - [16, "vector"], - [32, "quaternion"], - [48, "vector"] - ], - - "ocean-make-trans-camera-masks": [ - [16, "vector"], - [32, "vector"] - ], - - "update-mood-prt-color": [[16, "vector"]], - - "update-mood-swamp": [[16, "vector"]], - - "update-mood-village1": [[16, "vector"]], - - "update-mood-maincave": [[16, "vector"]], - - "update-mood-ogre": [[16, "vector"]], - - "update-mood-finalboss": [ - [16, "vector"], - [32, "vector"] - ], - - "update-mood-darkcave": [ - [16, "vector"], - [32, "vector"] - ], - - "update-mood-citadel": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"] - ], - - "update-mood-jungleb": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "update-mood-sunken": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "update-mood-village2": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "update-mood-rolling": [ - [16, "vector"] // TODO - really not sure about this one - ], - - "update-mood-village3": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"] - ], - - "ocean-transition-check": [[16, "vector"]], - - "ocean-trans-add-upload-strip": [[16, "vector"]], - - "draw-ocean-transition-seams": [[16, "sphere"]], - - "(method 32 mayor)": [[16, "event-message-block"]], - - "(method 43 mayor)": [[16, "vector"]], - - "(method 10 tippy)": [[16, "vector"]], - - "compute-and-draw-shadow": [ - [16, "vector"], - [32, "vector"], - [48, "sparticle-cpuinfo"] // kinda a guess - ], - - "find-ground-and-draw-shadow": [ - [16, "vector"], - [32, "vector"], - [48, "collide-tri-result"] - ], - - "(method 20 collide-cache)": [[16, "vector"]], - - "(method 12 wobbler)": [[16, "vector"]], - - "(method 12 twister)": [[16, "matrix"]], - - "target-on-end-of-teetertotter?": [ - [16, "vector"], - [32, "vector"] - ], - - "(event teetertotter-launch)": [[16, "event-message-block"]], - - "(method 17 rigid-body)": [[16, "vector"]], - - "matrix-3x3-triple-transpose-product": [ - [16, "matrix"], - [80, "matrix"] - ], - - "(method 10 rigid-body)": [[16, "quaternion"]], - - "(method 13 rigid-body)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 16 rigid-body)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 14 rigid-body)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 18 rigid-body)": [[16, "vector"]], - - "(method 24 rigid-body-platform)": [[16, "vector"]], - - "(method 26 rigid-body-platform)": [[16, "vector"]], - - "(method 27 rigid-body-platform)": [[16, "vector"]], - - "(method 22 water-anim)": [[16, "vector"]], - - "(anon-function 9 plat-eco)": [[16, "event-message-block"]], - - "(trans plat-button-move-downward sunken-elevator)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(method 29 sunken-elevator)": [[16, "vector"]], - "(anon-function 0 title-obs)": [[16, "font-context"]], - - "print-game-text": [[16, "font-context"]], - - "draw-string-xy": [[16, "font-context"]], - - "(method 50 nav-enemy)": [[16, "vector"]], - - "nav-enemy-init-by-other": [[16, "vector"]], - - "nav-enemy-turn-to-face-point": [[16, "vector"]], - - "nav-enemy-facing-point?": [[16, "vector"]], - - "nav-enemy-jump-post": [[16, "vector"]], - - "(method 41 nav-enemy)": [ - [16, "vector"], - [32, "vector"] - ], - - "nav-enemy-falling-post": [ - [16, "vector"] // TODO - check collide-shape-moving::62(type, vector, float) - ], - - "nav-enemy-death-post": [ - [16, "vector"] // TODO - check collide-shape-moving::62(type, vector, float) - ], - - "nav-enemy-jump-land-post": [ - [16, "vector"], - [32, "vector"] - ], - - "nav-enemy-facing-direction?": [ - [16, "vector"], - [32, "vector"] - ], - - "nav-enemy-initialize-custom-jump": [ - [16, "vector"], - [32, "vector"] - ], - - "nav-enemy-flee-post": [ - [16, "vector"], - [32, "vector"] - ], - - "(enter nav-enemy-jump-land nav-enemy)": [[16, "vector"]], - "(code nav-enemy-die nav-enemy)": [[16, "event-message-block"]], - "(enter nav-enemy-die nav-enemy)": [[16, "event-message-block"]], - "(trans nav-enemy-flee nav-enemy)": [[16, "event-message-block"]], - "(trans nav-enemy-patrol nav-enemy)": [[16, "event-message-block"]], - - "(method 73 nav-enemy)": [[16, "event-message-block"]], - - "(method 43 nav-enemy)": [[16, "event-message-block"]], - - "nav-enemy-send-attack": [[16, "event-message-block"]], - - "birth-pickup-at-point": [[16, "vector"]], - - "merc-blend-shape": [[16, ["array", "int16", 128]]], - - "(method 43 bird-lady)": [[16, "vector"]], - - "(method 32 bird-lady-beach)": [[16, "event-message-block"]], - - "muse-to-idle": [[16, "event-message-block"]], - - "(method 32 sculptor)": [[16, "event-message-block"]], - - "(method 43 sculptor)": [[16, "vector"]], - - "(method 32 geologist)": [[16, "event-message-block"]], - - "(method 43 geologist)": [[16, "vector"]], - - "(method 32 oracle)": [[16, "event-message-block"]], - - "(method 11 oracle)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(method 32 explorer)": [[16, "event-message-block"]], - - "(method 43 explorer)": [[16, "vector"]], - - "(method 32 assistant)": [[16, "event-message-block"]], - - "(method 43 assistant)": [[16, "vector"]], - - "(code idle assistant)": [ - [16, "vector"], - [32, "vector"] - ], - - "check-drop-level-assistant": [[16, "vector"]], - - "(method 32 sage)": [[16, "event-message-block"]], - - "(method 43 sage)": [[16, "vector"]], - - "(trans idle sage)": [[16, "event-message-block"]], - - "(method 32 gambler)": [[16, "event-message-block"]], - - "(method 43 gambler)": [[16, "vector"]], - - "(method 32 warrior)": [[16, "event-message-block"]], - - "(method 43 warrior)": [[16, "vector"]], - - "(exit play-anim warrior)": [[16, "event-message-block"]], - - "minershort-trans-hook": [[16, "vector"]], - - "(method 32 minershort)": [[16, "event-message-block"]], - - "(exit play-anim minershort)": [[16, "event-message-block"]], - - "(method 43 minershort)": [[16, "vector"]], - - "(method 33 progress)": [[16, "event-message-block"]], - "hide-progress-screen": [[16, "event-message-block"]], - "progress-init-by-other": [[16, "quaternion"]], - "(post progress-debug)": [[16, "font-context"]], - "(post progress-normal)": [[16, "font-context"]], - "(code progress-normal)": [[16, "event-message-block"]], - "fuel-cell-progress-hud-orbit-callback": [ - [16, "vector"], - [32, "vector"] - ], - "(method 24 progress)": [[16, "font-context"]], - "(method 25 progress)": [[16, "font-context"]], - "(method 26 progress)": [[16, "font-context"]], - "(method 17 progress)": [[16, "font-context"]], - "(method 28 progress)": [[16, "font-context"]], - "(method 27 progress)": [[16, "font-context"]], - - "(method 11 fact-info-target)": [[16, "event-message-block"]], - - "(anon-function 6 game-info)": [[16, "event-message-block"]], - - "(anon-function 8 game-info)": [[16, "event-message-block"]], - - "(method 24 game-info)": [[16, "scf-time"]], - - "auto-save-post": [ - [16, "font-context"], - [112, "font-context"] - ], - - "auto-save-init-by-other": [[16, "event-message-block"]], - - "(code error auto-save)": [[16, "event-message-block"]], - - "(code done auto-save)": [[16, "event-message-block"]], - - "update-time-of-day": [ - [16, "(array float)"], // TODO - broken! - [48, "vector"] - ], - - "check-drop-level-rain": [[16, "vector"]], - - "update-rain": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "sparticle-track-sun": [[16, "vector"]], - - "(method 16 target)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "vector-local+!": [[16, "vector"]], - - "move-forward": [ - [16, "vector"], - [32, "vector"] - ], - - "set-forward-vel": [[16, "vector"]], - - "delete-back-vel": [ - [16, "vector"], - [32, "vector"] - ], - - "set-side-vel": [[16, "vector"]], - - "build-conversions": [[16, "vector"]], - - "vector-turn-to": [ - [16, "vector"], - [32, "vector"] - ], - - "warp-vector-into-surface!": [[16, "matrix"]], - - "vector<-pad-in-surface!": [[16, "vector"]], - - "local-pad-angle": [ - [16, "vector"], - [32, "vector"] - ], - - "turn-around?": [ - [16, "vector"], - [32, "vector"] - ], - - "target-move-dist": [[16, "vector"]], - - "turn-to-vector": [ - [16, "vector"], - [32, "vector"] - ], - - "add-thrust": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "vector"] - ], - - "add-gravity": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "target-compute-slopes": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"] - ], - - "do-rotations2": [ - [16, "vector"], - [32, "quaternion"], - [48, "quaternion"] - ], - - "level-setup": [[16, "event-message-block"]], - - "flag-setup": [ - [16, "vector"], - [32, "event-message-block"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"] - ], - - "target-compute-edge": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"] - ], - - "target-compute-edge-rider": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "target-calc-camera-pos": [[16, "vector"]], - - "joint-points": [ - [16, "vector"], - [32, "vector"] - ], - - "target-real-post": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "target-swim-post": [[16, "vector"]], - - "target-no-stick-post": [[16, "vector"]], - - "target-no-move-post": [ - [16, "collide-edge-hold-list"] // a total guess - ], - - "target-slide-down-post": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "matrix"] - ], - - "target-no-ja-move-post": [ - [16, "collide-edge-hold-list"] // a total guess - ], - - "target-print-stats": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "target-compute-pole": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"], - [160, "vector"], - [176, "vector"], - [192, "vector"] - ], - - "can-exit-duck?": [ - [16, "collide-using-spheres-params"], - [48, ["inline-array", "sphere", 2]] - ], - - "(method 32 evilbro)": [[16, "event-message-block"]], - - "(exit play-anim evilbro)": [[16, "event-message-block"]], - - "(method 29 basebutton)": [[16, "event-message-block"]], - - "(code use warp-gate)": [[16, "event-message-block"]], - - "(trans use warp-gate)": [[16, "event-message-block"]], - - "(anon-function 1 basebutton)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(code target-warp-out)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"] - ], - - "dm-anim-tester-func": [[16, "event-message-block"]], - - "update-actor-vis-box": [[16, "vector"]], - - "(method 14 level-group)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans falling beach-rock)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"] - ], - - "(code falling beach-rock)": [[16, "event-message-block"]], - - "(method 11 beach-rock)": [[16, "vector"]], - - "birth-func-copy-target-y-rot": [[16, "matrix"]], - - "birth-func-ground-orient": [ - [16, "vector"], - [32, "collide-tri-result"], - [128, "vector"], - [144, "quaternion"], - [160, "quaternion"] - ], - - "birth-func-target-orient": [ - [32, "vector"], - [48, "vector"], // unused - [64, "quaternion"], - [80, "quaternion"] - ], - - "birth-func-vector-orient": [ - [16, "vector"], - [32, "vector"], // unused - [48, "quaternion"] - ], - - "part-tracker-track-target-joint": [[16, "vector"]], - - "process-drawable-burn-effect": [ - [16, "rgbaf"], - [32, "rgbaf"], - [48, "vector"] - ], - - "(anon-function 27 projectiles)": [[16, "vector"]], - - "projectile-collision-reaction": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"], - [96, "vector"], - [112, "event-message-block"], - [192, "vector"], - [208, "vector"] - ], - - "(event projectile-moving projectile)": [[16, "event-message-block"]], - - "(code projectile-moving projectile)": [[16, "vector"]], - - "projectile-update-velocity-space-wars": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "(code projectile-die projectile)": [[16, "event-message-block"]], - - "projectile-init-by-other": [[16, "collide-edge-hold-list"]], - - "(method 27 projectile-yellow)": [[16, "vector"]], - - "spawn-projectile-blue": [ - [16, "vector"], - [32, "vector"] - ], - - "(enter plat-button-move-downward jungle-elevator)": [ - [16, "event-message-block"] - ], - - "(trans plat-button-move-downward jungle-elevator)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(method 29 jungle-elevator)": [[16, "vector"]], - - "(event bouncer-wait)": [[16, "event-message-block"]], - - "hopper-find-ground": [ - [16, "vector"], - [32, "collide-tri-result"] - ], - - "blocking-plane-init-by-other": [[16, "matrix"]], - - "evilsib-trans-hook-wait": [[16, "event-message-block"]], - - "(method 32 sequenceB)": [[16, "event-message-block"]], - - "(event play-anim sequenceB)": [[16, "event-message-block"]], - - "(exit play-anim sequenceB)": [[16, "event-message-block"]], - - "sequenceC-can-trans-hook-2": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "sequenceC-can-trans-hook": [[16, "event-message-block"]], - - "(method 32 sequenceC)": [[16, "event-message-block"]], - - "sequenceC-trans-hook": [[16, "vector"]], - - "(trans hidden assistant-firecanyon)": [[16, "font-context"]], - - "(method 32 sage-bluehut)": [[16, "event-message-block"]], - - "(exit play-anim sage-bluehut)": [[16, "event-message-block"]], - - "(method 43 sage-bluehut)": [[16, "vector"]], - - "(method 37 sharkey)": [[16, "vector"]], - - "(method 39 sharkey)": [[16, "vector"]], - - "sharkey-notice-player?": [[16, "event-message-block"]], - - "sharkey-move-to-attack-position": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(code nav-enemy-attack sharkey)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(trans nav-enemy-chase sharkey)": [[16, "event-message-block"]], - - "(method 43 lurkercrab)": [ - [16, "vector"], - [32, "vector"] - ], - - "(enter idle assistant-lavatube-end)": [[16, "event-message-block"]], - - "target-has-all-the-cells?": [[16, "event-message-block"]], - - "(code idle power-left)": [[16, "event-message-block"]], - - "(code jump powercellalt)": [[16, "trajectory"]], - - "(enter target-final-door)": [[16, "event-message-block"]], - - "(exit target-final-door)": [[16, "event-message-block"]], - - "(code target-final-door)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "(method 43 aphid)": [[16, "event-message-block"]], - - "(code nav-enemy-give-up aphid)": [[16, "vector"]], - - "aphid-init-by-other": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "voicebox-track": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "crate-standard-event-handler": [[16, "event-message-block"]], - - "plat-trans": [[16, "vector"]], - - "(code door-closing eco-door)": [[16, "overlaps-others-params"]], - - "(code door-open eco-door)": [[16, "event-message-block"]], - - "(code door-opening eco-door)": [[16, "event-message-block"]], - - "(code door-closed eco-door)": [[16, "event-message-block"]], - - "(code plat-button-teleport-to-other-end plat-button)": [[16, "vector"]], - - "plat-button-camera-on": [[16, "event-message-block"]], - - "plat-button-camera-off": [[16, "event-message-block"]], - - "(trans plat-button-move-downward plat-button)": [[16, "vector"]], - - "(trans plat-button-move-upward plat-button)": [[16, "vector"]], - - "(event plat-idle plat-eco)": [[16, "event-message-block"]], - - "(trans plat-idle plat-eco)": [[16, "vector"]], - - "(anon-function 8 plat-eco)": [[16, "event-message-block"]], - - "(anon-function 7 plat-eco)": [ - [16, "vector"] // code - ], - - "(event drop-plat-idle)": [[16, "event-message-block"]], - - "(code drop-plat-rise)": [[16, "vector"]], - - "(post drop-plat-rise)": [[16, "quaternion"]], - - "(code drop-plat-drop)": [[16, "vector"]], - - "(post drop-plat-drop)": [[16, "quaternion"]], - - "(method 21 drop-plat)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "citb-drop-plat-spawn-children": [ - [16, "vector"], - [32, "vector"] - ], - - "citb-drop-plat-drop-all-children": [[16, "event-message-block"]], - - "citb-drop-plat-drop-children": [[16, "event-message-block"]], - - "(event plat-flip-idle)": [[16, "event-message-block"]], - - "(code plat-flip-idle)": [[16, "vector"]], - - "(method 27 square-platform)": [ - [16, "vector"], - [32, "vector"] - ], - - "(event wedge-plat-tip)": [[16, "event-message-block"]], - - "(event wedge-plat-outer-tip)": [[16, "event-message-block"]], - - "(event wall-plat-extending)": [[16, "event-message-block"]], - - "(code wall-plat-extending)": [[16, "vector"]], - - "(event wall-plat-retracting)": [[16, "event-message-block"]], - - "(code wall-plat-retracting)": [[16, "vector"]], - - "(event wall-plat-sync-idle)": [[16, "event-message-block"]], - - "(code wall-plat-sync-idle)": [[16, "vector"]], - - "(method 11 wall-plat)": [[16, "vector"]], - - "reset-target-tracking": [[16, "vector"]], - "reset-drawable-tracking": [[16, "vector"]], - - "master-track-target": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "collide-mesh-cache-tri"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "vector"] - ], - "master-unset-region": [[16, "event-message-block"]], - "master-base-region": [ - [16, "vector"], - [32, "event-message-block"] - ], - "master-switch-to-entity": [[32, "event-message-block"]], - "master-check-regions": [[16, "event-message-block"]], - - "cam-circular-position-into-max-angle": [ - [16, "matrix"], - [80, "matrix"], - [144, "vector"], - [160, "vector"] - ], - "cam-circular-position": [ - [16, "vector"], - [32, "vector"] - ], - "cam-circular-code": [[16, "vector"]], - "(anon-function 37 cam-states)": [ - [48, "vector"], - [64, "event-message-block"], - [16, "vector"], - [32, "vector"] - ], - "cam-string-find-position-rel!": [ - [16, "vector"], - [32, "vector"], - [48, "bone"], - [144, "matrix"] - ], - "cam-los-spline-collide": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(event cam-master-active)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"] - ], - - "(code cam-master-active)": [[16, "event-message-block"]], - - "(exit cam-eye)": [[16, "event-message-block"]], - - "(code cam-fixed)": [[16, "vector"]], - - "(enter cam-eye)": [[16, "vector"]], - - "(enter cam-billy)": [[16, "vector"]], - - "(code cam-pov180)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "(enter cam-fixed-read-entity)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(enter cam-pov-track)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code cam-decel)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(code cam-eye)": [ - [16, "vector"], - [32, "matrix"], - [96, "vector"], - [112, "vector"], - [128, "vector"] - ], - - "(code cam-billy)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "matrix"] - ], - - "(enter cam-standoff-read-entity)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "(code cam-endlessfall)": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"] - ], - - "(enter cam-spline)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"] - ], - - "(code cam-spline)": [[16, "curve"]], - - "(enter cam-circular)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "los-cw-ccw": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"], - [112, "vector"] - ], - - "cam-string-follow": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "cam-string-line-of-sight": [ - [16, "clip-travel-vector-to-mesh-return-info"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "vector"], - [240, "vector"], - [256, "vector"] - ], - - "cam-string-joystick": [ - [16, "vector"], - [32, "matrix"], - [96, "vector"], - [112, "vector"] - ], - - "cam-string-find-hidden": [ - [16, "collide-mesh-cache-tri"], - [112, "vector"], - [128, "vector"] - ], - - "cam-string-move": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "collide-mesh-cache-tri"], - [192, "vector"], - [208, "vector"], - [224, "vector"] - ], - - "cam-string-code": [ - [16, "vector"], - [32, "vector"] - ], - - "(event cam-string)": [[16, "vector"]], - - "(trans cam-stick)": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"], - [112, "vector"] - ], - "cam-bike-code": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"], - [176, "collide-mesh-cache-tri"], - [272, "vector"] - ], - - "cam-stick-code": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "collide-mesh-cache-tri"], - [192, "vector"] - ], - - "(enter cam-string)": [ - [16, "vector"], - [32, "collide-mesh-cache-tri"], - [128, "vector"], - [144, "vector"], - [160, "vector"] - ], - - "cam-los-collide": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"] - ], - - "(code cam-point-watch)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "matrix"] - ], - - "(code cam-orbit)": [ - [16, "vector"], - [32, "vector"] - ], - - "(enter cam-free-floating)": [[16, "event-message-block"]], - - "(enter cam-orbit)": [[16, "vector"]], - - "(method 25 pov-camera)": [[16, "event-message-block"]], - - "(code pov-camera-start-playing pov-camera)": [[16, "event-message-block"]], - - "(code pov-camera-done-playing pov-camera)": [[16, "event-message-block"]], - - "debug-set-camera-pos-rot!": [[16, "event-message-block"]], - - "camera-master-debug": [[16, "vector"]], - - "(method 23 tracking-spline)": [ - [16, "vector"], - [32, "vector"] - ], - - "master-draw-coordinates": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"] - ], - - "camera-slave-debug": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"], - [112, "vector"], - [128, "curve"], - [160, "vector"], - [176, "vector"], - [192, "vector"] - ], - - "cam-debug-draw-tris": [[16, "vector4w"]], - - "cam-collision-record-draw": [ - [16, "vector4w"], - [32, "vector4w"], - [48, "collide-mesh-cache-tri"], - [144, "vector"] - ], - - "debug-euler": [ - [16, "euler-angles"], - [32, "matrix"] - ], - - "v-slrp!": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "interp-test": [ - [16, "vector"], - [32, "vector"] - ], - - "cam-layout-save-cam-trans": [[16, "vector"]], - - "cam-layout-save-pivot": [[16, "vector"]], - - "cam-layout-save-interesting": [[16, "vector"]], - - "cam-layout-save-align": [[16, "vector"]], - - "clmf-cam-flag-toggle": [[16, "clmf-cam-flag-toggle-info"]], - - "interp-test-deg": [ - [16, "vector"], - [32, "vector"] - ], - - "clmf-pos-rot": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"], - [112, "matrix"], - [176, "vector"] - ], - - "clmf-input": [ - [16, "matrix"], - [80, "vector"] - ], - - "cam-layout-entity-info": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "curve"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "curve"], - [256, "vector"], - [272, "vector"], - [288, "vector"], - [304, "curve"], - [336, "vector"], - [352, "vector"], - [368, "interp-test-info"], - [432, "vector"] - ], - - "clmf-save-single": [[16, "file-stream"]], - - "pov-camera-play-and-reposition": [[16, "event-message-block"]], - - "cam-layout-entity-volume-info-create": [ - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"] - ], - - "(code plunger-lurker-plunge)": [[16, "event-message-block"]], - "(event flying-lurker-fly)": [[16, "event-message-block"]], - "(trans flying-lurker-fly)": [[16, "event-message-block"]], - "flying-lurker-handler": [[16, "event-message-block"]], - "flying-lurker-play-intro": [[16, "event-message-block"]], - "(code flying-lurker-start)": [[16, "event-message-block"]], - "(event flying-lurker-clone)": [[16, "event-message-block"]], - "(event flying-lurker-idle)": [[16, "event-message-block"]], - "(code flying-lurker-idle)": [[16, "event-message-block"]], - "flying-lurker-calc-speed": [ - [16, "vector"], - [32, "vector"] - ], - "(method 20 flying-lurker)": [ - [16, "collide-mesh-cache-tri"], - [112, "vector"], - [128, "vector"], - [144, "bounding-box"], - [176, "vector"] - ], - "flying-lurker-rotate": [ - [16, "matrix"], - [80, "matrix"], - [144, "vector"], - [160, "vector"] - ], - - "(method 18 collide-cache)": [[16, "collide-cache-prim"]], - - "kill-current-level-hint": [[16, "event-message-block"]], - "(exit level-hint-sidekick)": [[16, "event-message-block"]], - "(method 14 level-hint)": [[16, "font-context"]], - "(code level-hint-error)": [[16, "font-context"]], - "ambient-type-hint": [[16, "font-context"]], - "ambient-type-sound": [[32, "sound-spec"]], - "ambient-type-sound-loop": [[16, "sound-spec"]], - - "(trans windmill-one-idle)": [ - [16, "vector"] - ], - - "move-grottopole-to-position": [ - [16, "vector"] - ], - - "flying-rock-init-by-other": [ - [16, "vector"] - ], - - "(event flutflutegg-idle)": [ - [16, "vector"] - ], - - "(trans flutflutegg-idle)": [ - [16, "vector"] - ], - - "(event flutflutegg-physics)": [ - [16, "vector"] - ], - - "(code flutflutegg-physics-fall)": [ - [16, "vector"], - [32, "quaternion"] - ], - - "(code flutflutegg-physics)": [ - [16, "vector"], - [32, "quaternion"] - ], - - "(code flying-rock-rolling)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "move-grottopole": [ - [16, "vector"], - [32, "vector"] - ], - - "(code ecoventrock-break)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"] - ], - - "beachcam-spawn": [ - [16, "event-message-block"] - ], - - "(anon-function 8 beach-obs)": [ - [16, "event-message-block"] - ], - - "(code target-warp-in)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(trans active warp-gate)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code idle warp-gate)": [ - [16, "vector"], - [32, "font-context"] - ], - - "(code active warp-gate)": [ - [16, "font-context"] - ], - - "(event basebutton-up-idle warp-gate-switch)": [ - [16, "event-message-block"] - ], - - "(method 31 warp-gate-switch)": [ - [16, "event-message-block"] - ], - - "(trans basebutton-up-idle warp-gate-switch)": [ - [16, "event-message-block"] - ], - - "(event basebutton-down-idle warp-gate-switch)": [ - [16, "event-message-block"] - ], - - "(code basebutton-going-down warp-gate-switch)": [ - [16, "event-message-block"] - ], - - "(code idle citb-arm-section)": [ - [16, "vector"], - [32, "vector"] - ], - - "(event citb-disc-idle)": [ - [16, "event-message-block"] - ], - - "(post plat-path-active citb-launcher)": [ - [16, "event-message-block"] - ], - - "(event citb-robotboss-idle)": [ - [16, "event-message-block"] - ], - - "(code citb-robotboss-idle)": [ - [16, "event-message-block"] - ], - - "citb-generator-trigger-others": [ - [16, "event-message-block"] - ], - - "(code citb-generator-break)": [ - [16, "event-message-block"] - ], - - "(code citadelcam-stair-plats)": [ - [16, "event-message-block"] - ], - - "(code battlecontroller-play-intro-camera citb-battlecontroller)": [ - [16, "event-message-block"] - ], - - "(trans cavecrystal-active)": [ - [16, "vector"] - ], - - "(method 11 eggtop)": [ - [16, "vector"] - ], - - "(anon-function 4 jungleb-obs)": [ - [16, "event-message-block"] - ], - - "(event idle logtrap)": [ - [16, "event-message-block"] - ], - - "(code pov-camera-playing precurbridgecam)": [ - [16, "event-message-block"] - ], - - "(code precurbridge-idle)": [ - [16, "event-message-block"] - ], - - "(code maindoor-closed)": [ - [16, "event-message-block"] - ], - - "(method 11 maindoor)": [ - [16, "event-message-block"] - ], - - "(code lurkerm-piston-idle)": [ - [16, "vector"] - ], - - "starfish-spawn-child": [ - [16, "vector"] - ], - - "(method 27 bone-platform)": [ - [16, "vector"] - ], - - "(event breakaway-idle)": [ - [16, "event-message-block"] - ], - - "mistycam-spawn": [ - [16, "event-message-block"] - ], - - "mis-bone-bridge-event-handler": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "misty-cam-restore": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"] - ], - - "(trans allpontoons-be-clone)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"] - ], - - "fireboulder-hover-stuff": [ - [16, "vector"] - ], - - "(enter fireboulder-hover)": [ - [16, "vector"] - ], - - "boulder1-trans": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder2-trans-2": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder2-trans": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder3-trans-2": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder3-trans": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder4-trans-3": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder4-trans-2": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "boulder4-trans": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code exit-chamber-dummy-idle)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code exit-chamber-dummy-wait-to-appear)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code ogreboss-village2-throw)": [ - [16, "event-message-block"] - ], - - "swamp-spike-default-event-handler": [ - [16, "event-message-block"] - ], - - "swamp-spike-post": [ - [16, "event-message-block"] - ], - - "(code balance-plat-idle)": [ - [16, "event-message-block"] - ], - - "(code swamp-spike-idle)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code pov-camera-playing maincavecam)": [ - [16, "event-message-block"] - ], - - "(event idle cavetrapdoor)": [ - [16, "event-message-block"] - ], - - "cavecrystal-light-control-caveelevator-callback": [ - [16, "vector"] - ], - - "(method 21 caveelevator)": [ - [16, "vector"] - ], - - "(method 20 caveelevator)": [ - [16, "vector"] - ], - - "caveelevator-joint-callback": [ - [16, "vector"] - ], - - "(event caveflamepots-active)": [ - [16, "attack-info"], - [128, "event-message-block"] - ], - - "(code pov-camera-playing sunkencam)": [ - [16, "event-message-block"] - ], - - "dark-plant-check-target": [ - [16, "event-message-block"] - ], - - "(code dark-plant-idle)": [ - [16, "event-message-block"] - ], - - "(code gorge-abort-idle)": [ - [16, "event-message-block"] - ], - - "(code gorge-finish-idle)": [ - [16, "event-message-block"] - ], - - "(code gorge-start-race-finished)": [ - [16, "event-message-block"] - ], - - "(code gorge-start-race-aborted)": [ - [16, "event-message-block"] - ], - - "(enter gorge-start-racing)": [ - [16, "event-message-block"] - ], - - "(exit gorge-start-racing)": [ - [16, "event-message-block"] - ], - - "(code gorge-start-ready)": [ - [16, "event-message-block"] - ], - - "(code happy-plant-opening)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code pusher-idle)": [ - [16, "vector"] - ], - - "(method 11 gorge-start)": [ - [16, "vector"] - ], - - "(method 11 happy-plant)": [ - [16, "vector"] - ], - - "rolling-start-init-by-other": [ - [16, "matrix"] - ], - - "dark-plant-randomize": [ - [16, "vector"] - ], - - "gorge-init": [ - [16, "vector"] - ], - - "gorge-start-launch-start-banner": [ - [16, "vector"] - ], - - "gorge-behind": [ - [16, "vector"] - ], - - "gorge-in-front": [ - [16, "vector"] - ], - - "race-time-read": [ - [16, "race-time"] - ], - - "gorge-start-draw-time": [ - [16, "font-context"] - ], - - "(event balloon-idle)": [ - [16, "event-message-block"] - ], - - "(trans spike-up)": [ - [16, "event-message-block"] - ], - - "(trans spike-down)": [ - [16, "event-message-block"] - ], - - "(trans spike-idle)": [ - [16, "event-message-block"] - ], - - "(event idle crate-darkeco-cluster)": [ - [16, "event-message-block"] - ], - - "(event idle tntbarrel)": [ - [16, "event-message-block"] - ], - - "(trans ogre-bridge-idle)": [ - [16, "event-message-block"] - ], - - "(code ogre-bridge-activate)": [ - [16, "event-message-block"] - ], - - "(event ogre-bridge-break)": [ - [16, "vector"] - ], - - "(code ride-up gondola)": [ - [16, "event-message-block"] - ], - - "(code ride-down gondola)": [ - [16, "event-message-block"] - ], - - "(code idle gondola)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"], - [128, "font-context"] - ], - - "(code pov-camera-playing snowcam)": [ - [16, "event-message-block"] - ], - - "(code snow-eggtop-activate)": [ - [16, "event-message-block"] - ], - - "(event snowpusher-idle)": [ - [16, "event-message-block"] - ], - - "(code snow-log-wait-for-master)": [ - [16, "event-message-block"] - ], - - "(code snow-log-button-activate)": [ - [16, "event-message-block"] - ], - - "(method 11 snow-eggtop)": [ - [16, "vector"] - ], - - "(method 20 snow-gears)": [ - [16, "vector"] - ], - - "(code snow-switch-activate)": [ - [16, "vector"] - ], - - "(method 11 snow-switch)": [ - [16, "vector"] - ], - - "(code snow-fort-gate-activate)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "(code snow-spatula-idle)": [ - [16, "matrix"] - ], - - "(enter snow-button-activate)": [ - [16, "event-message-block"] - ], - - "(code plat-startup flutflut-plat)": [ - [16, "event-message-block"] - ], - - "(enter flutflut-plat-appear)": [ - [16, "vector"], - [32, "quaternion"] - ], - - "(enter flutflut-plat-hide)": [ - [16, "vector"], - [32, "quaternion"] - ], - - "darkecobarrel-mover-pos": [ - [16, "vector"], - [32, "matrix"], - [96, "vector"], - [112, "matrix"], - [176, "vector"] - ], - - "(code darkecobarrel-mover-die)": [ - [16, "vector"] - ], - - "(code die chainmine)": [ - [16, "vector"] - ], - - "(event idle chainmine)": [ - [16, "event-message-block"] - ], - - "(event idle lavaballoon)": [ - [16, "event-message-block"] - ], - - "(event darkecobarrel-mover-move)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code startup logo)": [ - [16, "event-message-block"] - ], - - "(code ndi logo)": [ - [16, "event-message-block"] - ], - - "(enter target-title)": [ - [16, "event-message-block"] - ], - - "(trans target-title-wait)": [ - [16, "font-context"] - ], - - "(code target-title)": [ - [16, "mc-slot-info"] - ], - - "(post startup logo)": [ - [16, "vector"], - [32, "vector"] - ], - - "sp-relaunch-particle-3d": [ - [16, "quaternion"], - [32, "vector"], - [48, "quaternion"] - ], - - "sp-adjust-launch": [ - [16, "sparticle-launchinfo"], - [64, "matrix"], - [128, "vector"], - [144, "matrix"] - ], - - "(method 10 sparticle-launch-control)": [[16, "vector"]], - - "sparticle-50-to-60": [[16, "quaternion"]], - - "sparticle-60-to-50": [[16, "quaternion"]], - - "sp-orbiter": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"] - ], - - "sp-euler-convert": [ - [16, "vector"], - [32, "quaternion"] - ], - - "sp-rotate-system": [ - [16, "matrix"], - [80, "quaternion"] - ], - - "sp-launch-particles-death": [ - [16, "sprite-vec-data-2d"] // TODO this is probably wrong. - ], - - "birth-func-copy-rot-color": [[16, "vector"]], - - "birth-func-copy2-rot-color": [ - [16, "vector"], - [32, "vector"] - ], - - "(code nav-enemy-give-up babak)": [[16, "vector"]], - - "(method 10 gui-query)": [[16, "font-context"]], - - "(method 46 process-taskable)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans release process-taskable)": [[16, "event-message-block"]], - - "(trans give-cell process-taskable)": [[16, "event-message-block"]], - - "process-taskable-play-anim-code": [[16, "event-message-block"]], - - "(event idle process-taskable)": [[16, "event-message-block"]], - - "(trans idle process-taskable)": [ - [16, "font-context"], - [112, "event-message-block"] - ], - - "(post idle process-taskable)": [[16, "vector"]], - - "babak-with-cannon-ride-cannon-post": [[16, "vector"]], - - "(code babak-with-cannon-jump-onto-cannon)": [[16, "vector"]], - - "(code othercam-running)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code wait-for-start flutflut)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code idle flutflut)": [ - [16, "font-context"], - [112, "event-message-block"] - ], - - "(event wait-for-return flutflut)": [[16, "event-message-block"]], - - "yakow-generate-travel-vector": [ - [16, "vector"], - [32, "vector"] - ], - - "yakow-facing-direction?": [ - [16, "vector"], - [32, "vector"] - ], - - "yakow-facing-point?": [[16, "vector"]], - - "(enter yakow-graze)": [[16, "event-message-block"]], - - "(method 13 vehicle-path)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(method 12 vehicle-controller)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 14 vehicle-controller)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 10 vehicle-controller)": [[16, "vector"]], - - "(method 23 fishermans-boat)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"] - ], - - "fishermans-boat-wave": [[16, "vector"]], - - "fishermans-boat-spawn-particles": [[16, "vector"]], - - "fishermans-boat-play-sounds": [[16, "vector"]], - - "fishermans-boat-post": [[16, "event-message-block"]], - - "(code fishermans-boat-leaving-village)": [[16, "event-message-block"]], - - "(trans fishermans-boat-entering-village)": [[16, "event-message-block"]], - - "(code fishermans-boat-leaving-misty)": [[16, "event-message-block"]], - - "(trans fishermans-boat-entering-misty)": [[16, "event-message-block"]], - - "(exit fishermans-boat-player-control)": [[16, "event-message-block"]], - - "(code fishermans-boat-player-control)": [[16, "event-message-block"]], - - "(code fishermans-boat-ride-to-misty)": [[16, "event-message-block"]], - - "(event fishermans-boat-ride-to-village1)": [[16, "event-message-block"]], - - "(code fishermans-boat-ride-to-village1)": [[16, "event-message-block"]], - - "fishermans-boat-leave-dock?": [[16, "font-context"]], - - "(trans fishermans-boat-player-control)": [[16, "vector"]], - - "(code fishermans-boat-measurements)": [[16, "vector"]], - - "(method 15 vehicle-controller)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "analyze-point-on-path-segment": [[16, "vector"]], - - "(method 51 muse)": [[16, "vector"]], - - "muse-check-dest-point": [[16, "point-on-path-segment-info"]], - - "(code muse-caught)": [[16, "event-message-block"]], - - "(method 43 bonelurker)": [[16, "event-message-block"]], - - "bonelurker-stunned-event-handler": [[16, "event-message-block"]], - - "bonelurker-push-post": [[16, "vector"]], - - "(code nav-enemy-give-up bonelurker)": [[16, "vector"]], - - "(code bonelurker-stun)": [[16, "vector"]], - - "(method 32 assistant-bluehut)": [[16, "event-message-block"]], - - "(trans idle assistant-bluehut)": [[16, "event-message-block"]], - - "(exit play-anim assistant-bluehut)": [[16, "event-message-block"]], - - "(method 32 assistant-levitator)": [[16, "event-message-block"]], - - "(exit play-anim assistant-levitator)": [[16, "event-message-block"]], - - "(method 47 assistant-bluehut)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 43 assistant-bluehut)": [[16, "vector"]], - - "check-drop-level-assistant-bluehut": [[16, "vector"]], - - "assistant-levitator-blue-glow": [[16, "vector"]], - - "(code idle assistant-bluehut)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "assistant-levitator-blue-beam": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "collide-mesh-cache-tri"], - [160, "event-message-block"] - ], - - "(trans hidden assistant-levitator)": [[16, "font-context"]], - - "(event square-platform-lowering)": [[16, "event-message-block"]], - - "(method 33 qbert-plat)": [[16, "event-message-block"]], - - "(method 32 qbert-plat)": [[16, "event-message-block"]], - - "(event qbert-plat-master-idle)": [[16, "event-message-block"]], - - "(code qbert-plat-master-do-door)": [[16, "event-message-block"]], - - "(code qbert-plat-master-wait-for-door)": [[16, "event-message-block"]], - - "(code qbert-plat-master-idle)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"] - ], - - "keg-event-handler": [[16, "event-message-block"]], - - "(code keg-paddle-to-path)": [ - [16, "vector"], - [32, "vector"], - [48, "quaternion"], - [64, "quaternion"], - [80, "vector"] - ], - - "(code keg-on-path)": [ - [16, "vector"], - [32, "vector3s"] - ], - - "(code keg-in-chute)": [ - [16, "vector"], - [32, "vector"] - ], - - "keg-init-by-other": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(code keg-conveyor-paddle-idle)": [[16, "event-message-block"]], - - "(method 11 keg-conveyor)": [ - [16, "vector"], - [32, "matrix"] - ], - - "swamp-bat-slave-event-handler": [[16, "event-message-block"]], - - "swamp-bat-launch-slave": [[16, "event-message-block"]], - - "swamp-bat-slave-path-post": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(code swamp-bat-slave-idle)": [ - [16, "vector"], - [32, "quaternion"], - [48, "quaternion"], - [64, "vector"] - ], - - "(code swamp-bat-slave-launch)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code swamp-bat-slave-die)": [[16, "vector"]], - - "swamp-bat-make-path-select-plane": [[16, "vector"]], - - "(method 44 swamp-rat)": [[16, "event-message-block"]], - - "(method 39 swamp-rat)": [[16, "vector"]], - - "(method 38 swamp-rat)": [[16, "vector"]], - - "(code swamp-rat-spawn)": [[16, "vector"]], - - "swamp-rat-update-wiggle-target": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "swamp-rat-nest-dummy-event-handler": [[16, "event-message-block"]], - - "(trans swamp-rat-nest-gestate)": [[16, "event-message-block"]], - - "(code swamp-rat-nest-victory)": [[16, "event-message-block"]], - - "swamp-rat-nest-pick-spawn-joint": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "swamp-rat-nest-spawn-rat": [ - [16, "vector"], - [32, "vector"] - ], - - "cavecrystal-light-control-default-callback": [[16, "vector"]], - - "spiderwebs-default-event-handler": [[16, "event-message-block"]], - - "(enter nav-enemy-die baby-spider)": [[16, "event-message-block"]], - - "(code baby-spider-die-fast)": [[16, "event-message-block"]], - - "(method 39 baby-spider)": [[16, "vector"]], - - "(enter nav-enemy-idle baby-spider)": [[16, "vector"]], - - "(method 52 baby-spider)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "mother-spider-proj-update-velocity": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "(method 28 mother-spider-proj)": [[16, "vector"]], - - "(code blue-eco-charger-orb-active)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(method 21 blue-eco-charger)": [[16, "event-message-block"]], - - "(method 20 blue-eco-charger)": [[16, "event-message-block"]], - - "(code blue-eco-charger-idle)": [[16, "event-message-block"]], - - "(code exit-chamber-charger-puzzle-beaten)": [[16, "event-message-block"]], - - "(code exit-chamber-idle-in-sunken)": [[16, "event-message-block"]], - - "(event exit-chamber-idle-in-sunken)": [ - [16, "event-message-block"], - [32, "event-message-block"] - ], - - "(method 24 exit-chamber)": [[16, "vector"]], - - "(method 23 exit-chamber)": [ - [16, "vector"], - [32, "vector"], - [48, "exit-chamber-items"], - [128, "event-message-block"], - [208, "vector"] - ], - - "tube-thrust": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"] - ], - - "target-tube-post": [ - [16, "vector"], - [32, "event-message-block"], - [112, "vector"] - ], - - "(event target-tube-start)": [[16, "event-message-block"]], - - "(exit target-tube-start)": [[16, "event-message-block"]], - - "(code target-tube-start)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(method 21 sunkenfisha)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 24 sunkenfisha)": [ - [16, "vector"], - [32, "matrix"], - [96, "vector"] - ], - - "(method 23 sunkenfisha)": [[16, "vector"]], - - "(trans sunkenfisha-idle)": [[16, "vector"]], - - "(method 27 sunkenfisha)": [[64, "vector"]], - - "(event idle minecartsteel)": [[16, "collide-overlap-result"]], - - "(method 43 assistant-villagec)": [[16, "vector"]], - - "(method 32 sage-villagec)": [[16, "event-message-block"]], - - "(method 43 sage-villagec)": [[16, "vector"]], - - "(trans idle sage-villagec)": [[16, "event-message-block"]], - - "(exit play-anim sage-villagec)": [[16, "event-message-block"]], - - "(method 20 cave-trap)": [ - [16, "spawn-baby-spider-work"], - [80, "vector"], - [96, "event-message-block"], - [176, "vector"], - [192, "vector"], - [208, "vector"] - ], - - "(trans cave-trap-idle)": [[16, "event-message-block"]], - - "ice-cube-default-event-handler": [[16, "event-message-block"]], - - "(trans yeti-slave-appear-jump-up)": [[16, "vector"]], - - "(code nav-enemy-give-up yeti-slave)": [[16, "vector"]], - - "(code yeti-resuming-start)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code yeti-idle)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans hidden assistant-lavatube-start)": [[16, "font-context"]], - - "(method 18 nav-control)": [[16, "vector"]], - - "check-drop-level-firehose-pops": [[16, "vector"]], - - "birth-func-random-rot": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"] - ], - - "check-drop-level-bigdoor-open-pops": [[16, "vector"]], - - "check-drop-level-eichar-lighteco-pops": [[16, "vector"]], - - "check-drop-level-maincave-drip": [[16, "vector"]], - - "part-tracker-move-to-target": [[16, "vector"]], - - "part-tracker-track-target": [[16, "vector"]], - - "check-drop-level-village1-fountain-nosplash": [[16, "vector"]], - - "check-drop-level-village1-fountain": [[16, "vector"]], - - "check-drop-level-sagehut": [[16, "vector"]], - - "check-drop-level-training-mist": [[16, "vector"]], - - "check-drop-level-training-spout-rain": [[16, "vector"]], - - "check-drop-level-sagehut2": [[16, "vector"]], - - "(method 15 hud-money-all)": [[16, "font-context"]], - - "(method 20 hud-money-all)": [[16, "event-message-block"]], - - "(method 20 hud-money)": [[16, "event-message-block"]], - - "fuel-cell-hud-orbit-callback": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 19 hud-fuel-cell)": [[16, "vector"]], - - "(method 20 hud-fuel-cell)": [ - [16, "event-message-block"], - [96, "quaternion"] - ], - - "hide-hud": [[16, "event-message-block"]], - - "hide-bottom-hud": [[16, "event-message-block"]], - - "disable-hud": [[16, "event-message-block"]], - - "enable-hud": [[16, "event-message-block"]], - - "hide-hud-quick": [[16, "event-message-block"]], - - "show-hud": [[16, "event-message-block"]], - - "convert-to-hud-object": [[16, "vector"]], - - "(method 16 hud)": [[16, "event-message-block"]], - - "(enter hud-hidden)": [[16, "event-message-block"]], - - "(enter hud-arriving)": [[16, "event-message-block"]], - - "send-hud-increment-event": [[16, "event-message-block"]], - - "(code hud-collecting)": [[16, "vector"]], - - "battlecontroller-fill-all-spawners": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "battlecontroller-camera-on": [[16, "event-message-block"]], - - "(code battlecontroller-die battlecontroller)": [[16, "event-message-block"]], - - "battlecontroller-battle-begin": [[16, "event-message-block"]], - - "battlecontroller-update-spawners": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "battlecontroller-spawn-creature-at-spawner": [ - [16, "vector"], - [32, "vector"] - ], - - "battlecontroller-camera-off": [[16, "event-message-block"]], - - "battlecontroller-spawn-creature-random-spawner": [ - [16, "event-message-block"] - ], - - "(method 10 effect-control)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"] - ], - - "(method 11 effect-control)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 12 effect-control)": [ - [16, "sound-spec"], - [96, "vector"] - ], - - "(code helix-button-startup)": [[16, "vector"]], - - "(method 43 green-eco-lurker)": [[16, "event-message-block"]], - - "(method 73 green-eco-lurker)": [[16, "event-message-block"]], - - "citb-sagecage-draw-bars": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(code sunken-pipegame-start-up)": [[16, "event-message-block"]], - - "(code race-ring-active)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(method 11 race-ring)": [ - [16, "vector"], - [32, "vector"] - ], - - "init-sky-regs": [[16, "vector"]], - - "set-tex-offset": [[16, "vector"]], - - "sky-tng-setup-cloud-layer": [[16, ["inline-array", "sky-vertex", 12]]], - - "fisher-fish-move": [[16, "vector"]], - "fisher-fish-water": [[16, "vector"]], - "(trans play-accept fisher)": [[16, "vector"]], - "(method 11 fisher)": [[16, "vector"]], - "(code fisher-fish-caught)": [[16, "event-message-block"]], - "(code fisher-fish-die)": [[16, "event-message-block"]], - "(exit fisher-done)": [[16, "event-message-block"]], - "(enter fisher-done)": [[16, "event-message-block"]], - "(event fisher-playing)": [[16, "event-message-block"]], - "(enter fisher-playing)": [[16, "event-message-block"]], - "(exit fisher-playing)": [[16, "event-message-block"]], - "(trans enter-playing fisher)": [[16, "event-message-block"]], - "(code target-fishing)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "quaternion"], - [128, "quaternion"], - [144, "quaternion"] - ], - "(method 43 fisher)": [ - [16, "vector"], - [32, "vector"] - ], - "fisher-draw-display": [[16, "font-context"]], - - "(method 10 torus)": [ - [16, "vector"], - [32, "vector"] - ], - "(method 12 torus)": [[16, "matrix"]], - "redshot-trans": [[16, "matrix"]], - "(trans redshot-explode)": [ - [16, "vector"], - [32, "event-message-block"], - [112, "vector"] - ], - "(code darkecobomb-explode)": [[16, "event-message-block"]], - "(event yellowshot-idle)": [[16, "event-message-block"]], - "(trans yellowshot-idle)": [[16, "event-message-block"]], - "(trans darkecobomb-countdown)": [[16, "vector"]], - - "arcing-shot-draw": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 9 torus)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "matrix"], - [128, ["inline-array", "vector", 8]] - ], - - "(method 32 finalbosscam)": [[16, "event-message-block"]], - - "(code cam-robotboss)": [ - [16, "vector"], - [32, "vector"] - ], - - "ecoclaw-beam-particle-callback": [[16, "vector"]], - "robotboss-manipy-trans-hook": [[16, "vector"]], - "robotboss-redshot": [[16, "vector"]], - "robotboss-cut-cam": [[16, "vector"]], - - "robotboss-yellowshot": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(trans robotboss-white-eco-movie)": [[16, "vector"]], - - "(code robotboss-red-wait)": [ - [16, "vector"], - [32, "redshot-launch-array"] - ], - - "(trans robotboss-yellow-wait)": [ - [16, "vector"], - [32, "event-message-block"], - [112, "vector"] - ], - - "robotboss-setup-for-hits": [ - [16, "sphere"], - [32, "event-message-block"] - ], - - "robotboss-position": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"], - [176, "vector"] - ], - - "robotboss-shooting-trans": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "robotboss-darkecobomb": [ - [16, "vector"], - [32, "vector"] - ], - - "robotboss-redshot-fill-array": [ - [16, "vector"], - [32, "vector"] - ], - - "robotboss-blue-beam": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "collide-mesh-cache-tri"], - [160, "vector"], - [176, "event-message-block"] - ], - - "robotboss-bomb-handler": [[16, "event-message-block"]], - "robotboss-blue-done": [[16, "event-message-block"]], - "(exit robotboss-blue-wait)": [[16, "event-message-block"]], - "(enter robotboss-blue-wait)": [[16, "event-message-block"]], - "(exit robotboss-green-wait)": [[16, "event-message-block"]], - "(event robotboss-green-wait)": [[16, "event-message-block"]], - - "(trans robotboss-red-wait)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(exit robotboss-red-wait)": [[16, "event-message-block"]], - "(exit robotboss-yellow-wait)": [[16, "event-message-block"]], - "(code robotboss-white-eco-movie)": [[16, "event-message-block"]], - "(event robotboss-yellow-dark-bomb-wait)": [[16, "event-message-block"]], - "(exit robotboss-yellow-dark-bomb-wait)": [[16, "event-message-block"]], - "(code robotboss-daxter-sacrifice-movie)": [[16, "event-message-block"]], - - "robotboss-greenshot": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans robotboss-blue-wait)": [ - [16, "vector"], - [32, "event-message-block"], - [112, "vector"] - ], - - "(code robotboss-blue-wait)": [[16, "event-message-block"]], - - "(method 44 green-eco-lurker)": [[16, "event-message-block"]], - "(method 72 green-eco-lurker)": [[16, "event-message-block"]], - "(enter nav-enemy-die green-eco-lurker)": [[16, "event-message-block"]], - "(event spawn-minions)": [[16, "event-message-block"]], - "(method 51 green-eco-lurker)": [[16, "vector"]], - "(enter green-eco-lurker-appear)": [ - [16, "vector"], - [32, "vector"] - ], - "(code spawn-minions)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "check-drop-level-lighteco-big-pops": [[16, "vector"]], - "check-drop-level-lighteco-pops": [[16, "vector"]], - "(method 20 light-eco-child)": [[16, "vector"]], - "light-eco-child-default-event-handler": [[16, "event-message-block"]], - "(code light-eco-child-die)": [[16, "event-message-block"]], - "light-eco-mother-default-event-handler": [[16, "event-message-block"]], - "(trans light-eco-child-hit-ground)": [[16, "vector"]], - "(method 21 light-eco-mother)": [[16, "vector"]], - "(method 20 light-eco-mother)": [[16, "vector"]], - - "(trans plat-path-active plat-eco-finalboss)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - "(method 44 sage-finalboss)": [[16, "event-message-block"]], - "(method 45 sage-finalboss)": [[16, "event-message-block"]], - "(method 32 sage-finalboss)": [[16, "event-message-block"]], - "(exit play-anim sage-finalboss)": [[16, "event-message-block"]], - "sage-finalboss-extra-trans": [[16, "event-message-block"]], - "sage-finalboss-extra-enter": [[16, "event-message-block"]], - "(trans play-anim sage-finalboss)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "vector"] - ], - - "lb-flip":[ - [16, "load-boundary-crossing-command"] - ], - - "---lb-save":[ - [16, "file-stream"] - ], - - "edit-load-boundaries":[ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "triangulate-boundary":[ - [16, "lbvtx"] - ], - - "fix-boundary-normals":[ - [16, "vector"] - ], - - "check-closed-boundary":[ - [16, "vector"] - ], - - "(event target-racing-start)": [ - [16, "event-message-block"] - ], - - "(exit target-racing-start)": [ - [16, "event-message-block"] - ], - - "(code target-racing-start)": [ - [16, "event-message-block"] - ], - - "target-racing-smack-check": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans target-racing)": [ - [16, "vector"] - ], - - "(trans target-racing-jump)": [ - [16, "vector"] - ], - - "(trans target-racing-bounce)": [ - [16, "vector"] - ], - - "(code target-racing-hit)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"] - ], - - "(exit target-racing-death)": [ - [16, "event-message-block"] - ], - - "(anon-function 17 racer-states-FIC-LAV-MIS-OGR-ROL)": [ - [16, "joint-exploder-tuning"] - ], - - "(code target-racing-death)": [ - [16, "event-message-block"], - [96, "vector"], - [112, "vector"] - ], - - "(code target-racing-get-on)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(post target-racing-get-on)": [ - [16, "vector"] - ], - - "(code target-racing-get-off-jump)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(post target-racing-get-off-jump)": [ - [16, "vector"] - ], - - "(exit target-racing-clone-anim)": [ - [16, "event-message-block"] - ], - - "(code target-racing-clone-anim)": [ - [16, "event-message-block"] - ], - - "(method 9 joint-control)": [[16, "vector"]], - "process-drawable-birth-fuel-cell": [[16, "vector"]], - "dma-add-process-drawable": [ - [32, "vector"], - [48, "vector"], - [64, "light-group"] - ], - - "(trans notice-blue crate)": [[16, "event-message-block"]], - "(event die crate)": [[16, "event-message-block"]], - "(code notice-blue crate)": [[16, "vector"]], - - "process-grab?": [[16, "event-message-block"]], - "process-release?": [[16, "event-message-block"]], - - "cloud-track": [ - [16, "vector"], - [32, "vector"] - ], - - "target-powerup-effect": [ - [16, "vector"] - ], - - "target-powerup-process": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"], - [160, "vector"], - [176, "vector"], - [192, "touching-shapes-entry"], - [208, "vector"], - [224, "vector"], - [240, "vector"], - [256, "vector"], - [272, "vector"], - [288, "vector"], - [304, "vector"], - [320, "vector"] - ], - - "process-drawable-pair-random-point!": [ - [16, "vector"], - [32, "vector"] - ], - - "update-ocean": [ - [16, "vector"] - ], - - "(method 20 cavegeyserrock)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(method 21 cavegeyserrock)": [ - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(code junglesnake-give-up)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(method 11 cavegeyserrock)": [ - [48, "vector"] - ], - - "cavecrystal-light-control-cavegeyserrock-callback": [ - [16, "vector"] - ], - - "junglesnake-default-event-handler": [ - [16, "event-message-block"] - ], - - "junglesnake-joint-callback": [ - [16, "matrix"], - [80, "matrix"], - [144, "matrix"], - [208, "vector"], - [224, "vector"], - [240, "vector"], - [256, "vector"], - [272, "vector"], - [288, "vector"], - [304, "matrix"], - [368, "matrix"] - ], - - "add-a-bunch": [ - [16, "vector"] - ], - - "(event idle scarecrow-a)": [ - [16, "vector"] - ], - - "(method 11 touching-prims-entry)": [ - [16, "vector"] - ], - - "(code hit scarecrow-a)": [ - [16, "joint-exploder-tuning"] - ], - - "(code hit scarecrow-b)": [ - [16, "joint-exploder-tuning"] - ], - - "(trans orb-cache-top-idle)": [[16, "event-message-block"]], - "(code orb-cache-top-activate)": [ - [16, "vector"], - [32, "event-message-block"] - ], - "(code orb-cache-top-complete)": [[16, "vector"]], - "(method 27 orb-cache-top)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(anon-function 54 generic-obs)": [ - [16, "vector"], - [32, "vector"] - ], - - "part-tracker-notify": [ - [16, "event-message-block"] - ], - - "process-grab?": [ - [16, "event-message-block"] - ], - - "process-release?": [ - [16, "event-message-block"] - ], - - "camera-change-to": [ - [16, "event-message-block"] - ], - - "camera-look-at": [ - [16, "event-message-block"] - ], - - "ja-anim-done?": [ - [16, "event-message-block"] - ], - - "draw-eco-beam": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "quaternion"] - ], - - "process-drawable-pair-random-point!": [ - [16, "vector"], - [32, "vector"] - ], - - "(anon-function 7 generic-obs)": [ - [16, "event-message-block"] - ], - - "(anon-function 11 generic-obs)": [ - [16, "event-message-block"] // trans - ], - - "(anon-function 13 generic-obs)": [ - [16, "event-message-block"] // event - ], - - "(anon-function 14 generic-obs)": [ - [16, "event-message-block"] // trans - ], - - "(anon-function 16 generic-obs)": [ // code - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(anon-function 18 generic-obs)": [ // enter - [16, "vector"] - ], - - "cam-launcher-long-joystick": [ - [16, "matrix"] - ], - - "(anon-function 21 generic-obs)": [ // code - [16, "event-message-block"] - ], - - "(anon-function 23 generic-obs)": [ // enter - [16, "vector"] - ], - - "cam-launcher-joystick": [ - [16, "matrix"], - [80, "vector"] - ], - - "(anon-function 31 generic-obs)": [ - [16, "vector"] // code - ], - - "(code swingpole-stance)": [ - [16, "event-message-block"] - ], - - "camera-anim": [ - [16, "event-message-block"] - ], - - "camera-pov-from": [ - [16, "event-message-block"] - ], - - "(method 14 camera-tracker)": [ - [16, "event-message-block"], - [96, "event-message-block"] - ], - - "(anon-function 33 generic-obs)": [ - [16, "event-message-block"] - ], - - "(trans manipy-idle)": [ - [16, "vector"], - [32, "vector"] - ], - - "(anon-function 34 generic-obs)": [ - [16, "event-message-block"] - ], - - "(exit camera-tracker-process)": [ - [16, "event-message-block"] - ], - - "(code camera-tracker-process)": [ - [16, "event-message-block"] - ], - - "(code cam-launcher-shortfall)": [ - [16, "event-message-block"] - ], - - "(trans launcher-idle)": [ - [16, "event-message-block"] - ], - - "(event launcher-active)": [ - [16, "event-message-block"] - ], - - "(event touch-tracker-idle)": [ - [16, "event-message-block"] - ], - - "(trans launcher-active)": [ - [16, "event-message-block"] - ], - - "(code touch-tracker-idle)": [ - [16, "touching-shapes-entry"] - ], - - "(event manipy-idle)": [ - [16, "matrix"] - ], - - "(code med-res-level-idle)": [ - [16, "vector"] - ], - - "(enter cam-launcher-longfall)": [ - [16, "vector"] - ], - - "(enter cam-launcher-shortfall)": [ - [16, "vector"] - ], - - "(code cam-launcher-longfall)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "plant-boss-default-event-handler": [ - [16, "event-message-block"] - ], - - "(event plant-boss-vulnerable)": [ - [16, "event-message-block"] - ], - - "(code plant-boss-hit)": [ - [16, "event-message-block"] - ], - - "(code plant-boss-dead)": [ - [16, "event-message-block"] - ], - - "(event plant-boss-attack)": [ - [16, "event-message-block"] - ], - - "(code plant-boss-eat)": [ - [16, "event-message-block"] - ], - - "(anon-function 22 plant-boss)": [ - [16, "event-message-block"] - ], - - "(code plant-boss-vulnerable)": [ - [16, "event-message-block"] - ], - - "(exit plant-boss-vulnerable)": [ - [16, "event-message-block"] - ], - - "(event plant-boss-back-arms-idle)": [ - [16, "event-message-block"] - ], - - "(method 11 plant-boss)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"] - ], - - "(method 60 ice-cube)": [ - [16, "vector"] - ], - - "(method 52 ice-cube)": [ - [16, "vector"] - ], - - "(trans ice-cube-appear)": [ - [16, "vector"] - ], - - "(code ice-cube-appear-land)": [ - [16, "vector"] - ], - - "(code ice-cube-face-player)": [ - [16, "vector"] - ], - - "(code ice-cube-mean-turn-to-charge)": [ - [16, "vector"] - ], - - "(method 54 ice-cube)": [ - [16, "vector"] - ], - - "(code ice-cube-shatter)": [ - [16, "vector"], - [32, "joint-exploder-tuning"] - ], - - "(trans ice-cube-trying-to-appear)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans ice-cube-mean-charge)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(method 51 ice-cube)": [ - [16, "vector"], - [32, "collide-tri-result"] - ], - - "(method 53 ice-cube)": [ - [16, "vector"], - [32, "collide-mesh-cache-tri"] - ], - - "(event double-lurker-top-knocked-down)": [ - [16, "event-message-block"] - ], - - "(code double-lurker-top-knocked-down)": [ - [16, "vector"] - ], - - "(method 48 double-lurker)": [ - [16, "vector"] - ], - - "(method 52 double-lurker)": [ - [16, "vector"], - [32, "vector"], - [48, "collide-mesh-cache-tri"] - ], - - "double-lurker-default-event-handler": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code double-lurker-buddy-was-hit)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(trans double-lurker-both-knocked-back)": [ - [16, "check-vector-collision-with-nav-spheres-info"], - [64, "clip-travel-vector-to-mesh-return-info"] - ], - - "(trans double-lurker-knocked-back)": [ - [16, "check-vector-collision-with-nav-spheres-info"], - [64, "clip-travel-vector-to-mesh-return-info"] - ], - - "(code nav-enemy-die billy-rat)": [ - [16, "event-message-block"] - ], - - "(code billy-rat-eat)": [ - [16, "event-message-block"] - ], - - "(code billy-rat-salivate)": [ - [16, "event-message-block"] - ], - - "(enter nav-enemy-victory billy-rat)": [ - [16, "event-message-block"] - ], - - "(enter billy-done)": [ - [16, "event-message-block"] - ], - - "(exit billy-done)": [ - [16, "event-message-block"] - ], - - "(trans enter-playing billy)": [ - [16, "event-message-block"] - ], - - "(method 11 billy)": [ - [16, "event-message-block"] - ], - - "(method 32 billy)": [ - [16, "vector"] - ], - - "billy-rat-init-by-other": [ - [16, "vector"] - ], - - "(method 43 billy)": [ - [16, "vector"] - ], - - "(enter billy-playing)": [ - [16, "vector"] - ], - - "billy-game-update": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 20 lurkerworm)": [ - [16, "vector"] - ], - - "lurkerworm-prebind-function": [ - [16, "quaternion"] - ], - - "(method 21 lurkerworm)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "lurkerworm-default-event-handler": [ - [16, "event-message-block"] - ], - - "(method 11 pelican)": [ - [16, "event-message-block"] - ], - - "(code pelican-explode)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(event pelican-circle)": [ - [16, "vector"] - ], - - "pelican-path-update": [ - [16, "vector"] - ], - - "(trans pelican-wait-at-nest)": [ - [16, "vector"] - ], - - "(enter pelican-fly-to-end)": [ - [16, "vector"] - ], - - "(code pelican-spit)": [ - [16, "quaternion"], - [32, "event-message-block"], - [112, "vector"] - ], - - "(enter pelican-circle)": [ - [16, "event-message-block"] - ], - - "(code pelican-wait-at-nest)": [ - [16, "event-message-block"] - ], - - "(event pelican-wait-at-nest)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code pelican-dive)": [ - [16, "event-message-block"] - ], - - "(enter pelican-wait-at-nest)": [ - [16, "event-message-block"] - ], - - "(code pelican-circle)": [ - [16, "event-message-block"] - ], - - "(enter pelican-dive)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(anon-function 37 pelican)": [ - [16, "event-message-block"] - ], - - "(trans energydoor-closed-till-task)": [ - [16, "event-message-block"] - ], - - "(method 11 energydoor)": [ - [16, "event-message-block"] - ], - - "(enter energyhub-stopped)": [ - [16, "event-message-block"] - ], - - "(enter energyhub-stop)": [ - [16, "event-message-block"] - ], - - "energydoor-player-dist": [ - [16, "vector"], - [32, "matrix"] - ], - - "(trans energyarm-idle)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "energyarm-trans": [ - [16, "vector"], - [32, "matrix"] - ], - - "(trans energyball-idle)": [ - [16, "vector"], - [32, "matrix"] - ], - - "(method 11 energyhub)": [ - [16, "vector"], - [32, "matrix"] - ], - - "energyhub-trans": [ - [16, "matrix"] - ], - - "(method 43 red-sagecage)": [ - [16, "vector"] - ], - - "(method 43 blue-sagecage)": [ - [16, "vector"] - ], - - "(method 43 yellow-sagecage)": [ - [16, "vector"] - ], - - "(method 44 citb-sage)": [ - [16, "vector"], - [32, "vector"] - ], - - "(enter hidden citb-sage)": [ - [16, "event-message-block"] - ], - - "(trans idle green-sagecage)": [ - [16, "event-message-block"] - ], - - "(exit play-anim green-sagecage)": [ - [16, "event-message-block"] - ], - - "(trans play-anim green-sagecage)": [ - [16, "event-message-block"] - ], - - "(event play-anim green-sagecage)": [ - [16, "event-message-block"] - ], - - "(method 32 green-sagecage)": [ - [16, "event-message-block"] - ], - - "(event play-anim citb-sage)": [ - [16, "event-message-block"] - ], - - "(event idle citb-sage)": [ - [16, "event-message-block"] - ], - - "(event wait eco-collectable)": [ - [16, "event-message-block"] - ], - - "(enter wait eco-collectable)": [ - [16, "event-message-block"] - ], - - "(event notice-blue eco-collectable)": [ - [16, "event-message-block"] - ], - - "(trans notice-blue eco-collectable)": [ - [16, "event-message-block"] - ], - - "(code pickup eco-collectable)": [ - [16, "event-message-block"] - ], - - "(enter pickup eco-collectable)": [ - [16, "event-message-block"] - ], - - "(code die eco)": [ - [16, "event-message-block"] - ], - - "(code pickup fuel-cell)": [ - [16, "event-message-block"] - ], - - "(code pickup buzzer)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(trans pickup fuel-cell)": [ - [16, "event-message-block"] - ], - - "(event vent-wait-for-touch)": [ - [16, "event-message-block"] - ], - - "add-blue-motion": [ - [16, "vector"] - ], - - "ecovalve-init-by-other": [ - [16, "vector"] - ], - - "(anon-function 69 collectables)": [ - [16, "vector"] - ], - - "(code ecovalve-idle)": [ - [16, "vector"] - ], - - "(method 9 fact-info)": [ - [16, "vector"], - [32, "collide-tri-result"] - ], - - "(method 29 buzzer)": [ - [16, "vector"] - ], - - "(trans wait eco-collectable)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(code jump eco-collectable)": [ - [16, "trajectory"] - ], - - "(event shover-idle)": [ - [16, "attack-info"], - [128, "event-message-block"] - ], - - "(method 21 sun-iris-door)": [ - [16, "vector"] - ], - - "(method 20 sun-iris-door)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(method 20 steam-cap)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(method 21 steam-cap)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"] - ], - - "(method 11 steam-cap)": [ - [32, "vector"] - ], - - "(trans floating-launcher-idle)": [ - [16, "vector"] - ], - - "(trans whirlpool-idle)": [ - [16, "vector"] - ], - - "(method 20 whirlpool)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(method 12 touching-list)": [ - [16, "event-message-block"] - ], - - "(method 9 touching-list)": [ - [16, "touching-shapes-entry"] - ], - - "(method 11 touching-prims-entry)": [ - [16, "vector"] - ], - - "(method 35 collide-shape)": [ - [16, "pull-rider-info"], - [128, "matrix"], - [192, "event-message-block"], - [272, "collide-overlap-result"], - [384, "matrix"], - [448, "collide-overlap-result"], - [560, "matrix"], - [624, "collide-overlap-result"], - [736, "matrix"] - ], - - "(method 44 collide-shape)": [ - [16, "pull-rider-info"] - ], - - "(method 12 collide-mesh)": [ - [16, "matrix"] - ], - - "target-attack-up": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "(method 30 collide-shape)": [ - [16, "vector"] - ], - - "(method 32 collide-shape)": [ - [16, "bounding-box"] - ], - - "(method 33 collide-shape)": [ - [16, "vector"] - ], - - "(method 57 collide-shape-moving)": [ - [16, "vector"] - ], - - "(method 60 collide-shape-moving)": [ - [16, "vector"], - [32, "collide-tri-result"] - ], - - "(method 59 collide-shape-moving)": [ - [16, "collide-mesh-cache-tri"], - [112, "touching-shapes-entry"] - ], - - "(method 58 collide-shape-moving)": [ - [16, "touching-shapes-entry"] - ], - - "simple-collision-reaction": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 62 collide-shape-moving)": [ - [16, "vector"], - [32, "vector"] - ], - - "default-collision-reaction": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [96, "vector"], - [112, "vector"], - [144, "vector"] - ], - - "(method 56 collide-shape-moving)": [ - [16, "event-message-block"] - ], - - "(method 63 collide-shape-moving)": [ - [16, "collide-shape-intersect"], - [160, "vector"], - [176, "vector"] - ], - - "(method 37 control-info)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"] - ], - - "(method 55 collide-shape)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"] - ], - - "(method 41 collide-shape)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 45 collide-shape)": [ - [16, "collide-work"], - [128, "vector"], - [144, "vector"], - [160, "collide-work"], - [272, "vector"], - [288, "vector"], - [304, "collide-work"], - [416, "vector"], - [432, "vector"], - [448, "collide-work"], - [560, "vector"], - [576, "vector"] - ], - - "collide-planes": [ - [16, "bounding-box"], - [48, ["inline-array", "vector", 18]], - [336, ["inline-array", "bounding-box", 18]], - [928, "vector"], - [944, "vector"], - [960, "vector"], - [976, "vector"], - [992, "vector"], - [1008, "vector"], - [1024, "vector"], - [1040, "vector"], - [1056, "vector"], - [1072, "vector"] - ], - - "dma-add-process-drawable": [ - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "marks-cam-restore": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"] - ], - - "gregs-village1-cam-restore": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"] - ], - - "gregs-texture-cam-restore": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"] - ], - - "gregs-texture2-cam-restore": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"] - ], - - "gregs-jungle-cam-restore": [ - [16, "vector"], - [32, "matrix"], - [96, "event-message-block"] - ], - - "eddie-cam-restore": [ - [16, "vector"], - [32, "matrix"] - ], - - "cave-cam-restore": [ - [16, "vector"], - [32, "matrix"] - ], - - "paals-cam-restore": [ - [16, "vector"], - [32, "matrix"] - ], - - "(method 20 target)": [ - [16, "event-message-block"] - ], - - "(method 19 collide-edge-work)": [ - [16, "vector"], - [32, "vector"], - [48, "collide-using-spheres-params"], - [80, "matrix"] - ], - - "(method 14 collide-edge-work)": [ - [16, "vector"] - ], - - "(method 10 collide-edge-work)": [ - [16, "vector"] - ], - - "(method 9 collide-edge-hold-list)": [ - [16, "vector"] - ], - - "collide-shape-moving-angle-set!": [ - [16, "vector"] - ], - - "poly-find-nearest-edge": [ - [16, "vector"], - [64, "vector"] - ], - - "target-collision-reaction": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"] - ], - - "(method 31 collide-cache)": [ - [16, "vector"], - [32, "vector"] - ], - - "(method 43 collide-shape)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"] - ], - - "(method 15 collide-cache)": [ - [16, "bounding-box"] - ], - - "test-closest-pt-in-triangle": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "(method 9 collide-mesh)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(method 10 collide-mesh)": [ - [16, "matrix"] - ], - - "(method 22 collide-shape-prim-mesh)": [ - [16, "collide-tri-result"] - ], - - "find-ground-point": [ - [16, "vector"], - [32, "collide-mesh-cache-tri"], - [128, "bounding-box"], - [160, "vector"] - ], - - "(method 19 collide-shape-prim-sphere)": [[16, "collide-mesh-cache-tri"]], - "(method 37 collide-shape)": [[16, "vector"]], - - "starts": [ - [16, "event-message-block"] - ], - - "(trans target-flop)": [ - [16, "event-message-block"] - ], - - "(event target-wheel)": [ - [16, "event-message-block"] - ], - - "(code target-stance)": [ - [16, "ground-tween-info"] - ], - - "init-var-jump": [ - [16, "vector"] - ], - - "(code target-wheel)": [ - [16, "vector"] - ], - - "(code target-wheel-flip)": [ - [16, "vector"], - [32, "vector"] - ], - - "(enter target-flop)": [ - [16, "vector"] - ], - - "(code target-running-attack)": [ - [16, "vector"] - ], - - "(enter target-flop-hit-ground)": [ - [16, "vector"] - ], - - "(enter target-attack-air)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(enter target-hit-ground)": [ - [16, "vector"] - ], - - "(code target-flop)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(trans target-running-attack)": [ - [16, "vector"], - [32, "vector"] - ], - - "mod-var-jump": [ - [16, "vector"], - [32, "vector"] - ], - - "target-generic-event-handler": [ - [16, "event-message-block"] - ], - - "target-powerup-effect": [ - [16, "vector"] - ], - - "check-water-level-drop": [ - [16, "vector"] - ], - - "(method 13 water-control)": [ - [16, "vector"] - ], - - "(method 10 water-control)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "event-message-block"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"] - ], - - "(method 15 water-control)": [ - [16, "event-message-block"] - ], - - "(anon-function 13 water)": [ - [16, "event-message-block"] - ], - - "(method 26 water-vol)": [ - [16, "event-message-block"] - ], - - "(code wait-for-start racer)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code idle racer)": [ - [16, "font-context"], - [112, "event-message-block"] - ], - - "(event wait-for-return racer)": [ - [16, "event-message-block"] - ], - - "racer-xz": [ - [16, "vector"] - ], - - "racer-cushion": [ - [16, "vector"] - ], - - "target-racing-post": [ - [16, "vector"], - [32, "vector"] - ], - - "racer-effects": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"], - [96, "vector"], - [112, "vector"], - [128, "vector"], - [144, "event-message-block"], - [224, "vector"], - [240, "vector"], - [256, "vector"] - ], - - "racer-sounds": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "racer-collision": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "racer-find-prop-point": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "racer-integrate": [ - [16, "quaternion"] - ], - - "fleeing-nav-enemy-clip-travel": [ - [16, "clip-travel-vector-to-mesh-return-info"], - [176, "vector"], - [192, "vector"], - [208, "vector"] - ], - - "fleeing-nav-enemy-adjust-travel": [ - [16, "matrix"], - [80, "vector"], - [96, "vector"] - ], - - "fleeing-nav-enemy-chase-post-func": [ - [16, "matrix"], - [80, "matrix"] - ], - - "fleeing-nav-enemy-chase-post": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"], - [112, "vector"], - [128, "vector"] - ], - - "(post lightning-mole-debug-run)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "matrix"] - ], - - "(code fleeing-nav-enemy-debug)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "matrix"], - [144, "vector"] - ], - - "(trans nav-enemy-chase lightning-mole)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"] - ], - - "(trans lightning-mole-debug-blend)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code lightning-mole-dive)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans lightning-mole-dive)": [ - [16, "event-message-block"] - ], - - "(trans lightning-mole-head-for-hole)": [ - [16, "event-message-block"] - ], - - "(method 43 lightning-mole)": [ - [16, "event-message-block"] - ], - - "(method 44 lightning-mole)": [ - [16, "event-message-block"] - ], - - "check-drop-level-rolling-dirt": [ - [16, "vector"] - ], - - "check-drop-level-rolling-dirt-finish": [ - [16, "vector"] - ], - - "(code fuel-cell-spline-slider)": [ - [16, "vector"] - ], - - "robber-find-ground": [ - [16, "vector"], - [32, "collide-mesh-cache-tri"], - [128, "vector"] - ], - - "robber-rotate": [ - [16, "matrix"], - [80, "vector"] - ], - - "robber-calc-speed": [ - [16, "vector"] - ], - - "(code robber-die)": [ - [16, "vector"] - ], - - "(code robber-initial-notice)": [ - [16, "vector"] - ], - - "(method 11 robber)": [ - [16, "matrix"] - ], - - "(code robber-debug)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code target-flut-running-attack)": [ - [16, "vector"] - ], - - "(enter target-flut-running-attack)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans target-flut-running-attack)": [ - [16, "vector"], - [32, "vector"] - ], - - "(event target-flut-air-attack)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "target-flut-standard-event-handler": [ - [16, "vector"], - [32, "matrix"] - ], - - "(code target-flut-start)": [ - [16, "event-message-block"] - ], - - "(exit target-flut-clone-anim)": [ - [16, "event-message-block"] - ], - - "(code target-flut-clone-anim)": [ - [16, "event-message-block"] - ], - - "(enter target-flut-air-attack-hit-ground)": [ - [16, "event-message-block"] - ], - - "(event target-flut-jump)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(enter target-flut-air-attack)": [ - [16, "vector"] - ], - - "(post target-flut-get-on)": [ - [16, "vector"] - ], - - "(post target-flut-get-off-jump)": [ - [16, "vector"] - ], - - "(code target-flut-get-on)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(code target-flut-get-off-jump)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(code target-flut-death)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(trans target-flut-air-attack)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code target-flut-hit)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"] - ], - - "target-hit-orient": [ - [16, "vector"] - ], - - "target-hit-move": [ - [16, "vector"], - [32, "vector"], - [48, "matrix"] - ], - - "(anon-function 20 target-death)": [ - [16, "event-message-block"] - ], - - "target-death-anim": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code target-death)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(code target-continue)": [ - [16, "event-message-block"], - [96, "transformq"] - ], - - "velocity-set-to-target!": [ - [16, "vector"] - ], - - "(exit target-hit)": [ - [16, "vector"] - ], - - "(code target-hit)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"], - [80, "event-message-block"] - ], - - "target-hit-push": [ - [16, "vector"] - ], - - "(anon-function 2 target-death)": [ - [16, "vector"] - ], - - "racer-collision-reaction": [ - [16, "vector"], - [32, "vector"], - [48, ["inline-array", "vector", 2]], - [112, "vector"], - [128, "vector"], - [144, "vector"], - [160, "vector"], - [176, "vector"], - [192, "vector"], - [208, "vector"], - [224, "vector"] - ], - - "target-send-attack": [ - [16, "event-message-block"], - [112, "vector"], - [144, "vector"], - [160, "vector"], - [192, "vector"], - [208, "vector"] - ], - - "target-apply-tongue": [ - [16, "vector"] - ], - - "target-bonk-event-handler": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"], - [128, "vector"] - ], - - "(code target-load-wait)": [ - [16, "event-message-block"] - ], - - "(code target-stance-look-around)": [ - [16, "event-message-block"] - ], - - "(enter target-look-around)": [ - [16, "event-message-block"] - ], - - "(exit target-look-around)": [ - [16, "event-message-block"] - ], - - "(code target-look-around)": [ - [16, "event-message-block"] - ], - - "(enter target-billy-game)": [ - [16, "event-message-block"] - ], - - "(exit target-billy-game)": [ - [16, "event-message-block"] - ], - - "(enter target-pole-cycle)": [ - [16, "event-message-block"] - ], - - "(code target-pole-flip-up-jump)": [ - [16, "event-message-block"] - ], - - "(enter target-edge-grab)": [ - [16, "event-message-block"] - ], - - "(exit target-edge-grab)": [ - [16, "event-message-block"] - ], - - "(trans target-swim-up)": [ - [16, "event-message-block"] - ], - - "(code target-launch)": [ - [16, "event-message-block"] - ], - - "(code target-play-anim)": [ - [16, "event-message-block"] - ], - - "(exit target-play-anim)": [ - [16, "event-message-block"] - ], - - "(trans target-edge-grab)": [ - [16, "collide-using-spheres-params"] - ], - - "(exit target-clone-anim)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(enter target-clone-anim)": [ - [16, "event-message-block"] - ], - - "(code target-edge-grab-off)": [ - [16, "event-message-block"], - [96, "vector"] - ], - - "(trans target-look-around)": [ - [16, "vector"], - [32, "vector"] - ], - - "(trans target-pole-cycle)": [ - [16, "vector"] - ], - - "(code target-swim-jump)": [ - [16, "vector"] - ], - - "(anon-function 11 target2)": [ - [16, "vector"], - [48, "vector"], - [64, "vector"], - [80, "vector"] - ], - - "(enter target-yellow-blast)": [ - [16, "vector"] - ], - - "(code target-periscope)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(enter target-yellow-jump-blast)": [ - [16, "vector"] - ], - - "(code target-swim-down)": [ - [16, "vector"] - ], - - "(code target-yellow-jump-blast)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "target-swim-tilt": [ - [16, "vector"], - [32, "vector"], - [48, "vector"] - ], - - "(code target-yellow-blast)": [ - [16, "vector"], - [32, "vector"], - [48, "event-message-block"] - ], - - "(code target-edge-grab-jump)": [ - [16, "vector"], - [32, "event-message-block"] - ], - - "(trans target-billy-game)": [ - [16, "vector"], - [32, "vector"] - ], - - "(code target-wade-walk)": [ - [16, "vector"], - [32, "vector"], - [48, "vector"], - [64, "vector"] - ], - - "clip-restore": [ - [16, "vector"], - [32, "matrix"] - ], "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 0beac81e18..14733163c1 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -1,114 +1,4 @@ { - "(method 2 array)":[ - [23, "gp", "(array int32)"], - [43, "gp", "(array uint32)"], - [63, "gp", "(array int64)"], - [83, "gp", "(array uint64)"], - [102, "gp", "(array int8)"], - [121, "gp", "(array uint8)"], - [141, "gp", "(array int16)"], - [161, "gp", "(array uint16)"], - [185, "gp", "(array uint128)"], - [203, "gp", "(array int32)"], - [222, "gp", "(array float)"], - [231, "gp", "(array float)"], - [248, "gp", "(array basic)"], - [257, "gp", "(array basic)"] - ], - - "(method 3 array)":[ - [44, "gp", "(array int32)"], - [62, "gp", "(array uint32)"], - [80, "gp", "(array int64)"], - [98, "gp", "(array uint64)"], - [115, "gp", "(array int8)"], - [132, "gp", "(array int8)"], // bug in game - [150, "gp", "(array int16)"], - [168, "gp", "(array uint16)"], - [190, "gp", "(array uint128)"], - [203, "gp", "(array int32)"], - [225, "gp", "(array float)"], - [242, "gp", "(array basic)"] - ], - - "(method 2 handle)":[ - [10, "a3", "process"], - [11, "v1", "int"], - [15, "gp", "int"] - ], - - "(method 3 handle)":[ - [10, "gp", "int"] - ], - - "(method 0 cpu-thread)":[ - [13, "v0", "cpu-thread"] - ], - - "(method 0 dead-pool-heap)":[ - [60, "v0", "int"], // a lie, actually the 115 is an align16 constant propagated on addr of heap start. - [61, "v0", "dead-pool-heap"] - ], - - "(method 21 dead-pool-heap)":[ - [5, "v1", "pointer"], - [13, "a0", "pointer"], - [25, "v1", "pointer"] - ], - - "(method 5 dead-pool-heap)":[ - [3, "v1", "int"], - [3, "a0", "int"] - ], - - "remove-exit":[ - [0, "s6", "process"] - ], - - "(method 0 process)":[ - [12, "a0", "int"], - [13, "v0", "process"] - ], - - "inspect-process-heap":[ - [4, "s5", "basic"], - [17, "s5", "int"] - ], - - "return-from-thread-dead":[ - [0, "s6", "process"] - ], - - "(method 14 dead-pool)":[ - [23, "v1", "process"], // bad visit order with #f? - [28, "s4", "(pointer process-tree)"] // bug in real game, see gkernel.gc - ], - - "throw":[ - [20, "s4", "protect-frame"] // type case - ], - - "(method 0 protect-frame)":[ - [0, "a0", "int"], - [1, "v0", "protect-frame"] - ], - - "(method 9 process)":[ - [43, "s5", "process"] - ], - - "(method 10 process)":[ - [24, "s4", "protect-frame"] - ], - - "enter-state":[ - [67, "s0", "protect-frame"] - ], - - "name=":[ - [24, "a1", "symbol"], - [39, "a0", "symbol"] - ], "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index 1d40c30524..4f2da6246d 100644 --- a/decompiler/config/jak2_ntsc_v1.jsonc +++ b/decompiler/config/jak2_ntsc_v1.jsonc @@ -2,6 +2,9 @@ "game_version": 2, "text_version": 20, + "game_name": "jak2", + "expected_elf_name": "SCUS_972.65", + // if you want to filter to only some object names. // it will make the decompiler much faster. "allowed_objects": [], @@ -13,7 +16,7 @@ // set to true to generate plain .asm files with MIPS disassembly, with no fancy decompilation. // this is fast and should succeed 100% of the time. - "disassemble_code": false, + "disassemble_code": true, // Run the decompiler "decompile_code": false, @@ -32,7 +35,9 @@ // unpack game text to assets folder "process_game_text": true, // unpack game count to assets folder - "process_game_count": false, + "process_game_count": true, + // write goal imports for art groups + "process_art_groups": true, /////////////////////////// // WEIRD OPTIONS @@ -40,9 +45,6 @@ // these options are used rarely and should usually be left at false - // output a file type_defs.gc which is used for the types part of all-types.gc - "regenerate_all_types": false, - // generate the symbol_map.json file. // this is a guess at where each symbol is first defined/used. "generate_symbol_definition_map": false, @@ -75,15 +77,24 @@ "stack_structures_file": "decompiler/config/jak2/stack_structures.jsonc", "hacks_file": "decompiler/config/jak2/hacks.jsonc", "inputs_file": "decompiler/config/jak2/inputs.jsonc", + "art_info_file": "decompiler/config/jak2/art_info.jsonc", + "import_deps_file": "decompiler/config/jak2/import_deps.jsonc", + "all_types_file": "decompiler/config/all-types2.gc", + // optional: a predetermined object file name map from a file. // this will make decompilation naming consistent even if you only run on some objects. - "obj_file_name_map_file": "",//"goal_src/build/all_objs.json", + // "obj_file_name_map_file": "goal_src2/build/all_objs.json", //////////////////////////// // LEVEL EXTRACTION //////////////////////////// - "levels_to_extract":[ - ] + // turn this on to extract level background graphics data + "levels_extract": false, + // turn this on if you want extracted levels to be saved out as .obj files + "levels_convert_to_obj": false, + // should we extract collision meshes? + // these can be displayed in game, but makes the .fr3 files slightly larger + "extract_collision": true } diff --git a/decompiler/data/tpage.cpp b/decompiler/data/tpage.cpp index 0774e43710..acdd932f98 100644 --- a/decompiler/data/tpage.cpp +++ b/decompiler/data/tpage.cpp @@ -338,7 +338,7 @@ TexturePage read_texture_page(ObjectFileData& data, tpage.info_label = get_label(data, words.at(offset)); tpage.info = read_file_info(data, words, label_to_word_offset(tpage.info_label, true)); ASSERT(tpage.info.file_type == "texture-page"); - ASSERT(tpage.info.major_version == versions::TX_PAGE_VERSION); + ASSERT(tpage.info.major_version == versions::jak1::TX_PAGE_VERSION); ASSERT(tpage.info.minor_version == 0); ASSERT(tpage.info.maya_file_name == "Unknown"); ASSERT(tpage.info.mdb_file_name == 0); diff --git a/game/kernel/fileio.cpp b/game/kernel/fileio.cpp index 6070d2255c..2e07723940 100644 --- a/game/kernel/fileio.cpp +++ b/game/kernel/fileio.cpp @@ -278,7 +278,7 @@ char* DecodeFileName(const char* name) { * PC PORT NOTE : Changed some paths so that they work for us (namely, got rid of 'host') */ char* MakeFileName(int type, const char* name, int new_string) { - using namespace versions; + using namespace versions::jak1; // start with network filesystem // kstrcpy(buffer_633, "host:"); kstrcpy(buffer_633, ""); diff --git a/goal_src/engine/debug/memory-usage-h.gc b/goal_src/engine/debug/memory-usage-h.gc index 10f0967aa9..e9c4cc7ec0 100644 --- a/goal_src/engine/debug/memory-usage-h.gc +++ b/goal_src/engine/debug/memory-usage-h.gc @@ -138,7 +138,7 @@ (string 80) (array 81) (sprite 82) - ;; + ;; (debug-dma 84) ;; maybe (sky-dma 85) ;; maybe ;; diff --git a/goal_src/engine/engine/connect.gc b/goal_src/engine/engine/connect.gc index b0d9fc23d4..589f2a97ea 100644 --- a/goal_src/engine/engine/connect.gc +++ b/goal_src/engine/engine/connect.gc @@ -14,7 +14,7 @@ ;; Some example uses: ;; - a "foreground-engine" has connections to all foreground objects that need to be drawn on each frame. ;; - when a process wants to change a game setting, it opens a connection to the settings engine to request a change. -;; when the process is killed, the setting change is reverted. +;; when the process is killed (or it stops requesting the change), the setting change is reverted. ;; A "connection" is really just a function that gets called when the engine runs, or a set of parameters that the engine can iterate through. @@ -53,9 +53,8 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; this is the actual data for the connection. -;; it may be used in multiple ways, but it appears like -;; the first param0 is a function that receives -;; the three other params as arguments, plus the engine it is connect to as a 4th. +;; it may be used in multiple ways, but the most common is to use param0 as a function +;; it receives param1, param2, param3, and the engine as the arugmetns. ;; in some cases, the return value is checked for 'dead. (declare-type engine basic) diff --git a/goal_src/engine/gfx/font-h.gc b/goal_src/engine/gfx/font-h.gc index 65a9d00af5..fe9333159e 100644 --- a/goal_src/engine/gfx/font-h.gc +++ b/goal_src/engine/gfx/font-h.gc @@ -45,7 +45,7 @@ (light-yellow 32) (red-orange 33) (another-orange-red 34) - + (red 3) (red2 4) (yellow 5) diff --git a/goal_src/engine/gfx/hw/display.gc b/goal_src/engine/gfx/hw/display.gc index ade8e01ef3..42a44e8bb2 100644 --- a/goal_src/engine/gfx/hw/display.gc +++ b/goal_src/engine/gfx/hw/display.gc @@ -17,7 +17,7 @@ (defun get-current-time () "Get the in game time. This advances when the game is unpaused. - This increase at the same rate for PAL/NTSC and if the game is lagging." + This increases at the same rate for PAL/NTSC and if the game is lagging." (-> *display* base-frame-counter) ) @@ -32,12 +32,12 @@ (defmethod set-time-ratios display ((obj display) (slowdown float)) "Set the time ratios for the current game speed. For example, set slowdown = 1.0 if the game is running at full speed or slowdown = 2.0 if the game is running at half speed." - + ;; don't allow slowdowns of more than 4x. This prevents the dt's in the physics ;; calculations from getting huge. (let ((ratio (fmin 4.0 slowdown))) (set! (-> obj time-ratio) ratio) - (case (get-video-mode) + (case (get-video-mode) (('pal) (set! (-> obj time-adjust-ratio) (* 1.2 ratio)) (set! (-> obj seconds-per-frame) (* 0.02 ratio)) @@ -76,7 +76,7 @@ fpb: the framebuffer." ;; these will eventually be consumed by a sony function. I think it just sets GS registers. - + ;; set these to the mode that makes the GS actually work. Basically every game uses exactly this. (set! (-> env pmode) (new 'static 'gs-pmode :en1 #x1 :mmod #x1 :slbg #x1 :alp #xff) @@ -243,7 +243,8 @@ (set! (-> disp integral-frame-counter) (seconds 1000)) (set! (-> disp real-integral-frame-counter) (seconds 1000)) - ;; and the "old" version, which I think was their value on the last... frame? + ;; and fake the "old" versions. These are normally set to the value on the previous frame + ;; (which may jump due to saving/loading or lag) (set! (-> disp old-base-frame-counter) (+ (-> disp base-frame-counter) -1)) (set! (-> disp old-game-frame-counter) (+ (-> disp game-frame-counter) -1)) (set! (-> disp old-real-frame-counter) (+ (-> disp real-frame-counter) -1)) @@ -458,7 +459,7 @@ (defun draw-sprite2d-xy ((buf dma-buffer) (x int) (y int) (w int) (h int) (color rgba)) "Draw a sprite primitive with the given color and dimensions." - + ;; create context and clip dimensions. (let* ((context (new 'stack 'draw-context x y w h color)) (draw-x (max 1792 (min 2304 (+ (-> context orgx) 1792)))) @@ -473,14 +474,14 @@ ;; remember the address of the first dma-tag ) (with-cnt-vif-block (buf) - + (dma-buffer-add-gif-tag buf (new 'static 'gif-tag64 :nloop 1 :eop 1 :flg (gif-flag reg-list) :nreg 4) (gs-reg-list prim rgbaq xyzf2 xyzf2) ) (dma-buffer-add-uint64 buf (new 'static 'gs-prim :prim (gs-prim-type sprite) :abe 1) (-> context color 0) (new 'static 'gs-xyzf :x (* draw-x 16) :y (* draw-y 16) :z #x3fffff) - (new 'static 'gs-xyzf :x (* (minmax (+ draw-x draw-w) 1792 2304) 16) + (new 'static 'gs-xyzf :x (* (minmax (+ draw-x draw-w) 1792 2304) 16) :y (* (minmax (+ draw-y draw-h) (-> *video-parms* screen-miny) (-> *video-parms* screen-maxy)) 16) :z #x3fffff) ) ) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index ffbac02515..3b2c4fc832 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -146,7 +146,7 @@ (beach-level-name #x221) (jungle-level-name #x222) (misty-level-name #x223) - + (jungleb-level-name #x225) (beach-seagull-get #x22e) diff --git a/tools/level_tools/level_dump/main.cpp b/tools/level_tools/level_dump/main.cpp index b40ba26d5f..0b06d4ae69 100644 --- a/tools/level_tools/level_dump/main.cpp +++ b/tools/level_tools/level_dump/main.cpp @@ -9,6 +9,8 @@ #include "common/util/Assert.h" +constexpr GameVersion kGameVersion = GameVersion::Jak1; + /*! * Get the level data from a DGO File. * Will ignore all the other things in the level DGO and just return the bsp file. @@ -28,7 +30,8 @@ decompiler::LinkedObjectFile load_bsp_from_dgo(const std::string& file_name, fmt::print("Using level file: {}, size {} kB\n", level_file.internal_name, level_file.data.size() / 1024); - return decompiler::to_linked_object_file(level_file.data, level_file.internal_name, dts, 1); + return decompiler::to_linked_object_file(level_file.data, level_file.internal_name, dts, + kGameVersion); } bool is_valid_bsp(const decompiler::LinkedObjectFile& file) {