From bf961a36f4892ab658744be37cd4ea6b5fa5ec3b Mon Sep 17 00:00:00 2001 From: Hat Kid <6624576+Hat-Kid@users.noreply.github.com> Date: Sat, 7 Oct 2023 22:14:12 +0200 Subject: [PATCH] decompiler: some hacks to allow running decompiler on jak 3 v5 code files, improve `all-types` generation (#2526) Co-authored-by: water --- common/goal_constants.h | 2 + common/symbols.h | 2 + common/type_system/Type.h | 4 + common/type_system/TypeSystem.cpp | 1 + common/util/dgo_util.cpp | 3 +- common/versions/versions.h | 7 +- decompiler/Function/Function.cpp | 17 +- decompiler/ObjectFile/ObjectFileDB.cpp | 4 +- decompiler/ObjectFile/ObjectFileDB_IR2.cpp | 69 +- .../analysis/analyze_inspect_method.cpp | 485 ++- decompiler/analysis/atomic_op_builder.cpp | 1 + decompiler/analysis/cfg_builder.cpp | 1 + decompiler/config.cpp | 2 +- decompiler/config/jak3/all-types.gc | 668 +++- decompiler/config/jak3/jak3_config.jsonc | 32 +- .../jak3/ntsc_v1/art-group-info.min.json | 1 + decompiler/config/jak3/ntsc_v1/art_info.jsonc | 4 +- decompiler/config/jak3/ntsc_v1/hacks.jsonc | 730 ++++- decompiler/config/jak3/ntsc_v1/inputs.jsonc | 548 ++-- .../jak3/ntsc_v1/joint-node-info.min.json | 1 + decompiler/util/DecompilerTypeSystem.cpp | 14 + goal_src/jak3/build/all_objs.json | 2764 +++++++++++++++++ scripts/shell/decomp3.sh | 6 + 23 files changed, 4954 insertions(+), 412 deletions(-) create mode 100644 decompiler/config/jak3/ntsc_v1/art-group-info.min.json create mode 100644 decompiler/config/jak3/ntsc_v1/joint-node-info.min.json create mode 100644 goal_src/jak3/build/all_objs.json create mode 100755 scripts/shell/decomp3.sh diff --git a/common/goal_constants.h b/common/goal_constants.h index 9c7385a2e..7a534a140 100644 --- a/common/goal_constants.h +++ b/common/goal_constants.h @@ -68,6 +68,8 @@ constexpr s32 max_symbols(GameVersion version) { return jak1::GOAL_MAX_SYMBOLS; case GameVersion::Jak2: return jak2::GOAL_MAX_SYMBOLS; + case GameVersion::Jak3: + return jak2::GOAL_MAX_SYMBOLS; } } diff --git a/common/symbols.h b/common/symbols.h index 225ce128e..13f527f11 100644 --- a/common/symbols.h +++ b/common/symbols.h @@ -159,6 +159,7 @@ constexpr int true_symbol_offset(GameVersion version) { case GameVersion::Jak1: return jak1_symbols::FIX_SYM_TRUE; case GameVersion::Jak2: + case GameVersion::Jak3: return jak2_symbols::FIX_SYM_TRUE; } } @@ -168,6 +169,7 @@ constexpr int empty_pair_offset_from_s7(GameVersion version) { case GameVersion::Jak1: return jak1_symbols::FIX_SYM_EMPTY_PAIR; case GameVersion::Jak2: + case GameVersion::Jak3: // minus 1 for the symbol table pointer's offset. return jak2_symbols::S7_OFF_FIX_SYM_EMPTY_PAIR; } diff --git a/common/type_system/Type.h b/common/type_system/Type.h index 5fe4dba0f..07bacd8f2 100644 --- a/common/type_system/Type.h +++ b/common/type_system/Type.h @@ -238,6 +238,9 @@ class Field { int offset() const { return m_offset; } bool skip_in_decomp() const { return m_skip_in_static_decomp; } bool user_placed() const { return m_placed_by_user; } + void set_comment(const std::string& comment) { m_comment = comment; } + const std::string& comment() const { return m_comment; } + bool has_comment() const { return !m_comment.empty(); } bool operator==(const Field& other) const; bool operator!=(const Field& other) const { return !((*this) == other); } std::string diff(const Field& other) const; @@ -274,6 +277,7 @@ class Field { int m_alignment = -1; bool m_skip_in_static_decomp = false; bool m_placed_by_user = false; // was this field placed manually by the user? + std::string m_comment; // optional comment placed next to the field double m_field_score = 0.; diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 13bf4a5a3..942ad9a66 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -1027,6 +1027,7 @@ void TypeSystem::add_builtin_types(GameVersion version) { symbol_type = add_builtin_basic("basic", "symbol"); break; case GameVersion::Jak2: + case GameVersion::Jak3: symbol_type = add_builtin_structure("object", "symbol", true); symbol_type->override_offset(1); break; diff --git a/common/util/dgo_util.cpp b/common/util/dgo_util.cpp index acffcda44..4b69a5160 100644 --- a/common/util/dgo_util.cpp +++ b/common/util/dgo_util.cpp @@ -24,7 +24,8 @@ 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_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)}; + fmt::format("/src/jak2/final/art-group{}/", versions::jak2::ART_FILE_VERSION), + fmt::format("/src/jak3/final/art-group{}/", versions::jak3::ART_FILE_VERSION)}; const std::string suffix = "-ag.go"; for (auto& art_group_text : art_group_text_strings) { diff --git a/common/versions/versions.h b/common/versions/versions.h index 40c34e402..112ba3db0 100644 --- a/common/versions/versions.h +++ b/common/versions/versions.h @@ -29,9 +29,12 @@ constexpr u32 ART_FILE_VERSION = 7; constexpr u32 LEVEL_FILE_VERSION = 36; constexpr u32 DGO_FILE_VERSION = 1; constexpr u32 TX_PAGE_VERSION = 8; - } // namespace jak2 +namespace jak3 { +constexpr u32 ART_FILE_VERSION = 8; +} + } // namespace versions // GOAL kernel version (OpenGOAL changes this version from the game's version) @@ -42,7 +45,7 @@ constexpr int KERNEL_VERSION_MINOR = 0; constexpr int IRX_VERSION_MAJOR = 2; constexpr int IRX_VERSION_MINOR = 0; -enum class GameVersion { Jak1 = 1, Jak2 = 2 }; +enum class GameVersion { Jak1 = 1, Jak2 = 2, Jak3 = 3 }; template struct PerGameVersion { diff --git a/decompiler/Function/Function.cpp b/decompiler/Function/Function.cpp index 1b7d297f7..c0058c856 100644 --- a/decompiler/Function/Function.cpp +++ b/decompiler/Function/Function.cpp @@ -584,6 +584,13 @@ void Function::find_type_defs(LinkedObjectFile& file, DecompilerTypeSystem& dts) int label_idx = -1; for (const auto& instr : instructions) { + // far labels + if (label_idx != -1 && state == 5 && + !(instr.kind == InstructionKind::JALR && instr.get_dst(0).get_reg() == make_gpr(Reg::RA) && + instr.get_src(0).get_reg() == make_gpr(Reg::T9))) { + continue; + } + // look for lw xx, type(s7) if (instr.kind == InstructionKind::LW && instr.get_src(0).is_sym() && instr.get_src(0).get_sym() == "type" && instr.get_src(1).get_reg() == make_gpr(Reg::S7)) { @@ -630,8 +637,14 @@ void Function::find_type_defs(LinkedObjectFile& file, DecompilerTypeSystem& dts) if (state == 4) { // look for ld a2, LXX(fp) - if (instr.kind == InstructionKind::LD && instr.get_dst(0).get_reg() == make_gpr(Reg::A2) && - instr.get_src(0).is_label() && instr.get_src(1).get_reg() == make_gpr(Reg::FP)) { + if ((instr.kind == InstructionKind::LD && instr.get_dst(0).get_reg() == make_gpr(Reg::A2) && + instr.get_src(0).is_label() && instr.get_src(1).get_reg() == make_gpr(Reg::FP))) { + state = 5; + label_idx = instr.get_src(0).get_label(); + continue; + } else if ((instr.kind == InstructionKind::LUI && + instr.get_dst(0).get_reg() == make_gpr(Reg::V1) && instr.get_src(0).is_label())) { + // far labels state = 5; label_idx = instr.get_src(0).get_label(); continue; diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index 68e2136c6..8710fcf39 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -624,7 +624,9 @@ void ObjectFileDB::write_disassembly(const fs::path& output_dir, std::string asm_functions; for_each_obj([&](ObjectFileData& obj) { - if ((obj.obj_version == 3 && disassemble_code) || (obj.obj_version != 3 && disassemble_data)) { + if (((obj.obj_version == 3 || (obj.obj_version == 5 && obj.linked_data.has_any_functions())) && + disassemble_code) || + (obj.obj_version != 3 && disassemble_data)) { auto file_text = obj.linked_data.print_disassembly(print_hex); asm_functions += obj.linked_data.print_asm_function_disassembly(obj.to_unique_name()); auto file_name = output_dir / (obj.to_unique_name() + ".asm"); diff --git a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp index f4334d482..e0cdc72f4 100644 --- a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp +++ b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp @@ -321,7 +321,7 @@ void ObjectFileDB::ir2_analyze_all_types(const fs::path& output_file, const std::unordered_set& bad_types) { std::vector per_object; - DecompilerTypeSystem previous_game_ts(GameVersion::Jak1); // version here doesn't matter. + DecompilerTypeSystem previous_game_ts(GameVersion::Jak2); // version here doesn't matter. if (previous_game_types) { previous_game_ts.parse_type_defs({*previous_game_types}); } @@ -329,44 +329,43 @@ void ObjectFileDB::ir2_analyze_all_types(const fs::path& output_file, TypeInspectorCache ti_cache; for_each_obj([&](ObjectFileData& data) { - if (data.obj_version != 3) { - return; - } + if (data.obj_version == 3 || (data.obj_version == 5 && data.linked_data.has_any_functions())) { + auto& object_result = per_object.emplace_back(); + object_result.object_name = data.to_unique_name(); - auto& object_result = per_object.emplace_back(); - object_result.object_name = data.to_unique_name(); + // Go through the top-level segment first to identify the type names associated with each + // symbol def + for_each_function_in_seg_in_obj(TOP_LEVEL_SEGMENT, data, [&](Function& f) { + inspect_top_level_for_metadata(f, data.linked_data, dts, previous_game_ts, object_result); + }); - // Go through the top-level segment first to identify the type names associated with each symbol - // def - for_each_function_in_seg_in_obj(TOP_LEVEL_SEGMENT, data, [&](Function& f) { - inspect_top_level_for_metadata(f, data.linked_data, dts, previous_game_ts, object_result); - }); - - // Handle the top level last, which is fine as all symbol_defs are always written after typedefs - for_each_function_def_order_in_obj(data, [&](Function& f, int seg) { - if (seg != TOP_LEVEL_SEGMENT) { - if (f.is_inspect_method && bad_types.find(f.guessed_name.type_name) == bad_types.end()) { - auto deftype_from_inspect = - inspect_inspect_method(f, f.guessed_name.type_name, dts, data.linked_data, - previous_game_ts, ti_cache, object_result); - bool already_seen = object_result.type_info.count(f.guessed_name.type_name) > 0; - if (!already_seen) { - object_result.type_names_in_order.push_back(f.guessed_name.type_name); + // Handle the top level last, which is fine as all symbol_defs are always written after + // typedefs + for_each_function_def_order_in_obj(data, [&](Function& f, int seg) { + if (seg != TOP_LEVEL_SEGMENT) { + if (f.is_inspect_method && bad_types.find(f.guessed_name.type_name) == bad_types.end()) { + auto deftype_from_inspect = + inspect_inspect_method(f, f.guessed_name.type_name, dts, data.linked_data, + previous_game_ts, ti_cache, object_result); + bool already_seen = object_result.type_info.count(f.guessed_name.type_name) > 0; + if (!already_seen) { + object_result.type_names_in_order.push_back(f.guessed_name.type_name); + } + auto& info = object_result.type_info[f.guessed_name.type_name]; + info.from_inspect_method = true; + info.type_definition = deftype_from_inspect; + } else { + // no inspect methods + // - can we solve custom print methods in a generic way? ie `entity-links` } - auto& info = object_result.type_info[f.guessed_name.type_name]; - info.from_inspect_method = true; - info.type_definition = deftype_from_inspect; - } else { - // no inspect methods - // - can we solve custom print methods in a generic way? ie `entity-links` } - } - }); + }); - for_each_function_in_seg_in_obj(TOP_LEVEL_SEGMENT, data, [&](Function& f) { - object_result.symbol_defs += inspect_top_level_symbol_defines( - f, data.linked_data, dts, previous_game_ts, object_result); - }); + for_each_function_in_seg_in_obj(TOP_LEVEL_SEGMENT, data, [&](Function& f) { + object_result.symbol_defs += inspect_top_level_symbol_defines( + f, data.linked_data, dts, previous_game_ts, object_result); + }); + } }); std::string result; @@ -1180,7 +1179,7 @@ bool ObjectFileDB::lookup_function_type(const FunctionName& name, std::string ObjectFileDB::ir2_final_out(ObjectFileData& data, const std::vector& imports, const std::unordered_set& skip_functions) { - if (data.obj_version == 3) { + if (data.obj_version == 3 || (data.obj_version == 5 && data.linked_data.has_any_functions())) { std::string result; result += ";;-*-Lisp-*-\n"; result += "(in-package goal)\n\n"; diff --git a/decompiler/analysis/analyze_inspect_method.cpp b/decompiler/analysis/analyze_inspect_method.cpp index c6fa7d4c7..d877ba5f8 100644 --- a/decompiler/analysis/analyze_inspect_method.cpp +++ b/decompiler/analysis/analyze_inspect_method.cpp @@ -5,6 +5,11 @@ namespace decompiler { +// types with duplicate inspects +static const std::vector g_duplicate_inspects_jak3 = { + "sky-vertex", "shadow-edge", "hfrag-poly4", "hfrag-poly9", + "hfrag-poly25", "hfrag-mip-packet", "sprite-aux-list", "game-save"}; + bool is_set_reg_to_int(AtomicOp* op, Register dst, s64 value) { // should be a set reg to int math 2 ir auto set = dynamic_cast(op); @@ -186,33 +191,63 @@ std::optional get_set_reg_to_u64_load(AtomicOp* op, const LinkedObjectFile& file) { auto lvo = dynamic_cast(op); if (!lvo) { - return false; + return std::nullopt; } // destination should be a register auto dest = lvo->get_set_destination(); if (dst != dest.reg()) { - return false; + return std::nullopt; } if (lvo->src().kind() != SimpleExpression::Kind::IDENTITY) { - return false; + return std::nullopt; } if (lvo->size() != 8) { - return false; + return std::nullopt; } const auto& s = lvo->src().get_arg(0); if (!s.is_label()) { - return false; + return std::nullopt; } auto lab = file.labels.at(s.label()); auto& low = file.words_by_seg.at(lab.target_segment).at(lab.offset / 4); auto& hi = file.words_by_seg.at(lab.target_segment).at((lab.offset / 4) + 1); if (low.kind() != LinkedWord::PLAIN_DATA || hi.kind() != LinkedWord::PLAIN_DATA) { - return false; + return std::nullopt; + } + return ((u64)low.data) | (((u64)hi.data) << 32); +} + +std::optional get_set_reg_to_lui(AtomicOp* op, Register dst, const LinkedObjectFile& file) { + auto lvo = dynamic_cast(op); + if (!lvo) { + return std::nullopt; + } + + // destination should be a register + auto dest = lvo->get_set_destination(); + if (dst != dest.reg()) { + return std::nullopt; + } + + if (lvo->src().kind() != SimpleExpression::Kind::IDENTITY) { + return std::nullopt; + } + + const auto& s = lvo->src().get_arg(0); + if (!s.is_label()) { + return std::nullopt; + } + auto lab = file.labels.at(s.label()); + + auto& low = file.words_by_seg.at(lab.target_segment).at(lab.offset / 4); + auto& hi = file.words_by_seg.at(lab.target_segment).at((lab.offset / 4) + 1); + if (low.kind() != LinkedWord::PLAIN_DATA || hi.kind() != LinkedWord::PLAIN_DATA) { + return std::nullopt; } return ((u64)low.data) | (((u64)hi.data) << 32); } @@ -246,13 +281,23 @@ std::optional get_string_loaded_to_reg(AtomicOp* op, } struct FieldPrint { + static constexpr int NO_ARR = -1; + static constexpr int DYNAMIC_ARRAY = -2; + static constexpr int UNKNOWN_ARR_SIZE = -3; + char format = '\0'; std::string field_name; std::string field_type_name; bool has_array = false; - int array_size = -1; + int array_size = NO_ARR; }; +// if a field has a weird inspect, just return the FieldPrint instead of asserting, +// there's too many edge cases in custom prints to account for all of them +FieldPrint handle_custom_prints(FieldPrint& fp, const std::string& str) { + return fp; +} + FieldPrint get_field_print(const std::string& str) { int idx = 0; auto next = [&]() { return str.at(idx++); }; @@ -272,7 +317,10 @@ FieldPrint get_field_print(const std::string& str) { // next the name: char name_char = next(); - while (name_char != ':' && name_char != '[') { + if (name_char == '~') { + return handle_custom_prints(field_print, str); + } + while (name_char != ':' && name_char != '[' && name_char != ' ') { field_print.field_name.push_back(name_char); name_char = next(); } @@ -281,6 +329,18 @@ FieldPrint get_field_print(const std::string& str) { if (name_char == '[') { int size = 0; char num_char = next(); + + // dynamic array using a ~D print + // (format "~Tstack[~D] @ #x~X~%" (-> obj allocated-length) (-> obj stack)) + if (num_char == '~') { + num_char = next(); + ASSERT(num_char == 'D'); + num_char = next(); + ASSERT(num_char == ']'); + // distinguish from dynamic arrays that are set to size 0 + field_print.array_size = size = FieldPrint::DYNAMIC_ARRAY; + } + while (num_char >= '0' && num_char <= '9') { size = size * 10 + (num_char - '0'); num_char = next(); @@ -290,30 +350,68 @@ FieldPrint get_field_print(const std::string& str) { ASSERT(num_char == ']'); char c = next(); - ASSERT(c == ' '); + // (method 3 array) and some others have a colon instead of a space here + if (c == ':') { + c = next(); + } + if (c != ' ') { + return handle_custom_prints(field_print, str); + } c = next(); - ASSERT(c == '@'); + if (c != '@') { + return handle_custom_prints(field_print, str); + } c = next(); - ASSERT(c == ' '); + if (c != ' ') { + return handle_custom_prints(field_print, str); + } c = next(); - ASSERT(c == '#'); + if (c != '#') { + return handle_custom_prints(field_print, str); + } c = next(); - ASSERT(c == 'x'); + if (c != 'x') { + return handle_custom_prints(field_print, str); + } } else { // next a space char space_char = next(); - ASSERT(space_char == ' '); + if (space_char != ' ') { + return handle_custom_prints(field_print, str); + } } // next the format char fmt1 = next(); + // if there are extra spaces + if (fmt1 == ' ') { + while (fmt1 == ' ') { + fmt1 = next(); + } + } if (fmt1 == '~' && peek(0) != '`') { // normal ~_~% char fmt_code = next(); field_print.format = fmt_code; char end1 = next(); - ASSERT(end1 == '~'); + if (end1 != '~') { + return handle_custom_prints(field_print, str); + } char end2 = next(); - ASSERT(end2 == '%'); + if (end2 != '%') { + return handle_custom_prints(field_print, str); + } + ASSERT(idx == (int)str.size()); + } else if (fmt1 == '~' && (peek(0) == 'g' || peek(0) == 'G')) { // ~g~% + char fmt_code = next(); + field_print.format = fmt_code; + char end1 = next(); + if (end1 != '~') { + return handle_custom_prints(field_print, str); + } + char end2 = next(); + if (end2 != '%') { + return handle_custom_prints(field_print, str); + } ASSERT(idx == (int)str.size()); } else if (fmt1 == '#' && peek(0) == '<') { // struct #~% next(); @@ -331,6 +429,30 @@ FieldPrint get_field_print(const std::string& str) { field_print.format = 'X'; ASSERT(idx == (int)str.size()); + } else if (fmt1 == '#' && peek(4) == ':') { // #x~X : (enum-name + // OR + // #x~X : ~S~% + if (peek(6) != '(' && peek(7) == 'S') { + next(); + std::string expect_end = "~X : ~S~%"; + for (char i : expect_end) { + char c = next(); + ASSERT(i == c); + } + field_print.format = 'X'; + } else { + // skip to paren + for (int i = 0; i < 7; i++) { + next(); + } + auto name = str.substr(idx); + // some of these don't have the enum name + if (!name.empty()) { + name.pop_back(); + field_print.field_type_name = name; + } + field_print.format = 'X'; + } } else if (fmt1 == '#' && peek(0) == 'x') { // #x~X~% next(); std::string expect_end = "~X~%"; @@ -364,17 +486,31 @@ FieldPrint get_field_print(const std::string& str) { } else { - throw std::runtime_error("other format nyi in get_field_print " + str.substr(idx)); + // throw std::runtime_error("other format nyi in get_field_print " + str.substr(idx)); + lg::print("other format nyi in get_field_print {}\n", str.substr(idx)); } return field_print; } -int get_start_idx_process(Function& function, const std::string& parent_type, Env& env) { +int get_start_idx_process(Function& function, + const std::string& parent_type, + Env& env, + TypeInspectorResult* result) { + // hack + if (function.name() == "(method 3 process-tree)" || function.name() == "(method 3 process)") { + result->is_basic = true; + return 7; + } + + if (parent_type == "process-focusable") { + result->is_basic = true; + } + if (function.basic_blocks.size() != 5) { lg::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), function.basic_blocks.size()); - return -1; + return 1; } if (!function.ir2.atomic_ops) { @@ -475,12 +611,27 @@ L2: } op_idx++; - if (!is_set_reg_to_symbol_value(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), - parent_type)) { - lg::print("[iim] op5 bad in {}: {} (bad set parent type)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); - return -1; + // try to determine parent type for far labels + if (parent_type == "UNKNOWN") { + auto parent_op_str = aos.ops.at(op_idx)->to_string(env); + auto parent_type_str = parent_op_str.substr(9); + parent_type_str.pop_back(); + result->parent_type_name = parent_type_str; + } else { + if (!is_set_reg_to_symbol_value(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), + parent_type)) { + lg::print("[iim] op5 bad in {}: {} (bad set parent type)\n", + aos.ops.at(op_idx)->to_string(env), function.name()); + return -1; + } } + + // TODO check if this catches all cases or if there are false positives + // hack to get correct field offsets for children of process + if (result->parent_type_name != "structure") { + result->is_basic = true; + } + op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(set! t9 (l.wu (+ v1 28)))") { @@ -536,12 +687,15 @@ L3: int get_start_idx(Function& function, LinkedObjectFile& file, TypeInspectorResult* result, - const std::string& /*parent_type*/, + const std::string& parent_type, const std::string& type_name, Env& env) { if (function.basic_blocks.size() != 5) { lg::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), function.basic_blocks.size()); + if (parent_type == "basic") { + result->is_basic = true; + } return -1; } @@ -673,7 +827,9 @@ int get_start_idx(Function& function, if (is_set_reg_to_symbol_ptr(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::A3), type_name)) { result->is_basic = false; - } else if (aos.ops.at(op_idx)->to_string(env) == "(set! a3 (l.wu (+ gp -4)))") { + } else if (aos.ops.at(op_idx)->to_string(env) == "(set! a3 (l.wu (+ gp -4)))" || + aos.ops.at(op_idx)->to_string(env) == "(set! a3-0 (l.wu (+ a0-0 -4)))" || + aos.ops.at(op_idx)->to_string(env) == "(set! a3-0 (l.wu (+ obj -4)))") { result->is_basic = true; } else { lg::print("[iim] op 9 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); @@ -877,9 +1033,24 @@ int identify_array_field(int idx, Function& function, TypeInspectorResult* result, FieldPrint& print_info) { - auto& get_op = function.ir2.atomic_ops->ops.at(idx++); + AtomicOp* get_op; + // dynamic array with ~D inspect print + if (print_info.array_size == FieldPrint::DYNAMIC_ARRAY) { + idx++; + get_op = function.ir2.atomic_ops->ops.at(idx).get(); + } else { + get_op = function.ir2.atomic_ops->ops.at(idx++).get(); + } int offset = 0; - if (!get_ptr_offset(get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP), &offset)) { + + bool ptr; + if (print_info.array_size == FieldPrint::DYNAMIC_ARRAY) { + ptr = get_ptr_offset(get_op, make_gpr(Reg::A3), make_gpr(Reg::GP), &offset); + } else { + ptr = get_ptr_offset(get_op, make_gpr(Reg::A2), make_gpr(Reg::GP), &offset); + } + + if (!ptr) { printf("bad get ptr offset %s\n", get_op->to_string(function.ir2.env).c_str()); ASSERT(false); } @@ -888,7 +1059,7 @@ int identify_array_field(int idx, } Field field(print_info.field_name, TypeSpec("UNKNOWN"), offset); - if (print_info.array_size) { + if (print_info.array_size > 0) { field.set_array(print_info.array_size); } else { field.set_dynamic(); @@ -904,7 +1075,7 @@ int identify_struct_not_inline_field(int idx, auto load_info = get_load_info_from_set(function.ir2.atomic_ops->ops.at(idx++).get()); if (!(load_info.size == 4 && load_info.kind == LoadVarOp::Kind::UNSIGNED)) { - result->warnings += "field " + print_info.field_type_name + " is likely a value type"; + result->warnings += "field " + print_info.field_type_name + " is likely a value type. "; } int offset = load_info.offset; if (result->is_basic) { @@ -924,7 +1095,7 @@ int identify_struct_inline_field(int idx, int offset = 0; if (!get_ptr_offset(get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP), &offset)) { printf("bad get ptr offset %s\n", get_op->to_string(function.ir2.env).c_str()); - ASSERT(false); + // ASSERT(false); } if (result->is_basic) { offset += BASIC_OFFSET; @@ -946,12 +1117,12 @@ int identify_basic_field(int idx, ASSERT(load_info.kind == LoadVarOp::Kind::UNSIGNED || load_info.kind == LoadVarOp::Kind::SIGNED); TypeSpec field_type("basic"); if (load_info.size == 8) { - result->warnings += "field " + print_info.field_name + " uses ~A with a 64-bit load "; + result->warnings += "field " + print_info.field_name + " uses ~A with a 64-bit load. "; field_type = TypeSpec("uint64"); } else if (load_info.size == 4) { // I wonder if this actually "object", or some other type? It seems to be if (load_info.kind == LoadVarOp::Kind::SIGNED) { - result->warnings += "field " + print_info.field_name + " uses ~A with a signed load "; + result->warnings += "field " + print_info.field_name + " uses ~A with a signed load. "; } } else { ASSERT(false); @@ -967,9 +1138,79 @@ int identify_basic_field(int idx, return idx; } +int identify_string_field(int idx, + Function& function, + LinkedObjectFile& file, + TypeInspectorResult* result, + FieldPrint& print_info) { + (void)file; + auto load_info = get_load_info_from_set(function.ir2.atomic_ops->ops.at(idx++).get()); + ASSERT(load_info.kind == LoadVarOp::Kind::UNSIGNED || load_info.kind == LoadVarOp::Kind::SIGNED); + TypeSpec field_type("string"); + if (load_info.size == 8) { + result->warnings += "field " + print_info.field_name + " uses ~S with a 64-bit load. "; + field_type = TypeSpec("uint64"); + } else if (load_info.size == 4) { + // I wonder if this actually "object", or some other type? It seems to be + if (load_info.kind == LoadVarOp::Kind::SIGNED) { + result->warnings += "field " + print_info.field_name + " uses ~S with a signed load. "; + } + } else { + ASSERT(false); + } + + int offset = load_info.offset; + if (result->is_basic) { + offset += BASIC_OFFSET; + } + + Field field(print_info.field_name, field_type, offset); + result->fields_of_type.push_back(field); + return idx; +} + +int identify_cstring_field(int idx, + Function& function, + LinkedObjectFile& file, + TypeInspectorResult* result, + FieldPrint& print_info) { + (void)file; + auto& get_op = function.ir2.atomic_ops->ops.at(idx++); + // assuming unknown array size at first + int size = FieldPrint::UNKNOWN_ARR_SIZE; + int offset = 0; + std::string comment; + + // usually either a daddiu or lq + if (!get_ptr_offset(get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP), &offset)) { + // daddiu failed, try lq + auto load_info = get_load_info_from_set(get_op.get()); + if (load_info.size == 16) { + size = 16; + offset = load_info.offset; + comment = "field uses ~g print with a quadword load!"; + } else { + printf("bad get ptr offset %s\n", get_op->to_string(function.ir2.env).c_str()); + ASSERT(false); + } + } + if (result->is_basic) { + offset += BASIC_OFFSET; + } + + Field field(print_info.field_name, TypeSpec("uint8"), offset); + field.set_array(size); + if (!comment.empty()) { + field.set_comment(comment); + } + result->fields_of_type.push_back(field); + return idx; +} + int detect(int idx, Function& function, LinkedObjectFile& file, TypeInspectorResult* result) { auto& get_format_op = function.ir2.atomic_ops->ops.at(idx++); if (!is_set_reg_to_symbol_value(get_format_op.get(), make_gpr(Reg::T9), "format")) { + return idx; ASSERT_MSG(false, fmt::format("bad get format: {}\n", get_format_op->to_string(function.ir2.env))); } @@ -985,13 +1226,35 @@ int detect(int idx, Function& function, LinkedObjectFile& file, TypeInspectorRes ASSERT_MSG(false, "bad sstr"); } + // hack to ignore format print from enum->string and other unexpected stuff + if (sstr->substr(0, 1) != "~" || sstr == "~T [~D]~2Tactor-group: ~`actor-group`P~%" || + sstr == "~T [~D]~2Tbuffer: ~A~%") { + return idx; + } + auto info = get_field_print(*sstr); auto& first_get_op = function.ir2.atomic_ops->ops.at(idx); - if (is_get_load(first_get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP)) && - (info.format == 'D' || info.format == 'X' || info.format == 'e') && !info.has_array && - info.field_type_name.empty()) { + // v1 load (process pointer): + // lw t9, format(s7) + // daddiu a0, s7, #t + // daddiu a1, fp, L389 + // lwu v1, 12(gp) + // beq s7, v1, L281 + // or a2, s7, r0 + // B1: + // lwu v1, 0(v1) + // lwu a2, 28(v1) + // B2: + // L281: + // jalr ra, t9 + auto load_a2_gp = is_get_load(first_get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP)); + auto load_v1_gp = is_get_load(first_get_op.get(), make_gpr(Reg::V1), make_gpr(Reg::GP)); + + if ((load_a2_gp || load_v1_gp) && + (info.format == 'D' || info.format == 'd' || info.format == 'X' || info.format == 'e') && + !info.has_array && info.field_type_name.empty()) { idx = identify_int_field(idx, function, result, info); // it's a load! } else if (is_get_load(first_get_op.get(), make_fpr(0), make_gpr(Reg::GP)) && @@ -999,11 +1262,17 @@ int detect(int idx, Function& function, LinkedObjectFile& file, TypeInspectorRes info.format == 'X') && !info.has_array && info.field_type_name.empty()) { idx = identify_float_field(idx, function, result, info); - } else if (is_get_load(first_get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP)) && - info.format == 'A' && !info.has_array && info.field_type_name.empty()) { + } else if ((load_a2_gp || load_v1_gp) && info.format == 'A' && !info.has_array && + info.field_type_name.empty()) { idx = identify_basic_field(idx, function, file, result, info); - } else if (is_get_load(first_get_op.get(), make_gpr(Reg::A2), make_gpr(Reg::GP)) && - info.format == 'X' && !info.has_array && info.field_type_name.empty()) { + } else if ((load_a2_gp || load_v1_gp) && info.format == 'S' && !info.has_array && + info.field_type_name.empty()) { + idx = identify_string_field(idx, function, file, result, info); + } else if ((load_a2_gp || load_v1_gp) && (info.format == 'G' || info.format == 'g') && + !info.has_array && info.field_type_name.empty()) { + idx = identify_cstring_field(idx, function, file, result, info); + } else if ((load_a2_gp || load_v1_gp) && info.format == 'X' && !info.has_array && + info.field_type_name.empty()) { idx = identify_pointer_field(idx, function, result, info); } else if (info.has_array && (info.format == 'X' || info.format == 'P') && info.field_type_name.empty()) { @@ -1020,14 +1289,51 @@ int detect(int idx, Function& function, LinkedObjectFile& file, TypeInspectorRes } else { - printf("couldn't do %s, %s\n", sstr->c_str(), + printf("couldn't do %s, %s, adding unknown field\n", sstr->c_str(), first_get_op->to_string(function.ir2.env).c_str()); - return -1; + // if all else fails, create an unknown field so the rest of the inspect can pass. + Field unknown("UNKNOWN", TypeSpec("UNKNOWN"), -1); + unknown.set_comment("field could not be read."); + result->fields_of_type.push_back(unknown); + return idx; } - if (!dynamic_cast(function.ir2.atomic_ops->ops.at(idx++).get())) { + CallOp* call_op; + if (load_v1_gp) { + call_op = dynamic_cast(function.ir2.atomic_ops->ops.at(idx = idx + 3).get()); + } else { + // dynamic array with ~D inspect print + if (info.array_size == FieldPrint::DYNAMIC_ARRAY) { + idx++; + call_op = dynamic_cast(function.ir2.atomic_ops->ops.at(idx++).get()); + } else { + call_op = dynamic_cast(function.ir2.atomic_ops->ops.at(idx++).get()); + } + } + + // inspect strings like "#x~X : ~S~%" load the field twice, once into a2, then into v1, + // then have a bunch of string branches, so we just skip this, since we already have the field. + // + // lw t9, format(s7) ;; [218] (set! t9 format) + // daddiu a0, s7, #t ;; [219] (set! a0 #t) + // daddiu a1, fp, L503 ;; [220] (set! a1 L503) "~1Tclass: #x~X : ~S~%" + // lhu a2, 26(gp) ;; [221] (set! a2 (l.hu (+ gp 26))) + // lhu v1, 26(gp) ;; [222] (set! v1 (l.hu (+ gp 26))) + // addiu a3, r0, 149 ;; [223] (set! a3 149) + // bne v1, a3, L70 ;; [224] (b! (!= v1 a3) L70 (nop!)) + // sll r0, r0, 0 + + if (load_a2_gp) { + auto load_v1_gp_again = is_get_load(function.ir2.atomic_ops->ops.at(idx - 1).get(), + make_gpr(Reg::V1), make_gpr(Reg::GP)); + if (load_v1_gp_again) { + return idx; + } + } + + if (!call_op) { printf("bad call\n"); - ASSERT(false); + // ASSERT(false); return -1; } @@ -1053,6 +1359,13 @@ std::string inspect_inspect_method(Function& inspect_method, result.type_size = flags.size; result.type_method_count = flags.methods; + // ignore duplicate inspects + if (ti_cache.previous_results.find(type_name) != ti_cache.previous_results.end() && + !(std::find(g_duplicate_inspects_jak3.begin(), g_duplicate_inspects_jak3.end(), type_name) != + g_duplicate_inspects_jak3.end())) { + return fmt::format(";; {} is already defined!\n", type_name); + } + // Only set heap-base if it's different from the automatic one // A child (or child of a child) of process ALWAYS has heap-base set. if (flags.heap_base > 0) { @@ -1081,7 +1394,8 @@ std::string inspect_inspect_method(Function& inspect_method, inspect_method.ir2.env); if (idx < 0) { - idx = get_start_idx_process(inspect_method, result.parent_type_name, inspect_method.ir2.env); + idx = get_start_idx_process(inspect_method, result.parent_type_name, inspect_method.ir2.env, + &result); } StructureType* old_game_type = nullptr; if (previous_game_ts.ts.fully_defined_type_exists(type_name)) { @@ -1096,6 +1410,12 @@ std::string inspect_inspect_method(Function& inspect_method, object_file_meta); } while (idx < int(inspect_method.ir2.atomic_ops->ops.size()) - 2 && idx != -1) { + // skip over non-format calls in inspects + auto sstr = inspect_method.ir2.atomic_ops->ops.at(idx)->to_string(inspect_method.ir2.env); + if (sstr.substr(sstr.size() - 7) != "format)") { + idx++; + continue; + } idx = detect(idx, inspect_method, file, &result); } @@ -1158,7 +1478,7 @@ bool allow_guess(const Field& field) { std::string TypeInspectorResult::print_as_deftype( StructureType* old_game_type, std::unordered_map& previous_results, - DecompilerTypeSystem& /*previous_game_ts*/, + DecompilerTypeSystem& previous_game_ts, ObjectFileDB::PerObjectAllTypeInfo& object_file_meta) { std::string result; @@ -1216,7 +1536,12 @@ std::string TypeInspectorResult::print_as_deftype( int mods = 0; // mods are array size, :inline, :dynamic if (field.is_array() && !field.is_dynamic()) { - mods += std::to_string(field.array_size()).size(); + // "??" for unknown array size + if (field.array_size() == FieldPrint::UNKNOWN_ARR_SIZE) { + mods += 2; + } else { + mods += std::to_string(field.array_size()).size(); + } } if (field.is_inline()) { @@ -1248,8 +1573,13 @@ std::string TypeInspectorResult::print_as_deftype( std::string mods; if (field.is_array() && !field.is_dynamic()) { - mods += std::to_string(field.array_size()); - mods += " "; + if (field.array_size() == FieldPrint::UNKNOWN_ARR_SIZE) { + mods += "??"; + mods += " "; + } else { + mods += std::to_string(field.array_size()); + mods += " "; + } } if (field.is_inline()) { @@ -1284,6 +1614,9 @@ std::string TypeInspectorResult::print_as_deftype( } } } + if (field.has_comment()) { + result += fmt::format(" ;; {}", field.comment()); + } if (was_guess[field_idx]) { result += " ;; guessed by decompiler"; @@ -1337,21 +1670,21 @@ std::string TypeInspectorResult::print_as_deftype( // Print out states if we have em // - Could probably assume the process name comes first and associate it with the right type // but that may or may not be risky so, edit the types yourself... - // if (method_states.size() > 0) { - // result.append("(:states\n "); - // for (const auto& [id, name] : method_states) { - // result.append(name); - // // Append old symbol def if we have it - // auto it = previous_game_ts.symbol_types.find(name); - // if (it != previous_game_ts.symbol_types.end()) { - // result.append(fmt::format(" ;; {}", it->second.print())); - // } - // // Add symbol name to `already_seen_symbols` - // object_file_meta.already_seen_symbols.insert(name); - // result.append("\n "); - // } - // result.append(")\n "); - //} + if (method_states.size() > 0) { + result.append("(:states\n "); + for (const auto& [id, name] : method_states) { + result.append(name); + // Append old symbol def if we have it + auto it = previous_game_ts.symbol_types.find(name); + if (it != previous_game_ts.symbol_types.end()) { + result.append(fmt::format(" ;; {}", it->second.print())); + } + // Add symbol name to `already_seen_symbols` + object_file_meta.already_seen_symbols.insert(name); + result.append("\n "); + } + result.append(")\n "); + } result.append(")\n"); result += "|#\n"; @@ -1359,7 +1692,7 @@ std::string TypeInspectorResult::print_as_deftype( return result; } -std::string get_regex_match(std::string form, std::regex regex) { +std::string get_regex_match(const std::string& form, const std::regex& regex) { std::smatch matches; if (std::regex_search(form, matches, regex)) { if (matches.size() == 2) { @@ -1369,7 +1702,7 @@ std::string get_regex_match(std::string form, std::regex regex) { return ""; } -std::string get_state_symbol_name(LinkedObjectFile& file, std::string label_name) { +std::string get_state_symbol_name(LinkedObjectFile& file, const std::string& label_name) { try { auto& label = file.get_label_by_name(label_name); auto& label_words = file.words_by_seg.at(label.target_segment); @@ -1391,7 +1724,7 @@ std::string get_state_symbol_name(LinkedObjectFile& file, std::string label_name } } -std::string get_label_type_name(LinkedObjectFile& file, std::string label_name) { +std::string get_label_type_name(LinkedObjectFile& file, const std::string& label_name) { try { auto& label = file.get_label_by_name(label_name); auto& label_words = file.words_by_seg.at(label.target_segment); @@ -1433,7 +1766,7 @@ void inspect_top_level_for_metadata(Function& top_level, } // Check for non-method states - std::string last_seen_label = ""; + std::string last_seen_label; // TODO - safely increment op number for (int i = 0; i < (int)top_level.ir2.atomic_ops->ops.size(); i++) { const auto& aop = top_level.ir2.atomic_ops->ops.at(i); @@ -1521,13 +1854,25 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_4 = top_level.ir2.atomic_ops->ops.at(i + 4); auto flags = get_set_reg_to_u64_load(aop_4.get(), Register(Reg::GPR, Reg::A2), file); if (!flags) { - continue; + // far label load + // lui v1, L1352 ;; [ 24] (set! v1-10 L1352) + // ori v1, v1, L1352 + // addu v1, fp, v1 + // ld a2, 0(v1) ;; [ 25] (set! a2-0 (l.d v1-10)) + flags = get_set_reg_to_lui(aop_4.get(), Register(Reg::GPR, Reg::V1), file); + if (!flags) { + continue; + } } // jalr ra, t9 ;; [ 25] (call! a0-0 a1-0 a2-0) const auto& aop_5 = top_level.ir2.atomic_ops->ops.at(i + 5); if (!dynamic_cast(aop_5.get())) { - continue; + // far labels + const auto& aop_6 = top_level.ir2.atomic_ops->ops.at(i + 6); + if (!dynamic_cast(aop_6.get())) { + continue; + } } if (objectFile.type_info.count(*type_name) == 0) { diff --git a/decompiler/analysis/atomic_op_builder.cpp b/decompiler/analysis/atomic_op_builder.cpp index 7b872de69..d42417557 100644 --- a/decompiler/analysis/atomic_op_builder.cpp +++ b/decompiler/analysis/atomic_op_builder.cpp @@ -1795,6 +1795,7 @@ std::unique_ptr convert_5(const Instruction& i0, process_offset = 44; break; case GameVersion::Jak2: + case GameVersion::Jak3: process_offset = 48; break; default: diff --git a/decompiler/analysis/cfg_builder.cpp b/decompiler/analysis/cfg_builder.cpp index 829b5c7b3..083a46b7e 100644 --- a/decompiler/analysis/cfg_builder.cpp +++ b/decompiler/analysis/cfg_builder.cpp @@ -1569,6 +1569,7 @@ Form* try_sc_as_type_of(FormPool& pool, Function& f, const ShortCircuit* vtx, Ga case GameVersion::Jak1: return try_sc_as_type_of_jak1(pool, f, vtx); case GameVersion::Jak2: + case GameVersion::Jak3: return try_sc_as_type_of_jak2(pool, f, vtx); default: ASSERT(false); diff --git a/decompiler/config.cpp b/decompiler/config.cpp index f118d6ea9..a69bfbdcb 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -25,7 +25,7 @@ nlohmann::json read_json_file_from_config(const nlohmann::json& json, const std: Config make_config_via_json(nlohmann::json& json) { Config config; int version_int = json.at("game_version").get(); - ASSERT(version_int == 1 || version_int == 2); + ASSERT(version_int == 1 || version_int == 2 || version_int == 3); config.game_version = (GameVersion)version_int; config.text_version = json.at("text_version").get(); config.game_name = json.at("game_name").get(); diff --git a/decompiler/config/jak3/all-types.gc b/decompiler/config/jak3/all-types.gc index 4cd584243..900ff930d 100644 --- a/decompiler/config/jak3/all-types.gc +++ b/decompiler/config/jak3/all-types.gc @@ -26,5 +26,671 @@ (define-extern stack-frame type) (define-extern global kheap) (define-extern kheap type) +(define-extern pointer type) -(define-extern #t symbol) \ No newline at end of file +(define-extern #t symbol) +(define-extern #f symbol) + +;; some types we need. +(declare-type sparticle-launch-group basic) +(declare-type lightning-spec basic) +(declare-type sparticle-launcher basic) +(declare-type state basic) +(declare-type res-lump basic) + +;; kernel types +(defenum link-flag + :bitfield #t + :type int32 + (output-load-msg 0) + (output-load-true-msg 1) + (execute-login 2) + (print-login 3) + (force-debug 4) + (fast-link 5) + ) + +(defenum language-enum + :type int64 + (english) + (french) + (german) + (spanish) + (italian) + (japanese) + (korean) + (uk-english) + ) + +(define-extern *debug-segment* symbol) +(define-extern nothing (function none)) +(define-extern _format (function _varargs_ object)) +(define-extern method-set! (function type int object none)) ;; may actually return function. +(define-extern malloc (function symbol int pointer)) +(define-extern kmemopen (function kheap string none)) +(define-extern kmemclose (function none)) +(define-extern dgo-load (function string kheap link-flag int none)) +(define-extern *listener-function* (function object)) +(define-extern *enable-method-set* int) + +(declare-type cpad-info basic) +(declare-type mouse-info basic) +(define-extern cpad-open (function cpad-info int cpad-info)) +(define-extern cpad-get-data (function cpad-info cpad-info)) +(define-extern scf-get-territory (function int)) ;; not actually a scf function... +(define-extern mouse-get-data (function mouse-info none)) +(define-extern file-stream-open (function file-stream string symbol file-stream)) +(define-extern file-stream-close (function file-stream file-stream)) +(define-extern file-stream-length (function file-stream int)) +(define-extern file-stream-seek (function file-stream int int int)) +(define-extern file-stream-read (function file-stream pointer int int)) +(define-extern file-stream-write (function file-stream pointer uint uint)) +(define-extern reset-path (function none)) +(define-extern flush-cache (function int none)) +(define-extern gs-store-image (function object object object)) +(define-extern sync-path (function int int int)) +(define-extern file-stream-write (function file-stream pointer uint uint)) +(define-extern file-stream-close (function file-stream file-stream)) +(define-extern new-dynamic-structure (function symbol type int structure)) +(define-extern kernel-shutdown (function none)) +(define-extern scf-get-timeout (function int)) +(define-extern scf-get-inactive-timeout (function int)) +(define-extern syncv (function int int)) +(define-extern string->symbol (function string symbol)) +(define-extern link-begin (function pointer (pointer uint8) int kheap link-flag int)) +(define-extern link-resume (function int)) +(define-extern link-reset (function none)) +(define-extern kset-language (function language-enum int)) +(define-extern reset-graph (function int int int int none)) + +(declare-type sql-result basic) +(define-extern sql-query (function string sql-result)) + +(define-extern loading-level kheap) +(define-extern dma-sync (function pointer int int int)) +(define-extern unload (function string none)) + + + +(defenum kmalloc-flags + :bitfield #t + (align-16 4) + (align-64 6) + (align-256 8) + (memset 12) + (top 13) + ) + +(define-extern kmalloc (function kheap int kmalloc-flags string pointer)) + +(define-extern *kernel-boot-message* symbol) +(define-extern *kernel-boot-art-group* string) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gcommon ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype vec4s (uint128) + ((x float :offset 0) + (y float :offset 32) + (z float :offset 64) + (w float :offset 96)) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector (structure) + ((data float 4 :score -1 :offset-assert 0) + (x float :offset 0) + (y float :offset 4) + (z float :offset 8) + (w float :offset 12) + (quad uint128 :offset 0 :score -1) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype bfloat (basic) + ((data float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype inline-array-class (basic) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + ;; this is 16-byte aligned. + ;; children of inline-array-class should define their own data which overlays this one. + (_data uint8 :score -50 :dynamic :offset 16) + ) + (:methods + (new (symbol type int) _type_ 0)) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern identity (function object object)) +(define-extern 1/ (function float float)) +(define-extern + (function int int int)) +(define-extern - (function int int int)) +(define-extern * (function int int int)) +(define-extern / (function int int int)) +(define-extern ash (function int int int)) +(define-extern mod (function int int int)) +(define-extern rem (function int int int)) +(define-extern abs (function int int)) +(define-extern min (function int int int)) +(define-extern max (function int int int)) +(define-extern logior (function int int int)) +(define-extern logand (function int int int)) +(define-extern lognor (function int int int)) +(define-extern logxor (function int int int)) +(define-extern lognot (function int int)) +(define-extern false-func (function symbol)) +(define-extern true-func (function symbol)) +(define-extern format (function _varargs_ object)) +(define-extern basic-type? (function basic type symbol)) +(define-extern type-type? (function type type symbol)) +(define-extern type? (function object type symbol)) +(define-extern find-parent-method (function type int function)) +(define-extern ref (function object int object)) +(define-extern last (function object object)) +(define-extern member (function object object object)) +(define-extern nmember (function basic object object)) +(define-extern assoc (function object object object)) +(define-extern assoce (function object object object)) +(define-extern nassoc (function string object object)) +(define-extern nassoce (function string object object)) +(define-extern append! (function object object object)) +(define-extern delete! (function object object pair)) +(define-extern delete-car! (function object object object)) +(define-extern insert-cons! (function object object pair)) +(define-extern sort (function pair (function object object object) pair)) +(define-extern mem-copy! (function pointer pointer int pointer)) +(define-extern qmem-copy<-! (function pointer pointer int pointer)) +(define-extern qmem-copy->! (function pointer pointer int pointer)) +(define-extern mem-set32! (function pointer int int pointer)) +(define-extern mem-or! (function pointer pointer int pointer)) +(define-extern quad-copy! (function pointer pointer int none)) +(define-extern fact (function int int)) +(define-extern *print-column* binteger) +(define-extern print (function object object)) +(define-extern printl (function object object)) +(define-extern inspect (function object object)) +(define-extern mem-print (function (pointer uint32) int symbol)) +(define-extern *trace-list* pair) +(define-extern print-tree-bitmask (function int int symbol)) +(define-extern breakpoint-range-set! (function uint uint uint int)) +(define-extern valid? (function object type string symbol object symbol)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gstring-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gkernel-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type process-tree basic) +(declare-type process process-tree) +(declare-type thread basic) +(declare-type cpu-thread thread) +(declare-type clock basic) +(declare-type res-lump basic) +(declare-type entity res-lump) +(declare-type entity-actor entity) +(declare-type event-message-block structure) +(declare-type level basic) + +(defenum process-mask + :type uint32 + :bitfield #t + (execute 0) + (freeze 1) + (pause 2) + (menu 3) + (progress 4) + (actor-pause 5) + (sleep 6) + (sleep-code 7) + (process-tree 8) + (heap-shrunk 9) + (going 10) + (kernel-run 11) + (no-kill 12) + (movie 13) + (dark-effect 14) + (target 15) + (sidekick 16) + (crate 17) + (bit18 18) ;; unused? + (enemy 19) + (camera 20) + (platform 21) + (ambient 22) + (entity 23) + (projectile 24) + (bot 25) + (collectable 26) + (death 27) + (no-track 28) + (guard 29) + (vehicle 30) + (civilian 31) + ) +(deftype process-tree (basic) + ((name string :offset-assert 4) + (mask process-mask :offset-assert 8) + (clock clock :offset-assert 12) + (parent (pointer process-tree) :offset-assert 16) + (brother (pointer process-tree) :offset-assert 20) + (child (pointer process-tree) :offset-assert 24) + (ppointer (pointer process) :offset-assert 28) + (self process-tree :offset-assert 32) + ) + (:methods + (new (symbol type string) _type_ 0) + (activate (_type_ process-tree basic pointer) process-tree 9) + (deactivate (_type_) none 10) + (init-from-entity! + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. + This commonly includes things such as: + - stack size + - collision information + - loading the skeleton group / bones + - sounds" + (_type_ entity-actor) none 11) + (run-logic? (_type_) symbol 12) + (process-tree-method-13 () none 13) + ) + :size-assert #x24 + :method-count-assert 14 + :no-runtime-type + ) + +(deftype kernel-context (basic) + ((prevent-from-run process-mask :offset-assert 4) ;; guessed by decompiler + (require-for-run process-mask :offset-assert 8) ;; guessed by decompiler + (allow-to-run process-mask :offset-assert 12) ;; guessed by decompiler + (next-pid int32 :offset-assert 16) + (fast-stack-top pointer :offset-assert 20) ;; guessed by decompiler + (current-process process :offset-assert 24) ;; guessed by decompiler + (relocating-process basic :offset-assert 28) + (relocating-min int32 :offset-assert 32) + (relocating-max int32 :offset-assert 36) + (relocating-offset int32 :offset-assert 40) + (relocating-level level :offset-assert 44) ;; guessing here + (low-memory-message symbol :offset-assert 48) ;; guessed by decompiler + (login-object basic :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ;; field relocating-level uses ~A with a signed load + ) + +(deftype time-frame (int64) + () + :flag-assert #x900000008 + ) + + +(deftype clock (basic) + ((index int32 :offset-assert 4) ;; which clock we are, in *display* + (mask process-mask :offset-assert 8) ;; mask for ticking + (clock-ratio float :offset-assert 12) ;; how fast to run. 1.0 = realtime. + (accum float :offset-assert 16) ;; fractional time for frame-counter (time-frame units) + (integral-accum float :offset-assert 20) ;; fractional time for integral (time-frame untis) + (frame-counter time-frame :offset-assert 24) ;; how much time has gone by since reset (time-frame units) + (old-frame-counter time-frame :offset-assert 32) ;; the frame-counter on the last engine iteration + (integral-frame-counter uint64 :offset-assert 40) ;; how many vsyncs have gone by since reset + (old-integral-frame-counter uint64 :offset-assert 48) ;; the integral-frame-counter on the last engine iteration + (sparticle-data vector :inline :offset-assert 64) ;; sparticle timescale info + (seconds-per-frame float :offset-assert 80) ;; how many seconds (not time-frames) should go by in 1 vsync + (frames-per-second float :offset-assert 84) ;; inverse of above + (time-adjust-ratio float :offset-assert 88) ;; 1, if the game runs at 60fps NTSC with clock-ratio = 1. + ) + :method-count-assert 15 + :size-assert #x5c + :flag-assert #xf0000005c + (:methods + (new (symbol type int) _type_ 0) + (update-rates! (_type_ float) float 9) + (advance-by! (_type_ float) clock 10) + (tick! (_type_) clock 11) + (save! (_type_ (pointer uint64)) int 12) + (load! (_type_ (pointer uint64)) int 13) + (reset! (_type_) none 14) + ) + ) + + +(deftype thread (basic) + ((name symbol :offset-assert 4) + (process process :offset-assert 8) ;; guessed by decompiler + (previous thread :offset-assert 12) ;; guessed by decompiler + (suspend-hook (function cpu-thread none) :offset-assert 16) ;; guessed by decompiler + (resume-hook (function cpu-thread none) :offset-assert 20) ;; guessed by decompiler + (pc pointer :offset-assert 24) ;; guessed by decompiler + (sp pointer :offset-assert 28) ;; guessed by decompiler + (stack-top pointer :offset-assert 32) ;; guessed by decompiler + (stack-size int32 :offset-assert 36) + ) + :method-count-assert 12 + :size-assert #x28 + :flag-assert #xc00000028 + (:methods + (stack-size-set! (_type_ int) none 9) + (thread-suspend (_type_) none 10) + (thread-resume (_type_) none 11) + ) + ) + + +;; modified for x86. +(deftype cpu-thread (thread) + ((rreg uint64 7 :offset-assert 40) + (freg float 8) + + ;; old values: + ;; (rreg uint64 8 :offset-assert 40) ;; guessed by decompiler + ;; (freg float 6 :offset-assert 104) ;; guessed by decompiler + (stack uint8 :dynamic :offset-assert 128) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x80 + :flag-assert #xc00000080 + (:methods + (new (symbol type process symbol int pointer) _type_ 0) + ) + ) + + + +(deftype dead-pool (process-tree) + () + :method-count-assert 16 + :size-assert #x24 + :flag-assert #x1000000024 + ;; Failed to read fields. + (:methods + (new (symbol type int int string) _type_ 0) + (get-process (_type_ type int) process 14) + (return-process (_type_ process) none 15) + ) + ) + + +(deftype dead-pool-heap-rec (structure) + ((process process :offset-assert 0) ;; guessed by decompiler + (prev dead-pool-heap-rec :offset-assert 4) + (next dead-pool-heap-rec :offset-assert 8) + ) + :pack-me + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype dead-pool-heap (dead-pool) + ((allocated-length int32 :offset-assert 36) + (compact-time uint32 :offset-assert 40) + (compact-count-targ uint32 :offset-assert 44) + (compact-count uint32 :offset-assert 48) + (fill-percent float :offset-assert 52) + (first-gap dead-pool-heap-rec :offset-assert 56) + (first-shrink dead-pool-heap-rec :offset-assert 60) + (heap kheap :inline :offset-assert 64) + (alive-list dead-pool-heap-rec :inline :offset-assert 80) + (last dead-pool-heap-rec :offset #x54 :offset-assert 84) + (dead-list dead-pool-heap-rec :inline :offset-assert 92) + (process-list dead-pool-heap-rec :inline :dynamic :offset-assert 104) + ) + :method-count-assert 28 + :size-assert #x68 + :flag-assert #x1c00000068 + ;; Failed to read fields. + (:methods + (new (symbol type string int int) _type_ 0) + (init (_type_ symbol int) none 16) + (compact (dead-pool-heap int) none 17) + (shrink-heap (dead-pool-heap process) dead-pool-heap 18) + (churn (dead-pool-heap int) none 19) + (memory-used (_type_) int 20) + (memory-total (_type_) int 21) + (memory-free (dead-pool-heap) int 22) + (compact-time (dead-pool-heap) uint 23) + (gap-size (dead-pool-heap dead-pool-heap-rec) int 24) + (gap-location (dead-pool-heap dead-pool-heap-rec) pointer 25) + (find-gap (dead-pool-heap dead-pool-heap-rec) dead-pool-heap-rec 26) + (find-gap-by-size (dead-pool-heap int) dead-pool-heap-rec 27) + ) + ) + +(deftype stack-frame (basic) + ((name symbol :offset 4) + (next stack-frame :offset 8) ;; which way does this point? + ) + :size-assert #xc + :method-count-assert 9 + :flag-assert #x90000000c + ) + +;; a "catch" frame is a frame that can be "thrown" to. +;; the "throw" is a nonlocal control flow back to the state before the "catch" block. +(deftype catch-frame (stack-frame) + ((sp int32 :offset-assert 12) + (ra int32 :offset-assert 16) + ; (freg float 6 :offset-assert 20) + ; (rreg uint128 8 :offset-assert 48) + ;; In OpenGOAL, we swap a rreg for 4 more fregs. + (freg float 10 :offset-assert 20) ;; only use 8 + (rreg uint128 7) ;; only use 5 + ) + :method-count-assert 9 + :size-assert #xb0 + :flag-assert #x9000000b0 + (:methods + (new (symbol type symbol function (pointer uint64)) object 0) + ) + ) + +(deftype protect-frame (stack-frame) + ((exit (function none) :offset-assert 12) ;; guessed by decompiler + ) + (:methods + (new (symbol type (function none)) protect-frame) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype handle (uint64) + ((process (pointer process) :offset 0) + (pid int32 :offset 32) + (u64 uint64 :offset 0) + ) + :flag-assert #x900000008 + ) + +(deftype state (protect-frame) + ((code function :offset-assert 16) ;; guessed by decompiler + (trans (function none) :offset-assert 20) ;; guessed by decompiler + (post function :offset-assert 24) ;; guessed by decompiler + (enter function :offset-assert 28) ;; guessed by decompiler + (event (function process int symbol event-message-block object) :offset-assert 32) ;; guessed by decompiler + ) + (:methods + (new (symbol type symbol function + (function none) + function + (function none) + (function process int symbol event-message-block object)) _type_ 0) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) + +(deftype event-message-block (structure) + ((to-handle handle) + (to (pointer process) :offset 0) ;; overlays process field of handle + (form-handle handle :offset-assert 8) + (from (pointer process) :offset 8) + (param uint64 6) + (message symbol) + (num-params int32) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ;; Failed to read fields. + ) + + + +(deftype event-message-block-array (inline-array-class) + ((data event-message-block :inline :dynamic :offset-assert 16) + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (send-all! (_type_) none 9) + ) + ) + + +(deftype process (process-tree) + ((pool dead-pool) + (status symbol :offset-assert 40) + (pid int32) + (main-thread cpu-thread :offset-assert 48) + (top-thread cpu-thread :offset-assert 52) + (entity entity-actor :offset-assert 56) + (level level :offset-assert 60) + (state state :offset-assert 64) + (next-state state :offset-assert 68) + (trans-hook function :offset-assert 72) + (post-hook function :offset-assert 76) + (event-hook (function process int symbol event-message-block object) :offset-assert 80) + (allocated-length int32 :offset-assert 84) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" + (heap-base pointer :offset-assert 96) + (heap-top pointer :offset-assert 100) + (heap-cur pointer :offset-assert 104) + (stack-frame-top stack-frame :offset-assert 108) + (connection-list connectable :inline :offset-assert 112) + (stack uint8 :dynamic :offset-assert 128 :score -1) + ) + (:methods + (new (symbol type string int) _type_ 0) + ) + (:states + dead-state + empty-state) + :size-assert #x80 + :method-count-assert 14 + :no-runtime-type ;; already defined by kscheme. Don't do it again. + ) + +(deftype sql-result (basic) + ((len int32 :offset-assert 4) + (allocated-length uint32 :offset-assert 8) + (error symbol :offset-assert 12) + (data string :dynamic :offset-assert 16) ;; are these actually symbols, or are they strings (in the GOAL code they are treated as strings atleast) + ) + (:methods (new (symbol type uint) _type_ 0)) + :method-count-assert 9 + :size-assert #x10 + ) + +(define-extern *sql-result* sql-result) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gkernel ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *kernel-version* binteger) +(define-extern *irx-version* binteger) +(define-extern *kernel-boot-mode* symbol) +(define-extern *kernel-boot-level* symbol) +(define-extern *deci-count* int) +(define-extern *last-loado-length* int) +(define-extern *last-loado-global-usage* int) +(define-extern *last-loado-debug-usage* int) +(define-extern *kernel-packages* pair) +(define-extern load-package (function string kheap pair)) +(define-extern unload-package (function string pair)) +(define-extern *kernel-context* kernel-context) +(define-extern *dram-stack* (pointer uint8)) +(define-extern *null-kernel-context* kernel-context) +(define-extern remove-exit (function none :behavior process)) +(define-extern stream<-process-mask (function object process-mask process-mask)) +(define-extern *master-mode* symbol) +(define-extern *pause-lock* symbol) +(define-extern inspect-process-heap (function process symbol)) +(define-extern return-from-thread (function none)) +(define-extern return-from-thread-dead (function none)) +(define-extern reset-and-call (function thread function object)) +(define-extern method-state (function type basic state)) +(define-extern *global-search-name* basic) +(define-extern *global-search-count* int) +(define-extern process-by-name (function string process-tree process)) +(define-extern process-not-name (function string process-tree process)) +(define-extern process-count (function process-tree int)) +(define-extern kill-by-name (function string process-tree symbol)) +(define-extern kill-by-type (function type process-tree symbol)) +(define-extern kill-not-name (function string process-tree symbol)) +(define-extern kill-not-type (function type process-tree symbol)) +(define-extern iterate-process-tree (function process-tree (function object object) kernel-context object)) +(define-extern execute-process-tree (function process-tree (function object object) kernel-context object)) +(define-extern search-process-tree (function process-tree (function process-tree object) process-tree)) +(define-extern kernel-dispatcher (function object)) +(define-extern sync-dispatcher (function object)) +(define-extern inspect-process-tree (function process-tree int int symbol process-tree)) +(define-extern throw-dispatch (function catch-frame object none)) +(define-extern throw (function symbol object int)) +(define-extern previous-brother (function process-tree object)) +(define-extern change-parent (function process-tree process-tree process-tree)) +(define-extern change-brother (function process-tree process-tree object)) +(define-extern change-to-last-brother (function process-tree process-tree)) +(define-extern run-function-in-process (function process function object object object object object object object)) +(define-extern set-to-run-bootstrap (function none)) +(define-extern set-to-run (function cpu-thread function object object object object object object pointer)) +(define-extern entity-deactivate-handler (function process entity-actor none)) +(define-extern *listener-process* process) +(define-extern *null-process* process) +(define-extern *vis-boot* symbol) +(define-extern *kernel-clock* clock) +(define-extern *16k-dead-pool* dead-pool) +(define-extern *8k-dead-pool* dead-pool) +(define-extern *4k-dead-pool* dead-pool) +(define-extern *target-dead-pool* dead-pool) +(define-extern *camera-dead-pool* dead-pool) +(define-extern *camera-master-dead-pool* dead-pool) +(define-extern *debug-dead-pool* dead-pool-heap) +(define-extern *nk-dead-pool* dead-pool-heap) +(define-extern *default-dead-pool* dead-pool) +(define-extern *pickup-dead-pool* dead-pool) +(define-extern *city-dead-pool* dead-pool-heap) +(define-extern *dead-pool-list* pair) +(define-extern *active-pool* process-tree) +(define-extern *display-pool* process-tree) ;; process-tree +(define-extern *camera-pool* process-tree) ;; process-tree +(define-extern *target-pool* process-tree) ;; process-tree +(define-extern *entity-pool* process-tree) ;; process-tree +(define-extern *mid-pool* process-tree) +(define-extern *pusher-pool* process-tree) +(define-extern *bg-pool* process-tree) +(define-extern *default-pool* process-tree) ;; process-tree \ No newline at end of file diff --git a/decompiler/config/jak3/jak3_config.jsonc b/decompiler/config/jak3/jak3_config.jsonc index 5c8a32f6f..b0824e27a 100644 --- a/decompiler/config/jak3/jak3_config.jsonc +++ b/decompiler/config/jak3/jak3_config.jsonc @@ -8,7 +8,7 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. "allowed_objects": [], - "banned_objects": [], + "banned_objects": ["script", "ragdoll-edit", "gun-states", "manipulator", "hfrag", "hfrag-vu1", "ff-squad-control"], //////////////////////////// // CODE ANALYSIS OPTIONS @@ -19,9 +19,9 @@ "disassemble_code": true, // Run the decompiler - "decompile_code": false, + "decompile_code": true, - "find_functions": false, + "find_functions": true, //////////////////////////// // DATA ANALYSIS OPTIONS @@ -39,9 +39,11 @@ // unpack game count to assets folder "process_game_count": false, // write goal imports for art groups - "process_art_groups": false, + "process_art_groups": true, // write out a json file containing the art info mapping, run this with all objects allowed - "dump_art_group_info": false, + "dump_art_group_info": true, + // write out a json file containing the joint node mapping, run this with all objects allowed + "dump_joint_geo_info": false, /////////////////////////// // WEIRD OPTIONS @@ -79,16 +81,18 @@ // CONFIG FILES //////////////////////////// - "type_casts_file": "decompiler/config/jak3/type_casts.jsonc", - "anonymous_function_types_file": "decompiler/config/jak3/anonymous_function_types.jsonc", - "var_names_file": "decompiler/config/jak3/var_names.jsonc", - "label_types_file": "decompiler/config/jak3/label_types.jsonc", - "stack_structures_file": "decompiler/config/jak3/stack_structures.jsonc", - "hacks_file": "decompiler/config/jak3/hacks.jsonc", - "inputs_file": "decompiler/config/jak3/inputs.jsonc", - "art_info_file": "decompiler/config/jak3/art_info.jsonc", - "import_deps_file": "decompiler/config/jak3/import_deps.jsonc", + "type_casts_file": "decompiler/config/jak3/ntsc_v1/type_casts.jsonc", + "anonymous_function_types_file": "decompiler/config/jak3/ntsc_v1/anonymous_function_types.jsonc", + "var_names_file": "decompiler/config/jak3/ntsc_v1/var_names.jsonc", + "label_types_file": "decompiler/config/jak3/ntsc_v1/label_types.jsonc", + "stack_structures_file": "decompiler/config/jak3/ntsc_v1/stack_structures.jsonc", + "hacks_file": "decompiler/config/jak3/ntsc_v1/hacks.jsonc", + "inputs_file": "decompiler/config/jak3/ntsc_v1/inputs.jsonc", + "art_info_file": "decompiler/config/jak3/ntsc_v1/art_info.jsonc", + "import_deps_file": "decompiler/config/jak3/ntsc_v1/import_deps.jsonc", "all_types_file": "decompiler/config/jak3/all-types.gc", + "art_group_dump_file": "decompiler/config/jak3/ntsc_v1/art-group-info.min.json", + "joint_node_dump_file": "decompiler/config/jak3/ntsc_v1/joint-node-info.min.json", // 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/jak3/ntsc_v1/art-group-info.min.json b/decompiler/config/jak3/ntsc_v1/art-group-info.min.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/decompiler/config/jak3/ntsc_v1/art-group-info.min.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/decompiler/config/jak3/ntsc_v1/art_info.jsonc b/decompiler/config/jak3/ntsc_v1/art_info.jsonc index 7a115d726..6b7821807 100644 --- a/decompiler/config/jak3/ntsc_v1/art_info.jsonc +++ b/decompiler/config/jak3/ntsc_v1/art_info.jsonc @@ -1,4 +1,6 @@ { "files": {}, - "functions": {} + "functions": {}, + "type_remap": {}, + "joint_node_hacks": {} } diff --git a/decompiler/config/jak3/ntsc_v1/hacks.jsonc b/decompiler/config/jak3/ntsc_v1/hacks.jsonc index 0f226e756..6d82fd55e 100644 --- a/decompiler/config/jak3/ntsc_v1/hacks.jsonc +++ b/decompiler/config/jak3/ntsc_v1/hacks.jsonc @@ -3,51 +3,761 @@ // HACKS and ASM FUNCTIONS //////////////////////////// - "types_with_bad_inspect_methods": [], + "types_with_bad_inspect_methods": [ + "game-task-event", + "game-task-control", + "predator-edge", + "manipy" + ], "no_type_analysis_functions_by_name": [], // this limits the number of cases in a cond. The first argument is the name of the function. // 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": [], + "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": [], + "aggressively_reject_cond_to_value_rewrite": [ + "(method 10 res-lump)", + "(method 11 res-lump)", + "(method 12 res-lump)" + ], // 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": [], - "asm_functions_by_name": [], + "asm_functions_by_name": [ + // checking boxed type is different now - these make the cfg stuff sad + "name=", + "(method 77 grenadier)", + // until loop without nop: + "target-history-print", + "display-list-control", + "anim-test-anim-list-handler", + "anim-test-sequence-list-handler", + "anim-tester-get-playing-item", + "start-pilot-recorder", + "(anon-function 10 pilot-recorder)", + "(anon-function 10 sig-recorder)", + // actual asm + "quad-copy!", + "return-from-thread", + "return-from-thread-dead", + "reset-and-call", + "(method 10 cpu-thread)", + "(method 11 cpu-thread)", + "(method 0 catch-frame)", + "throw-dispatch", + "throw", + "run-function-in-process", + "set-to-run-bootstrap", + "return-from-exception", + "exp", + "(method 17 bounding-box)", + "(method 9 bounding-box)", + "(method 9 matrix)", + "quaternion->matrix-2", + "sin-rad", + "cos-rad", + "atan-series-rad", + "sign-float", + "dma-count-until-done", + "(method 11 collide-mesh-cache)", + "cpu-delay", + "qword-read-time", + "dma-test-func", + "move-test-func", + + "symlink2", + "blerc-a-fragment", + "blerc-execute", + "foreground-check-longest-edge-asm", + "generic-light-proc", + "shadow-add-single-edges", + "shadow-add-facing-single-tris", + "shadow-add-double-tris", + "shadow-add-double-edges", + "(method 17 collide-edge-work)", + "(method 10 collide-cache-prim)", + "(method 17 collide-cache)", + "(method 16 ocean)", + + // unknown instructions + "debug-line-clip?", + // logand with #f arg + "bugfix?", + // CFG failed + "draw-inline-array-instance-shrub", + + "(method 9 editable-region)", // condition branch assert hit + "test-to-from-spr", + "test-from-spr", + "test-to-spr", + "test-seq-read", + "test-worst-read", + "test-seq-write", + "test-worst-write", + // texture + "adgif-shader<-texture!", + + // jak 3 + "borrow-city-expansion", + "(method 26 level-group)", + "(anon-function 65 temple-obs)", + "(method 33 task-manager-nest-cocoons)", + "(method 33 rub-tower)", + "(method 261 crimson-guard)", + "(anon-function 25 volcanox-obs)" + ], // these functions use pairs and the decompiler // will be less picky about types related to pairs. - "pair_functions_by_name": [], + "pair_functions_by_name": [ + "ref", + "(method 4 pair)", + "last", + "member", + "nmember", + "assoc", + "assoce", + "nassoc", + "nassoce", + "append!", + "delete!", + "delete-car!", + "insert-cons!", + "sort", + "unload-package", + "display-loop-main", + "lookup-level-info", + "(method 24 level-group)", + "(method 19 level-group)", + // script + "command-get-time", + "command-get-param", + "command-get-quoted-param", + "command-get-entity", + "(method 9 script-context)", + "(anon-function 6 script)", + "(anon-function 49 script)", + "(anon-function 52 script)", + "(anon-function 72 script)", + "(anon-function 73 script)", + "(anon-function 74 script)", + "(anon-function 75 script)", + "(anon-function 76 script)", + "(anon-function 80 script)", + "(method 11 script-context)", + "(method 10 script-context)", + "command-get-trans", + "key-assoc", + "(anon-function 0 script)", + // default-menu + "dm-scene-load-pick-func", + "debug-menu-make-continue-sub-menu", + "debug-menu-make-from-template", + "debug-menu-context-make-default-menus", + "debug-menu-make-task-menu", + "(method 19 gui-control)", + // menu + "debug-menu-rebuild", + "debug-menu-find-from-template", + "debug-menu-render", + "debug-menu-context-select-next-or-prev-item", + "debug-menu-context-select-new-item", + "debug-menu-send-msg", + // airlock + "(method 24 com-airlock)", + "(method 19 gui-control)", + "(method 28 editable)", + "execute-select", + "(method 29 editable)", + "(method 25 editable)", + // game-info + "(method 20 game-info)", + "print-continues", + // task-control + "(anon-function 55 task-control)", + "(method 17 load-state)", + "(method 12 level)", + "bg", + "update-sound-banks", + "entity-remap-names", + "(method 8 process-tree)", + "(post play-anim scene-player)", + "(method 25 scene-player)", + "(method 25 scene-player)", + "scene-player-init", + "next-continue", + "(method 25 warp-gate)", + "(code use warp-gate)", + "cspace-inspect-tree", + "(method 11 mtn-step-plat-rocks-a)", + "(method 11 mtn-step-plat-rocks-b)", + "(method 11 mtn-step-plat-rocks-c)", + "(method 22 fort-floor-spike-b)", + "prototypes-game-visible-set!", + "(method 22 fort-floor-spike-a)", + "(method 22 fort-floor-spike-b)", + "(method 22 fort-floor-spike-c)", + "(method 11 sew-catwalk)", + "(method 11 mtn-aval-rocks)", + "(method 11 gar-curtain)" + ], // If format is used with the wrong number of arguments, // it will often mess up the decompilation, as the decompiler assumes // that they used the correct number. This will override the decompiler's // automatic detection. - "bad_format_strings": {}, + "bad_format_strings": { + "~170h~5d~220h~5d~280h~5,,2f": 3, + "~338h~5d~388h~5d~448h~5,,2f": 3, + "~30Htf: ~8D~134Hpr: ~8D~252Hsh: ~8D~370Hhd: ~8D~%": 4, + "~30Hal: ~8D~131Hwa: ~8D~252Hsp: ~8D~370Hwp: ~8D~%": 4, + "ERROR: ~A in spool anim loop for ~A ~D, but not loaded.~": 3, + // TODO - these should be automatic + " 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-scissor~456H~5DK~%": 2, + " shrub-instance ~192H~5DK ~280Hshrubbery~456H~5DK~%": 2, + " collision ~192H~5DK ~280Htie-generic~456H~5DK~%": 2, + " pris-anim ~192H~5DK ~280Hpris-generic~456H~5DK~%": 2, + " textures ~192H~5DK ~280Htextures~456H~5DK~%": 2, + " misc ~192H~5DK ~280Hsprite~456H~5DK~%": 2, + " entity ~192H~5DK~%": 1, + " pris-geo ~192H~5DK ~280Hpris-fragment~456H~5DK~%": 2, + "~33L~S~32L ~S": 2, + "~32L~S ~33L~S~1L": 2, + "~35L~S~33L ~S": 2, + "~1L~S~35L ~S": 2, + "~35L~S ~1L~S~1L": 2, + "~33L~S~35L ~S": 2, + "~33L~C~34L~S~33L~C": 3, + "~35L~S ~33L~S~1L": 2, + "~33L~S ~35L~S~1L": 2, + "~33L~C": 1 + }, - "blocks_ending_in_asm_branch": {}, + "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 + ], + "load-game-text-info": [15, 16, 17, 19, 20, 21], + + "find-knot-span": [0, 1, 2, 3, 5, 6, 7, 8, 9], + + "curve-evaluate!": [0, 2, 5, 6, 7, 8, 9], + + "display-loop-main": [127, 130, 133, 136], + + "real-main-draw-hook": [114, 115, 116, 118], + + "sprite-draw-distorters": [4, 5], + "draw-drawable-tree-instance-shrub": [5, 7, 9, 11], + + "add-debug-box-with-transform": [0, 3], + "add-debug-line-sphere": [0], + + "(method 12 perf-stat)": [0], + "(method 11 perf-stat)": [0], + "bsp-camera-asm": [1, 2, 3, 4, 6, 7], + "(method 9 texture-page-dir)": [5, 6], + "level-remap-texture": [2, 3, 4, 5, 6], + + "(method 27 nav-mesh)": [1, 2], + "(method 31 nav-mesh)": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], + "(method 46 nav-mesh)": [2, 3], + "(method 32 nav-mesh)": [1, 2], + "(method 33 nav-mesh)": [1, 2], + "(method 42 nav-mesh)": [1, 2, 3, 7], + "point-poly-distance-min": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + "(method 34 nav-mesh)": [1, 2, 3, 7], + "(method 35 nav-mesh)": [2, 4], + "draw-actor-marks": [8], + "find-nearest-entity": [7, 9, 10, 11, 12, 13, 14], + "start-perf-stat-collection": [26], + "end-perf-stat-collection": [0], + "upload-vis-bits": [2, 6, 3, 0], + "set-background-regs!": [4, 3], + "draw-drawable-tree-instance-tie": [21, 23, 31, 33], + "command-get-process": [43], + "unpack-comp-rle": [1, 3, 5, 6], + "(method 16 level)": [0, 1, 5, 13, 14, 15], + "unpack-comp-huf": [2, 4, 5, 6, 7, 8, 9], + "unpack-comp-lzo": [ + 0, + 1, + 4, + 5, + 6, + 7, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, // branch fwd 39 + 39, // branch fwd no delay + 43, // goto 18 + 45 // goto 6 + ], + "(method 27 conveyor)": [5, 14, 22], + "(method 44 nav-graph)": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17, 18, 22, 24, 25, 26, 27, 30, 31, + 32, 33, 34, 35, 36 + ], + "(method 11 sparticle-launch-control)": [ + 18, 24, 25, 28, 29, 32, 33, 34, 36, 41, 55, 58, 93, 95 + ], + + "(method 22 gui-control)": [ + 10, // goto L63 (B39) + 16, // goto L58 (B27) + 26, // goto L62 (B) + 27, // goto L62 + 28, // goto L61 + 35, // goto L62 + 36, // goto L62 + 38, // goto L99 + 42, // goto L89 + 50, // goto L84 + 108, // goto L86 + 110, // goto L86 + 116, // goto L99 + 117, // goto L91 + 120 + ], + + "(anon-function 11 game-save)": [0, 3, 4, 5], + "update-actor-hash": [0, 2, 4], + "(code target-death)": [111, 140], + "(method 13 collide-cache)": [7, 9], + "(method 11 collide-mesh)": [2, 4], + "(method 12 collide-mesh-cache)": [0, 1, 2, 3, 4, 5], + "(method 10 collide-mesh)": [2], + "(method 42 collide-shape)": [0, 1, 2, 3, 4, 7], + "(method 18 collide-shape-prim-mesh)": [2, 3, 4, 5, 6, 7], + "(method 18 collide-shape-prim-sphere)": [2, 3, 4], + "(method 15 collide-shape-prim-sphere)": [1, 2, 3, 4, 5, 6], + "(method 16 collide-shape-prim-sphere)": [0, 1, 2, 3, 4], + "(method 36 collide-shape)": [8, 9], + "(method 45 collide-shape)": [33], + "(method 40 collide-shape)": [ + 0, 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 + ], + "(method 12 collide-shape-prim-group)": [1, 2, 3, 4, 5, 6], + "(method 13 collide-shape-prim)": [1, 2, 3, 4, 5, 6], + "(method 12 collide-shape-prim-sphere)": [ + 1, 2, 3, 4, 5, 8, 10, 11, 13, 14, 15 + ], + "(method 12 collide-shape-prim-mesh)": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16 + ], + "(method 24 grid-hash)": [39, 35, 22, 15], + "(method 12 flow-control)": [11, 12, 13, 14, 15, 18, 20, 22, 29], + "(method 19 process-drawable)": [0, 2, 3, 7, 10, 11, 30], + "find-offending-process-focusable": [16, 19], + + "target-standard-event-handler": [ + 5, // fwd L31/7 + 6, // to 152 + 7, // fwd L38 + 20, // to 152 + 21, // fwd L39 + 22, // to 152 + 23, // to L40 + 24, // to 152 + 25, // to L45 + 43, // to l152 + 44, // to 46 + 45, // to l152 + + 46, // to l114 + + 190, // to l152 + 191, // to 121 + 210, + 211, + 212, + 213, + 214, + + 224, + 225, + 226, + 227, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + + 255, + 256, + + 269, + 270, + 285, + 286, + 287, + 288, + 289, + 290 + ], + "bones-mtx-calc-execute": [19, 7], + "foreground-draw": [0, 1, 126], + "dma-add-process-drawable": [0, 136], + "(anon-function 3 ruins-obs)": [14, 22], + "(anon-function 0 target-death)": [ + 50, // goto 52 + 51, // goto L65 + 63, // goto L47 + 73, // goto L25 + 78, // goto L46 + 84, // goto L42 + 95, // goto next + 96, // goto L36 + 115, // goto L55 + 121, + 131 + ], + "(anon-function 4 gun-states)": [94, 96, 98], + "target-board-handler": [13, 14, 18], + "find-closest-circle-ray-intersection": [0, 4, 15, 16, 17, 18], + "(method 18 nav-control)": [ + 11, // L283 + 12, // L300 + 19, // L295 + 20, // L293 + 31, // weird jump back + 34 // weird jump no delay slot + ], + + "(method 19 nav-control)": [9, 10], + "(method 19 nav-mesh)": [7], + "(method 18 nav-mesh)": [9], + "(method 40 nav-state)": [1, 2], + "(method 45 nav-mesh)": [5, 6], + "(method 43 nav-mesh)": [0, 1, 2, 12, 13, 14, 15, 16, 17, 18, 19, 20], + "(anon-function 45 gungame-obs)": [0, 1, 6, 9, 14, 18, 21, 22, 30], // TODO - probably not the best + "(method 142 grenadier)": [0, 1, 3], + "(anon-function 34 predator)": [24], + "(anon-function 57 crimson-guard-level)": [22], + "(method 48 rigid-body-object)": [0, 1, 2, 3, 4, 5], + "(method 15 rigid-body)": [0, 1, 2, 5], + "(method 63 collide-shape-moving)": [ + 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 14, 28, 38, 39, 40, 44 + ], + "string-word-wrap": [1, 2, 6], + "(method 37 vehicle)": [0, 1, 10, 11, 12, 13, 15, 16], + "(method 123 vehicle)": [ + 0, 1, 2, 3, 4, 7, 8, 9, 10, 17, 19, 20, 23, 26, 30, 31, 32, 33, 34 + ], + "(method 122 vehicle)": [0, 1, 10, 11, 17, 18, 19, 20, 21, 22, 24, 25], + "(method 48 vehicle)": [ + 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 16, 17, 23, 24, 29, 30, 31 + ], + "(method 11 vehicle-hud-requests)": [0, 6, 7, 10, 11, 12], + "(method 17 traffic-manager)": [ + 0, 4, 7, 17, 23, 25, 26, 27, 28, 39, 42, 43, 44 + ], + "(anon-function 12 vehicle-states)": [0, 1, 2, 3], + "(method 45 traffic-engine)": [5, 8], + "(method 15 city-level-info)": [0, 1, 2, 6, 7, 9, 11, 13], + "(method 59 traffic-engine)": [5, 6, 7, 8, 9, 10], + "(method 10 traffic-suppressor)": [0, 1, 2, 4], + "(method 18 traffic-tracker)": [2, 3, 5, 6, 7, 8], + "(method 181 gator)": [ + 2, 3, 7, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 25, 26, 30 + ], + "(method 10 simple-sprite-system)": [0], + "target-pilot-post": [0, 2, 4, 13, 16, 22, 27, 41], + "(anon-function 0 ruins-obs)": [ + 0, 5, 7, 12, 13, 15, 17, 23, 24, 33, 42, 45, 46, 53, 58 + ], + "(anon-function 1 ruins-obs)": [ + 1, 2, 4, 6, 7, 14, 17, 19, 22, 24, 26, 27, 29, 31, 33, 35 + ], + "(anon-function 2 ruins-obs)": [7, 28, 37, 50, 51, 61, 62, 71], + "(anon-function 62 sig0-course)": [0, 1, 5, 6], + "(method 67 collide-shape-moving)": [0, 1, 2, 3, 11, 12, 13], + "(anon-function 12 juicer)": [29, 30], + "(anon-function 0 atoll-obs)": [11, 19, 20], + "(method 74 spydroid)": [12], // stack spill delay slot + "(anon-function 16 kid-states)": [4, 5], + "(anon-function 23 kid-states)": [4, 5], + "(anon-function 16 kor-states)": [4, 5], + "(anon-function 23 kor-states)": [4, 5], + "(method 18 mysql-nav-graph)": [0, 1, 2, 3, 4, 7, 8, 9, 14, 16], + "(anon-function 2 rigid-body-queue)": [0, 1, 2, 3], + "(method 15 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11], + "(method 13 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11], + "(method 11 rigid-body-queue)": [0, 5, 6, 7, 8, 9, 10, 11, 17, 18, 25], + "(method 10 rigid-body-queue)": [0, 9, 10, 16, 24, 25, 26, 35, 36, 48], + "(method 18 vehicle-controller)": [0, 1, 74, 75], + "(method 15 vehicle-controller)": [0, 3, 5, 6, 7, 10], + "(anon-function 41 guard)": [9], + "(anon-function 10 metalhead-predator)": [24, 25], + "(anon-function 10 errol-chal)": [6], + "choose-next-branch-no-exit-level": [0, 6, 8, 12, 13, 16, 18, 26], + "(anon-function 39 kidesc-states)": [4, 5], + "(anon-function 56 hal2-course)": [4, 5], + "(anon-function 58 hal2-course)": [74], + "(method 142 gun-buoy)": [0, 2], + "generic-merc-execute-all": [7, 15] + }, // Sometimes the game might use format strings that are fetched dynamically, // for example using the game text lookup method // Add information about those format instructions here. // e.g. "function-name":[[op, argc], [op, argc], ...] // where "op" is the op number for the call to format. - "dynamic_format_arg_counts": {}, + "dynamic_format_arg_counts": { + "(method 10 menu-loading-option)": [[118, 1]], + "(method 10 menu-insufficient-space-option)": [ + [63, 1], + [103, 1] + ], + "(method 10 menu-secrets-insufficient-space-option)": [[55, 1]], + "(method 10 menu-card-removed-option)": [[48, 1]], + "(method 10 menu-format-card-option)": [[49, 1]], + "(method 10 menu-create-game-option)": [[49, 1]], + "(method 10 menu-error-auto-saving-option)": [[72, 1]], + "(method 10 menu-error-loading-option)": [ + [64, 1], + [99, 1] + ], + "(method 10 menu-insert-card-option)": [[48, 1]], + "(method 16 fail-mission)": [ + [68, 1], + [101, 1], + [130, 1] + ], + "auto-save-post": [[158, 1]], + "(method 30 training-manager)": [[53, 0]], + "(trans course training-manager)": [ + [54, 0], + [89, 0], + [124, 0], + [155, 0], + [195, 0], + [230, 0], + [261, 0], + [307, 0], + [338, 0], + [374, 0], + [409, 0], + [444, 0], + [479, 0], + [510, 0] + ], + "(method 17 hud-goal)": [[71, 0]], + "(method 15 hud-miss)": [[44, 0]], + "(method 28 hoverboard-training-manager)": [[53, 0]], + "(method 29 hoverboard-training-manager)": [ + [48, 0], + [83, 0], + [118, 0], + [153, 0], + [184, 0], + [224, 0], + [259, 0], + [294, 0], + [325, 0], + [365, 0], + [400, 0], + [431, 0], + [477, 0], + [508, 0] + ], + "(trans menu burning-bush)": [ + [294, 0], + [378, 0], + [406, 0], + [434, 0], + [462, 0], + [490, 0], + [518, 0], + [350, 0] + ], + "(trans idle burning-bush)": [[171, 0]], + "(anon-function 11 oracle-training)": [[79, 0]], + "(anon-function 4 oracle-training)": [[79, 0]], + "(anon-function 0 oracle-training)": [[79, 0]], + "(anon-function 7 oracle-training)": [[79, 0]], + "(method 27 sig-recorder)": [[93, 0]], + "(method 15 hud-race-final-stats)": [[158, 1]], + "(method 24 race-manager)": [[67, 1]], + "(method 25 race-manager)": [ + [67, 1], + [96, 1] + ] + }, - "mips2c_functions_by_name": [], + "mips2c_functions_by_name": [ + "collide-do-primitives", + "moving-sphere-triangle-intersect", + "calc-animation-from-spr", + "draw-string-asm", + "draw-string", + "get-string-length", + "adgif-shader<-texture-with-update!", + "init-boundary-regs", + "draw-boundary-polygon", + "render-boundary-quad", + "render-boundary-tri", + "clip-polygon-against-negative-hyperplane", + "clip-polygon-against-positive-hyperplane", + "sp-init-fields!", + "particle-adgif", + "sp-launch-particles-var", + "sparticle-motion-blur", + "sp-process-block-2d", + "sp-process-block-3d", + "set-tex-offset", + "draw-large-polygon", + "render-sky-quad", + "render-sky-tri", + "(method 16 sky-work)", + "(method 17 sky-work)", + "(method 32 sky-work)", + "(method 33 sky-work)", + // "(method 28 sky-work)", + "(method 29 sky-work)", + "(method 30 sky-work)", + "(method 11 collide-hash)", + "(method 12 collide-hash)", + "fill-bg-using-box-new", + "fill-bg-using-line-sphere-new", + "(method 12 collide-mesh)", + "(method 11 collide-mesh)", + "(method 14 collide-mesh)", + "(method 15 collide-mesh)", + "(method 10 collide-edge-hold-list)", + "(method 19 collide-edge-work)", + "(method 9 edge-grab-info)", + "(method 16 collide-edge-work)", + "(method 17 collide-edge-work)", + "(method 18 collide-edge-work)", + "draw-large-polygon-ocean", + "render-ocean-quad", + "init-ocean-far-regs", + "(method 14 ocean)", + "(method 15 ocean)", + "(method 16 ocean)", + "(method 18 grid-hash)", + "(method 19 grid-hash)", + "(method 20 grid-hash)", + "(method 22 grid-hash)", + "(method 28 sphere-hash)", + "(method 33 sphere-hash)", + "(method 29 sphere-hash)", + "(method 30 sphere-hash)", + "(method 31 sphere-hash)", + "(method 32 sphere-hash)", + "(method 33 spatial-hash)", + "(method 39 spatial-hash)", + "(method 36 spatial-hash)", + "(method 37 spatial-hash)", + "(method 35 spatial-hash)", + "(method 10 collide-shape-prim-mesh)", + "(method 10 collide-shape-prim-sphere)", + "(method 10 collide-shape-prim-group)", + "(method 11 collide-shape-prim-mesh)", + "(method 11 collide-shape-prim-sphere)", + "(method 11 collide-shape-prim-group)", + "(method 9 collide-cache-prim)", + "(method 10 collide-cache-prim)", + "(method 17 collide-cache)", + "(method 9 collide-puss-work)", + "(method 10 collide-puss-work)", + "bones-mtx-calc", + "foreground-check-longest-edge-asm", + "foreground-merc", + "add-light-sphere-to-light-group", + "light-hash-add-items", + "light-hash-count-items", + "light-hash-get-bucket-index", + // nav-mesh / nav-control related + // TODO - it would be nice to eventually figure out the asm blocks for the majority of these + "nav-state-patch-pointers", + "(method 20 nav-engine)", + // "find-closest-circle-ray-intersection", + // "(method 18 nav-control)", + "nav-dma-send-to-spr-no-flush", + "nav-dma-send-from-spr-no-flush", + "(method 17 nav-engine)", + "(method 18 nav-engine)", + "(method 21 nav-engine)", + "(method 39 nav-state)", + "setup-blerc-chains-for-one-fragment", + "blerc-execute", + "ripple-create-wave-table", + "ripple-execute-init", + "ripple-apply-wave-table", + "ripple-matrix-scale", + "(method 53 squid)", + "init-vortex-regs", + "render-vortex-quad", + "draw-large-polygon-vortex", + "foreground-generic-merc", + "generic-merc-init-asm", + "mercneric-convert", + "high-speed-reject", + "generic-translucent", + "generic-merc-query", + "generic-merc-death", + "generic-merc-execute-asm", + "generic-merc-do-chain", + "generic-light-proc", + "generic-envmap-proc", + "generic-prepare-dma-double", + "generic-prepare-dma-single", + "generic-warp-source-proc", + "generic-warp-dest-proc", + "generic-warp-dest", + "generic-warp-envmap-dest", + "generic-no-light-proc" + + ], "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": [], + "missing_textures": [["vinroom", 0, 0]], // 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. diff --git a/decompiler/config/jak3/ntsc_v1/inputs.jsonc b/decompiler/config/jak3/ntsc_v1/inputs.jsonc index 3f9781018..d501c2e52 100644 --- a/decompiler/config/jak3/ntsc_v1/inputs.jsonc +++ b/decompiler/config/jak3/ntsc_v1/inputs.jsonc @@ -10,281 +10,281 @@ "dgo_names":[ //"CGO/ART.CGO", "CGO/KERNEL.CGO", - "CGO/ENGINE.CGO", + // "CGO/ENGINE.CGO", "CGO/GAME.CGO", - "CGO/COMMON.CGO" - //"DGO/LJKDMPK.DGO", - //"DGO/LBBSDRP1.DGO", - //"DGO/LTNJXHIP.DGO", - //"DGO/MIC.DGO", - //"DGO/OASISCST.DGO", - //"DGO/CTYPEPA.DGO", - //"DGO/LPRENME.DGO", - //"DGO/LFREEOUT.DGO", - //"DGO/LGUNNORM.DGO", - //"DGO/LTOWA.DGO", - //"DGO/TEMA.DGO", - //"DGO/CTA.DGO", - //"DGO/LPRECC.DGO", - //"DGO/LJKDXVIN.DGO", - //"DGO/CTYPEPC.DGO", - //"DGO/SEA.DGO", - //"DGO/COMBE.DGO", - //"DGO/CTYPESA.DGO", - //"DGO/LBLOWCST.DGO", - //"DGO/WSD.DGO", - //"DGO/LBBRING3.DGO", - //"DGO/LCTYPATK.DGO", - //"DGO/WCB.DGO", - //"DGO/DESRESC.DGO", - //"DGO/LBBRING4.DGO", - //"DGO/GRIDCST.DGO", - //"DGO/RAILX.DGO", - //"DGO/SEJ.DGO", - //"DGO/LJAKC.DGO", - //"DGO/CTB.DGO", - //"DGO/CTYCARC.DGO", - //"DGO/LMECH.DGO", - //"DGO/LBBSDRP2.DGO", - //"DGO/NSA.DGO", - //"DGO/LBBTCHA3.DGO", - //"DGO/GUNGAME2.DGO", - //"DGO/CTC.DGO", - //"DGO/LVINCST.DGO", - //"DGO/COMBX.DGO", - //"DGO/DESH.DGO", - //"DGO/DESRACE2.DGO", - //"DGO/RAILD.DGO", - //"DGO/FACC.DGO", - //"DGO/CTYPESC.DGO", - //"DGO/LWASBBV.DGO", - //"DGO/TOWB.DGO", - //"DGO/HGA.DGO", - //"DGO/SEH.DGO", - //"DGO/MHCTYCST.DGO", - //"DGO/GUNGAME1.DGO", - //"DGO/INTROCST.DGO", - //"DGO/DESJUMP.DGO", - //"DGO/SEM.DGO", - //"DGO/SEI.DGO", - //"DGO/DESG.DGO", - //"DGO/DESW.DGO", - //"DGO/LOUTRO3.DGO", - //"DGO/LDAMKLEV.DGO", - //"DGO/DESERROL.DGO", - //"DGO/RAILB2.DGO", - //"DGO/LERROL.DGO", - //"DGO/IPF.DGO", - //"DGO/RAILB.DGO", - //"DGO/LCTYHIJK.DGO", - //"DGO/CTYPEPB.DGO", - //"DGO/PRECB.DGO", - //"DGO/LFORM.DGO", - //"DGO/WASLEAPR.DGO", - //"DGO/LKEIRA.DGO", - //"DGO/LJAK.DGO", - //"DGO/SLUMBSET.DGO", - //"DGO/FACD.DGO", - //"DGO/LWASSIG.DGO", - //"DGO/LBIPED.DGO", - //"DGO/DESD.DGO", - //"DGO/CFB.DGO", - //"DGO/FREECAST.DGO", - //"DGO/SEG.DGO", - //"DGO/FACTORYA.DGO", - //"DGO/LPATK.DGO", - //"DGO/FRSTX.DGO", - //"DGO/SEB.DGO", - //"DGO/DESBCST.DGO", - //"DGO/DESE.DGO", - //"DGO/DESOASIS.DGO", - //"DGO/CTYCARA.DGO", - //"DGO/LSIGKLV.DGO", - //"DGO/CIB.DGO", - //"DGO/LBBRING2.DGO", - //"DGO/LTNFXHIP.DGO", - //"DGO/MIA.DGO", - //"DGO/MHCB.DGO", - //"DGO/LNSTOBC.DGO", - //"DGO/COMBD.DGO", - //"DGO/RBCT.DGO", - //"DGO/LTORNJNX.DGO", - //"DGO/DESBATTL.DGO", - //"DGO/SEK.DGO", - //"DGO/LSNKWHLS.DGO", - //"DGO/LMHCB.DGO", - //"DGO/LBOMBBOT.DGO", - //"DGO/OUTCAST3.DGO", - //"DGO/LBLOWTMH.DGO", - //"DGO/TEMD.DGO", - //"DGO/LTOWCITY.DGO", - //"DGO/OUTROCST.DGO", - //"DGO/WASCAST.DGO", - //"DGO/LFACRM2.DGO", - //"DGO/WASPGAME.DGO", - //"DGO/RAILE.DGO", - //"DGO/CTYPESB.DGO", - //"DGO/DESBOSS1.DGO", - //"DGO/FREEHQ.DGO", - //"DGO/LTORN.DGO", - //"DGO/TOWERA.DGO", - //"DGO/LSAMOS.DGO", - //"DGO/LFORP.DGO", - //"DGO/CFA.DGO", - //"DGO/LJINX.DGO", - //"DGO/SEO.DGO", - //"DGO/PRECA.DGO", - //"DGO/TOWERC.DGO", - //"DGO/WCA.DGO", - //"DGO/SEC.DGO", - //"DGO/DESF.DGO", - //"DGO/SEL.DGO", - //"DGO/LCTYDEST.DGO", - //"DGO/LTORNSAM.DGO", - //"DGO/MUSEUM3B.DGO", - //"DGO/SEE.DGO", - //"DGO/DESHUNT.DGO", - //"DGO/RAILA.DGO", - //"DGO/TITLE.DGO", - //"DGO/RUBC.DGO", - //"DGO/DESB.DGO", - //"DGO/LFACCAR.DGO", - //"DGO/LNSTOA.DGO", - //"DGO/MUSEUM3.DGO", - //"DGO/ONINTENT.DGO", - //"DGO/STA.DGO", - //"DGO/WASSTADA.DGO", - //"DGO/POWERGD.DGO", - //"DGO/LKLEEVER.DGO", - //"DGO/FACB.DGO", - //"DGO/LCTYASS.DGO", - //"DGO/MHCA.DGO", - //"DGO/LTOWB.DGO", - //"DGO/LNSTCST.DGO", - //"DGO/DESRESCG.DGO", - //"DGO/INTPALRF.DGO", - //"DGO/LMHCA.DGO", - //"DGO/TOWERCST.DGO", - //"DGO/RAILF.DGO", - //"DGO/CIA.DGO", - //"DGO/CTYCARKG.DGO", - //"DGO/WASCHASE.DGO", - //"DGO/LFACO.DGO", - //"DGO/WIN.DGO", - //"DGO/TEMPLEE.DGO", - //"DGO/LBBSPIRT.DGO", - //"DGO/MUSEUM2.DGO", - //"DGO/INTTITLE.DGO", - //"DGO/STAA.DGO", - //"DGO/MUSEUM4B.DGO", - //"DGO/PRECD.DGO", - //"DGO/SEF.DGO", - //"DGO/CTYCARB.DGO", - //"DGO/WASDEFEN.DGO", - //"DGO/LBLOWTKG.DGO", - //"DGO/DESA.DGO", - //"DGO/COMBB.DGO", - //"DGO/WASSTADC.DGO", - //"DGO/DESC.DGO", - //"DGO/LDAMPECK.DGO", - //"DGO/LJAKSIG.DGO", - //"DGO/HALFPIPE.DGO", - //"DGO/DESRACE1.DGO", - //"DGO/SEN.DGO", - //"DGO/TEMP.DGO", - //"DGO/SED.DGO", - //"DGO/LFACB.DGO", - //"DGO/LCTYSNPR.DGO", - //"DGO/LBBSPID.DGO", - //"DGO/FRSTA.DGO", - //"DGO/LBBRING5.DGO", - //"DGO/LBBSPRT3.DGO", - //"DGO/HHG.DGO", - //"DGO/LBBSPRT2.DGO", - //"DGO/CGB.DGO", - //"DGO/LDMPCKGN.DGO", - //"DGO/LSEEMWCA.DGO", - //"DGO/HGB.DGO", - //"DGO/LONINSIM.DGO", - //"DGO/RUBA.DGO", - //"DGO/DESRALLY.DGO", - //"DGO/WWD.DGO", - //"DGO/STB.DGO", - //"DGO/MIB.DGO", - //"DGO/LCTYBLOW.DGO", - //"DGO/LWSTDPCK.DGO", - //"DGO/MUSEUM.DGO", - //"DGO/LJAKCKLV.DGO", - //"DGO/LBBRING1.DGO", - //"DGO/MUSEUM4.DGO", - //"DGO/LFACRM1.DGO", - //"DGO/LJKCDMKL.DGO", - //"DGO/LDAMSIG.DGO", - //"DGO/DESTRACK.DGO", - //"DGO/GGA.DGO", - //"DGO/RAILC.DGO", - //"DGO/LBBTCHA2.DGO", - //"DGO/DESINTER.DGO", - //"DGO/NSB.DGO", - //"DGO/LOUTRO.DGO", - //"DGO/VIN.DGO", - //"DGO/LDESGCST.DGO", - //"DGO/WARPCAST.DGO", - //"DGO/LBBRING6.DGO", - //"DGO/FRSTB.DGO", - //"DGO/TEMC.DGO", - //"DGO/COMBC.DGO", - //"DGO/LTRTWHLS.DGO", - //"DGO/PRECC.DGO", - //"DGO/DESCHASE.DGO", - //"DGO/CITYCAST.DGO", - //"DGO/CPO.DGO", - //"DGO/LFACCITY.DGO", - //"DGO/RAILCST.DGO", - //"DGO/LJNDKLEV.DGO", - //"DGO/CWI.DGO", - //"DGO/MINEE.DGO", - //"DGO/LFORRING.DGO", - //"DGO/LASHELIN.DGO", - //"DGO/LJAKKLEV.DGO", - //"DGO/LCTYPALT.DGO", - //"DGO/LNSTOBB.DGO", - //"DGO/LJKFEET.DGO", - //"DGO/DST.DGO", - //"DGO/LBBTCHA1.DGO", - //"DGO/LGUNRNC.DGO", - //"DGO/COMBN.DGO", - //"DGO/DESRESCC.DGO", - //"DGO/LSIGJAKC.DGO", - //"DGO/DESLIZ.DGO", - //"DGO/WASPALA.DGO", - //"DGO/LJAKNDAX.DGO", - //"DGO/WASSEEM.DGO", - //"DGO/WASALL.DGO", - //"DGO/WCASEEM.DGO", - //"DGO/LSIG.DGO", - //"DGO/LFACTORY.DGO", - //"DGO/LWLANDM.DGO", - //"DGO/LPTRL.DGO", - //"DGO/MINED.DGO", - //"DGO/LDAMPKSM.DGO", - //"DGO/RUBB.DGO", - //"DGO/LCITYSML.DGO", - //"DGO/RUBA2.DGO", - //"DGO/LOUTRO2.DGO", - //"DGO/VOCX.DGO", - //"DGO/TEMX.DGO", - //"DGO/ARENACST.DGO", - //"DGO/TEMB.DGO", - //"DGO/COMBA.DGO", - //"DGO/LBBSDRP3.DGO", - //"DGO/LPATKCS.DGO", - //"DGO/VOCA.DGO", - //"DGO/WASSTADB.DGO", - //"DGO/LDAX.DGO", - //"DGO/LCTYPROT.DGO", - //"DGO/DESHOVER.DGO", - //"DGO/DESBOSS2.DGO" + // "CGO/COMMON.CGO", + "DGO/LJKDMPK.DGO", + "DGO/LBBSDRP1.DGO", + "DGO/LTNJXHIP.DGO", + "DGO/MIC.DGO", + "DGO/OASISCST.DGO", + "DGO/CTYPEPA.DGO", + "DGO/LPRENME.DGO", + "DGO/LFREEOUT.DGO", + "DGO/LGUNNORM.DGO", + "DGO/LTOWA.DGO", + "DGO/TEMA.DGO", + "DGO/CTA.DGO", + "DGO/LPRECC.DGO", + "DGO/LJKDXVIN.DGO", + "DGO/CTYPEPC.DGO", + "DGO/SEA.DGO", + "DGO/COMBE.DGO", + "DGO/CTYPESA.DGO", + "DGO/LBLOWCST.DGO", + "DGO/WSD.DGO", + "DGO/LBBRING3.DGO", + "DGO/LCTYPATK.DGO", + "DGO/WCB.DGO", + "DGO/DESRESC.DGO", + "DGO/LBBRING4.DGO", + "DGO/GRIDCST.DGO", + "DGO/RAILX.DGO", + "DGO/SEJ.DGO", + "DGO/LJAKC.DGO", + "DGO/CTB.DGO", + "DGO/CTYCARC.DGO", + "DGO/LMECH.DGO", + "DGO/LBBSDRP2.DGO", + "DGO/NSA.DGO", + "DGO/LBBTCHA3.DGO", + "DGO/GUNGAME2.DGO", + "DGO/CTC.DGO", + "DGO/LVINCST.DGO", + "DGO/COMBX.DGO", + "DGO/DESH.DGO", + "DGO/DESRACE2.DGO", + "DGO/RAILD.DGO", + "DGO/FACC.DGO", + "DGO/CTYPESC.DGO", + "DGO/LWASBBV.DGO", + "DGO/TOWB.DGO", + "DGO/HGA.DGO", + "DGO/SEH.DGO", + "DGO/MHCTYCST.DGO", + "DGO/GUNGAME1.DGO", + "DGO/INTROCST.DGO", + "DGO/DESJUMP.DGO", + "DGO/SEM.DGO", + "DGO/SEI.DGO", + "DGO/DESG.DGO", + "DGO/DESW.DGO", + "DGO/LOUTRO3.DGO", + "DGO/LDAMKLEV.DGO", + "DGO/DESERROL.DGO", + "DGO/RAILB2.DGO", + "DGO/LERROL.DGO", + "DGO/IPF.DGO", + "DGO/RAILB.DGO", + "DGO/LCTYHIJK.DGO", + "DGO/CTYPEPB.DGO", + "DGO/PRECB.DGO", + "DGO/LFORM.DGO", + "DGO/WASLEAPR.DGO", + "DGO/LKEIRA.DGO", + "DGO/LJAK.DGO", + "DGO/SLUMBSET.DGO", + "DGO/FACD.DGO", + "DGO/LWASSIG.DGO", + "DGO/LBIPED.DGO", + "DGO/DESD.DGO", + "DGO/CFB.DGO", + "DGO/FREECAST.DGO", + "DGO/SEG.DGO", + "DGO/FACTORYA.DGO", + "DGO/LPATK.DGO", + "DGO/FRSTX.DGO", + "DGO/SEB.DGO", + "DGO/DESBCST.DGO", + "DGO/DESE.DGO", + "DGO/DESOASIS.DGO", + "DGO/CTYCARA.DGO", + "DGO/LSIGKLV.DGO", + "DGO/CIB.DGO", + "DGO/LBBRING2.DGO", + "DGO/LTNFXHIP.DGO", + "DGO/MIA.DGO", + "DGO/MHCB.DGO", + "DGO/LNSTOBC.DGO", + "DGO/COMBD.DGO", + "DGO/RBCT.DGO", + "DGO/LTORNJNX.DGO", + "DGO/DESBATTL.DGO", + "DGO/SEK.DGO", + "DGO/LSNKWHLS.DGO", + "DGO/LMHCB.DGO", + "DGO/LBOMBBOT.DGO", + "DGO/OUTCAST3.DGO", + "DGO/LBLOWTMH.DGO", + "DGO/TEMD.DGO", + "DGO/LTOWCITY.DGO", + "DGO/OUTROCST.DGO", + "DGO/WASCAST.DGO", + "DGO/LFACRM2.DGO", + "DGO/WASPGAME.DGO", + "DGO/RAILE.DGO", + "DGO/CTYPESB.DGO", + "DGO/DESBOSS1.DGO", + "DGO/FREEHQ.DGO", + "DGO/LTORN.DGO", + "DGO/TOWERA.DGO", + "DGO/LSAMOS.DGO", + "DGO/LFORP.DGO", + "DGO/CFA.DGO", + "DGO/LJINX.DGO", + "DGO/SEO.DGO", + "DGO/PRECA.DGO", + "DGO/TOWERC.DGO", + "DGO/WCA.DGO", + "DGO/SEC.DGO", + "DGO/DESF.DGO", + "DGO/SEL.DGO", + "DGO/LCTYDEST.DGO", + "DGO/LTORNSAM.DGO", + "DGO/MUSEUM3B.DGO", + "DGO/SEE.DGO", + "DGO/DESHUNT.DGO", + "DGO/RAILA.DGO", + "DGO/TITLE.DGO", + "DGO/RUBC.DGO", + "DGO/DESB.DGO", + "DGO/LFACCAR.DGO", + "DGO/LNSTOA.DGO", + "DGO/MUSEUM3.DGO", + "DGO/ONINTENT.DGO", + "DGO/STA.DGO", + "DGO/WASSTADA.DGO", + "DGO/POWERGD.DGO", + "DGO/LKLEEVER.DGO", + "DGO/FACB.DGO", + "DGO/LCTYASS.DGO", + "DGO/MHCA.DGO", + "DGO/LTOWB.DGO", + "DGO/LNSTCST.DGO", + "DGO/DESRESCG.DGO", + "DGO/INTPALRF.DGO", + "DGO/LMHCA.DGO", + "DGO/TOWERCST.DGO", + "DGO/RAILF.DGO", + "DGO/CIA.DGO", + "DGO/CTYCARKG.DGO", + "DGO/WASCHASE.DGO", + "DGO/LFACO.DGO", + "DGO/WIN.DGO", + "DGO/TEMPLEE.DGO", + "DGO/LBBSPIRT.DGO", + "DGO/MUSEUM2.DGO", + "DGO/INTTITLE.DGO", + "DGO/STAA.DGO", + "DGO/MUSEUM4B.DGO", + "DGO/PRECD.DGO", + "DGO/SEF.DGO", + "DGO/CTYCARB.DGO", + "DGO/WASDEFEN.DGO", + "DGO/LBLOWTKG.DGO", + "DGO/DESA.DGO", + "DGO/COMBB.DGO", + "DGO/WASSTADC.DGO", + "DGO/DESC.DGO", + "DGO/LDAMPECK.DGO", + "DGO/LJAKSIG.DGO", + "DGO/HALFPIPE.DGO", + "DGO/DESRACE1.DGO", + "DGO/SEN.DGO", + "DGO/TEMP.DGO", + "DGO/SED.DGO", + "DGO/LFACB.DGO", + "DGO/LCTYSNPR.DGO", + "DGO/LBBSPID.DGO", + "DGO/FRSTA.DGO", + "DGO/LBBRING5.DGO", + "DGO/LBBSPRT3.DGO", + "DGO/HHG.DGO", + "DGO/LBBSPRT2.DGO", + "DGO/CGB.DGO", + "DGO/LDMPCKGN.DGO", + "DGO/LSEEMWCA.DGO", + "DGO/HGB.DGO", + "DGO/LONINSIM.DGO", + "DGO/RUBA.DGO", + "DGO/DESRALLY.DGO", + "DGO/WWD.DGO", + "DGO/STB.DGO", + "DGO/MIB.DGO", + "DGO/LCTYBLOW.DGO", + "DGO/LWSTDPCK.DGO", + "DGO/MUSEUM.DGO", + "DGO/LJAKCKLV.DGO", + "DGO/LBBRING1.DGO", + "DGO/MUSEUM4.DGO", + "DGO/LFACRM1.DGO", + "DGO/LJKCDMKL.DGO", + "DGO/LDAMSIG.DGO", + "DGO/DESTRACK.DGO", + "DGO/GGA.DGO", + "DGO/RAILC.DGO", + "DGO/LBBTCHA2.DGO", + "DGO/DESINTER.DGO", + "DGO/NSB.DGO", + "DGO/LOUTRO.DGO", + "DGO/VIN.DGO", + "DGO/LDESGCST.DGO", + "DGO/WARPCAST.DGO", + "DGO/LBBRING6.DGO", + "DGO/FRSTB.DGO", + "DGO/TEMC.DGO", + "DGO/COMBC.DGO", + "DGO/LTRTWHLS.DGO", + "DGO/PRECC.DGO", + "DGO/DESCHASE.DGO", + "DGO/CITYCAST.DGO", + "DGO/CPO.DGO", + "DGO/LFACCITY.DGO", + "DGO/RAILCST.DGO", + "DGO/LJNDKLEV.DGO", + "DGO/CWI.DGO", + "DGO/MINEE.DGO", + "DGO/LFORRING.DGO", + "DGO/LASHELIN.DGO", + "DGO/LJAKKLEV.DGO", + "DGO/LCTYPALT.DGO", + "DGO/LNSTOBB.DGO", + "DGO/LJKFEET.DGO", + "DGO/DST.DGO", + "DGO/LBBTCHA1.DGO", + "DGO/LGUNRNC.DGO", + "DGO/COMBN.DGO", + "DGO/DESRESCC.DGO", + "DGO/LSIGJAKC.DGO", + "DGO/DESLIZ.DGO", + "DGO/WASPALA.DGO", + "DGO/LJAKNDAX.DGO", + "DGO/WASSEEM.DGO", + "DGO/WASALL.DGO", + "DGO/WCASEEM.DGO", + "DGO/LSIG.DGO", + "DGO/LFACTORY.DGO", + "DGO/LWLANDM.DGO", + "DGO/LPTRL.DGO", + "DGO/MINED.DGO", + "DGO/LDAMPKSM.DGO", + "DGO/RUBB.DGO", + "DGO/LCITYSML.DGO", + "DGO/RUBA2.DGO", + "DGO/LOUTRO2.DGO", + "DGO/VOCX.DGO", + "DGO/TEMX.DGO", + "DGO/ARENACST.DGO", + "DGO/TEMB.DGO", + "DGO/COMBA.DGO", + "DGO/LBBSDRP3.DGO", + "DGO/LPATKCS.DGO", + "DGO/VOCA.DGO", + "DGO/WASSTADB.DGO", + "DGO/LDAX.DGO", + "DGO/LCTYPROT.DGO", + "DGO/DESHOVER.DGO", + "DGO/DESBOSS2.DGO" ], // some objects are part of STR files (streaming data). diff --git a/decompiler/config/jak3/ntsc_v1/joint-node-info.min.json b/decompiler/config/jak3/ntsc_v1/joint-node-info.min.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/decompiler/config/jak3/ntsc_v1/joint-node-info.min.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index d6e44e492..bb836f13a 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -160,6 +160,11 @@ void DecompilerTypeSystem::add_type_parent(const std::string& child, const std:: } std::string DecompilerTypeSystem::lookup_parent_from_inspects(const std::string& child) const { + if (child == "process-tree") + return "basic"; + if (child == "process") + return "process-tree"; + auto kv_tp = type_parents.find(child); if (kv_tp != type_parents.end()) { return kv_tp->second; @@ -169,6 +174,15 @@ std::string DecompilerTypeSystem::lookup_parent_from_inspects(const std::string& } bool DecompilerTypeSystem::lookup_flags(const std::string& type, u64* dest) const { + if (type == "process-tree") { + *dest = ((u64)0xe << 32) + (0 << 16) + 0x24; + return true; + } + if (type == "process") { + *dest = ((u64)0xe << 32) + (0 << 16) + 0x80; + return true; + } + auto kv = type_flags.find(type); if (kv != type_flags.end()) { *dest = kv->second; diff --git a/goal_src/jak3/build/all_objs.json b/goal_src/jak3/build/all_objs.json new file mode 100644 index 000000000..9892c59e5 --- /dev/null +++ b/goal_src/jak3/build/all_objs.json @@ -0,0 +1,2764 @@ +[["gcommon", "gcommon", 5, ["KERNEL"], ""], +["gstring-h", "gstring-h", 5, ["KERNEL"], ""], +["gkernel-h", "gkernel-h", 5, ["KERNEL"], ""], +["gkernel", "gkernel", 5, ["KERNEL"], ""], +["pskernel", "pskernel", 5, ["KERNEL"], ""], +["gstring", "gstring", 5, ["KERNEL"], ""], +["dgo-h", "dgo-h", 5, ["KERNEL"], ""], +["gstate", "gstate", 5, ["KERNEL"], ""], +["types-h", "types-h", 5, ["GAME"], ""], +["vu1-macros", "vu1-macros", 5, ["GAME"], ""], +["math", "math", 5, ["GAME"], ""], +["vector-h", "vector-h", 5, ["GAME"], ""], +["gravity-h", "gravity-h", 5, ["GAME"], ""], +["bounding-box-h", "bounding-box-h", 5, ["GAME"], ""], +["matrix-h", "matrix-h", 5, ["GAME"], ""], +["quaternion-h", "quaternion-h", 5, ["GAME"], ""], +["euler-h", "euler-h", 5, ["GAME"], ""], +["transform-h", "transform-h", 5, ["GAME"], ""], +["geometry-h", "geometry-h", 5, ["GAME"], ""], +["trigonometry-h", "trigonometry-h", 5, ["GAME"], ""], +["transformq-h", "transformq-h", 5, ["GAME"], ""], +["bounding-box", "bounding-box", 5, ["GAME"], ""], +["matrix", "matrix", 5, ["GAME"], ""], +["matrix-compose", "matrix-compose", 5, ["GAME"], ""], +["transform", "transform", 5, ["GAME"], ""], +["quaternion", "quaternion", 5, ["GAME"], ""], +["euler", "euler", 5, ["GAME"], ""], +["trigonometry", "trigonometry", 5, ["GAME"], ""], +["gsound-h", "gsound-h", 5, ["GAME"], ""], +["timer-h", "timer-h", 5, ["GAME"], ""], +["vif-h", "vif-h", 5, ["GAME"], ""], +["dma-h", "dma-h", 5, ["GAME"], ""], +["video-h", "video-h", 5, ["GAME"], ""], +["vu1-user-h", "vu1-user-h", 5, ["GAME"], ""], +["profile-h", "profile-h", 5, ["GAME"], ""], +["dma", "dma", 5, ["GAME"], ""], +["dma-buffer", "dma-buffer", 5, ["GAME"], ""], +["dma-bucket", "dma-bucket", 5, ["GAME"], ""], +["dma-disasm", "dma-disasm", 5, ["GAME"], ""], +["pad", "pad", 5, ["GAME"], ""], +["gs", "gs", 5, ["GAME"], ""], +["display-h", "display-h", 5, ["GAME"], ""], +["geometry", "geometry", 5, ["GAME"], ""], +["timer", "timer", 5, ["GAME"], ""], +["vector", "vector", 5, ["GAME"], ""], +["file-io", "file-io", 5, ["GAME"], ""], +["loader-h", "loader-h", 5, ["GAME"], ""], +["texture-h", "texture-h", 5, ["GAME"], ""], +["texture-anim-h", "texture-anim-h", 5, ["GAME"], ""], +["lights-h", "lights-h", 5, ["GAME"], ""], +["mood-h", "mood-h", 5, ["GAME"], ""], +["level-h", "level-h", 5, ["GAME"], ""], +["capture-h", "capture-h", 5, ["GAME"], ""], +["math-camera-h", "math-camera-h", 5, ["GAME"], ""], +["math-camera", "math-camera", 5, ["GAME"], ""], +["font-h", "font-h", 5, ["GAME"], ""], +["decomp-h", "decomp-h", 5, ["GAME"], ""], +["time-of-day-h", "time-of-day-h", 5, ["GAME"], ""], +["profile", "profile", 5, ["GAME"], ""], +["display", "display", 5, ["GAME"], ""], +["connect", "connect", 5, ["GAME"], ""], +["text-h", "text-h", 5, ["GAME"], ""], +["camera-defs-h", "camera-defs-h", 5, ["GAME"], ""], +["trail-h", "trail-h", 5, ["GAME"], ""], +["minimap-h", "minimap-h", 5, ["GAME"], ""], +["bigmap-h", "bigmap-h", 5, ["GAME"], ""], +["settings-h", "settings-h", 5, ["GAME"], ""], +["capture", "capture", 5, ["GAME"], ""], +["memory-usage-h", "memory-usage-h", 5, ["GAME"], ""], +["blit-displays-h", "blit-displays-h", 5, ["GAME"], ""], +["sky-h", "sky-h", 5, ["GAME"], ""], +["ocean-h", "ocean-h", 5, ["GAME"], ""], +["texture", "texture", 5, ["GAME"], ""], +["main-h", "main-h", 5, ["GAME"], ""], +["mspace-h", "mspace-h", 5, ["GAME"], ""], +["drawable-h", "drawable-h", 5, ["GAME"], ""], +["drawable-group-h", "drawable-group-h", 5, ["GAME"], ""], +["drawable-inline-array-h", "drawable-inline-array-h", 5, ["GAME"], ""], +["draw-node-h", "draw-node-h", 5, ["GAME"], ""], +["drawable-tree-h", "drawable-tree-h", 5, ["GAME"], ""], +["drawable-actor-h", "drawable-actor-h", 5, ["GAME"], ""], +["region-h", "region-h", 5, ["GAME"], ""], +["traffic-h", "traffic-h", 5, ["GAME"], ""], +["game-task-h", "game-task-h", 5, ["GAME"], ""], +["task-control-h", "task-control-h", 5, ["GAME"], ""], +["generic-h", "generic-h", 5, ["GAME"], ""], +["ocean-trans-tables", "ocean-trans-tables", 5, ["GAME"], ""], +["ocean-tables", "ocean-tables", 5, ["GAME"], ""], +["ocean-frames", "ocean-frames", 5, ["GAME"], ""], +["cloth-art-h", "cloth-art-h", 5, ["GAME"], ""], +["art-h", "art-h", 5, ["GAME"], ""], +["generic-vu1-h", "generic-vu1-h", 5, ["GAME"], ""], +["merc-h", "merc-h", 5, ["GAME"], ""], +["generic-merc-h", "generic-merc-h", 5, ["GAME"], ""], +["generic-tie-h", "generic-tie-h", 5, ["GAME"], ""], +["generic-work-h", "generic-work-h", 5, ["GAME"], ""], +["shadow-cpu-h", "shadow-cpu-h", 5, ["GAME"], ""], +["shadow-vu1-h", "shadow-vu1-h", 5, ["GAME"], ""], +["prim-h", "prim-h", 5, ["GAME"], ""], +["memcard-h", "memcard-h", 5, ["GAME"], ""], +["game-info-h", "game-info-h", 5, ["GAME"], ""], +["gui-h", "gui-h", 5, ["GAME"], ""], +["ambient-h", "ambient-h", 5, ["GAME"], ""], +["speech-h", "speech-h", 5, ["GAME"], ""], +["wind-h", "wind-h", 5, ["GAME"], ""], +["prototype-h", "prototype-h", 5, ["GAME"], ""], +["joint-h", "joint-h", 5, ["GAME"], ""], +["bones-h", "bones-h", 5, ["GAME"], ""], +["foreground-h", "foreground-h", 5, ["GAME"], ""], +["engines", "engines", 5, ["GAME"], ""], +["lightning-h", "lightning-h", 5, ["GAME"], ""], +["res-h", "res-h", 5, ["GAME"], ""], +["res", "res", 5, ["GAME"], ""], +["lights", "lights", 5, ["GAME"], ""], +["dynamics-h", "dynamics-h", 5, ["GAME"], ""], +["surface-h", "surface-h", 5, ["GAME"], ""], +["pat-h", "pat-h", 5, ["GAME"], ""], +["fact-h", "fact-h", 5, ["GAME"], ""], +["aligner-h", "aligner-h", 5, ["GAME"], ""], +["penetrate-h", "penetrate-h", 5, ["GAME"], ""], +["game-h", "game-h", 5, ["GAME"], ""], +["script-h", "script-h", 5, ["GAME"], ""], +["scene-h", "scene-h", 5, ["GAME"], ""], +["sync-info-h", "sync-info-h", 5, ["GAME"], ""], +["pov-camera-h", "pov-camera-h", 5, ["GAME"], ""], +["smush-control-h", "smush-control-h", 5, ["GAME"], ""], +["debug-h", "debug-h", 5, ["GAME"], ""], +["joint-mod-h", "joint-mod-h", 5, ["GAME"], ""], +["collide-func-h", "collide-func-h", 5, ["GAME"], ""], +["collide-mesh-h", "collide-mesh-h", 5, ["GAME"], ""], +["collide-shape-h", "collide-shape-h", 5, ["GAME"], ""], +["generic-obs-h", "generic-obs-h", 5, ["GAME"], ""], +["trajectory-h", "trajectory-h", 5, ["GAME"], ""], +["collide-target-h", "collide-target-h", 5, ["GAME"], ""], +["collide-touch-h", "collide-touch-h", 5, ["GAME"], ""], +["collide-edge-grab-h", "collide-edge-grab-h", 5, ["GAME"], ""], +["process-drawable-h", "process-drawable-h", 5, ["GAME"], ""], +["process-focusable", "process-focusable", 5, ["GAME"], ""], +["process-taskable-h", "process-taskable-h", 5, ["GAME"], ""], +["focus", "focus", 5, ["GAME"], ""], +["effect-control-h", "effect-control-h", 5, ["GAME"], ""], +["collide-frag-h", "collide-frag-h", 5, ["GAME"], ""], +["collide-hash-h", "collide-hash-h", 5, ["GAME"], ""], +["water-info-h", "water-info-h", 5, ["GAME"], ""], +["chain-physics-h", "chain-physics-h", 5, ["GAME"], ""], +["ragdoll-h", "ragdoll-h", 5, ["GAME"], ""], +["projectile-h", "projectile-h", 5, ["GAME"], ""], +["find-nearest-h", "find-nearest-h", 5, ["GAME"], ""], +["target-h", "target-h", 5, ["GAME"], ""], +["stats-h", "stats-h", 5, ["GAME"], ""], +["bsp-h", "bsp-h", 5, ["GAME"], ""], +["collide-cache-h", "collide-cache-h", 5, ["GAME"], ""], +["collide-h", "collide-h", 5, ["GAME"], ""], +["shrubbery-h", "shrubbery-h", 5, ["GAME"], ""], +["tie-h", "tie-h", 5, ["GAME"], ""], +["tfrag-h", "tfrag-h", 5, ["GAME"], ""], +["hfrag-h", "hfrag-h", 5, ["GAME"], ""], +["background-h", "background-h", 5, ["GAME"], ""], +["subdivide-h", "subdivide-h", 5, ["GAME"], ""], +["entity-h", "entity-h", 5, ["GAME"], ""], +["sprite-h", "sprite-h", 5, ["GAME"], ""], +["simple-sprite-h", "simple-sprite-h", 5, ["GAME"], ""], +["eye-h", "eye-h", 5, ["GAME"], ""], +["camera-h", "camera-h", 5, ["GAME"], ""], +["cam-interface-h", "cam-interface-h", 5, ["GAME"], ""], +["sparticle-launcher-h", "sparticle-launcher-h", 5, ["GAME"], ""], +["sparticle-h", "sparticle-h", 5, ["GAME"], ""], +["actor-link-h", "actor-link-h", 5, ["GAME"], ""], +["cam-debug-h", "cam-debug-h", 5, ["GAME"], ""], +["cam-update-h", "cam-update-h", 5, ["GAME"], ""], +["hud-h", "hud-h", 5, ["GAME"], ""], +["progress-h", "progress-h", 5, ["GAME"], ""], +["rpc-h", "rpc-h", 5, ["GAME"], ""], +["path-h", "path-h", 5, ["GAME"], ""], +["nav-mesh-h", "nav-mesh-h", 5, ["GAME"], ""], +["nav-control-h", "nav-control-h", 5, ["GAME"], ""], +["spatial-hash-h", "spatial-hash-h", 5, ["GAME"], ""], +["actor-hash-h", "actor-hash-h", 5, ["GAME"], ""], +["rigid-body-h", "rigid-body-h", 5, ["GAME"], ""], +["load-dgo", "load-dgo", 5, ["GAME"], ""], +["ramdisk", "ramdisk", 5, ["GAME"], ""], +["gsound", "gsound", 5, ["GAME"], ""], +["transformq", "transformq", 5, ["GAME"], ""], +["collide-func", "collide-func", 5, ["GAME"], ""], +["joint", "joint", 5, ["GAME"], ""], +["joint-mod", "joint-mod", 5, ["GAME"], ""], +["wind-work", "wind-work", 5, ["GAME"], ""], +["wind", "wind", 5, ["GAME"], ""], +["bsp", "bsp", 5, ["GAME"], ""], +["subdivide", "subdivide", 5, ["GAME"], ""], +["sprite", "sprite", 5, ["GAME"], ""], +["sprite-distort", "sprite-distort", 5, ["GAME"], ""], +["sprite-glow", "sprite-glow", 5, ["GAME"], ""], +["debug-sphere", "debug-sphere", 5, ["GAME"], ""], +["debug", "debug", 5, ["GAME"], ""], +["history", "history", 5, ["GAME"], ""], +["merc-vu1", "merc-vu1", 5, ["GAME"], ""], +["emerc-vu1", "emerc-vu1", 5, ["GAME"], ""], +["merc-blend-shape", "merc-blend-shape", 5, ["GAME"], ""], +["merc", "merc", 5, ["GAME"], ""], +["emerc", "emerc", 5, ["GAME"], ""], +["ripple", "ripple", 5, ["GAME"], ""], +["bones", "bones", 5, ["GAME"], ""], +["debug-foreground", "debug-foreground", 5, ["GAME"], ""], +["foreground", "foreground", 5, ["GAME"], ""], +["generic-vu0", "generic-vu0", 5, ["GAME"], ""], +["generic-vu1", "generic-vu1", 5, ["GAME"], ""], +["generic-effect", "generic-effect", 5, ["GAME"], ""], +["generic-merc", "generic-merc", 5, ["GAME"], ""], +["generic-tie", "generic-tie", 5, ["GAME"], ""], +["shadow-cpu", "shadow-cpu", 5, ["GAME"], ""], +["shadow-vu1", "shadow-vu1", 5, ["GAME"], ""], +["warp", "warp", 5, ["GAME"], ""], +["texture-anim", "texture-anim", 5, ["GAME"], ""], +["texture-anim-funcs", "texture-anim-funcs", 5, ["GAME"], ""], +["texture-anim-tables", "texture-anim-tables", 5, ["GAME"], ""], +["blit-displays", "blit-displays", 5, ["GAME"], ""], +["font-data", "font-data", 5, ["GAME"], ""], +["font", "font", 5, ["GAME"], ""], +["decomp", "decomp", 5, ["GAME"], ""], +["background", "background", 5, ["GAME"], ""], +["draw-node", "draw-node", 5, ["GAME"], ""], +["shrubbery", "shrubbery", 5, ["GAME"], ""], +["shrub-work", "shrub-work", 5, ["GAME"], ""], +["tfrag-near", "tfrag-near", 5, ["GAME"], ""], +["tfrag", "tfrag", 5, ["GAME"], ""], +["tfrag-methods", "tfrag-methods", 5, ["GAME"], ""], +["tfrag-work", "tfrag-work", 5, ["GAME"], ""], +["tie", "tie", 5, ["GAME"], ""], +["etie-vu1", "etie-vu1", 5, ["GAME"], ""], +["etie-near-vu1", "etie-near-vu1", 5, ["GAME"], ""], +["tie-near", "tie-near", 5, ["GAME"], ""], +["tie-work", "tie-work", 5, ["GAME"], ""], +["tie-methods", "tie-methods", 5, ["GAME"], ""], +["prim", "prim", 5, ["GAME"], ""], +["sync-info", "sync-info", 5, ["GAME"], ""], +["trajectory", "trajectory", 5, ["GAME"], ""], +["sparticle-launcher", "sparticle-launcher", 5, ["GAME"], ""], +["sparticle", "sparticle", 5, ["GAME"], ""], +["entity-table", "entity-table", 5, ["GAME"], ""], +["loader", "loader", 5, ["GAME"], ""], +["game-info", "game-info", 5, ["GAME"], ""], +["game-task", "game-task", 5, ["GAME"], ""], +["game-save", "game-save", 5, ["GAME"], ""], +["settings", "settings", 5, ["GAME"], ""], +["mood-tables", "mood-tables", 5, ["GAME"], ""], +["mood-tables2", "mood-tables2", 5, ["GAME"], ""], +["mood", "mood", 5, ["GAME"], ""], +["mood-funcs", "mood-funcs", 5, ["GAME"], ""], +["mood-funcs2", "mood-funcs2", 5, ["GAME"], ""], +["weather-part", "weather-part", 5, ["GAME"], ""], +["time-of-day", "time-of-day", 5, ["GAME"], ""], +["sky-data", "sky-data", 5, ["GAME"], ""], +["sky-tng", "sky-tng", 5, ["GAME"], ""], +["load-state", "load-state", 5, ["GAME"], ""], +["level-info", "level-info", 5, ["GAME"], ""], +["level", "level", 5, ["GAME"], ""], +["text", "text", 5, ["GAME"], ""], +["collide-hash", "collide-hash", 5, ["GAME"], ""], +["collide-probe", "collide-probe", 5, ["GAME"], ""], +["collide-frag", "collide-frag", 5, ["GAME"], ""], +["collide-mesh", "collide-mesh", 5, ["GAME"], ""], +["collide-touch", "collide-touch", 5, ["GAME"], ""], +["collide-edge-grab", "collide-edge-grab", 5, ["GAME"], ""], +["collide-shape", "collide-shape", 5, ["GAME"], ""], +["collide-shape-rider", "collide-shape-rider", 5, ["GAME"], ""], +["collide", "collide", 5, ["GAME"], ""], +["collide-planes", "collide-planes", 5, ["GAME"], ""], +["spatial-hash", "spatial-hash", 5, ["GAME"], ""], +["actor-hash", "actor-hash", 5, ["GAME"], ""], +["merc-death", "merc-death", 5, ["GAME"], ""], +["water-h", "water-h", 5, ["GAME"], ""], +["camera", "camera", 5, ["GAME"], ""], +["cam-interface", "cam-interface", 5, ["GAME"], ""], +["cam-master", "cam-master", 5, ["GAME"], ""], +["cam-states", "cam-states", 5, ["GAME"], ""], +["cam-states-dbg", "cam-states-dbg", 5, ["GAME"], ""], +["cam-combiner", "cam-combiner", 5, ["GAME"], ""], +["cam-update", "cam-update", 5, ["GAME"], ""], +["vol-h", "vol-h", 5, ["GAME"], ""], +["cam-layout", "cam-layout", 5, ["GAME"], ""], +["cam-debug", "cam-debug", 5, ["GAME"], ""], +["cam-start", "cam-start", 5, ["GAME"], ""], +["cloth-h", "cloth-h", 5, ["GAME"], ""], +["cloth", "cloth", 5, ["GAME"], ""], +["process-drawable", "process-drawable", 5, ["GAME"], ""], +["curves", "curves", 5, ["GAME"], ""], +["ambient", "ambient", 5, ["GAME"], ""], +["speech", "speech", 5, ["GAME"], ""], +["region", "region", 5, ["GAME"], ""], +["fma-sphere", "fma-sphere", 5, ["GAME"], ""], +["prim-beam-h", "prim-beam-h", 5, ["GAME"], ""], +["generic-obs", "generic-obs", 5, ["GAME"], ""], +["lightning", "lightning", 5, ["GAME"], ""], +["light-trails-h", "light-trails-h", 5, ["GAME"], ""], +["lightning-new-h", "lightning-new-h", 5, ["GAME"], ""], +["particle-curves", "particle-curves", 5, ["GAME"], ""], +["light-trails", "light-trails", 5, ["GAME"], ""], +["lightning-new", "lightning-new", 5, ["GAME"], ""], +["carry-h", "carry-h", 5, ["GAME"], ""], +["pilot-h", "pilot-h", 5, ["GAME"], ""], +["lightjak-h", "lightjak-h", 5, ["GAME"], ""], +["gun-h", "gun-h", 5, ["GAME"], ""], +["board-h", "board-h", 5, ["GAME"], ""], +["darkjak-h", "darkjak-h", 5, ["GAME"], ""], +["indax-h", "indax-h", 5, ["GAME"], ""], +["flut-h", "flut-h", 5, ["GAME"], ""], +["target-util", "target-util", 5, ["GAME"], ""], +["target-part", "target-part", 5, ["GAME"], ""], +["gun-part", "gun-part", 5, ["GAME"], ""], +["collide-reaction-target", "collide-reaction-target", 5, ["GAME"], ""], +["logic-target", "logic-target", 5, ["GAME"], ""], +["sidekick", "sidekick", 5, ["GAME"], ""], +["voicebox", "voicebox", 5, ["GAME"], ""], +["collectables-part", "collectables-part", 5, ["GAME"], ""], +["debug-part", "debug-part", 5, ["GAME"], ""], +["find-nearest", "find-nearest", 5, ["GAME"], ""], +["task-arrow", "task-arrow", 5, ["GAME"], ""], +["projectile", "projectile", 5, ["GAME"], ""], +["ragdoll", "ragdoll", 5, ["GAME"], ""], +["lightjak-wings", "lightjak-wings", 5, ["GAME"], ""], +["target-handler", "target-handler", 5, ["GAME"], ""], +["target-anim", "target-anim", 5, ["GAME"], ""], +["target", "target", 5, ["GAME"], ""], +["target2", "target2", 5, ["GAME"], ""], +["target-swim", "target-swim", 5, ["GAME"], ""], +["target-darkjak", "target-darkjak", 5, ["GAME"], ""], +["target-lightjak", "target-lightjak", 5, ["GAME"], ""], +["target-invisible", "target-invisible", 5, ["GAME"], ""], +["target-launch", "target-launch", 5, ["GAME"], ""], +["target-death", "target-death", 5, ["GAME"], ""], +["target-gun", "target-gun", 5, ["GAME"], ""], +["gun-util", "gun-util", 5, ["GAME"], ""], +["gun-blue-shot", "gun-blue-shot", 5, ["GAME"], ""], +["gun-yellow-shot", "gun-yellow-shot", 5, ["GAME"], ""], +["gun-red-shot", "gun-red-shot", 5, ["GAME"], ""], +["gun-dark-shot", "gun-dark-shot", 5, ["GAME"], ""], +["board-util", "board-util", 5, ["GAME"], ""], +["target-board", "target-board", 5, ["GAME"], ""], +["board-part", "board-part", 5, ["GAME"], ""], +["board-states", "board-states", 5, ["GAME"], ""], +["mech-h", "mech-h", 5, ["GAME"], ""], +["menu", "menu", 5, ["GAME"], ""], +["drawable", "drawable", 5, ["GAME"], ""], +["drawable-group", "drawable-group", 5, ["GAME"], ""], +["drawable-inline-array", "drawable-inline-array", 5, ["GAME"], ""], +["drawable-tree", "drawable-tree", 5, ["GAME"], ""], +["prototype", "prototype", 5, ["GAME"], ""], +["main-collide", "main-collide", 5, ["GAME"], ""], +["video", "video", 5, ["GAME"], ""], +["main", "main", 5, ["GAME"], ""], +["collide-cache", "collide-cache", 5, ["GAME"], ""], +["collide-debug", "collide-debug", 5, ["GAME"], ""], +["relocate", "relocate", 5, ["GAME"], ""], +["memory-usage", "memory-usage", 5, ["GAME"], ""], +["entity", "entity", 5, ["GAME"], ""], +["path", "path", 5, ["GAME"], ""], +["vol", "vol", 5, ["GAME"], ""], +["nav-engine", "nav-engine", 5, ["GAME"], ""], +["nav-mesh", "nav-mesh", 5, ["GAME"], ""], +["nav-control", "nav-control", 5, ["GAME"], ""], +["aligner", "aligner", 5, ["GAME"], ""], +["effect-control", "effect-control", 5, ["GAME"], ""], +["water-part", "water-part", 5, ["GAME"], ""], +["water", "water", 5, ["GAME"], ""], +["water-flow", "water-flow", 5, ["GAME"], ""], +["gem-pool", "gem-pool", 5, ["GAME"], ""], +["collectables", "collectables", 5, ["GAME"], ""], +["vent", "vent", 5, ["GAME"], ""], +["task-control", "task-control", 5, ["GAME"], ""], +["scene", "scene", 5, ["GAME"], ""], +["pov-camera", "pov-camera", 5, ["GAME"], ""], +["powerups", "powerups", 5, ["GAME"], ""], +["crates", "crates", 5, ["GAME"], ""], +["hud", "hud", 5, ["GAME"], ""], +["hud-classes", "hud-classes", 5, ["GAME"], ""], +["secrets-menu", "secrets-menu", 5, ["GAME"], ""], +["progress-static", "progress-static", 5, ["GAME"], ""], +["progress", "progress", 5, ["GAME"], ""], +["progress-draw", "progress-draw", 5, ["GAME"], ""], +["ocean", "ocean", 5, ["GAME"], ""], +["ocean-vu0", "ocean-vu0", 5, ["GAME"], ""], +["ocean-texture", "ocean-texture", 5, ["GAME"], ""], +["ocean-mid", "ocean-mid", 5, ["GAME"], ""], +["ocean-transition", "ocean-transition", 5, ["GAME"], ""], +["ocean-near", "ocean-near", 5, ["GAME"], ""], +["minimap", "minimap", 5, ["GAME"], ""], +["bigmap", "bigmap", 5, ["GAME"], ""], +["eye", "eye", 5, ["GAME"], ""], +["glist-h", "glist-h", 5, ["GAME"], ""], +["glist", "glist", 5, ["GAME"], ""], +["anim-tester", "anim-tester", 5, ["GAME"], ""], +["viewer", "viewer", 5, ["GAME"], ""], +["part-tester", "part-tester", 5, ["GAME"], ""], +["editable-h", "editable-h", 5, ["GAME"], ""], +["editable", "editable", 5, ["GAME"], ""], +["editable-player", "editable-player", 5, ["GAME"], ""], +["mysql-nav-graph", "mysql-nav-graph", 5, ["GAME"], ""], +["nav-graph-editor", "nav-graph-editor", 5, ["GAME"], ""], +["nav-mesh-editor-h", "nav-mesh-editor-h", 5, ["GAME"], ""], +["nav-mesh-editor", "nav-mesh-editor", 5, ["GAME"], ""], +["bug-report", "bug-report", 5, ["GAME"], ""], +["sampler", "sampler", 5, ["GAME"], ""], +["default-menu", "default-menu", 5, ["GAME"], ""], +["visvol-edit", "visvol-edit", 5, ["GAME"], ""], +["collision-editor", "collision-editor", 5, ["GAME"], ""], +["speech-manager", "speech-manager", 5, ["GAME"], ""], +["dir-tpages", "dir-tpages", 5, ["GAME"], ""], +["tpage-1", "tpage-1", 5, ["GAME"], ""], +["tpage-2", "tpage-2", 5, ["GAME"], ""], +["tpage-3", "tpage-3", 5, ["GAME"], ""], +["texture-upload", "texture-upload", 5, ["GAME"], ""], +["tpage-4", "tpage-4", 5, ["GAME"], ""], +["tpage-6", "tpage-6", 5, ["GAME"], ""], +["tpage-7", "tpage-7", 5, ["GAME"], ""], +["tpage-5", "tpage-5", 5, ["GAME"], ""], +["tpage-8", "tpage-8", 5, ["GAME"], ""], +["tpage-9", "tpage-9", 5, ["GAME"], ""], +["tpage-10", "tpage-10", 5, ["GAME"], ""], +["tpage-11", "tpage-11", 5, ["GAME"], ""], +["tpage-12", "tpage-12", 5, ["GAME"], ""], +["texture-finish", "texture-finish", 5, ["GAME"], ""], +["collectables-ag", "collectables", 5, ["GAME"], ""], +["crate-ag", "crate", 5, ["GAME"], ""], +["talk-box-ag", "talk-box", 5, ["GAME"], ""], +["scenecamera-ag", "scenecamera", 5, ["GAME"], ""], +["hud-ring-ag", "hud-ring", 5, ["GAME"], ""], +["jakb-ag", "jakb", 5, ["GAME"], ""], +["daxter-ag", "daxter", 5, ["GAME"], ""], +["board-ag", "board", 5, ["GAME"], ""], +["gun-ag", "gun", 5, ["GAME"], ""], +["jak-gun+0-ag", "jak-gun+0", 5, ["GAME"], ""], +["jak-board+0-ag", "jak-board+0", 5, ["GAME"], ""], +["jak-dark+0-ag", "jak-dark+0", 5, ["GAME"], ""], +["jak-light+0-ag", "jak-light+0", 5, ["GAME"], ""], +["jak-swim+0-ag", "jak-swim+0", 5, ["GAME"], ""], +["blocking-plane-ag", "blocking-plane", 5, ["GAME", "RAILD", "RUBA"], ""], +["com-rod-of-god-ag", "com-rod-of-god", 5, ["GAME"], ""], +["los-control-h", "los-control-h", 5, ["GAME"], ""], +["airlock", "airlock", 5, ["GAME"], ""], +["water-anim", "water-anim", 5, ["GAME"], ""], +["blocking-plane", "blocking-plane", 5, ["GAME"], ""], +["idle-control", "idle-control", 5, ["GAME"], ""], +["proc-focusable-spawner", "proc-focusable-spawner", 5, ["GAME"], ""], +["enemy-h", "enemy-h", 5, ["GAME"], ""], +["nav-enemy-h", "nav-enemy-h", 5, ["GAME"], ""], +["enemy", "enemy", 5, ["GAME"], ""], +["enemy-states", "enemy-states", 5, ["GAME"], ""], +["nav-enemy", "nav-enemy", 5, ["GAME"], ""], +["base-plat", "base-plat", 5, ["GAME"], ""], +["plat", "plat", 5, ["GAME"], ""], +["bouncer", "bouncer", 5, ["GAME"], ""], +["elevator", "elevator", 5, ["GAME"], ""], +["rigid-body", "rigid-body", 5, ["GAME"], ""], +["rigid-body-queue", "rigid-body-queue", 5, ["GAME"], ""], +["joint-exploder", "joint-exploder", 5, ["GAME"], ""], +["simple-nav-sphere", "simple-nav-sphere", 5, ["GAME"], ""], +["process-taskable", "process-taskable", 5, ["GAME"], ""], +["scene-actor", "scene-actor", 5, ["GAME"], ""], +["warp-gate", "warp-gate", 5, ["GAME"], ""], +["guard-projectile", "guard-projectile", 5, ["GAME"], ""], +["metalhead-projectile", "metalhead-projectile", 5, ["GAME"], ""], +["los-control", "los-control", 5, ["GAME"], ""], +["enemy-part", "enemy-part", 5, ["GAME"], ""], +["ragdoll-test", "ragdoll-test", 5, ["GAME"], ""], +["debris", "debris", 5, ["GAME"], ""], +["shield-sphere", "shield-sphere", 5, ["GAME"], ""], +["tpage-1539", "tpage-1539", 5, ["LJKDMPK"], ""], +["tpage-1540", "tpage-1540", 5, ["LJKDMPK"], ""], +["pecker-highres-ag", "pecker-highres", 5, ["LJKDMPK", "INTROCST", "FREECAST", "OUTROCST", "ONINTENT", "LDAMPECK", "LDMPCKGN", "RUBA", "LWSTDPCK", "MUSEUM", "LDAMPKSM", "ARENACST", "COMBA"], ""], +["jakc-highres-ag", "jakc-highres", 5, ["LJKDMPK", "OASISCST", "TEMA", "LJKDXVIN", "SEA", "WSD", "GRIDCST", "LJAKC", "LVINCST", "COMBX", "SLUMBSET", "FACTORYA", "DESBCST", "MIA", "OUTROCST", "WASCAST", "DESBOSS1", "FREEHQ", "LFORP", "ONINTENT", "FACB", "LTOWB", "LNSTCST", "TOWERCST", "PRECD", "HHG", "CGB", "STB", "LWSTDPCK", "MUSEUM", "LJAKCKLV", "LJKCDMKL", "DESTRACK", "GGA", "LDESGCST", "WARPCAST", "CITYCAST", "RAILCST", "LJNDKLEV", "MINEE", "DESRESCC", "LSIGJAKC", "DESLIZ", "LJAKNDAX", "WASSEEM", "MINED", "VOCX", "ARENACST", "COMBA", "DESHOVER", "DESBOSS2"], ""], +["king-highres-ag", "king-highres", 5, ["LJKDMPK", "INTROCST", "LDAMKLEV", "RBCT", "WASCAST", "MUSEUM2", "LDAMPECK", "LDMPCKGN", "RUBA", "LJKCDMKL", "LDAMSIG", "WASPALA", "LDAMPKSM", "ARENACST"], ""], +["ljkdmpk", "ljkdmpk", 5, ["LJKDMPK"], ""], +["des-bush-part", "des-bush-part", 5, ["LBBSDRP1", "LBBRING3", "LBBRING4", "LBBSDRP2", "LBBRING2", "LBBSPIRT", "LBBSPID", "LBBRING5", "LBBSPRT3", "LBBSPRT2", "LBBRING1", "LBBRING6", "LBBSDRP3"], ""], +["des-bush", "des-bush", 5, ["LBBSDRP1", "LBBRING3", "LBBRING4", "LBBSDRP2", "LBBRING2", "LBBSPIRT", "LBBSPID", "LBBRING5", "LBBSPRT3", "LBBSPRT2", "LBBRING1", "LBBRING6", "LBBSDRP3"], ""], +["tpage-3328", "tpage-3328", 5, ["LBBSDRP1"], ""], +["lbbsdrp1", "lbbsdrp1", 5, ["LBBSDRP1"], ""], +["tpage-2355", "tpage-2355", 5, ["LTNJXHIP"], ""], +["tpage-2049", "tpage-2049", 5, ["LTNJXHIP"], ""], +["tpage-2048", "tpage-2048", 5, ["LTNJXHIP"], ""], +["torn-highres-ag", "torn-highres", 5, ["LTNJXHIP", "LTNFXHIP", "LTORNJNX", "FREEHQ", "LTORN", "LTORNSAM", "TOWERCST", "MUSEUM", "CITYCAST"], ""], +["jinx-highres-ag", "jinx-highres", 5, ["LTNJXHIP", "GRIDCST", "LTORNJNX", "TOWERCST", "MUSEUM2"], ""], +["purple-one-ag", "purple-one", 5, ["LTNJXHIP"], ""], +["blue-gun-mod-three-ag", "blue-gun-mod-three", 5, ["LTNJXHIP", "GRIDCST"], ""], +["cty-remote-ag", "cty-remote", 5, ["LTNJXHIP"], ""], +["ltnjxhip", "ltnjxhip", 5, ["LTNJXHIP"], ""], +["grunt", "grunt", 5, ["MIC"], ""], +["tpage-930", "tpage-930", 5, ["MIC"], ""], +["tpage-932", "tpage-932", 5, ["MIC"], ""], +["tpage-931", "tpage-931", 5, ["MIC"], ""], +["kg-grunt-ag", "kg-grunt", 5, ["MIC", "FACD", "SEB", "LFACRM2", "SEC", "SEE", "POWERGD"], ""], +["pecker-ingame-ag", "pecker-ingame", 5, ["MIC", "COMBX", "MIA"], ""], +["grunt-ag", "grunt", 5, ["MIC", "POWERGD"], ""], +["gekko-ag", "gekko", 5, ["MIC", "WCB", "WCA"], ""], +["min-door-break-ag", "min-door-break", 5, ["MIC"], ""], +["manta-ag", "manta", 5, ["MIC", "MIB"], ""], +["min-falling-elevator-ag", "min-falling-elevator", 5, ["MIC"], ""], +["min-moving-step-ag", "min-moving-step", 5, ["MIC"], ""], +["min-target-sign-ag", "min-target-sign", 5, ["MIC"], ""], +["min-falling-step-ag", "min-falling-step", 5, ["MIC"], ""], +["min-door-ag", "min-door", 5, ["MIC"], ""], +["light-eco-vent-ag", "light-eco-vent", 5, ["MIC", "LTOWA", "LPRECC", "DESW", "TEMD", "WCA", "STA", "HALFPIPE", "MIB", "LPTRL", "TEMB"], ""], +["minec-vis", "minec-vis", 5, ["MIC"], ""], +["tpage-1600", "tpage-1600", 5, ["OASISCST"], ""], +["tpage-1601", "tpage-1601", 5, ["OASISCST"], ""], +["daxter-highres-ag", "daxter-highres", 5, ["OASISCST", "TEMA", "LJKDXVIN", "SEA", "WSD", "GRIDCST", "LVINCST", "COMBX", "MHCTYCST", "INTROCST", "SLUMBSET", "FACTORYA", "DESBCST", "MIA", "RBCT", "WASCAST", "DESBOSS1", "FREEHQ", "LFORP", "TOWERC", "MUSEUM3", "ONINTENT", "STA", "FACB", "LNSTCST", "TOWERCST", "PRECD", "HHG", "RUBA", "DESTRACK", "GGA", "LOUTRO", "LDESGCST", "WARPCAST", "CITYCAST", "RAILCST", "LJNDKLEV", "MINEE", "DESRESCC", "DESLIZ", "WASPALA", "LJAKNDAX", "WASSEEM", "MINED", "VOCX", "ARENACST", "COMBA", "LPATKCS", "LDAX", "DESHOVER", "DESBOSS2"], ""], +["ashelin-highres-ag", "ashelin-highres", 5, ["OASISCST", "INTROCST", "FREECAST", "DESBCST", "DESOASIS", "OUTROCST", "MUSEUM", "LASHELIN"], ""], +["interceptor-wheel-fma-ag", "interceptor-wheel-fma", 5, ["OASISCST", "WSD"], ""], +["kidmedallion-ag", "kidmedallion", 5, ["OASISCST", "TEMA", "RBCT", "COMBA"], ""], +["particleman-ag", "particleman", 5, ["OASISCST", "LPRENME", "TEMA", "LJKDXVIN", "SEA", "WSD", "GRIDCST", "LVINCST", "MHCTYCST", "INTROCST", "DESG", "FACTORYA", "DESBCST", "RBCT", "OUTROCST", "WASCAST", "DESBOSS1", "FACB", "LTOWB", "TOWERCST", "PRECD", "FRSTA", "HHG", "RUBA", "GGA", "WARPCAST", "CITYCAST", "RAILCST", "DESLIZ", "WASPALA", "WASSEEM", "MINED", "VOCX", "COMBA", "LPATKCS", "DESHOVER", "DESBOSS2"], ""], +["oasiscst", "oasiscst", 5, ["OASISCST"], ""], +["tpage-956", "tpage-956", 5, ["CTYPEPA"], ""], +["citizen-fat-ag", "citizen-fat", 5, ["CTYPEPA"], ""], +["citizen-norm-ag", "citizen-norm", 5, ["CTYPEPA", "LCTYASS"], ""], +["citizen-chick-ag", "citizen-chick", 5, ["CTYPEPA"], ""], +["ctypepa", "ctypepa", 5, ["CTYPEPA"], ""], +["tpage-2956", "tpage-2956", 5, ["LPRENME"], ""], +["neo-wasp-b-ag", "neo-wasp-b", 5, ["LPRENME", "TOWB", "LFORM", "FACD", "LPATK", "TOWERA"], ""], +["dm-ship-break-ag", "dm-ship-break", 5, ["LPRENME", "PRECD"], ""], +["dm-ship-tent-brk-ag", "dm-ship-tent-brk", 5, ["LPRENME", "PRECD"], ""], +["neo-debris-ag", "neo-debris", 5, ["LPRENME", "TOWB", "LFORM", "FACD", "LPATK", "TOWERA"], ""], +["lprenme", "lprenme", 5, ["LPRENME"], ""], +["tpage-3158", "tpage-3158", 5, ["LFREEOUT"], ""], +["lfreeout", "lfreeout", 5, ["LFREEOUT"], ""], +["tpage-3139", "tpage-3139", 5, ["LGUNNORM"], ""], +["tpage-3170", "tpage-3170", 5, ["LGUNNORM"], ""], +["gun-kg-target-ag", "gun-kg-target", 5, ["LGUNNORM"], ""], +["gun-kg-target-bonus-ag", "gun-kg-target-bonus", 5, ["LGUNNORM"], ""], +["gun-kg-bomb-ag", "gun-kg-bomb", 5, ["LGUNNORM"], ""], +["gun-kg-target-c-ag", "gun-kg-target-c", 5, ["LGUNNORM"], ""], +["gun-cit-d-ag", "gun-cit-d", 5, ["LGUNNORM"], ""], +["gun-kg-target-d-ag", "gun-kg-target-d", 5, ["LGUNNORM"], ""], +["gun-cit-a-ag", "gun-cit-a", 5, ["LGUNNORM"], ""], +["gun-kg-target-b-ag", "gun-kg-target-b", 5, ["LGUNNORM"], ""], +["gun-cit-b-ag", "gun-cit-b", 5, ["LGUNNORM"], ""], +["gun-cit-c-ag", "gun-cit-c", 5, ["LGUNNORM"], ""], +["lgunnorm", "lgunnorm", 5, ["LGUNNORM"], ""], +["tpage-2644", "tpage-2644", 5, ["LTOWA"], ""], +["tpage-2910", "tpage-2910", 5, ["LTOWA"], ""], +["tpage-2645", "tpage-2645", 5, ["LTOWA"], ""], +["tpage-2646", "tpage-2646", 5, ["LTOWA"], ""], +["tpage-3248", "tpage-3248", 5, ["LTOWA"], ""], +["tow-large-plat-ag", "tow-large-plat", 5, ["LTOWA", "TOWB"], ""], +["tow-spawner-ag", "tow-spawner", 5, ["LTOWA", "TOWB", "TOWERCST"], ""], +["tow-tentacle-ag", "tow-tentacle", 5, ["LTOWA", "TOWB"], ""], +["ltowera-vis", "ltowera-vis", 5, ["LTOWA"], ""], +["jak-pole+0-ag", "jak-pole+0", 5, ["TEMA", "HALFPIPE", "PRECC"], ""], +["battle", "battle", 5, ["TEMA", "SEA", "LFORM", "LBIPED", "TOWERA"], ""], +["hover-formation-h", "hover-formation-h", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["hover-nav-control-h", "hover-nav-control-h", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["hover-enemy-h", "hover-enemy-h", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["hover-nav-control", "hover-nav-control", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["hover-enemy", "hover-enemy", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["hover-formation", "hover-formation", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["hover-nav-edit", "hover-nav-edit", 5, ["TEMA", "SEA", "FACC", "LFORM", "FACD", "LPATK", "TOWERA", "PRECA", "VOCA"], ""], +["dp-bipedal-part", "dp-bipedal-part", 5, ["TEMA", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["dp-bipedal-shot", "dp-bipedal-shot", 5, ["TEMA", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["dp-bipedal", "dp-bipedal", 5, ["TEMA", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["hover-nav-templea", "hover-nav-templea", 5, ["TEMA"], ""], +["temple-part", "temple-part", 5, ["TEMA"], ""], +["temple-obs", "temple-obs", 5, ["TEMA"], ""], +["temple-scenes", "temple-scenes", 5, ["TEMA"], ""], +["temple-obs2", "temple-obs2", 5, ["TEMA"], ""], +["temple-mood", "temple-mood", 5, ["TEMA"], ""], +["templea-texture", "templea-texture", 5, ["TEMA"], ""], +["hover-training", "hover-training", 5, ["TEMA"], ""], +["tomb-baby-spider", "tomb-baby-spider", 5, ["TEMA"], ""], +["flamer-hover", "flamer-hover", 5, ["TEMA"], ""], +["tpage-2616", "tpage-2616", 5, ["TEMA"], ""], +["tpage-2621", "tpage-2621", 5, ["TEMA"], ""], +["tpage-2618", "tpage-2618", 5, ["TEMA"], ""], +["tpage-3057", "tpage-3057", 5, ["TEMA"], ""], +["tpage-2615", "tpage-2615", 5, ["TEMA"], ""], +["tpage-2688", "tpage-2688", 5, ["TEMA"], ""], +["tpage-2624", "tpage-2624", 5, ["TEMA"], ""], +["tpage-3043", "tpage-3043", 5, ["TEMA"], ""], +["dp-bipedal-ag", "dp-bipedal", 5, ["TEMA", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["flamer-lava-ag", "flamer-lava", 5, ["TEMA", "VOCA"], ""], +["tomb-baby-spider-ag", "tomb-baby-spider", 5, ["TEMA"], ""], +["tpl-break-door-a-ag", "tpl-break-door-a", 5, ["TEMA"], ""], +["tpl-holo-eye-ag", "tpl-holo-eye", 5, ["TEMA"], ""], +["tpl-spike-trap-ag", "tpl-spike-trap", 5, ["TEMA"], ""], +["tpl-outer-airlock-door-ag", "tpl-outer-airlock-door", 5, ["TEMA"], ""], +["tpl-watcher-ag", "tpl-watcher", 5, ["TEMA"], ""], +["tpl-door-a-ag", "tpl-door-a", 5, ["TEMA"], ""], +["dark-eco-vent-ag", "dark-eco-vent", 5, ["TEMA", "DESW", "TEMD", "HALFPIPE", "LPTRL", "TEMB"], ""], +["tpl-door-switch-ag", "tpl-door-switch", 5, ["TEMA"], ""], +["tpl-mardoor-ag", "tpl-mardoor", 5, ["TEMA"], ""], +["dark-maker-idol-ag", "dark-maker-idol", 5, ["TEMA", "HALFPIPE", "VOCX"], ""], +["warp-gate-ag", "warp-gate", 5, ["TEMA", "VIN", "VOCX"], ""], +["jakc-wings-ag", "jakc-wings", 5, ["TEMA", "PRECD"], ""], +["urn-b-ag", "urn-b", 5, ["TEMA", "HALFPIPE", "WASPALA"], ""], +["urn-c-ag", "urn-c", 5, ["TEMA", "WCA", "HALFPIPE", "WASPALA", "VOCX"], ""], +["shield-sphere-explode-ag", "shield-sphere-explode", 5, ["TEMA", "CTYPESA", "PRECB", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["tpl-banner-ag", "tpl-banner", 5, ["TEMA"], ""], +["urn-a-ag", "urn-a", 5, ["TEMA", "WCA", "WASSTADA", "HALFPIPE", "WASPALA", "VOCX"], ""], +["tpl-bouncer-ag", "tpl-bouncer", 5, ["TEMA"], ""], +["shield-sphere-distort-ag", "shield-sphere-distort", 5, ["TEMA", "CTYPESA", "PRECB", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["tpl-oracle-eye-ag", "tpl-oracle-eye", 5, ["TEMA", "TEMB"], ""], +["shield-sphere-ag", "shield-sphere", 5, ["TEMA", "CTYPESA", "PRECB", "LFORM", "FACD", "LBIPED", "LPATK", "TOWERA", "PRECA"], ""], +["templea-vis", "templea-vis", 5, ["TEMA"], ""], +["des-burning-bush", "des-burning-bush", 5, ["CTA", "WASALL"], ""], +["ctysluma-part", "ctysluma-part", 5, ["CTA"], ""], +["neon-baron-part", "neon-baron-part", 5, ["CTA"], ""], +["tpage-136", "tpage-136", 5, ["CTA"], ""], +["tpage-135", "tpage-135", 5, ["CTA"], ""], +["tpage-133", "tpage-133", 5, ["CTA"], ""], +["tpage-131", "tpage-131", 5, ["CTA"], ""], +["des-burning-bush-ag", "des-burning-bush", 5, ["CTA", "WWD", "DST"], ""], +["ctysluma-vis", "ctysluma-vis", 5, ["CTA"], ""], +["tpage-2944", "tpage-2944", 5, ["LPRECC"], ""], +["tpage-2964", "tpage-2964", 5, ["LPRECC"], ""], +["tpage-3251", "tpage-3251", 5, ["LPRECC"], ""], +["precur-door-c-ag", "precur-door-c", 5, ["LPRECC"], ""], +["precur-door-a-ag", "precur-door-a", 5, ["LPRECC", "PRECA", "PRECD", "PRECC"], ""], +["precur-swingpole-pop-ag", "precur-swingpole-pop", 5, ["LPRECC", "PRECC"], ""], +["lprecurc-vis", "lprecurc-vis", 5, ["LPRECC"], ""], +["tpage-2601", "tpage-2601", 5, ["LJKDXVIN"], ""], +["tpage-2602", "tpage-2602", 5, ["LJKDXVIN"], ""], +["vin-effect-ag", "vin-effect", 5, ["LJKDXVIN", "LVINCST"], ""], +["ljkdxvin", "ljkdxvin", 5, ["LJKDXVIN"], ""], +["ctypepc", "ctypepc", 5, ["CTYPEPC"], ""], +["chain-physics", "chain-physics", 5, ["SEA", "VOCA"], ""], +["jump-pad", "jump-pad", 5, ["SEA", "FRSTA"], ""], +["roboguard", "roboguard", 5, ["SEA", "FACC", "FACD"], ""], +["robo-hover", "robo-hover", 5, ["SEA", "FACC", "FACD"], ""], +["kg-grunt", "kg-grunt", 5, ["SEA", "FACTORYA"], ""], +["hover-nav-sewb", "hover-nav-sewb", 5, ["SEA"], ""], +["hover-nav-sewg", "hover-nav-sewg", 5, ["SEA"], ""], +["hover-nav-sewl", "hover-nav-sewl", 5, ["SEA"], ""], +["hover-nav-sewo", "hover-nav-sewo", 5, ["SEA"], ""], +["hover-nav-sewj", "hover-nav-sewj", 5, ["SEA"], ""], +["sewer-part", "sewer-part", 5, ["SEA"], ""], +["sewer-mood", "sewer-mood", 5, ["SEA"], ""], +["sew-laser-guard", "sew-laser-guard", 5, ["SEA"], ""], +["sewer-obs", "sewer-obs", 5, ["SEA"], ""], +["sewer-obs2", "sewer-obs2", 5, ["SEA"], ""], +["sewer-move-turret", "sewer-move-turret", 5, ["SEA"], ""], +["sewer-scenes", "sewer-scenes", 5, ["SEA"], ""], +["sew-laser-turret", "sew-laser-turret", 5, ["SEA"], ""], +["sew-platforms", "sew-platforms", 5, ["SEA"], ""], +["sew-whirlpool", "sew-whirlpool", 5, ["SEA"], ""], +["saberfish", "saberfish", 5, ["SEA"], ""], +["saberfish-spawner", "saberfish-spawner", 5, ["SEA"], ""], +["needle-fish", "needle-fish", 5, ["SEA"], ""], +["sewer-frog", "sewer-frog", 5, ["SEA"], ""], +["spydroid-orig", "spydroid-orig", 5, ["SEA", "FACTORYA"], ""], +["flyingsaw", "flyingsaw", 5, ["SEA"], ""], +["sewer-texture", "sewer-texture", 5, ["SEA"], ""], +["kg-hopper", "kg-hopper", 5, ["SEA"], ""], +["neo-grenadier", "neo-grenadier", 5, ["SEA"], ""], +["neo-juicer", "neo-juicer", 5, ["SEA"], ""], +["mh-wasp-part", "mh-wasp-part", 5, ["SEA"], ""], +["mh-wasp", "mh-wasp", 5, ["SEA"], ""], +["tpage-740", "tpage-740", 5, ["SEA"], ""], +["tpage-741", "tpage-741", 5, ["SEA"], ""], +["tpage-800", "tpage-800", 5, ["SEA"], ""], +["tpage-1411", "tpage-1411", 5, ["SEA"], ""], +["roboguard-ag", "roboguard", 5, ["SEA", "FACD", "FACTORYA", "LFACRM2"], ""], +["saberfish-ag", "saberfish", 5, ["SEA"], ""], +["sewer-frog-ag", "sewer-frog", 5, ["SEA"], ""], +["com-airlock-inner-ag", "com-airlock-inner", 5, ["SEA", "SEJ", "SEG", "FRSTX", "SEB", "SEK", "CFA", "SEO", "SEL", "SEF", "SEN", "MINEE", "MINED"], ""], +["sew-elevator-ag", "sew-elevator", 5, ["SEA", "MINEE"], ""], +["kg-debris-ag", "kg-debris", 5, ["SEA", "SEJ", "CTYPESC", "SEH", "FACD", "SEG", "SEB", "LBOMBBOT", "LFACRM2", "SEC", "SEE", "LCTYASS", "LBLOWTKG", "SED"], ""], +["sewa-vis", "sewa-vis", 5, ["SEA"], ""], +["tpage-2599", "tpage-2599", 5, ["COMBE"], ""], +["combe", "combe", 5, ["COMBE"], ""], +["tpage-957", "tpage-957", 5, ["CTYPESA"], ""], +["crimson-guard-ag", "crimson-guard", 5, ["CTYPESA", "FRSTB"], ""], +["ctypesa", "ctypesa", 5, ["CTYPESA"], ""], +["bombbot-h", "bombbot-h", 5, ["LBLOWCST", "FACD", "LBOMBBOT", "LCTYASS", "LCTYPALT"], ""], +["bombbot-path", "bombbot-path", 5, ["LBLOWCST", "FACD", "LBOMBBOT", "LCTYASS", "LCTYPALT"], ""], +["bombbot", "bombbot", 5, ["LBLOWCST", "FACD", "LBOMBBOT", "LCTYASS", "LCTYPALT"], ""], +["tpage-3368", "tpage-3368", 5, ["LBLOWCST"], ""], +["tpage-3032", "tpage-3032", 5, ["LBLOWCST"], ""], +["tpage-3033", "tpage-3033", 5, ["LBLOWCST"], ""], +["tpage-3276", "tpage-3276", 5, ["LBLOWCST"], ""], +["tpage-3094", "tpage-3094", 5, ["LBLOWCST"], ""], +["bt-torn-ag", "bt-torn", 5, ["LBLOWCST"], ""], +["bt-sig-ag", "bt-sig", 5, ["LBLOWCST"], ""], +["bt-jinx-ag", "bt-jinx", 5, ["LBLOWCST"], ""], +["cty-explode-barrel-ag", "cty-explode-barrel", 5, ["LBLOWCST"], ""], +["lblowcst", "lblowcst", 5, ["LBLOWCST"], ""], +["wasdoors-init", "wasdoors-init", 5, ["WSD"], ""], +["wasdoors-scenes", "wasdoors-scenes", 5, ["WSD"], ""], +["tpage-647", "tpage-647", 5, ["WSD"], ""], +["tpage-1322", "tpage-1322", 5, ["WSD"], ""], +["tpage-648", "tpage-648", 5, ["WSD"], ""], +["tpage-1696", "tpage-1696", 5, ["WSD"], ""], +["wascity-airlock-ag", "wascity-airlock", 5, ["WSD", "DESB"], ""], +["wascity-airlock-small-ag", "wascity-airlock-small", 5, ["WSD", "WCA"], ""], +["wasdoors-vis", "wasdoors-vis", 5, ["WSD"], ""], +["tpage-2859", "tpage-2859", 5, ["LBBRING3"], ""], +["lbbring3", "lbbring3", 5, ["LBBRING3"], ""], +["h-torpedo", "h-torpedo", 5, ["LCTYPATK"], ""], +["ctyport-attack", "ctyport-attack", 5, ["LCTYPATK"], ""], +["ctyport-attack-bbush", "ctyport-attack-bbush", 5, ["LCTYPATK"], ""], +["jak-pidax+0-ag", "jak-pidax+0", 5, ["LCTYPATK"], ""], +["tpage-1523", "tpage-1523", 5, ["LCTYPATK"], ""], +["tpage-1899", "tpage-1899", 5, ["LCTYPATK"], ""], +["krimson-wall-break-ag", "krimson-wall-break", 5, ["LCTYPATK", "GRIDCST", "LBOMBBOT", "LJINX"], ""], +["cty-port-mine-ag", "cty-port-mine", 5, ["LCTYPATK"], ""], +["ctyport-mine-ag", "ctyport-mine", 5, ["LCTYPATK"], ""], +["cty-dax-missile-ag", "cty-dax-missile", 5, ["LCTYPATK"], ""], +["lctypatk", "lctypatk", 5, ["LCTYPATK"], ""], +["target-turret-shot", "target-turret-shot", 5, ["WCB", "LFORM", "DESBATTL", "LCTYBLOW"], ""], +["target-turret", "target-turret", 5, ["WCB", "LFORM", "DESBATTL", "LCTYBLOW"], ""], +["jak-turret+0-ag", "jak-turret+0", 5, ["WCB", "LFORM", "DESBATTL"], ""], +["wasgun-h", "wasgun-h", 5, ["WCB"], ""], +["skeet-part", "skeet-part", 5, ["WCB"], ""], +["maker-part", "maker-part", 5, ["WCB"], ""], +["dm-flyer", "dm-flyer", 5, ["WCB"], ""], +["wascity-turret-shot", "wascity-turret-shot", 5, ["WCB"], ""], +["wascity-turret", "wascity-turret", 5, ["WCB"], ""], +["wasgun-manager", "wasgun-manager", 5, ["WCB"], ""], +["maker-projectile", "maker-projectile", 5, ["WCB"], ""], +["wasdef-manager", "wasdef-manager", 5, ["WCB"], ""], +["wasdef-hud", "wasdef-hud", 5, ["WCB"], ""], +["wasgun-hud", "wasgun-hud", 5, ["WCB"], ""], +["tpage-841", "tpage-841", 5, ["WCB"], ""], +["tpage-844", "tpage-844", 5, ["WCB"], ""], +["tpage-843", "tpage-843", 5, ["WCB"], ""], +["tpage-842", "tpage-842", 5, ["WCB"], ""], +["tpage-947", "tpage-947", 5, ["WCB"], ""], +["tpage-2360", "tpage-2360", 5, ["WCB"], ""], +["wascity-turret-ag", "wascity-turret", 5, ["WCB"], ""], +["kanga-lizard-ag", "kanga-lizard", 5, ["WCB", "WCA", "WASCHASE"], ""], +["wascity-skeet-ag", "wascity-skeet", 5, ["WCB"], ""], +["wascity-skeet-c-ag", "wascity-skeet-c", 5, ["WCB"], ""], +["wascity-skeet-b-ag", "wascity-skeet-b", 5, ["WCB"], ""], +["tizard-ag", "tizard", 5, ["WCB", "WCA"], ""], +["dogat-ag", "dogat", 5, ["WCB", "WCA"], ""], +["ladder-ag", "ladder", 5, ["WCB", "WCA", "HALFPIPE", "SED", "VOCA", "WASSTADB"], ""], +["tentacle-ag", "tentacle", 5, ["WCB", "DST"], ""], +["market-sack-b-ag", "market-sack-b", 5, ["WCB", "WCA"], ""], +["market-sack-a-ag", "market-sack-a", 5, ["WCB", "WCA"], ""], +["market-crate-ag", "market-crate", 5, ["WCB", "WCA"], ""], +["market-basket-b-ag", "market-basket-b", 5, ["WCB", "WCA"], ""], +["market-basket-a-ag", "market-basket-a", 5, ["WCB", "WCA"], ""], +["wascity-awning-b-ag", "wascity-awning-b", 5, ["WCB"], ""], +["cty-fruit-stand-ag", "cty-fruit-stand", 5, ["WCB"], ""], +["wascityb-vis", "wascityb-vis", 5, ["WCB"], ""], +["nav-graph-h", "nav-graph-h", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["cty-borrow-manager-h", "cty-borrow-manager-h", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["cty-faction-h", "cty-faction-h", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["traffic-engine-h", "traffic-engine-h", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["height-map-h", "height-map-h", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["vehicle-control", "vehicle-control", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["nav-graph", "nav-graph", 5, ["DESRESC", "HGA", "WWD", "CWI", "LFACTORY"], ""], +["mission-squad-control-h", "mission-squad-control-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["citizen-h", "citizen-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["squad-control-city-h", "squad-control-city-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["squad-control-city", "squad-control-city", 5, ["DESRESC", "WWD", "CWI"], ""], +["kg-squad-control-h", "kg-squad-control-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["ff-squad-control-h", "ff-squad-control-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["mh-squad-control-h", "mh-squad-control-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["cty-faction", "cty-faction", 5, ["DESRESC", "WWD", "CWI"], ""], +["formations", "formations", 5, ["DESRESC", "WWD", "CWI"], ""], +["formation-object", "formation-object", 5, ["DESRESC", "WWD", "CWI"], ""], +["ctywide-obs-h", "ctywide-obs-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["mission-squad-control", "mission-squad-control", 5, ["DESRESC", "WWD", "CWI"], ""], +["cty-attack-controller", "cty-attack-controller", 5, ["DESRESC", "WWD", "CWI"], ""], +["flee-info", "flee-info", 5, ["DESRESC", "WWD", "CWI"], ""], +["citizen", "citizen", 5, ["DESRESC", "WWD", "CWI"], ""], +["civilian", "civilian", 5, ["DESRESC", "WWD", "CWI"], ""], +["guard-h", "guard-h", 5, ["DESRESC", "WWD", "CWI"], ""], +["traffic-util", "traffic-util", 5, ["DESRESC", "WWD", "CWI"], ""], +["traffic-engine", "traffic-engine", 5, ["DESRESC", "WWD", "CWI"], ""], +["traffic-manager", "traffic-manager", 5, ["DESRESC", "WWD", "CWI"], ""], +["desresc-path", "desresc-path", 5, ["DESRESC"], ""], +["desresc-texture", "desresc-texture", 5, ["DESRESC"], ""], +["desert-rescue", "desert-rescue", 5, ["DESRESC"], ""], +["desert-rescue-bbush", "desert-rescue-bbush", 5, ["DESRESC"], ""], +["wland-passenger", "wland-passenger", 5, ["DESRESC"], ""], +["rope-system-h", "rope-system-h", 5, ["DESRESC"], ""], +["rope-system", "rope-system", 5, ["DESRESC"], ""], +["rope-prim-system-h", "rope-prim-system-h", 5, ["DESRESC"], ""], +["rope-prim-system", "rope-prim-system", 5, ["DESRESC"], ""], +["neo-satellite", "neo-satellite", 5, ["DESRESC"], ""], +["tpage-1599", "tpage-1599", 5, ["DESRESC"], ""], +["tpage-1625", "tpage-1625", 5, ["DESRESC"], ""], +["tpage-1731", "tpage-1731", 5, ["DESRESC"], ""], +["wlander-male-ag", "wlander-male", 5, ["DESRESC", "WASSTADC", "WWD", "LWLANDM"], ""], +["wland-passenger-ag", "wland-passenger", 5, ["DESRESC"], ""], +["neo-satellite-ag", "neo-satellite", 5, ["DESRESC", "RUBA"], ""], +["neo-satellite-c-ag", "neo-satellite-c", 5, ["DESRESC"], ""], +["neo-satellite-a-ag", "neo-satellite-a", 5, ["DESRESC"], ""], +["neo-satellite-b-ag", "neo-satellite-b", 5, ["DESRESC"], ""], +["eco-crystal-dark-ag", "eco-crystal-dark", 5, ["DESRESC", "LTOWB", "WASSEEM", "DESHOVER"], ""], +["neo-satellite-shield-ag", "neo-satellite-shield", 5, ["DESRESC"], ""], +["desresc", "desresc", 5, ["DESRESC"], ""], +["tpage-2906", "tpage-2906", 5, ["LBBRING4"], ""], +["lbbring4", "lbbring4", 5, ["LBBRING4"], ""], +["tpage-2967", "tpage-2967", 5, ["GRIDCST"], ""], +["tpage-2968", "tpage-2968", 5, ["GRIDCST"], ""], +["cara-ag", "cara", 5, ["GRIDCST", "CTYCARA"], ""], +["gridcst", "gridcst", 5, ["GRIDCST"], ""], +["railx-mood", "railx-mood", 5, ["RAILX"], ""], +["railx-obs", "railx-obs", 5, ["RAILX"], ""], +["railx-scenes", "railx-scenes", 5, ["RAILX"], ""], +["tpage-2336", "tpage-2336", 5, ["RAILX"], ""], +["rail-warp-gate-ag", "rail-warp-gate", 5, ["RAILX"], ""], +["rail-gun-dark-ag", "rail-gun-dark", 5, ["RAILX"], ""], +["rail-oracle-door-ag", "rail-oracle-door", 5, ["RAILX"], ""], +["rail-oracle-eyes-ag", "rail-oracle-eyes", 5, ["RAILX"], ""], +["railx", "railx", 5, ["RAILX"], ""], +["tpage-1135", "tpage-1135", 5, ["SEJ"], ""], +["tpage-1137", "tpage-1137", 5, ["SEJ"], ""], +["tpage-1136", "tpage-1136", 5, ["SEJ"], ""], +["tpage-1134", "tpage-1134", 5, ["SEJ"], ""], +["robo-hover-ag", "robo-hover", 5, ["SEJ", "SEH", "FACD", "SEG", "SEB", "LFACRM2", "SEC", "SED"], ""], +["com-airlock-outer-ag", "com-airlock-outer", 5, ["SEJ", "SEM", "SEI", "SEB", "SEK", "CFA", "SEO", "SEC", "SEL", "SEE", "CIA", "SEF", "FRSTA", "CGB", "CPO"], ""], +["sewj-vis", "sewj-vis", 5, ["SEJ"], ""], +["tpage-1466", "tpage-1466", 5, ["LJAKC"], ""], +["red-gun-mod-two-ag", "red-gun-mod-two", 5, ["LJAKC"], ""], +["ljakc", "ljakc", 5, ["LJAKC"], ""], +["ctyslumb-part", "ctyslumb-part", 5, ["CTB", "SLUMBSET"], ""], +["tpage-166", "tpage-166", 5, ["CTB"], ""], +["tpage-165", "tpage-165", 5, ["CTB"], ""], +["tpage-1743", "tpage-1743", 5, ["CTB"], ""], +["tpage-162", "tpage-162", 5, ["CTB"], ""], +["tpage-159", "tpage-159", 5, ["CTB"], ""], +["cty-door-ag", "cty-door", 5, ["CTB", "CTC", "LFACRM1"], ""], +["ctyslumb-vis", "ctyslumb-vis", 5, ["CTB"], ""], +["tpage-950", "tpage-950", 5, ["CTYCARC"], ""], +["tpage-951", "tpage-951", 5, ["CTYCARC"], ""], +["hellcat-ag", "hellcat", 5, ["CTYCARC", "IPF", "FACTORYA", "DESOASIS", "LTOWB", "TOWERCST"], ""], +["ctycarc", "ctycarc", 5, ["CTYCARC"], ""], +["jak-mech+0-ag", "jak-mech+0", 5, ["LMECH"], ""], +["mech-part", "mech-part", 5, ["LMECH"], ""], +["mech", "mech", 5, ["LMECH"], ""], +["target-mech", "target-mech", 5, ["LMECH"], ""], +["mech-states", "mech-states", 5, ["LMECH"], ""], +["tpage-2955", "tpage-2955", 5, ["LMECH"], ""], +["mech-ag", "mech", 5, ["LMECH"], ""], +["lmech", "lmech", 5, ["LMECH"], ""], +["tpage-3329", "tpage-3329", 5, ["LBBSDRP2"], ""], +["lbbsdrp2", "lbbsdrp2", 5, ["LBBSDRP2"], ""], +["nstb-texture", "nstb-texture", 5, ["NSA"], ""], +["nst-mood", "nst-mood", 5, ["NSA"], ""], +["nst-part", "nst-part", 5, ["NSA"], ""], +["nst-obs", "nst-obs", 5, ["NSA"], ""], +["mh-bat", "mh-bat", 5, ["NSA"], ""], +["egg-spider", "egg-spider", 5, ["NSA", "LFORP", "LBBSPID"], ""], +["nest-scenes", "nest-scenes", 5, ["NSA"], ""], +["tpage-593", "tpage-593", 5, ["NSA"], ""], +["tpage-795", "tpage-795", 5, ["NSA"], ""], +["tpage-731", "tpage-731", 5, ["NSA"], ""], +["tpage-446", "tpage-446", 5, ["NSA"], ""], +["tpage-1072", "tpage-1072", 5, ["NSA"], ""], +["egg-spider-ag", "egg-spider", 5, ["NSA", "LFORP", "LBBSPID", "LNSTOBB"], ""], +["nsta-vis", "nsta-vis", 5, ["NSA"], ""], +["timer-path", "timer-path", 5, ["LBBTCHA3", "LBBTCHA2", "LBBTCHA1"], ""], +["des-bush-time-chase", "des-bush-time-chase", 5, ["LBBTCHA3", "LBBTCHA2", "LBBTCHA1"], ""], +["tpage-3380", "tpage-3380", 5, ["LBBTCHA3"], ""], +["tpage-3327", "tpage-3327", 5, ["LBBTCHA3"], ""], +["lbbtcha3", "lbbtcha3", 5, ["LBBTCHA3"], ""], +["tpage-2275", "tpage-2275", 5, ["GUNGAME2"], ""], +["red-gun-mod-three-ag", "red-gun-mod-three", 5, ["GUNGAME2"], ""], +["gungame2", "gungame2", 5, ["GUNGAME2"], ""], +["ctyslumc-part", "ctyslumc-part", 5, ["CTC"], ""], +["ctyslumc-obs", "ctyslumc-obs", 5, ["CTC"], ""], +["tpage-174", "tpage-174", 5, ["CTC"], ""], +["tpage-173", "tpage-173", 5, ["CTC"], ""], +["tpage-1505", "tpage-1505", 5, ["CTC"], ""], +["tpage-170", "tpage-170", 5, ["CTC"], ""], +["tpage-167", "tpage-167", 5, ["CTC"], ""], +["cty-elevator-ag", "cty-elevator", 5, ["CTC"], ""], +["ctyslumc-flag-ag", "ctyslumc-flag", 5, ["CTC"], ""], +["ctyslumc-vis", "ctyslumc-vis", 5, ["CTC"], ""], +["tpage-2869", "tpage-2869", 5, ["LVINCST"], ""], +["tpage-2870", "tpage-2870", 5, ["LVINCST"], ""], +["torn-effect-ag", "torn-effect", 5, ["LVINCST"], ""], +["precursor-ag", "precursor", 5, ["LVINCST", "RAILCST", "COMBA"], ""], +["cipher-ag", "cipher", 5, ["LVINCST", "POWERGD"], ""], +["lvincst", "lvincst", 5, ["LVINCST"], ""], +["pecker-ingame", "pecker-ingame", 5, ["COMBX", "MIA"], ""], +["combx-obs", "combx-obs", 5, ["COMBX"], ""], +["combx-scenes", "combx-scenes", 5, ["COMBX"], ""], +["tpage-2333", "tpage-2333", 5, ["COMBX"], ""], +["tpage-2306", "tpage-2306", 5, ["COMBX"], ""], +["tpage-2334", "tpage-2334", 5, ["COMBX"], ""], +["tpl-elevator-ag", "tpl-elevator", 5, ["COMBX", "TEMD"], ""], +["combx", "combx", 5, ["COMBX"], ""], +["tpage-1385", "tpage-1385", 5, ["DESH"], ""], +["tpage-1995", "tpage-1995", 5, ["DESH"], ""], +["deserth-vis", "deserth-vis", 5, ["DESH"], ""], +["artifact-race", "artifact-race", 5, ["DESRACE2", "DESRACE1"], ""], +["tpage-1408", "tpage-1408", 5, ["DESRACE2"], ""], +["tpage-1409", "tpage-1409", 5, ["DESRACE2"], ""], +["interceptor-ag", "interceptor", 5, ["DESRACE2", "DESJUMP", "DESOASIS", "DESRESCG", "DESRACE1", "DESRALLY", "DESTRACK", "DESINTER", "DESCHASE"], ""], +["interceptor-b-ag", "interceptor-b", 5, ["DESRACE2", "DESOASIS", "DESRESCG", "DESRACE1", "DESRALLY", "DESTRACK", "DESINTER", "DESCHASE"], ""], +["desrace2", "desrace2", 5, ["DESRACE2"], ""], +["tpage-2486", "tpage-2486", 5, ["RAILD"], ""], +["spotlight-ag", "spotlight", 5, ["RAILD", "RUBB"], ""], +["raild", "raild", 5, ["RAILD"], ""], +["factory-part", "factory-part", 5, ["FACC", "FACTORYA"], ""], +["factoryc-mood", "factoryc-mood", 5, ["FACC"], ""], +["factoryc-texture", "factoryc-texture", 5, ["FACC"], ""], +["conveyor", "conveyor", 5, ["FACC"], ""], +["hover-nav-factoryc", "hover-nav-factoryc", 5, ["FACC"], ""], +["factoryc-obs", "factoryc-obs", 5, ["FACC"], ""], +["factoryc-obs2", "factoryc-obs2", 5, ["FACC"], ""], +["target-indax", "target-indax", 5, ["FACC", "HALFPIPE", "VOCA"], ""], +["target-indax-hang", "target-indax-hang", 5, ["FACC", "HALFPIPE", "VOCA"], ""], +["jak-indax+0-ag", "jak-indax+0", 5, ["FACC", "HALFPIPE", "VIN", "VOCA"], ""], +["tpage-2233", "tpage-2233", 5, ["FACC"], ""], +["tpage-2305", "tpage-2305", 5, ["FACC"], ""], +["tpage-2235", "tpage-2235", 5, ["FACC"], ""], +["tpage-2234", "tpage-2234", 5, ["FACC"], ""], +["tpage-2332", "tpage-2332", 5, ["FACC"], ""], +["tpage-3278", "tpage-3278", 5, ["FACC"], ""], +["fac-punch-wall-ag", "fac-punch-wall", 5, ["FACC"], ""], +["spydroid-orig-ag", "spydroid-orig", 5, ["FACC", "SEH", "FACD"], ""], +["fac-robopod-ag", "fac-robopod", 5, ["FACC"], ""], +["fac-break-fence-c-ag", "fac-break-fence-c", 5, ["FACC"], ""], +["fac-break-fence-b-ag", "fac-break-fence-b", 5, ["FACC"], ""], +["fac-break-fence-a-ag", "fac-break-fence-a", 5, ["FACC"], ""], +["fac-break-floor-ag", "fac-break-floor", 5, ["FACC"], ""], +["fac-rotfan-ag", "fac-rotfan", 5, ["FACC"], ""], +["fac-switch-ag", "fac-switch", 5, ["FACC"], ""], +["fac-move-plat-a-ag", "fac-move-plat-a", 5, ["FACC"], ""], +["fac-move-plat-b-ag", "fac-move-plat-b", 5, ["FACC"], ""], +["fac-fire-torch-ag", "fac-fire-torch", 5, ["FACC"], ""], +["factoryc-vis", "factoryc-vis", 5, ["FACC"], ""], +["roboguard-city", "roboguard-city", 5, ["CTYPESC"], ""], +["spydroid", "spydroid", 5, ["CTYPESC"], ""], +["flying-turret", "flying-turret", 5, ["CTYPESC"], ""], +["tpage-1244", "tpage-1244", 5, ["CTYPESC"], ""], +["roboguard-city-ag", "roboguard-city", 5, ["CTYPESC"], ""], +["spydroid-ag", "spydroid", 5, ["CTYPESC"], ""], +["kg-flying-turret-ag", "kg-flying-turret", 5, ["CTYPESC", "LBLOWTKG"], ""], +["ctypesc", "ctypesc", 5, ["CTYPESC"], ""], +["des-bbush-tasks", "des-bbush-tasks", 5, ["LWASBBV"], ""], +["lwasbbv", "lwasbbv", 5, ["LWASBBV"], ""], +["tpage-2650", "tpage-2650", 5, ["TOWB"], ""], +["tpage-2948", "tpage-2948", 5, ["TOWB"], ""], +["tpage-2652", "tpage-2652", 5, ["TOWB"], ""], +["tpage-2651", "tpage-2651", 5, ["TOWB"], ""], +["tpage-2949", "tpage-2949", 5, ["TOWB"], ""], +["tow-energy-bridge-ag", "tow-energy-bridge", 5, ["TOWB"], ""], +["towerb-vis", "towerb-vis", 5, ["TOWB"], ""], +["hfrag-vu1-h", "hfrag-vu1-h", 5, ["HGA", "WIN", "DST"], ""], +["hfrag-common", "hfrag-common", 5, ["HGA", "WIN", "DST"], ""], +["hfrag-work", "hfrag-work", 5, ["HGA", "WIN", "DST"], ""], +["hfrag-texture-anim", "hfrag-texture-anim", 5, ["HGA", "WIN", "DST"], ""], +["desert-mood", "desert-mood", 5, ["HGA", "WIN", "DST"], ""], +["desert-ocean", "desert-ocean", 5, ["HGA", "WIN", "DST"], ""], +["desert-part", "desert-part", 5, ["HGA", "WIN", "DST"], ""], +["desert-scenes", "desert-scenes", 5, ["HGA", "WIN", "DST"], ""], +["squad-control-h", "squad-control-h", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["squad-control", "squad-control", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-h", "vehicle-h", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-part", "vehicle-part", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-effects", "vehicle-effects", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle", "vehicle", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-util", "vehicle-util", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-physics", "vehicle-physics", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-states", "vehicle-states", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-manager", "vehicle-manager", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["vehicle-hud", "vehicle-hud", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["turret-control", "turret-control", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["target-pilot", "target-pilot", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["pilot-states", "pilot-states", 5, ["HGA", "LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["height-map", "height-map", 5, ["HGA", "CWI", "LFACTORY"], ""], +["traffic-height-map", "traffic-height-map", 5, ["HGA", "CWI", "LFACTORY"], ""], +["hvehicle-h", "hvehicle-h", 5, ["HGA", "CWI", "LFACTORY"], ""], +["vehicle-rider", "vehicle-rider", 5, ["HGA", "CWI", "LFACTORY"], ""], +["hvehicle", "hvehicle", 5, ["HGA", "CWI", "LFACTORY"], ""], +["hvehicle-util", "hvehicle-util", 5, ["HGA", "CWI", "LFACTORY"], ""], +["hvehicle-effects", "hvehicle-effects", 5, ["HGA", "CWI", "LFACTORY"], ""], +["hvehicle-physics", "hvehicle-physics", 5, ["HGA", "CWI", "LFACTORY"], ""], +["glider-h", "glider-h", 5, ["HGA"], ""], +["glider-ring-part", "glider-ring-part", 5, ["HGA"], ""], +["glider-ring", "glider-ring", 5, ["HGA"], ""], +["h-glider", "h-glider", 5, ["HGA"], ""], +["glider-manager", "glider-manager", 5, ["HGA"], ""], +["glider-hud", "glider-hud", 5, ["HGA"], ""], +["hanga-init", "hanga-init", 5, ["HGA"], ""], +["jak-pilot-glider+0-ag", "jak-pilot-glider+0", 5, ["HGA"], ""], +["jak-pilot-gun+0-ag", "jak-pilot-gun+0", 5, ["HGA", "RAILA", "CWI", "COMBA"], ""], +["tpage-3030", "tpage-3030", 5, ["HGA"], ""], +["tpage-3031", "tpage-3031", 5, ["HGA"], ""], +["tpage-3029", "tpage-3029", 5, ["HGA"], ""], +["tpage-1511", "tpage-1511", 5, ["HGA"], ""], +["tpage-1676", "tpage-1676", 5, ["HGA"], ""], +["tpage-1503", "tpage-1503", 5, ["HGA"], ""], +["des-glider-ring-ag", "des-glider-ring", 5, ["HGA"], ""], +["tpl-glider-ag", "tpl-glider", 5, ["HGA", "VOCX"], ""], +["tpl-glider-broken-ag", "tpl-glider-broken", 5, ["HGA", "VOCX"], ""], +["hanga-vis", "hanga-vis", 5, ["HGA"], ""], +["elec-gate", "elec-gate", 5, ["SEH", "DESG", "MIA", "CIA", "STAA"], ""], +["tpage-1125", "tpage-1125", 5, ["SEH"], ""], +["tpage-1132", "tpage-1132", 5, ["SEH"], ""], +["tpage-1129", "tpage-1129", 5, ["SEH"], ""], +["tpage-1131", "tpage-1131", 5, ["SEH"], ""], +["scoutbot-ag", "scoutbot", 5, ["SEH"], ""], +["kg-hopper-ag", "kg-hopper", 5, ["SEH", "SEC"], ""], +["sew-laser-beam-ag", "sew-laser-beam", 5, ["SEH", "SEG"], ""], +["sew-move-turret-ag", "sew-move-turret", 5, ["SEH"], ""], +["sew-grate-plat-ag", "sew-grate-plat", 5, ["SEH"], ""], +["sew-move-plat-ag", "sew-move-plat", 5, ["SEH", "SEG"], ""], +["sewh-vis", "sewh-vis", 5, ["SEH"], ""], +["tpage-2367", "tpage-2367", 5, ["MHCTYCST"], ""], +["tpage-2379", "tpage-2379", 5, ["MHCTYCST"], ""], +["darkjak-highres-ag", "darkjak-highres", 5, ["MHCTYCST", "RBCT"], ""], +["mhcity-de-tower-egg-ag", "mhcity-de-tower-egg", 5, ["MHCTYCST", "LCTYDEST"], ""], +["mhctycst", "mhctycst", 5, ["MHCTYCST"], ""], +["tpage-2274", "tpage-2274", 5, ["GUNGAME1"], ""], +["yellow-barrel-ag", "yellow-barrel", 5, ["GUNGAME1", "ARENACST"], ""], +["gungame1", "gungame1", 5, ["GUNGAME1"], ""], +["intro-part", "intro-part", 5, ["INTROCST"], ""], +["intro-scenes", "intro-scenes", 5, ["INTROCST"], ""], +["tpage-1347", "tpage-1347", 5, ["INTROCST"], ""], +["tpage-540", "tpage-540", 5, ["INTROCST"], ""], +["tpage-544", "tpage-544", 5, ["INTROCST"], ""], +["tpage-1560", "tpage-1560", 5, ["INTROCST"], ""], +["kleever-highres-ag", "kleever-highres", 5, ["INTROCST", "LDAMKLEV", "LSIGKLV", "OUTROCST", "LKLEEVER", "MUSEUM", "LJAKCKLV", "LJKCDMKL", "LJNDKLEV", "LJAKKLEV", "DESLIZ"], ""], +["veger-highres-ag", "veger-highres", 5, ["INTROCST", "FREECAST", "RBCT", "TEMPLEE", "MUSEUM2", "RAILCST", "MINED"], ""], +["jak-highres-ag", "jak-highres", 5, ["INTROCST", "LJAK", "MUSEUM3", "LJAKSIG", "LJAKKLEV", "ARENACST"], ""], +["samos-highres-ag", "samos-highres", 5, ["INTROCST", "FREECAST", "OUTROCST", "LSAMOS", "LTORNSAM", "MUSEUM3", "ONINTENT", "MUSEUM"], ""], +["air-train-fma-ag", "air-train-fma", 5, ["INTROCST"], ""], +["crimson-guard-highres-ag", "crimson-guard-highres", 5, ["INTROCST"], ""], +["handcuffs-ag", "handcuffs", 5, ["INTROCST"], ""], +["beacon-ag", "beacon", 5, ["INTROCST"], ""], +["introcst", "introcst", 5, ["INTROCST"], ""], +["wcar-catapult", "wcar-catapult", 5, ["DESJUMP", "DESCHASE"], ""], +["desert-jump", "desert-jump", 5, ["DESJUMP", "DESCHASE"], ""], +["tpage-3220", "tpage-3220", 5, ["DESJUMP"], ""], +["tpage-2768", "tpage-2768", 5, ["DESJUMP"], ""], +["tpage-2769", "tpage-2769", 5, ["DESJUMP"], ""], +["tpage-2766", "tpage-2766", 5, ["DESJUMP"], ""], +["catapult-ag", "catapult", 5, ["DESJUMP", "DESCHASE"], ""], +["wascity-airlock-debris-ag", "wascity-airlock-debris", 5, ["DESJUMP"], ""], +["beam-generator-ag", "beam-generator", 5, ["DESJUMP"], ""], +["desjump", "desjump", 5, ["DESJUMP"], ""], +["tpage-1138", "tpage-1138", 5, ["SEM"], ""], +["tpage-1141", "tpage-1141", 5, ["SEM"], ""], +["tpage-1139", "tpage-1139", 5, ["SEM"], ""], +["tpage-1140", "tpage-1140", 5, ["SEM"], ""], +["needle-fish-ag", "needle-fish", 5, ["SEM"], ""], +["sew-fan-ag", "sew-fan", 5, ["SEM", "SEG", "SEN"], ""], +["sew-jump-pad-ag", "sew-jump-pad", 5, ["SEM", "SEG", "SED"], ""], +["sew-m-gate-ag", "sew-m-gate", 5, ["SEM"], ""], +["sewm-vis", "sewm-vis", 5, ["SEM"], ""], +["tpage-1123", "tpage-1123", 5, ["SEI"], ""], +["tpage-1130", "tpage-1130", 5, ["SEI"], ""], +["tpage-1124", "tpage-1124", 5, ["SEI"], ""], +["tpage-1122", "tpage-1122", 5, ["SEI"], ""], +["flyingsaw-ag", "flyingsaw", 5, ["SEI"], ""], +["sew-fence-gate-ag", "sew-fence-gate", 5, ["SEI"], ""], +["sew-floor-switch-ag", "sew-floor-switch", 5, ["SEI", "SEB", "LCTYSNPR"], ""], +["sew-rove-plat-ag", "sew-rove-plat", 5, ["SEI"], ""], +["sewi-vis", "sewi-vis", 5, ["SEI"], ""], +["desertg-obs", "desertg-obs", 5, ["DESG"], ""], +["tpage-1373", "tpage-1373", 5, ["DESG"], ""], +["tpage-1376", "tpage-1376", 5, ["DESG"], ""], +["tpage-1374", "tpage-1374", 5, ["DESG"], ""], +["tpage-3409", "tpage-3409", 5, ["DESG"], ""], +["desert-eggwall-ag", "desert-eggwall", 5, ["DESG"], ""], +["des-cactus-obstacle-ag", "des-cactus-obstacle", 5, ["DESG"], ""], +["desertg-vis", "desertg-vis", 5, ["DESG"], ""], +["terraformer-drone", "terraformer-drone", 5, ["DESW", "DESBOSS1", "DESBOSS2"], ""], +["prebot-eco-creature", "prebot-eco-creature", 5, ["DESW", "TOWERA", "MINED"], ""], +["deswalk-part", "deswalk-part", 5, ["DESW"], ""], +["deswalk-obs", "deswalk-obs", 5, ["DESW"], ""], +["tpage-2855", "tpage-2855", 5, ["DESW"], ""], +["tpage-2856", "tpage-2856", 5, ["DESW"], ""], +["tpage-3134", "tpage-3134", 5, ["DESW"], ""], +["tpage-3385", "tpage-3385", 5, ["DESW"], ""], +["cav-eco-lg-ag", "cav-eco-lg", 5, ["DESW", "TOWERA", "MINED"], ""], +["dm-tentacle-ag", "dm-tentacle", 5, ["DESW"], ""], +["dm-urchin-ag", "dm-urchin", 5, ["DESW"], ""], +["desw-eco-tank-ag", "desw-eco-tank", 5, ["DESW"], ""], +["terraformer-drone-ag", "terraformer-drone", 5, ["DESW", "DESBOSS1"], ""], +["terraformer-mine-ag", "terraformer-mine", 5, ["DESW", "DESBOSS1"], ""], +["desw-snake-stump-ag", "desw-snake-stump", 5, ["DESW"], ""], +["deswalk-vis", "deswalk-vis", 5, ["DESW"], ""], +["tpage-3273", "tpage-3273", 5, ["LOUTRO3"], ""], +["tpage-3274", "tpage-3274", 5, ["LOUTRO3"], ""], +["onin-simple-ag", "onin-simple", 5, ["LOUTRO3", "LONINSIM"], ""], +["precursor-ship-door-ag", "precursor-ship-door", 5, ["LOUTRO3"], ""], +["loutro3", "loutro3", 5, ["LOUTRO3"], ""], +["tpage-1407", "tpage-1407", 5, ["LDAMKLEV"], ""], +["tpage-1323", "tpage-1323", 5, ["LDAMKLEV"], ""], +["ldamklev", "ldamklev", 5, ["LDAMKLEV"], ""], +["tpage-3179", "tpage-3179", 5, ["DESERROL"], ""], +["tpage-3180", "tpage-3180", 5, ["DESERROL"], ""], +["errol-ag", "errol", 5, ["DESERROL", "FACTORYA", "DESBCST", "LTOWB", "MUSEUM2", "PRECD", "DESBOSS2"], ""], +["deserrol", "deserrol", 5, ["DESERROL"], ""], +["tpage-2708", "tpage-2708", 5, ["RAILB2"], ""], +["railb2", "railb2", 5, ["RAILB2"], ""], +["lerrol", "lerrol", 5, ["LERROL"], ""], +["palroof-part", "palroof-part", 5, ["IPF"], ""], +["palcab-part", "palcab-part", 5, ["IPF"], ""], +["intro-obs", "intro-obs", 5, ["IPF"], ""], +["searchlight", "searchlight", 5, ["IPF", "CWI"], ""], +["tpage-1438", "tpage-1438", 5, ["IPF"], ""], +["tpage-1440", "tpage-1440", 5, ["IPF"], ""], +["tpage-1439", "tpage-1439", 5, ["IPF"], ""], +["tpage-1441", "tpage-1441", 5, ["IPF"], ""], +["tpage-1007", "tpage-1007", 5, ["IPF"], ""], +["ctypal-palace-break-ag", "ctypal-palace-break", 5, ["IPF"], ""], +["ctypal-ctyfarma-ag", "ctypal-ctyfarma", 5, ["IPF"], ""], +["ctypal-rail-ag", "ctypal-rail", 5, ["IPF"], ""], +["ctypal-base-break-ag", "ctypal-base-break", 5, ["IPF"], ""], +["ctypal-support-break-ag", "ctypal-support-break", 5, ["IPF"], ""], +["palmpilot-ag", "palmpilot", 5, ["IPF"], ""], +["hellcat-lowres-fma-ag", "hellcat-lowres-fma", 5, ["IPF"], ""], +["ctypal-cable-break-ag", "ctypal-cable-break", 5, ["IPF"], ""], +["searchlight-ag", "searchlight", 5, ["IPF", "CWI"], ""], +["intpfall-vis", "intpfall-vis", 5, ["IPF"], ""], +["tpage-2487", "tpage-2487", 5, ["RAILB"], ""], +["railb", "railb", 5, ["RAILB"], ""], +["billiards", "billiards", 5, ["LCTYHIJK"], ""], +["guide-arrow", "guide-arrow", 5, ["LCTYHIJK"], ""], +["kg-vehicles", "kg-vehicles", 5, ["LCTYHIJK"], ""], +["cty-hijack-missile", "cty-hijack-missile", 5, ["LCTYHIJK"], ""], +["cty-hijack", "cty-hijack", 5, ["LCTYHIJK"], ""], +["ctywide-arrow-ag", "ctywide-arrow", 5, ["LCTYHIJK"], ""], +["tpage-1580", "tpage-1580", 5, ["LCTYHIJK"], ""], +["tpage-1835", "tpage-1835", 5, ["LCTYHIJK"], ""], +["tpage-1836", "tpage-1836", 5, ["LCTYHIJK"], ""], +["cty-decoy-ag", "cty-decoy", 5, ["LCTYHIJK"], ""], +["cty-missile-launcher-ag", "cty-missile-launcher", 5, ["LCTYHIJK"], ""], +["kg-pickup-ag", "kg-pickup", 5, ["LCTYHIJK", "TOWERCST", "LCTYBLOW"], ""], +["cty-homing-missile-ag", "cty-homing-missile", 5, ["LCTYHIJK", "LBLOWTKG", "LCTYPROT"], ""], +["lctyhijk", "lctyhijk", 5, ["LCTYHIJK"], ""], +["tpage-958", "tpage-958", 5, ["CTYPEPB"], ""], +["predator-ag", "predator", 5, ["CTYPEPB"], ""], +["ctypepb", "ctypepb", 5, ["CTYPEPB"], ""], +["tpage-2633", "tpage-2633", 5, ["PRECB"], ""], +["tpage-2636", "tpage-2636", 5, ["PRECB"], ""], +["precur-generator-b-ag", "precur-generator-b", 5, ["PRECB"], ""], +["precur-generator-c-ag", "precur-generator-c", 5, ["PRECB"], ""], +["precur-box-ag", "precur-box", 5, ["PRECB"], ""], +["precur-door-d-ag", "precur-door-d", 5, ["PRECB", "PRECA"], ""], +["precur-door-b-ag", "precur-door-b", 5, ["PRECB", "PRECA"], ""], +["precur-platform-round-ag", "precur-platform-round", 5, ["PRECB", "PRECA"], ""], +["precur-bomb-spawner-ag", "precur-bomb-spawner", 5, ["PRECB", "PRECA"], ""], +["precurb-vis", "precurb-vis", 5, ["PRECB"], ""], +["for-turret-shot", "for-turret-shot", 5, ["LFORM"], ""], +["for-turret", "for-turret", 5, ["LFORM"], ""], +["neo-wasp-part", "neo-wasp-part", 5, ["LFORM", "FACD", "LPATK", "TOWERA", "PRECA"], ""], +["neo-wasp", "neo-wasp", 5, ["LFORM", "FACD", "LPATK", "TOWERA", "PRECA"], ""], +["hover-nav-foresta", "hover-nav-foresta", 5, ["LFORM"], ""], +["neo-spawner", "neo-spawner", 5, ["LFORM"], ""], +["dp-bipedal-turret+0-ag", "dp-bipedal-turret+0", 5, ["LFORM"], ""], +["tpage-1518", "tpage-1518", 5, ["LFORM"], ""], +["tpage-1519", "tpage-1519", 5, ["LFORM"], ""], +["tpage-3249", "tpage-3249", 5, ["LFORM"], ""], +["tpage-1555", "tpage-1555", 5, ["LFORM"], ""], +["for-turret-ag", "for-turret", 5, ["LFORM"], ""], +["neo-spawner-ag", "neo-spawner", 5, ["LFORM"], ""], +["neo-egg-a-ag", "neo-egg-a", 5, ["LFORM"], ""], +["neo-egg-c-ag", "neo-egg-c", 5, ["LFORM"], ""], +["neo-egg-b-ag", "neo-egg-b", 5, ["LFORM"], ""], +["lformach-vis", "lformach-vis", 5, ["LFORM"], ""], +["race-h", "race-h", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["race-mesh", "race-mesh", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["race-control", "race-control", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["race-info", "race-info", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["race-manager", "race-manager", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["race-hud", "race-hud", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["pilot-recorder", "pilot-recorder", 5, ["WASLEAPR", "DESRALLY", "DESTRACK"], ""], +["was-leaper-race-h", "was-leaper-race-h", 5, ["WASLEAPR"], ""], +["flut-racer", "flut-racer", 5, ["WASLEAPR"], ""], +["was-leaper-race", "was-leaper-race", 5, ["WASLEAPR"], ""], +["tpage-1663", "tpage-1663", 5, ["WASLEAPR"], ""], +["tpage-1694", "tpage-1694", 5, ["WASLEAPR"], ""], +["tpage-1589", "tpage-1589", 5, ["WASLEAPR"], ""], +["tpage-1707", "tpage-1707", 5, ["WASLEAPR"], ""], +["monk-ag", "monk", 5, ["WASLEAPR", "WASSEEM"], ""], +["flut-wild-ag", "flut-wild", 5, ["WASLEAPR"], ""], +["wasleapr", "wasleapr", 5, ["WASLEAPR"], ""], +["tpage-2131", "tpage-2131", 5, ["LKEIRA"], ""], +["tpage-2132", "tpage-2132", 5, ["LKEIRA"], ""], +["keira-highres-ag", "keira-highres", 5, ["LKEIRA", "SLUMBSET", "FREECAST", "MUSEUM3", "MUSEUM"], ""], +["lkeira", "lkeira", 5, ["LKEIRA"], ""], +["tpage-1527", "tpage-1527", 5, ["LJAK"], ""], +["ljak", "ljak", 5, ["LJAK"], ""], +["tpage-2428", "tpage-2428", 5, ["SLUMBSET"], ""], +["tpage-2432", "tpage-2432", 5, ["SLUMBSET"], ""], +["tpage-2429", "tpage-2429", 5, ["SLUMBSET"], ""], +["tpage-2430", "tpage-2430", 5, ["SLUMBSET"], ""], +["slumbset", "slumbset", 5, ["SLUMBSET"], ""], +["factory-boss-part", "factory-boss-part", 5, ["FACD"], ""], +["factory-boss-setup", "factory-boss-setup", 5, ["FACD"], ""], +["missile-bot", "missile-bot", 5, ["FACD"], ""], +["factory-boss-states", "factory-boss-states", 5, ["FACD"], ""], +["factory-boss-scenes", "factory-boss-scenes", 5, ["FACD"], ""], +["tpage-2881", "tpage-2881", 5, ["FACD"], ""], +["tpage-2884", "tpage-2884", 5, ["FACD"], ""], +["tpage-2883", "tpage-2883", 5, ["FACD"], ""], +["tpage-2882", "tpage-2882", 5, ["FACD"], ""], +["tpage-2885", "tpage-2885", 5, ["FACD"], ""], +["tpage-2988", "tpage-2988", 5, ["FACD"], ""], +["tpage-2736", "tpage-2736", 5, ["FACD"], ""], +["errol-lowres-ag", "errol-lowres", 5, ["FACD", "DESBOSS2"], ""], +["missile-bot-ag", "missile-bot", 5, ["FACD"], ""], +["eco-crystal-light-ag", "eco-crystal-light", 5, ["FACD", "WASCAST", "LNSTOBB"], ""], +["fac-warp-effect-ag", "fac-warp-effect", 5, ["FACD"], ""], +["fac-drop-plat-ag", "fac-drop-plat", 5, ["FACD"], ""], +["factoryd-vis", "factoryd-vis", 5, ["FACD"], ""], +["nst-eggs-h", "nst-eggs-h", 5, ["LWASSIG"], ""], +["sig-rider", "sig-rider", 5, ["LWASSIG"], ""], +["nst-gas", "nst-gas", 5, ["LWASSIG"], ""], +["nst-tasks", "nst-tasks", 5, ["LWASSIG"], ""], +["tpage-1343", "tpage-1343", 5, ["LWASSIG"], ""], +["tpage-1488", "tpage-1488", 5, ["LWASSIG"], ""], +["tpage-1698", "tpage-1698", 5, ["LWASSIG"], ""], +["tpage-1843", "tpage-1843", 5, ["LWASSIG"], ""], +["sig-rider-ag", "sig-rider", 5, ["LWASSIG"], ""], +["lwassig", "lwassig", 5, ["LWASSIG"], ""], +["tpage-2901", "tpage-2901", 5, ["LBIPED"], ""], +["lbiped", "lbiped", 5, ["LBIPED"], ""], +["des-cactus", "des-cactus", 5, ["DESD", "WIN"], ""], +["desertd-obs", "desertd-obs", 5, ["DESD", "WIN"], ""], +["desertd-texture", "desertd-texture", 5, ["DESD", "WIN"], ""], +["tpage-1382", "tpage-1382", 5, ["DESD"], ""], +["tpage-1383", "tpage-1383", 5, ["DESD"], ""], +["tpage-1381", "tpage-1381", 5, ["DESD"], ""], +["tpage-3384", "tpage-3384", 5, ["DESD"], ""], +["des-cactus-b-ag", "des-cactus-b", 5, ["DESD", "WIN"], ""], +["des-cactus-a-ag", "des-cactus-a", 5, ["DESD", "WIN"], ""], +["desertd-vis", "desertd-vis", 5, ["DESD"], ""], +["ctyfarm-obs", "ctyfarm-obs", 5, ["CFB", "CFA"], ""], +["ctyfarma-part", "ctyfarma-part", 5, ["CFB", "CFA"], ""], +["ctyfarmb-part", "ctyfarmb-part", 5, ["CFB", "CFA"], ""], +["tpage-258", "tpage-258", 5, ["CFB"], ""], +["tpage-256", "tpage-256", 5, ["CFB"], ""], +["tpage-257", "tpage-257", 5, ["CFB"], ""], +["tpage-255", "tpage-255", 5, ["CFB"], ""], +["tpage-259", "tpage-259", 5, ["CFB"], ""], +["tpage-253", "tpage-253", 5, ["CFB"], ""], +["tpage-250", "tpage-250", 5, ["CFB"], ""], +["yakow-ag", "yakow", 5, ["CFB"], ""], +["farm-chilirots-ag", "farm-chilirots", 5, ["CFB", "CFA"], ""], +["farm-cabbage-ag", "farm-cabbage", 5, ["CFB", "CFA"], ""], +["farm-marrow-ag", "farm-marrow", 5, ["CFB", "CFA"], ""], +["farm-beetree-ag", "farm-beetree", 5, ["CFB", "CFA"], ""], +["farm-small-cabbage-ag", "farm-small-cabbage", 5, ["CFB", "CFA"], ""], +["farm-sprinkler-barrels-ag", "farm-sprinkler-barrels", 5, ["CFB", "CFA"], ""], +["ctyfarmb-vis", "ctyfarmb-vis", 5, ["CFB"], ""], +["tpage-1967", "tpage-1967", 5, ["FREECAST"], ""], +["tpage-1969", "tpage-1969", 5, ["FREECAST"], ""], +["tpage-1968", "tpage-1968", 5, ["FREECAST"], ""], +["onin-highres-ag", "onin-highres", 5, ["FREECAST", "ONINTENT", "MUSEUM"], ""], +["purple-two-ag", "purple-two", 5, ["FREECAST"], ""], +["freecast", "freecast", 5, ["FREECAST"], ""], +["tpage-1127", "tpage-1127", 5, ["SEG"], ""], +["tpage-1133", "tpage-1133", 5, ["SEG"], ""], +["tpage-1128", "tpage-1128", 5, ["SEG"], ""], +["tpage-1126", "tpage-1126", 5, ["SEG"], ""], +["sewg-vis", "sewg-vis", 5, ["SEG"], ""], +["hover-nav-factoryd", "hover-nav-factoryd", 5, ["FACTORYA"], ""], +["fac-part", "fac-part", 5, ["FACTORYA"], ""], +["factory-mood", "factory-mood", 5, ["FACTORYA"], ""], +["factory-scenes", "factory-scenes", 5, ["FACTORYA"], ""], +["factoryc-manager", "factoryc-manager", 5, ["FACTORYA"], ""], +["tpage-536", "tpage-536", 5, ["FACTORYA"], ""], +["tpage-3011", "tpage-3011", 5, ["FACTORYA"], ""], +["tpage-535", "tpage-535", 5, ["FACTORYA"], ""], +["tpage-3102", "tpage-3102", 5, ["FACTORYA"], ""], +["fac-fma-breaking-bits-ag", "fac-fma-breaking-bits", 5, ["FACTORYA"], ""], +["lfac-hanger-door-ag", "lfac-hanger-door", 5, ["FACTORYA", "LFACRM1"], ""], +["factorya", "factorya", 5, ["FACTORYA"], ""], +["was-squad-control", "was-squad-control", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-h", "wvehicle-h", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-part", "wvehicle-part", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-obs", "wvehicle-obs", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-wheel", "wvehicle-wheel", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-effects", "wvehicle-effects", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle", "wvehicle", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-util", "wvehicle-util", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-ai", "wvehicle-ai", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-race", "wvehicle-race", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-states", "wvehicle-states", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-physics", "wvehicle-physics", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wvehicle-hud", "wvehicle-hud", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-projectiles", "wcar-projectiles", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar", "wcar", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-turtle", "wcar-turtle", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-snake", "wcar-snake", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-scorpion", "wcar-scorpion", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-toad", "wcar-toad", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-fox", "wcar-fox", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-rhino", "wcar-rhino", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-mirage", "wcar-mirage", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-x-ride", "wcar-x-ride", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["wcar-marauder", "wcar-marauder", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["w-parking-spot", "w-parking-spot", 5, ["LPATK", "LFACCAR", "WASALL"], ""], +["king-rider", "king-rider", 5, ["LPATK"], ""], +["rubble-attack", "rubble-attack", 5, ["LPATK"], ""], +["jak-pilot+0-ag", "jak-pilot+0", 5, ["LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "LFACTORY", "COMBA"], ""], +["jak-pilot-wcar+0-ag", "jak-pilot-wcar+0", 5, ["LPATK", "RAILA", "LFACCAR", "WASALL", "COMBA"], ""], +["tpage-3408", "tpage-3408", 5, ["LPATK"], ""], +["tpage-3263", "tpage-3263", 5, ["LPATK"], ""], +["tpage-3250", "tpage-3250", 5, ["LPATK"], ""], +["tpage-3235", "tpage-3235", 5, ["LPATK"], ""], +["king-rider-ag", "king-rider", 5, ["LPATK"], ""], +["rhino-ag", "rhino", 5, ["LPATK", "WASALL"], ""], +["rub-electric-gate-switch-ag", "rub-electric-gate-switch", 5, ["LPATK"], ""], +["vehicle-explosion-ag", "vehicle-explosion", 5, ["LPATK", "RAILA", "LFACCAR", "CWI", "WASALL", "COMBA"], ""], +["dm-missile-target-ag", "dm-missile-target", 5, ["LPATK"], ""], +["lpattack-vis", "lpattack-vis", 5, ["LPATK"], ""], +["tpage-1838", "tpage-1838", 5, ["FRSTX"], ""], +["tpage-1839", "tpage-1839", 5, ["FRSTX"], ""], +["tpage-3316", "tpage-3316", 5, ["FRSTX"], ""], +["tpage-3317", "tpage-3317", 5, ["FRSTX"], ""], +["forestx-vis", "forestx-vis", 5, ["FRSTX"], ""], +["tpage-742", "tpage-742", 5, ["SEB"], ""], +["tpage-753", "tpage-753", 5, ["SEB"], ""], +["tpage-743", "tpage-743", 5, ["SEB"], ""], +["sew-float-plat-ag", "sew-float-plat", 5, ["SEB"], ""], +["sewb-vis", "sewb-vis", 5, ["SEB"], ""], +["tpage-2762", "tpage-2762", 5, ["DESBCST"], ""], +["tpage-2764", "tpage-2764", 5, ["DESBCST"], ""], +["tpage-2763", "tpage-2763", 5, ["DESBCST"], ""], +["sig-highres-ag", "sig-highres", 5, ["DESBCST", "LSIGKLV", "DESHUNT", "LTOWB", "LNSTCST", "TOWERCST", "MUSEUM2", "LJAKSIG", "LDAMSIG", "LDESGCST", "LSIGJAKC", "LSIG", "LOUTRO2", "ARENACST"], ""], +["des-terraformer-break-ag", "des-terraformer-break", 5, ["DESBCST"], ""], +["snake-wheel-fma-ag", "snake-wheel-fma", 5, ["DESBCST", "LSNKWHLS", "DESBOSS1", "DESLIZ", "DESHOVER", "DESBOSS2"], ""], +["jakc-scarf-ag", "jakc-scarf", 5, ["DESBCST", "DESA"], ""], +["desbcst", "desbcst", 5, ["DESBCST"], ""], +["tpage-1380", "tpage-1380", 5, ["DESE"], ""], +["tpage-1597", "tpage-1597", 5, ["DESE"], ""], +["deserte-vis", "deserte-vis", 5, ["DESE"], ""], +["ai-task-h", "ai-task-h", 5, ["DESOASIS"], ""], +["simple-focus", "simple-focus", 5, ["DESOASIS"], ""], +["bot-h", "bot-h", 5, ["DESOASIS"], ""], +["bot", "bot", 5, ["DESOASIS"], ""], +["bot-states", "bot-states", 5, ["DESOASIS"], ""], +["ash-h", "ash-h", 5, ["DESOASIS"], ""], +["ash-task", "ash-task", 5, ["DESOASIS"], ""], +["ash-shot", "ash-shot", 5, ["DESOASIS"], ""], +["ash", "ash", 5, ["DESOASIS"], ""], +["ash-states", "ash-states", 5, ["DESOASIS"], ""], +["marauder", "marauder", 5, ["DESOASIS", "WASSTADC", "DESCHASE"], ""], +["oasis-defense", "oasis-defense", 5, ["DESOASIS"], ""], +["ash-oasis-course", "ash-oasis-course", 5, ["DESOASIS"], ""], +["tpage-1603", "tpage-1603", 5, ["DESOASIS"], ""], +["tpage-2114", "tpage-2114", 5, ["DESOASIS"], ""], +["tpage-1605", "tpage-1605", 5, ["DESOASIS"], ""], +["tpage-2408", "tpage-2408", 5, ["DESOASIS"], ""], +["ashelin-ag", "ashelin", 5, ["DESOASIS"], ""], +["marauder-male-ag", "marauder-male", 5, ["DESOASIS", "WASSTADC", "DESCHASE"], ""], +["desoasis", "desoasis", 5, ["DESOASIS"], ""], +["tpage-948", "tpage-948", 5, ["CTYCARA"], ""], +["carc-ag", "carc", 5, ["CTYCARA"], ""], +["carb-ag", "carb", 5, ["CTYCARA"], ""], +["ctycara", "ctycara", 5, ["CTYCARA"], ""], +["tpage-2292", "tpage-2292", 5, ["LSIGKLV"], ""], +["tpage-2294", "tpage-2294", 5, ["LSIGKLV"], ""], +["tpage-2293", "tpage-2293", 5, ["LSIGKLV"], ""], +["lsigklv", "lsigklv", 5, ["LSIGKLV"], ""], +["ctyindb-part", "ctyindb-part", 5, ["CIB"], ""], +["ctyindb-obs", "ctyindb-obs", 5, ["CIB"], ""], +["tpage-188", "tpage-188", 5, ["CIB"], ""], +["tpage-186", "tpage-186", 5, ["CIB"], ""], +["tpage-187", "tpage-187", 5, ["CIB"], ""], +["tpage-184", "tpage-184", 5, ["CIB"], ""], +["tpage-181", "tpage-181", 5, ["CIB"], ""], +["krimson-wall-ag", "krimson-wall", 5, ["CIB", "CIA"], ""], +["ctyindb-vis", "ctyindb-vis", 5, ["CIB"], ""], +["tpage-2858", "tpage-2858", 5, ["LBBRING2"], ""], +["lbbring2", "lbbring2", 5, ["LBBRING2"], ""], +["tpage-2312", "tpage-2312", 5, ["LTNFXHIP"], ""], +["tpage-2311", "tpage-2311", 5, ["LTNFXHIP"], ""], +["errol-effect-ag", "errol-effect", 5, ["LTNFXHIP", "DESHOVER"], ""], +["samos-effect-ag", "samos-effect", 5, ["LTNFXHIP"], ""], +["ashelin-effect-ag", "ashelin-effect", 5, ["LTNFXHIP"], ""], +["bomb-bot-movie-ag", "bomb-bot-movie", 5, ["LTNFXHIP"], ""], +["ltnfxhip", "ltnfxhip", 5, ["LTNFXHIP"], ""], +["basebutton", "basebutton", 5, ["MIA"], ""], +["mine-obs-h", "mine-obs-h", 5, ["MIA"], ""], +["mine-part", "mine-part", 5, ["MIA"], ""], +["mine-mood", "mine-mood", 5, ["MIA"], ""], +["mine-platforms", "mine-platforms", 5, ["MIA"], ""], +["mine-obs", "mine-obs", 5, ["MIA"], ""], +["mine-train", "mine-train", 5, ["MIA"], ""], +["mine-scenes", "mine-scenes", 5, ["MIA"], ""], +["mine-ocean", "mine-ocean", 5, ["MIA"], ""], +["manta", "manta", 5, ["MIA"], ""], +["gekko", "gekko", 5, ["MIA"], ""], +["rat", "rat", 5, ["MIA"], ""], +["monster-frog", "monster-frog", 5, ["MIA"], ""], +["tpage-924", "tpage-924", 5, ["MIA"], ""], +["tpage-925", "tpage-925", 5, ["MIA"], ""], +["tpage-989", "tpage-989", 5, ["MIA"], ""], +["tpage-1727", "tpage-1727", 5, ["MIA"], ""], +["min-bomb-train-ag", "min-bomb-train", 5, ["MIA", "MIB", "MINED"], ""], +["min-bomb-elevator-ag", "min-bomb-elevator", 5, ["MIA"], ""], +["min-airlock-door-ag", "min-airlock-door", 5, ["MIA"], ""], +["leggings-fma-ag", "leggings-fma", 5, ["MIA"], ""], +["min-elev-doors-ag", "min-elev-doors", 5, ["MIA"], ""], +["min-elevator-ag", "min-elevator", 5, ["MIA", "COMBN"], ""], +["min-boss-elev-ag", "min-boss-elev", 5, ["MIA"], ""], +["min-bomb-train-debris-ag", "min-bomb-train-debris", 5, ["MIA"], ""], +["minea-vis", "minea-vis", 5, ["MIA"], ""], +["mhcityb-texture", "mhcityb-texture", 5, ["MHCB"], ""], +["tpage-2345", "tpage-2345", 5, ["MHCB"], ""], +["tpage-2347", "tpage-2347", 5, ["MHCB"], ""], +["tpage-2346", "tpage-2346", 5, ["MHCB"], ""], +["tpage-2198", "tpage-2198", 5, ["MHCB"], ""], +["mhcity-tower-door-ag", "mhcity-tower-door", 5, ["MHCB"], ""], +["mhcity-puffer-large-ag", "mhcity-puffer-large", 5, ["MHCB", "LCTYDEST", "MHCA"], ""], +["mhcity-puffer-ag", "mhcity-puffer", 5, ["MHCB", "LCTYDEST", "MHCA"], ""], +["mhcity-grunt-egg-b-ag", "mhcity-grunt-egg-b", 5, ["MHCB", "MHCA"], ""], +["com-airlock-outer-mhcity-ag", "com-airlock-outer-mhcity", 5, ["MHCB", "MHCA"], ""], +["mh-spawner-ag", "mh-spawner", 5, ["MHCB"], ""], +["mhcity-grunt-egg-c-ag", "mhcity-grunt-egg-c", 5, ["MHCB", "MHCA"], ""], +["mhcity-vein-writhing-large-ag", "mhcity-vein-writhing-large", 5, ["MHCB", "MHCA"], ""], +["mhcity-vein-writhing-small-ag", "mhcity-vein-writhing-small", 5, ["MHCB", "MHCA"], ""], +["mhcity-vine-wriggler-ag", "mhcity-vine-wriggler", 5, ["MHCB", "MHCA"], ""], +["mhcity-vine-wriggler-big-ag", "mhcity-vine-wriggler-big", 5, ["MHCB", "MHCA"], ""], +["mhcity-claw-finger-small-ag", "mhcity-claw-finger-small", 5, ["MHCB", "MHCA"], ""], +["mhcity-twitch-blade-ag", "mhcity-twitch-blade", 5, ["MHCB", "MHCA"], ""], +["mhcityb-vis", "mhcityb-vis", 5, ["MHCB"], ""], +["lnstobc", "lnstobc", 5, ["LNSTOBC"], ""], +["tpage-2199", "tpage-2199", 5, ["COMBD"], ""], +["combd", "combd", 5, ["COMBD"], ""], +["rublcst-scenes", "rublcst-scenes", 5, ["RBCT"], ""], +["tpage-3403", "tpage-3403", 5, ["RBCT"], ""], +["tpage-3405", "tpage-3405", 5, ["RBCT"], ""], +["tpage-3404", "tpage-3404", 5, ["RBCT"], ""], +["tpage-3406", "tpage-3406", 5, ["RBCT"], ""], +["kid-ag", "kid", 5, ["RBCT"], ""], +["comb-rail-rider-ag", "comb-rail-rider", 5, ["RBCT", "RAILA", "RAILCST", "COMBA"], ""], +["rhino-wheel-fma-ag", "rhino-wheel-fma", 5, ["RBCT", "RUBA"], ""], +["rublcst-vis", "rublcst-vis", 5, ["RBCT"], ""], +["tpage-1479", "tpage-1479", 5, ["LTORNJNX"], ""], +["ltornjnx", "ltornjnx", 5, ["LTORNJNX"], ""], +["desbeast-path-h", "desbeast-path-h", 5, ["DESBATTL", "DESHOVER"], ""], +["desbeast-path", "desbeast-path", 5, ["DESBATTL", "DESHOVER"], ""], +["des-beast", "des-beast", 5, ["DESBATTL", "DESHOVER"], ""], +["mh-flyer", "mh-flyer", 5, ["DESBATTL"], ""], +["des-beast-2", "des-beast-2", 5, ["DESBATTL"], ""], +["beast-battle-path", "beast-battle-path", 5, ["DESBATTL"], ""], +["scorpion-gun", "scorpion-gun", 5, ["DESBATTL"], ""], +["tpage-1853", "tpage-1853", 5, ["DESBATTL"], ""], +["tpage-2173", "tpage-2173", 5, ["DESBATTL"], ""], +["tpage-2406", "tpage-2406", 5, ["DESBATTL"], ""], +["des-beast-ag", "des-beast", 5, ["DESBATTL", "DESHOVER"], ""], +["mh-flyer-ag", "mh-flyer", 5, ["DESBATTL"], ""], +["scorpion-gun-ag", "scorpion-gun", 5, ["DESBATTL"], ""], +["quantum-reflector-ag", "quantum-reflector", 5, ["DESBATTL"], ""], +["mh-flyer-missile-ag", "mh-flyer-missile", 5, ["DESBATTL"], ""], +["desbattl", "desbattl", 5, ["DESBATTL"], ""], +["tpage-1121", "tpage-1121", 5, ["SEK"], ""], +["tpage-1784", "tpage-1784", 5, ["SEK"], ""], +["tpage-1783", "tpage-1783", 5, ["SEK"], ""], +["sew-curved-door-ag", "sew-curved-door", 5, ["SEK", "SEF"], ""], +["sewk-vis", "sewk-vis", 5, ["SEK"], ""], +["tpage-2588", "tpage-2588", 5, ["LSNKWHLS"], ""], +["lsnkwhls", "lsnkwhls", 5, ["LSNKWHLS"], ""], +["tpage-3141", "tpage-3141", 5, ["LMHCB"], ""], +["lmhcityb-vis", "lmhcityb-vis", 5, ["LMHCB"], ""], +["tpage-1320", "tpage-1320", 5, ["LBOMBBOT"], ""], +["tpage-2384", "tpage-2384", 5, ["LBOMBBOT"], ""], +["bombbot-ag", "bombbot", 5, ["LBOMBBOT", "LCTYASS", "LBLOWTKG"], ""], +["bombbot-bomb-ag", "bombbot-bomb", 5, ["LBOMBBOT", "LCTYASS"], ""], +["lbombbot", "lbombbot", 5, ["LBOMBBOT"], ""], +["tpage-3306", "tpage-3306", 5, ["OUTCAST3"], ""], +["tpage-3307", "tpage-3307", 5, ["OUTCAST3"], ""], +["torn-simple-ag", "torn-simple", 5, ["OUTCAST3"], ""], +["keira-simple-ag", "keira-simple", 5, ["OUTCAST3"], ""], +["outcast3", "outcast3", 5, ["OUTCAST3"], ""], +["tpage-2978", "tpage-2978", 5, ["LBLOWTMH"], ""], +["bt-grunt-ag", "bt-grunt", 5, ["LBLOWTMH"], ""], +["bt-roboguard-ag", "bt-roboguard", 5, ["LBLOWTMH"], ""], +["lblowtmh", "lblowtmh", 5, ["LBLOWTMH"], ""], +["templed-obs", "templed-obs", 5, ["TEMD"], ""], +["tpage-2619", "tpage-2619", 5, ["TEMD"], ""], +["tpage-2622", "tpage-2622", 5, ["TEMD"], ""], +["tpage-3101", "tpage-3101", 5, ["TEMD"], ""], +["tpage-2623", "tpage-2623", 5, ["TEMD"], ""], +["tpage-2960", "tpage-2960", 5, ["TEMD"], ""], +["seem-highres-ag", "seem-highres", 5, ["TEMD", "OUTROCST", "WASCAST", "TEMPLEE", "LSEEMWCA", "MUSEUM", "WASSEEM", "WCASEEM", "LDAMPKSM", "ARENACST"], ""], +["tpl-break-bridge-ag", "tpl-break-bridge", 5, ["TEMD"], ""], +["time-map-ag", "time-map", 5, ["TEMD", "FRSTA"], ""], +["tpl-bridge-debris-ag", "tpl-bridge-debris", 5, ["TEMD"], ""], +["templed-vis", "templed-vis", 5, ["TEMD"], ""], +["tpage-2530", "tpage-2530", 5, ["LTOWCITY"], ""], +["tpage-2531", "tpage-2531", 5, ["LTOWCITY"], ""], +["ltowcity", "ltowcity", 5, ["LTOWCITY"], ""], +["tpage-2596", "tpage-2596", 5, ["OUTROCST"], ""], +["tpage-2597", "tpage-2597", 5, ["OUTROCST"], ""], +["tess-highres-ag", "tess-highres", 5, ["OUTROCST", "MUSEUM", "GGA"], ""], +["outrocst", "outrocst", 5, ["OUTROCST"], ""], +["tpage-1714", "tpage-1714", 5, ["WASCAST"], ""], +["tpage-2323", "tpage-2323", 5, ["WASCAST"], ""], +["breastplate-ag", "breastplate", 5, ["WASCAST"], ""], +["battle-amulet-ag", "battle-amulet", 5, ["WASCAST", "CGB", "ARENACST"], ""], +["wascast", "wascast", 5, ["WASCAST"], ""], +["lfacrm2-mood", "lfacrm2-mood", 5, ["LFACRM2"], ""], +["tpage-2167", "tpage-2167", 5, ["LFACRM2"], ""], +["tpage-3017", "tpage-3017", 5, ["LFACRM2"], ""], +["tpage-2282", "tpage-2282", 5, ["LFACRM2"], ""], +["tpage-2168", "tpage-2168", 5, ["LFACRM2"], ""], +["fac-elevator-a-ag", "fac-elevator-a", 5, ["LFACRM2"], ""], +["lfacrm2", "lfacrm2", 5, ["LFACRM2"], ""], +["was-pre-game", "was-pre-game", 5, ["WASPGAME"], ""], +["tpage-1662", "tpage-1662", 5, ["WASPGAME"], ""], +["tpage-1561", "tpage-1561", 5, ["WASPGAME"], ""], +["neo-satellite-heart-ag", "neo-satellite-heart", 5, ["WASPGAME"], ""], +["neo-satellite-fma-ag", "neo-satellite-fma", 5, ["WASPGAME"], ""], +["neo-satellite-game-ring-ag", "neo-satellite-game-ring", 5, ["WASPGAME"], ""], +["neo-satellite-ps-symbols-ag", "neo-satellite-ps-symbols", 5, ["WASPGAME"], ""], +["waspgame", "waspgame", 5, ["WASPGAME"], ""], +["tpage-2485", "tpage-2485", 5, ["RAILE"], ""], +["dummy1-ag", "dummy1", 5, ["RAILE"], ""], +["dummy2-ag", "dummy2", 5, ["RAILE"], ""], +["dummy3-ag", "dummy3", 5, ["RAILE"], ""], +["dummy4-ag", "dummy4", 5, ["RAILE"], ""], +["raile", "raile", 5, ["RAILE"], ""], +["metalhead-grunt", "metalhead-grunt", 5, ["CTYPESB"], ""], +["metalhead-predator", "metalhead-predator", 5, ["CTYPESB"], ""], +["tpage-1758", "tpage-1758", 5, ["CTYPESB"], ""], +["city-grunt-ag", "city-grunt", 5, ["CTYPESB"], ""], +["city-flitter-ag", "city-flitter", 5, ["CTYPESB", "CGB"], ""], +["ctypesb", "ctypesb", 5, ["CTYPESB"], ""], +["terraformer-part", "terraformer-part", 5, ["DESBOSS1"], ""], +["terraformer-setup", "terraformer-setup", 5, ["DESBOSS1"], ""], +["tpage-1756", "tpage-1756", 5, ["DESBOSS1"], ""], +["tpage-3172", "tpage-3172", 5, ["DESBOSS1"], ""], +["tpage-3176", "tpage-3176", 5, ["DESBOSS1"], ""], +["tpage-2643", "tpage-2643", 5, ["DESBOSS1"], ""], +["terraformer-leg-c-ag", "terraformer-leg-c", 5, ["DESBOSS1", "PRECD"], ""], +["terraformer-head-ag", "terraformer-head", 5, ["DESBOSS1", "PRECD", "DESBOSS2"], ""], +["terraformer-ag", "terraformer", 5, ["DESBOSS1", "PRECD"], ""], +["terraformer-leg-b-ag", "terraformer-leg-b", 5, ["DESBOSS1", "PRECD"], ""], +["terraformer-leg-a-ag", "terraformer-leg-a", 5, ["DESBOSS1", "PRECD"], ""], +["terraformer-spike-ag", "terraformer-spike", 5, ["DESBOSS1", "PRECD"], ""], +["terraformer-target-ag", "terraformer-target", 5, ["DESBOSS1"], ""], +["desboss1", "desboss1", 5, ["DESBOSS1"], ""], +["freehq-part", "freehq-part", 5, ["FREEHQ"], ""], +["freehq-scenes", "freehq-scenes", 5, ["FREEHQ"], ""], +["tpage-798", "tpage-798", 5, ["FREEHQ"], ""], +["tpage-1167", "tpage-1167", 5, ["FREEHQ"], ""], +["tpage-1793", "tpage-1793", 5, ["FREEHQ"], ""], +["tpage-939", "tpage-939", 5, ["FREEHQ"], ""], +["tpage-1464", "tpage-1464", 5, ["FREEHQ"], ""], +["tpage-1035", "tpage-1035", 5, ["FREEHQ"], ""], +["freehq-sml-door-ag", "freehq-sml-door", 5, ["FREEHQ"], ""], +["freehq", "freehq", 5, ["FREEHQ"], ""], +["tpage-1463", "tpage-1463", 5, ["LTORN"], ""], +["ltorn", "ltorn", 5, ["LTORN"], ""], +["hover-nav-towera", "hover-nav-towera", 5, ["TOWERA"], ""], +["tower-part", "tower-part", 5, ["TOWERA"], ""], +["tower-mood", "tower-mood", 5, ["TOWERA"], ""], +["tower-scenes", "tower-scenes", 5, ["TOWERA"], ""], +["tower-obs", "tower-obs", 5, ["TOWERA"], ""], +["tpage-2698", "tpage-2698", 5, ["TOWERA"], ""], +["tpage-2699", "tpage-2699", 5, ["TOWERA"], ""], +["towera", "towera", 5, ["TOWERA"], ""], +["tpage-2133", "tpage-2133", 5, ["LSAMOS"], ""], +["lsamos", "lsamos", 5, ["LSAMOS"], ""], +["tpage-2237", "tpage-2237", 5, ["LFORP"], ""], +["tpage-2357", "tpage-2357", 5, ["LFORP"], ""], +["tpage-2402", "tpage-2402", 5, ["LFORP"], ""], +["mh-plant-ag", "mh-plant", 5, ["LFORP"], ""], +["shoulder-plates-ag", "shoulder-plates", 5, ["LFORP"], ""], +["lforplnt-vis", "lforplnt-vis", 5, ["LFORP"], ""], +["tpage-246", "tpage-246", 5, ["CFA"], ""], +["tpage-244", "tpage-244", 5, ["CFA"], ""], +["tpage-245", "tpage-245", 5, ["CFA"], ""], +["tpage-243", "tpage-243", 5, ["CFA"], ""], +["tpage-247", "tpage-247", 5, ["CFA"], ""], +["tpage-241", "tpage-241", 5, ["CFA"], ""], +["tpage-238", "tpage-238", 5, ["CFA"], ""], +["ctyfarma-vis", "ctyfarma-vis", 5, ["CFA"], ""], +["cty-destroy-grid", "cty-destroy-grid", 5, ["LJINX"], ""], +["tpage-1826", "tpage-1826", 5, ["LJINX"], ""], +["tpage-2552", "tpage-2552", 5, ["LJINX"], ""], +["jinx-ag", "jinx", 5, ["LJINX"], ""], +["com-power-box-ag", "com-power-box", 5, ["LJINX"], ""], +["ljinx", "ljinx", 5, ["LJINX"], ""], +["tpage-1925", "tpage-1925", 5, ["SEO"], ""], +["tpage-1927", "tpage-1927", 5, ["SEO"], ""], +["tpage-1926", "tpage-1926", 5, ["SEO"], ""], +["neo-wasp-ag", "neo-wasp", 5, ["SEO", "SEL"], ""], +["sewo-vis", "sewo-vis", 5, ["SEO"], ""], +["prim-beam", "prim-beam", 5, ["PRECA", "PRECD"], ""], +["precurd-obs", "precurd-obs", 5, ["PRECA", "PRECD"], ""], +["precurd-scenes", "precurd-scenes", 5, ["PRECA", "PRECD"], ""], +["precurd-part", "precurd-part", 5, ["PRECA", "PRECD"], ""], +["hover-nav-precura", "hover-nav-precura", 5, ["PRECA"], ""], +["precura-mood", "precura-mood", 5, ["PRECA"], ""], +["precura-part", "precura-part", 5, ["PRECA"], ""], +["precura-obs", "precura-obs", 5, ["PRECA"], ""], +["precura-obs2", "precura-obs2", 5, ["PRECA"], ""], +["tpage-2632", "tpage-2632", 5, ["PRECA"], ""], +["tpage-2638", "tpage-2638", 5, ["PRECA"], ""], +["tpage-2634", "tpage-2634", 5, ["PRECA"], ""], +["tpage-2635", "tpage-2635", 5, ["PRECA"], ""], +["tpage-2678", "tpage-2678", 5, ["PRECA"], ""], +["precur-generator-d-ag", "precur-generator-d", 5, ["PRECA"], ""], +["precur-generator-a-ag", "precur-generator-a", 5, ["PRECA"], ""], +["precur-bomb-ag", "precur-bomb", 5, ["PRECA"], ""], +["precur-jump-plate-ag", "precur-jump-plate", 5, ["PRECA"], ""], +["precur-generator-d-gem-ag", "precur-generator-d-gem", 5, ["PRECA"], ""], +["precura-vis", "precura-vis", 5, ["PRECA"], ""], +["tpage-2299", "tpage-2299", 5, ["TOWERC"], ""], +["tpage-2302", "tpage-2302", 5, ["TOWERC"], ""], +["tow-break-ag", "tow-break", 5, ["TOWERC"], ""], +["towerc", "towerc", 5, ["TOWERC"], ""], +["wascitya-obs", "wascitya-obs", 5, ["WCA"], ""], +["tpage-632", "tpage-632", 5, ["WCA"], ""], +["tpage-635", "tpage-635", 5, ["WCA"], ""], +["tpage-633", "tpage-633", 5, ["WCA"], ""], +["tpage-634", "tpage-634", 5, ["WCA"], ""], +["waspala-elevator-ag", "waspala-elevator", 5, ["WCA"], ""], +["wascity-water-pump-ag", "wascity-water-pump", 5, ["WCA"], ""], +["wascity-elevator-door-ag", "wascity-elevator-door", 5, ["WCA"], ""], +["wascity-stad-door-ag", "wascity-stad-door", 5, ["WCA"], ""], +["wascitya-vis", "wascitya-vis", 5, ["WCA"], ""], +["tpage-744", "tpage-744", 5, ["SEC"], ""], +["tpage-754", "tpage-754", 5, ["SEC"], ""], +["tpage-745", "tpage-745", 5, ["SEC"], ""], +["tpage-751", "tpage-751", 5, ["SEC"], ""], +["sew-laser-guard-ag", "sew-laser-guard", 5, ["SEC"], ""], +["sewc-vis", "sewc-vis", 5, ["SEC"], ""], +["desertf-obs", "desertf-obs", 5, ["DESF"], ""], +["tpage-1384", "tpage-1384", 5, ["DESF"], ""], +["tpage-2844", "tpage-2844", 5, ["DESF"], ""], +["tpage-2871", "tpage-2871", 5, ["DESF"], ""], +["des-draw-bridge-ag", "des-draw-bridge", 5, ["DESF"], ""], +["des-jump-bridge-ag", "des-jump-bridge", 5, ["DESF"], ""], +["des-garage-door-ag", "des-garage-door", 5, ["DESF"], ""], +["desertf-vis", "desertf-vis", 5, ["DESF"], ""], +["tpage-1143", "tpage-1143", 5, ["SEL"], ""], +["tpage-1145", "tpage-1145", 5, ["SEL"], ""], +["tpage-1144", "tpage-1144", 5, ["SEL"], ""], +["tpage-1142", "tpage-1142", 5, ["SEL"], ""], +["sewl-vis", "sewl-vis", 5, ["SEL"], ""], +["destroy-dark-eco", "destroy-dark-eco", 5, ["LCTYDEST"], ""], +["tpage-3147", "tpage-3147", 5, ["LCTYDEST"], ""], +["tpage-2001", "tpage-2001", 5, ["LCTYDEST"], ""], +["tpage-2378", "tpage-2378", 5, ["LCTYDEST"], ""], +["tpage-3197", "tpage-3197", 5, ["LCTYDEST"], ""], +["mhcity-eco-dark-tower-ag", "mhcity-eco-dark-tower", 5, ["LCTYDEST"], ""], +["lctydest", "lctydest", 5, ["LCTYDEST"], ""], +["tpage-1165", "tpage-1165", 5, ["LTORNSAM"], ""], +["ltornsam", "ltornsam", 5, ["LTORNSAM"], ""], +["tpage-3415", "tpage-3415", 5, ["MUSEUM3B"], ""], +["tpage-3416", "tpage-3416", 5, ["MUSEUM3B"], ""], +["brutter-highres-ag", "brutter-highres", 5, ["MUSEUM3B"], ""], +["krew-ag", "krew", 5, ["MUSEUM3B"], ""], +["vin-ag", "vin", 5, ["MUSEUM3B"], ""], +["crocadog-highres-ag", "crocadog-highres", 5, ["MUSEUM3B"], ""], +["baron-highres-ag", "baron-highres", 5, ["MUSEUM3B"], ""], +["errol-highres-ag", "errol-highres", 5, ["MUSEUM3B"], ""], +["kid-highres-ag", "kid-highres", 5, ["MUSEUM3B"], ""], +["museum3b", "museum3b", 5, ["MUSEUM3B"], ""], +["tpage-748", "tpage-748", 5, ["SEE"], ""], +["tpage-756", "tpage-756", 5, ["SEE"], ""], +["tpage-749", "tpage-749", 5, ["SEE"], ""], +["tpage-755", "tpage-755", 5, ["SEE"], ""], +["sew-moving-step-a-ag", "sew-moving-step-a", 5, ["SEE"], ""], +["sew-power-switch-ag", "sew-power-switch", 5, ["SEE"], ""], +["sew-moving-step-b-ag", "sew-moving-step-b", 5, ["SEE"], ""], +["sewe-vis", "sewe-vis", 5, ["SEE"], ""], +["tpage-1809", "tpage-1809", 5, ["DESHUNT"], ""], +["tpage-1808", "tpage-1808", 5, ["DESHUNT"], ""], +["deshunt", "deshunt", 5, ["DESHUNT"], ""], +["comb-mood", "comb-mood", 5, ["RAILA", "COMBA"], ""], +["comb-part", "comb-part", 5, ["RAILA", "COMBA"], ""], +["comb-obs", "comb-obs", 5, ["RAILA", "COMBA"], ""], +["comb-sentry", "comb-sentry", 5, ["RAILA", "COMBA"], ""], +["comb-field", "comb-field", 5, ["RAILA", "COMBA"], ""], +["comb-scenes", "comb-scenes", 5, ["RAILA", "COMBA"], ""], +["h-sled", "h-sled", 5, ["RAILA", "COMBA"], ""], +["comb-travel", "comb-travel", 5, ["RAILA", "COMBA"], ""], +["comba-init", "comba-init", 5, ["RAILA", "COMBA"], ""], +["jak-pilot-hcar+0-ag", "jak-pilot-hcar+0", 5, ["RAILA", "CWI", "LFACTORY", "COMBA"], ""], +["tpage-3091", "tpage-3091", 5, ["RAILA"], ""], +["tpage-2501", "tpage-2501", 5, ["RAILA"], ""], +["tpage-2905", "tpage-2905", 5, ["RAILA"], ""], +["tpage-3090", "tpage-3090", 5, ["RAILA"], ""], +["tpage-3015", "tpage-3015", 5, ["RAILA"], ""], +["comb-pillar-ag", "comb-pillar", 5, ["RAILA", "COMBA"], ""], +["pre-sled-ag", "pre-sled", 5, ["RAILA", "COMBA"], ""], +["comb-obstacle-ag", "comb-obstacle", 5, ["RAILA", "COMBA"], ""], +["comb-sentinel-ag", "comb-sentinel", 5, ["RAILA", "COMBA"], ""], +["comb-energy-ring-ag", "comb-energy-ring", 5, ["RAILA", "COMBA"], ""], +["raila", "raila", 5, ["RAILA"], ""], +["desert-dust-storm", "desert-dust-storm", 5, ["TITLE", "DST"], ""], +["0credits-tx", "0credits-tx", 5, ["TITLE"], ""], +["1credits-tx", "1credits-tx", 5, ["TITLE"], ""], +["2credits-tx", "2credits-tx", 5, ["TITLE"], ""], +["3credits-tx", "3credits-tx", 5, ["TITLE"], ""], +["4credits-tx", "4credits-tx", 5, ["TITLE"], ""], +["5credits-tx", "5credits-tx", 5, ["TITLE"], ""], +["6credits-tx", "6credits-tx", 5, ["TITLE"], ""], +["7credits-tx", "7credits-tx", 5, ["TITLE"], ""], +["8credits-tx", "8credits-tx", 5, ["TITLE"], ""], +["9credits-tx", "9credits-tx", 5, ["TITLE"], ""], +["10credits-tx", "10credits-tx", 5, ["TITLE"], ""], +["credits-h", "credits-h", 5, ["TITLE"], ""], +["credits", "credits", 5, ["TITLE"], ""], +["title-obs", "title-obs", 5, ["TITLE"], ""], +["tpage-1830", "tpage-1830", 5, ["TITLE"], ""], +["tpage-1854", "tpage-1854", 5, ["TITLE"], ""], +["tpage-1324", "tpage-1324", 5, ["TITLE"], ""], +["jakthreelogo-ag", "jakthreelogo", 5, ["TITLE"], ""], +["title", "title", 5, ["TITLE"], ""], +["tpage-2055", "tpage-2055", 5, ["RUBC"], ""], +["tpage-2056", "tpage-2056", 5, ["RUBC"], ""], +["tpage-2057", "tpage-2057", 5, ["RUBC"], ""], +["rub-rhino-door-ag", "rub-rhino-door", 5, ["RUBC", "RUBA", "RUBB"], ""], +["rub-tower-ag", "rub-tower", 5, ["RUBC", "RUBA2"], ""], +["rub-electric-gate-panel-d-ag", "rub-electric-gate-panel-d", 5, ["RUBC"], ""], +["rub-electric-gate-panel-c-ag", "rub-electric-gate-panel-c", 5, ["RUBC"], ""], +["rubblec-vis", "rubblec-vis", 5, ["RUBC"], ""], +["tpage-1377", "tpage-1377", 5, ["DESB"], ""], +["tpage-1378", "tpage-1378", 5, ["DESB"], ""], +["tpage-1379", "tpage-1379", 5, ["DESB"], ""], +["air-train-ag", "air-train", 5, ["DESB", "CPO"], ""], +["desertb-vis", "desertb-vis", 5, ["DESB"], ""], +["lfaccar-init", "lfaccar-init", 5, ["LFACCAR"], ""], +["wcar-faccar", "wcar-faccar", 5, ["LFACCAR"], ""], +["tpage-2573", "tpage-2573", 5, ["LFACCAR"], ""], +["tpage-2867", "tpage-2867", 5, ["LFACCAR"], ""], +["faccar-ag", "faccar", 5, ["LFACCAR"], ""], +["lfaccar", "lfaccar", 5, ["LFACCAR"], ""], +["tpage-1520", "tpage-1520", 5, ["LNSTOA"], ""], +["tpage-1521", "tpage-1521", 5, ["LNSTOA"], ""], +["tpage-1522", "tpage-1522", 5, ["LNSTOA"], ""], +["nst-collapsing-stone-bridge-ag", "nst-collapsing-stone-bridge", 5, ["LNSTOA"], ""], +["nst-cocoon-a-ag", "nst-cocoon-a", 5, ["LNSTOA"], ""], +["mh-bat-ag", "mh-bat", 5, ["LNSTOA"], ""], +["nst-metalhead-eggs-a-ag", "nst-metalhead-eggs-a", 5, ["LNSTOA"], ""], +["nst-metalhead-eggs-c-ag", "nst-metalhead-eggs-c", 5, ["LNSTOA"], ""], +["nst-metalhead-eggs-b-ag", "nst-metalhead-eggs-b", 5, ["LNSTOA"], ""], +["lnstoba-vis", "lnstoba-vis", 5, ["LNSTOA"], ""], +["museum-3-anims+0-ag", "museum-3-anims+0", 5, ["MUSEUM3"], ""], +["tpage-3360", "tpage-3360", 5, ["MUSEUM3"], ""], +["tpage-3362", "tpage-3362", 5, ["MUSEUM3"], ""], +["tpage-3361", "tpage-3361", 5, ["MUSEUM3"], ""], +["kor-highres-ag", "kor-highres", 5, ["MUSEUM3"], ""], +["red-crimson-guard-highres-ag", "red-crimson-guard-highres", 5, ["MUSEUM3"], ""], +["youngsamos-highres-ag", "youngsamos-highres", 5, ["MUSEUM3"], ""], +["museum3", "museum3", 5, ["MUSEUM3"], ""], +["onintent-part", "onintent-part", 5, ["ONINTENT"], ""], +["onintent-scenes", "onintent-scenes", 5, ["ONINTENT"], ""], +["tpage-1158", "tpage-1158", 5, ["ONINTENT"], ""], +["tpage-1156", "tpage-1156", 5, ["ONINTENT"], ""], +["tpage-1159", "tpage-1159", 5, ["ONINTENT"], ""], +["tpage-1163", "tpage-1163", 5, ["ONINTENT"], ""], +["tpage-1157", "tpage-1157", 5, ["ONINTENT"], ""], +["onintent", "onintent", 5, ["ONINTENT"], ""], +["stadium-mood", "stadium-mood", 5, ["STA"], ""], +["stadium-part", "stadium-part", 5, ["STA"], ""], +["tpage-1591", "tpage-1591", 5, ["STA"], ""], +["tpage-2553", "tpage-2553", 5, ["STA"], ""], +["tpage-1592", "tpage-1592", 5, ["STA"], ""], +["tpage-2514", "tpage-2514", 5, ["STA"], ""], +["stadium-vis", "stadium-vis", 5, ["STA"], ""], +["arena-scenes", "arena-scenes", 5, ["WASSTADA"], ""], +["wasstad-ocean", "wasstad-ocean", 5, ["WASSTADA"], ""], +["wasstada-obs", "wasstada-obs", 5, ["WASSTADA"], ""], +["wasstada-part", "wasstada-part", 5, ["WASSTADA"], ""], +["wasstada-texture", "wasstada-texture", 5, ["WASSTADA"], ""], +["wasstada-mood", "wasstada-mood", 5, ["WASSTADA"], ""], +["tpage-405", "tpage-405", 5, ["WASSTADA"], ""], +["tpage-630", "tpage-630", 5, ["WASSTADA"], ""], +["tpage-609", "tpage-609", 5, ["WASSTADA"], ""], +["tpage-591", "tpage-591", 5, ["WASSTADA"], ""], +["wstd-arena-plat-ag", "wstd-arena-plat", 5, ["WASSTADA", "WASSTADC", "WASSTADB"], ""], +["wstd-door-ag", "wstd-door", 5, ["WASSTADA"], ""], +["wstd-flag-a-ag", "wstd-flag-a", 5, ["WASSTADA"], ""], +["wstd-square-plat-a-ag", "wstd-square-plat-a", 5, ["WASSTADA"], ""], +["wstd-blocker-ag", "wstd-blocker", 5, ["WASSTADA"], ""], +["wstd-square-plat-b-ag", "wstd-square-plat-b", 5, ["WASSTADA"], ""], +["wstd-square-plat-c-ag", "wstd-square-plat-c", 5, ["WASSTADA"], ""], +["wasstada", "wasstada", 5, ["WASSTADA"], ""], +["tpage-2187", "tpage-2187", 5, ["POWERGD"], ""], +["tpage-2249", "tpage-2249", 5, ["POWERGD"], ""], +["tpage-3164", "tpage-3164", 5, ["POWERGD"], ""], +["tpage-3181", "tpage-3181", 5, ["POWERGD"], ""], +["flitter-ag", "flitter", 5, ["POWERGD", "VOCX"], ""], +["daxter-pac-man-ag", "daxter-pac-man", 5, ["POWERGD"], ""], +["pow-rings-ag", "pow-rings", 5, ["POWERGD"], ""], +["switcher-ag", "switcher", 5, ["POWERGD"], ""], +["grunt-head-ag", "grunt-head", 5, ["POWERGD"], ""], +["powergd", "powergd", 5, ["POWERGD"], ""], +["tpage-1394", "tpage-1394", 5, ["LKLEEVER"], ""], +["lkleever", "lkleever", 5, ["LKLEEVER"], ""], +["factorya-texture", "factorya-texture", 5, ["FACB"], ""], +["factoryb-init", "factoryb-init", 5, ["FACB"], ""], +["tpage-1864", "tpage-1864", 5, ["FACB"], ""], +["tpage-1866", "tpage-1866", 5, ["FACB"], ""], +["tpage-1865", "tpage-1865", 5, ["FACB"], ""], +["tpage-1863", "tpage-1863", 5, ["FACB"], ""], +["tpage-1319", "tpage-1319", 5, ["FACB"], ""], +["fac-gun-tower-base-ag", "fac-gun-tower-base", 5, ["FACB"], ""], +["fac-gun-tower-ag", "fac-gun-tower", 5, ["FACB"], ""], +["fac-target-ag", "fac-target", 5, ["FACB"], ""], +["fac-robotank-ag", "fac-robotank", 5, ["FACB"], ""], +["fac-robotank-top-ag", "fac-robotank-top", 5, ["FACB"], ""], +["kg-fighter-ag", "kg-fighter", 5, ["FACB"], ""], +["fac-gun-tower-turret-ag", "fac-gun-tower-turret", 5, ["FACB"], ""], +["hemisplosion-ag", "hemisplosion", 5, ["FACB"], ""], +["factoryb-vis", "factoryb-vis", 5, ["FACB"], ""], +["tpage-3099", "tpage-3099", 5, ["LCTYASS"], ""], +["lctyass", "lctyass", 5, ["LCTYASS"], ""], +["mhcitya-texture", "mhcitya-texture", 5, ["MHCA"], ""], +["tpage-2342", "tpage-2342", 5, ["MHCA"], ""], +["tpage-2340", "tpage-2340", 5, ["MHCA"], ""], +["tpage-2343", "tpage-2343", 5, ["MHCA"], ""], +["tpage-2389", "tpage-2389", 5, ["MHCA"], ""], +["tpage-2197", "tpage-2197", 5, ["MHCA"], ""], +["mhcity-dark-eco-door-break-ag", "mhcity-dark-eco-door-break", 5, ["MHCA"], ""], +["mhcity-dark-eco-door-ag", "mhcity-dark-eco-door", 5, ["MHCA"], ""], +["mhcity-dark-eco-nodule-ag", "mhcity-dark-eco-nodule", 5, ["MHCA"], ""], +["mhcitya-vis", "mhcitya-vis", 5, ["MHCA"], ""], +["tpage-2647", "tpage-2647", 5, ["LTOWB"], ""], +["tpage-2653", "tpage-2653", 5, ["LTOWB"], ""], +["tpage-2648", "tpage-2648", 5, ["LTOWB"], ""], +["tpage-2649", "tpage-2649", 5, ["LTOWB"], ""], +["tpage-2655", "tpage-2655", 5, ["LTOWB"], ""], +["tpage-2654", "tpage-2654", 5, ["LTOWB"], ""], +["tow-top-ag", "tow-top", 5, ["LTOWB"], ""], +["tow-break-base-ag", "tow-break-base", 5, ["LTOWB"], ""], +["tow-warp-effect-ag", "tow-warp-effect", 5, ["LTOWB"], ""], +["ltowerb-vis", "ltowerb-vis", 5, ["LTOWB"], ""], +["tpage-1766", "tpage-1766", 5, ["LNSTCST"], ""], +["tpage-1768", "tpage-1768", 5, ["LNSTCST"], ""], +["tpage-1767", "tpage-1767", 5, ["LNSTCST"], ""], +["desert-eggwall-break-ag", "desert-eggwall-break", 5, ["LNSTCST"], ""], +["scorpion-wheel-fma-ag", "scorpion-wheel-fma", 5, ["LNSTCST"], ""], +["lnstcst", "lnstcst", 5, ["LNSTCST"], ""], +["tpage-1715", "tpage-1715", 5, ["DESRESCG"], ""], +["tpage-1716", "tpage-1716", 5, ["DESRESCG"], ""], +["desert-transport-ag", "desert-transport", 5, ["DESRESCG"], ""], +["desrescg", "desrescg", 5, ["DESRESCG"], ""], +["tpage-428", "tpage-428", 5, ["INTPALRF"], ""], +["tpage-429", "tpage-429", 5, ["INTPALRF"], ""], +["tpage-430", "tpage-430", 5, ["INTPALRF"], ""], +["intpalrf", "intpalrf", 5, ["INTPALRF"], ""], +["tpage-3142", "tpage-3142", 5, ["LMHCA"], ""], +["lmhcitya-vis", "lmhcitya-vis", 5, ["LMHCA"], ""], +["tpage-3223", "tpage-3223", 5, ["TOWERCST"], ""], +["tpage-2983", "tpage-2983", 5, ["TOWERCST"], ""], +["tpage-3224", "tpage-3224", 5, ["TOWERCST"], ""], +["tpage-3225", "tpage-3225", 5, ["TOWERCST"], ""], +["tpage-2985", "tpage-2985", 5, ["TOWERCST"], ""], +["tpage-2984", "tpage-2984", 5, ["TOWERCST"], ""], +["mhcity-tower-door-break-ag", "mhcity-tower-door-break", 5, ["TOWERCST"], ""], +["purple-three-ag", "purple-three", 5, ["TOWERCST"], ""], +["towercst", "towercst", 5, ["TOWERCST"], ""], +["tpage-2483", "tpage-2483", 5, ["RAILF"], ""], +["railf", "railf", 5, ["RAILF"], ""], +["ctyinda-part", "ctyinda-part", 5, ["CIA"], ""], +["ctyinda-obs", "ctyinda-obs", 5, ["CIA"], ""], +["tpage-180", "tpage-180", 5, ["CIA"], ""], +["tpage-1401", "tpage-1401", 5, ["CIA"], ""], +["tpage-179", "tpage-179", 5, ["CIA"], ""], +["tpage-177", "tpage-177", 5, ["CIA"], ""], +["tpage-175", "tpage-175", 5, ["CIA"], ""], +["ctyinda-evil-streetlamp-ag", "ctyinda-evil-streetlamp", 5, ["CIA"], ""], +["vin-door-ctyinda-ag", "vin-door-ctyinda", 5, ["CIA", "VIN"], ""], +["ctyinda-vis", "ctyinda-vis", 5, ["CIA"], ""], +["ctycarkg", "ctycarkg", 5, ["CTYCARKG"], ""], +["jak-kanga+0-ag", "jak-kanga+0", 5, ["WASCHASE"], ""], +["kanga-lizard", "kanga-lizard", 5, ["WASCHASE"], ""], +["tpage-1321", "tpage-1321", 5, ["WASCHASE"], ""], +["tpage-1356", "tpage-1356", 5, ["WASCHASE"], ""], +["waschase", "waschase", 5, ["WASCHASE"], ""], +["tpage-3287", "tpage-3287", 5, ["LFACO"], ""], +["tpage-3288", "tpage-3288", 5, ["LFACO"], ""], +["lfacout-vis", "lfacout-vis", 5, ["LFACO"], ""], +["tpage-1213", "tpage-1213", 5, ["WIN"], ""], +["tpage-1214", "tpage-1214", 5, ["WIN"], ""], +["tpage-1215", "tpage-1215", 5, ["WIN"], ""], +["tpage-1037", "tpage-1037", 5, ["WIN"], ""], +["wasintro-vis", "wasintro-vis", 5, ["WIN"], ""], +["tpage-2909", "tpage-2909", 5, ["TEMPLEE"], ""], +["templee", "templee", 5, ["TEMPLEE"], ""], +["lbbspirt", "lbbspirt", 5, ["LBBSPIRT"], ""], +["museum-2-anims+0-ag", "museum-2-anims+0", 5, ["MUSEUM2"], ""], +["tpage-3311", "tpage-3311", 5, ["MUSEUM2"], ""], +["tpage-3313", "tpage-3313", 5, ["MUSEUM2"], ""], +["tpage-3312", "tpage-3312", 5, ["MUSEUM2"], ""], +["ottsel-daxpants-ag", "ottsel-daxpants", 5, ["MUSEUM2", "LOUTRO2"], ""], +["ottsel-dummy-ag", "ottsel-dummy", 5, ["MUSEUM2", "RAILCST", "LOUTRO2"], ""], +["ottsel-surfer-ag", "ottsel-surfer", 5, ["MUSEUM2", "LOUTRO", "RAILCST"], ""], +["ottsel-veger-ag", "ottsel-veger", 5, ["MUSEUM2", "LOUTRO", "RAILCST"], ""], +["ottsel-leader-ag", "ottsel-leader", 5, ["MUSEUM2", "LOUTRO", "RAILCST"], ""], +["ottsel-tess-ag", "ottsel-tess", 5, ["MUSEUM2", "LOUTRO2"], ""], +["museum2", "museum2", 5, ["MUSEUM2"], ""], +["tpage-1073", "tpage-1073", 5, ["INTTITLE"], ""], +["inttitle", "inttitle", 5, ["INTTITLE"], ""], +["hover-nav-lpattack", "hover-nav-lpattack", 5, ["STAA"], ""], +["stadiuma-mood", "stadiuma-mood", 5, ["STAA"], ""], +["stadium-obs", "stadium-obs", 5, ["STAA"], ""], +["stadium-scenes", "stadium-scenes", 5, ["STAA"], ""], +["rubblea-init", "rubblea-init", 5, ["STAA"], ""], +["rubble-texture", "rubble-texture", 5, ["STAA"], ""], +["stadiuma-part", "stadiuma-part", 5, ["STAA"], ""], +["rubble-part", "rubble-part", 5, ["STAA"], ""], +["rubble-obs", "rubble-obs", 5, ["STAA"], ""], +["spyder", "spyder", 5, ["STAA"], ""], +["rapid-gunner", "rapid-gunner", 5, ["STAA"], ""], +["dm-mine-spider", "dm-mine-spider", 5, ["STAA"], ""], +["mantis", "mantis", 5, ["STAA", "VOCA"], ""], +["tpage-2814", "tpage-2814", 5, ["STAA"], ""], +["tpage-2816", "tpage-2816", 5, ["STAA"], ""], +["tpage-2815", "tpage-2815", 5, ["STAA"], ""], +["tpage-2598", "tpage-2598", 5, ["STAA"], ""], +["tpage-2450", "tpage-2450", 5, ["STAA"], ""], +["stadium-sails-left-ag", "stadium-sails-left", 5, ["STAA"], ""], +["stadium-sails-right-ag", "stadium-sails-right", 5, ["STAA"], ""], +["stadiuma-vis", "stadiuma-vis", 5, ["STAA"], ""], +["tpage-3417", "tpage-3417", 5, ["MUSEUM4B"], ""], +["babak-ag", "babak", 5, ["MUSEUM4B"], ""], +["museum4b", "museum4b", 5, ["MUSEUM4B"], ""], +["tpage-2637", "tpage-2637", 5, ["PRECD"], ""], +["tpage-2639", "tpage-2639", 5, ["PRECD"], ""], +["tpage-2912", "tpage-2912", 5, ["PRECD"], ""], +["tpage-2712", "tpage-2712", 5, ["PRECD"], ""], +["tpage-3188", "tpage-3188", 5, ["PRECD"], ""], +["tpage-3387", "tpage-3387", 5, ["PRECD"], ""], +["precur-bridge-path-break-ag", "precur-bridge-path-break", 5, ["PRECD"], ""], +["dm-ship-ag", "dm-ship", 5, ["PRECD", "FRSTA"], ""], +["precur-wall-window-big-ag", "precur-wall-window-big", 5, ["PRECD"], ""], +["precur-bridge-a-path-break-ag", "precur-bridge-a-path-break", 5, ["PRECD"], ""], +["precur-bridge-a-blocks-break-ag", "precur-bridge-a-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-b-path-break-ag", "precur-bridge-b-path-break", 5, ["PRECD"], ""], +["precur-bridge-e-path-break-ag", "precur-bridge-e-path-break", 5, ["PRECD"], ""], +["precur-bridge-d-path-break-ag", "precur-bridge-d-path-break", 5, ["PRECD"], ""], +["precur-bridge-o-blocks-break-ag", "precur-bridge-o-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-d-blocks-break-ag", "precur-bridge-d-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-c-path-break-ag", "precur-bridge-c-path-break", 5, ["PRECD"], ""], +["precur-bridge-b-blocks-break-ag", "precur-bridge-b-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-c-blocks-break-ag", "precur-bridge-c-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-h-blocks-break-ag", "precur-bridge-h-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-l-blocks-break-ag", "precur-bridge-l-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-e-blocks-break-ag", "precur-bridge-e-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-k-blocks-break-ag", "precur-bridge-k-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-f-blocks-break-ag", "precur-bridge-f-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-m-blocks-break-ag", "precur-bridge-m-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-i-blocks-break-ag", "precur-bridge-i-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-j-blocks-break-ag", "precur-bridge-j-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-n-blocks-break-ag", "precur-bridge-n-blocks-break", 5, ["PRECD"], ""], +["precur-bridge-p-blocks-break-ag", "precur-bridge-p-blocks-break", 5, ["PRECD"], ""], +["precur-warp-effect-ag", "precur-warp-effect", 5, ["PRECD", "HALFPIPE"], ""], +["precur-planet-ag", "precur-planet", 5, ["PRECD", "FRSTA"], ""], +["precur-bridge-g-blocks-break-ag", "precur-bridge-g-blocks-break", 5, ["PRECD"], ""], +["precurd-vis", "precurd-vis", 5, ["PRECD"], ""], +["tpage-757", "tpage-757", 5, ["SEF"], ""], +["tpage-759", "tpage-759", 5, ["SEF"], ""], +["tpage-758", "tpage-758", 5, ["SEF"], ""], +["sew-poison-switch-ag", "sew-poison-switch", 5, ["SEF"], ""], +["sew-gas-step-ag", "sew-gas-step", 5, ["SEF"], ""], +["sewf-vis", "sewf-vis", 5, ["SEF"], ""], +["tpage-949", "tpage-949", 5, ["CTYCARB"], ""], +["bikec-ag", "bikec", 5, ["CTYCARB"], ""], +["bikeb-ag", "bikeb", 5, ["CTYCARB"], ""], +["bikea-ag", "bikea", 5, ["CTYCARB"], ""], +["ctycarb", "ctycarb", 5, ["CTYCARB"], ""], +["tpage-2527", "tpage-2527", 5, ["WASDEFEN"], ""], +["tpage-2224", "tpage-2224", 5, ["WASDEFEN"], ""], +["dm-robot-ag", "dm-robot", 5, ["WASDEFEN"], ""], +["dm-missile-ag", "dm-missile", 5, ["WASDEFEN"], ""], +["dm-debris-ag", "dm-debris", 5, ["WASDEFEN"], ""], +["wasdefen", "wasdefen", 5, ["WASDEFEN"], ""], +["tpage-2977", "tpage-2977", 5, ["LBLOWTKG"], ""], +["bt-wasp-ag", "bt-wasp", 5, ["LBLOWTKG"], ""], +["lblowtkg", "lblowtkg", 5, ["LBLOWTKG"], ""], +["tpage-1372", "tpage-1372", 5, ["DESA"], ""], +["tpage-3309", "tpage-3309", 5, ["DESA"], ""], +["tpage-1579", "tpage-1579", 5, ["DESA"], ""], +["deserta-vis", "deserta-vis", 5, ["DESA"], ""], +["tpage-2189", "tpage-2189", 5, ["COMBB"], ""], +["combb", "combb", 5, ["COMBB"], ""], +["wasstadc-obs", "wasstadc-obs", 5, ["WASSTADC"], ""], +["tpage-1090", "tpage-1090", 5, ["WASSTADC"], ""], +["tpage-1251", "tpage-1251", 5, ["WASSTADC"], ""], +["tpage-1252", "tpage-1252", 5, ["WASSTADC"], ""], +["tpage-1446", "tpage-1446", 5, ["WASSTADC"], ""], +["wstd-fight-plat-large-ag", "wstd-fight-plat-large", 5, ["WASSTADC"], ""], +["wstd-fight-house-a-ag", "wstd-fight-house-a", 5, ["WASSTADC"], ""], +["wstd-fight-plat-ag", "wstd-fight-plat", 5, ["WASSTADC"], ""], +["wstd-fight-house-b-ag", "wstd-fight-house-b", 5, ["WASSTADC"], ""], +["pre-artifact-a-ag", "pre-artifact-a", 5, ["WASSTADC", "DESRACE1", "DESCHASE"], ""], +["pre-artifact-d-ag", "pre-artifact-d", 5, ["WASSTADC", "DESRACE1"], ""], +["wstd-fight-plat-smlplat-ag", "wstd-fight-plat-smlplat", 5, ["WASSTADC"], ""], +["wstd-fight-plat-box-ag", "wstd-fight-plat-box", 5, ["WASSTADC"], ""], +["pre-artifact-b-ag", "pre-artifact-b", 5, ["WASSTADC", "DESRACE1"], ""], +["pre-artifact-c-ag", "pre-artifact-c", 5, ["WASSTADC", "DESRACE1"], ""], +["wasstadc", "wasstadc", 5, ["WASSTADC"], ""], +["tpage-1371", "tpage-1371", 5, ["DESC"], ""], +["tpage-1573", "tpage-1573", 5, ["DESC"], ""], +["desertc-vis", "desertc-vis", 5, ["DESC"], ""], +["tpage-1086", "tpage-1086", 5, ["LDAMPECK"], ""], +["tpage-1087", "tpage-1087", 5, ["LDAMPECK"], ""], +["ldampeck", "ldampeck", 5, ["LDAMPECK"], ""], +["tpage-1536", "tpage-1536", 5, ["LJAKSIG"], ""], +["tpage-1538", "tpage-1538", 5, ["LJAKSIG"], ""], +["tpage-1537", "tpage-1537", 5, ["LJAKSIG"], ""], +["ljaksig", "ljaksig", 5, ["LJAKSIG"], ""], +["target-ladder", "target-ladder", 5, ["HALFPIPE", "SED", "WWD", "VOCA"], ""], +["ladder", "ladder", 5, ["HALFPIPE", "SED", "WWD", "VOCA"], ""], +["jak-ladder+0-ag", "jak-ladder+0", 5, ["HALFPIPE", "SED", "WWD", "VOCA"], ""], +["tpage-13", "tpage-13", 5, ["HALFPIPE"], ""], +["tpage-15", "tpage-15", 5, ["HALFPIPE"], ""], +["tpage-510", "tpage-510", 5, ["HALFPIPE"], ""], +["ctycrate-ag", "ctycrate", 5, ["HALFPIPE", "CWI"], ""], +["halfpipe", "halfpipe", 5, ["HALFPIPE"], ""], +["tpage-1418", "tpage-1418", 5, ["DESRACE1"], ""], +["tpage-1300", "tpage-1300", 5, ["DESRACE1"], ""], +["tpage-1399", "tpage-1399", 5, ["DESRACE1"], ""], +["gauntlets-ag", "gauntlets", 5, ["DESRACE1", "LDMPCKGN"], ""], +["was-artifact-ag", "was-artifact", 5, ["DESRACE1"], ""], +["desrace1", "desrace1", 5, ["DESRACE1"], ""], +["tpage-1971", "tpage-1971", 5, ["SEN"], ""], +["tpage-1973", "tpage-1973", 5, ["SEN"], ""], +["tpage-1972", "tpage-1972", 5, ["SEN"], ""], +["tpage-1970", "tpage-1970", 5, ["SEN"], ""], +["neo-juicer-ag", "neo-juicer", 5, ["SEN"], ""], +["neo-grenadier-ag", "neo-grenadier", 5, ["SEN"], ""], +["sew-pipe-ag", "sew-pipe", 5, ["SEN"], ""], +["sewn-vis", "sewn-vis", 5, ["SEN"], ""], +["tpage-3228", "tpage-3228", 5, ["TEMP"], ""], +["precursor-ship-ag", "precursor-ship", 5, ["TEMP", "LOUTRO"], ""], +["temp", "temp", 5, ["TEMP"], ""], +["tpage-746", "tpage-746", 5, ["SED"], ""], +["tpage-752", "tpage-752", 5, ["SED"], ""], +["tpage-747", "tpage-747", 5, ["SED"], ""], +["tpage-750", "tpage-750", 5, ["SED"], ""], +["sew-gunturret-ag", "sew-gunturret", 5, ["SED"], ""], +["sew-laser-turret-ag", "sew-laser-turret", 5, ["SED"], ""], +["sew-gate-ag", "sew-gate", 5, ["SED"], ""], +["sew-wall-switch-ag", "sew-wall-switch", 5, ["SED"], ""], +["sew-slide-step-ag", "sew-slide-step", 5, ["SED"], ""], +["sewd-vis", "sewd-vis", 5, ["SED"], ""], +["lfaccity-mood", "lfaccity-mood", 5, ["LFACB", "LFACCITY"], ""], +["tpage-3401", "tpage-3401", 5, ["LFACB"], ""], +["tpage-3402", "tpage-3402", 5, ["LFACB"], ""], +["lfacctyb-vis", "lfacctyb-vis", 5, ["LFACB"], ""], +["cty-sniper-battery", "cty-sniper-battery", 5, ["LCTYSNPR"], ""], +["cty-sniper-turret", "cty-sniper-turret", 5, ["LCTYSNPR"], ""], +["tpage-2220", "tpage-2220", 5, ["LCTYSNPR"], ""], +["tpage-2091", "tpage-2091", 5, ["LCTYSNPR"], ""], +["tpage-2177", "tpage-2177", 5, ["LCTYSNPR"], ""], +["tpage-2154", "tpage-2154", 5, ["LCTYSNPR"], ""], +["tpage-3087", "tpage-3087", 5, ["LCTYSNPR"], ""], +["cty-sniper-turret-ag", "cty-sniper-turret", 5, ["LCTYSNPR"], ""], +["cty-sniper-core-ag", "cty-sniper-core", 5, ["LCTYSNPR"], ""], +["cty-sniper-button-ag", "cty-sniper-button", 5, ["LCTYSNPR"], ""], +["cty-sniper-battery-ag", "cty-sniper-battery", 5, ["LCTYSNPR"], ""], +["cty-sniper-turret-reticle-ag", "cty-sniper-turret-reticle", 5, ["LCTYSNPR"], ""], +["cty-sniper-button-top-ag", "cty-sniper-button-top", 5, ["LCTYSNPR"], ""], +["lctysnpr", "lctysnpr", 5, ["LCTYSNPR"], ""], +["tpage-2664", "tpage-2664", 5, ["LBBSPID"], ""], +["lbbspid", "lbbspid", 5, ["LBBSPID"], ""], +["forest-obs-h", "forest-obs-h", 5, ["FRSTA"], ""], +["eco-green-collider", "eco-green-collider", 5, ["FRSTA"], ""], +["forest-part", "forest-part", 5, ["FRSTA"], ""], +["forest-mood", "forest-mood", 5, ["FRSTA"], ""], +["foresta-obs", "foresta-obs", 5, ["FRSTA"], ""], +["forest-bridges", "forest-bridges", 5, ["FRSTA"], ""], +["mh-plant", "mh-plant", 5, ["FRSTA"], ""], +["forest-kill-plants", "forest-kill-plants", 5, ["FRSTA"], ""], +["forest-texture", "forest-texture", 5, ["FRSTA"], ""], +["forest-ring-chase", "forest-ring-chase", 5, ["FRSTA"], ""], +["forest-tasks", "forest-tasks", 5, ["FRSTA"], ""], +["tpage-773", "tpage-773", 5, ["FRSTA"], ""], +["tpage-774", "tpage-774", 5, ["FRSTA"], ""], +["tpage-941", "tpage-941", 5, ["FRSTA"], ""], +["tpage-1010", "tpage-1010", 5, ["FRSTA"], ""], +["tpage-775", "tpage-775", 5, ["FRSTA"], ""], +["tpage-3202", "tpage-3202", 5, ["FRSTA"], ""], +["tpage-1357", "tpage-1357", 5, ["FRSTA"], ""], +["tpage-1302", "tpage-1302", 5, ["FRSTA"], ""], +["for-telescope-ag", "for-telescope", 5, ["FRSTA"], ""], +["for-telescope-fma-ag", "for-telescope-fma", 5, ["FRSTA"], ""], +["for-tower-fma-ag", "for-tower-fma", 5, ["FRSTA"], ""], +["for-statue-ag", "for-statue", 5, ["FRSTA"], ""], +["for-t-fma-ag", "for-t-fma", 5, ["FRSTA"], ""], +["for-tower-ag", "for-tower", 5, ["FRSTA"], ""], +["for-break-bridge-ag", "for-break-bridge", 5, ["FRSTA"], ""], +["screen-fma-ag", "screen-fma", 5, ["FRSTA"], ""], +["warp-telescope-ag", "warp-telescope", 5, ["FRSTA"], ""], +["for-pillar-ag", "for-pillar", 5, ["FRSTA"], ""], +["foresta-vis", "foresta-vis", 5, ["FRSTA"], ""], +["tpage-2940", "tpage-2940", 5, ["LBBRING5"], ""], +["lbbring5", "lbbring5", 5, ["LBBRING5"], ""], +["lbbsprt3", "lbbsprt3", 5, ["LBBSPRT3"], ""], +["hiphog-obs", "hiphog-obs", 5, ["HHG"], ""], +["hiphog-part", "hiphog-part", 5, ["HHG"], ""], +["hiphog-scenes", "hiphog-scenes", 5, ["HHG"], ""], +["ltnfxhip-texture", "ltnfxhip-texture", 5, ["HHG"], ""], +["tpage-1848", "tpage-1848", 5, ["HHG"], ""], +["tpage-1849", "tpage-1849", 5, ["HHG"], ""], +["tpage-895", "tpage-895", 5, ["HHG"], ""], +["hip-door-a-ag", "hip-door-a", 5, ["HHG", "GGA", "CPO"], ""], +["hiphog-vis", "hiphog-vis", 5, ["HHG"], ""], +["lbbsprt2", "lbbsprt2", 5, ["LBBSPRT2"], ""], +["ctygenb-part", "ctygenb-part", 5, ["CGB"], ""], +["tpage-226", "tpage-226", 5, ["CGB"], ""], +["tpage-224", "tpage-224", 5, ["CGB"], ""], +["tpage-225", "tpage-225", 5, ["CGB"], ""], +["tpage-227", "tpage-227", 5, ["CGB"], ""], +["tpage-222", "tpage-222", 5, ["CGB"], ""], +["tpage-219", "tpage-219", 5, ["CGB"], ""], +["ctygenb-vis", "ctygenb-vis", 5, ["CGB"], ""], +["tpage-2348", "tpage-2348", 5, ["LDMPCKGN"], ""], +["tpage-2349", "tpage-2349", 5, ["LDMPCKGN"], ""], +["ldmpckgn", "ldmpckgn", 5, ["LDMPCKGN"], ""], +["tpage-2071", "tpage-2071", 5, ["LSEEMWCA"], ""], +["lseemwca", "lseemwca", 5, ["LSEEMWCA"], ""], +["tpage-3028", "tpage-3028", 5, ["HGB"], ""], +["hangb-vis", "hangb-vis", 5, ["HGB"], ""], +["tpage-3271", "tpage-3271", 5, ["LONINSIM"], ""], +["loninsim", "loninsim", 5, ["LONINSIM"], ""], +["tpage-2065", "tpage-2065", 5, ["RUBA"], ""], +["tpage-2067", "tpage-2067", 5, ["RUBA"], ""], +["tpage-2066", "tpage-2066", 5, ["RUBA"], ""], +["tpage-2416", "tpage-2416", 5, ["RUBA"], ""], +["tpage-2677", "tpage-2677", 5, ["RUBA"], ""], +["neo-satellite-break-ag", "neo-satellite-break", 5, ["RUBA", "WASSEEM"], ""], +["rubblea-vis", "rubblea-vis", 5, ["RUBA"], ""], +["turtle-training", "turtle-training", 5, ["DESRALLY", "DESTRACK"], ""], +["kleever-rider", "kleever-rider", 5, ["DESRALLY", "DESTRACK"], ""], +["course-race", "course-race", 5, ["DESRALLY", "DESTRACK"], ""], +["tpage-2892", "tpage-2892", 5, ["DESRALLY"], ""], +["tpage-2893", "tpage-2893", 5, ["DESRALLY"], ""], +["tpage-2976", "tpage-2976", 5, ["DESRALLY"], ""], +["wland-driver-ag", "wland-driver", 5, ["DESRALLY", "DESTRACK"], ""], +["des-rally-bollard-ag", "des-rally-bollard", 5, ["DESRALLY"], ""], +["desrally", "desrally", 5, ["DESRALLY"], ""], +["flut-part", "flut-part", 5, ["WWD", "DESLIZ", "VOCA"], ""], +["flut", "flut", 5, ["WWD", "DESLIZ", "VOCA"], ""], +["target-flut", "target-flut", 5, ["WWD", "DESLIZ", "VOCA"], ""], +["jak-flut+0-ag", "jak-flut+0", 5, ["WWD", "VOCA"], ""], +["ctymark-obs-h", "ctymark-obs-h", 5, ["WWD"], ""], +["ctymark-obs", "ctymark-obs", 5, ["WWD"], ""], +["wasteland-scenes", "wasteland-scenes", 5, ["WWD"], ""], +["wlander-h", "wlander-h", 5, ["WWD"], ""], +["wlander-male", "wlander-male", 5, ["WWD"], ""], +["wlander-female", "wlander-female", 5, ["WWD"], ""], +["waswide-init", "waswide-init", 5, ["WWD"], ""], +["waswide-part", "waswide-part", 5, ["WWD"], ""], +["waswide-obs", "waswide-obs", 5, ["WWD"], ""], +["wascity-ocean", "wascity-ocean", 5, ["WWD"], ""], +["tizard", "tizard", 5, ["WWD"], ""], +["dogat", "dogat", 5, ["WWD"], ""], +["tpage-873", "tpage-873", 5, ["WWD"], ""], +["tpage-874", "tpage-874", 5, ["WWD"], ""], +["tpage-1956", "tpage-1956", 5, ["WWD"], ""], +["tpage-1075", "tpage-1075", 5, ["WWD"], ""], +["tpage-666", "tpage-666", 5, ["WWD"], ""], +["tpage-1254", "tpage-1254", 5, ["WWD"], ""], +["wlander-female-ag", "wlander-female", 5, ["WWD"], ""], +["flut-saddle-ag", "flut-saddle", 5, ["WWD", "DESLIZ", "VOCA"], ""], +["wascity-cactus-ag", "wascity-cactus", 5, ["WWD"], ""], +["wascity-windmill-ag", "wascity-windmill", 5, ["WWD"], ""], +["wascity-flag-b-ag", "wascity-flag-b", 5, ["WWD"], ""], +["wascity-flag-d-ag", "wascity-flag-d", 5, ["WWD"], ""], +["wascity-awning-a-ag", "wascity-awning-a", 5, ["WWD"], ""], +["wascity-burning-bush-ag", "wascity-burning-bush", 5, ["WWD", "DST"], ""], +["wascity-flag-c-ag", "wascity-flag-c", 5, ["WWD"], ""], +["wascity-flag-a-ag", "wascity-flag-a", 5, ["WWD"], ""], +["wascity-wind-fan-ag", "wascity-wind-fan", 5, ["WWD"], ""], +["waswide-vis", "waswide-vis", 5, ["WWD"], ""], +["tpage-319", "tpage-319", 5, ["STB"], ""], +["tpage-318", "tpage-318", 5, ["STB"], ""], +["tpage-1974", "tpage-1974", 5, ["STB"], ""], +["tpage-317", "tpage-317", 5, ["STB"], ""], +["rub-falling-step-ag", "rub-falling-step", 5, ["STB"], ""], +["stadiumb-vis", "stadiumb-vis", 5, ["STB"], ""], +["tpage-926", "tpage-926", 5, ["MIB"], ""], +["tpage-929", "tpage-929", 5, ["MIB"], ""], +["tpage-928", "tpage-928", 5, ["MIB"], ""], +["tpage-1856", "tpage-1856", 5, ["MIB"], ""], +["monster-frog-ag", "monster-frog", 5, ["MIB"], ""], +["rat-ag", "rat", 5, ["MIB"], ""], +["min-moving-plat-ag", "min-moving-plat", 5, ["MIB"], ""], +["min-folding-plat-ag", "min-folding-plat", 5, ["MIB"], ""], +["min-rat-engine-ag", "min-rat-engine", 5, ["MIB"], ""], +["min-bridge-ag", "min-bridge", 5, ["MIB"], ""], +["min-rotating-plat-ag", "min-rotating-plat", 5, ["MIB"], ""], +["min-crane-ag", "min-crane", 5, ["MIB"], ""], +["min-elev-track-ag", "min-elev-track", 5, ["MIB"], ""], +["min-ramp-ag", "min-ramp", 5, ["MIB"], ""], +["leggings-ag", "leggings", 5, ["MIB"], ""], +["min-crane-switch-ag", "min-crane-switch", 5, ["MIB"], ""], +["mineb-vis", "mineb-vis", 5, ["MIB"], ""], +["blow-tower-shared", "blow-tower-shared", 5, ["LCTYBLOW"], ""], +["blow-tower-data", "blow-tower-data", 5, ["LCTYBLOW"], ""], +["blow-tower-speech", "blow-tower-speech", 5, ["LCTYBLOW"], ""], +["blow-tower-script", "blow-tower-script", 5, ["LCTYBLOW"], ""], +["blow-tower-part", "blow-tower-part", 5, ["LCTYBLOW"], ""], +["blow-tower-obs", "blow-tower-obs", 5, ["LCTYBLOW"], ""], +["blow-tower-obs2", "blow-tower-obs2", 5, ["LCTYBLOW"], ""], +["blow-tower-extra", "blow-tower-extra", 5, ["LCTYBLOW"], ""], +["cty-blow-tower", "cty-blow-tower", 5, ["LCTYBLOW"], ""], +["tpage-2846", "tpage-2846", 5, ["LCTYBLOW"], ""], +["tpage-2847", "tpage-2847", 5, ["LCTYBLOW"], ""], +["hellcat-tower-ag", "hellcat-tower", 5, ["LCTYBLOW"], ""], +["lctyblow", "lctyblow", 5, ["LCTYBLOW"], ""], +["tpage-1367", "tpage-1367", 5, ["LWSTDPCK"], ""], +["lwstdpck", "lwstdpck", 5, ["LWSTDPCK"], ""], +["museum-anims+0-ag", "museum-anims+0", 5, ["MUSEUM"], ""], +["tpage-3296", "tpage-3296", 5, ["MUSEUM"], ""], +["tpage-3310", "tpage-3310", 5, ["MUSEUM"], ""], +["tpage-3297", "tpage-3297", 5, ["MUSEUM"], ""], +["museum", "museum", 5, ["MUSEUM"], ""], +["tpage-1542", "tpage-1542", 5, ["LJAKCKLV"], ""], +["ljakcklv", "ljakcklv", 5, ["LJAKCKLV"], ""], +["tpage-2767", "tpage-2767", 5, ["LBBRING1"], ""], +["lbbring1", "lbbring1", 5, ["LBBRING1"], ""], +["tpage-3390", "tpage-3390", 5, ["MUSEUM4"], ""], +["tpage-3365", "tpage-3365", 5, ["MUSEUM4"], ""], +["tpage-3419", "tpage-3419", 5, ["MUSEUM4"], ""], +["tpage-3386", "tpage-3386", 5, ["MUSEUM4"], ""], +["jak-one-ag", "jak-one", 5, ["MUSEUM4"], ""], +["gambler-ag", "gambler", 5, ["MUSEUM4"], ""], +["ogreboss-ag", "ogreboss", 5, ["MUSEUM4"], ""], +["yellowsage-ag", "yellowsage", 5, ["MUSEUM4"], ""], +["redsage-ag", "redsage", 5, ["MUSEUM4"], ""], +["bluesage-ag", "bluesage", 5, ["MUSEUM4"], ""], +["evilsis-ag", "evilsis", 5, ["MUSEUM4"], ""], +["farmer-ag", "farmer", 5, ["MUSEUM4"], ""], +["evilbro-ag", "evilbro", 5, ["MUSEUM4"], ""], +["minertall-ag", "minertall", 5, ["MUSEUM4"], ""], +["sidekick-human-ag", "sidekick-human", 5, ["MUSEUM4"], ""], +["sculptor-ag", "sculptor", 5, ["MUSEUM4"], ""], +["bird-lady-ag", "bird-lady", 5, ["MUSEUM4"], ""], +["geologist-ag", "geologist", 5, ["MUSEUM4"], ""], +["fisher-ag", "fisher", 5, ["MUSEUM4"], ""], +["explorer-ag", "explorer", 5, ["MUSEUM4"], ""], +["mayor-ag", "mayor", 5, ["MUSEUM4"], ""], +["billy-ag", "billy", 5, ["MUSEUM4"], ""], +["warrior-ag", "warrior", 5, ["MUSEUM4"], ""], +["minershort-ag", "minershort", 5, ["MUSEUM4"], ""], +["flutflut-ag", "flutflut", 5, ["MUSEUM4"], ""], +["museum4", "museum4", 5, ["MUSEUM4"], ""], +["lfacrm1-mood", "lfacrm1-mood", 5, ["LFACRM1"], ""], +["tpage-1936", "tpage-1936", 5, ["LFACRM1"], ""], +["tpage-2070", "tpage-2070", 5, ["LFACRM1"], ""], +["lfacrm1", "lfacrm1", 5, ["LFACRM1"], ""], +["tpage-1810", "tpage-1810", 5, ["LJKCDMKL"], ""], +["tpage-1811", "tpage-1811", 5, ["LJKCDMKL"], ""], +["ljkcdmkl", "ljkcdmkl", 5, ["LJKCDMKL"], ""], +["tpage-1089", "tpage-1089", 5, ["LDAMSIG"], ""], +["tpage-1088", "tpage-1088", 5, ["LDAMSIG"], ""], +["ldamsig", "ldamsig", 5, ["LDAMSIG"], ""], +["tpage-1795", "tpage-1795", 5, ["DESTRACK"], ""], +["tpage-1796", "tpage-1796", 5, ["DESTRACK"], ""], +["tpage-2363", "tpage-2363", 5, ["DESTRACK"], ""], +["tpage-1666", "tpage-1666", 5, ["DESTRACK"], ""], +["kleever-rider-ag", "kleever-rider", 5, ["DESTRACK"], ""], +["des-train-barrier-ag", "des-train-barrier", 5, ["DESTRACK"], ""], +["des-train-stones-ag", "des-train-stones", 5, ["DESTRACK"], ""], +["des-train-bollard-ag", "des-train-bollard", 5, ["DESTRACK"], ""], +["destrack", "destrack", 5, ["DESTRACK"], ""], +["gun-dummy-part", "gun-dummy-part", 5, ["GGA"], ""], +["gun-dummy-art", "gun-dummy-art", 5, ["GGA"], ""], +["gun-dummy", "gun-dummy", 5, ["GGA"], ""], +["gungame-data", "gungame-data", 5, ["GGA"], ""], +["gungame-manager", "gungame-manager", 5, ["GGA"], ""], +["gungame-texture", "gungame-texture", 5, ["GGA"], ""], +["gungame-obs", "gungame-obs", 5, ["GGA"], ""], +["gungame-part", "gungame-part", 5, ["GGA"], ""], +["gungame-scenes", "gungame-scenes", 5, ["GGA"], ""], +["tpage-1393", "tpage-1393", 5, ["GGA"], ""], +["tpage-1391", "tpage-1391", 5, ["GGA"], ""], +["tpage-1392", "tpage-1392", 5, ["GGA"], ""], +["tpage-1557", "tpage-1557", 5, ["GGA"], ""], +["tpage-1389", "tpage-1389", 5, ["GGA"], ""], +["gun-npc-ag", "gun-npc", 5, ["GGA"], ""], +["fort-entry-gate-ag", "fort-entry-gate", 5, ["GGA"], ""], +["gungame-vis", "gungame-vis", 5, ["GGA"], ""], +["tpage-2484", "tpage-2484", 5, ["RAILC"], ""], +["railc", "railc", 5, ["RAILC"], ""], +["tpage-3379", "tpage-3379", 5, ["LBBTCHA2"], ""], +["tpage-3326", "tpage-3326", 5, ["LBBTCHA2"], ""], +["lbbtcha2", "lbbtcha2", 5, ["LBBTCHA2"], ""], +["tpage-1712", "tpage-1712", 5, ["DESINTER"], ""], +["tpage-1713", "tpage-1713", 5, ["DESINTER"], ""], +["desinter", "desinter", 5, ["DESINTER"], ""], +["tpage-605", "tpage-605", 5, ["NSB"], ""], +["tpage-607", "tpage-607", 5, ["NSB"], ""], +["tpage-606", "tpage-606", 5, ["NSB"], ""], +["tpage-604", "tpage-604", 5, ["NSB"], ""], +["tpage-608", "tpage-608", 5, ["NSB"], ""], +["tpage-646", "tpage-646", 5, ["NSB"], ""], +["water-anim-nst-ag", "water-anim-nst", 5, ["NSB"], ""], +["nst-cocoon-b-ag", "nst-cocoon-b", 5, ["NSB"], ""], +["nst-falling-stone-bridge-ag", "nst-falling-stone-bridge", 5, ["NSB"], ""], +["nst-falling-stone-bridge-goo-ag", "nst-falling-stone-bridge-goo", 5, ["NSB"], ""], +["nstb-vis", "nstb-vis", 5, ["NSB"], ""], +["tpage-2682", "tpage-2682", 5, ["LOUTRO"], ""], +["tpage-2812", "tpage-2812", 5, ["LOUTRO"], ""], +["tpage-2657", "tpage-2657", 5, ["LOUTRO"], ""], +["loutro", "loutro", 5, ["LOUTRO"], ""], +["vinroom-scenes", "vinroom-scenes", 5, ["VIN"], ""], +["vinroom-part", "vinroom-part", 5, ["VIN"], ""], +["power-game", "power-game", 5, ["VIN"], ""], +["ljkdxvin-texture", "ljkdxvin-texture", 5, ["VIN"], ""], +["tpage-1026", "tpage-1026", 5, ["VIN"], ""], +["tpage-1024", "tpage-1024", 5, ["VIN"], ""], +["tpage-1023", "tpage-1023", 5, ["VIN"], ""], +["vin-turbine-ag", "vin-turbine", 5, ["VIN"], ""], +["vinroom-vis", "vinroom-vis", 5, ["VIN"], ""], +["tpage-2660", "tpage-2660", 5, ["LDESGCST"], ""], +["tpage-2662", "tpage-2662", 5, ["LDESGCST"], ""], +["tpage-2661", "tpage-2661", 5, ["LDESGCST"], ""], +["ldesgcst", "ldesgcst", 5, ["LDESGCST"], ""], +["tpage-2270", "tpage-2270", 5, ["WARPCAST"], ""], +["warpcast", "warpcast", 5, ["WARPCAST"], ""], +["tpage-2954", "tpage-2954", 5, ["LBBRING6"], ""], +["lbbring6", "lbbring6", 5, ["LBBRING6"], ""], +["tpage-819", "tpage-819", 5, ["FRSTB"], ""], +["tpage-820", "tpage-820", 5, ["FRSTB"], ""], +["tpage-1116", "tpage-1116", 5, ["FRSTB"], ""], +["tpage-1117", "tpage-1117", 5, ["FRSTB"], ""], +["tpage-821", "tpage-821", 5, ["FRSTB"], ""], +["transport-ag", "transport", 5, ["FRSTB"], ""], +["forestb-vis", "forestb-vis", 5, ["FRSTB"], ""], +["tpage-2620", "tpage-2620", 5, ["TEMC"], ""], +["tpage-2706", "tpage-2706", 5, ["TEMC"], ""], +["tpage-2626", "tpage-2626", 5, ["TEMC"], ""], +["tpage-2627", "tpage-2627", 5, ["TEMC"], ""], +["tpage-2692", "tpage-2692", 5, ["TEMC"], ""], +["tpage-3041", "tpage-3041", 5, ["TEMC"], ""], +["tpl-symbol-ag", "tpl-symbol", 5, ["TEMC"], ""], +["tpl-banner-b-ag", "tpl-banner-b", 5, ["TEMC"], ""], +["templec-vis", "templec-vis", 5, ["TEMC"], ""], +["tpage-2191", "tpage-2191", 5, ["COMBC"], ""], +["combc", "combc", 5, ["COMBC"], ""], +["tpage-2356", "tpage-2356", 5, ["LTRTWHLS"], ""], +["turtle-wheel-fma-ag", "turtle-wheel-fma", 5, ["LTRTWHLS"], ""], +["ltrtwhls", "ltrtwhls", 5, ["LTRTWHLS"], ""], +["target-tube", "target-tube", 5, ["PRECC", "VOCA"], ""], +["jak-tube+0-ag", "jak-tube+0", 5, ["PRECC", "VOCA"], ""], +["precurc-part", "precurc-part", 5, ["PRECC"], ""], +["precurc-mood", "precurc-mood", 5, ["PRECC"], ""], +["precurc-obs", "precurc-obs", 5, ["PRECC"], ""], +["tpage-2640", "tpage-2640", 5, ["PRECC"], ""], +["tpage-2642", "tpage-2642", 5, ["PRECC"], ""], +["tpage-2903", "tpage-2903", 5, ["PRECC"], ""], +["precur-elevator-ag", "precur-elevator", 5, ["PRECC"], ""], +["precurc-vis", "precurc-vis", 5, ["PRECC"], ""], +["external-player-control", "external-player-control", 5, ["DESCHASE", "LCTYPALT"], ""], +["wcar-marauder-b", "wcar-marauder-b", 5, ["DESCHASE"], ""], +["desert-chase-path-h", "desert-chase-path-h", 5, ["DESCHASE"], ""], +["desert-chase-path", "desert-chase-path", 5, ["DESCHASE"], ""], +["desert-chase", "desert-chase", 5, ["DESCHASE"], ""], +["tpage-3203", "tpage-3203", 5, ["DESCHASE"], ""], +["tpage-2961", "tpage-2961", 5, ["DESCHASE"], ""], +["tpage-2962", "tpage-2962", 5, ["DESCHASE"], ""], +["tpage-3184", "tpage-3184", 5, ["DESCHASE"], ""], +["catapult-target-ag", "catapult-target", 5, ["DESCHASE"], ""], +["deschase", "deschase", 5, ["DESCHASE"], ""], +["tpage-2094", "tpage-2094", 5, ["CITYCAST"], ""], +["tpage-2095", "tpage-2095", 5, ["CITYCAST"], ""], +["palmpilot-b-ag", "palmpilot-b", 5, ["CITYCAST", "WASPALA"], ""], +["citycast", "citycast", 5, ["CITYCAST"], ""], +["ctyport-part", "ctyport-part", 5, ["CPO"], ""], +["ctyport-scenes", "ctyport-scenes", 5, ["CPO"], ""], +["tpage-274", "tpage-274", 5, ["CPO"], ""], +["tpage-272", "tpage-272", 5, ["CPO"], ""], +["tpage-273", "tpage-273", 5, ["CPO"], ""], +["tpage-268", "tpage-268", 5, ["CPO"], ""], +["tpage-265", "tpage-265", 5, ["CPO"], ""], +["broken-mdaxter-ag", "broken-mdaxter", 5, ["CPO"], ""], +["barge-ag", "barge", 5, ["CPO"], ""], +["mecha-daxter-ag", "mecha-daxter", 5, ["CPO"], ""], +["ctyport-vis", "ctyport-vis", 5, ["CPO"], ""], +["tpage-1950", "tpage-1950", 5, ["LFACCITY"], ""], +["tpage-1951", "tpage-1951", 5, ["LFACCITY"], ""], +["lfaccity", "lfaccity", 5, ["LFACCITY"], ""], +["tpage-2711", "tpage-2711", 5, ["RAILCST"], ""], +["tpage-2512", "tpage-2512", 5, ["RAILCST"], ""], +["tpage-2904", "tpage-2904", 5, ["RAILCST"], ""], +["tpage-2513", "tpage-2513", 5, ["RAILCST"], ""], +["precursor-controller-ag", "precursor-controller", 5, ["RAILCST"], ""], +["eco-crystal-sphere-simple-ag", "eco-crystal-sphere-simple", 5, ["RAILCST"], ""], +["eco-crystal-sphere-ag", "eco-crystal-sphere", 5, ["RAILCST"], ""], +["pre-mike-ag", "pre-mike", 5, ["RAILCST"], ""], +["plat-ag", "plat", 5, ["RAILCST"], ""], +["fma-gun-ag", "fma-gun", 5, ["RAILCST"], ""], +["plat-fma-ag", "plat-fma", 5, ["RAILCST"], ""], +["railcst", "railcst", 5, ["RAILCST"], ""], +["tpage-1247", "tpage-1247", 5, ["LJNDKLEV"], ""], +["ljndklev", "ljndklev", 5, ["LJNDKLEV"], ""], +["cty-guard-projectile", "cty-guard-projectile", 5, ["CWI"], ""], +["trail-graph", "trail-graph", 5, ["CWI"], ""], +["bike", "bike", 5, ["CWI"], ""], +["car", "car", 5, ["CWI"], ""], +["test-bike", "test-bike", 5, ["CWI"], ""], +["citizen-enemy", "citizen-enemy", 5, ["CWI"], ""], +["kg-squad-member-h", "kg-squad-member-h", 5, ["CWI"], ""], +["mh-squad-member-h", "mh-squad-member-h", 5, ["CWI"], ""], +["guard", "guard", 5, ["CWI"], ""], +["guard-grenade", "guard-grenade", 5, ["CWI"], ""], +["guard-tazer", "guard-tazer", 5, ["CWI"], ""], +["guard-rifle", "guard-rifle", 5, ["CWI"], ""], +["guard-states", "guard-states", 5, ["CWI"], ""], +["citizen-norm", "citizen-norm", 5, ["CWI"], ""], +["citizen-fat", "citizen-fat", 5, ["CWI"], ""], +["citizen-chick", "citizen-chick", 5, ["CWI"], ""], +["kg-squad-member", "kg-squad-member", 5, ["CWI"], ""], +["mh-squad-member", "mh-squad-member", 5, ["CWI"], ""], +["metalhead-flitter", "metalhead-flitter", 5, ["CWI"], ""], +["kg-squad-control", "kg-squad-control", 5, ["CWI"], ""], +["mh-squad-control", "mh-squad-control", 5, ["CWI"], ""], +["cty-borrow-manager", "cty-borrow-manager", 5, ["CWI"], ""], +["ctywide-init", "ctywide-init", 5, ["CWI"], ""], +["ctywide-texture", "ctywide-texture", 5, ["CWI"], ""], +["ctywide-part", "ctywide-part", 5, ["CWI"], ""], +["ctywide-obs", "ctywide-obs", 5, ["CWI"], ""], +["ctywide-tasks", "ctywide-tasks", 5, ["CWI"], ""], +["ctywide-scenes", "ctywide-scenes", 5, ["CWI"], ""], +["ctywide-speech", "ctywide-speech", 5, ["CWI"], ""], +["ctyport-obs", "ctyport-obs", 5, ["CWI"], ""], +["mhcity-part", "mhcity-part", 5, ["CWI"], ""], +["mhcity-obs", "mhcity-obs", 5, ["CWI"], ""], +["mhcity-obs2", "mhcity-obs2", 5, ["CWI"], ""], +["krimson-wall", "krimson-wall", 5, ["CWI"], ""], +["trail", "trail", 5, ["CWI", "WASALL"], ""], +["tpage-127", "tpage-127", 5, ["CWI"], ""], +["tpage-125", "tpage-125", 5, ["CWI"], ""], +["tpage-128", "tpage-128", 5, ["CWI"], ""], +["tpage-123", "tpage-123", 5, ["CWI"], ""], +["citizen-norm-rider-ag", "citizen-norm-rider", 5, ["CWI"], ""], +["fac-lorez-ag", "fac-lorez", 5, ["CWI"], ""], +["newbike-ag", "newbike", 5, ["CWI"], ""], +["eco-canister-ag", "eco-canister", 5, ["CWI"], ""], +["burning-bush-ag", "burning-bush", 5, ["CWI"], ""], +["security-wall-ag", "security-wall", 5, ["CWI", "RUBB", "COMBA"], ""], +["ctywide-vis", "ctywide-vis", 5, ["CWI"], ""], +["minee-scenes", "minee-scenes", 5, ["MINEE"], ""], +["tpage-2140", "tpage-2140", 5, ["MINEE"], ""], +["tpage-2142", "tpage-2142", 5, ["MINEE"], ""], +["tpage-2141", "tpage-2141", 5, ["MINEE"], ""], +["minee", "minee", 5, ["MINEE"], ""], +["tpage-1358", "tpage-1358", 5, ["LFORRING"], ""], +["lforring", "lforring", 5, ["LFORRING"], ""], +["tpage-1222", "tpage-1222", 5, ["LASHELIN"], ""], +["lashelin", "lashelin", 5, ["LASHELIN"], ""], +["tpage-1541", "tpage-1541", 5, ["LJAKKLEV"], ""], +["ljakklev", "ljakklev", 5, ["LJAKKLEV"], ""], +["assault-shared", "assault-shared", 5, ["LCTYPALT"], ""], +["assault-cams", "assault-cams", 5, ["LCTYPALT"], ""], +["assault-path", "assault-path", 5, ["LCTYPALT"], ""], +["assault-enemies", "assault-enemies", 5, ["LCTYPALT"], ""], +["assault-script", "assault-script", 5, ["LCTYPALT"], ""], +["assault-task", "assault-task", 5, ["LCTYPALT"], ""], +["tpage-3093", "tpage-3093", 5, ["LCTYPALT"], ""], +["lctypalt", "lctypalt", 5, ["LCTYPALT"], ""], +["mh-centipede-part", "mh-centipede-part", 5, ["LNSTOBB"], ""], +["mh-centipede", "mh-centipede", 5, ["LNSTOBB"], ""], +["tpage-1337", "tpage-1337", 5, ["LNSTOBB"], ""], +["tpage-1867", "tpage-1867", 5, ["LNSTOBB"], ""], +["mh-centipede-ag", "mh-centipede", 5, ["LNSTOBB"], ""], +["lnstobb", "lnstobb", 5, ["LNSTOBB"], ""], +["tpage-2658", "tpage-2658", 5, ["LJKFEET"], ""], +["jakc-feet-ag", "jakc-feet", 5, ["LJKFEET"], ""], +["ljkfeet", "ljkfeet", 5, ["LJKFEET"], ""], +["tpage-736", "tpage-736", 5, ["DST"], ""], +["tpage-2304", "tpage-2304", 5, ["DST"], ""], +["tpage-1702", "tpage-1702", 5, ["DST"], ""], +["tpage-1744", "tpage-1744", 5, ["DST"], ""], +["tpage-1653", "tpage-1653", 5, ["DST"], ""], +["tpage-1253", "tpage-1253", 5, ["DST"], ""], +["tpage-976", "tpage-976", 5, ["DST"], ""], +["desert-vis", "desert-vis", 5, ["DST"], ""], +["tpage-3378", "tpage-3378", 5, ["LBBTCHA1"], ""], +["tpage-3325", "tpage-3325", 5, ["LBBTCHA1"], ""], +["lbbtcha1", "lbbtcha1", 5, ["LBBTCHA1"], ""], +["tpage-3171", "tpage-3171", 5, ["LGUNRNC"], ""], +["gun-rc-four-eyes-ag", "gun-rc-four-eyes", 5, ["LGUNRNC"], ""], +["gun-rc-three-eyes-ag", "gun-rc-three-eyes", 5, ["LGUNRNC"], ""], +["gun-rc-three-eyes-bonus-ag", "gun-rc-three-eyes-bonus", 5, ["LGUNRNC"], ""], +["gun-clank-ag", "gun-clank", 5, ["LGUNRNC"], ""], +["gun-rc-two-eyes-ag", "gun-rc-two-eyes", 5, ["LGUNRNC"], ""], +["gun-rc-one-eye-ag", "gun-rc-one-eye", 5, ["LGUNRNC"], ""], +["gun-rachet-ag", "gun-rachet", 5, ["LGUNRNC"], ""], +["lgunrnc", "lgunrnc", 5, ["LGUNRNC"], ""], +["tpage-2210", "tpage-2210", 5, ["COMBN"], ""], +["tpage-2595", "tpage-2595", 5, ["COMBN"], ""], +["tpage-2211", "tpage-2211", 5, ["COMBN"], ""], +["combn", "combn", 5, ["COMBN"], ""], +["tpage-1717", "tpage-1717", 5, ["DESRESCC"], ""], +["desrescc", "desrescc", 5, ["DESRESCC"], ""], +["tpage-1449", "tpage-1449", 5, ["LSIGJAKC"], ""], +["tpage-1451", "tpage-1451", 5, ["LSIGJAKC"], ""], +["tpage-1450", "tpage-1450", 5, ["LSIGJAKC"], ""], +["lsigjakc", "lsigjakc", 5, ["LSIGJAKC"], ""], +["jak-fldax+0-ag", "jak-fldax+0", 5, ["DESLIZ"], ""], +["desert-lizard-h", "desert-lizard-h", 5, ["DESLIZ"], ""], +["desert-lizard-task", "desert-lizard-task", 5, ["DESLIZ"], ""], +["desert-lizard", "desert-lizard", 5, ["DESLIZ"], ""], +["tpage-1624", "tpage-1624", 5, ["DESLIZ"], ""], +["tpage-1654", "tpage-1654", 5, ["DESLIZ"], ""], +["desliz", "desliz", 5, ["DESLIZ"], ""], +["waspala-obs", "waspala-obs", 5, ["WASPALA"], ""], +["waspala-part", "waspala-part", 5, ["WASPALA"], ""], +["waspal-mood", "waspal-mood", 5, ["WASPALA"], ""], +["waspal-texture", "waspal-texture", 5, ["WASPALA"], ""], +["throne-scenes", "throne-scenes", 5, ["WASPALA"], ""], +["tpage-869", "tpage-869", 5, ["WASPALA"], ""], +["tpage-871", "tpage-871", 5, ["WASPALA"], ""], +["tpage-980", "tpage-980", 5, ["WASPALA"], ""], +["tpage-933", "tpage-933", 5, ["WASPALA"], ""], +["tpage-968", "tpage-968", 5, ["WASPALA"], ""], +["tpage-872", "tpage-872", 5, ["WASPALA"], ""], +["tpage-3132", "tpage-3132", 5, ["WASPALA"], ""], +["water-anim-waspala-ag", "water-anim-waspala", 5, ["WASPALA"], ""], +["waspala-paddle-wheel-b-ag", "waspala-paddle-wheel-b", 5, ["WASPALA"], ""], +["waspala-paddle-wheel-a-ag", "waspala-paddle-wheel-a", 5, ["WASPALA"], ""], +["waspala-blocker-ag", "waspala-blocker", 5, ["WASPALA"], ""], +["waspala", "waspala", 5, ["WASPALA"], ""], +["tpage-2362", "tpage-2362", 5, ["LJAKNDAX"], ""], +["ljakndax", "ljakndax", 5, ["LJAKNDAX"], ""], +["tpage-1211", "tpage-1211", 5, ["WASSEEM"], ""], +["tpage-1533", "tpage-1533", 5, ["WASSEEM"], ""], +["tpage-1468", "tpage-1468", 5, ["WASSEEM"], ""], +["tpage-1975", "tpage-1975", 5, ["WASSEEM"], ""], +["wasseem", "wasseem", 5, ["WASSEEM"], ""], +["wastrail-graph", "wastrail-graph", 5, ["WASALL"], ""], +["wasall-init", "wasall-init", 5, ["WASALL"], ""], +["wasall-part", "wasall-part", 5, ["WASALL"], ""], +["wasall-obs", "wasall-obs", 5, ["WASALL"], ""], +["wasall-tasks", "wasall-tasks", 5, ["WASALL"], ""], +["waswide-mood", "waswide-mood", 5, ["WASALL"], ""], +["jak-tentacle+0-ag", "jak-tentacle+0", 5, ["WASALL"], ""], +["tpage-325", "tpage-325", 5, ["WASALL"], ""], +["tpage-1427", "tpage-1427", 5, ["WASALL"], ""], +["scorpion-ag", "scorpion", 5, ["WASALL"], ""], +["snake-ag", "snake", 5, ["WASALL"], ""], +["fox-ag", "fox", 5, ["WASALL"], ""], +["turtle-ag", "turtle", 5, ["WASALL"], ""], +["toad-ag", "toad", 5, ["WASALL"], ""], +["wasall", "wasall", 5, ["WASALL"], ""], +["tpage-1812", "tpage-1812", 5, ["WCASEEM"], ""], +["wcaseem", "wcaseem", 5, ["WCASEEM"], ""], +["tpage-1154", "tpage-1154", 5, ["LSIG"], ""], +["tpage-1153", "tpage-1153", 5, ["LSIG"], ""], +["lsig", "lsig", 5, ["LSIG"], ""], +["factory-h", "factory-h", 5, ["LFACTORY"], ""], +["ffight-projectile", "ffight-projectile", 5, ["LFACTORY"], ""], +["ftank-projectile", "ftank-projectile", 5, ["LFACTORY"], ""], +["fturret-projectile", "fturret-projectile", 5, ["LFACTORY"], ""], +["warf-projectile", "warf-projectile", 5, ["LFACTORY"], ""], +["h-warf", "h-warf", 5, ["LFACTORY"], ""], +["fac-gunturret", "fac-gunturret", 5, ["LFACTORY"], ""], +["fac-robotank-h", "fac-robotank-h", 5, ["LFACTORY"], ""], +["fac-robotank-turret", "fac-robotank-turret", 5, ["LFACTORY"], ""], +["fac-robotank", "fac-robotank", 5, ["LFACTORY"], ""], +["fac-tower", "fac-tower", 5, ["LFACTORY"], ""], +["factory-manager", "factory-manager", 5, ["LFACTORY"], ""], +["factory-hud", "factory-hud", 5, ["LFACTORY"], ""], +["factorya-init", "factorya-init", 5, ["LFACTORY"], ""], +["lfactory", "lfactory", 5, ["LFACTORY"], ""], +["tpage-1550", "tpage-1550", 5, ["LWLANDM"], ""], +["tpage-1551", "tpage-1551", 5, ["LWLANDM"], ""], +["lwlandm", "lwlandm", 5, ["LWLANDM"], ""], +["tpage-3280", "tpage-3280", 5, ["LPTRL"], ""], +["tpage-3279", "tpage-3279", 5, ["LPTRL"], ""], +["mantis-ag", "mantis", 5, ["LPTRL", "VOCA"], ""], +["spyder-ag", "spyder", 5, ["LPTRL"], ""], +["rub-dark-jak-door-ag", "rub-dark-jak-door", 5, ["LPTRL"], ""], +["dm-mine-spider-ag", "dm-mine-spider", 5, ["LPTRL"], ""], +["dm-mine-spider-spawner-ag", "dm-mine-spider-spawner", 5, ["LPTRL"], ""], +["lppatrol-vis", "lppatrol-vis", 5, ["LPTRL"], ""], +["mined-mood", "mined-mood", 5, ["MINED"], ""], +["mined-texture", "mined-texture", 5, ["MINED"], ""], +["prebot-part", "prebot-part", 5, ["MINED"], ""], +["prebot-setup", "prebot-setup", 5, ["MINED"], ""], +["prebot-states", "prebot-states", 5, ["MINED"], ""], +["prebot-extras", "prebot-extras", 5, ["MINED"], ""], +["mined-scenes", "mined-scenes", 5, ["MINED"], ""], +["tpage-1620", "tpage-1620", 5, ["MINED"], ""], +["tpage-1621", "tpage-1621", 5, ["MINED"], ""], +["tpage-1651", "tpage-1651", 5, ["MINED"], ""], +["tpage-1691", "tpage-1691", 5, ["MINED"], ""], +["tpage-1622", "tpage-1622", 5, ["MINED"], ""], +["tpage-1623", "tpage-1623", 5, ["MINED"], ""], +["tpage-2776", "tpage-2776", 5, ["MINED"], ""], +["tpage-1612", "tpage-1612", 5, ["MINED"], ""], +["prebot-ag", "prebot", 5, ["MINED"], ""], +["cav-prebot-break-ag", "cav-prebot-break", 5, ["MINED"], ""], +["prebot-tentacle-ag", "prebot-tentacle", 5, ["MINED"], ""], +["cav-railblocker-ag", "cav-railblocker", 5, ["MINED"], ""], +["prebot-shockwave-ag", "prebot-shockwave", 5, ["MINED"], ""], +["cav-pillar-ag", "cav-pillar", 5, ["MINED"], ""], +["cav-airlock-door-ag", "cav-airlock-door", 5, ["MINED"], ""], +["prebot-camera-ag", "prebot-camera", 5, ["MINED"], ""], +["cav-break-bridge-ag", "cav-break-bridge", 5, ["MINED"], ""], +["cav-exit-door-ag", "cav-exit-door", 5, ["MINED"], ""], +["cav-minecar-ag", "cav-minecar", 5, ["MINED"], ""], +["blue-two-upgrade-ag", "blue-two-upgrade", 5, ["MINED"], ""], +["mined", "mined", 5, ["MINED"], ""], +["tpage-1092", "tpage-1092", 5, ["LDAMPKSM"], ""], +["tpage-1093", "tpage-1093", 5, ["LDAMPKSM"], ""], +["ldampksm", "ldampksm", 5, ["LDAMPKSM"], ""], +["tpage-2058", "tpage-2058", 5, ["RUBB"], ""], +["tpage-2059", "tpage-2059", 5, ["RUBB"], ""], +["tpage-2060", "tpage-2060", 5, ["RUBB"], ""], +["rub-electric-gate-panel-b-ag", "rub-electric-gate-panel-b", 5, ["RUBB", "RUBA2"], ""], +["rub-electric-gate-panel-a-ag", "rub-electric-gate-panel-a", 5, ["RUBB", "RUBA2"], ""], +["rubbleb-vis", "rubbleb-vis", 5, ["RUBB"], ""], +["tpage-2605", "tpage-2605", 5, ["LCITYSML"], ""], +["tpage-2606", "tpage-2606", 5, ["LCITYSML"], ""], +["lcitysml", "lcitysml", 5, ["LCITYSML"], ""], +["tpage-2508", "tpage-2508", 5, ["RUBA2"], ""], +["tpage-2509", "tpage-2509", 5, ["RUBA2"], ""], +["tpage-2510", "tpage-2510", 5, ["RUBA2"], ""], +["rubblea2-vis", "rubblea2-vis", 5, ["RUBA2"], ""], +["tpage-3069", "tpage-3069", 5, ["LOUTRO2"], ""], +["tpage-3070", "tpage-3070", 5, ["LOUTRO2"], ""], +["tpage-2746", "tpage-2746", 5, ["LOUTRO2"], ""], +["loutro2", "loutro2", 5, ["LOUTRO2"], ""], +["volcanox-texture", "volcanox-texture", 5, ["VOCX"], ""], +["volcanox-mood", "volcanox-mood", 5, ["VOCX"], ""], +["volcanox-obs", "volcanox-obs", 5, ["VOCX"], ""], +["volcanox-scenes", "volcanox-scenes", 5, ["VOCX"], ""], +["flitter", "flitter", 5, ["VOCX"], ""], +["tpage-1938", "tpage-1938", 5, ["VOCX"], ""], +["tpage-1517", "tpage-1517", 5, ["VOCX"], ""], +["tpage-1990", "tpage-1990", 5, ["VOCX"], ""], +["tpage-2902", "tpage-2902", 5, ["VOCX"], ""], +["monk-mummy-ag", "monk-mummy", 5, ["VOCX"], ""], +["tpl-stone-break-ag", "tpl-stone-break", 5, ["VOCX", "TEMX"], ""], +["dark-maker-idol-break-ag", "dark-maker-idol-break", 5, ["VOCX"], ""], +["vol-holo-eye-ag", "vol-holo-eye", 5, ["VOCX"], ""], +["tpl-glider-break-ag", "tpl-glider-break", 5, ["VOCX"], ""], +["dm-spines-ag", "dm-spines", 5, ["VOCX"], ""], +["monk-mummy-finger-explode-ag", "monk-mummy-finger-explode", 5, ["VOCX"], ""], +["dark-maker-idol-fma-ag", "dark-maker-idol-fma", 5, ["VOCX"], ""], +["volcanox", "volcanox", 5, ["VOCX"], ""], +["templex-part", "templex-part", 5, ["TEMX"], ""], +["templex-mood", "templex-mood", 5, ["TEMX"], ""], +["templex-texture", "templex-texture", 5, ["TEMX"], ""], +["templex-scenes", "templex-scenes", 5, ["TEMX"], ""], +["templex-obs", "templex-obs", 5, ["TEMX"], ""], +["tpage-2327", "tpage-2327", 5, ["TEMX"], ""], +["tpage-2330", "tpage-2330", 5, ["TEMX"], ""], +["tpage-2328", "tpage-2328", 5, ["TEMX"], ""], +["tpage-2326", "tpage-2326", 5, ["TEMX"], ""], +["tpage-2169", "tpage-2169", 5, ["TEMX"], ""], +["tpl-inner-airlock-door-ag", "tpl-inner-airlock-door", 5, ["TEMX"], ""], +["templex-vis", "templex-vis", 5, ["TEMX"], ""], +["tpage-1484", "tpage-1484", 5, ["ARENACST"], ""], +["tpage-1245", "tpage-1245", 5, ["ARENACST"], ""], +["tpage-1248", "tpage-1248", 5, ["ARENACST"], ""], +["tpage-1246", "tpage-1246", 5, ["ARENACST"], ""], +["blue-gun-mod-one-ag", "blue-gun-mod-one", 5, ["ARENACST"], ""], +["wstd-gate-pass-ag", "wstd-gate-pass", 5, ["ARENACST"], ""], +["arenacst", "arenacst", 5, ["ARENACST"], ""], +["tpage-2617", "tpage-2617", 5, ["TEMB"], ""], +["tpage-2628", "tpage-2628", 5, ["TEMB"], ""], +["tpage-2625", "tpage-2625", 5, ["TEMB"], ""], +["tpl-break-alcove-ag", "tpl-break-alcove", 5, ["TEMB"], ""], +["tpl-gate-ag", "tpl-gate", 5, ["TEMB"], ""], +["tpl-fan-three-ag", "tpl-fan-three", 5, ["TEMB"], ""], +["tpl-door-b-ag", "tpl-door-b", 5, ["TEMB"], ""], +["tpl-fan-two-ag", "tpl-fan-two", 5, ["TEMB"], ""], +["tpl-spinning-plat-ag", "tpl-spinning-plat", 5, ["TEMB"], ""], +["tpl-spindle-ag", "tpl-spindle", 5, ["TEMB"], ""], +["tpl-elec-swing-pole-ag", "tpl-elec-swing-pole", 5, ["TEMB"], ""], +["templeb-vis", "templeb-vis", 5, ["TEMB"], ""], +["tpage-2431", "tpage-2431", 5, ["COMBA"], ""], +["tpage-1577", "tpage-1577", 5, ["COMBA"], ""], +["tpage-2889", "tpage-2889", 5, ["COMBA"], ""], +["tpage-2481", "tpage-2481", 5, ["COMBA"], ""], +["tpage-2496", "tpage-2496", 5, ["COMBA"], ""], +["tpage-2676", "tpage-2676", 5, ["COMBA"], ""], +["comba", "comba", 5, ["COMBA"], ""], +["tpage-3330", "tpage-3330", 5, ["LBBSDRP3"], ""], +["lbbsdrp3", "lbbsdrp3", 5, ["LBBSDRP3"], ""], +["tpage-2205", "tpage-2205", 5, ["LPATKCS"], ""], +["tpage-1987", "tpage-1987", 5, ["LPATKCS"], ""], +["tpage-2359", "tpage-2359", 5, ["LPATKCS"], ""], +["cty-dax-missile-launcher-ag", "cty-dax-missile-launcher", 5, ["LPATKCS"], ""], +["lpatkcs", "lpatkcs", 5, ["LPATKCS"], ""], +["volcano-part", "volcano-part", 5, ["VOCA"], ""], +["volcano-scenes", "volcano-scenes", 5, ["VOCA"], ""], +["rigid-body-plat", "rigid-body-plat", 5, ["VOCA"], ""], +["volcano-obs", "volcano-obs", 5, ["VOCA"], ""], +["volcano-obs2", "volcano-obs2", 5, ["VOCA"], ""], +["volcano-mood", "volcano-mood", 5, ["VOCA"], ""], +["volcano-texture", "volcano-texture", 5, ["VOCA"], ""], +["spiky-frog", "spiky-frog", 5, ["VOCA"], ""], +["flut-wild", "flut-wild", 5, ["VOCA"], ""], +["flamer-lava", "flamer-lava", 5, ["VOCA"], ""], +["tpage-1632", "tpage-1632", 5, ["VOCA"], ""], +["tpage-1635", "tpage-1635", 5, ["VOCA"], ""], +["tpage-1633", "tpage-1633", 5, ["VOCA"], ""], +["tpage-1634", "tpage-1634", 5, ["VOCA"], ""], +["tpage-3053", "tpage-3053", 5, ["VOCA"], ""], +["tpage-2050", "tpage-2050", 5, ["VOCA"], ""], +["vol-break-ground-ag", "vol-break-ground", 5, ["VOCA"], ""], +["spiky-frog-ag", "spiky-frog", 5, ["VOCA"], ""], +["vol-collapsing-rock-ag", "vol-collapsing-rock", 5, ["VOCA"], ""], +["vol-lava-plat-ag", "vol-lava-plat", 5, ["VOCA"], ""], +["vol-balance-plat-ag", "vol-balance-plat", 5, ["VOCA"], ""], +["vol-lava-ball-ag", "vol-lava-ball", 5, ["VOCA"], ""], +["vol-unbroken-ground-ag", "vol-unbroken-ground", 5, ["VOCA"], ""], +["vol-rising-step-b-ag", "vol-rising-step-b", 5, ["VOCA"], ""], +["vol-rising-step-a-ag", "vol-rising-step-a", 5, ["VOCA"], ""], +["vol-rising-step-c-ag", "vol-rising-step-c", 5, ["VOCA"], ""], +["vol-bouncer-ag", "vol-bouncer", 5, ["VOCA"], ""], +["vol-stone-lid-ag", "vol-stone-lid", 5, ["VOCA"], ""], +["volcanoa-vis", "volcanoa-vis", 5, ["VOCA"], ""], +["wasstadb-obs", "wasstadb-obs", 5, ["WASSTADB"], ""], +["tpage-1085", "tpage-1085", 5, ["WASSTADB"], ""], +["tpage-1187", "tpage-1187", 5, ["WASSTADB"], ""], +["tpage-1309", "tpage-1309", 5, ["WASSTADB"], ""], +["tpage-1485", "tpage-1485", 5, ["WASSTADB"], ""], +["wstd-training-dummy-ag", "wstd-training-dummy", 5, ["WASSTADB"], ""], +["wstd-trapdoor-ag", "wstd-trapdoor", 5, ["WASSTADB"], ""], +["wstd-flag-ag", "wstd-flag", 5, ["WASSTADB"], ""], +["arena-token-ag", "arena-token", 5, ["WASSTADB"], ""], +["wasstadb", "wasstadb", 5, ["WASSTADB"], ""], +["tpage-2130", "tpage-2130", 5, ["LDAX"], ""], +["ldax", "ldax", 5, ["LDAX"], ""], +["protect-script", "protect-script", 5, ["LCTYPROT"], ""], +["protect-path", "protect-path", 5, ["LCTYPROT"], ""], +["protect-gunship", "protect-gunship", 5, ["LCTYPROT"], ""], +["cty-protect", "cty-protect", 5, ["LCTYPROT"], ""], +["tpage-2592", "tpage-2592", 5, ["LCTYPROT"], ""], +["tpage-3264", "tpage-3264", 5, ["LCTYPROT"], ""], +["tpage-3269", "tpage-3269", 5, ["LCTYPROT"], ""], +["kg-robot-transport-break-ag", "kg-robot-transport-break", 5, ["LCTYPROT"], ""], +["kg-robot-transport-ag", "kg-robot-transport", 5, ["LCTYPROT"], ""], +["kg-robot-transport-bomb-ag", "kg-robot-transport-bomb", 5, ["LCTYPROT"], ""], +["lctyprot", "lctyprot", 5, ["LCTYPROT"], ""], +["desert-hover", "desert-hover", 5, ["DESHOVER"], ""], +["deshover-texture", "deshover-texture", 5, ["DESHOVER"], ""], +["tpage-1920", "tpage-1920", 5, ["DESHOVER"], ""], +["tpage-1598", "tpage-1598", 5, ["DESHOVER"], ""], +["tpage-1935", "tpage-1935", 5, ["DESHOVER"], ""], +["tpage-1989", "tpage-1989", 5, ["DESHOVER"], ""], +["tpage-1998", "tpage-1998", 5, ["DESHOVER"], ""], +["tpage-2727", "tpage-2727", 5, ["DESHOVER"], ""], +["beast-rider-ag", "beast-rider", 5, ["DESHOVER"], ""], +["mh-communicator-ag", "mh-communicator", 5, ["DESHOVER"], ""], +["deshover", "deshover", 5, ["DESHOVER"], ""], +["terraformer-head", "terraformer-head", 5, ["DESBOSS2"], ""], +["tpage-2953", "tpage-2953", 5, ["DESBOSS2"], ""], +["tpage-3036", "tpage-3036", 5, ["DESBOSS2"], ""], +["tpage-3175", "tpage-3175", 5, ["DESBOSS2"], ""], +["terraformer-laser-end-ag", "terraformer-laser-end", 5, ["DESBOSS2"], ""], +["terraformer-laser-ag", "terraformer-laser", 5, ["DESBOSS2"], ""], +["desboss2", "desboss2", 5, ["DESBOSS2"], ""], +["0COMMON", "0COMMON", 5, ["NO-XGO"], ""], +["1COMMON", "1COMMON", 5, ["NO-XGO"], ""], +["2COMMON", "2COMMON", 5, ["NO-XGO"], ""], +["3COMMON", "3COMMON", 5, ["NO-XGO"], ""], +["4COMMON", "4COMMON", 5, ["NO-XGO"], ""], +["5COMMON", "5COMMON", 5, ["NO-XGO"], ""], +["6COMMON", "6COMMON", 5, ["NO-XGO"], ""], +["7COMMON", "7COMMON", 5, ["NO-XGO"], ""], +["8COMMON", "8COMMON", 5, ["NO-XGO"], ""], +["9COMMON", "9COMMON", 5, ["NO-XGO"], ""], +["10COMMON", "10COMMON", 5, ["NO-XGO"], ""], +["11COMMON", "11COMMON", 5, ["NO-XGO"], ""]] diff --git a/scripts/shell/decomp3.sh b/scripts/shell/decomp3.sh new file mode 100755 index 000000000..79d5b2d65 --- /dev/null +++ b/scripts/shell/decomp3.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Directory of this script +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +"${DIR}"/../../build/decompiler/decompiler "${DIR}"/../../decompiler/config/jak3/jak3_config.jsonc "${DIR}"/../../iso_data/ "${DIR}"/../../decompiler_out --version ntsc_v1