diff --git a/.vs/launch.vs.json b/.vs/launch.vs.json index 48ec57dbf4..c867ffb7e4 100644 --- a/.vs/launch.vs.json +++ b/.vs/launch.vs.json @@ -350,6 +350,32 @@ "--config-override \"{\\\"decompile_code\\\": false, \\\"levels_extract\\\": true, \\\"allowed_objects\\\": []}\"" ] }, + { + "type": "default", + "project": "CMakeLists.txt", + "projectTarget": "decompiler.exe (bin\\decompiler.exe)", + "name": "Decompiler - Jak X", + "args": [ + "${workspaceRoot}/decompiler/config/jakx/jakx_config.jsonc", + "${workspaceRoot}/iso_data", + "${workspaceRoot}/decompiler_out", + "--version", + "ntsc_v1" + ] + }, + { + "type": "default", + "project": "CMakeLists.txt", + "projectTarget": "decompiler.exe (bin\\decompiler.exe)", + "name": "Decompiler - Jak X - PAL", + "args": [ + "${workspaceRoot}/decompiler/config/jakx/jakx_config.jsonc", + "${workspaceRoot}/iso_data", + "${workspaceRoot}/decompiler_out", + "--version", + "pal" + ] + }, { "type": "default", "project": "CMakeLists.txt", diff --git a/Taskfile.yml b/Taskfile.yml index 0691066a59..6cb4d71d9b 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -17,6 +17,8 @@ tasks: - '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak2' set-game-jak3: - '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak3' + set-game-jakx: + - '{{.PYTHON}} ./scripts/tasks/update-env.py --game jakx' set-decomp-ntscv1: desc: "aka black label" cmds: diff --git a/common/audio/audio_formats.cpp b/common/audio/audio_formats.cpp index 180746dea1..7646313930 100644 --- a/common/audio/audio_formats.cpp +++ b/common/audio/audio_formats.cpp @@ -57,7 +57,8 @@ void write_wave_file(const std::vector& left_samples, } std::pair, std::vector> decode_adpcm(BinaryReader& reader, - const bool stereo) { + const bool stereo, + const u32 version) { std::vector left_samples; std::vector right_samples; s32 left_sample_prev[2] = {0, 0}; @@ -85,7 +86,7 @@ std::pair, std::vector> decode_adpcm(BinaryReader& reader, break; } - if (stereo && bytes_read == 0x2000) { + if (stereo && bytes_read == (version == 3 ? 0x1000 : 0x2000)) { // switch streams processing_left_chunk = !processing_left_chunk; bytes_read = 0; diff --git a/common/audio/audio_formats.h b/common/audio/audio_formats.h index 12d710041f..43068b449c 100644 --- a/common/audio/audio_formats.h +++ b/common/audio/audio_formats.h @@ -34,6 +34,8 @@ void write_wave_file(const std::vector& left_samples, s32 sample_rate, const fs::path& name); -std::pair, std::vector> decode_adpcm(BinaryReader& reader, const bool mono); +std::pair, std::vector> decode_adpcm(BinaryReader& reader, + const bool mono, + const u32 version); std::vector encode_adpcm(const std::vector& samples); diff --git a/common/goal_constants.h b/common/goal_constants.h index 22ba953275..7c025416d2 100644 --- a/common/goal_constants.h +++ b/common/goal_constants.h @@ -71,6 +71,15 @@ constexpr int LEVEL_MAX = 10; constexpr int LEVEL_TOTAL = LEVEL_MAX + 1; } // namespace jak3 +namespace jakx { +// for now, we don't have the ability to extend the size of the symbol table +constexpr s32 GOAL_MAX_SYMBOLS = 0x4000; +// amount of levels in level heap +constexpr int LEVEL_MAX = 10; +// total amount of levels, including ones outside level heap (default-level) +constexpr int LEVEL_TOTAL = LEVEL_MAX + 1; +} // namespace jakx + constexpr s32 max_symbols(GameVersion version) { switch (version) { case GameVersion::Jak1: @@ -79,6 +88,8 @@ constexpr s32 max_symbols(GameVersion version) { return jak2::GOAL_MAX_SYMBOLS; case GameVersion::Jak3: return jak3::GOAL_MAX_SYMBOLS; + case GameVersion::JakX: + return jakx::GOAL_MAX_SYMBOLS; } } diff --git a/common/symbols.h b/common/symbols.h index 7877b518cd..3b4c518fec 100644 --- a/common/symbols.h +++ b/common/symbols.h @@ -324,6 +324,180 @@ constexpr int FIX_SYM_NETWORK_BOOTSTRAP = 0x294; } // namespace jak3_symbols +namespace jakx_symbols { + +constexpr int FIX_SYM_EMPTY_CAR = -0x8; +constexpr int S7_OFF_FIX_SYM_EMPTY_PAIR = -0x6 - 1; +constexpr int FIX_SYM_EMPTY_CDR = -0x4; +constexpr int FIX_SYM_FALSE = 0x0; // GOAL boolean #f (note that this is equal to the $s7 register) +constexpr int FIX_SYM_TRUE = 0x4; // GOAL boolean #t +constexpr int FIX_SYM_FUNCTION_TYPE = 0x8; +constexpr int FIX_SYM_BASIC = 0xc; +constexpr int FIX_SYM_STRING_TYPE = 0x10; +constexpr int FIX_SYM_SYMBOL_TYPE = 0x14; +constexpr int FIX_SYM_TYPE_TYPE = 0x18; +constexpr int FIX_SYM_OBJECT_TYPE = 0x1c; +constexpr int FIX_SYM_LINK_BLOCK = 0x20; +constexpr int FIX_SYM_INTEGER = 0x24; +constexpr int FIX_SYM_SINTEGER = 0x28; +constexpr int FIX_SYM_UINTEGER = 0x2c; +constexpr int FIX_SYM_BINTEGER = 0x30; +constexpr int FIX_SYM_INT8 = 0x34; +constexpr int FIX_SYM_INT16 = 0x38; +constexpr int FIX_SYM_INT32 = 0x3c; +constexpr int FIX_SYM_INT64 = 0x40; +constexpr int FIX_SYM_INT128 = 0x44; +constexpr int FIX_SYM_UINT8 = 0x48; +constexpr int FIX_SYM_UINT16 = 0x4c; +constexpr int FIX_SYM_UINT32 = 0x50; +constexpr int FIX_SYM_UINT64 = 0x54; +constexpr int FIX_SYM_UINT128 = 0x58; +constexpr int FIX_SYM_FLOAT = 0x5c; +constexpr int FIX_SYM_PROCESS_TREE = 0x60; +constexpr int FIX_SYM_PROCESS_TYPE = 0x64; +constexpr int FIX_SYM_THREAD = 0x68; +constexpr int FIX_SYM_STRUCTURE = 0x6c; +constexpr int FIX_SYM_PAIR_TYPE = 0x70; +constexpr int FIX_SYM_POINTER = 0x74; +constexpr int FIX_SYM_NUMBER = 0x78; +constexpr int FIX_SYM_ARRAY = 0x7c; +constexpr int FIX_SYM_VU_FUNCTION = 0x80; +constexpr int FIX_SYM_CONNECTABLE = 0x84; +constexpr int FIX_SYM_STACK_FRAME = 0x88; +constexpr int FIX_SYM_FILE_STREAM = 0x8c; +constexpr int FIX_SYM_HEAP = 0x90; +constexpr int FIX_SYM_NOTHING_FUNC = 0x94; +constexpr int FIX_SYM_DELETE_BASIC = 0x98; +constexpr int FIX_SYM_STATIC = 0x9c; +constexpr int FIX_SYM_GLOBAL_HEAP = 0xa0; +constexpr int FIX_SYM_DEBUG = 0xa4; +constexpr int FIX_SYM_LOADING_LEVEL = 0xa8; +constexpr int FIX_SYM_LOADING_PACKAGE = 0xac; +constexpr int FIX_SYM_PROCESS_LEVEL_HEAP = 0xb0; +constexpr int FIX_SYM_STACK = 0xb4; +constexpr int FIX_SYM_SCRATCH = 0xb8; +constexpr int FIX_SYM_SCRATCH_TOP = 0xbc; +constexpr int FIX_SYM_ZERO_FUNC = 0xc0; +constexpr int FIX_SYM_ASIZE_OF_BASIC_FUNC = 0xc4; +constexpr int FIX_SYM_COPY_BASIC_FUNC = 0xc8; // bugged name +constexpr int FIX_SYM_LEVEL = 0xcc; +constexpr int FIX_SYM_ART_GROUP = 0xd0; +constexpr int FIX_SYM_TEXTURE_PAGE_DIR = 0xd4; +constexpr int FIX_SYM_TEXTURE_PAGE = 0xd8; +constexpr int FIX_SYM_SOUND = 0xdc; +constexpr int FIX_SYM_DGO = 0xe0; +constexpr int FIX_SYM_TOP_LEVEL = 0xe4; +constexpr int FIX_SYM_QUOTE = 0xe8; +constexpr int FIX_SYM_LISTENER_LINK_BLOCK = 0xec; +constexpr int FIX_SYM_LISTENER_FUNCTION = 0xf0; +constexpr int FIX_SYM_STACK_TOP = 0xf4; +constexpr int FIX_SYM_STACK_BASE = 0xf8; +constexpr int FIX_SYM_STACK_SIZE = 0xfc; +constexpr int FIX_SYM_KERNEL_FUNCTION = 0x100; +constexpr int FIX_SYM_KERNEL_PACKAGES = 0x104; +constexpr int FIX_SYM_KERNEL_BOOT_MESSAGE = 0x108; +constexpr int FIX_SYM_KERNEL_BOOT_MODE = 0x10c; +constexpr int FIX_SYM_KERNEL_BOOT_LEVEL = 0x110; +constexpr int FIX_SYM_KERNEL_BOOT_ART_GROUP = 0x114; +constexpr int FIX_SYM_KERNEL_DEBUG = 0x118; +constexpr int FIX_SYM_KERNEL_VERSION = 0x11c; +constexpr int FIX_SYM_KERNEL_DISPATCHER = 0x120; +constexpr int FIX_SYM_SYNC_DISPATCHER = 0x124; +constexpr int FIX_SYM_PRINT_COLLUMN = 0x128; +constexpr int FIX_SYM_DEBUG_SEGMENT = 300; +constexpr int FIX_SYM_ENABLE_METHOD_SET = 0x130; +constexpr int FIX_SYM_SQL_RESULT = 0x134; +constexpr int FIX_SYM_COLLAPSE_QUOTE = 0x138; +constexpr int FIX_SYM_LEVEL_TYPE_LIST = 0x13C; +constexpr int FIX_SYM_DECI_COUNT = 0x140; +constexpr int FIX_SYM_USER = 0x144; +constexpr int FIX_SYM_VIDEO_MODE = 0x148; +constexpr int FIX_SYM_BOOT_VIDEO_MODE = 0x14C; +constexpr int FIX_SYM_BOOT = 0x150; +constexpr int FIX_SYM_DEMO = 0x154; +constexpr int FIX_SYM_DEMO_SHARED = 0x158; +constexpr int FIX_SYM_PREVIEW = 0x15C; +constexpr int FIX_SYM_KIOSK = 0x160; +constexpr int FIX_SYM_PLAY_BOOT = 0x164; +constexpr int FIX_SYM_SIN = 0x168; +constexpr int FIX_SYM_COS = 0x16C; +constexpr int FIX_SYM_PUT_DISPLAY_ENV = 0x170; +constexpr int FIX_SYM_SYNCV = 0x174; +constexpr int FIX_SYM_SYNC_PATH = 0x178; +constexpr int FIX_SYM_RESET_PATH = 0x17C; +constexpr int FIX_SYM_RESET_GRAPH = 0x180; +constexpr int FIX_SYM_DMA_SYNC = 0x184; +constexpr int FIX_SYM_GS_PUT_IMR = 0x188; +constexpr int FIX_SYM_GS_GET_IMR = 0x18C; +constexpr int FIX_SYM_GS_STORE_IMAGE = 400; +constexpr int FIX_SYM_FLUSH_CACHE = 0x194; +constexpr int FIX_SYM_CPAD_OPEN = 0x198; +constexpr int FIX_SYM_CPAD_GET_DATA = 0x19C; +constexpr int FIX_SYM_MOUSE_GET_DATA = 0x1A0; +constexpr int FIX_SYM_KEYBD_GET_DATA = 0x1A4; +constexpr int FIX_SYM_INSTALL_HANDLER = 0x1A8; +constexpr int FIX_SYM_INSTALL_DEBUG_HANDLER = 0x1AC; +constexpr int FIX_SYM_FILE_STREAM_OPEN = 0x1B0; +constexpr int FIX_SYM_FILE_STREAM_CLOSE = 0x1B4; +constexpr int FIX_SYM_FILE_STREAM_LENGTH = 0x1B8; +constexpr int FIX_SYM_FILE_STREAM_SEEK = 0x1BC; +constexpr int FIX_SYM_FILE_STREAM_READ = 0x1C0; +constexpr int FIX_SYM_FILE_STREAM_WRITE = 0x1C4; +constexpr int FIX_SYM_SCF_GET_LANGUAGE = 0x1C8; +constexpr int FIX_SYM_SCF_GET_TIME = 0x1CC; +constexpr int FIX_SYM_SCF_GET_ASPECT = 0x1D0; +constexpr int FIX_SYM_SCF_GET_VOLUME = 0x1D4; +constexpr int FIX_SYM_SCF_GET_TERRITORY = 0x1D8; +constexpr int FIX_SYM_SCF_GET_TIMEOUT = 0x1DC; +constexpr int FIX_SYM_SCF_GET_INACTIVE_TIMEOUT = 0x1E0; +constexpr int FIX_SYM_DMA_TO_IOP = 0x1E4; +constexpr int FIX_SYM_KERNEL_SHUTDOWN = 0x1E8; +constexpr int FIX_SYM_AYBABTU = 0x1EC; +constexpr int FIX_SYM_STRING_TO_SYMBOL = 0x1F0; +constexpr int FIX_SYM_SYMBOL_TO_STRING = 500; +constexpr int FIX_SYM_PRINT = 0x1F8; +constexpr int FIX_SYM_INSPECT = 0x1FC; +constexpr int FIX_SYM_LOAD = 0x200; +constexpr int FIX_SYM_LOADB = 0x204; +constexpr int FIX_SYM_LOADO = 0x208; +constexpr int FIX_SYM_UNLOAD = 0x20C; +constexpr int FIX_SYM_FORMAT = 0x210; +constexpr int FIX_SYM_MALLOC = 0x214; +constexpr int FIX_SYM_KMALLOC = 0x218; +constexpr int FIX_SYM_KMEMOPEN = 0x21C; +constexpr int FIX_SYM_KMEMCLOSE = 0x220; +constexpr int FIX_SYM_NEW_DYNAMIC_STRUCTURE = 0x224; +constexpr int FIX_SYM_METHOD_SET = 0x228; +constexpr int FIX_SYM_LINK = 0x22C; +constexpr int FIX_SYM_LINK_BUSY = 0x230; +constexpr int FIX_SYM_LINK_RESET = 0x234; +constexpr int FIX_SYM_LINK_BEGIN = 0x238; +constexpr int FIX_SYM_LINK_RESUME = 0x23C; +constexpr int FIX_SYM_DGO_LOAD = 0x240; +constexpr int FIX_SYM_SQL_QUERY = 0x244; +constexpr int FIX_SYM_MC_RUN = 0x248; +constexpr int FIX_SYM_MC_FORMAT = 0x24C; +constexpr int FIX_SYM_MC_UNFORMAT = 0x250; +constexpr int FIX_SYM_MC_CREATE_FILE = 0x254; +constexpr int FIX_SYM_MC_SAVE = 600; +constexpr int FIX_SYM_MC_LOAD = 0x25C; +constexpr int FIX_SYM_MC_CHECK_RESULT = 0x260; +constexpr int FIX_SYM_MC_GET_SLOT_INFO = 0x264; +constexpr int FIX_SYM_MC_MAKEFILE = 0x268; +constexpr int FIX_SYM_KSET_LANGUAGE = 0x26C; +constexpr int FIX_SYM_RPC_CALL = 0x270; +constexpr int FIX_SYM_RPC_BUSY = 0x274; +constexpr int FIX_SYM_TEST_LOAD_DGO_C = 0x278; +constexpr int FIX_SYM_SYMLINK2 = 0x27c; +constexpr int FIX_SYM_SYMLINK3 = 0x280; +constexpr int FIX_SYM_ULTIMATE_MEMCPY = 0x284; +constexpr int FIX_SYM_PLAY = 0x288; +constexpr int FIX_SYM_SYMBOL_STRING = 0x28c; +constexpr int FIX_SYM_KERNEL_SYMBOL_WARNINGS = 0x290; +constexpr int FIX_SYM_NETWORK_BOOTSTRAP = 0x294; + +} // namespace jakx_symbols + constexpr int false_symbol_offset() { return jak1_symbols::FIX_SYM_FALSE; } @@ -334,6 +508,7 @@ constexpr int true_symbol_offset(GameVersion version) { return jak1_symbols::FIX_SYM_TRUE; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: return jak2_symbols::FIX_SYM_TRUE; } } @@ -344,6 +519,7 @@ constexpr int empty_pair_offset_from_s7(GameVersion version) { return jak1_symbols::FIX_SYM_EMPTY_PAIR; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: // minus 1 for the symbol table pointer's offset. return jak2_symbols::S7_OFF_FIX_SYM_EMPTY_PAIR; } diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 1b8855f514..389078ee10 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -1100,6 +1100,7 @@ void TypeSystem::add_builtin_types(GameVersion version) { break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: 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 116f38b829..12333d0191 100644 --- a/common/util/dgo_util.cpp +++ b/common/util/dgo_util.cpp @@ -25,7 +25,8 @@ std::string get_object_file_name(const std::string& original_name, const u8* dat 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/jak3/final/art-group{}/", versions::jak3::ART_FILE_VERSION)}; + fmt::format("/src/jak3/final/art-group{}/", versions::jak3::ART_FILE_VERSION), + fmt::format("/src/jakx/final/art-group{}/", versions::jakx::ART_FILE_VERSION)}; const std::string suffix = "-ag.go"; for (auto& art_group_text : art_group_text_strings) { diff --git a/common/util/font/dbs/font_db_jakx.cpp b/common/util/font/dbs/font_db_jakx.cpp new file mode 100644 index 0000000000..43d8dbc1de --- /dev/null +++ b/common/util/font/dbs/font_db_jakx.cpp @@ -0,0 +1,795 @@ +#include "font_db_jakx.h" + +std::unordered_set passthrus_jakx = {'~', ' ', ',', '.', '-', '+', '(', ')', + '!', ':', '?', '=', '%', '*', '/', '#', + ';', '<', '>', '@', '[', '_', ']'}; + +std::vector replace_info_jakx = { + // other + {"A~Y~-21H~-5Vº~Z", "Å"}, + {"N~Y~-6Hº~Z~+10H", "Nº"}, + {"~+4Vç~-4V", ",c"}, + + // added for translations TODO - check these for jak 2 + {"O~Y~-25H~-1V/~Z", "Ø"}, + {"o~Y~-23H~+4V/~Z", "ø"}, + {"A~Y~-13H~+8V,~Z", "Ą"}, + {"a~Y~-8H~+6V,~Z", "ą"}, + {"E~Y~-6H~+8V,~Z", "Ę"}, + {"e~Y~-10H~+7V,~Z", "ę"}, + {"L~Y~-21H~+0V/~Z", "Ł"}, + {"l~Y~-16H~+0V/~Z", "ł"}, // TODO - this one is ugly, font character addition (small slash) + {"Z~Y~-25H~-11Vº~Z", "Ż"}, + {"z~Y~-23H~-5Vº~Z", "ż"}, + {"a~Y~-25H~-5Vº~Z", "å"}, + {"S~Y~-21H~-5V'~Z", "Ś"}, + {"s~Y~-25H~-5V'~Z", "ś"}, + {"n~Y~-25H~-5V'~Z", "ń"}, + {"c~Y~-25H~-5V'~Z", "ć"}, + {"o~Y~-24H~-4V~Z", "õ"}, + {"a~Y~-24H~-4V~Z", "ã"}, + {"O~Y~-28H~-4V'~-9H'~Z", "Ő"}, + {"U~Y~-27H~-4V'~-12H'~Z", "Ű"}, + {"o~Y~-28H~-4V'~-9H'~Z", "ő"}, + {"u~Y~-28H~-4V'~-9H'~Z", "ű"}, + {"E~Y~-22H~-11Vº~Z", "Ė"}, + {"e~Y~-25H~-5Vº~Z", "ė"}, + {"C~Y~-27H~-10Vˇ~Z", "Č"}, + {"c~Y~-25H~-5Vˇ~Z", "č"}, + {"D~Y~-27H~-10Vˇ~Z", "Ď"}, + {"S~Y~-24H~-10Vˇ~Z", "Š"}, + {"s~Y~-22H~-4Vˇ~Z", "š"}, + {"Z~Y~-25H~-10Vˇ~Z", "Ž"}, + {"z~Y~-23H~-4Vˇ~Z", "ž"}, + {"U~Y~-15H~+5V,~Z", "Ų"}, + {"u~Y~-15H~+5V,~Z", "ų"}, + {"U~Y~-20H~-18V-~Z", "Ū"}, + {"u~Y~-18H~-15V-~Z", "ū"}, + {"D~Y~-28H~-1V-~Z", "Đ"}, + {"d~Y~-13H~-10V-~Z", "đ"}, + {"I~Y~-8H~+4V,~Z", "Į"}, + {"i~Y~-8H~+4V,~Z", "į"}, + // czech specific + {"U~Y~-24H~-7Vº~Z", "Ů"}, + {"u~Y~-23H~-5Vº~Z", "ů"}, + {"t~Y~-7H~-21V,~Z", "ť"}, + + // tildes + {"N~Y~-22H~-4V~Z", "Ñ"}, + {"n~Y~-24H~-4V~Z", "ñ"}, + {"A~Y~-21H~-5V~Z", "Ã"}, + {"O~Y~-22H~-4V~Z", "Õ"}, + + // acute accents + {"A~Y~-21H~-5V'~Z", "Á"}, + {"A~Y~-26H~-8V'~Z", "<Á_V2>"}, // unfortunate... + {"a~Y~-25H~-5V'~Z", "á"}, + {"E~Y~-23H~-9V'~Z", "É"}, + {"e~Y~-26H~-5V'~Z", "é"}, + {"I~Y~-19H~-5V'~Z", "Í"}, + {"i~Y~-19H~-8V'~Z", "í"}, + {"O~Y~-22H~-4V'~Z", "Ó"}, + {"o~Y~-26H~-4V'~Z", "ó"}, + {"U~Y~-24H~-3V'~Z", "Ú"}, + {"u~Y~-24H~-3V'~Z", "ú"}, + {"Z~Y~-24H~-3V'~Z", "Ź"}, + {"z~Y~-24H~-3V'~Z", "ź"}, + // czech specific + {"Y~Y~-26H~-5V'~Z", "Ý"}, + {"~+7Vy~-7V~Y~-24H~-3V'~Z", "ý"}, + + // circumflex + {"A~Y~-20H~-4V^~Z", "Â"}, + {"a~Y~-24H~-5V^~Z", "â"}, + {"E~Y~-20H~-5V^~Z", "Ê"}, + {"e~Y~-25H~-4V^~Z", "ê"}, + {"I~Y~-19H~-5V^~Z", "Î"}, + {"i~Y~-19H~-8V^~Z", "î"}, + {"O~Y~-20H~-4V^~Z", "Ô"}, + {"o~Y~-25H~-4V^~Z", "ô"}, + {"U~Y~-24H~-3V^~Z", "Û"}, + {"u~Y~-23H~-3V^~Z", "û"}, + + // grave accents + {"A~Y~-26H~-8V`~Z", "À"}, + {"a~Y~-25H~-5V`~Z", "à"}, + {"E~Y~-23H~-9V`~Z", "È"}, + {"e~Y~-26H~-5V`~Z", "è"}, + {"I~Y~-19H~-5V`~Z", "Ì"}, + {"i~Y~-19H~-8V`~Z", "ì"}, + {"O~Y~-22H~-4V`~Z", "Ò"}, + {"o~Y~-26H~-4V`~Z", "ò"}, + {"U~Y~-24H~-3V`~Z", "Ù"}, + {"u~Y~-24H~-3V`~Z", "ù"}, + + // umlaut + {"A~Y~-26H~-8V¨~Z", "Ä"}, + {"a~Y~-25H~-5V¨~Z", "ä"}, + {"E~Y~-20H~-5V¨~Z", "Ë"}, + {"e~Y~-25H~-5V¨~Z", "ë"}, + {"I~Y~-19H~-5V¨~Z", "Ï"}, + {"i~Y~-26H~-4V¨~Z", "ï"}, + {"O~Y~-26H~-8V¨~Z", "Ö"}, + {"o~Y~-26H~-4V¨~Z", "ö"}, + {"U~Y~-25H~-8V¨~Z", "Ü"}, + {"u~Y~-24H~-3V¨~Z", "ü"}, + + // caron - Ǎ ǎ Ě ě Ǧ ǧ Ǐ ǐ Ǒ ǒ Ǔ ǔ Y̌ y̌ + {"A~Y~-25H~-9Vˇ~Z", "Ǎ"}, + {"a~Y~-24H~-5Vˇ~Z", "ǎ"}, + {"E~Y~-22H~-8Vˇ~Z", "Ě"}, + {"e~Y~-25H~-4Vˇ~Z", "ě"}, + {"G~Y~-24H~-8Vˇ~Z", "Ǧ"}, + {"~+7Vg~-7V~Y~-25H~-4Vˇ~Z", "ǧ"}, + {"I~Y~-19H~-8Vˇ~Z", "Ǐ"}, + {"i~Y~-19H~-8Vˇ~Z", "ǐ"}, + {"O~Y~-25H~-7Vˇ~Z", "Ǒ"}, + {"o~Y~-25H~-4Vˇ~Z", "ǒ"}, + {"U~Y~-25H~-6Vˇ~Z", "Ǔ"}, + {"u~Y~-24H~-3Vˇ~Z", "ǔ"}, + {"Y~Y~-25H~-5Vˇ~Z", "Y̌"}, + {"~+7Vy~-7V~Y~-25H~-3Vˇ~Z", "y̌"}, + // czech specific - Č č Ň ň Ř ř Š š Ž ž Ť + {"C~Y~-25H~-9Vˇ~Z", "Č"}, + {"c~Y~-24H~-5Vˇ~Z", "č"}, + {"N~Y~-25H~-9Vˇ~Z", "Ň"}, + {"n~Y~-24H~-5Vˇ~Z", "ň"}, + {"R~Y~-25H~-9Vˇ~Z", "Ř"}, + {"r~Y~-22H~-5Vˇ~Z", "ř"}, + {"S~Y~-25H~-9Vˇ~Z", "Š"}, + {"s~Y~-22H~-5Vˇ~Z", "š"}, + {"T~Y~-24H~-7Vˇ~Z", "Ť"}, + {"Z~Y~-25H~-9Vˇ~Z", "Ž"}, + {"z~Y~-24H~-5Vˇ~Z", "ž"}, + + // dakuten katakana + {"~Yウ~Z゛", "ヴ"}, + {"~Yカ~Z゛", "ガ"}, + {"~Yキ~Z゛", "ギ"}, + {"~Yク~Z゛", "グ"}, + {"~Yケ~Z゛", "ゲ"}, + {"~Yコ~Z゛", "ゴ"}, + {"~Yサ~Z゛", "ザ"}, + {"~Yシ~Z゛", "ジ"}, + {"~Yス~Z゛", "ズ"}, + {"~Yセ~Z゛", "ゼ"}, + {"~Yソ~Z゛", "ゾ"}, + {"~Yタ~Z゛", "ダ"}, + {"~Yチ~Z゛", "ヂ"}, + {"~Yツ~Z゛", "ヅ"}, + {"~Yテ~Z゛", "デ"}, + {"~Yト~Z゛", "ド"}, + {"~Yハ~Z゛", "バ"}, + {"~Yヒ~Z゛", "ビ"}, + {"~Yフ~Z゛", "ブ"}, + {"~Yヘ~Z゛", "ベ"}, + {"~Yホ~Z゛", "ボ"}, + // handakuten katakana + {"~Yハ~Z゜", "パ"}, + {"~Yヒ~Z゜", "ピ"}, + {"~Yフ~Z゜", "プ"}, + {"~Yヘ~Z゜", "ペ"}, + {"~Yホ~Z゜", "ポ"}, + // dakuten hiragana + {"~Yか~Z゛", "が"}, + {"~Yき~Z゛", "ぎ"}, + {"~Yく~Z゛", "ぐ"}, + {"~Yけ~Z゛", "げ"}, + {"~Yこ~Z゛", "ご"}, + {"~Yさ~Z゛", "ざ"}, + {"~Yし~Z゛", "じ"}, + {"~Yす~Z゛", "ず"}, + {"~Yせ~Z゛", "ぜ"}, + {"~Yそ~Z゛", "ぞ"}, + {"~Yた~Z゛", "だ"}, + {"~Yち~Z゛", "ぢ"}, + {"~Yつ~Z゛", "づ"}, + {"~Yて~Z゛", "で"}, + {"~Yと~Z゛", "ど"}, + {"~Yは~Z゛", "ば"}, + {"~Yひ~Z゛", "び"}, + {"~Yふ~Z゛", "ぶ"}, + {"~Yへ~Z゛", "べ"}, + {"~Yほ~Z゛", "ぼ"}, + // handakuten hiragana + {"~Yは~Z゜", "ぱ"}, + {"~Yひ~Z゜", "ぴ"}, + {"~Yふ~Z゜", "ぷ"}, + {"~Yへ~Z゜", "ぺ"}, + {"~Yほ~Z゜", "ぽ"}, + // japanese punctuation + {",~+8H", "、"}, + {"~+8H ", " "}, + + // playstation buttons + // - face + {"~Y~22L<~Z~Y~27L*~Z~Y~1L>~Z~Y~23L[~Z~+26H", ""}, + {"~Y~22L<~Z~Y~26L;~Z~Y~1L>~Z~Y~23L[~Z~+26H", ""}, + {"~Y~22L<~Z~Y~25L@~Z~Y~1L>~Z~Y~23L[~Z~+26H", ""}, + {"~Y~22L<~Z~Y~24L#~Z~Y~1L>~Z~Y~23L[~Z~+26H", ""}, + // - dpad + {"~Y~22L~Z~3L~+17H~-13V~Z~22L~+17H~+14V~Z~" + "22L~+32H~Z~+56H", + ""}, + {"~Y~22L~Z~3L~+17H~-13V~Z~3L~+17H~+14V~Z~" + "22L~+32H~Z~+56H", + ""}, + {"~Y~22L~Z~22L~+17H~-13V~Z~22L~+17H~+14V~Z~" + "22L~+32H~Z~+56H", + ""}, + // - shoulder + {"~Y~22L~-2H~-12V~Z~22L~-2H~+17V~Z~1L~+4H~+3V~Z~+" + "38H", + ""}, + {"~Y~22L~-2H~-12V~Z~22L~-2H~+17V~Z~1L~+6H~+3V~Z~+" + "38H", + ""}, + {"~Y~22L~-2H~-6V~Z~22L~-2H~+16V~Z~1L~+5H~-2V~Z~+" + "38H", + ""}, + {"~Y~22L~-2H~-6V~Z~22L~-2H~+16V~Z~1L~+5H~-2V~Z~+" + "38H", + ""}, + // - analog + {"~1L~+8H~Y~Z~6L~-16H~Z~+16h~6L~Z~" + "6L~-15V~Z~+13V~6L~Z~-10H~+9V~6L~Z~+10H~+9V~6L~Z~-10H~-11V~6L~Z~+10H~" + "-11V~6L~Z~+32H", + ""}, + {"~Y~1L~+8H~Z~6L~-8H~Z~+24H~6L~Z~+" + "40H", + ""}, + {"~Y~1L~Z~6L~-15V~Z~+13V~6L~Z~+26H", + ""}, + + // icons + {"~Y~6L<~Z~Y~1L>~Z~Y~23L[~Z~+26H", ""}, + {"~Y~3L<~Z~Y~1L>~Z~Y~23L[~Z~+26H", ""}, + + // flags + {"~Y~6L~Z~+15H~1L~Z~+30H~3L~Z~+45H", + ""}, + {"~Y~5L~Z~3L~]~-1H~Y~5L~Z~3L~Z~+26H", + ""}, + {"~Y~39L~~~Z~3L~Z~5L~]~-1H~Y~39L~~~" + "Z~3L~Z~5L~Z~+26H", + ""}, + {"~Y~7L~Z~+15H~1L~Z~+30H~3L~Z~+47H", + ""}, + {"~Y~1L~Z~3L~Z~7L~]~-1H~Y~1L<" + "FLAG_PART_FILL>~Z~3L~Z~7L~Z~+26H", + ""}, + {"~Y~1L~Z~3L~Z~7L~]~-1H~Y~1L<" + "FLAG_PART_FILL>~Z~3L~Z~+26H", + ""}, + {"~Y~1L~Z~39L~]~-1H~Y~1L~Z~39L<" + "FLAG_PART_KOREA_TRIGRAMS_RIGHT>~Z~-11H~7L~Z~-11H~3L~Z~+26H", + ""}, + {"~Y~1L~]~-1H~Y~1L~Z~-11H~3L~Z~+26H", + ""}, + {"~Y~1L~Z~7L~Z~7L~]" + "~-1H~Y~1L~Z~7L~Z~+26H", + ""}, + {"~Y~7L~Z~5L~Z~5L~]" + "~-1H~Y~7L~Z~5L~Z~+26H", + ""}, + {"~Y~3L~Z~1L~Z~1L~]" + "~-1H~Y~3L~Z~1L~Z~+26H", + ""}, + {"~Y~1L~Z~3L~]~-1H~Y~1L~Z~3L~Z~-19H~1L~Z~-23H~7L~Z~-23H~7L~Z~7L~Z~" + "+26H", + ""}, + {"~Y~1L~Z~7L~]~-1H~Y~1L~Z~7L~Z~-19H~1L~Z~-23H~3L~Z~-23H~3L~Z~3L~Z~" + "+26H", + ""}, + + // weird stuff + // - descenders + {"~+7Vp~-7V", "p"}, + {"~+7Vy~-7V", "y"}, + {"~+7Vg~-7V", "g"}, + {"~+7Vq~-7V", "q"}, + {"~+1Vj~-1V", "j"}, + + {"\\\\", + "~%"}, // this is 2 slashes, duplicated because we use an escape sequence when decompiling + + // - symbols and ligatures + {"~-4H~-3V~+3V~-4H", + ""}, // used for the 4<__> place in spanish. the 5th uses the same + // character but looks different...? + {"~Y~-6Hº~Z~+10H", "°"}, + + // Color / Emphasis + {"~[~0L", ""}, + {"~[~1L", ""}, + {"~[~2L", ""}, + {"~[~3L", ""}, + {"~[~4L", ""}, + {"~[~5L", ""}, + {"~[~6L", ""}, + {"~[~7L", ""}, + {"~[~8L", ""}, + {"~[~9L", ""}, + {"~[~10L", ""}, + {"~[~11L", ""}, + {"~[~12L", ""}, + {"~[~13L", ""}, + {"~[~14L", ""}, + {"~[~15L", ""}, + {"~[~16L", ""}, + {"~[~17L", ""}, + {"~[~18L", ""}, + {"~[~19L", ""}, + {"~[~20L", ""}, + {"~[~21L", ""}, + {"~[~22L", ""}, + {"~[~23L", ""}, + {"~[~24L", ""}, + {"~[~25L", ""}, + {"~[~26L", ""}, + {"~[~27L", ""}, + {"~[~28L", ""}, + {"~[~29L", ""}, + {"~[~30L", ""}, + {"~[~31L", ""}, + {"~[~32L", ""}, + {"~[~33L", ""}, + {"~[~34L", ""}, + {"~[~35L", ""}, + {"~[~36L", ""}, + {"~[~37L", ""}, + {"~[~38L", ""}, + {"~[~39L", ""}}; + +// TODO - cryllic + +std::vector encode_info_jakx = { + {"ˇ", "\x10"}, // caron + {"`", "\x11"}, // grave accent + {"'", "\x12"}, // apostrophe + {"^", "\x13"}, // circumflex + {"", "\x14"}, // tilde + {"¨", "\x15"}, // umlaut + {"º", "\x16"}, // numero/overring + {"¡", "\x17"}, // inverted exclamation mark + {"¿", "\x18"}, // inverted question mark + {"", "\x19"}, + {"ç", "\x1d"}, // c-cedilla + {"Ç", "\x1e"}, // c-cedilla + {"ß", "\x1f"}, // eszett + + {"œ", "\x5e"}, // ligature o+e + + {"", "\x7f"}, + {"", "\x80"}, + {"", "\x81"}, + {"", "\x82"}, + {"", "\x83"}, + {"", "\x84"}, + {"", "\x85"}, + {"", "\x86"}, + {"", "\x87"}, + {"", "\x88"}, + {"", "\x89"}, + {"", "\x8a"}, + {"", "\x8b"}, + {"", "\x8c"}, + {"", "\x8d"}, + {"", "\x8e"}, + {"", "\x8f"}, + {"", "\x90"}, + {"", "\x91"}, + {"", "\x92"}, + {"", "\x93"}, + {"", "\x94"}, + {"", "\x95"}, + {"", "\x96"}, + {"", "\x97"}, + {"", "\x98"}, + {"", "\x99"}, + {"", "\x9a"}, + {"", "\x9b"}, + {"", "\x9c"}, + {"", "\x9d"}, + {"", "\x9e"}, + {"", "\x9f"}, + {"", "\xa0"}, + {"", "\xa1"}, + {"", "\xa2"}, + {"", "\xa3"}, + {"", "\xa4"}, + {"", "\xa5"}, + {"", "\xa6"}, + {"", "\xa7"}, + {"", "\xa8"}, + {"", "\xa9"}, + {"", "\xaa"}, + {"", "\xab"}, + {"", "\xac"}, + + {"", "\xb0"}, + {"", "\xb1"}, + {"", "\xb2"}, + {"", "\xb3"}, + // {"入", "\x1\x00"}}, + // {"年", "\x1\x01"}}, + // punctuation + {"・", "\x1\x10"}, + {"゛", "\x1\x11"}, + {"゜", "\x1\x12"}, + {"ー", "\x1\x13"}, + {"『", "\x1\x14"}, + {"』", "\x1\x15"}, + // hiragana + {"ぁ", "\x1\x16"}, // -a + {"あ", "\x1\x17"}, // a + {"ぃ", "\x1\x18"}, // -i + {"い", "\x1\x19"}, // i + {"ぅ", "\x1\x1a"}, // -u + {"う", "\x1\x1b"}, // u + {"ぇ", "\x1\x1c"}, // -e + {"え", "\x1\x1d"}, // e + {"ぉ", "\x1\x1e"}, // -o + {"お", "\x1\x1f"}, // o + {"か", "\x1\x20"}, // ka + {"き", "\x1\x21"}, // ki + {"く", "\x1\x22"}, // ku + {"け", "\x1\x23"}, // ke + {"こ", "\x1\x24"}, // ko + {"さ", "\x1\x25"}, // sa + {"し", "\x1\x26"}, // shi + {"す", "\x1\x27"}, // su + {"せ", "\x1\x28"}, // se + {"そ", "\x1\x29"}, // so + {"た", "\x1\x2a"}, // ta + {"ち", "\x1\x2b"}, // chi + {"っ", "\x1\x2c"}, // sokuon + {"つ", "\x1\x2d"}, // tsu + {"て", "\x1\x2e"}, // te + {"と", "\x1\x2f"}, // to + {"な", "\x1\x30"}, // na + {"に", "\x1\x31"}, // ni + {"ぬ", "\x1\x32"}, // nu + {"ね", "\x1\x33"}, // ne + {"の", "\x1\x34"}, // no + {"は", "\x1\x35"}, // ha + {"ひ", "\x1\x36"}, // hi + {"ふ", "\x1\x37"}, // fu + {"へ", "\x1\x38"}, // he + {"ほ", "\x1\x39"}, // ho + {"ま", "\x1\x3a"}, // ma + {"み", "\x1\x3b"}, // mi + {"む", "\x1\x3c"}, // mu + {"め", "\x1\x3d"}, // me + {"も", "\x1\x3e"}, // mo + {"ゃ", "\x1\x3f"}, // youon ya + {"や", "\x1\x40"}, // ya + {"ゅ", "\x1\x41"}, // youon yu + {"ゆ", "\x1\x42"}, // yu + {"ょ", "\x1\x43"}, // youon yo + {"よ", "\x1\x44"}, // yo + {"ら", "\x1\x45"}, // ra + {"り", "\x1\x46"}, // ri + {"る", "\x1\x47"}, // ru + {"れ", "\x1\x48"}, // re + {"ろ", "\x1\x49"}, // ro + {"ゎ", "\x1\x4a"}, // -wa + {"わ", "\x1\x4b"}, // wa + {"を", "\x1\x4c"}, // wo + {"ん", "\x1\x4d"}, // -n + // katakana + {"ァ", "\x1\x4e"}, // -a + {"ア", "\x1\x4f"}, // a + {"ィ", "\x1\x50"}, // -i + {"イ", "\x1\x51"}, // i + {"ゥ", "\x1\x52"}, // -u + {"ウ", "\x1\x53"}, // u + {"ェ", "\x1\x54"}, // -e + {"エ", "\x1\x55"}, // e + {"ォ", "\x1\x56"}, // -o + {"オ", "\x1\x57"}, // o + {"カ", "\x1\x58"}, // ka + {"キ", "\x1\x59"}, // ki + {"ク", "\x1\x5a"}, // ku + {"ケ", "\x1\x5b"}, // ke + {"コ", "\x1\x5c"}, // ko + {"サ", "\x1\x5d"}, // sa + {"シ", "\x1\x5e"}, // shi + {"ス", "\x1\x5f"}, // su + {"セ", "\x1\x60"}, // se + {"ソ", "\x1\x61"}, // so + {"タ", "\x1\x62"}, // ta + {"チ", "\x1\x63"}, // chi + {"ッ", "\x1\x64"}, // sokuon + {"ツ", "\x1\x65"}, // tsu + {"テ", "\x1\x66"}, // te + {"ト", "\x1\x67"}, // to + {"ナ", "\x1\x68"}, // na + {"ニ", "\x1\x69"}, // ni + {"ヌ", "\x1\x6a"}, // nu + {"ネ", "\x1\x6b"}, // ne + {"ノ", "\x1\x6c"}, // no + {"ハ", "\x1\x6d"}, // ha + {"ヒ", "\x1\x6e"}, // hi + {"フ", "\x1\x6f"}, // fu + {"ヘ", "\x1\x70"}, // he + {"ホ", "\x1\x71"}, // ho + {"マ", "\x1\x72"}, // ma + {"ミ", "\x1\x73"}, // mi + {"ム", "\x1\x74"}, // mu + {"メ", "\x1\x75"}, // me + {"モ", "\x1\x76"}, // mo + {"ャ", "\x1\x77"}, // youon ya + {"ヤ", "\x1\x78"}, // ya + {"ュ", "\x1\x79"}, // youon yu + {"ユ", "\x1\x7a"}, // yu + {"ョ", "\x1\x7b"}, // youon yo + {"ヨ", "\x1\x7c"}, // yo + {"ラ", "\x1\x7d"}, // ra + {"リ", "\x1\x7e"}, // ri + {"ル", "\x1\x7f"}, // ru + {"レ", "\x1\x80"}, // re + {"ロ", "\x1\x81"}, // ro + {"ヮ", "\x1\x82"}, // -wa + {"ワ", "\x1\x83"}, // wa + {"ヲ", "\x1\x84"}, // wo + {"ン", "\x1\x85"}, // -n + + {"位", "\x1\x8c"}, + {"遺", "\x1\x8d"}, + {"院", "\x1\x8e"}, + {"映", "\x1\x8f"}, + {"衛", "\x1\x90"}, + {"応", "\x1\x91"}, + {"下", "\x1\x92"}, + {"画", "\x1\x93"}, + {"解", "\x1\x94"}, + {"開", "\x1\x95"}, + {"外", "\x1\x96"}, + {"害", "\x1\x97"}, + {"蓋", "\x1\x98"}, + {"完", "\x1\x99"}, + {"換", "\x1\x9a"}, + {"監", "\x1\x9b"}, + {"間", "\x1\x9c"}, + {"器", "\x1\x9d"}, + {"記", "\x1\x9e"}, + {"逆", "\x1\x9f"}, + {"救", "\x1\xa0"}, + {"金", "\x1\xa1"}, + {"空", "\x1\xa2"}, + {"掘", "\x1\xa3"}, + {"警", "\x1\xa4"}, + {"迎", "\x1\xa5"}, + {"撃", "\x1\xa6"}, + {"建", "\x1\xa7"}, + {"源", "\x1\xa8"}, + {"現", "\x1\xa9"}, + {"言", "\x1\xaa"}, + {"限", "\x1\xab"}, + {"個", "\x1\xac"}, + {"庫", "\x1\xad"}, + {"後", "\x1\xae"}, + {"語", "\x1\xaf"}, + {"護", "\x1\xb0"}, + {"交", "\x1\xb1"}, + {"功", "\x1\xb2"}, + {"向", "\x1\xb3"}, + {"工", "\x1\xb4"}, + {"攻", "\x1\xb5"}, + {"溝", "\x1\xb6"}, + {"行", "\x1\xb7"}, + {"鉱", "\x1\xb8"}, + {"降", "\x1\xb9"}, + {"合", "\x1\xba"}, + {"告", "\x1\xbb"}, + {"獄", "\x1\xbc"}, + {"彩", "\x1\xbd"}, + {"作", "\x1\xbe"}, + {"山", "\x1\xbf"}, + {"使", "\x1\xc0"}, + {"始", "\x1\xc1"}, + {"試", "\x1\xc2"}, + {"字", "\x1\xc3"}, + {"寺", "\x1\xc4"}, + {"時", "\x1\xc5"}, + {"示", "\x1\xc6"}, + {"自", "\x1\xc7"}, + {"式", "\x1\xc8"}, + {"矢", "\x1\xc9"}, + {"射", "\x1\xca"}, + {"者", "\x1\xcb"}, + {"守", "\x1\xcc"}, + {"手", "\x1\xcd"}, + {"終", "\x1\xce"}, + {"週", "\x1\xcf"}, + {"出", "\x1\xd0"}, + {"所", "\x1\xd1"}, + {"書", "\x1\xd2"}, + {"勝", "\x1\xd3"}, + {"章", "\x1\xd4"}, + {"上", "\x1\xd5"}, + {"乗", "\x1\xd6"}, + {"場", "\x1\xd7"}, + {"森", "\x1\xd8"}, + {"進", "\x1\xd9"}, + {"人", "\x1\xda"}, + {"水", "\x1\xdb"}, + {"数", "\x1\xdc"}, + {"制", "\x1\xdd"}, + {"性", "\x1\xde"}, + {"成", "\x1\xdf"}, + {"聖", "\x1\xe0"}, + {"石", "\x1\xe1"}, + {"跡", "\x1\xe2"}, + {"先", "\x1\xe3"}, + {"戦", "\x1\xe4"}, + {"船", "\x1\xe5"}, + {"選", "\x1\xe6"}, + {"走", "\x1\xe7"}, + {"送", "\x1\xe8"}, + {"像", "\x1\xe9"}, + {"造", "\x1\xea"}, + {"続", "\x1\xeb"}, + {"対", "\x1\xec"}, + {"袋", "\x1\xed"}, + {"台", "\x1\xee"}, + {"弾", "\x1\xef"}, + {"地", "\x1\xf0"}, + {"中", "\x1\xf1"}, + {"敵", "\x1\xf2"}, + {"転", "\x1\xf3"}, + {"電", "\x1\xf4"}, + {"塔", "\x1\xf5"}, + {"頭", "\x1\xf6"}, + {"動", "\x1\xf7"}, + {"内", "\x1\xf8"}, + {"日", "\x1\xf9"}, + {"入", "\x1\xfa"}, + {"年", "\x1\xfb"}, + {"能", "\x1\xfc"}, + {"廃", "\x1\xfd"}, + {"排", "\x1\xfe"}, + {"敗", "\x1\xff"}, + + {"発", "\x2\x10"}, + {"反", "\x2\x11"}, + {"必", "\x2\x12"}, + {"表", "\x2\x13"}, + {"武", "\x2\x14"}, + {"壁", "\x2\x15"}, + {"墓", "\x2\x16"}, + {"放", "\x2\x17"}, + {"方", "\x2\x18"}, + {"砲", "\x2\x19"}, + {"妨", "\x2\x1a"}, + {"北", "\x2\x1b"}, + {"本", "\x2\x1c"}, + {"幕", "\x2\x1d"}, + {"無", "\x2\x1e"}, + {"迷", "\x2\x1f"}, + {"面", "\x2\x20"}, + {"戻", "\x2\x21"}, + {"紋", "\x2\x22"}, + {"薬", "\x2\x23"}, + {"輸", "\x2\x24"}, + {"勇", "\x2\x25"}, + {"友", "\x2\x26"}, + {"遊", "\x2\x27"}, + {"容", "\x2\x28"}, + {"要", "\x2\x29"}, + {"利", "\x2\x2a"}, + {"了", "\x2\x2b"}, + {"量", "\x2\x2c"}, + {"力", "\x2\x2d"}, + {"練", "\x2\x2e"}, + {"連", "\x2\x2f"}, + {"録", "\x2\x30"}, + {"話", "\x2\x31"}, + {"墟", "\x2\x32"}, + {"脱", "\x2\x33"}, + // {"成", "\x2\x34"}, + {"旗", "\x2\x35"}, + {"破", "\x2\x36"}, + {"壊", "\x2\x37"}, + {"全", "\x2\x38"}, + {"滅", "\x2\x39"}, + {"機", "\x2\x3a"}, + {"仲", "\x2\x3b"}, + {"渓", "\x2\x3c"}, + {"谷", "\x2\x3d"}, + {"優", "\x2\x3e"}, + {"探", "\x2\x3f"}, + {"部", "\x2\x40"}, + {"索", "\x2\x41"}, + // {"乗", "\x2\x42"}, + {"前", "\x2\x43"}, + {"右", "\x2\x44"}, + {"左", "\x2\x45"}, + {"会", "\x2\x46"}, + {"高", "\x2\x47"}, + {"低", "\x2\x48"}, + {"押", "\x2\x49"}, + {"切", "\x2\x4a"}, + {"替", "\x2\x4b"}, + // {"対", "\x2\x4c"}, + {"秒", "\x2\x4d"}, + {"箱", "\x2\x4e"}, + {"泳", "\x2\x4f"}, + {"~", "\x2\x50"}, + + {"闇", "\x2\x56"}, + {"以", "\x2\x57"}, + {"屋", "\x2\x58"}, + {"俺", "\x2\x59"}, + {"化", "\x2\x5a"}, + {"界", "\x2\x5b"}, + {"感", "\x2\x5c"}, + {"気", "\x2\x5d"}, + {"却", "\x2\x5e"}, + {"曲", "\x2\x5f"}, + {"継", "\x2\x60"}, + {"権", "\x2\x61"}, + {"見", "\x2\x62"}, + {"古", "\x2\x63"}, + {"好", "\x2\x64"}, + // {"高", "\x2\x65"}, + {"才", "\x2\x66"}, + {"士", "\x2\x67"}, + {"子", "\x2\x68"}, + {"次", "\x2\x69"}, + {"主", "\x2\x6a"}, + {"種", "\x2\x6b"}, + {"讐", "\x2\x6c"}, + {"女", "\x2\x6d"}, + {"小", "\x2\x6e"}, + {"焼", "\x2\x6f"}, + {"証", "\x2\x70"}, + {"神", "\x2\x71"}, + {"身", "\x2\x72"}, + {"寸", "\x2\x73"}, + {"世", "\x2\x74"}, + {"想", "\x2\x75"}, + {"退", "\x2\x76"}, + {"第", "\x2\x77"}, + {"着", "\x2\x78"}, + {"天", "\x2\x79"}, + {"倒", "\x2\x7a"}, + {"到", "\x2\x7b"}, + {"突", "\x2\x7c"}, + {"爆", "\x2\x7d"}, + {"番", "\x2\x7e"}, + {"負", "\x2\x7f"}, + {"復", "\x2\x80"}, + {"物", "\x2\x81"}, + {"眠", "\x2\x82"}, + {"予", "\x2\x83"}, + {"用", "\x2\x84"}, + {"落", "\x2\x85"}, + {"緑", "\x2\x86"}, + + {"封", "\x2\x88"}, + {"印", "\x2\x89"}, + {"扉", "\x2\x8a"}, + {"最", "\x2\x8b"}, + {"刻", "\x2\x8c"}, + {"足", "\x2\x8d"}, +}; + +GameTextFontBank g_font_bank_jakx(GameTextVersion::JAKX, + &encode_info_jakx, + &replace_info_jakx, + &passthrus_jakx); diff --git a/common/util/font/dbs/font_db_jakx.h b/common/util/font/dbs/font_db_jakx.h new file mode 100644 index 0000000000..cb75ee2a39 --- /dev/null +++ b/common/util/font/dbs/font_db_jakx.h @@ -0,0 +1,14 @@ +#pragma once + +#include "common/util/font/font_utils.h" + +/*! + * ================================ + * GAME TEXT FONT BANK - JAK X + * ================================ + * This font is used in: + * - Jak X + */ +// TODO cyrillic +// TODO - current just using the jak 3 stuff (hopefully it's identical?) +extern GameTextFontBank g_font_bank_jak3; \ No newline at end of file diff --git a/common/versions/versions.cpp b/common/versions/versions.cpp index 4cc08cc866..85d20e19b4 100644 --- a/common/versions/versions.cpp +++ b/common/versions/versions.cpp @@ -12,6 +12,8 @@ GameVersion game_name_to_version(const std::string& name) { return GameVersion::Jak2; } else if (name == "jak3") { return GameVersion::Jak3; + } else if (name == "jakx") { + return GameVersion::JakX; } else { ASSERT_MSG(false, fmt::format("invalid game name: {}", name)); } @@ -29,6 +31,8 @@ std::string version_to_game_name(GameVersion v) { return "jak2"; case GameVersion::Jak3: return "jak3"; + case GameVersion::JakX: + return "jakx"; default: ASSERT_MSG(false, fmt::format("no game_name for version: {} found", fmt::underlying(v))); } @@ -42,6 +46,8 @@ std::string version_to_game_name_external(GameVersion v) { return "Jak 2"; case GameVersion::Jak3: return "Jak 3"; + case GameVersion::JakX: + return "Jak X"; default: ASSERT_MSG(false, fmt::format("no game_name for version: {} found", fmt::underlying(v))); } @@ -49,7 +55,7 @@ std::string version_to_game_name_external(GameVersion v) { std::vector valid_game_version_names() { return {game_version_names[GameVersion::Jak1], game_version_names[GameVersion::Jak2], - game_version_names[GameVersion::Jak3]}; + game_version_names[GameVersion::Jak3], game_version_names[GameVersion::JakX]}; } std::string build_revision() { diff --git a/common/versions/versions.h b/common/versions/versions.h index 7c58c6f23a..3c87fef543 100644 --- a/common/versions/versions.h +++ b/common/versions/versions.h @@ -38,6 +38,13 @@ constexpr u32 DGO_FILE_VERSION = 1; constexpr u32 TX_PAGE_VERSION = 8; } // namespace jak3 +namespace jakx { +constexpr u32 ART_FILE_VERSION = 8; +constexpr u32 LEVEL_FILE_VERSION = 36; +constexpr u32 DGO_FILE_VERSION = 1; +constexpr u32 TX_PAGE_VERSION = 8; +} // namespace jakx + } // namespace versions // GOAL kernel version (OpenGOAL changes this version from the game's version) @@ -48,17 +55,17 @@ 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, Jak3 = 3 }; +enum class GameVersion { Jak1 = 1, Jak2 = 2, Jak3 = 3, JakX = 4 }; // TODO: most usages of this are currently stubs for jak 3 template struct PerGameVersion { - constexpr PerGameVersion(T jak1, T jak2, T jak3) : data{jak1, jak2, jak3} {} + constexpr PerGameVersion(T jak1, T jak2, T jak3, T jakx) : data{jak1, jak2, jak3, jakx} {} constexpr const T& operator[](GameVersion v) const { return data[(int)v - 1]; } - T data[3]; + T data[4]; }; -constexpr PerGameVersion game_version_names = {"jak1", "jak2", "jak3"}; +constexpr PerGameVersion game_version_names = {"jak1", "jak2", "jak3", "jakx"}; GameVersion game_name_to_version(const std::string& name); bool valid_game_version(const std::string& name); diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp index 34fa481561..a7e9847a36 100644 --- a/decompiler/IR2/Form.cpp +++ b/decompiler/IR2/Form.cpp @@ -3276,6 +3276,7 @@ goos::Object DefskelgroupElement::to_form_internal(const Env& env) const { } break; case GameVersion::Jak3: + case GameVersion::JakX: if (m_static_info.version != 8) { forms.push_back(pretty_print::to_symbol(fmt::format(":version {}", m_static_info.version))); } diff --git a/decompiler/IR2/Form.h b/decompiler/IR2/Form.h index 17b22e5c8a..f627939fe4 100644 --- a/decompiler/IR2/Form.h +++ b/decompiler/IR2/Form.h @@ -1827,6 +1827,8 @@ class DefpartElement : public FormElement { case GameVersion::Jak2: case GameVersion::Jak3: return field_id == 72; + case GameVersion::JakX: + return field_id == 71; default: ASSERT_MSG(false, fmt::format("unknown version for is_sp_end")); return false; diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index 9dac30b06d..897325f700 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -750,6 +750,8 @@ std::string ObjectFileDB::process_tpages(TextureDB& tex_db, case GameVersion::Jak3: animated_slots = jak3_animated_texture_slots(); break; + case GameVersion::JakX: + break; default: ASSERT_NOT_REACHED(); } @@ -857,10 +859,9 @@ std::string ObjectFileDB::process_all_spool_subtitles(const Config& cfg, } } -std::string ObjectFileDB::process_game_text_files(const Config& cfg) { +std::string ObjectFileDB::process_game_text_files(const Config& cfg, std::string text_string) { try { lg::info("- Finding game text..."); - std::string text_string = "COMMON"; Timer timer; int file_count = 0; int string_count = 0; @@ -868,7 +869,7 @@ std::string ObjectFileDB::process_game_text_files(const Config& cfg) { std::unordered_map> text_by_language_by_id; for_each_obj([&](ObjectFileData& data) { - if (data.name_in_dgo.substr(1) == text_string) { + if (data.name_in_dgo.ends_with(text_string)) { file_count++; auto statistics = process_game_text(data, cfg.text_version); string_count += statistics.total_text; @@ -924,7 +925,7 @@ void get_joint_info(ObjectFileDB& db, ObjectFileData& obj, JointGeo jg) { const auto& words = obj.linked_data.words_by_seg.at(MAIN_SEGMENT); for (size_t i = 0; i < jg.length; ++i) { u32 label = 0x0; - if (db.version() == GameVersion::Jak3) { + if (db.version() == GameVersion::Jak3 || db.version() == GameVersion::JakX) { label = words.at((jg.offset / 4) + 11 + i).label_id(); } else { label = words.at((jg.offset / 4) + 7 + i).label_id(); diff --git a/decompiler/ObjectFile/ObjectFileDB.h b/decompiler/ObjectFile/ObjectFileDB.h index 049064433c..835f57c846 100644 --- a/decompiler/ObjectFile/ObjectFileDB.h +++ b/decompiler/ObjectFile/ObjectFileDB.h @@ -272,7 +272,7 @@ class ObjectFileDB { const Config& cfg, const fs::path& dump_out); std::string process_game_count_file(); - std::string process_game_text_files(const Config& cfg); + std::string process_game_text_files(const Config& cfg, std::string text_string = "COMMON"); std::string process_all_spool_subtitles(const Config& cfg, const fs::path& image_out); const ObjectFileData& lookup_record(const ObjectFileRecord& rec) const; diff --git a/decompiler/analysis/atomic_op_builder.cpp b/decompiler/analysis/atomic_op_builder.cpp index e9a963672e..418484677c 100644 --- a/decompiler/analysis/atomic_op_builder.cpp +++ b/decompiler/analysis/atomic_op_builder.cpp @@ -1855,6 +1855,7 @@ std::unique_ptr convert_5(const Instruction& i0, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: process_offset = 48; break; default: diff --git a/decompiler/analysis/cfg_builder.cpp b/decompiler/analysis/cfg_builder.cpp index d181e35c89..ae92f51d8e 100644 --- a/decompiler/analysis/cfg_builder.cpp +++ b/decompiler/analysis/cfg_builder.cpp @@ -1430,7 +1430,7 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt f.ir2.env.disable_def(b2_delay_op.dst(), f.warnings); f.ir2.env.disable_use(shift_left->expr().get_arg(0).var()); - if (f.ir2.env.version != GameVersion::Jak3) { + if (f.ir2.env.version != GameVersion::Jak3 && f.ir2.env.version != GameVersion::JakX) { f.warnings.warning("Using new Jak 2 rtype-of"); } return b0_ptr; @@ -1574,6 +1574,7 @@ Form* try_sc_as_type_of(FormPool& pool, Function& f, const ShortCircuit* vtx, Ga return try_sc_as_type_of_jak1(pool, f, vtx); case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: return try_sc_as_type_of_jak2(pool, f, vtx); default: ASSERT(false); diff --git a/decompiler/analysis/find_defpartgroup.cpp b/decompiler/analysis/find_defpartgroup.cpp index 27ebbeaf50..ef665ce8ab 100644 --- a/decompiler/analysis/find_defpartgroup.cpp +++ b/decompiler/analysis/find_defpartgroup.cpp @@ -25,6 +25,8 @@ void read_static_group_data(DecompiledDataElement* src, DefpartgroupElement::StaticInfo& group) { auto lab = src->label(); // looks like: + + // Jak 3 /* .type sparticle-launch-group L81: @@ -42,6 +44,27 @@ L81: L82: */ + // Jak X + /* + .type sparticle-launch-group +L23: + .word 0x5dc0006 + .word 0x2105dc + .word L25 + .word L24 + .word 0x0 + .word 0x0 + .word 0x0 + .word 0x3f800000 + .word 0x3f800000 + .word 0x3f800000 + .word 0x0 + .word 0x0 + .word 0x0 + .word 0x0 + .word 0x47700000 + */ + int word_idx = (lab.offset / 4) - 1; auto& words = env.file->words_by_seg.at(lab.target_segment); @@ -125,6 +148,8 @@ void read_static_part_data(DecompiledDataElement* src, DefpartElement::StaticInfo& part) { auto lab = src->label(); // looks like: + + // Jak 3 /* .type sparticle-launcher L79: @@ -142,6 +167,24 @@ L80: .word 0x3f800000 */ + // Jak X + /* + .type sparticle-launcher +L11: + .word 0x0 + .word L12 + .word 0x0 +L12: + .word 0x1 + .word 0x401000 + .word 0x0 + .word 0x0 + .word 0x10006 + .word 0x41200000 + .word 0x0 + .word 0x3f800000 + */ + int start_word_idx = (lab.offset / 4) - 1; auto& words = env.file->words_by_seg.at(lab.target_segment); @@ -151,14 +194,17 @@ L80: env.func->warnings.error_and_throw("Reference to sparticle-launcher bad: invalid type pointer"); } + auto empty2_idx = start_word_idx + (env.version != GameVersion::JakX ? 2 : 3); + auto array_word_idx = start_word_idx + (env.version != GameVersion::JakX ? 3 : 2); + auto& empty1 = words.at(start_word_idx + 1); - auto& empty2 = words.at(start_word_idx + 2); + auto& empty2 = words.at(empty2_idx); if (empty1.kind() != LinkedWord::PLAIN_DATA || empty1.data != 0 || empty2.kind() != LinkedWord::PLAIN_DATA || empty2.data != 0) { env.func->warnings.error_and_throw("Reference to sparticle-launcher bad: accums not empty"); } - auto& array_word = words.at(start_word_idx + 3); + auto& array_word = words.at(array_word_idx); if (array_word.kind() != LinkedWord::PTR) { env.func->warnings.error_and_throw("Reference to sparticle-launcher bad: invalid array label"); } diff --git a/decompiler/analysis/find_skelgroups.cpp b/decompiler/analysis/find_skelgroups.cpp index ab3a8bb705..3b3202b7c8 100644 --- a/decompiler/analysis/find_skelgroups.cpp +++ b/decompiler/analysis/find_skelgroups.cpp @@ -450,14 +450,15 @@ FormElement* rewrite_defskelgroup(LetElement* elt, // (set! *hopper-sg* v1-1) ASSERT(elt->body()->size() > 0); - int last_lod = env.version == GameVersion::Jak3 ? (elt->body()->size() - 4) / 2 - 1 - : (elt->body()->size() - 3) / 2 - 1; + int last_lod = env.version == GameVersion::Jak3 || env.version == GameVersion::JakX + ? (elt->body()->size() - 4) / 2 - 1 + : (elt->body()->size() - 3) / 2 - 1; if (last_lod > skelgroup_info.max_lod) { env.func->warnings.error_and_throw("defskelgroup exceeds max-lod of {} ({})", skelgroup_info.max_lod, last_lod); } - auto rest_info = env.version == GameVersion::Jak3 + auto rest_info = env.version == GameVersion::Jak3 || env.version == GameVersion::JakX ? get_defskelgroup_entries_jak3(elt->body(), env, elt->entries().at(0).dest) : get_defskelgroup_entries(elt->body(), env, elt->entries().at(0).dest); @@ -630,6 +631,7 @@ void run_defskelgroups(Function& top_level_func) { sg = inspect_skel_group_data_jak2(src_as_label, env); break; case GameVersion::Jak3: + case GameVersion::JakX: sg = inspect_skel_group_data_jak3(src_as_label, env); inspect_cloth_data_jak3(as_let, sg, env); break; diff --git a/decompiler/analysis/insert_lets.cpp b/decompiler/analysis/insert_lets.cpp index b5ac604433..12d93bedc5 100644 --- a/decompiler/analysis/insert_lets.cpp +++ b/decompiler/analysis/insert_lets.cpp @@ -350,6 +350,7 @@ FormElement* rewrite_as_send_event(LetElement* in, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: // in jak 2, the event message block holds a ppointer instead. set_from_matcher = Matcher::set( Matcher::deref(Matcher::reg(block_var_reg), false, {DerefTokenMatcher::string("from")}), @@ -370,6 +371,7 @@ FormElement* rewrite_as_send_event(LetElement* in, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: set_from_form_matcher = Matcher::set( Matcher::deref(Matcher::any_reg(0), false, {DerefTokenMatcher::string("from")}), Matcher::op_fixed(FixedOperatorKind::PROCESS_TO_PPOINTER, {Matcher::any(1)})); @@ -1913,7 +1915,7 @@ FormElement* rewrite_proc_new(LetElement* in, const Env& env, FormPool& pool) { auto ra = in->entries().at(0).dest; std::vector get_process_args = {Matcher::any(0), Matcher::any_symbol(1), Matcher::any(2)}; - if (env.version >= GameVersion::Jak3) { + if (env.version == GameVersion::Jak3 || env.version == GameVersion::JakX) { // this flag appears unused... get_process_args.push_back(Matcher::any_integer(3)); } @@ -1924,8 +1926,8 @@ FormElement* rewrite_proc_new(LetElement* in, const Env& env, FormPool& pool) { const auto& proc_type = mr_get_proc.maps.strings.at(1); - // part-tracker-spawn macro for jak 3 - if (env.version >= GameVersion::Jak3 && + // part-tracker-spawn macro for jak 3 / jak x + if ((env.version == GameVersion::Jak3 || env.version == GameVersion::JakX) && (proc_type == "part-tracker" || proc_type == "part-tracker-subsampler")) { auto form = rewrite_part_tracker_new_jak3(proc_type, in, env, pool); if (form) { @@ -2045,6 +2047,7 @@ FormElement* rewrite_proc_new(LetElement* in, const Env& env, FormPool& pool) { break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: expected_name = fmt::format("(symbol->string (-> {} symbol))", proc_type); break; default: @@ -2073,7 +2076,7 @@ FormElement* rewrite_proc_new(LetElement* in, const Env& env, FormPool& pool) { if (!mr_get_proc.maps.forms.at(2)->to_form(env).is_int(0x4000)) { ja_push_form_to_args(pool, args, mr_get_proc.maps.forms.at(2), "stack-size"); } - if (env.version >= GameVersion::Jak3) { + if (env.version == GameVersion::Jak3 || env.version == GameVersion::JakX) { if (mr_get_proc.maps.ints.at(3) != 1) { // TODO better name args.push_back(pool.form(":unk")); @@ -2195,7 +2198,7 @@ FormElement* rewrite_attack_info(LetElement* in, const Env& env, FormPool& pool) if (env.version == GameVersion::Jak2) { possible_args = possible_args_jak2; } - if (env.version == GameVersion::Jak3) { + if (env.version == GameVersion::Jak3 || env.version == GameVersion::JakX) { possible_args = possible_args_jak3; } @@ -2742,7 +2745,8 @@ FormElement* rewrite_with_dma_buf_add_bucket(LetElement* in, const Env& env, For // New for Jak 3: they check to see if nothing was added, and skip adding an empty DMA transfer // if so. This means the usual 2 ending let body forms are now wrapped in a `when`. - const int expected_last_let_body_size = env.version == GameVersion::Jak3 ? 1 : 2; + const int expected_last_let_body_size = + env.version == GameVersion::Jak3 || env.version == GameVersion::JakX ? 1 : 2; if (last_part->entries().size() != 1 || last_part->body()->size() != expected_last_let_body_size) { return nullptr; @@ -2752,7 +2756,7 @@ FormElement* rewrite_with_dma_buf_add_bucket(LetElement* in, const Env& env, For LetElement* dmatag_let; FormElement* insert_tag_call; - if (env.version == GameVersion::Jak3) { + if (env.version == GameVersion::Jak3 || env.version == GameVersion::JakX) { // check for the when: auto outer_when = dynamic_cast(last_part->body()->at(0)); if (!outer_when) { diff --git a/decompiler/analysis/mips2c.cpp b/decompiler/analysis/mips2c.cpp index 9fb30b3dc0..4d9a15dd2c 100644 --- a/decompiler/analysis/mips2c.cpp +++ b/decompiler/analysis/mips2c.cpp @@ -236,6 +236,7 @@ struct Mips2C_Output { fmt::format(" cache.{} = intern_from_c(\"{}\").c();\n", goal_to_c_name(sym), sym); break; case GameVersion::Jak3: + case GameVersion::JakX: result += fmt::format(" cache.{} = intern_from_c(-1, 0, \"{}\").c();\n", goal_to_c_name(sym), sym); break; diff --git a/decompiler/config.cpp b/decompiler/config.cpp index b326bdd53e..44af5fe861 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -38,7 +38,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 || version_int == 3); + ASSERT(version_int == 1 || version_int == 2 || version_int == 3 || version_int == 4); 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/ntsc_v1/type_casts.jsonc b/decompiler/config/jak3/ntsc_v1/type_casts.jsonc index e5bd461014..7ed25bf17c 100644 --- a/decompiler/config/jak3/ntsc_v1/type_casts.jsonc +++ b/decompiler/config/jak3/ntsc_v1/type_casts.jsonc @@ -11298,9 +11298,7 @@ [[844, 847], "a0", "dma-gif-packet"], [[921, 924], "v1", "dma-gif-packet"] ], - "(method 9 blit-displays-work)": [ - [[2, 36], "v1", "(inline-array vector4w)"] - ], + "(method 9 blit-displays-work)": [[[2, 36], "v1", "(inline-array vector4w)"]], "(method 10 blit-displays-work)": [ [[2, 141], "v1", "(inline-array vector4w)"] ], diff --git a/decompiler/config/jakx/all-types.gc b/decompiler/config/jakx/all-types.gc new file mode 100644 index 0000000000..b866196686 --- /dev/null +++ b/decompiler/config/jakx/all-types.gc @@ -0,0 +1,56408 @@ +;; All Types + +;; type system setup +(define-extern object type) +(define-extern type type) +(define-extern structure type) +(define-extern uint128 type) +(define-extern basic type) +(define-extern pair type) +(define-extern array type) +(define-extern symbol type) +(define-extern binteger type) +(define-extern number type) +(define-extern integer type) +(define-extern uinteger type) +(define-extern float type) +(define-extern boolean type) ;; not actually added as a runtime type in jak2, but valid? supports it. +(define-extern uint16 type) +(define-extern uint32 type) +(define-extern int8 type) +(define-extern int16 type) +(define-extern int32 type) +(define-extern int64 type) +(define-extern uint8 type) +(define-extern uint64 type) +(define-extern process-tree type) +(define-extern process type) +(define-extern stack-frame type) +(define-extern global kheap) +(define-extern kheap type) +(define-extern pointer type) +(define-extern string type) + +(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 uint8 + (english 0) + (french 1) + (german 2) + (spanish 3) + (italian 4) + (commentary 5) + (japanese 6) + (korean 7) + (russian 8) + (portuguese 9) + (dutch 10) + (uk-english 11) + ) + +(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) +(define-extern *kernel-symbol-warnings* symbol) + +(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 int 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)) +(define-extern symbol->string (function symbol string)) +(define-extern loado (function string kheap object)) + +(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) + "Vector of four floats, packed into a 128-bit integer as bitfields. + This behaves like a value type. + This is not the main vector type." + ((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) + "Vector of four floats, stored in a structure. + This behaves like a reference type. + This is the main vector type." + ((data float 4 :offset-assert 0) ;; guessed by decompiler + (x float :offset 0) + (y float :offset 4) + (z float :offset 8) + (w float :offset 12) + (quad uint128 :score -1 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype bfloat (basic) + "Boxed (or basic?) float. Just a basic that wraps a single float." + ((data float)) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype inline-array-class (basic) + "Base class for basic inline arrays. + The stride is stored in the heap-base of the inline-array-class child class." + ((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) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + (:methods + (new (symbol type int) _type_) ;; 0 + (push-back "Copy object to the end, then increment length. No bounds check." (_type_ object) int);; 9 + (inline-array-class-method-10 () none) ;; 10 + (clear-1 "Set length to 0, return #t." (_type_) symbol) ;; 11 + (clear-2 "Set length to 0" (_type_) int) ;; 12 + (pop-front "Remove first object by copying last object to the front, then decrement length." (_type_ int) pointer) ;; 13 + ) + ) + +(deftype inline-array-class-uint64 (inline-array-class) + "Specialization of inline-array-class for uint64. It's unclear why + this would be preferred over a normal (array uint64), since both store data the same way." + ((data uint64 :dynamic :overlay-at _data)) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype inline-array-class-uint32 (inline-array-class) + "Specialization of inline-array-class for uint32. It's unclear why this would be preferred + over a normal (array uint32), since both store data the same way." + ((data uint32 :dynamic :overlay-at _data)) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype int32-array (inline-array-class) + ((data int32 :inline :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +#| +(deftype array (UNKNOWN) + ((allocated-length int32 :offset-assert 4) + (length int32 :offset-assert 0) + (content-type type :offset-assert 8) ;; guessed by decompiler + (data uint8 :dynamic :offset-assert 12) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +(define-extern identity + "The identity function." + (function object object)) + +(define-extern 1/ + "Floating point reciprocal." + (function float float)) + +(define-extern + + "64-bit integer addition." + (function int int int)) + +(define-extern - + "64-bit integer subraction." + (function int int int)) + +(define-extern * + "32-bit signed integer multiplication." + (function int int int)) + +(define-extern / + "32-bit signed integer division." + (function int int int)) + +(define-extern ash + "64-bit arithmetic shift. (sign-extends)" + (function int int int)) + +(define-extern mod + "32-bit mod." + (function int int int)) + +(define-extern rem + "32-bit mod (same as mod)." + (function int int int)) + +(define-extern abs + "64-bit integer absolute value." + (function int int)) + +(define-extern min + "64-bit integer minimum." + (function int int int)) + +(define-extern max + "64-bit integer maximum." + (function int int int)) + +(define-extern logior + "64-bit bitwise or." + (function int int int)) + +(define-extern logand + "64-bit bitwise and." + (function int int int)) + +(define-extern lognor + "64-bit bitwise not-or." + (function int int int)) + +(define-extern logxor + "64-bit bitwise exclusive or." + (function int int int)) + +(define-extern lognot + "64-bit bitwise not." + (function int int)) + +(define-extern false-func + "Returns false." + (function symbol)) + +(define-extern true-func + "Returns true." + (function symbol)) + +(define-extern format (function _varargs_ object)) + +(define-extern basic-type? + "Return if the given basic is a given type. A child of the given type is also acceptable." + (function basic type symbol)) + +(define-extern type-type? + "Return if the first type is the second type, or a child of it." + (function type type symbol)) + +(define-extern type? + "Return if the given object is an instance of the given type. + Works on basics, bintegers, or symbols." + (function object type symbol)) + +(define-extern find-parent-method + "Find the closest parent type that has a different implementation of the given method and return that method. + If it does not exist, return `nothing` function. + This is used to implement call-parent-method." + (function type int function)) + +(define-extern ref& + "Return the n-th pair in a linked list of pairs. No bounds checking. + If it is the null pair, return #f." + (function object int object)) + +(define-extern ref + "Return the n-th item in a proper list. No bounds checking." + (function object int object)) + +(define-extern last + "Return the last object in a proper list." + (function object object)) + +(define-extern member + "See if the first argument is in the proper list of the second argument. + Checked with simple equality. + If so, return the list starting at the at point (a truthy value). + Otherwise, return #f. + (member 'b '(a b c)) -> (b c d). + (member 'w '(a b c)) -> #f" + (function object object object)) + +(define-extern nmember + "Like member, but membership is checked with the name= function to handle symbols or strings." + (function basic object object)) + +(define-extern assoc + "Search an association list for given object. Return #f if not found, otherwise the element with matching car. + (assoc 'a '((a . 1) (b . 2) (c . 3))) -> (a . 1) + (assoc 'x '((a . 1) (b . 2) (c . 3))) -> #f" + (function object object object)) + +(define-extern assoce + "Like assoc, but supports a special `else` key which is always considered a match." + (function object object object)) + +(define-extern nassoc + "Like assoc, but uses name= instead of = to check equality." + (function string object object)) + +(define-extern nassoce + "Like assoce, but uses name= instead of = to check equality." + (function string object object)) + +(define-extern append! + "Append the second argument to the end of the list (or empty pair) in the first argument." + (function object object object)) + +(define-extern delete! + "Remove an element from the given list, return the list." + (function object object pair)) + +(define-extern delete-car! + "Remove an element from the given list with a matching car. Return the list." + (function object object object)) + +(define-extern insert-cons! + "Update an association list to have the given (key . value) pair. + If a previous value exists, it is deleted first. + This function always allocates a pair through `cons` on the global heap, which can never be freed, + so it should almost never be used at runtime." + (function object object pair)) + +(define-extern sort + "Sort a list using the given comparision function. + The function can return a #t/#f value, or a positive/negative value. + For example, you could use either `-` or `<` as functions to sort integers." + (function pair (function object object object) pair)) + +(define-extern string->symbol-debug + "Convert a string to a symbol. The symbol must be known, and this cannot + create a new symbol. (in the PC port, it will still work.) + This is inteded to be used in debug only, and will not trigger a warning. + In debug, this will work for all symbols." + (function string symbol)) + +(define-extern symbol->string-debug + "Get the name of a symbol. This is intended to be used in debug only. + In debug, this will work for all symbols. (In PC port, this works always)" + (function symbol string)) + +(define-extern symbol->hash + "Convert a symbol to a unique integer value, which is just the symbol's address." + (function symbol int)) + +(define-extern quad-copy! + "Optimized memory copy. Must be 16-byte aligned. Size in 16-byte units." + (function pointer pointer int pointer)) + +(define-extern mem-copy! (function pointer pointer int pointer)) + +(define-extern mem-clear! + "Basic memory clear. Size in 1-byte units. Not an optimized version." + (function pointer int symbol)) + +(define-extern qmem-copy<-! + "Copy memory by quadword (16-bytes). Must by 16-byte aligned, size in 16-byte units. Increasing address copy. Not an optimized version." + (function pointer pointer int pointer)) + +(define-extern qmem-copy->! + "Copy memory by quadword (16-bytes). Must by 16-byte aligned, size in 16-byte units. Decreasing address copy. Not an optimized version." + (function pointer pointer int pointer)) + +(define-extern qmem-clear! + "Clear memory by quadword (16-bytes). Must by 16-byte aligned, size in 16-byte units. Not an optimized version." + (function pointer int pointer)) + +(define-extern mem-set32! + "Set memory to the given 32-bit value, repeated n times. (like C memset, but setting int32_t instead of char). + Not an optimized implementation. Must be 4-byte aligned." + (function pointer int int pointer)) + +(define-extern mem-or! + "Set the destiation to `dest = dest | src`. Size in bytes. Not an optimized version." + (function pointer pointer int pointer)) + +(define-extern fact + "Factorial." + (function int int)) + +(define-extern *print-column* binteger) +(define-extern print + "Print any boxed object (symbol, pair, basic, binteger) to #t (the REPL). No newline." + (function object object)) +(define-extern printl + "Print any boxed object (symbol, pair, basic, binteger) to #t (the REPL), followed by a newline." + (function object object)) + +(define-extern inspect + "Inspect any boxed object (symbol, pair, basic, binteger) to #t (the REPL)." + (function object object)) + +(define-extern mem-print + "Print out data in memory in hex." + (function (pointer uint32) int symbol)) +(define-extern *trace-list* pair) +(define-extern print-tree-bitmask + "Print out ASCII-art tree structure, from a bitmask of nesting levels." + (function int int symbol)) +(define-extern breakpoint-range-set! + "Unsupported function to set a CPU breakpoint." + (function uint uint uint int)) +(define-extern valid? (function object type string symbol object symbol)) + +(define-extern atoi (function pointer int)) +(define-extern atoi-string (function string int)) +(define-extern atoi-better (function pointer int)) +(define-extern itoa (function int pointer int)) +(define-extern x8toi (function pointer int)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gstring-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern strlen (function pointer int)) +(define-extern strncmp (function pointer pointer int symbol)) +(define-extern strstr (function pointer pointer pointer)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 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 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) + (collectable 18) + (enemy 19) + (camera 20) + (platform 21) + (ambient 22) + (entity 23) + (projectile 24) + (bot 25) + (death 26) + (vehicle 27) + (network 28) + ) + +(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) ;; guessed by decompiler + (low-memory-message symbol :offset-assert 48) ;; guessed by decompiler + (login-object basic :offset-assert 52) + (login-art-group basic :offset-assert 56) + (login-level-index int32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ;; field relocating-level uses ~A with a signed load. + ) + +(deftype time-frame (int64) + () + :flag-assert #x900000008 + ) + +(deftype clock (basic) + ((index int16 :offset-assert 4) + (ref-count uint16 :offset-assert 6) + (mask process-mask :offset-assert 8) ;; guessed by decompiler + (clock-ratio float :offset-assert 12) + (accum float :offset-assert 16) + (integral-accum float :offset-assert 20) + (frame-counter time-frame :offset-assert 24) ;; time-frame + (old-frame-counter time-frame :offset-assert 32) ;; time-frame + (integral-frame-counter time-frame :offset-assert 40) ;; time-frame + (old-integral-frame-counter time-frame :offset-assert 48) ;; time-frame + (sparticle-data vector :inline :offset-assert 64) + (seconds-per-frame float :offset-assert 80) + (frames-per-second float :offset-assert 84) + (time-adjust-ratio float :offset-assert 88) + ) + :method-count-assert 24 + :size-assert #x5c + :flag-assert #x180000005c + (:methods + (new (symbol type int) _type_) ;; 0 + (update-rates! "Recompute all clock values for the given clock ratio (arg0)." (_type_ float) float) ;; 9 + (advance-by! + "Advance the clock by arg0 timeframes (as a float). + Both counters keep a separate fractional and integer counter." + (_type_ float) clock) ;; 10 + (tick! "Per-game-frame clock tick forward." (_type_) clock) ;; 11 + (save! "Save a clock's state to a buffer, return bytes used." (_type_ (pointer uint64)) int) ;; 12 + (load! "Load a clock's state from a buffer, return bytes used." (_type_ (pointer uint64)) int) ;; 13 + (copy! "Copy the frame counters and ratio from arg0." (_type_ clock) clock) ;; 14 + (reset! "Reset a clock to 1000s, rate of 1." (_type_) none) ;; 15 + (frame-mask-2 "Check if the frame count, xored with `xor-val` has its lowest bit set" (_type_ int) symbol) ;; 16 + (frame-mask-4 "Check if the frame count, xored with `xor-val` has any of its lowest 2 bits set" (_type_ int) symbol) ;; 17 + (frame-mask-8 "Check if the frame count, xored with `xor-val` has any of its lowest 3 bits set" (_type_ int) symbol) ;; 18 + (frame-mask-16 "Check if the frame count, xored with `xor-val` has any of its lowest 4 bits set" (_type_ int) symbol) ;; 19 + (frame-mask-32 "Check if the frame count, xored with `xor-val` has any of its lowest 5 bits set" (_type_ int) symbol) ;; 20 + (frame-mask-64 "Check if the frame count, xored with `xor-val` has any of its lowest 6 bits set" (_type_ int) symbol) ;; 21 + (frame-mask-128 "Check if the frame count, xored with `xor-val` has any of its lowest 7 bits set" (_type_ int) symbol) ;; 22 + (frame-mask-256 "Check if the frame count, xored with `xor-val` has any of its lowest 8 bits set" (_type_ int) symbol) ;; 23 + ) + ) + + +(deftype thread (basic) + ((name symbol :offset-assert 4) ;; guessed by decompiler + (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! "Adjust the size of the stack that can be stored during a suspend. Must be called before any process allocations." (_type_ int) none) ;; 9 + (thread-suspend "Suspend this thread and jump to the kernel (for use by the kernel only)" (_type_) none) ;; 10 + (thread-resume "Jump from the kernel to the restored thread. (for use by the kernel only)" (_type_) none) ;; 11 + ) + ) + +(deftype cpu-thread (thread) +;; registers modified for PC port. + ((rreg uint64 7) + (freg float 8) + (stack uint8 :dynamic) + ) + :method-count-assert 12 + :size-assert #x80 + :flag-assert #xc00000080 + (:methods + (new "Allocate a thread. If there is already a top-thread for this process, assume this is a temporary thread, and allocate on the bottom of the stack." (symbol type process symbol int pointer) _type_) ;; 0 + ) + ) + +(declare-type view basic) +(deftype process-tree (basic) + ((name string :offset-assert 4) + (mask process-mask :offset-assert 8) + (clock clock :offset-assert 12) ;; guessed by decompiler + (view view :offset-assert 16) + (parent (pointer process-tree) :offset-assert 20) ;; guessed by decompiler + (brother (pointer process-tree) :offset-assert 24) ;; guessed by decompiler + (child (pointer process-tree) :offset-assert 28) ;; guessed by decompiler + (ppointer (pointer process) :offset-assert 32) + (self process-tree :offset-assert 36) + (profile-ticks uint32 :offset-assert 40) + ) + :method-count-assert 14 + :size-assert #x2c + :flag-assert #xe0000002c + :no-runtime-type + (:methods + (new "Allocate a process-tree with the kernel clock." (symbol type string) _type_) ;; 0 + (activate "Move a process from dead to active, moving it to the given tree." (_type_ process-tree string pointer) process-tree) ;; 9 + (deactivate "Make a process dead, clean it up, remove it from the active pool, and return to dead pool." (_type_) none) ;; 10 + (init-from-entity! (_type_ entity-actor) object) ;; 11 + (run-logic? "Should this process be run? Checked by execute-process-tree." (_type_) symbol) ;; 12 + (process-tree-method-13 () none) ;; 13 + ) + ) + + +(deftype dead-pool (process-tree) + () + :method-count-assert 17 + :size-assert #x2c + :flag-assert #x110000002c + (:methods + (new "Allocate a dead pool and set up dead processes" (symbol type int int string) _type_) ;; 0 + (dead-pool-method-14 () none) ;; 14 + (get-process "Allocate a process from the pool, or #f if it fails." (_type_ type int object) process) ;; 15 + (return-process "Return a process to the pool." (_type_ process) int) ;; 16 + ) + ) + +(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 44) + (compact-time uint32 :offset-assert 48) + (compact-count-targ uint32 :offset-assert 52) + (compact-count uint32 :offset-assert 56) + (fill-percent float :offset-assert 60) + (first-gap dead-pool-heap-rec :offset-assert 64) + (first-shrink dead-pool-heap-rec :offset-assert 68) + (heap kheap :inline :offset-assert 80) + (alive-list dead-pool-heap-rec :inline :offset-assert 96) + (last dead-pool-heap-rec :offset-assert 100 :overlay-at (-> alive-list prev)) + (dead-list dead-pool-heap-rec :inline :offset-assert 108) + (process-list dead-pool-heap-rec :dynamic :offset-assert 120) ;; guessed by decompiler + ) + :method-count-assert 29 + :size-assert #x78 + :flag-assert #x1d00000078 + (:methods + (new "Allocate and initialize a dead-pool-heap." (symbol type string int int) _type_) ;; 0 + (init "Allocate memory for processes and init records." (_type_ symbol int) _type_) ;; 17 + (compact "Relocate process in memory to remove gaps, increasing free memory for this dead-pool-heap." (dead-pool-heap int) int) ;; 18 + (shrink-heap "Shrink the heap of a process, allowing the dead pool heap to later reclaim the memory during a compact." (dead-pool-heap process) dead-pool-heap) ;; 19 + (churn "Relocate process in memory, to trigger memory bugs related to process relocation." (dead-pool-heap int) none) ;; 20 + (memory-used "Get the total memory used. Memory in between processes that is not used by a process is considered used." (_type_) int) ;; 21 + (memory-total "Get the total size of the heap for processes." (_type_) int) ;; 22 + (memory-free "Get the size of the unused part of the heap." (dead-pool-heap) int) ;; 23 + (compact-time "Get the compaction time (never set)." (dead-pool-heap) uint) ;; 24 + (gap-size "Get the size of the gap (possibly zero) after the given process. Use #f for the gap at the start of the pool memory." (dead-pool-heap dead-pool-heap-rec) int) ;; 25 + (gap-location "Get pointer to gap (possibly zero size) after the given process" (dead-pool-heap dead-pool-heap-rec) pointer) ;; 26 + (find-gap "Find the first process with a nonzero gap after it, after the given process." (dead-pool-heap dead-pool-heap-rec) dead-pool-heap-rec) ;; 27 + (find-gap-by-size "Find the first gap with a size at least this big" (dead-pool-heap int) dead-pool-heap-rec) ;; 28 + ) + ) + +(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 + ) + +(deftype catch-frame (stack-frame) + ((sp int32 :offset-assert 12) + (ra int32 :offset-assert 16) + ; (freg float 6 :offset-assert 20) ;; guessed by decompiler + ; (rreg uint128 8 :offset-assert 48) ;; guessed by decompiler + ;; In OpenGOAL, we swap a rreg for 4 more fregs. + (freg float 10) ;; 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 object) :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + (:methods + (new "Allocate and set up a protect-frame. This _must_ be used on the stack." (symbol type (function object)) protect-frame) ;; 0 + ) + ) + +(deftype handle (uint64) + ((process (pointer process) :offset 0 :size 32) ;; additional level of indirection to support moving processes + (pid int32 :offset 32 :size 32) ;; unique pid to check if it's the same process or not. + (u64 uint64 :offset 0 :size 64) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype handle-wrapper (structure) + ((handle uint64 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype state (protect-frame) + ((parent state :offset-assert 16) ;; guessed by decompiler + (code function :offset-assert 20) ;; guessed by decompiler + (trans (function object) :offset-assert 24) ;; guessed by decompiler + (post function :offset-assert 28) ;; guessed by decompiler + (enter function :offset-assert 32) ;; guessed by decompiler + (event (function process int symbol event-message-block object) :offset-assert 36) ;; guessed by decompiler + ) + (:methods + (new (symbol type symbol function + (function object) + function + (function object) + (function process int symbol event-message-block object)) _type_) ;; 0 + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) + +(deftype event-message-block (structure) + ((to-handle uint64 :offset-assert 0) ;; handle + (to (pointer process) :offset-assert 0 :overlay-at to-handle) ;; guessed by decompiler + (from-handle uint64 :offset-assert 8) ;; handle + (from (pointer process) :offset-assert 8 :overlay-at from-handle) ;; guessed by decompiler + (param uint64 6 :offset-assert 16) ;; guessed by decompiler + (message symbol :offset-assert 64) ;; guessed by decompiler + (num-params int32 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) + +(deftype event-message-block-array (inline-array-class) + ((data event-message-block :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 15 + :size-assert #x10 + :flag-assert #xf00000010 + (:methods + (send-all! (_type_) none) ;; 14 + ) + ) + +(deftype sql-result (array) + ((sql-data object :dynamic :offset 16)) + (:methods + (new (symbol type int) _type_) ;; 0 + ) + :flag-assert #x900000010 + ) + +(define-extern *sql-result* sql-result) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gkernel ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype process (process-tree) + ((self process :override) + (pool dead-pool) + (status symbol :offset-assert 48) ;; guessed by decompiler + (pid int32) + (main-thread cpu-thread :offset-assert 56) ;; guessed by decompiler + (top-thread cpu-thread :offset-assert 60) ;; guessed by decompiler + (entity entity-actor :offset-assert 64) ;; guessed by decompiler + (level level :offset-assert 68) ;; guessed by decompiler + (state state :offset-assert 72) ;; guessed by decompiler + (prev-state state :offset-assert 76) ;; guessed by decompiler + (next-state state :offset-assert 80) ;; guessed by decompiler + (state-stack (array state) :offset-assert 84) ;; guessed by decompiler + (trans-hook function :offset-assert 88) ;; guessed by decompiler + (post-hook function :offset-assert 92) ;; guessed by decompiler + (event-hook (function process int symbol event-message-block object) :offset-assert 96) ;; guessed by decompiler + (allocated-length int32 :offset-assert 100) + (heap-base pointer :offset 112) ;; guessed by decompiler + (heap-top pointer :offset-assert 116) ;; guessed by decompiler + (heap-cur pointer :offset-assert 120) ;; guessed by decompiler + (stack-frame-top stack-frame :offset-assert 124) ;; guessed by decompiler + (connection-list connectable :inline :offset-assert 128) + (stack uint8 :dynamic :offset-assert 144) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x90 + :flag-assert #xe00000090 + (:methods + (new "Allocate a process, set up process heap, self/ppointer, clock." (symbol type string int) _type_) ;; 0 + ) + (:states + dead-state ;; 10 + ) + ) + +;; dead-pool-heap is already defined! + +(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 + "If not already loaded, do a blocking dgo-load to load the given CGO." + (function string kheap pair)) +(define-extern unload-package + "Mark a package as unloaded. Does not actually unload." + (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 + "Remove the top stack frame. If you have no other stack frames, you can use this before a `go` + to skip the `exit` of the state you are currently in." + (function none :behavior process)) +(define-extern stream<-process-mask + "Print out the process-mask as a human readable string." + (function object process-mask process-mask)) +(define-extern *master-mode* symbol) +(define-extern *pause-lock* symbol) +(define-extern inspect-process-heap + "Call the inspect method on every object in the 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 + "Get a virtual state from this type by name." + (function type symbol state)) +(define-extern *global-search-name* basic) +(define-extern *global-search-count* int) +(define-extern process-by-name + "Find the first process with the given name in the process-tree." + (function string process-tree process)) +(define-extern process-not-name + "Find the first process without the given name in the process-tree." + (function string process-tree process)) +(define-extern process-count + "Count the number of processes in the given process-tree." + (function process-tree int)) +(define-extern kill-by-name "Kill all processes with the given name." (function string process-tree symbol)) +(define-extern kill-by-type "Kill all processes with the given type." (function type process-tree symbol)) +(define-extern kill-not-name "Kill all processes, except ones with the given name." (function string process-tree symbol)) +(define-extern kill-not-type "Kill all processes, except ones with the exact type." (function type process-tree symbol)) +(define-extern kill-by-type-inherited "Kill all processes, except ones that inherit from the given type." (function type process-tree symbol)) +(define-extern iterate-process-tree "Call a function on each not-dead process in the tree." (function process-tree (function object object) kernel-context object)) +(define-extern execute-process-tree "Iterate over all process, calling the run callback on each, if they should run." (function process-tree (function object object) kernel-context object)) +(define-extern search-process-tree "Return the first function in the process-tree which the callback returns #t on." (function process-tree (function process-tree object) process)) +(define-extern kernel-dispatcher "Run the GOAL kernel! Runs the function from the listener (if there is one), then all processes" (function object)) +(define-extern sync-dispatcher "Run the REPL function." (function object)) +(define-extern inspect-process-tree "Display a tree-view of a 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 "Get the process before this one, at this level." (function process-tree object)) +(define-extern change-parent "Reparent a process." (function process-tree process-tree process-tree)) +(define-extern change-brother "Unused, and wrong." (function process-tree process-tree object)) +(define-extern change-to-last-brother "Move this process to the end of its brother list." (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 "Set up a process to run a given function, with the given arguments when it executes next." (function cpu-thread function object object object object object object pointer)) +(define-extern dead-state (state process)) +(define-extern entity-deactivate-handler (function process entity-actor none)) +(define-extern *deactivate-process-array* (array handle)) +(define-extern *kernel-clock* clock) +(define-extern *vis-boot* symbol) +(define-extern *null-process* process) +(define-extern *listener-process* process) +(define-extern *16k-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 *dead-pool-list* pair) +(define-extern *active-pool* process-tree) +(define-extern *display-pool* process-tree) +(define-extern *camera-pool* process-tree) +(define-extern *target-pool* process-tree) +(define-extern *entity-pool* process-tree) +(define-extern *mid-pool* process-tree) +(define-extern *locker-pool* process-tree) +(define-extern *pusher-pool* process-tree) +(define-extern *bg-pool* process-tree) +(define-extern *default-pool* process-tree) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; math ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype float-type (uint32) + () + :flag-assert #x900000004 + ) + +(deftype rgba (uint32) + ((r uint8 :offset 0) + (g uint8 :offset 8) + (b uint8 :offset 16) + (a uint8 :offset 24) + ) + :flag-assert #x900000004 + :no-runtime-type + ) + +(deftype xyzw (uint128) + () + :flag-assert #x900000010 + ) + +(deftype xyzwh (uint128) + () + :flag-assert #x900000010 + ) + +(deftype random-generator (basic) + ((seed uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(define-extern truncate + "Round (toward zero) to an integer. + @param arg0 float to truncate" + (function float float)) +(define-extern round "Round to the nearest integer" (function float float)) +(define-extern floor "Round (down) to an integer" (function float float)) +(define-extern ceil "Round (up) to an integer" (function float float)) +(define-extern integral? "Is this number an integer?" (function float symbol)) +(define-extern fractional-part "Get the fractional part of a float." (function float float)) +(define-extern odd? "Is the number odd?" (function int symbol)) +(define-extern even? "Is the number even?" (function int symbol)) +(define-extern sawtooth-wave "Sample a sawtooth with period 1. In range (0, 1)" (function float float)) +(define-extern triangle-wave + "Sample a triangle wave. Period is 4, in range (-1, 1) (so slope is 1 or -1)." + (function float float)) +(define-extern log-x-plus-1-order9 + "Fast approximation of ln(x + 1). Probably only accurate for x in [0, 1]." + (function float float)) +(define-extern logf "Natural log." (function float float)) +(define-extern log2f "Log base 2." (function float float)) +(define-extern exp-slead (pointer float)) +(define-extern exp-strail (pointer float)) +(define-extern exp "Compute e^x." (function float float)) +(define-extern pow "Compute arg0^arg1" (function float float float)) +(define-extern print-exp "Print in the format AeB where A is in the range (1, 10)" (function float none)) +(define-extern print-time "Print a [[time-frame]] as h:mm:ss." (function object time-frame none)) +(define-extern log2 "Log base 2." (function int int)) +(define-extern seek "Move arg0 toward arg1 by at most arg2." (function float float float float)) +(define-extern seek-ease + "Move arg0 toward arg1, and slow down before reaching the end. + When farther than arg3 away, move by at most arg2. + When closer than arg3, linearly ramp down the movement amount from arg2 to 0 but no lower than arg4." + (function float float float float float float)) +(define-extern seek-ease-in-out + "Move arg0 toward arg2, and slow down at the start and end. + When within arg4 of arg1 (at the beginning of movement), ramp up speed, with a minimum speed of arg6 + When within arg5 of arg2 (at the end of movement), ramp down speed, with a minimum speed of arg5 + Normally, move at most arg3" + (function float float float float float float float float)) +(define-extern lerp "Linearly interpolate between arg0 and arg1." (function float float float float)) +(define-extern lerp-scale-old + "Linearly remap arg2 in [arg3, arg4] to [arg0, arg1]. + This is the jak 1 implementation, which I claimed was a bad implementation..." + (function float float float float float float)) +(define-extern lerp-scale + "Linearly remap arg2 in [arg3, arg4] to [arg0, arg1]. + More efficient than the -old version." + (function float float float float float float)) +(define-extern lerp-scale-clamp + "Clamp the input, then linearly remap arg2 in [arg3, arg4] to [arg0, arg1]." + (function float float float float float float)) +(define-extern lerp-clamp + "Linearly interpolate between arg0 and arg1. arg2 is clamped to [0, 1]" + (function float float float float)) +(define-extern rgba-lerp (function rgba rgba rgba rgba)) +(define-extern seekl "Move arg0 toward arg1, by at most arg2." (function int int int int)) +(define-extern rand-vu-init "Initialize the VU0 random generator." (function float float)) +(define-extern rand-vu "Get a random number in [0, 1) and advance the random generator." (function float)) +(define-extern rand-vu-nostep + "Get the number currently in the random generator. + This will be equal to the last call of (rand-vu). + This will not update the random generator." + (function float)) +(define-extern rand-vu-float-range "Get a random float in between arg0 and arg1." (function float float float)) +(define-extern rand-vu-percent? "Get a boolean that's true with the given probability (in 0, 1)." (function float symbol)) +(define-extern rand-vu-int-range "Get an integer in the given range (inclusive)." (function int int int)) +(define-extern rand-vu-int-count "Get an integer in the range [0, max)." (function int int)) +(define-extern rand-vu-int-count-excluding + "Get an integer in the range [0, arg0). + If bit n is set in arg1, exclude this value from being returned." + (function int int int)) +(define-extern rand-vu-int-range-exclude + "Get an integer in the range [0, arg0), excluding arg2. + Note that this doesn't use bits like rand-vu-int-count-excluding." + (function int int int int)) +(define-extern *random-generator* random-generator) +(define-extern rand-uint31-gen + "Generate a supposedly random integer. + Note, this might not quite be right. + But the highest bit is always zero, like it says + and it looks kinda random to me." + (function random-generator uint)) +(define-extern cube-root "Cube root with cool trick that I don't understand." (function float float)) +(define-extern int-noise "Generate random-ish floats in range -1, 1." (function int float)) +(define-extern smooth-step + "Interpolate between 0, 1 with a cubic polynomial. + These are picked so f(0) = 0, f(1) = 1, f'(0) = f'(1) = 0." + (function float float)) +(define-extern smooth-interp + "Remap arg2 from (arg3, arg4) to (arg0, arg1), using cubic interpolation. + Satisfies: + - f(arg3) = arg0 + - f(arg4) = arg1 + - f'(arg3) = f'(arg4) = 0" + (function float float float float float float)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vector-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(deftype bit-array (basic) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (_pad uint8 :offset-assert 12) + (bytes uint8 :dynamic :offset 12) + ) + :method-count-assert 13 + :size-assert #xd + :flag-assert #xd0000000d + (:methods + (new "Allocate a new bit-array with room arg0 bits." (symbol type int) _type_) ;; 0 + (get-bit "Get the nth bit as a boolean." (_type_ int) symbol) ;; 9 + (clear-bit "Set the nth bit to 0." (_type_ int) int) ;; 10 + (set-bit "Set the nth bit to 1." (_type_ int) int) ;; 11 + (clear-all! "Set all bits to 0." (_type_) _type_) ;; 12 + ) + ) + + +(deftype vector16ub (structure) + ((data uint8 16 :offset-assert 0) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector4ub (structure) + ((data uint8 4 :offset-assert 0) ;; guessed by decompiler + (x uint8 :offset 0) + (y uint8 :offset 1) + (z uint8 :offset 2) + (w uint8 :offset 3) + (clr uint32 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype vector4b (structure) + ((data int8 4 :offset-assert 0) ;; guessed by decompiler + (x int8 :offset 0) + (y int8 :offset 1) + (z int8 :offset 2) + (w int8 :offset 3) + (clr int32 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype vector2ub (structure) + ((data uint8 2 :offset-assert 0) ;; guessed by decompiler + (x uint8 :offset 0) + (y uint8 :offset 1) + (clr uint16 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype vector2b (structure) + ((data int8 2 :offset-assert 0) ;; guessed by decompiler + (x int8 :offset 0) + (y int8 :offset 1) + (clr int16 :offset 0) + ) + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype vector2h (structure) + ((data int16 2 :offset-assert 0 :score -1) + (x int16 :offset 0) + (y int16 :offset 2) + ) + :pack-me + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype vector2uh (structure) + ((data uint16 2 :offset-assert 0) ;; guessed by decompiler + (x uint16 :offset 0) + (y uint16 :offset 2) + (val uint32 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype vector3h (structure) + ((data int16 3 :offset-assert 0) ;; guessed by decompiler + (x int16 :offset 0) + (y int16 :offset 2) + (z int16 :offset 4) + ) + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) + +(deftype vector3uh (structure) + ((data uint16 3 :offset-assert 0) ;; guessed by decompiler + (x uint16 :offset 0) + (y uint16 :offset 2) + (z uint16 :offset 4) + ) + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) + +(deftype vector2w (structure) + ((data int32 2 :offset-assert 0) ;; guessed by decompiler + (x int32 :offset 0) + (y int32 :offset 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype vector3w (structure) + ((data int32 3 :offset-assert 0) ;; guessed by decompiler + (x int32 :offset 0) + (y int32 :offset 4) + (z int32 :offset 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype vector4w (structure) + ((data int32 4 :offset-assert 0) ;; guessed by decompiler + (x int32 :offset 0) + (y int32 :offset 4) + (z int32 :offset 8) + (w int32 :offset 12) + (dword uint64 2 :offset 0) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector2 (structure) + ((data float 2 :offset-assert 0) ;; guessed by decompiler + (x float :offset 0) + (y float :offset 4) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype vector3 (structure) + ((data float 3 :offset-assert 0) ;; guessed by decompiler + (x float :offset 0) + (y float :offset 4) + (z float :offset 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype vector4 (structure) + ((data float 4 :offset-assert 0 :score -1) ;; guessed by decompiler + (x float :offset 0) + (y float :offset 4) + (z float :offset 8) + (w float :offset 12) + (dword uint64 2 :offset 0) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector4w-2 (structure) + ((data int32 8 :offset-assert 0 :score -2) + (quad uint128 2 :offset 0 :score -1) + (vector vector4w 2 :inline :offset 0) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype vector4w-3 (structure) + ((data int32 12 :offset-assert 0 :score -2) + (quad uint128 3 :offset 0 :score -1) + (vector vector4w 3 :inline :offset 0) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype vector4w-4 (structure) + ((data int32 16 :offset-assert 0 :score -2) + (quad uint128 4 :offset 0 :score -1) + (vector vector4w 4 :inline :offset 0 :score 999) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype vector4h (structure) + ((data int16 4 :offset-assert 0) ;; guessed by decompiler + (x int16 :offset 0) + (y int16 :offset 2) + (z int16 :offset 4) + (w int16 :offset 6) + (long uint64 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype vector4uh (structure) + ((data uint16 4 :offset-assert 0) + (x uint16 :offset 0) + (y uint16 :offset 2) + (z uint16 :offset 4) + (w uint16 :offset 6) + (long uint64 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype vector8h (structure) + ((data int16 8 :offset-assert 0) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector16b (structure) + ((data int8 16 :offset-assert 0) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector4s-3 (structure) + ((data float 12 :offset-assert 0) ;; guessed by decompiler + (quad uint128 3 :offset 0) ;; guessed by decompiler + (vector vector 3 :inline :offset 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype vector-array (inline-array-class) + ((data vector :inline :dynamic :offset-assert 16 :score 10) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype rgbaf (vector) + ((r float :offset 0) + (g float :offset 4) + (b float :offset 8) + (a float :offset 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype plane (vector) + ((a float :offset 0) + (b float :offset 4) + (c float :offset 8) + (d float :offset 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype sphere (vector) + ((r float :offset 12 :score 1) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype isphere (vec4s) + () + :flag-assert #x900000010 + ) + +(deftype box8s (structure) + ((data float 8 :offset-assert 0) + (quad uint128 2 :offset 0) + (vector vector 2 :offset 0) + (min vector :inline :offset 0) + (max vector :inline :offset 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype box8s-array (inline-array-class) + ((data box8s :inline :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype vertical-planes (structure) + ((data uint128 4 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype vertical-planes-array (basic) + ((length uint32 :offset-assert 4) + (data vertical-planes :inline :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype qword (structure) + ((data uint32 4 :offset-assert 0) + (byte uint8 16 :offset 0) + (hword uint16 8 :offset 0) + (word uint32 4 :offset 0) + (dword uint64 2 :offset 0) + (quad uint128 :offset 0) + (vector vector :inline :offset 0 :score -100) + (vector4w vector4w :inline :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vector3s (structure) + ((data float 3 :offset-assert 0) + (x float :offset 0) + (y float :offset 4) + (z float :offset 8) + ) + :pack-me + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(define-extern *null-vector* vector) +(define-extern *identity-vector* vector) +(define-extern *x-vector* vector) +(define-extern *y-vector* vector) +(define-extern *z-vector* vector) +(define-extern *up-vector* vector) +(define-extern vector-dot + "Take the dot product of two vectors. + Only does the x, y, z compoments. + Originally handwritten assembly to space out loads and use FPU accumulator" + (function vector vector float)) +(define-extern vector-dot-vu "Take the dot product (xyz only). Using VU0." (function vector vector float)) +(define-extern vector4-dot + "Take the dot product of two vectors. + Does the x, y, z, and w compoments" + (function vector vector float)) +(define-extern vector4-dot-vu "Take the dot product (xyzw). Using VU0." (function vector vector float)) +(define-extern vector-xz-dot (function vector vector float)) +(define-extern vector+! "Set dst = a + b. The w component of dst is set to 0." (function vector vector vector vector)) +(define-extern vector-! "Set dst = a - b. The w componenent of dst is set to 0." (function vector vector vector vector)) +(define-extern vector-zero! "Set xyzw to 0." (function vector vector)) +(define-extern vector-reset! "Set vector to <0,0,0,1>." (function vector vector)) +(define-extern vector-copy! "Copy arg1 to arg0." (function vector vector vector)) +(define-extern vector-xz-! (function vector vector vector vector)) +(define-extern vector-xz+! (function vector vector vector vector)) +(define-extern vector-vector-project-compute-length! (function vector vector vector vector)) +(define-extern vector-vector-perpendicular! (function vector vector vector vector)) +(define-extern vector-length< (function vector float symbol)) +(define-extern vector-length> (function vector float symbol)) +(define-extern *zero-vector* vector) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-upload ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type texture basic) +(declare-type adgif-shader structure) + +(define-extern *generic-envmap-texture* texture) +(define-extern *default-envmap-shader* adgif-shader) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-finish ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menu2-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type curve-color basic) +(declare-type curve-color-fast curve-color) +(declare-type curve2d basic) +(declare-type curve2d-fast curve2d) + +(define-extern *range-jakxexplo-color* curve-color-fast) +(define-extern *range-jakxexplo-alpha* curve2d-fast) +(define-extern *range-jakxexplo-scale-x* curve2d-fast) +(define-extern *range-jakxexplo-scale-y* curve2d-fast) +(define-extern *curve-jakxexplo-alpha* curve2d-fast) +(define-extern *curve-jakxexplo-scale-x* curve2d-fast) +(define-extern *curve-jakxexplo-scale-y* curve2d-fast) +;; (define-extern *part-jakx-explosion-texture-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menu2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype chat-window-menu (base-menu) + () + :method-count-assert 65 + :size-assert #x218 + :flag-assert #x4101900218 + (:state-methods + running ;; 52 + ) + ) +|# + +;; (define-extern *last-menu-action* object) +;; (define-extern default-base-menu-post function) +;; (define-extern base-menu-event-handler function) +;; (define-extern base-menu-init-by-other function) +;; (define-extern menu-clear-strip function) +;; (define-extern METERS_PER_TEXEL object) +;; (define-extern find-first-selectable function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; intro-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-part-sparks-bits-local function) +;; (define-extern *range-carexplo-cu-dust-color* curve-color-fast) +;; (define-extern *range-carexplo-cu-dust-alpha* curve2d-fast) +;; (define-extern *range-carexplo-cu-dust-scale-x* curve2d-fast) +;; (define-extern *range-carexplo-cu-dust-scale-y* curve2d-fast) +;; (define-extern *curve-carexplo-cu-dust-alpha* curve2d-fast) +;; (define-extern *curve-carexplo-cu-dust-scale-x* curve2d-fast) +;; (define-extern *curve-carexplo-cu-dust-scale-y* curve2d-fast) +;; (define-extern *part-intro-car-explo-closeup-dust-in-curve-settings* object) +;; (define-extern *range-intro-carexplo-cu-color* curve-color-fast) +;; (define-extern *range-intro-carexplo-cu-alpha* curve2d-fast) +;; (define-extern *range-intro-carexplo-cu-scale-x* curve2d-fast) +;; (define-extern *range-intro-carexplo-cu-scale-y* curve2d-fast) +;; (define-extern *curve-intro-carexplo-cu-alpha* curve2d-fast) +;; (define-extern *curve-intro-carexplo-cu-scale-x* curve2d-fast) +;; (define-extern *curve-intro-carexplo-cu-scale-y* curve2d-fast) +;; (define-extern *part-intro-car-explo-closeup-texture-curve-settings* object) +;; (define-extern spt-birth-func-brightness-outro-smoke function) +;; (define-extern *range-carexplo-fnl-dust-color* curve-color-fast) +;; (define-extern *range-carexplo-fnl-dust-alpha* curve2d-fast) +;; (define-extern *range-carexplo-fnl-dust-scale-x* curve2d-fast) +;; (define-extern *range-carexplo-fnl-dust-scale-y* curve2d-fast) +;; (define-extern *curve-carexplo-fnl-dust-alpha* curve2d-fast) +;; (define-extern *curve-carexplo-fnl-dust-scale-x* curve2d-fast) +;; (define-extern *curve-carexplo-fnl-dust-scale-y* curve2d-fast) +;; (define-extern *part-outro-b-final-explosion-dust-in-curve-settings* object) +;; (define-extern *range-outro-carexplo-fnl-color* curve-color-fast) +;; (define-extern *range-outro-carexplo-fnl-alpha* curve2d-fast) +;; (define-extern *range-outro-carexplo-fnl-scale-x* curve2d-fast) +;; (define-extern *range-outro-carexplo-fnl-scale-y* curve2d-fast) +;; (define-extern *curve-outro-carexplo-fnl-alpha* curve2d-fast) +;; (define-extern *curve-outro-carexplo-fnl-scale-x* curve2d-fast) +;; (define-extern *curve-outro-carexplo-fnl-scale-y* curve2d-fast) +;; (define-extern *part-outro-b-final-explosion-texture-curve-settings* object) +;; (define-extern *range-carexplo-dust-color* curve-color-fast) +;; (define-extern *range-carexplo-dust-alpha* curve2d-fast) +;; (define-extern *range-carexplo-dust-scale-x* curve2d-fast) +;; (define-extern *range-carexplo-dust-scale-y* curve2d-fast) +;; (define-extern *curve-carexplo-dust-alpha* curve2d-fast) +;; (define-extern *curve-carexplo-dust-scale-x* curve2d-fast) +;; (define-extern *curve-carexplo-dust-scale-y* curve2d-fast) +;; (define-extern *part-intro-car-explosion-dust-in-curve-settings* object) +;; (define-extern *range-intro-carexplo-color* curve-color-fast) +;; (define-extern *range-intro-carexplo-alpha* curve2d-fast) +;; (define-extern *range-intro-carexplo-scale-x* curve2d-fast) +;; (define-extern *range-intro-carexplo-scale-y* curve2d-fast) +;; (define-extern *curve-intro-carexplo-alpha* curve2d-fast) +;; (define-extern *curve-intro-carexplo-scale-x* curve2d-fast) +;; (define-extern *curve-intro-carexplo-scale-y* curve2d-fast) +;; (define-extern *part-intro-car-explosion-texture-curve-settings* object) +;; (define-extern *range-intro-carexplo2-scale-x* curve2d-fast) +;; (define-extern *range-intro-carexplo2-scale-y* curve2d-fast) +;; (define-extern *part-intro-car-explosion-texture2-curve-settings* object) +;; (define-extern spt-func-part-outro-b-dashboard function) +;; (define-extern spt-func-part-outro-b-dashboard-sparks function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; intro-scenes2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype krasmale (process-drawable) + ((extra-id uint32 :offset-assert 248) + (anim basic :offset-assert 252) + ) + :method-count-assert 51 + :size-assert #x100 + :flag-assert #x3300700100 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype krasfemale (process-drawable) + ((extra-id uint32 :offset-assert 248) + (anim basic :offset-assert 252) + ) + :method-count-assert 51 + :size-assert #x100 + :flag-assert #x3300700100 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; intro-scenes ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; intro-scenes3 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; task-scenes ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menu2-b ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-part-super-turbo-charges function) +;; (define-extern spt-func-part-red-pellet-charges function) +;; (define-extern spt-func-part-pellet-collect-blue-blurs function) +;; (define-extern spt-func-part-pellet-collect-light-blurs function) +;; (define-extern spt-birth-func-brightness-collectoid-dust function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype this-way (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype wrong-way-linebot (process-drawable) + ((initial-quat quaternion :inline :offset-assert 256) + (initial-pos vector :inline :offset-assert 272) + (hover-sound uint32 :offset-assert 288) + (l-control UNKNOWN 3 :offset-assert 292) + (my-vehicle uint64 :offset-assert 304) + (spawn-part uint64 :offset-assert 312) + (vehicle-part uint64 :offset-assert 320) + (sound-id uint32 :offset-assert 328) + ) + :method-count-assert 53 + :size-assert #x14c + :flag-assert #x3500c0014c + (:methods + (wrong-way-linebot-method-52 () none) ;; 52 + ) + (:state-methods + idle ;; 50 + shoot ;; 51 + ) + ) +|# + +#| +(deftype wrong-way (process-drawable) + ((base-y float :offset-assert 248) + (height-offset float :offset-assert 252) + (start-position vector :inline :offset-assert 256) + (bot uint64 :offset-assert 272) + (alarm-sound uint32 :offset-assert 280) + (friendly basic :offset-assert 284) + (kill-player-quick basic :offset-assert 288) + ) + :method-count-assert 55 + :size-assert #x124 + :flag-assert #x3700a00124 + (:methods + (wrong-way-method-53 () none) ;; 53 + (wrong-way-method-54 () none) ;; 54 + ) + (:state-methods + idle ;; 50 + enter ;; 52 + exit ;; 51 + ) + ) +|# + +#| +(deftype starting-linebot (process-drawable) + ((initial-quat quaternion :inline :offset-assert 256) + (initial-pos vector :inline :offset-assert 272) + (offset vector :inline :offset-assert 288) + (red-projection basic :offset-assert 304) + (race-started basic :offset-assert 308) + ) + :method-count-assert 52 + :size-assert #x138 + :flag-assert #x3400b00138 + (:methods + (starting-linebot-method-51 () none) ;; 51 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype race-banner (process-drawable) + ((mat matrix :inline :offset-assert 256) + (end-pos vector :inline :offset-assert 320) + (explode-sound uint32 :offset-assert 336) + (base-y float :offset-assert 340) + (banner UNKNOWN 5 :offset-assert 344) + (blend-up-height float :offset-assert 364) + (last-index int8 :offset-assert 368) + (index int8 :offset-assert 369) + ) + :method-count-assert 53 + :size-assert #x172 + :flag-assert #x3500f00172 + (:methods + (race-banner-method-52 () none) ;; 52 + ) + (:state-methods + banner-countdown ;; 50 + banner-go ;; 51 + ) + ) +|# + +#| +(deftype finish-banner (race-banner) + () + :method-count-assert 54 + :size-assert #x172 + :flag-assert #x3600f00172 + (:state-methods + banner-finish ;; 53 + ) + ) +|# + +;; (define-extern wrong-way-linebot-init-by-other function) +;; (define-extern wrong-way-linebot-spawn function) +;; (define-extern set-position-and-orientation function) +;; (define-extern set-children-position-and-orientation function) +;; (define-extern wrong-way-event-handler function) +;; (define-extern check-for-kill-player function) +;; (define-extern check-for-player-dead function) +;; (define-extern wrong-way-init-by-other function) +;; (define-extern wrong-way-spawn function) +;; (define-extern *race-banner-subtract* object) +;; (define-extern starting-linebot-init-by-other function) +;; (define-extern starting-linebot-spawn function) +;; (define-extern race-banner-handler function) +;; (define-extern race-banner-init-by-other function) +;; (define-extern race-banner-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; camera-facing-quad ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype camera-facing-quad (prim-client) + ((pos vector :inline :offset-assert 16) + (height float :offset-assert 32) + (width float :offset-assert 36) + (strip basic :offset-assert 40) + (color uint32 :offset-assert 44) + ) + :method-count-assert 14 + :size-assert #x30 + :flag-assert #xe00000030 + (:methods + (camera-facing-quad-method-10 () none) ;; 10 + (camera-facing-quad-method-11 () none) ;; 11 + (camera-facing-quad-method-12 () none) ;; 12 + (camera-facing-quad-method-13 () none) ;; 13 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; task-arrow ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype task-arrow (process-drawable) + ((color uint32 :offset-assert 248) + (pos vector :inline :offset-assert 256) + (theta float :offset-assert 272) + (phi float :offset-assert 276) + (dist float :offset-assert 280) + (smoothed-dist float :offset-assert 284) + (max-dist float :offset-assert 288) + (flags task-arrow-flags :offset-assert 292) ;; guessed by decompiler + (map-icon uint16 :offset-assert 296) + (minimap connection-minimap :offset-assert 300) + (base-quat quaternion :inline :offset-assert 304) + (base-scale float :offset-assert 320) + (rod-of-god-scale float :offset-assert 324) + (moving symbol :offset-assert 328) ;; guessed by decompiler + (death-pending? symbol :offset-assert 332) ;; guessed by decompiler + (alpha float :offset-assert 336) + (choir-sound ambient-sound :offset-assert 340) ;; guessed by decompiler + (rod-quad basic :offset-assert 344) + ) + :method-count-assert 55 + :size-assert #x15c + :flag-assert #x3700d0015c + (:methods + (task-arrow-method-53 () none) ;; 53 + (task-arrow-method-54 () none) ;; 54 + ) + (:state-methods + idle ;; 50 + leave ;; 52 + die ;; 51 + ) + ) +|# + +;; (define-extern task-arrow-init-by-other function) ;; (function task-arrow-params object :behavior task-arrow) +;; (define-extern task-arrow-spawn function) ;; (function task-arrow-params process-tree process) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-manager ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *race-state* object) ;; race-state + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-anim ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (deftype net-anim-path (uint8) +;; () +;; :flag-assert #x900000001 +;; ) + +#| +(deftype net-anim-state (structure) + ((timestamp int32 :offset-assert 0) + (anim-idx int16 :offset-assert 4) + (anim-offset float :offset-assert 8) + (anim-rate float :offset-assert 12) + (vel vector :inline :offset-assert 16) + (path-info uint8 :offset-assert 32) + (path-offset float :offset-assert 36) + (anim-looped basic :offset-assert 40) + (need-snap basic :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype net-anim-result (structure) + ((now int32 :offset-assert 0) + (moved vector :inline :offset-assert 16) + (path-pos float :offset-assert 32) + (path-pos-dist float :offset-assert 36) + (cur-frame float :offset-assert 40) + (cur-loops int32 :offset-assert 44) + (anim-wrapped basic :offset-assert 48) + (path-wrapped basic :offset-assert 52) + (projected-end-time int32 :offset-assert 56) + (total-frames int32 :offset-assert 60) + (moved-no-frac vector :inline :offset-assert 64) + (vels uint32 :offset-assert 80) + (last-snap-time int32 :offset-assert 84) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) +|# + +#| +(deftype net-anim-control (structure) + ((active net-anim-state :inline :offset-assert 0) + (result net-anim-result :inline :offset-assert 48) + (path-array uint32 :offset-assert 136) + ) + :method-count-assert 12 + :size-assert #x8c + :flag-assert #xc0000008c + (:methods + (net-anim-control-method-9 () none) ;; 9 + (net-anim-control-method-10 () none) ;; 10 + (net-anim-control-method-11 () none) ;; 11 + ) + ) +|# + +;; (define-extern encode-net-anim-state function) +;; (define-extern decode-net-anim-state function) +;; (define-extern safe-mod function) +;; (define-extern get-dist-based-path-pos function) +;; (define-extern get-anim-offset function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-enemy-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-enemy-transition (structure) + ((timestamp int32 :offset-assert 0) + (name basic :offset-assert 4) + (preempt basic :offset-assert 8) + (data-len int32 :offset-assert 12) + (buf-data UNKNOWN 64 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype net-enemy-anim-info (structure) + ((name basic :offset-assert 0) + (anim-idx int32 :offset-assert 4) + (forward-vel vector :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype net-enemy-info (structure) + ((flags uint64 :offset-assert 0) + (inverse-mass float :offset-assert 8) + (ragdoll-info ragdoll-setup :offset-assert 12) + (max-health float :offset-assert 16) + (damage-scale float :offset-assert 20) + (respawn-delay int32 :offset-assert 24) + (smooth-root-trans float :offset-assert 28) + (smooth-root-quat float :offset-assert 32) + (fatal-impact-impulse float :offset-assert 36) + (min-fatal-impact-enemy-vel float :offset-assert 40) + (time-before-evaporate int32 :offset-assert 44) + (time-before-respawn int32 :offset-assert 48) + (anim-info basic :offset-assert 52) + (kill-score int32 :offset-assert 56) + (wound-score-scale float :offset-assert 60) + (allow-vehicle-penetrate basic :offset-assert 64) + (min-ground-offset float :offset-assert 68) + (ground-probe-lod-dist float :offset-assert 72) + (show-kill-score int32 :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype net-enemy (process-focusable) + ((flags uint64 :offset-assert 256) + (info net-enemy-info :offset-assert 264) + (ragdoll-proc uint64 :offset-assert 272) + (health float :offset-assert 280) + (local-damage float :offset-assert 284) + (killed-by int8 :offset-assert 288) + (last-health-send-time int32 :offset-assert 292) + (net-anim net-anim-control :inline :offset-assert 304) + (minimap connection-minimap :offset-assert 444) + (transitions UNKNOWN 3 :offset-assert 448) + (transition-ct int32 :offset-assert 688) + (last-attack-time int32 :offset-assert 692) + (vehicle-penetrate-time int32 :offset-assert 696) + (paths basic :offset-assert 700) + (pending-impulse-valid basic :offset-assert 704) + (pending-impulse rigid-body-impact :inline :offset-assert 720) + (last-transition-time int32 :offset-assert 788) + (last-attack-id int32 :offset-assert 792) + (vel-for-ragdoll vector :inline :offset-assert 800) + (nav-poly nav-poly :offset-assert 816) + (snap-flags uint64 :offset-assert 824) + (prev-pos vector :inline :offset-assert 832) + (forward-path-vector vector :inline :offset-assert 848) + (enemy-link list-link :inline :offset-assert 864) + ) + :method-count-assert 87 + :size-assert #x368 + :flag-assert #x5702e00368 + (:methods + (net-enemy-method-59 () none) ;; 59 + (net-enemy-method-60 () none) ;; 60 + (net-enemy-method-61 () none) ;; 61 + (net-enemy-method-62 () none) ;; 62 + (net-enemy-method-63 () none) ;; 63 + (net-enemy-method-64 () none) ;; 64 + (net-enemy-method-65 () none) ;; 65 + (net-enemy-method-66 () none) ;; 66 + (net-enemy-method-67 () none) ;; 67 + (net-enemy-method-68 () none) ;; 68 + (net-enemy-method-69 () none) ;; 69 + (net-enemy-method-70 () none) ;; 70 + (net-enemy-method-71 () none) ;; 71 + (net-enemy-method-72 () none) ;; 72 + (net-enemy-method-73 () none) ;; 73 + (net-enemy-method-74 () none) ;; 74 + (net-enemy-method-75 () none) ;; 75 + (net-enemy-method-76 () none) ;; 76 + (net-enemy-method-77 () none) ;; 77 + (net-enemy-method-78 () none) ;; 78 + (net-enemy-method-79 () none) ;; 79 + (net-enemy-method-80 () none) ;; 80 + (net-enemy-method-81 () none) ;; 81 + (net-enemy-method-82 () none) ;; 82 + (net-enemy-method-83 () none) ;; 83 + (net-enemy-method-84 () none) ;; 84 + (net-enemy-method-85 () none) ;; 85 + (net-enemy-method-86 () none) ;; 86 + ) + ) +|# + +;; (define-extern *tmp-construct-transition* object) +;; (define-extern net-enemy-init-remote function) +;; (define-extern *msg-map-net-enemy* array) +;; (define-extern *net-process-class-info-net-enemy* object) +;; (define-extern *net-enemy-list* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-powerup ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *tmp-powerup-motion-info* net-powerup-motion-info) +;; (define-extern *dynamic-powerups* object) +;; (define-extern powerup-build-static-hash function) +;; (define-extern powerup-build-dynamic-hash function) +;; (define-extern *powerup-collide-results* object) +;; (define-extern powerup-check-collision function) +;; (define-extern powerup-motion-parabola function) +;; (define-extern net-powerup-init-by-other function) +;; (define-extern spawn-powerup function) +;; (define-extern eject-powerup function) +;; (define-extern eject-test function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-powerups ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype eco-powerup-draw (powerup-draw) + ((vehicle-handle uint64 :offset-assert 264) + ) + :method-count-assert 57 + :size-assert #x110 + :flag-assert #x3900800110 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype eco-light (process) + ((name basic :offset-assert 0) + (mask process-mask :offset-assert 4) + (clock basic :offset-assert 8) + (view basic :offset-assert 12) + (parent uint32 :offset-assert 16) + (brother uint32 :offset-assert 20) + (child uint32 :offset-assert 24) + (ppointer uint32 :offset-assert 28) + (self basic :offset-assert 32) + (profile-ticks uint32 :offset-assert 36) + (pool basic :offset-assert 40) + (status basic :offset-assert 44) + (pid int32 :offset-assert 48) + (main-thread basic :offset-assert 52) + (top-thread basic :offset-assert 56) + (entity basic :offset-assert 60) + (level basic :offset-assert 64) + (state basic :offset-assert 68) + (prev-state basic :offset-assert 72) + (next-state basic :offset-assert 76) + (state-stack basic :offset-assert 80) + (trans-hook basic :offset-assert 84) + (post-hook basic :offset-assert 88) + (event-hook basic :offset-assert 92) + (allocated-length int32 :offset-assert 96) + (heap-base uint32 :offset-assert 108) + (heap-top uint32 :offset-assert 112) + (heap-cur uint32 :offset-assert 116) + (stack-frame-top basic :offset-assert 120) + (heap kheap :inline :offset-assert 108) + (connection-list connectable :inline :offset-assert 124) + (stack UNKNOWN :dynamic :offset-assert 140) + ) + :method-count-assert 15 + :size-assert #x90 + :flag-assert #xf00000090 + (:methods + (eco-light-method-9 () none) ;; 9 + (eco-light-method-10 () none) ;; 10 + (eco-light-method-11 () none) ;; 11 + (eco-light-method-12 () none) ;; 12 + (eco-light-method-13 () none) ;; 13 + (eco-light-method-14 () none) ;; 14 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-eco ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *eco-mgr* object) +;; (define-extern *eco-ct* object) +;; (define-extern *eco-array* array) +;; (define-extern *eco-static-hash* object) +;; (define-extern *eco-dynamic-hash* object) +;; (define-extern *eco-nearby-ct* object) +;; (define-extern *eco-nearby-array* array) +;; (define-extern *eco-last-processed* object) +;; (define-extern eco-mgr-init-by-other function) +;; (define-extern init-local-net-eco-mgr function) +;; (define-extern compute-veh-eco-owner-score function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-eco-types ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype eco-blue (eco) + ((launcher UNKNOWN 5 :offset-assert 248) + (birth-accum UNKNOWN 5 :offset-assert 268) + ) + :method-count-assert 56 + :size-assert #x120 + :flag-assert #x3800900120 + (:state-methods + running ;; 50 + ) + ) +|# + +#| +(deftype eco-yellow (eco) + ((launcher basic :offset-assert 248) + (birth-accum float :offset-assert 252) + ) + :method-count-assert 56 + :size-assert #x100 + :flag-assert #x3800700100 + (:state-methods + running ;; 50 + ) + ) +|# + +#| +(deftype eco-red (eco) + ((launcher basic :offset-assert 248) + (birth-accum float :offset-assert 252) + ) + :method-count-assert 56 + :size-assert #x100 + :flag-assert #x3800700100 + (:state-methods + running ;; 50 + ) + ) +|# + +#| +(deftype eco-green (eco) + ((launcher basic :offset-assert 248) + (birth-accum float :offset-assert 252) + ) + :method-count-assert 56 + :size-assert #x100 + :flag-assert #x3800700100 + (:state-methods + running ;; 50 + ) + ) +|# + +;; (define-extern *eco-blue-debris-params* debris-static-params) +;; (define-extern *eco-blue-base-quat* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-simple-destruct ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *net-simple-destruct-ct* object) +;; (define-extern *net-simple-destruct-indices* object) +;; (define-extern *tmp-was-allocated* object) +;; (define-extern *destruct-powerup-names* array) +;; (define-extern get-destruct-perm function) +;; (define-extern count-powerups function) +;; (define-extern rand-spawn-pickup function) +;; (define-extern spawn-pickups-from-destructible function) +;; (define-extern init-local-net-simple-destruct-mgr function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-enemy ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern play-anim-along-path function) +;; (define-extern advance-anim-by-motion function) +;; (define-extern *tmp-transition* object) +;; (define-extern net-enemy-default-handler function) +;; (define-extern kill-all-enemies function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; explosion ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *explosion-effect-suppress* object) +;; (define-extern explosion-init-by-other function) ;; (function explosion-init-params object :behavior explosion) +;; (define-extern explosion-spawn-legacy-version function) ;; (function process-drawable type explosion-init-params (pointer process)) +;; (define-extern explosion-spawn function) ;; (function explosion-init-params process-drawable none) +;; (define-extern find-closest-solid-sphere-prim function) ;; (function collide-shape vector collide-spec collide-shape-prim) +;; (define-extern *explosion-debug-sphere* object) ;; sphere +;; (define-extern explosion-handle-touch-with-ccheck function) +;; (define-extern explosion-handle-touch-without-ccheck function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-data ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern V_YELLOW_GUIDED_MISSILE_STANDOFF_TIME object) +;; (define-extern V_WPN_SHIELD_COLOR_LEVEL_I object) +;; (define-extern V_WPN_SHIELD_COLOR_LEVEL_II object) +;; (define-extern *v-wpn-available-yellow* array) +;; (define-extern *v-wpn-available-red* array) +;; (define-extern *v-wpn-available-purple* array) +;; (define-extern *weapon-select-table-yellow-even* object) +;; (define-extern *weapon-select-table-red-even* object) +;; (define-extern *weapon-select-table-yellow-default* object) +;; (define-extern *weapon-select-table-red-default* object) +;; (define-extern *weapon-select-table-yellow-training* object) +;; (define-extern *weapon-select-table-red-training* object) +;; (define-extern *weapon-select-table-red-deathrace* object) +;; (define-extern *weapon-select-table-yellow-deathrace* object) +;; (define-extern *weapon-select-table-yellow-race-first* object) +;; (define-extern *weapon-select-table-red-race-first* object) +;; (define-extern *weapon-select-table-yellow-race-second* object) +;; (define-extern *weapon-select-table-red-race-second* object) +;; (define-extern *weapon-select-table-yellow-race-middle* object) +;; (define-extern *weapon-select-table-red-race-middle* object) +;; (define-extern *weapon-select-table-yellow-race-penultimate* object) +;; (define-extern *weapon-select-table-red-race-penultimate* object) +;; (define-extern *weapon-select-table-yellow-race-last* object) +;; (define-extern *weapon-select-table-red-race-last* object) +;; (define-extern *weapon-select-table-yellow-deathmatch-leading* object) +;; (define-extern *weapon-select-table-red-deathmatch-leading* object) +;; (define-extern *weapon-select-table-yellow-deathmatch-middle* object) +;; (define-extern *weapon-select-table-red-deathmatch-middle* object) +;; (define-extern *weapon-select-table-yellow-deathmatch-tailing* object) +;; (define-extern *weapon-select-table-red-deathmatch-tailing* object) +;; (define-extern *weapon-select-table-red-boss-battle* object) +;; (define-extern *weapon-select-table-yellow-boss-battle* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-hud ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype in-game-hud (hud) + ((real-items basic :offset-assert 6364) + (items basic :offset-assert 6368) + (manager basic :offset-assert 6372) + (inited-strings-count int32 :offset-assert 6376) + ) + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + (:methods + (in-game-hud-method-30 () none) ;; 30 + (in-game-hud-method-31 () none) ;; 31 + (in-game-hud-method-32 () none) ;; 32 + ) + ) +|# + +#| +(deftype hud-item (basic) + ((alpha uint8 :offset-assert 4) + (real-alpha uint8 :offset-assert 5) + (position-x int16 :offset-assert 6) + (position-y int16 :offset-assert 8) + (real-position-x int16 :offset-assert 10) + (real-position-y int16 :offset-assert 12) + (width int16 :offset-assert 14) + (height int16 :offset-assert 16) + (real-width int16 :offset-assert 18) + (real-height int16 :offset-assert 20) + (zval uint16 :offset-assert 22) + (real-scale int16 :offset-assert 24) + (scale int16 :offset-assert 26) + (flags int32 :offset-assert 28) + (effect basic :offset-assert 32) + (parent basic :offset-assert 36) + ) + :method-count-assert 24 + :size-assert #x28 + :flag-assert #x1800000028 + (:methods + (hud-item-method-9 () none) ;; 9 + (hud-item-method-10 () none) ;; 10 + (hud-item-method-11 () none) ;; 11 + (hud-item-method-12 () none) ;; 12 + (hud-item-method-13 () none) ;; 13 + (hud-item-method-14 () none) ;; 14 + (hud-item-method-15 () none) ;; 15 + (hud-item-method-16 () none) ;; 16 + (hud-item-method-17 () none) ;; 17 + (hud-item-method-18 () none) ;; 18 + (hud-item-method-19 () none) ;; 19 + (hud-item-method-20 () none) ;; 20 + (hud-item-method-21 () none) ;; 21 + (hud-item-method-22 () none) ;; 22 + (hud-item-method-23 () none) ;; 23 + ) + ) +|# + +#| +(deftype hud-effect (basic) + ((message basic :offset-assert 4) + (active basic :offset-assert 8) + (pending basic :offset-assert 12) + (delay int32 :offset-assert 16) + (receive-time int32 :offset-assert 20) + (item basic :offset-assert 24) + ) + :method-count-assert 15 + :size-assert #x1c + :flag-assert #xf0000001c + (:methods + (hud-effect-method-9 () none) ;; 9 + (hud-effect-method-10 () none) ;; 10 + (hud-effect-method-11 () none) ;; 11 + (hud-effect-method-12 () none) ;; 12 + (hud-effect-method-13 () none) ;; 13 + (hud-effect-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype hud-manager (basic) + () + :method-count-assert 12 + :size-assert #x4 + :flag-assert #xc00000004 + (:methods + (hud-manager-method-9 () none) ;; 9 + (hud-manager-method-10 () none) ;; 10 + (hud-manager-method-11 () none) ;; 11 + ) + ) +|# + +#| +(deftype basic-manager (hud-manager) + ((exit-start-time int32 :offset-assert 4) + (exit-time int32 :offset-assert 8) + (previous-time int32 :offset-assert 12) + ) + :method-count-assert 12 + :size-assert #x10 + :flag-assert #xc00000010 + ) +|# + +#| +(deftype hud-region (structure) + ((offset-x float :offset-assert 0) + (offset-y float :offset-assert 4) + (width float :offset-assert 8) + (height float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype hud-item-string (hud-item) + ((string hud-string :offset-assert 40) + (text-id uint32 :offset-assert 44) + (font-effect uint8 :offset-assert 48) + (font-effect-color uint8 :offset-assert 49) + (color uint8 :offset-assert 50) + (font-flags uint16 :offset-assert 52) + (has-outline basic :offset-assert 56) + ) + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + (:methods + (hud-item-string-method-24 () none) ;; 24 + (hud-item-string-method-25 () none) ;; 25 + (hud-item-string-method-26 () none) ;; 26 + (hud-item-string-method-27 () none) ;; 27 + (hud-item-string-method-28 () none) ;; 28 + ) + ) +|# + +#| +(deftype hud-item-sprite (hud-item) + ((scale-x int16 :offset-assert 26) + (real-scale-x int16 :offset-assert 24) + (sprite hud-sprite :offset-assert 40) + (real-scale-y int16 :offset-assert 44) + (scale-y int16 :offset-assert 46) + (color vector4w :inline :offset-assert 48) + (tex-id uint32 :offset-assert 64) + (sprite-flags uint16 :offset-assert 68) + (angle float :offset-assert 72) + ) + :method-count-assert 25 + :size-assert #x4c + :flag-assert #x190000004c + (:methods + (hud-item-sprite-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-item-group (hud-item) + ((items basic :offset-assert 40) + ) + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +;; (define-extern *debug-hud* object) +;; (define-extern *display-boxes* object) +;; (define-extern *current-hud* object) +;; (define-extern *default-box* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-effect-group (hud-effect) + ((items basic :offset-assert 28) + ) + :method-count-assert 15 + :size-assert #x20 + :flag-assert #xf00000020 + ) +|# + +#| +(deftype hud-effect-slide (hud-effect) + ((slide-type uint64 :offset-assert 32) + (slide-time float :offset-assert 40) + (start-time int32 :offset-assert 44) + (message-is-enter basic :offset-assert 48) + ) + :method-count-assert 15 + :size-assert #x34 + :flag-assert #xf00000034 + ) +|# + +#| +(deftype hud-effect-move (hud-effect) + ((offset-x float :offset-assert 28) + (offset-y float :offset-assert 32) + (move-time float :offset-assert 36) + (start-time int32 :offset-assert 40) + ) + :method-count-assert 15 + :size-assert #x2c + :flag-assert #xf0000002c + ) +|# + +#| +(deftype hud-effect-font-effect (hud-effect) + ((font-effect uint8 :offset-assert 28) + ) + :method-count-assert 15 + :size-assert #x1d + :flag-assert #xf0000001d + ) +|# + +#| +(deftype hud-effect-throb (hud-effect) + ((start-time int32 :offset-assert 28) + (throb-time int32 :offset-assert 32) + (u float :offset-assert 36) + (scale float :offset-assert 40) + (throb-alpha float :offset-assert 44) + (max-alpha float :offset-assert 48) + ) + :method-count-assert 15 + :size-assert #x34 + :flag-assert #xf00000034 + ) +|# + +#| +(deftype hud-effect-fade (hud-effect) + ((fade-time float :offset-assert 28) + (start-time int32 :offset-assert 32) + (fade-out-on basic :offset-assert 36) + ) + :method-count-assert 15 + :size-assert #x28 + :flag-assert #xf00000028 + ) +|# + +#| +(deftype hud-effect-scale (hud-effect) + ((scale-time float :offset-assert 28) + (target-scale float :offset-assert 32) + (start-scale float :offset-assert 36) + (start-time int32 :offset-assert 40) + (dont-move-me basic :offset-assert 44) + ) + :method-count-assert 15 + :size-assert #x30 + :flag-assert #xf00000030 + ) +|# + +#| +(deftype hud-effect-emit-score-icon (hud-effect) + ((point-value int16 :offset-assert 28) + ) + :method-count-assert 15 + :size-assert #x1e + :flag-assert #xf0000001e + ) +|# + +#| +(deftype hud-effect-trigger-sound (hud-effect) + ((soundname uint16 :offset-assert 28) + ) + :method-count-assert 15 + :size-assert #x1e + :flag-assert #xf0000001e + ) +|# + +#| +(deftype hud-effect-trigger-score-sound (hud-effect) + ((soundname uint16 :offset-assert 28) + ) + :method-count-assert 15 + :size-assert #x1e + :flag-assert #xf0000001e + ) +|# + +#| +(deftype hud-text-effect-sound (hud-effect) + ((soundname uint16 :offset-assert 28) + (next-play-time int32 :offset-assert 32) + (length int32 :offset-assert 36) + (force-length int32 :offset-assert 40) + (player-rank int32 :offset-assert 44) + (increment int32 :offset-assert 48) + ) + :method-count-assert 15 + :size-assert #x34 + :flag-assert #xf00000034 + ) +|# + +#| +(deftype hud-effect-offscreen (hud-effect) + ((offscreen-type uint64 :offset-assert 32) + ) + :method-count-assert 15 + :size-assert #x28 + :flag-assert #xf00000028 + ) +|# + +;; (define-extern *last-play-time* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-widgets ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-player-icon (hud-item-group) + ((player-id int32 :offset-assert 44) + ) + :method-count-assert 25 + :size-assert #x30 + :flag-assert #x1900000030 + (:methods + (hud-player-icon-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-player-icon-name (hud-player-icon) + () + :method-count-assert 25 + :size-assert #x30 + :flag-assert #x1900000030 + ) +|# + +#| +(deftype hud-clock (hud-item-group) + ((clock-id int8 :offset-assert 44) + (count-up basic :offset-assert 48) + (fixed-time? basic :offset-assert 52) + (show-before-red basic :offset-assert 56) + (red-time int32 :offset-assert 60) + (text-id uint32 :offset-assert 64) + (fixed-time-val int32 :offset-assert 68) + ) + :method-count-assert 25 + :size-assert #x48 + :flag-assert #x1900000048 + (:methods + (hud-clock-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-medal (hud-item-group) + ((score-as-time basic :offset-assert 44) + ) + :method-count-assert 24 + :size-assert #x30 + :flag-assert #x1800000030 + ) +|# + +#| +(deftype hud-lap (hud-item-group) + ((show-total-laps basic :offset-assert 44) + (is-net-player-race basic :offset-assert 48) + (total-laps int8 :offset-assert 52) + (current-laps int8 :offset-assert 53) + ) + :method-count-assert 24 + :size-assert #x36 + :flag-assert #x1800000036 + ) +|# + +#| +(deftype hud-position (hud-item-group) + ((race-position int32 :offset-assert 44) + ) + :method-count-assert 24 + :size-assert #x30 + :flag-assert #x1800000030 + ) +|# + +#| +(deftype hud-item-player-name (hud-item-string) + () + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + ) +|# + +#| +(deftype hud-item-player-score (hud-item-string) + () + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + ) +|# + +#| +(deftype hud-item-number (hud-item-string) + ((value int32 :offset-assert 60) + ) + :method-count-assert 29 + :size-assert #x40 + :flag-assert #x1d00000040 + ) +|# + +#| +(deftype hud-item-score (hud-item-group) + ((player-id int32 :offset-assert 44) + (initial-player-id int32 :offset-assert 48) + (previous-score int32 :offset-assert 52) + (initial-texture-id uint32 :offset-assert 56) + ) + :method-count-assert 24 + :size-assert #x3c + :flag-assert #x180000003c + ) +|# + +#| +(deftype hud-score-single (hud-item-group) + ((need-event-before-update basic :offset-assert 44) + (other-human basic :offset-assert 48) + (display-score int32 :offset-assert 52) + ) + :method-count-assert 25 + :size-assert #x38 + :flag-assert #x1900000038 + (:methods + (hud-score-single-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-leader-score (hud-item-group) + ((force-visible basic :offset-assert 44) + (only-humans basic :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x34 + :flag-assert #x1800000034 + ) +|# + +#| +(deftype hud-item-score-list (hud-item-group) + ((ignore-self basic :offset-assert 44) + (active-net-player-count int32 :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x34 + :flag-assert #x1800000034 + ) +|# + +#| +(deftype hud-localized-string (hud-item-string) + () + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + ) +|# + +#| +(deftype hud-place-event (hud-item-group) + ((should-be-visible basic :offset-assert 44) + (hide-titles basic :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x34 + :flag-assert #x1800000034 + ) +|# + +#| +(deftype hud-item-string-big (hud-item-string) + () + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + ) +|# + +#| +(deftype hud-slowmo (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-top-split-bar (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-side-split-bar (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern team-has-local-humans? function) +;; (define-extern get-player-id-by-team function) +;; (define-extern *hud-slowmo* array) +;; (define-extern *hud-slowmo-proc* object) +;; (define-extern spawn-hud-slowmo function) +;; (define-extern *hud-top-split-bar* array) +;; (define-extern *hud-top-split-bar-proc* object) +;; (define-extern spawn-hud-top-split-bar function) +;; (define-extern *hud-side-split-bar* array) +;; (define-extern *hud-side-split-bar-proc* object) +;; (define-extern spawn-hud-side-split-bar function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-results ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-results-base (hud-item-group) + ((spawn-time int32 :offset-assert 44) + (start-time int32 :offset-assert 48) + (grand-prix basic :offset-assert 52) + (grand-prix-totals basic :offset-assert 56) + ) + :method-count-assert 24 + :size-assert #x3c + :flag-assert #x180000003c + ) +|# + +#| +(deftype hud-rank-name-score (hud-item-group) + ((player-id int32 :offset-assert 44) + (grand-prix basic :offset-assert 48) + (grand-prix-totals basic :offset-assert 52) + ) + :method-count-assert 25 + :size-assert #x38 + :flag-assert #x1900000038 + (:methods + (hud-rank-name-score-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-results (hud-results-base) + ((i-got-medal uint8 :offset-assert 60) + (stats-type uint64 :offset-assert 64) + ) + :method-count-assert 25 + :size-assert #x50 + :flag-assert #x1900000050 + (:methods + (hud-results-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-medal-results (hud-results-base) + ((i-got-medal uint8 :offset-assert 60) + (has-sent-inc-event basic :offset-assert 64) + ) + :method-count-assert 25 + :size-assert #x44 + :flag-assert #x1900000044 + (:methods + (hud-medal-results-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-name-score (hud-item-group) + ((player-id int32 :offset-assert 44) + (stat-type uint64 :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x38 + :flag-assert #x1800000038 + ) +|# + +#| +(deftype hud-team-score-list (hud-item-group) + ((team-id int32 :offset-assert 44) + (team-score int32 :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x34 + :flag-assert #x1800000034 + ) +|# + +#| +(deftype hud-team-score-results (hud-results-base) + ((i-got-medal uint8 :offset-assert 60) + (stats-type uint64 :offset-assert 64) + (red-team-score int32 :offset-assert 72) + (blue-team-score int32 :offset-assert 76) + ) + :method-count-assert 24 + :size-assert #x50 + :flag-assert #x1800000050 + ) +|# + +#| +(deftype hud-results-background-item (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-results-background (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-results-medal (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-results-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-results-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-results-team-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-results-team-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern score-is-time function) +;; (define-extern set-stats-text function) +;; (define-extern *had-gold* object) +;; (define-extern is-nonstandard-mode-ignore-split? function) +;; (define-extern is-nonstandard-mode? function) +;; (define-extern *reset-hud-results* object) +;; (define-extern *last-game-mgr-grand-prix* object) +;; (define-extern *hud-results-medal* array) +;; (define-extern *hud-results-medal-proc* object) +;; (define-extern spawn-hud-results-medal function) +;; (define-extern *hud-results-view-0* array) +;; (define-extern *hud-results-view-0-proc* object) +;; (define-extern spawn-hud-results-view-0 function) +;; (define-extern *hud-results-view-1* array) +;; (define-extern *hud-results-view-1-proc* object) +;; (define-extern spawn-hud-results-view-1 function) +;; (define-extern *hud-results-team-view-0* array) +;; (define-extern *hud-results-team-view-0-proc* object) +;; (define-extern spawn-hud-results-team-view-0 function) +;; (define-extern *hud-results-team-view-1* array) +;; (define-extern *hud-results-team-view-1-proc* object) +;; (define-extern spawn-hud-results-team-view-1 function) +;; (define-extern spawn-hud-results-team function) +;; (define-extern spawn-hud-results function) +;; (define-extern calc-player-rank function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-results-grand-prix ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-results-grand-prix (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-results-grand-prix-totals (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-results-medal-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern calc-grand-prix-score function) +;; (define-extern *hud-results-grand-prix* array) +;; (define-extern *hud-results-grand-prix-proc* object) +;; (define-extern spawn-hud-results-grand-prix function) +;; (define-extern *hud-results-grand-prix-totals* array) +;; (define-extern *hud-results-grand-prix-totals-proc* object) +;; (define-extern spawn-hud-results-grand-prix-totals function) +;; (define-extern grand-prix-totals-on? function) +;; (define-extern *hud-results-medal-1* array) +;; (define-extern *hud-results-medal-1-proc* object) +;; (define-extern spawn-hud-results-medal-1 function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-high-scores ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-high-score (hud-item-group) + ((position int32 :offset-assert 44) + ) + :method-count-assert 24 + :size-assert #x30 + :flag-assert #x1800000030 + ) +|# + +#| +(deftype hud-high-scores (hud-results-base) + () + :method-count-assert 24 + :size-assert #x3c + :flag-assert #x180000003c + ) +|# + +#| +(deftype high-scores-list (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-background (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-background-top-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-background-top-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-background-side-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-background-side-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *high-scores-list* array) +;; (define-extern *high-scores-list-proc* object) +;; (define-extern spawn-high-scores-list function) +;; (define-extern spawn-high-score-hud function) +;; (define-extern high-scores-on? function) +;; (define-extern *hud-background* array) +;; (define-extern *hud-background-proc* object) +;; (define-extern spawn-hud-background function) +;; (define-extern *hud-background-top-view-0* array) +;; (define-extern *hud-background-top-view-0-proc* object) +;; (define-extern spawn-hud-background-top-view-0 function) +;; (define-extern *hud-background-top-view-1* array) +;; (define-extern *hud-background-top-view-1-proc* object) +;; (define-extern spawn-hud-background-top-view-1 function) +;; (define-extern *hud-background-side-view-0* array) +;; (define-extern *hud-background-side-view-0-proc* object) +;; (define-extern spawn-hud-background-side-view-0 function) +;; (define-extern *hud-background-side-view-1* array) +;; (define-extern *hud-background-side-view-1-proc* object) +;; (define-extern spawn-hud-background-side-view-1 function) +;; (define-extern spawn-hud-results-background function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-cash ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-cash-stats (hud-item-group) + ((stat-type uint64 :offset-assert 48) + (time int32 :offset-assert 56) + (last-time int32 :offset-assert 60) + ) + :method-count-assert 28 + :size-assert #x40 + :flag-assert #x1c00000040 + (:methods + (hud-cash-stats-method-24 () none) ;; 24 + (hud-cash-stats-method-25 () none) ;; 25 + (hud-cash-stats-method-26 () none) ;; 26 + (hud-cash-stats-method-27 () none) ;; 27 + ) + ) +|# + +#| +(deftype end-menu (hud-item-group) + ((selection int8 :offset-assert 44) + ) + :method-count-assert 24 + :size-assert #x2d + :flag-assert #x180000002d + ) +|# + +#| +(deftype hud-game-end-grand-prix (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-game-end-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-game-end-side-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-game-end-top-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype cash-hud (hud-item-group) + ((spawn-time int32 :offset-assert 44) + (start-time int32 :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x34 + :flag-assert #x1800000034 + ) +|# + +#| +(deftype hud-cash-stats-single (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-cash-stats-top-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-cash-stats-top-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-cash-stats-side-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-cash-stats-side-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern medal-uses-score? function) +;; (define-extern get-medal-ignore-gamestate function) +;; (define-extern settings-multiplier function) +;; (define-extern cup-multiplier function) +;; (define-extern medal-instead-of-place? function) +;; (define-extern *last-cash-game-mgr-for-player-0* object) +;; (define-extern *last-cash-game-mgr-for-player-1* object) +;; (define-extern *hud-game-end-grand-prix* array) +;; (define-extern *hud-game-end-grand-prix-proc* object) +;; (define-extern spawn-hud-game-end-grand-prix function) +;; (define-extern *hud-game-end-view-0* array) +;; (define-extern *hud-game-end-view-0-proc* object) +;; (define-extern spawn-hud-game-end-view-0 function) +;; (define-extern *hud-game-end-side-view-0* array) +;; (define-extern *hud-game-end-side-view-0-proc* object) +;; (define-extern spawn-hud-game-end-side-view-0 function) +;; (define-extern *hud-game-end-top-view-0* array) +;; (define-extern *hud-game-end-top-view-0-proc* object) +;; (define-extern spawn-hud-game-end-top-view-0 function) +;; (define-extern spawn-hud-game-end function) +;; (define-extern end-game-menu-on? function) +;; (define-extern *hud-cash-stats-single* array) +;; (define-extern *hud-cash-stats-single-proc* object) +;; (define-extern spawn-hud-cash-stats-single function) +;; (define-extern *hud-cash-stats-top-view-0* array) +;; (define-extern *hud-cash-stats-top-view-0-proc* object) +;; (define-extern spawn-hud-cash-stats-top-view-0 function) +;; (define-extern *hud-cash-stats-top-view-1* array) +;; (define-extern *hud-cash-stats-top-view-1-proc* object) +;; (define-extern spawn-hud-cash-stats-top-view-1 function) +;; (define-extern *hud-cash-stats-side-view-0* array) +;; (define-extern *hud-cash-stats-side-view-0-proc* object) +;; (define-extern spawn-hud-cash-stats-side-view-0 function) +;; (define-extern *hud-cash-stats-side-view-1* array) +;; (define-extern *hud-cash-stats-side-view-1-proc* object) +;; (define-extern spawn-hud-cash-stats-side-view-1 function) +;; (define-extern reset-hud-cash-time function) +;; (define-extern spawn-hud-cash-stats function) +;; (define-extern cash-stats-on? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-widgets-2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-indicate-death (hud-item-group) + () + :method-count-assert 25 + :size-assert #x2c + :flag-assert #x190000002c + (:methods + (hud-indicate-death-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype death-indicator-record (structure) + ((on basic :offset-assert 0) + (handle uint64 :offset-assert 8) + (spawn-time int32 :offset-assert 16) + (previous-time int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype hud-manager-death-indicator (hud-manager) + ((death-indicators-queue UNKNOWN 20 :offset-assert 8) + (death-indicators-queue-size int8 :offset-assert 648) + ) + :method-count-assert 15 + :size-assert #x289 + :flag-assert #xf00000289 + (:methods + (hud-manager-death-indicator-method-12 () none) ;; 12 + (hud-manager-death-indicator-method-13 () none) ;; 13 + (hud-manager-death-indicator-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype death-indicator-single0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-single1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-single2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-single3 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-single4 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-10 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-11 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-12 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-13 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-14 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-20 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-21 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-22 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-23 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype death-indicator-view-24 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-manager-death-indicator-1* hud-manager-death-indicator) +;; (define-extern *hud-manager-death-indicator-2* hud-manager-death-indicator) +;; (define-extern *death-indicator-single0* array) +;; (define-extern *death-indicator-single0-proc* object) +;; (define-extern spawn-death-indicator-single0 function) +;; (define-extern *death-indicator-single1* array) +;; (define-extern *death-indicator-single1-proc* object) +;; (define-extern spawn-death-indicator-single1 function) +;; (define-extern *death-indicator-single2* array) +;; (define-extern *death-indicator-single2-proc* object) +;; (define-extern spawn-death-indicator-single2 function) +;; (define-extern *death-indicator-single3* array) +;; (define-extern *death-indicator-single3-proc* object) +;; (define-extern spawn-death-indicator-single3 function) +;; (define-extern *death-indicator-single4* array) +;; (define-extern *death-indicator-single4-proc* object) +;; (define-extern spawn-death-indicator-single4 function) +;; (define-extern spawn-unused-death-indicator-single function) +;; (define-extern *death-indicator-view-10* array) +;; (define-extern *death-indicator-view-10-proc* object) +;; (define-extern spawn-death-indicator-view-10 function) +;; (define-extern *death-indicator-view-11* array) +;; (define-extern *death-indicator-view-11-proc* object) +;; (define-extern spawn-death-indicator-view-11 function) +;; (define-extern *death-indicator-view-12* array) +;; (define-extern *death-indicator-view-12-proc* object) +;; (define-extern spawn-death-indicator-view-12 function) +;; (define-extern *death-indicator-view-13* array) +;; (define-extern *death-indicator-view-13-proc* object) +;; (define-extern spawn-death-indicator-view-13 function) +;; (define-extern *death-indicator-view-14* array) +;; (define-extern *death-indicator-view-14-proc* object) +;; (define-extern spawn-death-indicator-view-14 function) +;; (define-extern spawn-unused-death-indicator-view-1 function) +;; (define-extern *death-indicator-view-20* array) +;; (define-extern *death-indicator-view-20-proc* object) +;; (define-extern spawn-death-indicator-view-20 function) +;; (define-extern *death-indicator-view-21* array) +;; (define-extern *death-indicator-view-21-proc* object) +;; (define-extern spawn-death-indicator-view-21 function) +;; (define-extern *death-indicator-view-22* array) +;; (define-extern *death-indicator-view-22-proc* object) +;; (define-extern spawn-death-indicator-view-22 function) +;; (define-extern *death-indicator-view-23* array) +;; (define-extern *death-indicator-view-23-proc* object) +;; (define-extern spawn-death-indicator-view-23 function) +;; (define-extern *death-indicator-view-24* array) +;; (define-extern *death-indicator-view-24-proc* object) +;; (define-extern spawn-death-indicator-view-24 function) +;; (define-extern spawn-unused-death-indicator-view-2 function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-widgets-3 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-points-combo (hud-item-group) + ((combo-points int32 :offset-assert 44) + (combo-size int32 :offset-assert 48) + (since-update-time int32 :offset-assert 52) + (since-exit-time int32 :offset-assert 56) + (sent-exit-event basic :offset-assert 60) + ) + :method-count-assert 24 + :size-assert #x40 + :flag-assert #x1800000040 + ) +|# + +#| +(deftype hud-points-combo-display0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-combo-display1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-combo-display2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-combo-display3 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-combo-display4 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype text-display-manager (basic-manager) + () + :method-count-assert 12 + :size-assert #x10 + :flag-assert #xc00000010 + ) +|# + +#| +(deftype hud-item-info-string (hud-item-string) + () + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + ) +|# + +#| +(deftype text-display-deflected-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype text-display-deflected-view-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype text-display-sblastered-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype text-display-sblastered-view-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype text-display-supernova-backfire-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype text-display-supernova-backfire-view-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-icon (hud-item-group) + ((start vector :inline :offset-assert 48) + (end vector :inline :offset-assert 64) + (position vector :inline :offset-assert 80) + (sent-exit basic :offset-assert 96) + (sent-update basic :offset-assert 100) + (move-time int32 :offset-assert 104) + (points int32 :offset-assert 108) + (min-scale float :offset-assert 112) + ) + :method-count-assert 24 + :size-assert #x74 + :flag-assert #x1800000074 + ) +|# + +#| +(deftype hud-points-icon-display0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-icon-display1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-icon-display2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-icon-display3 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-points-icon-display4 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-points-combo-display0* array) +;; (define-extern *hud-points-combo-display0-proc* object) +;; (define-extern spawn-hud-points-combo-display0 function) +;; (define-extern *hud-points-combo-display1* array) +;; (define-extern *hud-points-combo-display1-proc* object) +;; (define-extern spawn-hud-points-combo-display1 function) +;; (define-extern *hud-points-combo-display2* array) +;; (define-extern *hud-points-combo-display2-proc* object) +;; (define-extern spawn-hud-points-combo-display2 function) +;; (define-extern *hud-points-combo-display3* array) +;; (define-extern *hud-points-combo-display3-proc* object) +;; (define-extern spawn-hud-points-combo-display3 function) +;; (define-extern *hud-points-combo-display4* array) +;; (define-extern *hud-points-combo-display4-proc* object) +;; (define-extern spawn-hud-points-combo-display4 function) +;; (define-extern spawn-unused-hud-points-combo-display function) +;; (define-extern *text-display-deflected-view-1* array) +;; (define-extern *text-display-deflected-view-1-proc* object) +;; (define-extern spawn-text-display-deflected-view-1 function) +;; (define-extern *text-display-deflected-view-2* array) +;; (define-extern *text-display-deflected-view-2-proc* object) +;; (define-extern spawn-text-display-deflected-view-2 function) +;; (define-extern *text-display-sblastered-view-1* array) +;; (define-extern *text-display-sblastered-view-1-proc* object) +;; (define-extern spawn-text-display-sblastered-view-1 function) +;; (define-extern *text-display-sblastered-view-2* array) +;; (define-extern *text-display-sblastered-view-2-proc* object) +;; (define-extern spawn-text-display-sblastered-view-2 function) +;; (define-extern display-sblastered-text-to-view function) +;; (define-extern *text-display-supernova-backfire-view-1* array) +;; (define-extern *text-display-supernova-backfire-view-1-proc* object) +;; (define-extern spawn-text-display-supernova-backfire-view-1 function) +;; (define-extern *text-display-supernova-backfire-view-2* array) +;; (define-extern *text-display-supernova-backfire-view-2-proc* object) +;; (define-extern spawn-text-display-supernova-backfire-view-2 function) +;; (define-extern display-supernova-backfire-text-to-view function) +;; (define-extern change-to-screen-space function) +;; (define-extern *hud-points-icon-display0* array) +;; (define-extern *hud-points-icon-display0-proc* object) +;; (define-extern spawn-hud-points-icon-display0 function) +;; (define-extern *hud-points-icon-display1* array) +;; (define-extern *hud-points-icon-display1-proc* object) +;; (define-extern spawn-hud-points-icon-display1 function) +;; (define-extern *hud-points-icon-display2* array) +;; (define-extern *hud-points-icon-display2-proc* object) +;; (define-extern spawn-hud-points-icon-display2 function) +;; (define-extern *hud-points-icon-display3* array) +;; (define-extern *hud-points-icon-display3-proc* object) +;; (define-extern spawn-hud-points-icon-display3 function) +;; (define-extern *hud-points-icon-display4* array) +;; (define-extern *hud-points-icon-display4-proc* object) +;; (define-extern spawn-hud-points-icon-display4 function) +;; (define-extern spawn-unused-hud-points-icon-display function) +;; (define-extern set-to-upper-right function) +;; (define-extern create-points-icon-from-screen-pos function) +;; (define-extern create-points-icon function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-widgets-4 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype text-display-nice-shot (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-headset-talker (hud-item-group) + ((decoder-talk-times UNKNOWN 8 :offset-assert 44) + ) + :method-count-assert 24 + :size-assert #x4c + :flag-assert #x180000004c + ) +|# + +#| +(deftype hud-headset-talker-race (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-headset-talker-other (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *text-display-nice-shot* array) +;; (define-extern *text-display-nice-shot-proc* object) +;; (define-extern spawn-text-display-nice-shot function) +;; (define-extern display-nice-shot-to-view function) +;; (define-extern *hud-headset-talker-race* array) +;; (define-extern *hud-headset-talker-race-proc* object) +;; (define-extern spawn-hud-headset-talker-race function) +;; (define-extern *hud-headset-talker-other* array) +;; (define-extern *hud-headset-talker-other-proc* object) +;; (define-extern spawn-hud-headset-talker-other function) +;; (define-extern *last-talker-ids* object) +;; (define-extern spawn-hud-headset-talker function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; in-game-menu-hud ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype in-game-menu-struct (structure) + ((last-selection-index int8 :offset-assert 0) + (confirmation-sym basic :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (in-game-menu-struct-method-9 () none) ;; 9 + ) + ) +|# + +#| +(deftype hud-bar-slider (hud-item-group) + () + :method-count-assert 25 + :size-assert #x2c + :flag-assert #x190000002c + (:methods + (hud-bar-slider-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype in-game-menu-hud (hud-item-group) + ((start-time uint64 :offset-assert 48) + (selection-index int8 :offset-assert 56) + (old-clock-ratio UNKNOWN 22 :offset-assert 60) + (sound-id uint32 :offset-assert 148) + ) + :method-count-assert 26 + :size-assert #x98 + :flag-assert #x1a00000098 + (:methods + (in-game-menu-hud-method-24 () none) ;; 24 + (in-game-menu-hud-method-25 () none) ;; 25 + ) + ) +|# + +#| +(deftype in-game-menu-hud-options (in-game-menu-hud) + () + :method-count-assert 26 + :size-assert #x98 + :flag-assert #x1a00000098 + ) +|# + +#| +(deftype hud-in-game-menu-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-view-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-view-shared-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-view-shared-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-view-shared-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-networked-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-networked-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-networked-view-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *in-game-menu-process* object) +;; (define-extern *in-game-menu-on?* object) +;; (define-extern in-game-menu-allowed? function) +;; (define-extern *in-game-menu-struct* object) +;; (define-extern *hud-in-game-menu-view-0* array) +;; (define-extern *hud-in-game-menu-view-0-proc* object) +;; (define-extern spawn-hud-in-game-menu-view-0 function) +;; (define-extern *hud-in-game-menu-view-1* array) +;; (define-extern *hud-in-game-menu-view-1-proc* object) +;; (define-extern spawn-hud-in-game-menu-view-1 function) +;; (define-extern *hud-in-game-menu-view-2* array) +;; (define-extern *hud-in-game-menu-view-2-proc* object) +;; (define-extern spawn-hud-in-game-menu-view-2 function) +;; (define-extern *hud-in-game-menu-view-shared-0* array) +;; (define-extern *hud-in-game-menu-view-shared-0-proc* object) +;; (define-extern spawn-hud-in-game-menu-view-shared-0 function) +;; (define-extern *hud-in-game-menu-view-shared-1* array) +;; (define-extern *hud-in-game-menu-view-shared-1-proc* object) +;; (define-extern spawn-hud-in-game-menu-view-shared-1 function) +;; (define-extern *hud-in-game-menu-view-shared-2* array) +;; (define-extern *hud-in-game-menu-view-shared-2-proc* object) +;; (define-extern spawn-hud-in-game-menu-view-shared-2 function) +;; (define-extern spawn-hud-in-game-menu function) +;; (define-extern *hud-in-game-menu-networked-view-0* array) +;; (define-extern *hud-in-game-menu-networked-view-0-proc* object) +;; (define-extern spawn-hud-in-game-menu-networked-view-0 function) +;; (define-extern *hud-in-game-menu-networked-view-1* array) +;; (define-extern *hud-in-game-menu-networked-view-1-proc* object) +;; (define-extern spawn-hud-in-game-menu-networked-view-1 function) +;; (define-extern *hud-in-game-menu-networked-view-2* array) +;; (define-extern *hud-in-game-menu-networked-view-2-proc* object) +;; (define-extern spawn-hud-in-game-menu-networked-view-2 function) +;; (define-extern spawn-hud-in-game-menu-networked function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; in-game-menu-hud2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-in-game-menu-options-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-options-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-in-game-menu-options-view-2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-in-game-menu-options-view-0* array) +;; (define-extern *hud-in-game-menu-options-view-0-proc* object) +;; (define-extern spawn-hud-in-game-menu-options-view-0 function) +;; (define-extern *hud-in-game-menu-options-view-1* array) +;; (define-extern *hud-in-game-menu-options-view-1-proc* object) +;; (define-extern spawn-hud-in-game-menu-options-view-1 function) +;; (define-extern *hud-in-game-menu-options-view-2* array) +;; (define-extern *hud-in-game-menu-options-view-2-proc* object) +;; (define-extern spawn-hud-in-game-menu-options-view-2 function) +;; (define-extern spawn-hud-in-game-menu-options function) +;; (define-extern in-game-menu-startup function) +;; (define-extern in-game-menu-on? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-game-mgr ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype intro-hud-view (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype special-intro-hud-view (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *intro-hud-view* array) +;; (define-extern *intro-hud-view-proc* object) +;; (define-extern spawn-intro-hud-view function) +;; (define-extern *special-intro-hud-view* array) +;; (define-extern *special-intro-hud-view-proc* object) +;; (define-extern spawn-special-intro-hud-view function) +;; (define-extern spawn-special-intro-hud function) +;; (define-extern spawn-intro-hud function) +;; (define-extern set-battle-camera-matrix function) +;; (define-extern cam-battle-intro-player-update function) +;; (define-extern cam-battle-intro-update function) +;; (define-extern update-framing function) +;; (define-extern do-battle-intro function) +;; (define-extern cam-battle-intro state) +;; (define-extern print-intro-text function) +;; (define-extern cam-event-intro-update function) +;; (define-extern do-event-intro function) +;; (define-extern cam-event-intro state) +;; (define-extern calc-team-score function) +;; (define-extern net-game-mgr-default-handler function) +;; (define-extern reset-game-now function) +;; (define-extern check-body-part-award function) +;; (define-extern net-game-mgr-init-local function) +;; (define-extern late-join-spawn-players function) +;; (define-extern wait-for-all-net-players function) +;; (define-extern play-mode-startup-hook function) +;; (define-extern get-game-mgr-type function) +;; (define-extern spawn-game-mgr function) +;; (define-extern *backup-player-ladder-stats* object) +;; (define-extern *tmp-awards* object) +;; (define-extern *award-table* array) +;; (define-extern overall-score-amount-to-gamble function) +;; (define-extern award-overall-score function) +;; (define-extern got-other-players function) +;; (define-extern quit-game-stats-update function) +;; (define-extern current-level-difficulty function) +;; (define-extern difficulty-stats function) +;; (define-extern are-we-in-time-trial-mode? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-race ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype race-mesh-debug (process) + ((mesh basic :offset-assert 144) + ) + :method-count-assert 16 + :size-assert #x94 + :flag-assert #x1000100094 + (:methods + (race-mesh-debug-method-9 () none) ;; 9 + (race-mesh-debug-method-10 () none) ;; 10 + (race-mesh-debug-method-11 () none) ;; 11 + (race-mesh-debug-method-12 () none) ;; 12 + (race-mesh-debug-method-13 () none) ;; 13 + (race-mesh-debug-method-14 () none) ;; 14 + ) + (:state-methods + idle ;; 15 + ) + ) +|# + +;; (define-extern *starting-race-grid* object) +;; (define-extern shuffle-race-grid function) +;; (define-extern change-to-eye-position function) +;; (define-extern set-race-camera-matrix function) +;; (define-extern cam-race-intro-update function) +;; (define-extern cam-race-intro state) +;; (define-extern set-race-end-camera function) +;; (define-extern get-race-line-info function) +;; (define-extern adjust-position-to-above-ground function) +;; (define-extern cam-race-end-side-view function) +;; (define-extern cam-race-end-low-fixed function) +;; (define-extern cam-race-end-high-aiming function) +;; (define-extern do-race-end function) +;; (define-extern cam-race-end state) +;; (define-extern get-nearest-race-point function) +;; (define-extern net-game-mgr-race-startup function) +;; (define-extern race-info-find-ground function) +;; (define-extern race-mesh-debug-init-by-other function) +;; (define-extern spawn-race-mesh-debug function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-race-hud ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype damage-record (structure) + ((player-id int32 :offset-assert 0) + (part basic :offset-assert 4) + (start-time int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype rotation-record (structure) + ((index1 int32 :offset-assert 0) + (index2 int32 :offset-assert 4) + (start-time int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype hud-player-positions (hud-item-group) + ((player-position-list UNKNOWN 6 :offset-assert 44) + (player-count int32 :offset-assert 68) + (rotations UNKNOWN 3 :offset-assert 72) + (used-rotations int32 :offset-assert 120) + (damage-records UNKNOWN 6 :offset-assert 124) + (used-damage-records int32 :offset-assert 220) + (horizontal basic :offset-assert 224) + ) + :method-count-assert 36 + :size-assert #xe4 + :flag-assert #x24000000e4 + (:methods + (hud-player-positions-method-24 () none) ;; 24 + (hud-player-positions-method-25 () none) ;; 25 + (hud-player-positions-method-26 () none) ;; 26 + (hud-player-positions-method-27 () none) ;; 27 + (hud-player-positions-method-28 () none) ;; 28 + (hud-player-positions-method-29 () none) ;; 29 + (hud-player-positions-method-30 () none) ;; 30 + (hud-player-positions-method-31 () none) ;; 31 + (hud-player-positions-method-32 () none) ;; 32 + (hud-player-positions-method-33 () none) ;; 33 + (hud-player-positions-method-34 () none) ;; 34 + (hud-player-positions-method-35 () none) ;; 35 + ) + ) +|# + +#| +(deftype hud-player-progress (hud-item-group) + () + :method-count-assert 26 + :size-assert #x2c + :flag-assert #x1a0000002c + (:methods + (hud-player-progress-method-24 () none) ;; 24 + (hud-player-progress-method-25 () none) ;; 25 + ) + ) +|# + +#| +(deftype hud-race-stats-single (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-race-stats-top-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-race-stats-side-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-race-stats-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-race-stats-single* array) +;; (define-extern *hud-race-stats-single-proc* object) +;; (define-extern spawn-hud-race-stats-single function) +;; (define-extern *hud-race-stats-top-view-0* array) +;; (define-extern *hud-race-stats-top-view-0-proc* object) +;; (define-extern spawn-hud-race-stats-top-view-0 function) +;; (define-extern *hud-race-stats-side-view-0* array) +;; (define-extern *hud-race-stats-side-view-0-proc* object) +;; (define-extern spawn-hud-race-stats-side-view-0 function) +;; (define-extern *hud-race-stats-view-1* array) +;; (define-extern *hud-race-stats-view-1-proc* object) +;; (define-extern spawn-hud-race-stats-view-1 function) +;; (define-extern spawn-hud-race-stats function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-deathrace ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-deathrace-stats-single (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathrace-stats-multi (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathrace-stats-split-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathrace-stats-split-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-deathrace-stats-single* array) +;; (define-extern *hud-deathrace-stats-single-proc* object) +;; (define-extern spawn-hud-deathrace-stats-single function) +;; (define-extern *hud-deathrace-stats-multi* array) +;; (define-extern *hud-deathrace-stats-multi-proc* object) +;; (define-extern spawn-hud-deathrace-stats-multi function) +;; (define-extern *hud-deathrace-stats-split-view-0* array) +;; (define-extern *hud-deathrace-stats-split-view-0-proc* object) +;; (define-extern spawn-hud-deathrace-stats-split-view-0 function) +;; (define-extern *hud-deathrace-stats-split-view-1* array) +;; (define-extern *hud-deathrace-stats-split-view-1-proc* object) +;; (define-extern spawn-hud-deathrace-stats-split-view-1 function) +;; (define-extern spawn-hud-deathrace-stats-split function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-rushhour ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-rushhour-stats-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-rushhour-stats-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *rushhour-drone-colors* array) +;; (define-extern *hud-rushhour-stats-view-0* array) +;; (define-extern *hud-rushhour-stats-view-0-proc* object) +;; (define-extern spawn-hud-rushhour-stats-view-0 function) +;; (define-extern *hud-rushhour-stats-view-1* array) +;; (define-extern *hud-rushhour-stats-view-1-proc* object) +;; (define-extern spawn-hud-rushhour-stats-view-1 function) +;; (define-extern spawn-hud-rushhour-stats function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-boss-battle ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-boss-meter (hud-item-group) + ((player-id int32 :offset-assert 44) + (health float :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x34 + :flag-assert #x1800000034 + ) +|# + +#| +(deftype boss-hud (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *boss-hud* array) +;; (define-extern *boss-hud-proc* object) +;; (define-extern spawn-boss-hud function) +;; (define-extern *boss-battle-continue-busy* object) +;; (define-extern boss-battle-continue function) +;; (define-extern boss-battle-task function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-sabotage ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sabotage-sequence (process) + ((net-player uint64 :offset-assert 144) + (vehicle uint64 :offset-assert 152) + (fire-tracker uint64 :offset-assert 160) + (shoot basic :offset-assert 168) + (explode basic :offset-assert 172) + (event-time uint64 :offset-assert 176) + (text-time uint64 :offset-assert 184) + (suppress-text basic :offset-assert 192) + ) + :method-count-assert 17 + :size-assert #xc4 + :flag-assert #x11004000c4 + (:methods + (sabotage-sequence-method-9 () none) ;; 9 + (sabotage-sequence-method-10 () none) ;; 10 + (sabotage-sequence-method-11 () none) ;; 11 + (sabotage-sequence-method-12 () none) ;; 12 + (sabotage-sequence-method-13 () none) ;; 13 + (sabotage-sequence-method-14 () none) ;; 14 + (sabotage-sequence-method-16 () none) ;; 16 + ) + (:state-methods + idle ;; 15 + ) + ) +|# + +;; (define-extern sabotage-sequence-trans function) +;; (define-extern sabotage-sequence-init-by-other function) +;; (define-extern sabotage-sequence-start function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-oneoff ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hoff-text-floater (process) + ((screen-from vector :inline :offset-assert 144) + (float-rate float :offset-assert 160) + (duration uint64 :offset-assert 168) + (state-time uint64 :offset-assert 176) + (context basic :offset-assert 184) + (text basic :offset-assert 188) + ) + :method-count-assert 16 + :size-assert #xc0 + :flag-assert #x10003000c0 + (:methods + (hoff-text-floater-method-9 () none) ;; 9 + (hoff-text-floater-method-10 () none) ;; 10 + (hoff-text-floater-method-11 () none) ;; 11 + (hoff-text-floater-method-12 () none) ;; 12 + (hoff-text-floater-method-13 () none) ;; 13 + (hoff-text-floater-method-14 () none) ;; 14 + ) + (:state-methods + run ;; 15 + ) + ) +|# + +#| +(deftype hoff-text-floater-init-params (structure) + ((world-from vector :inline :offset-assert 0) + (float-rate float :offset-assert 16) + (duration uint32 :offset-assert 20) + (in-view int32 :offset-assert 24) + (in-static-string basic :offset-assert 28) + (alloc-string-length uint8 :offset-assert 32) + (color uint8 :offset-assert 33) + (scale float :offset-assert 36) + (flags uint16 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2a + :flag-assert #x90000002a + ) +|# + +;; (define-extern hoff-text-floater-init-by-other function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-deathmatch ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype spawn-point (process) + ((name basic :offset-assert 0) + (mask process-mask :offset-assert 4) + (clock basic :offset-assert 8) + (view basic :offset-assert 12) + (parent uint32 :offset-assert 16) + (brother uint32 :offset-assert 20) + (child uint32 :offset-assert 24) + (ppointer uint32 :offset-assert 28) + (self basic :offset-assert 32) + (profile-ticks uint32 :offset-assert 36) + (pool basic :offset-assert 40) + (status basic :offset-assert 44) + (pid int32 :offset-assert 48) + (main-thread basic :offset-assert 52) + (top-thread basic :offset-assert 56) + (entity basic :offset-assert 60) + (level basic :offset-assert 64) + (state basic :offset-assert 68) + (prev-state basic :offset-assert 72) + (next-state basic :offset-assert 76) + (state-stack basic :offset-assert 80) + (trans-hook basic :offset-assert 84) + (post-hook basic :offset-assert 88) + (event-hook basic :offset-assert 92) + (allocated-length int32 :offset-assert 96) + (heap-base uint32 :offset-assert 108) + (heap-top uint32 :offset-assert 112) + (heap-cur uint32 :offset-assert 116) + (stack-frame-top basic :offset-assert 120) + (heap kheap :inline :offset-assert 108) + (connection-list connectable :inline :offset-assert 124) + (stack UNKNOWN :dynamic :offset-assert 140) + ) + :method-count-assert 15 + :size-assert #x90 + :flag-assert #xf00000090 + (:methods + (spawn-point-method-9 () none) ;; 9 + (spawn-point-method-10 () none) ;; 10 + (spawn-point-method-11 () none) ;; 11 + (spawn-point-method-12 () none) ;; 12 + (spawn-point-method-13 () none) ;; 13 + (spawn-point-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype hud-deathmatch-single (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathmatch-split-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathmatch-split-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathmatch-score-drop-view-10 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathmatch-score-drop-view-11 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathmatch-score-drop-view-20 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-deathmatch-score-drop-view-21 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-deathmatch-single* array) +;; (define-extern *hud-deathmatch-single-proc* object) +;; (define-extern spawn-hud-deathmatch-single function) +;; (define-extern *hud-deathmatch-split-view-0* array) +;; (define-extern *hud-deathmatch-split-view-0-proc* object) +;; (define-extern spawn-hud-deathmatch-split-view-0 function) +;; (define-extern *hud-deathmatch-split-view-1* array) +;; (define-extern *hud-deathmatch-split-view-1-proc* object) +;; (define-extern spawn-hud-deathmatch-split-view-1 function) +;; (define-extern spawn-hud-deathmatch-split function) +;; (define-extern *hud-deathmatch-score-drop-view-10* array) +;; (define-extern *hud-deathmatch-score-drop-view-10-proc* object) +;; (define-extern spawn-hud-deathmatch-score-drop-view-10 function) +;; (define-extern *hud-deathmatch-score-drop-view-11* array) +;; (define-extern *hud-deathmatch-score-drop-view-11-proc* object) +;; (define-extern spawn-hud-deathmatch-score-drop-view-11 function) +;; (define-extern spawn-unused-hud-deathmatch-score-drop-view-1 function) +;; (define-extern *hud-deathmatch-score-drop-view-20* array) +;; (define-extern *hud-deathmatch-score-drop-view-20-proc* object) +;; (define-extern spawn-hud-deathmatch-score-drop-view-20 function) +;; (define-extern *hud-deathmatch-score-drop-view-21* array) +;; (define-extern *hud-deathmatch-score-drop-view-21-proc* object) +;; (define-extern spawn-hud-deathmatch-score-drop-view-21 function) +;; (define-extern spawn-unused-hud-deathmatch-score-drop-view-2 function) +;; (define-extern spawn-hud-deathmatch-score-drop function) +;; (define-extern spawn-hud-deathmatch function) +;; (define-extern get-best-defensive-powerup function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-assassin ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-hud-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype fx-struct (structure) + ((offset-x int32 :offset-assert 0) + (offset-y int32 :offset-assert 4) + (scale-x basic :offset-assert 8) + (scale-y basic :offset-assert 12) + (alpha basic :offset-assert 16) + (angle basic :offset-assert 20) + (total-time uint32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype hud-vehicle (hud) + ((weapon-texture UNKNOWN 49 :offset-assert 6364) + (gun-texture basic :offset-assert 6364) + (missile-texture basic :offset-assert 6368) + (grenade-texture basic :offset-assert 6372) + (taserram-texture basic :offset-assert 6376) + (mine-texture basic :offset-assert 6380) + (shield-texture basic :offset-assert 6384) + (target-texture UNKNOWN 2 :offset-assert 6560) + (slot-roulette-active? UNKNOWN 2 :offset-assert 6568) + (button-out? UNKNOWN 2 :offset-assert 6576) + (weapon-picked? UNKNOWN 2 :offset-assert 6584) + (slot-roulette-start-time UNKNOWN 2 :offset-assert 6592) + (roulette-counter UNKNOWN 2 :offset-assert 6600) + (weapon-color UNKNOWN 2 :offset-assert 6608) + (selected-weapon UNKNOWN 2 :offset-assert 6610) + (powerup-level int32 :offset-assert 6612) + (last-light-level int8 :offset-assert 6616) + (light-bar-part-right-init basic :offset-assert 6620) + (light-bar-part-right-filled basic :offset-assert 6624) + (light-bar-part-left-init basic :offset-assert 6628) + (light-bar-part-left-filled basic :offset-assert 6632) + (current-light-eco float :offset-assert 6636) + (current-green-eco float :offset-assert 6640) + (current-blue-eco float :offset-assert 6644) + (slot-weapon-color UNKNOWN 2 :offset-assert 6648) + (incoming? basic :offset-assert 6652) + (light-eco-level float :offset-assert 6656) + (light-eco-level-fx-start-time uint32 :offset-assert 6660) + (split-screen-offset-left-x float :offset-assert 6664) + (split-screen-offset-right-x float :offset-assert 6668) + (split-screen-offset-y float :offset-assert 6672) + (hud-right-ammo-counter-1 hud-sprite :inline :offset-assert 3056) + (hud-right-ammo-counter-2 hud-sprite :inline :offset-assert 3120) + (hud-right-light-underlay hud-sprite :inline :offset-assert 3184) + (hud-right-light-ctrl-1 hud-sprite :inline :offset-assert 3248) + (hud-right-light-ctrl-2 hud-sprite :inline :offset-assert 3312) + (hud-right-light-ctrl-3 hud-sprite :inline :offset-assert 3376) + (hud-right-light-bar hud-sprite :inline :offset-assert 3440) + (hud-right-turbo-underlay hud-sprite :inline :offset-assert 3504) + (hud-right-turbo-ctrl-1 hud-sprite :inline :offset-assert 3568) + (hud-right-turbo-ctrl-2 hud-sprite :inline :offset-assert 3632) + (hud-right-turbo-bar hud-sprite :inline :offset-assert 3696) + (hud-right-display-weapon-field hud-sprite :inline :offset-assert 3760) + (hud-right-upper-left hud-sprite :inline :offset-assert 3824) + (hud-right-upper-right hud-sprite :inline :offset-assert 3888) + (hud-right-lower-right hud-sprite :inline :offset-assert 3952) + (hud-right-lower-left hud-sprite :inline :offset-assert 4016) + (hud-right-ammo-counter-overlay hud-sprite :inline :offset-assert 4080) + (hud-right-ammo-counter-overlay-2 hud-sprite :inline :offset-assert 4144) + (hud-right-weapon-icon-shadow hud-sprite :inline :offset-assert 4208) + (hud-right-weapon-icon hud-sprite :inline :offset-assert 4272) + (hud-right-display-shine hud-sprite :inline :offset-assert 4336) + (hud-left-ammo-counter-1 hud-sprite :inline :offset-assert 4400) + (hud-left-ammo-counter-2 hud-sprite :inline :offset-assert 4464) + (hud-left-light-underlay hud-sprite :inline :offset-assert 4528) + (hud-left-light-ctrl-1 hud-sprite :inline :offset-assert 4592) + (hud-left-light-ctrl-2 hud-sprite :inline :offset-assert 4656) + (hud-left-light-ctrl-3 hud-sprite :inline :offset-assert 4720) + (hud-left-light-bar hud-sprite :inline :offset-assert 4784) + (hud-left-health-underlay hud-sprite :inline :offset-assert 4848) + (hud-left-health-ctrl-1 hud-sprite :inline :offset-assert 4912) + (hud-left-health-ctrl-2 hud-sprite :inline :offset-assert 4976) + (hud-left-health-bar hud-sprite :inline :offset-assert 5040) + (hud-left-display-weapon-field hud-sprite :inline :offset-assert 5104) + (hud-left-upper-left hud-sprite :inline :offset-assert 5168) + (hud-left-upper-right hud-sprite :inline :offset-assert 5232) + (hud-left-lower-left hud-sprite :inline :offset-assert 5296) + (hud-left-lower-right hud-sprite :inline :offset-assert 5360) + (hud-left-ammo-counter-overlay hud-sprite :inline :offset-assert 5424) + (hud-left-ammo-counter-overlay-2 hud-sprite :inline :offset-assert 5488) + (hud-left-weapon-icon-shadow hud-sprite :inline :offset-assert 5552) + (hud-left-weapon-icon hud-sprite :inline :offset-assert 5616) + (hud-left-display-shine hud-sprite :inline :offset-assert 5680) + (hud-turbo-disabled hud-sprite :inline :offset-assert 5744) + ) + :method-count-assert 40 + :size-assert #x1a14 + :flag-assert #x2819901a14 + (:methods + (hud-vehicle-method-30 () none) ;; 30 + (hud-vehicle-method-31 () none) ;; 31 + (hud-vehicle-method-32 () none) ;; 32 + (hud-vehicle-method-33 () none) ;; 33 + (hud-vehicle-method-34 () none) ;; 34 + (hud-vehicle-method-35 () none) ;; 35 + (hud-vehicle-method-36 () none) ;; 36 + (hud-vehicle-method-37 () none) ;; 37 + (hud-vehicle-method-38 () none) ;; 38 + (hud-vehicle-method-39 () none) ;; 39 + ) + ) +|# + +;; (define-extern *default-fast-curve* curve2d-fast) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-hud ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-vehicle-large-bar (hud-item-group) + ((u float :offset-assert 44) + (angle float :offset-assert 48) + (side uint64 :offset-assert 56) + ) + :method-count-assert 25 + :size-assert #x40 + :flag-assert #x1900000040 + (:methods + (hud-vehicle-large-bar-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-vehicle-eco-bar (hud-item-group) + ((u float :offset-assert 44) + (angle float :offset-assert 48) + (side uint64 :offset-assert 56) + (part-filled basic :offset-assert 64) + (part-init basic :offset-assert 68) + ) + :method-count-assert 26 + :size-assert #x48 + :flag-assert #x1a00000048 + (:methods + (hud-vehicle-eco-bar-method-24 () none) ;; 24 + (hud-vehicle-eco-bar-method-25 () none) ;; 25 + ) + ) +|# + +#| +(deftype hud-vehicle-ammo (hud-item-group) + ((side uint64 :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x38 + :flag-assert #x1800000038 + ) +|# + +#| +(deftype hud-weapon-field (hud-item-group) + ((side uint64 :offset-assert 48) + (spinning basic :offset-assert 56) + (next-change-time int32 :offset-assert 60) + (weapon-selection uint8 :offset-assert 64) + (powerup-level int32 :offset-assert 68) + (overdraw-number int32 :offset-assert 72) + (yellow-back basic :offset-assert 76) + (neutral-back basic :offset-assert 80) + (red-back basic :offset-assert 84) + (hud-transparent-01 basic :offset-assert 88) + (hud-w-peashooter-01 basic :offset-assert 92) + (hud-w-leadfoot-01 basic :offset-assert 96) + (hud-w-chain-gun-01 basic :offset-assert 100) + (hud-w-coil-gun-01 basic :offset-assert 104) + (hud-w-tracking-missile-double-01 basic :offset-assert 108) + (hud-w-tracking-missile-quad-01 basic :offset-assert 112) + (hud-w-skullsplitter-01 basic :offset-assert 116) + (hud-w-fragmentation-01 basic :offset-assert 120) + (hud-w-suc-seeker-01 basic :offset-assert 124) + (hud-w-sup-suc-seeker-01 basic :offset-assert 128) + (hud-w-chickendrone-01 basic :offset-assert 132) + (hud-w-homing-drone-01 basic :offset-assert 136) + (hud-w-mine-magna-01 basic :offset-assert 140) + (hud-w-mine-01 basic :offset-assert 144) + (hud-w-smokescreen-01 basic :offset-assert 148) + (hud-w-pcell-01 basic :offset-assert 152) + (hud-w-smokescreen-electric-01 basic :offset-assert 156) + (hud-w-oilslick-01 basic :offset-assert 160) + (hud-w-stelnova-01 basic :offset-assert 164) + (hud-w-firewall-01 basic :offset-assert 168) + (hud-w-angrybot-01 basic :offset-assert 172) + (hud-w-dumbbot-01 basic :offset-assert 176) + (hud-w-turbozap-01 basic :offset-assert 180) + (hud-w-ultraturbo-01 basic :offset-assert 184) + (hud-w-lilbuddy-01 basic :offset-assert 188) + (hud-w-demondrone-01 basic :offset-assert 192) + (hud-w-shield-deflexor-01 basic :offset-assert 196) + (hud-w-shield-deathtouch-01 basic :offset-assert 200) + (hud-w-earthshaker-01 basic :offset-assert 204) + (hud-w-stelnova-01 basic :offset-assert 164) + (hud-w-clone-car-01 basic :offset-assert 212) + ) + :method-count-assert 25 + :size-assert #xd8 + :flag-assert #x19000000d8 + (:methods + (hud-weapon-field-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-vehicle-left (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-vehicle-right (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype vehicle-hud-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype vehicle-hud-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *vehicle-hud-view-0* array) +;; (define-extern *vehicle-hud-view-0-proc* object) +;; (define-extern spawn-vehicle-hud-view-0 function) +;; (define-extern *vehicle-hud-view-1* array) +;; (define-extern *vehicle-hud-view-1-proc* object) +;; (define-extern spawn-vehicle-hud-view-1 function) +;; (define-extern spawn-vehicle-hud function) +;; (define-extern kill-vehicle-hud function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-widgets-powerhang ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-item-power-slide-distance-tenths (hud-item-string) + ((distance float :offset-assert 60) + ) + :method-count-assert 29 + :size-assert #x40 + :flag-assert #x1d00000040 + ) +|# + +#| +(deftype hud-item-power-slide-distance (hud-item-string) + ((distance float :offset-assert 60) + ) + :method-count-assert 29 + :size-assert #x40 + :flag-assert #x1d00000040 + ) +|# + +#| +(deftype power-slide-hud-single (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-item-hang-time-tenths-seconds (hud-item-string) + ((seconds float :offset-assert 60) + ) + :method-count-assert 29 + :size-assert #x40 + :flag-assert #x1d00000040 + ) +|# + +#| +(deftype hud-item-hang-time-seconds (hud-item-string) + ((seconds float :offset-assert 60) + ) + :method-count-assert 29 + :size-assert #x40 + :flag-assert #x1d00000040 + ) +|# + +#| +(deftype hang-time-hud-single (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *power-slide-hud-single* array) +;; (define-extern *power-slide-hud-single-proc* object) +;; (define-extern spawn-power-slide-hud-single function) +;; (define-extern *hang-time-hud-single* array) +;; (define-extern *hang-time-hud-single-proc* object) +;; (define-extern spawn-hang-time-hud-single function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-wheel ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-wheel-init-params (structure) + ((vehicle basic :offset-assert 0) + (skel skeleton-group :offset-assert 4) ;; guessed by decompiler + (level symbol :offset-assert 8) ;; guessed by decompiler + (radius float :offset-assert 12) + (position vector :inline :offset-assert 16) + (rotation quaternion :inline :offset-assert 32) + (scale vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype vehicle-wheel (rigid-body-object) + ((camera-dist float :offset-assert 288) + ) + :method-count-assert 93 + :size-assert #x124 + :flag-assert #x5d00a00124 + (:methods + (vehicle-wheel-method-92 () none) ;; 92 + ) + (:state-methods + idle ;; 59 + die ;; 91 + explode ;; 89 + fade-out ;; 90 + ) + ) +|# + +;; (define-extern *vehicle-wheel-constants* object) ;; rigid-body-object-constants +;; (define-extern vehicle-wheel-init-by-other function) ;; (function vehicle-wheel-init-params object :behavior vehicle-wheel) +;; (define-extern vehicle-wheel-spawn function) ;; (function process vehicle-wheel-init-params vehicle-wheel) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern birth-func-set-pos-vel function) +;; (define-extern birth-func-adopt-velocity-vehicle function) +;; (define-extern sparticle-adopt-accel-vehicle function) +;; (define-extern *range-carexplo-dust-color* curve-color-fast) +;; (define-extern *range-carexplo-dust-alpha* curve2d-fast) +;; (define-extern *range-carexplo-dust-scale-x* curve2d-fast) +;; (define-extern *range-carexplo-dust-scale-y* curve2d-fast) +;; (define-extern *curve-carexplo-dust-alpha* curve2d-fast) +;; (define-extern *curve-carexplo-dust-scale-x* curve2d-fast) +;; (define-extern *curve-carexplo-dust-scale-y* curve2d-fast) +;; (define-extern *part-car-explosion-dust-in-curve-settings* object) +;; (define-extern *range-carexplo-color* curve-color-fast) +;; (define-extern *range-carexplo-alpha* curve2d-fast) +;; (define-extern *range-carexplo-scale-x* curve2d-fast) +;; (define-extern *range-carexplo-scale-y* curve2d-fast) +;; (define-extern *curve-carexplo-alpha* curve2d-fast) +;; (define-extern *curve-carexplo-scale-x* curve2d-fast) +;; (define-extern *curve-carexplo-scale-y* curve2d-fast) +;; (define-extern *part-car-explosion-texture-curve-settings* object) +;; (define-extern sparticle-motion-blur-dirt function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern spt-birth-func-brightness-buggy-rocks function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern spt-birth-func-part-buggy-rocks function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo object object none) +;; (define-extern spt-birth-func-part-dbuggy-debris function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo object object none) +;; (define-extern spt-birth-func-brightness-buggy-snow function) +;; (define-extern spt-birth-func-part-wv-snow function) +;; (define-extern spt-birth-func-part-wv-grass function) +;; (define-extern *range-wv-wsplash-color* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-wv-wsplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-wv-wsplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-wv-wsplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wv-wsplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wv-wsplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wv-wsplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-wv-water-splash-curve-settings* object) ;; particle-curve-settings + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern birth-func-explosion-adopt-velocity function) +;; (define-extern birth-func-explosion-aligned-velocity function) +;; (define-extern birth-func-vws-adopt-velocity function) +;; (define-extern spt-birth-func-brightness-oil function) +;; (define-extern spt-func-part-oil-emit function) +;; (define-extern spt-func-part-oil-emit-sparkle function) +;; (define-extern check-scorp-shell-level1 function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-scorp-shell-level2 function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern *curve-toad-linear-up-red* object) ;; curve2d-piecewise +;; (define-extern *trail-color-curve-grenade-yellow* curve-color-fast) +;; (define-extern *curve-grenade-linear-toad-trail* curve2d-fast) ;; curve2d-fast +;; (define-extern *grenade-1-trail* object) +;; (define-extern *trail-color-curve-grenade-purple* curve-color-fast) +;; (define-extern *grenade-2-trail* object) +;; (define-extern *curve-yellow-tracker-linear-up-red* object) +;; (define-extern *trail-color-curve-yellow-tracker-grenade* curve-color-fast) +;; (define-extern *trail-color-curve-red-mine* curve-color-fast) +;; (define-extern *curve-yellow-tracker-linear-trail* curve2d-fast) +;; (define-extern *yellow-tracking-rocket-trail* object) +;; (define-extern *curve-missile-linear-up* curve2d-fast) +;; (define-extern *trail-color-curve-car-missile* curve-color-fast) +;; (define-extern *trail-color-curve-car-missile-II* curve-color-fast) +;; (define-extern *curve-missile-trail-width* curve2d-fast) +;; (define-extern *car-missile-trail* object) +;; (define-extern *car-missile-trail-II* object) +;; (define-extern *trail-color-curve-success-seeker* curve-color-fast) +;; (define-extern *success-seeker-trail* object) +;; (define-extern *curve-mine-width* object) +;; (define-extern *trail-color-purple-mine* curve-color-fast) +;; (define-extern *trail-color-red-mine* curve-color-fast) +;; (define-extern *mine-trail-red* object) +;; (define-extern *mine-trail-purple* object) +;; (define-extern shield-flash-part-callback function) +;; (define-extern *weapon-drone-glow-template* object) +;; (define-extern *weapon-drone-visor-template* object) +;; (define-extern *wasted-missile-colors* object) +;; (define-extern *wasted-missile-vec* object) +;; (define-extern *wasted-missile-origin?* object) +;; (define-extern birth-func-wasted-missile function) +;; (define-extern birth-func-copy-rotate-z-to-rot-z function) +;; (define-extern spt-birth-func-b-part-turbo-suppressed function) +;; (define-extern spt-func-part-turbo-suppressed function) +;; (define-extern birth-func-adopt-velocity function) +;; (define-extern sparticle-adopt-accel function) +;; (define-extern sparticle-seek-owner function) +;; (define-extern birth-func-dark-eco-bubble function) +;; (define-extern spt-func-bubble-alternate function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wvehicle-wheel-launcher-spec (structure) + ((mat matrix :offset-assert 0) + (particle-system sparticle-system :offset-assert 4) ;; guessed by decompiler + (streak-system basic :offset-assert 8) + (launcher sparticle-launcher :offset-assert 12) ;; guessed by decompiler + (num-spec sp-field-init-spec :offset-assert 16) + (r-spec sp-field-init-spec :offset-assert 20) + (g-spec sp-field-init-spec :offset-assert 24) + (b-spec sp-field-init-spec :offset-assert 28) + (a-spec sp-field-init-spec :offset-assert 32) + (scale-x-spec sp-field-init-spec :offset-assert 36) + (scale-y-spec sp-field-init-spec :offset-assert 40) + (fade-a-spec sp-field-init-spec :offset-assert 44) + (timer-spec sp-field-init-spec :offset-assert 48) + (ptr-part-birth-accum uint32 :offset-assert 52) + (ptr-streak-birth-accum uint32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype wvehicle-part-work (structure) + ((streak spark-launch-params :inline :offset-assert 0) + (local-mat matrix :inline :offset-assert 80) + (world-mat matrix :inline :offset-assert 144) + (velocity vector :inline :offset-assert 208) + (side-dir vector :inline :offset-assert 224) + (up-dir vector :inline :offset-assert 240) + (forward-dir vector :inline :offset-assert 256) + (wheel-axis vector :inline :offset-assert 272) + (surface-pos vector :inline :offset-assert 288) + (part-vel vector :inline :offset-assert 304) + (pos-l vector :inline :offset-assert 320) + (pos-r vector :inline :offset-assert 336) + (offset vector :inline :offset-assert 352) + (zero-offset vector :inline :offset-assert 368) + (prev-pos vector :inline :offset-assert 384) + (cull-plane vector :inline :offset-assert 400) + (cam-velocity vector :inline :offset-assert 416) + (world-pos vector :inline :offset-assert 432) + (dir vector :inline :offset-assert 448) + (rgb rgbaf :inline :offset-assert 464) + (surface-type uint8 :offset-assert 480) + (wheel-rev-speed float :offset-assert 484) + (wheel-speed float :offset-assert 488) + (wheel-radius float :offset-assert 492) + (wheel-width float :offset-assert 496) + (part-num float :offset-assert 500) + (rand-val float :offset-assert 504) + (streak-ratio float :offset-assert 508) + (streak-num float :offset-assert 512) + (streak-color-index uint32 :offset-assert 516) + (duration float :offset-assert 520) + (scale float :offset-assert 524) + (slip float :offset-assert 528) + (up-force float :offset-assert 532) + (alpha float :offset-assert 536) + (alpha-range float :offset-assert 540) + (vel-scale float :offset-assert 544) + (vel-range float :offset-assert 548) + (speed float :offset-assert 552) + (y-accel float :offset-assert 556) + (cur-time uint32 :offset-assert 560) + (ups float :offset-assert 564) + (dirt-launcher wvehicle-wheel-launcher-spec :inline :offset-assert 568) + (dust-launcher wvehicle-wheel-launcher-spec :inline :offset-assert 628) + (spray-launcher wvehicle-wheel-launcher-spec :inline :offset-assert 688) + (ripple-launcher wvehicle-wheel-launcher-spec :inline :offset-assert 748) + (snow-launcher wvehicle-wheel-launcher-spec :inline :offset-assert 808) + (grass-launcher wvehicle-wheel-launcher-spec :inline :offset-assert 868) + (dummy-spec sp-field-init-spec :inline :offset-assert 928) + ) + :method-count-assert 9 + :size-assert #x3b0 + :flag-assert #x9000003b0 + ) +|# + +#| +(deftype tire-trail-crumb (light-trail-breadcrumb) + ((pos vector :inline :offset-assert 0) + (birth-time uint32 :offset-assert 12) + (offset vector :inline :offset-assert 16) + (uu float :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype tire-trail (light-trail) + ((crumb-array (array uint8) :offset-assert 4) ;; guessed by decompiler + (crumb-size uint8 :offset-assert 8) + (crumb-count int16 :offset-assert 10) + (max-crumb-count int16 :offset-assert 12) + (appearance light-trail-composition :offset-assert 16) + (start-marker uint64 :offset-assert 24) + (end-marker uint64 :offset-assert 32) + (decision uint64 :offset-assert 40) ;; light-trail-decision + (total-distance-traveled float :offset-assert 48) + (strip prim-strip :offset-assert 52) ;; guessed by decompiler + (strip2 prim-strip :offset-assert 56) ;; guessed by decompiler + (cache-vector vector 4 :offset-assert 64) ;; guessed by decompiler + ) + :method-count-assert 25 + :size-assert #x80 + :flag-assert #x1900000080 + (:methods + (tire-trail-method-23 () none) ;; 23 ;; (tire-trail-method-23 (_type_ vector vector float) none) + (tire-trail-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype tire-trail-tracker (light-trail-tracker) + () + :method-count-assert 24 + :size-assert #xbc + :flag-assert #x18003000bc + (:methods + (tire-trail-tracker-method-22 () none) ;; 22 + (tire-trail-tracker-method-23 () none) ;; 23 + ) + (:state-methods + tracking ;; 15 + ) + ) +|# + +;; (define-extern *wheel-trail-info* object) ;; light-trail-composition +;; (define-extern tire-trail-tracker-init-by-other function) ;; (function light-trail-tracker-spawn-params object :behavior tire-trail-tracker) +;; (define-extern spawn-tire-trail-tracker function) ;; (function process light-trail-tracker-spawn-params tire-trail-tracker) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-sounds ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wvehicle-sound-loop-params (structure) + ((speed float :offset-assert 0) + (weight float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype wvehicle-sound-work (structure) + ((roll-basis-params wvehicle-sound-loop-params 6 :offset-assert 0) ;; guessed by decompiler + (slide-basis-params wvehicle-sound-loop-params 2 :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype update-engine-mix-state-params (structure) + ((info-array uint32 :offset-assert 0) + (info-count int8 :offset-assert 4) + (sound-select int8 :offset-assert 5) + (rpm float :offset-assert 8) + (volume float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype update-engine-loop-state-work (structure) + ((i-loop int8 :offset-assert 0) + (info vehicle-sound-engine-loop-info :offset-assert 4) + (volume float :offset-assert 8) + (pitch float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype update-engine-mix-state-work (structure) + ((loops UNKNOWN 2 :offset-assert 0) + (xover1 float :offset-assert 32) + (xover2 float :offset-assert 36) + (crossover float :offset-assert 40) + (ups float :offset-assert 44) + (active-loop-count int8 :offset-assert 48) + (i-min int8 :offset-assert 49) + (i-max int8 :offset-assert 50) + ) + :method-count-assert 9 + :size-assert #x33 + :flag-assert #x900000033 + ) +|# + +;; (define-extern update-engine-mix-state function) +;; (define-extern *debug-engine-sound-work* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-reticle ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype reticle-sprite-info (structure) + ((offset-x float :offset-assert 0) + (offset-y float :offset-assert 4) + (tex-id uint32 :offset-assert 8) + (color vector4w :inline :offset-assert 16) + (scale-x float :offset-assert 32) + (scale-y float :offset-assert 36) + (angle float :offset-assert 40) + (flags uint16 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x2e + :flag-assert #x90000002e + ) +|# + +#| +(deftype vehicle-reticle-base (process) + ((owner uint64 :offset-assert 144) + (state-time uint64 :offset-assert 152) + ) + :method-count-assert 15 + :size-assert #xa0 + :flag-assert #xf001000a0 + (:methods + (vehicle-reticle-base-method-9 () none) ;; 9 + (vehicle-reticle-base-method-10 () none) ;; 10 + (vehicle-reticle-base-method-11 () none) ;; 11 + (vehicle-reticle-base-method-12 () none) ;; 12 + (vehicle-reticle-base-method-13 () none) ;; 13 + (vehicle-reticle-base-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype vehicle-reticle-on-me (vehicle-reticle-base) + ((targeted-by uint64 :offset-assert 160) + (hsprites-base UNKNOWN 3 :offset-assert 176) + (hsprites-missinc-static UNKNOWN 2 :offset-assert 368) + (hsprites-missinc-spinner UNKNOWN 1 :offset-assert 496) + (hsprites-missinc-converge UNKNOWN 2 :offset-assert 560) + (hsprites-peacemaker-converge UNKNOWN 4 :offset-assert 688) + (side-parts-kickout float :offset-assert 944) + (missile-by uint64 :offset-assert 952) + (missile-by-last-seen uint64 :offset-assert 960) + (missile-closest-dist float :offset-assert 968) + (lockon-sound uint32 :offset-assert 972) + ) + :method-count-assert 20 + :size-assert #x3d0 + :flag-assert #x14034003d0 + (:state-methods + idle ;; 15 + missile-incoming ;; 16 + missile-incoming-abort ;; 17 + peacemaker-incoming ;; 18 + peacemaker-incoming-abort ;; 19 + ) + ) +|# + +#| +(deftype vehicle-reticle-on-them (vehicle-reticle-base) + ((hsprites UNKNOWN 11 :offset-assert 160) + (spinner-rate uint64 :offset-assert 864) + (lockon-sound uint32 :offset-assert 872) + ) + :method-count-assert 17 + :size-assert #x36c + :flag-assert #x1102e0036c + (:state-methods + idle ;; 15 + vehicle-target ;; 16 + ) + ) +|# + +;; (define-extern reticle-wad-on-me-base array) +;; (define-extern reticle-wad-on-me-missile-static array) +;; (define-extern reticle-wad-on-me-missile-spinner array) +;; (define-extern reticle-wad-on-me-missile-converge array) +;; (define-extern reticle-wad-on-me-peacemaker-converge array) +;; (define-extern reticle-wad-on-him-base array) +;; (define-extern reticle-on-him-spinner object) +;; (define-extern reticle-on-him-color-enemy object) +;; (define-extern reticle-on-him-spinner-color-enemy object) +;; (define-extern reticle-allowed? function) +;; (define-extern vehicle-reticle-base-init-by-other function) +;; (define-extern vehicle-reticle-base-trans function) +;; (define-extern v-reticle-update-missile function) +;; (define-extern vehicle-reticle-on-me-init-by-other function) +;; (define-extern vehicle-reticle-on-me-helper-missile-inc function) +;; (define-extern vehicle-reticle-on-me-helper-peacemaker-inc function) +;; (define-extern vehicle-reticle-on-them-init-by-other function) +;; (define-extern targeting-reticle-for-this-weapon-type? function) +;; (define-extern targeting-reticle-line-of-sight? function) +;; (define-extern draw-reticle-on-them function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *freeze-hangtime* object) +;; (define-extern wv-player-post-move-update function) +;; (define-extern find-nearest-camera function) +;; (define-extern estimate-eng-torque-from-gear function) +;; (define-extern plot-engine-torque-curve function) +;; (define-extern plot-x-with-transform function) +;; (define-extern vehicle-handle->net-player function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-events ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern handle-weapon-removed-event function) +;; (define-extern handle-weapon-moved-event function) +;; (define-extern wv-weapon-pickup-helper function) +;; (define-extern wv-pickup-handler function) +;; (define-extern wv-set-handler function) +;; (define-extern wv-query-handler function) +;; (define-extern wv-go-handler function) +;; (define-extern wv-weapon-handler function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-util ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-respawn-invul (process) + ((vehicle uint64 :offset-assert 144) + ) + :method-count-assert 16 + :size-assert #x98 + :flag-assert #x1000100098 + (:methods + (vehicle-respawn-invul-method-9 () none) ;; 9 + (vehicle-respawn-invul-method-10 () none) ;; 10 + (vehicle-respawn-invul-method-11 () none) ;; 11 + (vehicle-respawn-invul-method-12 () none) ;; 12 + (vehicle-respawn-invul-method-13 () none) ;; 13 + (vehicle-respawn-invul-method-14 () none) ;; 14 + ) + (:state-methods + idle ;; 15 + ) + ) +|# + +#| +(deftype vehicle-suppress-look (process) + ((vehicle uint64 :offset-assert 144) + ) + :method-count-assert 16 + :size-assert #x98 + :flag-assert #x1000100098 + (:methods + (vehicle-suppress-look-method-9 () none) ;; 9 + (vehicle-suppress-look-method-10 () none) ;; 10 + (vehicle-suppress-look-method-11 () none) ;; 11 + (vehicle-suppress-look-method-12 () none) ;; 12 + (vehicle-suppress-look-method-13 () none) ;; 13 + (vehicle-suppress-look-method-14 () none) ;; 14 + ) + (:state-methods + idle ;; 15 + ) + ) +|# + +;; (define-extern whoosh-shake-camera function) +;; (define-extern vehicle-respawn-invul-init-by-other function) +;; (define-extern vehicle-respawn-invul-spawn function) +;; (define-extern vehicle-suppress-look-init-by-other function) +;; (define-extern suppress-look-start function) +;; (define-extern local-space-proc-vehicle-turbo function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-ai ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype spring-tracker (structure) + ((speed float :offset-assert 0) + (spring-constant float :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (spring-tracker-method-9 () none) ;; 9 + ) + ) +|# + +;; (define-extern get-portal-corner-point function) +;; (define-extern consider-attacking function) +;; (define-extern *wvehicle-ai-steering-params* array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-states ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *old-vector* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-physics ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wvehicle-wheel-work (structure) + ((side-dir vector :inline :offset-assert 0) + (forward-dir vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype wvehicle-physics-work (structure) + ((wheel-work-array UNKNOWN 4 :offset-assert 0) + (mat matrix :inline :offset-assert 192) + (force vector :inline :offset-assert 256) + (velocity vector :inline :offset-assert 272) + (vel-dir vector :inline :offset-assert 288) + (world-pos vector :inline :offset-assert 304) + (local-pos vector :inline :offset-assert 320) + (tmp vector :inline :offset-assert 336) + (p-body vector :inline :offset-assert 352) + (axis vector :inline :offset-assert 368) + (ground-pos vector :inline :offset-assert 384) + (forward-dir vector :inline :offset-assert 400) + (side-dir vector :inline :offset-assert 416) + (wheel-axis vector :inline :offset-assert 432) + (wsphere sphere :inline :offset-assert 448) + (vel-len float :offset-assert 464) + (forward-vel float :offset-assert 468) + (friction-coef float :offset-assert 472) + (wheel-radius float :offset-assert 476) + (gravity-mag float :offset-assert 480) + (downforce float :offset-assert 484) + (side-force float :offset-assert 488) + (forward-force float :offset-assert 492) + (max-forward-tire-grip float :offset-assert 496) + (max-side-tire-grip float :offset-assert 500) + (inertia-eff float :offset-assert 504) + (ground-torque float :offset-assert 508) + (braking-torque float :offset-assert 512) + (total-torque float :offset-assert 516) + (limit-braking-torque float :offset-assert 520) + (max-braking-torque float :offset-assert 524) + (traction-factor float :offset-assert 528) + (tire-traction float :offset-assert 532) + (surface-drag float :offset-assert 536) + (cur-time uint32 :offset-assert 540) + ) + :method-count-assert 9 + :size-assert #x220 + :flag-assert #x900000220 + ) +|# + +#| +(deftype wvehicle-probe-work (structure) + ((mat matrix :inline :offset-assert 0) + (world-pos vector :inline :offset-assert 64) + (probe-dir vector :inline :offset-assert 80) + (tmp vector :inline :offset-assert 96) + (ground-normal-sum vector :inline :offset-assert 112) + (probe-uu float :offset-assert 128) + (wheel-radius float :offset-assert 132) + (water-y float :offset-assert 136) + (surface-type uint8 :offset-assert 140) + (surface-depth float :offset-assert 144) + (material uint64 :offset-assert 152) + (cquery collide-query :inline :offset-assert 160) + ) + :method-count-assert 9 + :size-assert #x2bc + :flag-assert #x9000002bc + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-player-indicators ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-health (hud-item-group) + ((health float :offset-assert 44) + ) + :method-count-assert 25 + :size-assert #x30 + :flag-assert #x1900000030 + (:methods + (hud-health-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-indicator (hud-item-group) + ((target uint64 :offset-assert 48) + (target-position vector :inline :offset-assert 64) + (id int32 :offset-assert 80) + (enemy-distance float :offset-assert 84) + (hud-direction-arrow-01 basic :offset-assert 88) + (hud-namebar-shape-01 basic :offset-assert 92) + (offscreen basic :offset-assert 96) + (only-direction-arrows basic :offset-assert 100) + (fade-at-distance basic :offset-assert 104) + (no-direction-indicator basic :offset-assert 108) + (indicator-alpha float :offset-assert 112) + ) + :method-count-assert 27 + :size-assert #x74 + :flag-assert #x1b00000074 + (:methods + (hud-indicator-method-24 () none) ;; 24 + (hud-indicator-method-25 () none) ;; 25 + (hud-indicator-method-26 () none) ;; 26 + ) + ) +|# + +#| +(deftype hud-player-indicators (hud-item-group) + () + :method-count-assert 25 + :size-assert #x2c + :flag-assert #x190000002c + (:methods + (hud-player-indicators-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-artifact-indicators (hud-player-indicators) + () + :method-count-assert 25 + :size-assert #x2c + :flag-assert #x190000002c + ) +|# + +#| +(deftype hud-assassin-indicators (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-player-indicators-view0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-player-indicators-view1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-artifact-indicators-view0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-artifact-indicators-view1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-assassin-indicators-view0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-assassin-indicators-view1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-player-indicators-view0* array) +;; (define-extern *hud-player-indicators-view0-proc* object) +;; (define-extern spawn-hud-player-indicators-view0 function) +;; (define-extern *hud-player-indicators-view1* array) +;; (define-extern *hud-player-indicators-view1-proc* object) +;; (define-extern spawn-hud-player-indicators-view1 function) +;; (define-extern spawn-unused-hud-player-indicators-view function) +;; (define-extern *hud-artifact-indicators-view0* array) +;; (define-extern *hud-artifact-indicators-view0-proc* object) +;; (define-extern spawn-hud-artifact-indicators-view0 function) +;; (define-extern *hud-artifact-indicators-view1* array) +;; (define-extern *hud-artifact-indicators-view1-proc* object) +;; (define-extern spawn-hud-artifact-indicators-view1 function) +;; (define-extern spawn-unused-hud-artifact-indicators-view function) +;; (define-extern *hud-assassin-indicators-view0* array) +;; (define-extern *hud-assassin-indicators-view0-proc* object) +;; (define-extern spawn-hud-assassin-indicators-view0 function) +;; (define-extern *hud-assassin-indicators-view1* array) +;; (define-extern *hud-assassin-indicators-view1-proc* object) +;; (define-extern spawn-hud-assassin-indicators-view1 function) +;; (define-extern spawn-unused-hud-assassin-indicators-view function) +;; (define-extern hud-indicators-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-race ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern check-travel function) +;; (define-extern *previous-angle* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-net ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-projectiles ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-toad-shot (net-projectile) + ((trail-tracker uint64 :offset-assert 568) ;; handle + (blast-radius float :offset-assert 576) + (powerup-level uint8 :offset-assert 580) + (initial-velocity vector :inline :offset-assert 592) + (vehicle-perigee float :offset-assert 608) + ) + :method-count-assert 76 + :size-assert #x264 + :flag-assert #x4c01e00264 + (:methods + (v-toad-shot-method-75 () none) ;; 75 + ) + (:state-methods + impact ;; 52 + die ;; 50 + ) + ) +|# + +;; (define-extern v-toad-shot-init-remote function) +;; (define-extern *msg-map-v-toad-shot* array) +;; (define-extern *net-process-class-info-v-toad-shot* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-proj ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype mine-a (process-focusable) + ((shooter uint64 :offset-assert 256) + (destination-point vector :inline :offset-assert 272) + (destination-rot quaternion :inline :offset-assert 288) + (traj trajectory :inline :offset-assert 304) + (beepy uint32 :offset-assert 344) + (trail-tracker uint64 :offset-assert 352) + (warning basic :offset-assert 360) + ) + :method-count-assert 64 + :size-assert #x16c + :flag-assert #x4000e0016c + (:methods + (mine-a-method-62 () none) ;; 62 + (mine-a-method-63 () none) ;; 63 + ) + (:state-methods + idle ;; 59 + falling ;; 60 + die ;; 61 + ) + ) +|# + +#| +(deftype mine-b (process-focusable) + ((shooter uint64 :offset-assert 256) + (glued-to uint64 :offset-assert 264) + (destination-point vector :inline :offset-assert 272) + (destination-rot quaternion :inline :offset-assert 288) + (traj trajectory :inline :offset-assert 304) + (cached-rp-trans vector :inline :offset-assert 352) + (trail-tracker uint64 :offset-assert 368) + (beepy uint32 :offset-assert 376) + (attach-point int32 :offset-assert 380) + (looseness int32 :offset-assert 384) + (expires-on uint64 :offset-assert 392) + (warning basic :offset-assert 400) + ) + :method-count-assert 67 + :size-assert #x194 + :flag-assert #x4301100194 + (:methods + (mine-b-method-65 () none) ;; 65 + (mine-b-method-66 () none) ;; 66 + ) + (:state-methods + idle ;; 59 + leaping-onto ;; 61 + attached ;; 62 + falling ;; 60 + shake-off ;; 63 + die ;; 64 + ) + ) +|# + +#| +(deftype v-yellow-guided-missile (net-projectile) + ((trail-tracker uint64 :offset-assert 568) + (blast-radius float :offset-assert 576) + (initial-velocity float :offset-assert 580) + (time-of-next-pitch uint64 :offset-assert 584) + (time-strike-standoff int32 :offset-assert 592) + (next-rot quaternion :inline :offset-assert 608) + (previous-target uint64 :offset-assert 624) + (pred net-predictor-simple :inline :offset-assert 640) + (defer-kaboom uint64 :offset-assert 952) + (last-hit uint64 :offset-assert 960) + ) + :method-count-assert 81 + :size-assert #x3c8 + :flag-assert #x51034003c8 + (:methods + (v-yellow-guided-missile-method-78 () none) ;; 78 + (v-yellow-guided-missile-method-79 () none) ;; 79 + (v-yellow-guided-missile-method-80 () none) ;; 80 + ) + (:state-methods + moving ;; 53 + tracking ;; 77 + wild ;; 76 + impact ;; 52 + dissipate ;; 51 + launching ;; 75 + die ;; 50 + ) + ) +|# + +;; (define-extern mine-a-init-remote function) +;; (define-extern *msg-map-mine-a* array) +;; (define-extern *net-process-class-info-mine-a* object) +;; (define-extern mine-a-init-by-other function) +;; (define-extern mine-b-init-remote function) +;; (define-extern *msg-map-mine-b* array) +;; (define-extern *net-process-class-info-mine-b* object) +;; (define-extern mine-b-common-trans function) +;; (define-extern *mine-b-hack* object) +;; (define-extern mine-b-init-by-other function) +;; (define-extern v-yellow-guided-missile-init-remote function) +;; (define-extern *msg-map-v-yellow-guided-missile* array) +;; (define-extern *net-process-class-info-v-yellow-guided-missile* object) +;; (define-extern guided-missile-moving-event-handler function) +;; (define-extern guided-missile-base-trans function) +;; (define-extern v-yellow-defaultgun-hitspang-params object) +;; (define-extern v-wpn-yellow-chaingun-1-hitspang-params object) +;; (define-extern v-wpn-yellow-chaingun-2-hitspang-params object) +;; (define-extern v-wpn-bulldog-hitspang-params object) +;; (define-extern rapid-fire-callback-gun-hitspang function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-oil ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype smoke-particle (structure) + ((pos vector :inline :offset-assert 0) + (vel vector :inline :offset-assert 16) + (size-delta float :offset-assert 28) + (size float :offset-assert 12) + (decay float :offset-assert 32) + (rot float :offset-assert 36) + (rot-delta float :offset-assert 40) + (color uint32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype particle-buffer (prim-client) + ((tex-id uint32 :offset-assert 4) + (smoke-part-count int32 :offset-assert 8) + (smoke-parts UNKNOWN 50 :offset-assert 16) + (strip basic :offset-assert 2416) + (single-strip UNKNOWN 3 :offset-assert 2420) + ) + :method-count-assert 14 + :size-assert #x980 + :flag-assert #xe00000980 + (:methods + (particle-buffer-method-10 () none) ;; 10 + (particle-buffer-method-11 () none) ;; 11 + (particle-buffer-method-12 () none) ;; 12 + (particle-buffer-method-13 () none) ;; 13 + ) + ) +|# + +#| +(deftype smoke-system (process-nettable) + ((owning-vehicle uint64 :offset-assert 192) + (part-count float :offset-assert 200) + (emit-rate float :offset-assert 204) + (start-time int32 :offset-assert 208) + (last-pos vector :inline :offset-assert 224) + (buffer basic :offset-assert 240) + (smoke-screen-sound uint32 :offset-assert 244) + (lightning-sound-id uint32 :offset-assert 248) + (last-size float :offset-assert 252) + (damage float :offset-assert 256) + (last-lightning-sphere-pos vector :inline :offset-assert 272) + (part-subsampler basic :offset-assert 288) + (smoke-electric basic :offset-assert 292) + (smoke-matrix matrix :inline :offset-assert 304) + ) + :method-count-assert 44 + :size-assert #x170 + :flag-assert #x2c00e00170 + (:methods + (smoke-system-method-43 () none) ;; 43 + ) + (:state-methods + idle ;; 42 + ) + ) +|# + +#| +(deftype z-index (structure) + ((z float :offset-assert 0) + (index int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype lightning-sphere (process-drawable) + ((last-touched-by uint64 :offset-assert 248) + (start-time int32 :offset-assert 256) + (damage float :offset-assert 260) + (l-control basic :offset-assert 264) + (lightning-time int32 :offset-assert 268) + (start vector :inline :offset-assert 272) + (end vector :inline :offset-assert 288) + (zap-target uint64 :offset-assert 304) + (lightning-on basic :offset-assert 312) + (sound-id uint32 :offset-assert 316) + (owner-handle uint64 :offset-assert 320) + ) + :method-count-assert 51 + :size-assert #x148 + :flag-assert #x3300c00148 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype v-wpn-red-smoke (vehicle-weapon-slot) + ((smoke-system uint64 :offset-assert 264) + (wait-time int32 :offset-assert 272) + ) + :method-count-assert 62 + :size-assert #x114 + :flag-assert #x3e00900114 + (:methods + (v-wpn-red-smoke-method-61 () none) ;; 61 + ) + (:state-methods + idle ;; 50 + wait-delay ;; 60 + ) + ) +|# + +#| +(deftype strip-segment (structure) + ((strip-length int8 :offset-assert 0) + (strip-index int8 :offset-assert 1) + (birth-time int32 :offset-assert 4) + (points UNKNOWN 3 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype oil-trail (prim-client) + ((tex-id uint32 :offset-assert 4) + (segment-count int32 :offset-assert 8) + (last-segment-last-point vector :inline :offset-assert 16) + (last-segment-first-point vector :inline :offset-assert 32) + (segments UNKNOWN 50 :offset-assert 48) + (strip basic :offset-assert 3248) + ) + :method-count-assert 17 + :size-assert #xcb4 + :flag-assert #x1100000cb4 + (:methods + (oil-trail-method-10 () none) ;; 10 + (oil-trail-method-11 () none) ;; 11 + (oil-trail-method-12 () none) ;; 12 + (oil-trail-method-13 () none) ;; 13 + (oil-trail-method-14 () none) ;; 14 + (oil-trail-method-15 () none) ;; 15 + (oil-trail-method-16 () none) ;; 16 + ) + ) +|# + +#| +(deftype slip-object (process-drawable) + ((start-time int32 :offset-assert 248) + (damage float :offset-assert 252) + (fire-sound basic :offset-assert 256) + (owner-handle uint64 :offset-assert 264) + ) + :method-count-assert 51 + :size-assert #x110 + :flag-assert #x3300800110 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype oil-slick (process-drawable) + ((vehicle uint64 :offset-assert 248) + ) + :method-count-assert 51 + :size-assert #x100 + :flag-assert #x3300700100 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype oil-emitter (process) + ((emitting basic :offset-assert 144) + (owning-vehicle uint64 :offset-assert 152) + (oil-trail basic :offset-assert 160) + (last-surface-pos vector :inline :offset-assert 176) + (last-slip-spawn-pos vector :inline :offset-assert 192) + (current-segment strip-segment :inline :offset-assert 208) + (slip-distance-emit float :offset-assert 272) + (state-time int32 :offset-assert 276) + (spill-sound-id uint32 :offset-assert 280) + (damage float :offset-assert 284) + (oil-slick uint64 :offset-assert 288) + ) + :method-count-assert 19 + :size-assert #x128 + :flag-assert #x1300a00128 + (:methods + (oil-emitter-method-9 () none) ;; 9 + (oil-emitter-method-10 () none) ;; 10 + (oil-emitter-method-11 () none) ;; 11 + (oil-emitter-method-12 () none) ;; 12 + (oil-emitter-method-13 () none) ;; 13 + (oil-emitter-method-14 () none) ;; 14 + (oil-emitter-method-16 () none) ;; 16 + (oil-emitter-method-17 () none) ;; 17 + (oil-emitter-method-18 () none) ;; 18 + ) + (:state-methods + emit-oil ;; 15 + ) + ) +|# + +#| +(deftype oil-flame-emitter (oil-emitter) + ((last-flame-spawn-pos vector :inline :offset-assert 304) + (flame-distance-emit float :offset-assert 320) + ) + :method-count-assert 19 + :size-assert #x144 + :flag-assert #x1300c00144 + ) +|# + +#| +(deftype v-wpn-red-oil (vehicle-weapon-slot) + ((oil-emitter uint64 :offset-assert 264) + (wait-time int32 :offset-assert 272) + ) + :method-count-assert 62 + :size-assert #x114 + :flag-assert #x3e00900114 + (:methods + (v-wpn-red-oil-method-61 () none) ;; 61 + ) + (:state-methods + idle ;; 50 + wait-delay ;; 60 + ) + ) +|# + +;; (define-extern smoke-system-local-space function) +;; (define-extern sift-down function) +;; (define-extern heap-sort function) +;; (define-extern clear-strip function) +;; (define-extern lightning-sphere-init-by-other function) +;; (define-extern lightning-sphere-spawn function) +;; (define-extern vector+float*-ignore-w! function) +;; (define-extern smoke-update function) +;; (define-extern smoke-render function) +;; (define-extern smoke-spawn function) +;; (define-extern smoke-system-init-by-other function) +;; (define-extern smoke-system-spawn function) +;; (define-extern slip-object-init-by-other function) +;; (define-extern slip-object-spawn function) +;; (define-extern oil-slick-init-by-other function) +;; (define-extern oil-slick-spawn function) +;; (define-extern oil-trail-emit function) +;; (define-extern oil-emitter-init-by-other function) +;; (define-extern oil-emitter-spawn function) +;; (define-extern oil-flame-emitter-init-by-other function) +;; (define-extern oil-flame-emitter-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype muzzle-flash (process-drawable) + ((glued-to uint64 :offset-assert 248) + (glued-joint int32 :offset-assert 256) + (local-rotation quaternion :inline :offset-assert 272) + ) + :method-count-assert 52 + :size-assert #x120 + :flag-assert #x3400900120 + (:state-methods + idle ;; 51 + lit ;; 50 + ) + ) +|# + +#| +(deftype v-wpn-yellow-chain-gun (vehicle-weapon-slot) + ((last-fire-event uint64 :offset-assert 264) + (firecontrol basic :offset-assert 272) + (blam uint32 :offset-assert 276) + ) + :method-count-assert 61 + :size-assert #x118 + :flag-assert #x3d00900118 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +#| +(deftype v-wpn-yellow-default-gun (vehicle-weapon-slot) + ((last-fire-event uint64 :offset-assert 264) + (firecontrol basic :offset-assert 272) + (blam uint32 :offset-assert 276) + ) + :method-count-assert 61 + :size-assert #x118 + :flag-assert #x3d00900118 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +#| +(deftype v-wpn-yellow-grenade (vehicle-weapon-slot) + ((next-shot-allowed uint64 :offset-assert 264) + (next-to-fire uint8 :offset-assert 272) + ) + :method-count-assert 60 + :size-assert #x111 + :flag-assert #x3c00900111 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype v-wpn-yellow-guided-missile (vehicle-weapon-slot) + ((next-shot-allowed uint64 :offset-assert 264) + (next-to-fire uint8 :offset-assert 272) + (targ-list UNKNOWN 4 :offset-assert 280) + (run-targeting-this-frame int8 :offset-assert 312) + ) + :method-count-assert 61 + :size-assert #x139 + :flag-assert #x3d00b00139 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +#| +(deftype v-wpn-yellow-seismic-blaster (vehicle-weapon-slot) + ((fire-at uint32 :offset-assert 264) + (on-hud-indic int8 :offset-assert 268) + ) + :method-count-assert 62 + :size-assert #x10d + :flag-assert #x3e0080010d + (:state-methods + idle ;; 50 + firing ;; 60 + backfiring ;; 61 + ) + ) +|# + +;; (define-extern vws-focus-search-base function) +;; (define-extern gunmount-common-trans function) +;; (define-extern gunmount-common-post function) +;; (define-extern gunmount-drawable-init-by-other function) +;; (define-extern gunmount-event-handler function) +;; (define-extern muzzle-flash-event-handler function) +;; (define-extern muzzle-flash-init-by-other function) +;; (define-extern gunmount-get-change-anim function) +;; (define-extern gunmount-generic-event-handler function) +;; (define-extern v-wpn-yellow-chain-gun-I-rapid-fire-control-params object) +;; (define-extern v-wpn-yellow-chain-gun-II-rapid-fire-control-params object) +;; (define-extern hack-sparticle-track-gun function) +;; (define-extern v-wpn-yellow-default-gun-rapid-fire-control-params object) +;; (define-extern v-wpn-yellow-guided-missile-init-remote function) +;; (define-extern *msg-map-v-wpn-yellow-guided-missile* array) +;; (define-extern *net-process-class-info-v-wpn-yellow-guided-missile* object) +;; (define-extern guided-missile-gen-proj-no-targ-helper function) +;; (define-extern guided-missile-gen-proj-targ-helper function) +;; (define-extern seismic-blaster-affects-player? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-aux ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype red-sentry-bot (process-focusable) + ((destination-point vector :inline :offset-assert 256) + (destination-rot quaternion :inline :offset-assert 272) + (traj trajectory :inline :offset-assert 288) + (next-target-poll uint64 :offset-assert 328) + (targ-handle uint64 :offset-assert 336) + (yaw float :offset-assert 344) + (pitch float :offset-assert 348) + (expire-at int32 :offset-assert 352) + (hitpoints float :offset-assert 356) + (hitpoints-last float :offset-assert 360) + (hitpoints-prev-msg-time uint64 :offset-assert 368) + (flash UNKNOWN 2 :offset-assert 376) + (last-fired uint64 :offset-assert 392) + (gun-loop uint32 :offset-assert 400) + (warning basic :offset-assert 404) + (firecontrol basic :offset-assert 408) + (ammo int16 :offset-assert 412) + (powerup-level uint8 :offset-assert 414) + (shooter-id int8 :offset-assert 415) + ) + :method-count-assert 67 + :size-assert #x1a0 + :flag-assert #x43011001a0 + (:methods + (red-sentry-bot-method-64 () none) ;; 64 + (red-sentry-bot-method-65 () none) ;; 65 + (red-sentry-bot-method-66 () none) ;; 66 + ) + (:state-methods + falling ;; 59 + idle ;; 60 + firing ;; 61 + firing-missiles ;; 62 + die ;; 63 + ) + ) +|# + +;; (define-extern red-sentry-bot-init-remote function) +;; (define-extern *msg-map-red-sentry-bot* array) +;; (define-extern *net-process-class-info-red-sentry-bot* object) +;; (define-extern v-wpn-sentrybot-rapid-fire-control-params object) +;; (define-extern sentrybot-poke-yaw! function) +;; (define-extern sentrybot-poke-pitch! function) +;; (define-extern red-sentry-bot-init-by-other function) +;; (define-extern red-sentry-bot-common-trans function) +;; (define-extern red-sentry-bot-poll-target function) +;; (define-extern sentry-bot-base-handler function) +;; (define-extern v-wpn-yellow-bulldog-rapid-fire-control-params object) +;; (define-extern v-wpn-yellow-bulldog-II-rapid-fire-control-params object) +;; (define-extern drone-compute-pos! function) +;; (define-extern drone-trans-set-pos function) +;; (define-extern drone-trans-twitchy-rot function) +;; (define-extern drone-trans-rot-at-target function) +;; (define-extern drone-base-post function) +;; (define-extern vehicle-weapon-drone-init-by-other function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-wpn-red-turbo-preventor (vehicle-weapon-slot) + ((sound-id uint32 :offset-assert 264) + (player-id int8 :offset-assert 268) + (snd-loop uint32 :offset-assert 272) + ) + :method-count-assert 61 + :size-assert #x114 + :flag-assert #x3d00900114 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +#| +(deftype v-wpn-red-mine-launcher (vehicle-weapon-slot) + ((salvo-count uint8 :offset-assert 261) + (last-fired uint64 :offset-assert 264) + ) + :method-count-assert 61 + :size-assert #x110 + :flag-assert #x3d00800110 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +#| +(deftype v-wpn-red-sentry-gun (vehicle-weapon-slot) + () + :method-count-assert 60 + :size-assert #x105 + :flag-assert #x3c00800105 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype v-wpn-red-drone-gun (vehicle-weapon-slot) + () + :method-count-assert 61 + :size-assert #x105 + :flag-assert #x3d00800105 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +;; (define-extern mine-compute-landing-point! function) +;; (define-extern spawn-mine function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons3 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-wpn-purple-shield (vehicle-weapon-slot) + ((mysound uint32 :offset-assert 264) + (zap-interval uint64 :offset-assert 272) + (jiggle-start uint64 :offset-assert 280) + (jiggle-amplitude float :offset-assert 288) + ) + :method-count-assert 61 + :size-assert #x124 + :flag-assert #x3d00a00124 + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +#| +(deftype v-wpn-red-tractor-beam (vehicle-weapon-slot) + ((firing-at uint64 :offset-assert 264) + (duration-left int32 :offset-assert 272) + (using-side uint8 :offset-assert 276) + (part-on-me basic :offset-assert 224) + (part-on-target basic :offset-assert 280) + ) + :method-count-assert 61 + :size-assert #x11c + :flag-assert #x3d0090011c + (:state-methods + idle ;; 50 + firing ;; 60 + ) + ) +|# + +;; (define-extern shield-jiggle-scale! function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-util ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern v-wpn-base-init-by-other function) +;; (define-extern warning-hud-draw function) +;; (define-extern v-wpn-type->color function) +;; (define-extern v-wpn-type->gunmount-config function) +;; (define-extern v-wpn-missile-init-by-other function) +;; (define-extern make-vehicle-weapon-slot function) +;; (define-extern v-wpn-choose-increasing-lethality function) +;; (define-extern v-wpn-get-mask function) +;; (define-extern v-wpn-num-available function) +;; (define-extern v-wpn-choose-random function) +;; (define-extern v-wpn-get-available-types function) +;; (define-extern race-player-behind-more-than function) +;; (define-extern v-wpn-get-selection-table function) +;; (define-extern v-wpn-mask-selection-table! function) +;; (define-extern v-wpn-pack-msg function) +;; (define-extern v-wpn-unpack-msg! function) +;; (define-extern vehicle-get-weapon-level function) +;; (define-extern global-turbo-suppressor-set! function) +;; (define-extern should-suppress-eco? function) +;; (define-extern rapid-fire-control-emitter-from-world function) +;; (define-extern rapid-fire-control-initialize-from-vehicle function) +;; (define-extern is-friendly-fire-helper function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-skel ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *wcar-explosion-info* vehicle-explosion-info) ;; vehicle-explosion-info +;; (define-extern *v-mongoose-constants* object) +;; (define-extern *v-falcon-constants* object) +;; (define-extern *v-wombat-constants* object) +;; (define-extern *v-possum-constants* object) +;; (define-extern *v-bobcat-constants* object) +;; (define-extern *v-cougar-constants* object) +;; (define-extern *v-wolf-constants* object) +;; (define-extern *v-bear-constants* object) +;; (define-extern *v-leopard-constants* object) +;; (define-extern *v-panther-constants* object) +;; (define-extern *v-tiger-constants* object) +;; (define-extern *v-cheetah-constants* object) +;; (define-extern *v-gila-constants* object) +;; (define-extern *v-snake-constants* object) ;; rigid-body-vehicle-constants +;; (define-extern *v-daxtermobile-constants* object) +;; (define-extern *v-drone-constants* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-antenna ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype joint-mod-set-rot-local (joint-mod-base) + ((flags uint16 :offset-assert 0) + (node-index int16 :offset-assert 2) + (proc uint32 :offset-assert 4) + (callback basic :offset-assert 8) + (rotation quaternion :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x20 + :flag-assert #xc00000020 + ) +|# + +#| +(deftype vehicle-antenna-state (structure) + ((data UNKNOWN 6 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) +|# + +#| +(deftype vehicle-antenna (process-drawable) + ((vehicle uint64 :offset-assert 248) + (attach-local-pos vector :inline :offset-assert 256) + (attach-rot quaternion :inline :offset-assert 272) + (jmod-antenna UNKNOWN 4 :offset-assert 288) + (jmod-tail joint-mod-set-rot-local :inline :offset-assert 416) + (sim-state vehicle-antenna-state :inline :offset-assert 448) + (ant-tip-pos vector :inline :offset-assert 448) + (ant-tip-vel vector :inline :offset-assert 464) + (spring-pos vector :inline :offset-assert 480) + (spring-vel vector :inline :offset-assert 496) + (tail-pos vector :inline :offset-assert 512) + (tail-vel vector :inline :offset-assert 528) + (i-tip-node int8 :offset-assert 544) + (use-tail? basic :offset-assert 548) + ) + :method-count-assert 55 + :size-assert #x228 + :flag-assert #x3701a00228 + (:methods + (vehicle-antenna-method-52 () none) ;; 52 + (vehicle-antenna-method-53 () none) ;; 53 + (vehicle-antenna-method-54 () none) ;; 54 + ) + (:state-methods + idle ;; 50 + die ;; 51 + ) + ) +|# + +;; (define-extern *vehicle-antenna-state* object) +;; (define-extern vehicle-antenna-init-by-other function) +;; (define-extern vehicle-antenna-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-base ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wcar-base (wvehicle) + ((jmod-shock-tops UNKNOWN 4 :offset-assert 4672) + (jmod-shock-mids UNKNOWN 4 :offset-assert 4800) + ) + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-mongoose ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-mongoose (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-falcon ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-falcon (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-wombat ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-wombat (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-possum ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-possum (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-bobcat ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-bobcat (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-cougar ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-cougar (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-wolf ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-wolf (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-bear ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-bear (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-leopard ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-leopard (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-panther ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-panther (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-tiger ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-tiger (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-cheetah ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-cheetah (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-gila ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-gila (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-snake ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-snake (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-daxtermobile ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-daxtermobile (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drift ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype drive-data (structure) + ((angles vector :inline :offset-assert 0) + (pos vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype drift-editor (process) + ((angles euler-angles :inline :offset-assert 144) + (counter int32 :offset-assert 160) + (editor-start-time uint32 :offset-assert 164) + (all-data-array UNKNOWN 5 :offset-assert 168) + (drive-data-array uint32 :offset-assert 168) + (wheel-front-left-data-array uint32 :offset-assert 172) + (wheel-front-right-data-array uint32 :offset-assert 176) + (wheel-rear-left-data-array uint32 :offset-assert 180) + (wheel-rear-right-data-array uint32 :offset-assert 184) + (release-start-trigger basic :offset-assert 188) + (odd-even int8 :offset-assert 192) + ) + :method-count-assert 19 + :size-assert #xc1 + :flag-assert #x13004000c1 + (:methods + (drift-editor-method-9 () none) ;; 9 + (drift-editor-method-10 () none) ;; 10 + (drift-editor-method-11 () none) ;; 11 + (drift-editor-method-12 () none) ;; 12 + (drift-editor-method-13 () none) ;; 13 + (drift-editor-method-14 () none) ;; 14 + (drift-editor-method-18 () none) ;; 18 + ) + (:state-methods + init-state ;; 15 + run-state ;; 16 + write-file ;; 17 + ) + ) +|# + +;; (define-extern *drift-file-stream* file-stream) +;; (define-extern *drift-editor* object) +;; (define-extern drift-editor-init-by-other function) +;; (define-extern start-drift function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-mesh ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-line ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype race-line-get-points (structure) + ((points UNKNOWN 4 :offset-assert 0) + (index int32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +;; (define-extern test-find-line-info function) +;; (define-extern test-find-closest-point function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-ai-tuning ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type race-ai-tuning-info structure) + +(define-extern *generic-ai-tuning* (array race-ai-tuning-info)) +(define-extern *snow-ai-tuning* (array race-ai-tuning-info)) +(define-extern *kras-ai-tuning* (array race-ai-tuning-info)) +(define-extern *spargus-ai-tuning* (array race-ai-tuning-info)) +(define-extern *jungle-ai-tuning* (array race-ai-tuning-info)) +(define-extern *haven-ai-tuning* (array race-ai-tuning-info)) +(define-extern *sewer-ai-tuning* (array race-ai-tuning-info)) +(define-extern *drome-ai-tuning* (array race-ai-tuning-info)) +(define-extern *dromdoc-ai-tuning* (array race-ai-tuning-info)) +(define-extern *kratour-ai-tuning* (array race-ai-tuning-info)) +(define-extern *havtour-ai-tuning* (array race-ai-tuning-info)) +(define-extern *canyon-ai-tuning* (array race-ai-tuning-info)) +(define-extern *spatour-ai-tuning* (array race-ai-tuning-info)) +(define-extern *docks-ai-tuning* (array race-ai-tuning-info)) +(define-extern *icepass-ai-tuning* (array race-ai-tuning-info)) +(define-extern *havsew-ai-tuning* (array race-ai-tuning-info)) +(define-extern *peak-ai-tuning* (array race-ai-tuning-info)) +(define-extern *icetour-ai-tuning* (array race-ai-tuning-info)) +(define-extern *dockkra-ai-tuning* (array race-ai-tuning-info)) +(define-extern *ice-ai-tuning* (array race-ai-tuning-info)) +(define-extern *temple-ai-tuning* (array race-ai-tuning-info)) +(define-extern *canspar-ai-tuning* (array race-ai-tuning-info)) +(define-extern *havjung-ai-tuning* (array race-ai-tuning-info)) +(define-extern *spartem-ai-tuning* (array race-ai-tuning-info)) +(define-extern *iceberg-ai-tuning* (array race-ai-tuning-info)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; minimap ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype engine-minimap (engine-pers) + ((UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 15 + :size-assert #x20 + :flag-assert #xf00000020 + ) +|# + +;; (define-extern *minimap* object) ;; minimap +;; (define-extern *minimap-class-list* object) ;; (inline-array minimap-class-node) +;; (define-extern lookup-minimap-texture-by-name function) ;; (function string string (pointer texture-page) texture) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jakx-init ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern jakx-login function) +;; (define-extern jakx-activate function) +;; (define-extern jakx-deactivate function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; types-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype basic-reserved (basic) + () + :method-count-assert 29 + :size-assert #x4 + :flag-assert #x1d00000004 + (:methods + (basic-reserved-method-9 () none) ;; 9 ;; (basic-reserved-method-9 () none) + (basic-reserved-method-10 () none) ;; 10 ;; (basic-reserved-method-10 () none) + (basic-reserved-method-11 () none) ;; 11 ;; (basic-reserved-method-11 () none) + (basic-reserved-method-12 () none) ;; 12 ;; (basic-reserved-method-12 () none) + (basic-reserved-method-13 () none) ;; 13 ;; (basic-reserved-method-13 () none) + (basic-reserved-method-14 () none) ;; 14 ;; (basic-reserved-method-14 () none) + (basic-reserved-method-15 () none) ;; 15 ;; (basic-reserved-method-15 () none) + (basic-reserved-method-16 () none) ;; 16 ;; (basic-reserved-method-16 () none) + (basic-reserved-method-17 () none) ;; 17 ;; (basic-reserved-method-17 () none) + (basic-reserved-method-18 () none) ;; 18 ;; (basic-reserved-method-18 () none) + (basic-reserved-method-19 () none) ;; 19 ;; (basic-reserved-method-19 () none) + (basic-reserved-method-20 () none) ;; 20 ;; (basic-reserved-method-20 () none) + (basic-reserved-method-21 () none) ;; 21 ;; (basic-reserved-method-21 () none) + (basic-reserved-method-22 () none) ;; 22 ;; (basic-reserved-method-22 () none) + (basic-reserved-method-23 () none) ;; 23 ;; (basic-reserved-method-23 () none) + (basic-reserved-method-24 () none) ;; 24 ;; (basic-reserved-method-24 () none) + (basic-reserved-method-25 () none) ;; 25 ;; (basic-reserved-method-25 () none) + (basic-reserved-method-26 () none) ;; 26 ;; (basic-reserved-method-26 () none) + (basic-reserved-method-27 () none) ;; 27 ;; (basic-reserved-method-27 () none) + (basic-reserved-method-28 () none) ;; 28 ;; (basic-reserved-method-28 () none) + ) + ) +|# + +;; (deftype part-id (uint32) +;; () +;; :flag-assert #x900000004 +;; ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vu1-macros ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gravity-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bounding-box-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype bounding-box (structure) + ((min vector :inline :offset-assert 0) + (max vector :inline :offset-assert 16) + ) + :method-count-assert 22 + :size-assert #x20 + :flag-assert #x1600000020 + (:methods + (add-spheres! "Add count spheres." (_type_ (inline-array sphere) int) int) ;; 9 + (add-box! "Expand the box as needed to contain the given box." (_type_ bounding-box) int) ;; 10 + (add-point! "Expand the box as needed to contain the given point." (_type_ vector) none) ;; 11 + (intersects-line-segment? + "Check intersection in xz plane, using liang-barsky. Not sure if this actually + a useful check or not..." + (_type_ vector vector) symbol) ;; 12 + (set-from-point-offset! "Set to the smallest box containing arg0, (arg0 + arg1)" (_type_ vector vector) none) ;; 13 + (set-from-point-offset-pad! "Set the box to contain arg0, arg0 + offset, with some padding." (_type_ vector vector float) int) ;; 14 + (set-to-point! "Set the box to be a single point." (_type_ vector) none) ;; 15 + (set-from-sphere! "Set the box to contain a single sphere." (_type_ sphere) none) ;; 16 + (set-from-spheres! + "Reset box to hold the given spheres. + Note: this implementation could be optimized." + (_type_ (inline-array sphere) int) int) ;; 17 + (get-bounding-sphere "Get a bounding sphere for a bounding box." (_type_ vector) vector) ;; 18 + (inside-xyz? "Is the point in the box?" (bounding-box vector) symbol) ;; 19 + (inside-xz? "Is the point in the box? Check xz only." (bounding-box vector) symbol) ;; 20 + (inside-box? "Is the other box contained entirely inside the box?" (bounding-box bounding-box) symbol) ;; 21 + ) + ) + +(deftype bounding-box2 (structure) + ((min vector2 :inline :offset-assert 0) + (max vector2 :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype bounding-box4w (structure) + ((min vector4w :inline :offset-assert 0) + (max vector4w :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype bounding-box-both (structure) + ((box bounding-box :inline :offset-assert 0) + (box4w bounding-box4w :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype bounding-box-array (inline-array-class) + ((data bounding-box :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; matrix-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(deftype matrix (structure) + "A 4x4 matrix, stored in row-major order. + some, but not all, functions assume that a matrix is an affine transform. + others assume that the rotation has no scale or shear (and that its inverse is its transpose)." + ((data float 16 :offset-assert 0 :score -3) ;; guessed by decompiler + (vector vector 4 :offset 0 :score -2) ;; guessed by decompiler + (quad uint128 4 :offset 0 :score -1) ;; guessed by decompiler + (rvec vector :inline :offset 0) + (uvec vector :inline :offset 16) + (fvec vector :inline :offset 32) + (trans vector :inline :offset 48) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (transform-vectors! + "Transform many vectors. This acts like w = 1, even if it isn't. The value of w is copied." + (_type_ (inline-array vector) (inline-array vector) int) none) ;; 9 + ) + ) + +(deftype matrix3 (structure) + "A 3x3 matrix, stored in row-major order. + NOTE: the rows each have an extra 4-bytes of padding, + so this is really a 3x4 matrix. + This type is rarely used." + ((data float 12 :offset-assert 0 :score -1) ;; guessed by decompiler + (vector vector 3 :inline :offset 0) ;; guessed by decompiler + (quad uint128 3 :offset 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype matrix4h (structure) + "A matrix stored using 16-bit integers. + Note that these usually have different scaling for the 4th row which + contains the translation in an affine transform. + So you generally should not unpack these to floats without knowing where they came from + and how they were originally packed (for example, in tie/shrub)." + ((data int16 16 :offset-assert 0 :score -1) ;; guessed by decompiler + (vector4h vector4h 4 :offset 0) ;; guessed by decompiler + (long int64 4 :offset 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(define-extern matrix-copy! "Copy arg1 to arg0" (function matrix matrix matrix)) +(define-extern matrix<-vector-yz-exact! (function matrix vector vector matrix)) +(define-extern matrix<-vector-yz! (function matrix vector vector matrix)) +(define-extern matrix<-vector-z! (function matrix vector matrix)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; quaternion-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype quaternion (structure) + "Quaternion. Stored in xyzw order." + ((data float 4 :offset-assert 0 :score -1) ;; guessed by decompiler + (x float :offset 0) + (y float :offset 4) + (z float :offset 8) + (w float :offset 12) + (vec vector :inline :offset 0) + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern *unity-quaternion* quaternion) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; euler-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype euler-angles (vector) + "Just uses the same xyzw and data array as vector. + The `w` stores an integer that seems to have + bitfields for... something? Like maybe the order? + Euler angles are mostly unused, and the code is a bit of disaster." + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern EulSafe + "Maybe euler angle storage orders? + What is this naming convention?" + (array int32)) +(define-extern EulNext (array int32)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; transform-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype transformq (structure) + ((trans vector :inline :offset-assert 0) + (rot vector :inline :offset-assert 16) + (scale vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype trsq (basic) + ((trans vector :inline :offset-assert 16) + (rot vector :inline :offset-assert 32) + (scale vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; trigonometry-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; geometry-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype curve (structure) + ((cverts (inline-array vector) :offset-assert 0) ;; guessed by decompiler + (num-cverts int32 :offset-assert 4) + (knots (pointer float) :offset-assert 8) ;; guessed by decompiler + (num-knots int32 :offset-assert 12) + (length float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype line-intersection-val (structure) + ((tt0 float :offset-assert 0) + (tt1 float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype border-plane (basic) + ((name symbol :offset-assert 4) ;; guessed by decompiler + (action basic :offset-assert 8) + (slot int8 :offset-assert 12) + (trans vector :inline :offset-assert 16) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (debug-draw (_type_) int) ;; 9 + (point-past-plane? (_type_ vector) symbol) ;; 10 + ) + ) + +(deftype lissajous (structure) + ((x-mag float :offset-assert 0) + (y-mag float :offset-assert 4) + (theta float :offset-assert 8) + (wx float :offset-assert 12) + (wy float :offset-assert 16) + (period-shift float :offset-assert 20) + (theta-rate float :offset-assert 24) + ) + :pack-me + :method-count-assert 10 + :size-assert #x1c + :flag-assert #xa0000001c + (:methods + (lissajous-method-9 (_type_ vector) vector) ;; 9 + ) + ) + +(deftype lissajous-interp (structure) + ((current lissajous :inline :offset-assert 0) + (dest lissajous :inline :offset-assert 28) + (rate lissajous :inline :offset-assert 56) + ) + :method-count-assert 11 + :size-assert #x54 + :flag-assert #xb00000054 + (:methods + (lissajous-interp-method-9 (_type_ vector) vector) ;; 9 + (lissajous-interp-method-10 (_type_) float) ;; 10 + ) + ) + +(deftype ellipsoid (vector) + ((height float :offset 4) + (width float :offset 0) + (length float :offset 8) + (h float :offset 4) + (l float :offset 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern point-in-ellipsoid? (function ellipsoid vector float)) +(define-extern ellipsoid-random-point-on! (function ellipsoid vector vector vector)) +(define-extern ellipsoid-normal-at! (function ellipsoid vector vector vector)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; transformq-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype trsqv (trsq) + "A transform with: + - type information (child of [[basic]]) + - rotation stored as quaternion + - velocity information. + This is a very commonly used type to represent the position of an in-game object. + The `root` of a process-drawable (the parent 'in-game object' type) is a [[trsqv]]. + Additionally, the collision system uses [[trsqv]] as the parent type for foreground + collision objects ([[collide-shape]], [[collide-shape-moving]]). + As a result, this type has a lot of weird methods and extra stuff hidden in it." + ((pause-adjust-distance meters :offset 4) + (nav-radius meters :offset 8) + (transv vector :inline :offset-assert 64) + (rotv vector :inline :offset-assert 80) + (scalev vector :inline :offset-assert 96) + (dir-targ quaternion :inline :offset-assert 112) + (angle-change-time uint64 :offset-assert 128) ;; time-frame + (old-y-angle-diff float :offset-assert 136) + ) + :method-count-assert 28 + :size-assert #x8c + :flag-assert #x1c0000008c + (:methods + (seek-toward-heading-vec! + "Adjust the orientation to point along dir, only changing our yaw. + The vel is a maximum velocity limit. + The frame count is the time constant (first order). + There's some logic to avoid rapidly changing directions" + (_type_ vector float time-frame) quaternion) ;; 9 + (set-heading-vec! + "Makes us look in the arg0 direction immediately. Pitch will be unchanged." + (_type_ vector) quaternion) ;; 10 + (seek-to-point-toward-point! + "Seek toward pointing toward arg0 from our current location." + (_type_ vector float time-frame) quaternion) ;; 11 + (point-toward-point! "Immediately point toward arg0." (_type_ vector) quaternion) ;; 12 + (seek-toward-yaw-angle! "Seek toward the given yaw angle." (_type_ float float time-frame) quaternion) ;; 13 + (set-yaw-angle-clear-roll-pitch! + "Immediately clear our roll and pitch and set yaw to the given angle." + (_type_ float) quaternion) ;; 14 + (set-roll-to-grav! + "Set our roll so that our local down aligns with standard gravity." + (_type_ float) quaternion) ;; 15 + (set-roll-to-grav-2! + "Set our roll so that our local down aligns with standard gravity." + (_type_ float) quaternion) ;; 16 + (rotate-toward-orientation! + "Adjust our orientation toward target, subject to some rate limits. + For Jak 1, I said: + I don't think this is a very robust function and probably doesn't work right in cases + where an axis flips by 180 degrees. + But now they use matrix-from-two-vectors-the-long-way-smooth to fix it! Good job. + This additionally uses the fancy logic of matrix-from-two-vectors-smooth." + (_type_ quaternion float float int int float) quaternion) ;; 17 + (set-quaternion! "Set this [[trsqv]]'s quaternion." (_type_ quaternion) quaternion) ;; 18 + (set-heading-vec-clear-roll-pitch! + "Set our rotation to point along the given heading, with no roll or pitch." + (_type_ vector) quaternion) ;; 19 + (point-toward-point-clear-roll-pitch! + "Set our orientation to point toward arg0, clearing roll and pitch." + (_type_ vector) quaternion) ;; 20 + (rot->dir-targ! + "Set the target direction for this [[trsqv]] to its quaternion." + (_type_) quaternion) ;; 21 + (y-angle "Get the y angle for this [[trsqv]]'s quaternion." (_type_) float) ;; 22 + (global-y-angle-to-point + "Get the angle in the xz plane from the position of this trsqv to the point arg0 + (ignores our current yaw)." + (_type_ vector) float) ;; 23 + (relative-y-angle-to-point + "Get the y angle between the current orientation and arg0 + (how much we'd have to yaw to point at arg0)." + (_type_ vector) float) ;; 24 + (roll-relative-to-gravity "Get our roll, relative to 'down' from gravity." (_type_) float) ;; 25 + (set-and-limit-velocity (_type_ int vector float) trsqv) ;; 26 + (get-quaternion "Get the quat for this [[trsqv]]." (_type_) quaternion) ;; 27 + ) + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bounding-box ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype liang-barsky-line-clip-params (structure) + ((te float :offset-assert 0) + (tl float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(define-extern box-vector-enside? "Is the point in the box? On the edge doesn't count." (function bounding-box vector symbol)) +(define-extern box-vector-inside? "Is the point in the box? On the edge counts." (function bounding-box vector symbol)) +(define-extern liang-barsky-line-clipt "Clip test in 1 dimension. Is arg1 in arg2?" (function liang-barsky-line-clip-params float float symbol)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; matrix ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; matrix is already defined! + +;; matrix3 is already defined! + +(define-extern matrix-identity! "Set dst to the identity matrix." (function matrix matrix)) +(define-extern *identity-matrix* matrix) +(define-extern *hermite-matrix* matrix) +(define-extern matrix+! + "Set dst = src1 + src2. It is okay for any arguments to be the same data. + This is not an efficient implementation." + (function matrix matrix matrix matrix)) +(define-extern matrix-! + "Set dst = src1 - src1. It is okay for any arugments to be the same data. + This is not an efficient implementation." + (function matrix matrix matrix matrix)) +(define-extern matrix*! + "Set dst = src1 * src2. It is okay for any arguments to be the same data. + This is a moderately efficient implementation." + (function matrix matrix matrix matrix)) +(define-extern matrixp*! + "Set dst = src1 * src2. NOTE: this function is a wrapper around matrix*! + that adds no additional functionality. It seems to be a leftover from + a time when matrix*! wasn't safe to use in place. This is unused." + (function matrix matrix matrix matrix)) +(define-extern vector-matrix*! "Set dst = vec * mat. dst may be equal to src." (function vector vector matrix vector)) +(define-extern vector-norm-matrix*! (function vector vector matrix vector)) +(define-extern vector-rotate*! + "Set dst to be the input vector rotated by the rotation part of mat. + The input matrix should be a homogeneous transform with a rotation matrix as its upper-left 3x3. + dst may be equal to src." + (function vector vector matrix vector)) +(define-extern vector3s-matrix*! + "Set dst to be ([src 1.0] * mat).xyz. Doesn't touch the w of dst. + dst and vec can be the same memory" + (function vector3s vector3s matrix vector3s)) +(define-extern vector3s-rotate*! + "Set dst to vec rotated by the rotation in the homogeneous transform mat. + mat should not have a scale/shear (the upper 3x3 should be a pure rotation)." + (function vector3s vector3s matrix vector3s)) +(define-extern matrix-transpose! "Set dst = src^T. src and dst can be the same." (function matrix matrix matrix)) +(define-extern matrix-inverse-of-rot-trans! + "Set dst = src^-1, assuming src is a homogeneous tranform with only rotation/translation. + NOTE: THIS FUNCTION REQUIRES dst != src" + (function matrix matrix matrix)) +(define-extern matrix-4x4-inverse! + "Invert a 4x4 matrix. This assumes that the input is a homogeneous transform. + Src and dst can be the same." + (function matrix matrix matrix)) +(define-extern matrix-translate! "Set dst to a homogeneous transform with only a translation of trans." (function matrix vector matrix)) +(define-extern matrix-translate+! + "Add the given translation to the translation of homogenous transform mat src + and store in dst. It is okay for dst = src." + (function matrix matrix vector matrix)) +(define-extern matrix-scale! + "Set dst to a homogenous transform with only a scale. The x,y,z components + of scale become the x,y,z scaling factors" + (function matrix vector matrix)) +(define-extern scale-matrix! + "Scale an existing matrix. Okay for dst = src. The scaling is applied per row. + This means the x component of scale is used to scale the first row of src. + The w component of scale is used." + (function matrix vector matrix matrix)) +(define-extern matrix-inv-scale! + "Set dst to a homogeneous transform with only a scale. + The x,y,z components of scale are inverted and used as the x,y,z scaling factors" + (function matrix vector matrix)) +(define-extern column-scale-matrix! + "Scale an existing matrix. Okay for dst = src. The scaling is applied column-wise. + Meaning the x component of scale will scale the first column of src." + (function matrix vector matrix matrix)) +(define-extern matrix-rotate-x! + "Set dst to a homogeneous transform matrix for a rotation around the x-axis (degrees)." + (function matrix float matrix)) +(define-extern matrix-rotate-y! + "Set dst to a homoegeneous transform matrix for a rotation around the y axis (degrees)." + (function matrix float matrix)) +(define-extern matrix-rotate-z! + "Set dst to a homogeneous transform matrix for a rotation around the z-axis (degrees)." + (function matrix float matrix)) +(define-extern matrix-rotate-zyx! "Rotate in z,y,x order." (function matrix vector matrix)) +(define-extern matrix-rotate-xyz-2! + "Jak 1 version of matrix-rotate-xyz. Slower than the one below." + (function matrix vector matrix)) +(define-extern matrix-rotate-xyz! "Rotate in x,y,z order." (function matrix vector matrix)) +(define-extern matrix-rotate-zxy! "Rotate in z,x,y order." (function matrix vector matrix)) +(define-extern matrix-rotate-yxz! "Rotate in y,x,z order." (function matrix vector matrix)) +(define-extern matrix-rotate-yzx! "Rotate in y,z,x order." (function matrix vector matrix)) +(define-extern matrix-rotate-yxy! + "Rotate. I believe in yxy order? Compared to the other rotations, this one + is quite a bit more optimized and avoid repeated trig operations." + (function matrix vector matrix)) +(define-extern matrix-rotate-yx! "Rotate by y then x." (function matrix float float matrix)) +(define-extern matrix-axis-sin-cos-vu! + "Create an axis-angle rotation matrix. But given the sin/cos of the angle. Uses the VU." + (function matrix vector float float none)) +(define-extern matrix-axis-sin-cos! + "Create an axis-angle rotation matrix. But given the sin/cos of the angle." + (function matrix vector float float matrix)) +(define-extern matrix-axis-angle! "Create an axis-angle rotation matrix." (function matrix vector float matrix)) +(define-extern matrix-lerp! "Lerp an entire matrix, coefficient-wise." (function matrix matrix matrix float matrix)) +(define-extern matrix-3x3-determinant "Compute the determinant of a 3x3 matrix." (function matrix float)) +(define-extern matrix3-determinant "Unused. Not sure if this has limitations compared to the above version." (function matrix float)) +(define-extern matrix-3x3-inverse! + "Compute the inverse of a 3x3 matrix. Not very efficient. + Requires src != dst." + (function matrix matrix matrix)) +(define-extern matrix-3x3-inverse-transpose! + "Invert and transpose. + Requires dst != src." + (function matrix matrix matrix)) +(define-extern matrix3-inverse-transpose! + "Unused. Not sure if this has limitations compared to other version." + (function matrix matrix matrix)) +(define-extern matrix-3x3-normalize! "Unused." (function matrix matrix matrix)) +(define-extern matrix-4x4-determinant + "Take the determinant of a 4x4 matrix, but this is wrong." + (function matrix float)) +(define-extern matrix-4x4-inverse-transpose! + "Invert and transpose an entire 4x4. I think has no restrictions, other than dst != src. Unused. + The answer is wrong. The determinant function is wrong." + (function matrix matrix matrix)) +(define-extern matrix-y-angle + "If mat has its upper 3x3 as a rotation, gets the y axis rotation." + (function matrix float)) +(define-extern matrix->trans "Multiply xyz by 1/w."(function matrix vector vector)) +(define-extern matrix<-trans "Set the translation." (function matrix vector matrix)) +(define-extern matrix->scale "Get the scale of a matrix." (function matrix vector vector)) +(define-extern matrix-remove-scale! (function matrix matrix vector matrix)) +(define-extern matrix<-scale "Set the scale of a matrix by rescaling." (function matrix vector matrix)) +(define-extern matrix->quat + "Convert matrix to quaternion, works for matrix with scale. + unlike matrix->quaternion." + (function matrix quaternion quaternion)) +(define-extern matrix<-quat "Modify the rotation part of a transform." (function matrix quaternion matrix)) +(define-extern matrix-extract-rotation! (function matrix matrix matrix)) +(define-extern matrix->transformq + "Create a transformq from a matrix. Allowing scale, etc." + (function transformq matrix transformq)) +(define-extern matrix-mirror! "Make a matrix that mirrors. Arguments are unclear." (function matrix vector vector matrix)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; matrix-compose ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern matrix-fur-compose (function matrix vector vector vector matrix)) +(define-extern matrix-fu-compose (function matrix vector vector matrix)) +(define-extern matrix-fr-compose (function matrix vector vector matrix)) +(define-extern matrix-ur-compose (function matrix vector vector vector matrix)) +(define-extern matrix-f-u-compose (function matrix vector vector matrix)) +(define-extern matrix-f-r-compose (function matrix vector vector matrix)) +(define-extern matrix-u-f-compose (function matrix vector vector matrix)) +(define-extern matrix-u-r-compose (function matrix vector vector matrix)) +(define-extern matrix-r-f-compose (function matrix vector vector vector matrix)) +(define-extern matrix-r-u-compose (function matrix vector vector vector matrix)) +(define-extern matrix-f-compose (function matrix vector matrix)) +(define-extern matrix-u-compose (function matrix vector vector vector matrix)) +(define-extern matrix-r-compose (function matrix vector vector vector matrix)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; transform ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; quaternion ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; quaternion is already defined! + +(define-extern quaternion-axis-angle! + "Construct a quaternion from an axis and angle. The axis should be normalized." + (function quaternion float float float float quaternion)) +(define-extern quaternion-vector-angle! + "Construct a quaternion from an axis and angle. The axis should be normalized." + (function quaternion vector float quaternion)) +(define-extern vector-angle<-quaternion! + "Convert the quaternion arg1 to axis-angle form and store in arg0 (angle goes in w)" + (function vector quaternion vector)) +(define-extern quaternion-look-at! "Look along arg1, with arg2 as up." (function quaternion vector vector quaternion)) +(define-extern quaternion-zero! "Set quaternion to all 0's." (function quaternion quaternion)) +(define-extern quaternion-identity! "Set quaternion to 0,0,0,1 (identity)." (function quaternion quaternion)) +(define-extern quaternion-i! "Create unit i quaternion." (function quaternion quaternion)) +(define-extern quaternion-j! "Create unit j quaternion." (function quaternion quaternion)) +(define-extern quaternion-k! "Create unit k quaternion." (function quaternion quaternion)) +(define-extern quaternion-copy! "Set arg0 = arg1." (function quaternion quaternion quaternion)) +(define-extern quaternion-set! "Set arg0 = [arg1, arg2, arg3, arg4]." (function quaternion float float float float quaternion)) +(define-extern quaternion+! "Add quaternions as vectors." (function quaternion quaternion quaternion quaternion)) +(define-extern quaternion-! "Subtract quaternions as vectors." (function quaternion quaternion quaternion quaternion)) +(define-extern quaternion-negate! "Set arg0 = -arg1." (function quaternion quaternion quaternion)) +(define-extern quaternion-conjugate! + "Set arg0 to the conjugate of arg1 (negate only ijk). + If arg1 is normalized, this is equivalent to the inverse + NOTE: this gives you the inverse rotation." + (function quaternion quaternion quaternion)) +(define-extern quaternion-float*! "Multiply each element." (function quaternion quaternion float quaternion)) +(define-extern quaternion-float/! "Divide each element." (function quaternion quaternion float quaternion)) +(define-extern quaternion-norm2 "Get the squared norm of a quaternion." (function quaternion float)) +(define-extern quaternion-norm "Get the norm of a quaternion." (function quaternion float)) +(define-extern quaternion-normalize! "Normalize a quaternion." (function quaternion quaternion)) +(define-extern quaternion-inverse! + "Invert a quaternion. The inverse will satisfy q * q^-1 = identity, even if q is not normalized. + If your quaternion is normalized, it is faster/more accurate to do quaternion-conjugate!" + (function quaternion quaternion quaternion)) +(define-extern quaternion-dot + "Treat quaternions as vectors and take the dot product." + (function quaternion quaternion float)) +(define-extern quaternion*! "Real quaternion multiplication." (function quaternion quaternion quaternion quaternion)) +(define-extern quaternion-right-mult-matrix! + "Place quaternion coefficients into a matrix. + You can convert a quaternion to a matrix by taking the product of this + right-mult and left-mult matrix, but this method is not used. + Instead, quaternion->matrix is a more efficient implementation." + (function matrix quaternion matrix)) +(define-extern quaternion-left-mult-matrix! + "Place quaternion coefficients into a matrix. Unused." + (function matrix quaternion matrix)) +(define-extern quaternion->matrix "Convert quaternion to matrix." (function matrix quaternion matrix)) +(define-extern quaternion->matrix-2 "Unused alternate quaternion->matrix function." (function matrix quaternion matrix)) +(define-extern matrix->quaternion "Convert a rotation matrix to a quaternion." (function quaternion matrix quaternion)) +(define-extern matrix-with-scale->quaternion + "Convert a matrix with a rotation and scale into a quaternion (just the rotation)." + (function quaternion matrix quaternion)) +(define-extern quaternion-vector-len + "Assuming quaternion is normalized, get the length of the xyz part." + (function quaternion float)) +(define-extern quaternion-log! "Take the log of a quaternion. Unused." (function quaternion quaternion quaternion)) +(define-extern quaternion-exp! "Quaternion exponentiation. Unused." (function quaternion quaternion quaternion)) +(define-extern quaternion-slerp! + "Real quaternion slerp. Spherical-linear interpolation is a nice way to interpolate + between quaternions." + (function quaternion quaternion quaternion float quaternion)) +(define-extern quaternion-pseudo-slerp! + "This is a bad interpolation between quaternions. It lerps then normalizes. + It will behave extremely poorly for 180 rotations. + It is unused." + (function quaternion quaternion quaternion float quaternion)) +(define-extern quaternion-pseudo-seek + "Seek one quaternion toward another. Not using real slerp, so this is only good if the quaternions + are pretty similar." + (function quaternion quaternion quaternion float quaternion)) +(define-extern quaternion-smooth-seek! "Another hacky rotation interpolation." (function quaternion quaternion quaternion float quaternion)) +(define-extern quaternion-zxy! + "Make a quaternion from a sequence of z, x, y axis rotations." + (function quaternion vector quaternion)) +(define-extern vector-x-quaternion! + "Get the first row of the rotation matrix for this quaternion." + (function vector quaternion vector)) +(define-extern vector-y-quaternion! + "Get the second row of the rotation matrix for this quaternion." + (function vector quaternion vector)) +(define-extern vector-z-quaternion! + "Get the third row of the rotation matrix for this quaternion." + (function vector quaternion vector)) +(define-extern quaternion-x-angle + "Get the x rotation angle. Not very efficient." + (function quaternion float)) +(define-extern quaternion-y-angle + "Get the y rotation angle. Not very efficient." + (function quaternion float)) +(define-extern quaternion-z-angle + "Get the z rotation angle. Not very efficient." + (function quaternion float)) +(define-extern quaternion-vector-y-angle + "Not sure. Angle between quaternion and axis, projected in xz plane?" + (function quaternion vector float)) +(define-extern quaternion-rotate-local-x! + "Rotate existing quaternion along x axis." + (function quaternion quaternion float quaternion)) +(define-extern quaternion-rotate-local-y! + "Rotate existing quaternion along y axis." + (function quaternion quaternion float quaternion)) +(define-extern quaternion-rotate-local-z! + "Rotate existing quaternion along z axis." + (function quaternion quaternion float quaternion)) +(define-extern quaternion-rotate-y! + "Rotate existing quaternion along y axis (right multiply)." + (function quaternion quaternion float quaternion)) +(define-extern quaternion-rotate-x! + "Rotate existing quaternion along x axis (right multiply)." + (function quaternion quaternion float quaternion)) +(define-extern quaternion-rotate-z! + "Rotate existing quaternion along z axis (right multiply)." + (function quaternion quaternion float quaternion)) +(define-extern quaternion-delta-y "Difference in yaw between two quaternions." (function quaternion quaternion float)) +(define-extern quaternion-rotate-y-to-vector! (function quaternion quaternion quaternion float quaternion)) +(define-extern vector-rotate-around-axis! + "Rotate along y so z-axis points to match another. Use arg3 as the max rotation amount." + (function vector quaternion float vector vector)) +(define-extern vector-rotate-x! "Rotate vector along x axis." (function vector vector float vector)) +(define-extern vector-rotate-y! "Rotate vector along y axis." (function vector vector float vector)) +(define-extern vector-rotate-y-fast! (function vector vector float float vector)) +(define-extern vector-rotate-z! "Rotate vector along z axis." (function vector vector float vector)) +(define-extern vector-y-angle "Get the yaw angle of a vector." (function vector float)) +(define-extern vector-x-angle "Get the pitch angle of a vector." (function vector float)) +(define-extern quaternion<-rotate-y-vector "Create a quaternion representing only the yaw of the given vector." (function quaternion vector quaternion)) +(define-extern quaternion-validate + "Verify that a quaternion is valid, print an error if the length is off by more than 1%.." + (function quaternion none)) +(define-extern quaternion-xz-angle + "Yet another function to compute the yaw of a quaternion. This is a particularly inefficient version." + (function quaternion float)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; euler ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern set-eul! function) ;; (function euler-angles float float float int euler-angles) +;; (define-extern eul->matrix function) ;; (function matrix euler-angles matrix) +;; (define-extern matrix->eul function) ;; (function euler-angles matrix int euler-angles) +;; (define-extern eul->quat function) ;; (function quaternion euler-angles quaternion) +;; (define-extern quat->eul function) ;; (function euler-angles quaternion int euler-angles) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; trigonometry ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern radmod "Wrap arg0 to be within (-pi, pi)." (function float float)) +(define-extern deg- + "Compute arg0-arg1, unwrapped, using rotation units. + Result should be in the range (-180, 180)" + (function float float float)) +(define-extern deg-diff + "Very similar to the function above, but computes arg1 - arg0 instead." + (function float float float)) +(define-extern deg-seek + "Move in toward target by at most max-diff, using rotation units" + (function float float float float)) +(define-extern deg-seek-smooth + "Step amount of the way from in to target, by at most max-diff, using rotation units" + (function float float float float float)) +(define-extern deg-lerp-clamp + "Map [0, 1] to min-val, max-val, handling wrapping and saturating, using rotation units." + (function float float float float)) +(define-extern binary-table (array float)) +(define-extern sincos-table (array float)) +(define-extern sin + "Compute the sine of an angle in rotation units. Unwraps it." + (function float float)) +(define-extern sin-rad + "Compute the sine of an angle in radians. + No unwrap is done, should be in -pi, pi" + (function float float)) +(define-extern *sin-poly-vec* vector) +(define-extern *sin-poly-vec2* vector) +(define-extern vector-sin-rad! + "Taylor series approximation of sine on all 4 elements in a vector. + Inputs should be in radians, in -pi to pi. + Somehow their coefficients are a little bit off. + Like the first coefficient, which should obviously be 1, is not quite 1." + (function vector vector vector)) +(define-extern cos-rad + "Cosine with taylor series. Input is in radians, in -pi, pi. + - TODO constants" + (function float float)) +(define-extern *cos-poly-vec* vector) +(define-extern vector-cos-rad! + "Compute the cosine of all 4 vector elements. + Radians, with no wrapping. Uses taylor series with 4 coefficients." + (function vector vector vector)) +(define-extern vector-sincos-rad! + "Compute the sine and cosine of each element of src, storing it in dst-sin and dst-cos. + This is more efficient than separate calls to sin and cos. + Inputs should be radians in -pi to pi." + (function vector vector vector int)) +(define-extern sincos-rad! + "Compute the sine and cosine of x, store it in the output array. + Has the cosine bug." + (function vector float int)) +(define-extern sincos! + "Compute the sine and cosine of x, store it in the output array. + The input is in rotation units, and is unwrapped properly. + Also has the cosine bug" + (function vector float int)) +(define-extern vector-rad<-vector-deg! + "Convert a vector in rotation units to radians, and unwrap. + Input can be anything, output will be -2pi to pi." + (function vector vector none)) +(define-extern vector-rad<-vector-deg/2! + "Divide the input by two, and then convert from rotation units to radians, unwrapping. + Not sure why this really needs to be separate the from previous function..." + (function vector vector int)) +(define-extern vector-sincos! + "Compute sine and cosine of each element in a vector, in rotation units" + (function vector vector vector int)) +(define-extern tan-rad + "This function appears to be named wrong and actually operates on rotation units." + (function float float)) +(define-extern cos "Cosine of rotation units." (function float float)) +(define-extern tan "Correctly named tangent of rotation units." (function float float)) +(define-extern atan0 + "Inverse tangent, to rotation units. y,x order. Does not handle signs correctly. + Do not use this function directly, instead use atan2." + (function float float float)) +(define-extern atan-series-rad "A helper function for atan." (function float float)) +(define-extern atan-rad "Inverse tangent in radians." (function float float)) +(define-extern sign-bit "Return 1 if bit 31 is set, otherwise 0." (function int int)) +(define-extern sign-float + "Return 1 if arg0 is positive or zero, -1 otherwise. + Fast (no branching)." + (function float float)) +(define-extern sign + "Similar to above, but returns 0 if input is 0. + But is more complicated." + (function float float)) +(define-extern atan2-rad "Atan for radians." (function float float float)) +(define-extern atan "Atan for rotation units. Signs behave like atan.." (function float float float)) +(define-extern asin "Inverse sine, rotation units." (function float float)) +(define-extern acos "Inverse cosine. Returns rotation units." (function float float)) +(define-extern acos-rad "Inverse cosine, radians." (function float float)) +(define-extern sinerp + "Map amount to min,max using sine. Kinda weird, usually people use cosine." + (function float float float float)) +(define-extern sinerp-clamp "Like sinerp, but clamp to min,max." (function float float float float)) +(define-extern coserp "Weird lerp with cosine (over 90 degrees?)." (function float float float float)) +(define-extern coserp-clamp + "Weird 90 degree lerp with cosine, clamped to min,max." + (function float float float float)) +(define-extern coserp180 "Classic lerp with cosine." (function float float float float)) +(define-extern coserp180-clamp "Classic coserp with saturation." (function float float float float)) +(define-extern ease-in-out + "Weird coserp like mapping from 0 to 1 as progress goes from 0 to total." + (function int int float)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; math-fx ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; res-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; TODO confirm, this is just copied from jak3 which copied from jak1 +(deftype res-tag (uint128) + "Metadata about a property in a [[res-lump]], such as name, element type and element count." + ((name symbol :offset 0) + (key-frame float :offset 32) + (elt-type type :offset 64) + (data-offset uint16 :offset 96) + (elt-count uint32 :offset 112 :size 15) + (inlined? uint8 :offset 127 :size 1) ;; guess. + ) + :flag-assert #x900000010 + ) + +;; made-up type +(deftype res-tag-pair (uint64) + "The indices of two [[res-tag]]s. If the specific key-frame time is in between two + res-tags, this type is used to return the indices of the first res-tag before and after + the specified time." + ((lo int32 :offset 0) + (hi int32 :offset 32) + ) + ) + +;; +++res-h:res-lump-flags +(defenum res-lump-flags + :type uint16 + :bitfield #t + (sorted 0) + (rlf1 1) + ) +;; ---res-h:res-lump-flags + +(declare-type entity-links structure) + +(deftype res-lump (basic) + ((length int32 :offset-assert 4) + (allocated-length int16 :offset-assert 8) + (flags res-lump-flags :offset-assert 10) ;; res-lump-flags + (data-base pointer :offset-assert 12) ;; guessed by decompiler + (data-top pointer :offset-assert 16) ;; guessed by decompiler + (data-size int32 :offset-assert 20) + (extra entity-links :offset-assert 24) ;; guessed by decompiler + (tag (pointer res-tag) :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 22 + :size-assert #x20 + :flag-assert #x1600000020 + ;; field extra uses ~A with a signed load. + (:methods + (new (symbol type int int) _type_) ;; 0 + (get-property-data + "Returns an address to a given property's data at a specific time stamp, or default on error. + @param name is the name of the property you want, mode is its lookup mode ('interp 'base 'exact), time is the timestamp. + @param default is the default result returned in the case of an error. + @param tag-addr is an address to a res-tag. The current base tag is written to this. Ignored if tag-addr is #f + @param buf-addr is an address to the data buffer used to write interpolated data to. It must have enough space! Only necessary for 'interp mode." + (_type_ symbol symbol float pointer (pointer res-tag) pointer) pointer :no-virtual) ;; 9 + (get-property-struct + "Returns a given struct property's value at a specific time stamp, or default on error. + @param name is the name of the property you want, `mode` is its lookup mode ('interp 'base 'exact), `time` is the timestamp. + @param default is the default result returned in the case of an error. + @param tag-addr is an address to a [[res-tag]]. The current base tag is written to this. Ignored if tag-addr is #f. + @param buf-addr is an address to the data buffer used to write interpolated data to. + It must have enough space! Only necessary for 'interp mode." + (_type_ symbol symbol float structure (pointer res-tag) pointer) structure :no-virtual) ;; 10 + (get-property-value + "Returns a given value property's value at a specific time stamp, or default on error. + @param name is the name of the property you want, `mode` is its lookup mode ('interp 'base 'exact), `time` is the timestamp. + @param default is the default result returned in the case of an error. + @param tag-addr is an address to a res-tag. The current base tag is written to this. Ignored if `tag-addr` is #f. + @param buf-addr is an address to the data buffer used to write interpolated data to. + It must have enough space! Only necessary for 'interp mode." + (_type_ symbol symbol float uint128 (pointer res-tag) pointer) uint128 :no-virtual) ;; 11 + (get-property-value-float (_type_ symbol symbol float float (pointer res-tag) pointer) float) ;; 12 + (get-tag-index-data "Get the data address of the n'th tag." (_type_ int) pointer) ;; 13 + (get-tag-data "Get the data address of the specified tag." (_type_ res-tag) pointer) ;; 14 + (allocate-data-memory-for-tag! + "Find space for the data described by arg0 in this. + Returns a tag with data-offset set correctly for this res-lump. + If the lump already contains memory for the given tag, and it is big enough, + it will be reused. Alignment will be at least 8 bytes. + If the input tag has elt-count = 0, it will return a tag for elt-count = 1." + (_type_ res-tag) res-tag) ;; 15 + (sort! "Sort all tags based on name, then key-frame." (_type_) _type_) ;; 16 + (add-data! + "Given a tag and a pointer to its data, copy it to this res-lump. + This doesn't seem to do the right thing if the given tag is a non-inline tag + with > 1 element." + (_type_ res-tag pointer) res-lump) ;; 17 + (add-32bit-data! "Add a single 32-bit value using [[add-data!]]." (_type_ res-tag object) res-lump) ;; 18 + (lookup-tag-idx + "Look up the index of the tag containing with the given name and timestamp. + Correct lookups return a res-tag-pair, which contains one tag index in the lower 32 bits and one in the upper 32 bits. + Depending on the mode, they may be the same, or they may be two tags that you should interpolate + between, if the exact time was not found. + + @param name-sym should be the name of the thing you want. + @param time is for the timestamp you want. + If mode = 'base, then both the indices are the same and the timestamp is ignored. + If mode = 'interp, then it tries to get closest below/closest above (or both the same, if exact match found). + If mode = 'exact, then it requires an exact timestamp match and both indices are the same. + If things go wrong, returns a negative number." + (_type_ symbol symbol float) res-tag-pair :no-virtual) ;; 19 + (make-property-data + "Returns (a pointer to) the value data of a property with the tag-pair. + If tag-pair does not represent an exact point in the timeline, then the data is interpolated based on time + with the result written into buf. buf must have enough space to copy all of the data. + Otherwise, simply returns an address to the resource binary." + (_type_ float res-tag-pair pointer) pointer) ;; 20 + (get-curve-data! + "Read curve data and write it to curve-target. Return #t if both + control points and knots data was succesfully read, #f otherwise." + (_type_ curve symbol symbol float) symbol) ;; 21 + ) + ) + +(define-extern *res-key-string* string) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gsound-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defenum sound-command + :type uint16 + (load-bank 0) + (unload-bank 1) + (load-music 2) + (unload-music 3) + (play 4) + (pause-sound 5) + (stop-sound 6) + (continue-sound 7) + (set-param 8) + (set-master-volume 9) + (pause-group 10) + (stop-group 11) + (continue-group 12) + (get-irx-version 13) + (set-language 14) + (set-reverb 15) + (shutdown 16) + (list-sounds 17) + (set-fps 18) + (iop-mem 19) + (cancel-dgo 20) + (set-stereo-mode 21) + (set-globals 22) + ) + +;; +++gsound-h:sound-group +(defenum sound-group + :bitfield #t + :type uint8 + (sfx) + (music) + (dialog) ;; same as jak 1 dialog + (sog3) + (ambient) + (dialog2) ;; more dialog + (special) + (sog7) + ) +;; ---gsound-h:sound-group + +(deftype sound-stream-name (structure) + ((name uint8 48 :offset-assert 0) ;; guessed by decompiler + ) + :pack-me + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype sound-id (uint32) + () + :flag-assert #x900000004 + ) + +(deftype sound-bank-id (uint32) + () + :flag-assert #x900000004 + ) + +(deftype sound-name (uint128) + ((lo uint64 :offset 0) ;; added to help with cases where they access it by u64. + (hi uint64 :offset 64) + ) + :flag-assert #x900000010 + ) + +(deftype sound-rpc-cmd (structure) + ((rsvd1 uint16 :offset-assert 0) + (command sound-command :offset-assert 2) ;; sound-command + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype sound-play-params (structure) + ((mask uint8 :offset-assert 0) ;; uint16 + (group uint8 :offset-assert 1) + (volume int16 :offset-assert 2) ;; int32 + (pitch-mod int16 :offset-assert 4) + (bend int16 :offset-assert 6) + (pan int16 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xa + :flag-assert #x90000000a + ) + +(deftype sound-rpc-bank-cmd (sound-rpc-cmd) + ((bank-name sound-name :offset-assert 16) ;; sound-name + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype sound-rpc-test-cmd (sound-rpc-cmd) + ((ee-addr pointer :offset-assert 4) ;; guessed by decompiler + (param0 uint16 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xa + :flag-assert #x90000000a + ) + +(deftype sound-rpc-sound-cmd (sound-rpc-cmd) + ((id sound-id :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-group-cmd (sound-rpc-cmd) + ((group uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-load-bank (sound-rpc-bank-cmd) + ((ee-addr pointer :offset-assert 32) ;; guessed by decompiler + (mode uint32 :offset-assert 36) + (priority uint32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype sound-rpc-load-music (sound-rpc-bank-cmd) + () + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype sound-rpc-unload-bank (sound-rpc-cmd) + ((mode uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-play (sound-rpc-sound-cmd) + ((name sound-name :offset-assert 16) ;; sound-name + (params sound-play-params :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x2a + :flag-assert #x90000002a + ) + +(deftype sound-rpc-pause-sound (sound-rpc-sound-cmd) + () + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-stop-sound (sound-rpc-sound-cmd) + () + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-continue-sound (sound-rpc-sound-cmd) + () + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-set-param (sound-rpc-sound-cmd) + ((params sound-play-params :inline :offset-assert 16) + (auto-time int32 :offset-assert 28) + (auto-from int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) + +(deftype sound-rpc-set-master-volume (sound-rpc-group-cmd) + ((volume int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype sound-rpc-pause-group (sound-rpc-group-cmd) + () + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-stop-group (sound-rpc-group-cmd) + () + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-continue-group (sound-rpc-group-cmd) + () + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-cancel-dgo (sound-rpc-group-cmd) + ((id uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype sound-rpc-get-irx-version (sound-rpc-cmd) + ((major uint32 :offset-assert 4) + (minor uint32 :offset-assert 8) + (ee-addr pointer :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype sound-rpc-set-language (sound-rpc-cmd) + ((lang uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-set-stereo-mode (sound-rpc-cmd) + ((mode int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-set-reverb (sound-rpc-cmd) + ((core uint8 :offset-assert 4) + (reverb int32 :offset-assert 8) + (left uint32 :offset-assert 12) + (right uint32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype sound-rpc-set-ear-trans (sound-rpc-cmd) + ((ear-trans1 int32 3 :offset-assert 4) ;; guessed by decompiler + (ear-trans0 int32 3 :offset-assert 16) ;; guessed by decompiler + (cam-trans int32 3 :offset-assert 28) ;; guessed by decompiler + (cam-forward int32 3 :offset-assert 40) ;; guessed by decompiler + (cam-left int32 3 :offset-assert 52) ;; guessed by decompiler + (cam-scale int32 :offset-assert 64) + (cam-inverted int32 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) + +(deftype sound-rpc-shutdown (sound-rpc-cmd) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype sound-rpc-set-fps (sound-rpc-cmd) + ((fps uint8 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x5 + :flag-assert #x900000005 + ) + +(deftype sound-rpc-set-globals (sound-rpc-cmd) + ((cam-inverted uint8 :offset-assert 4) + (music-pitch-mod int16 :offset-assert 6) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype sound-rpc-list-sounds (sound-rpc-cmd) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype sound-rpc-unload-music (sound-rpc-cmd) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype sound-rpc-union (structure) + ((data uint32 12 :offset-assert 0) ;; guessed by decompiler + (load-bank sound-rpc-load-bank :offset-assert 0 :overlay-at data) + (unload-bank sound-rpc-unload-bank :offset-assert 0 :overlay-at data) + (play sound-rpc-play :offset-assert 0 :overlay-at data) + (pause-sound sound-rpc-pause-sound :offset-assert 0 :overlay-at data) + (stop-sound sound-rpc-stop-sound :offset-assert 0 :overlay-at data) + (continue-sound sound-rpc-continue-sound :offset-assert 0 :overlay-at data) + (set-param sound-rpc-set-param :offset-assert 0 :overlay-at data) + (set-master-volume sound-rpc-set-master-volume :offset-assert 0 :overlay-at data) + (pause-group sound-rpc-pause-group :offset-assert 0 :overlay-at data) + (stop-group sound-rpc-stop-group :offset-assert 0 :overlay-at data) + (continue-group sound-rpc-continue-group :offset-assert 0 :overlay-at data) + (get-irx-version sound-rpc-get-irx-version :offset-assert 0 :overlay-at data) + (set-language sound-rpc-set-language :offset-assert 0 :overlay-at data) + (set-reverb sound-rpc-set-reverb :offset-assert 0 :overlay-at data) + (set-fps sound-rpc-set-fps :offset-assert 0 :overlay-at data) + (set-globals sound-rpc-set-globals :offset-assert 0 :overlay-at data) + (shutdown sound-rpc-shutdown :offset-assert 0 :overlay-at data) + (list-sounds sound-rpc-list-sounds :offset-assert 0 :overlay-at data) + (unload-music sound-rpc-unload-music :offset-assert 0 :overlay-at data) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype sound-info (structure) + ((flags uint32 :offset-assert 0) + (num-instances uint32 :offset-assert 4) + (index uint32 :offset-assert 8) + (name sound-name :offset-assert 16) + (group uint8 :offset-assert 32) + (fo-power float :offset-assert 36) + (fo-min float :offset-assert 40) + (fo-max float :offset-assert 44) + (volume float :offset-assert 48) + (pan float :offset-assert 52) + (priority int8 :offset-assert 56) + (duck-amount float :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype sound-spec (sound-play-params) + ((auto-time int32 :offset-assert 12) + (auto-from int32 :offset-assert 16) + (info sound-info :offset-assert 20) + (info-index uint32 :offset-assert 24) + (trans vector :inline :offset-assert 32) ;; int32 4 + (flags uint16 :offset-assert 48) + (fo-min float :offset-assert 52) ;; int16 + (fo-max float :offset-assert 56) ;; int16 + (fo-power float :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype sound-handle (structure) + ((proc handle :offset-assert 0) + (flags uint64 :offset-assert 8) + (fader-cur float :offset-assert 16) + (fader-targ float :offset-assert 20) + (dist float :offset-assert 24) + (viewport int8 :offset-assert 28) + (num-instances uint8 :offset-assert 29) + (svc uint8 :offset-assert 30) + (index uint8 :offset-assert 31) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype sound-instance (sound-spec) + ((last-update uint64 :offset-assert 64) + (joint uint8 :offset-assert 72) + (sh sound-handle :offset-assert 76) + (id uint32 :offset-assert 80) + (pan-angle float :offset-assert 84) + (volumef float :offset-assert 88) + ) + :method-count-assert 9 + :size-assert #x5c + :flag-assert #x90000005c + ) + +(defenum sound-bank-mode + :type uint32 + (none 0) + (unknown 1) + (common 2) + (mode 3) + (full 4) + (half 5) + (halfa 6) + (halfb 7) + (halfc 8) + (virtual 9) + (higha 10) + (mida 11) + (midb 12) + (lowb 13) + (lowc 14) + (lowd 15) + (lowe 16) + (lowf 17) + ) + +(deftype sound-bank-state (structure) + ((name symbol :offset-assert 0) ;; guessed by decompiler + (mode sound-bank-mode :offset-assert 4) ;; guessed by decompiler + (high basic :offset-assert 8) + (str-name basic :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(defenum stream-status + :type uint32 + :bitfield #t + (ss1 1) ;; id-is-playing + (ss4 4) ;; is-playing + (ss6 6) ;; id-is-playing + (ss9 9) + ) + +(deftype sound-iop-info (structure) + ((freemem uint32 :offset-assert 0) + (freemem2 uint32 :offset-assert 4) + (nocd uint32 :offset-assert 8) + (dirtycd uint32 :offset-assert 12) + (chinfo uint8 48 :offset-assert 16) ;; guessed by decompiler + (id-info sound-id 48 :offset-assert 64) + (pad uint32 2 :offset-assert 256) + (music-position uint32 :offset-assert 264) + (music-status stream-status :offset-assert 268) + (music-name sound-stream-name :inline :offset-assert 272) ;; field could not be read. + (stream-position uint32 4 :offset-assert 320) ;; guessed by decompiler + (stream-status stream-status 4 :offset-assert 336) ;; guessed by decompiler + (stream-name sound-stream-name 4 :inline :offset-assert 352) ;; guessed by decompiler + (stream-id sound-id 4 :offset-assert 544) ;; guessed by decompiler + (sound-bank0 uint8 16 :offset-assert 560) + (sound-bank1 uint8 16) + (sound-bank2 uint8 16) + (sound-bank3 uint8 16) + (sound-bank4 uint8 16) + (sound-bank5 uint8 16) + (sound-bank6 uint8 16) + (sound-bank7 uint8 16) + (endpad uint128) ;;added + ) + :method-count-assert 9 + :size-assert #x2c0 + :flag-assert #x9000002c0 + ) + +(deftype ambient-sound (basic) + ((playing-id sound-id :offset-assert 4) ;; guessed by decompiler + (entity entity :offset-assert 8) ;; guessed by decompiler + (sound-count int32 :offset-assert 12) + (spec sound-spec :inline :offset-assert 16) + (play-time time-frame :offset-assert 80) ;; time-frame + (time-base time-frame :offset-assert 88) ;; time-frame + (time-random time-frame :offset-assert 96) ;; time-frame + ) + :method-count-assert 17 + :size-assert #x68 + :flag-assert #x1100000068 + (:methods + (new "Set up ambient-sound. Can use an entity-actor (grabs from lump), sound-spec, or name as a string." (symbol type basic vector float) _type_) ;; 0 + (update! "Per-frame update of ambient sound." (_type_) int) ;; 9 + (change-sound! "Change the sound being played." (_type_ sound-name) int) ;; 10 + (update-trans! "Change the trans of the sound." (_type_ vector) int) ;; 11 + (update-vol! "Change the volume of the sound." (_type_ float) int) ;; 12 + (update-pitch-mod! (_type_ float) none) ;; 13 + (set-falloff-far! (_type_ float) none) ;; 14 + (set-falloff-mode! (_type_ int) none) ;; 15 + (stop! (_type_) int) ;; 16 + ) + ) + +(define-extern *debug-sound-sliders* object) +(define-extern *music-volume-ducked-by-sound* object) +(define-extern *music-lock* object) +(define-extern *current-sound-id* sound-id) +(define-extern *sound-iop-info* sound-iop-info) +(define-extern *jukebox-time* time-frame) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sound-info ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *sound-info* (array sound-info)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; timer-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (deftype timer-mode (uint32) +;; () +;; :flag-assert #x900000004 +;; ) + +#| +(deftype timer-bank (structure) + ((count uint32 :offset-assert 0) + (mode timer-mode :offset-assert 16) ;; guessed by decompiler + (comp uint32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype timer-hold-bank (timer-bank) + ((hold uint32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype stopwatch (basic) + ((prev-time-elapsed uint64 :offset-assert 8) ;; time-frame + (start-time uint64 :offset-assert 16) ;; time-frame + (begin-level int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype sce-cd-clock (structure) + ((stat uint8 :offset-assert 0) + (second uint8 :offset-assert 1) + (minute uint8 :offset-assert 2) + (hour uint8 :offset-assert 3) + (pad uint8 :offset-assert 4) + (day uint8 :offset-assert 5) + (month uint8 :offset-assert 6) + (year uint8 :offset-assert 7) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +;; (define-extern *ticks-per-frame* object) ;; int +;; (define-extern timer-init function) ;; (function timer-bank timer-mode int) +;; (define-extern bcd-conv function) +;; (define-extern *month-days* object) +;; (define-extern is-leap function) +;; (define-extern mdy-to-day function) +;; (define-extern rtclock-to-secs function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vif-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vif-stat (uint32) + ((UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (deftype vif-fbrst (uint32) +;; () +;; :flag-assert #x900000004 +;; ) + +;; (deftype vif-err (uint32) +;; () +;; :flag-assert #x900000004 +;; ) + +#| +(deftype vif-bank (structure) + ((stat uint32 :offset-assert 0) + (fbrst uint32 :offset-assert 16) + (err vif-err :offset-assert 32) ;; guessed by decompiler + (mark uint32 :offset-assert 48) + (cycle uint32 :offset-assert 64) + (mode uint32 :offset-assert 80) + (num uint32 :offset-assert 96) + (mask uint32 :offset-assert 112) + (code uint32 :offset-assert 128) + (itops uint32 :offset-assert 144) + (base uint32 :offset-assert 160) + (offset uint32 :offset-assert 176) + (tops uint32 :offset-assert 192) + (itop uint32 :offset-assert 208) + (top uint32 :offset-assert 224) + (r0 uint32 :offset-assert 256) + (r1 uint32 :offset-assert 272) + (r2 uint32 :offset-assert 288) + (r3 uint32 :offset-assert 304) + (c0 uint32 :offset-assert 320) + (c1 uint32 :offset-assert 336) + (c2 uint32 :offset-assert 352) + (c3 uint32 :offset-assert 368) + ) + :method-count-assert 9 + :size-assert #x174 + :flag-assert #x900000174 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dma-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype dma-chcr (uint32) + "Memory mapped DMA channel control register. Typically used to start and check on DMA transfer." + ((dir uint8 :offset 0 :size 1) + (mod uint8 :offset 2 :size 2) + (asp uint8 :offset 4 :size 2) + (tte uint8 :offset 6 :size 1) + (tie uint8 :offset 7 :size 1) + (str uint8 :offset 8 :size 1) + (tag uint16 :offset 16 :size 16) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype dma-bank (structure) + "Bank of memory mapped DMA registers for a single channel. Used to control DMA." + ((chcr dma-chcr :offset 0) ;; guessed by decompiler + (madr uint32 :offset 16) + (qwc uint32 :offset 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) + +(deftype dma-bank-source (dma-bank) + "DMA channel registers for a DMA channel supporting source-chain." + ((tadr uint32 :offset 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) + +(deftype dma-bank-vif (dma-bank-source) + "DMA channel registers for a DMA channel with call/ret stack." + ((as0 uint32 :offset 64) + (as1 uint32 :offset 80) + ) + :method-count-assert 9 + :size-assert #x54 + :flag-assert #x900000054 + ) + +(deftype dma-bank-spr (dma-bank-source) + "DMA channel registers for a DMA channel supporting scratchpad transfer." + ((sadr uint32 :offset 128) + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) + +(deftype dma-ctrl (uint32) + "Main DMA control register, shared for all channels." + ((dmae uint8 :offset 0 :size 1) + (rele uint8 :offset 1 :size 1) + (mfd uint8 :offset 2 :size 2) + (sts uint8 :offset 4 :size 2) + (std uint8 :offset 6 :size 2) + (rcyc uint8 :offset 8 :size 3) + ) + :flag-assert #x900000004 + ) + +(deftype dma-enable (uint32) + ((cpnd uint8 :offset 16 :size 1) + ) + :flag-assert #x900000004 + ) + +(deftype dma-sqwc (uint32) + ((sqwc uint8 :offset 0 :size 8) + (tqwc uint8 :offset 16 :size 8) + ) + :flag-assert #x900000004 + ) + +(deftype dma-bank-control (structure) + "Memory mapping for shared DMA registers." + ((ctrl dma-ctrl :offset-assert 0) ;; guessed by decompiler + (stat uint32 :offset 16) + (pcr uint32 :offset 32) + (sqwc dma-sqwc :offset 48) ;; guessed by decompiler + (rbsr uint32 :offset 64) + (rbor uint32 :offset 80) + (stadr uint32 :offset 96) + (enabler uint32 :offset 5408) + (enablew uint32 :offset 5520) + ) + :method-count-assert 9 + :size-assert #x1594 + :flag-assert #x900001594 + ) + +(deftype vu-code-block (basic) + "Unused type for some VU code. vu-function is used instead." + ((name basic :offset-assert 4) + (code uint32 :offset-assert 8) + (size int32 :offset-assert 12) + (dest-address uint32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype vu-stat (uint64) + () + :flag-assert #x900000008 + ) + +(defenum dma-tag-id + :bitfield #f + :type uint8 + (refe 0) ;; addr=ADDR, ends after this transfer + (cnt 1) ;; addr=after tag, next-tag=after data + (next 2) ;; addr=after tag, next-tag=ADDR + (ref 3) ;; addr=ADDR, next-tag=after tag + (refs 4) ;; ref, but stall controled + (call 5) ;; + (ret 6) ;; + (end 7) ;; next, but ends. + ) + +(deftype dma-tag (uint64) + "The 64-bit tag used by the DMA system." + ((qwc uint16 :offset 0 :size 16) + (pce uint8 :offset 26 :size 2) + (id dma-tag-id :offset 28 :size 3) + (irq uint8 :offset 31 :size 1) + (addr uint32 :offset 32 :size 31) + (spr uint8 :offset 63 :size 1) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype dma-bucket (structure) + "A linked list of DMA data, typically all in the same category. Used to organize the full DMA chain." + ((tag uint64 :offset-assert 0) ;; dma-tag + (last (pointer dma-tag) :offset-assert 8) ;; guessed by decompiler + (dummy uint32 :offset-assert 12) + (next uint32 :offset 4) + (clear uint64 :offset-assert 8 :overlay-at last) + (vif0 uint32 :offset-assert 8 :overlay-at last) + (vif1 uint32 :offset-assert 12 :overlay-at dummy) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vif-mask (uint32) + ((m0 uint8 :offset 0 :size 2) + (m1 uint8 :offset 2 :size 2) + (m2 uint8 :offset 4 :size 2) + (m3 uint8 :offset 6 :size 2) + (m4 uint8 :offset 8 :size 2) + (m5 uint8 :offset 10 :size 2) + (m6 uint8 :offset 12 :size 2) + (m7 uint8 :offset 14 :size 2) + (m8 uint8 :offset 16 :size 2) + (m9 uint8 :offset 18 :size 2) + (m10 uint8 :offset 20 :size 2) + (m11 uint8 :offset 22 :size 2) + (m12 uint8 :offset 24 :size 2) + (m13 uint8 :offset 26 :size 2) + (m14 uint8 :offset 28 :size 2) + (m15 uint8 :offset 30 :size 2) + ) + :flag-assert #x900000004 + ) + +(deftype vif-stcycl-imm (uint16) + "The imm field of a VIF code using STCYCL, which adjusts the pattern for storing data." + ((cl uint8 :offset 0 :size 8) + (wl uint8 :offset 8 :size 8) + ) + :flag-assert #x900000002 + ) + +(deftype vif-unpack-imm (uint16) + "The imm field of a VIF code using UNPACK, which transfers data to VU memory." + ((addr uint16 :offset 0 :size 10) + (usn uint8 :offset 14 :size 1) + (flg uint8 :offset 15 :size 1) + ) + :flag-assert #x900000002 + ) + +;; all these have mask (only applies to unpacks) and interrupt not set. +(defenum vif-cmd + :bitfield #f + :type uint8 + (nop 0) ;; no-op, can still have irq set. + (stcycl 1) ;; set write recycle register + (offset 2) ;; set offset register + (base 3) ;; set base register + (itop 4) ;; set data pointer register (itops) + (stmod 5) ;; set mode register + (mskpath3 6) ;; set path 3 mask + (mark 7) ;; set mark register + (pc-port 8) ;; special tag for PC Port data. + (flushe 16) ;; wait for end of microprogram + (flush 17) ;; wait for end of microprogram and transfer (path1/path2) + (flusha 19) ;; wait for end of microprogram and transfer (path1/path2/path3) + (mscal 20) ;; activate microprogram (call) + (mscalf 21) ;; flushe and activate (call) + (mscnt 23) ;; activate microprogram (continue) + (stmask 32) ;; set MASK register. + (strow 48) ;; set filling data + (stcol 49) ;; set filling data + (mpg 74) ;; transfer microprogram + (direct 80) ;; straight to GIF. + (directhl 81) + (unpack-s-32 96) + (unpack-s-16 97) + (unpack-s-8 98) + ;; 99 is invllid + (unpack-v2-32 100) + (unpack-v2-16 101) + (unpack-v2-8 102) + ;; 103 is invalid + (unpack-v3-32 104) + (unpack-v3-16 105) + (unpack-v3-8 106) + ;; 107 is invalid + (unpack-v4-32 108) + (unpack-v4-16 109) + (unpack-v4-8 110) + (unpack-v4-5 111) + (cmd-mask 239) ;; not sure what this is. + ) + +;; this makes a copy of the above type, but uses a uint32. +(defenum vif-cmd-32 + :bitfield #f + :type uint32 + :copy-entries vif-cmd + ) + +(deftype vif-tag (uint32) + "A tag consumed by the VIF, which accepts DMA data." + ((imm uint16 :offset 0 :size 16) + (num uint8 :offset 16 :size 8) + (cmd vif-cmd :offset 24 :size 7) + (irq uint8 :offset 31 :size 1) + (msk uint8 :offset 28 :size 1) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(define-extern dma-sync-fast (function dma-bank none)) +(define-extern dma-send-no-scratch (function dma-bank uint32 uint32 none)) +(define-extern dma-sync-with-count (function dma-bank (pointer int32) int)) +(define-extern dma-count-until-done (function dma-bank (pointer int32) int)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; video-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype video-params (structure) + "Parameters for the framebuffer." + ((set-video-mode symbol :offset-assert 0) ;; guessed by decompiler + (reset-video-mode symbol :offset-assert 4) ;; guessed by decompiler + (relative-x-scale float :offset 16) + (display-dx int32 :offset-assert 20) + (display-dy int32 :offset-assert 24) + (display-sy int32 :offset-assert 28) + (relative-x-scale-reciprical float :offset-assert 32) + (smode2 uint64 :offset-assert 40) + (aspect-ratio basic :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) + +(define-extern *video-params* video-params) ;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vu1-user-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++vu1-user-h:tpage-category +(defenum tpage-category + :type int8 + (tfrag 0) ;; + (pris 1) + (shrub 2) + (alpha 3) + (water 4) + (warp 5) + (pris2 6) + (sprite 7) + (hud 8) + ) +;; ---vu1-user-h:tpage-category + +;; +++vu1-user-h:tpage-category-u32 +(defenum tpage-category-u32 + :type uint32 + :copy-entries tpage-category + ) +;; ---vu1-user-h:tpage-category-u32 + +;; +++vu1-user-h:bucket-id +;; -l- +(defenum bucket-id + :type int32 + ) + +;; ---vu1-user-h:bucket-id + +(defenum bucket-id-16 + :type int16 + :copy-entries bucket-id + ) + +;; +++vu1-user-h:texture-enable-mask +(defenum texture-enable-mask + :type uint64 + :bitfield #t + ) +;; ---vu1-user-h:texture-enable-mask + +;; +++vu1-user-h:texture-enable-mask-u32 +(defenum texture-enable-mask-u32 + :type uint32 + :bitfield #t + :copy-entries texture-enable-mask + ) +;; ---vu1-user-h:texture-enable-mask-u32 + +;; +++vu1-user-h:vu1-renderer-mask +;; TODO stolen from Jak 2 (and it was all wrong...) (and now stolen from Jak 3, fun!) +(defenum vu1-renderer-mask + :type uint64 + :bitfield #t + (rn0) + (rn1) + (rn2) + (sky) + (rn4) + (rn5) + (hfrag) + (hfrag-scissor) + (tfrag) + (tie-scissor) + (tie) + (etie) + (etie-scissor) + (tie-vanish) + (generic) ;; right + (merc) ;; right + (emerc) ;; right + (shrubbery) + (shrub-near) + (billboard) + (shrub-vanish) + (tfrag-trans) + (tie-scissor-trans) + (tie-trans) + (etie-trans) + (etie-scissor-trans) + (tfrag-water) + (tie-scissor-water) + (tie-water) + (etie-water) + (etie-scissor-water) + (sprite) + (rn32) + (rn33) + (rn34) + (rn35) + (rn36) + (rn37) + ) +;; ---vu1-user-h:vu1-renderer-mask + +(deftype dma-foreground-sink (basic) + "A specification for where a foreground renderer should output its DMA data." + ((bucket bucket-id :offset-assert 4) ;; bucket-id + (foreground-texture-page tpage-category :offset-assert 8) ;; tpage-category + (foreground-texture-level int8 :offset-assert 9) + (foreground-output-bucket int8 :offset-assert 10) + ) + :method-count-assert 9 + :size-assert #xb + :flag-assert #x90000000b + ) + +(deftype generic-bucket-state (structure) + "The state of buffers for the generic renderer. + When generating generic DMA data, you must know the previous state + of the VU's memory to properly double-buffer the input and output data." + ((gifbuf-adr uint32 :offset-assert 0) + (inbuf-adr uint32 :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype generic-dma-foreground-sink (dma-foreground-sink) + "A specification for where a foreground generic renderer should output DMA data, + and the state of the VU memory buffers at the end of the bucket." + ((state generic-bucket-state :inline :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; profile-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type dma-buffer structure) + +(deftype profile-segment (structure) + "Confusingly, this has two uses. Either a single event, or a summary of all events within a category." + ((name symbol :offset-assert 0) ;; guessed by decompiler + (start-time int16 :offset-assert 4) + (end-time int16 :offset-assert 6) + (count uint8 :offset-assert 8) + (vu-count uint8 :offset-assert 9) + (depth uint16 :offset-assert 10) + (color rgba :offset-assert 12) ;; guessed by decompiler + (code-time uint16 :offset-assert 4 :overlay-at start-time) + (vu-time uint16 :offset-assert 6 :overlay-at end-time) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype profile-collapse (structure) + "An array of 'summaries'. Each entry in data is a summary of all events within a category." + ((count int32 :offset-assert 0) + (data profile-segment 48 :inline :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x304 + :flag-assert #x900000304 + ) + +(deftype profile-segment-array (basic) + "All profiling data for a frame, stored as a tree of events. There is one for the VU, and one for the EE." + ((count int16 :offset-assert 4) + (depth int8 :offset-assert 6) + (max-depth int8 :offset-assert 7) + (base-time int16 :offset-assert 8) + (segment profile-segment 9 :offset-assert 12) ;; guessed by decompiler + (data profile-segment 2100 :inline :offset-assert 48) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #x8370 + :flag-assert #xd00008370 + (:methods + (get-total-time "Get the duration of the top-level event (typically, the whole frame)" (_type_) int) ;; 9 + (start-frame! "Restart the profiler for the start of a frame." (_type_) none) ;; 10 + (start-segment! "Start an event." (_type_ symbol rgba) none) ;; 11 + (end-segment! "Stop the most recently started event." (_type_) none) ;; 12 + ) + ) + +(deftype profile-array (structure) + "The EE and VU profilers, and the drawing code." + ((data profile-segment-array 2 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x8 + :flag-assert #xc00000008 + (:methods + (postprocess-data! "Create the collapsed summary of the collected data." (_type_) none) ;; 9 + (draw-bars! "Generate DMA data for drawing the profile bars." (_type_ dma-buffer int) none) ;; 10 + (draw-text! "Generate DMA data for drawing the profile information screen." (_type_) none) ;; 11 + ) + ) + +(deftype profile-spec (structure) + "Specification for a profile category." + ((name symbol :offset-assert 0) ;; guessed by decompiler + (color rgba :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(define-extern *profile-gap-color* rgba) ;; +(define-extern *profile-all-color* rgba) ;; rgba +(define-extern *profile-blit-color* rgba) ;; rgba +(define-extern *profile-sky-color* rgba) ;; rgba +(define-extern *profile-ocean-color* rgba) ;; rgba +(define-extern *profile-tfrag-color* rgba) ;; rgba +(define-extern *profile-texture-color* rgba) ;; rgba +(define-extern *profile-tie-color* rgba) +(define-extern *profile-generic-color* rgba) +(define-extern *profile-merc-color* rgba) ;; rgba +(define-extern *profile-shrubbery-color* rgba) +(define-extern *profile-particle-color* rgba) +(define-extern *profile-debug-color* rgba) ;; rgba +(define-extern *profile-other-color* rgba) +(define-extern *profile-joints-color* rgba) ;; rgba +(define-extern *profile-draw-hook-color* rgba) ;; rgba +(define-extern *profile-background-color* rgba) ;; rgba +(define-extern *profile-foreground-color* rgba) ;; rgba +(define-extern *profile-bones-color* rgba) ;; rgba +(define-extern *profile-actors-color* rgba) ;; rgba +(define-extern *profile-collide-color* rgba) ;; rgba +(define-extern *profile-nav-color* rgba) ;; rgba +(define-extern *profile-camera-color* rgba) ;; rgba +(define-extern *profile-gs-sync-color* rgba) +(define-extern *profile-array* profile-array) ;; profile-array +(define-extern *profile-collapse* profile-collapse) ;; profile-collapse +(define-extern *profile-interrupt-segment* profile-segment-array) ;; profile-segment-array +(define-extern *profile-interrupt-start* symbol) ;; symbol + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dma ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern dma-sync-hang (function dma-bank none)) +(define-extern dma-sync-crash (function dma-bank none)) +(define-extern dma-send (function dma-bank uint uint none)) +(define-extern dma-send-chain (function dma-bank-source uint none)) +(define-extern dma-send-chain-no-tte (function dma-bank-source uint none)) +(define-extern dma-send-chain-no-flush (function dma-bank-source uint none)) +(define-extern dma-send-to-spr (function uint uint uint symbol none)) +(define-extern dma-send-to-spr-no-flush (function uint uint uint symbol none)) +(define-extern dma-send-from-spr (function uint uint uint symbol none)) +(define-extern dma-send-from-spr-no-flush (function uint uint uint symbol none)) +(define-extern dma-initialize (function none)) +(define-extern clear-vu0-mem (function none)) +(define-extern clear-vu1-mem (function none)) +(define-extern dump-vu1-mem (function none)) +(define-extern dump-vu1-range (function uint uint symbol)) +(define-extern reset-vif1-path (function none)) +(define-extern ultimate-memcpy (function pointer pointer uint none)) +(define-extern symlink2 (function none)) +(define-extern symlink3 (function none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dma-buffer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype dma-packet (structure) + "The header for a DMA transfer, containing an DMA tag, and VIF tags." + ((dma dma-tag :offset-assert 0) ;; dma-tag + (vif0 vif-tag :offset-assert 8) ;; guessed by decompiler + (vif1 vif-tag :offset-assert 12) ;; guessed by decompiler + (quad uint128 :offset-assert 0 :overlay-at dma) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype dma-packet-array (inline-array-class) + "Unused dma array. Unclear how it should be used." + ((data dma-packet :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype dma-gif (structure) + "Believed unused GIF header type." + ((gif uint64 2 :offset-assert 0) ;; guessed by decompiler + (gif0 uint64 :overlay-at (-> gif 0) :score 1) + (gif1 uint64 :overlay-at (-> gif 1) :score 1) + (quad uint128 :offset-assert 0 :overlay-at gif) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype dma-gif-packet (structure) + "The header for a DMA transfer that goes directly to GIF, containing DMA, VIF, GIF tags." + ((dma-vif dma-packet :inline :offset-assert 0) + (gif uint64 2 :offset-assert 16) ;; guessed by decompiler + (gif0 uint64 :offset 16 :score -1) + (gif1 uint64 :offset 24 :score -1) + (quad uint128 2 :offset-assert 0 :overlay-at dma-vif) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype dma-buffer (basic) + "A buffer for DMA data." + ((allocated-length int32 :offset-assert 4) + (base pointer :offset-assert 8) ;; guessed by decompiler + (end pointer :offset-assert 12) ;; guessed by decompiler + (real-buffer-end int32 :offset-assert 16) + (data-buffer uint8 :dynamic :offset 16) ;; added + (data uint64 1 :offset 32) ;; guessed by decompiler + ) + (:methods + (new "Allocate a DMA buffer to hold the given size" (symbol type int) _type_) ;; 0 + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + (:methods + (new (symbol type int) _type_) ;; 0 + ) + ) + +(define-extern dma-buffer-inplace-new + "Create a dma-buffer in-place. Does not set the type of the dma-buffer object." + (function dma-buffer int dma-buffer)) +(define-extern dma-buffer-length + "Get length used in quadwords, rounded up." + (function dma-buffer int)) +(define-extern dma-buffer-free + "Get the number of free quadwords between base and end pointers." + (function dma-buffer int)) +(define-extern dma-buffer-add-vu-function + "Add DMA tags to load the given VU function. The destination in vu instruction memory + is specific inside the vu-function. This does NOT copy the vu-function into the buffer, + but creates a reference to the existing VU function." (function dma-buffer vu-function int symbol)) +(define-extern dma-buffer-send + "Send the DMA buffer! DOES NOT TRANSFER TAG, you probably want dma-buffer-send-chain instead." + (function dma-bank dma-buffer none)) +(define-extern dma-buffer-send-chain + "Send the DMA buffer! Sends the tags, so this is suitable for the main graphics chain." + (function dma-bank-source dma-buffer none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dma-bucket ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern dma-buffer-add-buckets "Initialize an array of dma-buckets in a DMA buffer." (function dma-buffer int (inline-array dma-bucket))) +(define-extern dma-buffer-patch-buckets "Patch together DMA buckets after they have been filled." (function dma-bucket int dma-bucket)) +(define-extern dma-bucket-insert-tag "Add a dma chain to the bucket." (function (inline-array dma-bucket) bucket-id pointer (pointer dma-tag) pointer)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dma-disasm ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vif-disasm-element (structure) + ((mask uint32 :offset-assert 0) + (tag vif-cmd-32 :offset-assert 4) ;; guessed by decompiler + (val uint32 :offset-assert 8) + (print uint32 :offset-assert 12) + (string1 string :offset-assert 16) ;; guessed by decompiler + (string2 string :offset-assert 20) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +;; (define-extern *vif-disasm-table* array) ;; (array vif-disasm-element) +;; (define-extern disasm-vif-details function) ;; (function symbol (pointer uint8) vif-cmd int symbol) +;; (define-extern disasm-vif-tag function) ;; (function (pointer vif-tag) int symbol symbol int) +;; (define-extern disasm-dma-tag function) ;; (function dma-tag symbol none) +;; (define-extern *dma-disasm* object) ;; symbol +;; (define-extern disasm-dma-list function) ;; (function dma-packet symbol symbol symbol int symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; view-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type camera-master process) +(declare-type camera-combiner process) +(declare-type math-camera basic) + +(declare-type process-nettable process) +(declare-type process-drawable process-nettable) +(declare-type process-focusable process-drawable) +(declare-type target process-focusable) + +(deftype view (basic) + ((index int8 :offset-assert 4) + (control-scheme uint8 :offset-assert 5) + (camera camera-master :offset-assert 8) + (camera-combiner camera-combiner :offset-assert 12) + (target basic :offset-assert 16) + (math-camera math-camera :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(define-extern *view-count* int) +(define-extern *view-assert* symbol) +(define-extern *views* (array view)) +(define-extern *view-context-stack* (array int32)) +(define-extern *view-context-stack-ptr* int) +(define-extern *view-default* int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; pad ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scf-time (structure) + ((stat uint8 :offset-assert 0) + (second uint8 :offset-assert 1) + (minute uint8 :offset-assert 2) + (hour uint8 :offset-assert 3) + (week uint8 :offset-assert 4) + (day uint8 :offset-assert 5) + (month uint8 :offset-assert 6) + (year uint8 :offset-assert 7) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype hw-cpad (basic) + ((valid uint8 :offset-assert 4) + (status uint8 :offset-assert 5) + (button0 uint16 :offset-assert 6) + (rightx uint8 :offset-assert 8) + (righty uint8 :offset-assert 9) + (leftx uint8 :offset-assert 10) + (lefty uint8 :offset-assert 11) + (abutton uint8 12 :offset-assert 12) ;; guessed by decompiler + (dummy uint8 12 :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype cpad-info (hw-cpad) + ((number int32 :offset-assert 36) + (cpad-file int32 :offset-assert 40) + (button0-abs pad-buttons 3 :offset-assert 44) ;; guessed by decompiler + (button0-shadow-abs pad-buttons 1 :offset-assert 56) ;; guessed by decompiler + (button0-rel pad-buttons 3 :offset-assert 60) ;; guessed by decompiler + (stick0-dir float :offset-assert 72) + (stick0-speed float :offset-assert 76) + (new-pad int32 :offset-assert 80) + (state int32 :offset-assert 84) + (align uint8 6 :offset-assert 88) ;; guessed by decompiler + (direct uint8 6 :offset-assert 94) ;; guessed by decompiler + (buzz-val uint8 2 :offset-assert 100) ;; guessed by decompiler + (buzz-pause-val uint8 1 :offset-assert 102) ;; guessed by decompiler + (buzz-pause-time uint8 :offset-assert 103) + (buzz-time time-frame 2 :offset-assert 104) ;; guessed by decompiler + (buzz symbol :offset-assert 120) ;; guessed by decompiler + (buzz-act int32 :offset-assert 124) + (change-time uint64 :offset-assert 128) ;; time-frame + (real-change-time uint64 :offset-assert 136) ;; time-frame + (old-rightx uint8 2 :offset-assert 144) ;; guessed by decompiler + (old-righty uint8 2 :offset-assert 146) ;; guessed by decompiler + (old-leftx uint8 2 :offset-assert 148) ;; guessed by decompiler + (old-lefty uint8 2 :offset-assert 150) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #x98 + :flag-assert #xa00000098 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (cpad-info-method-9 () none) ;; 9 ;; (adjust-to-screen-flip (_type_) int) + ) + ) +|# + +#| +(deftype cpad-list (basic) + ((num-cpads int32 :offset-assert 4) + (cpads cpad-info 2 :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype mouse-info (basic) + ((active symbol :offset-assert 4) ;; guessed by decompiler + (cursor symbol :offset-assert 8) ;; guessed by decompiler + (valid symbol :offset-assert 12) ;; guessed by decompiler + (id uint8 :offset-assert 16) + (status uint16 :offset-assert 18) + (button0 uint16 :offset-assert 20) + (deltax int8 :offset-assert 22) + (deltay int8 :offset-assert 23) + (wheel uint8 :offset-assert 24) + (change-time uint64 :offset-assert 32) ;; time-frame + (button0-abs mouse-buttons 3 :offset-assert 40) ;; guessed by decompiler + (button0-shadow-abs mouse-buttons 1 :offset-assert 52) ;; guessed by decompiler + (button0-rel mouse-buttons 3 :offset-assert 56) ;; guessed by decompiler + (pos vector 2 :offset-assert 80) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (posx float :offset-assert 80) + (posy float :offset-assert 84) + (oldposx float :offset-assert 96) + (oldposy float :offset-assert 100) + (speedx float :offset-assert 92) + (speedy float :offset-assert 108) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype keybd-info (basic) + ((active symbol :offset-assert 4) ;; guessed by decompiler + (valid symbol :offset-assert 8) ;; guessed by decompiler + (kdata uint8 16 :offset-assert 12) ;; guessed by decompiler + (keys uint8 256 :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x11c + :flag-assert #x90000011c + ) +|# + +(define-extern *cheat-mode* symbol) +;; (define-extern cpad-invalid! function) ;; (function cpad-info cpad-info) +;; (define-extern analog-input function) ;; (function int float float float float float) +;; (define-extern cpad-set-buzz! function) ;; (function cpad-info int int time-frame none) +;; (define-extern *cpad-list* object) ;; cpad-list +;; (define-extern *cpad-debug* object) ;; symbol +;; (define-extern service-cpads function) ;; (function cpad-list) +;; (define-extern buzz-stop! function) ;; (function int none) +;; (define-extern *mouse* object) ;; mouse-info +;; (define-extern service-mouse function) ;; (function none) +;; (define-extern *keybd* object) ;; keybd-info +;; (define-extern service-keybd function) ;; (function none) +;; (define-extern *usb-to-ascii-map* object) +;; (define-extern *keybd-last-key* object) +;; (define-extern *keybd-hold-ct* object) +;; (define-extern *keybd-ungetc* object) +;; (define-extern keybd-read-ascii function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++gs:gs-psm +(defenum gs-psm + :bitfield #f + :type uint8 + (ct32 0) + (ct24 1) + (ct16 2) + (ct16s 10) + (mt8 19) + (mt4 20) + (mt8h 27) + (mt4hl 36) + (mt4hh 44) + (mz32 48) + (mz24 49) + (mz16 50) + (mz16s 58) + ) +;; ---gs:gs-psm + +;; +++gs:gs-reg +(defenum gs-reg + :type uint8 + (prim 0) + (rgbaq 1) + (st 2) + (uv 3) + (xyzf2 4) + (xyz2 5) + (tex0-1 6) + (tex0-2 7) + (clamp-1 8) + (clamp-2 9) + (fog 10) + (xyzf3 12) + (xyz3 13) + (tex1-1 20) + (tex1-2 21) + (tex2-1 22) + (tex2-2 23) + (xyoffset-1 24) + (xyoffset-2 25) + (prmodecont 26) + (prmode 27) + (texclut 28) + (scanmsk 34) + (miptbp1-1 52) + (miptbp1-2 53) + (miptbp2-1 54) + (miptbp2-2 55) + (texa 59) + (fogcol 61) + (texflush 63) + (scissor-1 64) + (scissor-2 65) + (alpha-1 66) + (alpha-2 67) + (dimx 68) + (dthe 69) + (colclamp 70) + (test-1 71) + (test-2 72) + (pabe 73) + (fba-1 74) + (fba-2 75) + (frame-1 76) + (frame-2 77) + (zbuf-1 78) + (zbuf-2 79) + (bitbltbuf 80) + (trxpos 81) + (trxreg 82) + (trxdir 83) + (hwreg 84) + (signal 96) + (finish 97) + (label 98) + (hack 127) + ) +;; ---gs:gs-reg + +;; +++gs:gs-reg64 +(defenum gs-reg64 + :type uint64 + :copy-entries gs-reg + ) +;; ---gs:gs-reg64 + +;; +++gs:gs-reg32 +(defenum gs-reg32 + :type uint32 + :copy-entries gs-reg + ) +;; ---gs:gs-reg32 + +;; +++gs:gs-prim-type +(defenum gs-prim-type + :type uint8 + (point 0) + (line 1) + (line-strip 2) + (tri 3) + (tri-strip 4) + (tri-fan 5) + (sprite 6) + ) +;; ---gs:gs-prim-type + +(deftype gs-pmode (uint64) + ((en1 uint8 :offset 0 :size 1) + (en2 uint8 :offset 1 :size 1) + (crtmd uint8 :offset 2 :size 3) + (mmod uint8 :offset 5 :size 1) + (amod uint8 :offset 6 :size 1) + (slbg uint8 :offset 7 :size 1) + (alp uint8 :offset 8 :size 8) + ) + :flag-assert #x900000008 + ) + +(deftype gs-smode2 (uint64) + ((int uint8 :offset 0 :size 1) + (ffmd uint8 :offset 1 :size 1) + (dpms uint8 :offset 2 :size 2) + ) + :flag-assert #x900000008 + ) + +(deftype gs-display-fb (uint64) + ((fbp uint16 :offset 0 :size 9) + (fbw uint8 :offset 9 :size 6) + (psm gs-psm :offset 15 :size 5) + (dbx uint16 :offset 32 :size 11) + (dby uint16 :offset 43 :size 11) + ) + :flag-assert #x900000008 + ) + +(deftype gs-display (uint64) + "the GS's DISPLAY registers make settings for the display position on the screen regarding + information on Rectangular Area Read Output Circuit n for the PCRTC. + write-only" + ((dx uint16 :offset 0 :size 12) + (dy uint16 :offset 12 :size 11) + (magh uint8 :offset 23 :size 4) + (magv uint8 :offset 27 :size 2) + (dw uint16 :offset 32 :size 12) + (dh uint16 :offset 44 :size 11) + ) + :flag-assert #x900000008 + ) + +(deftype gs-bgcolor (uint64) + "The GS's BGCOLOR register sets the background color of the PCRTC with RGB value. + write-only" + ((r uint8 :offset 0) + (g uint8 :offset 8) + (b uint8 :offset 16) + ) + :flag-assert #x900000008 + ) + +(deftype gs-csr (uint64) + "The GS's CSR register sets and obtains various GS statuses. + read-write. The fields have different effects depending on whether they're being read from + or written to. + + Bits 5 and 6 (0x20 and 0x40) should be zero." + ((signal uint8 :offset 0 :size 1) + (finish uint8 :offset 1 :size 1) + (hsint uint8 :offset 2 :size 1) + (vsint uint8 :offset 3 :size 1) + (edwint uint8 :offset 4 :size 1) + (flush uint8 :offset 8 :size 1) + (reset uint8 :offset 9 :size 1) + (nfield uint8 :offset 12 :size 1) + (field uint8 :offset 13 :size 1) + (fifo uint8 :offset 14 :size 2) + (rev uint8 :offset 16 :size 8) + (id uint8 :offset 24 :size 8) + ) + :flag-assert #x900000008 + ) + +(deftype gs-bank (structure) + "Memory layout of the GS's privileged registers (mapped to EE memory). + It is missing the SIGLBLID/LABELID register at 4224 (useless anyway?)" + ((pmode gs-pmode :offset-assert 0) ;; gs-pmode + (smode2 gs-smode2 :offset 32) ;; gs-smode2 + (dspfb1 gs-display-fb :offset 112) ;; gs-display-fb + (display1 gs-display :offset 128) ;; gs-display + (dspfb2 gs-display-fb :offset 144) ;; gs-display-fb + (display2 gs-display :offset 160) ;; gs-display + (extbuf uint64 :offset 176) + (extdata uint64 :offset 192) + (extwrite uint64 :offset 208) + (bgcolor gs-bgcolor :offset 224) ;; gs-bgcolor + (csr gs-csr :offset 4096) ;; gs-csr + (imr uint64 :offset 4112) + (busdir uint64 :offset 4160) + ) + :method-count-assert 9 + :size-assert #x1048 + :flag-assert #x900001048 + ) + +(deftype gs-frame (uint64) + ((fbp uint16 :offset 0 :size 9) + (fbw uint8 :offset 16 :size 6) + (psm gs-psm :offset 24 :size 6) + (fbmsk uint32 :offset 32 :size 32) + ) + :flag-assert #x900000008 + ) + +(deftype gs-zbuf (uint64) + "The GS's ZBUF registers make various settings regarding Z buffer." + ((zbp uint16 :offset 0 :size 9) + (psm gs-psm :offset 24 :size 4) + (zmsk uint8 :offset 32 :size 1) + ) + :flag-assert #x900000008 + ) + +(deftype gs-xy-offset (uint64) + "The GS's XYOFFSET registers set the offset value for converting from the primitive coordinate + system to the window coordinate system." + ((ofx uint16 :offset 0 :size 16) + (ofy uint16 :offset 32 :size 16) + ) + :flag-assert #x900000008 + ) + +(deftype gs-scissor (uint64) + "The GS's SCISSOR registers specify the scissoring area. The coordinate values for + the upper-left/lower-right points of the enabled drawing area are specified by the window + coordinate system." + ((scax0 uint16 :offset 0 :size 11) + (scax1 uint16 :offset 16 :size 11) + (scay0 uint16 :offset 32 :size 11) + (scay1 uint16 :offset 48 :size 11) + ) + :flag-assert #x900000008 + ) + +(deftype gs-prmode-cont (uint64) + "The GS's PRMODECONT register sets whether to use primitive attributes (IIP, TME, FGE, ABE, + AA1, FST, CTXT, FIX) specified by the PRMODE register or the PRIM register." + ((ac uint8 :offset 0 :size 1) + ) + :flag-assert #x900000008 + ) + +(deftype gs-color-clamp (uint64) + "The GS's COLCLAMP register stores settings as to whether clamping for the RGB value of the + pixel is performed." + ((clamp uint8 :offset 0 :size 1) + ) + :flag-assert #x900000008 + ) + +(deftype gs-dthe (uint64) + "The GS's DTHE register stores settings for dithering (performed/not performed)." + ((dthe uint8 :offset 0 :size 1)) + :flag-assert #x900000008 + ) + +;; +++gs:gs-atest +(defenum gs-atest + :type uint8 + (never 0) + (always 1) + (less 2) + (less-equal 3) + (equal 4) + (greater-equal 5) + (greater 6) + (not-equal 7) + ) +;; ---gs:gs-atest + +;; +++gs:gs-ztest +(defenum gs-ztest + :type uint8 + (never 0) + (always 1) + (greater-equal 2) + (greater 3) + ) +;; ---gs:gs-ztest + +(deftype gs-test (uint64) + "The GS's TEST register performs settings related to the pixel test." + ((ate uint8 :offset 0 :size 1) ;; alpha test enable + (atst gs-atest :offset 1 :size 3) ;; alpha test method + (aref uint8 :offset 4 :size 8) ;; alpha val reference + (afail uint8 :offset 12 :size 2) ;; processing method on alpha test fail + (date uint8 :offset 14 :size 1) ;; dest alpha test enable + (datm uint8 :offset 15 :size 1) ;; dest alpha test mode + (zte uint8 :offset 16 :size 1) ;; depth test enable + (ztst gs-ztest :offset 17 :size 2) ;; depth test method + ) + :flag-assert #x900000008 + ) + +(deftype gs-prim (uint64) + ((prim gs-prim-type :offset 0 :size 3) + (iip uint8 :offset 3 :size 1) + (tme uint8 :offset 4 :size 1) + (fge uint8 :offset 5 :size 1) + (abe uint8 :offset 6 :size 1) + (aa1 uint8 :offset 7 :size 1) + (fst uint8 :offset 8 :size 1) + (ctxt uint8 :offset 9 :size 1) + (fix uint8 :offset 10 :size 1) + ) + :flag-assert #x900000008 + ) + +(deftype gs-rgbaq (uint64) + "The GS's RGBAQ register sets the RGBA value of the vertex and the Q value of the normalized + texture coordinates." + ((r uint8 :offset 0 :size 8) + (g uint8 :offset 8 :size 8) + (b uint8 :offset 16 :size 8) + (a uint8 :offset 24 :size 8) ;; 0x80 --> 1.0 + (q float :offset 32 :size 32) ;; affects some LOD behavior apparently? + ) + :flag-assert #x900000008 + ) + +(deftype gs-xyz (uint64) + ((x uint16 :offset 0 :size 16) ;; Q4 fixed point + (y uint16 :offset 16 :size 16) ;; Q4 fixed point + (z uint32 :offset 32 :size 32) + ) + :flag-assert #x900000008 + ) + +(deftype gs-uv (uint64) + "The GS's UV register specifies the texel coordinate (UV) values of the vertex." + ((u uint16 :offset 0 :size 16) ;; Q4 fixed point + (v uint16 :offset 16 :size 16) ;; Q4 fixed point + ) + :flag-assert #x900000008 + ) + +(deftype gs-st (uint64) + "The GS's ST register sets the S and T values of the vertex texture coordinates. + The value Q is specified by the RGBAQ register." + ((s float :offset 0 :size 32) + (t float :offset 32 :size 32) + ) + :flag-assert #x900000008 + ) + +(deftype gs-xyzf (uint64) + ((x uint16 :offset 0 :size 16) ;; Q4 fixed point + (y uint16 :offset 16 :size 16) ;; Q4 fixed point + (z uint32 :offset 32 :size 24) + (f uint8 :offset 56 :size 8) ;; fog coeff + ) + :flag-assert #x900000008 + ) + +(deftype gs-adcmd (structure) + ((word uint32 4 :offset-assert 0 :score -10) ;; guessed by decompiler + (quad uint128 :offset 0 :score -10) + (data uint64 :offset 0 :score -10) + (cmds gs-reg64 :offset 8 :score 10) ;; gs-reg64 + (cmd uint8 :offset 8) + (x uint32 :offset 0) + (y uint32 :offset 4) + (z uint32 :offset 8) + (w uint32 :offset 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gs-trxpos (uint64) + "The GS's TRXPOS register specifies the position and + scanning direction of the rectangular area + in each buffer where buffer transmission is performed." + ((ssax uint16 :offset 0 :size 11) + (ssay uint16 :offset 16 :size 11) + (dsax uint16 :offset 32 :size 11) + (dsay uint16 :offset 48 :size 11) + (dir uint8 :offset 59 :size 2) + ) + :flag-assert #x900000008 + ) + +(deftype gs-trxreg (uint64) + "The GS's TRXREG register specifies the size of the rectangular area, where the transmission + between buffers is implemented, in units of pixels. + The pixel mode must be the one set by the BITBLTBUF register." + ((rrw uint16 :offset 0 :size 12) + (rrh uint16 :offset 32 :size 12) + ) + :flag-assert #x900000008 + ) + +(deftype gs-trxdir (uint64) + "The GS's TRXDIR register specifies the transmission direction in the transmission between + buffers, and activates transmission. + Appropriate settings must be made by the BITBLTBUF/TRXPOS/TRXREG before activating + the transmission." + ((xdir uint8 :offset 0 :size 2) + ) + :flag-assert #x900000008 + ) + +(deftype gs-bitbltbuf (uint64) + "The GS's BITBLTBUF register stores buffer-related settings for transmission source and + destination during transmission between buffers." + ((sbp uint16 :offset 0 :size 14) + (sbw uint8 :offset 16 :size 6) + (spsm uint8 :offset 24 :size 6) + (dbp uint16 :offset 32 :size 14) + (dbw uint8 :offset 48 :size 6) + (dpsm gs-psm :offset 56 :size 6) + ) + :flag-assert #x900000008 + ) + +(deftype gs-tex0 (uint64) + "The GS's TEX0 registers set various kinds of information regarding the textures to be used." + ((tbp0 uint16 :offset 0 :size 14) + (tbw uint8 :offset 14 :size 6) + (psm uint8 :offset 20 :size 6) + (tw uint8 :offset 26 :size 4) + (th uint8 :offset 30 :size 4) + (tcc uint8 :offset 34 :size 1) + (tfx uint8 :offset 35 :size 2) + (cbp uint16 :offset 37 :size 14) + (cpsm uint8 :offset 51 :size 4) + (csm uint8 :offset 55 :size 1) + (csa uint8 :offset 56 :size 5) + (cld uint8 :offset 61 :size 3) + ) + :flag-assert #x900000008 + ) + +(deftype gs-tex1 (uint64) + "The GS's TEX1 registers set information on the sampling method of the textures." + ((lcm uint8 :offset 0 :size 1) + (mxl uint8 :offset 2 :size 3) + (mmag uint8 :offset 5 :size 1) + (mmin uint8 :offset 6 :size 3) + (mtba uint8 :offset 9 :size 1) + (l uint8 :offset 19 :size 2) + (k int16 :offset 32 :size 12) + ) + :flag-assert #x900000008 + ) + +(deftype gs-texa (uint64) + "The GS's TEXA register sets the Alpha value to be referred to when the Alpha value of the + texture is not an 8-bit value." + ((ta0 uint8 :offset 0 :size 8) + (aem uint8 :offset 15 :size 1) + (ta1 uint8 :offset 32 :size 8) + ) + :flag-assert #x900000008 + ) + +(deftype gs-texclut (uint64) + "The GS's TEXCLUT register specifies the CLUT position in the buffer when the CLUT storage mode + is CSM=1 (CSM2 mode)." + ((cbw uint8 :offset 0 :size 6) + (cou uint8 :offset 6 :size 6) + (cov uint16 :offset 12 :size 10) + ) + :flag-assert #x900000008 + ) + +(deftype gs-miptbp (uint64) + "the GS's MIPTBP registers set the buffer pointer and buffer width of textures when performing + MIPMAP. MIPTBP1 sets levels 1 to 3, MIPTBP2 sets levels 4 to 6." + ((tbp1 uint16 :offset 0 :size 14) + (tbw1 uint8 :offset 14 :size 6) + (tbp2 uint16 :offset 20 :size 14) + (tbw2 uint8 :offset 34 :size 6) + (tbp3 uint16 :offset 40 :size 14) + (tbw3 uint8 :offset 54 :size 6) + ) + :flag-assert #x900000008 + ) + +(deftype gs-alpha (uint64) + ((a uint8 :offset 0 :size 2) + (b uint8 :offset 2 :size 2) + (c uint8 :offset 4 :size 2) + (d uint8 :offset 6 :size 2) + (fix uint8 :offset 32 :size 8) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; +++gs:gs-tex-wrap-mode +(defenum gs-tex-wrap-mode + :type uint8 + (repeat 0) + (clamp 1) + (region-clamp 2) + (region-repeat 3) + ) +;; ---gs:gs-tex-wrap-mode + +(deftype gs-clamp (uint64) + ((wms gs-tex-wrap-mode :offset 0 :size 2) + (wmt gs-tex-wrap-mode :offset 2 :size 2) + (minu uint16 :offset 4 :size 10) + (maxu uint16 :offset 14 :size 10) + (minv uint16 :offset 24 :size 10) + (maxv uint16 :offset 34 :size 10) + ) + :flag-assert #x900000008 + ) + +(deftype gs-fog (uint64) + ((f uint8 :offset 56 :size 8) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype gs-fogcol (uint64) + ((fcr uint8 :offset 0 :size 8) + (fcg uint8 :offset 8 :size 8) + (fcb uint8 :offset 16 :size 8) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype gif-ctrl (uint32) + ((rst uint8 :offset 0 :size 1) + (pse uint8 :offset 3 :size 1) + ) + :flag-assert #x900000004 + ) + +(deftype gif-mode (uint32) + ((m3r uint8 :offset 0 :size 1) + (imt uint8 :offset 2 :size 1) + ) + :flag-assert #x900000004 + ) + +(deftype gif-stat (uint32) + ((m3r uint8 :offset 0 :size 1) + (m3p uint8 :offset 1 :size 1) + (imt uint8 :offset 2 :size 1) + (pse uint8 :offset 3 :size 1) + (ip3 uint8 :offset 5 :size 1) + (p3q uint8 :offset 6 :size 1) + (p2q uint8 :offset 7 :size 1) + (p1q uint8 :offset 8 :size 1) + (oph uint8 :offset 9 :size 1) + (apath uint8 :offset 10 :size 2) + (dir uint8 :offset 12 :size 1) + (fqc uint8 :offset 24 :size 5) + ) + :flag-assert #x900000004 + ) + +(deftype gif-cnt (uint32) + ((loopcnt uint16 :offset 0 :size 15) + (regcnt uint8 :offset 16 :size 4) + (vuaddr uint16 :offset 20 :size 10) + ) + :flag-assert #x900000004 + ) + +(deftype gif-p3cnt (uint32) + ((p3cnt uint16 :offset 0 :size 15) + ) + :flag-assert #x900000004 + ) + +(deftype gif-p3tag (uint32) + ((loopcnt uint16 :offset 0 :size 15) + (eop uint8 :offset 15 :size 1) + ) + :flag-assert #x900000004 + ) + +(deftype gif-bank (structure) + ((ctrl gif-ctrl :offset 0) ;; guessed by decompiler + (mode gif-mode :offset 16) ;; guessed by decompiler + (stat gif-stat :offset 32) ;; guessed by decompiler + (tag0 uint32 :offset 64) + (tag1 uint32 :offset 80) + (tag2 uint32 :offset 96) + (tag3 uint32 :offset 112) + (cnt gif-cnt :offset 128) ;; guessed by decompiler + (p3cnt gif-p3cnt :offset 144) ;; guessed by decompiler + (p3tag gif-p3tag :offset 160) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xa4 + :flag-assert #x9000000a4 + ) + +;; +++gs:gif-flag +(defenum gif-flag + :type uint8 + (packed 0) + (reg-list 1) + (image 2) + (disable 3) + ) +;; ---gs:gif-flag + +(deftype gif-tag-prim (uint32) + ((id uint16 :offset 0 :size 14) + (pre uint8 :offset 14 :size 1) + (prim gs-prim :offset 15 :size 11) + (flg gif-flag :offset 26 :size 2) + (nreg uint8 :offset 28 :size 4) + ) + :flag-assert #x900000004 + ) + +(deftype gif-tag-count (uint32) + ((nloop uint16 :offset 0 :size 15) + (eop uint8 :offset 15 :size 1) + ) + :flag-assert #x900000004 + ) + +;; +++gs:gif-reg-id +(defenum gif-reg-id + :type uint8 + (prim 0) + (rgbaq 1) + (st 2) + (uv 3) + (xyzf2 4) + (xyz2 5) + (tex0-1 6) + (tex0-2 7) + (clamp-1 8) + (clamp-2 9) + (fog 10) + (xyzf3 12) + (xyz3 13) + (a+d 14) + (nop 15) + ) +;; ---gs:gif-reg-id + +(deftype gif-tag64 (uint64) + ((nloop uint16 :offset 0 :size 15) + (eop uint8 :offset 15 :size 1) + (id uint16 :offset 32 :size 14) + (pre uint8 :offset 46 :size 1) + (prim gs-prim :offset 47 :size 11) + (flg gif-flag :offset 58 :size 2) + (nreg uint8 :offset 60 :size 4) + ) + :flag-assert #x900000008 + ) + +(deftype gif-tag (uint128) + ((nloop uint16 :offset 0 :size 15) + (eop uint8 :offset 15 :size 1) + (id uint16 :offset 32 :size 14) + (pre uint8 :offset 46 :size 1) + (prim uint16 :offset 47 :size 11) + (flg gif-flag :offset 58 :size 2) + (nreg uint8 :offset 60 :size 4) + (regs0 gif-reg-id :offset 64 :size 4) + (regs1 gif-reg-id :offset 68 :size 4) + (regs2 gif-reg-id :offset 72 :size 4) + (regs3 gif-reg-id :offset 76 :size 4) + (regs4 gif-reg-id :offset 80 :size 4) + (regs5 gif-reg-id :offset 84 :size 4) + (regs6 gif-reg-id :offset 88 :size 4) + (regs7 gif-reg-id :offset 92 :size 4) + (regs8 gif-reg-id :offset 96 :size 4) + (regs9 gif-reg-id :offset 100 :size 4) + (regs10 gif-reg-id :offset 104 :size 4) + (regs11 gif-reg-id :offset 108 :size 4) + (regs12 gif-reg-id :offset 112 :size 4) + (regs13 gif-reg-id :offset 116 :size 4) + (regs14 gif-reg-id :offset 120 :size 4) + (regs15 gif-reg-id :offset 124 :size 4) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gif-tag-regs (uint64) + ((regs0 gif-reg-id :offset 0 :size 4) + (regs1 gif-reg-id :offset 4 :size 4) + (regs2 gif-reg-id :offset 8 :size 4) + (regs3 gif-reg-id :offset 12 :size 4) + (regs4 gif-reg-id :offset 16 :size 4) + (regs5 gif-reg-id :offset 20 :size 4) + (regs6 gif-reg-id :offset 24 :size 4) + (regs7 gif-reg-id :offset 28 :size 4) + (regs8 gif-reg-id :offset 32 :size 4) + (regs9 gif-reg-id :offset 36 :size 4) + (regs10 gif-reg-id :offset 40 :size 4) + (regs11 gif-reg-id :offset 44 :size 4) + (regs12 gif-reg-id :offset 48 :size 4) + (regs13 gif-reg-id :offset 52 :size 4) + (regs14 gif-reg-id :offset 56 :size 4) + (regs15 gif-reg-id :offset 60 :size 4) + ) + ) + +(deftype gif-tag-regs-32 (uint32) + ((regs0 gif-reg-id :offset 0 :size 4) + (regs1 gif-reg-id :offset 4 :size 4) + (regs2 gif-reg-id :offset 8 :size 4) + (regs3 gif-reg-id :offset 12 :size 4) + (regs4 gif-reg-id :offset 16 :size 4) + (regs5 gif-reg-id :offset 20 :size 4) + (regs6 gif-reg-id :offset 24 :size 4) + (regs7 gif-reg-id :offset 28 :size 4) + ) + ) + +(deftype gs-gif-tag (structure) + ((qword qword :inline :offset-assert 0 :score -1) ;; uint128 + (tag gif-tag64 :offset 0) ;; gif-tag64 + (regs gif-tag-regs :offset 8) ;; gif-tag-regs + (dword uint64 2 :offset 0) ;; guessed by decompiler + (word uint32 4 :offset 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gif-packet (basic) + "Unused type for building a dynamically sized gif packet." + ((reg-count int32 :offset-assert 4) + + (gif-tag gs-gif-tag :inline :offset-assert 16) ;; added + (gif-tag0 uint128 :offset 16) + (args uint64 1 :offset-assert 32) ;; guessed by decompiler + ) + (:methods + (new (symbol type int) _type_) ;; 0 + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) + +(deftype draw-context (basic) + ((orgx int32 :offset-assert 4) + (orgy int32 :offset-assert 8) + (orgz int32 :offset-assert 12) + (width int32 :offset-assert 16) + (height int32 :offset-assert 20) + (color rgba 4 :offset-assert 24) + ) + (:methods + (new (symbol type int int int int rgba) _type_) ;; 0 + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) + +(deftype gs-packed-rgba (vector4w) + ((r int32 :offset 0) + (g int32 :offset 4) + (b int32 :offset 8) + (a int32 :offset 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gs-packed-xyzw (vector) + ((ix int32 :offset 0 :score 10) + (iy int32 :offset 4 :score 10) + (iz int32 :offset 8 :score 10) + (iw int32 :offset 12 :score 10) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gs-packed-stq (vector) + ((tex-s float :offset 0) + (tex-t float :offset 4) + (tex-q float :offset 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gs-packed-uv (vector) + ((u int16 :offset 0) + (v int16 :offset 4) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gs-packed-gt (structure) + ((stq gs-packed-stq :inline :offset 0) + (rgba gs-packed-rgba :inline :offset 16) + (xyzw gs-packed-xyzw :inline :offset 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype gs-packed-gt4 (structure) + ((data gs-packed-gt 4 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + +(define-extern psm-size "Convert texture format to some type of size." (function gs-psm int)) +(define-extern psm-page-height "Convert texture format to some type of page height." (function gs-psm int)) +(define-extern psm->string "Get the name of a texture format." (function gs-psm string)) +(define-extern *fog-color* rgba) +(define-extern open-gif-packet "Initialize an existing gif-packet for 0 registers." (function gif-packet gif-packet)) +(define-extern add-reg-gif-packet "Add a register + value to the packet." (function gif-packet int int none)) +(define-extern close-gif-packet "Finish adding registers." (function gif-packet int gif-packet)) +(define-extern draw-context-set-xy "Set the origin of the draw context." (function draw-context int int none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; display-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype display-frame (basic) + ((buffer dma-buffer 11 :offset-assert 4) ;; guessed by decompiler + (calc-buf dma-buffer :offset 8) ;; guessed by decompiler + (vu1-buf dma-buffer :offset 8) ;; guessed by decompiler + (debug-buf dma-buffer :offset 36) ;; guessed by decompiler + (global-buf dma-buffer :offset 40) ;; guessed by decompiler + (bucket-group (inline-array dma-bucket) :offset 44) ;; (inline-array dma-bucket) + (profile-array profile-array :inline :offset 48) + (start-time uint64 :offset 56) + (run-time uint64 :offset 64) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + (:methods + (new (symbol type) _type_) ;; 0 + ) + ) + +(deftype display (basic) + ((on-screen int32 :offset-assert 4) + (last-screen int32 :offset-assert 8) + (frames display-frame 2 :offset-assert 12) ;; guessed by decompiler + (bgcolor gs-bgcolor :offset-assert 24) ;; gs-bgcolor + (pmode gs-pmode :offset-assert 32) ;; gs-pmode + (clock clock 22 :offset-assert 40) ;; guessed by decompiler + (session-clock clock :offset 40) ;; guessed by decompiler + (game-clock clock :offset 44) ;; guessed by decompiler + (base-clock clock :offset 48) ;; guessed by decompiler + (real-clock clock :offset 52) ;; guessed by decompiler + (frame-clock clock :offset 56) ;; guessed by decompiler + (real-frame-clock clock :offset 60) ;; guessed by decompiler + (target-clock clock :offset 64) ;; guessed by decompiler + (entity-clock clock :offset 68) ;; guessed by decompiler + (part-clock clock :offset 72) ;; guessed by decompiler + (bg-clock clock :offset 76) ;; guessed by decompiler + (camera-clock clock :offset 80) ;; guessed by decompiler + (total-game-clock clock :offset 84) ;; guessed by decompiler + (user0-clock clock :offset 88) ;; guessed by decompiler + (user1-clock clock :offset 92) ;; guessed by decompiler + (user2-clock clock :offset 96) ;; guessed by decompiler + (user3-clock clock :offset 100) ;; guessed by decompiler + (user4-clock clock :offset 104) ;; guessed by decompiler + (user5-clock clock :offset 108) ;; guessed by decompiler + (user6-clock clock :offset 112) ;; guessed by decompiler + (user7-clock clock :offset 116) ;; guessed by decompiler + (user8-clock clock :offset 120) ;; guessed by decompiler + (user9-clock clock :offset 124) ;; guessed by decompiler + (time-factor float :offset-assert 128) + (dog-ratio float :offset-assert 132) + (vblank-start-time int64 2 :offset-assert 136) ;; guessed by decompiler + (total-run-time uint64 :offset-assert 152) + (run-half-speed symbol :offset-assert 160) ;; guessed by decompiler + (vu1-enable-user vu1-renderer-mask :offset-assert 168) ;; vu1-renderer-mask + (vu1-enable-user-menu vu1-renderer-mask :offset-assert 176) ;; vu1-renderer-mask + (force-sync uint32 :offset-assert 184) + (mem-reserve-size uint32 :offset-assert 188) + (dma-buffer-overflow symbol :offset-assert 192) ;; guessed by decompiler + (default-end-buffer basic :offset-assert 196) + (init-buffer-zbuf-on symbol :offset-assert 200) + (init-buffer-zbuf-off symbol :offset-assert 204) + ) + :method-count-assert 10 + :size-assert #xd0 + :flag-assert #xa000000d0 + (:methods + (new (symbol type int int int int int) _type_) ;; 0 + (set-time-ratios (_type_ float) float) ;; 9 + ) + ) + +(define-extern *pre-draw-hook* (function object none)) +(define-extern *post-draw-hook* (function dma-buffer none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; geometry ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern vector-flatten! + "Get the projection of src onto a plane with the given normal + The normal should have magnitude 1.0." + (function vector vector vector vector)) +(define-extern vector-reflect! "Reflect a vector off of a plane." (function vector vector vector vector)) +(define-extern vector-reflect-flat! + "This is a weird one. It doesn't care about the value of src dot normal + and it effectively replaces the component of src normal to the plane with + the plane's normal. I think this requires src/normal to both be unit vectors + in order to make sense. + NOTE: src should point from positive halfspace to negative otherwise it + doesn't work." + (function vector vector vector vector)) +(define-extern vector-reflect-flat-above! + "Not really a reflect. Same as flatten." + (function vector vector vector vector)) +(define-extern vector-reflect-flat-gravity! (function vector vector vector vector vector)) +(define-extern vector-segment-distance-point! + "Compute the distance from a point to the closest point on the line segment. + arg0 is the point. arg1/arg2 are the endpoints of the line segment. + arg3 is an optional output closest point." + (function vector vector vector vector float)) +(define-extern vector-segment-xz-distance-point! (function vector vector vector vector float)) +(define-extern vector-line-distance + "Weird function: given a point arg1, and an infinite line connecting arg2 and arg1, compute the distance + from arg0 to that line." + (function vector vector vector float)) +(define-extern vector-line-distance-point! + "Same as above function, but returns the point on arg2/arg1 in arg3 (ignored if #f)" + (function vector vector vector vector float)) +(define-extern vector-line-xz-distance-point! (function vector vector vector vector float)) +(define-extern vector-segment-overlap + "Seems to compute (v1 - v0).dot(v2 - v1), but in a weird way." + (function vector vector vector float)) +(define-extern line-sphere-intersection? + "Does [arg1, arg2] intersect sphere arg0?" + (function vector vector vector symbol)) +(define-extern nearest-dist2-between-moving-points (function vector vector vector vector float float)) +(define-extern vector-orient-by-quat! + "Rotate a vector by a quaternion." + (function vector vector quaternion vector)) +(define-extern vector-inv-orient-by-quat! + "Rotate a vector by the inverse rotation." + (function vector vector quaternion vector)) +(define-extern vector-cap-rotation! (function vector vector vector float vector)) +(define-extern vector-interp-angle! (function vector vector vector float vector)) +(define-extern forward-down->inv-matrix + "Create a matrix representing an inverse transform where arg1 is forward (+z) + and arg2 is down (-y). Will have the pitch of forward." + (function matrix vector vector matrix)) +(define-extern forward-down-nopitch->inv-matrix + "Create a matrix representing an inverse transform where arg1 is forward (+z) + and arg2 is down (-y). Will not use the pitch of forward." + (function matrix vector vector matrix)) +(define-extern forward-up->inv-matrix + "Create a matrix representing an inverse transform where arg1 is forward (+z) + and arg2 is up (+y). Will use the pitch of forward." + (function matrix vector vector matrix)) +(define-extern forward-up-nopitch->inv-matrix + "Create a matrix representing an inverse transform where arg1 is forward (+z) + and arg2 is up (+y). Will not use the pitch of forward." + (function matrix vector vector matrix)) +(define-extern forward-up-nopitch->quaternion + "Create a quaternion representing a transform where arg1 is forward (+z) + and arg2 is up (+y). Will not use the pitch of forward." + (function quaternion vector vector quaternion)) +(define-extern forward-up->quaternion + "Create a quaternion representing a transform where arg1 is forward (+z) + and arg2 is up (+y). Will use the pitch of forward." + (function quaternion vector vector quaternion)) +(define-extern quaternion-from-two-vectors! + "Create a quaternion representing the rotation between two vectors." + (function quaternion vector vector quaternion)) +(define-extern quaternion-from-two-vectors-partial! + "Create a quaternion representing the rotation between two vectors, + doing arg3 fraction of the total rotation." + (function quaternion vector vector float quaternion)) +(define-extern quaternion-from-two-vectors-max-angle! + "Create a quaternion representing the rotation between two vectors, + allowing at most a rotation of arg3 degrees." + (function quaternion vector vector float quaternion)) +(define-extern quaternion-from-two-vectors-max-angle-partial! + "Create a quaternion representing the arg4 fraction of the rotation between two vectors, + allowing at most a rotation of arg3 degrees." + (function quaternion vector vector float float quaternion)) +(define-extern matrix-from-two-vectors! + "Create a rotation matrix representing the rotation between two vectors." + (function matrix vector vector matrix)) +(define-extern matrix-from-two-vectors-max-angle! + "Create a rotation matrix representing the rotation between two vectors, + allowing at most a rotation of arg3 degrees." + (function matrix vector vector float matrix)) +(define-extern matrix-from-two-vectors-smooth! + "This function can help smoothly rotate from a current heading vector to a target one. + It returns a rotation to move arg1 closer to arg2, subject to two different speed limits. + arg3 is a rotations-per-frame rate. This limit takes frame rate into account (when lagging, the rotation is larger) + arg4 is a 'slow down when getting close to the end' limit. + This is used in rotate-toward-orientation, which is much improved from jak 1." + (function matrix vector vector float int matrix)) +(define-extern matrix-from-two-vectors-the-long-way-smooth! + "Same as above, but rotates you away from the target. + Note that the 'near the end' smoothing will apply when you're near the target." + (function matrix vector vector float int matrix)) +(define-extern quaternion-from-two-vectors-smooth! + "Same as above, but returns a quaternion." + (function quaternion vector vector float int quaternion)) +(define-extern matrix-from-two-vectors-max-angle-partial! + "Create a rotation matrix representing the given fraction of the rotation between two heading vectors, + rotating by at most the given angle." + (function matrix vector vector float float matrix)) +(define-extern matrix-from-two-vectors-partial-linear! + "Create a rotation matrix representing doing arg3 fraction of the rotation between two vectors." + (function matrix vector vector float matrix)) +(define-extern matrix-remove-z-rot "Remove the z rotation component of a rotation." (function matrix vector matrix)) +(define-extern matrix-rot-diff! + "Get the difference of rotation between two matrices, expressed as a quaternion." + (function vector matrix matrix float)) +(define-extern quaternion-seek + "Strange quaternion rotate toward function. arg3 is ignored. arg4 is the max seek amount." + (function quaternion quaternion quaternion float float quaternion)) +(define-extern vector-deg-seek + "Make one vector closer to another, doing at most a rotation by arg3 degrees." + (function vector vector vector float vector)) +(define-extern vector-deg-slerp + "Slerp for vectors. (imagine that they are the z axis of two frames)" + (function vector vector vector float vector)) +(define-extern vector-vector-deg-slerp! "Unused. No clue what this does." (function vector vector vector float vector vector)) +(define-extern normal-of-plane + "Given three points on a plane, compute the plane's normal." + (function vector vector vector vector vector)) +(define-extern vector-3pt-cross! + "Cross product of 2 - 1 and 3 - 1. (will give a normal to the plane, but not of magnitude 1)" + (function vector vector vector vector vector)) +(define-extern closest-pt-in-triangle + "arg2 is the vertices of the triangle, arg3 is the normal, arg1 is the input point, arg0 is the output." + (function vector vector matrix vector none)) +(define-extern point-in-triangle-cross + "Check if point is in the triangle using cross product check (so you have to get the order of points right)." + (function vector vector vector vector vector symbol)) +(define-extern point-in-plane-<-point+normal! + "Very strange function. Takes a plane, in point-normal form, then returns some other point on that plane. + It will move 1m in two of {x, y, z} directions. The direction not moved in is the one which is closest to point-in-triangle-cross + in the same direction of the normal (this prevent moving huge distances for nearly vertical planes for example)." + (function vector vector vector vector)) +(define-extern circle-circle-xz-intersect + "This function is unused and really complicated, so not implementing it for now." + (function sphere sphere vector vector int)) +(define-extern circle-test "Test the circle-circle-xz-intersect function." (function none)) +(define-extern vector-circle-tangent-new "Unused." (function vector vector vector vector none)) +(define-extern vector-circle-tangent "Also unused." (function vector vector vector vector none)) +(define-extern find-knot-span + "Binary serach over knots to find which contains the value float in (arg0 arg1). Unused." + (function int int float (inline-array vector) int)) +(define-extern calculate-basis-functions-vector! + "Calculate polynomial basis for a given control point." + (function vector int float (pointer float) vector)) +(define-extern curve-evaluate! + "Evaluate a curve. + arg0 is the output + arg1 is the input. + arg2 is control vertices. + arg3 is the number of control vertices. + arg4 is the knot points. + arg5 is the number of knots." + (function vector float (inline-array vector) int (pointer float) int vector)) +(define-extern curve-get-pos! + "Get the position on the curve at the given input." + (function vector float curve vector)) +(define-extern curve-length + "Compute the approximate curve length as the sum of distances between knots." + (function curve float)) +(define-extern curve-copy! "Shallow copy a curve." (function curve curve curve)) +(define-extern curve-closest-point + "Get the input value for the point on the curve. Approximate! And is O(n_knots)." + (function curve vector float float int float float)) +(define-extern vector-plane-distance "Unused." (function vector plane vector float)) +(define-extern intersect-ray-plane + "arg1 is ray direction, arg3 is plane normal, others don't really make sense to me." + (function vector vector vector vector float)) +(define-extern line-line-find-intersection-xz (function vector vector vector vector vector float)) +(define-extern segment-segment-find-intersection-xz (function vector vector vector vector float)) +(define-extern generate-rand-vector-on-sphere (function vector vector)) +(define-extern ellipsoid-get-foci (function ellipsoid vector vector float)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; timer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern timer-count function) ;; (function timer-bank uint) +;; (define-extern disable-irq function) ;; (function none) +;; (define-extern enable-irq function) ;; (function none) +;; (define-extern stopwatch-init function) ;; (function stopwatch int) +;; (define-extern stopwatch-reset function) ;; (function stopwatch int) +;; (define-extern stopwatch-start function) ;; (function stopwatch int) +;; (define-extern stopwatch-stop function) ;; (function stopwatch none) +;; (define-extern stopwatch-begin function) ;; (function stopwatch int) +;; (define-extern stopwatch-end function) ;; (function stopwatch none) +;; (define-extern stopwatch-elapsed-ticks function) ;; (function stopwatch time-frame) +;; (define-extern stopwatch-elapsed-seconds function) ;; (function stopwatch float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vector ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern vector-cross! + "Compute the cross product. The w component is set to junk." + (function vector vector vector vector)) +(define-extern vector-xz-cross! + "Compute the cross product of the xz components of inputs." + (function vector vector vector vector)) +(define-extern vector+float! + "Add float to each component of vector. The w component is set to 1" + (function vector vector float vector)) +(define-extern vector*! "Elementwise product. Set w = 1." (function vector vector vector vector)) +(define-extern vector+*! + "set arg0 = arg1 + (arg3 * arg2). The w component will be set to 1." + (function vector vector vector float vector)) +(define-extern vector-*! + "Set arg0 = arg1 - (arg3 * arg2). The w component will be set to 1." + (function vector vector vector float vector)) +(define-extern vector/! + "Set arg0 = arg1 / arg2. The w component will be set to 1. + The implementation is kind of crazy." + (function vector vector vector vector)) +(define-extern vector-float*! + "Multiply all values in a vector by arg2. Set w to 1." + (function vector vector float vector)) +(define-extern vector-average! + "Set arg0 to the average of arg1 and arg2. Set w to 1." + (function vector vector vector vector)) +(define-extern vector+float*! "arg0 = arg1 + arg2 * arg3." (function vector vector vector float vector)) +(define-extern vector--float*! + "Set arg0 = arg1 - (arg2 * arg3). The w component will be set to 1. + Is this different from vector-*!" + (function vector vector vector float vector)) +(define-extern vector-min! (function vector vector vector vector)) +(define-extern vector-max! (function vector vector vector vector)) +(define-extern vector-float/! + "Divide all components by arg2. The w component will be set to 1." + (function vector vector float vector)) +(define-extern vector-negate! "Negate xyz, set w to 1." (function vector vector vector)) +(define-extern vector-negate-in-place! "Negate xyz. Doesn't touch w." (function vector vector)) +(define-extern vector= + "Are the two vectors equal? Does not compare the w component. + The implementation is cool." + (function vector vector symbol)) +(define-extern vector-delta + "Sum of the elementwise absolute value of differences." + (function vector vector float)) +(define-extern vector-seek! + "Seek arg0 toward arg1. The arg0 is both read and written. + arg2 is saturated to (0, 1)" + (function vector vector float vector)) +(define-extern vector-smooth-seek! + "Smoothly seek vec toward target. + The step always points toward the target and has length (dist * alpha). + If the step is longer than max-step, the step is projected onto a _square_ with side length arg2. + Note that this doesn't project to a circle like the function below..." + (function vector vector float vector)) +(define-extern vector-seek-2d-xz-smooth! + "Smoothly seek vec's x and z components toward target. + The step always points toward the target and has length (dist * alpha). + If the step is longer than max-step, the step is projected onto a circle of radius max-step. + Doesn't touch y or w." + (function vector vector float float vector)) +(define-extern vector-seek-2d-yz-smooth! + "Smoothly seek vec's y and z components toward target. + The step always points toward the target and has length (dist * alpha). + If the step is longer than max-step, the step is projected onto a circle of radius max-step. + Doesn't touch x or w." + (function vector vector float float vector)) +(define-extern vector-seek-3d-smooth! + "Smoothly seek vec's x, y, and z components toward target. + The step always points toward the target and has length (dist * alpha). + If the step is longer than max-step, the step is projected onto a circle of radius max-step. + Doesn't touch w." + (function vector vector float float vector)) +(define-extern seek-with-smooth + "Move value closer to target. + If we are within deadband, just go straight to target. + If not, try to go alpha*err. If that is a larger step than max-step, limit to max-step" + (function float float float float float float)) +(define-extern vector-identity! "Set arg0 to 1, 1, 1, 1." (function vector vector)) +(define-extern vector-seconds + "Convert from actual seconds to the seconds unit." + (function vector vector vector)) +(define-extern vector-seconds! + "Convert from actual seconds to seconds, in place." + (function vector vector)) +(define-extern vector-v! + "Convert a velocity to a displacement per frame. The velocity should be in X/actual_second. + Uses the current process clock." + (function vector vector)) +(define-extern vector-v+! + "Euler forward step, using the current display time settings." + (function vector vector vector vector)) +(define-extern vector-v*float+! + "Euler forward step, scaling velocity by velocity-scale." + (function vector vector vector float vector)) +(define-extern vector-v++! + "Update position in place, using display's current timing." + (function vector vector vector)) +(define-extern vector-v*float! + "Go from velocity to delta-p per frame, scaling by scale." + (function vector vector float vector)) +(define-extern vector-v*float++! + "Update position with given velocity, scaled by scale." + (function vector vector float vector)) +(define-extern vector-to-ups! + "Go from units per frame to units per second?" + (function vector vector vector)) +(define-extern vector-from-ups! + "Go from units per second to units per frame?" + (function vector vector vector)) +(define-extern vector-length + "Get the length of the xyz part." + (function vector float)) +(define-extern vector-length-squared + "Get the squared length of the xyz part." + (function vector float)) +(define-extern vector-xz-length-squared + "Get the length of the xz part, squared." + (function vector float)) +(define-extern vector-xz-length "Get the length of the xz part." (function vector float)) +(define-extern vector-vector-distance + "Subtract the xyz parts and get the norm." + (function vector vector float)) +(define-extern vector-vector-distance-squared + "Squared norm of the difference of the xyz parts." + (function vector vector float)) +(define-extern vector-vector-xz-distance "Distance on the xz plane." (function vector vector float)) +(define-extern vector-vector-xy-distance "distance on the xy plane." (function vector vector float)) +(define-extern vector-vector-xz-distance-squared "Distance on the xz plane squared." (function vector vector float)) +(define-extern vector-vector-planar-distance (function vector vector vector float)) +(define-extern vector-normalize! + "Modify arg0 in place to have length arg1 for its xyz components. The w part is not changed." + (function vector float vector)) +(define-extern vector-normalize-ret-len! + "Modify arg0 in place to have length arg1 for its xyz components. + The w part isn't changed and the _original_ length is returned." + (function vector float float)) +(define-extern vector-normalize-copy! + "Normalize, but not in place. + This implementation is very good compared to the vector-normalize! one. + The w component is set to 1." + (function vector vector float vector)) +(define-extern vector-xz-normalize! "Normalize, xz components only." (function vector float vector)) +(define-extern vector-xz-normalize-copy! "Normalize, xz components only." (function vector vector float vector)) +(define-extern vector-length-max! + "Make vector at most arg1 length (xyz only). + If it is larger, project onto sphere. + Doesn't touch w" + (function vector float vector)) +(define-extern vector-xz-length-max! + "Make vector at most arg1 length (xz only). + It it is larger, project onto circle. + Doesn't touch w or y." + (function vector float vector)) +(define-extern vector-rotate-around-x! "Rotate a vector around the x axis." (function vector vector float vector)) +(define-extern vector-rotate-around-y! "Rotate a vector around the y axis." (function vector vector float vector)) +(define-extern vector-rotate90-around-y! "Rotate a vector 90 degrees around y." (function vector vector vector)) +(define-extern vector-rotate-around-z! "Rotate a vector around the z axis." (function vector vector float vector)) +(define-extern rotate-y<-vector+vector + "Get the y rotation between vectors. These should have the same length." + (function vector vector float)) +(define-extern rotate-x<-vector+vector + "Get the x rotation between vectors. These should have the same length." + (function vector vector float)) +(define-extern rotate-z<-vector+vector + "Get the z rotation between vectors. These should have the same length." + (function vector vector float)) +(define-extern rotate-vector-to-vector (function vector vector vector vector)) +(define-extern vector-cvt.w.s! "Convert float to int32. Truncate." (function vector vector vector)) +(define-extern vector-cvt.s.w! "Convert float to int32." (function vector vector vector)) +(define-extern rot-zxy-from-vector! + "I think this gives you a vector of euler angles to rotate some unit vector + to arg1." + (function vector vector vector)) +(define-extern rot-zyx-from-vector! + "I think this gives you a vector of euler angles to rotate some unit vector + to arg1." + (function vector vector vector)) +(define-extern vector-world-to-local! (function vector vector vector quaternion vector)) +(define-extern vector-local-to-world! (function vector vector vector quaternion vector)) +(define-extern vector-lerp! + "Linearly interpolate between two vectors. Alpha isn't clamped. + w will be set to 1." + (function vector vector vector float vector)) +(define-extern vector-lerp-clamp! + "Linearly interpolate between two vectors, clamping alpha to 0, 1. + w will be set to 1." + (function vector vector vector float vector)) +(define-extern vector4-lerp! + "Interpolate all 4 elements of a vector. Alpha is not clamped." + (function vector vector vector float vector)) +(define-extern vector4-lerp-clamp! + "Interpolate all 4 elements of a vector. Alpha is clamped to [0, 1]." + (function vector vector vector float vector)) +(define-extern vector4w-lerp! (function vector4w vector4w vector4w float vector4w)) +(define-extern vector-degi + "Convert a vector (in _rotations_) to degrees units, stored in an int. + Truncates to the nearest _rotation_. + Neither the input or output is a commonly used form. + Unsurprisingly, this strange function is never used." + (function vector vector vector)) +(define-extern vector-degf + "Convert a vector (in integer degree units) to floating point rotations. + Truncates to the nearest _rotation_. + Like the previous function, this is stupid and unused." + (function vector vector vector)) +(define-extern vector-degmod + "This one is actually right. Wraps degrees units (in floats, like they should be) + to +/- half a rotation." + (function vector vector vector)) +(define-extern vector-deg-diff + "Wrapped difference, degrees units. Will have the usual 16-bit accuracy issue." + (function vector vector vector none)) +(define-extern vector-deg-lerp-clamp! + "Apply deg-lerp-clamp to the xyz components of a vector. Sets w = 1." + (function vector vector vector float vector)) +(define-extern vector3s-copy! (function vector vector vector)) +(define-extern vector3s+! (function vector vector vector vector)) +(define-extern vector3s*float! (function vector vector float vector)) +(define-extern vector3s-! (function vector vector vector vector)) +(define-extern vector4-add! "Add 2 vector4s." (function vector4 vector4 vector4 none)) +(define-extern vector4-sub! "Subtract 2 vector4s." (function vector4 vector4 vector4 none)) +(define-extern vector4-mul! "Multiple 2 vector4s." (function vector4 vector4 vector4 none)) +(define-extern vector4-scale! "arg0 = arg1 * arg2." (function vector4 vector4 float none)) +(define-extern vector4-madd! "arg0 = arg1 + arg2 * arg3." (function vector4 vector4 vector4 float none)) +(define-extern vector4-msub! "arg0 = arg1 - arg2 * arg3." (function vector4 vector4 vector4 float none)) +(define-extern vector4-array-add! "Apply vector4-add! to all arrays." (function (inline-array vector4) (inline-array vector4) (inline-array vector4) int none)) +(define-extern vector4-array-sub! "Apply vector4-sub! to all arrays." (function (inline-array vector4) (inline-array vector4) (inline-array vector4) int none)) +(define-extern vector4-array-mul! "Apply vector4-mul! to all arrays." (function (inline-array vector4) (inline-array vector4) (inline-array vector4) int none)) +(define-extern vector4-array-scale! "Apply vector4-scale! to all arrays." (function (inline-array vector4) (inline-array vector4) float int none)) +(define-extern vector4-array-madd! "Apply vector4-madd! to all arrays." (function (inline-array vector4) (inline-array vector4) (inline-array vector4) float int none)) +(define-extern vector4-array-msub! "Apply vector4-msub! to all arrays." (function (inline-array vector4) (inline-array vector4) (inline-array vector4) float int none)) +(define-extern vector4-array-lerp! "Apply vector4-lerp! to all arrays." (function (inline-array vector4) (inline-array vector4) (inline-array vector4) float int symbol)) +(define-extern spheres-overlap? "Do the spheres overlap?" (function sphere sphere symbol)) +(define-extern sphere<-vector! + "Set the position of the sphere to arg1. Does not change the radius." + (function sphere vector sphere)) +(define-extern sphere<-vector+r! + "Set the position of the sphere from arg1 and the radius from arg2." + (function sphere vector float sphere)) +(define-extern rand-vu-sphere-point! + "Get a random point on the sphere at the origin with radius arg1. + The point is on the surface of the sphere." + (function vector float vector)) +(define-extern rand-vu-sphere-point-uniform! (function vector float vector)) +(define-extern vector-vector-angle-safe + "Get the angle between two vectors, with some 'safety' applied..." + (function vector vector float)) +(define-extern vector-get-unique! (function vector vector vector)) +(define-extern vector-get-closest-perpendicular! (function vector vector vector vector)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; file-io ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++file-io:file-kind +(defenum file-kind + :bitfield #f + (level-bt 0) ;; aka bsp-header. + (art-group 1) + (tpage 2) + (dir-tpage 3) + (level-vs 4) + (tx 5) + (vis 6) + (map 7) + ) +;; ---file-io:file-kind + +(deftype file-stream (basic) + ((flags uint32 :offset-assert 4) + (mode symbol :offset-assert 8) + (name string :offset-assert 12) + (file uint32 :offset-assert 16) + ) + (:methods + (new (symbol type string symbol) _type_) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype file-info (basic) + ((file-type (pointer string) :offset-assert 4) ;; guessed by decompiler + (file-name string :offset-assert 8) ;; guessed by decompiler + (major-version uint32 :offset-assert 12) + (minor-version uint32 :offset-assert 16) + (maya-file-name string :offset-assert 20) ;; guessed by decompiler + (tool-debug string :offset-assert 24) ;; guessed by decompiler + (mdb-file-name string :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(define-extern file-stream-read-string + "Fill a string with data from a file stream. + Note: this function does not work." + (function file-stream string string)) +(define-extern *file-temp-string* string) +(define-extern make-file-name + "Get a file name to open a file with the given kind and name. + The art-group-version argument can be used to override the version + of the art-group. Set it to 0 or less to use the default version. + Similar to MakeFileName in C. + Note: file type enum is different between C and GOAL. + File versions should match those in versions.h. + Uses a single *file-temp-string* buffer, shared with make-vfile-name. + arg3 is unused." + (function file-kind string int symbol string)) +(define-extern make-vfile-name + "Make virtual? file name. This makes a name that the kernel knows how to + handle in a specific way. This function is not used." + (function file-kind string string)) +(define-extern file-info-correct-version? + "Check if the version and kind in the info is valid. The `version-override` can specify a + non-default version, or set to 0 for the default version." + (function file-info file-kind int symbol)) +(define-extern *sqlpipe-file-path-send* file-stream) +(define-extern *sqlpipe-file-path-recv* file-stream) +(define-extern *sqlpipe-file-buffer* pointer) +(define-extern file-stream-read-complete + "Read file into a pointer until it reaches a limit, or until file stream is complete. + Returns actual amount read." + (function file-stream pointer int int)) +(define-extern sqlpipe-query (function string sql-result)) +(define-extern old-sql-query (function string sql-result)) +(define-extern sql-query (function string sql-result)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; loader-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type art basic) +(declare-type art-group art) +(define-extern art-group type) + +(deftype load-dir (basic) + "`load-dir` is an array of references to loaded things. + It's used to handle art groups that are loaded as part of a level load." + ((lev level :offset-assert 4) + (string-array (array string) :offset-assert 8) ;; these are the names + (data-array (array basic) :score -50 :offset-assert 12) ;; this is the file data. + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (new (symbol type int level) _type_) ;; 0 + (load-to-heap-by-name (_type_ string symbol kheap int) art-group) ;; 9 + (set-loaded-art (_type_ art-group) art-group) ;; 10 + ) + ) + +(deftype load-dir-art-group (load-dir) + "Specialization of load-dir for `art-group`s." + ((art-group-array (array art-group) :offset 12) + ) + :flag-assert #xb00000010 + (:methods + (new (symbol type int level) _type_) ;; 0 + ) + ) + +(deftype external-art-buffer (basic) + ((index int32 :offset-assert 4) + (other external-art-buffer :offset-assert 8) ;; guessed by decompiler + (status symbol :offset-assert 12) ;; guessed by decompiler + (locked? symbol :offset-assert 16) ;; guessed by decompiler + (login? symbol :offset-assert 20) ;; guessed by decompiler + (frame-lock symbol :offset-assert 24) ;; guessed by decompiler + (init-heap (function external-art-buffer object) :offset-assert 28) ;; guessed by decompiler + (heap kheap :inline :offset-assert 32) + (pending-load-file string :offset-assert 48) ;; guessed by decompiler + (pending-load-file-part int32 :offset-assert 52) + (pending-load-file-owner uint64 :offset-assert 56) ;; handle + (pending-load-file-priority float :offset-assert 64) + (load-file string :offset-assert 68) ;; guessed by decompiler + (load-file-part int32 :offset-assert 72) + (load-file-owner uint64 :offset-assert 80) ;; handle + (load-file-priority float :offset-assert 88) + (buf pointer :offset-assert 92) ;; guessed by decompiler + (len int32 :offset-assert 96) + (art-group art-group :offset-assert 100) ;; guessed by decompiler + (art-data uint32 :offset 100) + ) + :method-count-assert 16 + :size-assert #x68 + :flag-assert #x1000000068 + (:methods + (new (symbol type int function symbol) _type_) ;; 0 + (set-pending-file (_type_ string int handle float) int) ;; 9 + (update (_type_) int) ;; 10 + (inactive? (_type_) symbol) ;; 11 + (file-status (_type_ string int) symbol) ;; 12 + (link-file (_type_ art-group) art-group) ;; 13 + (unlink-file (_type_ art-group) int) ;; 14 + (unlock! (_type_) int) ;; 15 + ) + ) + +(deftype spool-anim (basic) + "A `spool-anim` is metadata for an animation that will be loaded in chunks + to a pair of external-art-buffers." + ((name string :offset 16) ;; guessed by decompiler + (anim-name string :offset-assert 20) ;; guessed by decompiler + (buffer external-art-buffer :offset 20 :score -1) ;; added + (parts int32 :offset-assert 24) + (hint-id int32 :offset 24) + (priority float :offset-assert 28) + (owner uint64 :offset-assert 32) ;; handle + (command-list pair :offset-assert 40) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype external-art-control (basic) + "The `external-art-control` manages loading chunks from `spool-anim`s to `external-art-buffer`." + ((buffer external-art-buffer 2 :offset-assert 4) ;; guessed by decompiler + (rec spool-anim 3 :inline :offset-assert 16) ;; guessed by decompiler + (spool-lock uint64 :offset-assert 160) ;; handle + (reserve-buffer external-art-buffer :offset-assert 168) ;; guessed by decompiler + (reserve-buffer-count int16 :offset-assert 172) + (dma-reserve-buffer-count int16 :offset-assert 174) + (active-stream string :offset-assert 176) ;; guessed by decompiler + (queue-stream (array spool-anim) :offset-assert 180) ;; guessed by decompiler + (frame-mask uint32 :offset-assert 184) + (dma-reserve-heap kheap :inline :offset-assert 192) + ) + :method-count-assert 16 + :size-assert #xd0 + :flag-assert #x10000000d0 + (:methods + (new (symbol type) _type_) ;; 0 + (update (_type_ symbol) int) ;; 9 + (clear-rec (_type_) int) ;; 10 + (spool-push (_type_ string int process float) int) ;; 11 + (file-status (_type_ string int) symbol) ;; 12 + (reserve-alloc (_type_) kheap) ;; 13 + (reserve-free (_type_ kheap) int) ;; 14 + (none-reserved? (_type_) symbol) ;; 15 + ) + ) + +(deftype subtitle-range (basic) + ((start-frame float :offset-assert 4) + (end-frame float :offset-assert 8) + (message basic 12 :offset-assert 12) ;; guessed by decompiler + ;;(UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) + +(deftype subtitle-image (basic) + ((width uint16 :offset-assert 4) + (height uint16 :offset-assert 6) + (palette rgba 16 :offset 16) ;; guessed by decompiler + (data uint8 :dynamic :offset-assert 80) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type texture-page basic) + +(deftype texture-id (uint32) + "Unique identifier for a texture + as the tpage number and index of the texture within the tpage." + ((index uint16 :offset 8 :size 12) + (page uint16 :offset 20 :size 12) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype texture-pool-segment (structure) + "A chunk of VRAM." + ((dest uint32 :offset-assert 0) + (size uint32 :offset-assert 4) + ) + :allow-misaligned + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype texture-pool (basic) + ((top int32 :offset-assert 4) + (cur int32 :offset-assert 8) + (allocate-func (function texture-pool texture-page kheap int texture-page) :offset-assert 12) ;; guessed by decompiler + (font-palette int32 :offset-assert 16) + (segment texture-pool-segment 4 :inline :offset-assert 20) ;; guessed by decompiler + (segment-near texture-pool-segment :inline :offset 20) + (segment-common texture-pool-segment :inline :offset 28) + (common-page texture-page 32 :offset-assert 52) ;; guessed by decompiler + (common-page-mask int32 :offset-assert 180) + (update-sprites-flag symbol :offset-assert 184) ;; guessed by decompiler + (update-flag symbol :offset-assert 188) ;; guessed by decompiler + (texture-enable-user texture-enable-mask :offset-assert 192) ;; texture-enable-mask + (texture-enable-user-menu texture-enable-mask :offset-assert 200) ;; texture-enable-mask + (ids uint32 128 :offset-assert 208) ;; guessed by decompiler + ) + :method-count-assert 28 + :size-assert #x2d0 + :flag-assert #x1c000002d0 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (texture-pool-method-9 () none) ;; 9 ;; (initialize! (_type_) _type_) + (texture-pool-method-10 () none) ;; 10 ;; (print-usage (_type_) _type_) + (texture-pool-method-11 () none) ;; 11 ;; (setup-font-texture (_type_) none) + (texture-pool-method-12 () none) ;; 12 ;; (allocate-defaults (_type_) none) + (texture-pool-method-13 () none) ;; 13 ;; (login-level-textures (_type_ level int (pointer texture-id)) none) + (texture-pool-method-14 () none) ;; 14 ;; (add-level-tpage-dma (_type_ level tpage-category bucket-id) none) + (texture-pool-method-15 () none) ;; 15 ;; (allocate-vram-words! (_type_ int) int) + (texture-pool-method-16 () none) ;; 16 ;; (allocate-segment (_type_ texture-pool-segment int) texture-pool-segment) + (texture-pool-method-17 () none) ;; 17 ;; (unload-page (_type_ texture-page) none) + (texture-pool-method-18 () none) ;; 18 ;; (get-common-page-slot-by-id (_type_ int) int) + (texture-pool-method-19 () none) ;; 19 ;; (update-warp-and-hud (_type_) none) + (texture-pool-method-20 () none) ;; 20 ;; (update-sprites (_type_) none) + (texture-pool-method-21 () none) ;; 21 ;; (mark-hud-warp-sprite-dirty (_type_) none) + (texture-pool-method-22 () none) ;; 22 ;; (lay-out-sprite-tex (_type_) none) + (texture-pool-method-23 () none) ;; 23 ;; (lay-out-hud-tex (_type_) none) + (texture-pool-method-24 () none) ;; 24 ;; (lay-out-warp-tex (_type_) none) + (texture-pool-method-25 () none) ;; 25 ;; (clear-ids (_type_) none) + (texture-pool-method-26 () none) ;; 26 + (texture-pool-method-27 () none) ;; 27 + ) + ) + +(deftype texture-mask (structure) + "Mask where each bit indicates if some part of a tpage is used, by a texture. + Additionally, the w component holds a minimum distance. The texture is only needed + if the distance to the object is smaller than this." + ((mask vector4w :inline :offset-assert 0) + (dist float :offset 12 :score 1) + (long uint64 2 :offset 0) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype texture-masks (structure) + "Grouping of three masks, corresponding to the 3 segments of the texture. + So mask 0 is needed if segment 0 of the texture is needed, etc..." + ((data texture-mask 3 :inline :offset-assert 0) ;; guessed by decompiler + (level basic :offset 8) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype texture-masks-array (inline-array-class) + "Group of all texture-masks for a given tpage." + ((data texture-masks :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype texture (basic) + "Metadata for a texture." + ((w int16 :offset-assert 4) + (h int16 :offset-assert 6) + (num-mips uint8 :offset-assert 8) + (tex1-control uint8 :offset-assert 9) + (psm uint8 :offset-assert 10) ;; gs-psm + (mip-shift uint8 :offset-assert 11) + (clutpsm uint16 :offset-assert 12) + (dest uint16 7 :offset-assert 14) ;; guessed by decompiler + (clutdest uint16 :offset-assert 28) + (width uint8 7 :offset-assert 30) ;; guessed by decompiler + (name string :offset-assert 40) ;; guessed by decompiler + (size uint32 :offset-assert 44) + (uv-dist float :offset-assert 48) + (pad uint32 3 :offset-assert 52) ;; guessed by decompiler + (masks texture-masks :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype texture-page-segment (structure) + "Metadata for a 'segment' of a texture page. + Each texture page has 3 segments - smaller number segments have higher detail mips." + ((block-data pointer :offset-assert 0) ;; guessed by decompiler + (size uint32 :offset-assert 4) + (dest uint32 :offset-assert 8) + ) + :allow-misaligned + :pack-me + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; +++texture-h:tex-upload-mode +(defenum tex-upload-mode + (none -3) + (seg0-1 -2) + (seg0-1-2 -1) + (seg0 0) + (seg2 2) + ) +;; ---texture-h:tex-upload-mode + +(deftype texture-page (basic) + "A collection of textures. There is a tpage per category per level. + These tpages are loaded from the DVD. + e.g.: prison tfrag is its own tpage. + The tpage has multiple textures, and 3 segments. + Lower number segments are larger and have hi-res versions of textures." + ((info file-info :offset-assert 4) ;; guessed by decompiler + (name string :offset-assert 8) ;; guessed by decompiler + (id uint32 :offset-assert 12) + (length int32 :offset-assert 16) + (mip0-size uint32 :offset-assert 20) + (size uint32 :offset-assert 24) + (segment texture-page-segment 3 :inline :offset-assert 28) ;; guessed by decompiler + (dram-size uint32 :offset-assert 64) + (vram-size uint32 :offset-assert 68) + (pad uint32 14 :offset-assert 72) ;; guessed by decompiler + (data texture :dynamic :offset-assert 128) ;; guessed by decompiler + ) + :method-count-assert 15 + :size-assert #x80 + :flag-assert #xf00000080 + (:methods + (texture-page-method-9 () none) ;; 9 ;; (remove-data-from-heap (_type_ kheap) _type_) + (texture-page-method-10 () none) ;; 10 ;; (get-leftover-block-count (_type_ int int) int) + (texture-page-method-11 () none) ;; 11 ;; (relocate-dests! (_type_ int int) none) + (texture-page-method-12 () none) ;; 12 ;; (add-to-dma-buffer (_type_ dma-buffer tex-upload-mode) int) + (texture-page-method-13 () none) ;; 13 ;; (upload-now! (_type_ tex-upload-mode) none) + (texture-page-method-14 () none) ;; 14 + ) + ) + +(deftype shader-ptr (uint32) + "A pointer to an adgif-shader, stored in bits 8-32. This allows them to fit into + an adgif shader easily." + ((first-8 uint8 :offset 0 :size 8) ;; added + (shader uint32 :offset 8 :size 24) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype texture-link (structure) + "An overlay structure containing a shader-ptr that points to the next adgif-shader + in a linked list." + ((next shader-ptr :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype texture-page-dir-entry (structure) + "An entry for a texture in the texture-page-dir. + The texture-page-dir contains an entry for each tpage. + Each entry contains a reference to the tpage, and a linked list of shaders + using it." + ((length int16 :offset-assert 0) + (status uint16 :offset-assert 2) + (page texture-page :offset-assert 4) ;; guessed by decompiler + (link texture-link :offset-assert 8) ;; guessed by decompiler + ) + :pack-me + :allow-misaligned + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype texture-page-dir (basic) + "The list of all texture pages. + This is static data loaded from the DVD at boot." + ((length int32) + (entries texture-page-dir-entry 1 :inline) + ) + :method-count-assert 11 + :size-assert #x14 + :flag-assert #xb00000014 + (:methods + (texture-page-dir-method-9 () none) ;; 9 ;; (unlink-shaders-in-heap (_type_ kheap) int) + (texture-page-dir-method-10 () none) ;; 10 + ) + ) + +(deftype texture-relocate-later (basic) + "Unused in Jak 2, but metadata for postponing tpage copies until a second frame, + to have a smaller impact on frame times when loading." + ((memcpy symbol :offset-assert 4) ;; guessed by decompiler + (dest uint32 :offset-assert 8) + (source uint32 :offset-assert 12) + (move uint32 :offset-assert 16) + (entry texture-page-dir-entry :offset-assert 20) + (page texture-page :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +;; +++texture-h:link-test-flags +(defenum link-test-flags + :type uint32 + :bitfield #t + ) +;; ---texture-h:link-test-flags + +(deftype adgif-shader (structure) + "GS texturing/blending settings, called adgif-shader. + These are used by many different renderers and partially managed by the texture system. + For example, the texture system will automatically update tbp to point to the location + of the texture." + ((quad qword 5 :offset-assert 0 :score -100) ;; guessed by decompiler + (prims gs-reg64 10 :offset 0 :score -100) ;; guessed by decompiler + (reg-0 uint8 :offset 8) ;; gs-reg + (reg-1 uint8 :offset 24) ;; gs-reg + (reg-2 uint8 :offset 40) ;; gs-reg + (reg-3 uint8 :offset 56) ;; gs-reg + (reg-4 uint8 :offset 72) ;; gs-reg + (tex0 uint64 :offset 0) ;; gs-tex0 + (tex1 uint64 :offset 16) ;; gs-tex1 + (miptbp1 uint64 :offset 32) ;; gs-miptbp + (clamp uint64 :offset 48) ;; gs-clamp + (clamp-reg uint64 :offset 56) ;; gs-reg64 + (alpha uint64 :offset 64) ;; gs-miptbp + (link-test link-test-flags :offset 8) ;; guessed by decompiler + (texture-id texture-id :offset 24) ;; guessed by decompiler + (next shader-ptr :offset 40) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype adgif-shader-array (inline-array-class) + ((data adgif-shader :inline :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype texture-base (structure) + "Metadata about an area of VRAM set aside for fancy dynamic texture effects + (sky, eye, etc)." + ((vram-page uint32 :offset-assert 0) + (vram-block uint32 :offset-assert 4) + (vram-word uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype texture-page-translate-item (structure) + ((bucket int32 :offset-assert 0) ;; bucket-id + (level-index uint32 :offset-assert 4) + (level-texture-page tpage-category-u32 :offset-assert 8) ;; guessed by decompiler + (texture-user texture-enable-mask-u32 :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern *texture-masks* texture-masks) +(define-extern *texture-masks-array* texture-masks-array) +(define-extern texture-mip->segment + "Figure out which segment of a tpage a given mip level of a texture will be in. + arg0 is the mip level, arg1 is the total number of mips. + Higher mip level is lower detail." + (function int int int)) +(define-extern *texture-relocate-later* texture-relocate-later) +(define-extern *texture-page-dir* texture-page-dir) +(define-extern ct32-24-block-table (array int32)) +(define-extern mz32-24-block-table (array int32)) +(define-extern ct16-block-table (array int32)) +(define-extern ct16s-block-table (array int32)) +(define-extern mz16-block-table (array int32)) +(define-extern mz16s-block-table (array int32)) +(define-extern mt8-block-table (array int32)) +(define-extern mt4-block-table (array int32)) +(define-extern *texture-page-translate* (array texture-page-translate-item)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-anim-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype texture-anim-layer (structure) + ((extra vector :inline :offset 240) + (func (function dma-buffer uint int int texture-anim-layer float int) :offset-assert 256) ;; guessed by decompiler + (func-id symbol :offset-assert 256 :overlay-at func) ;; guessed by decompiler + (init-func (function texture-anim-layer int) :offset-assert 260) ;; guessed by decompiler + (init-func-id symbol :offset-assert 260 :overlay-at init-func) ;; guessed by decompiler + (tex texture :offset-assert 264) ;; guessed by decompiler + (start-time float :offset-assert 268) + (end-time float :offset-assert 272) + (tex-name string :offset-assert 276) ;; guessed by decompiler + (test gs-test :offset-assert 280) ;; gs-test + (alpha gs-alpha :offset-assert 288) ;; gs-alpha + (clamp gs-clamp :offset-assert 296) ;; gs-clamp + (start-vectors vector 5 :inline :offset 80 :score -10) ;; added + + (start-color vector :inline :offset 80) + (start-scale vector2 :inline :offset 96) + (start-offset vector2 :inline :offset 104) + (start-st-scale vector2 :inline :offset 112) + (start-st-offset vector2 :inline :offset 120) + (start-qs vector :inline :offset 128) + (start-rot degrees :offset 144) ;; degrees + (start-st-rot degrees :offset 148) ;; degrees + (end-vectors vector 5 :inline :offset 160 :score -10) ;; added + + (end-color vector :inline :offset 160) + (end-scale vector2 :inline :offset 176) + (end-offset vector2 :inline :offset 184) + (end-st-scale vector2 :inline :offset 192) + (end-st-offset vector2 :inline :offset 200) + (end-qs vector :inline :offset 208) + (end-rot degrees :offset 224) ;; degrees + (end-st-rot degrees :offset 228) ;; degrees + ) + :method-count-assert 11 + :size-assert #x130 + :flag-assert #xb00000130 + (:methods + (initialize-texture! (_type_) _type_) ;; 9 + (clear-texture! (_type_) _type_) ;; 10 + ) + ) + +(deftype texture-anim (structure) + ((num-layers uint32 :offset-assert 0) + (func (function dma-buffer texture-anim int) :offset-assert 4) ;; guessed by decompiler + (func-id symbol :offset-assert 4 :overlay-at func) ;; guessed by decompiler + (init-func (function texture-anim int) :offset-assert 8) ;; guessed by decompiler + (init-func-id symbol :offset-assert 8 :overlay-at init-func) ;; guessed by decompiler + (mip-func basic :offset-assert 12) + (mip-func-id basic :offset-assert 12 :overlay-at mip-func) + (time-func basic :offset-assert 16) + (time-func-id basic :offset-assert 16 :overlay-at time-func) + (tex texture :offset-assert 20) ;; guessed by decompiler + (tex-name string :offset-assert 24) ;; guessed by decompiler + (extra vector :inline :offset-assert 32) + (color rgba :offset-assert 48) ;; guessed by decompiler + (frame-time float :offset-assert 52) + (frame-delta float :offset-assert 56) + (frame-mod float :offset-assert 60) + (test gs-test :offset-assert 64) ;; gs-test + (alpha gs-alpha :offset-assert 72) ;; gs-alpha + (clamp gs-clamp :offset-assert 80) ;; gs-clamp + (data texture-anim-layer :dynamic :offset-assert 88) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x58 + :flag-assert #xb00000058 + (:methods + (init-textures! (_type_) _type_) ;; 9 + (clear-textures! (_type_) _type_) ;; 10 + ) + ) + +(deftype texture-anim-array (array) + ((array-data texture-anim :dynamic :offset-assert 16) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (init! (_type_) _type_) ;; 9 + (clear! (_type_) _type_) ;; 10 + ) + ) + +(deftype texture-anim-work (structure) + ((erase-tmpl dma-gif-packet :inline :offset-assert 0) + (draw-tmpl dma-gif-packet :inline :offset-assert 32) + (draw2-tmpl dma-gif-packet :inline :offset-assert 64) + (sprite-tmpl dma-gif-packet :inline :offset-assert 96) + (fill-tmpl dma-gif-packet :inline :offset-assert 128) + (adgif-tmpl dma-gif-packet :inline :offset-assert 160) + (corner0 vector :inline :offset-assert 192) + (corner1 vector :inline :offset-assert 208) + (corner2 vector :inline :offset-assert 224) + (corner3 vector :inline :offset-assert 240) + (const vector :inline :offset-assert 256) + (color vector4w :inline :offset-assert 272) + (random vector4w 8 :inline :offset-assert 288) ;; guessed by decompiler + (random-index uint8 :offset-assert 416) + (color80808040 vector4w :inline :offset-assert 432) + (color80808060 vector4w :inline :offset-assert 448) + (color80808000 vector4w :inline :offset-assert 464) + (st0000 vector :inline :offset-assert 480) + (st0505 vector :inline :offset-assert 496) + (st1010 vector :inline :offset-assert 512) + (uv00 vector4w :inline :offset-assert 528) + (uv44 vector4w :inline :offset-assert 544) + (uv88 vector4w :inline :offset-assert 560) + (uv1010 vector4w :inline :offset-assert 576) + (uv2020 vector4w :inline :offset-assert 592) + (uv4040 vector4w :inline :offset-assert 608) + (uv8080 vector4w :inline :offset-assert 624) + (xy0000 vector4w :inline :offset-assert 640) + (xy4040 vector4w :inline :offset-assert 656) + (xy0040 vector4w :inline :offset-assert 672) + (xy2060 vector4w :inline :offset-assert 688) + (xy2040 vector4w :inline :offset-assert 704) + (xy3050 vector4w :inline :offset-assert 720) + (xy3040 vector4w :inline :offset-assert 736) + (xy3848 vector4w :inline :offset-assert 752) + (xy3840 vector4w :inline :offset-assert 768) + (xy4048 vector4w :inline :offset-assert 784) + (xy3048 vector4w :inline :offset-assert 800) + (xy3850 vector4w :inline :offset-assert 816) + (xy4060 vector4w :inline :offset-assert 832) + ) + :method-count-assert 9 + :size-assert #x350 + :flag-assert #x900000350 + ) + +(deftype clut16x16 (structure) + ((clut rgba 256 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x400 + :flag-assert #x900000400 + ) + +(deftype noise8x8 (structure) + ((image uint8 64 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype noise16x16 (structure) + ((image uint8 256 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x100 + :flag-assert #x900000100 + ) + +(deftype noise32x32 (structure) + ((image uint8 1024 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x400 + :flag-assert #x900000400 + ) + +(deftype noise64x64 (structure) + ((image uint8 4096 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1000 + :flag-assert #x900001000 + ) + +(deftype noise128x128 (structure) + ((image uint8 16384 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4000 + :flag-assert #x900004000 + ) + +(deftype fog8x256 (structure) + ((image uint8 256 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x100 + :flag-assert #x900000100 + ) + +(deftype fog-texture-work (structure) + ((fog-height float :offset-assert 0) + (fog-near float :offset-assert 4) + (fog-far float :offset-assert 8) + (fog-delta float :offset-assert 12) + (alpha-near float :offset-assert 16) + (alpha-far float :offset-assert 20) + (alpha-delta float :offset-assert 24) + (color rgba :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(define-extern *clut-translate* (pointer uint8)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lights-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype vu-lights (structure) + ((direction vector 3 :inline :offset-assert 0) ;; guessed by decompiler + (color vector 3 :inline :offset-assert 48) ;; guessed by decompiler + (ambient vector :inline :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype light (structure) + "extra: {?, shadow, ?, ?}" + ((direction vector :inline :offset-assert 0) + (color rgbaf :inline :offset-assert 16) + (extra vector :inline :offset-assert 32) + (level float :offset-assert 32 :overlay-at (-> extra x)) + (luminance float :offset-assert 40 :overlay-at (-> extra z)) + (priority float :offset-assert 44 :overlay-at (-> extra w)) + (bytes uint8 4 :offset-assert 36 :overlay-at (-> extra y)) ;; guessed by decompiler + (mask uint16 :offset-assert 36 :overlay-at bytes) + (palette-index int8 :offset-assert 39 :overlay-at (-> bytes 3)) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype light-shadow-mask (uint32) + () + :flag-assert #x900000004 + ) + +(deftype light-sphere (structure) + ((name string :offset-assert 0) ;; guessed by decompiler + (bsphere vector :inline :offset-assert 16) + (direction vector :inline :offset-assert 32) + (color vector :inline :offset-assert 48) + (decay-start float :offset 4) + (ambient-point-ratio float :offset 8) + (brightness float :offset 12) + (bytes uint8 4 :offset 60) ;; guessed by decompiler + (mask uint16 :offset 60) + (palette-index int8 :offset 63) + (shadow uint32 :offset 32 :score 1) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype light-hash-bucket (structure) + ((index uint16 :offset-assert 0) + (count uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype light-hash (basic) + ((num-lights uint16 :offset-assert 4) + (num-indices uint16 :offset-assert 6) + (num-buckets uint16 :offset-assert 8) + (bucket-step uint8 2 :offset-assert 10) ;; guessed by decompiler + (base-trans vector :inline :offset-assert 16) + (axis-scale vector :inline :offset-assert 32) + (dimension-array vector4w :inline :offset-assert 48) + (bucket-array (inline-array light-hash-bucket) :offset-assert 64) ;; guessed by decompiler + (index-array pointer :offset-assert 68) ;; guessed by decompiler + (light-sphere-array (inline-array light-sphere) :offset-assert 72) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) + +(deftype light-hash-work (structure) + ((ones vector4w :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype light-group (structure) + ((dir0 light :inline :offset-assert 0) + (dir1 light :inline :offset-assert 48) + (dir2 light :inline :offset-assert 96) + (ambi light :inline :offset-assert 144) + (lights light 4 :inline :offset 0) ;; added + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + +(define-extern *light-hash* light-hash) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; trail-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype trail-node (structure) + ((next-id int16 :offset-assert 0) + (prev-id int16 :offset-assert 2) + (parent-id int16 :offset-assert 4) + (x int16 :offset-assert 6) + (y int16 :offset-assert 8) + (z int16 :offset-assert 10) + (first-conn uint16 :offset-assert 12) + (cost-from-start uint16 :offset-assert 14) + (cost-to-goal uint16 :offset-assert 16) + (flags uint8 :offset-assert 18) ;; trail-node-flag + (conn-count uint8 :offset-assert 19) + ) + :method-count-assert 12 + :size-assert #x14 + :flag-assert #xc00000014 + (:methods + (trail-node-method-9 () none) ;; 9 ;; (get-dist-score (_type_ vector) uint) + (trail-node-method-10 () none) ;; 10 ;; (debug-draw (_type_ int) symbol) + (trail-node-method-11 () none) ;; 11 ;; (get-position (_type_ vector) vector) + ) + ) +|# + +#| +(deftype trail-visgroup (structure) + ((first-node uint16 :offset-assert 0) + (node-count uint8 :offset-assert 2) + (pad uint8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype trail-blocker (structure) + ((plane plane :inline :offset-assert 0) + (center vector :inline :offset-assert 16) + (radius-squared float :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype trail-conn (structure) + ((head-id uint16 :offset-assert 0) + (tail-id uint16 :offset-assert 2) + (flags uint8 :offset-assert 4) ;; conn-flag + (visgroup-id uint8 :offset-assert 5) + (cost uint16 :offset-assert 6) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (trail-conn-method-9 () none) ;; 9 ;; (debug-draw (_type_ trail-graph int) none) + ) + ) +|# + +#| +(deftype trail-conn-hash-cell (structure) + ((first-conn uint16 :offset-assert 0) + (conn-count uint8 :offset-assert 2) + (pov-count uint8 :offset-assert 3) + (first-pov uint16 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) +|# + +#| +(deftype trail-conn-search (structure) + ((best-conn-id int32 :offset-assert 0) + (best-dist float :offset-assert 4) + (src-pos vector :offset-assert 8) + (conn-pos vector :offset-assert 12) + (debug-cells-searched int32 :offset-assert 16) + (debug-conns-searched int32 :offset-assert 20) + (bounds bounding-box4w :inline :offset-assert 32) + (cell-quads qword 2 :offset-assert 64) ;; guessed by decompiler + (conn-quads qword 7 :offset-assert 96) ;; guessed by decompiler + (cell-bits vector16ub 2 :offset-assert 64) ;; guessed by decompiler + (conn-bits vector16ub 2 :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) +|# + +#| +(deftype trail-conn-hash (basic) + ((cell-width meters :offset-assert 4) + (origin vector :inline :offset-assert 16) + (cell (inline-array trail-conn-hash-cell) :offset-assert 32) ;; guessed by decompiler + (conn-ids (pointer uint16) :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype trail-cached-search-info (structure) + ((goal-conn-id int16 :offset-assert 0) + (orig-goal-pos vector :inline :offset-assert 16) + (conn-goal-pos vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype trail-cached-start-pov (structure) + ((last-updated uint64 :offset-assert 0) ;; time-frame + (pov-can-see-start uint64 :offset-assert 8) + (next-node-id int32 :offset-assert 16) + (start-pos vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype trail-graph (basic) + ((mode uint8 :offset-assert 4) + (search-id uint32 :offset-assert 8) + (open-head-id int16 :offset-assert 12) + (goal-conn-id int16 :offset-assert 14) + (goal-node-id int16 :offset-assert 16) + (over-under-thresh float :offset-assert 20) + (over-under-above-too-low float :offset-assert 24) + (over-under-below-too-high float :offset-assert 28) + (pov-node-count uint16 :offset-assert 32) + (node-count uint16 :offset-assert 34) + (conn-count uint16 :offset-assert 36) + (blocker-count uint16 :offset-assert 38) + (conn-mask uint8 :offset-assert 40) + (node (inline-array trail-node) :offset-assert 44) ;; guessed by decompiler + (conn (inline-array trail-conn) :offset-assert 48) ;; guessed by decompiler + (blocker (inline-array trail-blocker) :offset-assert 52) ;; guessed by decompiler + (conn-ids (pointer uint16) :offset-assert 56) ;; guessed by decompiler + (visgroup (inline-array trail-conn-hash-cell) :offset-assert 60) ;; guessed by decompiler + (visnode-ids (pointer uint16) :offset-assert 64) ;; guessed by decompiler + (conn-hash trail-conn-hash :offset-assert 68) ;; guessed by decompiler + (cell-pov-bit-arrays (pointer uint64) :offset-assert 72) ;; guessed by decompiler + (pov-can-see-goal uint64 :offset-assert 80) + (cached-start-pov trail-cached-start-pov :inline :offset-assert 96) + (orig-start-pos vector :inline :offset-assert 144) + (orig-goal-pos vector :inline :offset-assert 160) + (conn-start-pos vector :inline :offset-assert 176) + (conn-goal-pos vector :inline :offset-assert 192) + (open-quads qword 6 :offset-assert 208) ;; guessed by decompiler + (closed-quads qword 6 :offset-assert 304) ;; guessed by decompiler + (open-bits vector16ub 2 :offset-assert 208) ;; guessed by decompiler + (closed-bits vector16ub 2 :offset-assert 304) ;; guessed by decompiler + ) + :method-count-assert 34 + :size-assert #x190 + :flag-assert #x2200000190 + (:methods + (trail-graph-method-9 () none) ;; 9 ;; (trail-graph-method-9 (_type_ int) int) + (trail-graph-method-10 () none) ;; 10 ;; (trail-graph-method-10 (_type_ int) symbol) + (trail-graph-method-11 () none) ;; 11 ;; (trail-graph-method-11 (_type_ int int) trail-node) + (trail-graph-method-12 () none) ;; 12 ;; (trail-graph-method-12 (_type_ trail-node vector) symbol) + (trail-graph-method-13 () none) ;; 13 ;; (trail-graph-method-13 (_type_ vector vector) symbol) + (trail-graph-method-14 () none) ;; 14 ;; (debug-draw (_type_) symbol) + (trail-graph-method-15 () none) ;; 15 ;; (trail-graph-method-15 (_type_ int) symbol) + (trail-graph-method-16 () none) ;; 16 ;; (trail-graph-method-16 (_type_ int (pointer uint16) vector vector rgba float) symbol) + (trail-graph-method-17 () none) ;; 17 ;; (trail-graph-method-17 (_type_ vector vector) int) + (trail-graph-method-18 () none) ;; 18 ;; (trail-graph-method-18 (_type_ vector) int) + (trail-graph-method-19 () none) ;; 19 ;; (trail-graph-method-19 (_type_) none) + (trail-graph-method-20 () none) ;; 20 ;; (trail-graph-method-20 (_type_ uint vector) vector) + (trail-graph-method-21 () none) ;; 21 ;; (trail-graph-method-21 (_type_ (pointer uint16) int (pointer int32) (pointer float)) int) + (trail-graph-method-22 () none) ;; 22 ;; (trail-graph-method-22 (_type_ int int) symbol) + (trail-graph-method-23 () none) ;; 23 ;; (trail-graph-method-23 (_type_) symbol) + (trail-graph-method-24 () none) ;; 24 ;; (trail-graph-method-24 (_type_ uint vector int int) symbol) + (trail-graph-method-25 () none) ;; 25 ;; (trail-graph-method-25 (_type_ int) int) + (trail-graph-method-26 () none) ;; 26 ;; (trail-graph-method-26 (_type_) int) + (trail-graph-method-27 () none) ;; 27 ;; (trail-graph-method-27 (_type_) int) + (trail-graph-method-28 () none) ;; 28 ;; (trail-graph-method-28 (_type_ trail-conn-search int int) symbol) + (trail-graph-method-29 () none) ;; 29 ;; (trail-graph-method-29 (_type_ vector vector trail-cached-search-info) int) + (trail-graph-method-30 () none) ;; 30 ;; (trail-graph-method-30 (_type_) int) + (trail-graph-method-31 () none) ;; 31 ;; (trail-graph-method-31 (_type_ int) none) + (trail-graph-method-32 () none) ;; 32 ;; (trail-graph-method-32 (_type_) uint) + (trail-graph-method-33 () none) ;; 33 ;; (trail-graph-method-33 (_type_ int) symbol) + ) + ) +|# + +;; (define-extern *trail-graph* object) ;; trail-graph + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; connect ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype connectable (structure) + "A connectable is the linked-list node part of a connection. + The connections themselves are owned by the engine. + + The `next0`/`prev0` references are used for how this belongs in the connectable list + belonging to the [[engine]]. These terminate on special nodes stored in the engine: + `alive-list`/`alive-list-end` for the active connections, and `dead-list`/`dead-list-end` + for the inactive. + + The `next1`/`prev1` references are used to build a linked list _per process_. + The head of this list is the inline connectable in process and it ends with `#f`. + This is a bit confusing at first, but these belong to two linked lists... + These terminate on both ends with `#f`." + ((next0 connectable :offset-assert 0) + (prev0 connectable :offset-assert 4) + (next1 connectable :offset-assert 8) + (prev1 connectable :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(declare-type engine basic) + +(deftype connection (connectable) + ((param0 basic :offset-assert 16) + (param1 basic :offset-assert 20) + (param2 int32 :offset-assert 24) ;; guessed by decompiler + (param3 int32 :offset-assert 28) ;; guessed by decompiler + (quad uint128 2 :offset 0) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + ;; field param1 uses ~A with a signed load. field param2 uses ~A with a signed load. field param3 uses ~A with a signed load. + (:methods + (get-engine + "Get the engine for this connection. This must be used on a live connection." + (connection) engine) ;; 9 + (get-process "Get the process for this connection." (connection) process) ;; 10 + (belongs-to-engine? + "Check to see if this connection is located in the data section of the engine. + This works on dead or alive connections." + (connection engine) symbol) ;; 11 + (belongs-to-process? "Does this connection belong to the given process?" (connection process) symbol) ;; 12 + (move-to-dead "Move this connection from the alive list to the dead list." (connection) connection) ;; 13 + ) + ) + +(deftype engine (basic) + "An engine is a collection of connections. + You can iterate over the connections, or run them. + The engine is dynamically sized based on how many connections it can store. + + New for Jak 2: You can use a child class of [[connection]]." + ((name symbol :offset-assert 4) ;; guessed by decompiler + (engine-time uint64 :offset 16) ;; time-frame + (allocated-length int16 :offset 10) + (length int16 :offset 8) + (element-type type :offset 12) ;; guessed by decompiler + (alive-list connectable :inline :offset-assert 32) + (alive-list-end connectable :inline :offset-assert 48) + (dead-list connectable :inline :offset-assert 64) + (dead-list-end connectable :inline :offset-assert 80) + (data connection :inline :dynamic :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 26 + :size-assert #x60 + :flag-assert #x1a00000060 + (:methods + (new (symbol type symbol int type) _type_) ;; 0 + (inspect-all-connections "inspect all of the connections." (engine) engine) ;; 9 + (apply-to-connections + "Apply arg0 to all connections for the engine. + It's okay to have arg0 remove the connection." + (engine (function connectable none)) int) ;; 10 + (apply-to-connections-reverse + "Apply arg0 to all connections, reverse order. + Do not use arg0 to remove yourself from the list." + (engine (function connectable none)) int) ;; 11 + (execute-connections "Run the engine!" (engine object) int) ;; 12 + (execute-connections-and-move-to-dead + "Run the engine! If any objects return `'dead`, remove them." + (engine object) int) ;; 13 + (execute-connections-if-needed + "Execute connections, but only if it hasn't been done on this frame." + (engine object) int) ;; 14 + (add-connection + "Add a connection between this engine and a given process." + (engine process object object object object) connection) ;; 15 + (remove-from-process "Remove all connections from process for this engine." (engine process) int) ;; 16 + (remove-matching + "Call the given function on each connection and the engine. + If it returns truthy, `move-to-dead` that connection." + (engine (function connection engine symbol)) int) ;; 17 + (remove-all "Remove all connections from an engine." (engine) int) ;; 18 + (remove-by-param0 "Remove all connections with param0 matching arg0." (engine object) int) ;; 19 + (remove-by-param1 "Remove all connections with param1 matching arg0." (engine int) int) ;; 20 + (remove-by-param2 "Remove all connections with param2 matching arg0." (engine int) int) ;; 21 + (get-first-connectable (engine) connectable) ;; 22 + (get-last-connectable (engine) connectable) ;; 23 + (get-next-connectable (_type_ connectable) connectable) ;; 24 + (get-prev-connectable (_type_ connectable) connectable) ;; 25 + ) + ) + +(deftype connection-pers (structure) + "This is another engine system, very similar to the first, but not specific to a process. + Each connection has a `key`, which is like the process, but unlike normal engine, + the key's don't track which engine-pers they belong to. + + Unlike [[engine]], users can use [[engine-pers]] as a parent class." + ((next connection-pers :offset-assert 0) + (key object :offset-assert 4) ;; guessed by decompiler + (update-time uint64 :offset-assert 8) ;; time-frame + (param object 4 :offset-assert 16) ;; guessed by decompiler + (param-int32 int32 4 :offset 16) ;; guessed by decompiler + (param-int64 int64 2 :offset 16) ;; guessed by decompiler + (param-float float 4 :offset 16) ;; guessed by decompiler + (param-quat uint128 :offset 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ;; field key uses ~A with a signed load. + ) + +(deftype engine-pers (basic) + ((name symbol :offset-assert 4) ;; guessed by decompiler + (length int16 :offset-assert 8) + (allocated-length int16 :offset-assert 10) + (element-type type :offset-assert 12) ;; guessed by decompiler + (execute-time uint64 :offset-assert 16) ;; time-frame + (alive-list connection-pers :offset-assert 24) + (dead-list connection-pers :offset-assert 28) + (data connection-pers :inline :dynamic :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 15 + :size-assert #x20 + :flag-assert #xf00000020 + (:methods + (new (symbol type symbol int type) _type_) ;; 0 + (schedule-callback + "Get a connection for this key. + If no connection exists, add it. + Schedule an update to happen in arg1 seconds." + (_type_ object time-frame) connection-pers) ;; 9 + (kill-callback "Called when a connection is removed." (_type_ connection-pers) none) ;; 10 + (kill-by-key "Remove connections with this key, calling `kill-callback`." (_type_ object) none) ;; 11 + (kill-matching + "Call the given function on each connection. If it returns truthy, kill that connection." + (_type_ (function engine-pers connection-pers object object symbol) object object) none) ;; 12 + (update-callback + "Called when a connection is run. + Users can override this as needed." + (_type_) none) ;; 13 + (run-pending-updates! + "Run updates if they scheduled. If something is found that has no pending update, kill it. + Note that we won't kill things on this call if they fail to update their `update-time`. + They will survive until the next call to `run-pending-updates`! + (or you can modify their `update-time` before that to prevent them from being killed.)" + (_type_ time-frame) none) ;; 14 + ) + ) + +(define-extern connection-process-apply + "Apply a function to all connectables of a process." + (function process (function object none) symbol)) +(define-extern process-disconnect "Disconnect all connections for the given process." (function process int)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mood-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype mood-channel (structure) + ((data float 24 :offset-assert 0) ;; guessed by decompiler + (vecs vector4 6 :inline :offset 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + +(deftype mood-channel-group (structure) + ((data mood-channel 4 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) + +(deftype mood-fog (structure) + ((fog-color vector :inline :offset-assert 0) + (fog-dists vector :inline :offset-assert 16) + (fog-start meters :offset-assert 16 :overlay-at (-> fog-dists x)) + (fog-end meters :offset-assert 20 :overlay-at (-> fog-dists y)) + (fog-max float :offset-assert 24 :overlay-at (-> fog-dists z)) + (fog-min float :offset-assert 28 :overlay-at (-> fog-dists w)) + (erase-color vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype mood-fog-table (structure) + ((data mood-fog 8 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) + +(deftype mood-color (structure) + ((lgt-color vector :inline :offset-assert 0) + (amb-color vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype mood-direction-table (structure) + ((data vector 4 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype mood-color-table (structure) + ((data mood-color 8 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x100 + :flag-assert #x900000100 + ) + +(deftype mood-sky-table (structure) + ((data vector 8 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype mood-clouds (structure) + ((cloud-min float :offset-assert 0) + (cloud-max float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype mood-weather (structure) + ((data float 2 :offset-assert 0) ;; guessed by decompiler + (cloud float :offset 0) + (fog float :offset 4) + ) + :pack-me + :allow-misaligned + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype mood-iweather (structure) + ((data int32 2 :offset-assert 0) ;; guessed by decompiler + (cloud int32 :offset 0) + (fog int32 :offset 4) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype mood-range (structure) + ((data float 4 :offset-assert 0 :score -1) ;; guessed by decompiler + (min-cloud float :offset 0) + (max-cloud float :offset 4) + (min-fog float :offset 8) + (max-fog float :offset 12) + (quad uint128 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype mood-filters-table (structure) + ((data vector 8 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(declare-type sky-color-day structure) +(deftype mood-table (basic) + ((mood-fog-table mood-fog-table :offset-assert 4) + (mood-color-table mood-color-table :offset-assert 8) + (mood-channel-group mood-channel-group :offset-assert 12) + (mood-direction-table mood-direction-table :offset-assert 16) + (mood-sky-table mood-sky-table :offset-assert 20) + (mood-interp-table sky-color-day :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +(deftype light-state (structure) + ((time float :offset-assert 0) + (fade float :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype flicker-state (structure) + ((flicker-off uint8 :offset-assert 0) + (flicker-on uint8 :offset-assert 1) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype florescent-state (structure) + ((value float :offset-assert 0) + (delay int8 :offset-assert 4) + (delay2 int8 :offset-assert 5) + ) + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) + +(deftype electricity-state (structure) + ((value float :offset-assert 0) + (scale float :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype pulse-state (structure) + ((pulse float :offset-assert 0) + (brightness float :offset-assert 4) + (target-brightness float :offset-assert 8) + (speed float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype strobe-state (structure) + ((time float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype flames-state (structure) + ((time float :offset-assert 0) + (index uint8 :offset-assert 4) + (length uint8 :offset-assert 5) + (height uint8 :offset-assert 6) + ) + :pack-me + :method-count-assert 9 + :size-assert #x7 + :flag-assert #x900000007 + ) + +(deftype mood-context-core (structure) + ((current-fog mood-fog :inline :offset-assert 0) + (current-sky-color vector :inline :offset-assert 48) + (current-env-color vector :inline :offset-assert 64) + (current-prt-color vector :inline :offset-assert 80) + (current-shadow-color vector :inline :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype mood-context-core2 (mood-context-core) + ((light-group light-group 8 :inline :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x670 + :flag-assert #x900000670 + ) + +(deftype mood-context-core3 (mood-context-core2) + ((times vector 8 :inline :offset-assert 1648) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x6f0 + :flag-assert #x9000006f0 + ) + +(deftype mood-context (mood-context-core3) + ((itimes vector4w 4 :inline :offset-assert 1776) ;; guessed by decompiler + (state uint32 32 :offset-assert 1840) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x7b0 + :flag-assert #x9000007b0 + ) + +(deftype mood-control-work (structure) + ((color vector4w :inline :offset-assert 0) + (weather mood-weather :inline :offset-assert 16) + (iweather mood-iweather :inline :offset-assert 24) + (interp mood-weather :inline :offset-assert 32) + (index int32 4 :offset-assert 40) ;; guessed by decompiler + (color-interp float :offset-assert 56) + (color-index int32 2 :offset-assert 60) ;; guessed by decompiler + (channel-interp float :offset-assert 68) + (channel-index int32 2 :offset-assert 72) ;; guessed by decompiler + (cloud-interp float :offset-assert 80) + (cloud-index int32 2 :offset-assert 84) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x5c + :flag-assert #x90000005c + ) + +(deftype mood-control (mood-table) + ((mood-clouds mood-clouds :offset-assert 28) + (current-interp mood-weather :inline :offset-assert 32) + (target-interp mood-weather :inline :offset-assert 40) + (speed-interp mood-weather :inline :offset-assert 48) + (range mood-range :inline :offset-assert 64) + (time-until-random mood-weather :inline :offset-assert 80) + (time-until-random-min mood-weather :inline :offset-assert 88) + (time-until-random-max mood-weather :inline :offset-assert 96) + (current-special-interp float :offset-assert 104) + (target-special-interp float :offset-assert 108) + (rate-special-interp float :offset-assert 112) + (display-flag symbol :offset-assert 116) ;; guessed by decompiler + (override-weather-flag basic :offset-assert 120) + (pad int32 :offset-assert 124) + (override mood-weather :inline :offset-assert 128) + (lightning-index int32 :offset-assert 136) + (lightning-val int32 :offset-assert 140) + (lightning-time int32 :offset-assert 144) + (lightning-time2 float :offset-assert 148) + (lightning-time3 float :offset-assert 152) + (lightning-flash float :offset-assert 156) + (lightning-id sound-id :offset-assert 160) ;; guessed by decompiler + (lightning-count0 uint32 :offset-assert 164) + (lightning-count1 uint32 :offset-assert 168) + (lightning-count2 uint32 :offset-assert 172) + (rain-id sound-id :offset-assert 176) ;; guessed by decompiler + (sound-pitch float :offset-assert 180) + (fogs mood-fog-table 9 :offset-assert 184) ;; guessed by decompiler + (colors mood-color-table 3 :offset-assert 220) ;; guessed by decompiler + (channels mood-channel-group 3 :offset-assert 232) ;; guessed by decompiler + (clouds mood-clouds 9 :offset-assert 244) ;; guessed by decompiler + ) + :method-count-assert 25 + :size-assert #x118 + :flag-assert #x1900000118 + (:methods + (init-weather! (_type_) none) ;; 9 + (set-cloud-and-fog-interp! (_type_ float float float float) none) ;; 10 ;; (update-mood-weather! (_type_ float float float float) none) + (update-mood-range! (_type_ float float float float) none) ;; 11 + (set-time-for-random-weather! (_type_ float float) none) ;; 12 + (set-special-interps! + "Sets the `*-special-interp` values with the given values + @param! this The [[mood-control]] + @param target-interp Clamped between 0.0 and 1.0 + @param rate-interp Value to set [[this::rate-special-interp]] + @param set-current-interp? Uses `target-interp` to set [[this::current-special-interp] + @returns [[none]]" + (_type_ float float symbol) none) ;; 13 + (weather-event-concluded? ;; TODO - guess at name + "@returns [[#t]] if [[this::override-weather-flag]] is set, we aren't in a cutscene and [[this::current-special-interp]] is equal to `0.0`" + (_type_) symbol) ;; 14 ;; (apply-mood-color (_type_ mood-control-work) none) + (set-lightning-time! (_type_ int int float) none) ;; 15 ;; (apply-mood-channels (_type_ mood-control-work) none) + (apply-mood-clouds-and-fog (_type_ mood-control-work) none) ;; 16 ;; (adjust-num-clouds! (_type_ mood-control-work) none) + (apply-mood-fog (_type_ mood-control-work mood-color-table mood-color-table mood-color-table float) none) ;; 17 + (apply-fog-height (_type_ mood-control-work float float float float) none) ;; 18 + (apply-mood-colors (_type_ mood-control-work) none) ;; 19 + (mood-control-method-20 (_type_ mood-control-work mood-color-table mood-color-table mood-color-table float) none) ;; 20 + (apply-mood-channels (_type_ mood-control-work) none) ;; 21 + (adjust-num-clouds (_type_ mood-control-work) none) ;; 22 + (gen-lightning-and-thunder! (_type_ int) none) ;; 23 + (play-or-stop-lightning-sfx! (_type_ sound-spec vector) none) ;; 24 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; level-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type bsp-header basic) + +;; +++level-h:vis-info-flag +(defenum vis-info-flag + :type uint32 + :bitfield #t + (dummy0 0) + (dummy1 1) + (dummy2 2) + (dummy3 3) + (dummy4 4) + (dummy5 5) + (dummy6 6) + (dummy7 7) + (dummy8 8) + (dummy9 9) + (dummy10 10) + (dummy11 11) + (dummy12 12) + (dummy13 13) + (dummy14 14) + (dummy15 15) + (dummy16 16) + (dummy17 17) + (dummy18 18) + (dummy19 19) + (dummy20 20) + (dummy21 21) + (dummy22 22) + (dummy23 23) + (dummy24 24) + (dummy25 25) + (dummy26 26) + (dummy27 27) + (dummy28 28) + (in-iop 29) + (loading 30) + (vis-valid 31) + ) +;; ---level-h:vis-info-flag + +(deftype level-vis-info (basic) + ((level level :offset-assert 4) ;; guessed by decompiler + (from-level symbol :offset-assert 8) ;; guessed by decompiler + (from-bsp bsp-header :offset-assert 12) ;; guessed by decompiler + (flags vis-info-flag :offset-assert 16) + (length uint32 :offset-assert 20) + (allocated-length uint32 :offset-assert 24) + (dictionary-length uint32 :offset-assert 28) + (dictionary uint32 :offset-assert 32) + (string-block uint32 :offset-assert 36) + (ramdisk uint32 :offset-assert 40) + (vis-bits uint32 4 :offset-assert 44) ;; guessed by decompiler + (current-vis-string uint32 4 :offset-assert 60) ;; guessed by decompiler + (vis-string uint32 :dynamic :offset-assert 76) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) + +(deftype level-borrow-info (basic) + ((borrow-size uint16 3 :offset-assert 4) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (borrow-info object 3 :offset-assert 12) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; +++level-h:level-memory-mode +(defenum level-memory-mode + :type uint32 + ) +;; ---level-h:level-memory-mode + +;; +++level-h:task-mask +(defenum task-mask + :type uint32 + :bitfield #t + (task0 0) + (task1 1) + (task2 2) + (task3 3) + (task4 4) + (task5 5) + (task6 6) + (task7 7) + (done 8) + (dummy0 9) + (network 10) + (vehicle 11) + (special 12) + (primary0 13) + (ctywide 14) + (never 15) + (movie0 16) + (movie1 17) + (movie2 18) + ) +;; ---level-h:task-mask + +;; +++level-h:level-flags +(defenum level-flags + :type uint32 + :bitfield #t + ) +;; ---level-h:level-flags + +(deftype level-load-info (basic) + ((name-list symbol 4 :offset-assert 4 :score -1) ;; guessed by decompiler + (name symbol :offset 4) ;; guessed by decompiler + (visname symbol :offset 8) ;; guessed by decompiler + (nickname symbol :offset 12) ;; guessed by decompiler + (dbname symbol :offset 4) ;; guessed by decompiler + (taskname symbol :offset 16) ;; guessed by decompiler + (index int16 :offset-assert 20) + (task-level uint8 :offset-assert 22) + (race-minimap uint8 :offset-assert 23) + (level-flags level-flags :offset-assert 24) ;; guessed by decompiler + (packages pair :offset-assert 28) ;; guessed by decompiler + (memory-mode level-memory-mode :offset-assert 32) ;; guessed by decompiler + (mood-func symbol :offset-assert 36) ;; guessed by decompiler + (special-mood symbol :offset-assert 40) ;; guessed by decompiler + (ocean symbol :offset-assert 44) ;; guessed by decompiler + (ocean-height float :offset-assert 48) + (status-cache uint16 :offset-assert 52) + (status-cache-sync uint16 :offset-assert 54) + (draw-priority float :offset-assert 56) + (base-task-mask task-mask :offset-assert 60) + (continues pair :offset-assert 64) ;; guessed by decompiler + (callback-list pair :offset-assert 68) ;; guessed by decompiler + (borrow level-borrow-info :offset-assert 72) ;; guessed by decompiler + (bottom-height meters :offset-assert 76) + (mood-range mood-range :offset-assert 80) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x54 + :flag-assert #xb00000054 + (:methods + (get-callback-symbol-value-by-slot! "Look up value of symbol in callback-list with the given int as the car. Print warning if symbol's value is 0." (_type_ int) object) ;; 9 + (get-callback-by-slot! "Look up value in callback-list with the given int as the car and return it. Doesn't derefence the symbol." (_type_ int) object) ;; 10 + ) + ) + +(declare-type drawable basic) +(deftype login-state (basic) + ((state int32 :offset-assert 4) + (pos uint32 :offset-assert 8) + (elts uint32 :offset-assert 12) + (elt drawable 16 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(declare-type entity-links-array inline-array-class) +(declare-type dgo-header structure) +(declare-type game-text-info structure) +(declare-type text-id uint32) +(deftype level (basic) + ((name symbol :offset-assert 4) ;; guessed by decompiler + (load-name symbol :offset-assert 8) ;; guessed by decompiler + (nickname symbol :offset-assert 12) ;; guessed by decompiler + (index int32 :offset-assert 16) + (status symbol :offset-assert 20) ;; guessed by decompiler + (borrow-level level 3 :offset-assert 24) ;; guessed by decompiler + (borrow-from-level level :offset-assert 36) ;; guessed by decompiler + (heap kheap :inline :offset-assert 48) + (borrow-heap kheap 3 :inline :offset-assert 64) ;; guessed by decompiler + (bsp bsp-header :offset-assert 112) ;; guessed by decompiler + (art-group load-dir-art-group :offset-assert 116) ;; guessed by decompiler + (info level-load-info :offset-assert 120) ;; guessed by decompiler + (texture-page-dir texture-page-dir-entry 11 :inline :offset 128) + (loaded-texture-page texture-page 16 :offset-assert 260) ;; guessed by decompiler + (loaded-texture-page-count int32 :offset-assert 324) + (entity entity-links-array :offset-assert 328) ;; guessed by decompiler + (closest-object meters 10 :offset-assert 332) + (upload-size int32 19 :offset 408) ;; guessed by decompiler + (inside-boxes? symbol :offset-assert 484) + (display? symbol :offset-assert 488) ;; guessed by decompiler + (render? symbol :offset-assert 492) ;; guessed by decompiler + (meta-inside? symbol :offset-assert 496) ;; guessed by decompiler + (force-inside? symbol :offset-assert 500) ;; guessed by decompiler + (load-id uint32 :offset-assert 504) + (mood-context mood-context :offset-assert 508) + (mood-func (function mood-context float int none) :offset-assert 512) ;; guessed by decompiler + (mood-init (function mood-context none) :offset-assert 516) ;; guessed by decompiler + (vis-bits pointer 2 :offset-assert 520) ;; guessed by decompiler + (all-visible? symbol :offset-assert 528) ;; guessed by decompiler + (force-all-visible? symbol :offset-assert 532) ;; guessed by decompiler + (linking symbol :offset-assert 536) ;; guessed by decompiler + (vis-info level-vis-info 8 :offset-assert 540) ;; guessed by decompiler + (vis-self-index int32 :offset-assert 572) + (vis-adj-index int32 :offset-assert 576) + (vis-buffer pointer :offset-assert 580) ;; guessed by decompiler + (mem-usage-block memory-usage-block :offset-assert 584) ;; guessed by decompiler + (mem-usage int32 :offset-assert 588) + (code-memory-start pointer :offset-assert 592) ;; guessed by decompiler + (code-memory-end pointer :offset-assert 596) ;; guessed by decompiler + (load-start-time uint64 :offset-assert 600) + (load-stop-time uint64 :offset-assert 608) + (load-buffer uint32 2 :offset-assert 616) ;; guessed by decompiler + (load-buffer-size uint32 :offset-assert 624) + (load-buffer-last dgo-header :offset-assert 628) + (load-buffer-mode level-memory-mode :offset-assert 632) ;; guessed by decompiler + (display-start-time uint64 :offset-assert 640) + (memory-mask uint32 :offset-assert 648) + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (task-mask task-mask :offset-assert 652) + (tfrag-gs-test gs-test :offset-assert 656) ;; gs-test + (texture-dirty-masks texture-mask 11 :inline :offset-assert 672) ;; guessed by decompiler + (texture-mask texture-mask 19 :inline :offset-assert 848) ;; guessed by decompiler + (tfrag-last-calls uint32 6 :offset-assert 1152) ;; guessed by decompiler + (texture-anim-array texture-anim-array 11 :offset-assert 1176) ;; guessed by decompiler + (light-hash light-hash :offset-assert 1220) ;; guessed by decompiler + (draw-priority float :offset-assert 1224) + (draw-index int32 :offset-assert 1228) + (part-engine engine :offset-assert 1232) ;; guessed by decompiler + (user-object basic 4 :offset-assert 1236) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (loaded-text-info-count int32 :offset-assert 1252) + (loaded-text-info game-text-info 16 :offset-assert 1256) ;; guessed by decompiler + (level-type type :offset-assert 1320) ;; guessed by decompiler + (load-order uint64 :offset-assert 1328) + (slot int32 :offset-assert 1336) + (filter-num uint32 :offset-assert 1340) + (filter-name string 16 :offset-assert 1344) + (filter-look uint8 16 :offset-assert 1408) + (buffer kheap :offset-assert 1424) + ) + :method-count-assert 30 + :size-assert #x594 + :flag-assert #x1e00000594 + (:methods + (level-method-9 () none) ;; 9 ;; (deactivate (_type_) _type_) + (level-method-10 () none) ;; 10 ;; (unload! (_type_) _type_) + (level-method-11 () none) ;; 11 ;; (is-object-visible? (_type_ int) symbol) + (level-method-12 () none) ;; 12 ;; (level-method-12 () none) + (level-method-13 () none) ;; 13 ;; (bsp-name (_type_) symbol) + (level-method-14 () none) ;; 14 ;; (compute-memory-usage! (_type_ symbol) memory-usage-block) + (level-method-15 () none) ;; 15 ;; (inside-bsp? (_type_) symbol) + (level-method-16 () none) ;; 16 ;; (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol) + (level-method-17 () none) ;; 17 ;; (load-continue (_type_) _type_) + (level-method-18 () none) ;; 18 ;; (load-begin (_type_) _type_) + (level-method-19 () none) ;; 19 ;; (login-begin (_type_) _type_) + (level-method-20 () none) ;; 20 ;; (debug-print-region-splitbox (_type_ vector object) none) + (level-method-21 () none) ;; 21 ;; (get-art-group-by-name (_type_ string) art-group) + (level-method-22 () none) ;; 22 ;; (set-proto-vis! (_type_ symbol) int) + (lookup-text (_type_ text-id symbol) symbol) ;; 23 + (level-method-24 () none) ;; 24 ;; (level-method-24 () none) + (level-method-25 () none) ;; 25 ;; (birth (_type_) _type_) + (level-method-26 () none) ;; 26 ;; (level-status-update! (_type_ symbol) _type_) + (level-method-27 () none) ;; 27 ;; (load-common-package (_type_) none) + (level-method-28 () none) ;; 28 ;; (init-vis-from-bsp (_type_) none) + (level-method-29 () none) ;; 29 ;; (vis-clear (_type_) none) + ) + ) + +(deftype level-group (basic) + ((length int32 :offset-assert 4) + (top-level level :offset 12) ;; added + (entity-link entity-links :offset-assert 16) + (border? symbol :offset-assert 20) ;; guessed by decompiler + (vis? symbol :offset-assert 24) ;; guessed by decompiler + (want-level level :offset-assert 28) + (receiving-level level :offset-assert 32) + (load-commands pair :offset-assert 36) ;; guessed by decompiler + (play? symbol :offset-assert 40) ;; guessed by decompiler + (prev-target-pos vector 2 :inline :offset-assert 48) + (curr-target-pos vector 2 :inline :offset-assert 80) + (prev-camera-pos vector 2 :inline :offset-assert 112) + (curr-camera-pos vector 2 :inline :offset-assert 144) + (heap kheap :inline :offset-assert 176) + (car-heap kheap :inline :offset-assert 192) + (driver-heap kheap :inline :offset-assert 208) + (cars-heap kheap :inline :offset-assert 224) + (sound-bank sound-bank-state 7 :inline :offset-assert 240) ;; guessed by decompiler + (disk-load-timing? symbol :offset-assert 352) ;; guessed by decompiler + (load-level symbol :offset-assert 356) ;; guessed by decompiler + (load-size uint32 :offset-assert 360) + (load-time float :offset-assert 364) + (load-login-time float :offset-assert 368) + (draw-level-count int32 :offset-assert 372) + (draw-level level 19 :offset-assert 376) ;; guessed by decompiler + (draw-index-map uint8 19 :offset-assert 452) ;; guessed by decompiler + (shared-ties basic :offset-assert 472) + (status-cache-sync uint16 :offset-assert 476) + (load-order uint64 :offset-assert 480) + (wide-level symbol 2 :offset-assert 488) + (tfrag-login-level basic :offset-assert 496) + (level level 19 :inline :offset 544) ;; guessed by decompiler + ;; (data UNKNOWN 19 :offset-assert 548) + (level0 level :inline :offset-assert 544 :overlay-at (-> level 0)) + (level1 level :inline :offset-assert 1984 :overlay-at (-> level 1)) + (level2 level :inline :offset-assert 3424 :overlay-at (-> level 2)) + (level3 level :inline :offset-assert 4864 :overlay-at (-> level 3)) + (level4 level :inline :offset-assert 6304 :overlay-at (-> level 4)) + (level5 level :inline :offset-assert 7744 :overlay-at (-> level 5)) + (car0 level :inline :offset-assert 9184 :overlay-at (-> level 6)) + (car1 level :inline :offset-assert 10624 :overlay-at (-> level 7)) + (car2 level :inline :offset-assert 12064 :overlay-at (-> level 8)) + (car3 level :inline :offset-assert 13504 :overlay-at (-> level 9)) + (car4 level :inline :offset-assert 14944 :overlay-at (-> level 10)) + (car5 level :inline :offset-assert 16384 :overlay-at (-> level 11)) + (driver0 level :inline :offset-assert 17824 :overlay-at (-> level 12)) + (driver1 level :inline :offset-assert 19264 :overlay-at (-> level 13)) + (driver2 level :inline :offset-assert 20704 :overlay-at (-> level 14)) + (driver3 level :inline :offset-assert 22144 :overlay-at (-> level 15)) + (driver4 level :inline :offset-assert 23584 :overlay-at (-> level 16)) + (driver5 level :inline :offset-assert 25024 :overlay-at (-> level 17)) + (level-default level :inline :offset-assert 26464 :overlay-at (-> level 18)) + (pad2 uint32) + ) + :method-count-assert 34 + :size-assert #x6d04 + :flag-assert #x2200006d04 + (:methods + (level-group-method-9 () none) ;; 9 ;; (level-get (_type_ symbol) level) + (level-group-method-10 () none) ;; 10 ;; (level-get-with-status (_type_ symbol) level) + (level-group-method-11 () none) ;; 11 ;; (get-level-by-heap-ptr-and-status (_type_ pointer symbol) level) + (level-group-method-12 () none) ;; 12 ;; (level-get-for-use (_type_ symbol symbol) level) + (level-group-method-13 () none) ;; 13 ;; (activate-levels! (_type_) int) + (level-group-method-14 () none) ;; 14 ;; (debug-print-entities (_type_ symbol type string) none) + (level-group-method-15 () none) ;; 15 ;; (debug-draw-actors (_type_ symbol) none) + (level-group-method-16 () none) ;; 16 ;; (assign-draw-indices (_type_) none) + (level-group-method-17 () none) ;; 17 ;; (actors-update (_type_) none) + (level-group-method-18 () none) ;; 18 ;; (update-nav-meshes-method (_type_) none) + (level-group-method-19 () none) ;; 19 ;; (level-update (_type_) none) + (level-group-method-20 () none) ;; 20 ;; (level-get-target-inside (_type_) level) + (level-group-method-21 () none) ;; 21 ;; (init-level-system (_type_ symbol) none) + (level-group-method-22 () none) ;; 22 ;; (art-group-get-by-name (_type_ string (pointer level)) art-group) + (level-group-method-23 () none) ;; 23 ;; (update-vis-volumes (_type_) none) + (level-group-method-24 () none) ;; 24 ;; (level-group-method-24 (_type_) none) + (level-group-method-25 () none) ;; 25 ;; (print-volume-sizes (_type_) none) + (level-group-method-26 () none) ;; 26 ;; (status-of-level-and-borrows (_type_ symbol symbol) symbol) + (level-group-method-27 () none) ;; 27 ;; (do-nothing (_type_) none) + (level-group-method-28 () none) ;; 28 ;; (load-in-progress? (_type_) symbol) + (level-group-method-29 () none) ;; 29 ;; (is-load-allowed? (_type_ (pointer symbol)) symbol) + (level-group-method-30 () none) ;; 30 ;; (level-get-most-disposable (_type_) level) + (level-group-method-31 () none) ;; 31 + (level-group-method-32 () none) ;; 32 + (level-group-method-33 () none) ;; 33 + ) + ) + +(define-extern *level* level-group) +(define-extern *draw-index* int) +(define-extern *level-index* int) +(define-extern *city-mode* symbol) +(define-extern *lobby-levels* (array level)) +(define-extern *lobby-levels-display* (array level)) +(define-extern *lobby-levels-tmp* (array level)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; minimap-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype minimap-class-node (structure) + ((default-position vector :inline :offset-assert 0) + (flags minimap-flag :offset-assert 16) + (name string :offset-assert 20) ;; guessed by decompiler + (icon-xy vector2ub :inline :offset-assert 24) + (class uint16 :offset-assert 26) ;; minimap-class + (scale float :offset-assert 28) + (color rgba :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype connection-minimap (connection-pers) + ((next connection-minimap :offset-assert 0) + (handle uint64 :offset-assert 8) ;; handle + (position vector :offset-assert 16) + (alpha float :offset-assert 20) + (flags minimap-flag :offset-assert 24) + (class minimap-class-node :offset-assert 28) + (node uint16 :offset-assert 32) + (edge-ry int16 :offset-assert 34) + (last-world-pos vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ;; field key uses ~A with a signed load. + ) +|# + +;; engine-minimap is already defined! + +#| +(deftype minimap-draw-work (structure) + ((buf dma-buffer :offset-assert 0) ;; guessed by decompiler + (global-flags uint32 :offset-assert 4) + (draw-pos vector4w :inline :offset-assert 16) + (mat matrix :inline :offset-assert 32) + (corner vector 4 :offset-assert 96) ;; guessed by decompiler + (vec vector :inline :offset-assert 160) + (pos vector :inline :offset-assert 176) + (mid-val float :offset-assert 192) + ) + :method-count-assert 9 + :size-assert #xc4 + :flag-assert #x9000000c4 + ) +|# + +#| +(deftype minimap (structure) + ((draw-tmpl dma-gif-packet :inline :offset-assert 0) + (sprite-tmpl dma-gif-packet :inline :offset-assert 32) + (sprite2-tmpl dma-gif-packet :inline :offset-assert 64) + (adgif-tmpl dma-gif-packet :inline :offset-assert 96) + (color vector4w :inline :offset-assert 128) + (tex-coords bounding-box2 :inline :offset-assert 144) + (race-corner vector :inline :offset-assert 160) + (mat matrix :inline :offset-assert 176) + (tex-offset vector2 :inline :offset-assert 240) + (race-tex texture :offset-assert 248) ;; guessed by decompiler + (race-scale float :offset-assert 252) + (meters-per-texel float :offset-assert 256) + (icon-inv-scale float :offset-assert 260) + (fade float :offset-assert 264) + (goal-time float :offset-assert 268) + (engine engine-minimap :offset-assert 272) ;; guessed by decompiler + (engine-key uint32 :offset-assert 276) + ) + :method-count-assert 16 + :size-assert #x118 + :flag-assert #x1000000118 + (:methods + (minimap-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (minimap-method-10 () none) ;; 10 ;; (get-trail-for-connection (_type_ connection-minimap symbol) minimap-trail) + (minimap-method-11 () none) ;; 11 ;; (get-icon-draw-pos (_type_ connection-minimap minimap-trail vector float vector) symbol) + (minimap-method-12 () none) ;; 12 ;; (add-icon! (_type_ process uint int vector int) connection-minimap) + (minimap-method-13 () none) ;; 13 ;; (free-trail-by-connection (_type_ connection-minimap) none) + (minimap-method-14 () none) ;; 14 ;; (update-trails (_type_) none) + (minimap-method-15 () none) ;; 15 ;; (draw-1 (_type_ dma-buffer vector4w symbol) none) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; main-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type debug-menu-context basic) + +;; +++main-h:collide-spec +(defenum collide-spec + :bitfield #t + :type uint32 + (backgnd 0) + (jak 1) + (bot 2) + (crate 3) + (civilian 4) + (enemy 5) + (obstacle 6) + (vehicle-sphere 7) + (vehicle-debris 8) + (hit-by-player-list 9) + (hit-by-others-list 10) + (player-list 11) + (water 12) + (collectable 13) + (blocking-plane 14) + (projectile 15) + (jak-vulnerable 16) + (camera-blocker 17) + (los-blocker 18) + (nav-mesh 19) + (pusher 20) + (bot-targetable 21) + (special-obstacle 22) + (coliseum-ball 23) + (obstacle-for-jak 24) + (impenetrable-obj 25) + (shield 26) + (vehicle-sphere-no-probe 27) + ) +;; ---main-h:collide-spec + +;; +++main-h:strip-lines-controls +(defenum strip-lines-controls + :type int64 + ) +;; ---main-h:strip-lines-controls + +;; +++main-h:scene-controls +(defenum scene-controls + :type int64 + :bitfield #t + ) +;; ---main-h:scene-controls + +;; +++main-h:bot-marks-controls +(defenum bot-marks-controls + :type int64 + ) +;; ---main-h:bot-marks-controls + +;; +++main-h:race-marks-controls +(defenum race-marks-controls + :type int64 + ) +;; ---main-h:race-marks-controls + +;; +++main-h:race-selection +(defenum race-selection + :type int64 + (rs1 1) + (rs2 2) + (rs3 3) + (rs4 4) + (rs5 5) + (rs6 6) + ) +;; ---main-h:race-selection + +;; +++main-h:subdivide-setting +(defenum subdivide-setting + :type int64 + ) +;; ---main-h:subdivide-setting + +(deftype frame-stats (structure) + ((field-time time-frame 2 :offset-assert 0) ;; guessed by decompiler + (field int32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype screen-filter (basic) + ((draw? symbol :offset-assert 4) ;; guessed by decompiler + (bucket int32 :offset-assert 8) ;; bucket-id + (depth int32 :offset-assert 12) + (ztest uint64 :offset-assert 16) + (color vector :inline :offset-assert 32) + (color-src vector :inline :offset-assert 48) + (color-dest vector :inline :offset-assert 64) + (extra vector :inline :offset-assert 80) + (speed float :offset-assert 80 :overlay-at (-> extra x)) + (current-interp float :offset-assert 84 :overlay-at (-> extra y)) + (lock-vsync? symbol :offset-assert 96) ;; guessed by decompiler + (idx int32 :offset-assert 100) + (frames int32 :offset-assert 104) + ) + :method-count-assert 12 + :size-assert #x6c + :flag-assert #xc0000006c + (:methods + (draw "Add DMA data to our bucket to draw the filter." (_type_) none) ;; 9 + (screen-filter-method-10 () none) ;; 10 ;; (setup (_type_ vector vector float bucket-id int int symbol) none) + (disable (_type_) none) ;; 11 + ) + ) + +(deftype col-rend (basic) + ((draw? symbol :offset-assert 4) ;; guessed by decompiler + (outline? symbol :offset-assert 8) ;; guessed by decompiler + (show-back-faces? symbol :offset-assert 12) ;; guessed by decompiler + (show-normals? symbol :offset-assert 16) ;; guessed by decompiler + (ghost-hidden? symbol :offset-assert 20) ;; guessed by decompiler + (show-only uint32 :offset-assert 24) + (show-only-mask uint32 :offset-assert 28) + (cspec collide-spec :offset-assert 32) ;; guessed by decompiler + (track uint8 :offset-assert 36) + (bbox-radius float :offset-assert 40) + (bbox-center vector :inline :offset-assert 48) + (camera-to-bbox-dist float :offset-assert 64) + ) + :method-count-assert 10 + :size-assert #x44 + :flag-assert #xa00000044 + (:methods + (draw (_type_) none) ;; 9 + ) + ) + +(define-extern *stats-poly* symbol) +(define-extern *stats-memory* symbol) +(define-extern *stats-memory-short* symbol) +(define-extern *stats-memory-level-index* int) +(define-extern *stats-collide* symbol) +(define-extern *stats-bsp* symbol) +(define-extern *stats-buffer* symbol) +(define-extern *stats-target* symbol) +(define-extern *stats-profile-bars* symbol) +(define-extern *stats-perf* symbol) +(define-extern *stats-sound* symbol) +(define-extern *artist-all-visible* symbol) +(define-extern *artist-flip-visible* symbol) +(define-extern *artist-fix-visible* symbol) +(define-extern *artist-fix-frustum* symbol) +(define-extern *artist-error-spheres* symbol) +(define-extern *artist-use-menu-subdiv* symbol) +(define-extern *display-profile* symbol) +(define-extern *display-sidekick-stats* symbol) +(define-extern *display-quad-stats* symbol) +(define-extern *display-tri-stats* symbol) +(define-extern *display-ground-stats* symbol) +(define-extern *display-collision-marks* symbol) +(define-extern *display-collide-cache* symbol) +(define-extern *display-render-collision* symbol) +(define-extern *display-hipri-collision-marks* symbol) +(define-extern *display-edge-collision-marks* symbol) +(define-extern *display-geo-marks* symbol) +(define-extern *display-target-marks* symbol) +(define-extern *target-rc-board-controls* symbol) +(define-extern *display-collide-history* int) +(define-extern *amy-cam* symbol) +(define-extern *display-xyz-axes* symbol) +(define-extern *display-cam-collide-history* symbol) +(define-extern *record-cam-collide-history* symbol) +(define-extern *display-cam-master-marks* symbol) +(define-extern *display-cam-other* symbol) +(define-extern *display-camera-marks* symbol) +(define-extern *camera-no-mip-correction* symbol) +(define-extern *camera-turbo-free* symbol) +(define-extern *suppress-vehicle-respawn* symbol) +(define-extern *display-cam-los-info* symbol) +(define-extern *display-cam-los-debug* symbol) +(define-extern *display-cam-los-marks* symbol) +(define-extern *display-cam-coll-marks* symbol) +(define-extern *display-camera-info* symbol) +(define-extern *display-camera-old-stats* symbol) +(define-extern *display-camera-last-attacker* symbol) +(define-extern *display-file-info* symbol) +(define-extern *display-actor-marks* symbol) +(define-extern *display-sprite-info* symbol) +(define-extern *display-sprite-marks* symbol) +(define-extern *display-sprite-spheres* symbol) +(define-extern *display-bsp-errors* symbol) +(define-extern *display-entity-errors* symbol) +(define-extern *display-capture-mode* symbol) +(define-extern *display-instance-info* symbol) +(define-extern *display-deci-count* symbol) +(define-extern *sync-dma* symbol) +(define-extern *display-strip-lines* strip-lines-controls) +(define-extern *display-battle-marks* symbol) +(define-extern *display-joint-axes* symbol) +(define-extern *display-nav-marks* symbol) +(define-extern *display-nav-network* symbol) +(define-extern *display-path-marks* symbol) +(define-extern *display-vol-marks* symbol) +(define-extern *display-water-marks* symbol) +(define-extern *display-nav-mesh* symbol) +(define-extern *display-race-mesh* symbol) +(define-extern *display-ai-tuning* symbol) +(define-extern *display-actor-pointer* symbol) +(define-extern *display-actor-vis* symbol) +(define-extern *display-actor-graph* symbol) +(define-extern *display-traffic-height-map* symbol) +(define-extern *display-trail-graph* symbol) +(define-extern *display-color-bars* symbol) +(define-extern *display-bug-report* symbol) +(define-extern *display-level-border* symbol) +(define-extern *display-memcard-info* symbol) +(define-extern *display-split-boxes* symbol) +(define-extern *display-split-box-info* symbol) +(define-extern *display-texture-distances* symbol) +(define-extern *display-texture-download* symbol) +(define-extern *display-art-control* symbol) +(define-extern *display-gui-control* symbol) +(define-extern *display-level-spheres* symbol) +(define-extern *time-of-day-fast* symbol) +(define-extern *display-iop-info* symbol) +(define-extern *slow-frame-rate* symbol) +(define-extern *display-region-marks* symbol) +(define-extern *execute-regions* symbol) +(define-extern *disable-bot* symbol) +(define-extern *debug-reverb* symbol) +(define-extern *debug-whoosh* symbol) +(define-extern *debug-engine-sounds* symbol) +(define-extern *debug-pause* symbol) +(define-extern *debug-view-anims* symbol) +(define-extern *debug-unkillable* symbol) +(define-extern *debug-player-vehicle-unkillable* symbol) +(define-extern *debug-actor* process) +(define-extern *debug-force-highspeed* symbol) +(define-extern *gun-marks* symbol) +(define-extern *debug-split-screen* symbol) +(define-extern *ignore-want-load-display* symbol) +(define-extern *bug-report-output-mode* symbol) +(define-extern *draw-debug-boxes* symbol) +(define-extern *hide-menus* symbol) +(define-extern *list-all-scenes* object) ;; TODO +(define-extern *display-scene-control* scene-controls) +(define-extern *display-bot-marks* bot-marks-controls) +(define-extern *display-race-marks* race-marks-controls) +(define-extern *race-record-path* symbol) +(define-extern *select-race* race-selection) +(define-extern *select-race-path* int) +(define-extern *bot-record-path* int) +(define-extern *subdivide-draw-mode* subdivide-setting) +(define-extern *subdivide-scissor-draw-mode* subdivide-setting) +(define-extern *subdivide-foreground-draw-mode* subdivide-setting) +(define-extern *subdivide-ocean-draw-mode* subdivide-setting) +(define-extern *dproc* process) +(define-extern *run* symbol) +(define-extern *teleport* symbol) +(define-extern *teleport-count* int) +(define-extern *draw-hook* (function none)) +(define-extern *debug-hook* pair) +(define-extern *menu-hook* (function debug-menu-context)) +(define-extern *progress-hook* (function none)) +(define-extern *dma-timeout-hook* (function none)) +(define-extern *frame-stats* frame-stats) +(define-extern *col-rend* col-rend) +(define-extern debug-actor? (function object symbol)) +(define-extern *record-fma* object) ;; TODO +(define-extern *record-fma-use-path* object) ;; TODO +(define-extern *record-fma-path-mode* object) ;; TODO +(define-extern *record-fma-path-high-res* object) ;; TODO +(define-extern *record-fma-path-dry-run* object) ;; TODO +(define-extern *record-fma-real* object) ;; TODO +(define-extern *record-fma-low-res* object) ;; TODO +(define-extern *record-fma-start* object) ;; TODO +(define-extern *record-fma-end* object) ;; TODO +(define-extern *record-fma-pal* object) ;; TODO +(define-extern *profile-slot* object) ;; TODO +(define-extern *game-mode* symbol) +(define-extern *lobby-local-players* object) ;; TODO +(define-extern *first-boot* symbol) +(define-extern *cheat-temp* (pointer int32)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; traffic-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-spawn-params (structure) + ((behavior uint64 :offset-assert 0) + (nav-mesh basic :offset-assert 8) + (position vector :inline :offset-assert 16) + (rotation quaternion :inline :offset-assert 32) + (velocity vector :inline :offset-assert 48) + (handle uint64 :offset-assert 64) + (handle-parent uint64 :offset-assert 72) + (user-data uint32 :offset-assert 80) + (entity basic :offset-assert 84) + (flags uint32 :offset-assert 88) + (player-id int8 :offset-assert 92) + (level-slot int8 :offset-assert 93) + (driver-type uint8 :offset-assert 94) + (driver-slot int8 :offset-assert 95) + (impact-callback basic :offset-assert 96) + (proc basic :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) +|# + +;; (define-extern *vehicle-manager* object) ;; vehicle-manager +;; (define-extern vehicle-type->string function) +;; (define-extern driver-type->string function) +;; (define-extern type-from-driver-type function) +;; (define-extern level-from-driver-type function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; game-task-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++game-task-h:game-task +(defenum game-task + :type uint8 + :bitfield #f + (none 0) + (complete 1) + (dummy0 2) + (eco-blue-button 3) + (eco-yellow-button 4) + (eco-red-button 5) + (city-start 6) + (kras-training 7) + (spargus-race 8) + (docks-deathrace 9) + (kcross-deathmatch 10) + (spargus-timebox 11) + (dromdoc-race 12) + (cliffs-artifact 13) + (drome-race 14) + (ice-deathrace 15) + (peak-football 16) + (ice-race 17) + (jungle-timebox 18) + (snow-deathrace 19) + (temple-race 20) + (kcross-hunt 21) + (icepass-rushhour 22) + (kras-race 23) + (spargus-deathrace 24) + (docks-football 25) + (coliseum-deathmatch 26) + (sewer-race 27) + (canspar-race 28) + (kras-football 29) + (atoll-artifact 30) + (dockkra-timebox 31) + (snow-race 32) + (jungle-race 33) + (drome-deathrace 34) + (cliffs-hunt 35) + (desarena-deathmatch 36) + (canyon-rushhour 37) + (havjung-race 38) + (kras-deathrace 39) + (spartem-race 40) + (jungle-deathrace 41) + (iceberg-race 42) + (desisle-deathmatch 43) + (haven-race 44) + (canyon-timebox 45) + (kcross-artifact 46) + (kratour-race 47) + (havtour-race 48) + (dockkra-deathrace 49) + (ice-timebox 50) + (canyon-race 51) + (desarena-artifact 52) + (canspar-rushhour 53) + (dromdoc-football 54) + (cliffs-deathmatch 55) + (spatour-race 56) + (kras-timebox 57) + (kcross-ctf 58) + (docks-race 59) + (spartem-deathrace 60) + (peak-timebox 61) + (snobowl-deathmatch 62) + (drome-rushhour 63) + (icepass-race 64) + (spargus-football 65) + (havsew-timebox 66) + (dromdoc-deathrace 67) + (peak-race 68) + (temple-deathrace 69) + (dromdoc-rushhour 70) + (havsew-race 71) + (coliseum-artifact 72) + (canyon-deathrace 73) + (sewer-timebox 74) + (cliffs-ctf 75) + (kras-rushhour 76) + (atoll-deathmatch 77) + (spargus-rushhour 78) + (drome-football 79) + (icetour-race 80) + (havsew-deathrace 81) + (snobowl-artifact 82) + (canspar-timebox 83) + (temple-football 84) + (desisle-ctf 85) + (peak-deathrace 86) + (dockkra-race 87) + (coliseum-assassin 88) + (kcross-assassin 89) + (atoll-assassin 90) + (cliffs-assassin 91) + (desarena-assassin 92) + (desisle-assassin 93) + (snobowl-assassin 94) + (snow-rushhour 95) + (icepass-deathrace 96) + (jungle-rushhour 97) + (snow-football 98) + (docks-timebox 99) + (desarena-ctf 100) + (dockkra-football 101) + (drome-timebox 102) + (temple-timebox 103) + (sewer-rushhour 104) + (spartem-football 105) + (snow-timebox 106) + (icepass-football 107) + (snobowl-ctf 108) + (dromdoc-timebox 109) + (canspar-football 110) + (havsew-rushhour 111) + (ice-football 112) + (coliseum-ctf 113) + (atoll-hunt 114) + (havjng-football 115) + (haven-deathrace 116) + (iceberg-football 117) + (havjung-rushhour 118) + (sewer-football 119) + (desisle-hunt 120) + (jungle-football 121) + (haven-football 122) + (havjung-timebox 123) + (docks-rushhour 124) + (haven-timebox 125) + (kras-timetrial 126) + (docks-timetrial 127) + (drome-timetrial 128) + (dockkra-timetrial 129) + (dromdoc-timetrial 130) + (kratour-timetrial 131) + (jungle-timetrial 132) + (haven-timetrial 133) + (sewer-timetrial 134) + (havjung-timetrial 135) + (havsew-timetrial 136) + (havtour-timetrial 137) + (spargus-timetrial 138) + (canyon-timetrial 139) + (temple-timetrial 140) + (canspar-timetrial 141) + (spartem-timetrial 142) + (spatour-timetrial 143) + (snow-timetrial 144) + (peak-timetrial 145) + (ice-timetrial 146) + (iceberg-timetrial 147) + (icepass-timetrial 148) + (icetour-timetrial 149) + (sewer-deathrace 150) + (desarena-king-of-hill 151) + (ice-training 152) + (cliffs-training 153) + (snow-training2 154) + (jungle-training 155) + (coliseum-king-of-hill 156) + (snowbowl-king-of-hill 157) + (cliffs-king-of-hill 158) + (havjung-deathrace 159) + (haven-rushhour 160) + (kcross-king-of-hill 161) + (havsew-football 162) + (dockkra-rushhour 163) + (canyon-football 164) + (canspar-deathrace 165) + (spartem-timebox 166) + (spartem-rushhour 167) + (temple-rushhour 168) + (icepass-timebox 169) + (iceberg-timebox 170) + (ice-rushhour 171) + (iceberg-deathrace 172) + (iceberg-rushhour 173) + (peak-rushhour 174) + (atoll-ctf 175) + (desisle-artifact 176) + (kratour-boss-battle 177) + (brdroom-intro-b 178) + (city-win 179) + (artist-artist 180) + (max 181) + ) +;; ---game-task-h:game-task + +;; +++game-task-h:game-task-node +(defenum game-task-node + :type uint16 + (none 0) + (city-start-start 1) + (city-start-introduction 2) + (city-start-resolution 3) + (kras-training-task 4) + (spargus-race-task 5) + (docks-deathrace-task 6) + (kcross-deathmatch-task 7) + (spargus-timebox-task 8) + (dromdoc-race-task 9) + (cliffs-artifact-task 10) + (drome-race-task 11) + (ice-deathrace-task 12) + (peak-football-task 13) + (ice-race-task 14) + (jungle-timebox-task 15) + (snow-deathrace-task 16) + (temple-race-task 17) + (kcross-hunt-task 18) + (icepass-rushhour-task 19) + (kras-race-task 20) + (spargus-deathrace-task 21) + (docks-football-task 22) + (coliseum-deathmatch-task 23) + (sewer-race-task 24) + (canspar-race-task 25) + (kras-football-task 26) + (atoll-artifact-task 27) + (dockkra-timebox-task 28) + (snow-race-task 29) + (jungle-race-task 30) + (drome-deathrace-task 31) + (cliffs-hunt-task 32) + (desarena-deathmatch-task 33) + (canyon-rushhour-task 34) + (havjung-race-task 35) + (kras-deathrace-task 36) + (spartem-race-task 37) + (jungle-deathrace-task 38) + (iceberg-race-task 39) + (desisle-deathmatch-task 40) + (haven-race-task 41) + (canyon-timebox-task 42) + (kcross-artifact-task 43) + (kratour-race-task 44) + (havtour-race-task 45) + (dockkra-deathrace-task 46) + (ice-timebox-task 47) + (canyon-race-task 48) + (desarena-artifact-task 49) + (canspar-rushhour-task 50) + (dromdoc-football-task 51) + (cliffs-deathmatch-task 52) + (spatour-race-task 53) + (kras-timebox-task 54) + (kcross-ctf-task 55) + (docks-race-task 56) + (spartem-deathrace-task 57) + (peak-timebox-task 58) + (snobowl-deathmatch-task 59) + (drome-rushhour-task 60) + (icepass-race-task 61) + (spargus-football-task 62) + (havsew-timebox-task 63) + (dromdoc-deathrace-task 64) + (peak-race-task 65) + (temple-deathrace-task 66) + (dromdoc-rushhour-task 67) + (havsew-race-task 68) + (coliseum-artifact-task 69) + (canyon-deathrace-task 70) + (sewer-timebox-task 71) + (cliffs-ctf-task 72) + (kras-rushhour-task 73) + (atoll-deathmatch-task 74) + (spargus-rushhour-task 75) + (drome-football-task 76) + (icetour-race-task 77) + (havsew-deathrace-task 78) + (snobowl-artifact-task 79) + (canspar-timebox-task 80) + (temple-football-task 81) + (desisle-ctf-task 82) + (peak-deathrace-task 83) + (dockkra-race-task 84) + (coliseum-assassin-task 85) + (kcross-assassin-task 86) + (atoll-assassin-task 87) + (cliffs-assassin-task 88) + (desarena-assassin-task 89) + (desisle-assassin-task 90) + (snobowl-assassin-task 91) + (snow-rushhour-task 92) + (icepass-deathrace-task 93) + (jungle-rushhour-task 94) + (snow-football-task 95) + (docks-timebox-task 96) + (desarena-ctf-task 97) + (dockkra-football-task 98) + (drome-timebox-task 99) + (temple-timebox-task 100) + (sewer-rushhour-task 101) + (spartem-football-task 102) + (snow-timebox-task 103) + (icepass-football-task 104) + (snobowl-ctf-task 105) + (dromdoc-timebox-task 106) + (canspar-football-task 107) + (havsew-rushhour-task 108) + (ice-football-task 109) + (coliseum-ctf-task 110) + (atoll-hunt-task 111) + (havjung-football-task 112) + (haven-deathrace-task 113) + (iceberg-football-task 114) + (havjung-rushhour-task 115) + (sewer-football-task 116) + (desisle-hunt-task 117) + (jungle-football-task 118) + (haven-football-task 119) + (havjung-timebox-task 120) + (docks-rushhour-task 121) + (haven-timebox-task 122) + (kras-timetrial-task 123) + (docks-timetrial-task 124) + (drome-timetrial-task 125) + (dockkra-timetrial-task 126) + (dromdoc-timetrial-task 127) + (kratour-timetrial-task 128) + (jungle-timetrial-task 129) + (haven-timetrial-task 130) + (sewer-timetrial-task 131) + (havjung-timetrial-task 132) + (havsew-timetrial-task 133) + (havtour-timetrial-task 134) + (spargus-timetrial-task 135) + (canyon-timetrial-task 136) + (temple-timetrial-task 137) + (canspar-timetrial-task 138) + (spartem-timetrial-task 139) + (spatour-timetrial-task 140) + (snow-timetrial-task 141) + (peak-timetrial-task 142) + (ice-timetrial-task 143) + (iceberg-timetrial-task 144) + (icepass-timetrial-task 145) + (icetour-timetrial-task 146) + (sewer-deathrace-task 147) + (desarena-king-of-hill-task 148) + (ice-training-task 149) + (cliffs-training-task 150) + (snow-training2-task 151) + (jungle-training-task 152) + (coliseum-king-of-hill-task 153) + (snobowl-king-of-hill-task 154) + (cliffs-king-of-hill-task 155) + (havjung-deathrace-task 156) + (haven-rushhour-task 157) + (kcross-king-of-hill-task 158) + (havsew-football-task 159) + (dockkra-rushhour-task 160) + (canyon-football-task 161) + (canspar-deathrace-task 162) + (spartem-timebox-task 163) + (spartem-rushhour-task 164) + (temple-rushhour-task 165) + (icepass-timebox-task 166) + (iceberg-timebox-task 167) + (ice-rushhour-task 168) + (iceberg-deathrace-task 169) + (iceberg-rushhour-task 170) + (peak-rushhour-task 171) + (atoll-ctf-task 172) + (desisle-artifact-task 173) + (kratour-boss-battle-task 174) + (brdroom-intro-b-task 175) + (city-win-task 176) + (artist-artist-task 177) + ) +;; ---game-task-h:game-task-node + +;; +++game-task-h:game-task-action +(defenum game-task-action + :bitfield #f + :type uint8 + (hide 0) + (idle 1) + (say 2) + (talk 3) + (show 4) + (trade 5) + (play 6) + (menu 7) + ) +;; ---game-task-h:game-task-action + +;; +++game-task-h:game-task-actor +(defenum game-task-actor + :type uint8 + (none 0) + (minimap 1) + (oracle-oracle 2) + (daxter 3) + (damus-arena 4) + (damus-waspal 5) + (damus-desert 6) + (damus-wasdoors 7) + (damus-wascity 8) + (damus-ruins 9) + (kleever-arena 10) + (kleever-wasdoors 11) + (kleever-pen 12) + (seem-wascity 13) + (seem-temple 14) + (ashelin-oasis 15) + (ashelin-talkbox 16) + (ashelin-freehq 17) + (veger-cave 18) + (veger-ruins 19) + (torn-hiphog 20) + (torn-hiptable 21) + (torn-hipbar 22) + (torn-hipbooth 23) + (torn-freehq 24) + (tess-gungame 25) + (samos-talkbox 26) + (sig-talkbox 27) + (sig-wasdoors 28) + (sig-nest 29) + (pecker-onintent 30) + (onin-onintent 31) + (onin-talkbox 32) + (keira-garage 33) + (was-pre-game-wascityb 34) + (kleever-wascityb 35) + (seem-wascitya 36) + (gun-gungame 37) + (vin-vinroom 38) + (power-game-vinroom 39) + (jinx-hiphog 40) + (samos-genb 41) + (wascity-turret 42) + (monk-wascity 43) + (seem-leaper 44) + (wascity-leaper 45) + (was-pre-game-deserte 46) + (samos-freehq 47) + (onin-freehq 48) + (keira-freehq 49) + (keira-genb 50) + (monk-mummy 51) + (pecker 52) + (samos-onintent 53) + (unused-slot-8 54) + (unused-slot-9 55) + (unused-slot-10 56) + (unused-slot-11 57) + (unused-slot-12 58) + (unused-slot-13 59) + (unused-slot-14 60) + (unused-slot-15 61) + (unused-slot-16 62) + (unused-slot-17 63) + (unused-slot-18 64) + (unused-slot-19 65) + (unused-slot-20 66) + (unused-slot-21 67) + (unused-slot-22 68) + (unused-slot-23 69) + (unused-slot-24 70) + (unused-slot-25 71) + (unused-slot-26 72) + (unused-slot-27 73) + (unused-slot-28 74) + (unused-slot-29 75) + (unused-slot-30 76) + (unused-slot-31 77) + ) +;; ---game-task-h-game-task-actor + +;; +++game-task-h:game-task-node-command +(defenum game-task-node-command + :type uint8 + (none 0) + (add-sidekick 1) + (sub-sidekick 2) + (add-board 3) + (sub-board 4) + (add-gun-red-1 5) + (add-gun-red-2 6) + (add-gun-red-3 7) + (add-gun-red-ammo-1 8) + (add-gun-red-ammo-2 9) + (add-gun-yellow-1 10) + (add-gun-yellow-2 11) + (add-gun-yellow-3 12) + (add-gun-yellow-ammo-1 13) + (add-gun-yellow-ammo-2 14) + (add-gun-blue-1 15) + (add-gun-blue-2 16) + (add-gun-blue-3 17) + (add-gun-blue-ammo-1 18) + (add-gun-blue-ammo-2 19) + (add-gun-dark-1 20) + (add-gun-dark-2 21) + (add-gun-dark-3 22) + (add-gun-dark-ammo-1 23) + (add-gun-dark-ammo-2 24) + (add-pass-front-gate 25) + (add-pass-port-mh 26) + (add-pass-port-inda 27) + (add-pass-inda-indb 28) + (add-pass-indb-sluma 29) + (add-pass-slumb-genb 30) + (add-darkeco 31) + (add-darkjak 32) + (add-darkjak-smack 33) + (add-darkjak-bomb0 34) + (add-darkjak-bomb1 35) + (add-darkjak-tracking 36) + (add-darkjak-invinc 37) + (add-lighteco 38) + (add-lightjak 39) + (add-lightjak-regen 40) + (add-lightjak-freeze 41) + (add-lightjak-shield 42) + (add-lightjak-swoop 43) + (add-board-training 44) + (add-board-launch 45) + (add-board-trail 46) + (add-board-zap 47) + (sub-board-trail 48) + (add-artifact-invis 49) + (add-armor-0 50) + (add-armor-1 51) + (add-armor-2 52) + (add-armor-3 53) + (add-amulet-1 54) + (add-amulet-2 55) + (add-amulet-3 56) + (add-light-eco-crystal 57) + (add-dark-eco-crystal 58) + (add-seal 59) + (add-cypher-gliph 60) + (add-star-map 61) + (add-vehicle-toad 62) + (add-vehicle-snake 63) + (add-vehicle-scorpion 64) + (add-vehicle-turtle 65) + (add-vehicle-rhino 66) + (add-av-cube 67) + (add-av-reflector 68) + (add-av-prism 69) + (add-av-generator 70) + (add-av-map 71) + (add-jakc 72) + ) +;; ---game-task-h:game-task-node-command + +;; +++game-task-h:game-task-node-flag +(defenum game-task-node-flag + :type uint32 ;; guess + :bitfield #t + (closed 0) + (data 1) + (close-task 2) + (unlocked 3) + (abs-task-mask 4) + (set-task-mask 5) + (clear-task-mask 6) + (cup1 7) + (cup2 8) + (cup3 9) + (cup4 10) + (intro-b 11) + (icelands 12) + (haven-city 13) + (kras-city 14) + (spargus 15) + (qualifier 16) + (grand-prix 17) + (boss-battle 18) + (score-lower-is-better 19) + ) +;; ---game-task-h:game-task-node-flag + +;; +++game-task-h:game-task-icon +(defenum game-task-icon + :type uint8 + (gaticon-00) + (gaticon-01) + (gaticon-02) + (gaticon-03) + (gaticon-04) + (gaticon-05) + (gaticon-06) + (gaticon-07) + (gaticon-08) + (gaticon-09) + (gaticon-10) + (gaticon-11) + (gaticon-12) + (gaticon-13) + (gaticon-14) + (gaticon-15) + (gaticon-16) + (gaticon-17) + (gaticon-18) + (gaticon-19) + (gaticon-20) + (gaticon-21) + (gaticon-22) + (gaticon-23) + (gaticon-24) + (gaticon-25) + (gaticon-26) + (gaticon-27) + (gaticon-28) + (gaticon-29) + (gaticon-30) + (gaticon-31) + (gaticon-32) + (gaticon-33) + (gaticon-34) + (gaticon-35) + (gaticon-36) + (gaticon-37) + (gaticon-38) + (gaticon-39) + (gaticon-40) + (gaticon-41) + (gaticon-42) + (gaticon-43) + (gaticon-44) + (gaticon-45) + (gaticon-46) + (gaticon-47) + (gaticon-48) + (gaticon-49) + (gaticon-50) + (gaticon-51) + (gaticon-52) + (gaticon-53) + (gaticon-54) + (gaticon-55) + (gaticon-56) + (gaticon-57) + (gaticon-58) + (gaticon-59) + (gaticon-60) + (gaticon-61) + (gaticon-62) + (gaticon-63) + (gaticon-64) + (gaticon-65) + (gaticon-66) + (gaticon-67) + (gaticon-68) + (gaticon-69) + (gaticon-70) + (gaticon-71) + (gaticon-72) + (gaticon-73) + (gaticon-74) + (gaticon-75) + (gaticon-76) + (gaticon-77) + (gaticon-78) + (gaticon-79) + (gaticon-80) + (gaticon-81) + (gaticon-82) + (gaticon-83) + (gaticon-84) + (gaticon-85) + (gaticon-86) + (gaticon-87) + (gaticon-88) + (gaticon-89) + (gaticon-90) + (gaticon-91) + (gaticon-92) + (gaticon-93) + (gaticon-94) + (gaticon-95) + (gaticon-96) + (gaticon-97) + (gaticon-98) + (gaticon-99) + (gaticon-100) + (gaticon-101) + (gaticon-102) + (gaticon-103) + (gaticon-104) + (gaticon-105) + (gaticon-106) + (gaticon-107) + (gaticon-108) + (gaticon-109) + (gaticon-110) + (gaticon-111) + (gaticon-112) + (gaticon-113) + (gaticon-114) + (gaticon-115) + (gaticon-116) + (gaticon-117) + (gaticon-118) + (gaticon-119) + (gaticon-120) + (gaticon-121) + (gaticon-122) + (gaticon-123) + (gaticon-124) + (gaticon-125) + (gaticon-126) + (gaticon-127) + (gaticon-128) + (gaticon-129) + (gaticon-130) + (gaticon-131) + (gaticon-132) + (gaticon-133) + (gaticon-134) + (gaticon-135) + (gaticon-136) + (gaticon-137) + (gaticon-138) + (gaticon-139) + (gaticon-140) + (gaticon-141) + (gaticon-142) + (gaticon-143) + (gaticon-144) + (gaticon-145) + (gaticon-146) + (gaticon-147) + (gaticon-148) + (gaticon-149) + (gaticon-150) + (gaticon-151) + (gaticon-152) + (gaticon-153) + (gaticon-154) + (gaticon-155) + (gaticon-156) + (gaticon-157) + (gaticon-158) + (gaticon-159) + (gaticon-160) + (gaticon-161) + (gaticon-162) + (gaticon-163) + (gaticon-164) + (gaticon-165) + (gaticon-166) + (gaticon-167) + (gaticon-168) + (gaticon-169) + (gaticon-170) + (gaticon-171) + (gaticon-172) + (gaticon-173) + (gaticon-174) + (gaticon-175) + (gaticon-176) + (gaticon-177) + (gaticon-178) + (gaticon-179) + (gaticon-180) + (gaticon-181) + (gaticon-182) + (gaticon-183) + (gaticon-184) + (gaticon-185) + (gaticon-186) + (gaticon-187) + (gaticon-188) + (gaticon-189) + (gaticon-190) + (gaticon-191) + (gaticon-192) + (gaticon-193) + (gaticon-194) + (gaticon-195) + (gaticon-196) + (gaticon-197) + (gaticon-198) + (gaticon-199) + ) +;; ---game-task-h:game-task-icon + +;; +++game-task-h:game-task-medal +(defenum game-task-medal + :type uint8 + (none 0) + (bronze 1) + (silver 2) + (gold 3) + ) +;; ---game-task-h:game-task-medal + +(deftype task-level-info (structure) + ((flags uint32 :offset-assert 0) + (text-id uint32 :offset-assert 4) + (venue-text-id uint32 :offset-assert 8) + (caps-text-id uint32 :offset-assert 12) + (tex-name string :offset-assert 16) + (race-mesh-name string :offset-assert 20) + (race-banner-name string :offset-assert 24) + (race-ai-tuning-name string :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(declare-type text-id uint32) + +(define-extern *net-play-mode-names* (array symbol)) +(define-extern *net-play-mode-text-ids* object) +(define-extern *net-play-mode-icon-string* (array string)) +(define-extern *task-level* (array symbol)) +(define-extern *task-level-info* (array task-level-info)) +(define-extern *driver-list-cup1* array) +(define-extern *driver-list-cup1-gp* array) +(define-extern *driver-list-cup1-temp* array) +(define-extern *driver-list-cup2* array) +(define-extern *driver-list-cup2-gp* array) +(define-extern *driver-list-cup3* array) +(define-extern *driver-list-cup3-capture* array) +(define-extern *driver-list-cup3-gp* array) +(define-extern *driver-list-cup4-capture* array) +(define-extern *driver-list-cup4-gp* array) +(define-extern *driver-list-boss* array) +(define-extern *driver-list-training* array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; task-control-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype game-task-event (basic) + ((actor game-task-actor :offset-assert 4) + (action game-task-action :offset-assert 5) + (tex game-task-icon :offset-assert 6) ;; added + (icon uint16 :offset 6 :score -100) + (flags uint8 :offset 7) + (skull-cost uint8 :offset 7) + (scene string :offset-assert 8) + (distance meters :offset-assert 12) + ) + :flag-assert #x900000010 + ) + +(deftype game-task-node-stats (structure) + ((death-count uint8 :offset-assert 0) + (vehicle uint8 :offset-assert 1) + (medal uint8 :offset-assert 2) + (ranking uint8 :offset-assert 3) + (score float :offset-assert 4) + (time float :offset-assert 8) + (duration float :offset-assert 12) + (order uint16 :offset-assert 16) + (end-mode uint16 :offset-assert 18) + (cash uint32 :offset-assert 20) + (tuning uint32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +(deftype game-task-advanced-options (structure) + ((data uint8 8 :offset-assert 0) + (weapons uint32 :offset 0) + (flags uint8 :offset 4) + (param1 uint8 :offset 5) + (param2 uint8 :offset 6) + (param3 uint8 :offset 7) + (lword uint64 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype game-task-node-info (basic) + ((level symbol :offset-assert 4) ;; guessed by decompiler + (task game-task :offset-assert 8) + (net-play-mode uint8 :offset 9) + (name string :offset 12) ;; guessed by decompiler + (max-humans int8 :offset-assert 16) + (max-cpu int8 :offset-assert 17) + (min-players int8 :offset-assert 18) + (when-open (array game-task-event) :offset-assert 20) ;; guessed by decompiler + (flags game-task-node-flag :offset-assert 24) + (task-mask task-mask :offset-assert 28) + (borrow pair :offset-assert 32) ;; guessed by decompiler + (close-time uint32 :offset-assert 36) + (description text-id :offset-assert 40) ;; guessed by decompiler + (intro-scene basic :offset-assert 44) + (outro-scene basic :offset-assert 48) + (time-of-day int32 :offset-assert 52) + (task-sound-description basic :offset-assert 56) + (ipu basic :offset-assert 60) + (gold-array float 2 :offset-assert 64) + (silver-array float 2 :offset-assert 72) + (bronze-array float 2 :offset-assert 80) + (gold float :offset 64) + (silver float :offset 72) + (bronze float :offset 80) + (gold-hero float :offset 68) + (silver-hero float :offset 76) + (bronze-hero float :offset 84) + (medals-data uint32 :offset-assert 88) + (medals uint8 4 :offset 88) + (unlocked uint8 :offset 90) + (game-score-index uint8 :offset 91) + (adv-score int16 :offset-assert 92) + (exb-score int16 :offset-assert 94) + (ai-tuning-indices basic :offset-assert 96) + (sound-bank basic :offset-assert 100) + (play-count uint32 :offset-assert 104) + (time-limit uint32 :offset-assert 108) + (ai-difficulty uint8 :offset-assert 112) + (ai-easier-after uint8 :offset-assert 113) + (ai-min-difficulty uint8 :offset-assert 114) + (ai-difficulty-step uint8 :offset-assert 115) + (default-advanced-options game-task-advanced-options :inline :offset-assert 120) + (user-advanced-options game-task-advanced-options :inline :offset-assert 128) + (default-advanced-options-adventure game-task-advanced-options :inline :offset-assert 136) + (adventure-drivers basic :offset-assert 144) + (race-start-speech basic :offset-assert 148) + (gp-start-speech basic :offset-assert 152) + (gp-win-speech basic :offset-assert 156) + (gp-finish-speech basic :offset-assert 160) + (high-scores-default (array float) :offset-assert 164) + (high-scores (array float) :offset-assert 168) + ) + :method-count-assert 14 + :size-assert #xac + :flag-assert #xe000000ac + (:methods + (game-task-node-info-method-9 () none) ;; 9 ;; (get-idx-in-task-list (_type_) int) + (game-task-node-info-method-10 () none) ;; 10 ;; (open! (_type_ symbol) int) + (game-task-node-info-method-11 () none) ;; 11 ;; (game-task-node-info-method-11 (_type_ symbol) none) + (game-task-node-info-method-12 () none) ;; 12 ;; (game-task-node-info-method-12 (_type_) symbol) + (game-task-node-info-method-13 () none) ;; 13 ;; (eval-game-task-cmd! (_type_) none) + ) + ) + +(deftype game-task-info (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (task-level uint8 :offset-assert 8) + (text-name text-id :offset-assert 12) ;; guessed by decompiler + (text-id-long uint32 :offset-assert 16) + (single-player basic :offset-assert 20) + (kiosk-play-node game-task-node :offset-assert 24) ;; game-task-node + (play-node game-task-node :offset-assert 26) ;; game-task-node + (play-continue string :offset-assert 28) ;; guessed by decompiler + (split-continue string :offset-assert 32) + (kiosk-play-continue object :offset-assert 36) ;; guessed by decompiler + (kiosk-online-play-continue string :offset-assert 40) + ) + :method-count-assert 10 + :size-assert #x2c + :flag-assert #xa0000002c + ;; field kiosk-play-continue uses ~A with a signed load. field kiosk-online-play-continue uses ~A with a signed load. + (:methods + (get-play-list-idx (_type_) int) ;; 9 + ) + ) + +(deftype game-task-control (basic) + ((counter uint32 :offset-assert 4) + (actor game-task-actor :offset-assert 8) + (current-node game-task-node :offset-assert 10) + (current-event game-task-event :offset-assert 12) + ) + :flag-assert #xa00000010 + (:methods + (new (symbol type game-task-actor) _type_) ;; 0 + (get-current-task-event (_type_) game-task-event) ;; 9 + ) + ) + +(deftype ambient-control (structure) + ((last-ambient-time time-frame :offset-assert 0) ;; time-frame + (last-ambient string :offset-assert 8) ;; guessed by decompiler + (last-ambient-id sound-id :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x10 + :flag-assert #xc00000010 + (:methods + (ambient-control-method-9 () none) ;; 9 + (ambient-control-method-10 () none) ;; 10 + (ambient-control-method-11 () none) ;; 11 + ) + ) + +(deftype game-movie (structure) + ((name string :offset-assert 0) + (score uint16 :offset-assert 4) + (flags uint16 :offset-assert 6) + (cup uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype grand-prix (structure) + ((name basic :offset-assert 0) + (score uint16 :offset-assert 4) + (flags uint16 :offset-assert 6) + (saved-data2 uint16 2 :offset-assert 8) + (saved-data uint32 :offset 8) + (trophy uint16 :offset 8) + (play-count uint16 :offset 10) + (drivers symbol :offset-assert 12) + (task uint16 3 :offset-assert 16) + (task1 uint16 :offset 16) + (task2 uint16 :offset 18) + (task3 uint16 :offset 20) + (cup uint32 :offset-assert 24) + (intro string :offset-assert 28) + (outro string :offset-assert 32) + (ai-tuning-indices1 pair :offset-assert 36) + (ai-tuning-indices2 pair :offset-assert 40) + (ai-tuning-indices3 pair :offset-assert 44) + (sound-description string :offset-assert 48) + (boss uint16 :offset-assert 52) + (boss-drivers symbol :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) + +(define-extern game-task->string (function game-task string)) +(define-extern c-string->game-task (function string game-task)) +(define-extern game-task-actor->string (function game-task-actor string)) +(define-extern game-task-action->string (function game-task-action string)) +(define-extern game-task-medal->string (function game-task-medal string)) +(define-extern game-task-node-flag->string (function game-task-node-flag string)) +(define-extern game-task-node-command->string (function game-task-node-command string)) + +(define-extern *traffic-engine* symbol) + +(define-extern *game-movie* (array game-movie)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; car-info-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype car-layer-textures (structure) + (;;(data UNKNOWN 6 :offset-assert 0) + (dest basic :offset-assert 0) + (base basic :offset-assert 4) + (stripe basic :offset-assert 8) + (detail basic :offset-assert 12) + (damage basic :offset-assert 16) + (wheel-dest basic :offset 0) + (wheel-base basic :offset 4) + (wheel-blur basic :offset 8) + (tread-dest basic :offset 12) + (tread-base basic :offset 16) + (tread-blur basic :offset-assert 20) + ) + :pack-me + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype car-textures (structure) + ((data car-layer-textures 14 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x150 + :flag-assert #x900000150 + ) + +(deftype car-rgb-color (vector4w) + ((red int32 :offset 0) + (green int32 :offset 4) + (blue int32 :offset 8) + (alpha int32 :offset 12) + ) + :method-count-assert 12 + :size-assert #x10 + :flag-assert #xc00000010 + (:methods + (car-rgb-color-method-9 () none) ;; 9 + (car-rgb-color-method-10 () none) ;; 10 + (car-rgb-color-method-11 () none) ;; 11 + ) + ) + +(deftype car-hsv-color (vector) + ((hue float :offset 0) + (saturation float :offset 4) + (value float :offset 8) + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (car-hsv-color-method-9 () none) ;; 9 + ) + ) + +(deftype car-part-info (structure) + ((short-name-id uint32 :offset-assert 0) + (name-id uint32 :offset-assert 4) + (task uint16 :offset-assert 8) + (flags uint8 :offset-assert 10) + (medal uint8 :offset-assert 11) + (part-id uint8 :offset-assert 12) + (pad uint8 :offset-assert 13) + ) + :method-count-assert 9 + :size-assert #xe + :flag-assert #x90000000e + ) + +(deftype tuning-info (uint32) + () + :flag-assert #x900000004 + ) + +(deftype upgrade-info (structure) + ((cost float :offset-assert 0) + (base uint8 :offset-assert 4) + (max uint8 :offset-assert 5) + (rookie uint8 :offset-assert 6) + (pro uint8 :offset-assert 7) + (cost-increment float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype upgrade-info-array (structure) + ((data upgrade-info 4 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype car-upgrade-info-array (structure) + ((data upgrade-info-array 15 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x3c0 + :flag-assert #x9000003c0 + ) + +(deftype car-info (structure) + ((base-color car-rgb-color :inline :offset-assert 0) + (stripe-color car-rgb-color :inline :offset-assert 16) + (car-type int8 :offset-assert 32) + (current-parts uint8 11 :offset-assert 33) + (tuning uint32 :offset-assert 44) + (flags uint32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) + +(deftype car-info-save (structure) + ((car-type int8 :offset-assert 0) + (base-color uint32 :offset-assert 4) + (stripe-color uint32 :offset-assert 8) + (parts uint8 11 :offset-assert 12) + (tuning uint32 :offset-assert 24) + (flags uint32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype car-info-full (car-info) + ((level basic :offset-assert 52) + (wheel-blur float :offset-assert 56) + (tread-texture basic :offset-assert 60) + (textures car-textures :offset-assert 64) + (first-tbp uint32 :offset-assert 68) + (last-tbp uint32 :offset-assert 72) + (damage uint8 14 :offset-assert 76) + (lights vu-lights :inline :offset-assert 96) + (shield-vu-lights vu-lights :inline :offset-assert 208) + (shield-light-group light-group :inline :offset-assert 320) + ) + :method-count-assert 22 + :size-assert #x200 + :flag-assert #x1600000200 + (:methods + (car-info-full-method-9 () none) ;; 9 + (car-info-full-method-10 () none) ;; 10 + (car-info-full-method-11 () none) ;; 11 + (car-info-full-method-12 () none) ;; 12 + (car-info-full-method-13 () none) ;; 13 + (car-info-full-method-14 () none) ;; 14 + (car-info-full-method-15 () none) ;; 15 + (car-info-full-method-16 () none) ;; 16 + (car-info-full-method-17 () none) ;; 17 + (car-info-full-method-18 () none) ;; 18 + (car-info-full-method-19 () none) ;; 19 + (car-info-full-method-20 () none) ;; 20 + (car-info-full-method-21 () none) ;; 21 + ) + ) + +(deftype car-info-array (structure) + ((data car-info 15 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x3c0 + :flag-assert #x9000003c0 + ) + +(deftype car-level-array (basic) + ((data car-info-full 6 :inline :offset-assert 16) + (textures car-textures 6 :inline :offset-assert 3088) + ) + :method-count-assert 10 + :size-assert #x13f0 + :flag-assert #xa000013f0 + (:methods + (car-level-array-method-9 () none) ;; 9 + ) + ) + +;; (define-extern *car-type-names* array) +;; (define-extern type-from-vehicle-type function) ;; (function vehicle-type type) +;; (define-extern level-name-from-vehicle-type function) +;; (define-extern car-type-from-vehicle-type function) +;; (define-extern vehicle-type-from-car-type function) +;; (define-extern car-type-from-level-name function) +;; (define-extern vehicle-type-from-level-name function) +;; (define-extern vehicle-type-from-name function) +;; (define-extern *car-part-names* array) +;; (define-extern *car-part-translate-array* array) +;; (define-extern *car-part-translate-names* array) +;; (define-extern *car-look-names* array) +;; (define-extern *car-layer-names* array) +;; (define-extern *car-string-name* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; car-tables ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *car-look-mask-array* array) +;; (define-extern *car-part-info-arrays* array) +;; (define-extern *car-level-array* car-level-array) +;; (define-extern *car-default-base-color* array) +;; (define-extern *car-default-stripe-color* array) +;; (define-extern *car-upgrade-info* object) +;; (define-extern *car-part-type-to-text-table* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; capture-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype gs-store-image-packet (structure) + ((vifcode vif-tag 4 :offset-assert 0) ;; guessed by decompiler + (giftag gif-tag :offset-assert 16) ;; gif-tag + (bitbltbuf gs-bitbltbuf :offset-assert 32) ;; gs-bitbltbuf + (bitbltbuf-addr gs-reg64 :offset-assert 40) ;; gs-reg64 + (trxpos gs-trxpos :offset-assert 48) ;; gs-trxpos + (trxpos-addr gs-reg64 :offset-assert 56) ;; gs-reg64 + (trxreg gs-trxreg :offset-assert 64) ;; gs-trxreg + (trxreg-addr gs-reg64 :offset-assert 72) ;; gs-reg64 + (finish uint64 :offset-assert 80) + (finish-addr gs-reg64 :offset-assert 88) ;; gs-reg64 + (trxdir gs-trxdir :offset-assert 96) ;; gs-trxdir + (trxdir-addr gs-reg64 :offset-assert 104) ;; gs-reg64 + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +#| +(deftype screen-shot-work (structure) + ((count int16 :offset-assert 0) + (size int16 :offset-assert 2) + (name string :offset-assert 4) ;; guessed by decompiler + (highres-enable symbol :offset-assert 8) ;; guessed by decompiler + (highres-objects-enable basic :offset-assert 12) + (hud-enable symbol :offset-assert 16) ;; guessed by decompiler + (letterbox-enable basic :offset-assert 20) + (debug-enable basic :offset-assert 24) + (dir basic :offset-assert 28) + (dir-checked? basic :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +;; (define-extern *screen-shot-work* object) ;; screen-shot-work +;; (define-extern *image-name* object) ;; string +;; (define-extern *capture-tga-buffer* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; math-camera-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype vis-gif-tag (structure) + ((fog0 uint32 :offset-assert 0) + (strip uint32 :offset-assert 4) + (regs uint32 :offset-assert 8) + (fan uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype cull-info (structure) + ((x-fact float :offset-assert 0) + (y-fact float :offset-assert 4) + (z-fact float :offset-assert 8) + (cam-radius float :offset-assert 12) + (cam-x float :offset-assert 16) + (cam-y float :offset-assert 20) + (xz-dir-ax float :offset-assert 24) + (xz-dir-az float :offset-assert 28) + (xz-dir-bx float :offset-assert 32) + (xz-dir-bz float :offset-assert 36) + (xz-cross-ab float :offset-assert 40) + (yz-dir-ay float :offset-assert 44) + (yz-dir-az float :offset-assert 48) + (yz-dir-by float :offset-assert 52) + (yz-dir-bz float :offset-assert 56) + (yz-cross-ab float :offset-assert 60) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype math-camera (basic) + ((d meters :offset-assert 4) + (f meters :offset-assert 8) + (fov degrees :offset-assert 12) ;; degrees + (x-ratio float :offset-assert 16) + (y-ratio float :offset-assert 20) + (x-pix float :offset-assert 24) + (x-clip float :offset-assert 28) + (x-clip-ratio-in float :offset-assert 32) + (x-clip-ratio-over float :offset-assert 36) + (y-pix float :offset-assert 40) + (y-clip float :offset-assert 44) + (y-clip-ratio-in float :offset-assert 48) + (y-clip-ratio-over float :offset-assert 52) + (cull-info cull-info :inline :offset-assert 56) + (fog-start meters :offset-assert 120) + (fog-end meters :offset-assert 124) + (fog-max float :offset-assert 128) + (fog-min float :offset-assert 132) + (reset int32 :offset-assert 136) + (smooth-step float :offset-assert 140) + (smooth-t float :offset-assert 144) + (perspective matrix :inline :offset-assert 160) + (isometric matrix :inline :offset-assert 224) + (sprite-2d matrix :inline :offset-assert 288) + (sprite-2d-hvdf vector :inline :offset-assert 352) + (camera-rot matrix :inline :offset-assert 368) + (inv-camera-rot matrix :inline :offset-assert 432) + (inv-camera-rot-smooth matrix :inline :offset-assert 496) + (inv-camera-rot-smooth-from quaternion :inline :offset-assert 560) + (camera-temp matrix :inline :offset-assert 576) + (prev-camera-temp matrix :inline :offset-assert 640) + (prev-inv-camera-rot matrix :inline :offset-assert 704) + (prev-trans vector :inline :offset-assert 768) + (hmge-scale vector :inline :offset-assert 784) + (inv-hmge-scale vector :inline :offset-assert 800) + (hvdf-off vector :inline :offset-assert 816) + (guard vector :inline :offset-assert 832) + (vis-gifs vis-gif-tag 4 :offset-assert 848) ;; guessed by decompiler + (giftex uint128 :offset 848) + (gifgr uint128 :offset 864) + (giftex-trans uint128 :offset 880) + (gifgr-trans uint128 :offset 896) + (pfog0 float :offset-assert 912) + (pfog1 float :offset-assert 916) + (trans vector :inline :offset-assert 928) + (plane plane 4 :inline :offset-assert 944) ;; guessed by decompiler + (guard-plane plane 4 :inline :offset-assert 1008) ;; guessed by decompiler + (shrub-mat matrix :inline :offset-assert 1072) + (quat-other quaternion :inline :offset-assert 1136) + (trans-other vector :inline :offset-assert 1152) + (shrub-mat-other matrix :inline :offset-assert 1168) + (camera-temp-other matrix :inline :offset-assert 1232) + (camera-rot-other matrix :inline :offset-assert 1296) + (camera-rot-other-sky matrix :inline :offset-assert 1360) + (camera-rot-other-sprite matrix :inline :offset-assert 1424) + (inv-camera-rot-other matrix :inline :offset-assert 1488) + (plane-other plane 4 :inline :offset-assert 1552) ;; guessed by decompiler + (guard-plane-other plane 4 :inline :offset-assert 1616) ;; guessed by decompiler + (mirror-trans vector :inline :offset-assert 1680) + (mirror-normal vector :inline :offset-assert 1696) + (fov-correction-factor float :offset-assert 1712) + ) + :method-count-assert 10 + :size-assert #x6b4 + :flag-assert #xa000006b4 + (:methods + (new (symbol type) _type_) ;; 0 + (math-camera-method-9 () none) ;; 9 + ) + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; viewport-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype viewport (structure) + ((fog-corner vector 4 :inline :offset-assert 0) + (min-fog-corner vector :inline :offset-assert 64) + (max-fog-corner vector :inline :offset-assert 80) + (prev-inv-camera-rot matrix :inline :offset-assert 96) + (motion-vector vector :inline :offset-assert 160) + (math-camera math-camera :offset-assert 176) + (index int32 :offset-assert 180) + (frame gs-frame :offset-assert 184) + (frame-a gs-frame :offset-assert 192) + (zbuf-on gs-zbuf :offset-assert 200) + (zbuf-off gs-zbuf :offset-assert 208) + (scissor gs-scissor :offset-assert 216) + (clamp gs-clamp :offset-assert 224) + (tex0 gs-tex0 :offset-assert 232) + (tex0-24 gs-tex0 :offset-assert 240) + (copy-frame gs-frame :offset-assert 248) + (copy-tex0 gs-tex0 :offset-assert 256) + (copy-dma dma-buffer :offset-assert 264) + (hflip-zbuf-dma dma-buffer :offset-assert 268) ;; dma-buffer? + (glow-frame-1 uint64 :offset-assert 272) ;; gs-frame ?? + (glow-tex0-1 uint64 :offset-assert 280) ;; gs-tex0 ?? + (glow-frame-2 uint64 :offset-assert 288) ;; gs-frame ?? + (glow-tex0-2 uint64 :offset-assert 296) ;; gs-tex0 ?? + (shadow-texoffset vector :inline :offset-assert 304) + (shadow-texscale vector :inline :offset-assert 320) + (shadow-invert-frame uint64 :offset-assert 336) ;; gs-frame ?? + (shadow-dma-frame uint64 :offset-assert 344) ;; gs-frame ?? + (shadow-dma-tex0 uint64 :offset-assert 352) ;; gs-tex0 ?? + (shadow-dma basic :offset-assert 360) ;; dma-buffer ?? + (warp-shader adgif-shader :inline :offset-assert 368) + (blur-forward-dma basic :offset-assert 448) ;; dma-buffer ?? + (blur-reverse-dma basic :offset-assert 452) ;; dma-buffer ?? + (blur-finish-dma basic :offset-assert 456) ;; dma-buffer ?? + (blur-sx int32 :offset-assert 460) + (blur-sy int32 :offset-assert 464) + (blur-hx int32 :offset-assert 468) + (blur-hy int32 :offset-assert 472) + (blur-cx int32 :offset-assert 476) + (blur-cy int32 :offset-assert 480) + (blur-frame-0 uint64 :offset-assert 488) ;; gs-frame ?? + (blur-frame-1 uint64 :offset-assert 496) ;; gs-frame ?? + (blur-frame-a uint64 :offset-assert 504) ;; gs-frame ?? + (blur-tex0-0 uint64 :offset-assert 512) ;; gs-tex0 ?? + (blur-tex0-1 uint64 :offset-assert 520) ;; gs-tex0 ?? + (blur-tex0-a uint64 :offset-assert 528) ;; gs-tex0 ?? + (blur-clamp uint64 :offset-assert 536) ;; gs-clamp ?? + (blur-scissor uint64 :offset-assert 544) ;; gs-scissor ?? + (blur-scale float :offset-assert 552) + (screen-maxx int32 :offset-assert 556) + (screen-maxy int32 :offset-assert 560) + (screen-sx int32 :offset-assert 564) + (screen-sy int32 :offset-assert 568) + (screen-hx int32 :offset-assert 572) + (screen-hy int32 :offset-assert 576) + (screen-qx int32 :offset-assert 580) + (screen-qy int32 :offset-assert 584) + (screen-cx int32 :offset-assert 588) + (screen-cy int32 :offset-assert 592) + (ratio-x float :offset-assert 596) + (ratio-y float :offset-assert 600) + (minx-on-screen int32 :offset 672) + (miny-on-screen int32 :offset 676) + (scissor-on-screen uint64 :offset 680) ;; gs-scissor ?? + ) + :method-count-assert 16 + :size-assert #x2b0 + :flag-assert #x10000002b0 + (:methods + (viewport-method-9 () none) ;; 9 + (viewport-method-10 () none) ;; 10 + (viewport-method-11 () none) ;; 11 + (viewport-method-12 () none) ;; 12 + (viewport-method-13 () none) ;; 13 + (viewport-method-14 () none) ;; 14 + (viewport-method-15 () none) ;; 15 + ) + ) + +(deftype viewport-array (structure) + ((mode uint32 :offset-assert 0) + (num-viewports uint32 :offset-assert 4) + (current-viewport-index uint32 :offset-assert 8) + (data viewport 3 :inline :offset 16) + (default viewport :inline :offset 1392) + ) + :method-count-assert 12 + :size-assert #x820 + :flag-assert #xc00000820 + (:methods + (viewport-array-method-9 (_type_ viewport) none) ;; 9 + (viewport-array-method-10 () none) ;; 10 + (viewport-array-method-11 () none) ;; 11 + ) + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; blit-displays-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype blit-displays-work (structure) + ((adgif-tmpl dma-gif-packet :inline :offset-assert 0) + (sprite-tmpl dma-gif-packet :inline :offset-assert 32) + (contrast-tmpl dma-gif-packet :inline :offset-assert 64) + (sprite-slow-tmpl dma-gif-packet :inline :offset-assert 96) + (screen-tmpl dma-gif-packet :inline :offset-assert 128) + (blur-tmpl dma-gif-packet :inline :offset-assert 160) + (blur-tmpl2 dma-gif-packet :inline :offset-assert 192) + (line-tmpl dma-gif-packet :inline :offset-assert 224) + (scan-tmpl dma-gif-packet :inline :offset-assert 256) + (color vector4w :inline :offset-assert 288) + (line-color uint64 :offset-assert 304) + (scan-colors vector4w 15 :offset-assert 320) ;; guessed by decompiler + (vu1-enable-user-menu uint64 :offset-assert 560) ;; vu1-renderer-mask + (texture-enable-user-menu uint32 :offset-assert 568) + (horizontal-flip-flag symbol :offset-assert 572) ;; guessed by decompiler + (scan-alpha float :offset-assert 576) + (scanline uint32 :offset-assert 580) + (progress-interp float :offset-assert 584) + (progress-interp-dest float :offset-assert 588) + (progress-interp-speed float :offset-assert 592) + ) + :method-count-assert 27 + :size-assert #x254 + :flag-assert #x1b00000254 + (:methods + (blit-displays-work-method-9 () none) ;; 9 ;; (blit-displays-work-method-9 () none) + (blit-displays-work-method-10 () none) ;; 10 ;; (blit-displays-work-method-10 () none) + (blit-displays-work-method-11 () none) ;; 11 ;; (blit-displays-work-method-11 () none) + (blit-displays-work-method-12 () none) ;; 12 ;; (blit-displays-work-method-12 () none) + (blit-displays-work-method-13 () none) ;; 13 ;; (blit-displays-work-method-13 () none) + (blit-displays-work-method-14 () none) ;; 14 ;; (blit-displays-work-method-14 () none) + (blit-displays-work-method-15 () none) ;; 15 ;; (blit-displays-work-method-15 () none) + (blit-displays-work-method-16 () none) ;; 16 ;; (blit-displays-work-method-16 () none) + (blit-displays-work-method-17 () none) ;; 17 ;; (blit-displays-work-method-17 (_type_ vector int float symbol) none) + (blit-displays-work-method-18 () none) ;; 18 ;; (blit-displays-work-method-18 () none) + (blit-displays-work-method-19 () none) ;; 19 ;; (blit-displays-work-method-19 (_type_) none) + (blit-displays-work-method-20 () none) ;; 20 ;; (blit-displays-work-method-20 (_type_) none) + (blit-displays-work-method-21 () none) ;; 21 ;; (get-menu-mode (_type_) symbol) + (blit-displays-work-method-22 () none) ;; 22 ;; (get-screen-copied (_type_) symbol) + (blit-displays-work-method-23 () none) ;; 23 ;; (get-horizontal-flip-flag (_type_) symbol) + (blit-displays-work-method-24 () none) ;; 24 ;; (set-menu-mode (_type_ symbol) symbol) + (blit-displays-work-method-25 () none) ;; 25 ;; (set-screen-copied (_type_ symbol) symbol) + (blit-displays-work-method-26 () none) ;; 26 ;; (set-horizontal-flip-flag (_type_ symbol) symbol) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparks-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype spark (structure) + ((pos vector :inline :offset-assert 0) + (age float :offset 12) + (vel vector :inline :offset-assert 16) + (length float :offset 28) + (accel vector :inline :offset-assert 32) + (alpha float :offset 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype spark-vport (structure) + ((mat matrix 4 :inline :offset-assert 0) + (hvdf-offset vector :inline :offset-assert 256) + (hmge-scale vector :inline :offset-assert 272) + (frame qword :inline :offset-assert 288) + (zbuf qword :inline :offset-assert 304) + (scissor qword :inline :offset-assert 320) + (pfog0 vector :inline :offset-assert 336) + ) + :method-count-assert 9 + :size-assert #x160 + :flag-assert #x900000160 + ) + +(deftype spark-color-group (structure) + ((colors vector 4 :inline :offset-assert 0) + (alpha gs-adcmd :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype spark-constants (structure) + ((vport spark-vport 2 :inline :offset-assert 0) + (adgif-tag qword :inline :offset-assert 704) + (prim-tags vector 3 :inline :offset-assert 720) + (color-groups spark-color-group 13 :inline :offset-assert 768) + (friction float :offset-assert 1808) + (scale float :offset-assert 1812) + (matrix-count int32 :offset-assert 1816) + (set-matrix-time int32 :offset-assert 1820) + ) + :method-count-assert 9 + :size-assert #x720 + :flag-assert #x900000720 + ) + +(deftype spark-vert (structure) + ((color vector :inline :offset-assert 0) + (pos vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype spark-line-packet (structure) + ((tag qword :inline :offset-assert 0) + (alpha qword :inline :offset-assert 16) + (verts spark-vert 4 :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + +(deftype spark-viewport-packet (structure) + ((tag qword :inline :offset-assert 0) + (frame qword :inline :offset-assert 16) + (zbuf qword :inline :offset-assert 32) + (scissor qword :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype spark-launch-params (structure) + ((pos vector :inline :offset-assert 0) + (vel vector :inline :offset-assert 16) + (accel vector :inline :offset-assert 32) + (age float :offset-assert 48) + (alpha float :offset-assert 52) + (y-floor float :offset-assert 56) + (length float :offset-assert 60) + (color-index uint32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) + +(deftype sparks-work (basic) + ((next-free int32 :offset-assert 4) + (constants spark-constants :inline :offset-assert 16) + (start vector :inline :offset-assert 1840) + (vel vector :inline :offset-assert 1856) + (accel vector :inline :offset-assert 1872) + (test basic :offset-assert 1888) + (vecs vector 4 :inline :offset-assert 1904) + (y-floor float 512 :offset-assert 1968) + (data spark 512 :inline :offset-assert 4016) + ) + :method-count-assert 20 + :size-assert #x6fb0 + :flag-assert #x1400006fb0 + (:methods + (sparks-work-method-9 () none) ;; 9 + (sparks-work-method-10 () none) ;; 10 + (sparks-work-method-11 () none) ;; 11 + (sparks-work-method-12 () none) ;; 12 + (sparks-work-method-13 () none) ;; 13 + (sparks-work-method-14 () none) ;; 14 + (sparks-work-method-15 () none) ;; 15 + (sparks-work-method-16 () none) ;; 16 + (sparks-work-method-17 () none) ;; 17 + (sparks-work-method-18 () none) ;; 18 + (sparks-work-method-19 () none) ;; 19 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; math-camera ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype fog-corrector (structure) + "The math-camera matrices are used to compute fogging values, which are a per-vertex uint8 that + tells the GS how 'foggy' the color should be. This should be proportional to how far away the vertex + is. There is a scaling factor applied so the fog intensity isn't affected by the field of view angle. + + The fog-corrector stores a fog-end fog-start value that is corrected for the field of view. + The actual correction factor is computed in cam-update.gc. + Without this corrector, the fogginess of the world would change as the FOV changes + (for example, when Jak gets on the zoomer, the FOV changes slightly)." + ((fog-end float :offset-assert 0) + (fog-start float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(define-extern fog-corrector-setup "Set the fog corrector based on the supplied math-camera." (function fog-corrector math-camera none)) +(define-extern *math-camera-fog-correction* fog-corrector) +(define-extern update-math-camera + "Compute some one-time camera constants. + These should only change when changing aspect ratio." + (function math-camera symbol symbol float math-camera)) +(define-extern *math-camera* math-camera) +(define-extern math-cam-start-smoothing "Unused camera smoothing." (function float float quaternion)) +(define-extern move-target-from-pad + "Unused function to adjust trans based on inputs from the pad. + This function must be extremely old because it takes a non-quaternion transform, + and all [[target]] stuff uses quaternions." + (function transformq int transformq)) +(define-extern transform-point-vector! + "Apply camera transformation to a point. Return true if it is visible or not. + This returns the point in GS coords, but as float instead of int, so it's + not really useful. See [[transform-point-qword!]] for more details." + (function vector vector symbol)) +(define-extern transform-point-qword! + "Apply camera transformation to point, returning fixed point 28.4 position + that can be given to the GS directly." + (function vector4w vector symbol)) +(define-extern transform-point-vector-scale! + "Similar to transform-point-qword! but returns the scale factor instead." + (function vector vector float)) +(define-extern reverse-transform-point! + "Likely transform arg3 from screen space to world coords, using arg1/arg2 for... something." + (function vector vector vector vector none)) +(define-extern init-for-transform + "Sets up VU0 registers with camera info. + This is probably a very old function and it's only used by camera debug. + It stashes some data in vector float registers that must be there before calling transform-float-point." + (function matrix none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; view ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern view-push-context (function int int)) +(define-extern view-pop-context (function int int)) +(define-extern view-get-active-target (function basic)) +(define-extern view-get-target (function int basic)) +(define-extern view-set-active-target (function basic basic)) +(define-extern view-get-active-camera (function camera-master)) +(define-extern view-get-camera (function int camera-master)) +(define-extern view-set-active-camera (function camera-master camera-master)) +(define-extern view-get-active-camera-combiner (function camera-combiner)) +(define-extern view-get-camera-combiner (function int camera-combiner)) +(define-extern view-set-active-camera-combiner (function camera-combiner camera-combiner)) +(define-extern view-get-active-math-camera (function math-camera)) +(define-extern view-get-math-camera (function int math-camera)) +(define-extern view-set-active-math-camera (function math-camera math-camera)) +(define-extern view-get-real-active (function view)) +(define-extern view-get-active (function view)) +(define-extern view-get-index (function view int)) +(define-extern view-get-active-index (function int)) +(define-extern view-get-real-active-index (function int)) +(define-extern view-print (function view none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; viewport ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *viewport-array* viewport-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; font-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++font-h:font-flags +(defenum font-flags + :type uint32 + :bitfield #t + (shadow 0) + (kerning 1) + (middle 2) + (middle-vert 3) + (right 4) + (large 5) + (pc-hack 6) + (ff7 7) + (font-flag-9 9) + (font-flag-11 11) + ) +;; ---font-h:font-flags + +;; +++font-h:font-color +(defenum font-color + :type uint32 + (default 0) + (white 1) + (transparent 2) + (red 3) + (orange 4) + (yellow 5) + (green 6) + (blue 7) + (cyan 8) + (pink 9) + (menu-selected 10) + (menu-selected-parent 11) + (menu 12) + (menu-parent 13) + (menu-func-bad 14) + (menu-flag-on 15) + (menu-flag-on-parent 16) + (menu-flag-off 17) + (menu-flag-off-parent 18) + (menu-invalid 19) + (flat-yellow 20) + (font-color-21 21) + (pad-back 22) + (pad-shine 23) + (pad-square 24) + (pad-circle 25) + (pad-triangle 26) + (pad-x 27) + (progress-old-blue 28) + (progress-old-yellow 29) + (progress-old-selected 30) + (progress-old-percent 31) + (font-color-32 32) + (font-color-33 33) + (font-color-34 34) + (font-color-35 35) + (font-color-36 36) + (font-color-37 37) + (font-color-38 38) + (font-color-39 39) + (font-color-40 40) + (font-color-41 41) + (font-color-42 42) + (font-color-43 43) + (font-color-44 44) + ) +;; ---font-h:font-color + +(deftype font-char-effect (structure) + ((scale-x float :offset-assert 0) + (scale-y float :offset-assert 4) + (angle float :offset-assert 8) + (trans-x float :offset-assert 12) + (trans-y float :offset-assert 16) + (color vector4w :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype char-color (structure) + ((color rgba 4 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype font-context (basic) + ((y-spacing float :offset-assert 4) + (alpha float :offset-assert 8) + (ialpha int32 :offset-assert 12) + (flags font-flags :offset-assert 16) ;; guessed by decompiler + (origin vector :inline :offset-assert 32) + (calc-origin vector :inline :offset-assert 48) + (strip-gif vector :inline :offset-assert 64) + (calc-mat matrix :inline :offset-assert 80) + (width float :offset-assert 144) + (height float :offset-assert 148) + (meters-per-texel float :offset-assert 152) + (start-line uint32 :offset-assert 156) + (scaled-width float :offset-assert 160) + (scaled-height float :offset-assert 164) + (projection float :offset-assert 168) + (scale float :offset-assert 172) + (mat matrix :offset-assert 176) + (effect-time float :offset-assert 180) + (color uint8 :offset-assert 184) ;; font-color + (effect uint8 :offset-assert 185) + (effect-color uint8 :offset-assert 186) + ) + :method-count-assert 30 + :size-assert #xbb + :flag-assert #x1e000000bb + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type matrix int int float font-color font-flags) _type_) + (font-context-method-9 () none) ;; 9 ;; (set-mat! (font-context matrix) font-context) + (font-context-method-10 () none) ;; 10 ;; (set-origin! (font-context int int) font-context) + (font-context-method-11 () none) ;; 11 ;; (set-depth! (font-context int) font-context) + (font-context-method-12 () none) ;; 12 ;; (set-w! (font-context float) font-context) + (font-context-method-13 () none) ;; 13 ;; (set-width! (font-context int) font-context) + (font-context-method-14 () none) ;; 14 ;; (set-height! (font-context int) font-context) + (font-context-method-15 () none) ;; 15 ;; (set-projection! (font-context float) font-context) + (font-context-method-16 () none) ;; 16 ;; (set-color! (font-context font-color) font-context) + (font-context-method-17 () none) ;; 17 ;; (set-flags! (font-context font-flags) font-context) + (font-context-method-18 () none) ;; 18 ;; (set-start-line! (font-context uint) font-context) + (font-context-method-19 () none) ;; 19 ;; (set-scale! (font-context float) font-context) + (font-context-method-20 () none) ;; 20 ;; (set-alpha! (font-context float) font-context) + (font-context-method-21 () none) ;; 21 + (font-context-method-22 () none) ;; 22 + (font-context-method-23 () none) ;; 23 + (font-context-method-24 () none) ;; 24 + (font-context-method-25 () none) ;; 25 + (font-context-method-26 () none) ;; 26 + (font-context-method-27 () none) ;; 27 + (font-context-method-28 () none) ;; 28 + (font-context-method-29 () none) ;; 29 + ) + ) + +(deftype char-packet (structure) + ((tag dma-gif-packet :inline :offset-assert 0) + (font dma-packet :inline :offset-assert 32) + (color0 vector :inline :offset-assert 48) + (st0 vector :inline :offset-assert 64) + (pos0 vector :inline :offset-assert 80) + (st1 vector :inline :offset-assert 96) + (pos1 vector :inline :offset-assert 112) + (color2 vector :inline :offset-assert 128) + (st2 vector :inline :offset-assert 144) + (pos2 vector :inline :offset-assert 160) + (st3 vector :inline :offset-assert 176) + (pos3 vector :inline :offset-assert 192) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +(deftype char-ad-packet (structure) + ((tag dma-gif-packet :inline :offset-assert 0) + (font dma-packet :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype char-2d-packet (structure) + ((tag dma-gif-packet :inline :offset-assert 0) + (font dma-packet :inline :offset-assert 32) + (color vector :inline :offset-assert 48) + (st0 vector :inline :offset-assert 64) + (pos0 vector :inline :offset-assert 80) + (st1 vector :inline :offset-assert 96) + (pos1 vector :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype char-2d-packet-no-packed (structure) + ((tag dma-gif-packet :inline :offset-assert 0) + (color0 uint64 :offset-assert 32) + (st0 uint64 :offset-assert 40) + (pos0 uint64 :offset-assert 48) + (st1 uint64 :offset-assert 56) + (pos1 uint64 :offset-assert 64) + (color1 uint64 :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype char-packet-no-packed (structure) + ((tag dma-gif-packet :inline :offset-assert 0) + (prim uint64 :offset-assert 32) + (color0 uint64 :offset-assert 40) + (st0 uint64 :offset-assert 48) + (pos0 uint64 :offset-assert 56) + (st1 uint64 :offset-assert 64) + (pos1 uint64 :offset-assert 72) + (st2 uint64 :offset-assert 80) + (pos2 uint64 :offset-assert 88) + (st3 uint64 :offset-assert 96) + (pos3 uint64 :offset-assert 104) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype char-3d-packet (structure) + ((tag dma-gif-packet :inline :offset-assert 0) + (font dma-packet :inline :offset-assert 32) + (color vector :inline :offset-assert 48) + (st0 vector :inline :offset-assert 64) + (pos0 vector :inline :offset-assert 80) + (st1 vector :inline :offset-assert 96) + (pos1 vector :inline :offset-assert 112) + (color2 vector :inline :offset-assert 128) + (st2 vector :inline :offset-assert 144) + (pos2 vector :inline :offset-assert 160) + (st3 vector :inline :offset-assert 176) + (pos3 vector :inline :offset-assert 192) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +(deftype font-work (structure) + ((char-2d-tmpl dma-gif-packet :inline :offset-assert 0) + (char-2d-no-packed-tmpl dma-gif-packet :inline :offset-assert 32) + (char-3d-tmpl dma-gif-packet :inline :offset-assert 64) + (char-ad-tmpl dma-gif-packet :inline :offset-assert 96) + (char-no-packed-tmpl dma-gif-packet :inline :offset-assert 128) + (char-tmpl dma-gif-packet :inline :offset-assert 160) + (small-font-0-tmpl uint64 2 :offset-assert 192) ;; guessed by decompiler + (small-font-1-tmpl uint64 2 :offset-assert 208) ;; guessed by decompiler + (small-font-2-tmpl uint64 2 :offset-assert 224) ;; guessed by decompiler + (small-font-3-tmpl uint64 2 :offset-assert 240) ;; guessed by decompiler + (large-font-0-tmpl uint64 2 :offset-assert 256) ;; guessed by decompiler + (large-font-1-tmpl uint64 2 :offset-assert 272) ;; guessed by decompiler + (large-font-2-tmpl uint64 2 :offset-assert 288) ;; guessed by decompiler + (large-font-3-tmpl uint64 2 :offset-assert 304) ;; guessed by decompiler + (size1-small vector :inline :offset-assert 320) + (size2-small vector :inline :offset-assert 336) + (size3-small vector :inline :offset-assert 352) + (size1-large vector :inline :offset-assert 368) + (size2-large vector :inline :offset-assert 384) + (size3-large vector :inline :offset-assert 400) + (size-st1 vector :inline :offset-assert 416) + (size-st2 vector :inline :offset-assert 432) + (size-st3 vector :inline :offset-assert 448) + (origin-right vector :inline :offset-assert 464) + (origin-center vector :inline :offset-assert 480) + (save vector :inline :offset-assert 496) + (save-color vector :inline :offset-assert 512) + (save-color2 vector :inline :offset-assert 528) + (current-color vector4w :inline :offset-assert 544) + (current-colorq uint64 :offset 544) + (current-color2 vector4w :inline :offset-assert 560) + (current-color2q uint64 :offset 560) + (effect-colors vector4w 2 :inline :offset-assert 576) + (color-shadow vector4w :inline :offset-assert 608) + (color-outline vector4w :inline :offset-assert 624) + (justify vector 256 :inline :offset-assert 640) ;; guessed by decompiler + (hvdf-offset vector :inline :offset-assert 4736) + (hvdf-shadow vector :inline :offset-assert 4752) + (hvdf-outline vector 4 :inline :offset-assert 4768) + (hvdf-outline0 vector :inline :offset 4768) + (hvdf-outline1 vector :inline :offset 4784) + (hvdf-outline2 vector :inline :offset 4800) + (hvdf-outline3 vector :inline :offset 4816) + (save-pos0 vector :inline :offset-assert 4832) + (save-pos1 vector :inline :offset-assert 4848) + (save-pos2 vector :inline :offset-assert 4864) + (save-pos3 vector :inline :offset-assert 4880) + (color-table char-color 74 :inline :offset-assert 4896) ;; guessed by decompiler + (current-font-0-tmpl uint64 2 :offset-assert 6080) ;; guessed by decompiler + (current-font-1-tmpl uint64 2 :offset-assert 6096) ;; guessed by decompiler + (current-font-2-tmpl uint64 2 :offset-assert 6112) ;; guessed by decompiler + (current-font-3-tmpl uint64 2 :offset-assert 6128) ;; guessed by decompiler + (screen-min vector2w :inline :offset-assert 6144) + (screen-max vector2w :inline :offset-assert 6160) + (last-color uint8 :offset-assert 6168) ;; font-color + (save-last-color uint8 :offset-assert 6169) ;; font-color + (buf basic :offset-assert 6172) + (str-ptr uint32 :offset-assert 6176) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1824 + :flag-assert #x900001824 + ) + +(define-extern *font-work* font-work) +(define-extern font-set-tex0 (function (pointer gs-tex0) texture int int int none)) +(define-extern set-font-color (function font-color int rgba rgba rgba int)) +(define-extern *font-default-matrix* matrix) +(define-extern *font-default-matrix-3d* matrix) +(define-extern *font-context* font-context) +(define-extern *font-context* font-context) +(define-extern *font-char-effect* font-char-effect) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; decomp-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype decomp-work (structure) + ((buffer0 uint8 2048 :offset-assert 0) ;; guessed by decompiler + (buffer1 uint8 2048 :offset-assert 2048) ;; guessed by decompiler + (indices uint16 2048 :offset-assert 4096) ;; guessed by decompiler + (temp-indices uint16 2048 :offset-assert 8192) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x3000 + :flag-assert #x900003000 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; time-of-day-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype palette-fade-control (structure) + ((trans vector :inline :offset-assert 0) + (fade float :offset-assert 16) + (actor-dist float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype palette-fade-controls (basic) + ((control palette-fade-control 8 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x110 + :flag-assert #xb00000110 + (:methods + (palette-fade-controls-method-9 () none) ;; 9 ;; (reset! (_type_) none) + (palette-fade-controls-method-10 () none) ;; 10 ;; (set-fade! (_type_ int float float vector) object) + ) + ) +|# + +#| +(deftype time-of-day-proc (process) + ((hours int32 :offset-assert 144) + (minutes int32 :offset-assert 148) + (seconds int32 :offset-assert 152) + (old-frame uint64 :offset-assert 160) + (current-frame uint64 :offset-assert 168) + (frames uint64 :offset-assert 176) + (time-of-day float :offset-assert 184) + (old-frame-save uint64 :offset-assert 192) + (current-frame-save uint64 :offset-assert 200) + (frames-save uint64 :offset-assert 208) + (time-of-day-save float :offset-assert 216) + (time-ratio float :offset-assert 220) + (dest-time-ratio float :offset-assert 224) + (dest-time-delta float :offset-assert 228) + (sun-count int32 :offset-assert 232) + (sun sparticle-launch-control :offset-assert 236) ;; guessed by decompiler + (green-sun-count int32 :offset-assert 240) + (green-sun sparticle-launch-control :offset-assert 244) ;; guessed by decompiler + (moon-count int32 :offset-assert 248) + (moon sparticle-launch-control :offset-assert 252) ;; guessed by decompiler + (start-timer int32 :offset-assert 256) + ) + :method-count-assert 15 + :size-assert #x104 + :flag-assert #xf00800104 + (:methods + (time-of-day-proc-method-9 () none) ;; 9 + (time-of-day-proc-method-10 () none) ;; 10 + (time-of-day-proc-method-11 () none) ;; 11 + (time-of-day-proc-method-12 () none) ;; 12 + (time-of-day-proc-method-13 () none) ;; 13 + (time-of-day-proc-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype time-of-day-palette (basic) + ((width int32 :offset-assert 4) + (height int32 :offset-assert 8) + (pad int32 :offset-assert 12) + (data int32 1 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype time-of-day-context (basic) + ((interp float 18 :offset-assert 4) ;; guessed by decompiler + (current-fog mood-fog :inline :offset-assert 80) + (current-sky-color vector :inline :offset-assert 128) + (current-env-color vector :inline :offset-assert 144) + (current-prt-color vector :inline :offset-assert 160) + (current-shadow-color vector :inline :offset-assert 176) + (light-group light-group 8 :offset-assert 192) ;; guessed by decompiler + (current-clouds mood-clouds :inline :offset-assert 1728) + (times vector 8 :offset-assert 1744) ;; guessed by decompiler + (title-light-group light-group :inline :offset-assert 1872) + (rim-light-group light-group :inline :offset-assert 2064) + (front-rear-light-group light-group :inline :offset-assert 2256) + (fog-override mood-fog :inline :offset-assert 2448) + (filter vector :inline :offset-assert 2496) + (filter-color vector :inline :offset-assert 2512) + (time float :offset-assert 2528) + (target-interp float :offset-assert 2532) + (erase-color rgba :offset-assert 2536) ;; guessed by decompiler + (sky symbol :offset-assert 2540) ;; guessed by decompiler + (special-mood basic :offset-assert 2544) + (use-camera-other basic :offset-assert 2548) + (title-updated symbol :offset-assert 2552) ;; guessed by decompiler + (mode time-of-day-palette-id :offset-assert 2556) ;; guessed by decompiler + (override-enable basic :offset-assert 2560) + (override-palette uint32 :offset-assert 2564) + (max-rain float :offset-assert 2568) + (exterior-level basic :offset-assert 2572) + (ocean-alpha float :offset-assert 2576) + (shadow-override float :offset-assert 2580) + (fog-override-interp float :offset-assert 2584) + ) + :method-count-assert 9 + :size-assert #xa1c + :flag-assert #x900000a1c + ) +|# + +#| +(deftype time-of-day-dma (structure) + ((outa uint32 256 :offset-assert 0) ;; guessed by decompiler + (outb uint32 256 :offset-assert 1024) ;; guessed by decompiler + (banka uint32 256 :offset-assert 2048) ;; guessed by decompiler + (bankb uint32 256 :offset-assert 3072) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1000 + :flag-assert #x900001000 + ) +|# + +;; (define-extern *palette-fade-controls* object) ;; palette-fade-controls +;; (define-extern *time-of-day-context* time-of-day-context) ;; time-of-day-context + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; profile ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype profile-work (structure) + ((sprite-tmpl dma-gif-packet :inline :offset-assert 0) + (line-tmpl dma-gif-packet :inline :offset-assert 32) + (last-index int32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +;; (define-extern *profile-spec-array* object) ;; (inline-array profile-spec) +;; (define-extern *profile-translate-array* array) ;; (pointer uint64) +;; (define-extern *profile-work* object) ;; profile-work +;; (define-extern *profile-x* object) ;; int +;; (define-extern *profile-y* object) ;; int +;; (define-extern *profile-w* object) ;; int +;; (define-extern *profile-h* object) ;; int +;; (define-extern *profile-ticks* object) ;; symbol + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; display ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern get-current-time "Get the base-clock time." (function time-frame)) +(define-extern get-integral-current-time "Get the number of frames that have happened." (function time-frame)) +(define-extern get-real-current-time (function time-frame)) +(define-extern set-display "Allocate and initialize clocks for the display." (function display display)) +(define-extern allocate-dma-buffers "Allocate the main, debug, and calc dma buffers." (function display display)) +(define-extern draw-sprite2d-xy "Draw a sprite primitive with the given color and dimensions." (function dma-buffer int int int int rgba int none)) +(define-extern draw-sprite2d-xy-absolute + "Draw a sprite primitive, setting the gs-xzyf register to exactly the values specified (no offset/clamp)." + (function dma-buffer int int int int rgba int none)) +(define-extern draw-quad2d "Draw a quad that fills the entire context." (function dma-buffer draw-context none)) +(define-extern screen-gradient "Fill the screen with a sprite with the given colors." (function dma-buffer rgba rgba rgba rgba none)) +(define-extern vif1-handler-debug + "Handle the VIF1 interrupt. + The mark register of VIF will be set to the bucket that is now starting." + (function int none)) +(define-extern vif1-handler (function none)) +(define-extern vblank-handler "Record the time of the last two vblanks." (function int)) +(define-extern set-display-gs-state (function dma-buffer int int int int int dma-buffer)) +(define-extern set-display-gs-state-offset (function dma-buffer int int int int int int int dma-buffer)) +(define-extern reset-display-gs-state (function display dma-buffer display)) +(define-extern *vu0-dma-list* dma-buffer) +(define-extern *display* display) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; text-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++text-h:text-id +(defenum text-id + :type uint32 + ) +;; ---text-h:text-id + +(deftype game-text (structure) + ((id text-id :offset-assert 0) ;; guessed by decompiler + (index uint32 :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype game-text-info (basic) + ((length int32 :offset-assert 4) + (language-id int32 :offset-assert 8) + (group-name string :offset-assert 12) ;; guessed by decompiler + (dic-index (pointer uint32) :offset-assert 16) + (dic-data (pointer uint8) :offset-assert 20) + (text (pointer game-text) :offset-assert 24) + (text-data (pointer uint8) :offset-assert 28) + ) + :method-count-assert 13 + :size-assert #x20 + :flag-assert #xd00000020 + (:methods + (lookup-text! (_type_ game-text symbol) symbol) ;; 9 ;; (lookup-text! (_type_ text-id symbol) string) + (game-text-info-method-10 (_type_ text-id symbol) none) ;; 10 + (game-text-info-method-11 (_type_ string) string) ;; 11 + (game-text-info-method-12 () none) ;; 12 + ) + ) + +(define-extern *text-group-names* (array string)) +(define-extern *common-text-heap* kheap) +(define-extern *common-text* game-text-info) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; camera-defs-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype camera-bank (basic) + ((collide-move-rad float :offset-assert 4) + (joypad uint32 :offset-assert 8) + (min-detectable-velocity float :offset-assert 12) + (attack-timeout uint64 :offset-assert 16) ;; time-frame + (default-string-max-y meters :offset-assert 24) + (default-string-min-y meters :offset-assert 28) + (default-string-max-z meters :offset-assert 32) + (default-string-min-z meters :offset-assert 36) + (default-string-push-z meters :offset-assert 40) + (default-tilt-adjust deg :offset-assert 44) ;; degrees + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype camera-master-bank (basic) + ((onscreen-head-height meters :offset-assert 4) + (onscreen-foot-height meters :offset-assert 8) + (target-height meters :offset-assert 12) + (up-move-to-pitch-ratio-in-air float :offset-assert 16) + (down-move-to-pitch-ratio-in-air float :offset-assert 20) + (up-move-to-pitch-on-ground float :offset-assert 24) + (down-move-to-pitch-on-ground float :offset-assert 28) + (pitch-off-blend float :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +;; (define-extern *CAMERA-bank* camera-bank) ;; camera-bank +;; (define-extern *CAMERA_MASTER-bank* camera-master-bank) ;; camera-master-bank + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type resetter-spec structure) +(deftype user-setting-data (structure) + ((border-mode symbol :offset-assert 0) ;; guessed by decompiler + (process-mask process-mask :offset-assert 4) ;; guessed by decompiler + (common-page int32 :offset-assert 8) + (language language-enum :offset-assert 12) ;; language-enum + (vibration symbol :offset 24) + (play-hints symbol :offset-assert 28) + (movie (pointer process) :offset-assert 32) ;; guessed by decompiler + (talking (pointer process) :offset-assert 36) ;; guessed by decompiler + (spooling (pointer process) :offset-assert 40) ;; guessed by decompiler + (hint (pointer process) :offset-assert 44) ;; guessed by decompiler + (ambient (pointer process) :offset-assert 48) ;; guessed by decompiler + (video-mode symbol :offset-assert 52) ;; guessed by decompiler + (aspect-ratio symbol :offset-assert 56) ;; guessed by decompiler + (auto-save symbol :offset 72) ;; guessed by decompiler + (rotate-arena-minimap symbol :offset-assert 76) + (bg-r float :offset-assert 80) + (bg-g float :offset-assert 84) + (bg-b float :offset-assert 88) + (bg-a float :offset-assert 92) + (bg-a-speed float :offset-assert 96) + (bg-a-force float :offset-assert 100) + (blur-a float :offset-assert 104) + (blur-a-speed float :offset-assert 108) + (allow-progress symbol :offset-assert 112) ;; guessed by decompiler + (allow-in-game-menu basic :offset-assert 116) + (allow-pause symbol :offset-assert 120) ;; guessed by decompiler + (fog-override symbol :offset-assert 124) + (allow-look-around symbol :offset-assert 128) + (movie-name symbol :offset 136) ;; guessed by decompiler + (weather symbol :offset-assert 140) ;; guessed by decompiler + (mouse symbol :offset-assert 144) + (cursor symbol :offset-assert 148) + (keybd symbol :offset-assert 152) + (task-mask task-mask :offset-assert 156) + (region-mode symbol :offset-assert 160) + (speed-mult float :offset-assert 164) + (features uint64 :offset-assert 168) ;; game-feature + (vehicles uint64 :offset-assert 176) ;; game-vehicles + (sfx-volume float :offset-assert 184) + (sfx-volume-movie float :offset-assert 188) + (music-volume float :offset-assert 192) + (music-volume-movie float :offset-assert 196) + (dialog-volume float :offset-assert 200) + (dialog-volume-talker float :offset-assert 204) + (ambient-volume float :offset-assert 208) + (ambient-volume-movie float :offset-assert 212) + (dynamic-ambient-volume float :offset-assert 216) + (talker-volume float :offset-assert 220) + (mode-sound-bank uint32 :offset-assert 224) ;; guessed by decompiler + (sound-reverb float :offset-assert 228) + (sound-reverb-mode int32 :offset-assert 232) + (sound-reverb-seek-speed float :offset-assert 236) + (stereo-mode int32 :offset-assert 240) + (music symbol :offset-assert 244) ;; guessed by decompiler + (spool-anim spool-anim :offset-assert 248) ;; guessed by decompiler + (task-manager (pointer process) :offset-assert 252) ;; guessed by decompiler + (task symbol :offset-assert 256) ;; guessed by decompiler + (airlock symbol :offset-assert 260) ;; guessed by decompiler + (minimap uint32 :offset-assert 264) + (allow-continue symbol :offset-assert 268) ;; guessed by decompiler + (spotlight-color rgba :offset-assert 272) + (highlight-color rgba :offset-assert 276) + (subtitle symbol :offset-assert 280) ;; guessed by decompiler + (doorway symbol :offset-assert 284) ;; guessed by decompiler + (gem symbol :offset-assert 288) ;; guessed by decompiler + (half-speed symbol :offset-assert 292) ;; guessed by decompiler + (gun-buoy symbol :offset-assert 296) ;; guessed by decompiler + (double-jump symbol :offset-assert 300) ;; guessed by decompiler + (pilot symbol :offset-assert 304) ;; guessed by decompiler + (pilot-exit symbol :offset-assert 308) ;; guessed by decompiler + (pilot-death symbol :offset-assert 312) ;; guessed by decompiler + (speech-control symbol :offset-assert 316) ;; guessed by decompiler + (vehicle-hijacking symbol :offset-assert 320) ;; guessed by decompiler + (endlessfall symbol :offset-assert 324) ;; guessed by decompiler + (rain float :offset-assert 328) + (snow float :offset-assert 332) + (exclusive-load symbol :offset-assert 336) ;; guessed by decompiler + (render symbol :offset-assert 340) ;; guessed by decompiler + (allow-timeout symbol :offset-assert 344) ;; guessed by decompiler + (mirror symbol :offset-assert 348) ;; guessed by decompiler + (movie-skip-frame float :offset-assert 352) + (allow-blackout symbol :offset-assert 356) ;; guessed by decompiler + (race-minimap int32 :offset-assert 360) + (beard symbol :offset-assert 364) ;; guessed by decompiler + (ignore-target symbol :offset-assert 368) ;; guessed by decompiler + (subtitle-language uint8 :offset-assert 372) ;; language-enum + (sound-bank-load symbol :offset-assert 376) ;; guessed by decompiler + (allow-error symbol :offset-assert 380) ;; guessed by decompiler + (under-water-pitch-mod float :offset-assert 384) + (scanlines float :offset-assert 388) + (restart-info resetter-spec :offset-assert 392) ;; guessed by decompiler + (fail-info resetter-spec :offset-assert 396) ;; guessed by decompiler + (death-info resetter-spec :offset-assert 400) ;; guessed by decompiler + (quit-info resetter-spec :offset-assert 404) ;; guessed by decompiler + (extra-bank-count uint32 :offset-assert 408) + (extra-bank pair 3 :offset-assert 412) ;; guessed by decompiler + (borrow-count uint32 :offset-assert 424) + (borrow pair 3 :offset-assert 428) ;; guessed by decompiler + (exclusive-task-count uint32 :offset-assert 440) + (exclusive-task int32 3 :offset-assert 444) ;; guessed by decompiler + (level-trans-time int32 :offset-assert 456) + (fog-special-interp-targ float :offset-assert 460) + (fog-special-interp-rate float :offset-assert 464) + (traffic-spawn symbol :offset-assert 468) + (stop-vehicle? symbol :offset-assert 472) + (part-bounds-check symbol :offset-assert 476) + (letterbox float :offset-assert 480) + (letterbox-speed float :offset-assert 484) + (minimap-level symbol :offset-assert 488) + (duststorm-push-player? symbol :offset-assert 492) + (dust-storm-fog-scalar float :offset-assert 496) + (dust-storm-sound-scalar float :offset-assert 500) + (citizen-fights symbol :offset-assert 504) + (allow-logo symbol :offset-assert 508) + (brightness float :offset-assert 512) + (contrast float :offset-assert 516) + (stop-boats? symbol :offset-assert 520) + (borrow-city-count uint32 :offset-assert 524) + (borrow-city pair 3 :offset-assert 528) ;; guessed by decompiler + (faction-command-count uint32 :offset-assert 540) + (faction-command pair 3 :offset-assert 544) + (kg-enemy-settings symbol :offset 560) + (ff-enemy-settings symbol :offset-assert 564) + (mh-enemy-settings symbol :offset-assert 568) + (city-heap-load float :offset-assert 572) + (gun-target-guards? symbol :offset-assert 576) + (freeze-screen symbol :offset-assert 580) + (borrow-hold-perm-count uint32 :offset-assert 584) + (borrow-hold-perm pair 3 :offset-assert 588) + (borrow-hold-count uint32 :offset-assert 600) + (borrow-hold pair 3 :offset-assert 604) + (player-control-override symbol :offset 620) + (player-control-mask uint32 :offset-assert 624) + (airlock-command pair :offset 632) + (sky-override symbol :offset-assert 636) + (global-wind symbol :offset-assert 640) + (ambient-wind-scalar float :offset-assert 644) + (halfpipe-jump-mult float :offset-assert 648) + (audio-language uint8 :offset-assert 652) ;; language-enum + (city-sound pair 3 :offset 660) + (board-max-speed float :offset-assert 672) + (hide-crates? symbol :offset 680) + (pickups symbol :offset-assert 684) + (sound-ear handle :offset-assert 688) + (sound-ear-scale float :offset-assert 696) + (special-volume float :offset-assert 700) + (dive symbol :offset-assert 704) + (timer-warn-seconds uint32 :offset-assert 708) + (gem-pool-index int32 :offset-assert 712) + (unique-vehicle-mission-critical symbol :offset-assert 716) + (turbo symbol :offset-assert 720) + (gun-eject symbol :offset-assert 724) + (disable-parking-spots? symbol :offset-assert 728) + (gem-seek-target-dir symbol :offset-assert 732) + (nuke-active? symbol :offset 740) + (disable-guard-chatter symbol :offset-assert 744) + (override-capture-mode? symbol :offset-assert 748) + (mpeg-mode? symbol :offset-assert 752) + (fog-mult float :offset-assert 756) + (fog-speed float :offset-assert 760) + (blur-enabled? symbol :offset-assert 764) + (event-finished? symbol :offset-assert 768) + ) + :method-count-assert 11 + :size-assert #x304 + :flag-assert #xb00000304 + (:methods + (user-setting-data-method-9 (_type_ engine engine-pers engine) user-setting-data) ;; 9 + (user-setting-data-method-10 (_type_ object symbol float uint) user-setting-data) ;; 10 + ) + ) + +;; +++settings-h:cam-slave-options +(defenum cam-slave-options + :type uint64 + :bitfield #t + (BUTT_CAM 0) + (SAME_SIDE 1) + (MOVE_SPHERICAL 2) + (ALLOW_Z_ROT 3) + (JUMP_PITCHES 4) + (COLLIDE 5) + (FIND_HIDDEN_TARGET 6) + (DRAG 7) + (PLAYER_MOVING_CAMERA 8) + (LINE_OF_SIGHT 9) + (MOVEMENT_BLOCKED 10) + (SHRINK_MAX_ANGLE 11) + (GOTO_GOOD_POINT 12) + (BIKE_MODE 13) + (NO_ROTATE 14) + (STICKY_ANGLE 15) + (BLOCK_RIGHT_STICK 16) + (ALLOW_SHIFT_BUTTONS 17) + (GUN_CAM 18) + (WIDE_FOV 19) + (RAPID_TRACKING 20) + (EASE_SPLINE_IDX 21) + (VERTICAL_FOLLOW_MATCHES_CAMERA 22) + (HAVE_BUTT_HANDLE 23) + (BOMBBOT 24) + (JUMP_LAG 25) + ) +;; ---settings-h:cam-slave-options + +;; +++settings-h:cam-master-options +(defenum cam-master-options + :type uint64 + :bitfield #t + (HAVE_TARGET) ;; 1 + (SET_COMBINER_AXIS) ;; 2 + (FLIP_COMBINER) ;; 4 + (HAVE_EASE_TO_POS) ;; 8 + (IN_BASE_REGION) ;; 10 + (IGNORE_ANALOG) ;; 20 + (BLOCK_RIGHT_STICK) ;; 40 + (USE_L1_R1) ;; 80 + (READ_BUTTONS) + (IMMEDIATE_STRING_MIN_MAX) + ) +;; ---settings-h:cam-master-options + +(deftype cam-setting-data (structure) + ((fov degrees :offset-assert 0) ;; degrees + (pov-handle handle :offset 16) ;; handle + (pov-bone int32 :offset-assert 24) + (pov-offset vector :inline :offset-assert 32) + (string-default symbol :offset-assert 48) ;; symbol + (string-max-length meters :offset-assert 52) + (string-min-length meters :offset-assert 56) + (string-max-height meters :offset-assert 60) + (string-min-height meters :offset-assert 64) + (string-cliff-height meters :offset-assert 68) + (string-camera-floor meters :offset-assert 72) + (string-camera-ceiling meters :offset-assert 76) + (gun-max-height meters :offset-assert 80) + (gun-min-height meters :offset-assert 84) + (string-local-down vector :inline :offset-assert 96) + (slave-options cam-slave-options :offset-assert 112) + (matrix-blend-max-angle degrees :offset-assert 120) ;; degrees + (matrix-blend-max-partial float :offset-assert 124) + (string-spline-max-move meters :offset-assert 128) + (string-spline-accel meters :offset-assert 132) + (string-spline-max-move-player meters :offset-assert 136) + (string-spline-accel-player meters :offset-assert 140) + (string-startup-vector vector :inline :offset-assert 144) + (use-string-startup-vector symbol :offset-assert 160) ;; guessed by decompiler + (look-at-point vector :inline :offset-assert 176) + (use-look-at-point symbol :offset-assert 192) ;; guessed by decompiler + (target-height meters :offset-assert 196) + (foot-offset meters :offset-assert 200) + (head-offset meters :offset-assert 204) + (teleport-on-entity-change symbol :offset-assert 208) ;; symbol + (entity-name string :offset-assert 212) + (cam-slope string :offset-assert 216) + (entity-or-mode-changed symbol :offset-assert 220) ;; symbol + (master-options cam-master-options :offset-assert 224) + (entity-mask uint32 :offset-assert 232) + (mode-name symbol :offset-assert 236) ;; guessed by decompiler + (real-entity-name string :offset-assert 240) + (cam-mode symbol :offset-assert 244) ;; guessed by decompiler + (interp-time uint32 :offset-assert 248) + (no-intro symbol :offset-assert 252) ;; guessed by decompiler + (use-point-of-interest symbol :offset-assert 256) ;; guessed by decompiler + (point-of-interest vector :inline :offset-assert 272) + (handle-of-interest handle :offset-assert 288) ;; handle + (mouse-tumble-point vector :inline :offset-assert 304) + (use-mouse-tumble-point symbol :offset-assert 320) ;; guessed by decompiler + (mouse-input symbol :offset-assert 324) ;; guessed by decompiler + (cpad1-skip-buttons symbol :offset-assert 328) ;; guessed by decompiler + (butt-handle uint64 :offset-assert 336) ;; handle + (butt-angle float :offset-assert 344) + (extra-follow-height float :offset-assert 348) + (interp-time-priority uint32 :offset-assert 352) + (string-max-length-default symbol :offset-assert 356) ;; guessed by decompiler + (string-min-length-default symbol :offset-assert 360) ;; guessed by decompiler + (string-max-height-default symbol :offset-assert 364) ;; guessed by decompiler + (string-min-height-default symbol :offset-assert 368) ;; guessed by decompiler + (flip-vertical symbol :offset-assert 372) ;; guessed by decompiler + (flip-horizontal symbol :offset-assert 376) ;; guessed by decompiler + (fov-priority float :offset 384) + (ocean-off basic :offset-assert 388) + (ocean-override basic :offset-assert 392) + (crash-cam-force-freeze basic :offset-assert 396) + ) + :method-count-assert 11 + :size-assert #x190 + :flag-assert #xb00000190 + ;; field cam-slave-options is likely a value type. field cam-master-options is likely a value type. + (:methods + (cam-setting-data-method-9 () none) ;; 9 ;; (cam-setting-data-method-9 (_type_ engine engine-pers engine) _type_) + (cam-setting-data-method-10 () none) ;; 10 ;; (cam-setting-data-method-10 (_type_ object (pointer process) float int) _type_) + ) + ) + +(deftype cam-setting-state (structure) + ((current cam-setting-data :inline :offset-assert 0) + (target cam-setting-data :inline :offset-assert 400) + (default cam-setting-data :inline :offset-assert 800) + ) + :method-count-assert 9 + :size-assert #x4b0 + :flag-assert #x9000004b0 + ) + +(deftype engine-group (structure) + ((engine engine :offset-assert 0) + (engine-pers engine-pers :offset-assert 4) + (engine-hi engine :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype setting-control (basic) + ((user-current user-setting-data :inline :offset-assert 16) + (user-target user-setting-data :inline :offset-assert 800) + (user-default user-setting-data :inline :offset-assert 1584) + (cam-settings cam-setting-state 4 :inline :offset-assert 2368) + (engine engine :offset-assert 7168) ;; guessed by decompiler + (engine-pers engine-pers :offset-assert 7172) ;; guessed by decompiler + (engine-hi engine :offset-assert 7176) ;; guessed by decompiler + (cam-engines engine-group 4 :offset-assert 7180) + ) + :method-count-assert 25 + :size-assert #x1c1c + :flag-assert #x1900001c1c + (:methods + (new (symbol type int) _type_) ;; 0 + (setting-control-method-9 () none) ;; 9 ;; (add-setting (_type_ process symbol object object object) connection) + (setting-control-method-10 () none) ;; 10 ;; (persist-with-delay (_type_ symbol time-frame symbol symbol float int) none) + (setting-control-method-11 () none) ;; 11 ;; (set-setting (_type_ process symbol object object object) connection) + (setting-control-method-12 () none) ;; 12 ;; (remove-setting (_type_ process symbol) none) + (add-setting (_type_ process symbol object object object) connection) ;; 13 ;; (kill-persister (_type_ engine-pers object) none) + (persist-with-delay (_type_ symbol time-frame symbol symbol float int) int) ;; 14 ;; (setting-control-method-14 (_type_ object) connectable) + (set-setting (_type_ process symbol object object object) connection) ;; 15 ;; (get-setting (_type_ object) connectable) + (remove-setting (_type_ process symbol) none) ;; 16 ;; (remove-setting-by-arg0 (_type_ object) none) + (setting-control-method-17 (_type_ process symbol) int) ;; 17 ;; (set-setting-by-param (_type_ symbol object object object) connection) + (setting-control-method-18 () none) ;; 18 ;; (apply-settings (_type_) user-setting-data) + (move-connection-to-dead (_type_ connection) int) ;; 19 ;; (update (_type_) user-setting-data) + (setting-control-method-20 () none) ;; 20 + (remove-setting-by-arg0 (_type_ object) int) ;; 21 + (set-setting-by-param (_type_ symbol object object object) connection) ;; 22 + (setting-control-method-23 (_type_) none) ;; 23 + (setting-control-method-24 () none) ;; 24 + ) + ) + +(define-extern *settings-dialog-volume* object) +(define-extern *settings-music-volume* object) +(define-extern *settings-sfx-volume* object) +(define-extern *settings-music-seek-speed* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; memory-usage-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defenum mem-usage-id + :bitfield #f + :type uint32 + ) + +(deftype memory-usage-info (structure) + ((name string :offset-assert 0) ;; guessed by decompiler + (count int32 :offset-assert 4) + (used int32 :offset-assert 8) + (total int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype memory-usage-block (basic) + ((work-bsp basic :offset-assert 4) + (length int32 :offset-assert 8) + (data memory-usage-info 112 :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x710 + :flag-assert #xc00000710 + (:methods + (reset! (_type_) _type_) ;; 9 + (calculate-total (_type_) int) ;; 10 + (print-mem-usage (_type_ level object) _type_) ;; 11 + ) + ) + +(define-extern *mem-usage* memory-usage-block) +(define-extern *dma-mem-usage* memory-usage-block) +(define-extern *temp-mem-usage* memory-usage-block) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sky-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sky-color-hour (structure) + ((snapshot1 int32 :offset-assert 0) + (snapshot2 int32 :offset-assert 4) + (morph-start float :offset-assert 8) + (morph-end float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype sky-color-day (structure) + ((hour sky-color-hour 24 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) +|# + +#| +(deftype sky-sun-data (structure) + ((data uint128 4 :offset-assert 0) ;; guessed by decompiler + (pos vector :inline :offset-assert 0) + (r-sun float :offset-assert 16) + (r-halo float :offset-assert 20) + (r-aurora float :offset-assert 24) + (c-sun-start rgba :offset-assert 32) ;; guessed by decompiler + (c-sun-end rgba :offset-assert 48) ;; guessed by decompiler + (c-halo-start rgba :offset-assert 36) ;; guessed by decompiler + (c-halo-end rgba :offset-assert 52) ;; guessed by decompiler + (c-aurora-start rgba :offset-assert 40) ;; guessed by decompiler + (c-aurora-end rgba :offset-assert 56) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype sky-moon-data (structure) + ((data uint128 2 :offset-assert 0) ;; guessed by decompiler + (pos vector :inline :offset-assert 0) + (scale vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype sky-orbit (structure) + ((high-noon float :offset-assert 0) + (tilt float :offset-assert 4) + (rise float :offset-assert 8) + (dist float :offset-assert 12) + (min-halo float :offset-assert 16) + (max-halo float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype sky-upload-data (structure) + ((data uint128 12 :offset-assert 0) ;; guessed by decompiler + (sun sky-sun-data 2 :offset-assert 0) ;; guessed by decompiler + (moon sky-moon-data :inline :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) +|# + +(deftype sky-vertex (structure) + ((pos vector :inline :offset-assert 0) + (stq vector :inline :offset-assert 16) + (col vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +#| +(deftype cloud-vertex (structure) + ((pos vector :inline :offset-assert 0) + (stq vector :inline :offset-assert 16) + (col vector :inline :offset-assert 32) + (nrm vector :inline :offset-assert 48) + (stq2 vector :inline :offset-assert 64) + (col2 vector :inline :offset-assert 80) + (nrm2 vector :inline :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype cloud-vert-array (structure) + ((data cloud-vertex 100 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2bc0 + :flag-assert #x900002bc0 + ) +|# + +#| +(deftype haze-vertex (structure) + ((pos vector :inline :offset-assert 0) + (nrm vector :inline :offset-assert 16) + (col vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype haze-vert-array (structure) + ((data haze-vertex 36 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x6c0 + :flag-assert #x9000006c0 + ) +|# + +#| +(deftype cloud-lights (structure) + ((sun0-normal vector :inline :offset-assert 0) + (sun1-normal vector :inline :offset-assert 16) + (moon-normal vector :inline :offset-assert 32) + (ambi-color vector :inline :offset-assert 48) + (ambi-color-lower vector :inline :offset-assert 64) + (sun0-color vector :inline :offset-assert 80) + (sun1-color vector :inline :offset-assert 96) + (moon-color vector :inline :offset-assert 112) + (sun0-color-lower vector :inline :offset-assert 128) + (sun0-scale float :offset-assert 144) + (sun1-scale float :offset-assert 148) + (moon-scale float :offset-assert 152) + ) + :method-count-assert 9 + :size-assert #x9c + :flag-assert #x90000009c + ) +|# + +#| +(deftype haze-lights (structure) + ((sun0-normal vector :inline :offset-assert 0) + (sun1-normal vector :inline :offset-assert 16) + (moon-normal vector :inline :offset-assert 32) + (ambi-color vector :inline :offset-assert 48) + (sun0-color vector :inline :offset-assert 64) + (sun1-color vector :inline :offset-assert 80) + (moon-color vector :inline :offset-assert 96) + (sun0-scale float :offset-assert 112) + (sun1-scale float :offset-assert 116) + (moon-scale float :offset-assert 120) + ) + :method-count-assert 9 + :size-assert #x7c + :flag-assert #x90000007c + ) +|# + +#| +(deftype sky-work (structure) + ((adgif-tmpl dma-gif-packet :inline :offset-assert 0) + (draw-tmpl dma-gif-packet :inline :offset-assert 32) + (draw-tmpl2 dma-gif-packet :inline :offset-assert 64) + (fog-tmpl dma-gif-packet :inline :offset-assert 96) + (blend-tmpl dma-gif-packet :inline :offset-assert 128) + (sprite-tmpl dma-gif-packet :inline :offset-assert 160) + (sprite-tmpl2 dma-gif-packet :inline :offset-assert 192) + (sun-coords vector 2 :offset-assert 224) ;; guessed by decompiler + (green-coords vector 2 :offset-assert 256) ;; guessed by decompiler + (moon0-coords vector 2 :offset-assert 288) ;; guessed by decompiler + (moon1-coords vector 2 :offset-assert 320) ;; guessed by decompiler + (moon2-coords vector 2 :offset-assert 352) ;; guessed by decompiler + (star-coords vector 2 :offset-assert 384) ;; guessed by decompiler + (sun-colors vector4w 2 :offset-assert 416) ;; guessed by decompiler + (green-colors vector4w 2 :offset-assert 448) ;; guessed by decompiler + (moon-colors vector4w 3 :offset-assert 480) ;; guessed by decompiler + (star-colors vector4w 16 :offset-assert 528) ;; guessed by decompiler + (st-coords vector 2 :offset-assert 784) ;; guessed by decompiler + (random vector4w 8 :offset-assert 816) ;; guessed by decompiler + (giftag-base dma-gif :inline :offset-assert 944) + (giftag-haze dma-gif :inline :offset-assert 960) + (giftag-roof dma-gif :inline :offset-assert 976) + (giftag-clouds dma-gif :inline :offset-assert 992) + (giftag-ocean dma-gif :inline :offset-assert 1008) + (fog vector :inline :offset-assert 1024) + (sky float 8 :offset-assert 1040) ;; guessed by decompiler + (time float :offset-assert 1072) + (off-s uint16 :offset-assert 1076) + (off-t uint16 :offset-assert 1078) + (orbit sky-orbit 3 :offset-assert 1080) ;; guessed by decompiler + (upload-data sky-upload-data :inline :offset-assert 1184) + (ambi-color vector :inline :offset-assert 1376) + (ambi-color-lower vector :inline :offset-assert 1392) + (sun0-color vector :inline :offset-assert 1408) + (sun1-color vector :inline :offset-assert 1424) + (moon-color vector :inline :offset-assert 1440) + (sun0-color-lower vector :inline :offset-assert 1456) + (cam-mat matrix :inline :offset-assert 1472) + (star-mat matrix :inline :offset-assert 1536) + (vec0 vector4w :inline :offset-assert 1600) + (vec1 vector4w :inline :offset-assert 1616) + (cloud-lights cloud-lights :inline :offset-assert 1632) + (haze-lights haze-lights :inline :offset-assert 1792) + (buf dma-buffer :offset-assert 1916) ;; guessed by decompiler + (stars vector 512 :offset-assert 1920) ;; guessed by decompiler + (disable-day-star basic :offset-assert 10112) + ) + :method-count-assert 37 + :size-assert #x2784 + :flag-assert #x2500002784 + (:methods + (sky-work-method-9 () none) ;; 9 ;; (init-sun-data! (_type_ int float float float) none) + (sky-work-method-10 () none) ;; 10 ;; (init-orbit-settings! (_type_ int float float float float float float) none) + (sky-work-method-11 () none) ;; 11 ;; (update-colors-for-time (_type_ float) none) + (sky-work-method-12 () none) ;; 12 ;; (update-time-and-speed (_type_ float float) none) + (sky-work-method-13 () none) ;; 13 ;; (draw-erase (_type_ dma-buffer vector) none) + (sky-work-method-14 () none) ;; 14 ;; (draw (_type_) none) + (sky-work-method-15 () none) ;; 15 ;; (update-camera-matrix (_type_ matrix) none) + (sky-work-method-16 () none) ;; 16 ;; (update-template-colors (_type_) none) + (sky-work-method-17 () none) ;; 17 ;; (init-regs-for-large-polygon-draw (_type_) none) + (sky-work-method-18 () none) ;; 18 ;; (init-regs-for-sky-asm (_type_) none) + (sky-work-method-19 () none) ;; 19 ;; (cloud-vtx-light-update (_type_ vector vector cloud-lights vector vector) none) + (sky-work-method-20 () none) ;; 20 ;; (cloud-vtx-tex-update (_type_ vector vector vector cloud-lights) none) + (sky-work-method-21 () none) ;; 21 ;; (adjust-cloud-lighting (_type_) none) + (sky-work-method-22 () none) ;; 22 ;; (cloud-vtx1-to-sky (_type_ sky-vertex cloud-vertex) none) + (sky-work-method-23 () none) ;; 23 ;; (cloud-vtx2-to-sky (_type_ sky-vertex cloud-vertex) none) + (sky-work-method-24 () none) ;; 24 ;; (draw-clouds (_type_ dma-buffer) none) + (sky-work-method-25 () none) ;; 25 ;; (apply-haze-light (_type_ vector vector haze-lights float) none) + (sky-work-method-26 () none) ;; 26 ;; (adjust-haze-lighting (_type_) none) + (sky-work-method-27 () none) ;; 27 ;; (haze-vtx-to-sky (_type_ sky-vertex sky-vertex haze-vertex) none) + (sky-work-method-28 () none) ;; 28 ;; (draw-haze (_type_ dma-buffer) none) + (sky-work-method-29 () none) ;; 29 ;; (sun-dma (_type_ dma-buffer) none) + (sky-work-method-30 () none) ;; 30 ;; (green-sun-dma (_type_ dma-buffer) none) + (sky-work-method-31 () none) ;; 31 ;; (moon-dma (_type_ dma-buffer) none) + (sky-work-method-32 () none) ;; 32 ;; (day-star-dma (_type_ dma-buffer) none) + (sky-work-method-33 () none) ;; 33 ;; (setup-stars (_type_ matrix sky-upload-data) none) + (sky-work-method-34 () none) ;; 34 ;; (stars-transform-asm (_type_) none) + (sky-work-method-35 () none) ;; 35 ;; (stars-dma (_type_ dma-buffer) none) + (sky-work-method-36 () none) ;; 36 ;; (draw-roof (_type_ dma-buffer) none) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ocean-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ocean-corner (structure) + ((bsphere sphere :inline :offset-assert 0) + (start-corner vector :inline :offset-assert 16) + (y-scales vector :inline :offset-assert 32) + (alphas vector :inline :offset-assert 48) + (colors uint32 4 :offset-assert 64) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype ocean-wave-info (structure) + ((frequency float :offset-assert 0) + (amplitude float :offset-assert 4) + (wave-speed float :offset-assert 8) + (angle float :offset-assert 12) + (kx float :offset-assert 16) + (ky float :offset-assert 20) + (w float :offset-assert 24) + (flags int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype ocean-vertex (structure) + ((pos vector :inline :offset-assert 0) + (stq vector :inline :offset-assert 16) + (col vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype ocean-spheres (structure) + ((spheres sphere 36 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x240 + :flag-assert #x900000240 + ) +|# + +#| +(deftype ocean-colors (structure) + ((colors rgba 2548 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x27d0 + :flag-assert #x9000027d0 + ) +|# + +#| +(deftype ocean-colors-float (structure) + ((colors vector 2548 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x9f40 + :flag-assert #x900009f40 + ) +|# + +#| +(deftype ocean-mid-mask (structure) + ((mask uint8 8 :offset-assert 0) ;; guessed by decompiler + (dword uint64 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype ocean-mid-indices (basic) + ((data uint16 36 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype ocean-mid-masks (basic) + ((data (inline-array ocean-mid-mask) :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype ocean-trans-mask (structure) + ((mask uint8 4 :offset-assert 0) ;; guessed by decompiler + (word int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype ocean-trans-index (structure) + ((parent int16 :offset-assert 0) + (child int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype ocean-trans-indices (basic) + ((data ocean-trans-index 2304 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2404 + :flag-assert #x900002404 + ) +|# + +#| +(deftype ocean-near-index (structure) + ((data uint16 16 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype ocean-near-indices (basic) + ((data (inline-array ocean-near-index) :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype ocean-near-colors (structure) + ((color0 vector :inline :offset-assert 0) + (color1 vector :inline :offset-assert 16) + (color2 vector :inline :offset-assert 32) + (color3 vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype ocean-trans-strip (structure) + ((verts uint128 10 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) +|# + +#| +(deftype ocean-trans-strip-array (structure) + ((data ocean-trans-strip 4 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x280 + :flag-assert #x900000280 + ) +|# + +#| +(deftype ocean-wave-data (structure) + ((data uint8 1024 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x400 + :flag-assert #x900000400 + ) +|# + +#| +(deftype ocean-wave-frames (structure) + ((frame ocean-wave-data 64 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x0 + :heap-base #x1 + :flag-assert #x900010000 + ) +|# + +#| +(deftype ocean-texture-constants (structure) + ((giftag qword :inline :offset-assert 0) ;; gs-gif-tag :inline + (buffers vector4w :inline :offset-assert 16) + (dests vector4w :inline :offset-assert 32) + (start vector :inline :offset-assert 48) + (offsets vector :inline :offset-assert 64) + (constants vector :inline :offset-assert 80) + (cam-nrm vector :inline :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype ocean-mid-vertex (structure) + ((stq vector :inline :offset-assert 0) + (col vector :inline :offset-assert 16) + (pos vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype ocean-mid-constants (structure) + ((hmge-scale vector :inline :offset-assert 0) + (inv-hmge-scale vector :inline :offset-assert 16) + (hvdf-offset vector :inline :offset-assert 32) + (fog vector :inline :offset-assert 48) + (constants vector :inline :offset-assert 64) + (constants2 vector :inline :offset-assert 80) + (drw-fan qword :inline :offset-assert 96) ;; gs-gif-tag :inline + (env-fan qword :inline :offset-assert 112) ;; gs-gif-tag :inline + (drw-adgif qword :inline :offset-assert 128) ;; gs-gif-tag :inline + (drw-texture adgif-shader :inline :offset-assert 144) + (drw-strip-0 qword :inline :offset-assert 224) ;; gs-gif-tag :inline + (drw-strip-1 qword :inline :offset-assert 240) ;; gs-gif-tag :inline + (env-adgif qword :inline :offset-assert 256) ;; gs-gif-tag :inline + (env-texture adgif-shader :inline :offset-assert 272) + (env-strip qword :inline :offset-assert 352) ;; gs-gif-tag :inline + (env-color vector :inline :offset-assert 368) + (index-table vector4w 8 :offset-assert 384) ;; guessed by decompiler + (pos0 vector :inline :offset-assert 512) + (pos1 vector :inline :offset-assert 528) + (pos2 vector :inline :offset-assert 544) + (pos3 vector :inline :offset-assert 560) + ) + :method-count-assert 9 + :size-assert #x240 + :flag-assert #x900000240 + ) +|# + +#| +(deftype ocean-mid-upload (structure) + ((rot matrix :inline :offset-assert 0) + (matrix matrix :inline :offset-assert 64) + (colors uint128 108 :offset-assert 128) ;; guessed by decompiler + (masks uint128 2 :offset-assert 1856) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x760 + :flag-assert #x900000760 + ) +|# + +#| +(deftype ocean-mid-upload2 (structure) + ((rot matrix :inline :offset-assert 0) + (matrix matrix :inline :offset-assert 64) + (count vector4w :inline :offset-assert 128) + (tex0 vector :inline :offset-assert 144) + (tex1 vector :inline :offset-assert 160) + (tex2 vector :inline :offset-assert 176) + (tex3 vector :inline :offset-assert 192) + (clr0 vector :inline :offset-assert 208) + (clr1 vector :inline :offset-assert 224) + (clr2 vector :inline :offset-assert 240) + (clr3 vector :inline :offset-assert 256) + (verts uint128 18 :offset-assert 272) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x230 + :flag-assert #x900000230 + ) +|# + +#| +(deftype ocean-mid-work (structure) + ((env0 vector :inline :offset-assert 0) + (env1 vector :inline :offset-assert 16) + (env2 vector :inline :offset-assert 32) + (hmg0 vector :inline :offset-assert 48) + (hmg1 vector :inline :offset-assert 64) + (hmg2 vector :inline :offset-assert 80) + (indices uint128 16 :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x160 + :flag-assert #x900000160 + ) +|# + +#| +(deftype ocean-near-constants (structure) + ((hmge-scale vector :inline :offset-assert 0) + (inv-hmge-scale vector :inline :offset-assert 16) + (hvdf-offset vector :inline :offset-assert 32) + (fog vector :inline :offset-assert 48) + (constants vector :inline :offset-assert 64) + (constants2 vector :inline :offset-assert 80) + (constants3 vector :inline :offset-assert 96) + (constants4 vector :inline :offset-assert 112) + (constants5 vector :inline :offset-assert 128) + (drw-fan qword :inline :offset-assert 144) ;; gs-gif-tag :inline + (drw2-fan qword :inline :offset-assert 160) ;; gs-gif-tag :inline + (env-fan qword :inline :offset-assert 176) ;; gs-gif-tag :inline + (drw-adgif qword :inline :offset-assert 192) ;; gs-gif-tag :inline + (drw-texture adgif-shader :inline :offset-assert 208) + (drw-strip qword :inline :offset-assert 288) ;; gs-gif-tag :inline + (env-adgif qword :inline :offset-assert 304) ;; gs-gif-tag :inline + (env-texture adgif-shader :inline :offset-assert 320) + (env-strip qword :inline :offset-assert 400) ;; gs-gif-tag :inline + (env-color vector :inline :offset-assert 416) + (drw2-adgif qword :inline :offset-assert 432) ;; gs-gif-tag :inline + (drw2-tex0 qword :inline :offset-assert 448) + (drw2-frame qword :inline :offset-assert 464) + (drw2-strip qword :inline :offset-assert 480) ;; gs-gif-tag :inline + (drw3-adgif qword :inline :offset-assert 496) ;; gs-gif-tag :inline + (drw3-frame qword :inline :offset-assert 512) ;; gs-adcmd :inline + (index-table vector4w 4 :offset-assert 528) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x250 + :flag-assert #x900000250 + ) +|# + +#| +(deftype ocean-near-upload (structure) + ((rot matrix :inline :offset-assert 0) + (matrix matrix :inline :offset-assert 64) + (masks uint128 2 :offset-assert 128) ;; guessed by decompiler + (start-height vector4w :inline :offset-assert 160) + (start-st vector :inline :offset-assert 176) + (near-colors ocean-near-colors :inline :offset-assert 192) + ) + :method-count-assert 9 + :size-assert #x100 + :flag-assert #x900000100 + ) +|# + +#| +(deftype ocean-near-vertex (structure) + ((stq vector :inline :offset-assert 0) + (clr vector :inline :offset-assert 16) + (pos vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype ocean-near-work (structure) + ((verts-ptr vector :inline :offset-assert 0) + (indices uint128 16 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x110 + :flag-assert #x900000110 + ) +|# + +#| +(deftype ocean-height-array (structure) + ((data float 1024 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1000 + :flag-assert #x900001000 + ) +|# + +#| +(deftype ocean-map (structure) + ((start-corner vector :inline :offset-assert 0) + (far-color vector :inline :offset-assert 16) + (ocean-colors ocean-colors :offset-assert 32) + (ocean-mid-indices ocean-mid-indices :offset-assert 36) ;; guessed by decompiler + (ocean-trans-indices ocean-trans-indices :offset-assert 40) ;; guessed by decompiler + (ocean-near-indices ocean-near-indices :offset-assert 44) ;; guessed by decompiler + (ocean-mid-masks ocean-mid-masks :offset-assert 48) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x34 + :flag-assert #xb00000034 + (:methods + (ocean-map-method-9 () none) ;; 9 ;; (set-height! (_type_ float) none) + (ocean-map-method-10 () none) ;; 10 ;; (get-base-height (_type_) float) + ) + ) +|# + +#| +(deftype ocean (ocean-map) + ((off symbol :offset-assert 52) ;; guessed by decompiler + (near-off symbol :offset-assert 56) ;; guessed by decompiler + (far-on symbol :offset-assert 60) ;; guessed by decompiler + (all-on symbol :offset-assert 64) ;; guessed by decompiler + (ocean-facing uint32 :offset-assert 68) + (mid-mask-ptrs pointer 36 :offset-assert 72) ;; guessed by decompiler + (mid-camera-masks uint64 36 :offset-assert 216) ;; guessed by decompiler + (trans-mask-ptrs pointer 64 :offset-assert 504) ;; guessed by decompiler + (trans-camera-masks ocean-trans-mask 16 :offset-assert 760) ;; guessed by decompiler + (trans-temp-masks uint32 16 :offset-assert 824) ;; guessed by decompiler + (haze-lights haze-lights :inline :offset-assert 896) + (near-mask-indices uint16 16 :offset-assert 1020) ;; guessed by decompiler + (mid-minx uint8 :offset-assert 1052) + (mid-maxx uint8 :offset-assert 1053) + (mid-minz uint8 :offset-assert 1054) + (mid-maxz uint8 :offset-assert 1055) + (near-minx uint8 :offset-assert 1056) + (near-maxx uint8 :offset-assert 1057) + (near-minz uint8 :offset-assert 1058) + (near-maxz uint8 :offset-assert 1059) + (temp-minx uint8 :offset-assert 1060) + (temp-maxx uint8 :offset-assert 1061) + (temp-minz uint8 :offset-assert 1062) + (temp-maxz uint8 :offset-assert 1063) + (tex1 uint64 :offset-assert 1064) ;; gs-tex1 + (tex1-near uint64 :offset-assert 1072) ;; gs-tex1 + (wait-to-vu0 uint32 :offset-assert 1080) + ) + :method-count-assert 84 + :size-assert #x43c + :flag-assert #x540000043c + (:methods + (ocean-method-11 () none) ;; 11 ;; (get-height (_type_ vector symbol) float) + (ocean-method-12 () none) ;; 12 ;; (draw! (_type_) none) + (ocean-method-13 () none) ;; 13 ;; (update-map (_type_) none) + (ocean-method-14 () none) ;; 14 ;; (interp-wave (_type_ ocean-wave-info uint float) none) + (ocean-method-15 () none) ;; 15 ;; (ocean-method-15 (_type_ matrix matrix) none) + (ocean-method-16 () none) ;; 16 ;; (generate-verts (_type_ ocean-vert-array ocean-height-array) none) + (ocean-method-17 () none) ;; 17 ;; (add-colors! (_type_ vector ocean-vertex) none) + (ocean-method-18 () none) ;; 18 ;; (ocean-method-18 (_type_ (pointer ocean-colors) (pointer ocean-colors)) none) + (ocean-method-19 () none) ;; 19 ;; (init-buffer! (_type_ dma-buffer) none) + (ocean-method-20 () none) ;; 20 ;; (end-buffer! (_type_ dma-buffer) none) + (ocean-method-21 () none) ;; 21 ;; (set-corners! (_type_ float float) float) + (ocean-method-22 () none) ;; 22 ;; (ocean-near-add-call (_type_ dma-buffer int) none) + (ocean-method-23 () none) ;; 23 ;; (ocean-near-add-call-flush (_type_ dma-buffer int) none) + (ocean-method-24 () none) ;; 24 ;; (ocean-near-setup-constants (_type_ ocean-near-constants) none) + (ocean-method-25 () none) ;; 25 ;; (ocean-near-add-constants (_type_ dma-buffer) none) + (ocean-method-26 () none) ;; 26 ;; (ocean-near-add-heights (_type_ dma-buffer) none) + (ocean-method-27 () none) ;; 27 ;; (ocean-near-add-matrices (_type_ dma-buffer vector) none) + (ocean-method-28 () none) ;; 28 ;; (ocean-near-add-upload (_type_ dma-buffer uint uint) none) + (ocean-method-29 () none) ;; 29 ;; (draw-ocean-near (_type_ dma-buffer) none) + (ocean-method-30 () none) ;; 30 ;; (ocean-trans-camera-masks-bit? (_type_ uint uint) symbol) + (ocean-method-31 () none) ;; 31 ;; (ocean-trans-mask-ptrs-bit? (_type_ int int) symbol) + (ocean-method-32 () none) ;; 32 ;; (ocean-trans-mask-ptrs-set! (_type_ uint uint) symbol) + (ocean-method-33 () none) ;; 33 ;; (ocean-trans-add-upload-table (_type_ dma-buffer uint uint int int symbol) none) + (ocean-method-34 () none) ;; 34 ;; (ocean-trans-add-upload-strip (_type_ dma-buffer uint uint int int int) none) + (ocean-method-35 () none) ;; 35 ;; (ocean-transition-check (_type_ ocean-trans-mask int int vector) none) + (ocean-method-36 () none) ;; 36 ;; (ocean-make-trans-camera-masks (_type_ uint uint uint uint) none) + (ocean-method-37 () none) ;; 37 ;; (ocean-trans-add-upload (_type_ dma-buffer uint uint) none) + (ocean-method-38 () none) ;; 38 ;; (draw-ocean-transition-seams (_type_ dma-buffer) none) + (ocean-method-39 () none) ;; 39 ;; (ocean-trans-add-constants (_type_ dma-buffer) none) + (ocean-method-40 () none) ;; 40 ;; (draw-ocean-transition (_type_ dma-buffer) none) + (ocean-method-41 () none) ;; 41 ;; (ocean-mid-add-call (_type_ dma-buffer int) none) + (ocean-method-42 () none) ;; 42 ;; (ocean-mid-add-call-flush (_type_ dma-buffer uint) none) + (ocean-method-43 () none) ;; 43 ;; (ocean-matrix*! (_type_ matrix matrix matrix) matrix) + (ocean-method-44 () none) ;; 44 ;; (ocean-vector-matrix*! (_type_ vector vector matrix) vector) + (ocean-method-45 () none) ;; 45 ;; (ocean-mid-add-matrices (_type_ dma-buffer vector) none) + (ocean-method-46 () none) ;; 46 ;; (ocean-mid-check (_type_ pointer int int vector) symbol) + (ocean-method-47 () none) ;; 47 ;; (ocean-mid-setup-constants (_type_ ocean-mid-constants) none) + (ocean-method-48 () none) ;; 48 ;; (ocean-mid-add-constants (_type_ dma-buffer) none) + (ocean-method-49 () none) ;; 49 ;; (ocean-mid-camera-masks-bit? (_type_ uint uint) symbol) + (ocean-method-50 () none) ;; 50 ;; (ocean-mid-mask-ptrs-bit? (_type_ uint uint) symbol) + (ocean-method-51 () none) ;; 51 ;; (ocean-mid-camera-masks-set! (_type_ uint uint) symbol) + (ocean-method-52 () none) ;; 52 ;; (ocean-mid-add-upload (_type_ dma-buffer int int int int float) none) + (ocean-method-53 () none) ;; 53 ;; (ocean-mid-add-upload-table (_type_ dma-buffer uint uint (pointer float) int symbol) none) + (ocean-method-54 () none) ;; 54 ;; (ocean-mid-add-upload-top (_type_ dma-buffer uint uint) none) + (ocean-method-55 () none) ;; 55 ;; (ocean-mid-add-upload-middle (_type_ dma-buffer uint uint) none) + (ocean-method-56 () none) ;; 56 ;; (ocean-mid-add-upload-bottom (_type_ dma-buffer uint uint) none) + (ocean-method-57 () none) ;; 57 ;; (ocean-seams-add-constants (_type_ dma-buffer) none) + (ocean-method-58 () none) ;; 58 ;; (draw-ocean-mid-seams (_type_ dma-buffer) none) + (ocean-method-59 () none) ;; 59 ;; (draw-ocean-mid (_type_ dma-buffer) none) + (ocean-method-60 () none) ;; 60 ;; (ocean-method-60 (_type_ dma-buffer) none) + (ocean-method-61 () none) ;; 61 ;; (ocean-method-61 (_type_ dma-buffer) none) + (ocean-method-62 () none) ;; 62 ;; (ocean-method-62 (_type_ dma-buffer) none) + (ocean-method-63 () none) ;; 63 ;; (ocean-method-63 (_type_ dma-buffer) none) + (ocean-method-64 () none) ;; 64 ;; (ocean-method-64 (_type_ dma-buffer) none) + (ocean-method-65 () none) ;; 65 ;; (ocean-method-65 (_type_ dma-buffer) none) + (ocean-method-66 () none) ;; 66 ;; (ocean-method-66 (_type_ dma-buffer) none) + (ocean-method-67 () none) ;; 67 ;; (ocean-method-67 (_type_ dma-buffer) none) + (ocean-method-68 () none) ;; 68 ;; (render-ocean-far (_type_ dma-buffer int) none) + (ocean-method-69 () none) ;; 69 ;; (draw-ocean-far (_type_ dma-buffer) none) + (ocean-method-70 () none) ;; 70 ;; (ocean-texture-setup-constants (_type_ ocean-texture-constants) none) + (ocean-method-71 () none) ;; 71 ;; (ocean-texture-add-constants (_type_ dma-buffer) none) + (ocean-method-72 () none) ;; 72 ;; (ocean-texture-add-envmap (_type_ dma-buffer) none) + (ocean-method-73 () none) ;; 73 ;; (ocean-texture-add-verts (_type_ dma-buffer int) none) + (ocean-method-74 () none) ;; 74 ;; (ocean-texture-add-verts-last (_type_ dma-buffer int int) none) + (ocean-method-75 () none) ;; 75 ;; (ocean-texture-add-call-start (_type_ dma-buffer) none) + (ocean-method-76 () none) ;; 76 ;; (ocean-texture-add-call-rest (_type_ dma-buffer) none) + (ocean-method-77 () none) ;; 77 ;; (ocean-texture-add-call-done (_type_ dma-buffer) none) + (ocean-method-78 () none) ;; 78 ;; (draw-ocean-texture (_type_ dma-buffer int) none) + (ocean-method-79 () none) ;; 79 ;; (ocean-method-79 (_type_ (pointer rgba)) none) + (ocean-method-80 () none) ;; 80 ;; (ocean-method-80 (_type_ dma-buffer) none) + (ocean-method-81 () none) ;; 81 ;; (draw-envmap-debug (_type_ dma-buffer) none) + (ocean-method-82 () none) ;; 82 ;; (ocean-method-82 (_type_ dma-buffer float) int) + (ocean-method-83 () none) ;; 83 ;; (ocean-method-83 (_type_ dma-buffer sky-upload-data vector4w float) none) + ) + ) +|# + +;; (define-extern *ocean-map* object) ;; ocean-map +;; (define-extern *ocean* object) ;; ocean + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; car-textures ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype car-texture-work (structure) + ((adgif-tmpl dma-gif-packet :inline :offset-assert 0) + (sprite-tmpl dma-gif-packet :inline :offset-assert 32) + (white vector4w :inline :offset-assert 64) + (blur vector4w :inline :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) +|# + +#| +(deftype car-name-info (structure) + ((name basic :offset-assert 0) + (part-dest-name basic :offset-assert 4) + (part-source-name basic :offset-assert 8) + (look-name basic :offset-assert 12) + (layer-name basic :offset-assert 16) + (damage int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +;; (define-extern *car-texture-work* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype texture-page-dir (basic) + () + :method-count-assert 11 + :size-assert #x14 + :flag-assert #xb00000014 + (:methods + (texture-page-dir-method-9 () none) ;; 9 ;; (unlink-shaders-in-heap (_type_ kheap) int) + (texture-page-dir-method-10 () none) ;; 10 + ) + ) +|# + +(define-extern texture-bpp "Get the bits-per-pixel in the given texture format" (function gs-psm int)) +(define-extern texture-qwc "Get the number of quadwords needed for a given texture size and format. + Does not consider weird PS2 memory layout stuff." + (function int int gs-psm int)) +(define-extern physical-address "Strip off high 8-bits of a pointer, to bypass the uncached memory mappings. + This gives an address suitable for DMAing from main memory." + (function pointer pointer)) +(define-extern dma-buffer-add-ref-texture "Upload a texture, by reference. Doesn't copy the texture into the DMA buffer - just a reference, + so it is up to the user to make sure the texture is valid during DMA time. + Doesn't set up GIF for receiving textures." + (function dma-buffer pointer int int gs-psm none)) + +(define-extern gs-find-block "Lookup offset of block in PS2's swizzled VRAM, as a block index." + (function int int gs-psm int)) +(define-extern gs-page-width "Get the width of a page, in pixels, for the given texture format." + (function gs-psm int)) +(define-extern gs-page-height "Get the height of a page, in pixels, for the given texture format." + (function gs-psm int)) +(define-extern gs-block-width "Get the width of a block, in pixels, for the texture format." + (function gs-psm int)) +(define-extern gs-block-height "Get the height of a block, in pixels, for the texture format." (function gs-psm int)) +(define-extern gs-largest-block "Get the highest block index used by a texture." (function int int gs-psm int)) +(define-extern gs-blocks-used "Get the number of blocks used by a texture. + If the texture isn't an even number of pages, the partially completed + page will be counted as the largest used block. + (gaps in this page are counted as used)" + (function int int gs-psm int)) +(define-extern texture-page-default-allocate + "Texture allocation function for textures that permanently live in VRAM. + The texture data is immediately uploaded, then discarded from the heap. + This should only be called during startup." + (function texture-pool texture-page kheap int texture-page)) +(define-extern texture-page-common-allocate + "Texture allocation function for textures that share the common segment. + The texture remains in RAM, and is uploaded to VRAM as needed as part + of the main drawing DMA chain." + (function texture-pool texture-page kheap int texture-page)) +(define-extern texture-page-font-allocate + "Texture allocation function for font. This temporarily stores them in the common segment, + removes them from RAM. This is a bit of hack. Later font setup code expects the font texture + to be in common, and they will eventually be moved into the upper 8-bits of the depth buffer." + (function texture-pool texture-page kheap int texture-page)) +;; (define-extern locate-sub function) +;; (define-extern warp-locate-sub function) +(define-extern texture-page-common-boot-allocate + "Allocator function for texture loaded at startup time. + For jak 3, this seems to always do default-allocate (permanently in vram?)" + (function texture-pool texture-page kheap int texture-page)) +(define-extern upload-vram-data "Add DMA to later upload a texture, by reference. Sets up the GIF for receiving the texture." + (function dma-buffer int pointer int int none)) +(define-extern upload-vram-pages "Add DMA to upload a texture page. Will only upload the portion of data that is not already present in VRAM. + This is the old Jak 1 background texture uploading system, which had this near/far concept + for different mip levels. By jak 2, the background system switched to masks and uses + the -pris variant of this function." + (function texture-pool texture-pool-segment texture-page tex-upload-mode bucket-id int)) +;; (define-extern upload-vram-pages-car function) +(define-extern update-vram-pages + "Likely a debug function for checking the logic of upload-vram-pages. Unused" + (function texture-pool texture-pool-segment texture-page tex-upload-mode int)) +(define-extern upload-vram-pages-pris + "Similar to upload-vram-pages, but skips the near/far mode and instead uses masks. + The foreground/background renderers will generate masks telling us which textures are used. + This lets us skip uploading entire textures, or mip levels that won't need. + (side note: this optimization is what causes many of the texturing issues in pcsx2, + where the ps2 and pcsx2 disagree on the mip level to use.)" + (function texture-pool texture-pool-segment texture-page bucket-id (pointer int32) int)) +(define-extern texture-page-level-allocate + "Allocation function for level textures." + (function texture-pool texture-page kheap int texture-page)) +(define-extern texture-page-size-check "Check the size of level textures." (function texture-pool level symbol int)) +(define-extern upload-textures "Set up DMA for all texture uploads for this frame." (function texture-pool none)) +(define-extern *txt-dma-list* dma-buffer) +(define-extern texture-relocate "Move a texture in VRAM." (function dma-buffer texture int gs-psm int dma-buffer)) +(define-extern relocate-later + "Unused in jak 2 and likely unsed in jak 3. Feature to postpone some texture copying until + a later frame. This is only used in cases when texture data must be memcpy'd in RAM, to patch up a hole left + by some data that is now permanently in VRAM, and no longer needed. + Note that Jak2/Jak3 don't have this problem since level textures are now never permanent" + (function symbol)) +(define-extern texture-page-login + "'Login' (initialize) a texture page with the pool. + This has a trick - it doesn't actually require you to pass a texture-page object - instead you pass an ID. + If the texture was loaded at all, it will already be known to the texture pool, and this function will do nothing. + However, if the texture is not present, it will be loaded through a call to `loado`, for use in development." + (function texture-id (function texture-pool texture-page kheap int texture-page) kheap texture-page-dir-entry)) +(define-extern lookup-texture-by-id "Get a texture by ID, loading it if needed (for debugging only)." (function texture-id texture)) +(define-extern lookup-texture-by-id-fast "Get a texture by ID. #f if it does not exist." (function texture-id texture)) +(define-extern lookup-texture-by-name "Get a loaded texture by name. Slow." (function string string (pointer texture-page) texture)) +(define-extern lookup-texture-id-by-name "Get the ID of a loaded texture by name. Slow." (function string string texture-id)) +(define-extern lookup-level-texture-by-name "Get a texture from a given level, by name." (function string level (pointer texture-page) texture)) +(define-extern lookup-tex-id-from-texture "Get the texture ID of a given texture. Slow." (function texture texture-id)) +(define-extern lookup-level-texture-id-by-name "Get the texture ID of a given texture in a level. Slow." (function string level int texture-id)) +(define-extern *shader-list* pair) ;; +(define-extern *edit-shader* texture-id) ;; +(define-extern link-texture-by-id + "Add this adgif shader to the linked list of shaders associated with the given texture ID. + Will allocate the link array if it's not already." + (function texture-id adgif-shader texture-page-dir-entry)) +;; (define-extern unlink-textures-by-level function) +(define-extern adgif-shader<-texture! (function adgif-shader texture adgif-shader)) +(define-extern adgif-shader-update! "Update k based on uv-dist" (function adgif-shader texture none)) +(define-extern adgif-shader<-texture-with-update! (function adgif-shader texture adgif-shader)) +(define-extern hack-texture "adjust some values of a texture, likely for debug." (function texture float)) +(define-extern adgif-shader-login "set up an adgif shader with the texture-pool, so it points to the right vram address. + Will remap textures through the level remap table. + If texture is missing, will load it on debug hardware." (function adgif-shader texture)) +(define-extern adgif-shader-login-no-remap + "Set up an adgif shader with the texture-pool, so it points to the right vram adress. + This does not do level tpage remapping, so the texture should be one that's not loaded in a combine level tpage." + (function adgif-shader texture)) +(define-extern adgif-shader-login-fast + "Set up an adgif shader with the texture-pool, so it points to the right vram address. + Will remap through the level table, so can be used to refer to textures inside 'squashed' + level tpages. + Will not load texture if it is missing." (function adgif-shader texture)) +(define-extern adgif-shader-login-no-remap-fast + "Set up an adgif shader with the texture-pool, so it points to the right vram address. + Will not remap through the level tpage table. + Will not load texture if it is missing." (function adgif-shader texture)) +(define-extern adgif-shader<-texture-simple! "Simple adgif-shader to texture, just sets vram address and format stuff. + Intended for use with fancy texture stuff that will later set the other regs." + (function adgif-shader texture adgif-shader)) +(define-extern set-dirty-mask! (function level int int int none)) +(define-extern texture-page-dir-inspect (function texture-page-dir symbol texture-page-dir)) +(define-extern *texture-pool* texture-pool) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mspace-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype joint (basic) + "A joint from an animated skeleton. This defines the graph of the skeleton, and also the bind pose + used for the mesh data. The joints are shared between all instances of the same model." + ((name basic :offset-assert 4) + (number int32 :offset-assert 8) + (parent joint :offset-assert 12) ;; guessed by decompiler + (bind-pose matrix :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype bone-cache (structure) + "Unused type. Existed in Jak 1, but wasn't used there." + ((bone-matrix uint32 :offset-assert 0) + (parent-matrix uint32 :offset-assert 4) + (dummy uint32 :offset-assert 8) + (frame uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype bone (structure) + "The location and scale of a bone in an animated skeleton. Each instance of a skeleton + has its own copy of the bones. This data is used for collision checking or other gameplay math, + but, despite the name, isn't directly used in rendering." + ((transform matrix :inline :offset-assert 0) + (position vector :inline :offset 48) + (scale vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype skeleton (inline-array-class) + "Skeleton is an array of bones for the entire character. The bones are stored in an inline array so they can be + easily dma'd to the scratchpad later." + ((bones bone :inline :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype cspace (structure) + "A cspace describes how to control a bone. It contains a reference to the joint, bone, and a callback function. + The callback function is used to take the joint transforms out of the joint animation, then update the bone." + ((parent cspace :offset-assert 0) + (joint joint :offset-assert 4) ;; guessed by decompiler + (joint-num int16 :offset-assert 8) + (geo drawable :offset-assert 12) ;; guessed by decompiler + (bone bone :offset-assert 16) + (param0 (function cspace transformq none) :offset-assert 20) ;; guessed by decompiler + (param1 basic :offset-assert 24) + (param2 basic :offset-assert 28) + ) + :method-count-assert 10 + :size-assert #x20 + :flag-assert #xa00000020 + ;; field param1 uses ~A with a signed load. field param2 uses ~A with a signed load. + (:methods + (new (symbol type drawable) _type_) ;; 0 + (reset-and-assign-geo! (_type_ drawable) _type_) ;; 9 + ) + ) + +(deftype cspace-array (inline-array-class) + ((data cspace :dynamic :inline :offset-assert 16 :score 1) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type region-prim-list structure) + +(deftype drawable (basic) + "Base class for `drawable` scene graph system. + This base class is really abused in many ways, and the meaning of the various methods differ depending + on the exact type. Not even the ID and bsphere here are always populated. + This is used for very high level organization of different rendering data types, and also very low-level + culling/rendering optimizations. It supports both array-of-references and inline-array containers with precise + control over memory layout for use with DMA." + ((id int16 :offset-assert 4) + (bsphere vector :inline :offset-assert 16) + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + (:methods + (login "Initialize the object after it is loaded." (_type_) _type_);; 9 + (draw "Draw the drawable, and typically its children. + This usually means adding stuff to a list to be drawn later, rather than expensive drawing here." (_type_) none) ;; 10 + (drawable-method-11 (_type_) none) ;; 11 ;; (fill-collide-list-from-box (_type_ int collide-list collide-query) int) + (drawable-method-12 (_type_) none) ;; 12 ;; (fill-collide-list-from-line-sphere (_type_ int collide-list collide-query) int) + (collect-stats "Collect triangle/perf statistics for rendering. + This is only called when viewing stats. + The vis-bits and culling registers are loaded during this time." (_type_) none) ;; 13 + (debug-draw "Debug-draw a drawable and its children. Typically uses the debug-draw functions." (_type_) none) ;; 14 + (unpack-vis (_type_ (pointer int8) (pointer int8)) (pointer int8)) ;; 15 + (collect-regions "Fill the region-prim-list with regions that intersect the sphere." (_type_ sphere int region-prim-list) none) ;; 16 + ) + ) + +(deftype drawable-error (drawable) + "A drawable which just represents an error. When drawn, it simply displays a sphere with an error message." + ((name string :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 17 + :size-assert #x24 + :flag-assert #x1100000024 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-group-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype drawable-group (drawable) + "Base class for an array of references to other drawables. + These are typically used for very high-level organization of drawable." + ((length int16 :offset 6) + (data drawable :dynamic :offset-assert 32) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + (:methods + (new (symbol type int) _type_) ;; 0 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-inline-array-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype drawable-inline-array (drawable) + ((length int16 :offset 6) + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; draw-node-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype draw-node (drawable) + "Node in a bounding volume heirarchy. This is a base class, and there are no children. + The child is a pointer to the start of inline array of drawables (note: not a drawable-inline-array, literally a bunch of plain drawables) + The size of this array is child-count. The type is either more draw-nodes, or, some other drawable like tfragment, depending on the flags. + Different renderers have different restrictions on the tree structure, like max child count, or if all children have the same depth. + Generally, tfrag/collide use a very rigid equal depth, max 8 children rule, but with shrub, anything goes. + This is a very awkward data structure to traverse, but it is designed for fast view frustum culling. + Note that there can be multiple ways to reach drawables in here in some cases - for example you can follow + this tree, or check one of the depth arrays found in tfrag. + " + ((child-count uint8 :offset 6) + (flags uint8 :offset 7) + (child drawable :offset 8) ;; guessed by decompiler + (distance float :offset 12) + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ;; field distance is a float printed as hex? + ) + +(deftype drawable-inline-array-node (drawable-inline-array) + "Top level container for a BVH made of draw-nodes." + ((data draw-node 1 :inline) + (pad uint32) + ) + :flag-assert #x1100000044 + ) + +(deftype draw-node-dma (structure) + "DMA buffer layout for draw node culling routine, which copies draw-nodes directly to scratchpad in bulk. + This would not work with the memory layout of shrub." + ((banka draw-node 32 :inline :offset-assert 0) ;; guessed by decompiler + (bankb draw-node 32 :inline :offset-assert 1024) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x800 + :flag-assert #x900000800 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-tree-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype drawable-tree (drawable-group) + () + :flag-assert #x1100000020 + ) + +(deftype drawable-tree-array (drawable-group) + () + :flag-assert #x1100000020 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-actor-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype drawable-actor (drawable) + "Wrapper around an entity-actor to put it in the drawable system. + Note that this is never used to actually draw actors - it is just used as a list of all entity-actors + for the entity/birth system." + ((actor entity-actor :offset 8) ;; guessed by decompiler + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ) + +(deftype drawable-tree-actor (drawable-tree) + "Adapter for putting the actors in the tree-array." + () + :flag-assert #x1100000020 + ) + +(deftype drawable-inline-array-actor (drawable-inline-array) + "Array of drawable-actors." + ((data drawable-actor 1 :inline) + (pad uint8 4)) + :flag-assert #x1100000044 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; region-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type region-prim-area structure) + +(deftype region (structure) + "A region is a closed volume that you can, enter, exit, and be inside. + This stores a unique, and script functions for a single region. + These are stored separately from the actual geometry to allow the geometry to be smaller + and fit in scratchpad/cache better." + ((id uint32 :offset-assert 0) + (on-enter pair :offset-assert 4) ;; guessed by decompiler + (on-inside pair :offset-assert 8) ;; guessed by decompiler + (on-exit pair :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + ;; field on-enter uses ~A with a signed load. field on-inside uses ~A with a signed load. field on-exit uses ~A with a signed load. + (:methods + (point-in-region-debug! "Debug check to see if point is in region. This is not efficient, since it has to find the parent geometry of this region." (_type_ vector) symbol) ;; 9 + ) + ) + +(deftype region-array (inline-array-class) + "Array of region." + ((data region :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype drawable-region-prim (drawable) + "Base class for a region + geometry. + Note that all child classes of this must be 32-bytes." + ((region region :offset 8) + ) + :method-count-assert 20 + :size-assert #x20 + :flag-assert #x1400000020 + (:methods + (debug-draw-region (_type_ int) none) ;; 17 + (track-region (_type_ region-prim-area) symbol) ;; 18 + (within-area? "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" (_type_ region-prim-area) symbol) ;; 19 + ) + ) + +(deftype drawable-tree-region-prim (drawable-tree) + "Top-level container for all regions of a level." + ((name symbol :offset 8) + (data2 drawable-inline-array :dynamic :offset 32 :score 1)) + :method-count-assert 19 + :size-assert #x20 + :flag-assert #x1300000020 + (:methods + (drawable-tree-region-prim-method-17 (_type_ vector) symbol) ;; 17 + (debug-print (_type_ vector object) none) ;; 18 + ) + ) + +(deftype drawable-inline-array-region-prim (drawable-inline-array) + "Inline array of drawable-region-prim. This actually stores child classes, but they are + exactly the same size as the parent, so it's okay." + ((data drawable-region-prim 1 :inline :offset-assert 32) + (pad uint8 4)) + :flag-assert #x1100000044 + ) + +(deftype drawable-region-sphere (drawable-region-prim) + "Region where the bsphere of the drawable is the volume." + () + :method-count-assert 20 + :size-assert #x20 + :flag-assert #x1400000020 + ) + +(deftype region-face-data (structure) + "Data to store a single planar face, as a normal and list of vertices." + ((normal vector :inline :offset-assert 0) + (normal-offset float :offset-assert 12 :overlay-at (-> normal w)) + (num-points uint32 :offset-assert 16) + (points vector :dynamic :inline :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype drawable-region-face (drawable-region-prim) + "A drawable-region which is just a face. Unclear if `on-inside` is used." + ((data region-face-data :offset 12) + ) + :method-count-assert 20 + :size-assert #x20 + :flag-assert #x1400000020 + ) + +(deftype region-face-array (inline-array-class) + "An array of faces that hopefully make a closed volume." + ((data drawable-region-face :dynamic :inline :offset 16) ;; guessed by decompiler + (pad uint32) + ) + :method-count-assert 14 + :size-assert #x14 + :flag-assert #xe00000014 + ) + +(deftype drawable-region-volume (drawable-region-prim) + "A drawable-region which is a bunch of faces that represent a closed volume." + ((faces region-face-array :offset 12) ;; guessed by decompiler + ) + :method-count-assert 20 + :size-assert #x20 + :flag-assert #x1400000020 + ) + +(deftype region-prim-list (structure) + "A list of drawable-region-prim. This is the return type of queries like `which regions contain this point?`" + ((num-items int32 :offset-assert 0) + (items drawable-region-prim 320 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x504 + :flag-assert #x900000504 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; advanced-options ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype gsf-vertex (structure) + "Vertex used by generic. GSF = generic stripped fragment?" + ((data uint32 8 :offset-assert 0) ;; guessed by decompiler + (byte uint8 32 :offset 0) ;; guessed by decompiler + (quad uint128 2 :offset 0) ;; guessed by decompiler + (vt qword :inline :offset 0) + (pos vector3s :inline :offset 0) + (tex vector2uh :inline :offset 12) + (nrm vector3s :inline :offset 16) + (nc qword :inline :offset 16) + (clr vector4ub :inline :offset 28) + (dtex vector2uh :inline :offset 16) + (dclr vector4ub :inline :offset 20) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype gsf-fx-vertex (structure) + "Color/texture data only. Possibly used to share with a gsf-vertex with + the same position/normal." + ((clr vector4ub :inline :offset-assert 0) + (tex vector2uh :inline :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype gsf-header (structure) + "Header for generic data." + ((num-strips uint8 :offset-assert 0) + (num-new-vtxs uint8 :offset-assert 1) + (num-dps uint16 :offset-assert 2) + (num-vtxs uint16 :offset-assert 4) + (strip-table uint8 10 :offset-assert 6) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gsf-ik (structure) + ((index uint8 :offset-assert 0) + (no-kick uint8 :offset-assert 1) + ) + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype gsf-info (structure) + ((ptr-iks uint32 :offset-assert 0) + (ptr-verts uint32 :offset-assert 4) + (ptr-fx uint32 :offset-assert 8) + (dummy2 uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype gsf-buffer (structure) + ((data uint8 8192 :offset-assert 0) ;; guessed by decompiler + (info gsf-info :inline :offset 0) + (header gsf-header :inline :offset 16) + (work-area uint8 :dynamic :offset 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2000 + :flag-assert #x900002000 + ) + +(deftype generic-frag (structure) + ((start-pos uint16 :offset-assert 0) + (end-pos uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype generic-strip (structure) + ((pos uint16 :offset-assert 0) + (len uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype generic-envmap-saves (structure) + ((index-mask vector4w :inline :offset-assert 0) + (verts uint128 12 :offset-assert 16) ;; guessed by decompiler + (kicks uint128 4 :offset-assert 208) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x110 + :flag-assert #x900000110 + ) + +(deftype generic-interp-job (structure) + ((job-type uint16 :offset-assert 0) + (num uint16 :offset-assert 2) + (first uint16 :offset-assert 4) + (pad uint16 :offset-assert 6) + (ptr-data uint32 :offset-assert 8) + (morph-z uint16 :offset-assert 12) + (morph-w uint16 :offset-assert 14) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype generic-saves (structure) + ((ptr-dma uint32 :offset-assert 0) + (ptr-vtxs uint32 :offset-assert 4) + (ptr-clrs uint32 :offset-assert 8) + (ptr-texs uint32 :offset-assert 12) + (ptr-env-clrs uint32 :offset-assert 16) + (ptr-env-texs uint32 :offset-assert 20) + (cur-outbuf uint32 :offset-assert 24) + (ptr-fx-buf uint32 :offset-assert 28) + (xor-outbufs uint32 :offset-assert 32) + (num-dps uint32 :offset-assert 36) + (qwc uint32 :offset-assert 40) + (gsf-buf gsf-buffer :offset-assert 44) + (ptr-shaders uint32 :offset-assert 48) + (ptr-env-shader uint32 :offset-assert 52) + (is-envmap uint16 :offset-assert 56) + (is-translucent uint16 :offset-assert 58) + (basep uint32 :offset-assert 60) + (ptr-interp-job generic-interp-job :offset-assert 64) + (gifbuf-adr uint32 :offset-assert 68) + (inbuf-adr uint32 :offset-assert 72) + (fade-val uint32 :offset-assert 76) + (time-of-day-color rgba :offset-assert 80) ;; guessed by decompiler + (to-vu0-waits uint32 :offset-assert 84) + (to-spr-waits uint32 :offset-assert 88) + (from-spr-waits uint32 :offset-assert 92) + (envmap generic-envmap-saves :inline :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x170 + :flag-assert #x900000170 + ) + +(deftype generic-gif-tag (structure) + ((data uint32 4 :offset-assert 0) ;; guessed by decompiler + (qword qword :inline :offset 0) + (fan-prim gif-tag-prim :offset 0) ;; guessed by decompiler + (str-prim gif-tag-prim :offset 4) ;; guessed by decompiler + (regs gif-tag-regs-32 :offset 8) ;; guessed by decompiler + (num-strips uint32 :offset 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype generic-envmap-consts (structure) + ((consts vector :inline :offset-assert 0) + (strgif generic-gif-tag :inline :offset-assert 16) + (colors vector4w :inline :offset-assert 32) + (shader adgif-shader :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype generic-consts (structure) + ((dma-header dma-packet :inline :offset-assert 0) + (vif-header uint32 4 :offset-assert 16) ;; guessed by decompiler + (dma-ref-vtxs dma-packet :inline :offset-assert 32) + (dma-cnt-call dma-packet :inline :offset-assert 48) + (matrix matrix :inline :offset-assert 64) + (base-strgif generic-gif-tag :inline :offset-assert 128) + (alpha-opaque gs-adcmd :inline :offset-assert 144) + (alpha-translucent gs-adcmd :inline :offset-assert 160) + (ztest-normal gs-adcmd :inline :offset-assert 176) + (ztest-opaque gs-adcmd :inline :offset-assert 192) + (adcmd-offsets uint8 16 :offset-assert 208) ;; guessed by decompiler + ;;(adcmds UNKNOWN 4 :offset-assert 144) + (stcycle-tag uint32 :offset-assert 224) + (unpack-vtx-tag uint32 :offset-assert 228) + (unpack-clr-tag uint32 :offset-assert 232) + (unpack-tex-tag uint32 :offset-assert 236) + (mscal-tag uint32 :offset-assert 240) + (flush-tag uint32 :offset-assert 244) + (reset-cycle-tag uint32 :offset-assert 248) + (dummy0 uint32 :offset-assert 252) + (dma-tag-cnt uint64 :offset-assert 256) + (envmap generic-envmap-consts :inline :offset-assert 272) + (light-consts vector :inline :offset-assert 400) + (texture-offset uint16 8 :offset-assert 416) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1b0 + :flag-assert #x9000001b0 + ) + +(deftype generic-storage (structure) + ((data uint128 16 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x100 + :flag-assert #x900000100 + ) + +#| +(deftype gsf-vertex-array (UNKNOWN) + ((vtx gsf-vertex :dynamic :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +#| +(deftype gsf-fx-vertex-array (UNKNOWN) + ((data gsf-fx-vertex :dynamic :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +(deftype gsf-vertex-array (structure) + ((vtx gsf-vertex :dynamic :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x0 + :flag-assert #x900000000 + ) + +(deftype gsf-fx-vertex-array (structure) + ((data gsf-fx-vertex :dynamic :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x0 + :flag-assert #x900000000 + ) + +(define-extern *gsf-buffer* gsf-buffer) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cloth-art-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype cloth-pt (structure) + ((pt vector :inline :offset-assert 0) + (u float :offset-assert 16) + (v float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype anchor-transform (structure) + ((offset vector :inline :offset-assert 0) + (joint-name string :offset-assert 16) ;; guessed by decompiler + (joint int16 :offset-assert 20) + (constraint-index int16 :offset-assert 22) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype sphere-transform (structure) + ((offset vector :inline :offset-assert 0) + (joint-name string :offset-assert 16) ;; guessed by decompiler + (radius float :offset-assert 20) + (joint int16 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1a + :flag-assert #x90000001a + ) + +(deftype disc-transform (structure) + ((offset vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (joint-name basic :offset-assert 32) + (radius float :offset-assert 36) + (joint int16 :offset-assert 40) + (start-particle-index int16 :offset-assert 42) + (end-particle-index int16 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x2e + :flag-assert #x90000002e + ) + +(deftype anchor-transform-array (inline-array-class) + ((data anchor-transform :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype sphere-transform-array (inline-array-class) + ((data sphere-transform :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype disc-transform-array (inline-array-class) + ((data disc-transform :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype cloth-thickness-array (inline-array-class) + ((data uint8 :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +;; +++cloth-art-h:cloth-flag +(defenum cloth-flag + :type uint64 + :bitfield #t + ) +;; ---cloth-art-h:cloth-flag + +(deftype cloth-params (structure) + ((mesh int16 :offset-assert 0) + (gravity-constant meters :offset-assert 4) ;; meters + (wind-constant float :offset-assert 8) + (cloth-width uint16 :offset-assert 12) + (num-sphere-constraints uint16 :offset-assert 14) + (num-disc-constraints uint16 :offset-assert 16) + (num-anchor-points uint16 :offset-assert 18) + (flags cloth-flag :offset-assert 24) ;; cloth-flag + (tex-name string :offset-assert 32) ;; guessed by decompiler + (tex-name2 string :offset-assert 36) ;; guessed by decompiler + (tex-name3 string :offset-assert 40) ;; guessed by decompiler + (alt-tex-name string :offset-assert 44) ;; guessed by decompiler + (alt-tex-name2 string :offset-assert 48) ;; guessed by decompiler + (alt-tex-name3 string :offset-assert 52) ;; guessed by decompiler + (cloth-thickness float :offset-assert 56) + (initial-xform int16 :offset-assert 60) + (drag float :offset-assert 64) + (ball-collision-radius float :offset-assert 68) ;; meters + (num-iterations int8 :offset-assert 72) + (timestep-frequency int8 :offset-assert 73) + (secret-disable uint64 :offset-assert 80) ;; game-secrets + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype cloth-base (basic) + () + :method-count-assert 11 + :size-assert #x4 + :flag-assert #xb00000004 + (:methods + (update! (_type_) int) ;; 9 + (setup-from-params! (_type_ cloth-params handle) int) ;; 10 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; art-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype joint-anim (basic) + "Base class for all joint animations. These are animations that store joint transforms." + ((name string :offset-assert 4) ;; guessed by decompiler + (number int16 :offset-assert 8) + (length int16 :offset-assert 10) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype joint-anim-matrix (joint-anim) + "Joint animation which stores matrices directly. Not used." + ((data matrix :inline :dynamic :offset 16)) + :flag-assert #x900000010 + ) + +(deftype joint-anim-transformq (joint-anim) + "Joint animation which stores transformq's directly. Not used." + ((data transformq :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype joint-anim-drawable (joint-anim) + "Mysterious unused joint animation type." + ((data drawable :dynamic :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype joint-anim-frame (structure) + "Frame containing all joint transforms. Note that there are two special frames: align and prejoint. + The 'align' frame is used for the complicated animation alignment system, which allows the animation to move + a character, among other things. The prejoint is just the root of the skeleton. + The remaining transformq's are the joint transforms you'd expect." + ((matrices matrix 2 :inline :offset-assert 0) ;; guessed by decompiler + (data transformq :dynamic :inline :offset-assert 128) ;; guessed by decompiler + ) + (:methods + (new (symbol type int) _type_) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype joint-anim-compressed-hdr (structure) + "Header for the compressed joint animation format." + ((control-bits uint32 14 :offset-assert 0) ;; guessed by decompiler + (num-joints uint32 :offset-assert 56) + (matrix-bits uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype joint-anim-compressed-fixed (structure) + ((hdr joint-anim-compressed-hdr :inline :offset-assert 0) + (offset-64 uint32 :offset-assert 64) + (offset-32 uint32 :offset-assert 68) + (offset-16 uint32 :offset-assert 72) + (reserved uint32 :offset-assert 76) + (data vector 133 :inline :offset-assert 80) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8a0 + :flag-assert #x9000008a0 + ) + +(deftype joint-anim-compressed-frame (structure) + ((offset-64 uint32 :offset-assert 0) + (offset-32 uint32 :offset-assert 4) + (offset-16 uint32 :offset-assert 8) + (reserved uint32 :offset-assert 12) + (data vector 133 :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x860 + :flag-assert #x900000860 + ) + +(deftype joint-anim-compressed-control (structure) + ((num-frames uint16 :offset-assert 0) + (flags uint16 :offset-assert 2) + (fixed-qwc uint32 :offset-assert 4) + (frame-qwc uint32 :offset-assert 8) + (fixed joint-anim-compressed-fixed :offset-assert 12) + (data joint-anim-compressed-frame :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype art (basic) + "Base class for anything considered `art`. This is typically foreground model data. + This can be either an art container containing more arts, or an actual art thing (art-element)." + ((name string :offset 8) ;; guessed by decompiler + (length int32 :offset 12) + (extra res-lump :offset 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x14 + :flag-assert #xe00000014 + (:methods + (login (_type_) _type_) ;; 9 + (art-method-10 (_type_) _type_) ;; 10 + (get-art-by-name-method "Look inside this art for an art with the given name and type. Return #f if not found" (_type_ string type) basic) ;; 11 + (get-art-idx-by-name-method "Look inside this art for an art with the given name and type and return the index of the art. Return #f if not found." (_type_ string type) int) ;; 12 + (contains-art-for-other-group? "Some art groups have placeholder #f's for some art that will be loaded separately as needed. + Does this art group contain art that needs to be added to another group?" (_type_) symbol) ;; 13 + ) + ) + +(deftype art-element (art) + "Base class Art which is not a container of more art." + ((master-art-group-name string :offset-assert 20) ;; guessed by decompiler + (master-art-group-index int32 :offset-assert 24) + (pad uint8 20) + ) + :method-count-assert 14 + :size-assert #x30 + :flag-assert #xe00000030 + ) + +(deftype art-mesh-anim (art-element) + "An unused mesh animation." + ((data basic :dynamic)) + :flag-assert #xe00000030 + ) + +(declare-type merc-eye-anim-block structure) +(deftype art-joint-anim (art-element) + "Art for a joint animation. Also contains the eye animation." + ((eye-anim merc-eye-anim-block :offset 28) + (blend-shape-anim (pointer int8) :offset 32) ;; guessed by decompiler + (frames joint-anim-compressed-control :offset 36) + (speed float :offset 48) + (artist-base float :offset-assert 52) + (artist-step float :offset-assert 56) + ) + :method-count-assert 14 + :size-assert #x3c + :flag-assert #xe0000003c + ;; field blend-shape-anim uses ~A with a signed load. + ) + +(deftype art-group (art) + "Art which is a list of more art. The -ag files are an art group with all the art needed for a + actor, like the mesh, animations, shadow mesh, skeleton, etc." + ((info file-info :offset 4) + (data art-element :score -1 :dynamic :offset 32) ;; might just be art? + ) + :flag-assert #x1000000020 + (:methods + (relocate (_type_ kheap (pointer uint8)) none :replace) ;; 7 + (link-art-to-master (_type_) art-group) + (unlink-art-to-master (_type_) int) + ) + ) + +(deftype art-mesh-geo (art-element) + "Unused art format for a mesh. This might have been for the renderer that came before merc." + ((data basic :dynamic :offset-assert 48) + ) + :flag-assert #xe00000030 + ) + +(deftype art-joint-geo (art-element) + "Collection of joints for an actor." + ((data joint :dynamic :offset-assert 48) + ) + :flag-assert #xe00000030 + ) + +(deftype art-cloth-geo (art-element) + ((anchor-transforms anchor-transform-array :offset-assert 48) ;; guessed by decompiler + (sphere-transforms sphere-transform-array :offset-assert 52) ;; guessed by decompiler + (disc-transforms disc-transform-array :offset-assert 56) ;; guessed by decompiler + (cloth-thickness cloth-thickness-array :offset-assert 60) ;; guessed by decompiler + (thickness-scalar float :offset-assert 64) + (num-points int32 :offset 12) + (mesh cloth-pt :dynamic :inline :offset 80) ;; todo + ) + :method-count-assert 14 + :size-assert #x50 + :flag-assert #xe00000050 + ) + +(deftype skeleton-group (art-group) + "Unlike other art types, the skeleton-groups are defined in GOAL code. + This stores settings like the name of the art-group, shadow/level-of-detail settings, etc." + ((art-group-name string :offset-assert 32) ;; guessed by decompiler + (jgeo int16 :offset-assert 36) + (janim int16 :offset-assert 38) + (bounds vector :inline :offset-assert 48) + (radius meters :offset-assert 60 :overlay-at (-> bounds w)) + (mgeo int16 6 :offset-assert 64) ;; guessed by decompiler + (max-lod int32 :offset-assert 76) + (lod-dist float 6 :offset-assert 80) ;; guessed by decompiler + (longest-edge meters :offset-assert 104) + (texture-level int8 :offset-assert 108) + (version int8 :offset-assert 109) + (shadow int16 :offset-assert 110) + (shadow-joint-index int8 :offset-assert 112) + (origin-joint-index int8 :offset-assert 113) + (sort int8 :offset-assert 114) + (light-index uint8 :offset-assert 115) + (clothing (array cloth-params) :offset-assert 116) ;; guessed by decompiler + (global-effects uint8 :offset-assert 120) + ) + :method-count-assert 17 + :size-assert #x79 + :flag-assert #x1100000079 + (:methods + (add-to-loading-level (_type_) skeleton-group) ;; 16 + ) + ) + +(declare-type merc-ctrl structure) +(deftype lod-group (structure) + "A single level of detail mesh." + ((geo merc-ctrl :offset-assert 0) ;; guessed by decompiler + (dist meters :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype lod-set (structure) + "All the different level-of-detail meshes for an actor." + ((lod lod-group 6 :inline :offset-assert 0) ;; guessed by decompiler + (max-lod int8 :offset-assert 48) + ) + :allow-misaligned + :method-count-assert 10 + :size-assert #x31 + :flag-assert #xa00000031 + (:methods + (setup-lods! (_type_ skeleton-group art-group entity) _type_) ;; 9 + ) + ) + +(defenum draw-control-status + :type uint32 + :bitfield #t + (close-to-screen 0) + (no-draw 1) + (no-draw-temp 2) + (on-screen 3) + (uninited 4) + (no-draw-bounds 5) + (no-closest-distance 6) + (math-skel 7) + (force-vu1 8) + (no-draw-bounds2 9) + (force-fade 10) + (warp-cross-fade 11) + (lod-set 12) + (disable-fog 13) + (hud 14) + (no-bounds-check 15) + (suppress-vport-0 16) + (suppress-vport-1 17) + (disable-shadow 18) + ) + +(defenum draw-control-data-format + :type uint8 + :bitfield #f + (pris 0) + (merc 1) + ) + +(defenum draw-control-global-effect + :type uint8 + :bitfield #t + (bit-0 0) + (bit-1 1) + (title-light 2) + (rim-lights 3) + (front-rear-lights 4) + (shield-lights 5) + (disable-envmap 6) + (no-textures 7) + ) + +(declare-type ripple-control basic) +(declare-type shadow-geo structure) +(declare-type shadow-control structure) +(declare-type cloth-base basic) +(declare-type verlet-particle-system cloth-base) +(declare-type cloth-system verlet-particle-system) +(declare-type joint-control basic) + +(deftype draw-control (basic) + "The draw-control is a collection of all the stuff that the foreground rendering system needs to draw something. + Each process-drawable has a draw-control." + ((process process-drawable :offset-assert 4) ;; guessed by decompiler + (status draw-control-status :offset-assert 8) + (data-format draw-control-data-format :offset-assert 12) ;; draw-control-data-format + (global-effect draw-control-global-effect :offset-assert 13) + (art-group art-group :offset-assert 16) ;; guessed by decompiler + (jgeo art-joint-geo :offset-assert 20) ;; guessed by decompiler + (mgeo merc-ctrl :offset-assert 24) ;; guessed by decompiler + (dma-add-func (function process-drawable draw-control symbol object none) :offset-assert 28) ;; guessed by decompiler + (skeleton skeleton :offset-assert 32) ;; guessed by decompiler + (lod-set lod-set :inline :offset-assert 36) + ;;(lod UNKNOWN 6 :offset-assert 36) + (max-lod int8 :offset 84) + (force-lod int8 :offset-assert 85) + (cur-lod int8 :offset-assert 86) + (cur-lods int8 2 :offset-assert 87) + (effect-masks uint64 2 :offset-assert 96) + (prev-seg-mask uint64 :offset-assert 112) + (want-lod int8 :offset-assert 120) + (ripple ripple-control :offset-assert 124) ;; guessed by decompiler + (longest-edge meters :offset-assert 128) + (longest-edge? uint32 :offset 128) + (light-index uint8 :offset-assert 132) + (shadow-mask uint8 :offset-assert 133) + (level-index uint8 :offset-assert 134) + (death-draw-overlap uint8 :offset-assert 135) + (death-timer uint8 :offset-assert 136) + (death-timer-org uint8 :offset-assert 137) + (death-vertex-skip uint16 :offset-assert 138) + (death-effect uint32 :offset-assert 140) + (shadow shadow-geo :offset-assert 144) ;; guessed by decompiler + (shadow-ctrl shadow-control :offset-assert 148) ;; guessed by decompiler + (distance meters :offset-assert 152) + (origin vector :inline :offset-assert 160) + (bounds vector :inline :offset-assert 176) + (radius meters :offset 188) + (color-mult rgbaf :inline :offset-assert 192) + (color-emissive rgbaf :inline :offset-assert 208) + (effect-mask uint64 :offset-assert 224) + (seg-mask uint64 :offset-assert 232) + (origin-joint-index uint8 :offset-assert 240) + (shadow-joint-index uint8 :offset-assert 241) + (force-fade uint8 :offset-assert 242) + (default-texture-page uint8 :offset-assert 243) + (shadow-values uint32 :offset-assert 244) + (cloth-instances (array cloth-system) :offset-assert 248) ;; guessed by decompiler + (lights vu-lights :offset-assert 252) + (envmap-override float :offset-assert 256) + ) + :method-count-assert 16 + :size-assert #x104 + :flag-assert #x1000000104 + ;; field draw-control-global-effect is likely a value type. + (:methods + (new (symbol type process symbol) _type_) ;; 0 + (get-skeleton-origin (_type_) vector) ;; 9 + (lod-set! (_type_ int) none) ;; 10 + (lods-assign! (_type_ lod-set) none) ;; 11 + (setup-masks (_type_ int int) none) ;; 12 + (setup-cspace-and-add (_type_ art-joint-geo symbol) cspace-array) ;; 13 + (draw-control-method-14 (_type_ cspace-array joint-control) none) ;; 14 + (do-joint-math (_type_ cspace-array joint-control) none) ;; 15 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-vu1-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype pris-mtx (structure) + "Matrix for merc rendering. Named after the earlier 'pris' renderer. + Contains a transformation matrix for vertices, one for normals, and a scale. + This matrix is likely not used by generic VU1, but is used by the merc -> generic converter." + ((data float 32 :offset-assert 0) ;; guessed by decompiler + (vector vector 8 :offset 0) ;; guessed by decompiler + (t-mtx matrix :inline :offset 0) + (n-mtx matrix3 :inline :offset 64) + (scale vector :inline :offset 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype generic-pris-mtx-save (structure) + ((loc-mtx pris-mtx :inline :offset-assert 0) + (par-mtx pris-mtx :inline :offset-assert 128) + (dif-mtx pris-mtx :inline :offset-assert 256) + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) + +(deftype generic-constants (structure) + "Constant data sent to VU1 for generic rendering." + ((fog vector :inline :offset-assert 0) + (adgif gs-gif-tag :inline :offset-assert 16) ;; gs-gif-tag :inline + (hvdf-offset vector :inline :offset-assert 32) + (hmge-scale vector :inline :offset-assert 48) + (invh-scale vector :inline :offset-assert 64) + (guard vector :inline :offset-assert 80) + (flush qword :inline :offset-assert 96) + (stores qword :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype generic-shrub-constants (structure) + ((shrub-giftag generic-gif-tag :inline :offset-assert 0) + (shrub-adnop qword :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype gcf-shader (structure) + ((adgif uint128 5 :offset-assert 0) ;; guessed by decompiler + (shader adgif-shader :inline :offset 0) + (pos uint32 :offset 12) + (num uint32 :offset 28) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype gcf-control (structure) + ((matrix matrix :inline :offset-assert 0) + (giftag generic-gif-tag :inline :offset-assert 64) + (adnops gs-adcmd 2 :inline :offset-assert 80) ;; guessed by decompiler + (num-strips uint32 :offset 76) + (num-dps uint32 :offset 92) + (kick-offset uint32 :offset 108) + (shader gcf-shader :inline :dynamic :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype gcf-vertex (structure) + ((tex vector4w :inline :offset-assert 0) + (clr gs-packed-rgba :inline :offset-assert 16) + (pos gs-packed-xyzw :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; merc-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype ripple-merc-query (inline-array-class) + "Information about which merc vertices to apply the 'ripple' effect to." + ((start-vertex int32 :offset-assert 16) + (vertex-skip int32 :offset-assert 20) + (vertex-count int32 :offset-assert 24) + (current-loc int32 :offset-assert 28) + (data vector :inline :dynamic :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + ) + +(deftype merc-byte-header (structure) + "Header for a single [[merc-fragment]] uploaded to the VU." + ((srcdest-off uint8 :offset-assert 0) + (rgba-off uint8 :offset-assert 1) + (lump-off uint8 :offset-assert 2) + (fp-off uint8 :offset-assert 3) + (mat1-cnt uint8 :offset-assert 4) + (mat2-cnt uint8 :offset-assert 5) + (mat3-cnt uint8 :offset-assert 6) + (samecopy-cnt uint8 :offset-assert 7) + (crosscopy-cnt uint8 :offset-assert 8) + (strip-len uint8 :offset-assert 9) + (mm-quadword-fp-off uint8 :offset-assert 10) + (mm-quadword-size uint8 :offset-assert 11) + (perc-off uint8 :offset-assert 12) + (mat-slot uint8 10 :offset-assert 13) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x17 + :flag-assert #x900000017 + ) + +(deftype merc-fragment (structure) + "A single merc fragment that fits into VU memory." + ((header merc-byte-header :inline :offset-assert 0) + (rest uint8 1 :offset-assert 23) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (login-adgifs (_type_) merc-fragment) ;; 9 + ) + ) + +(deftype merc-vtx (structure) + "A packed merc vertex." + ((mat-0 uint8 :offset-assert 0) + (mat-1 uint8 :offset-assert 1) + (nrm-x uint8 :offset-assert 2) + (pos-x uint8 :offset-assert 3) + (dst-0 uint8 :offset-assert 4) + (dst-1 uint8 :offset-assert 5) + (nrm-y uint8 :offset-assert 6) + (pos-y uint8 :offset-assert 7) + (tex-s uint8 :offset-assert 8) + (tex-t uint8 :offset-assert 9) + (nrm-z uint8 :offset-assert 10) + (pos-z uint8 :offset-assert 11) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype merc-fp-header (structure) + "Merc header for a [[merc-fragment]]'s floating point data." + ((x-add float :offset-assert 0) + (y-add float :offset-assert 4) + (z-add float :offset-assert 8) + (shader-cnt uint8 :offset-assert 12) + (kick-info-offset uint8 :offset-assert 13) + (kick-info-step uint8 :offset-assert 14) + (hword-cnt uint8 :offset-assert 15) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype merc-mat-dest (structure) + "Metadata for a merc matrix upload." + ((matrix-number uint8 :offset-assert 0) + (matrix-dest uint8 :offset-assert 1) + ) + :pack-me + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype merc-fragment-control (structure) + "Data about a [[merc-fragment]] needed for merc DMA generation." + ((unsigned-four-count uint8 :offset-assert 0) + (lump-four-count uint8 :offset-assert 1) + (fp-qwc uint8 :offset-assert 2) + (mat-xfer-count uint8 :offset-assert 3) + (mat-dest-data merc-mat-dest :dynamic :inline :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype merc-blend-ctrl (structure) + "Information about the vertices of a model modified by BLERC." + ((blend-vtx-count uint8 :offset-assert 0) + (nonzero-index-count uint8 :offset-assert 1) + (bt-index uint8 :dynamic :offset-assert 2) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype mei-envmap-tint (structure) + "Data for the extra 'envmap tint' effect." + ((fade0 float :offset-assert 0) + (fade1 float :offset-assert 4) + (tint rgba :offset-assert 8) ;; guessed by decompiler + (dummy int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype mei-texture-scroll (structure) + "Data for the extra 'texscroll' effect." + ((max-dist float :offset-assert 0) + (st-int-scale uint8 :offset-assert 4) + (time-factor uint8 :offset-assert 5) + (scroll-dir uint8 :offset-assert 6) + (cached-time uint8 :offset-assert 7) + (time-delta uint8 :offset-assert 8) + (dummy uint8 7 :offset-assert 9) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype mei-ripple (structure) + "Data for the extra 'ripple' effect." + ((x-base float :offset-assert 0) + (z-base float :offset-assert 4) + (grid-size float :offset-assert 8) + (angle float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype merc-extra-info (structure) + "Info for merc extra effects." + ((envmap-tint-offset uint8 :offset-assert 0) + (shader-offset uint8 :offset-assert 1) + (texture-scroll-offset uint8 :offset-assert 2) + (ripple-offset uint8 :offset-assert 3) + (dummy uint8 12 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; moved from end of merc-h definitions +(deftype merc-blend-data (structure) ;; was unknown! + "Packed BLERC data." + ((int8-data int8 :dynamic :offset-assert 0) ;; guessed by decompiler + ) + ) + +(deftype merc-effect (structure) + "A collection of [[merc-fragment]]s with data for any extra effects." + ((frag-geo merc-fragment :offset-assert 0) + (frag-ctrl merc-fragment-control :offset-assert 4) + (blend-data merc-blend-data :offset-assert 8) + (blend-ctrl merc-blend-ctrl :offset-assert 12) + (merc-effect-version uint8 :offset-assert 16) + (effect-bits uint8 :offset-assert 17) ;; effect-bits + (frag-count uint16 :offset-assert 18) + (blend-frag-count uint16 :offset-assert 20) + (tri-count uint16 :offset-assert 22) + (dvert-count uint16 :offset-assert 24) + (texture-index uint8 :offset-assert 26) + (effect-usage uint8 :offset-assert 27) + (extra-info merc-extra-info :offset-assert 28) + ) + :method-count-assert 10 + :size-assert #x20 + :flag-assert #xa00000020 + (:methods + (merc-effect-method-9 () none) ;; 9 ;; (login-adgifs (_type_) none) + ) + ) + +(deftype merc-eye-ctrl (structure) + "Eye info for both eyes of a merc model." + ((eye-slot int8 :offset-assert 0) + (shader-offset int8 :offset-assert 1) + (shader-count int8 :offset-assert 2) + (eye-ctrl-index int8 :offset-assert 3) + (shader adgif-shader 6 :inline :offset-assert 16) ;; guessed by decompiler + (left-iris-shader adgif-shader :inline :offset 16) + (left-pupil-shader adgif-shader :inline :offset 96) + (left-lid-shader adgif-shader :inline :offset 176) + (right-iris-shader adgif-shader :inline :offset 256) + (right-pupil-shader adgif-shader :inline :offset 336) + (right-lid-shader adgif-shader :inline :offset 416) + ) + :method-count-assert 9 + :size-assert #x1f0 + :flag-assert #x9000001f0 + ) + +(deftype merc-eye-anim-frame (structure) + "A single frame of a merc eye animation." + ((pupil-trans-x int8 :offset-assert 0) + (pupil-trans-y int8 :offset-assert 1) + (blink int8 :offset-assert 2) + (iris-scale int8 :offset 4) + (pupil-scale int8 :offset 5) + (lid-scale int8 :offset 6) + (dword uint64 :offset 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype merc-eye-anim-block (structure) + "A list of eye animation frames." + ((max-frame int16 :offset-assert 0) + (data merc-eye-anim-frame :inline :dynamic :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype texture-usage-group (structure) + ((data texture-masks 7 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x150 + :flag-assert #x900000150 + ) + +(deftype merc-ctrl-header (structure) + "The header for a [[merc-ctrl]], + containing metadata about the model used for drawing." + ((xyz-scale float :offset-assert 0) + (st-magic uint32 :offset-assert 4) + (st-out-a uint32 :offset-assert 8) + (st-out-b uint32 :offset-assert 12) + (st-vif-add uint32 :offset-assert 16) + (st-int-off uint16 :offset-assert 20) + (st-int-scale uint16 :offset-assert 22) + (effect-count uint32 :offset-assert 24) + (blend-target-count uint32 :offset-assert 28) + (fragment-count uint16 :offset-assert 32) + (tri-count uint16 :offset-assert 34) + (matrix-count uint8 :offset-assert 36) + (shader-count uint8 :offset-assert 37) + (transform-vertex-count uint16 :offset-assert 38) + (dvert-count uint16 :offset-assert 40) + (one-mat-count uint16 :offset-assert 42) + (two-mat-count uint16 :offset-assert 44) + (two-mat-reuse-count uint16 :offset-assert 46) + (three-mat-count uint16 :offset-assert 48) + (three-mat-reuse-count uint16 :offset-assert 50) + (shader-upload-count uint8 :offset-assert 52) + (matrix-upload-count uint8 :offset-assert 53) + (same-copy-count uint16 :offset-assert 54) + (cross-copy-count uint16 :offset-assert 56) + (num-verts uint16 :offset-assert 58) + (longest-edge float :offset-assert 60) + (eye-ctrl merc-eye-ctrl :offset-assert 64) + (pad uint32 3 :offset-assert 68) ;; guessed by decompiler + (masks-padding texture-masks :inline :offset-assert 80) + (texture-usage-group texture-usage-group :offset 80) + (dummy-bytes uint8 :dynamic :offset 32) ;; guessed by decompiler + (envmap-tint uint32 :offset 32) + (query basic :offset 36) + (needs-clip uint8 :offset 40) + (use-isometric uint8 :offset 41) + (use-attached-shader uint8 :offset 42) + (display-triangles uint8 :offset 43) + (death-vertex-skip uint16 :offset 44) + (death-start-vertex uint16 :offset 46) + (death-effect uint32 :offset 48) + (use-translucent uint8 :offset 52) + (display-this-fragment uint8 :offset 53) + (use-warp uint8 :offset 54) + (ignore-alpha uint8 :offset 55) + (force-fade uint8 :offset 56) + (disable-fog uint8 :offset 57) + (disable-envmap uint8 :offset 58) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ;; field xyz-scale is a float printed as hex? + ) + +(deftype merc-ctrl (art-element) + "The merc data for a single model as it's stored in an art group. + Consists of a header and a list of [[merc-effect]]s." + ((num-joints int32 :offset 12) + (seg-table (array uint64) :offset 28) ;; guessed by decompiler + (header merc-ctrl-header :inline :offset-assert 48) + (effect merc-effect :dynamic :inline :offset-assert 176) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #xb0 + :flag-assert #xe000000b0 + ) + +(deftype merc-vu1-low-mem (structure) + ((tri-strip-gif gs-gif-tag :inline :offset-assert 0) ;; gs-gif-tag :inline + (ad-gif gs-gif-tag :inline :offset-assert 16) ;; gs-gif-tag :inline + (hvdf-offset vector :inline :offset-assert 32) + (perspective uint128 4 :offset-assert 48) ;; guessed by decompiler + (fog vector :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype emerc-vu1-low-mem (structure) + ((tri-strip-gif gs-gif-tag :inline :offset-assert 0) ;; gs-gif-tag :inline + (ad-gif gs-gif-tag :inline :offset-assert 16) ;; gs-gif-tag :inline + (hvdf-offset vector :inline :offset-assert 32) + (perspective vector 4 :inline :offset-assert 48) ;; guessed by decompiler + (fog vector :inline :offset-assert 112) + (unperspect vector :inline :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) + +(deftype texture-login-data (structure) + ((default-texture-index int32 :offset-assert 0) + (current-texture-index int32 :offset-assert 4) + (texture-usage-group texture-usage-group :offset-assert 8) + (merc-ctrl-header merc-ctrl-header :offset-assert 12) + (name basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype ripple-wave (structure) + ((scale float :offset-assert 0) + (offs float :offset-assert 4) + (xdiv int16 :offset-assert 8) + (zdiv int16 :offset-assert 10) + (speed float :offset-assert 12) + (xmul float :offset-assert 16) + (zmul float :offset-assert 20) + (delta float :offset-assert 24) + ) + :pack-me + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +(deftype ripple-wave-set (basic) + ((count int32 :offset-assert 4) + (converted basic :offset-assert 8) + (normal-scale float :offset-assert 12) + (wave ripple-wave 4 :inline :offset-assert 16) ;; guessed by decompiler + (frame-save uint64 :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) + +(deftype ripple-control (basic) + ((global-scale float :offset-assert 4) + (last-frame-scale float :offset-assert 8) + (close-fade-dist float :offset-assert 12) + (far-fade-dist float :offset-assert 16) + (faded-scale float :offset-assert 20) + (individual-normal-scale float :offset-assert 24) + (waveform ripple-wave-set :offset-assert 28) ;; guessed by decompiler + (send-query symbol :offset-assert 32) ;; guessed by decompiler + (query ripple-merc-query :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) + +(deftype death-info (basic) + ((vertex-skip uint16 :offset-assert 4) + (timer uint8 :offset-assert 6) + (overlap uint8 :offset-assert 7) + (effect uint32 :offset-assert 8) + (sound string :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern merc-fragment-fp-data + "Get the floating point data of a [[merc-fragment]]." + (function merc-fragment merc-fp-header)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-merc-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype merc-matrix (structure) + ((quad uint128 8 :offset-assert 0) ;; guessed by decompiler + (vector vector 8 :inline :offset 0 :score 1) ;; guessed by decompiler + (tag uint64 :offset 0) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype generic-merc-tag (dma-packet) + ((next-ptr uint32 :offset 12) + (size uint32 :offset 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype generic-merc-ctrl (structure) + ((tag generic-merc-tag :inline :offset-assert 0) + (lights vu-lights :inline :offset-assert 16) + (header merc-ctrl-header :inline :offset-assert 128) + (effect merc-effect :inline :offset-assert 256) + ) + :method-count-assert 9 + :size-assert #x120 + :flag-assert #x900000120 + ) + +(deftype generic-merc-ctrl-with-sfx (generic-merc-ctrl) + ((sfx-data uint128 11 :offset-assert 288) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1d0 + :flag-assert #x9000001d0 + ) + +(deftype generic-merc-input (structure) + ((geo-tag generic-merc-tag :inline :offset-assert 0) + (geo-block uint8 1296 :offset-assert 16) ;; guessed by decompiler + (byte-header merc-byte-header :inline :offset 16) + (matrix merc-matrix 9 :inline :offset-assert 1312) ;; guessed by decompiler + (control generic-merc-ctrl-with-sfx :inline :offset-assert 2464) + (end-tag generic-merc-tag :inline :offset-assert 2928) + (shader adgif-shader :inline :offset-assert 2944) + ) + :method-count-assert 9 + :size-assert #xbd0 + :flag-assert #x900000bd0 + ) + +(deftype generic-merc-output (structure) + ((info gsf-info :inline :offset-assert 0) + (header gsf-header :inline :offset-assert 16) + (index-kick-table uint16 80 :offset-assert 32) ;; guessed by decompiler + (index-table uint8 160 :offset 32) ;; guessed by decompiler + (inverse-table uint8 256 :offset-assert 192) ;; guessed by decompiler + (vertex-table gsf-vertex 72 :inline :offset-assert 448) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xac0 + :flag-assert #x900000ac0 + ) + +(deftype generic-merc-dcache (structure) + ((output-a generic-merc-output :inline :offset-assert 0) + (output-b generic-merc-output :inline :offset-assert 2752) + (inv-table-1 uint8 544 :offset-assert 5504) ;; guessed by decompiler + (inv-table-7 uint8 544 :offset-assert 6048) ;; guessed by decompiler + (inv-safety uint8 16 :offset-assert 6592) ;; guessed by decompiler + (effect-data uint8 1584 :offset-assert 6608) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2000 + :flag-assert #x900002000 + ) + +(deftype gm-shadow (structure) + ((perspective matrix :inline :offset-assert 0) + (isometric matrix :inline :offset-assert 64) + (inv-camera-rot matrix :inline :offset-assert 128) + (envmap-shader adgif-shader :inline :offset-assert 192) + (current-chain uint32 :offset-assert 272) + (next-chain uint32 :offset-assert 276) + (buf-index uint32 :offset-assert 280) + (fragment-count uint32 :offset-assert 284) + (write-limit int32 :offset-assert 288) + (indexed-input-base generic-merc-input :offset-assert 292) + (other-input-base generic-merc-input :offset-assert 296) + (indexed-output-base generic-merc-output :offset-assert 300) + (other-output-base generic-merc-output :offset-assert 304) + (p-input uint32 :offset-assert 308) + (gsf-buf generic-merc-dcache :offset-assert 312) + (p-fheader merc-fp-header :offset-assert 316) + (curr-chain basic :offset-assert 320) + (mercneric-convert basic :offset-assert 324) + (generic-prepare-dma-single basic :offset-assert 328) + (generic-prepare-dma-double basic :offset-assert 332) + (generic-light-proc basic :offset-assert 336) + (generic-envmap-proc basic :offset-assert 340) + (high-speed-reject basic :offset-assert 344) + (dummy-0 uint32 :offset-assert 348) + (hsr-xmult vector :inline :offset-assert 352) + (hsr-ymult vector :inline :offset-assert 368) + (warp-consts vector :inline :offset-assert 384) + (warp-nums vector :inline :offset-assert 400) + ) + :method-count-assert 9 + :size-assert #x1a0 + :flag-assert #x9000001a0 + ) + +(deftype generic-merc-work (structure) + ((input-a generic-merc-input :inline :offset-assert 0) + (input-b generic-merc-input :inline :offset-assert 3024) + (ctrl generic-merc-ctrl-with-sfx :inline :offset-assert 6048) + (shadow gm-shadow :inline :offset-assert 6512) + (stack uint128 16 :offset-assert 6928) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c10 + :flag-assert #x900001c10 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-tie-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype generic-tie-instance (structure) + ((matrix-tag dma-packet :inline :offset-assert 0) + (matrix-data vector 6 :inline :offset-assert 16) ;; guessed by decompiler + (index-tag dma-packet :inline :offset-assert 112) + (indices uint8 224 :offset-assert 128) ;; guessed by decompiler + (end-tag dma-packet :inline :offset-assert 352) + ) + :method-count-assert 9 + :size-assert #x170 + :flag-assert #x900000170 + ) + +(deftype generic-tie-input (structure) + ((palette-tag dma-packet :inline :offset-assert 0) + (palette rgba 128 :offset-assert 16) ;; guessed by decompiler + (model-tag dma-packet :inline :offset-assert 528) + (model vector 146 :inline :offset-assert 544) ;; guessed by decompiler + (matrix-tag dma-packet :inline :offset-assert 2880) + (matrix-data vector 6 :inline :offset-assert 2896) ;; guessed by decompiler + (index-tag dma-packet :inline :offset-assert 2992) + (indices uint8 224 :offset-assert 3008) ;; guessed by decompiler + (end-tag dma-packet :inline :offset-assert 3232) + ) + :method-count-assert 9 + :size-assert #xcb0 + :flag-assert #x900000cb0 + ) + +(deftype generic-tie-run-control (structure) + ((skip-bp2 uint8 :offset-assert 0) + (skip-ips uint8 :offset-assert 1) + (gifbuf-skip uint8 :offset-assert 2) + (strips uint8 :offset-assert 3) + (target-bp1 uint8 :offset-assert 4) + (target-bp2 uint8 :offset-assert 5) + (target-ip1 uint8 :offset-assert 6) + (target-ip2 uint8 :offset-assert 7) + (target-bps uint8 :offset-assert 8) + (target-ips uint8 :offset-assert 9) + (is-generic uint8 :offset-assert 10) + (reserved uint8 :offset-assert 11) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype generic-tie-base-point (structure) + ((data uint16 8 :offset-assert 0) ;; guessed by decompiler + (quad uint128 :offset 0) + (x int16 :offset 0) + (y int16 :offset 2) + (z int16 :offset 4) + (d0 int16 :offset 6) + (vtx uint64 :offset 0) + (u int16 :offset 8) + (v int16 :offset 10) + (tex uint32 :offset 8) + (w int16 :offset 12) + (d1 int16 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype generic-tie-bps (structure) + ((bp generic-tie-base-point 4 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype generic-tie-interp-point (structure) + ((data uint16 12 :offset-assert 0) ;; guessed by decompiler + ;(quad uint128 :offset 0) ;; misaligned? + (x int16 :offset 0) + (y int16 :offset 2) + (z int16 :offset 4) + (d0 int16 :offset 6) + (vtx0 uint64 :offset 0) + (dx int16 :offset 8) + (dy int16 :offset 10) + (dz int16 :offset 12) + (unused int16 :offset 14) + (vtx1 uint64 :offset 8) + (u int16 :offset 16) + (v int16 :offset 18) + (tex uint32 :offset 16) + (w int16 :offset 20) + (d1 int16 :offset 22) + ) + :pack-me + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype generic-tie-ips (structure) + ((ip generic-tie-interp-point 2 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype generic-tie-header (structure) + ((effect uint8 :offset-assert 0) + (interp-table-size uint8 :offset-assert 1) + (num-bps uint8 :offset-assert 2) + (num-ips uint8 :offset-assert 3) + (tint-color uint32 :offset-assert 4) + (index-table-offset uint16 :offset-assert 8) + (kick-table-offset uint16 :offset-assert 10) + (normal-table-offset uint16 :offset-assert 12) + (interp-table-offset uint16 :offset-assert 14) + (gsf-header gsf-header :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype generic-tie-matrix (structure) + ((matrix matrix :inline :offset-assert 0) + (morph vector :inline :offset-assert 64) + (fog qword :inline :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + +(deftype generic-tie-normal (structure) + ((x int8 :offset-assert 0) + (y int8 :offset-assert 1) + (z int8 :offset-assert 2) + (dummy int8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype generic-tie-control (structure) + ((ptr-palette uint32 :offset-assert 0) + (ptr-shaders uint32 :offset-assert 4) + (ptr-runctrl generic-tie-run-control :offset-assert 8) + (ptr-verts uint32 :offset-assert 12) + (ptr-generic generic-tie-header :offset-assert 16) + (ptr-dps uint32 :offset-assert 20) + (ptr-kicks uint32 :offset-assert 24) + (ptr-normals uint32 :offset-assert 28) + (ptr-interp uint32 :offset-assert 32) + (ptr-mtxs generic-tie-matrix :offset-assert 36) + (ptr-cinds uint32 :offset-assert 40) + (next-instance uint32 :offset-assert 44) + (next-model uint32 :offset-assert 48) + (next-is-model uint32 :offset-assert 52) + (tie-type uint32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) + +(deftype generic-tie-stats (structure) + ((num-bps uint32 :offset-assert 0) + (num-ips uint32 :offset-assert 4) + (num-dps uint32 :offset-assert 8) + (num-shaders uint32 :offset-assert 12) + (num-models uint32 :offset-assert 16) + (num-instances uint32 :offset-assert 20) + (num-waits uint32 :offset-assert 24) + (num-qwc uint32 :offset-assert 28) + (max-qwc uint32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) + +(deftype generic-tie-calls (structure) + ((generic-prepare-dma-double basic :offset-assert 0) + (generic-envmap-dproc basic :offset-assert 4) + (generic-interp-dproc basic :offset-assert 8) + (generic-no-light-dproc basic :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype generic-tie-shadow (structure) + ((out-buf gsf-buffer :offset-assert 0) + (cur-buf uint32 :offset-assert 4) + (tie-type int32 :offset-assert 8) + (ptr-inst uint32 :offset-assert 12) + (ptr-buf uint32 :offset-assert 16) + (inst-xor int32 :offset-assert 20) + (end-of-chain uint32 :offset-assert 24) + (write-limit uint32 :offset-assert 28) + (calls generic-tie-calls :inline :offset-assert 32) + ) + :pack-me + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype generic-tie-work (structure) + ((control generic-tie-control :inline :offset-assert 0) + (interp-job generic-interp-job :inline :offset-assert 60) + (shadow generic-tie-shadow :inline :offset-assert 76) + (input-a generic-tie-input :inline :offset-assert 128) + (input-b generic-tie-input :inline :offset-assert 3376) + (inst-buf generic-tie-instance :inline :offset-assert 6624) + (palette-buf rgba 128 :offset-assert 6992) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1d50 + :flag-assert #x900001d50 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-work-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype generic-input-buffer (structure) + ((data uint128 473 :offset-assert 0) ;; guessed by decompiler + (merc generic-merc-work :inline :offset 0) + (tie generic-tie-work :inline :offset 0) + ) + :method-count-assert 9 + :size-assert #x1d90 + :flag-assert #x900001d90 + ) + +(deftype generic-debug (structure) + ((locks uint32 4 :offset-assert 0) ;; guessed by decompiler + (timer uint32 32 :offset-assert 16) ;; guessed by decompiler + (count uint32 32 :offset-assert 144) ;; guessed by decompiler + (vps uint32 32 :offset-assert 272) ;; guessed by decompiler + (buffer int32 :offset-assert 400) + (start-addr int32 :offset-assert 404) + (lock int32 :offset-assert 408) + ) + :method-count-assert 9 + :size-assert #x19c + :flag-assert #x90000019c + ) + +(deftype generic-vu1-header (structure) + ((matrix matrix :inline :offset-assert 0) + (strgif generic-gif-tag :inline :offset-assert 64) + (adcmds gs-adcmd 2 :inline :offset-assert 80) ;; guessed by decompiler + (adnop1 gs-adcmd :inline :offset 80) + (adnop2 gs-adcmd :inline :offset 96) + (dps uint16 :offset 92) + (kickoff uint16 :offset 108) + (strips uint16 :offset 76) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype generic-vu1-texbuf (structure) + ((header generic-vu1-header :inline :offset-assert 0) + (shader uint32 :dynamic :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +(deftype generic-texbuf (structure) + ((tag dma-packet :inline :offset-assert 0) + (header generic-vu1-header :inline :offset-assert 16) + (shader uint32 :dynamic :offset-assert 128) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype generic-effect-work (structure) + ((consts generic-consts :inline :offset-assert 0) + (storage generic-storage :inline :offset-assert 432) + (storage2 generic-storage :inline :offset-assert 688) + (lights vu-lights :inline :offset-assert 944) + ) + :method-count-assert 9 + :size-assert #x420 + :flag-assert #x900000420 + ) + +(deftype generic-effect-buffer (structure) + ((outbuf-0 uint8 3552 :offset-assert 0) ;; guessed by decompiler + (work generic-effect-work :inline :offset-assert 3552) + (outbuf-1 uint8 3552 :offset-assert 4608) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1fe0 + :flag-assert #x900001fe0 + ) + +(deftype generic-work (structure) + ((saves generic-saves :inline :offset-assert 0) + (storage generic-storage :inline :offset-assert 368) + (in-buf generic-input-buffer :inline :offset-assert 624) + (fx-buf generic-effect-buffer :inline :offset-assert 8192) + ) + :method-count-assert 9 + :size-assert #x3fe0 + :flag-assert #x900003fe0 + ) + +(define-extern *generic-debug* generic-debug) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shadow-cpu-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++shadow-cpu-h:shadow-flags +(defenum shadow-flags + :bitfield #t + :type int32 + (shdf00) ;; unused + (disable-fade) + (shdf02) ;; only set, never used. + (shdf03) + (shdf04) ;; unused + (disable-draw) + (shdf06) + (shdf07) + (shdf08) + ) +;; ---shadow-cpu-h:shadow-flags + +(deftype shadow-settings (structure) + "Settings used to draw a shadow." + ((center vector :inline :offset-assert 0 :score -1) + (flags shadow-flags :offset 12) ;; shadow-flags + (shadow-dir vector :inline :offset-assert 16) + (dist-to-locus float :offset 28) + (bot-plane plane :inline :offset-assert 32) + (top-plane plane :inline :offset-assert 48) + (fade-vec vector :inline :offset 64 :score -1) ;; added + (fade-dist float :offset 64) + (fade-start float :offset 68) + (dummy-2 int32 :offset 72) + (shadow-type int32 :offset 76 :score 1) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype shadow-control (basic) + ((settings shadow-settings :inline :offset-assert 16) + ) + :method-count-assert 15 + :size-assert #x60 + :flag-assert #xf00000060 + (:methods + (new (symbol type float float float vector shadow-flags float) _type_) ;; 0 + (enable-draw (shadow-control) int) ;; 9 + (disable-draw (shadow-control) int) ;; 10 + (set-top-plane-offset (shadow-control float) int) ;; 11 + (set-bottom-plane-offset (shadow-control float) int) ;; 12 + (probe-line-for-shadow (_type_ vector float float float) none) ;; 13 + (shadow-control-method-14 (_type_ vector vector float float float) none) ;; 14 + ) + ) + +(deftype shadow-data (structure) + "DMA data for the shadow renderer." + ((dma-unpack-template dma-packet :inline :offset-assert 0) + (dma-cnt uint64 :offset-assert 16) ;; dma-tag + (vif-nop vif-tag :offset-assert 24) ;; guessed by decompiler + (vif-unpack-v4-8 vif-tag :offset-assert 28) ;; guessed by decompiler + (pdc basic :offset-assert 32) + (dist float :offset-assert 36) + (waits uint32 :offset-assert 40) + (inside-volume? uint32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype shadow-work (structure) + ((shadow-data shadow-data :inline :offset-assert 0) + (inbuf uint128 600 :offset-assert 48) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x25b0 + :flag-assert #x9000025b0 + ) + +(declare-type shadow-vu1-constants structure) +(deftype shadow-bucket (structure) + ((first pointer :offset-assert 0) ;; guessed by decompiler + (next pointer :offset-assert 4) ;; guessed by decompiler + (bucket-id int32 :offset-assert 8) ;; bucket-id + (shadow-color rgba :offset-assert 12) ;; guessed by decompiler + (constants shadow-vu1-constants :offset-assert 16) ;; guessed by decompiler + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype shadow-bucket-views (structure) + ((data shadow-bucket 2 :inline :offset-assert 0) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype shadow-globals (structure) + ((num-buckets uint32 :offset-assert 0) + (cur-bucket uint32 :offset-assert 4) + (data shadow-bucket-views 3 :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc8 + :flag-assert #x9000000c8 + ) + +(deftype shadow-vertex (structure) + ((x float :offset-assert 0) + (y float :offset-assert 4) + (z float :offset-assert 8) + (weight float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype shadow-matrix-ref (structure) + ((joint-0 uint8 :offset-assert 0) + (joint-1 uint8 :offset-assert 1) + ) + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype shadow-edge (structure) + ((ind-0 uint8 :offset-assert 0) + (ind-1 uint8 :offset-assert 1) + (tri-0 uint8 :offset-assert 2) + (tri-1 uint8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype shadow-tri (structure) + ((ind-0 uint8 :offset-assert 0) + (ind-1 uint8 :offset-assert 1) + (ind-2 uint8 :offset-assert 2) + (faces uint8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype shadow-frag-header (structure) + ((qwc-data uint32 :offset-assert 0) + (num-joints uint32 :offset-assert 4) + (num-verts uint16 :offset-assert 8) + (num-twos uint16 :offset-assert 10) + (num-single-tris uint16 :offset-assert 12) + (num-single-edges uint16 :offset-assert 14) + (num-double-tris uint16 :offset-assert 16) + (num-double-edges uint16 :offset-assert 18) + (ofs-verts uint32 :offset-assert 20) + (ofs-refs uint32 :offset-assert 24) + (ofs-single-tris uint32 :offset-assert 28) + (ofs-single-edges uint32 :offset-assert 32) + (ofs-double-tris uint32 :offset-assert 36) + (ofs-double-edges uint32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype shadow-frag-ref (structure) + ((header shadow-frag-header :offset-assert 0) + (qwc uint32 :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype shadow-geo (art-element) + "The low poly model used for drawing the shadow." + ((version uint32 :offset 28) + (total-size uint32 :offset 32) + (total-qwc uint32 :offset-assert 48) + (num-joints uint32 :offset-assert 52) + (num-fragments uint32 :offset-assert 56) + (frags shadow-frag-ref :inline :dynamic :offset-assert 60) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x3c + :flag-assert #xe0000003c + ) + +(define-extern *shadow-globals* shadow-globals) +(define-extern *shadow* symbol) +(define-extern *shadow-object* symbol) +(define-extern *shadow-debug* symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shadow-vu1-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; prim-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype prim-vertex (structure) + "Vertex for the prim renderer. These vertices are generated by + some special effect code, then sent to the prim renderer to be drawn." + ((stq vector :inline :offset-assert 0) + (nokick uint32 :offset-assert 8 :overlay-at (-> stq z)) + (col rgba :offset-assert 12 :overlay-at (-> stq w) :score 1) ;; guessed by decompiler + (pos vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype prim-base (basic) + "Base class for prim-strip." + () + :method-count-assert 10 + :size-assert #x4 + :flag-assert #xa00000004 + (:methods + (generate-dma! "Generate DMA for prim rendering." (_type_ matrix) none) ;; 9 + ) + ) + +(deftype prim-client (basic) + () + :method-count-assert 10 + :size-assert #x4 + :flag-assert #xa00000004 + (:methods + (prim-client-method-9 () int) ;; 9 + ) + ) + +(defenum prim-flags + :type uint32 + :bitfield #t + (alpha-blend-enable 0) ;; set by default + (texture-enable 1) ;; set by default + (fog-enable 2) + (pf3 3) ;; auto-clear vertices? + (pf4 4) ;; has new verts to draw? + (no-texture-name 5) ;; only has the ID. + ) + +(deftype prim-strip (prim-base) + "A collection of vertices, all with the same texture and draw settings. + These are owned by the thing submitting to prim, not the prim renderer itself." + ((flags prim-flags :offset-assert 4) ;; guessed by decompiler + (tex-name basic :offset-assert 8) + (tex basic :offset-assert 12) + (tex-id texture-id :offset-assert 16) ;; guessed by decompiler + (adnops gs-adcmd 2 :inline :offset-assert 32) ;; guessed by decompiler + (data0 gs-test :offset 32) ;; gs-test + (reg0 gs-reg64 :offset 40) ;; gs-reg64 + (data1 gs-test :offset 48) ;; gs-test + (reg1 gs-reg64 :offset 56) ;; gs-reg64 + (clamp gs-clamp :offset-assert 64) ;; gs-clamp + (alpha gs-alpha :offset-assert 72) ;; gs-alpha + (level level :offset-assert 80) ;; guessed by decompiler + (texture-index int8 :offset-assert 84) ;; uint32 + (num-verts uint16 :offset-assert 86) + (allocated-num-verts uint16 :offset-assert 88) + (last-tex-id uint32 :offset-assert 92) + (data prim-vertex :inline :dynamic :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x60 + :flag-assert #xb00000060 + (:methods + (new "Allocate a new prim-strip and room for vertices. The texture can be specified by name or ID." + (symbol type int texture-id string) _type_) + (setup-dma-and-tex "Set up the bucket, prim sink, and texture." (_type_ draw-control) none) ;; 10 + ) + ) + +(deftype prim-sink (structure) + ((vertex-count uint8 :offset-assert 0) + (control-count uint8 :offset-assert 1) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x2 + :flag-assert #x900000002 + ) + +(deftype prim-work (structure) + ((vertex-tmpl dma-packet 3 :inline :offset-assert 0) ;; guessed by decompiler + (control-tmpl dma-packet 2 :inline :offset-assert 48) ;; guessed by decompiler + (giftag generic-gif-tag :inline :offset-assert 80) + (call-scissor dma-packet :inline :offset-assert 96) + (call-noclip dma-packet :inline :offset-assert 112) + (shader adgif-shader :inline :offset-assert 128) + (mask vector4w :inline :offset-assert 208) + (in-verts int32 :offset-assert 224) + (num-verts int32 :offset-assert 228) + (vert-ptr (inline-array prim-vertex) :offset-assert 232) ;; (inline-array prim-vertex) + (sinks prim-sink 114 :inline :offset-assert 236) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #x80c + :flag-assert #xa0000080c + (:methods + (reset! "Reset all pending vertex/control data." (_type_) none) ;; 9 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; memcard-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype mc-handle (int32) + () + :flag-assert #x900000004 + ) + +(deftype mc-file-info (structure) + "Data stored in a save file." + ((present int32 :offset-assert 0) + (blind-data float 24 :offset-assert 4) ;; guessed by decompiler + (blind-data-int8 int8 96 :offset 4) ;; guessed by decompiler + (level-index int32 :offset 4) + (gem-count float :offset 8) + (skill-count float :offset 12) + (completion-percentage float :offset 16) + (minute uint8 :offset 24) + (hour uint8 :offset 25) + (week uint8 :offset 26) + (day uint8 :offset 27) + (month uint8 :offset 28) + (year uint8 :offset 29) + (language uint8 :offset 30) + (game-time0 uint32 :offset 36) + (game-time1 uint32 :offset 40) + (purchase-secrets uint32 :offset 44) + (secrets uint32 :offset 52) ;; field could not be read. + (features uint32 :offset 60) ;; field could not be read. + (name uint8 16 :offset 68) + ) + :pack-me + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) + +(deftype mc-slot-info (structure) + "Data about a memory card slot." + ((handle mc-handle :offset-assert 0) ;; mc-handle + (known int32 :offset-assert 4) + (formatted int32 :offset-assert 8) + (inited int32 :offset-assert 12) + (last-file int32 :offset-assert 16) + (mem-required int32 :offset-assert 20) + (mem-actual int32 :offset-assert 24) + (file mc-file-info 4 :inline :offset-assert 28) ;; guessed by decompiler + ) + :pack-me + :method-count-assert 9 + :size-assert #x1ac + :flag-assert #x9000001ac + ) + +(deftype stored-network-account (structure) + ((name uint8 64 :offset-assert 0) + (password uint8 64 :offset-assert 64) + ) + :pack-me + :method-count-assert 11 + :size-assert #x80 + :flag-assert #xb00000080 + (:methods + (stored-network-account-method-9 () none) ;; 9 + (stored-network-account-method-10 () none) ;; 10 + ) + ) + +(deftype stored-network-accounts (structure) + ((accounts stored-network-account 4 :inline :offset-assert 0) + (default-idx int8 :offset-assert 512) + (ct int8 :offset-assert 513) + ) + :pack-me + :method-count-assert 10 + :size-assert #x202 + :flag-assert #xa00000202 + (:methods + (stored-network-accounts-method-9 () none) ;; 9 + ) + ) + +(deftype mc-common-data (structure) + ((magic uint32 :offset-assert 0) + (crc uint32 :offset-assert 4) + (version uint32 :offset-assert 8) + (data uint8 1012 :offset-assert 12) + (net-accounts stored-network-accounts :inline :offset 12) + ) + :method-count-assert 9 + :size-assert #x400 + :flag-assert #x900000400 + ) + +(deftype mc-patch-data (structure) + ((magic uint32 :offset-assert 0) + (crc uint32 :offset-assert 4) + (version uint32 :offset-assert 8) + (size uint32 :offset-assert 12) + (data uint8 524272 :offset-assert 16) + ) + :method-count-assert 9 + ;; overflow 16-bit int size bug + ;; :size-assert #x0 + ;; :heap-base #x8 + ;; :flag-assert #x900080000 + :size-assert #x80000 + ) + +;; +++memcard-h:mc-status-code +(defenum mc-status-code + :type uint32 + (busy 0) + (ok 1) + (bad-handle 2) + (format-failed 3) + (internal-error 4) + (write-error 5) + (read-error 6) + (new-game 7) + (no-memory 8) + (no-card 9) + (no-last 10) + (no-format 11) + (no-file 12) + (no-save 13) + (no-space 14) + (bad-version 15) + (no-process 16) + (no-auto-save 17) + ) +;; ---memcard-h:mc-status-code + +(define-extern mc-run (function none)) +(define-extern mc-sync "Synchronize the memory card state." (function int)) +(define-extern mc-get-slot-info (function int mc-slot-info none)) +(define-extern show-mc-info "Display the memory card debug text." (function dma-buffer none)) +(define-extern *mc-common-data* mc-common-data) +(define-extern *mc-patch-data* mc-patch-data) +(define-extern *mc-last-result* object) +(define-extern mc-check-result (function mc-status-code)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; game-info-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype game-bank (basic) + ((life-max-default float :offset-assert 4) + (life-start-default float :offset-assert 8) + (life-single-inc float :offset-assert 12) + (money-task-inc float :offset-assert 16) + (money-oracle-inc float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype actor-id (uint32) + () + :flag-assert #x900000004 + ) + +(deftype highscore-info (structure) + ((flags uint8 :offset-assert 0) ;; highscore-flags + ) + :method-count-assert 9 + :size-assert #x1 + :flag-assert #x900000001 + ) + +(deftype level-buffer-state (structure) + ((name symbol :offset-assert 0) ;; guessed by decompiler + (display? symbol :offset-assert 4) ;; guessed by decompiler + (force-vis? symbol :offset-assert 8) ;; guessed by decompiler + (force-inside? symbol :offset-assert 12) ;; guessed by decompiler + (slot int32 :offset-assert 16) + (force-reload basic :offset-assert 20) + ) + :pack-me + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype level-buffer-state-small (structure) + ((name symbol :offset-assert 0) ;; guessed by decompiler + (display? symbol :offset-assert 4) ;; guessed by decompiler + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype level-buffer-state-split (structure) + ((name basic :offset-assert 0) + (display? symbol 2 :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype load-state (basic) + ((want level-buffer-state 18 :inline :offset-assert 4) ;; guessed by decompiler + (want-exp level-buffer-state 18 :inline :offset 580) ;; guessed by decompiler + (want-split level-buffer-state-split 18 :inline :offset 1156) + (target level-buffer-state 18 :inline :offset-assert 1372) ;; guessed by decompiler + (want-sound sound-bank-state 7 :inline :offset 1948) ;; guessed by decompiler + (target-sound sound-bank-state 7 :inline :offset-assert 2060) ;; guessed by decompiler + (vis-nick symbol :offset-assert 2172) ;; guessed by decompiler + (command-list pair :offset-assert 2176) ;; guessed by decompiler + (object-name string 256 :offset-assert 2180) ;; guessed by decompiler + (object-status basic 256 :offset-assert 3204) ;; guessed by decompiler + (update-callback (function load-state object) :offset-assert 4228) ;; guessed by decompiler + ) + :method-count-assert 27 + :size-assert #x1088 + :flag-assert #x1b00001088 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (load-state-method-9 () none) ;; 9 ;; (reset! (_type_) _type_) + (load-state-method-10 () none) ;; 10 ;; (update! (_type_) int) + (load-state-method-11 () none) ;; 11 ;; (want-levels (_type_ (pointer symbol)) int) + (load-state-method-12 () none) ;; 12 ;; (want-sound-banks (_type_ (pointer symbol)) none) + (load-state-method-13 () none) ;; 13 ;; (want-display-level (_type_ symbol symbol) int) + (load-state-method-14 () none) ;; 14 ;; (want-vis-level (_type_ symbol) none) + (load-state-method-15 () none) ;; 15 ;; (want-force-vis (_type_ symbol symbol) int) + (load-state-method-16 () none) ;; 16 ;; (want-force-inside (_type_ symbol symbol) none) + (load-state-method-17 () none) ;; 17 ;; (execute-commands-up-to (_type_ float) none) + (load-state-method-18 () none) ;; 18 ;; (backup-load-state-and-set-cmds (_type_ pair) int) + (load-state-method-19 () none) ;; 19 ;; (restore-load-state-and-cleanup (_type_) int) + (load-state-method-20 () none) ;; 20 ;; (restore-load-state (_type_) int) + (load-state-method-21 () none) ;; 21 ;; (add-borrow-levels (_type_) none) + (load-state-method-22 () none) ;; 22 + (load-state-method-23 () none) ;; 23 + (load-state-method-24 () none) ;; 24 + (load-state-method-25 () none) ;; 25 + (load-state-method-26 () none) ;; 26 + ) + ) + +;; +++game-info-h:continue-flags +(defenum continue-flags + :type uint32 + :bitfield #t + ) +;; ---game-info-h:continue-flags + +(deftype continue-point (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (level symbol :offset-assert 8) ;; guessed by decompiler + (flags continue-flags :offset-assert 12) ;; guessed by decompiler + (trans vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (camera-trans vector :inline :offset-assert 48) + (quat vector4h :inline :offset-assert 64) + (camera-rot int16 9 :offset-assert 72) ;; guessed by decompiler + (on-goto object :offset-assert 92) ;; guessed by decompiler + (vis-nick symbol :offset-assert 96) ;; guessed by decompiler + (vehicle-type uint8 :offset-assert 100) + (want-count int8 :offset-assert 101) + (want (inline-array level-buffer-state-small) :offset-assert 104) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (want-sound symbol 1 :offset-assert 108) ;; guessed by decompiler + ;; (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 12 + :size-assert #x70 + :flag-assert #xc00000070 + ;; field on-goto uses ~A with a signed load. + (:methods + (debug-draw (_type_) int) ;; 9 + (continue-point-method-10 (_type_ load-state) continue-point) ;; 10 + (move-camera! (_type_) none) ;; 11 + ) + ) + +(deftype game-info-player (structure) + ((current-continue continue-point :offset-assert 0) + (last-continue continue-point :offset-assert 4) + (vehicle handle :offset-assert 8) + (cash float :offset-assert 16) + (camera-inside-view basic :offset-assert 20) + (last-selected-vehicle uint8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + +(declare-type entity-perm-array inline-array-class) +(deftype game-info (basic) + ((mode symbol :offset-assert 4) ;; guessed by decompiler + (save-name string :offset-assert 8) ;; guessed by decompiler + (player-info game-info-player 2 :inline :offset-assert 16) + (car-info car-info-array :inline :offset-assert 80) + (features uint64 :offset-assert 1040) ;; game-feature + (debug-features uint64 :offset-assert 1048) ;; game-feature + (old-features uint64 :offset-assert 1056) ;; game-feature + (items uint64 :offset-assert 1064) ;; game-items + (debug-items uint64 :offset-assert 1072) ;; game-items + (old-items uint64 :offset-assert 1080) ;; game-items + (secrets uint64 :offset-assert 1088) ;; game-secrets + (purchase-secrets uint64 :offset-assert 1096) ;; game-secrets + (vehicles uint64 :offset-assert 1104) ;; game-vehicles + (debug-vehicles uint64 :offset-assert 1112) ;; game-vehicles + (old-vehicles uint64 :offset-assert 1120) ;; game-vehicles + (health-bar float :offset-assert 1128) + (health-bar-owner uint64 :offset-assert 1136) ;; handle + (attack-id uint32 :offset-assert 1144) + (perm-list entity-perm-array :offset-assert 1148) ;; guessed by decompiler + (play-list (array game-task-info) :offset-assert 1152) + (sub-task-list (array game-task-node-info) :offset-assert 1156) + (mission-list (array game-task-node-info) :offset-assert 1160) + (task-node-commands (array game-task-node-command) :offset-assert 1164) ;; guessed by decompiler + (task-counter uint32 :offset-assert 1168) + (level-opened uint8 32 :offset 1176) ;; guessed by decompiler + (total-deaths int32 :offset-assert 1208) + (continue-deaths int32 :offset-assert 1212) + (task-deaths int32 :offset-assert 1216) + (total-trys int32 :offset-assert 1220) + (game-start-time uint64 :offset-assert 1224) ;; time-frame + (continue-time uint64 :offset-assert 1232) ;; time-frame + (death-time uint64 :offset-assert 1240) ;; time-frame + (hit-time uint64 :offset-assert 1248) ;; time-frame + (task-pickup-time uint64 :offset-assert 1256) ;; time-frame + (stop-watch-start uint64 :offset-assert 1264) ;; time-frame + (stop-watch-stop uint64 :offset-assert 1272) ;; time-frame + (blackout-time uint64 :offset-assert 1280) ;; time-frame + (letterbox-time uint64 :offset-assert 1288) ;; time-frame + (hint-play-time uint64 :offset-assert 1296) ;; time-frame + (display-text-time uint64 :offset-assert 1304) ;; time-frame + (display-text-handle uint64 :offset-assert 1312) ;; handle + (death-movie-tick int32 :offset-assert 1320) + (want-auto-save symbol :offset-assert 1324) ;; guessed by decompiler + (auto-save-proc uint64 :offset-assert 1328) ;; handle + (auto-save-status mc-status-code :offset-assert 1336) ;; guessed by decompiler + (auto-save-card int32 :offset-assert 1340) + (auto-save-which int32 :offset-assert 1344) + (auto-save-count int32 :offset-assert 1348) + (pov-camera-handle uint64 :offset-assert 1352) ;; handle + (other-camera-handle uint64 :offset-assert 1360) ;; handle + (controller handle 2 :offset-assert 1368) ;; guessed by decompiler + (bot-health float 3 :offset-assert 1384) ;; guessed by decompiler + (demo-state uint32 :offset-assert 1396) + (distance float :offset-assert 1400) + (kiosk-timeout uint64 :offset-assert 1408) ;; time-frame + (pause-start-time uint64 :offset-assert 1416) ;; time-frame + (game-score (array float) :offset-assert 1424) ;; guessed by decompiler + (goal float :offset-assert 1428) + (miss float :offset-assert 1432) + (miss-max float :offset-assert 1436) + (health-bar-vehicle float :offset-assert 1440) + (pause-menu uint64 :offset-assert 1448) + (current-vehicle uint8 :offset-assert 1456) ;; vehicle-type-u8 + (collision-damage-multiplier float :offset-assert 1460) + (traction-multiplier float :offset-assert 1464) + (turbo-factor float :offset-assert 1468) + (turbo-disabled int8 :offset-assert 1472) + (turbo-last-disabled int32 :offset-assert 1476) + (fragile-vehicle basic :offset-assert 1480) + (music-data uint8 4 :offset-assert 1484) + (music-info uint32 :offset 1484) + (game-movie (array game-movie) :offset-assert 1488) + (grand-prix (array grand-prix) :offset-assert 1492) + (playing-grand-prix? grand-prix :offset-assert 1496) + (grand-prix-index uint32 :offset-assert 1500) + (collision-vs-rbody-damage-multiplier float :offset-assert 1504) + (global-speed-factor float :offset-assert 1508) + (this-race-grand-prix-score uint32 23 :offset-assert 1512) + (cumulative-grand-prix-score uint32 23 :offset-assert 1604) + (driver-info uint64 :offset-assert 1696) + (driver-info2 uint32 2 :offset 1696) + (driver-unlock uint32 :offset 1696) + (driver-award uint32 :offset 1700) + ) + :method-count-assert 31 + :size-assert #x6a8 + :flag-assert #x1f000006a8 + (:methods + (game-info-method-9 () none) ;; 9 ;; (initialize! (_type_ symbol game-save string resetter-spec) _type_) + (game-info-method-10 () none) ;; 10 ;; (give (_type_ symbol float handle) float) + (game-info-method-11 () none) ;; 11 ;; (task-complete? (_type_ game-task) symbol) + (game-info-method-12 () none) ;; 12 ;; (subtask-index-by-name (_type_ string) int) + (game-info-method-13 () none) ;; 13 ;; (actor-perm (_type_ actor-id) entity-perm) + (game-info-method-14 () none) ;; 14 ;; (task-perm-by-index (_type_ int) entity-perm) + (game-info-method-15 () none) ;; 15 ;; (copy-perms-from-level! (_type_ level) int) + (game-info-method-16 () none) ;; 16 ;; (copy-perms-to-level! (_type_ level) int) + (game-info-method-17 () none) ;; 17 ;; (debug-inspect (_type_ symbol) _type_) + (game-info-method-18 () none) ;; 18 ;; (get-current-continue-forced (_type_) continue-point) + (game-info-method-19 () none) ;; 19 ;; (get-continue-by-name (_type_ string) continue-point) + (game-info-method-20 () none) ;; 20 ;; (set-continue! (_type_ basic symbol) continue-point) + (game-info-method-21 () none) ;; 21 ;; (game-info-method-21 (_type_) none) + (game-info-method-22 () none) ;; 22 ;; (save-game (_type_ game-save string) game-save) + (game-info-method-23 () none) ;; 23 ;; (load-game (_type_ game-save) game-save) + (game-info-method-24 () none) ;; 24 ;; (you-suck-stage (_type_ symbol int) int) + (game-info-method-25 () none) ;; 25 ;; (you-suck-scale (_type_ symbol int) float) + (get-next-attack-id! (_type_) uint) ;; 26 + (game-info-method-27 () none) ;; 27 ;; (game-info-method-27 (_type_ game-score float) int) + (game-info-method-28 () none) ;; 28 ;; (get-game-score-ref (_type_ int) (pointer float)) + (game-info-method-29 () none) ;; 29 ;; (game-info-method-29 (_type_ int) int) + (game-info-method-30 () none) ;; 30 ;; (get-highscore-rank (_type_ int float) int) + ) + ) + +(define-extern *GAME-bank* game-bank) +(define-extern *static-continues* (array continue-point)) +(define-extern continue-point-copy! (function continue-point continue-point int)) +(define-extern *game-info* game-info) +(define-extern *use-menu2* symbol) +(define-extern *lobby-adv-selected-cup* symbol) +(define-extern *lobby-adv-selected-map* symbol) +(define-extern *lobby-adv-selected-venue* symbol) +(define-extern *lobby-adv-selected-level* symbol) +(define-extern *lobby-adv-previous-score* symbol) +(define-extern *lobby-adv-cup* symbol) +(define-extern *lobby-adv-selected-task* symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gui-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++gui-h:gui-action +(defenum gui-action + :type uint8 + (none 0) + (queue 1) + (play 2) + (playing 3) + (stop 4) + (stopping 5) + (abort 6) + (hide 7) + (hidden 8) + (fade 9) + ) +;; ---gui-h:gui-action + +;; +++gui-h:gui-status +(defenum gui-status + :type uint8 ;; not sure + (unknown 0) + (pending 1) + (ready 2) + (active 3) + (hide 4) + (stop 5) + ) +;; ---gui-h:gui-status + +;; +++gui-h:gui-channel +(defenum gui-channel + :type uint8 + (none 0) + + (art-load 16) + (art-load-next 17) + (background 18) + (jak 19) + (daxter 20) + (sig 21) + (ashelin 22) + (beast 23) + (jak-effect-1 24) + (pecker 25) + (jak-effect-2 26) + (gun 27) + (hal 28) + (speech 29) + (guard 30) + (jak-mode 31) + (alert 32) + (citizen 33) + (bbush 34) + (rider 35) + (task 36) + + (voice 47) + + (movie 64) + (blackout 65) + (query 66) + (message 67) + (notice 68) + (subtitle 69) + (supertitle 70) + (notice-low 71) + (resetter 72) + (progress 73) + (freeze 74) + + (screen 79) + (hud-upper-right 80) + (hud-upper-left 81) + (hud-lower-right 82) + (hud-lower-left 83) + (hud-lower-left-1 84) + (hud-lower-left-2 85) + (hud-center-right 86) + (hud-center-left 87) + (hud-middle-right 88) + (hud-middle-left 89) + (hud-upper-center 90) + (hud-upper-center-2 91) + (hud-lower-center 92) + (hud-auto-save 93) + (hud-auto-save-message 94) + (hud 95) + (hud-mp-vehicle-main-0 96) + (hud-mp-vehicle-main-1 97) + (hud-mp-player-indicators-0 98) + (hud-mp-player-indicators-1 99) + (hud-mp-race-0 100) + (hud-mp-race-1 101) + (hud-mp-race-2 102) + (hud-mp-race-3 103) + + (max 112) + ) +;; ---gui-h:gui-channel + +;; +++gui-h:gui-connection-flags +(defenum gui-connection-flags + :type uint8 + :bitfield #t + ) +;; ---gui-h:gui-connection-flags + +(deftype gui-connection (connection) + ((priority float :offset 16 :score 1) + (action gui-action :offset 20) ;; gui-action + (channel gui-channel :offset 21) ;; gui-channel + (anim-part uint8 :offset 22) + (flags gui-connection-flags :offset 23) ;; gui-connection-flags + (name string :offset 24) ;; guessed by decompiler + (id sound-id :offset 28) ;; guessed by decompiler + (handle handle :offset 0) ;; handle + (time-stamp time-frame :offset 8) ;; time-frame + (hold-time time-frame :offset-assert 32) ;; time-frame + (fo-min float :offset-assert 40) ;; int16 + (fo-max float :offset-assert 44) ;; int16 + (fo-power float :offset-assert 48) + (fade uint8 :offset-assert 52) + (volume float :offset-assert 56) ;; int16 + (qw-pad uint8 4 :offset-assert 60) + ) + :method-count-assert 14 + :size-assert #x40 + :flag-assert #xe00000040 + ;; field param1 uses ~A with a signed load. field param2 uses ~A with a signed load. field param3 uses ~A with a signed load. + ) + +;; (deftype gui-control (basic) +;; () +;; :flag-assert #x1a00001080 +;; ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ambient-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype talker-speech-class (structure) + ((name string :offset-assert 0) ;; guessed by decompiler + (channel uint8 :offset-assert 4) ;; gui-channel + (flags uint16 :offset-assert 6) ;; talker-flags + (speech uint16 :offset-assert 8) + (text-duration uint16 :offset-assert 10) + (delay uint16 :offset-assert 12) + (pos uint16 :offset-assert 14) + (neg uint16 :offset-assert 16) + (text-message text-id :offset-assert 20) ;; guessed by decompiler + (on-close pair :offset-assert 24) ;; guessed by decompiler + (camera string :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + ;; field on-close uses ~A with a signed load. + (:methods + (talker-speech-class-method-9 () none) ;; 9 ;; (talker-speech-class-method-9 (_type_) symbol) + (talker-speech-class-method-10 () none) ;; 10 ;; (play-communicator-speech! (_type_) none) + (talker-speech-class-method-11 () none) ;; 11 ;; (talker-speech-class-method-11 (_type_) none) + (talker-speech-class-method-12 () none) ;; 12 ;; (talker-speech-class-method-12 (_type_ int) none) + (talker-speech-class-method-13 () none) ;; 13 ;; (talker-speech-class-method-13 (_type_ int) none) + ) + ) +|# + +#| +(deftype talker (process) + ((trans vector :inline :offset-assert 144) + (message talker-speech-class :offset-assert 160) + (total-time uint64 :offset-assert 168) ;; time-frame + (total-off-time uint64 :offset-assert 176) ;; time-frame + (start-time uint64 :offset-assert 184) ;; time-frame + (state-time uint64 :offset-assert 192) ;; time-frame + (voicebox uint64 :offset-assert 200) ;; handle + (voice-id sound-id :offset-assert 208) ;; guessed by decompiler + (message-id sound-id :offset-assert 212) ;; guessed by decompiler + (region region :offset-assert 216) + (interp float :offset-assert 220) + (save? symbol :offset-assert 224) ;; guessed by decompiler + (grab? symbol :offset-assert 228) ;; guessed by decompiler + ) + :method-count-assert 19 + :size-assert #xe8 + :flag-assert #x13006000e8 + (:methods + (talker-method-9 () none) ;; 9 + (talker-method-10 () none) ;; 10 + (talker-method-11 () none) ;; 11 + (talker-method-12 () none) ;; 12 + (talker-method-13 () none) ;; 13 + (talker-method-14 () none) ;; 14 ;; (idle () _type_ :state) + (talker-method-15 () none) ;; 15 ;; (active () _type_ :state) + (talker-method-16 () none) ;; 16 ;; (exit () _type_ :state) + (talker-method-17 () none) ;; 17 ;; (talker-method-17 (_type_) none) + (talker-method-18 () none) ;; 18 + ) + ) +|# + +;; (define-extern *talker-speech* object) ;; (inline-array talker-speech-class) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype speech-info-item (structure) + ((name basic :offset-assert 0) + (flags uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; +++speech-manager:speech-info-flag +(defenum speech-info-flag + :type uint64 + :bitfield #t + (si0 0) + (si1 1) + (si2 2) + (si3 3) + (si4 4) + (si5 5) + (si6 6) + (si7 7) + (si8 8) + ) +;; ---speech-manager:speech-info-flag + +(deftype speech-info (structure) + ((list (array speech-info-item) :offset-assert 0) + (flags speech-info-flag :offset-assert 8) ;; speech-info-flag + ) + :method-count-assert 13 + :size-assert #x10 + :flag-assert #xd00000010 + (:methods + (speech-info-method-9 () none) ;; 9 + (speech-info-method-10 () none) ;; 10 + (speech-info-method-11 () none) ;; 11 + (speech-info-method-12 () none) ;; 12 + ) + ) + +;; +++speech-h:speech-type +(defenum speech-type + :type uint8 + (none 0) + (race-start 1) + (race-finish-lose 2) + (race-finish-win 3) + (bumping 4) + (passing 5) + (shooting 6) + (crashing 7) + (lap-count 8) + (collecting 9) + (taking-hits 10) + (lap-count-last 11) + (lap-count-1 12) + (deathmatch-finish-lose 13) + (deathmatch-finish-win 14) + (frustrated 15) + (event-start 16) + (announce-race-start 17) + (announce-race-go 18) + (announce-race-end 19) + (announce-crash 20) + (hangtime 21) + (boss-start 22) + (boss-falling-behind 23) + (boss-catching-up 24) + (boss-shooting 25) + (boss-taking-hits 26) + (boss-bumping 27) + (boss-kill 28) + (boss-support 29) + (boss-taunt 30) + ) +;; ---speech-h:speech-type + +(deftype speech-request (structure) + ((handle uint64 :offset-assert 0) ;; handle + (req-time uint64 :offset-assert 8) + (start-time uint64 :offset-assert 16) + (name basic :offset-assert 24) + (speech-type speech-type :offset-assert 28) ;; speech-type + (flags uint8 :offset-assert 29) + (max-delay uint64 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) + +(defenum speech-channel-flag + :type uint8 + (disable 1) + ) + +(deftype speech-channel (structure) + ((flags speech-channel-flag :offset-assert 0) + (gui-channel gui-channel :offset-assert 1) ;; gui-channel + (delay uint16 :offset-assert 2) + (id sound-id :offset-assert 4) ;; guessed by decompiler + (time uint64 :offset-assert 8) + (current-request speech-request :offset-assert 16) + (requests (array speech-request) :offset-assert 20) + (speeches speech-info 31 :offset-assert 24) + ) + :method-count-assert 17 + :size-assert #x94 + :flag-assert #x1100000094 + ;; field speech-channel-flag is likely a value type. + (:methods + (speech-channel-method-9 (_type_) none) ;; 9 ;; (speech-channel-method-9 (_type_ process-drawable speech-type) int) + (speech-channel-method-10 () none) ;; 10 ;; (speech-channel-method-10 (_type_ handle) none) + (speech-channel-method-11 () none) ;; 11 ;; (speech-channel-method-11 (_type_) none) + (speech-channel-method-12 () none) ;; 12 ;; (reset-channel! (_type_) none) + (speech-channel-method-13 () none) ;; 13 ;; (init! (_type_) none) + (speech-channel-method-14 () none) ;; 14 ;; (speech-channel-method-14 (_type_ speech-type float) none) + (speech-channel-method-15 () none) ;; 15 + (speech-channel-method-16 () none) ;; 16 + ) + ) + +(deftype speech-control (structure) + ((channels speech-channel 22 :inline :offset-assert 0) + ) + :method-count-assert 17 + :size-assert #xdc0 + :flag-assert #x1100000dc0 + (:methods + (speech-control-method-9 (_type_) none) ;; 9 ;; (speech-table-reset! (_type_) none) + (speech-control-method-10 () none) ;; 10 ;; (speech-table-set! (_type_ speech-type speech-type-info) none) + (speech-control-method-11 () none) ;; 11 ;; (speech-control-method-11 (_type_) none) + (speech-control-method-12 () none) ;; 12 ;; (speech-control-method-12 (_type_ process-drawable speech-type) none) + (speech-control-method-13 () none) ;; 13 ;; (speech-control-method-13 (_type_ process-drawable speech-type int) none) + (speech-control-method-14 () none) ;; 14 ;; (speech-control-method-14 (_type_ handle) none) + (speech-control-method-15 () none) ;; 15 ;; (speech-control-method-15 (_type_) none) + (speech-control-method-16 () none) ;; 16 ;; (speech-control-method-16 (_type_) none) + ) + ) + +(define-extern *music-volume-during-speech* object) +(define-extern *sfx-volume-during-speech* object) +(define-extern pecker-can-speak? (function symbol)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wind-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wind-vector (structure) + ((wind-pos vector4w :inline :offset-assert 0) + (wind-vel vector4w :inline :offset-assert 16) + (stiffness float :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype wind-work (basic) + ((wind-array vector 64 :offset-assert 16) ;; guessed by decompiler + (wind-normal vector :inline :offset-assert 1040) + (wind-temp vector :inline :offset-assert 1056) + (wind-force float 64 :offset-assert 1072) ;; guessed by decompiler + (wind-const vector :inline :offset-assert 1328) + (wind-time uint32 :offset-assert 1344) + (wait-to-vu0 uint32 :offset-assert 1348) + (wait-to-spr uint32 :offset-assert 1352) + (wait-from-spr uint32 :offset-assert 1356) + (spr-index uint32 :offset-assert 1360) + (count uint32 :offset-assert 1364) + (next-count uint32 :offset-assert 1368) + (last-count uint32 :offset-assert 1372) + (to-spr uint32 :offset-assert 1376) + (from-spr uint32 :offset-assert 1380) + (next-mem uint32 :offset-assert 1384) + (last-mem uint32 :offset-assert 1388) + (next-spr uint32 :offset-assert 1392) + (last-spr uint32 :offset-assert 1396) + (to-ptrs uint32 3 :offset-assert 1400) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x584 + :flag-assert #x900000584 + ) +|# + +#| +(deftype wind-dma (structure) + ((buffer0 wind-vector 128 :offset-assert 0) ;; guessed by decompiler + (buffer1 wind-vector 128 :offset-assert 4096) ;; guessed by decompiler + (buffer2 wind-vector 128 :offset-assert 8192) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x3000 + :flag-assert #x900003000 + ) +|# + +;; (define-extern *wind-scales* array) ;; (array uint8) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; prototype-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype prototype-bucket (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (flags uint16 :offset-assert 8) ;; prototype-flags + (texture-masks-index uint16 :offset-assert 10) + (in-level uint16 :offset-assert 12) + (utextures uint16 :offset-assert 14) + (wide-level-index uint16 :offset-assert 14) + (geometry drawable 4 :offset-assert 16) ;; guessed by decompiler + (dists vector :inline :offset-assert 32) + (rdists vector :inline :offset-assert 48) + (near-plane meters :offset-assert 32) + (near-stiff meters :offset-assert 36) + (mid-plane meters :offset-assert 40) + (far-plane meters :offset-assert 44) + (rlength-near float :offset-assert 48) + (rlength-stiff float :offset-assert 52) + (rlength-mid float :offset-assert 56) + (stiffness float :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype prototype-bucket-shrub (prototype-bucket) + ((next uint32 4 :offset-assert 64) ;; guessed by decompiler + (count uint16 4 :offset-assert 80) ;; guessed by decompiler + (mod-count uint16 4 :offset-assert 88) ;; guessed by decompiler + (last dma-packet 4 :offset-assert 96) ;; guessed by decompiler + (next-clear uint128 :offset-assert 64) + (count-clear uint64 :offset-assert 80) + (last-clear uint128 :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype prototype-inline-array-shrub (drawable) + ((length int16 :offset-assert 6) + (data prototype-bucket-shrub 1 :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 17 + :size-assert #x94 + :flag-assert #x1100000094 + ) +|# + +#| +(deftype prototype-array-shrub-info (basic) + ((prototype-inline-array-shrub prototype-inline-array-shrub :offset-assert 4) ;; guessed by decompiler + (wind-vectors uint32 :offset-assert 8) + (wind-count int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype prototype-bucket-tie (prototype-bucket) + ((next uint32 12 :offset-assert 64) ;; guessed by decompiler + (count uint16 12 :offset-assert 112) ;; guessed by decompiler + (frag-count uint8 4 :offset-assert 136) ;; guessed by decompiler + (index-start uint8 4 :offset-assert 140) ;; guessed by decompiler + (base-qw uint16 4 :offset-assert 144) ;; guessed by decompiler + (tie-rvanish float :offset-assert 152) + (tie-vanish-far float :offset-assert 156) + (envmap-rfade float :offset-assert 160) + (envmap-fade-far float :offset-assert 164) + (envmap-shader adgif-shader :offset-assert 168) + (tint-color uint32 :offset-assert 172) + (collide-hash-fragment-array collide-hash-fragment-array :offset-assert 176) ;; guessed by decompiler + (tie-colors time-of-day-palette :offset-assert 180) ;; guessed by decompiler + (data uint32 :dynamic :offset-assert 184) ;; guessed by decompiler + (color-index-qwc uint32 :dynamic :offset-assert 184) ;; guessed by decompiler + (scissor-frag-count uint8 :offset-assert 136) + (near-frag-count uint8 :offset-assert 137) + (mid-frag-count uint8 :offset-assert 138) + (far-frag-count uint8 :offset-assert 139) + (scissor-index-start uint8 :offset-assert 140) + (near-index-start uint8 :offset-assert 141) + (mid-index-start uint8 :offset-assert 142) + (far-index-start uint8 :offset-assert 143) + (scissor-base-qw uint16 :offset-assert 144) + (near-base-qw uint16 :offset-assert 146) + (mid-base-qw uint16 :offset-assert 148) + (far-base-qw uint16 :offset-assert 150) + (tie-next uint32 4 :offset-assert 64) ;; guessed by decompiler + (tie-scissor-next uint32 :offset-assert 64) + (tie-near-next uint32 :offset-assert 68) + (tie-mid-next uint32 :offset-assert 72) + (tie-far-next uint32 :offset-assert 76) + (trans-next uint32 4 :offset-assert 64) ;; guessed by decompiler + (trans-scissor-next uint32 4 :offset-assert 64) ;; guessed by decompiler + (trans-near-next uint32 :offset-assert 68) + (trans-mid-next uint32 :offset-assert 72) + (trans-far-next uint32 :offset-assert 76) + (water-next uint32 4 :offset-assert 64) ;; guessed by decompiler + (water-scissor-next uint32 4 :offset-assert 64) ;; guessed by decompiler + (water-near-next uint32 :offset-assert 68) + (water-mid-next uint32 :offset-assert 72) + (water-far-next uint32 :offset-assert 76) + (envmap-next uint32 4 :offset-assert 80) ;; guessed by decompiler + (envmap-scissor-next uint32 4 :offset-assert 80) ;; guessed by decompiler + (envmap-near-next uint32 :offset-assert 84) + (envmap-mid-next uint32 :offset-assert 88) + (envmap-far-next uint32 :offset-assert 92) + (generic-next uint32 3 :offset-assert 96) ;; guessed by decompiler + (generic-near-next uint32 :offset-assert 96) + (generic-mid-next uint32 :offset-assert 100) + (generic-far-next uint32 :offset-assert 104) + (vanish-next uint32 :offset-assert 108) + (tie-count uint16 4 :offset-assert 112) ;; guessed by decompiler + (tie-scissor-count uint16 :offset-assert 112) + (tie-near-count uint16 :offset-assert 114) + (tie-mid-count uint16 :offset-assert 116) + (tie-far-count uint16 :offset-assert 118) + (trans-count uint16 4 :offset-assert 112) ;; guessed by decompiler + (trans-scissor-count uint16 :offset-assert 112) + (trans-near-count uint16 :offset-assert 114) + (trans-mid-count uint16 :offset-assert 116) + (trans-far-count uint16 :offset-assert 118) + (water-count uint16 4 :offset-assert 112) ;; guessed by decompiler + (water-scissor-count uint16 :offset-assert 112) + (water-near-count uint16 :offset-assert 114) + (water-mid-count uint16 :offset-assert 116) + (water-far-count uint16 :offset-assert 118) + (envmap-count uint16 4 :offset-assert 120) ;; guessed by decompiler + (envmap-scissor-count uint16 :offset-assert 120) + (envmap-near-count uint16 :offset-assert 122) + (envmap-mid-count uint16 :offset-assert 124) + (envmap-far-count uint16 :offset-assert 126) + (generic-count uint16 3 :offset-assert 128) ;; guessed by decompiler + (generic-near-count uint16 :offset-assert 128) + (generic-mid-count uint16 :offset-assert 130) + (generic-far-count uint16 :offset-assert 132) + (vanish-count uint16 :offset-assert 134) + (next-clear uint128 3 :offset-assert 64) ;; guessed by decompiler + (count-clear uint64 3 :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xb8 + :flag-assert #x9000000b8 + ) +|# + +#| +(deftype prototype-array-tie (array) + ((type type :offset-assert 0) ;; guessed by decompiler + (length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (content-type type :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (prototype-array-tie-method-9 () none) ;; 9 ;; (prototype-array-tie-method-9 () none) + ) + ) +|# + +#| +(deftype proxy-prototype-array-tie (basic) + ((prototype-array-tie prototype-array-tie :offset-assert 4) ;; guessed by decompiler + (wind-vectors uint32 :offset-assert 8) + (wind-count uint16 :offset-assert 12) + (prototype-max-qwc uint16 :offset-assert 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype prototype-node (structure) + ((prototype basic :offset-assert 0) + (level basic :offset-assert 4) + (id int16 :offset-assert 8) + (next-prototype int16 :offset-assert 10) + (next-child int16 :offset-assert 12) + (prev-child int16 :offset-assert 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype prototype-node-group (basic) + ((next-prototype int16 :offset-assert 4) + (next-free int16 :offset-assert 6) + (next-child-prototype UNKNOWN 19 :offset-assert 8) + (data UNKNOWN 512 :offset-assert 48) + ) + :method-count-assert 15 + :size-assert #x2030 + :flag-assert #xf00002030 + (:methods + (prototype-node-group-method-9 () none) ;; 9 + (prototype-node-group-method-10 () none) ;; 10 + (prototype-node-group-method-11 () none) ;; 11 + (prototype-node-group-method-12 () none) ;; 12 + (prototype-node-group-method-13 () none) ;; 13 + (prototype-node-group-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype instance (drawable) + ((bucket-index uint16 :offset-assert 6) + (origin matrix4h :inline :offset-assert 32) + (flags uint16 :offset-assert 46) ;; instance-flags + (wind-index uint16 :offset-assert 62) + ) + :method-count-assert 17 + :size-assert #x40 + :flag-assert #x1100000040 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; joint-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type joint-control basic) + +(defenum joint-control-command + :type uint64 + (push 1) + (blend 2) + (four 4) + (eight 8) + (push1 19) + (jcc32 32) + (stack 36) + (float 42) + (stack1 52) + ) + +(defenum joint-control-status + :type uint16 + :bitfield #t + + (sync-math 0) ;; 1 + (spooling 1) ;; 2 + (spooling-not-last-block 2) ;; 4 + (blend-shape 3) ;; 8 + (math-when-off-screen 4) ;; 16 + (valid-spooled-frame 5) ;; 32 + (blend-shape-valid 6) ;; 64 + (eye-anim-valid 7) ;; 128 + (eye-anim 8) ;; 256 + (force-math 9) + (no-joint-callbacks 10) + ) + +(declare-type effect-control basic) + +(deftype joint-control-channel (structure) + "A single animation channel that controls a number of joints. + Multiple channels are used to blend animations together." + ((parent joint-control :offset-assert 0) ;; guessed by decompiler + (frame-group art-joint-anim :offset-assert 4) ;; guessed by decompiler + (frame-num float :offset-assert 8) + (dist meters :offset-assert 12) + (num-func (function joint-control-channel float float float float) :offset-assert 16) ;; guessed by decompiler + (param float 3 :offset-assert 20) ;; guessed by decompiler + (frame-interp float 2 :offset-assert 32) ;; guessed by decompiler + (inspector-amount uint8 :offset-assert 40) + (command uint64 :offset-assert 48) ;; joint-control-command + (group-sub-index int8 :offset-assert 56) + (group-size int8 :offset-assert 57) + (eval-time uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype top-anim-joint-control (basic) + ((process (pointer process-drawable) :offset-assert 4) ;; guessed by decompiler + (interp-select uint64 2 :offset-assert 8) ;; guessed by decompiler + (base-anim basic :offset-assert 24) + (base-anim-speed float :offset-assert 28) + (base-anim-blend float :offset-assert 32) + (interp float :offset-assert 36) + (frame-group art-joint-anim :offset-assert 40) ;; guessed by decompiler + (frame-group-push art-joint-anim :offset-assert 44) ;; guessed by decompiler + (frame-num float :offset-assert 48) + (frame-targ art-joint-anim :offset-assert 52) ;; guessed by decompiler + (frame-speed float :offset-assert 56) + (frame-blend float :offset-assert 60) + (frame-cur-blend float :offset-assert 64) + (frame-start float :offset-assert 68) + (frame-post-blend float :offset-assert 72) + (frame-post-end float :offset-assert 76) + (frame-push-time time-frame :offset-assert 80) ;; time-frame + (frame-post-put-away basic :offset-assert 88) + (update-time time-frame :offset-assert 96) ;; time-frame + ) + :method-count-assert 13 + :size-assert #x68 + :flag-assert #xd00000068 + (:methods + (new (symbol type process-drawable) _type_) ;; 0 + (reset (_type_) none) ;; 9 + (update (_type_) none) ;; 10 + (get-channel (_type_ int) joint-control-channel) ;; 11 + (push-anim-to-targ (_type_ art-joint-anim float int int float float symbol) none) ;; 12 + ) + ) + +(deftype joint-control (basic) + "Every [[process-drawable]] has a [[joint-control]] that handles all the animation channels." + ((status joint-control-status :offset-assert 4) + (allocated-length uint8 :offset-assert 6) + (active-channels uint8 :offset-assert 7) + (root-channel (inline-array joint-control-channel) :offset 16) ;; guessed by decompiler + (blend-index uint8 :offset-assert 20) + (active-frame-interp uint8 :offset-assert 21) + (float-channels uint8 :offset-assert 22) + (generate-frame-function (function joint-anim-frame int joint-control int) :offset-assert 24) ;; guessed by decompiler + (prebind-function (function joint-anim-frame int joint-control int) :offset-assert 28) ;; guessed by decompiler + (postbind-function (function draw-control cspace-array joint-control none) :offset-assert 32) ;; guessed by decompiler + (effect effect-control :offset-assert 36) ;; guessed by decompiler + (interp-select int64 2 :offset-assert 40) ;; guessed by decompiler + ;;(UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (top-anim top-anim-joint-control :offset-assert 56) ;; guessed by decompiler + (override (array float) :offset-assert 60) ;; guessed by decompiler + (channel joint-control-channel :dynamic :inline :offset-assert 64) ;; guessed by decompiler + ;;(UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 13 + :size-assert #x40 + :flag-assert #xd00000040 + ;; field joint-control-status is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (joint-control-method-9 () none) ;; 9 ;; (current-cycle-distance (_type_) float) + (joint-control-method-10 () none) ;; 10 ;; (update-anim-data (_type_) none) + (joint-control-method-11 () none) ;; 11 ;; (debug-print-channels (_type_ symbol) int) + (joint-control-method-12 () none) ;; 12 ;; (joint-control-method-12 (_type_ int) joint-control-channel) + ) + ) + +#| +(deftype matrix-stack (structure) + ((top matrix :offset-assert 0) + (data matrix 24 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x610 + :flag-assert #x900000610 + ) +|# + +#| +(deftype channel-upload-info (structure) + ((fixed joint-anim-compressed-fixed :offset-assert 0) + (fixed-qwc int32 :offset-assert 4) + (frame joint-anim-compressed-frame :offset-assert 8) + (frame-qwc int32 :offset-assert 12) + (amount float :offset-assert 16) + (interp float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype joint-work (structure) + ((temp-mtx matrix :inline :offset-assert 0) + (joint-stack matrix-stack :inline :offset-assert 64) + (fix-jmp-table (function none) 16 :offset-assert 1616) ;; guessed by decompiler + (frm-jmp-table (function none) 16 :offset-assert 1680) ;; guessed by decompiler + (pair-jmp-table (function none) 16 :offset-assert 1744) ;; guessed by decompiler + (uploads channel-upload-info 24 :offset-assert 1808) ;; guessed by decompiler + (num-uploads int32 :offset-assert 2384) + (mtx-acc matrix 2 :offset-assert 2400) ;; guessed by decompiler + (tq-acc transformq 100 :offset-assert 2528) ;; guessed by decompiler + (jacp-hdr joint-anim-compressed-hdr :inline :offset-assert 7328) + (fixed-data joint-anim-compressed-fixed :inline :offset-assert 7392) + (frame-data joint-anim-compressed-frame 2 :offset-assert 9600) ;; guessed by decompiler + (flatten-array float 576 :offset-assert 2400) ;; guessed by decompiler + (flattened vector 24 :offset-assert 2400) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x3640 + :flag-assert #x900003640 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bones-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype bone-buffer (structure) + ((joint matrix 16 :offset-assert 0) ;; guessed by decompiler + (bone bone 16 :offset-assert 1024) ;; guessed by decompiler + (output pris-mtx 16 :offset-assert 2304) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1100 + :flag-assert #x900001100 + ) +|# + +#| +(deftype bone-layout (structure) + ((data uint16 8 :offset-assert 0) ;; guessed by decompiler + (joint (inline-array matrix) 2 :offset-assert 0) ;; guessed by decompiler + (bone (inline-array bone) 2 :offset-assert 8) ;; guessed by decompiler + (output (inline-array pris-mtx) 2 :offset-assert 16) ;; guessed by decompiler + (unused uint32 2 :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype bone-regs (structure) + ((dma-buf dma-buffer :offset-assert 0) ;; guessed by decompiler + (wait-count uint32 :offset-assert 4) + (in-count uint32 :offset-assert 8) + (sp-size uint32 :offset-assert 12) + (sp-bufnum uint32 :offset-assert 16) + (joint-ptr (inline-array joint) :offset-assert 20) ;; guessed by decompiler + (bone-ptr (inline-array bone) :offset-assert 24) ;; guessed by decompiler + (num-bones uint32 :offset-assert 28) + (mtxs (inline-array pris-mtx) :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype bone-work (structure) + ((layout bone-layout :inline :offset-assert 0) + (regs bone-regs :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +#| +(deftype bone-debug (structure) + ((time-ctr uint32 :offset-assert 0) + (timing uint32 360 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x5a4 + :flag-assert #x9000005a4 + ) +|# + +#| +(deftype bone-memory (structure) + ((work bone-work :inline :offset-assert 0) + (buffer bone-buffer 2 :offset-assert 80) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2250 + :flag-assert #x900002250 + ) +|# + +#| +(deftype bone-calculation (structure) + ((flags uint16 :offset-assert 0) ;; bone-calc-flags + (num-bones uint16 :offset-assert 2) + (matrix-area (inline-array pris-mtx) :offset-assert 4) ;; guessed by decompiler + (joints (inline-array joint) :offset-assert 8) ;; guessed by decompiler + (bones (inline-array bone) :offset-assert 12) ;; guessed by decompiler + (ripple-scale float :offset-assert 16) + (ripple-y-scale float :offset-assert 20) + (ripple-normal-scale float :offset-assert 24) + (ripple-area (inline-array vector) :offset-assert 28) ;; guessed by decompiler + (next bone-calculation :offset-assert 32) + (dummy-1 uint32 :offset-assert 36) + (dummy-2 uint32 :offset-assert 40) + (dummy-3 uint32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype bone-calculation-list (structure) + ((first bone-calculation :offset-assert 0) + (next bone-calculation :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; foreground-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++foreground:merc-mode +(defenum merc-mode + :type int32 + (merc 0) + (emerc 1) + (mercneric 2) + (texture 3) + (mercneric2 4) + (mm5 5) + ) +;; ---foreground:merc-mode + +(declare-type merc-effect structure) + +(deftype mercneric-chain (structure) + "A DMA chain for drawing with mercneric, and metadata needed to append. + This chain is assumed to run with a specific tpage from a specific level available." + ((first uint32 :offset-assert 0) + (next uint32 :offset-assert 4) + (state generic-bucket-state :inline :offset-assert 8) + (vu1-bucket bucket-id :offset-assert 16) ;; bucket-id + ) + :pack-me + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype merc-chain (structure) + "A DMA chain for drawing with merc. + This chain is assumed to run with a specific tpage from a specific level available." + ((first dma-packet :offset-assert 0) + (patch dma-packet :offset-assert 4) + (vu1-bucket bucket-id :offset-assert 8) ;; bucket-id + ) + :pack-me + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype foreground-bucket (structure) + "A foreground bucket is merc, emerc, and mercneric chain for a given texture mode." + ((merc merc-chain :inline :offset-assert 0) + (emerc merc-chain :inline :offset-assert 12) + (mercneric mercneric-chain :inline :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +;; TODO: Figure out buckets for Jak X (current list is Jak 3) +(deftype foreground-level-buckets (structure) + "Collection of buckets for a single level. + Each bucket has a different texture. The order is: + tfrag, pris, shrub, alpha, water, pris, pris2" + ((data foreground-bucket 10 :inline :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1e0 + :flag-assert #x9000001e0 + ) + +(deftype foreground-bucket-grid (structure) + "Array of buckets for each level, plus the single warp chain shared between everybody." + ((level-buckets foreground-level-buckets 19 :inline :offset-assert 0) ;; guessed by decompiler + (warp-chain mercneric-chain :inline :offset-assert 9120) + ) + :method-count-assert 9 + :size-assert #x23b4 + :flag-assert #x9000023b4 + ) + +(deftype foreground-regs (structure) + "Frequently accessed foreground values. These are in scratchpad for fast access + during foreground processing." + ((dist float :offset-assert 0) + (merc-used uint32 :offset-assert 4) + (emerc-used uint32 :offset-assert 8) + (mercneric-used uint32 :offset-assert 12) + (use-isometric uint32 :offset-assert 16) + (base-start dma-packet :offset-assert 20) + (joint-ptr (inline-array joint) :offset-assert 24) ;; guessed by decompiler + (bone-ptr (inline-array bone) :offset-assert 28) ;; guessed by decompiler + (num-bones uint32 :offset-assert 32) + (mtxs (inline-array pris-mtx) :offset-assert 36) ;; guessed by decompiler + (dma-buf dma-buffer :offset-assert 40) ;; guessed by decompiler + (default-texture-index uint32 :offset-assert 44) + (mercneric-chain mercneric-chain :offset-assert 48) + (level-buckets foreground-level-buckets :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) + +(deftype foreground-work (structure) + "Memory map for scratchpad during foreground processing. + This is not used by the renderers, bone matrix, or joint code - just the code + that assigns stuff to buckets and prepares DMA for merc (or requests for generic merc)." + ((regs foreground-regs :inline :offset-assert 0) + (draw-index-map uint8 19 :offset 64) ;; guessed by decompiler + (grid foreground-bucket-grid :inline :offset-assert 96) + (bounds sphere :inline :offset-assert 9248) + (lights vu-lights :inline :offset-assert 9264) + (distance vector :inline :offset-assert 9376) + (next-tmpl dma-packet :inline :offset-assert 9392) + ) + :method-count-assert 9 + :size-assert #x24c0 + :flag-assert #x9000024c0 + ) + +(deftype texscroll-globals (structure) + "List of all merc-effects that need texscroll applied." + ((requests int32 :offset-assert 0) + (effects merc-effect 32 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) + +(deftype merc-effect-bucket-info (structure) + "Scratch info computed per-merc-effect by the foreground code, then later read by merc + DMA generation. This is only for the currently-processing merc model's effects." + ((color-fade rgba :offset-assert 0) ;; guessed by decompiler + (alpha uint8 :offset 3) ;; added + (merc-path uint8 :offset-assert 4) + (ignore-alpha uint8 :offset-assert 5) + (disable-draw uint8 :offset-assert 6) + (disable-envmap uint8 :offset-assert 7) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype merc-bucket-info (structure) + "Scratch info for the current merc-ctrl. Written by the foreground code, read by merc DMA generation." + ((light vu-lights :inline :offset-assert 0) + (needs-clip int32 :offset-assert 112) + (need-mercprime-if-merc int32 :offset-assert 116) + (must-use-mercneric-for-clip int32 :offset-assert 120) + (effect merc-effect-bucket-info 64 :inline :offset-assert 124) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x27c + :flag-assert #x90000027c + ) + +(deftype foreground-globals (structure) + "The foreground renderer state: all DMA chains, settings for the current merc-ctrl, texscroll list." + ((foreground-grid foreground-bucket-grid :inline :offset-assert 0) + (merc-bucket-info merc-bucket-info :inline :offset-assert 9152) + (texscroll texscroll-globals :inline :offset-assert 9792) + ) + :method-count-assert 9 + :size-assert #x26c4 + :flag-assert #x9000026c4 + ) + +(deftype shadow-dma-packet (structure) + "DMA tag for submitting shadow data." + ((tag generic-merc-tag :inline :offset-assert 0) + (settings shadow-settings :inline :offset-assert 16) + (geo-ref dma-packet :inline :offset-assert 96) + (mtx-ref dma-packet :inline :offset-assert 112) + (end-tag dma-packet :inline :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) + +(define-extern invalidate-cache-line (function pointer int)) +(define-extern *bucket-map* (pointer bucket-id-16)) +(define-extern vu1-bucket-map "Map from level, texture, mode to bucket-id." (function int int merc-mode bucket-id)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; engines ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++engines:part-local-space-flags +(defenum part-local-space-flags + :type uint32 + :bitfield #t + (pls0 0) + (pls1 1) + (pls2 2) + ) +;; ---engines:part-local-space-flags + +(deftype particle-local-space-info (connection) + ((params basic 3 :offset 20 :score 1) ;; guessed by decompiler + (mat-prev matrix :inline :offset-assert 32) + (mat-new matrix :inline :offset-assert 96) + (hand uint64 :offset-assert 160) ;; handle + (flags part-local-space-flags :offset-assert 168) ;; guessed by decompiler + (pad uint32 1 :offset-assert 172) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #xb0 + :flag-assert #xe000000b0 + ;; field param1 uses ~A with a signed load. field param2 uses ~A with a signed load. field param3 uses ~A with a signed load. + ) + +(define-extern *background-draw-engine* engine) +(define-extern *matrix-engine* (array handle)) +(define-extern *cloth-engine* (array handle)) +(define-extern *part-engine* engine) +(define-extern *cam-post-hook-engine* engine) +(define-extern *part-local-space-engine* engine) +(define-extern *camera-engine* engine) +(define-extern *debug-engine* engine) +(define-extern *pad-engine* engine) +(define-extern *lightning-engine* engine) +(define-extern *hud-engine* engine) +(define-extern *prim-client-engine* engine) +(define-extern *prim-engine* engine) +(define-extern *task-manager-engine* engine) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lightning-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype lightning-spec (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (flags uint16 :offset-assert 8) ;; lightning-spec-flags + (rand-func uint8 :offset-assert 10) + (adjust-distance uint8 :offset-assert 11) + (start-color rgba :offset-assert 12) ;; guessed by decompiler + (end-color rgba :offset-assert 16) ;; guessed by decompiler + (fade-to-color rgba :offset-assert 20) ;; guessed by decompiler + (fade-start-factor float :offset-assert 24) + (fade-time float :offset-assert 28) + (texture texture-id :offset-assert 32) ;; guessed by decompiler + (reduction float :offset-assert 36) + (num-points int32 :offset-assert 40) + (box-size float :offset-assert 44) + (merge-factor float :offset-assert 48) + (merge-count int32 :offset-assert 52) + (radius float :offset-assert 56) + (duration float :offset-assert 60) + (duration-rand float :offset-assert 64) + (sound sound-spec :offset-assert 68) + (delay float :offset-assert 72) + (delay-rand float :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype lightning-state (structure) + ((mode uint8 :offset-assert 0) + (counter float :offset-assert 4) + (points-to-draw int32 :offset-assert 8) + (box-size float :offset-assert 12) + (gcf-control gcf-control :inline :offset-assert 16) + (line vector-array :offset-assert 128) ;; guessed by decompiler + (meet vector-array :offset-assert 132) ;; guessed by decompiler + (path vector-array :offset-assert 136) ;; guessed by decompiler + (start-color rgba :offset-assert 140) ;; guessed by decompiler + (end-color rgba :offset-assert 144) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x94 + :flag-assert #x900000094 + ) +|# + +#| +(deftype lightning-control (basic) + ((spec lightning-spec :offset-assert 4) ;; guessed by decompiler + (process (pointer process) :offset-assert 8) ;; guessed by decompiler + (state lightning-state :inline :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #xa4 + :flag-assert #xe000000a4 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type lightning-spec process float) _type_) + (lightning-control-method-9 () none) ;; 9 ;; (change-mode (_type_ lightning-mode) lightning-mode) + (lightning-control-method-10 () none) ;; 10 ;; (get-mode (_type_) lightning-mode) + (lightning-control-method-11 () none) ;; 11 ;; (set-point! (_type_ int vector) none) + (lightning-control-method-12 () none) ;; 12 ;; (set-first-meet-point (_type_ vector) none) + (lightning-control-method-13 () none) ;; 13 ;; (set-last-meet-point (_type_ vector) none) + ) + ) +|# + +#| +(deftype lightning-probe-vars (basic) + ((src-joint-index uint32 :offset-assert 4) + (next-spawn-time uint64 :offset-assert 8) ;; time-frame + (last-valid-time uint64 :offset-assert 16) ;; time-frame + (point vector 2 :offset-assert 32) ;; guessed by decompiler + (start-pos vector :inline :offset-assert 32) + (end-pos vector :inline :offset-assert 48) + (probe-dirs (inline-array vector) :offset-assert 64) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +;; (define-extern lookup-lightning-spec-by-name function) ;; (function string lightning-spec) +;; (define-extern *lightning-probe-vars* lightning-probe-vars) ;; lightning-probe-vars + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; res ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; res-lump is already defined! + +(define-extern *res-static-buf* pointer) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lights ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *light-hash-work* object) ;; light-hash-work +;; (define-extern light-slerp function) ;; (function light light light float light) +;; (define-extern light-group-slerp function) ;; (function light-group light-group light-group float light-group) +;; (define-extern light-group-process! function) ;; (function vu-lights light-group vector vector none) +;; (define-extern *default-lights* object) ;; vu-lights +;; (define-extern vu-lights-default! function) ;; (function vu-lights vu-lights) +;; (define-extern init-light-hash function) ;; (function none) +;; (define-extern light-hash-count-items function) ;; (function light-hash light-sphere none) +;; (define-extern light-hash-add-items function) ;; (function light-hash light-sphere integer object) +;; (define-extern reset-light-hash function) ;; (function none) +;; (define-extern update-light-hash function) ;; (function light-hash none) +;; (define-extern lookup-light-sphere-by-name function) ;; (function string light-hash light-sphere) +;; (define-extern light-hash-get-bucket-index function) ;; (function light-hash vector int) +;; (define-extern add-light-sphere-to-light-group function) ;; (function object object object object object) +;; (define-extern light-merge! function) ;; (function light-group light-group none) +;; (define-extern light-group-scale! function) ;; (function light-group (pointer light-group) float none) +;; (define-extern light-group-madd! function) ;; (function light-group (pointer light-group) light-group float none) +;; (define-extern light-group-lerp! function) ;; (function light-group (pointer light-group) light-group float none) +;; (define-extern shadow-info-copy! function) ;; (function light-group light-group none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dynamics-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype dynamics (basic) + ((name symbol :offset-assert 4) ;; guessed by decompiler + (gravity-max meters :offset-assert 8) + (gravity-length meters :offset-assert 12) + (gravity vector :inline :offset-assert 16) + (gravity-normal vector :inline :offset-assert 32) + (walk-distance meters :offset-assert 48) + (run-distance meters :offset-assert 52) + ) + :method-count-assert 10 + :size-assert #x38 + :flag-assert #xa00000038 + (:methods + (set-gravity-length (_type_ float) none) ;; 9 + ) + ) + +(define-extern time-to-apex function) ;; (function float float int) +(define-extern time-to-ground function) ;; (function float float float int) +(define-extern *standard-dynamics* dynamics) ;; dynamics + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; pat-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype pat-surface (uint32) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype pat-mode-info (structure) + ((name string :offset-assert 0) ;; guessed by decompiler + (wall-angle float :offset-assert 4) + (color rgba :offset-assert 8) ;; guessed by decompiler + (hilite-color rgba :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern pat-material->string (function pat-surface string)) +(define-extern pat-mode->string (function pat-surface string)) +(define-extern pat-event->string (function pat-surface string)) +(define-extern *pat-mode-info* (inline-array pat-mode-info)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; fact-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype fact-bank (basic) + ((eco-level-max float :offset-assert 4) + (eco-single-inc float :offset-assert 8) + (eco-full-inc float :offset-assert 12) + (eco-single-timeout seconds :offset-assert 16) + (eco-full-timeout seconds :offset-assert 24) + (dummy seconds :offset-assert 32) + (health-max-default float :offset-assert 40) + (health-max-max float :offset-assert 44) + (health-small-inc float :offset-assert 48) + (health-single-inc float :offset-assert 52) + (health-default-inc float :offset-assert 56) + (eco-pill-green-max-default float :offset-assert 60) + (eco-pill-dark-max-default float :offset-assert 64) + (eco-pill-light-max-default float :offset-assert 68) + (eco-green-max-default float :offset-assert 72) + (default-eco-pill-green-inc float :offset-assert 76) + (default-eco-pill-dark-inc float :offset-assert 80) + (default-eco-pill-light-inc float :offset-assert 84) + (buzzer-max-default float :offset-assert 88) + (buzzer-single-inc float :offset-assert 92) + (suck-bounce-dist meters :offset-assert 96) + (suck-suck-dist meters :offset-assert 100) + (shield-max float :offset-assert 104) + (shield-use-speed float :offset-assert 108) + (shield-time-min seconds :offset-assert 112) + (trick-point-max float :offset-assert 120) + (super-skill-inc float :offset-assert 124) + (darkjak-spin-inc float :offset-assert 128) + (darkjak-punch-inc float :offset-assert 132) + (darkjak-flop-inc float :offset-assert 136) + (darkjak-uppercut-inc float :offset-assert 140) + (darkjak-bomb0-inc float :offset-assert 144) + (darkjak-bomb1-inc float :offset-assert 148) + (darkjak-smack-inc float :offset-assert 152) + (darkjak-bomb-min float :offset-assert 156) + (darkjak-button-invis-inc float :offset-assert 160) + ) + :method-count-assert 9 + :size-assert #xa4 + :flag-assert #x9000000a4 + ) +|# + +#| +(deftype fact-info (basic) + ((process process :offset-assert 4) ;; guessed by decompiler + (pickup-amount float :offset-assert 12) + (pickup-spawn-amount float :offset-assert 16) + (options actor-option :offset-assert 24) + (fade-time uint64 :offset-assert 32) ;; time-frame + ) + :method-count-assert 12 + :size-assert #x28 + :flag-assert #xc00000028 + ;; field actor-option is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process pickup-type float) _type_) + (fact-info-method-9 () none) ;; 9 ;; (drop-pickup (_type_ symbol process-tree fact-info int symbol) (pointer process)) + (fact-info-method-10 () none) ;; 10 ;; (reset! (_type_ symbol) none) + (fact-info-method-11 () none) ;; 11 ;; (pickup-collectable! (_type_ pickup-type float handle) float) + ) + ) +|# + +#| +(deftype fact-info-enemy (fact-info) + ((process process :offset-assert 0) ;; guessed by decompiler + (pickup-amount float :offset-assert 8) + (pickup-spawn-amount float :offset-assert 12) + (options actor-option :offset-assert 20) + (fade-time uint64 :offset-assert 28) ;; time-frame + (speed float :offset-assert 36) + (idle-distance meters :offset-assert 40) + (notice-top meters :offset-assert 44) + (notice-bottom meters :offset-assert 48) + (cam-horz meters :offset-assert 52) + (cam-vert meters :offset-assert 56) + (cam-notice-dist meters :offset-assert 60) + (enemy-options enemy-option :offset-assert 64) + (trig-dist meters :offset-assert 68) + (trig-actor-group (pointer actor-group) :offset-assert 72) ;; guessed by decompiler + (trig-mask-count int8 :offset-assert 76) + (trig-mask uint8 2 :offset-assert 77) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #x53 + :flag-assert #xd00000053 + ;; field actor-option is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process (pointer float)) _type_) + (fact-info-enemy-method-12 () none) ;; 12 ;; (clear-mask-bits (_type_ int) none) + ) + ) +|# + +#| +(deftype fact-info-crate (fact-info) + ((process process :offset-assert 0) ;; guessed by decompiler + (pickup-amount float :offset-assert 8) + (pickup-spawn-amount float :offset-assert 12) + (options actor-option :offset-assert 20) + (fade-time uint64 :offset-assert 28) ;; time-frame + (suck-count int32 :offset-assert 36) + ) + :method-count-assert 12 + :size-assert #x2c + :flag-assert #xc0000002c + ;; field actor-option is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process pickup-type float) _type_) + ) + ) +|# + +#| +(deftype fact-info-enemy-defaults (basic) + ((idle-distance meters :offset-assert 4) + (pickup-type int32 :offset-assert 8) + (pickup-amount float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +;; (define-extern *FACT-bank* fact-bank) ;; fact-bank +;; (define-extern pickup-type->string function) ;; (function pickup-type string) +;; (define-extern *fact-info-enemy-defaults* fact-info-enemy-defaults) ;; fact-info-enemy-defaults + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; penetrate-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++penetrate-h:knocked-type +(defenum knocked-type + :type uint8 + (none 0) + (mech-punch 1) + (explode-or-darkjak 2) + (dark-shot 3) + (yellow-shot 4) + (red-shot 5) + (blue-shot 6) + (vehicle 7) + ) +;; ---penetrate-h:knocked-type + +;; +++penetrate-h:penetrate +(defenum penetrate + :type uint64 + :bitfield #t + (touch 0) + (generic-attack 1) + (lunge 2) + (flop 3) + (punch 4) + (spin 5) + (roll 6) + (uppercut 7) + (bonk 8) + (tube 9) + (vehicle 10) + (flut-attack 11) + (board 12) + (mech 13) + (mech-punch 14) + (mech-bonk 15) + (dark-skin 16) + (dark-punch 17) + (dark-bomb 18) + (dark-smack 19) + (flut 20) + (shield 21) + (explode 22) + (jak-yellow-shot 23) + (jak-red-shot 24) + (jak-blue-shot 25) + (jak-dark-shot 26) + (enemy-yellow-shot 27) + (enemy-dark-shot 28) + (eco-yellow 29) + (eco-red 30) + (eco-blue 31) + (eco-green 32) + (knocked 33) + (jak-res-shockwave 34) + (jak-dark-nuke 35) + (jak-dark-blackhole 36) + (emp-blast 37) + ) +;; ---penetrate-h:penetrate + +(define-extern penetrate->string (function penetrate object)) +(define-extern penetrate-using->damage (function penetrate float)) +(define-extern penetrated-by-all&hit-points->penetrated-by (function penetrate int penetrate)) +(define-extern pu->knocked-type (function penetrate knocked-type)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-1-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-2-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-3-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-localization-params (structure) + ((character-encoding-type int32 :offset-assert 0) + (language-type int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-memory-callback-params (structure) + ((pf-malloc-callback basic :offset-assert 0) + (pf-realloc-callback basic :offset-assert 4) + (pf-free-callback basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype net-dme-version (structure) + ((n-version uint32 :offset-assert 0) + (sz-version UNKNOWN 16 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype net-type-system-message-data (structure) + ((connection-handle basic :offset-assert 0) + (severity uint8 :offset-assert 4) + (e-encoding-type int32 :offset-assert 8) + (e-language-type int32 :offset-assert 12) + (b-end-of-message uint8 :offset-assert 16) + (n-message-length uint16 :offset-assert 18) + (p-message uint32 :offset-assert 20) + (p-user-data basic :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-update-error (structure) + ((connection-handle basic :offset-assert 0) + (net-error int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype net-update-conn-errors (structure) + ((sizeof-net-update-errors uint32 :offset-assert 0) + (a-errors UNKNOWN 4 :offset-assert 4) + (udperror int32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype net-data (structure) + ((n-size int32 :offset-assert 0) + (p-data basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ;; field p-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-initialize-out-params (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + (sz-version UNKNOWN 16 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype net-connect-out-params (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + (connection-handle basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype net-host-peer-to-peer-out-params (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + (connection-handle basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype net-resolve-addr-out-params (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-incoming-client-out-params (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-client-metric (structure) + ((average-rate float :offset-assert 0) + (max-average-rate float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-bandwidth-info (structure) + ((sends net-client-metric :inline :offset-assert 0) + (send-bytes net-client-metric :inline :offset-assert 8) + (recvs net-client-metric :inline :offset-assert 16) + (recv-bytes net-client-metric :inline :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype net-connection-status (structure) + ((my-connect-status int32 :offset-assert 0) + (n-valid-client-count int32 :offset-assert 4) + (n-connected-client-count int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype sz-ipaddress (structure) + ((data UNKNOWN 16 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype net-type-lookup-response (structure) + ((asz-ipaddresses UNKNOWN 16 :offset-assert 0) + (n-ipaddresses uint32 :offset-assert 256) + (error-code int32 :offset-assert 260) + ) + :method-count-assert 9 + :size-assert #x108 + :flag-assert #x900000108 + ) +|# + +#| +(deftype net-type-lookup-params (structure) + ((sz-host-name UNKNOWN 256 :offset-assert 0) + (sz-server-ip UNKNOWN 16 :offset-assert 256) + (pf-lookup-response basic :offset-assert 272) + ) + :method-count-assert 9 + :size-assert #x114 + :flag-assert #x900000114 + ) +|# + +#| +(deftype rsa-key (structure) + ((key UNKNOWN 16 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype rsa-keypair (structure) + ((public-key rsa-key :inline :offset-assert 0) + (private-key rsa-key :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype net-type-connect-callback-data (structure) + ((connection-handle basic :offset-assert 0) + (connect-status int32 :offset-assert 4) + (failure-reason int32 :offset-assert 8) + (error-code int32 :offset-assert 12) + (p-user-data basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-type-client-connect-callback-data (structure) + ((connection-handle basic :offset-assert 0) + (client-index int32 :offset-assert 4) + (client-ip-string uint32 :offset-assert 8) + (client-status int32 :offset-assert 12) + (user-specified int32 :offset-assert 16) + (p-user-data basic :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-peer-to-peer-host-change-data (structure) + ((connection-handle basic :offset-assert 0) + (host-client-index int32 :offset-assert 4) + (p-user-data basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-token-ownership-notify-data (structure) + ((connection-handle basic :offset-assert 0) + (token-id int32 :offset-assert 4) + (owner-client-index int32 :offset-assert 8) + (error-code int32 :offset-assert 12) + (p-user-data basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-token-params (structure) + ((pf-token-ownership-notify-callback basic :offset-assert 0) + (p-token-ownership-notify-callback-data basic :offset-assert 4) + (b-use-token int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field p-token-ownership-notify-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-system-status-data (structure) + ((connection-handle basic :offset-assert 0) + (status int32 :offset-assert 4) + (error-code int32 :offset-assert 8) + (p-user-data basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-audio-record-data (structure) + ((audio-type int32 :offset-assert 0) + (p-buffer uint32 :offset-assert 4) + (buf-size uint32 :offset-assert 8) + (bytes-stored uint32 :offset-assert 12) + (transport-flags int8 :offset-assert 16) + (p-user-data basic :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-audio-play-data (structure) + ((audio-type int32 :offset-assert 0) + (client-index int32 :offset-assert 4) + (p-buffer uint32 :offset-assert 8) + (buf-size uint32 :offset-assert 12) + (bytes-read uint32 :offset-assert 16) + (p-user-data basic :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-audio-data-characteristics (structure) + ((n-channels-in int32 :offset-assert 0) + (n-bits-per-sample-in int32 :offset-assert 4) + (n-sample-rate-in int32 :offset-assert 8) + (n-channels-out int32 :offset-assert 12) + (n-bits-per-sample-out int32 :offset-assert 16) + (n-sample-rate-out int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype net-color-array (structure) + ((cb-size int32 :offset-assert 0) + (line-size int32 :offset-assert 4) + (xsize int32 :offset-assert 8) + (ysize int32 :offset-assert 12) + (data UNKNOWN 16 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype net-stream-media-video-record-data (structure) + ((p-y net-color-array :offset-assert 0) + (p-cr net-color-array :offset-assert 4) + (p-cb net-color-array :offset-assert 8) + (b-data-stored int32 :offset-assert 12) + (p-user-data basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-rgbarray (structure) + ((cb-size int32 :offset-assert 0) + (line-size int32 :offset-assert 4) + (xsize int32 :offset-assert 8) + (ysize int32 :offset-assert 12) + (data UNKNOWN 16 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype net-stream-media-video-play-data (structure) + ((client-index int32 :offset-assert 0) + (p-rgbarray net-rgbarray :offset-assert 4) + (b-data-processed int32 :offset-assert 8) + (p-user-data basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-video-data-characteristics (structure) + ((xsize int32 :offset-assert 0) + (ysize int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-stream-media-custom-video-record-data (structure) + ((p-buffer uint32 :offset-assert 0) + (n-buffer-size uint32 :offset-assert 4) + (n-bytes-stored uint32 :offset-assert 8) + (transport-flags int8 :offset-assert 12) + (p-user-data basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-custom-video-play-data (structure) + ((client-index int32 :offset-assert 0) + (p-buffer uint32 :offset-assert 4) + (n-bytes-available uint32 :offset-assert 8) + (n-bytes-processed uint32 :offset-assert 12) + (p-user-data basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-params (structure) + ((b-default-set int32 :offset-assert 0) + (b-use-stream-media int32 :offset-assert 4) + (num-channels uint32 :offset-assert 8) + (max-incoming-audio-streams uint32 :offset-assert 12) + (record-no-data-timeout uint32 :offset-assert 16) + (send-buffer-size uint32 :offset-assert 20) + (recv-buffer-size uint32 :offset-assert 24) + (grid-type int32 :offset-assert 28) + (audio-data-characteristics net-audio-data-characteristics :inline :offset-assert 32) + (pf-audio-record-callback basic :offset-assert 56) + (p-audio-record-callback-data basic :offset-assert 60) + (pf-audio-play-callback basic :offset-assert 64) + (p-audio-play-callback-data basic :offset-assert 68) + (video-data-characteristics net-video-data-characteristics :inline :offset-assert 72) + (pf-video-record-callback basic :offset-assert 80) + (p-video-record-callback-data basic :offset-assert 84) + (pf-video-play-callback basic :offset-assert 88) + (p-video-play-callback-data basic :offset-assert 92) + (pf-custom-video-record-callback basic :offset-assert 96) + (p-custom-video-record-callback-data basic :offset-assert 100) + (pf-custom-video-play-callback basic :offset-assert 104) + (p-custom-video-play-callback-data basic :offset-assert 108) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ;; field p-audio-record-callback-data uses ~A with a signed load. field p-audio-play-callback-data uses ~A with a signed load. field p-video-record-callback-data uses ~A with a signed load. field p-video-play-callback-data uses ~A with a signed load. field p-custom-video-record-callback-data uses ~A with a signed load. field p-custom-video-play-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-address (structure) + ((address-type int32 :offset-assert 0) + (address UNKNOWN 16 :offset-assert 4) + (port uint32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype net-address-list (structure) + ((a-address-list UNKNOWN 2 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype net-connection-info (structure) + ((e-type int32 :offset-assert 0) + (address-list net-address-list :inline :offset-assert 4) + (world-id int32 :offset-assert 52) + (server-key rsa-key :inline :offset-assert 56) + (a-session-key UNKNOWN 17 :offset-assert 120) + (a-access-key UNKNOWN 17 :offset-assert 137) + ) + :method-count-assert 9 + :size-assert #x9a + :flag-assert #x90000009a + ) +|# + +#| +(deftype net-connect-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (max-clients int32 :offset-assert 4) + (connection-info net-connection-info :inline :offset-assert 8) + (pf-local-connect-callback basic :offset-assert 164) + (p-local-connect-callback-data basic :offset-assert 168) + (pf-local-disconnect-callback basic :offset-assert 172) + (p-local-disconnect-callback-data basic :offset-assert 176) + (pf-remote-client-connect-callback basic :offset-assert 180) + (p-remote-client-connect-callback-data basic :offset-assert 184) + (pf-remote-client-disconnect-callback basic :offset-assert 188) + (p-remote-client-disconnect-callback-data basic :offset-assert 192) + (pf-peer-to-peer-host-change-callback basic :offset-assert 196) + (p-host-change-callback-data basic :offset-assert 200) + (pf-system-status-callback basic :offset-assert 204) + (p-system-status-callback-data basic :offset-assert 208) + (stream-media-params net-stream-media-params :inline :offset-assert 212) + (user-specified int32 :offset-assert 324) + (aux-udpbind-port int32 :offset-assert 328) + (token-params net-token-params :inline :offset-assert 332) + (b-use-time-base int32 :offset-assert 344) + (send-buffer-size uint32 :offset-assert 348) + (recv-buffer-size uint32 :offset-assert 352) + ) + :method-count-assert 9 + :size-assert #x164 + :flag-assert #x900000164 + ;; field p-local-connect-callback-data uses ~A with a signed load. field p-local-disconnect-callback-data uses ~A with a signed load. field p-remote-client-connect-callback-data uses ~A with a signed load. field p-remote-client-disconnect-callback-data uses ~A with a signed load. field p-host-change-callback-data uses ~A with a signed load. field p-system-status-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-bit-mask (structure) + ((bitmask UNKNOWN 8 :offset-assert 0) + (base-id int32 :offset-assert 32) + (max-id int32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype net-client-list (structure) + ((target-client int32 :offset-assert 0) + (client-mask net-bit-mask :inline :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype net-send-message-in-params (structure) + ((connection-handle basic :offset-assert 0) + (transport-flags int8 :offset-assert 4) + (message-type int32 :offset-assert 8) + (dest-client net-client-list :inline :offset-assert 12) + (message-length int32 :offset-assert 56) + (message-data uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype net-send-message-out-params (structure) + ((error-code int32 :offset-assert 0) + (queued-client net-client-list :inline :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype net-disconnect-params (structure) + ((connection-handle basic :offset-assert 0) + (reason int32 :offset-assert 4) + (pf-local-disconnect-callback basic :offset-assert 8) + (p-user-data basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-latency-metrics-info (structure) + ((latency-min uint32 :offset-assert 0) + (latency-max uint32 :offset-assert 4) + (latency-avg uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype net-latency-metrics-data-args (structure) + ((connection-handle basic :offset-assert 0) + (target-client-index int32 :offset-assert 4) + (latency-metrics-info net-latency-metrics-info :inline :offset-assert 8) + (error-code int32 :offset-assert 20) + (p-user-data basic :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-4-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-latency-metrics-params (structure) + ((connection-handle basic :offset-assert 0) + (target-client-list net-client-list :inline :offset-assert 4) + (pf-latency-metrics-callback basic :offset-assert 48) + (p-user-data basic :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-error-threshold-callback-data (structure) + ((object-index int32 :offset-assert 0) + (field-index int32 :offset-assert 4) + (field-size int32 :offset-assert 8) + (field-count int32 :offset-assert 12) + (p-current-data basic :offset-assert 16) + (p-last-update-data basic :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ;; field p-current-data uses ~A with a signed load. field p-last-update-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-remote-client-event-data (structure) + ((event-type int32 :offset-assert 0) + (connection-handle basic :offset-assert 4) + (client-index int32 :offset-assert 8) + (p-user-data basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-object-filter-data (structure) + ((client-list net-client-list :inline :offset-assert 0) + (object-index int32 :offset-assert 44) + (fields-updated net-bit-mask :inline :offset-assert 48) + (update-type int32 :offset-assert 88) + (p-user-data basic :offset-assert 92) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-type-ownership-update-data (structure) + ((connection-handle basic :offset-assert 0) + (client-index int32 :offset-assert 4) + (object-index int32 :offset-assert 8) + (state int32 :offset-assert 12) + (p-user-data basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-type-ownership-request-data (structure) + ((connection-handle basic :offset-assert 0) + (client-index int32 :offset-assert 4) + (object-index int32 :offset-assert 8) + (p-user-data basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-completion-data (structure) + ((result int32 :offset-assert 0) + (p-user-data basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-smchange-data (structure) + ((connection-handle basic :offset-assert 0) + (smclient-index int32 :offset-assert 4) + (p-user-data basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-join-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (connection-handle basic :offset-assert 4) + (sz-client-name UNKNOWN 12 :offset-assert 8) + (net-object-count int32 :offset-assert 20) + (data-stream-count int32 :offset-assert 24) + (session-master-status int32 :offset-assert 28) + (pf-local-join-callback basic :offset-assert 32) + (p-join-callback-data basic :offset-assert 36) + (pf-remote-client-event-callback basic :offset-assert 40) + (p-remote-client-event-callback-data basic :offset-assert 44) + (pf-smchange-callback basic :offset-assert 48) + (p-smchange-callback-data basic :offset-assert 52) + (pf-ownership-update-callback basic :offset-assert 56) + (p-ownership-update-callback-data basic :offset-assert 60) + (pf-ownership-request-callback basic :offset-assert 64) + (p-ownership-request-callback-data basic :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ;; field connection-handle uses ~A with a signed load. field p-join-callback-data uses ~A with a signed load. field p-remote-client-event-callback-data uses ~A with a signed load. field p-smchange-callback-data uses ~A with a signed load. field p-ownership-update-callback-data uses ~A with a signed load. field p-ownership-request-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-join-out-params (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype anonymous-0 (structure) + ((error-threshold-magnitude float :offset-assert 0) + (pf-threshold-callback basic :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype net-type-client (structure) + ((connect-time uint32 :offset-assert 0) + (client-object-index uint32 :offset-assert 4) + (net-object-buffer-start int32 :offset-assert 8) + (net-object-buffer-count int32 :offset-assert 12) + (net-data-stream-start uint32 :offset-assert 16) + (net-data-stream-count uint32 :offset-assert 20) + (name UNKNOWN 12 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype net-type-data-stream (structure) + ((status uint8 :offset-assert 0) + (circular-buffer uint8 :offset-assert 1) + (remote-buffer uint8 :offset-assert 2) + (stream-type uint8 :offset-assert 3) + (buffer-complete uint8 :offset-assert 4) + (send-to-all uint8 :offset-assert 5) + (target-client-index int32 :offset-assert 8) + (owner-client-index int32 :offset-assert 12) + (buffer-start uint32 :offset-assert 16) + (buffer-end uint32 :offset-assert 20) + (read-ptr uint32 :offset-assert 24) + (write-ptr uint32 :offset-assert 28) + (data-rate int32 :offset-assert 32) + (min-packet-size uint16 :offset-assert 36) + (max-packet-size uint16 :offset-assert 38) + (time-of-last-update uint32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype net-type-short-vector2 (structure) + ((x int16 :offset-assert 0) + (y int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype net-type-short-vector3 (structure) + ((x int16 :offset-assert 0) + (y int16 :offset-assert 2) + (z int16 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) +|# + +#| +(deftype net-type-int-vector2 (structure) + ((x int32 :offset-assert 0) + (y int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-type-int-vector3 (structure) + ((x int32 :offset-assert 0) + (y int32 :offset-assert 4) + (z int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype net-type-float-vector2 (structure) + ((x float :offset-assert 0) + (y float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-type-float-vector3 (structure) + ((x float :offset-assert 0) + (y float :offset-assert 4) + (z float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype net-type-object (structure) + ((structure-index uint8 :offset-assert 0) + (filter-type uint8 :offset-assert 1) + (lifespan-type uint8 :offset-assert 2) + (latency-critical uint8 :offset-assert 3) + (owner-client-index int32 :offset-assert 4) + (creator-client-index int32 :offset-assert 8) + (name UNKNOWN 16 :offset-assert 12) + (current-object-data uint32 :offset-assert 28) + (last-global-object-data-update uint32 :offset-assert 32) + (hi-field-change-set uint32 :offset-assert 36) + (lo-field-change-set uint32 :offset-assert 40) + (time-of-expiration uint32 :offset-assert 44) + (max-update-interval uint32 :offset-assert 48) + (time-of-last-global-update uint32 :offset-assert 52) + (time-of-last-client-update uint32 :offset-assert 56) + (time-of-last-client-field-update uint32 :offset-assert 60) + (local-user-data basic :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ;; field local-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-register-object-filter-in-params (structure) + ((object-filter-call-back basic :offset-assert 0) + (p-user-data basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-register-object-filter-out-params (structure) + ((object-filter-type int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-lanfind-exchange-callback-out-args (structure) + ((b-respond-to-sender int32 :offset-assert 0) + (details net-data :inline :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype net-lanfind-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (session-type int32 :offset-assert 4) + (filter uint32 :offset-assert 8) + (details net-data :inline :offset-assert 12) + (udpport uint32 :offset-assert 20) + (pfn-lanfind-callback basic :offset-assert 24) + (p-user-data basic :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ;; field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-channel-info (structure) + ((connection-handle basic :offset-assert 0) + (channel-num uint32 :offset-assert 4) + (client-count uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-client-info (structure) + ((connection-handle basic :offset-assert 0) + (client-index int32 :offset-assert 4) + (b-joined-to-channel int32 :offset-assert 8) + (channel-num uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype net-stream-media-channel-state-data (structure) + ((b-can-record int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype net-stream-media-ignore-data (structure) + ((b-defaults-set int32 :offset-assert 0) + (connection-handle basic :offset-assert 4) + (client-index int32 :offset-assert 8) + (b-ignore int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype medius-player-online-state (structure) + ((connect-status int32 :offset-assert 0) + (medius-lobby-world-id int32 :offset-assert 4) + (medius-game-world-id int32 :offset-assert 8) + (lobby-name UNKNOWN 64 :offset-assert 12) + (game-name UNKNOWN 64 :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x8c + :flag-assert #x90000008c + ) +|# + +#| +(deftype medius-account-delete-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (master-password UNKNOWN 32 :offset-assert 38) + ) + :method-count-assert 9 + :size-assert #x46 + :flag-assert #x900000046 + ) +|# + +#| +(deftype medius-account-get-idrequest (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-name UNKNOWN 32 :offset-assert 38) + ) + :method-count-assert 9 + :size-assert #x46 + :flag-assert #x900000046 + ) +|# + +#| +(deftype medius-account-get-idresponse (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (account-id int32 :offset-assert 24) + (status-code int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-account-get-profile-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-account-get-profile-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-status int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (birthday-month int16 :offset-assert 64) + (birthday-day int16 :offset-assert 66) + (birthday-year int16 :offset-assert 68) + (first-name UNKNOWN 32 :offset-assert 70) + (last-name UNKNOWN 32 :offset-assert 102) + (middle-name UNKNOWN 32 :offset-assert 134) + (address1 UNKNOWN 32 :offset-assert 166) + (address2 UNKNOWN 32 :offset-assert 198) + (address3 UNKNOWN 32 :offset-assert 230) + (city UNKNOWN 32 :offset-assert 262) + (state UNKNOWN 3 :offset-assert 294) + (province UNKNOWN 32 :offset-assert 297) + (country UNKNOWN 32 :offset-assert 329) + (postal-code UNKNOWN 16 :offset-assert 361) + (email-address UNKNOWN 80 :offset-assert 377) + ) + :method-count-assert 9 + :size-assert #x1c9 + :flag-assert #x9000001c9 + ) +|# + +#| +(deftype medius-account-login-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-name UNKNOWN 32 :offset-assert 38) + (password UNKNOWN 32 :offset-assert 70) + ) + :method-count-assert 9 + :size-assert #x66 + :flag-assert #x900000066 + ) +|# + +#| +(deftype medius-account-login-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-type int32 :offset-assert 32) + (medius-world-id int32 :offset-assert 36) + (connect-info net-connection-info :inline :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #xc2 + :flag-assert #x9000000c2 + ) +|# + +#| +(deftype medius-account-logout-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-account-registration-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-type int32 :offset-assert 40) + (account-name UNKNOWN 32 :offset-assert 44) + (password UNKNOWN 32 :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x6c + :flag-assert #x90000006c + ) +|# + +#| +(deftype medius-account-registration-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-account-update-password-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (old-password UNKNOWN 32 :offset-assert 38) + (new-password UNKNOWN 32 :offset-assert 70) + ) + :method-count-assert 9 + :size-assert #x66 + :flag-assert #x900000066 + ) +|# + +#| +(deftype medius-account-update-profile-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (birthday-month int16 :offset-assert 38) + (birthday-day int16 :offset-assert 40) + (birthday-year int16 :offset-assert 42) + (first-name UNKNOWN 32 :offset-assert 44) + (last-name UNKNOWN 32 :offset-assert 76) + (middle-name UNKNOWN 32 :offset-assert 108) + (address1 UNKNOWN 32 :offset-assert 140) + (address2 UNKNOWN 32 :offset-assert 172) + (address3 UNKNOWN 32 :offset-assert 204) + (city UNKNOWN 32 :offset-assert 236) + (state UNKNOWN 3 :offset-assert 268) + (province UNKNOWN 32 :offset-assert 271) + (country UNKNOWN 32 :offset-assert 303) + (postal-code UNKNOWN 16 :offset-assert 335) + (email-address UNKNOWN 80 :offset-assert 351) + ) + :method-count-assert 9 + :size-assert #x1af + :flag-assert #x9000001af + ) +|# + +#| +(deftype medius-account-update-stats-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (stats UNKNOWN 256 :offset-assert 38) + ) + :method-count-assert 9 + :size-assert #x126 + :flag-assert #x900000126 + ) +|# + +#| +(deftype medius-add-player-to-clan-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (player-account-id int32 :offset-assert 40) + (welcome-message UNKNOWN 200 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #xf4 + :flag-assert #x9000000f4 + ) +|# + +#| +(deftype medius-add-player-to-clan-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-add-to-buddy-list-confirmation-request0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (target-account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-add-to-buddy-list-confirmation-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (target-account-id int32 :offset-assert 40) + (add-type int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-5-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-add-to-buddy-list-confirmation-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (target-account-id int32 :offset-assert 28) + (target-account-name UNKNOWN 32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype medius-add-to-buddy-list-fwd-confirmation-request0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (originator-account-id int32 :offset-assert 24) + (originator-account-name UNKNOWN 32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype medius-add-to-buddy-list-fwd-confirmation-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (originator-account-id int32 :offset-assert 24) + (originator-account-name UNKNOWN 32 :offset-assert 28) + (add-type int32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype medius-add-to-buddy-list-fwd-confirmation-response0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (session-key UNKNOWN 17 :offset-assert 28) + (originator-account-id int32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype medius-add-to-buddy-list-fwd-confirmation-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (session-key UNKNOWN 17 :offset-assert 28) + (originator-account-id int32 :offset-assert 48) + (add-type int32 :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype medius-add-to-buddy-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-add-to-buddy-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-add-to-ignore-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (ignore-account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-add-to-ignore-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-anonymous-login-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (session-display-name UNKNOWN 32 :offset-assert 38) + (session-display-stats UNKNOWN 256 :offset-assert 70) + ) + :method-count-assert 9 + :size-assert #x146 + :flag-assert #x900000146 + ) +|# + +#| +(deftype medius-ban-player-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (ban-account-id int32 :offset-assert 40) + (ban-minutes int32 :offset-assert 44) + (medius-world-id int32 :offset-assert 48) + (app-type int32 :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype medius-ban-player-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-channel-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-channel-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (lobby-name UNKNOWN 64 :offset-assert 28) + (active-player-count int32 :offset-assert 92) + (max-players int32 :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) +|# + +#| +(deftype medius-channel-list-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (page-id uint16 :offset-assert 22) + (page-size uint16 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1a + :flag-assert #x90000001a + ) +|# + +#| +(deftype medius-channel-list-extra-info-response0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (player-count uint16 :offset-assert 32) + (max-players uint16 :offset-assert 34) + (security-level int32 :offset-assert 36) + (generic-field1 uint32 :offset-assert 40) + (lobby-name UNKNOWN 64 :offset-assert 44) + (end-of-list int8 :offset-assert 108) + ) + :method-count-assert 9 + :size-assert #x6d + :flag-assert #x90000006d + ) +|# + +#| +(deftype medius-channel-list-extra-info-response1 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (player-count uint16 :offset-assert 32) + (max-players uint16 :offset-assert 34) + (security-level int32 :offset-assert 36) + (generic-field1 uint32 :offset-assert 40) + (generic-field2 uint32 :offset-assert 44) + (generic-field3 uint32 :offset-assert 48) + (generic-field4 uint32 :offset-assert 52) + (generic-field-level int32 :offset-assert 56) + (lobby-name UNKNOWN 64 :offset-assert 60) + (end-of-list int8 :offset-assert 124) + ) + :method-count-assert 9 + :size-assert #x7d + :flag-assert #x90000007d + ) +|# + +#| +(deftype medius-channel-list-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (player-count uint16 :offset-assert 32) + (max-players uint16 :offset-assert 34) + (game-world-count uint16 :offset-assert 36) + (security-level int32 :offset-assert 40) + (generic-field1 uint32 :offset-assert 44) + (generic-field2 uint32 :offset-assert 48) + (generic-field3 uint32 :offset-assert 52) + (generic-field4 uint32 :offset-assert 56) + (generic-field-level int32 :offset-assert 60) + (lobby-name UNKNOWN 64 :offset-assert 64) + (end-of-list int8 :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x81 + :flag-assert #x900000081 + ) +|# + +#| +(deftype medius-channel-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (page-id int16 :offset-assert 38) + (page-size int16 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2a + :flag-assert #x90000002a + ) +|# + +#| +(deftype medius-channel-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (lobby-name UNKNOWN 64 :offset-assert 32) + (player-count int32 :offset-assert 96) + (end-of-list int8 :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x65 + :flag-assert #x900000065 + ) +|# + +#| +(deftype medius-chat-fwd-message (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (originator-account-id int32 :offset-assert 24) + (originator-account-name UNKNOWN 32 :offset-assert 28) + (message-type int32 :offset-assert 60) + (message UNKNOWN 64 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype medius-chat-message (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (message-type int32 :offset-assert 40) + (target-account-id int32 :offset-assert 44) + (message UNKNOWN 64 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype medius-binary-fwd-message (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (originator-account-id int32 :offset-assert 24) + (message-type int32 :offset-assert 28) + (message UNKNOWN 400 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x1b0 + :flag-assert #x9000001b0 + ) +|# + +#| +(deftype medius-binary-message (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (message-type int32 :offset-assert 40) + (target-account-id int32 :offset-assert 44) + (message UNKNOWN 400 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x1c0 + :flag-assert #x9000001c0 + ) +|# + +#| +(deftype medius-chat-toggle-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (chat-toggle int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-chat-toggle-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-check-my-clan-invitations-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (start int32 :offset-assert 40) + (page-size int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-check-my-clan-invitations-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (clan-invitation-id int32 :offset-assert 28) + (clan-id int32 :offset-assert 32) + (response-status int32 :offset-assert 36) + (message UNKNOWN 200 :offset-assert 40) + (leader-account-id int32 :offset-assert 240) + (leader-account-name UNKNOWN 32 :offset-assert 244) + (end-of-list int8 :offset-assert 276) + ) + :method-count-assert 9 + :size-assert #x115 + :flag-assert #x900000115 + ) +|# + +#| +(deftype medius-clan-ladder-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (clan-ladder-stat-index int32 :offset-assert 24) + (sort-order int32 :offset-assert 28) + (start-position uint32 :offset-assert 32) + (page-size uint32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype medius-clan-ladder-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (clan-id int32 :offset-assert 24) + (clan-name UNKNOWN 32 :offset-assert 28) + (ladder-position uint32 :offset-assert 60) + (status-code int32 :offset-assert 64) + (end-of-list int8 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x45 + :flag-assert #x900000045 + ) +|# + +#| +(deftype medius-clan-ladder-position-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (clan-id int32 :offset-assert 24) + (clan-ladder-stat-index int32 :offset-assert 28) + (sort-order int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-clan-ladder-position-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-position uint32 :offset-assert 24) + (total-rankings uint32 :offset-assert 28) + (status-code int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-clear-game-list-filter-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (filter-field int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-clear-game-list-filter-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-clear-stored-account-info-request (structure) + ((device int32 :offset-assert 0) + (card-port int32 :offset-assert 4) + (card-slot int32 :offset-assert 8) + (account-id int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype medius-clear-stored-account-info-response (structure) + ((confirmation int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype medius-confirm-clan-team-challenge-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-challenge-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-confirm-clan-team-challenge-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-create-channel-request0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (max-players int32 :offset-assert 44) + (lobby-name UNKNOWN 64 :offset-assert 48) + (lobby-password UNKNOWN 32 :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +#| +(deftype medius-create-channel-request1 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (max-players int32 :offset-assert 44) + (lobby-name UNKNOWN 64 :offset-assert 48) + (lobby-password UNKNOWN 32 :offset-assert 112) + (generic-field1 uint32 :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #x94 + :flag-assert #x900000094 + ) +|# + +#| +(deftype medius-create-channel-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (max-players int32 :offset-assert 44) + (lobby-name UNKNOWN 64 :offset-assert 48) + (lobby-password UNKNOWN 32 :offset-assert 112) + (generic-field1 uint32 :offset-assert 144) + (generic-field2 uint32 :offset-assert 148) + (generic-field3 uint32 :offset-assert 152) + (generic-field4 uint32 :offset-assert 156) + (generic-field-level int32 :offset-assert 160) + ) + :method-count-assert 9 + :size-assert #xa4 + :flag-assert #x9000000a4 + ) +|# + +#| +(deftype medius-create-channel-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-create-game-on-self-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (server-version int32 :offset-assert 40) + (max-players-per-world int32 :offset-assert 44) + (application-id int32 :offset-assert 48) + (min-players int32 :offset-assert 52) + (max-players int32 :offset-assert 56) + (game-level int32 :offset-assert 60) + (game-name UNKNOWN 64 :offset-assert 64) + (game-password UNKNOWN 32 :offset-assert 128) + (player-skill-level int32 :offset-assert 160) + (rules-set int32 :offset-assert 164) + (generic-field1 int32 :offset-assert 168) + (generic-field2 int32 :offset-assert 172) + (generic-field3 int32 :offset-assert 176) + (port int32 :offset-assert 180) + (game-host-type int32 :offset-assert 184) + (address-list net-address-list :inline :offset-assert 188) + ) + :method-count-assert 9 + :size-assert #xec + :flag-assert #x9000000ec + ) +|# + +#| +(deftype medius-create-game-on-self-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-create-clan-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (clan-name UNKNOWN 32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype medius-create-clan-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (clan-id int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-6-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-create-game-request0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (min-players int32 :offset-assert 44) + (max-players int32 :offset-assert 48) + (game-level int32 :offset-assert 52) + (game-name UNKNOWN 64 :offset-assert 56) + (game-password UNKNOWN 32 :offset-assert 120) + (player-skill-level int32 :offset-assert 152) + (rules-set int32 :offset-assert 156) + (generic-field1 int32 :offset-assert 160) + (generic-field2 int32 :offset-assert 164) + (generic-field3 int32 :offset-assert 168) + (game-host-type int32 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xb0 + :flag-assert #x9000000b0 + ) +|# + +#| +(deftype medius-create-game-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (min-players int32 :offset-assert 44) + (max-players int32 :offset-assert 48) + (game-level int32 :offset-assert 52) + (game-name UNKNOWN 64 :offset-assert 56) + (game-password UNKNOWN 32 :offset-assert 120) + (spectator-password UNKNOWN 32 :offset-assert 152) + (player-skill-level int32 :offset-assert 184) + (rules-set int32 :offset-assert 188) + (generic-field1 int32 :offset-assert 192) + (generic-field2 int32 :offset-assert 196) + (generic-field3 int32 :offset-assert 200) + (game-host-type int32 :offset-assert 204) + (attributes int32 :offset-assert 208) + ) + :method-count-assert 9 + :size-assert #xd4 + :flag-assert #x9000000d4 + ) +|# + +#| +(deftype medius-create-game-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-delete-clan-message-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-message-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-delete-clan-message-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-disband-clan-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-disband-clan-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-dnas-signature-post (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (dnas-signature-type int32 :offset-assert 40) + (dnas-signature-length int8 :offset-assert 44) + (dnas-signature UNKNOWN 32 :offset-assert 45) + ) + :method-count-assert 9 + :size-assert #x4d + :flag-assert #x90000004d + ) +|# + +#| +(deftype medius-end-game-report (structure) + ((session-key UNKNOWN 17 :offset-assert 0) + (medius-world-id int32 :offset-assert 20) + (winning-team UNKNOWN 64 :offset-assert 24) + (winning-player UNKNOWN 32 :offset-assert 88) + (final-score int32 :offset-assert 120) + ) + :method-count-assert 9 + :size-assert #x7c + :flag-assert #x90000007c + ) +|# + +#| +(deftype medius-error-message (structure) + ((error-code int32 :offset-assert 0) + (error-message UNKNOWN 256 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x104 + :flag-assert #x900000104 + ) +|# + +#| +(deftype medius-find-player-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (search-type int32 :offset-assert 40) + (id int32 :offset-assert 44) + (name UNKNOWN 32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype medius-find-player-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (application-id int32 :offset-assert 28) + (application-name UNKNOWN 32 :offset-assert 32) + (application-type int32 :offset-assert 64) + (medius-world-id int32 :offset-assert 68) + (account-id int32 :offset-assert 72) + (account-name UNKNOWN 32 :offset-assert 76) + (end-of-list int8 :offset-assert 108) + ) + :method-count-assert 9 + :size-assert #x6d + :flag-assert #x90000006d + ) +|# + +#| +(deftype medius-find-world-by-name-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (name UNKNOWN 64 :offset-assert 38) + (world-type int32 :offset-assert 104) + ) + :method-count-assert 9 + :size-assert #x6c + :flag-assert #x90000006c + ) +|# + +#| +(deftype medius-find-world-by-name-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (application-id int32 :offset-assert 28) + (application-name UNKNOWN 32 :offset-assert 32) + (application-type int32 :offset-assert 64) + (medius-world-id int32 :offset-assert 68) + (world-name UNKNOWN 64 :offset-assert 72) + (world-status int32 :offset-assert 136) + (end-of-list int8 :offset-assert 140) + ) + :method-count-assert 9 + :size-assert #x8d + :flag-assert #x90000008d + ) +|# + +#| +(deftype medius-game-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-game-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (application-id int32 :offset-assert 28) + (min-players int32 :offset-assert 32) + (max-players int32 :offset-assert 36) + (game-level int32 :offset-assert 40) + (player-skill-level int32 :offset-assert 44) + (player-count int32 :offset-assert 48) + (game-stats UNKNOWN 256 :offset-assert 52) + (game-name UNKNOWN 64 :offset-assert 308) + (rules-set int32 :offset-assert 372) + (generic-field1 int32 :offset-assert 376) + (generic-field2 int32 :offset-assert 380) + (generic-field3 int32 :offset-assert 384) + (world-status int32 :offset-assert 388) + (game-host-type int32 :offset-assert 392) + ) + :method-count-assert 9 + :size-assert #x18c + :flag-assert #x90000018c + ) +|# + +#| +(deftype medius-game-list-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (page-id uint16 :offset-assert 22) + (page-size uint16 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1a + :flag-assert #x90000001a + ) +|# + +#| +(deftype medius-game-list-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (player-count uint16 :offset-assert 32) + (min-players uint16 :offset-assert 34) + (max-players uint16 :offset-assert 36) + (game-level int32 :offset-assert 40) + (player-skill-level int32 :offset-assert 44) + (rules-set int32 :offset-assert 48) + (generic-field1 int32 :offset-assert 52) + (generic-field2 int32 :offset-assert 56) + (generic-field3 int32 :offset-assert 60) + (security-level int32 :offset-assert 64) + (world-status int32 :offset-assert 68) + (game-host-type int32 :offset-assert 72) + (game-name UNKNOWN 64 :offset-assert 76) + (game-stats UNKNOWN 256 :offset-assert 140) + (end-of-list int8 :offset-assert 396) + ) + :method-count-assert 9 + :size-assert #x18d + :flag-assert #x90000018d + ) +|# + +#| +(deftype medius-game-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (page-id int16 :offset-assert 44) + (page-size int16 :offset-assert 46) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-game-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (game-name UNKNOWN 64 :offset-assert 32) + (world-status int32 :offset-assert 96) + (game-host-type int32 :offset-assert 100) + (player-count int32 :offset-assert 104) + (end-of-list int8 :offset-assert 108) + ) + :method-count-assert 9 + :size-assert #x6d + :flag-assert #x90000006d + ) +|# + +#| +(deftype medius-game-world-player-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-game-world-player-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (stats UNKNOWN 256 :offset-assert 64) + (connection-class int32 :offset-assert 320) + (end-of-list int8 :offset-assert 324) + ) + :method-count-assert 9 + :size-assert #x145 + :flag-assert #x900000145 + ) +|# + +#| +(deftype medius-get-all-announcements-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-all-clan-messages-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (start int32 :offset-assert 40) + (page-size int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-get-all-clan-messages-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (clan-message-id int32 :offset-assert 28) + (message UNKNOWN 200 :offset-assert 32) + (status int32 :offset-assert 232) + (end-of-list int8 :offset-assert 236) + ) + :method-count-assert 9 + :size-assert #xed + :flag-assert #x9000000ed + ) +|# + +#| +(deftype medius-get-announcements-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-announcements-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (announcement-id int32 :offset-assert 28) + (announcement UNKNOWN 1000 :offset-assert 32) + (end-of-list int8 :offset-assert 1032) + ) + :method-count-assert 9 + :size-assert #x409 + :flag-assert #x900000409 + ) +|# + +#| +(deftype medius-get-buddy-invitations-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x15 + :flag-assert #x900000015 + ) +|# + +#| +(deftype medius-get-buddy-invitations-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (add-type int32 :offset-assert 64) + (end-of-list int8 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x45 + :flag-assert #x900000045 + ) +|# + +#| +(deftype medius-get-buddy-list-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x15 + :flag-assert #x900000015 + ) +|# + +#| +(deftype medius-get-buddy-list-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (online-state medius-player-online-state :inline :offset-assert 64) + (end-of-list int8 :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xcd + :flag-assert #x9000000cd + ) +|# + +#| +(deftype medius-get-buddy-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-get-buddy-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (player-status int32 :offset-assert 64) + (end-of-list int8 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x45 + :flag-assert #x900000045 + ) +|# + +#| +(deftype medius-get-ignore-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-get-ignore-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (ignore-account-id int32 :offset-assert 28) + (ignore-account-name UNKNOWN 32 :offset-assert 32) + (player-status int32 :offset-assert 64) + (end-of-list int8 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x45 + :flag-assert #x900000045 + ) +|# + +#| +(deftype medius-get-clan-by-idrequest (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-id int32 :offset-assert 40) + (clan-id int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-get-clan-by-idresponse (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (application-id int32 :offset-assert 28) + (clan-name UNKNOWN 32 :offset-assert 32) + (leader-account-id int32 :offset-assert 64) + (leader-account-name UNKNOWN 32 :offset-assert 68) + (stats UNKNOWN 256 :offset-assert 100) + (status int32 :offset-assert 356) + ) + :method-count-assert 9 + :size-assert #x168 + :flag-assert #x900000168 + ) +|# + +#| +(deftype medius-get-clan-by-name-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + (clan-name UNKNOWN 32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype medius-get-clan-by-name-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (clan-id int32 :offset-assert 28) + (leader-account-id int32 :offset-assert 32) + (leader-account-name UNKNOWN 32 :offset-assert 36) + (stats UNKNOWN 256 :offset-assert 68) + (status int32 :offset-assert 324) + ) + :method-count-assert 9 + :size-assert #x148 + :flag-assert #x900000148 + ) +|# + +#| +(deftype medius-get-clan-invitations-sent-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (start int32 :offset-assert 40) + (page-size int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-get-clan-invitations-sent-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (response-msg UNKNOWN 200 :offset-assert 64) + (response-status int32 :offset-assert 264) + (response-time int32 :offset-assert 268) + (end-of-list int8 :offset-assert 272) + ) + :method-count-assert 9 + :size-assert #x111 + :flag-assert #x900000111 + ) +|# + +#| +(deftype medius-get-clan-member-list-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (clan-id int32 :offset-assert 24) + (ladder-stat-index int32 :offset-assert 28) + (sort-order int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-get-clan-member-list-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (stats UNKNOWN 256 :offset-assert 64) + (online-state medius-player-online-state :inline :offset-assert 320) + (ladder-stat int32 :offset-assert 460) + (ladder-position uint32 :offset-assert 464) + (total-rankings uint32 :offset-assert 468) + (end-of-list int8 :offset-assert 472) + ) + :method-count-assert 9 + :size-assert #x1d9 + :flag-assert #x9000001d9 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-7-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-get-clan-member-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-clan-member-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (account-id int32 :offset-assert 24) + (account-name UNKNOWN 32 :offset-assert 28) + (status-code int32 :offset-assert 60) + (end-of-list int8 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x41 + :flag-assert #x900000041 + ) +|# + +#| +(deftype medius-get-clan-team-challenge-history-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + (this-clan-is-challenger int32 :offset-assert 44) + (start int32 :offset-assert 48) + (page-size int32 :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype medius-get-clan-team-challenge-history-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (against-clan-id int32 :offset-assert 28) + (status int32 :offset-assert 32) + (end-of-list int8 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x25 + :flag-assert #x900000025 + ) +|# + +#| +(deftype medius-get-clan-team-challenges-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + (start int32 :offset-assert 44) + (page-size int32 :offset-assert 48) + (status int32 :offset-assert 52) + (challenged-only int32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype medius-get-clan-team-challenges-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (challenger-clan-id int32 :offset-assert 28) + (against-clan-id int32 :offset-assert 32) + (status int32 :offset-assert 36) + (response-time int32 :offset-assert 40) + (challenge-msg UNKNOWN 200 :offset-assert 44) + (response-msg UNKNOWN 200 :offset-assert 244) + (end-of-list int8 :offset-assert 444) + (clan-challenge-id int32 :offset-assert 448) + ) + :method-count-assert 9 + :size-assert #x1c4 + :flag-assert #x9000001c4 + ) +|# + +#| +(deftype medius-get-game-list-filter-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-get-game-list-filter-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (filter-field int32 :offset-assert 28) + (comparison-operator int32 :offset-assert 32) + (baseline-value int32 :offset-assert 36) + (end-of-list int8 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x29 + :flag-assert #x900000029 + ) +|# + +#| +(deftype medius-get-ladder-stats-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-type int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-get-ladder-stats-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (stats UNKNOWN 15 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) +|# + +#| +(deftype medius-get-ladder-stats-wide-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (account-id-or-clan-id int32 :offset-assert 24) + (ladder-type int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-get-ladder-stats-wide-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id-or-clan-id int32 :offset-assert 28) + (stats UNKNOWN 100 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x1b0 + :flag-assert #x9000001b0 + ) +|# + +#| +(deftype medius-get-ladder-stats-wide-w-idarray-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ids UNKNOWN 50 :offset-assert 24) + (ladder-type int32 :offset-assert 224) + ) + :method-count-assert 9 + :size-assert #xe4 + :flag-assert #x9000000e4 + ) +|# + +#| +(deftype medius-get-ladder-stats-wide-w-idarray-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id-or-clan-id int32 :offset-assert 28) + (stats UNKNOWN 100 :offset-assert 32) + (end-of-list int8 :offset-assert 432) + ) + :method-count-assert 9 + :size-assert #x1b1 + :flag-assert #x9000001b1 + ) +|# + +#| +(deftype medius-get-lobby-player-names-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (medius-world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-get-lobby-player-names-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (online-state medius-player-online-state :inline :offset-assert 64) + (end-of-list int8 :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xcd + :flag-assert #x9000000cd + ) +|# + +#| +(deftype medius-get-lobby-player-names-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-lobby-player-names-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-id int32 :offset-assert 28) + (account-name UNKNOWN 32 :offset-assert 32) + (end-of-list int8 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x41 + :flag-assert #x900000041 + ) +|# + +#| +(deftype medius-get-locations-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-get-locations-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (location-id int32 :offset-assert 24) + (location-name UNKNOWN 64 :offset-assert 28) + (status-code int32 :offset-assert 92) + (end-of-list int8 :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x61 + :flag-assert #x900000061 + ) +|# + +#| +(deftype medius-get-my-clan-messages-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + (start int32 :offset-assert 44) + (page-size int32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype medius-get-my-clan-messages-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (clan-id int32 :offset-assert 28) + (message UNKNOWN 200 :offset-assert 32) + (end-of-list int8 :offset-assert 232) + ) + :method-count-assert 9 + :size-assert #xe9 + :flag-assert #x9000000e9 + ) +|# + +#| +(deftype medius-get-my-clans-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (start int32 :offset-assert 40) + (page-size int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-get-my-clans-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (clan-id int32 :offset-assert 28) + (application-id int32 :offset-assert 32) + (clan-name UNKNOWN 32 :offset-assert 36) + (leader-account-id int32 :offset-assert 68) + (leader-account-name UNKNOWN 32 :offset-assert 72) + (stats UNKNOWN 256 :offset-assert 104) + (status int32 :offset-assert 360) + (end-of-list int8 :offset-assert 364) + ) + :method-count-assert 9 + :size-assert #x16d + :flag-assert #x90000016d + ) +|# + +#| +(deftype medius-get-my-iprequest (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-get-my-ipresponse (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ip UNKNOWN 20 :offset-assert 21) + (status-code int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-get-policy-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (policy int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-policy-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (policy UNKNOWN 256 :offset-assert 28) + (end-of-text int8 :offset-assert 284) + ) + :method-count-assert 9 + :size-assert #x11d + :flag-assert #x90000011d + ) +|# + +#| +(deftype medius-get-stored-account-info-request (structure) + ((device int32 :offset-assert 0) + (card-port int32 :offset-assert 4) + (card-slot int32 :offset-assert 8) + (account-id int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype medius-get-stored-account-info-response (structure) + ((account-id int32 :offset-assert 0) + (account-name UNKNOWN 32 :offset-assert 4) + (account-password UNKNOWN 32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +#| +(deftype medius-get-stored-account-list-request (structure) + ((device int32 :offset-assert 0) + (card-port int32 :offset-assert 4) + (card-slot int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype medius-get-stored-account-list-response (structure) + ((account-list UNKNOWN 256 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x100 + :flag-assert #x900000100 + ) +|# + +#| +(deftype medius-get-total-channels-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-total-channels-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (total uint32 :offset-assert 24) + (status-code int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-get-total-games-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-total-games-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (total uint32 :offset-assert 24) + (status-code int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-get-total-rankings-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-type int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-get-total-rankings-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (total-rankings uint32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-get-total-users-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (application-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-get-total-users-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (total-in-system uint32 :offset-assert 24) + (total-in-game uint32 :offset-assert 28) + (status-code int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-get-world-security-level-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + (app-type int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-get-world-security-level-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (medius-world-id int32 :offset-assert 28) + (app-type int32 :offset-assert 32) + (security-level int32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype medius-initialize-storage-request (structure) + ((device int32 :offset-assert 0) + (card-port int32 :offset-assert 4) + (card-slot int32 :offset-assert 8) + (icon-location UNKNOWN 64 :offset-assert 12) + (sceterritory int32 :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype medius-initialize-storage-response (structure) + ((confirmation int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype medius-invite-player-to-clan-by-name-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (account-name UNKNOWN 32 :offset-assert 21) + (invite-message UNKNOWN 200 :offset-assert 53) + ) + :method-count-assert 9 + :size-assert #xfd + :flag-assert #x9000000fd + ) +|# + +#| +(deftype medius-invite-player-to-clan-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (player-account-id int32 :offset-assert 40) + (invite-message UNKNOWN 200 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #xf4 + :flag-assert #x9000000f4 + ) +|# + +#| +(deftype medius-invite-player-to-clan-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-join-channel-fwd-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (player-session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-join-channel-fwd-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (player-session-key UNKNOWN 17 :offset-assert 21) + (access-key UNKNOWN 17 :offset-assert 38) + (status-code int32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype medius-join-channel-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + (lobby-channel-password UNKNOWN 32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype medius-join-channel-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (connect-info net-connection-info :inline :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #xb6 + :flag-assert #x9000000b6 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-8-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-join-game-request0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + (game-password UNKNOWN 32 :offset-assert 44) + (game-host-type int32 :offset-assert 76) + (address-list net-address-list :inline :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype medius-join-game-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + (join-type int32 :offset-assert 44) + (game-password UNKNOWN 32 :offset-assert 48) + (game-host-type int32 :offset-assert 80) + (pub-key rsa-key :inline :offset-assert 84) + (address-list net-address-list :inline :offset-assert 148) + ) + :method-count-assert 9 + :size-assert #xc4 + :flag-assert #x9000000c4 + ) +|# + +#| +(deftype medius-join-game-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (game-host-type int32 :offset-assert 28) + (connect-info net-connection-info :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #xba + :flag-assert #x9000000ba + ) +|# + +#| +(deftype medius-ladder-list-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-stat-index int32 :offset-assert 24) + (sort-order int32 :offset-assert 28) + (start-position uint32 :offset-assert 32) + (page-size uint32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype medius-ladder-list-extra-info-response0 (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (ladder-position uint32 :offset-assert 28) + (account-id int32 :offset-assert 32) + (account-name UNKNOWN 32 :offset-assert 36) + (account-stats UNKNOWN 256 :offset-assert 68) + (online-state medius-player-online-state :inline :offset-assert 324) + (end-of-list int8 :offset-assert 464) + ) + :method-count-assert 9 + :size-assert #x1d1 + :flag-assert #x9000001d1 + ) +|# + +#| +(deftype medius-ladder-list-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (ladder-position uint32 :offset-assert 28) + (ladder-stat int32 :offset-assert 32) + (account-id int32 :offset-assert 36) + (account-name UNKNOWN 32 :offset-assert 40) + (account-stats UNKNOWN 256 :offset-assert 72) + (online-state medius-player-online-state :inline :offset-assert 328) + (end-of-list int8 :offset-assert 468) + ) + :method-count-assert 9 + :size-assert #x1d5 + :flag-assert #x9000001d5 + ) +|# + +#| +(deftype medius-ladder-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (start-byte uint32 :offset-assert 40) + (end-byte uint32 :offset-assert 44) + (sort-order int32 :offset-assert 48) + (start-position uint32 :offset-assert 52) + (page-size uint32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype medius-ladder-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (account-id int32 :offset-assert 24) + (account-name UNKNOWN 32 :offset-assert 28) + (ladder-position uint32 :offset-assert 60) + (status-code int32 :offset-assert 64) + (end-of-list int8 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x45 + :flag-assert #x900000045 + ) +|# + +#| +(deftype medius-ladder-position-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (account-id int32 :offset-assert 24) + (ladder-stat-index int32 :offset-assert 28) + (sort-order int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-ladder-position-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (ladder-position uint32 :offset-assert 28) + (total-rankings uint32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-ladder-position-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-id int32 :offset-assert 40) + (start-byte uint32 :offset-assert 44) + (end-byte uint32 :offset-assert 48) + (sort-order int32 :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype medius-ladder-position-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-position uint32 :offset-assert 24) + (status-code int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-ladder-position-fast-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-id int32 :offset-assert 40) + (new-stats-score int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-ladder-position-fast-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-position uint32 :offset-assert 24) + (status-code int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-lobby-world-player-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-lobby-world-player-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (player-status int32 :offset-assert 28) + (account-id int32 :offset-assert 32) + (account-name UNKNOWN 32 :offset-assert 36) + (stats UNKNOWN 256 :offset-assert 68) + (connection-class int32 :offset-assert 324) + (end-of-list int8 :offset-assert 328) + ) + :method-count-assert 9 + :size-assert #x149 + :flag-assert #x900000149 + ) +|# + +#| +(deftype medius-machine-signature-post (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (machine-signature UNKNOWN 128 :offset-assert 38) + ) + :method-count-assert 9 + :size-assert #xa6 + :flag-assert #x9000000a6 + ) +|# + +#| +(deftype medius-modify-clan-message-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-message-id int32 :offset-assert 40) + (new-message UNKNOWN 200 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #xf4 + :flag-assert #x9000000f4 + ) +|# + +#| +(deftype medius-modify-clan-message-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-pick-location-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (location-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-pick-location-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-player-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-player-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (account-name UNKNOWN 32 :offset-assert 28) + (application-id int32 :offset-assert 60) + (player-status int32 :offset-assert 64) + (connection-class int32 :offset-assert 68) + (stats UNKNOWN 256 :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x148 + :flag-assert #x900000148 + ) +|# + +#| +(deftype medius-player-report (structure) + ((session-key UNKNOWN 17 :offset-assert 0) + (medius-world-id int32 :offset-assert 20) + (stats UNKNOWN 256 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x118 + :flag-assert #x900000118 + ) +|# + +#| +(deftype medius-reassign-game-medius-world-id (structure) + ((old-medius-world-id int32 :offset-assert 0) + (new-medius-world-id int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype medius-remove-from-buddy-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-remove-from-buddy-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-remove-from-ignore-list-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (ignore-account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-remove-from-ignore-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-remove-player-from-clan-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (player-account-id int32 :offset-assert 40) + (clan-id int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-remove-player-from-clan-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-request-clan-team-challenge-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + (message UNKNOWN 200 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #xf4 + :flag-assert #x9000000f4 + ) +|# + +#| +(deftype medius-request-clan-team-challenge-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-respond-to-clan-invitation-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-invitation-id int32 :offset-assert 40) + (response int32 :offset-assert 44) + (message UNKNOWN 200 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #xf8 + :flag-assert #x9000000f8 + ) +|# + +#| +(deftype medius-respond-to-clan-invitation-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-respond-to-clan-team-challenge-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-challenge-id int32 :offset-assert 40) + (challenge-status int32 :offset-assert 44) + (message UNKNOWN 200 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #xf8 + :flag-assert #x9000000f8 + ) +|# + +#| +(deftype medius-respond-to-clan-team-challenge-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-revoke-clan-invitation-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (player-account-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-revoke-clan-invitation-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-revoke-clan-team-challenge-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-challenge-id int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype medius-revoke-clan-team-challenge-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-send-clan-message-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (message UNKNOWN 200 :offset-assert 38) + ) + :method-count-assert 9 + :size-assert #xee + :flag-assert #x9000000ee + ) +|# + +#| +(deftype medius-send-clan-message-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-session-begin-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (connection-class int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-session-begin-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (session-key UNKNOWN 17 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x2d + :flag-assert #x90000002d + ) +|# + +#| +(deftype medius-session-end-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-session-end-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-set-game-list-filter-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (filter-field int32 :offset-assert 40) + (comparison-operator int32 :offset-assert 44) + (baseline-value int32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype medius-set-game-list-filter-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-set-lobby-world-filter-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (filter-mask1 uint32 :offset-assert 24) + (filter-mask2 uint32 :offset-assert 28) + (filter-mask3 uint32 :offset-assert 32) + (filter-mask4 uint32 :offset-assert 36) + (lobby-filter-type int32 :offset-assert 40) + (filter-mask-level int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-set-lobby-world-filter-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (filter-mask1 uint32 :offset-assert 28) + (filter-mask2 uint32 :offset-assert 32) + (filter-mask3 uint32 :offset-assert 36) + (filter-mask4 uint32 :offset-assert 40) + (lobby-filter-type int32 :offset-assert 44) + (filter-mask-level int32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-9-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-set-localization-params-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (character-encoding int32 :offset-assert 40) + (language int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-set-message-as-read-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (message-type int32 :offset-assert 40) + (message-idto-tag int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-set-stored-account-info-request (structure) + ((device int32 :offset-assert 0) + (card-port int32 :offset-assert 4) + (card-slot int32 :offset-assert 8) + (account-id int32 :offset-assert 12) + (account-name UNKNOWN 32 :offset-assert 16) + (account-password UNKNOWN 32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype medius-set-stored-account-info-response (structure) + ((confirmation int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype medius-status-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-text-filter-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (text-filter-type int32 :offset-assert 40) + (text UNKNOWN 64 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x6c + :flag-assert #x90000006c + ) +|# + +#| +(deftype medius-text-filter-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (text UNKNOWN 64 :offset-assert 21) + (status-code int32 :offset-assert 88) + ) + :method-count-assert 9 + :size-assert #x5c + :flag-assert #x90000005c + ) +|# + +#| +(deftype medius-transfer-clan-leadership-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (new-leader-account-id int32 :offset-assert 40) + (new-leader-account-name UNKNOWN 32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype medius-transfer-clan-leadership-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-update-clan-stats-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (clan-id int32 :offset-assert 40) + (stats UNKNOWN 256 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x12c + :flag-assert #x90000012c + ) +|# + +#| +(deftype medius-update-clan-stats-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-update-game-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + (medius-world-id int32 :offset-assert 40) + (game-name UNKNOWN 64 :offset-assert 44) + (min-players int16 :offset-assert 108) + (max-players int16 :offset-assert 110) + (game-level int16 :offset-assert 112) + (player-skill-level int16 :offset-assert 114) + ) + :method-count-assert 9 + :size-assert #x74 + :flag-assert #x900000074 + ) +|# + +#| +(deftype medius-update-game-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-update-ladder-stats-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-type int32 :offset-assert 24) + (stats UNKNOWN 15 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) +|# + +#| +(deftype medius-update-ladder-stats-wide-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (ladder-type int32 :offset-assert 24) + (stats UNKNOWN 100 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x1ac + :flag-assert #x9000001ac + ) +|# + +#| +(deftype medius-update-clan-ladder-stats-wide-delta-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (clan-id int32 :offset-assert 24) + (stats UNKNOWN 100 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x1ac + :flag-assert #x9000001ac + ) +|# + +#| +(deftype medius-update-user-state (structure) + ((session-key UNKNOWN 17 :offset-assert 0) + (user-action int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype medius-version-server-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (session-key UNKNOWN 17 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x26 + :flag-assert #x900000026 + ) +|# + +#| +(deftype medius-version-server-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (version-server UNKNOWN 56 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x4d + :flag-assert #x90000004d + ) +|# + +#| +(deftype medius-world-report (structure) + ((session-key UNKNOWN 17 :offset-assert 0) + (medius-world-id int32 :offset-assert 20) + (player-count int32 :offset-assert 24) + (game-name UNKNOWN 64 :offset-assert 28) + (game-stats UNKNOWN 256 :offset-assert 92) + (min-players int32 :offset-assert 348) + (max-players int32 :offset-assert 352) + (game-level int32 :offset-assert 356) + (player-skill-level int32 :offset-assert 360) + (rules-set int32 :offset-assert 364) + (generic-field1 int32 :offset-assert 368) + (generic-field2 int32 :offset-assert 372) + (generic-field3 int32 :offset-assert 376) + (world-status int32 :offset-assert 380) + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) +|# + +#| +(deftype medius-get-universe-information-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (info-type uint32 :offset-assert 24) + (character-encoding int32 :offset-assert 28) + (language int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-universe-news-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (news UNKNOWN 256 :offset-assert 28) + (end-of-text int8 :offset-assert 284) + ) + :method-count-assert 9 + :size-assert #x11d + :flag-assert #x90000011d + ) +|# + +#| +(deftype medius-universe-variable-information-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (info-filter uint32 :offset-assert 28) + (universe-id uint32 :offset-assert 32) + (universe-name UNKNOWN 128 :offset-assert 36) + (dns UNKNOWN 128 :offset-assert 164) + (port int32 :offset-assert 292) + (universe-description UNKNOWN 256 :offset-assert 296) + (status int32 :offset-assert 552) + (user-count int32 :offset-assert 556) + (max-users int32 :offset-assert 560) + (universe-billing UNKNOWN 8 :offset-assert 564) + (billing-system-name UNKNOWN 128 :offset-assert 572) + (extended-info UNKNOWN 128 :offset-assert 700) + (svo-url UNKNOWN 128 :offset-assert 828) + (end-of-list int8 :offset-assert 956) + ) + :method-count-assert 9 + :size-assert #x3bd + :flag-assert #x9000003bd + ) +|# + +#| +(deftype medius-universe-svo-urlresponse (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (url UNKNOWN 128 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x95 + :flag-assert #x900000095 + ) +|# + +#| +(deftype medius-universe-status-list-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (universe-name UNKNOWN 128 :offset-assert 28) + (dns UNKNOWN 128 :offset-assert 156) + (port int32 :offset-assert 284) + (universe-description UNKNOWN 256 :offset-assert 288) + (status int32 :offset-assert 544) + (user-count int32 :offset-assert 548) + (max-users int32 :offset-assert 552) + (end-of-list int8 :offset-assert 556) + ) + :method-count-assert 9 + :size-assert #x22d + :flag-assert #x90000022d + ) +|# + +#| +(deftype medius-get-universe-extra-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (info-type uint32 :offset-assert 24) + (character-encoding int32 :offset-assert 28) + (language int32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype medius-universe-status-list-extra-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + (universe-name UNKNOWN 128 :offset-assert 28) + (dns UNKNOWN 128 :offset-assert 156) + (port int32 :offset-assert 284) + (universe-description UNKNOWN 256 :offset-assert 288) + (status int32 :offset-assert 544) + (user-count int32 :offset-assert 548) + (max-users int32 :offset-assert 552) + (universe-billing UNKNOWN 8 :offset-assert 556) + (billing-system-name UNKNOWN 128 :offset-assert 564) + (end-of-list int8 :offset-assert 692) + (extended-info UNKNOWN 128 :offset-assert 693) + ) + :method-count-assert 9 + :size-assert #x335 + :flag-assert #x900000335 + ) +|# + +#| +(deftype medius-post-debug-info-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (message UNKNOWN 200 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #xdd + :flag-assert #x9000000dd + ) +|# + +#| +(deftype medius-post-debug-info-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-connect-in-params (structure) + ((connect-info net-connection-info :inline :offset-assert 0) + (stream-media-params net-stream-media-params :inline :offset-assert 156) + (max-clients-per-connection uint32 :offset-assert 268) + (my-connect-callback basic :offset-assert 272) + (pf-remote-client-connect-callback basic :offset-assert 276) + (pf-remote-client-disconnect-callback basic :offset-assert 280) + ) + :method-count-assert 9 + :size-assert #x11c + :flag-assert #x90000011c + ) +|# + +#| +(deftype medius-connect-out-params (structure) + ((connection-handle basic :offset-assert 0) + (error-code int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype medius-disconnect-params (structure) + ((connection-handle basic :offset-assert 0) + (disconnect-reason int32 :offset-assert 4) + (my-disconnect-callback basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. + ) +|# + +#| +(deftype medius-initialize-in-params (structure) + ((p-local-key-pair rsa-keypair :offset-assert 0) + (my-chat-fwd-message-callback basic :offset-assert 4) + (my-chat-fwd-message-callback-user-data basic :offset-assert 8) + (my-binary-fwd-message-callback basic :offset-assert 12) + (my-binary-fwd-message-callback-user-data basic :offset-assert 16) + (my-add-to-buddy-list-fwd-confirmation-request-callback basic :offset-assert 20) + (my-add-to-buddy-list-fwd-confirmation-request-callback-user-data basic :offset-assert 24) + (my-error-message-callback basic :offset-assert 28) + (my-error-message-callback-user-data basic :offset-assert 32) + (my-reassign-game-medius-world-idcallback basic :offset-assert 36) + (my-reassign-game-medius-world-idcallback-user-data basic :offset-assert 40) + (pf-system-message-callback basic :offset-assert 44) + (p-system-message-callback-data basic :offset-assert 48) + (application-id int32 :offset-assert 52) + (p-application-key-pair rsa-keypair :offset-assert 56) + (idf-compliance int32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ;; field my-chat-fwd-message-callback-user-data uses ~A with a signed load. field my-binary-fwd-message-callback-user-data uses ~A with a signed load. field my-add-to-buddy-list-fwd-confirmation-request-callback-user-data uses ~A with a signed load. field my-error-message-callback-user-data uses ~A with a signed load. field my-reassign-game-medius-world-idcallback-user-data uses ~A with a signed load. field p-system-message-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype medius-initialize-out-params (structure) + ((error-code int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype medius-initialize-bare-in-params (structure) + ((my-chat-fwd-message-callback basic :offset-assert 0) + (my-chat-fwd-message-callback-user-data basic :offset-assert 4) + (my-binary-fwd-message-callback basic :offset-assert 8) + (my-binary-fwd-message-callback-user-data basic :offset-assert 12) + (my-add-to-buddy-list-fwd-confirmation-request-callback basic :offset-assert 16) + (my-add-to-buddy-list-fwd-confirmation-request-callback-user-data basic :offset-assert 20) + (my-error-message-callback basic :offset-assert 24) + (my-error-message-callback-user-data basic :offset-assert 28) + (my-reassign-game-medius-world-idcallback basic :offset-assert 32) + (my-reassign-game-medius-world-idcallback-user-data basic :offset-assert 36) + (idf-compliance int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ;; field my-chat-fwd-message-callback-user-data uses ~A with a signed load. field my-binary-fwd-message-callback-user-data uses ~A with a signed load. field my-add-to-buddy-list-fwd-confirmation-request-callback-user-data uses ~A with a signed load. field my-error-message-callback-user-data uses ~A with a signed load. field my-reassign-game-medius-world-idcallback-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype medius-initialize-bare-out-params (structure) + ((error-code int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype medius-file (structure) + ((filename UNKNOWN 128 :offset-assert 0) + (server-checksum UNKNOWN 16 :offset-assert 128) + (file-id uint32 :offset-assert 144) + (file-size uint32 :offset-assert 148) + (creation-time-stamp uint32 :offset-assert 152) + (owner-id uint32 :offset-assert 156) + (group-id uint32 :offset-assert 160) + (owner-permission-rwx uint16 :offset-assert 164) + (group-permission-rwx uint16 :offset-assert 166) + (global-permission-rwx uint16 :offset-assert 168) + (server-operation-id uint16 :offset-assert 170) + ) + :method-count-assert 9 + :size-assert #xac + :flag-assert #x9000000ac + ) +|# + +#| +(deftype medius-file-attributes (structure) + ((description UNKNOWN 256 :offset-assert 0) + (last-changed-time-stamp uint32 :offset-assert 256) + (last-changed-by-user-id uint32 :offset-assert 260) + (number-accesses uint32 :offset-assert 264) + (streamable-flag uint32 :offset-assert 268) + (streaming-data-rate uint32 :offset-assert 272) + ) + :method-count-assert 9 + :size-assert #x114 + :flag-assert #x900000114 + ) +|# + +#| +(deftype medius-file-meta-data (structure) + ((key UNKNOWN 56 :offset-assert 0) + (value UNKNOWN 256 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x138 + :flag-assert #x900000138 + ) +|# + +#| +(deftype medius-file-checksum (structure) + ((puc-data uint32 :offset-assert 0) + (ui-size uint32 :offset-assert 4) + (checksum UNKNOWN 16 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype medius-file-create-request (structure) + ((medius-file-to-create medius-file :inline :offset-assert 0) + (medius-file-create-attributes medius-file-attributes :inline :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 448) + ) + :method-count-assert 9 + :size-assert #x1d5 + :flag-assert #x9000001d5 + ) +|# + +#| +(deftype medius-file-create-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (status-code int32 :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xc5 + :flag-assert #x9000000c5 + ) +|# + +#| +(deftype medius-file-upload-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (puc-data-start uint32 :offset-assert 172) + (ui-data-size uint32 :offset-assert 176) + (message-id UNKNOWN 21 :offset-assert 180) + ) + :method-count-assert 9 + :size-assert #xc9 + :flag-assert #x9000000c9 + ) +|# + +#| +(deftype medius-file-upload-server-req (structure) + ((i-req-start-byte-index int32 :offset-assert 0) + (i-packet-number int32 :offset-assert 4) + (i-xfer-status int32 :offset-assert 8) + (status-code int32 :offset-assert 12) + (message-id UNKNOWN 21 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x25 + :flag-assert #x900000025 + ) +|# + +#| +(deftype medius-file-upload-response (structure) + ((data UNKNOWN 464 :offset-assert 0) + (i-start-byte-index int32 :offset-assert 464) + (i-data-size int32 :offset-assert 468) + (i-packet-number int32 :offset-assert 472) + (i-xfer-status int32 :offset-assert 476) + (status-code int32 :offset-assert 480) + (message-id UNKNOWN 21 :offset-assert 484) + ) + :method-count-assert 9 + :size-assert #x1f9 + :flag-assert #x9000001f9 + ) +|# + +#| +(deftype medius-file-close-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xc1 + :flag-assert #x9000000c1 + ) +|# + +#| +(deftype medius-file-close-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (status-code int32 :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xc5 + :flag-assert #x9000000c5 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-10-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-file-download-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xc1 + :flag-assert #x9000000c1 + ) +|# + +#| +(deftype medius-file-download-response (structure) + ((data UNKNOWN 464 :offset-assert 0) + (i-start-byte-index int32 :offset-assert 464) + (i-data-size int32 :offset-assert 468) + (i-packet-number int32 :offset-assert 472) + (i-xfer-status int32 :offset-assert 476) + (status-code int32 :offset-assert 480) + (message-id UNKNOWN 21 :offset-assert 484) + ) + :method-count-assert 9 + :size-assert #x1f9 + :flag-assert #x9000001f9 + ) +|# + +#| +(deftype medius-file-download-stream-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xc1 + :flag-assert #x9000000c1 + ) +|# + +#| +(deftype medius-file-download-stream-response (structure) + ((data UNKNOWN 464 :offset-assert 0) + (i-start-byte-index int32 :offset-assert 464) + (i-data-size int32 :offset-assert 468) + (i-packet-number int32 :offset-assert 472) + (i-xfer-status int32 :offset-assert 476) + (status-code int32 :offset-assert 480) + (message-id UNKNOWN 21 :offset-assert 484) + ) + :method-count-assert 9 + :size-assert #x1f9 + :flag-assert #x9000001f9 + ) +|# + +#| +(deftype medius-file-delete-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xc1 + :flag-assert #x9000000c1 + ) +|# + +#| +(deftype medius-file-delete-response (structure) + ((status-code int32 :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) +|# + +#| +(deftype medius-file-list-request (structure) + ((filename-begins-with UNKNOWN 128 :offset-assert 0) + (filesize-greater-than uint32 :offset-assert 128) + (filesize-less-than uint32 :offset-assert 132) + (owned-by-id uint32 :offset-assert 136) + (newer-than-timestamp uint32 :offset-assert 140) + (starting-entry-number uint32 :offset-assert 144) + (page-size uint32 :offset-assert 148) + (message-id UNKNOWN 21 :offset-assert 152) + ) + :method-count-assert 9 + :size-assert #xad + :flag-assert #x9000000ad + ) +|# + +#| +(deftype medius-file-list-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (status-code int32 :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 176) + (end-of-list int8 :offset-assert 197) + ) + :method-count-assert 9 + :size-assert #xc6 + :flag-assert #x9000000c6 + ) +|# + +#| +(deftype medius-file-update-attributes-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (medius-file-updated-attributes medius-file-attributes :inline :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 448) + ) + :method-count-assert 9 + :size-assert #x1d5 + :flag-assert #x9000001d5 + ) +|# + +#| +(deftype medius-file-update-attributes-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (status-code int32 :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xc5 + :flag-assert #x9000000c5 + ) +|# + +#| +(deftype medius-file-get-attributes-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xc1 + :flag-assert #x9000000c1 + ) +|# + +#| +(deftype medius-file-get-attributes-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (medius-file-attributes-response medius-file-attributes :inline :offset-assert 172) + (status-code int32 :offset-assert 448) + (message-id UNKNOWN 21 :offset-assert 452) + ) + :method-count-assert 9 + :size-assert #x1d9 + :flag-assert #x9000001d9 + ) +|# + +#| +(deftype medius-file-update-meta-data-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (medius-update-meta-data medius-file-meta-data :inline :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 484) + ) + :method-count-assert 9 + :size-assert #x1f9 + :flag-assert #x9000001f9 + ) +|# + +#| +(deftype medius-file-update-meta-data-responset (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (status-code int32 :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xc5 + :flag-assert #x9000000c5 + ) +|# + +#| +(deftype medius-file-get-meta-data-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (medius-meta-data-requested-key medius-file-meta-data :inline :offset-assert 172) + (message-id UNKNOWN 21 :offset-assert 484) + ) + :method-count-assert 9 + :size-assert #x1f9 + :flag-assert #x9000001f9 + ) +|# + +#| +(deftype medius-file-get-meta-data-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (medius-meta-data-response medius-file-meta-data :inline :offset-assert 172) + (status-code int32 :offset-assert 484) + (message-id UNKNOWN 21 :offset-assert 488) + (end-of-list int8 :offset-assert 509) + ) + :method-count-assert 9 + :size-assert #x1fe + :flag-assert #x9000001fe + ) +|# + +#| +(deftype medius-file-search-by-meta-data-request (structure) + ((medius-meta-data-requested-key medius-file-meta-data :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 312) + ) + :method-count-assert 9 + :size-assert #x14d + :flag-assert #x90000014d + ) +|# + +#| +(deftype medius-file-search-by-meta-data-response (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (medius-meta-data-response medius-file-meta-data :inline :offset-assert 172) + (status-code int32 :offset-assert 484) + (message-id UNKNOWN 21 :offset-assert 488) + (end-of-list int8 :offset-assert 509) + ) + :method-count-assert 9 + :size-assert #x1fe + :flag-assert #x9000001fe + ) +|# + +#| +(deftype medius-file-cancel-operation-request (structure) + ((medius-file-info medius-file :inline :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 172) + ) + :method-count-assert 9 + :size-assert #xc1 + :flag-assert #x9000000c1 + ) +|# + +#| +(deftype medius-file-cancel-operation-response (structure) + ((status-code int32 :offset-assert 0) + (message-id UNKNOWN 21 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) +|# + +#| +(deftype medius-server-authentication-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (trust-level int32 :offset-assert 24) + (address-list net-address-list :inline :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype medius-server-authentication-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (connect-info net-connection-info :inline :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #xb2 + :flag-assert #x9000000b2 + ) +|# + +#| +(deftype medius-server-set-attributes-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (attributes int32 :offset-assert 24) + (listen-server-address net-address :inline :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype medius-server-set-attributes-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x16 + :flag-assert #x900000016 + ) +|# + +#| +(deftype medius-server-create-game-on-me-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (game-name UNKNOWN 64 :offset-assert 21) + (game-stats UNKNOWN 256 :offset-assert 85) + (game-password UNKNOWN 32 :offset-assert 341) + (application-id int32 :offset-assert 376) + (max-clients int32 :offset-assert 380) + (min-clients int32 :offset-assert 384) + (game-level int32 :offset-assert 388) + (player-skill-level int32 :offset-assert 392) + (rules-set int32 :offset-assert 396) + (generic-field1 int32 :offset-assert 400) + (generic-field2 int32 :offset-assert 404) + (generic-field3 int32 :offset-assert 408) + (game-host-type int32 :offset-assert 412) + (address-list net-address-list :inline :offset-assert 416) + (world-id int32 :offset-assert 464) + (account-id int32 :offset-assert 468) + ) + :method-count-assert 9 + :size-assert #x1d8 + :flag-assert #x9000001d8 + ) +|# + +#| +(deftype medius-server-create-game-on-me-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (medius-world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-server-create-game-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (application-id int32 :offset-assert 24) + (max-clients int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-server-create-game-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-server-create-game-with-attributes-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (application-id int32 :offset-assert 24) + (max-clients int32 :offset-assert 28) + (attributes int32 :offset-assert 32) + (medius-world-uid uint32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype medius-server-create-game-with-attributes-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-server-end-game-on-me-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (medius-world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-server-end-game-on-me-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x16 + :flag-assert #x900000016 + ) +|# + +#| +(deftype medius-server-end-game-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (world-id int32 :offset-assert 24) + (brutal-flag int8 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x1d + :flag-assert #x90000001d + ) +|# + +#| +(deftype medius-server-end-game-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x16 + :flag-assert #x900000016 + ) +|# + +#| +(deftype medius-server-join-game-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (connect-info net-connection-info :inline :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #xb2 + :flag-assert #x9000000b2 + ) +|# + +#| +(deftype medius-server-join-game-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (access-key UNKNOWN 17 :offset-assert 22) + (pub-key rsa-key :inline :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) +|# + +#| +(deftype medius-server-move-game-world-on-me-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (current-medius-world-id int32 :offset-assert 24) + (new-game-world-id int32 :offset-assert 28) + (address-list net-address-list :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype medius-server-move-game-world-on-me-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (medius-world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-server-report-type (structure) + ((session-key UNKNOWN 17 :offset-assert 0) + (max-worlds int16 :offset-assert 18) + (max-players-per-world int16 :offset-assert 20) + (active-world-count int16 :offset-assert 22) + (total-active-players int16 :offset-assert 24) + (alert-level int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype medius-server-session-begin-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (location-id int32 :offset-assert 24) + (application-id int32 :offset-assert 28) + (server-type int32 :offset-assert 32) + (server-version UNKNOWN 16 :offset-assert 36) + (port int32 :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype medius-server-session-begin-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + (connect-info net-connection-info :inline :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #xb2 + :flag-assert #x9000000b2 + ) +|# + +#| +(deftype medius-server-session-end-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x15 + :flag-assert #x900000015 + ) +|# + +#| +(deftype medius-server-session-end-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x16 + :flag-assert #x900000016 + ) +|# + +#| +(deftype medius-server-world-report-on-me (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (game-name UNKNOWN 64 :offset-assert 21) + (game-stats UNKNOWN 256 :offset-assert 85) + (game-password UNKNOWN 32 :offset-assert 341) + (application-id int32 :offset-assert 376) + (max-clients int32 :offset-assert 380) + (min-clients int32 :offset-assert 384) + (player-count int32 :offset-assert 388) + (game-level int32 :offset-assert 392) + (player-skill-level int32 :offset-assert 396) + (rules-set int32 :offset-assert 400) + (generic-field1 int32 :offset-assert 404) + (generic-field2 int32 :offset-assert 408) + (generic-field3 int32 :offset-assert 412) + (medius-world-id int32 :offset-assert 416) + (world-status int32 :offset-assert 420) + ) + :method-count-assert 9 + :size-assert #x1a8 + :flag-assert #x9000001a8 + ) +|# + +#| +(deftype medius-server-world-status-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (world-id int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype medius-server-world-status-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (application-id int32 :offset-assert 24) + (max-clients int32 :offset-assert 28) + (active-clients int32 :offset-assert 32) + (confirmation int8 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x25 + :flag-assert #x900000025 + ) +|# + +#| +(deftype medius-server-connect-games-request (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (server-ip UNKNOWN 20 :offset-assert 21) + (server-port int32 :offset-assert 44) + (game-world-id int32 :offset-assert 48) + (spectator-world-id int32 :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype medius-server-connect-games-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (game-world-id int32 :offset-assert 24) + (spectator-world-id int32 :offset-assert 28) + (confirmation int8 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x21 + :flag-assert #x900000021 + ) +|# + +#| +(deftype medius-server-connect-notification-type (structure) + ((connect-event-type int32 :offset-assert 0) + (medius-world-uid uint32 :offset-assert 4) + (player-session-key UNKNOWN 17 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) +|# + +#| +(deftype mgclconnect-in-params (structure) + ((connection-info net-connection-info :inline :offset-assert 0) + (pf-connect-callback basic :offset-assert 156) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) +|# + +#| +(deftype mgclconnect-out-params (structure) + ((error-code int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype mgcldisconnect-params (structure) + ((connection-handle basic :offset-assert 0) + (disconnect-reason int32 :offset-assert 4) + (my-disconnect-callback basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field connection-handle uses ~A with a signed load. + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-11-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype mgclinitialize-in-params (structure) + ((p-local-key-pair rsa-keypair :offset-assert 0) + (status int32 :offset-assert 4) + (my-server-create-game-callback basic :offset-assert 8) + (my-server-create-game-callback-user-data basic :offset-assert 12) + (my-server-create-game-with-attributes-callback basic :offset-assert 16) + (my-server-create-game-with-attributes-user-data basic :offset-assert 20) + (my-server-join-game-callback basic :offset-assert 24) + (my-server-join-game-callback-user-data basic :offset-assert 28) + (my-server-end-game-callback basic :offset-assert 32) + (my-server-end-game-callback-user-data basic :offset-assert 36) + (my-server-world-status-callback basic :offset-assert 40) + (my-server-world-status-callback-user-data basic :offset-assert 44) + (my-server-connect-games-callback basic :offset-assert 48) + (my-server-connect-games-user-data basic :offset-assert 52) + (max-clients-per-connection int32 :offset-assert 56) + (application-id int32 :offset-assert 60) + (p-application-key-pair rsa-keypair :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ;; field my-server-create-game-callback-user-data uses ~A with a signed load. field my-server-create-game-with-attributes-user-data uses ~A with a signed load. field my-server-join-game-callback-user-data uses ~A with a signed load. field my-server-end-game-callback-user-data uses ~A with a signed load. field my-server-world-status-callback-user-data uses ~A with a signed load. field my-server-connect-games-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype mgclinitialize-out-params (structure) + ((error-code int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype net-lanpeer-desc (structure) + ((dme-version net-dme-version :inline :offset-assert 0) + (net-platform-id int32 :offset-assert 20) + (application-id int32 :offset-assert 24) + (peer-address net-address :inline :offset-assert 28) + (localization net-localization-params :inline :offset-assert 52) + (application-name UNKNOWN 72 :offset-assert 60) + (user-name UNKNOWN 32 :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #xa4 + :flag-assert #x9000000a4 + ) +|# + +#| +(deftype net-initialize-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (localization net-localization-params :inline :offset-assert 4) + (application-id int32 :offset-assert 12) + (application-name UNKNOWN 72 :offset-assert 16) + (p-local-key-pair rsa-keypair :offset-assert 88) + (p-application-key-pair rsa-keypair :offset-assert 92) + (connectivity-type int32 :offset-assert 96) + (udp-bind-port int32 :offset-assert 100) + (upn-pmemory-ceiling int32 :offset-assert 104) + (b-enable-lanbroadcast-comms int32 :offset-assert 108) + (pf-system-message-callback basic :offset-assert 112) + (p-system-message-callback-data basic :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + ;; field p-system-message-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-host-peer-to-peer-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (pf-local-connect-callback basic :offset-assert 4) + (p-local-connect-callback-data basic :offset-assert 8) + (pf-local-disconnect-callback basic :offset-assert 12) + (p-local-disconnect-callback-data basic :offset-assert 16) + (pf-remote-client-connect-callback basic :offset-assert 20) + (p-remote-client-connect-callback-data basic :offset-assert 24) + (pf-remote-client-disconnect-callback basic :offset-assert 28) + (p-remote-client-disconnect-callback-data basic :offset-assert 32) + (pf-system-status-callback basic :offset-assert 36) + (p-system-status-callback-data basic :offset-assert 40) + (max-clients uint32 :offset-assert 44) + (stream-media-params net-stream-media-params :inline :offset-assert 48) + (user-specified int32 :offset-assert 160) + (b-enab-disconnect-fwd int32 :offset-assert 164) + (token-params net-token-params :inline :offset-assert 168) + (b-use-time-base int32 :offset-assert 180) + (send-buffer-size uint32 :offset-assert 184) + (recv-buffer-size uint32 :offset-assert 188) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ;; field p-local-connect-callback-data uses ~A with a signed load. field p-local-disconnect-callback-data uses ~A with a signed load. field p-remote-client-connect-callback-data uses ~A with a signed load. field p-remote-client-disconnect-callback-data uses ~A with a signed load. field p-system-status-callback-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-resolve-addr-data (structure) + ((b-is-set int32 :offset-assert 0) + (error-code int32 :offset-assert 4) + (address-list net-address-list :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) +|# + +#| +(deftype net-resolve-addr-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (pf-resolve-addr-callback basic :offset-assert 4) + (nat-service-address net-address :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype net-incoming-client-in-params (structure) + ((b-default-set int32 :offset-assert 0) + (incoming-address-list net-address-list :inline :offset-assert 4) + (pub-key rsa-key :inline :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x74 + :flag-assert #x900000074 + ) +|# + +#| +(deftype net-type-broadcast-schedule (structure) + ((min-update-interval uint32 :offset-assert 0) + (error-threshold-type int32 :offset-assert 4) + (threshold-data anonymous-0 :inline :offset-assert 8) + (transport-flags int8 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #xd + :flag-assert #x90000000d + ) +|# + +#| +(deftype net-type-field (structure) + ((offset int32 :offset-assert 0) + (element-size int32 :offset-assert 4) + (element-count int32 :offset-assert 8) + (e-type int32 :offset-assert 12) + (update-schedule net-type-broadcast-schedule :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x1d + :flag-assert #x90000001d + ) +|# + +#| +(deftype net-type-structure (structure) + ((total-size int32 :offset-assert 0) + (field-count int32 :offset-assert 4) + (name UNKNOWN 32 :offset-assert 8) + (child-field-type UNKNOWN 64 :offset-assert 40) + (child-field-offset UNKNOWN 64 :offset-assert 296) + ) + :method-count-assert 9 + :size-assert #x228 + :flag-assert #x900000228 + ) +|# + +#| +(deftype net-lanfind-exchange-callback-in-args (structure) + ((connection-handle basic :offset-assert 0) + (session-type int32 :offset-assert 4) + (peer-desc net-lanpeer-desc :inline :offset-assert 8) + (details net-data :inline :offset-assert 172) + (p-user-data basic :offset-assert 180) + ) + :method-count-assert 9 + :size-assert #xb8 + :flag-assert #x9000000b8 + ;; field connection-handle uses ~A with a signed load. field p-user-data uses ~A with a signed load. + ) +|# + +#| +(deftype net-lanfind-callback-data-args (structure) + ((n-num-clients int16 :offset-assert 0) + (n-max-num-clients int16 :offset-assert 2) + (session-type int32 :offset-assert 4) + (peer-desc net-lanpeer-desc :inline :offset-assert 8) + (details net-data :inline :offset-assert 172) + (p-user-data basic :offset-assert 180) + ) + :method-count-assert 9 + :size-assert #xb8 + :flag-assert #x9000000b8 + ;; field p-user-data uses ~A with a signed load. + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scert-funcs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *scert-function-id* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mem-buffer-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype mem-buffer (structure) + ((base uint32 :offset-assert 0) + (ptr uint32 :offset-assert 4) + (limit uint32 :offset-assert 8) + (in-use basic :offset-assert 12) + ) + :method-count-assert 52 + :size-assert #x10 + :flag-assert #x3400000010 + (:methods + (mem-buffer-method-9 () none) ;; 9 + (mem-buffer-method-10 () none) ;; 10 + (mem-buffer-method-11 () none) ;; 11 + (mem-buffer-method-12 () none) ;; 12 + (mem-buffer-method-13 () none) ;; 13 + (mem-buffer-method-14 () none) ;; 14 + (mem-buffer-method-15 () none) ;; 15 + (mem-buffer-method-16 () none) ;; 16 + (mem-buffer-method-17 () none) ;; 17 + (mem-buffer-method-18 () none) ;; 18 + (mem-buffer-method-19 () none) ;; 19 + (mem-buffer-method-20 () none) ;; 20 + (mem-buffer-method-21 () none) ;; 21 + (mem-buffer-method-22 () none) ;; 22 + (mem-buffer-method-23 () none) ;; 23 + (mem-buffer-method-24 () none) ;; 24 + (mem-buffer-method-25 () none) ;; 25 + (mem-buffer-method-26 () none) ;; 26 + (mem-buffer-method-27 () none) ;; 27 + (mem-buffer-method-28 () none) ;; 28 + (mem-buffer-method-29 () none) ;; 29 + (mem-buffer-method-30 () none) ;; 30 + (mem-buffer-method-31 () none) ;; 31 + (mem-buffer-method-32 () none) ;; 32 + (mem-buffer-method-33 () none) ;; 33 + (mem-buffer-method-34 () none) ;; 34 + (mem-buffer-method-35 () none) ;; 35 + (mem-buffer-method-36 () none) ;; 36 + (mem-buffer-method-37 () none) ;; 37 + (mem-buffer-method-38 () none) ;; 38 + (mem-buffer-method-39 () none) ;; 39 + (mem-buffer-method-40 () none) ;; 40 + (mem-buffer-method-41 () none) ;; 41 + (mem-buffer-method-42 () none) ;; 42 + (mem-buffer-method-43 () none) ;; 43 + (mem-buffer-method-44 () none) ;; 44 + (mem-buffer-method-45 () none) ;; 45 + (mem-buffer-method-46 () none) ;; 46 + (mem-buffer-method-47 () none) ;; 47 + (mem-buffer-method-48 () none) ;; 48 + (mem-buffer-method-49 () none) ;; 49 + (mem-buffer-method-50 () none) ;; 50 + (mem-buffer-method-51 () none) ;; 51 + ) + ) +|# + +#| +(deftype level-bounding-box (structure) + ((bmin vector :inline :offset-assert 0) + (bsz vector :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x20 + :flag-assert #xc00000020 + (:methods + (level-bounding-box-method-9 () none) ;; 9 + (level-bounding-box-method-10 () none) ;; 10 + (level-bounding-box-method-11 () none) ;; 11 + ) + ) +|# + +;; (define-extern *level-bounding-box* object) +;; (define-extern *msg-buffers* object) +;; (define-extern alloc-msg-buffer function) +;; (define-extern free-msg-buffer function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype net-aux-msg-handler (structure) + ((handler-func function :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype net-mgr-game-state (structure) + ((connect-handle basic :offset-assert 0) + (local-machine-idx int32 :offset-assert 4) + (session-master-idx int32 :offset-assert 8) + (host-idx int32 :offset-assert 12) + (connected-bitfield int32 :offset-assert 16) + (time int32 :offset-assert 20) + (first-time-host symbol :offset-assert 24) + (locked symbol :offset-assert 28) + (kicked symbol :offset-assert 32) + (sm-eligible symbol :offset-assert 36) + ) + :pack-me + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ;; field connect-handle uses ~A with a signed load. + ) + +(deftype net-mgr-lobby-state (structure) + ((connect-handle basic :offset-assert 0) + (connect-handle-mgcl basic :offset-assert 4) + (connect-handle-muis basic :offset-assert 8) + (my-account-id int32 :offset-assert 12) + (channel-id int32 :offset-assert 16) + (in-special-channel symbol :offset-assert 20) + (last-normal-channel-id int32 :offset-assert 24) + (created-game-id int32 :offset-assert 28) + (joined-game-id int32 :offset-assert 32) + (channel-list-valid symbol :offset-assert 36) + (last-medius-error int32 :offset-assert 40) + (last-mgcl-error int32 :offset-assert 44) + (last-dme-error int32 :offset-assert 48) + (callback-occurred symbol :offset-assert 52) + (callback-status int32 :offset-assert 56) + (callback-userdata basic :offset-assert 60) + (timeout symbol :offset-assert 64) + (got-error symbol :offset-assert 68) + (last-report-time int32 :offset-assert 72) + (game-on-me uint64 :offset-assert 80) + (game-on-me-error-delay int32 :offset-assert 88) + ) + :method-count-assert 9 + :size-assert #x5c + :flag-assert #x90000005c + ;; field connect-handle uses ~A with a signed load. field connect-handle-mgcl uses ~A with a signed load. field connect-handle-muis uses ~A with a signed load. field callback-userdata uses ~A with a signed load. + ) + +(deftype net-mgr (process) + ((game-type uint8 :offset-assert 144) + (last-game-type uint8 :offset-assert 145) + (notify symbol :offset-assert 148) + (game-state net-mgr-game-state :inline :offset-assert 152) + (lobby-state net-mgr-lobby-state :inline :offset-assert 192) + (scert-initted symbol :offset-assert 284) + (auto-register symbol :offset-assert 288) + (skip-policy symbol :offset-assert 292) + ) + :method-count-assert 60 + :size-assert #x128 + :flag-assert #x3c00a00128 + (:methods + (net-mgr-method-14 () none) ;; 14 + (net-mgr-method-15 () none) ;; 15 + (net-mgr-method-16 () none) ;; 16 + (net-mgr-method-17 () none) ;; 17 + (net-mgr-method-18 () none) ;; 18 + (net-mgr-method-19 () none) ;; 19 + (net-mgr-method-20 () none) ;; 20 + (net-mgr-method-21 () none) ;; 21 + (net-mgr-method-22 () none) ;; 22 + (net-mgr-method-23 () none) ;; 23 + (net-mgr-method-24 () none) ;; 24 + (net-mgr-method-25 () none) ;; 25 + (net-mgr-method-26 () none) ;; 26 + (net-mgr-method-27 () none) ;; 27 + (net-mgr-method-28 () none) ;; 28 + (net-mgr-method-29 () none) ;; 29 + (net-mgr-method-30 () none) ;; 30 + (net-mgr-method-31 () none) ;; 31 + (net-mgr-method-32 () none) ;; 32 + (net-mgr-method-33 () none) ;; 33 + (net-mgr-method-34 () none) ;; 34 + (net-mgr-method-35 () none) ;; 35 + (net-mgr-method-36 () none) ;; 36 + (net-mgr-method-37 () none) ;; 37 + (net-mgr-method-38 () none) ;; 38 + (net-mgr-method-39 () none) ;; 39 + (net-mgr-method-40 () none) ;; 40 + (net-mgr-method-41 () none) ;; 41 + (net-mgr-method-42 () none) ;; 42 + (net-mgr-method-43 () none) ;; 43 + (net-mgr-method-44 () none) ;; 44 + (net-mgr-method-45 () none) ;; 45 + (net-mgr-method-46 () none) ;; 46 + (net-mgr-method-47 () none) ;; 47 + (net-mgr-method-48 () none) ;; 48 + (net-mgr-method-49 () none) ;; 49 + (net-mgr-method-50 () none) ;; 50 + (net-mgr-method-51 () none) ;; 51 + (net-mgr-method-52 () none) ;; 52 + (net-mgr-method-53 () none) ;; 53 + (net-mgr-method-54 () none) ;; 54 + (net-mgr-method-55 () none) ;; 55 + (net-mgr-method-56 () none) ;; 56 + (net-mgr-method-57 () none) ;; 57 + (net-mgr-method-58 () none) ;; 58 + (net-mgr-method-59 () none) ;; 59 + ) + ) + +(deftype net-available-game-info (structure) + ((game-name uint8 64 :offset-assert 0) + (player-count uint8 :offset-assert 64) + (min-players uint8 :offset-assert 65) + (max-players uint8 :offset-assert 66) + (in-staging symbol :offset-assert 68) + (event uint8 :offset-assert 72) + (location uint8 :offset-assert 73) + (task-node uint8 :offset-assert 74) + (generic-1 int32 :offset-assert 76) + (generic-2 int32 :offset-assert 80) + (generic-3 int32 :offset-assert 84) + (burn-version uint32 :offset 76 :score 1) + (lobby-world int32 :offset 80 :score 1) + (class-type int32 :offset 84 :score 1) + (clan-1 int32 :offset-assert 88) + (clan-2 int32 :offset-assert 92) + (skill-level int32 :offset-assert 96) + (avg-ping int32 :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) + +#| +(deftype net-available-game (structure) + ((info net-available-game-info :inline :offset-assert 0) + (connect-info net-connection-info :inline :offset-assert 104) + (medius-world-id int32 :offset-assert 260) + (format-game-name uint8 64 :offset-assert 264) + ) + :method-count-assert 15 + :size-assert #x148 + :flag-assert #xf00000148 + (:methods + (net-available-game-method-9 () none) ;; 9 + (net-available-game-method-10 () none) ;; 10 + (net-available-game-method-11 () none) ;; 11 + (net-available-game-method-12 () none) ;; 12 + (net-available-game-method-13 () none) ;; 13 + (net-available-game-method-14 () none) ;; 14 + ) + ) +|# + +;; (define-extern *net-aux-msg-handlers* object) +;; (define-extern *net-mgr-startup-status* object) +(define-extern *net-mgr* net-mgr) +;; (define-extern *net-error* object) +;; (define-extern *medius-world-status* object) +;; (define-extern *dme-initted* object) +;; (define-extern *medius-initted* object) +;; (define-extern *mgcl-initted* object) +;; (define-extern encode-net-available-game-info function) +;; (define-extern decode-net-available-game-info function) +;; (define-extern *net-mgr-scratch* object) +;; (define-extern *net-available-game-ct* object) +;; (define-extern *net-available-games* object) +;; (define-extern *net-active-game* object) +;; (define-extern net-mgr-notify-connect function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; obj-list ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype list-link (structure) + ((prev list-link :offset-assert 0) + (next list-link :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype linked-list (structure) + ((head list-link :offset-assert 0) + (tail list-link :offset-assert 4) + ) + :method-count-assert 12 + :size-assert #x8 + :flag-assert #xc00000008 + (:methods + (linked-list-method-9 () none) ;; 9 + (linked-list-method-10 () none) ;; 10 + (linked-list-method-11 () none) ;; 11 + ) + ) + +;; (define-extern fixup-relocated-link function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; process-nettable-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype net-process-class-info (structure) + ((msg-map basic :offset-assert 0) + (msg-count int32 :offset-assert 4) + (send-packet-count int32 :offset-assert 8) + (recv-packet-count int32 :offset-assert 12) + (send-byte-count int32 :offset-assert 16) + (recv-byte-count int32 :offset-assert 20) + (owner-type basic :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +(deftype net-process-id (uint16) + () + :flag-assert #x900000002 + ) + +(deftype proximity-ownership-params (basic) + ((ownable-radius float :offset-assert 4) + (force-local basic :offset-assert 8) + (last-ownership-req-time int32 :offset-assert 12) + (min-ownership-req-delay int32 :offset-assert 16) + (consider-ai-players basic :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (proximity-ownership-params-method-9 () none) ;; 9 + ) + ) + +(deftype process-nettable (process) + ((owner-idx int8 :offset-assert 144) + (net-flags uint64 :offset-assert 152) + (desired-owner-idx int8 :offset-assert 160) + (net-id uint16 :offset-assert 162) + (jump-in-send-pending uint16 :offset-assert 164) + (prox basic :offset-assert 168) + (owner-link list-link :inline :offset-assert 172) + (active-link list-link :inline :offset-assert 180) + ) + :method-count-assert 42 + :size-assert #xbc + :flag-assert #x2a003000bc + (:methods + (new "Allocate a process-tree with the kernel clock." (symbol type string) _type_) ;; 0 + (activate "Move a process from dead to active, moving it to the given tree." (_type_ process-tree string pointer) process-tree) ;; 9 + (deactivate "Make a process dead, clean it up, remove it from the active pool, and return to dead pool." (_type_) none) ;; 10 + (init-from-entity! (_type_ entity-actor) object) ;; 11 + (run-logic? "Should this process be run? Checked by execute-process-tree." (_type_) symbol) ;; 12 + (process-tree-method-13 () none) ;; 13 + (process-nettable-method-14 () none) ;; 14 + (process-nettable-method-15 () none) ;; 15 + (process-nettable-method-16 () none) ;; 16 + (process-nettable-method-17 () none) ;; 17 + (process-nettable-method-18 () none) ;; 18 + (process-nettable-method-19 () none) ;; 19 + (process-nettable-method-20 () none) ;; 20 + (process-nettable-method-21 () none) ;; 21 + (process-nettable-method-22 () none) ;; 22 + (process-nettable-method-23 () none) ;; 23 + (process-nettable-method-24 () none) ;; 24 + (process-nettable-method-25 () none) ;; 25 + (process-nettable-method-26 () none) ;; 26 + (process-nettable-method-27 () none) ;; 27 + (process-nettable-method-28 () none) ;; 28 + (process-nettable-method-29 () none) ;; 29 + (process-nettable-method-30 () none) ;; 30 + (process-nettable-method-31 () none) ;; 31 + (process-nettable-method-32 () none) ;; 32 + (process-nettable-method-33 () none) ;; 33 + (process-nettable-method-34 () none) ;; 34 + (process-nettable-method-35 () none) ;; 35 + (process-nettable-method-36 () none) ;; 36 + (process-nettable-method-37 () none) ;; 37 + (process-nettable-method-38 () none) ;; 38 + (process-nettable-method-39 () none) ;; 39 + (process-nettable-method-40 () none) ;; 40 + (process-nettable-method-41 () none) ;; 41 + ) + ) + +(define-extern *net-process-class-count* number) +(define-extern *net-process-class-array* array) +(define-extern *net-process-class-names* object) +(define-extern net-process-class-register (function draw-control none)) +(define-extern write-msg-map-rec (function process-drawable net-process-class-info none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; game-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type nav-control structure) +(declare-type path-control basic) +(declare-type vol-control basic) +(declare-type fact-info basic) +(declare-type actor-link-info basic) +(declare-type water-control basic) +(declare-type carry-info basic) +(declare-type rigid-body-control basic) + +(declare-type sparticle-launch-control inline-array-class) + +(defenum state-flags + :bitfield #t + :type uint32 + ) + +(deftype process-drawable (process-nettable) + "This is the main base class for in-game objects. + This handles drawing, collision, animation, navigation, particles, sounds, physics, etc. + The actual child classes will add most of the functionality, and this just serves as a common + container for references to the `-control` objects for this object." + ((root trsqv :offset-assert 188) ;; guessed by decompiler + (node-list cspace-array :offset-assert 192) ;; guessed by decompiler + (draw draw-control :offset-assert 196) ;; guessed by decompiler + (skel joint-control :offset-assert 200) ;; guessed by decompiler + (nav nav-control :offset-assert 204) ;; guessed by decompiler + (path path-control :offset-assert 208) ;; guessed by decompiler + (vol vol-control :offset-assert 212) ;; guessed by decompiler + (fact fact-info :offset-assert 216) ;; guessed by decompiler + (link actor-link-info :offset-assert 220) ;; guessed by decompiler + (part sparticle-launch-control :offset-assert 224) ;; guessed by decompiler + (sound ambient-sound :offset-assert 228) ;; guessed by decompiler + (rbody rigid-body-control :offset-assert 232) ;; guessed by decompiler + (state-flags state-flags :offset-assert 236) ;; guessed by decompiler + (state-time uint64 :offset-assert 240) ;; time-frame + ) + :method-count-assert 50 + :size-assert #xf8 + :flag-assert #x32007000f8 + (:methods + (process-drawable-method-42 () none) ;; 42 + (process-drawable-method-43 () none) ;; 43 + (process-drawable-method-44 () none) ;; 44 + (process-drawable-method-45 () none) ;; 45 + (process-drawable-method-46 () none) ;; 46 + (process-drawable-method-47 () none) ;; 47 + (process-drawable-method-48 () none) ;; 48 + (process-drawable-method-49 () none) ;; 49 + ) + (:states + (process-drawable-art-error string) ;; associated process guessed by decompiler, old: (state string process-drawable) + process-drawable-idle ;; associated process guessed by decompiler, old: (state process-drawable) + ) + ) + +(deftype process-drawable-reserved (process-drawable) + "A process drawable with a lot of unused method slots. + GOAL cannot increase the number of methods at runtime, so, for interactive development, it is useful + to have a type with a large number of slots which can be turned into real methods without needed to reboot the PS2." + () + :method-count-assert 248 + :size-assert #xf8 + :flag-assert #xf8007000f8 + (:methods + (process-drawable-reserved-method-50 () none) ;; 50 ;; (process-drawable-reserved-method-50 () none) + (process-drawable-reserved-method-51 () none) ;; 51 ;; (process-drawable-reserved-method-51 () none) + (process-drawable-reserved-method-52 () none) ;; 52 ;; (process-drawable-reserved-method-52 () none) + (process-drawable-reserved-method-53 () none) ;; 53 ;; (process-drawable-reserved-method-53 () none) + (process-drawable-reserved-method-54 () none) ;; 54 ;; (process-drawable-reserved-method-54 () none) + (process-drawable-reserved-method-55 () none) ;; 55 ;; (process-drawable-reserved-method-55 () none) + (process-drawable-reserved-method-56 () none) ;; 56 ;; (process-drawable-reserved-method-56 () none) + (process-drawable-reserved-method-57 () none) ;; 57 ;; (process-drawable-reserved-method-57 () none) + (process-drawable-reserved-method-58 () none) ;; 58 ;; (process-drawable-reserved-method-58 () none) + (process-drawable-reserved-method-59 () none) ;; 59 ;; (process-drawable-reserved-method-59 () none) + (process-drawable-reserved-method-60 () none) ;; 60 ;; (process-drawable-reserved-method-60 () none) + (process-drawable-reserved-method-61 () none) ;; 61 ;; (process-drawable-reserved-method-61 () none) + (process-drawable-reserved-method-62 () none) ;; 62 ;; (process-drawable-reserved-method-62 () none) + (process-drawable-reserved-method-63 () none) ;; 63 ;; (process-drawable-reserved-method-63 () none) + (process-drawable-reserved-method-64 () none) ;; 64 ;; (process-drawable-reserved-method-64 () none) + (process-drawable-reserved-method-65 () none) ;; 65 ;; (process-drawable-reserved-method-65 () none) + (process-drawable-reserved-method-66 () none) ;; 66 ;; (process-drawable-reserved-method-66 () none) + (process-drawable-reserved-method-67 () none) ;; 67 ;; (process-drawable-reserved-method-67 () none) + (process-drawable-reserved-method-68 () none) ;; 68 ;; (process-drawable-reserved-method-68 () none) + (process-drawable-reserved-method-69 () none) ;; 69 ;; (process-drawable-reserved-method-69 () none) + (process-drawable-reserved-method-70 () none) ;; 70 ;; (process-drawable-reserved-method-70 () none) + (process-drawable-reserved-method-71 () none) ;; 71 ;; (process-drawable-reserved-method-71 () none) + (process-drawable-reserved-method-72 () none) ;; 72 ;; (process-drawable-reserved-method-72 () none) + (process-drawable-reserved-method-73 () none) ;; 73 ;; (process-drawable-reserved-method-73 () none) + (process-drawable-reserved-method-74 () none) ;; 74 ;; (process-drawable-reserved-method-74 () none) + (process-drawable-reserved-method-75 () none) ;; 75 ;; (process-drawable-reserved-method-75 () none) + (process-drawable-reserved-method-76 () none) ;; 76 ;; (process-drawable-reserved-method-76 () none) + (process-drawable-reserved-method-77 () none) ;; 77 ;; (process-drawable-reserved-method-77 () none) + (process-drawable-reserved-method-78 () none) ;; 78 ;; (process-drawable-reserved-method-78 () none) + (process-drawable-reserved-method-79 () none) ;; 79 ;; (process-drawable-reserved-method-79 () none) + (process-drawable-reserved-method-80 () none) ;; 80 ;; (process-drawable-reserved-method-80 () none) + (process-drawable-reserved-method-81 () none) ;; 81 ;; (process-drawable-reserved-method-81 () none) + (process-drawable-reserved-method-82 () none) ;; 82 ;; (process-drawable-reserved-method-82 () none) + (process-drawable-reserved-method-83 () none) ;; 83 ;; (process-drawable-reserved-method-83 () none) + (process-drawable-reserved-method-84 () none) ;; 84 ;; (process-drawable-reserved-method-84 () none) + (process-drawable-reserved-method-85 () none) ;; 85 ;; (process-drawable-reserved-method-85 () none) + (process-drawable-reserved-method-86 () none) ;; 86 ;; (process-drawable-reserved-method-86 () none) + (process-drawable-reserved-method-87 () none) ;; 87 ;; (process-drawable-reserved-method-87 () none) + (process-drawable-reserved-method-88 () none) ;; 88 ;; (process-drawable-reserved-method-88 () none) + (process-drawable-reserved-method-89 () none) ;; 89 ;; (process-drawable-reserved-method-89 () none) + (process-drawable-reserved-method-90 () none) ;; 90 ;; (process-drawable-reserved-method-90 () none) + (process-drawable-reserved-method-91 () none) ;; 91 ;; (process-drawable-reserved-method-91 () none) + (process-drawable-reserved-method-92 () none) ;; 92 ;; (process-drawable-reserved-method-92 () none) + (process-drawable-reserved-method-93 () none) ;; 93 ;; (process-drawable-reserved-method-93 () none) + (process-drawable-reserved-method-94 () none) ;; 94 ;; (process-drawable-reserved-method-94 () none) + (process-drawable-reserved-method-95 () none) ;; 95 ;; (process-drawable-reserved-method-95 () none) + (process-drawable-reserved-method-96 () none) ;; 96 ;; (process-drawable-reserved-method-96 () none) + (process-drawable-reserved-method-97 () none) ;; 97 ;; (process-drawable-reserved-method-97 () none) + (process-drawable-reserved-method-98 () none) ;; 98 ;; (process-drawable-reserved-method-98 () none) + (process-drawable-reserved-method-99 () none) ;; 99 ;; (process-drawable-reserved-method-99 () none) + (process-drawable-reserved-method-100 () none) ;; 100 ;; (process-drawable-reserved-method-100 () none) + (process-drawable-reserved-method-101 () none) ;; 101 ;; (process-drawable-reserved-method-101 () none) + (process-drawable-reserved-method-102 () none) ;; 102 ;; (process-drawable-reserved-method-102 () none) + (process-drawable-reserved-method-103 () none) ;; 103 ;; (process-drawable-reserved-method-103 () none) + (process-drawable-reserved-method-104 () none) ;; 104 ;; (process-drawable-reserved-method-104 () none) + (process-drawable-reserved-method-105 () none) ;; 105 ;; (process-drawable-reserved-method-105 () none) + (process-drawable-reserved-method-106 () none) ;; 106 ;; (process-drawable-reserved-method-106 () none) + (process-drawable-reserved-method-107 () none) ;; 107 ;; (process-drawable-reserved-method-107 () none) + (process-drawable-reserved-method-108 () none) ;; 108 ;; (process-drawable-reserved-method-108 () none) + (process-drawable-reserved-method-109 () none) ;; 109 ;; (process-drawable-reserved-method-109 () none) + (process-drawable-reserved-method-110 () none) ;; 110 ;; (process-drawable-reserved-method-110 () none) + (process-drawable-reserved-method-111 () none) ;; 111 ;; (process-drawable-reserved-method-111 () none) + (process-drawable-reserved-method-112 () none) ;; 112 ;; (process-drawable-reserved-method-112 () none) + (process-drawable-reserved-method-113 () none) ;; 113 ;; (process-drawable-reserved-method-113 () none) + (process-drawable-reserved-method-114 () none) ;; 114 ;; (process-drawable-reserved-method-114 () none) + (process-drawable-reserved-method-115 () none) ;; 115 ;; (process-drawable-reserved-method-115 () none) + (process-drawable-reserved-method-116 () none) ;; 116 ;; (process-drawable-reserved-method-116 () none) + (process-drawable-reserved-method-117 () none) ;; 117 ;; (process-drawable-reserved-method-117 () none) + (process-drawable-reserved-method-118 () none) ;; 118 ;; (process-drawable-reserved-method-118 () none) + (process-drawable-reserved-method-119 () none) ;; 119 ;; (process-drawable-reserved-method-119 () none) + (process-drawable-reserved-method-120 () none) ;; 120 ;; (process-drawable-reserved-method-120 () none) + (process-drawable-reserved-method-121 () none) ;; 121 ;; (process-drawable-reserved-method-121 () none) + (process-drawable-reserved-method-122 () none) ;; 122 ;; (process-drawable-reserved-method-122 () none) + (process-drawable-reserved-method-123 () none) ;; 123 ;; (process-drawable-reserved-method-123 () none) + (process-drawable-reserved-method-124 () none) ;; 124 ;; (process-drawable-reserved-method-124 () none) + (process-drawable-reserved-method-125 () none) ;; 125 ;; (process-drawable-reserved-method-125 () none) + (process-drawable-reserved-method-126 () none) ;; 126 ;; (process-drawable-reserved-method-126 () none) + (process-drawable-reserved-method-127 () none) ;; 127 ;; (process-drawable-reserved-method-127 () none) + (process-drawable-reserved-method-128 () none) ;; 128 ;; (process-drawable-reserved-method-128 () none) + (process-drawable-reserved-method-129 () none) ;; 129 ;; (process-drawable-reserved-method-129 () none) + (process-drawable-reserved-method-130 () none) ;; 130 ;; (process-drawable-reserved-method-130 () none) + (process-drawable-reserved-method-131 () none) ;; 131 ;; (process-drawable-reserved-method-131 () none) + (process-drawable-reserved-method-132 () none) ;; 132 ;; (process-drawable-reserved-method-132 () none) + (process-drawable-reserved-method-133 () none) ;; 133 ;; (process-drawable-reserved-method-133 () none) + (process-drawable-reserved-method-134 () none) ;; 134 ;; (process-drawable-reserved-method-134 () none) + (process-drawable-reserved-method-135 () none) ;; 135 ;; (process-drawable-reserved-method-135 () none) + (process-drawable-reserved-method-136 () none) ;; 136 ;; (process-drawable-reserved-method-136 () none) + (process-drawable-reserved-method-137 () none) ;; 137 ;; (process-drawable-reserved-method-137 () none) + (process-drawable-reserved-method-138 () none) ;; 138 ;; (process-drawable-reserved-method-138 () none) + (process-drawable-reserved-method-139 () none) ;; 139 ;; (process-drawable-reserved-method-139 () none) + (process-drawable-reserved-method-140 () none) ;; 140 ;; (process-drawable-reserved-method-140 () none) + (process-drawable-reserved-method-141 () none) ;; 141 ;; (process-drawable-reserved-method-141 () none) + (process-drawable-reserved-method-142 () none) ;; 142 ;; (process-drawable-reserved-method-142 () none) + (process-drawable-reserved-method-143 () none) ;; 143 ;; (process-drawable-reserved-method-143 () none) + (process-drawable-reserved-method-144 () none) ;; 144 ;; (process-drawable-reserved-method-144 () none) + (process-drawable-reserved-method-145 () none) ;; 145 ;; (process-drawable-reserved-method-145 () none) + (process-drawable-reserved-method-146 () none) ;; 146 ;; (process-drawable-reserved-method-146 () none) + (process-drawable-reserved-method-147 () none) ;; 147 ;; (process-drawable-reserved-method-147 () none) + (process-drawable-reserved-method-148 () none) ;; 148 ;; (process-drawable-reserved-method-148 () none) + (process-drawable-reserved-method-149 () none) ;; 149 ;; (process-drawable-reserved-method-149 () none) + (process-drawable-reserved-method-150 () none) ;; 150 ;; (process-drawable-reserved-method-150 () none) + (process-drawable-reserved-method-151 () none) ;; 151 ;; (process-drawable-reserved-method-151 () none) + (process-drawable-reserved-method-152 () none) ;; 152 ;; (process-drawable-reserved-method-152 () none) + (process-drawable-reserved-method-153 () none) ;; 153 ;; (process-drawable-reserved-method-153 () none) + (process-drawable-reserved-method-154 () none) ;; 154 ;; (process-drawable-reserved-method-154 () none) + (process-drawable-reserved-method-155 () none) ;; 155 ;; (process-drawable-reserved-method-155 () none) + (process-drawable-reserved-method-156 () none) ;; 156 ;; (process-drawable-reserved-method-156 () none) + (process-drawable-reserved-method-157 () none) ;; 157 ;; (process-drawable-reserved-method-157 () none) + (process-drawable-reserved-method-158 () none) ;; 158 ;; (process-drawable-reserved-method-158 () none) + (process-drawable-reserved-method-159 () none) ;; 159 ;; (process-drawable-reserved-method-159 () none) + (process-drawable-reserved-method-160 () none) ;; 160 ;; (process-drawable-reserved-method-160 () none) + (process-drawable-reserved-method-161 () none) ;; 161 ;; (process-drawable-reserved-method-161 () none) + (process-drawable-reserved-method-162 () none) ;; 162 ;; (process-drawable-reserved-method-162 () none) + (process-drawable-reserved-method-163 () none) ;; 163 ;; (process-drawable-reserved-method-163 () none) + (process-drawable-reserved-method-164 () none) ;; 164 ;; (process-drawable-reserved-method-164 () none) + (process-drawable-reserved-method-165 () none) ;; 165 ;; (process-drawable-reserved-method-165 () none) + (process-drawable-reserved-method-166 () none) ;; 166 ;; (process-drawable-reserved-method-166 () none) + (process-drawable-reserved-method-167 () none) ;; 167 ;; (process-drawable-reserved-method-167 () none) + (process-drawable-reserved-method-168 () none) ;; 168 ;; (process-drawable-reserved-method-168 () none) + (process-drawable-reserved-method-169 () none) ;; 169 ;; (process-drawable-reserved-method-169 () none) + (process-drawable-reserved-method-170 () none) ;; 170 ;; (process-drawable-reserved-method-170 () none) + (process-drawable-reserved-method-171 () none) ;; 171 ;; (process-drawable-reserved-method-171 () none) + (process-drawable-reserved-method-172 () none) ;; 172 ;; (process-drawable-reserved-method-172 () none) + (process-drawable-reserved-method-173 () none) ;; 173 ;; (process-drawable-reserved-method-173 () none) + (process-drawable-reserved-method-174 () none) ;; 174 ;; (process-drawable-reserved-method-174 () none) + (process-drawable-reserved-method-175 () none) ;; 175 ;; (process-drawable-reserved-method-175 () none) + (process-drawable-reserved-method-176 () none) ;; 176 ;; (process-drawable-reserved-method-176 () none) + (process-drawable-reserved-method-177 () none) ;; 177 ;; (process-drawable-reserved-method-177 () none) + (process-drawable-reserved-method-178 () none) ;; 178 ;; (process-drawable-reserved-method-178 () none) + (process-drawable-reserved-method-179 () none) ;; 179 ;; (process-drawable-reserved-method-179 () none) + (process-drawable-reserved-method-180 () none) ;; 180 ;; (process-drawable-reserved-method-180 () none) + (process-drawable-reserved-method-181 () none) ;; 181 ;; (process-drawable-reserved-method-181 () none) + (process-drawable-reserved-method-182 () none) ;; 182 ;; (process-drawable-reserved-method-182 () none) + (process-drawable-reserved-method-183 () none) ;; 183 ;; (process-drawable-reserved-method-183 () none) + (process-drawable-reserved-method-184 () none) ;; 184 ;; (process-drawable-reserved-method-184 () none) + (process-drawable-reserved-method-185 () none) ;; 185 ;; (process-drawable-reserved-method-185 () none) + (process-drawable-reserved-method-186 () none) ;; 186 ;; (process-drawable-reserved-method-186 () none) + (process-drawable-reserved-method-187 () none) ;; 187 ;; (process-drawable-reserved-method-187 () none) + (process-drawable-reserved-method-188 () none) ;; 188 ;; (process-drawable-reserved-method-188 () none) + (process-drawable-reserved-method-189 () none) ;; 189 ;; (process-drawable-reserved-method-189 () none) + (process-drawable-reserved-method-190 () none) ;; 190 ;; (process-drawable-reserved-method-190 () none) + (process-drawable-reserved-method-191 () none) ;; 191 ;; (process-drawable-reserved-method-191 () none) + (process-drawable-reserved-method-192 () none) ;; 192 ;; (process-drawable-reserved-method-192 () none) + (process-drawable-reserved-method-193 () none) ;; 193 ;; (process-drawable-reserved-method-193 () none) + (process-drawable-reserved-method-194 () none) ;; 194 ;; (process-drawable-reserved-method-194 () none) + (process-drawable-reserved-method-195 () none) ;; 195 ;; (process-drawable-reserved-method-195 () none) + (process-drawable-reserved-method-196 () none) ;; 196 ;; (process-drawable-reserved-method-196 () none) + (process-drawable-reserved-method-197 () none) ;; 197 ;; (process-drawable-reserved-method-197 () none) + (process-drawable-reserved-method-198 () none) ;; 198 ;; (process-drawable-reserved-method-198 () none) + (process-drawable-reserved-method-199 () none) ;; 199 ;; (process-drawable-reserved-method-199 () none) + (process-drawable-reserved-method-200 () none) ;; 200 ;; (process-drawable-reserved-method-200 () none) + (process-drawable-reserved-method-201 () none) ;; 201 ;; (process-drawable-reserved-method-201 () none) + (process-drawable-reserved-method-202 () none) ;; 202 ;; (process-drawable-reserved-method-202 () none) + (process-drawable-reserved-method-203 () none) ;; 203 ;; (process-drawable-reserved-method-203 () none) + (process-drawable-reserved-method-204 () none) ;; 204 ;; (process-drawable-reserved-method-204 () none) + (process-drawable-reserved-method-205 () none) ;; 205 ;; (process-drawable-reserved-method-205 () none) + (process-drawable-reserved-method-206 () none) ;; 206 ;; (process-drawable-reserved-method-206 () none) + (process-drawable-reserved-method-207 () none) ;; 207 ;; (process-drawable-reserved-method-207 () none) + (process-drawable-reserved-method-208 () none) ;; 208 ;; (process-drawable-reserved-method-208 () none) + (process-drawable-reserved-method-209 () none) ;; 209 ;; (process-drawable-reserved-method-209 () none) + (process-drawable-reserved-method-210 () none) ;; 210 ;; (process-drawable-reserved-method-210 () none) + (process-drawable-reserved-method-211 () none) ;; 211 ;; (process-drawable-reserved-method-211 () none) + (process-drawable-reserved-method-212 () none) ;; 212 ;; (process-drawable-reserved-method-212 () none) + (process-drawable-reserved-method-213 () none) ;; 213 ;; (process-drawable-reserved-method-213 () none) + (process-drawable-reserved-method-214 () none) ;; 214 ;; (process-drawable-reserved-method-214 () none) + (process-drawable-reserved-method-215 () none) ;; 215 ;; (process-drawable-reserved-method-215 () none) + (process-drawable-reserved-method-216 () none) ;; 216 ;; (process-drawable-reserved-method-216 () none) + (process-drawable-reserved-method-217 () none) ;; 217 ;; (process-drawable-reserved-method-217 () none) + (process-drawable-reserved-method-218 () none) ;; 218 + (process-drawable-reserved-method-219 () none) ;; 219 + (process-drawable-reserved-method-220 () none) ;; 220 + (process-drawable-reserved-method-221 () none) ;; 221 + (process-drawable-reserved-method-222 () none) ;; 222 + (process-drawable-reserved-method-223 () none) ;; 223 + (process-drawable-reserved-method-224 () none) ;; 224 + (process-drawable-reserved-method-225 () none) ;; 225 + (process-drawable-reserved-method-226 () none) ;; 226 + (process-drawable-reserved-method-227 () none) ;; 227 + (process-drawable-reserved-method-228 () none) ;; 228 + (process-drawable-reserved-method-229 () none) ;; 229 + (process-drawable-reserved-method-230 () none) ;; 230 + (process-drawable-reserved-method-231 () none) ;; 231 + (process-drawable-reserved-method-232 () none) ;; 232 + (process-drawable-reserved-method-233 () none) ;; 233 + (process-drawable-reserved-method-234 () none) ;; 234 + (process-drawable-reserved-method-235 () none) ;; 235 + (process-drawable-reserved-method-236 () none) ;; 236 + (process-drawable-reserved-method-237 () none) ;; 237 + (process-drawable-reserved-method-238 () none) ;; 238 + (process-drawable-reserved-method-239 () none) ;; 239 + (process-drawable-reserved-method-240 () none) ;; 240 + (process-drawable-reserved-method-241 () none) ;; 241 + (process-drawable-reserved-method-242 () none) ;; 242 + (process-drawable-reserved-method-243 () none) ;; 243 + (process-drawable-reserved-method-244 () none) ;; 244 + (process-drawable-reserved-method-245 () none) ;; 245 + (process-drawable-reserved-method-246 () none) ;; 246 + (process-drawable-reserved-method-247 () none) ;; 247 + ) + ) + +(deftype attack-dir-info (structure) + "Information about the position/direction of an attack." + ((dir vector :inline :offset-assert 0) + (xz-dir vector :inline :offset-assert 16) + (attacker-velocity vector :inline :offset-assert 32) + (pos vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(defenum attack-mask + :bitfield #t + :type uint32 + (trans 0) ;; 1 + (vector 1) ;; 2 + (intersection 2) ;; 4 + (attacker 3) ;; 8 + (attack-time 4) ;; 16 + (invinc-time 5) ;; 32 + (mode 6) ;; 64 + (shove-back 7) ;; 128 + (shove-up 8) ;; 256 + (speed 9) ;; 512 + (dist 10) ;; 1024 + (control 11) ;; 2048 + (angle 12) ;; 4096 + (rotate-to 13) ;; 8192 + (prev-state 14) ;; 16384 + (id 15) ;; 32768 + (count 16) ;; hi 1 + (penetrate-using 17) ;; hi 2 + (attacker-velocity 18);; hi 4 + (damage 19) ;; hi 8 + (shield-damage 20) ;; hi16 + (vehicle-damage-factor 21) ;; hi 32 + (vehicle-impulse-factor 22) ;; hi 64 + (knock 23) + (test 24) + ) + +(deftype attack-info (structure) + "Information about an incoming attack." + ((trans vector :inline :offset-assert 0) + (vector vector :inline :offset-assert 16) + (attacker-velocity vector :inline :offset-assert 32) + (intersection vector :inline :offset-assert 48) + (attacker handle :offset-assert 64) + (attack-time time-frame :offset-assert 72) ;; time-frame + (invinc-time time-frame :offset-assert 80) ;; time-frame + (mask attack-mask :offset-assert 88) ;; attack-mask + (mode symbol :offset-assert 92) ;; guessed by decompiler + (shove-back meters :offset-assert 96) + (shove-up meters :offset-assert 100) + (speed meters :offset-assert 104) + (dist meters :offset-assert 108) + (control float :offset-assert 112) + (angle symbol :offset-assert 116) ;; guessed by decompiler + (rotate-to degrees :offset-assert 120) ;; degrees + (prev-state state :offset-assert 124) ;; guessed by decompiler + (id uint32 :offset-assert 128) + (wpn-type uint8 :offset-assert 132) + (penetrate-using penetrate :offset-assert 136) ;; penetrate + (damage float :offset-assert 144) + (shield-damage float :offset-assert 148) + (vehicle-damage-factor float :offset-assert 152) + (vehicle-impulse-factor float :offset-assert 156) + (knock knocked-type :offset-assert 160) ;; knocked-type + (test symbol :offset-assert 164) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #xa8 + :flag-assert #xa000000a8 + ;; field handle is likely a value type. + (:methods + (attack-info-method-9 () none) ;; 9 ;; (attack-info-method-9 (_type_ attack-info process-drawable process-drawable) none) + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; script-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type script-context structure) +(declare-type load-state structure) + +(deftype script-form (structure) + ((name symbol :offset-assert 0) ;; guessed by decompiler + (spec pair :offset-assert 4) ;; guessed by decompiler + (func (function script-context object) :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #xc + :flag-assert #xa0000000c + (:methods + (script-form-method-9 () none) ;; 9 ;; (script-form-method-9 () none) + ) + ) + +(deftype script-context (structure) + ((load-state load-state :offset-assert 0) ;; guessed by decompiler + (key object :offset-assert 4) ;; guessed by decompiler + (process process :offset-assert 8) ;; guessed by decompiler + (trans vector :offset-assert 12) + (side-effect? symbol :offset-assert 16) ;; guessed by decompiler + (got-error? symbol :offset-assert 20) ;; guessed by decompiler + (expr pair :offset-assert 24) ;; guessed by decompiler + (param-count int32 :offset-assert 28) + (param object 16 :offset-assert 32) ;; guessed by decompiler + ;;(UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (param-type object 16 :offset-assert 96) ;; guessed by decompiler + ;;(UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 12 + :size-assert #xa0 + :flag-assert #xc000000a0 + ;; field key uses ~A with a signed load. field expr uses ~A with a signed load. + (:methods + (new (symbol type object process vector) _type_) ;; 0 + (eval! (_type_ pair) object) ;; 9 + (script-context-method-10 (_type_ object pair) object) ;; 10 + (script-context-method-11 (_type_ pair pair symbol) symbol) ;; 11 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scene-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type continue-point basic) +(declare-type scene-player process) + +(deftype scene-actor (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (level symbol :offset-assert 8) ;; guessed by decompiler + (art-group string :offset-assert 12) ;; guessed by decompiler + (prefix string :offset-assert 16) ;; guessed by decompiler + (draw-frames pair :offset-assert 20) ;; guessed by decompiler + (scissor-frames pair :offset-assert 24) ;; guessed by decompiler + (shadow-frames pair :offset-assert 28) ;; guessed by decompiler + (cloth-reset-frames pair :offset-assert 32) ;; guessed by decompiler + (cloth-commands pair :offset-assert 36) ;; guessed by decompiler + (camera int16 :offset-assert 40) + (light-index uint8 :offset-assert 42) + (shadow-mask uint8 :offset-assert 43) + (shadow-values uint32 :offset-assert 44) + (flags uint32 :offset-assert 48) + (command-list pair :offset-assert 52) ;; guessed by decompiler + (shadow-flags int32 :offset-assert 56) + (shadow-volume-joint basic :offset-assert 60) + (draw-seg uint64 :offset-assert 64) + (no-draw-seg uint64 :offset-assert 72) + (last-frame float :offset-assert 80) + (process handle :offset-assert 88) ;; handle + ) + :method-count-assert 10 + :size-assert #x60 + :flag-assert #xa00000060 + (:methods + (setup-manipy-for-scene! (_type_ scene-player) (pointer process)) ;; 9 + ) + ) + +;; +++scene-h:scene-flags +(defenum scene-flags + :bitfield #t + :type uint32 + (scf0 0) + (scf1 1) + (scf2 2) + (scf3 3) + (scf4 4) + (scf5 5) + (scf6 6) + (scf7 7) + (scf8 8) + (scf9 9) + (scf10 10) + (scf11 11) + (scf12 12) + (scf13 13) + (scf14 14) + (scf15 15) + ) +;; ---scene-h:scene-flags + +(deftype scene (art-group) + ((scene-flags scene-flags :offset-assert 32) ;; guessed by decompiler + (mask-to-clear process-mask :offset-assert 36) ;; guessed by decompiler + (entity string :offset-assert 40) ;; guessed by decompiler + (art-group string :offset-assert 44) ;; guessed by decompiler + (anim string :offset-assert 48) ;; guessed by decompiler + (parts int32 :offset-assert 52) + (command-list pair :offset-assert 56) ;; guessed by decompiler + (cut-list pair :offset-assert 60) ;; guessed by decompiler + (wait-max-time time-frame :offset-assert 64) ;; time-frame + (wait-air-time time-frame :offset-assert 72) ;; time-frame + (wait-ground-time time-frame :offset-assert 80) ;; time-frame + (actor (array scene-actor) :offset-assert 88) ;; guessed by decompiler + (load-point basic :offset-assert 92) + (end-point basic :offset-assert 96) + (borrow pair :offset-assert 100) ;; guessed by decompiler + (sfx-volume float :offset-assert 104) + (ambient-volume float :offset-assert 108) + (music-volume float :offset-assert 112) + (music-delay float :offset-assert 116) + (scene-task uint16 :offset-assert 120) + (on-running pair :offset-assert 124) ;; guessed by decompiler + (on-complete pair :offset-assert 128) ;; guessed by decompiler + (vehicles basic :offset-assert 132) + (ipu basic :offset-assert 136) + ) + :method-count-assert 18 + :size-assert #x8c + :flag-assert #x120000008c + ;; field on-running uses ~A with a signed load. field on-complete uses ~A with a signed load. + (:methods + (scene-method-16 () none) ;; 16 ;; (init-spool-by-scene! (_type_ spool-anim) spool-anim) + (scene-method-17 () none) ;; 17 ;; (load-scene (_type_) scene) + ) + ) + +(deftype scene-player (process-drawable) + ((scene-list (array scene) :offset-assert 248) ;; guessed by decompiler + (scene scene :offset-assert 252) ;; guessed by decompiler + (scene-index int32 :offset-assert 256) + (anim spool-anim :offset-assert 260) ;; guessed by decompiler + (next-anim spool-anim :offset-assert 264) ;; guessed by decompiler + (camera handle :offset-assert 272) ;; handle + (main-entity entity-actor :offset-assert 280) ;; guessed by decompiler + (wait symbol :offset-assert 284) ;; guessed by decompiler + (old-target-pos transformq :inline :offset-assert 288) + (pre-cut-frame basic :offset-assert 336) + (preload-continue string :offset-assert 340) ;; guessed by decompiler + (preload-sound basic :offset-assert 344) + (dma-max uint32 :offset-assert 348) + (gui-id sound-id :offset-assert 352) ;; guessed by decompiler + (aborted? symbol :offset-assert 356) ;; guessed by decompiler + (scene-start-time time-frame :offset-assert 360) ;; time-frame + (targ-speed float :offset-assert 368) + (cur-speed float :offset-assert 372) + (speed-change-time time-frame :offset-assert 376) ;; time-frame + (speed-press-time time-frame :offset-assert 384) ;; time-frame + (speed-change-speed float :offset-assert 392) + (subtitle-change-time time-frame :offset-assert 400) ;; time-frame + (user-sound sound-id 4 :offset-assert 408) ;; guessed by decompiler + (last-frame float :offset-assert 424) + (end-point basic :offset-assert 428) + (blackout-end basic :offset-assert 432) + (new-trans-hook (function none) :offset-assert 436) ;; guessed by decompiler + (cur-trans-hook (function none) :offset-assert 440) ;; guessed by decompiler + (user-data uint64 :offset-assert 448) + ) + :method-count-assert 56 + :size-assert #x1c8 + :flag-assert #x38014001c8 + ;; field user-data uses ~A with a 64-bit load. + (:methods + (scene-player-method-50 () none) ;; 50 + (scene-player-method-51 () none) ;; 51 + (scene-player-method-52 () none) ;; 52 + (scene-player-method-53 () none) ;; 53 + (scene-player-method-54 () none) ;; 54 + (scene-player-method-55 () none) ;; 55 + ) + ) + +(define-extern *scene-player* (pointer scene-player)) +(define-extern *debug-menu-scene-play* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; pov-camera-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++pov-camera-h:pov-camera-flag +(defenum pov-camera-flag + :bitfield #t + :type int32 + (notify-of-abort 0) + (allow-abort 1) + (inherit-orientation 2) + (pcf3 3) + ) +;; ---pov-camera-h:pov-camera-flag + +(deftype pov-camera (process-drawable) + ((flags pov-camera-flag :offset-assert 248) ;; pov-camera-flag + (debounce-start-time time-frame :offset-assert 256) ;; time-frame + (notify-handle handle :offset-assert 264) ;; handle + (anim-name string :offset-assert 272) ;; guessed by decompiler + (command-list pair :offset-assert 276) ;; guessed by decompiler + (mask-to-clear process-mask :offset-assert 280) ;; guessed by decompiler + (music-volume-movie float :offset-assert 284) + (sfx-volume-movie float :offset-assert 288) + ) + :method-count-assert 60 + :size-assert #x124 + :flag-assert #x3c00a00124 + (:methods + (pov-camera-method-50 () none) ;; 50 + (pov-camera-method-51 () none) ;; 51 + (pov-camera-method-52 () none) ;; 52 + (pov-camera-method-53 () none) ;; 53 + (pov-camera-method-54 () none) ;; 54 + (pov-camera-method-55 () none) ;; 55 + (pov-camera-method-56 () none) ;; 56 + (pov-camera-method-57 () none) ;; 57 + (pov-camera-method-58 () none) ;; 58 + (pov-camera-method-59 () none) ;; 59 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; smush-control-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype smush-control (structure) + "This holds information about the current state of an object's smush." + ((start-time time-frame :offset-assert 0) ;; time-frame + (period float :offset-assert 8) + (duration float :offset-assert 12) + (amp float :offset-assert 16) + (damp-amp float :offset-assert 20) + (damp-period float :offset-assert 24) + (ticks float :offset-assert 28) + ) + :method-count-assert 15 + :size-assert #x20 + :flag-assert #xf00000020 + (:methods + (set-zero! "Reset this [[smush-control]]." (_type_) _type_) ;; 9 + (update! "Calculate the next smush amplitude and update the smush state." (_type_) float) ;; 10 + (get-no-update "Get the next amplitude, but do not update the smush state." (_type_) float) ;; 11 + (activate! "Start the smush with the given parameters." (_type_ float int int float float clock) _type_) ;; 12 + (nonzero-amplitude? "Is the smush currently active?" (_type_) symbol) ;; 13 + (die-on-next-update! "Set the dampening period so the smush stops on the next update." (_type_) _type_) ;; 14 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; debug-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype pos-history (structure) + ((points (inline-array vector) :offset-assert 0) ;; guessed by decompiler + (num-points int32 :offset-assert 4) + (h-first int32 :offset-assert 8) + (h-last int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype debug-vertex (structure) + ((trans vector4w :inline :offset-assert 0) + (normal vector3h :inline :offset-assert 16) + (st vector2h :inline :offset-assert 22) + (color uint32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype debug-vertex-stats (basic) + ((length int32 :offset-assert 4) + (pos-count int32 :offset-assert 8) + (vertex debug-vertex 600 :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4b10 + :flag-assert #x900004b10 + ) + +(deftype stack-debug (structure) + ((r29 uint128 :offset-assert 0) + (r31 uint128 :offset-assert 16) + (test-count int32 :offset-assert 32) + (visit int32 :offset-assert 36) + (obj basic :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ;; field obj uses ~A with a signed load. + ) + +(define-extern *color-black* rgba) +(define-extern *color-white* rgba) +(define-extern *color-gray* rgba) +(define-extern *color-red* rgba) +(define-extern *color-green* rgba) +(define-extern *color-blue* rgba) +(define-extern *color-cyan* rgba) +(define-extern *color-magenta* rgba) +(define-extern *color-yellow* rgba) +(define-extern *color-purple* rgba) +(define-extern *color-light-gray* rgba) +(define-extern *color-light-red* rgba) +(define-extern *color-light-green* rgba) +(define-extern *color-light-blue* rgba) +(define-extern *color-light-cyan* rgba) +(define-extern *color-light-magenta* rgba) +(define-extern *color-light-yellow* rgba) +(define-extern *color-dark-red* rgba) +(define-extern *color-dark-green* rgba) +(define-extern *color-dark-blue* rgba) +(define-extern *color-dark-cyan* rgba) +(define-extern *color-dark-magenta* rgba) +(define-extern *color-dark-yellow* rgba) +(define-extern *color-orange* rgba) +;; (define-extern draw-debug-text-3d function) +;; (define-extern draw-debug-x function) +;; (define-extern draw-debug-line function) +;; (define-extern draw-debug-vector function) +;; (define-extern draw-debug-flat-triangle function) +;; (define-extern draw-debug-sphere function) +;; (define-extern draw-debug-matrix function) +;; (define-extern draw-debug-box-with-transform function) +;; (define-extern draw-debug-line-sphere function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; joint-mod-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype joint-mod (basic) + ((mode joint-mod-mode :offset-assert 4) ;; guessed by decompiler + (process process-drawable :offset-assert 8) ;; guessed by decompiler + (joint cspace :offset-assert 12) + (target vector :inline :offset-assert 16) + (twist vector :inline :offset-assert 32) + (twist-max vector :inline :offset-assert 48) + (extra-twist deg :offset-assert 40) ;; degrees + (track-mode track-mode :offset-assert 44) + (look-at-count uint16 :offset-assert 46) + (twist-range-x meters :offset-assert 56) + (twist-range-y meters :offset-assert 60) + (twist-speed-x float :offset-assert 64) + (twist-speed-y float :offset-assert 68) + (trans vector :inline :offset-assert 80) + (smushy-old float :offset-assert 80) + (smushy-off float :offset-assert 84) + (smushyv float :offset-assert 88) + (quat quaternion :inline :offset-assert 96) + (scale vector :inline :offset-assert 112) + (notice-time uint64 :offset-assert 128) ;; time-frame + (flex-blend float :offset-assert 136) + (blend float :offset-assert 140) + (old-blend float :offset-assert 144) + (max-dist meters :offset-assert 148) + (ignore-angle deg :offset-assert 152) ;; degrees + (up uint8 :offset-assert 156) + (nose uint8 :offset-assert 157) + (ear uint8 :offset-assert 158) + (base-joint uint8 :offset-assert 159) + (base-nose uint8 :offset-assert 160) + (shutting-down? symbol :offset-assert 164) ;; guessed by decompiler + (parented-scale? symbol :offset-assert 168) ;; guessed by decompiler + ) + :method-count-assert 16 + :size-assert #xac + :flag-assert #x10000000ac + ;; field track-mode is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type joint-mod-mode process-drawable int) _type_) + (joint-mod-method-9 () none) ;; 9 ;; (mode-set! (_type_ joint-mod-mode) none) + (joint-mod-method-10 () none) ;; 10 ;; (target-set! (_type_ vector) none) + (joint-mod-method-11 () none) ;; 11 ;; (look-at! (_type_ vector symbol process) none) + (joint-mod-method-12 () none) ;; 12 ;; (reset-blend! (_type_) _type_) + (joint-mod-method-13 () none) ;; 13 ;; (twist-set! (_type_ float float float) vector) + (joint-mod-method-14 () none) ;; 14 ;; (trs-set! (_type_ vector quaternion vector) none) + (joint-mod-method-15 () none) ;; 15 ;; (shut-down (_type_) none) + ) + ) +|# + +#| +(deftype try-to-look-at-info (basic) + ((who uint64 :offset-assert 8) ;; handle + (horz float :offset-assert 16) + (vert float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype joint-mod-spinner (basic) + ((spin-axis vector :inline :offset-assert 16) + (angle float :offset-assert 32) + (spin-rate float :offset-assert 36) + (enable symbol :offset-assert 40) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype joint-mod-base (structure) + ((flags uint16 :offset-assert 0) ;; joint-mod-base-flags + (node-index int16 :offset-assert 2) + (proc (pointer process-drawable) :offset-assert 4) ;; guessed by decompiler + (callback (function cspace transformq none) :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #xc + :flag-assert #xc0000000c + (:methods + (joint-mod-base-method-9 () none) ;; 9 ;; (init (_type_ process-drawable uint joint-mod-base-flags) none) + (joint-mod-base-method-10 () none) ;; 10 ;; (attach-callback (_type_) none) + (joint-mod-base-method-11 () none) ;; 11 ;; (remove-callback (_type_) none) + ) + ) +|# + +#| +(deftype joint-mod-rotate-local (joint-mod-base) + ((rotation quaternion :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x20 + :flag-assert #xc00000020 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + ) + ) +|# + +#| +(deftype joint-mod-trans-rot-local (joint-mod-base) + ((trans vector :inline :offset-assert 16) + (rot quaternion :inline :offset-assert 32) + ) + :method-count-assert 12 + :size-assert #x30 + :flag-assert #xc00000030 + ) +|# + +#| +(deftype joint-mod-rotate-world (joint-mod-base) + ((rotation quaternion :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x20 + :flag-assert #xc00000020 + ) +|# + +#| +(deftype joint-mod-set-local (joint-mod-base) + ((transform transformq :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x40 + :flag-assert #xc00000040 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + ) + ) +|# + +#| +(deftype joint-mod-add-local (joint-mod-base) + ((transform transformq :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x40 + :flag-assert #xc00000040 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + ) + ) +|# + +#| +(deftype joint-mod-set-world (joint-mod-base) + ((transform transformq :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x40 + :flag-assert #xc00000040 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + ) + ) +|# + +#| +(deftype joint-mod-set-world-no-trans (joint-mod-base) + ((transform transformq :inline :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x40 + :flag-assert #xc00000040 + ) +|# + +#| +(deftype joint-mod-blend-local (joint-mod-base) + ((transform transformq :inline :offset-assert 16) + (blend-transform transformq :inline :offset-assert 64) + (blend float :offset-assert 112) + ) + :method-count-assert 12 + :size-assert #x74 + :flag-assert #xc00000074 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + ) + ) +|# + +#| +(deftype joint-mod-blend-world (joint-mod-base) + ((transform transformq :inline :offset-assert 16) + (blend-transform transformq :inline :offset-assert 64) + (blend float :offset-assert 112) + ) + :method-count-assert 12 + :size-assert #x74 + :flag-assert #xc00000074 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + ) + ) +|# + +#| +(deftype joint-mod-ik (basic) + ((flags uint8 :offset-assert 4) ;; joint-mod-ik-flags + (elbow-pole-vector-axis int8 :offset-assert 5) ;; uint32 + (elbow-rotation-axis int8 :offset-assert 6) ;; uint32 + (elbow-node int8 :offset-assert 7) + (process process-drawable :offset-assert 8) ;; guessed by decompiler + (callback (function joint-mod-ik matrix matrix vector object) :offset-assert 12) ;; guessed by decompiler + (handle-pos vector :inline :offset-assert 16) + (hand-dist float :offset-assert 32) + (blend float :offset-assert 36) + ) + :method-count-assert 11 + :size-assert #x28 + :flag-assert #xb00000028 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process-drawable int float) _type_) + (joint-mod-ik-method-9 () none) ;; 9 ;; (set-ik-target! (_type_ vector) none) + (joint-mod-ik-method-10 () none) ;; 10 ;; (enable-set! (_type_ symbol) none) + ) + ) +|# + +#| +(deftype ik-limb-setup (structure) + ((elbow-index int32 :offset-assert 0) + (hand-dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype joint-mod-polar-look-at (basic) + ((flags joint-mod-polar-flags :offset-assert 4) ;; guessed by decompiler + (ear int8 :offset-assert 8) + (up int8 :offset-assert 9) + (nose int8 :offset-assert 10) + (polar-internal-tilt-max float :offset-assert 12) + (polar-internal-radius float :offset-assert 16) + (polar-external-tilt-max float :offset-assert 20) + (polar-external-radius float :offset-assert 24) + (upward-tilt float :offset-assert 28) + (downward-tilt float :offset-assert 32) + (forward-twist float :offset-assert 36) + (backward-twist float :offset-assert 40) + (target vector :inline :offset-assert 48) + (blend-duration uint64 :offset-assert 64) ;; time-frame + (blend-start-time uint64 :offset-assert 72) ;; time-frame + (blend-start-value float :offset-assert 80) + (blend-max float :offset-assert 84) + ) + :method-count-assert 15 + :size-assert #x58 + :flag-assert #xf00000058 + (:methods + (joint-mod-polar-look-at-method-9 () none) ;; 9 ;; (initialize (_type_ process-drawable int) none) + (joint-mod-polar-look-at-method-10 () none) ;; 10 ;; (set-target! (_type_ vector) none) + (joint-mod-polar-look-at-method-11 () none) ;; 11 ;; (set-both-targets! (_type_ joint-mod-polar-look-at vector) none) + (joint-mod-polar-look-at-method-12 () none) ;; 12 ;; (blend-on! (_type_ time-frame float symbol) none) + (joint-mod-polar-look-at-method-13 () none) ;; 13 ;; (blend-to-off! (_type_ time-frame symbol) none) + (joint-mod-polar-look-at-method-14 () none) ;; 14 ;; (get-start-blend! (_type_) float) + ) + ) +|# + +;; (define-extern joint-mod-debug-draw function) ;; (function joint-mod none) +;; (define-extern joint-mod-spinner-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-rotate-local-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-trans-rot-local-callback function) +;; (define-extern vector<-cspace2! function) ;; (function vector cspace vector) +;; (define-extern joint-mod-rotate-world-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-set-local-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-add-local-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-set-world-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-set-world-no-trans-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-blend-local-callback function) ;; (function cspace transformq none) +;; (define-extern joint-mod-blend-world-callback function) ;; (function cspace transformq none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-func-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-mesh-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype collide-tri-result (structure) + "A triangle result of a collision." + ((vertex vector 3 :inline :offset-assert 0) ;; guessed by decompiler + (intersect vector :inline :offset-assert 48) + (normal vector :inline :offset-assert 64) + (pat pat-surface :offset-assert 80) ;; guessed by decompiler + (collide-ptr basic :offset-assert 84) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype collide-mesh-tri (structure) + "A triangle for foreground collision meshes." + ((vertex-index uint8 3 :offset-assert 0) ;; guessed by decompiler + (unused uint8 :offset-assert 3) + (pat pat-surface :offset-assert 4) ;; guessed by decompiler + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(declare-type collide-mesh-cache-tri structure) +(deftype collide-mesh (basic) + "A collision mesh for foreground objects, + bound to the joint specified by `joint-id`." + ((joint-id int32 :offset-assert 4) + (num-tris uint32 :offset-assert 8) + (num-verts uint32 :offset-assert 12) + (vertex-data (inline-array vector) :offset-assert 16) ;; guessed by decompiler + (tris collide-mesh-tri 1 :inline :offset 32) ;; guessed by decompiler + ) + :method-count-assert 15 + :size-assert #x28 + :flag-assert #xf00000028 + (:methods + (collide-mesh-method-9 () none) ;; 9 ;; (debug-draw-tris (_type_ process-drawable int) none) + (collide-mesh-method-10 () none) ;; 10 ;; (overlap-test (_type_ collide-mesh-cache-tri vector) symbol) + (collide-mesh-method-11 () none) ;; 11 ;; (should-push-away-test (_type_ collide-mesh-cache-tri collide-tri-result vector float) float) + (collide-mesh-method-12 () none) ;; 12 ;; (sphere-on-platform-test (_type_ collide-mesh-cache-tri collide-tri-result vector float) float) + (collide-mesh-method-13 () none) ;; 13 ;; (unpack-mesh-to-cache! (_type_ (inline-array collide-mesh-cache-tri) matrix) none) + (collide-mesh-method-14 () none) ;; 14 ;; (collide-mesh-math-1 (_type_ object object) none) + ) + ) + +(deftype collide-mesh-cache-tri (structure) + "A triangle stored in the foreground mesh collide cache." + ((vertex vector 3 :inline :offset-assert 0) ;; guessed by decompiler + (normal vector :inline :offset-assert 48) + (bbox4w bounding-box4w :inline :offset-assert 64) + (pat pat-surface :offset 60 :score 1) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + +(deftype collide-mesh-cache-entry (structure) + "A foreground mesh collide cache entry." + ((mat matrix :inline :offset-assert 0) + (tris collide-mesh-cache-tri :dynamic :offset-assert 64) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(declare-type collide-shape-prim basic) +(declare-type collide-shape-prim-mesh collide-shape-prim) + +(deftype collide-mesh-cache (basic) + "A collide cache for foreground meshes." + ((used-size uint32 :offset-assert 4) + (max-size uint32 :offset-assert 8) + (id uint32 :offset-assert 12) + (data uint8 48000 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #xbb90 + :flag-assert #xd0000bb90 + (:methods + (populate-for-prim-mesh (_type_ collide-shape-prim-mesh) collide-mesh-cache-entry) ;; 9 + (is-id? "Does this cache have the given ID?" (_type_ int) symbol) ;; 10 + (next-id! + "Reset all used entries in the cache and increment the ID. + If the id is zero, set it to 1." + (_type_) uint) ;; 11 + (allocate! (_type_ int) collide-mesh-cache-entry) ;; 12 + ) + ) + +(define-extern *collide-mesh-cache* collide-mesh-cache) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-shape-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype collide-rider (structure) + ((rider-handle uint64 :offset-assert 0) ;; handle + (sticky-prim collide-shape-prim :offset-assert 8) ;; guessed by decompiler + (prim-ry float :offset-assert 12) + (rider-local-pos vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype collide-rider-pool (basic) + ((alloc-count int32 :offset-assert 4) + (riders collide-rider 20 :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x290 + :flag-assert #xb00000290 + (:methods + (add-rider (_type_ handle) collide-rider) ;; 9 + (prepare (_type_) none) ;; 10 + ) + ) + +(declare-type collide-shape trsqv) +(declare-type collide-shape-moving collide-shape) + +(deftype pull-rider-info (structure) + ((rider collide-rider :offset-assert 0) + (rider-cshape collide-shape-moving :offset-assert 4) ;; guessed by decompiler + (rider-delta-ry float :offset-assert 8) + (rider-dest vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; +++collide-shape-h:overlaps-others-options +(defenum overlaps-others-options + :type uint32 + :bitfield #t + (oo0) + (oo1) + (oo2) + (oo3) + (oo4) + ) +;; ---collide-shape-h:overlaps-others-options + +;; +++collide-shape-h:collide-action +(defenum collide-action + :bitfield #t + :type uint32 + (solid 0) ;; 1 + (semi-solid 1) ;; 2 + (rideable 2) ;; 4 + (can-ride 3) ;; 8 + (dont-push-away 4) ;; 16 + (pull-rider-can-collide 5) ;; 32 + (deadly 6) ;; 64 + (persistent-attack 7) ;; 128 + (no-smack 8) ;; 256 + (no-standon 9) ;; 512 + (block-turn-around 10) ;; 1024 + (check-edge 11) ;; 2048 + (check-stuck 12) ;; 4096 + (stuck-wall-escape 13) ;; 8192 + (no-normal-reset 14) ;; 163884 + (edge-grabbed 15) ;; 32768 + (nav-sphere 16) ;; hi 1 + ) +;; ---collide-shape-h:collide-action + +(declare-type touching-list structure) + +(deftype overlaps-others-params (structure) + ((options overlaps-others-options :offset-assert 0) ;; guessed by decompiler + (collide-with-filter collide-spec :offset-assert 4) ;; guessed by decompiler + (tlist touching-list :offset-assert 8) ;; guessed by decompiler + (filtered-root-collide-with collide-spec :offset-assert 12) ;; guessed by decompiler + (filtered-child-collide-with collide-spec :offset-assert 16) ;; guessed by decompiler + (filtered-other-collide-as collide-spec :offset-assert 20) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype move-above-ground-params (structure) + ((gnd-collide-with collide-spec :offset-assert 0) ;; guessed by decompiler + (popup float :offset-assert 4) + (dont-move-if-overlaps? symbol :offset-assert 8) ;; guessed by decompiler + (hover-if-no-ground? symbol :offset-assert 12) ;; guessed by decompiler + (overlaps-params overlaps-others-params :inline :offset-assert 16) + (new-pos vector :inline :offset-assert 48) + (old-gspot-pos vector :inline :offset-assert 64) + (old-gspot-normal vector :inline :offset-assert 80) + (pat pat-surface :offset-assert 96) ;; guessed by decompiler + (on-ground? symbol :offset-assert 100) ;; guessed by decompiler + (do-move? symbol :offset-assert 104) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x6c + :flag-assert #x90000006c + ) + +(deftype collide-prim-core (structure) + "Collide primitives use this to store their world sphere and their collision flags." + ((world-sphere vector :inline :offset-assert 0) + (collide-as collide-spec :offset-assert 16) ;; guessed by decompiler + (collide-with collide-spec :offset-assert 20) ;; guessed by decompiler + (action collide-action :offset-assert 24) ;; guessed by decompiler + (prim-type int8 :offset-assert 28) + (unused1 uint8 3 :offset-assert 29) ;; guessed by decompiler + (quad uint128 2 :offset 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(declare-type collide-query structure) +(declare-type collide-cache basic) +(declare-type collide-cache-prim structure) +(declare-type collide-shape-prim-group basic) +(deftype collide-shape-prim (basic) + "Base class for collide primitives." + ((cshape collide-shape :offset-assert 4) ;; guessed by decompiler + (prim-id uint32 :offset-assert 8) + (transform-index int8 :offset-assert 12) + (unused2 int8 3 :offset-assert 13) ;; guessed by decompiler + (prim-core collide-prim-core :inline :offset-assert 16) + (local-sphere vector :inline :offset-assert 48) + (specific uint8 16 :offset-assert 64 :score -1) ;; guessed by decompiler + (world-sphere vector :inline :offset 16) + (collide-as collide-spec :offset 32) + (collide-with collide-spec :offset 36) + (action collide-action :offset 40) + (prim-type int8 :offset 44) + (radius meters :offset 60) + ) + :method-count-assert 20 + :size-assert #x50 + :flag-assert #x1400000050 + (:methods + (new (symbol type collide-shape uint int) _type_) ;; 0 + (debug-draw (_type_) none) ;; 9 + (add-fg-prim-using-box (_type_ collide-cache) none) ;; 10 + (add-fg-prim-using-line-sphere (_type_ collide-cache object) none) ;; 11 + (overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol) ;; 12 + (overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol) ;; 13 + (collide-shape-prim-method-14 () none) ;; 14 ;; (collide-shape-prim-method-14 () none) + (collide-with-collide-cache-prim-mesh (_type_ collide-query collide-cache-prim) none) ;; 15 + (collide-with-collide-cache-prim-sphere (_type_ collide-query collide-cache-prim) none) ;; 16 + (on-platform-test (_type_ collide-shape-prim collide-query float) none) ;; 17 + (should-push-away-test (_type_ collide-shape-prim collide-query) none) ;; 18 + (should-push-away-a-group-test (_type_ collide-shape-prim-group collide-query) none) ;; 19 + ) + ) + +(deftype collide-shape-prim-sphere (collide-shape-prim) + "A sphere primitive for collide shapes." + ((pat pat-surface :offset 64) ;; guessed by decompiler + (nav-radius float :offset 68) + (line-sphere-count int8 :offset 72) + (line-sphere-prim-id int8 :offset 73) + ) + :method-count-assert 20 + :size-assert #x50 + :flag-assert #x1400000050 + (:methods + (new (symbol type collide-shape uint) _type_) ;; 0 + ) + ) + +(deftype collide-shape-prim-mesh (collide-shape-prim) + "A mesh primitive for collide shapes." + ((mesh collide-mesh :offset 64) ;; guessed by decompiler + (mesh-id int32 :offset 68) + (mesh-cache-id uint32 :offset 72) + (mesh-cache-entry collide-mesh-cache-entry :offset 76) + ) + :method-count-assert 20 + :size-assert #x50 + :flag-assert #x1400000050 + (:methods + (new (symbol type collide-shape uint uint) _type_) ;; 0 + ) + ) + +(deftype collide-shape-prim-group (collide-shape-prim) + ((num-children uint8 :offset 64) + (num-alloc-children uint8 :offset 65) + (child (inline-array collide-shape-prim) :offset 68) ;; guessed by decompiler + ) + :method-count-assert 20 + :size-assert #x50 + :flag-assert #x1400000050 + (:methods + (new (symbol type collide-shape uint int) _type_) ;; 0 + ) + ) + +(declare-type collide-query structure) +(declare-type water-info structure) +(deftype collide-shape (trsqv) + "The parent of all of an object's collide primitives. + Most [[process-drawable]]s have a [[collide-shape]] that represents their root transform." + ((actor-hash-index int16 :offset 12) + (process process-drawable :offset-assert 140) ;; guessed by decompiler + (max-iteration-count uint8 :offset-assert 144) + (nav-flags uint8 :offset-assert 145) ;; nav-flags + (total-prims uint8 :offset-assert 146) + (num-riders uint8 :offset-assert 147) + (event-self symbol :offset 152) ;; guessed by decompiler + (event-other symbol :offset-assert 156) ;; guessed by decompiler + (root-prim collide-shape-prim :offset-assert 160) ;; guessed by decompiler + (riders (inline-array collide-rider) :offset-assert 164) ;; guessed by decompiler + (penetrate-using penetrate :offset-assert 168) + (penetrated-by penetrate :offset-assert 176) + (event-priority uint8 :offset 192) + (rider-max-momentum float :offset-assert 196) + ) + :method-count-assert 55 + :size-assert #xc8 + :flag-assert #x37000000c8 + ;; field penetrate is likely a value type. field penetrate is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process-drawable collide-list-enum) _type_) + (collide-shape-method-28 () none) ;; 28 ;; (move-by-vector! (_type_ vector) none) + (collide-shape-method-29 () none) ;; 29 ;; (move-to-point! (_type_ vector) none) + (collide-shape-method-30 () none) ;; 30 ;; (debug-draw (_type_) none) + (collide-shape-method-31 () none) ;; 31 ;; (fill-cache-for-shape (_type_ float collide-query) none) + (collide-shape-method-32 () none) ;; 32 ;; (fill-cache-integrate-and-collide (_type_ vector collide-query meters) none) + (collide-shape-method-33 () none) ;; 33 ;; (find-prim-by-id (_type_ uint) collide-shape-prim) + (collide-shape-method-34 () none) ;; 34 ;; (find-prim-by-id-logtest (_type_ uint) collide-shape-prim) + (collide-shape-method-35 () none) ;; 35 ;; (detect-riders! (_type_) symbol) + (collide-shape-method-36 () none) ;; 36 ;; (build-bounding-box-for-shape (_type_ bounding-box float collide-spec) symbol) + (collide-shape-method-37 () none) ;; 37 ;; (integrate-and-collide! (_type_ vector) none) + (collide-shape-method-38 () none) ;; 38 ;; (find-collision-meshes (_type_) none) + (collide-shape-method-39 () none) ;; 39 ;; (on-platform (_type_ collide-shape collide-query) symbol) + (collide-shape-method-40 () none) ;; 40 ;; (find-overlapping-shapes (_type_ overlaps-others-params) symbol) + (collide-shape-method-41 () none) ;; 41 ;; (shove-to-closest-point-on-path (_type_ attack-info float) vector) + (collide-shape-method-42 () none) ;; 42 ;; (should-push-away (_type_ collide-shape collide-query) symbol) + (collide-shape-method-43 () none) ;; 43 ;; (pull-rider! (_type_ pull-rider-info) none) + (collide-shape-method-44 () none) ;; 44 ;; (pull-riders! (_type_) symbol) + (collide-shape-method-45 () none) ;; 45 ;; (do-push-aways (_type_) collide-spec) + (collide-shape-method-46 () none) ;; 46 ;; (update-transforms (_type_) none) + (collide-shape-method-47 () none) ;; 47 ;; (set-collide-with! (_type_ collide-spec) none) + (collide-shape-method-48 () none) ;; 48 ;; (set-collide-as! (_type_ collide-spec) none) + (collide-shape-method-49 () none) ;; 49 ;; (modify-collide-as! (_type_ int collide-spec collide-spec) none) + (collide-shape-method-50 () none) ;; 50 ;; (send-shoves (_type_ process touching-shapes-entry float float float) symbol) + (collide-shape-method-51 () none) ;; 51 ;; (above-ground? (_type_ collide-query vector collide-spec float float float) symbol) + (collide-shape-method-52 () none) ;; 52 ;; (water-info-init! (_type_ water-info collide-action) water-info) + (collide-shape-method-53 () none) ;; 53 ;; (iterate-prims (_type_ (function collide-shape-prim none)) none) + (collide-shape-method-54 () none) ;; 54 ;; (pusher-init (_type_) none) + ) + ) + +#| +(deftype collide-shape-moving (collide-shape) + ((rider-time uint64 :offset-assert 200) ;; time-frame + (rider-last-move vector :inline :offset-assert 208) + (trans-old vector :inline :offset-assert 224) + (poly-pat pat-surface :offset-assert 272) ;; guessed by decompiler + (cur-pat pat-surface :offset-assert 276) ;; guessed by decompiler + (ground-pat pat-surface :offset-assert 280) ;; guessed by decompiler + (status uint64 :offset-assert 288) ;; collide-status + (reaction (function control-info collide-query vector vector collide-status) :offset-assert 316) ;; guessed by decompiler + (no-reaction (function collide-shape-moving collide-query vector vector object) :offset-assert 320) ;; guessed by decompiler + (local-normal vector :inline :offset-assert 336) + (surface-normal vector :inline :offset-assert 352) + (poly-normal vector :inline :offset-assert 368) + (ground-poly-normal vector :inline :offset-assert 384) + (gspot-pos vector :inline :offset-assert 400) + (gspot-normal vector :inline :offset-assert 416) + (ground-touch-point vector :inline :offset-assert 432) + (ground-impact-vel meters :offset-assert 448) + (surface-angle float :offset-assert 452) + (poly-angle float :offset-assert 456) + (touch-angle float :offset-assert 460) + (coverage float :offset-assert 464) + (dynam dynamics :offset-assert 468) ;; guessed by decompiler + ) + :method-count-assert 67 + :size-assert #x1d8 + :flag-assert #x43000001d8 + ;; field penetrate is likely a value type. field penetrate is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process-drawable collide-list-enum) _type_) + (collide-shape-moving-method-55 () none) ;; 55 ;; (find-ground (_type_ collide-query collide-spec float float float process) symbol) + (collide-shape-moving-method-56 () none) ;; 56 ;; (react-to-pat! (_type_ pat-surface) cshape-reaction-flags) + (collide-shape-moving-method-57 () none) ;; 57 ;; (integrate-no-collide! (_type_ vector) none) + (collide-shape-moving-method-58 () none) ;; 58 ;; (integrate-for-enemy-no-mtg (_type_ vector overlaps-others-params) symbol) + (collide-shape-moving-method-59 () none) ;; 59 ;; (move-above-ground (_type_ vector move-above-ground-params) none) + (collide-shape-moving-method-60 () none) ;; 60 ;; (move-to-ground (_type_ float float symbol collide-spec) none) + (collide-shape-moving-method-61 () none) ;; 61 ;; (move-to-ground-point (_type_ vector vector vector) none) + (collide-shape-moving-method-62 () none) ;; 62 ;; (compute-acc-due-to-gravity (_type_ vector float) vector) + (collide-shape-moving-method-63 () none) ;; 63 ;; (rbody-collision (_type_ rigid-body-control float) none) + (collide-shape-moving-method-64 () none) ;; 64 ;; (try-snap-to-surface (_type_ vector float float float) symbol) + (collide-shape-moving-method-65 () none) ;; 65 ;; (fill-and-try-snap-to-surface (_type_ vector float float float collide-query) symbol) + (collide-shape-moving-method-66 () none) ;; 66 ;; (step-collision! (_type_ vector vector float int) float) + ) + ) +|# + +;; (define-extern *collide-hit-by-player-list* object) ;; engine +;; (define-extern *collide-hit-by-others-list* object) ;; engine +;; (define-extern *collide-player-list* object) ;; engine +;; (define-extern *collide-shape-prim-backgnd* collide-shape-prim-mesh) ;; collide-shape-prim-mesh +;; (define-extern *collide-shape-prim-water* collide-shape-prim-mesh) ;; collide-shape-prim-mesh +;; (define-extern *collide-shape-prim-nav-mesh* collide-shape-prim-mesh) +;; (define-extern *collide-rider-pool* object) ;; collide-rider-pool + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-obs-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype manipy (process-drawable) + () + :flag-assert #x32007000f8 + ) + +(deftype part-spawner (process) + ((root trsqv :offset-assert 144) ;; guessed by decompiler + (part sparticle-launch-control :offset-assert 148) ;; guessed by decompiler + (path path-control :offset-assert 152) ;; guessed by decompiler + (sound ambient-sound :offset-assert 156) ;; guessed by decompiler + (sound-extra ambient-sound :offset-assert 160) ;; guessed by decompiler + (mode (pointer sparticle-launch-group) :offset-assert 164) ;; guessed by decompiler + (enable symbol :offset-assert 168) ;; guessed by decompiler + (path-pos float :offset-assert 172) + (path-speed float :offset-assert 176) + (last-velocity vector :inline :offset-assert 192) + (radius meters :offset-assert 208) + (world-sphere sphere :inline :offset-assert 224) + ) + :method-count-assert 17 + :size-assert #xf0 + :flag-assert #x11006000f0 + (:methods + (part-spawner-method-14 () none) ;; 14 ;; (active () _type_ :state) + (part-spawner-method-15 () none) ;; 15 ;; (is-in-view? (_type_) symbol) + (part-spawner-method-16 () none) ;; 16 + ) + ) + +#| +(deftype part-tracker (process) + ((root trsqv :offset-assert 144) ;; guessed by decompiler + (mat matrix :inline :offset-assert 160) + (offset vector :inline :offset-assert 224) + (local-offset vector :inline :offset-assert 240) + (userdata uint64 :offset-assert 256) + (user-time time-frame 2 :offset-assert 264) ;; guessed by decompiler + (user-vector vector :inline :offset-assert 288) + (user-handle uint32 2 :offset-assert 320) ;; guessed by decompiler + (part sparticle-launch-control :offset-assert 328) ;; guessed by decompiler + (callback (function part-tracker vector) :offset-assert 332) ;; guessed by decompiler + (linger-callback (function part-tracker vector) :offset-assert 336) ;; guessed by decompiler + (duration uint64 :offset-assert 344) ;; time-frame + (linger-duration uint64 :offset-assert 352) ;; time-frame + (state-time uint64 :offset-assert 360) ;; time-frame + (target uint64 :offset-assert 368) ;; handle + (target-joint int32 :offset-assert 376) + ) + :method-count-assert 19 + :size-assert #x17c + :flag-assert #x1300f0017c + ;; field userdata uses ~A with a 64-bit load. + (:methods + (part-tracker-method-9 () none) ;; 9 + (part-tracker-method-10 () none) ;; 10 + (part-tracker-method-11 () none) ;; 11 + (part-tracker-method-12 () none) ;; 12 + (part-tracker-method-13 () none) ;; 13 + (part-tracker-method-14 () none) ;; 14 ;; (active () _type_ :state) + (part-tracker-method-15 () none) ;; 15 ;; (linger () _type_ :state) + (part-tracker-method-16 () none) ;; 16 ;; (die () _type_ :state) + (part-tracker-method-17 () none) ;; 17 ;; (notify-parent-of-death (_type_) none) + (part-tracker-method-18 () none) ;; 18 + ) + ) +|# + +#| +(deftype part-tracker-init-params (structure) + ((local-offset vector :inline :offset-assert 0) + (userdata uint64 :offset-assert 16) + (duration time-frame :offset-assert 24) ;; guessed by decompiler + (local-space-param int32 :offset-assert 28) + (group sparticle-launch-group :offset-assert 32) ;; guessed by decompiler + (callback (function part-tracker vector) :offset-assert 36) ;; guessed by decompiler + (local-space-callback basic :offset-assert 40) + (target process-drawable :offset-assert 44) ;; guessed by decompiler + (mat-joint object :offset-assert 48) ;; guessed by decompiler + (subsampler-num float :offset-assert 52) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ;; field userdata uses ~A with a 64-bit load. field mat-joint uses ~A with a signed load. + ) +|# + +#| +(deftype part-tracker-subsampler (part-tracker) + ((subsampler sparticle-subsampler :offset-assert 380) ;; guessed by decompiler + ) + :method-count-assert 19 + :size-assert #x180 + :flag-assert #x1300f00180 + ) +|# + +#| +(deftype lightning-tracker (process) + ((root trsqv :offset-assert 144) ;; guessed by decompiler + (lightning lightning-control :offset-assert 148) ;; guessed by decompiler + (callback (function lightning-tracker none) :offset-assert 152) ;; guessed by decompiler + (duration uint64 :offset-assert 160) ;; time-frame + (start-time uint64 :offset-assert 168) ;; time-frame + (offset0 vector :inline :offset-assert 176) + (offset1 vector :inline :offset-assert 192) + (target0 uint64 :offset-assert 208) ;; handle + (target1 uint64 :offset-assert 216) ;; handle + (target-joint0 int32 :offset-assert 224) + (target-joint1 int32 :offset-assert 228) + (sound sound-id :offset-assert 232) ;; guessed by decompiler + (userdata uint64 :offset-assert 240) + (user-time time-frame 2 :offset-assert 248) ;; guessed by decompiler + (user-vector vector :inline :offset-assert 272) + (user-handle handle 2 :offset-assert 304) ;; guessed by decompiler + ) + :method-count-assert 18 + :size-assert #x140 + :flag-assert #x1200b00140 + ;; field userdata uses ~A with a 64-bit load. + (:methods + (lightning-tracker-method-9 () none) ;; 9 + (lightning-tracker-method-10 () none) ;; 10 + (lightning-tracker-method-11 () none) ;; 11 + (lightning-tracker-method-12 () none) ;; 12 + (lightning-tracker-method-13 () none) ;; 13 + (lightning-tracker-method-14 () none) ;; 14 ;; (active () _type_ :state) + (lightning-tracker-method-15 () none) ;; 15 ;; (notify-parent-of-death (_type_) none) + (lightning-tracker-method-16 () none) ;; 16 ;; (update (_type_) none) + (lightning-tracker-method-17 () none) ;; 17 + ) + ) +|# + +#| +(deftype touch-tracker (process-drawable) + ((duration uint64 :offset-assert 248) ;; time-frame + (target uint64 :offset-assert 256) ;; handle + (event symbol :offset-assert 264) ;; guessed by decompiler + (run-function (function object) :offset-assert 268) ;; guessed by decompiler + (callback (function touch-tracker none) :offset-assert 272) ;; guessed by decompiler + (event-mode symbol :offset-assert 276) ;; guessed by decompiler + ) + :method-count-assert 51 + :size-assert #x118 + :flag-assert #x3300900118 + (:methods + (touch-tracker-method-50 () none) ;; 50 + ) + ) +|# + +#| +(deftype gui-query (structure) + ((x-position int32 :offset-assert 0) + (y-position int32 :offset-assert 4) + (message string :offset-assert 8) ;; guessed by decompiler + (decision symbol :offset-assert 12) ;; guessed by decompiler + (only-allow-cancel symbol :offset-assert 16) ;; guessed by decompiler + (no-msg string :offset-assert 20) ;; guessed by decompiler + (message-space int32 :offset-assert 24) + ) + :method-count-assert 11 + :size-assert #x1c + :flag-assert #xb0000001c + (:methods + (gui-query-method-9 () none) ;; 9 ;; (gui-query-method-9 () none) + (gui-query-method-10 () none) ;; 10 ;; (gui-query-method-10 () none) + ) + ) +|# + +#| +(deftype othercam (process) + ((hand uint64 :offset-assert 144) ;; handle + (old-global-mask process-mask :offset-assert 152) ;; guessed by decompiler + (mask-to-clear process-mask :offset-assert 156) ;; guessed by decompiler + (cam-joint-index int32 :offset-assert 160) + (old-pos vector :inline :offset-assert 176) + (old-mat-z vector :inline :offset-assert 192) + (had-valid-frame symbol :offset-assert 208) ;; guessed by decompiler + (border-value basic :offset-assert 212) + (die? symbol :offset-assert 216) ;; guessed by decompiler + (survive-anim-end? symbol :offset-assert 220) ;; guessed by decompiler + (spooling? symbol :offset-assert 224) ;; guessed by decompiler + (fov float :offset-assert 228) + ) + :method-count-assert 15 + :size-assert #xe8 + :flag-assert #xf006000e8 + (:methods + (othercam-method-9 () none) ;; 9 + (othercam-method-10 () none) ;; 10 + (othercam-method-11 () none) ;; 11 + (othercam-method-12 () none) ;; 12 + (othercam-method-13 () none) ;; 13 + (othercam-method-14 () none) ;; 14 + ) + (:states + othercam-running ;; associated process guessed by decompiler, old: (state othercam) + ) + ) +|# + +#| +(deftype explosion-init-params (structure) + ((spawn-point vector :inline :offset-assert 0) + (spawn-quat quaternion :inline :offset-assert 16) + (radius float :offset-assert 32) + (scale float :offset-assert 36) + (group sparticle-launch-group :offset-assert 40) ;; guessed by decompiler + (group-on-kill basic :offset-assert 44) + (collide-with collide-spec :offset-assert 48) ;; guessed by decompiler + (collide-lof-check? basic :offset-assert 52) + (damage float :offset-assert 56) + (damage-scale float :offset-assert 60) + (vehicle-damage-factor float :offset-assert 64) + (vehicle-impulse-factor float :offset-assert 68) + (velocity vector :inline :offset-assert 80) + (ignore-proc uint64 :offset-assert 96) ;; handle + (attacker uint64 :offset-assert 104) + (wpn-type int8 :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x71 + :flag-assert #x900000071 + ) +|# + +#| +(deftype explosion (process-drawable) + ((start-time uint64 :offset-assert 248) ;; time-frame + (duration uint32 :offset-assert 256) + (linger-duration uint32 :offset-assert 260) + (attack-id uint32 :offset-assert 264) + (mat matrix :inline :offset-assert 272) + (params explosion-init-params :inline :offset-assert 336) + (killed-someone? basic :offset-assert 452) + (spawn-proc uint64 :offset-assert 456) + (spawn-type basic :offset-assert 464) + ) + :method-count-assert 53 + :size-assert #x1d4 + :flag-assert #x35015001d4 + (:methods + (explosion-method-50 () none) ;; 50 + (explosion-method-51 () none) ;; 51 + (explosion-method-52 () none) ;; 52 + ) + ) +|# + +(deftype process-hidden (process) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + (:methods + (process-hidden-method-14 () none) ;; 14 ;; (die () _type_ :state) + (process-hidden-method-15 () none) ;; 15 + ) + ) + +#| +(deftype simple-prim (process-drawable) + ((strip prim-strip :offset-assert 248) ;; guessed by decompiler + ) + :method-count-assert 56 + :size-assert #xfc + :flag-assert #x38007000fc + (:methods + (simple-prim-method-50 () none) ;; 50 + (simple-prim-method-51 () none) ;; 51 + (simple-prim-method-52 () none) ;; 52 + (simple-prim-method-53 () none) ;; 53 + (simple-prim-method-54 () none) ;; 54 + (simple-prim-method-55 () none) ;; 55 + ) + ) +|# + +#| +(deftype task-arrow-params (structure) + ((flags task-arrow-flags :offset-assert 0) ;; guessed by decompiler + (map-icon uint16 :offset-assert 4) + (pos vector :inline :offset-assert 16) + (quat quaternion :inline :offset-assert 32) + (color uint32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype external-camera-controller (process) + ((pause-time uint64 :offset-assert 144) ;; time-frame + (blur symbol :offset-assert 152) ;; guessed by decompiler + ) + :method-count-assert 16 + :size-assert #x9c + :flag-assert #x100010009c + (:methods + (external-camera-controller-method-9 () none) ;; 9 + (external-camera-controller-method-10 () none) ;; 10 + (external-camera-controller-method-11 () none) ;; 11 + (external-camera-controller-method-12 () none) ;; 12 + (external-camera-controller-method-13 () none) ;; 13 + (external-camera-controller-method-14 () none) ;; 14 ;; (active () _type_ :state) + (external-camera-controller-method-15 () none) ;; 15 + ) + ) +|# + +;; (define-extern *simple-prim-additive* object) ;; gs-alpha +;; (define-extern *simple-prim-alpha-blend* object) ;; gs-alpha +;; (define-extern *simple-prim-subtractive* object) ;; gs-alpha + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; trajectory-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype trajectory (structure) + ((initial-position vector :inline :offset-assert 0) + (initial-velocity vector :inline :offset-assert 16) + (time float :offset-assert 32) + (gravity meters :offset-assert 36) + ) + :method-count-assert 18 + :size-assert #x28 + :flag-assert #x1200000028 + (:methods + (compute-trans-at-time (_type_ float vector) vector) ;; 9 + (compute-transv-at-time (_type_ float vector) vector) ;; 10 + (compute-time-until-apex (_type_) float) ;; 11 + (setup-from-to-duration! (_type_ vector vector float float) none) ;; 12 + (setup-from-to-xz-vel! (_type_ vector vector float float) none) ;; 13 + (setup-from-to-y-vel! (_type_ vector vector float float) none) ;; 14 + (setup-from-to-height! (_type_ vector vector float float) none) ;; 15 + (setup-from-to-duration-and-height! (_type_ vector vector float float) none) ;; 16 + (debug-draw (_type_) none) ;; 17 + ) + ) + +#| +(deftype impact-control (structure) + ((process (pointer process-drawable) :offset-assert 0) ;; guessed by decompiler + (radius meters :offset-assert 4) + (joint int32 :offset-assert 8) + (collide-with collide-spec :offset-assert 12) ;; guessed by decompiler + (start-time uint64 :offset-assert 16) + (trans vector 2 :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (dir vector :inline :offset-assert 64) + ) + :method-count-assert 12 + :size-assert #x50 + :flag-assert #xc00000050 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process-drawable int float collide-spec) _type_) + (impact-control-method-9 () none) ;; 9 ;; (initialize (_type_ process-drawable int float collide-spec) impact-control) + (impact-control-method-10 () none) ;; 10 ;; (update-from-cspace (_type_) none) + (impact-control-method-11 () none) ;; 11 ;; (impact-control-method-11 (_type_ collide-query process pat-surface) float) + ) + ) +|# + +#| +(deftype point-tracker (structure) + ((trans vector 2 :offset-assert 0) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 12 + :size-assert #x20 + :flag-assert #xc00000020 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type vector vector) _type_) + (point-tracker-method-9 () none) ;; 9 ;; (initialize (_type_ vector vector) point-tracker) + (point-tracker-method-10 () none) ;; 10 ;; (point-tracker-method-10 (_type_ vector vector vector float) vector) + (point-tracker-method-11 () none) ;; 11 ;; (point-tracker-method-11 (_type_ vector vector vector float) vector) + ) + ) +|# + +#| +(deftype combo-tracker (point-tracker) + ((target uint64 :offset-assert 32) ;; handle + (move-start-time uint64 :offset-assert 40) ;; time-frame + ) + :method-count-assert 14 + :size-assert #x30 + :flag-assert #xe00000030 + (:methods + (combo-tracker-method-12 () none) ;; 12 ;; (combo-tracker-method-12 (_type_ vector vector process time-frame) combo-tracker) + (combo-tracker-method-13 () none) ;; 13 ;; (combo-tracker-method-13 (_type_ handle vector float vector float) process-focusable) + ) + ) +|# + +#| +(deftype traj2d-params (structure) + ((x float :offset-assert 0) + (y float :offset-assert 4) + (gravity float :offset-assert 8) + (initial-tilt float :offset-assert 12) + (initial-speed float :offset-assert 16) + (time float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype traj3d-params (structure) + ((gravity float :offset-assert 0) + (initial-tilt float :offset-assert 4) + (initial-speed float :offset-assert 8) + (time float :offset-assert 12) + (src vector :inline :offset-assert 16) + (dest vector :inline :offset-assert 32) + (diff vector :inline :offset-assert 48) + (initial-velocity vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype cubic-curve (structure) + ((mat matrix :inline :offset-assert 0) + ) + :method-count-assert 14 + :size-assert #x40 + :flag-assert #xe00000040 + (:methods + (cubic-curve-method-9 () none) ;; 9 ;; (cubic-curve-method-9 (_type_ vector vector vector vector) none) + (cubic-curve-method-10 () none) ;; 10 ;; (cubic-curve-method-10 (_type_ vector float) vector) + (cubic-curve-method-11 () none) ;; 11 ;; (cubic-curve-method-11 (_type_ vector float) vector) + (cubic-curve-method-12 () none) ;; 12 ;; (cubic-curve-method-12 (_type_ vector float) vector) + (cubic-curve-method-13 () none) ;; 13 ;; (debug-draw-curve (_type_) none) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-touch-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype touching-prim (structure) + ((cprim collide-shape-prim :offset-assert 0) ;; guessed by decompiler + (has-tri? symbol :offset-assert 4) ;; guessed by decompiler + (tri collide-tri-result :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) +|# + +#| +(deftype touching-prims-entry (structure) + ((next touching-prims-entry :offset-assert 0) + (prev touching-prims-entry :offset-assert 4) + (allocated? symbol :offset-assert 8) ;; guessed by decompiler + (u float :offset-assert 12) + (prim1 touching-prim :inline :offset-assert 16) + (prim2 touching-prim :inline :offset-assert 128) + ) + :method-count-assert 13 + :size-assert #xe8 + :flag-assert #xd000000e8 + (:methods + (touching-prims-entry-method-9 () none) ;; 9 ;; (touching-prims-entry-method-9 (_type_ vector) vector) + (touching-prims-entry-method-10 () none) ;; 10 ;; (get-middle-of-bsphere-overlap (_type_ vector) vector) + (touching-prims-entry-method-11 () none) ;; 11 ;; (get-touched-prim (_type_ collide-shape touching-shapes-entry) collide-shape-prim) + (touching-prims-entry-method-12 () none) ;; 12 ;; (get-touched-tri (_type_ collide-shape touching-shapes-entry) collide-tri-result) + ) + ) +|# + +#| +(deftype touching-prims-entry-pool (structure) + ((head touching-prims-entry :offset-assert 0) + (nodes touching-prims-entry 64 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #x3c10 + :flag-assert #xd00003c10 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (touching-prims-entry-pool-method-9 () none) ;; 9 ;; (alloc-node (_type_) touching-prims-entry) + (touching-prims-entry-pool-method-10 () none) ;; 10 ;; (get-free-node-count (_type_) int) + (touching-prims-entry-pool-method-11 () none) ;; 11 ;; (init-list! (_type_) none) + (touching-prims-entry-pool-method-12 () none) ;; 12 ;; (free-node (_type_ touching-prims-entry) touching-prims-entry) + ) + ) +|# + +#| +(deftype touching-shapes-entry (structure) + ((cshape1 collide-shape :offset-assert 0) ;; guessed by decompiler + (cshape2 collide-shape :offset-assert 4) ;; guessed by decompiler + (resolve-u int8 :offset-assert 8) + (head touching-prims-entry :offset-assert 12) + (handle1 uint64 :offset-assert 16) ;; handle + (handle2 uint64 :offset-assert 24) ;; handle + ) + :method-count-assert 15 + :size-assert #x20 + :flag-assert #xf00000020 + (:methods + (touching-shapes-entry-method-9 () none) ;; 9 ;; (get-head (_type_) touching-prims-entry) + (touching-shapes-entry-method-10 () none) ;; 10 ;; (get-next (_type_ touching-shapes-entry) touching-prims-entry) + (touching-shapes-entry-method-11 () none) ;; 11 ;; (get-touched-shape (_type_ collide-shape) collide-shape) + (touching-shapes-entry-method-12 () none) ;; 12 ;; (prims-touching? (_type_ collide-shape uint) touching-prims-entry) + (touching-shapes-entry-method-13 () none) ;; 13 ;; (prims-touching-action? (_type_ collide-shape collide-action collide-action) basic) + (touching-shapes-entry-method-14 () none) ;; 14 ;; (free-touching-prims-list (_type_) none) + ) + ) +|# + +#| +(deftype touching-list (structure) + ((num-touching-shapes int32 :offset-assert 0) + (resolve-u int8 :offset-assert 4) + (touching-shapes touching-shapes-entry 32 :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x408 + :flag-assert #xe00000408 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (touching-list-method-9 () none) ;; 9 ;; (add-touching-prims (_type_ collide-shape-prim collide-shape-prim float collide-tri-result collide-tri-result) none) + (touching-list-method-10 () none) ;; 10 ;; (free-nodes (_type_) none) + (touching-list-method-11 () none) ;; 11 ;; (update-from-step-size (_type_ float) none) + (touching-list-method-12 () none) ;; 12 ;; (send-events-for-touching-shapes (_type_) none) + (touching-list-method-13 () none) ;; 13 ;; (get-shapes-entry (_type_ collide-shape collide-shape) touching-shapes-entry) + ) + ) +|# + +;; (define-extern *touching-prims-entry-pool* object) ;; touching-prims-entry-pool +;; (define-extern *touching-list* object) ;; touching-list + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; process-drawable-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern cspace-by-name-no-fail (function process-drawable string cspace)) +(define-extern cspace-index-by-name-no-fail (function process-drawable string int)) +(define-extern num-func-none (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-+! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func--! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-loop! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-loop-speedless! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-loop-set! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-seek! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-blend-in! (function joint-control-channel float float float float :behavior process)) +(define-extern joint-channel-float-delete! (function joint-control-channel none)) +(define-extern num-func-interp-play! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-interp1-play! (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-chan (function joint-control-channel float float float float :behavior process)) +(define-extern num-func-identity (function joint-control-channel float float float float :behavior process)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; process-focusable ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype process-focusable (process-drawable) + ((focus-status uint64 :offset-assert 248) ;; focus-status + ) + :method-count-assert 59 + :size-assert #x100 + :flag-assert #x3b00700100 + (:methods + (process-focusable-method-50 () none) ;; 50 + (process-focusable-method-51 () none) ;; 51 + (process-focusable-method-52 () none) ;; 52 + (process-focusable-method-53 () none) ;; 53 + (process-focusable-method-54 () none) ;; 54 + (process-focusable-method-55 () none) ;; 55 + (process-focusable-method-56 () none) ;; 56 + (process-focusable-method-57 () none) ;; 57 + (process-focusable-method-58 () none) ;; 58 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; focus ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype focus (structure) + "A structure that keeps a handle to a [[process-focusable]]." + ((handle uint64 :offset-assert 0) ;; handle + (collide-with collide-spec :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #xc + :flag-assert #xd0000000c + (:methods + (clear-focused "Reset the focus' handle." (_type_) none) ;; 9 + (collide-spec-match? + "If the focused process is not dead, + check that the [[collide-spec]] of the focus and the process match." + (_type_ process-focusable) object) ;; 10 + (reset-to-collide-spec "Reset this focus with the given [[collide-spec]]." (_type_ collide-spec) none) ;; 11 + (try-update-focus "Try to set the `handle` of this focus to the given process." (_type_ process-focusable) symbol) ;; 12 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; effect-control-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++effect-control-h:effect-control-flag +(defenum effect-control-flag + :type uint32 + :bitfield #t + (ecf0 0) + (ecf1 1) + (ecf2 2) + (ecf3 3) + (ecf4 4) + (ecf5 5) + (ecf6 6) + (ecf7 7) + (ecf8 8) + (ecf9 9) + (ecf10 10) + (ecf11 11) + (ecf12 12) + (ecf13 13) + (ecf14 14) + (ecf15 15) + ) +;; ---effect-control-h:effect-control-flag + +(deftype effect-control (basic) + "An effect such as a particle with sound effects that plays during an animation." + ((process process-drawable :offset-assert 4) ;; guessed by decompiler + (flags effect-control-flag :offset-assert 8) ;; guessed by decompiler + (last-frame-group art-joint-anim :offset-assert 12) ;; guessed by decompiler + (last-frame-num float :offset-assert 16) + (channel-offset int32 :offset-assert 20) + (res res-lump :offset-assert 24) ;; guessed by decompiler + (name (pointer res-tag) :offset-assert 28) ;; guessed by decompiler + (param uint32 :offset-assert 32) + ) + :method-count-assert 15 + :size-assert #x24 + :flag-assert #xf00000024 + (:methods + (new (symbol type process-drawable) _type_) ;; 0 + (effect-control-method-9 (_type_) none) ;; 9 + (do-effect (_type_ string float int) none) ;; 10 + (do-effect-for-surface (_type_ symbol float int basic pat-surface) none) ;; 11 + (play-effect-sound (_type_ symbol float int basic sound-name) int) ;; 12 + (set-channel-offset! (_type_ int) none) ;; 13 + (play-effects-from-res-lump (_type_ float float float) none) ;; 14 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-frag-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype collide-frag-vertex (vector) + ((data float 4 :offset-assert 0) ;; guessed by decompiler + (x float :offset-assert 0) + (y float :offset-assert 4) + (z float :offset-assert 8) + (w float :offset-assert 12) + (quad uint128 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype collide-frag-mesh (basic) + ((packed-data uint32 :offset-assert 4) + (pat-array uint32 :offset-assert 8) + (strip-data-len uint16 :offset-assert 12) + (poly-count uint16 :offset-assert 14) + (base-trans vector4w :inline :offset-assert 16) + (vertex-count uint8 :offset-assert 28) + (vertex-data-qwc uint8 :offset-assert 29) + (total-qwc uint8 :offset-assert 30) + (unused uint8 :offset-assert 31) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype collide-fragment (drawable) + ((mesh collide-frag-mesh :offset-assert 8) ;; guessed by decompiler + (collide-new basic :offset-assert 12) + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ) +|# + +#| +(deftype drawable-inline-array-collide-fragment (drawable-inline-array) + ((data collide-fragment 1 :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 17 + :size-assert #x44 + :flag-assert #x1100000044 + ) +|# + +;; (deftype drawable-tree-collide-fragment (drawable-tree) +;; () +;; :flag-assert #x1100000020 +;; ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-hash-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype collide-hash-scratch (structure) + "Scratchpad memory layout for collide-hash. Bitmask of things that have already been checked" + ((collidable-bits uint128 128 :offset-assert 0) ;; guessed by decompiler + (poly-bits uint64 2 :offset 0) ;; guessed by decompiler + (id-bits uint32 512 :offset 0) ;; guessed by decompiler + (tris uint32 :offset-assert 2048) + ) + :method-count-assert 9 + :size-assert #x804 + :flag-assert #x900000804 + ) + +(deftype collide-hash-bucket (structure) + "A bucket is a reference to a list of items that intersect a grid cell. + For the broadphase, the items are collide-hash-item (wrapper of collide-hash-fragment). + For the narrowphase, the items are entries in the index list, which contains poly indices." + ((index int16 :offset-assert 0) + (count int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype collide-hash-item (structure) + "Items that are 'hashed' in the broadphase. Contains unique ID for checking against already-visited-bitmask + and a pointer to the actual collide-hash-fragment, or possibly a TIE." + ((id uint32 :offset-assert 0) + (collidable basic :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype collide-hash-poly (structure) + "A polygon in the narrow-phase data. This is just indices into the vertex and PAT tables." + ((data uint8 4 :offset-assert 0) ;; guessed by decompiler + (vert-index0 uint8 :offset 0) + (vert-index1 uint8 :offset 1) + (vert-index2 uint8 :offset 2) + (pat-index uint8 :offset 3) + (word uint32 :offset 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype collide-hash-fragment-stats (structure) + ((num-verts uint16 :offset-assert 0) + (num-polys uint8 :offset-assert 2) + (poly-count uint8 :offset-assert 3) + ) + :pack-me + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype collide-hash-fragment (drawable) + "A mesh fragment for the Jak2/Jak3 collision system. This is a 'hash' of triangles into a grid + where the 'hash' function is just identity." + ((num-buckets uint16 :offset 4) + (num-indices uint16 :offset 6) + (pat-array uint32 :offset 8) + (bucket-array uint32 :offset 12) + (grid-step vector :inline :offset-assert 32) + (bbox bounding-box :inline :offset-assert 48) + (bbox4w bounding-box4w :inline :offset-assert 80) + (axis-scale vector :inline :offset 64) + (avg-extents vector :inline :offset 80) + (dimension-array uint32 4 :offset 44) ;; guessed by decompiler + (stats collide-hash-fragment-stats :inline :offset 60) + (num-verts uint16 :offset 60) + (num-polys uint8 :offset 62) + (poly-count uint8 :offset 63) + (poly-array uint32 :offset 76) + (vert-array uint32 :offset 92) + (index-array uint32 :offset 108) + ) + :method-count-assert 17 + :size-assert #x70 + :flag-assert #x1100000070 + ) + +(deftype collide-hash-fragment-array (array) + "A collection of collide-hash-fragments. These are used by the instanced collision if a single instance + needs more than 1 collide-hash-fragment worth of triangles." + ((fragments collide-hash-fragment :dynamic :offset 12) ;; added + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype collide-hash (drawable) + ((num-ids uint16 :offset 4) + (id-count uint16 :offset 6) + (num-buckets uint32 :offset 8) + (qwc-id-bits uint32 :offset 12) + (grid-step vector :inline :offset 16) + (bbox bounding-box :inline :offset 32) + (bbox4w bounding-box4w :inline :offset 64) + (axis-scale vector :inline :offset 48) + (avg-extents vector :inline :offset 64) + (bucket-array uint32 :offset 44) + (item-array (inline-array collide-hash-item) :offset 60 :score 1) ;; guessed by decompiler + (dimension-array uint32 3 :offset 76) ;; guessed by decompiler + (num-items uint32 :offset 92) + ) + :method-count-assert 17 + :size-assert #x60 + :flag-assert #x1100000060 + ) + +(define-extern *collide-list-boxes* symbol) ;; object +(define-extern *collide-hash-fragments* int) ;; object +(define-extern *collide-hash-fragments-tfrag* int) ;; object +(define-extern *collide-hash-fragments-instance* int) ;; object +(define-extern *already-printed-exeeded-max-cache-tris* symbol) ;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; water-info-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype water-info (structure) + ((trans vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (base-height meters :offset-assert 32) + (depth meters :offset-assert 36) + (handle uint64 :offset-assert 40) ;; handle + (flags water-flag :offset-assert 48) + (prim drawable-region-prim :offset-assert 52) ;; guessed by decompiler + (extra-flags uint32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype water-sphere (structure) + ((sphere sphere :inline :offset-assert 0) + (flags water-flag :offset-assert 16) + (user0 int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ragdoll-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ragdoll-edit-info (structure) + ((editing symbol :offset-assert 0) ;; guessed by decompiler + (current-func uint64 :offset-assert 8) + (analog-func uint64 :offset-assert 16) + (affect uint64 :offset-assert 24) + (single-step uint64 :offset-assert 32) + (collision symbol :offset-assert 40) ;; guessed by decompiler + (gravity symbol :offset-assert 44) ;; guessed by decompiler + (skel-visible uint64 :offset-assert 48) + (current-joint int8 :offset-assert 56) + (auto-setup-now basic :offset-assert 60) + (child-stack ragdoll-joint 60 :offset-assert 64) ;; guessed by decompiler + (child-stack-num int8 :offset-assert 304) + (last-frame uint64 :offset-assert 312) ;; time-frame + (last-frame-dur uint64 :offset-assert 320) ;; time-frame + ) + :method-count-assert 18 + :size-assert #x148 + :flag-assert #x1200000148 + (:methods + (ragdoll-edit-info-method-9 () none) ;; 9 ;; (has-joint? (_type_ ragdoll-joint) symbol) + (ragdoll-edit-info-method-10 () none) ;; 10 ;; (ragdoll-edit-info-method-10 (_type_ object ragdoll-joint) symbol) + (ragdoll-edit-info-method-11 () none) ;; 11 ;; (fill-child-stack! (_type_ ragdoll) none) + (ragdoll-edit-info-method-12 () none) ;; 12 ;; (ragdoll-edit-info-method-12 (_type_) none) + (ragdoll-edit-info-method-13 () none) ;; 13 ;; (cycle-joints! (_type_ ragdoll) none) + (ragdoll-edit-info-method-14 () none) ;; 14 ;; (ragdoll-edit-info-method-14 (_type_ matrix vector (inline-array ragdoll-joint) ragdoll process-drawable) vector) + (ragdoll-edit-info-method-15 () none) ;; 15 ;; (ragdoll-edit-info-method-15 (_type_) none) + (ragdoll-edit-info-method-16 () none) ;; 16 ;; (ragdoll-edit-info-method-16 (_type_ ragdoll process-drawable) none) + (ragdoll-edit-info-method-17 () none) ;; 17 ;; (ragdoll-edit-info-method-17 (_type_ ragdoll process-drawable) none) + ) + ) +|# + +#| +(deftype ragdoll-joint-setup (structure) + ((joint-index int32 :offset-assert 0) + (parent-joint int32 :offset-assert 4) + (joint-type uint64 :offset-assert 8) + (pre-tform vector :inline :offset-assert 16) + (geo-tform vector :inline :offset-assert 32) + (axial-slop float :offset-assert 48) + (max-angle float :offset-assert 52) + (coll-rad float :offset-assert 56) + (hit-sound uint16 :offset-assert 60) ;; sound-name + ) + :method-count-assert 9 + :size-assert #x3e + :flag-assert #x90000003e + ) +|# + +#| +(deftype ragdoll-setup (structure) + ((orient-tform vector :inline :offset-assert 0) + (scale vector :inline :offset-assert 16) + (bg-collide-with collide-spec :offset-assert 32) ;; guessed by decompiler + (joint-setup (array ragdoll-joint-setup) :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype ragdoll-joint (structure) + ((quat quaternion :inline :offset-assert 0) + (position vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (bounce vector :inline :offset-assert 48) + (old-x vector :inline :offset-assert 64) + (pre-tform vector :inline :offset-assert 80) + (geo-tform vector :inline :offset-assert 96) + (axial-slop float :offset-assert 112) + (max-angle float :offset-assert 116) ;; degrees + (joint-length float :offset-assert 120) + (coll-rad float :offset-assert 124) + (ragdoll-joint-flags ragdoll-joint-flag :offset-assert 128) ;; guessed by decompiler + (joint-type uint64 :offset-assert 136) + (joint-index int8 :offset-assert 144) + (parent-joint int8 :offset-assert 145) + (parent-index int8 :offset-assert 146) + (num-children int8 :offset-assert 147) + (old-param0 basic :offset-assert 148) + (hit-sound uint128 :offset-assert 160) ;; sound-name + (ground-pat pat-surface :offset-assert 176) ;; guessed by decompiler + (user0 int32 :offset-assert 180) + (original-speed float :offset-assert 184) + ) + :method-count-assert 9 + :size-assert #xbc + :flag-assert #x9000000bc + ) +|# + +#| +(deftype ragdoll (basic) + ((ragdoll-joints ragdoll-joint 60 :offset-assert 16) ;; guessed by decompiler + (num-joints uint8 :offset-assert 11536) + (mirror matrix :inline :offset-assert 11552) + (gravity vector :inline :offset-assert 11616) + (gravity-target vector :inline :offset-assert 11632) + (orient-tform vector :inline :offset-assert 11648) + (scale vector :inline :offset-assert 11664) + (stretch-vel float :offset-assert 11680) + (stretch-vel-parallel float :offset-assert 11684) + (compress-vel float :offset-assert 11688) + (compress-vel-parallel float :offset-assert 11692) + (momentum float :offset-assert 11696) + (maximum-stretch float :offset-assert 11700) + (turn-off-start uint64 :offset-assert 11704) ;; time-frame + (turn-off-duration uint64 :offset-assert 11712) ;; time-frame + (copy-velocity-start uint64 :offset-assert 11720) ;; time-frame + (root-offset vector :inline :offset-assert 11728) + (rotate-vel quaternion :inline :offset-assert 11744) + (rotate-adj quaternion :inline :offset-assert 11760) + (rotate-adj-count int8 :offset-assert 11776) + (ragdoll-flags ragdoll-flag :offset-assert 11780) ;; guessed by decompiler + (flex-blend float :offset-assert 11784) + (stable-joints int8 :offset-assert 11788) + (ragdoll-joint-remap uint8 100 :offset-assert 11789) ;; guessed by decompiler + (allow-destabilize uint64 :offset-assert 11896) + (bg-collide-with uint32 :offset-assert 11904) + (water-info water-info :inline :offset-assert 11920) + ) + :method-count-assert 26 + :size-assert #x2ecc + :flag-assert #x1a00002ecc + (:methods + (ragdoll-method-9 () none) ;; 9 ;; (ragdoll-method-9 (_type_ matrix process-drawable) none) + (ragdoll-method-10 () none) ;; 10 ;; (ragdoll-method-10 (_type_ process-drawable symbol vector symbol) none) + (ragdoll-method-11 () none) ;; 11 ;; (turn-off-for-duration! (_type_ time-frame) none) + (ragdoll-method-12 () none) ;; 12 ;; (get-parent-joint (_type_ (inline-array ragdoll-joint)) ragdoll-joint) + (ragdoll-method-13 () none) ;; 13 ;; (ragdoll-method-13 (_type_ ragdoll-edit-info ragdoll-joint matrix matrix) none) + (ragdoll-method-14 () none) ;; 14 ;; (ragdoll-method-14 (_type_ process-drawable ragdoll-joint object matrix) none) + (ragdoll-method-15 () none) ;; 15 ;; (ragdoll-method-15 (_type_ process-drawable ragdoll-edit-info) none) + (ragdoll-method-16 () none) ;; 16 ;; (ragdoll-setup! (_type_ process-drawable ragdoll-setup) none) + (ragdoll-method-17 () none) ;; 17 ;; (ragdoll-method-17 (_type_ process-drawable) none) + (ragdoll-method-18 () none) ;; 18 ;; (ragdoll-method-18 (_type_) none) + (ragdoll-method-19 () none) ;; 19 ;; (ragdoll-method-19 (_type_ vector int object matrix) none) + (ragdoll-method-20 () none) ;; 20 ;; (reset-vec! (_type_ vector) none) + (ragdoll-method-21 () none) ;; 21 ;; (ragdoll-method-21 (_type_ vector vector float) vector) + (ragdoll-method-22 () none) ;; 22 ;; (get-max-angle-for-joint-idx (_type_ int) degrees) + (ragdoll-method-23 () none) ;; 23 ;; (ragdoll-method-23 (_type_ vector vector float symbol) none) + (ragdoll-method-24 () none) ;; 24 ;; (ragdoll-method-24 (_type_ vector int) none) + (ragdoll-method-25 () none) ;; 25 ;; (enable-ragdoll! (_type_ process-drawable) none) + ) + ) +|# + +#| +(deftype ragdoll-proc (process) + ((ragdoll ragdoll :offset-assert 144) ;; guessed by decompiler + (last-attack-id uint32 :offset-assert 148) + ) + :method-count-assert 21 + :size-assert #x98 + :flag-assert #x1500100098 + (:methods + (ragdoll-proc-method-9 () none) ;; 9 + (ragdoll-proc-method-10 () none) ;; 10 + (ragdoll-proc-method-11 () none) ;; 11 + (ragdoll-proc-method-12 () none) ;; 12 + (ragdoll-proc-method-13 () none) ;; 13 + (ragdoll-proc-method-14 () none) ;; 14 ;; (idle () _type_ :state) + (ragdoll-proc-method-15 () none) ;; 15 ;; (ragdoll-proc-method-15 (_type_ symbol vector symbol) none) + (ragdoll-proc-method-16 () none) ;; 16 ;; (disable-for-duration (_type_ time-frame) none) + (ragdoll-proc-method-17 () none) ;; 17 ;; (ragdoll-proc-method-17 (_type_ ragdoll-edit-info) none) + (ragdoll-proc-method-18 () none) ;; 18 ;; (ragdoll-proc-method-18 (_type_ ragdoll-edit-info) none) + (ragdoll-proc-method-19 () none) ;; 19 ;; (ragdoll-proc-method-19 (_type_) none) + (ragdoll-proc-method-20 () none) ;; 20 + ) + ) +|# + +;; (define-extern *ragdoll-edit-info* object) ;; ragdoll-edit-info + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; projectile-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype projectile (process-drawable) + ((starting-pos vector :inline :offset-assert 256) + (starting-dir vector :inline :offset-assert 272) + (target-pos vector :inline :offset-assert 288) + (base-target-pos vector :inline :offset-assert 304) + (pre-move-transv vector :inline :offset-assert 320) + (timeout uint64 :offset-assert 336) ;; time-frame + (spawn-time uint64 :offset-assert 344) ;; time-frame + (options uint64 :offset-assert 352) ;; projectile-options + (last-target uint64 :offset-assert 360) ;; handle + (notify-handle uint64 :offset-assert 368) ;; handle + (owner-handle uint64 :offset-assert 376) ;; handle + (ignore-handle uint64 :offset-assert 384) ;; handle + (update-velocity (function projectile none) :offset-assert 392) ;; guessed by decompiler + (move (function projectile none) :offset-assert 396) ;; guessed by decompiler + (pick-target (function projectile none) :offset-assert 400) ;; guessed by decompiler + (max-speed float :offset-assert 404) + (old-dist float 16 :offset-assert 408) ;; guessed by decompiler + (old-dist-count int32 :offset-assert 472) + (hits int32 :offset-assert 476) + (max-hits int32 :offset-assert 480) + (tween float :offset-assert 484) + (attack-mode symbol :offset-assert 488) ;; guessed by decompiler + (attack-id uint32 :offset-assert 492) + (damage float :offset-assert 496) + (vehicle-damage-factor float :offset-assert 500) + (vehicle-impulse-factor float :offset-assert 504) + (charge-level float :offset-assert 508) + (sound-id sound-id :offset-assert 512) ;; guessed by decompiler + (stop-speed meters :offset-assert 516) + (invinc-time uint64 :offset-assert 520) ;; time-frame + (desired-target uint64 :offset-assert 528) ;; handle + (desired-target-pos vector :inline :offset-assert 544) + (wpn-type uint8 :offset-assert 560) + ) + :method-count-assert 72 + :size-assert #x231 + :flag-assert #x4801b00231 + (:methods + (projectile-method-50 () none) ;; 50 + (projectile-method-51 () none) ;; 51 + (projectile-method-52 () none) ;; 52 + (projectile-method-53 () none) ;; 53 + (projectile-method-54 () none) ;; 54 + (projectile-method-55 () none) ;; 55 + (projectile-method-56 () none) ;; 56 + (projectile-method-57 () none) ;; 57 + (projectile-method-58 () none) ;; 58 + (projectile-method-59 () none) ;; 59 + (projectile-method-60 () none) ;; 60 + (projectile-method-61 () none) ;; 61 + (projectile-method-62 () none) ;; 62 + (projectile-method-63 () none) ;; 63 + (projectile-method-64 () none) ;; 64 + (projectile-method-65 () none) ;; 65 + (projectile-method-66 () none) ;; 66 + (projectile-method-67 () none) ;; 67 + (projectile-method-68 () none) ;; 68 + (projectile-method-69 () none) ;; 69 + (projectile-method-70 () none) ;; 70 + (projectile-method-71 () none) ;; 71 + ) + ) +|# + +#| +(deftype projectile-init-by-other-params (structure) + ((pos vector :inline :offset-assert 0) + (vel vector :inline :offset-assert 16) + (target-pos vector :inline :offset-assert 32) + (target-handle uint64 :offset-assert 48) ;; handle + (ent entity :offset-assert 56) ;; guessed by decompiler + (charge float :offset-assert 60) + (attack-id uint32 :offset-assert 64) + (options uint64 :offset-assert 72) ;; projectile-options + (notify-handle uint64 :offset-assert 80) ;; handle + (owner-handle uint64 :offset-assert 88) ;; handle + (ignore-handle uint64 :offset-assert 96) ;; handle + (timeout uint64 :offset-assert 104) ;; time-frame + (damage float :offset-assert 112) + (vehicle-damage-factor float :offset-assert 116) + (vehicle-impulse-factor float :offset-assert 120) + (wpn-type uint8 :offset-assert 124) + ) + :method-count-assert 9 + :size-assert #x7d + :flag-assert #x90000007d + ) +|# + +#| +(deftype projectile-bounce (projectile) + ((played-bounce-time uint64 :offset-assert 568) ;; time-frame + (tumble-quat quaternion :inline :offset-assert 576) + (gravity float :offset-assert 592) + ) + :method-count-assert 75 + :size-assert #x254 + :flag-assert #x4b01d00254 + (:methods + (projectile-bounce-method-72 () none) ;; 72 + (projectile-bounce-method-73 () none) ;; 73 + (projectile-bounce-method-74 () none) ;; 74 + ) + ) +|# + +;; (define-extern spawn-projectile function) ;; (function type projectile-init-by-other-params process-tree dead-pool (pointer process)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; find-nearest-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype find-sorted-targets-params (structure) + ((near-point vector :inline :offset-assert 0) + (in-dir vector :inline :offset-assert 16) + (reject-team int8 :offset-assert 32) + (min-dist float :offset-assert 36) + (max-dist float :offset-assert 40) + (inv-slope-dist float :offset-assert 44) + (reject-inside-dist float :offset-assert 48) + (min-angle-cos float :offset-assert 52) + (max-angle-cos float :offset-assert 56) + (inv-slope-ang float :offset-assert 60) + (required-flags uint32 :offset-assert 64) + (priority-flags uint32 :offset-assert 68) + (weights vector :inline :offset-assert 80) + (validate basic :offset-assert 96) + (validator-params basic :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ;; field validator-params uses ~A with a signed load. + ) +|# + +;; (define-extern *HACK-find-nearest-focusable-ignore* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; target-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype target (process-focusable) + () + :flag-assert #x3b00700100 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; stats-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tr-stat (structure) + ((groups uint16 :offset-assert 0) + (fragments uint16 :offset-assert 2) + (tris uint32 :offset-assert 4) + (dverts uint32 :offset-assert 8) + (instances uint16 :offset-assert 12) + (pad uint16 :offset-assert 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype merc-global-stats (structure) + ((merc tr-stat :inline :offset-assert 0) + (emerc tr-stat :inline :offset-assert 16) + (mercneric tr-stat :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype perf-stat (structure) + ((frame-number uint32 :offset-assert 0) + (count uint32 :offset-assert 4) + (cycles uint32 :offset-assert 8) + (instructions uint32 :offset-assert 12) + (icache uint32 :offset-assert 16) + (dcache uint32 :offset-assert 20) + (select uint32 :offset-assert 24) + (ctrl uint32 :offset-assert 28) + (accum0 uint32 :offset-assert 32) + (accum1 uint32 :offset-assert 36) + (to-vu0-waits uint32 :offset-assert 40) + (to-spr-waits uint32 :offset-assert 44) + (from-spr-waits uint32 :offset-assert 48) + ) + :method-count-assert 14 + :size-assert #x34 + :flag-assert #xe00000034 + (:methods + (perf-stat-method-9 () none) ;; 9 ;; (perf-stat-method-9 () none) + (perf-stat-method-10 () none) ;; 10 ;; (print-to-stream (_type_ string basic) none) + (perf-stat-method-11 () none) ;; 11 ;; (start-profiling! (_type_) none) + (perf-stat-method-12 () none) ;; 12 ;; (stop-profiling! (_type_) none) + (perf-stat-method-13 () none) ;; 13 ;; (update-wait-stats (_type_ uint uint uint) none) + ) + ) +|# + +#| +(deftype perf-stat-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data perf-stat :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +;; (define-extern perf-stat-bucket->string function) ;; (function perf-stat-bucket string) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bsp-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype bsp-node (structure) + "A node in the 'BSP' tree. This is really a bounding volume tree, where each volume is an axis-aligned box, containing 2 child boxes. + This is used for precomputed visibility, based on the camera position. This is not used for collision." + ((front int16 :offset-assert 0) + (back int16 :offset-assert 2) + (front-box-min vector4b :inline :offset-assert 4) + (front-box-max vector4b :inline :offset-assert 8) + (back-box-min vector4b :inline :offset-assert 12) + (back-box-max vector4b :inline :offset-assert 16) + ) + :pack-me + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype bsp-header (drawable) + "The bsp-header is really an entire level. + This probably started as a very simple structure, but now it is extremely complicated." + ((all-visible-list (pointer uint8) :offset-assert 32) ;; guessed by decompiler + (visible-list-length int16 :offset-assert 36) + (drawable-trees drawable-tree-array :offset-assert 40) ;; guessed by decompiler + (pat pointer :offset-assert 44) ;; guessed by decompiler + (pat-length int32 :offset-assert 48) + + ;; TODO: Figure out bsp-header structure for Jak X. + (data uint8 348) + ) + :method-count-assert 19 + :size-assert #x190 + :flag-assert #x1300000190 + (:methods + (bsp-header-method-17 () none) ;; 17 ;; (birth (_type_) none) + (bsp-header-method-18 () none) ;; 18 ;; (deactivate-entities (_type_) none) + ) + ) + +(deftype game-level (basic) + "Unused in Jak 1, 2, and 3!" + ((master-bsp basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype view-frustum (structure) + "A view frustum, expressed as corners. + This representation is not very useful, and is used in only one spot to generate camera planes + in a very inefficient way." + ((hither-top-left vector :inline :offset-assert 0) + (hither-top-right vector :inline :offset-assert 16) + (hither-bottom-left vector :inline :offset-assert 32) + (hither-bottom-right vector :inline :offset-assert 48) + (yon-top-left vector :inline :offset-assert 64) + (yon-top-right vector :inline :offset-assert 80) + (yon-bottom-left vector :inline :offset-assert 96) + (yon-bottom-right vector :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype collide-stats (structure) + "Very strange collide stats type. It has been somewhat broken in all versions of the game. + The final stopwatch is cut off. For jak 3, I just fixed it." + ((calls uint32 :offset-assert 0) + (spheres uint32 :offset-assert 4) + (nodes uint32 :offset-assert 8) + (frags uint32 :offset-assert 12) + (tris uint32 :offset-assert 16) + (output uint32 :offset-assert 20) + (junk (pointer uint32) 24) + ; (total-target stopwatch :inline :offset-assert 28) + ; (target-cache-fill stopwatch :inline :offset-assert 60) + ; (target-ray-poly stopwatch :inline :offset-assert 92) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + ) + +(define-extern inspect-bsp-tree "Attempt to print a bsp-tree, but it is actually broken since the jak 2 bsp format change" (function bsp-header bsp-node none)) +(define-extern map-bsp-tree "Attempt to call a function on all bsp-tree nodes, but it is actually broken since the jak 2 bsp format" (function (function bsp-node none) bsp-header bsp-node none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-cache-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type collide-cache-prim structure) +(declare-type collide-using-spheres-params structure) +(declare-type instance-tie structure) + +(deftype collide-puss-sphere (structure) + "A query sphere from the user for the porbe-using-spheres query. + This is used internally by the collide-cache implementation." + ((bsphere sphere :inline :offset-assert 0) + (bbox4w bounding-box4w :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype collide-puss-work (structure) + "Scratchpad memory map for probe-using-spheres query." + ((closest-pt vector :inline :offset-assert 0) + (tri-normal vector :inline :offset-assert 16) + (tri-bbox4w bounding-box4w :inline :offset-assert 32) + (spheres-bbox4w bounding-box4w :inline :offset-assert 64) + (spheres collide-puss-sphere 64 :inline :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #xc60 + :flag-assert #xb00000c60 + (:methods + (check-mesh-prim-against-spheres "Check a single mesh prim against the spheres in this type." (_type_ collide-cache-prim collide-using-spheres-params) symbol) ;; 9 + (check-sphere-prim-against-spheres "Check a single sphere prim against the spheres in this type." (_type_ collide-cache-prim collide-using-spheres-params) symbol) ;; 10 + ) + ) + +(deftype collide-cache-tri (structure) + "A single triangle inside the collision cache. + Contains a reference back to the source object (like a collide-shape or water-control), and the prim itself." + ((vertex vector 3 :inline :offset-assert 0) ;; guessed by decompiler + (extra-quad uint8 16 :offset-assert 48) ;; guessed by decompiler + (pat pat-surface :offset 48) ;; guessed by decompiler + (collide-ptr basic :offset 52) + (prim-index uint16 :offset 56) + (user16 uint16 :offset 58) + (user32 uint32 :offset 60) + (clear-flags uint128 :offset 48) ;; added + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(defenum prim-type + :type int8 + (prim -2) + (sphere -1) + (group 0) + (mesh 1) + (fake-prim 2) + ) + +(declare-type collide-list structure) +(deftype collide-cache-prim (structure) + "A primitive inside the collide-cache. + This can represent a sphere, a triangle mesh, or a group of other primitives within a bounding sphere." + ((prim-core collide-prim-core :inline :offset-assert 0) + (extra-quad uint8 16 :offset 32) ;; guessed by decompiler + (ccache collide-cache :offset 32) ;; guessed by decompiler + (prim collide-shape-prim :offset 36) ;; guessed by decompiler + (first-tri uint16 :offset 40) + (num-tris uint16 :offset 42) + (extra basic :offset 44) + (world-sphere vector :inline :offset 0) + (collide-as collide-spec :offset 16) ;; guessed by decompiler + (action collide-action :offset 24) ;; guessed by decompiler + (prim-type prim-type :offset 28) ;; prim-type + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (resolve-moving-sphere-tri (_type_ collide-query sphere vector float collide-action) float) ;; 9 + (resolve-moving-sphere-sphere (_type_ collide-query sphere vector float collide-action) float) ;; 10 + ) + ) + +(deftype collide-cache (basic) + ((num-tris int32 :offset-assert 4) + (max-tris int32 :offset-assert 8) + (num-prims int32 :offset-assert 12) + (max-prims int32 :offset-assert 16) + (ignore-mask pat-surface :offset-assert 20) ;; guessed by decompiler + (ignore-processes process 2 :offset-assert 24) ;; guessed by decompiler + (collide-box bounding-box :inline :offset-assert 32) + (collide-box4w bounding-box4w :inline :offset-assert 64) + (collide-with collide-spec :offset-assert 96) ;; guessed by decompiler + (unused uint32 :offset-assert 100) + (prims collide-cache-prim :offset 112) ;; guessed by decompiler + (tris collide-cache-tri :offset 128) ;; guessed by decompiler + ) + :method-count-assert 28 + :size-assert #x84 + :flag-assert #x1c00000084 + (:methods + (collide-cache-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (collide-cache-method-10 () none) ;; 10 ;; (fill-and-probe-using-line-sphere (_type_ collide-query) float) + (collide-cache-method-11 () none) ;; 11 ;; (fill-and-probe-using-spheres (_type_ collide-query) symbol) + (collide-cache-method-12 () none) ;; 12 ;; (fill-using-bounding-box (_type_ collide-query) none) + (collide-cache-method-13 () none) ;; 13 ;; (fill-using-line-sphere (_type_ collide-query) none) + (collide-cache-method-14 () none) ;; 14 ;; (fill-using-spheres (_type_ collide-query) none) + (collide-cache-method-15 () none) ;; 15 ;; (reset (_type_) none) + (collide-cache-method-16 () none) ;; 16 ;; (probe-using-line-sphere (_type_ collide-query) float) + (collide-cache-method-17 () none) ;; 17 ;; (probe-using-spheres (_type_ collide-query) symbol) + (fill-from-bg (_type_ (function collide-hash int collide-list collide-query int) (function collide-cache collide-list collide-query none) collide-query) none) ;; 18 + (collide-cache-method-19 () none) ;; 19 ;; (fill-from-fg-boxes (_type_) none) + (collide-cache-method-20 () none) ;; 20 ;; (fill-from-fg-line-sphere (_type_ collide-query) none) + (collide-cache-method-21 () none) ;; 21 ;; (fill-from-water (_type_ water-control) none) + (collide-cache-method-22 () none) ;; 22 ;; (collide-cache-method-22 () none) + (collide-cache-method-23 () none) ;; 23 ;; (collide-cache-method-23 () none) + (collide-cache-method-24 () none) ;; 24 ;; (collide-cache-method-24 () none) + (collide-cache-method-25 () none) ;; 25 ;; (collide-cache-method-25 () none) + (collide-cache-method-26 () none) ;; 26 + (collide-cache-method-27 () none) ;; 27 + ) + ) + +(deftype collide-list-item (structure) + ((mesh instance-tie :offset-assert 0) ;; guessed by decompiler + (inst basic :offset-assert 4) + ) + :pack-me + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype collide-list (structure) + ((num-items int32 :offset-assert 0) + (items collide-list-item 256 :inline :offset 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x810 + :flag-assert #x900000810 + ) + +(define-extern *collide-cache* collide-cache) +(define-extern *collide-list* collide-list) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype collide-query (structure) + "Very general collision-query structure. The meaning is different depending on where it used. + This has both inputs from the user, and collision results." + ((best-other-tri collide-tri-result :inline :offset-assert 0) + (best-my-tri collide-tri-result :inline :offset 0) + (ignore-processes process-tree 2 :offset-assert 88) ;; guessed by decompiler + (ignore-process0 process-tree :offset 88) ;; guessed by decompiler + (ignore-process1 process-tree :offset 92) ;; guessed by decompiler + (ignore-pat pat-surface :offset-assert 96) ;; guessed by decompiler + (collide-with collide-spec :offset-assert 100) ;; guessed by decompiler + (overlay-params uint32 3 :offset 112) ;; guessed by decompiler + (bbox bounding-box :inline :offset-assert 128) + (bbox4w bounding-box4w :inline :offset-assert 160) + (bsphere sphere :inline :offset-assert 192) + (start-pos vector :inline :offset-assert 208) + (move-dist vector :inline :offset-assert 224) + (rlength vector :inline :offset-assert 240) + (exit-planes plane 2 :inline :offset-assert 256) ;; guessed by decompiler + (radius float :offset 268) + (inv-mat matrix :inline :offset 288) + (final-pos vector :inline :offset 240) + (spheres (inline-array sphere) :offset 112) ;; guessed by decompiler + (num-spheres uint32 :offset 116) + (solid-only symbol :offset 120) ;; guessed by decompiler + (best-dist float :offset 112) + (best-other-prim collide-shape-prim :offset 116) ;; guessed by decompiler + (best-my-prim collide-shape-prim :offset 120) ;; guessed by decompiler + (move-vec vector :inline :offset 224) + (best-u float :offset 112) + (action-mask collide-action :offset 352) ;; guessed by decompiler + (nav-mesh basic :offset 116) + (best-ccache-prim collide-cache-prim :offset 116) + (local-box4w bounding-box4w :inline :offset-assert 368) + (search-box bounding-box4w :inline :offset-assert 400) + (search-vector vector4w :inline :offset-assert 432) + (instance-mat matrix :inline :offset-assert 448) + (instance-ptr basic :offset-assert 512) + (x-addr uint32 :offset-assert 516) + (x-step uint32 :offset-assert 520) + (y-addr uint32 :offset-assert 524) + (y-step uint32 :offset-assert 528) + (z-addr uint32 :offset-assert 532) + (z-step uint32 :offset-assert 536) + ) + :method-count-assert 9 + :size-assert #x21c + :flag-assert #x90000021c + ) + +(deftype do-push-aways-work (structure) + "Added" + ((cquery collide-query :inline) + (push-vel vector :inline) + (vec33 vector :inline :offset 560) + (cspec collide-spec :offset 576) + ) + ) + +(define-extern *collide-test-flag* symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shrubbery-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype billboard (drawable) + ((flat adgif-shader :inline :offset-assert 32) + ) + :method-count-assert 17 + :size-assert #x70 + :flag-assert #x1100000070 + ) +|# + +#| +(deftype shrub-view-data (structure) + ((data uint128 3 :offset-assert 0) ;; guessed by decompiler + (texture-giftag qword :inline :offset-assert 0) ;; gs-gif-tag :inline + (consts vector :inline :offset-assert 16) + (fog-clamp vector :inline :offset-assert 32) + (tex-start-ptr int32 :offset-assert 16) + (gifbufsum float :offset-assert 16) + (mtx-buf-ptr int32 :offset-assert 20) + (exp23 float :offset-assert 20) + (fog-0 float :offset-assert 24) + (fog-1 float :offset-assert 28) + (fog-min float :offset-assert 32) + (fog-max float :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype shrubbery (drawable) + ((textures (inline-array adgif-shader) :offset-assert 4) ;; guessed by decompiler + (header qword :offset-assert 8) + (obj-qwc uint8 :offset-assert 12) + (vtx-qwc uint8 :offset-assert 13) + (col-qwc uint8 :offset-assert 14) + (stq-qwc uint8 :offset-assert 15) + (obj uint32 :offset-assert 16) + (vtx uint32 :offset-assert 20) + (col uint32 :offset-assert 24) + (stq uint32 :offset-assert 28) + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ) +|# + +#| +(deftype instance-shrubbery (instance) + ((flat-normal vector :inline :offset-assert 64) + (flat-hwidth float :offset-assert 76) + (color uint32 :offset-assert 8) + ) + :method-count-assert 17 + :size-assert #x50 + :flag-assert #x1100000050 + ) +|# + +;; (deftype drawable-inline-array-instance-shrub (drawable-inline-array) +;; () +;; :flag-assert #x1100000074 +;; ) + +;; (deftype drawable-tree-instance-shrub (drawable-tree) +;; () +;; :flag-assert #x1100000020 +;; ) + +#| +(deftype generic-shrub-fragment (drawable) + ((textures (inline-array adgif-shader) :offset-assert 4) ;; guessed by decompiler + (vtx-cnt uint32 :offset-assert 8) + (cnt-qwc uint8 :offset-assert 12) + (vtx-qwc uint8 :offset-assert 13) + (col-qwc uint8 :offset-assert 14) + (stq-qwc uint8 :offset-assert 15) + (cnt uint32 :offset-assert 16) + (vtx uint32 :offset-assert 20) + (col uint32 :offset-assert 24) + (stq uint32 :offset-assert 28) + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ) +|# + +;; (deftype prototype-shrubbery (drawable-inline-array) +;; () +;; :flag-assert #x1100000044 +;; ) + +;; (deftype prototype-trans-shrubbery (prototype-shrubbery) +;; () +;; :flag-assert #x1100000044 +;; ) + +;; (deftype prototype-generic-shrub (drawable-group) +;; () +;; :flag-assert #x1100000020 +;; ) + +#| +(deftype shrubbery-matrix (structure) + ((mat matrix :inline :offset-assert 0) + (color qword :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype shrub-near-packet (structure) + ((matrix-tmpl dma-packet :inline :offset-assert 0) + (header-tmpl dma-packet :inline :offset-assert 16) + (stq-tmpl dma-packet :inline :offset-assert 32) + (color-tmpl dma-packet :inline :offset-assert 48) + (vertex-tmpl dma-packet :inline :offset-assert 64) + (mscal-tmpl dma-packet :inline :offset-assert 80) + (init-tmpl dma-packet :inline :offset-assert 96) + (init-data qword 8 :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +#| +(deftype instance-shrub-work (structure) + ((dummy qword 3 :offset-assert 0) ;; guessed by decompiler + (chaina qword 8 :offset-assert 48) ;; guessed by decompiler + (chainb qword 8 :offset-assert 176) ;; guessed by decompiler + (colors rgba 1024 :offset-assert 304) ;; guessed by decompiler + (matrix-tmpl qword 20 :offset-assert 4400) ;; guessed by decompiler + (count-tmpl vector4w 20 :offset-assert 4720) ;; guessed by decompiler + (mscalf-tmpl dma-packet :inline :offset-assert 5040) + (mscalf-ret-tmpl dma-packet :inline :offset-assert 5056) + (adgif-tmpl dma-gif-packet :inline :offset-assert 5072) + (billboard-tmpl dma-gif-packet :inline :offset-assert 5104) + (billboard-const vector :inline :offset-assert 5136) + (shrub-near-packets shrub-near-packet 6 :offset-assert 5152) ;; guessed by decompiler + (dma-ref dma-packet :inline :offset-assert 6016) + (dma-end dma-packet :inline :offset-assert 6032) + (wind-const vector :inline :offset-assert 6048) + (constants vector :inline :offset-assert 6064) + (color-constant vector4w :inline :offset-assert 6080) + (hmge-d vector :inline :offset-assert 6096) + (hvdf-offset vector :inline :offset-assert 6112) + (wind-force vector :inline :offset-assert 6128) + (color vector :inline :offset-assert 6144) + (bb-color vector :inline :offset-assert 6160) + (min-dist vector :inline :offset-assert 6176) + (temp-vec vector :inline :offset-assert 6192) + (guard-plane plane 4 :offset-assert 6208) ;; guessed by decompiler + (plane plane 4 :offset-assert 6272) ;; guessed by decompiler + (last uint32 4 :offset-assert 6336) ;; guessed by decompiler + (next uint32 4 :offset-assert 6352) ;; guessed by decompiler + (count uint16 4 :offset-assert 6368) ;; guessed by decompiler + (mod-count uint16 4 :offset-assert 6376) ;; guessed by decompiler + (wind-vectors uint32 :offset-assert 6384) + (instance-ptr uint32 :offset-assert 6388) + (chain-ptr uint32 :offset-assert 6392) + (chain-ptr-next uint32 :offset-assert 6396) + (stack-ptr uint32 :offset-assert 6400) + (bucket-ptr uint32 :offset-assert 6404) + (src-ptr uint32 :offset-assert 6408) + (to-spr uint32 :offset-assert 6412) + (from-spr uint32 :offset-assert 6416) + (shrub-count uint32 :offset-assert 6420) + (stack-ptr uint32 :offset-assert 6400) + (node uint32 6 :offset-assert 6428) ;; guessed by decompiler + (length uint32 6 :offset-assert 6452) ;; guessed by decompiler + (prototypes uint32 :offset-assert 6476) + (bucket-ptr uint32 :offset-assert 6404) + (start-bank uint8 20 :offset-assert 6484) ;; guessed by decompiler + (buffer-index uint32 :offset-assert 6504) + (current-spr uint32 :offset-assert 6508) + (current-mem uint32 :offset-assert 6512) + (current-shrub-near-packet uint32 :offset-assert 6516) + (current-shrub-near-trans-packet uint32 :offset-assert 6520) + (to-spr uint32 :offset-assert 6412) + (dma-buffer basic :offset-assert 6528) + (near-last uint32 :offset-assert 6532) + (near-next uint32 :offset-assert 6536) + (near-count uint32 :offset-assert 6540) + (near-trans-last uint32 :offset-assert 6544) + (near-trans-next uint32 :offset-assert 6548) + (near-trans-count uint32 :offset-assert 6552) + (last-shrubs uint32 :offset-assert 6556) + (chains uint32 :offset-assert 6560) + (flags uint32 :offset-assert 6564) + (node-count uint32 :offset-assert 6568) + (inst-count uint32 :offset-assert 6572) + (wait-from-spr uint32 :offset-assert 6576) + (wait-to-spr uint32 :offset-assert 6580) + (texture-dists uint32 :offset-assert 6584) + ) + :method-count-assert 9 + :size-assert #x19bc + :flag-assert #x9000019bc + ) +|# + +#| +(deftype instance-shrub-dma (structure) + ((instancea uint128 325 :offset-assert 0) ;; guessed by decompiler + (instanceb uint128 325 :offset-assert 5200) ;; guessed by decompiler + (outa uint128 128 :offset-assert 10400) ;; guessed by decompiler + (outb uint128 128 :offset-assert 12448) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x38a0 + :flag-assert #x9000038a0 + ) +|# + +;; (define-extern shrubbery-login-post-texture function) ;; (function shrubbery none) +;; (define-extern *shrub-state* object) ;; int + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tie-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tie-fragment-debug (structure) + ((num-tris uint16 :offset-assert 0) + (num-dverts uint16 :offset-assert 2) + (debug-lines (array vector-array) :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype tie-fragment (drawable) + ((gif-ref (inline-array adgif-shader) :offset-assert 4) ;; guessed by decompiler + (point-ref uint32 :offset-assert 8) + (color-index uint16 :offset-assert 12) + (base-colors uint8 :offset-assert 14) + (tex-count uint16 :offset-assert 32) + (gif-count uint16 :offset-assert 34) + (vertex-count uint16 :offset-assert 36) + (color-count uint16 :offset-assert 38) + (dp-ref uint32 :offset-assert 40) + (dp-qwc uint32 :offset-assert 44) + (generic-ref uint32 :offset-assert 48) + (generic-count uint16 :offset-assert 52) + (normal-count uint16 :offset-assert 54) + (normal-ref uint32 :offset-assert 56) + (debug tie-fragment-debug :offset-assert 60) + ) + :method-count-assert 17 + :size-assert #x40 + :flag-assert #x1100000040 + ) +|# + +#| +(deftype instance-tie (instance) + ((color-indices uint32 :offset-assert 8) + (bucket-ptr prototype-bucket-tie :offset-assert 12) ;; guessed by decompiler + (max-scale uint16 :offset-assert 38) + (rmin-scale uint16 :offset-assert 54) + ) + :method-count-assert 17 + :size-assert #x40 + :flag-assert #x1100000040 + ) +|# + +;; (deftype drawable-inline-array-instance-tie (drawable-inline-array) +;; () +;; :flag-assert #x1100000064 +;; ) + +#| +(deftype drawable-tree-instance-tie (drawable-tree) + ((id int16 :offset-assert 0) + (bsphere vector :inline :offset-assert 12) + (length int16 :offset-assert 2) + (data drawable :dynamic :offset-assert 28) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (prototypes proxy-prototype-array-tie :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 17 + :size-assert #x20 + :flag-assert #x1100000020 + ) +|# + +;; (deftype prototype-tie (drawable-inline-array) +;; () +;; :flag-assert #x1100000064 +;; ) + +#| +(deftype tie-matrix (structure) + ((mat matrix :inline :offset-assert 0) + (morph qword :inline :offset-assert 64) + (fog qword :inline :offset-assert 80) + (envmap-flag uint32 :offset-assert 80) + (guard-flag uint32 :offset-assert 84) + (vertex-alpha float :offset-assert 88) + (fog-value float :offset-assert 92) + (fixed-alpha float :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) +|# + +#| +(deftype instance-tie-work (structure) + ((wind-const vector :inline :offset-assert 0) + (hmge-d vector :inline :offset-assert 16) + (hvdf-offset vector :inline :offset-assert 32) + (wind-force vector :inline :offset-assert 48) + (constant vector :inline :offset-assert 64) + (far-morph vector :inline :offset-assert 80) + (dist-test vector :inline :offset-assert 96) + (min-dist vector :inline :offset-assert 112) + (guard-plane plane 4 :offset-assert 128) ;; guessed by decompiler + (upload-color-0 dma-packet :inline :offset-assert 192) + (upload-color-1 dma-packet :inline :offset-assert 208) + (upload-color-2 dma-packet :inline :offset-assert 224) + (upload-color-ret dma-packet :inline :offset-assert 240) + (upload-color-temp dma-packet :inline :offset-assert 256) + (generic-color-0 dma-packet :inline :offset-assert 272) + (generic-color-1 dma-packet :inline :offset-assert 288) + (generic-color-end dma-packet :inline :offset-assert 304) + (envmap-color-0 dma-packet :inline :offset-assert 320) + (envmap-color-1 dma-packet :inline :offset-assert 336) + (tie-scissor-perspective-matrix matrix :inline :offset-assert 352) + (tod-env-color vector :inline :offset-assert 416) + (morph-temp vector :inline :offset-assert 432) + (fog-temp vector :inline :offset-assert 448) + (fade-temp float :offset-assert 464) + (wind-vectors uint32 :offset-assert 468) + (test-id uint32 :offset-assert 472) + (test-id2 uint32 :offset-assert 476) + (dma-buffer basic :offset-assert 480) + (to-spr uint32 :offset-assert 484) + (from-spr uint32 :offset-assert 488) + (wind-work uint32 :offset-assert 492) + (cur-vis-bits uint32 :offset-assert 496) + (end-vis-bits uint32 :offset-assert 500) + (refl-fade-fac float :offset-assert 504) + (refl-fade-end float :offset-assert 508) + (flags uint32 :offset-assert 512) + (vanish-flag uint32 :offset-assert 516) + (translucent-flag uint32 :offset-assert 520) + (wait-from-spr uint32 :offset-assert 524) + (wait-to-spr uint32 :offset-assert 528) + (use-etie symbol :offset-assert 532) ;; guessed by decompiler + (buffer-start uint32 :offset-assert 536) + (buffer-end uint32 :offset-assert 540) + (tfrag-dists uint32 :offset-assert 544) + (alpha-dists uint32 :offset-assert 548) + (water-dists uint32 :offset-assert 552) + ) + :method-count-assert 9 + :size-assert #x22c + :flag-assert #x90000022c + ) +|# + +#| +(deftype instance-tie-dma (structure) + ((banka instance-tie 32 :offset-assert 4) ;; guessed by decompiler + (bankb instance-tie 32 :offset-assert 2052) ;; guessed by decompiler + (outa uint128 256 :offset-assert 4096) ;; guessed by decompiler + (outb uint128 256 :offset-assert 8192) ;; guessed by decompiler + (work instance-tie-work :offset-assert 12288) + ) + :method-count-assert 9 + :size-assert #x3000 + :flag-assert #x900003000 + ) +|# + +#| +(deftype prototype-tie-work (structure) + ((upload-flushe dma-packet :inline :offset-assert 0) + (upload-palette dma-packet :inline :offset-assert 16) + (upload-model-0 dma-packet :inline :offset-assert 32) + (upload-model-1 dma-packet :inline :offset-assert 48) + (upload-model-2 dma-packet :inline :offset-assert 64) + (upload-model-3 dma-packet :inline :offset-assert 80) + (upload-model-near-0 dma-packet :inline :offset-assert 96) + (upload-model-near-1 dma-packet :inline :offset-assert 112) + (upload-model-near-2 dma-packet :inline :offset-assert 128) + (upload-model-near-3 dma-packet :inline :offset-assert 144) + (upload-model-near-4 dma-packet :inline :offset-assert 160) + (envmap-palette dma-packet :inline :offset-assert 176) + (envmap-shader dma-packet :inline :offset-assert 192) + (upload-envmap-0 dma-packet :inline :offset-assert 208) + (upload-envmap-1 dma-packet :inline :offset-assert 224) + (upload-envmap-2 dma-packet :inline :offset-assert 240) + (upload-envmap-3 dma-packet :inline :offset-assert 256) + (upload-envmap-4 dma-packet :inline :offset-assert 272) + (upload-envmap-scissor-4 dma-packet :inline :offset-assert 288) + (generic-palette dma-packet :inline :offset-assert 304) + (generic-model-0 dma-packet :inline :offset-assert 320) + (generic-model-1 dma-packet :inline :offset-assert 336) + (generic-model-2 dma-packet :inline :offset-assert 352) + (model-next dma-packet :inline :offset-assert 368) + (clamp uint64 :offset-assert 384) + (prototype-array basic :offset-assert 392) + (wait-from-spr uint32 :offset-assert 396) + (wait-to-spr uint32 :offset-assert 400) + (mood mood-context :offset-assert 404) + (wide-level-index uint32 :offset-assert 408) + (last uint32 16 :offset-assert 416) ;; guessed by decompiler + (next uint32 16 :offset-assert 480) ;; guessed by decompiler + (count uint16 16 :offset-assert 544) ;; guessed by decompiler + (tie-last uint32 :offset-assert 416) + (tie-next uint32 :offset-assert 480) + (tie-count uint16 :offset-assert 544) + (trans-last uint32 :offset-assert 420) + (trans-next uint32 :offset-assert 484) + (trans-count uint16 :offset-assert 546) + (water-last uint32 :offset-assert 424) + (water-next uint32 :offset-assert 488) + (water-count uint16 :offset-assert 548) + (scissor-last uint32 :offset-assert 428) + (scissor-next uint32 :offset-assert 492) + (scissor-count uint16 :offset-assert 550) + (scissor-trans-last uint32 :offset-assert 432) + (scissor-trans-next uint32 :offset-assert 496) + (scissor-trans-count uint16 :offset-assert 552) + (scissor-water-last uint32 :offset-assert 436) + (scissor-water-next uint32 :offset-assert 500) + (scissor-water-count uint16 :offset-assert 554) + (envmap-last uint32 :offset-assert 440) + (envmap-next uint32 :offset-assert 504) + (envmap-count uint16 :offset-assert 556) + (envmap-trans-last uint32 :offset-assert 444) + (envmap-trans-next uint32 :offset-assert 508) + (envmap-trans-count uint16 :offset-assert 558) + (envmap-water-last uint32 :offset-assert 448) + (envmap-water-next uint32 :offset-assert 512) + (envmap-water-count uint16 :offset-assert 560) + (envmap-scissor-last uint32 :offset-assert 452) + (envmap-scissor-next uint32 :offset-assert 516) + (envmap-scissor-count uint16 :offset-assert 562) + (envmap-scissor-trans-last uint32 :offset-assert 456) + (envmap-scissor-trans-next uint32 :offset-assert 520) + (envmap-scissor-trans-count uint16 :offset-assert 564) + (envmap-scissor-water-last uint32 :offset-assert 460) + (envmap-scissor-water-next uint32 :offset-assert 524) + (envmap-scissor-water-count uint16 :offset-assert 566) + (generic-last uint32 :offset-assert 464) + (generic-next uint32 :offset-assert 528) + (generic-count uint16 :offset-assert 568) + (generic-trans-last uint32 :offset-assert 468) + (generic-trans-next uint32 :offset-assert 532) + (generic-trans-count uint16 :offset-assert 570) + (generic-water-last uint32 :offset-assert 472) + (generic-water-next uint32 :offset-assert 536) + (generic-water-count uint16 :offset-assert 572) + (vanish-last uint32 :offset-assert 476) + (vanish-next uint32 :offset-assert 540) + (vanish-count uint16 :offset-assert 574) + ) + :method-count-assert 9 + :size-assert #x240 + :flag-assert #x900000240 + ) +|# + +#| +(deftype prototype-tie-dma (structure) + ((colora rgba 256 :offset-assert 0) ;; guessed by decompiler + (colorb rgba 256 :offset-assert 1024) ;; guessed by decompiler + (outa uint128 256 :offset-assert 2048) ;; guessed by decompiler + (outb uint128 256 :offset-assert 6144) ;; guessed by decompiler + (geometry uint32 4 :offset-assert 10240) ;; guessed by decompiler + (next uint32 12 :offset-assert 10256) ;; guessed by decompiler + (count uint16 12 :offset-assert 10304) ;; guessed by decompiler + (counts uint32 4 :offset-assert 10328) ;; guessed by decompiler + (palette-ptr uint32 :offset-assert 10336) + (model-ptr uint32 :offset-assert 10340) + (ret-ptr uint32 :offset-assert 10344) + (length uint32 :offset-assert 10348) + (flags uint32 :offset-assert 10352) + (dma-buffer basic :offset-assert 10356) + (this-frag-count uint32 :offset-assert 10360) + (frag-count uint8 4 :offset-assert 10364) ;; guessed by decompiler + (from-spr uint32 :offset-assert 10368) + (to-spr uint32 :offset-assert 10372) + (spr-out uint32 :offset-assert 10376) + (this-count uint32 :offset-assert 10380) + (scissor-geometry uint32 :offset-assert 10240) + (near-geometry uint32 :offset-assert 10244) + (mid-geometry uint32 :offset-assert 10248) + (far-geometry uint32 :offset-assert 10252) + (scissor-frag-count uint8 :offset-assert 10364) + (near-frag-count uint8 :offset-assert 10365) + (mid-frag-count uint8 :offset-assert 10366) + (far-frag-count uint8 :offset-assert 10367) + (tie-scissor-next uint32 :offset-assert 10256) + (tie-near-next uint32 :offset-assert 10260) + (tie-mid-next uint32 :offset-assert 10264) + (tie-far-next uint32 :offset-assert 10268) + (trans-scissor-next uint32 4 :offset-assert 10256) ;; guessed by decompiler + (trans-near-next uint32 :offset-assert 10260) + (trans-mid-next uint32 :offset-assert 10264) + (trans-far-next uint32 :offset-assert 10268) + (water-scissor-next uint32 4 :offset-assert 10256) ;; guessed by decompiler + (water-near-next uint32 :offset-assert 10260) + (water-mid-next uint32 :offset-assert 10264) + (water-far-next uint32 :offset-assert 10268) + (envmap-scissor-next uint32 4 :offset-assert 10272) ;; guessed by decompiler + (envmap-near-next uint32 :offset-assert 10276) + (envmap-mid-next uint32 :offset-assert 10280) + (envmap-far-next uint32 :offset-assert 10284) + (generic-near-next uint32 :offset-assert 10288) + (generic-mid-next uint32 :offset-assert 10292) + (generic-far-next uint32 :offset-assert 10296) + (vanish-next uint32 :offset-assert 10300) + (tie-count uint16 :offset-assert 10304) + (tie-scissor-count uint16 :offset-assert 10304) + (tie-near-count uint16 :offset-assert 10306) + (tie-mid-count uint16 :offset-assert 10308) + (tie-far-count uint16 :offset-assert 10310) + (trans-count uint16 :offset-assert 10304) + (trans-scissor-count uint16 :offset-assert 10304) + (trans-near-count uint16 :offset-assert 10306) + (trans-mid-count uint16 :offset-assert 10308) + (trans-far-count uint16 :offset-assert 10310) + (water-count uint16 :offset-assert 10304) + (water-scissor-count uint16 :offset-assert 10304) + (water-near-count uint16 :offset-assert 10306) + (water-mid-count uint16 :offset-assert 10308) + (water-far-count uint16 :offset-assert 10310) + (envmap-count uint16 :offset-assert 10312) + (envmap-scissor-count uint16 :offset-assert 10312) + (envmap-near-count uint16 :offset-assert 10314) + (envmap-mid-count uint16 :offset-assert 10316) + (envmap-far-count uint16 :offset-assert 10318) + (generic-count uint16 :offset-assert 10320) + (generic-near-count uint16 :offset-assert 10320) + (generic-mid-count uint16 :offset-assert 10322) + (generic-far-count uint16 :offset-assert 10324) + (vanish-count uint16 :offset-assert 10326) + (next-clear uint32 3 :offset-assert 10256) ;; guessed by decompiler + (count-clear uint16 3 :offset-assert 10304) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2890 + :flag-assert #x900002890 + ) +|# + +;; (define-extern *instance-tie-work-copy* object) ;; instance-tie-work + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tfrag-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tfragment-stats (structure) + ((num-tris uint16 4 :offset-assert 0) ;; guessed by decompiler + (num-dverts uint16 4 :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype tfragment-debug-data (structure) + ((stats tfragment-stats :inline :offset-assert 0) + (debug-lines (array vector-array) :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype generic-tfragment (structure) + ((dummy int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype tfragment (drawable) + ((color-index uint16 :offset-assert 6) + (debug-data tfragment-debug-data :offset-assert 8) + (color-indices uint32 :offset-assert 12) + (colors uint32 :offset-assert 12) + (dma-chain uint32 3 :offset-assert 32) ;; guessed by decompiler + (dma-common uint32 :offset-assert 32) + (dma-level-0 uint32 :offset-assert 32) + (dma-base uint32 :offset-assert 36) + (dma-level-1 uint32 :offset-assert 40) + (dma-qwc uint8 4 :offset-assert 44) ;; guessed by decompiler + (shader (inline-array adgif-shader) :offset-assert 48) ;; guessed by decompiler + (num-shaders uint8 :offset-assert 52) + (num-base-colors uint8 :offset-assert 53) + (num-level0-colors uint8 :offset-assert 54) + (num-level1-colors uint8 :offset-assert 55) + (color-offset uint8 :offset-assert 56) + (color-count uint8 :offset-assert 57) + (texture-masks-index uint16 :offset-assert 58) + (generic generic-tfragment :offset-assert 60) + ) + :method-count-assert 17 + :size-assert #x40 + :flag-assert #x1100000040 + ) +|# + +;; (deftype drawable-inline-array-tfrag (drawable-inline-array) +;; () +;; :flag-assert #x1100000064 +;; ) + +;; (deftype drawable-inline-array-tfrag-trans (drawable-inline-array-tfrag) +;; () +;; :flag-assert #x11000000b4 +;; ) + +;; (deftype drawable-inline-array-tfrag-water (drawable-inline-array-tfrag) +;; () +;; :flag-assert #x11000000b4 +;; ) + +;; (deftype drawable-tree-tfrag (drawable-tree) +;; () +;; :flag-assert #x1100000020 +;; ) + +;; (deftype drawable-tree-tfrag-trans (drawable-tree-tfrag) +;; () +;; :flag-assert #x1100000020 +;; ) + +;; (deftype drawable-tree-tfrag-water (drawable-tree-tfrag) +;; () +;; :flag-assert #x1100000020 +;; ) + +;; (deftype drawable-tree-tfrag-shared (drawable-tree-tfrag) +;; () +;; :flag-assert #x1100000020 +;; ) + +;; (deftype drawable-tree-tfrag-trans-shared (drawable-tree-tfrag-shared) +;; () +;; :flag-assert #x1100000020 +;; ) + +;; (deftype drawable-tree-tfrag-water-shared (drawable-tree-tfrag-shared) +;; () +;; :flag-assert #x1100000020 +;; ) + +#| +(deftype tfrag-dists (structure) + ((data uint32 16 :offset-assert 0) ;; guessed by decompiler + (vector vector 4 :offset-assert 0) ;; guessed by decompiler + (k0s vector 2 :offset-assert 0) ;; guessed by decompiler + (k1s vector 2 :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype tfrag-data (structure) + ((data uint32 56 :offset-assert 0) ;; guessed by decompiler + (vector vector 14 :offset-assert 0) ;; guessed by decompiler + (fog vector :inline :offset-assert 0) + (val vector :inline :offset-assert 16) + (strgif qword :inline :offset-assert 32) ;; gs-gif-tag :inline + (fangif qword :inline :offset-assert 48) ;; gs-gif-tag :inline + (adgif qword :inline :offset-assert 64) ;; gs-gif-tag :inline + (hvdf-offset vector :inline :offset-assert 80) + (hmge-scale vector :inline :offset-assert 96) + (invh-scale vector :inline :offset-assert 112) + (ambient vector :inline :offset-assert 128) + (guard vector :inline :offset-assert 144) + (dists tfrag-dists :inline :offset-assert 160) + (k0s uint128 2 :offset-assert 160) ;; guessed by decompiler + (k1s uint128 2 :offset-assert 192) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xe0 + :flag-assert #x9000000e0 + ) +|# + +#| +(deftype tfrag-control (structure) + ((num-base-points uint32 :offset-assert 0) + (num-shared-base-points uint32 :offset-assert 4) + (num-level0-points uint32 :offset-assert 8) + (num-shared-level0-points uint32 :offset-assert 12) + (num-level1-points uint32 :offset-assert 16) + (num-shared-level1-points uint32 :offset-assert 20) + (ptr-vtxdata uint32 :offset-assert 24) + (ptr-base-points uint32 :offset-assert 28) + (ptr-shared-base-points uint32 :offset-assert 32) + (ptr-level0-points uint32 :offset-assert 36) + (ptr-shared-level0-points uint32 :offset-assert 40) + (ptr-level1-points uint32 :offset-assert 44) + (ptr-shared-level1-points uint32 :offset-assert 48) + (ptr-draw-points uint32 :offset-assert 52) + (ptr-interpolated-0 uint32 :offset-assert 56) + (ptr-shared-interpolated-0 uint32 :offset-assert 60) + (ptr-interpolated1 uint32 :offset-assert 64) + (ptr-shared-interpolated1 uint32 :offset-assert 68) + (ptr-strip-data uint32 :offset-assert 72) + (ptr-texture-data uint32 :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype tfrag-stats (structure) + ((from int32 :offset-assert 0) + (to int32 :offset-assert 4) + (cnt int32 :offset-assert 8) + (tris int32 :offset-assert 12) + (tfaces int32 :offset-assert 16) + (tfrags int32 :offset-assert 20) + (dtris int32 :offset-assert 24) + (base-verts int32 :offset-assert 28) + (level0-verts int32 :offset-assert 32) + (level1-verts int32 :offset-assert 36) + (dma-cnt int32 :offset-assert 40) + (dma-dta int32 :offset-assert 44) + (dma-tex int32 :offset-assert 48) + (strips int32 :offset-assert 52) + (drawpoints int32 :offset-assert 56) + (vif int32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype tfrag-packet (structure) + ((tag uint128 2 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype tfrag-work (structure) + ((base-tmpl dma-packet :inline :offset-assert 0) + (level-0-tmpl dma-packet :inline :offset-assert 16) + (common-tmpl dma-packet :inline :offset-assert 32) + (level-1-tmpl dma-packet :inline :offset-assert 48) + (color-tmpl dma-packet :inline :offset-assert 64) + (frag-dists vector :inline :offset-assert 80) + (min-dist vector :inline :offset-assert 96) + (color-ptr vector4w :inline :offset-assert 112) + (tr-stat-tfrag tr-stat :offset-assert 128) + (tr-stat-tfrag-scissor tr-stat :offset-assert 132) + (vu1-enable-tfrag int32 :offset-assert 136) + (vu1-enable-tfrag-scissor int32 :offset-assert 140) + (cur-vis-bits uint32 :offset-assert 144) + (end-vis-bits uint32 :offset-assert 148) + (src-ptr uint32 :offset-assert 152) + (last-call uint32 :offset-assert 156) + (dma-buffer basic :offset-assert 160) + (test-id uint32 :offset-assert 164) + (wait-from-spr uint32 :offset-assert 168) + (wait-to-spr uint32 :offset-assert 172) + (near-wait-from-spr uint32 :offset-assert 176) + (near-wait-to-spr uint32 :offset-assert 180) + (max-fragment uint16 :offset-assert 184) + (min-fragment uint16 :offset-assert 186) + (texture-dists uint32 :offset-assert 188) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) +|# + +#| +(deftype tfrag-dma (structure) + ((banka tfragment 16 :offset-assert 4) ;; guessed by decompiler + (bankb tfragment 16 :offset-assert 1028) ;; guessed by decompiler + (outa uint128 128 :offset-assert 2048) ;; guessed by decompiler + (outb uint128 128 :offset-assert 4096) ;; guessed by decompiler + (colors rgba 2048 :offset-assert 6144) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x37fc + :flag-assert #x9000037fc + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; background-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype background-work (basic) + ((tfrag-tree-count int32 :offset-assert 4) + (tfrag-trees drawable-tree-tfrag 19 :offset-assert 8) ;; guessed by decompiler + (tfrag-levels level 19 :offset-assert 84) ;; guessed by decompiler + (tfrag-trans-tree-count int32 :offset-assert 160) + (tfrag-trans-trees drawable-tree-tfrag-trans 19 :offset-assert 164) ;; guessed by decompiler + (tfrag-trans-levels level 19 :offset-assert 240) ;; guessed by decompiler + (tfrag-water-tree-count int32 :offset-assert 316) + (tfrag-water-trees drawable-tree-tfrag-water 19 :offset-assert 320) ;; guessed by decompiler + (tfrag-water-levels level 19 :offset-assert 396) ;; guessed by decompiler + (tfrag-shared-tree-count int32 :offset-assert 472) + (tfrag-shared-trees UNKNOWN 19 :offset-assert 476) + (tfrag-shared-levels UNKNOWN 19 :offset-assert 552) + (tfrag-trans-shared-tree-count int32 :offset-assert 628) + (tfrag-trans-shared-trees UNKNOWN 19 :offset-assert 632) + (tfrag-trans-shared-levels UNKNOWN 19 :offset-assert 708) + (tfrag-water-shared-tree-count int32 :offset-assert 784) + (tfrag-water-shared-trees UNKNOWN 19 :offset-assert 788) + (tfrag-water-shared-levels UNKNOWN 19 :offset-assert 864) + (shrub-tree-count int32 :offset-assert 940) + (shrub-trees drawable-tree-instance-shrub 19 :offset-assert 944) ;; guessed by decompiler + (shrub-levels level 19 :offset-assert 1020) ;; guessed by decompiler + (tie-tree-count int32 :offset-assert 1096) + (tie-trees drawable-tree-instance-tie 19 :offset-assert 1100) ;; guessed by decompiler + (tie-levels level 19 :offset-assert 1176) ;; guessed by decompiler + (wait-to-vu0 uint32 :offset-assert 1252) + ) + :method-count-assert 9 + :size-assert #x4e8 + :flag-assert #x9000004e8 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; subdivide-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype subdivide-settings (basic) + ((dist float 5 :offset-assert 4) ;; guessed by decompiler + (meters float 5 :offset-assert 24) ;; guessed by decompiler + (close float 20 :offset-assert 44) ;; guessed by decompiler + (far float 20 :offset-assert 124) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xcc + :flag-assert #x9000000cc + ) +|# + +#| +(deftype subdivide-dists (structure) + ((data uint32 32 :offset-assert 0) ;; guessed by decompiler + (vector vector 8 :offset-assert 0) ;; guessed by decompiler + (k0s uint128 4 :offset-assert 0) ;; guessed by decompiler + (k1s uint128 4 :offset-assert 64) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype terrain-stats (structure) + ((pris tr-stat :inline :offset-assert 0) + (tie-generic tr-stat :inline :offset-assert 16) + (tie-vanish tr-stat :inline :offset-assert 32) + (tie tr-stat :inline :offset-assert 48) + (tie-scissor tr-stat :inline :offset-assert 64) + (tie-envmap tr-stat :inline :offset-assert 80) + (tie-envmap-scissor tr-stat :inline :offset-assert 96) + (tie-trans tr-stat :inline :offset-assert 112) + (tie-scissor-trans tr-stat :inline :offset-assert 128) + (tie-envmap-trans tr-stat :inline :offset-assert 144) + (tie-envmap-scissor-trans tr-stat :inline :offset-assert 160) + (tie-water tr-stat :inline :offset-assert 176) + (tie-scissor-water tr-stat :inline :offset-assert 192) + (tie-envmap-water tr-stat :inline :offset-assert 208) + (tie-envmap-scissor-water tr-stat :inline :offset-assert 224) + (shrub-near tr-stat :inline :offset-assert 240) + (shrub tr-stat :inline :offset-assert 256) + (tfrag-scissor tr-stat :inline :offset-assert 272) + (tfrag tr-stat :inline :offset-assert 288) + (billboard tr-stat :inline :offset-assert 304) + (tfrag-trans tr-stat :inline :offset-assert 320) + (tfrag-scissor-trans tr-stat :inline :offset-assert 336) + (tfrag-water tr-stat :inline :offset-assert 352) + (tfrag-scissor-water tr-stat :inline :offset-assert 368) + (trans-pris tr-stat :inline :offset-assert 384) + (trans-shrub tr-stat :inline :offset-assert 400) + (ocean-mid tr-stat :inline :offset-assert 416) + (ocean-near tr-stat :inline :offset-assert 432) + (shadow tr-stat :inline :offset-assert 448) + (total tr-stat :inline :offset-assert 464) + ) + :method-count-assert 9 + :size-assert #x1e0 + :flag-assert #x9000001e0 + ) +|# + +#| +(deftype background-area (structure) + ((dma-area uint8 14336 :offset-assert 0) ;; guessed by decompiler + (vis-list uint8 2048 :offset-assert 14336) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4000 + :flag-assert #x900004000 + ) +|# + +#| +(deftype foreground-area (structure) + ((generic-work generic-work :inline :offset-assert 0) + (foreground-work foreground-work :inline :offset-assert 0) + (joint-work joint-work :inline :offset-assert 0) + (bone-mem bone-memory :inline :offset-assert 0) + (shadow-work shadow-work :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x3fe0 + :flag-assert #x900003fe0 + ) +|# + +#| +(deftype region-prim-area (structure) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (ray vector :inline :offset-assert 1328) + (region-enter-count int32 :offset-assert 1360) + (region-enter-list region 320 :offset-assert 1364) ;; guessed by decompiler + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) ;; guessed by decompiler + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region 320 :offset-assert 3928) ;; guessed by decompiler + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) ;; guessed by decompiler + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region 320 :offset-assert 6492) ;; guessed by decompiler + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) ;; guessed by decompiler + (region-start-count int32 :offset-assert 9052) + (region-start-list region 320 :offset-assert 9056) ;; guessed by decompiler + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #x2d60 + :flag-assert #xd00002d60 + (:methods + (region-prim-area-method-9 () none) ;; 9 ;; (track-entered-region! (_type_ drawable-region-sphere) int) + (region-prim-area-method-10 () none) ;; 10 ;; (track-exited-region! (_type_ drawable-region-sphere) int) + (region-prim-area-method-11 () none) ;; 11 ;; (track-inside-region! (_type_ drawable-region-sphere) int) + (region-prim-area-method-12 () none) ;; 12 ;; (track-start-region! (_type_ drawable-region-sphere) int) + ) + ) +|# + +#| +(deftype sprite-area (structure) + ((clock-data vector 22 :offset-assert 0) ;; guessed by decompiler + (buffer uint8 :dynamic :offset-assert 352) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x160 + :flag-assert #x900000160 + ) +|# + +#| +(deftype work-area (structure) + ((background background-area :inline :offset-assert 0) + (foreground foreground-area :inline :offset-assert 0) + (region-prim region-prim-area :inline :offset-assert 0) + (sprite sprite-area :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4000 + :flag-assert #x900004000 + ) +|# + +#| +(deftype terrain-context (structure) + ((work work-area :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4000 + :flag-assert #x900004000 + ) +|# + +;; (define-extern *terrain-stats* object) ;; terrain-stats +;; (define-extern *collide-stats* object) ;; collide-stats + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; entity-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++entity-h:entity-perm-status +(defenum entity-perm-status + :bitfield #t + :type uint16 + (bit-0 0) ;; blocks birth + (error 1) + (dead 2) + (no-kill 3) + (bit-4 4) + (bit-5 5) + (subtask-complete 6) + (bit-7 7) + (complete 8) + (bit-9 9) + (bit-10 10) + (save 11) + (bit-12 12) + (bit-13 13) + (bit-14 14) + (bit-15 15) + ) +;; ---entity-h:entity-perm-status + +(deftype entity-perm (structure) + "Entity information that gets persisted in the save file." + ((user-object object 2 :offset-assert 0) ;; guessed by decompiler + (user-uint64 uint64 :offset 0) + (user-float float 2 :offset 0) ;; guessed by decompiler + (user-int32 int32 2 :offset 0) ;; guessed by decompiler + (user-uint32 uint32 2 :offset 0) ;; guessed by decompiler + (user-int16 int16 4 :offset 0) ;; guessed by decompiler + (user-uint16 uint16 4 :offset 0) ;; guessed by decompiler + (user-int8 int8 8 :offset 0) ;; guessed by decompiler + (user-uint8 uint8 8 :offset 0) ;; guessed by decompiler + (status entity-perm-status :offset-assert 8) ;; entity-perm-status + (dummy uint8 1 :offset-assert 10) ;; guessed by decompiler + (task game-task :offset-assert 11) ;; game-task + (aid actor-id :offset-assert 12) ;; guessed by decompiler + (quad uint128 :offset 0) + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (update (_type_ symbol entity-perm-status) _type_) ;; 9 + ) + ) + +(deftype entity-links (structure) + "A linked list of entities with some extra data about their current status." + ((prev-link entity-links :offset-assert 0) + (next-link entity-links :offset-assert 4) + (entity entity :offset-assert 8) ;; guessed by decompiler + (process process :offset-assert 12) ;; guessed by decompiler + (level level :offset-assert 16) ;; guessed by decompiler + (vis-id int32 :offset-assert 20) + (kill-mask task-mask :offset-assert 24) + (vis-dist meters :offset-assert 28) + (trans vector :inline :offset-assert 32) + (perm entity-perm :inline :offset-assert 48) + (status entity-perm-status :offset 56) ;; entity-perm-status + (aid uint32 :offset 60) + (task game-task :offset 59) ;; game-task + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (entity-links-method-9 () none) ;; 9 ;; (birth? (_type_ vector) symbol) + ) + ) + +(deftype entity-perm-array (inline-array-class) + ((data entity-perm :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype entity-links-array (inline-array-class) + "An array of [[entity-links]]. + Levels store a reference to this which holds all the entities in the level." + ((data entity-links :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +;; (deftype entity (res-lump) +;; () +;; :flag-assert #x1b00000038 +;; ) + +;; (deftype entity-camera (entity) +;; () +;; :flag-assert #x1b00000050 +;; ) + +;; (deftype entity-nav-mesh (entity) +;; () +;; :flag-assert #x1d0000003c +;; ) + +;; (deftype entity-race-mesh (entity) +;; () +;; :flag-assert #x1d0000003c +;; ) + +;; (deftype entity-actor (entity) +;; () +;; :flag-assert #x2100000060 +;; ) + +(deftype actor-reference (structure) + ((actor entity-actor :offset-assert 0) ;; guessed by decompiler + (id uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype actor-group (inline-array-class) + ((data actor-reference :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype entity-info (basic) + ((ptype object :offset-assert 4) ;; guessed by decompiler + (pool symbol :offset-assert 8) ;; guessed by decompiler + (heap-size int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype actor-bank (basic) + ((pause-dist meters :offset-assert 4) + (birth-dist meters :offset-assert 8) + (birth-max int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(define-extern *generate-actor-vis* symbol) +(define-extern *generate-actor-vis-start* symbol) +(define-extern *generate-actor-vis-output* symbol) +(define-extern *ACTOR-bank* actor-bank) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; entity-more-perm ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype entity-more-perm (structure) + ((aid uint32 :offset-assert 0) + (ent basic :offset-assert 4) + (user-object UNKNOWN 2 :offset-assert 8) + (user-uint64 uint64 :offset-assert 8) + (user-float UNKNOWN 2 :offset-assert 8) + (user-int32 UNKNOWN 2 :offset-assert 8) + (user-uint32 UNKNOWN 2 :offset-assert 8) + (user-int16 UNKNOWN 4 :offset-assert 8) + (user-uint16 UNKNOWN 4 :offset-assert 8) + (user-int8 UNKNOWN 8 :offset-assert 8) + (user-uint8 UNKNOWN 8 :offset-assert 8) + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (entity-more-perm-method-9 () none) ;; 9 + ) + ) +|# + +#| +(deftype entity-more-perm-hash (structure) + ((data UNKNOWN 512 :offset-assert 0) + (entity-more-perm-ct int32 :offset-assert 8192) + (entity-indices UNKNOWN 1024 :offset-assert 8196) + ) + :method-count-assert 15 + :size-assert #x2804 + :flag-assert #xf00002804 + (:methods + (entity-more-perm-hash-method-9 () none) ;; 9 + (entity-more-perm-hash-method-10 () none) ;; 10 + (entity-more-perm-hash-method-11 () none) ;; 11 + (entity-more-perm-hash-method-12 () none) ;; 12 + (entity-more-perm-hash-method-13 () none) ;; 13 + (entity-more-perm-hash-method-14 () none) ;; 14 + ) + ) +|# + +;; (define-extern *entity-more-perm* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sprite-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sprite-vec-data-2d (structure) + ((x-y-z-sx vector :inline :offset-assert 0) + (flag-rot-sy vector :inline :offset-assert 16) + (r-g-b-a vector :inline :offset-assert 32) + (x float :offset-assert 0) + (y float :offset-assert 4) + (z float :offset-assert 8) + (sx float :offset-assert 12) + (sy float :offset-assert 28) + (rot float :offset-assert 24) + (flag int32 :offset-assert 16) + (matrix int32 :offset-assert 20) + (warp-turns int32 :offset-assert 16) + (r float :offset-assert 32) + (g float :offset-assert 36) + (b float :offset-assert 40) + (a float :offset-assert 44) + (trans vector3s :inline :offset-assert 0) + (color rgbaf :inline :offset-assert 32) + (data uint128 1 :offset-assert 0) ;; guessed by decompiler + (data64 uint64 6 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype sprite-array-2d (basic) + ((num-sprites int32 2 :offset-assert 4) ;; guessed by decompiler + (num-valid int32 2 :offset-assert 12) ;; guessed by decompiler + (vec-data pointer :offset-assert 20) ;; guessed by decompiler + (adgif-data (inline-array adgif-shader) :offset-assert 24) ;; guessed by decompiler + (pad uint128 4 :offset-assert 32) ;; guessed by decompiler + (data uint128 1 :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype sprite-vec-data-3d (structure) + ((x-y-z-sx vector :inline :offset-assert 0) + (qx-qy-qz-sy vector :inline :offset-assert 16) + (r-g-b-a vector :inline :offset-assert 32) + (x float :offset-assert 0) + (y float :offset-assert 4) + (z float :offset-assert 8) + (sx float :offset-assert 12) + (sy float :offset-assert 28) + (qx float :offset-assert 16) + (qy float :offset-assert 20) + (qz float :offset-assert 24) + (r float :offset-assert 32) + (g float :offset-assert 36) + (b float :offset-assert 40) + (a float :offset-assert 44) + (trans vector3s :inline :offset-assert 0) + (rot vector3s :inline :offset-assert 16) + (color rgbaf :inline :offset-assert 32) + (data uint128 1 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype sprite-array-3d (basic) + ((num-sprites int32 2 :offset-assert 4) ;; guessed by decompiler + (num-valid int32 2 :offset-assert 12) ;; guessed by decompiler + (vec-data pointer :offset-assert 20) ;; guessed by decompiler + (adgif-data (inline-array adgif-shader) :offset-assert 24) ;; guessed by decompiler + (data uint128 1 :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; simple-sprite-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype sprite-glow-data (structure) + ((position vector :inline :offset-assert 0) + (size-x float :offset 12) + (size-probe float :offset 16) + (z-offset float :offset-assert 20) + (rot-angle float :offset-assert 24) + (size-y float :offset-assert 28) + (color rgbaf :inline :offset-assert 32) + (fade-a float :offset-assert 48) + (fade-b float :offset-assert 52) + (tex-id texture-id :offset-assert 56) ;; guessed by decompiler + (dummy uint32 :offset-assert 60) + (quads vector 4 :inline :offset 0) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (set-trans (_type_ vector) none) ;; 9 + ) + ) + +(deftype simple-sprite-system (structure) + ((count int16 :offset-assert 0) + (max-count int16 :offset-assert 2) + (data (inline-array sprite-glow-data) :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x8 + :flag-assert #xc00000008 + (:methods + (add! "Add a sprite to the list, to be drawn later." (_type_ sprite-glow-data) none) ;; 9 + (draw-all-sprites! "Submit all sprites to the sprite-glow renderer" (_type_ dma-buffer) none) ;; 10 + (clear! "Reset the list." (_type_) none) ;; 11 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; eye-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype eye (structure) + ((data vector 2 :offset-assert 0) ;; guessed by decompiler + (x float :offset-assert 0) + (y float :offset-assert 4) + (lid float :offset-assert 8) + (iris-scale float :offset-assert 16) + (pupil-scale float :offset-assert 20) + (lid-scale float :offset-assert 24) + (tbp int32 :offset-assert 32) + (shader-count uint32 :offset-assert 36) + (shader adgif-shader 8 :offset-assert 40) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) +|# + +#| +(deftype eye-control (structure) + ((process uint64 :offset-assert 0) ;; handle + (random-time uint16 :offset-assert 8) + (bucket uint16 :offset-assert 10) + (blink float :offset-assert 12) + (shaders (inline-array adgif-shader) :offset-assert 16) ;; guessed by decompiler + (eyes eye 2 :offset-assert 32) ;; guessed by decompiler + (left eye :inline :offset-assert 32) + (right eye :inline :offset-assert 112) + (level-index int16 :offset-assert 192) + (high-res? symbol :offset-assert 196) ;; guessed by decompiler + (level-texture-page uint32 :offset-assert 200) + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 9 + :size-assert #x10c + :flag-assert #x90000010c + ) +|# + +#| +(deftype eye-control-array (basic) + ((data eye-control 32 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2210 + :flag-assert #x900002210 + ) +|# + +#| +(deftype eye-work (structure) + ((sprite-tmpl dma-gif-packet :inline :offset-assert 0) + (sprite-tmpl2 dma-gif-packet :inline :offset-assert 32) + (adgif-tmpl dma-gif-packet :inline :offset-assert 64) + (blink-table float 10 :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) +|# + +;; (define-extern *eye-control-array* eye-control-array) ;; eye-control-array + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; camera-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++camera-h:cam-index-options +(defenum cam-index-options + :type uint32 + :bitfield #t + (SPHERICAL) + (RADIAL) + ) +;; ---camera-h:cam-index-options + +;; +++camera-h:slave-los-state +(defenum slave-los-state + :type uint32 + (none 0) + (cw 1) + (ccw 2) + (between 3) + ) +;; ---camera-h:slave-los-state + +(deftype cam-index (structure) + ((flags cam-index-options :offset-assert 0) ;; guessed by decompiler + (vec vector 2 :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (cam-index-method-9 (_type_ symbol entity vector curve) symbol) ;; 9 + (cam-index-method-10 (_type_ vector) float) ;; 10 + ) + ) + +(deftype tracking-point (structure) + ((position vector :inline :offset-assert 0) + (direction vector :inline :offset-assert 16) + (tp-length float :offset-assert 32) + (next int32 :offset-assert 36) + (incarnation int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype tracking-spline-sampler (structure) + ((cur-pt int32 :offset-assert 0) + (partial-pt float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype tracking-spline (structure) + ((point tracking-point 32 :inline :offset-assert 0) ;; guessed by decompiler + (summed-len float :offset-assert 1536) + (free-point int32 :offset-assert 1540) + (used-point int32 :offset-assert 1544) + (partial-point float :offset-assert 1548) + (end-point int32 :offset-assert 1552) + (next-to-last-point int32 :offset-assert 1556) + (max-move float :offset-assert 1560) + (sample-len float :offset-assert 1564) + (used-count int32 :offset-assert 1568) + (old-position vector :inline :offset-assert 1584) + (debug-old-position vector :inline :offset-assert 1600) + (debug-out-position vector :inline :offset-assert 1616) + (debug-last-point int32 :offset-assert 1632) + ) + :method-count-assert 24 + :size-assert #x664 + :flag-assert #x1800000664 + (:methods + (tracking-spline-method-9 (_type_) none) ;; 9 + (tracking-spline-method-10 (_type_ vector) none) ;; 10 + (debug-point-info (_type_ int) none) ;; 11 + (debug-all-points (_type_) none) ;; 12 + (tracking-spline-method-13 (_type_ int) none) ;; 13 + (tracking-spline-method-14 (_type_ tracking-spline-sampler) none) ;; 14 + (tracking-spline-method-15 (_type_) none) ;; 15 + (tracking-spline-method-16 (_type_ float) none) ;; 16 + (tracking-spline-method-17 (_type_ vector float float symbol) int) ;; 17 + (tracking-spline-method-18 (_type_ float vector vector tracking-spline-sampler) vector) ;; 18 + (tracking-spline-method-19 (_type_ float vector vector tracking-spline-sampler) vector) ;; 19 + (tracking-spline-method-20 (_type_ vector int) none) ;; 20 + (tracking-spline-method-21 (_type_ vector float float float float vector) vector) ;; 21 + (tracking-spline-method-22 (_type_ float) symbol) ;; 22 + (debug-draw-spline (_type_) none) ;; 23 + ) + ) + +(deftype cam-float-seeker (structure) + ((target float :offset-assert 0) + (value float :offset-assert 4) + (vel float :offset-assert 8) + (accel float :offset-assert 12) + (max-vel float :offset-assert 16) + (max-partial float :offset-assert 20) + ) + :pack-me + :method-count-assert 13 + :size-assert #x18 + :flag-assert #xd00000018 + (:methods + (init (_type_ float float float float) none) ;; 9 + (copy-to (_type_ _type_) none) ;; 10 + (update! (_type_ float) none) ;; 11 + (jump-to-target! (_type_ float) float) ;; 12 + ) + ) + +(deftype cam-vector-seeker (structure) + ((target vector :inline :offset-assert 0) + (value vector :inline :offset-assert 16) + (vel vector :inline :offset-assert 32) + (accel float :offset-assert 48) + (max-vel float :offset-assert 52) + (max-partial float :offset-assert 56) + ) + :method-count-assert 11 + :size-assert #x3c + :flag-assert #xb0000003c + (:methods + (init (_type_ vector float float float) none) ;; 9 + (update! (_type_ vector) none) ;; 10 + ) + ) + +(deftype cam-rotation-tracker (structure) + ((inv-mat matrix :inline :offset-assert 0) + (no-follow basic :offset-assert 64) + (follow-pt vector :inline :offset-assert 80) + (follow-off vector :inline :offset-assert 96) + (follow-blend float :offset-assert 112) + (tilt-adjust cam-float-seeker :inline :offset-assert 116) + (point-of-interest-blend cam-float-seeker :inline :offset-assert 140) + (underwater-blend cam-float-seeker :inline :offset-assert 164) + (looking-at vector :inline :offset-assert 192) + (looking-interesting vector :inline :offset-assert 208) + (old-cam-trans vector :inline :offset-assert 224) + (follow-height-extra cam-float-seeker :inline :offset-assert 240) + ) + :method-count-assert 9 + :size-assert #x108 + :flag-assert #x900000108 + ) + +(deftype camera-combiner (process) + ((trans vector :inline :offset-assert 144 :score 1) + (inv-camera-rot matrix :inline :offset-assert 160) + (fov float :offset-assert 224) + (interp-val float :offset-assert 228) + (interp-step float :offset-assert 232) + (dist-from-src float :offset-assert 236) + (dist-from-dest float :offset-assert 240) + (flip-control-axis vector :inline :offset-assert 256) + (velocity vector :inline :offset-assert 272) + (tracking-status uint64 :offset-assert 288) + (tracking-options int32 :offset-assert 296) + (tracking cam-rotation-tracker :inline :offset-assert 304) + (fast-rot basic :offset-assert 568) + ) + :method-count-assert 15 + :size-assert #x23c + :flag-assert #xf01b0023c + (:methods + (camera-combiner-method-14 () none) ;; 14 + ) + (:states + cam-combiner-active + ) + ) + +;; +++camera-h:camera-blend-to-type +(defenum camera-blend-to-type + :type uint64 + (unknown-0 0) + (unknown-1 1) + (unknown-2 2) + ) +;; ---camera-h:camera-blend-to-type + +;; +++camera-h:camera-blend-from-type +(defenum camera-blend-from-type + :type uint64 + (unknown-0 0) + (unknown-1 1) + (unknown-2 2) + ) +;; ---camera-h:camera-blend-from-type + +;; +++camera-h:cam-slave-options-u32 +(defenum cam-slave-options-u32 + :type uint32 + :bitfield #t + :copy-entries cam-slave-options + ) +;; ---camera-h:cam-slave-options-u32 + +;; +++camera-h:cam-master-options-u32 +(defenum cam-master-options-u32 + :type uint32 + :bitfield #t + :copy-entries cam-master-options + ) +;; ---camera-h:cam-master-options-u32 + +(deftype camera-slave (process) + ((trans vector :inline :offset-assert 144) + (fov float :offset-assert 160) + (fov0 float :offset-assert 164) + (fov1 float :offset-assert 168) + (fov-index cam-index :inline :offset-assert 176) + (tracking cam-rotation-tracker :inline :offset-assert 224) + (view-off-param float :offset-assert 488) + (view-off vector :inline :offset-assert 496) + (joystick-saved-view-off vector :inline :offset-assert 512) + (min-z-override float :offset-assert 528) + (view-flat vector :inline :offset-assert 544) + (string-vel-dir uint32 :offset-assert 560) + (string-trans vector :inline :offset-assert 576) + (position-spline tracking-spline :inline :offset-assert 592) + (pivot-pt vector :inline :offset-assert 2240) + (pivot-rad float :offset-assert 2256) + (circular-follow vector :inline :offset-assert 2272) + (max-angle-offset float :offset-assert 2288) + (max-angle-curr float :offset-assert 2292) + (options cam-slave-options-u32 :offset-assert 2296) ;; guessed by decompiler + (cam-entity entity :offset-assert 2300) ;; guessed by decompiler + (butt-timer uint64 :offset-assert 2304) ;; time-frame + (butt-seek basic :offset-assert 2312) + (butt-vector vector :inline :offset-assert 2320) + (velocity vector :inline :offset-assert 2336) + (desired-pos vector :inline :offset-assert 2352) + (time-dist-too-far uint32 :offset-assert 2368) + (los-state slave-los-state :offset-assert 2372) ;; guessed by decompiler + (good-point vector :inline :offset-assert 2384) + (los-tgt-spline-pt int32 :offset-assert 2400) + (los-tgt-spline-pt-incarnation int32 :offset-assert 2404) + (los-last-pos vector :inline :offset-assert 2416) + (intro-curve curve :inline :offset-assert 2432) + (intro-offset vector :inline :offset-assert 2464) + (intro-t float :offset-assert 2480) + (intro-t-step float :offset-assert 2484) + (outro-exit-value float :offset-assert 2488) + (spline-exists symbol :offset-assert 2492) ;; guessed by decompiler + (spline-curve curve :inline :offset-assert 2496) + (spline-offset vector :inline :offset-assert 2528) + (index cam-index :inline :offset-assert 2544) + (saved-pt vector :inline :offset-assert 2592) + (spline-tt float :offset-assert 2608) + (spline-follow-dist float :offset-assert 2612) + (enter-has-run symbol :offset-assert 2616) ;; guessed by decompiler + (blend-from-type uint64 :offset-assert 2624) ;; camera-blend-from-type + (blend-to-type uint64 :offset-assert 2632) ;; camera-blend-to-type + (have-phony-joystick basic :offset-assert 2640) + (phony-joystick-x float :offset-assert 2644) + (phony-joystick-y float :offset-assert 2648) + (string-min-val vector :inline :offset-assert 2656) + (string-max-val vector :inline :offset-assert 2672) + (string-val-locked basic :offset-assert 2688) + (relative-position vector :inline :offset-assert 2704) + (string-relative basic :offset-assert 2720) + (slope-adjust cam-float-seeker :inline :offset-assert 2724) + (slope-quat quaternion :inline :offset-assert 2752) + (vehicle-up vector :inline :offset-assert 2768) + (vehicle-at vector :inline :offset-assert 2784) + (intro-handle uint64 :offset-assert 2800) + (slow-mo-sound-id uint32 :offset-assert 2808) + ) + :method-count-assert 15 + :size-assert #xafc + :flag-assert #xf0a700afc + (:methods + (camera-slave-method-14 () none) ;; 14 + ) + ) + +(deftype camera-master (process) + ((master-options cam-master-options-u32 :offset-assert 144) ;; guessed by decompiler + (settings cam-setting-data :offset-assert 148) + (slave (pointer camera-slave) :offset-assert 152) ;; guessed by decompiler + (decel (pointer camera-slave) :offset-assert 156) ;; guessed by decompiler + (slave-options cam-slave-options-u32 :offset-assert 160) ;; guessed by decompiler + (view-off-param-save float :offset-assert 164) + (changer uint32 :offset-assert 168) + (string-min cam-vector-seeker :inline :offset-assert 176) + (string-max cam-vector-seeker :inline :offset-assert 240) + (string-push-z float :offset-assert 300) + (local-down vector :inline :offset-assert 304) + (focus focus :inline :offset-assert 320) + (being-attacked symbol :offset-assert 332) ;; guessed by decompiler + (attack-start uint64 :offset-assert 336) ;; time-frame + (on-ground symbol :offset-assert 344) ;; guessed by decompiler + (under-water int32 :offset-assert 348) + (on-pole symbol :offset-assert 352) ;; guessed by decompiler + (tgt-rot-mat matrix :inline :offset-assert 368) + (tgt-face-mat matrix :inline :offset-assert 432) + (tpos-old vector :inline :offset-assert 496) + (tpos-curr vector :inline :offset-assert 512) + (tpos-old-adj vector :inline :offset-assert 528) + (tpos-curr-adj vector :inline :offset-assert 544) + (tpos-tgt vector :inline :offset-assert 560) + (upspeed float :offset-assert 576) + (pitch-off vector :inline :offset-assert 592) + (target-spline tracking-spline :inline :offset-assert 608) + (ease-from vector :inline :offset-assert 2256) + (ease-t float :offset-assert 2272) + (ease-step float :offset-assert 2276) + (ease-to vector :inline :offset-assert 2288) + (outro-curve curve :inline :offset-assert 2304) + (outro-t float :offset-assert 2324) + (outro-t-step float :offset-assert 2328) + (outro-exit-value float :offset-assert 2332) + (water-drip-time uint64 :offset-assert 2336) ;; time-frame + (water-drip sparticle-launch-control :offset-assert 2344) ;; guessed by decompiler + (water-drip-mult float :offset-assert 2348) + (water-drip-speed float :offset-assert 2352) + (interest-dist float :offset-assert 2356) + ) + :method-count-assert 18 + :size-assert #x938 + :flag-assert #x1208b00938 + (:methods + (camera-master-method-14 () none) ;; 14 ;; (camera-master-method-14 (_type_ vector) vector) + (camera-master-method-15 () none) ;; 15 ;; (camera-master-method-15 (_type_ vector) vector) + (camera-master-method-16 () none) ;; 16 ;; (camera-master-method-16 (_type_ symbol) int) + (camera-master-method-17 () none) ;; 17 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-interface-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *camera-init-mat* matrix) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparticle-launcher-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sparticle-birthinfo (structure) + ((sprite uint32 :offset-assert 0) + (anim int32 :offset-assert 4) + (anim-speed float :offset-assert 8) + (birth-func basic :offset-assert 12) + (joint-ppoint int32 :offset-assert 16) + (num-to-birth float :offset-assert 20) + (dataf float 1 :offset-assert 0) ;; guessed by decompiler + (data uint32 1 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype sp-field-init-spec (structure) + ((field uint16 :offset-assert 0) ;; sp-field-id + (flags uint16 :offset-assert 2) ;; sp-flag + (initial-valuef float :offset-assert 4) + (random-rangef float :offset-assert 8) + (random-multf float :offset-assert 12) + (initial-value int32 :offset-assert 4) + (random-range int32 :offset-assert 8) + (random-mult int32 :offset-assert 12) + (func symbol :offset-assert 4) ;; guessed by decompiler + (tex texture-id :offset-assert 4) ;; guessed by decompiler + (pntr pointer :offset-assert 4) ;; guessed by decompiler + (object basic :offset-assert 4) + (sym symbol :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ;; field object uses ~A with a signed load. + ) +|# + +#| +(deftype sparticle-launcher (basic) + ((birthaccum float :offset-assert 4) + (init-specs (inline-array sp-field-init-spec) :offset-assert 8) ;; guessed by decompiler + (level-flag int32 :offset-assert 12) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (sparticle-launcher-method-9 () none) ;; 9 ;; (get-field-spec-by-id (_type_ sp-field-id) sp-field-init-spec) + (sparticle-launcher-method-10 () none) ;; 10 ;; (setup-special-textures (_type_ string) none) + ) + ) +|# + +#| +(deftype sparticle-group-item (structure) + ((launcher uint32 :offset-assert 0) + (fade-after meters :offset-assert 4) + (falloff-to meters :offset-assert 8) + (flags uint16 :offset-assert 12) ;; sp-group-item-flag + (period uint16 :offset-assert 14) + (length uint16 :offset-assert 16) + (offset int16 :offset-assert 18) + (hour-mask uint32 :offset-assert 20) + (binding uint32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype sparticle-launch-state (structure) + ((group-item sparticle-group-item :offset-assert 0) + (flags uint16 :offset-assert 4) ;; sp-launch-state-flags + (randomize uint16 :offset-assert 6) + (center vector :offset-assert 8) + (sprite3d sprite-vec-data-3d :offset-assert 12) + (sprite sparticle-cpuinfo :offset-assert 16) ;; guessed by decompiler + (offset uint32 :offset-assert 20) + (accum float :offset-assert 24) + (spawn-time uint32 :offset-assert 28) + (control sparticle-launch-control :offset-assert 32) ;; guessed by decompiler + (swarm basic :offset-assert 20) + (seed uint32 :offset-assert 24) + (time uint32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype sparticle-launch-group (basic) + ((length int16 :offset-assert 4) + (duration uint16 :offset-assert 6) + (linger-duration uint16 :offset-assert 8) + (flags uint16 :offset-assert 10) ;; sp-group-flag + (name string :offset-assert 12) ;; guessed by decompiler + (launcher (inline-array sparticle-group-item) :offset-assert 16) ;; guessed by decompiler + (rotate-x deg :offset-assert 20) ;; degrees + (rotate-y deg :offset-assert 24) ;; degrees + (rotate-z deg :offset-assert 28) ;; degrees + (scale-x float :offset-assert 32) + (scale-y float :offset-assert 36) + (scale-z float :offset-assert 40) + (bounds sphere :inline :offset-assert 48) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (sparticle-launch-group-method-9 () none) ;; 9 ;; (create-launch-control (_type_ process) sparticle-launch-control) + ) + ) +|# + +#| +(deftype sparticle-launch-control (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (group sparticle-launch-group :offset-assert 16) ;; guessed by decompiler + (proc process-drawable :offset-assert 20) ;; guessed by decompiler + (local-clock int32 :offset-assert 24) + (local-space-binding particle-local-space-info :offset-assert 28) + (matrix int8 :offset-assert 32) + (pointer-control uint32 :offset-assert 36) + (last-spawn-frame int32 :offset-assert 40) + (last-spawn-time int32 :offset-assert 44) + (origin matrix :inline :offset-assert 48) + (center vector :inline :offset-assert 96) + (data sparticle-launch-state :dynamic :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 22 + :size-assert #x70 + :flag-assert #x1600000070 + (:methods + (sparticle-launch-control-method-14 () none) ;; 14 ;; (initialize (_type_ sparticle-launch-group process-drawable) none) + (sparticle-launch-control-method-15 () none) ;; 15 ;; (is-visible? (_type_ vector) symbol) + (sparticle-launch-control-method-16 () none) ;; 16 ;; (spawn (_type_ vector) object) + (sparticle-launch-control-method-17 () none) ;; 17 ;; (spawn-from-mat (_type_ matrix) none) + (sparticle-launch-control-method-18 () none) ;; 18 ;; (spawn-from-cspace (_type_ cspace) none) + (sparticle-launch-control-method-19 () none) ;; 19 ;; (kill-particles (_type_) none) + (sparticle-launch-control-method-20 () none) ;; 20 ;; (set-local-space-info (_type_ particle-local-space-info) none) + (sparticle-launch-control-method-21 () none) ;; 21 + ) + ) +|# + +#| +(deftype sparticle-subsampler (basic) + ((min-emit float :offset-assert 4) + (accum float :offset-assert 8) + (spt-num float :offset-assert 12) + (sp-system sparticle-system :offset-assert 16) ;; guessed by decompiler + (part-id uint32 :offset-assert 20) + (spawn-mat matrix :inline :offset-assert 32) + (inited? symbol :offset-assert 96) ;; guessed by decompiler + (per-meter-method? basic :offset-assert 100) + ) + :method-count-assert 11 + :size-assert #x68 + :flag-assert #xb00000068 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type sparticle-system sparticle-launcher float) _type_) + (sparticle-subsampler-method-9 () none) ;; 9 ;; (init-with-vec! (_type_ vector) vector) + (sparticle-subsampler-method-10 () none) ;; 10 ;; (init-with-mat! (_type_ matrix) matrix) + ) + ) +|# + +#| +(deftype particle-birth-work (structure) + ((quat quaternion :inline :offset-assert 0) + (vel-range UNKNOWN 2 :offset-assert 16) + (vel vector :inline :offset-assert 16) + (pos-range UNKNOWN 2 :offset-assert 48) + (pos vector :inline :offset-assert 48) + (d-pos vector :inline :offset-assert 64) + (mat matrix :inline :offset-assert 80) + (tt float :offset-assert 144) + (t-step float :offset-assert 148) + ) + :method-count-assert 9 + :size-assert #x98 + :flag-assert #x900000098 + ) +|# + +;; (define-extern *launch-matrix* object) ;; matrix +;; (define-extern compute-rot-in-screenspace function) ;; (function vector float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparticle-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sparticle-cpuinfo (structure) + ((sprite sprite-vec-data-2d :offset-assert 0) + (adgif adgif-shader :offset-assert 4) + (radius float :offset-assert 8) + (omega float :offset-assert 12) + (vel-sxvel vector :inline :offset-assert 16) + (rot-syvel vector :inline :offset-assert 32) + (fade rgbaf :inline :offset-assert 48) + (acc vector :inline :offset-assert 64) + (rotvel3d quaternion :inline :offset-assert 80) + (vel vector3s :inline :offset-assert 16) + (accel vector3s :inline :offset-assert 64) + (scalevelx float :offset-assert 28) + (scalevely float :offset-assert 44) + (friction float :offset-assert 96) + (timer int32 :offset-assert 100) + (flags sp-cpuinfo-flag :offset-assert 104) ;; guessed by decompiler + (user-int32 int32 :offset-assert 108) + (user-uint32 uint32 :offset-assert 108) + (user-float float :offset-assert 108) + (user-pntr uint32 :offset-assert 108) + (user-object basic :offset-assert 108) + (user-sprite sprite-vec-data-2d :offset-assert 108) + (sp-func (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none) :offset-assert 112) ;; guessed by decompiler + (next-time uint32 :offset-assert 116) + (next-launcher basic :offset-assert 120) + (cache-alpha float :offset-assert 124) + (valid uint8 :offset-assert 128) + (clock-index uint8 :offset-assert 129) + (user1-int16 uint16 :offset-assert 130) + (control basic :offset-assert 132) + (binding int32 :offset-assert 136) ;; sparticle-launch-state + (data uint32 1 :offset-assert 12) ;; guessed by decompiler + (datab int8 4 :offset-assert 12) ;; guessed by decompiler + (dataf float 1 :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x8c + :flag-assert #x90000008c + ;; field user-object uses ~A with a signed load. field control uses ~A with a signed load. + ) +|# + +#| +(deftype sparticle-launchinfo (structure) + ((launchrot vector :inline :offset-assert 0) + (conerot vector :inline :offset-assert 16) + (rotate-x float :offset-assert 32) + (rotate-y float :offset-assert 36) + (rotate-z float :offset-assert 40) + (coneradius float :offset-assert 44) + (rotate vector :inline :offset-assert 32) + (scale-x float :offset-assert 48) + (scale-y float :offset-assert 52) + (scale-z float :offset-assert 56) + (dummy float :offset-assert 60) + (scale vector :inline :offset-assert 48) + (data uint8 1 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype sparticle-system (basic) + ((blocks int32 2 :offset-assert 4) ;; guessed by decompiler + (length int32 2 :offset-assert 12) ;; guessed by decompiler + (num-alloc int32 2 :offset-assert 20) ;; guessed by decompiler + (is-3d basic :offset-assert 28) + (flags uint32 :offset-assert 32) + (alloc-table (pointer uint64) :offset-assert 36) ;; guessed by decompiler + (cpuinfo-table (inline-array sparticle-cpuinfo) :offset-assert 40) ;; guessed by decompiler + (vecdata-table pointer :offset-assert 44) ;; guessed by decompiler + (adgifdata-table (inline-array adgif-shader) :offset-assert 48) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +;; (define-extern *sp-60-hz* object) ;; symbol + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; actor-link-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype actor-link-info (basic) + ((process process :offset-assert 4) ;; guessed by decompiler + (next entity-actor :offset-assert 8) ;; guessed by decompiler + (prev entity-actor :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 26 + :size-assert #x10 + :flag-assert #x1a00000010 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process symbol) _type_) + (actor-link-info-method-9 () none) ;; 9 ;; (get-matching-actor-type-mask (_type_ type) int) + (actor-link-info-method-10 () none) ;; 10 ;; (actor-count-before (_type_) int) + (actor-link-info-method-11 () none) ;; 11 ;; (link-to-next-and-prev-actor (_type_) actor-link-info) + (actor-link-info-method-12 () none) ;; 12 ;; (get-next (_type_) entity-actor) + (actor-link-info-method-13 () none) ;; 13 ;; (get-prev (_type_) entity-actor) + (actor-link-info-method-14 () none) ;; 14 ;; (get-next-process (_type_) process) + (actor-link-info-method-15 () none) ;; 15 ;; (get-prev-process (_type_) process) + (actor-link-info-method-16 () none) ;; 16 ;; (apply-function-forward (_type_ (function entity-actor object object) object) int) + (actor-link-info-method-17 () none) ;; 17 ;; (apply-function-reverse (_type_ (function entity-actor object object) object) int) + (actor-link-info-method-18 () none) ;; 18 ;; (apply-all (_type_ (function entity-actor object object) object) int) + (actor-link-info-method-19 () none) ;; 19 ;; (send-to-all (_type_ symbol) none) + (actor-link-info-method-20 () none) ;; 20 ;; (send-to-all-after (_type_ symbol) object) + (actor-link-info-method-21 () none) ;; 21 ;; (send-to-all-before (_type_ symbol) object) + (actor-link-info-method-22 () none) ;; 22 ;; (send-to-next-and-prev (_type_ symbol) none) + (actor-link-info-method-23 () none) ;; 23 ;; (send-to-next (_type_ symbol) none) + (actor-link-info-method-24 () none) ;; 24 ;; (send-to-prev (_type_ symbol) none) + (actor-link-info-method-25 () none) ;; 25 ;; (actor-count (_type_) int) + ) + ) +|# + +;; (define-extern entity-actor-lookup function) ;; (function res-lump symbol int entity-actor) +;; (define-extern entity-actor-count function) ;; (function res-lump symbol int) +;; (define-extern actor-link-subtask-complete-hook function) ;; (function entity-actor (pointer symbol) symbol) +;; (define-extern actor-link-subtask-incomplete-count-hook function) ;; (function entity-actor (pointer uint64) symbol) +;; (define-extern actor-link-dead-hook function) ;; (function entity-actor (pointer symbol) symbol) +;; (define-extern alt-actor-list-subtask-incomplete-count function) ;; (function process-drawable int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-debug-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *redline-table* object) ;; (pointer float) +;; (define-extern *redline-index* object) ;; int +;; (define-extern float-save-redline function) ;; (function float none) +;; (define-extern float-lookup-redline function) ;; (function float float) +;; (define-extern *blueline-table* object) ;; (pointer float) +;; (define-extern *blueline-index* object) ;; int +;; (define-extern float-save-blueline function) ;; (function float none) +;; (define-extern float-lookup-blueline function) ;; (function float float) +;; (define-extern *greenline-table* object) ;; (pointer float) +;; (define-extern *greenline-index* object) ;; int +;; (define-extern float-save-greenline function) ;; (function float none) +;; (define-extern float-lookup-greenline function) ;; (function float float) +;; (define-extern *yellowline-table* object) ;; (pointer float) +;; (define-extern *yellowline-index* object) ;; int +;; (define-extern float-save-yellowline function) ;; (function float none) +;; (define-extern float-lookup-yellowline function) ;; (function float float) +;; (define-extern *timeplot-table* object) ;; (pointer float) +;; (define-extern *timeplot-index* object) ;; int +;; (define-extern float-save-timeplot function) ;; (function float none) +;; (define-extern float-lookup-timeplot function) ;; (function float float) +;; (define-extern *cam-layout* object) ;; symbol + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-update-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++cam-update-h:external-cam-option +(defenum external-cam-option + :bitfield #t + (allow-z 0) + ) +;; ---cam-update-h:external-cam-option + +(define-extern *external-cam-options* external-cam-option) +(define-extern *external-cam-mode* symbol) +(define-extern *camera-look-through-other* int) +(define-extern *camera-other-fov* bfloat) +(define-extern *camera-other-trans* vector) +(define-extern *camera-other-matrix* matrix) +(define-extern *camera-smush-control* smush-control) +(define-extern *camera-smush-control-horizontal* smush-control) +(define-extern *camera-smush-control-into* smush-control) +(define-extern *camera-smush-control-2* smush-control) +(define-extern *camera-smush-control-horizontal-2* smush-control) +(define-extern *camera-smush-control-into-2* smush-control) +(define-extern *camera-other-root* vector) +(define-extern *fix-visible-level-mask* int) +(define-extern *manual-sample-point* symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-string (structure) + ((text string :offset-assert 0) ;; guessed by decompiler + (scale float :offset-assert 4) + (width float :offset-assert 8) + (height float :offset-assert 12) + (color uint8 :offset-assert 16) ;; font-color + (flags uint16 :offset-assert 18) ;; font-flags + (pos vector4w :inline :offset-assert 32) + (alpha float :offset-assert 48) + (time float :offset-assert 52) + (effect uint8 :offset-assert 56) + (effect-color uint8 :offset-assert 57) + (text-length int32 :offset-assert 60) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (hud-string-method-9 () none) ;; 9 + ) + ) +|# + +#| +(deftype hud-corners (structure) + ((data UNKNOWN 4 :offset-assert 0) + ) + :method-count-assert 10 + :size-assert #x20 + :flag-assert #xa00000020 + (:methods + (hud-corners-method-9 () none) ;; 9 + ) + ) +|# + +#| +(deftype hud-sprite (structure) + ((pos vector4w :inline :offset-assert 0) + (offset-x float :offset-assert 0) + (offset-y float :offset-assert 4) + (color vector4w :inline :offset-assert 16) + (flags uint16 :offset-assert 32) ;; hud-sprite-flags + (scale-x float :offset-assert 36) + (width float :offset-assert 36) + (scale-y float :offset-assert 40) + (height float :offset-assert 40) + (angle float :offset-assert 44) + (tex texture :offset-assert 48) ;; guessed by decompiler + (tid texture-id :offset-assert 48) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x34 + :flag-assert #xb00000034 + (:methods + (hud-sprite-method-9 () none) ;; 9 ;; (draw (_type_ dma-buffer level symbol) none) + (hud-sprite-method-10 () none) ;; 10 ;; (hud-sprite-method-10 (_type_ dma-buffer level int int int int) object) + ) + ) +|# + +#| +(deftype hud-box (structure) + ((box bounding-box2 :inline :offset-assert 0) + (min vector2 :inline :offset-assert 0) + (max vector2 :inline :offset-assert 8) + (color vector4w :inline :offset-assert 16) + ) + :method-count-assert 13 + :size-assert #x20 + :flag-assert #xd00000020 + (:methods + (hud-box-method-9 () none) ;; 9 ;; (draw-box-prim-only (_type_ dma-buffer) none) + (hud-box-method-10 () none) ;; 10 ;; (draw-box-alpha-1 (_type_ dma-buffer) none) + (hud-box-method-11 () none) ;; 11 ;; (draw-box-alpha-2 (_type_ dma-buffer) none) + (hud-box-method-12 () none) ;; 12 ;; (draw-box-alpha-3 (_type_ dma-buffer) none) + ) + ) +|# + +#| +(deftype hud-icon (structure) + ((icon (pointer manipy) :offset-assert 0) ;; guessed by decompiler + (pos vector4w :inline :offset-assert 16) + (scale-x float :offset-assert 32) + (scale-y float :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype hud (process) + ((trigger-time uint64 :offset-assert 144) ;; time-frame + (last-hide-time uint64 :offset-assert 152) ;; time-frame + (offset float :offset-assert 160) + (flags hud-flags :offset-assert 164) ;; guessed by decompiler + (strings hud-string 45 :offset-assert 176) ;; guessed by decompiler + (sprites hud-sprite 50 :offset-assert 3056) ;; guessed by decompiler + (icons hud-icon 2 :offset-assert 6256) ;; guessed by decompiler + (num-strings int32 :offset-assert 6352) + (num-sprites int32 :offset-assert 6356) + (gui-id sound-id :offset-assert 6360) ;; guessed by decompiler + ) + :method-count-assert 30 + :size-assert #x18dc + :flag-assert #x1e185018dc + (:methods + (hud-method-9 () none) ;; 9 + (hud-method-10 () none) ;; 10 + (hud-method-11 () none) ;; 11 + (hud-method-12 () none) ;; 12 + (hud-method-13 () none) ;; 13 + (hud-method-14 () none) ;; 14 ;; (hidden? (_type_) object) + (hud-method-15 () none) ;; 15 ;; (draw (_type_) none) + (hud-method-16 () none) ;; 16 ;; (update-values! (_type_) none) + (hud-method-17 () none) ;; 17 ;; (init-callback (_type_) none) + (hud-method-18 () none) ;; 18 ;; (event-callback (_type_ process int symbol event-message-block) object) + (hud-method-19 () none) ;; 19 ;; (hud-method-19 (_type_) none) + (hud-method-20 () none) ;; 20 ;; (hud-method-20 (_type_) none) + (hud-method-21 () none) ;; 21 ;; (hud-method-21 (_type_) none) + (hud-method-22 () none) ;; 22 ;; (hud-method-22 (_type_) none) + (hud-method-23 () none) ;; 23 ;; (hud-method-23 (_type_) none) + (hud-method-24 () none) ;; 24 ;; (check-ready-and-maybe-show (_type_ symbol) symbol) + (hud-method-25 () none) ;; 25 ;; (update-value-callback (_type_ int int) none) + (hud-method-26 () none) ;; 26 ;; (alloc-string-if-needed (_type_ int) none) + (hud-method-27 () none) ;; 27 + (hud-method-28 () none) ;; 28 + (hud-method-29 () none) ;; 29 + ) + ) +|# + +#| +(deftype hud-map (hud) + ((x float :offset-assert 6364) + (y float :offset-assert 6368) + ) + :method-count-assert 30 + :size-assert #x18e4 + :flag-assert #x1e186018e4 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; progress-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rpc-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern rpc-busy? (function int uint)) +(define-extern rpc-call (function int uint uint uint int uint int uint)) + +(deftype rpc-buffer (basic) + "Buffer for storing input/output data for a remote procedure call to the overlord driver on the IOP." + ((elt-size uint32 :offset-assert 4) + (elt-count uint32 :offset-assert 8) + (elt-used uint32 :offset-assert 12) + (busy symbol :offset-assert 16) ;; guessed by decompiler + (base pointer :offset-assert 20) ;; guessed by decompiler + (data uint8 :dynamic :offset 32) ;; guessed by decompiler + ) + (:methods + (new (symbol type uint uint) _type_) ;; 0 + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype rpc-buffer-pair (basic) + "A double buffer of RPC buffers. This is used to let the game queue up data in one buffer while + the other is being read/written by overlord." + ((buffer rpc-buffer 2 :offset-assert 4) ;; guessed by decompiler + (current rpc-buffer :offset-assert 12) ;; guessed by decompiler + (last-recv-buffer pointer :offset-assert 16) ;; guessed by decompiler + (rpc-port int32 :offset-assert 20) + ) + :method-count-assert 15 + :size-assert #x18 + :flag-assert #xf00000018 + (:methods + (new (symbol type uint uint int) rpc-buffer-pair) ;; 0 + (call "Start an async RPC call. If there is already one in progress, stall and wait for it to finish." (rpc-buffer-pair uint pointer uint) int) ;; 9 + (add-element "Add an element. If the buffer is full, flush it!" (rpc-buffer-pair) pointer) ;; 10 + (decrement-elt-used "Remove the most recently queued element." (rpc-buffer-pair) int) ;; 11 + (sync "Wait for an in-progress rpc to finish." (rpc-buffer-pair symbol) int) ;; 12 + (check-busy "Check to see if an rpc is in progress." (rpc-buffer-pair) symbol) ;; 13 + (pop-last-received "Pop the response from the most recently completed rpc call." (rpc-buffer-pair) pointer) ;; 14 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; path-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype path-control (basic) + ((flags path-control-flag :offset-assert 4) ;; guessed by decompiler + (name symbol :offset-assert 8) ;; guessed by decompiler + (process process-drawable :offset-assert 12) ;; guessed by decompiler + (distmap uint32 :offset-assert 16) + (curve curve :inline :offset-assert 20) + (num-cverts int32 :offset-assert 24) + (cverts uint32 :offset-assert 20) + ) + :method-count-assert 33 + :size-assert #x28 + :flag-assert #x2100000028 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process symbol float entity symbol) _type_) + (path-control-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (path-control-method-10 () none) ;; 10 ;; (get-point-in-path! (_type_ vector float symbol) vector) + (path-control-method-11 () none) ;; 11 ;; (get-random-point (_type_ vector) vector) + (path-control-method-12 () none) ;; 12 ;; (path-control-method-12 (_type_ vector float float) vector) + (path-control-method-13 () none) ;; 13 ;; (displacement-between-two-points-normalized! (_type_ vector float) vector) + (path-control-method-14 () none) ;; 14 ;; (get-point-at-percent-along-path! (_type_ vector float symbol) vector) + (path-control-method-15 () none) ;; 15 ;; (path-control-method-15 (_type_ vector float float) vector) + (path-control-method-16 () none) ;; 16 ;; (displacement-between-points-at-percent-normalized! (_type_ vector float) vector) + (path-control-method-17 () none) ;; 17 ;; (get-num-segments (_type_) float) + (path-control-method-18 () none) ;; 18 ;; (total-distance (_type_) float) + (path-control-method-19 () none) ;; 19 ;; (get-num-verts (_type_) int) + (path-control-method-20 () none) ;; 20 ;; (segement-duration->path-duration (_type_ float) float) + (path-control-method-21 () none) ;; 21 ;; (path-duration->segment-duration (_type_ float) float) + (path-control-method-22 () none) ;; 22 ;; (path-control-method-22 (_type_ vector) float) + (path-control-method-23 () none) ;; 23 ;; (path-control-method-23 (_type_ vector) float) + (path-control-method-24 () none) ;; 24 ;; (path-control-method-24 (_type_ vector) float) + (path-control-method-25 () none) ;; 25 ;; (path-control-method-25 (_type_ vector) float) + (path-control-method-26 () none) ;; 26 ;; (path-control-method-26 (_type_ float float) float) + (path-control-method-27 () none) ;; 27 ;; (path-control-method-27 (_type_ vector) vector) + (path-control-method-28 () none) ;; 28 ;; (path-control-method-28 (_type_ vector vector symbol) float) + (path-control-method-29 () none) ;; 29 ;; (path-control-method-29 (_type_ vector int float) float) + (path-control-method-30 () none) ;; 30 ;; (should-display-marks? (_type_) symbol) + (path-control-method-31 () none) ;; 31 ;; (displacement-between-two-points! (_type_ vector float float) vector) + (path-control-method-32 () none) ;; 32 + ) + ) +|# + +#| +(deftype curve-control (path-control) + () + :method-count-assert 35 + :size-assert #x28 + :flag-assert #x2300000028 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process symbol float) _type_) + (curve-control-method-33 () none) ;; 33 + (curve-control-method-34 () none) ;; 34 + ) + ) +|# + +;; (define-extern get-knot-name function) +;; (define-extern get-distmap-name function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-mesh-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype nav-mesh-work-debug (structure) + "Debug outputs for the nav-mesh assembly functions" + ((debug-vec1 vector :inline :offset-assert 0) + (debug-vec2 vector :inline :offset-assert 16) + (debug-vec3 vector :inline :offset-assert 32) + (debug-vec4 vector :inline :offset-assert 48) + (debug-vec5 vector :inline :offset-assert 64) + (debug-vec6 vector :inline :offset-assert 80) + (debug-vec7 vector :inline :offset-assert 96) + (debug-vec8 vector :inline :offset-assert 112) + (debug-vec9 vector :inline :offset-assert 128) + (debug-vec10 vector :inline :offset-assert 144) + (debug-vec11 vector :inline :offset-assert 160) + (debug-vec12 vector :inline :offset-assert 176) + (sphere-array sphere 16 :inline :offset-assert 192) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c0 + :flag-assert #x9000001c0 + ) + +(declare-type nav-mesh basic) +(declare-type nav-poly structure) +(deftype nav-mesh-work (structure) + "Workspace for nav-mesh processing functions." + ((vert0-table int8 4 :offset-assert 0) ;; guessed by decompiler + (vert1-table int8 4 :offset-assert 4) ;; guessed by decompiler + (edge-mask-table uint8 3 :offset-assert 8) ;; guessed by decompiler + (pad0 uint32 :offset-assert 12) + (deg-to-rad float :offset-assert 16) + (rad-to-deg float :offset-assert 20) + (nav-poly-min-dist float :offset-assert 24) + (nav-poly-epsilon float :offset-assert 28) + (sphere-array sphere 16 :inline :offset-assert 32) ;; guessed by decompiler + (debug nav-mesh-work-debug :offset-assert 288) + (work-struct-in-scratch int8 :offset-assert 292) + (mesh-struct-in-scratch int8 :offset-assert 293) + (polys-in-scratch int8 :offset-assert 294) + (mesh nav-mesh :offset-assert 296) ;; guessed by decompiler + (nav basic :offset-assert 300) + (poly0 nav-poly :offset-assert 304) ;; guessed by decompiler + (poly1 nav-poly :offset-assert 308) ;; guessed by decompiler + (poly-id int32 :offset-assert 312) + ) + :method-count-assert 9 + :size-assert #x13c + :flag-assert #x90000013c + ) + +(deftype nav-mesh-link (structure) + "Link between two different meshes" + ((id uint32 :offset-assert 0) + (dest-mesh-id uint32 :offset-assert 4) + (src-link-poly-id uint8 :offset-assert 8) + (src-switch-poly-id uint8 :offset-assert 9) + (dest-link-poly-id uint8 :offset-assert 10) + (dest-switch-poly-id uint8 :offset-assert 11) + (dest-mesh nav-mesh :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(defenum nav-mesh-link-search-node-status + :type uint8 + :bitfield #t + (open 0) + (closed 1) + ) + +(deftype nav-mesh-link-search-node (structure) + ((pprev uint32 :offset-assert 0) + (next nav-mesh-link-search-node :offset-assert 4) + (parent nav-mesh-link-search-node :offset-assert 8) + (link nav-mesh-link :offset-assert 12) + (cost-to-start float :offset-assert 16) + (cost-to-end float :offset-assert 20) + (status nav-mesh-link-search-node-status :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ;; field nav-mesh-link-search-node-status is likely a value type. + ) + +(deftype nav-poly (structure) + "Polygon within a nav-mesh. Can be a tri or quad. + Based on the implementation of point-poly-intersection?, these should likely be convex." + ((data uint8 64 :offset-assert 0 :score -1) ;; guessed by decompiler + (vertex vector 4 :inline :offset 0) ;; guessed by decompiler + (vertex0 vector :inline :offset 0) + (vertex1 vector :inline :offset 16) + (vertex2 vector :inline :offset 32) + (vertex3 vector :inline :offset 48) + (id uint8 :offset 12) + (pat uint8 :offset 13) + (vertex-count uint8 :offset 14) + (link uint8 :offset 15) + (adj-poly uint8 4 :offset 28) ;; guessed by decompiler + (adj-poly0 uint8 :offset 28) + (adj-poly1 uint8 :offset 29) + (adj-poly2 uint8 :offset 30) + (adj-poly3 uint8 :offset 31) + (min-y float :offset 44) + (max-y float :offset 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype nav-vertex (vector) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype nav-sphere (structure) + ((trans sphere :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype nav-ray (structure) + ((current-pos vector :inline :offset-assert 0) + (dir vector :inline :offset-assert 16) + (dest-pos vector :inline :offset-assert 32) + (current-mesh basic :offset-assert 48) + (current-poly nav-poly :offset-assert 52) + (next-mesh basic :offset-assert 56) + (next-poly nav-poly :offset-assert 60) + (len meters :offset-assert 64) + (last-edge int8 :offset-assert 68) + (ignore uint8 :offset-assert 69) + (terminated symbol :offset-assert 72) ;; guessed by decompiler + (reached-dest symbol :offset-assert 76) ;; guessed by decompiler + (hit-boundary symbol :offset-assert 80) ;; guessed by decompiler + (hit-gap symbol :offset-assert 84) ;; guessed by decompiler + (cross-meshes basic :offset-assert 88) + ) + :method-count-assert 13 + :size-assert #x5c + :flag-assert #xd0000005c + (:methods + (nav-ray-method-9 () none) ;; 9 + (nav-ray-method-10 () none) ;; 10 + (nav-ray-method-11 () none) ;; 11 + (nav-ray-method-12 () none) ;; 12 + ) + ) + +(deftype nav-route-portal (structure) + ((vertex nav-vertex 2 :inline :offset-assert 0) ;; guessed by decompiler + (next-poly nav-poly :offset-assert 32) + (edge-index int8 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x25 + :flag-assert #x900000025 + ) + +(deftype nav-find-poly-parms (structure) + ((point vector :inline :offset-assert 0) + (y-threshold float :offset-assert 16) + (ignore uint8 :offset-assert 20) + (poly nav-poly :offset-assert 24) + (dist float :offset-assert 28) + (point-inside? symbol :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) + +(deftype clamp-travel-vector-to-mesh-return-info (structure) + ((found-boundary symbol :offset-assert 0) ;; guessed by decompiler + (intersection vector :inline :offset-assert 16) + (boundary-normal vector :inline :offset-assert 32) + (prev-normal vector :inline :offset-assert 48) + (next-normal vector :inline :offset-assert 64) + (poly nav-poly :offset-assert 80) + (mesh basic :offset-assert 84) + (gap-poly nav-poly :offset-assert 88) + (edge int8 :offset-assert 92) + (ignore uint8 :offset-assert 93) + (vert-prev vector :inline :offset-assert 96) + (vert-0 vector :inline :offset-assert 112) + (vert-1 vector :inline :offset-assert 128) + (vert-next vector :inline :offset-assert 144) + ) + :method-count-assert 11 + :size-assert #xa0 + :flag-assert #xb000000a0 + (:methods + (clamp-travel-vector-to-mesh-return-info-method-9 () none) ;; 9 + (clamp-travel-vector-to-mesh-return-info-method-10 () none) ;; 10 + ) + ) + +#| +(deftype nav-find-corner-portal-params (structure) + ((start-poly nav-poly :offset-assert 0) + (target-poly nav-poly :offset-assert 4) + (corner-poly nav-poly :offset-assert 8) + (start-pos vector :inline :offset-assert 16) + (target-pos vector :inline :offset-assert 32) + (corner-verts UNKNOWN 2 :offset-assert 48) + (vert-select int8 :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x51 + :flag-assert #x900000051 + ) +|# + +(defenum nav-mesh-flag + :type uint8 + :bitfield #t + (water 0) + (dummy 1) + ) + +(declare-type grid-hash basic) +(declare-type sphere-hash grid-hash) +(deftype nav-mesh (basic) + ((work nav-mesh-work :offset-assert 4) + (poly-array (inline-array nav-poly) :offset-assert 8) ;; guessed by decompiler + (static-sphere-count uint8 :offset-assert 12) + (poly-count uint8 :offset-assert 13) + (nav-control-count uint8 :offset-assert 14) + (max-nav-control-count uint8 :offset-assert 15) + (route (pointer uint8) :offset-assert 16) ;; guessed by decompiler + (poly-hash grid-hash :offset-assert 20) ;; guessed by decompiler + (nav-control-array (inline-array nav-control) :offset-assert 24) ;; guessed by decompiler + (sphere-hash sphere-hash :offset-assert 28) ;; guessed by decompiler + (static-sphere (inline-array sphere) :offset-assert 32) ;; guessed by decompiler + (user-list engine :offset-assert 36) ;; guessed by decompiler + (next-nav-mesh nav-mesh :offset-assert 40) ;; guessed by decompiler + (prev-nav-mesh nav-mesh :offset-assert 44) ;; guessed by decompiler + (bounds sphere :inline :offset-assert 48) + (origin vector :inline :offset 48) + (entity entity :offset-assert 64) ;; guessed by decompiler + (link-array (inline-array nav-mesh-link) :offset-assert 68) ;; guessed by decompiler + (link-count uint8 :offset-assert 72) + (flags nav-mesh-flag :offset-assert 73) + (pad1 uint8 2 :offset-assert 74) ;; guessed by decompiler + (nearest-y-threshold meters :offset-assert 76) + (water-max-height meters :offset-assert 80) + (link-search-node-array uint32 :offset-assert 84) + (pad2 uint32 6 :offset-assert 88) ;; guessed by decompiler + ) + :method-count-assert 47 + :size-assert #x70 + :flag-assert #x2f00000070 + ;; field nav-mesh-flag is likely a value type. + (:methods + (nav-mesh-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (nav-mesh-method-10 () none) ;; 10 ;; (nav-mesh-method-10 (_type_ vector vector nav-poly) nav-poly) + (nav-mesh-method-11 () none) ;; 11 ;; (nav-mesh-method-11 (_type_ vector) nav-poly) + (nav-mesh-method-12 () none) ;; 12 ;; (nav-mesh-method-12 (_type_ vector float nav-poly) symbol) + (nav-mesh-method-13 () none) ;; 13 ;; (poly-centroid (_type_ nav-poly vector) vector) + (nav-mesh-method-14 () none) ;; 14 ;; (poly-centroid-local (_type_ nav-poly vector) vector) + (nav-mesh-method-15 () none) ;; 15 ;; (lookup-poly-on-route-to-target (_type_ nav-poly nav-poly) nav-poly) + (nav-mesh-method-16 () none) ;; 16 ;; (get-route-portal (_type_ nav-poly nav-poly nav-route-portal) (inline-array nav-vertex)) + (nav-mesh-method-17 () none) ;; 17 ;; (initialize-mesh! (_type_) none) + (nav-mesh-method-18 () none) ;; 18 ;; (advance-ray-to-nearest-poly-edge-or-dest! (_type_ nav-ray) none) + (nav-mesh-method-19 () none) ;; 19 ;; (try-move-along-ray (_type_ nav-poly vector vector float) meters) + (nav-mesh-method-20 () none) ;; 20 ;; (clamp-vector-to-mesh-cross-gaps (_type_ vector nav-poly vector float symbol clamp-travel-vector-to-mesh-return-info) none) + (nav-mesh-method-21 () none) ;; 21 ;; (clamp-vector-to-mesh-no-gaps (_type_ vector nav-poly vector clamp-travel-vector-to-mesh-return-info) none) + (nav-mesh-method-22 () none) ;; 22 ;; (set-normals-from-adjacent-bounds (_type_ clamp-travel-vector-to-mesh-return-info) none) + (nav-mesh-method-23 () none) ;; 23 ;; (find-adjacent-bounds-one (_type_ vector nav-poly int int) none) + (nav-mesh-method-24 () none) ;; 24 ;; (compute-bounding-box-from-vertices (_type_ vector vector) none) + (nav-mesh-method-25 () none) ;; 25 ;; (init-from-entity (_type_ entity-nav-mesh) none) + (nav-mesh-method-26 () none) ;; 26 ;; (handle-birth (_type_) none) + (nav-mesh-method-27 () none) ;; 27 ;; (handle-kill (_type_) none) + (nav-mesh-method-28 () none) ;; 28 ;; (update-navigation (_type_) none) + (nav-mesh-method-29 () none) ;; 29 ;; (new-nav-control (_type_) nav-control) + (nav-mesh-method-30 () none) ;; 30 ;; (remove-nav-control (_type_ nav-control) none) + (nav-mesh-method-31 () none) ;; 31 ;; (add-process-drawable-to-nav-mesh (_type_ process-drawable symbol) none) + (nav-mesh-method-32 () none) ;; 32 ;; (remove-process-drawable (_type_ process-drawable) none) + (nav-mesh-method-33 () none) ;; 33 ;; (change-to (_type_ process-drawable) none) + (nav-mesh-method-34 () none) ;; 34 ;; (link-by-id (_type_ uint) symbol) + (nav-mesh-method-35 () none) ;; 35 ;; (unlink-by-id (_type_ uint) symbol) + (nav-mesh-method-36 () none) ;; 36 ;; (nav-mesh-method-36 (_type_ vector vector float) float) + (nav-mesh-method-37 () none) ;; 37 ;; (nav-mesh-method-37 (_type_ vector vector float) float) + (nav-mesh-method-38 () none) ;; 38 ;; (nav-mesh-method-38 (_type_ nav-poly) none) + (nav-mesh-method-39 () none) ;; 39 ;; (debug-draw-poly (_type_ nav-poly rgba) none) + (nav-mesh-method-40 () none) ;; 40 ;; (point-in-poly? (_type_ nav-poly vector) symbol) + (nav-mesh-method-41 () none) ;; 41 ;; (nav-mesh-method-41 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector) + (nav-mesh-method-42 () none) ;; 42 ;; (closest-point-on-boundary (_type_ nav-poly vector vector) vector) + (nav-mesh-method-43 () none) ;; 43 ;; (project-point-onto-plane-of-poly-local (_type_ nav-poly vector vector vector) none) + (nav-mesh-method-44 () none) ;; 44 ;; (project-point-into-poly-2d (_type_ nav-poly vector vector) vector) + (nav-mesh-method-45 () none) ;; 45 ;; (nav-mesh-method-45 (_type_ nav-poly) nav-poly) + (nav-mesh-method-46 () none) ;; 46 ;; (nav-mesh-method-46 (_type_ nav-poly) nav-poly) + ) + ) + +(deftype nav-location (structure) + ((nav-mesh basic :offset-assert 0) + (nav-poly nav-poly :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + + +(define-extern vector-normalize-unity! "Normalize a vector (xyz only) in place." (function vector vector)) +(define-extern vector-normalize-unity-copy! "Normalize a vector (xyz only)" (function vector vector vector)) +(define-extern debug-validate-current-poly "Not implemented." (function symbol)) +(define-extern point-poly-intersection? "Check if a point is inside a poly." (function nav-mesh vector int (inline-array vector) symbol)) +(define-extern nav-sphere-from-cam "Print out a SPHEREM from the current camera position, possibly used by their level-building tool." (function none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-control-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype check-vector-collision-with-nav-spheres-info (structure) + ((u float :offset-assert 0) + (intersect vector :inline :offset-assert 16) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype nav-gap-info (structure) + ((dest vector :inline :offset-assert 0) + (poly nav-poly :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype nav-avoid-spheres-params (structure) + ((current-pos vector :inline :offset-assert 0) + (travel vector :inline :offset-assert 16) + (pref-dir vector :inline :offset-assert 32) + (out-travel vector 2 :inline :offset-assert 48) ;; guessed by decompiler + (closest-sphere-dist2 float :offset-assert 80) + (avoiding-sphere? symbol :offset-assert 84) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype nav-callback-info (structure) + ((callback-count int32 :offset-assert 0) + (callback-array (function object nav-control none) 10 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(defenum nav-state-flag + :type uint32 + :bitfield #t + (display-marks 0) + (recovery-mode 1) + (initialized 2) + (debug 3) + (directional-mode 4) + (trapped-by-sphere 5) + (target-poly-dirty 6) + (blocked 7) + (in-target-poly 8) + (at-target 9) + (target-inside 10) + (in-mesh 11) + (avoiding-sphere 12) + (touching-sphere 13) + (at-gap 14) + (user-position 15) + ) + +(defenum nav-control-flag + :type uint32 + :bitfield #t + (display-marks 0) + (debug 1) + (no-redirect-in-clamp 2) + (limit-rotation-rate 3) + (update-heading-from-facing 4) + (use-momentum 5) + (momentum-ignore-heading 6) + (output-sphere-hash 7) + (kernel-run 8) + ) + +(deftype nav-state (structure) + ((flags nav-state-flag :offset-assert 0) + (nav nav-control :offset-assert 4) ;; guessed by decompiler + (user-poly nav-poly :offset-assert 8) + (mesh nav-mesh :offset-assert 12) ;; guessed by decompiler + (current-poly nav-poly :offset-assert 16) + (virtual-current-poly nav-poly :offset-assert 20) + (next-poly nav-poly :offset-assert 24) + (target-poly nav-poly :offset-assert 28) + (rotation-rate float :offset-assert 32) + (speed meters :offset-assert 36) + (prev-speed meters :offset-assert 40) + (pad0 uint32 1 :offset-assert 44) ;; guessed by decompiler + (travel vector :inline :offset-assert 48) + (target-pos vector :inline :offset-assert 64) + (current-pos vector :inline :offset-assert 80) + (current-pos-local vector :inline :offset-assert 96) + (virtual-current-pos-local vector :inline :offset-assert 112) + (velocity vector :inline :offset-assert 128) + (heading vector :inline :offset-assert 144) + (target-dir vector :inline :offset-assert 160) + (accel vector :inline :offset 160) + (user-position vector :inline :offset 112) + (normal vector :inline :offset 112) + ) + :method-count-assert 57 + :size-assert #xb0 + :flag-assert #x39000000b0 + (:methods + (nav-state-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (nav-state-method-10 () none) ;; 10 ;; (nav-state-method-10 (_type_) none) + (nav-state-method-11 () none) ;; 11 ;; (plan-over-pat1-polys-using-route (_type_ nav-gap-info) symbol) + (nav-state-method-12 () none) ;; 12 ;; (get-velocity (_type_ vector) vector) + (nav-state-method-13 () none) ;; 13 ;; (get-travel (_type_ vector) vector) + (nav-state-method-14 () none) ;; 14 ;; (get-heading (_type_ vector) vector) + (nav-state-method-15 () none) ;; 15 ;; (get-target-pos (_type_ vector) vector) + (nav-state-method-16 () none) ;; 16 ;; (get-speed (_type_) meters) + (nav-state-method-17 () none) ;; 17 ;; (get-rotation-rate (_type_) float) + (nav-state-method-18 () none) ;; 18 ;; (try-projecting-to-current-poly (_type_ vector vector vector) symbol) + (nav-state-method-19 () none) ;; 19 ;; (get-current-poly (_type_) nav-poly) + (nav-state-method-20 () none) ;; 20 ;; (copy-nav-state! (_type_ (pointer nav-state)) none) + (nav-state-method-21 () none) ;; 21 ;; (nav-state-method-21 () none) + (nav-state-method-22 () none) ;; 22 ;; (nav-state-method-22 () none) + (nav-state-method-23 () none) ;; 23 ;; (nav-state-method-23 () none) + (nav-state-method-24 () none) ;; 24 ;; (turn-and-navigate-to-destination (_type_) none) + (nav-state-method-25 () none) ;; 25 ;; (navigate-using-route-portals-wrapper (_type_) none) + (nav-state-method-26 () none) ;; 26 ;; (navigate-using-best-dir-recompute-avoid-spheres-1-wrapper (_type_) none) + (nav-state-method-27 () none) ;; 27 ;; (navigate-within-poly-wrapper (_type_) none) + (nav-state-method-28 () none) ;; 28 ;; (compute-travel-speed (_type_) none) + (nav-state-method-29 () none) ;; 29 ;; (nav-state-method-29 (_type_) none) + (nav-state-method-30 () none) ;; 30 ;; (nav-state-method-30 (_type_) none) + (nav-state-method-31 () none) ;; 31 ;; (navigate-using-best-dir-recompute-avoid-spheres-2 (_type_) none) + (nav-state-method-32 () none) ;; 32 ;; (update-travel-dir-from-spheres (_type_) none) + (nav-state-method-33 () none) ;; 33 ;; (compute-speed-simple (_type_) none) + (nav-state-method-34 () none) ;; 34 ;; (navigate-v1! (_type_) none) + (nav-state-method-35 () none) ;; 35 ;; (reset-target! (_type_) none) + (nav-state-method-36 () none) ;; 36 ;; (add-offset-to-target! (_type_ vector) none) + (nav-state-method-37 () none) ;; 37 ;; (navigate-v2! (_type_) none) + (nav-state-method-38 () none) ;; 38 ;; (set-current-poly! (_type_ nav-poly) none) + (nav-state-method-39 () none) ;; 39 ;; (nav-state-method-39 (_type_) symbol) + (nav-state-method-40 () none) ;; 40 ;; (do-navigation-to-destination (_type_ vector) none) + (nav-state-method-41 () none) ;; 41 ;; (clamp-vector-to-mesh-cross-gaps (_type_ vector) symbol) + (nav-state-method-42 () none) ;; 42 ;; (set-target-pos! (_type_ vector) none) + (nav-state-method-43 () none) ;; 43 ;; (set-virtual-cur-pos! (_type_ vector) none) + (nav-state-method-44 () none) ;; 44 ;; (set-travel! (_type_ vector) none) + (nav-state-method-45 () none) ;; 45 ;; (set-velocity! (_type_ vector) none) + (nav-state-method-46 () none) ;; 46 ;; (set-heading! (_type_ vector) none) + (nav-state-method-47 () none) ;; 47 ;; (set-speed! (_type_ meters) none) + (nav-state-method-48 () none) ;; 48 ;; (reset! (_type_ nav-control) none) + (nav-state-method-49 () none) ;; 49 ;; (nav-state-method-49 () none) + (nav-state-method-50 () none) ;; 50 ;; (navigate-using-best-dir-use-existing-avoid-spheres (_type_ nav-avoid-spheres-params) none) + (nav-state-method-51 () none) ;; 51 ;; (nav-state-method-51 (_type_) none) + (nav-state-method-52 () none) ;; 52 ;; (navigate-using-route-portals (_type_) none) + (nav-state-method-53 () none) ;; 53 ;; (navigate-using-best-dir-recompute-avoid-spheres-1 (_type_) none) + (nav-state-method-54 () none) ;; 54 ;; (navigate-within-poly (_type_) none) + (nav-state-method-55 () none) ;; 55 ;; (clamp-travel-vector (_type_) none) + (nav-state-method-56 () none) ;; 56 + ) + ) + +(deftype nav-control (structure) + ((flags nav-control-flag :offset-assert 0) + (callback-info nav-callback-info :offset-assert 4) + (process process :offset-assert 8) ;; guessed by decompiler + (pad0 uint32 :offset-assert 12) + (shape collide-shape :offset-assert 16) ;; guessed by decompiler + (nearest-y-threshold meters :offset-assert 20) + (nav-cull-radius meters :offset-assert 24) + (sec-per-frame float :offset-assert 28) + (target-speed meters :offset-assert 32) + (acceleration meters :offset-assert 36) + (turning-acceleration meters :offset-assert 40) + (max-rotation-rate float :offset-assert 44) + (speed-scale float :offset-assert 48) + (sphere-count int32 :offset-assert 52) + (sphere-array (inline-array sphere) :offset-assert 56) ;; guessed by decompiler + (root-sphere-id uint8 :offset-assert 60) + (sphere-mask uint8 :offset-assert 61) + (pad1 uint8 2 :offset-assert 62) ;; guessed by decompiler + (sphere-id-array uint8 16 :offset-assert 64) ;; guessed by decompiler + ;;(UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + (extra-nav-sphere vector :inline :offset-assert 80) + (root-nav-sphere vector :inline :offset-assert 96) + (state nav-state :inline :offset-assert 112) + (mesh basic :offset 124) + ) + :method-count-assert 48 + :size-assert #x120 + :flag-assert #x3000000120 + (:methods + (nav-control-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (nav-control-method-10 () none) ;; 10 ;; (point-in-bsphere? (_type_ vector) symbol) + (nav-control-method-11 () none) ;; 11 ;; (find-poly-containing-point-1 (_type_ vector) nav-poly) + (nav-control-method-12 () none) ;; 12 ;; (closest-point-on-mesh (_type_ vector vector nav-poly) nav-poly) + (nav-control-method-13 () none) ;; 13 ;; (find-nearest-poly-to-point (_type_ vector) nav-poly) + (nav-control-method-14 () none) ;; 14 ;; (project-point-onto-plane-of-poly (_type_ nav-poly vector vector vector) none) + (nav-control-method-15 () none) ;; 15 ;; (find-poly-containing-point-2 (_type_ vector) nav-poly) + (nav-control-method-16 () none) ;; 16 ;; (is-above-poly-max-height? (_type_ vector float) symbol) + (nav-control-method-17 () none) ;; 17 ;; (is-in-mesh? (_type_ vector float) symbol) + (nav-control-method-18 () none) ;; 18 ;; (avoid-spheres-1! (_type_ nav-avoid-spheres-params) symbol) + (nav-control-method-19 () none) ;; 19 ;; (avoid-spheres-2! (_type_ nav-avoid-spheres-params) symbol) + (nav-control-method-20 () none) ;; 20 ;; (clamp-vector-to-mesh-cross-gaps (_type_ vector nav-poly vector float symbol clamp-travel-vector-to-mesh-return-info) none) + (nav-control-method-21 () none) ;; 21 ;; (clamp-vector-to-mesh-no-gaps (_type_ vector nav-poly vector clamp-travel-vector-to-mesh-return-info) none) + (nav-control-method-22 () none) ;; 22 ;; (find-first-sphere-and-update-avoid-params (_type_ vector nav-avoid-spheres-params) float) + (nav-control-method-23 () none) ;; 23 ;; (set-spheres-from-nav-ids (_type_) none) + (nav-control-method-24 () none) ;; 24 ;; (add-root-sphere-to-hash! (_type_ vector int) symbol) + (nav-control-method-25 () none) ;; 25 ;; (get-max-rotation-rate (_type_) float) + (nav-control-method-26 () none) ;; 26 ;; (get-sphere-mask (_type_) uint) + (nav-control-method-27 () none) ;; 27 ;; (get-target-speed (_type_) meters) + (nav-control-method-28 () none) ;; 28 ;; (enable-extra-sphere! (_type_) none) + (nav-control-method-29 () none) ;; 29 ;; (disable-extra-sphere! (_type_) none) + (nav-control-method-30 () none) ;; 30 ;; (copy-extra-nav-sphere! (_type_ sphere) none) + (nav-control-method-31 () none) ;; 31 ;; (set-extra-nav-sphere-xyz! (_type_ sphere) none) + (nav-control-method-32 () none) ;; 32 ;; (set-extra-nav-sphere-radius! (_type_ float) none) + (nav-control-method-33 () none) ;; 33 ;; (set-nearest-y-thres! (_type_ float) none) + (nav-control-method-34 () none) ;; 34 ;; (set-nav-cull-radius! (_type_ meters) none) + (nav-control-method-35 () none) ;; 35 ;; (set-speed-scale! (_type_ float) none) + (nav-control-method-36 () none) ;; 36 ;; (set-target-speed! (_type_ meters) none) + (nav-control-method-37 () none) ;; 37 ;; (set-acceleration! (_type_ meters) none) + (nav-control-method-38 () none) ;; 38 ;; (set-turning-acceleration! (_type_ meters) none) + (nav-control-method-39 () none) ;; 39 ;; (set-max-rotation-rate! (_type_ float) none) + (nav-control-method-40 () none) ;; 40 ;; (set-sphere-mask! (_type_ uint) none) + (nav-control-method-41 () none) ;; 41 ;; (remove! (_type_) none) + (nav-control-method-42 () none) ;; 42 ;; (init! (_type_ collide-shape) none) + (nav-control-method-43 () none) ;; 43 ;; (display-marks? (_type_) symbol) + (nav-control-method-44 () none) ;; 44 ;; (nav-control-method-44 () none) + (nav-control-method-45 () none) ;; 45 ;; (find-first-sphere-intersecting-ray (_type_ vector vector vector) sphere) + (nav-control-method-46 () none) ;; 46 ;; (find-sphere-ids-from-sphere-hash (_type_ symbol) none) + (nav-control-method-47 () none) ;; 47 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; spatial-hash-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type grid-hash-work structure) + +(deftype grid-hash-word (uint8) + () + :flag-assert #x900000001 + ) + +(deftype grid-hash-box (structure) + "Integer coordinate box for the spatial hash grid." + ((min int8 3 :offset-assert 0) ;; guessed by decompiler + (max int8 3 :offset-assert 3) ;; guessed by decompiler + ) + :pack-me + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) + +(deftype grid-hash (basic) + "The grid-hash is the basic 3D grid used in the spatial-hash, which is used for runtime + actor collision dectection by hashing actor spheres into grid cells, and avoiding the typical + O(n^2) 'check everybody against everybody' collision loop." + ((work grid-hash-work :offset-assert 4) ;; guessed by decompiler + (search-box grid-hash-box :inline :offset-assert 8) + (bucket-size int16 :offset-assert 14) + (axis-scale float 3 :offset-assert 16) ;; guessed by decompiler + (dimension-array int8 3 :offset-assert 28) ;; guessed by decompiler + (vertical-cell-count int8 :offset-assert 31) + (bucket-array (pointer grid-hash-word) :offset-assert 32) ;; guessed by decompiler + (box-min float 3 :offset-assert 36) ;; guessed by decompiler + (box-max float 3 :offset-assert 48) ;; guessed by decompiler + (object-count int16 :offset-assert 60) + (bucket-count int16 :offset-assert 62) + (min-cell-size float :offset-assert 64) + (bucket-memory-size int32 :offset-assert 68) + (mem-bucket-array (pointer grid-hash-word) :offset-assert 72) ;; guessed by decompiler + (spr-bucket-array (pointer grid-hash-word) :offset-assert 76) ;; guessed by decompiler + (debug-draw symbol :offset-assert 80) ;; guessed by decompiler + (use-scratch-ram symbol :offset-assert 84) ;; guessed by decompiler + ) + :method-count-assert 27 + :size-assert #x58 + :flag-assert #x1b00000058 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (grid-hash-method-9 () none) ;; 9 ;; (update-grid-for-objects-in-box (_type_ int vector vector) none) + (grid-hash-method-10 () none) ;; 10 ;; (clear-bucket-array (_type_) none) + (grid-hash-method-11 () none) ;; 11 ;; (setup-search-box (_type_ int vector vector vector) none) + (grid-hash-method-12 () none) ;; 12 ;; (search-for-point (_type_ vector) (pointer uint8)) + (grid-hash-method-13 () none) ;; 13 ;; (search-for-sphere (_type_ vector float) (pointer uint8)) + (grid-hash-method-14 () none) ;; 14 ;; (draw (_type_ rgba) none) + (grid-hash-method-15 () none) ;; 15 ;; (dump-grid-info (_type_) none) + (grid-hash-method-16 () none) ;; 16 ;; (verify-bits-in-bucket (_type_ grid-hash-box grid-hash-box) none) + (grid-hash-method-17 () none) ;; 17 ;; (box-of-everything (_type_ object grid-hash-box) none) + (grid-hash-method-18 () none) ;; 18 ;; (grid-hash-method-18 (_type_ grid-hash-box int) none) + (grid-hash-method-19 () none) ;; 19 ;; (grid-hash-method-19 (_type_ grid-hash-box int) none) + (grid-hash-method-20 () none) ;; 20 ;; (do-search! (_type_ grid-hash-box (pointer uint8)) none) + (grid-hash-method-21 () none) ;; 21 ;; (set-up-box (_type_ grid-hash-box vector vector) none) + (grid-hash-method-22 () none) ;; 22 ;; (sphere-to-grid-box (_type_ grid-hash-box sphere) none) + (grid-hash-method-23 () none) ;; 23 ;; (line-sphere-to-grid-box (_type_ grid-hash-box vector vector float) none) + (grid-hash-method-24 () none) ;; 24 ;; (update-grid (_type_) none) + (grid-hash-method-25 () none) ;; 25 + (grid-hash-method-26 () none) ;; 26 + ) + ) + +(deftype find-nav-sphere-ids-params (structure) + ((bsphere sphere :inline :offset-assert 0) + (y-threshold float :offset-assert 16) + (len int16 :offset-assert 20) + (max-len int16 :offset-assert 22) + (mask uint8 :offset-assert 24) + (array (pointer uint8) :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype nav-stack-type (structure) + "nav-mesh::12" + ((nav-id-params find-nav-sphere-ids-params :inline :offset 0) + (vec1 vector :inline :offset 32) + (vec2 vector :inline :offset 48) + (vec3 vector :inline :offset 64) + (byte01 int8 :offset 64) + (byte02 int8 :offset 65) + (byte03 int8 :offset 66) + (byte04 int8 :offset 67) + (vec4 vector :inline :offset 80) + (vec5 vector :inline :offset 96) + (vec6 vector :inline :offset 112) + (byte-arr uint8 20 :offset 128) + ) + ) + +(deftype nav-stack-type2 (structure) + "nav-mesh::25" + ((float00 float :offset 0) + (float01 float :offset 8) + (word00 int32 :offset 16) + (word01 int32 :offset 20) + (word02 int32 :offset 24) + (word03 int32 :offset 28) + ) + ) + +(deftype sphere-hash (grid-hash) + "An extension of grid hash that holds spheres inside of the grid." + ((sphere-array (inline-array sphere) :offset-assert 88) ;; guessed by decompiler + (max-object-count int16 :offset-assert 92) + (pad int16 :offset-assert 94) + (mem-sphere-array uint32 :offset-assert 96) + (spr-sphere-array uint32 :offset-assert 100) + ) + :method-count-assert 36 + :size-assert #x68 + :flag-assert #x2400000068 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int int) _type_) + (sphere-hash-method-27 () none) ;; 27 ;; (add-a-sphere-with-flag (_type_ vector int) int) + (sphere-hash-method-28 () none) ;; 28 ;; (update-from-spheres (_type_) none) + (sphere-hash-method-29 () none) ;; 29 ;; (sphere-hash-method-29 (_type_ find-nav-sphere-ids-params) none) + (sphere-hash-method-30 () none) ;; 30 ;; (find-nav-sphere-ids (_type_ find-nav-sphere-ids-params int int) symbol) + (sphere-hash-method-31 () none) ;; 31 ;; (add-sphere-with-mask-and-id (_type_ vector vector float int) symbol) + (sphere-hash-method-32 () none) ;; 32 ;; (sphere-hash-method-32 (_type_ sphere int) symbol) + (sphere-hash-method-33 () none) ;; 33 + (sphere-hash-method-34 () none) ;; 34 + (sphere-hash-method-35 () none) ;; 35 + ) + ) + +(deftype hash-object-info (structure) + ((object basic :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype spatial-hash (sphere-hash) + "An extension of sphere-hash that associates an object with each sphere." + ((object-array (inline-array hash-object-info) :offset-assert 104) ;; guessed by decompiler + (mem-object-array (inline-array hash-object-info) :offset-assert 108) ;; guessed by decompiler + (spr-object-array (inline-array hash-object-info) :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 42 + :size-assert #x74 + :flag-assert #x2a00000074 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int int) _type_) + (spatial-hash-method-36 () none) ;; 36 ;; (fill-actor-list-for-sphere (_type_ vector vector float (pointer collide-shape) int int) int) + (spatial-hash-method-37 () none) ;; 37 ;; (fill-actor-list-for-line-sphere (_type_ vector vector float (pointer collide-shape) int int) int) + (spatial-hash-method-38 () none) ;; 38 ;; (fill-actor-list-for-vec+r (_type_ vector (pointer collide-shape)) int) + (spatial-hash-method-39 () none) ;; 39 ;; (spatial-hash-method-39 (_type_ object hash-object-info) int) + (spatial-hash-method-40 () none) ;; 40 + (spatial-hash-method-41 () none) ;; 41 + ) + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; actor-hash-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *actor-list* object) ;; (pointer collide-shape) +;; (define-extern *actor-list-length* object) ;; int + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; fmv-player-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype m2v-caption (structure) + ((text-id uint32 :offset-assert 0) + (start int32 :offset-assert 4) + (end int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype m2v-info (structure) + ((name basic :offset-assert 0) + (sound basic :offset-assert 4) + (commentary-sound basic :offset-assert 8) + (captions basic :offset-assert 12) + (commentary-captions basic :offset-assert 16) + (id uint32 :offset-assert 20) + (idx int8 :offset-assert 24) + (driver uint8 :offset-assert 25) + (driver2 uint8 :offset-assert 26) + (flags uint8 :offset-assert 27) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype fmv-player (process) + ((texture-base-page uint32 :offset-assert 144) + (texture-width uint32 :offset-assert 148) + (gui-id uint32 :offset-assert 152) + (subtitle-change-time uint64 :offset-assert 160) + (start-time uint64 :offset-assert 168) + (fmv-mode uint8 :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb1 + :flag-assert #x14003000b1 + (:methods + (fmv-player-method-9 () none) ;; 9 + (fmv-player-method-10 () none) ;; 10 + (fmv-player-method-11 () none) ;; 11 + (fmv-player-method-12 () none) ;; 12 + (fmv-player-method-13 () none) ;; 13 + (fmv-player-method-14 () none) ;; 14 + (fmv-player-method-15 () none) ;; 15 + (fmv-player-method-16 () none) ;; 16 + (fmv-player-method-17 () none) ;; 17 + (fmv-player-method-18 () none) ;; 18 + (fmv-player-method-19 () none) ;; 19 + ) + ) +|# + +#| +(deftype fmv-display-params (structure) + ((display-mode int32 :offset-assert 0) + (texture-base-page uint32 :offset-assert 4) + (texture-width uint32 :offset-assert 8) + (frame-base-pointer uint32 :offset-assert 12) + (display-width uint32 :offset-assert 16) + (display-height uint32 :offset-assert 20) + (display-dx int32 :offset-assert 24) + (display-dy int32 :offset-assert 28) + (contrast float :offset-assert 32) + (brightness float :offset-assert 36) + (fast-z-clear int32 :offset-assert 40) + (frame-buffer-mask uint32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype fmv-player-params (structure) + ((display-mode fmv-display-params :inline :offset-assert 0) + (file-init basic :offset-assert 48) + (file-read basic :offset-assert 52) + (get-time basic :offset-assert 56) + (video-type int32 :offset-assert 60) + (zoom-mode int32 :offset-assert 64) + (upper-field-first int32 :offset-assert 68) + (buffer-mode int32 :offset-assert 72) + (work-mem uint32 :offset-assert 76) + (work-mem-size uint32 :offset-assert 80) + ) + :method-count-assert 10 + :size-assert #x54 + :flag-assert #xa00000054 + (:methods + (fmv-player-params-method-9 () none) ;; 9 + ) + ) +|# + +;; (define-extern *fmv-player* object) +;; (define-extern *m2v-info* array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; load-dgo ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defenum load-msg-result + :type uint16 + :bitfield #f + (done 0) + (error 1) + (more 2) + (aborted 3) + (invalid 666) + ) + +(deftype load-dgo-msg (structure) + "IOP RPC message for loading a dgo." + ((rsvd uint16 :offset-assert 0) + (result load-msg-result :offset-assert 2) ;; load-msg-result + (b1 pointer :offset-assert 4) ;; guessed by decompiler + (b2 pointer :offset-assert 8) ;; guessed by decompiler + (bt pointer :offset-assert 12) ;; guessed by decompiler + (name uint128 :offset-assert 16) + (address uint32 :offset 4) + (id uint128 :offset-assert 32) + (pad uint32 7) ;; ?? + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) + +(deftype load-chunk-msg (structure) + "IOP RPC message for loading a chunk of a chunked animation" + ((rsvd uint16 :offset-assert 0) + (result uint16 :offset-assert 2) ;; load-msg-result + (address pointer :offset-assert 4) ;; guessed by decompiler + (section uint32 :offset-assert 8) + (maxlen uint32 :offset-assert 12) + (dummy uint32 4 :offset-assert 16) ;; guessed by decompiler + (basename sound-stream-name :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype play-chunk-msg (structure) + "IOP RPC message for playing some streamed audio." + ((rsvd uint16 :offset-assert 0) + (result uint16 :offset-assert 2) + (address pointer :offset-assert 4) ;; guessed by decompiler + (section uint32 :offset-assert 8) + (volume int32 :offset 8) + (maxlen uint32 :offset-assert 12) + (group uint8 :offset 12) + (id uint32 4 :offset-assert 16) ;; guessed by decompiler + (basename sound-stream-name 4 :inline :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xe0 + :flag-assert #x9000000e0 + ) + +(define-extern *load-dgo-rpc* rpc-buffer-pair) +(define-extern *load-str-rpc* rpc-buffer-pair) +(define-extern *play-str-rpc* rpc-buffer-pair) +(define-extern *load-str-lock* symbol) +(define-extern *que-str-lock* symbol) +(define-extern *dgo-name* string) +(define-extern str-load "Send a message to the IOP to start loading a chunk of a .STR file to the EE." (function string int pointer int symbol)) +(define-extern str-load-status "Get the status of the most recent load. + Return 'busy if in progress, 'error if failed, or 'complete. + If 'complete, returns the maxlen value from the IOP." (function (pointer int32) symbol)) +(define-extern str-load-cancel "Cancel a streaming load. Note that this does not actually stop the transfer, so the IOP may continue writing to the buffer." + (function none)) +(define-extern str-play-async "Start playing a streaming audio." (function string sound-id int int none)) +(define-extern str-play-stop "Stop playing streaming audio." (function string sound-id none)) +(define-extern str-play-queue "Queue up streaming data, allowing it to start playing without delay." (function string string string string (pointer uint32) pointer none)) +(define-extern str-ambient-play "Start playing ambient (unused?)." (function string none)) +(define-extern str-ambient-stop "Stop playing ambient (unused?)." (function string none)) +(define-extern str-play-kick "Do an empty RPC on play so the IOP code runs and can update buffers." (function none)) +(define-extern *dgo-time* time-frame) +(define-extern dgo-load-begin "Start a DGO load!" (function string uint128 pointer pointer pointer load-dgo-msg)) +(define-extern dgo-load-get-next "Get the address of the most recently loaded object. #f is there is none. Returns if this is the last by arg0." (function (pointer symbol) pointer)) +(define-extern dgo-load-continue "Inform the IOP that it is safe to start loading the next object." (function pointer pointer pointer load-dgo-msg)) +(define-extern dgo-load-cancel "Abort a DGO load." (function int none)) +(define-extern find-temp-buffer "Unused function to find some temporary leftover space in DMA buffer. + Unused since jak 1, and checks the same buffer twice??" (function int pointer)) +(define-extern dgo-load-link "Start the async linker on a GOAL object file that was just loaded." (function dgo-header kheap uint symbol symbol symbol)) +(define-extern destroy-mem "Overwrite memory with #xffffffff for debugging." (function (pointer uint32) (pointer uint32) none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ramdisk ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ramdisk-rpc-fill (structure) + ((rsvd1 int32 :offset-assert 0) + (ee-id int32 :offset-assert 4) + (rsvd2 int32 2 :offset-assert 8) ;; guessed by decompiler + (filename uint128 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype ramdisk-rpc-load (structure) + ((rsvd int32 :offset-assert 0) + (ee-id int32 :offset-assert 4) + (offset uint32 :offset-assert 8) + (length uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype ramdisk-rpc-load-to-ee (structure) + ((rsvd int32 :offset-assert 0) + (addr int32 :offset-assert 4) + (offset int32 :offset-assert 8) + (length int32 :offset-assert 12) + (filename uint128 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +;; (define-extern *ramdisk-rpc* object) ;; rpc-buffer-pair +;; (define-extern *current-ramdisk-id* object) ;; int +;; (define-extern ramdisk-load function) ;; (function int uint uint pointer int) +;; (define-extern ramdisk-sync function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gsound ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype engine-sound-pers (engine-pers) + () + :method-count-assert 15 + :size-assert #x20 + :flag-assert #xf00000020 + ) + +(define-extern sound-mp-fix-trans (function none)) +(define-extern *sound-loop-engine* engine-sound-pers) +(define-extern *sound-player-rpc* rpc-buffer-pair) +(define-extern *sound-loader-rpc* rpc-buffer-pair) +(define-extern sound-name= "Are two sound names the same?" (function sound-name sound-name symbol)) +(define-extern str-is-playing? "Is any streaming audio playing?" (function symbol)) +(define-extern str-id-is-playing? "Is any streaming audio with the given ID playing?" (function sound-id symbol)) +(define-extern current-str-pos "Get the current stream position of the given sound ID, or -1 if it is not playing." (function sound-id int)) +(define-extern current-str-status "Get the status of the stream playing the given sound, or 0 if it is not playing." (function sound-id stream-status)) +(define-extern *dnas-is-running* symbol) +(define-extern is-cd-in? "Is the CD/DVD in the ps2?" (function symbol)) +(define-extern new-sound-id "Allocate a new sound ID, used to identify a unique playback of a sound." (function sound-id)) +(define-extern check-irx-version "Confirm OVERLORD version is correct and set up the sound-iop-info address so the OVERLORD can report back to the EE." (function int)) +(define-extern sound-bank-load "Send RPC to load a sound bank." (function sound-name int int sound-id)) +(define-extern sound-bank-unload "Send unload-bank rpc to loader" (function sound-name int)) +(define-extern sound-music-load "Send load-music rpc to loader" (function sound-name int)) +(define-extern sound-music-unload "Send unload-music rpc to loader." (function int)) +(define-extern set-language "Send set-language rpc to loader. Note this is only for sound, no game text is changed." (function language-enum int)) +(define-extern sound-set-stereo-mode "Send set-stereo-mode rpc to loader." (function int none)) +(define-extern list-sounds "Send list-sounds rpc to loader." (function none)) +(define-extern sound-command->string (function sound-command string)) +(define-extern sound-buffer-dump "Print out all sound-commands in the buffer." (function int)) +(define-extern *debug-sound-info-item* (pointer sound-info)) +(define-extern sound-instance-play (function sound-instance uint)) +(define-extern sound-instance-update (function sound-instance uint)) +(define-extern sound-info-by-name (function sound-name sound-info)) +(define-extern *sound-handles* (array (array sound-handle))) +(define-extern find-sound-handle (function int handle sound-handle)) +(define-extern release-sound-handle (function sound-handle none)) +(define-extern get-sound-handle (function sound-instance sound-handle)) +(define-extern *sound-instances* (array sound-instance)) +(define-extern find-sound-instance (function int symbol sound-instance)) +(define-extern remove-sound-instance-by-index (function int int)) +(define-extern remove-sound-instance-by-sound-id (function int int)) +(define-extern make-sound-instance (function int sound-instance)) +(define-extern update-pitch-with-doppler (function sound-instance number)) +(define-extern update-tracking-position (function sound-instance symbol)) +(define-extern calculate-pan-angle (function vector symbol float symbol int float)) +(define-extern update-pan-angle (function sound-instance float float)) +(define-extern calculate-falloff-volume (function float vector float float float vector sound-instance float)) +(define-extern update-volume-with-falloff (function sound-instance float)) +(define-extern *sound-priority-level* int) +(define-extern *sound-duck-amount* float) +(define-extern *sound-priority-duck* object) +(define-extern *music-ducked-last-frame?* symbol) +(define-extern *slow-mo-last-frame?* symbol) +(define-extern set-sound-priority-duck-amount (function float float)) +(define-extern unset-sound-priority-duck-amount (function float)) +(define-extern build-sound-list (function none)) +(define-extern *sound-player-enable* symbol) +(define-extern swap-sound-buffers "Per-frame update of sound system - update loop-engine, update ear trans, send player RPC, check for missing/dirty CD." (function vector vector vector vector vector float int)) +(define-extern get-sound-buffer-entry "Allocate a new entry in the player RPC queue, to be flushed on the next frame." (function pointer)) +(define-extern free-last-sound-buffer-entry "Remove the last thing added with get-sound-buffer-entry." (function none)) +(define-extern sound-basic-cb "Unknown and unused callback." (function int (pointer int32) none)) +(define-extern sound-trans-copy (function int symbol none)) +(define-extern string->sound-name "Create a sound-name from a string" (function string sound-name)) +(define-extern sound-name->string "Create a string from a sound-name. Returns pointer to a single shared static string." (function sound-name string)) +(define-extern sound-set-volume "Send set-master-volume rpc." (function sound-group float int)) +(define-extern sound-set-reverb "Send set-reverb rpc" (function int float float uint int)) +(define-extern sound-set-globals (function none)) +(define-extern sound-pause "Send pause-sound rpc to pause by id" (function sound-id int)) +(define-extern sound-stop "Send stop-sound rpc to stop by id" (function sound-id symbol int)) +(define-extern sound-continue "Send continue-sound rpc to continue by id" (function sound-id int)) +(define-extern sound-group-pause "Send pause-group rpc" (function sound-group int)) +(define-extern sound-group-stop "Send stop-group rpc" (function sound-group int)) +(define-extern sound-group-continue "Send continue-group rpc" (function sound-group int)) +(define-extern sound-set-fps "Send set-fps rpc" (function int int)) +(define-extern sound-volume-off "Adjust settings to turn all sound volume off" (function int)) +(define-extern show-iop-info "Display iop info on screen." (function dma-buffer int)) +(define-extern show-iop-memory "Display iop memory stats on screen" (function dma-buffer int)) +(define-extern ear-trans "Get the current location of the ear. Use 1 for the settings ear-handle, or 0 for the camera." (function int int vector)) +(define-extern make-sqrt-table "Generate integer square-root table used in the IOP." (function none)) +(define-extern doppler-pitch-shift "Compute pitch shift for the doppler effect. This is done assuming the listener is *target* and has *target*'s velocity." (function vector vector float)) +(define-extern sound-bank-reload "Start a background process to unload all sound banks, then load them again." (function none)) +(define-extern sound-bank-reload-common (function none)) +(define-extern *jukebox-onoff* symbol) +(define-extern *last-music-position* uint) +(define-extern jukebox-onoff (function symbol int)) +(define-extern update-jukebox-music (function none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; transformq ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern transformq-copy! "Set arg0 = arg1." (function transformq transformq transformq)) +(define-extern matrix<-transformq! "Convert to 4x4 affine transform." (function matrix transformq matrix)) +(define-extern matrix<-no-trans-transformq! "Create 4x4 affine transform with no translation." (function matrix transformq matrix)) +(define-extern matrix<-transformq+trans! + "Convert to affine transform with an additional translation (in the local frame)." + (function matrix transformq vector matrix)) +(define-extern matrix<-transformq+world-trans! + "Convert to affine transform with an additional translation in the world frame (not rotated)." + (function matrix transformq vector matrix)) +(define-extern matrix<-parented-transformq! + "Unused. Seems like the parented thing means there's an inverse scale in arg2." + (function matrix transformq vector matrix)) +(define-extern matrix<-transformq+rot-offset! + "Affine transform for a point offset in the destination frame of the transformq (rather than just + adding an offset at the end)." + (function matrix transformq vector matrix)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-func ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern raw-ray-sphere-intersect function) +(define-extern ray-sphere-intersect (function vector vector vector float float)) +(define-extern ray-circle-intersect (function vector vector vector float float)) +(define-extern ray-cylinder-intersect (function vector vector vector vector float float vector float)) +(define-extern ray-plane-intersect (function vector vector vector vector vector vector vector float)) +;; (define-extern ray-triangle-intersect function) +;; (define-extern collide-do-primitives function) +(define-extern moving-sphere-triangle-intersect (function vector vector float collide-cache-tri vector vector float)) +;; (define-extern moving-sphere-sphere-intersect function) +;; (define-extern moving-sphere-moving-sphere-intersect function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; joint ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype art-group (art) + ((info file-info :offset-assert 0) ;; guessed by decompiler + (length int32 :offset-assert 8) + (name string :offset-assert 4) ;; guessed by decompiler + (extra res-lump :offset-assert 12) ;; guessed by decompiler + (data art-element :dynamic :offset-assert 28) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 16 + :size-assert #x20 + :flag-assert #x1000000020 + (:methods + (art-group-method-14 () none) ;; 14 ;; (link-art-to-master (_type_) art-group) + (art-group-method-15 () none) ;; 15 ;; (unlink-art-to-master (_type_) int) + ) + ) +|# + +;; (define-extern joint-anim-login function) ;; (function joint-anim-drawable joint-anim-drawable) +;; (define-extern joint-anim-inspect-elt function) ;; (function joint-anim float joint-anim) +;; (define-extern jacc-mem-usage function) ;; (function joint-anim-compressed-control memory-usage-block int joint-anim-compressed-control) +;; (define-extern joint-control-cleanup function) ;; (function joint-control kheap art-joint-anim symbol) +;; (define-extern joint-control-channel-eval function) ;; (function joint-control-channel float :behavior process) +;; (define-extern joint-control-channel-eval! function) ;; (function joint-control-channel (function joint-control-channel float float float float) float :behavior process) +;; (define-extern joint-control-channel-group-eval! function) ;; (function joint-control-channel art-joint-anim (function joint-control-channel float float float float) int) +;; (define-extern joint-control-channel-group! function) ;; (function joint-control-channel art-joint-anim (function joint-control-channel float float float float) int) +;; (define-extern joint-control-copy! function) ;; (function joint-control joint-control joint-control) +;; (define-extern joint-control-remap! function) ;; (function joint-control art-group art-group pair int string symbol) +;; (define-extern flatten-joint-control-to-spr function) ;; (function joint-control int) +;; (define-extern matrix-from-joint-anim-frame function) ;; (function joint-anim-compressed-control int int matrix) +;; (define-extern matrix-from-control-channel! function) ;; (function matrix joint joint-control-channel matrix) +;; (define-extern matrix-from-control-pair! function) ;; (function matrix joint-control-channel joint int matrix) +;; (define-extern matrix-from-control! function) ;; (function matrix-stack joint joint-control symbol matrix) +;; (define-extern cspace<-cspace! function) ;; (function cspace cspace matrix) +;; (define-extern cspace<-cspace-normalized! function) ;; (function cspace cspace matrix) +;; (define-extern cspace<-parent-joint! function) ;; (function cspace (pointer process-drawable) int matrix) +;; (define-extern cspace<-transformq! function) ;; (function cspace transformq matrix) +;; (define-extern cspace<-transformq+trans! function) ;; (function cspace transformq vector matrix) +;; (define-extern cspace<-transformq+world-trans! function) ;; (function cspace transformq vector matrix) +;; (define-extern cspace<-transformq+rot-offset! function) ;; (function cspace transformq vector matrix) +;; (define-extern cspace-calc-total-matrix! function) ;; (function cspace matrix matrix) +;; (define-extern cspace<-matrix-no-push-joint! function) ;; (function cspace joint-control matrix) +;; (define-extern cspace<-matrix-joint! function) ;; (function cspace matrix matrix) +;; (define-extern cspace<-parented-matrix-joint! function) ;; (function cspace matrix matrix) +;; (define-extern cspace<-parented-matrix-mirror! function) ;; (function cspace matrix matrix) +;; (define-extern cspace<-parented-matrix-joint-flip-z! function) ;; (function cspace matrix matrix) +;; (define-extern cspace<-matrix-joint-flip-z! function) ;; (function cspace matrix none) +;; (define-extern cspace<-parented-transformq-joint! function) ;; (function cspace transformq none) +;; (define-extern cspace<-parented-transformq-joint-flip-z! function) ;; (function cspace transformq none) +;; (define-extern clear-frame-accumulator function) +;; (define-extern normalize-frame-quaternions function) +;; (define-extern decompress-fixed-data-to-accumulator function) +;; (define-extern decompress-frame-data-to-accumulator function) +;; (define-extern decompress-frame-data-pair-to-accumulator function) +;; (define-extern make-joint-jump-tables function) ;; (function int) +;; (define-extern calc-animation-from-spr function) ;; (function joint-anim-frame int none) +;; (define-extern create-interpolated-joint-animation-frame function) ;; (function joint-anim-frame int joint-control int) +;; (define-extern create-interpolated2-joint-animation-frame function) ;; (function joint-anim-frame int joint-control int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; joint-mod ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern joint-mod-ik-callback function) ;; (function cspace transformq none :behavior process) +;; (define-extern real-joint-mod-gun-look-at-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-gun-look-at-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-foot-rot-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern last-try-to-look-at-data object) ;; try-to-look-at-info +;; (define-extern joint-mod-look-at-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-world-look-at-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-rotate-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-scale-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-joint-set-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-joint-set-world-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-joint-set*-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-joint-set*-world-handler function) ;; (function cspace transformq none :behavior process) +;; (define-extern joint-mod-polar-look-at-callback function) ;; (function cspace transformq none :behavior process) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wind-work ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *wind-work* wind-work) ;; wind-work + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wind ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern update-wind function) ;; (function wind-work (array uint8) none) +;; (define-extern wind-get-hashed-index function) ;; (function vector wind-work int) +;; (define-extern level-update-wind function) ;; (function wind-work none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bsp ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern mem-usage-bsp-tree function) ;; (function bsp-header bsp-node memory-usage-block int none) +;; (define-extern *test-shrub* object) ;; int +;; (define-extern bsp-camera-asm function) ;; (function bsp-header vector none) +;; (define-extern print-collide-stats function) ;; (function none) +;; (define-extern level-remap-texture function) ;; (function texture-id texture-id) +;; (define-extern build-masks function) ;; (function bsp-header none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; subdivide ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *merc-global-stats* object) ;; merc-global-stats +;; (define-extern clear-tr-stat function) ;; (function tr-stat none) +;; (define-extern *stat-string-tfrag* object) ;; string +;; (define-extern *stat-string-tfrag-scissor* object) ;; string +;; (define-extern *stat-string-total* object) ;; string +;; (define-extern print-tr-stat function) ;; (function tr-stat string string none) +;; (define-extern print-terrain-stats function) ;; (function none) +;; (define-extern update-subdivide-settings! function) ;; (function subdivide-settings math-camera int none) +;; (define-extern *subdivide-settings* object) ;; subdivide-settings +;; (define-extern set-tfrag-dists! function) ;; (function tfrag-dists none) +;; (define-extern *terrain-context* object) ;; terrain-context +;; (define-extern GSH_ENABLE object) ;; symbol +;; (define-extern GSH_BUCKET object) ;; bucket-id +;; (define-extern GSH_WHICH_STAT object) ;; int +;; (define-extern GSH_MAX_DISPLAY object) ;; basic +;; (define-extern GSH_TIME object) ;; int +;; (define-extern *perf-stats* object) ;; perf-stat-array +;; (define-extern *gomi-stats-hack* object) ;; (inline-array perf-stat) +;; (define-extern start-perf-stat-collection function) ;; (function none) +;; (define-extern end-perf-stat-collection function) ;; (function none) +;; (define-extern print-perf-stats function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sprite ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sprite-header (structure) + ((header qword 1 :offset-assert 0) ;; guessed by decompiler + (num-sprites int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype sprite-hvdf-data (structure) + ((data qword 76 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4c0 + :flag-assert #x9000004c0 + ) +|# + +#| +(deftype sprite-hvdf-control (structure) + ((alloc int8 76 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype sprite-aux-elem (structure) + ((aux-type sprite-aux-type :offset-assert 0) ;; guessed by decompiler + (data vector 3 :offset-assert 4) ;; guessed by decompiler + (vec-data sprite-vec-data-2d :offset-assert 4) + (gif-data adgif-shader :offset-assert 8) + (aux-data sparticle-cpuinfo :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype sprite-aux-list (basic) + ((num-entries int32 :offset-assert 4) + (entry int32 :offset-assert 8) + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype sprite-frame-data (structure) + ((data UNKNOWN 42 :offset-assert 0) + (cdata vector 16 :offset-assert 0) ;; guessed by decompiler + (fdata UNKNOWN 26 :offset-assert 256) + (xy-array vector 8 :offset-assert 0) ;; guessed by decompiler + (st-array vector 4 :offset-assert 128) ;; guessed by decompiler + (xyz-array vector 4 :offset-assert 192) ;; guessed by decompiler + (hmge-scale vector :inline :offset-assert 256) + (consts vector :inline :offset-assert 272) + (pfog0 float :offset-assert 272) + (deg-to-rad float :offset-assert 276) + (min-scale float :offset-assert 280) + (inv-area float :offset-assert 284) + (adgif-giftag qword :inline :offset-assert 288) ;; gs-gif-tag :inline + (sprite-2d-giftag qword :inline :offset-assert 304) ;; gs-gif-tag :inline + (sprite-2d-giftag-2 qword :inline :offset-assert 320) ;; gs-gif-tag :inline + (sincos-01 vector :inline :offset-assert 336) + (sincos-23 vector :inline :offset-assert 352) + (sincos-45 vector :inline :offset-assert 368) + (sincos-67 vector :inline :offset-assert 384) + (sincos-89 vector :inline :offset-assert 400) + (basis-x vector :inline :offset-assert 416) + (basis-y vector :inline :offset-assert 432) + (sprite-3d-giftag qword :inline :offset-assert 448) ;; gs-gif-tag :inline + (sprite-3d-giftag-2 qword :inline :offset-assert 464) ;; gs-gif-tag :inline + (screen-shader adgif-shader :inline :offset-assert 480) + (inv-hmge-scale vector :inline :offset-assert 576) + (stq-offset vector :inline :offset-assert 592) + (stq-scale vector :inline :offset-assert 608) + (rgba-plain qword :inline :offset-assert 624) + (warp-giftag qword :inline :offset-assert 640) ;; gs-gif-tag :inline + (fog-clamp vector :inline :offset-assert 656) + (fog-min float :offset-assert 656) + (fog-max float :offset-assert 660) + (max-scale float :offset-assert 664) + ) + :method-count-assert 9 + :size-assert #x2a0 + :flag-assert #x9000002a0 + ) +|# + +;; (define-extern sprite-setup-header function) ;; (function sprite-header int none) +;; (define-extern clear-sprite-aux-list function) ;; (function none) +;; (define-extern add-to-sprite-aux-list function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none) +;; (define-extern sprite-setup-frame-data function) ;; (function sprite-frame-data uint none) +;; (define-extern sprite-vu1-block object) ;; vu-function +;; (define-extern sprite-set-3d-quaternion! function) ;; (function sprite-vec-data-3d quaternion quaternion) +;; (define-extern sprite-get-3d-quaternion! function) ;; (function quaternion sprite-vec-data-3d quaternion) +;; (define-extern sprite-add-matrix-data function) ;; (function dma-buffer uint none) +;; (define-extern sprite-add-frame-data function) ;; (function dma-buffer uint none) +;; (define-extern sprite-add-2d-chunk function) ;; (function sprite-array-2d int int dma-buffer int none) +;; (define-extern sprite-add-2d-all function) ;; (function sprite-array-2d dma-buffer int none) +;; (define-extern sprite-add-3d-chunk function) ;; (function sprite-array-3d int int dma-buffer none) +;; (define-extern sprite-add-3d-all function) ;; (function sprite-array-3d dma-buffer int none) +;; (define-extern sprite-draw function) ;; (function display none) +;; (define-extern sprite-allocate-user-hvdf function) ;; (function int) +;; (define-extern sprite-release-user-hvdf function) ;; (function int none) +;; (define-extern sprite-get-user-hvdf function) ;; (function int vector) +;; (define-extern *sprite-hvdf-data* object) ;; sprite-hvdf-data +;; (define-extern *sprite-hvdf-control* object) ;; sprite-hvdf-control +;; (define-extern *sprite-aux-list* object) ;; sprite-aux-list +;; (define-extern *sprite-array-2d* object) ;; sprite-array-2d +;; (define-extern *sprite-array-3d* object) ;; sprite-array-3d + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sprite-distort ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sprite-distorter-sine-tables (basic) + ((aspx float :offset-assert 4) + (aspy float :offset-assert 8) + (entry vector 128 :offset-assert 16) ;; guessed by decompiler + (ientry qword 9 :offset-assert 2064) ;; guessed by decompiler + (giftag qword :inline :offset-assert 2208) ;; gs-gif-tag :inline + (color qword :inline :offset-assert 2224) + ) + :method-count-assert 9 + :size-assert #x8c0 + :flag-assert #x9000008c0 + ) +|# + +;; (define-extern *sprite-distorter-sine-tables* object) ;; sprite-distorter-sine-tables +;; (define-extern sprite-distorter-generate-tables function) ;; (function none) +;; (define-extern sprite-distort-vu1-block object) ;; vu-function +;; (define-extern sprite-init-distorter function) ;; (function dma-buffer none) +;; (define-extern sprite-draw-distorters function) ;; (function dma-buffer none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sprite-glow ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sprite-glow-template (structure) + ((clear-init-giftag gs-gif-tag :inline :offset-assert 0) + (clear-init-adcmds gs-adcmd 5 :offset-assert 16) ;; guessed by decompiler + (clear-draw-giftag gs-gif-tag :inline :offset-assert 96) + (clear-draw-clr-0 gs-packed-rgba :inline :offset-assert 112) + (clear-draw-xyz-0 gs-packed-xyzw 2 :offset-assert 128) ;; guessed by decompiler + (clear-draw-clr-1 gs-packed-rgba :inline :offset-assert 160) + (clear-draw-xyz-1 vector 2 :offset-assert 176) ;; guessed by decompiler + (offscr-setup-giftag gs-gif-tag :inline :offset-assert 208) + (offscr-setup-adcmds gs-adcmd 9 :offset-assert 224) ;; guessed by decompiler + (offscr-first-giftag gs-gif-tag :inline :offset-assert 368) + (offscr-first-clr gs-packed-rgba :inline :offset-assert 384) + (offscr-first-uv-0 gs-packed-uv :inline :offset-assert 400) + (offscr-first-xyzw-0 gs-packed-xyzw :inline :offset-assert 416) + (offscr-first-uv-1 gs-packed-uv :inline :offset-assert 432) + (offscr-first-xyzw-1 gs-packed-xyzw :inline :offset-assert 448) + (repeat-draw-giftag gs-gif-tag :inline :offset-assert 464) + (repeat-draw-adcmds gs-adcmd 29 :offset-assert 480) ;; guessed by decompiler + (flare-alpha-giftag gs-gif-tag :inline :offset-assert 944) + (flare-alpha-clr gs-packed-rgba :inline :offset-assert 960) + (flare-alpha-uv gs-packed-uv :inline :offset-assert 976) + (flare-alpha-xyzw-0 gs-packed-xyzw :inline :offset-assert 992) + (flare-alpha-xyzw-1 gs-packed-xyzw :inline :offset-assert 1008) + (flare-alpha-xyzw-2 gs-packed-xyzw :inline :offset-assert 1024) + (flare-alpha-xyzw-3 gs-packed-xyzw :inline :offset-assert 1040) + (flare-init-giftag gs-gif-tag :inline :offset-assert 1056) + (flare-init-adcmds gs-adcmd 8 :offset-assert 1072) ;; guessed by decompiler + (flare-draw-giftag gs-gif-tag :inline :offset-assert 1200) + (flare-draw-clr gs-packed-rgba :inline :offset-assert 1216) + (flare-draw-stq-0 gs-packed-stq :inline :offset-assert 1232) + (flare-draw-xyzw-0 gs-packed-xyzw :inline :offset-assert 1248) + (flare-draw-stq-1 gs-packed-stq :inline :offset-assert 1264) + (flare-draw-xyzw-1 gs-packed-xyzw :inline :offset-assert 1280) + (flare-draw-stq-2 gs-packed-stq :inline :offset-assert 1296) + (flare-draw-xyzw-2 gs-packed-xyzw :inline :offset-assert 1312) + (flare-draw-stq-3 gs-packed-stq :inline :offset-assert 1328) + (flare-draw-xyzw-3 gs-packed-xyzw :inline :offset-assert 1344) + ) + :method-count-assert 9 + :size-assert #x550 + :flag-assert #x900000550 + ) +|# + +#| +(deftype sprite-glow-consts (structure) + ((camera matrix :inline :offset-assert 0) + (perspective matrix :inline :offset-assert 64) + (hvdf-offset vector :inline :offset-assert 128) + (hmge-scale vector :inline :offset-assert 144) + (consts vector :inline :offset-assert 160) + (pfog0 float :offset-assert 160) + (deg-to-rad float :offset-assert 164) + (min-scale float :offset-assert 168) + (inv-area float :offset-assert 172) + (sincos-01 vector :inline :offset-assert 176) + (sincos-23 vector :inline :offset-assert 192) + (sincos-45 vector :inline :offset-assert 208) + (sincos-67 vector :inline :offset-assert 224) + (sincos-89 vector :inline :offset-assert 240) + (basis-x vector :inline :offset-assert 256) + (basis-y vector :inline :offset-assert 272) + (xy-array vector 4 :offset-assert 288) ;; guessed by decompiler + (clamp-min vector :inline :offset-assert 352) + (clamp-max vector :inline :offset-assert 368) + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) +|# + +#| +(deftype sprite-glow-dma-packet-data (structure) + ((control-packet dma-packet :inline :offset-assert 0) + (vecdata-packet dma-packet :inline :offset-assert 16) + (shader-cnt-packet dma-packet :inline :offset-assert 32) + (shader-ref-packet dma-packet :inline :offset-assert 48) + (mscal-packet dma-packet :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype sprite-glow-cnt-template (structure) + ((control-packet dma-packet :inline :offset-assert 0) + (num-sprites uint32 :offset-assert 16) + (dummys uint32 3 :offset-assert 20) ;; guessed by decompiler + (vecdata-packet dma-packet :inline :offset-assert 32) + (vecdata sprite-glow-data :inline :offset-assert 48) + (shader-packet dma-packet :inline :offset-assert 112) + (shader adgif-shader :inline :offset-assert 128) + (mscal-packet dma-packet :inline :offset-assert 208) + ) + :method-count-assert 9 + :size-assert #xe0 + :flag-assert #x9000000e0 + ) +|# + +#| +(deftype sprite-glow-ref-template (structure) + ((control-packet dma-packet :inline :offset-assert 0) + (num-sprites uint32 :offset-assert 16) + (dummys uint32 3 :offset-assert 20) ;; guessed by decompiler + (vecdata-packet dma-packet :inline :offset-assert 32) + (vecdata sprite-glow-data :inline :offset-assert 48) + (shader-packet dma-packet :inline :offset-assert 112) + (mscal-packet dma-packet :inline :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +;; (define-extern *sprite-glow-templates* array) +;; (define-extern sprite-glow-vu1-block object) ;; vu-function +;; (define-extern sprite-glow-init-consts function) ;; (function sprite-glow-consts none) +;; (define-extern sprite-glow-init-engine function) ;; (function dma-buffer none) +;; (define-extern *sprite-glow-dma-packet-data* object) ;; sprite-glow-dma-packet-data +;; (define-extern sprite-glow-add-sprite function) ;; (function dma-buffer sprite-vec-data-2d float float float adgif-shader none) +;; (define-extern sprite-glow-add-simple-sprite function) ;; (function dma-buffer sprite-glow-dma-packet-data sprite-glow-data pointer none) +;; (define-extern sprite-glow-draw function) ;; (function dma-buffer none) +;; (define-extern add-shader-to-dma function) ;; (function dma-buffer adgif-shader) +;; (define-extern *simple-sprite-system* object) ;; simple-sprite-system + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; debug-sphere ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern make-debug-sphere-table function) ;; (function vector-array float float vector-array) +;; (define-extern *debug-sphere-table* object) ;; (array vector-array) +;; (define-extern add-debug-sphere-from-table function) ;; (function bucket-id vector meters rgba int none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; debug ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype debug-line (structure) + ((flags int32 :offset-assert 0) + (bucket int32 :offset-assert 4) ;; bucket-id + (v1 vector :inline :offset-assert 16) + (v2 vector :inline :offset-assert 32) + (color rgba :offset-assert 48) ;; guessed by decompiler + (mode symbol :offset-assert 52) ;; guessed by decompiler + (color2 rgba :offset-assert 56) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype debug-text-3d (structure) + ((flags int32 :offset-assert 0) + (bucket int32 :offset-assert 4) ;; bucket-id + (pos vector :inline :offset-assert 16) + (color uint8 :offset-assert 32) ;; font-color + (offset vector2h :inline :offset-assert 34) + (str string :offset-assert 40) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype debug-tracking-thang (basic) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +;; debug-vertex-stats is already defined! + +;; (define-extern transform-float-point function) ;; (function vector vector4w vector4w) +;; (define-extern add-debug-point function) ;; (function symbol bucket-id vector symbol) +;; (define-extern debug-line-clip? function) ;; (function vector vector vector vector symbol) +;; (define-extern internal-draw-debug-line function) ;; (function bucket-id vector vector rgba symbol rgba symbol) +;; (define-extern internal-draw-debug-text-3d function) ;; (function bucket-id string vector font-color vector2h pointer) +;; (define-extern add-debug-outline-triangle function) ;; (function symbol bucket-id vector vector vector rgba symbol) +;; (define-extern add-debug-triangle-normal function) ;; (function symbol bucket-id vector vector vector rgba symbol) +;; (define-extern add-debug-flat-triangle-noclip function) +;; (define-extern *debug-lines* object) ;; (inline-array debug-line) +;; (define-extern *debug-lines-trk* object) ;; debug-tracking-thang +;; (define-extern *debug-text-3ds* object) ;; (inline-array debug-text-3d) +;; (define-extern *debug-text-3d-trk* object) ;; debug-tracking-thang +;; (define-extern *debug-prims* object) +;; (define-extern debug-reset-prim-buffer function) +;; (define-extern add-debug-flat-triangle function) ;; (function symbol bucket-id vector vector vector rgba symbol) +;; (define-extern get-debug-line function) ;; (function debug-line) +;; (define-extern get-debug-text-3d function) ;; (function debug-text-3d) +;; (define-extern debug-reset-buffers function) ;; (function symbol) +;; (define-extern debug-draw-buffers function) ;; (function symbol) +;; (define-extern add-debug-line function) ;; (function symbol bucket-id vector vector rgba symbol rgba symbol) +;; (define-extern add-debug-line2d function) ;; (function symbol bucket-id vector4w vector4w vector4w symbol) +;; (define-extern add-debug-box function) ;; (function symbol bucket-id vector vector rgba symbol) +;; (define-extern add-debug-box-with-transform function) ;; (function symbol bucket-id bounding-box matrix rgba symbol) +;; (define-extern add-debug-x function) ;; (function symbol bucket-id vector rgba symbol) +;; (define-extern add-debug-cross function) ;; (function symbol bucket-id vector float symbol) +;; (define-extern add-debug-text-3d function) ;; (function symbol bucket-id string vector font-color vector2h symbol) +;; (define-extern add-debug-sphere-with-transform function) ;; (function symbol bucket-id vector meters matrix rgba symbol) +;; (define-extern add-debug-sphere function) ;; (function symbol bucket-id vector meters rgba symbol) +;; (define-extern add-debug-text-sphere function) ;; (function symbol bucket-id vector meters string rgba symbol) +;; (define-extern add-debug-spheres function) ;; (function symbol bucket-id (inline-array vector) int rgba symbol) +;; (define-extern add-debug-line-sphere function) ;; (function symbol bucket-id vector vector float rgba none) +;; (define-extern add-debug-circle function) ;; (function symbol bucket-id vector float rgba matrix symbol) +;; (define-extern add-debug-vector function) ;; (function symbol bucket-id vector vector meters rgba symbol) +;; (define-extern add-debug-matrix function) ;; (function symbol bucket-id matrix meters matrix) +;; (define-extern add-debug-rot-matrix function) ;; (function symbol bucket-id matrix vector matrix) +;; (define-extern add-debug-quaternion function) ;; (function symbol bucket-id vector quaternion none) +;; (define-extern add-debug-cspace function) ;; (function symbol bucket-id cspace cspace) +;; (define-extern add-debug-yrot-vector function) ;; (function symbol bucket-id vector float float rgba symbol) +;; (define-extern add-debug-arc function) ;; (function symbol bucket-id vector float float float rgba matrix symbol) +;; (define-extern add-debug-curve function) ;; (function symbol bucket-id (inline-array vector) int (pointer float) int rgba symbol) +;; (define-extern add-debug-curve2 function) ;; (function symbol bucket-id curve rgba symbol symbol) +;; (define-extern add-debug-points function) ;; (function symbol bucket-id (inline-array vector) int rgba float int symbol) +;; (define-extern debug-percent-bar function) ;; (function symbol bucket-id int int float rgba int int symbol) +;; (define-extern debug-pad-display function) ;; (function cpad-info symbol) +;; (define-extern add-debug-light function) ;; (function symbol bucket-id light vector string symbol) +;; (define-extern add-debug-lights function) ;; (function symbol bucket-id (inline-array light) vector symbol) +;; (define-extern drawable-frag-count function) ;; (function drawable int) +;; (define-extern history-init function) ;; (function pos-history int pos-history) +;; (define-extern history-draw-and-update function) ;; (function pos-history symbol vector symbol) +;; (define-extern dma-timeout-cam function) ;; (function vector) +;; (define-extern display-file-info function) ;; (function int) +;; (define-extern add-debug-cursor function) ;; (function symbol bucket-id int int mouse-buttons int) +;; (define-extern *boundary-polygon* object) ;; (inline-array sky-vertex) +;; (define-extern init-boundary-regs function) ;; (function none) +;; (define-extern add-boundary-shader function) ;; (function texture-id dma-buffer none) +;; (define-extern draw-boundary-polygon function) +;; (define-extern render-boundary-quad function) +;; (define-extern render-boundary-tri function) ;; (function sky-vertex dma-buffer none) +;; (define-extern add-debug-bound-internal function) ;; (function dma-buffer (inline-array vector) int rgba rgba int none) +;; (define-extern add-debug-bound function) ;; (function bucket-id (inline-array vector) int rgba rgba int none) +;; (define-extern cpu-delay function) +;; (define-extern qword-read-time function) ;; (function (array uint128) int int) +;; (define-extern bugfix? function) ;; (function symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; history ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype history-elt (structure) + ((record-tag-bytes uint8 4 :offset-assert 0) ;; guessed by decompiler + (record-tag uint32 :offset-assert 0) + (record-id uint16 :offset-assert 0) + (owner uint8 :offset-assert 2) + (channel uint8 :offset-assert 4) ;; history-channel + (timestamp uint64 :offset-assert 8) ;; time-frame + (origin vector :inline :offset-assert 16) + (bytes uint8 16 :offset-assert 32) ;; guessed by decompiler + (vector vector :inline :offset-assert 32) + (float float :offset-assert 32) + (collide-status uint64 :offset-assert 32) ;; collide-status + (collide-reaction-flag uint32 :offset-assert 40) + (pat pat-surface :offset-assert 32) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype history-iterator (basic) + ((max-age uint32 :offset-assert 4) + (owner uint8 :offset-assert 8) + (proc process :offset-assert 12) ;; guessed by decompiler + (out object :offset-assert 16) ;; guessed by decompiler + (channel-mask uint64 :offset-assert 24) + (index int32 :offset-assert 32) + (done? symbol :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x28 + :flag-assert #xc00000028 + ;; field out uses ~A with a signed load. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type uint) _type_) + (history-iterator-method-9 () none) ;; 9 ;; (frame-counter-delta (_type_ history-elt) time-frame) + (history-iterator-method-10 () none) ;; 10 ;; (update-entries! (_type_) history-elt) + (history-iterator-method-11 () none) ;; 11 ;; (get-age (_type_ history-elt) float) + ) + ) +|# + +#| +(deftype history (basic) + ((alloc-index int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (elts history-elt :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (history-method-9 () none) ;; 9 ;; (clear-record-tags! (_type_ history-channel uint uint) history-elt) + (history-method-10 () none) ;; 10 ;; (clear-history-entries! (_type_) none) + ) + ) +|# + +;; (define-extern history-channel->string function) ;; (function history-channel string) +;; (define-extern *history* object) ;; history +;; (define-extern history-print function) ;; (function history-iterator none) +;; (define-extern history-draw function) ;; (function history-iterator none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; merc-vu1 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern merc-vu1-block object) ;; vu-function + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; emerc-vu1 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern emerc-vu1-block object) ;; vu-function + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; merc-blend-shape ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype blerc-block-header (structure) + ((tag generic-merc-tag :inline :offset-assert 0) + (vtx-count uint32 :offset-assert 16) + (overlap uint32 :offset-assert 20) + (lump-dest uint32 :offset-assert 24) + (lump-qwc uint32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype blerc-block (structure) + ((output uint8 848 :offset-assert 0) ;; guessed by decompiler + (header blerc-block-header :inline :offset-assert 848) + ) + :method-count-assert 9 + :size-assert #x370 + :flag-assert #x900000370 + ) +|# + +#| +(deftype blerc-dcache (structure) + ((repl-mult vector 40 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x280 + :flag-assert #x900000280 + ) +|# + +#| +(deftype blerc-globals (structure) + ((first uint32 :offset-assert 0) + (next uint32 :offset-assert 4) + (min-val int16 :offset-assert 8) + (max-val int16 :offset-assert 10) + (fragment-count int32 :offset-assert 12) + (vtx-count int32 :offset-assert 16) + (target-vtx-count int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype blerc-context (structure) + ((block-a blerc-block :inline :offset-assert 0) + (dummy uint8 7312 :offset-assert 880) ;; guessed by decompiler + (block-b blerc-block :inline :offset-assert 8192) + ) + :method-count-assert 9 + :size-assert #x2370 + :flag-assert #x900002370 + ) +|# + +;; (define-extern *stats-blerc* object) ;; symbol +;; (define-extern *blerc-globals* object) ;; blerc-globals +;; (define-extern blerc-stats-init function) ;; (function none) +;; (define-extern blerc-init function) ;; (function none) +;; (define-extern blerc-a-fragment function) ;; function +;; (define-extern dma-from-spr function) ;; function +;; (define-extern merc-dma-chain-to-spr function) ;; function +;; (define-extern blerc-execute function) ;; (function none) +;; (define-extern merc-blend-shape function) ;; (function process-drawable object) +;; (define-extern setup-blerc-chains-for-one-fragment function) ;; (function object object object object object object object) +;; (define-extern setup-blerc-chains function) ;; (function merc-ctrl (pointer int16) dma-buffer none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; merc ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; merc-fragment-control is already defined! + +;; merc-ctrl is already defined! + +;; (define-extern *texture-login-data* object) ;; texture-login-data +;; (define-extern texture-usage-init function) ;; (function merc-ctrl symbol) +;; (define-extern texture-usage-update function) ;; (function texture symbol) +;; (define-extern merc-stats-display function) ;; (function merc-ctrl none) +;; (define-extern merc-stats function) ;; (function none) +;; (define-extern merc-edge-stats function) ;; (function none) +;; (define-extern merc-vu1-add-vu-function function) ;; (function dma-packet vu-function int dma-gif-packet) +;; (define-extern merc-vu1-initialize-chain function) ;; (function dma-gif-packet int dma-packet) +;; (define-extern merc-vu1-init-buffer function) ;; (function bucket-id int symbol int) +;; (define-extern merc-vu1-init-buffers function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; emerc ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern emerc-vu1-initialize-chain function) ;; (function dma-gif-packet dma-packet) +;; (define-extern emerc-vu1-init-buffer function) ;; (function bucket-id gs-test int none) +;; (define-extern emerc-vu1-init-buffers function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ripple ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ripple-request (structure) + ((waveform ripple-wave :offset-assert 0) ;; guessed by decompiler + (effect merc-effect :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype ripple-globals (structure) + ((count int32 :offset-assert 0) + (requests ripple-request 16 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) +|# + +;; (define-extern *ripple-globals* object) ;; ripple-globals +;; (define-extern ripple-make-request function) ;; (function ripple-wave merc-effect none) +;; (define-extern ripple-update-waveform-offs function) ;; (function ripple-wave-set clock none) +;; (define-extern ripple-execute-init function) ;; (function none) +;; (define-extern ripple-create-wave-table function) ;; (function ripple-wave-set int) +;; (define-extern ripple-apply-wave-table function) ;; (function merc-effect symbol) +;; (define-extern ripple-execute function) ;; (function none) +;; (define-extern ripple-matrix-scale function) ;; (function merc-effect none) +;; (define-extern ripple-add-debug-sphere function) ;; (function process-drawable vector float float none) +;; (define-extern ripple-slow-add-sine-waves function) ;; (function ripple-wave-set float float float) +;; (define-extern ripple-find-height function) ;; (function process-drawable int vector float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; bones ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *bone-calculation-list* object) ;; bone-calculation-list +;; (define-extern bone-list-init function) ;; (function none) +;; (define-extern bones-vu0-block object) ;; vu-function +;; (define-extern bones-set-sqwc function) ;; (function none) +;; (define-extern bones-reset-sqwc function) ;; (function none) +;; (define-extern bones-init function) ;; (function dma-buffer none) +;; (define-extern bones-mtx-calc function) ;; (function (inline-array pris-mtx) (inline-array joint) (inline-array bone) uint object none) +;; (define-extern bones-mtx-calc-execute function) ;; (function none) +;; (define-extern dump-qword function) ;; (function qword none) +;; (define-extern dump-mem function) ;; (function pointer int none) +;; (define-extern bones-debug function) ;; (function none) +;; (define-extern dump-bone-mem function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; debug-foreground ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern diag-frag-print function) ;; (function merc-effect int none) +;; (define-extern debug-merc-highres-runtime function) +;; (define-extern debug-merc-size-runtime function) +;; (define-extern debug-merc-fade-runtime function) +;; (define-extern foreground-check-longest-edge function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; foreground ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern foreground-vu0-block object) ;; vu-function +;; (define-extern generic-bucket-state-init function) ;; (function generic-bucket-state none) +;; (define-extern mercneric-chain-init function) ;; (function mercneric-chain bucket-id none) +;; (define-extern foreground-init function) ;; (function none) +;; (define-extern texscroll-make-request function) ;; (function merc-effect none) +;; (define-extern texscroll-execute function) ;; (function none) +;; (define-extern vu-lights<-light-group! function) ;; (function vu-lights light-group none) +;; (define-extern foreground-add-mtx-calc function) ;; (function bone-calculation (inline-array pris-mtx) bone-calc-flags bone-calculation) +;; (define-extern foreground-wrapup function) ;; (function none) +;; (define-extern *default-shadow-settings* object) ;; shadow-settings +;; (define-extern foreground-shadow function) ;; (function draw-control (inline-array pris-mtx) pointer pointer) +;; (define-extern foreground-generic-merc-death function) ;; (function draw-control generic-merc-ctrl none) +;; (define-extern foreground-generic-merc-add-fragments function) ;; (function merc-effect pointer mercneric-chain pointer) +;; (define-extern foreground-generic-merc function) ;; (function draw-control pointer int pointer) +;; (define-extern foreground-merc function) ;; (function draw-control (inline-array pris-mtx) pointer int int object pointer) +;; (define-extern foreground-emerc function) ;; (function draw-control (inline-array pris-mtx) pointer object int int pointer) +;; (define-extern foreground-check-longest-edge-asm function) ;; (function draw-control float symbol) +;; (define-extern foreground-ripple function) ;; (function draw-control merc-ctrl pointer int pointer) +;; (define-extern foreground-draw function) ;; (function draw-control dma-buffer float none) +;; (define-extern foreground-draw-hud function) ;; (function draw-control dma-buffer float none) +;; (define-extern *foreground* object) ;; foreground-globals +;; (define-extern *foreground-draw-engine* object) ;; engine + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-vu0 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern generic-vu0-block object) ;; vu-function + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-vu1 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern generic-vu1-block object) ;; vu-function +;; (define-extern generic-setup-constants function) ;; (function generic-constants none) +;; (define-extern generic-add-constants function) ;; (function dma-buffer none) +;; (define-extern generic-setup-shrub-constants function) ;; (function generic-shrub-constants int int int none) +;; (define-extern generic-add-shrub-constants function) ;; (function dma-buffer int int int none) +;; (define-extern generic-init-buf function) ;; (function dma-buffer gs-zbuf none) +;; (define-extern generic-vu1-init-buf function) ;; (function bucket-id gs-zbuf none) +;; (define-extern generic-vu1-init-buf-special function) ;; (function bucket-id gs-zbuf none) +;; (define-extern generic-vu1-init-buffers function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-effect ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *target-lock* object) ;; object +;; (define-extern *generic-consts* object) ;; generic-consts +;; (define-extern generic-work-init function) ;; (function generic-bucket-state none) +;; (define-extern generic-upload-vu0 function) ;; (function none) +;; (define-extern upload-vu0-program function) ;; (function vu-function pointer none) +;; (define-extern generic-initialize-without-sync function) ;; (function matrix vu-lights none) +;; (define-extern generic-initialize function) ;; (function generic-bucket-state matrix vu-lights none) +;; (define-extern generic-wrapup function) ;; (function generic-bucket-state none) +;; (define-extern generic-dma-from-spr function) +;; (define-extern generic-light-proc function) +;; (define-extern generic-envmap-proc function) +;; (define-extern generic-prepare-dma-double function) +;; (define-extern generic-prepare-dma-single function) +;; (define-extern generic-envmap-dproc function) +;; (define-extern generic-interp-dproc function) +;; (define-extern generic-no-light-proc function) +;; (define-extern generic-no-light-dproc-only function) +;; (define-extern generic-no-light-dproc function) +;; (define-extern generic-no-light+envmap function) +;; (define-extern generic-no-light function) +;; (define-extern generic-envmap-only-proc function) +;; (define-extern generic-light function) +;; (define-extern generic-copy-vtx-dclr-dtex function) +;; (define-extern generic-none function) +;; (define-extern generic-none-dma-wait function) +;; (define-extern *warp-data* object) ;; object +;; (define-extern generic-warp-source-proc function) ;; (function none) +;; (define-extern generic-warp-source function) ;; (function gsf-buffer none) +;; (define-extern generic-warp-dest-proc function) +;; (define-extern generic-warp-dest function) +;; (define-extern generic-warp-envmap-dest function) +;; (define-extern generic-debug-light-proc function) +;; (define-extern generic-post-debug function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-merc ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype invinitdata (structure) + ((count uint8 :offset-assert 0) + (init-data uint8 :offset-assert 1) + (init-addr uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (define-extern mercneric-vu0-block object) ;; vu-function +;; (define-extern *inv-init-table* object) ;; (inline-array invinitdata) +;; (define-extern generic-merc-init-asm function) ;; (function none) +;; (define-extern mercneric-matrix-asm function) +;; (define-extern mercneric-shader-asm function) +;; (define-extern mercneric-bittable-asm function) +;; (define-extern mercneric-convert function) +;; (define-extern high-speed-reject function) +;; (define-extern generic-translucent function) ;; (function gsf-buffer none) +;; (define-extern generic-merc-query function) +;; (define-extern generic-merc-death function) +;; (define-extern generic-merc-execute-asm function) +;; (define-extern generic-merc-do-chain function) ;; (function mercneric-chain dma-buffer pointer) +;; (define-extern generic-merc-execute-all function) ;; (function dma-buffer none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-tie ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; gsf-vertex is already defined! + +;; (define-extern generic-tie-dma-to-spad function) +;; (define-extern generic-tie-dma-to-spad-sync function) +;; (define-extern *generic-tie* object) +;; (define-extern generic-tie-decompress function) +;; (define-extern generic-tie-upload-next function) +;; (define-extern generic-tie-convert-proc function) +;; (define-extern generic-tie-convert function) +;; (define-extern generic-tie-display-stats function) +;; (define-extern generic-tie-debug function) +;; (define-extern generic-tie-execute function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shadow-cpu ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype shadow-stats (structure) + ((num-single-tris uint32 :offset-assert 0) + (num-double-tris uint32 :offset-assert 4) + (num-single-edges uint32 :offset-assert 8) + (num-double-edges uint32 :offset-assert 12) + (num-fragments uint16 :offset-assert 16) + (num-objects uint16 :offset-assert 18) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype shadow-dcache (structure) + ((vtx-table uint32 :offset-assert 0) + (single-edge-table uint32 :offset-assert 4) + (double-edge-table uint32 :offset-assert 8) + (double-tri-table uint32 :offset-assert 12) + (dcache-top uint32 :offset-assert 16) + (num-facing-single-tris uint32 :offset-assert 20) + (num-single-edges uint32 :offset-assert 24) + (num-double-edges uint32 :offset-assert 28) + (single-tri-list uint32 :offset-assert 32) + (single-edge-list uint32 :offset-assert 36) + (double-edge-list uint32 :offset-assert 40) + (ptr-dual-verts uint32 :offset-assert 44) + (stats shadow-stats :inline :offset-assert 48) + (frag-qwc uint32 :offset-assert 68) + (center vector :inline :offset-assert 80) + (plane vector :inline :offset-assert 96) + (top-plane vector :inline :offset-assert 112) + (near-plane vector :inline :offset-assert 128) + (light-dir vector :inline :offset-assert 144) + (vtx-min vector :inline :offset-assert 160) + (data uint8 :dynamic :offset-assert 176) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xb0 + :flag-assert #x9000000b0 + ) + +(define-extern *shadow-data* shadow-data) +(define-extern shadow-invert-z-buf (function dma-buffer none)) +(define-extern shadow-make-invert-buf (function none)) +(define-extern shadow-dma-init (function dma-buffer none)) +(define-extern shadow-dma-end (function dma-buffer gs-rgbaq symbol int none)) +(define-extern shadow-vu0-block vu-function) +(define-extern shadow-xform-verts function) +(define-extern shadow-calc-dual-verts function) +(define-extern shadow-scissor-edges function) +(define-extern shadow-scissor-top function) +(define-extern shadow-init-vars function) +(define-extern shadow-find-facing-single-tris function) +(define-extern shadow-find-single-edges function) +(define-extern shadow-find-facing-double-tris function) +(define-extern shadow-find-double-edges function) +(define-extern shadow-add-verts function) +(define-extern shadow-add-facing-single-tris function) +(define-extern shadow-add-single-edges function) +(define-extern shadow-add-single-tris function) +(define-extern shadow-add-double-tris function) +(define-extern shadow-add-double-edges function) +(define-extern debug-draw-settings (function shadow-settings symbol)) +(define-extern shadow-execute (function shadow-dma-packet pointer pointer)) +(define-extern shadow-vu0-upload (function none)) +(define-extern shadow-execute-all (function dma-buffer none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shadow-vu1 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype shadow-vu1-constants (structure) + ((hmgescale vector :inline :offset-assert 0) + (invhscale vector :inline :offset-assert 16) + (texoffset vector :inline :offset-assert 32) + (texscale vector :inline :offset-assert 48) + (hvdfoff vector :inline :offset-assert 64) + (fog vector :inline :offset-assert 80) + (clrs vector 2 :offset-assert 96) ;; guessed by decompiler + (adgif gs-gif-tag :inline :offset-assert 128) + (texflush gs-adcmd :inline :offset-assert 144) + (flush gs-adcmd :inline :offset-assert 160) + (trigif gs-gif-tag :inline :offset-assert 176) + (quadgif gs-gif-tag :inline :offset-assert 192) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) +|# + +#| +(deftype shadow-vu1-data (structure) + ((adgif gs-gif-tag :inline :offset-assert 0) + (ad gs-adcmd :inline :offset-assert 16) + (flush gs-adcmd :inline :offset-assert 32) + (trigif gs-gif-tag :inline :offset-assert 48) + (quadgif gs-gif-tag :inline :offset-assert 64) + (texoffset vector :inline :offset-assert 80) + (texscale vector :inline :offset-assert 96) + (clrs qword 2 :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +;; (define-extern *shadow-vu1-data* object) ;; shadow-vu1-data +;; (define-extern shadow-vu1-block object) ;; vu-function +;; (define-extern shadow-vu1-add-constants function) ;; (function dma-buffer int none) +;; (define-extern shadow-vu1-patch-consts function) ;; (function symbol int none) +;; (define-extern shadow-vu1-add-matrix function) ;; (function dma-buffer math-camera none) +;; (define-extern shadow-vu1-init-buffer function) ;; (function dma-buffer int none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; warp ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern fx-copy-init (function dma-buffer viewport int)) +(define-extern warp-shader-init (function viewport int)) +(define-extern fx-copy-buf (function dma-buffer viewport none)) +(define-extern init-warp (function int)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hflip ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern hflip-zbuf-init (function dma-buffer viewport int)) +(define-extern hflip-z-buf (function dma-buffer viewport int)) +(define-extern init-hflip-zbuf (function int)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-anim ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *texture-anim-work* object) ;; texture-anim-work +;; (define-extern texture-anim-layer-interp function) ;; (function texture-anim-layer float none) +;; (define-extern texture-anim-layer-add-shader function) ;; (function dma-buffer texture-anim-layer int none) +;; (define-extern texture-anim-layer-add-clut-shader function) ;; (function dma-buffer texture-anim-layer int none) +;; (define-extern texture-anim-layer-draw function) ;; (function dma-buffer int int texture-anim-layer none) +;; (define-extern default-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern blend-clut-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern add-clut-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern dest-blend-clut-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern move-rg-to-ba-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern fill-rgb-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern texture-anim-draw-mip-shader function) ;; (function dma-buffer texture int none) +;; (define-extern clear-texture-ids function) ;; (function texture none) +;; (define-extern texture-anim-draw-mips function) ;; (function dma-buffer texture none) +;; (define-extern texture-anim-draw-ocean-mips function) +;; (define-extern update-texture-anim function) ;; (function bucket-id texture-anim-array none) +;; (define-extern no-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern copy-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern copy-clut-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern set-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern set-clut-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int) +;; (define-extern dest-texture-init function) ;; (function texture-anim none) +;; (define-extern src-texture-init function) ;; (function texture-anim-layer none) +;; (define-extern src-texture-init-mt8 function) ;; (function texture-anim-layer none) +;; (define-extern make-noise-texture function) ;; (function pointer int int int none) +;; (define-extern make-cloud-clut function) ;; (function (pointer uint32) float float none) +;; (define-extern texture-anim-cloud-clut-upload function) ;; (function dma-buffer texture-anim none) +;; (define-extern texture-anim-cloud-clut-init function) ;; (function texture-anim none) +;; (define-extern make-slime-clut function) ;; (function (pointer uint32) none) +;; (define-extern make-ramp-clut function) ;; (function (pointer uint32) pointer object none) +;; (define-extern make-alpha-ramp-clut function) ;; (function (pointer uint32) none) +;; (define-extern texture-anim-alpha-ramp-clut-upload function) ;; (function dma-buffer texture-anim none) +;; (define-extern texture-anim-alpha-ramp-clut-init function) ;; (function texture-anim none) +;; (define-extern texture-anim-override-size-init function) +;; (define-extern texture-anim-change-mt8h-init function) ;; (function texture-anim none) +;; (define-extern *texture-anim-pages-table* object) ;; (pointer uint8) +;; (define-extern *texture-anim-mip-array* object) ;; (pointer uint16) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-anim-funcs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *fog-texture-tbp* object) +;; (define-extern fog-texture-anim-init function) ;; (function texture-anim int) +;; (define-extern fog-texture-anim-init2 function) +;; (define-extern *fog-texture-work* object) ;; fog-texture-work +;; (define-extern real-fog-texture-anim-func function) ;; (function dma-buffer texture-anim int) +;; (define-extern fog-texture-anim-func function) ;; (function dma-buffer texture-anim int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; texture-anim-tables ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype car-texture-anim-array-work (structure) + ((sprite-tmpl dma-gif-packet :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +;; (define-extern *sky-texture-anim-array* texture-anim-array) ;; (texture-anim-array texture-anim) +;; (define-extern set-fog-height! function) ;; (function float none) +;; (define-extern set-cloud-minmax! function) ;; (function float float none) +;; (define-extern *default-pris-texture-anim-array* texture-anim-array) +;; (define-extern *car-texture-anim-array-work* object) +;; (define-extern car-texture-anim-layer-func function) +;; (define-extern *default-car-texture-anim-array* texture-anim-array) +;; (define-extern set-car-highlight! function) +;; (define-extern update-car-texture-anim-array function) +;; (define-extern *default-water-texture-anim-array* texture-anim-array) ;; (texture-anim-array texture-anim) +;; (define-extern *default-hud-texture-anim-array* texture-anim-array) +;; (define-extern *ctf-pris-texture-anim-array* texture-anim-array) +;; (define-extern *ctf-water-texture-anim-array* texture-anim-array) +;; (define-extern *fcshield-water-texture-anim-array* texture-anim-array) +;; (define-extern *this-way-water-texture-anim-array* texture-anim-array) +;; (define-extern this-way-water-texture-anim-func function) +;; (define-extern *ocean-texture-anim-array* texture-anim-array) +;; (define-extern ocean-texture-anim-time-func function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; blit-displays ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype blur-coords (structure) + ((pos UNKNOWN 8 :offset-assert 0) + (tex UNKNOWN 8 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +;; (define-extern *blit-displays-work* object) ;; blit-displays-work +;; (define-extern clear-zbuf function) +;; (define-extern draw-color-bars function) ;; (function blit-displays-work none) +;; (define-extern draw-raw-image function) ;; (function bucket-id art-group int vector vector level int none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; font-data ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *font12-table* object) ;; (inline-array vector) +;; (define-extern *font24-table* object) ;; (inline-array vector) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; font ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype draw-string-result (uint64) + ((length float :offset 0) + (b float :offset 32)) + ) + +;; (define-extern *font-random-generator* object) +;; (define-extern *font-curve-ghosting* array) +;; (define-extern *font-curve-ghosting-2* array) +;; (define-extern evaluate-font-curve function) +;; (define-extern in-out-curve function) +;; (define-extern char-effect-compute-colors function) +;; (define-extern char-effect-compute2 function) +;; (define-extern *loading-pad-leftx* object) +;; (define-extern *loading-pad-lefty* object) +;; (define-extern *loading-pad-rightx* object) +;; (define-extern *loading-pad-righty* object) +;; (define-extern char-effect-compute function) +;; (define-extern draw-string-init-justify function) +;; (define-extern draw-string-no-asm function) +;; (define-extern draw-string-asm-packed function) +;; (define-extern draw-string3d-asm function) +;; (define-extern draw-effect-string function) +(define-extern draw-string (function string dma-buffer font-context draw-string-result)) +;; (define-extern get-string-length-asm function) +(define-extern get-string-length (function string font-context draw-string-result)) +(define-extern draw-string-xy (function string dma-buffer int int font-color font-flags draw-string-result)) +(define-extern draw-string-adv (function string dma-buffer font-context none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; decomp ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (define-extern unpack-comp-rle function) ;; (function (pointer int8) (pointer int8) (pointer int8)) +;; (define-extern unpack-comp-huf function) ;; (function (pointer uint8) (pointer uint8) uint huf-dictionary-node none) +;; (define-extern unpack-comp-lzo function) ;; (function (pointer uint8) (pointer uint8) none) +;; (define-extern pack-comp-rle function) ;; (function (pointer uint8) (pointer uint8) int int (pointer uint8)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; background ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *background-work* object) ;; background-work +;; (define-extern background-vu0-block object) ;; vu-function +;; (define-extern background-upload-vu0 function) ;; (function none) +;; (define-extern init-background function) ;; (function none) +;; (define-extern upload-vis-bits function) ;; (function level level bsp-header none) +;; (define-extern set-background-regs! function) ;; (function level none) +;; (define-extern set-tie-guard-planes! function) +;; (define-extern set-shrub-guard-planes! function) +;; (define-extern set-subdivide-settings! function) ;; (function level none) +;; (define-extern finish-shrub function) +;; (define-extern finish-tfrag function) +;; (define-extern finish-tfrag-trans function) +;; (define-extern finish-tfrag-water function) +;; (define-extern finish-tie function) +;; (define-extern finish-texture-mask function) +;; (define-extern finish-texture function) +;; (define-extern finish-background function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; draw-node ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype drawable-inline-array-node (drawable-inline-array) + ((length int16 :offset-assert 2) + (data draw-node :dynamic :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 17 + :size-assert #x44 + :flag-assert #x1100000044 + ) +|# + +;; (define-extern draw-node-cull function) ;; (function pointer pointer (inline-array draw-node) int none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shrubbery ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype dma-test (structure) + ((data qword 101 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x650 + :flag-assert #x900000650 + ) +|# + +#| +(deftype dma-test-work (structure) + ((upload dma-packet :inline :offset-assert 0) + (end dma-packet :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype prototype-shrubbery (drawable-inline-array) + ((length int16 :offset-assert 2) + (data shrubbery :dynamic :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 17 + :size-assert #x44 + :flag-assert #x1100000044 + ) +|# + +;; (define-extern mem-usage-shrub-walk function) ;; (function draw-node int memory-usage-block int draw-node) +;; (define-extern highres-shrub-login function) ;; (function draw-node none) +;; (define-extern highres-prototype-shrub-login function) +;; (define-extern shrub-vu1-block object) ;; vu-function +;; (define-extern shrub-num-tris function) ;; (function shrubbery uint) +;; (define-extern shrub-make-perspective-matrix function) ;; (function matrix matrix matrix) +;; (define-extern shrub-init-view-data function) ;; (function shrub-view-data symbol) +;; (define-extern shrub-upload-view-data function) ;; (function dma-buffer symbol) +;; (define-extern shrub-time function) ;; (function int int int int int int) +;; (define-extern shrub-do-init-frame function) ;; (function dma-buffer symbol) +;; (define-extern shrub-init-frame function) ;; (function dma-buffer gs-test symbol) +;; (define-extern shrub-upload-model function) ;; (function shrubbery dma-buffer int symbol) +;; (define-extern draw-inline-array-instance-shrub function) ;; (function dma-buffer drawable int (inline-array prototype-bucket-shrub) none) +;; (define-extern draw-prototype-inline-array-shrub function) ;; (function int (inline-array prototype-bucket-shrub) pointer) +;; (define-extern draw-drawable-tree-instance-shrub function) ;; (function drawable-tree-instance-shrub level none) +;; (define-extern *dma-test* object) ;; dma-test +;; (define-extern *dma-test-work* object) ;; dma-test-work +;; (define-extern init-dma-test function) ;; (function none) +;; (define-extern dma-test-func function) ;; (function none) +;; (define-extern move-test-func function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; shrub-work ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *instance-shrub-work* object) ;; instance-shrub-work + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tfrag-near ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern tnear-vu1-block object) ;; vu-function +;; (define-extern tfrag-details function) ;; (function tfragment none) +;; (define-extern clip-restore function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tfrag ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype drawable-inline-array-tfrag (drawable-inline-array) + ((length int16 :offset-assert 2) + (data tfragment :dynamic :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 17 + :size-assert #x64 + :flag-assert #x1100000064 + ) +|# + +;; (define-extern *tfrag-display-stats* object) ;; symbol +;; (define-extern tfrag-vu1-block object) ;; vu-function +;; (define-extern tfrag-data-setup function) ;; (function tfrag-data int int none) +;; (define-extern add-tfrag-mtx-0 function) ;; (function dma-buffer symbol none) +;; (define-extern add-tfrag-mtx-1 function) ;; (function dma-buffer symbol none) +;; (define-extern add-tfrag-data function) ;; (function dma-buffer int int none) +;; (define-extern t-stat object) ;; tfrag-stats +;; (define-extern tfrag-print-stats function) ;; (function symbol none) +;; (define-extern tfrag-init-buffer function) ;; (function dma-buffer gs-test int symbol none) +;; (define-extern tfrag-end-buffer function) ;; (function dma-buffer int none) +;; (define-extern draw-inline-array-tfrag function) ;; (function pointer drawable-inline-array int dma-buffer none) +;; (define-extern tfrag-scissor-init-buffer function) ;; (function dma-buffer gs-test int symbol none) +;; (define-extern tfrag-scissor-end-buffer function) ;; (function dma-buffer uint none) +;; (define-extern draw-inline-array-tfrag-scissor function) ;; (function pointer drawable-inline-array int dma-buffer none) +;; (define-extern stats-tfrag-asm function) ;; (function tfragment none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tfrag-methods ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tfrag-init-data (structure) + ((tfrag-bucket int32 :offset-assert 0) ;; bucket-id + (tfrag-scissor-bucket int32 :offset-assert 4) ;; bucket-id + (tfrag-trans-bucket int32 :offset-assert 8) ;; bucket-id + (tfrag-scissor-trans-bucket int32 :offset-assert 12) ;; bucket-id + (tfrag-water-bucket int32 :offset-assert 16) ;; bucket-id + (tfrag-water-scissor-bucket int32 :offset-assert 20) ;; bucket-id + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +;; (define-extern edge-debug-lines function) ;; (function (array vector-array) none) +;; (define-extern draw-drawable-tree-tfrag function) ;; (function drawable-tree-tfrag none) +;; (define-extern draw-drawable-tree-tfrag-trans function) ;; (function drawable-tree-tfrag none) +;; (define-extern draw-drawable-tree-tfrag-water function) ;; (function drawable-tree-tfrag none) +;; (define-extern tfrag-vu1-init-buf function) ;; (function bucket-id gs-test int uint symbol none) +;; (define-extern tfrag-scissor-vu1-init-buf function) ;; (function bucket-id gs-test int uint symbol none) +;; (define-extern *tfrag-init-table* object) ;; (inline-array tfrag-init-data) +;; (define-extern tfrag-vu1-init-buffers function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tfrag-work ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *tfrag-work* object) ;; tfrag-work + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tie ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tie-consts (structure) + ((data uint32 40 :offset-assert 0) ;; guessed by decompiler + (vector vector 10 :offset-assert 0) ;; guessed by decompiler + (quads uint128 10 :offset-assert 0) ;; guessed by decompiler + (adgif qword :inline :offset-assert 0) ;; gs-gif-tag :inline + (strgif qword :inline :offset-assert 16) ;; gs-gif-tag :inline + (extra qword :inline :offset-assert 32) ;; vector :inline + (gifbufs qword :inline :offset-assert 48) ;; vector :inline + (clrbufs qword :inline :offset-assert 64) + (misc qword :inline :offset-assert 80) + (atestgif qword :inline :offset-assert 96) ;; gs-gif-tag :inline + (alpha qword :inline :offset-assert 112) ;; gs-adcmd :inline + (atest gs-adcmd 2 :offset-assert 128) ;; guessed by decompiler + (atest-tra gs-adcmd :inline :offset-assert 128) + (atest-def gs-adcmd :inline :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) +|# + +#| +(deftype drawable-inline-array-instance-tie (drawable-inline-array) + ((length int16 :offset-assert 2) + (data instance-tie :dynamic :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 17 + :size-assert #x64 + :flag-assert #x1100000064 + ) +|# + +#| +(deftype prototype-tie (drawable-inline-array) + ((length int16 :offset-assert 2) + (data tie-fragment :dynamic :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 17 + :size-assert #x64 + :flag-assert #x1100000064 + ) +|# + +;; (define-extern tie-vu1-block object) ;; vu-function +;; (define-extern tie-init-consts function) ;; (function tie-consts gs-alpha gs-test gs-test none) +;; (define-extern tie-init-engine function) ;; (function dma-buffer gs-alpha gs-test gs-test none) +;; (define-extern tie-end-buffer function) ;; (function dma-buffer none) +;; (define-extern tie-int-reg function) ;; (function int string) +;; (define-extern tie-float-reg function) ;; (function int string) +;; (define-extern tie-ints function) ;; (function none) +;; (define-extern tie-floats function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; etie-vu1 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype etie-consts (structure) + ((gifbufs qword :inline :offset-assert 0) + (adgif qword :inline :offset-assert 16) ;; gs-gif-tag :inline + (alpha qword :inline :offset-assert 32) + (strgif qword :inline :offset-assert 48) ;; gs-gif-tag :inline + (envgif qword :inline :offset-assert 64) ;; gs-gif-tag :inline + (envmap adgif-shader :inline :offset-assert 80) + (pers0 vector :inline :offset-assert 160) + (pers1 vector :inline :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) +|# + +#| +(deftype etie-matrix (structure) + ((rmtx matrix :inline :offset-assert 0) + (nmtx matrix3 :inline :offset-assert 64) + (morph float :offset-assert 76) + (fog float :offset-assert 92) + (fade uint32 :offset-assert 108) + (tint qword :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +;; (define-extern etie-vu1-block object) ;; vu-function +;; (define-extern etie-magic function) ;; (function int int) +;; (define-extern etie-init-consts function) ;; (function etie-consts gs-alpha none) +;; (define-extern etie-init-engine function) ;; (function dma-buffer gs-alpha gs-test none) +;; (define-extern etie-end-buffer function) ;; (function dma-buffer none) +;; (define-extern etie-float-reg-bp function) +;; (define-extern etie-float-reg function) +;; (define-extern etie-floats function) +;; (define-extern etie-int-reg function) +;; (define-extern etie-ints function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; etie-near-vu1 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype etn-consts (structure) + ((gifbufs qword :inline :offset-assert 0) + (adgif qword :inline :offset-assert 16) + (alpha qword :inline :offset-assert 32) + (strgif generic-gif-tag :inline :offset-assert 48) + (envgif generic-gif-tag :inline :offset-assert 64) + (envmap adgif-shader :inline :offset-assert 80) + (pers0 vector :inline :offset-assert 160) + (pers1 vector :inline :offset-assert 176) + (hvdf vector :inline :offset-assert 192) + (invh vector :inline :offset-assert 208) + (guard vector :inline :offset-assert 224) + ) + :method-count-assert 9 + :size-assert #xf0 + :flag-assert #x9000000f0 + ) +|# + +#| +(deftype etn-matrix (structure) + ((rmtx matrix :inline :offset-assert 0) + (nmtx matrix3 :inline :offset-assert 64) + (morph float :offset-assert 76) + (fog float :offset-assert 92) + (fade uint32 :offset-assert 108) + (tint qword :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype etn-vtx (structure) + ((pos vector :inline :offset-assert 0) + (clr vector :inline :offset-assert 16) + (tex vector :inline :offset-assert 32) + (tx2 vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype etn-plane (structure) + ((point uint32 :offset-assert 0) + (prev uint32 :offset-assert 4) + (outfunc uint32 :offset-assert 8) + (flags uint32 :offset-assert 12) + (out etn-vtx :inline :offset-assert 16) + (in etn-vtx :inline :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +;; (define-extern etn-vu1-block object) +;; (define-extern etn-magic function) +;; (define-extern etn-init-consts function) +;; (define-extern etn-init-engine function) +;; (define-extern etn-end-buffer function) +;; (define-extern etn-float-reg-calc function) +;; (define-extern etn-float-reg function) +;; (define-extern etn-floats function) +;; (define-extern etn-int-reg-draw function) +;; (define-extern etn-int-reg function) +;; (define-extern etn-ints function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tie-near ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tie-near-consts (structure) + ((extra qword :inline :offset-assert 0) + (gifbufs qword :inline :offset-assert 16) + (clrbufs qword :inline :offset-assert 32) + (adgif qword :inline :offset-assert 48) + (strgif qword :inline :offset-assert 64) + (fangif qword :inline :offset-assert 80) + (hvdfoffs vector :inline :offset-assert 96) + (invhscale vector :inline :offset-assert 112) + (guard vector :inline :offset-assert 128) + (atest UNKNOWN 2 :offset-assert 144) + (atest-tra gs-adcmd :inline :offset-assert 144) + (atest-def gs-adcmd :inline :offset-assert 160) + ) + :method-count-assert 9 + :size-assert #xb0 + :flag-assert #x9000000b0 + ) +|# + +;; (define-extern tie-near-vu1-block object) +;; (define-extern tie-near-init-consts function) +;; (define-extern tie-near-init-engine function) +;; (define-extern tie-near-end-buffer function) +;; (define-extern tie-scissor-make-perspective-matrix function) ;; (function matrix matrix none) +;; (define-extern tie-near-int-reg function) +;; (define-extern tie-near-float-reg function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tie-work ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *instance-tie-work* object) ;; instance-tie-work +;; (define-extern *prototype-tie-work* object) ;; prototype-tie-work + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; tie-methods ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype tie-debug (structure) + ((max-instance uint32 :offset-assert 0) + (min-instance uint32 :offset-assert 4) + (test-fragment uint32 :offset-assert 8) + (frag-count uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +;; (define-extern *tie* object) ;; tie-debug +;; (define-extern tie-debug-between function) ;; (function uint uint uint) +;; (define-extern tie-debug-one function) ;; (function uint uint uint) +;; (define-extern tie-debug-frag-between function) ;; (function uint uint uint) +;; (define-extern tie-debug-frag-one function) ;; (function uint uint uint) +;; (define-extern walk-tie-generic-prototypes function) ;; (function none) +;; (define-extern *pke-hack* object) ;; vector +;; (define-extern draw-inline-array-instance-tie function) ;; (function pointer (inline-array instance-tie) int dma-buffer none) +;; (define-extern draw-inline-array-prototype-tie-asm function) ;; (function dma-buffer int prototype-array-tie none) +;; (define-extern draw-inline-array-prototype-tie-shared-asm function) +;; (define-extern instance-tie-patch-buckets function) ;; (function dma-buffer level object) +;; (define-extern draw-drawable-tree-instance-tie function) ;; (function drawable-tree-instance-tie level none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; prim ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *prim-work* object) ;; prim-work +;; (define-extern *level-texture-page-translate* array) +;; (define-extern *foreground-to-level-translate* array) +;; (define-extern prim-engine-execute function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; trajectory ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern traj2d-calc-initial-speed-using-tilt function) ;; (function traj2d-params symbol) +;; (define-extern traj3d-calc-initial-velocity-using-tilt function) ;; (function traj3d-params symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparticle-launcher ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sp-queued-launch-particles (structure) + ((sp-system sparticle-system :offset-assert 0) ;; guessed by decompiler + (sp-launcher sparticle-launcher :offset-assert 4) ;; guessed by decompiler + (pos vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype sp-launch-queue (basic) + ((in-use int32 :offset-assert 4) + (queue sp-queued-launch-particles 256 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x2010 + :flag-assert #x900002010 + ) +|# + +#| +(deftype particle-adgif-cache (basic) + ((used int32 :offset-assert 4) + (last uint16 :offset-assert 8) + (lastgif adgif-shader :offset-assert 12) + (tidhash uint16 80 :offset-assert 16) ;; guessed by decompiler + (spadgif adgif-shader 80 :offset-assert 176) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x19b0 + :flag-assert #x9000019b0 + ) +|# + +#| +(deftype sp-launch-stack (structure) + ((ra basic :offset-assert 0) + (dummy0 basic :offset-assert 4) + (dummy1 basic :offset-assert 8) + (b-spfic basic :offset-assert 12) + (r16 uint128 :offset-assert 16) + (r17 uint128 :offset-assert 32) + (r18 uint128 :offset-assert 48) + (pos uint128 :offset-assert 64) + (matrix matrix :inline :offset-assert 80) + (l-spfic basic :offset-assert 144) + (birth-info sparticle-birthinfo :inline :offset-assert 160) + (sprite sprite-vec-data-2d :inline :offset-assert 192) + (r19 uint128 :offset-assert 240) + (r20 uint128 :offset-assert 256) + (r21 uint128 :offset-assert 272) + (r22 uint128 :offset-assert 288) + (is-3d uint128 :offset-assert 304) + ) + :method-count-assert 9 + :size-assert #x140 + :flag-assert #x900000140 + ;; field ra uses ~A with a signed load. field dummy0 uses ~A with a signed load. field dummy1 uses ~A with a signed load. field b-spfic uses ~A with a signed load. field l-spfic uses ~A with a signed load. + ) +|# + +;; sparticle-launcher is already defined! + +;; (define-extern *part-id-table* object) ;; (array sparticle-launcher) +;; (define-extern *part-group-id-table* object) ;; (array sparticle-launch-group) +;; (define-extern *launch-control-table* object) +;; (define-extern *sp-temp* object) ;; float +;; (define-extern count-launch-controls-in-table function) +;; (define-extern lookup-part-group-by-name function) ;; (function string sparticle-launch-group) +;; (define-extern lookup-part-group-pointer-by-name function) ;; (function string (pointer object)) +;; (define-extern part-group-pointer? function) ;; (function pointer symbol) +;; (define-extern unlink-part-group-by-heap function) ;; (function kheap int) +;; (define-extern sp-init-fields! function) ;; (function (pointer float) (inline-array sp-field-init-spec) sp-field-id sp-field-id symbol (inline-array sp-field-init-spec)) +;; (define-extern *sp-launcher-lock* object) ;; symbol +;; (define-extern *sp-launch-queue* object) ;; sp-launch-queue +;; (define-extern *sp-launcher-enable* object) ;; symbol +;; (define-extern particle-setup-adgif function) ;; (function adgif-shader int none) +;; (define-extern *particle-adgif-cache* object) ;; particle-adgif-cache +;; (define-extern particle-adgif-cache-flush function) ;; (function none) +;; (define-extern particle-adgif function) ;; (function adgif-shader texture-id none) +;; (define-extern particle-adgif-callback function) ;; (function adgif-shader texture-id none) +;; (define-extern sp-queue-launch function) ;; (function sparticle-system sparticle-launcher matrix int) +;; (define-extern sp-adjust-launch function) ;; (function sparticle-launchinfo sparticle-cpuinfo (inline-array sp-field-init-spec) matrix symbol none) +;; (define-extern sp-euler-convert function) ;; (function sparticle-launchinfo sparticle-cpuinfo none) +;; (define-extern sp-rotate-system function) ;; (function sparticle-launchinfo sparticle-cpuinfo transformq none) +;; (define-extern sp-launch-particles-var function) ;; (function sparticle-system sparticle-launcher matrix sparticle-launch-state sparticle-launch-control float none) +;; (define-extern *death-adgif* object) ;; adgif-shader +;; (define-extern sp-launch-particles-death function) ;; (function sparticle-system sparticle-launcher vector none) +;; (define-extern sp-clear-queue function) ;; (function none) +;; (define-extern sp-relaunch-setup-fields function) ;; (function object sparticle-launcher sparticle-cpuinfo sprite-vec-data-3d none) +;; (define-extern sp-relaunch-particle-2d function) ;; (function object sparticle-launcher sparticle-cpuinfo sprite-vec-data-2d none) +;; (define-extern sp-relaunch-particle-3d function) ;; (function object sparticle-launcher sparticle-cpuinfo sprite-vec-data-3d none) +;; (define-extern get-matching-control-table-index function) +;; (define-extern kill-all-particles-with-control function) +;; (define-extern execute-particle-local-space-engine function) ;; (function int none) +;; (define-extern local-space-camera function) ;; (function particle-local-space-info none) +;; (define-extern local-space-proc-joint function) ;; (function particle-local-space-info none) +;; (define-extern local-space-proc-root function) +;; (define-extern spawn-level-particles-for-camera function) +;; (define-extern execute-part-engine function) ;; (function none) +;; (define-extern check-particles function) +;; (define-extern sparticle-track-root function) ;; (function object sparticle-cpuinfo vector none) +;; (define-extern sparticle-track-root-prim function) ;; (function object sparticle-cpuinfo vector none) +;; (define-extern sparticle-track-joint function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern sparticle-turn-to-vel function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d none) +;; (define-extern sparticle-rotate-to-vel-3d function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d vector none) +;; (define-extern birth-func-clean function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-process-clock function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-copy-rot-color function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern *global-toggle* object) ;; int +;; (define-extern birth-func-copy2-rot-color function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-copy-omega-to-z function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-random-next-time function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern sparticle-respawn-heights function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern sparticle-respawn-timer function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern sparticle-texture-animate function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern sparticle-texture-day-night function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-2d none) +;; (define-extern sparticle-motion-blur function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern sparticle-motion-blur-old function) ;; (function object sparticle-cpuinfo sprite-vec-data-3d object) +;; (define-extern sparticle-set-conerot function) ;; (function sparticle-launcher vector none) +;; (define-extern check-ground-bounce function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo float) +;; (define-extern check-drop-group-center function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern check-drop-group-center-with-offset function) +;; (define-extern check-bubble-height function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern check-raise-group-center function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern birth-func-y->userdata function) ;; (function sparticle-system sparticle-cpuinfo matrix none) +;; (define-extern birth-func-ocean-height function) ;; (function sparticle-system sparticle-cpuinfo matrix none) +;; (define-extern birth-func-camera-orient function) ;; (function int sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern birth-func-set-parent-pntr function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-get-parent-quat function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern spt-func-camera-facing-orbiter function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo quaternion) +;; (define-extern *particle-birth-work* object) +;; (define-extern birth-func-set-quat function) ;; (function int sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern birth-func-add-vel function) +;; (define-extern birth-func-set-vel function) ;; (function object sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern birth-func-set-vel-2d function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern birth-func-set-vel-range function) +;; (define-extern birth-func-texture-group function) ;; (function int sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern rot-to-particle function) ;; (function degrees sprite-vec-data-2d matrix none) +;; (define-extern rot-to-particle-no-flip function) +;; (define-extern birth-func-flip-based-on-scale function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern sparticle-2d-spline-align function) ;; (function object sparticle-cpuinfo sprite-vec-data-2d object none) +;; (define-extern sparticle-2d-spline-align-no-flip function) +;; (define-extern sparticle-2d-spline-align-instant function) ;; (function object sparticle-cpuinfo sprite-vec-data-2d none) +;; (define-extern birth-func-inherit-size function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-texture-group-2d function) ;; (function object sparticle-cpuinfo sparticle-launchinfo object object none) +;; (define-extern sparticle-3d-rotate-xz-to-camera function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d none) +;; (define-extern spt-func-relative-pos function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d none) +;; (define-extern spt-func-turn-to-vel-radial function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparticle-subsampler ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparticle ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern sp-particle-copy! function) ;; (function sparticle-cpuinfo sparticle-cpuinfo none) +;; (define-extern *sp-particle-system-2d* object) ;; sparticle-system +;; (define-extern *sp-particle-system-3d* object) ;; sparticle-system +;; (define-extern sp-get-block-size function) ;; (function sparticle-system int int) +;; (define-extern sp-get-approx-alloc-size function) ;; (function sparticle-system int int) +;; (define-extern sp-free-particle function) ;; (function sparticle-system int sparticle-cpuinfo sprite-vec-data-2d none) +;; (define-extern sp-get-particle function) ;; (function sparticle-system int sparticle-launch-state sparticle-cpuinfo) +;; (define-extern sp-kill-particle function) ;; (function sparticle-system sparticle-cpuinfo symbol) +;; (define-extern sp-orbiter function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern sp-process-block-2d function) ;; (function sparticle-system int int int int symbol none) +;; (define-extern sp-process-block-3d function) ;; (function sparticle-system int int int int symbol none) +;; (define-extern sp-copy-to-spr function) ;; (function int pointer int none) +;; (define-extern sp-copy-from-spr function) ;; (function int pointer int none) +;; (define-extern memcpy function) ;; (function pointer pointer none) +;; (define-extern sp-process-block function) ;; (function sparticle-system int sprite-array-2d int none) +;; (define-extern sp-process-particle-system function) ;; (function sparticle-system int sprite-array-2d none) +;; (define-extern *particles-flag* object) ;; symbol +;; (define-extern forall-particles-with-control-runner function) +;; (define-extern forall-particles-with-control function) +;; (define-extern sparticle-kill-it function) ;; (function sparticle-system sparticle-cpuinfo none) +;; (define-extern sparticle-60-to-50 function) ;; (function sparticle-system sparticle-cpuinfo pointer none) +;; (define-extern sparticle-50-to-60 function) ;; (function sparticle-system sparticle-cpuinfo pointer none) +;; (define-extern forall-particles-runner function) ;; (function (function sparticle-system sparticle-cpuinfo pointer none) sparticle-system none) +;; (define-extern forall-particles function) ;; (function function symbol symbol none) +;; (define-extern all-particles-50-to-60 function) ;; (function none) +;; (define-extern all-particles-60-to-50 function) ;; (function none) +;; (define-extern remap-particle function) ;; (function sparticle-system sparticle-cpuinfo pointer none) +;; (define-extern remap-all-particles function) ;; (function none) +;; (define-extern process-particles function) ;; (function none) +;; (define-extern spt-func-on-omega-height-die function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; entity-table ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *entity-info* (array entity-info)) +;; (define-extern entity-info-lookup (function type entity-info)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; loader ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype spooler-block (basic) + ((anim spool-anim :offset-assert 4) ;; guessed by decompiler + (idle art-joint-anim :offset-assert 8) ;; guessed by decompiler + (exit art-joint-anim :offset-assert 12) ;; guessed by decompiler + (break-func (function process-drawable object) :offset-assert 16) ;; guessed by decompiler + (flags spooler-flags :offset-assert 20) ;; guessed by decompiler + (part int32 :offset-assert 24) + (part-audio-start float :offset-assert 28) + (old-status uint16 :offset-assert 32) + (old-pos int32 :offset-assert 36) + (good-time uint64 :offset-assert 40) ;; time-frame + (old-time uint64 :offset-assert 48) ;; time-frame + (good-count int32 :offset-assert 56) + (sid sound-id :offset-assert 60) ;; guessed by decompiler + (start-time uint64 :offset-assert 64) + (paused? symbol :offset-assert 72) ;; guessed by decompiler + (frame-count int32 :offset-assert 76) + (frame-count2 float :offset-assert 80) + (next-frame-fmv basic :offset-assert 84) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) +|# + +#| +(deftype load-dir (basic) + ((level basic :offset-assert 4) + (allocated-length uint32 :offset-assert 8) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + ;; Failed to read some fields. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int level) _type_) + (load-dir-method-9 () none) ;; 9 ;; (load-to-heap-by-name (_type_ string symbol kheap int) art-group) + (load-dir-method-10 () none) ;; 10 ;; (set-loaded-art (_type_ art-group) art-group) + ) + ) +|# + +#| +(deftype gui-control (basic) + ((engine engine :offset-assert 4) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 26 + :size-assert #x1080 + :flag-assert #x1a00001080 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (gui-control-method-9 () none) ;; 9 ;; (add-process (_type_ process gui-channel gui-action string float time-frame) sound-id) + (gui-control-method-10 () none) ;; 10 ;; (remove-process (_type_ process gui-channel) int) + (gui-control-method-11 () none) ;; 11 ;; (stop-str (_type_ gui-connection) int) + (gui-control-method-12 () none) ;; 12 ;; (gui-control-method-12 (_type_ process gui-channel gui-action string int float sound-id) sound-id) + (gui-control-method-13 () none) ;; 13 ;; (update (_type_ symbol) int) + (gui-control-method-14 () none) ;; 14 ;; (lookup-gui-connection-id (_type_ string gui-channel gui-action) sound-id) + (gui-control-method-15 () none) ;; 15 ;; (lookup-gui-connection (_type_ process gui-channel string sound-id) gui-connection) + (gui-control-method-16 () none) ;; 16 ;; (set-action! (_type_ gui-action sound-id gui-channel gui-action string (function gui-connection symbol) process) int) + (gui-control-method-17 () none) ;; 17 ;; (get-status (_type_ sound-id) gui-status) + (gui-control-method-18 () none) ;; 18 ;; (gui-control-method-18 (_type_ gui-channel) symbol) + (gui-control-method-19 () none) ;; 19 ;; (handle-command-list (_type_ gui-channel gui-connection) symbol) + (gui-control-method-20 () none) ;; 20 ;; (sound-params-set! (_type_ sound-id symbol int int int float) gui-connection) + (gui-control-method-21 () none) ;; 21 ;; (gui-control-method-21 (_type_ gui-connection) int) + (gui-control-method-22 () none) ;; 22 ;; (gui-control-method-22 (_type_ gui-connection vector) int) + (gui-control-method-23 () none) ;; 23 ;; (update-connection (_type_ gui-connection process symbol) none) + (gui-control-method-24 () none) ;; 24 ;; (handle-command (_type_ gui-channel gui-channel symbol gui-connection) symbol) + (gui-control-method-25 () none) ;; 25 ;; (channel-id-set! (_type_ gui-connection sound-id) int) + ) + ) +|# + +;; (define-extern *image-scene-name* object) +;; (define-extern *image-scene-num* object) +;; (define-extern drawable-load function) ;; (function drawable kheap drawable) +;; (define-extern art-load function) ;; (function string kheap art) +;; (define-extern art-group-load-check function) ;; (function string kheap int art-group) +;; (define-extern external-art-buffer-init function) ;; (function external-art-buffer int) +;; (define-extern *preload-spool-anims* object) ;; symbol +;; (define-extern ja-play-spooled-anim function) ;; (function spool-anim art-joint-anim art-joint-anim (function process-drawable symbol) spooler-flags int :behavior process-drawable) +;; (define-extern ja-play-spooled-no-sync-anim function) +;; (define-extern ja-abort-spooled-anim function) ;; (function spool-anim art-joint-anim int int :behavior process-drawable) +;; (define-extern *gui-control* object) ;; gui-control +;; (define-extern *art-control* object) ;; external-art-control + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; game-info ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern hflip? (function symbol)) +(define-extern *default-continue* continue-point) +(define-extern task-level->string (function int string)) +(define-extern level-name->task-level (function symbol int)) +(define-extern trsq->continue-point (function trsq int)) +(define-extern position->stream (function string symbol symbol none)) +(define-extern bug-report-display (function symbol int)) +(define-extern print-continues (function int)) +(define-extern *highscore-info-array* (array highscore-info)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; game-task ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *grand-prix* (array grand-prix)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-dma ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype dma-block (structure) + ((tp basic :offset-assert 0) + (offset int32 :offset-assert 4) + (length int32 :offset-assert 8) + (alloc-frames int32 :offset-assert 12) + (order int32 :offset-assert 16) + (buffer-id int32 :offset-assert 20) + ) + :method-count-assert 11 + :size-assert #x18 + :flag-assert #xb00000018 + (:methods + (dma-block-method-9 () none) ;; 9 + (dma-block-method-10 () none) ;; 10 + ) + ) +|# + +#| +(deftype dma-block-list (structure) + ((total-length int32 :offset-assert 0) + (min-offset int32 :offset-assert 4) + (blocks UNKNOWN 4 :offset-assert 8) + ) + :method-count-assert 10 + :size-assert #x88 + :flag-assert #xa00000088 + (:methods + (dma-block-list-method-9 () none) ;; 9 + ) + ) +|# + +;; (define-extern *dma-block-lists* array) +;; (define-extern can-place-block? function) +;; (define-extern dma-try-alloc-single function) +;; (define-extern dma-try-alloc function) +;; (define-extern dma-release function) +;; (define-extern dma-dump function) +;; (define-extern dma-is-empty function) +;; (define-extern dma-get-named-buffer function) +;; (define-extern lobby-dma-reserve-hook function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern get-current-language (function language-enum)) +(define-extern *setting-control* setting-control) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mood-tables ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *no-cloud-haze-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *no-cloud-clear-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *no-cloud-smog-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *overcast-fog-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *overcast-clear-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *overcast-rain-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *storm-fog-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *storm-clear-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *storm-rain-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *desert-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *sandstorm-start-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *sandstorm-end-mood-fog-table* object) ;; mood-fog-table +;; (define-extern *no-cloud-mood-color-table* object) ;; mood-color-table +;; (define-extern *overcast-mood-color-table* object) ;; mood-color-table +;; (define-extern *storm-mood-color-table* object) ;; mood-color-table +;; (define-extern *desert-mood-color-table* object) ;; mood-color-table +;; (define-extern *sandstorm-start-mood-color-table* object) ;; mood-color-table +;; (define-extern *sandstorm-end-mood-color-table* object) ;; mood-color-table +;; (define-extern *no-cloud-mood-channel-group* object) ;; mood-channel-group +;; (define-extern *overcast-mood-channel-group* object) ;; mood-channel-group +;; (define-extern *stormy-mood-channel-group* object) ;; mood-channel-group +;; (define-extern *clouds-000* object) ;; mood-clouds +;; (define-extern *clouds-125* object) ;; mood-clouds +;; (define-extern *clouds-250* object) ;; mood-clouds +;; (define-extern *clouds-375* object) ;; mood-clouds +;; (define-extern *clouds-500* object) ;; mood-clouds +;; (define-extern *clouds-625* object) ;; mood-clouds +;; (define-extern *clouds-750* object) ;; mood-clouds +;; (define-extern *clouds-875* object) ;; mood-clouds +;; (define-extern *clouds-1000* object) ;; mood-clouds +;; (define-extern *mood-direction-table* object) ;; mood-direction-table +;; (define-extern *mood-sky-table* object) ;; mood-sky-table +;; (define-extern *mood-interp-table* object) ;; sky-color-day +;; (define-extern init-mood-control function) ;; (function mood-control none) +;; (define-extern *mood-control* mood-control) ;; mood-control + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mood-tables2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *override-mood-color-table* object) +;; (define-extern *override-mood-fog-table* object) +;; (define-extern init-override-table function) +;; (define-extern *override-table* mood-table) +;; (define-extern print-mood-tables function) ;; (function none) +;; (define-extern desaturate-mood-colors function) ;; (function float float float none) +;; (define-extern desaturate-mood-fog function) ;; (function (pointer mood-fog-table) float float none) +;; (define-extern *debug-mood-color-table* object) ;; mood-color-table +;; (define-extern *debug-mood-fog-table* object) ;; mood-fog-table + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mood ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype lava-state (structure) + ((lava float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (define-extern set-movie-time! function) +;; (define-extern set-movie-fog! function) +;; (define-extern set-movie-color! function) +;; (define-extern palette-select-special function) ;; (function mood-context-core3 symbol) +;; (define-extern clear-mood-times function) ;; (function mood-context symbol) +;; (define-extern update-mood-itimes function) ;; (function mood-context none) +;; (define-extern update-mood-direction function) ;; (function mood-context-core3 mood-table float float) +;; (define-extern update-mood-exterior function) ;; (function mood-context-core3 mood-table float int object) +;; (define-extern copy-mood-exterior function) ;; (function mood-context symbol) +;; (define-extern copy-mood-exterior-ambi function) ;; (function mood-context symbol none) +;; (define-extern clear-mood-context function) ;; (function mood-context symbol) +;; (define-extern update-mood-interior function) ;; (function mood-context symbol float) +;; (define-extern update-mood-interior-ambient function) ;; (function mood-context symbol float vector) +;; (define-extern update-mood-flames function) ;; (function mood-context int int int float float float float :behavior time-of-day-proc) +;; (define-extern *flash0* array) ;; (array float) +;; (define-extern *flash1* array) ;; (array float) +;; (define-extern *flash2* array) ;; (array float) +;; (define-extern *flash3* array) ;; (array float) +;; (define-extern *flash4* array) ;; (array float) +;; (define-extern *flash5* array) ;; (array float) +;; (define-extern *flash6* array) ;; (array float) +;; (define-extern *flash7* array) ;; (array float) +;; (define-extern update-mood-light function) ;; (function mood-context int int float float float float float float) +;; (define-extern update-mood-lava function) ;; (function mood-context int int float float float float float float) +;; (define-extern update-mood-flicker function) ;; (function mood-context int int none) +;; (define-extern update-mood-florescent function) ;; (function mood-context int int float) +;; (define-extern update-mood-electricity function) ;; (function mood-context int int float float none) +;; (define-extern update-mood-pulse function) ;; (function mood-context int int float float float float none) +;; (define-extern update-mood-strobe function) ;; (function mood-context int int int float float) +;; (define-extern update-mood-caustics function) ;; (function mood-context int float float float float float) +;; (define-extern override-mood-fog function) +;; (define-extern override-mood-color function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mood-funcs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype default-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) +|# + +#| +(deftype default-exterior-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) +|# + +#| +(deftype mountain-states (structure) + ((light0 light-state :inline :offset-assert 0) + (light1 light-state :inline :offset-assert 8) + (spec-0 sp-field-init-spec :offset-assert 16) + (spec-1 sp-field-init-spec :offset-assert 20) + (spec-2 sp-field-init-spec :offset-assert 24) + (spec-3 sp-field-init-spec :offset-assert 28) + (spec-4 sp-field-init-spec :offset-assert 32) + (spec-5 sp-field-init-spec :offset-assert 36) + (spec-6 sp-field-init-spec :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +;; (define-extern update-mood-default function) ;; (function mood-context float int none :behavior time-of-day-proc) +;; (define-extern update-mood-copy-parent function) ;; (function mood-context object int none) +;; (define-extern get-sphere-interp function) ;; (function sphere vector float float float) +;; (define-extern update-mood-default-exterior function) +;; (define-extern init-mood-mountain function) ;; (function mood-context uint) +;; (define-extern update-mood-mountain function) ;; (function mood-context float int none :behavior time-of-day-proc) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mood-funcs2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype rustyh-states (structure) + ((effect float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype garage-states (structure) + ((switched float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype default-interior-states (UNKNOWN) + () + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +#| +(deftype hiphog-states (UNKNOWN) + () + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +;; (define-extern init-mood-fog-default function) +;; (define-extern init-mood-fog-temple function) +;; (define-extern init-mood-fog-drome function) +;; (define-extern update-mood-default-interior function) ;; (function mood-context none :behavior time-of-day-proc) +;; (define-extern update-mood-default-interior-ambient function) ;; (function mood-context none :behavior time-of-day-proc) +;; (define-extern update-rustyh-lights function) +;; (define-extern update-mood-rustyh function) +;; (define-extern set-rustyh-effect-light! function) +;; (define-extern update-hiphog-lights function) ;; (function mood-context none) +;; (define-extern update-mood-hiphog function) ;; (function mood-context float none :behavior time-of-day-proc) +;; (define-extern update-garage-brdroom-lights function) +;; (define-extern update-mood-garage-brdroom function) +;; (define-extern set-garage-switched! function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jungle-shared ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; weather-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern group-rain-screend-drop object) ;; sparticle-launch-group +;; (define-extern update-snow function) ;; (function float vector vector none) +;; (define-extern birth-func-omega-normal-orient function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern birth-func-rain function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none) +;; (define-extern check-drop-level-rain function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-drop-level-rain2 function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-drop-level-splash function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern cam-master-effect function) ;; (function none :behavior camera-master) +;; (define-extern sparticle-track-sun function) ;; (function int sparticle-cpuinfo matrix none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; time-of-day ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern time-of-day-effect object) ;; (function none) +;; (define-extern time-of-day-update function) ;; (function none :behavior time-of-day-proc) +;; (define-extern update-counters function) ;; (function float :behavior time-of-day-proc) +;; (define-extern time-of-day-tick state) ;; (state time-of-day-proc) +;; (define-extern init-time-of-day function) ;; (function object :behavior time-of-day-proc) +;; (define-extern start-time-of-day function) ;; (function (pointer time-of-day-proc)) +;; (define-extern time-of-day-setup function) ;; (function symbol symbol) +;; (define-extern time-of-day-interp-colors function) ;; (function (pointer rgba) uint mood-context none) +;; (define-extern time-of-day-interp-colors-scratch function) ;; (function (pointer rgba) time-of-day-palette mood-context none) +;; (define-extern init-time-of-day-context function) ;; (function time-of-day-context symbol) +;; (define-extern set-filter-color! function) ;; (function float float float none) +;; (define-extern tod-madd! function) ;; (function vector vector vector float) +;; (define-extern update-environment-colors function) ;; (function time-of-day-context vector) +;; (define-extern update-time-of-day function) ;; (function time-of-day-context none) +;; (define-extern calc-fade-from-fog function) ;; (function vector float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sky-data ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *sky-work* object) ;; sky-work +;; (define-extern sky-base-polygons object) ;; (inline-array sky-vertex) +;; (define-extern sky-roof-polygons object) ;; (inline-array sky-vertex) +;; (define-extern *cloud-vert-array* object) ;; cloud-vert-array +;; (define-extern *cloud-poly* object) ;; (inline-array sky-vertex) +;; (define-extern init-cloud-vert-array function) ;; (function symbol) +;; (define-extern *haze-vert-array* object) ;; haze-vert-array +;; (define-extern *haze-poly* object) ;; (inline-array sky-vertex) +;; (define-extern init-haze-vert-array function) ;; (function symbol) +;; (define-extern sky-make-sun-data function) ;; (function sky-work int float none) +;; (define-extern sky-make-moon-data function) ;; (function sky-work float none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sky-tng ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern set-tex-offset function) ;; (function int int none) +;; (define-extern draw-large-polygon function) +;; (define-extern clip-polygon-against-positive-hyperplane function) +;; (define-extern clip-polygon-against-negative-hyperplane function) +;; (define-extern render-sky-quad function) ;; (function (inline-array sky-vertex) dma-buffer none) +;; (define-extern render-sky-tri function) ;; (function (inline-array sky-vertex) dma-buffer none) +;; (define-extern close-sky-buffer function) ;; (function dma-buffer none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; load-state ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern level-base-level-name (function symbol object)) +(define-extern add-want-level (function (inline-array level-buffer-state) (pointer int64) symbol symbol symbol symbol object)) +(define-extern *display-load-commands* symbol) +(define-extern *backup-load-state* load-state) +(define-extern *load-state* load-state) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; level-info ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *default-mood-range* object) +;; (define-extern *mood-range-1* object) +;; (define-extern *mood-range-snow* object) +;; (define-extern default-level level-load-info) ;; level-load-info +;; (define-extern intro level-load-info) ;; level-load-info +;; (define-extern title level-load-info) ;; level-load-info +;; (define-extern halfpipe level-load-info) ;; level-load-info +;; (define-extern raceweap level-load-info) +;; (define-extern junglex level-load-info) +;; (define-extern jungley level-load-info) +;; (define-extern junglea level-load-info) +;; (define-extern jungleb level-load-info) +;; (define-extern junglec level-load-info) +;; (define-extern jungled level-load-info) +;; (define-extern junglee level-load-info) +;; (define-extern junglef level-load-info) +;; (define-extern jungleg level-load-info) +;; (define-extern jungles level-load-info) +;; (define-extern jungtbox level-load-info) +;; (define-extern jungtrn level-load-info) +;; (define-extern junglew level-load-info) +;; (define-extern havjungs level-load-info) +;; (define-extern havjungw level-load-info) +;; (define-extern havjungx level-load-info) +;; (define-extern havjungy level-load-info) +;; (define-extern havsews level-load-info) +;; (define-extern havseww level-load-info) +;; (define-extern havsewx level-load-info) +;; (define-extern havsewy level-load-info) +;; (define-extern hvswtbox level-load-info) +;; (define-extern hvjgtbox level-load-info) +;; (define-extern havtours level-load-info) +;; (define-extern havtourw level-load-info) +;; (define-extern havttbox level-load-info) +;; (define-extern havena level-load-info) +;; (define-extern havenb level-load-info) +;; (define-extern havenc level-load-info) +;; (define-extern havend level-load-info) +;; (define-extern havene level-load-info) +;; (define-extern havenx level-load-info) +;; (define-extern haveny level-load-info) +;; (define-extern havens level-load-info) +;; (define-extern havntbox level-load-info) +;; (define-extern havenw level-load-info) +;; (define-extern sewera level-load-info) +;; (define-extern sewera2 level-load-info) +;; (define-extern sewera3 level-load-info) +;; (define-extern sewerb level-load-info) +;; (define-extern sewerc level-load-info) +;; (define-extern sewerd level-load-info) +;; (define-extern sewere level-load-info) +;; (define-extern sewerf level-load-info) +;; (define-extern sewers level-load-info) +;; (define-extern sewerw level-load-info) +;; (define-extern sewerx level-load-info) +;; (define-extern sewtbox level-load-info) +;; (define-extern kratours level-load-info) +;; (define-extern kratourw level-load-info) +;; (define-extern krattbox level-load-info) +;; (define-extern krasw level-load-info) +;; (define-extern krass level-load-info) +;; (define-extern krastbox level-load-info) +;; (define-extern krastrn level-load-info) +;; (define-extern krasa level-load-info) +;; (define-extern krasb level-load-info) +;; (define-extern krasc level-load-info) +;; (define-extern krasx level-load-info) +;; (define-extern krasy level-load-info) +;; (define-extern krasfoot level-load-info) +;; (define-extern snowfoot level-load-info) +;; (define-extern hjngfoot level-load-info) +;; (define-extern havnfoot level-load-info) +;; (define-extern jungfoot level-load-info) +;; (define-extern hvswfoot level-load-info) +;; (define-extern sparfoot level-load-info) +;; (define-extern dockfoot level-load-info) +;; (define-extern dkkrfoot level-load-info) +;; (define-extern sewfoot level-load-info) +;; (define-extern canfoot level-load-info) +;; (define-extern cnspfoot level-load-info) +;; (define-extern sptmfoot level-load-info) +;; (define-extern tempfoot level-load-info) +;; (define-extern icepfoot level-load-info) +;; (define-extern icefoot level-load-info) +;; (define-extern icebfoot level-load-info) +;; (define-extern peakfoot level-load-info) +;; (define-extern havtfoot level-load-info) +;; (define-extern dromfoot level-load-info) +;; (define-extern drdkfoot level-load-info) +;; (define-extern spatfoot level-load-info) +;; (define-extern kratfoot level-load-info) +;; (define-extern icetfoot level-load-info) +;; (define-extern krastt level-load-info) +;; (define-extern dockstt level-load-info) +;; (define-extern dromett level-load-info) +;; (define-extern dkkrtt level-load-info) +;; (define-extern drdktt level-load-info) +;; (define-extern krtrtt level-load-info) +;; (define-extern junglett level-load-info) +;; (define-extern havtt level-load-info) +;; (define-extern sewertt level-load-info) +;; (define-extern hvjgtt level-load-info) +;; (define-extern hvswtt level-load-info) +;; (define-extern hvtrtt level-load-info) +;; (define-extern spartt level-load-info) +;; (define-extern canyontt level-load-info) +;; (define-extern templett level-load-info) +;; (define-extern cnsptt level-load-info) +;; (define-extern sptmtt level-load-info) +;; (define-extern sptrtt level-load-info) +;; (define-extern snowtt level-load-info) +;; (define-extern peaktt level-load-info) +;; (define-extern icett level-load-info) +;; (define-extern icbgtt level-load-info) +;; (define-extern icpstt level-load-info) +;; (define-extern ictrtt level-load-info) +;; (define-extern canyons level-load-info) +;; (define-extern canyonw level-load-info) +;; (define-extern canyona level-load-info) +;; (define-extern canyonb level-load-info) +;; (define-extern canyonc level-load-info) +;; (define-extern canyond level-load-info) +;; (define-extern canyone level-load-info) +;; (define-extern canyonx level-load-info) +;; (define-extern canyony level-load-info) +;; (define-extern cantbox level-load-info) +;; (define-extern cansparw level-load-info) +;; (define-extern canspars level-load-info) +;; (define-extern cansparx level-load-info) +;; (define-extern canspary level-load-info) +;; (define-extern cnsptbox level-load-info) +;; (define-extern docksw level-load-info) +;; (define-extern docksx level-load-info) +;; (define-extern dockss level-load-info) +;; (define-extern docksa level-load-info) +;; (define-extern docksb level-load-info) +;; (define-extern docksc level-load-info) +;; (define-extern docksd level-load-info) +;; (define-extern dockse level-load-info) +;; (define-extern docktbox level-load-info) +;; (define-extern dockkras level-load-info) +;; (define-extern dockkraw level-load-info) +;; (define-extern dockkrax level-load-info) +;; (define-extern dockkray level-load-info) +;; (define-extern dkkrtbox level-load-info) +;; (define-extern dromew level-load-info) +;; (define-extern dromes level-load-info) +;; (define-extern dromex level-load-info) +;; (define-extern dromey level-load-info) +;; (define-extern dromea level-load-info) +;; (define-extern dromeb level-load-info) +;; (define-extern dromec level-load-info) +;; (define-extern dromed level-load-info) +;; (define-extern dromee level-load-info) +;; (define-extern dromef level-load-info) +;; (define-extern dromtbox level-load-info) +;; (define-extern dromdocs level-load-info) +;; (define-extern dromdocw level-load-info) +;; (define-extern dromdocx level-load-info) +;; (define-extern dromdocy level-load-info) +;; (define-extern drdktbox level-load-info) +;; (define-extern brdroom level-load-info) +;; (define-extern brdroomf level-load-info) +;; (define-extern garcst level-load-info) +;; (define-extern garage level-load-info) +;; (define-extern garageb level-load-info) +;; (define-extern snow level-load-info) +;; (define-extern snowx level-load-info) +;; (define-extern snows level-load-info) +;; (define-extern snowtbox level-load-info) +;; (define-extern icetrn level-load-info) +;; (define-extern snowtrn2 level-load-info) +;; (define-extern ben level-load-info) +;; (define-extern cliffs level-load-info) +;; (define-extern cliffss level-load-info) +;; (define-extern cliffart level-load-info) +;; (define-extern cliftrn level-load-info) +;; (define-extern clifhunt level-load-info) +;; (define-extern clifctf level-load-info) +;; (define-extern cliffsx level-load-info) +;; (define-extern drone level-load-info) +;; (define-extern coliseum level-load-info) +;; (define-extern coliseux level-load-info) +;; (define-extern coliseus level-load-info) +;; (define-extern colart level-load-info) +;; (define-extern coliclct level-load-info) +;; (define-extern colictf level-load-info) +;; (define-extern colirev level-load-info) +;; (define-extern colhunt level-load-info) +;; (define-extern eight level-load-info) +;; (define-extern eightb level-load-info) +;; (define-extern rustyh level-load-info) +;; (define-extern hiphog level-load-info) ;; level-load-info +;; (define-extern desarena level-load-info) +;; (define-extern desarens level-load-info) +;; (define-extern desart level-load-info) +;; (define-extern desclct level-load-info) +;; (define-extern desactf level-load-info) +;; (define-extern deshunt level-load-info) ;; level-load-info +;; (define-extern deshunt2 level-load-info) +;; (define-extern desrev level-load-info) +;; (define-extern desarenx level-load-info) +;; (define-extern snobowls level-load-info) +;; (define-extern snobowl level-load-info) +;; (define-extern snobowlx level-load-info) +;; (define-extern sbwlctf level-load-info) +;; (define-extern snobart level-load-info) +;; (define-extern kcrosss level-load-info) +;; (define-extern kcross level-load-info) +;; (define-extern kcrosctf level-load-info) +;; (define-extern kcrsplow level-load-info) +;; (define-extern kcrosart level-load-info) +;; (define-extern kcrsclct level-load-info) +;; (define-extern kcrossx level-load-info) +;; (define-extern spargusa level-load-info) +;; (define-extern spargusb level-load-info) +;; (define-extern spargusc level-load-info) +;; (define-extern spargusd level-load-info) +;; (define-extern sparguse level-load-info) +;; (define-extern spargusx level-load-info) +;; (define-extern spargusy level-load-info) +;; (define-extern sprgstbx level-load-info) +;; (define-extern sparguss level-load-info) +;; (define-extern spargusw level-load-info) +;; (define-extern icea level-load-info) +;; (define-extern iceb level-load-info) +;; (define-extern icec level-load-info) +;; (define-extern iced level-load-info) +;; (define-extern icew level-load-info) +;; (define-extern icex level-load-info) +;; (define-extern icey level-load-info) +;; (define-extern ices level-load-info) +;; (define-extern icetbox level-load-info) +;; (define-extern icetours level-load-info) +;; (define-extern icetourw level-load-info) +;; (define-extern icettbox level-load-info) +;; (define-extern peak level-load-info) +;; (define-extern peaks level-load-info) +;; (define-extern peakw level-load-info) +;; (define-extern peaka level-load-info) +;; (define-extern peakb level-load-info) +;; (define-extern peakc level-load-info) +;; (define-extern peakd level-load-info) +;; (define-extern peake level-load-info) +;; (define-extern peakx level-load-info) +;; (define-extern peaktbox level-load-info) +;; (define-extern icepasss level-load-info) +;; (define-extern icepassw level-load-info) +;; (define-extern icepassx level-load-info) +;; (define-extern icepassy level-load-info) +;; (define-extern iceptbox level-load-info) +;; (define-extern icebergs level-load-info) +;; (define-extern icebergw level-load-info) +;; (define-extern icebergx level-load-info) +;; (define-extern icebergy level-load-info) +;; (define-extern icebtbox level-load-info) +;; (define-extern templew level-load-info) +;; (define-extern temples level-load-info) +;; (define-extern templea level-load-info) ;; level-load-info +;; (define-extern templeb level-load-info) ;; level-load-info +;; (define-extern templec level-load-info) ;; level-load-info +;; (define-extern templed level-load-info) ;; level-load-info +;; (define-extern templee level-load-info) ;; level-load-info +;; (define-extern templex level-load-info) ;; level-load-info +;; (define-extern templey level-load-info) +;; (define-extern temptbox level-load-info) +;; (define-extern spartems level-load-info) +;; (define-extern spartemw level-load-info) +;; (define-extern spartemx level-load-info) +;; (define-extern spartemy level-load-info) +;; (define-extern sptmtbox level-load-info) +;; (define-extern spatourw level-load-info) +;; (define-extern spatours level-load-info) +;; (define-extern spattbox level-load-info) +;; (define-extern desisle level-load-info) +;; (define-extern desisles level-load-info) +;; (define-extern desislex level-load-info) +;; (define-extern disleart level-load-info) +;; (define-extern desrapt level-load-info) +;; (define-extern dislectf level-load-info) +;; (define-extern atoll level-load-info) +;; (define-extern atollx level-load-info) +;; (define-extern atolls level-load-info) +;; (define-extern atollart level-load-info) +;; (define-extern atoplow level-load-info) +;; (define-extern atollctf level-load-info) +;; (define-extern menu2 level-load-info) +;; (define-extern menumap level-load-info) +;; (define-extern mongl level-load-info) +;; (define-extern falcl level-load-info) +;; (define-extern wombl level-load-info) +;; (define-extern possl level-load-info) +;; (define-extern bobcl level-load-info) +;; (define-extern cougl level-load-info) +;; (define-extern wolfl level-load-info) +;; (define-extern bearl level-load-info) +;; (define-extern leopl level-load-info) +;; (define-extern pantl level-load-info) +;; (define-extern tigel level-load-info) +;; (define-extern cheel level-load-info) +;; (define-extern gilal level-load-info) +;; (define-extern snakl level-load-info) +;; (define-extern daxtl level-load-info) +;; (define-extern jakvl level-load-info) +;; (define-extern ashvl level-load-info) +;; (define-extern ashvl2 level-load-info) +;; (define-extern ashvl3 level-load-info) +;; (define-extern razvl level-load-info) +;; (define-extern klevl level-load-info) +;; (define-extern klevl2 level-load-info) +;; (define-extern kievl level-load-info) +;; (define-extern thavl level-load-info) +;; (define-extern thavl2 level-load-info) +;; (define-extern thavl3 level-load-info) +;; (define-extern thbvl level-load-info) +;; (define-extern thbvl2 level-load-info) +;; (define-extern thbvl3 level-load-info) +;; (define-extern thcvl level-load-info) +;; (define-extern thcvl2 level-load-info) +;; (define-extern thcvl3 level-load-info) +;; (define-extern torvl level-load-info) +;; (define-extern torvl2 level-load-info) +;; (define-extern torvl3 level-load-info) +;; (define-extern sigvl level-load-info) +;; (define-extern sigvl2 level-load-info) +;; (define-extern sigvl3 level-load-info) +;; (define-extern ur8vl level-load-info) +;; (define-extern ur8vl2 level-load-info) +;; (define-extern ur8vl3 level-load-info) +;; (define-extern rayvl level-load-info) +;; (define-extern rayvl2 level-load-info) +;; (define-extern gtbvl level-load-info) +;; (define-extern pecvl level-load-info) +;; (define-extern ashlev level-load-info) +;; (define-extern jaklev level-load-info) +;; (define-extern razlev level-load-info) +;; (define-extern klelev level-load-info) +;; (define-extern kielev level-load-info) +;; (define-extern thalev level-load-info) +;; (define-extern tarlev level-load-info) +;; (define-extern thblev level-load-info) +;; (define-extern thclev level-load-info) +;; (define-extern torlev level-load-info) +;; (define-extern siglev level-load-info) +;; (define-extern ur8lev level-load-info) +;; (define-extern kaelev level-load-info) +;; (define-extern raylev level-load-info) +;; (define-extern ratlev level-load-info) +;; (define-extern jkalev level-load-info) +;; (define-extern jkblev level-load-info) +;; (define-extern jkclev level-load-info) +;; (define-extern daxlev level-load-info) +;; (define-extern gtblev level-load-info) +;; (define-extern peclev level-load-info) +;; (define-extern ximlev level-load-info) +;; (define-extern osmlev level-load-info) +;; (define-extern cliftest level-load-info) +;; (define-extern fmvlev level-load-info) +;; (define-extern credits level-load-info) +;; (define-extern jakcred level-load-info) +;; (define-extern peccred level-load-info) +;; (define-extern razcred level-load-info) +;; (define-extern gtbcred level-load-info) +;; (define-extern daxcred level-load-info) +;; (define-extern sigcred level-load-info) +;; (define-extern thbcred level-load-info) +;; (define-extern ur8cred level-load-info) +;; (define-extern keicred level-load-info) +;; (define-extern torcred level-load-info) +;; (define-extern klecred level-load-info) +;; (define-extern thccred level-load-info) +;; (define-extern ashcred level-load-info) +;; (define-extern thacred level-load-info) +;; (define-extern raycred level-load-info) +;; (define-extern kraswfma level-load-info) +;; (define-extern krasastg level-load-info) +;; (define-extern krasafma level-load-info) +;; (define-extern krasbfma level-load-info) +;; (define-extern krascfma level-load-info) +;; (define-extern rustyhfm level-load-info) +;; (define-extern introcst level-load-info) ;; level-load-info +;; (define-extern jakndax level-load-info) +;; (define-extern rynash level-load-info) +;; (define-extern tsk2a level-load-info) +;; (define-extern tsk2b level-load-info) +;; (define-extern tsk2c level-load-info) +;; (define-extern tsk3a level-load-info) +;; (define-extern tsk4a level-load-info) +;; (define-extern tsk5a level-load-info) +;; (define-extern tsk5b level-load-info) +;; (define-extern tsk6a level-load-info) +;; (define-extern tsk12a level-load-info) +;; (define-extern tsk12b level-load-info) +;; (define-extern tsk18a level-load-info) +;; (define-extern tsk21a level-load-info) +;; (define-extern tsk21b level-load-info) +;; (define-extern tsk25a level-load-info) +;; (define-extern tsk32a level-load-info) +;; (define-extern tsk32b level-load-info) +;; (define-extern tsk32c level-load-info) +;; (define-extern tsk33a level-load-info) +;; (define-extern tsk38a level-load-info) +;; (define-extern tsk80a level-load-info) +;; (define-extern tsk80b level-load-info) +;; (define-extern tsk81a level-load-info) +;; (define-extern tsk81b level-load-info) +;; (define-extern tsk100a level-load-info) +;; (define-extern tsk100b level-load-info) +;; (define-extern tsk100c level-load-info) +;; (define-extern tsk114a level-load-info) +;; (define-extern tsk125a level-load-info) +;; (define-extern tsk130a level-load-info) +;; (define-extern tsk130b level-load-info) +;; (define-extern tsk139a level-load-info) +;; (define-extern tsk157a level-load-info) +;; (define-extern tsk165a level-load-info) +;; (define-extern tsk165ab level-load-info) +;; (define-extern tsk165b level-load-info) +;; (define-extern tsk165c level-load-info) +;; (define-extern tsk166a level-load-info) +;; (define-extern tsk166b level-load-info) +;; (define-extern tsk166c level-load-info) +;; (define-extern tsk166c2 level-load-info) +;; (define-extern tsk166d level-load-info) +;; (define-extern tsk166d2 level-load-info) +;; (define-extern tsk166e level-load-info) +;; (define-extern tsk166f level-load-info) +;; (define-extern tsk166g level-load-info) +;; (define-extern introblv level-load-info) +;; (define-extern introblp level-load-info) +;; (define-extern rustycst level-load-info) +;; (define-extern hipcst level-load-info) +;; (define-extern andrew level-load-info) +;; (define-extern testw level-load-info) +;; (define-extern testa level-load-info) +;; (define-extern testb level-load-info) +;; (define-extern testlow level-load-info) +;; (define-extern henry level-load-info) +;; (define-extern chartest level-load-info) ;; level-load-info +;; (define-extern *level-load-list* object) ;; pair + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; level ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type dgo-header structure) + +(define-extern *max-dma* int) +;; (define-extern *cached-car-level-index* object) +(define-extern level-memory-mode->string "Convert level-memory-mode enum to string." (function level-memory-mode string)) +(define-extern lookup-level-info "Get the level load info. Symbol can be the level name, visname, nickname, or a symbol that contains a level-load-info value." (function symbol level-load-info)) +(define-extern remap-level-name "Get the load name, depending on if we should load a vis level or not." (function level-load-info symbol)) +(define-extern add-bsp-drawable "Callback function used by background-engine to draw a bsp. + Note that most drawing work has been moved into finish-background, + and the draw method called here just adds references to high-level rendering data + to lists. The exception is debug-draw, which does run here (only for draw-strip-lines)." (function bsp-header level symbol display-frame none)) +(define-extern *login-state* login-state) +(define-extern *print-login* symbol) +;; (define-extern *cached-dgo* object) +;; (define-extern *cached-dgo-count* object) +(define-extern load-buffer-resize "Resize and relocate the DGO load buffers, making sure there is enough room to both load objects and heap alloc in the linker." (function level dgo-header none)) +(define-extern level-find-borrow-slot "Set up a level to 'borrow' from another. + This function finds the right 'host' level, which should + have prepared a heap for this level. This level will then + be configured to use this heap." (function level level-memory-mode none)) +(define-extern level-update-after-load "Run the post-load state machine to login level data." (function level login-state level)) +(define-extern bg "Debug function to start playing a given level." (function symbol none)) +(define-extern play "Start (or restart) the game! + This will start up the display process, and load the initial level." (function symbol symbol int)) +;; (define-extern play2 function) +(define-extern play-boot + "Function called by the C Kernel to start the game (wrapper around play)." (function none)) +(define-extern sound-bank-name->mode (function symbol sound-bank-mode)) +;; (define-extern *sound-bank-string* array) +(define-extern update-sound-banks (function load-state (inline-array sound-bank-state) none)) +(define-extern show-level (function symbol none)) +(define-extern *default-level* level) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; text ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype print-game-text-work (structure) + ((context font-context :inline :offset-assert 0) + (xpos float :offset-assert 188) + (ypos float :offset-assert 192) + (y-spacing-scaled float :offset-assert 196) + (space-size float :offset-assert 200) + (hyphen-size float :offset-assert 204) + (copy-test symbol :offset-assert 208) + (dry-run symbol :offset-assert 212) + (string-count int32 :offset-assert 216) + (dest-count int32 :offset-assert 220) + (last-space-count int32 :offset-assert 224) + (line-count float :offset-assert 228) + (word-count int32 :offset-assert 232) + (line-word-count int32 :offset-assert 236) + (ret float :offset-assert 240) + (dma-buf dma-buffer :dynamic :offset-assert 244) + ) + :method-count-assert 9 + :size-assert #xf4 + :flag-assert #x9000000f4 + ) + +;; game-text-info is already defined! + +(define-extern *expand-buf-number* int) +(define-extern *game-text-word* string) +(define-extern *hyphen-text-word* string) +(define-extern *game-text-string* string) +(define-extern *expanded-text-line0* string) +(define-extern *expanded-text-line1* string) +(define-extern *tmp-convert-string* string) +(define-extern *level-text-file-load-flag* symbol) +(define-extern convert-korean-text (function string string)) +(define-extern text-is-loading symbol) +(define-extern load-game-text-info (function string (pointer object) kheap int)) ;; (function string (pointer object) kheap int) +(define-extern load-level-text-files (function int none)) ;; (function int none) +(define-extern draw-debug-text-box (function font-context none)) ;; (function font-context none) +(define-extern *print-game-text-work* print-game-text-work) +(define-extern hyphenate-word (function string int)) +(define-extern print-game-text (function string font-context symbol int bucket-id string dma-buffer float)) ;; (function string font-context symbol int bucket-id float) +(define-extern disable-level-text-file-loading (function none)) +(define-extern enable-level-text-file-loading (function none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-hash ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern add-collide-debug-box function) ;; (function vector rgba none) +;; (define-extern print-collide-cache-tri-count function) ;; (function none) +;; (define-extern print-exceeded-max-cache-tris function) ;; (function none) +;; (define-extern fill-bg-using-box-new function) ;; (function collide-cache object collide-query none) +;; (define-extern fill-bg-using-line-sphere-new function) ;; (function collide-cache object collide-query none) +;; (define-extern collide-list-fill-bg-using-box function) ;; (function collide-cache collide-list collide-query none) +;; (define-extern collide-list-fill-bg-using-line-sphere function) ;; (function collide-cache collide-list collide-query none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-probe ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype collide-probe-stack-elem (structure) + ((child uint32 :offset-assert 0) + (count uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype collide-probe-stack (structure) + ((data collide-probe-stack-elem 1024 :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4000 + :flag-assert #x900004000 + ) +|# + +;; (define-extern creates-new-method? function) ;; (function type int symbol) +;; (define-extern overrides-parent-method? function) ;; (function type int symbol) +;; (define-extern describe-methods function) ;; (function type symbol) +;; (define-extern indent-to function) ;; (function int none) +;; (define-extern probe-traverse-draw-node function) ;; (function draw-node int none) +;; (define-extern probe-traverse-inline-array-node function) ;; (function drawable-inline-array-node int none) +;; (define-extern probe-traverse-collide-fragment function) ;; (function drawable-tree-collide-fragment int none) +;; (define-extern *collide-probe-stack* object) ;; collide-probe-stack +;; (define-extern collide-vu0-block object) ;; vu-function +;; (define-extern collide-probe-node function) ;; (function (inline-array draw-node) int collide-list int) +;; (define-extern print-out function) ;; (function int object) +;; (define-extern collide-probe-instance-tie-collide-frags function) ;; (function none) +;; (define-extern collide-probe-instance-tie function) ;; (function object int collide-list int int) +;; (define-extern collide-probe-collide-fragment-tree-make-list function) ;; (function drawable-tree-collide-fragment collide-list none) +;; (define-extern collide-probe-instance-tie-tree-make-list function) ;; (function drawable-tree-instance-tie collide-list int) +;; (define-extern collide-upload-vu0 function) ;; (function none) +;; (define-extern collide-probe-make-list function) ;; (function level collide-list none) +;; (define-extern distc function) ;; (function vector vector float) +;; (define-extern interpolate function) ;; (function float float float float float float) +;; (define-extern misty-ambush-height function) ;; (function vector float) +;; (define-extern misty-ambush-height-probe function) ;; (function vector float float) +;; (define-extern pke-collide-test function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-frag ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-mesh ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype sopt-work (structure) + ((intersect vector :inline :offset-assert 0) + (sphere-bbox4w bounding-box4w :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype spat-work (structure) + ((intersect vector :inline :offset-assert 0) + (sphere-bbox4w bounding-box4w :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype oot-work (structure) + ((intersect vector :inline :offset-assert 0) + (sphere-bbox4w bounding-box4w :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; (define-extern should-push-away-test-mesh function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-touch ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype add-prims-touching-work (structure) + ((tri1 collide-tri-result :offset-assert 0) + (tri2 collide-tri-result :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +;; (define-extern get-intersect-point function) ;; (function vector touching-prims-entry collide-shape touching-shapes-entry vector) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-shape ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern find-ground-point function) ;; (function control-info vector float float vector) +;; (define-extern collide-shape-moving-angle-set! function) ;; (function collide-shape-moving vector vector none) +;; (define-extern cshape-reaction-update-state function) ;; (function control-info collide-query vector none) +;; (define-extern cshape-reaction-default function) ;; (function control-info collide-query vector vector collide-status) +;; (define-extern cshape-reaction-just-move function) ;; (function control-info collide-query vector collide-status) +;; (define-extern collide-shape-draw-debug-marks function) ;; (function none) +;; (define-extern *col-timer* object) ;; stopwatch +;; (define-extern *frame-timer* object) ;; stopwatch +;; (define-extern *col-timer-enable* object) ;; symbol +;; (define-extern debug-report-col-stats function) ;; (function int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-shape-rider ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *collide-vif0-init* array) ;; (array uint32) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-planes ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern collide-planes-intersect function) +;; (define-extern collide-planes-test0 function) +;; (define-extern collide-planes-test1 function) +;; (define-extern collide-planes function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; spatial-hash ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype grid-hash-work (basic) + ((result-qwords UNKNOWN 4 :offset-assert 16) + (result-words uint8 :dynamic :offset-assert 16) ;; guessed by decompiler + (result-bits uint8 :dynamic :offset-assert 16) ;; guessed by decompiler + (object-id int32 :offset-assert 80) + (temp-box-min vector :inline :offset-assert 96) + (temp-box-max vector :inline :offset-assert 112) + (visit-count int32 :offset-assert 128) + (temp-time uint32 :offset-assert 132) + (queue-object-time uint32 :offset-assert 136) + (make-hash-time uint32 :offset-assert 140) + (search-time uint32 :offset-assert 144) + (add-object-time uint32 :offset-assert 148) + ) + :method-count-assert 9 + :size-assert #x98 + :flag-assert #x900000098 + ) +|# + +;; (define-extern *grid-hash-work* grid-hash-work) ;; grid-hash-work +;; (define-extern validate-bucket-bits function) ;; (function grid-hash (pointer grid-hash-word) symbol) +;; (define-extern draw-grid function) ;; (function vector vector (pointer int8) rgba none) +;; (define-extern draw-sphere-box function) ;; (function sphere rgba none) +;; (define-extern draw-line-sphere function) ;; (function vector vector float rgba none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; actor-hash ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype actor-cshape-ptr (structure) + ((cshape collide-shape :offset-assert 0) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype actor-hash-bucket (structure) + ((length int16 :offset-assert 0) + (max-length int16 :offset-assert 2) + (data (inline-array actor-cshape-ptr) :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (actor-hash-bucket-method-9 () none) ;; 9 ;; (add-actor-cshape (_type_ collide-shape) none) + ) + ) +|# + +#| +(deftype actor-hash-buckets (structure) + ((hash spatial-hash :offset-assert 0) ;; guessed by decompiler + (list engine :offset-assert 4) ;; guessed by decompiler + (data actor-hash-bucket 4 :offset-assert 8) ;; guessed by decompiler + (tpos vector :inline :offset-assert 80) + ) + :method-count-assert 10 + :size-assert #x60 + :flag-assert #xa00000060 + (:methods + (actor-hash-buckets-method-9 () none) ;; 9 ;; (hash-actors (_type_) none) + ) + ) +|# + +;; (define-extern *actor-hash* object) ;; spatial-hash +;; (define-extern *actor-hash-buckets* object) ;; actor-hash-buckets +;; (define-extern update-actor-hash function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; merc-death ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *merc-death-globals* object) ;; vector +;; (define-extern birth-func-death-sparks function) ;; (function none) +;; (define-extern death-seed death-info) ;; death-info +;; (define-extern start-seed-effect function) ;; (function process-drawable vector cspace none) +;; (define-extern death-default death-info) ;; death-info +;; (define-extern death-warp-in death-info) ;; death-info +;; (define-extern death-warp-out death-info) ;; death-info +;; (define-extern sparticle-texture-glow-soft function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern merc-death-spawn function) ;; (function int vector vector none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; water-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype water-control (basic) + ((flags water-flag :offset-assert 4) + (process target :offset-assert 8) ;; guessed by decompiler + (joint-index int32 :offset-assert 12) + (top-y-offset float :offset-assert 16) + (attack-id uint32 :offset-assert 20) + (enter-water-time uint64 :offset-assert 24) ;; time-frame + (wade-time uint64 :offset-assert 32) ;; time-frame + (on-water-time uint64 :offset-assert 40) ;; time-frame + (enter-swim-time uint64 :offset-assert 48) ;; time-frame + (swim-time uint64 :offset-assert 56) ;; time-frame + (base-height meters :offset-assert 64) + (wade-height meters :offset-assert 68) + (swim-height meters :offset-assert 72) + (surface-height meters :offset-assert 76) + (bottom-height meters :offset-assert 80) + (collide-height meters :offset-assert 84) + (height meters :offset-assert 88) + (height-offset float 4 :offset-assert 92) ;; guessed by decompiler + (base-ocean-offset meters :offset-assert 92) + (real-ocean-offset meters :offset-assert 92) + (ocean-offset meters :offset-assert 96) + (bob-offset meters :offset-assert 100) + (align-offset meters :offset-assert 104) + (swim-depth meters :offset-assert 108) + (bob smush-control :inline :offset-assert 112) + (ripple uint64 :offset-assert 144) ;; handle + (ripple-size meters :offset-assert 152) + (wake-size meters :offset-assert 156) + (bottom vector 2 :offset-assert 160) ;; guessed by decompiler + (top vector 2 :offset-assert 192) ;; guessed by decompiler + (enter-water-pos vector :inline :offset-assert 224) + (drip-old-pos vector :inline :offset-assert 240) + (drip-joint-index int32 :offset-assert 256) + (drip-wetness float :offset-assert 260) + (drip-time uint64 :offset-assert 264) ;; time-frame + (drip-speed float :offset-assert 272) + (drip-height meters :offset-assert 276) + (drip-mult float :offset-assert 280) + (distort-time uint64 :offset-assert 288) ;; time-frame + (enter-water-sound uint16 :offset-assert 296) ;; sound-name + (normal vector :inline :offset-assert 304) + ) + :method-count-assert 18 + :size-assert #x140 + :flag-assert #x1200000140 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process int float float float) _type_) + (water-control-method-9 () none) ;; 9 ;; (water-control-method-9 (_type_) none) + (water-control-method-10 () none) ;; 10 ;; (water-control-method-10 (_type_) none) + (water-control-method-11 () none) ;; 11 ;; (start-bobbing! (_type_ float int int) none) + (water-control-method-12 () none) ;; 12 ;; (distance-from-surface (_type_) float) + (water-control-method-13 () none) ;; 13 ;; (spawn-ripples (_type_ float vector int vector symbol) none) + (water-control-method-14 () none) ;; 14 ;; (display-water-marks? (_type_) symbol) + (water-control-method-15 () none) ;; 15 ;; (enter-water (_type_) none) + (water-control-method-16 () none) ;; 16 ;; (water-control-method-16 (_type_) none) + (water-control-method-17 () none) ;; 17 ;; (water-control-method-17 (_type_) none) + ) + ) +|# + +#| +(deftype water-vol (process-hidden) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; camera ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern cam-slave-get-vector-with-offset (function entity-actor vector symbol symbol)) +(define-extern cam-slave-get-flags (function entity symbol uint)) +(define-extern cam-slave-get-float (function entity symbol float float)) +(define-extern cam-slave-get-fov (function entity float)) +(define-extern cam-slave-get-intro-step (function entity float)) +(define-extern cam-slave-get-interp-time (function entity float)) +(define-extern cam-slave-get-rot (function entity-actor matrix matrix)) +(define-extern cam-state-from-entity (function entity (state camera-slave))) +(define-extern parameter-ease-none (function object object)) +(define-extern parameter-ease-clamp (function float float)) +(define-extern parameter-ease-lerp-clamp (function float float)) +(define-extern parameter-ease-sqrt-clamp (function float float)) +(define-extern fourth-power (function float float)) +(define-extern third-power (function float float)) +(define-extern parameter-ease-sqr-clamp (function float float)) +(define-extern parameter-ease-cube-clamp (function float float)) +(define-extern parameter-ease-sin-clamp (function float float)) +(define-extern *cam-res-string* string) +(define-extern cam-slave-init-vars (function none :behavior camera-slave)) +(define-extern cam-slave-go (function (state camera-slave) none :behavior camera-slave)) +(define-extern cam-slave-init (function (state camera-slave) entity none :behavior camera-slave)) +(define-extern cam-standard-event-handler (function process int symbol event-message-block object :behavior camera-slave)) +(define-extern cam-curve-pos (function vector vector curve symbol vector :behavior camera-slave)) +(define-extern cam-curve-setup (function vector none :behavior camera-slave)) +(define-extern cam-calc-follow! (function cam-rotation-tracker vector symbol vector)) +(define-extern mat-remove-z-rot (function matrix vector matrix)) +(define-extern slave-matrix-blend-2 (function matrix cam-slave-options-u32 vector matrix matrix)) +(define-extern vector-into-frustum-nosmooth! (function matrix vector float vector)) +(define-extern slave-set-rotation! (function cam-rotation-tracker vector cam-slave-options-u32 float symbol none)) +(define-extern v-slrp2! (function vector vector vector float vector float vector)) +(define-extern v-slrp3! (function vector vector vector vector float vector)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-interface ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern position-in-front-of-camera! (function vector float float vector)) +(define-extern position-in-front-of-screen! (function vector float vector vector)) +(define-extern matrix-local->world (function symbol symbol matrix)) +(define-extern matrix-world->local (function symbol object matrix)) +(define-extern *camera-dummy-vector* vector) +(define-extern *camera-dummy-velocity* vector) +(define-extern camera-pos (function vector)) +(define-extern camera-vel (function vector)) +(define-extern math-camera-pos (function vector)) +(define-extern math-camera-nearest-dist-sq (function vector float)) +(define-extern math-camera-nearest (function vector math-camera)) +(define-extern math-camera-nearest-matrix (function vector matrix)) +(define-extern math-camera-nearest-dist (function vector float)) +(define-extern camera-matrix (function matrix)) +(define-extern math-camera-matrix (function matrix)) +(define-extern camera-angle (function float)) +(define-extern camera-teleport-to-entity (function entity-actor symbol :behavior process)) +(define-extern camera-teleport-to-entity-named (function string none)) +(define-extern camera-teleport-to-location (function float float float none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-master ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern reset-follow function) ;; (function symbol object :behavior camera-master) +;; (define-extern reset-target-tracking function) ;; (function object :behavior camera-master) +;; (define-extern master-track-target function) ;; (function object :behavior camera-master) +;; (define-extern setup-slave-for-hopefull function) ;; (function camera-slave none) +;; (define-extern master-is-hopeful-better? function) ;; (function camera-slave camera-slave symbol :behavior camera-master) +;; (define-extern master-choose-entity function) ;; (function cam-setting-data symbol :behavior camera-master) +;; (define-extern cam-master-set-entity function) ;; (function cam-setting-data none) +;; (define-extern cam-master-activate-slave function) ;; (function symbol none) +;; (define-extern cam-master-active state) ;; (state camera-master) +;; (define-extern cam-master-init function) ;; (function none :behavior camera-master) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-combiner ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern cam-helper-temp (function (pointer camera-slave) (pointer camera-slave) float matrix :behavior camera-combiner)) +;; (define-extern cam-combiner-active state) ;; (state camera-combiner) +(define-extern cam-combiner-init (function none :behavior camera-combiner)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-update ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern plane-from-points function) ;; (function (inline-array plane) vector vector vector int float) +;; (define-extern set-point function) ;; (function vector float float float float) +;; (define-extern update-view-planes function) ;; (function math-camera (inline-array plane) float matrix float) +;; (define-extern *update-leaf-when-outside-bsp* object) ;; symbol +;; (define-extern update-visible function) ;; (function math-camera symbol) +;; (define-extern *save-camera-inv-rot* object) ;; matrix +;; (define-extern move-camera-from-pad function) ;; (function math-camera math-camera) +;; (define-extern external-cam-reset! function) ;; (function none) +;; (define-extern *start-timer* object) ;; int +;; (define-extern *timer-value* object) ;; int +;; (define-extern *start-pos* object) ;; vector +;; (define-extern update-camera function) ;; (function symbol) +;; (define-extern move-level-by-name function) ;; (function symbol float float float vector) +;; (define-extern execute-cam-post-hook-engine function) ;; (function int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vol-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype plane-volume (structure) + ((volume-type symbol :offset-assert 0) ;; guessed by decompiler + (point-count int16 :offset-assert 4) + (normal-count int16 :offset-assert 6) + (first-point vector :offset-assert 8) ;; (pointer vector) + (first-normal vector :offset-assert 12) ;; (pointer vector) + (num-planes int32 :offset-assert 16) + (plane (inline-array plane) :offset-assert 20) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x18 + :flag-assert #xc00000018 + (:methods + (plane-volume-method-9 () none) ;; 9 ;; (plane-volume-method-9 (_type_ symbol vector-array vector-array) plane-volume) + (plane-volume-method-10 () none) ;; 10 ;; (debug-draw (_type_) none) + (plane-volume-method-11 () none) ;; 11 ;; (point-in-vol? (_type_ vector float) symbol) + ) + ) +|# + +#| +(deftype vol-control (basic) + ((flags vol-flags :offset-assert 4) ;; guessed by decompiler + (process process-drawable :offset-assert 8) ;; guessed by decompiler + (pos-vol-count int32 :offset-assert 12) + (pos-vol plane-volume 32 :offset-assert 16) ;; guessed by decompiler + (neg-vol-count int32 :offset-assert 784) + (neg-vol plane-volume 32 :offset-assert 788) ;; guessed by decompiler + (debug-point vector-array :offset-assert 1556) ;; guessed by decompiler + (debug-normal vector-array :offset-assert 1560) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x61c + :flag-assert #xc0000061c + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process-drawable) _type_) + (vol-control-method-9 () none) ;; 9 ;; (debug-draw (_type_) none) + (vol-control-method-10 () none) ;; 10 ;; (vol-control-method-10 (_type_ plane) symbol) + (vol-control-method-11 () none) ;; 11 ;; (should-display? (_type_) symbol) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-layout ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype cam-layout-bank (basic) + ((spline-t float :offset-assert 4) + (spline-step float :offset-assert 8) + (intro-t float :offset-assert 12) + (intro-step float :offset-assert 16) + (debug-t float :offset-assert 20) + (debug-step float :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype clm-basic (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype clm-item-action (structure) + ((button uint64 :offset-assert 0) ;; pad-buttons-u64 + (options uint64 :offset-assert 8) ;; clm-item-action-options + (func symbol :offset-assert 16) ;; guessed by decompiler + (parm0 int32 :offset-assert 20) ;; guessed by decompiler + (parm1 symbol :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ;; field parm0 uses ~A with a signed load. field parm1 uses ~A with a signed load. + ) +|# + +#| +(deftype clm-item (clm-basic) + ((description string :offset-assert 4) ;; guessed by decompiler + (button-symbol symbol :offset-assert 8) ;; guessed by decompiler + (action clm-item-action :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype clm-list-item (basic) + ((description string :offset-assert 4) ;; guessed by decompiler + (track-val symbol :offset-assert 8) ;; guessed by decompiler + (val-func symbol :offset-assert 12) ;; guessed by decompiler + (val-parm0 int32 :offset-assert 16) ;; guessed by decompiler + (val-parm1 symbol :offset-assert 20) ;; guessed by decompiler + (actions (array clm-item-action) :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ;; field track-val uses ~A with a signed load. field val-parm0 uses ~A with a signed load. field val-parm1 uses ~A with a signed load. + ) +|# + +#| +(deftype clm-list (clm-basic) + ((tracker symbol :offset-assert 4) ;; guessed by decompiler + (cur-list-item int32 :offset-assert 8) + (items (array clm-list-item) :offset-assert 12) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype clm (basic) + ((title string :offset-assert 4) ;; guessed by decompiler + (items (array clm-basic) :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype volume-descriptor-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data plane-volume :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype cam-layout (process) + ((cam-entity entity-camera :offset-assert 144) ;; guessed by decompiler + (num-entities int32 :offset-assert 148) + (cur-entity int32 :offset-assert 152) + (num-volumes int32 :offset-assert 156) + (cur-volume int32 :offset-assert 160) + (first-pvol int32 :offset-assert 164) + (first-cutoutvol int32 :offset-assert 168) + (res-key float :offset-assert 172) + ) + :method-count-assert 15 + :size-assert #xb0 + :flag-assert #xf002000b0 + (:methods + (cam-layout-method-9 () none) ;; 9 + (cam-layout-method-10 () none) ;; 10 + (cam-layout-method-11 () none) ;; 11 + (cam-layout-method-12 () none) ;; 12 + (cam-layout-method-13 () none) ;; 13 + (cam-layout-method-14 () none) ;; 14 + ) + (:states + cam-layout-active ;; associated process guessed by decompiler, old: (state cam-layout) + ) + ) +|# + +#| +(deftype interp-test-info (structure) + ((from vector :inline :offset-assert 0) + (to vector :inline :offset-assert 16) + (origin vector :inline :offset-assert 32) + (color vector4w :offset-assert 48) + (axis vector :offset-assert 52) + (disp string :offset-assert 56) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype clmf-cam-flag-toggle-info (structure) + ((key float :offset-assert 0) + (force-on int32 :offset-assert 4) + (force-off int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +;; (define-extern *camera-layout-blink* object) ;; symbol +;; (define-extern *CAM_LAYOUT-bank* cam-layout-bank) ;; cam-layout-bank +;; (define-extern *camera-layout-message-ypos* object) ;; int +;; (define-extern *volume-point-current* object) ;; int +;; (define-extern *volume-point* object) ;; vector-array +;; (define-extern *volume-normal-current* object) ;; int +;; (define-extern *volume-normal* object) ;; vector-array +;; (define-extern *volume-descriptor-current* object) ;; int +;; (define-extern *volume-descriptor* object) ;; vol-control +;; (define-extern cam-layout-print function) ;; (function int int string pointer) +;; (define-extern cam-layout-intersect-dist function) ;; (function vector vector vector float) +;; (define-extern cam-layout-entity-volume-info-create function) ;; (function entity-camera symbol symbol :behavior cam-layout) +;; (define-extern cam-layout-entity-volume-info function) ;; (function symbol :behavior cam-layout) +;; (define-extern v-slrp! function) ;; (function vector vector vector float vector) +;; (define-extern interp-test function) ;; (function (function vector vector vector float vector float none) interp-test-info none) +;; (define-extern interp-test-deg function) ;; (function (function vector vector vector vector float none) interp-test-info none) +;; (define-extern cam-layout-entity-info function) ;; (function entity-actor none) +;; (define-extern clmf-button-test function) ;; (function symbol) +;; (define-extern clmf-bna function) ;; (function symbol) +;; (define-extern clmf-implement function) ;; (function symbol) +;; (define-extern clmf-input function) ;; (function vector vector int vector) +;; (define-extern clmf-pos-rot function) ;; (function symbol symbol symbol :behavior cam-layout) +;; (define-extern clmf-next-volume function) ;; (function int symbol :behavior cam-layout) +;; (define-extern clmf-next-vol-dpad function) ;; (function symbol) +;; (define-extern clmf-to-edit-cam function) ;; (function symbol) +;; (define-extern *last-cur-entity* object) ;; int +;; (define-extern clmf-next-entity function) ;; (function int symbol :behavior cam-layout) +;; (define-extern clmf-to-spline-attr function) ;; (function symbol) +;; (define-extern clmf-to-intro-attr function) ;; (function symbol) +;; (define-extern clmf-to-index-attr function) ;; (function symbol) +;; (define-extern clmf-to-focalpull-attr function) ;; (function symbol) +;; (define-extern clmf-to-edit function) ;; (function symbol :behavior cam-layout) +;; (define-extern clmf-to-select function) ;; (function symbol) +;; (define-extern clmf-look-through function) ;; (function symbol :behavior cam-layout) +;; (define-extern fov->maya function) ;; (function float float) +;; (define-extern cam-layout-save-cam-rot function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-cam-trans function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-pivot function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-align function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-interesting function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-fov function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-focalpull function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-flags function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-focalpull-flags function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-campoints-flags function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-introsplinetime function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-introsplineexitval function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-interptime function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-splineoffset function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-spline-follow-dist-offset function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-campointsoffset function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-tiltAdjust function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-stringMinLength function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-stringMaxLength function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-stringMinHeight function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-stringMaxHeight function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-stringCliffHeight function) ;; (function symbol string entity-actor none) +;; (define-extern cam-layout-save-maxAngle function) ;; (function symbol string entity-actor none) +;; (define-extern clmf-save-single function) ;; (function entity-camera symbol symbol file-stream :behavior cam-layout) +;; (define-extern clmf-save-one function) ;; (function symbol symbol :behavior cam-layout) +;; (define-extern clmf-save-all function) ;; (function symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-flag-toggle function) ;; (function int int symbol :behavior cam-layout) +;; (define-extern clmf-cam-flag function) ;; (function string uint uint symbol :behavior cam-layout) +;; (define-extern clmf-cam-float-adjust function) ;; (function symbol (pointer float) symbol :behavior cam-layout) +;; (define-extern clmf-cam-meters function) ;; (function meters symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-fov function) ;; (function degrees symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-deg function) ;; (function degrees symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-intro-time function) ;; (function float symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-interp-time function) ;; (function float symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-float function) ;; (function float symbol symbol :behavior cam-layout) +;; (define-extern clmf-cam-string function) ;; (function string symbol symbol :behavior cam-layout) +;; (define-extern *clm-focalpull-attr* clm) ;; clm +;; (define-extern *clm-index-attr* clm) ;; clm +;; (define-extern *clm-intro-attr* clm) ;; clm +;; (define-extern *clm-spline-attr* clm) ;; clm +;; (define-extern *clm-cam-attr* clm) ;; clm +;; (define-extern *clm-cam-lookthrough* clm) ;; clm +;; (define-extern *clm-edit* clm) ;; clm +;; (define-extern *clm-save-all* clm) ;; clm +;; (define-extern *clm-save-one* clm) ;; clm +;; (define-extern *clm-select* clm) ;; clm +;; (define-extern *clm* object) ;; clm +;; (define-extern cam-layout-do-action function) ;; (function clm-item-action object :behavior cam-layout) +;; (define-extern cam-layout-function-call function) ;; (function symbol string int basic symbol :behavior cam-layout) +;; (define-extern cam-layout-do-menu function) ;; (function clm symbol :behavior cam-layout) +;; (define-extern cam-layout-init function) ;; (function object :behavior cam-layout) +;; (define-extern cam-layout-stop function) ;; (function symbol) +;; (define-extern cam-layout-start function) ;; (function symbol) +;; (define-extern cam-layout-restart function) ;; (function symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-debug ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype cam-dbg-scratch (structure) + ((linevec4w vector :inline :offset-assert 0) + (color vector :inline :offset-assert 32) + (plotvec vector :inline :offset-assert 48) + (linevec vector :inline :offset-assert 80) + (rel-vec vector :inline :offset-assert 112) + (sphere-v-start vector :inline :offset-assert 128) + (sphere-v-end vector :inline :offset-assert 144) + (sphere-v-down vector :inline :offset-assert 160) + (sphere-vec vector :inline :offset-assert 176) + (crossvec vector :inline :offset-assert 192) + (bboxvec vector :inline :offset-assert 240) + (fov-vv vector :inline :offset-assert 336) + (fov-src vector :inline :offset-assert 400) + (fov-dest vector :inline :offset-assert 416) + (fov-vert vector :inline :offset-assert 432) + (fov-horz vector :inline :offset-assert 448) + ) + :method-count-assert 9 + :size-assert #x1d0 + :flag-assert #x9000001d0 + ) +|# + +#| +(deftype cam-debug-tri (structure) + ((vertex UNKNOWN 3 :offset-assert 0) + (intersect vector :inline :offset-assert 48) + (color vector4w :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +#| +(deftype cam-collision-record (structure) + ((pos vector :inline :offset-assert 0) + (vel vector :inline :offset-assert 16) + (desired-pos vector :inline :offset-assert 32) + (cam-tpos-cur vector :inline :offset-assert 48) + (cam-tpos-old vector :inline :offset-assert 64) + (view-flat vector :inline :offset-assert 80) + (string-min-val vector :inline :offset-assert 96) + (string-max-val vector :inline :offset-assert 112) + (view-off vector :inline :offset-assert 128) + (min-z-override float :offset-assert 144) + (string-push-z float :offset-assert 148) + (view-off-param float :offset-assert 152) + (frame int32 :offset-assert 156) + (iteration int32 :offset-assert 160) + (move-type basic :offset-assert 164) + ) + :method-count-assert 9 + :size-assert #xa8 + :flag-assert #x9000000a8 + ) +|# + +#| +(deftype cam-collision-record-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data UNKNOWN :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +;; (define-extern *camera-old-cpu* object) +;; (define-extern *camera-old-vu* object) +;; (define-extern *camera-old-tfrag-bytes* object) +;; (define-extern *camera-old-level* object) +;; (define-extern *camera-old-stat-string-tfrag* object) +;; (define-extern *camera-old-stat-string-tfrag-near* object) +;; (define-extern *camera-old-stat-string-total* object) +;; (define-extern cam-slave-options->string function) ;; (function cam-slave-options object string) +;; (define-extern cam-index-options->string function) ;; (function cam-index-options object string) +;; (define-extern slave-los-state->string function) ;; (function slave-los-state string) +;; (define-extern cam-line-dma function) +;; (define-extern camera-line2d function) +;; (define-extern camera-plot-float-func function) ;; (function float float float float (function float float) vector4w none) +;; (define-extern camera-line-setup function) ;; (function vector4w none) +;; (define-extern camera-line-draw function) ;; (function vector vector none) +;; (define-extern camera-line function) ;; (function vector vector vector4w none) +;; (define-extern camera-line-rel function) ;; (function vector vector vector4w none) +;; (define-extern camera-line-rel-len function) ;; (function vector vector float vector4w none) +;; (define-extern camera-sphere function) +;; (define-extern camera-cross function) ;; (function vector vector vector vector4w meters none) +;; (define-extern camera-bounding-box-draw function) +;; (define-extern *cam-debug-los-tri-current* object) +;; (define-extern *cam-debug-los-tri* object) +;; (define-extern *cam-debug-coll-tri-current* object) +;; (define-extern *cam-debug-coll-tri* object) +;; (define-extern cam-debug-reset-coll-tri function) ;; (function none) +;; (define-extern cam-debug-add-los-tri function) ;; (function (inline-array collide-cache-tri) vector vector none) +;; (define-extern cam-debug-add-coll-tri function) +;; (define-extern cam-debug-draw-tris function) +;; (define-extern camera-fov-draw function) +;; (define-extern camera-fov-frame function) ;; (function matrix vector float float float vector4w symbol) +;; (define-extern debug-euler function) +;; (define-extern bike-cam-limit function) +;; (define-extern camera-slave-debug function) ;; (function camera-slave none) +;; (define-extern master-draw-coordinates function) +;; (define-extern *cam-collision-record-first* object) +;; (define-extern *cam-collision-record-last* object) +;; (define-extern *cam-collision-record-show* object) +;; (define-extern *cam-collision-record* object) +;; (define-extern cam-collision-record-save function) ;; (function vector vector int symbol camera-slave none) +;; (define-extern cam-collision-record-step function) +;; (define-extern cam-collision-record-draw function) +;; (define-extern camera-master-debug function) ;; (function camera-master none) +;; (define-extern debug-set-camera-pos-rot! function) ;; (function vector matrix vector) +;; (define-extern cam-restore function) +;; (define-extern cam-restore-generic-bug function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-start ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern cam-stop function) ;; (function symbol) +;; (define-extern cam-start function) ;; (function symbol none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cloth-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype stick-constraint (structure) + ((constraint-length-half float :offset-assert 0) + (one-over-two-times-constraint-length float :offset-assert 4) + (constraint-length-sqd float :offset-assert 8) + (particle0 uint16 :offset-assert 12) + (particle1 uint16 :offset-assert 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype verlet-particle (structure) + ((pos vector :inline :offset-assert 0) + (prev-pos vector :inline :offset-assert 16) + (mass-scale float :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype disc-constraint (structure) + ((normal vector :inline :offset-assert 0) + (origin vector :inline :offset-assert 16) + (radius float :offset-assert 32) + (start-particle-index int16 :offset-assert 36) + (end-particle-index int16 :offset-assert 38) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype cylinder-constraint (structure) + ((c0 vector :inline :offset-assert 0) + (norm vector :inline :offset-assert 16) + (length float :offset-assert 32) + (radius float :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype particle-anchor-point (structure) + ((anchor-pos vector :inline :offset-assert 0) + (particle-index uint16 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x12 + :flag-assert #x900000012 + ) +|# + +#| +(deftype particle-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data verlet-particle :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype float-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data float :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype stick-constraint-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data stick-constraint :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype collision-sphere-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data sphere :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype collision-disc-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data disc-constraint :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype collision-cylinder-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data cylinder-constraint :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype anchor-point-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data particle-anchor-point :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype verlet-particle-system (cloth-base) + ((particles particle-array :offset-assert 4) ;; guessed by decompiler + (drag float :offset-assert 8) + (accum-force vector :inline :offset-assert 16) + (timestep-frequency int8 :offset-assert 32) + (last-simulate-remaining int8 :offset-assert 33) + (momentum vector :inline :offset-assert 48) + ) + :method-count-assert 16 + :size-assert #x40 + :flag-assert #x1000000040 + (:methods + (verlet-particle-system-method-11 () none) ;; 11 ;; (accumulate-external-forces! (_type_) none) + (verlet-particle-system-method-12 () none) ;; 12 ;; (compute-verlet-step (_type_ float) none) + (verlet-particle-system-method-13 () none) ;; 13 ;; (run-one-iteration (_type_) none) + (verlet-particle-system-method-14 () none) ;; 14 ;; (reset! (_type_) none) + (verlet-particle-system-method-15 () none) ;; 15 ;; (debug-draw (_type_) none) + ) + ) +|# + +#| +(deftype current-position-info (structure) + ((current-vert-index uint16 :offset-assert 0) + (last-2-x-index uint16 :offset-assert 2) + (last-2-y-index uint16 :offset-assert 4) + (last-x-index uint16 :offset-assert 6) + (last-y-index uint16 :offset-assert 8) + (lights vu-lights :inline :offset-assert 16) + (scale vector :inline :offset-assert 128) + (clamp-col vector :inline :offset-assert 144) + (last-normal vector :inline :offset-assert 160) + (face-normal-needs-flip? symbol :offset-assert 176) ;; guessed by decompiler + (cross-index0 int8 :offset-assert 180) + (cross-index1 int8 :offset-assert 181) + (backside-normal vector :inline :offset-assert 192) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) +|# + +#| +(deftype cloth-system (verlet-particle-system) + ((particles particle-array :offset-assert 0) ;; guessed by decompiler + (drag float :offset-assert 4) + (accum-force vector :inline :offset-assert 12) + (timestep-frequency int8 :offset-assert 28) + (last-simulate-remaining int8 :offset-assert 29) + (momentum vector :inline :offset-assert 44) + (ground-constraint float :offset-assert 60) + (disc-collision-constraints collision-disc-array :offset-assert 64) ;; guessed by decompiler + (collision-constraints collision-sphere-array :offset-assert 68) ;; guessed by decompiler + (stick-constraints stick-constraint-array :offset-assert 72) ;; guessed by decompiler + (anchor-points anchor-point-array :offset-assert 76) ;; guessed by decompiler + (constraint-strengths int32 3 :offset-assert 80) ;; guessed by decompiler + (num-xy-constraints int16 :offset-assert 92) + (num-diagonal-constraints int16 :offset-assert 94) + (cloth-width int32 :offset-assert 96) + (cloth-height int32 :offset-assert 100) + (strip prim-strip :offset-assert 104) ;; guessed by decompiler + (strip2 prim-strip :offset-assert 108) ;; guessed by decompiler + (strip3 prim-strip :offset-assert 112) ;; guessed by decompiler + (mesh art-cloth-geo :offset-assert 116) ;; guessed by decompiler + (gravity-constant float :offset-assert 120) + (wind-constant float :offset-assert 124) + (flags cloth-flag :offset-assert 132) + (thickness-scalar float :offset-assert 140) + (ball-collision-radius float :offset-assert 144) + (face-normal-scalar float :offset-assert 148) + (reset-count int8 :offset-assert 152) + (num-iterations int8 :offset-assert 153) + (secret-disable uint64 :offset-assert 156) ;; game-secrets + (params cloth-params :offset-assert 164) + ) + :method-count-assert 38 + :size-assert #xac + :flag-assert #x26000000ac + ;; field cloth-flag is likely a value type. + (:methods + (cloth-system-method-16 () none) ;; 16 ;; (initialize-cloth-system! (_type_ cloth-params) none) + (cloth-system-method-17 () none) ;; 17 ;; (debug-draw-spheres (_type_) none) + (cloth-system-method-18 () none) ;; 18 ;; (post-physics-update (_type_) int) + (cloth-system-method-19 () none) ;; 19 ;; (enforce-constraints-1 (_type_) none) + (cloth-system-method-20 () none) ;; 20 ;; (enforce-constraints-2 (_type_) none) + (cloth-system-method-21 () none) ;; 21 ;; (cloth-system-method-21 (_type_) none) + (cloth-system-method-22 () none) ;; 22 ;; (cloth-system-method-22 (_type_) none) + (cloth-system-method-23 () none) ;; 23 ;; (cloth-system-method-23 (_type_) none) + (cloth-system-method-24 () none) ;; 24 ;; (cloth-system-method-24 (_type_) int) + (cloth-system-method-25 () none) ;; 25 ;; (cloth-system-method-25 (_type_) int) + (cloth-system-method-26 () none) ;; 26 ;; (cloth-system-method-26 (_type_) none) + (cloth-system-method-27 () none) ;; 27 ;; (cloth-system-method-27 (_type_ vector int int current-position-info) vector) + (cloth-system-method-28 () none) ;; 28 ;; (cloth-system-method-28 (_type_ int int current-position-info) none) + (cloth-system-method-29 () none) ;; 29 ;; (cloth-system-method-29 (_type_ int int current-position-info int) uint) + (cloth-system-method-30 () none) ;; 30 ;; (cloth-system-method-30 (_type_ int int current-position-info int) none) + (cloth-system-method-31 () none) ;; 31 ;; (cloth-system-method-31 (_type_ current-position-info) none) + (cloth-system-method-32 () none) ;; 32 ;; (cloth-system-method-32 (_type_ vector int int current-position-info) none) + (cloth-system-method-33 () none) ;; 33 ;; (cloth-system-method-33 (_type_ vu-lights) none) + (cloth-system-method-34 () none) ;; 34 ;; (hide! (_type_) none) + (cloth-system-method-35 () none) ;; 35 ;; (reset-locations (_type_) none) + (cloth-system-method-36 () none) ;; 36 ;; (pre-physics-update (_type_) none) + (cloth-system-method-37 () none) ;; 37 ;; (cloth-system-cmd-handler (_type_ pair) none) + ) + ) +|# + +#| +(deftype cloth-on-skeleton (cloth-system) + ((base-transform-index int16 :offset-assert 168) + (owner uint64 :offset-assert 172) ;; handle + (last-owner-pos vector :inline :offset-assert 188) + (last-owner-mat matrix :inline :offset-assert 204) + ) + :method-count-assert 38 + :size-assert #x110 + :flag-assert #x2600000110 + ;; field cloth-flag is likely a value type. + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cloth ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern get-neighboring-faces function) ;; (function vector4w int int int int int) +;; (define-extern *normal-array* object) ;; (inline-array vector) +;; (define-extern light-vertex function) ;; (function current-position-info vector rgba) +;; (define-extern *once* object) ;; symbol +;; (define-extern *cloth-fade-alpha* object) ;; gs-alpha +;; (define-extern symbol->cloth-flags function) ;; (function symbol cloth-flag) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; process-drawable ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern cspace-by-name (function process-drawable string cspace)) +(define-extern cspace-index-by-name (function process-drawable string int)) +(define-extern vector<-cspace! (function vector cspace vector)) +(define-extern vector<-matrix! (function vector matrix vector)) +(define-extern vector<-cspace+vector! (function vector cspace vector vector)) +(define-extern cspace-children (function process-drawable int pair)) +(define-extern cspace-inspect-tree (function process-drawable cspace int int object process-drawable)) +(define-extern execute-math-engine (function int)) +(define-extern execute-cloth-engine (function int)) +(define-extern draw-joint-axes (function process-drawable none)) +(define-extern draw-root (function process-drawable none)) +(define-extern empty-state (state process)) +(define-extern process-drawable-error-print (function process-drawable string none)) +(define-extern skeleton-group->draw-control (function process-drawable skeleton-group (pointer cspace-array) draw-control)) +(define-extern ja-group-in-array? (function (array int32) art-joint-anim :behavior process-drawable)) +(define-extern ja-done? (function int symbol :behavior process-drawable)) +(define-extern ja-min (function int symbol :behavior process-drawable)) +(define-extern ja-max? (function int symbol :behavior process-drawable)) +(define-extern ja-num-frames (function int int :behavior process-drawable)) +(define-extern ja-frame-num (function int float :behavior process-drawable)) +(define-extern ja-aframe-num (function int float :behavior process-drawable)) +(define-extern ja-aframe (function float int float :behavior process-drawable)) +(define-extern ja-speed (function int float :behavior process-drawable)) +(define-extern ja-step (function int float :behavior process-drawable)) +(define-extern ja-rate (function int float :behavior process-drawable)) +(define-extern ja-linear-vel (function int vector :behavior process-drawable)) +;; (define-extern ja-linear-dist function) +;; (define-extern ja-distance-covered function) +(define-extern ja-channel-set! (function int int :behavior process-drawable)) +(define-extern ja-channel-push! (function int time-frame int :behavior process-drawable)) +(define-extern ja-channel-float! (function art-joint-anim float float float joint-control-channel :behavior process-drawable)) +(define-extern joint-control-reset! (function joint-control joint-control-channel none :behavior process-drawable)) +(define-extern ja-group-size (function int :behavior process-drawable)) +(define-extern ja-eval (function int :behavior process-drawable)) +(define-extern ja-blend-eval (function int :behavior process-drawable)) +(define-extern cloth-post (function none :behavior process-drawable)) +(define-extern ja-post (function none :behavior process-drawable)) +(define-extern sleep-code (function symbol :behavior process)) +(define-extern transform-and-sleep (function none :behavior process-drawable)) +(define-extern transform-and-sleep-code (function none :behavior process-drawable)) +(define-extern transform-post (function int :behavior process-drawable)) +(define-extern rider-trans (function none :behavior process-drawable)) +(define-extern rider-post (function none :behavior process-drawable)) +(define-extern pusher-post (function int :behavior process-drawable)) +(define-extern process-drawable-delay-player (function time-frame int :behavior process-drawable)) +(define-extern process-drawable-fuel-cell-handler (function process int symbol event-message-block none :behavior process-drawable)) +(define-extern process-drawable-birth-fuel-cell (function entity vector symbol none :behavior process-drawable)) +(define-extern find-offending-process-focusable (function process-tree attack-info process-focusable :behavior process-drawable)) +(define-extern *valid-con* string) +(define-extern process-drawable-valid? (function process-drawable symbol)) +(define-extern process-drawable-reset-all-cloth (function process-drawable none)) +(define-extern process-drawable-set-riding (function process-drawable symbol none)) +(define-extern process-drawable-set-cloth-ground-height (function process-drawable float none)) +(define-extern process-drawable-set-wind-strength (function process-drawable float none)) +(define-extern process-drawable-show-all-cloth (function process-drawable symbol none)) +(define-extern process-drawable-slow-mo-cloth (function process-drawable symbol none)) +(define-extern process-drawable-cloth-command (function process-drawable pair none)) +;; (define-extern process-drawable-local-transq-for-joint! function) +;; (define-extern process-drawable-local-trans-for-joint! function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; curves ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defenum loop-behavior + :type uint64 + :bitfield #f + (wrap) + (clamp) + (b2) + (use-default) + ) + +(deftype float-pair (structure) + "Two floats. Specifies one point on a piecewise linear curve." + ((first float :offset-assert 0) + (second float :offset-assert 4) + (x float :offset 0) + (y float :offset 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype float-pair-array (inline-array-class) + "Array of points used to make a piecewise linear curve." + ((data float-pair :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype curve2d (basic) + "Interface for evaluating a 2d curve. + The input is a float (x-position) and the output is a float (y-position). + The curve is over (0, 1). Values outside of the range are either clamped + or wrapped depending on the loop-behavior flag." + () + :method-count-assert 10 + :size-assert #x4 + :flag-assert #xa00000004 + (:methods + (evaluate "Compute value of curve at the given position." (_type_ float loop-behavior) float) ;; 9 + ) + ) + +(deftype curve-color (basic) + "Interface for evaluating a color curve. The input is a float, representing + progress through the curve, and the result is a floating point rgba color." + () + :method-count-assert 10 + :size-assert #x4 + :flag-assert #xa00000004 + (:methods + (evaluate "Compute value of curve at the given position." (_type_ float rgbaf loop-behavior) rgbaf) ;; 9 + ) + ) + +(deftype curve2d-piecewise (curve2d) + "Implementation of 2d-curve for a piecewise linear curve. + Not particularly efficient - each evaluation needs to check each point." + ((pts float-pair-array :offset-assert 4) ;; guessed by decompiler + (default-loop-behavior loop-behavior :offset-assert 8) ;; loop-behavior + ) + :method-count-assert 12 + :size-assert #x10 + :flag-assert #xc00000010 + (:methods + (allocate! "Allocate memory for points." (_type_ int symbol symbol) none) ;; 10 + (curve2d-piecewise-method-11 (_type_) none) ;; 11 + ) + ) + +(deftype curve2d-fast (curve2d) + "Implementation of 2d piecewise linear curve which tries to be faster. + While it is faster, it places the huge restriction that you can only have 4 points. + Note that the xs should be negative here." + ((xs vector :inline :offset-assert 16) + (ys vector :inline :offset-assert 32) + (one-over-x-deltas vector :inline :offset-assert 48) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + ) + +(deftype curve-color-fast (curve-color) + "Implementation of color curve which tries to be faster. + While it is faster, it again has the restriction that you only + get 4 piecewise sections." + ((xs vector :inline :offset-assert 16) + (ys vector 4 :inline :offset-assert 32) ;; guessed by decompiler + (one-over-x-deltas vector :inline :offset-assert 96) + ) + :method-count-assert 10 + :size-assert #x70 + :flag-assert #xa00000070 + ) + +(deftype color-pair (structure) + "Single section of a piecewise linear color curve. + Unlike the fast version, this stores x values exactly like you'd expect." + ((first float :offset-assert 0) + (second rgbaf :inline :offset-assert 16) + (x float :offset 0) + (y rgbaf :inline :offset 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype color-pair-array (inline-array-class) + "Array of points for piecewise linear color curve." + ((data color-pair :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype curve-color-piecewise (curve-color) + ((pts color-pair-array :offset-assert 4) ;; guessed by decompiler + (default-loop-behavior loop-behavior :offset-assert 8) ;; loop-behavior + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (allocate! "Allocate memory for points." (_type_ int symbol symbol) none) ;; 10 + ) + ) + +(define-extern rgbaf-lerp! "Lerp all four components of rgba." (function rgbaf rgbaf rgbaf float rgbaf)) +(define-extern evaluate-curve-fast "Evaluate a curve2d-fast at the given value." (function curve2d-fast float float)) +(define-extern evaluate-color-curve-fast "Evaluate a color-curve-fast at the given value." (function curve-color-fast float rgbaf rgbaf)) +(define-extern rgba<-rgbaf "Convert rgbaf to rgba. Seems like the input rgba's value is not used in any way." (function rgba rgbaf rgba)) +(define-extern *curve-unity* curve2d-fast) +(define-extern *curve-linear-up* curve2d-fast) +(define-extern *curve-linear-down* curve2d-fast) +(define-extern *curve-linear-up-hold* curve2d-piecewise) +(define-extern *curve-linear-up-down* curve2d-fast) +(define-extern *trail-color-curve-white* curve-color-fast) +(define-extern particle-color-curve-white* curve-color-fast) +(define-extern *trail-color-curve-red* curve-color-fast) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ambient ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern can-display-query? function) ;; (function process string float symbol) +;; (define-extern talker-surpress! function) ;; (function int) +;; (define-extern talker-displayed? function) ;; (function symbol) +;; (define-extern kill-current-talker function) ;; (function pair pair symbol none) +;; (define-extern string->talker-speech function) ;; (function string talker-speech-class) +;; (define-extern talker-spawn-func function) ;; (function talker-speech-class process-tree vector region sound-id) +;; (define-extern talker-init function) ;; (function talker-speech-class vector region none :behavior talker) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *test-speech-info* speech-info) +(define-extern speech-type->string (function speech-type string)) +(define-extern gui-status->string (function gui-status string)) +(define-extern *speech-control* speech-control) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; region ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern region-tree-execute function) ;; (function symbol vector vector none) +;; (define-extern region-execute function) ;; (function none) +;; (define-extern region-prim-lookup-by-id function) ;; (function int symbol int drawable-region-prim) +;; (define-extern region-lookup-by-id function) ;; (function int region) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; script ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern command-get-int function) ;; (function object int int) +;; (define-extern command-get-float function) ;; (function object float float) +;; (define-extern command-get-time function) ;; (function object int time-frame) +;; (define-extern command-get-param function) ;; (function object object object) +;; (define-extern command-get-quoted-param function) ;; (function object object object) +;; (define-extern command-get-process function) ;; (function object process process) +;; (define-extern command-get-entity function) ;; (function object entity entity) +;; (define-extern command-get-trans function) ;; (function object vector vector) +;; (define-extern key-assoc function) ;; (function object pair vector4w pair) +;; (define-extern *script-form* object) ;; (inline-array script-form) +;; (define-extern level-from-heap function) ;; (function int level) +;; (define-extern *syntax-context* object) ;; script-context +;; (define-extern *script-context* object) ;; script-context + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; generic-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype target-start (process-hidden) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + ) +|# + +#| +(deftype camera-start (process-hidden) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + ) +|# + +#| +(deftype cam-slope (process-hidden) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + ) +|# + +;; simple-prim is already defined! + +#| +(deftype simple-prim-zbuf-mask (simple-prim) + () + :method-count-assert 56 + :size-assert #xfc + :flag-assert #x38007000fc + ) +|# + +#| +(deftype simple-prim-particle-binding (simple-prim) + ((color rgba :offset-assert 252) ;; guessed by decompiler + (lifetime uint64 :offset-assert 256) ;; time-frame + (state-time uint64 :offset-assert 240) ;; time-frame + ) + :method-count-assert 58 + :size-assert #x110 + :flag-assert #x3a00800110 + (:methods + (simple-prim-particle-binding-method-57 () none) ;; 57 + ) + (:state-methods + die ;; 56 + active ;; 50 + ) + ) +|# + +#| +(deftype part-controller (process) + ((actor-group (pointer actor-group) :offset-assert 140) ;; guessed by decompiler + (actor-group-count int32 :offset-assert 144) + (spawn-delay uint64 :offset-assert 148) ;; time-frame + (current-part-index uint16 :offset-assert 156) + (state-time uint64 :offset-assert 164) ;; time-frame + (next-reset-time uint64 :offset-assert 172) ;; time-frame + (reset-interval-min uint64 :offset-assert 180) ;; time-frame + (reset-interval-max uint64 :offset-assert 188) ;; time-frame + (particle-launchers (array (pointer sparticle-launch-group)) :offset-assert 196) ;; guessed by decompiler + (spawn-sound sound-info :offset-assert 200) ;; sound-name + ) + :method-count-assert 16 + :size-assert #xd0 + :flag-assert #x10004000d0 + (:methods + (part-controller-method-9 () none) ;; 9 + (part-controller-method-10 () none) ;; 10 + (part-controller-method-11 () none) ;; 11 + (part-controller-method-12 () none) ;; 12 + (part-controller-method-13 () none) ;; 13 + (part-controller-method-14 () none) ;; 14 ;; (active () _type_ :state) + ) + (:state-methods + active ;; 15 + ) + ) +|# + +#| +(deftype sound-on-path (process-drawable) + ((flags uint8 :offset-assert 248) + (spawn-sound uint128 :offset-assert 256) ;; sound-name + (loop-sound uint32 :offset-assert 276) + (amb-sound ambient-sound :offset-assert 280) ;; guessed by decompiler + (reverb-value float :offset-assert 284) + (reverb-radius float :offset-assert 288) + (reverb-radius-y float :offset-assert 292) + (reverb-mode int32 :offset-assert 296) + ) + :method-count-assert 53 + :size-assert #x12c + :flag-assert #x3500a0012c + (:state-methods + die ;; 51 + no-play ;; 52 + active ;; 50 + ) + ) +|# + +#| +(deftype crate (process-hidden) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + ) +|# + +;; (define-extern *part-tracker-params-default* object) ;; part-tracker-init-params +;; (define-extern *part-tracker-subsampler-params-default* object) ;; part-tracker-subsampler-init-params +;; (define-extern entity-lookup-part-group function) ;; (function entity-actor (pointer string) symbol (pointer sparticle-launch-group)) +;; (define-extern clone-anim-once function) ;; (function handle symbol string none :behavior process-drawable) +;; (define-extern clone-anim function) ;; (function handle symbol string none :behavior process-drawable) +;; (define-extern manipy-post function) ;; (function none :behavior manipy) +;; (define-extern manipy-init function) ;; (function vector entity-actor skeleton-group vector manipy-options none :behavior manipy) +;; (define-extern part-tracker-init-base function) ;; (function sparticle-launch-group time-frame (function part-tracker vector) uint process-drawable object none :behavior part-tracker) +;; (define-extern part-tracker-subsampler-init function) ;; (function part-tracker-subsampler-init-params object :behavior part-tracker-subsampler) +;; (define-extern part-tracker-init function) ;; (function part-tracker-init-params object :behavior part-tracker) +;; (define-extern part-tracker-track-root function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern lightning-tracker-init function) ;; (function lightning-spec time-frame symbol process-drawable vector vector none :behavior lightning-tracker) +;; (define-extern process-grab? function) ;; (function process symbol symbol :behavior process) +;; (define-extern process-release? function) ;; (function process symbol :behavior process) +;; (define-extern camera-look-at function) ;; (function pair uint process) +;; (define-extern ja-anim-done? function) ;; (function process symbol) +;; (define-extern camera-pov-from function) ;; (function pair uint process) +;; (define-extern touch-tracker-init function) ;; (function vector float time-frame none :behavior touch-tracker) +;; (define-extern process-drawable-random-point! function) ;; (function process-drawable vector vector) +;; (define-extern process-drawable-pair-random-point! function) ;; (function process-drawable process-drawable vector float vector) +;; (define-extern simple-prim-init-by-other function) ;; (function vector vector texture-id object :behavior simple-prim) +;; (define-extern birth-func-simple-prim function) ;; (function int sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern external-camera-controller-init-by-other function) ;; (function entity time-frame symbol object :behavior external-camera-controller) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lightning ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype lightning-globals (structure) + ((gcf-buf uint16 :offset-assert 0) + (vtx-buf uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (define-extern *lightning-spec-id-table* object) ;; (array lightning-spec) +;; (define-extern *lightning-gcf* object) ;; gcf-control +;; (define-extern lightning-fractal-gen function) ;; (function (inline-array vector) int int float lightning-spec none) +;; (define-extern lightning-uniform-gen function) ;; (function (inline-array vector) int int float lightning-spec none) +;; (define-extern lightning-trail-uniform-gen function) ;; (function (inline-array vector) (inline-array vector) float int symbol) +;; (define-extern lightning-trail-fractal-gen function) ;; (function (inline-array vector) (inline-array vector) int int float lightning-spec none) +;; (define-extern gs-packed-rgba-lerp! function) ;; (function gs-packed-rgba rgba rgba float gs-packed-rgba) +;; (define-extern lightning-fade function) ;; (function lightning-control int :behavior process) +;; (define-extern lightning-update function) ;; (function lightning-control symbol) +;; (define-extern lightning-draw function) ;; (function dma-buffer lightning-control lightning-globals symbol) +;; (define-extern lightning-start function) ;; (function float float (pointer process)) +;; (define-extern *lightning-globals* object) ;; lightning-globals +;; (define-extern *lightning* object) ;; symbol +;; (define-extern lightning-draw-all function) ;; (function none) +;; (define-extern unlink-lightning-spec-by-heap function) ;; (function kheap none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; light-trails-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype color-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data rgbaf :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype light-trail-composition (structure) + ((color-mode uint64 :offset-assert 0) + (color-curve curve-color-piecewise :offset-assert 8) ;; guessed by decompiler + (color-repeat-dist float :offset-assert 12) + (alpha-1-mode uint64 :offset-assert 16) + (alpha-2-mode uint64 :offset-assert 24) + (base-alpha float :offset-assert 32) + (alpha-curve-1 curve2d-piecewise :offset-assert 36) ;; guessed by decompiler + (alpha-curve-2 curve2d-piecewise :offset-assert 40) ;; guessed by decompiler + (alpha-repeat-dist float :offset-assert 44) + (width-mode uint64 :offset-assert 48) + (base-width float :offset-assert 56) + (width-curve curve2d-piecewise :offset-assert 60) ;; guessed by decompiler + (width-repeat-dist float :offset-assert 64) + (uv-mode uint64 :offset-assert 72) + (uv-repeat-dist float :offset-assert 80) + (max-age uint64 :offset-assert 88) ;; time-frame + (tex-id texture-id :offset-assert 96) ;; guessed by decompiler + (tex-name basic :offset-assert 100) + (lie-mode uint64 :offset-assert 104) ;; lie-mode + (lie-vector vector :inline :offset-assert 112) + (zbuffer? symbol :offset-assert 128) ;; guessed by decompiler + (use-tape-mode? symbol :offset-assert 132) ;; guessed by decompiler + (blend-mode uint64 :offset-assert 136) + (frame-stagger uint8 :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #x91 + :flag-assert #x900000091 + ) +|# + +#| +(deftype light-trail-breadcrumb (structure) + ((pos vector :inline :offset-assert 0) + (birth-time uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype breadcrumb-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data light-trail-breadcrumb :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype light-trail (prim-client) + ((crumb-array (array uint8) :offset-assert 4) ;; guessed by decompiler + (crumb-size uint8 :offset-assert 8) + (crumb-count int16 :offset-assert 10) + (max-crumb-count int16 :offset-assert 12) + (appearance light-trail-composition :offset-assert 16) + (start-marker uint64 :offset-assert 24) + (end-marker uint64 :offset-assert 32) + (decision uint64 :offset-assert 40) ;; light-trail-decision + (total-distance-traveled float :offset-assert 48) + (strip prim-strip :offset-assert 52) ;; guessed by decompiler + (strip2 prim-strip :offset-assert 56) ;; guessed by decompiler + (cache-vector vector 4 :offset-assert 64) ;; guessed by decompiler + ) + :method-count-assert 23 + :size-assert #x80 + :flag-assert #x1700000080 + (:methods + (light-trail-method-10 () none) ;; 10 ;; (reset! (_type_) none) + (light-trail-method-11 () none) ;; 11 ;; (add-crumb! (_type_ vector time-frame) int) + (light-trail-method-12 () none) ;; 12 ;; (build-prim-strip! (_type_) none) + (light-trail-method-13 () none) ;; 13 ;; (common-trans! (_type_) int) + (light-trail-method-14 () none) ;; 14 ;; (expire-old-points! (_type_) none) + (light-trail-method-15 () none) ;; 15 ;; (light-trail-method-15 (_type_) none) + (light-trail-method-16 () none) ;; 16 ;; (add-vert-to-prim-strip! (_type_ prim-strip vector rgba float float) none) + (light-trail-method-17 () none) ;; 17 ;; (add-tri-pair-to-prim! (_type_ vector rgba float vector float) symbol) + (light-trail-method-18 () none) ;; 18 ;; (calc-vertex-pos! (_type_ light-trail-breadcrumb int vector vector) none) + (light-trail-method-19 () none) ;; 19 ;; (crumb-age-out-callback (_type_ float int) none) + (light-trail-method-20 () none) ;; 20 ;; (reset-crumbs! (_type_) none) + (light-trail-method-21 () none) ;; 21 ;; (replace-last-crumb! (_type_ vector) none) + (light-trail-method-22 () none) ;; 22 + ) + ) +|# + +#| +(deftype weapon-trail-crumb (light-trail-breadcrumb) + ((offset vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype weapon-trail (light-trail) + () + :method-count-assert 25 + :size-assert #x80 + :flag-assert #x1900000080 + (:methods + (weapon-trail-method-23 () none) ;; 23 ;; (weapon-trail-method-23 (_type_ vector vector) none) + (weapon-trail-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype tread-trail-crumb (light-trail-breadcrumb) + ((normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype tread-trail (light-trail) + () + :method-count-assert 25 + :size-assert #x80 + :flag-assert #x1900000080 + (:methods + (tread-trail-method-23 () none) ;; 23 ;; (tread-trail-method-23 (_type_ vector vector) none) + (tread-trail-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype light-trail-tracker-spawn-params (structure) + ((appearance light-trail-composition :offset-assert 0) + (max-num-crumbs int32 :offset-assert 4) + (tracked-obj uint64 :offset-assert 8) ;; handle + (track-immediately? symbol :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype weapon-trail-tracker-spawn-params (light-trail-tracker-spawn-params) + ((joint0 int16 :offset-assert 20) + (joint1 int16 :offset-assert 22) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype light-trail-tracker (process) + ((trail light-trail :offset-assert 144) ;; guessed by decompiler + (tracked-object uint64 :offset-assert 152) ;; handle + (offscreen? symbol :offset-assert 160) ;; guessed by decompiler + (offscreen-start-time uint64 :offset-assert 168) ;; time-frame + (next-line-check-time uint64 :offset-assert 176) ;; time-frame + (last-add-frame-val uint32 :offset-assert 184) + ) + :method-count-assert 22 + :size-assert #xbc + :flag-assert #x16003000bc + (:methods + (light-trail-tracker-method-9 () none) ;; 9 + (light-trail-tracker-method-10 () none) ;; 10 + (light-trail-tracker-method-11 () none) ;; 11 + (light-trail-tracker-method-12 () none) ;; 12 + (light-trail-tracker-method-13 () none) ;; 13 + (light-trail-tracker-method-14 () none) ;; 14 ;; (tracking () _type_ :state) + (light-trail-tracker-method-15 () none) ;; 15 ;; (die () _type_ :state) + (light-trail-tracker-method-16 () none) ;; 16 ;; (get-tracked-object-pos (_type_ process-focusable vector) vector) + (light-trail-tracker-method-17 () none) ;; 17 ;; (should-track? (_type_ process-focusable) symbol) + (light-trail-tracker-method-18 () none) ;; 18 ;; (should-end? (_type_ process-focusable) symbol) + (light-trail-tracker-method-19 () none) ;; 19 ;; (should-draw? (_type_) symbol) + (light-trail-tracker-method-20 () none) ;; 20 ;; (add-crumb! (_type_ vector) none) + (light-trail-tracker-method-21 () none) ;; 21 + ) + ) +|# + +#| +(deftype weapon-trail-tracker (light-trail-tracker) + ((joint0 int16 :offset-assert 188) + (joint1 int16 :offset-assert 190) + (state-time uint64 :offset-assert 192) ;; time-frame + ) + :method-count-assert 23 + :size-assert #xc8 + :flag-assert #x17004000c8 + (:methods + (weapon-trail-tracker-method-22 () none) ;; 22 + ) + ) +|# + +#| +(deftype tread-trail-tracker (light-trail-tracker) + () + :method-count-assert 22 + :size-assert #xbc + :flag-assert #x16003000bc + ) +|# + +#| +(deftype light-trail-tracker-water (light-trail-tracker) + () + :method-count-assert 22 + :size-assert #xbc + :flag-assert #x16003000bc + ) +|# + +#| +(deftype light-trail-tracker-projectile (light-trail-tracker) + ((state-time uint64 :offset-assert 192) ;; time-frame + ) + :method-count-assert 23 + :size-assert #xc8 + :flag-assert #x17004000c8 + (:methods + (light-trail-tracker-projectile-method-22 () none) ;; 22 + ) + ) +|# + +;; (define-extern light-trail-tracker-init-by-other function) ;; (function light-trail-tracker-spawn-params object :behavior light-trail-tracker) +;; (define-extern weapon-trail-tracker-init-by-other function) ;; (function weapon-trail-tracker-spawn-params object :behavior weapon-trail-tracker) +;; (define-extern tread-trail-tracker-init-by-other function) ;; (function light-trail-tracker-spawn-params object :behavior tread-trail-tracker) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lightning-new-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype lightning-appearance (structure) + ((base-alpha float :offset-assert 0) + (width-range-start float :offset-assert 4) + (width-range-end float :offset-assert 8) + (tex-id uint32 :offset-assert 12) + (blend-mode uint64 :offset-assert 16) + (fade-time uint64 :offset-assert 24) ;; time-frame + (regenerate-time-start uint64 :offset-assert 32) ;; time-frame + (regenerate-time-end uint64 :offset-assert 40) ;; time-frame + (alpha-1-curve curve2d-fast :offset-assert 48) ;; guessed by decompiler + (alpha-1-mode uint64 :offset-assert 56) + (alpha-1-repeat-dist float :offset-assert 64) + (alpha-2-curve curve2d-fast :offset-assert 68) ;; guessed by decompiler + (alpha-2-mode uint64 :offset-assert 72) + (alpha-2-repeat-dist float :offset-assert 80) + (width-curve curve2d-fast :offset-assert 84) ;; guessed by decompiler + (width-mode uint64 :offset-assert 88) + (width-repeat-dist float :offset-assert 96) + (uv-repeat-dist float :offset-assert 100) + (uv-shift? symbol :offset-assert 104) ;; guessed by decompiler + (uv-shift-speed uint64 :offset-assert 112) ;; time-frame + (use-sprite-bucket? symbol :offset-assert 120) ;; guessed by decompiler + (use-accurate-interp? symbol :offset-assert 124) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype lightning-span-internal (structure) + ((index int16 :offset-assert 0) + (span-flags uint8 :offset-assert 2) + (num-inner-points int8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype lightning-span (structure) + ((random-offset-size-start float :offset-assert 0) + (inner-random-offset-size float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype lightning-spans-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data lightning-span :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype lightning-spans-internal-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data lightning-span-internal :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype tex-u-holder (structure) + ((uu float :offset-assert 0) + (last-dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype lightning-bolt (basic) + ((current-points vector-array :offset-assert 4) ;; guessed by decompiler + (desired-points vector-array :offset-assert 8) ;; guessed by decompiler + (span-pts-start vector-array :offset-assert 12) ;; guessed by decompiler + (spans lightning-spans-array :offset-assert 16) ;; guessed by decompiler + (spans-internal lightning-spans-internal-array :offset-assert 20) ;; guessed by decompiler + (strip1 prim-strip :offset-assert 24) ;; guessed by decompiler + (strip2 prim-strip :offset-assert 28) ;; guessed by decompiler + (inner-point-travel-time uint64 :offset-assert 32) ;; time-frame + (start-fade-time uint64 :offset-assert 40) ;; time-frame + (new-inner-point-generate-time uint64 :offset-assert 48) ;; time-frame + (last-generate-time uint64 :offset-assert 56) ;; time-frame + (base-width float :offset-assert 64) + (current-uv-shift float :offset-assert 68) + (current-fade-scalar float :offset-assert 72) + (fractal-reduction float :offset-assert 76) + (appearance lightning-appearance :offset-assert 80) + (fade-mode uint64 :offset-assert 88) + (generate-mode uint64 :offset-assert 96) + (snap-inner-points? symbol :offset-assert 104) ;; guessed by decompiler + (span-data int8 2 :offset-assert 108) ;; guessed by decompiler + (num-active-spans int8 :offset-assert 108) + (num-spans int8 :offset-assert 109) + (base-color rgba :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 23 + :size-assert #x74 + :flag-assert #x1700000074 + (:methods + (lightning-bolt-method-9 () none) ;; 9 ;; (init! (_type_ int int lightning-appearance) none) + (lightning-bolt-method-10 () none) ;; 10 ;; (reset-spans! (_type_) none) + (lightning-bolt-method-11 () none) ;; 11 ;; (lightning-bolt-method-11 (_type_) none) + (lightning-bolt-method-12 () none) ;; 12 ;; (lightning-bolt-method-12 (_type_) none) + (lightning-bolt-method-13 () none) ;; 13 ;; (lightning-bolt-method-13 (_type_ int) none) + (lightning-bolt-method-14 () none) ;; 14 ;; (lightning-bolt-method-14 (_type_) int) + (lightning-bolt-method-15 () none) ;; 15 ;; (lightning-bolt-method-15 (_type_ object int lightning-span-internal) none) + (lightning-bolt-method-16 () none) ;; 16 ;; (lightning-bolt-method-16 (_type_ vector float float vector matrix) none) + (lightning-bolt-method-17 () none) ;; 17 ;; (lightning-bolt-method-17 (_type_ uint float float curve2d-fast float) float) + (lightning-bolt-method-18 () none) ;; 18 ;; (lightning-bolt-method-18 (_type_ prim-strip vector rgba float float) none) + (lightning-bolt-method-19 () none) ;; 19 ;; (lightning-bolt-method-19 (_type_ vector int int matrix float float) none) + (lightning-bolt-method-20 () none) ;; 20 ;; (lightning-bolt-method-20 (_type_ int lightning-span-internal) vector) + (lightning-bolt-method-21 () none) ;; 21 ;; (lightning-bolt-method-21 (_type_ int int float) none) + (lightning-bolt-method-22 () none) ;; 22 ;; (lightning-bolt-method-22 (_type_) none) + ) + ) +|# + +#| +(deftype lightning-new-tracker (process) + ((bolt lightning-bolt :offset-assert 144) ;; guessed by decompiler + (lifetime uint64 :offset-assert 152) ;; time-frame + (state-time uint64 :offset-assert 160) ;; time-frame + ) + :method-count-assert 17 + :size-assert #xa8 + :flag-assert #x11002000a8 + (:methods + (lightning-new-tracker-method-9 () none) ;; 9 + (lightning-new-tracker-method-10 () none) ;; 10 + (lightning-new-tracker-method-11 () none) ;; 11 + (lightning-new-tracker-method-12 () none) ;; 12 + (lightning-new-tracker-method-13 () none) ;; 13 + (lightning-new-tracker-method-14 () none) ;; 14 ;; (active () _type_ :state) + (lightning-new-tracker-method-15 () none) ;; 15 ;; (die () _type_ :state) + (lightning-new-tracker-method-16 () none) ;; 16 + ) + ) +|# + +#| +(deftype lightning-tracker-init-params (structure) + ((appearance lightning-appearance :offset-assert 0) + (start-pt vector :inline :offset-assert 16) + (end-pt vector :inline :offset-assert 32) + (lifetime uint64 :offset-assert 48) ;; time-frame + (num-inner-points int8 :offset-assert 56) + (inner-random-offset-size float :offset-assert 60) + (random-offset-size-start float :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; particle-curves ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype particle-curve-settings (structure) + ((color-start basic :offset-assert 0) + (alpha-start basic :offset-assert 4) + (scale-x-start basic :offset-assert 8) + (scale-y-start basic :offset-assert 12) + (r-scalar basic :offset-assert 16) + (g-scalar basic :offset-assert 20) + (b-scalar basic :offset-assert 24) + (a-scalar basic :offset-assert 28) + (scale-x-scalar basic :offset-assert 32) + (scale-y-scalar basic :offset-assert 36) + (lifetime-base uint64 :offset-assert 40) ;; time-frame + (lifetime-offset uint64 :offset-assert 48) ;; time-frame + (flags uint64 :offset-assert 56) ;; particle-curve-flags + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +;; (define-extern birth-func-curve function) ;; (function int sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern live-func-curve function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern *alpha-fast* curve2d-fast) ;; curve2d-fast +;; (define-extern *unity-fast* curve2d-fast) ;; curve2d-fast +;; (define-extern *ccro* curve-color-fast) ;; curve-color-fast +;; (define-extern *scale-curve* curve2d-fast) ;; curve2d-fast +;; (define-extern *scale-range* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-function-curve-test-curve-settings* object) ;; particle-curve-settings +;; (define-extern ptest function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; light-trails ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern compute-trail-scaled-t function) ;; (function uint float float float float float vector float) +;; (define-extern *dist-cache-array* object) ;; (pointer float) +;; (define-extern *total-length* object) ;; float +;; (define-extern light-trail-tracker-common-post function) ;; (function object :behavior light-trail-tracker) +;; (define-extern estimate-light-trail-mem-usage function) ;; (function uint uint int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lightning-new ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *lightning-alpha-additive* object) ;; gs-alpha +;; (define-extern *lightning-alpha-blend* object) ;; gs-alpha +;; (define-extern *lightning-alpha-subtractive* object) ;; gs-alpha +;; (define-extern matrix<-vector-yz2! function) ;; (function matrix vector vector matrix) +;; (define-extern choose-nice-perp function) ;; (function vector vector) +;; (define-extern lightning-new-tracker-init-by-other function) ;; (function lightning-tracker-init-params object :behavior lightning-new-tracker) +;; (define-extern create-lightning-tracker-new function) ;; (function lightning-tracker-init-params lightning-new-tracker) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; target-util ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype target-bank (basic) + ((attack-timeout uint64 :offset-assert 8) ;; time-frame + (ground-timeout uint64 :offset-assert 16) ;; time-frame + (slide-down-timeout uint64 :offset-assert 24) ;; time-frame + (fall-timeout uint64 :offset-assert 32) ;; time-frame + (fall-stumble-threshold meters :offset-assert 40) + (hit-invulnerable-timeout uint64 :offset-assert 48) ;; time-frame + (same-attack-invulnerable-timeout uint64 :offset-assert 56) ;; time-frame + (min-dive-depth meters :offset-assert 64) + (root-radius meters :offset-assert 68) + (root-offset vector :inline :offset-assert 80) + (body-radius meters :offset-assert 96) + (head-radius meters :offset-assert 100) + (head-height meters :offset-assert 104) + (head-offset vector :inline :offset-assert 112) + (fall-height meters :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) +|# + +;; (define-extern *TARGET-bank* target-bank) ;; target-bank +;; (define-extern debounce-speed function) ;; (function float float vector vector float :behavior target) +;; (define-extern target-pos function) ;; (function int vector) +;; (define-extern target-rot function) ;; (function quaternion) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; logic-target ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern draw-history function) ;; (function control-info none) +;; (define-extern target-history-print function) ;; (function history-iterator symbol) +;; (define-extern target-print-stats function) ;; (function target symbol symbol) +;; (define-extern target-move-dist function) ;; (function time-frame float :behavior target) +;; (define-extern level-setup function) ;; (function none :behavior target) +;; (define-extern target-real-post function) ;; (function none :behavior target) +;; (define-extern target-post function) ;; (function none :behavior target) +;; (define-extern target-no-move-post function) ;; (function none :behavior target) +;; (define-extern reset-target-state function) ;; (function symbol target :behavior target) +;; (define-extern target-init function) ;; (function continue-point none :behavior target) +;; (define-extern start-2 function) +;; (define-extern start-1 function) +;; (define-extern stop function) ;; (function symbol int) +;; (define-extern start function) ;; (function symbol continue-point target) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; debug-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern sparticle-track-root-money function) ;; (function sparticle-system sparticle-cpuinfo vector none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; attackable-hash ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; attackable-hash is already defined! + +;; (define-extern *attackable-hash* attackable-hash) +;; (define-extern attackable-hash-copy! function) +;; (define-extern attackable-hash-exchange! function) +;; (define-extern attackable-hash-update function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; projectile ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern cshape-reaction-projectile function) ;; (function control-info collide-query vector vector collide-status) +;; (define-extern projectile-event-handler function) ;; (function process int symbol event-message-block projectile :behavior projectile) +;; (define-extern projectile-move-fill-all-dirs function) ;; (function projectile none) +;; (define-extern projectile-move-fill-line-sphere function) ;; (function projectile none) +;; (define-extern projectile-update-velocity-add-gravity function) ;; (function projectile none) +;; (define-extern projectile-update-velocity-space-wars function) ;; (function projectile none) +;; (define-extern projectile-base-code function) +;; (define-extern projectile-init-by-other function) ;; (function projectile-init-by-other-params object :behavior projectile) +;; (define-extern projectile-bounce-update-velocity function) ;; (function projectile-bounce none :behavior projectile) +;; (define-extern projectile-bounce-falling-post function) ;; (function none :behavior projectile-bounce) +;; (define-extern projectile-bounce-move function) ;; (function projectile-bounce none) +;; (define-extern projectile-bounce-reaction function) ;; (function control-info collide-query vector vector collide-status) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++rigid-body-h:rigid-body-flag +(defenum rigid-body-flag + :bitfield #t + :type uint32 + (display-marks 0) + (enable-physics 1) + (enable-collision 2) + (active 3) + (debug 4) + (blocker 5) + ) +;; ---rigid-body-h:rigid-body-flag + +;; +++rigid-body-h:rigid-body-object-flag +(defenum rigid-body-object-flag + :bitfield #t + :type uint64 + (enable-collision 0) + (disturbed 1) + (damaged 2) + (dead 3) + ) +;; ---rigid-body-h:rigid-body-object-flag + +(deftype rigid-body-info (structure) + ((max-time-step float :offset-assert 0) + (mass float :offset-assert 4) + (inv-mass float :offset-assert 8) + (linear-damping float :offset-assert 12) + (angular-damping float :offset-assert 16) + (bounce-factor float :offset-assert 20) + (friction-factor float :offset-assert 24) + (bounce-mult-factor float :offset-assert 28) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) ;; guessed by decompiler + (gravity float :offset-assert 188) + (max-ang-momentum float :offset-assert 192) + ) + :method-count-assert 10 + :size-assert #xc4 + :flag-assert #xa000000c4 + (:methods + (rigid-body-info-method-9 () none) ;; 9 ;; (rigid-body-info-method-9 (_type_) none) + ) + ) + +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (max-time-step float :offset 0) + (mass float :offset 4) + (inv-mass float :offset 8) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 12) + (angular-damping float :offset 16) + (bounce-factor float :offset 20) + (friction-factor float :offset 24) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (gravity meters :offset 188) + (name symbol :offset-assert 196) ;; guessed by decompiler + ) + :method-count-assert 10 + :size-assert #xc8 + :flag-assert #xa000000c8 + (:methods + (rigid-body-object-constants-method-9 () none) ;; 9 + ) + ) + +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat pat-surface :offset-assert 52) ;; guessed by decompiler + (process process :offset-assert 56) ;; guessed by decompiler + (prim-id uint32 :offset-assert 60) + (surface basic :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) + +(declare-type rigid-body-object basic) +(deftype rigid-body-control (basic) + ((flags rigid-body-flag :offset-assert 4) + (debug-id int8 :offset 6) + (debugger-step int8 :offset 7) + (info rigid-body-info :offset-assert 8) + (force-callback (function rigid-body-object float none) :offset-assert 12) ;; guessed by decompiler + (post-move-callback basic :offset-assert 16) + (process process :offset-assert 20) ;; guessed by decompiler + (time-remaining float :offset-assert 24) + (max-ang-momentum float :offset-assert 28) + (linear-damping float :offset-assert 32) + (angular-damping float :offset-assert 36) + (bounce-factor float :offset-assert 40) + (friction-factor float :offset-assert 44) + (position vector :inline :offset-assert 48) + (rot vector :inline :offset-assert 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset-assert 80) + (ang-momentum vector :inline :offset-assert 96) + (force vector :inline :offset-assert 112) + (torque vector :inline :offset-assert 128) + (lin-velocity vector :inline :offset-assert 144) + (ang-velocity vector :inline :offset-assert 160) + (matrix matrix :inline :offset-assert 176) + (inv-i-world matrix :inline :offset-assert 240) + ) + :method-count-assert 41 + :size-assert #x130 + :flag-assert #x2900000130 + ;; field rigid-body-flag is likely a value type. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process) _type_) + (rigid-body-control-method-9 () none) ;; 9 ;; (rigid-body-control-method-9 (_type_ collide-shape-moving float) none) + (rigid-body-control-method-10 () none) ;; 10 ;; (rigid-body-control-method-10 (_type_ rigid-body-object float float) object) + (rigid-body-control-method-11 () none) ;; 11 ;; (update-rbody-transform! (_type_ collide-shape-moving) none) + (rigid-body-control-method-12 () none) ;; 12 ;; (rigid-body-control-method-12 (_type_ float) none) + (rigid-body-control-method-13 () none) ;; 13 ;; (init-velocities! (_type_) none) + (rigid-body-control-method-14 () none) ;; 14 ;; (rigid-body-control-method-14 (_type_ float) none) + (rigid-body-control-method-15 () none) ;; 15 ;; (rigid-body-control-method-15 (_type_) none) + (rigid-body-control-method-16 () none) ;; 16 ;; (reset-force-and-torque! (_type_) none) + (rigid-body-control-method-17 () none) ;; 17 ;; (reset-momentum! (_type_) none) + (rigid-body-control-method-18 () none) ;; 18 ;; (apply-impact! (_type_ vector vector) none) + (rigid-body-control-method-19 () none) ;; 19 ;; (rigid-body-control-method-19 (_type_ vector vector) none) + (rigid-body-control-method-20 () none) ;; 20 ;; (add-force! (_type_ vector) none) + (rigid-body-control-method-21 () none) ;; 21 ;; (rigid-body-control-method-21 (_type_ vector vector float) none) + (rigid-body-control-method-22 () none) ;; 22 ;; (rigid-body-control-method-22 (_type_ vector vector) none) + (rigid-body-control-method-23 () none) ;; 23 ;; (rigid-body-control-method-23 (_type_ vector vector) none) + (rigid-body-control-method-24 () none) ;; 24 ;; (rigid-body-control-method-24 (_type_ vector vector) none) + (rigid-body-control-method-25 () none) ;; 25 ;; (rigid-body-control-method-25 (_type_ vector) vector) + (rigid-body-control-method-26 () none) ;; 26 ;; (rigid-body-control-method-26 (_type_) none) + (rigid-body-control-method-27 () none) ;; 27 ;; (init! (_type_ rigid-body-info vector quaternion (function rigid-body-object float)) none) + (rigid-body-control-method-28 () none) ;; 28 ;; (rigid-body-control-method-28 (_type_ vector quaternion) none) + (rigid-body-control-method-29 () none) ;; 29 ;; (debug-print-info (_type_ object) none) + (rigid-body-control-method-30 () none) ;; 30 ;; (debug-print-force-torque (_type_ object) none) + (rigid-body-control-method-31 () none) ;; 31 ;; (debug-print-pos-rot (_type_ object) none) + (rigid-body-control-method-32 () none) ;; 32 ;; (debug-print-momentum (_type_ object) none) + (rigid-body-control-method-33 () none) ;; 33 ;; (debug-print-velocity (_type_ object) none) + (rigid-body-control-method-34 () none) ;; 34 + (rigid-body-control-method-35 () none) ;; 35 + (rigid-body-control-method-36 () none) ;; 36 + (rigid-body-control-method-37 () none) ;; 37 + (rigid-body-control-method-38 () none) ;; 38 + (rigid-body-control-method-39 () none) ;; 39 + (rigid-body-control-method-40 () none) ;; 40 + ) + ) + +(deftype rb-perf-data (structure) + ((process handle :offset-assert 0) + (times uint32 32 :offset-assert 8) + (t-rb-all uint32 :offset 8) + (t-rb-callback uint32 :offset 12) + (t-rb-fc uint32 :offset 16) + (t-rb-move uint32 :offset 20) + (t-rb-physics uint32 :offset 24) + (t-vqp-all uint32 :offset 32) + (t-vqp-common uint32 :offset 36) + (t-vqp-ja-post uint32 :offset 40) + (t-vqp-parts uint32 :offset 44) + (t-vqp-post uint32 :offset 48) + (t-vqp-sections uint32 :offset 52) + (t-vqp-sound uint32 :offset 56) + (t-nav-part1 uint32 :offset 60) + (t-nav-part2 uint32 :offset 64) + (t-nav-part3 uint32 :offset 68) + (t-nav-part4 uint32 :offset 72) + (t-nav-part5 uint32 :offset 76) + (t-nav-part6 uint32 :offset 80) + (t-nav-part7 uint32 :offset 84) + (t-nav-part8 uint32 :offset 88) + (t-nav-part9 uint32 :offset 92) + (t-nav-part10 uint32 :offset 96) + (t-part-turbo uint32 :offset 116) + (t-part-exhaust uint32 :offset 100) + (t-part-smoke uint32 :offset 104) + (t-part-scrape uint32 :offset 108) + (t-part-wheels uint32 :offset 112) + (t-part-debris uint32 :offset 120) + (t-part-water uint32 :offset 124) + (t-part-forcefield uint32 :offset 128) + (t-prim-trails uint32 :offset 132) + (begin-times uint32 32 :offset-assert 136) + (begin-counts uint32 32 :offset-assert 264) + (end-counts uint32 32 :offset-assert 392) + ) + :pack-me + :method-count-assert 12 + :size-assert #x208 + :flag-assert #xc00000208 + (:methods + (rb-perf-data-method-9 () none) ;; 9 + (rb-perf-data-method-10 () none) ;; 10 + (rb-perf-data-method-11 () none) ;; 11 + ) + ) + +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 256) + (flags rigid-body-object-flag :offset-assert 264) + (max-time-step float :offset-assert 272) + (incoming-attack-id uint32 :offset-assert 276) + (disturbed-time uint32 :offset-assert 280) + (perf rb-perf-data :offset-assert 284) + ) + :method-count-assert 89 + :size-assert #x120 + :flag-assert #x5900900120 + ;; field rigid-body-object-flag is likely a value type. + (:methods + (rigid-body-object-method-59 () none) ;; 59 + (rigid-body-object-method-60 () none) ;; 60 + (rigid-body-object-method-61 () none) ;; 61 + (rigid-body-object-method-62 () none) ;; 62 + (rigid-body-object-method-63 () none) ;; 63 + (rigid-body-object-method-64 () none) ;; 64 + (rigid-body-object-method-65 () none) ;; 65 + (rigid-body-object-method-66 () none) ;; 66 + (rigid-body-object-method-67 () none) ;; 67 + (rigid-body-object-method-68 () none) ;; 68 + (rigid-body-object-method-69 () none) ;; 69 + (rigid-body-object-method-70 () none) ;; 70 + (rigid-body-object-method-71 () none) ;; 71 + (rigid-body-object-method-72 () none) ;; 72 + (rigid-body-object-method-73 () none) ;; 73 + (rigid-body-object-method-74 () none) ;; 74 + (rigid-body-object-method-75 () none) ;; 75 + (rigid-body-object-method-76 () none) ;; 76 + (rigid-body-object-method-77 () none) ;; 77 + (rigid-body-object-method-78 () none) ;; 78 + (rigid-body-object-method-79 () none) ;; 79 + (rigid-body-object-method-80 () none) ;; 80 + (rigid-body-object-method-81 () none) ;; 81 + (rigid-body-object-method-82 () none) ;; 82 + (rigid-body-object-method-83 () none) ;; 83 + (rigid-body-object-method-84 () none) ;; 84 + (rigid-body-object-method-85 () none) ;; 85 + (rigid-body-object-method-86 () none) ;; 86 + (rigid-body-object-method-87 () none) ;; 87 + (rigid-body-object-method-88 () none) ;; 88 + ) + ) + +#| +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (manager uint64 :offset-assert 8) ;; handle + (array handle 128 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 17 + :size-assert #x410 + :flag-assert #x1100000410 + (:methods + (rigid-body-queue-method-9 () none) ;; 9 ;; (init-queue! (_type_ process) none) + (rigid-body-queue-method-10 () none) ;; 10 ;; (rigid-body-queue-method-10 (_type_) none) + (rigid-body-queue-method-11 () none) ;; 11 ;; (rigid-body-queue-method-11 (_type_ process) none) + (rigid-body-queue-method-12 () none) ;; 12 ;; (rigid-body-queue-method-12 (_type_ int int) none) + (rigid-body-queue-method-13 () none) ;; 13 ;; (rigid-body-queue-method-13 (_type_ int process) none) + (rigid-body-queue-method-14 () none) ;; 14 ;; (rigid-body-queue-method-14 (_type_ int) none) + (rigid-body-queue-method-15 () none) ;; 15 ;; (rigid-body-queue-method-15 (_type_ process) none) + (rigid-body-queue-method-16 () none) ;; 16 ;; (rigid-body-queue-method-16 (_type_) none) + ) + ) +|# + +#| +(deftype rb-debug-state-record (structure) + ((flags uint16 :offset-assert 0) + (time-remaining float :offset-assert 4) + (current-time uint32 :offset-assert 8) + (debug-id int8 :offset-assert 12) + (linear-damping float :offset-assert 16) + (angular-damping float :offset-assert 20) + (bounce-factor float :offset-assert 24) + (friction-factor float :offset-assert 28) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset-assert 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 224) + ) + :method-count-assert 11 + :size-assert #x160 + :flag-assert #xb00000160 + (:methods + (rb-debug-state-record-method-9 () none) ;; 9 + (rb-debug-state-record-method-10 () none) ;; 10 + ) + ) +|# + +#| +(deftype rb-debugger (structure) + ((user-mode uint8 :offset-assert 0) + (hook-control uint8 :offset-assert 1) + (flags uint8 :offset-assert 2) + (target-count int8 :offset-assert 3) + (target-array UNKNOWN 8 :offset-assert 8) + (pad0 UNKNOWN 256 :offset-assert 72) + (playback-index int32 :offset-assert 328) + (recorder-index int32 :offset-assert 332) + (begin-index int32 :offset-assert 336) + (end-index int32 :offset-assert 340) + (record-count int32 :offset-assert 344) + (buffer-len int32 :offset-assert 348) + (buffer-size int32 :offset-assert 352) + (total-size int32 :offset-assert 356) + (buffer-start UNKNOWN :dynamic :offset-assert 368) + ) + :method-count-assert 21 + :size-assert #x170 + :flag-assert #x1500000170 + (:methods + (rb-debugger-method-9 () none) ;; 9 + (rb-debugger-method-10 () none) ;; 10 + (rb-debugger-method-11 () none) ;; 11 + (rb-debugger-method-12 () none) ;; 12 + (rb-debugger-method-13 () none) ;; 13 + (rb-debugger-method-14 () none) ;; 14 + (rb-debugger-method-15 () none) ;; 15 + (rb-debugger-method-16 () none) ;; 16 + (rb-debugger-method-17 () none) ;; 17 + (rb-debugger-method-18 () none) ;; 18 + (rb-debugger-method-19 () none) ;; 19 + (rb-debugger-method-20 () none) ;; 20 + ) + ) +|# + +#| +(deftype rigid-body-object-extra-info (UNKNOWN) + () + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +;; (define-extern get-penetrate-using-from-attack-event function) ;; (function process-drawable event-message-block penetrate) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; target-handler ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern attack-mode-is-invinc function) ;; (function symbol symbol symbol) +;; (define-extern target-generic-event-handler function) ;; (function process int symbol event-message-block object :behavior target) +;; (define-extern target-standard-event-handler function) ;; (function process int symbol event-message-block object :behavior target) +;; (define-extern target-jump-event-handler function) ;; (function process int symbol event-message-block object :behavior target) +;; (define-extern target-exit function) ;; (function none :behavior target) +;; (define-extern target-state-hook-exit function) ;; (function none :behavior target) +;; (define-extern target-effect-exit function) ;; (function none :behavior target) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; target ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern target-nearest-dist function) +;; (define-extern target-get-any-pos function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; target-death ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *auto-continue* object) ;; symbol +;; (define-extern next-continue function) ;; (function continue-point continue-point) +;; (define-extern arrive-at-continue function) ;; (function continue-point none :behavior target) +;; (define-extern target-continue-init-art function) ;; (function none :behavior target) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gun-util ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype beam-info (structure) + ((y-scale float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (define-extern *beam-info* object) ;; beam-info +;; (define-extern birth-func-setup-beam function) ;; (function int sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern draw-beam function) ;; (function sparticle-launcher vector vector symbol none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menu ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(declare-type debug-menu-node basic) +(declare-type debug-menu debug-menu-node) +(declare-type debug-menu-item debug-menu-node) + + +(deftype debug-menu-context (basic) + ((is-active symbol :offset-assert 4) ;; guessed by decompiler + (sel-length int32 :offset-assert 8) + (sel-menu debug-menu 8 :offset-assert 12) ;; guessed by decompiler + (root-menu debug-menu :offset-assert 44) ;; guessed by decompiler + (joypad-func (function basic int none) :offset-assert 48) ;; guessed by decompiler + (joypad-item debug-menu-item :offset-assert 52) ;; guessed by decompiler + (font font-context :offset-assert 56) ;; guessed by decompiler + (is-hidden symbol :offset-assert 60) ;; guessed by decompiler + (joypad-number int32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) + +(deftype debug-menu-node (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (parent debug-menu :offset-assert 8) ;; guessed by decompiler + (refresh-delay int32 :offset-assert 12) + (refresh-ctr int32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +(deftype debug-menu (debug-menu-node) + ((context debug-menu-context :offset-assert 20) ;; guessed by decompiler + (selected-item debug-menu-item :offset-assert 24) ;; guessed by decompiler + (pix-width int32 :offset-assert 28) + (pix-height int32 :offset-assert 32) + (items pair :offset-assert 36) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + (:methods + (new (symbol type debug-menu-context string) _type_) ;; 0 + ) + ) + +(deftype debug-menu-item (debug-menu-node) + ((id int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype debug-menu-item-submenu (debug-menu-item) + ((submenu debug-menu :offset-assert 24) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + (:methods + (new (symbol type string debug-menu) _type_) ;; 0 + ) + ) + +(deftype debug-menu-item-function (debug-menu-item) + ((activate-func (function object object) :offset-assert 24) ;; guessed by decompiler + (hilite-timer int8 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x1d + :flag-assert #x90000001d + (:methods + (new (symbol type string object (function object object)) _type_) ;; 0 + ) + ) + +;; +++menu:debug-menu-msg +(defenum debug-menu-msg + :type int32 + (activate 1) + (deactivate 2) + (update 3) + (press 4) + ) +;; ---menu:debug-menu-msg + +(deftype debug-menu-item-flag (debug-menu-item) + ((activate-func (function object debug-menu-msg object) :offset-assert 24) ;; guessed by decompiler + (is-on symbol :offset-assert 28) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + (:methods + (new (symbol type string object (function object debug-menu-msg object)) _type_) ;; 0 + ) + ) + +(deftype debug-menu-item-var (debug-menu-item) + ((display-str string :offset-assert 24) ;; guessed by decompiler + (grabbed-joypad-p symbol :offset-assert 28) ;; guessed by decompiler + (float-p symbol :offset-assert 32) ;; guessed by decompiler + (range-p symbol :offset-assert 36) ;; guessed by decompiler + (show-len int32 :offset-assert 40) + (inc-delay int32 :offset-assert 44) + (inc-delay-ctr int32 :offset-assert 48) + (step-delay-ctr int32 :offset-assert 52) + (inc-dir int32 :offset-assert 56) + (fval float :offset-assert 60) + (fundo-val float :offset-assert 64) + (frange-min float :offset-assert 68) + (frange-max float :offset-assert 72) + (fstart-inc float :offset-assert 76) + (fstep float :offset-assert 80) + (fprecision int32 :offset-assert 84) + (factivate-func (function int debug-menu-msg float float float) :offset-assert 88) ;; guessed by decompiler + (ival int32 :offset 60) + (iundo-val int32 :offset 64) + (irange-min int32 :offset 68) + (irange-max int32 :offset 72) + (istart-inc int32 :offset 76) + (istep int32 :offset 80) + (ihex-p symbol :offset-assert 92) ;; guessed by decompiler + (iactivate-func (function int debug-menu-msg int int int) :offset 88) ;; guessed by decompiler + (ifloat-p symbol :offset-assert 96) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + (:methods + (new (symbol type string int int) _type_) ;; 0 + ) + ) + +;; +++menu:debug-menu-dest +(defenum debug-menu-dest + :type int32 + (activation 0) + (root 1) + (open-menus 2) + (current-selection 3) + ) +;; ---menu:debug-menu-dest + +(define-extern debug-menu-item-var-update-display-str (function debug-menu-item-var debug-menu-item-var)) +(define-extern debug-menu-item-var-make-int (function debug-menu-item-var (function int debug-menu-msg int int int) int symbol int int symbol debug-menu-item-var)) +(define-extern debug-menu-item-var-make-float (function debug-menu-item-var (function int debug-menu-msg float float float) float symbol float float int debug-menu-item-var)) +(define-extern debug-menu-context-grab-joypad (function debug-menu-context basic (function basic int none) symbol)) +(define-extern debug-menu-context-release-joypad (function debug-menu-context symbol)) +(define-extern debug-menu-item-get-max-width (function debug-menu-item debug-menu int)) +(define-extern debug-menu-context-default-selection (function debug-menu-context symbol debug-menu-context)) +(define-extern debug-menu-rebuild (function debug-menu debug-menu)) +(define-extern debug-menu-context-set-root-menu (function debug-menu-context debug-menu debug-menu-context)) +(define-extern debug-menu-append-item (function debug-menu debug-menu-node debug-menu-node)) +(define-extern debug-menu-remove-all-items (function debug-menu debug-menu)) +(define-extern debug-menu-func-decode (function object function)) +(define-extern debug-menu-make-from-template (function debug-menu-context pair debug-menu-node)) +(define-extern debug-menu-find-from-template (function debug-menu-context pair debug-menu)) +(define-extern debug-menu-item-submenu-render (function debug-menu-item-submenu int int int symbol debug-menu-item-submenu)) +(define-extern debug-menu-item-function-render (function debug-menu-item-function int int int symbol debug-menu-item-function)) +(define-extern debug-menu-item-flag-render (function debug-menu-item-flag int int int symbol debug-menu-item-flag)) +(define-extern debug-menu-item-var-render (function debug-menu-item-var int int int symbol debug-menu-item-var)) +(define-extern debug-menu-item-render (function debug-menu-item int int int symbol debug-menu-item)) +(define-extern debug-menu-render (function debug-menu int int debug-menu-node int debug-menu)) +(define-extern debug-menu-context-render (function debug-menu-context debug-menu-context)) +(define-extern debug-menu-context-select-next-or-prev-item (function debug-menu-context int debug-menu-context)) +(define-extern debug-menu-context-select-new-item (function debug-menu-context int debug-menu-context)) +(define-extern debug-menu-context-open-submenu (function debug-menu-context debug-menu basic)) +(define-extern debug-menu-context-close-submenu (function debug-menu-context debug-menu-context)) +(define-extern debug-menu-item-submenu-msg (function debug-menu-item-submenu debug-menu-msg debug-menu-item-submenu)) +(define-extern debug-menu-item-function-msg (function debug-menu-item-function debug-menu-msg debug-menu-item-function)) +(define-extern debug-menu-item-flag-msg (function debug-menu-item-flag debug-menu-msg debug-menu-item-flag)) +(define-extern debug-menu-item-var-joypad-handler (function debug-menu-item-var int debug-menu-item-var)) +(define-extern debug-menu-item-var-msg (function debug-menu-item-var debug-menu-msg debug-menu-item-var)) +(define-extern debug-menu-item-send-msg (function debug-menu-item debug-menu-msg debug-menu-item)) +(define-extern debug-menu-send-msg (function debug-menu debug-menu-msg symbol debug-menu)) +(define-extern debug-menu-context-send-msg (function debug-menu-context debug-menu-msg debug-menu-dest debug-menu-context)) +(define-extern debug-menu-context-activate-selection (function debug-menu-context debug-menu-context)) +(define-extern debug-menus-default-joypad-func (function debug-menu-context debug-menu-context)) +(define-extern debug-menus-active (function debug-menu-context debug-menu-context)) +(define-extern debug-menus-handler (function debug-menu-context debug-menu-context)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern sphere-cull function) ;; (function vector symbol) +;; (define-extern guard-band-cull function) ;; (function vector symbol) +;; (define-extern sphere-in-view-frustum? function) ;; (function sphere symbol) +;; (define-extern line-in-view-frustum? function) ;; (function vector vector symbol) +;; (define-extern sphere-in-view-frustum-any? function) +;; (define-extern line-in-view-frustum-any? function) +;; (define-extern find-nearest-camera-distance function) +;; (define-extern vis-cull function) ;; (function int symbol) +;; (define-extern vis-cull-debug function) ;; (function work-area int symbol) +;; (define-extern error-sphere function) ;; (function drawable-error string none) +;; (define-extern *edit-instance* object) ;; string +;; (define-extern *instance-mem-usage* object) ;; memory-usage-block +;; (define-extern find-instance-by-name-level function) ;; (function string level prototype-bucket) +;; (define-extern find-instance-by-name function) ;; (function string prototype-bucket) +;; (define-extern prototypes-game-visible-set! function) ;; (function pair symbol level int) +;; (define-extern find-instance-by-index function) ;; (function type int bsp-header prototype-bucket) +;; (define-extern prototype-bucket-type function) ;; (function prototype-bucket type) +;; (define-extern prototype-bucket-recalc-fields function) ;; (function prototype-bucket prototype-bucket) +;; (define-extern print-prototype-intersection-list function) +;; (define-extern print-prototype-list function) ;; (function none) +;; (define-extern draw-instance-info function) ;; (function string none) +;; (define-extern set-shadow-by-name function) ;; (function string int int none) +;; (define-extern get-shadow-by-name function) ;; (function string none) +;; (define-extern teleport-camera-by-name function) ;; (function string none) +;; (define-extern teleport-camera-by-pos function) ;; (function float float float none) +;; (define-extern calc-vu1-shadow function) ;; (function light-group draw-control none) +;; (define-extern calc-shadow-masks function) ;; (function light-group draw-control uint none) +;; (define-extern calc-realtime-lights function) ;; (function light-group draw-control uint none) +;; (define-extern calc-vu1-lights function) ;; (function vu-lights draw-control symbol none) +;; (define-extern calc-particle-average-color function) +;; (define-extern calc-particle-directional-color function) +;; (define-extern real-dma-add-process-drawable function) +;; (define-extern dma-add-process-drawable function) ;; (function process-drawable draw-control symbol dma-buffer none) +;; (define-extern *hud-lights* object) ;; vu-lights +;; (define-extern dma-add-process-drawable-hud function) ;; (function process-drawable draw-control float dma-buffer none) +;; (define-extern add-process-drawable function) ;; (function process-drawable draw-control symbol dma-buffer none) +;; (define-extern foreground-engine-execute function) ;; (function engine none) +;; (define-extern main-debug-hook function) ;; (function none) +;; (define-extern *debug-hook* object) ;; pair +;; (define-extern *add-sphere* object) ;; symbol +;; (define-extern *generic-effect-mode* object) ;; int +;; (define-extern foreground-initialize-engines function) ;; (function none) +;; (define-extern foreground-execute-cpu-vu0-engines function) ;; (function none) +;; (define-extern real-main-draw-hook function) ;; (function none) +;; (define-extern main-draw-hook function) ;; (function none) +;; (define-extern *draw-hook* object) ;; (function none) +;; (define-extern init-init-buffer function) +;; (define-extern init-end-buffer function) +;; (define-extern screen-shot-scale function) ;; (function int string none) +;; (define-extern screen-shot-debug function) +;; (define-extern screen-shot function) ;; (function none) +;; (define-extern display-frame-start function) ;; (function display int float none) +;; (define-extern display-frame-finish function) ;; (function display display) +;; (define-extern determine-pause-mode function) ;; (function none) +;; (define-extern calc-ratio function) ;; (function int int float) +;; (define-extern display-sync function) ;; (function display none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-group ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-inline-array ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drawable-tree ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; prototype ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; prototype-node-group is already defined! + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; main-collide ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern drawable-sphere-box-intersect? function) ;; (function drawable bounding-box4w symbol) +;; (define-extern instance-sphere-box-intersect? function) ;; (function drawable instance-tie bounding-box4w symbol) +;; (define-extern instance-tfragment-add-debug-sphere function) ;; (function drawable instance-tie symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; video ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *video-mode* int) +(define-extern set-video-mode (function symbol none)) +(define-extern get-video-mode (function symbol)) +(define-extern set-aspect-ratio (function symbol none)) +(define-extern get-aspect-ratio (function symbol)) +(define-extern set-progressive-scan (function symbol none)) +(define-extern get-progressive-scan (function symbol)) +(define-extern set-graphics-mode (function none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; main ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype disc-error-proc (process-drawable) + ((error basic :offset-assert 248) + (bmask uint32 :offset-assert 252) + ) + :method-count-assert 50 + :size-assert #x100 + :flag-assert #x3200700100 + ) + +(define-extern set-letterbox-frames "Enable letterbox for the given amount of time." (function time-frame none)) +(define-extern letterbox "Draw letterbox" (function bucket-id float none)) +(define-extern set-blackout-frames "Enable blackout for the given amount of time." (function time-frame none)) +(define-extern blackout "Draw blackout as a sprite." (function bucket-id none)) +(define-extern add-blackout "Update display settings to do blackout with GS pmode alp." (function time-frame int int int int int)) +(define-extern paused? "Are we paused? Counts any type of pause/menu/freeze." (function symbol)) +(define-extern movie? "Are we in a movie?" (function symbol)) +(define-extern scene-select? (function symbol)) +(define-extern demo? "Is this a demo version?" (function symbol)) +(define-extern kiosk? "Is this a kiosk version of the game?" (function symbol)) +(define-extern beta? "Is this a beta version?" (function symbol)) +(define-extern *last-master-mode* symbol) +(define-extern set-master-mode "Change the master mode and adjust a few masks" (function symbol none)) +(define-extern pause-allowed? "Should we allow a pause?" (function symbol)) +(define-extern toggle-pause "Update the pause state. Call this if the user presses a pause button + This function will check the button and state and do a pause if needed." + (function int)) +(define-extern *screen-filter-array* (array screen-filter)) +(define-extern *screen-filter* screen-filter) +(define-extern *master-exit* symbol) +(define-extern *progress-cheat* symbol) +(define-extern *first-boot* symbol) +(define-extern main-timeouts "Maybe reset/restart the game if no input has been given. + Mainly used for kiosk/demo modes." (function none)) +(define-extern main-cheats (function none)) +(define-extern end-display (function display none)) +;; (define-extern disc-idle state) +;; (define-extern disc-error-proc-init-by-other function) +(define-extern display-loop-main (function display none)) +(define-extern display-loop "Main loop for running the game." (function int :behavior process)) +(define-extern on "Start the display process." (function symbol process)) +(define-extern off "Stop the display process." (function none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-cache ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype collide-puls-work (structure) + ((ignore-pat pat-surface :offset-assert 0) ;; guessed by decompiler + (bsphere sphere :inline :offset-assert 16) + (move-dist vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype lsmi-work (structure) + ((best-u float :offset-assert 0) + (orig-best-u float :offset-assert 4) + (action uint32 :offset-assert 8) + (cquery collide-query :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x22c + :flag-assert #x90000022c + ) + +(define-extern test-closest-pt-in-triangle (function collide-cache symbol)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; collide-debug ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype col-rend-filter (structure) + ((show-pat uint32 :offset-assert 0) + (show-pat-mask uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +;; (define-extern col-rend-draw function) ;; (function col-rend col-rend-filter none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; relocate ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; memory-usage ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; memory-usage-block is already defined! + +(define-extern mem-size (function basic symbol int int)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; entity ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype debug-actor-info (basic) + ((name string :offset-assert 4) ;; guessed by decompiler + (handle handle :offset-assert 8) ;; handle + (process process :offset-assert 16) ;; guessed by decompiler + (pid int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; actor-group is already defined! + +(deftype entity (res-lump) + "Entities are mainly used to place objects in a level. + + As a child of [[res-lump]], they store various types of metadata + in [[res-tag]]s (such as name, curve data, volume data, etc.) + that gets accessed by the accompanying process." + ((trans vector :inline :offset-assert 32) + (aid uint32 :offset-assert 48) + (pad uint32) + ) + :method-count-assert 27 + :size-assert #x38 + :flag-assert #x1b00000038 + (:methods + (birth! (_type_) _type_) ;; 22 + (kill! (_type_) _type_) ;; 23 + (add-to-level! (_type_ level-group level actor-id) none) ;; 24 + (remove-from-level! (_type_ level-group) _type_) ;; 25 + (get-level (_type_) level) ;; 26 + ) + ) + +(deftype entity-nav-mesh (entity) + ((nav-mesh nav-mesh :offset-assert 56) ;; field could not be read. + ) + :method-count-assert 29 + :size-assert #x3c + :flag-assert #x1d0000003c + (:methods + (initialize-nav-mesh! "Initialize the nav-mesh in this entity." (_type_) none) ;; 27 + (debug-draw (_type_) none) ;; 28 + ) + ) + +(deftype entity-actor (entity) + ((kill-mask task-mask :offset-assert 56) + (etype type :offset-assert 60) ;; guessed by decompiler + (task game-task :offset-assert 64) ;; game-task + (vis-id int16 :offset-assert 66) + (quat quaternion :inline :offset 80) ;; quaternion :inline + ) + :method-count-assert 33 + :size-assert #x60 + :flag-assert #x2100000060 + (:methods + (next-actor (_type_) entity-actor) ;; 27 + (prev-actor (_type_) entity-actor) ;; 28 + (debug-print (_type_ symbol type) none) ;; 29 + (toggle-status (_type_ entity-perm-status symbol) none) ;; 30 + (get-simple-travel-vector (_type_ vector vector vector object float) nav-mesh) ;; 31 + (project-point-to-nav-mesh (_type_ vector vector nav-poly float) nav-poly) ;; 32 + ) + ) + +(define-extern *spawn-actors* symbol) +(define-extern *compact-actors* symbol) +(define-extern *vis-actors* symbol) +;; (define-extern *additional-spawner-count* object) +;; (define-extern *additional-spawners* object) +;; (define-extern register-additional-spawner function) +;; (define-extern unregister-spawner-at-index function) +;; (define-extern *camera-pos-0* object) +;; (define-extern *camera-pos-1* object) +;; (define-extern vis-cull-all? function) +;; (define-extern vis-dist-additional-ok? function) +;; (define-extern vis-dist-ok? function) +(define-extern entity-by-name (function string entity)) +(define-extern entity-by-type (function type entity-actor)) +(define-extern entity-by-aid (function uint entity)) +(define-extern entity-actor-from-level-name (function symbol entity-actor)) +(define-extern entity-nav-mesh-by-aid (function actor-id entity-nav-mesh)) +(define-extern nav-mesh-from-res-tag (function entity symbol int nav-mesh)) +(define-extern entity-by-meters (function float float float entity-actor)) +(define-extern process-by-ename (function string process)) +(define-extern entity-process-count (function symbol int)) +(define-extern entity-count (function int)) +(define-extern entity-remap-names (function pair none)) +(define-extern process-status-bits (function process symbol none)) +(define-extern process-entity-set! (function process entity entity)) +(define-extern process-task-mask (function process task-mask)) +(define-extern update-actor-vis-box (function process-drawable vector vector none)) +(define-extern expand-bounding-box (function vector vector vector vector none)) +(define-extern expand-bounding-box-from-nav-meshes (function entity vector vector object)) +(define-extern expand-vis-box-with-point (function entity vector none)) +(define-extern *debug-actor-info* debug-actor-info) +(define-extern *pid-string* string) +(define-extern debug-actor (function string none)) +(define-extern debug-actor-process (function process none)) +(define-extern draw-actor-marks (function process none)) +(define-extern init-entity (function process entity-actor type none)) +(define-extern entity-deactivate-handler (function process entity-actor none)) +(define-extern check-for-rougue-process (function process int int level none)) +(define-extern process-drawable-scale-from-entity! (function process-drawable entity none)) +(define-extern process-drawable-from-entity! (function process-drawable entity-actor none)) +;; (define-extern reset-actors-by-game-type function) +(define-extern reset-actors (function symbol none)) +(define-extern reset-cameras (function none)) +(define-extern entity-birth-no-kill (function entity process)) +(define-extern entity-task-complete-on (function entity none)) +(define-extern entity-task-complete-off (function entity none)) +(define-extern process-entity-status! (function process entity-perm-status symbol entity-perm-status)) +(define-extern find-nearest-entity (function vector type entity)) +(define-extern entity-speed-test (function string entity)) +(define-extern dump-entity-remap (function object object none)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; path ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vol ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern plane-volume-intersect-dist function) ;; (function vector vector vector float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-engine ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype nav-engine-spr-buffer (structure) + ((mem-addr (pointer nav-mesh) :offset-assert 0) ;; guessed by decompiler + (mem-nav uint32 :offset-assert 0) + (spr-addr (inline-array nav-control) :offset-assert 4) ;; guessed by decompiler + (spr-nav uint32 :offset-assert 4) + (q-size uint32 :offset-assert 8) + (i-nav uint8 :offset-assert 12) + (done int8 :offset-assert 13) + (nav-count int8 :offset-assert 14) + (i-pass int8 :offset-assert 15) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype nav-engine (structure) + ((spr-addr uint32 :offset-assert 0) + (nav-work-addr uint32 :offset-assert 4) + (nav-mesh-addr nav-mesh :offset-assert 8) ;; guessed by decompiler + (poly-array-addr uint32 :offset-assert 12) + (hash-sphere-addr uint32 :offset-assert 16) + (hash-buckets-addr uint32 :offset-assert 20) + (buf-nav-control-count int8 :offset-assert 24) + (max-pass-count int8 :offset-assert 25) + (output-sphere-hash uint8 :offset-assert 26) + (work-buf-array nav-engine-spr-buffer 3 :offset-assert 28) ;; guessed by decompiler + (spr-work nav-mesh-work :offset-assert 4) + (mem-work nav-mesh-work :offset-assert 76) + (spr-mesh nav-mesh :offset-assert 8) ;; guessed by decompiler + (mem-mesh nav-mesh :offset-assert 80) ;; guessed by decompiler + (spr-poly-array uint32 :offset-assert 12) + (mem-poly-array (inline-array nav-poly) :offset-assert 84) ;; guessed by decompiler + (hash-sphere-list uint32 :offset-assert 16) + (hash-buckets uint32 :offset-assert 20) + (to-spr-wait uint32 :offset-assert 88) + (from-spr-wait uint32 :offset-assert 92) + ) + :method-count-assert 22 + :size-assert #x60 + :flag-assert #x1600000060 + (:methods + (nav-engine-method-9 () none) ;; 9 ;; (inc-spr-addr! (_type_ uint) uint) + (nav-engine-method-10 () none) ;; 10 ;; (lay-out-spad-memory (_type_ nav-mesh) none) + (nav-engine-method-11 () none) ;; 11 ;; (set-up-mem-work (_type_) none) + (nav-engine-method-12 () none) ;; 12 ;; (add-spheres-from-mesh-user-list (_type_ sphere-hash nav-mesh) none) + (nav-engine-method-13 () none) ;; 13 ;; (add-all-spheres (_type_) none) + (nav-engine-method-14 () none) ;; 14 ;; (do-sphere-lookups (_type_) none) + (nav-engine-method-15 () none) ;; 15 ;; (update-nav-controls-pipelined-in-spr (_type_) none) + (nav-engine-method-16 () none) ;; 16 ;; (update-nav-controls-in-spr (_type_) none) + (nav-engine-method-17 () none) ;; 17 ;; (upload-nav-to-spr (_type_ nav-engine-spr-buffer) none) + (nav-engine-method-18 () none) ;; 18 ;; (download-nav-from-spr (_type_ nav-engine-spr-buffer) none) + (nav-engine-method-19 () none) ;; 19 ;; (do-callbacks (_type_ nav-engine-spr-buffer) none) + (nav-engine-method-20 () none) ;; 20 ;; (reloc-ptrs-to-spad (_type_ nav-engine-spr-buffer) none) + (nav-engine-method-21 () none) ;; 21 ;; (reloc-ptrs-to-mem (_type_ nav-engine-spr-buffer) none) + ) + ) +|# + +;; (define-extern nav-dma-send-to-spr-no-flush function) ;; (function pointer pointer int none) +;; (define-extern nav-dma-send-from-spr-no-flush function) ;; (function pointer pointer int none) +;; (define-extern inc-mod3 function) ;; (function int int) +;; (define-extern nav-state-patch-pointers function) ;; (function nav-state int none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-mesh ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype nav-find-clear-spot-work (structure) + ((id-array int8 16 :offset-assert 0) ;; guessed by decompiler + (sphere-array sphere 16 :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x110 + :flag-assert #x900000110 + ) +|# + +#| +(deftype nav-find-corner-work (structure) + ((cur-poly nav-poly :offset-assert 0) + (target-poly nav-poly :offset-assert 4) + (start-pos vector :inline :offset-assert 16) + (target-pos vector :inline :offset-assert 32) + (tmp UNKNOWN 2 :offset-assert 48) + (dir vector :inline :offset-assert 80) + (frust UNKNOWN 2 :offset-assert 96) + (route-portal nav-route-portal :inline :offset-assert 128) + (portal-count int16 :offset-assert 166) + (frust-dots UNKNOWN 2 :offset-assert 168) + (frust-x-dots UNKNOWN 2 :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xb8 + :flag-assert #x9000000b8 + ) +|# + +;; (define-extern *debug-nav-control-output* object) ;; symbol +;; (define-extern *debug-nav-control* object) ;; symbol +;; (define-extern *debug-nav-mesh-output* object) ;; symbol +;; (define-extern *debug-nav-ray* object) ;; nav-ray +;; (define-extern *debug-ray-offset* object) ;; vector +;; (define-extern *debug-offset* object) ;; vector +;; (define-extern *nav-mesh-work* object) ;; nav-mesh-work +;; (define-extern *default-nav-mesh* nav-mesh) ;; nav-mesh +;; (define-extern *nav-mesh-id-hash* array) +;; (define-extern id-hash-find-free-index function) +;; (define-extern id-hash-find-matching-index function) +;; (define-extern nav-mesh-connect-from-ent function) ;; (function process-drawable symbol) +;; (define-extern connection-validate function) ;; (function connection none) +;; (define-extern connection-list-validate function) ;; (function (inline-array connection) symbol) +;; (define-extern nav-control-validate function) ;; (function process-drawable none) +;; (define-extern debug-validate-nav-poly function) ;; (function nav-mesh-link nav-poly none) +;; (define-extern vu-point-triangle-intersection? function) ;; (function vector vector vector vector symbol) +;; (define-extern poly-in-height-range? function) ;; (function nav-poly float float symbol) +;; (define-extern nav-ray-test function) ;; (function nav-mesh nav-poly vector vector meters) +;; (define-extern point-poly-distance-min function) ;; (function nav-mesh-work nav-poly float nav-poly float) +;; (define-extern nav-mesh-route-table-bit-index function) ;; (function nav-mesh uint int int) +;; (define-extern ray-ccw-line-segment-intersection? function) ;; (function vector vector vector vector symbol) +;; (define-extern ray-line-segment-intersection? function) ;; (function vector vector vector vector symbol) +;; (define-extern plane-height-at-xz-point function) ;; (function plane vector float) +;; (define-extern nav-normal-from-3-points function) ;; (function vector vector vector vector none) +;; (define-extern get-nav-mesh function) ;; (function actor-id nav-mesh) +;; (define-extern find-nearest-nav-mesh function) ;; (function vector float nav-mesh) +;; (define-extern point-to-poly-boundary function) ;; (function nav-poly vector vector float) +;; (define-extern find-first-containing-nav-mesh function) +;; (define-extern find-nav-mesh function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-control ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype nav-link-search-info (structure) + ((open-list nav-mesh-link-search-node :offset-assert 0) + (closed-list nav-mesh-link-search-node :offset-assert 4) + (target-pos vector :inline :offset-assert 16) + (current-pos vector :inline :offset-assert 32) + ) + :method-count-assert 17 + :size-assert #x30 + :flag-assert #x1100000030 + (:methods + (nav-link-search-info-method-9 () none) ;; 9 + (nav-link-search-info-method-10 () none) ;; 10 + (nav-link-search-info-method-11 () none) ;; 11 + (nav-link-search-info-method-12 () none) ;; 12 + (nav-link-search-info-method-13 () none) ;; 13 + (nav-link-search-info-method-14 () none) ;; 14 + (nav-link-search-info-method-15 () none) ;; 15 + (nav-link-search-info-method-16 () none) ;; 16 + ) + ) +|# + +(deftype nav-control-cfs-work (structure) + ((in-dir vector :inline :offset-assert 0) + (right-dir vector :inline :offset-assert 16) + (best-dir vector 2 :inline :offset-assert 32) ;; guessed by decompiler + (temp-dir vector 2 :inline :offset-assert 64) ;; guessed by decompiler + (away-dir vector :inline :offset-assert 96) + (best-dir-angle degrees 2 :offset-assert 112) ;; guessed by decompiler + (ignore-mask uint64 :offset-assert 120) + (initial-ignore-mask uint64 :offset-assert 128) + (i-sphere int32 :offset-assert 136) + (i-first-sphere int32 :offset-assert 140) + (i-inside-sphere int32 :offset-assert 144) + (inside-sphere-dist float :offset-assert 148) + (sign float :offset-assert 152) + (travel-len float :offset-assert 156) + (dist2 float :offset-assert 160) + (inside-dist float :offset-assert 164) + (rand-angle float :offset-assert 168) + (dir-update basic :offset-assert 172) + (debug-offset vector :inline :offset-assert 176) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + +;; (define-extern *nav-triangle-test-count* object) ;; int +;; (define-extern *nav-last-triangle-test-count* object) ;; int +;; (define-extern debug-nav-validate-current-poly function) ;; (function nav-mesh nav-poly vector symbol) +;; (define-extern debug-report-nav-stats function) ;; (function none) +;; (define-extern get-nav-control function) ;; (function process-drawable nav-mesh none) +;; (define-extern get-pos-from-node function) +;; (define-extern add-nav-sphere function) ;; (function nav-control sphere int none) +;; (define-extern add-collide-shape-spheres function) ;; (function nav-control collide-shape sphere none) +;; (define-extern circle-tangent-directions function) ;; (function vector vector vector vector vector) +;; (define-extern circle-ray-intersection? function) ;; (function vector vector float vector symbol) +;; (define-extern find-closest-circle-ray-intersection function) ;; (function vector vector float int (inline-array vector) int int) +;; (define-extern compute-dir-parm function) ;; (function vector vector vector float) +;; (define-extern vector-rotate-y-sincos! function) ;; (function vector vector float float float) +;; (define-extern test-xz-point-on-line-segment? function) ;; (function vector vector vector float symbol) +;; (define-extern *null-nav-callback-info* object) ;; nav-callback-info +;; (define-extern *default-nav-callback-info* object) ;; nav-callback-info +;; (define-extern *physics-nav-callback-info* object) ;; nav-callback-info + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; effect-control ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *footstep-surface* pat-surface) +(define-extern *debug-effect-control* symbol) +(define-extern sound-name-with-material (function string pat-surface string sound-name)) +(define-extern effect-param->sound-spec (function sound-spec (pointer float) int process-focusable sound-spec)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; water-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *range-wsplash-color* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-wsplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-wsplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-wsplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wsplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wsplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wsplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-water-splash-curve-settings* object) ;; particle-curve-settings +;; (define-extern *range-splash-color* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-splash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-splash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-splash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-splash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-splash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-splash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-water-splash-center-curve-settings* object) ;; particle-curve-settings +;; (define-extern *curve-wsplash-small-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wsplash-small-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-water-splash-small-curve-settings* object) ;; particle-curve-settings + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; water ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern check-water-level-drop function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-water-level-drop-and-die function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-water-level-drop-and-die-motion function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-water-level-above-and-die function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern check-water-level-drop-motion function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern *water-simple-alpha-curve-in* object) ;; curve2d-piecewise +;; (define-extern *growing-curve* object) ;; curve2d-piecewise +;; (define-extern *water-simple-alpha-curve-fade-out* object) ;; curve2d-piecewise +;; (define-extern *color-curve-tan-brown* object) ;; curve-color-piecewise +;; (define-extern *water-wake-trail* object) ;; light-trail-composition +;; (define-extern part-water-splash-callback function) ;; (function part-tracker none) +;; (define-extern splash-spawn function) ;; (function float vector int none) +;; (define-extern rings-water-spawn function) ;; (function float vector vector float float none) +;; (define-extern water-info<-region function) ;; (function water-info drawable-region-prim (inline-array water-sphere) collide-action process-drawable water-info) +;; (define-extern find-water-1 function) ;; (function water-sphere water-info water-info symbol) +;; (define-extern find-water-2 function) ;; (function (inline-array water-sphere) int water-info water-info process-drawable water-info) +;; (define-extern find-water-simple function) +;; (define-extern find-water-with-spheres function) ;; (function (inline-array water-sphere) int water-info object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; water-flow ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype flow-section (structure) + ((start vector :inline :offset-assert 0) + (trailing plane :inline :offset-assert 16) + (pull-dir vector :inline :offset-assert 32) + (radial-dir vector :inline :offset-assert 48) + (speed float :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +#| +(deftype flow-section-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data flow-section :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype flow-control (basic) + ((path path-control :offset-assert 4) ;; guessed by decompiler + (speed float :offset-assert 8) + (belt-radius float :offset-assert 12) + (sections flow-section-array :offset-assert 16) ;; guessed by decompiler + (leading plane :inline :offset-assert 32) + (collide-bounds sphere :inline :offset-assert 48) + ) + :method-count-assert 14 + :size-assert #x40 + :flag-assert #xe00000040 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type process-drawable res-lump) _type_) + (flow-control-method-9 () none) ;; 9 ;; (draw-path (_type_) none) + (flow-control-method-10 () none) ;; 10 ;; (setup (_type_ (pointer float) int) none) + (flow-control-method-11 () none) ;; 11 ;; (push-process (_type_ process-focusable) none) + (flow-control-method-12 () none) ;; 12 ;; (find-and-push-things (_type_) none) + (flow-control-method-13 () none) ;; 13 ;; (flow-control-method-13 (_type_ water-info vector) symbol) + ) + ) +|# + +#| +(deftype water-flow (process-drawable) + ((flow flow-control :offset-assert 248) ;; guessed by decompiler + ) + :method-count-assert 51 + :size-assert #xfc + :flag-assert #x33007000fc + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern ray-plane-equation-intersect function) ;; (function vector vector vector vector float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; task-control ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype scene-stage (process-hidden) + () + :method-count-assert 16 + :size-assert #x90 + :flag-assert #x1000000090 + ) + +(define-extern game-task-node->string (function game-task-node string)) +(define-extern reset-city-squad-control (function symbol none)) +(define-extern city-task-faction-commands (function object)) +(define-extern evaluate-faction-commands (function pair object)) +(define-extern update-task-masks (function symbol int)) +(define-extern play-clean (function symbol int)) +(define-extern play-task (function game-task symbol symbol string)) +(define-extern task-node-by-name (function string game-task-node-info)) +(define-extern task-node-index-by-name (function string int)) +(define-extern task-resolution-close! (function game-task symbol)) +(define-extern task-close! (function string symbol)) +(define-extern task-closed? (function string symbol)) +(define-extern open-task-nodes (function (array game-task-node-info) (array game-task-node-info))) +(define-extern task-node-closed? (function game-task-node symbol)) +(define-extern task-node-close! (function game-task-node symbol int)) +(define-extern task-open? (function string symbol)) +(define-extern task-node-open? (function game-task-node symbol)) +(define-extern task-node-open! (function game-task-node symbol int)) +(define-extern task-node-close-upwards (function (array game-task-node-info) int none)) +(define-extern task-node-reset (function symbol int)) +(define-extern cheat-add-gold (function int)) +(define-extern *cache-open-node* game-task-node) +(define-extern get-open-task-node-info (function game-task-node-info)) +(define-extern get-task-total-score (function int)) +(define-extern get-task-cup-score (function game-task-node-flag int)) +(define-extern stats-weapon-used (function none)) +(define-extern stats-player-died (function none)) +(define-extern stats-player-medal (function none)) +(define-extern stats-player-ranking (function none)) +(define-extern stats-player-score (function none)) +(define-extern stats-player-end-mode (function none)) +(define-extern stats-player-time (function none)) +(define-extern stats-player-duration (function none)) +(define-extern stats-player-vehicle (function none)) +(define-extern stats-player-cash (function none)) +(define-extern get-medal-reward-ignore-medal (function float int)) +(define-extern get-medal-reward (function float int)) +(define-extern update-high-scores (function float int)) +(define-extern *last-medal* game-task-medal) +(define-extern report-score (function float int)) +(define-extern task-node-dump (function symbol symbol)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scene ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype subtitle-work (structure) + ((draw-tmpl dma-gif-packet :inline :offset-assert 0) + (color0 vector4w :inline :offset-assert 32) + (color1 vector4w :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +;; (define-extern scene-decode-continue function) ;; (function basic continue-point) +;; (define-extern scene-lookup function) ;; (function basic scene) +;; (define-extern *subtitle-work* object) ;; subtitle-work +;; (define-extern draw-subtitle-image function) ;; (function subtitle-image font-context none) +;; (define-extern process-drawable-draw-subtitles function) ;; (function none :behavior process-drawable) +;; (define-extern scene-player-init function) ;; (function object symbol string none :behavior scene-player) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; movie-path ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype movie-path (process) + ((root basic :offset-assert 144) + (path basic :offset-assert 148) + (path-pos float :offset-assert 152) + (path-speed float :offset-assert 156) + (rot vector :inline :offset-assert 160) + (enabled? basic :offset-assert 176) + (movie-frame uint32 :offset-assert 180) + ) + :method-count-assert 17 + :size-assert #xb8 + :flag-assert #x11003000b8 + (:methods + (movie-path-method-9 () none) ;; 9 + (movie-path-method-10 () none) ;; 10 + (movie-path-method-11 () none) ;; 11 + (movie-path-method-12 () none) ;; 12 + (movie-path-method-13 () none) ;; 13 + (movie-path-method-14 () none) ;; 14 + (movie-path-method-16 () none) ;; 16 + ) + (:state-methods + active ;; 15 + ) + ) +|# + +;; (define-extern *movie-path-dir* object) +;; (define-extern *movie-path-filename* object) +;; (define-extern *movie-path* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; pov-camera ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern pov-camera-play-and-reposition function) ;; (function art-joint-anim vector float none :behavior pov-camera) +;; (define-extern pov-camera-init-by-other function) ;; (function vector skeleton-group string pov-camera-flag process-drawable pair none :behavior pov-camera) +;; (define-extern othercam-calc function) ;; (function float float) +;; (define-extern othercam-init-by-other function) ;; (function pov-camera int symbol symbol none :behavior othercam) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; powerups ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern cloud-track function) ;; (function process-tree process-tree (function vector none) time-frame time-frame time-frame none :behavior process) +;; (define-extern eco-blue-glow function) ;; (function vector none) +;; (define-extern process-contact-action function) ;; (function process none :behavior target) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-string-record (structure) + ((str hud-string :offset-assert 0) + (next hud-string-record :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype hud-sprite-work (structure) + ((adgif-tmpl dma-gif-packet :inline :offset-assert 0) + (draw-tmpl dma-gif-packet :inline :offset-assert 32) + (draw-no-tex-tmpl dma-gif-packet :inline :offset-assert 64) + (sprite-tmpl dma-gif-packet :inline :offset-assert 96) + (sprite-no-tex-tmpl dma-gif-packet :inline :offset-assert 128) + (box-tmpl dma-gif-packet :inline :offset-assert 160) + (box2-tmpl dma-gif-packet :inline :offset-assert 192) + (mask-tmpl dma-gif-packet :inline :offset-assert 224) + (line-tmpl dma-gif-packet :inline :offset-assert 256) + (scan-tmpl dma-gif-packet :inline :offset-assert 288) + (line-color uint64 :offset-assert 320) ;; gs-rgbaq + (scan-colors vector4w 32 :offset-assert 336) ;; guessed by decompiler + (scanline uint32 :offset-assert 848) + ) + :method-count-assert 9 + :size-assert #x354 + :flag-assert #x900000354 + ) +|# + +;; (define-extern *hud-string-array* object) +;; (define-extern *hud-string-used-list* object) +;; (define-extern *hud-string-free-list* object) +;; (define-extern *font-hud-context* object) +;; (define-extern hud-string-init function) +;; (define-extern hud-string-add function) +;; (define-extern hud-string-draw-all function) +;; (define-extern *hud-sprite-work* object) ;; hud-sprite-work +;; (define-extern hud-sprite-add function) +;; (define-extern *debug-hud-disable* object) +;; (define-extern hud-create-icon function) ;; (function hud int int (pointer manipy)) +;; (define-extern hud-post function) +;; (define-extern hud-handler function) +;; (define-extern hud-init-by-other function) ;; (function object :behavior hud) +;; (define-extern set-hud-piece-position! function) ;; (function hud-sprite int int none) +;; (define-extern set-as-offset-from! function) ;; (function hud-sprite vector4w int int none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hud-classes ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype race-map-info (structure) + ((corner vector2 :offset-assert 0) + (tex-offset vector2 :offset-assert 4) + (tex-id uint32 :offset-assert 8) + (scale float :offset-assert 12) + (mode int32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +;; (define-extern *race-map-info-array* object) +;; (define-extern hud-map-init-by-other function) +;; (define-extern hack-set-level-bbox function) +;; (define-extern init-level-bbox-from-map function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; progress ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *progress-process* (pointer process)) ;; (pointer progress) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ocean-trans-tables ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-left-table* object) ;; (pointer float) +;; (define-extern *ocean-right-table* object) ;; (pointer float) +;; (define-extern *ocean-up-table* object) ;; (pointer float) +;; (define-extern *ocean-down-table* object) ;; (pointer float) +;; (define-extern *ocean-down-left-table* object) ;; (pointer float) +;; (define-extern *ocean-down-right-table* object) ;; (pointer float) +;; (define-extern *ocean-up-right-table* object) ;; (pointer float) +;; (define-extern *ocean-up-left-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-left-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-right-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-up-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-down-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-down-left-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-down-right-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-up-right-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-up-left-table* object) ;; (pointer float) +;; (define-extern *ocean-trans-corner-table* object) ;; (inline-array vector4w-2) +;; (define-extern *ocean-trans-strip-array* object) ;; (pointer float) +;; (define-extern *ocean-trans-st-table* object) ;; (inline-array vector) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern init-ocean-far-regs function) ;; (function none) +;; (define-extern draw-large-polygon-ocean function) ;; (function none) +;; (define-extern render-ocean-quad function) ;; (function (inline-array ocean-vertex) dma-buffer symbol) +;; (define-extern test-seq-read function) +;; (define-extern test-worst-read function) +;; (define-extern test-seq-write function) +;; (define-extern test-worst-write function) +;; (define-extern test-to-spr function) +;; (define-extern test-from-spr function) +;; (define-extern test-to-from-spr function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ocean-mid ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern ocean-mid-block object) ;; vu-function + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ocean-transition ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ocean-near ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern ocean-near-block object) ;; vu-function + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sparks ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern *sparks-work* sparks-work) +(define-extern sparks-vu1-block object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; eye ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *eye-work* object) ;; eye-work +;; (define-extern find-free-eye-index function) ;; (function int string int int) +;; (define-extern free-eye-index function) ;; (function int int) +;; (define-extern render-eyes-32 function) ;; (function dma-buffer eye-control int pointer) +;; (define-extern render-eyes-64 function) ;; (function dma-buffer eye-control int pointer) +;; (define-extern dirty-eyes function) +;; (define-extern update-eyes function) ;; (function none) +;; (define-extern convert-eye-data function) ;; (function eye uint float) +;; (define-extern merc-eye-anim function) ;; (function process-drawable none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mem-buffer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dynamic-mem ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype memblock (structure) + ((tp uint8 :offset-assert 0) + (flavor uint8 :offset-assert 1) + (pad2 int16 :offset-assert 2) + (paras int32 :offset-assert 4) + (prev memblock :offset-assert 8) + (next memblock :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype mem-manager (structure) + ((pool memblock :offset-assert 0) + (pool-sz int32 :offset-assert 4) + ) + :method-count-assert 16 + :size-assert #x8 + :flag-assert #x1000000008 + (:methods + (mem-manager-method-9 () none) ;; 9 + (mem-manager-method-10 () none) ;; 10 + (mem-manager-method-11 () none) ;; 11 + (mem-manager-method-12 () none) ;; 12 + (mem-manager-method-13 () none) ;; 13 + (mem-manager-method-14 () none) ;; 14 + (mem-manager-method-15 () none) ;; 15 + ) + ) +|# + +;; (define-extern *dynamic-alloc-pool* object) +;; (define-extern *mem-manager* object) +;; (define-extern mem-alloc-scert function) +;; (define-extern mem-free-scert function) +;; (define-extern mem-realloc-scert function) +;; (define-extern mem-alloc-nelly function) +;; (define-extern mem-free-nelly function) +;; (define-extern mem-realloc-nelly function) +;; (define-extern mem-alloc-lgaud function) +;; (define-extern mem-free-lgaud function) +;; (define-extern mem-realloc-lgaud function) +;; (define-extern mem-alloc-flash function) +;; (define-extern mem-free-flash function) +;; (define-extern mem-realloc-flash function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; headset-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype headset-queue (structure) + ((write-offset int32 :offset-assert 0) + (read-offset int32 :offset-assert 4) + (bytes int32 :offset-assert 8) + (size int32 :offset-assert 12) + (data uint32 :offset-assert 16) + ) + :method-count-assert 13 + :size-assert #x14 + :flag-assert #xd00000014 + (:methods + (headset-queue-method-9 () none) ;; 9 + (headset-queue-method-10 () none) ;; 10 + (headset-queue-method-11 () none) ;; 11 + (headset-queue-method-12 () none) ;; 12 + ) + ) +|# + +#| +(deftype nci-codec-io-block (structure) + ((pcm-buffer uint32 :offset-assert 0) + (samples-in-pcm-buffer int16 :offset-assert 4) + (nelly-buffer uint32 :offset-assert 8) + (nelly-buffer-size uint16 :offset-assert 12) + (nelly-buffer-read-byte-offset uint16 :offset-assert 14) + (nelly-buffer-read-bit-offset uint8 :offset-assert 16) + (nelly-buffer-write-byte-offset uint16 :offset-assert 18) + (nelly-buffer-write-bit-offset uint8 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x15 + :flag-assert #x900000015 + ) +|# + +#| +(deftype headset-decoder (structure) + ((client-idx int8 :offset-assert 0) + (last-time int32 :offset-assert 4) + (cmp-queue headset-queue :inline :offset-assert 8) + (io nci-codec-io-block :inline :offset-assert 28) + (scratch UNKNOWN 16 :offset-assert 49) + (id int8 :offset-assert 65) + ) + :method-count-assert 9 + :size-assert #x42 + :flag-assert #x900000042 + ) +|# + +#| +(deftype headset (process) + ((flags uint32 :offset-assert 144) + (decoders UNKNOWN 4 :offset-assert 148) + (client-to-decoder UNKNOWN 16 :offset-assert 468) + (encoder-io nci-codec-io-block :inline :offset-assert 484) + (last-speech-time int32 :offset-assert 508) + (prev-operation basic :offset-assert 512) + (bytes-in-playback-queue int32 :offset-assert 516) + (first-send basic :offset-assert 520) + (frame-ct int32 :offset-assert 524) + (client-talking UNKNOWN 16 :offset-assert 528) + ) + :method-count-assert 33 + :size-assert #x220 + :flag-assert #x2101900220 + (:methods + (headset-method-9 () none) ;; 9 + (headset-method-10 () none) ;; 10 + (headset-method-11 () none) ;; 11 + (headset-method-12 () none) ;; 12 + (headset-method-13 () none) ;; 13 + (headset-method-14 () none) ;; 14 + (headset-method-15 () none) ;; 15 + (headset-method-16 () none) ;; 16 + (headset-method-17 () none) ;; 17 + (headset-method-18 () none) ;; 18 + (headset-method-19 () none) ;; 19 + (headset-method-20 () none) ;; 20 + (headset-method-21 () none) ;; 21 + (headset-method-22 () none) ;; 22 + (headset-method-23 () none) ;; 23 + (headset-method-24 () none) ;; 24 + (headset-method-25 () none) ;; 25 + (headset-method-26 () none) ;; 26 + (headset-method-27 () none) ;; 27 + (headset-method-28 () none) ;; 28 + (headset-method-29 () none) ;; 29 + (headset-method-30 () none) ;; 30 + (headset-method-31 () none) ;; 31 + (headset-method-32 () none) ;; 32 + ) + ) +|# + +;; (define-extern *headset-input-buffer* object) +;; (define-extern *headset-input-bytes* object) +;; (define-extern *headset-output-buffer* object) +;; (define-extern *headset-output-bytes* object) +;; (define-extern *headset-output-offset* object) +;; (define-extern *headset-cmp-out-buffer* object) +;; (define-extern *headset-cmp-out-frames* object) +;; (define-extern *headset-scratch-buffer* object) +;; (define-extern *headset-mix-buffer* object) +;; (define-extern *headset-decoder-ids* object) +;; (define-extern *headset-decoder-ptrs* array) +;; (define-extern *headset* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; stream-media-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; joint-exploder ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype joint-exploder-tuning (structure) + ((explosion uint64 :offset-assert 0) + (duration time-frame :offset-assert 8) ;; time-frame + (gravity float :offset-assert 16) + (rot-speed float :offset-assert 20) + (bounds-inflate float :offset-assert 24) + (max-probes uint8 :offset-assert 28) + (max-probe-width float :offset-assert 32) + (max-probe-height float :offset-assert 36) + (max-probe-depth float :offset-assert 40) + (max-y-offset float :offset-assert 44) + (friction float :offset-assert 48) + (fountain-rand-transv-lo vector :inline :offset-assert 64) + (fountain-rand-transv-hi vector :inline :offset-assert 80) + (away-from-focal-pt vector :inline :offset 64) + (away-from-rand-transv-xz-lo float :offset 80) + (away-from-rand-transv-xz-hi float :offset 84) + (away-from-rand-transv-y-lo float :offset 88) + (away-from-rand-transv-y-hi float :offset 92) + (hit-xz-reaction float :offset-assert 96) + (hit-y-reaction float :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + (:methods + (new (symbol type uint) _type_) ;; 0 + ) + ) + +(deftype joint-exploder-static-joint-params (structure) + ((joint-index int16 :offset-assert 0) + (parent-joint-index int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype joint-exploder-static-params (basic) + ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler + (collide-spec collide-spec :offset-assert 8) ;; guessed by decompiler + (art-level symbol :offset-assert 12) ;; guessed by decompiler + (collide-sound uint16 :offset-assert 16) ;; sound-name + (collide-sound-interval uint64 :offset-assert 24) ;; time-frame + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype joint-exploder-joint (structure) + ((next int16 :offset-assert 0) + (prev int16 :offset-assert 2) + (joint-index int16 :offset-assert 4) + (mat matrix :inline :offset-assert 16) + (rmat matrix :inline :offset-assert 80) + (update-rmat matrix :inline :offset-assert 144) + (transv vector :inline :offset-assert 208) + (prev-pos vector :inline :offset-assert 224) + ) + :method-count-assert 9 + :size-assert #xf0 + :flag-assert #x9000000f0 + ) + +(deftype joint-exploder-joints (basic) + ((num-joints int32 :offset-assert 4) + (joint joint-exploder-joint :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + (:methods + (new (symbol type joint-exploder-static-params) _type_) ;; 0 + ) + ) + +(deftype joint-exploder-list (structure) + ((head int32 :offset-assert 0) + (pre-moved? symbol :offset-assert 4) ;; guessed by decompiler + (bbox-valid? symbol :offset-assert 8) ;; guessed by decompiler + (probeless? symbol :offset-assert 12) ;; guessed by decompiler + (bbox bounding-box :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype joint-exploder-list-array (inline-array-class) + ((data joint-exploder-list :dynamic :inline :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) + +(deftype joint-exploder (process-drawable) + ((die-if-below-y float :offset-assert 248) + (die-if-beyond-xz-dist-sqrd float :offset-assert 252) + (joints joint-exploder-joints :offset-assert 256) ;; guessed by decompiler + (static-params joint-exploder-static-params :offset-assert 260) ;; guessed by decompiler + (anim art-joint-anim :offset-assert 264) ;; guessed by decompiler + (scale-vector vector :inline :offset-assert 272) + (tuning joint-exploder-tuning :inline :offset-assert 288) + (lists joint-exploder-list-array :offset-assert 392) ;; guessed by decompiler + (last-colsound-time time-frame :offset-assert 400) ;; time-frame + ) + :method-count-assert 60 + :size-assert #x198 + :flag-assert #x3c01100198 + (:methods + (joint-exploder-method-50 () none) ;; 50 + (joint-exploder-method-51 () none) ;; 51 + (joint-exploder-method-52 () none) ;; 52 + (joint-exploder-method-53 () none) ;; 53 + (joint-exploder-method-54 () none) ;; 54 + (joint-exploder-method-55 () none) ;; 55 + (joint-exploder-method-56 () none) ;; 56 + (joint-exploder-method-57 () none) ;; 57 + (joint-exploder-method-58 () none) ;; 58 + (joint-exploder-method-59 () none) ;; 59 + ) + (:states + joint-exploder-shatter ;; associated process guessed by decompiler, old: (state joint-exploder) + ) + ) + +(define-extern joint-exploder-joint-callback (function draw-control cspace-array joint-control none)) +(define-extern joint-exploder-init-by-other (function skeleton-group int joint-exploder-tuning joint-exploder-static-params object :behavior joint-exploder)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; debris ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype debris-static-joint-params (structure) + ((parent-joint-index int16 :offset-assert 0) + (group string :offset-assert 4) ;; guessed by decompiler + (offset vector :offset-assert 8) + (color-tint rgbaf :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype debris-static-params (basic) + ((joints (array debris-static-joint-params) :offset-assert 4) ;; guessed by decompiler + (collide-spec collide-spec :offset-assert 8) ;; guessed by decompiler + (sound-hit uint16 :offset-assert 12) ;; sound-name + (initial-sound-hit uint16 :offset-assert 14) + (roll-sound uint16 :offset-assert 16) + (art-level symbol :offset-assert 20) ;; guessed by decompiler + (vscale float :offset-assert 24) + (volume-time float :offset-assert 28) + (play-delay int32 :offset-assert 32) + (min-speed float :offset-assert 36) + (max-speed float :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype debris (basic) + ((root transformq :inline :offset-assert 16) + (node-list cspace-array :offset-assert 64) ;; guessed by decompiler + (draw draw-control :offset-assert 68) ;; guessed by decompiler + (duration float :offset-assert 72) + (hit-xz-reaction float :offset-assert 76) + (hit-y-reaction float :offset-assert 80) + (prev-pos vector :inline :offset-assert 96) + (gravity float :offset-assert 112) + (rot-axis vector :inline :offset-assert 128) + (rot-angle float :offset-assert 144) + (transv vector :inline :offset-assert 160) + (time-fade-out time-frame :offset-assert 176) ;; time-frame + (params debris-static-params :offset-assert 184) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xbc + :flag-assert #x9000000bc + ) + +(deftype debris-box (structure) + ((start uint32 :offset-assert 0) + (num uint32 :offset-assert 4) + (bbox bounding-box :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype debris-group (process) + ((had-first-hit symbol :offset-assert 144) + (dead-debris-num int32 :offset-assert 148) + (debris-num int32 :offset-assert 152) + (next-play int32 :offset-assert 156) + (debris (array debris) :offset-assert 160) ;; guessed by decompiler + (max-probe-width float :offset-assert 164) + (state-time time-frame :offset-assert 168) ;; time-frame + (num-boxes uint32 :offset-assert 176) + (boxes debris-box 16 :inline :offset-assert 192) ;; guessed by decompiler + ) + :method-count-assert 18 + :size-assert #x3c0 + :flag-assert #x12033003c0 + (:methods + (debris-group-method-14 () none) ;; 14 ;; (idle () _type_ :state) + ) + (:state-methods + idle ;; 15, old: (do-collision (_type_ int) none) + ) + (:methods + (debris-group-method-16 () none) ;; 16 ;; (update-box! (_type_ int) none) + (debris-group-method-17 () none) ;; 17 + ) + ) + +(deftype debris-tuning (structure) + ((explosion uint64 :offset-assert 0) + (duration uint64 :offset-assert 8) ;; time-frame + (gravity float :offset-assert 16) + (rot-speed float :offset-assert 20) + (bounds-inflate float :offset-assert 24) + (max-probe-width float :offset-assert 28) + (max-probe-height float :offset-assert 32) + (max-probe-depth float :offset-assert 36) + (fountain-rand-transv-lo vector :inline :offset-assert 48) + (fountain-rand-transv-hi vector :inline :offset-assert 64) + (away-from-focal-pt vector :inline :offset 48) + (away-from-rand-transv-xz-lo float :offset 64) + (away-from-rand-transv-xz-hi float :offset 68) + (away-from-rand-transv-y-lo float :offset 72) + (away-from-rand-transv-y-hi float :offset 76) + (hit-xz-reaction float :offset-assert 80) + (hit-y-reaction float :offset-assert 84) + (scale-rand-lo float :offset-assert 88) + (scale-rand-hi float :offset-assert 92) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + +(define-extern debris-group-init-by-other (function debris-tuning debris-static-params process-drawable object :behavior debris-group)) +(define-extern debris-spawn (function process-drawable debris-tuning debris-static-params process-drawable (pointer debris-group))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-process-mgr-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-process-mgr-machine (structure) + ((state uint8 :offset-assert 0) + (delay int32 :offset-assert 4) + (acct-id int32 :offset-assert 8) + (overall-score int32 :offset-assert 12) + (clan-id int32 :offset-assert 16) + (local-player-ct int32 :offset-assert 20) + (cookie int32 :offset-assert 24) + (reported-ping int32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype net-process-mgr (process) + ((local-machine-idx int32 :offset-assert 144) + (session-master-idx int32 :offset-assert 148) + (machines UNKNOWN 8 :offset-assert 152) + (last-allocated-local-id int32 :offset-assert 408) + (last-allocated-global-id int32 :offset-assert 412) + (have-send-pending-objects basic :offset-assert 416) + (snap-time-of-day basic :offset-assert 420) + (owner-lists UNKNOWN 10 :offset-assert 424) + (active-list linked-list :inline :offset-assert 584) + (cur-proc-valid basic :offset-assert 592) + (cur-proc-id uint16 :offset-assert 596) + (cur-proc-owner-idx int8 :offset-assert 598) + (cur-proc-type basic :offset-assert 600) + (cur-proc-entity entity-links :offset-assert 604) + (entity-creation-messages-enabled basic :offset-assert 608) + ) + :method-count-assert 59 + :size-assert #x264 + :flag-assert #x3b01e00264 + (:methods + (net-process-mgr-method-9 () none) ;; 9 + (net-process-mgr-method-10 () none) ;; 10 + (net-process-mgr-method-11 () none) ;; 11 + (net-process-mgr-method-12 () none) ;; 12 + (net-process-mgr-method-13 () none) ;; 13 + (net-process-mgr-method-14 () none) ;; 14 + (net-process-mgr-method-15 () none) ;; 15 + (net-process-mgr-method-16 () none) ;; 16 + (net-process-mgr-method-17 () none) ;; 17 + (net-process-mgr-method-18 () none) ;; 18 + (net-process-mgr-method-19 () none) ;; 19 + (net-process-mgr-method-20 () none) ;; 20 + (net-process-mgr-method-21 () none) ;; 21 + (net-process-mgr-method-22 () none) ;; 22 + (net-process-mgr-method-23 () none) ;; 23 + (net-process-mgr-method-24 () none) ;; 24 + (net-process-mgr-method-25 () none) ;; 25 + (net-process-mgr-method-26 () none) ;; 26 + (net-process-mgr-method-27 () none) ;; 27 + (net-process-mgr-method-28 () none) ;; 28 + (net-process-mgr-method-29 () none) ;; 29 + (net-process-mgr-method-30 () none) ;; 30 + (net-process-mgr-method-31 () none) ;; 31 + (net-process-mgr-method-32 () none) ;; 32 + (net-process-mgr-method-33 () none) ;; 33 + (net-process-mgr-method-34 () none) ;; 34 + (net-process-mgr-method-35 () none) ;; 35 + (net-process-mgr-method-36 () none) ;; 36 + (net-process-mgr-method-37 () none) ;; 37 + (net-process-mgr-method-38 () none) ;; 38 + (net-process-mgr-method-39 () none) ;; 39 + (net-process-mgr-method-40 () none) ;; 40 + (net-process-mgr-method-41 () none) ;; 41 + (net-process-mgr-method-42 () none) ;; 42 + (net-process-mgr-method-43 () none) ;; 43 + (net-process-mgr-method-44 () none) ;; 44 + (net-process-mgr-method-45 () none) ;; 45 + (net-process-mgr-method-46 () none) ;; 46 + (net-process-mgr-method-47 () none) ;; 47 + (net-process-mgr-method-48 () none) ;; 48 + (net-process-mgr-method-49 () none) ;; 49 + (net-process-mgr-method-50 () none) ;; 50 + (net-process-mgr-method-51 () none) ;; 51 + (net-process-mgr-method-52 () none) ;; 52 + (net-process-mgr-method-53 () none) ;; 53 + (net-process-mgr-method-54 () none) ;; 54 + (net-process-mgr-method-55 () none) ;; 55 + (net-process-mgr-method-56 () none) ;; 56 + (net-process-mgr-method-57 () none) ;; 57 + (net-process-mgr-method-58 () none) ;; 58 + ) + ) +|# + +;; (define-extern *net-process-mgr* object) +;; (define-extern get-event-level function) +;; (define-extern get-shared-level function) +;; (define-extern nos function) +;; (define-extern write-process-as-handle function) +;; (define-extern write-handle function) +;; (define-extern read-handle function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; statistics ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype stat-info (structure) + ((text-id uint32 :offset-assert 0) + (taskname basic :offset-assert 4) + (name basic :offset-assert 8) + (offset int32 :offset-assert 12) + (tp uint64 :offset-assert 16) + (scale float :offset-assert 24) + (format-scale float :offset-assert 28) + (flags uint64 :offset-assert 32) + (init int32 :offset-assert 40) + (min-div int32 :offset-assert 44) + ) + :method-count-assert 15 + :size-assert #x30 + :flag-assert #xf00000030 + (:methods + (stat-info-method-9 () none) ;; 9 + (stat-info-method-10 () none) ;; 10 + (stat-info-method-11 () none) ;; 11 + (stat-info-method-12 () none) ;; 12 + (stat-info-method-13 () none) ;; 13 + (stat-info-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype net-player-ladder-stats (structure) + ((version uint32 :offset-assert 0) + (overall-score uint32 :offset-assert 4) + (events-started uint32 :offset-assert 8) + (events-ended-or-quit uint32 :offset-assert 12) + (events-ended-or-quit-pct uint32 :offset-assert 16) + (events-played uint32 :offset-assert 20) + (events-played-pct uint32 :offset-assert 24) + (events-won uint32 :offset-assert 28) + (events-won-pct uint32 :offset-assert 32) + (time-spent-playing uint32 :offset-assert 36) + (track-events-played uint32 :offset-assert 40) + (track-events-won uint32 :offset-assert 44) + (track-events-won-pct uint32 :offset-assert 48) + (track-events-top-three uint32 :offset-assert 52) + (track-events-top-three-pct uint32 :offset-assert 56) + (arena-events-played uint32 :offset-assert 60) + (arena-events-won uint32 :offset-assert 64) + (arena-events-won-pct uint32 :offset-assert 68) + (arena-events-top-three uint32 :offset-assert 72) + (arena-events-top-three-pct uint32 :offset-assert 76) + (human-kills uint32 :offset-assert 80) + (human-kills-per-minute uint32 :offset-assert 84) + (cpu-kills uint32 :offset-assert 88) + (cpu-kills-per-minute uint32 :offset-assert 92) + (deaths uint32 :offset-assert 96) + (deaths-per-minute uint32 :offset-assert 100) + (top-speed uint32 :offset-assert 104) + (biggest-air uint32 :offset-assert 108) + (best-deathmatch-kills uint32 :offset-assert 112) + (best-hunt-score uint32 :offset-assert 116) + (best-artifact-score uint32 :offset-assert 120) + (best-lap-snow uint32 :offset-assert 124) + (best-lap-jungle uint32 :offset-assert 128) + (best-lap-kras uint32 :offset-assert 132) + (best-lap-canyon uint32 :offset-assert 136) + (best-lap-canspar uint32 :offset-assert 140) + (best-lap-haven uint32 :offset-assert 144) + (best-lap-havjung uint32 :offset-assert 148) + (best-lap-havsew uint32 :offset-assert 152) + (best-lap-havtour uint32 :offset-assert 156) + (best-lap-sewer uint32 :offset-assert 160) + (best-lap-spargus uint32 :offset-assert 164) + (best-lap-docks uint32 :offset-assert 168) + (best-lap-dockkra uint32 :offset-assert 172) + (best-lap-dromdoc uint32 :offset-assert 176) + (best-lap-drome uint32 :offset-assert 180) + (best-lap-ice uint32 :offset-assert 184) + (best-lap-temple uint32 :offset-assert 188) + (best-lap-spartem uint32 :offset-assert 192) + (best-lap-iceberg uint32 :offset-assert 196) + (best-lap-kratour uint32 :offset-assert 200) + (best-lap-spatour uint32 :offset-assert 204) + (best-lap-icepass uint32 :offset-assert 208) + (best-lap-peak uint32 :offset-assert 212) + (best-lap-icetour uint32 :offset-assert 216) + (best-timetrial-snow uint32 :offset-assert 220) + (best-timetrial-jungle uint32 :offset-assert 224) + (best-timetrial-kras uint32 :offset-assert 228) + (best-timetrial-canyon uint32 :offset-assert 232) + (best-timetrial-canspar uint32 :offset-assert 236) + (best-timetrial-haven uint32 :offset-assert 240) + (best-timetrial-havjung uint32 :offset-assert 244) + (best-timetrial-havsew uint32 :offset-assert 248) + (best-timetrial-havtour uint32 :offset-assert 252) + (best-timetrial-sewer uint32 :offset-assert 256) + (best-timetrial-spargus uint32 :offset-assert 260) + (best-timetrial-docks uint32 :offset-assert 264) + (best-timetrial-dockkra uint32 :offset-assert 268) + (best-timetrial-dromdoc uint32 :offset-assert 272) + (best-timetrial-drome uint32 :offset-assert 276) + (best-timetrial-ice uint32 :offset-assert 280) + (best-timetrial-temple uint32 :offset-assert 284) + (best-timetrial-spartem uint32 :offset-assert 288) + (best-timetrial-iceberg uint32 :offset-assert 292) + (best-timetrial-kratour uint32 :offset-assert 296) + (best-timetrial-spatour uint32 :offset-assert 300) + (best-timetrial-icepass uint32 :offset-assert 304) + (best-timetrial-peak uint32 :offset-assert 308) + (best-timetrial-icetour uint32 :offset-assert 312) + ) + :method-count-assert 9 + :size-assert #x13c + :flag-assert #x90000013c + ) +|# + +#| +(deftype net-player-ladder-stats-info (structure) + ((version stat-info :offset-assert 0) + (overall-score stat-info :offset-assert 4) + (events-started stat-info :offset-assert 8) + (events-ended-or-quit stat-info :offset-assert 12) + (events-ended-or-quit-pct stat-info :offset-assert 16) + (events-played stat-info :offset-assert 20) + (events-played-pct stat-info :offset-assert 24) + (events-won stat-info :offset-assert 28) + (events-won-pct stat-info :offset-assert 32) + (time-spent-playing stat-info :offset-assert 36) + (track-events-played stat-info :offset-assert 40) + (track-events-won stat-info :offset-assert 44) + (track-events-won-pct stat-info :offset-assert 48) + (track-events-top-three stat-info :offset-assert 52) + (track-events-top-three-pct stat-info :offset-assert 56) + (arena-events-played stat-info :offset-assert 60) + (arena-events-won stat-info :offset-assert 64) + (arena-events-won-pct stat-info :offset-assert 68) + (arena-events-top-three stat-info :offset-assert 72) + (arena-events-top-three-pct stat-info :offset-assert 76) + (human-kills stat-info :offset-assert 80) + (human-kills-per-minute stat-info :offset-assert 84) + (cpu-kills stat-info :offset-assert 88) + (cpu-kills-per-minute stat-info :offset-assert 92) + (deaths stat-info :offset-assert 96) + (deaths-per-minute stat-info :offset-assert 100) + (top-speed stat-info :offset-assert 104) + (biggest-air stat-info :offset-assert 108) + (best-deathmatch-kills stat-info :offset-assert 112) + (best-hunt-score stat-info :offset-assert 116) + (best-artifact-score stat-info :offset-assert 120) + (best-lap-snow stat-info :offset-assert 124) + (best-lap-jungle stat-info :offset-assert 128) + (best-lap-kras stat-info :offset-assert 132) + (best-lap-canyon stat-info :offset-assert 136) + (best-lap-canspar stat-info :offset-assert 140) + (best-lap-haven stat-info :offset-assert 144) + (best-lap-havjung stat-info :offset-assert 148) + (best-lap-havsew stat-info :offset-assert 152) + (best-lap-havtour stat-info :offset-assert 156) + (best-lap-sewer stat-info :offset-assert 160) + (best-lap-spargus stat-info :offset-assert 164) + (best-lap-docks stat-info :offset-assert 168) + (best-lap-dockkra stat-info :offset-assert 172) + (best-lap-dromdoc stat-info :offset-assert 176) + (best-lap-drome stat-info :offset-assert 180) + (best-lap-ice stat-info :offset-assert 184) + (best-lap-temple stat-info :offset-assert 188) + (best-lap-spartem stat-info :offset-assert 192) + (best-lap-iceberg stat-info :offset-assert 196) + (best-lap-kratour stat-info :offset-assert 200) + (best-lap-spatour stat-info :offset-assert 204) + (best-lap-icepass stat-info :offset-assert 208) + (best-lap-peak stat-info :offset-assert 212) + (best-lap-icetour stat-info :offset-assert 216) + (best-timetrial-snow stat-info :offset-assert 220) + (best-timetrial-jungle stat-info :offset-assert 224) + (best-timetrial-kras stat-info :offset-assert 228) + (best-timetrial-canyon stat-info :offset-assert 232) + (best-timetrial-canspar stat-info :offset-assert 236) + (best-timetrial-haven stat-info :offset-assert 240) + (best-timetrial-havjung stat-info :offset-assert 244) + (best-timetrial-havsew stat-info :offset-assert 248) + (best-timetrial-havtour stat-info :offset-assert 252) + (best-timetrial-sewer stat-info :offset-assert 256) + (best-timetrial-spargus stat-info :offset-assert 260) + (best-timetrial-docks stat-info :offset-assert 264) + (best-timetrial-dockkra stat-info :offset-assert 268) + (best-timetrial-dromdoc stat-info :offset-assert 272) + (best-timetrial-drome stat-info :offset-assert 276) + (best-timetrial-ice stat-info :offset-assert 280) + (best-timetrial-temple stat-info :offset-assert 284) + (best-timetrial-spartem stat-info :offset-assert 288) + (best-timetrial-iceberg stat-info :offset-assert 292) + (best-timetrial-kratour stat-info :offset-assert 296) + (best-timetrial-spatour stat-info :offset-assert 300) + (best-timetrial-icepass stat-info :offset-assert 304) + (best-timetrial-peak stat-info :offset-assert 308) + (best-timetrial-icetour stat-info :offset-assert 312) + ) + :method-count-assert 11 + :size-assert #x13c + :flag-assert #xb0000013c + (:methods + (net-player-ladder-stats-info-method-9 () none) ;; 9 + (net-player-ladder-stats-info-method-10 () none) ;; 10 + ) + ) +|# + +#| +(deftype net-clan-ladder-stats (structure) + ((version uint32 :offset-assert 0) + (overall-score uint32 :offset-assert 4) + (events-played uint32 :offset-assert 8) + (events-won uint32 :offset-assert 12) + (events-won-pct uint32 :offset-assert 16) + (events-lost uint32 :offset-assert 20) + (events-lost-pct uint32 :offset-assert 24) + (events-drawn uint32 :offset-assert 28) + (events-drawn-pct uint32 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) +|# + +#| +(deftype net-clan-ladder-stats-info (structure) + ((version stat-info :offset-assert 0) + (overall-score stat-info :offset-assert 4) + (events-played stat-info :offset-assert 8) + (events-won stat-info :offset-assert 12) + (events-won-pct stat-info :offset-assert 16) + (events-lost stat-info :offset-assert 20) + (events-lost-pct stat-info :offset-assert 24) + (events-drawn stat-info :offset-assert 28) + (events-drawn-pct stat-info :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x24 + :flag-assert #xb00000024 + (:methods + (net-clan-ladder-stats-info-method-9 () none) ;; 9 + (net-clan-ladder-stats-info-method-10 () none) ;; 10 + ) + ) +|# + +;; (define-extern *net-player-ladder-stats-info-array* array) +;; (define-extern *net-player-ladder-stats-info* object) +;; (define-extern *net-clan-ladder-stats-info-array* array) +;; (define-extern *net-clan-ladder-stats-info* object) +;; (define-extern get-skill-level function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-cache-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-cached-info (basic) + ((medius-id int32 :offset-assert 4) + (accessed-time int32 :offset-assert 8) + (fetched-time int32 :offset-assert 12) + (status uint64 :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x18 + :flag-assert #xc00000018 + (:methods + (medius-cached-info-method-9 () none) ;; 9 + (medius-cached-info-method-10 () none) ;; 10 + (medius-cached-info-method-11 () none) ;; 11 + ) + ) +|# + +#| +(deftype medius-cache (basic) + ((objects basic :offset-assert 4) + ) + :method-count-assert 15 + :size-assert #x8 + :flag-assert #xf00000008 + (:methods + (medius-cache-method-9 () none) ;; 9 + (medius-cache-method-10 () none) ;; 10 + (medius-cache-method-11 () none) ;; 11 + (medius-cache-method-12 () none) ;; 12 + (medius-cache-method-13 () none) ;; 13 + (medius-cache-method-14 () none) ;; 14 + ) + ) +|# + +#| +(deftype medius-cache-index (structure) + ((id int32 :offset-assert 0) + ) + :method-count-assert 11 + :size-assert #x4 + :flag-assert #xb00000004 + (:methods + (medius-cache-index-method-9 () none) ;; 9 + (medius-cache-index-method-10 () none) ;; 10 + ) + ) +|# + +#| +(deftype medius-cache-index-array (structure) + ((ct int32 :offset-assert 0) + (max-ct int32 :offset-assert 4) + (data UNKNOWN :dynamic :offset-assert 8) + ) + :method-count-assert 13 + :size-assert #x8 + :flag-assert #xd00000008 + (:methods + (medius-cache-index-array-method-9 () none) ;; 9 + (medius-cache-index-array-method-10 () none) ;; 10 + (medius-cache-index-array-method-11 () none) ;; 11 + (medius-cache-index-array-method-12 () none) ;; 12 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-players-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-player-stats (structure) + ((stats-version int8 :offset-assert 0) + (current-clan int32 :offset-assert 4) + (last-channel-id int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype medius-cached-info-player (medius-cached-info) + ((name UNKNOWN 32 :offset-assert 24) + (format-name UNKNOWN 160 :offset-assert 56) + (online-state medius-player-online-state :inline :offset-assert 216) + (stats net-player-stats :inline :offset-assert 356) + (ladder-stats net-player-ladder-stats :inline :offset-assert 368) + ) + :method-count-assert 12 + :size-assert #x2ac + :flag-assert #xc000002ac + ) +|# + +#| +(deftype medius-player (medius-cache-index) + () + :method-count-assert 14 + :size-assert #x4 + :flag-assert #xe00000004 + (:methods + (medius-player-method-11 () none) ;; 11 + (medius-player-method-12 () none) ;; 12 + (medius-player-method-13 () none) ;; 13 + ) + ) +|# + +#| +(deftype medius-player-index-array (medius-cache-index-array) + () + :method-count-assert 13 + :size-assert #x8 + :flag-assert #xd00000008 + ) +|# + +;; (define-extern *medius-player-cache* medius-cache) +;; (define-extern *medius-buddies* object) +;; (define-extern *medius-buddies-online* object) +;; (define-extern *medius-ignores* object) +;; (define-extern *medius-room-players* object) +;; (define-extern *medius-recent-players* object) +;; (define-extern *medius-in-game-players* object) +;; (define-extern *medius-local-game-players* object) +;; (define-extern *medius-outstanding-clan-invites* object) +;; (define-extern *medius-mute-list* object) +;; (define-extern *medius-clan-members-online* object) +;; (define-extern *medius-my-player* medius-cached-info-player) +;; (define-extern *medius-recent-opponents* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-clans-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-cached-info-clan (medius-cached-info) + ((name UNKNOWN 32 :offset-assert 24) + (leader-acct-id int32 :offset-assert 56) + (leader-name UNKNOWN 32 :offset-assert 60) + (stats UNKNOWN 256 :offset-assert 92) + (members medius-player-index-array :offset-assert 348) + (ladder-stats net-clan-ladder-stats :inline :offset-assert 352) + ) + :method-count-assert 13 + :size-assert #x184 + :flag-assert #xd00000184 + (:methods + (medius-cached-info-clan-method-12 () none) ;; 12 + ) + ) +|# + +#| +(deftype medius-clan (medius-cache-index) + () + :method-count-assert 12 + :size-assert #x4 + :flag-assert #xc00000004 + (:methods + (medius-clan-method-11 () none) ;; 11 + ) + ) +|# + +#| +(deftype medius-clan-index-array (medius-cache-index-array) + () + :method-count-assert 13 + :size-assert #x8 + :flag-assert #xd00000008 + ) +|# + +#| +(deftype medius-incoming-clan-invite (structure) + ((clan-id int32 :offset-assert 0) + (invite-id int32 :offset-assert 4) + (clan-name UNKNOWN 32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype medius-clan-challenge (structure) + ((send-clan-id int32 :offset-assert 0) + (recv-clan-id int32 :offset-assert 4) + (challenge-id int32 :offset-assert 8) + (status int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +;; (define-extern *clan-pending-deltas-valid* object) +;; (define-extern *clan-pending-deltas* object) +;; (define-extern *clan-msg-text* object) +;; (define-extern *clan-msg-id* object) +;; (define-extern *medius-clan-cache* medius-cache) +;; (define-extern *medius-recent-clans* object) +;; (define-extern *medius-clan-members-31* object) +;; (define-extern *medius-clan-members-30* object) +;; (define-extern *medius-clan-members-29* object) +;; (define-extern *medius-clan-members-28* object) +;; (define-extern *medius-clan-members-27* object) +;; (define-extern *medius-clan-members-26* object) +;; (define-extern *medius-clan-members-25* object) +;; (define-extern *medius-clan-members-24* object) +;; (define-extern *medius-clan-members-23* object) +;; (define-extern *medius-clan-members-22* object) +;; (define-extern *medius-clan-members-21* object) +;; (define-extern *medius-clan-members-20* object) +;; (define-extern *medius-clan-members-19* object) +;; (define-extern *medius-clan-members-18* object) +;; (define-extern *medius-clan-members-17* object) +;; (define-extern *medius-clan-members-16* object) +;; (define-extern *medius-clan-members-15* object) +;; (define-extern *medius-clan-members-14* object) +;; (define-extern *medius-clan-members-13* object) +;; (define-extern *medius-clan-members-12* object) +;; (define-extern *medius-clan-members-11* object) +;; (define-extern *medius-clan-members-10* object) +;; (define-extern *medius-clan-members-9* object) +;; (define-extern *medius-clan-members-8* object) +;; (define-extern *medius-clan-members-7* object) +;; (define-extern *medius-clan-members-6* object) +;; (define-extern *medius-clan-members-5* object) +;; (define-extern *medius-clan-members-4* object) +;; (define-extern *medius-clan-members-3* object) +;; (define-extern *medius-clan-members-2* object) +;; (define-extern *medius-clan-members-1* object) +;; (define-extern *medius-clan-members-0* object) +;; (define-extern *medius-incoming-clan-invites* array) +;; (define-extern *medius-clan-challenges* array) +;; (define-extern *medius-visible-clan-challenges* array) +;; (define-extern *medius-my-clan* medius-cached-info-clan) +;; (define-extern *medius-my-clan-members* object) +;; (define-extern *medius-enemy-clan* medius-cached-info-clan) +;; (define-extern *medius-enemy-clan-members* object) +;; (define-extern *medius-enemy-clan-id* object) +;; (define-extern *challenge-clans* array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-games-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-cached-info-game-status (medius-cached-info) + ((game-status int32 :offset-assert 24) + ) + :method-count-assert 12 + :size-assert #x1c + :flag-assert #xc0000001c + ) +|# + +#| +(deftype medius-game-array (structure) + ((ct int32 :offset-assert 0) + (data UNKNOWN 64 :offset-assert 4) + ) + :method-count-assert 11 + :size-assert #x5404 + :flag-assert #xb00005404 + (:methods + (medius-game-array-method-9 () none) ;; 9 + (medius-game-array-method-10 () none) ;; 10 + ) + ) +|# + +#| +(deftype medius-game-filter-settings (structure) + ((burn-version-and-flags int32 :offset-assert 0) + (event int8 :offset-assert 4) + (location int8 :offset-assert 5) + (world int32 :offset-assert 8) + (max-players int8 :offset-assert 12) + (class-type int8 :offset-assert 13) + ) + :method-count-assert 9 + :size-assert #xe + :flag-assert #x90000000e + ) +|# + +;; (define-extern *medius-game-status-cache* medius-cache) +;; (define-extern *medius-games* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-predict-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype net-predictor-simple-state (structure) + ((time int32 :offset-assert 0) + (pos vector :inline :offset-assert 16) + (vel vector :inline :offset-assert 32) + (rot quaternion :inline :offset-assert 48) + (angvel vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +(deftype net-predictor-simple (structure) + ((last-net net-predictor-simple-state :inline :offset-assert 0) + (extrapolated net-predictor-simple-state :inline :offset-assert 80) + (active net-predictor-simple-state :inline :offset-assert 160) + (vel-scale vector :inline :offset-assert 240) + (angvel-scale vector :inline :offset-assert 256) + (min-delay int32 :offset-assert 272) + (max-delay int32 :offset-assert 276) + (pos-err-thresh float :offset-assert 280) + (rot-err-thresh float :offset-assert 284) + (pos-track-factor float :offset-assert 288) + (vel-track-factor float :offset-assert 292) + (max-extrapolation int32 :offset-assert 296) + (error-snap float :offset-assert 300) + (flags uint8 :offset-assert 304) + ) + :method-count-assert 18 + :size-assert #x131 + :flag-assert #x1200000131 + (:methods + (net-predictor-simple-method-9 () none) ;; 9 + (net-predictor-simple-method-10 () none) ;; 10 + (net-predictor-simple-method-11 () none) ;; 11 + (net-predictor-simple-method-12 () none) ;; 12 + (net-predictor-simple-method-13 () none) ;; 13 + (net-predictor-simple-method-14 () none) ;; 14 + (net-predictor-simple-method-15 () none) ;; 15 + (net-predictor-simple-method-16 () none) ;; 16 + (net-predictor-simple-method-17 () none) ;; 17 + ) + ) + +(deftype net-predictor-sphcol (net-predictor-simple) + () + :method-count-assert 18 + :size-assert #x131 + :flag-assert #x1200000131 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body-surface-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype rigid-body-surface (structure) + ((flags rigid-body-surface-flag :offset-assert 0) + (surface-type uint8 :offset-assert 1) + (friction float :offset-assert 4) + (bounce float :offset-assert 8) + (drag float :offset-assert 12) + (depth float :offset-assert 16) + (damage float :offset-assert 20) + (scrape-sound uint16 :offset-assert 24) + (glance-sound uint16 :offset-assert 26) + (impact-sound uint16 :offset-assert 28) + (tire-roll-mix UNKNOWN 6 :offset-assert 32) + (tire-roll-hum float :offset-assert 32) + (tire-roll-dirt float :offset-assert 36) + (tire-roll-sand float :offset-assert 40) + (tire-roll-snow float :offset-assert 44) + (tire-roll-grass float :offset-assert 48) + (tire-roll-knobby float :offset-assert 52) + (tire-slide-mix UNKNOWN 2 :offset-assert 56) + (tire-slide-road float :offset-assert 56) + (tire-slide-dirt float :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ;; field rigid-body-surface-flag is likely a value type. + ) +|# + +;; (define-extern *material-to-rb-material-table* object) +;; (define-extern rigid-body-surface-type-from-material function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype vehicle-handling-info (structure) + ((brake-factor float :offset-assert 0) + (turbo-boost-factor float :offset-assert 4) + (turbo-boost-half-gain-speed float :offset-assert 8) + (tire-steering-angle float :offset-assert 12) + (tire-steering-speed-factor float :offset-assert 16) + (tire-steering-speed-bias float :offset-assert 20) + (ackermann-factor float :offset-assert 24) + (tire-static-friction float :offset-assert 28) + (tire-static-friction-speed meters :offset-assert 32) + (tire-dynamic-friction float :offset-assert 36) + (tire-dynamic-friction-speed meters :offset-assert 40) + (tire-arcade-factor float :offset-assert 44) + (drag-force-factor float :offset-assert 48) + (rolling-resistance float :offset-assert 52) + (downforce-factor float :offset-assert 56) + (roll-control-factor float :offset-assert 60) + (jump-thrust-factor float :offset-assert 64) + (buoyancy-factor float :offset-assert 68) + (water-drag-factor float :offset-assert 72) + (air-roll-torque float :offset-assert 76) + (air-pitch-torque float :offset-assert 80) + (air-angular-damping float :offset-assert 84) + (hop-turn-torque float :offset-assert 88) + (ground-torque-scale float :offset-assert 92) + (cos-ground-effect-angle float :offset-assert 96) + (ai-steering-factor float :offset-assert 100) + (ai-throttle-factor float :offset-assert 104) + ) + :pack-me + :method-count-assert 9 + :size-assert #x6c + :flag-assert #x90000006c + ) + +(deftype vehicle-engine-info (structure) + ((max-torque float :offset-assert 0) + (inertia float :offset-assert 4) + (drag float :offset-assert 8) + (idle-rpm float :offset-assert 12) + (clutch-min-rpm float :offset-assert 16) + (clutch-max-rpm float :offset-assert 20) + (min-rpm float :offset-assert 24) + (max-rpm float :offset-assert 28) + (peak-torque-rpm float :offset-assert 32) + (powerband-width-rpm float :offset-assert 36) + (torque-data uint8 16 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) + +(deftype vehicle-transmission-info (structure) + ((inertia float :offset-assert 0) + (upshift-rpm float :offset-assert 4) + (downshift-rpm float :offset-assert 8) + (final-drive-ratio float :offset-assert 12) + (gear-ratio-array float 8 :offset-assert 16) ;; guessed by decompiler + (gear-count int8 :offset-assert 48) + ) + :pack-me + :method-count-assert 9 + :size-assert #x31 + :flag-assert #x900000031 + ) + +;; +++vehicle-h:vehicle-wheel-flag +(defenum vehicle-wheel-flag + :type uint64 + :bitfield #t + (vwf0 0) + (vwf1 1) + (vwf2 2) + (vwf3 3) + (vwf4 4) + (vwf5 5) + ) +;; ---vehicle-h:vehicle-wheel-flag + +(declare-type vehicle-wheel-state structure) +(deftype vehicle-wheel-info (structure) + ((local-pos vector :inline :offset-assert 0) + (flags vehicle-wheel-flag :offset-assert 16) ;; vehicle-wheel-flag + (callback (function rigid-body-object vehicle-wheel-state vehicle-wheel-info none) :offset-assert 24) ;; guessed by decompiler + (inertia float :offset-assert 28) + (radius float :offset-assert 32) + (susp-arm-length float :offset-assert 36) + (steer-arm-length float :offset-assert 40) + (scale float :offset-assert 44) + (travel float :offset-assert 48) + (probe-x-offset float :offset-assert 52) + (probe-y-offset float :offset-assert 56) + (suspension-spring float :offset-assert 60) + (suspension-damping float :offset-assert 64) + (forward-grip float :offset-assert 68) + (side-grip float :offset-assert 72) + (max-brake-torque float :offset-assert 76) + (camber float :offset-assert 80) + (x-scale float :offset-assert 84) + (probe-radius float :offset-assert 88) + (width float :offset-assert 92) + (settle-pos float :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) + +(deftype vehicle-physics-model-info (structure) + ((front-wheel vehicle-wheel-info :inline :offset-assert 0) + (rear-wheel vehicle-wheel-info :inline :offset-assert 112) + ) + :method-count-assert 9 + :size-assert #xd4 + :flag-assert #x9000000d4 + ) + +(deftype vehicle-camera-info (structure) + ((string-min-height meters :offset-assert 0) + (string-max-height meters :offset-assert 4) + (string-min-length meters :offset-assert 8) + (string-max-length meters :offset-assert 12) + (min-fov float :offset-assert 16) + (max-fov float :offset-assert 20) + (head-offset float :offset-assert 24) + (foot-offset float :offset-assert 28) + (look-pos-array vector 4 :inline :offset-assert 32) ;; guessed by decompiler + (look-front vector :inline :offset 32) + (look-left vector :inline :offset 48) + (look-right vector :inline :offset 64) + (look-rear vector :inline :offset 80) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + +(deftype vehicle-sound-loop-info (structure) + ((sound uint16 :offset-assert 0) + (speed float :offset-assert 4) + (min-speed float :offset-assert 8) + (max-speed float :offset-assert 12) + (pitch-offset float :offset-assert 16) + (pitch-scale float :offset-assert 20) + (min-pitch float :offset-assert 24) + (max-pitch float :offset-assert 28) + ) + :pack-me + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype vehicle-sound-engine-loop-info (structure) + ((sound-array uint16 3 :offset-assert 0) + (base-sound uint16 :offset 0) + (load-sound uint16 :offset 2) + (ai-sound uint16 :offset 4) + (original-rpm float :offset-assert 8) + (min-rpm float :offset-assert 12) + (max-rpm float :offset-assert 16) + (pitch-scale float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype vehicle-sound-info (structure) + ((water-sound uint16 :offset-assert 0) ;; sound-name + (jump-sound uint16 :offset-assert 2) ;; sound-name + (turbo-sound uint16 :offset-assert 4) ;; sound-name + (susp-creak-sound uint16 :offset-assert 6) ;; sound-name + (susp-bottom-out-sound uint16 :offset-assert 8) ;; sound-name + (susp-speed-threshold float :offset-assert 12) + (rpm-scale float :offset-assert 16) + (engine-loop-count int8 :offset-assert 20) + (engine-loop-array uint32 :offset-assert 24) + (tire-roll-sounds vehicle-sound-loop-info 6 :inline :offset-assert 28) ;; guessed by decompiler + (tire-roll-hum-sound vehicle-sound-loop-info :inline :offset 28) + (tire-roll-dirt-sound vehicle-sound-loop-info :inline :offset 60) + (tire-roll-sand-sound vehicle-sound-loop-info :inline :offset 92) + (tire-roll-snow-sound vehicle-sound-loop-info :inline :offset 124) + (tire-roll-grass-sound vehicle-sound-loop-info :inline :offset 156) + (tire-roll-knobby-sound vehicle-sound-loop-info :inline :offset 188) + (tire-slide-sounds vehicle-sound-loop-info 2 :inline :offset-assert 220) ;; guessed by decompiler + (tire-slide-road-sound vehicle-sound-loop-info :inline :offset 220) + (tire-slide-dirt-sound vehicle-sound-loop-info :inline :offset 252) + ) + :method-count-assert 9 + :size-assert #x11c + :flag-assert #x90000011c + ) + +(deftype vehicle-particle-info (structure) + ((headlight-count int8 :offset-assert 0) + (taillight-count int8 :offset-assert 1) + (thruster-count int8 :offset-assert 2) + (thruster-flame-width meters :offset-assert 4) + (thruster-flame-length meters :offset-assert 8) + (thruster-local-pos vector :offset-assert 12) ;; guessed by decompiler + (exhaust-local-pos vector 2 :inline :offset-assert 16) ;; guessed by decompiler + (exhaust-local-dir vector 2 :inline :offset-assert 48) ;; guessed by decompiler + (smoke-local-pos vector 2 :inline :offset-assert 80) ;; guessed by decompiler + (smoke-local-vel vector 2 :inline :offset-assert 112) ;; guessed by decompiler + (headlight-local-pos vector 3 :inline :offset-assert 144) ;; guessed by decompiler + (taillight-local-pos vector 2 :inline :offset-assert 192) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xe0 + :flag-assert #x9000000e0 + ) + +(deftype vehicle-section-info (structure) + ((rbody rigid-body-object-constants :offset-assert 0) + (hinge-axis vector :inline :offset-assert 16) + (color rgbaf :inline :offset-assert 32) + (joint-local matrix :inline :offset-assert 48) + (min-angle float :offset-assert 112) + (max-angle float :offset-assert 116) + (inv-hit-points float :offset-assert 120) + (hit-points float :offset-assert 124) + (rattle-sound uint16 :offset-assert 128) + (impact-sound uint16 :offset-assert 130) + ) + :pack-me + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) + +(deftype vehicle-damage-info (structure) + ((inv-toughness-factor float :offset-assert 0) + (hit-points float :offset-assert 4) + (inv-hit-points float :offset-assert 8) + (hit-threshold float :offset-assert 12) + (impact-damage-factor float :offset-assert 16) + (section-mask uint32 :offset-assert 20) + (section-array vehicle-section-info 12 :inline :offset-assert 32) ;; guessed by decompiler + (section-lf-fender vehicle-section-info :inline :offset 32) + (section-rf-fender vehicle-section-info :inline :offset 176) + (section-lr-fender vehicle-section-info :inline :offset 320) + (section-rr-fender vehicle-section-info :inline :offset 464) + (section-l-door vehicle-section-info :inline :offset 608) + (section-r-door vehicle-section-info :inline :offset 752) + (section-hood vehicle-section-info :inline :offset 1184) + (section-trunk vehicle-section-info :inline :offset 1328) + (section-f-bumper vehicle-section-info :inline :offset 896) + (section-r-bumper vehicle-section-info :inline :offset 1040) + (section-roof vehicle-section-info :inline :offset 1472) + (section-cockpit vehicle-section-info :inline :offset 1616) + ) + :method-count-assert 9 + :size-assert #x6e0 + :flag-assert #x9000006e0 + ) + +(deftype vehicle-setup-info (structure) + ((settle-height float :offset-assert 0) + (settle-rot-x float :offset-assert 4) + (idle-settle-height float :offset-assert 8) + (idle-settle-rot-x float :offset-assert 12) + (shadow-bot-clip float :offset-assert 16) + (shadow-locus-dist float :offset-assert 20) + (look-select uint8 :offset-assert 24) + (rp-node-count int8 :offset-assert 25) + (color-option-count int8 :offset-assert 26) + (color-option-select int8 :offset-assert 27) + (pad uint32) ;; added + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype vehicle-pilot-info (structure) + ((player-turn-anim-bias float :offset-assert 0) + (player-turn-anim-min float :offset-assert 4) + (player-turn-anim-max float :offset-assert 8) + (pilot-x-accel-factor float :offset-assert 12) + (pilot-y-accel-factor float :offset-assert 16) + (pilot-z-accel-factor float :offset-assert 20) + ) + :pack-me + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; +++vehicle-h:vehicle-seat-flag +(defenum vehicle-seat-flag + :type uint8 + :bitfield #t + (vsf0 0) + (vsf1 1) + (vsf2 2) + ) +;; ---vehicle-h:vehicle-seat-flag + +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0 :score -1) ;; guessed by decompiler + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags vehicle-seat-flag :offset 14) ;; vehicle-seat-flag + (mask uint16 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype vehicle-daxter-info (structure) + ((data uint32 3 :offset-assert 0 :score -1) + (counts int8 3 :offset-assert 12 :score -1) + (chassis-seats uint32 :offset 0) + (trunk-seats uint32 :offset 4) + (roof-seats uint32 :offset 8) + (chassis-seat-count int8 :offset 12) + (trunk-seat-count int8 :offset 13) + (roof-seat-count int8 :offset 14) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) + +(deftype vehicle-rider-info (structure) + ((seat-count int8 :offset-assert 0) + (attach-point-count int8 :offset-assert 1) + (seat-array vehicle-seat-info 2 :inline :offset-assert 16) ;; guessed by decompiler + (rider-hand-offset vector 2 :inline :offset-assert 48) ;; guessed by decompiler + (attach-point-array uint32 :offset-assert 80) + (attach-node-array uint32 :offset-assert 84) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype vehicle-hardpoint-info (structure) + ((local-pos-array uint32 :offset-assert 0) + (flag-attach vector :inline :offset-assert 16) + (antenna-attach vector :inline :offset-assert 32) + (nodes uint8 7 :offset-assert 48 :score -1) + (left-gun int8 :offset 48) + (right-gun int8 :offset 49) + (mine-launcher int8 :offset 50) + (trunk int8 :offset 51) + (super-turbo-attach uint8 3 :offset 52) + (shield-anim int16 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3a + :flag-assert #x90000003a + ) + +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel skeleton-group :offset-assert 32) ;; guessed by decompiler + (skel-name string :offset-assert 36) ;; guessed by decompiler + (anim int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +;; bunch of fields missing from inspect +(deftype vehicle-particle-common-info (structure) + ((headlight-glow-template sprite-glow-data :offset 36) + (taillight-glow-template sprite-glow-data :offset-assert 40) + (thruster-glow-template sprite-glow-data :offset-assert 44) + (thrust-tex-id uint32 :offset 72) + (dark-thrust-tex-id uint32 :offset-assert 76) + (rgb rgbaf :inline :offset 128) + (lights vu-lights :offset-assert 144) + (pad uint16 4) ;; added + ) + :method-count-assert 10 + :size-assert #x9c + :flag-assert #xa0000009c + (:methods + (vehicle-particle-common-info-method-9 () none) ;; 9 ;; (init! (_type_) none) + ) + ) + +(deftype vehicle-shield-info (structure) + ((inner ellipsoid :inline :offset-assert 0) + (offset vector :inline :offset-assert 16) + (outer-multiple float :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x24 + :flag-assert #x900000024 + ) + +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 200) + (vehicle-type uint8 :offset-assert 204) ;; vehicle-type-u8 + (engine vehicle-engine-info :inline :offset-assert 208) + (transmission vehicle-transmission-info :inline :offset-assert 264) + (handling vehicle-handling-info :inline :offset-assert 316) + (pilot vehicle-pilot-info :inline :offset-assert 424) + (camera vehicle-camera-info :inline :offset-assert 448) + (sound vehicle-sound-info :inline :offset-assert 544) + (particles vehicle-particle-info :inline :offset-assert 832) + (damage vehicle-damage-info :inline :offset-assert 1056) + (physics-model vehicle-physics-model-info :inline :offset-assert 2816) + (setup vehicle-setup-info :offset-assert 3028) + (rider vehicle-rider-info :inline :offset-assert 3040) + (daxter vehicle-daxter-info :offset-assert 3128) + (hardpoint vehicle-hardpoint-info :inline :offset-assert 3136) + (shield vehicle-shield-info :inline :offset-assert 3200) + (explosion vehicle-explosion-info :offset-assert 3236) ;; guessed by decompiler + (explosion-part int32 :offset-assert 3240) + (debris debris-static-params :offset-assert 3244) ;; guessed by decompiler + (name-text text-id :offset-assert 3248) ;; guessed by decompiler + (helmet-offset vector :offset-assert 3252) + (particle-common vehicle-particle-common-info :offset-assert 3256) + ) + :method-count-assert 11 + :size-assert #xcbc + :flag-assert #xb00000cbc + (:methods + (rigid-body-vehicle-constants-method-10 () none) ;; 10 + ) + ) + +(deftype vehicle-section (structure) + ((vel vector :inline :offset-assert 0) + (info vehicle-section-info :offset-assert 16) + (node-list basic :offset-assert 20) + (draw basic :offset-assert 24) + (car-info car-info-full :offset-assert 28) + (debris uint64 :offset-assert 32) + (damage float :offset-assert 40) + (angle float :offset-assert 44) + (d-angle float :offset-assert 48) + (node-index int8 :offset-assert 52) + (parent-node-index int8 :offset-assert 53) + (flags uint8 :offset-assert 54) + (car-part int8 :offset-assert 55) + ) + :method-count-assert 20 + :size-assert #x38 + :flag-assert #x1400000038 + (:methods + (vehicle-section-method-9 () none) ;; 9 + (vehicle-section-method-10 () none) ;; 10 + (vehicle-section-method-11 () none) ;; 11 + (vehicle-section-method-12 () none) ;; 12 + (vehicle-section-method-13 () none) ;; 13 + (vehicle-section-method-14 () none) ;; 14 + (vehicle-section-method-15 () none) ;; 15 + (vehicle-section-method-16 () none) ;; 16 + (vehicle-section-method-17 () none) ;; 17 + (vehicle-section-method-18 () none) ;; 18 + (vehicle-section-method-19 () none) ;; 19 + ) + ) + +;; +++vehicle-h:vehicle-controls-flag +(defenum vehicle-controls-flag + :type uint8 + :bitfield #t + (vcf0 0) + (vcf1 1) + (vcf2 2) + (vcf3 3) + (vcf4 4) + (vcf5 5) + (vcf6 6) + (vcf7 7) + ) +;; ---vehicle-h:vehicle-controls-flag + +(deftype vehicle-controls (structure) + ((dataf float 5 :offset-assert 0) + (dataw float 5 :offset 0) + (steering float :offset 0) + (throttle float :offset 4) + (brake float :offset 8) + (lean-z float :offset 12) + (handbrake float :offset 16) + (flags vehicle-controls-flag :offset-assert 20) ;; vehicle-controls-flag + (prev-flags vehicle-controls-flag :offset-assert 21) ;; vehicle-controls-flag + (pad0 uint8 2 :offset-assert 22) ;; guessed by decompiler + ) + :pack-me + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype vehicle-particle (structure) + ((birth-accum uint32 2 :offset-assert 0) + (launcher sparticle-launcher :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; +++vehicle-h:vehicle-flag +(defenum vehicle-flag + :type uint64 + :bitfield #t + :copy-entries rigid-body-object-flag + (suppress-physics 4) + (in-air 5) + (on-ground 6) + (riding 7) + (player-grabbed 8) + (player-driving 9) + (player-owned 10) + (remote-control 11) + (ai-driving 12) + (ignition 13) + (nav-spheres 14) + (turbo-boost 15) + (reverse-gear 16) + (camera 17) + (camera-inside-view 18) + (camera-look-mode 19) + (sounds 20) + (particles 21) + (joints 22) + (lights-on 23) + (lights-update 24) + (lights-dead 25) + (overturned 26) + (ignore-damage 27) + (ignore-impulse 28) + (highspeed-collision 29) + (oil-slick 30) + (turbo-pad 31) + (fragile 32) + (fragile-death 33) + (ignore-powerups 34) + (turbo-toggle 35) + (start-boost-latch 36) + (start-boost 37) + (shield 38) + (respawn-invul 39) + (draw-marks 40) + (temp 41) + (dark-eco-boost-triggered 42) + (ai-off-nav-mesh 43) + (oversteer 44) + (ghost 45) + (wheel-fire 46) + (stuck 47) + (sinking 48) + (no-color-mod 49) + (suppress-look 50) + (disable-weapons 51) + (superhero 52) + ) +;; ---vehicle-h:vehicle-flag + +(deftype vehicle (rigid-body-object) + ((car-info car-info-full :offset-assert 288) + (vehicle-flags vehicle-flag :offset 264 :score 1) ;; renamed ;; rigid-body-object-flag + (damage-matrix matrix 2 :inline :offset-assert 304) + (damage-direction vector :inline :offset-assert 432) + (camera-pos vector :inline :offset-assert 448) + (control-hook (function vehicle vehicle-controls) :offset 472) ;; guessed by decompiler + (control-mask vehicle-controls :offset-assert 476) + (impact-callback basic :offset-assert 480) + (controls vehicle-controls :inline :offset-assert 484) + (prev-controls vehicle-controls :inline :offset-assert 508) + (impact rigid-body-impact :inline :offset-assert 544) + (target-acceleration vector :inline :offset-assert 624) + (impact-local-pos vector :inline :offset-assert 640) + (lin-acceleration vector :inline :offset-assert 656) + (max-impact-impulse float :offset-assert 672) + (sum-impact-impulse float :offset-assert 676) + (underside-y float :offset-assert 680) + (side-x float :offset-assert 684) + (health float :offset-assert 688) + (damage-factor float :offset-assert 692) + (speed-factor float :offset 700) + (behavior uint64 :offset 728) + (cam-view int8 :offset-assert 736) + (cam-speed-interp float :offset 744) + (camera-dist float :offset-assert 748) + (impact-proc handle :offset 768) ;; handle + (net-player uint64 :offset-assert 776) + (impact-time uint32 :offset 788) + (prev-impact-time uint32 :offset-assert 792) + (offscreen-time uint32 :offset 808) + (physics-enabled-time uint32 :offset 824) + (water-height float :offset 856) + (pred net-predictor-sphcol :inline :offset 1808) + (next-reliable-send-time int32 :offset-assert 2116) + (player-id int8 :offset-assert 2120) + (killed-by int8 :offset-assert 2121) + (killed-with int8 :offset-assert 2122) + (last-warp-time int32 :offset 2132) + (last-sent-vehicle-control-flags uint8 :offset-assert 2136) + ) + :method-count-assert 204 + :size-assert #x859 + :flag-assert #xcc07d00859 + ;; field vehicle-flag is likely a value type. + (:methods + (vehicle-method-89 () none) ;; 89 ;; (init-reverse (_type_ vehicle-controls) none) + (vehicle-method-90 () none) ;; 90 ;; (control-hook-ai (_type_ vehicle-controls) none) + (vehicle-method-91 () none) ;; 91 ;; (control-hook-player (_type_) none) + (vehicle-method-92 () none) ;; 92 ;; (vehicle-method-92 (_type_ vehicle-controls) none) + (vehicle-method-93 () none) ;; 93 ;; (vehicle-method-93 (_type_) none) + (vehicle-method-94 () none) ;; 94 ;; (vehicle-method-94 (_type_) none) + (vehicle-method-95 () none) ;; 95 ;; (vehicle-method-95 (_type_ vector float) none) + (vehicle-method-96 () none) ;; 96 ;; (vehicle-method-96 (_type_ float) none) + (vehicle-method-97 () none) ;; 97 ;; (vehicle-method-97 (_type_ float vehicle-physics-work) none) + (vehicle-method-98 () none) ;; 98 ;; (vehicle-method-98 (_type_) none) + (vehicle-method-99 () none) ;; 99 ;; (vehicle-method-99 (_type_) none) + (vehicle-method-100 () none) ;; 100 ;; (vehicle-method-100 (_type_) none) + (vehicle-method-101 () none) ;; 101 ;; (vehicle-method-101 (_type_) none) + (vehicle-method-102 () none) ;; 102 ;; (vehicle-method-102 (_type_) symbol) + (vehicle-method-103 () none) ;; 103 ;; (vehicle-method-103 (_type_) none) + (vehicle-method-104 () none) ;; 104 ;; (vehicle-method-104 (_type_) none) + (vehicle-method-105 () none) ;; 105 ;; (vehicle-method-105 (_type_) none) + (vehicle-method-106 () none) ;; 106 ;; (vehicle-method-106 (_type_) none) + (vehicle-method-107 () none) ;; 107 ;; (vehicle-method-107 (_type_ int process) none) + (vehicle-method-108 () none) ;; 108 ;; (vehicle-method-108 (_type_ int) none) + (vehicle-method-109 () none) ;; 109 ;; (vehicle-method-109 (_type_) none) + (vehicle-method-110 () none) ;; 110 ;; (vehicle-method-110 (_type_) none) + (vehicle-method-111 () none) ;; 111 ;; (get-linear-accel! (_type_ vector) none) + (vehicle-method-112 () none) ;; 112 ;; (copy-vehicle-controls! (_type_ vehicle-controls) none) + (vehicle-method-113 () none) ;; 113 ;; (vehicle-method-113 (_type_ vector int int) none) + (vehicle-method-114 () none) ;; 114 ;; (vehicle-method-114 (_type_ int) none) + (vehicle-method-115 () none) ;; 115 ;; (vehicle-method-115 (_type_) none) + (vehicle-method-116 () none) ;; 116 ;; (vehicle-method-116 (_type_ symbol) none) + (vehicle-method-117 () none) ;; 117 ;; (vehicle-method-117 (_type_) none) + (vehicle-method-118 () none) ;; 118 ;; (vehicle-method-118 (_type_) none) + (vehicle-method-119 () none) ;; 119 ;; (vehicle-method-119 (_type_) none) + (vehicle-method-120 () none) ;; 120 ;; (apply-gravity (_type_ float) none) + (vehicle-method-121 () none) ;; 121 ;; (apply-gravity1 (_type_ float) none) + (vehicle-method-122 () none) ;; 122 ;; (vehicle-method-122 (_type_) none) + (vehicle-method-123 () none) ;; 123 ;; (vehicle-method-123 (_type_) none) + (vehicle-method-124 () none) ;; 124 ;; (vehicle-method-124 (_type_) none) + (vehicle-method-125 () none) ;; 125 ;; (vehicle-method-125 (_type_) none) + (vehicle-method-126 () none) ;; 126 ;; (vehicle-method-126 (_type_) none) + (vehicle-method-127 () none) ;; 127 ;; (check-player-get-on (_type_ process-focusable) symbol) + (vehicle-method-128 () none) ;; 128 ;; (vehicle-method-128 (_type_) symbol) + (vehicle-method-129 () none) ;; 129 ;; (vehicle-method-129 (_type_) none) + (vehicle-method-130 () none) ;; 130 ;; (vehicle-method-130 (_type_) none) + (vehicle-method-131 () none) ;; 131 ;; (vehicle-method-131 (_type_ traffic-object-spawn-params) none) + (vehicle-method-132 () none) ;; 132 ;; (vehicle-method-132 (_type_ traffic-object-spawn-params) none) + (vehicle-method-133 () none) ;; 133 ;; (vehicle-method-133 (_type_ traffic-object-spawn-params) none) + (vehicle-method-134 () none) ;; 134 ;; (vehicle-method-134 (_type_) none) + (vehicle-method-135 () none) ;; 135 ;; (vehicle-method-135 (_type_) none) + (vehicle-method-136 () none) ;; 136 ;; (vehicle-method-136 (_type_) none) + (vehicle-method-137 () none) ;; 137 ;; (vehicle-method-137 (_type_) none) + (vehicle-method-138 () none) ;; 138 ;; (vehicle-method-138 (_type_) none) + (vehicle-method-139 () none) ;; 139 ;; (vehicle-method-139 (_type_) none) + (vehicle-method-140 () none) ;; 140 ;; (vehicle-method-140 (_type_) none) + (vehicle-method-141 () none) ;; 141 ;; (vehicle-method-141 (_type_) symbol) + (vehicle-method-142 () none) ;; 142 ;; (vehicle-method-142 (_type_) none) + (vehicle-method-143 () none) ;; 143 ;; (vehicle-method-143 (_type_ process) object) + (vehicle-method-144 () none) ;; 144 ;; (vehicle-method-144 (_type_) none) + (vehicle-method-145 () none) ;; 145 ;; (vehicle-method-145 (_type_) none) + (vehicle-method-146 () none) ;; 146 ;; (vehicle-method-146 (_type_ vector) none) + (vehicle-method-147 () none) ;; 147 ;; (vehicle-method-147 (_type_) none) + (vehicle-method-148 () none) ;; 148 ;; (vehicle-method-148 (_type_) none) + (vehicle-method-149 () none) ;; 149 ;; (vehicle-method-149 (_type_) none) + (vehicle-method-150 () none) ;; 150 ;; (vehicle-method-150 (_type_) none) + (vehicle-method-151 () none) ;; 151 ;; (set-hit-points (_type_ float) none) + (vehicle-method-152 () none) ;; 152 + (vehicle-method-153 () none) ;; 153 + (vehicle-method-154 () none) ;; 154 + (vehicle-method-155 () none) ;; 155 + (vehicle-method-156 () none) ;; 156 + (vehicle-method-157 () none) ;; 157 + (vehicle-method-158 () none) ;; 158 + (vehicle-method-159 () none) ;; 159 + (vehicle-method-160 () none) ;; 160 + (vehicle-method-161 () none) ;; 161 + (vehicle-method-162 () none) ;; 162 + (vehicle-method-163 () none) ;; 163 + (vehicle-method-164 () none) ;; 164 + (vehicle-method-165 () none) ;; 165 + (vehicle-method-166 () none) ;; 166 + (vehicle-method-167 () none) ;; 167 + (vehicle-method-168 () none) ;; 168 + (vehicle-method-169 () none) ;; 169 + (vehicle-method-170 () none) ;; 170 + (vehicle-method-171 () none) ;; 171 + (vehicle-method-172 () none) ;; 172 + (vehicle-method-173 () none) ;; 173 + (vehicle-method-174 () none) ;; 174 + (vehicle-method-175 () none) ;; 175 + (vehicle-method-176 () none) ;; 176 + (vehicle-method-177 () none) ;; 177 + (vehicle-method-178 () none) ;; 178 + (vehicle-method-179 () none) ;; 179 + (vehicle-method-180 () none) ;; 180 + (vehicle-method-181 () none) ;; 181 + (vehicle-method-182 () none) ;; 182 + (vehicle-method-183 () none) ;; 183 + (vehicle-method-184 () none) ;; 184 + (vehicle-method-185 () none) ;; 185 + (vehicle-method-186 () none) ;; 186 + (vehicle-method-187 () none) ;; 187 + (vehicle-method-188 () none) ;; 188 + (vehicle-method-189 () none) ;; 189 + (vehicle-method-190 () none) ;; 190 + (vehicle-method-191 () none) ;; 191 + (vehicle-method-192 () none) ;; 192 + (vehicle-method-193 () none) ;; 193 + (vehicle-method-194 () none) ;; 194 + (vehicle-method-195 () none) ;; 195 + (vehicle-method-196 () none) ;; 196 + (vehicle-method-197 () none) ;; 197 + (vehicle-method-198 () none) ;; 198 + (vehicle-method-199 () none) ;; 199 + (vehicle-method-200 () none) ;; 200 + (vehicle-method-201 () none) ;; 201 + (vehicle-method-202 () none) ;; 202 + (vehicle-method-203 () none) ;; 203 + ) + ) + +(deftype vehicle-draw-thruster-params (structure) + ((quat quaternion :inline :offset-assert 0) + (trans vector :inline :offset-assert 16) + (thrust-rgb rgbaf :inline :offset-assert 32) + (glow-rgb rgbaf :inline :offset-assert 48) + (tex-id uint32 :offset-assert 64) + (thrust float :offset-assert 68) + (width float :offset-assert 72) + (length float :offset-assert 76) + (fog-fade float :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x54 + :flag-assert #x900000054 + ) + +;; (deftype debug-vehicle-work (basic) +;; () +;; :flag-assert #x900000080 +;; ) + +;; (define-extern vehicle-init-remote function) +;; (define-extern *msg-map-vehicle* array) +;; (define-extern *net-process-class-info-vehicle* object) +;; (define-extern vehicle-get-flag-attach-point function) +;; (define-extern meters-per-sec->mph function) ;; (function float float) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-ai-tuning-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype race-ai-tuning-entry (structure) + ((player-ahead-distance float :offset-assert 0) + (ahead-speed-delta float :offset-assert 4) + (behind-speed-delta float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +(deftype race-ai-base-speed-info (structure) + ((adventure-minimum float :offset-assert 0) + (adventure-diff-mod float :offset-assert 4) + (exhibition-rookie float :offset-assert 8) + (exhibition-pro float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype race-ai-tuning-info (structure) + ((tuning-entry race-ai-tuning-entry 6 :inline :offset-assert 0) + (ahead-threshold float :offset-assert 96) + (behind-threshold float :offset-assert 100) + (base-speed race-ai-base-speed-info :offset-assert 104) + ) + :method-count-assert 9 + :size-assert #x6c + :flag-assert #x90000006c + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-line-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype race-line-slice-mapping (structure) + ((valid-entries uint16 :offset-assert 0) + (index-entries uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype race-line-query-info (structure) + ((query-position vector :inline :offset-assert 0) + (nearest-position vector :inline :offset-assert 16) + (ahead-position vector :inline :offset-assert 32) + (ahead-direction vector :inline :offset-assert 48) + (direction vector :inline :offset-assert 64) + (angle-sum-distance float :offset-assert 80) + (look-ahead-distance float :offset-assert 84) + (current-slice int32 :offset-assert 88) + (current-line basic :offset-assert 92) + (total-angle-delta float :offset-assert 96) + (skip-gaps? basic :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) +|# + +#| +(deftype race-line (structure) + ((scale vector :inline :offset-assert 0) + (offset vector :inline :offset-assert 16) + (length float :offset-assert 32) + (flags uint16 :offset-assert 36) + (points-per-slice int16 :offset-assert 38) + (point-count int16 :offset-assert 40) + (gap-index-count int16 :offset-assert 42) + (slice-count int16 :offset-assert 44) + (extra-points int16 :offset-assert 46) + (points uint32 :offset-assert 48) + (gap-indices uint32 :offset-assert 52) + (slices uint32 :offset-assert 56) + (pad uint32 :offset-assert 60) + ) + :method-count-assert 15 + :size-assert #x40 + :flag-assert #xf00000040 + (:methods + (race-line-method-9 () none) ;; 9 + (race-line-method-10 () none) ;; 10 + (race-line-method-11 () none) ;; 11 + (race-line-method-12 () none) ;; 12 + (race-line-method-13 () none) ;; 13 + (race-line-method-14 () none) ;; 14 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype racer-state (structure) + ((position vector :inline :offset-assert 0) + (start-position vector :inline :offset-assert 16) + (last-race-mesh-position vector :inline :offset-assert 32) + (racer uint64 :offset-assert 48) ;; handle + (lap-distance float :offset-assert 56) + (lap float :offset-assert 60) + (prev-racer-lap float :offset-assert 64) + (next-racer-lap float :offset-assert 68) + (end-of-race-dist float :offset-assert 72) + (max-speed float :offset-assert 76) + (last-race-line race-line :offset-assert 80) + (last-slice int16 :offset-assert 84) + (flags uint16 :offset-assert 86) ;; racer-state-flags + (rank int8 :offset-assert 88) + (ai-rank int8 :offset-assert 89) + (lap-count int8 :offset-assert 90) + (lap-quadrant int8 :offset-assert 91) + ) + :method-count-assert 12 + :size-assert #x5c + :flag-assert #xc0000005c + (:methods + (racer-state-method-9 () none) ;; 9 ;; (update-lap-distance (_type_ race-state) none) + (racer-state-method-10 () none) ;; 10 ;; (begin-lap (_type_ race-state) none) + (racer-state-method-11 () none) ;; 11 ;; (end-lap (_type_ race-state) none) + ) + ) +|# + +#| +(deftype race-state (structure) + ((start-sphere sphere :inline :offset-assert 0) + (start-dir vector :inline :offset-assert 16) + (finish-sphere sphere :inline :offset-assert 32) + (finish-dir vector :inline :offset-assert 48) + (race-state uint8 :offset-assert 64) + (racer-count int8 :offset-assert 65) + (lap-count int8 :offset-assert 66) + (start-time int32 :offset-assert 68) + (min-player-lap float :offset-assert 72) + (max-player-lap float :offset-assert 76) + (ai-tuning-indices basic :offset-assert 80) + (first-place-human-id int32 :offset-assert 84) + (rubberband-ref-lap float :offset-assert 88) + (mesh basic :offset-assert 92) + (race-ai-tuning basic :offset-assert 96) + (race-ai-tuning-indices basic :offset-assert 100) + (longest-race-line-dist float :offset-assert 104) + (racer-array racer-state 10 :offset-assert 112) ;; guessed by decompiler + ) + :method-count-assert 12 + :size-assert #x430 + :flag-assert #xc00000430 + (:methods + (race-state-method-9 () none) ;; 9 ;; (init-racers! (_type_ process-drawable int) none) + (race-state-method-10 () none) ;; 10 ;; (begin-race (_type_) none) + (race-state-method-11 () none) ;; 11 ;; (update (_type_) none) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-mesh-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype race-mesh-hash-search (structure) + ((best-dist float :offset-assert 0) + (debug-cells-searched int32 :offset-assert 4) + (debug-slices-searched int32 :offset-assert 8) + (bounds bounding-box4w :inline :offset-assert 16) + (cell-quads vector 2 :offset-assert 48) ;; guessed by decompiler + (slice-quads vector 4 :offset-assert 80) ;; guessed by decompiler + (cell-bits vector16ub 2 :offset-assert 48) ;; guessed by decompiler + (slice-bits vector16ub 2 :offset-assert 80) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +#| +(deftype race-mesh-slice-query (structure) + ((search-sphere sphere :inline :offset-assert 0) + (slice-range UNKNOWN 2 :offset-assert 16) + (race-line race-line :offset-assert 20) + (pt-on-slice vector :inline :offset-assert 32) + (slice-corners vector 4 :offset-assert 48) ;; guessed by decompiler + (lap-dist float :offset-assert 112) + (slice-id int16 :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x76 + :flag-assert #x900000076 + ) +|# + +#| +(deftype race-mesh-edge (structure) + ((left vector :inline :offset-assert 0) + (right vector :inline :offset-assert 16) + (lap-dist float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype race-mesh-slice (structure) + ((edge-index-array uint16 2 :offset-assert 0) ;; guessed by decompiler + (start-edge int16 :offset-assert 0) + (end-edge int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype race-mesh-hash-cell (structure) + ((first-slice int16 :offset-assert 0) + (slice-count uint8 :offset-assert 2) + (pad uint8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype race-mesh-hash (structure) + ((cells-wide int8 :offset-assert 0) + (cells-tall int8 :offset-assert 1) + (cell-length float :offset-assert 4) + (cells (inline-array race-mesh-hash-cell) :offset-assert 8) ;; guessed by decompiler + (slice-table (inline-array race-mesh-slice) :offset-assert 12) ;; guessed by decompiler + (origin vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype race-mesh (basic) + ((version uint8 :offset-assert 4) + (flags uint8 :offset-assert 5) ;; race-mesh-flag + (slice-count int16 :offset-assert 6) + (edge-count int16 :offset-assert 8) + (race-line-count int16 :offset-assert 10) + (ai-valid-mask int16 :offset-assert 12) + (pad uint8 2 :offset-assert 14) ;; guessed by decompiler + (slices (inline-array race-mesh-slice) :offset-assert 16) ;; guessed by decompiler + (edges (inline-array race-mesh-edge) :offset-assert 20) ;; guessed by decompiler + (hash race-mesh-hash :offset-assert 24) + (race-lines uint32 :offset-assert 28) + ) + :method-count-assert 21 + :size-assert #x20 + :flag-assert #x1500000020 + (:methods + (race-mesh-method-9 () none) ;; 9 ;; (debug-draw-path (_type_ int int rgba rgba) none) + (race-mesh-method-10 () none) ;; 10 ;; (debug-draw-path-from-history (_type_ int int) symbol) + (race-mesh-method-11 () none) ;; 11 ;; (debug-draw-slice (_type_ int) none) + (race-mesh-method-12 () none) ;; 12 ;; (debug-draw-edges (_type_) none) + (race-mesh-method-13 () none) ;; 13 ;; (race-mesh-method-13 (_type_ race-mesh-slice-query) none) + (race-mesh-method-14 () none) ;; 14 ;; (race-mesh-method-14 (_type_ race-mesh-slice-query) none) + (race-mesh-method-15 () none) ;; 15 ;; (race-mesh-method-15 (_type_ int race-mesh-slice-query) none) + (race-mesh-method-16 () none) ;; 16 ;; (race-mesh-method-16 (_type_ race-mesh-slice-query) none) + (race-mesh-method-17 () none) ;; 17 ;; (race-mesh-method-17 (_type_ race-mesh-slice-query) symbol) + (race-mesh-method-18 () none) ;; 18 ;; (race-mesh-method-18 (_type_ race-mesh-hash-search int int race-mesh-slice-query) none) + (race-mesh-method-19 () none) ;; 19 ;; (race-mesh-method-19 (_type_ int race-mesh-slice-query) symbol) + (race-mesh-method-20 () none) ;; 20 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; race-control ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype race-control (structure) + ((state race-state :offset-assert 0) + (racer-state racer-state :offset-assert 4) + (mesh race-mesh :offset-assert 8) ;; guessed by decompiler + (line race-line :offset-assert 12) + ) + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (race-control-method-9 () none) ;; 9 ;; (race-control-method-9 (_type_ int vector) none) + ) + ) +|# + +;; (define-extern output-race-mesh function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-weapon-slot (process-drawable) + ((owning-vehicle uint64 :offset-assert 248) + (ammunition int8 :offset-assert 256) + (flags uint8 :offset-assert 257) + (in-slot uint8 :offset-assert 258) + (powerup-level uint8 :offset-assert 259) + (my-type uint8 :offset-assert 260) + ) + :method-count-assert 60 + :size-assert #x105 + :flag-assert #x3c00800105 + (:methods + (vehicle-weapon-slot-method-51 () none) ;; 51 + (vehicle-weapon-slot-method-52 () none) ;; 52 + (vehicle-weapon-slot-method-53 () none) ;; 53 + (vehicle-weapon-slot-method-54 () none) ;; 54 + (vehicle-weapon-slot-method-55 () none) ;; 55 + (vehicle-weapon-slot-method-56 () none) ;; 56 + (vehicle-weapon-slot-method-57 () none) ;; 57 + (vehicle-weapon-slot-method-58 () none) ;; 58 + (vehicle-weapon-slot-method-59 () none) ;; 59 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype gunmount-drawable (process-drawable) + ((mounted-on uint64 :offset-assert 248) + (hardpoint int8 :offset-assert 256) + ) + :method-count-assert 54 + :size-assert #x101 + :flag-assert #x3600800101 + (:methods + (gunmount-drawable-method-50 () none) ;; 50 + (gunmount-drawable-method-51 () none) ;; 51 + (gunmount-drawable-method-52 () none) ;; 52 + (gunmount-drawable-method-53 () none) ;; 53 + ) + ) +|# + +#| +(deftype gunmount-generic-drawable (gunmount-drawable) + ((config uint8 :offset-assert 257) + (flash uint64 :offset-assert 264) + (changeover-anim int32 :offset-assert 272) + (powerup-level int8 :offset-assert 276) + ) + :method-count-assert 56 + :size-assert #x115 + :flag-assert #x3800900115 + (:methods + (gunmount-generic-drawable-method-54 () none) ;; 54 + (gunmount-generic-drawable-method-55 () none) ;; 55 + ) + ) +|# + +#| +(deftype warning-hud-icon (basic) + ((hsprite hud-sprite :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +#| +(deftype rapid-fire-params (structure) + ((rof uint16 :offset-assert 0) + (shot-radius float :offset-assert 4) + (shot-range float :offset-assert 8) + (beam-effect uint16 :offset-assert 12) + (impact-callback basic :offset-assert 16) + (impact-callback-params basic :offset-assert 20) + (shot-sound uint16 :offset-assert 24) + (hit-sound uint16 :offset-assert 26) + (wpn-type uint8 :offset-assert 28) + (wpn-powerup-level int8 :offset-assert 29) + ) + :method-count-assert 9 + :size-assert #x1e + :flag-assert #x90000001e + ;; field impact-callback-params uses ~A with a signed load. + ) +|# + +#| +(deftype rapid-fire-control (basic) + ((owner uint64 :offset-assert 8) + (params rapid-fire-params :offset-assert 16) + (shot-clock uint16 :offset-assert 20) + (next-shot-from int8 :offset-assert 22) + (hit-spang-part basic :offset-assert 24) + (old-origin vector :inline :offset-assert 32) + (old-rot quaternion :inline :offset-assert 48) + (emitters basic :offset-assert 64) + ) + :method-count-assert 13 + :size-assert #x44 + :flag-assert #xd00000044 + (:methods + (rapid-fire-control-method-9 () none) ;; 9 + (rapid-fire-control-method-10 () none) ;; 10 + (rapid-fire-control-method-11 () none) ;; 11 + (rapid-fire-control-method-12 () none) ;; 12 + ) + ) +|# + +#| +(deftype rapid-fire-callback-gun-hitspang-params (structure) + ((bits-part-id uint32 :offset-assert 0) + (dust-part-id uint32 :offset-assert 4) + (group-part-id uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype vehicle-weapon-drone (process-focusable) + ((owning-vehicle uint64 :offset-assert 256) + (owning-slot uint64 :offset-assert 264) + (target uint64 :offset-assert 272) + (orbit-height float :offset-assert 280) + (orbit-radius float :offset-assert 284) + (orbit-period uint32 :offset-assert 288) + (orbit-phase uint32 :offset-assert 292) + (scaled-last-frame basic :offset-assert 296) + (ammunition uint32 :offset-assert 300) + (next-gaze quaternion :inline :offset-assert 304) + (next-gaze-time uint64 :offset-assert 320) + (last-gaze-time uint64 :offset-assert 328) + (pitch-bend float :offset-assert 336) + (sweep-loop uint32 :offset-assert 340) + (muzzle-flashes UNKNOWN 4 :offset-assert 344) + (next-target-poll uint64 :offset-assert 376) + (firecontrol basic :offset-assert 384) + (blam uint32 :offset-assert 388) + ) + :method-count-assert 67 + :size-assert #x188 + :flag-assert #x4301000188 + (:methods + (vehicle-weapon-drone-method-59 () none) ;; 59 + (vehicle-weapon-drone-method-60 () none) ;; 60 + (vehicle-weapon-drone-method-61 () none) ;; 61 + (vehicle-weapon-drone-method-62 () none) ;; 62 + (vehicle-weapon-drone-method-63 () none) ;; 63 + (vehicle-weapon-drone-method-64 () none) ;; 64 + (vehicle-weapon-drone-method-65 () none) ;; 65 + (vehicle-weapon-drone-method-66 () none) ;; 66 + ) + ) +|# + +#| +(deftype v-wpn-ptable-entry (structure) + ((chance uint16 :offset-assert 0) + (weapon-type uint8 :offset-assert 2) + (pad1 uint8 :offset-assert 3) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype v-wpn-ptable (structure) + ((entries-count int8 :offset-assert 0) + (total-chance uint16 :offset-assert 2) + (entries-array uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype v-wpn-ptable-quad (structure) + ((base v-wpn-ptable :offset-assert 0) + (last-lap v-wpn-ptable :offset-assert 4) + (base-behind v-wpn-ptable :offset-assert 8) + (last-lap-behind v-wpn-ptable :offset-assert 12) + (behind-threshold float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +;; v-wpn-net-info is already defined! + +;; (define-extern V_R_MINE1_ARMED? object) +;; (define-extern weapon-mask->type function) +;; (define-extern *weapon-suppression-table* object) +;; (define-extern v-wpn-base-common-trans function) +;; (define-extern v-wpn-event-base function) +;; (define-extern *cheat-defaultgun-in-race* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wvehicle-sound-loop-state (structure) + ((id sound-id :offset-assert 0) ;; guessed by decompiler + (vol float :offset-assert 4) + (pitch float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype vehicle-wheel-state (structure) + ((info vehicle-wheel-info :offset-assert 0) + (flags uint8 :offset-assert 4) + (prev-flags uint8 :offset-assert 5) + (handle uint64 :offset-assert 8) ;; handle + (probe-local-pos vector :inline :offset-assert 16) + (probe-local-dir vector :inline :offset-assert 32) + (local-axis vector :inline :offset-assert 48) + (surface-pos vector :inline :offset-assert 64) + (ground-pos vector :inline :offset-assert 80) + (ground-normal vector :inline :offset-assert 96) + (trans vector :inline :offset-assert 112) + (quat quaternion :inline :offset-assert 128) + (trail-pos vector 2 :offset-assert 144) ;; guessed by decompiler + (surface rigid-body-surface :offset-assert 176) ;; vehicle-wheel-surface + (pos float :offset-assert 180) + (pos2 float :offset-assert 184) + (inertia float :offset-assert 188) + (steer-angle float :offset-assert 192) + (angle float :offset-assert 196) + (rev float :offset-assert 200) + (x-scale float :offset-assert 204) + (torque float :offset-assert 208) + (braking-torque float :offset-assert 212) + (up-force float :offset-assert 216) + (drive-diff float :offset-assert 220) + (side-vel float :offset-assert 224) + (up-vel float :offset-assert 228) + (forward-vel float :offset-assert 232) + (forward-slip-vel float :offset-assert 236) + (friction-coef float :offset-assert 240) + (sink-depth float :offset-assert 244) + (sin-susp-ang float :offset-assert 248) + (cos-susp-ang float :offset-assert 252) + (part-birth-accum sparticle-launch-control 4 :offset-assert 256) ;; guessed by decompiler + (tread-time uint32 :offset-assert 272) + (tread-tracker uint64 :offset-assert 280) ;; handle + ) + :method-count-assert 9 + :size-assert #x120 + :flag-assert #x900000120 + ) +|# + +#| +(deftype wvehicle-net-extra (structure) + ((desired-steering float :offset-assert 0) + (desired-throttle float :offset-assert 4) + (desired-wheel-rev float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype wvehicle-ai-destination (structure) + ((final-position vector :inline :offset-assert 0) + (position vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (nav-location nav-location :inline :offset-assert 48) + (handle uint64 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype wvehicle-ai-state (structure) + ((destination wvehicle-ai-destination :inline :offset-assert 0) + (nav-location nav-location :inline :offset-assert 64) + (current-travel vector :inline :offset-assert 80) + (previous-steering-error float :offset-assert 96) + (no-physics-speed float :offset-assert 100) + (blocked-timer float :offset-assert 104) + (reverse-timer float :offset-assert 108) + (flags uint32 :offset-assert 112) + (desired-speed float :offset-assert 116) + (weapon-timer uint64 :offset-assert 120) + (weapon-aggression float :offset-assert 128) + (mode uint8 :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #x85 + :flag-assert #x900000085 + ) +|# + +#| +(deftype wvehicle-engine-loop-state (structure) + ((id uint32 :offset-assert 0) + (index int8 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x5 + :flag-assert #x900000005 + ) +|# + +#| +(deftype wvehicle-engine-mix-state (structure) + ((loops UNKNOWN 2 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype v-wpn-turbo-lightning-info (structure) + ((pt-start vector :inline :offset-assert 0) + (pt-end vector :inline :offset-assert 16) + (next-start vector :inline :offset-assert 32) + (next-end vector :inline :offset-assert 48) + (next-recomp-time uint64 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) +|# + +#| +(deftype wvehicle-weapon-sync-blob (structure) + ((data UNKNOWN 4 :offset-assert 0) + (wpn-left-type int8 :offset-assert 0) + (wpn-right-type int8 :offset-assert 1) + (wpn-left-powerup int8 :offset-assert 2) + (wpn-right-powerup int8 :offset-assert 3) + (blob int32 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype wvehicle (vehicle) + ((net-extra wvehicle-net-extra :inline :offset-assert 2140) + (antenna uint64 :offset-assert 2152) + (fire-tracker uint64 :offset-assert 2160) + (race race-control :inline :offset-assert 2168) + (ai wvehicle-ai-state :inline :offset-assert 2192) + (engine-rev float :offset-assert 2328) + (engine-inertia float :offset-assert 2332) + (engine-torque float :offset-assert 2336) + (engine-max-torque float :offset-assert 2340) + (engine-rpm float :offset-assert 2344) + (engine-load float :offset-assert 2348) + (sound-engine-rpm float :offset-assert 2352) + (sound-engine-load float :offset-assert 2356) + (sound-engine-envelope float :offset-assert 2360) + (wheel-rev float :offset-assert 2364) + (wheel-inertia float :offset-assert 2368) + (wheel-torque float :offset-assert 2372) + (wheel-braking-torque float :offset-assert 2376) + (wheel-ground-torque float :offset-assert 2380) + (clutch-grab float :offset-assert 2384) + (gear-ratio float :offset-assert 2388) + (final-drive-ratio float :offset-assert 2392) + (total-gear-ratio float :offset-assert 2396) + (inv-total-gear-ratio float :offset-assert 2400) + (avg-drive-wheel-radius float :offset-assert 2404) + (drive-wheel-inertia float :offset-assert 2408) + (clutch-inertia float :offset-assert 2412) + (idle-throttle float :offset-assert 2416) + (wheelbase float :offset-assert 2420) + (f-track-width float :offset-assert 2424) + (r-track-width float :offset-assert 2428) + (susp-spring-control float :offset-assert 2432) + (jump-control float :offset-assert 2436) + (shortcut-speed-factor float :offset-assert 2440) + (path-deviation float :offset-assert 2444) + (turbo-supply float :offset-assert 704) + (turbo-ready float :offset-assert 2448) + (slide-factor float :offset-assert 2452) + (slide-time uint32 :offset-assert 2456) + (max-speed float :offset-assert 2460) + (shift-state uint8 :offset-assert 2464) + (gear-select int8 :offset-assert 2465) + (next-gear-select int8 :offset-assert 2466) + (shift-time uint32 :offset-assert 2468) + (wheel vehicle-wheel-state 4 :offset-assert 2480) ;; guessed by decompiler + (gravity-dir vector :inline :offset-assert 3632) + (surface-velocity vector :inline :offset-assert 3648) + (tire-roll-loop-state wvehicle-sound-loop-state 6 :offset-assert 3664) ;; guessed by decompiler + (tire-slide-loop-state wvehicle-sound-loop-state 2 :offset-assert 3760) ;; guessed by decompiler + (engine-mix-state-array UNKNOWN 2 :offset-assert 3792) + (min-load-engine-mix-state wvehicle-engine-mix-state :inline :offset-assert 3792) + (max-load-engine-mix-state wvehicle-engine-mix-state :inline :offset-assert 3824) + (damage-sound-id sound-id :offset-assert 3856) ;; guessed by decompiler + (water-sound-id sound-id :offset-assert 3860) ;; guessed by decompiler + (wheel-fire-sound-id uint32 :offset-assert 3864) + (oil-sound-id uint32 :offset-assert 3868) + (turbo-sound-id sound-id :offset-assert 3872) ;; guessed by decompiler + (turbo-sound2-id uint32 :offset-assert 3876) + (car-fire-loop uint32 :offset-assert 3880) + (hang-time-sound-id uint32 :offset-assert 3884) + (overturned-time uint32 :offset-assert 3888) + (engine-steady-time uint32 :offset-assert 3892) + (splash-time uint32 :offset-assert 3896) + (knobby-time uint32 :offset-assert 3900) + (susp-creak-time uint32 :offset-assert 3904) + (ground-time uint32 :offset-assert 3908) + (jump-time uint32 :offset-assert 3912) + (no-slide-time uint32 :offset-assert 3916) + (slide-distance float :offset-assert 3920) + (power-slide-hud uint64 :offset-assert 3928) + (hang-time-hud uint64 :offset-assert 3936) + (hang-time float :offset-assert 3944) + (next-slide-sound-play-distance float :offset-assert 3948) + (attached-array handle 16 :offset-assert 3952) ;; guessed by decompiler + (eng-pitch-offset float :offset-assert 4080) + (eng-pitch-variance float :offset-assert 4084) + (eng-pitch-variance-seek float :offset-assert 4088) + (eng-vol-variance float :offset-assert 4092) + (eng-vol-variance-seek float :offset-assert 4096) + (turbo-pitch float :offset-assert 4100) + (health-pickup-multiplier float :offset-assert 4104) + (jmod-steering-wheel joint-mod-rotate-local :inline :offset-assert 4112) + (jmod-frame UNKNOWN 2 :offset-assert 4144) + (jmod-axles UNKNOWN 4 :offset-assert 4272) + (water-sound-envelope float :offset-assert 4464) + (wpn-current-target uint64 :offset-assert 4488) + (wpn-current-target-acquired uint64 :offset-assert 4496) + (wpn-left uint64 :offset-assert 4504) + (wpn-right uint64 :offset-assert 4512) + (wpn-shield uint64 :offset-assert 4520) + (wpn-drone uint64 :offset-assert 4528) + (wpn-oil uint64 :offset-assert 4536) + (wpn-turbo uint64 :offset-assert 4544) + (wpn-bulldog-gun uint64 :offset-assert 4552) + (wpn-drawables UNKNOWN 2 :offset-assert 4560) + (wpn-drawable-left uint64 :offset-assert 4560) + (wpn-drawable-right uint64 :offset-assert 4568) + (wpn-spin-done-left int32 :offset-assert 4576) + (wpn-spin-done-right int32 :offset-assert 4580) + (prev-wpn-sync wvehicle-weapon-sync-blob :inline :offset-assert 4584) + (turbo-suppressor-particle basic :offset-assert 4588) + (dark-seeking-me basic :offset-assert 4592) + (dark-suck-sound-pending int8 :offset-assert 4596) + (vehicle-exhaust-subsampler UNKNOWN 2 :offset-assert 4600) + (wheel-launcher UNKNOWN 4 :offset-assert 4608) + (wheel-fire-launcher UNKNOWN 4 :offset-assert 4624) + (hack-armed-right basic :offset-assert 4640) + (hack-armed-left basic :offset-assert 4644) + (shake-amount float :offset-assert 4648) + (whoosh-sound-id uint32 :offset-assert 4652) + (sink-sound-id uint32 :offset-assert 4656) + ) + :method-count-assert 272 + :size-assert #x1234 + :flag-assert #x11011b01234 + (:methods + (wvehicle-method-204 () none) ;; 204 + (wvehicle-method-205 () none) ;; 205 + (wvehicle-method-206 () none) ;; 206 + (wvehicle-method-207 () none) ;; 207 + (wvehicle-method-208 () none) ;; 208 + (wvehicle-method-209 () none) ;; 209 + (wvehicle-method-210 () none) ;; 210 + (wvehicle-method-211 () none) ;; 211 + (wvehicle-method-212 () none) ;; 212 + (wvehicle-method-213 () none) ;; 213 + (wvehicle-method-214 () none) ;; 214 + (wvehicle-method-215 () none) ;; 215 + (wvehicle-method-216 () none) ;; 216 + (wvehicle-method-217 () none) ;; 217 + (wvehicle-method-218 () none) ;; 218 + (wvehicle-method-219 () none) ;; 219 + (wvehicle-method-220 () none) ;; 220 + (wvehicle-method-221 () none) ;; 221 + (wvehicle-method-222 () none) ;; 222 + (wvehicle-method-223 () none) ;; 223 + (wvehicle-method-224 () none) ;; 224 + (wvehicle-method-225 () none) ;; 225 + (wvehicle-method-226 () none) ;; 226 + (wvehicle-method-227 () none) ;; 227 + (wvehicle-method-228 () none) ;; 228 + (wvehicle-method-229 () none) ;; 229 + (wvehicle-method-230 () none) ;; 230 + (wvehicle-method-231 () none) ;; 231 + (wvehicle-method-232 () none) ;; 232 + (wvehicle-method-233 () none) ;; 233 + (wvehicle-method-234 () none) ;; 234 + (wvehicle-method-235 () none) ;; 235 + (wvehicle-method-236 () none) ;; 236 + (wvehicle-method-237 () none) ;; 237 + (wvehicle-method-238 () none) ;; 238 + (wvehicle-method-239 () none) ;; 239 + (wvehicle-method-240 () none) ;; 240 + (wvehicle-method-241 () none) ;; 241 + (wvehicle-method-242 () none) ;; 242 + (wvehicle-method-243 () none) ;; 243 + (wvehicle-method-244 () none) ;; 244 + (wvehicle-method-245 () none) ;; 245 + (wvehicle-method-246 () none) ;; 246 + (wvehicle-method-247 () none) ;; 247 + (wvehicle-method-248 () none) ;; 248 + (wvehicle-method-249 () none) ;; 249 + (wvehicle-method-250 () none) ;; 250 + (wvehicle-method-251 () none) ;; 251 + (wvehicle-method-252 () none) ;; 252 + (wvehicle-method-253 () none) ;; 253 + (wvehicle-method-254 () none) ;; 254 + (wvehicle-method-255 () none) ;; 255 + (wvehicle-method-256 () none) ;; 256 + (wvehicle-method-257 () none) ;; 257 + (wvehicle-method-258 () none) ;; 258 + (wvehicle-method-259 () none) ;; 259 + (wvehicle-method-260 () none) ;; 260 + (wvehicle-method-261 () none) ;; 261 + (wvehicle-method-262 () none) ;; 262 + (wvehicle-method-263 () none) ;; 263 + (wvehicle-method-264 () none) ;; 264 + (wvehicle-method-265 () none) ;; 265 + (wvehicle-method-266 () none) ;; 266 + (wvehicle-method-267 () none) ;; 267 + (wvehicle-method-268 () none) ;; 268 + (wvehicle-method-269 () none) ;; 269 + (wvehicle-method-270 () none) ;; 270 + (wvehicle-method-271 () none) ;; 271 + ) + ) +|# + +#| +(deftype vehicle-antenna-init-params (structure) + ((pos vector :inline :offset-assert 0) + (tilt float :offset-assert 16) + (vehicle basic :offset-assert 20) + (skel basic :offset-assert 24) + (level basic :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +;; (define-extern rpm->radians-per-sec function) ;; (function float degrees) +;; (define-extern radians-per-sec->rpm function) ;; (function degrees float) +;; (define-extern vehicle-shielded? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-player-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype net-player-respawn-info (structure) + ((position vector :inline :offset-assert 0) + (quat quaternion :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (want-count int8 :offset-assert 48) + (want (inline-array level-buffer-state-small) :offset-assert 52) + ) + :method-count-assert 11 + :size-assert #x38 + :flag-assert #xb00000038 + (:methods + (net-player-respawn-info-method-9 () none) ;; 9 + (net-player-respawn-info-method-10 () none) ;; 10 + ) + ) + +(deftype net-player (process-nettable) + ((last-known-pos vector :inline :offset-assert 192) + (last-known-pos-valid symbol :offset-assert 208) + (mgr basic :offset-assert 212) + (vehicle uint64 :offset-assert 216) + (rev-mgr uint64 :offset-assert 224) + (score int32 :offset 236) + (player-num int8 :offset-assert 240) + (team uint8 :offset-assert 241) + (color uint32 :offset-assert 244) + (font-color uint8 :offset-assert 248) + (multiplier int8 :offset-assert 249) + (death-indicator-1 uint64 :offset-assert 256) + (death-indicator-2 uint64 :offset-assert 264) + (wpn-left-type uint8 :offset-assert 272) + (wpn-right-type uint8 :offset-assert 273) + (wpn-left-ammo uint8 :offset-assert 274) + (wpn-right-ammo uint8 :offset-assert 275) + (turbo-qty uint8 :offset-assert 276) + (dark-eco uint8 :offset-assert 277) + (health uint8 :offset-assert 278) + (last-weapon-provision float :offset-assert 280) + (top-speed float :offset-assert 284) + (player-id int8 :offset-assert 288) + (flags uint8 :offset-assert 289) + (rank int8 :offset-assert 290) + (human-rank int8 :offset-assert 291) + (next-spawn-time uint64 :offset-assert 296) + (state-time uint64 :offset-assert 304) + (vehicle-impact-callback function :offset-assert 312) + (spawn-count int32 :offset-assert 316) + (speech-id uint8 :offset-assert 320) + (last-speech-time uint64 :offset-assert 328) + (best-power-slide float :offset-assert 336) + (best-hang-time int32 :offset-assert 340) + (display-score int32 :offset-assert 344) + (kills int32 :offset-assert 348) + (deaths int32 :offset-assert 352) + (last-spawn-time uint64 :offset-assert 360) + (dead-camera-pos-valid symbol :offset-assert 368) + (dead-camera-pos vector :inline :offset-assert 384) + ) + :method-count-assert 98 + :size-assert #x190 + :flag-assert #x6201000190 + (:methods + (net-player-method-42 () none) ;; 42 + (net-player-method-43 () none) ;; 43 + (net-player-method-44 () none) ;; 44 + (net-player-method-45 () none) ;; 45 + (net-player-method-46 () none) ;; 46 + (net-player-method-47 () none) ;; 47 + (net-player-method-48 () none) ;; 48 + (net-player-method-49 () none) ;; 49 + (net-player-method-50 () none) ;; 50 + (net-player-method-51 () none) ;; 51 + (net-player-method-52 () none) ;; 52 + (net-player-method-53 () none) ;; 53 + (net-player-method-54 () none) ;; 54 + (net-player-method-55 () none) ;; 55 + (net-player-method-56 () none) ;; 56 + (net-player-method-57 () none) ;; 57 + (net-player-method-58 () none) ;; 58 + (net-player-method-59 () none) ;; 59 + (net-player-method-60 () none) ;; 60 + (net-player-method-61 () none) ;; 61 + (net-player-method-62 () none) ;; 62 + (net-player-method-63 () none) ;; 63 + (net-player-method-64 () none) ;; 64 + (net-player-method-65 () none) ;; 65 + (net-player-method-66 () none) ;; 66 + (net-player-method-67 () none) ;; 67 + (net-player-method-68 () none) ;; 68 + (net-player-method-69 () none) ;; 69 + (net-player-method-70 () none) ;; 70 + (net-player-method-71 () none) ;; 71 + (net-player-method-72 () none) ;; 72 + (net-player-method-73 () none) ;; 73 + (net-player-method-74 () none) ;; 74 + (net-player-method-75 () none) ;; 75 + (net-player-method-76 () none) ;; 76 + (net-player-method-77 () none) ;; 77 + (net-player-method-78 () none) ;; 78 + (net-player-method-79 () none) ;; 79 + (net-player-method-80 () none) ;; 80 + (net-player-method-81 () none) ;; 81 + (net-player-method-82 () none) ;; 82 + (net-player-method-83 () none) ;; 83 + (net-player-method-84 () none) ;; 84 + (net-player-method-85 () none) ;; 85 + (net-player-method-86 () none) ;; 86 + (net-player-method-87 () none) ;; 87 + (net-player-method-88 () none) ;; 88 + (net-player-method-89 () none) ;; 89 + (net-player-method-90 () none) ;; 90 + (net-player-method-91 () none) ;; 91 + (net-player-method-92 () none) ;; 92 + (net-player-method-93 () none) ;; 93 + (net-player-method-94 () none) ;; 94 + (net-player-method-95 () none) ;; 95 + (net-player-method-96 () none) ;; 96 + (net-player-method-97 () none) ;; 97 + ) + ) + +;; (define-extern net-player-init-remote function) +(define-extern *msg-map-net-player* array) +(define-extern *net-process-class-info-net-player* object) +(define-extern *net-players* (array net-player)) +;; (define-extern *active-net-player-count* object) +;; (define-extern *active-net-players* array) +;; (define-extern *active-net-non-spectator-count* object) +;; (define-extern *active-net-non-spectators* array) +;; (define-extern *team-colors* object) +;; (define-extern *team-font-colors* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-world-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype vehicle-load-parts (uint64) + ((part1 uint8 :offset 0 :size 3) ;; added + (part2 uint8 :offset 3 :size 3) ;; added + (part3 uint8 :offset 6 :size 3) ;; added + (part4 uint8 :offset 9 :size 3) ;; added + (part5 uint8 :offset 12 :size 3) ;; added + (part6 uint8 :offset 15 :size 3) ;; added + (part7 uint8 :offset 18 :size 3) ;; added + (part8 uint8 :offset 21 :size 3) ;; added + (part9 uint8 :offset 24 :size 5) ;; added ;; Tires ?? + ) + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype net-world-game-options (structure) + ((advanced-options game-task-advanced-options :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype net-world-staging-player (structure) + ((vehicle-load-parts vehicle-load-parts :offset-assert 0) + (vehicle-tuning-info tuning-info :offset-assert 8) + (vehicle-selection int8 :offset-assert 12) + (desired-driver-selection int8 :offset-assert 13) + (flags uint8 :offset-assert 14) + (team-id uint8 :offset-assert 15) + (player-num int8 :offset-assert 16) + (base-color rgba :offset-assert 20) + (stripe-color rgba :offset-assert 24) + (skill-level int32 :offset-assert 28) + ) + :method-count-assert 10 + :size-assert #x20 + :flag-assert #xa00000020 + (:methods + (net-world-staging-player-method-9 () none) ;; 9 + ) + ) + +(deftype green-room-stats (structure) + ((intro-end-time int32 :offset-assert 0) + (scheduled-finish-time int32 :offset-assert 4) + (scores uint16 6 :offset-assert 8) + (laps uint8 6 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x1a + :flag-assert #x90000001a + ) + +(deftype net-world-state (structure) + ((players net-world-staging-player 24 :inline :offset-assert 0) + (assigned-drivers int8 24 :offset-assert 768) + (game-creator-ip uint32 :offset-assert 792) + (game-creation-time uint32 :offset-assert 796) + (game-start-time int32 :offset-assert 800) + (total-pause-time int32 :offset-assert 804) + (task-node-name uint8 32 :offset-assert 808) + (player-ready-flags uint8 :offset-assert 840) + (flags int8 :offset-assert 841) + (max-humans int8 :offset-assert 842) + (buddy-slots int8 :offset-assert 843) + (clan-slots int8 :offset-assert 844) + (ai-slots int8 :offset-assert 845) + (vehicle-class int8 :offset-assert 846) + (options net-world-game-options :inline :offset-assert 848) + (clan-ids uint8 2 :offset-assert 856) + (green-room-stats green-room-stats :inline :offset-assert 864) + (time-of-day int8 :offset-assert 890) + ) + :method-count-assert 9 + :size-assert #x37b + :flag-assert #x90000037b + ) + +(deftype net-world (process-nettable) + ((net-state net-world-state :inline :offset-assert 192) + (is-late-join symbol :offset-assert 1084) + (need-start-load symbol :offset-assert 1088) + (current-garage-player int32 :offset-assert 1092) + (current-garage-spare-slot int32 :offset-assert 1096) + (cont symbol :offset-assert 1100) + (task uint8 :offset-assert 1104) + (task-node uint16 :offset-assert 1106) + (task-info game-task-info :offset-assert 1108) + (task-node-info game-task-node-info :offset-assert 1112) + (player-to-vehicle-slot-map uint8 24 :offset-assert 1116) + (vehicle-slot-to-player-map uint8 6 :offset-assert 1140) + ) + :method-count-assert 87 + :size-assert #x47a + :flag-assert #x5703f0047a + (:methods + (net-world-method-42 () none) ;; 42 + (net-world-method-43 () none) ;; 43 + (net-world-method-44 () none) ;; 44 + (net-world-method-45 () none) ;; 45 + (net-world-method-46 () none) ;; 46 + (net-world-method-47 () none) ;; 47 + (net-world-method-48 () none) ;; 48 + (net-world-method-49 () none) ;; 49 + (net-world-method-50 () none) ;; 50 + (net-world-method-51 () none) ;; 51 + (net-world-method-52 () none) ;; 52 + (net-world-method-53 () none) ;; 53 + (net-world-method-54 () none) ;; 54 + (net-world-method-55 () none) ;; 55 + (net-world-method-56 () none) ;; 56 + (net-world-method-57 () none) ;; 57 + (net-world-method-58 () none) ;; 58 + (net-world-method-59 () none) ;; 59 + (net-world-method-60 () none) ;; 60 + (net-world-method-61 () none) ;; 61 + (net-world-method-62 () none) ;; 62 + (net-world-method-63 () none) ;; 63 + (net-world-method-64 () none) ;; 64 + (net-world-method-65 () none) ;; 65 + (net-world-method-66 () none) ;; 66 + (net-world-method-67 () none) ;; 67 + (net-world-method-68 () none) ;; 68 + (net-world-method-69 () none) ;; 69 + (net-world-method-70 () none) ;; 70 + (net-world-method-71 () none) ;; 71 + (net-world-method-72 () none) ;; 72 + (net-world-method-73 () none) ;; 73 + (net-world-method-74 () none) ;; 74 + (net-world-method-75 () none) ;; 75 + (net-world-method-76 () none) ;; 76 + (net-world-method-77 () none) ;; 77 + (net-world-method-78 () none) ;; 78 + (net-world-method-79 () none) ;; 79 + (net-world-method-80 () none) ;; 80 + (net-world-method-81 () none) ;; 81 + (net-world-method-82 () none) ;; 82 + (net-world-method-83 () none) ;; 83 + (net-world-method-84 () none) ;; 84 + (net-world-method-85 () none) ;; 85 + (net-world-method-86 () none) ;; 86 + ) + ) + +(deftype net-player-name (structure) + ((name uint8 32 :offset-assert 0) + (format-name uint8 64 :offset-assert 32) + ) + :method-count-assert 10 + :size-assert #x60 + :flag-assert #xa00000060 + (:methods + (net-player-name-method-9 () none) ;; 9 + ) + ) + +(deftype prebuilt-ai-vehicle (structure) + ((levname symbol :offset-assert 0) + (v-type uint8 :offset-assert 4) + (load-parts uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype net-vehicle (structure) + ((id uint32 :offset-assert 0) + (name symbol :offset-assert 4) + (levname symbol :offset-assert 8) + (vt uint8 :offset-assert 12) + (ct int8 :offset-assert 13) + (tex-name symbol :offset-assert 16) + (sound-bank symbol :offset-assert 20) + (index int8 :offset-assert 24) + (cup-mask uint32 :offset-assert 28) + (id-variant uint32 :offset-assert 32) + (ai-levels symbol :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) + +(deftype net-driver (structure) + ((id uint32 :offset-assert 0) + (levname symbol :offset-assert 4) + (dt uint8 :offset-assert 8) + (tex-name symbol :offset-assert 12) + (picture-part1 uint32 :offset-assert 16) + (picture-part2 uint32 :offset-assert 20) + (icon-part1 uint32 :offset-assert 24) + (icon-part2 uint32 :offset-assert 28) + (base-color uint32 :offset-assert 32) + (stripe-color uint32 :offset-assert 36) + (ai-car-levels symbol :offset-assert 40) + (driver-name string :offset-assert 44) + (sex int8 :offset-assert 48) + (height int8 :offset-assert 49) + (weight int16 :offset-assert 50) + (eyes symbol :offset-assert 52) + (age int8 :offset-assert 56) + (helmet-scale float :offset-assert 60) + (no-ai symbol :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) + +(deftype race-end-cam (process) + () + :method-count-assert 15 + :size-assert #x90 + :flag-assert #xf00000090 + (:methods + (race-end-cam-method-14 () none) ;; 14 + ) + ) + +;; (define-extern *ghost-info-ptr* object) +;; (define-extern net-play-mode-race? function) +;; (define-extern get-task-node-id-from-location-and-event function) +;; (define-extern *default-vehicle-load-parts* object) +;; (define-extern encode-green-room-stats function) +;; (define-extern decode-green-room-stats function) +;; (define-extern encode-net-world-state function) +;; (define-extern decode-net-world-state function) +;; (define-extern net-world-init-remote function) +;; (define-extern *msg-map-net-world* array) +;; (define-extern *net-process-class-info-net-world* object) +(define-extern *net-world* net-world) +;; (define-extern *net-player-names* object) +;; (define-extern *prebuilt-ai-vehicles* array) +;; (define-extern *net-vehicles* array) +;; (define-extern find-vehicle-info function) +;; (define-extern find-prebuilt-ai-vehicle function) +;; (define-extern *net-drivers* array) +;; (define-extern get-vehicle-name function) +;; (define-extern *protect-vehicle-slot-1* object) +;; (define-extern protect-vehicle-slot-1 function) +;; (define-extern *in-end-of-race-preload* object) +;; (define-extern *race-end-camera-pos-valid* object) +;; (define-extern *race-end-camera-pos* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-logging-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-log-event-header (structure) + ((length uint16 :offset-assert 0) + (type uint8 :offset-assert 2) + (pad int8 :offset-assert 3) + (time int32 :offset-assert 4) + (id int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +;; (define-extern *net-log-tmp-header* object) +;; (define-extern *comment-string* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-powerup-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-powerup-motion-info (basic) + ((motion-hook basic :offset-assert 4) + (flight-end-time int32 :offset-assert 8) + (vel vector :inline :offset-assert 16) + (rest-pos vector :inline :offset-assert 32) + ) + :method-count-assert 13 + :size-assert #x30 + :flag-assert #xd00000030 + (:methods + (net-powerup-motion-info-method-9 () none) ;; 9 + (net-powerup-motion-info-method-10 () none) ;; 10 + (net-powerup-motion-info-method-11 () none) ;; 11 + (net-powerup-motion-info-method-12 () none) ;; 12 + ) + ) +|# + +#| +(deftype net-powerup-spawn-params (structure) + ((tp basic :offset-assert 0) + (pos vector :inline :offset-assert 16) + (lifetime int32 :offset-assert 32) + (initial-owner int8 :offset-assert 36) + (motion-info basic :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +#| +(deftype net-powerup (process-nettable) + ((child-proc uint64 :offset-assert 192) + (die-or-respawn-time int32 :offset-assert 200) + (touched-time int32 :offset-assert 204) + (touched-by int8 :offset-assert 208) + (ignore-frames int8 :offset-assert 209) + (hash-id int16 :offset-assert 210) + (pos vector :inline :offset-assert 224) + (motion-info basic :offset-assert 240) + ) + :method-count-assert 56 + :size-assert #xf4 + :flag-assert #x38007000f4 + (:methods + (net-powerup-method-42 () none) ;; 42 + (net-powerup-method-43 () none) ;; 43 + (net-powerup-method-44 () none) ;; 44 + (net-powerup-method-45 () none) ;; 45 + (net-powerup-method-46 () none) ;; 46 + (net-powerup-method-47 () none) ;; 47 + (net-powerup-method-48 () none) ;; 48 + (net-powerup-method-49 () none) ;; 49 + (net-powerup-method-50 () none) ;; 50 + (net-powerup-method-51 () none) ;; 51 + (net-powerup-method-52 () none) ;; 52 + (net-powerup-method-53 () none) ;; 53 + (net-powerup-method-54 () none) ;; 54 + (net-powerup-method-55 () none) ;; 55 + ) + ) +|# + +#| +(deftype powerup-draw (process-drawable) + ((parent-proc uint64 :offset-assert 248) + (glow-sound basic :offset-assert 256) + (part-time int32 :offset-assert 260) + ) + :method-count-assert 57 + :size-assert #x108 + :flag-assert #x3900800108 + (:methods + (powerup-draw-method-50 () none) ;; 50 + (powerup-draw-method-51 () none) ;; 51 + (powerup-draw-method-52 () none) ;; 52 + (powerup-draw-method-53 () none) ;; 53 + (powerup-draw-method-54 () none) ;; 54 + (powerup-draw-method-55 () none) ;; 55 + (powerup-draw-method-56 () none) ;; 56 + ) + ) +|# + +;; (define-extern *powerup-static-hash* object) +;; (define-extern *powerup-dynamic-hash* object) +;; (define-extern net-powerup-init-remote function) +;; (define-extern *msg-map-net-powerup* array) +;; (define-extern *net-process-class-info-net-powerup* object) +;; (define-extern powerup-draw-init-by-other function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-game-mgr-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-game-mgr-vehicle-info (structure) + ((all-vehicles UNKNOWN 6 :offset-assert 0) + (local-vehicles UNKNOWN 6 :offset-assert 24) + (ai-vehicles UNKNOWN 6 :offset-assert 48) + (player-vehicles UNKNOWN 6 :offset-assert 72) + (all-vehicle-count int8 :offset-assert 96) + (local-vehicle-count int8 :offset-assert 97) + (ai-vehicle-count int8 :offset-assert 98) + (player-vehicle-count int8 :offset-assert 99) + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) +|# + +#| +(deftype net-game-mgr (process-nettable) + ((scheduled-finish-time int32 :offset-assert 188) + (scheduled-finish-mode basic :offset-assert 192) + (sorted-ct int8 :offset-assert 196) + (human-ct int8 :offset-assert 197) + (sorted-ids UNKNOWN 24 :offset-assert 198) + (intro-end-time int32 :offset-assert 224) + (hud-player-indicators UNKNOWN 2 :offset-assert 232) + (net-players basic :offset-assert 248) + (stats-hud UNKNOWN 2 :offset-assert 256) + (intro-handle UNKNOWN 2 :offset-assert 272) + (cheats UNKNOWN 4 :offset-assert 288) + (state-time uint64 :offset-assert 296) + ) + :method-count-assert 80 + :size-assert #x130 + :flag-assert #x5000a00130 + (:methods + (net-game-mgr-method-42 () none) ;; 42 + (net-game-mgr-method-43 () none) ;; 43 + (net-game-mgr-method-44 () none) ;; 44 + (net-game-mgr-method-45 () none) ;; 45 + (net-game-mgr-method-46 () none) ;; 46 + (net-game-mgr-method-47 () none) ;; 47 + (net-game-mgr-method-48 () none) ;; 48 + (net-game-mgr-method-49 () none) ;; 49 + (net-game-mgr-method-50 () none) ;; 50 + (net-game-mgr-method-51 () none) ;; 51 + (net-game-mgr-method-52 () none) ;; 52 + (net-game-mgr-method-53 () none) ;; 53 + (net-game-mgr-method-54 () none) ;; 54 + (net-game-mgr-method-55 () none) ;; 55 + (net-game-mgr-method-56 () none) ;; 56 + (net-game-mgr-method-57 () none) ;; 57 + (net-game-mgr-method-58 () none) ;; 58 + (net-game-mgr-method-59 () none) ;; 59 + (net-game-mgr-method-60 () none) ;; 60 + (net-game-mgr-method-61 () none) ;; 61 + (net-game-mgr-method-62 () none) ;; 62 + (net-game-mgr-method-63 () none) ;; 63 + (net-game-mgr-method-64 () none) ;; 64 + (net-game-mgr-method-65 () none) ;; 65 + (net-game-mgr-method-66 () none) ;; 66 + (net-game-mgr-method-67 () none) ;; 67 + (net-game-mgr-method-68 () none) ;; 68 + (net-game-mgr-method-69 () none) ;; 69 + (net-game-mgr-method-70 () none) ;; 70 + (net-game-mgr-method-71 () none) ;; 71 + (net-game-mgr-method-72 () none) ;; 72 + (net-game-mgr-method-73 () none) ;; 73 + (net-game-mgr-method-74 () none) ;; 74 + (net-game-mgr-method-75 () none) ;; 75 + (net-game-mgr-method-76 () none) ;; 76 + (net-game-mgr-method-77 () none) ;; 77 + (net-game-mgr-method-78 () none) ;; 78 + (net-game-mgr-method-79 () none) ;; 79 + ) + ) +|# + +;; (define-extern net-game-mgr-init-remote function) +;; (define-extern *msg-map-net-game-mgr* array) +;; (define-extern *net-process-class-info-net-game-mgr* object) +;; (define-extern *net-game-mgr* object) +;; (define-extern *should-update-stats* object) +;; (define-extern *stats-adjusted* object) +;; (define-extern current-finish-mode function) +;; (define-extern *fake-continue* continue-point) +;; (define-extern *overall-score-penalty* object) +;; (define-extern *total-pts-at-stake* object) +;; (define-extern *user-pts-at-stake* object) +;; (define-extern *place-suffix* array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-race-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-player-race (net-player) + ((last-on-track-pos vector :inline :offset-assert 400) + (last-on-track-rot quaternion :inline :offset-assert 416) + (wrong-way-bot uint64 :offset-assert 432) + (finish-time int32 :offset-assert 440) + (last-lap-update-time int32 :offset-assert 444) + (last-on-track-time int32 :offset-assert 448) + (last-slice int32 :offset-assert 452) + (last-slice-change-time int32 :offset-assert 456) + (last-valid-vehicle-time uint64 :offset-assert 464) + (rstate racer-state :offset-assert 472) + (current-lap int8 :offset-assert 476) + (racer-idx int8 :offset-assert 477) + (current-lap-start-time int32 :offset-assert 480) + (best-lap-time int32 :offset-assert 484) + (speed-factor float :offset-assert 488) + (max-lap-reached int32 :offset-assert 492) + ) + :method-count-assert 108 + :size-assert #x1f0 + :flag-assert #x6c016001f0 + (:methods + (net-player-race-method-98 () none) ;; 98 + (net-player-race-method-99 () none) ;; 99 + (net-player-race-method-100 () none) ;; 100 + (net-player-race-method-101 () none) ;; 101 + (net-player-race-method-102 () none) ;; 102 + (net-player-race-method-103 () none) ;; 103 + (net-player-race-method-104 () none) ;; 104 + (net-player-race-method-105 () none) ;; 105 + (net-player-race-method-106 () none) ;; 106 + (net-player-race-method-107 () none) ;; 107 + ) + ) +|# + +#| +(deftype net-game-mgr-race (net-game-mgr) + ((lap-count int8 :offset-assert 304) + (racer-ct int8 :offset-assert 305) + (racer-ids UNKNOWN 24 :offset-assert 306) + (race-count-down int8 :offset-assert 330) + (banner uint64 :offset-assert 344) + (hud-clock uint64 :offset-assert 352) + (auto-end-time int32 :offset-assert 360) + ) + :method-count-assert 88 + :size-assert #x16c + :flag-assert #x5800e0016c + (:methods + (net-game-mgr-race-method-80 () none) ;; 80 + (net-game-mgr-race-method-81 () none) ;; 81 + (net-game-mgr-race-method-82 () none) ;; 82 + (net-game-mgr-race-method-83 () none) ;; 83 + (net-game-mgr-race-method-84 () none) ;; 84 + (net-game-mgr-race-method-85 () none) ;; 85 + (net-game-mgr-race-method-86 () none) ;; 86 + (net-game-mgr-race-method-87 () none) ;; 87 + ) + ) +|# + +;; (define-extern net-player-race-init-remote function) +;; (define-extern *msg-map-net-player-race* array) +;; (define-extern *net-process-class-info-net-player-race* object) +;; (define-extern net-game-mgr-race-init-remote function) +;; (define-extern *msg-map-net-game-mgr-race* array) +;; (define-extern *net-process-class-info-net-game-mgr-race* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-game-modes-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype deathmatch-spawner (structure) + ((entity basic :offset-assert 0) + (next-spawn-time uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype deathmatch-spawner-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data UNKNOWN :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype net-player-deathmatch (net-player) + ((target-vehicle uint64 :offset-assert 400) + (last-attack-time uint64 :offset-assert 408) + (last-attacker uint64 :offset-assert 416) + (dropdown-score uint64 :offset-assert 424) + (next-spawn-seed int32 :offset-assert 432) + (last-push-time int32 :offset-assert 436) + (free-powerup-timer uint64 :offset-assert 440) + ) + :method-count-assert 100 + :size-assert #x1c0 + :flag-assert #x64013001c0 + (:methods + (net-player-deathmatch-method-98 () none) ;; 98 + (net-player-deathmatch-method-99 () none) ;; 99 + ) + ) +|# + +#| +(deftype net-game-mgr-deathmatch (net-game-mgr) + ((spawner-array basic :offset-assert 304) + (spawner-count int8 :offset-assert 308) + ) + :method-count-assert 84 + :size-assert #x135 + :flag-assert #x5400b00135 + (:methods + (net-game-mgr-deathmatch-method-80 () none) ;; 80 + (net-game-mgr-deathmatch-method-81 () none) ;; 81 + (net-game-mgr-deathmatch-method-82 () none) ;; 82 + (net-game-mgr-deathmatch-method-83 () none) ;; 83 + ) + ) +|# + +#| +(deftype net-player-assassin (net-player-deathmatch) + () + :method-count-assert 100 + :size-assert #x1c0 + :flag-assert #x64013001c0 + ) +|# + +#| +(deftype net-game-mgr-assassin (net-game-mgr-deathmatch) + ((mark UNKNOWN 24 :offset-assert 305) + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 86 + :size-assert #x14d + :flag-assert #x5600c0014d + (:methods + (net-game-mgr-assassin-method-84 () none) ;; 84 + (net-game-mgr-assassin-method-85 () none) ;; 85 + ) + ) +|# + +#| +(deftype net-player-deathrace (net-player-race) + ((impact-death basic :offset-assert 496) + (focus-player-index int8 :offset-assert 500) + (combo-score int32 :offset-assert 504) + (combo-count int32 :offset-assert 508) + (last-score-time int32 :offset-assert 512) + (combo-hud uint64 :offset-assert 520) + ) + :method-count-assert 111 + :size-assert #x210 + :flag-assert #x6f01800210 + (:methods + (net-player-deathrace-method-108 () none) ;; 108 + (net-player-deathrace-method-109 () none) ;; 109 + (net-player-deathrace-method-110 () none) ;; 110 + ) + ) +|# + +#| +(deftype net-game-mgr-deathrace (net-game-mgr-race) + ((next-drone-spawn-time uint64 :offset-assert 368) + ) + :method-count-assert 88 + :size-assert #x178 + :flag-assert #x5800f00178 + ) +|# + +#| +(deftype net-game-mgr-football (net-game-mgr-race) + ((borrow-level basic :offset-assert 364) + (intro-hud-manager UNKNOWN 2 :offset-assert 368) + (intro-sfx UNKNOWN 2 :offset-assert 384) + ) + :method-count-assert 88 + :size-assert #x188 + :flag-assert #x5801000188 + ) +|# + +#| +(deftype net-player-football (net-player-race) + ((my-potato uint64 :offset-assert 496) + (slow-warning uint64 :offset-assert 504) + (pt-multiplier-timeout uint64 :offset-assert 512) + (aux-hud uint64 :offset-assert 520) + (turbo-part-tracker uint64 :offset-assert 528) + (turbo-meter float :offset-assert 536) + (cheat-award-time uint64 :offset-assert 544) + (cheat-turbo-fill float :offset-assert 552) + (bing UNKNOWN 2 :offset-assert 556) + ) + :method-count-assert 108 + :size-assert #x234 + :flag-assert #x6c01b00234 + ) +|# + +#| +(deftype powercell-dispenser (net-powerup) + ((original-owner int32 :offset-assert 244) + ) + :method-count-assert 56 + :size-assert #xf8 + :flag-assert #x38007000f8 + ) +|# + +#| +(deftype powercell-dispenser-draw (powerup-draw) + ((subdraw uint64 :offset-assert 264) + ) + :method-count-assert 58 + :size-assert #x110 + :flag-assert #x3a00800110 + (:methods + (powercell-dispenser-draw-method-57 () none) ;; 57 + ) + ) +|# + +#| +(deftype powercell-footie (rigid-body-object) + ((owner uint64 :offset-assert 288) + (plyid int8 :offset-assert 296) + (tip-vel vector :inline :offset-assert 304) + (spring-pos vector :inline :offset-assert 320) + (spring-vel vector :inline :offset-assert 336) + (bolt basic :offset-assert 352) + (loose-part basic :offset-assert 356) + ) + :method-count-assert 91 + :size-assert #x168 + :flag-assert #x5b00e00168 + (:methods + (powercell-footie-method-89 () none) ;; 89 + (powercell-footie-method-90 () none) ;; 90 + ) + ) +|# + +#| +(deftype net-player-artifact (net-player-deathmatch) + ((seek-after int32 :offset-assert 448) + ) + :method-count-assert 100 + :size-assert #x1c4 + :flag-assert #x64014001c4 + ) +|# + +#| +(deftype artifact-location-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data UNKNOWN :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype net-game-mgr-artifact (net-game-mgr-deathmatch) + ((artifact-location-array basic :offset-assert 312) + (artifact-location-count int8 :offset-assert 316) + (artifact UNKNOWN 6 :offset-assert 320) + (num-artifacts int32 :offset-assert 368) + (last-artifact-index int32 :offset-assert 372) + (last-position-index UNKNOWN 6 :offset-assert 376) + (special-rule basic :offset-assert 400) + ) + :method-count-assert 86 + :size-assert #x194 + :flag-assert #x5601100194 + (:methods + (net-game-mgr-artifact-method-84 () none) ;; 84 + (net-game-mgr-artifact-method-85 () none) ;; 85 + ) + ) +|# + +#| +(deftype net-player-beasthunt (net-player-deathmatch) + ((prev-send-score int32 :offset-assert 448) + (last-score-send-time int32 :offset-assert 452) + (big-air-launch-time int32 :offset-assert 456) + (in-big-air basic :offset-assert 460) + (last-fly-time int32 :offset-assert 464) + ) + :method-count-assert 100 + :size-assert #x1d4 + :flag-assert #x64015001d4 + ) +|# + +#| +(deftype net-game-mgr-beasthunt (net-game-mgr-deathmatch) + () + :method-count-assert 84 + :size-assert #x135 + :flag-assert #x5400b00135 + ) +|# + +#| +(deftype net-player-collectable (net-player-deathmatch) + () + :method-count-assert 100 + :size-assert #x1c0 + :flag-assert #x64013001c0 + ) +|# + +#| +(deftype net-game-mgr-collectable (net-game-mgr-deathmatch) + ((steal-mode basic :offset-assert 312) + ) + :method-count-assert 84 + :size-assert #x13c + :flag-assert #x5400b0013c + ) +|# + +;; (define-extern net-player-deathmatch-init-remote function) +;; (define-extern *msg-map-net-player-deathmatch* array) +;; (define-extern *net-process-class-info-net-player-deathmatch* object) +;; (define-extern net-game-mgr-deathmatch-init-remote function) +;; (define-extern *msg-map-net-game-mgr-deathmatch* array) +;; (define-extern *net-process-class-info-net-game-mgr-deathmatch* object) +;; (define-extern net-player-assassin-init-remote function) +;; (define-extern *msg-map-net-player-assassin* array) +;; (define-extern *net-process-class-info-net-player-assassin* object) +;; (define-extern net-game-mgr-assassin-init-remote function) +;; (define-extern *msg-map-net-game-mgr-assassin* array) +;; (define-extern *net-process-class-info-net-game-mgr-assassin* object) +;; (define-extern net-player-deathrace-init-remote function) +;; (define-extern *msg-map-net-player-deathrace* array) +;; (define-extern *net-process-class-info-net-player-deathrace* object) +;; (define-extern net-game-mgr-deathrace-init-remote function) +;; (define-extern *msg-map-net-game-mgr-deathrace* array) +;; (define-extern *net-process-class-info-net-game-mgr-deathrace* object) +;; (define-extern net-game-mgr-football-init-remote function) +;; (define-extern *msg-map-net-game-mgr-football* array) +;; (define-extern *net-process-class-info-net-game-mgr-football* object) +;; (define-extern net-player-football-init-remote function) +;; (define-extern *msg-map-net-player-football* array) +;; (define-extern *net-process-class-info-net-player-football* object) +;; (define-extern powercell-dispenser-init-remote function) +;; (define-extern *msg-map-powercell-dispenser* array) +;; (define-extern *net-process-class-info-powercell-dispenser* object) +;; (define-extern powercell-dispenser-draw-init-remote function) +;; (define-extern *msg-map-powercell-dispenser-draw* array) +;; (define-extern *net-process-class-info-powercell-dispenser-draw* object) +;; (define-extern powercell-footie-init-remote function) +;; (define-extern *msg-map-powercell-footie* array) +;; (define-extern *net-process-class-info-powercell-footie* object) +;; (define-extern net-player-artifact-init-remote function) +;; (define-extern *msg-map-net-player-artifact* array) +;; (define-extern *net-process-class-info-net-player-artifact* object) +;; (define-extern net-game-mgr-artifact-init-remote function) +;; (define-extern *msg-map-net-game-mgr-artifact* array) +;; (define-extern *net-process-class-info-net-game-mgr-artifact* object) +;; (define-extern net-player-beasthunt-init-remote function) +;; (define-extern *msg-map-net-player-beasthunt* array) +;; (define-extern *net-process-class-info-net-player-beasthunt* object) +;; (define-extern net-game-mgr-beasthunt-init-remote function) +;; (define-extern *msg-map-net-game-mgr-beasthunt* array) +;; (define-extern *net-process-class-info-net-game-mgr-beasthunt* object) +;; (define-extern net-player-collectable-init-remote function) +;; (define-extern *msg-map-net-player-collectable* array) +;; (define-extern *net-process-class-info-net-player-collectable* object) +;; (define-extern net-game-mgr-collectable-init-remote function) +;; (define-extern *msg-map-net-game-mgr-collectable* array) +;; (define-extern *net-process-class-info-net-game-mgr-collectable* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-game-modes2-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-player-ctf (net-player-deathmatch) + ((info-text-display-stop-time int32 :offset-assert 448) + (flag-event uint64 :offset-assert 456) + (indicate-flag-event-stop-time int32 :offset-assert 464) + ) + :method-count-assert 103 + :size-assert #x1d4 + :flag-assert #x67015001d4 + (:methods + (net-player-ctf-method-100 () none) ;; 100 + (net-player-ctf-method-101 () none) ;; 101 + (net-player-ctf-method-102 () none) ;; 102 + ) + ) +|# + +#| +(deftype net-game-mgr-ctf (net-game-mgr-deathmatch) + ((red-spawners-count int8 :offset-assert 309) + ) + :method-count-assert 84 + :size-assert #x136 + :flag-assert #x5400b00136 + ) +|# + +#| +(deftype ctf-flag (process-focusable) + ((carrier uint64 :offset-assert 256) + (grabbed-time int32 :offset-assert 264) + (carried-part uint64 :offset-assert 272) + (task-arrow uint64 :offset-assert 280) + (team uint8 :offset-assert 288) + (count uint8 :offset-assert 289) + (spawn-pos vector :inline :offset-assert 304) + (last-good-pos vector :inline :offset-assert 320) + ) + :method-count-assert 78 + :size-assert #x150 + :flag-assert #x4e00c00150 + (:methods + (ctf-flag-method-59 () none) ;; 59 + (ctf-flag-method-60 () none) ;; 60 + (ctf-flag-method-61 () none) ;; 61 + (ctf-flag-method-62 () none) ;; 62 + (ctf-flag-method-63 () none) ;; 63 + (ctf-flag-method-64 () none) ;; 64 + (ctf-flag-method-65 () none) ;; 65 + (ctf-flag-method-66 () none) ;; 66 + (ctf-flag-method-67 () none) ;; 67 + (ctf-flag-method-68 () none) ;; 68 + (ctf-flag-method-69 () none) ;; 69 + (ctf-flag-method-70 () none) ;; 70 + (ctf-flag-method-71 () none) ;; 71 + (ctf-flag-method-72 () none) ;; 72 + (ctf-flag-method-73 () none) ;; 73 + (ctf-flag-method-74 () none) ;; 74 + (ctf-flag-method-75 () none) ;; 75 + (ctf-flag-method-76 () none) ;; 76 + (ctf-flag-method-77 () none) ;; 77 + ) + ) +|# + +#| +(deftype net-player-rushhour (net-player-race) + ((combo-score int32 :offset-assert 496) + (combo-count int32 :offset-assert 500) + (last-score-time int32 :offset-assert 504) + (combo-hud uint64 :offset-assert 512) + (drone-type uint16 :offset-assert 520) + (powerup-timer uint64 :offset-assert 536) + ) + :method-count-assert 111 + :size-assert #x220 + :flag-assert #x6f01900220 + (:methods + (net-player-rushhour-method-108 () none) ;; 108 + (net-player-rushhour-method-109 () none) ;; 109 + (net-player-rushhour-method-110 () none) ;; 110 + ) + ) +|# + +#| +(deftype net-game-mgr-rushhour (net-game-mgr-race) + ((next-drone-spawn-time uint64 :offset-assert 368) + (drone-type-counter int32 :offset-assert 376) + ) + :method-count-assert 88 + :size-assert #x17c + :flag-assert #x5800f0017c + ) +|# + +#| +(deftype net-game-mgr-king-of-hill (net-game-mgr-deathmatch) + ((king-id int16 :offset-assert 310) + (kingfx-part UNKNOWN 4 :offset-assert 312) + ) + :method-count-assert 85 + :size-assert #x148 + :flag-assert #x5500c00148 + (:methods + (net-game-mgr-king-of-hill-method-84 () none) ;; 84 + ) + ) +|# + +#| +(deftype net-player-king-of-hill (net-player-deathmatch) + ((zap-interval uint64 :offset-assert 448) + ) + :method-count-assert 100 + :size-assert #x1c8 + :flag-assert #x64014001c8 + ) +|# + +#| +(deftype net-player-time-box (net-player-race) + ((player-timer float :offset-assert 496) + (start-time uint32 :offset-assert 500) + (freeze-time-total uint32 :offset-assert 504) + (freeze-time-current uint32 :offset-assert 508) + (freeze-time-remaining uint32 :offset-assert 512) + (start-freeze-time uint32 :offset-assert 516) + (total-race-time uint32 :offset-assert 520) + (lose-time uint32 :offset-assert 524) + (pickup-total int32 :offset-assert 528) + (pickup-collected int32 :offset-assert 532) + (bonus-time int32 :offset-assert 536) + ) + :method-count-assert 109 + :size-assert #x21c + :flag-assert #x6d0190021c + (:methods + (net-player-time-box-method-108 () none) ;; 108 + ) + ) +|# + +#| +(deftype net-game-mgr-time-box (net-game-mgr-race) + ((total-race-time uint32 :offset-assert 364) + (sound-id uint32 :offset-assert 368) + ) + :method-count-assert 88 + :size-assert #x174 + :flag-assert #x5800f00174 + ) +|# + +#| +(deftype net-player-time-trial (net-player-race) + () + :method-count-assert 108 + :size-assert #x1f0 + :flag-assert #x6c016001f0 + ) +|# + +#| +(deftype net-game-mgr-time-trial (net-game-mgr-race) + () + :method-count-assert 88 + :size-assert #x16c + :flag-assert #x5800e0016c + ) +|# + +#| +(deftype net-game-mgr-training (net-game-mgr-deathrace) + ((spawn-ai-num int32 :offset-assert 376) + (ai-num int32 :offset-assert 380) + (ais-move? basic :offset-assert 384) + (ai-attack? basic :offset-assert 388) + (can-shoot? basic :offset-assert 392) + ) + :method-count-assert 88 + :size-assert #x18c + :flag-assert #x580100018c + ) +|# + +#| +(deftype net-player-boss-battle (net-player-race) + ((give-weapon-timer uint64 :offset-assert 496) + ) + :method-count-assert 114 + :size-assert #x1f8 + :flag-assert #x72017001f8 + (:methods + (net-player-boss-battle-method-108 () none) ;; 108 + (net-player-boss-battle-method-109 () none) ;; 109 + (net-player-boss-battle-method-110 () none) ;; 110 + (net-player-boss-battle-method-111 () none) ;; 111 + (net-player-boss-battle-method-112 () none) ;; 112 + (net-player-boss-battle-method-113 () none) ;; 113 + ) + ) +|# + +#| +(deftype net-game-mgr-boss-battle (net-game-mgr-race) + ((player-won? basic :offset-assert 364) + (player-lost? basic :offset-assert 368) + (lose-time uint64 :offset-assert 376) + ) + :method-count-assert 88 + :size-assert #x180 + :flag-assert #x5800f00180 + ) +|# + +;; (define-extern *ctf-flag* object) +;; (define-extern *ctf-red-base* object) +;; (define-extern *ctf-blue-base* object) +;; (define-extern net-player-ctf-init-remote function) +;; (define-extern *msg-map-net-player-ctf* array) +;; (define-extern *net-process-class-info-net-player-ctf* object) +;; (define-extern net-game-mgr-ctf-init-remote function) +;; (define-extern *msg-map-net-game-mgr-ctf* array) +;; (define-extern *net-process-class-info-net-game-mgr-ctf* object) +;; (define-extern ctf-flag-init-remote function) +;; (define-extern *msg-map-ctf-flag* array) +;; (define-extern *net-process-class-info-ctf-flag* object) +;; (define-extern net-player-rushhour-init-remote function) +;; (define-extern *msg-map-net-player-rushhour* array) +;; (define-extern *net-process-class-info-net-player-rushhour* object) +;; (define-extern net-game-mgr-rushhour-init-remote function) +;; (define-extern *msg-map-net-game-mgr-rushhour* array) +;; (define-extern *net-process-class-info-net-game-mgr-rushhour* object) +;; (define-extern net-game-mgr-king-of-hill-init-remote function) +;; (define-extern *msg-map-net-game-mgr-king-of-hill* array) +;; (define-extern *net-process-class-info-net-game-mgr-king-of-hill* object) +;; (define-extern net-player-king-of-hill-init-remote function) +;; (define-extern *msg-map-net-player-king-of-hill* array) +;; (define-extern *net-process-class-info-net-player-king-of-hill* object) +;; (define-extern net-player-time-box-init-remote function) +;; (define-extern *msg-map-net-player-time-box* array) +;; (define-extern *net-process-class-info-net-player-time-box* object) +;; (define-extern net-game-mgr-time-box-init-remote function) +;; (define-extern *msg-map-net-game-mgr-time-box* array) +;; (define-extern *net-process-class-info-net-game-mgr-time-box* object) +;; (define-extern net-player-time-trial-init-remote function) +;; (define-extern *msg-map-net-player-time-trial* array) +;; (define-extern *net-process-class-info-net-player-time-trial* object) +;; (define-extern net-game-mgr-time-trial-init-remote function) +;; (define-extern *msg-map-net-game-mgr-time-trial* array) +;; (define-extern *net-process-class-info-net-game-mgr-time-trial* object) +;; (define-extern net-game-mgr-training-init-remote function) +;; (define-extern *msg-map-net-game-mgr-training* array) +;; (define-extern *net-process-class-info-net-game-mgr-training* object) +;; (define-extern net-player-boss-battle-init-remote function) +;; (define-extern *msg-map-net-player-boss-battle* array) +;; (define-extern *net-process-class-info-net-player-boss-battle* object) +;; (define-extern net-game-mgr-boss-battle-init-remote function) +;; (define-extern *msg-map-net-game-mgr-boss-battle* array) +;; (define-extern *net-process-class-info-net-game-mgr-boss-battle* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-simple-destruct-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-simple-destruct (process-focusable) + ((hit-points float :offset-assert 256) + (incoming-attack-id int32 :offset-assert 260) + (impact-velocity vector :inline :offset-assert 272) + ) + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + (:methods + (net-simple-destruct-method-59 () none) ;; 59 + (net-simple-destruct-method-60 () none) ;; 60 + (net-simple-destruct-method-61 () none) ;; 61 + (net-simple-destruct-method-62 () none) ;; 62 + (net-simple-destruct-method-63 () none) ;; 63 + (net-simple-destruct-method-64 () none) ;; 64 + (net-simple-destruct-method-65 () none) ;; 65 + (net-simple-destruct-method-66 () none) ;; 66 + (net-simple-destruct-method-67 () none) ;; 67 + (net-simple-destruct-method-68 () none) ;; 68 + (net-simple-destruct-method-69 () none) ;; 69 + ) + ) +|# + +#| +(deftype net-simple-destruct-mgr (process-nettable) + () + :method-count-assert 48 + :size-assert #xbc + :flag-assert #x30003000bc + (:methods + (net-simple-destruct-mgr-method-42 () none) ;; 42 + (net-simple-destruct-mgr-method-43 () none) ;; 43 + (net-simple-destruct-mgr-method-44 () none) ;; 44 + (net-simple-destruct-mgr-method-45 () none) ;; 45 + (net-simple-destruct-mgr-method-46 () none) ;; 46 + (net-simple-destruct-mgr-method-47 () none) ;; 47 + ) + ) +|# + +;; (define-extern net-simple-destruct-mgr-init-remote function) +;; (define-extern *msg-map-net-simple-destruct-mgr* array) +;; (define-extern *net-process-class-info-net-simple-destruct-mgr* object) +;; (define-extern *net-simple-destruct-mgr* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-hud-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-util-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-proxy-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-projectile-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-projectile (projectile) + () + :method-count-assert 75 + :size-assert #x231 + :flag-assert #x4b01b00231 + (:methods + (net-projectile-method-72 () none) ;; 72 + (net-projectile-method-73 () none) ;; 73 + (net-projectile-method-74 () none) ;; 74 + ) + ) +|# + +;; (define-extern net-projectile-init-remote function) +;; (define-extern *msg-map-net-projectile* array) +;; (define-extern *net-process-class-info-net-projectile* object) +;; (define-extern spawn-net-projectile function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-time-trial-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype timetrial-snapshot (structure) + ((pos-x-lo uint16 :offset-assert 0) + (pos-y uint16 :offset-assert 2) + (pos-z-lo uint16 :offset-assert 4) + (pos-xz-hi uint8 :offset-assert 6) + (rot UNKNOWN 3 :offset-assert 7) + (flags uint8 :offset-assert 10) + (skip uint8 :offset-assert 11) + ) + :method-count-assert 13 + :size-assert #xc + :flag-assert #xd0000000c + (:methods + (timetrial-snapshot-method-9 () none) ;; 9 + (timetrial-snapshot-method-10 () none) ;; 10 + (timetrial-snapshot-method-11 () none) ;; 11 + (timetrial-snapshot-method-12 () none) ;; 12 + ) + ) +|# + +#| +(deftype timetrial-recording (structure) + ((crc uint32 :offset-assert 0) + (total-snaps uint32 :offset-assert 4) + (total-time uint32 :offset-assert 8) + (task-node uint32 :offset-assert 12) + (acct-id uint32 :offset-assert 16) + (player-info net-world-staging-player :inline :offset-assert 24) + (player-name UNKNOWN 32 :offset-assert 56) + (cur-idx int32 :offset-assert 88) + (start-pos int32 :offset-assert 92) + (cur-snap-time int32 :offset-assert 96) + (data UNKNOWN :dynamic :offset-assert 100) + ) + :method-count-assert 14 + :size-assert #x64 + :flag-assert #xe00000064 + (:methods + (timetrial-recording-method-9 () none) ;; 9 + (timetrial-recording-method-10 () none) ;; 10 + (timetrial-recording-method-11 () none) ;; 11 + (timetrial-recording-method-12 () none) ;; 12 + (timetrial-recording-method-13 () none) ;; 13 + ) + ) +|# + +;; (define-extern *ghosts-enabled* object) +;; (define-extern *ghost-rec* object) +;; (define-extern *ghost-upload-proc* object) +;; (define-extern *ghost-download-proc* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-eco-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype eco-perm (structure) + ((time int32 :offset-assert 0) + (owner int8 :offset-assert 4) + (hit-by-local int8 :offset-assert 5) + (flags uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype eco (process-drawable) + () + :method-count-assert 56 + :size-assert #xf8 + :flag-assert #x38007000f8 + (:methods + (eco-method-50 () none) ;; 50 + (eco-method-51 () none) ;; 51 + (eco-method-52 () none) ;; 52 + (eco-method-53 () none) ;; 53 + (eco-method-54 () none) ;; 54 + (eco-method-55 () none) ;; 55 + ) + ) +|# + +#| +(deftype eco-mgr (process-nettable) + () + :method-count-assert 51 + :size-assert #xbc + :flag-assert #x33003000bc + (:methods + (eco-mgr-method-42 () none) ;; 42 + (eco-mgr-method-43 () none) ;; 43 + (eco-mgr-method-44 () none) ;; 44 + (eco-mgr-method-45 () none) ;; 45 + (eco-mgr-method-46 () none) ;; 46 + (eco-mgr-method-47 () none) ;; 47 + (eco-mgr-method-48 () none) ;; 48 + (eco-mgr-method-49 () none) ;; 49 + (eco-mgr-method-50 () none) ;; 50 + ) + ) +|# + +;; (define-extern eco-mgr-init-remote function) +;; (define-extern *msg-map-eco-mgr* array) +;; (define-extern *net-process-class-info-eco-mgr* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menu2-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype menu-string (hud-string) + () + :method-count-assert 10 + :size-assert #x44 + :flag-assert #xa00000044 + ) +|# + +#| +(deftype menu-option-info (structure) + ((display-name-id uint32 :offset-assert 0) + (sym basic :offset-assert 4) + (extra basic :offset-assert 8) + (extra-object basic :offset-assert 8) + (extra-int int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ;; field extra uses ~A with a signed load. field extra-object uses ~A with a signed load. + ) +|# + +#| +(deftype strings-extra-struct (structure) + ((text UNKNOWN 128 :offset-assert 0) + (extra basic :offset-assert 128) + (extra-object basic :offset-assert 128) + (extra-int int32 :offset-assert 128) + (extra-int16 UNKNOWN 2 :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ;; field extra uses ~A with a signed load. field extra-object uses ~A with a signed load. + ) +|# + +#| +(deftype menu-selection-struct (structure) + ((array-ptr basic :offset-assert 0) + (selection-index int32 :offset-assert 4) + (last-sym basic :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype animation-info (structure) + ((enter-anim int32 :offset-assert 0) + (exit-anim int32 :offset-assert 4) + (running-anim int32 :offset-assert 8) + (anim-speed float :offset-assert 12) + (enter-delay uint32 :offset-assert 16) + (3d-offset vector :inline :offset-assert 32) + (3d-offset-x float :offset-assert 32) + (3d-offset-y float :offset-assert 36) + (3d-offset-z float :offset-assert 40) + (3d-offset-w float :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype base-menu-info (structure) + ((menu-type basic :offset-assert 0) + (children basic :offset-assert 4) + (name-symbol basic :offset-assert 8) + (3d-menu-type basic :offset-assert 12) + (trans-info animation-info :offset-assert 16) + (joint-index int8 :offset-assert 20) + (joint-index-2 int8 :offset-assert 21) + (box-index int8 :offset-assert 22) + (flags uint8 :offset-assert 23) + (joints basic :offset-assert 24) + (anim-delay uint32 :offset-assert 28) + (width int32 :offset-assert 32) + (height int32 :offset-assert 36) + (scale-y float :offset-assert 40) + (scale-x float :offset-assert 44) + (user-data uint32 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x34 + :flag-assert #x900000034 + ) +|# + +#| +(deftype base-menu (process-drawable) + ((child-handles basic :offset-assert 248) + (info-ptr base-menu-info :offset-assert 252) + (focused? basic :offset-assert 256) + (3d-menu-2d-offset vector :inline :offset-assert 272) + (pos-x float :offset-assert 288) + (pos-y float :offset-assert 292) + (pos-z float :offset-assert 296) + (menu-time uint32 :offset-assert 300) + (width int32 :offset-assert 304) + (height int32 :offset-assert 308) + (width-array basic :offset-assert 312) + (height-array basic :offset-assert 316) + (joint-mat matrix :inline :offset-assert 320) + (offset-matrix matrix :inline :offset-assert 384) + (j-mod joint-mod-set-world :inline :offset-assert 448) + (extra-offset vector :inline :offset-assert 512) + (pad int8 :offset-assert 528) + (hidden? basic :offset-assert 532) + ) + :method-count-assert 65 + :size-assert #x218 + :flag-assert #x4101900218 + (:methods + (base-menu-method-50 () none) ;; 50 + (base-menu-method-51 () none) ;; 51 + (base-menu-method-52 () none) ;; 52 + (base-menu-method-53 () none) ;; 53 + (base-menu-method-54 () none) ;; 54 + (base-menu-method-55 () none) ;; 55 + (base-menu-method-56 () none) ;; 56 + (base-menu-method-57 () none) ;; 57 + (base-menu-method-58 () none) ;; 58 + (base-menu-method-59 () none) ;; 59 + (base-menu-method-60 () none) ;; 60 + (base-menu-method-61 () none) ;; 61 + (base-menu-method-62 () none) ;; 62 + (base-menu-method-63 () none) ;; 63 + (base-menu-method-64 () none) ;; 64 + ) + ) +|# + +#| +(deftype jakx-logo-menu (base-menu) + () + :method-count-assert 65 + :size-assert #x218 + :flag-assert #x4101900218 + ) +|# + +#| +(deftype map-menu (base-menu) + () + :method-count-assert 66 + :size-assert #x218 + :flag-assert #x4201900218 + (:methods + (map-menu-method-65 () none) ;; 65 + ) + ) +|# + +#| +(deftype selection-menu-manager (base-menu) + ((selection-index int32 :offset-assert 536) + (prev-selection-index int32 :offset-assert 540) + (enabled basic :offset-assert 544) + ) + :method-count-assert 67 + :size-assert #x224 + :flag-assert #x4301a00224 + (:methods + (selection-menu-manager-method-65 () none) ;; 65 + (selection-menu-manager-method-66 () none) ;; 66 + ) + ) +|# + +#| +(deftype sprite-info (structure) + ((offset vector :inline :offset-assert 0) + (offset-x float :offset-assert 0) + (offset-y float :offset-assert 4) + (offset-z float :offset-assert 8) + (offset-w float :offset-assert 12) + (pos-z int32 :offset-assert 16) + (tex-name basic :offset-assert 20) + (tex-id uint32 :offset-assert 24) + (scale-x float :offset-assert 28) + (scale-y float :offset-assert 32) + (flags uint16 :offset-assert 36) + (offset-from-index int8 :offset-assert 38) + (offset-dir uint8 :offset-assert 39) + (texture-index int8 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x29 + :flag-assert #x900000029 + ) +|# + +#| +(deftype transition-info (animation-info) + ((enter-pos-x float :offset-assert 48) + (enter-pos-y float :offset-assert 52) + (enter-alpha float :offset-assert 56) + (running-alpha float :offset-assert 60) + (exit-alpha float :offset-assert 64) + (running-pos-x float :offset-assert 68) + (running-pos-y float :offset-assert 72) + (exit-pos-x float :offset-assert 76) + (exit-pos-y float :offset-assert 80) + (move-rate float :offset-assert 84) + (scroll-offset-x int32 :offset-assert 88) + (scroll-offset-y int32 :offset-assert 92) + (scroll-rate float :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) +|# + +#| +(deftype sprite-menu-info (base-menu-info) + ((trans-info transition-info :offset-assert 16) + (sprites-info basic :offset-assert 52) + (color uint32 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype hud-sprite-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data UNKNOWN :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype sprite-menu (base-menu) + ((sprites basic :offset-assert 536) + (alpha float :offset-assert 540) + ) + :method-count-assert 66 + :size-assert #x220 + :flag-assert #x4201900220 + (:methods + (sprite-menu-method-65 () none) ;; 65 + ) + ) +|# + +#| +(deftype menu-prim-strip-client (prim-client) + ((strip basic :offset-assert 4) + ) + :method-count-assert 11 + :size-assert #x8 + :flag-assert #xb00000008 + (:methods + (menu-prim-strip-client-method-10 () none) ;; 10 + ) + ) +|# + +#| +(deftype prim-strip-menu (sprite-menu) + ((p-client-array basic :offset-assert 544) + (colors basic :offset-assert 548) + ) + :method-count-assert 67 + :size-assert #x228 + :flag-assert #x4301a00228 + (:methods + (prim-strip-menu-method-66 () none) ;; 66 + ) + ) +|# + +#| +(deftype sprite-ptr-info (sprite-info) + ((sprite-ptr basic :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype sprite-ptr-menu-info (sprite-menu-info) + () + :method-count-assert 9 + :size-assert #x3c + :flag-assert #x90000003c + ) +|# + +#| +(deftype sprite-ptr-menu (prim-strip-menu) + () + :method-count-assert 67 + :size-assert #x228 + :flag-assert #x4301a00228 + ) +|# + +#| +(deftype index-sprite-list-menu-info (sprite-menu-info) + ((index-list basic :offset-assert 68) + (horiz-list? basic :offset-assert 72) + (item-offset int32 :offset-assert 76) + (color-array basic :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x54 + :flag-assert #x900000054 + ) +|# + +#| +(deftype index-sprite-list-menu (prim-strip-menu) + ((index-list basic :offset-assert 552) + ) + :method-count-assert 67 + :size-assert #x22c + :flag-assert #x4301a0022c + ) +|# + +#| +(deftype string-info (structure) + ((offset vector :inline :offset-assert 0) + (offset-x float :offset-assert 0) + (offset-y float :offset-assert 4) + (offset-z float :offset-assert 8) + (offset-w float :offset-assert 12) + (pos-z int32 :offset-assert 16) + (id uint32 :offset-assert 20) + (font-scale float :offset-assert 24) + (width float :offset-assert 28) + (height float :offset-assert 32) + (string-ptr basic :offset-assert 36) + (string-ptr-needs-format basic :offset-assert 40) + (font-flags uint16 :offset-assert 44) + (font-color uint8 :offset-assert 46) + (font-color-2 uint8 :offset-assert 47) + (font-color-3 uint8 :offset-assert 48) + (offset-dir uint8 :offset-assert 49) + (offset-from-index int8 :offset-assert 50) + (offset-type-from int8 :offset-assert 51) + (is-player-string basic :offset-assert 52) + (tmp-talking int32 :offset-assert 56) + (extra-arg basic :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype menu-string-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data UNKNOWN :dynamic :offset-assert 16) + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype string-menu-info (sprite-menu-info) + ((strings-info basic :offset-assert 60) + (text-ids basic :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +#| +(deftype string-menu (prim-strip-menu) + ((strings basic :offset-assert 552) + (text-ids basic :offset-assert 556) + ) + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + (:methods + (string-menu-method-67 () none) ;; 67 + (string-menu-method-68 () none) ;; 68 + ) + ) +|# + +#| +(deftype options-bar-indicator (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype game-text-menu-info (string-menu-info) + ((text-id uint32 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) +|# + +#| +(deftype game-text-menu (string-menu) + ((text-id uint32 :offset-assert 560) + ) + :method-count-assert 69 + :size-assert #x234 + :flag-assert #x4501b00234 + ) +|# + +#| +(deftype dynamic-string-menu (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype dynamic-driver-info (dynamic-string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype dropdown-trans-info (transition-info) + ((selected-offset vector :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) +|# + +#| +(deftype dropdown-item-info (string-menu-info) + ((trans-info dropdown-trans-info :offset-assert 16) + (selection-box-width int32 :offset-assert 68) + (selection-box-height int32 :offset-assert 72) + (selection-type basic :offset-assert 76) + (selection-extra int32 :offset-assert 80) + (selection-box-offset vector :inline :offset-assert 96) + (selection-box-offset-x float :offset-assert 96) + (selection-box-offset-y float :offset-assert 100) + (selection-box-offset-z float :offset-assert 104) + (selection-box-offset-w float :offset-assert 108) + (selection-box-color uint32 :offset-assert 112) + (down-index-modifier int8 :offset-assert 116) + (up-index-modifier int8 :offset-assert 117) + (left-index-modifier int8 :offset-assert 118) + (right-index-modifier int8 :offset-assert 119) + (selection-box-texture-index int8 :offset-assert 120) + (reset-pad uint8 :offset-assert 121) + ) + :method-count-assert 9 + :size-assert #x7a + :flag-assert #x90000007a + ) +|# + +#| +(deftype dropdown-item (string-menu) + ((selected basic :offset-assert 560) + (p-client-selection basic :offset-assert 564) + (prev-selection int32 :offset-assert 568) + (enabled basic :offset-assert 572) + (selected-offset vector :inline :offset-assert 576) + ) + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + (:methods + (dropdown-item-method-69 () none) ;; 69 + ) + ) +|# + +#| +(deftype item-list-selection-info (dropdown-item-info) + ((menu-options-info-sym basic :offset-assert 124) + (add-string uint32 :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) +|# + +#| +(deftype item-list-selection (dropdown-item) + ((menu-options-info-ptr menu-selection-struct :offset-assert 592) + (selection-type basic :offset-assert 596) + (selection-index int32 :offset-assert 600) + ) + :method-count-assert 70 + :size-assert #x25c + :flag-assert #x4601d0025c + ) +|# + +#| +(deftype item-list-driver-selection (item-list-selection) + () + :method-count-assert 70 + :size-assert #x25c + :flag-assert #x4601d0025c + ) +|# + +#| +(deftype item-num-selection-info (item-list-selection-info) + () + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) +|# + +#| +(deftype menu-num-info (structure) + ((min int32 :offset-assert 0) + (max int32 :offset-assert 4) + (current-num int32 :offset-assert 8) + (last-num int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype item-num-selection (item-list-selection) + ((num-selection int32 :offset-assert 604) + (sound-id uint32 :offset-assert 608) + ) + :method-count-assert 70 + :size-assert #x264 + :flag-assert #x4601e00264 + ) +|# + +#| +(deftype item-num-max-selection (item-num-selection) + () + :method-count-assert 70 + :size-assert #x268 + :flag-assert #x4601e00268 + ) +|# + +#| +(deftype games-list-selection (string-menu) + ((selection-index int8 :offset-assert 560) + ) + :method-count-assert 69 + :size-assert #x231 + :flag-assert #x4501b00231 + ) +|# + +#| +(deftype player-ct-string-menu (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype string-list-selection (dropdown-item) + ((selection-index int8 :offset-assert 592) + ) + :method-count-assert 70 + :size-assert #x251 + :flag-assert #x4601d00251 + ) +|# + +#| +(deftype basic-list-selection-info (string-menu-info) + ((menu-options-info-sym basic :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) +|# + +#| +(deftype basic-list-selection (string-menu) + ((menu-options-info-ptr basic :offset-assert 560) + (selection-index int8 :offset-assert 564) + ) + :method-count-assert 69 + :size-assert #x235 + :flag-assert #x4501b00235 + ) +|# + +#| +(deftype big-text-menu-info (sprite-menu-info) + ((string-info string-info :offset-assert 60) + (text basic :offset-assert 64) + (off-2d-x float :offset-assert 68) + (off-2d-y float :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) +|# + +#| +(deftype big-text-menu (sprite-menu) + ((big-text basic :offset-assert 544) + (vert-offset float :offset-assert 548) + (vert-extent float :offset-assert 552) + (temp-string basic :offset-assert 556) + ) + :method-count-assert 67 + :size-assert #x230 + :flag-assert #x4301a00230 + (:methods + (big-text-menu-method-66 () none) ;; 66 + ) + ) +|# + +;; (define-extern *jakx-logo-seen?* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menu2-lists ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-configuration (structure) + ((load-parts uint64 :offset-assert 0) + (id uint32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype selection-cache (structure) + ((state basic :offset-assert 0) + (selection-type basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +;; (define-extern *menu-level-info-array* array) +;; (define-extern *menu-level-info-beta-array* array) +;; (define-extern *game-connection-info-array* array) +;; (define-extern *menu-events-info-all* array) +;; (define-extern *menu-events-info-beta* array) +;; (define-extern *lobby-entrance-info-array* array) +;; (define-extern *num-local-players-info-array* array) +;; (define-extern *error-lobby-array* array) +;; (define-extern *mirror-mode-array* array) +;; (define-extern *mirror-mode* object) +;; (define-extern *num-players-info* object) +;; (define-extern *ai-num-players-info* object) +;; (define-extern *buddy-num-players-info* object) +;; (define-extern *clan-num-players-info* object) +;; (define-extern *sfx-volume-info* object) +;; (define-extern *music-volume-info* object) +;; (define-extern *speech-volume-info* object) +;; (define-extern *brightness-info* object) +;; (define-extern *contrast-info* object) +;; (define-extern *menu-events-info-array* object) +;; (define-extern *menu-level-array* object) +;; (define-extern *menu-vehicle-array* object) +;; (define-extern *menu-driver-array* object) +;; (define-extern *menu-vehicle-parts-array* object) +;; (define-extern *player-index* array) +;; (define-extern *menu-ready-room-stats-extra-array* array) +;; (define-extern *menu-ready-room-instruct-array* array) +;; (define-extern *menu-ready-room-vehicle-array* array) +;; (define-extern *menu-ready-room-avatar-array* array) +;; (define-extern *ready-room-x-string* array) +;; (define-extern *menu-split-selection-string* array) +;; (define-extern *player-headphones?-list* array) +;; (define-extern *player-ready?-list* array) +;; (define-extern *split-screen-sprite-list* array) +;; (define-extern *graphic-options-sprite-list* array) +;; (define-extern *sound-options-sprite-list* array) +;; (define-extern *adventure-bottom-bar-ids* array) +;; (define-extern *adventure-bottom-bar-dpad-ids* array) +;; (define-extern *adventure-bottom-bar-triangle-ids* array) +;; (define-extern *adventure-top-bar-title-ids* array) +;; (define-extern *adventure-garage-reminder-ids* array) +;; (define-extern *adventure-city-ids* array) +;; (define-extern *adventure-venue-ids* array) +;; (define-extern *secrets-accept-ids* array) +;; (define-extern *player-names-extra* array) +;; (define-extern *driver-owner-dynamic-strings* array) +;; (define-extern *driver-taken-string* array) +;; (define-extern *driver-name* array) +;; (define-extern *driver-height* array) +;; (define-extern *driver-weight* array) +;; (define-extern *driver-sex* array) +;; (define-extern *driver-eyes* array) +;; (define-extern *driver-age* array) +;; (define-extern *personal-selection-bottom-bar-ids* array) +;; (define-extern *garage-string* array) +;; (define-extern *game-title-extra* array) +;; (define-extern *player-to-be-kicked-extra* array) +;; (define-extern *high-score-string* array) +;; (define-extern *high-score-ranking-string* array) +;; (define-extern *high-score-title-ids* array) +;; (define-extern *player-cash-extra* array) +;; (define-extern *mongoose-configurations* array) +;; (define-extern *falcon-configurations* array) +;; (define-extern *wombat-configurations* array) +;; (define-extern *aspect-ratio-data* array) +;; (define-extern *aspect-ratio* object) +;; (define-extern *vibration-menu-data* array) +;; (define-extern *vibration-menu-info* object) +;; (define-extern *crash-cam-menu-data* array) +;; (define-extern *crash-cam-menu-info* object) +;; (define-extern *kill-cam-menu-data* array) +;; (define-extern *kill-cam-menu-info* object) +;; (define-extern *progressive-menu-data* array) +;; (define-extern *progressive-menu-info* object) +;; (define-extern *video-mode-menu-data* array) +;; (define-extern *video-mode-menu-info* object) +;; (define-extern *stereo-mode-data* array) +;; (define-extern *stereo-mode-info* object) +;; (define-extern *languge-text-ids* array) +;; (define-extern *bottom-bar-ready-room-circle* array) +;; (define-extern *vehicle-class-ids* array) +;; (define-extern *screen-mode-ids* array) +;; (define-extern *video-mode-ids* array) +;; (define-extern *video-mode-change-ids* array) +;; (define-extern *advanced-options-button-ids* array) +;; (define-extern *menu-vehicle-colors-data* array) +;; (define-extern *menu-vehicle-colors-info* object) +;; (define-extern *level-texture-string* object) +;; (define-extern *map-texture-string* object) +;; (define-extern *icon-texture-string* object) +;; (define-extern *player-1-name* object) +;; (define-extern *player-2-name* object) +;; (define-extern *player-3-name* object) +;; (define-extern *player-4-name* object) +;; (define-extern *player-5-name* object) +;; (define-extern *player-6-name* object) +;; (define-extern *player-1-extra* object) +;; (define-extern *player-2-extra* object) +;; (define-extern *player-3-extra* object) +;; (define-extern *player-4-extra* object) +;; (define-extern *player-5-extra* object) +;; (define-extern *player-6-extra* object) +;; (define-extern get-extra-player-string function) +;; (define-extern set-index function) +;; (define-extern *selection-cache-array* object) +;; (define-extern *selection-cache-index* object) +;; (define-extern *last-lobby-state* object) +;; (define-extern insert-selection-cache function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; keyboard ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype keyboard-key (structure) + ((data UNKNOWN 4 :offset-assert 0) + (char uint8 :offset-assert 0) + (char2 uint8 :offset-assert 1) + (char3 uint8 :offset-assert 2) + (char4 uint8 :offset-assert 3) + (pos-x int8 :offset-assert 4) + (pos-y int8 :offset-assert 5) + (size int8 :offset-assert 6) + (dummy uint8 :offset-assert 7) + (tid uint32 :offset-assert 8) + (tid2 uint32 :offset-assert 12) + (scale float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype keyboard-control (process-drawable) + ((selected int32 :offset-assert 248) + (pos-x int32 :offset-assert 252) + (pos-y int32 :offset-assert 256) + (up basic :offset-assert 260) + (down basic :offset-assert 264) + (left basic :offset-assert 268) + (right basic :offset-assert 272) + (up-count int32 :offset-assert 276) + (down-count int32 :offset-assert 280) + (left-count int32 :offset-assert 284) + (right-count int32 :offset-assert 288) + (layout-select int32 :offset-assert 292) + (name basic :offset-assert 4) + (screen-pos-x int32 :offset-assert 300) + (screen-pos-y int32 :offset-assert 304) + (max-chars int32 :offset-assert 308) + (flags uint64 :offset-assert 312) + (alpha float :offset-assert 320) + (j-mod joint-mod-set-world :inline :offset-assert 336) + ) + :method-count-assert 55 + :size-assert #x190 + :flag-assert #x3701000190 + (:methods + (keyboard-control-method-53 () none) ;; 53 + (keyboard-control-method-54 () none) ;; 54 + ) + (:state-methods + done ;; 51 + cancel ;; 52 + idle ;; 50 + ) + ) +|# + +;; (define-extern cpad-or-kbd-pressed-var? function) +;; (define-extern kbd-clear! function) +;; (define-extern cpad-or-kbd-clear-func! function) +;; (define-extern *keyboard-proc* object) +;; (define-extern *keyboard-string-buf* object) +;; (define-extern *keyboard-init-state* object) +;; (define-extern *keyboard-layout-default* array) +;; (define-extern char-allowed function) +;; (define-extern set-keyboard-jmod function) +;; (define-extern render-entered-text function) +;; (define-extern keyboard-control-init-by-other function) +;; (define-extern keyboard-control-spawn function) +;; (define-extern kill-keyboard-control function) +;; (define-extern get-keyboard-control function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-menu-manager-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype lobby-menu-manager (process) + ((game-type uint32 :offset-assert 144) + (menu-handles UNKNOWN 8 :offset-assert 152) + (in-focus-index int8 :offset-assert 216) + (menu-handle-1 uint64 :offset-assert 152) + (menu-handle-2 uint64 :offset-assert 160) + (menu-handle-popup uint64 :offset-assert 168) + (menu-handle-background uint64 :offset-assert 224) + (menu-handle-logo-main uint64 :offset-assert 232) + (menu-handle-logo-subtitle uint64 :offset-assert 240) + (local-players int32 :offset-assert 248) + (refresh-time uint32 :offset-assert 252) + (game-connection-type uint8 :offset-assert 256) + (vehicle-handle uint64 :offset-assert 264) + (vehicle-selected uint8 :offset-assert 272) + (vehicle-flags uint64 :offset-assert 280) + (vehicle-paint-mode uint64 :offset-assert 288) + (tuning-type-selected uint64 :offset-assert 296) + (all-ready? basic :offset-assert 304) + (map-proc uint64 :offset-assert 312) + (venue-map uint64 :offset-assert 320) + (current-local-player int8 :offset-assert 328) + (spawn-another? basic :offset-assert 332) + (state-time uint64 :offset-assert 336) + (has-driver? UNKNOWN 2 :offset-assert 344) + (car-part-type-selected uint8 :offset-assert 352) + (cam-string basic :offset-assert 356) + (driver-was-taken? basic :offset-assert 360) + (interpolate-camera? basic :offset-assert 364) + (last-selected-human-count int8 :offset-assert 368) + (last-selected-cpu-count int8 :offset-assert 369) + (game-visible? basic :offset-assert 372) + (psp-mode-run? basic :offset-assert 376) + (garage-lights float :offset-assert 380) + (garage-lights-target float :offset-assert 384) + (memcard-status uint32 :offset-assert 388) + (time-limit? basic :offset-assert 392) + (profile-save-mode basic :offset-assert 396) + (machine-id-to-kick int8 :offset-assert 400) + (cookie-id-to-kick int8 :offset-assert 401) + (override-fov basic :offset-assert 404) + (profile-new-save basic :offset-assert 408) + (voice-id uint32 :offset-assert 412) + (split-selection-prev-state basic :offset-assert 416) + (vehicle-part-fade uint8 :offset-assert 420) + (vehicle-loaded-time uint64 :offset-assert 424) + ) + :method-count-assert 196 + :size-assert #x1b0 + :flag-assert #xc4012001b0 + (:methods + (lobby-menu-manager-method-9 () none) ;; 9 + (lobby-menu-manager-method-10 () none) ;; 10 + (lobby-menu-manager-method-11 () none) ;; 11 + (lobby-menu-manager-method-12 () none) ;; 12 + (lobby-menu-manager-method-13 () none) ;; 13 + (lobby-menu-manager-method-14 () none) ;; 14 + (lobby-menu-manager-method-15 () none) ;; 15 + (lobby-menu-manager-method-16 () none) ;; 16 + (lobby-menu-manager-method-17 () none) ;; 17 + (lobby-menu-manager-method-18 () none) ;; 18 + (lobby-menu-manager-method-19 () none) ;; 19 + (lobby-menu-manager-method-20 () none) ;; 20 + (lobby-menu-manager-method-21 () none) ;; 21 + (lobby-menu-manager-method-22 () none) ;; 22 + (lobby-menu-manager-method-23 () none) ;; 23 + (lobby-menu-manager-method-24 () none) ;; 24 + (lobby-menu-manager-method-25 () none) ;; 25 + (lobby-menu-manager-method-26 () none) ;; 26 + (lobby-menu-manager-method-27 () none) ;; 27 + (lobby-menu-manager-method-28 () none) ;; 28 + (lobby-menu-manager-method-29 () none) ;; 29 + (lobby-menu-manager-method-30 () none) ;; 30 + (lobby-menu-manager-method-31 () none) ;; 31 + (lobby-menu-manager-method-32 () none) ;; 32 + (lobby-menu-manager-method-33 () none) ;; 33 + (lobby-menu-manager-method-34 () none) ;; 34 + (lobby-menu-manager-method-35 () none) ;; 35 + (lobby-menu-manager-method-36 () none) ;; 36 + (lobby-menu-manager-method-37 () none) ;; 37 + (lobby-menu-manager-method-38 () none) ;; 38 + (lobby-menu-manager-method-39 () none) ;; 39 + (lobby-menu-manager-method-40 () none) ;; 40 + (lobby-menu-manager-method-41 () none) ;; 41 + (lobby-menu-manager-method-42 () none) ;; 42 + (lobby-menu-manager-method-43 () none) ;; 43 + (lobby-menu-manager-method-44 () none) ;; 44 + (lobby-menu-manager-method-45 () none) ;; 45 + (lobby-menu-manager-method-46 () none) ;; 46 + (lobby-menu-manager-method-47 () none) ;; 47 + (lobby-menu-manager-method-48 () none) ;; 48 + (lobby-menu-manager-method-49 () none) ;; 49 + (lobby-menu-manager-method-50 () none) ;; 50 + (lobby-menu-manager-method-51 () none) ;; 51 + (lobby-menu-manager-method-52 () none) ;; 52 + (lobby-menu-manager-method-53 () none) ;; 53 + (lobby-menu-manager-method-54 () none) ;; 54 + (lobby-menu-manager-method-55 () none) ;; 55 + (lobby-menu-manager-method-56 () none) ;; 56 + (lobby-menu-manager-method-57 () none) ;; 57 + (lobby-menu-manager-method-58 () none) ;; 58 + (lobby-menu-manager-method-59 () none) ;; 59 + (lobby-menu-manager-method-60 () none) ;; 60 + (lobby-menu-manager-method-61 () none) ;; 61 + (lobby-menu-manager-method-62 () none) ;; 62 + (lobby-menu-manager-method-63 () none) ;; 63 + (lobby-menu-manager-method-64 () none) ;; 64 + (lobby-menu-manager-method-65 () none) ;; 65 + (lobby-menu-manager-method-66 () none) ;; 66 + (lobby-menu-manager-method-67 () none) ;; 67 + (lobby-menu-manager-method-68 () none) ;; 68 + (lobby-menu-manager-method-69 () none) ;; 69 + (lobby-menu-manager-method-70 () none) ;; 70 + (lobby-menu-manager-method-71 () none) ;; 71 + (lobby-menu-manager-method-72 () none) ;; 72 + (lobby-menu-manager-method-73 () none) ;; 73 + (lobby-menu-manager-method-74 () none) ;; 74 + (lobby-menu-manager-method-75 () none) ;; 75 + (lobby-menu-manager-method-76 () none) ;; 76 + (lobby-menu-manager-method-77 () none) ;; 77 + (lobby-menu-manager-method-78 () none) ;; 78 + (lobby-menu-manager-method-79 () none) ;; 79 + (lobby-menu-manager-method-80 () none) ;; 80 + (lobby-menu-manager-method-81 () none) ;; 81 + (lobby-menu-manager-method-82 () none) ;; 82 + (lobby-menu-manager-method-83 () none) ;; 83 + (lobby-menu-manager-method-84 () none) ;; 84 + (lobby-menu-manager-method-85 () none) ;; 85 + (lobby-menu-manager-method-86 () none) ;; 86 + (lobby-menu-manager-method-87 () none) ;; 87 + (lobby-menu-manager-method-88 () none) ;; 88 + (lobby-menu-manager-method-89 () none) ;; 89 + (lobby-menu-manager-method-90 () none) ;; 90 + (lobby-menu-manager-method-91 () none) ;; 91 + (lobby-menu-manager-method-92 () none) ;; 92 + (lobby-menu-manager-method-93 () none) ;; 93 + (lobby-menu-manager-method-94 () none) ;; 94 + (lobby-menu-manager-method-95 () none) ;; 95 + (lobby-menu-manager-method-96 () none) ;; 96 + (lobby-menu-manager-method-97 () none) ;; 97 + (lobby-menu-manager-method-98 () none) ;; 98 + (lobby-menu-manager-method-99 () none) ;; 99 + (lobby-menu-manager-method-100 () none) ;; 100 + (lobby-menu-manager-method-101 () none) ;; 101 + (lobby-menu-manager-method-102 () none) ;; 102 + (lobby-menu-manager-method-103 () none) ;; 103 + (lobby-menu-manager-method-104 () none) ;; 104 + (lobby-menu-manager-method-105 () none) ;; 105 + (lobby-menu-manager-method-106 () none) ;; 106 + (lobby-menu-manager-method-107 () none) ;; 107 + (lobby-menu-manager-method-108 () none) ;; 108 + (lobby-menu-manager-method-109 () none) ;; 109 + (lobby-menu-manager-method-110 () none) ;; 110 + (lobby-menu-manager-method-111 () none) ;; 111 + (lobby-menu-manager-method-112 () none) ;; 112 + (lobby-menu-manager-method-113 () none) ;; 113 + (lobby-menu-manager-method-114 () none) ;; 114 + (lobby-menu-manager-method-115 () none) ;; 115 + (lobby-menu-manager-method-116 () none) ;; 116 + (lobby-menu-manager-method-117 () none) ;; 117 + (lobby-menu-manager-method-118 () none) ;; 118 + (lobby-menu-manager-method-119 () none) ;; 119 + (lobby-menu-manager-method-120 () none) ;; 120 + (lobby-menu-manager-method-121 () none) ;; 121 + (lobby-menu-manager-method-122 () none) ;; 122 + (lobby-menu-manager-method-123 () none) ;; 123 + (lobby-menu-manager-method-124 () none) ;; 124 + (lobby-menu-manager-method-125 () none) ;; 125 + (lobby-menu-manager-method-126 () none) ;; 126 + (lobby-menu-manager-method-127 () none) ;; 127 + (lobby-menu-manager-method-128 () none) ;; 128 + (lobby-menu-manager-method-129 () none) ;; 129 + (lobby-menu-manager-method-130 () none) ;; 130 + (lobby-menu-manager-method-131 () none) ;; 131 + (lobby-menu-manager-method-132 () none) ;; 132 + (lobby-menu-manager-method-133 () none) ;; 133 + (lobby-menu-manager-method-134 () none) ;; 134 + (lobby-menu-manager-method-135 () none) ;; 135 + (lobby-menu-manager-method-136 () none) ;; 136 + (lobby-menu-manager-method-137 () none) ;; 137 + (lobby-menu-manager-method-138 () none) ;; 138 + (lobby-menu-manager-method-139 () none) ;; 139 + (lobby-menu-manager-method-140 () none) ;; 140 + (lobby-menu-manager-method-141 () none) ;; 141 + (lobby-menu-manager-method-142 () none) ;; 142 + (lobby-menu-manager-method-143 () none) ;; 143 + (lobby-menu-manager-method-144 () none) ;; 144 + (lobby-menu-manager-method-145 () none) ;; 145 + (lobby-menu-manager-method-146 () none) ;; 146 + (lobby-menu-manager-method-147 () none) ;; 147 + (lobby-menu-manager-method-148 () none) ;; 148 + (lobby-menu-manager-method-149 () none) ;; 149 + (lobby-menu-manager-method-150 () none) ;; 150 + (lobby-menu-manager-method-151 () none) ;; 151 + (lobby-menu-manager-method-152 () none) ;; 152 + (lobby-menu-manager-method-153 () none) ;; 153 + (lobby-menu-manager-method-154 () none) ;; 154 + (lobby-menu-manager-method-155 () none) ;; 155 + (lobby-menu-manager-method-156 () none) ;; 156 + (lobby-menu-manager-method-157 () none) ;; 157 + (lobby-menu-manager-method-158 () none) ;; 158 + (lobby-menu-manager-method-159 () none) ;; 159 + (lobby-menu-manager-method-160 () none) ;; 160 + (lobby-menu-manager-method-161 () none) ;; 161 + (lobby-menu-manager-method-162 () none) ;; 162 + (lobby-menu-manager-method-163 () none) ;; 163 + (lobby-menu-manager-method-164 () none) ;; 164 + (lobby-menu-manager-method-165 () none) ;; 165 + (lobby-menu-manager-method-166 () none) ;; 166 + (lobby-menu-manager-method-167 () none) ;; 167 + (lobby-menu-manager-method-168 () none) ;; 168 + (lobby-menu-manager-method-169 () none) ;; 169 + (lobby-menu-manager-method-170 () none) ;; 170 + (lobby-menu-manager-method-171 () none) ;; 171 + (lobby-menu-manager-method-172 () none) ;; 172 + (lobby-menu-manager-method-173 () none) ;; 173 + (lobby-menu-manager-method-174 () none) ;; 174 + (lobby-menu-manager-method-175 () none) ;; 175 + (lobby-menu-manager-method-176 () none) ;; 176 + (lobby-menu-manager-method-177 () none) ;; 177 + (lobby-menu-manager-method-178 () none) ;; 178 + (lobby-menu-manager-method-179 () none) ;; 179 + (lobby-menu-manager-method-180 () none) ;; 180 + (lobby-menu-manager-method-181 () none) ;; 181 + (lobby-menu-manager-method-182 () none) ;; 182 + (lobby-menu-manager-method-183 () none) ;; 183 + (lobby-menu-manager-method-184 () none) ;; 184 + (lobby-menu-manager-method-185 () none) ;; 185 + (lobby-menu-manager-method-186 () none) ;; 186 + (lobby-menu-manager-method-187 () none) ;; 187 + (lobby-menu-manager-method-188 () none) ;; 188 + (lobby-menu-manager-method-189 () none) ;; 189 + (lobby-menu-manager-method-190 () none) ;; 190 + (lobby-menu-manager-method-191 () none) ;; 191 + (lobby-menu-manager-method-192 () none) ;; 192 + (lobby-menu-manager-method-193 () none) ;; 193 + (lobby-menu-manager-method-194 () none) ;; 194 + (lobby-menu-manager-method-195 () none) ;; 195 + ) + ) +|# + +;; (define-extern lobby-vehicle-flag->string function) +;; (define-extern *lobby-reset-mode* object) +;; (define-extern *net-mgr-finish-mode* object) +;; (define-extern *lobby-menu-manager* object) +;; (define-extern get-selected-local-player-count function) +;; (define-extern kiosk-code? function) +;; (define-extern min-max-wrap-around function) ;; (function int int int int) +;; (define-extern *lobby-last-selected-task-index* object) +;; (define-extern *last-selected-human-ct* object) +;; (define-extern *last-selected-ai-ct* object) +;; (define-extern *last-selected-buddy-ct* object) +;; (define-extern *last-selected-clan-ct* object) +;; (define-extern *lobby-menu-manager-game-connection-type* object) +;; (define-extern *lobby-handling-db-error* object) +;; (define-extern *no-net-hw-warning-shown* object) +;; (define-extern *ready-room-human-ct* object) +;; (define-extern *ready-room-ai-ct* object) +;; (define-extern *game-launched-from-room* object) +;; (define-extern camera-seek-time object) +;; (define-extern real-camera-seek-time object) +;; (define-extern set-lobby-camera-seek-time! function) +;; (define-extern *class-mode* object) +;; (define-extern restore-selection-index function) +;; (define-extern *lobby-timetrial-lock-mode* object) +;; (define-extern *vehicle-class-data* array) +;; (define-extern *vehicle-class* object) +;; (define-extern *time-of-day-data* array) +;; (define-extern *time-of-day-array* object) +;; (define-extern *ready-room-host-id* object) +;; (define-extern *keyboard-buf* object) +;; (define-extern kbd-auto-activate function) +;; (define-extern *return-to-secrets* object) +;; (define-extern *this-create-menu-state-name* object) +;; (define-extern *prev-create-menu-state-name* object) +;; (define-extern *lobby-fast-connect* object) +;; (define-extern *lobby-body-parts-return-state-name* object) +;; (define-extern *eligible-for-body-part-award* object) +;; (define-extern *pending-op* object) +;; (define-extern *pending-op-serial* object) +;; (define-extern *pending-op-arg-ct* object) +;; (define-extern *pending-op-args* object) +;; (define-extern teams-valid-to-start-game? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; hostnames ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ip-to-name-map (structure) + ((ip uint32 :offset-assert 0) + (mac uint64 :offset-assert 8) + (name basic :offset-assert 16) + (has-16x9 basic :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +;; (define-extern *ip-to-name-map* array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-async ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-simple-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (status-code int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype mgcl-simple-response (structure) + ((message-id UNKNOWN 21 :offset-assert 0) + (confirmation int8 :offset-assert 21) + ) + :method-count-assert 9 + :size-assert #x16 + :flag-assert #x900000016 + ) +|# + +;; (define-extern *medius-last-response* object) +;; (define-extern *mgcl-last-response* object) +;; (define-extern *async-request-ct* object) +;; (define-extern *medius-session-key-valid* object) +;; (define-extern *medius-session-key* object) +;; (define-extern *mgcl-session-key-valid* object) +;; (define-extern *mgcl-session-key* object) +;; (define-extern *mgcl-confirmation-offset* object) +;; (define-extern do-net-update function) +;; (define-extern medius-simple-request-callback function) +;; (define-extern trivial-callback function) +;; (define-extern mgcl-simple-request-callback function) +;; (define-extern *net-error-icon* object) +;; (define-extern display-net-problem-icon function) +;; (define-extern lobby-fatal-error function) +;; (define-extern timeout-lobby-fatal-error function) +;; (define-extern net-async-wait function) +;; (define-extern dme-disconnect function) +;; (define-extern mgcl-disconnect function) +;; (define-extern medius-disconnect function) +;; (define-extern do-disconnect function) +;; (define-extern *net-mgr-pending-behavior-result* object) +;; (define-extern *net-mgr-pending-behavior-result-extra* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-chat ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype received-chat-msg (structure) + ((text UNKNOWN 600 :offset-assert 0) + (disp-time int32 :offset-assert 600) + (id int32 :offset-assert 604) + (resp-type basic :offset-assert 608) + ) + :method-count-assert 9 + :size-assert #x264 + :flag-assert #x900000264 + ) +|# + +#| +(deftype lobby-chat-string (structure) + ((text UNKNOWN 100 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) +|# + +#| +(deftype lobby-chat-window (structure) + ((strings UNKNOWN 16 :offset-assert 0) + (x int32 :offset-assert 1792) + (y int32 :offset-assert 1796) + (sx int32 :offset-assert 1800) + (sy int32 :offset-assert 1804) + ) + :method-count-assert 13 + :size-assert #x710 + :flag-assert #xd00000710 + (:methods + (lobby-chat-window-method-9 () none) ;; 9 + (lobby-chat-window-method-10 () none) ;; 10 + (lobby-chat-window-method-11 () none) ;; 11 + (lobby-chat-window-method-12 () none) ;; 12 + ) + ) +|# + +#| +(deftype magic-chat (structure) + ((prefix basic :offset-assert 0) + (popup-text-id uint32 :offset-assert 4) + (send-lobby-event basic :offset-assert 8) + (has-player-name basic :offset-assert 12) + (add-clan-id basic :offset-assert 16) + (buddies-only basic :offset-assert 20) + (resp-type basic :offset-assert 24) + (stale-player basic :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +;; (define-extern *chat-msg-buffer* object) +;; (define-extern *chat-msg-string-ct* object) +;; (define-extern *chat-msg-strings* array) +;; (define-extern is-whitespace function) +;; (define-extern split-chat-msg function) +;; (define-extern do-split-chat-msg function) +;; (define-extern *received-chat-msg-ct* object) +;; (define-extern *received-chat-msgs* object) +;; (define-extern *chat-msg-string* object) +;; (define-extern *chat-msg-string2* object) +;; (define-extern *chat-msg-player* object) +;; (define-extern *lobby-chat-window* object) +;; (define-extern purge-top-chat-msg function) +;; (define-extern purge-all-chat-msgs function) +;; (define-extern get-top-chat-msg function) +;; (define-extern add-raw-popup-msg function) +;; (define-extern *magic-chat* array) +;; (define-extern handle-chat-msg function) +;; (define-extern fake-chat-msg function) +;; (define-extern send-chat-with-clan-id function) +;; (define-extern send-chat-with-game-id function) +;; (define-extern *chat-msg-box* object) +;; (define-extern *chat-popup-sx* object) +;; (define-extern *r2-press-time* object) +;; (define-extern temp-render-chat-messages function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-sysmsg ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *sys-msg-cheat* object) +;; (define-extern handle-sys-msg function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *net-keypair-valid* object) +;; (define-extern *net-local-rsa-keypair* object) +;; (define-extern *net-app-rsa-keypair* object) +;; (define-extern *net-app-msg-id* object) +;; (define-extern *aux-voice-msg-id* object) +;; (define-extern *net-log-write* object) +;; (define-extern *net-memory-callbacks* object) +;; (define-extern *net-mgr-notify-engine* object) +;; (define-extern net-mgr-init-by-other function) +;; (define-extern net-mgr-start function) +;; (define-extern net-mgr-stop function) +;; (define-extern net-mgr-default-handler function) +;; (define-extern *pause-time* object) +;; (define-extern *prev-total-pause-time* object) +;; (define-extern *last-pause-state* object) +;; (define-extern handle-pause function) +;; (define-extern handle-unpause function) +;; (define-extern pause-check function) +;; (define-extern handle-pause-request function) +;; (define-extern *tmp-mac* object) +;; (define-extern find-ip-map function) +;; (define-extern *tmpstring* string) +;; (define-extern *already-formatted-prefix* object) +;; (define-extern get-player-name function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-dme ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype fake-msg (structure) + ((data UNKNOWN 512 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x200 + :flag-assert #x900000200 + ) +|# + +;; (define-extern *dme-init-in* object) +;; (define-extern *dme-init-out* object) +;; (define-extern *dme-connect-in* object) +;; (define-extern *dme-connect-out* object) +;; (define-extern *dme-host-in* object) +;; (define-extern *dme-host-out* object) +;; (define-extern *dme-join-in* object) +;; (define-extern *dme-join-out* object) +;; (define-extern *dme-disconnect* object) +;; (define-extern *net-lan-find-in-params* object) +;; (define-extern *net-local-ip* object) +;; (define-extern *net-external-ip* object) +;; (define-extern *medius-joined-game-info* object) +;; (define-extern *net-app-name* string) +;; (define-extern *net-last-packet-recv-times* object) +;; (define-extern net-packet-recv-time-reset-client function) +;; (define-extern net-packet-recv-time-reset-all function) +;; (define-extern net-packet-recv-time-trouble function) +;; (define-extern *fake-msg-count* object) +;; (define-extern *fake-msg-read* object) +;; (define-extern *fake-msgs* object) +;; (define-extern *in-msg-callback* object) +;; (define-extern *cb-buf* object) +;; (define-extern do-net-app-msg-callback function) +;; (define-extern net-app-msg-callback function) +;; (define-extern lan-game-find-callback function) +;; (define-extern net-sys-msg-callback function) +;; (define-extern kick-machines function) +;; (define-extern write-init-complete-msg function) +;; (define-extern handle-machine-connect function) +;; (define-extern handle-machine-disconnect function) +;; (define-extern remote-client-connect-callback function) +;; (define-extern remote-client-disconnect-callback function) +;; (define-extern remote-client-event-callback function) +;; (define-extern init-complete-msg-handler function) +;; (define-extern chat-msg-handler function) +;; (define-extern session-master-change-callback function) +;; (define-extern dme-token-callback function) +;; (define-extern *last-ping-latency* object) +;; (define-extern *last-ping-time* object) +;; (define-extern *avg-ping* object) +;; (define-extern ping-report-msg-handler function) +;; (define-extern cb-server-ping function) +;; (define-extern consider-server-ping function) +;; (define-extern dummy-callback function) +;; (define-extern *lanfind-scratch* object) +;; (define-extern *lanfind-scratch-buf* object) +;; (define-extern net-lanfind-exchange-callback function) +;; (define-extern kick-msg-handler function) +;; (define-extern *rsa-key-dont-use-this-for-release* object) +;; (define-extern *headset-buffers-received* object) +;; (define-extern *headset-buffers-played* object) +;; (define-extern *headset-buffers-decoded* object) +;; (define-extern *iop-mem-stats* object) +;; (define-extern *real-sm* object) +;; (define-extern bw-metrics object) +;; (define-extern *tmp-addr* object) +;; (define-extern *tmp-game* object) +;; (define-extern *lan-game-verified* object) +;; (define-extern memeq function) +;; (define-extern lan-game-verify-callback function) +;; (define-extern *net-msg-pending* object) +;; (define-extern send-fake-msg function) +;; (define-extern verify-msg function) +;; (define-extern net-send-msg function) +;; (define-extern parse-ip function) +;; (define-extern *tmp-hostname* string) +;; (define-extern format-ip function) +;; (define-extern format-ip-raw function) +;; (define-extern net-get-local-ip function) +;; (define-extern *ip-lookup* object) +;; (define-extern get-host-by-name-callback function) +;; (define-extern *dns-string* object) +;; (define-extern *dns-string2* object) +;; (define-extern get-host-by-name function) +;; (define-extern net-get-client-ip function) +;; (define-extern per-process-hook function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-aux-voice ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype aux-voice-mgr (process) + ((game-id int32 :offset-assert 144) + (my-id int32 :offset-assert 148) + (bitfield int32 :offset-assert 152) + (connect-handle basic :offset-assert 156) + ) + :method-count-assert 22 + :size-assert #xa0 + :flag-assert #x16001000a0 + ;; field connect-handle uses ~A with a signed load. + (:methods + (aux-voice-mgr-method-9 () none) ;; 9 + (aux-voice-mgr-method-10 () none) ;; 10 + (aux-voice-mgr-method-11 () none) ;; 11 + (aux-voice-mgr-method-12 () none) ;; 12 + (aux-voice-mgr-method-13 () none) ;; 13 + (aux-voice-mgr-method-14 () none) ;; 14 + (aux-voice-mgr-method-20 () none) ;; 20 + (aux-voice-mgr-method-21 () none) ;; 21 + ) + (:state-methods + die ;; 19 + startup ;; 15 + creating ;; 16 + joining ;; 17 + active ;; 18 + ) + ) +|# + +;; (define-extern *aux-voice-mgr* object) +;; (define-extern *aux-voice-resp* object) +;; (define-extern *aux-game-name* object) +;; (define-extern *aux-voice-game-info* object) +;; (define-extern *aux-voice-connect-info* object) +;; (define-extern *aux-voice-got-callback* object) +;; (define-extern *aux-voice-world-report* object) +;; (define-extern *aux-voice-enabled* object) +;; (define-extern *aux-voice-last-startup* object) +;; (define-extern *aux-voice-acct-ids* object) +;; (define-extern aux-voice-mgr-init-by-other function) +;; (define-extern aux-voice-mgr-activate function) +;; (define-extern aux-voice-mgr-deactivate function) +;; (define-extern aux-voice-mgr-failed function) +;; (define-extern do-aux-voice-msg-callback function) +;; (define-extern aux-voice-msg-callback function) +;; (define-extern aux-voice-acct-id-callback function) +;; (define-extern aux-voice-mgr-default-handler function) +;; (define-extern aux-voice-local-disconnect-callback function) +;; (define-extern aux-voice-client-connect-callback function) +;; (define-extern aux-voice-client-disconnect-callback function) +;; (define-extern aux-voice-local-connect-callback function) +;; (define-extern *aux-voice-last-update* object) +;; (define-extern aux-voice-running function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *medius-mas-default-hostname* string) +;; (define-extern *medius-mas-hostname* string) +;; (define-extern *medius-mas-port* object) +;; (define-extern *medius-init-in-params* object) +;; (define-extern *medius-init-out-params* object) +;; (define-extern *medius-connect-in-params* object) +;; (define-extern *medius-connect-out-params* object) +;; (define-extern *medius-public-key* object) +;; (define-extern *medius-connect-info* object) +;; (define-extern *medius-world-report* object) +;; (define-extern *medius-player-report* object) +;; (define-extern *medius-chat-message* object) +;; (define-extern *medius-auth-request* object) +;; (define-extern *medius-player-ladder-stats* object) +;; (define-extern *medius-account-name* object) +;; (define-extern *medius-account-password* object) +;; (define-extern *medius-register-if-not-exist* object) +;; (define-extern *medius-channel-ct* object) +;; (define-extern *medius-user-ct* object) +;; (define-extern *medius-total-game-ct* object) +;; (define-extern *net-mgr-pending-behavior* object) +;; (define-extern *net-mgr-pending-behavior-valid* object) +;; (define-extern medius-error-msg-callback function) +;; (define-extern *chat-tmp-string* object) +;; (define-extern medius-chat-callback function) +;; (define-extern medius-reassign-world-id-callback function) +;; (define-extern lobby-non-fatal-error function) +;; (define-extern mas-connect-callback function) +;; (define-extern medius-text-filter-request-callback function) +;; (define-extern net-filter-text function) +;; (define-extern net-mgr-process-pending-behavior function) +;; (define-extern refreshing-games-callback function) +;; (define-extern total-games-callback function) +;; (define-extern *tmp-game-name* object) +;; (define-extern *medius-join-game-response* object) +;; (define-extern *medius-policy* object) +;; (define-extern *medius-policy-length* object) +;; (define-extern *medius-language* object) +;; (define-extern cb-get-policy function) +;; (define-extern get-medius-language function) +;; (define-extern *medius-announcement-ids* object) +;; (define-extern cb-get-announcements function) +;; (define-extern get-announcements function) +;; (define-extern mark-announcement-as-read function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-muis ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype universe-choice (structure) + ((id int32 :offset-assert 0) + (name UNKNOWN 64 :offset-assert 4) + (desc UNKNOWN 128 :offset-assert 68) + ) + :method-count-assert 9 + :size-assert #xc4 + :flag-assert #x9000000c4 + ) +|# + +;; (define-extern *net-universe-is-ngs* object) +;; (define-extern *jakx-patch-file* string) +;; (define-extern *jakx-patch-tmp* object) +;; (define-extern *net-patch-url* object) +;; (define-extern *net-patch-version* object) +;; (define-extern *universe-choice-ct* object) +;; (define-extern *universe-choices* object) +;; (define-extern *medius-muis-hostname* object) +;; (define-extern *medius-muis-port* object) +;; (define-extern *medius-muis-id* object) +;; (define-extern *found-id* object) +;; (define-extern set-muis-hostname function) +;; (define-extern construct-patch-file-name function) +;; (define-extern muis-connect-callback function) +;; (define-extern muis-news-callback function) +;; (define-extern muis-info-callback function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-cache ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern medius-cache-tick function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-players ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern add-recent-opponent function) +;; (define-extern get-recent-players function) +;; (define-extern *tmp-player* medius-cached-info-player) +;; (define-extern medius-player-info-retrieve-behavior function) +;; (define-extern update-client-state function) +;; (define-extern init-player-lists function) +;; (define-extern *tmp-player-name* object) +;; (define-extern get-player-amplitude function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-buddies ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *medius-player-account-id* object) +;; (define-extern buddies-refreshing-callback function) +;; (define-extern buddies-refreshing function) +;; (define-extern buddies-adding-player function) +;; (define-extern buddies-removing-player function) +;; (define-extern ignore-refreshing-callback function) +;; (define-extern ignore-refreshing function) +;; (define-extern ignore-adding-player function) +;; (define-extern ignore-removing-player function) +;; (define-extern finding-player-callback function) +;; (define-extern finding-player function) +;; (define-extern retrieve-player-lists function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-clans ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *last-medius-clan* object) +;; (define-extern clan-msg-callback-my function) +;; (define-extern clan-msg-callback-all function) +;; (define-extern get-clan-msg function) +;; (define-extern *clan-is-my-clan* object) +;; (define-extern clan-member-list-callback function) +;; (define-extern *tmp-clan* medius-cached-info-clan) +;; (define-extern *tmp-clan-members* object) +;; (define-extern medius-clan-info-retrieve-behavior function) +;; (define-extern clan-create function) +;; (define-extern clan-disband function) +;; (define-extern clan-leave function) +;; (define-extern clan-remove-player function) +;; (define-extern respond-to-clan-invite function) +;; (define-extern *in-clan* object) +;; (define-extern get-my-clans-callback function) +;; (define-extern clan-invitations-sent-callback function) +;; (define-extern check-my-clan-invitations-callback function) +;; (define-extern check-my-clan-invitations function) +;; (define-extern get-clan-member-list function) +;; (define-extern get-my-clans function) +;; (define-extern *cur-challenge-type* object) +;; (define-extern get-clan-challenges function) +;; (define-extern challenge-clan function) +;; (define-extern respond-to-challenge function) +;; (define-extern tidy-clan-challenges function) +;; (define-extern retrieve-my-clan-data function) +;; (define-extern invite-player-to-clan function) +;; (define-extern revoke-clan-invite function) +;; (define-extern retrieve-outstanding-invites function) +;; (define-extern net-test-shit function) +;; (define-extern clan-allowed-to-join-game function) +;; (define-extern lookup-clan-challenge function) +;; (define-extern get-clan-challenge-pair-status function) +;; (define-extern transfer-clan-leadership function) +;; (define-extern set-clan-msg function) +;; (define-extern is-clan-challenge function) +;; (define-extern can-start-clan-challenge function) +;; (define-extern *clan-update-stats-request* object) +;; (define-extern *clan-get-stats-request* object) +;; (define-extern *clan-current-stats* object) +;; (define-extern *enemy-clan-current-stats* object) +;; (define-extern *clan-update-busy* object) +;; (define-extern *this-game-penalty* object) +;; (define-extern should-i-update-clan-stats function) +;; (define-extern get-all-clan-stats function) +;; (define-extern make-new-score function) +;; (define-extern post-game-clan-stats-adjust function) +;; (define-extern apply-clan-deltas function) +;; (define-extern pre-game-clan-stats-adjust function) +;; (define-extern get-clans-in-challenge-info function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-ladders ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-rooms ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-room (structure) + ((id int32 :offset-assert 0) + (name UNKNOWN 32 :offset-assert 4) + (player-ct int32 :offset-assert 36) + (max-players int32 :offset-assert 40) + (game-world-ct int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype medius-room-array (structure) + ((total-ct int32 :offset-assert 0) + (base-page int32 :offset-assert 4) + (total-pages int32 :offset-assert 8) + (ct int32 :offset-assert 12) + (data UNKNOWN 5 :offset-assert 16) + ) + :method-count-assert 11 + :size-assert #x100 + :flag-assert #xb00000100 + (:methods + (medius-room-array-method-9 () none) ;; 9 + (medius-room-array-method-10 () none) ;; 10 + ) + ) +|# + +;; (define-extern *current-room-name* object) +;; (define-extern *room-clan-id* object) +;; (define-extern *room-clan-id-2* object) +;; (define-extern *medius-rooms* object) +;; (define-extern *last-normal-room* object) +;; (define-extern refresh-rooms-callback function) +;; (define-extern refresh-rooms function) +;; (define-extern *tmp-clan-string* object) +;; (define-extern join-room function) +;; (define-extern room-players-refreshing-callback function) +;; (define-extern get-players-in-room function) +;; (define-extern get-room-name function) +;; (define-extern get-current-room-name-and-info function) +;; (define-extern create-room function) +;; (define-extern find-room-by-name function) +;; (define-extern ensure-room-is-good function) +;; (define-extern test-rooms function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-medius-games ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype medius-filter (structure) + ((field int32 :offset-assert 0) + (comp-op int32 :offset-assert 4) + (base-val int32 :offset-assert 8) + ) + :method-count-assert 10 + :size-assert #xc + :flag-assert #xa0000000c + (:methods + (medius-filter-method-9 () none) ;; 9 + ) + ) +|# + +;; (define-extern *medius-filters* object) +;; (define-extern *medius-server-filters* object) +;; (define-extern *medius-desired-server-filters* object) +;; (define-extern medius-game-status-info-retrieve-behavior function) +;; (define-extern get-game-status-cached function) +;; (define-extern in-game-players-refreshing-callback function) +;; (define-extern refresh-game-info function) +;; (define-extern filter-game function) +;; (define-extern *unfiltered-game-ct* object) +;; (define-extern *game-end-idx* object) +;; (define-extern get-game-list-callback function) +;; (define-extern get-game-list function) +;; (define-extern clear-game-list-filters function) +;; (define-extern set-filter-state function) +;; (define-extern refresh-lan-games function) +;; (define-extern filter-test function) +;; (define-extern get-all-games function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-ghost ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ghost-file (structure) + ((name UNKNOWN 128 :offset-assert 0) + (time int32 :offset-assert 128) + (len int32 :offset-assert 132) + (acct-id int32 :offset-assert 136) + (vehicle-selection int32 :offset-assert 140) + (driver-selection int32 :offset-assert 144) + (load-parts uint64 :offset-assert 152) + ) + :method-count-assert 10 + :size-assert #xa0 + :flag-assert #xa000000a0 + (:methods + (ghost-file-method-9 () none) ;; 9 + ) + ) +|# + +#| +(deftype ghost-info (structure) + ((lev uint8 :offset-assert 0) + (acct-id int32 :offset-assert 4) + (acct-name UNKNOWN 64 :offset-assert 8) + (vehicle-selection int8 :offset-assert 72) + (driver-selection int8 :offset-assert 73) + (load-parts uint64 :offset-assert 80) + (time int32 :offset-assert 88) + (last-update-time int32 :offset-assert 92) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) +|# + +;; (define-extern task-level-to-idx function) +;; (define-extern ghost-crc-ok function) +;; (define-extern *ghost-tmp-string* string) +;; (define-extern *ghost-file-ct* object) +;; (define-extern *ghost-files* object) +;; (define-extern *ghost-file-info* object) +;; (define-extern *ghost-download-ptr* object) +;; (define-extern *ghost-download-len* object) +;; (define-extern *ghost-tmp-buf* object) +;; (define-extern *ghost-info* object) +;; (define-extern *ghost-async-status* object) +;; (define-extern *ghost-req-id* object) +;; (define-extern send-ghost-file function) +;; (define-extern restore-ghost-from-memcard function) +;; (define-extern do-get-best-ghost function) +;; (define-extern get-best-ghost function) +;; (define-extern nuke-all-ghosts function) +;; (define-extern get-best-ghost-info function) +;; (define-extern *async-ghost-compress-busy* object) +;; (define-extern async-compress-and-upload function) +;; (define-extern is-ghost? function) +;; (define-extern reset-ghost function) +;; (define-extern poop2 function) +;; (define-extern poop3 function) +;; (define-extern poop4 function) +;; (define-extern poop5 function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-mgcl ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *medius-server-session-begin-request* object) +;; (define-extern *mgcl-init-in-params* object) +;; (define-extern *mgcl-init-out-params* object) +;; (define-extern *mgcl-connect-in-params* object) +;; (define-extern *mgcl-connect-out-params* object) +;; (define-extern *mgcl-connect-info* object) +;; (define-extern *mgcl-server-report* object) +;; (define-extern *mgcl-access-key* object) +;; (define-extern *player-entered-ready-room* object) +;; (define-extern *medius-server-join-game-response* object) +;; (define-extern mgcl-join-game-callback function) +;; (define-extern mgcl-end-game-callback function) +;; (define-extern mgcl-world-status-callback function) +;; (define-extern mgcl-connect-games-callback function) +;; (define-extern send-game-update function) +;; (define-extern connect-callback-mgcl function) +;; (define-extern get-mgcl-connection function) +;; (define-extern end-game-on-me function) +;; (define-extern create-game-on-me function) +;; (define-extern send-end-of-game-report function) +;; (define-extern end-game-on-me-callback function) +;; (define-extern move-game-on-me-callback function) +;; (define-extern check-game-on-me function) +;; (define-extern *medius-account-update-stats-request* object) +;; (define-extern *medius-update-ladder-stats-wide-request* object) +;; (define-extern medius-start-account-stats-update function) +;; (define-extern medius-start-clan-stats-update function) +;; (define-extern host-change-callback function) +;; (define-extern game-connect-failed function) +;; (define-extern wait-connect function) +;; (define-extern dme-connect-callback function) +;; (define-extern dme-join-callback function) +;; (define-extern *sent-end-of-game-report* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-mgr-playback ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *playback-stream* file-stream) +;; (define-extern *playback-name* object) +;; (define-extern *playback-start-time* object) +;; (define-extern *playback-log-start-time* object) +;; (define-extern *playback-buf-mem* object) +;; (define-extern *playback-buf* object) +;; (define-extern *playback-next-event-time* object) +;; (define-extern *playback-time* object) +;; (define-extern *playback-bytes-left* object) +;; (define-extern *playback-machine* object) +;; (define-extern *playback-delay* object) +;; (define-extern *playback-event-header* object) +;; (define-extern read-event-header function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-colarb ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-colarb-req (structure) + ((req-by int8 :offset-assert 0) + (req-time int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +;; (define-extern *net-colarb-last-reqs* object) +;; (define-extern net-colarb-clear function) +;; (define-extern colarb-request-msg-callback function) +;; (define-extern net-colarb-request-id function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-init ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sce-stat (structure) + ((mode uint32 :offset-assert 0) + (attr int32 :offset-assert 4) + (size int32 :offset-assert 8) + (ctime UNKNOWN 8 :offset-assert 12) + (atime UNKNOWN 8 :offset-assert 20) + (mtime UNKNOWN 8 :offset-assert 28) + (hisize int32 :offset-assert 36) + (private UNKNOWN 6 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +#| +(deftype sce-dirent (structure) + ((stat sce-stat :inline :offset-assert 0) + (name UNKNOWN 256 :offset-assert 64) + (private basic :offset-assert 320) + ) + :method-count-assert 9 + :size-assert #x144 + :flag-assert #x900000144 + ;; field private uses ~A with a signed load. + ) +|# + +#| +(deftype eznet-combination (structure) + ((status int32 :offset-assert 0) + (iftype int32 :offset-assert 4) + (name UNKNOWN 64 :offset-assert 8) + (ifc-name UNKNOWN 64 :offset-assert 72) + (dev-name UNKNOWN 64 :offset-assert 136) + ) + :method-count-assert 9 + :size-assert #xc8 + :flag-assert #x9000000c8 + ) +|# + +#| +(deftype eznet-combination-list (structure) + ((length int32 :offset-assert 0) + (default int32 :offset-assert 4) + (netdb-order UNKNOWN 10 :offset-assert 8) + (list UNKNOWN 10 :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x800 + :flag-assert #x900000800 + ) +|# + +#| +(deftype sce-dnas2-unique-id (structure) + ((category uint32 :offset-assert 0) + (ptr uint32 :offset-assert 4) + (sizep uint32 :offset-assert 8) + (result int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype sce-dnas2-status (structure) + ((code int32 :offset-assert 0) + (sub-code int32 :offset-assert 4) + (progress int32 :offset-assert 8) + (optional uint32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype patch-hdr (structure) + ((magic uint32 :offset-assert 0) + (this-len uint32 :offset-assert 4) + (uncomp-len uint32 :offset-assert 8) + (src-file-len uint32 :offset-assert 12) + (dest-file-len uint32 :offset-assert 16) + (src-hash uint32 :offset-assert 20) + (dest-hash uint32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype patch-group-entry (structure) + ((name-hash uint32 :offset-assert 0) + (offset uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype patch-group (structure) + ((patch-ct uint32 :offset-assert 0) + (data UNKNOWN :dynamic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +;; (define-extern simple-dir-test function) +;; (define-extern *scert-extra-params* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-start ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *net-start-view-ct* object) +;; (define-extern *listener-cpt* object) +;; (define-extern *net-hw-initted* object) +;; (define-extern *net-hw-config-id* object) +;; (define-extern *net-hw-last-error* object) +;; (define-extern net-hw-stop function) +;; (define-extern net-hw-start-part1 function) +;; (define-extern net-hw-start-part2 function) +;; (define-extern hack-reset-state function) +;; (define-extern net-mgr-start-hardware-already-done function) +;; (define-extern hack-start-local-game function) +;; (define-extern artist-clean-up-net-mgr function) +;; (define-extern *artist-continue-busy* object) +;; (define-extern artist-continue function) +;; (define-extern listener-continue function) +;; (define-extern listener-task function) +;; (define-extern select-continue-point function) +;; (define-extern set-local-vehicle function) +;; (define-extern qo function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-process-mgr ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (deftype owner-and-flags (int8) +;; () +;; :flag-assert #x900000001 +;; ) + +#| +(deftype nospawn (process) + ((name basic :offset-assert 0) + (mask process-mask :offset-assert 4) + (clock basic :offset-assert 8) + (view basic :offset-assert 12) + (parent uint32 :offset-assert 16) + (brother uint32 :offset-assert 20) + (child uint32 :offset-assert 24) + (ppointer uint32 :offset-assert 28) + (self basic :offset-assert 32) + (profile-ticks uint32 :offset-assert 36) + (pool basic :offset-assert 40) + (status basic :offset-assert 44) + (pid int32 :offset-assert 48) + (main-thread basic :offset-assert 52) + (top-thread basic :offset-assert 56) + (entity basic :offset-assert 60) + (level basic :offset-assert 64) + (state basic :offset-assert 68) + (prev-state basic :offset-assert 72) + (next-state basic :offset-assert 76) + (state-stack basic :offset-assert 80) + (trans-hook basic :offset-assert 84) + (post-hook basic :offset-assert 88) + (event-hook basic :offset-assert 92) + (allocated-length int32 :offset-assert 96) + (heap-base uint32 :offset-assert 108) + (heap-top uint32 :offset-assert 112) + (heap-cur uint32 :offset-assert 116) + (stack-frame-top basic :offset-assert 120) + (heap kheap :inline :offset-assert 108) + (connection-list connectable :inline :offset-assert 124) + (stack UNKNOWN :dynamic :offset-assert 140) + ) + :method-count-assert 15 + :size-assert #x90 + :flag-assert #xf00000090 + (:methods + (nospawn-method-9 () none) ;; 9 + (nospawn-method-10 () none) ;; 10 + (nospawn-method-11 () none) ;; 11 + (nospawn-method-12 () none) ;; 12 + (nospawn-method-13 () none) ;; 13 + (nospawn-method-14 () none) ;; 14 + ) + ) +|# + +;; (define-extern net-process-mgr-init-by-other function) +;; (define-extern spawn-net-entity function) +;; (define-extern *net-process-table* array) +;; (define-extern net-process-mgr-start function) +;; (define-extern net-process-mgr-stop function) +;; (define-extern net-process-mgr-handle-aux-msg-recv-end function) +;; (define-extern net-process-mgr-handle-aux-msg-recv-end-ack function) +;; (define-extern net-process-mgr-handle-aux-msg-spawn-entities function) +;; (define-extern net-process-mgr-default-handler function) +;; (define-extern go-running function) +;; (define-extern *prev-time-of-day-time* object) +;; (define-extern tweak-local-net-entities function) +;; (define-extern update-local-net-entities function) +;; (define-extern net-process-msg-handler function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-http ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype http-downloader (process) + ((socket int32 :offset-assert 144) + (buffer UNKNOWN 1024 :offset-assert 148) + (hostname UNKNOWN 128 :offset-assert 1172) + (url UNKNOWN 128 :offset-assert 1300) + (ip int32 :offset-assert 1428) + (port int32 :offset-assert 1432) + (http-rc int32 :offset-assert 1436) + (content-len int32 :offset-assert 1440) + (quench basic :offset-assert 1444) + ) + :method-count-assert 23 + :size-assert #x5a8 + :flag-assert #x17052005a8 + (:methods + (http-downloader-method-9 () none) ;; 9 + (http-downloader-method-10 () none) ;; 10 + (http-downloader-method-11 () none) ;; 11 + (http-downloader-method-12 () none) ;; 12 + (http-downloader-method-13 () none) ;; 13 + (http-downloader-method-14 () none) ;; 14 + (http-downloader-method-20 () none) ;; 20 + (http-downloader-method-21 () none) ;; 21 + (http-downloader-method-22 () none) ;; 22 + ) + (:state-methods + resolving ;; 15 + connecting ;; 16 + fetching-headers ;; 17 + fetching-data ;; 18 + die ;; 19 + ) + ) +|# + +;; (define-extern *http-downloader* object) +;; (define-extern *http-request-string* object) +;; (define-extern http-downloader-init-by-other function) +;; (define-extern http-start-fetch function) +;; (define-extern http-downloader-default-handler function) +;; (define-extern *socket-blocking* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; capture ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern gs-set-default-store-image function) ;; (function gs-store-image-packet int int gs-psm int int int int int) +;; (define-extern *capture-tga-temp* object) +;; (define-extern store-image function) ;; (function screen-shot-work none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; fmv-player ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype fmv-buffer (structure) + ((buff uint32 :offset-assert 0) + (start int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype fmv-work (structure) + ((current-buffer uint32 :offset-assert 0) + (buffers UNKNOWN 2 :offset-assert 4) + (buffer-size uint32 :offset-assert 36) + (cursor uint32 :offset-assert 40) + (name basic :offset-assert 44) + (dma-addr uint32 :offset-assert 48) + (data-size uint32 :offset-assert 52) + (num-frames uint32 :offset-assert 56) + (copied-size uint32 :offset-assert 60) + (count-frame uint32 :offset-assert 64) + (own-rpc basic :offset-assert 68) + (len-read int32 :offset-assert 72) + (finished basic :offset-assert 76) + (current-frame int32 :offset-assert 80) + (page basic :offset-assert 84) + (tex basic :offset-assert 88) + (corner UNKNOWN 4 :offset-assert 96) + (pos UNKNOWN 4 :offset-assert 160) + (uv UNKNOWN 4 :offset-assert 224) + (col vector4w :inline :offset-assert 288) + (draw-tmpl dma-gif-packet :inline :offset-assert 304) + ) + :method-count-assert 9 + :size-assert #x150 + :flag-assert #x900000150 + ) +|# + +;; (define-extern *subtitles-text* object) +;; (define-extern *fmv-m2v-name* object) +;; (define-extern *fmv-snd-name* object) +;; (define-extern *fmv-old-hflip* object) +;; (define-extern *fmv-work* object) +;; (define-extern *menu-movie-texture-anim-array* texture-anim-array) +;; (define-extern *movie-texture-anim-array* texture-anim-array) +;; (define-extern movie-texture-anim-init function) +;; (define-extern movie-texture-anim-func function) +;; (define-extern fmv-file-init function) +;; (define-extern fmv-get-time function) +;; (define-extern fmv-memcpy function) +;; (define-extern fmv-file-read function) +;; (define-extern fmv-fade-out function) +;; (define-extern fmv-player-init-by-other function) +;; (define-extern fmv-player-run function) +;; (define-extern fmv-player-run-texture function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; game-save ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +++game-save:game-save-elt +(defenum game-save-elt + :type uint16 + (name 100) + (base-time 101) + (real-time 102) + (game-time 103) + (frame-time 104) + (real-frame-time 105) + (session-time 106) + (bg-time 107) + (total-game-time 108) + + (continue 200) + (life 201) + (money 202) + (money-total 203) + (money-per-level 204) + (buzzer-total 205) + (fuel-cell 206) + (death-movie-tick 207) + (skill 208) + (skill-total 209) + (karma 210) + (eco-pill-dark 211) + (eco-pill-dark-total 212) + (shield 213) + (features 214) + (gun-type 215) + (gun-ammo 216) + (gem 218) + (gem-total 219) + (secrets 220) + (scores 221) + (purchase-secrets 222) + (eco-pill-light 223) + (eco-pill-light-total 224) + (vehicles 225) + (vehicle 226) + (resetter-node 227) + (items 228) + (skill-high-watermark 229) + (car-info 230) + (last-selected-vehicle 231) + (cash 232) + (car-parts-info 233) + (game-movie 234) + (driver-unlock 235) + (venue-unlock 236) + + (task-list 300) + (perm-list 301) + (level-open-list 305) + (task-node-list 306) + (talker-state 307) + (bigmap-data 308) + (bigmap-offsets 309) + + (total-deaths 400) + (continue-deaths 401) + (task-deaths 402) + (game-start-time 403) + (death-time 405) + (hit-time 406) + (task-pickup-time 407) + (continue-time 408) + (task-complete-time 409) + (enter-level-time 410) + (deaths-per-level 411) + (death-pos 412) + (auto-save-count 413) + (in-level-time 414) + (task-start-time 415) + (node-death-count 416) + (node-gem-count 417) + (node-skill-count 418) + (node-close-time 419) + (node-name 420) + (total-trys 421) + (enemies-killed 422) + (civilians-killed 423) + (marauders-killed 424) + (shot-info 425) + (crates-opened 426) + (health-collected 427) + (board-time 428) + (task-stats 429) + (task-medals 430) + (task-play-count 431) + (task-options 432) + (view-mode1 433) + (view-mode2 434) + (task-high-scores 435) + (grand-prix-trophy 436) + (m2v-info 437) + + (sfx-volume 500) + (music-volume 501) + (dialog-volume 502) + (language 503) + (screenx 504) + (screeny 505) + (vibration 506) + (play-hints 507) + (video-mode 508) + (aspect-ratio 509) + (camera-stick-dir 510) + (subtitle 511) + (subtitle-language 512) + (stereo-mode 513) + (brightness 514) + (contrast 515) + (audio-language 516) + (flip-horizontal 517) + (flip-vertical 518) + (crash-cam 519) + (rotate-arena-minimap 520) + (kill-cam 521) + + (disk-tester 600) + ) +;; ---game-save:game-save-elt + +(deftype game-save-tag (structure) + ((user-object object 2 :offset-assert 0) ;; guessed by decompiler + (user-uint64 uint64 :offset 0) + (user-float0 float :offset 0) + (user-float float 2 :offset 0) ;; guessed by decompiler + (user-int32 int32 2 :offset 0) ;; guessed by decompiler + (user-uint32 uint32 2 :offset 0) ;; guessed by decompiler + (user-int16 int16 4 :offset 0) ;; guessed by decompiler + (user-uint16 uint16 4 :offset 0) ;; guessed by decompiler + (user-int8 int8 8 :offset 0) ;; guessed by decompiler + (user-int80 int8 :offset 0) + (user-int81 int8 :offset 1) + (user-uint8 uint8 8 :offset 0) ;; guessed by decompiler + (elt-count int32 :offset-assert 8) + (elt-size uint16 :offset-assert 12) + (elt-type game-save-elt :offset-assert 14) ;; game-save-elt + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype game-save (basic) + ((version int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (length int32 :offset-assert 12) + (level-index int32 :offset-assert 16) + (gem-count float :offset-assert 20) + (skill-count float :offset-assert 24) + (completion-percentage float :offset-assert 28) + (minute uint8 :offset 36) + (hour uint8 :offset-assert 37) + (week uint8 :offset-assert 38) + (day uint8 :offset-assert 39) + (month uint8 :offset-assert 40) + (year uint8 :offset-assert 41) + (game-time uint64 :offset 48) + (secrets uint32 2 :offset 64) + (features uint32 2 :offset-assert 72) + (tag game-save-tag :inline :dynamic :offset-assert 80) + ) + :method-count-assert 12 + ;; :size-assert #x70 + ;; :flag-assert #xc00000070 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (game-save-method-9 () none) ;; 9 ;; (save-to-file (_type_ string) _type_) + (game-save-method-10 () none) ;; 10 ;; (load-from-file (_type_ string) _type_) + (debug-inspect (_type_ symbol) _type_) ;; 11 ;; (debug-inspect (_type_ symbol) _type_) + ) + ) + +#| +(deftype auto-save (process) + ((card int32 :offset-assert 144) + (slot int32 :offset-assert 148) + (which int32 :offset-assert 152) + (buffer kheap :offset-assert 156) + (mode symbol :offset-assert 160) ;; guessed by decompiler + (starting-auto-save-status basic :offset-assert 164) + (result mc-status-code :offset-assert 168) ;; guessed by decompiler + (save game-save :offset-assert 172) ;; guessed by decompiler + (info mc-slot-info :inline :offset-assert 176) + (notify uint64 :offset-assert 608) ;; handle + (force symbol :offset-assert 616) ;; guessed by decompiler + (state-time uint64 :offset-assert 624) ;; time-frame + (icon hud-sprite :inline :offset-assert 640) + (icon-gui-id uint32 :offset-assert 692) + (message-gui-id uint32 :offset-assert 696) + (game-name UNKNOWN 16 :offset-assert 700) + ) + :method-count-assert 29 + :size-assert #x2cc + :flag-assert #x1d024002cc + (:methods + (auto-save-method-9 () none) ;; 9 + (auto-save-method-10 () none) ;; 10 + (auto-save-method-11 () none) ;; 11 + (auto-save-method-12 () none) ;; 12 + (auto-save-method-13 () none) ;; 13 + (auto-save-method-14 () none) ;; 14 ;; (get-heap () _type_ :state) + ) + (:state-methods + get-heap ;; 15, old: (get-card () _type_ :state) + save-ghost ;; 24 + get-card ;; 16, old: (format-card () _type_ :state) + format-card ;; 17, old: (unformat-card () _type_ :state) + unformat-card ;; 18, old: (create-file () _type_ :state) + create-file ;; 19, old: (save () _type_ :state) + save ;; 20, old: (restore () _type_ :state) + save-common ;; 22, old: (done () _type_ :state) + save-patch ;; 26 + restore ;; 21, old: (error (mc-status-code) _type_ :state) + restore-common ;; 23 + restore-ghost ;; 25 + error ;; 27 + done ;; 28 + ) + ) +|# + +#| +(deftype auto-save-error-proc (process-drawable) + ((error basic :offset-assert 248) + (bmask uint32 :offset-assert 252) + ) + :method-count-assert 50 + :size-assert #x100 + :flag-assert #x3200700100 + ) +|# + +;; (define-extern *mc-ghost-idx* object) +;; (define-extern *mc-ghost-ptr* object) +(define-extern game-save-elt->string (function game-save-elt string)) +;; (define-extern *auto-save-info* object) ;; mc-slot-info +;; (define-extern auto-save-post function) ;; (function pointer :behavior auto-save) +;; (define-extern auto-save-init-by-other function) ;; (function symbol process int int symbol object :behavior auto-save) +;; (define-extern auto-idle state) +;; (define-extern auto-save-error-proc-init-by-other function) +(define-extern progress-allowed? (function symbol)) +;; (define-extern auto-save-command function) ;; (function symbol int int process-tree symbol (pointer auto-save)) +;; (define-extern auto-save-check function) ;; (function int) +;; (define-extern auto-save-user function) ;; (function (pointer auto-save)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; title-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype title-control (process) + ((buffer external-art-buffer 2 :offset-assert 140) ;; guessed by decompiler + (want int32 2 :offset-assert 148) ;; guessed by decompiler + (want-name string 2 :offset-assert 156) ;; guessed by decompiler + (have int32 2 :offset-assert 164) ;; guessed by decompiler + (draw int32 :offset-assert 172) + (draw-name string :offset-assert 176) ;; guessed by decompiler + (active symbol :offset-assert 180) ;; guessed by decompiler + ) + :method-count-assert 22 + :size-assert #xbc + :flag-assert #x16003000bc + (:methods + (title-control-method-9 () none) ;; 9 + (title-control-method-10 () none) ;; 10 + (title-control-method-11 () none) ;; 11 + (title-control-method-12 () none) ;; 12 + (title-control-method-13 () none) ;; 13 + (title-control-method-14 () none) ;; 14 ;; (startup () _type_ :state) + (title-control-method-16 () none) ;; 16 ;; (idle () _type_ :state) + (title-control-method-17 () none) ;; 17 ;; (scrap-book (int) _type_ :state) + ) + (:state-methods + startup ;; 15, old: (wait () _type_ :state) + scrap-book ;; 18, old: (control-spec (int) _type_ :state) + control-spec ;; 19 + splash-screen ;; 20 + thx-dolby ;; 21 + ) + ) +|# + +;; (define-extern title-control-init function) ;; (function object :behavior title-control) +;; (define-extern title-control-spawn function) +;; (define-extern title-screen-change function) ;; (function string int string int symbol symbol int :behavior title-control) +;; (define-extern title-progress function) ;; (function symbol int) +;; (define-extern title-fade-out function) ;; (function float int) +;; (define-extern direction-press function) ;; (function time-frame time-frame symbol symbol) +;; (define-extern *scrap-book-3* array) +;; (define-extern *scrap-book-1* array) ;; (array int16) +;; (define-extern *scrap-book-2* array) ;; (array int16) +;; (define-extern *progress-save-info* object) ;; mc-slot-info +;; (define-extern post-memcard function) +;; (define-extern *game-name-entered* object) +;; (define-extern draw-language-select function) +;; (define-extern check-language function) +;; (define-extern *end-credits-proc* object) +;; (define-extern end-end-credits function) +;; (define-extern start-end-credits function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dynamic-patch ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *dynamic-patches* object) +;; (define-extern *dynamic-patch-size* object) +;; (define-extern dynamic-patch-hook function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; process-nettable ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype net-test (process-nettable) + ((spoon int32 :offset-assert 188) + ) + :method-count-assert 44 + :size-assert #xc0 + :flag-assert #x2c003000c0 + (:state-methods + running ;; 42 + die ;; 43 + ) + ) +|# + +;; (define-extern net-test-init-remote function) +;; (define-extern *msg-map-net-test* array) +;; (define-extern *net-process-class-info-net-test* object) +;; (define-extern net-test-init-by-other function) +;; (define-extern spawn-local function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-player ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype vehicle-rev-manager (process) + ((vehicle uint64 :offset-assert 144) + (state-time uint32 :offset-assert 152) + (throttle float :offset-assert 156) + (on-period uint32 :offset-assert 160) + (off-period uint32 :offset-assert 164) + (long-period uint32 :offset-assert 168) + (wait-period uint32 :offset-assert 172) + (pulse-count int8 :offset-assert 176) + (i-pulse int8 :offset-assert 177) + ) + :method-count-assert 17 + :size-assert #xb2 + :flag-assert #x11003000b2 + (:methods + (vehicle-rev-manager-method-14 () none) ;; 14 + ) + (:state-methods + idle ;; 15 + ) + (:methods + (vehicle-rev-manager-method-16 () none) ;; 16 + ) + ) + +;; (define-extern *target-cam-off-time* object) +;; (define-extern update-active-net-players function) +;; (define-extern net-player-default-handler function) +;; (define-extern use-target-cam-base-helper function) +;; (define-extern net-player-init-local function) +;; (define-extern clear-local-players function) +;; (define-extern playback-cam function) +;; (define-extern all-players-spawned-vehicles? function) +;; (define-extern local-human-player-above-height? function) +;; (define-extern find-ground-info function) +(define-extern get-player-pos (function int vector)) +;; (define-extern vehicle-rev-manager-init-by-other function) +;; (define-extern vehicle-rev-manager-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-util ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype auto-test-levels (process) + ((cur-task int32 :offset-assert 144) + ) + :method-count-assert 16 + :size-assert #x94 + :flag-assert #x1000100094 + (:methods + (auto-test-levels-method-9 () none) ;; 9 + (auto-test-levels-method-10 () none) ;; 10 + (auto-test-levels-method-11 () none) ;; 11 + (auto-test-levels-method-12 () none) ;; 12 + (auto-test-levels-method-13 () none) ;; 13 + (auto-test-levels-method-14 () none) ;; 14 + ) + (:state-methods + running ;; 15 + ) + ) +|# + +;; (define-extern *closest-player-dist-sq* object) +;; (define-extern get-closest-human-player function) +;; (define-extern get-closest-human-or-ai-player function) +;; (define-extern search-for-code function) +;; (define-extern *poop* object) +;; (define-extern *pooplen* object) +;; (define-extern test-patch function) +;; (define-extern long-game2 function) +;; (define-extern *channel-id-ct* object) +;; (define-extern *channel-ids* object) +;; (define-extern *user-ct* object) +;; (define-extern broadcast-message function) +;; (define-extern *auto-test-break* object) +;; (define-extern check-entities function) +;; (define-extern auto-test-node function) +;; (define-extern auto-test-levels-init-by-other function) +;; (define-extern auto-test-levels-start function) +;; (define-extern check-levels function) +;; (define-extern *sound-clone* object) +;; (define-extern *sound-info-fields* array) +;; (define-extern *tmp-line* object) +;; (define-extern *tmp-buf* object) +;; (define-extern *tmp-buf-len* object) +;; (define-extern read-sound-line function) +;; (define-extern crappy-atof function) +;; (define-extern tweak-sound function) +;; (define-extern read-sound-info-tweaks function) +;; (define-extern process-is-in-tree function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-predict ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-logging ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *lock-stream* file-stream) +;; (define-extern *lock-name* object) +;; (define-extern *net-log-stream* file-stream) +;; (define-extern *net-log-name* object) +;; (define-extern *net-ip-string* object) +;; (define-extern *net-log-buf-mem* object) +;; (define-extern *net-log-buf* object) +;; (define-extern *net-ip* object) +;; (define-extern *net-log-id* object) +;; (define-extern net-log-world-ident function) +;; (define-extern net-log-start function) +;; (define-extern net-log-remove-lock function) +;; (define-extern net-log-stop function) +;; (define-extern net-log-client function) +;; (define-extern net-log-msg function) +;; (define-extern net-log-comment function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-world ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern verify-drivers function) +;; (define-extern *net-world-load-levels* array) +;; (define-extern *net-world-display-levels* array) +;; (define-extern *net-world-load-levels2* array) +;; (define-extern *net-task-mask* object) +;; (define-extern *waiting-for-lock* object) +;; (define-extern *net-world-entity-hash* object) +;; (define-extern set-net-task-mask function) +;; (define-extern convert-load-parts-to-car-info function) +;; (define-extern convert-car-info-to-load-parts function) +;; (define-extern cleanup-at-game-end function) +;; (define-extern check-start-load function) +;; (define-extern *font-context-loading* object) +;; (define-extern do-loading-text function) +;; (define-extern *movie-string* object) +;; (define-extern do-movie function) +;; (define-extern wait-target-load function) +;; (define-extern load-sound-banks function) +;; (define-extern do-late-join function) +;; (define-extern *tmp-reset-string* object) +;; (define-extern *last-flash* object) +;; (define-extern check-host-timeout function) +;; (define-extern do-encode-net-world-state function) +;; (define-extern wait-for-lock function) +;; (define-extern wait-for-ghost-download function) +;; (define-extern save-vehicle-camera-inside-state function) +;; (define-extern set-net-world-time-of-day function) +;; (define-extern wait-for-lobby-to-die function) +;; (define-extern check-grand-prix-restart function) +;; (define-extern wait-for-levels function) +;; (define-extern get-ai-vehicle-cup-idx function) +;; (define-extern *tmp-string* string) +;; (define-extern set-continue-point-from-task function) +;; (define-extern *place-players* array) +;; (define-extern *place-player-ct* object) +;; (define-extern allow-machine-to-join function) +;; (define-extern allow-machine-to-join-rec function) +;; (define-extern *bkp-cols* object) +;; (define-extern do-decode-net-world-state function) +;; (define-extern player-connected? function) +;; (define-extern net-world-init-local function) +;; (define-extern init-local-world function) +;; (define-extern do-ghost-ai-setup function) +;; (define-extern get-non-conflicting-driver function) +;; (define-extern set-ai-vehicle function) +;; (define-extern request-game-start function) +;; (define-extern is-late-join? function) +;; (define-extern driver-allowed function) +;; (define-extern ai-driver-allowed function) +;; (define-extern get-total-humans function) +;; (define-extern get-total-skill-level function) +;; (define-extern get-player-clan-info function) +;; (define-extern lobby-level-set! function) +;; (define-extern set-player-car-from-level-array function) +;; (define-extern *in-end-of-race-preload* object) +;; (define-extern end-of-race-start-preload function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; stream-media ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern init-stream-media-params function) +;; (define-extern stream-media-end-recording function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-projectile ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern net-projectile-init-by-other function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; udp-layer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype udp-layer-machine (structure) + ((idx int8 :offset-assert 0) + (state int8 :offset-assert 1) + (state-enter-time int32 :offset-assert 4) + (last-time int32 :offset-assert 8) + (last-reply-time int32 :offset-assert 12) + (reachable-ip uint32 :offset-assert 16) + (reachable-port int32 :offset-assert 20) + (scert-ip uint32 :offset-assert 24) + ) + :method-count-assert 12 + :size-assert #x1c + :flag-assert #xc0000001c + (:methods + (udp-layer-machine-method-9 () none) ;; 9 + (udp-layer-machine-method-10 () none) ;; 10 + (udp-layer-machine-method-11 () none) ;; 11 + ) + ) +|# + +#| +(deftype udp-layer (structure) + ((machines UNKNOWN 8 :offset-assert 0) + (socket int32 :offset-assert 256) + (data-cb basic :offset-assert 260) + (nat-discovery-time int32 :offset-assert 264) + (nat-discovery-tries int32 :offset-assert 268) + (nat-discovery-ip uint32 :offset-assert 272) + (nat-discovery-port int32 :offset-assert 276) + ) + :method-count-assert 20 + :size-assert #x118 + :flag-assert #x1400000118 + (:methods + (udp-layer-method-9 () none) ;; 9 + (udp-layer-method-10 () none) ;; 10 + (udp-layer-method-11 () none) ;; 11 + (udp-layer-method-12 () none) ;; 12 + (udp-layer-method-13 () none) ;; 13 + (udp-layer-method-14 () none) ;; 14 + (udp-layer-method-15 () none) ;; 15 + (udp-layer-method-16 () none) ;; 16 + (udp-layer-method-17 () none) ;; 17 + (udp-layer-method-18 () none) ;; 18 + (udp-layer-method-19 () none) ;; 19 + ) + ) +|# + +;; (define-extern *udp-buffer* object) +;; (define-extern *udp-layer* object) +;; (define-extern *nat-addr* object) +;; (define-extern udp-announce-msg-callback function) +;; (define-extern fw-test-2 function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; headset ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *headset-op-size* object) +;; (define-extern *headset-result* object) +;; (define-extern *decoder-queue-3-buf* object) +;; (define-extern *decoder-queue-2-buf* object) +;; (define-extern *decoder-queue-1-buf* object) +;; (define-extern *decoder-queue-0-buf* object) +;; (define-extern *decoder-queue-buffers* array) +;; (define-extern headset-init-by-other function) +;; (define-extern headset-activate function) +;; (define-extern headset-deactivate function) +;; (define-extern headset-audio-msg-callback function) +;; (define-extern headset-udp-callback function) +;; (define-extern should-talk-to function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; idle-control ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype idle-control-frame (structure) + ((command uint8 :offset-assert 0) ;; idle-control-cmd + (anim uint32 :offset-assert 4) + (param0 int32 :offset-assert 8) + (param1 int32 :offset-assert 12) + (param2 pair :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ;; field param2 uses ~A with a signed load. + ) +|# + +#| +(deftype idle-control (structure) + ((anim (inline-array idle-control-frame) :offset-assert 0) ;; guessed by decompiler + (anim-speed float :offset-assert 4) + (current-index int32 :offset-assert 8) + (counter int32 :offset-assert 12) + (target int32 :offset-assert 16) + ) + :method-count-assert 11 + :size-assert #x14 + :flag-assert #xb00000014 + (:methods + (idle-control-method-9 () none) ;; 9 ;; (init! (_type_ (inline-array idle-control-frame)) none) + (idle-control-method-10 () none) ;; 10 ;; (play-idle-frames! (_type_ process-drawable) none) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; water-anim ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype water-anim (process-drawable) + ((water-height meters :offset-assert 248) + (wade-height meters :offset-assert 252) + (swim-height meters :offset-assert 256) + (bottom-height meters :offset-assert 260) + (attack-event symbol :offset-assert 264) ;; guessed by decompiler + (attack-id uint32 :offset-assert 268) + (flow flow-control :offset-assert 272) ;; guessed by decompiler + (target uint64 :offset-assert 280) ;; handle + (flags water-flag :offset-assert 288) ;; guessed by decompiler + (look int32 :offset-assert 292) ;; wanim-look + (play-ambient-sound? symbol :offset-assert 296) ;; guessed by decompiler + (visible symbol :offset-assert 300) ;; guessed by decompiler + ) + :method-count-assert 59 + :size-assert #x130 + :flag-assert #x3b00a00130 + (:methods + (water-anim-method-50 () none) ;; 50 + (water-anim-method-52 () none) ;; 52 + (water-anim-method-53 () none) ;; 53 + (water-anim-method-54 () none) ;; 54 + (water-anim-method-55 () none) ;; 55 + (water-anim-method-56 () none) ;; 56 + (water-anim-method-57 () none) ;; 57 + (water-anim-method-58 () none) ;; 58 + ) + (:state-methods + idle ;; 51 + ) + ) +|# + +#| +(deftype water-anim-look (structure) + ((skel-group string :offset-assert 0) ;; guessed by decompiler + (anim int32 :offset-assert 4) + (ambient-sound-spec sound-spec :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +;; (define-extern *water-anim-look* array) ;; (array water-anim-look) +;; (define-extern water-anim-event-handler function) ;; (function process int symbol event-message-block object :behavior water-anim) +;; (define-extern water-anim-init-by-other function) ;; (function entity-actor object :behavior water-anim) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body-debug ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern adjust-playback-index function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body-surface ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *rigid-body-surfaces* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype debug-rigid-body-move (structure) + ((vel-dot-norm float :offset-assert 0) + (time-step-scale float :offset-assert 4) + (best-u float :offset-assert 8) + (i-step int8 :offset-assert 12) + (proc2 basic :offset-assert 16) + (rbody2 basic :offset-assert 20) + (best-my-prim basic :offset-assert 24) + (bsphere sphere :inline :offset-assert 32) + (impact-info rigid-body-impact :inline :offset-assert 48) + (rbody rigid-body-control :inline :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #x1b4 + :flag-assert #x9000001b4 + ) +|# + +#| +(deftype rigid-body-work (structure) + ((max-ang-momentum float :offset-assert 0) + (max-ang-velocity float :offset-assert 4) + (pid uint32 :offset-assert 8) + (step-count int8 :offset-assert 12) + (debug-history UNKNOWN 16 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x1c10 + :flag-assert #x900001c10 + ) +|# + +#| +(deftype rb-penalty-forces-work (structure) + ((impact-info rigid-body-impact :inline :offset-assert 0) + (impact-info2 rigid-body-impact :inline :offset-assert 80) + (force vector :inline :offset-assert 160) + (tmp vector :inline :offset-assert 176) + (surf-this vector :inline :offset-assert 192) + (surf-other vector :inline :offset-assert 208) + (vel vector :inline :offset-assert 224) + (vel2 vector :inline :offset-assert 240) + (len2 float :offset-assert 256) + (overlap-count int8 :offset-assert 260) + (prim-count int8 :offset-assert 261) + (prim-ctr int8 :offset-assert 262) + (i-cprim int8 :offset-assert 263) + (penetrated-by uint64 :offset-assert 264) + ) + :method-count-assert 9 + :size-assert #x110 + :flag-assert #x900000110 + ) +|# + +#| +(deftype check-line-spheres-hack-params (structure) + ((time-step float :offset-assert 0) + (mat matrix :offset-assert 4) + (cquery collide-query :offset-assert 8) + (rbody basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +#| +(deftype hack-line-sphere (structure) + ((spheres UNKNOWN 2 :offset-assert 0) + (prim basic :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype check-line-spheres-hack-work (structure) + ((fill-sphere sphere :inline :offset-assert 0) + (fill-delta vector :inline :offset-assert 16) + (delta vector :inline :offset-assert 32) + (line-spheres UNKNOWN 4 :offset-assert 48) + (cshape basic :offset-assert 176) + (collide-with uint32 :offset-assert 180) + (group-collide-with uint32 :offset-assert 184) + (group-collide-as uint32 :offset-assert 188) + (actor-count int8 :offset-assert 192) + (prim-count int8 :offset-assert 193) + (lsphere-count int8 :offset-assert 194) + (search-result-array UNKNOWN 10 :offset-assert 196) + ) + :method-count-assert 9 + :size-assert #xec + :flag-assert #x9000000ec + ) +|# + +#| +(deftype ray-tube-intersect-params (structure) + ((ray-start sphere :inline :offset-assert 0) + (ray-extrude vector :inline :offset-assert 16) + (tube-start vector :inline :offset-assert 32) + (tube-extrude vector :inline :offset-assert 48) + (tube-radius float :offset-assert 64) + (tt float :offset-assert 68) + (intersect vector :inline :offset-assert 80) + (normal vector :inline :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype rigid-body-move-work (structure) + ((cquery collide-query :inline :offset-assert 0) + (mat matrix :inline :offset-assert 544) + (impact-info rigid-body-impact :inline :offset-assert 608) + (impact-info2 rigid-body-impact :inline :offset-assert 688) + (orig-position vector :inline :offset-assert 768) + (orig-rotation quaternion :inline :offset-assert 784) + (force vector :inline :offset-assert 800) + (vel vector :inline :offset-assert 816) + (p-body vector :inline :offset-assert 832) + (tmp vector :inline :offset-assert 848) + (tangent-dir vector :inline :offset-assert 864) + (proc2 process-focusable :offset-assert 880) ;; guessed by decompiler + (rbody2 rigid-body-control :offset-assert 884) ;; guessed by decompiler + (vel-dot-norm float :offset-assert 888) + (denom float :offset-assert 892) + (denom2 float :offset-assert 896) + (bounce-factor float :offset-assert 900) + (friction-factor float :offset-assert 904) + (time-step float :offset-assert 908) + (time-step-scale float :offset-assert 912) + (penetrate-depth float :offset-assert 916) + (material uint64 :offset-assert 920) + (surface-type uint8 :offset-assert 928) + (surface rigid-body-surface :offset-assert 932) + (step-count int8 :offset-assert 936) + (start-time uint32 :offset-assert 940) + (end-time uint32 :offset-assert 944) + ) + :method-count-assert 9 + :size-assert #x3b4 + :flag-assert #x9000003b4 + ) +|# + +;; (define-extern *debug-move-rigid-body* object) +;; (define-extern *rigid-body-work* object) ;; rigid-body-work +;; (define-extern debug-draw-rigid-body-move function) +;; (define-extern matrix-3x3-triple-transpose-product function) ;; (function matrix matrix matrix matrix) +;; (define-extern damping-time-adjust function) ;; (function float float float) +;; (define-extern apply-overlap-penalty-forces function) +;; (define-extern ray-tube-intersect function) +;; (define-extern collide-sphere-with-line-sphere-hack function) +;; (define-extern check-vehicle-line-spheres-hack function) +;; (define-extern transform-rigid-body-prims function) ;; (function collide-shape-prim matrix symbol) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body-queue ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype rb-line-sphere-test (structure) + ((params ray-tube-intersect-params :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +#| +(deftype rigid-body-queue-manager (process) + ((queue rigid-body-queue :offset-assert 144) + (time-val uint32 :offset-assert 148) + (pad uint32 :offset-assert 152) + (state-time uint64 :offset-assert 160) + (delay uint32 :offset-assert 168) + (times UNKNOWN 4 :offset-assert 172) + ) + :method-count-assert 16 + :size-assert #xbc + :flag-assert #x10003000bc + (:methods + (rigid-body-queue-manager-method-9 () none) ;; 9 + (rigid-body-queue-manager-method-10 () none) ;; 10 + (rigid-body-queue-manager-method-11 () none) ;; 11 + (rigid-body-queue-manager-method-12 () none) ;; 12 + (rigid-body-queue-manager-method-13 () none) ;; 13 + (rigid-body-queue-manager-method-14 () none) ;; 14 ;; (idle () _type_ :state) + ) + (:state-methods + idle ;; 15 + ) + ) +|# + +;; (define-extern *rigid-body-queue* object) +;; (define-extern *rigid-body-queue-manager* object) ;; rigid-body-queue-manager +;; (define-extern *rb-line-sphere-test* object) +;; (define-extern rb-line-sphere-test-update function) +;; (define-extern rb-reset-perf-array function) +;; (define-extern rb-reset-perf-times function) +;; (define-extern rb-get-perf function) +;; (define-extern *rb-raw-time-val* object) +;; (define-extern rb-cpu-delay function) +;; (define-extern rigid-body-queue-manager-post function) +;; (define-extern rigid-body-queue-manager-init-by-other function) ;; (function rigid-body-queue object :behavior rigid-body-queue-manager) +;; (define-extern rigid-body-queue-manager-spawn function) ;; (function rigid-body-queue process-tree process) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rigid-body-object ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *rigid-body-object-constants* object) ;; rigid-body-object-constants +;; (define-extern rigid-body-object-event-handler function) ;; (function process int symbol event-message-block object :behavior rigid-body-object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; scene-actor ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ragdoll-test ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ragdoll-test (process-focusable) + ((ragdoll-proc uint64 :offset-assert 256) ;; handle + ) + :method-count-assert 64 + :size-assert #x108 + :flag-assert #x4000800108 + (:state-methods + reform ;; 59 + tweak ;; 60 + freefall-reform ;; 61 + freefall ;; 62 + idle ;; 63 + ) + ) +|# + +;; (define-extern *ragdoll-test-ragdoll-setup* object) ;; ragdoll-setup +;; (define-extern ragdoll-test-init-by-other function) ;; (function ragdoll-setup entity-actor object :behavior ragdoll-test) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; spartacus ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spartacus-birth-func-set-color function) +;; (define-extern spt-birth-func-spartacus-part-steam function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype helmet (structure) + ((node-list basic :offset-assert 0) + (draw basic :offset-assert 4) + (node-index int8 :offset-assert 8) + (scale float :offset-assert 12) + ) + :method-count-assert 12 + :size-assert #x10 + :flag-assert #xc00000010 + (:methods + (helmet-method-9 () none) ;; 9 + (helmet-method-10 () none) ;; 10 + (helmet-method-11 () none) ;; 11 + ) + ) +|# + +#| +(deftype driver-initialize-params (structure) + ((vehicle basic :offset-assert 0) + (level-slot int8 :offset-assert 4) + (driver-type uint8 :offset-assert 5) + ) + :method-count-assert 9 + :size-assert #x6 + :flag-assert #x900000006 + ) +|# + +#| +(deftype driver-info (structure) + ((skel basic :offset-assert 0) + (turn-back-anim int8 :offset-assert 4) + (turn-front-anim int8 :offset-assert 5) + (up-down-anim int8 :offset-assert 6) + (intro-anim UNKNOWN 4 :offset-assert 7) + (head-node int8 :offset-assert 11) + (arm0-node int8 :offset-assert 12) + (arm1-node int8 :offset-assert 13) + (arm0-dist float :offset-assert 16) + (arm1-dist float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) +|# + +#| +(deftype joint-mod-head (joint-mod) + ((mode uint32 :offset-assert 0) + (process basic :offset-assert 4) + (joint cspace :offset-assert 8) + (target vector :inline :offset-assert 12) + (twist vector :inline :offset-assert 28) + (twist-max vector :inline :offset-assert 44) + (extra-twist deg :offset-assert 36) + (track-mode track-mode :offset-assert 40) + (look-at-count uint16 :offset-assert 42) + (twist-range-x meters :offset-assert 52) + (twist-range-y meters :offset-assert 56) + (twist-speed-x float :offset-assert 60) + (twist-speed-y float :offset-assert 64) + (trans vector :inline :offset-assert 76) + (smushy-old float :offset-assert 76) + (smushy-off float :offset-assert 80) + (smushyv float :offset-assert 84) + (quat quaternion :inline :offset-assert 92) + (scale vector :inline :offset-assert 108) + (notice-time uint64 :offset-assert 124) + (flex-blend float :offset-assert 132) + (blend float :offset-assert 136) + (old-blend float :offset-assert 140) + (max-dist meters :offset-assert 144) + (ignore-angle deg :offset-assert 148) + (up uint8 :offset-assert 152) + (nose uint8 :offset-assert 153) + (ear uint8 :offset-assert 154) + (base-joint uint8 :offset-assert 155) + (base-nose uint8 :offset-assert 156) + (shutting-down? basic :offset-assert 160) + (parented-scale? basic :offset-assert 164) + ) + :method-count-assert 16 + :size-assert #xac + :flag-assert #x10000000ac + ;; field track-mode is likely a value type. + ) +|# + +#| +(deftype driver (process-focusable) + ((info driver-info :inline :offset-assert 256) + (vehicle uint64 :offset-assert 280) + (speech-time uint64 :offset-assert 288) + (anim-vel vector :inline :offset-assert 304) + (anim-pos vector :inline :offset-assert 320) + (turn-back-anim int8 :offset-assert 336) + (turn-front-anim int8 :offset-assert 337) + (up-down-anim int8 :offset-assert 338) + (intro-anim UNKNOWN 4 :offset-assert 339) + (jmod-head basic :offset-assert 344) + (arm-ik UNKNOWN 2 :offset-assert 348) + (looking-at uint64 :offset-assert 360) + (looking-at-timeout int32 :offset-assert 368) + (helmet helmet :inline :offset-assert 372) + ) + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + (:methods + (driver-method-62 () none) ;; 62 + (driver-method-63 () none) ;; 63 + (driver-method-64 () none) ;; 64 + (driver-method-65 () none) ;; 65 + (driver-method-66 () none) ;; 66 + ) + (:state-methods + idle ;; 59 + intro ;; 60 + die ;; 61 + ) + ) +|# + +;; (define-extern joint-mod-head-handler function) +;; (define-extern driver-trans function) +;; (define-extern driver-post function) +;; (define-extern driver-head function) +;; (define-extern driver-anim function) +;; (define-extern driver-event-handler function) +;; (define-extern driver-init-by-other function) +;; (define-extern driver-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; helmet ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype helmet-hud (process-drawable) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + (:methods + (helmet-hud-method-51 () none) ;; 51 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype helmet-garage (process-drawable) + ((offset vector :inline :offset-assert 256) + (hud-handle uint64 :offset-assert 272) + (vehicle-level basic :offset-assert 280) + ) + :method-count-assert 52 + :size-assert #x11c + :flag-assert #x340090011c + (:methods + (helmet-garage-method-51 () none) ;; 51 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern helmet-hud-init-by-other function) +;; (define-extern helmet-hud-spawn function) +;; (define-extern helmet-garage-init-by-other function) +;; (define-extern helmet-garage-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-jak ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-jak (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-ashelin ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-ashelin (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-razer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-razer (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-klever ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-klever (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-kiera ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-kiera (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-thug-a ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-thug-a (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-thug-b ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-thug-b (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-thug-c ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-thug-c (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-taryn ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-taryn (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-torn ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-torn (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-sig ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-sig (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-ur-86 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-ur-86 (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-kaeden ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-kaeden (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-rayn ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-rayn (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-ratchet ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-ratchet (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-jaka ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-jaka (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-jakb ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-jakb (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-jakc ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-jakc (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-daxter ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-daxter (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-gtblitz ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-gtblitz (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-pecker ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-pecker (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-ximon ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-ximon (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; driver-osmo ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype driver-osmo (driver) + () + :method-count-assert 67 + :size-assert #x184 + :flag-assert #x4301000184 + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-states ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype target-camera-runtime-info (structure) + ((active symbol :offset-assert 0) + (shot uint64 :offset-assert 8) + (mirror symbol :offset-assert 16) + (need-new-cam symbol :offset-assert 20) + (prefix symbol :offset-assert 24) + (interp float :offset-assert 28) + (last-good-los int32 :offset-assert 32) + (cur-cam-idx int8 :offset-assert 36) + (num-camera-changes int8 :offset-assert 37) + (cur-trans vector :inline :offset-assert 48) + (cur-quat quaternion :inline :offset-assert 64) + (interp-from-trans vector :inline :offset-assert 80) + (interp-from-quat quaternion :inline :offset-assert 96) + (vehicle-release-timer uint64 :offset-assert 112) + (state-time uint64 :offset-assert 120) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +(deftype crash-camera (basic) + ((camera-type uint64 :offset-assert 8) + (world-position vector :inline :offset-assert 16) + (last-target-position vector :inline :offset-assert 32) + (rating float :offset-assert 48) + (master-mult float :offset-assert 52) + (offset vector :inline :offset-assert 64) + (follow float :offset-assert 80) + (percent-delta-y-move float :offset-assert 84) + (diverge-distance float :offset-assert 88) + (zoom-factor float :offset-assert 92) + (start-time int32 :offset-assert 96) + (sparks-reset-in int32 :offset-assert 100) + (camera-rotation float :offset-assert 104) + (likelyhood float :offset-assert 108) + (group int32 :offset-assert 112) + (camera-valid? symbol :offset-assert 116) + (allow-shake? symbol :offset-assert 120) + (last-visible-check-time int32 :offset-assert 124) + (last-car-visible-time int32 :offset-assert 128) + (force-cut symbol :offset-assert 132) + (force-freeze symbol :offset-assert 136) + ) + :method-count-assert 19 + :size-assert #x8c + :flag-assert #x130000008c + (:methods + (crash-camera-method-9 () none) ;; 9 + (crash-camera-method-10 () none) ;; 10 + (crash-camera-method-11 () none) ;; 11 + (crash-camera-method-12 () none) ;; 12 + (crash-camera-method-13 () none) ;; 13 + (crash-camera-method-14 () none) ;; 14 + (crash-camera-method-15 () none) ;; 15 + (crash-camera-method-16 () none) ;; 16 + (crash-camera-method-17 () none) ;; 17 + (crash-camera-method-18 () none) ;; 18 + ) + ) + +(deftype victor-prefix-camera (crash-camera) + () + :method-count-assert 19 + :size-assert #x8c + :flag-assert #x130000008c + ) + +(deftype target-camera (basic) + ((offset-mode symbol :offset-assert 4) + (behind-offset float :offset-assert 8) + (up-offset float :offset-assert 12) + (perp-offset float :offset-assert 16) + (look-at-along float :offset-assert 20) + (fov float :offset-assert 24) + (flags uint64 :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x28 + :flag-assert #xb00000028 + (:methods + (target-camera-method-9 () none) ;; 9 + (target-camera-method-10 () none) ;; 10 + ) + ) + +(deftype vehicle-AI-control-timer (process) + ((timeout int32 :offset-assert 144) + (veh uint64 :offset-assert 152) + (cam-timer float :offset-assert 160) + ) + :method-count-assert 16 + :size-assert #xa4 + :flag-assert #x10002000a4 + (:methods + (vehicle-AI-control-timer-method-14 () none) ;; 14 + ) + (:state-methods + idle ;; 15 + ) + ) + +(define-extern cam-fixed (state camera-slave)) +(define-extern cam-fixed-read-entity (state camera-slave)) +(define-extern cam-standoff-calc-trans (function vector :behavior camera-slave)) +(define-extern cam-standoff (state camera-slave)) +(define-extern cam-standoff-read-entity (state camera-slave)) +(define-extern cam-curve-closest-point (function curve vector float float int float)) +(define-extern cam-spline (state camera-slave)) +(define-extern cam-decel (state camera-slave)) +(define-extern cam-endlessfall (state camera-slave)) +(define-extern cam-vehicle-update function) +(define-extern cam-vehicle state) +(define-extern *target-camera-runtime* object) +(define-extern target-cam-runtime-push function) +(define-extern *freeze-camera* array) +(define-extern *crash-camera-array* (array crash-camera)) +(define-extern *crash-camera-force-position* object) +(define-extern *crash-camera-force-position-valid* object) +(define-extern *target-time-speed* float) +(define-extern target-time-go-slow function) +(define-extern target-time-go-normal function) +(define-extern *plow-camera* array) +(define-extern choose-crash-camera function) +(define-extern cam-vehicle-crash state) +(define-extern *camera-training-lifetime* object) +(define-extern set-training-camera-lifetime function) +(define-extern cam-training state) +(define-extern *victor-prefix-camera-array* array) +(define-extern choose-victor-prefix-camera function) +(define-extern target-camera-active? function) +(define-extern *target-camera-array* array) +(define-extern vehicle-AI-control-timer-init-by-other function) +(define-extern target-camera-heuristic-cam-point! function) +(define-extern target-camera-heuristic-look-at! function) +(define-extern target-camera-heuristic-fov function) +(define-extern target-camera-test-los function) +(define-extern choose-target-camera function) +(define-extern camera-go-target function) +(define-extern cam-akira-mode-enter function) +(define-extern cam-vehicle-shot state) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cam-states-dbg ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype cam-point-watch-bank (basic) + ((speed float :offset-assert 4) + (rot-speed deg :offset-assert 8) ;; degrees + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype cam-free-bank (basic) + ((speed float :offset-assert 4) + (rot-speed deg :offset-assert 8) ;; degrees + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype camera-free-floating-move-info (structure) + ((rv vector :inline :offset-assert 0) + (tv vector :inline :offset-assert 16) + (up vector :inline :offset-assert 32) + (tm matrix :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) +|# + +;; (define-extern *CAM_POINT_WATCH-bank* cam-point-watch-bank) ;; cam-point-watch-bank +;; (define-extern cam-point-watch state) ;; (state camera-slave) +;; (define-extern *CAM_FREE-bank* cam-free-bank) ;; cam-free-bank +;; (define-extern cam-mouse-input function) ;; (function matrix vector vector object) +;; (define-extern cam-free-floating-input function) ;; (function matrix vector vector int int vector) +;; (define-extern cam-free-floating-move function) ;; (function matrix vector vector int vector) +;; (define-extern cam-free-floating state) ;; (state camera-slave) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-jak ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-daxter ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-pecker ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-gtblitz ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-mizo ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern sparticle-vehicle-direction-light function) +;; (define-extern sparticle-sparks-birth function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-debris ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-debris-init-params (structure) + ((mat matrix :inline :offset-assert 0) + (velocity vector :inline :offset-assert 64) + (ang-velocity vector :inline :offset-assert 80) + (color rgbaf :inline :offset-assert 96) + (radius float :offset-assert 112) + (skel basic :offset-assert 116) + (info rigid-body-object-constants :offset-assert 120) + (level basic :offset-assert 124) + (impact-sound uint16 :offset-assert 128) + (has-particles basic :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) +|# + +#| +(deftype vehicle-debris (rigid-body-object) + ((impact-sound uint16 :offset-assert 288) + (camera-dist float :offset-assert 292) + ) + :method-count-assert 92 + :size-assert #x128 + :flag-assert #x5c00a00128 + (:state-methods + explode ;; 89 + fade-out ;; 90 + die ;; 91 + ) + ) +|# + +;; (define-extern *vehicle-debris-constants* object) +;; (define-extern vehicle-debris-init-by-other function) +;; (define-extern vehicle-debris-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern calc-fade-vals function) ;; (function float none) +;; (define-extern *vehicle-headlight-glow-template* object) ;; sprite-glow-data +;; (define-extern *vehicle-taillight-glow-template* object) ;; sprite-glow-data +;; (define-extern *vehicle-thruster-glow-template* object) ;; sprite-glow-data +;; (define-extern *vehicle-particle-common-info* object) ;; vehicle-particle-common-info +;; (define-extern vehicle-draw-thruster function) ;; (function vehicle-particle-common-info vehicle-draw-thruster-params none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *debug-vehicle-work* debug-vehicle-work) ;; debug-vehicle-work +;; (define-extern *tmp-vehicle-info* object) +;; (define-extern *tmp-rigid-body-control* object) +;; (define-extern *vehicle-shadow-control* shadow-control) ;; shadow-control +;; (define-extern *vehicle-shadow-control-disabled* shadow-control) ;; shadow-control +;; (define-extern vehicle-event-handler function) ;; (function process int symbol event-message-block object :behavior vehicle) +;; (define-extern get-player-id function) +;; (define-extern twiddle-collision-cache-verts function) +;; (define-extern vehicle-damage-local-space-0 function) +;; (define-extern vehicle-damage-local-space-1 function) +;; (define-extern get-vehicle-player-id function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-skel-template ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *car-part-temp-string* string) +;; (define-extern get-car-skel-part function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-util ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *car-part-art-group-names* array) +;; (define-extern *v-tmp-str* string) +;; (define-extern debug-draw-merc function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-physics ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-states ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern vehicle-idle-post function) +;; (define-extern player-wait-control-hook function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-manager ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-manager (process) + ((name string :offset-assert 0) ;; guessed by decompiler + (mask process-mask :offset-assert 4) + (clock clock :offset-assert 8) ;; guessed by decompiler + (view basic :offset-assert 12) + (parent (pointer process-tree) :offset-assert 16) ;; guessed by decompiler + (brother (pointer process-tree) :offset-assert 20) ;; guessed by decompiler + (child (pointer process-tree) :offset-assert 24) ;; guessed by decompiler + (ppointer (pointer process) :offset-assert 28) ;; guessed by decompiler + (self process :offset-assert 32) ;; guessed by decompiler + (profile-ticks uint32 :offset-assert 36) + (pool dead-pool :offset-assert 40) ;; guessed by decompiler + (status symbol :offset-assert 44) ;; guessed by decompiler + (pid int32 :offset-assert 48) + (main-thread cpu-thread :offset-assert 52) ;; guessed by decompiler + (top-thread cpu-thread :offset-assert 56) ;; guessed by decompiler + (entity entity-actor :offset-assert 60) ;; guessed by decompiler + (level level :offset-assert 64) ;; guessed by decompiler + (state state :offset-assert 68) ;; guessed by decompiler + (prev-state state :offset-assert 72) ;; guessed by decompiler + (next-state state :offset-assert 76) ;; guessed by decompiler + (state-stack (array state) :offset-assert 80) ;; guessed by decompiler + (trans-hook function :offset-assert 84) ;; guessed by decompiler + (post-hook function :offset-assert 88) ;; guessed by decompiler + (event-hook (function process int symbol event-message-block object) :offset-assert 92) ;; guessed by decompiler + (allocated-length int32 :offset-assert 96) + (heap-base pointer :offset-assert 108) ;; guessed by decompiler + (heap-top pointer :offset-assert 112) ;; guessed by decompiler + (heap-cur pointer :offset-assert 116) ;; guessed by decompiler + (stack-frame-top stack-frame :offset-assert 120) ;; guessed by decompiler + (heap kheap :inline :offset-assert 108) + (connection-list connectable :inline :offset-assert 124) + (stack uint8 :dynamic :offset-assert 140) ;; guessed by decompiler + ) + :method-count-assert 19 + :size-assert #x90 + :flag-assert #x1300000090 + (:methods + (vehicle-manager-method-9 () none) ;; 9 + (vehicle-manager-method-10 () none) ;; 10 + (vehicle-manager-method-11 () none) ;; 11 + (vehicle-manager-method-12 () none) ;; 12 + (vehicle-manager-method-13 () none) ;; 13 + (vehicle-manager-method-14 () none) ;; 14 ;; (idle () _type_ :state) + (vehicle-manager-method-17 () none) ;; 17 ;; (vehicle-manager-method-17 (_type_) none) + (vehicle-manager-method-18 () none) ;; 18 + ) + (:state-methods + idle ;; 15, old: (active () _type_ :state) + active ;; 16, old: (vehicle-manager-method-16 (_type_) none) + ) + ) +|# + +;; (define-extern vehicle-manager-event-handler function) ;; (function process int symbol event-message-block object :behavior vehicle-manager) +;; (define-extern vehicle-manager-init-by-other function) ;; (function object :behavior vehicle-manager) +;; (define-extern vehicle-manager-start function) ;; (function process none) +;; (define-extern vehicle-manager-kill function) ;; (function none) +;; (define-extern *car-appearance-hack* object) +;; (define-extern *car-info-default* object) +;; (define-extern vehicle-init-by-other function) ;; (function int traffic-object-spawn-params object :behavior vehicle) +;; (define-extern vehicle-idx-from-level-name function) +;; (define-extern vehicle-in-level? function) +;; (define-extern vehicle-spawn function) ;; (function vehicle-type traffic-object-spawn-params process-drawable) +;; (define-extern find-vehicle function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-hud ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; vehicle-net ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype vehicle-net-state (structure) + ((hit-points float :offset-assert 0) + (flags uint8 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x5 + :flag-assert #x900000005 + ) +|# + +#| +(deftype vehicle-net-construction (structure) + ((vehicle-type uint8 :offset-assert 0) + (pos vector :inline :offset-assert 16) + (rot quaternion :inline :offset-assert 32) + (player-id int8 :offset-assert 48) + (behavior uint64 :offset-assert 56) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) +|# + +;; (define-extern *vehicle-remote-spawn-data* object) +;; (define-extern *last-latencies* object) +;; (define-extern encode-vehicle-net-state function) +;; (define-extern decode-vehicle-net-state function) +;; (define-extern encode-vehicle-net-construction function) +;; (define-extern decode-vehicle-net-construction function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; target-pilot ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern target-pilot-post function) ;; (function none :behavior target) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; pilot-states ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; find-nearest ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype search-info (structure) + ((point vector :inline :offset-assert 0) + (best-point vector :inline :offset-assert 16) + (match-handle uint64 :offset-assert 32) ;; handle + (match process-focusable :offset-assert 40) ;; guessed by decompiler + (best float :offset-assert 44) + (radius float :offset-assert 48) + (rating search-info-flag :offset-assert 52) + (require search-info-flag :offset-assert 56) + (mask search-info-flag :offset-assert 60) + (rot-base vector :inline :offset-assert 64) + (back-point vector :inline :offset-assert 80) + (rot-range float :offset-assert 96) + ) + :method-count-assert 9 + :size-assert #x64 + :flag-assert #x900000064 + ) +|# + +;; (define-extern *search-info* object) ;; search-info +;; (define-extern find-nearest-focusable function) ;; (function (array collide-shape) vector float search-info-flag search-info-flag vector vector float process-focusable) +;; (define-extern in-process-array? function) +;; (define-extern fst-insertion-helper function) +;; (define-extern find-sorted-targets! function) +;; (define-extern find-sorted-targets-faster! function) +;; (define-extern sorted-targ-validator-test-collision function) +;; (define-extern sorted-targ-validator-is-player-vehicle function) +;; (define-extern sorted-targ-validator-is-any-vehicle function) +;; (define-extern sorted-targ-validator-player-needs-los function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; glist-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype glst-node (structure) + ((next glst-node :offset-assert 0) + (prev glst-node :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype glst-named-node (glst-node) + ((privname string :offset-assert 8) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +#| +(deftype glst-list (structure) + ((head glst-node :offset-assert 0) + (tail glst-node :offset-assert 4) + (tailpred glst-node :offset-assert 8) + (numelem int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +|# + +;; (define-extern glst-next function) ;; (function glst-node glst-node) +;; (define-extern glst-prev function) ;; (function glst-node glst-node) +;; (define-extern glst-head function) ;; (function glst-list glst-node) +;; (define-extern glst-tail function) ;; (function glst-list glst-node) +;; (define-extern glst-end-of-list? function) ;; (function glst-node symbol) +;; (define-extern glst-start-of-list? function) ;; (function glst-node symbol) +;; (define-extern glst-empty? function) ;; (function glst-list symbol) +;; (define-extern glst-node-name function) ;; (function glst-named-node string) +;; (define-extern glst-set-name! function) ;; (function glst-named-node string string) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; glist ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern glst-num-elements function) ;; (function glst-list int) +;; (define-extern glst-remove function) ;; (function glst-list glst-node glst-node) +;; (define-extern glst-remove-tail function) ;; (function glst-list glst-node) +;; (define-extern glst-remove-head function) ;; (function glst-list glst-node) +;; (define-extern glst-insert-before function) ;; (function glst-list glst-node glst-node glst-node) +;; (define-extern glst-insert-after function) ;; (function glst-list glst-node glst-node glst-node) +;; (define-extern glst-add-tail function) ;; (function glst-list glst-node glst-node) +;; (define-extern glst-add-head function) ;; (function glst-list glst-node glst-node) +;; (define-extern glst-init-list! function) ;; (function glst-list glst-list) +;; (define-extern glst-find-node-by-name function) ;; (function glst-list string glst-node) +;; (define-extern glst-get-node-by-index function) ;; (function glst-list int glst-node) +;; (define-extern glst-length-of-longest-name function) ;; (function glst-list int) +;; (define-extern glst-get-node-index function) ;; (function glst-list glst-node int) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; anim-tester ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype list-control (structure) + ((listfunc (function int list-control symbol) :offset-assert 0) ;; guessed by decompiler + (list-owner uint32 :offset-assert 4) + (top int32 :offset-assert 8) + (left int32 :offset-assert 12) + (list glst-list :offset-assert 16) + (the-node glst-node :offset-assert 20) + (top-index int32 :offset-assert 24) + (the-index int32 :offset-assert 28) + (the-disp-line int32 :offset-assert 32) + (highlight-index int32 :offset-assert 36) + (current-index int32 :offset-assert 40) + (numlines int32 :offset-assert 44) + (lines-to-disp int32 :offset-assert 48) + (charswide int32 :offset-assert 52) + (highlight-disp-line int32 :offset-assert 56) + (field-id int32 :offset-assert 60) + (xpos int32 :offset-assert 64) + (ypos int32 :offset-assert 68) + (user-info int32 :offset-assert 72) + (return-int int32 :offset-assert 76) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) +|# + +#| +(deftype list-field (structure) + ((left int32 :offset-assert 0) + (width int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype DISP_LIST-bank (basic) + ((V_SPACING int32 :offset-assert 4) + (BORDER_WIDTH int32 :offset-assert 8) + (BORDER_HEIGHT int32 :offset-assert 12) + (MAX_LINES int32 :offset-assert 16) + (CHAR_WIDTH int32 :offset-assert 20) + (INC_DELAY int32 :offset-assert 24) + (BORDER_LINES int32 :offset-assert 28) + (CXOFF int32 :offset-assert 32) + (CYOFF int32 :offset-assert 36) + (BXOFF int32 :offset-assert 40) + (BYOFF int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype anim-tester-bank (basic) + ((ANIM_SPEED float :offset-assert 4) + (BLEND float :offset-assert 8) + (OBJECT_LIST_X int32 :offset-assert 12) + (OBJECT_LIST_Y int32 :offset-assert 16) + (OBJECT_LIST_MIN_WIDTH int32 :offset-assert 20) + (ANIM_LIST_X int32 :offset-assert 24) + (ANIM_LIST_Y int32 :offset-assert 28) + (ANIM_LIST_MIN_WIDTH int32 :offset-assert 32) + (PICK_LIST_X int32 :offset-assert 36) + (PICK_LIST_Y int32 :offset-assert 40) + (PICK_LIST_MIN_WIDTH int32 :offset-assert 44) + (EDIT_LIST_X int32 :offset-assert 48) + (EDIT_LIST_Y int32 :offset-assert 52) + (EDIT_STATS_X int32 :offset-assert 56) + (EDIT_LIST_MIN_WIDTH int32 :offset-assert 60) + (EDIT_PICK_X int32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) +|# + +;; anim-tester is already defined! + +#| +(deftype anim-test-obj (glst-named-node) + ((obj-art-group basic :offset-assert 12) + (seq-list glst-list :inline :offset-assert 16) + (flags int32 :offset-assert 32) + (mesh-geo basic :offset-assert 36) + (joint-geo basic :offset-assert 40) + (list-con list-control :inline :offset-assert 44) + (parent uint32 :offset-assert 124) + (anim-index int32 :offset-assert 128) + (anim-hindex int32 :offset-assert 132) + (seq-index int32 :offset-assert 136) + (seq-hindex int32 :offset-assert 140) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + ) +|# + +#| +(deftype anim-test-sequence (glst-named-node) + ((item-list glst-list :inline :offset-assert 12) + (playing-item int32 :offset-assert 28) + (flags int32 :offset-assert 32) + (list-con list-control :inline :offset-assert 36) + (parent anim-test-obj :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + ) +|# + +#| +(deftype anim-test-seq-item (glst-named-node) + ((speed int32 :offset-assert 12) + (blend int32 :offset-assert 16) + (first-frame float :offset-assert 20) + (last-frame float :offset-assert 24) + (num-frames float :offset-assert 28) + (artist-base float :offset-assert 32) + (flags int32 :offset-assert 36) + (parent anim-test-sequence :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) +|# + +;; (define-extern *DISP_LIST-bank* DISP_LIST-bank) +;; (define-extern display-list-control function) +;; (define-extern *ANIM_TESTER-bank* anim-tester-bank) +;; (define-extern anim-tester-num-print function) +;; (define-extern *anim-tester* object) ;; (pointer anim-tester) +;; (define-extern anim-test-obj-init function) +;; (define-extern anim-test-sequence-init function) +;; (define-extern anim-test-seq-item-copy! function) +;; (define-extern anim-test-obj-item-valid? function) +;; (define-extern anim-test-obj-remove-invalid function) +;; (define-extern anim-tester-real-post function) +;; (define-extern anim-tester-post function) +;; (define-extern anim-tester-update-anim-info function) +;; (define-extern anim-tester-reset function) +;; (define-extern anim-tester-disp-frame-num function) +;; (define-extern anim-tester-standard-event-handler function) +;; (define-extern anim-test-obj-list-handler function) +;; (define-extern anim-test-anim-list-handler function) +;; (define-extern anim-test-sequence-list-handler function) +;; (define-extern anim-test-field-highlight-lw object) +;; (define-extern anim-tester-adjust-frame function) +;; (define-extern anim-tester-pick-item-setup function) +;; (define-extern anim-test-seq-mark-as-edited function) +;; (define-extern anim-test-edit-seq-insert-item function) +;; (define-extern anim-test-edit-sequence-list-handler function) +;; (define-extern anim-tester-interface function) +;; (define-extern anim-tester-get-playing-item function) +;; (define-extern initialize-anim-tester function) +;; (define-extern anim-tester-string-get-frame!! function) +;; (define-extern anim-tester-load-object-seqs function) +;; (define-extern anim-tester-save-object-seqs function) +;; (define-extern anim-tester-save-all-objects function) +;; (define-extern anim-tester-add-newobj function) +;; (define-extern anim-tester-stop function) +;; (define-extern anim-tester-start function) ;; (function symbol) +;; (define-extern anim-tester-add-object function) ;; (function string none) +;; (define-extern anim-tester-set-name function) +;; (define-extern anim-tester-add-sequence function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; viewer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype viewer (process-drawable) + ((janim art-joint-anim :offset-assert 248) ;; guessed by decompiler + ) + :method-count-assert 50 + :size-assert #xfc + :flag-assert #x32007000fc + (:states + viewer-process ;; associated process guessed by decompiler, old: (state viewer) + ) + ) +|# + +;; (define-extern *viewer-sg* skeleton-group) ;; skeleton-group +;; (define-extern viewer-string object) ;; string +;; (define-extern viewer-ja-name object) ;; string +;; (define-extern viewer-geo-name object) ;; string +;; (define-extern actor-get-arg! function) ;; (function string string string symbol) +;; (define-extern art-part-name function) ;; (function string string) +;; (define-extern init-viewer function) ;; (function string string object :behavior viewer) +;; (define-extern init-viewer-for-other function) ;; (function string vector entity-actor object :behavior viewer) +;; (define-extern add-a-bunch function) ;; (function string int int float process-tree entity-actor symbol) +;; (define-extern birth-viewer function) ;; (function process entity-actor object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; part-tester ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype save-memcard (process) + ((name basic :offset-assert 4) + ) + :method-count-assert 19 + :size-assert #x94 + :flag-assert #x1300100094 + (:methods + (save-memcard-method-9 () none) ;; 9 + (save-memcard-method-10 () none) ;; 10 + (save-memcard-method-11 () none) ;; 11 + (save-memcard-method-12 () none) ;; 12 + (save-memcard-method-13 () none) ;; 13 + (save-memcard-method-14 () none) ;; 14 + ) + (:state-methods + create-file ;; 15 + save-account ;; 18 + error-error ;; 16 + done-done ;; 17 + ) + ) +|# + +#| +(deftype part-tester (process) + ((root trsqv :offset-assert 144) ;; guessed by decompiler + (part sparticle-launch-control :offset-assert 148) ;; guessed by decompiler + (old-group sparticle-launch-group :offset-assert 152) ;; guessed by decompiler + ) + :method-count-assert 15 + :size-assert #x9c + :flag-assert #xf0010009c + (:methods + (part-tester-method-9 () none) ;; 9 + (part-tester-method-10 () none) ;; 10 + (part-tester-method-11 () none) ;; 11 + (part-tester-method-12 () none) ;; 12 + (part-tester-method-13 () none) ;; 13 + (part-tester-method-14 () none) ;; 14 + ) + (:states + part-tester-idle ;; associated process guessed by decompiler, old: (state part-tester) + ) + ) +|# + +#| +(deftype test-process (process-focusable) + ((state-time uint64 :offset-assert 240) + (effect uint8 :offset-assert 264) + (sound-id uint32 :offset-assert 268) + ) + :method-count-assert 59 + :size-assert #x110 + :flag-assert #x3b00800110 + ) +|# + +;; (define-extern save-memcard-init-by-other function) +;; (define-extern *debug-save-memcard-dead-pool* object) +;; (define-extern start-save-memcard function) +;; (define-extern *part-tester-name* object) ;; string +;; (define-extern part-tester-init-by-other function) ;; (function vector none :behavior process-drawable) +;; (define-extern *debug-part-dead-pool* object) ;; dead-pool +;; (define-extern start-part function) ;; (function none) +;; (define-extern test-idle state) +;; (define-extern test-process-init-by-other function) +;; (define-extern start-test function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; manipulator ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype manipulator (structure) + ((action manipulator-action :offset-assert 0) ;; guessed by decompiler + (mode manipulator-mode :offset-assert 4) ;; guessed by decompiler + (dragging? symbol :offset-assert 8) ;; guessed by decompiler + (position vector :inline :offset-assert 16) + (speed vector :inline :offset-assert 32) + (drag-ref-position vector :inline :offset-assert 48) + (mouse-ref-position vector :inline :offset-assert 64) + (mat matrix :inline :offset-assert 80) + (rotate-ref int32 :offset-assert 144) + (angles euler-angles :inline :offset-assert 160) + ) + :method-count-assert 15 + :size-assert #xb0 + :flag-assert #xf000000b0 + (:methods + (manipulator-method-9 () none) ;; 9 ;; (set-mode (_type_ manipulator-mode) none) + (manipulator-method-10 () none) ;; 10 ;; (manipulator-method-10 (_type_) none) + (manipulator-method-11 () none) ;; 11 ;; (manipulator-method-11 (_type_) none) + (manipulator-method-12 () none) ;; 12 ;; (manipulator-method-12 (_type_ vector) none) + (manipulator-method-13 () none) ;; 13 ;; (manipulator-method-13 (_type_ vector vector) none) + (manipulator-method-14 () none) ;; 14 ;; (manipulator-method-14 (_type_) none) + ) + ) +|# + +;; (define-extern draw-axis function) ;; (function vector vector float float rgba none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; editable-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype editable-region (basic) + ((changed symbol :offset-assert 4) ;; guessed by decompiler + (locked symbol :offset-assert 8) ;; guessed by decompiler + (id uint64 :offset-assert 16) + (filter editable-filter :offset-assert 24) ;; guessed by decompiler + (tree symbol :offset-assert 28) ;; guessed by decompiler + (level string :offset-assert 32) ;; guessed by decompiler + (on-enter string :offset-assert 36) ;; guessed by decompiler + (on-inside string :offset-assert 40) ;; guessed by decompiler + (on-exit string :offset-assert 44) ;; guessed by decompiler + ) + :method-count-assert 13 + :size-assert #x30 + :flag-assert #xd00000030 + ;; field on-enter uses ~A with a signed load. field on-inside uses ~A with a signed load. field on-exit uses ~A with a signed load. + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (editable-region-method-9 () none) ;; 9 ;; (editable-region-method-9 () none) + (editable-region-method-10 () none) ;; 10 ;; (editable-region-method-10 () none) + (editable-region-method-11 () none) ;; 11 ;; (editable-region-method-11 () none) + (editable-region-method-12 () none) ;; 12 ;; (editable-region-method-12 () none) + ) + ) +|# + +#| +(deftype editable (basic) + ((flags editable-flag :offset-assert 4) + (name string :offset-assert 8) ;; guessed by decompiler + (id uint32 :offset-assert 12) + (region editable-region :offset-assert 16) ;; guessed by decompiler + (owner pair :offset-assert 20) ;; guessed by decompiler + (prefix basic :offset-assert 24) + ) + :method-count-assert 36 + :size-assert #x1c + :flag-assert #x240000001c + (:methods + (editable-method-9 () none) ;; 9 ;; (editable-method-9 () none) + (editable-method-10 () none) ;; 10 ;; (editable-method-10 () none) + (editable-method-11 () none) ;; 11 ;; (editable-method-11 () none) + (editable-method-12 () none) ;; 12 ;; (editable-method-12 () none) + (editable-method-13 () none) ;; 13 ;; (editable-method-13 () none) + (editable-method-14 () none) ;; 14 ;; (editable-method-14 () none) + (editable-method-15 () none) ;; 15 ;; (editable-method-15 () none) + (editable-method-16 () none) ;; 16 ;; (editable-method-16 () none) + (editable-method-17 () none) ;; 17 ;; (editable-method-17 () none) + (editable-method-18 () none) ;; 18 ;; (editable-method-18 () none) + (editable-method-19 () none) ;; 19 ;; (editable-method-19 () none) + (editable-method-20 () none) ;; 20 ;; (editable-method-20 () none) + (editable-method-21 () none) ;; 21 ;; (editable-method-21 () none) + (editable-method-22 () none) ;; 22 ;; (editable-method-22 () none) + (editable-method-23 () none) ;; 23 ;; (editable-method-23 () none) + (editable-method-24 () none) ;; 24 ;; (editable-method-24 () none) + (editable-method-25 () none) ;; 25 ;; (editable-method-25 () none) + (editable-method-26 () none) ;; 26 ;; (editable-method-26 () none) + (editable-method-27 () none) ;; 27 ;; (editable-method-27 () none) + (editable-method-28 () none) ;; 28 ;; (editable-method-28 () none) + (editable-method-29 () none) ;; 29 ;; (editable-method-29 () none) + (editable-method-30 () none) ;; 30 ;; (editable-method-30 () none) + (editable-method-31 () none) ;; 31 ;; (editable-method-31 () none) + (editable-method-32 () none) ;; 32 ;; (editable-method-32 () none) + (editable-method-33 () none) ;; 33 ;; (editable-method-33 () none) + (editable-method-34 () none) ;; 34 ;; (editable-method-34 () none) + (editable-method-35 () none) ;; 35 ;; (editable-method-35 () none) + ) + ) +|# + +#| +(deftype editable-array (basic) + ((allocated-length int32 :offset-assert 4) + (length int32 :offset-assert 8) + (region editable-region :offset-assert 12) ;; guessed by decompiler + (backup-region editable-region :offset-assert 16) ;; guessed by decompiler + (region-lock? symbol :offset-assert 20) ;; guessed by decompiler + (move-lock? symbol :offset-assert 24) ;; guessed by decompiler + (move-speed float :offset-assert 28) + (selection (array editable) :offset-assert 32) ;; guessed by decompiler + (filter editable-filter 2 :offset-assert 36) ;; guessed by decompiler + (target editable :offset-assert 44) ;; guessed by decompiler + (target-mode editable-command :offset-assert 48) ;; guessed by decompiler + (target-command editable-command :offset-assert 52) ;; guessed by decompiler + (target-message string :offset-assert 56) ;; guessed by decompiler + (edit-plane editable-plane :offset-assert 60) ;; guessed by decompiler + (edit-plane-center vector :inline :offset-assert 64) + (edit-plane-normal vector :inline :offset-assert 80) + (level-offset vector :inline :offset-assert 96) + (level-info-id uint32 :offset-assert 112) + (level uint32 :offset-assert 116) ;; guessed by decompiler + (edit-param0 float :offset-assert 120) + (data editable :dynamic :offset-assert 124) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 20 + :size-assert #x7c + :flag-assert #x140000007c + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type int) _type_) + (editable-array-method-9 () none) ;; 9 ;; (editable-array-method-9 () none) + (editable-array-method-10 () none) ;; 10 ;; (editable-array-method-10 () none) + (editable-array-method-11 () none) ;; 11 ;; (editable-array-method-11 () none) + (editable-array-method-12 () none) ;; 12 ;; (editable-array-method-12 () none) + (editable-array-method-13 () none) ;; 13 ;; (editable-array-method-13 () none) + (editable-array-method-14 () none) ;; 14 ;; (editable-array-method-14 () none) + (editable-array-method-15 () none) ;; 15 ;; (editable-array-method-15 () none) + (editable-array-method-16 () none) ;; 16 ;; (editable-array-method-16 () none) + (editable-array-method-17 () none) ;; 17 ;; (editable-array-method-17 () none) + (editable-array-method-18 () none) ;; 18 ;; (editable-array-method-18 () none) + (editable-array-method-19 () none) ;; 19 ;; (editable-array-method-19 () none) + ) + ) +|# + +#| +(deftype editable-point (editable) + ((flags editable-flag :offset-assert 0) + (name string :offset-assert 4) ;; guessed by decompiler + (id uint32 :offset-assert 8) + (region editable-region :offset-assert 12) ;; guessed by decompiler + (owner pair :offset-assert 16) ;; guessed by decompiler + (prefix basic :offset-assert 20) + (radius meters :offset-assert 24) + (trans vector :inline :offset-assert 28) + ) + :method-count-assert 36 + :size-assert #x30 + :flag-assert #x2400000030 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type vector editable-region) _type_) + ) + ) +|# + +#| +(deftype editable-sphere (editable-point) + () + :method-count-assert 36 + :size-assert #x30 + :flag-assert #x2400000030 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type vector float editable-region) _type_) + ) + ) +|# + +#| +(deftype editable-sample (editable-point) + () + :method-count-assert 36 + :size-assert #x30 + :flag-assert #x2400000030 + ) +|# + +#| +(deftype editable-light (editable-sphere) + ((direction vector :inline :offset-assert 44) + (color vector :inline :offset-assert 60) + (decay-start float :offset-assert 76) + (ambient-point-ratio float :offset-assert 80) + (brightness float :offset-assert 84) + (shadow uint32 :offset-assert 44) + (shadows float 5 :offset-assert 88) ;; guessed by decompiler + (shadow-ambi float :offset-assert 88) + (shadow-dir0 float :offset-assert 92) + (shadow-dir1 float :offset-assert 96) + (shadow-dir2 float :offset-assert 100) + (shadow-dir3 float :offset-assert 104) + (alt-level basic :offset-assert 108) + ) + :method-count-assert 36 + :size-assert #x74 + :flag-assert #x2400000074 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type vector float editable-region) _type_) + ) + ) +|# + +#| +(deftype editable-entity (editable-point) + ((angles euler-angles :inline :offset-assert 44) + (idx int32 :offset-assert 60) + ) + :method-count-assert 37 + :size-assert #x44 + :flag-assert #x2500000044 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type vector float editable-region) _type_) + (editable-entity-method-36 () none) ;; 36 ;; (editable-entity-method-36 () none) + ) + ) +|# + +#| +(deftype editable-face (editable) + ((flags editable-flag :offset-assert 0) + (name string :offset-assert 4) ;; guessed by decompiler + (id uint32 :offset-assert 8) + (region editable-region :offset-assert 12) ;; guessed by decompiler + (owner pair :offset-assert 16) ;; guessed by decompiler + (prefix basic :offset-assert 20) + (length int32 :offset-assert 24) + (normal vector :inline :offset-assert 28) + (center vector :inline :offset-assert 44) + (vertex editable-point 6 :offset-assert 60) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 38 + :size-assert #x58 + :flag-assert #x2600000058 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type editable-region) _type_) + (editable-face-method-36 () none) ;; 36 ;; (editable-face-method-36 () none) + (editable-face-method-37 () none) ;; 37 ;; (editable-face-method-37 () none) + ) + ) +|# + +#| +(deftype editable-plane (editable) + ((flags editable-flag :offset-assert 0) + (name string :offset-assert 4) ;; guessed by decompiler + (id uint32 :offset-assert 8) + (region editable-region :offset-assert 12) ;; guessed by decompiler + (owner pair :offset-assert 16) ;; guessed by decompiler + (prefix basic :offset-assert 20) + (length int32 :offset-assert 24) + (radius meters :offset-assert 28) + (vertex editable-point 2 :offset-assert 32) ;; guessed by decompiler + (UNKNOWN UNKNOWN :offset-assert -1) ;; field could not be read. + ) + :method-count-assert 38 + :size-assert #x2c + :flag-assert #x260000002c + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type editable-region) _type_) + (editable-plane-method-36 () none) ;; 36 ;; (editable-plane-method-36 () none) + (editable-plane-method-37 () none) ;; 37 ;; (editable-plane-method-37 () none) + ) + ) +|# + +#| +(deftype editable-player (process-drawable) + ((current editable-array :offset-assert 248) ;; guessed by decompiler + (current-command uint32 :offset-assert 252) + (select-command function :offset-assert 256) ;; guessed by decompiler + (drag-command uint32 :offset-assert 260) + (extra-command function :offset-assert 264) ;; guessed by decompiler + (left-handed basic :offset-assert 268) + (light-names basic :offset-assert 272) + (external-cam-mode symbol :offset-assert 276) ;; guessed by decompiler + (command editable-command 6 :offset-assert 280) ;; guessed by decompiler + (close-menu-time uint64 :offset-assert 304) ;; time-frame + (mouse-pos vector :inline :offset-assert 320) + (mouse-end vector :inline :offset-assert 336) + (manipulator manipulator :inline :offset-assert 352) + (mouse-box vector 2 :offset-assert 528) ;; guessed by decompiler + (mouse-hit vector :inline :offset-assert 560) + (mouse-normal vector :inline :offset-assert 576) + (float-variable float :offset-assert 592) + (float-step float :offset-assert 596) + (float-max float :offset-assert 600) + (float-min float :offset-assert 604) + (float-id uint32 :offset-assert 608) + ) + :method-count-assert 54 + :size-assert #x264 + :flag-assert #x3601e00264 + (:methods + (editable-player-method-50 () none) ;; 50 + (editable-player-method-51 () none) ;; 51 + (editable-player-method-52 () none) ;; 52 + (editable-player-method-53 () none) ;; 53 + ) + ) +|# + +#| +(deftype editable-work (basic) + ((num-found int16 :offset-assert 4) + (last-found int16 :offset-assert 6) + (last-x float :offset-assert 8) + (last-y float :offset-assert 12) + (hide symbol :offset-assert 16) ;; guessed by decompiler + (found editable 256 :offset-assert 20) ;; guessed by decompiler + (dists uint32 256 :offset-assert 1044) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x814 + :flag-assert #x900000814 + ) +|# + +;; (define-extern *editable-temp-id* object) ;; int +;; (define-extern *editable-default-name* object) ;; string +;; (define-extern editable-command->string function) ;; (function editable-command string) +;; (define-extern editable-filter->string function) ;; (function editable-filter basic string) +;; (define-extern *editable-work* object) ;; editable-work +;; (define-extern *editable* object) ;; (pointer editable-player) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; editable ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern common-owner function) +;; (define-extern update-light-sphere-from-editable-light function) +;; (define-extern load-editable-lights function) +;; (define-extern *editable-sample-region* object) +;; (define-extern *editable-light-region* object) +;; (define-extern *editable-entity-region* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; editable-player ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern cleanup-selection function) +;; (define-extern insert-box function) +;; (define-extern insert-wall function) +;; (define-extern update-manipulator-position function) +;; (define-extern execute-select function) +;; (define-extern execute-mouse-move function) +;; (define-extern execute-move function) +;; (define-extern get-light-value function) +;; (define-extern set-light-value function) +;; (define-extern keybd-set-time-of-day! function) +;; (define-extern lookup-bsp-by-name function) +;; (define-extern editable-player-init function) ;; (function symbol none :behavior editable-player) +;; (define-extern set-editable-name function) +;; (define-extern select-editable-by-name function) +;; (define-extern *editable-menu-context* object) ;; debug-menu-context +;; (define-extern editable-menu-command function) +;; (define-extern editable-menu-command-no-close function) +;; (define-extern dm-region-tree-pick-func function) +;; (define-extern dm-editable-flag-pick-func function) +;; (define-extern dm-editable-filter0-pick-func function) +;; (define-extern dm-editable-filter1-pick-func function) +;; (define-extern dm-editable-light-float-func function) +;; (define-extern dm-cam-externalize2 function) +;; (define-extern dm-editable-boolean-toggle-pick-func function) +;; (define-extern editable-menu-context-make-menus function) +;; (define-extern insert-sample-camera function) +;; (define-extern *debug-hook* object) ;; pair + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mysql-nav-graph ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype mysql-nav-node (structure) + ((mysql-save-flag mysql-save-flag :offset-assert 0) ;; guessed by decompiler + (runtime-id uint32 :offset-assert 4) + (temp-edge-list (inline-array mysql-nav-edge) :offset-assert 8) ;; guessed by decompiler + (level-node-index int32 :offset-assert 12) + (cam-dist float :offset-assert 16) + (visible symbol :offset-assert 20) ;; guessed by decompiler + (nav_node_id uint32 :offset-assert 24) + (nav_graph_id uint32 :offset-assert 28) + (position vector :inline :offset-assert 32) + (level_name symbol :offset-assert 48) ;; guessed by decompiler + (angle float :offset-assert 52) + (radius float :offset-assert 56) + (nav_node_flag nav-node-flag :offset-assert 60) ;; guessed by decompiler + (nav_mesh_id uint32 :offset-assert 64) + (data_int_0 uint32 :offset-assert 68) + (data_int_1 uint32 :offset-assert 72) + ) + :method-count-assert 11 + :size-assert #x4c + :flag-assert #xb0000004c + (:methods + (mysql-nav-node-method-9 () none) ;; 9 ;; (exec-sql! (_type_) symbol) + (mysql-nav-node-method-10 () none) ;; 10 ;; (temp-edge-size (_type_) int) + ) + ) +|# + +#| +(deftype mysql-nav-node-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data mysql-nav-node :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype mysql-nav-edge (structure) + ((mysql-save-flag mysql-save-flag :offset-assert 0) ;; guessed by decompiler + (runtime-id uint32 :offset-assert 4) + (runtime-node-id-1 int32 :offset-assert 8) + (runtime-node-id-2 int32 :offset-assert 12) + (temp-next-edge mysql-nav-edge :offset-assert 16) + (nav_edge_id uint32 :offset-assert 20) + (nav_graph_id uint32 :offset-assert 24) + (nav_node_id_1 uint32 :offset-assert 28) + (nav_node_id_2 uint32 :offset-assert 32) + (directionality nav-directionality :offset-assert 36) ;; guessed by decompiler + (speed_limit float :offset-assert 40) + (density float :offset-assert 44) + (traffic_edge_flag int32 :offset-assert 48) + (nav_clock_mask nav-clock-mask :offset-assert 52) ;; guessed by decompiler + (nav_clock_type nav-clock-type :offset-assert 56) ;; guessed by decompiler + (nav_territory_type uint32 :offset-assert 60) + (exclusive_data uint32 :offset-assert 64) + (width float :offset-assert 68) + (minimap_edge_flag int32 :offset-assert 72) + ) + :method-count-assert 10 + :size-assert #x4c + :flag-assert #xa0000004c + (:methods + (mysql-nav-edge-method-9 () none) ;; 9 ;; (mysql-nav-edge-method-9 () none) + ) + ) +|# + +#| +(deftype mysql-nav-edge-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data mysql-nav-edge :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype mysql-nav-visnode (structure) + ((mysql-save-flag mysql-save-flag :offset-assert 0) ;; guessed by decompiler + (runtime-node-id int32 :offset-assert 4) + (runtime-edge-id int32 :offset-assert 8) + (nav_visnode_id uint32 :offset-assert 12) + (nav_graph_id uint32 :offset-assert 16) + (nav_node_id uint32 :offset-assert 20) + (nav_edge_id uint32 :offset-assert 24) + ) + :method-count-assert 10 + :size-assert #x1c + :flag-assert #xa0000001c + (:methods + (mysql-nav-visnode-method-9 () none) ;; 9 ;; (mysql-nav-visnode-method-9 () none) + ) + ) +|# + +#| +(deftype mysql-nav-visnode-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data mysql-nav-visnode :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype mysql-nav-pov-conn (structure) + ((runtime-node-id-1 int32 :offset-assert 0) + (runtime-node-id-2 int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype mysql-nav-graph-level-info (structure) + ((level symbol :offset-assert 0) ;; guessed by decompiler + (level-id uint32 :offset-assert 4) + (node-count int32 :offset-assert 8) + (branch-count int32 :offset-assert 12) + (to-link-count int32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype mysql-nav-graph (basic) + ((nav_graph_id uint32 :offset-assert 4) + (graph-type basic :offset-assert 8) + (node-array mysql-nav-node-array :offset-assert 12) ;; guessed by decompiler + (edge-array mysql-nav-edge-array :offset-assert 16) ;; guessed by decompiler + (visnode-array mysql-nav-visnode-array :offset-assert 20) ;; guessed by decompiler + (pov-conn-array uint32 :offset-assert 24) + (pov-conn-array-length int32 :offset-assert 28) + (level-info-array-length int32 :offset-assert 32) + (level-info-last-lookup int32 :offset-assert 36) + (level-info-array mysql-nav-graph-level-info 32 :offset-assert 40) ;; guessed by decompiler + ) + :method-count-assert 24 + :size-assert #x428 + :flag-assert #x1800000428 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type string) _type_) + (mysql-nav-graph-method-9 () none) ;; 9 ;; (init-from-sql! (_type_ string string) symbol) + (mysql-nav-graph-method-10 () none) ;; 10 ;; (exec-sql! (_type_) symbol) + (mysql-nav-graph-method-11 () none) ;; 11 ;; (indexof-nav-node (_type_ int) int) + (mysql-nav-graph-method-12 () none) ;; 12 ;; (indexof-nav-edge (_type_ int) int) + (mysql-nav-graph-method-13 () none) ;; 13 ;; (mysql-nav-graph-method-13 (_type_) none) + (mysql-nav-graph-method-14 () none) ;; 14 ;; (mysql-nav-graph-method-14 (_type_) none) + (mysql-nav-graph-method-15 () none) ;; 15 ;; (mysql-nav-graph-method-15 (_type_) none) + (mysql-nav-graph-method-16 () none) ;; 16 ;; (mysql-nav-graph-method-16 (_type_) none) + (mysql-nav-graph-method-17 () none) ;; 17 ;; (mysql-nav-graph-method-17 (_type_) none) + (mysql-nav-graph-method-18 () none) ;; 18 ;; (lookup-level-info2 (_type_ mysql-nav-node symbol) mysql-nav-graph-level-info) + (mysql-nav-graph-method-19 () none) ;; 19 ;; (mysql-nav-graph-method-19 (_type_) none) + (mysql-nav-graph-method-20 () none) ;; 20 ;; (mysql-nav-graph-method-20 (_type_) none) + (mysql-nav-graph-method-21 () none) ;; 21 ;; (mysql-nav-graph-method-21 (_type_) none) + (mysql-nav-graph-method-22 () none) ;; 22 ;; (mysql-nav-graph-method-22 (_type_) none) + (mysql-nav-graph-method-23 () none) ;; 23 ;; (mysql-nav-graph-method-23 (_type_) none) + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-graph-editor ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype nav-graph-command (structure) + ((com-type uint32 :offset-assert 0) + (id int32 :offset-assert 4) + (index int32 :offset-assert 8) + (move-vec vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype nav-graph-command-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data nav-graph-command :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype nav-graph-editor (process) + ((nav-graph mysql-nav-graph :offset-assert 144) ;; guessed by decompiler + (mode symbol :offset-assert 148) ;; guessed by decompiler + (command-id int32 :offset-assert 152) + (max-command int32 :offset-assert 156) + (selected-index int32 :offset-assert 160) + (selected-dist float :offset-assert 164) + (selected-node-edge? symbol :offset-assert 168) ;; guessed by decompiler + (closest-node int32 :offset-assert 172) + (dist-closest-node float :offset-assert 176) + (closest-edge int32 :offset-assert 180) + (dist-closest-edge float :offset-assert 184) + (mouse-pos vector :inline :offset-assert 192) + (mouse-hit vector :inline :offset-assert 208) + (mouse-hit-pick vector :inline :offset-assert 224) + (mouse-normal vector :inline :offset-assert 240) + (mouse-spos-hold vector :inline :offset-assert 256) + (edge-src int32 :offset-assert 272) + (edge-dst int32 :offset-assert 276) + (edge-visibility int32 :offset-assert 280) + (vehicle-edit-mode symbol :offset-assert 284) ;; guessed by decompiler + (hover-edit-mode symbol :offset-assert 288) ;; guessed by decompiler + (plane-height float :offset-assert 292) + (plane-height-hold float :offset-assert 296) + (minimap-make-mode uint8 :offset-assert 300) + (clipping-dist float :offset-assert 304) + (default-node mysql-nav-node :inline :offset-assert 320) + (default-edge mysql-nav-edge :inline :offset-assert 396) + (command-array nav-graph-command-array :offset-assert 472) ;; guessed by decompiler + ) + :method-count-assert 69 + :size-assert #x1dc + :flag-assert #x45015001dc + (:methods + (nav-graph-editor-method-9 () none) ;; 9 + (nav-graph-editor-method-10 () none) ;; 10 + (nav-graph-editor-method-11 () none) ;; 11 + (nav-graph-editor-method-12 () none) ;; 12 + (nav-graph-editor-method-13 () none) ;; 13 + (nav-graph-editor-method-14 () none) ;; 14 ;; (move-node () _type_ :state) + (nav-graph-editor-method-30 () none) ;; 30 ;; (nav-graph-editor-method-30 () none) + (nav-graph-editor-method-31 () none) ;; 31 ;; (nav-graph-editor-method-31 () none) + (nav-graph-editor-method-32 () none) ;; 32 ;; (nav-graph-editor-method-32 () none) + (nav-graph-editor-method-33 () none) ;; 33 ;; (nav-graph-editor-method-33 () none) + (nav-graph-editor-method-34 () none) ;; 34 ;; (nav-graph-editor-method-34 () none) + (nav-graph-editor-method-35 () none) ;; 35 ;; (nav-graph-editor-method-35 () none) + (nav-graph-editor-method-36 () none) ;; 36 ;; (nav-graph-editor-method-36 () none) + (nav-graph-editor-method-37 () none) ;; 37 ;; (nav-graph-editor-method-37 () none) + (nav-graph-editor-method-38 () none) ;; 38 ;; (nav-graph-editor-method-38 () none) + (nav-graph-editor-method-39 () none) ;; 39 ;; (nav-graph-editor-method-39 () none) + (nav-graph-editor-method-40 () none) ;; 40 ;; (nav-graph-editor-method-40 () none) + (nav-graph-editor-method-41 () none) ;; 41 ;; (nav-graph-editor-method-41 () none) + (nav-graph-editor-method-42 () none) ;; 42 ;; (nav-graph-editor-method-42 () none) + (nav-graph-editor-method-43 () none) ;; 43 ;; (nav-graph-editor-method-43 () none) + (nav-graph-editor-method-44 () none) ;; 44 ;; (nav-graph-editor-method-44 () none) + (nav-graph-editor-method-45 () none) ;; 45 ;; (nav-graph-editor-method-45 () none) + (nav-graph-editor-method-46 () none) ;; 46 ;; (nav-graph-editor-method-46 () none) + (nav-graph-editor-method-47 () none) ;; 47 ;; (nav-graph-editor-method-47 () none) + (nav-graph-editor-method-48 () none) ;; 48 ;; (nav-graph-editor-method-48 () none) + (nav-graph-editor-method-49 () none) ;; 49 ;; (nav-graph-editor-method-49 () none) + (nav-graph-editor-method-50 () none) ;; 50 ;; (nav-graph-editor-method-50 () none) + (nav-graph-editor-method-51 () none) ;; 51 ;; (nav-graph-editor-method-51 () none) + (nav-graph-editor-method-52 () none) ;; 52 ;; (nav-graph-editor-method-52 () none) + (nav-graph-editor-method-53 () none) ;; 53 ;; (nav-graph-editor-method-53 () none) + (nav-graph-editor-method-54 () none) ;; 54 ;; (nav-graph-editor-method-54 () none) + (nav-graph-editor-method-55 () none) ;; 55 ;; (nav-graph-editor-method-55 () none) + (nav-graph-editor-method-56 () none) ;; 56 ;; (nav-graph-editor-method-56 () none) + (nav-graph-editor-method-57 () none) ;; 57 ;; (nav-graph-editor-method-57 () none) + (nav-graph-editor-method-58 () none) ;; 58 ;; (nav-graph-editor-method-58 () none) + (nav-graph-editor-method-59 () none) ;; 59 ;; (nav-graph-editor-method-59 () none) + (nav-graph-editor-method-60 () none) ;; 60 ;; (nav-graph-editor-method-60 () none) + (nav-graph-editor-method-61 () none) ;; 61 ;; (nav-graph-editor-method-61 () none) + (nav-graph-editor-method-62 () none) ;; 62 ;; (nav-graph-editor-method-62 () none) + (nav-graph-editor-method-63 () none) ;; 63 ;; (nav-graph-editor-method-63 () none) + (nav-graph-editor-method-64 () none) ;; 64 ;; (nav-graph-editor-method-64 () none) + (nav-graph-editor-method-65 () none) ;; 65 ;; (nav-graph-editor-method-65 () none) + (nav-graph-editor-method-66 () none) ;; 66 ;; (nav-graph-editor-method-66 () none) + (nav-graph-editor-method-67 () none) ;; 67 ;; (nav-graph-editor-method-67 () none) + (nav-graph-editor-method-68 () none) ;; 68 + ) + (:state-methods + adjust-node-angle ;; 23, old: (adjust-node-radius () _type_ :state) + move-node ;; 15, old: (move-plane () _type_ :state) + adjust-plane ;; 20, old: (adjust-it () _type_ :state) + adjust-node-radius ;; 24, old: (adjust-edge-visibility () _type_ :state) + move-plane ;; 16, old: (create () _type_ :state) + create-edge ;; 19, old: (adjust-plane () _type_ :state) + edit-edge ;; 18, old: (create-edge () _type_ :state) + adjust-edge-visibility ;; 25, old: (adjust-edge-width () _type_ :state) + adjust-edge-width ;; 26, old: (adjust-edge-density () _type_ :state) + adjust-edge-density ;; 27, old: (draw-closest-minimap () _type_ :state) + adjust-it ;; 21, old: (adjust-minimap () _type_ :state) + adjust-minimap ;; 22, old: (adjust-node-angle () _type_ :state) + draw-closest-minimap ;; 28, old: (create-pov () _type_ :state) + create ;; 17, old: (edit-edge () _type_ :state) + create-pov ;; 29, old: (nav-graph-editor-method-29 () none) + ) + ) +|# + +;; (define-extern *nav-graph-editor* object) ;; (pointer nav-graph-editor) +;; (define-extern get-node-draw-position function) +;; (define-extern nav-graph-editor-init-by-other function) +;; (define-extern run-nav-graph-editor function) ;; (function symbol (pointer process)) +;; (define-extern get-nav-graph-editor function) ;; (function nav-graph-editor) +;; (define-extern exit-nav-graph-editor function) ;; (function none) +;; (define-extern nav-graph-set-level function) +;; (define-extern set-minimap-edge-flag function) +;; (define-extern set-vehicle-edit-mode function) +;; (define-extern translate-nav-graph function) +;; (define-extern update-nav-meshes function) +;; (define-extern delete-node-nav-mesh function) +;; (define-extern smooth-nav-graph function) +;; (define-extern update-height function) +;; (define-extern update-width function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-mesh-editor-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; vector-array is already defined! + +#| +(deftype int16-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data int16 :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype nav-mesh-poly (structure) + ((poly-id uint32 :offset-assert 0) + (flags uint32 :offset-assert 4) + (index basic :offset-assert 8) + (insert-pos uint32 :offset-assert 12) + ) + :method-count-assert 15 + :size-assert #x10 + :flag-assert #xf00000010 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (nav-mesh-poly-method-9 () none) ;; 9 ;; (nav-mesh-poly-method-9 () none) + (nav-mesh-poly-method-10 () none) ;; 10 ;; (nav-mesh-poly-method-10 () none) + (nav-mesh-poly-method-11 () none) ;; 11 ;; (nav-mesh-poly-method-11 () none) + (nav-mesh-poly-method-12 () none) ;; 12 ;; (nav-mesh-poly-method-12 () none) + (nav-mesh-poly-method-13 () none) ;; 13 ;; (nav-mesh-poly-method-13 () none) + (nav-mesh-poly-method-14 () none) ;; 14 ;; (nav-mesh-poly-method-14 () none) + ) + ) +|# + +#| +(deftype nav-mesh-poly-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data nav-mesh-poly :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype nav-mesh-tri-quad (structure) + ((indices int32 4 :offset-assert 0) ;; guessed by decompiler + (poly uint32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +#| +(deftype nav-mesh-tri-quad-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data nav-mesh-tri-quad :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype nav-mesh-editable (structure) + ((flags uint32 :offset-assert 0) + (verts basic :offset-assert 4) + (tris basic :offset-assert 8) + (quads nav-mesh-tri-quad-array :offset-assert 12) ;; guessed by decompiler + (navmesh-id uint32 :offset-assert 16) + (idx uint32 :offset-assert 20) + (level-name symbol :offset-assert 24) ;; guessed by decompiler + (level-id uint32 :offset-assert 28) + (polys nav-mesh-poly-array :offset-assert 32) ;; guessed by decompiler + (selected-poly uint32 :offset-assert 36) + ) + :method-count-assert 19 + :size-assert #x28 + :flag-assert #x1300000028 + (:methods + (nav-mesh-editable-method-9 () none) ;; 9 ;; (nav-mesh-editable-method-9 () none) + (nav-mesh-editable-method-10 () none) ;; 10 ;; (nav-mesh-editable-method-10 () none) + (nav-mesh-editable-method-11 () none) ;; 11 ;; (nav-mesh-editable-method-11 () none) + (nav-mesh-editable-method-12 () none) ;; 12 ;; (nav-mesh-editable-method-12 () none) + (nav-mesh-editable-method-13 () none) ;; 13 ;; (nav-mesh-editable-method-13 () none) + (nav-mesh-editable-method-14 () none) ;; 14 ;; (nav-mesh-editable-method-14 () none) + (nav-mesh-editable-method-15 () none) ;; 15 ;; (nav-mesh-editable-method-15 () none) + (nav-mesh-editable-method-16 () none) ;; 16 ;; (nav-mesh-editable-method-16 () none) + (nav-mesh-editable-method-17 () none) ;; 17 ;; (nav-mesh-editable-method-17 () none) + (nav-mesh-editable-method-18 () none) ;; 18 ;; (nav-mesh-editable-method-18 () none) + ) + ) +|# + +#| +(deftype nav-mesh-editable-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data nav-mesh-editable :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype nav-mesh-editor-undo (structure) + ((current-nav-mesh nav-mesh-editable :offset-assert 0) + (selected-poly uint32 :offset-assert 4) + (index basic :offset-assert 8) + (insert-pos uint32 :offset-assert 12) + (verts basic :offset-assert 16) + ) + :method-count-assert 10 + :size-assert #x14 + :flag-assert #xa00000014 + (:methods + (new (symbol type) _type_) ;; 0 ;; (new (symbol type) _type_) + (nav-mesh-editor-undo-method-9 () none) ;; 9 ;; (nav-mesh-editor-undo-method-9 () none) + ) + ) +|# + +#| +(deftype nav-mesh-editor-undo-array (inline-array-class) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data nav-mesh-editor-undo :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 14 + :size-assert #x10 + :flag-assert #xe00000010 + ) +|# + +#| +(deftype nav-mesh-editor (process-drawable) + ((close-menu-time uint64 :offset-assert 248) + (external-cam-mode basic :offset-assert 256) + (mouse-pressed uint64 :offset-assert 264) + (mouse-screen-pos vector :inline :offset-assert 272) + (mouse-pos vector :inline :offset-assert 288) + (mouse-end vector :inline :offset-assert 304) + (mouse-hit vector :inline :offset-assert 320) + (mouse-hit-pick vector :inline :offset-assert 336) + (mouse-snap vector :inline :offset-assert 352) + (mouse-normal vector :inline :offset-assert 368) + (mouse-collide basic :offset-assert 384) + (mouse-tumble-dist float :offset-assert 388) + (mouse-tumble vector :inline :offset-assert 400) + (manipulator-pos vector :inline :offset-assert 416) + (manipulator-back-pos vector :inline :offset-assert 432) + (lock-action basic :offset-assert 448) + (mouse-action uint32 :offset-assert 452) + (mouse-action-pos-ref vector :inline :offset-assert 464) + (nav-meshes basic :offset-assert 480) + (current-nav-mesh nav-mesh-editable :offset-assert 484) + (manipulator manipulator :inline :offset-assert 496) + (level-name basic :offset-assert 672) + (level-id uint32 :offset-assert 676) + (undo-min uint32 :offset-assert 680) + (undo-id uint32 :offset-assert 684) + (undo-max uint32 :offset-assert 688) + (undos basic :offset-assert 692) + (hide-unselected basic :offset-assert 696) + (allow-snap basic :offset-assert 700) + ) + :method-count-assert 58 + :size-assert #x2c0 + :flag-assert #x3a023002c0 + (:methods + (nav-mesh-editor-method-50 () none) ;; 50 + (nav-mesh-editor-method-51 () none) ;; 51 + (nav-mesh-editor-method-52 () none) ;; 52 + (nav-mesh-editor-method-53 () none) ;; 53 + (nav-mesh-editor-method-54 () none) ;; 54 + (nav-mesh-editor-method-55 () none) ;; 55 + (nav-mesh-editor-method-56 () none) ;; 56 + (nav-mesh-editor-method-57 () none) ;; 57 + ) + ) +|# + +;; (define-extern *nav-mesh-editor* object) ;; nav-mesh-editor + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; nav-mesh-editor ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype triangulation-vert (structure) + ((index uint32 :offset-assert 0) + (ear? basic :offset-assert 4) + (score float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) +|# + +;; (define-extern snap-level-navmesh function) +;; (define-extern mouse-intersect-triangle function) +;; (define-extern *clean-vertex-array* object) +;; (define-extern *clean-index-array* object) +;; (define-extern poly-flag-to-string function) +;; (define-extern point-in-cone function) +;; (define-extern segment-in-cone function) +;; (define-extern point-in-triangle function) +;; (define-extern segments-intersect function) +;; (define-extern is-diagonal function) +;; (define-extern *verts-buf-1* object) +;; (define-extern *verts-buf-2* object) +;; (define-extern draw-square-point function) +;; (define-extern get-level-id function) +;; (define-extern nav-mesh-editor-new function) +;; (define-extern nav-delete function) +;; (define-extern nav-mesh-editor-translate function) +;; (define-extern nav-mesh-editor-rotate-y function) +;; (define-extern nav-mesh-editor-load function) +;; (define-extern nav-mesh-editor-set-level function) +;; (define-extern nav-set-lev function) +;; (define-extern nav-set-flag function) +;; (define-extern nav-mesh-editor-init function) ;; (function none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sampler ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *sampler-mem* object) +;; (define-extern *sampler-compare* object) +;; (define-extern *sampler-count* object) +;; (define-extern *sampler-above-range-count* object) +;; (define-extern timer0-handler function) +;; (define-extern sampler-start function) +;; (define-extern sampler-stop function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; default-menu ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *debug-menu-context* object) ;; debug-menu-context +;; (define-extern *dm-cam-mode-interpolation* object) ;; int +;; (define-extern dm-cam-mode-func function) ;; (function (state camera-slave) debug-menu-msg object) +;; (define-extern dm-cam-mode-default function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-cam-settings-default function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-cam-settings-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-cam-settings-func-int function) ;; (function int debug-menu-msg int int int) +;; (define-extern dm-cam-externalize function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-cam-setting-float function) ;; (function float debug-menu-msg float float float) +;; (define-extern dm-cam-render-float function) ;; (function int debug-menu-msg float float float) +;; (define-extern dm-subdiv-float function) ;; (function symbol debug-menu-msg float float float) +;; (define-extern dm-subdiv-int function) ;; (function symbol debug-menu-msg int int int) +;; (define-extern dm-select-race-path function) ;; (function object debug-menu-msg int int) +;; (define-extern dm-select-start-record-scene function) +;; (define-extern dm-select-end-record-scene function) +;; (define-extern dm-setting-player1-controls function) +;; (define-extern dm-setting-player2-controls function) +;; (define-extern dm-setting-vehicle-tuning-engine function) +;; (define-extern dm-setting-vehicle-tuning-gearbox function) +;; (define-extern dm-setting-vehicle-tuning-armor function) +;; (define-extern dm-setting-vehicle-tuning-turbo function) +;; (define-extern dm-setting-net-vehicle function) +;; (define-extern dm-setting-net-player-count function) +;; (define-extern dm-setting-language function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-setting-subtitle-language function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-setting-audio-language function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-setting-stereo-mode function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-current-continue function) ;; (function string debug-menu-msg symbol) +;; (define-extern dm-subdiv-draw-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-scissor-subdiv-draw-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-foreground-subdiv-draw-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-col-rend-on-func function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-col-cache-on-func function) +;; (define-extern dm-col-rend-outline-func function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-col-rend-back-face-func function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-col-rend-normals-func function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-col-rend-ghost-hidden-func function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-col-rend-track-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-col-rend-show-only-toggle-func function) ;; (function uint debug-menu-msg symbol) +;; (define-extern dm-col-rend-show-material-func function) +;; (define-extern dm-col-rend-show-event-func function) +;; (define-extern dm-col-rend-show-only-set-func function) ;; (function uint debug-menu-msg symbol) +;; (define-extern dm-col-rend-cspec-toggle function) ;; (function uint debug-menu-msg symbol) +;; (define-extern dm-col-rend-size function) ;; (function object debug-menu-msg float float) +;; (define-extern dm-col-rend-cam-dist function) ;; (function object debug-menu-msg float float) +;; (define-extern dm-ocean-subdiv-draw-func function) ;; (function object debug-menu-msg symbol) +;; (define-extern dm-time-of-day-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-time-of-day-func2 function) ;; (function symbol debug-menu-msg object) +;; (define-extern dm-time-of-day-palette-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-boolean-toggle-pick-func function) ;; (function symbol debug-menu-msg object) +;; (define-extern dm-time-of-day-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-stats-memory-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-actor-marks-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-debug-actor-lod-dist function) ;; (function int debug-menu-msg float object) +;; (define-extern dm-select-race-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-compact-actor-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-actor-vis-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-game-mode-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-game-feature-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-game-vehicle-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-game-secret-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern display-scene-control-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern display-scene-control-set-pick-func function) ;; (function scene-controls debug-menu-msg symbol) +;; (define-extern display-bot-marks-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern display-bot-marks-set-pick-func function) ;; (function bot-marks-controls debug-menu-msg symbol) +;; (define-extern display-race-marks-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern display-race-marks-set-pick-func function) ;; (function race-marks-controls debug-menu-msg symbol) +;; (define-extern dm-vu1-user-toggle-pick-func function) ;; (function vu1-renderer-mask debug-menu-msg symbol) +;; (define-extern dm-vu1-user-all-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-vu1-user-none-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-texture-user-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-texture-user-set-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-strip-lines-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern dm-strip-lines-set-pick-func function) ;; (function strip-lines-controls debug-menu-msg symbol) +;; (define-extern dm-edit-instance-toggle-pick-func function) ;; (function int debug-menu-msg symbol) +;; (define-extern all-texture-tweak-adjust function) ;; (function texture-page-dir float none) +;; (define-extern dm-float-field-tie-rvanish-func function) ;; (function symbol debug-menu-msg float float float) +;; (define-extern dm-float-field-tie-vanish-far-func function) ;; (function symbol debug-menu-msg float float float) +;; (define-extern dm-bug-report-output-pick-func function) ;; (function symbol debug-menu-msg symbol) +;; (define-extern dm-bug-report-report-pick-func function) ;; (function symbol debug-menu-msg none) +;; (define-extern debug-menu-node? "Slightly incorrect ordering of strings." (function string string symbol)) +(define-extern string<=? "Slightly incorrect ordering of strings." (function string string symbol)) +(define-extern string>=? "Slightly incorrect ordering of strings." (function string string symbol)) +(define-extern *string-tmp-str* string) +(define-extern string-skip-to-char "Advance to the given character." + (function (pointer uint8) uint (pointer uint8))) +(define-extern string-cat-to-last-char "Append append-str to end of base-str, up to the last occurance of char" (function string string uint (pointer uint8))) +(define-extern string-skip-whitespace "Jump over whitespace chars." + (function (pointer uint8) (pointer uint8))) +(define-extern string-suck-up! "Move the string forward so the pointer is now at the beginning." + (function string (pointer uint8) symbol)) +(define-extern string-strip-leading-whitespace! "Strip leading whitespace." (function string symbol)) +(define-extern string-strip-trailing-whitespace! "String trailing whitespace." (function string symbol)) +(define-extern string-strip-whitespace! "Strip whitespace from the beginning and end of a string" (function string symbol)) +(define-extern string-upcase "Uppercase characters. If convert-dash is set, - will be uppercased to _" (function string string symbol none)) +(define-extern string-get-arg!! (function string string symbol)) +(define-extern string->int "Convert string to int." (function string int)) +(define-extern string->float "Convert string to float. Finally implemented!" (function string float)) +(define-extern string-get-int32!! (function (pointer int32) string symbol)) +(define-extern string-get-float!! (function (pointer float) string symbol)) +(define-extern string-get-flag!! (function (pointer symbol) string string string symbol)) +(define-extern string-word-wrap "Wrap lines to specified width." (function string int none)) +(define-extern *debug-draw-pauseable* symbol) +(define-extern *stdcon0* string) +(define-extern *stdcon1* string) +(define-extern *null* string) +(define-extern *stdcon* string) +(define-extern *stdebug* string) +(define-extern *temp-string* string) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; dgo-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(deftype dgo-header (structure) + ((length uint32 :offset-assert 0) + (rootname uint8 60 :offset-assert 4) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype dgo-entry (structure) + ((offset uint32 :offset-assert 0) + (length uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +(deftype dgo-file (basic) + ((num-go-files uint32 :offset-assert 4) + (total-length uint32 :offset-assert 8) + (rsvd uint32 :offset-assert 12) + (data uint8 :dynamic :offset-assert 16) ;; guessed by decompiler + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; gstate ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-extern inherit-state (function state state state)) +(define-extern state-type? (function state symbol symbol)) +(define-extern enter-state (function object object object object object object object)) +(define-extern *event-queue* event-message-block-array) +(define-extern send-event-function (function process-tree event-message-block object)) +(define-extern looping-code (function symbol)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-ashelin ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; atoll-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-atoll* object) +;; (define-extern *ocean-near-indices-atoll* ocean-near-indices) +;; (define-extern *ocean-trans-indices-atoll* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-atoll* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-atoll* ocean-mid-masks) +;; (define-extern *ocean-map-atoll* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; atoll-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *atoll-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; atoll-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *range-atoll-splash-color* curve-color-fast) +;; (define-extern *range-atoll-splash-alpha* curve2d-fast) +;; (define-extern *range-atoll-splash-scale-x* curve2d-fast) +;; (define-extern *range-atoll-splash-scale-y* curve2d-fast) +;; (define-extern *curve-atoll-splash-alpha* curve2d-fast) +;; (define-extern *curve-atoll-splash-scale-x* curve2d-fast) +;; (define-extern *curve-atoll-splash-scale-y* curve2d-fast) +;; (define-extern *part-atoll-ocean-splash-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; atoll-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype atoll-rotor (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype atoll-dish (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-artifact ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype artifact (net-powerup) + ((high-value basic :offset-assert 244) + (original-owner int32 :offset-assert 248) + ) + :method-count-assert 56 + :size-assert #xfc + :flag-assert #x38007000fc + (:state-methods + idle ;; 42 + ) + ) +|# + +#| +(deftype artifact-draw (eco-powerup-draw) + () + :method-count-assert 57 + :size-assert #x110 + :flag-assert #x3900800110 + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern artifact-init-remote function) +;; (define-extern *msg-map-artifact* array) +;; (define-extern *net-process-class-info-artifact* object) +;; (define-extern artifact-draw-init-remote function) +;; (define-extern *msg-map-artifact-draw* array) +;; (define-extern *net-process-class-info-artifact-draw* object) +;; (define-extern get-artifact-position function) +;; (define-extern get-artifact-color function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ctf-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ctf-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ctf-base (process-drawable) + ((base-b uint64 :offset-assert 248) + (base-c uint64 :offset-assert 256) + (team uint8 :offset-assert 264) + ) + :method-count-assert 51 + :size-assert #x109 + :flag-assert #x3300800109 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype ctf-base-b (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype ctf-base-c (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype ctf-captured-flag (process-drawable) + ((pos vector :inline :offset-assert 256) + (end vector :inline :offset-assert 272) + (l-control basic :offset-assert 288) + (lightning-time int32 :offset-assert 292) + (arc-sound uint32 :offset-assert 296) + (lightning-on basic :offset-assert 300) + (index int8 :offset-assert 304) + ) + :method-count-assert 51 + :size-assert #x131 + :flag-assert #x3300b00131 + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern ctf-base-b-init-by-other function) +;; (define-extern ctf-base-b-spawn function) +;; (define-extern ctf-base-c-init-by-other function) +;; (define-extern ctf-base-c-spawn function) +;; (define-extern flag-at-base? function) +;; (define-extern seek-default-size function) +;; (define-extern move-captured-flag function) +;; (define-extern ctf-captured-flag-init-by-other function) +;; (define-extern ctf-captured-flag-spawn function) +;; (define-extern ctf-flag-init-by-other function) +;; (define-extern ctf-flag-spawn function) +;; (define-extern flag-post function) +;; (define-extern movement-post function) +;; (define-extern seek-size function) +;; (define-extern place-on-car function) +;; (define-extern flag-fall function) +;; (define-extern ctf-cap-red function) +;; (define-extern ctf-cap-blue function) +;; (define-extern ctf-drop-flag function) +;; (define-extern ctf-grab-blue function) +;; (define-extern ctf-grab-red function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-ctf ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-ctf-indicators (hud-player-indicators) + () + :method-count-assert 25 + :size-assert #x2c + :flag-assert #x190000002c + ) +|# + +#| +(deftype hud-ctf-indicators-view0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-ctf-indicators-view1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-ctf-indicators-view0* array) +;; (define-extern *hud-ctf-indicators-view0-proc* object) +;; (define-extern spawn-hud-ctf-indicators-view0 function) +;; (define-extern *hud-ctf-indicators-view1* array) +;; (define-extern *hud-ctf-indicators-view1-proc* object) +;; (define-extern spawn-hud-ctf-indicators-view1 function) +;; (define-extern spawn-unused-hud-ctf-indicators-view function) +;; (define-extern net-player-ctf-init-local function) +;; (define-extern set-flag-event function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-beasthunt ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-hunt-indicators (hud-item-group) + ((last-position vector :inline :offset-assert 48) + ) + :method-count-assert 24 + :size-assert #x40 + :flag-assert #x1800000040 + ) +|# + +#| +(deftype hud-hunt-indicators-view0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-hunt-indicators-view1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-hunt-indicators-view0* array) +;; (define-extern *hud-hunt-indicators-view0-proc* object) +;; (define-extern spawn-hud-hunt-indicators-view0 function) +;; (define-extern *hud-hunt-indicators-view1* array) +;; (define-extern *hud-hunt-indicators-view1-proc* object) +;; (define-extern spawn-hud-hunt-indicators-view1 function) +;; (define-extern spawn-unused-hud-hunt-indicators-view function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; plow ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype plow (net-enemy) + ((tracking-player uint64 :offset-assert 872) + (do-flip-anim basic :offset-assert 880) + (been-hit basic :offset-assert 884) + (thruster-left basic :offset-assert 888) + (thruster-right basic :offset-assert 892) + (thruster-left-small basic :offset-assert 896) + (thruster-right-small basic :offset-assert 900) + (thruster-main basic :offset-assert 904) + (eye-left basic :offset-assert 908) + (eye-right basic :offset-assert 912) + (eye-left-small basic :offset-assert 916) + (eye-right-small basic :offset-assert 920) + (smoke basic :offset-assert 924) + (smoke2 basic :offset-assert 928) + (engine-sound-id uint32 :offset-assert 932) + ) + :method-count-assert 90 + :size-assert #x3a8 + :flag-assert #x5a032003a8 + (:state-methods + startup ;; 59 + intro-path ;; 87 + following-path ;; 88 + reverse ;; 89 + waiting-respawn ;; 61 + ) + ) +|# + +;; (define-extern *plow-debris-params* debris-static-params) +;; (define-extern *plow-enemy-info* object) +;; (define-extern plow-init-remote function) +;; (define-extern *msg-map-plow* array) +;; (define-extern *net-process-class-info-plow* object) +;; (define-extern *range-plowexplo-color* curve-color-fast) +;; (define-extern *range-plowexplo-alpha* curve2d-fast) +;; (define-extern *range-plowexplo-scale-x* curve2d-fast) +;; (define-extern *range-plowexplo-scale-y* curve2d-fast) +;; (define-extern *curve-plowexplo-alpha* curve2d-fast) +;; (define-extern *curve-plowexplo-scale-x* curve2d-fast) +;; (define-extern *curve-plowexplo-scale-y* curve2d-fast) +;; (define-extern *part-plow-explosion-texture-curve-settings* object) +;; (define-extern do-bob function) +;; (define-extern *plow-avoidance-bbox-rad* object) +;; (define-extern *plow-ignore-if-above* object) +;; (define-extern check-collision-with-other-plows function) +;; (define-extern probe-hits-stuff function) +;; (define-extern do-launch function) +;; (define-extern launch-nearby-players function) +;; (define-extern *flip-speed* object) +;; (define-extern *flip-blend* object) +;; (define-extern plow-trans function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; brdroom-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype brd-pool-water (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; brdroom-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; raceline-weapon ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype raceline-weapon (process-drawable) + ((owner-id int8 :offset-assert 248) + (delta-height float :offset-assert 252) + (birth-time int32 :offset-assert 256) + (minimap connection-minimap :offset-assert 260) + (visible basic :offset-assert 264) + (last-sent-time int32 :offset-assert 268) + (prox basic :offset-assert 168) + (mesh basic :offset-assert 276) + (slice-id int16 :offset-assert 280) + (race-line race-line :offset-assert 284) + (lap-dist float :offset-assert 288) + (lap int32 :offset-assert 292) + (direction vector :inline :offset-assert 304) + (nearest-pos vector :inline :offset-assert 320) + (target-pos vector :inline :offset-assert 336) + (speed float :offset-assert 352) + ) + :method-count-assert 79 + :size-assert #x164 + :flag-assert #x4f00e00164 + (:methods + (raceline-weapon-method-52 () none) ;; 52 + (raceline-weapon-method-53 () none) ;; 53 + (raceline-weapon-method-54 () none) ;; 54 + (raceline-weapon-method-55 () none) ;; 55 + (raceline-weapon-method-56 () none) ;; 56 + (raceline-weapon-method-57 () none) ;; 57 + (raceline-weapon-method-58 () none) ;; 58 + (raceline-weapon-method-59 () none) ;; 59 + (raceline-weapon-method-60 () none) ;; 60 + (raceline-weapon-method-61 () none) ;; 61 + (raceline-weapon-method-62 () none) ;; 62 + (raceline-weapon-method-63 () none) ;; 63 + (raceline-weapon-method-64 () none) ;; 64 + (raceline-weapon-method-65 () none) ;; 65 + (raceline-weapon-method-66 () none) ;; 66 + (raceline-weapon-method-67 () none) ;; 67 + (raceline-weapon-method-68 () none) ;; 68 + (raceline-weapon-method-69 () none) ;; 69 + (raceline-weapon-method-70 () none) ;; 70 + (raceline-weapon-method-71 () none) ;; 71 + (raceline-weapon-method-72 () none) ;; 72 + (raceline-weapon-method-73 () none) ;; 73 + (raceline-weapon-method-74 () none) ;; 74 + (raceline-weapon-method-75 () none) ;; 75 + (raceline-weapon-method-76 () none) ;; 76 + (raceline-weapon-method-77 () none) ;; 77 + (raceline-weapon-method-78 () none) ;; 78 + ) + (:state-methods + tracking ;; 50 + die ;; 51 + ) + ) +|# + +;; (define-extern raceline-weapon-init-remote function) +;; (define-extern *msg-map-raceline-weapon* array) +;; (define-extern *net-process-class-info-raceline-weapon* object) +;; (define-extern raceline-weapon-init-by-other function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wvehicle-weapons-chicken-drone ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype chicken-drone (raceline-weapon) + ((beam-fire-control basic :offset-assert 356) + (machinegun-sound uint32 :offset-assert 360) + (particle-matrix matrix :inline :offset-assert 368) + (sound-id uint32 :offset-assert 432) + ) + :method-count-assert 81 + :size-assert #x1b4 + :flag-assert #x51013001b4 + (:methods + (chicken-drone-method-79 () none) ;; 79 + (chicken-drone-method-80 () none) ;; 80 + ) + (:state-methods + tracking ;; 50 + die ;; 51 + ) + ) +|# + +#| +(deftype chicken-drone-2 (chicken-drone) + () + :method-count-assert 81 + :size-assert #x1b4 + :flag-assert #x51013001b4 + ) +|# + +#| +(deftype seeker (raceline-weapon) + ((sound-id uint32 :offset-assert 356) + (start-speed float :offset-assert 360) + ) + :method-count-assert 79 + :size-assert #x16c + :flag-assert #x4f00e0016c + (:state-methods + die ;; 51 + tracking ;; 50 + ) + ) +|# + +#| +(deftype lightning-point (structure) + ((active basic :offset-assert 0) + (vehicle-id int8 :offset-assert 4) + (sound-id uint32 :offset-assert 8) + (point vector :inline :offset-assert 16) + (l-control basic :offset-assert 32) + (next-test-time int32 :offset-assert 36) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +#| +(deftype success-seeker (seeker) + ((last-had-target-time int32 :offset-assert 364) + (lightning-point UNKNOWN 3 :offset-assert 368) + (particle-matrix matrix :inline :offset-assert 512) + (lost-target basic :offset-assert 576) + (center-quad basic :offset-assert 580) + ) + :method-count-assert 84 + :size-assert #x248 + :flag-assert #x5401c00248 + (:methods + (success-seeker-method-79 () none) ;; 79 + (success-seeker-method-80 () none) ;; 80 + (success-seeker-method-81 () none) ;; 81 + (success-seeker-method-82 () none) ;; 82 + (success-seeker-method-83 () none) ;; 83 + ) + (:state-methods + tracking ;; 50 + ) + ) +|# + +#| +(deftype success-seeker-2 (success-seeker) + () + :method-count-assert 84 + :size-assert #x248 + :flag-assert #x5401c00248 + ) +|# + +#| +(deftype turbodash-seeker (seeker) + ((trail-tracker uint64 :offset-assert 368) + (target-id int8 :offset-assert 376) + (center-quad basic :offset-assert 380) + ) + :method-count-assert 81 + :size-assert #x180 + :flag-assert #x5100f00180 + (:methods + (turbodash-seeker-method-79 () none) ;; 79 + (turbodash-seeker-method-80 () none) ;; 80 + ) + (:state-methods + tracking ;; 50 + die ;; 51 + ) + ) +|# + +#| +(deftype v-wpn-success-seeker (vehicle-weapon-slot) + ((next-shot-time int32 :offset-assert 268) + (next-to-fire uint8 :offset-assert 272) + ) + :method-count-assert 60 + :size-assert #x111 + :flag-assert #x3c00900111 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype v-wpn-chicken-drone (vehicle-weapon-slot) + ((next-shot-time int32 :offset-assert 268) + (next-to-fire uint8 :offset-assert 272) + ) + :method-count-assert 60 + :size-assert #x111 + :flag-assert #x3c00900111 + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern chicken-drone-init-remote function) +;; (define-extern *msg-map-chicken-drone* array) +;; (define-extern *net-process-class-info-chicken-drone* object) +;; (define-extern v-wpn-chicken-drone-rapid-fire-control-params object) +;; (define-extern chicken-drone-spawn function) +;; (define-extern chicken-drone-local-space function) +;; (define-extern chicken-drone-2-init-remote function) +;; (define-extern *msg-map-chicken-drone-2* array) +;; (define-extern *net-process-class-info-chicken-drone-2* object) +;; (define-extern chicken-drone-2-spawn function) +;; (define-extern seeker-init-remote function) +;; (define-extern *msg-map-seeker* array) +;; (define-extern *net-process-class-info-seeker* object) +;; (define-extern success-seeker-init-remote function) +;; (define-extern *msg-map-success-seeker* array) +;; (define-extern *net-process-class-info-success-seeker* object) +;; (define-extern success-seeker-1-spawn function) +;; (define-extern success-seeker-local-space function) +;; (define-extern success-seeker-2-init-remote function) +;; (define-extern *msg-map-success-seeker-2* array) +;; (define-extern *net-process-class-info-success-seeker-2* object) +;; (define-extern success-seeker-2-spawn function) +;; (define-extern turbodash-seeker-init-remote function) +;; (define-extern *msg-map-turbodash-seeker* array) +;; (define-extern *net-process-class-info-turbodash-seeker* object) +;; (define-extern turbodash-seeker-spawn function) +;; (define-extern fire-seeker function) +;; (define-extern fire-drone function) +;; (define-extern spawn-success-seeker-weapon function) +;; (define-extern spawn-chicken-drone-weapon function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; football ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-item-football-lap (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-powerbar-slider (hud-item-group) + () + :method-count-assert 25 + :size-assert #x2c + :flag-assert #x190000002c + (:methods + (hud-powerbar-slider-method-24 () none) ;; 24 + ) + ) +|# + +#| +(deftype hud-football-turbojuice-meter (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-football-stats-aux-view00 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-aux-view01 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-aux-view10 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-aux-view11 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-view-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-view-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-top-view-view-0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-stats-top-view-view-1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-manager-football-intro (basic-manager) + ((start-time int32 :offset-assert 16) + ) + :method-count-assert 12 + :size-assert #x14 + :flag-assert #xc00000014 + ) +|# + +#| +(deftype hud-football-managed-intro0 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-managed-intro1 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-managed-intro2 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-managed-intro3 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-football-managed-intro4 (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype powercell-dispenser-subdraw (process-drawable) + ((fuel-cell uint64 :offset-assert 248) + (luxo vu-lights :inline :offset-assert 256) + (draw-part? basic :offset-assert 368) + ) + :method-count-assert 52 + :size-assert #x174 + :flag-assert #x3400f00174 + (:methods + (powercell-dispenser-subdraw-method-50 () none) ;; 50 + (powercell-dispenser-subdraw-method-51 () none) ;; 51 + ) + ) +|# + +;; (define-extern *powercell-footie-constants* object) +;; (define-extern *vehicle-control-football-throttle-jammed-open* object) +;; (define-extern football-find-borrow-level function) +;; (define-extern *hud-intro-turbo-meter* object) +;; (define-extern *hud-football-stats-aux-view00* array) +;; (define-extern *hud-football-stats-aux-view00-proc* object) +;; (define-extern spawn-hud-football-stats-aux-view00 function) +;; (define-extern *hud-football-stats-aux-view01* array) +;; (define-extern *hud-football-stats-aux-view01-proc* object) +;; (define-extern spawn-hud-football-stats-aux-view01 function) +;; (define-extern spawn-unused-hud-football-stats-aux-view0 function) +;; (define-extern *hud-football-stats-aux-view10* array) +;; (define-extern *hud-football-stats-aux-view10-proc* object) +;; (define-extern spawn-hud-football-stats-aux-view10 function) +;; (define-extern *hud-football-stats-aux-view11* array) +;; (define-extern *hud-football-stats-aux-view11-proc* object) +;; (define-extern spawn-hud-football-stats-aux-view11 function) +;; (define-extern spawn-unused-hud-football-stats-aux-view1 function) +;; (define-extern *hud-football-stats-view-view-0* array) +;; (define-extern *hud-football-stats-view-view-0-proc* object) +;; (define-extern spawn-hud-football-stats-view-view-0 function) +;; (define-extern *hud-football-stats-view-view-1* array) +;; (define-extern *hud-football-stats-view-view-1-proc* object) +;; (define-extern spawn-hud-football-stats-view-view-1 function) +;; (define-extern spawn-hud-football-stats-view function) +;; (define-extern *hud-football-stats-top-view-view-0* array) +;; (define-extern *hud-football-stats-top-view-view-0-proc* object) +;; (define-extern spawn-hud-football-stats-top-view-view-0 function) +;; (define-extern *hud-football-stats-top-view-view-1* array) +;; (define-extern *hud-football-stats-top-view-view-1-proc* object) +;; (define-extern spawn-hud-football-stats-top-view-view-1 function) +;; (define-extern spawn-hud-football-stats-top-view function) +;; (define-extern spawn-hud-football-stats function) +;; (define-extern *hud-football-managed-intro0* array) +;; (define-extern *hud-football-managed-intro0-proc* object) +;; (define-extern spawn-hud-football-managed-intro0 function) +;; (define-extern *hud-football-managed-intro1* array) +;; (define-extern *hud-football-managed-intro1-proc* object) +;; (define-extern spawn-hud-football-managed-intro1 function) +;; (define-extern *hud-football-managed-intro2* array) +;; (define-extern *hud-football-managed-intro2-proc* object) +;; (define-extern spawn-hud-football-managed-intro2 function) +;; (define-extern *hud-football-managed-intro3* array) +;; (define-extern *hud-football-managed-intro3-proc* object) +;; (define-extern spawn-hud-football-managed-intro3 function) +;; (define-extern *hud-football-managed-intro4* array) +;; (define-extern *hud-football-managed-intro4-proc* object) +;; (define-extern spawn-hud-football-managed-intro4 function) +;; (define-extern spawn-unused-hud-football-managed-intro function) +;; (define-extern *pcell-colors* object) +;; (define-extern *pcell-vec* object) +;; (define-extern *pcell-origin?* object) +;; (define-extern birth-func-pcell function) +;; (define-extern net-player-football-handle-pcells function) +;; (define-extern has-powercell? function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; football2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-cell-grabbed function) +;; (define-extern powercell-subdraw-init-by-other function) +;; (define-extern powercell-footie-init-by-other function) +;; (define-extern powercell-footie-update-pos-on-vehicle function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; spargus-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype spar-lighthouse-light (process-drawable) + ((part-tracker uint64 :offset-assert 248) + ) + :method-count-assert 51 + :size-assert #x100 + :flag-assert #x3300700100 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; canspar-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-canspar* object) +;; (define-extern *ocean-near-indices-canspar* ocean-near-indices) +;; (define-extern *ocean-trans-indices-canspar* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-canspar* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-canspar* ocean-mid-masks) +;; (define-extern *ocean-map-canspar* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; canyon-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-part-canyon-leaf-fall function) +;; (define-extern spt-birth-func-part-canyon-leaf-fall function) +;; (define-extern spt-canyon-check-ground-lie-flat function) +;; (define-extern *range-cynsplash-color* curve-color-fast) +;; (define-extern *range-cynsplash-alpha* curve2d-fast) +;; (define-extern *range-cynsplash-scale-x* curve2d-fast) +;; (define-extern *range-cynsplash-scale-y* curve2d-fast) +;; (define-extern *curve-cynsplash-alpha* curve2d-fast) +;; (define-extern *curve-cynsplash-scale-x* curve2d-fast) +;; (define-extern *curve-cynsplash-scale-y* curve2d-fast) +;; (define-extern *part-canyon-ocean-splash-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; canyon-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *canyona-water-texture-anim-array* texture-anim-array) +;; (define-extern *canyonc-water-texture-anim-array* texture-anim-array) +;; (define-extern *canyone-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-time-box ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-time-collected (hud-item-group) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype time-freeze-clock (hud-clock) + () + :method-count-assert 25 + :size-assert #x48 + :flag-assert #x1900000048 + ) +|# + +#| +(deftype hud-time-box-stats (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern freeze-fade-func function) +;; (define-extern *hud-time-collected-items* array) +;; (define-extern *hud-time-box-stats* array) +;; (define-extern *hud-time-box-stats-proc* object) +;; (define-extern spawn-hud-time-box-stats function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; time-box-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype time-freeze-short-draw (powerup-draw) + ((base-y float :offset-assert 264) + (vehicle-handle uint64 :offset-assert 272) + ) + :method-count-assert 58 + :size-assert #x118 + :flag-assert #x3a00900118 + (:methods + (time-freeze-short-draw-method-57 () none) ;; 57 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype time-freeze-short (net-powerup) + ((freeze-time uint32 :offset-assert 244) + ) + :method-count-assert 56 + :size-assert #xf8 + :flag-assert #x38007000f8 + ) +|# + +#| +(deftype time-freeze-long-draw (time-freeze-short-draw) + () + :method-count-assert 58 + :size-assert #x128 + :flag-assert #x3a00a00128 + ) +|# + +#| +(deftype time-freeze-long (time-freeze-short) + () + :method-count-assert 56 + :size-assert #xf8 + :flag-assert #x38007000f8 + ) +|# + +#| +(deftype time-freeze-med-draw (time-freeze-short-draw) + () + :method-count-assert 58 + :size-assert #x128 + :flag-assert #x3a00a00128 + ) +|# + +#| +(deftype time-freeze-med (time-freeze-short) + () + :method-count-assert 56 + :size-assert #xf8 + :flag-assert #x38007000f8 + ) +|# + +;; (define-extern *time-freeze-short-debris-params* debris-static-params) +;; (define-extern *time-freeze-med-debris-params* debris-static-params) +;; (define-extern *time-freeze-long-debris-params* debris-static-params) +;; (define-extern time-freeze-short-draw-init-remote function) +;; (define-extern *msg-map-time-freeze-short-draw* array) +;; (define-extern *net-process-class-info-time-freeze-short-draw* object) +;; (define-extern time-freeze-short-init-remote function) +;; (define-extern *msg-map-time-freeze-short* array) +;; (define-extern *net-process-class-info-time-freeze-short* object) +;; (define-extern time-freeze-long-draw-init-remote function) +;; (define-extern *msg-map-time-freeze-long-draw* array) +;; (define-extern *net-process-class-info-time-freeze-long-draw* object) +;; (define-extern time-freeze-long-init-remote function) +;; (define-extern *msg-map-time-freeze-long* array) +;; (define-extern *net-process-class-info-time-freeze-long* object) +;; (define-extern time-freeze-med-draw-init-remote function) +;; (define-extern *msg-map-time-freeze-med-draw* array) +;; (define-extern *net-process-class-info-time-freeze-med-draw* object) +;; (define-extern time-freeze-med-init-remote function) +;; (define-extern *msg-map-time-freeze-med* array) +;; (define-extern *net-process-class-info-time-freeze-med* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-time-trial ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *timetrial-rec* object) +;; (define-extern *ghost-cmp-rec* object) +;; (define-extern *ttbox* object) +;; (define-extern *ttbox-valid* object) +;; (define-extern *ghost-recording-complete* object) +;; (define-extern ghost-recording-complete function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; canyon-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype can-leaves-floor (process-drawable) + () + :method-count-assert 51 + :size-assert #x100 + :flag-assert #x3300700100 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cliffs-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-birth-on-height-die-drip function) +;; (define-extern part-cliffs-bird1-path function) +;; (define-extern part-cliffs-bird2-path function) +;; (define-extern part-cliffs-bird3-path function) +;; (define-extern part-cliffs-bird4-path function) +;; (define-extern part-cliffs-bird5-path function) +;; (define-extern part-cliffs-bird6-path function) +;; (define-extern part-cliffs-bird7-path function) +;; (define-extern part-cliffs-bird8-path function) +;; (define-extern part-cliffs-bird9-path function) +;; (define-extern part-cliffs-bird10-path function) +;; (define-extern part-wascitya-fly1-path function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern part-wascitya-fly2-path function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern part-wascitya-fly3-path function) ;; (function sparticle-system sparticle-cpuinfo vector none) +;; (define-extern spt-func-part-cliffs-drops-splash function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cliffs-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cliffs-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *cliffs-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cliffs-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-cliffs* object) +;; (define-extern *ocean-near-indices-cliffs* ocean-near-indices) +;; (define-extern *ocean-trans-indices-cliffs* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-cliffs* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-cliffs* ocean-mid-masks) +;; (define-extern *ocean-map-cliffs* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; common-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-cliffs-fence-dust function) +;; (define-extern spt-birth-func-brightness-cliffs-fence-splinters function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; common-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype snow-icebreak-a (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype snow-icebreak-b (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype snow-icebreak-c (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype cliffs-wood-fence-a (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype cliffs-wood-fence-b (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype cliffs-wood-fence-c (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype cliffs-wood-fence-d (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +;; (define-extern *ice-debris-params-a* debris-static-params) +;; (define-extern *ice-debris-params-b* debris-static-params) +;; (define-extern *ice-debris-params-c* debris-static-params) +;; (define-extern *cliffs-wood-fence-a-debris-params* debris-static-params) +;; (define-extern *cliffs-wood-fence-b-debris-params* debris-static-params) +;; (define-extern *cliffs-wood-fence-c-debris-params* debris-static-params) +;; (define-extern *cliffs-wood-fence-d-debris-params* debris-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ragdoll ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern ragdoll-matrix-interp function) ;; (function matrix matrix matrix float matrix) +;; (define-extern ragdoll-joint-callback function) ;; (function cspace transformq process-drawable ragdoll-proc none) +;; (define-extern ragdoll-other-joint-callback function) ;; (function cspace transformq none :behavior ragdoll-proc) +;; (define-extern ragdoll-reflect-matrix function) ;; (function matrix vector vector vector) +;; (define-extern ragdoll-proc-init-by-other function) ;; (function ragdoll-setup object :behavior ragdoll-proc) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; raptor ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype raptor (net-enemy) + () + :method-count-assert 91 + :size-assert #x368 + :flag-assert #x5b02e00368 + (:state-methods + startup ;; 59 + following-path ;; 87 + reverse ;; 89 + idle-wait ;; 88 + chase ;; 90 + ) + ) +|# + +;; (define-extern *raptor-ragdoll-info* object) +;; (define-extern *raptor-enemy-info* object) +;; (define-extern spt-birth-func-brightness-raptor-blood function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-training ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype hud-training-clock (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype hud-vehicle-left-training (hud-vehicle-left) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype hud-vehicle-right-training (hud-vehicle-right) + () + :method-count-assert 24 + :size-assert #x2c + :flag-assert #x180000002c + ) +|# + +#| +(deftype vehicle-hud-training (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype training-goal-info (structure) + ((i-rog-select int8 :offset-assert 0) + (goal-pos vector :inline :offset-assert 16) + (respawn-info net-player-respawn-info :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) +|# + +#| +(deftype training-info (structure) + ((goal-count int8 :offset-assert 0) + (goals uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype net-player-training (net-player-deathrace) + ((explained-dark-eco basic :offset-assert 528) + (explained-mult-weapons basic :offset-assert 532) + (explained-full-dark-eco basic :offset-assert 536) + (complete basic :offset-assert 540) + (race-info basic :offset-assert 544) + (info training-info :offset-assert 548) + (goal-pos vector :inline :offset-assert 560) + (player-pos vector :inline :offset-assert 576) + (player-vel vector :inline :offset-assert 592) + (player-mat matrix :inline :offset-assert 608) + (player-controls vehicle-controls :inline :offset-assert 672) + (mask-controls vehicle-controls :offset-assert 696) + (locked-controls vehicle-controls :offset-assert 700) + (arrow uint64 :offset-assert 704) + (hud-timer uint64 :offset-assert 712) + (state-time uint64 :offset-assert 304) + (start-time uint64 :offset-assert 728) + (time-limit uint64 :offset-assert 736) + (test-time uint64 :offset-assert 744) + (player-health float :offset-assert 752) + (prev-player-health float :offset-assert 756) + (goal-dist float :offset-assert 760) + (desired-letterbox float :offset-assert 764) + (letterbox float :offset-assert 768) + (fail-dist float :offset-assert 772) + (max-count int16 :offset-assert 776) + (i-goal int8 :offset-assert 778) + (show-message? basic :offset-assert 780) + (bot uint64 :offset-assert 784) + (lap-distance float :offset-assert 792) + (lap-count int8 :offset-assert 796) + ) + :method-count-assert 132 + :size-assert #x31d + :flag-assert #x840290031d + (:methods + (net-player-training-method-113 () none) ;; 113 + (net-player-training-method-114 () none) ;; 114 + (net-player-training-method-115 () none) ;; 115 + (net-player-training-method-116 () none) ;; 116 + (net-player-training-method-117 () none) ;; 117 + (net-player-training-method-118 () none) ;; 118 + (net-player-training-method-119 () none) ;; 119 + (net-player-training-method-120 () none) ;; 120 + (net-player-training-method-121 () none) ;; 121 + (net-player-training-method-122 () none) ;; 122 + (net-player-training-method-123 () none) ;; 123 + (net-player-training-method-124 () none) ;; 124 + (net-player-training-method-125 () none) ;; 125 + (net-player-training-method-126 () none) ;; 126 + (net-player-training-method-127 () none) ;; 127 + (net-player-training-method-128 () none) ;; 128 + (net-player-training-method-129 () none) ;; 129 + (net-player-training-method-130 () none) ;; 130 + (net-player-training-method-131 () none) ;; 131 + ) + (:state-methods + waiting ;; 42 + failed ;; 111 + restart ;; 112 + running ;; 43 + ) + ) +|# + +#| +(deftype training2-race-hud (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +#| +(deftype training3-race-hud (in-game-hud) + () + :method-count-assert 33 + :size-assert #x18ec + :flag-assert #x21186018ec + ) +|# + +;; (define-extern *hud-training-clock* array) +;; (define-extern *hud-training-clock-proc* object) +;; (define-extern spawn-hud-training-clock function) +;; (define-extern *vehicle-hud-training* array) +;; (define-extern *vehicle-hud-training-proc* object) +;; (define-extern spawn-vehicle-hud-training function) +;; (define-extern kill-vehicle-hud-training function) +;; (define-extern net-player-training-init-remote function) +;; (define-extern *msg-map-net-player-training* array) +;; (define-extern *net-process-class-info-net-player-training* object) +;; (define-extern *training-info* object) +;; (define-extern training-wait-for-speech-end function) +;; (define-extern training-trans function) +;; (define-extern disable-green-eco-for-entity function) +;; (define-extern disable-green-eco function) +;; (define-extern training1-goal1 function) +;; (define-extern spawn-green-eco-for-entity function) +;; (define-extern spawn-green-eco function) +;; (define-extern training1-goal2 function) +;; (define-extern training2-goal1 function) +;; (define-extern *training2-race-hud* array) +;; (define-extern *training2-race-hud-proc* object) +;; (define-extern spawn-training2-race-hud function) +;; (define-extern training2-goal2 function) +;; (define-extern reset-training-table function) +;; (define-extern training3-goal1 function) +;; (define-extern *training3-race-hud* array) +;; (define-extern *training3-race-hud-proc* object) +;; (define-extern spawn-training3-race-hud function) +;; (define-extern change-weapon-table function) +;; (define-extern training3-goal2 function) +;; (define-extern do-mine-training function) +;; (define-extern training4-goal1 function) +;; (define-extern training4-goal2 function) +;; (define-extern training4-goal3 function) +;; (define-extern training5-goal1 function) +;; (define-extern training5-goal2 function) +;; (define-extern training5-goal3 function) +;; (define-extern count-ai function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-training-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype training-bollard (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype training-marker (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype training-wall (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; wcar-drone ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype v-drone (wcar-base) + () + :method-count-assert 272 + :size-assert #x13c0 + :flag-assert #x110133013c0 + ) +|# + +;; (define-extern *v-drone-headlight-glow-template* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; coliseum-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-coliseum-statue-dust function) +;; (define-extern spt-birth-func-brightness-coliseum-bridge-dust function) +;; (define-extern spt-birth-func-brightness-coliseum-bridge-leg-dust function) +;; (define-extern spt-birth-func-brightness-coliseum-hanger-dust function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; coliseum-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype coli-center-arch (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +;; (define-extern *coli-center-arch-explode-params* joint-exploder-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; coliseum-obs-atlas ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype coli-object-base (net-simple-destruct) + ((actor-group uint32 :offset-assert 284) + (actor-group-count int32 :offset-assert 288) + ) + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + (:methods + (coli-object-base-method-70 () none) ;; 70 + ) + (:state-methods + idle ;; 59 + ) + ) +|# + +#| +(deftype coli-statue (process-drawable) + ((actor-group uint32 :offset-assert 244) + (actor-group-count int32 :offset-assert 248) + (destruction-time int32 :offset-assert 252) + (check-time int32 :offset-assert 256) + ) + :method-count-assert 55 + :size-assert #x108 + :flag-assert #x3700800108 + (:methods + (coli-statue-method-52 () none) ;; 52 + (coli-statue-method-53 () none) ;; 53 + (coli-statue-method-54 () none) ;; 54 + ) + (:state-methods + idle ;; 50 + explode ;; 51 + ) + ) +|# + +#| +(deftype coli-atlas-statue (coli-statue) + () + :method-count-assert 55 + :size-assert #x108 + :flag-assert #x3700800108 + ) +|# + +#| +(deftype coli-atlas-base-a (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + (:state-methods + idle ;; 59 + ) + ) +|# + +#| +(deftype coli-atlas-base-b (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + (:state-methods + idle ;; 59 + ) + ) +|# + +#| +(deftype coli-atlas-base-c (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + (:state-methods + idle ;; 59 + ) + ) +|# + +#| +(deftype coli-ball-collision (process-focusable) + () + :method-count-assert 60 + :size-assert #x100 + :flag-assert #x3c00700100 + (:state-methods + idle ;; 59 + ) + ) +|# + +#| +(deftype coli-atlas-globe (rigid-body-object) + ((set-angular-velocity basic :offset-assert 288) + (send-update basic :offset-assert 292) + (last-sent-position vector :inline :offset-assert 304) + (angular-velocity vector :inline :offset-assert 320) + (orientation quaternion :inline :offset-assert 336) + (blend-position vector :inline :offset-assert 352) + (last-position vector :inline :offset-assert 368) + (rolling-sound uint32 :offset-assert 384) + (rolling-speed float :offset-assert 388) + (last-bounce-time int32 :offset-assert 392) + (last-sync-time int32 :offset-assert 396) + (volume-modulate float :offset-assert 400) + (roll-sound-stop-time int32 :offset-assert 404) + (roll-sound-start-time int32 :offset-assert 408) + ) + :method-count-assert 95 + :size-assert #x19c + :flag-assert #x5f0110019c + (:methods + (coli-atlas-globe-method-89 () none) ;; 89 + (coli-atlas-globe-method-90 () none) ;; 90 + (coli-atlas-globe-method-91 () none) ;; 91 + (coli-atlas-globe-method-92 () none) ;; 92 + (coli-atlas-globe-method-93 () none) ;; 93 + (coli-atlas-globe-method-94 () none) ;; 94 + ) + (:state-methods + idle ;; 59 + active ;; 60 + ) + ) +|# + +#| +(deftype coli-atlas-statue-break-a (process-drawable) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + (:state-methods + idle ;; 50 + die ;; 51 + ) + ) +|# + +#| +(deftype coli-atlas-statue-break-b (process-drawable) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + (:state-methods + idle ;; 50 + die ;; 51 + ) + ) +|# + +#| +(deftype coli-atlas-base-break (process-drawable) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + (:state-methods + idle ;; 50 + die ;; 51 + ) + ) +|# + +;; (define-extern restore-self function) +;; (define-extern coli-statue-init-remote function) +;; (define-extern *msg-map-coli-statue* array) +;; (define-extern *net-process-class-info-coli-statue* object) +;; (define-extern coli-atlas-globe-init-remote function) +;; (define-extern *msg-map-coli-atlas-globe* array) +;; (define-extern *net-process-class-info-coli-atlas-globe* object) +;; (define-extern *coli-atlas-ball-constants* object) +;; (define-extern atlas-base-fix function) +;; (define-extern atlas-collapse function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; coliseum-obs-2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype coli-pillar-break (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype coli-gate-a-straight (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype coli-gate-b-curved (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype coli-stands-rail-a (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype coli-stands-rail-b (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype coli-stands-rail-c (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +;; (define-extern *coli-pillar-debris-params* debris-static-params) +;; (define-extern *coli-gate-a-debris-params* debris-static-params) +;; (define-extern *coli-gate-b-debris-params* debris-static-params) +;; (define-extern *coli-stands-rail-a-debris-params* debris-static-params) +;; (define-extern *coli-stands-rail-b-debris-params* debris-static-params) +;; (define-extern *coli-stands-rail-c-debris-params* debris-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; coliseum-obs-female-statue ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype coli-break-object (process-drawable) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + (:methods + (coli-break-object-method-51 () none) ;; 51 + ) + (:state-methods + die ;; 50 + ) + ) +|# + +#| +(deftype coli-statue-female-s-break (coli-break-object) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + ) +|# + +#| +(deftype coli-statue-female-s-break-a (coli-break-object) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + ) +|# + +#| +(deftype coli-statue-female-s-break-b (coli-break-object) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + ) +|# + +#| +(deftype coli-statue-female-c-break (coli-break-object) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + ) +|# + +#| +(deftype coli-statue-female-c-break-a (coli-break-object) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + ) +|# + +#| +(deftype coli-statue-female-c-break-b (coli-break-object) + () + :method-count-assert 52 + :size-assert #xf8 + :flag-assert #x34007000f8 + ) +|# + +#| +(deftype coli-statue-chain-straight (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype coli-statue-chain-curved (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype coli-statue-female (coli-statue) + () + :method-count-assert 55 + :size-assert #x108 + :flag-assert #x3700800108 + ) +|# + +#| +(deftype coli-statue-base-se (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-c-sw (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-nw (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-ne (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-s-se (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-s-sw (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-s-nw (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +#| +(deftype coli-statue-base-s-ne (coli-object-base) + () + :method-count-assert 71 + :size-assert #x128 + :flag-assert #x4700a00128 + ) +|# + +;; (define-extern coli-break-object-init-by-other function) +;; (define-extern coli-statue-female-s-break-spawn function) +;; (define-extern coli-statue-female-s-break-a-spawn function) +;; (define-extern coli-statue-female-s-break-b-spawn function) +;; (define-extern coli-statue-female-c-break-spawn function) +;; (define-extern coli-statue-female-c-break-a-spawn function) +;; (define-extern coli-statue-female-c-break-b-spawn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; net-collectable-game ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype collectoid-draw (powerup-draw) + ((base-y float :offset-assert 264) + ) + :method-count-assert 57 + :size-assert #x10c + :flag-assert #x390080010c + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype collectoid (net-powerup) + ((controlled-by int8 :offset-assert 244) + (part-time int32 :offset-assert 248) + ) + :method-count-assert 57 + :size-assert #xfc + :flag-assert #x39007000fc + (:methods + (collectoid-method-56 () none) ;; 56 + ) + ) +|# + +;; (define-extern collectoid-draw-init-remote function) +;; (define-extern *msg-map-collectoid-draw* array) +;; (define-extern *net-process-class-info-collectoid-draw* object) +;; (define-extern *steal-mode* object) +;; (define-extern drop-collectoids function) +;; (define-extern *collectoid-debris-params* debris-static-params) +;; (define-extern collectoid-init-remote function) +;; (define-extern *msg-map-collectoid* array) +;; (define-extern *net-process-class-info-collectoid* object) +;; (define-extern *desclct-pris-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; credits-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *credits-ids* array) ;; (array text-id) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; credits-cloth ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *enable-method-set* object) ;; int +;; (define-extern get-neighboring-faces function) ;; (function vector4w int int int int int) +;; (define-extern *normal-array* object) ;; (inline-array vector) +;; (define-extern light-vertex function) ;; (function current-position-info vector rgba) +;; (define-extern *once* object) ;; symbol +;; (define-extern *cloth-fade-alpha* object) ;; gs-alpha +;; (define-extern symbol->cloth-flags function) ;; (function symbol cloth-flag) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; credits-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype credits-char (structure) + ((levname basic :offset-assert 0) + (skel basic :offset-assert 4) + (anim uint32 :offset-assert 8) + (scale float :offset-assert 12) + (dt uint8 :offset-assert 16) + (rotoff float :offset-assert 20) + (rotvel float :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) +|# + +#| +(deftype hirez-viewer (process-drawable) + ((char credits-char :offset-assert 248) ;; museum-char + (id sound-id :offset-assert 252) ;; guessed by decompiler + (credits symbol :offset-assert 256) ;; guessed by decompiler + ) + :method-count-assert 51 + :size-assert #x104 + :flag-assert #x3300800104 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype end-credits-proc (process) + ((char-viewer uint64 :offset-assert 144) + ) + :method-count-assert 17 + :size-assert #x98 + :flag-assert #x1100100098 + (:methods + (end-credits-proc-method-9 () none) ;; 9 + (end-credits-proc-method-10 () none) ;; 10 + (end-credits-proc-method-11 () none) ;; 11 + (end-credits-proc-method-12 () none) ;; 12 + (end-credits-proc-method-13 () none) ;; 13 + (end-credits-proc-method-14 () none) ;; 14 + ) + (:state-methods + running ;; 15 + die ;; 16 + ) + ) +|# + +#| +(deftype end-credits-character-viewer (process) + ((hirez-viewer uint64 :offset-assert 144) + (vehicle uint64 :offset-assert 152) + (turntable-handle uint64 :offset-assert 160) + (last-up-time int32 :offset-assert 168) + (finish basic :offset-assert 172) + (anim-ending basic :offset-assert 176) + (current-char credits-char :offset-assert 180) + ) + :method-count-assert 17 + :size-assert #xb8 + :flag-assert #x11003000b8 + (:methods + (end-credits-character-viewer-method-9 () none) ;; 9 + (end-credits-character-viewer-method-10 () none) ;; 10 + (end-credits-character-viewer-method-11 () none) ;; 11 + (end-credits-character-viewer-method-12 () none) ;; 12 + (end-credits-character-viewer-method-13 () none) ;; 13 + (end-credits-character-viewer-method-14 () none) ;; 14 + ) + (:state-methods + running ;; 15 + die ;; 16 + ) + ) +|# + +;; (define-extern *credits-chars* array) +;; (define-extern hirez-viewer-init-by-other function) ;; (function museum-char symbol symbol object :behavior hirez-viewer) +;; (define-extern spawn-hirez-viewer function) ;; (function museum-char symbol symbol handle) +;; (define-extern draw-end-credits function) ;; (function level float symbol) +;; (define-extern end-credits-character-viewer-init-by-other function) +;; (define-extern update-stuff function) +;; (define-extern end-credits-proc-init-by-other function) +;; (define-extern activate-end-credits-proc function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kras-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *kras-alpha-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; train-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype train-object (rigid-body-object) + ((target-position vector :inline :offset-assert 288) + ) + :method-count-assert 89 + :size-assert #x130 + :flag-assert #x5900a00130 + ) +|# + +#| +(deftype train-car (train-object) + () + :method-count-assert 89 + :size-assert #x130 + :flag-assert #x5900a00130 + (:state-methods + idle ;; 59 + ) + ) +|# + +#| +(deftype train (train-object) + ((curve basic :offset-assert 304) + (head-car int32 :offset-assert 308) + (number-of-cars int32 :offset-assert 312) + (cars UNKNOWN 10 :offset-assert 320) + (length float :offset-assert 400) + (train-sound-id uint32 :offset-assert 404) + (horn-id uint32 :offset-assert 408) + (next-horn-time int32 :offset-assert 412) + (start vector :inline :offset-assert 416) + (end vector :inline :offset-assert 432) + (offset-time float :offset-assert 448) + ) + :method-count-assert 89 + :size-assert #x1c4 + :flag-assert #x59014001c4 + (:state-methods + idle ;; 59 + ) + (:states + training-mine + ) + ) +|# + +;; (define-extern *train-constants* object) +;; (define-extern *train-headlight-glow-template* object) +;; (define-extern train-car-init-by-other function) +;; (define-extern train-car-spawn function) +;; (define-extern *desired-number-of-cars* object) +;; (define-extern position-train-car function) +;; (define-extern train-move function) +;; (define-extern cars-spawn function) +;; (define-extern play-horn function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; docks-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype docks-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) +|# + +;; (define-extern update-mood-docks function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; docks-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-birth-on-height-die-drops function) +;; (define-extern spt-func-part-docks-drops-splash function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; docks-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wind-rotor (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; docks-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-docks* object) +;; (define-extern *ocean-near-indices-docks* ocean-near-indices) +;; (define-extern *ocean-trans-indices-docks* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-docks* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-docks* ocean-mid-masks) +;; (define-extern *ocean-map-docks* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kras-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-birth-on-die1 function) +;; (define-extern spt-func-birth-on-die2 function) +;; (define-extern spt-func-birth-on-die3 function) +;; (define-extern spt-func-birth-on-die4 function) +;; (define-extern spt-func-rocket function) +;; (define-extern *firework-colors* object) +;; (define-extern *firework-vec* object) +;; (define-extern *firework-origin?* object) +;; (define-extern birth-func-firework function) +;; (define-extern spt-func-part-firework1-burst function) +;; (define-extern *range-osplash-color* curve-color-fast) +;; (define-extern *range-osplash-alpha* curve2d-fast) +;; (define-extern *range-osplash-scale-x* curve2d-fast) +;; (define-extern *range-osplash-scale-y* curve2d-fast) +;; (define-extern *curve-osplash-alpha* curve2d-fast) +;; (define-extern *curve-osplash-scale-x* curve2d-fast) +;; (define-extern *curve-osplash-scale-y* curve2d-fast) +;; (define-extern *part-water-ocean-splash-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kras-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype kras-tower (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kras-fishtank-lo (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kras-rusty-sign (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kras-fireworks-ship-a (process-drawable) + ((curve basic :offset-assert 248) + (location float :offset-assert 252) + (fireworks uint64 :offset-assert 256) + ) + :method-count-assert 51 + :size-assert #x108 + :flag-assert #x3300800108 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kras-flag (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kras-windsock (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kras-pump-break-proxy (process-focusable) + ((actor-group uint32 :offset-assert 256) + (actor-group-count int32 :offset-assert 260) + (impact-velocity vector :inline :offset-assert 272) + (hit-points float :offset-assert 288) + (start-exploded basic :offset-assert 292) + (net-parent uint64 :offset-assert 296) + ) + :method-count-assert 65 + :size-assert #x130 + :flag-assert #x4100a00130 + (:methods + (kras-pump-break-proxy-method-61 () none) ;; 61 + (kras-pump-break-proxy-method-62 () none) ;; 62 + (kras-pump-break-proxy-method-63 () none) ;; 63 + (kras-pump-break-proxy-method-64 () none) ;; 64 + ) + (:state-methods + idle ;; 59 + explode ;; 60 + ) + ) +|# + +#| +(deftype kras-pump-break-draw (kras-pump-break-proxy) + ((flame-sound uint32 :offset-assert 304) + ) + :method-count-assert 65 + :size-assert #x134 + :flag-assert #x4100b00134 + (:state-methods + explode ;; 60 + ) + ) +|# + +#| +(deftype kras-pump-break (process-nettable) + ((exploded basic :offset-assert 188) + (drawable uint64 :offset-assert 192) + ) + :method-count-assert 46 + :size-assert #xc8 + :flag-assert #x2e004000c8 + (:methods + (kras-pump-break-method-43 () none) ;; 43 + (kras-pump-break-method-44 () none) ;; 44 + (kras-pump-break-method-45 () none) ;; 45 + ) + (:state-methods + idle ;; 42 + ) + ) +|# + +;; (define-extern kras-pump-break-draw-init-by-other function) +;; (define-extern kras-pump-break-init-remote function) +;; (define-extern *msg-map-kras-pump-break* array) +;; (define-extern *net-process-class-info-kras-pump-break* object) +;; (define-extern *kras-pump-debris-params* debris-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kras-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-kras* object) +;; (define-extern *ocean-near-indices-kras* ocean-near-indices) +;; (define-extern *ocean-trans-indices-kras* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-kras* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-kras* ocean-mid-masks) +;; (define-extern *ocean-map-kras* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; construction-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype construction-cone (construction-object) + ((has-hit-ground basic :offset-assert 304) + ) + :method-count-assert 93 + :size-assert #x134 + :flag-assert #x5d00b00134 + ) +|# + +#| +(deftype construction-barricade (construction-object) + ((has-hit-ground basic :offset-assert 304) + ) + :method-count-assert 93 + :size-assert #x134 + :flag-assert #x5d00b00134 + ) +|# + +;; (define-extern *construction-cone-constants* object) +;; (define-extern *construction-barricade-constants* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drome-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype drome-states (structure) + ((light light-state :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +;; (define-extern update-mood-drome function) +;; (define-extern *dromec-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drome-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drome-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype drome-tunnel-drum (process-drawable) + ((sound-id uint32 :offset-assert 248) + ) + :method-count-assert 51 + :size-assert #xfc + :flag-assert #x33007000fc + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; drome-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-drome* object) +;; (define-extern *ocean-near-indices-drome* ocean-near-indices) +;; (define-extern *ocean-trans-indices-drome* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-drome* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-drome* ocean-mid-masks) +;; (define-extern *ocean-map-drome* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desisle-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-desisle* object) +;; (define-extern *ocean-near-indices-desisle* ocean-near-indices) +;; (define-extern *ocean-trans-indices-desisle* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-desisle* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-desisle* ocean-mid-masks) +;; (define-extern *ocean-map-desisle* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desisle-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *desisle-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desisle-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *range-displash-color* curve-color-fast) +;; (define-extern *range-displash-alpha* curve2d-fast) +;; (define-extern *range-displash-scale-x* curve2d-fast) +;; (define-extern *range-displash-scale-y* curve2d-fast) +;; (define-extern *curve-displash-alpha* curve2d-fast) +;; (define-extern *curve-displash-scale-x* curve2d-fast) +;; (define-extern *curve-displash-scale-y* curve2d-fast) +;; (define-extern *part-desisle-ocean-splash-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; des-cactus ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype des-plant (net-simple-destruct) + ((exploder-params joint-exploder-static-params :offset-assert 288) ;; guessed by decompiler + (exploder-skel skeleton-group :offset-assert 292) ;; guessed by decompiler + (exploder-anim uint32 :offset-assert 296) + (exploder uint64 :offset-assert 304) ;; handle + (attack-vel vector :inline :offset-assert 320) + (spring-pos vector :inline :offset-assert 336) + (spring-vel vector :inline :offset-assert 352) + (jmods joint-mod-rotate-local 4 :offset-assert 368) ;; guessed by decompiler + ) + :method-count-assert 74 + :size-assert #x1f0 + :flag-assert #x4a016001f0 + (:methods + (des-plant-method-70 () none) ;; 70 + (des-plant-method-71 () none) ;; 71 + (des-plant-method-72 () none) ;; 72 + (des-plant-method-73 () none) ;; 73 + ) + (:state-methods + idle ;; 59 + explode ;; 60 + ) + ) +|# + +#| +(deftype des-cactus-a (des-plant) + () + :method-count-assert 74 + :size-assert #x1f0 + :flag-assert #x4a016001f0 + ) +|# + +#| +(deftype des-cactus-b (des-plant) + () + :method-count-assert 74 + :size-assert #x1f0 + :flag-assert #x4a016001f0 + ) +|# + +;; (define-extern *des-cactus-a-explode-params* joint-exploder-static-params) ;; joint-exploder-static-params +;; (define-extern *des-cactus-b-explode-params* joint-exploder-static-params) ;; joint-exploder-static-params + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desert-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype desert-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + (bsphere0 vector :inline :offset-assert 16) + (bsphere1 vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +#| +(deftype desertg-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + (bsphere vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) +|# + +#| +(deftype deswalk-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + (bsphere0 vector :inline :offset-assert 16) + (bsphere1 vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) +|# + +;; (define-extern update-mood-desert function) ;; (function mood-context float int none :behavior time-of-day-proc) +;; (define-extern init-mood-desertg function) ;; (function mood-context float) +;; (define-extern update-mood-desertg function) ;; (function mood-context float int none :behavior time-of-day-proc) +;; (define-extern update-mood-deswalk function) ;; (function mood-context float int none :behavior time-of-day-proc) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desert-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-desert* object) ;; ocean-colors +;; (define-extern *ocean-near-indices-desert* ocean-near-indices) ;; ocean-near-indices +;; (define-extern *ocean-trans-indices-desert* ocean-trans-indices) ;; ocean-trans-indices +;; (define-extern *ocean-mid-indices-desert* ocean-mid-indices) ;; ocean-mid-indices +;; (define-extern *ocean-mid-masks-desert* ocean-mid-masks) ;; ocean-mid-masks +;; (define-extern *ocean-map-desert* object) ;; ocean-map + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desert-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *range-color-desert-hanging-fire-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-alpha-desert-hanging-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-hanging-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-hanging-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-curve-desert-hanging-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-curve-desert-hanging-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-curve-desert-hanging-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-alpha-desert-hanging-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-hanging-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-hanging-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-desert-hanging-fire-flame-curve-settings* object) ;; particle-curve-settings +;; (define-extern *range-color-desert-bowl-fire-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-alpha-desert-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-bowl-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-bowl-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-curve-desert-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-curve-desert-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-curve-desert-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-alpha-desert-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-bowl-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-bowl-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-desert-bowl-fire-flame-curve-settings* object) ;; particle-curve-settings +;; (define-extern *range-color-desert-small-bowl-fire-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-alpha-desert-small-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-small-bowl-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-small-bowl-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-curve-desert-small-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-curve-desert-small-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-curve-desert-small-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-alpha-desert-small-bowl-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-small-bowl-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-small-bowl-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-desert-small-bowl-fire-flame-curve-settings* object) ;; particle-curve-settings +;; (define-extern *scenecamera-fog-update?* object) ;; symbol +;; (define-extern scenecamera-fog-update function) ;; (function none) +;; (define-extern birth-func-desert-beacon-set-accel function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) +;; (define-extern *range-wrsplash-color* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-wrsplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-wrsplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-wrsplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wrsplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wrsplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-wrsplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-water-rocks-splash-curve-settings* object) ;; particle-curve-settings +;; (define-extern *range-color-firepit-fire-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-alpha-firepit-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-firepit-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-firepit-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-curve-firepit-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-curve-firepit-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-curve-firepit-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-alpha-firepit-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-firepit-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-firepit-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-firepit-fire-flame-curve-settings* object) ;; particle-curve-settings +;; (define-extern *stronghold-range-color-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *stronghold-range-alpha-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *stronghold-range-scale-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *stronghold-range-scale-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-stronghold-curve-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-stronghold-curve-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-stronghold-curve-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *stronghold-curve-alpha-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *stronghold-curve-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *stronghold-curve-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-stronghold-torchfire-flame-curve-settings* object) ;; particle-curve-settings +;; (define-extern *range-color-desert-bollard-fire-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-alpha-desert-bollard-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-bollard-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-desert-bollard-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-curve-desert-bollard-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-curve-desert-bollard-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-curve-desert-bollard-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-alpha-desert-bollard-fire-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-bollard-fire-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-desert-bollard-fire-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-desert-bollard-fire-flame-curve-settings* object) ;; particle-curve-settings +;; (define-extern *range-dessplash-color* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-dessplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-dessplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-dessplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-dessplash-alpha* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-dessplash-scale-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-dessplash-scale-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-desert-water-rocks-splash-curve-settings* object) ;; particle-curve-settings + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desarena-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desarena-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype palm-tree (process-drawable) + ((attack-vel vector :inline :offset-assert 256) + (spring-pos vector :inline :offset-assert 272) + (spring-vel vector :inline :offset-assert 288) + (jmods UNKNOWN 5 :offset-assert 304) + (last-impulse-time int32 :offset-assert 464) + ) + :method-count-assert 56 + :size-assert #x1d4 + :flag-assert #x38015001d4 + (:methods + (palm-tree-method-52 () none) ;; 52 + (palm-tree-method-53 () none) ;; 53 + (palm-tree-method-54 () none) ;; 54 + (palm-tree-method-55 () none) ;; 55 + ) + (:state-methods + idle ;; 50 + vibrate ;; 51 + ) + ) +|# + +#| +(deftype palm-tree-a (palm-tree) + () + :method-count-assert 56 + :size-assert #x1d4 + :flag-assert #x38015001d4 + ) +|# + +#| +(deftype palm-tree-b (palm-tree) + () + :method-count-assert 56 + :size-assert #x1d4 + :flag-assert #x38015001d4 + ) +|# + +#| +(deftype palm-tree-c (palm-tree) + () + :method-count-assert 56 + :size-assert #x1d4 + :flag-assert #x38015001d4 + ) +|# + +;; (define-extern desarena-activate function) +;; (define-extern desarena-deactivate function) +;; (define-extern *palm-tree-a-debris-params* debris-static-params) +;; (define-extern *palm-tree-b-debris-params* debris-static-params) +;; (define-extern *palm-tree-c-debris-params* debris-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; desarena-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype desarena-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) +|# + +;; (define-extern update-mood-desarena function) +;; (define-extern *desarena-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; garage-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; haven-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-haven* object) +;; (define-extern *ocean-near-indices-haven* ocean-near-indices) +;; (define-extern *ocean-trans-indices-haven* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-haven* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-haven* ocean-mid-masks) +;; (define-extern *ocean-map-haven* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; haven-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *havend-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *havend-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; haven-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-sewer-water function) +;; (define-extern spt-birth-func-brightness-sewer-water-foam function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; haven-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype haven-gen-light (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype haven-trashcan (construction-object) + ((has-hit-ground basic :offset-assert 304) + (barrel-roll uint32 :offset-assert 308) + (rolling basic :offset-assert 312) + ) + :method-count-assert 93 + :size-assert #x13c + :flag-assert #x5d00b0013c + ) +|# + +;; (define-extern *haven-gen-light-debris-params* debris-static-params) +;; (define-extern *haven-trashcan-constants* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; havjung-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern part-jungle-bird1-path function) +;; (define-extern part-jungle-bird2-path function) +;; (define-extern part-jungle-bird3-path function) +;; (define-extern part-jungle-bird4-path function) +;; (define-extern part-jungle-bird5-path function) +;; (define-extern part-jungle-bird6-path function) +;; (define-extern part-jungle-bird7-path function) +;; (define-extern part-jungle-bird8-path function) +;; (define-extern part-jungle-bird9-path function) +;; (define-extern part-jungle-bird10-path function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; havjung-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-havjung* object) +;; (define-extern *ocean-near-indices-havjung* ocean-near-indices) +;; (define-extern *ocean-trans-indices-havjung* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-havjung* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-havjung* ocean-mid-masks) +;; (define-extern *ocean-map-havjung* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jungle-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-statue-dust function) +;; (define-extern spt-birth-func-brightness-tree-root-dust function) +;; (define-extern spt-birth-func-brightness-tree-root-splinters function) +;; (define-extern spt-birth-func-brightness-jungle-snake-dust function) +;; (define-extern spt-func-birth-on-height-die function) +;; (define-extern spt-birth-func-part-jungle-waterspout-head function) +;; (define-extern *range-color-lava-geyser-flame* curve-color-fast) ;; curve-color-fast +;; (define-extern *range-alpha-lava-geyser-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-lava-geyser-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *range-scale-lava-geyser-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *r-curve-lava-geyser-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *g-curve-lava-geyser-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *b-curve-lava-geyser-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-alpha-lava-geyser-flame* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-scale-lava-geyser-flame-x* curve2d-fast) ;; curve2d-fast +;; (define-extern *curve-scale-lava-geyser-flame-y* curve2d-fast) ;; curve2d-fast +;; (define-extern *part-jungle-lavafire-small-curve-settings* object) +;; (define-extern spt-func-birth-on-pop function) ;; (function sparticle-system sparticle-cpuinfo sparticle-launchinfo none) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jungle-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype jungle-clay-jar-a (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype jungle-clay-jar-b (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype flaming-arrow (process-drawable) + ((flame-sound basic :offset-assert 248) + ) + :method-count-assert 51 + :size-assert #xfc + :flag-assert #x33007000fc + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype jungle-stone-snake-head-proxy (process-focusable) + ((actor-group uint32 :offset-assert 256) + (actor-group-count int32 :offset-assert 260) + (impact-velocity vector :inline :offset-assert 272) + (hit-points float :offset-assert 288) + (start-exploded basic :offset-assert 292) + (net-parent uint64 :offset-assert 296) + ) + :method-count-assert 65 + :size-assert #x130 + :flag-assert #x4100a00130 + (:methods + (jungle-stone-snake-head-proxy-method-61 () none) ;; 61 + (jungle-stone-snake-head-proxy-method-62 () none) ;; 62 + (jungle-stone-snake-head-proxy-method-63 () none) ;; 63 + (jungle-stone-snake-head-proxy-method-64 () none) ;; 64 + ) + (:state-methods + idle ;; 59 + explode ;; 60 + ) + ) +|# + +#| +(deftype jungle-stone-snake-head-draw (jungle-stone-snake-head-proxy) + ((waterfall-part uint64 :offset-assert 304) + ) + :method-count-assert 65 + :size-assert #x138 + :flag-assert #x4100b00138 + (:state-methods + idle ;; 59 + explode ;; 60 + ) + ) +|# + +#| +(deftype jungle-stone-snake-head (process-nettable) + ((exploded basic :offset-assert 188) + (drawable uint64 :offset-assert 192) + ) + :method-count-assert 46 + :size-assert #xc8 + :flag-assert #x2e004000c8 + (:methods + (jungle-stone-snake-head-method-43 () none) ;; 43 + (jungle-stone-snake-head-method-44 () none) ;; 44 + (jungle-stone-snake-head-method-45 () none) ;; 45 + ) + (:state-methods + idle ;; 42 + ) + ) +|# + +#| +(deftype jungle-tree-root-large-a (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype jungle-tree-root-large-b (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype jungle-statue-small-outdoors (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype jungle-statue-small-indoors (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +;; (define-extern *jungle-clay-jar-a-debris-params* debris-static-params) +;; (define-extern *jungle-clay-jar-b-debris-params* debris-static-params) +;; (define-extern spawn-flame function) +;; (define-extern jungle-stone-snake-head-draw-init-by-other function) +;; (define-extern jungle-stone-snake-head-init-remote function) +;; (define-extern *msg-map-jungle-stone-snake-head* array) +;; (define-extern *net-process-class-info-jungle-stone-snake-head* object) +;; (define-extern *jungle-stone-snake-head-explode-params* joint-exploder-static-params) +;; (define-extern *jungle-tree-root-large-a-debris-params* debris-static-params) +;; (define-extern *jungle-tree-root-large-b-debris-params* debris-static-params) +;; (define-extern *jungle-statue-small-outdoors-debris-params* debris-static-params) +;; (define-extern *jungle-statue-small-indoors-debris-params* debris-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jungle-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *junglea-water-texture-anim-array* texture-anim-array) +;; (define-extern *jungleb-water-texture-anim-array* texture-anim-array) +;; (define-extern *jungley-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; havjung-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *junglee-water-texture-anim-array* texture-anim-array) +;; (define-extern *junglef-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *havjung-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; havsew-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype havsewx-states (UNKNOWN) + () + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +;; (define-extern update-mood-havsewx function) +;; (define-extern *havsewx-water-texture-anim-array* texture-anim-array) +;; (define-extern *havsewy-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *havsewy-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sewer-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype sewer-states (structure) + ((rot float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) +|# + +#| +(deftype sewerx-states (UNKNOWN) + () + :method-count-assert 0 + :size-assert #x0 + :flag-assert #x0 + ) +|# + +;; (define-extern update-mood-sewer function) +;; (define-extern update-mood-sewerx function) +;; (define-extern *sewb-water-texture-anim-array* texture-anim-array) +;; (define-extern *sewc-water-texture-anim-array* texture-anim-array) ;; (texture-anim-array texture-anim) +;; (define-extern *sewd-water-texture-anim-array* texture-anim-array) ;; (texture-anim-array texture-anim) +;; (define-extern *sewe-water-texture-anim-array* texture-anim-array) ;; (texture-anim-array texture-anim) +;; (define-extern *sewf-water-texture-anim-array* texture-anim-array) +;; (define-extern *sewx-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; sewer-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-birth-on-height-die-drip-sewer function) +;; (define-extern spt-func-part-sewer-drops-splash function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; havtour-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern part-jungle-bird1-path function) +;; (define-extern part-jungle-bird2-path function) +;; (define-extern part-jungle-bird3-path function) +;; (define-extern part-jungle-bird4-path function) +;; (define-extern part-jungle-bird5-path function) +;; (define-extern part-jungle-bird6-path function) +;; (define-extern part-jungle-bird7-path function) +;; (define-extern part-jungle-bird8-path function) +;; (define-extern part-jungle-bird9-path function) +;; (define-extern part-jungle-bird10-path function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jungle-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-jungle* object) +;; (define-extern *ocean-near-indices-jungle* ocean-near-indices) +;; (define-extern *ocean-trans-indices-jungle* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-jungle* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-jungle* ocean-mid-masks) +;; (define-extern *ocean-map-jungle* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; peak-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype peak-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) +|# + +;; (define-extern update-mood-peak function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; peak-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype peak-snowball (rigid-body-object) + ((target-position vector :inline :offset-assert 288) + (impact-direction vector :inline :offset-assert 304) + (particle-matrix matrix :inline :offset-assert 320) + (path-length float :offset-assert 384) + (last-u float :offset-assert 396) + (roll-sound uint32 :offset-assert 400) + (offset float :offset-assert 404) + ) + :method-count-assert 90 + :size-assert #x198 + :flag-assert #x5a01100198 + (:state-methods + explode ;; 89 + idle ;; 59 + ) + ) +|# + +;; (define-extern peak-snowball-init-remote function) +;; (define-extern *msg-map-peak-snowball* array) +;; (define-extern *net-process-class-info-peak-snowball* object) +;; (define-extern *snowball-constants* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ice-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype ice-flag (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; jungle-part2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern part-jungle-bird1-path function) +;; (define-extern part-jungle-bird2-path function) +;; (define-extern part-jungle-bird3-path function) +;; (define-extern part-jungle-bird4-path function) +;; (define-extern part-jungle-bird5-path function) +;; (define-extern part-jungle-bird6-path function) +;; (define-extern part-jungle-bird7-path function) +;; (define-extern part-jungle-bird8-path function) +;; (define-extern part-jungle-bird9-path function) +;; (define-extern part-jungle-bird10-path function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-kaeden ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kcross-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-kcross-fence-dust function) +;; (define-extern spt-birth-func-brightness-kcross-fence-splinters function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kcross-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype kcro-flag-down (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype kcro-bouncy-tire-a (construction-object) + ((has-hit-ground basic :offset-assert 304) + ) + :method-count-assert 93 + :size-assert #x134 + :flag-assert #x5d00b00134 + ) +|# + +#| +(deftype kcro-fence-piece-a (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype kcro-fence-piece-b (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +#| +(deftype kcro-oil-barrel (construction-object) + ((has-hit-ground basic :offset-assert 304) + ) + :method-count-assert 93 + :size-assert #x134 + :flag-assert #x5d00b00134 + ) +|# + +;; (define-extern *kcro-bouncy-tire-a-constants* object) +;; (define-extern *kcro-fence-piece-a-debris-params* debris-static-params) +;; (define-extern *kcro-fence-piece-b-debris-params* debris-static-params) +;; (define-extern *kcro-oil-barrel-constants* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kcross-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-kcross* object) +;; (define-extern *ocean-near-indices-kcross* ocean-near-indices) +;; (define-extern *ocean-trans-indices-kcross* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-kcross* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-kcross* ocean-mid-masks) +;; (define-extern *ocean-map-kcross* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; kcross-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *kcross-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-keira ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-kleiver ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 3d-menu-elements ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype interface-cam (process-drawable) + () + :method-count-assert 55 + :size-assert #xf8 + :flag-assert #x37007000f8 + (:methods + (interface-cam-method-53 () none) ;; 53 + (interface-cam-method-54 () none) ;; 54 + ) + (:state-methods + enter ;; 51 + idle ;; 50 + exit ;; 52 + ) + ) +|# + +#| +(deftype garage-cinema (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern *interface-cam* object) +;; (define-extern interface-cam-init-by-other function) +;; (define-extern activate-bar function) +;; (define-extern *garage-cinema* object) +;; (define-extern garage-cinema-init-by-other function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-menu-data ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *background-menu-info* object) +;; (define-extern *logo-menu-info* object) +;; (define-extern *logo-subtitle-menu-info* object) +;; (define-extern *base-menu-info* object) +;; (define-extern *single-event-menu-info* object) +;; (define-extern *options-menu-info* object) +;; (define-extern *video-options-menu-info* object) +;; (define-extern *video-options-menu-info-europe* object) +;; (define-extern *secrets-title-menu-info* object) +;; (define-extern *psp-secrets-menu-info* object) +;; (define-extern *center-screen-menu-info* object) +;; (define-extern *sound-options-menu-info* object) +;; (define-extern *game-options-menu-info* object) +;; (define-extern *internet-connection* object) +;; (define-extern *join-create-menu* object) +;; (define-extern *num-local-players-menu* object) +;; (define-extern *join-game-menu* object) +;; (define-extern *player-headphones?-color-array* array) +;; (define-extern *ready-room-host* object) +;; (define-extern *ready-room* object) +;; (define-extern *choose-event-menu-info* object) +;; (define-extern *choose-event-menu-info-local* object) +;; (define-extern *personal-selection-pop-up* object) +;; (define-extern *kick-player-info* object) +;; (define-extern *lobby-generic-error-text-ids* array) +;; (define-extern *lobby-generic-error-bottom-text-ids* array) +;; (define-extern *lobby-generic-error-bottom-text-ids2* array) +;; (define-extern *lobby-generic-error-bottom-text-ids3* array) +;; (define-extern *lobby-generic-error-bottom-text-ids4* array) +;; (define-extern *lobby-generic-error-bottom-text-ids5* array) +;; (define-extern *lobby-generic-error-arg* object) +;; (define-extern *lobby-generic-error* object) +;; (define-extern *lobby-generic-confirmation* object) +;; (define-extern *connecting-to-lobby* object) +;; (define-extern *delete-buddy-confirmation* object) +;; (define-extern *progressive-warning* object) +;; (define-extern *progressive-accept* object) +;; (define-extern *ready-room-options-menu* object) +;; (define-extern *local-highscore-table-info* object) +;; (define-extern get-net-driver-idx-by-type function) +;; (define-extern get-net-driver-by-type function) +;; (define-extern get-driver-flavor-text function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-menu-manager ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *confirm-prev-state-name* object) +;; (define-extern *thrash-level-loader* object) +;; (define-extern *lan-crap-last-time* object) +;; (define-extern check-lan-crap function) +;; (define-extern lobby-default-post function) +;; (define-extern lobby-menu-manager-default-handler function) +;; (define-extern filter-events-for-readyroom function) +;; (define-extern lmm-make-background-menu function) +;; (define-extern lmm-make-logo-menu function) +;; (define-extern kill-logo-menu function) +;; (define-extern *lobby-error-accept* object) +;; (define-extern *lobby-error-cancel* object) +;; (define-extern *lobby-error-action* object) +;; (define-extern *lobby-error-arg* object) +;; (define-extern *lobby-error-extra-confirm-check* object) +;; (define-extern *lobby-error-trans* object) +;; (define-extern adventure-map-fade-in function) +;; (define-extern adventure-map-fade-out function) +;; (define-extern next-language function) +;; (define-extern prev-language function) +;; (define-extern *video-change* object) +;; (define-extern *join-wait-prev-state-name* object) +;; (define-extern go-confirm-net-quit function) +;; (define-extern filter-highscore-venues function) +;; (define-extern set-driver-license-info function) +;; (define-extern jak-selection-clear? function) +;; (define-extern jak-owner function) +;; (define-extern *timetrial-ghost-time-string* string) +;; (define-extern lobby-menu-manager-init-by-other function) +;; (define-extern lobby-start function) +;; (define-extern flash-game-started function) +;; (define-extern update-lobby-camera function) +;; (define-extern cam-lobby state) +;; (define-extern text-id-for-vehicle-type function) +;; (define-extern text-id-class-for-vehicle-type function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-scroll ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scrolling-item (string-menu) + ((selected basic :offset-assert 560) + (scroll-alpha float :offset-assert 564) + ) + :method-count-assert 69 + :size-assert #x238 + :flag-assert #x4501b00238 + ) +|# + +#| +(deftype scrolling-menu-info (dropdown-item-info) + ((item-spacing vector :inline :offset-assert 128) + (offset-to-top-item vector :inline :offset-assert 144) + (scroll-stages int32 :offset-assert 160) + (visible-item-ct int32 :offset-assert 164) + (child-info base-menu-info :offset-assert 168) + (sel-id-backup-symbol basic :offset-assert 172) + (use-third-color basic :offset-assert 176) + (selection-box-item-offset-x int32 :offset-assert 180) + (selection-box-item-offset-y int32 :offset-assert 184) + (lr-scroll basic :offset-assert 188) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) +|# + +#| +(deftype scrolling-menu (dropdown-item) + ((cur-idx int32 :offset-assert 592) + (top-idx int32 :offset-assert 596) + (cur-scroll int32 :offset-assert 600) + (scroll-dir int32 :offset-assert 604) + (total-item-ct int32 :offset-assert 608) + (physical-item-ct int32 :offset-assert 612) + ) + :method-count-assert 77 + :size-assert #x268 + :flag-assert #x4d01e00268 + (:methods + (scrolling-menu-method-70 () none) ;; 70 + (scrolling-menu-method-71 () none) ;; 71 + (scrolling-menu-method-72 () none) ;; 72 + (scrolling-menu-method-73 () none) ;; 73 + (scrolling-menu-method-74 () none) ;; 74 + (scrolling-menu-method-75 () none) ;; 75 + (scrolling-menu-method-76 () none) ;; 76 + ) + (:state-methods + running ;; 52 + ) + ) +|# + +#| +(deftype scrolling-menu-medius (scrolling-menu) + ((prev-id int32 :offset-assert 616) + (prev-top-offset int32 :offset-assert 620) + ) + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + (:methods + (scrolling-menu-medius-method-77 () none) ;; 77 + (scrolling-menu-medius-method-78 () none) ;; 78 + ) + ) +|# + +#| +(deftype dropdown-menu (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + (:state-methods + running ;; 52 + ) + ) +|# + +#| +(deftype indicator (string-menu) + ((got int32 :offset-assert 560) + (max int32 :offset-assert 564) + (msg uint32 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-brs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scrolling-task-item (scrolling-item) + () + :method-count-assert 69 + :size-assert #x238 + :flag-assert #x4501b00238 + ) +|# + +#| +(deftype scrolling-task-menu (scrolling-menu) + ((task-ct int32 :offset-assert 616) + (task-ids UNKNOWN 32 :offset-assert 620) + ) + :method-count-assert 77 + :size-assert #x28c + :flag-assert #x4d0200028c + ) +|# + +#| +(deftype scrolling-net-task-menu (scrolling-task-menu) + () + :method-count-assert 77 + :size-assert #x28c + :flag-assert #x4d0200028c + ) +|# + +;; (define-extern *choose-your-adventure* object) +;; (define-extern *choose-your-online-adventure* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-profile ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype profile-error-string (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype profile-yes-no-string (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype profile-loading-string (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype dropdown-profile (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +#| +(deftype title-load-save-profile (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +;; (define-extern *profile-errors-continue* array) +;; (define-extern *profile-yes-no* array) +;; (define-extern *profile-not-remove* array) +;; (define-extern *profile-load-save-ids* array) +;; (define-extern *menu-new-load-profile* object) +;; (define-extern *menu-new-load-save-profile* object) +;; (define-extern *dropdown-profile-load-save* object) +;; (define-extern *menu-load-profile* object) +;; (define-extern go-profile-state function) +;; (define-extern *menu-loading-profile* object) +;; (define-extern *menu-save-profile* object) +;; (define-extern *menu-profile-error* object) +;; (define-extern memcard-continue function) +;; (define-extern *menu-want-format-profile* object) +;; (define-extern *menu-formating-card-profile* object) +;; (define-extern *create-hero-mode-profile* object) +;; (define-extern *menu-profile-auto-save* object) +;; (define-extern *menu-boot-memorycard* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menumap-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype menumap-states (structure) + ((current-values UNKNOWN 5 :offset-assert 0) + (target-values UNKNOWN 5 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x28 + :flag-assert #x900000028 + ) +|# + +;; (define-extern init-mood-menumap function) +;; (define-extern update-mood-menumap function) +;; (define-extern set-menumap-target! function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-adventure-awards ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype lobby-awards-score->car-type-row (structure) + ((score uint16 :offset-assert 0) + (ctype int8 :offset-assert 2) + (cup-index uint8 :offset-assert 3) + (cup uint32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) +|# + +#| +(deftype lobby-awards-score->driver-type-row (structure) + ((movie-index uint16 :offset-assert 0) + (driver uint8 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x3 + :flag-assert #x900000003 + ) +|# + +;; (define-extern lobby-awards-table-adv-score->car-type array) +;; (define-extern lobby-awards-table-adv-score->driver-type array) +;; (define-extern *lobby-awards-first-new-vehicle* object) +;; (define-extern *lobby-awards-new-vehicle* object) +;; (define-extern *lobby-awards-new-event* object) +;; (define-extern *lobby-awards-new-body-part* object) +;; (define-extern *lobby-awards-new-driver* object) +;; (define-extern lobby-awards-handle-vehicle-awarding function) +;; (define-extern lobby-awards-handle-body-part-awarding function) +;; (define-extern lobby-awards-handle-driver-awarding function) +;; (define-extern lobby-awards-handle-event-awarding function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-adventure-maps ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype interface-world-map (process-drawable) + ((u float :offset-assert 248) + (curve basic :offset-assert 256) + (path-u float :offset-assert 260) + (draw? basic :offset-assert 264) + (particle-matrix matrix :inline :offset-assert 272) + ) + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + (:methods + (interface-world-map-method-52 () none) ;; 52 + ) + (:state-methods + idle ;; 50 + leave ;; 51 + ) + ) +|# + +#| +(deftype world-map-kras-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-docks-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-drome-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-dockkra-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-dromedoc-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-kras-tour-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-coliseum-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-kcross-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-jungle-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-haven-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-sewer-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-havjung-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-havsew-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-hav-tour-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-atoll-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-cliffs-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +;; (define-extern *lobby-maps-y-delta* object) +;; (define-extern spt-func-set-delta-y function) +;; (define-extern *world-map-shadow-control* shadow-control) +;; (define-extern align-to-interface-world-map function) +;; (define-extern hidden state) +;; (define-extern interface-world-map-local-space function) +;; (define-extern *world-map-kras-mesh-proc* object) +;; (define-extern *world-map-docks-mesh-proc* object) +;; (define-extern *world-map-drome-mesh-proc* object) +;; (define-extern *world-map-dockkra-mesh-proc* object) +;; (define-extern *world-map-dromedoc-mesh-proc* object) +;; (define-extern *world-map-kras-tour-mesh-proc* object) +;; (define-extern *world-map-coliseum-mesh-proc* object) +;; (define-extern *world-map-kcross-mesh-proc* object) +;; (define-extern *world-map-jungle-mesh-proc* object) +;; (define-extern *world-map-haven-mesh-proc* object) +;; (define-extern *world-map-sewer-mesh-proc* object) +;; (define-extern *world-map-havjung-mesh-proc* object) +;; (define-extern *world-map-havsew-mesh-proc* object) +;; (define-extern *world-map-hav-tour-mesh-proc* object) +;; (define-extern *world-map-atoll-mesh-proc* object) +;; (define-extern *world-map-cliffs-mesh-proc* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-adventure-maps-2 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype world-map-spargus-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-canyon-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-temple-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-canspar-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-spartem-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-spar-tour-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-desarena-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-desisle-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-snow-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-peak-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-ice-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-iceberg-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-icepass-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-ice-tour-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +#| +(deftype world-map-snowbowl-mesh (interface-world-map) + () + :method-count-assert 53 + :size-assert #x150 + :flag-assert #x3500c00150 + ) +|# + +;; (define-extern *world-map-spargus-mesh-proc* object) +;; (define-extern *world-map-canyon-mesh-proc* object) +;; (define-extern *world-map-temple-mesh-proc* object) +;; (define-extern *world-map-canspar-mesh-proc* object) +;; (define-extern *world-map-spartem-mesh-proc* object) +;; (define-extern *world-map-spar-tour-mesh-proc* object) +;; (define-extern *world-map-desarena-mesh-proc* object) +;; (define-extern *world-map-desisle-mesh-proc* object) +;; (define-extern *world-map-snow-mesh-proc* object) +;; (define-extern *world-map-peak-mesh-proc* object) +;; (define-extern *world-map-ice-mesh-proc* object) +;; (define-extern *world-map-iceberg-mesh-proc* object) +;; (define-extern *world-map-icepass-mesh-proc* object) +;; (define-extern *world-map-ice-tour-mesh-proc* object) +;; (define-extern *world-map-snowbowl-mesh-proc* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-adventure ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype dropdown-cup (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +#| +(deftype dropdown-cup-strings (dynamic-string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype dropdown-cup-borders (prim-strip-menu) + () + :method-count-assert 67 + :size-assert #x228 + :flag-assert #x4301a00228 + ) +|# + +#| +(deftype adventure-top-bar (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype adventure-cup-score (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +#| +(deftype dropdown-fade (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + (:state-methods + enter ;; 51 + exit ;; 55 + ) + ) +|# + +#| +(deftype dropdown-city (dropdown-fade) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +#| +(deftype dropdown-venue (dropdown-fade) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +#| +(deftype dropdown-task (dropdown-fade) + ((medal-msg-start-time uint32 :offset-assert 592) + ) + :method-count-assert 70 + :size-assert #x254 + :flag-assert #x4601d00254 + ) +|# + +;; (define-extern *lobby-adv-cup-mask* object) +;; (define-extern *lobby-adv-grand-prix* object) +;; (define-extern *adv-coming-back-from-game* object) +;; (define-extern *open-new-cup* object) +;; (define-extern *adventure-map-city* array) +;; (define-extern *adventure-map-stats* array) +;; (define-extern *adventure-map-new* array) +;; (define-extern *adventure-venue-name* array) +;; (define-extern *adventure-venue-new* array) +;; (define-extern *adventure-venue-stats* array) +;; (define-extern *adventure-task-stats* array) +;; (define-extern pulse-new-font-color function) +;; (define-extern *cup1-extra* array) +;; (define-extern *cup2-extra* array) +;; (define-extern *cup3-extra* array) +;; (define-extern *cup4-extra* array) +;; (define-extern *adventure-cup* object) +;; (define-extern get-next-training-task function) +;; (define-extern setup-cup-menu-score function) +;; (define-extern *adventure-top-bottom* object) +;; (define-extern *grand-prix-medal* object) +;; (define-extern *adventure-map* object) +;; (define-extern adventure-map-update function) +;; (define-extern update-adventure-map-data function) +;; (define-extern *list-task-medals* array) +;; (define-extern *adventure-venue-info-array* array) +;; (define-extern *adventure-venue* object) +;; (define-extern adventure-venue-init function) +;; (define-extern *adventure-task-sprite-info-array* array) +;; (define-extern *adventure-task-info-array* array) +;; (define-extern *task-medals* array) +;; (define-extern *grand-prix-locked* object) +;; (define-extern *adventure-task* object) +;; (define-extern *map-screen* object) +;; (define-extern adventure-task-init function) +;; (define-extern *adventure-vehicle-select* object) +;; (define-extern wait-for-fmvlev function) +;; (define-extern get-new-qualifier function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-customize ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype customize-main-dropdown-item (dropdown-item) + ((orig-3d-offset vector :inline :offset-assert 592) + (offset-targ vector :inline :offset-assert 608) + ) + :method-count-assert 70 + :size-assert #x270 + :flag-assert #x4601e00270 + ) +|# + +#| +(deftype customize-main-selection-menu-manager (selection-menu-manager) + () + :method-count-assert 67 + :size-assert #x224 + :flag-assert #x4301a00224 + ) +|# + +#| +(deftype customize-vs-dropdown-item (dropdown-item) + ((orig-3d-offset vector :inline :offset-assert 592) + (offset-targ vector :inline :offset-assert 608) + ) + :method-count-assert 70 + :size-assert #x270 + :flag-assert #x4601e00270 + ) +|# + +#| +(deftype customize-vs-selection-menu-manager (selection-menu-manager) + () + :method-count-assert 67 + :size-assert #x224 + :flag-assert #x4301a00224 + ) +|# + +#| +(deftype customize-bp-dropdown-item (dropdown-item) + ((orig-3d-offset vector :inline :offset-assert 592) + (offset-targ vector :inline :offset-assert 608) + (load-part? basic :offset-assert 624) + ) + :method-count-assert 70 + :size-assert #x274 + :flag-assert #x4601f00274 + ) +|# + +#| +(deftype customize-bp-selection-menu-manager (selection-menu-manager) + () + :method-count-assert 67 + :size-assert #x224 + :flag-assert #x4301a00224 + ) +|# + +#| +(deftype paintjob-menu (string-menu) + ((j-mod-color joint-mod-rotate-local :inline :offset-assert 560) + (sat-lum-tri basic :offset-assert 592) + (saturation float :offset-assert 596) + (value float :offset-assert 600) + (sat-lum-pos vector :inline :offset-assert 608) + ) + :method-count-assert 69 + :size-assert #x270 + :flag-assert #x4501e00270 + (:state-methods + running ;; 52 + ) + ) +|# + +#| +(deftype upgrade-dropdown-item (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +;; (define-extern *customize-menu-text-ids* array) +;; (define-extern *tune-performance-text-ids* array) +;; (define-extern *body-parts-text-ids* array) +;; (define-extern *respray-paintjob-text-ids* array) +;; (define-extern *paintjob-menu* object) +;; (define-extern *customize-menu-info* object) +;; (define-extern *vehicle-selection-menu-info* object) +;; (define-extern *cash-bar-extra* array) +;; (define-extern *engine-extra* array) +;; (define-extern *gearbox-extra* array) +;; (define-extern *armor-extra* array) +;; (define-extern *turbo-extra* array) +;; (define-extern *engine-sprite-list* array) +;; (define-extern *gearbox-sprite-list* array) +;; (define-extern *armor-sprite-list* array) +;; (define-extern *turbo-sprite-list* array) +;; (define-extern *tune-performance-menu-info* object) +;; (define-extern *confirm-upgrade-text-ids* array) +;; (define-extern *confirm-price-extra* array) +;; (define-extern *confirm-purchase-popup* object) +;; (define-extern *not-enough-orbs-popup* object) +;; (define-extern *customize-body-parts-text-ids* array) +;; (define-extern *f-fender-extra* array) +;; (define-extern *r-fender-extra* array) +;; (define-extern *door-extra* array) +;; (define-extern *f-bumper-extra* array) +;; (define-extern *r-bumper-extra* array) +;; (define-extern *hood-extra* array) +;; (define-extern *trunk-extra* array) +;; (define-extern *roof-extra* array) +;; (define-extern *wheel-extra* array) +;; (define-extern *body-parts-menu-info* object) +;; (define-extern *body-parts-selection-menu-info* object) +;; (define-extern *customize-paintjob-text-ids* array) +;; (define-extern *customize-paintjob-control-text-ids* array) +;; (define-extern *customize-paintjob-menu-info* object) +;; (define-extern *antenna-extra* array) +;; (define-extern *helmet-extra* array) +;; (define-extern *accessorize-menu-info* object) +;; (define-extern lobby-menu-update-performance-globals function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-results ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *lobby-results-enabled* object) +;; (define-extern *lobby-results-no-adventure-mode* object) +;; (define-extern wait-and-play-award function) +;; (define-extern lobby-results-awarded-vehicle function) +;; (define-extern lobby-results-first-awarded-vehicle function) +;; (define-extern lobby-results-awarded-event function) +;; (define-extern lobby-results-awarded-car-parts function) +;; (define-extern lobby-awards-test-qualifier function) +;; (define-extern *gtb-speech-last-venue* object) +;; (define-extern lobby-speech-gtb-new-venue function) +;; (define-extern *lobby-results-new-body-part-screen-text* array) +;; (define-extern *lobby-results-new-body-part-tab-text* array) +;; (define-extern *lobby-results-new-body-part-tab-text-ii* array) +;; (define-extern *lobby-results-new-body-part-screen* object) +;; (define-extern *lobby-results-new-vehicle-screen-text* array) +;; (define-extern *lobby-results-new-vehicle-class-text* array) +;; (define-extern *lobby-results-new-vehicle-screen* object) +;; (define-extern *lobby-results-new-events-levname-text* array) +;; (define-extern *lobby-results-new-events-levmode-text* array) +;; (define-extern *lobby-results-new-events-screen-back* object) +;; (define-extern *lobby-results-new-events-screen-front* object) +;; (define-extern *lobby-results-new-qualifier-screen* object) +;; (define-extern *lobby-results-new-driver-screen* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-net-h ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scrolling-item-player (scrolling-item) + ((idx int32 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + +#| +(deftype scrolling-menu-player (scrolling-menu-medius) + ((players medius-cache-index-array :offset-assert 624) + ) + :method-count-assert 79 + :size-assert #x274 + :flag-assert #x4f01f00274 + ) +|# + +#| +(deftype scrolling-item-room (scrolling-item) + () + :method-count-assert 69 + :size-assert #x238 + :flag-assert #x4501b00238 + ) +|# + +#| +(deftype scrolling-menu-room (scrolling-menu-medius) + () + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + ) +|# + +#| +(deftype scrolling-item-game (scrolling-item) + ((burn-version uint32 :offset-assert 568) + (avg-ping int32 :offset-assert 572) + ) + :method-count-assert 69 + :size-assert #x240 + :flag-assert #x4501b00240 + ) +|# + +#| +(deftype scrolling-menu-game (scrolling-menu-medius) + () + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + ) +|# + +;; (define-extern *dnas-mode* object) +;; (define-extern *dnas-on-success* object) +;; (define-extern *dnas-on-failure* object) +;; (define-extern *last-player-id-of-interest* object) +;; (define-extern *last-room-id-of-interest* object) +;; (define-extern *last-game-id-of-interest* object) +;; (define-extern *clan-info-id* object) +;; (define-extern *eznet-list* object) +;; (define-extern *tmp-netconf-string* object) +;; (define-extern *ladder-stat-idx-current* object) +;; (define-extern *ladder-stat-idx-of-interest* object) +;; (define-extern *medius-policy-buffer* object) +;; (define-extern *medius-policy-formatted-buffer* object) +;; (define-extern *medius-policy-string* object) +;; (define-extern *medius-policy-formatted-buffer2* object) +;; (define-extern *medius-policy-string2* object) +;; (define-extern *medius-policy-string-data* object) +;; (define-extern do-pending-operation function) +;; (define-extern fixup-netstring function) +;; (define-extern *player-menu-array-to-use* object) +;; (define-extern *player-info-player* object) +;; (define-extern *game-menu-array-to-use* object) +;; (define-extern *medius-game-info-id* object) +;; (define-extern *medius-game-info-game* object) +;; (define-extern get-ping-crapness function) +;; (define-extern construct-game-name function) +;; (define-extern lobby-refresh-game-list function) +;; (define-extern bm-equal function) +;; (define-extern lobby-check-buttons function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-stats ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scrolling-item-stats (scrolling-item) + ((idx int32 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + +#| +(deftype scrolling-menu-stats (scrolling-menu-medius) + ((stats basic :offset-assert 624) + (info-array basic :offset-assert 628) + (show-vehicles basic :offset-assert 632) + ) + :method-count-assert 80 + :size-assert #x27c + :flag-assert #x5001f0027c + (:methods + (scrolling-menu-stats-method-79 () none) ;; 79 + ) + ) +|# + +#| +(deftype scrolling-item-ladder (scrolling-item) + () + :method-count-assert 69 + :size-assert #x238 + :flag-assert #x4501b00238 + ) +|# + +#| +(deftype scrolling-menu-ladder (scrolling-menu-medius) + () + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + ) +|# + +;; (define-extern *last-stat-idx-of-interest* object) +;; (define-extern *ladder-stat-name* object) +;; (define-extern *ladder-stat-your-best* object) +;; (define-extern *ladder-results* array) +;; (define-extern *ladder-results-ct* object) +;; (define-extern *ladder-results-stat-info* object) +;; (define-extern *ladder-results-offset* object) +;; (define-extern *ladder-results-total* object) +;; (define-extern ladder-list-callback function) +;; (define-extern clan-ladder-list-callback function) +;; (define-extern get-player-ladder-pos function) +;; (define-extern get-clan-ladder-pos function) +;; (define-extern get-ladder-total-rankings function) +;; (define-extern get-ladder-list function) +;; (define-extern *player-ladder-stats* object) +;; (define-extern setup-existing-clan-stats function) +;; (define-extern *stats-title* object) +;; (define-extern *clear-stats-text-ids* array) +;; (define-extern *my-stats-screen* object) +;; (define-extern *test-screen* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-net-startup ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scrolling-netconfig-item (scrolling-item) + () + :method-count-assert 69 + :size-assert #x238 + :flag-assert #x4501b00238 + ) +|# + +#| +(deftype scrolling-netconfig-menu (scrolling-menu) + ((valid-indices UNKNOWN 16 :offset-assert 616) + ) + :method-count-assert 77 + :size-assert #x278 + :flag-assert #x4d01f00278 + ) +|# + +#| +(deftype scrolling-account-item (scrolling-item) + ((is-create basic :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + +#| +(deftype scrolling-account-menu (scrolling-menu) + () + :method-count-assert 77 + :size-assert #x268 + :flag-assert #x4d01e00268 + ) +|# + +#| +(deftype edit-account-selection-manager (selection-menu-manager) + () + :method-count-assert 67 + :size-assert #x224 + :flag-assert #x4301a00224 + ) +|# + +#| +(deftype editable-selection (dropdown-item) + ((disabled basic :offset-assert 596) + (keyboard-flags uint64 :offset-assert 600) + (max-chars int32 :offset-assert 608) + (text uint32 :offset-assert 612) + ) + :method-count-assert 70 + :size-assert #x268 + :flag-assert #x4601e00268 + (:state-methods + running ;; 52 + ) + ) +|# + +#| +(deftype dropdown-button (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +#| +(deftype non-accepting-item-list-selection (item-list-selection) + () + :method-count-assert 70 + :size-assert #x25c + :flag-assert #x4601d0025c + ) +|# + +#| +(deftype scrolling-universe-item (scrolling-item) + () + :method-count-assert 69 + :size-assert #x238 + :flag-assert #x4501b00238 + ) +|# + +#| +(deftype scrolling-universe-menu (scrolling-menu) + () + :method-count-assert 77 + :size-assert #x268 + :flag-assert #x4d01e00268 + ) +|# + +;; (define-extern create-and-wait-menu function) +;; (define-extern get-mc-error-text-id function) +;; (define-extern *choose-network-config* object) +;; (define-extern *user-accounts-valid* object) +;; (define-extern *waiting-network-hardware* object) +;; (define-extern *waiting-mc* object) +;; (define-extern *waiting-network-hardware-shutdown* object) +;; (define-extern *edit-stored-network-account-idx* object) +;; (define-extern *edit-stored-network-account* object) +;; (define-extern update-stored-network-account function) +;; (define-extern *edit-account-ids* array) +;; (define-extern *delete-account-ids* array) +;; (define-extern *choose-account* object) +;; (define-extern start-logging-on function) +;; (define-extern get-max-password-chars function) +;; (define-extern get-password-flags function) +;; (define-extern *menu-yes-no-array-data* array) +;; (define-extern *menu-yes-no-array* object) +;; (define-extern *edit-account* object) +;; (define-extern *fake-mc-stream* file-stream) +;; (define-extern *fake-mc-filename* string) +;; (define-extern fake-mc-cmd function) +;; (define-extern *lobby-mc-ok-function* object) +;; (define-extern *lobby-mc-error-function* object) +;; (define-extern *enter-pw-acct-name* object) +;; (define-extern *entering-password* object) +;; (define-extern *showing-policy* object) +;; (define-extern *showing-announcements* object) +;; (define-extern *changing-password* object) +;; (define-extern *medius-new-account-password* object) +;; (define-extern *medius-old-account-password* object) +;; (define-extern do-change-password function) +;; (define-extern *anti-cheat* object) +;; (define-extern check-mc-during-error function) +;; (define-extern lobby-safe-state? function) +;; (define-extern lobby-respond-to-msg function) +;; (define-extern *lobby-universe-selection* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-patch ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype dnas-error (structure) + ((min int32 :offset-assert 0) + (max int32 :offset-assert 4) + (main-text-id uint32 :offset-assert 8) + (footer-text-id uint32 :offset-assert 12) + (errtype-text-id uint32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) +|# + +;; (define-extern *dnas-errors-usa* array) +;; (define-extern *dnas-errors-eur* array) +;; (define-extern get-dnas-error function) +;; (define-extern get-clean-driver-heap function) +;; (define-extern *dnas-error-text-ids* array) +;; (define-extern *dnas-error-code* object) +;; (define-extern *dnas-error-code-string* object) +;; (define-extern *dnas-status* object) +;; (define-extern *dnas-is-loaded* object) +;; (define-extern *dnas-is-started* object) +;; (define-extern *dnas-abort* object) +;; (define-extern *dnas-unique-id-size* object) +;; (define-extern *dnas-unique-id* object) +;; (define-extern *dnas-unique-id-req* object) +;; (define-extern *dnas-error-screen* object) +;; (define-extern dnas-do-shutdown function) +;; (define-extern *dnas-running-screen* object) +;; (define-extern medius-post-dnas-signature function) +;; (define-extern *patch-total-bytes* object) +;; (define-extern *patch-recv-bytes* object) +;; (define-extern *patch-buffer* object) +;; (define-extern *patch-buffer-size* object) +;; (define-extern *patch-encrypted-size* object) +;; (define-extern *patch-downloading* object) +;; (define-extern encrypt-patch function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-buddies ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype player-info-menu (string-menu) + ((player medius-player :offset-assert 560) + ) + :method-count-assert 70 + :size-assert #x234 + :flag-assert #x4601b00234 + (:methods + (player-info-menu-method-69 () none) ;; 69 + ) + ) +|# + +;; (define-extern *remove-buddy-id* object) +;; (define-extern *buddy-list-type* object) +;; (define-extern construct-buddy-confirmation-string function) +;; (define-extern player-in-game function) +;; (define-extern *lobby-main-screen* object) +;; (define-extern *lobby-main-screen-no-clan* object) +;; (define-extern *buddy-list-management-buddy* object) +;; (define-extern *buddy-list-management-ignore* object) +;; (define-extern *buddy-list-management-recent* object) +;; (define-extern *player-info-button-manager* array) +;; (define-extern setup-player-info-buttons function) +;; (define-extern player-info-screen-check-buttons function) +;; (define-extern *player-info-screen* object) +;; (define-extern *inviting-buddies* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-games ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype game-info-menu (string-menu) + ((game net-available-game :offset-assert 560) + ) + :method-count-assert 70 + :size-assert #x234 + :flag-assert #x4601b00234 + (:methods + (game-info-menu-method-69 () none) ;; 69 + ) + ) +|# + +;; (define-extern *menu-events-filter-array* object) +;; (define-extern *menu-locations-filter-array* object) +;; (define-extern *menu-events-filter-ct* object) +;; (define-extern *menu-locations-filter-ct* object) +;; (define-extern *menu-max-players-filter* object) +;; (define-extern *menu-events-filter-any* object) +;; (define-extern *menu-locations-filter-any* object) +;; (define-extern *menu-class-filter-array* object) +;; (define-extern init-event-filter-array function) +;; (define-extern init-location-filter-array function) +;; (define-extern set-cstring-from-text-id function) +;; (define-extern *game-info-screen* object) +;; (define-extern *vehicle-class-search-data* array) +;; (define-extern *vehicle-class-search* object) +;; (define-extern *game-search-screen* object) +;; (define-extern *do-quickplay* object) +;; (define-extern *e3-join-game-menu-screen* object) +;; (define-extern refresh-games-lan-or-internet function) +;; (define-extern *set-game-name* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-rooms ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype green-room-game-info-menu (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +;; (define-extern *chat-room-select* object) +;; (define-extern *chat-room* object) +;; (define-extern *chat-refresh* object) +;; (define-extern *current-game-list-anim* object) +;; (define-extern *green-room* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-clans ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype scrolling-item-incoming-clan-invite (scrolling-item) + ((idx int32 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + +#| +(deftype scrolling-menu-incoming-clan-invite (scrolling-menu-medius) + () + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + ) +|# + +#| +(deftype scrolling-item-recent-clan (scrolling-item) + ((idx int32 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + +#| +(deftype scrolling-menu-recent-clan (scrolling-menu-medius) + () + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + ) +|# + +#| +(deftype scrolling-item-clan-challenge (scrolling-item) + ((idx int32 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x23c + :flag-assert #x4501b0023c + ) +|# + +#| +(deftype scrolling-menu-clan-challenge (scrolling-menu-medius) + () + :method-count-assert 79 + :size-assert #x270 + :flag-assert #x4f01e00270 + ) +|# + +#| +(deftype clan-info-menu (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +;; (define-extern *prev-room-before-clan* object) +;; (define-extern *in-special-room* object) +;; (define-extern *clan-challenge-id* object) +;; (define-extern *my-clan-or-create-clan-text-ids* array) +;; (define-extern *clan-voice-text-ids* array) +;; (define-extern *clan-challenge-status-text-ids* object) +;; (define-extern get-other-clan-id function) +;; (define-extern *clan-incoming-invites-screen* object) +;; (define-extern *clan-info-button-manager* array) +;; (define-extern setup-clan-info-buttons function) +;; (define-extern *clan-info-screen* object) +;; (define-extern *create-clan-screen* object) +;; (define-extern *clan-room-name* string) +;; (define-extern *clan-sent-invites* object) +;; (define-extern *clan-challenges* object) +;; (define-extern *editing-clan-msg* object) +;; (define-extern *my-clan-name* object) +;; (define-extern *my-clan-leader* object) +;; (define-extern *my-clan-message* object) +;; (define-extern *clan-main-screen* object) +;; (define-extern *clan-main-screen-no-clan* object) +;; (define-extern *invite-player-to-clan* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-advanced ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype dropdown-weapon-item-info (dropdown-item-info) + ((weapon-type int8 :offset-assert 122) + (weapon-text-id uint32 :offset-assert 124) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) +|# + +#| +(deftype item-minute-selection (item-num-selection) + () + :method-count-assert 70 + :size-assert #x264 + :flag-assert #x4601e00264 + ) +|# + +#| +(deftype dropdown-advanced-flag-item-info (dropdown-item-info) + ((advanced-flags uint8 :offset-assert 122) + (text-id-1 uint32 :offset-assert 124) + (text-id-2 uint32 :offset-assert 128) + ) + :method-count-assert 9 + :size-assert #x84 + :flag-assert #x900000084 + ) +|# + +#| +(deftype dropdown-advanced-flag-item (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + ) +|# + +#| +(deftype dropdown-weapon-item (dropdown-item) + () + :method-count-assert 70 + :size-assert #x250 + :flag-assert #x4601c00250 + (:state-methods + running ;; 52 + ) + ) +|# + +#| +(deftype non-host-advanced-options-menu (string-menu) + () + :method-count-assert 69 + :size-assert #x230 + :flag-assert #x4501a00230 + ) +|# + +;; (define-extern *num-laps* object) +;; (define-extern *num-laps-tours* object) +;; (define-extern *num-lives* object) +;; (define-extern *time-limit* object) +;; (define-extern *simul-artifact-count* object) +;; (define-extern *win-count-ctf* object) +;; (define-extern *win-count-artifact* object) +;; (define-extern *win-count-deathmatch* object) +;; (define-extern *win-count-collect* object) +;; (define-extern *last-team-setting* object) +;; (define-extern *advanced-options-race* object) +;; (define-extern *advanced-options-timetrial* object) +;; (define-extern *advanced-options-timetrial-no-ghost* object) +;; (define-extern *advanced-options-football* object) +;; (define-extern *advanced-options-timebox* object) +;; (define-extern *advanced-options-deathrace* object) +;; (define-extern *advanced-options-ctf* object) +;; (define-extern *advanced-options-deathmatch* object) +;; (define-extern *advanced-options-rushhour* object) +;; (define-extern *advanced-options-assassin* object) +;; (define-extern *advanced-options-collectathon* object) +;; (define-extern *advanced-options-artifact* object) +;; (define-extern *advanced-options-non-host* object) +;; (define-extern *advanced-options* object) +;; (define-extern *param1-num-info* object) +;; (define-extern *param2-num-info* object) +;; (define-extern *param3-num-info* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-secrets ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype secret-item (structure) + ((id uint32 :offset-assert 0) + (price int32 :offset-assert 4) + (secret uint64 :offset-assert 8) + (cup uint32 :offset-assert 16) + (cup-score uint32 :offset-assert 20) + (button-behavior uint64 :offset-assert 24) + (flags uint8 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x21 + :flag-assert #x900000021 + ) +|# + +#| +(deftype scrolling-secrets-item (scrolling-item) + ((idx int8 :offset-assert 568) + ) + :method-count-assert 69 + :size-assert #x239 + :flag-assert #x4501b00239 + ) +|# + +#| +(deftype scrolling-secrets-menu (scrolling-menu-medius) + ((last-delta int8 :offset-assert 624) + (valid-indices UNKNOWN 64 :offset-assert 625) + ) + :method-count-assert 79 + :size-assert #x2b1 + :flag-assert #x4f023002b1 + ) +|# + +#| +(deftype scrolling-scenes-item (scrolling-secrets-item) + () + :method-count-assert 69 + :size-assert #x23a + :flag-assert #x4501b0023a + ) +|# + +#| +(deftype scrolling-scenes-menu (scrolling-secrets-menu) + () + :method-count-assert 79 + :size-assert #x2b1 + :flag-assert #x4f023002b1 + ) +|# + +;; (define-extern *secret-items* array) +;; (define-extern *time-lock-check* object) +;; (define-extern *locked-text-id* object) +;; (define-extern *locked-msg-index* object) +;; (define-extern *scene-type* object) +;; (define-extern player-finished-adventure-mode? function) +;; (define-extern *last-secret-selected* object) +;; (define-extern *last-scene-selected* object) +;; (define-extern *secrets-menu-info* object) +;; (define-extern *scene-player-menu-info* object) +;; (define-extern check-for-valid-secret-chars function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; garage-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype garage-tool-arm (process-drawable) + ((track joint-mod-rotate-world :inline :offset-assert 256) + (elbow UNKNOWN 4 :offset-assert 288) + (dest vector :inline :offset-assert 416) + (arm-lengths UNKNOWN 4 :offset-assert 432) + (dest-angles UNKNOWN 4 :offset-assert 448) + (elbow-quat UNKNOWN 4 :offset-assert 464) + (total-length float :offset-assert 528) + (flags uint64 :offset-assert 536) + ) + :method-count-assert 52 + :size-assert #x220 + :flag-assert #x3401900220 + (:methods + (garage-tool-arm-method-51 () none) ;; 51 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype garage-turntable (process-drawable) + ((dest-trans vector :inline :offset-assert 256) + (dest-quat quaternion :inline :offset-assert 272) + (rotv float :offset-assert 288) + (flags uint64 :offset-assert 296) + (plat-sound-id uint32 :offset-assert 304) + (room-sound-id uint32 :offset-assert 308) + (speed float :offset-assert 312) + (vehicle-pos vector :inline :offset-assert 320) + (smush smush-control :inline :offset-assert 336) + (auto-rotate? basic :offset-assert 368) + (no-pad basic :offset-assert 372) + (lift-sound-id uint32 :offset-assert 376) + (turn-start-time uint64 :offset-assert 384) + ) + :method-count-assert 54 + :size-assert #x188 + :flag-assert #x3601000188 + (:methods + (garage-turntable-method-52 () none) ;; 52 + (garage-turntable-method-53 () none) ;; 53 + ) + (:state-methods + up ;; 51 + down ;; 50 + ) + ) +|# + +#| +(deftype garage-car-arm (process-drawable) + ((arm-rot joint-mod-rotate-local :inline :offset-assert 256) + ) + :method-count-assert 52 + :size-assert #x120 + :flag-assert #x3400900120 + (:methods + (garage-car-arm-method-51 () none) ;; 51 + ) + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype garage-sliding-door (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +;; (define-extern set-mult function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; menumap-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-func-menumap-birth-on-die1 function) +;; (define-extern spt-func-menumap-birth-on-die2 function) +;; (define-extern spt-func-menumap-birth-on-die3 function) +;; (define-extern spt-func-menumap-birth-on-die4 function) +;; (define-extern spt-func-menumap-rocket function) +;; (define-extern *menumap-firework-colors* object) +;; (define-extern *menumap-firework-vec* object) +;; (define-extern *menumap-firework-origin?* object) +;; (define-extern birth-func-menumap-firework function) +;; (define-extern part-menumap-bird1-path function) +;; (define-extern part-menumap-bird2-path function) +;; (define-extern part-menumap-bird3-path function) +;; (define-extern part-menumap-bird4-path function) +;; (define-extern part-menumap-bird5-path function) +;; (define-extern part-menumap-bird6-path function) +;; (define-extern part-menumap-bird7-path function) +;; (define-extern part-menumap-bird8-path function) +;; (define-extern part-menumap-bird9-path function) +;; (define-extern part-menumap-bird10-path function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lobby-adventure-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype wm-docks-crane (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype wm-drome-wind-machine (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype wm-kras-circular-tower (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype menu-haven-trophy (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype menu-kras-trophy (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype menu-marauder-trophy (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype menu-spargus-trophy (process-drawable) + () + :method-count-assert 51 + :size-assert #xf8 + :flag-assert #x33007000f8 + (:state-methods + idle ;; 50 + ) + ) +|# + +#| +(deftype wm-fireworks-ship (process-drawable) + ((curve basic :offset-assert 248) + (location float :offset-assert 252) + (fireworks uint64 :offset-assert 256) + ) + :method-count-assert 51 + :size-assert #x108 + :flag-assert #x3300800108 + (:state-methods + idle ;; 50 + ) + ) +|# + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-osmo ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-ratchet ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-rayn ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-razer ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; rustyh-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-fishtank-bubbles function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-sig ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; snow-obs ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype snow-dinobreak (net-simple-destruct) + () + :method-count-assert 70 + :size-assert #x120 + :flag-assert #x4600900120 + ) +|# + +;; (define-extern *snow-dinobreak-explode-params* joint-exploder-static-params) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; snow-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +#| +(deftype snow-states (structure) + ((light light-state :inline :offset-assert 0) + (flame flames-state :inline :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xf + :flag-assert #x90000000f + ) +|# + +;; (define-extern update-mood-snow function) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; snow-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *range-color-snow-torch-flame* curve-color-fast) +;; (define-extern *range-alpha-snow-torch-flame* curve2d-fast) +;; (define-extern *range-scale-snow-torch-flame-x* curve2d-fast) +;; (define-extern *range-scale-snow-torch-flame-y* curve2d-fast) +;; (define-extern *r-curve-snow-torch-flame* curve2d-fast) +;; (define-extern *g-curve-snow-torch-flame* curve2d-fast) +;; (define-extern *b-curve-snow-torch-flame* curve2d-fast) +;; (define-extern *curve-alpha-snow-torch-flame* curve2d-fast) +;; (define-extern *curve-snow-torch-flame-x* curve2d-fast) +;; (define-extern *curve-snow-torch-flame-y* curve2d-fast) +;; (define-extern *part-snow-torch-flame-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; spargus-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-spargus* object) +;; (define-extern *ocean-near-indices-spargus* ocean-near-indices) +;; (define-extern *ocean-trans-indices-spargus* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-spargus* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-spargus* ocean-mid-masks) +;; (define-extern *ocean-map-spargus* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; spargus-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern spt-birth-func-brightness-spargus-sewer-water function) +;; (define-extern spt-birth-func-brightness-spargus-sewer-water-foam function) +;; (define-extern *range-ssplash-color* curve-color-fast) +;; (define-extern *range-ssplash-alpha* curve2d-fast) +;; (define-extern *range-ssplash-scale-x* curve2d-fast) +;; (define-extern *range-ssplash-scale-y* curve2d-fast) +;; (define-extern *curve-ssplash-alpha* curve2d-fast) +;; (define-extern *curve-ssplash-scale-x* curve2d-fast) +;; (define-extern *curve-ssplash-scale-y* curve2d-fast) +;; (define-extern *part-spargus-ocean-splash-curve-settings* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; temple-part ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; temple-effects ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *templec-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *templed-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *templed-water-texture-anim-array* texture-anim-array) +;; (define-extern *templee-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *templex-alpha-texture-anim-array* texture-anim-array) +;; (define-extern *templex-water-texture-anim-array* texture-anim-array) ;; (texture-anim-array texture-anim) +;; (define-extern *templey-water-texture-anim-array* texture-anim-array) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; temple-ocean ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (define-extern *ocean-colors-temple* object) +;; (define-extern *ocean-near-indices-temple* ocean-near-indices) +;; (define-extern *ocean-trans-indices-temple* ocean-trans-indices) +;; (define-extern *ocean-mid-indices-temple* ocean-mid-indices) +;; (define-extern *ocean-mid-masks-temple* ocean-mid-masks) +;; (define-extern *ocean-map-temple* object) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-taryn ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-thuga ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-thugb ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-thugc ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-torn ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-ur86 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; speech-ximon ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + + + diff --git a/decompiler/config/jakx/jakx_config.jsonc b/decompiler/config/jakx/jakx_config.jsonc new file mode 100644 index 0000000000..4237297694 --- /dev/null +++ b/decompiler/config/jakx/jakx_config.jsonc @@ -0,0 +1,156 @@ +{ + "game_version": 4, + "text_version": 40, + + "game_name": "jakx", + "expected_elf_name": "SCUS_974.29", + + // if you want to filter to only some object names. + // it will make the decompiler much faster. + "allowed_objects": [], + + "banned_objects": [], + + //////////////////////////// + // CODE ANALYSIS OPTIONS + //////////////////////////// + + // set to true to generate plain .asm files with MIPS disassembly, with no fancy decompilation. + // this is fast and should succeed 100% of the time. + "disassemble_code": false, + + // Run the decompiler + "decompile_code": true, + + "find_functions": true, + + //////////////////////////// + // DATA ANALYSIS OPTIONS + //////////////////////////// + + // set to true to generate plain .asm files for data files. + // this will display most data as hex, but will add labels/references/type pointers/strings + // this generates a huge amount of output if you run it on the entire game. + "disassemble_data": false, + + // unpack textures to assets folder + "process_tpages": false, + // write goal imports for tpages and textures + "write_tpage_imports": false, + // unpack game text to assets folder + "process_game_text": false, + // unpack game count to assets folder + "process_game_count": false, + // write goal imports for art groups + "process_art_groups": false, + // write out a json file containing the art info mapping, run this with all objects allowed + "dump_art_group_info": false, + // write out a json file containing the joint node mapping, run this with all objects allowed + "dump_joint_geo_info": false, + // write out a json file containing tpage and texture mappings, run with all objects allowed + "dump_tex_info": false, + + // set to false to skip adding .STR files to the decompiler database + "read_spools": true, + // write out spool subtitle text, implies read_spools + "process_subtitle_text": false, + // write out spool subtitle images, implies read_spools + "process_subtitle_images": false, + + /////////////////////////// + // WEIRD OPTIONS + /////////////////////////// + + // these options are used rarely and should usually be left at false + + // generate the symbol_map.json file. + // this is a guess at where each symbol is first defined/used. + "generate_symbol_definition_map": false, + + // generate the all-types file + "generate_all_types": false, + + // debug option for instruction decoder + "write_hex_near_instructions": false, + + // to write out "scripts", which are currently just all the linked lists found. mostly a jak 2/3 thing + "write_scripts": true, + + // hex dump of code/data files. + "hexdump_code": false, + "hexdump_data": false, + // dump raw obj files + "dump_objs": true, + // print control flow graph + "print_cfgs": false, + + // set to true for PAL versions. this will forcefully skip files that have some data missing at the end. + "is_pal": false, + + "old_all_types_file": "decompiler/config/jak3/all-types.gc", + + //////////////////////////// + // CONFIG FILES + //////////////////////////// + + "type_casts_file": "decompiler/config/jakx/ntsc_v1/type_casts.jsonc", + "anonymous_function_types_file": "decompiler/config/jakx/ntsc_v1/anonymous_function_types.jsonc", + "var_names_file": "decompiler/config/jakx/ntsc_v1/var_names.jsonc", + "label_types_file": "decompiler/config/jakx/ntsc_v1/label_types.jsonc", + "stack_structures_file": "decompiler/config/jakx/ntsc_v1/stack_structures.jsonc", + "hacks_file": "decompiler/config/jakx/ntsc_v1/hacks.jsonc", + "inputs_file": "decompiler/config/jakx/ntsc_v1/inputs.jsonc", + "art_info_file": "decompiler/config/jakx/ntsc_v1/art_info.jsonc", + "import_deps_file": "decompiler/config/jakx/ntsc_v1/import_deps.jsonc", + "all_types_file": "decompiler/config/ntsc_v1/all-types.gc", + "art_group_dump_file": "decompiler/config/ntsc_v1/art-group-info.min.json", + "joint_node_dump_file": "decompiler/config/ntsc_v1/joint-node-info.min.json", + "tex_dump_file": "decompiler/config/ntsc_v1/tex-info.min.json", + "process_stack_size_file": "decompiler/config/ntsc_v1/process_stack_size_overrides.jsonc", + + // optional: a predetermined object file name map from a file. + // this will make decompilation naming consistent even if you only run on some objects. + "obj_file_name_map_file": "goal_src/jakx/build/all_objs.json", + + //////////////////////////// + // LEVEL EXTRACTION + //////////////////////////// + + // turn this on to extract level background graphics data as .fr3 files in out//fr3 + "levels_extract": false, + // turn this on if you want extracted levels to be saved out as .glb files in glb_out/ + "rip_levels": false, + // should we also extract collision meshes to the .fr3 files? + // these can be displayed in-game with the OpenGOAL collision renderer + "extract_collision": true, + // turn this on if you want extracted level collision to be saved as .obj files in debug_out/ + "rip_collision": false, + // save game textures as .png files to decompiler_out//textures + "save_texture_pngs": false, + + // whether or not to dump out streamed audio files to decompiler_out//audio + "rip_streamed_audio": false, + + //////////////////////////// + // PATCHING OPTIONS + //////////////////////////// + + // these are options related to xdelta3 patches on specific objects + // this allows us to get a more consistent input + + // set to true to write new patch files + "write_patches": false, + // set to true to apply patch files + "apply_patches": true, + // what to patch an object to and what the patch file is + "object_patches": {}, + "version_overrides": { + "ntsc_v1": {}, + "pal": { + "game_name": "jakx_pal", + "expected_elf_name": "SCES_532.86", + "is_pal": true, + "object_patches": {} + } + } +} diff --git a/decompiler/config/jakx/ntsc_v1/anonymous_function_types.jsonc b/decompiler/config/jakx/ntsc_v1/anonymous_function_types.jsonc new file mode 100644 index 0000000000..2746f71aa0 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/anonymous_function_types.jsonc @@ -0,0 +1,5 @@ +{ + // "gkernel": [ + // [17, "(function process symbol)"] + // ] +} diff --git a/decompiler/config/jakx/ntsc_v1/art-group-info.min.json b/decompiler/config/jakx/ntsc_v1/art-group-info.min.json new file mode 100644 index 0000000000..3f7e498869 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/art-group-info.min.json @@ -0,0 +1 @@ +{"adv-event-panel-ag":[[0,"adv-event-panel-lod0-jg"],[1,"adv-event-panel-lod0-mg"],[2,"adv-event-panel-idle-ja"],[3,"adv-event-panel-entera-ja"],[4,"adv-event-panel-exita-ja"]],"antenna-all-ag":[[0,"antenna-all-lod0-jg"],[1,"antenna-all-lod0-mg"],[2,"antenna-all-idle-ja"]],"ash-hr-cred-ag":[[0,"ash-hr-cred-lod0-jg"],[1,"ash-hr-cred-lod0-mg"],[2,"ash-hr-cred-shadow-mg"],[3,"ash-hr-cred-turntable-ja"]],"atoll-dish-ag":[[0,"atoll-dish-lod0-jg"],[1,"atoll-dish-lod0-mg"],[2,"atoll-dish-idle-ja"]],"atoll-rotor-ag":[[0,"atoll-rotor-lod0-jg"],[1,"atoll-rotor-lod0-mg"],[2,"atoll-rotor-idle-ja"]],"body-parts-tab-ag":[[0,"body-parts-tab-lod0-jg"],[1,"body-parts-tab-lod0-mg"],[2,"body-parts-tab-idle-ja"],[3,"body-parts-tab-entera-ja"],[4,"body-parts-tab-exita-ja"]],"bottom-bar-ag":[[0,"bottom-bar-lod0-jg"],[1,"bottom-bar-lod0-mg"],[2,"bottom-bar-idle-ja"],[3,"bottom-bar-entera-ja"],[4,"bottom-bar-enterb-ja"],[5,"bottom-bar-exita-ja"],[6,"bottom-bar-exitb-ja"]],"brd-pool-water-ag":[[0,"brd-pool-water-lod0-jg"],[1,"brd-pool-water-lod0-mg"],[2,"brd-pool-water-idle-ja"]],"car-color-tab-ag":[[0,"car-color-tab-lod0-jg"],[1,"car-color-tab-lod0-mg"],[2,"car-color-tab-idle-ja"],[3,"car-color-tab-entera-ja"],[4,"car-color-tab-exita-ja"]],"car-interior-ag":[[0,"car-interior-lod0-jg"],[1,"car-interior-lod0-mg"],[2,"car-interior-lod1-mg"],[3,"car-interior-idle-ja"]],"car-vert-tab-ag":[[0,"car-vert-tab-lod0-jg"],[1,"car-vert-tab-lod0-mg"],[2,"car-vert-tab-idle-ja"],[3,"car-vert-tab-entera-ja"],[4,"car-vert-tab-exita-ja"]],"cash-bar-ag":[[0,"cash-bar-lod0-jg"],[1,"cash-bar-lod0-mg"],[2,"cash-bar-idle-ja"],[3,"cash-bar-entera-ja"],[4,"cash-bar-exita-ja"]],"character-select-ag":[[0,"character-select-lod0-jg"],[1,"character-select-lod0-mg"],[2,"character-select-idle-ja"],[3,"character-select-entera-ja"],[4,"character-select-exitrb-ja"]],"cliffs-fence-debris-ag":[[0,"cliffs-fence-debris-post-lod0-jg"],[1,"cliffs-fence-debris-post-lod0-mg"],[2,"cliffs-fence-debris-raila-lod0-jg"],[3,"cliffs-fence-debris-raila-lod0-mg"],[4,"cliffs-fence-debris-railb-lod0-jg"],[5,"cliffs-fence-debris-railb-lod0-mg"],[6,"cliffs-fence-debris-railc-lod0-jg"],[7,"cliffs-fence-debris-railc-lod0-mg"]],"cliffs-wood-fence-a-ag":[[0,"cliffs-wood-fence-a-lod0-jg"],[1,"cliffs-wood-fence-a-lod0-mg"],[2,"cliffs-wood-fence-a-idle-ja"]],"cliffs-wood-fence-b-ag":[[0,"cliffs-wood-fence-b-lod0-jg"],[1,"cliffs-wood-fence-b-lod0-mg"],[2,"cliffs-wood-fence-b-idle-ja"]],"cliffs-wood-fence-c-ag":[[0,"cliffs-wood-fence-c-lod0-jg"],[1,"cliffs-wood-fence-c-lod0-mg"],[2,"cliffs-wood-fence-c-idle-ja"]],"cliffs-wood-fence-d-ag":[[0,"cliffs-wood-fence-d-lod0-jg"],[1,"cliffs-wood-fence-d-lod0-mg"],[2,"cliffs-wood-fence-d-idle-ja"]],"coli-atlas-base-ag":[[0,"coli-atlas-base-lod0-jg"],[1,"coli-atlas-base-lod0-mg"],[2,"coli-atlas-base-lod1-mg"],[3,"coli-atlas-base-lod2-mg"],[4,"coli-atlas-base-idle-ja"],[5,"coli-atlas-base-a-lod0-jg"],[6,"coli-atlas-base-a-lod0-mg"],[7,"coli-atlas-base-a-lod1-mg"],[8,"coli-atlas-base-a-lod2-mg"],[9,"coli-atlas-base-a-idle-ja"],[10,"coli-atlas-base-b-lod0-jg"],[11,"coli-atlas-base-b-lod0-mg"],[12,"coli-atlas-base-b-lod1-mg"],[13,"coli-atlas-base-b-lod2-mg"],[14,"coli-atlas-base-b-idle-ja"]],"coli-atlas-break-ag":[[0,"coli-atlas-break-lod0-jg"],[1,"coli-atlas-break-lod0-mg"],[2,"coli-atlas-break-idle-ja"],[3,"coli-atlas-break-a-lod0-jg"],[4,"coli-atlas-break-a-lod0-mg"],[5,"coli-atlas-break-a-idle-ja"],[6,"coli-atlas-break-b-lod0-jg"],[7,"coli-atlas-break-b-lod0-mg"],[8,"coli-atlas-break-b-idle-ja"]],"coli-atlas-globe-ag":[[0,"coli-atlas-globe-lod0-jg"],[1,"coli-atlas-globe-lod0-mg"],[2,"coli-atlas-globe-lod1-mg"],[3,"coli-atlas-globe-lod2-mg"],[4,"coli-atlas-globe-idle-ja"]],"coli-atlas-pillar-ag":[[0,"coli-atlas-pillar-lod0-jg"],[1,"coli-atlas-pillar-lod0-mg"],[2,"coli-atlas-pillar-lod1-mg"],[3,"coli-atlas-pillar-lod2-mg"],[4,"coli-atlas-pillar-idle-ja"]],"coli-atlas-statue-ag":[[0,"coli-atlas-statue-lod0-jg"],[1,"coli-atlas-statue-lod0-mg"],[2,"coli-atlas-statue-lod1-mg"],[3,"coli-atlas-statue-lod2-mg"],[4,"coli-atlas-statue-idle-ja"]],"coli-ball-collision-ag":[[0,"coli-ball-collision-lod0-jg"],[1,"coli-ball-collision-lod0-mg"],[2,"coli-ball-collision-idle-ja"]],"coli-bowl-a-ag":[[0,"coli-bowl-a-lod0-jg"],[1,"coli-bowl-a-lod0-mg"],[2,"coli-bowl-a-lod1-mg"],[3,"coli-bowl-a-lod2-mg"],[4,"coli-bowl-a-idle-ja"]],"coli-bowl-a-debris-ag":[[0,"coli-bowl-a-debris-a-lod0-jg"],[1,"coli-bowl-a-debris-a-lod0-mg"],[2,"coli-bowl-a-debris-b-lod0-jg"],[3,"coli-bowl-a-debris-b-lod0-mg"],[4,"coli-bowl-a-debris-c-lod0-jg"],[5,"coli-bowl-a-debris-c-lod0-mg"]],"coli-bowl-hanger-ag":[[0,"coli-bowl-hanger-lod0-jg"],[1,"coli-bowl-hanger-lod0-mg"],[2,"coli-bowl-hanger-lod1-mg"],[3,"coli-bowl-hanger-lod2-mg"],[4,"coli-bowl-hanger-idle-ja"]],"coli-bowl-hanger-debris-ag":[[0,"coli-bowl-hanger-debris-a-lod0-jg"],[1,"coli-bowl-hanger-debris-a-lod0-mg"],[2,"coli-bowl-hanger-debris-b-lod0-jg"],[3,"coli-bowl-hanger-debris-b-lod0-mg"],[4,"coli-bowl-hanger-debris-c-lod0-jg"],[5,"coli-bowl-hanger-debris-c-lod0-mg"]],"coli-bridge-a-ag":[[0,"coli-bridge-a-lod0-jg"],[1,"coli-bridge-a-lod0-mg"],[2,"coli-bridge-a-idle-ja"],[3,"coli-bridge-a-a-lod0-jg"],[4,"coli-bridge-a-a-lod0-mg"],[5,"coli-bridge-a-a-lod1-mg"],[6,"coli-bridge-a-a-lod2-mg"],[7,"coli-bridge-a-a-idle-ja"],[8,"coli-bridge-a-b-lod0-jg"],[9,"coli-bridge-a-b-lod0-mg"],[10,"coli-bridge-a-b-idle-ja"],[11,"coli-bridge-a-c-lod0-jg"],[12,"coli-bridge-a-c-lod0-mg"],[13,"coli-bridge-a-c-idle-ja"]],"coli-bridge-a-debris-ag":[[0,"coli-bridge-a-debris-a-lod0-jg"],[1,"coli-bridge-a-debris-a-lod0-mg"],[2,"coli-bridge-a-debris-b-lod0-jg"],[3,"coli-bridge-a-debris-b-lod0-mg"],[4,"coli-bridge-a-debris-c-lod0-jg"],[5,"coli-bridge-a-debris-c-lod0-mg"]],"coli-center-arch-ag":[[0,"coli-center-arch-lod0-jg"],[1,"coli-center-arch-lod0-mg"],[2,"coli-center-arch-idle-ja"],[3,"coli-center-arch-explode-lod0-jg"],[4,"coli-center-arch-explode-lod0-mg"],[5,"coli-center-arch-explode-idle-ja"]],"coli-center-arch-debris-ag":[[0,"coli-center-arch-debris-a-lod0-jg"],[1,"coli-center-arch-debris-a-lod0-mg"],[2,"coli-center-arch-debris-b-lod0-jg"],[3,"coli-center-arch-debris-b-lod0-mg"],[4,"coli-center-arch-debris-c-lod0-jg"],[5,"coli-center-arch-debris-c-lod0-mg"]],"coli-gate-a-straight-ag":[[0,"coli-gate-a-straight-lod0-jg"],[1,"coli-gate-a-straight-lod0-mg"],[2,"coli-gate-a-straight-lod1-mg"],[3,"coli-gate-a-straight-lod2-mg"],[4,"coli-gate-a-straight-idle-ja"]],"coli-gate-b-curved-ag":[[0,"coli-gate-b-curved-lod0-jg"],[1,"coli-gate-b-curved-lod0-mg"],[2,"coli-gate-b-curved-lod1-mg"],[3,"coli-gate-b-curved-lod2-mg"],[4,"coli-gate-b-curved-idle-ja"]],"coli-gate-debris-ag":[[0,"coli-gate-debris-a-lod0-jg"],[1,"coli-gate-debris-a-lod0-mg"],[2,"coli-gate-debris-b-lod0-jg"],[3,"coli-gate-debris-b-lod0-mg"],[4,"coli-gate-debris-c-lod0-jg"],[5,"coli-gate-debris-c-lod0-mg"]],"coli-pillar-break-ag":[[0,"coli-pillar-break-lod0-jg"],[1,"coli-pillar-break-lod0-mg"],[2,"coli-pillar-break-lod1-mg"],[3,"coli-pillar-break-lod2-mg"],[4,"coli-pillar-break-idle-ja"]],"coli-pillar-debris-ag":[[0,"coli-pillar-debris-a-lod0-jg"],[1,"coli-pillar-debris-a-lod0-mg"],[2,"coli-pillar-debris-b-lod0-jg"],[3,"coli-pillar-debris-b-lod0-mg"],[4,"coli-pillar-debris-c-lod0-jg"],[5,"coli-pillar-debris-c-lod0-mg"]],"coli-stands-rail-a-ag":[[0,"coli-stands-rail-a-lod0-jg"],[1,"coli-stands-rail-a-lod0-mg"],[2,"coli-stands-rail-a-lod1-mg"],[3,"coli-stands-rail-a-lod2-mg"],[4,"coli-stands-rail-a-idle-ja"]],"coli-stands-rail-b-ag":[[0,"coli-stands-rail-b-lod0-jg"],[1,"coli-stands-rail-b-lod0-mg"],[2,"coli-stands-rail-b-lod1-mg"],[3,"coli-stands-rail-b-lod2-mg"],[4,"coli-stands-rail-b-idle-ja"]],"coli-stands-rail-c-ag":[[0,"coli-stands-rail-c-lod0-jg"],[1,"coli-stands-rail-c-lod0-mg"],[2,"coli-stands-rail-c-lod1-mg"],[3,"coli-stands-rail-c-lod2-mg"],[4,"coli-stands-rail-c-idle-ja"]],"coli-stands-rail-debris-ag":[[0,"coli-stands-rail-debris-a-lod0-jg"],[1,"coli-stands-rail-debris-a-lod0-mg"],[2,"coli-stands-rail-debris-b-lod0-jg"],[3,"coli-stands-rail-debris-b-lod0-mg"],[4,"coli-stands-rail-debris-c-lod0-jg"],[5,"coli-stands-rail-debris-c-lod0-mg"]],"coli-statue-base-c-ag":[[0,"coli-statue-base-c-lod0-jg"],[1,"coli-statue-base-c-lod0-mg"],[2,"coli-statue-base-c-lod1-mg"],[3,"coli-statue-base-c-lod2-mg"],[4,"coli-statue-base-c-idle-ja"],[5,"coli-statue-base-c-a-lod0-jg"],[6,"coli-statue-base-c-a-lod0-mg"],[7,"coli-statue-base-c-a-lod1-mg"],[8,"coli-statue-base-c-a-lod2-mg"],[9,"coli-statue-base-c-a-idle-ja"],[10,"coli-statue-base-c-b-lod0-jg"],[11,"coli-statue-base-c-b-lod0-mg"],[12,"coli-statue-base-c-b-lod1-mg"],[13,"coli-statue-base-c-b-lod2-mg"],[14,"coli-statue-base-c-b-idle-ja"],[15,"coli-statue-base-c-c-lod0-jg"],[16,"coli-statue-base-c-c-lod0-mg"],[17,"coli-statue-base-c-c-lod1-mg"],[18,"coli-statue-base-c-c-lod2-mg"],[19,"coli-statue-base-c-c-idle-ja"]],"coli-statue-base-s-ag":[[0,"coli-statue-base-s-lod0-jg"],[1,"coli-statue-base-s-lod0-mg"],[2,"coli-statue-base-s-lod1-mg"],[3,"coli-statue-base-s-lod2-mg"],[4,"coli-statue-base-s-idle-ja"],[5,"coli-statue-base-s-a-lod0-jg"],[6,"coli-statue-base-s-a-lod0-mg"],[7,"coli-statue-base-s-a-lod1-mg"],[8,"coli-statue-base-s-a-lod2-mg"],[9,"coli-statue-base-s-a-idle-ja"],[10,"coli-statue-base-s-b-lod0-jg"],[11,"coli-statue-base-s-b-lod0-mg"],[12,"coli-statue-base-s-b-lod1-mg"],[13,"coli-statue-base-s-b-lod2-mg"],[14,"coli-statue-base-s-b-idle-ja"],[15,"coli-statue-base-s-c-lod0-jg"],[16,"coli-statue-base-s-c-lod0-mg"],[17,"coli-statue-base-s-c-lod1-mg"],[18,"coli-statue-base-s-c-lod2-mg"],[19,"coli-statue-base-s-c-idle-ja"]],"coli-statue-chain-ag":[[0,"coli-statue-chain-lod0-jg"],[1,"coli-statue-chain-lod0-mg"],[2,"coli-statue-chain-idle-ja"],[3,"coli-statue-chain-a-lod0-jg"],[4,"coli-statue-chain-a-lod0-mg"],[5,"coli-statue-chain-a-idle-ja"]],"coli-statue-female-ag":[[0,"coli-statue-female-lod0-jg"],[1,"coli-statue-female-lod0-mg"],[2,"coli-statue-female-lod1-mg"],[3,"coli-statue-female-lod2-mg"],[4,"coli-statue-female-idle-ja"]],"coli-statue-female-c-break-ag":[[0,"coli-statue-female-c-break-lod0-jg"],[1,"coli-statue-female-c-break-lod0-mg"],[2,"coli-statue-female-c-break-idle-ja"],[3,"coli-statue-female-c-break-a-lod0-jg"],[4,"coli-statue-female-c-break-a-lod0-mg"],[5,"coli-statue-female-c-break-a-idle-ja"],[6,"coli-statue-female-c-break-b-lod0-jg"],[7,"coli-statue-female-c-break-b-lod0-mg"],[8,"coli-statue-female-c-break-b-idle-ja"]],"coli-statue-female-s-break-ag":[[0,"coli-statue-female-s-break-lod0-jg"],[1,"coli-statue-female-s-break-lod0-mg"],[2,"coli-statue-female-s-break-idle-ja"],[3,"coli-statue-female-s-break-a-lod0-jg"],[4,"coli-statue-female-s-break-a-lod0-mg"],[5,"coli-statue-female-s-break-a-idle-ja"],[6,"coli-statue-female-s-break-b-lod0-jg"],[7,"coli-statue-female-s-break-b-lod0-mg"],[8,"coli-statue-female-s-break-b-idle-ja"]],"collectables-ag":[[0,"collectables-generic-ripples-lod0-jg"],[1,"collectables-generic-ripples-lod0-mg"],[2,"collectables-generic-ripples-idle-ja"],[3,"collectables-generic-ripples-cycle-ja"]],"collectoid-ag":[[0,"collectoid-lod0-jg"],[1,"collectoid-lod0-mg"],[2,"collectoid-shadow-mg"],[3,"collectoid-idle-ja"]],"collectoid-debris-ag":[[0,"collectoid-debris-a-lod0-jg"],[1,"collectoid-debris-a-lod0-mg"],[2,"collectoid-debris-b-lod0-jg"],[3,"collectoid-debris-b-lod0-mg"],[4,"collectoid-debris-c-lod0-jg"],[5,"collectoid-debris-c-lod0-mg"],[6,"collectoid-debris-d-lod0-jg"],[7,"collectoid-debris-d-lod0-mg"]],"com-rod-of-god-ag":[[0,"com-rod-of-god-lod0-jg"],[1,"com-rod-of-god-lod0-mg"],[2,"com-rod-of-god-idle-ja"]],"combat-racing-ag":[[0,"combat-racing-lod0-jg"],[1,"combat-racing-lod0-mg"],[2,"combat-racing-idle-ja"],[3,"combat-racing-onscreen-ja"]],"confirm-screen-ag":[[0,"confirm-screen-lod0-jg"],[1,"confirm-screen-lod0-mg"],[2,"confirm-screen-idle-ja"],[3,"confirm-screen-entera-ja"],[4,"confirm-screen-exita-ja"]],"construction-barricade-ag":[[0,"construction-barricade-lod0-jg"],[1,"construction-barricade-lod0-mg"],[2,"construction-barricade-lod1-mg"],[3,"construction-barricade-lod2-mg"],[4,"construction-barricade-shadow-mg"],[5,"construction-barricade-idle-ja"]],"construction-cone-ag":[[0,"construction-cone-lod0-jg"],[1,"construction-cone-lod0-mg"],[2,"construction-cone-lod1-mg"],[3,"construction-cone-lod2-mg"],[4,"construction-cone-idle-ja"]],"crate-ag":[[0,"crate-metal-lod0-jg"],[1,"crate-metal-lod0-mg"],[2,"crate-metal-lod1-mg"],[3,"crate-idle-ja"]],"ctf-base-ag":[[0,"ctf-base-lod0-jg"],[1,"ctf-base-lod0-mg"],[2,"ctf-base-idle-ja"],[3,"ctf-base-b-lod0-jg"],[4,"ctf-base-b-lod0-mg"],[5,"ctf-base-b-idle-ja"],[6,"ctf-base-c-lod0-jg"],[7,"ctf-base-c-lod0-mg"],[8,"ctf-base-c-flag-ja"]],"cust-icon-tab-ag":[[0,"cust-icon-tab-lod0-jg"],[1,"cust-icon-tab-lod0-mg"],[2,"cust-icon-tab-idle-ja"],[3,"cust-icon-tab-entera-ja"],[4,"cust-icon-tab-exita-ja"]],"cust-title-tab-ag":[[0,"cust-title-tab-lod0-jg"],[1,"cust-title-tab-lod0-mg"],[2,"cust-title-tab-idle-ja"],[3,"cust-title-tab-entera-ja"],[4,"cust-title-tab-exita-ja"]],"dax-hr-cred-ag":[[0,"dax-hr-cred-lod0-jg"],[1,"dax-hr-cred-lod0-mg"],[2,"dax-hr-cred-shadow-mg"],[3,"dax-hr-cred-turntable-ja"]],"daxter-ag":[[0,"daxter-lod0-jg"],[1,"daxter-lod0-mg"],[2,"daxter-falcon-left-ja"],[3,"daxter-falcon-center-ja"],[4,"daxter-falcon-right-big-ja"],[5,"daxter-falcon-left-big-ja"],[6,"daxter-falcon-right-ja"],[7,"daxter-falcon-up-ja"],[8,"daxter-falcon-jump-ja"],[9,"daxter-falcon-right-return-ja"],[10,"daxter-falcon-left-return-ja"]],"daxter-highres-ag":[[0,"daxter-highres-lod0-jg"],[1,"daxter-highres-lod0-mg"],[2,"daxter-highres-shadow-mg"]],"deathrace-drone-ag":[[0,"deathrace-drone-lod0-jg"],[1,"deathrace-drone-lod0-mg"],[2,"deathrace-drone-lod1-mg"],[3,"deathrace-drone-lod2-mg"],[4,"deathrace-drone-shadow-mg"],[5,"deathrace-drone-idle-ja"],[6,"deathrace-drone-wheel-lod0-jg"],[7,"deathrace-drone-wheel-lod0-mg"],[8,"deathrace-drone-wheel-lod1-mg"],[9,"deathrace-drone-wheel-lod2-mg"],[10,"deathrace-drone-wheel-idle-ja"]],"des-cactus-a-ag":[[0,"des-cactus-a-lod0-jg"],[1,"des-cactus-a-lod0-mg"],[2,"des-cactus-a-lod1-mg"],[3,"des-cactus-a-lod2-mg"],[4,"des-cactus-a-lod3-mg"],[5,"des-cactus-a-idle-ja"],[6,"des-cactus-a-explode-lod0-jg"],[7,"des-cactus-a-explode-lod0-mg"],[8,"des-cactus-a-explode-idle-ja"]],"des-cactus-b-ag":[[0,"des-cactus-b-lod0-jg"],[1,"des-cactus-b-lod0-mg"],[2,"des-cactus-b-lod1-mg"],[3,"des-cactus-b-lod2-mg"],[4,"des-cactus-b-lod3-mg"],[5,"des-cactus-b-idle-ja"],[6,"des-cactus-b-explode-lod0-jg"],[7,"des-cactus-b-explode-lod0-mg"],[8,"des-cactus-b-explode-idle-ja"]],"drome-tunnel-drum-ag":[[0,"drome-tunnel-drum-lod0-jg"],[1,"drome-tunnel-drum-lod0-mg"],[2,"drome-tunnel-drum-idle-ja"]],"eco-blue-ag":[[0,"eco-blue-lod0-jg"],[1,"eco-blue-lod0-mg"],[2,"eco-blue-lod1-mg"],[3,"eco-blue-lod2-mg"],[4,"eco-blue-shadow-mg"],[5,"eco-blue-idle-ja"]],"eco-blue-debris-ag":[[0,"eco-blue-debris-a-lod0-jg"],[1,"eco-blue-debris-a-lod0-mg"],[2,"eco-blue-debris-b-lod0-jg"],[3,"eco-blue-debris-b-lod0-mg"],[4,"eco-blue-debris-c-lod0-jg"],[5,"eco-blue-debris-c-lod0-mg"],[6,"eco-blue-debris-d-lod0-jg"],[7,"eco-blue-debris-d-lod0-mg"]],"eco-dark-ag":[[0,"eco-dark-lod0-jg"],[1,"eco-dark-lod0-mg"],[2,"eco-dark-lod1-mg"],[3,"eco-dark-lod2-mg"],[4,"eco-dark-shadow-mg"],[5,"eco-dark-idle-ja"]],"eco-green-ag":[[0,"eco-green-lod0-jg"],[1,"eco-green-lod0-mg"],[2,"eco-green-lod1-mg"],[3,"eco-green-lod2-mg"],[4,"eco-green-shadow-mg"],[5,"eco-green-idle-ja"]],"eco-light-ag":[[0,"eco-light-lod0-jg"],[1,"eco-light-lod0-mg"],[2,"eco-light-idle-ja"]],"eco-red-ag":[[0,"eco-red-lod0-jg"],[1,"eco-red-lod0-mg"],[2,"eco-red-lod1-mg"],[3,"eco-red-lod2-mg"],[4,"eco-red-shadow-mg"],[5,"eco-red-idle-ja"]],"eco-yellow-ag":[[0,"eco-yellow-lod0-jg"],[1,"eco-yellow-lod0-mg"],[2,"eco-yellow-lod1-mg"],[3,"eco-yellow-lod2-mg"],[4,"eco-yellow-shadow-mg"],[5,"eco-yellow-idle-ja"]],"finish-banner-ag":[[0,"finish-banner-lod0-jg"],[1,"finish-banner-lod0-mg"],[2,"finish-banner-idle-ja"]],"fuel-cell-ag":[[0,"fuel-cell-lod0-jg"],[1,"fuel-cell-lod0-mg"],[2,"fuel-cell-shadow-mg"],[3,"fuel-cell-idle-ja"],[4,"fuel-cell-still-ja"]],"fuel-cell-shield-ag":[[0,"fuel-cell-shield-lod0-jg"],[1,"fuel-cell-shield-lod0-mg"],[2,"fuel-cell-shield-idle-ja"]],"full-screen-ag":[[0,"full-screen-lod0-jg"],[1,"full-screen-lod0-mg"],[2,"full-screen-idle-ja"],[3,"full-screen-entera-ja"],[4,"full-screen-exita-ja"]],"garage-car-arm-ag":[[0,"garage-car-arm-lod0-jg"],[1,"garage-car-arm-lod0-mg"],[2,"garage-car-arm-idle-ja"]],"garage-cinema-ag":[[0,"garage-cinema-lod0-jg"],[1,"garage-cinema-lod0-mg"],[2,"garage-cinema-idle-ja"]],"garage-door-ag":[[0,"garage-door-lod0-jg"],[1,"garage-door-lod0-mg"],[2,"garage-door-idle-ja"]],"garage-sliding-door-ag":[[0,"garage-sliding-door-lod0-jg"],[1,"garage-sliding-door-lod0-mg"],[2,"garage-sliding-door-idle-ja"]],"garage-tool-arm-ag":[[0,"garage-tool-arm-lod0-jg"],[1,"garage-tool-arm-lod0-mg"],[2,"garage-tool-arm-idle-ja"]],"garage-turntable-ag":[[0,"garage-turntable-lod0-jg"],[1,"garage-turntable-lod0-mg"],[2,"garage-turntable-idle-ja"]],"grenade-ag":[[0,"grenade-lod0-jg"],[1,"grenade-lod0-mg"],[2,"grenade-idle-ja"]],"gtb-hr-cred-ag":[[0,"gtb-hr-cred-lod0-jg"],[1,"gtb-hr-cred-lod0-mg"],[2,"gtb-hr-cred-shadow-mg"],[3,"gtb-hr-cred-turntable-ja"]],"gun-ag":[[0,"gun-lod0-jg"],[1,"gun-lod0-mg"],[2,"gun-idle-ja"],[3,"gun-yellow-to-missile-ja"],[4,"gun-missile-to-grenade-ja"],[5,"gun-grenade-to-yellow-ja"],[6,"gun-missile-to-yellow-ja"],[7,"gun-grenade-to-missile-ja"],[8,"gun-yellow-to-grenade-ja"]],"haven-gen-light-ag":[[0,"haven-gen-light-lod0-jg"],[1,"haven-gen-light-lod0-mg"],[2,"haven-gen-light-idle-ja"]],"haven-gen-light-debris-ag":[[0,"haven-gen-light-debris-a-lod0-jg"],[1,"haven-gen-light-debris-a-lod0-mg"],[2,"haven-gen-light-debris-b-lod0-jg"],[3,"haven-gen-light-debris-b-lod0-mg"],[4,"haven-gen-light-debris-c-lod0-jg"],[5,"haven-gen-light-debris-c-lod0-mg"],[6,"haven-gen-light-debris-d-lod0-jg"],[7,"haven-gen-light-debris-d-lod0-mg"]],"haven-trashcan-ag":[[0,"haven-trashcan-lod0-jg"],[1,"haven-trashcan-lod0-mg"],[2,"haven-trashcan-idle-ja"]],"helmet-a-ag":[[0,"helmet-a-lod0-jg"],[1,"helmet-a-lod0-mg"],[2,"helmet-a-idle-ja"]],"helmet-b-ag":[[0,"helmet-b-lod0-jg"],[1,"helmet-b-lod0-mg"],[2,"helmet-b-idle-ja"]],"helmet-c-ag":[[0,"helmet-c-lod0-jg"],[1,"helmet-c-lod0-mg"],[2,"helmet-c-idle-ja"]],"helmet-d-ag":[[0,"helmet-d-lod0-jg"],[1,"helmet-d-lod0-mg"],[2,"helmet-d-idle-ja"]],"helmet-e-ag":[[0,"helmet-e-lod0-jg"],[1,"helmet-e-lod0-mg"],[2,"helmet-e-idle-ja"]],"helmet-f-ag":[[0,"helmet-f-lod0-jg"],[1,"helmet-f-lod0-mg"],[2,"helmet-f-idle-ja"]],"ice-debris-ag":[[0,"ice-debris-a-lod0-jg"],[1,"ice-debris-a-lod0-mg"],[2,"ice-debris-b-lod0-jg"],[3,"ice-debris-b-lod0-mg"],[4,"ice-debris-c-lod0-jg"],[5,"ice-debris-c-lod0-mg"],[6,"ice-debris-d-lod0-jg"],[7,"ice-debris-d-lod0-mg"],[8,"ice-debris-e-lod0-jg"],[9,"ice-debris-e-lod0-mg"]],"ice-flag-ag":[[0,"ice-flag-lod0-jg"],[1,"ice-flag-lod0-mg"],[2,"ice-flag-idle-ja"]],"interface-cam-ag":[[0,"interface-cam-lod0-jg"],[1,"interface-cam-lod0-mg"],[2,"interface-cam-idle-ja"],[3,"interface-cam-move-ja"]],"jakd-hr-cred-ag":[[0,"jakd-hr-cred-lod0-jg"],[1,"jakd-hr-cred-lod0-mg"],[2,"jakd-hr-cred-shadow-mg"],[3,"jakd-hr-cred-turntable-ja"]],"jakxlogo-ag":[[0,"jakxlogo-lod0-jg"],[1,"jakxlogo-lod0-mg"],[2,"jakxlogo-idle-ja"],[3,"jakxlogo-onscreen-ja"]],"jungle-branch-collision-a-ag":[[0,"jungle-branch-collision-a-lod0-jg"],[1,"jungle-branch-collision-a-lod0-mg"],[2,"jungle-branch-collision-a-idle-ja"]],"jungle-clay-jar-a-ag":[[0,"jungle-clay-jar-a-lod0-jg"],[1,"jungle-clay-jar-a-lod0-mg"],[2,"jungle-clay-jar-a-idle-ja"]],"jungle-clay-jar-b-ag":[[0,"jungle-clay-jar-b-lod0-jg"],[1,"jungle-clay-jar-b-lod0-mg"],[2,"jungle-clay-jar-b-idle-ja"]],"jungle-debris-ag":[[0,"jungle-debris-wooda-lod0-jg"],[1,"jungle-debris-wooda-lod0-mg"],[2,"jungle-debris-woodb-lod0-jg"],[3,"jungle-debris-woodb-lod0-mg"],[4,"jungle-debris-woodc-lod0-jg"],[5,"jungle-debris-woodc-lod0-mg"],[6,"jungle-debris-woodd-lod0-jg"],[7,"jungle-debris-woodd-lod0-mg"]],"jungle-debris-jar-a-ag":[[0,"jungle-debris-jar-a-a-lod0-jg"],[1,"jungle-debris-jar-a-a-lod0-mg"],[2,"jungle-debris-jar-a-b-lod0-jg"],[3,"jungle-debris-jar-a-b-lod0-mg"],[4,"jungle-debris-jar-a-c-lod0-jg"],[5,"jungle-debris-jar-a-c-lod0-mg"],[6,"jungle-debris-jar-a-d-lod0-jg"],[7,"jungle-debris-jar-a-d-lod0-mg"]],"jungle-debris-jar-b-ag":[[0,"jungle-debris-jar-b-a-lod0-jg"],[1,"jungle-debris-jar-b-a-lod0-mg"],[2,"jungle-debris-jar-b-b-lod0-jg"],[3,"jungle-debris-jar-b-b-lod0-mg"],[4,"jungle-debris-jar-b-c-lod0-jg"],[5,"jungle-debris-jar-b-c-lod0-mg"],[6,"jungle-debris-jar-b-d-lod0-jg"],[7,"jungle-debris-jar-b-d-lod0-mg"]],"jungle-flaming-arrow-ag":[[0,"jungle-flaming-arrow-lod0-jg"],[1,"jungle-flaming-arrow-lod0-mg"],[2,"jungle-flaming-arrow-idle-ja"]],"jungle-statue-small-debris-ag":[[0,"jungle-statue-small-debris-a-lod0-jg"],[1,"jungle-statue-small-debris-a-lod0-mg"],[2,"jungle-statue-small-debris-b-lod0-jg"],[3,"jungle-statue-small-debris-b-lod0-mg"],[4,"jungle-statue-small-debris-c-lod0-jg"],[5,"jungle-statue-small-debris-c-lod0-mg"],[6,"jungle-statue-small-debris-d-lod0-jg"],[7,"jungle-statue-small-debris-d-lod0-mg"]],"jungle-statue-small-outdoors-ag":[[0,"jungle-statue-small-outdoors-lod0-jg"],[1,"jungle-statue-small-outdoors-lod0-mg"],[2,"jungle-statue-small-outdoors-idle-ja"]],"jungle-stone-snake-head-ag":[[0,"jungle-stone-snake-head-lod0-jg"],[1,"jungle-stone-snake-head-lod0-mg"],[2,"jungle-stone-snake-head-lod1-mg"],[3,"jungle-stone-snake-head-idle-ja"],[4,"jungle-stone-snake-head-explode-lod0-jg"],[5,"jungle-stone-snake-head-explode-lod0-mg"],[6,"jungle-stone-snake-head-explode-idle-ja"]],"jungle-tree-root-large-a-ag":[[0,"jungle-tree-root-large-a-lod0-jg"],[1,"jungle-tree-root-large-a-lod0-mg"],[2,"jungle-tree-root-large-a-idle-ja"]],"jungle-tree-root-large-b-ag":[[0,"jungle-tree-root-large-b-lod0-jg"],[1,"jungle-tree-root-large-b-lod0-mg"],[2,"jungle-tree-root-large-b-idle-ja"]],"kcro-bouncy-tire-a-ag":[[0,"kcro-bouncy-tire-a-lod0-jg"],[1,"kcro-bouncy-tire-a-lod0-mg"],[2,"kcro-bouncy-tire-a-idle-ja"]],"kcro-fence-debris-ag":[[0,"kcro-fence-debris-post-lod0-jg"],[1,"kcro-fence-debris-post-lod0-mg"],[2,"kcro-fence-debris-raila-lod0-jg"],[3,"kcro-fence-debris-raila-lod0-mg"],[4,"kcro-fence-debris-railb-lod0-jg"],[5,"kcro-fence-debris-railb-lod0-mg"],[6,"kcro-fence-debris-railc-lod0-jg"],[7,"kcro-fence-debris-railc-lod0-mg"]],"kcro-fence-piece-a-ag":[[0,"kcro-fence-piece-a-lod0-jg"],[1,"kcro-fence-piece-a-lod0-mg"],[2,"kcro-fence-piece-a-idle-ja"]],"kcro-fence-piece-b-ag":[[0,"kcro-fence-piece-b-lod0-jg"],[1,"kcro-fence-piece-b-lod0-mg"],[2,"kcro-fence-piece-b-idle-ja"]],"kcro-flag-down-ag":[[0,"kcro-flag-down-lod0-jg"],[1,"kcro-flag-down-lod0-mg"],[2,"kcro-flag-down-idle-ja"]],"kcro-oil-barrel-ag":[[0,"kcro-oil-barrel-lod0-jg"],[1,"kcro-oil-barrel-lod0-mg"],[2,"kcro-oil-barrel-idle-ja"]],"kcro-staff-flag-ag":[[0,"kcro-staff-flag-lod0-jg"],[1,"kcro-staff-flag-lod0-mg"],[2,"kcro-staff-flag-idle-ja"]],"kei-hr-cred-ag":[[0,"kei-hr-cred-lod0-jg"],[1,"kei-hr-cred-lod0-mg"],[2,"kei-hr-cred-shadow-mg"],[3,"kei-hr-cred-turntable-ja"]],"keira-highres-ag":[[0,"keira-highres-lod0-jg"],[1,"keira-highres-lod0-mg"],[2,"keira-highres-shadow-mg"],[3,"keira-highres-idle-ja"]],"keyboard-ag":[[0,"keyboard-lod0-jg"],[1,"keyboard-lod0-mg"],[2,"keyboard-idle-ja"],[3,"keyboard-entera-ja"],[4,"keyboard-exita-ja"]],"kle-hr-cred-ag":[[0,"kle-hr-cred-lod0-jg"],[1,"kle-hr-cred-lod0-mg"],[2,"kle-hr-cred-shadow-mg"],[3,"kle-hr-cred-kleever-R1-cg"],[4,"kle-hr-cred-kleever-L1-cg"],[5,"kle-hr-cred-kleever-Center-cg"],[6,"kle-hr-cred-kleever-R2-cg"],[7,"kle-hr-cred-kleever-L2-cg"],[8,"kle-hr-cred-turntable-ja"]],"kras-fireworks-ship-a-ag":[[0,"kras-fireworks-ship-a-lod0-jg"],[1,"kras-fireworks-ship-a-lod0-mg"],[2,"kras-fireworks-ship-a-idle-ja"]],"kras-fishtank-lo-ag":[[0,"kras-fishtank-lo-lod0-jg"],[1,"kras-fishtank-lo-lod0-mg"],[2,"kras-fishtank-lo-idle-ja"]],"kras-flag-ag":[[0,"kras-flag-lod0-jg"],[1,"kras-flag-lod0-mg"],[2,"kras-flag-idle-ja"]],"kras-pump-break-ag":[[0,"kras-pump-break-lod0-jg"],[1,"kras-pump-break-lod0-mg"],[2,"kras-pump-break-idle-ja"]],"kras-pump-debris-ag":[[0,"kras-pump-debris-a-lod0-jg"],[1,"kras-pump-debris-a-lod0-mg"],[2,"kras-pump-debris-b-lod0-jg"],[3,"kras-pump-debris-b-lod0-mg"],[4,"kras-pump-debris-c-lod0-jg"],[5,"kras-pump-debris-c-lod0-mg"]],"kras-rusty-sign-ag":[[0,"kras-rusty-sign-lod0-jg"],[1,"kras-rusty-sign-lod0-mg"],[2,"kras-rusty-sign-lod1-mg"],[3,"kras-rusty-sign-idle-ja"]],"kras-tower-ag":[[0,"kras-tower-lod0-jg"],[1,"kras-tower-lod0-mg"],[2,"kras-tower-idle-ja"]],"kras-windsock-ag":[[0,"kras-windsock-lod0-jg"],[1,"kras-windsock-lod0-mg"],[2,"kras-windsock-idle-ja"]],"krasfemale-ag":[[0,"krasfemale-lod0-jg"],[1,"krasfemale-lod0-mg"],[2,"krasfemale-idle-ja"],[3,"krasfemale-idle2-ja"]],"krasmale-ag":[[0,"krasmale-lod0-jg"],[1,"krasmale-lod0-mg"],[2,"krasmale-idle-ja"],[3,"krasmale-idle2-ja"],[4,"krasmale-idle3-ja"],[5,"krasmale-idle4-ja"],[6,"krasmale-idle5-ja"],[7,"krasmale-idle6-ja"],[8,"krasmale-idle7-ja"],[9,"krasmale-idle8-ja"],[10,"krasmale-idle9-ja"],[11,"krasmale-idle10-ja"]],"large-type-bar-ag":[[0,"large-type-bar-lod0-jg"],[1,"large-type-bar-lod0-mg"],[2,"large-type-bar-idle-ja"],[3,"large-type-bar-entera-ja"],[4,"large-type-bar-enterb-ja"],[5,"large-type-bar-exita-ja"],[6,"large-type-bar-exitb-ja"]],"lg-player-screen-ag":[[0,"lg-player-screen-lod0-jg"],[1,"lg-player-screen-lod0-mg"],[2,"lg-player-screen-idle-ja"],[3,"lg-player-screen-entera-ja"],[4,"lg-player-screen-exita-ja"]],"lobby-screen-a-ag":[[0,"lobby-screen-a-lod0-jg"],[1,"lobby-screen-a-lod0-mg"],[2,"lobby-screen-a-idle-ja"],[3,"lobby-screen-a-entera-ja"],[4,"lobby-screen-a-exita-ja"]],"lobby-screen-b-ag":[[0,"lobby-screen-b-lod0-jg"],[1,"lobby-screen-b-lod0-mg"],[2,"lobby-screen-b-idle-ja"],[3,"lobby-screen-b-entera-ja"],[4,"lobby-screen-b-exita-ja"]],"lobby-screen-c-ag":[[0,"lobby-screen-c-lod0-jg"],[1,"lobby-screen-c-lod0-mg"],[2,"lobby-screen-c-idle-ja"],[3,"lobby-screen-c-entera-ja"],[4,"lobby-screen-c-exita-ja"]],"lobby-screen-d-ag":[[0,"lobby-screen-d-lod0-jg"],[1,"lobby-screen-d-lod0-mg"],[2,"lobby-screen-d-idle-ja"],[3,"lobby-screen-d-entera-ja"],[4,"lobby-screen-d-exita-ja"]],"lobby-tab-large-ag":[[0,"lobby-tab-large-lod0-jg"],[1,"lobby-tab-large-lod0-mg"],[2,"lobby-tab-large-idle-ja"],[3,"lobby-tab-large-entera-ja"],[4,"lobby-tab-large-exita-ja"]],"lobby-tab-small-ag":[[0,"lobby-tab-small-lod0-jg"],[1,"lobby-tab-small-lod0-mg"],[2,"lobby-tab-small-idle-ja"],[3,"lobby-tab-small-entera-ja"],[4,"lobby-tab-small-exita-ja"]],"lobby-tab-small-b-ag":[[0,"lobby-tab-small-b-lod0-jg"],[1,"lobby-tab-small-b-lod0-mg"],[2,"lobby-tab-small-b-idle-ja"],[3,"lobby-tab-small-b-entera-ja"],[4,"lobby-tab-small-b-exita-ja"]],"map-screen-ag":[[0,"map-screen-lod0-jg"],[1,"map-screen-lod0-mg"],[2,"map-screen-idle-ja"],[3,"map-screen-entera-ja"],[4,"map-screen-enterb-ja"],[5,"map-screen-exita-ja"],[6,"map-screen-exitb-ja"]],"mem-card-screen-ag":[[0,"mem-card-screen-lod0-jg"],[1,"mem-card-screen-lod0-mg"],[2,"mem-card-screen-idle-ja"],[3,"mem-card-screen-entera-ja"],[4,"mem-card-screen-exita-ja"]],"menu-haven-trophy-ag":[[0,"menu-haven-trophy-lod0-jg"],[1,"menu-haven-trophy-lod0-mg"],[2,"menu-haven-trophy-idle-ja"]],"menu-kras-trophy-ag":[[0,"menu-kras-trophy-lod0-jg"],[1,"menu-kras-trophy-lod0-mg"],[2,"menu-kras-trophy-idle-ja"]],"menu-marauder-trophy-ag":[[0,"menu-marauder-trophy-lod0-jg"],[1,"menu-marauder-trophy-lod0-mg"],[2,"menu-marauder-trophy-idle-ja"]],"menu-spargus-trophy-ag":[[0,"menu-spargus-trophy-lod0-jg"],[1,"menu-spargus-trophy-lod0-mg"],[2,"menu-spargus-trophy-idle-ja"]],"metal-raptor-ag":[[0,"metal-raptor-lod0-jg"],[1,"metal-raptor-lod0-mg"],[2,"metal-raptor-lod1-mg"],[3,"metal-raptor-shadow-mg"],[4,"metal-raptor-idle-ja"],[5,"metal-raptor-run-ja"],[6,"metal-raptor-turn180-ja"],[7,"metal-raptor-ragdoll-ja"]],"mine-a-ag":[[0,"mine-a-lod0-jg"],[1,"mine-a-lod0-mg"],[2,"mine-a-lod1-mg"],[3,"mine-a-lod2-mg"],[4,"mine-a-idle-ja"]],"mine-b-ag":[[0,"mine-b-lod0-jg"],[1,"mine-b-lod0-mg"],[2,"mine-b-lod1-mg"],[3,"mine-b-idle-ja"]],"mine-c-ag":[[0,"mine-c-lod0-jg"],[1,"mine-c-lod0-mg"],[2,"mine-c-lod1-mg"],[3,"mine-c-lod2-mg"],[4,"mine-c-shadow-mg"],[5,"mine-c-idle-ja"],[6,"mine-c-walk-ja"]],"missile-a-ag":[[0,"missile-a-lod0-jg"],[1,"missile-a-lod0-mg"],[2,"missile-a-idle-ja"]],"muzzle-flash-ag":[[0,"muzzle-flash-lod0-jg"],[1,"muzzle-flash-lod0-mg"],[2,"muzzle-flash-idle-ja"]],"oil-slick-ag":[[0,"oil-slick-lod0-jg"],[1,"oil-slick-lod0-mg"],[2,"oil-slick-idle-ja"]],"palm-tree-a-ag":[[0,"palm-tree-a-lod0-jg"],[1,"palm-tree-a-lod0-mg"],[2,"palm-tree-a-lod1-mg"],[3,"palm-tree-a-lod2-mg"],[4,"palm-tree-a-idle-ja"]],"palm-tree-b-ag":[[0,"palm-tree-b-lod0-jg"],[1,"palm-tree-b-lod0-mg"],[2,"palm-tree-b-lod1-mg"],[3,"palm-tree-b-lod2-mg"],[4,"palm-tree-b-idle-ja"]],"palm-tree-c-ag":[[0,"palm-tree-c-lod0-jg"],[1,"palm-tree-c-lod0-mg"],[2,"palm-tree-c-lod1-mg"],[3,"palm-tree-c-lod2-mg"],[4,"palm-tree-c-idle-ja"]],"palm-tree-debris-ag":[[0,"palm-tree-debris-a-lod0-jg"],[1,"palm-tree-debris-a-lod0-mg"],[2,"palm-tree-debris-a-idle-ja"],[3,"palm-tree-debris-b-lod0-jg"],[4,"palm-tree-debris-b-lod0-mg"],[5,"palm-tree-debris-b-idle-ja"]],"peak-double-flag-ag":[[0,"peak-double-flag-lod0-jg"],[1,"peak-double-flag-lod0-mg"],[2,"peak-double-flag-idle-ja"]],"peak-snowball-ag":[[0,"peak-snowball-lod0-jg"],[1,"peak-snowball-lod0-mg"],[2,"peak-snowball-idle-ja"]],"pec-hr-cred-ag":[[0,"pec-hr-cred-lod0-jg"],[1,"pec-hr-cred-lod0-mg"],[2,"pec-hr-cred-shadow-mg"],[3,"pec-hr-cred-turntable-ja"]],"plane-screen-ag":[[0,"plane-screen-lod0-jg"],[1,"plane-screen-lod0-mg"],[2,"plane-screen-idle-ja"],[3,"plane-screen-entera-ja"],[4,"plane-screen-exita-ja"]],"play-screen-ag":[[0,"play-screen-lod0-jg"],[1,"play-screen-lod0-mg"],[2,"play-screen-idle-ja"],[3,"play-screen-entera-ja"],[4,"play-screen-exita-ja"]],"play-screen-b-ag":[[0,"play-screen-b-lod0-jg"],[1,"play-screen-b-lod0-mg"],[2,"play-screen-b-idle-ja"],[3,"play-screen-b-entera-ja"],[4,"play-screen-b-exita-ja"]],"plow-ag":[[0,"plow-lod0-jg"],[1,"plow-lod0-mg"],[2,"plow-shadow-mg"],[3,"plow-idle-ja"],[4,"plow-flip-ja"]],"plow-debris-ag":[[0,"plow-debris-a-lod0-jg"],[1,"plow-debris-a-lod0-mg"],[2,"plow-debris-b-lod0-jg"],[3,"plow-debris-b-lod0-mg"],[4,"plow-debris-c-lod0-jg"],[5,"plow-debris-c-lod0-mg"],[6,"plow-debris-d-lod0-jg"],[7,"plow-debris-d-lod0-mg"],[8,"plow-debris-e-lod0-jg"],[9,"plow-debris-e-lod0-mg"],[10,"plow-debris-f-lod0-jg"],[11,"plow-debris-f-lod0-mg"],[12,"plow-debris-g-lod0-jg"],[13,"plow-debris-g-lod0-mg"],[14,"plow-debris-h-lod0-jg"],[15,"plow-debris-h-lod0-mg"],[16,"plow-debris-i-lod0-jg"],[17,"plow-debris-i-lod0-mg"],[18,"plow-debris-j-lod0-jg"],[19,"plow-debris-j-lod0-mg"],[20,"plow-debris-k-lod0-jg"],[21,"plow-debris-k-lod0-mg"],[22,"plow-debris-l-lod0-jg"],[23,"plow-debris-l-lod0-mg"],[24,"plow-debris-m-lod0-jg"],[25,"plow-debris-m-lod0-mg"],[26,"plow-debris-n-lod0-jg"],[27,"plow-debris-n-lod0-mg"],[28,"plow-debris-o-lod0-jg"],[29,"plow-debris-o-lod0-mg"],[30,"plow-debris-p-lod0-jg"],[31,"plow-debris-p-lod0-mg"]],"points-counter-ag":[[0,"points-counter-lod0-jg"],[1,"points-counter-lod0-mg"],[2,"points-counter-idle-ja"],[3,"points-counter-entera-ja"],[4,"points-counter-exita-ja"]],"pop-up-screen-a-ag":[[0,"pop-up-screen-a-lod0-jg"],[1,"pop-up-screen-a-lod0-mg"],[2,"pop-up-screen-a-idle-ja"],[3,"pop-up-screen-a-enter-ja"],[4,"pop-up-screen-a-exit-ja"]],"pop-up-screen-b-ag":[[0,"pop-up-screen-b-lod0-jg"],[1,"pop-up-screen-b-lod0-mg"],[2,"pop-up-screen-b-idle-ja"],[3,"pop-up-screen-b-enter-ja"],[4,"pop-up-screen-b-exit-ja"],[5,"pop-up-screen-b-enterb-ja"],[6,"pop-up-screen-b-exitb-ja"]],"pop-up-screen-c-ag":[[0,"pop-up-screen-c-lod0-jg"],[1,"pop-up-screen-c-lod0-mg"],[2,"pop-up-screen-c-idle-ja"],[3,"pop-up-screen-c-enter-ja"],[4,"pop-up-screen-c-exit-ja"]],"pre-artifact-a-ag":[[0,"pre-artifact-a-lod0-jg"],[1,"pre-artifact-a-lod0-mg"],[2,"pre-artifact-a-idle-ja"]],"pre-artifact-b-ag":[[0,"pre-artifact-b-lod0-jg"],[1,"pre-artifact-b-lod0-mg"],[2,"pre-artifact-b-idle-ja"]],"pre-artifact-c-ag":[[0,"pre-artifact-c-lod0-jg"],[1,"pre-artifact-c-lod0-mg"],[2,"pre-artifact-c-idle-ja"]],"pre-artifact-d-ag":[[0,"pre-artifact-d-lod0-jg"],[1,"pre-artifact-d-lod0-mg"],[2,"pre-artifact-d-idle-ja"]],"prize-crate-ag":[[0,"prize-crate-lod0-jg"],[1,"prize-crate-lod0-mg"],[2,"prize-crate-lod1-mg"],[3,"prize-crate-lod2-mg"],[4,"prize-crate-shadow-mg"],[5,"prize-crate-idle-ja"]],"ray-hr-cred-ag":[[0,"ray-hr-cred-lod0-jg"],[1,"ray-hr-cred-lod0-mg"],[2,"ray-hr-cred-shadow-mg"],[3,"ray-hr-cred-turntable-ja"]],"raz-hr-cred-ag":[[0,"raz-hr-cred-lod0-jg"],[1,"raz-hr-cred-lod0-mg"],[2,"raz-hr-cred-shadow-mg"],[3,"raz-hr-cred-turntable-ja"]],"rustyh-bar-stool-ag":[[0,"rustyh-bar-stool-lod0-jg"],[1,"rustyh-bar-stool-lod0-mg"],[2,"rustyh-bar-stool-idle-ja"]],"rustyh-blue-fish-ag":[[0,"rustyh-blue-fish-lod0-jg"],[1,"rustyh-blue-fish-lod0-mg"],[2,"rustyh-blue-fish-idle-ja"]],"rustyh-bottle-c-ag":[[0,"rustyh-bottle-c-lod0-jg"],[1,"rustyh-bottle-c-lod0-mg"],[2,"rustyh-bottle-c-idle-ja"]],"rustyh-bottle-d-ag":[[0,"rustyh-bottle-d-lod0-jg"],[1,"rustyh-bottle-d-lod0-mg"],[2,"rustyh-bottle-d-idle-ja"]],"rustyh-fishtank-ag":[[0,"rustyh-fishtank-lod0-jg"],[1,"rustyh-fishtank-lod0-mg"],[2,"rustyh-fishtank-idle-ja"]],"rustyh-fishtank-broken-ag":[[0,"rustyh-fishtank-broken-lod0-jg"],[1,"rustyh-fishtank-broken-lod0-mg"],[2,"rustyh-fishtank-broken-idle-ja"]],"rustyh-mug-ag":[[0,"rustyh-mug-lod0-jg"],[1,"rustyh-mug-lod0-mg"],[2,"rustyh-mug-idle-ja"]],"rustyh-mug-b-ag":[[0,"rustyh-mug-b-lod0-jg"],[1,"rustyh-mug-b-lod0-mg"],[2,"rustyh-mug-b-idle-ja"]],"rustyh-pink-fish-ag":[[0,"rustyh-pink-fish-lod0-jg"],[1,"rustyh-pink-fish-lod0-mg"],[2,"rustyh-pink-fish-idle-ja"]],"rustyh-seaweed-a-ag":[[0,"rustyh-seaweed-a-lod0-jg"],[1,"rustyh-seaweed-a-lod0-mg"],[2,"rustyh-seaweed-a-idle-ja"]],"rustyh-seaweed-b-ag":[[0,"rustyh-seaweed-b-lod0-jg"],[1,"rustyh-seaweed-b-lod0-mg"],[2,"rustyh-seaweed-b-idle-ja"]],"rustyh-seaweed-c-ag":[[0,"rustyh-seaweed-c-lod0-jg"],[1,"rustyh-seaweed-c-lod0-mg"],[2,"rustyh-seaweed-c-idle-ja"]],"rustyh-seaweed-d-ag":[[0,"rustyh-seaweed-d-lod0-jg"],[1,"rustyh-seaweed-d-lod0-mg"],[2,"rustyh-seaweed-d-idle-ja"]],"rustyh-small-fish-ag":[[0,"rustyh-small-fish-lod0-jg"],[1,"rustyh-small-fish-lod0-mg"],[2,"rustyh-small-fish-idle-ja"]],"rustyh-tank-stuff-ag":[[0,"rustyh-tank-stuff-lod0-jg"],[1,"rustyh-tank-stuff-lod0-mg"],[2,"rustyh-tank-stuff-idle-ja"]],"rustyh-treasure-chest-ag":[[0,"rustyh-treasure-chest-lod0-jg"],[1,"rustyh-treasure-chest-lod0-mg"],[2,"rustyh-treasure-chest-idle-ja"]],"saucer-ag":[[0,"saucer-lod0-jg"],[1,"saucer-lod0-mg"],[2,"saucer-lod1-mg"],[3,"saucer-lod2-mg"],[4,"saucer-shadow-mg"],[5,"saucer-idle-ja"]],"scenecamera-ag":[[0,"scenecamera-lod0-jg"],[1,"scenecamera-lod0-mg"],[2,"scenecamera-idle-ja"]],"select-mode-chooser-ag":[[0,"select-mode-chooser-lod0-jg"],[1,"select-mode-chooser-lod0-mg"],[2,"select-mode-chooser-idle-ja"],[3,"select-mode-chooser-entera-ja"],[4,"select-mode-chooser-exita-ja"]],"select-screen-ag":[[0,"select-screen-lod0-jg"],[1,"select-screen-lod0-mg"],[2,"select-screen-idle-ja"],[3,"select-screen-enter-ja"],[4,"select-screen-exit-ja"]],"select-screen-sml-ag":[[0,"select-screen-sml-lod0-jg"],[1,"select-screen-sml-lod0-mg"],[2,"select-screen-sml-idle-ja"],[3,"select-screen-sml-enter-ja"],[4,"select-screen-sml-exit-ja"]],"sentry-bot-ag":[[0,"sentry-bot-lod0-jg"],[1,"sentry-bot-lod0-mg"],[2,"sentry-bot-shadow-mg"],[3,"sentry-bot-idle-ja"],[4,"sentry-bot-open-ja"],[5,"sentry-bot-pop-up-ja"]],"shield-ag":[[0,"shield-lod0-jg"],[1,"shield-lod0-mg"],[2,"shield-open-ja"],[3,"shield-idle-ja"],[4,"shield-idle-mongoose-ja"],[5,"shield-open-mongoose-ja"],[6,"shield-dissipate-mongoose-ja"],[7,"shield-idle-falcon-ja"],[8,"shield-open-falcon-ja"],[9,"shield-dissipate-falcon-ja"],[10,"shield-idle-wombat-ja"],[11,"shield-open-wombat-ja"],[12,"shield-dissipate-wombat-ja"],[13,"shield-idle-possum-ja"],[14,"shield-open-possum-ja"],[15,"shield-dissipate-possum-ja"],[16,"shield-idle-tiger-ja"],[17,"shield-open-tiger-ja"],[18,"shield-dissipate-tiger-ja"],[19,"shield-idle-bobcat-ja"],[20,"shield-open-bobcat-ja"],[21,"shield-dissipate-bobcat-ja"],[22,"shield-idle-wolf-ja"],[23,"shield-open-wolf-ja"],[24,"shield-dissipate-wolf-ja"],[25,"shield-idle-panther-ja"],[26,"shield-open-panther-ja"],[27,"shield-dissipate-panther-ja"],[28,"shield-idle-leopard-ja"],[29,"shield-open-leopard-ja"],[30,"shield-dissipate-leopard-ja"],[31,"shield-idle-cougar-ja"],[32,"shield-open-cougar-ja"],[33,"shield-dissipate-cougar-ja"],[34,"shield-idle-cheetah-ja"],[35,"shield-open-cheetah-ja"],[36,"shield-idle-daxtermobile-ja"],[37,"shield-open-daxtermobile-ja"],[38,"shield-idle-bear-ja"],[39,"shield-open-bear-ja"],[40,"shield-idle-gila-ja"],[41,"shield-open-gila-ja"],[42,"shield-idle-snake-ja"],[43,"shield-open-snake-ja"]],"side-bar-ag":[[0,"side-bar-lod0-jg"],[1,"side-bar-lod0-mg"],[2,"side-bar-idle-ja"],[3,"side-bar-entera-ja"],[4,"side-bar-enterb-ja"],[5,"side-bar-exita-ja"],[6,"side-bar-exitb-ja"]],"side-bar-b-ag":[[0,"side-bar-b-lod0-jg"],[1,"side-bar-b-lod0-mg"],[2,"side-bar-b-idle-ja"],[3,"side-bar-b-entera-ja"],[4,"side-bar-b-exita-ja"]],"side-bar-c-ag":[[0,"side-bar-c-lod0-jg"],[1,"side-bar-c-lod0-mg"],[2,"side-bar-c-idle-ja"],[3,"side-bar-c-entera-ja"],[4,"side-bar-c-exita-ja"]],"side-bar-d-ag":[[0,"side-bar-d-lod0-jg"],[1,"side-bar-d-lod0-mg"],[2,"side-bar-d-idle-ja"],[3,"side-bar-d-entera-ja"],[4,"side-bar-d-exita-ja"]],"side-bar-e-ag":[[0,"side-bar-e-lod0-jg"],[1,"side-bar-e-lod0-mg"],[2,"side-bar-e-idle-ja"],[3,"side-bar-e-entera-ja"],[4,"side-bar-e-exita-ja"],[5,"side-bar-e-enterb-ja"],[6,"side-bar-e-exitb-ja"]],"side-bar-title-ag":[[0,"side-bar-title-lod0-jg"],[1,"side-bar-title-lod0-mg"],[2,"side-bar-title-idle-ja"],[3,"side-bar-title-entera-ja"],[4,"side-bar-title-exita-ja"]],"side-walls-ag":[[0,"side-walls-lod0-jg"],[1,"side-walls-lod0-mg"],[2,"side-walls-idle-ja"],[3,"side-walls-entera-ja"]],"sig-hr-cred-ag":[[0,"sig-hr-cred-lod0-jg"],[1,"sig-hr-cred-lod0-mg"],[2,"sig-hr-cred-shadow-mg"],[3,"sig-hr-cred-turntable-ja"]],"sml-type-bar-ag":[[0,"sml-type-bar-lod0-jg"],[1,"sml-type-bar-lod0-mg"],[2,"sml-type-bar-idle-ja"],[3,"sml-type-bar-entera-ja"],[4,"sml-type-bar-enterb-ja"],[5,"sml-type-bar-exita-ja"],[6,"sml-type-bar-exitb-ja"]],"snow-dinobreak-ag":[[0,"snow-dinobreak-lod0-jg"],[1,"snow-dinobreak-lod0-mg"],[2,"snow-dinobreak-idle-ja"],[3,"snow-dinobreak-explode-lod0-jg"],[4,"snow-dinobreak-explode-lod0-mg"],[5,"snow-dinobreak-explode-idle-ja"]],"snow-icebreak-a-ag":[[0,"snow-icebreak-a-lod0-jg"],[1,"snow-icebreak-a-lod0-mg"],[2,"snow-icebreak-a-idle-ja"]],"snow-icebreak-b-ag":[[0,"snow-icebreak-b-lod0-jg"],[1,"snow-icebreak-b-lod0-mg"],[2,"snow-icebreak-b-idle-ja"],[3,"snow-icebreak-b-explode-lod0-jg"],[4,"snow-icebreak-b-explode-lod0-mg"],[5,"snow-icebreak-b-explode-idle-ja"]],"snow-icebreak-c-ag":[[0,"snow-icebreak-c-lod0-jg"],[1,"snow-icebreak-c-lod0-mg"],[2,"snow-icebreak-c-idle-ja"],[3,"snow-icebreak-c-explode-lod0-jg"],[4,"snow-icebreak-c-explode-lod0-mg"],[5,"snow-icebreak-c-explode-idle-ja"]],"spar-lighthouse-light-ag":[[0,"spar-lighthouse-light-lod0-jg"],[1,"spar-lighthouse-light-lod0-mg"],[2,"spar-lighthouse-light-idle-ja"]],"split-screen-ag":[[0,"split-screen-lod0-jg"],[1,"split-screen-lod0-mg"],[2,"split-screen-idle-ja"],[3,"split-screen-entera-ja"],[4,"split-screen-enterb-ja"],[5,"split-screen-exita-ja"],[6,"split-screen-exitb-ja"]],"start-banner-ag":[[0,"start-banner-lod0-jg"],[1,"start-banner-lod0-mg"],[2,"start-banner-idle-ja"]],"start-light-ag":[[0,"start-light-lod0-jg"],[1,"start-light-lod0-mg"],[2,"start-light-idle-ja"]],"starting-linebot-ag":[[0,"starting-linebot-lod0-jg"],[1,"starting-linebot-lod0-mg"],[2,"starting-linebot-idle-ja"]],"tha-hr-cred-ag":[[0,"tha-hr-cred-lod0-jg"],[1,"tha-hr-cred-lod0-mg"],[2,"tha-hr-cred-shadow-mg"],[3,"tha-hr-cred-turntable-ja"]],"thb-hr-cred-ag":[[0,"thb-hr-cred-lod0-jg"],[1,"thb-hr-cred-lod0-mg"],[2,"thb-hr-cred-shadow-mg"],[3,"thb-hr-cred-turntable-ja"]],"thc-hr-cred-ag":[[0,"thc-hr-cred-lod0-jg"],[1,"thc-hr-cred-lod0-mg"],[2,"thc-hr-cred-shadow-mg"],[3,"thc-hr-cred-turntable-ja"]],"this-way-ag":[[0,"this-way-arrow-lod0-jg"],[1,"this-way-arrow-lod0-mg"],[2,"this-way-arrow-idle-ja"]],"this-way-b-ag":[[0,"this-way-b-lod0-jg"],[1,"this-way-b-lod0-mg"],[2,"this-way-b-idle-ja"]],"time-freeze-ag":[[0,"time-freeze-time-freeze-cage-lod0-jg"],[1,"time-freeze-time-freeze-cage-lod0-mg"],[2,"time-freeze-time-freeze-cage-idle-ja"],[3,"time-freeze-time-freeze-short-lod0-jg"],[4,"time-freeze-time-freeze-short-lod0-mg"],[5,"time-freeze-time-freeze-short-idle-ja"],[6,"time-freeze-time-freeze-med-lod0-jg"],[7,"time-freeze-time-freeze-med-lod0-mg"],[8,"time-freeze-time-freeze-med-idle-ja"],[9,"time-freeze-time-freeze-long-lod0-jg"],[10,"time-freeze-time-freeze-long-lod0-mg"],[11,"time-freeze-time-freeze-long-idle-ja"]],"time-freeze-debris-ag":[[0,"time-freeze-debris-a-lod0-jg"],[1,"time-freeze-debris-a-lod0-mg"],[2,"time-freeze-debris-b-lod0-jg"],[3,"time-freeze-debris-b-lod0-mg"],[4,"time-freeze-debris-c-lod0-jg"],[5,"time-freeze-debris-c-lod0-mg"],[6,"time-freeze-debris-d-lod0-jg"],[7,"time-freeze-debris-d-lod0-mg"],[8,"time-freeze-debris-long-a-lod0-jg"],[9,"time-freeze-debris-long-a-lod0-mg"],[10,"time-freeze-debris-long-circle-lod0-jg"],[11,"time-freeze-debris-long-circle-lod0-mg"],[12,"time-freeze-debris-med-a-lod0-jg"],[13,"time-freeze-debris-med-a-lod0-mg"],[14,"time-freeze-debris-med-circle-lod0-jg"],[15,"time-freeze-debris-med-circle-lod0-mg"],[16,"time-freeze-debris-short-a-lod0-jg"],[17,"time-freeze-debris-short-a-lod0-mg"],[18,"time-freeze-debris-short-circle-lod0-jg"],[19,"time-freeze-debris-short-circle-lod0-mg"]],"top-bar-ag":[[0,"top-bar-lod0-jg"],[1,"top-bar-lod0-mg"],[2,"top-bar-idle-ja"],[3,"top-bar-entera-ja"],[4,"top-bar-enterb-ja"],[5,"top-bar-exita-ja"],[6,"top-bar-exitb-ja"]],"tor-hr-cred-ag":[[0,"tor-hr-cred-lod0-jg"],[1,"tor-hr-cred-lod0-mg"],[2,"tor-hr-cred-shadow-mg"],[3,"tor-hr-cred-turntable-ja"]],"train-ag":[[0,"train-loco-lod0-jg"],[1,"train-loco-lod0-mg"],[2,"train-loco-idle-ja"],[3,"train-car-lod0-jg"],[4,"train-car-lod0-mg"],[5,"train-car-idle-ja"],[6,"train-car-b-lod0-jg"],[7,"train-car-b-lod0-mg"],[8,"train-car-b-idle-ja"],[9,"train-car-c-lod0-jg"],[10,"train-car-c-lod0-mg"],[11,"train-car-c-idle-ja"]],"training-marker-ag":[[0,"training-marker-lod0-jg"],[1,"training-marker-lod0-mg"],[2,"training-marker-idle-ja"]],"training-wall-ag":[[0,"training-wall-lod0-jg"],[1,"training-wall-lod0-mg"],[2,"training-wall-idle-ja"]],"tune-meter-bar-ag":[[0,"tune-meter-bar-lod0-jg"],[1,"tune-meter-bar-lod0-mg"],[2,"tune-meter-bar-idle-ja"],[3,"tune-meter-bar-entera-ja"],[4,"tune-meter-bar-exita-ja"]],"tune-type-bar-ag":[[0,"tune-type-bar-lod0-jg"],[1,"tune-type-bar-lod0-mg"],[2,"tune-type-bar-idle-ja"],[3,"tune-type-bar-entera-ja"],[4,"tune-type-bar-exita-ja"]],"ur8-hr-cred-ag":[[0,"ur8-hr-cred-lod0-jg"],[1,"ur8-hr-cred-lod0-mg"],[2,"ur8-hr-cred-shadow-mg"],[3,"ur8-hr-cred-turntable-ja"]],"vehicle-explosion-ag":[[0,"vehicle-explosion-lod0-jg"],[1,"vehicle-explosion-lod0-mg"],[2,"vehicle-explosion-idle-ja"]],"weapon-drone-ag":[[0,"weapon-drone-lod0-jg"],[1,"weapon-drone-lod0-mg"],[2,"weapon-drone-idle-ja"]],"wind-rotor-ag":[[0,"wind-rotor-lod0-jg"],[1,"wind-rotor-lod0-mg"],[2,"wind-rotor-spin-ja"]],"wm-docks-crane-ag":[[0,"wm-docks-crane-lod0-jg"],[1,"wm-docks-crane-lod0-mg"],[2,"wm-docks-crane-idle-ja"]],"wm-drome-wind-machine-ag":[[0,"wm-drome-wind-machine-lod0-jg"],[1,"wm-drome-wind-machine-lod0-mg"],[2,"wm-drome-wind-machine-idle-ja"]],"wm-fireworks-ship-ag":[[0,"wm-fireworks-ship-lod0-jg"],[1,"wm-fireworks-ship-lod0-mg"],[2,"wm-fireworks-ship-idle-ja"]],"wm-kras-circular-tower-ag":[[0,"wm-kras-circular-tower-lod0-jg"],[1,"wm-kras-circular-tower-lod0-mg"],[2,"wm-kras-circular-tower-idle-ja"]],"wm-track-car-ag":[[0,"wm-track-car-lod0-jg"],[1,"wm-track-car-lod0-mg"],[2,"wm-track-car-idle-ja"]],"world-map-atoll-mesh-ag":[[0,"world-map-atoll-mesh-lod0-jg"],[1,"world-map-atoll-mesh-lod0-mg"],[2,"world-map-atoll-mesh-idle-ja"]],"world-map-canspar-mesh-ag":[[0,"world-map-canspar-mesh-lod0-jg"],[1,"world-map-canspar-mesh-lod0-mg"],[2,"world-map-canspar-mesh-shadow-mg"],[3,"world-map-canspar-mesh-idle-ja"]],"world-map-canyon-mesh-ag":[[0,"world-map-canyon-mesh-lod0-jg"],[1,"world-map-canyon-mesh-lod0-mg"],[2,"world-map-canyon-mesh-shadow-mg"],[3,"world-map-canyon-mesh-idle-ja"]],"world-map-cliffs-mesh-ag":[[0,"world-map-cliffs-mesh-lod0-jg"],[1,"world-map-cliffs-mesh-lod0-mg"],[2,"world-map-cliffs-mesh-idle-ja"]],"world-map-coliseum-mesh-ag":[[0,"world-map-coliseum-mesh-lod0-jg"],[1,"world-map-coliseum-mesh-lod0-mg"],[2,"world-map-coliseum-mesh-idle-ja"]],"world-map-desarena-mesh-ag":[[0,"world-map-desarena-mesh-lod0-jg"],[1,"world-map-desarena-mesh-lod0-mg"],[2,"world-map-desarena-mesh-idle-ja"]],"world-map-desisle-mesh-ag":[[0,"world-map-desisle-mesh-lod0-jg"],[1,"world-map-desisle-mesh-lod0-mg"],[2,"world-map-desisle-mesh-idle-ja"]],"world-map-dockkra-mesh-ag":[[0,"world-map-dockkra-mesh-lod0-jg"],[1,"world-map-dockkra-mesh-lod0-mg"],[2,"world-map-dockkra-mesh-shadow-mg"],[3,"world-map-dockkra-mesh-idle-ja"]],"world-map-docks-mesh-ag":[[0,"world-map-docks-mesh-lod0-jg"],[1,"world-map-docks-mesh-lod0-mg"],[2,"world-map-docks-mesh-shadow-mg"],[3,"world-map-docks-mesh-idle-ja"]],"world-map-drome-mesh-ag":[[0,"world-map-drome-mesh-lod0-jg"],[1,"world-map-drome-mesh-lod0-mg"],[2,"world-map-drome-mesh-shadow-mg"],[3,"world-map-drome-mesh-idle-ja"]],"world-map-dromedoc-mesh-ag":[[0,"world-map-dromedoc-mesh-lod0-jg"],[1,"world-map-dromedoc-mesh-lod0-mg"],[2,"world-map-dromedoc-mesh-shadow-mg"],[3,"world-map-dromedoc-mesh-idle-ja"]],"world-map-fort-mesh-ag":[[0,"world-map-fort-mesh-lod0-jg"],[1,"world-map-fort-mesh-lod0-mg"],[2,"world-map-fort-mesh-idle-ja"]],"world-map-hav-tour-mesh-ag":[[0,"world-map-hav-tour-mesh-lod0-jg"],[1,"world-map-hav-tour-mesh-lod0-mg"],[2,"world-map-hav-tour-mesh-idle-ja"]],"world-map-haven-mesh-ag":[[0,"world-map-haven-mesh-lod0-jg"],[1,"world-map-haven-mesh-lod0-mg"],[2,"world-map-haven-mesh-shadow-mg"],[3,"world-map-haven-mesh-idle-ja"]],"world-map-havenarena-mesh-ag":[[0,"world-map-havenarena-mesh-lod0-jg"],[1,"world-map-havenarena-mesh-lod0-mg"],[2,"world-map-havenarena-mesh-idle-ja"]],"world-map-havjung-mesh-ag":[[0,"world-map-havjung-mesh-lod0-jg"],[1,"world-map-havjung-mesh-lod0-mg"],[2,"world-map-havjung-mesh-shadow-mg"],[3,"world-map-havjung-mesh-idle-ja"]],"world-map-havsew-mesh-ag":[[0,"world-map-havsew-mesh-lod0-jg"],[1,"world-map-havsew-mesh-lod0-mg"],[2,"world-map-havsew-mesh-shadow-mg"],[3,"world-map-havsew-mesh-idle-ja"]],"world-map-ice-mesh-ag":[[0,"world-map-ice-mesh-lod0-jg"],[1,"world-map-ice-mesh-lod0-mg"],[2,"world-map-ice-mesh-shadow-mg"],[3,"world-map-ice-mesh-idle-ja"]],"world-map-ice-tour-mesh-ag":[[0,"world-map-ice-tour-mesh-lod0-jg"],[1,"world-map-ice-tour-mesh-lod0-mg"],[2,"world-map-ice-tour-mesh-idle-ja"]],"world-map-iceberg-mesh-ag":[[0,"world-map-iceberg-mesh-lod0-jg"],[1,"world-map-iceberg-mesh-lod0-mg"],[2,"world-map-iceberg-mesh-shadow-mg"],[3,"world-map-iceberg-mesh-idle-ja"]],"world-map-icepass-mesh-ag":[[0,"world-map-icepass-mesh-lod0-jg"],[1,"world-map-icepass-mesh-lod0-mg"],[2,"world-map-icepass-mesh-shadow-mg"],[3,"world-map-icepass-mesh-idle-ja"]],"world-map-jungle-mesh-ag":[[0,"world-map-jungle-mesh-lod0-jg"],[1,"world-map-jungle-mesh-lod0-mg"],[2,"world-map-jungle-mesh-shadow-mg"],[3,"world-map-jungle-mesh-idle-ja"]],"world-map-kcross-mesh-ag":[[0,"world-map-kcross-mesh-lod0-jg"],[1,"world-map-kcross-mesh-lod0-mg"],[2,"world-map-kcross-mesh-idle-ja"]],"world-map-kras-mesh-ag":[[0,"world-map-kras-mesh-lod0-jg"],[1,"world-map-kras-mesh-lod0-mg"],[2,"world-map-kras-mesh-shadow-mg"],[3,"world-map-kras-mesh-idle-ja"]],"world-map-kras-tour-mesh-ag":[[0,"world-map-kras-tour-mesh-lod0-jg"],[1,"world-map-kras-tour-mesh-lod0-mg"],[2,"world-map-kras-tour-mesh-idle-ja"]],"world-map-peak-mesh-ag":[[0,"world-map-peak-mesh-lod0-jg"],[1,"world-map-peak-mesh-lod0-mg"],[2,"world-map-peak-mesh-shadow-mg"],[3,"world-map-peak-mesh-idle-ja"]],"world-map-sewer-mesh-ag":[[0,"world-map-sewer-mesh-lod0-jg"],[1,"world-map-sewer-mesh-lod0-mg"],[2,"world-map-sewer-mesh-shadow-mg"],[3,"world-map-sewer-mesh-idle-ja"]],"world-map-snow-mesh-ag":[[0,"world-map-snow-mesh-lod0-jg"],[1,"world-map-snow-mesh-lod0-mg"],[2,"world-map-snow-mesh-shadow-mg"],[3,"world-map-snow-mesh-idle-ja"]],"world-map-snowbowl-mesh-ag":[[0,"world-map-snowbowl-mesh-lod0-jg"],[1,"world-map-snowbowl-mesh-lod0-mg"],[2,"world-map-snowbowl-mesh-idle-ja"]],"world-map-spar-tour-mesh-ag":[[0,"world-map-spar-tour-mesh-lod0-jg"],[1,"world-map-spar-tour-mesh-lod0-mg"],[2,"world-map-spar-tour-mesh-idle-ja"]],"world-map-spargus-mesh-ag":[[0,"world-map-spargus-mesh-lod0-jg"],[1,"world-map-spargus-mesh-lod0-mg"],[2,"world-map-spargus-mesh-shadow-mg"],[3,"world-map-spargus-mesh-idle-ja"]],"world-map-spartem-mesh-ag":[[0,"world-map-spartem-mesh-lod0-jg"],[1,"world-map-spartem-mesh-lod0-mg"],[2,"world-map-spartem-mesh-shadow-mg"],[3,"world-map-spartem-mesh-idle-ja"]],"world-map-temple-mesh-ag":[[0,"world-map-temple-mesh-lod0-jg"],[1,"world-map-temple-mesh-lod0-mg"],[2,"world-map-temple-mesh-shadow-mg"],[3,"world-map-temple-mesh-idle-ja"]],"wrong-way-ag":[[0,"wrong-way-lod0-jg"],[1,"wrong-way-lod0-mg"],[2,"wrong-way-idle-ja"]]} diff --git a/decompiler/config/jakx/ntsc_v1/art_info.jsonc b/decompiler/config/jakx/ntsc_v1/art_info.jsonc new file mode 100644 index 0000000000..32f3a14856 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/art_info.jsonc @@ -0,0 +1,55 @@ +{ + ////////////////////// + // ART INFO + ////////////////////// + + // defines what art group each file or function is using. + // by default, the decompiler assumes this to be the name of the current type + -ag + // so you only need to specify it when that's not the case. + + // remap names for states and behaviors of these types + "type_remap": { + // "target": "jakb-ag", + // "sidekick": "daxter-ag", + // "wings": "jakb-ag", + // "lightjak-shield": "jakb-ag", + // "freeze-screen": "collectables-ag", + // "red-3-sphere": "gun-ag", + // "gun-dark-3-sphere": "gun-ag", + // "marauder": "marauder-male-ag", + // "glider-ring": "des-glider-ring-ag", + // "flut-racer": "flut-wild-ag", + // "was-pre-heart": "neo-satellite-heart-ag", + // "was-pre-beam": "neo-satellite-game-ring-ag", + // "was-pre-bubble": "neo-satellite-ps-symbols-ag", + // "maker": "dm-robot-ag", + // "mh-wasp": "neo-wasp-ag", + // "factory-boss": "errol-lowres-ag", + // "fac-robotank-turret": "fac-robotank-ag", + // "neo-sat-shield": "neo-satellite-shield-ag", + // "neo-sat": "neo-satellite-ag", + // "power-game-switcher": "switcher-ag", + // "power-game-player": "daxter-pac-man-ag", + // "power-game-glyph": "cipher-ag", + // "power-game-rings": "pow-rings-ag", + // "power-game-chaser": "flitter-ag", + // "power-game-zapper": "grunt-head-ag", + // "gungame-door": "fort-entry-gate-ag", + // "bt-mh-flyer": "bt-wasp-ag", + // "gunship-exploder": "kg-robot-transport-break", + // "gunship-engine": "kg-robot-transport-bomb", + // "protect-gunship": "kg-robot-transport", + // "gunship-missile": "cty-homing-missile" + }, + + // remap names for types in an entire file (higher priority) + "file_override": { + // "target-indax": { "target": "daxter-ag" } // in target-indax.gc, the remap for 'target' will be set to 'daxter-ag' + }, + + // some art groups (like robotboss-ag) have a name for their model that differs + // from the usual ag-name + "-lod0". you can add those exceptions here. + "joint_node_hacks": { + // "robotboss-ag": "robotboss-basic" + } +} diff --git a/decompiler/config/jakx/ntsc_v1/hacks.jsonc b/decompiler/config/jakx/ntsc_v1/hacks.jsonc new file mode 100644 index 0000000000..211b1757ee --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/hacks.jsonc @@ -0,0 +1,76 @@ +{ + //////////////////////////// + // HACKS and ASM FUNCTIONS + //////////////////////////// + + "types_with_bad_inspect_methods": [ + // "game-task-event" + ], + + "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": [ + // ["(method 20 res-lump)", "b0", 2], + ], + + // if a cond with an else case is being used a value in a place where it looks wrong + // you can add the function name to this list and it will more aggressively reject this rewrite. + "aggressively_reject_cond_to_value_rewrite": [ + // "(method 10 res-lump)", + ], + + // 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": [ + // "name=", + ], + + // these functions use pairs and the decompiler + // will be less picky about types related to pairs. + "pair_functions_by_name": [ + // "ref", + ], + + // 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": { + // "~170h~5d~220h~5d~280h~5,,2f": 3, + }, + + "blocks_ending_in_asm_branch": { + // "light-merge!": [1, 2, 3, 5, 7], + }, + + // 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": { + // "auto-save-post": [[182, 1]], + }, + + "mips2c_functions_by_name": [ + // "collide-do-primitives", + ], + + "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": [ + // ["wasintro", 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. + // this just suppresses a message. + "expected_merged_objs": [] +} diff --git a/decompiler/config/jakx/ntsc_v1/import_deps.jsonc b/decompiler/config/jakx/ntsc_v1/import_deps.jsonc new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/import_deps.jsonc @@ -0,0 +1 @@ +{} diff --git a/decompiler/config/jakx/ntsc_v1/inputs.jsonc b/decompiler/config/jakx/ntsc_v1/inputs.jsonc new file mode 100644 index 0000000000..e63b199199 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/inputs.jsonc @@ -0,0 +1,428 @@ +{ + ////////////////////// + // INPUT FILES + ////////////////////// + + // input is GOAL object files, possibly in containers. + // most objects are part of CGO/DGO files (both go in dgo_names). This includes levels and the engine + // the DGOs will be processed in this order. Usually it's best to have KERNEL, ENGINE, then the levels when + // you want to run on the entire game. + "dgo_names": [ + // engine files + "CGO/ART.CGO", + "CGO/COMMON.CGO", + "CGO/ENGINE.CGO", + "CGO/KERNEL.CGO", + "CGO/GAME.CGO" + // "DGO/ASHCRED.DGO", + // "DGO/ASHLEV.DGO", + // "DGO/ASHVL.DGO", + // "DGO/ASHVL2.DGO", + // "DGO/ASHVL3.DGO", + // "DGO/ATL.DGO", + // "DGO/ATOLLART.DGO", + // "DGO/ATOLLCTF.DGO", + // "DGO/ATOLLS.DGO", + // "DGO/ATOPLOW.DGO", + // "DGO/ATX.DGO", + // "DGO/BEARL.DGO", + // "DGO/BOBCL.DGO", + // "DGO/BRDROOM.DGO", + // "DGO/BRDROOMF.DGO", + // "DGO/CANFOOT.DGO", + // "DGO/CANSPARS.DGO", + // "DGO/CANSPARW.DGO", + // "DGO/CANTBOX.DGO", + // "DGO/CANYONS.DGO", + // "DGO/CANYONTT.DGO", + // "DGO/CANYONW.DGO", + // "DGO/CARS.DGO", + // "DGO/CHEEL.DGO", + // "DGO/CLF.DGO", + // "DGO/CLFX.DGO", + // "DGO/CLIFCTF.DGO", + // "DGO/CLIFFART.DGO", + // "DGO/CLIFFSS.DGO", + // "DGO/CLIFHUNT.DGO", + // "DGO/CLIFTRN.DGO", + // "DGO/CNSPFOOT.DGO", + // "DGO/CNSPTBOX.DGO", + // "DGO/CNSPTT.DGO", + // "DGO/COL.DGO", + // "DGO/COLART.DGO", + // "DGO/COLICLCT.DGO", + // "DGO/COLICTF.DGO", + // "DGO/COLIREV.DGO", + // "DGO/COLISEUS.DGO", + // "DGO/COLX.DGO", + // "DGO/COUGL.DGO", + // "DGO/CREDITS.DGO", + // "DGO/CSX.DGO", + // "DGO/CSY.DGO", + // "DGO/CYA.DGO", + // "DGO/CYB.DGO", + // "DGO/CYC.DGO", + // "DGO/CYD.DGO", + // "DGO/CYE.DGO", + // "DGO/CYX.DGO", + // "DGO/CYY.DGO", + // "DGO/DAXCRED.DGO", + // "DGO/DAXLEV.DGO", + // "DGO/DAXTL.DGO", + // "DGO/DESACTF.DGO", + // "DGO/DESARENS.DGO", + // "DGO/DESART.DGO", + // "DGO/DESCLCT.DGO", + // "DGO/DESHUNT.DGO", + // "DGO/DESHUNT2.DGO", + // "DGO/DESISLES.DGO", + // "DGO/DESRAPT.DGO", + // "DGO/DESREV.DGO", + // "DGO/DETHRACE.DGO", + // "DGO/DISLEART.DGO", + // "DGO/DISLECTF.DGO", + // "DGO/DKA.DGO", + // "DGO/DKB.DGO", + // "DGO/DKC.DGO", + // "DGO/DKD.DGO", + // "DGO/DKE.DGO", + // "DGO/DKKRFOOT.DGO", + // "DGO/DKKRTBOX.DGO", + // "DGO/DKKRTT.DGO", + // "DGO/DKKX.DGO", + // "DGO/DKKY.DGO", + // "DGO/DKX.DGO", + // "DGO/DOCKFOOT.DGO", + // "DGO/DOCKKRAS.DGO", + // "DGO/DOCKKRAW.DGO", + // "DGO/DOCKSS.DGO", + // "DGO/DOCKSTT.DGO", + // "DGO/DOCKSW.DGO", + // "DGO/DOCKTBOX.DGO", + // "DGO/DRA.DGO", + // "DGO/DRB.DGO", + // "DGO/DRC.DGO", + // "DGO/DRD.DGO", + // "DGO/DRDKFOOT.DGO", + // "DGO/DRDKTBOX.DGO", + // "DGO/DRDKTT.DGO", + // "DGO/DRDX.DGO", + // "DGO/DRDY.DGO", + // "DGO/DROMDOCS.DGO", + // "DGO/DROMDOCW.DGO", + // "DGO/DROMES.DGO", + // "DGO/DROMETT.DGO", + // "DGO/DROMEW.DGO", + // "DGO/DROMEX.DGO", + // "DGO/DROMFOOT.DGO", + // "DGO/DROMTBOX.DGO", + // "DGO/DRONE.DGO", + // "DGO/DRX.DGO", + // "DGO/DRY.DGO", + // "DGO/DSI.DGO", + // "DGO/DSR.DGO", + // "DGO/DSRX.DGO", + // "DGO/DSX.DGO", + // "DGO/EIGHT.DGO", + // "DGO/EIGHTB.DGO", + // "DGO/FALCL.DGO", + // "DGO/FMVLEV.DGO", + // "DGO/FOXL.DGO", + // "DGO/GARAGE.DGO", + // "DGO/GARAGEB.DGO", + // "DGO/GILAL.DGO", + // "DGO/GTBCRED.DGO", + // "DGO/GTBLEV.DGO", + // "DGO/GTBVL.DGO", + // "DGO/HAVENS.DGO", + // "DGO/HAVENW.DGO", + // "DGO/HAVJUNGS.DGO", + // "DGO/HAVJUNGW.DGO", + // "DGO/HAVNFOOT.DGO", + // "DGO/HAVNTBOX.DGO", + // "DGO/HAVSEWS.DGO", + // "DGO/HAVSEWW.DGO", + // "DGO/HAVTFOOT.DGO", + // "DGO/HAVTOURS.DGO", + // "DGO/HAVTOURW.DGO", + // "DGO/HAVTT.DGO", + // "DGO/HAVTTBOX.DGO", + // "DGO/HJNGFOOT.DGO", + // "DGO/HJX.DGO", + // "DGO/HJY.DGO", + // "DGO/HSX.DGO", + // "DGO/HSY.DGO", + // "DGO/HVA.DGO", + // "DGO/HVB.DGO", + // "DGO/HVC.DGO", + // "DGO/HVD.DGO", + // "DGO/HVE.DGO", + // "DGO/HVJGTBOX.DGO", + // "DGO/HVJGTT.DGO", + // "DGO/HVSWFOOT.DGO", + // "DGO/HVSWTBOX.DGO", + // "DGO/HVSWTT.DGO", + // "DGO/HVTRTT.DGO", + // "DGO/HVX.DGO", + // "DGO/HVY.DGO", + // "DGO/IBX.DGO", + // "DGO/IBY.DGO", + // "DGO/ICA.DGO", + // "DGO/ICB.DGO", + // "DGO/ICBGTT.DGO", + // "DGO/ICC.DGO", + // "DGO/ICD.DGO", + // "DGO/ICEBERGS.DGO", + // "DGO/ICEBERGW.DGO", + // "DGO/ICEBFOOT.DGO", + // "DGO/ICEBTBOX.DGO", + // "DGO/ICEFOOT.DGO", + // "DGO/ICEPASSS.DGO", + // "DGO/ICEPASSW.DGO", + // "DGO/ICEPFOOT.DGO", + // "DGO/ICEPTBOX.DGO", + // "DGO/ICES.DGO", + // "DGO/ICETBOX.DGO", + // "DGO/ICETFOOT.DGO", + // "DGO/ICETOURS.DGO", + // "DGO/ICETOURW.DGO", + // "DGO/ICETRN.DGO", + // "DGO/ICETT.DGO", + // "DGO/ICETTBOX.DGO", + // "DGO/ICEW.DGO", + // "DGO/ICPSTT.DGO", + // "DGO/ICTRTT.DGO", + // "DGO/ICX.DGO", + // "DGO/ICY.DGO", + // "DGO/IPX.DGO", + // "DGO/IPY.DGO", + // "DGO/JAKCRED.DGO", + // "DGO/JAKLEV.DGO", + // "DGO/JAKVL.DGO", + // "DGO/JGA.DGO", + // "DGO/JGB.DGO", + // "DGO/JGC.DGO", + // "DGO/JGD.DGO", + // "DGO/JGE.DGO", + // "DGO/JGF.DGO", + // "DGO/JGG.DGO", + // "DGO/JGX.DGO", + // "DGO/JGY.DGO", + // "DGO/JKALEV.DGO", + // "DGO/JKBLEV.DGO", + // "DGO/JKCLEV.DGO", + // "DGO/JUNGFOOT.DGO", + // "DGO/JUNGLES.DGO", + // "DGO/JUNGLETT.DGO", + // "DGO/JUNGLEW.DGO", + // "DGO/JUNGTBOX.DGO", + // "DGO/JUNGTRN.DGO", + // "DGO/KAELEV.DGO", + // "DGO/KCR.DGO", + // "DGO/KCROSART.DGO", + // "DGO/KCROSCTF.DGO", + // "DGO/KCROSSS.DGO", + // "DGO/KCRSCLCT.DGO", + // "DGO/KCRSPLOW.DGO", + // "DGO/KCRX.DGO", + // "DGO/KEICRED.DGO", + // "DGO/KIELEV.DGO", + // "DGO/KIEVL.DGO", + // "DGO/KLECRED.DGO", + // "DGO/KLELEV.DGO", + // "DGO/KLEVL.DGO", + // "DGO/KLEVL2.DGO", + // "DGO/KRA.DGO", + // "DGO/KRASFOOT.DGO", + // "DGO/KRASS.DGO", + // "DGO/KRASTBOX.DGO", + // "DGO/KRASTRN.DGO", + // "DGO/KRASTT.DGO", + // "DGO/KRASW.DGO", + // "DGO/KRATFOOT.DGO", + // "DGO/KRATOURS.DGO", + // "DGO/KRATOURW.DGO", + // "DGO/KRATTBOX.DGO", + // "DGO/KRB.DGO", + // "DGO/KRC.DGO", + // "DGO/KRTRTT.DGO", + // "DGO/KRX.DGO", + // "DGO/KRY.DGO", + // "DGO/LEOPL.DGO", + // "DGO/MENU2.DGO", + // "DGO/MENUMAP.DGO", + // "DGO/MONGL.DGO", + // "DGO/OSMLEV.DGO", + // "DGO/PANTL.DGO", + // "DGO/PEAKFOOT.DGO", + // "DGO/PEAKS.DGO", + // "DGO/PEAKTBOX.DGO", + // "DGO/PEAKTT.DGO", + // "DGO/PEAKW.DGO", + // "DGO/PECCRED.DGO", + // "DGO/PECLEV.DGO", + // "DGO/PECVL.DGO", + // "DGO/PKA.DGO", + // "DGO/PKB.DGO", + // "DGO/PKC.DGO", + // "DGO/PKD.DGO", + // "DGO/PKE.DGO", + // "DGO/PKX.DGO", + // "DGO/POSSL.DGO", + // "DGO/RACEWEAP.DGO", + // "DGO/RATLEV.DGO", + // "DGO/RAYCRED.DGO", + // "DGO/RAYLEV.DGO", + // "DGO/RAYVL.DGO", + // "DGO/RAYVL2.DGO", + // "DGO/RAZCRED.DGO", + // "DGO/RAZLEV.DGO", + // "DGO/RAZVL.DGO", + // "DGO/RTH.DGO", + // "DGO/RUSTYH.DGO", + // "DGO/S2A.DGO", + // "DGO/S3A.DGO", + // "DGO/SBWLCTF.DGO", + // "DGO/SEWERS.DGO", + // "DGO/SEWERTT.DGO", + // "DGO/SEWERW.DGO", + // "DGO/SEWFOOT.DGO", + // "DGO/SEWTBOX.DGO", + // "DGO/SIGCRED.DGO", + // "DGO/SIGLEV.DGO", + // "DGO/SIGVL.DGO", + // "DGO/SIGVL2.DGO", + // "DGO/SIGVL3.DGO", + // "DGO/SNAKL.DGO", + // "DGO/SNO.DGO", + // "DGO/SNOBART.DGO", + // "DGO/SNOBOWLS.DGO", + // "DGO/SNOWFOOT.DGO", + // "DGO/SNOWS.DGO", + // "DGO/SNOWTBOX.DGO", + // "DGO/SNOWTRN2.DGO", + // "DGO/SNOWTT.DGO", + // "DGO/SNOX.DGO", + // "DGO/SNW.DGO", + // "DGO/SNWX.DGO", + // "DGO/SPA.DGO", + // "DGO/SPARFOOT.DGO", + // "DGO/SPARGUSS.DGO", + // "DGO/SPARGUSW.DGO", + // "DGO/SPARTEMS.DGO", + // "DGO/SPARTEMW.DGO", + // "DGO/SPARTT.DGO", + // "DGO/SPATFOOT.DGO", + // "DGO/SPATOURS.DGO", + // "DGO/SPATOURW.DGO", + // "DGO/SPATTBOX.DGO", + // "DGO/SPB.DGO", + // "DGO/SPC.DGO", + // "DGO/SPD.DGO", + // "DGO/SPE.DGO", + // "DGO/SPRGSTBX.DGO", + // "DGO/SPTMFOOT.DGO", + // "DGO/SPTMTBOX.DGO", + // "DGO/SPTMTT.DGO", + // "DGO/SPTRTT.DGO", + // "DGO/SPX.DGO", + // "DGO/SPY.DGO", + // "DGO/STX.DGO", + // "DGO/STY.DGO", + // "DGO/SWA.DGO", + // "DGO/SWB.DGO", + // "DGO/SWC.DGO", + // "DGO/SWD.DGO", + // "DGO/SWE.DGO", + // "DGO/SWF.DGO", + // "DGO/SWX.DGO", + // "DGO/TARLEV.DGO", + // "DGO/TEMPFOOT.DGO", + // "DGO/TEMPLES.DGO", + // "DGO/TEMPLETT.DGO", + // "DGO/TEMPLEW.DGO", + // "DGO/TEMPTBOX.DGO", + // "DGO/THACRED.DGO", + // "DGO/THALEV.DGO", + // "DGO/THAVL.DGO", + // "DGO/THAVL2.DGO", + // "DGO/THAVL3.DGO", + // "DGO/THBCRED.DGO", + // "DGO/THBLEV.DGO", + // "DGO/THBVL.DGO", + // "DGO/THBVL2.DGO", + // "DGO/THBVL3.DGO", + // "DGO/THCCRED.DGO", + // "DGO/THCLEV.DGO", + // "DGO/THCVL.DGO", + // "DGO/THCVL2.DGO", + // "DGO/THCVL3.DGO", + // "DGO/TIGEL.DGO", + // "DGO/TOADL.DGO", + // "DGO/TORCRED.DGO", + // "DGO/TORLEV.DGO", + // "DGO/TORVL.DGO", + // "DGO/TORVL2.DGO", + // "DGO/TORVL3.DGO", + // "DGO/TPA.DGO", + // "DGO/TPB.DGO", + // "DGO/TPC.DGO", + // "DGO/TPD.DGO", + // "DGO/TPE.DGO", + // "DGO/TPX.DGO", + // "DGO/TPY.DGO", + // "DGO/TURTL.DGO", + // "DGO/UR8CRED.DGO", + // "DGO/UR8LEV.DGO", + // "DGO/UR8VL.DGO", + // "DGO/UR8VL2.DGO", + // "DGO/UR8VL3.DGO", + // "DGO/WOLFL.DGO", + // "DGO/WOMBL.DGO", + // "DGO/XIMLEV.DGO" + ], + + "levels_to_extract": [], + + // some objects are part of STR files (streaming data). + "str_file_names": [], + + // streaming "art" that should be added to GAME.FR3. + "str_art_file_names": [], + + "object_file_names": [ + "TEXT/0COMMON.TXT", + "TEXT/0SUBTIT.TXT", + "TEXT/1COMMON.TXT", + "TEXT/1SUBTIT.TXT", + "TEXT/2COMMON.TXT", + "TEXT/2SUBTIT.TXT", + "TEXT/3COMMON.TXT", + "TEXT/3SUBTIT.TXT", + "TEXT/4COMMON.TXT", + "TEXT/4SUBTIT.TXT", + "TEXT/5COMMON.TXT", + "TEXT/5SUBTIT.TXT", + "TEXT/6COMMON.TXT", + "TEXT/6SUBTIT.TXT", + "TEXT/7COMMON.TXT", + "TEXT/7SUBTIT.TXT", + "TEXT/8COMMON.TXT", + "TEXT/8SUBTIT.TXT", + "TEXT/9COMMON.TXT", + "TEXT/9SUBTIT.TXT", + "TEXT/10COMMON.TXT", + "TEXT/10SUBTIT.TXT", + "TEXT/11COMMON.TXT", + "TEXT/11SUBTIT.TXT" + ], + + "streamed_audio_file_names": [ + "VAGWAD.ENG", + "VAGWAD.FRE", + "VAGWAD.GER", + "VAGWAD.SPA", + "VAGWAD.ITA", + "VAGWAD.INT" + ] +} diff --git a/decompiler/config/jakx/ntsc_v1/joint-node-info.min.json b/decompiler/config/jakx/ntsc_v1/joint-node-info.min.json new file mode 100644 index 0000000000..670f9fe6cc --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/joint-node-info.min.json @@ -0,0 +1 @@ +{"adv-event-panel-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"select_screen"],[6,"selectscreentype"],[7,"topleft"],[8,"bottomright"]],"antenna-all-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"flag_a"],[4,"flag_b"],[5,"flag_c"],[6,"flag_d"],[7,"tail_a"],[8,"tail_b"]],"ash-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lear_A"],[9,"Rear_A"],[10,"Lshoulder"],[11,"Lelbow"],[12,"Lhand"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"hips"],[17,"Lthigh"],[18,"Lknee"],[19,"Lankle"],[20,"Rthigh"],[21,"Rknee"],[22,"Rankle"],[23,"Lear_B"],[24,"Lear_C"],[25,"Rear_B"],[26,"Rear_C"],[27,"hairR1_A"],[28,"hairR1_B"],[29,"hairR1_C"],[30,"hairR2_A"],[31,"hairR2_B"],[32,"hairR2_C"],[33,"hairL1_A"],[34,"hairL1_B"],[35,"hairL1_C"],[36,"hairL2_A"],[37,"hairL2_B"],[38,"hairL2_C"],[39,"hairM_A1"],[40,"hairM_B"],[41,"hairM_C"],[42,"LthumbA"],[43,"LthumbB"],[44,"LthumbC"],[45,"LindexA"],[46,"LindexB"],[47,"LindexC"],[48,"LmiddleA"],[49,"LmiddleB"],[50,"LmiddleC"],[51,"LringA"],[52,"LringB"],[53,"LringC"],[54,"LpinkyA"],[55,"LpinkyB"],[56,"LpinkyC"],[57,"RthumbA"],[58,"RthumbB"],[59,"RthumbC"],[60,"RindexA"],[61,"RindexB"],[62,"RindexC"],[63,"RmiddleA"],[64,"RmiddleB"],[65,"RmiddleC"],[66,"RringA"],[67,"RringB"],[68,"RringC"],[69,"RpinkyA"],[70,"RpinkyB"],[71,"RpinkyC"],[72,"ltit_A"],[73,"rtit_A"],[74,"lcollar_A"],[75,"lcollar_B"],[76,"lcollar_C"],[77,"rcollar_A"],[78,"rcollar_B"],[79,"rcollar_C"],[80,"Lball"],[81,"LlegDangle1_A"],[82,"LlegDangle2_A"],[83,"LlegDangle3_A"],[84,"Rball"],[85,"RlegDangle3_A"],[86,"RlegDangle2_A"],[87,"RlegDangle1_A"],[88,"holster"],[89,"gun"]],"atoll-dish-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"Yrotation"]],"atoll-rotor-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"body-parts-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"bottom-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"bottom_bar"],[6,"bottombartype"],[7,"topleft"],[8,"bottomright"],[9,"topleft1"],[10,"bottomright1"],[11,"topleft2"],[12,"bottomright2"],[13,"topleft3"],[14,"bottomright3"]],"brd-pool-water-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"car-color-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"],[10,"tri0"],[11,"tri1"],[12,"tri2"],[13,"color"]],"car-interior-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"car-vert-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"cash-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"cash_bar"],[6,"topleft"],[7,"bottomright"],[8,"topleft2"],[9,"bottomright2"]],"character-select-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"map_screen"],[6,"mapscreentype"],[7,"topleft"],[8,"bottomright"],[9,"topleft_type"],[10,"bottomright_type"]],"cliffs-fence-debris-post-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-fence-debris-raila-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-fence-debris-railb-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-fence-debris-railc-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-atlas-base-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_atlas_base_dust"]],"coli-atlas-base-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_atlas_base_dust"]],"coli-atlas-base-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_atlas_base_dust"]],"coli-atlas-break-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"],[37,"ai"],[38,"aj"],[39,"ak"],[40,"al"],[41,"am"],[42,"an"],[43,"ao"],[44,"ap"],[45,"aq"],[46,"ar"],[47,"as"],[48,"at"],[49,"au"],[50,"av"],[51,"aw"],[52,"ax"]],"coli-atlas-break-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"ay"],[4,"az"],[5,"ba"],[6,"bb"],[7,"bc"],[8,"bd"],[9,"be"],[10,"bf"],[11,"bg"],[12,"bh"],[13,"bi"],[14,"bj"],[15,"bk"],[16,"bl"],[17,"bm"],[18,"bn"],[19,"bo"],[20,"bp"],[21,"bq"],[22,"br"],[23,"bs"],[24,"bt"],[25,"bu"],[26,"bv"],[27,"bw"],[28,"bx"],[29,"by"],[30,"bz"],[31,"ca"],[32,"cb"],[33,"cc"],[34,"cd"],[35,"ce"],[36,"cf"],[37,"cg"],[38,"ch"],[39,"ci"],[40,"cj"],[41,"ck"],[42,"cl"],[43,"cm"],[44,"cn"],[45,"co"],[46,"cp"],[47,"cq"],[48,"cr"],[49,"cs"],[50,"ct"],[51,"cu"],[52,"cv"]],"coli-atlas-break-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"],[37,"ai"],[38,"aj"],[39,"ak"],[40,"al"],[41,"am"],[42,"an"],[43,"ao"],[44,"ap"],[45,"aq"],[46,"ar"],[47,"as"],[48,"at"],[49,"au"],[50,"av"],[51,"aw"],[52,"ax"],[53,"ay"],[54,"az"],[55,"ba"],[56,"bb"],[57,"bc"],[58,"bd"],[59,"be"],[60,"bf"],[61,"bg"],[62,"bh"],[63,"bi"],[64,"bj"],[65,"bk"],[66,"bl"],[67,"bm"],[68,"bn"],[69,"bo"],[70,"bp"],[71,"bq"],[72,"br"],[73,"bs"],[74,"bt"],[75,"bu"],[76,"bv"],[77,"bw"],[78,"bx"],[79,"by"],[80,"bz"],[81,"ca"],[82,"cb"],[83,"cc"],[84,"cd"],[85,"ce"],[86,"cf"],[87,"cg"],[88,"ch"],[89,"ci"],[90,"cj"],[91,"ck"],[92,"cl"],[93,"cm"],[94,"atlas_break"]],"coli-atlas-globe-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-atlas-pillar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-atlas-statue-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-ball-collision-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-a-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-a-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-a-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-hanger-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-hanger-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-hanger-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bowl-hanger-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bridge-a-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"c"]],"coli-bridge-a-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bridge-a-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bridge-a-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bridge-a-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bridge-a-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-bridge-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"],[37,"aj"],[38,"ak"],[39,"al"],[40,"am"],[41,"an"],[42,"ao"],[43,"ap"],[44,"aq"],[45,"ar"],[46,"as"],[47,"at"],[48,"au"]],"coli-center-arch-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-center-arch-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"]],"coli-center-arch-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-center-arch-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"]],"coli-center-arch-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-gate-a-straight-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-gate-b-curved-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-gate-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-gate-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-gate-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-pillar-break-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-pillar-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-pillar-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-pillar-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-stands-rail-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-stands-rail-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-stands-rail-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-stands-rail-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-stands-rail-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-stands-rail-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-statue-base-c-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-c-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-c-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-s-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-s-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-s-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-base-s-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_base_dust"]],"coli-statue-chain-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a_a"],[4,"a_b"],[5,"a_c"],[6,"a_d"],[7,"a_e"],[8,"a_f"],[9,"b_a"],[10,"b_b"],[11,"b_c"],[12,"b_d"],[13,"b_e"],[14,"b_f"],[15,"c_a"],[16,"c_b"],[17,"c_c"],[18,"c_d"],[19,"c_e"],[20,"c_f"],[21,"d_a"],[22,"d_b"],[23,"d_c"],[24,"d_d"],[25,"d_e"],[26,"d_f"]],"coli-statue-chain-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a_a"],[4,"a_b"],[5,"a_c"],[6,"a_d"],[7,"a_e"],[8,"a_f"],[9,"b_a"],[10,"b_b"],[11,"b_c"],[12,"b_d"],[13,"b_e"],[14,"b_f"],[15,"c_a"],[16,"c_b"],[17,"c_c"],[18,"c_d"],[19,"c_e"],[20,"c_f"],[21,"d_a"],[22,"d_b"],[23,"d_c"],[24,"d_d"],[25,"d_e"],[26,"d_f"]],"coli-statue-female-c-break-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"],[37,"ai"],[38,"aj"],[39,"ak"],[40,"al"],[41,"am"],[42,"an"],[43,"ao"],[44,"ap"],[45,"aq"],[46,"ar"],[47,"as"],[48,"at"],[49,"coli_statue_break_c"]],"coli-statue-female-c-break-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a_a"],[4,"a_b"],[5,"a_c"],[6,"a_d"],[7,"a_e"],[8,"a_f"],[9,"b_a"],[10,"b_b"],[11,"b_c"],[12,"b_d"],[13,"b_e"],[14,"b_f"],[15,"c_a"],[16,"c_b"],[17,"c_c"],[18,"c_d"],[19,"c_e"],[20,"c_f"],[21,"d_a"],[22,"d_b"],[23,"d_c"],[24,"d_d"],[25,"d_e"],[26,"d_f"]],"coli-statue-female-c-break-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"]],"coli-statue-female-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-statue-female-s-break-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"],[37,"ai"],[38,"aj"],[39,"ak"],[40,"al"],[41,"am"],[42,"an"],[43,"ao"],[44,"ap"],[45,"aq"],[46,"ar"],[47,"as"],[48,"at"],[49,"au"],[50,"av"],[51,"coli_statue_break_s"]],"coli-statue-female-s-break-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a_a"],[4,"a_b"],[5,"a_c"],[6,"a_d"],[7,"a_e"],[8,"a_f"],[9,"b_a"],[10,"b_b"],[11,"b_c"],[12,"b_d"],[13,"b_e"],[14,"b_f"],[15,"c_a"],[16,"c_b"],[17,"c_c"],[18,"c_d"],[19,"c_e"],[20,"c_f"],[21,"d_a"],[22,"d_b"],[23,"d_c"],[24,"d_d"],[25,"d_e"],[26,"d_f"]],"coli-statue-female-s-break-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"]],"collectables-generic-ripples-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"destA"],[5,"destB"],[6,"destC"],[7,"destD"],[8,"destE"],[9,"srcA"],[10,"srcB"],[11,"srcC"],[12,"srcD"],[13,"srcE"]],"collectoid-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"collectoid-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"collectoid-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"collectoid-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"collectoid-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"com-rod-of-god-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"combat-racing-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"combat"]],"confirm-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"confirm_screen"],[6,"topleft"],[7,"bottomright"],[8,"topleft2"],[9,"bottomright2"],[10,"topleft3"],[11,"bottomright3"]],"construction-barricade-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"construction-cone-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"crate-metal-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ctf-base-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"globes"],[4,"blue_globe"],[5,"red_globe"]],"ctf-base-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"flaga"],[5,"flagb"],[6,"flagc"],[7,"flagd"],[8,"flage"],[9,"flagf"]],"ctf-base-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cust-icon-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"cust-title-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"dax-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"upper_body"],[5,"upper_bodyB"],[6,"chest"],[7,"neckA"],[8,"neckB"],[9,"head"],[10,"earBaseL"],[11,"earMidL"],[12,"earBaseR"],[13,"earMidR"],[14,"Lshoulder"],[15,"Lelbow"],[16,"Lhand"],[17,"Rshoulder"],[18,"Relbow"],[19,"Rhand"],[20,"hips"],[21,"Lthigh"],[22,"Lknee"],[23,"Lankle"],[24,"Lball"],[25,"Rthigh"],[26,"Rknee"],[27,"Rankle"],[28,"Rball"],[29,"Tail1"],[30,"Tail2"],[31,"Tail3"],[32,"Tail4"],[33,"Tail5"],[34,"flapL_A"],[35,"flapL_B"],[36,"flapR_A"],[37,"flapR_B"],[38,"tongueMaster"],[39,"tongueBase"],[40,"tongueMidA"],[41,"tongueMidB"],[42,"tongueTip"],[43,"uvula"],[44,"goggles"],[45,"LmiddleA"],[46,"LmiddleB"],[47,"LmiddleC"],[48,"LindexA"],[49,"LindexB"],[50,"LindexC"],[51,"LthumbA"],[52,"LthumbB"],[53,"LthumbC"],[54,"LringA"],[55,"LringB"],[56,"LringC"],[57,"LpinkyA"],[58,"LpinkyB"],[59,"LpinkyC"],[60,"RmiddleA"],[61,"RmiddleB"],[62,"RmiddleC"],[63,"RindexA"],[64,"RindexB"],[65,"RindexC"],[66,"RthumbA"],[67,"RthumbB"],[68,"RthumbC"],[69,"RringA"],[70,"RringB"],[71,"RringC"],[72,"RpinkyA"],[73,"RpinkyB"],[74,"RpinkyC"],[75,"pantL_A"],[76,"pantR_A"],[77,"belt_A"]],"daxter-highres-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"upper_body"],[5,"upper_bodyB"],[6,"chest"],[7,"neckA"],[8,"neckB"],[9,"head"],[10,"earBaseL"],[11,"earMidL"],[12,"earBaseR"],[13,"earMidR"],[14,"Lshoulder"],[15,"Lelbow"],[16,"Lhand"],[17,"Rshoulder"],[18,"Relbow"],[19,"Rhand"],[20,"hips"],[21,"Lthigh"],[22,"Lknee"],[23,"Lankle"],[24,"Lball"],[25,"Rthigh"],[26,"Rknee"],[27,"Rankle"],[28,"Rball"],[29,"Tail1"],[30,"Tail2"],[31,"Tail3"],[32,"Tail4"],[33,"Tail5"],[34,"flapL_A"],[35,"flapL_B"],[36,"flapR_A"],[37,"flapR_B"],[38,"tongueMaster"],[39,"tongueBase"],[40,"tongueMidA"],[41,"tongueMidB"],[42,"tongueTip"],[43,"uvula"],[44,"goggles"],[45,"LmiddleA"],[46,"LmiddleB"],[47,"LmiddleC"],[48,"LindexA"],[49,"LindexB"],[50,"LindexC"],[51,"LthumbA"],[52,"LthumbB"],[53,"LthumbC"],[54,"LringA"],[55,"LringB"],[56,"LringC"],[57,"LpinkyA"],[58,"LpinkyB"],[59,"LpinkyC"],[60,"RmiddleA"],[61,"RmiddleB"],[62,"RmiddleC"],[63,"RindexA"],[64,"RindexB"],[65,"RindexC"],[66,"RthumbA"],[67,"RthumbB"],[68,"RthumbC"],[69,"RringA"],[70,"RringB"],[71,"RringC"],[72,"RpinkyA"],[73,"RpinkyB"],[74,"RpinkyC"],[75,"pantL_A"],[76,"pantR_A"],[77,"belt_A"]],"daxter-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"upper_body"],[5,"upper_bodyB"],[6,"chest"],[7,"neckA"],[8,"neckB"],[9,"head"],[10,"earBaseL"],[11,"earMidL"],[12,"flapBaseL"],[13,"flapMidL"],[14,"flapBaseR"],[15,"flapMidR"],[16,"earBaseR"],[17,"earMidR"],[18,"Lshoulder"],[19,"Lelbow"],[20,"Lhand"],[21,"LmiddleA"],[22,"LmiddleB"],[23,"LthumbA"],[24,"Rshoulder"],[25,"Relbow"],[26,"Rhand"],[27,"RmiddleA"],[28,"RmiddleB"],[29,"RthumbA"],[30,"hips"],[31,"Lthigh"],[32,"Lknee"],[33,"Lankle"],[34,"Lball"],[35,"Rthigh"],[36,"Rknee"],[37,"Rankle"],[38,"Rball"],[39,"tailBase"],[40,"Tail2"],[41,"tailMid"],[42,"Tail4"],[43,"tailEnd"]],"deathrace-drone-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"l_taillight"],[5,"r_taillight"],[6,"r_headlight"],[7,"l_headlight"],[8,"l_r_axle"],[9,"l_f_axle"],[10,"r_r_axle"],[11,"r_f_axle"]],"deathrace-drone-wheel-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"des-cactus-a-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"cactus_1"],[5,"cactus_2"],[6,"cactus_3"],[7,"cactus_4"],[8,"cactus_5"],[9,"cactus_6"],[10,"cactus_7"],[11,"cactus_8"],[12,"cactus_9"],[13,"cactus_10"],[14,"cactus_11"],[15,"cactus_12"],[16,"cactus_13"],[17,"cactus_14"],[18,"cactus_15"],[19,"cactus_16"],[20,"cactus_17"],[21,"cactus_18"],[22,"cactus_19"],[23,"cactus_20"],[24,"cactus_21"],[25,"cactus_22"]],"des-cactus-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"cactus_a_"],[5,"cactus_b_"],[6,"cactus_e_"],[7,"cactus_d_"],[8,"cactus_c_"]],"des-cactus-b-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"cactus_1"],[5,"cactus_2"],[6,"cactus_3"],[7,"cactus_4"],[8,"cactus_5"],[9,"cactus_6"],[10,"cactus_7"],[11,"cactus_8"],[12,"cactus_9"],[13,"cactus_10"],[14,"cactus_11"],[15,"cactus_12"],[16,"cactus_13"],[17,"cactus_14"],[18,"cactus_15"],[19,"cactus_16"],[20,"cactus_17"],[21,"cactus_18"],[22,"cactus_19"],[23,"cactus_20"],[24,"cactus_21"],[25,"cactus_22"],[26,"cactus_23"],[27,"cactus_24"],[28,"cactus_26"]],"des-cactus-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"cactus_a"],[5,"cactus_b"],[6,"cactus_c"],[7,"cactus_d"]],"drome-tunnel-drum-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"tunnel_effect_"]],"eco-blue-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"eco-blue-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"mainrot"],[5,"centerliquidrot"],[6,"center_part"]],"eco-blue-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"eco-blue-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"mainrot"],[5,"centerliquidrot"],[6,"center_part"]],"eco-blue-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"eco-dark-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"eco-green-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"eco-light-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"center_effect"],[5,"top_button_effect"],[6,"btm_button_effect"]],"eco-red-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"eco-yellow-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"finish-banner-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"fuel-cell-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"camera"],[5,"piece1"],[6,"piece2"],[7,"piece3"],[8,"piece4"],[9,"orbit"],[10,"orbitEND"]],"fuel-cell-shield-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"ball"],[5,"electrical_part"]],"full-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"full_screen"],[6,"x2y0"],[7,"x1y0"],[8,"x0y0"],[9,"x2y1"],[10,"x1y1"],[11,"x0y1"],[12,"x2y2"],[13,"x1y2"],[14,"x0y2"]],"garage-car-arm-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"trackrot"],[5,"armtransupa"],[6,"armtransupb"],[7,"armtransupc"],[8,"armtransupd"],[9,"armrot"],[10,"Rcargrabtrans"],[11,"Rsubcargrabtrans"],[12,"Lcargrabtrans"],[13,"Lsubcargrabtrans"]],"garage-cinema-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"rot"]],"garage-door-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"garage-sliding-door-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"garage-tool-arm-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"trackrot"],[5,"tracktrans"],[6,"elbowa"],[7,"elbowb"],[8,"elbowc"],[9,"elbowd"]],"garage-turntable-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"grenade-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"gtb-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lear_A"],[9,"Rear_A"],[10,"Lshoulder"],[11,"Lelbow"],[12,"Lhand"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"hips"],[17,"Lthigh"],[18,"Lknee"],[19,"Lankle"],[20,"Rthigh"],[21,"Rknee"],[22,"Rankle"],[23,"Lear_B"],[24,"Lear_C"],[25,"Rear_B"],[26,"Rear_C"],[27,"toupee"],[28,"toupee_rearA"],[29,"toupee_rearB"],[30,"toupee_frontA"],[31,"toupee_frontB"],[32,"toupee_bangA"],[33,"toupee_bangB"],[34,"sideburn_lt"],[35,"sideburn_rt"],[36,"LthumbA"],[37,"LthumbB"],[38,"LthumbC"],[39,"LindexA"],[40,"LindexB"],[41,"LindexC"],[42,"LmiddleA"],[43,"LmiddleB"],[44,"LmiddleC"],[45,"LringA"],[46,"LringB"],[47,"LringC"],[48,"LpinkyA"],[49,"LpinkyB"],[50,"LpinkyC"],[51,"Lcuff"],[52,"RthumbA"],[53,"RthumbB"],[54,"RthumbC"],[55,"RindexA"],[56,"RindexB"],[57,"RindexC"],[58,"RmiddleA"],[59,"RmiddleB"],[60,"RmiddleC"],[61,"RringA"],[62,"RringB"],[63,"RringC"],[64,"RpinkyA"],[65,"RpinkyB"],[66,"RpinkyC"],[67,"Rcuff"],[68,"lftcollar_A"],[69,"lftcollar_B"],[70,"lftcollar_C"],[71,"rgtcollar_A"],[72,"rgtcollar_B"],[73,"rgtcollar_C"],[74,"Lcollar"],[75,"LsHELP"],[76,"RsHELP"],[77,"Lball"],[78,"Rball"]],"gun-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"yellow_gun"],[4,"yellow_muzzle"],[5,"missile_body"],[6,"missile_muzzle"],[7,"grenade_body"],[8,"grenade"]],"haven-gen-light-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"haven-gen-light-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"haven-gen-light-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"haven-gen-light-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"haven-gen-light-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"haven-trashcan-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"helmet-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"helmet-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"helmet-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"helmet-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"helmet-e-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"helmet-f-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ice-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ice-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ice-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ice-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ice-debris-e-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ice-flag-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"flag_a"],[5,"flag_b"],[6,"flag_c"],[7,"flag_d"],[8,"flag_e"]],"interface-cam-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"4x3"],[5,"16x9"],[6,"scenecamera"],[7,"camera"]],"jakd-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lear_A"],[9,"Rear_A"],[10,"Lshoulder"],[11,"Lelbow"],[12,"Lhand"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"hips"],[17,"Lthigh"],[18,"Lknee"],[19,"Lankle"],[20,"Rthigh"],[21,"Rknee"],[22,"Rankle"],[23,"Lear_B"],[24,"Lear_C"],[25,"Rear_B"],[26,"Rear_C"],[27,"LthumbA"],[28,"LthumbB"],[29,"LthumbC"],[30,"LindexA"],[31,"LindexB"],[32,"LindexC"],[33,"LmiddleA"],[34,"LmiddleB"],[35,"LmiddleC"],[36,"LringA"],[37,"LringB"],[38,"LringC"],[39,"LpinkyA"],[40,"LpinkyB"],[41,"LpinkyC"],[42,"LelbowHELP"],[43,"RthumbA"],[44,"RthumbB"],[45,"RthumbC"],[46,"RindexA"],[47,"RindexB"],[48,"RindexC"],[49,"RmiddleA"],[50,"RmiddleB"],[51,"RmiddleC"],[52,"RringA"],[53,"RringB"],[54,"RringC"],[55,"RpinkyA"],[56,"RpinkyB"],[57,"RpinkyC"],[58,"RelbowHELP"],[59,"lcollar_A"],[60,"lcollar_B"],[61,"lcollar_C"],[62,"rcollar_A"],[63,"rcollar_B"],[64,"rcollar_C"],[65,"Lshoulderplate"],[66,"ljacket_A"],[67,"ljacket_B"],[68,"ljacket_C"],[69,"rjacket_A"],[70,"rjacket_B"],[71,"rjacket_C"],[72,"Lball"],[73,"LlegDangle3_A"],[74,"LlegDangle4_A"],[75,"LlegDangle1_A"],[76,"LlegDangle2_A"],[77,"Rball"],[78,"RlegDangle3_A"],[79,"RlegDangle4_A"],[80,"RlegDangle1_A"],[81,"RlegDangle2_A"]],"jakxlogo-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"jak"],[6,"x"],[7,"tr"],[8,"tl"],[9,"bl"],[10,"br"],[11,"x1"],[12,"x2"],[13,"x3"],[14,"x4"]],"jungle-branch-collision-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-clay-jar-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-clay-jar-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-a-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-a-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-a-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-a-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-b-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-b-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-b-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-jar-b-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-wooda-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-woodb-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-woodc-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-debris-woodd-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-flaming-arrow-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"flaming_arrow_part"]],"jungle-statue-small-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-statue-small-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-statue-small-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-statue-small-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-statue-small-outdoors-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-stone-snake-head-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"b"],[4,"c"],[5,"d"],[6,"e"],[7,"f"],[8,"g"],[9,"h"],[10,"i"],[11,"j"],[12,"k"],[13,"l"],[14,"m"],[15,"spout_base"],[16,"spout_mouth"]],"jungle-stone-snake-head-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"spout_base"],[5,"spout_mouth"]],"jungle-tree-root-large-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"jungle-tree-root-large-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-bouncy-tire-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-fence-debris-post-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-fence-debris-raila-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-fence-debris-railb-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-fence-debris-railc-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-fence-piece-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-fence-piece-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-flag-down-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"flaga"],[5,"flagb"],[6,"flagc"],[7,"flagd"],[8,"flage"],[9,"flagf"],[10,"flagg"],[11,"flagh"]],"kcro-oil-barrel-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kcro-staff-flag-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"flag_a"],[5,"flag_b"],[6,"flag_c"],[7,"flag_d"],[8,"flag_e"],[9,"flag_f"],[10,"flag_g"],[11,"flag_h"],[12,"flag_i"]],"kei-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"backHair1"],[9,"backHair2"],[10,"rEara"],[11,"rEarb"],[12,"lEara"],[13,"lEarb"],[14,"Lshoulder"],[15,"Lelbow"],[16,"Lhand"],[17,"LthumbA"],[18,"LindexA"],[19,"LindexB"],[20,"LindexC"],[21,"LpinkyA"],[22,"LpinkyB"],[23,"LpinkyC"],[24,"lTopStrap"],[25,"Rshoulder"],[26,"Relbow"],[27,"Rhand"],[28,"RthumbA"],[29,"RindexA"],[30,"RindexB"],[31,"RindexC"],[32,"RpinkyA"],[33,"RpinkyB"],[34,"RpinkyC"],[35,"rTopStrap"],[36,"rBoob"],[37,"lBoob"],[38,"hips"],[39,"Lthigh"],[40,"Lknee"],[41,"Lankle"],[42,"Lball"],[43,"lKneeFlap"],[44,"Lanklestrap"],[45,"Rthigh"],[46,"Rknee"],[47,"Rankle"],[48,"Rball"],[49,"rKneeFlap"],[50,"Ranklestrap"],[51,"lBotStrap"],[52,"lBotStrap2"],[53,"rBotStrap"],[54,"rBotStrap2"],[55,"Rmidhaira"],[56,"Rmidhairb"],[57,"Rbanga"],[58,"Rbangb"],[59,"Rbangc"],[60,"Lbanga"],[61,"Lbangb"],[62,"Lbangc"],[63,"Lmidhaira"],[64,"Lmidhairb"],[65,"LthumbB"],[66,"LthumbC"],[67,"LmiddleA"],[68,"LmiddleB"],[69,"LmiddleC"],[70,"LringA"],[71,"LringB"],[72,"LringC"],[73,"lGlove"],[74,"lTopStrap2"],[75,"RthumbB"],[76,"RthumbC"],[77,"RmiddleA"],[78,"RmiddleB"],[79,"RmiddleC"],[80,"RringA"],[81,"RringB"],[82,"RringC"],[83,"rGlove"],[84,"rTopStrap2"],[85,"gogglesBase"],[86,"gogglesMid"],[87,"gogglesRight"],[88,"gogglesLeft"],[89,"LtoeStrap"],[90,"LpantFlap"],[91,"RtoeStrap"],[92,"RpantFlap"],[93,"maskstrap"],[94,"mask"],[95,"torch"]],"keira-highres-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"backHair1"],[9,"backHair2"],[10,"rEara"],[11,"rEarb"],[12,"lEara"],[13,"lEarb"],[14,"Lshoulder"],[15,"Lelbow"],[16,"Lhand"],[17,"LthumbA"],[18,"LindexA"],[19,"LindexB"],[20,"LindexC"],[21,"LpinkyA"],[22,"LpinkyB"],[23,"LpinkyC"],[24,"lTopStrap"],[25,"Rshoulder"],[26,"Relbow"],[27,"Rhand"],[28,"RthumbA"],[29,"RindexA"],[30,"RindexB"],[31,"RindexC"],[32,"RpinkyA"],[33,"RpinkyB"],[34,"RpinkyC"],[35,"rTopStrap"],[36,"rBoob"],[37,"lBoob"],[38,"hips"],[39,"Lthigh"],[40,"Lknee"],[41,"Lankle"],[42,"Lball"],[43,"lKneeFlap"],[44,"Lanklestrap"],[45,"Rthigh"],[46,"Rknee"],[47,"Rankle"],[48,"Rball"],[49,"rKneeFlap"],[50,"Ranklestrap"],[51,"lBotStrap"],[52,"lBotStrap2"],[53,"rBotStrap"],[54,"rBotStrap2"],[55,"Rmidhaira"],[56,"Rmidhairb"],[57,"Rbanga"],[58,"Rbangb"],[59,"Rbangc"],[60,"Lbanga"],[61,"Lbangb"],[62,"Lbangc"],[63,"Lmidhaira"],[64,"Lmidhairb"],[65,"LthumbB"],[66,"LthumbC"],[67,"LmiddleA"],[68,"LmiddleB"],[69,"LmiddleC"],[70,"LringA"],[71,"LringB"],[72,"LringC"],[73,"lGlove"],[74,"lTopStrap2"],[75,"RthumbB"],[76,"RthumbC"],[77,"RmiddleA"],[78,"RmiddleB"],[79,"RmiddleC"],[80,"RringA"],[81,"RringB"],[82,"RringC"],[83,"rGlove"],[84,"rTopStrap2"],[85,"gogglesBase"],[86,"gogglesMid"],[87,"gogglesRight"],[88,"gogglesLeft"],[89,"LtoeStrap"],[90,"LpantFlap"],[91,"RtoeStrap"],[92,"RpantFlap"],[93,"maskstrap"],[94,"mask"],[95,"torch"]],"keyboard-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"popup"],[6,"topleft"],[7,"bottomright"],[8,"screen_type_large"],[9,"topleft_type"],[10,"bottomright_type"],[11,"screen_type2"]],"kle-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"chest"],[5,"neck"],[6,"head"],[7,"earBaseL"],[8,"earMidL"],[9,"earBaseR"],[10,"earMidR"],[11,"Lshoulder"],[12,"Lelbow"],[13,"Lhand"],[14,"Rshoulder"],[15,"Relbow"],[16,"Rhand"],[17,"SDK_RArmor"],[18,"RArmor"],[19,"SDK_LArmor"],[20,"LArmor"],[21,"hips"],[22,"Lthigh"],[23,"Lknee"],[24,"Lankle"],[25,"Lball"],[26,"SDK_LKneePad"],[27,"LKneePad"],[28,"Rthigh"],[29,"Rknee"],[30,"Rankle"],[31,"Rball"],[32,"SDK_RKneePad"],[33,"RKneePad"],[34,"SDK_stomach"],[35,"stomach"],[36,"gun"],[37,"hairA"],[38,"hairB"],[39,"LmoustA"],[40,"LmoustB"],[41,"RmoustA"],[42,"RmoustB"],[43,"browR"],[44,"browL"],[45,"jawSDK"],[46,"hairL"],[47,"hairR"],[48,"LthumbA"],[49,"LthumbB"],[50,"LthumbC"],[51,"LindexA"],[52,"LindexB"],[53,"LindexC"],[54,"LmiddleA"],[55,"LmiddleB"],[56,"LmiddleC"],[57,"LringA"],[58,"LringB"],[59,"LringC"],[60,"LpinkyA"],[61,"LpinkyB"],[62,"LpinkyC"],[63,"RthumbA"],[64,"RthumbB"],[65,"RthumbC"],[66,"RindexA"],[67,"RindexB"],[68,"RindexC"],[69,"RmiddleA"],[70,"RmiddleB"],[71,"RmiddleC"],[72,"RringA"],[73,"RringB"],[74,"RringC"],[75,"RpinkyA"],[76,"RpinkyB"],[77,"RpinkyC"],[78,"LArmorB"],[79,"SDK_pouch"],[80,"pouch"]],"kras-fireworks-ship-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-fishtank-lo-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-flag-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"flag_a"],[5,"flag_b"],[6,"flag_c"],[7,"flag_d"],[8,"flag_e"],[9,"flag_f"],[10,"flag_g"],[11,"flag_h"],[12,"flag_i"]],"kras-pump-break-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-pump-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-pump-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-pump-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-rusty-sign-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"chaina"]],"kras-tower-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"kras-windsock-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"socka"],[5,"sockb"],[6,"sockc"],[7,"sockd"],[8,"socke"]],"krasfemale-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"chest"],[5,"neck"],[6,"hairA"],[7,"hairB"],[8,"Lshoulder"],[9,"Lelbow"],[10,"Lhand"],[11,"Lfinger1"],[12,"Lfinger2"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"Rfinger1"],[17,"Rfinger2"],[18,"hips"],[19,"Lthigh"],[20,"Lknee"],[21,"Lankle"],[22,"Lball"],[23,"Rthigh"],[24,"Rknee"],[25,"Rankle"],[26,"Rball"],[27,"gun"],[28,"gunblast"]],"krasmale-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"chest"],[5,"neck"],[6,"head"],[7,"Lshoulder"],[8,"Lelbow"],[9,"Lhand"],[10,"Rshoulder"],[11,"Relbow"],[12,"Rhand"],[13,"RmiddleA"],[14,"hips"],[15,"Lthigh"],[16,"Lknee"],[17,"Lankle"],[18,"Lball"],[19,"Rthigh"],[20,"Rknee"],[21,"Rankle"],[22,"Rball"],[23,"gun"],[24,"gunblast"]],"large-type-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"sml_bar"],[6,"smlbaratype"],[7,"smlbaratypeb"],[8,"topleft"],[9,"bottomright"],[10,"topleft2"],[11,"bottomright2"]],"lg-player-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"popup"],[6,"x3y0"],[7,"x2y0"],[8,"x1y0"],[9,"x0y0"],[10,"x3y1"],[11,"x2y1"],[12,"x1y1"],[13,"x0y1"],[14,"x3y2"],[15,"x2y2"],[16,"x1y2"],[17,"x0y2"],[18,"x3y3"],[19,"x2y3"],[20,"x1y3"],[21,"x0y3"],[22,"lgplayscreentype"]],"lobby-screen-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"a"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"x0y3"],[19,"x1y3"],[20,"x2y3"],[21,"x3y3"],[22,"screen_type"]],"lobby-screen-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"a"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"screen_type"]],"lobby-screen-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"a"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"screen_type"]],"lobby-screen-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"a"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"screen_type"]],"lobby-tab-large-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"lobby_tab"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"lobby-tab-small-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"lobby_tab"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"lobby-tab-small-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"lobby_tab"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"map-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"map_screen"],[6,"mapscreentype"],[7,"topleft"],[8,"bottomright"]],"mem-card-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"popup"],[6,"x3y0"],[7,"x2y0"],[8,"x1y0"],[9,"x0y0"],[10,"x3y1"],[11,"x2y1"],[12,"x1y1"],[13,"x0y1"],[14,"x3y2"],[15,"x2y2"],[16,"x1y2"],[17,"x0y2"],[18,"x3y3"],[19,"x2y3"],[20,"x1y3"],[21,"x0y3"],[22,"lgplayscreentype"]],"menu-haven-trophy-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"menu-kras-trophy-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"menu-marauder-trophy-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"menu-spargus-trophy-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"metal-raptor-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"hips"],[4,"main"],[5,"chest"],[6,"neck_a"],[7,"neck_b"],[8,"head"],[9,"jaw"],[10,"L_shoulder"],[11,"L_elbow"],[12,"L_wrist"],[13,"L_fingers"],[14,"R_shoulder"],[15,"R_elbow"],[16,"R_wrist"],[17,"R_fingers"],[18,"L_thigh"],[19,"L_knee"],[20,"L_ankle"],[21,"L_ball"],[22,"tail_a"],[23,"tail_b"],[24,"c"],[25,"R_thigh"],[26,"R_knee"],[27,"R_ankle"],[28,"R_ball"]],"mine-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"blinking_light"]],"mine-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"blinking_light"],[5,"blinking_light1"]],"mine-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"a_a"],[5,"a_b"],[6,"a_c"],[7,"b_a"],[8,"b_b"],[9,"b_c"],[10,"c_a"],[11,"c_b"],[12,"c_c"],[13,"d_a"],[14,"d_b"],[15,"d_c"],[16,"scale"]],"missile-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"muzzle-flash-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"oil-slick-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"rot_up_down"],[5,"scale_length_width"]],"palm-tree-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"a"],[5,"b"],[6,"c"],[7,"d"]],"palm-tree-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"a"],[5,"b"],[6,"c"],[7,"d"]],"palm-tree-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"a"],[5,"b"],[6,"c"],[7,"d"]],"palm-tree-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"palm-tree-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"peak-double-flag-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"polebend1"],[5,"polebend2"],[6,"polebend3"],[7,"bflag1"],[8,"bflag2"],[9,"bflag3"],[10,"bflag4"],[11,"bflag5"],[12,"sflag1"],[13,"sflag2"],[14,"sflag3"],[15,"sflag4"],[16,"sflag5"]],"peak-snowball-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"pec-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"chest"],[5,"neck"],[6,"head"],[7,"snoutA"],[8,"snoutB"],[9,"feather3A"],[10,"feather3B"],[11,"Lshoulder"],[12,"Lelbow"],[13,"Lhand"],[14,"LthumbA"],[15,"LthumbB"],[16,"LthumbC"],[17,"LindexA"],[18,"LindexB"],[19,"LindexC"],[20,"LringA"],[21,"LringB"],[22,"LringC"],[23,"LpinkyA"],[24,"LpinkyB"],[25,"LpinkyC"],[26,"Rshoulder"],[27,"Relbow"],[28,"Rhand"],[29,"RthumbA"],[30,"RthumbB"],[31,"RthumbC"],[32,"RindexA"],[33,"RindexB"],[34,"RindexC"],[35,"RringA"],[36,"RringB"],[37,"RringC"],[38,"RpinkyA"],[39,"RpinkyB"],[40,"hips"],[41,"Lthigh"],[42,"Lknee"],[43,"Lankle"],[44,"Lball"],[45,"Rthigh"],[46,"Rknee"],[47,"Rankle"],[48,"Rball"],[49,"tailA"],[50,"tailB"],[51,"tailC"],[52,"tailD"],[53,"tailE"],[54,"tailF"],[55,"tailG"],[56,"tailH"],[57,"tailI"],[58,"tailJ"],[59,"tailK"],[60,"tailL"],[61,"tailM"],[62,"tailN"],[63,"snoutC"],[64,"feather1A"],[65,"feather1B"],[66,"feather2A"],[67,"feather2B"],[68,"LmiddleA"],[69,"LmiddleB"],[70,"LmiddleC"],[71,"RmiddleA"],[72,"RmiddleB"],[73,"RmiddleC"],[74,"RpinkyC"]],"plane-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"planescreen"],[6,"x3y0"],[7,"x2y0"],[8,"x1y0"],[9,"x0y0"],[10,"x3y1"],[11,"x2y1"],[12,"x1y1"],[13,"x0y1"],[14,"x3y2"],[15,"x2y2"],[16,"x1y2"],[17,"x0y2"],[18,"x3y3"],[19,"x2y3"],[20,"x1y3"],[21,"x0y3"],[22,"screen"]],"play-screen-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"play_screenb"],[6,"playscreentype"],[7,"topleft"],[8,"bottomright"]],"play-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"play_screen"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"playscreentype"],[19,"upper_L_type"],[20,"lower_R_type"]],"plow-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-e-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-f-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-g-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-h-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-i-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-j-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-k-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-l-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-m-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-n-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-o-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-debris-p-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"plow-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"exhaust_l"],[5,"exhaust_r"],[6,"main_thruster"],[7,"l_small_thruster"],[8,"r_small_thruster"],[9,"l_eye_big"],[10,"l_eye_small"],[11,"r_eye_small"],[12,"r_eye_big"],[13,"plow"]],"points-counter-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"split_screen"],[6,"splitscreentype"],[7,"topleft"],[8,"bottomright"],[9,"topleft1"],[10,"bottomright1"]],"pop-up-screen-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"popup"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"x0y3"],[19,"x1y3"],[20,"x2y3"],[21,"x3y3"],[22,"screen_type"],[23,"screenA_topleft"],[24,"screenA_bottomright"],[25,"screenB_bottomright"],[26,"screenB_topleft"],[27,"type_topleft"],[28,"type_bottomright"]],"pop-up-screen-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"popup"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"x0y3"],[19,"x1y3"],[20,"x2y3"],[21,"x3y3"],[22,"screen_type"],[23,"topleft"],[24,"bottomright"],[25,"topleft1"],[26,"bottomright1"],[27,"bottomright2"],[28,"topleft2"],[29,"bottomright3"],[30,"topleft3"],[31,"topcenter"],[32,"bottomcenter"]],"pop-up-screen-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"popup"],[6,"x0y0"],[7,"x1y0"],[8,"x2y0"],[9,"x3y0"],[10,"x0y1"],[11,"x1y1"],[12,"x2y1"],[13,"x3y1"],[14,"x0y2"],[15,"x1y2"],[16,"x2y2"],[17,"x3y2"],[18,"x0y3"],[19,"x1y3"],[20,"x2y3"],[21,"x3y3"],[22,"screen_type"]],"pre-artifact-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"pre-artifact-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"pre-artifact-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"pre-artifact-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"prize-crate-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"ray-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"hips"],[5,"Lthigh"],[6,"Lknee"],[7,"Rthigh"],[8,"Rknee"],[9,"stomach"],[10,"chest"],[11,"neck"],[12,"head"],[13,"Lshoulder"],[14,"Lelbow"],[15,"Lhand"],[16,"Rshoulder"],[17,"Relbow"],[18,"Rhand"],[19,"Lankle"],[20,"Lball"],[21,"Lbellbot_A"],[22,"Rankle"],[23,"Rball"],[24,"Rbellbot_A"],[25,"LFskirt"],[26,"LMskirt"],[27,"LBskirt"],[28,"RBskirt"],[29,"RMskirt"],[30,"RFskirt"],[31,"Lburn_A"],[32,"Lburntip_B"],[33,"Lear_A"],[34,"Lear_B"],[35,"Lear_C"],[36,"Learing_A"],[37,"Rear_A"],[38,"Rear_B"],[39,"Rear_C"],[40,"Rearing_A"],[41,"Rburn_A"],[42,"Rburntip_B"],[43,"LthumbA"],[44,"LthumbB"],[45,"LthumbC"],[46,"LindexA"],[47,"LindexB"],[48,"LindexC"],[49,"LmiddleA"],[50,"LmiddleB"],[51,"LmiddleC"],[52,"LringA"],[53,"LringB"],[54,"LringC"],[55,"LpinkyA"],[56,"LpinkyB"],[57,"LpinkyC"],[58,"LshHELP_SDK"],[59,"RthumbA"],[60,"RthumbB"],[61,"RthumbC"],[62,"RindexA"],[63,"RindexB"],[64,"RindexC"],[65,"RmiddleA"],[66,"RmiddleB"],[67,"RmiddleC"],[68,"RringA"],[69,"RringB"],[70,"RringC"],[71,"RpinkyA"],[72,"RpinkyB"],[73,"RpinkyC"],[74,"RshHELP_SDK"],[75,"Lboob_A"],[76,"Rboob_A"]],"raz-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lear_A"],[9,"Rear_A"],[10,"Lshoulder"],[11,"Lelbow"],[12,"Lhand"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"hips"],[17,"Lthigh"],[18,"Lknee"],[19,"Lankle"],[20,"Rthigh"],[21,"Rknee"],[22,"Rankle"],[23,"Lear_B"],[24,"Lear_C"],[25,"Rear_B"],[26,"Rear_C"],[27,"LthumbA"],[28,"LthumbB"],[29,"LthumbC"],[30,"LindexA"],[31,"LindexB"],[32,"LindexC"],[33,"LmiddleA"],[34,"LmiddleB"],[35,"LmiddleC"],[36,"LringA"],[37,"LringB"],[38,"LringC"],[39,"LpinkyA"],[40,"LpinkyB"],[41,"LpinkyC"],[42,"RthumbA"],[43,"RthumbB"],[44,"RthumbC"],[45,"RindexA"],[46,"RindexB"],[47,"RindexC"],[48,"RmiddleA"],[49,"RmiddleB"],[50,"RmiddleC"],[51,"RringA"],[52,"RringB"],[53,"RringC"],[54,"RpinkyA"],[55,"RpinkyB"],[56,"RpinkyC"],[57,"lcollar_A"],[58,"lcollar_B"],[59,"lcollar_C"],[60,"rcollar_A"],[61,"rcollar_B"],[62,"rcollar_C"],[63,"Lball"],[64,"LFskirt_A"],[65,"LFskirt_B"],[66,"Lskirt_A"],[67,"Lskirt_B"],[68,"LBskirt_A"],[69,"LBskirt_B"],[70,"Rball"],[71,"RFskirt_A"],[72,"RFskirt_B"],[73,"Rskirt_A"],[74,"Rskirt_B"],[75,"RBskirt_A"],[76,"RBskirt_B"],[77,"belt"],[78,"Cigarette"]],"rustyh-bar-stool-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-blue-fish-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"midsection"],[5,"tail"],[6,"jaw"],[7,"leftfin"],[8,"rightfin"],[9,"feeler"]],"rustyh-bottle-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-bottle-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-fishtank-broken-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"leaky_part_a"],[5,"leaky_part_c"],[6,"leaky_part_b"]],"rustyh-fishtank-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-mug-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-mug-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-pink-fish-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"jaw"],[5,"right"],[6,"left"],[7,"midsection"],[8,"tail"]],"rustyh-seaweed-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"seca"],[5,"secb"],[6,"secc"],[7,"secd"]],"rustyh-seaweed-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"Lsidea"],[5,"Lsideb"],[6,"Lsidec"],[7,"Lsided"],[8,"Rsidea"],[9,"Rsideb"],[10,"Rsidec"],[11,"Rsided"],[12,"Rsidee"]],"rustyh-seaweed-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"seca"],[5,"secb"],[6,"sech"],[7,"seci"],[8,"secj"],[9,"secc"],[10,"secd"],[11,"sece"],[12,"secf"],[13,"secg"]],"rustyh-seaweed-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"seca"],[5,"secb"],[6,"secc"],[7,"secd"],[8,"sece"],[9,"secf"]],"rustyh-small-fish-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"midsection"],[5,"leftfin"],[6,"rightfin"],[7,"tail"]],"rustyh-tank-stuff-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"rustyh-treasure-chest-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"chestlid"],[5,"tankbubbles_"]],"saucer-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"guns"],[5,"center"]],"scenecamera-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"scenecamera"],[4,"camera"]],"select-mode-chooser-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"popup"],[7,"topleft1"],[8,"bottomright1"],[9,"topleft2"],[10,"bottomright2"],[11,"topleft3"],[12,"bottomright3"],[13,"topleft_type"],[14,"bottomright_type"],[15,"topleft4"],[16,"bottomright4"]],"select-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"select_screen"],[6,"selectscreentype"],[7,"topleft"],[8,"bottomright"]],"select-screen-sml-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"select_screen"],[6,"selectscreentype"],[7,"topleft"],[8,"bottomright"]],"sentry-bot-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"gun_y_rotate"],[5,"gun_x_rotate"],[6,"gun"],[7,"bottom_gun"],[8,"top_gun"],[9,"base"],[10,"leg_a_a"],[11,"leg_a_b"],[12,"leg_c_a"],[13,"leg_c_b"],[14,"leg_b_a"],[15,"leg_b_b"],[16,"leg_d_a"],[17,"leg_d_b"]],"shield-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"side-bar-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"side_bar"],[6,"sidebartype"],[7,"topleft"],[8,"bottomright"]],"side-bar-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"side_bar"],[6,"sidebartype"],[7,"topleft"],[8,"bottomright"]],"side-bar-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"side_bar"],[6,"sidebartype"],[7,"topleft"],[8,"bottomright"]],"side-bar-e-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"sidebar_e"],[6,"topleft"],[7,"bottomright"],[8,"topleft1"],[9,"bottomright1"],[10,"sidebar_ext"]],"side-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"side_bar"],[6,"sidebartype"],[7,"topleft"],[8,"bottomright"]],"side-bar-title-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"side_bar_title"],[6,"topleft"],[7,"bottomright"],[8,"topleft1"],[9,"bottomright1"]],"side-walls-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"R_side"],[6,"L_side"]],"sig-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lear_A"],[9,"Rear_A"],[10,"Lshoulder"],[11,"Lelbow"],[12,"Lhand"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"hips"],[17,"Lthigh"],[18,"Lknee"],[19,"Lankle"],[20,"Rthigh"],[21,"Rknee"],[22,"Rankle"],[23,"Lear_B"],[24,"Lear_C"],[25,"Rear_B"],[26,"Rear_C"],[27,"LthumbA"],[28,"LthumbB"],[29,"LthumbC"],[30,"LindexA"],[31,"LindexB"],[32,"LindexC"],[33,"LmiddleA"],[34,"LmiddleB"],[35,"LmiddleC"],[36,"LringA"],[37,"LringB"],[38,"LringC"],[39,"LpinkyA"],[40,"LpinkyB"],[41,"LpinkyC"],[42,"RthumbA"],[43,"RthumbB"],[44,"RthumbC"],[45,"RindexA"],[46,"RindexB"],[47,"RindexC"],[48,"RmiddleA"],[49,"RmiddleB"],[50,"RmiddleC"],[51,"RringA"],[52,"RringB"],[53,"RringC"],[54,"RpinkyA"],[55,"RpinkyB"],[56,"RpinkyC"],[57,"LsHELP"],[58,"RsHELP"],[59,"LshPlate_A"],[60,"RshPlate_A"],[61,"Rcollar"],[62,"Lcollar"],[63,"Lball"],[64,"Rball"]],"sml-type-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"sml_bar"],[6,"smlbaratype"],[7,"smlbaratypeb"],[8,"topleft"],[9,"bottomright"],[10,"topleft2"],[11,"bottomright2"]],"snow-dinobreak-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"bonea"],[5,"boneb"],[6,"bonec"],[7,"boned"],[8,"bonee"],[9,"bonef"],[10,"boneg"],[11,"boneh"],[12,"bonei"],[13,"bonej"],[14,"bonek"],[15,"bonel"],[16,"bonem"],[17,"bonen"],[18,"boneo"]],"snow-dinobreak-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"snow-icebreak-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"snow-icebreak-b-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"icebreaka"],[5,"icebreakb"],[6,"icebreakc"],[7,"icebreakd"],[8,"icebreake"],[9,"icebreakf"],[10,"icebreakg"],[11,"icebreakh"],[12,"icebreaki"],[13,"icebreakj"],[14,"icebreakk"],[15,"icebreakl"],[16,"icebreakm"]],"snow-icebreak-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"snow-icebreak-c-explode-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"icebreaka"],[5,"icebreakb"],[6,"icebreakc"],[7,"icebreakd"],[8,"icebreake"],[9,"icebreakf"],[10,"icebreakg"],[11,"icebreakh"],[12,"icebreaki"]],"snow-icebreak-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"spar-lighthouse-light-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"lightglow"]],"split-screen-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"split_screen"],[6,"splitscreentype"],[7,"topleft"],[8,"bottomright"]],"start-banner-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"start-light-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"starting-linebot-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"projector"]],"tha-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lshoulder"],[9,"Lelbow"],[10,"Lhand"],[11,"Rshoulder"],[12,"Relbow"],[13,"Rhand"],[14,"hips"],[15,"Lthigh"],[16,"Lknee"],[17,"Lankle"],[18,"Rthigh"],[19,"Rknee"],[20,"Rankle"],[21,"maskaa"],[22,"maskab"],[23,"LthumbA"],[24,"LthumbB"],[25,"LthumbC"],[26,"LindexA"],[27,"LindexB"],[28,"LindexC"],[29,"LmiddleA"],[30,"LmiddleB"],[31,"LmiddleC"],[32,"LringA"],[33,"LringB"],[34,"LringC"],[35,"LpinkyA"],[36,"LpinkyB"],[37,"LpinkyC"],[38,"RthumbA"],[39,"RthumbB"],[40,"RthumbC"],[41,"RindexA"],[42,"RindexB"],[43,"RindexC"],[44,"RmiddleA"],[45,"RmiddleB"],[46,"RmiddleC"],[47,"RringA"],[48,"RringB"],[49,"RringC"],[50,"RpinkyA"],[51,"RpinkyB"],[52,"RpinkyC"],[53,"Lball"],[54,"Rball"]],"thb-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lshoulder"],[9,"Lelbow"],[10,"Lhand"],[11,"Rshoulder"],[12,"Relbow"],[13,"Rhand"],[14,"hips"],[15,"Lthigh"],[16,"Lknee"],[17,"Lankle"],[18,"Rthigh"],[19,"Rknee"],[20,"Rankle"],[21,"maskaa"],[22,"maskab"],[23,"LthumbA"],[24,"LthumbB"],[25,"LthumbC"],[26,"LindexA"],[27,"LindexB"],[28,"LindexC"],[29,"LmiddleA"],[30,"LmiddleB"],[31,"LmiddleC"],[32,"LringA"],[33,"LringB"],[34,"LringC"],[35,"LpinkyA"],[36,"LpinkyB"],[37,"LpinkyC"],[38,"RthumbA"],[39,"RthumbB"],[40,"RthumbC"],[41,"RindexA"],[42,"RindexB"],[43,"RindexC"],[44,"RmiddleA"],[45,"RmiddleB"],[46,"RmiddleC"],[47,"RringA"],[48,"RringB"],[49,"RringC"],[50,"RpinkyA"],[51,"RpinkyB"],[52,"RpinkyC"],[53,"Lball"],[54,"Rball"]],"thc-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lshoulder"],[9,"Lelbow"],[10,"Lhand"],[11,"Rshoulder"],[12,"Relbow"],[13,"Rhand"],[14,"hips"],[15,"Lthigh"],[16,"Lknee"],[17,"Lankle"],[18,"Rthigh"],[19,"Rknee"],[20,"Rankle"],[21,"maskaa"],[22,"maskab"],[23,"LthumbA"],[24,"LthumbB"],[25,"LthumbC"],[26,"LindexA"],[27,"LindexB"],[28,"LindexC"],[29,"LmiddleA"],[30,"LmiddleB"],[31,"LmiddleC"],[32,"LringA"],[33,"LringB"],[34,"LringC"],[35,"LpinkyA"],[36,"LpinkyB"],[37,"LpinkyC"],[38,"RthumbA"],[39,"RthumbB"],[40,"RthumbC"],[41,"RindexA"],[42,"RindexB"],[43,"RindexC"],[44,"RmiddleA"],[45,"RmiddleB"],[46,"RmiddleC"],[47,"RringA"],[48,"RringB"],[49,"RringC"],[50,"RpinkyA"],[51,"RpinkyB"],[52,"RpinkyC"],[53,"Lball"],[54,"Rball"]],"this-way-arrow-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"arrow"]],"this-way-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-long-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-long-circle-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-med-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-med-circle-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-short-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-debris-short-circle-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-time-freeze-cage-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-time-freeze-long-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-time-freeze-med-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"time-freeze-time-freeze-short-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"top-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"top_bar"],[6,"topbartype"],[7,"topleft"],[8,"bottomright"],[9,"topleft1"],[10,"bottomright1"]],"tor-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"hairbase"],[9,"hairmid"],[10,"Rearbase"],[11,"Rmidear"],[12,"Learbase"],[13,"Lmidear"],[14,"Lshoulder"],[15,"Lelbow"],[16,"Lhand"],[17,"LthumbA"],[18,"LpinkyA"],[19,"LpinkyB"],[20,"LpinkyC"],[21,"Rshoulder"],[22,"Relbow"],[23,"Rhand"],[24,"RthumbA"],[25,"RpinkyA"],[26,"RpinkyB"],[27,"RpinkyC"],[28,"hips"],[29,"Lthigh"],[30,"Lknee"],[31,"Lankle"],[32,"Lball"],[33,"Rthigh"],[34,"Rknee"],[35,"Rankle"],[36,"Rball"],[37,"LthumbB"],[38,"LthumbC"],[39,"LindexA"],[40,"LindexB"],[41,"LindexC"],[42,"LmiddleA"],[43,"LmiddleB"],[44,"LmiddleC"],[45,"LringA"],[46,"LringB"],[47,"LringC"],[48,"RthumbB"],[49,"RthumbC"],[50,"RindexA"],[51,"RindexB"],[52,"RindexC"],[53,"RmiddleA"],[54,"RmiddleB"],[55,"RmiddleC"],[56,"RringA"],[57,"RringB"],[58,"RringC"],[59,"Lgun"]],"train-car-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"end"]],"train-car-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"end"]],"train-car-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"end"]],"train-loco-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"l_light"],[5,"r_light"]],"training-marker-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"training-wall-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"tune-meter-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"meter_bar"],[6,"topleft"],[7,"bottomright"],[8,"topleft2"],[9,"bottomright2"]],"tune-type-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"side_bar"],[6,"topleft"],[7,"bottomright"],[8,"topleft1"],[9,"bottomright1"]],"ur8-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lshoulder"],[9,"Lelbow"],[10,"Lhand"],[11,"Rshoulder"],[12,"Relbow"],[13,"Rhand"],[14,"hips"],[15,"Lthigh"],[16,"Lknee"],[17,"Lankle"],[18,"Rthigh"],[19,"Rknee"],[20,"Rankle"],[21,"rodRbase"],[22,"rodREND"],[23,"rodLbase"],[24,"LindexA"],[25,"LpinkyA"],[26,"LpinkyB"],[27,"LThumbA"],[28,"LThumbB"],[29,"LThumbC"],[30,"LForeA"],[31,"LForeB"],[32,"LForeC"],[33,"LMidA"],[34,"LMidB"],[35,"LMidC"],[36,"LAftA"],[37,"LAftB"],[38,"LAftC"],[39,"RindexA"],[40,"RpinkyA"],[41,"RpinkyB"],[42,"RThumbA"],[43,"RThumbB"],[44,"RThumbC"],[45,"RForeA"],[46,"RForeB"],[47,"RForeC"],[48,"RMidA"],[49,"RMidB"],[50,"RMidC"],[51,"RAftA"],[52,"RAftB"],[53,"RAftC"],[54,"shockRbase"],[55,"shockLbase"],[56,"Rshoulderplate"],[57,"Lshoulderplate"],[58,"Lout_toeA"],[59,"Lout_toeB"],[60,"Lmid_toe_a"],[61,"Lmid_toe_b"],[62,"Lin_toeA"],[63,"Lin_toeB"],[64,"LheelA"],[65,"Rout_toeA"],[66,"Rout_toeB"],[67,"Rmid_toe_a"],[68,"Rmid_toe_b"],[69,"Rin_toeA"],[70,"Rin_toeB"],[71,"RheelA"]],"vehicle-explosion-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main_"],[4,"fuseb_"],[5,"fusea_"],[6,"fusec_"],[7,"nosea_"],[8,"enginea_"],[9,"sheld_"],[10,"engineb_"],[11,"intake_"],[12,"rudder_"],[13,"rearbraker_"],[14,"rearbrakel_"],[15,"tailfinr_"],[16,"tailfinl_"],[17,"frontfinr_"],[18,"frontfinl_"]],"weapon-drone-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"muzzleL1"],[5,"muzzleL2"],[6,"muzzleR1"],[7,"muzzleR2"]],"wind-rotor-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"wm-docks-crane-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"cranerot"],[5,"craterot"],[6,"cratedrop"]],"wm-drome-wind-machine-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"wm-fireworks-ship-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"fireworks_"],[5,"fireworks_1"]],"wm-kras-circular-tower-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"toprot"]],"wm-track-car-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"exhaust_"]],"world-map-atoll-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-canspar-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-canyon-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-cliffs-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-coliseum-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-desarena-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-desisle-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-dockkra-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-docks-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-drome-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-dromedoc-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-fort-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-hav-tour-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-haven-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-havenarena-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-havjung-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-havsew-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-ice-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-ice-tour-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-iceberg-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-icepass-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-jungle-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-kcross-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-kras-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-kras-tour-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-peak-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-sewer-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-snow-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-snowbowl-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-spar-tour-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-spargus-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-spartem-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"world-map-temple-mesh-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"wrong-way-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]]} diff --git a/decompiler/config/jakx/ntsc_v1/label_types.jsonc b/decompiler/config/jakx/ntsc_v1/label_types.jsonc new file mode 100644 index 0000000000..014b79a8d0 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/label_types.jsonc @@ -0,0 +1,6 @@ +{ + // "math": [ + // ["L108", "(pointer float)", 32], + // ["L109", "(pointer float)", 32] + // ], +} diff --git a/decompiler/config/jakx/ntsc_v1/part-groups.min.json b/decompiler/config/jakx/ntsc_v1/part-groups.min.json new file mode 100644 index 0000000000..b1b77284bf --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/part-groups.min.json @@ -0,0 +1 @@ +[[640,"group-nest-fog"],[651,"group-beast-mh-centipede-shot-glow"],[650,"group-mh-centipede-shot-explosion"],[649,"group-mh-centipede-shot-trail"],[648,"part-mh-centipede-explosion-splats"],[647,"group-mh-centipede-death"],[646,"group-mh-centipede-impact-dust-up"],[645,"group-mh-centipede-impact"],[644,"group-mh-centipede-dirt-fall-off"],[643,"group-mh-centipede-crater-mark"],[642,"group-mh-centipede-breach"],[641,"group-mh-centipede-before-breach"],[236,"group-mech-explode-death"],[241,"group-for-turret-scorched-earth"],[240,"group-for-turret-shot-die"],[239,"group-for-turret-shot-hit"],[783,"group-robotank-barrel-sparks"],[782,"group-robotank-steamescape"],[781,"group-fac-gunturret-casing"],[780,"group-fac-gunturret-smoke"],[779,"group-fac-gunturret-hit"],[778,"group-factory-vehicle-shot"],[777,"group-fac-guntower-particle"],[776,"group-gun-warf-shot-hit"],[775,"part-fturret-lightning-glow"],[774,"group-fturret-shot-die"],[773,"group-fturret-grenade"],[772,"group-fturret-shot-hit"],[771,"group-fturret-shot-hit-object"],[770,"part-ftank-lightning-glow"],[769,"group-ftank-shot-die"],[768,"group-ftank-shot-hit"],[767,"group-ftank-shot-hit-object"],[766,"part-ffight-lightning-glow"],[765,"group-ffight-shot-die"],[764,"group-ffight-shot-hit"],[763,"group-ffight-shot-hit-object"],[1469,"part-cty-sniper-turret-lightning-glow"],[1468,"group-cty-sniper-turret-shot-die"],[1467,"group-cty-sniper-turret-shot-hit"],[1466,"group-cty-sniper-turret-shot-hit-object"],[1465,"group-sniper-turret-explosion"],[1464,"group-sniper-battery-explosion"],[1463,"group-cty-sniper-battery-glow"],[1454,"group-protect-gunship-cannon-charge"],[1453,"group-grp-gunship-explosion"],[1452,"group-missile-beacon"],[1451,"group-gunship-damage"],[1450,"group-gunship-laser-guard-hit"],[531,"group-fuel-pickup-pop"],[530,"group-nuke-fuel"],[529,"group-torpedo-explosion"],[528,"group-nuke-water-splash"],[527,"group-nuke-water-wake"],[526,"group-daxter-missile-heathaze"],[1435,"group-dummy-explode-assault-bombbot-explode"],[1434,"group-lure-sirens-dim"],[1433,"group-lure-sirens"],[1432,"group-missile-thruster-fire"],[1449,"group-part-dark-egg-mist-active"],[1462,"group-bt-mh-flyer-engine"],[1461,"group-gun-hellcat-shot-hit"],[1460,"group-bt-roboguard-explode"],[1459,"group-grunt-hit-pickup"],[1458,"group-bt-dummy"],[1457,"group-bt-mh-flyer-explosion"],[1456,"group-flyer-shot-trail"],[1455,"group-barrel-damage"],[1539,"group-bb-freeze"],[1538,"group-bb-freeze-2"],[1537,"group-bb-freeze-3"],[1536,"group-bb-goal"],[1535,"group-bb-finder-nofade"],[1534,"group-bb-finder"],[1533,"group-trail-goal-touched"],[1532,"group-trail-goal"],[1531,"group-goal-explode"],[1552,"group-desert-ring-birth-final"],[1551,"group-desert-ring-birth"],[1550,"group-desert-ring-explode-final"],[1549,"group-desert-ring-explode"],[1548,"group-desert-ring-final"],[1547,"group-desert-ring"],[1546,"group-spirit-explode"],[1545,"group-score-drop-a"],[1544,"group-score-drop-b"],[1543,"group-score-drop-c"],[1542,"group-bb-ring-finder-nofade"],[1541,"group-bb-ring-finder"],[1540,"group-spirit-goal"],[1230,"group-desert-blowing-dust"],[1229,"group-desert-impact-dust-blow"],[1228,"group-desert-impact-dust"],[1227,"group-tired-desert-heathaze"],[1226,"group-lost-desert-heathaze"],[1225,"group-drop-desert-heathaze"],[1224,"group-ctypal-palace-break-trailer-large"],[1223,"group-ctypal-palace-break-trailer-medium"],[1222,"group-ctypal-palace-break-trailer-small"],[1221,"group-ctypal-support-break-trailer"],[1220,"group-ctypal-palace-break-explode-large"],[1219,"group-ctypal-palace-break-explode-medium"],[1218,"group-ctypal-palace-break-explode-fountain"],[1217,"group-ctypal-palace-break-explode-small"],[1216,"group-palace-tracer-fire"],[1215,"group-palace-flak"],[1214,"group-palace-dust-cloud-big"],[1213,"group-palace-dust-cloud-first"],[1212,"group-palace-smoke-plume"],[1211,"group-palace-huge-explosion"],[1210,"group-palace-small-explode"],[1209,"group-palace-missile-explode"],[1208,"group-palace-missile"],[1207,"group-palace-hellcat-explode"],[1206,"group-hellcat-thruster-thick-trail"],[1205,"group-hellcat-thruster-fire-trail"],[1204,"group-hellcat-thruster-little-trail"],[1203,"group-hellcat-thruster-trail"],[1202,"group-hellcat-thrusters"],[1201,"group-drop-beacon-glow"],[1200,"group-drop-handcuff-light"],[1199,"group-drop-thruster-trail"],[1198,"group-drop-thrusters"],[1197,"group-drop-thrusters-powerdown"],[1196,"group-drop-pecker-dustoff"],[1195,"group-drop-dust-cloud"],[1194,"group-drop-dust-takeoff"],[1193,"group-drop-dust-landing"],[1192,"group-drop-dust-trail"],[1191,"group-drop-shooting-dust"],[1190,"group-palcab-dest-white-eco"],[1189,"group-palcab-dest-fire-smoke"],[1188,"group-palcab-dest-steam"],[1187,"group-palcab-dest-fire"],[1186,"group-palcab-dest-smoke"],[1185,"group-palcab-city-glows-3"],[1184,"group-palcab-city-glows-2"],[1183,"group-palcab-city-glows-1"],[1182,"group-palcab-cable-blue-rotaters"],[1181,"group-palcab-mountain-glows"],[1180,"group-palcab-fiery-smokestack"],[1179,"group-palcab-strip-glows"],[1178,"group-palcab-cable-lights"],[1177,"group-palcab-misc-citylights-blue-2"],[1176,"group-palcab-misc-citylights-blue-1"],[1175,"group-palcab-misc-citylights-red-3"],[1174,"group-palcab-misc-citylights-red-2"],[1173,"group-palcab-misc-citylights-red-1"],[1172,"group-palcab-palace-fire"],[1171,"group-palcab-stadium-lights"],[1170,"group-palcab-birds"],[1169,"group-palcab-spark-rain-16"],[1168,"group-palcab-spark-rain-15"],[1167,"group-palcab-spark-rain-14"],[1166,"group-palcab-spark-rain-13"],[1165,"group-palcab-spark-rain-12"],[1164,"group-palcab-spark-rain-11"],[1163,"group-palcab-spark-rain-10"],[1162,"group-palcab-spark-rain-9"],[1161,"group-palcab-spark-rain-8"],[1160,"group-palcab-spark-rain-7"],[1159,"group-palcab-spark-rain-6"],[1158,"group-palcab-spark-rain-5"],[1157,"group-palcab-spark-rain-4"],[1156,"group-palcab-spark-rain-3"],[1155,"group-palcab-spark-rain-2"],[1154,"group-palcab-spark-rain-1"],[1153,"group-palcab-lights"],[1152,"group-palroof-lightning-pole-off"],[1151,"group-palroof-lightning-pole"],[1150,"group-palroof-runoff-low"],[1149,"group-palroof-runoff-med"],[1148,"group-palroof-runoff-high"],[1147,"group-palroof-window-small"],[1146,"group-palroof-window-large"],[1333,"group-precurc-purple-glow-small"],[1332,"group-precurc-green-glow-small"],[1331,"group-precurc-green-steam"],[1330,"group-precurc-bulb-green-glow-long"],[1329,"group-precurc-bulb-green-glow"],[1328,"group-placeholder-single-shockwave"],[1327,"group-precura-engulfing-death"],[1326,"group-placeholder-single-laser"],[1325,"group-kg-bomb-explosion"],[1324,"group-debug-placeholder-multiple-generator"],[1323,"group-precura-rtableb"],[1322,"group-precura-green-glow-small"],[1321,"group-precura-green-steam"],[1320,"group-precura-bulb-green-glow-long"],[1319,"group-precura-bulb-green-glow"],[1318,"group-gem-explosion"],[1317,"group-gem-d-smoke"],[1316,"group-shock-wave"],[1315,"group-bomb-spawner"],[1314,"group-platform-effect"],[1313,"group-precura-generator-explode"],[1312,"group-precurd-bulb-ceiling-glow"],[1311,"group-precurd-bulb-green-glow-long"],[1310,"group-precurd-bulb-green-glow-small"],[1309,"group-precur-debris-wind"],[1308,"group-airlock-sucking"],[1307,"group-errol-jetpack"],[1306,"group-fma-lightjak-get-off"],[1305,"group-dark-eco-gun-charge"],[1304,"group-light-eco-gun-charge"],[1303,"group-precursor-ship-beam-hit"],[1302,"group-final-beam-cut-sparks"],[1301,"group-final-beam-rise-mist"],[1300,"group-beam-combine-flash"],[1299,"group-precursor-ship-explosion"],[1294,"group-veger-to-otsel-zap"],[1293,"group-railx-warpgate"],[1292,"group-railx-veger-transform"],[1291,"group-railx-ottsel-bubble"],[1290,"group-railx-veger-bubble"],[1289,"group-railx-shoot-at-veger"],[1288,"group-railx-room-light"],[1287,"group-railx-veger-glow"],[1286,"group-railx-rod-of-god"],[1285,"group-dark-eco-cannon-charge"],[1284,"group-light-eco-cannon-charge"],[1283,"group-railx-eco-sphere-glow"],[1282,"group-railx-eco-sphere-glow-ramp-up"],[1281,"group-railx-oracle-eye-glow"],[1280,"group-railx-oracle-eye-open"],[1279,"group-railcst-dust-landing"],[1278,"group-fma-hover-vehicle-exhaust-glow"],[1277,"group-leader-staff-shot-glow"],[1276,"group-railx-precursor-entity"],[1275,"group-fma-railx-precursor-entrance-flash"],[1274,"group-combx-capsulescreen"],[1273,"group-combx-smallscreen"],[1272,"group-combx-mediumscreen"],[1271,"group-combx-bigscreen"],[1270,"group-combx-yellowstrip"],[1269,"group-combx-orbblueglow"],[1268,"group-combx-rimlight"],[1267,"group-combx-yellowledglow"],[1266,"group-combx-blueled"],[1265,"group-combx-yellowled"],[1264,"group-combx-blueoval"],[1263,"group-combx-yellowoval"],[1262,"group-pedestal-blue-glow"],[1261,"group-combx-small-yellow-glow"],[1260,"group-combx-medium-yellow-glow"],[1259,"group-combx-big-yellow-glow"],[1258,"group-fma-lightjak-getshield-flash"],[1257,"group-fma-lightjak-getshield-gravitate"],[1256,"group-fma-lightjak-getshield"],[1255,"group-fma-precursor-entrance-flash"],[1254,"group-fma-medallion-car-charge"],[1253,"group-fma-medallion-car-beam"],[1252,"group-outro-precursor-entity"],[1251,"group-comb-ceiling-panel-yellow-glow"],[1250,"group-comb-mainwall-blue-glow"],[1249,"group-comb-widetube-yellow-glow"],[1248,"group-comb-lighttube-yellow-glow"],[1247,"group-comb-powerdisc-blue-glow"],[1246,"group-comb-brightlight-big-yellow-glow"],[1245,"group-comb-light-yellow-glow"],[1244,"group-comb-sphere-yellow-glow"],[1243,"group-comb-shelltube-yellow-glow"],[1242,"group-comb-marker-small-red-glow"],[1241,"group-comb-marker-red-glow"],[1240,"group-comb-bigblue-glow"],[1239,"group-comb-supp-blue-glow"],[1238,"group-hugelight-small-yellow-glow"],[1237,"group-hugelight-big-yellow-glow"],[1236,"group-comb-arch-yellow-glow"],[1235,"group-comb-obstacle-glow"],[1234,"group-comb-hover-vehicle-exhaust-distortion"],[1233,"group-comb-hover-vehicle-exhaust-glow"],[1298,"group-fma-rub-hover-vehicle-exhaust-glow"],[1297,"group-fma-rhino-smoke"],[1296,"group-rubble-missile-explode"],[1295,"group-rubble-missile"],[1029,"group-dm-mine-spider-explode"],[1028,"group-dm-mine-spider-birth"],[1027,"group-elec-gate-sparks"],[1026,"group-rubble-tower-break"],[1003,"group-rhino-door-break"],[1025,"group-rubble-switch-sparks"],[1024,"group-rubble-switch-explode"],[1023,"group-rubble-switch-glow"],[1022,"group-rub-elec-gate"],[1021,"group-rub-missile-explode"],[1020,"group-rub-missile"],[1019,"group-rubble-barrel-fire"],[1018,"group-rubble-bulb-yellow-glow"],[1017,"group-rubble-wispy-smoke"],[1016,"group-rubble-rubble-crater-smoke"],[1015,"group-rubble-huge-smoke"],[1014,"group-rubble-rubble-smoke"],[1001,"group-rubble-break-door-bust"],[1002,"group-rub-dark-jak-door"],[1013,"group-rubble-break-dust-trail"],[1012,"group-rubble-break-dust"],[1011,"group-small-yellow-glow"],[1010,"group-hugelight-yellow-glow"],[1009,"group-rubble-blue-glow"],[1008,"group-rubble-lighttube-yellow-glow"],[1007,"group-fma-neo-satellite-explosion"],[1006,"group-fma-door-break-dust"],[1005,"group-fma-battle-amulet-glow"],[1004,"group-mh-tower-smoke-stda"],[1000,"group-stadium-barrel-fire"],[999,"group-stadium-rubble-crater-smoke"],[998,"group-stadium-rubble-smoke"],[1448,"group-hellcat-tower-dust-landing"],[1447,"group-tower-hellcat-heathaze"],[1446,"group-tower-hellcat-thrusters-landing"],[1445,"group-tower-hellcat-thrusters-trail"],[1444,"group-tower-hellcat-thrusters-fire"],[1443,"group-tower-dark-warpgate"],[1442,"group-tower-errol-hand-glow"],[1441,"group-dark-tower-explosion"],[1440,"group-tower-purple-glow"],[1439,"group-tower-yellow-glow"],[1438,"group-tow-energy-bridge"],[1437,"group-tow-spawner-dead"],[1436,"group-tow-spawner-spawn"],[1385,"group-factory-debris-impact"],[1384,"group-factory-debris-trails"],[1383,"group-factory-daxter-impact-dust"],[1382,"group-factory-errol-jetpack-r"],[1381,"group-factory-errol-jetpack-l"],[1380,"group-enter-dark-warpgate"],[1379,"group-fac-boss-missile-explosion"],[1378,"group-facboss-sparks"],[1377,"group-factory-boss-launch-critter"],[1376,"group-factory-boss-superbomb-ring"],[1375,"group-factory-boss-superbomb-reticle"],[1374,"group-factory-boss-bomb-arrow"],[1373,"group-factory-boss-bomb-dot"],[1372,"group-factory-boss-bomb-corner"],[1371,"group-factory-boss-bomb-reticle"],[1370,"group-missile-bot-thruster"],[1369,"group-missile-bot-spark"],[1368,"group-missile-bot-fizzle"],[1367,"group-factory-boss-machine-explosion"],[1366,"group-factory-boss-machine-ring4"],[1365,"group-factory-boss-machine-ring3"],[1364,"group-factory-boss-machine-ring2"],[1363,"group-factory-boss-machine-ring1"],[1362,"group-factory-boss-machine-damaged-low-smoke"],[1361,"group-factory-boss-machine-damaged-high-smoke"],[1360,"group-factory-boss-shot-explosion"],[1359,"group-factory-boss-shot-trail"],[557,"group-neo-wasp-engine"],[556,"group-neo-wasp-gun-casing"],[555,"group-neo-wasp-gun-smoke"],[554,"group-neo-wasp-shot-die"],[553,"group-neo-wasp-shot-hit"],[525,"group-bombbot-bomb-warning-glow"],[807,"group-fac-fire-torch"],[806,"group-fact-big-torch"],[805,"group-mhtower-green-glowing-smoke"],[804,"group-mhtower-orange-glow"],[803,"group-citylights-newslums"],[802,"group-citylights-oldslums"],[801,"group-kgtower-smoke"],[800,"group-kgtower-smokestack"],[799,"group-steady-blue-light"],[798,"group-kgtower-flashing-blue-light-6"],[797,"group-kgtower-flashing-blue-light-5"],[796,"group-kgtower-flashing-blue-light-4"],[795,"group-kgtower-flashing-blue-light-3"],[794,"group-kgtower-flashing-blue-light-2"],[793,"group-kgtower-flashing-blue-light-1"],[792,"group-ctylights-steady-green-glow"],[791,"group-ctylights-steady-yellow-glow"],[790,"group-kgtower-steady-red-light"],[789,"group-kgtower-pulsating-red-light-6"],[788,"group-kgtower-pulsating-red-light-5"],[787,"group-kgtower-pulsating-red-light-4"],[786,"group-kgtower-pulsating-red-light-3"],[785,"group-kgtower-pulsating-red-light-2"],[784,"group-kgtower-pulsating-red-light-1"],[762,"group-hellcat-dust-landing-fac"],[761,"group-hellcat-thruster-trail-fac"],[760,"group-hellcat-thrusters-follow"],[759,"group-hellcat-thrusters-fac"],[758,"group-hellcat-thrusters-fire"],[757,"group-fma-hellcat-heathaze"],[756,"group-fma-hellcat-heathaze-ground"],[755,"group-fac-rotfan-barrier"],[754,"group-fac-switch-glow-green"],[753,"group-fac-switch-glow-red"],[752,"group-fac-robopod-bust"],[751,"group-fac-break-fence-bust"],[750,"group-fac-break-floor-bust"],[749,"group-fac-grate-yellow-glow"],[748,"group-fac-glowt-yellow-glow"],[747,"group-fac-glowlite-yellow-glow"],[746,"group-fac-volumelight-yellow-glow"],[745,"group-fac-steam"],[744,"group-fac-blinklite-glow"],[743,"group-fac-supportarm-white-glow"],[742,"group-fac-cornertower-white-glow"],[741,"group-fac-topsidewall-white-glow"],[740,"group-fac-bulb-red-glow"],[739,"group-fac-spot-white-glow"],[738,"group-fac-hangingbrace-white-glow"],[737,"group-fac-launchpad-red-glow"],[736,"group-fac-positionlight-yellow-glow"],[735,"group-gun-tower-hit-object"],[734,"group-gun-tower-hit-explosion"],[733,"group-fac-target-explosion"],[732,"group-fac-tank-explosion"],[731,"group-fac-gun-tower-explosion"],[730,"group-fac-fighter-explosion"],[729,"group-hellcat-thrust-afterburn"],[728,"group-hellcat-thrust"],[596,"group-forest-telescope-eye-beam"],[595,"group-day-star-fma-forest"],[594,"group-forest-ring-birth-final"],[593,"group-forest-ring-birth"],[592,"group-forest-ring-explode-final"],[591,"group-forest-ring-explode"],[590,"group-forest-ring-final"],[589,"group-forest-ring"],[588,"group-for-statue-eyes"],[587,"group-for-tower-splash"],[586,"group-for-pillar-splash"],[585,"group-for-statue-explode"],[584,"group-for-statue-buildup"],[583,"group-for-statue-rise-no-rocks"],[582,"group-for-statue-rise"],[581,"group-forest-waterfall-splash"],[580,"group-forest-waterfall-base"],[579,"group-for-ring-finder-explosion"],[578,"group-for-ring-finder"],[577,"group-for-bridge-dust"],[576,"group-mh-plant-pop"],[575,"group-mh-plant-warning"],[574,"group-mh-plant-die"],[573,"group-mh-plant-flare-pop"],[572,"group-mh-plant-embers"],[571,"group-mh-plant-rebirth"],[247,"group-dp-bipedal-eye-glow"],[1356,"group-mine-boss-fma-dust2"],[246,"group-dp-bipedal-grenade-shot-hit"],[1355,"group-mine-boss-fma-dust"],[245,"group-dp-bipedal-grenade-shot"],[1354,"group-mine-boss-fma-dust-trailer"],[244,"group-dp-bipedal-drip"],[1353,"group-mine-bridge-fma-dust-trailer"],[243,"group-dp-bipedal-ambush-drip"],[1352,"group-temp-8"],[242,"group-dp-bipedal-ambush"],[1351,"group-temp-7"],[378,"group-terraformer-explosion"],[1487,"group-sewer-waterfall-base-big"],[377,"group-desert-scenes-hologram-light"],[1486,"group-sewer-waterfall-base"],[376,"group-desert-scenes-hologram-explosion"],[1485,"group-sewer-falls-tilt"],[375,"group-desert-scenes-impact-dust"],[1484,"group-sewer-whirlpool-center"],[374,"group-scenes-daxter-run-dust"],[1483,"group-sewer-falls-froth"],[373,"group-scenes-daxter-impact-dust"],[1482,"group-sew-yellow-grate-wake"],[372,"group-desert-scenes-beast-fall-dust"],[1481,"group-sew-grate-wake"],[371,"group-lizard-catch-buggy-dust-skid"],[1480,"group-sew-wake-small"],[370,"group-desert-beast-fall-crystal-glow"],[1479,"group-sew-fan-lasersight-hostile"],[369,"group-final-boss-head-smoke"],[1478,"group-sew-fan-lasersight"],[368,"group-chunks-slide-dust"],[1477,"group-sew-little-ridge-wake"],[367,"group-desert-dust-wave"],[1476,"group-sewer-panel-light-glow"],[366,"group-terraformer-fma2-hit-ground"],[1475,"group-sewer-light-glow"],[365,"group-terraformer-fma2-dust-trails"],[1474,"group-sewer-deadly-mist"],[364,"group-terraformer-fma2-thrusters-sm"],[1473,"group-sewer-green-steam"],[363,"group-terraformer-fma2-thrusters"],[1472,"group-sewer-hard-blowing-steam"],[362,"group-terraformer-fma2-smoke"],[1471,"group-sewer-steamvent"],[361,"group-terraformer-fma-thrusters-sm"],[1470,"group-sewer-gas"],[360,"group-terraformer-fma-thrusters"],[359,"group-terraformer-fma-smoke"],[358,"group-terraformer-fma-detach"],[357,"group-terraformer-fma-explosion"],[356,"group-terraformer-foot-impact-dust"],[355,"group-oasis-hellcat-heathaze"],[354,"group-oasis-hellcat-thruster-trail"],[353,"group-oasis-hellcat-thrusters"],[352,"group-oasis-hellcat-dust-trail"],[351,"group-oasis-medallion-sparkle"],[350,"group-desert-car-fly"],[349,"group-nst-barrier-egg-explode"],[348,"group-desert-barrier-explosion"],[347,"group-desert-shot"],[346,"group-desert-shot-muzzle"],[345,"group-desert-gun-charge"],[344,"group-desert-water-rocks-splash"],[343,"group-desert-waterfall-mist-rainbow"],[342,"group-desert-waterfall-mist-up"],[341,"group-desert-waterfall-splash"],[340,"group-desert-waterfall-mist-fall"],[339,"group-desert-bollard-fire"],[338,"group-stronghold-torchfire"],[337,"group-firepit-fire"],[336,"group-desert-totem-head-fire"],[335,"group-desert-palace-fire-beacon"],[334,"group-desert-small-bowl-fire"],[333,"group-desert-dust-devil"],[332,"group-desert-bowl-fire"],[331,"group-desert-hanging-fire"],[330,"group-volcano-smoke-all"],[447,"group-dm-tentacle-whip-hit-ground"],[446,"group-dm-tentacle-retract"],[445,"group-dm-tentacle-extend"],[444,"group-dm-tentacle-spores"],[443,"group-dm-tentacle-explosion"],[442,"group-dm-urchin-explosion"],[441,"group-desw-eco-tank-explosion"],[440,"group-prebot-critter-trail"],[427,"group-neo-satellite-buildup"],[426,"group-neo-satellite-explode"],[425,"group-neo-sat-damage-heavy"],[424,"group-neo-sat-damage-medium"],[423,"group-neo-sat-damage-light"],[422,"group-neo-sat-antenna-explode"],[421,"group-neo-sat-debris-fly"],[1530,"group-mh-wasp-explosion"],[420,"group-neo-sat-ground-dust"],[1529,"group-mh-wasp-engine"],[419,"group-neo-sat-ground-emerge"],[1528,"group-mh-wasp-gun-casing"],[418,"group-neo-sat-ground-impact"],[1527,"group-mh-wasp-gun-smoke"],[222,"group-ashelin-shot-hit"],[456,"group-catapult-target-scorched-earth"],[455,"group-catapult-target-glow"],[454,"group-catapult-embers-fire"],[453,"group-kamikaze-interceptor-fire"],[452,"group-v-catapult-shot-explosion"],[451,"group-v-catapult-shot-trail"],[450,"group-v-catapult-shot"],[449,"group-v-catapult-shot-idle"],[448,"group-v-catapult-shot-chargeup"],[439,"group-terraformer-foot-water-drop"],[438,"group-terraformer-lift-foot-from-water"],[437,"group-terraformer-foot-splash"],[436,"group-terraformer-foot-sand-drop"],[435,"group-terraformer-foot-mark"],[434,"group-terraformer-lift-foot"],[433,"group-terraformer-stomp-foot"],[432,"group-terraformer-mine-dust"],[431,"group-terraformer-drone-impact"],[430,"group-terraformer-drone-dust-up"],[429,"group-beast-terraformer-drone-glow"],[428,"group-terraformer-drone-explosion"],[416,"group-beast-foot-dust"],[1525,"group-mh-wasp-shot-hit"],[415,"group-beast-fall-dust"],[1524,"group-neo-juicer-shot-hit"],[414,"group-beast-hit"],[1523,"group-neo-grenadier-drip"],[413,"group-beast-grenade-glow"],[1522,"group-spydroid-orig-explode"],[412,"group-grenade-shot-explode-in-air"],[1521,"group-spydroid-orig-trail"],[411,"group-grenade-shot-explode"],[1520,"group-sew-laser-turret-casing"],[501,"group-arena-token-shadow"],[500,"group-arena-token-pickup"],[499,"group-arena-token"],[498,"group-wasstada-crowd-wedge"],[497,"group-part-wasstada-birds"],[496,"group-wasstada-bowl-fire"],[495,"group-wasstada-fire-big"],[494,"group-wasstada-fire"],[493,"group-wasstada-crucible-fire"],[492,"group-wasstada-lava-rocks-heat"],[491,"group-wasstada-lava-steam"],[490,"group-wasstada-lava-geyser-flame"],[489,"group-wasstada-lava-geyser-sploop"],[488,"group-wasstada-lava-sploop-box"],[487,"group-wasstada-lava-sploop"],[486,"group-wasstada-lava-flame"],[541,"group-maker-grenade-explosion-bottom"],[540,"group-maker-missile-explosion"],[539,"group-maker-grenade-explosion"],[538,"group-maker-explosion"],[537,"group-dm-flyer-missile"],[536,"group-dm-robot-splash"],[535,"group-dm-robot-ripple"],[534,"group-dm-robot-ambush"],[533,"group-skeet-splash"],[532,"group-skeet-explosion"],[235,"group-turret-explode"],[1344,"group-prebot-pillar-shatter"],[234,"group-turret-shot-hit"],[1343,"group-prebot-gun-shot-explosion"],[517,"group-pre-bubble-land-x"],[516,"group-pre-bubble-land-square"],[515,"group-pre-bubble-land-circle"],[514,"group-pre-bubble-land-triangle"],[513,"group-pre-bubble-birth-x"],[512,"group-pre-bubble-birth-square"],[511,"group-pre-bubble-birth-circle"],[510,"group-pre-bubble-birth-triangle"],[509,"group-pre-bubble-pop-x"],[508,"group-pre-bubble-pop-square"],[507,"group-pre-bubble-pop-circle"],[506,"group-pre-bubble-pop-triangle"],[505,"group-pre-bubble-x"],[504,"group-pre-bubble-square"],[503,"group-pre-bubble-circle"],[502,"group-pre-bubble-triangle"],[523,"group-player-leaper-ring-explode-final"],[522,"group-player-leaper-ring-explode"],[521,"group-leaper-ring-explode"],[520,"group-player-leaper-ring-final"],[519,"group-player-leaper-ring"],[518,"group-leaper-ring"],[524,"group-kanga-lizard-dust"],[410,"group-wasdoors-buggy-dust-skid"],[1519,"group-sew-laser-turret-smoke"],[485,"group-waswide-talltorch"],[484,"group-waswide-gaslamp"],[483,"group-part-wascitya-flies"],[482,"group-part-wascityb-birds"],[481,"group-part-water-wave-foam"],[480,"group-part-water-rocks-splash"],[479,"group-waswide-pump"],[478,"group-waswide-topdust"],[477,"group-waswide-steamvent"],[476,"group-waswide-chimney-small"],[475,"group-waswide-chimney-long-smoke"],[474,"group-waswide-chimney-double-smoke"],[473,"group-waswide-chimney-smoke"],[472,"group-waswide-chimney"],[471,"group-wascity-palace-fire-beacon"],[470,"group-day-star-fma"],[469,"group-wasteland-scenes-leaper-dust"],[468,"group-wascity-pre-game-res-text"],[467,"group-wascity-pre-game-crystal-creation"],[466,"group-wascity-pre-game-crystal-glow"],[465,"group-neo-satellite-explode-scene"],[464,"group-neo-satellite-buildup-scene"],[463,"group-sat-scrape-dirt"],[462,"group-sat-scrape-dust"],[461,"group-daxter-slide-dust"],[460,"group-wascity-pre-game-sat-sparks"],[459,"group-leaper-drool"],[458,"group-fma-daxter-impact-dust"],[457,"group-fma-leaper-dust"],[253,"group-ctywide-fruit"],[252,"group-msack-b-explode"],[251,"group-msack-a-explode"],[250,"group-mbasket-b-explode"],[249,"group-mbasket-a-explode"],[1358,"group-veger-staff-glow"],[248,"group-mcrate-explode"],[1357,"group-veger-staff-sparkles"],[238,"group-flut-attack-strike-ground"],[1347,"group-temp-3"],[237,"group-flut-trans-pad"],[1346,"group-temp-2"],[382,"group-wascity-burning-bush-holo-off"],[1491,"group-sew-wake-tiny"],[381,"group-wascity-burning-bush-holo-on"],[1490,"group-sew-wake-large"],[409,"group-tentacle-attack"],[1518,"group-sew-laser-turret-hit"],[408,"group-tentacle-warn"],[1517,"group-sewer-bubbles-daxter-pop"],[668,"group-temple-light-shaft"],[127,"group-eco-light-pill"],[384,"group-desert-buggy-dust-stop"],[1493,"group-sewer-waterfall-base-huge"],[667,"group-templea-medium-torch"],[126,"group-eco-green-pill-collect"],[383,"group-desert-buggy-dust"],[1492,"group-sewer-deep-mist"],[666,"group-templea-small-torch"],[125,"group-eco-green-pill"],[665,"group-temple-small-torch"],[124,"group-eco-green-collect"],[664,"group-temple-big-torch"],[123,"group-rod-of-god"],[1232,"group-des-cactus-explode"],[380,"group-desert-totem-eye-glow-pre"],[1489,"group-sew-wake-medium"],[663,"group-temple-candle"],[122,"group-talkbox-speak"],[1231,"group-des-big-cactus-explode"],[379,"group-desert-totem-eye-glow"],[1488,"group-sewer-waterfall-base-tube"],[662,"group-temple-interior-waterfall"],[121,"group-gun-dark-1-upgrade-shot"],[661,"group-temple-oracle-eyeglow"],[120,"group-gravity-gun-muzzle"],[119,"group-gravity-gun-rise-no-flare"],[118,"group-gravity-gun-rise"],[117,"group-gun-dark2-black-hole-glow"],[116,"group-gun-dark2-black-hole"],[115,"group-gun3-dark-scorched-earth"],[114,"group-gun-dark3-small"],[113,"group-gun-dark3-missile-trail-smoke"],[112,"group-gun-dark3-missile-trail"],[111,"group-gun-dark3-ring"],[110,"group-gun-dark3-stalk"],[109,"group-red-2-charge"],[108,"group-gun-blue3-shot-impact"],[107,"group-gun-blue-2-muzzle-flare"],[106,"gun-blue-muzzle-flare"],[105,"group-gun-green-shot-hit"],[104,"group-gun-dark-shot-hit"],[103,"group-gun-yellow-shot-die"],[102,"group-gun-yellow-shot-hit-object"],[101,"group-gun-yellow-shot-hit"],[100,"group-gun-yellow3-muzzle-smoke"],[99,"group-gun-yellow-shot-hit-object-3"],[639,"group-egg-spider-birth"],[98,"group-gun-yellow-shot-hit-3"],[638,"group-egg-spider-explosion"],[97,"group-gun-yellow-saucer-fizz"],[637,"group-mh-bat-jet-explosion"],[96,"group-gun-yellow-saucer-lights-dark"],[636,"group-mh-bat-explosion"],[95,"group-gun-yellow-saucer-lights"],[635,"group-mh-bat-charge-up"],[94,"group-gun-dark-shot-trail"],[634,"group-cocoon-grenade-shot"],[93,"group-jak-peacemaker-shot-hit"],[633,"group-cocoon-poison-gas-smoke"],[92,"group-gun-dark-shot-fired"],[632,"group-nest-green-light-glow"],[91,"group-gun-blue-shot-die"],[631,"group-nest-big-orange-light-glow"],[90,"group-gun-blue-shot-hit"],[630,"group-nest-orange-xmas-light-glow"],[89,"group-gun-red-3-scorched-earth"],[629,"group-nst-bridge-break-splash"],[88,"group-gun-red3-shot-explode"],[628,"group-nst-bridge-break-dust"],[87,"group-gun-red3-shot-glow"],[627,"group-turbo-ring-explode"],[86,"group-gun-red3-shot-fired"],[626,"group-turbo-ring"],[85,"group-gun-red-shot-reload"],[625,"group-part-nest-bats"],[84,"group-gun-red-shot-fired"],[624,"group-nest-mud-impact-rocks"],[83,"group-laser-glow"],[26,"group-just-poof-unk"],[1135,"group-farm-beetree-explode"],[25,"group-run-poof-unk"],[1134,"group-farm-marrow-explode"],[22,"group-land-poof-unk"],[1131,"group-ctyindb-steam-drift"],[623,"group-nest-ground-impact-rocks"],[82,"group-dark-maker-idol-eye-part"],[622,"group-nst-bridge-goo-explosion"],[81,"group-daxter-death-limb-zap"],[621,"group-nest-ground-impact-dust"],[80,"group-daxter-death-zap-smoke"],[620,"group-nest-ceiling-dust-2"],[79,"group-daxter-death-zap"],[619,"group-nest-ceiling-dust-1"],[78,"group-daxter-death-freeze"],[618,"group-nst-cocoon-c-explode"],[77,"group-darkjak-smack-hit"],[617,"group-cocoon-turret-hit"],[76,"group-darkjak-smack-wall-explode"],[616,"group-cocoon-turret-explosion"],[75,"group-darkjak-smack-charge"],[615,"group-cocoon-turret-glow"],[74,"group-darkjak-smack"],[614,"group-cocoon-big-egg-charge-up"],[73,"group-darkjak-smack-trail"],[613,"group-cocoon-big-egg-charge-down"],[72,"group-darkjak-transform"],[612,"group-cocoon-big-egg-glow"],[71,"group-darkjak-bomb"],[611,"group-nst-metalhead-egg-explode"],[70,"group-lightning-dark-shot-tip-hit-replace"],[69,"group-lightning-red-glow"],[68,"group-lightning-green-glow"],[67,"group-lightning-glow"],[66,"group-burn-death"],[65,"group-explode-death"],[64,"group-lava-death"],[63,"group-slime-death"],[29,"group-run-poof-snw"],[1138,"group-farm-chilirots-explode"],[28,"group-just-poof-stn"],[1137,"group-farm-small-cabbage-explode"],[27,"group-run-poof-stn"],[1136,"group-farm-cabbage-explode"],[24,"group-land-poof-pmt"],[1133,"group-ctyindb-tubes-smoke"],[23,"group-land-poof-stn"],[1132,"group-ctyindb-rising-steam"],[21,"group-land-poof-cwd"],[1130,"group-ctyindb-fast-steam"],[20,"group-land-poof-wod"],[1129,"group-ctyindb-bulb-red-glow-pulse"],[19,"group-land-poof-for"],[1128,"group-ctyindb-bulb-yellow-glow-b"],[18,"group-land-poof-grs"],[1127,"group-ctyindb-bulb-red-glow-b"],[17,"group-land-poof-ice"],[1126,"group-ctyindb-glowlite-yellow-glow-b"],[16,"group-land-poof-snw"],[1125,"group-ctyindb-rubble-smoke"],[15,"group-land-poof-drt"],[1124,"group-ctyind-rubble-crater-smoke"],[14,"group-land-poof-san"],[1123,"group-ctyindb-squarevent"],[30,"group-just-poof-snw"],[1139,"group-farm-sprinkler-barrels-water"],[542,"group-wc-turret-explode"],[1,"group-rain-screend-drop-real"],[1110,"group-ctyindb-sign-fashion-8x4"],[60,"group-slide-poof-wod"],[31,"group-just-footprint-snw"],[1140,"group-ctyfarma-light"],[543,"group-maker-damage-sparks"],[2,"group-stars"],[1111,"group-ctyindb-sign-praxis-banner-4x8"],[61,"group-slide-poof-cwd"],[32,"group-run-poof-ice"],[1141,"group-ctyfarma-drip-1"],[544,"group-maker-pre-explosion"],[3,"group-sun"],[1112,"group-ctyindb-sign-onin-knows-4x4"],[62,"group-dark-eco-death"],[545,"group-dm-final-explode"],[4,"group-green-sun"],[1113,"group-ctyindb-chimney"],[546,"group-wascity-turret-shot-hit"],[5,"group-moon"],[1114,"group-ctyindb-chimney-smoke"],[547,"group-wascity-turret-shot-hit-water"],[6,"group-day-star"],[1115,"group-ctyindb-chimney-small"],[548,"group-turret-reticle"],[7,"group-beach-launcher"],[1116,"group-ctyindb-red-big-lights-1"],[549,"group-turret-skeet"],[8,"group-jungle-launcher"],[1117,"group-ctyindb-red-big-lights-2"],[550,"group-maker-grenade-glow"],[9,"group-swamp-launcher"],[1118,"group-ctyindb-red-big-lights-3"],[551,"group-maker-grenade-shot-explode-far"],[10,"group-target-hit"],[1119,"group-ctyindb-red-big-lights-4"],[552,"group-maker-grenade-shot-explode"],[11,"group-spin-hit"],[1120,"group-ctyindb-red-big-lights-5"],[12,"group-punch-hit"],[1121,"group-ctyindb-red-big-lights-6"],[13,"group-smack-surface"],[1122,"group-ctyindb-smokestack"],[33,"group-just-poof-ice"],[1142,"group-ctyfarma-wall-bubbles"],[34,"group-run-poof-cwd"],[1143,"group-ctyfarmb-light"],[35,"group-just-poof-cwd"],[1144,"group-ctyfarmb-drip-1"],[36,"group-run-poof-wod"],[1145,"group-ctyfarmb-wall-bubbles"],[37,"group-just-poof-wod"],[38,"group-run-poof-pmt"],[39,"group-just-poof-pmt"],[40,"group-run-poof-grs"],[41,"group-just-poof-grs"],[42,"group-just-footprint-grs"],[43,"group-run-poof-for"],[44,"group-just-poof-for"],[45,"group-just-footprint-for"],[46,"group-run-poof-san"],[47,"group-just-poof-san"],[48,"group-just-footprint-san"],[49,"group-run-poof-drt"],[50,"group-just-poof-drt"],[51,"group-just-footprint-drt"],[52,"group-slide-poof-san"],[53,"group-slide-poof-drt"],[54,"group-slide-poof-grs"],[55,"group-slide-poof-for"],[56,"group-slide-poof-stn"],[57,"group-slide-poof-pmt"],[58,"group-slide-poof-snw"],[59,"group-slide-poof-ice"],[669,"group-tpl-watcher-exhaust-distort"],[128,"group-eco-dark-pill"],[385,"group-desert-buggy-dust-skid"],[1494,"group-sewer-waterfall-base-top"],[670,"group-tpl-watcher-laser-glow"],[129,"group-eco-green"],[386,"group-part-wascity-door-steam"],[1495,"group-sew-4-waterfalls"],[671,"group-tpl-watcher-laser-charge"],[130,"group-eco-dark-pill-move-collect"],[387,"group-part-wascity-door-pre-steam1"],[1496,"group-sew-moving-step-a-wake"],[672,"group-tpl-watcher-explosion"],[131,"group-generic-collect"],[388,"group-part-wascity-door-pre-steam2"],[1497,"group-sew-moving-step-b-wake"],[673,"group-tpl-break-door-a"],[132,"group-skill-glow-red"],[389,"group-part-wascity-door-big-steam1"],[1498,"group-sew-grate-bubbles"],[674,"group-tpl-break-door-explode"],[133,"group-skill-glow-yellow"],[390,"group-part-wascity-door-big-steam2"],[1499,"group-sewer-slide-froth"],[675,"group-tpl-break-alcove"],[134,"group-gem-glow"],[391,"group-part-wascity-door-big-pre-steam1"],[1500,"group-flyingsaw-sparks"],[676,"group-tpl-break-alcove-explode"],[135,"group-gem-collect"],[392,"group-part-wascity-door-big-pre-steam2"],[1501,"group-sew-fan-gust"],[677,"group-holo-halo"],[136,"group-ammo-yellow-collect"],[393,"group-wasdoors-gaslamp"],[1502,"group-sewer-rising-bubbles"],[678,"group-day-star-fma-temple"],[137,"group-ammo-red-collect"],[394,"group-wasdoors-red-lights"],[1503,"group-sewer-rising-bubbles-pop"],[679,"group-fma-egg-glow"],[138,"group-ammo-blue-collect"],[395,"group-elevator-palace-door"],[1504,"group-sewer-abyss-waterfall-mist"],[680,"group-fma-medallion-beam"],[139,"group-ammo-dark-collect"],[396,"group-elevator-palace-door-close"],[1505,"group-sew-laser-guard-hit"],[681,"group-fma-medallion-charge"],[140,"group-eco-dark-pill-collect"],[397,"group-desert-fireball-shot"],[1506,"group-sew-move-turret-hit-object"],[682,"group-temple-oracle-eye-glow"],[141,"group-green-collect"],[398,"group-desert-fireball-shot-trail"],[1507,"group-sew-move-turret-hit"],[142,"group-skate-point"],[399,"group-desert-fireball-explosion"],[1508,"group-sewer-water-trail"],[143,"group-skate-point-explode"],[400,"group-cloud-spread"],[1509,"group-sewer-water-trail-body"],[144,"group-part-vent-light-active"],[401,"group-desert-boss-slide-dust"],[1510,"group-sewer-water-trail-body-long"],[145,"group-part-vent-light-touched"],[402,"group-desert-final-boss-gate"],[1511,"group-sewer-water-splash"],[146,"group-part-vent-dark-active"],[403,"group-precursor-staff-shot-glow"],[1512,"group-sewer-water-edge-splash"],[147,"group-part-vent-dark-touched"],[404,"group-precursor-staff-shot"],[1513,"group-sewer-water-splash-jak"],[148,"group-part-vent-green-active"],[405,"group-precursor-staff-hit"],[1514,"group-sewer-water-splash-daxter"],[149,"group-placeholder-small"],[406,"group-ship-door-light"],[1515,"group-sewer-water-jak-rings"],[150,"group-placeholder-single"],[407,"group-mothership-thrusters"],[1516,"group-sewer-bubbles-daxter"],[151,"group-placeholder-multiple"],[152,"group-red-eco-strike-ground"],[153,"group-red-eco-spinkick"],[154,"group-eco-blue"],[155,"group-eco-blue-collect"],[156,"group-part-vent-blue-active"],[157,"group-part-vent-blue-inactive"],[158,"group-eco-red"],[159,"group-eco-red-collect"],[160,"group-part-vent-red-active"],[702,"group-waspala-waterfall-top"],[161,"group-part-vent-red-inactive"],[703,"group-waspala-waterfall-base"],[162,"group-part-vent-yellow-active"],[704,"group-waspala-waterwheel-up"],[163,"group-part-vent-yellow-inactive"],[705,"group-waspala-waterwheel-base"],[164,"group-eco-yellow"],[706,"group-waspala-small-waterwheel-up"],[165,"group-eco-yellow-collect"],[707,"group-waspala-small-waterwheel-base"],[166,"group-fuel-cell-starburst"],[708,"group-waspala-water-dripping"],[167,"group-money-starburst"],[709,"group-waspala-water-spout1"],[168,"group-buzzer-effect"],[710,"group-waspala-water-spout2"],[169,"group-blue-collect"],[711,"group-waspala-water-spout3"],[170,"group-yellow-collect"],[712,"group-waspala-water-spout4"],[171,"group-red-collect"],[713,"group-waspala-water-splash1"],[172,"group-darkjak-hadouken"],[714,"group-waspala-water-splash2"],[173,"group-darkjak-hadouken-trail"],[715,"group-waspala-water-splash3"],[174,"group-lightjak-get-on-charge"],[716,"group-waspala-water-splash4"],[175,"group-lightjak-get-on"],[717,"group-waspala-wallfire"],[176,"group-lightjak-get-off"],[718,"group-waspala-hanging-fire"],[177,"group-lightjak-regen"],[719,"group-waspala-crucible-fire"],[178,"group-lightjak-shield-start"],[720,"group-waspala-gargle-bubbles"],[179,"group-lightjak-shield-hit"],[721,"group-waspala-water-daxter-ring"],[180,"group-lightjak-freeze-hands"],[722,"group-waspala-water-jak-ring"],[181,"group-lightjak-freeze-burst"],[723,"group-waspala-hands-water-trail"],[182,"group-idol-activate"],[724,"group-waspala-farticle-bubbles"],[183,"group-lightning-dark-shot-tip-hit"],[189,"group-board-land-straight"],[190,"group-board-quick-jump"],[191,"group-board-launch"],[727,"group-fma-daxter-swim-ripples"],[186,"group-target-board-duck-charge"],[726,"group-damus-hand-sand"],[185,"group-target-board"],[725,"group-waspala-squeeze-water"],[184,"group-board-spin-attack"],[188,"group-board-zap-attack"],[187,"group-board-green-eco-zap-attack"],[192,"group-part-water-splash"],[193,"group-part-water-splash-small"],[194,"group-blue-hit-ground-effect"],[195,"group-crate-explode"],[196,"group-crate-steel-explode"],[197,"group-dark-eco-box-explosion"],[198,"group-part-tester"],[199,"group-debug-placeholder-small"],[200,"group-debug-placeholder-single"],[201,"group-debug-placeholder-multiple"],[202,"group-warpgate"],[203,"group-airtrain-dust-plume"],[204,"group-airtrain-dust-hover"],[205,"group-airtrain-thruster"],[206,"group-airtrain-thruster-off"],[207,"group-warp-hellcat-thruster"],[208,"group-warp-fma-dust-takeoff"],[209,"group-warp-fma-drop-thrusters"],[210,"group-warp-thruster-trail"],[211,"group-guard-shot-hit-object"],[212,"group-guard-shot-hit"],[213,"group-guard-grenade"],[214,"group-metalhead-shot-hit"],[215,"group-metalhead-shot-die"],[216,"group-metalhead-grenade-shot"],[217,"group-kg-huge-explosion"],[218,"group-kg-big-explosion"],[219,"group-kg-explosion"],[220,"group-kg-mid-explosion"],[221,"group-kg-small-explosion"],[224,"group-vehicle-explosion"],[225,"group-vehicle-engine-start"],[1334,"group-prebot-launch-critter"],[226,"group-part-wv-water-splash"],[1335,"group-prebot-gun-shot-trail"],[227,"group-gun-scorp-shells"],[1336,"group-prebot-eco-pillar-heat-up"],[228,"group-gun-scorp-shot-hit"],[1337,"group-prebot-eco-pillar-grow"],[229,"group-gun-scorp-shot-die"],[1338,"group-prebot-eco-pillar-cool-down"],[230,"group-toad-grenade-shot-explode"],[1339,"group-prebot-stuck-flame"],[231,"group-turbo-pickup"],[1340,"group-prebot-chasm-explosion"],[232,"group-turbo-pickup-explode"],[1341,"group-final-prebot-chasm-explosion"],[683,"group-temple-oracle-eye-open"],[684,"group-fma-lightjak-regen"],[685,"group-tpl-token-trail"],[686,"group-tpl-token"],[687,"group-tpl-token-pickup"],[688,"group-tpl-symbol"],[689,"group-tpl-symbol-touched"],[700,"group-temple-bridge-break-dust"],[701,"group-temple-bridge-break-kaboom"],[690,"group-templex-big-torch"],[691,"group-templex-fire-vase"],[692,"group-templex-fire-vase-large"],[693,"group-templex-fire-vase-small"],[694,"group-temple-waterfall-mist-fall"],[695,"group-temple-waterfall-splash"],[696,"group-temple-waterfall-mist-up"],[697,"group-temple-waterfall-mist-rainbow"],[698,"group-temple-break-dust"],[699,"group-temple-break-dust-trail"],[652,"group-glider-ring"],[653,"group-glider-ring-shootable"],[654,"group-distant-glider-ring"],[655,"group-glider-ring-explode"],[656,"group-wind-thermal"],[657,"group-glider-cloud"],[658,"group-glider-cloud-shadow"],[659,"group-volcano-smoke"],[660,"group-glider-blinking-dot"],[233,"group-indax-lava-death"],[1342,"group-prebot-chasm-explosion-comets"],[1386,"group-volcano-embers"],[277,"group-ctyind-rubble-smoke"],[1387,"group-volcano-lantern-glow"],[278,"group-ctyind-electric-arc"],[1388,"group-lava-shoot"],[279,"group-ctyslum-red-wall-light"],[1389,"group-volcano-lava-ripples"],[280,"group-ctyslum-blue-wall-light"],[1390,"group-volcano-lava-bubbles"],[281,"group-ctyslum-long-blue-light"],[1391,"group-volcano-lava-splash"],[282,"group-ctyslum-long-blue-lightb"],[1392,"group-lavawave-falls"],[283,"group-ctyslum-streetlight"],[1393,"group-volcano-lava-rocks-heat"],[284,"group-ctyslum-lamp-glow"],[1394,"group-steam-geyser-shoot"],[285,"group-ctyslum-yellow-light"],[1395,"group-lava-ball-spout"],[286,"group-ctyslum-steam-vent"],[1396,"group-volcano-leaf-fall"],[287,"group-ctyport-bulb-orange-glow"],[1397,"group-vol-lava-ball"],[288,"group-ctywide-green-chimney-smoke"],[1398,"group-vol-break-ground"],[289,"group-ctyslum-heater-haze"],[1399,"group-monk-mummy-finger-dust"],[290,"group-ctyslum-fan-haze"],[1400,"group-fma-idol-eye-glow"],[291,"group-ctyslum-small-fountain"],[1401,"group-fma-idol-break"],[292,"group-ctyslum-big-fountain"],[1402,"group-volcano-rock-break-dust"],[293,"group-ctyslum-big-fountain-top"],[1403,"group-volcano-rock-land-dust"],[294,"group-ctyslum-big-fountain-top-light"],[1404,"group-fma-lava-splash"],[295,"group-ctyslum-barrel-fire"],[1405,"group-mantis-dust-puff"],[296,"group-hijack-kgpickup-explode"],[1406,"group-mantis-birth-nest"],[297,"group-mh-tower-smoke-cty"],[1407,"group-vol-holo-halo"],[298,"group-pickup-sparks"],[1408,"group-volcano-glider-dust"],[299,"group-mhcity-door-explode"],[1409,"group-volcano-glider-dust-ground"],[300,"group-barrier-hand-shock"],[1410,"group-land-jak-volcano"],[301,"group-metal-head-egg-explosion"],[1411,"group-volcanox-lantern-glow"],[302,"group-fma-dark-eco-steam"],[257,"group-flitter-dust-puff"],[1412,"group-flitter-birth"],[303,"group-fma-hand-steam"],[597,"group-minb-light-glow"],[598,"group-min-target-sign-off"],[599,"group-min-target-sign-on"],[600,"group-minc-round-light-glow-always-on"],[601,"group-minc-round-light-glow"],[602,"group-minc-t-light-glow-always-on"],[603,"group-minc-t-light-glow"],[604,"group-bomb-train-explode"],[605,"group-bomb-train-sparks"],[606,"group-bomb-train-smoke"],[607,"group-bomb-train-light"],[608,"group-min-elec-gate"],[609,"group-min-door-explode"],[610,"group-min-door-trailer"],[1345,"group-temp-1"],[1348,"group-temp-4"],[1349,"group-temp-5"],[1350,"group-temp-6"],[254,"part-crimson-lightning-glow"],[258,"group-ctywide-stadium-light"],[259,"group-ctywide-baron-propoganda-holo"],[260,"group-ctywide-burning-bush-holo-on"],[261,"group-ctywide-burning-bush-holo-off"],[262,"group-ctywide-burning-bush-holo-red"],[263,"group-ctywide-palace-high-fire"],[264,"group-ctywide-misc-citylights-red-1"],[265,"group-ctywide-misc-citylights-red-2"],[266,"group-ctywide-misc-citylights-red-3"],[267,"group-ctywide-misc-citylights-red-4"],[268,"group-ctywide-misc-citylights-blue-1"],[269,"group-ctywide-misc-citylights-blue-2"],[270,"group-ctywide-misc-citylights-blue-3"],[271,"group-ctywide-cable-lights"],[272,"group-slums-seal-of-mar-glow"],[273,"group-ctywide-chimney"],[274,"group-ctywide-chimney-smoke"],[275,"group-ctyind-sparks"],[276,"group-ctyind-hot-gas"],[304,"group-fma-dark-eco-fire"],[1413,"group-gun-dummy-sparks"],[305,"group-fma-dark-eco-fire-flash"],[1414,"group-dummy-explode-cit-a"],[306,"group-fma-cigar-smoke"],[1415,"group-dummy-explode-cit-b"],[307,"group-fma-city-barrier-explosion-big"],[1416,"group-dummy-explode-cit-c"],[308,"group-cara-thrusters"],[1417,"group-dummy-explode-cit-d"],[309,"group-truck-explosion"],[1418,"group-dummy-explode-kg-big"],[310,"group-mhcity-window-glow"],[1419,"group-dummy-explode-kg-b"],[311,"group-mhcity-eye-large-glow"],[1420,"group-dummy-explode-kg-c"],[312,"group-mhcity-eye-small-glow"],[1421,"group-dummy-explode-kg-gun"],[313,"group-mhcity-eye-building-glow"],[1422,"group-dummy-explode-bomb-spider-shatter"],[314,"group-mhcity-eye-smallest-glow"],[1423,"group-dummy-explode-kg-bonus"],[315,"group-mhcity-green-chimney-smoke"],[1424,"group-dummy-explode-bomb-spider-explode"],[316,"group-mhcity-door-steam"],[1425,"group-gun-dummy-shield-explode"],[317,"group-mhcity-upper-ground-vent"],[1426,"group-gungame-vent"],[318,"group-mhcity-coping-vent"],[1427,"group-gungame-overhead-lights"],[319,"group-puffer-hard-blowing-steam"],[1428,"group-gungame-pipespew"],[320,"group-mhcity-goo-wall-bubbles"],[1429,"group-gungame-blue-lights"],[321,"group-mhcity-goo-small-bubbles"],[1430,"group-fma-daxter-guncourse-slide-dust"],[322,"group-mhcity-goo-medium-bubbles"],[1431,"group-fma-daxter-guncourse-land-dust"],[323,"group-mhcity-goo-bubbles-boogers"],[324,"group-mhcity-goo-bubbles-boogers-single"],[325,"group-puffer-egg-explode"],[326,"group-mhcity-nodule-hit"],[327,"group-mhcity-door-break-door-bust"],[328,"group-mhcity-dark-eco-door"],[329,"group-krimson-wall"],[929,"group-ctygenb-barrel-fire"],[930,"group-ctygenb-ground-vent-base"],[931,"group-ctygenb-ground-light"],[932,"group-ctygenb-red-light-small"],[933,"group-ctygenb-blue-light-wall"],[934,"group-ctygenb-blue-street-lamp"],[935,"group-ctygenb-steady-street-lamp"],[936,"group-ctygenb-flickering-street-lamp"],[937,"group-ctygenb-blue-vents-pipe-bent"],[938,"group-ctygenb-blue-vents-wall"],[939,"group-ctygenb-sign-8x4"],[940,"group-ctygenb-sign-4x8"],[941,"group-ctygenb-sign-4x4"],[942,"group-ctygenb-ticker-horizontal"],[943,"group-ctygenb-ticker-vertical"],[944,"group-ctygenb-ground-vent-square"],[945,"group-ctygenb-under-bridge-light"],[946,"group-ctygenb-flickering-under-bridge-light"],[947,"group-ctygenb-rubble-smoke"],[948,"group-ctygenb-rubble-crater-smoke"],[949,"group-ctygenb-sparks"],[950,"group-rubble-sparks-large"],[1078,"group-ctyinda-tri-red-light"],[1079,"group-ctyinda-tri-yellow-light"],[1080,"group-ctyinda-red-lights"],[1081,"group-ctyinda-blue-lights"],[1082,"group-ctyinda-wide-glows-yellow"],[1083,"group-ctyinda-sign-fashion-8x4"],[1084,"group-ctyinda-sign-praxis-banner-4x8"],[1085,"group-ctyinda-sign-onin-knows-4x4"],[1086,"group-ctyinda-chimney"],[1087,"group-ctyinda-chimney-smoke"],[1088,"group-ctyinda-chimney-small"],[1089,"group-ctyinda-red-big-lights-1"],[1090,"group-ctyinda-red-big-lights-2"],[1091,"group-ctyinda-red-big-lights-3"],[1092,"group-ctyinda-red-big-lights-4"],[1093,"group-ctyinda-red-big-lights-5"],[1094,"group-ctyinda-red-big-lights-6"],[1095,"group-ctyinda-smokestack"],[1096,"group-ctyinda-squarevent"],[1097,"group-ctyinda-bulb-red-glow"],[1098,"group-ctyinda-bulb-red-glow-pulse"],[1099,"group-ctyinda-glowlite-yellow-glow"],[1100,"group-ctyinda-fast-steam"],[1101,"group-ctyinda-rising-steam"],[1102,"group-ctyinda-steam-drift"],[1103,"group-ctyinda-red-floor-vent"],[1104,"group-ctyindb-red-floor-vent"],[1105,"group-ctyindb-red-lights"],[1106,"group-ctyindb-tri-red-light"],[1107,"group-ctyindb-tri-yellow-light"],[1108,"group-ctyindb-blue-lights"],[1109,"group-ctyindb-wide-glows-yellow"],[1030,"group-ctyport-roundvent"],[1031,"group-ctyport-roundvent-small"],[1032,"group-ctyport-low-vent"],[1033,"group-ctyport-waterspout"],[1034,"group-ctyport-chimney"],[1035,"group-ctyport-chimney-smoke"],[1036,"group-ctyport-drip"],[1037,"group-ctyport-blue-floor-vent"],[1038,"group-ctyport-blue-floor-vent-small"],[1039,"group-ctyport-red-big-lights-1"],[1040,"group-ctyport-red-big-lights-2"],[1041,"group-ctyport-red-big-lights-3"],[1042,"group-ctyport-red-big-lights-4"],[1043,"group-ctyport-red-big-lights-5"],[1044,"group-ctyport-red-big-lights-6"],[1045,"group-ctyport-blue-big-lights-1"],[1046,"group-ctyport-blue-big-lights-2"],[1047,"group-ctyport-blue-big-lights-3"],[1048,"group-ctyport-blue-big-lights-4"],[1049,"group-ctyport-blue-big-lights-5"],[1050,"group-ctyport-blue-big-lights-6"],[1051,"group-ctyport-red-lights"],[1052,"group-ctyport-blue-lights"],[1053,"group-ctyport-long-blue-lights"],[1054,"group-ctyport-green-lights"],[1055,"group-ctyport-green-lights-2"],[1056,"group-ctyport-sign-arrows-8x4"],[1057,"group-ctyport-hiphog-marquee-daxter"],[1058,"group-ctyport-rubble-crater-smoke"],[1059,"group-ctyport-wreckage-smoke"],[1061,"group-ctyport-blinking-red-glow"],[1062,"group-ctyport-citylights-blue-1"],[1063,"group-ctyport-citylights-blue-2"],[1064,"group-ctyport-citylights-blue-3"],[1065,"group-ctyport-citylights-blue-4"],[1066,"group-ctyport-rubble-fire"],[1067,"group-ctyport-red-tits-glow"],[1068,"group-ctyport-yellow-glow-pulse"],[1069,"group-ctyport-blue-glow"],[1070,"group-fma-missile-launch-thruster"],[1071,"group-fma-missile-launch-trail"],[1072,"group-krimson-wall-fma"],[1073,"group-scenes-daxter-crush-dust"],[1074,"group-fma-missile-thruster-fire"],[1075,"group-hijak-fma-missile-trail"],[1076,"group-daxter-sign-explosion"],[1077,"group-fma-barrier-explosion-big"],[951,"group-ctysluma-barrel-fire"],[952,"group-ctysluma-streetlight-glows"],[953,"group-ctysluma-steamescape"],[954,"group-ctysluma-steam-drift"],[955,"group-ctysluma-steamvent"],[956,"group-ctysluma-shootout-fire-blue"],[957,"group-ctysluma-shootout-fire-red"],[958,"group-ctyslum-rubble-crater-smoke"],[959,"group-ctyslum-rubble-smoke"],[960,"group-ctyslum-rubble-smoke-lit"],[961,"group-ctyslum-rubble-fire"],[962,"group-ctysluma-spray"],[963,"group-ctysluma-spray-check-userdata-8"],[964,"group-ctysluma-chimney"],[965,"group-ctysluma-chimney-smoke"],[966,"group-ctysluma-sign-m5-8x4"],[967,"group-ctysluma-sign-metalhead-8x4"],[968,"group-ctysluma-sign-crimson-4x8"],[969,"group-ctysluma-sign-doctors-4x4"],[970,"group-ctysluma-sign-hiphog-4x4"],[971,"group-ctysluma-sign-blank-4x4"],[972,"group-neon-baron"],[973,"group-ctyslumb-barrel-fire"],[974,"group-ctyslumb-streetlight-glows"],[975,"group-ctyslumb-chimney"],[976,"group-ctyslumb-chimney-smoke"],[977,"group-sign-ctyslumb-square-a"],[978,"group-sign-ctyslumb-square-b"],[979,"group-sign-ctyslumb-wide-a"],[980,"group-sign-ctyslumb-wide-b"],[981,"group-sign-ctyslumb-tall-a"],[982,"group-sign-ctyslumb-tall-b"],[983,"group-ctyslumb-steamescape"],[984,"group-ctyslumb-spray"],[985,"group-ctyslumb-spray-check-userdata-8"],[986,"group-ctyslumc-streetlight-glows"],[987,"group-ctyslumc-chimney"],[988,"group-ctyslumc-chimney-smoke"],[989,"group-sign-ctyslumc-big-a"],[990,"group-sign-ctyslumc-big-b"],[991,"group-sign-ctyslumc-square-a"],[992,"group-sign-ctyslumc-square-b"],[993,"group-sign-ctyslumc-wide-a"],[994,"group-sign-ctyslumc-wide-b"],[995,"group-sign-ctyslumc-tall-a"],[996,"group-sign-ctyslumc-tall-b"],[997,"group-gunship-target-explode"],[913,"group-onin-candle"],[914,"group-onin-octopus-tank-bubbles"],[915,"group-onin-big-tank-bubbles"],[916,"group-onin-medium-tank-bubbles"],[917,"group-onin-short-tank-bubbles"],[918,"group-onin-mini-tank-bubbles"],[919,"group-onin-flashpot"],[920,"group-onin-heatpot"],[921,"group-onin-tiki"],[922,"group-onin-bird-top"],[923,"group-onin-bird-cage"],[924,"group-onin-bugs"],[925,"group-onin-clap-effect"],[926,"group-onin-big-clap-effect"],[927,"group-onin-finger-effect"],[928,"group-onin-small-finger-effect"],[870,"group-vinroom-monitor-sparks"],[871,"group-vinroom-console-1"],[872,"group-vinroom-console-2"],[873,"group-vinroom-tv-matrix"],[874,"group-vinroom-tv-code"],[875,"group-vinroom-tv-2dcode"],[876,"group-vinroom-tv-dots"],[877,"group-vinroom-tv-bargraph"],[878,"group-vinroom-tv-numbers"],[879,"group-vinroom-tv-radar"],[880,"group-vinroom-tv-threebar-1"],[881,"group-vinroom-tv-threebar-2"],[882,"group-vinroom-tv-threebar-3"],[883,"group-vinroom-tv-splitdots"],[884,"group-vinroom-tv-smallradar"],[885,"group-vinroom-tv-final"],[886,"group-vinroom-center-sphere"],[887,"group-vinroom-console-little-red-light-1"],[888,"group-vinroom-console-little-red-light-2"],[889,"group-vinroom-console-little-red-light-3"],[890,"group-vinroom-console-little-red-light-4"],[891,"group-vinroom-console-little-red-light-5"],[892,"group-vinroom-console-little-red-light-6"],[893,"group-vinroom-console-little-red-light-7"],[894,"group-vinroom-console-little-red-light-8"],[895,"group-vinroom-console-blue-light-1"],[896,"group-vinroom-console-blue-light-2"],[897,"group-vinroom-console-blue-light-3"],[898,"group-vinroom-console-blue-light-4"],[899,"group-vinroom-console-blue-light-5"],[900,"group-vinroom-console-blue-light-6"],[901,"group-vinroom-console-blue-light-7"],[902,"group-vinroom-console-blue-light-8"],[903,"group-vinroom-console-orb"],[904,"group-vinroom-console-top-panel"],[905,"group-vinroom-red-wall-lights"],[906,"group-vinroom-red-wall-lights-small"],[907,"group-switcher-charge"],[908,"group-switcher-die"],[909,"group-glyph-charge"],[910,"group-glyph-die"],[911,"group-player-die"],[912,"group-power-scoreboard-points"],[848,"group-hiphog-blue-glow"],[849,"group-hiphog-rtablea"],[850,"group-hiphog-rtableb"],[851,"group-hiphog-rtablec"],[852,"group-hiphog-bigtable"],[853,"group-hiphog-center-sphere"],[854,"group-cigar-glow"],[855,"group-cigar-smoke"],[856,"group-cigar-smoke-blow"],[857,"group-cigar-ashes"],[858,"group-cigar-ashes-spit"],[859,"group-hiphog-red-light"],[860,"group-hiphog-ceiling-light"],[861,"group-hiphog-booth-ceiling-light"],[862,"group-hiphog-booth-wall-light"],[863,"group-hiphog-bar-light"],[864,"group-hiphog-booth-table-light"],[865,"group-hiphog-floor-light"],[866,"group-hiphog-neon-clock"],[867,"group-hiphog-neon-clock-small"],[868,"group-hiphog-mirror"],[869,"group-fma-hiphog-holo-glow"],[808,"group-freehq-center-sphere"],[809,"group-freehq-smalla"],[810,"group-freehq-smallb"],[811,"group-freehq-smallc"],[812,"group-freehq-smalld"],[813,"group-freehq-rtablea"],[814,"group-freehq-rtableb"],[815,"group-freehq-rtablec"],[816,"group-freehq-rtabled"],[817,"group-freehq-mediuma"],[818,"group-freehq-mediumb"],[819,"group-freehq-mediumc"],[820,"group-freehq-mediumd"],[821,"group-freehq-biga"],[822,"group-freehq-bigb"],[823,"group-freehq-bigc"],[824,"group-freehq-giant"],[825,"group-freehq-bigtable"],[826,"group-freehq-console-green-light-1"],[827,"group-freehq-console-green-light-2"],[828,"group-freehq-console-green-light-3"],[829,"group-freehq-console-green-light-4"],[830,"group-freehq-console-green-light-5"],[831,"group-freehq-console-green-light-6"],[832,"group-freehq-console-green-light-7"],[833,"group-freehq-console-green-light-8"],[834,"group-freehq-console-blue-light-1"],[835,"group-freehq-console-blue-light-2"],[836,"group-freehq-console-blue-light-3"],[837,"group-freehq-console-blue-light-4"],[838,"group-freehq-console-blue-light-5"],[839,"group-freehq-console-blue-light-6"],[840,"group-freehq-console-blue-light-7"],[841,"group-freehq-console-blue-light-8"],[842,"group-freehq-red-wall-light"],[843,"group-freehq-white-wall-light-top"],[844,"group-freehq-white-wall-light-bottom"],[845,"group-freehq-red-wall-lights"],[846,"groupfreehq-onin-finger-effect"],[847,"groupfreehq-onin-small-finger-effect"],[223,"group-roboguard-armor-explode"],[558,"group-robo-gun-smoke"],[559,"group-robo-gun-casing"],[560,"group-robo-engine"],[1526,"group-mh-wasp-shot-die"],[561,"group-plant-seed-explode"],[562,"group-plant-spore-explode"],[563,"group-plant-seed-tunnel"],[564,"group-neo-egg-explode"],[565,"group-neo-spawner-explode"],[566,"group-neo-spawner-spit"],[567,"group-neo-spawner-dead"],[568,"group-forest-leaf-fall"],[569,"group-forest-leaf-fall-water"],[570,"group-forest-leaf-water-hit"]] diff --git a/decompiler/config/jakx/ntsc_v1/process_stack_size_overrides.jsonc b/decompiler/config/jakx/ntsc_v1/process_stack_size_overrides.jsonc new file mode 100644 index 0000000000..c638bc4718 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/process_stack_size_overrides.jsonc @@ -0,0 +1,4 @@ +// This overrides the stack size for calls to stack-size-set! in given functions. +{ + // "(method 29 target)": 2048, +} diff --git a/decompiler/config/jakx/ntsc_v1/stack_structures.jsonc b/decompiler/config/jakx/ntsc_v1/stack_structures.jsonc new file mode 100644 index 0000000000..50a35e0a0e --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/stack_structures.jsonc @@ -0,0 +1,3 @@ +{ + // "quaternion-smooth-seek!": [[16, ["inline-array", "quaternion", 2]]], +} diff --git a/decompiler/config/jakx/ntsc_v1/tex-info.min.json b/decompiler/config/jakx/ntsc_v1/tex-info.min.json new file mode 100644 index 0000000000..859aa8699f --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/tex-info.min.json @@ -0,0 +1 @@ +[[1114251,{"idx":139,"name":"arena-04","tpage_name":"progress-minimap"}],[1114250,{"idx":138,"name":"arena-03","tpage_name":"progress-minimap"}],[1114246,{"idx":134,"name":"precursor-03","tpage_name":"progress-minimap"}],[1114245,{"idx":133,"name":"precursor-02","tpage_name":"progress-minimap"}],[1114238,{"idx":126,"name":"rubble-03","tpage_name":"progress-minimap"}],[1114235,{"idx":123,"name":"comb-04","tpage_name":"progress-minimap"}],[1114220,{"idx":108,"name":"factory-01","tpage_name":"progress-minimap"}],[1114150,{"idx":38,"name":"hud-bronzecup","tpage_name":"progress-minimap"}],[1114144,{"idx":32,"name":"forest-04","tpage_name":"progress-minimap"}],[1114143,{"idx":31,"name":"forest-03","tpage_name":"progress-minimap"}],[1114142,{"idx":30,"name":"forest-02","tpage_name":"progress-minimap"}],[1114141,{"idx":29,"name":"forest-01","tpage_name":"progress-minimap"}],[1114132,{"idx":20,"name":"default-jak-04","tpage_name":"progress-minimap"}],[1114131,{"idx":19,"name":"default-jak-03","tpage_name":"progress-minimap"}],[1114130,{"idx":18,"name":"default-jak-02","tpage_name":"progress-minimap"}],[1114129,{"idx":17,"name":"default-jak-01","tpage_name":"progress-minimap"}],[1114124,{"idx":12,"name":"city-04","tpage_name":"progress-minimap"}],[1114123,{"idx":11,"name":"city-03","tpage_name":"progress-minimap"}],[1114122,{"idx":10,"name":"city-02","tpage_name":"progress-minimap"}],[1114121,{"idx":9,"name":"city-01","tpage_name":"progress-minimap"}],[1114116,{"idx":4,"name":"big-map-icons","tpage_name":"progress-minimap"}],[1114113,{"idx":1,"name":"map-target-marker","tpage_name":"progress-minimap"}],[1114112,{"idx":0,"name":"hud-race-vehicle-01","tpage_name":"progress-minimap"}],[116916234,{"idx":10,"name":"sewcurved-door-06","tpage_name":"sewk-vis-pris"}],[99483714,{"idx":66,"name":"dp-bipedal-power-hose","tpage_name":"lformach-vis-pris"}],[106954794,{"idx":42,"name":"vola-rising-step-base","tpage_name":"volcanoa-vis-tfrag"}],[116916233,{"idx":9,"name":"sewcurved-door-05","tpage_name":"sewk-vis-pris"}],[99483713,{"idx":65,"name":"dp-bipedal-nose-01","tpage_name":"lformach-vis-pris"}],[106954793,{"idx":41,"name":"vola-cable","tpage_name":"volcanoa-vis-tfrag"}],[116916232,{"idx":8,"name":"sewcurved-door-04","tpage_name":"sewk-vis-pris"}],[99483712,{"idx":64,"name":"dp-bipedal-finger-plate-01","tpage_name":"lformach-vis-pris"}],[106954792,{"idx":40,"name":"vola-slide-metal","tpage_name":"volcanoa-vis-tfrag"}],[116916231,{"idx":7,"name":"sewcurved-door-01","tpage_name":"sewk-vis-pris"}],[99483711,{"idx":63,"name":"dp-bipedal-eye-01","tpage_name":"lformach-vis-pris"}],[116916230,{"idx":6,"name":"airlock-door-cog1","tpage_name":"sewk-vis-pris"}],[99483710,{"idx":62,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"lformach-vis-pris"}],[106954790,{"idx":38,"name":"vola-grass-fringe-05-HI","tpage_name":"volcanoa-vis-tfrag"}],[116916228,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewk-vis-pris"}],[99483708,{"idx":60,"name":"dp-bipedal-dk-plate-04","tpage_name":"lformach-vis-pris"}],[116916227,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewk-vis-pris"}],[99483707,{"idx":59,"name":"dp-bipedal-dk-plate-03","tpage_name":"lformach-vis-pris"}],[116916226,{"idx":2,"name":"airlock-door-main","tpage_name":"sewk-vis-pris"}],[99483706,{"idx":58,"name":"dp-bipedal-dk-plate-02","tpage_name":"lformach-vis-pris"}],[106954786,{"idx":34,"name":"vola-rock-side-wall","tpage_name":"volcanoa-vis-tfrag"}],[116916225,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewk-vis-pris"}],[99483705,{"idx":57,"name":"dp-bipedal-dk-plate-01","tpage_name":"lformach-vis-pris"}],[116916224,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewk-vis-pris"}],[99483704,{"idx":56,"name":"dp-bipedal-dk-hose-01","tpage_name":"lformach-vis-pris"}],[106954784,{"idx":32,"name":"vol-metal-01","tpage_name":"volcanoa-vis-tfrag"}],[116850690,{"idx":2,"name":"sewer-shrub-pitting-01","tpage_name":"sewk-vis-shrub"}],[99418170,{"idx":58,"name":"tpl-glider-metal02","tpage_name":"volcanox-pris"}],[111869970,{"idx":18,"name":"stadiumb-hud-ord-rd","tpage_name":"wasleapr-minimap"}],[116850689,{"idx":1,"name":"sewer-nut","tpage_name":"sewk-vis-shrub"}],[99418169,{"idx":57,"name":"tpl-glider-metal01","tpage_name":"volcanox-pris"}],[111869969,{"idx":17,"name":"stadiumb-hud-ord-o","tpage_name":"wasleapr-minimap"}],[116850688,{"idx":0,"name":"sewer-pipe-small-01","tpage_name":"sewk-vis-shrub"}],[99418168,{"idx":56,"name":"tpl-glider-grip01","tpage_name":"volcanox-pris"}],[111869968,{"idx":16,"name":"stadiumb-hud-ord-nd","tpage_name":"wasleapr-minimap"}],[115867650,{"idx":2,"name":"nst-spiderweb","tpage_name":"lnstcst-water"}],[115867649,{"idx":1,"name":"desert-nest-egg-piping","tpage_name":"lnstcst-water"}],[115867648,{"idx":0,"name":"sig-flatfangs","tpage_name":"lnstcst-water"}],[115802142,{"idx":30,"name":"vin-teeth-01","tpage_name":"lnstcst-pris2"}],[103350342,{"idx":70,"name":"jakchires-shoeteop","tpage_name":"comba-pris"}],[115802141,{"idx":29,"name":"sig-undergarments","tpage_name":"lnstcst-pris2"}],[103350341,{"idx":69,"name":"jakchires-shoemetal","tpage_name":"comba-pris"}],[115802140,{"idx":28,"name":"sig-skirts-03","tpage_name":"lnstcst-pris2"}],[103350340,{"idx":68,"name":"jakchires-shoebottom","tpage_name":"comba-pris"}],[115802139,{"idx":27,"name":"sig-skirts-02","tpage_name":"lnstcst-pris2"}],[103350339,{"idx":67,"name":"jakchires-precarmor-01","tpage_name":"comba-pris"}],[115802138,{"idx":26,"name":"sig-skirts","tpage_name":"lnstcst-pris2"}],[103350338,{"idx":66,"name":"jakchires-pants","tpage_name":"comba-pris"}],[115802137,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"lnstcst-pris2"}],[103350337,{"idx":65,"name":"jakchires-lightbrownspat","tpage_name":"comba-pris"}],[115802136,{"idx":24,"name":"sig-shoetop","tpage_name":"lnstcst-pris2"}],[103350336,{"idx":64,"name":"jakchires-leatherpouch","tpage_name":"comba-pris"}],[115802135,{"idx":23,"name":"sig-shoebottom","tpage_name":"lnstcst-pris2"}],[103350335,{"idx":63,"name":"jakchires-jacket","tpage_name":"comba-pris"}],[100859975,{"idx":71,"name":"jakchires-teeth","tpage_name":"ljkdmpk-pris"}],[115802134,{"idx":22,"name":"sig-sac","tpage_name":"lnstcst-pris2"}],[103350334,{"idx":62,"name":"jakchires-horn","tpage_name":"comba-pris"}],[100859974,{"idx":70,"name":"jakchires-shoeteop","tpage_name":"ljkdmpk-pris"}],[115802133,{"idx":21,"name":"sig-metal-dirty","tpage_name":"lnstcst-pris2"}],[103350333,{"idx":61,"name":"jakchires-hair","tpage_name":"comba-pris"}],[100859973,{"idx":69,"name":"jakchires-shoemetal","tpage_name":"ljkdmpk-pris"}],[115802132,{"idx":20,"name":"sig-metal-01","tpage_name":"lnstcst-pris2"}],[103350332,{"idx":60,"name":"jakchires-glovetop","tpage_name":"comba-pris"}],[100859972,{"idx":68,"name":"jakchires-shoebottom","tpage_name":"ljkdmpk-pris"}],[115802131,{"idx":19,"name":"sig-lens","tpage_name":"lnstcst-pris2"}],[103350331,{"idx":59,"name":"jakchires-facert","tpage_name":"comba-pris"}],[100859971,{"idx":67,"name":"jakchires-precarmor-01","tpage_name":"ljkdmpk-pris"}],[115802130,{"idx":18,"name":"sig-horn","tpage_name":"lnstcst-pris2"}],[103350330,{"idx":58,"name":"jakchires-facelft","tpage_name":"comba-pris"}],[100859970,{"idx":66,"name":"jakchires-pants","tpage_name":"ljkdmpk-pris"}],[115802129,{"idx":17,"name":"sig-headgear","tpage_name":"lnstcst-pris2"}],[103350329,{"idx":57,"name":"jakchires-eyelid","tpage_name":"comba-pris"}],[100859969,{"idx":65,"name":"jakchires-lightbrownspat","tpage_name":"ljkdmpk-pris"}],[115802128,{"idx":16,"name":"sig-gun-05","tpage_name":"lnstcst-pris2"}],[103350328,{"idx":56,"name":"jakchires-eyebrow","tpage_name":"comba-pris"}],[100859968,{"idx":64,"name":"jakchires-leatherpouch","tpage_name":"ljkdmpk-pris"}],[120782848,{"idx":0,"name":"map-nst-lower","tpage_name":"lwassig-minimap"}],[115802127,{"idx":15,"name":"sig-gun-04","tpage_name":"lnstcst-pris2"}],[103350327,{"idx":55,"name":"jakchires-eye","tpage_name":"comba-pris"}],[100859967,{"idx":63,"name":"jakchires-jacket","tpage_name":"ljkdmpk-pris"}],[115802126,{"idx":14,"name":"sig-gun-03","tpage_name":"lnstcst-pris2"}],[103350326,{"idx":54,"name":"jakchires-clips","tpage_name":"comba-pris"}],[100859966,{"idx":62,"name":"jakchires-horn","tpage_name":"ljkdmpk-pris"}],[115802125,{"idx":13,"name":"sig-gun-02","tpage_name":"lnstcst-pris2"}],[103350325,{"idx":53,"name":"jakchires-chestplate","tpage_name":"comba-pris"}],[100859965,{"idx":61,"name":"jakchires-hair","tpage_name":"ljkdmpk-pris"}],[115802124,{"idx":12,"name":"sig-gun-01","tpage_name":"lnstcst-pris2"}],[103350324,{"idx":52,"name":"jakchires-brwnleather","tpage_name":"comba-pris"}],[100859964,{"idx":60,"name":"jakchires-glovetop","tpage_name":"ljkdmpk-pris"}],[115802123,{"idx":11,"name":"sig-glovetop","tpage_name":"lnstcst-pris2"}],[103350323,{"idx":51,"name":"jakchires-brownstrap","tpage_name":"comba-pris"}],[100859963,{"idx":59,"name":"jakchires-facert","tpage_name":"ljkdmpk-pris"}],[115802122,{"idx":10,"name":"sig-glove","tpage_name":"lnstcst-pris2"}],[103350322,{"idx":50,"name":"jakchires-blackstrap","tpage_name":"comba-pris"}],[100859962,{"idx":58,"name":"jakchires-facelft","tpage_name":"ljkdmpk-pris"}],[115802121,{"idx":9,"name":"sig-gem-01","tpage_name":"lnstcst-pris2"}],[103350321,{"idx":49,"name":"jakchires-arm","tpage_name":"comba-pris"}],[100859961,{"idx":57,"name":"jakchires-eyelid","tpage_name":"ljkdmpk-pris"}],[115802118,{"idx":6,"name":"sig-faceleft","tpage_name":"lnstcst-pris2"}],[103350318,{"idx":46,"name":"jakc-waistband2","tpage_name":"comba-pris"}],[100859958,{"idx":54,"name":"jakchires-clips","tpage_name":"ljkdmpk-pris"}],[117637133,{"idx":13,"name":"vehicle-metal-plate-01","tpage_name":"destrack-pris"}],[106430513,{"idx":49,"name":"daxter-furhilite","tpage_name":"desliz-pris"}],[115736628,{"idx":52,"name":"jakc-scarfhanging","tpage_name":"lnstcst-pris"}],[128188428,{"idx":12,"name":"des-burn-eye-off","tpage_name":"waswide-vis-shrub"}],[129433608,{"idx":8,"name":"dp-text-09","tpage_name":"wasseem-sprite"}],[117637132,{"idx":12,"name":"vehicle-gun-box-01","tpage_name":"destrack-pris"}],[106430512,{"idx":48,"name":"daxter-eyelid","tpage_name":"desliz-pris"}],[115736627,{"idx":51,"name":"jakc-skirt","tpage_name":"lnstcst-pris"}],[128188427,{"idx":11,"name":"wascity-cactus-tall-base","tpage_name":"waswide-vis-shrub"}],[129433607,{"idx":7,"name":"dp-text-08","tpage_name":"wasseem-sprite"}],[117637131,{"idx":11,"name":"vehicle-gas-tank-01","tpage_name":"destrack-pris"}],[106430511,{"idx":47,"name":"klever-widebrownstrap","tpage_name":"desliz-pris"}],[115736626,{"idx":50,"name":"jakchires-teeth","tpage_name":"lnstcst-pris"}],[128188426,{"idx":10,"name":"wascity-cactus-flower","tpage_name":"waswide-vis-shrub"}],[129433606,{"idx":6,"name":"dp-text-07","tpage_name":"wasseem-sprite"}],[117637130,{"idx":10,"name":"vehicle-chrome-pipe-01","tpage_name":"destrack-pris"}],[106430510,{"idx":46,"name":"klever-undershirt","tpage_name":"desliz-pris"}],[115736625,{"idx":49,"name":"jakchires-shoeteop","tpage_name":"lnstcst-pris"}],[128188425,{"idx":9,"name":"wascity-cactus-tall","tpage_name":"waswide-vis-shrub"}],[129433605,{"idx":5,"name":"dp-text-06","tpage_name":"wasseem-sprite"}],[117637129,{"idx":9,"name":"vehicle-cap-pin-01","tpage_name":"destrack-pris"}],[106430509,{"idx":45,"name":"klever-thighs","tpage_name":"desliz-pris"}],[115736624,{"idx":48,"name":"jakchires-shoemetal","tpage_name":"lnstcst-pris"}],[128188424,{"idx":8,"name":"wascity-awning","tpage_name":"waswide-vis-shrub"}],[129433604,{"idx":4,"name":"dp-text-05","tpage_name":"wasseem-sprite"}],[117637128,{"idx":8,"name":"vehicle-brace-pipe-01","tpage_name":"destrack-pris"}],[106430508,{"idx":44,"name":"klever-skirtlight","tpage_name":"desliz-pris"}],[115736623,{"idx":47,"name":"jakchires-shoebottom","tpage_name":"lnstcst-pris"}],[129433603,{"idx":3,"name":"dp-text-04","tpage_name":"wasseem-sprite"}],[117637127,{"idx":7,"name":"vehicle-body-panel-01","tpage_name":"destrack-pris"}],[106430507,{"idx":43,"name":"klever-skirtdark","tpage_name":"desliz-pris"}],[115736622,{"idx":46,"name":"jakchires-precarmor-01","tpage_name":"lnstcst-pris"}],[129433602,{"idx":2,"name":"dp-text-03","tpage_name":"wasseem-sprite"}],[117637122,{"idx":2,"name":"intcept-base-patern02","tpage_name":"destrack-pris"}],[106430502,{"idx":38,"name":"klever-handwrap","tpage_name":"desliz-pris"}],[115736617,{"idx":41,"name":"jakchires-horn","tpage_name":"lnstcst-pris"}],[117637121,{"idx":1,"name":"intcept-base-patern01","tpage_name":"destrack-pris"}],[106430501,{"idx":37,"name":"klever-hand","tpage_name":"desliz-pris"}],[115736616,{"idx":40,"name":"jakchires-hair","tpage_name":"lnstcst-pris"}],[117637120,{"idx":0,"name":"intcept-base-green01","tpage_name":"destrack-pris"}],[106430500,{"idx":36,"name":"klever-hair","tpage_name":"desliz-pris"}],[115736615,{"idx":39,"name":"jakchires-glovetop","tpage_name":"lnstcst-pris"}],[115736614,{"idx":38,"name":"jakchires-facert","tpage_name":"lnstcst-pris"}],[115736613,{"idx":37,"name":"jakchires-facelft","tpage_name":"lnstcst-pris"}],[115736612,{"idx":36,"name":"jakchires-eyelid","tpage_name":"lnstcst-pris"}],[115736611,{"idx":35,"name":"jakchires-eyebrow","tpage_name":"lnstcst-pris"}],[115736610,{"idx":34,"name":"jakchires-eye","tpage_name":"lnstcst-pris"}],[115736609,{"idx":33,"name":"jakchires-clips","tpage_name":"lnstcst-pris"}],[115736608,{"idx":32,"name":"jakchires-chestplate","tpage_name":"lnstcst-pris"}],[124452868,{"idx":4,"name":"citwide-crimson-wall-plain","tpage_name":"lctypatk-pris"}],[115736607,{"idx":31,"name":"jakchires-brwnleather","tpage_name":"lnstcst-pris"}],[124452867,{"idx":3,"name":"citwide-crimson-tube","tpage_name":"lctypatk-pris"}],[115736606,{"idx":30,"name":"jakchires-brownstrap","tpage_name":"lnstcst-pris"}],[124452866,{"idx":2,"name":"citwide-crimson-red","tpage_name":"lctypatk-pris"}],[115736605,{"idx":29,"name":"jakchires-blackstrap","tpage_name":"lnstcst-pris"}],[124452865,{"idx":1,"name":"citwide-crimson-light","tpage_name":"lctypatk-pris"}],[115736604,{"idx":28,"name":"jakchires-arm","tpage_name":"lnstcst-pris"}],[124452864,{"idx":0,"name":"citwide-crimson-gold","tpage_name":"lctypatk-pris"}],[115736603,{"idx":27,"name":"jakc-wristband-a2","tpage_name":"lnstcst-pris"}],[115736602,{"idx":26,"name":"jakc-wraps","tpage_name":"lnstcst-pris"}],[115736601,{"idx":25,"name":"jakc-waistband2","tpage_name":"lnstcst-pris"}],[115736600,{"idx":24,"name":"jakc-scarf","tpage_name":"lnstcst-pris"}],[115736599,{"idx":23,"name":"jakc-lens","tpage_name":"lnstcst-pris"}],[115736598,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"lnstcst-pris"}],[115736597,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"lnstcst-pris"}],[115736596,{"idx":20,"name":"jakc-armor","tpage_name":"lnstcst-pris"}],[115736595,{"idx":19,"name":"environment-oldmetal","tpage_name":"lnstcst-pris"}],[115736594,{"idx":18,"name":"daxtertuft","tpage_name":"lnstcst-pris"}],[115736593,{"idx":17,"name":"daxterteeth","tpage_name":"lnstcst-pris"}],[115736592,{"idx":16,"name":"daxternose","tpage_name":"lnstcst-pris"}],[115736591,{"idx":15,"name":"daxterlense","tpage_name":"lnstcst-pris"}],[115736590,{"idx":14,"name":"daxterhelmetplain","tpage_name":"lnstcst-pris"}],[115736589,{"idx":13,"name":"daxterheadwidenew","tpage_name":"lnstcst-pris"}],[115736588,{"idx":12,"name":"daxtergoggles","tpage_name":"lnstcst-pris"}],[115736587,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"lnstcst-pris"}],[115736586,{"idx":10,"name":"daxterfoot","tpage_name":"lnstcst-pris"}],[115736585,{"idx":9,"name":"daxterfinger","tpage_name":"lnstcst-pris"}],[115736584,{"idx":8,"name":"daxterear","tpage_name":"lnstcst-pris"}],[102039604,{"idx":52,"name":"talkbox-light-02","tpage_name":"gungame-vis-pris2"}],[115736583,{"idx":7,"name":"daxterbolt","tpage_name":"lnstcst-pris"}],[102039603,{"idx":51,"name":"jakc-armor","tpage_name":"gungame-vis-pris2"}],[115736582,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"lnstcst-pris"}],[107020322,{"idx":34,"name":"vola-flutprint-01","tpage_name":"volcanoa-vis-shrub"}],[102039602,{"idx":50,"name":"gun-yellowgreen","tpage_name":"gungame-vis-pris2"}],[115736581,{"idx":5,"name":"daxterarm","tpage_name":"lnstcst-pris"}],[102039601,{"idx":49,"name":"gun-yellow-mag-end","tpage_name":"gungame-vis-pris2"}],[115736580,{"idx":4,"name":"daxter-orange","tpage_name":"lnstcst-pris"}],[102039600,{"idx":48,"name":"gun-yellow-mag","tpage_name":"gungame-vis-pris2"}],[115736579,{"idx":3,"name":"daxter-furhilite","tpage_name":"lnstcst-pris"}],[107020319,{"idx":31,"name":"vola-rock-top","tpage_name":"volcanoa-vis-shrub"}],[102039599,{"idx":47,"name":"gun-yellow-glow","tpage_name":"gungame-vis-pris2"}],[115736578,{"idx":2,"name":"daxter-eyelid","tpage_name":"lnstcst-pris"}],[107020318,{"idx":30,"name":"vola-small-rock-sides","tpage_name":"volcanoa-vis-shrub"}],[102039598,{"idx":46,"name":"gun-tip","tpage_name":"gungame-vis-pris2"}],[115736577,{"idx":1,"name":"bam-hairhilite","tpage_name":"lnstcst-pris"}],[107020317,{"idx":29,"name":"vol-feeler","tpage_name":"volcanoa-vis-shrub"}],[102039597,{"idx":45,"name":"gun-teeth","tpage_name":"gungame-vis-pris2"}],[115736576,{"idx":0,"name":"bam-eyelight","tpage_name":"lnstcst-pris"}],[102039596,{"idx":44,"name":"gun-red-mag","tpage_name":"gungame-vis-pris2"}],[107020316,{"idx":28,"name":"vol-bark-burnt","tpage_name":"volcanoa-vis-shrub"}],[115212301,{"idx":13,"name":"cty-grunt-skin-02","tpage_name":"ctypesb-pris"}],[108986401,{"idx":33,"name":"monk-femaleskirt-bottom","tpage_name":"wasleapr-pris"}],[115212300,{"idx":12,"name":"cty-grunt-skin-01","tpage_name":"ctypesb-pris"}],[108986400,{"idx":32,"name":"monk-femaleleg-01","tpage_name":"wasleapr-pris"}],[115212299,{"idx":11,"name":"cty-grunt-metal-01","tpage_name":"ctypesb-pris"}],[108986399,{"idx":31,"name":"monk-femalebootoe","tpage_name":"wasleapr-pris"}],[115212298,{"idx":10,"name":"cty-grunt-hose","tpage_name":"ctypesb-pris"}],[108986398,{"idx":30,"name":"monk-femalebootmet","tpage_name":"wasleapr-pris"}],[115212297,{"idx":9,"name":"cty-grunt-gem-01","tpage_name":"ctypesb-pris"}],[108986397,{"idx":29,"name":"monk-femalebootlower","tpage_name":"wasleapr-pris"}],[117702657,{"idx":1,"name":"wstlander-01-glovetop","tpage_name":"destrack-water"}],[115212296,{"idx":8,"name":"cty-grunt-eye-01","tpage_name":"ctypesb-pris"}],[108986396,{"idx":28,"name":"monk-femalebelt","tpage_name":"wasleapr-pris"}],[117702656,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"destrack-water"}],[114294786,{"idx":2,"name":"des-cave-floor-01","tpage_name":"desert-vis-water"}],[94371906,{"idx":66,"name":"palace-break-spanel-3","tpage_name":"intpfall-vis-pris"}],[113180672,{"idx":0,"name":"minc-pre-12","tpage_name":"minea-vis-water"}],[106954772,{"idx":20,"name":"vol-bark-burnt","tpage_name":"volcanoa-vis-tfrag"}],[112459776,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desrescg-water"}],[106233876,{"idx":20,"name":"daxterhelmetplain","tpage_name":"mined-pris"}],[91291716,{"idx":68,"name":"gun-track-02","tpage_name":"gungame-vis-tfrag"}],[112394280,{"idx":40,"name":"tread-marks","tpage_name":"desrescg-pris"}],[106168380,{"idx":60,"name":"mined-pillar-side-dest","tpage_name":"mined-tfrag"}],[118620180,{"idx":20,"name":"jakchires-eyebrow","tpage_name":"ljkcdmkl-pris"}],[121110540,{"idx":12,"name":"hip-tmetcan01","tpage_name":"hiphog-vis-tfrag"}],[112394279,{"idx":39,"name":"vehicle-wheel-blur-01","tpage_name":"desrescg-pris"}],[106168379,{"idx":59,"name":"mined-pillar-top2side-dest","tpage_name":"mined-tfrag"}],[118620179,{"idx":19,"name":"jakchires-eye","tpage_name":"ljkcdmkl-pris"}],[121110539,{"idx":11,"name":"hip-tgoldring01","tpage_name":"hiphog-vis-tfrag"}],[112394278,{"idx":38,"name":"vehicle-wheel-01","tpage_name":"desrescg-pris"}],[106168378,{"idx":58,"name":"mined-pillar-env","tpage_name":"mined-tfrag"}],[118620178,{"idx":18,"name":"jakchires-clips","tpage_name":"ljkcdmkl-pris"}],[121110538,{"idx":10,"name":"hip-tredmetal01","tpage_name":"hiphog-vis-tfrag"}],[112394277,{"idx":37,"name":"vehicle-tread-blur-02","tpage_name":"desrescg-pris"}],[106168377,{"idx":57,"name":"mined-pillar-top2side-hot","tpage_name":"mined-tfrag"}],[118620177,{"idx":17,"name":"jakchires-chestplate","tpage_name":"ljkcdmkl-pris"}],[121110537,{"idx":9,"name":"hip-tbotblue02","tpage_name":"hiphog-vis-tfrag"}],[112394276,{"idx":36,"name":"vehicle-toad-exhaust-01","tpage_name":"desrescg-pris"}],[106168376,{"idx":56,"name":"mined-pillar-top2side-cooling","tpage_name":"mined-tfrag"}],[118620176,{"idx":16,"name":"jakchires-brwnleather","tpage_name":"ljkcdmkl-pris"}],[121110536,{"idx":8,"name":"hip-tgreendark01","tpage_name":"hiphog-vis-tfrag"}],[112394275,{"idx":35,"name":"vehicle-metal-plate-01","tpage_name":"desrescg-pris"}],[106168375,{"idx":55,"name":"mined-pillar-top2side-cold","tpage_name":"mined-tfrag"}],[118620175,{"idx":15,"name":"jakchires-brownstrap","tpage_name":"ljkcdmkl-pris"}],[121110535,{"idx":7,"name":"hip-tbotyel01","tpage_name":"hiphog-vis-tfrag"}],[122355715,{"idx":3,"name":"hud-small-frame-02","tpage_name":"lnstobb-minimap"}],[112394274,{"idx":34,"name":"vehicle-gun-box-01","tpage_name":"desrescg-pris"}],[106168374,{"idx":54,"name":"mined-pillar-top-hot","tpage_name":"mined-tfrag"}],[118620174,{"idx":14,"name":"jakchires-blackstrap","tpage_name":"ljkcdmkl-pris"}],[121110534,{"idx":6,"name":"hip-tmetring01","tpage_name":"hiphog-vis-tfrag"}],[122355714,{"idx":2,"name":"hud-small-frame-01","tpage_name":"lnstobb-minimap"}],[112394273,{"idx":33,"name":"vehicle-gas-tank-01","tpage_name":"desrescg-pris"}],[106168373,{"idx":53,"name":"mined-pillar-top-cooling","tpage_name":"mined-tfrag"}],[118620173,{"idx":13,"name":"jakchires-arm","tpage_name":"ljkcdmkl-pris"}],[121110533,{"idx":5,"name":"hip-tmetring02","tpage_name":"hiphog-vis-tfrag"}],[122355713,{"idx":1,"name":"hud-mhcentipede-meter-01","tpage_name":"lnstobb-minimap"}],[112394272,{"idx":32,"name":"vehicle-chrome-pipe-01","tpage_name":"desrescg-pris"}],[106168372,{"idx":52,"name":"mined-pillar-top-cold","tpage_name":"mined-tfrag"}],[118620172,{"idx":12,"name":"jakc-wristband-a2","tpage_name":"ljkcdmkl-pris"}],[121110532,{"idx":4,"name":"hip-tredstool02","tpage_name":"hiphog-vis-tfrag"}],[122355712,{"idx":0,"name":"hud-mhcentipede-01","tpage_name":"lnstobb-minimap"}],[112394271,{"idx":31,"name":"vehicle-cap-pin-01","tpage_name":"desrescg-pris"}],[106168371,{"idx":51,"name":"mined-pillar-side-hot","tpage_name":"mined-tfrag"}],[118620171,{"idx":11,"name":"jakc-wraps","tpage_name":"ljkcdmkl-pris"}],[121110531,{"idx":3,"name":"hip-tredstool01","tpage_name":"hiphog-vis-tfrag"}],[112394270,{"idx":30,"name":"vehicle-brace-pipe-01","tpage_name":"desrescg-pris"}],[106168370,{"idx":50,"name":"mined-pillar-side-cooling","tpage_name":"mined-tfrag"}],[118620170,{"idx":10,"name":"jakc-waistband2","tpage_name":"ljkcdmkl-pris"}],[121110530,{"idx":2,"name":"hip-twood02","tpage_name":"hiphog-vis-tfrag"}],[112394269,{"idx":29,"name":"vehicle-body-panel-01","tpage_name":"desrescg-pris"}],[106168369,{"idx":49,"name":"mined-pillar-side-cold","tpage_name":"mined-tfrag"}],[118620169,{"idx":9,"name":"jakc-skirt","tpage_name":"ljkcdmkl-pris"}],[121110529,{"idx":1,"name":"hip-tbluelit01","tpage_name":"hiphog-vis-tfrag"}],[112394251,{"idx":11,"name":"des-transport-plate-01","tpage_name":"desrescg-pris"}],[112394250,{"idx":10,"name":"des-transport-pipecap","tpage_name":"desrescg-pris"}],[112394249,{"idx":9,"name":"des-transport-pipe","tpage_name":"desrescg-pris"}],[106168349,{"idx":29,"name":"minc-rust-01","tpage_name":"mined-tfrag"}],[112394248,{"idx":8,"name":"des-transport-front","tpage_name":"desrescg-pris"}],[106168348,{"idx":28,"name":"minc-blue-paint-rust05","tpage_name":"mined-tfrag"}],[112394247,{"idx":7,"name":"des-transport-frame-03","tpage_name":"desrescg-pris"}],[104923167,{"idx":31,"name":"environment-oldmetal","tpage_name":"oasiscst-pris2"}],[112394246,{"idx":6,"name":"des-transport-frame-02","tpage_name":"desrescg-pris"}],[104923166,{"idx":30,"name":"bam-hairhilite","tpage_name":"oasiscst-pris2"}],[106168346,{"idx":26,"name":"minc-door-metal-05","tpage_name":"mined-tfrag"}],[112394245,{"idx":5,"name":"des-transport-frame-01","tpage_name":"desrescg-pris"}],[104923165,{"idx":29,"name":"bam-eyelight","tpage_name":"oasiscst-pris2"}],[106168345,{"idx":25,"name":"minc-door-metal-02","tpage_name":"mined-tfrag"}],[112394244,{"idx":4,"name":"des-transport-door","tpage_name":"desrescg-pris"}],[104923164,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"oasiscst-pris2"}],[106168344,{"idx":24,"name":"minc-door-metal-03","tpage_name":"mined-tfrag"}],[112394241,{"idx":1,"name":"des-transport-cab","tpage_name":"desrescg-pris"}],[104923161,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"oasiscst-pris2"}],[106168341,{"idx":21,"name":"minc-door-metal-06","tpage_name":"mined-tfrag"}],[112394240,{"idx":0,"name":"des-transport-backdoor","tpage_name":"desrescg-pris"}],[104923160,{"idx":24,"name":"ashelin-shield","tpage_name":"oasiscst-pris2"}],[106168340,{"idx":20,"name":"minc-door-metal-04","tpage_name":"mined-tfrag"}],[112328768,{"idx":64,"name":"eco-lt-cryst-03","tpage_name":"wascast-pris"}],[112328766,{"idx":62,"name":"prebot-envmap","tpage_name":"wascast-pris"}],[112328758,{"idx":54,"name":"jakchires-teeth","tpage_name":"wascast-pris"}],[114229250,{"idx":2,"name":"ctyslumb-water-dest","tpage_name":"ctyslumb-vis-water"}],[79364210,{"idx":114,"name":"dk-sat-screen-rim-01","tpage_name":"wasseem-pris"}],[104267810,{"idx":34,"name":"rub-wall-side-beam-02","tpage_name":"stadium-vis-tfrag"}],[112328745,{"idx":41,"name":"jakchires-facelft","tpage_name":"wascast-pris"}],[112328738,{"idx":34,"name":"jakchires-brownstrap","tpage_name":"wascast-pris"}],[91160678,{"idx":102,"name":"jakchires-pants","tpage_name":"gungame-vis-pris"}],[122290178,{"idx":2,"name":"fac-tower-door-01","tpage_name":"factoryb-vis-pris"}],[112328714,{"idx":10,"name":"daxterfoot","tpage_name":"wascast-pris"}],[104857634,{"idx":34,"name":"jakchires-eye","tpage_name":"oasiscst-pris"}],[91160654,{"idx":78,"name":"jakc-chestplate-straps","tpage_name":"gungame-vis-pris"}],[112328706,{"idx":2,"name":"daxter-eyelid","tpage_name":"wascast-pris"}],[104857626,{"idx":26,"name":"jakc-wraps","tpage_name":"oasiscst-pris"}],[112328705,{"idx":1,"name":"bam-hairhilite","tpage_name":"wascast-pris"}],[104857625,{"idx":25,"name":"jakc-waistband2","tpage_name":"oasiscst-pris"}],[112328704,{"idx":0,"name":"bam-eyelight","tpage_name":"wascast-pris"}],[104857624,{"idx":24,"name":"jakc-scarf","tpage_name":"oasiscst-pris"}],[112263168,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desinter-water"}],[101056548,{"idx":36,"name":"klever-armor-02","tpage_name":"ljakcklv-pris"}],[112197635,{"idx":3,"name":"intcept-gun01","tpage_name":"desinter-pris"}],[38732015,{"idx":239,"name":"male3_11","tpage_name":"wasstada-sprite"}],[100991015,{"idx":39,"name":"klever-eye","tpage_name":"ljakklev-pris"}],[112197634,{"idx":2,"name":"intcept-base-patern02","tpage_name":"desinter-pris"}],[38732014,{"idx":238,"name":"male3_10","tpage_name":"wasstada-sprite"}],[100991014,{"idx":38,"name":"klever-earcup","tpage_name":"ljakklev-pris"}],[112197633,{"idx":1,"name":"intcept-base-patern01","tpage_name":"desinter-pris"}],[38732013,{"idx":237,"name":"male3_09","tpage_name":"wasstada-sprite"}],[100991013,{"idx":37,"name":"klever-clips","tpage_name":"ljakklev-pris"}],[112197632,{"idx":0,"name":"intcept-base-green01","tpage_name":"desinter-pris"}],[38732012,{"idx":236,"name":"male3_08","tpage_name":"wasstada-sprite"}],[100991012,{"idx":36,"name":"klever-chest","tpage_name":"ljakklev-pris"}],[111017985,{"idx":1,"name":"monk-malepants","tpage_name":"wasleapr-water"}],[101056545,{"idx":33,"name":"jakchires-teeth","tpage_name":"ljakcklv-pris"}],[109182994,{"idx":18,"name":"stadiumb-hud-ord-rd","tpage_name":"destrack-minimap"}],[94240834,{"idx":66,"name":"t-citypal-tree-01","tpage_name":"intpfall-vis-tfrag"}],[109182990,{"idx":14,"name":"stadiumb-hud-ord-er","tpage_name":"destrack-minimap"}],[94240830,{"idx":62,"name":"t-citywide-met-pill-01","tpage_name":"intpfall-vis-tfrag"}],[109182986,{"idx":10,"name":"stadiumb-hud-nmbr-06","tpage_name":"destrack-minimap"}],[94240826,{"idx":58,"name":"t-citywide-red-met-01","tpage_name":"intpfall-vis-tfrag"}],[108986430,{"idx":62,"name":"seem-precmetal-edge","tpage_name":"wasleapr-pris"}],[121438230,{"idx":22,"name":"mh-flyer-leatherstrap-01","tpage_name":"desbattl-pris"}],[108986429,{"idx":61,"name":"monk-wristwrap","tpage_name":"wasleapr-pris"}],[121438229,{"idx":21,"name":"mh-flyer-hose","tpage_name":"desbattl-pris"}],[108986428,{"idx":60,"name":"monk-waistwrap","tpage_name":"wasleapr-pris"}],[121438228,{"idx":20,"name":"mh-flyer-eye-01","tpage_name":"desbattl-pris"}],[108986427,{"idx":59,"name":"monk-uppertorso-01","tpage_name":"wasleapr-pris"}],[121438227,{"idx":19,"name":"common-black","tpage_name":"desbattl-pris"}],[108986426,{"idx":58,"name":"monk-trim","tpage_name":"wasleapr-pris"}],[121438226,{"idx":18,"name":"vehicle-rims-01","tpage_name":"desbattl-pris"}],[108986420,{"idx":52,"name":"monk-pipeend","tpage_name":"wasleapr-pris"}],[108986419,{"idx":51,"name":"monk-pipe-01","tpage_name":"wasleapr-pris"}],[108986418,{"idx":50,"name":"monk-neckcover","tpage_name":"wasleapr-pris"}],[108986417,{"idx":49,"name":"monk-maletorso","tpage_name":"wasleapr-pris"}],[108986416,{"idx":48,"name":"monk-maleshoebottom","tpage_name":"wasleapr-pris"}],[108986415,{"idx":47,"name":"monk-maleleg","tpage_name":"wasleapr-pris"}],[108986414,{"idx":46,"name":"monk-malefoot2","tpage_name":"wasleapr-pris"}],[108986413,{"idx":45,"name":"monk-malearm","tpage_name":"wasleapr-pris"}],[108986412,{"idx":44,"name":"monk-lens","tpage_name":"wasleapr-pris"}],[108986395,{"idx":27,"name":"monk-face-06","tpage_name":"wasleapr-pris"}],[108986394,{"idx":26,"name":"monk-face-05","tpage_name":"wasleapr-pris"}],[108986393,{"idx":25,"name":"monk-face-04","tpage_name":"wasleapr-pris"}],[81592433,{"idx":113,"name":"jakchires-teeth","tpage_name":"arenacst-pris"}],[108986392,{"idx":24,"name":"monk-face-03","tpage_name":"wasleapr-pris"}],[81592432,{"idx":112,"name":"jakchires-shoeteop","tpage_name":"arenacst-pris"}],[108986391,{"idx":23,"name":"monk-face-02","tpage_name":"wasleapr-pris"}],[81592431,{"idx":111,"name":"jakchires-shoemetal","tpage_name":"arenacst-pris"}],[108986390,{"idx":22,"name":"monk-face-01","tpage_name":"wasleapr-pris"}],[81592430,{"idx":110,"name":"jakchires-shoebottom","tpage_name":"arenacst-pris"}],[108986389,{"idx":21,"name":"monk-eye-f","tpage_name":"wasleapr-pris"}],[81592429,{"idx":109,"name":"jakchires-precarmor-01","tpage_name":"arenacst-pris"}],[108986388,{"idx":20,"name":"monk-eye-d","tpage_name":"wasleapr-pris"}],[81592428,{"idx":108,"name":"jakchires-pants","tpage_name":"arenacst-pris"}],[108986387,{"idx":19,"name":"monk-eye-c","tpage_name":"wasleapr-pris"}],[81592427,{"idx":107,"name":"jakchires-lightbrownspat","tpage_name":"arenacst-pris"}],[108986386,{"idx":18,"name":"monk-ear-01","tpage_name":"wasleapr-pris"}],[81592426,{"idx":106,"name":"jakchires-leatherpouch","tpage_name":"arenacst-pris"}],[108986385,{"idx":17,"name":"monk-cheststraps","tpage_name":"wasleapr-pris"}],[81592425,{"idx":105,"name":"jakchires-jacket","tpage_name":"arenacst-pris"}],[108986384,{"idx":16,"name":"monk-bootbottom","tpage_name":"wasleapr-pris"}],[81592424,{"idx":104,"name":"jakchires-horn","tpage_name":"arenacst-pris"}],[108986383,{"idx":15,"name":"monk-arm","tpage_name":"wasleapr-pris"}],[81592423,{"idx":103,"name":"jakchires-hair","tpage_name":"arenacst-pris"}],[108986381,{"idx":13,"name":"metalflut-wrap","tpage_name":"wasleapr-pris"}],[81592421,{"idx":101,"name":"jakchires-facert","tpage_name":"arenacst-pris"}],[108986380,{"idx":12,"name":"metalflut-skin-02","tpage_name":"wasleapr-pris"}],[81592420,{"idx":100,"name":"jakchires-facelft","tpage_name":"arenacst-pris"}],[108986379,{"idx":11,"name":"metalflut-skin-01","tpage_name":"wasleapr-pris"}],[81592419,{"idx":99,"name":"jakchires-eyelid","tpage_name":"arenacst-pris"}],[108986378,{"idx":10,"name":"metalflut-saddleseat","tpage_name":"wasleapr-pris"}],[81592418,{"idx":98,"name":"jakchires-eyebrow","tpage_name":"arenacst-pris"}],[108986377,{"idx":9,"name":"metalflut-saddlehang","tpage_name":"wasleapr-pris"}],[81592417,{"idx":97,"name":"jakchires-eye","tpage_name":"arenacst-pris"}],[108986376,{"idx":8,"name":"metalflut-saddle","tpage_name":"wasleapr-pris"}],[81592416,{"idx":96,"name":"jakchires-clips","tpage_name":"arenacst-pris"}],[108986373,{"idx":5,"name":"metalflut-plates-02","tpage_name":"wasleapr-pris"}],[81592413,{"idx":93,"name":"jakchires-brownstrap","tpage_name":"arenacst-pris"}],[108396544,{"idx":0,"name":"hud-desert-lizard","tpage_name":"desliz-minimap"}],[107151364,{"idx":4,"name":"metalflut-leatherstrap-b-01","tpage_name":"volcanoa-vis-pris"}],[100925464,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"ljkdmpk-pris2"}],[108199942,{"idx":6,"name":"sewer-pipe-small-01","tpage_name":"mined-shrub"}],[100728862,{"idx":30,"name":"vin-teeth-01","tpage_name":"ljaksig-pris2"}],[106954762,{"idx":10,"name":"vola-grass-fringe-05","tpage_name":"volcanoa-vis-tfrag"}],[108199941,{"idx":5,"name":"mined_redbrake","tpage_name":"mined-shrub"}],[100728861,{"idx":29,"name":"sig-undergarments","tpage_name":"ljaksig-pris2"}],[99483681,{"idx":33,"name":"spawner-spike-02","tpage_name":"lformach-vis-pris"}],[108199940,{"idx":4,"name":"cav-stain-bolt-01","tpage_name":"mined-shrub"}],[100728860,{"idx":28,"name":"sig-skirts-03","tpage_name":"ljaksig-pris2"}],[99483680,{"idx":32,"name":"spawner-spike-01","tpage_name":"lformach-vis-pris"}],[107151375,{"idx":15,"name":"metalflut-wrap","tpage_name":"volcanoa-vis-pris"}],[107151374,{"idx":14,"name":"metalflut-skin-02","tpage_name":"volcanoa-vis-pris"}],[100925474,{"idx":34,"name":"king-skirt-b","tpage_name":"ljkdmpk-pris2"}],[107151373,{"idx":13,"name":"metalflut-skin-01","tpage_name":"volcanoa-vis-pris"}],[100925473,{"idx":33,"name":"king-wristband","tpage_name":"ljkdmpk-pris2"}],[107151371,{"idx":11,"name":"metalflut-saddlehang","tpage_name":"volcanoa-vis-pris"}],[100925471,{"idx":31,"name":"king-wrap","tpage_name":"ljkdmpk-pris2"}],[107151370,{"idx":10,"name":"metalflut-saddle","tpage_name":"volcanoa-vis-pris"}],[100925470,{"idx":30,"name":"king-vestback","tpage_name":"ljkdmpk-pris2"}],[107151369,{"idx":9,"name":"metalflut-roll","tpage_name":"volcanoa-vis-pris"}],[100925469,{"idx":29,"name":"king-vest","tpage_name":"ljkdmpk-pris2"}],[107151367,{"idx":7,"name":"metalflut-plates-02","tpage_name":"volcanoa-vis-pris"}],[100925467,{"idx":27,"name":"king-teeth","tpage_name":"ljkdmpk-pris2"}],[107151366,{"idx":6,"name":"metalflut-nail","tpage_name":"volcanoa-vis-pris"}],[100925466,{"idx":26,"name":"king-skirt","tpage_name":"ljkdmpk-pris2"}],[107085830,{"idx":6,"name":"flamer-wing","tpage_name":"volcanoa-vis-alpha"}],[107085829,{"idx":5,"name":"vola-lava-fall-dest","tpage_name":"volcanoa-vis-alpha"}],[107085828,{"idx":4,"name":"vola-lava-01-dest","tpage_name":"volcanoa-vis-alpha"}],[107085827,{"idx":3,"name":"vola-lava-fall","tpage_name":"volcanoa-vis-alpha"}],[107085825,{"idx":1,"name":"vola-grass-fringe-02","tpage_name":"volcanoa-vis-alpha"}],[107020315,{"idx":27,"name":"vola-shrub-rope-01","tpage_name":"volcanoa-vis-shrub"}],[102039595,{"idx":43,"name":"gun-red-glow","tpage_name":"gungame-vis-pris2"}],[107020309,{"idx":21,"name":"vol-balance-plat","tpage_name":"volcanoa-vis-shrub"}],[102039589,{"idx":37,"name":"gun-laser","tpage_name":"gungame-vis-pris2"}],[106954754,{"idx":2,"name":"vola-leaf-02","tpage_name":"volcanoa-vis-tfrag"}],[100728854,{"idx":22,"name":"sig-sac","tpage_name":"ljaksig-pris2"}],[99483674,{"idx":26,"name":"neo-wasp-dark-brown","tpage_name":"lformach-vis-pris"}],[106954753,{"idx":1,"name":"vola-stalk-01","tpage_name":"volcanoa-vis-tfrag"}],[100728853,{"idx":21,"name":"sig-metal-dirty","tpage_name":"ljaksig-pris2"}],[99483673,{"idx":25,"name":"neo-wasp-brown","tpage_name":"lformach-vis-pris"}],[106954752,{"idx":0,"name":"vola-lava-rock-01","tpage_name":"volcanoa-vis-tfrag"}],[100728852,{"idx":20,"name":"sig-metal-01","tpage_name":"ljaksig-pris2"}],[99483672,{"idx":24,"name":"neo-wasp-body","tpage_name":"lformach-vis-pris"}],[106430564,{"idx":100,"name":"vehicle-wheel-01","tpage_name":"desliz-pris"}],[117637184,{"idx":64,"name":"daxterarm","tpage_name":"destrack-pris"}],[106430563,{"idx":99,"name":"vehicle-snake-tread-02","tpage_name":"desliz-pris"}],[117637183,{"idx":63,"name":"daxter-orange","tpage_name":"destrack-pris"}],[106430562,{"idx":98,"name":"vehicle-snake-tread-01","tpage_name":"desliz-pris"}],[117637182,{"idx":62,"name":"daxter-furhilite","tpage_name":"destrack-pris"}],[106430561,{"idx":97,"name":"jakchires-teeth","tpage_name":"desliz-pris"}],[117637181,{"idx":61,"name":"daxter-eyelid","tpage_name":"destrack-pris"}],[106430560,{"idx":96,"name":"jakchires-shoeteop","tpage_name":"desliz-pris"}],[117637180,{"idx":60,"name":"des-train-barrier-stone-red","tpage_name":"destrack-pris"}],[106430559,{"idx":95,"name":"jakchires-shoemetal","tpage_name":"desliz-pris"}],[117637179,{"idx":59,"name":"des-shrub-pebbles","tpage_name":"destrack-pris"}],[106430558,{"idx":94,"name":"jakchires-shoebottom","tpage_name":"desliz-pris"}],[117637178,{"idx":58,"name":"des-train-bollard-pole-01","tpage_name":"destrack-pris"}],[106430557,{"idx":93,"name":"jakchires-precarmor-01","tpage_name":"desliz-pris"}],[117637177,{"idx":57,"name":"des-train-bollard-cap","tpage_name":"destrack-pris"}],[106430556,{"idx":92,"name":"jakchires-pants","tpage_name":"desliz-pris"}],[117637176,{"idx":56,"name":"des-train-barrier-screw","tpage_name":"destrack-pris"}],[106430555,{"idx":91,"name":"jakchires-lightbrownspat","tpage_name":"desliz-pris"}],[117637175,{"idx":55,"name":"des-pole-brace","tpage_name":"destrack-pris"}],[106430554,{"idx":90,"name":"jakchires-leatherpouch","tpage_name":"desliz-pris"}],[117637174,{"idx":54,"name":"des-pole-01","tpage_name":"destrack-pris"}],[106430553,{"idx":89,"name":"jakchires-jacket","tpage_name":"desliz-pris"}],[117637173,{"idx":53,"name":"des-corral-plate-03","tpage_name":"destrack-pris"}],[106430552,{"idx":88,"name":"jakchires-horn","tpage_name":"desliz-pris"}],[117637172,{"idx":52,"name":"des-corral-metal-01","tpage_name":"destrack-pris"}],[106430551,{"idx":87,"name":"jakchires-hair","tpage_name":"desliz-pris"}],[117637171,{"idx":51,"name":"klever-widebrownstrap","tpage_name":"destrack-pris"}],[106430550,{"idx":86,"name":"jakchires-glovetop","tpage_name":"desliz-pris"}],[117637170,{"idx":50,"name":"klever-undershirt","tpage_name":"destrack-pris"}],[106430549,{"idx":85,"name":"jakchires-facert","tpage_name":"desliz-pris"}],[117637169,{"idx":49,"name":"klever-thighs","tpage_name":"destrack-pris"}],[106430548,{"idx":84,"name":"jakchires-facelft","tpage_name":"desliz-pris"}],[117637168,{"idx":48,"name":"klever-skirtlight","tpage_name":"destrack-pris"}],[106430547,{"idx":83,"name":"jakchires-eyelid","tpage_name":"desliz-pris"}],[117637167,{"idx":47,"name":"klever-skirtdark","tpage_name":"destrack-pris"}],[106430546,{"idx":82,"name":"jakchires-eyebrow","tpage_name":"desliz-pris"}],[117637166,{"idx":46,"name":"klever-shoebottom","tpage_name":"destrack-pris"}],[106430545,{"idx":81,"name":"jakchires-eye","tpage_name":"desliz-pris"}],[117637165,{"idx":45,"name":"klever-shoe","tpage_name":"destrack-pris"}],[106430544,{"idx":80,"name":"jakchires-clips","tpage_name":"desliz-pris"}],[117637164,{"idx":44,"name":"klever-mustache","tpage_name":"destrack-pris"}],[106430543,{"idx":79,"name":"jakchires-chestplate","tpage_name":"desliz-pris"}],[117637163,{"idx":43,"name":"klever-horn","tpage_name":"destrack-pris"}],[106430542,{"idx":78,"name":"jakchires-brwnleather","tpage_name":"desliz-pris"}],[117637162,{"idx":42,"name":"klever-handwrap","tpage_name":"destrack-pris"}],[106430541,{"idx":77,"name":"jakchires-brownstrap","tpage_name":"desliz-pris"}],[117637161,{"idx":41,"name":"klever-hand","tpage_name":"destrack-pris"}],[106430540,{"idx":76,"name":"jakchires-blackstrap","tpage_name":"desliz-pris"}],[117637160,{"idx":40,"name":"klever-hair","tpage_name":"destrack-pris"}],[106430539,{"idx":75,"name":"jakchires-arm","tpage_name":"desliz-pris"}],[117637159,{"idx":39,"name":"klever-gunmetal-05","tpage_name":"destrack-pris"}],[106430538,{"idx":74,"name":"jakc-wristband-a2","tpage_name":"desliz-pris"}],[117637158,{"idx":38,"name":"klever-gunmetal-04","tpage_name":"destrack-pris"}],[106430537,{"idx":73,"name":"jakc-wraps","tpage_name":"desliz-pris"}],[117637157,{"idx":37,"name":"klever-gunmetal-03","tpage_name":"destrack-pris"}],[106430536,{"idx":72,"name":"jakc-waistband2","tpage_name":"desliz-pris"}],[117637156,{"idx":36,"name":"klever-gunmetal-02","tpage_name":"destrack-pris"}],[106430535,{"idx":71,"name":"jakc-skirt","tpage_name":"desliz-pris"}],[117637155,{"idx":35,"name":"klever-gunmetal-01","tpage_name":"destrack-pris"}],[106430534,{"idx":70,"name":"jakc-scarfhanging","tpage_name":"desliz-pris"}],[117637154,{"idx":34,"name":"klever-fingertop","tpage_name":"destrack-pris"}],[106430533,{"idx":69,"name":"jakc-scarf","tpage_name":"desliz-pris"}],[117637153,{"idx":33,"name":"klever-fingerbottom","tpage_name":"destrack-pris"}],[106430532,{"idx":68,"name":"jakc-lens","tpage_name":"desliz-pris"}],[117637152,{"idx":32,"name":"klever-face-01scars","tpage_name":"destrack-pris"}],[106430531,{"idx":67,"name":"jakc-gogglemetal","tpage_name":"desliz-pris"}],[117637151,{"idx":31,"name":"klever-face-01","tpage_name":"destrack-pris"}],[106430530,{"idx":66,"name":"jakc-chestplate-straps","tpage_name":"desliz-pris"}],[117637150,{"idx":30,"name":"klever-earcup","tpage_name":"destrack-pris"}],[106430529,{"idx":65,"name":"jakc-armor","tpage_name":"desliz-pris"}],[117637149,{"idx":29,"name":"klever-clips","tpage_name":"destrack-pris"}],[106430528,{"idx":64,"name":"daxtertuft","tpage_name":"desliz-pris"}],[117637148,{"idx":28,"name":"klever-chest","tpage_name":"destrack-pris"}],[106430527,{"idx":63,"name":"daxterteeth","tpage_name":"desliz-pris"}],[117637147,{"idx":27,"name":"klever-brownstrap","tpage_name":"destrack-pris"}],[106430526,{"idx":62,"name":"daxternose","tpage_name":"desliz-pris"}],[117637146,{"idx":26,"name":"klever-bolt","tpage_name":"destrack-pris"}],[106430525,{"idx":61,"name":"daxterlense","tpage_name":"desliz-pris"}],[117637145,{"idx":25,"name":"klever-blackstrap","tpage_name":"destrack-pris"}],[106430524,{"idx":60,"name":"daxterhelmetplain","tpage_name":"desliz-pris"}],[117637144,{"idx":24,"name":"klever-armor-02","tpage_name":"destrack-pris"}],[106430523,{"idx":59,"name":"daxterheadwidenew","tpage_name":"desliz-pris"}],[117637143,{"idx":23,"name":"klever-armor-01","tpage_name":"destrack-pris"}],[106430522,{"idx":58,"name":"daxtergoggles","tpage_name":"desliz-pris"}],[117637142,{"idx":22,"name":"klever-arm","tpage_name":"destrack-pris"}],[106430521,{"idx":57,"name":"daxterfoot-bottom","tpage_name":"desliz-pris"}],[117637141,{"idx":21,"name":"bam-hairhilite","tpage_name":"destrack-pris"}],[106430520,{"idx":56,"name":"daxterfoot","tpage_name":"desliz-pris"}],[117637140,{"idx":20,"name":"bam-eyelight","tpage_name":"destrack-pris"}],[106430519,{"idx":55,"name":"daxterfinger","tpage_name":"desliz-pris"}],[106430518,{"idx":54,"name":"daxterear","tpage_name":"desliz-pris"}],[106430517,{"idx":53,"name":"daxterbolt","tpage_name":"desliz-pris"}],[117637137,{"idx":17,"name":"vehicle-wheel-blur-01","tpage_name":"destrack-pris"}],[108331021,{"idx":13,"name":"ceiling-dust","tpage_name":"desert-sprite"}],[103350301,{"idx":29,"name":"daxterfoot","tpage_name":"comba-pris"}],[100859941,{"idx":37,"name":"pecker-wingtop","tpage_name":"ljkdmpk-pris"}],[106430516,{"idx":52,"name":"daxterbodyshort-eix","tpage_name":"desliz-pris"}],[117637136,{"idx":16,"name":"vehicle-wheel-01","tpage_name":"destrack-pris"}],[108331020,{"idx":12,"name":"crack01","tpage_name":"desert-sprite"}],[103350300,{"idx":28,"name":"daxterfinger","tpage_name":"comba-pris"}],[100859940,{"idx":36,"name":"pecker-wingbottom","tpage_name":"ljkdmpk-pris"}],[106430515,{"idx":51,"name":"daxterarm","tpage_name":"desliz-pris"}],[117637135,{"idx":15,"name":"vehicle-tread-blur-02","tpage_name":"destrack-pris"}],[108331019,{"idx":11,"name":"burning-bush-off","tpage_name":"desert-sprite"}],[103350299,{"idx":27,"name":"daxterear","tpage_name":"comba-pris"}],[100859939,{"idx":35,"name":"pecker-teeth","tpage_name":"ljkdmpk-pris"}],[106430514,{"idx":50,"name":"daxter-orange","tpage_name":"desliz-pris"}],[117637134,{"idx":14,"name":"vehicle-toad-exhaust-01","tpage_name":"destrack-pris"}],[108331018,{"idx":10,"name":"kleever-fist-logo","tpage_name":"desert-sprite"}],[103350298,{"idx":26,"name":"daxterbolt","tpage_name":"comba-pris"}],[100859938,{"idx":34,"name":"pecker-tail","tpage_name":"ljkdmpk-pris"}],[108331017,{"idx":9,"name":"dust-sparkle","tpage_name":"desert-sprite"}],[103350297,{"idx":25,"name":"daxterbodyshort-eix","tpage_name":"comba-pris"}],[110821377,{"idx":1,"name":"cav-stain-01","tpage_name":"mined-alpha"}],[100859937,{"idx":33,"name":"pecker-plume","tpage_name":"ljkdmpk-pris"}],[108331014,{"idx":6,"name":"dust-cloud","tpage_name":"desert-sprite"}],[103350294,{"idx":22,"name":"daxter-furhilite","tpage_name":"comba-pris"}],[100859934,{"idx":30,"name":"pecker-body-01","tpage_name":"ljkdmpk-pris"}],[108331013,{"idx":5,"name":"dust-devil-03","tpage_name":"desert-sprite"}],[103350293,{"idx":21,"name":"daxter-eyelid","tpage_name":"comba-pris"}],[108331012,{"idx":4,"name":"dust-devil-02","tpage_name":"desert-sprite"}],[103350292,{"idx":20,"name":"bam-hairhilite","tpage_name":"comba-pris"}],[108331011,{"idx":3,"name":"dust-devil-01","tpage_name":"desert-sprite"}],[103350291,{"idx":19,"name":"bam-eyelight","tpage_name":"comba-pris"}],[106430506,{"idx":42,"name":"klever-shoebottom","tpage_name":"desliz-pris"}],[117637126,{"idx":6,"name":"intcept-tread01","tpage_name":"destrack-pris"}],[106430505,{"idx":41,"name":"klever-shoe","tpage_name":"desliz-pris"}],[117637125,{"idx":5,"name":"intcept-teeth01","tpage_name":"destrack-pris"}],[106430504,{"idx":40,"name":"klever-mustache","tpage_name":"desliz-pris"}],[117637124,{"idx":4,"name":"intcept-pipe01","tpage_name":"destrack-pris"}],[106430503,{"idx":39,"name":"klever-horn","tpage_name":"desliz-pris"}],[117637123,{"idx":3,"name":"intcept-gun01","tpage_name":"destrack-pris"}],[106430480,{"idx":16,"name":"klever-arm","tpage_name":"desliz-pris"}],[105185300,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"desoasis-pris2"}],[108920840,{"idx":8,"name":"dk-sat-rim-bright-01","tpage_name":"waspgame-pris"}],[106430478,{"idx":14,"name":"bam-eyelight","tpage_name":"desliz-pris"}],[105185298,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"desoasis-pris2"}],[108920838,{"idx":6,"name":"dk-sat-rim-02","tpage_name":"waspgame-pris"}],[106430477,{"idx":13,"name":"metalflut-wrap","tpage_name":"desliz-pris"}],[105185297,{"idx":17,"name":"ashelin-handle-01","tpage_name":"desoasis-pris2"}],[108920837,{"idx":5,"name":"dk-sat-rim-01","tpage_name":"waspgame-pris"}],[106430476,{"idx":12,"name":"metalflut-skin-02","tpage_name":"desliz-pris"}],[105185296,{"idx":16,"name":"ashelin-hair","tpage_name":"desoasis-pris2"}],[108920836,{"idx":4,"name":"dk-sat-panel-01","tpage_name":"waspgame-pris"}],[106430475,{"idx":11,"name":"metalflut-skin-01","tpage_name":"desliz-pris"}],[105185295,{"idx":15,"name":"ashelin-gunholster","tpage_name":"desoasis-pris2"}],[108920835,{"idx":3,"name":"dk-sat-claw-01","tpage_name":"waspgame-pris"}],[106430474,{"idx":10,"name":"metalflut-saddleseat","tpage_name":"desliz-pris"}],[105185294,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"desoasis-pris2"}],[108920834,{"idx":2,"name":"dk-sat-cable-03","tpage_name":"waspgame-pris"}],[106430473,{"idx":9,"name":"metalflut-saddlehang","tpage_name":"desliz-pris"}],[105185293,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"desoasis-pris2"}],[108920833,{"idx":1,"name":"dk-sat-cable-02","tpage_name":"waspgame-pris"}],[106430472,{"idx":8,"name":"metalflut-saddle","tpage_name":"desliz-pris"}],[105185292,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"desoasis-pris2"}],[108920832,{"idx":0,"name":"dk-sat-cable-01","tpage_name":"waspgame-pris"}],[106430471,{"idx":7,"name":"metalflut-roll","tpage_name":"desliz-pris"}],[105185291,{"idx":11,"name":"ashelin-glove","tpage_name":"desoasis-pris2"}],[90243131,{"idx":59,"name":"des-cave-floor-01","tpage_name":"desertb-vis-tfrag"}],[106430470,{"idx":6,"name":"metalflut-rings","tpage_name":"desliz-pris"}],[105185290,{"idx":10,"name":"ashelin-face","tpage_name":"desoasis-pris2"}],[90243130,{"idx":58,"name":"des-totem-stone-01","tpage_name":"desertb-vis-tfrag"}],[106430469,{"idx":5,"name":"metalflut-plates-02","tpage_name":"desliz-pris"}],[105185289,{"idx":9,"name":"ashelin-eyelid","tpage_name":"desoasis-pris2"}],[90243129,{"idx":57,"name":"des-totem-stone-trim","tpage_name":"desertb-vis-tfrag"}],[106430468,{"idx":4,"name":"metalflut-nail","tpage_name":"desliz-pris"}],[105185288,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"desoasis-pris2"}],[106430467,{"idx":3,"name":"metalflut-leatherstrap-c","tpage_name":"desliz-pris"}],[105185287,{"idx":7,"name":"ashelin-eye","tpage_name":"desoasis-pris2"}],[90243127,{"idx":55,"name":"des-mud","tpage_name":"desertb-vis-tfrag"}],[106430466,{"idx":2,"name":"metalflut-leatherstrap-b-01","tpage_name":"desliz-pris"}],[105185286,{"idx":6,"name":"ashelin-chest","tpage_name":"desoasis-pris2"}],[90243126,{"idx":54,"name":"des-mount-bottom-01","tpage_name":"desertb-vis-tfrag"}],[106430465,{"idx":1,"name":"metalflut-eye","tpage_name":"desliz-pris"}],[105185285,{"idx":5,"name":"ashelin-cgrank","tpage_name":"desoasis-pris2"}],[90243125,{"idx":53,"name":"des-palm-leaf-01","tpage_name":"desertb-vis-tfrag"}],[106430464,{"idx":0,"name":"environment-oldmetal","tpage_name":"desliz-pris"}],[90243124,{"idx":52,"name":"des-palmtree-trunk-02","tpage_name":"desertb-vis-tfrag"}],[105185284,{"idx":4,"name":"ashelin-cglogo","tpage_name":"desoasis-pris2"}],[106234035,{"idx":179,"name":"gun-main","tpage_name":"mined-pris"}],[154796055,{"idx":23,"name":"jakc-lens","tpage_name":"ljakndax-pris"}],[106234034,{"idx":178,"name":"roboboss-shinyorange-08","tpage_name":"mined-pris"}],[144834614,{"idx":54,"name":"rail-gray-metal-01","tpage_name":"combn-tfrag"}],[154796054,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"ljakndax-pris"}],[106234033,{"idx":177,"name":"roboboss-shinyorange-07","tpage_name":"mined-pris"}],[134873173,{"idx":85,"name":"rub-copper-metal-01","tpage_name":"rubbleb-vis-tfrag"}],[144834613,{"idx":53,"name":"rail-pipe-03","tpage_name":"combn-tfrag"}],[154796053,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"ljakndax-pris"}],[106234032,{"idx":176,"name":"roboboss-shinyorange-06","tpage_name":"mined-pris"}],[144834612,{"idx":52,"name":"rail-pipe-01","tpage_name":"combn-tfrag"}],[154796052,{"idx":20,"name":"jakc-armor","tpage_name":"ljakndax-pris"}],[106234031,{"idx":175,"name":"roboboss-shinyorange-05","tpage_name":"mined-pris"}],[134873171,{"idx":83,"name":"rub-statue-stone-01","tpage_name":"rubbleb-vis-tfrag"}],[144834611,{"idx":51,"name":"rail-cord-01","tpage_name":"combn-tfrag"}],[154796051,{"idx":19,"name":"environment-oldmetal","tpage_name":"ljakndax-pris"}],[106234030,{"idx":174,"name":"roboboss-shinyorange-04","tpage_name":"mined-pris"}],[144834610,{"idx":50,"name":"rail-detail-01","tpage_name":"combn-tfrag"}],[154796050,{"idx":18,"name":"daxtertuft","tpage_name":"ljakndax-pris"}],[106234014,{"idx":158,"name":"airlock-door-main","tpage_name":"mined-pris"}],[144834594,{"idx":34,"name":"comb-pipe","tpage_name":"combn-tfrag"}],[153550854,{"idx":6,"name":"city-farm-cattail-grass","tpage_name":"mhcitya-vis-shrub"}],[154796034,{"idx":2,"name":"daxter-eyelid","tpage_name":"ljakndax-pris"}],[106234013,{"idx":157,"name":"airlock-door-cog1","tpage_name":"mined-pris"}],[144834593,{"idx":33,"name":"comb-pipe3","tpage_name":"combn-tfrag"}],[153550853,{"idx":5,"name":"mhcity-plant-light-01","tpage_name":"mhcitya-vis-shrub"}],[154796033,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljakndax-pris"}],[106234012,{"idx":156,"name":"airlock-door-cog","tpage_name":"mined-pris"}],[144834592,{"idx":32,"name":"comb-pipe1","tpage_name":"combn-tfrag"}],[153550852,{"idx":4,"name":"mhcity-plant-01","tpage_name":"mhcitya-vis-shrub"}],[154796032,{"idx":0,"name":"bam-eyelight","tpage_name":"ljakndax-pris"}],[106234011,{"idx":155,"name":"airlock-door-bolt","tpage_name":"mined-pris"}],[144834591,{"idx":31,"name":"comb-yell-light","tpage_name":"combn-tfrag"}],[153550851,{"idx":3,"name":"city-wire","tpage_name":"mhcitya-vis-shrub"}],[106234010,{"idx":154,"name":"cav-metdoor-02","tpage_name":"mined-pris"}],[144834590,{"idx":30,"name":"comb-pipe2","tpage_name":"combn-tfrag"}],[153550850,{"idx":2,"name":"mhcity-grunt-egg-horns-01","tpage_name":"mhcitya-vis-shrub"}],[106234009,{"idx":153,"name":"cav-metdoor-01","tpage_name":"mined-pris"}],[144834589,{"idx":29,"name":"comb-ring","tpage_name":"combn-tfrag"}],[153550849,{"idx":1,"name":"mhcity-eggskin","tpage_name":"mhcitya-vis-shrub"}],[106234008,{"idx":152,"name":"mined_rostone-01","tpage_name":"mined-pris"}],[144834588,{"idx":28,"name":"comb-plate-02","tpage_name":"combn-tfrag"}],[153550848,{"idx":0,"name":"mhcity-grunt-egg-rim-01","tpage_name":"mhcitya-vis-shrub"}],[106234007,{"idx":151,"name":"mine-blue-paint-rustdoor","tpage_name":"mined-pris"}],[144834587,{"idx":27,"name":"comb-env","tpage_name":"combn-tfrag"}],[106234006,{"idx":150,"name":"minc-door-metal-03","tpage_name":"mined-pris"}],[144834586,{"idx":26,"name":"comb-env2","tpage_name":"combn-tfrag"}],[151060486,{"idx":6,"name":"cguard1-guntube","tpage_name":"factoryc-vis-pris"}],[106234003,{"idx":147,"name":"minc-rust-bars-01","tpage_name":"mined-pris"}],[143589403,{"idx":27,"name":"rail-light-red","tpage_name":"combc-tfrag"}],[144834583,{"idx":23,"name":"comb-tarn-fade-wall-01","tpage_name":"combn-tfrag"}],[151060483,{"idx":3,"name":"cguard1-backmetal","tpage_name":"factoryc-vis-pris"}],[106234001,{"idx":145,"name":"minc-door-metal-center","tpage_name":"mined-pris"}],[143589401,{"idx":25,"name":"rail-env-wall-01","tpage_name":"combc-tfrag"}],[144834581,{"idx":21,"name":"comb-crct-small","tpage_name":"combn-tfrag"}],[106233998,{"idx":142,"name":"minc-blue-paint-rust04","tpage_name":"mined-pris"}],[143589398,{"idx":22,"name":"rail-gray-metal-01","tpage_name":"combc-tfrag"}],[144834578,{"idx":18,"name":"comb-temp-light","tpage_name":"combn-tfrag"}],[106233997,{"idx":141,"name":"jakc-scarfhanging","tpage_name":"mined-pris"}],[143589397,{"idx":21,"name":"rail-pipe-05","tpage_name":"combc-tfrag"}],[144834577,{"idx":17,"name":"comb-temp-glass","tpage_name":"combn-tfrag"}],[106233996,{"idx":140,"name":"jakc-skirt","tpage_name":"mined-pris"}],[143589396,{"idx":20,"name":"rail-light-yellow","tpage_name":"combc-tfrag"}],[144834576,{"idx":16,"name":"comb-temp-dark","tpage_name":"combn-tfrag"}],[106233981,{"idx":125,"name":"ecocreature-palm","tpage_name":"mined-pris"}],[126156861,{"idx":61,"name":"sewer-brick-roof-03","tpage_name":"sewo-vis-tfrag"}],[143589381,{"idx":5,"name":"comb-yell-light","tpage_name":"combc-tfrag"}],[144834561,{"idx":1,"name":"minb-stone12","tpage_name":"combn-tfrag"}],[106233980,{"idx":124,"name":"ecocreature-joint","tpage_name":"mined-pris"}],[126156860,{"idx":60,"name":"sewer-brick-roof-01","tpage_name":"sewo-vis-tfrag"}],[144834560,{"idx":0,"name":"minb-stone26","tpage_name":"combn-tfrag"}],[106233979,{"idx":123,"name":"ecocreature-insidemouth","tpage_name":"mined-pris"}],[126156859,{"idx":59,"name":"sewer-brick-roof-02","tpage_name":"sewo-vis-tfrag"}],[106233978,{"idx":122,"name":"ecocreature-flesh","tpage_name":"mined-pris"}],[126156858,{"idx":58,"name":"sewer-red-light-02","tpage_name":"sewo-vis-tfrag"}],[143589378,{"idx":2,"name":"comb-temp-glass","tpage_name":"combc-tfrag"}],[106233977,{"idx":121,"name":"ecocreature-eye","tpage_name":"mined-pris"}],[126156857,{"idx":57,"name":"sewer-red-light-01","tpage_name":"sewo-vis-tfrag"}],[143589377,{"idx":1,"name":"comb-temp-dark","tpage_name":"combc-tfrag"}],[106233976,{"idx":120,"name":"ecocreature-claws","tpage_name":"mined-pris"}],[126156856,{"idx":56,"name":"sewer-pipe-rim-09","tpage_name":"sewo-vis-tfrag"}],[106233948,{"idx":92,"name":"mined_redbrake","tpage_name":"mined-pris"}],[121176108,{"idx":44,"name":"jakchires-jacket","tpage_name":"hiphog-vis-pris"}],[126156828,{"idx":28,"name":"sewer-pipe-rim-01","tpage_name":"sewo-vis-tfrag"}],[134873088,{"idx":0,"name":"rub-metal-01","tpage_name":"rubbleb-vis-tfrag"}],[106233947,{"idx":91,"name":"minc-yel-safe-paint-rust01","tpage_name":"mined-pris"}],[121176107,{"idx":43,"name":"jakchires-horn","tpage_name":"hiphog-vis-pris"}],[126156827,{"idx":27,"name":"sewer-pipe-02-edge-01","tpage_name":"sewo-vis-tfrag"}],[106233946,{"idx":90,"name":"minc-yel-paint-rust01","tpage_name":"mined-pris"}],[121176106,{"idx":42,"name":"jakchires-hair","tpage_name":"hiphog-vis-pris"}],[126156826,{"idx":26,"name":"sewer-pipe-01","tpage_name":"sewo-vis-tfrag"}],[106233945,{"idx":89,"name":"minc-screw-02","tpage_name":"mined-pris"}],[121176105,{"idx":41,"name":"jakchires-glovetop","tpage_name":"hiphog-vis-pris"}],[126156825,{"idx":25,"name":"sewer-pipe-rim-06","tpage_name":"sewo-vis-tfrag"}],[106233944,{"idx":88,"name":"minc-safe-plate-02","tpage_name":"mined-pris"}],[121176104,{"idx":40,"name":"jakchires-facert","tpage_name":"hiphog-vis-pris"}],[126156824,{"idx":24,"name":"sewer-metal-block-07","tpage_name":"sewo-vis-tfrag"}],[131137544,{"idx":8,"name":"mhcity-puffer-top-01","tpage_name":"lctydest-pris"}],[106233943,{"idx":87,"name":"minc-reflector","tpage_name":"mined-pris"}],[121176103,{"idx":39,"name":"jakchires-facelft","tpage_name":"hiphog-vis-pris"}],[126156823,{"idx":23,"name":"sewer-scaffold-03","tpage_name":"sewo-vis-tfrag"}],[131137543,{"idx":7,"name":"mhcity-puffer-mid-01","tpage_name":"lctydest-pris"}],[106233942,{"idx":86,"name":"minc-light-red","tpage_name":"mined-pris"}],[121176102,{"idx":38,"name":"jakchires-eyelid","tpage_name":"hiphog-vis-pris"}],[126156822,{"idx":22,"name":"sewer-metal-trim-01","tpage_name":"sewo-vis-tfrag"}],[131137542,{"idx":6,"name":"mhcity-floor-brace-02","tpage_name":"lctydest-pris"}],[106233939,{"idx":83,"name":"minc-door-metal-06","tpage_name":"mined-pris"}],[121176099,{"idx":35,"name":"jakchires-clips","tpage_name":"hiphog-vis-pris"}],[126156819,{"idx":19,"name":"sewer-brick-block-10","tpage_name":"sewo-vis-tfrag"}],[106233938,{"idx":82,"name":"minc-door-metal-05","tpage_name":"mined-pris"}],[121176098,{"idx":34,"name":"jakchires-chestplate","tpage_name":"hiphog-vis-pris"}],[126156818,{"idx":18,"name":"sewer-brick-block-11","tpage_name":"sewo-vis-tfrag"}],[106233937,{"idx":81,"name":"minc-crm-paint-wall-01","tpage_name":"mined-pris"}],[121176097,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"hiphog-vis-pris"}],[126156817,{"idx":17,"name":"sewer-pipe-02","tpage_name":"sewo-vis-tfrag"}],[106233936,{"idx":80,"name":"minc-crate-02","tpage_name":"mined-pris"}],[121176096,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"hiphog-vis-pris"}],[126156816,{"idx":16,"name":"common-black","tpage_name":"sewo-vis-tfrag"}],[106233935,{"idx":79,"name":"minc-blue-paint-01","tpage_name":"mined-pris"}],[121176095,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"hiphog-vis-pris"}],[126156815,{"idx":15,"name":"sewer-pipe-rim-07-hitweak","tpage_name":"sewo-vis-tfrag"}],[106233931,{"idx":75,"name":"minc-rust-01","tpage_name":"mined-pris"}],[121176091,{"idx":27,"name":"jakc-waistband2","tpage_name":"hiphog-vis-pris"}],[126156811,{"idx":11,"name":"sewer-pipe-rim-10","tpage_name":"sewo-vis-tfrag"}],[106233930,{"idx":74,"name":"minc-blue-paint-rust05","tpage_name":"mined-pris"}],[118685730,{"idx":34,"name":"king-wristband","tpage_name":"ljkcdmkl-pris2"}],[121176090,{"idx":26,"name":"jakc-skirt","tpage_name":"hiphog-vis-pris"}],[126156810,{"idx":10,"name":"sewer-block-01","tpage_name":"sewo-vis-tfrag"}],[106233929,{"idx":73,"name":"minc-blue-paint-rust01","tpage_name":"mined-pris"}],[118685729,{"idx":33,"name":"king-wraps","tpage_name":"ljkcdmkl-pris2"}],[121176089,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"hiphog-vis-pris"}],[126156809,{"idx":9,"name":"sewer-lip-01","tpage_name":"sewo-vis-tfrag"}],[106233922,{"idx":66,"name":"jakchires-lightbrownspat","tpage_name":"mined-pris"}],[118685722,{"idx":26,"name":"king-skirt","tpage_name":"ljkcdmkl-pris2"}],[121176082,{"idx":18,"name":"daxtertuft","tpage_name":"hiphog-vis-pris"}],[126156802,{"idx":2,"name":"sewer-pipe-rim-05","tpage_name":"sewo-vis-tfrag"}],[106233921,{"idx":65,"name":"jakchires-leatherpouch","tpage_name":"mined-pris"}],[118685721,{"idx":25,"name":"king-shoebottom","tpage_name":"ljkcdmkl-pris2"}],[121176081,{"idx":17,"name":"daxterteeth","tpage_name":"hiphog-vis-pris"}],[126156801,{"idx":1,"name":"sewer-metal-block-04","tpage_name":"sewo-vis-tfrag"}],[106233920,{"idx":64,"name":"jakchires-jacket","tpage_name":"mined-pris"}],[118685720,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"ljkcdmkl-pris2"}],[121176080,{"idx":16,"name":"daxternose","tpage_name":"hiphog-vis-pris"}],[126156800,{"idx":0,"name":"sewer-metal-block-06","tpage_name":"sewo-vis-tfrag"}],[106233919,{"idx":63,"name":"jakchires-horn","tpage_name":"mined-pris"}],[118685719,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"ljkcdmkl-pris2"}],[121176079,{"idx":15,"name":"daxterlense","tpage_name":"hiphog-vis-pris"}],[106233918,{"idx":62,"name":"jakchires-hair","tpage_name":"mined-pris"}],[118685718,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"ljkcdmkl-pris2"}],[121176078,{"idx":14,"name":"daxterhelmetplain","tpage_name":"hiphog-vis-pris"}],[106233917,{"idx":61,"name":"jakchires-glovetop","tpage_name":"mined-pris"}],[118685717,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"ljkcdmkl-pris2"}],[121176077,{"idx":13,"name":"daxterheadwidenew","tpage_name":"hiphog-vis-pris"}],[106233915,{"idx":59,"name":"jakchires-facelft","tpage_name":"mined-pris"}],[118685715,{"idx":19,"name":"king-lgblackstrap","tpage_name":"ljkcdmkl-pris2"}],[121176075,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"hiphog-vis-pris"}],[106233913,{"idx":57,"name":"jakchires-eyebrow","tpage_name":"mined-pris"}],[118685713,{"idx":17,"name":"king-iris","tpage_name":"ljkcdmkl-pris2"}],[121176073,{"idx":9,"name":"daxterfinger","tpage_name":"hiphog-vis-pris"}],[106233912,{"idx":56,"name":"jakchires-eye","tpage_name":"mined-pris"}],[118685712,{"idx":16,"name":"king-horn","tpage_name":"ljkcdmkl-pris2"}],[121176072,{"idx":8,"name":"daxterear","tpage_name":"hiphog-vis-pris"}],[106233911,{"idx":55,"name":"jakchires-clips","tpage_name":"mined-pris"}],[118685711,{"idx":15,"name":"king-hand","tpage_name":"ljkcdmkl-pris2"}],[121176071,{"idx":7,"name":"daxterbolt","tpage_name":"hiphog-vis-pris"}],[106233910,{"idx":54,"name":"jakchires-chestplate","tpage_name":"mined-pris"}],[118685710,{"idx":14,"name":"king-hair","tpage_name":"ljkcdmkl-pris2"}],[121176070,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"hiphog-vis-pris"}],[106233909,{"idx":53,"name":"jakchires-brwnleather","tpage_name":"mined-pris"}],[118685709,{"idx":13,"name":"king-greenmetalplain","tpage_name":"ljkcdmkl-pris2"}],[121176069,{"idx":5,"name":"daxterarm","tpage_name":"hiphog-vis-pris"}],[106233908,{"idx":52,"name":"jakchires-brownstrap","tpage_name":"mined-pris"}],[118685708,{"idx":12,"name":"king-greenmetal","tpage_name":"ljkcdmkl-pris2"}],[121176068,{"idx":4,"name":"daxter-orange","tpage_name":"hiphog-vis-pris"}],[106233907,{"idx":51,"name":"jakchires-blackstrap","tpage_name":"mined-pris"}],[118685707,{"idx":11,"name":"king-finger","tpage_name":"ljkcdmkl-pris2"}],[121176067,{"idx":3,"name":"daxter-furhilite","tpage_name":"hiphog-vis-pris"}],[106233906,{"idx":50,"name":"jakchires-arm","tpage_name":"mined-pris"}],[118685706,{"idx":10,"name":"king-face-01","tpage_name":"ljkcdmkl-pris2"}],[121176066,{"idx":2,"name":"daxter-eyelid","tpage_name":"hiphog-vis-pris"}],[106233905,{"idx":49,"name":"jakc-wristband-a2","tpage_name":"mined-pris"}],[118685705,{"idx":9,"name":"king-earing","tpage_name":"ljkcdmkl-pris2"}],[121176065,{"idx":1,"name":"bam-hairhilite","tpage_name":"hiphog-vis-pris"}],[106233904,{"idx":48,"name":"jakc-wraps","tpage_name":"mined-pris"}],[118685704,{"idx":8,"name":"king-ear","tpage_name":"ljkcdmkl-pris2"}],[121176064,{"idx":0,"name":"bam-eyelight","tpage_name":"hiphog-vis-pris"}],[106233903,{"idx":47,"name":"jakc-waistband2","tpage_name":"mined-pris"}],[118685703,{"idx":7,"name":"king-clip-02","tpage_name":"ljkcdmkl-pris2"}],[119930883,{"idx":3,"name":"logo-black","tpage_name":"title-pris"}],[106233902,{"idx":46,"name":"jakc-scarf","tpage_name":"mined-pris"}],[118685702,{"idx":6,"name":"king-chest","tpage_name":"ljkcdmkl-pris2"}],[106233901,{"idx":45,"name":"jakc-lens","tpage_name":"mined-pris"}],[118685701,{"idx":5,"name":"king-bolt","tpage_name":"ljkcdmkl-pris2"}],[119930881,{"idx":1,"name":"logo-jak","tpage_name":"title-pris"}],[106233900,{"idx":44,"name":"jakc-gogglemetal","tpage_name":"mined-pris"}],[118685700,{"idx":4,"name":"king-bluemetal","tpage_name":"ljkcdmkl-pris2"}],[119930880,{"idx":0,"name":"logo-circuit","tpage_name":"title-pris"}],[106233899,{"idx":43,"name":"jakc-chestplate-straps","tpage_name":"mined-pris"}],[118685699,{"idx":3,"name":"king-blackskirt2","tpage_name":"ljkcdmkl-pris2"}],[106233898,{"idx":42,"name":"jakc-armor","tpage_name":"mined-pris"}],[118685698,{"idx":2,"name":"king-arm","tpage_name":"ljkcdmkl-pris2"}],[106233897,{"idx":41,"name":"environment-oldmetal","tpage_name":"mined-pris"}],[118685697,{"idx":1,"name":"environment-oldmetal","tpage_name":"ljkcdmkl-pris2"}],[106233896,{"idx":40,"name":"mine-white-stripe-metal-01","tpage_name":"mined-pris"}],[118685696,{"idx":0,"name":"bam-eyelight","tpage_name":"ljkcdmkl-pris2"}],[106233895,{"idx":39,"name":"mine-under-metal-01","tpage_name":"mined-pris"}],[106233894,{"idx":38,"name":"mine-slate-metal-01","tpage_name":"mined-pris"}],[106233893,{"idx":37,"name":"mine-rust-01","tpage_name":"mined-pris"}],[106233892,{"idx":36,"name":"mine-red-white-metal-01","tpage_name":"mined-pris"}],[106233891,{"idx":35,"name":"mine-red-stripe-metal-01","tpage_name":"mined-pris"}],[106233890,{"idx":34,"name":"mine-red-paint-rust05","tpage_name":"mined-pris"}],[106233889,{"idx":33,"name":"mine-red-metal-01","tpage_name":"mined-pris"}],[106233888,{"idx":32,"name":"mine-red-big-metal-01","tpage_name":"mined-pris"}],[106233887,{"idx":31,"name":"mine-pipe-metal-01","tpage_name":"mined-pris"}],[106233886,{"idx":30,"name":"mine-metal-wheel-01","tpage_name":"mined-pris"}],[106233885,{"idx":29,"name":"mine-gray-metal-01","tpage_name":"mined-pris"}],[106233884,{"idx":28,"name":"mine-decal-metal-01","tpage_name":"mined-pris"}],[106233883,{"idx":27,"name":"mine-caution-metal-01","tpage_name":"mined-pris"}],[106233882,{"idx":26,"name":"mine-can-metal-01","tpage_name":"mined-pris"}],[106233881,{"idx":25,"name":"mine-blue-metal-01","tpage_name":"mined-pris"}],[91291721,{"idx":73,"name":"sewer-rubber-rim-01","tpage_name":"gungame-vis-tfrag"}],[106233880,{"idx":24,"name":"daxtertuft","tpage_name":"mined-pris"}],[91291720,{"idx":72,"name":"hip-twood01","tpage_name":"gungame-vis-tfrag"}],[106233879,{"idx":23,"name":"daxterteeth","tpage_name":"mined-pris"}],[91291719,{"idx":71,"name":"hip-tmetring02","tpage_name":"gungame-vis-tfrag"}],[106233878,{"idx":22,"name":"daxternose","tpage_name":"mined-pris"}],[91291718,{"idx":70,"name":"hip-tmetfloor04","tpage_name":"gungame-vis-tfrag"}],[106233877,{"idx":21,"name":"daxterlense","tpage_name":"mined-pris"}],[91291717,{"idx":69,"name":"gun-vent-01","tpage_name":"gungame-vis-tfrag"}],[106233875,{"idx":19,"name":"daxterheadwidenew","tpage_name":"mined-pris"}],[91291715,{"idx":67,"name":"gun-track-01","tpage_name":"gungame-vis-tfrag"}],[106233874,{"idx":18,"name":"daxtergoggles","tpage_name":"mined-pris"}],[91291714,{"idx":66,"name":"gun-rubber-01","tpage_name":"gungame-vis-tfrag"}],[106233873,{"idx":17,"name":"daxterfoot-bottom","tpage_name":"mined-pris"}],[91291713,{"idx":65,"name":"gun-roof-01","tpage_name":"gungame-vis-tfrag"}],[106233872,{"idx":16,"name":"daxterfoot","tpage_name":"mined-pris"}],[91291712,{"idx":64,"name":"gun-pump","tpage_name":"gungame-vis-tfrag"}],[106233871,{"idx":15,"name":"daxterfinger","tpage_name":"mined-pris"}],[91291711,{"idx":63,"name":"gun-pavement-01","tpage_name":"gungame-vis-tfrag"}],[106233870,{"idx":14,"name":"daxterear","tpage_name":"mined-pris"}],[91291710,{"idx":62,"name":"gun-metal-rim-01","tpage_name":"gungame-vis-tfrag"}],[106233869,{"idx":13,"name":"daxterbolt","tpage_name":"mined-pris"}],[91291709,{"idx":61,"name":"gun-metal-darker-02","tpage_name":"gungame-vis-tfrag"}],[106233868,{"idx":12,"name":"daxterbodyshort-eix","tpage_name":"mined-pris"}],[91291708,{"idx":60,"name":"gun-metal-darker-01","tpage_name":"gungame-vis-tfrag"}],[106233867,{"idx":11,"name":"daxterarm","tpage_name":"mined-pris"}],[91291707,{"idx":59,"name":"gun-metal-block-04","tpage_name":"gungame-vis-tfrag"}],[106233866,{"idx":10,"name":"daxter-orange","tpage_name":"mined-pris"}],[91291706,{"idx":58,"name":"gun-metal-03b","tpage_name":"gungame-vis-tfrag"}],[106233865,{"idx":9,"name":"daxter-furhilite","tpage_name":"mined-pris"}],[91291705,{"idx":57,"name":"gun-metal-03","tpage_name":"gungame-vis-tfrag"}],[106233864,{"idx":8,"name":"daxter-eyelid","tpage_name":"mined-pris"}],[91291704,{"idx":56,"name":"gun-metal-02","tpage_name":"gungame-vis-tfrag"}],[106233863,{"idx":7,"name":"bam-hairhilite","tpage_name":"mined-pris"}],[91291703,{"idx":55,"name":"gun-metal-01","tpage_name":"gungame-vis-tfrag"}],[106233862,{"idx":6,"name":"bam-eyelight","tpage_name":"mined-pris"}],[91291702,{"idx":54,"name":"gun-main","tpage_name":"gungame-vis-tfrag"}],[106233861,{"idx":5,"name":"prebot-tentacles","tpage_name":"mined-pris"}],[91291701,{"idx":53,"name":"gun-magport","tpage_name":"gungame-vis-tfrag"}],[106233860,{"idx":4,"name":"prebot-orange","tpage_name":"mined-pris"}],[91291700,{"idx":52,"name":"gun-lightwall-01","tpage_name":"gungame-vis-tfrag"}],[106233859,{"idx":3,"name":"prebot-innermetal","tpage_name":"mined-pris"}],[91291699,{"idx":51,"name":"gun-light-01","tpage_name":"gungame-vis-tfrag"}],[106233858,{"idx":2,"name":"prebot-eye-reflection","tpage_name":"mined-pris"}],[91291698,{"idx":50,"name":"gun-leather","tpage_name":"gungame-vis-tfrag"}],[106233857,{"idx":1,"name":"prebot-eye","tpage_name":"mined-pris"}],[91291697,{"idx":49,"name":"gun-lamp-metal-02","tpage_name":"gungame-vis-tfrag"}],[106233856,{"idx":0,"name":"prebot-envmap","tpage_name":"mined-pris"}],[91291696,{"idx":48,"name":"gun-lamp-metal-01","tpage_name":"gungame-vis-tfrag"}],[106168368,{"idx":48,"name":"mined-pillar-molten","tpage_name":"mined-tfrag"}],[112394268,{"idx":28,"name":"intcept-tread01","tpage_name":"desrescg-pris"}],[118620168,{"idx":8,"name":"jakc-scarfhanging","tpage_name":"ljkcdmkl-pris"}],[121110528,{"idx":0,"name":"hip-tmetfloor11","tpage_name":"hiphog-vis-tfrag"}],[106168366,{"idx":46,"name":"minc-ox-pipe-01","tpage_name":"mined-tfrag"}],[112394266,{"idx":26,"name":"intcept-pipe01","tpage_name":"desrescg-pris"}],[118620166,{"idx":6,"name":"jakc-lens","tpage_name":"ljkcdmkl-pris"}],[106168361,{"idx":41,"name":"mined_rostone-01","tpage_name":"mined-tfrag"}],[112394261,{"idx":21,"name":"des-transport-window","tpage_name":"desrescg-pris"}],[118620161,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljkcdmkl-pris"}],[105644035,{"idx":3,"name":"hud-small-frame-02","tpage_name":"mined-minimap"}],[99418135,{"idx":23,"name":"jakc-lens","tpage_name":"volcanox-pris"}],[96927775,{"idx":31,"name":"jinx-belt","tpage_name":"ltornjnx-pris2"}],[90701875,{"idx":51,"name":"des-cliff-top-03","tpage_name":"desertf-vis-tfrag"}],[75759715,{"idx":99,"name":"jakchires-facelft","tpage_name":"onintent-pris"}],[100663315,{"idx":19,"name":"jakb-jacketbody","tpage_name":"ljaksig-pris"}],[105185311,{"idx":31,"name":"environment-oldmetal","tpage_name":"desoasis-pris2"}],[106430491,{"idx":27,"name":"klever-face-01","tpage_name":"desliz-pris"}],[108920851,{"idx":19,"name":"environment-darkprec","tpage_name":"waspgame-pris"}],[105185310,{"idx":30,"name":"bam-hairhilite","tpage_name":"desoasis-pris2"}],[106430490,{"idx":26,"name":"klever-eyelid","tpage_name":"desliz-pris"}],[108920850,{"idx":18,"name":"dk-sat-game-tri-01","tpage_name":"waspgame-pris"}],[105185309,{"idx":29,"name":"bam-eyelight","tpage_name":"desoasis-pris2"}],[106430489,{"idx":25,"name":"klever-eye","tpage_name":"desliz-pris"}],[108920849,{"idx":17,"name":"dk-sat-game-square-01","tpage_name":"waspgame-pris"}],[105185308,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"desoasis-pris2"}],[106430488,{"idx":24,"name":"klever-earcup","tpage_name":"desliz-pris"}],[108920848,{"idx":16,"name":"dk-sat-game-ex-01","tpage_name":"waspgame-pris"}],[105185307,{"idx":27,"name":"ashelin-teeth","tpage_name":"desoasis-pris2"}],[106430487,{"idx":23,"name":"klever-clips","tpage_name":"desliz-pris"}],[108920847,{"idx":15,"name":"dk-sat-game-circle-01","tpage_name":"waspgame-pris"}],[105185306,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"desoasis-pris2"}],[106430486,{"idx":22,"name":"klever-chest","tpage_name":"desliz-pris"}],[108920846,{"idx":14,"name":"dk-sat-heart-vein-01","tpage_name":"waspgame-pris"}],[105185305,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"desoasis-pris2"}],[106430485,{"idx":21,"name":"klever-brownstrap","tpage_name":"desliz-pris"}],[108920845,{"idx":13,"name":"dk-sat-ring-01","tpage_name":"waspgame-pris"}],[105185304,{"idx":24,"name":"ashelin-shield","tpage_name":"desoasis-pris2"}],[106430484,{"idx":20,"name":"klever-bolt","tpage_name":"desliz-pris"}],[108920844,{"idx":12,"name":"dk-sat-heart-01","tpage_name":"waspgame-pris"}],[105185303,{"idx":23,"name":"ashelin-shells","tpage_name":"desoasis-pris2"}],[106430483,{"idx":19,"name":"klever-blackstrap","tpage_name":"desliz-pris"}],[108920843,{"idx":11,"name":"dk-sat-shell-01","tpage_name":"waspgame-pris"}],[105185302,{"idx":22,"name":"ashelin-redtop","tpage_name":"desoasis-pris2"}],[106430482,{"idx":18,"name":"klever-armor-02","tpage_name":"desliz-pris"}],[108920842,{"idx":10,"name":"dk-sat-screen-rim-01","tpage_name":"waspgame-pris"}],[105185301,{"idx":21,"name":"ashelin-pantstop","tpage_name":"desoasis-pris2"}],[106430481,{"idx":17,"name":"klever-armor-01","tpage_name":"desliz-pris"}],[108920841,{"idx":9,"name":"dk-sat-screen-01","tpage_name":"waspgame-pris"}],[105185299,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"desoasis-pris2"}],[106430479,{"idx":15,"name":"bam-hairhilite","tpage_name":"desliz-pris"}],[108920839,{"idx":7,"name":"dk-sat-rim-03","tpage_name":"waspgame-pris"}],[105054355,{"idx":147,"name":"intcept-b-teeth01","tpage_name":"desoasis-pris"}],[147390475,{"idx":11,"name":"grunt-hose","tpage_name":"powergd-pris"}],[105054354,{"idx":146,"name":"intcept-b-pipe01","tpage_name":"desoasis-pris"}],[147390474,{"idx":10,"name":"grunt-gem-01","tpage_name":"powergd-pris"}],[105054353,{"idx":145,"name":"intcept-b-gun01","tpage_name":"desoasis-pris"}],[147390473,{"idx":9,"name":"grunt-eye-01","tpage_name":"powergd-pris"}],[105054352,{"idx":144,"name":"intcept-b-base-patern02","tpage_name":"desoasis-pris"}],[147390472,{"idx":8,"name":"environment-oldmetal","tpage_name":"powergd-pris"}],[105054351,{"idx":143,"name":"intcept-b-base-patern01","tpage_name":"desoasis-pris"}],[147390471,{"idx":7,"name":"cguardgame-metallight-01small","tpage_name":"powergd-pris"}],[105054350,{"idx":142,"name":"intcept-b-base-green01","tpage_name":"desoasis-pris"}],[147390470,{"idx":6,"name":"cguardgame-metaledark-02","tpage_name":"powergd-pris"}],[105054349,{"idx":141,"name":"wing02grey01","tpage_name":"desoasis-pris"}],[147390469,{"idx":5,"name":"cguard1-lens","tpage_name":"powergd-pris"}],[105054348,{"idx":140,"name":"wing02","tpage_name":"desoasis-pris"}],[147390468,{"idx":4,"name":"cguard1-guntube","tpage_name":"powergd-pris"}],[105054347,{"idx":139,"name":"wing01","tpage_name":"desoasis-pris"}],[147390467,{"idx":3,"name":"cguard1-gunmetaldark2","tpage_name":"powergd-pris"}],[105054346,{"idx":138,"name":"turret01","tpage_name":"desoasis-pris"}],[147390466,{"idx":2,"name":"cguard1-chestplate","tpage_name":"powergd-pris"}],[105054345,{"idx":137,"name":"stripe03","tpage_name":"desoasis-pris"}],[147390465,{"idx":1,"name":"cguard1-backmetal","tpage_name":"powergd-pris"}],[105054344,{"idx":136,"name":"seat01","tpage_name":"desoasis-pris"}],[147390464,{"idx":0,"name":"bam-eyelight","tpage_name":"powergd-pris"}],[105054343,{"idx":135,"name":"rail01","tpage_name":"desoasis-pris"}],[105054342,{"idx":134,"name":"post01","tpage_name":"desoasis-pris"}],[105054341,{"idx":133,"name":"lightCase01","tpage_name":"desoasis-pris"}],[105054340,{"idx":132,"name":"light01","tpage_name":"desoasis-pris"}],[142409740,{"idx":12,"name":"des-beast-skin","tpage_name":"desbattl-pris2"}],[105054339,{"idx":131,"name":"kcfrontend01","tpage_name":"desoasis-pris"}],[142409739,{"idx":11,"name":"des-beast-nails","tpage_name":"desbattl-pris2"}],[105054338,{"idx":130,"name":"jets01","tpage_name":"desoasis-pris"}],[142409738,{"idx":10,"name":"des-beast-mouth","tpage_name":"desbattl-pris2"}],[105054337,{"idx":129,"name":"jetTop01","tpage_name":"desoasis-pris"}],[142409737,{"idx":9,"name":"des-beast-metal-teeth","tpage_name":"desbattl-pris2"}],[105054336,{"idx":128,"name":"hood01","tpage_name":"desoasis-pris"}],[142409736,{"idx":8,"name":"des-beast-metal-riveting","tpage_name":"desbattl-pris2"}],[144900096,{"idx":0,"name":"minc-pre-12","tpage_name":"combn-water"}],[105054335,{"idx":127,"name":"gunbox02","tpage_name":"desoasis-pris"}],[142409735,{"idx":7,"name":"des-beast-metal-cap","tpage_name":"desbattl-pris2"}],[105054334,{"idx":126,"name":"gunbox01","tpage_name":"desoasis-pris"}],[142409734,{"idx":6,"name":"des-beast-metal-02","tpage_name":"desbattl-pris2"}],[105054333,{"idx":125,"name":"gunBoxFront01","tpage_name":"desoasis-pris"}],[142409733,{"idx":5,"name":"des-beast-metal-01","tpage_name":"desbattl-pris2"}],[105054332,{"idx":124,"name":"gunBoxBack01","tpage_name":"desoasis-pris"}],[142409732,{"idx":4,"name":"des-beast-leg","tpage_name":"desbattl-pris2"}],[105054331,{"idx":123,"name":"grillRim01","tpage_name":"desoasis-pris"}],[142409731,{"idx":3,"name":"des-beast-gunend","tpage_name":"desbattl-pris2"}],[105054330,{"idx":122,"name":"gauge01","tpage_name":"desoasis-pris"}],[142409730,{"idx":2,"name":"des-beast-feet","tpage_name":"desbattl-pris2"}],[105054329,{"idx":121,"name":"dash01","tpage_name":"desoasis-pris"}],[142409729,{"idx":1,"name":"des-beast-eye","tpage_name":"desbattl-pris2"}],[105054328,{"idx":120,"name":"backThing01","tpage_name":"desoasis-pris"}],[142409728,{"idx":0,"name":"des-beast-brown-tube","tpage_name":"desbattl-pris2"}],[105054327,{"idx":119,"name":"vehicle-wheel-blur-01","tpage_name":"desoasis-pris"}],[134938647,{"idx":23,"name":"rub-blotch-withstreaks-01","tpage_name":"rubbleb-vis-shrub"}],[105054326,{"idx":118,"name":"vehicle-wheel-01","tpage_name":"desoasis-pris"}],[134938646,{"idx":22,"name":"rub-stain-01","tpage_name":"rubbleb-vis-shrub"}],[105054319,{"idx":111,"name":"vehicle-cap-pin-01","tpage_name":"desoasis-pris"}],[134938639,{"idx":15,"name":"rub-crater-shards-01","tpage_name":"rubbleb-vis-shrub"}],[105054318,{"idx":110,"name":"vehicle-brace-pipe-01","tpage_name":"desoasis-pris"}],[134938638,{"idx":14,"name":"ctyn-stain-wall-01","tpage_name":"rubbleb-vis-shrub"}],[105054236,{"idx":28,"name":"ashelin-lo-whitestrap","tpage_name":"desoasis-pris"}],[112525316,{"idx":4,"name":"daxter-orange","tpage_name":"desrescc-pris"}],[105054235,{"idx":27,"name":"ashelin-lo-shoemetal","tpage_name":"desoasis-pris"}],[112525315,{"idx":3,"name":"daxter-furhilite","tpage_name":"desrescc-pris"}],[105054234,{"idx":26,"name":"ashelin-lo-shoebottom","tpage_name":"desoasis-pris"}],[112525314,{"idx":2,"name":"daxter-eyelid","tpage_name":"desrescc-pris"}],[105054233,{"idx":25,"name":"ashelin-lo-shield","tpage_name":"desoasis-pris"}],[112525313,{"idx":1,"name":"bam-hairhilite","tpage_name":"desrescc-pris"}],[105054232,{"idx":24,"name":"ashelin-lo-shells","tpage_name":"desoasis-pris"}],[112525312,{"idx":0,"name":"bam-eyelight","tpage_name":"desrescc-pris"}],[105054231,{"idx":23,"name":"ashelin-lo-redtop","tpage_name":"desoasis-pris"}],[105054230,{"idx":22,"name":"ashelin-lo-pantstop","tpage_name":"desoasis-pris"}],[105054229,{"idx":21,"name":"ashelin-lo-jacketstraps","tpage_name":"desoasis-pris"}],[111280129,{"idx":1,"name":"ceiling-dust","tpage_name":"lwassig-sprite"}],[105054228,{"idx":20,"name":"ashelin-lo-jacketsleeve","tpage_name":"desoasis-pris"}],[105054227,{"idx":19,"name":"ashelin-lo-jacketbody","tpage_name":"desoasis-pris"}],[105054226,{"idx":18,"name":"ashelin-lo-handle-01","tpage_name":"desoasis-pris"}],[105054225,{"idx":17,"name":"ashelin-lo-hair","tpage_name":"desoasis-pris"}],[105054224,{"idx":16,"name":"ashelin-lo-gunholster","tpage_name":"desoasis-pris"}],[105054223,{"idx":15,"name":"ashelin-lo-gunbarrel-03","tpage_name":"desoasis-pris"}],[105054222,{"idx":14,"name":"ashelin-lo-gunbarrel-02","tpage_name":"desoasis-pris"}],[105054221,{"idx":13,"name":"ashelin-lo-gunbarrel-01","tpage_name":"desoasis-pris"}],[100073501,{"idx":29,"name":"jakb-shoeteop","tpage_name":"ljak-pris"}],[105054220,{"idx":12,"name":"ashelin-lo-glove","tpage_name":"desoasis-pris"}],[100073500,{"idx":28,"name":"jakb-shoemetal","tpage_name":"ljak-pris"}],[105054219,{"idx":11,"name":"ashelin-lo-face","tpage_name":"desoasis-pris"}],[100073499,{"idx":27,"name":"jakb-shoebottom","tpage_name":"ljak-pris"}],[105054218,{"idx":10,"name":"ashelin-lo-eyebrow","tpage_name":"desoasis-pris"}],[100073498,{"idx":26,"name":"jakb-scarf","tpage_name":"ljak-pris"}],[105054217,{"idx":9,"name":"ashelin-lo-eye","tpage_name":"desoasis-pris"}],[100073497,{"idx":25,"name":"jakb-pants","tpage_name":"ljak-pris"}],[104923163,{"idx":27,"name":"ashelin-teeth","tpage_name":"oasiscst-pris2"}],[106168343,{"idx":23,"name":"minc-metal-patch-01","tpage_name":"mined-tfrag"}],[112394243,{"idx":3,"name":"des-transport-cowcatch","tpage_name":"desrescg-pris"}],[104923162,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"oasiscst-pris2"}],[112394242,{"idx":2,"name":"des-transport-can","tpage_name":"desrescg-pris"}],[106168342,{"idx":22,"name":"minc-safe-plate-01","tpage_name":"mined-tfrag"}],[104923159,{"idx":23,"name":"ashelin-shells","tpage_name":"oasiscst-pris2"}],[104923158,{"idx":22,"name":"ashelin-redtop","tpage_name":"oasiscst-pris2"}],[104923157,{"idx":21,"name":"ashelin-pantstop","tpage_name":"oasiscst-pris2"}],[104923156,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"oasiscst-pris2"}],[111149056,{"idx":0,"name":"map-wasdoors","tpage_name":"wasdoors-minimap"}],[104923155,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"oasiscst-pris2"}],[106168335,{"idx":15,"name":"minc-door-metal-01","tpage_name":"mined-tfrag"}],[104923154,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"oasiscst-pris2"}],[104923153,{"idx":17,"name":"ashelin-handle-01","tpage_name":"oasiscst-pris2"}],[104923152,{"idx":16,"name":"ashelin-hair","tpage_name":"oasiscst-pris2"}],[104923151,{"idx":15,"name":"ashelin-gunholster","tpage_name":"oasiscst-pris2"}],[104923150,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"oasiscst-pris2"}],[106168330,{"idx":10,"name":"minc-blue-paint-rust04","tpage_name":"mined-tfrag"}],[104923149,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"oasiscst-pris2"}],[104923148,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"oasiscst-pris2"}],[106168328,{"idx":8,"name":"common-black","tpage_name":"mined-tfrag"}],[104923147,{"idx":11,"name":"ashelin-glove","tpage_name":"oasiscst-pris2"}],[104923146,{"idx":10,"name":"ashelin-face","tpage_name":"oasiscst-pris2"}],[104923145,{"idx":9,"name":"ashelin-eyelid","tpage_name":"oasiscst-pris2"}],[104923144,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"oasiscst-pris2"}],[104923143,{"idx":7,"name":"ashelin-eye","tpage_name":"oasiscst-pris2"}],[104923142,{"idx":6,"name":"ashelin-chest","tpage_name":"oasiscst-pris2"}],[104923141,{"idx":5,"name":"ashelin-cgrank","tpage_name":"oasiscst-pris2"}],[104923140,{"idx":4,"name":"ashelin-cglogo","tpage_name":"oasiscst-pris2"}],[104923139,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"oasiscst-pris2"}],[89980979,{"idx":51,"name":"des-cave-floor-01","tpage_name":"desertg-vis-tfrag"}],[94961699,{"idx":35,"name":"jakc-scarfhanging","tpage_name":"lsigjakc-pris"}],[104923138,{"idx":2,"name":"ashelin-boottop","tpage_name":"oasiscst-pris2"}],[89980978,{"idx":50,"name":"des-egg-gem-01","tpage_name":"desertg-vis-tfrag"}],[94961698,{"idx":34,"name":"jakc-skirt","tpage_name":"lsigjakc-pris"}],[104923137,{"idx":1,"name":"ashelin-bolts","tpage_name":"oasiscst-pris2"}],[89980977,{"idx":49,"name":"des-egg-bottom","tpage_name":"desertg-vis-tfrag"}],[94961697,{"idx":33,"name":"jakchires-teeth","tpage_name":"lsigjakc-pris"}],[104923136,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"oasiscst-pris2"}],[89980976,{"idx":48,"name":"des-egg-rim-01","tpage_name":"desertg-vis-tfrag"}],[94961696,{"idx":32,"name":"jakchires-shoeteop","tpage_name":"lsigjakc-pris"}],[104857645,{"idx":45,"name":"jakchires-pants","tpage_name":"oasiscst-pris"}],[91160665,{"idx":89,"name":"jakchires-chestplate","tpage_name":"gungame-vis-pris"}],[112328725,{"idx":21,"name":"environment-oldmetal","tpage_name":"wascast-pris"}],[117637253,{"idx":133,"name":"wstlander-01-mustache","tpage_name":"destrack-pris"}],[148766753,{"idx":33,"name":"jakchires-shoemetal","tpage_name":"warpcast-pris"}],[152502293,{"idx":21,"name":"rail-env-wall-01","tpage_name":"templex-vis-tfrag"}],[104857641,{"idx":41,"name":"jakchires-horn","tpage_name":"oasiscst-pris"}],[91160661,{"idx":85,"name":"jakchires-arm","tpage_name":"gungame-vis-pris"}],[112328721,{"idx":17,"name":"daxterteeth","tpage_name":"wascast-pris"}],[117637252,{"idx":132,"name":"wstlander-01-leatherstrap","tpage_name":"destrack-pris"}],[148766752,{"idx":32,"name":"jakchires-shoebottom","tpage_name":"warpcast-pris"}],[152502292,{"idx":20,"name":"temple_sandstone_plat01","tpage_name":"templex-vis-tfrag"}],[104857640,{"idx":40,"name":"jakchires-hair","tpage_name":"oasiscst-pris"}],[91160660,{"idx":84,"name":"jakc-wristband-a2","tpage_name":"gungame-vis-pris"}],[112328720,{"idx":16,"name":"daxternose","tpage_name":"wascast-pris"}],[117637251,{"idx":131,"name":"wstlander-01-head","tpage_name":"destrack-pris"}],[148766751,{"idx":31,"name":"jakchires-precarmor-01","tpage_name":"warpcast-pris"}],[104857639,{"idx":39,"name":"jakchires-glovetop","tpage_name":"oasiscst-pris"}],[91160659,{"idx":83,"name":"jakc-wraps","tpage_name":"gungame-vis-pris"}],[112328719,{"idx":15,"name":"daxterlense","tpage_name":"wascast-pris"}],[117637250,{"idx":130,"name":"wstlander-01-gunmetal-04","tpage_name":"destrack-pris"}],[148766750,{"idx":30,"name":"jakchires-pants","tpage_name":"warpcast-pris"}],[152502290,{"idx":18,"name":"temple_sandstone_ground02","tpage_name":"templex-vis-tfrag"}],[104857638,{"idx":38,"name":"jakchires-facert","tpage_name":"oasiscst-pris"}],[112328718,{"idx":14,"name":"daxterhelmetplain","tpage_name":"wascast-pris"}],[91160658,{"idx":82,"name":"jakc-waistband2","tpage_name":"gungame-vis-pris"}],[117637249,{"idx":129,"name":"wstlander-01-gunmetal-03","tpage_name":"destrack-pris"}],[148766749,{"idx":29,"name":"jakchires-lightbrownspat","tpage_name":"warpcast-pris"}],[152502289,{"idx":17,"name":"temple_sandstone_dirt01","tpage_name":"templex-vis-tfrag"}],[104857637,{"idx":37,"name":"jakchires-facelft","tpage_name":"oasiscst-pris"}],[91160657,{"idx":81,"name":"jakc-scarf","tpage_name":"gungame-vis-pris"}],[112328717,{"idx":13,"name":"daxterheadwidenew","tpage_name":"wascast-pris"}],[117637248,{"idx":128,"name":"wstlander-01-gunmetal-02","tpage_name":"destrack-pris"}],[148766748,{"idx":28,"name":"jakchires-leatherpouch","tpage_name":"warpcast-pris"}],[152502288,{"idx":16,"name":"temple_sandstone_spikehole01","tpage_name":"templex-vis-tfrag"}],[104857636,{"idx":36,"name":"jakchires-eyelid","tpage_name":"oasiscst-pris"}],[91160656,{"idx":80,"name":"jakc-lens","tpage_name":"gungame-vis-pris"}],[112328716,{"idx":12,"name":"daxtergoggles","tpage_name":"wascast-pris"}],[117637247,{"idx":127,"name":"wstlander-01-gunmetal-01","tpage_name":"destrack-pris"}],[148766747,{"idx":27,"name":"jakchires-jacket","tpage_name":"warpcast-pris"}],[152502287,{"idx":15,"name":"temple_sandstone_steptop01","tpage_name":"templex-vis-tfrag"}],[104857635,{"idx":35,"name":"jakchires-eyebrow","tpage_name":"oasiscst-pris"}],[91160655,{"idx":79,"name":"jakc-gogglemetal","tpage_name":"gungame-vis-pris"}],[112328715,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"wascast-pris"}],[117637246,{"idx":126,"name":"wstlander-01-eye","tpage_name":"destrack-pris"}],[148766746,{"idx":26,"name":"jakchires-horn","tpage_name":"warpcast-pris"}],[152502286,{"idx":14,"name":"temple_metal01","tpage_name":"templex-vis-tfrag"}],[104857633,{"idx":33,"name":"jakchires-clips","tpage_name":"oasiscst-pris"}],[91160653,{"idx":77,"name":"jakc-armor","tpage_name":"gungame-vis-pris"}],[112328713,{"idx":9,"name":"daxterfinger","tpage_name":"wascast-pris"}],[104857632,{"idx":32,"name":"jakchires-chestplate","tpage_name":"oasiscst-pris"}],[112328712,{"idx":8,"name":"daxterear","tpage_name":"wascast-pris"}],[104857631,{"idx":31,"name":"jakchires-brwnleather","tpage_name":"oasiscst-pris"}],[112328711,{"idx":7,"name":"daxterbolt","tpage_name":"wascast-pris"}],[104857630,{"idx":30,"name":"jakchires-brownstrap","tpage_name":"oasiscst-pris"}],[112328710,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"wascast-pris"}],[104857629,{"idx":29,"name":"jakchires-blackstrap","tpage_name":"oasiscst-pris"}],[112328709,{"idx":5,"name":"daxterarm","tpage_name":"wascast-pris"}],[104857628,{"idx":28,"name":"jakchires-arm","tpage_name":"oasiscst-pris"}],[112328708,{"idx":4,"name":"daxter-orange","tpage_name":"wascast-pris"}],[104857627,{"idx":27,"name":"jakc-wristband-a2","tpage_name":"oasiscst-pris"}],[112328707,{"idx":3,"name":"daxter-furhilite","tpage_name":"wascast-pris"}],[104857623,{"idx":23,"name":"jakc-lens","tpage_name":"oasiscst-pris"}],[104857622,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"oasiscst-pris"}],[104857621,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"oasiscst-pris"}],[104857620,{"idx":20,"name":"jakc-armor","tpage_name":"oasiscst-pris"}],[117637231,{"idx":111,"name":"jakchires-teeth","tpage_name":"destrack-pris"}],[148766731,{"idx":11,"name":"jakc-wraps","tpage_name":"warpcast-pris"}],[104857619,{"idx":19,"name":"environment-oldmetal","tpage_name":"oasiscst-pris"}],[117637230,{"idx":110,"name":"jakchires-shoeteop","tpage_name":"destrack-pris"}],[148766730,{"idx":10,"name":"jakc-waistband2","tpage_name":"warpcast-pris"}],[104857618,{"idx":18,"name":"daxtertuft","tpage_name":"oasiscst-pris"}],[109838338,{"idx":2,"name":"hud-glider-speed-marker-01","tpage_name":"hanga-minimap"}],[117637229,{"idx":109,"name":"jakchires-shoemetal","tpage_name":"destrack-pris"}],[148766729,{"idx":9,"name":"jakc-skirt","tpage_name":"warpcast-pris"}],[104857617,{"idx":17,"name":"daxterteeth","tpage_name":"oasiscst-pris"}],[109838337,{"idx":1,"name":"hud-glider-speed-01","tpage_name":"hanga-minimap"}],[117637228,{"idx":108,"name":"jakchires-shoebottom","tpage_name":"destrack-pris"}],[148766728,{"idx":8,"name":"jakc-scarfhanging","tpage_name":"warpcast-pris"}],[104857616,{"idx":16,"name":"daxternose","tpage_name":"oasiscst-pris"}],[109838336,{"idx":0,"name":"hud-vehicle-health-bar-01","tpage_name":"hanga-minimap"}],[117637227,{"idx":107,"name":"jakchires-precarmor-01","tpage_name":"destrack-pris"}],[148766727,{"idx":7,"name":"jakc-scarf","tpage_name":"warpcast-pris"}],[104857615,{"idx":15,"name":"daxterlense","tpage_name":"oasiscst-pris"}],[117637226,{"idx":106,"name":"jakchires-pants","tpage_name":"destrack-pris"}],[148766726,{"idx":6,"name":"jakc-lens","tpage_name":"warpcast-pris"}],[104857614,{"idx":14,"name":"daxterhelmetplain","tpage_name":"oasiscst-pris"}],[117637225,{"idx":105,"name":"jakchires-lightbrownspat","tpage_name":"destrack-pris"}],[148766725,{"idx":5,"name":"jakc-gogglemetal","tpage_name":"warpcast-pris"}],[104857613,{"idx":13,"name":"daxterheadwidenew","tpage_name":"oasiscst-pris"}],[117637224,{"idx":104,"name":"jakchires-leatherpouch","tpage_name":"destrack-pris"}],[148766724,{"idx":4,"name":"jakc-chestplate-straps","tpage_name":"warpcast-pris"}],[104857612,{"idx":12,"name":"daxtergoggles","tpage_name":"oasiscst-pris"}],[104792157,{"idx":93,"name":"dk-sat-shell-01","tpage_name":"desresc-pris"}],[104792156,{"idx":92,"name":"dk-sat-rim-bright-01","tpage_name":"desresc-pris"}],[104792155,{"idx":91,"name":"dk-sat-rim-03","tpage_name":"desresc-pris"}],[104792154,{"idx":90,"name":"dk-sat-rim-02","tpage_name":"desresc-pris"}],[104792153,{"idx":89,"name":"dk-sat-rim-01","tpage_name":"desresc-pris"}],[130940933,{"idx":5,"name":"holostatic-04","tpage_name":"deshover-sprite"}],[104792126,{"idx":62,"name":"wstlander-02-armor","tpage_name":"desresc-pris"}],[118489106,{"idx":18,"name":"sig-horn","tpage_name":"deshunt-pris2"}],[104726594,{"idx":66,"name":"grunt-skin-03","tpage_name":"deshover-pris"}],[38732054,{"idx":278,"name":"male5_08","tpage_name":"wasstada-sprite"}],[119668754,{"idx":18,"name":"citn-allleatherwrinkled","tpage_name":"ljinx-pris"}],[122159114,{"idx":10,"name":"fac-tower-06","tpage_name":"factoryb-vis-tfrag"}],[104726593,{"idx":65,"name":"grunt-skin-02","tpage_name":"deshover-pris"}],[38732053,{"idx":277,"name":"male5_07","tpage_name":"wasstada-sprite"}],[119668753,{"idx":17,"name":"citn-allleatherstrap","tpage_name":"ljinx-pris"}],[122159113,{"idx":9,"name":"facb_redmetal-d-01b","tpage_name":"factoryb-vis-tfrag"}],[104726592,{"idx":64,"name":"grunt-metal-01","tpage_name":"deshover-pris"}],[38732052,{"idx":276,"name":"male5_06","tpage_name":"wasstada-sprite"}],[122159112,{"idx":8,"name":"fac-tower-base-03","tpage_name":"factoryb-vis-tfrag"}],[104726591,{"idx":63,"name":"grunt-hose","tpage_name":"deshover-pris"}],[38732051,{"idx":275,"name":"male5_05","tpage_name":"wasstada-sprite"}],[119668751,{"idx":15,"name":"citn-allleather","tpage_name":"ljinx-pris"}],[122159111,{"idx":7,"name":"facb_redmetal-d-03","tpage_name":"factoryb-vis-tfrag"}],[104726590,{"idx":62,"name":"grunt-gem-01","tpage_name":"deshover-pris"}],[38732050,{"idx":274,"name":"male5_04","tpage_name":"wasstada-sprite"}],[122159110,{"idx":6,"name":"facb_blue-metal-02","tpage_name":"factoryb-vis-tfrag"}],[104726589,{"idx":61,"name":"grunt-eye-01","tpage_name":"deshover-pris"}],[38732049,{"idx":273,"name":"male5_03","tpage_name":"wasstada-sprite"}],[119668749,{"idx":13,"name":"citn-alllcotton","tpage_name":"ljinx-pris"}],[122159109,{"idx":5,"name":"facb-big-metal-panl04","tpage_name":"factoryb-vis-tfrag"}],[104726540,{"idx":12,"name":"daxtergoggles","tpage_name":"deshover-pris"}],[100991000,{"idx":24,"name":"jakb-lightbrownstrap","tpage_name":"ljakklev-pris"}],[38732000,{"idx":224,"name":"male2_17","tpage_name":"wasstada-sprite"}],[104726539,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"deshover-pris"}],[100990999,{"idx":23,"name":"jakb-lightbrownspat","tpage_name":"ljakklev-pris"}],[38731999,{"idx":223,"name":"male2_16","tpage_name":"wasstada-sprite"}],[104726538,{"idx":10,"name":"daxterfoot","tpage_name":"deshover-pris"}],[100990998,{"idx":22,"name":"jakb-leatherstrap","tpage_name":"ljakklev-pris"}],[38731998,{"idx":222,"name":"male2_15","tpage_name":"wasstada-sprite"}],[104726537,{"idx":9,"name":"daxterfinger","tpage_name":"deshover-pris"}],[100990997,{"idx":21,"name":"jakb-leatherpouch","tpage_name":"ljakklev-pris"}],[38731997,{"idx":221,"name":"male2_14","tpage_name":"wasstada-sprite"}],[104726536,{"idx":8,"name":"daxterear","tpage_name":"deshover-pris"}],[100990996,{"idx":20,"name":"jakb-jacketsleeve","tpage_name":"ljakklev-pris"}],[38731996,{"idx":220,"name":"male2_13","tpage_name":"wasstada-sprite"}],[104726534,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"deshover-pris"}],[100990994,{"idx":18,"name":"jakb-horn","tpage_name":"ljakklev-pris"}],[38731994,{"idx":218,"name":"male2_11","tpage_name":"wasstada-sprite"}],[104726532,{"idx":4,"name":"daxter-orange","tpage_name":"deshover-pris"}],[38731992,{"idx":216,"name":"male2_09","tpage_name":"wasstada-sprite"}],[103481352,{"idx":8,"name":"des-pinetree-leaf-02","tpage_name":"deserta-vis-shrub"}],[100990992,{"idx":16,"name":"jakb-glovetop","tpage_name":"ljakklev-pris"}],[104726530,{"idx":2,"name":"daxter-eyelid","tpage_name":"deshover-pris"}],[38731990,{"idx":214,"name":"male2_07","tpage_name":"wasstada-sprite"}],[100990990,{"idx":14,"name":"jakb-facelft","tpage_name":"ljakklev-pris"}],[104726529,{"idx":1,"name":"bam-hairhilite","tpage_name":"deshover-pris"}],[38731989,{"idx":213,"name":"male2_06","tpage_name":"wasstada-sprite"}],[100990989,{"idx":13,"name":"jakb-eyelid","tpage_name":"ljakklev-pris"}],[104726528,{"idx":0,"name":"bam-eyelight","tpage_name":"deshover-pris"}],[38731988,{"idx":212,"name":"male2_05","tpage_name":"wasstada-sprite"}],[103481348,{"idx":4,"name":"des-rock-shrub-01","tpage_name":"deserta-vis-shrub"}],[100990988,{"idx":12,"name":"jakb-eyebrow","tpage_name":"ljakklev-pris"}],[104333334,{"idx":22,"name":"rub-crater-shards-01","tpage_name":"stadium-vis-shrub"}],[94371894,{"idx":54,"name":"palace-break-pillwall08","tpage_name":"intpfall-vis-pris"}],[104333333,{"idx":21,"name":"rub-ground-01-small","tpage_name":"stadium-vis-shrub"}],[94371893,{"idx":53,"name":"palace-break-pillwall07","tpage_name":"intpfall-vis-pris"}],[104333331,{"idx":19,"name":"rub-scorch","tpage_name":"stadium-vis-shrub"}],[94371891,{"idx":51,"name":"palace-break-pillwall05","tpage_name":"intpfall-vis-pris"}],[104333330,{"idx":18,"name":"rub-wall-small-grill","tpage_name":"stadium-vis-shrub"}],[94371890,{"idx":50,"name":"palace-break-pillwall04","tpage_name":"intpfall-vis-pris"}],[104333329,{"idx":17,"name":"rub-beam-gen","tpage_name":"stadium-vis-shrub"}],[94371889,{"idx":49,"name":"palace-break-pillwall03","tpage_name":"intpfall-vis-pris"}],[104333328,{"idx":16,"name":"rub-greyblue-plain-lowres","tpage_name":"stadium-vis-shrub"}],[94371888,{"idx":48,"name":"palace-break-pillwall02","tpage_name":"intpfall-vis-pris"}],[104333327,{"idx":15,"name":"rub-met-strp-close","tpage_name":"stadium-vis-shrub"}],[94371887,{"idx":47,"name":"palace-break-pillwall01","tpage_name":"intpfall-vis-pris"}],[104267823,{"idx":47,"name":"rub-palace-tower-side","tpage_name":"stadium-vis-tfrag"}],[79364223,{"idx":127,"name":"monk-face-05","tpage_name":"wasseem-pris"}],[104267822,{"idx":46,"name":"rub-cement-pillars","tpage_name":"stadium-vis-tfrag"}],[79364222,{"idx":126,"name":"monk-face-04","tpage_name":"wasseem-pris"}],[104267818,{"idx":42,"name":"rub-city-wall-frame","tpage_name":"stadium-vis-tfrag"}],[79364218,{"idx":122,"name":"monk-eye-f","tpage_name":"wasseem-pris"}],[104267817,{"idx":41,"name":"rub-wall-gen-03","tpage_name":"stadium-vis-tfrag"}],[79364217,{"idx":121,"name":"monk-eye-d","tpage_name":"wasseem-pris"}],[104267807,{"idx":31,"name":"rub-stad-brick-pieces","tpage_name":"stadium-vis-tfrag"}],[79364207,{"idx":111,"name":"dk-sat-rim-03","tpage_name":"wasseem-pris"}],[104267806,{"idx":30,"name":"stdmb-lightpost-base-02","tpage_name":"stadium-vis-tfrag"}],[79364206,{"idx":110,"name":"dk-sat-rim-02","tpage_name":"wasseem-pris"}],[104267804,{"idx":28,"name":"stdmb-lightpost-base","tpage_name":"stadium-vis-tfrag"}],[79364204,{"idx":108,"name":"dk-sat-panel-01","tpage_name":"wasseem-pris"}],[104267803,{"idx":27,"name":"stdm-flowerbed-small","tpage_name":"stadium-vis-tfrag"}],[79364203,{"idx":107,"name":"dk-sat-claw-01","tpage_name":"wasseem-pris"}],[104267802,{"idx":26,"name":"stdm-flowerbed-flowers-a","tpage_name":"stadium-vis-tfrag"}],[79364202,{"idx":106,"name":"dk-sat-cable-03","tpage_name":"wasseem-pris"}],[50725062,{"idx":198,"name":"precur-planet-water-01","tpage_name":"foresta-vis-pris"}],[104267801,{"idx":25,"name":"stdm-gar-girder-02","tpage_name":"stadium-vis-tfrag"}],[79364201,{"idx":105,"name":"dk-sat-cable-02","tpage_name":"wasseem-pris"}],[104267800,{"idx":24,"name":"stdm-metal-01","tpage_name":"stadium-vis-tfrag"}],[79364200,{"idx":104,"name":"dk-sat-cable-01","tpage_name":"wasseem-pris"}],[50725060,{"idx":196,"name":"dm-ship-tentacle-01","tpage_name":"foresta-vis-pris"}],[104267799,{"idx":23,"name":"rub-pal-metal","tpage_name":"stadium-vis-tfrag"}],[79364199,{"idx":103,"name":"jakchires-teeth","tpage_name":"wasseem-pris"}],[50725059,{"idx":195,"name":"timemap-wordborder","tpage_name":"foresta-vis-pris"}],[104267798,{"idx":22,"name":"stdm-trim-03","tpage_name":"stadium-vis-tfrag"}],[79364198,{"idx":102,"name":"jakchires-shoeteop","tpage_name":"wasseem-pris"}],[50725058,{"idx":194,"name":"timemap-smallball-02","tpage_name":"foresta-vis-pris"}],[104267797,{"idx":21,"name":"stdm-wall-03","tpage_name":"stadium-vis-tfrag"}],[79364197,{"idx":101,"name":"jakchires-shoemetal","tpage_name":"wasseem-pris"}],[50725057,{"idx":193,"name":"timemap-smallball-01","tpage_name":"foresta-vis-pris"}],[104267796,{"idx":20,"name":"stdmb-broken-light","tpage_name":"stadium-vis-tfrag"}],[79364196,{"idx":100,"name":"jakchires-shoebottom","tpage_name":"wasseem-pris"}],[50725056,{"idx":192,"name":"timemap-precmetal-teeth","tpage_name":"foresta-vis-pris"}],[104267795,{"idx":19,"name":"rub-cement-broken-end","tpage_name":"stadium-vis-tfrag"}],[79364195,{"idx":99,"name":"jakchires-precarmor-01","tpage_name":"wasseem-pris"}],[50725055,{"idx":191,"name":"timemap-precmetal-plain-large","tpage_name":"foresta-vis-pris"}],[104267794,{"idx":18,"name":"rub-city-wall-inside-damaged","tpage_name":"stadium-vis-tfrag"}],[79364194,{"idx":98,"name":"jakchires-pants","tpage_name":"wasseem-pris"}],[50725054,{"idx":190,"name":"timemap-precmetal-feet","tpage_name":"foresta-vis-pris"}],[104267793,{"idx":17,"name":"rub-beam-gen","tpage_name":"stadium-vis-tfrag"}],[79364193,{"idx":97,"name":"jakchires-lightbrownspat","tpage_name":"wasseem-pris"}],[50725053,{"idx":189,"name":"timemap-notchborder","tpage_name":"foresta-vis-pris"}],[104267792,{"idx":16,"name":"rub-wall-gen-01","tpage_name":"stadium-vis-tfrag"}],[79364192,{"idx":96,"name":"jakchires-leatherpouch","tpage_name":"wasseem-pris"}],[50725052,{"idx":188,"name":"timemap-centerball","tpage_name":"foresta-vis-pris"}],[104267791,{"idx":15,"name":"rub-blastdoors","tpage_name":"stadium-vis-tfrag"}],[79364191,{"idx":95,"name":"jakchires-jacket","tpage_name":"wasseem-pris"}],[50725051,{"idx":187,"name":"timemap-ball-precmetal","tpage_name":"foresta-vis-pris"}],[104267790,{"idx":14,"name":"stdm-base-01","tpage_name":"stadium-vis-tfrag"}],[79364190,{"idx":94,"name":"jakchires-horn","tpage_name":"wasseem-pris"}],[50725050,{"idx":186,"name":"environment-darkprec","tpage_name":"foresta-vis-pris"}],[104267789,{"idx":13,"name":"stdm-stairs-01","tpage_name":"stadium-vis-tfrag"}],[79364189,{"idx":93,"name":"jakchires-hair","tpage_name":"wasseem-pris"}],[50725049,{"idx":185,"name":"dm-ship-plate-01","tpage_name":"foresta-vis-pris"}],[104267788,{"idx":12,"name":"stdm-stone-trim-01","tpage_name":"stadium-vis-tfrag"}],[79364188,{"idx":92,"name":"jakchires-glovetop","tpage_name":"wasseem-pris"}],[50725048,{"idx":184,"name":"dm-ship-nose-02","tpage_name":"foresta-vis-pris"}],[104267787,{"idx":11,"name":"stdm-trim-02","tpage_name":"stadium-vis-tfrag"}],[79364187,{"idx":91,"name":"jakchires-facert","tpage_name":"wasseem-pris"}],[50725047,{"idx":183,"name":"dm-ship-nose-01","tpage_name":"foresta-vis-pris"}],[104267786,{"idx":10,"name":"stdm-cobble-floor-01","tpage_name":"stadium-vis-tfrag"}],[79364186,{"idx":90,"name":"jakchires-facelft","tpage_name":"wasseem-pris"}],[50725046,{"idx":182,"name":"dm-ship-hull-02","tpage_name":"foresta-vis-pris"}],[104267785,{"idx":9,"name":"rub-cement-a","tpage_name":"stadium-vis-tfrag"}],[79364185,{"idx":89,"name":"jakchires-eyelid","tpage_name":"wasseem-pris"}],[50725045,{"idx":181,"name":"dm-ship-hull-01","tpage_name":"foresta-vis-pris"}],[104267784,{"idx":8,"name":"stdm-wall-04","tpage_name":"stadium-vis-tfrag"}],[79364184,{"idx":88,"name":"jakchires-eyebrow","tpage_name":"wasseem-pris"}],[50725044,{"idx":180,"name":"dm-ship-cockpit-01","tpage_name":"foresta-vis-pris"}],[104136705,{"idx":1,"name":"racegate","tpage_name":"wasleapr-sprite"}],[81723465,{"idx":73,"name":"klever-skirtlight","tpage_name":"ljndklev-pris"}],[107151372,{"idx":12,"name":"metalflut-saddleseat","tpage_name":"volcanoa-vis-pris"}],[100925472,{"idx":32,"name":"king-wraps","tpage_name":"ljkdmpk-pris2"}],[103350362,{"idx":90,"name":"rail-env-wall-01","tpage_name":"comba-pris"}],[107151368,{"idx":8,"name":"metalflut-rings","tpage_name":"volcanoa-vis-pris"}],[100925468,{"idx":28,"name":"king-thinstrap","tpage_name":"ljkdmpk-pris2"}],[103350358,{"idx":86,"name":"rail-base-mid-01","tpage_name":"comba-pris"}],[127008778,{"idx":10,"name":"vola-vine","tpage_name":"volcanox-tfrag"}],[103350320,{"idx":48,"name":"jakc-wristband-a2","tpage_name":"comba-pris"}],[100859960,{"idx":56,"name":"jakchires-eyebrow","tpage_name":"ljkdmpk-pris"}],[115802120,{"idx":8,"name":"sig-flask","tpage_name":"lnstcst-pris2"}],[103350319,{"idx":47,"name":"jakc-wraps","tpage_name":"comba-pris"}],[100859959,{"idx":55,"name":"jakchires-eye","tpage_name":"ljkdmpk-pris"}],[115802119,{"idx":7,"name":"sig-facert","tpage_name":"lnstcst-pris2"}],[103350317,{"idx":45,"name":"jakc-skirt","tpage_name":"comba-pris"}],[100859957,{"idx":53,"name":"jakchires-chestplate","tpage_name":"ljkdmpk-pris"}],[115802117,{"idx":5,"name":"sig-eyelid","tpage_name":"lnstcst-pris2"}],[103350316,{"idx":44,"name":"jakc-scarfhanging","tpage_name":"comba-pris"}],[100859956,{"idx":52,"name":"jakchires-brwnleather","tpage_name":"ljkdmpk-pris"}],[115802116,{"idx":4,"name":"sig-eye","tpage_name":"lnstcst-pris2"}],[103350315,{"idx":43,"name":"jakc-scarf","tpage_name":"comba-pris"}],[100859955,{"idx":51,"name":"jakchires-brownstrap","tpage_name":"ljkdmpk-pris"}],[115802115,{"idx":3,"name":"sig-belt","tpage_name":"lnstcst-pris2"}],[103350314,{"idx":42,"name":"jakc-lens","tpage_name":"comba-pris"}],[100859954,{"idx":50,"name":"jakchires-blackstrap","tpage_name":"ljkdmpk-pris"}],[115802114,{"idx":2,"name":"environment-oldmetal","tpage_name":"lnstcst-pris2"}],[103350313,{"idx":41,"name":"jakc-gogglemetal","tpage_name":"comba-pris"}],[100859953,{"idx":49,"name":"jakchires-arm","tpage_name":"ljkdmpk-pris"}],[115802113,{"idx":1,"name":"charHOLD","tpage_name":"lnstcst-pris2"}],[103350312,{"idx":40,"name":"jakc-chestplate-straps","tpage_name":"comba-pris"}],[100859952,{"idx":48,"name":"jakc-wristband-a2","tpage_name":"ljkdmpk-pris"}],[115802112,{"idx":0,"name":"bam-eyelight","tpage_name":"lnstcst-pris2"}],[103350311,{"idx":39,"name":"jakc-armor","tpage_name":"comba-pris"}],[100859951,{"idx":47,"name":"jakc-wraps","tpage_name":"ljkdmpk-pris"}],[103350310,{"idx":38,"name":"environment-oldmetal","tpage_name":"comba-pris"}],[100859950,{"idx":46,"name":"jakc-waistband2","tpage_name":"ljkdmpk-pris"}],[103350309,{"idx":37,"name":"daxtertuft","tpage_name":"comba-pris"}],[100859949,{"idx":45,"name":"jakc-skirt","tpage_name":"ljkdmpk-pris"}],[103350308,{"idx":36,"name":"daxterteeth","tpage_name":"comba-pris"}],[100859948,{"idx":44,"name":"jakc-scarfhanging","tpage_name":"ljkdmpk-pris"}],[103350307,{"idx":35,"name":"daxternose","tpage_name":"comba-pris"}],[100859947,{"idx":43,"name":"jakc-scarf","tpage_name":"ljkdmpk-pris"}],[103350306,{"idx":34,"name":"daxterlense","tpage_name":"comba-pris"}],[100859946,{"idx":42,"name":"jakc-lens","tpage_name":"ljkdmpk-pris"}],[103350305,{"idx":33,"name":"daxterhelmetplain","tpage_name":"comba-pris"}],[100859945,{"idx":41,"name":"jakc-gogglemetal","tpage_name":"ljkdmpk-pris"}],[103350304,{"idx":32,"name":"daxterheadwidenew","tpage_name":"comba-pris"}],[100859944,{"idx":40,"name":"jakc-chestplate-straps","tpage_name":"ljkdmpk-pris"}],[103350303,{"idx":31,"name":"daxtergoggles","tpage_name":"comba-pris"}],[100859943,{"idx":39,"name":"jakc-armor","tpage_name":"ljkdmpk-pris"}],[103350302,{"idx":30,"name":"daxterfoot-bottom","tpage_name":"comba-pris"}],[100859942,{"idx":38,"name":"pecker-yellowfur","tpage_name":"ljkdmpk-pris"}],[103350296,{"idx":24,"name":"daxterarm","tpage_name":"comba-pris"}],[110821376,{"idx":0,"name":"minc-streek","tpage_name":"mined-alpha"}],[100859936,{"idx":32,"name":"pecker-face","tpage_name":"ljkdmpk-pris"}],[103350295,{"idx":23,"name":"daxter-orange","tpage_name":"comba-pris"}],[100859935,{"idx":31,"name":"pecker-eyelid","tpage_name":"ljkdmpk-pris"}],[103088128,{"idx":0,"name":"des-pinetree-bark","tpage_name":"desertc-vis-shrub"}],[94371868,{"idx":28,"name":"palace-break-bigwall02","tpage_name":"intpfall-vis-pris"}],[102236160,{"idx":0,"name":"thrust-glob","tpage_name":"introcst-sprite"}],[100990980,{"idx":4,"name":"jak-belt","tpage_name":"ljakklev-pris"}],[38731980,{"idx":204,"name":"male1_18","tpage_name":"wasstada-sprite"}],[102039594,{"idx":42,"name":"gun-purple-glow","tpage_name":"gungame-vis-pris2"}],[107020314,{"idx":26,"name":"minc-bolt","tpage_name":"volcanoa-vis-shrub"}],[102039593,{"idx":41,"name":"gun-pump","tpage_name":"gungame-vis-pris2"}],[107020313,{"idx":25,"name":"vola-rising-step-base","tpage_name":"volcanoa-vis-shrub"}],[102039592,{"idx":40,"name":"gun-main","tpage_name":"gungame-vis-pris2"}],[107020312,{"idx":24,"name":"vol-plat-top","tpage_name":"volcanoa-vis-shrub"}],[102039591,{"idx":39,"name":"gun-magport","tpage_name":"gungame-vis-pris2"}],[107020311,{"idx":23,"name":"vola-lava-ball","tpage_name":"volcanoa-vis-shrub"}],[102039590,{"idx":38,"name":"gun-leather","tpage_name":"gungame-vis-pris2"}],[107020310,{"idx":22,"name":"vol-balance-plat-pole","tpage_name":"volcanoa-vis-shrub"}],[102039588,{"idx":36,"name":"gun-eye","tpage_name":"gungame-vis-pris2"}],[107020308,{"idx":20,"name":"vol-balance-plat-end","tpage_name":"volcanoa-vis-shrub"}],[102039587,{"idx":35,"name":"gun-dark-mag","tpage_name":"gungame-vis-pris2"}],[107020307,{"idx":19,"name":"vola-shrub-leaf","tpage_name":"volcanoa-vis-shrub"}],[102039586,{"idx":34,"name":"gun-cover","tpage_name":"gungame-vis-pris2"}],[107020306,{"idx":18,"name":"vola-rock-side-wall","tpage_name":"volcanoa-vis-shrub"}],[102039585,{"idx":33,"name":"gun-blue-mag","tpage_name":"gungame-vis-pris2"}],[102039584,{"idx":32,"name":"gun-blue-glow","tpage_name":"gungame-vis-pris2"}],[107020304,{"idx":16,"name":"vola-lava-02","tpage_name":"volcanoa-vis-shrub"}],[102039583,{"idx":31,"name":"gun-barrel-alt","tpage_name":"gungame-vis-pris2"}],[107020303,{"idx":15,"name":"vol-metal-01","tpage_name":"volcanoa-vis-shrub"}],[89587783,{"idx":71,"name":"jakchires-teeth","tpage_name":"lwstdpck-pris"}],[102039582,{"idx":30,"name":"gun-backslit","tpage_name":"gungame-vis-pris2"}],[107020302,{"idx":14,"name":"for-shrub-asian-grass","tpage_name":"volcanoa-vis-shrub"}],[89587782,{"idx":70,"name":"jakchires-shoeteop","tpage_name":"lwstdpck-pris"}],[102039581,{"idx":29,"name":"environment-title","tpage_name":"gungame-vis-pris2"}],[89587781,{"idx":69,"name":"jakchires-shoemetal","tpage_name":"lwstdpck-pris"}],[102039580,{"idx":28,"name":"environment-oldmetal","tpage_name":"gungame-vis-pris2"}],[89587780,{"idx":68,"name":"jakchires-shoebottom","tpage_name":"lwstdpck-pris"}],[102039579,{"idx":27,"name":"tess-upperboot","tpage_name":"gungame-vis-pris2"}],[107020299,{"idx":11,"name":"vol-tree-fruit-02","tpage_name":"volcanoa-vis-shrub"}],[89587779,{"idx":67,"name":"jakchires-precarmor-01","tpage_name":"lwstdpck-pris"}],[102039578,{"idx":26,"name":"tess-underwear","tpage_name":"gungame-vis-pris2"}],[107020298,{"idx":10,"name":"vol-tree-fruit-01","tpage_name":"volcanoa-vis-shrub"}],[89587778,{"idx":66,"name":"jakchires-pants","tpage_name":"lwstdpck-pris"}],[102039577,{"idx":25,"name":"tess-teeth","tpage_name":"gungame-vis-pris2"}],[107020297,{"idx":9,"name":"vol-shrub-plant","tpage_name":"volcanoa-vis-shrub"}],[89587777,{"idx":65,"name":"jakchires-lightbrownspat","tpage_name":"lwstdpck-pris"}],[101580830,{"idx":30,"name":"wstlander-04-shirt","tpage_name":"lwlandm-pris"}],[86638670,{"idx":78,"name":"jakchires-shoebottom","tpage_name":"wasdoors-vis-pris"}],[101580829,{"idx":29,"name":"wstlander-04-headband","tpage_name":"lwlandm-pris"}],[86638669,{"idx":77,"name":"jakchires-precarmor-01","tpage_name":"wasdoors-vis-pris"}],[101580828,{"idx":28,"name":"wstlander-04-gun","tpage_name":"lwlandm-pris"}],[86638668,{"idx":76,"name":"jakchires-pants","tpage_name":"wasdoors-vis-pris"}],[101580827,{"idx":27,"name":"wstlander-04-dark-blue","tpage_name":"lwlandm-pris"}],[86638667,{"idx":75,"name":"jakchires-lightbrownspat","tpage_name":"wasdoors-vis-pris"}],[101580826,{"idx":26,"name":"wstlander-03-flesh","tpage_name":"lwlandm-pris"}],[86638666,{"idx":74,"name":"jakchires-leatherpouch","tpage_name":"wasdoors-vis-pris"}],[101580825,{"idx":25,"name":"wstlander-03-eye","tpage_name":"lwlandm-pris"}],[86638665,{"idx":73,"name":"jakchires-jacket","tpage_name":"wasdoors-vis-pris"}],[101580824,{"idx":24,"name":"wstlander-02-skirt","tpage_name":"lwlandm-pris"}],[86638664,{"idx":72,"name":"jakchires-horn","tpage_name":"wasdoors-vis-pris"}],[81657944,{"idx":88,"name":"seem-skirt-small","tpage_name":"arenacst-pris2"}],[101580823,{"idx":23,"name":"wstlander-02-shirt","tpage_name":"lwlandm-pris"}],[86638663,{"idx":71,"name":"jakchires-hair","tpage_name":"wasdoors-vis-pris"}],[81657943,{"idx":87,"name":"seem-skirt","tpage_name":"arenacst-pris2"}],[101580822,{"idx":22,"name":"wstlander-02-scarf","tpage_name":"lwlandm-pris"}],[86638662,{"idx":70,"name":"jakchires-glovetop","tpage_name":"wasdoors-vis-pris"}],[81657942,{"idx":86,"name":"king-skirt-b","tpage_name":"arenacst-pris2"}],[101580821,{"idx":21,"name":"wstlander-02-ponytail","tpage_name":"lwlandm-pris"}],[86638661,{"idx":69,"name":"jakchires-facert","tpage_name":"wasdoors-vis-pris"}],[81657941,{"idx":85,"name":"seem-teeth","tpage_name":"arenacst-pris2"}],[101580820,{"idx":20,"name":"wstlander-02-head","tpage_name":"lwlandm-pris"}],[86638660,{"idx":68,"name":"jakchires-facelft","tpage_name":"wasdoors-vis-pris"}],[81657940,{"idx":84,"name":"seem-pipes-02","tpage_name":"arenacst-pris2"}],[101580819,{"idx":19,"name":"wstlander-02-glove","tpage_name":"lwlandm-pris"}],[86638659,{"idx":67,"name":"jakchires-eyelid","tpage_name":"wasdoors-vis-pris"}],[81657939,{"idx":83,"name":"seem-headpiecetop","tpage_name":"arenacst-pris2"}],[101580818,{"idx":18,"name":"wstlander-02-eye","tpage_name":"lwlandm-pris"}],[86638658,{"idx":66,"name":"jakchires-eyebrow","tpage_name":"wasdoors-vis-pris"}],[81657938,{"idx":82,"name":"seem-headgearback","tpage_name":"arenacst-pris2"}],[101580817,{"idx":17,"name":"wstlander-02-bootheel","tpage_name":"lwlandm-pris"}],[86638657,{"idx":65,"name":"jakchires-eye","tpage_name":"wasdoors-vis-pris"}],[81657937,{"idx":81,"name":"seem-uppertorso","tpage_name":"arenacst-pris2"}],[101580816,{"idx":16,"name":"wstlander-02-belt","tpage_name":"lwlandm-pris"}],[86638656,{"idx":64,"name":"jakchires-clips","tpage_name":"wasdoors-vis-pris"}],[81657936,{"idx":80,"name":"seem-straps","tpage_name":"arenacst-pris2"}],[101580815,{"idx":15,"name":"wstlander-02-armor","tpage_name":"lwlandm-pris"}],[86638655,{"idx":63,"name":"jakchires-chestplate","tpage_name":"wasdoors-vis-pris"}],[81657935,{"idx":79,"name":"seem-precmetal-plain","tpage_name":"arenacst-pris2"}],[101580814,{"idx":14,"name":"wstlander-02-arm","tpage_name":"lwlandm-pris"}],[86638654,{"idx":62,"name":"jakchires-brwnleather","tpage_name":"wasdoors-vis-pris"}],[81657934,{"idx":78,"name":"seem-precmetal-edge","tpage_name":"arenacst-pris2"}],[101580813,{"idx":13,"name":"wstlander-01-wrap","tpage_name":"lwlandm-pris"}],[86638653,{"idx":61,"name":"jakchires-brownstrap","tpage_name":"wasdoors-vis-pris"}],[81657933,{"idx":77,"name":"seem-precmetal-chestplate-01","tpage_name":"arenacst-pris2"}],[101580812,{"idx":12,"name":"wstlander-01-skirt","tpage_name":"lwlandm-pris"}],[86638652,{"idx":60,"name":"jakchires-blackstrap","tpage_name":"wasdoors-vis-pris"}],[81657932,{"idx":76,"name":"seem-pipes-01","tpage_name":"arenacst-pris2"}],[101580811,{"idx":11,"name":"wstlander-01-shoulderarmor","tpage_name":"lwlandm-pris"}],[86638651,{"idx":59,"name":"jakchires-arm","tpage_name":"wasdoors-vis-pris"}],[81657931,{"idx":75,"name":"seem-pipeend","tpage_name":"arenacst-pris2"}],[101580810,{"idx":10,"name":"wstlander-01-shoetop","tpage_name":"lwlandm-pris"}],[86638650,{"idx":58,"name":"jakc-wristband-a2","tpage_name":"wasdoors-vis-pris"}],[81657930,{"idx":74,"name":"seem-hand","tpage_name":"arenacst-pris2"}],[101580809,{"idx":9,"name":"wstlander-01-shoebottom","tpage_name":"lwlandm-pris"}],[86638649,{"idx":57,"name":"jakc-wraps","tpage_name":"wasdoors-vis-pris"}],[81657929,{"idx":73,"name":"seem-finger","tpage_name":"arenacst-pris2"}],[101580808,{"idx":8,"name":"wstlander-01-pants","tpage_name":"lwlandm-pris"}],[86638648,{"idx":56,"name":"jakc-waistband2","tpage_name":"wasdoors-vis-pris"}],[81657928,{"idx":72,"name":"seem-face","tpage_name":"arenacst-pris2"}],[101580807,{"idx":7,"name":"wstlander-01-mustache","tpage_name":"lwlandm-pris"}],[86638647,{"idx":55,"name":"jakc-skirt","tpage_name":"wasdoors-vis-pris"}],[81657927,{"idx":71,"name":"seem-eyelid","tpage_name":"arenacst-pris2"}],[101580806,{"idx":6,"name":"wstlander-01-leatherstrap","tpage_name":"lwlandm-pris"}],[86638646,{"idx":54,"name":"jakc-scarfhanging","tpage_name":"wasdoors-vis-pris"}],[81657926,{"idx":70,"name":"seem-eye","tpage_name":"arenacst-pris2"}],[101580805,{"idx":5,"name":"wstlander-01-head","tpage_name":"lwlandm-pris"}],[86638645,{"idx":53,"name":"jakc-scarf","tpage_name":"wasdoors-vis-pris"}],[81657925,{"idx":69,"name":"seem-ear","tpage_name":"arenacst-pris2"}],[101580804,{"idx":4,"name":"wstlander-01-gunmetal-04","tpage_name":"lwlandm-pris"}],[86638644,{"idx":52,"name":"jakc-lens","tpage_name":"wasdoors-vis-pris"}],[81657924,{"idx":68,"name":"seem-boottoe","tpage_name":"arenacst-pris2"}],[101580803,{"idx":3,"name":"wstlander-01-gunmetal-03","tpage_name":"lwlandm-pris"}],[86638643,{"idx":51,"name":"jakc-gogglemetal","tpage_name":"wasdoors-vis-pris"}],[81657923,{"idx":67,"name":"seem-bootmet","tpage_name":"arenacst-pris2"}],[101580802,{"idx":2,"name":"wstlander-01-gunmetal-02","tpage_name":"lwlandm-pris"}],[86638642,{"idx":50,"name":"jakc-chestplate-straps","tpage_name":"wasdoors-vis-pris"}],[81657922,{"idx":66,"name":"seem-bootlower","tpage_name":"arenacst-pris2"}],[101580801,{"idx":1,"name":"wstlander-01-gunmetal-01","tpage_name":"lwlandm-pris"}],[86638641,{"idx":49,"name":"jakc-armor","tpage_name":"wasdoors-vis-pris"}],[81657921,{"idx":65,"name":"seem-bootleg","tpage_name":"arenacst-pris2"}],[101580800,{"idx":0,"name":"wstlander-01-eye","tpage_name":"lwlandm-pris"}],[86638640,{"idx":48,"name":"vehicle-wheel-01","tpage_name":"wasdoors-vis-pris"}],[81657920,{"idx":64,"name":"seem-bootbottom","tpage_name":"arenacst-pris2"}],[117637201,{"idx":81,"name":"jakc-gogglemetal","tpage_name":"destrack-pris"}],[101056579,{"idx":67,"name":"jakc-scarfhanging","tpage_name":"ljakcklv-pris"}],[104792119,{"idx":55,"name":"wstlander-01-pants","tpage_name":"desresc-pris"}],[118489099,{"idx":11,"name":"sig-glovetop","tpage_name":"deshunt-pris2"}],[117637200,{"idx":80,"name":"jakc-chestplate-straps","tpage_name":"destrack-pris"}],[101056578,{"idx":66,"name":"jakc-skirt","tpage_name":"ljakcklv-pris"}],[104792118,{"idx":54,"name":"wstlander-01-mustache","tpage_name":"desresc-pris"}],[118489098,{"idx":10,"name":"sig-glove","tpage_name":"deshunt-pris2"}],[117637199,{"idx":79,"name":"jakc-armor","tpage_name":"destrack-pris"}],[101056577,{"idx":65,"name":"klever-widebrownstrap","tpage_name":"ljakcklv-pris"}],[104792117,{"idx":53,"name":"wstlander-01-leatherstrap","tpage_name":"desresc-pris"}],[118489097,{"idx":9,"name":"sig-gem-01","tpage_name":"deshunt-pris2"}],[117637198,{"idx":78,"name":"environment-oldmetal","tpage_name":"destrack-pris"}],[101056576,{"idx":64,"name":"klever-undershirt","tpage_name":"ljakcklv-pris"}],[104792116,{"idx":52,"name":"wstlander-01-head","tpage_name":"desresc-pris"}],[118489096,{"idx":8,"name":"sig-flask","tpage_name":"deshunt-pris2"}],[117637197,{"idx":77,"name":"daxtertuft","tpage_name":"destrack-pris"}],[101056575,{"idx":63,"name":"klever-thighs","tpage_name":"ljakcklv-pris"}],[104792115,{"idx":51,"name":"wstlander-01-gunmetal-04","tpage_name":"desresc-pris"}],[118489095,{"idx":7,"name":"sig-facert","tpage_name":"deshunt-pris2"}],[117637196,{"idx":76,"name":"daxterteeth","tpage_name":"destrack-pris"}],[101056574,{"idx":62,"name":"klever-skirtlight","tpage_name":"ljakcklv-pris"}],[104792114,{"idx":50,"name":"wstlander-01-gunmetal-03","tpage_name":"desresc-pris"}],[118489094,{"idx":6,"name":"sig-faceleft","tpage_name":"deshunt-pris2"}],[117637195,{"idx":75,"name":"daxternose","tpage_name":"destrack-pris"}],[101056573,{"idx":61,"name":"klever-skirtdark","tpage_name":"ljakcklv-pris"}],[104792113,{"idx":49,"name":"wstlander-01-gunmetal-02","tpage_name":"desresc-pris"}],[118489093,{"idx":5,"name":"sig-eyelid","tpage_name":"deshunt-pris2"}],[117637194,{"idx":74,"name":"daxterlense","tpage_name":"destrack-pris"}],[101056572,{"idx":60,"name":"klever-shoebottom","tpage_name":"ljakcklv-pris"}],[104792112,{"idx":48,"name":"wstlander-01-gunmetal-01","tpage_name":"desresc-pris"}],[118489092,{"idx":4,"name":"sig-eye","tpage_name":"deshunt-pris2"}],[117637193,{"idx":73,"name":"daxterhelmetplain","tpage_name":"destrack-pris"}],[101056571,{"idx":59,"name":"klever-shoe","tpage_name":"ljakcklv-pris"}],[104792111,{"idx":47,"name":"wstlander-01-eye","tpage_name":"desresc-pris"}],[118489091,{"idx":3,"name":"sig-belt","tpage_name":"deshunt-pris2"}],[117637192,{"idx":72,"name":"daxterheadwidenew","tpage_name":"destrack-pris"}],[101056570,{"idx":58,"name":"klever-mustache","tpage_name":"ljakcklv-pris"}],[118489090,{"idx":2,"name":"environment-oldmetal","tpage_name":"deshunt-pris2"}],[117637190,{"idx":70,"name":"daxterfoot-bottom","tpage_name":"destrack-pris"}],[101056568,{"idx":56,"name":"klever-handwrap","tpage_name":"ljakcklv-pris"}],[118489088,{"idx":0,"name":"bam-eyelight","tpage_name":"deshunt-pris2"}],[117637189,{"idx":69,"name":"daxterfoot","tpage_name":"destrack-pris"}],[101056567,{"idx":55,"name":"klever-hand","tpage_name":"ljakcklv-pris"}],[117637188,{"idx":68,"name":"daxterfinger","tpage_name":"destrack-pris"}],[101056566,{"idx":54,"name":"klever-hair","tpage_name":"ljakcklv-pris"}],[117637187,{"idx":67,"name":"daxterear","tpage_name":"destrack-pris"}],[101056565,{"idx":53,"name":"klever-gunmetal-05","tpage_name":"ljakcklv-pris"}],[117637186,{"idx":66,"name":"daxterbolt","tpage_name":"destrack-pris"}],[101056564,{"idx":52,"name":"klever-gunmetal-04","tpage_name":"ljakcklv-pris"}],[117637185,{"idx":65,"name":"daxterbodyshort-eix","tpage_name":"destrack-pris"}],[101056563,{"idx":51,"name":"klever-gunmetal-03","tpage_name":"ljakcklv-pris"}],[101056562,{"idx":50,"name":"klever-gunmetal-02","tpage_name":"ljakcklv-pris"}],[101056560,{"idx":48,"name":"klever-fingertop","tpage_name":"ljakcklv-pris"}],[101056559,{"idx":47,"name":"klever-fingerbottom","tpage_name":"ljakcklv-pris"}],[101056558,{"idx":46,"name":"klever-face-01scars","tpage_name":"ljakcklv-pris"}],[101056556,{"idx":44,"name":"klever-eyelid","tpage_name":"ljakcklv-pris"}],[101056554,{"idx":42,"name":"klever-earcup","tpage_name":"ljakcklv-pris"}],[101056553,{"idx":41,"name":"klever-clips","tpage_name":"ljakcklv-pris"}],[101056552,{"idx":40,"name":"klever-chest","tpage_name":"ljakcklv-pris"}],[101056551,{"idx":39,"name":"klever-brownstrap","tpage_name":"ljakcklv-pris"}],[101056550,{"idx":38,"name":"klever-bolt","tpage_name":"ljakcklv-pris"}],[101056549,{"idx":37,"name":"klever-blackstrap","tpage_name":"ljakcklv-pris"}],[101056547,{"idx":35,"name":"klever-armor-01","tpage_name":"ljakcklv-pris"}],[101056546,{"idx":34,"name":"klever-arm","tpage_name":"ljakcklv-pris"}],[101056544,{"idx":32,"name":"jakchires-shoeteop","tpage_name":"ljakcklv-pris"}],[101056543,{"idx":31,"name":"jakchires-shoemetal","tpage_name":"ljakcklv-pris"}],[101056542,{"idx":30,"name":"jakchires-shoebottom","tpage_name":"ljakcklv-pris"}],[101056540,{"idx":28,"name":"jakchires-pants","tpage_name":"ljakcklv-pris"}],[103546900,{"idx":20,"name":"missle-launcher-tube-end-02","tpage_name":"lctyhijk-tfrag"}],[101056539,{"idx":27,"name":"jakchires-lightbrownspat","tpage_name":"ljakcklv-pris"}],[103546899,{"idx":19,"name":"missle-launcher-tube","tpage_name":"lctyhijk-tfrag"}],[101056538,{"idx":26,"name":"jakchires-leatherpouch","tpage_name":"ljakcklv-pris"}],[103546898,{"idx":18,"name":"missle-launcher-top-01","tpage_name":"lctyhijk-tfrag"}],[101056537,{"idx":25,"name":"jakchires-jacket","tpage_name":"ljakcklv-pris"}],[103546897,{"idx":17,"name":"missle-launcher-top-02","tpage_name":"lctyhijk-tfrag"}],[101056536,{"idx":24,"name":"jakchires-horn","tpage_name":"ljakcklv-pris"}],[103546896,{"idx":16,"name":"missle-launcher-panel-01","tpage_name":"lctyhijk-tfrag"}],[101056535,{"idx":23,"name":"jakchires-hair","tpage_name":"ljakcklv-pris"}],[103546895,{"idx":15,"name":"missle-launcher-metal-01","tpage_name":"lctyhijk-tfrag"}],[101056534,{"idx":22,"name":"jakchires-glovetop","tpage_name":"ljakcklv-pris"}],[103546894,{"idx":14,"name":"missle-launcher-panel-03","tpage_name":"lctyhijk-tfrag"}],[96075814,{"idx":38,"name":"gun-red-mag","tpage_name":"ljakc-pris"}],[101056533,{"idx":21,"name":"jakchires-facert","tpage_name":"ljakcklv-pris"}],[96075813,{"idx":37,"name":"gun-red-glow","tpage_name":"ljakc-pris"}],[103546893,{"idx":13,"name":"missle-launcher-panel-02","tpage_name":"lctyhijk-tfrag"}],[101056514,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljakcklv-pris"}],[99811334,{"idx":6,"name":"dax-missile-body-01","tpage_name":"lctypatk-tfrag"}],[96075794,{"idx":18,"name":"jakchires-eyebrow","tpage_name":"ljakc-pris"}],[101056513,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljakcklv-pris"}],[99811333,{"idx":5,"name":"dax-missile-tip-01","tpage_name":"lctypatk-tfrag"}],[96075793,{"idx":17,"name":"jakchires-eye","tpage_name":"ljakc-pris"}],[101056512,{"idx":0,"name":"bam-eyelight","tpage_name":"ljakcklv-pris"}],[99811332,{"idx":4,"name":"dax-missile-fin-02","tpage_name":"lctypatk-tfrag"}],[96075792,{"idx":16,"name":"jakchires-clips","tpage_name":"ljakc-pris"}],[100991003,{"idx":27,"name":"jakb-shoebottom","tpage_name":"ljakklev-pris"}],[38732003,{"idx":227,"name":"male2_20","tpage_name":"wasstada-sprite"}],[104726543,{"idx":15,"name":"daxterlense","tpage_name":"deshover-pris"}],[100991001,{"idx":25,"name":"jakb-pants","tpage_name":"ljakklev-pris"}],[38732001,{"idx":225,"name":"male2_18","tpage_name":"wasstada-sprite"}],[104726541,{"idx":13,"name":"daxterheadwidenew","tpage_name":"deshover-pris"}],[100990995,{"idx":19,"name":"jakb-jacketbody","tpage_name":"ljakklev-pris"}],[38731995,{"idx":219,"name":"male2_12","tpage_name":"wasstada-sprite"}],[104726535,{"idx":7,"name":"daxterbolt","tpage_name":"deshover-pris"}],[100990978,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljakklev-pris"}],[38731978,{"idx":202,"name":"male1_16","tpage_name":"wasstada-sprite"}],[100990977,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljakklev-pris"}],[38731977,{"idx":201,"name":"male1_15","tpage_name":"wasstada-sprite"}],[100990976,{"idx":0,"name":"bam-eyelight","tpage_name":"ljakklev-pris"}],[38731976,{"idx":200,"name":"male1_14","tpage_name":"wasstada-sprite"}],[100925456,{"idx":16,"name":"king-horn","tpage_name":"ljkdmpk-pris2"}],[104660996,{"idx":4,"name":"des-sand-grass-01","tpage_name":"deserte-vis-shrub"}],[100925455,{"idx":15,"name":"king-hand","tpage_name":"ljkdmpk-pris2"}],[100925454,{"idx":14,"name":"king-hair","tpage_name":"ljkdmpk-pris2"}],[100925453,{"idx":13,"name":"king-greenmetalplain","tpage_name":"ljkdmpk-pris2"}],[104660993,{"idx":1,"name":"des-shrub-pebbles","tpage_name":"deserte-vis-shrub"}],[100925446,{"idx":6,"name":"king-chest","tpage_name":"ljkdmpk-pris2"}],[95944726,{"idx":22,"name":"torn-mouth","tpage_name":"freehq-pris2"}],[100859906,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljkdmpk-pris"}],[99614726,{"idx":6,"name":"nsta-cave-floor-01","tpage_name":"lnstoba-vis-pris"}],[95879186,{"idx":18,"name":"torn-hair-02","tpage_name":"ltorn-pris2"}],[100859905,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljkdmpk-pris"}],[99614725,{"idx":5,"name":"mhbat-wings","tpage_name":"lnstoba-vis-pris"}],[95879185,{"idx":17,"name":"torn-hair-01","tpage_name":"ltorn-pris2"}],[100859904,{"idx":0,"name":"bam-eyelight","tpage_name":"ljkdmpk-pris"}],[99614724,{"idx":4,"name":"mhbat-teeth","tpage_name":"lnstoba-vis-pris"}],[95879184,{"idx":16,"name":"torn-gunbarrel-02","tpage_name":"ltorn-pris2"}],[100794368,{"idx":0,"name":"sig-flatfangs","tpage_name":"ljaksig-water"}],[100728859,{"idx":27,"name":"sig-skirts-02","tpage_name":"ljaksig-pris2"}],[99483679,{"idx":31,"name":"spawner-leaf-03","tpage_name":"lformach-vis-pris"}],[106954759,{"idx":7,"name":"vola-grass-blob","tpage_name":"volcanoa-vis-tfrag"}],[100728858,{"idx":26,"name":"sig-skirts","tpage_name":"ljaksig-pris2"}],[99483678,{"idx":30,"name":"spawner-leaf-02","tpage_name":"lformach-vis-pris"}],[106954758,{"idx":6,"name":"vola-drip-rock","tpage_name":"volcanoa-vis-tfrag"}],[100728857,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"ljaksig-pris2"}],[99483677,{"idx":29,"name":"spawner-base-main","tpage_name":"lformach-vis-pris"}],[106954757,{"idx":5,"name":"vola-cracked-rock-top","tpage_name":"volcanoa-vis-tfrag"}],[100728856,{"idx":24,"name":"sig-shoetop","tpage_name":"ljaksig-pris2"}],[99483676,{"idx":28,"name":"spawner-base","tpage_name":"lformach-vis-pris"}],[106954756,{"idx":4,"name":"vola-lava-02","tpage_name":"volcanoa-vis-tfrag"}],[100728855,{"idx":23,"name":"sig-shoebottom","tpage_name":"ljaksig-pris2"}],[99483675,{"idx":27,"name":"neo-wasp-eye","tpage_name":"lformach-vis-pris"}],[106954755,{"idx":3,"name":"vol-bark","tpage_name":"volcanoa-vis-tfrag"}],[100728851,{"idx":19,"name":"sig-lens","tpage_name":"ljaksig-pris2"}],[99483671,{"idx":23,"name":"neo-wasp-base","tpage_name":"lformach-vis-pris"}],[100728849,{"idx":17,"name":"sig-headgear","tpage_name":"ljaksig-pris2"}],[99483669,{"idx":21,"name":"for-hose","tpage_name":"lformach-vis-pris"}],[100728834,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljaksig-pris2"}],[88277034,{"idx":42,"name":"cguard-air-train-side3","tpage_name":"introcst-tfrag"}],[100728833,{"idx":1,"name":"charHOLD","tpage_name":"ljaksig-pris2"}],[74580053,{"idx":85,"name":"sewer-brick-roof-06","tpage_name":"sewm-vis-tfrag"}],[90767393,{"idx":33,"name":"des-mount-sand-trans","tpage_name":"deserth-vis-tfrag"}],[88277033,{"idx":41,"name":"cguard-air-train-sidepack","tpage_name":"introcst-tfrag"}],[100728832,{"idx":0,"name":"bam-eyelight","tpage_name":"ljaksig-pris2"}],[90767392,{"idx":32,"name":"des-temple-brick-01","tpage_name":"deserth-vis-tfrag"}],[99483652,{"idx":4,"name":"for-egg-rim-01","tpage_name":"lformach-vis-pris"}],[74580052,{"idx":84,"name":"sewer-grate-01","tpage_name":"sewm-vis-tfrag"}],[88277032,{"idx":40,"name":"cguard-air-train-inside-pipel","tpage_name":"introcst-tfrag"}],[100663325,{"idx":29,"name":"jakb-shoeteop","tpage_name":"ljaksig-pris"}],[99418145,{"idx":33,"name":"jakchires-clips","tpage_name":"volcanox-pris"}],[96927785,{"idx":41,"name":"jinx-face","tpage_name":"ltornjnx-pris2"}],[75759725,{"idx":109,"name":"jakchires-shoebottom","tpage_name":"onintent-pris"}],[100663324,{"idx":28,"name":"jakb-shoemetal","tpage_name":"ljaksig-pris"}],[99418144,{"idx":32,"name":"jakchires-chestplate","tpage_name":"volcanox-pris"}],[96927784,{"idx":40,"name":"jinx-eyelid","tpage_name":"ltornjnx-pris2"}],[75759724,{"idx":108,"name":"jakchires-precarmor-01","tpage_name":"onintent-pris"}],[100663318,{"idx":22,"name":"jakb-leatherstrap","tpage_name":"ljaksig-pris"}],[99418138,{"idx":26,"name":"jakc-wraps","tpage_name":"volcanox-pris"}],[75759718,{"idx":102,"name":"jakchires-hair","tpage_name":"onintent-pris"}],[96927778,{"idx":34,"name":"jinx-boottop","tpage_name":"ltornjnx-pris2"}],[100663309,{"idx":13,"name":"jakb-eyelid","tpage_name":"ljaksig-pris"}],[99418129,{"idx":17,"name":"daxterteeth","tpage_name":"volcanox-pris"}],[90701869,{"idx":45,"name":"des-wasmetal26","tpage_name":"desertf-vis-tfrag"}],[75759709,{"idx":93,"name":"jakchires-brwnleather","tpage_name":"onintent-pris"}],[96927769,{"idx":25,"name":"torn-shoe","tpage_name":"ltornjnx-pris2"}],[101908489,{"idx":9,"name":"dm-turret-hud-heat-ring-03","tpage_name":"lformach-minimap"}],[100663302,{"idx":6,"name":"jak-teeth","tpage_name":"ljaksig-pris"}],[99418122,{"idx":10,"name":"daxterfoot","tpage_name":"volcanox-pris"}],[90701862,{"idx":38,"name":"des-corral-metal-05","tpage_name":"desertf-vis-tfrag"}],[75759702,{"idx":86,"name":"jakc-scarf","tpage_name":"onintent-pris"}],[96927762,{"idx":18,"name":"torn-hair-02","tpage_name":"ltornjnx-pris2"}],[100663300,{"idx":4,"name":"jak-belt","tpage_name":"ljaksig-pris"}],[99418120,{"idx":8,"name":"daxterear","tpage_name":"volcanox-pris"}],[90701860,{"idx":36,"name":"des-ruins-roof-01","tpage_name":"desertf-vis-tfrag"}],[75759700,{"idx":84,"name":"jakc-gogglemetal","tpage_name":"onintent-pris"}],[96927760,{"idx":16,"name":"torn-gunbarrel-02","tpage_name":"ltornjnx-pris2"}],[100663299,{"idx":3,"name":"jackb-lens","tpage_name":"ljaksig-pris"}],[99418119,{"idx":7,"name":"daxterbolt","tpage_name":"volcanox-pris"}],[96927759,{"idx":15,"name":"torn-gunbarrel","tpage_name":"ltornjnx-pris2"}],[75759699,{"idx":83,"name":"jakc-chestplate-straps","tpage_name":"onintent-pris"}],[100663298,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljaksig-pris"}],[99418118,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"volcanox-pris"}],[96927758,{"idx":14,"name":"torn-footleather","tpage_name":"ltornjnx-pris2"}],[90701858,{"idx":34,"name":"des-bridge-brace-01","tpage_name":"desertf-vis-tfrag"}],[75759698,{"idx":82,"name":"jakc-armor","tpage_name":"onintent-pris"}],[100663297,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljaksig-pris"}],[99418117,{"idx":5,"name":"daxterarm","tpage_name":"volcanox-pris"}],[96927757,{"idx":13,"name":"torn-finger","tpage_name":"ltornjnx-pris2"}],[90701857,{"idx":33,"name":"des-marauder-house-01","tpage_name":"desertf-vis-tfrag"}],[100663296,{"idx":0,"name":"bam-eyelight","tpage_name":"ljaksig-pris"}],[99418116,{"idx":4,"name":"daxter-orange","tpage_name":"volcanox-pris"}],[96927756,{"idx":12,"name":"torn-face-right","tpage_name":"ltornjnx-pris2"}],[90701856,{"idx":32,"name":"des-totem-stone-01","tpage_name":"desertf-vis-tfrag"}],[99811344,{"idx":16,"name":"prt-min-metal-04","tpage_name":"lctypatk-tfrag"}],[96075804,{"idx":28,"name":"jakchires-pants","tpage_name":"ljakc-pris"}],[101056524,{"idx":12,"name":"jakchires-blackstrap","tpage_name":"ljakcklv-pris"}],[102301704,{"idx":8,"name":"onin-game-x-darkener","tpage_name":"waspgame-sprite"}],[99811343,{"idx":15,"name":"prt-min-metal-01","tpage_name":"lctypatk-tfrag"}],[96075803,{"idx":27,"name":"jakchires-lightbrownspat","tpage_name":"ljakc-pris"}],[101056523,{"idx":11,"name":"jakchires-arm","tpage_name":"ljakcklv-pris"}],[102301703,{"idx":7,"name":"onin-game-x","tpage_name":"waspgame-sprite"}],[99811342,{"idx":14,"name":"prt-min-metal-02","tpage_name":"lctypatk-tfrag"}],[96075802,{"idx":26,"name":"jakchires-leatherpouch","tpage_name":"ljakc-pris"}],[101056522,{"idx":10,"name":"jakc-wristband-a2","tpage_name":"ljakcklv-pris"}],[102301702,{"idx":6,"name":"onin-game-triangle-darkener","tpage_name":"waspgame-sprite"}],[99811341,{"idx":13,"name":"prt-min-metal-03","tpage_name":"lctypatk-tfrag"}],[96075801,{"idx":25,"name":"jakchires-jacket","tpage_name":"ljakc-pris"}],[101056521,{"idx":9,"name":"jakc-wraps","tpage_name":"ljakcklv-pris"}],[102301701,{"idx":5,"name":"onin-game-triangle","tpage_name":"waspgame-sprite"}],[99811336,{"idx":8,"name":"dax-missile-engine-glow","tpage_name":"lctypatk-tfrag"}],[96075796,{"idx":20,"name":"jakchires-facelft","tpage_name":"ljakc-pris"}],[101056516,{"idx":4,"name":"jakc-chestplate-straps","tpage_name":"ljakcklv-pris"}],[102301696,{"idx":0,"name":"onin-game-circle","tpage_name":"waspgame-sprite"}],[99811335,{"idx":7,"name":"dax-missile-body-02","tpage_name":"lctypatk-tfrag"}],[101056515,{"idx":3,"name":"jakc-armor","tpage_name":"ljakcklv-pris"}],[96075795,{"idx":19,"name":"jakchires-eyelid","tpage_name":"ljakc-pris"}],[99811331,{"idx":3,"name":"ctyport-mine-top","tpage_name":"lctypatk-tfrag"}],[74907731,{"idx":83,"name":"sewer-metal-edge-01","tpage_name":"sewl-vis-tfrag"}],[96075791,{"idx":15,"name":"jakchires-chestplate","tpage_name":"ljakc-pris"}],[99811330,{"idx":2,"name":"ctyport-mine-tip","tpage_name":"lctypatk-tfrag"}],[96075790,{"idx":14,"name":"jakchires-brwnleather","tpage_name":"ljakc-pris"}],[99811329,{"idx":1,"name":"ctyport-mine-rim-01","tpage_name":"lctypatk-tfrag"}],[74907729,{"idx":81,"name":"sewer-metal-block-01-hitweak","tpage_name":"sewl-vis-tfrag"}],[96075789,{"idx":13,"name":"jakchires-brownstrap","tpage_name":"ljakc-pris"}],[99811328,{"idx":0,"name":"ctyport-mine-body","tpage_name":"lctypatk-tfrag"}],[74907728,{"idx":80,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewl-vis-tfrag"}],[96075788,{"idx":12,"name":"jakchires-blackstrap","tpage_name":"ljakc-pris"}],[99745793,{"idx":1,"name":"nst-egg-membrane-01","tpage_name":"lnstoba-vis-water"}],[92274713,{"idx":25,"name":"intcept-b-teeth01","tpage_name":"desrace2-pris"}],[38731973,{"idx":197,"name":"male1_11","tpage_name":"wasstada-sprite"}],[98500613,{"idx":5,"name":"wang_3","tpage_name":"hanga-hfrag"}],[99745792,{"idx":0,"name":"nest-pups","tpage_name":"lnstoba-vis-water"}],[92274712,{"idx":24,"name":"intcept-b-pipe01","tpage_name":"desrace2-pris"}],[38731972,{"idx":196,"name":"male1_10","tpage_name":"wasstada-sprite"}],[98500612,{"idx":4,"name":"wang_2","tpage_name":"hanga-hfrag"}],[99680256,{"idx":0,"name":"nest-pups","tpage_name":"lnstoba-vis-alpha"}],[92209176,{"idx":24,"name":"klever-hand","tpage_name":"ldamklev-pris"}],[95944716,{"idx":12,"name":"torn-face-right","tpage_name":"freehq-pris2"}],[99614738,{"idx":18,"name":"nst-hose","tpage_name":"lnstoba-vis-pris"}],[99614737,{"idx":17,"name":"nst-egg-bulbtop-02","tpage_name":"lnstoba-vis-pris"}],[99614736,{"idx":16,"name":"nst-egg-rim-01","tpage_name":"lnstoba-vis-pris"}],[95879196,{"idx":28,"name":"torn-vest","tpage_name":"ltorn-pris2"}],[99614735,{"idx":15,"name":"nst-egg-gem-01","tpage_name":"lnstoba-vis-pris"}],[95879195,{"idx":27,"name":"torn-teeth-01","tpage_name":"ltorn-pris2"}],[99614734,{"idx":14,"name":"nst-egg-bulbtop-01","tpage_name":"lnstoba-vis-pris"}],[95879194,{"idx":26,"name":"torn-shoe-02","tpage_name":"ltorn-pris2"}],[99614733,{"idx":13,"name":"nst-egg-bulb-01","tpage_name":"lnstoba-vis-pris"}],[95879193,{"idx":25,"name":"torn-shoe","tpage_name":"ltorn-pris2"}],[99614732,{"idx":12,"name":"nst-egg-bottom","tpage_name":"lnstoba-vis-pris"}],[95879192,{"idx":24,"name":"torn-scarf","tpage_name":"ltorn-pris2"}],[99614731,{"idx":11,"name":"nsta-finger-pipe","tpage_name":"lnstoba-vis-pris"}],[95879191,{"idx":23,"name":"torn-pipe","tpage_name":"ltorn-pris2"}],[99614730,{"idx":10,"name":"nestb-membrane","tpage_name":"lnstoba-vis-pris"}],[95879190,{"idx":22,"name":"torn-mouth","tpage_name":"ltorn-pris2"}],[99614729,{"idx":9,"name":"nestb-eggskin","tpage_name":"lnstoba-vis-pris"}],[95879189,{"idx":21,"name":"torn-metal2","tpage_name":"ltorn-pris2"}],[99614728,{"idx":8,"name":"nestb-basekor","tpage_name":"lnstoba-vis-pris"}],[95879188,{"idx":20,"name":"torn-legshield","tpage_name":"ltorn-pris2"}],[99614727,{"idx":7,"name":"nsta-wall","tpage_name":"lnstoba-vis-pris"}],[95879187,{"idx":19,"name":"torn-handle-01","tpage_name":"ltorn-pris2"}],[99614723,{"idx":3,"name":"mhbat-skin-01","tpage_name":"lnstoba-vis-pris"}],[95879183,{"idx":15,"name":"torn-gunbarrel","tpage_name":"ltorn-pris2"}],[99614722,{"idx":2,"name":"mhbat-metal-01","tpage_name":"lnstoba-vis-pris"}],[95879182,{"idx":14,"name":"torn-footleather","tpage_name":"ltorn-pris2"}],[99614721,{"idx":1,"name":"mhbat-hose","tpage_name":"lnstoba-vis-pris"}],[95879181,{"idx":13,"name":"torn-finger","tpage_name":"ltorn-pris2"}],[99614720,{"idx":0,"name":"mhbat-eye-01","tpage_name":"lnstoba-vis-pris"}],[95879180,{"idx":12,"name":"torn-face-right","tpage_name":"ltorn-pris2"}],[99549184,{"idx":0,"name":"for-egg-membrane-01","tpage_name":"lformach-vis-water"}],[99418227,{"idx":115,"name":"monk-mummy-face","tpage_name":"volcanox-pris"}],[129302547,{"idx":19,"name":"sewer-screw-02","tpage_name":"sewn-vis-pris"}],[134283267,{"idx":3,"name":"sig2-gun-01","tpage_name":"ltnjxhip-pris"}],[99418226,{"idx":114,"name":"grunt-skin-03","tpage_name":"volcanox-pris"}],[129302546,{"idx":18,"name":"sewer-plate-05","tpage_name":"sewn-vis-pris"}],[134283266,{"idx":2,"name":"sig2-gem-01","tpage_name":"ltnjxhip-pris"}],[99418225,{"idx":113,"name":"grunt-skin-02","tpage_name":"volcanox-pris"}],[129302545,{"idx":17,"name":"sewer-plate-04","tpage_name":"sewn-vis-pris"}],[134283265,{"idx":1,"name":"environment-oldmetal","tpage_name":"ltnjxhip-pris"}],[99418224,{"idx":112,"name":"grunt-skin-01","tpage_name":"volcanox-pris"}],[129302544,{"idx":16,"name":"sewer-pipe-rim-07","tpage_name":"sewn-vis-pris"}],[134283264,{"idx":0,"name":"gun-main","tpage_name":"ltnjxhip-pris"}],[99418203,{"idx":91,"name":"environment-darkprec","tpage_name":"volcanox-pris"}],[99418202,{"idx":90,"name":"dm-spines-dk-ribs-01","tpage_name":"volcanox-pris"}],[126812162,{"idx":2,"name":"holograph-env-scan","tpage_name":"deshover-warp"}],[99418201,{"idx":89,"name":"dm-spines-dk-plate-01","tpage_name":"volcanox-pris"}],[126812161,{"idx":1,"name":"holograph-env-rim","tpage_name":"deshover-warp"}],[99418200,{"idx":88,"name":"dm-spines-dk-hose-01","tpage_name":"volcanox-pris"}],[126812160,{"idx":0,"name":"holograph-env-noise","tpage_name":"deshover-warp"}],[99418198,{"idx":86,"name":"dk-maker-idol-tubes-01","tpage_name":"volcanox-pris"}],[99418197,{"idx":85,"name":"dk-maker-idol-metal-01","tpage_name":"volcanox-pris"}],[99418196,{"idx":84,"name":"dk-maker-idol-head-01","tpage_name":"volcanox-pris"}],[99418195,{"idx":83,"name":"dk-maker-idol-globes-dk-01","tpage_name":"volcanox-pris"}],[99418194,{"idx":82,"name":"dk-maker-idol-globes-01","tpage_name":"volcanox-pris"}],[99418193,{"idx":81,"name":"dk-maker-idol-eye-dk-01","tpage_name":"volcanox-pris"}],[99418192,{"idx":80,"name":"dk-maker-idol-eye-01","tpage_name":"volcanox-pris"}],[99418191,{"idx":79,"name":"dk-maker-idol-collar-02","tpage_name":"volcanox-pris"}],[99418190,{"idx":78,"name":"dk-maker-idol-collar-01","tpage_name":"volcanox-pris"}],[99418175,{"idx":63,"name":"tpl-wing03","tpage_name":"volcanox-pris"}],[99418174,{"idx":62,"name":"tpl-wing01","tpage_name":"volcanox-pris"}],[111869974,{"idx":22,"name":"stadiumb-hud-time-02","tpage_name":"wasleapr-minimap"}],[99418173,{"idx":61,"name":"tpl-rut01","tpage_name":"volcanox-pris"}],[111869973,{"idx":21,"name":"stadiumb-hud-time-01","tpage_name":"wasleapr-minimap"}],[99418172,{"idx":60,"name":"tpl-glider-wood03","tpage_name":"volcanox-pris"}],[111869972,{"idx":20,"name":"stadiumb-hud-ord-th","tpage_name":"wasleapr-minimap"}],[99418171,{"idx":59,"name":"tpl-glider-precursor01","tpage_name":"volcanox-pris"}],[111869971,{"idx":19,"name":"stadiumb-hud-ord-st","tpage_name":"wasleapr-minimap"}],[99418164,{"idx":52,"name":"jakc-scarfhanging","tpage_name":"volcanox-pris"}],[111869964,{"idx":12,"name":"stadiumb-hud-nmbr-08","tpage_name":"wasleapr-minimap"}],[99418163,{"idx":51,"name":"jakc-skirt","tpage_name":"volcanox-pris"}],[111869963,{"idx":11,"name":"stadiumb-hud-nmbr-07","tpage_name":"wasleapr-minimap"}],[99418162,{"idx":50,"name":"jakchires-teeth","tpage_name":"volcanox-pris"}],[111869962,{"idx":10,"name":"stadiumb-hud-nmbr-06","tpage_name":"wasleapr-minimap"}],[99418161,{"idx":49,"name":"jakchires-shoeteop","tpage_name":"volcanox-pris"}],[111869961,{"idx":9,"name":"stadiumb-hud-nmbr-05","tpage_name":"wasleapr-minimap"}],[96927801,{"idx":57,"name":"jinx-wraps","tpage_name":"ltornjnx-pris2"}],[99418160,{"idx":48,"name":"jakchires-shoemetal","tpage_name":"volcanox-pris"}],[111869960,{"idx":8,"name":"stadiumb-hud-nmbr-04","tpage_name":"wasleapr-minimap"}],[96927800,{"idx":56,"name":"jinx-teeth","tpage_name":"ltornjnx-pris2"}],[99418159,{"idx":47,"name":"jakchires-shoebottom","tpage_name":"volcanox-pris"}],[111869959,{"idx":7,"name":"stadiumb-hud-nmbr-03","tpage_name":"wasleapr-minimap"}],[96927799,{"idx":55,"name":"jinx-singlerope","tpage_name":"ltornjnx-pris2"}],[99418158,{"idx":46,"name":"jakchires-precarmor-01","tpage_name":"volcanox-pris"}],[96927798,{"idx":54,"name":"jinx-shoebottom2","tpage_name":"ltornjnx-pris2"}],[111869958,{"idx":6,"name":"stadiumb-hud-nmbr-02","tpage_name":"wasleapr-minimap"}],[99418157,{"idx":45,"name":"jakchires-pants","tpage_name":"volcanox-pris"}],[111869957,{"idx":5,"name":"stadiumb-hud-nmbr-01","tpage_name":"wasleapr-minimap"}],[96927797,{"idx":53,"name":"jinx-shirt","tpage_name":"ltornjnx-pris2"}],[99418153,{"idx":41,"name":"jakchires-horn","tpage_name":"volcanox-pris"}],[96927793,{"idx":49,"name":"jinx-kneepad","tpage_name":"ltornjnx-pris2"}],[111869953,{"idx":1,"name":"stadiumb-hud-booster-on-01","tpage_name":"wasleapr-minimap"}],[99418152,{"idx":40,"name":"jakchires-hair","tpage_name":"volcanox-pris"}],[96927792,{"idx":48,"name":"jinx-iris","tpage_name":"ltornjnx-pris2"}],[111869952,{"idx":0,"name":"stadiumb-hud-booster-off-01","tpage_name":"wasleapr-minimap"}],[99418151,{"idx":39,"name":"jakchires-glovetop","tpage_name":"volcanox-pris"}],[96927791,{"idx":47,"name":"jinx-handle","tpage_name":"ltornjnx-pris2"}],[99418150,{"idx":38,"name":"jakchires-facert","tpage_name":"volcanox-pris"}],[96927790,{"idx":46,"name":"jinx-hairtye","tpage_name":"ltornjnx-pris2"}],[75759730,{"idx":114,"name":"jakc-scarfhanging","tpage_name":"onintent-pris"}],[99418149,{"idx":37,"name":"jakchires-facelft","tpage_name":"volcanox-pris"}],[96927789,{"idx":45,"name":"jinx-hair","tpage_name":"ltornjnx-pris2"}],[75759729,{"idx":113,"name":"jakc-skirt","tpage_name":"onintent-pris"}],[99418148,{"idx":36,"name":"jakchires-eyelid","tpage_name":"volcanox-pris"}],[75759728,{"idx":112,"name":"jakchires-teeth","tpage_name":"onintent-pris"}],[96927788,{"idx":44,"name":"jinx-glovepalm","tpage_name":"ltornjnx-pris2"}],[99418147,{"idx":35,"name":"jakchires-eyebrow","tpage_name":"volcanox-pris"}],[75759727,{"idx":111,"name":"jakchires-shoeteop","tpage_name":"onintent-pris"}],[96927787,{"idx":43,"name":"jinx-glove","tpage_name":"ltornjnx-pris2"}],[99418146,{"idx":34,"name":"jakchires-eye","tpage_name":"volcanox-pris"}],[96927786,{"idx":42,"name":"jinx-finger","tpage_name":"ltornjnx-pris2"}],[75759726,{"idx":110,"name":"jakchires-shoemetal","tpage_name":"onintent-pris"}],[99418143,{"idx":31,"name":"jakchires-brwnleather","tpage_name":"volcanox-pris"}],[75759723,{"idx":107,"name":"jakchires-pants","tpage_name":"onintent-pris"}],[96927783,{"idx":39,"name":"jinx-cigarflame","tpage_name":"ltornjnx-pris2"}],[100663323,{"idx":27,"name":"jakb-shoebottom","tpage_name":"ljaksig-pris"}],[99418142,{"idx":30,"name":"jakchires-brownstrap","tpage_name":"volcanox-pris"}],[96927782,{"idx":38,"name":"jinx-cigar","tpage_name":"ltornjnx-pris2"}],[75759722,{"idx":106,"name":"jakchires-lightbrownspat","tpage_name":"onintent-pris"}],[100663322,{"idx":26,"name":"jakb-scarf","tpage_name":"ljaksig-pris"}],[99418141,{"idx":29,"name":"jakchires-blackstrap","tpage_name":"volcanox-pris"}],[96927781,{"idx":37,"name":"jinx-buckles","tpage_name":"ltornjnx-pris2"}],[75759721,{"idx":105,"name":"jakchires-leatherpouch","tpage_name":"onintent-pris"}],[100663321,{"idx":25,"name":"jakb-pants","tpage_name":"ljaksig-pris"}],[99418140,{"idx":28,"name":"jakchires-arm","tpage_name":"volcanox-pris"}],[75759720,{"idx":104,"name":"jakchires-jacket","tpage_name":"onintent-pris"}],[96927780,{"idx":36,"name":"jinx-brownstrapbolts","tpage_name":"ltornjnx-pris2"}],[100663320,{"idx":24,"name":"jakb-lightbrownstrap","tpage_name":"ljaksig-pris"}],[99418139,{"idx":27,"name":"jakc-wristband-a2","tpage_name":"volcanox-pris"}],[75759719,{"idx":103,"name":"jakchires-horn","tpage_name":"onintent-pris"}],[96927779,{"idx":35,"name":"jinx-brownstrap","tpage_name":"ltornjnx-pris2"}],[100663319,{"idx":23,"name":"jakb-lightbrownspat","tpage_name":"ljaksig-pris"}],[99418137,{"idx":25,"name":"jakc-waistband2","tpage_name":"volcanox-pris"}],[75759717,{"idx":101,"name":"jakchires-glovetop","tpage_name":"onintent-pris"}],[96927777,{"idx":33,"name":"jinx-boottoe","tpage_name":"ltornjnx-pris2"}],[100663317,{"idx":21,"name":"jakb-leatherpouch","tpage_name":"ljaksig-pris"}],[99418136,{"idx":24,"name":"jakc-scarf","tpage_name":"volcanox-pris"}],[90701876,{"idx":52,"name":"des-corral-bar-03","tpage_name":"desertf-vis-tfrag"}],[75759716,{"idx":100,"name":"jakchires-facert","tpage_name":"onintent-pris"}],[96927776,{"idx":32,"name":"jinx-blademetal","tpage_name":"ltornjnx-pris2"}],[100663316,{"idx":20,"name":"jakb-jacketsleeve","tpage_name":"ljaksig-pris"}],[99418134,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"volcanox-pris"}],[96927774,{"idx":30,"name":"jinx-arm","tpage_name":"ltornjnx-pris2"}],[90701874,{"idx":50,"name":"des-cliff-trans-01","tpage_name":"desertf-vis-tfrag"}],[75759714,{"idx":98,"name":"jakchires-eyelid","tpage_name":"onintent-pris"}],[105644034,{"idx":2,"name":"hud-small-frame-01","tpage_name":"mined-minimap"}],[100663314,{"idx":18,"name":"jakb-horn","tpage_name":"ljaksig-pris"}],[99418133,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"volcanox-pris"}],[96927773,{"idx":29,"name":"environment-oldmetal","tpage_name":"ltornjnx-pris2"}],[90701873,{"idx":49,"name":"des-marauder-bridge-wood-cap","tpage_name":"desertf-vis-tfrag"}],[75759713,{"idx":97,"name":"jakchires-eyebrow","tpage_name":"onintent-pris"}],[105644033,{"idx":1,"name":"hud-caveboss-health-01","tpage_name":"mined-minimap"}],[101908493,{"idx":13,"name":"dm-turret-hud-heat-ring-02","tpage_name":"lformach-minimap"}],[100663313,{"idx":17,"name":"jakb-hairtrans","tpage_name":"ljaksig-pris"}],[99418132,{"idx":20,"name":"jakc-armor","tpage_name":"volcanox-pris"}],[96927772,{"idx":28,"name":"torn-vest","tpage_name":"ltornjnx-pris2"}],[90701872,{"idx":48,"name":"des-corral-metal-02","tpage_name":"desertf-vis-tfrag"}],[75759712,{"idx":96,"name":"jakchires-eye","tpage_name":"onintent-pris"}],[105644032,{"idx":0,"name":"hud-caveboss-01","tpage_name":"mined-minimap"}],[101908492,{"idx":12,"name":"dm-turret-hud-health-04","tpage_name":"lformach-minimap"}],[100663312,{"idx":16,"name":"jakb-glovetop","tpage_name":"ljaksig-pris"}],[99418131,{"idx":19,"name":"environment-oldmetal","tpage_name":"volcanox-pris"}],[90701871,{"idx":47,"name":"des-ruins-wall-01","tpage_name":"desertf-vis-tfrag"}],[75759711,{"idx":95,"name":"jakchires-clips","tpage_name":"onintent-pris"}],[96927771,{"idx":27,"name":"torn-teeth-01","tpage_name":"ltornjnx-pris2"}],[101908491,{"idx":11,"name":"dm-turret-hud-health-01","tpage_name":"lformach-minimap"}],[100663311,{"idx":15,"name":"jakb-facert","tpage_name":"ljaksig-pris"}],[99418130,{"idx":18,"name":"daxtertuft","tpage_name":"volcanox-pris"}],[90701870,{"idx":46,"name":"des-marauder-bridge-floor","tpage_name":"desertf-vis-tfrag"}],[75759710,{"idx":94,"name":"jakchires-chestplate","tpage_name":"onintent-pris"}],[96927770,{"idx":26,"name":"torn-shoe-02","tpage_name":"ltornjnx-pris2"}],[101908490,{"idx":10,"name":"dm-turret-hud-heat-ring-04","tpage_name":"lformach-minimap"}],[100663310,{"idx":14,"name":"jakb-facelft","tpage_name":"ljaksig-pris"}],[99418128,{"idx":16,"name":"daxternose","tpage_name":"volcanox-pris"}],[90701868,{"idx":44,"name":"des-corral-plate-03","tpage_name":"desertf-vis-tfrag"}],[75759708,{"idx":92,"name":"jakchires-brownstrap","tpage_name":"onintent-pris"}],[96927768,{"idx":24,"name":"torn-scarf","tpage_name":"ltornjnx-pris2"}],[101908488,{"idx":8,"name":"dm-turret-hud-heat-ring-01","tpage_name":"lformach-minimap"}],[100663308,{"idx":12,"name":"jakb-eyebrow","tpage_name":"ljaksig-pris"}],[99418127,{"idx":15,"name":"daxterlense","tpage_name":"volcanox-pris"}],[75759707,{"idx":91,"name":"jakchires-blackstrap","tpage_name":"onintent-pris"}],[96927767,{"idx":23,"name":"torn-pipe","tpage_name":"ltornjnx-pris2"}],[101908487,{"idx":7,"name":"dm-turret-hud-health-03","tpage_name":"lformach-minimap"}],[100663307,{"idx":11,"name":"jakb-eye","tpage_name":"ljaksig-pris"}],[99418126,{"idx":14,"name":"daxterhelmetplain","tpage_name":"volcanox-pris"}],[96927766,{"idx":22,"name":"torn-mouth","tpage_name":"ltornjnx-pris2"}],[90701866,{"idx":42,"name":"des-totem-stone-trim","tpage_name":"desertf-vis-tfrag"}],[75759706,{"idx":90,"name":"jakchires-arm","tpage_name":"onintent-pris"}],[101908486,{"idx":6,"name":"dm-turret-hud-health-02","tpage_name":"lformach-minimap"}],[100663306,{"idx":10,"name":"jakb-clips","tpage_name":"ljaksig-pris"}],[99418125,{"idx":13,"name":"daxterheadwidenew","tpage_name":"volcanox-pris"}],[96927765,{"idx":21,"name":"torn-metal2","tpage_name":"ltornjnx-pris2"}],[90701865,{"idx":41,"name":"des-corral-plate-01","tpage_name":"desertf-vis-tfrag"}],[75759705,{"idx":89,"name":"jakc-wristband-a2","tpage_name":"onintent-pris"}],[101908485,{"idx":5,"name":"dm-turret-hud-gun-arrow-01","tpage_name":"lformach-minimap"}],[100663305,{"idx":9,"name":"jakb-brownleather","tpage_name":"ljaksig-pris"}],[99418124,{"idx":12,"name":"daxtergoggles","tpage_name":"volcanox-pris"}],[96927764,{"idx":20,"name":"torn-legshield","tpage_name":"ltornjnx-pris2"}],[90701864,{"idx":40,"name":"des-rock-01","tpage_name":"desertf-vis-tfrag"}],[75759704,{"idx":88,"name":"jakc-wraps","tpage_name":"onintent-pris"}],[101908484,{"idx":4,"name":"dm-turret-hud-arrow-01","tpage_name":"lformach-minimap"}],[100663304,{"idx":8,"name":"jakb-blackstrap","tpage_name":"ljaksig-pris"}],[99418123,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"volcanox-pris"}],[96927763,{"idx":19,"name":"torn-handle-01","tpage_name":"ltornjnx-pris2"}],[75759703,{"idx":87,"name":"jakc-waistband2","tpage_name":"onintent-pris"}],[101908483,{"idx":3,"name":"hud-target-reticle","tpage_name":"lformach-minimap"}],[100663303,{"idx":7,"name":"jakb-armor","tpage_name":"ljaksig-pris"}],[99418121,{"idx":9,"name":"daxterfinger","tpage_name":"volcanox-pris"}],[90701861,{"idx":37,"name":"des-corral-bar-01","tpage_name":"desertf-vis-tfrag"}],[75759701,{"idx":85,"name":"jakc-lens","tpage_name":"onintent-pris"}],[96927761,{"idx":17,"name":"torn-hair-01","tpage_name":"ltornjnx-pris2"}],[100663301,{"idx":5,"name":"jak-gogglemetal","tpage_name":"ljaksig-pris"}],[99418115,{"idx":3,"name":"daxter-furhilite","tpage_name":"volcanox-pris"}],[96927755,{"idx":11,"name":"torn-face","tpage_name":"ltornjnx-pris2"}],[90701855,{"idx":31,"name":"des-wasmetal01","tpage_name":"desertf-vis-tfrag"}],[75759695,{"idx":79,"name":"pecker-yellowfur","tpage_name":"onintent-pris"}],[99418114,{"idx":2,"name":"daxter-eyelid","tpage_name":"volcanox-pris"}],[96927754,{"idx":10,"name":"torn-eyelid","tpage_name":"ltornjnx-pris2"}],[90701854,{"idx":30,"name":"des-wasmetal20","tpage_name":"desertf-vis-tfrag"}],[75759694,{"idx":78,"name":"pecker-wingtop","tpage_name":"onintent-pris"}],[99418113,{"idx":1,"name":"bam-hairhilite","tpage_name":"volcanox-pris"}],[96927753,{"idx":9,"name":"torn-eye","tpage_name":"ltornjnx-pris2"}],[90701853,{"idx":29,"name":"des-ruins-top-02","tpage_name":"desertf-vis-tfrag"}],[75759693,{"idx":77,"name":"pecker-wingbottom","tpage_name":"onintent-pris"}],[99418112,{"idx":0,"name":"bam-eyelight","tpage_name":"volcanox-pris"}],[96927752,{"idx":8,"name":"torn-ear","tpage_name":"ltornjnx-pris2"}],[90701852,{"idx":28,"name":"des-ruins-bottom-01","tpage_name":"desertf-vis-tfrag"}],[81985592,{"idx":56,"name":"marauder-metal-mask","tpage_name":"wasstadc-pris"}],[75759692,{"idx":76,"name":"pecker-teeth","tpage_name":"onintent-pris"}],[98631683,{"idx":3,"name":"ctyslumc-fountain-fall-dest","tpage_name":"ctyslumc-vis-water"}],[98631682,{"idx":2,"name":"ctyslumc-fountain-fall","tpage_name":"ctyslumc-vis-water"}],[98631681,{"idx":1,"name":"ctyslumc-water-dest","tpage_name":"ctyslumc-vis-water"}],[115212302,{"idx":14,"name":"cty-grunt-skin-03","tpage_name":"ctypesb-pris"}],[108986402,{"idx":34,"name":"monk-femaleskirt-top","tpage_name":"wasleapr-pris"}],[98631680,{"idx":0,"name":"ctyslumc-water","tpage_name":"ctyslumc-vis-water"}],[73728080,{"idx":80,"name":"sewer-metal-floor-02-hitweak","tpage_name":"sewh-vis-tfrag"}],[106234029,{"idx":173,"name":"roboboss-shinyorange-03","tpage_name":"mined-pris"}],[144834609,{"idx":49,"name":"rail-light-blue-small","tpage_name":"combn-tfrag"}],[151060509,{"idx":29,"name":"fac-switch-shaft","tpage_name":"factoryc-vis-pris"}],[154796049,{"idx":17,"name":"daxterteeth","tpage_name":"ljakndax-pris"}],[97255427,{"idx":3,"name":"wstd-gate-pass-04","tpage_name":"arenacst-tfrag"}],[91029527,{"idx":23,"name":"kg-targ-bit-03","tpage_name":"gungame-sprite"}],[38731967,{"idx":191,"name":"male1_05","tpage_name":"wasstada-sprite"}],[106234028,{"idx":172,"name":"roboboss-shinyorange-02","tpage_name":"mined-pris"}],[144834608,{"idx":48,"name":"rail-base-dark-01","tpage_name":"combn-tfrag"}],[151060508,{"idx":28,"name":"fac-switch-rim-02","tpage_name":"factoryc-vis-pris"}],[154796048,{"idx":16,"name":"daxternose","tpage_name":"ljakndax-pris"}],[97255426,{"idx":2,"name":"wstd-gate-pass-01","tpage_name":"arenacst-tfrag"}],[91029526,{"idx":22,"name":"kg-targ-bit-02","tpage_name":"gungame-sprite"}],[38731966,{"idx":190,"name":"male1_04","tpage_name":"wasstada-sprite"}],[96927749,{"idx":5,"name":"torn-belt","tpage_name":"ltornjnx-pris2"}],[90701849,{"idx":25,"name":"des-ruins-top-03","tpage_name":"desertf-vis-tfrag"}],[81985589,{"idx":53,"name":"wstlander-04-shirt","tpage_name":"wasstadc-pris"}],[75759689,{"idx":73,"name":"pecker-face","tpage_name":"onintent-pris"}],[96927746,{"idx":2,"name":"charHOLD","tpage_name":"ltornjnx-pris2"}],[90701846,{"idx":22,"name":"des-ruins-top-01","tpage_name":"desertf-vis-tfrag"}],[81985586,{"idx":50,"name":"wstlander-04-dark-blue","tpage_name":"wasstadc-pris"}],[75759686,{"idx":70,"name":"onin-toe","tpage_name":"onintent-pris"}],[96927745,{"idx":1,"name":"bam-hairhilite","tpage_name":"ltornjnx-pris2"}],[81985585,{"idx":49,"name":"wstlander-03-flesh","tpage_name":"wasstadc-pris"}],[75759685,{"idx":69,"name":"onin-teeth","tpage_name":"onintent-pris"}],[96927744,{"idx":0,"name":"bam-eyelight","tpage_name":"ltornjnx-pris2"}],[90701844,{"idx":20,"name":"des-temple-stone-01","tpage_name":"desertf-vis-tfrag"}],[81985584,{"idx":48,"name":"wstlander-03-eye","tpage_name":"wasstadc-pris"}],[75759684,{"idx":68,"name":"onin-skirt","tpage_name":"onintent-pris"}],[96206875,{"idx":27,"name":"seem-skirt-small","tpage_name":"wasseem-pris2"}],[94961695,{"idx":31,"name":"jakchires-shoemetal","tpage_name":"lsigjakc-pris"}],[89980975,{"idx":47,"name":"des-egg-bulb-01","tpage_name":"desertg-vis-tfrag"}],[96206874,{"idx":26,"name":"seem-skirt","tpage_name":"wasseem-pris2"}],[89980974,{"idx":46,"name":"des-egg-bulbtop-02","tpage_name":"desertg-vis-tfrag"}],[94961694,{"idx":30,"name":"jakchires-shoebottom","tpage_name":"lsigjakc-pris"}],[96206872,{"idx":24,"name":"seem-teeth","tpage_name":"wasseem-pris2"}],[89980972,{"idx":44,"name":"des-ruins-top-03","tpage_name":"desertg-vis-tfrag"}],[94961692,{"idx":28,"name":"jakchires-pants","tpage_name":"lsigjakc-pris"}],[96206871,{"idx":23,"name":"seem-pipes-02","tpage_name":"wasseem-pris2"}],[89980971,{"idx":43,"name":"des-ruins-roof-01","tpage_name":"desertg-vis-tfrag"}],[94961691,{"idx":27,"name":"jakchires-lightbrownspat","tpage_name":"lsigjakc-pris"}],[96206870,{"idx":22,"name":"seem-headpiecetop","tpage_name":"wasseem-pris2"}],[89980970,{"idx":42,"name":"des-ruins-top-02","tpage_name":"desertg-vis-tfrag"}],[94961690,{"idx":26,"name":"jakchires-leatherpouch","tpage_name":"lsigjakc-pris"}],[96206869,{"idx":21,"name":"seem-headgearback","tpage_name":"wasseem-pris2"}],[94961689,{"idx":25,"name":"jakchires-jacket","tpage_name":"lsigjakc-pris"}],[89980969,{"idx":41,"name":"des-ruins-bottom-02","tpage_name":"desertg-vis-tfrag"}],[96206868,{"idx":20,"name":"seem-uppertorso","tpage_name":"wasseem-pris2"}],[94961688,{"idx":24,"name":"jakchires-horn","tpage_name":"lsigjakc-pris"}],[89980968,{"idx":40,"name":"des-ruins-top-01","tpage_name":"desertg-vis-tfrag"}],[96206867,{"idx":19,"name":"seem-straps","tpage_name":"wasseem-pris2"}],[94961687,{"idx":23,"name":"jakchires-hair","tpage_name":"lsigjakc-pris"}],[89980967,{"idx":39,"name":"des-ruins-bottom-01","tpage_name":"desertg-vis-tfrag"}],[96206866,{"idx":18,"name":"seem-precmetal-plain","tpage_name":"wasseem-pris2"}],[89980966,{"idx":38,"name":"des-mount-bottom-01","tpage_name":"desertg-vis-tfrag"}],[94961686,{"idx":22,"name":"jakchires-glovetop","tpage_name":"lsigjakc-pris"}],[96206865,{"idx":17,"name":"seem-precmetal-edge","tpage_name":"wasseem-pris2"}],[94961685,{"idx":21,"name":"jakchires-facert","tpage_name":"lsigjakc-pris"}],[89980965,{"idx":37,"name":"des-cliff-top-05","tpage_name":"desertg-vis-tfrag"}],[96206864,{"idx":16,"name":"seem-precmetal-chestplate-01","tpage_name":"wasseem-pris2"}],[94961684,{"idx":20,"name":"jakchires-facelft","tpage_name":"lsigjakc-pris"}],[96206862,{"idx":14,"name":"seem-pipeend","tpage_name":"wasseem-pris2"}],[94961682,{"idx":18,"name":"jakchires-eyebrow","tpage_name":"lsigjakc-pris"}],[96206861,{"idx":13,"name":"seem-hand","tpage_name":"wasseem-pris2"}],[94961681,{"idx":17,"name":"jakchires-eye","tpage_name":"lsigjakc-pris"}],[89980961,{"idx":33,"name":"des-cliff-top-02","tpage_name":"desertg-vis-tfrag"}],[96206860,{"idx":12,"name":"seem-finger","tpage_name":"wasseem-pris2"}],[89980960,{"idx":32,"name":"des-cliff-top-01","tpage_name":"desertg-vis-tfrag"}],[94961680,{"idx":16,"name":"jakchires-clips","tpage_name":"lsigjakc-pris"}],[96206859,{"idx":11,"name":"seem-face","tpage_name":"wasseem-pris2"}],[89980959,{"idx":31,"name":"des-cliff-01","tpage_name":"desertg-vis-tfrag"}],[94961679,{"idx":15,"name":"jakchires-chestplate","tpage_name":"lsigjakc-pris"}],[96206858,{"idx":10,"name":"seem-eyelid","tpage_name":"wasseem-pris2"}],[89980958,{"idx":30,"name":"des-cliff-top-03","tpage_name":"desertg-vis-tfrag"}],[94961678,{"idx":14,"name":"jakchires-brwnleather","tpage_name":"lsigjakc-pris"}],[96206857,{"idx":9,"name":"seem-eye","tpage_name":"wasseem-pris2"}],[89980957,{"idx":29,"name":"des-cliff-trans-01","tpage_name":"desertg-vis-tfrag"}],[94961677,{"idx":13,"name":"jakchires-brownstrap","tpage_name":"lsigjakc-pris"}],[96206856,{"idx":8,"name":"seem-ear","tpage_name":"wasseem-pris2"}],[89980956,{"idx":28,"name":"des-bridge-plank","tpage_name":"desertg-vis-tfrag"}],[94961676,{"idx":12,"name":"jakchires-blackstrap","tpage_name":"lsigjakc-pris"}],[96206855,{"idx":7,"name":"seem-boottoe","tpage_name":"wasseem-pris2"}],[89980955,{"idx":27,"name":"des-bridge-brace-01","tpage_name":"desertg-vis-tfrag"}],[94961675,{"idx":11,"name":"jakchires-arm","tpage_name":"lsigjakc-pris"}],[96206854,{"idx":6,"name":"seem-bootmet","tpage_name":"wasseem-pris2"}],[89980954,{"idx":26,"name":"des-cave-rock","tpage_name":"desertg-vis-tfrag"}],[94961674,{"idx":10,"name":"jakc-wristband-a2","tpage_name":"lsigjakc-pris"}],[96206853,{"idx":5,"name":"seem-bootlower","tpage_name":"wasseem-pris2"}],[89980953,{"idx":25,"name":"des-pole-01","tpage_name":"desertg-vis-tfrag"}],[94961673,{"idx":9,"name":"jakc-wraps","tpage_name":"lsigjakc-pris"}],[96206852,{"idx":4,"name":"seem-bootleg","tpage_name":"wasseem-pris2"}],[94961672,{"idx":8,"name":"jakc-waistband2","tpage_name":"lsigjakc-pris"}],[96206851,{"idx":3,"name":"seem-bootbottom","tpage_name":"wasseem-pris2"}],[94961671,{"idx":7,"name":"jakc-scarf","tpage_name":"lsigjakc-pris"}],[96206850,{"idx":2,"name":"seem-arm","tpage_name":"wasseem-pris2"}],[94961670,{"idx":6,"name":"jakc-lens","tpage_name":"lsigjakc-pris"}],[96206849,{"idx":1,"name":"environment-oldmetal","tpage_name":"wasseem-pris2"}],[89980949,{"idx":21,"name":"des-cave-wall-01","tpage_name":"desertg-vis-tfrag"}],[94961669,{"idx":5,"name":"jakc-gogglemetal","tpage_name":"lsigjakc-pris"}],[96206848,{"idx":0,"name":"bam-eyelight","tpage_name":"wasseem-pris2"}],[89980948,{"idx":20,"name":"des-mount-02","tpage_name":"desertg-vis-tfrag"}],[94961668,{"idx":4,"name":"jakc-chestplate-straps","tpage_name":"lsigjakc-pris"}],[95944715,{"idx":11,"name":"torn-face","tpage_name":"freehq-pris2"}],[92209175,{"idx":23,"name":"klever-gunmetal-05","tpage_name":"ldamklev-pris"}],[95944714,{"idx":10,"name":"torn-eyelid","tpage_name":"freehq-pris2"}],[92209174,{"idx":22,"name":"klever-gunmetal-04","tpage_name":"ldamklev-pris"}],[95944713,{"idx":9,"name":"torn-eye","tpage_name":"freehq-pris2"}],[92209173,{"idx":21,"name":"klever-gunmetal-03","tpage_name":"ldamklev-pris"}],[95944712,{"idx":8,"name":"torn-ear","tpage_name":"freehq-pris2"}],[92209172,{"idx":20,"name":"klever-gunmetal-02","tpage_name":"ldamklev-pris"}],[95944711,{"idx":7,"name":"torn-blademetal","tpage_name":"freehq-pris2"}],[92209171,{"idx":19,"name":"klever-gunmetal-01","tpage_name":"ldamklev-pris"}],[112525331,{"idx":19,"name":"environment-oldmetal","tpage_name":"desrescc-pris"}],[117506051,{"idx":3,"name":"freehq-wal-plate03","tpage_name":"freehq-shrub"}],[95944709,{"idx":5,"name":"torn-belt","tpage_name":"freehq-pris2"}],[92209169,{"idx":17,"name":"klever-fingerbottom","tpage_name":"ldamklev-pris"}],[112525330,{"idx":18,"name":"daxtertuft","tpage_name":"desrescc-pris"}],[117506050,{"idx":2,"name":"freehq-gray-metal-disc01","tpage_name":"freehq-shrub"}],[95944708,{"idx":4,"name":"torn-armor","tpage_name":"freehq-pris2"}],[92209168,{"idx":16,"name":"klever-clips","tpage_name":"ldamklev-pris"}],[112525329,{"idx":17,"name":"daxterteeth","tpage_name":"desrescc-pris"}],[117506049,{"idx":1,"name":"freehq-monitor06","tpage_name":"freehq-shrub"}],[95944707,{"idx":3,"name":"torn-armlft","tpage_name":"freehq-pris2"}],[92209167,{"idx":15,"name":"klever-chest","tpage_name":"ldamklev-pris"}],[95092736,{"idx":0,"name":"sig-flatfangs","tpage_name":"lsigjakc-water"}],[91357196,{"idx":12,"name":"klever-clips","tpage_name":"lkleever-pris"}],[71434316,{"idx":76,"name":"wstd-fight-plat-wall-03","tpage_name":"wasstadc-tfrag"}],[95027230,{"idx":30,"name":"vin-teeth-01","tpage_name":"lsigjakc-pris2"}],[91291690,{"idx":42,"name":"gun-guncase-round-01","tpage_name":"gungame-vis-tfrag"}],[95027229,{"idx":29,"name":"sig-undergarments","tpage_name":"lsigjakc-pris2"}],[91291689,{"idx":41,"name":"gun-guncase-rim-02","tpage_name":"gungame-vis-tfrag"}],[95027226,{"idx":26,"name":"sig-skirts","tpage_name":"lsigjakc-pris2"}],[91291686,{"idx":38,"name":"gun-gun-gray-02","tpage_name":"gungame-vis-tfrag"}],[95027225,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"lsigjakc-pris2"}],[91291685,{"idx":37,"name":"gun-gun-gray-01","tpage_name":"gungame-vis-tfrag"}],[95027224,{"idx":24,"name":"sig-shoetop","tpage_name":"lsigjakc-pris2"}],[91291684,{"idx":36,"name":"gun-gun-barrel-01","tpage_name":"gungame-vis-tfrag"}],[95027223,{"idx":23,"name":"sig-shoebottom","tpage_name":"lsigjakc-pris2"}],[91291683,{"idx":35,"name":"gun-green-marble","tpage_name":"gungame-vis-tfrag"}],[95027222,{"idx":22,"name":"sig-sac","tpage_name":"lsigjakc-pris2"}],[91291682,{"idx":34,"name":"gun-darkgray","tpage_name":"gungame-vis-tfrag"}],[95027221,{"idx":21,"name":"sig-metal-dirty","tpage_name":"lsigjakc-pris2"}],[91291681,{"idx":33,"name":"gun-dark-mag","tpage_name":"gungame-vis-tfrag"}],[95027217,{"idx":17,"name":"sig-headgear","tpage_name":"lsigjakc-pris2"}],[91291677,{"idx":29,"name":"gun-building-wall-yellow-01","tpage_name":"gungame-vis-tfrag"}],[95027216,{"idx":16,"name":"sig-gun-05","tpage_name":"lsigjakc-pris2"}],[91291676,{"idx":28,"name":"gun-building-wall-red-01","tpage_name":"gungame-vis-tfrag"}],[95027215,{"idx":15,"name":"sig-gun-04","tpage_name":"lsigjakc-pris2"}],[91291675,{"idx":27,"name":"gun-building-wall-purple-01","tpage_name":"gungame-vis-tfrag"}],[95027214,{"idx":14,"name":"sig-gun-03","tpage_name":"lsigjakc-pris2"}],[91291674,{"idx":26,"name":"gun-building-wall-green-01","tpage_name":"gungame-vis-tfrag"}],[95027212,{"idx":12,"name":"sig-gun-01","tpage_name":"lsigjakc-pris2"}],[91291672,{"idx":24,"name":"gun-building-wall-brown-01","tpage_name":"gungame-vis-tfrag"}],[95027211,{"idx":11,"name":"sig-glovetop","tpage_name":"lsigjakc-pris2"}],[91291671,{"idx":23,"name":"gun-building-wall-blue-01","tpage_name":"gungame-vis-tfrag"}],[95027210,{"idx":10,"name":"sig-glove","tpage_name":"lsigjakc-pris2"}],[91291670,{"idx":22,"name":"gun-building-roof-tile-sides-02","tpage_name":"gungame-vis-tfrag"}],[95027209,{"idx":9,"name":"sig-gem-01","tpage_name":"lsigjakc-pris2"}],[91291669,{"idx":21,"name":"gun-building-roof-tile-02","tpage_name":"gungame-vis-tfrag"}],[95027208,{"idx":8,"name":"sig-flask","tpage_name":"lsigjakc-pris2"}],[91291668,{"idx":20,"name":"gun-building-roof","tpage_name":"gungame-vis-tfrag"}],[97517568,{"idx":0,"name":"sig2-flatfangs","tpage_name":"lwassig-water"}],[94437378,{"idx":2,"name":"searchlight-envmap","tpage_name":"intpfall-vis-water"}],[90701838,{"idx":14,"name":"des-corral-metal-04","tpage_name":"desertf-vis-tfrag"}],[81985578,{"idx":42,"name":"wstlander-02-glove","tpage_name":"wasstadc-pris"}],[75759678,{"idx":62,"name":"onin-mat","tpage_name":"onintent-pris"}],[94437377,{"idx":1,"name":"hidelight-lightfade","tpage_name":"intpfall-vis-water"}],[90701837,{"idx":13,"name":"des-corral-metal-03","tpage_name":"desertf-vis-tfrag"}],[81985577,{"idx":41,"name":"wstlander-02-eye","tpage_name":"wasstadc-pris"}],[75759677,{"idx":61,"name":"onin-idoleye","tpage_name":"onintent-pris"}],[94437376,{"idx":0,"name":"windshield01","tpage_name":"intpfall-vis-water"}],[90701836,{"idx":12,"name":"des-pole-01","tpage_name":"desertf-vis-tfrag"}],[81985576,{"idx":40,"name":"wstlander-02-bootheel","tpage_name":"wasstadc-pris"}],[75759676,{"idx":60,"name":"onin-idol","tpage_name":"onintent-pris"}],[94371929,{"idx":89,"name":"tpal-beam01","tpage_name":"intpfall-vis-pris"}],[120520709,{"idx":5,"name":"airlockl-door-metalframe","tpage_name":"forestx-vis-pris"}],[94371921,{"idx":81,"name":"palace-break-walltile-02","tpage_name":"intpfall-vis-pris"}],[94371920,{"idx":80,"name":"palace-break-walltile","tpage_name":"intpfall-vis-pris"}],[94371919,{"idx":79,"name":"palace-break-wall09","tpage_name":"intpfall-vis-pris"}],[94371918,{"idx":78,"name":"palace-break-wall08","tpage_name":"intpfall-vis-pris"}],[94371897,{"idx":57,"name":"palace-break-roof01","tpage_name":"intpfall-vis-pris"}],[94371895,{"idx":55,"name":"palace-break-plainwall","tpage_name":"intpfall-vis-pris"}],[94371892,{"idx":52,"name":"palace-break-pillwall06","tpage_name":"intpfall-vis-pris"}],[94371885,{"idx":45,"name":"palace-break-glass05","tpage_name":"intpfall-vis-pris"}],[94371884,{"idx":44,"name":"palace-break-glass04","tpage_name":"intpfall-vis-pris"}],[108986425,{"idx":57,"name":"monk-strap","tpage_name":"wasleapr-pris"}],[121438225,{"idx":17,"name":"vehicle-metal-plate-01","tpage_name":"desbattl-pris"}],[94306308,{"idx":4,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"intpfall-vis-alpha"}],[90570768,{"idx":16,"name":"des-cactus-01","tpage_name":"desertd-vis-tfrag"}],[74383428,{"idx":68,"name":"sewer-big-brace-01","tpage_name":"sewj-vis-tfrag"}],[108986424,{"idx":56,"name":"monk-staffa-wood","tpage_name":"wasleapr-pris"}],[121438224,{"idx":16,"name":"vehicle-metal-01","tpage_name":"desbattl-pris"}],[94306307,{"idx":3,"name":"palcab-lowres-background-trees2","tpage_name":"intpfall-vis-alpha"}],[90570767,{"idx":15,"name":"des-cactus-02","tpage_name":"desertd-vis-tfrag"}],[74383427,{"idx":67,"name":"sewer-brick-roof-04","tpage_name":"sewj-vis-tfrag"}],[91815947,{"idx":11,"name":"vin-support-base-02","tpage_name":"ctyinda-vis-pris"}],[108986423,{"idx":55,"name":"monk-scarob","tpage_name":"wasleapr-pris"}],[121438223,{"idx":15,"name":"vehicle-gun-box-01","tpage_name":"desbattl-pris"}],[94306306,{"idx":2,"name":"palcab-lowres-background-trees-edge","tpage_name":"intpfall-vis-alpha"}],[90570766,{"idx":14,"name":"des-palmplant-leaf-01","tpage_name":"desertd-vis-tfrag"}],[74383426,{"idx":66,"name":"sewer-brick-roof-02","tpage_name":"sewj-vis-tfrag"}],[91815946,{"idx":10,"name":"vin-door-large-01","tpage_name":"ctyinda-vis-pris"}],[108986422,{"idx":54,"name":"monk-rope","tpage_name":"wasleapr-pris"}],[121438222,{"idx":14,"name":"vehicle-cap-pin-01","tpage_name":"desbattl-pris"}],[94306305,{"idx":1,"name":"palcab-lowres-background-crater-rim","tpage_name":"intpfall-vis-alpha"}],[74383425,{"idx":65,"name":"sewer-plate-03","tpage_name":"sewj-vis-tfrag"}],[90570765,{"idx":13,"name":"des-palmtree-beard","tpage_name":"desertd-vis-tfrag"}],[91815945,{"idx":9,"name":"citwide-crimson-wall-plain","tpage_name":"ctyinda-vis-pris"}],[108986421,{"idx":53,"name":"monk-redjewel","tpage_name":"wasleapr-pris"}],[121438221,{"idx":13,"name":"vehicle-brace-pipe-01","tpage_name":"desbattl-pris"}],[94306304,{"idx":0,"name":"palcab-lowres-background-shoreline-02","tpage_name":"intpfall-vis-alpha"}],[74383424,{"idx":64,"name":"sewer-plate-02","tpage_name":"sewj-vis-tfrag"}],[90570764,{"idx":12,"name":"des-wasmetal07","tpage_name":"desertd-vis-tfrag"}],[91815944,{"idx":8,"name":"citwide-crimson-tube","tpage_name":"ctyinda-vis-pris"}],[94240885,{"idx":117,"name":"palcab-wall","tpage_name":"intpfall-vis-tfrag"}],[129105925,{"idx":5,"name":"sewer-waterfall-02-n-dest","tpage_name":"sewn-vis-water"}],[130351105,{"idx":1,"name":"des-beast-eye","tpage_name":"deshover-pris2"}],[94240824,{"idx":56,"name":"t-citywide-met-bm-red-strp01","tpage_name":"intpfall-vis-tfrag"}],[109182984,{"idx":8,"name":"stadiumb-hud-nmbr-04","tpage_name":"destrack-minimap"}],[93519902,{"idx":30,"name":"hud-rhino-turbometer","tpage_name":"wasall-minimap"}],[100990982,{"idx":6,"name":"jak-teeth","tpage_name":"ljakklev-pris"}],[38731982,{"idx":206,"name":"male1_20","tpage_name":"wasstada-sprite"}],[92930052,{"idx":4,"name":"artifact-dec-02","tpage_name":"desrace1-tfrag"}],[90439692,{"idx":12,"name":"des-cliff-top-03","tpage_name":"deserte-vis-tfrag"}],[86704152,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"ldamklev-pris2"}],[74252352,{"idx":64,"name":"sew-gun-panel-05","tpage_name":"sewg-vis-pris"}],[92930051,{"idx":3,"name":"artifact-plain-02","tpage_name":"desrace1-tfrag"}],[90439691,{"idx":11,"name":"des-cliff-trans-01","tpage_name":"deserte-vis-tfrag"}],[86704151,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"ldamklev-pris2"}],[74252351,{"idx":63,"name":"sew-gun-panel-02","tpage_name":"sewg-vis-pris"}],[92930050,{"idx":2,"name":"artifact-plain-01","tpage_name":"desrace1-tfrag"}],[90439690,{"idx":10,"name":"des-mount-02","tpage_name":"deserte-vis-tfrag"}],[86704150,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"ldamklev-pris2"}],[74252350,{"idx":62,"name":"sew-gun-body-01","tpage_name":"sewg-vis-pris"}],[92930049,{"idx":1,"name":"artifact-blue-glow-01","tpage_name":"desrace1-tfrag"}],[90439689,{"idx":9,"name":"des-rock-01","tpage_name":"deserte-vis-tfrag"}],[86704149,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"ldamklev-pris2"}],[74252349,{"idx":61,"name":"sew-gun-barrel-01","tpage_name":"sewg-vis-pris"}],[92930048,{"idx":0,"name":"artifact-dec-01","tpage_name":"desrace1-tfrag"}],[90439688,{"idx":8,"name":"des-mount-01","tpage_name":"deserte-vis-tfrag"}],[86704148,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"ldamklev-pris2"}],[105054325,{"idx":117,"name":"vehicle-tread-blur-02","tpage_name":"desoasis-pris"}],[105054324,{"idx":116,"name":"vehicle-toad-exhaust-01","tpage_name":"desoasis-pris"}],[141164544,{"idx":0,"name":"holo-curve","tpage_name":"lctysnpr-sprite"}],[105054323,{"idx":115,"name":"vehicle-metal-plate-01","tpage_name":"desoasis-pris"}],[92274711,{"idx":23,"name":"intcept-b-gun01","tpage_name":"desrace2-pris"}],[38731971,{"idx":195,"name":"male1_09","tpage_name":"wasstada-sprite"}],[91029531,{"idx":27,"name":"kg-bonus-bit-03","tpage_name":"gungame-sprite"}],[98500611,{"idx":3,"name":"wang_1","tpage_name":"hanga-hfrag"}],[105054322,{"idx":114,"name":"vehicle-gun-box-01","tpage_name":"desoasis-pris"}],[92274710,{"idx":22,"name":"intcept-b-base-patern02","tpage_name":"desrace2-pris"}],[91029530,{"idx":26,"name":"kg-bonus-bit-02","tpage_name":"gungame-sprite"}],[38731970,{"idx":194,"name":"male1_08","tpage_name":"wasstada-sprite"}],[98500610,{"idx":2,"name":"wang_0","tpage_name":"hanga-hfrag"}],[105054321,{"idx":113,"name":"vehicle-gas-tank-01","tpage_name":"desoasis-pris"}],[92274709,{"idx":21,"name":"intcept-b-base-patern01","tpage_name":"desrace2-pris"}],[91029529,{"idx":25,"name":"kg-bonus-bit-01","tpage_name":"gungame-sprite"}],[38731969,{"idx":193,"name":"male1_07","tpage_name":"wasstada-sprite"}],[98500609,{"idx":1,"name":"wang_mip","tpage_name":"hanga-hfrag"}],[105054320,{"idx":112,"name":"vehicle-chrome-pipe-01","tpage_name":"desoasis-pris"}],[134938640,{"idx":16,"name":"rub-ground-01-small","tpage_name":"rubbleb-vis-shrub"}],[92274708,{"idx":20,"name":"intcept-b-base-green01","tpage_name":"desrace2-pris"}],[91029528,{"idx":24,"name":"kg-targ-bit-04","tpage_name":"gungame-sprite"}],[38731968,{"idx":192,"name":"male1_06","tpage_name":"wasstada-sprite"}],[98500608,{"idx":0,"name":"wang_black","tpage_name":"hanga-hfrag"}],[105054317,{"idx":109,"name":"vehicle-body-panel-01","tpage_name":"desoasis-pris"}],[134938637,{"idx":13,"name":"rub-wall-small-grill","tpage_name":"rubbleb-vis-shrub"}],[92274705,{"idx":17,"name":"vehicle-wheel-blur-01","tpage_name":"desrace2-pris"}],[91029525,{"idx":21,"name":"kg-targ-bit-01","tpage_name":"gungame-sprite"}],[38731965,{"idx":189,"name":"male1_03","tpage_name":"wasstada-sprite"}],[97255425,{"idx":1,"name":"wstd-gate-pass-02","tpage_name":"arenacst-tfrag"}],[105054305,{"idx":97,"name":"marauder-skirt-01","tpage_name":"desoasis-pris"}],[112525385,{"idx":73,"name":"jakchires-precarmor-01","tpage_name":"desrescc-pris"}],[92274693,{"idx":5,"name":"intcept-teeth01","tpage_name":"desrace2-pris"}],[38731953,{"idx":177,"name":"femcher2_12","tpage_name":"wasstada-sprite"}],[105054304,{"idx":96,"name":"marauder-skin-nipple","tpage_name":"desoasis-pris"}],[112525384,{"idx":72,"name":"jakchires-pants","tpage_name":"desrescc-pris"}],[92274692,{"idx":4,"name":"intcept-pipe01","tpage_name":"desrace2-pris"}],[91029512,{"idx":8,"name":"gen-03","tpage_name":"gungame-sprite"}],[38731952,{"idx":176,"name":"femcher2_11","tpage_name":"wasstada-sprite"}],[73596992,{"idx":64,"name":"sewer-nut-rim","tpage_name":"sewi-vis-tfrag"}],[105054302,{"idx":94,"name":"marauder-shoe-bottom","tpage_name":"desoasis-pris"}],[112525382,{"idx":70,"name":"jakchires-leatherpouch","tpage_name":"desrescc-pris"}],[92274690,{"idx":2,"name":"intcept-base-patern02","tpage_name":"desrace2-pris"}],[91029510,{"idx":6,"name":"gen-01","tpage_name":"gungame-sprite"}],[38731950,{"idx":174,"name":"femcher2_09","tpage_name":"wasstada-sprite"}],[73596990,{"idx":62,"name":"sewer-metal-floor-02","tpage_name":"sewi-vis-tfrag"}],[92209181,{"idx":29,"name":"klever-skirtdark","tpage_name":"ldamklev-pris"}],[95944721,{"idx":17,"name":"torn-hair-01","tpage_name":"freehq-pris2"}],[100925441,{"idx":1,"name":"environment-oldmetal","tpage_name":"ljkdmpk-pris2"}],[91815943,{"idx":7,"name":"citwide-crimson-red","tpage_name":"ctyinda-vis-pris"}],[90570763,{"idx":11,"name":"des-wasmetal04","tpage_name":"desertd-vis-tfrag"}],[91815942,{"idx":6,"name":"citwide-crimson-light","tpage_name":"ctyinda-vis-pris"}],[74383422,{"idx":62,"name":"sewer-hall-light-01","tpage_name":"sewj-vis-tfrag"}],[90570762,{"idx":10,"name":"des-wasmetal25","tpage_name":"desertd-vis-tfrag"}],[91357208,{"idx":24,"name":"klever-horn","tpage_name":"lkleever-pris"}],[91357207,{"idx":23,"name":"klever-hand","tpage_name":"lkleever-pris"}],[71434327,{"idx":87,"name":"wstd-fight-plat-hole","tpage_name":"wasstadc-tfrag"}],[91357206,{"idx":22,"name":"klever-gunmetal-05","tpage_name":"lkleever-pris"}],[71434326,{"idx":86,"name":"wstd-fight-plat-lrg-floor-03","tpage_name":"wasstadc-tfrag"}],[91357205,{"idx":21,"name":"klever-gunmetal-04","tpage_name":"lkleever-pris"}],[71434325,{"idx":85,"name":"wstd-fight-plat-lrg-floor-04","tpage_name":"wasstadc-tfrag"}],[91357203,{"idx":19,"name":"klever-gunmetal-02","tpage_name":"lkleever-pris"}],[91357197,{"idx":13,"name":"klever-handwrap","tpage_name":"lkleever-pris"}],[71434317,{"idx":77,"name":"wstd-fight-plat-wall-02","tpage_name":"wasstadc-tfrag"}],[91357192,{"idx":8,"name":"klever-mustache","tpage_name":"lkleever-pris"}],[71434312,{"idx":72,"name":"wstd-fight-plat-girder","tpage_name":"wasstadc-tfrag"}],[91357189,{"idx":5,"name":"klever-face-01","tpage_name":"lkleever-pris"}],[87621649,{"idx":17,"name":"eco-lt-cryst-02","tpage_name":"lnstobb-pris"}],[71434309,{"idx":69,"name":"wstd-fight-plat-door","tpage_name":"wasstadc-tfrag"}],[91357186,{"idx":2,"name":"klever-earcup","tpage_name":"lkleever-pris"}],[87621646,{"idx":14,"name":"nst-egg-spider-metal","tpage_name":"lnstobb-pris"}],[71434306,{"idx":66,"name":"wstd-fight-plat-box-side","tpage_name":"wasstadc-tfrag"}],[91357185,{"idx":1,"name":"bam-hairhilite","tpage_name":"lkleever-pris"}],[87621645,{"idx":13,"name":"nst-egg-spider-eye","tpage_name":"lnstobb-pris"}],[71434305,{"idx":65,"name":"wstd-fight-plat-box-top","tpage_name":"wasstadc-tfrag"}],[91357184,{"idx":0,"name":"bam-eyelight","tpage_name":"lkleever-pris"}],[87621644,{"idx":12,"name":"nst-egg-spider-egg","tpage_name":"lnstobb-pris"}],[71434304,{"idx":64,"name":"artifact-dec-02","tpage_name":"wasstadc-tfrag"}],[91291695,{"idx":47,"name":"gun-gunrack-02","tpage_name":"gungame-vis-tfrag"}],[91291694,{"idx":46,"name":"gun-gunrack-01","tpage_name":"gungame-vis-tfrag"}],[91291693,{"idx":45,"name":"gun-guncase-top-01","tpage_name":"gungame-vis-tfrag"}],[91291691,{"idx":43,"name":"gun-guncase-round-02","tpage_name":"gungame-vis-tfrag"}],[91291688,{"idx":40,"name":"gun-guncase-rim-01","tpage_name":"gungame-vis-tfrag"}],[95027228,{"idx":28,"name":"sig-skirts-03","tpage_name":"lsigjakc-pris2"}],[91291687,{"idx":39,"name":"gun-guncase-door-01","tpage_name":"gungame-vis-tfrag"}],[95027227,{"idx":27,"name":"sig-skirts-02","tpage_name":"lsigjakc-pris2"}],[91291678,{"idx":30,"name":"gun-building-window-01","tpage_name":"gungame-vis-tfrag"}],[95027218,{"idx":18,"name":"sig-horn","tpage_name":"lsigjakc-pris2"}],[91291665,{"idx":17,"name":"gun-building-chimney","tpage_name":"gungame-vis-tfrag"}],[95027205,{"idx":5,"name":"sig-eyelid","tpage_name":"lsigjakc-pris2"}],[73859145,{"idx":73,"name":"sewer-lip-01-hitweak","tpage_name":"sewg-vis-tfrag"}],[91291660,{"idx":12,"name":"gun-bigpipe-siding","tpage_name":"gungame-vis-tfrag"}],[95027200,{"idx":0,"name":"bam-eyelight","tpage_name":"lsigjakc-pris2"}],[73859140,{"idx":68,"name":"sewer-metal-floor-02","tpage_name":"sewg-vis-tfrag"}],[91291659,{"idx":11,"name":"gun-bigpipe-ring-side","tpage_name":"gungame-vis-tfrag"}],[73859139,{"idx":67,"name":"sewer-metal-floor-01","tpage_name":"sewg-vis-tfrag"}],[91291658,{"idx":10,"name":"gun-barrel-alt","tpage_name":"gungame-vis-tfrag"}],[73859138,{"idx":66,"name":"sewer-track-01","tpage_name":"sewg-vis-tfrag"}],[91291655,{"idx":7,"name":"common-black","tpage_name":"gungame-vis-tfrag"}],[73859135,{"idx":63,"name":"sewer-big-brace-trim-02","tpage_name":"sewg-vis-tfrag"}],[91291654,{"idx":6,"name":"citywide-metal-wall","tpage_name":"gungame-vis-tfrag"}],[73859134,{"idx":62,"name":"sewer-big-brace-trim-01","tpage_name":"sewg-vis-tfrag"}],[91291652,{"idx":4,"name":"city-port-door01","tpage_name":"gungame-vis-tfrag"}],[73859132,{"idx":60,"name":"sewer-plate-06","tpage_name":"sewg-vis-tfrag"}],[91291651,{"idx":3,"name":"city-port-barge-plain-metal","tpage_name":"gungame-vis-tfrag"}],[76349491,{"idx":51,"name":"torn-vest","tpage_name":"ltornsam-pris2"}],[73859131,{"idx":59,"name":"sewer-concrete-block-02","tpage_name":"sewg-vis-tfrag"}],[91291650,{"idx":2,"name":"city-port-barge-deck","tpage_name":"gungame-vis-tfrag"}],[76349490,{"idx":50,"name":"torn-teeth-01","tpage_name":"ltornsam-pris2"}],[73859130,{"idx":58,"name":"sewer-stone-arch-02","tpage_name":"sewg-vis-tfrag"}],[91291649,{"idx":1,"name":"city-metal-doorframe2","tpage_name":"gungame-vis-tfrag"}],[90046469,{"idx":5,"name":"des-rock-shrub-01","tpage_name":"desertg-vis-shrub"}],[76349489,{"idx":49,"name":"torn-shoe-02","tpage_name":"ltornsam-pris2"}],[91291648,{"idx":0,"name":"city-bluelight","tpage_name":"gungame-vis-tfrag"}],[90046468,{"idx":4,"name":"des-sand-grass-01","tpage_name":"desertg-vis-shrub"}],[76349488,{"idx":48,"name":"torn-shoe","tpage_name":"ltornsam-pris2"}],[73859128,{"idx":56,"name":"sewer-brick-block-06","tpage_name":"sewg-vis-tfrag"}],[91226114,{"idx":2,"name":"gun-bulletholes-03","tpage_name":"gungame-vis-shrub"}],[89980934,{"idx":6,"name":"des-corral-plate-02","tpage_name":"desertg-vis-tfrag"}],[91226113,{"idx":1,"name":"gun-bulletholes-02","tpage_name":"gungame-vis-shrub"}],[89980933,{"idx":5,"name":"des-corral-metal-04","tpage_name":"desertg-vis-tfrag"}],[91226112,{"idx":0,"name":"gun-bulletholes-01","tpage_name":"gungame-vis-shrub"}],[89980932,{"idx":4,"name":"des-corral-metal-02","tpage_name":"desertg-vis-tfrag"}],[71303232,{"idx":64,"name":"king-skirt-b","tpage_name":"ldamsig-pris2"}],[113442816,{"idx":0,"name":"sat-shield","tpage_name":"desresc-warp"}],[112197636,{"idx":4,"name":"intcept-pipe01","tpage_name":"desinter-pris"}],[38732016,{"idx":240,"name":"male3_12","tpage_name":"wasstada-sprite"}],[100991016,{"idx":40,"name":"klever-eyelid","tpage_name":"ljakklev-pris"}],[91160679,{"idx":103,"name":"jakchires-precarmor-01","tpage_name":"gungame-vis-pris"}],[112328739,{"idx":35,"name":"jakchires-brwnleather","tpage_name":"wascast-pris"}],[122290179,{"idx":3,"name":"fac-tower-door-04","tpage_name":"factoryb-vis-pris"}],[91160677,{"idx":101,"name":"jakchires-lightbrownspat","tpage_name":"gungame-vis-pris"}],[112328737,{"idx":33,"name":"jakchires-blackstrap","tpage_name":"wascast-pris"}],[122290177,{"idx":1,"name":"fac-tower-08","tpage_name":"factoryb-vis-pris"}],[91160589,{"idx":13,"name":"daxterheadwidenew","tpage_name":"gungame-vis-pris"}],[35127489,{"idx":193,"name":"errocyber-eye","tpage_name":"factorya-pris"}],[73728069,{"idx":69,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewh-vis-tfrag"}],[91160588,{"idx":12,"name":"daxtergoggles","tpage_name":"gungame-vis-pris"}],[35127488,{"idx":192,"name":"errolcyber-teeth","tpage_name":"factorya-pris"}],[73728068,{"idx":68,"name":"sewer-grill-02","tpage_name":"sewh-vis-tfrag"}],[91160587,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"gungame-vis-pris"}],[35127487,{"idx":191,"name":"errolcyber-spine","tpage_name":"factorya-pris"}],[73728067,{"idx":67,"name":"strip-black","tpage_name":"sewh-vis-tfrag"}],[91160586,{"idx":10,"name":"daxterfoot","tpage_name":"gungame-vis-pris"}],[73728066,{"idx":66,"name":"sewer-metal-floor-02-slime","tpage_name":"sewh-vis-tfrag"}],[35127486,{"idx":190,"name":"errolcyber-rubberpipe-light","tpage_name":"factorya-pris"}],[91160585,{"idx":9,"name":"daxterfinger","tpage_name":"gungame-vis-pris"}],[89915405,{"idx":13,"name":"des-mount-bottom-01","tpage_name":"deserta-vis-tfrag"}],[73728065,{"idx":65,"name":"sewer-metal-floor-allslime","tpage_name":"sewh-vis-tfrag"}],[35127485,{"idx":189,"name":"errolcyber-rubberpipe","tpage_name":"factorya-pris"}],[91160584,{"idx":8,"name":"daxterear","tpage_name":"gungame-vis-pris"}],[89915404,{"idx":12,"name":"des-cliff-top-04","tpage_name":"deserta-vis-tfrag"}],[73728064,{"idx":64,"name":"sewer-nut-rim","tpage_name":"sewh-vis-tfrag"}],[35127484,{"idx":188,"name":"errolcyber-redmetal-03","tpage_name":"factorya-pris"}],[91160583,{"idx":7,"name":"daxterbolt","tpage_name":"gungame-vis-pris"}],[89915403,{"idx":11,"name":"des-cliff-top-02","tpage_name":"deserta-vis-tfrag"}],[73728063,{"idx":63,"name":"sewer-nut","tpage_name":"sewh-vis-tfrag"}],[35127483,{"idx":187,"name":"errolcyber-redmetal-02","tpage_name":"factorya-pris"}],[91160582,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"gungame-vis-pris"}],[89915402,{"idx":10,"name":"des-cliff-top-03","tpage_name":"deserta-vis-tfrag"}],[73728062,{"idx":62,"name":"sewer-grate-01","tpage_name":"sewh-vis-tfrag"}],[35127482,{"idx":186,"name":"errolcyber-redmetal-01","tpage_name":"factorya-pris"}],[91160581,{"idx":5,"name":"daxterarm","tpage_name":"gungame-vis-pris"}],[89915401,{"idx":9,"name":"des-mount-02","tpage_name":"deserta-vis-tfrag"}],[73728061,{"idx":61,"name":"sewer-metal-floor-01","tpage_name":"sewh-vis-tfrag"}],[35127481,{"idx":185,"name":"errolcyber-pipes-03","tpage_name":"factorya-pris"}],[91160580,{"idx":4,"name":"daxter-orange","tpage_name":"gungame-vis-pris"}],[89915400,{"idx":8,"name":"des-cliff-01","tpage_name":"deserta-vis-tfrag"}],[73728060,{"idx":60,"name":"sewer-hall-light-01","tpage_name":"sewh-vis-tfrag"}],[35127480,{"idx":184,"name":"errolcyber-pipes-02","tpage_name":"factorya-pris"}],[91160579,{"idx":3,"name":"daxter-furhilite","tpage_name":"gungame-vis-pris"}],[89915399,{"idx":7,"name":"des-cliff-top-01","tpage_name":"deserta-vis-tfrag"}],[73728059,{"idx":59,"name":"sewer-pipe-rim-05","tpage_name":"sewh-vis-tfrag"}],[35127479,{"idx":183,"name":"errolcyber-pipes-01","tpage_name":"factorya-pris"}],[91160578,{"idx":2,"name":"daxter-eyelid","tpage_name":"gungame-vis-pris"}],[89915398,{"idx":6,"name":"des-cliff-trans-01","tpage_name":"deserta-vis-tfrag"}],[73728058,{"idx":58,"name":"sewer-plate-03","tpage_name":"sewh-vis-tfrag"}],[35127478,{"idx":182,"name":"errolcyber-metalgold","tpage_name":"factorya-pris"}],[91160577,{"idx":1,"name":"bam-hairhilite","tpage_name":"gungame-vis-pris"}],[89915397,{"idx":5,"name":"des-mount-01","tpage_name":"deserta-vis-tfrag"}],[73728057,{"idx":57,"name":"sewer-plate-02","tpage_name":"sewh-vis-tfrag"}],[35127477,{"idx":181,"name":"errolcyber-jointpipe","tpage_name":"factorya-pris"}],[91160576,{"idx":0,"name":"bam-eyelight","tpage_name":"gungame-vis-pris"}],[89915396,{"idx":4,"name":"des-rock-01","tpage_name":"deserta-vis-tfrag"}],[73728056,{"idx":56,"name":"sewer-metal-03","tpage_name":"sewh-vis-tfrag"}],[35127476,{"idx":180,"name":"errolcyber-insidewires","tpage_name":"factorya-pris"}],[91029524,{"idx":20,"name":"gun-cita-bit-04","tpage_name":"gungame-sprite"}],[38731964,{"idx":188,"name":"male1_02","tpage_name":"wasstada-sprite"}],[97255424,{"idx":0,"name":"wstd-gate-pass-03","tpage_name":"arenacst-tfrag"}],[92274704,{"idx":16,"name":"vehicle-wheel-01","tpage_name":"desrace2-pris"}],[91029522,{"idx":18,"name":"gun-cita-bit-02","tpage_name":"gungame-sprite"}],[38731962,{"idx":186,"name":"male1_00","tpage_name":"wasstada-sprite"}],[73597002,{"idx":74,"name":"strip-black","tpage_name":"sewi-vis-tfrag"}],[92274702,{"idx":14,"name":"vehicle-toad-exhaust-01","tpage_name":"desrace2-pris"}],[91029521,{"idx":17,"name":"gun-cita-bit-01","tpage_name":"gungame-sprite"}],[38731961,{"idx":185,"name":"femcher2_20","tpage_name":"wasstada-sprite"}],[73597001,{"idx":73,"name":"sewer-lip-01-hitweak","tpage_name":"sewi-vis-tfrag"}],[92274701,{"idx":13,"name":"vehicle-metal-plate-01","tpage_name":"desrace2-pris"}],[91029511,{"idx":7,"name":"gen-02","tpage_name":"gungame-sprite"}],[38731951,{"idx":175,"name":"femcher2_10","tpage_name":"wasstada-sprite"}],[73596991,{"idx":63,"name":"sewer-nut","tpage_name":"sewi-vis-tfrag"}],[92274691,{"idx":3,"name":"intcept-gun01","tpage_name":"desrace2-pris"}],[90767372,{"idx":12,"name":"des-palmtree-trunk-02","tpage_name":"deserth-vis-tfrag"}],[74580032,{"idx":64,"name":"sewer-small-light-01","tpage_name":"sewm-vis-tfrag"}],[90767371,{"idx":11,"name":"des-rock-01","tpage_name":"deserth-vis-tfrag"}],[74580031,{"idx":63,"name":"sewer-pool-rim-02","tpage_name":"sewm-vis-tfrag"}],[90767370,{"idx":10,"name":"des-cliff-top-04","tpage_name":"deserth-vis-tfrag"}],[74580030,{"idx":62,"name":"sewer-metal-edge-01","tpage_name":"sewm-vis-tfrag"}],[90767369,{"idx":9,"name":"des-cliff-01","tpage_name":"deserth-vis-tfrag"}],[90767368,{"idx":8,"name":"des-cliff-top-02","tpage_name":"deserth-vis-tfrag"}],[74580028,{"idx":60,"name":"sewer-metal-floor-01","tpage_name":"sewm-vis-tfrag"}],[90767367,{"idx":7,"name":"des-mount-bottom-01","tpage_name":"deserth-vis-tfrag"}],[74580027,{"idx":59,"name":"sewer-pipe-rim-10","tpage_name":"sewm-vis-tfrag"}],[90767365,{"idx":5,"name":"des-mount-02","tpage_name":"deserth-vis-tfrag"}],[90767364,{"idx":4,"name":"des-mount-01","tpage_name":"deserth-vis-tfrag"}],[74580024,{"idx":56,"name":"sewer-rebar","tpage_name":"sewm-vis-tfrag"}],[90767360,{"idx":0,"name":"des-beach-01","tpage_name":"deserth-vis-tfrag"}],[74580020,{"idx":52,"name":"sewer-hall-light-01","tpage_name":"sewm-vis-tfrag"}],[109182999,{"idx":23,"name":"map-desert-race","tpage_name":"destrack-minimap"}],[94240839,{"idx":71,"name":"palcab-lowres-background-mount-build-03","tpage_name":"intpfall-vis-tfrag"}],[109182996,{"idx":20,"name":"stadiumb-hud-ord-th","tpage_name":"destrack-minimap"}],[94240836,{"idx":68,"name":"city-bigpipe-main-02","tpage_name":"intpfall-vis-tfrag"}],[109182995,{"idx":19,"name":"stadiumb-hud-ord-st","tpage_name":"destrack-minimap"}],[94240835,{"idx":67,"name":"city-bigpipe-ring-02","tpage_name":"intpfall-vis-tfrag"}],[109182993,{"idx":17,"name":"stadiumb-hud-ord-o","tpage_name":"destrack-minimap"}],[94240833,{"idx":65,"name":"t-palshaft-plate01","tpage_name":"intpfall-vis-tfrag"}],[109182992,{"idx":16,"name":"stadiumb-hud-ord-nd","tpage_name":"destrack-minimap"}],[94240832,{"idx":64,"name":"t-citypal-met-strp01","tpage_name":"intpfall-vis-tfrag"}],[109182991,{"idx":15,"name":"stadiumb-hud-ord-korean","tpage_name":"destrack-minimap"}],[94240831,{"idx":63,"name":"t-citywide-met-wall-02","tpage_name":"intpfall-vis-tfrag"}],[109182989,{"idx":13,"name":"stadiumb-hud-ord-e","tpage_name":"destrack-minimap"}],[94240829,{"idx":61,"name":"t-palshaft-dirt-blue-01","tpage_name":"intpfall-vis-tfrag"}],[109182988,{"idx":12,"name":"stadiumb-hud-nmbr-08","tpage_name":"destrack-minimap"}],[94240828,{"idx":60,"name":"t-palshaft-pil-01","tpage_name":"intpfall-vis-tfrag"}],[109182987,{"idx":11,"name":"stadiumb-hud-nmbr-07","tpage_name":"destrack-minimap"}],[94240827,{"idx":59,"name":"t-palshaft-panl-01","tpage_name":"intpfall-vis-tfrag"}],[109182985,{"idx":9,"name":"stadiumb-hud-nmbr-05","tpage_name":"destrack-minimap"}],[94240825,{"idx":57,"name":"t-citywide-met-strp01","tpage_name":"intpfall-vis-tfrag"}],[109182983,{"idx":7,"name":"stadiumb-hud-nmbr-03","tpage_name":"destrack-minimap"}],[94240823,{"idx":55,"name":"citywide-consite-orange","tpage_name":"intpfall-vis-tfrag"}],[109182982,{"idx":6,"name":"stadiumb-hud-nmbr-02","tpage_name":"destrack-minimap"}],[94240822,{"idx":54,"name":"citywide-consite-wall","tpage_name":"intpfall-vis-tfrag"}],[109182981,{"idx":5,"name":"stadiumb-hud-nmbr-01","tpage_name":"destrack-minimap"}],[94240821,{"idx":53,"name":"citywide-consite-steel","tpage_name":"intpfall-vis-tfrag"}],[109182980,{"idx":4,"name":"stadiumb-hud-lap-03","tpage_name":"destrack-minimap"}],[94240820,{"idx":52,"name":"city-lowres-ctygen-build-05","tpage_name":"intpfall-vis-tfrag"}],[109182979,{"idx":3,"name":"stadiumb-hud-lap-02","tpage_name":"destrack-minimap"}],[94240819,{"idx":51,"name":"city-lowres-ctygen-build-04","tpage_name":"intpfall-vis-tfrag"}],[109182978,{"idx":2,"name":"stadiumb-hud-lap-01","tpage_name":"destrack-minimap"}],[94240818,{"idx":50,"name":"city-lowres-ctygen-build-03","tpage_name":"intpfall-vis-tfrag"}],[90701851,{"idx":27,"name":"des-ruins-bottom-02","tpage_name":"desertf-vis-tfrag"}],[81985591,{"idx":55,"name":"wstlander-04-skirt","tpage_name":"wasstadc-pris"}],[96927751,{"idx":7,"name":"torn-blademetal","tpage_name":"ltornjnx-pris2"}],[75759691,{"idx":75,"name":"pecker-tail","tpage_name":"onintent-pris"}],[90701850,{"idx":26,"name":"des-wasmetal07","tpage_name":"desertf-vis-tfrag"}],[81985590,{"idx":54,"name":"wstlander-04-shirt-strap","tpage_name":"wasstadc-pris"}],[96927750,{"idx":6,"name":"torn-belt2","tpage_name":"ltornjnx-pris2"}],[75759690,{"idx":74,"name":"pecker-plume","tpage_name":"onintent-pris"}],[90701848,{"idx":24,"name":"des-corral-plate-02","tpage_name":"desertf-vis-tfrag"}],[81985588,{"idx":52,"name":"wstlander-04-headband","tpage_name":"wasstadc-pris"}],[96927748,{"idx":4,"name":"torn-armor","tpage_name":"ltornjnx-pris2"}],[75759688,{"idx":72,"name":"pecker-eyelid","tpage_name":"onintent-pris"}],[90701835,{"idx":11,"name":"des-corral-metal-01","tpage_name":"desertf-vis-tfrag"}],[81985575,{"idx":39,"name":"wstlander-02-belt","tpage_name":"wasstadc-pris"}],[75759675,{"idx":59,"name":"onin-handpalm","tpage_name":"onintent-pris"}],[90701833,{"idx":9,"name":"des-pole-brace","tpage_name":"desertf-vis-tfrag"}],[81985573,{"idx":37,"name":"wstlander-02-arm","tpage_name":"wasstadc-pris"}],[75759673,{"idx":57,"name":"onin-hair","tpage_name":"onintent-pris"}],[90701831,{"idx":7,"name":"des-cliff-01","tpage_name":"desertf-vis-tfrag"}],[81985571,{"idx":35,"name":"marauder-sword-edge","tpage_name":"wasstadc-pris"}],[75759671,{"idx":55,"name":"onin-face","tpage_name":"onintent-pris"}],[90701830,{"idx":6,"name":"des-mount-bottom-01","tpage_name":"desertf-vis-tfrag"}],[81985570,{"idx":34,"name":"marauder-spike","tpage_name":"wasstadc-pris"}],[57081970,{"idx":114,"name":"yellowcard01","tpage_name":"waspala-pris"}],[75759670,{"idx":54,"name":"onin-eyelid","tpage_name":"onintent-pris"}],[90701828,{"idx":4,"name":"des-temple-brick-01","tpage_name":"desertf-vis-tfrag"}],[57081968,{"idx":112,"name":"flatgerydark01","tpage_name":"waspala-pris"}],[81985568,{"idx":32,"name":"marauder-skirt-01","tpage_name":"wasstadc-pris"}],[75759668,{"idx":52,"name":"onin-chain","tpage_name":"onintent-pris"}],[90701826,{"idx":2,"name":"des-mount-02","tpage_name":"desertf-vis-tfrag"}],[81985566,{"idx":30,"name":"marauder-skin","tpage_name":"wasstadc-pris"}],[75759666,{"idx":50,"name":"onin-braclet","tpage_name":"onintent-pris"}],[90701825,{"idx":1,"name":"des-mount-01","tpage_name":"desertf-vis-tfrag"}],[81985565,{"idx":29,"name":"marauder-shoe-bottom","tpage_name":"wasstadc-pris"}],[75759665,{"idx":49,"name":"onin-bowlhead","tpage_name":"onintent-pris"}],[90701824,{"idx":0,"name":"des-beach-01","tpage_name":"desertf-vis-tfrag"}],[81985564,{"idx":28,"name":"marauder-metal-plate","tpage_name":"wasstadc-pris"}],[75759664,{"idx":48,"name":"onin-arm","tpage_name":"onintent-pris"}],[90636296,{"idx":8,"name":"des-rock-shrub-01","tpage_name":"desertd-vis-shrub"}],[90636295,{"idx":7,"name":"des-sand-grass-01","tpage_name":"desertd-vis-shrub"}],[90636293,{"idx":5,"name":"des-shrub-cattail","tpage_name":"desertd-vis-shrub"}],[90636289,{"idx":1,"name":"des-shrub-pebbles","tpage_name":"desertd-vis-shrub"}],[107151378,{"idx":18,"name":"grunt-metal-01","tpage_name":"volcanoa-vis-pris"}],[103350368,{"idx":96,"name":"rail-light-red","tpage_name":"comba-pris"}],[127008788,{"idx":20,"name":"warpgate-circuitpattern2","tpage_name":"volcanox-tfrag"}],[90570756,{"idx":4,"name":"des-wasmetal06","tpage_name":"desertd-vis-tfrag"}],[74383416,{"idx":56,"name":"sewer-round-01","tpage_name":"sewj-vis-tfrag"}],[91815936,{"idx":0,"name":"airlock-door-bolt","tpage_name":"ctyinda-vis-pris"}],[107151377,{"idx":17,"name":"grunt-hose","tpage_name":"volcanoa-vis-pris"}],[90570755,{"idx":3,"name":"des-wasmetal01","tpage_name":"desertd-vis-tfrag"}],[74383415,{"idx":55,"name":"sewer-metal-trim-02","tpage_name":"sewj-vis-tfrag"}],[107151376,{"idx":16,"name":"grunt-eye-01","tpage_name":"volcanoa-vis-pris"}],[90570754,{"idx":2,"name":"des-bark-crooked-01","tpage_name":"desertd-vis-tfrag"}],[74383414,{"idx":54,"name":"sewer-lip-01","tpage_name":"sewj-vis-tfrag"}],[90505218,{"idx":2,"name":"des-waterfall-dest","tpage_name":"desertd-vis-water"}],[88014858,{"idx":10,"name":"sig2-glovetop","tpage_name":"lwassig-pris"}],[60620898,{"idx":98,"name":"jakc-chestplate-straps","tpage_name":"minea-vis-pris"}],[90505216,{"idx":0,"name":"des-waterfall","tpage_name":"desertd-vis-water"}],[88014856,{"idx":8,"name":"sig2-gem-01","tpage_name":"lwassig-pris"}],[60620896,{"idx":96,"name":"mine-slate-metal-01","tpage_name":"minea-vis-pris"}],[90439686,{"idx":6,"name":"des-branch-01","tpage_name":"deserte-vis-tfrag"}],[86704146,{"idx":18,"name":"king-leg","tpage_name":"ldamklev-pris2"}],[90308621,{"idx":13,"name":"kgtrns-wing01","tpage_name":"desertb-vis-shrub"}],[81592361,{"idx":41,"name":"jakb-lightbrownstrap","tpage_name":"arenacst-pris"}],[90308620,{"idx":12,"name":"kgtrns-side01","tpage_name":"desertb-vis-shrub"}],[81592360,{"idx":40,"name":"jakb-lightbrownspat","tpage_name":"arenacst-pris"}],[90308619,{"idx":11,"name":"des-rock-shrub-01","tpage_name":"desertb-vis-shrub"}],[81592359,{"idx":39,"name":"jakb-leatherstrap","tpage_name":"arenacst-pris"}],[90308618,{"idx":10,"name":"des-sand-grass-01","tpage_name":"desertb-vis-shrub"}],[81592358,{"idx":38,"name":"jakb-leatherpouch","tpage_name":"arenacst-pris"}],[90308616,{"idx":8,"name":"wascity-overlay-bullethole-c","tpage_name":"desertb-vis-shrub"}],[81592356,{"idx":36,"name":"jakb-jacketbody","tpage_name":"arenacst-pris"}],[90308615,{"idx":7,"name":"wascity-overlay-bullethole-b","tpage_name":"desertb-vis-shrub"}],[81592355,{"idx":35,"name":"jakb-horn","tpage_name":"arenacst-pris"}],[90243123,{"idx":51,"name":"des-palm-root","tpage_name":"desertb-vis-tfrag"}],[105185283,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"desoasis-pris2"}],[90243122,{"idx":50,"name":"des-palm-top","tpage_name":"desertb-vis-tfrag"}],[105185282,{"idx":2,"name":"ashelin-boottop","tpage_name":"desoasis-pris2"}],[90243120,{"idx":48,"name":"des-cliff-top-04","tpage_name":"desertb-vis-tfrag"}],[105185280,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"desoasis-pris2"}],[90243119,{"idx":47,"name":"des-cliff-top-03","tpage_name":"desertb-vis-tfrag"}],[90243099,{"idx":27,"name":"wascitya-airlock-door","tpage_name":"desertb-vis-tfrag"}],[90243096,{"idx":24,"name":"wascity-ground-01","tpage_name":"desertb-vis-tfrag"}],[90243091,{"idx":19,"name":"wascity-metal-door-01","tpage_name":"desertb-vis-tfrag"}],[86507551,{"idx":31,"name":"widow-bomb-glow","tpage_name":"lbombbot-pris"}],[81526831,{"idx":47,"name":"kg-fl-tret-post01","tpage_name":"ctypesc-pris"}],[90243085,{"idx":13,"name":"wascity-greenmetal-tube","tpage_name":"desertb-vis-tfrag"}],[86507545,{"idx":25,"name":"citwide-crimson-gold","tpage_name":"lbombbot-pris"}],[81526825,{"idx":41,"name":"kg-fl-tret-motor","tpage_name":"ctypesc-pris"}],[90243084,{"idx":12,"name":"wascity-outerwall-metal-b","tpage_name":"desertb-vis-tfrag"}],[86507544,{"idx":24,"name":"roboguard-headshield","tpage_name":"lbombbot-pris"}],[81526824,{"idx":40,"name":"kg-fl-tret-guntrack","tpage_name":"ctypesc-pris"}],[90243083,{"idx":11,"name":"wascity-outerwall-metal-c","tpage_name":"desertb-vis-tfrag"}],[86507543,{"idx":23,"name":"kg-grunt-rim-03","tpage_name":"lbombbot-pris"}],[81526823,{"idx":39,"name":"kg-fl-tret-black-plate","tpage_name":"ctypesc-pris"}],[90243082,{"idx":10,"name":"des-palmplant-leaf-02","tpage_name":"desertb-vis-tfrag"}],[86507542,{"idx":22,"name":"kg-grunt-cable-01","tpage_name":"lbombbot-pris"}],[81526822,{"idx":38,"name":"kg-fl-tret-backend","tpage_name":"ctypesc-pris"}],[90243081,{"idx":9,"name":"des-palmtree-beard","tpage_name":"desertb-vis-tfrag"}],[86507541,{"idx":21,"name":"cguard1-guntube","tpage_name":"lbombbot-pris"}],[74055741,{"idx":61,"name":"sew-jump-pad-grate-hitweak","tpage_name":"sewi-vis-pris"}],[90243078,{"idx":6,"name":"des-plainrope","tpage_name":"desertb-vis-tfrag"}],[90243077,{"idx":5,"name":"des-rope-01","tpage_name":"desertb-vis-tfrag"}],[86507537,{"idx":17,"name":"bombot-wheel","tpage_name":"lbombbot-pris"}],[90177594,{"idx":58,"name":"des-egg-pipe","tpage_name":"desertg-vis-pris"}],[76480614,{"idx":102,"name":"jakchires-shoemetal","tpage_name":"freehq-pris"}],[106364934,{"idx":6,"name":"veger-bootbolt","tpage_name":"mined-pris2"}],[90046467,{"idx":3,"name":"des-stain-wall-01","tpage_name":"desertg-vis-shrub"}],[76349487,{"idx":47,"name":"torn-scarf","tpage_name":"ltornsam-pris2"}],[73859127,{"idx":55,"name":"sewer-brick-block-01","tpage_name":"sewg-vis-tfrag"}],[90046464,{"idx":0,"name":"des-shrub-pebbles","tpage_name":"desertg-vis-shrub"}],[76349484,{"idx":44,"name":"torn-metal2","tpage_name":"ltornsam-pris2"}],[73859124,{"idx":52,"name":"sewer-pipe-02-edge-01","tpage_name":"sewg-vis-tfrag"}],[89980973,{"idx":45,"name":"des-ruins-wall-01","tpage_name":"desertg-vis-tfrag"}],[94961693,{"idx":29,"name":"jakchires-precarmor-01","tpage_name":"lsigjakc-pris"}],[89980938,{"idx":10,"name":"des-corral-metal-03","tpage_name":"desertg-vis-tfrag"}],[89915395,{"idx":3,"name":"des-pinetree-bark","tpage_name":"deserta-vis-tfrag"}],[73728055,{"idx":55,"name":"sewer-pipe-rim-09","tpage_name":"sewh-vis-tfrag"}],[35127475,{"idx":179,"name":"errolcyber-insidemouth","tpage_name":"factorya-pris"}],[89849879,{"idx":23,"name":"des-mount-bottom-01","tpage_name":"desertc-vis-tfrag"}],[74907719,{"idx":71,"name":"sewer-grate-01","tpage_name":"sewl-vis-tfrag"}],[96075779,{"idx":3,"name":"jakc-armor","tpage_name":"ljakc-pris"}],[89849878,{"idx":22,"name":"des-cliff-top-03","tpage_name":"desertc-vis-tfrag"}],[74907718,{"idx":70,"name":"sewer-block-02","tpage_name":"sewl-vis-tfrag"}],[96075778,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljakc-pris"}],[106430499,{"idx":35,"name":"klever-gunmetal-05","tpage_name":"desliz-pris"}],[89849877,{"idx":21,"name":"des-cliff-top-04","tpage_name":"desertc-vis-tfrag"}],[74907717,{"idx":69,"name":"sewer-big-brace-02","tpage_name":"sewl-vis-tfrag"}],[96075777,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljakc-pris"}],[106430498,{"idx":34,"name":"klever-gunmetal-04","tpage_name":"desliz-pris"}],[89849876,{"idx":20,"name":"des-cliff-top-02","tpage_name":"desertc-vis-tfrag"}],[74907716,{"idx":68,"name":"sewer-big-brace-01","tpage_name":"sewl-vis-tfrag"}],[96075776,{"idx":0,"name":"bam-eyelight","tpage_name":"ljakc-pris"}],[106430497,{"idx":33,"name":"klever-gunmetal-03","tpage_name":"desliz-pris"}],[89849875,{"idx":19,"name":"des-mount-02","tpage_name":"desertc-vis-tfrag"}],[74907715,{"idx":67,"name":"sewer-brick-roof-04","tpage_name":"sewl-vis-tfrag"}],[106430496,{"idx":32,"name":"klever-gunmetal-02","tpage_name":"desliz-pris"}],[89849874,{"idx":18,"name":"des-cliff-01","tpage_name":"desertc-vis-tfrag"}],[74907714,{"idx":66,"name":"sewer-brick-roof-02","tpage_name":"sewl-vis-tfrag"}],[106430495,{"idx":31,"name":"klever-gunmetal-01","tpage_name":"desliz-pris"}],[89849873,{"idx":17,"name":"des-cliff-top-01","tpage_name":"desertc-vis-tfrag"}],[74907713,{"idx":65,"name":"sewer-plate-03","tpage_name":"sewl-vis-tfrag"}],[106430494,{"idx":30,"name":"klever-fingertop","tpage_name":"desliz-pris"}],[89849872,{"idx":16,"name":"des-cliff-trans-01","tpage_name":"desertc-vis-tfrag"}],[74907712,{"idx":64,"name":"sewer-plate-02","tpage_name":"sewl-vis-tfrag"}],[106430493,{"idx":29,"name":"klever-fingerbottom","tpage_name":"desliz-pris"}],[89849871,{"idx":15,"name":"des-mount-01","tpage_name":"desertc-vis-tfrag"}],[74907711,{"idx":63,"name":"sewer-plate-01","tpage_name":"sewl-vis-tfrag"}],[106430492,{"idx":28,"name":"klever-face-01scars","tpage_name":"desliz-pris"}],[89849870,{"idx":14,"name":"des-rock-01","tpage_name":"desertc-vis-tfrag"}],[74907710,{"idx":62,"name":"sewer-hall-light-01","tpage_name":"sewl-vis-tfrag"}],[89849869,{"idx":13,"name":"des-pinetree-bark","tpage_name":"desertc-vis-tfrag"}],[74907709,{"idx":61,"name":"sewer-big-brace-trim-02","tpage_name":"sewl-vis-tfrag"}],[89849868,{"idx":12,"name":"des-wasmetal07","tpage_name":"desertc-vis-tfrag"}],[74907708,{"idx":60,"name":"sewer-big-brace-trim-01","tpage_name":"sewl-vis-tfrag"}],[89849867,{"idx":11,"name":"des-wasmetal04","tpage_name":"desertc-vis-tfrag"}],[74907707,{"idx":59,"name":"sewer-plate-03-hitweak","tpage_name":"sewl-vis-tfrag"}],[89849866,{"idx":10,"name":"des-wasmetal25","tpage_name":"desertc-vis-tfrag"}],[74907706,{"idx":58,"name":"sewer-round-02","tpage_name":"sewl-vis-tfrag"}],[89849865,{"idx":9,"name":"des-wasmetal02","tpage_name":"desertc-vis-tfrag"}],[74907705,{"idx":57,"name":"sewer-round-03","tpage_name":"sewl-vis-tfrag"}],[89849864,{"idx":8,"name":"des-plate-05","tpage_name":"desertc-vis-tfrag"}],[92340224,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desrace2-water"}],[74907704,{"idx":56,"name":"sewer-round-01","tpage_name":"sewl-vis-tfrag"}],[89849863,{"idx":7,"name":"des-wasmetal19","tpage_name":"desertc-vis-tfrag"}],[74907703,{"idx":55,"name":"sewer-metal-trim-02","tpage_name":"sewl-vis-tfrag"}],[89849862,{"idx":6,"name":"des-wasmetal12","tpage_name":"desertc-vis-tfrag"}],[74907702,{"idx":54,"name":"sewer-lip-01","tpage_name":"sewl-vis-tfrag"}],[89849861,{"idx":5,"name":"des-wasmetal22","tpage_name":"desertc-vis-tfrag"}],[74907701,{"idx":53,"name":"sewer-brick-roof-03","tpage_name":"sewl-vis-tfrag"}],[89849860,{"idx":4,"name":"des-wasmetal06","tpage_name":"desertc-vis-tfrag"}],[89849859,{"idx":3,"name":"des-wasmetal01","tpage_name":"desertc-vis-tfrag"}],[89849857,{"idx":1,"name":"des-beach-01","tpage_name":"desertc-vis-tfrag"}],[74907697,{"idx":49,"name":"sewer-brick-block-10","tpage_name":"sewl-vis-tfrag"}],[106168386,{"idx":66,"name":"sewer-pipe-rim-08","tpage_name":"mined-tfrag"}],[112394286,{"idx":46,"name":"intcept-b-gun01","tpage_name":"desrescg-pris"}],[118620186,{"idx":26,"name":"jakchires-horn","tpage_name":"ljkcdmkl-pris"}],[121110546,{"idx":18,"name":"hip-tred-check01","tpage_name":"hiphog-vis-tfrag"}],[89587764,{"idx":52,"name":"jakchires-brwnleather","tpage_name":"lwstdpck-pris"}],[102039564,{"idx":12,"name":"tess-glove","tpage_name":"gungame-vis-pris2"}],[106168385,{"idx":65,"name":"sewer-small-light-01","tpage_name":"mined-tfrag"}],[112394285,{"idx":45,"name":"intcept-b-base-patern02","tpage_name":"desrescg-pris"}],[118620185,{"idx":25,"name":"jakchires-hair","tpage_name":"ljkcdmkl-pris"}],[121110545,{"idx":17,"name":"hip-tmetbooth01","tpage_name":"hiphog-vis-tfrag"}],[89587763,{"idx":51,"name":"jakchires-brownstrap","tpage_name":"lwstdpck-pris"}],[102039563,{"idx":11,"name":"tess-finger","tpage_name":"gungame-vis-pris2"}],[89587762,{"idx":50,"name":"jakchires-blackstrap","tpage_name":"lwstdpck-pris"}],[102039562,{"idx":10,"name":"tess-face","tpage_name":"gungame-vis-pris2"}],[106168383,{"idx":63,"name":"mined_redbrake","tpage_name":"mined-tfrag"}],[112394283,{"idx":43,"name":"intcept-b-base-green01","tpage_name":"desrescg-pris"}],[118620183,{"idx":23,"name":"jakchires-facert","tpage_name":"ljkcdmkl-pris"}],[121110543,{"idx":15,"name":"hip-tbluecup","tpage_name":"hiphog-vis-tfrag"}],[89587761,{"idx":49,"name":"jakchires-arm","tpage_name":"lwstdpck-pris"}],[102039561,{"idx":9,"name":"tess-eyelid","tpage_name":"gungame-vis-pris2"}],[89587758,{"idx":46,"name":"jakc-waistband2","tpage_name":"lwstdpck-pris"}],[102039558,{"idx":6,"name":"tess-chest","tpage_name":"gungame-vis-pris2"}],[89587757,{"idx":45,"name":"jakc-skirt","tpage_name":"lwstdpck-pris"}],[102039557,{"idx":5,"name":"tess-buckle","tpage_name":"gungame-vis-pris2"}],[89587756,{"idx":44,"name":"jakc-scarfhanging","tpage_name":"lwstdpck-pris"}],[102039556,{"idx":4,"name":"tess-belt2","tpage_name":"gungame-vis-pris2"}],[89587755,{"idx":43,"name":"jakc-scarf","tpage_name":"lwstdpck-pris"}],[102039555,{"idx":3,"name":"tess-belt","tpage_name":"gungame-vis-pris2"}],[89587754,{"idx":42,"name":"jakc-lens","tpage_name":"lwstdpck-pris"}],[102039554,{"idx":2,"name":"tess-belly","tpage_name":"gungame-vis-pris2"}],[89587753,{"idx":41,"name":"jakc-gogglemetal","tpage_name":"lwstdpck-pris"}],[102039553,{"idx":1,"name":"bam-hairhilite","tpage_name":"gungame-vis-pris2"}],[89587752,{"idx":40,"name":"jakc-chestplate-straps","tpage_name":"lwstdpck-pris"}],[102039552,{"idx":0,"name":"bam-eyelight","tpage_name":"gungame-vis-pris2"}],[89587751,{"idx":39,"name":"jakc-armor","tpage_name":"lwstdpck-pris"}],[89587721,{"idx":9,"name":"pecker-yellowfur","tpage_name":"lwstdpck-pris"}],[75890741,{"idx":53,"name":"onin-tank-glass","tpage_name":"onintent-tfrag"}],[104267831,{"idx":55,"name":"lt-eco-vent-side-01","tpage_name":"stadium-vis-tfrag"}],[79364231,{"idx":135,"name":"monk-femaleskirt-top","tpage_name":"wasseem-pris"}],[89587714,{"idx":2,"name":"pecker-eyelid","tpage_name":"lwstdpck-pris"}],[75890734,{"idx":46,"name":"onin-skull-pattern","tpage_name":"onintent-tfrag"}],[104267830,{"idx":54,"name":"lt-eco-vent-blue-01","tpage_name":"stadium-vis-tfrag"}],[79364230,{"idx":134,"name":"monk-femaleskirt-bottom","tpage_name":"wasseem-pris"}],[120455170,{"idx":2,"name":"ruins-endblocks","tpage_name":"forestx-vis-tfrag"}],[89587713,{"idx":1,"name":"pecker-body-01","tpage_name":"lwstdpck-pris"}],[75890733,{"idx":45,"name":"onin-skull-bottom","tpage_name":"onintent-tfrag"}],[104267829,{"idx":53,"name":"stdm-grass","tpage_name":"stadium-vis-tfrag"}],[79364229,{"idx":133,"name":"monk-femaleleg-01","tpage_name":"wasseem-pris"}],[89587712,{"idx":0,"name":"bam-eyelight","tpage_name":"lwstdpck-pris"}],[75890732,{"idx":44,"name":"onin-skull","tpage_name":"onintent-tfrag"}],[88997888,{"idx":0,"name":"racegate","tpage_name":"lforring-sprite"}],[86507528,{"idx":8,"name":"bombot-insidegun","tpage_name":"lbombbot-pris"}],[81526808,{"idx":24,"name":"spydroid-gold","tpage_name":"ctypesc-pris"}],[74055728,{"idx":48,"name":"sewer-pipe-rim-07","tpage_name":"sewi-vis-pris"}],[88014875,{"idx":27,"name":"sig2-undergarments","tpage_name":"lwassig-pris"}],[60620915,{"idx":115,"name":"jakchires-facert","tpage_name":"minea-vis-pris"}],[94240775,{"idx":7,"name":"palcab-lowres-ctyslum-ground","tpage_name":"intpfall-vis-tfrag"}],[88014874,{"idx":26,"name":"sig2-skirts-03","tpage_name":"lwassig-pris"}],[60620914,{"idx":114,"name":"jakchires-facelft","tpage_name":"minea-vis-pris"}],[94240774,{"idx":6,"name":"palcab-lowres-ctywide-wall-02","tpage_name":"intpfall-vis-tfrag"}],[106496000,{"idx":0,"name":"wstlander-01-glovetop","tpage_name":"desresc-water"}],[88014873,{"idx":25,"name":"sig2-skirts","tpage_name":"lwassig-pris"}],[60620913,{"idx":113,"name":"jakchires-eyelid","tpage_name":"minea-vis-pris"}],[94240773,{"idx":5,"name":"palcab-lowres-background-rocksnow","tpage_name":"intpfall-vis-tfrag"}],[88014872,{"idx":24,"name":"sig2-shoulderarmor","tpage_name":"lwassig-pris"}],[60620912,{"idx":112,"name":"jakchires-eyebrow","tpage_name":"minea-vis-pris"}],[94240772,{"idx":4,"name":"palcab-lowres-background-rocksnow2","tpage_name":"intpfall-vis-tfrag"}],[88014870,{"idx":22,"name":"sig2-shoebottom","tpage_name":"lwassig-pris"}],[60620910,{"idx":110,"name":"jakchires-clips","tpage_name":"minea-vis-pris"}],[94240770,{"idx":2,"name":"palcab-lowres-ctywide-wall-01","tpage_name":"intpfall-vis-tfrag"}],[88014869,{"idx":21,"name":"sig2-sac","tpage_name":"lwassig-pris"}],[60620909,{"idx":109,"name":"jakchires-chestplate","tpage_name":"minea-vis-pris"}],[94240769,{"idx":1,"name":"strip-metal-02-lores","tpage_name":"intpfall-vis-tfrag"}],[88014868,{"idx":20,"name":"sig2-metal-dirty","tpage_name":"lwassig-pris"}],[60620908,{"idx":108,"name":"jakchires-brwnleather","tpage_name":"minea-vis-pris"}],[94240768,{"idx":0,"name":"palcab-lowres-background-hills-01","tpage_name":"intpfall-vis-tfrag"}],[88014865,{"idx":17,"name":"sig2-horn","tpage_name":"lwassig-pris"}],[60620905,{"idx":105,"name":"jakchires-arm","tpage_name":"minea-vis-pris"}],[88014864,{"idx":16,"name":"sig2-headgear","tpage_name":"lwassig-pris"}],[60620904,{"idx":104,"name":"jakc-wristband-a2","tpage_name":"minea-vis-pris"}],[88014862,{"idx":14,"name":"sig2-gun-04","tpage_name":"lwassig-pris"}],[60620902,{"idx":102,"name":"jakc-waistband2","tpage_name":"minea-vis-pris"}],[88014861,{"idx":13,"name":"sig2-gun-03","tpage_name":"lwassig-pris"}],[60620901,{"idx":101,"name":"jakc-scarf","tpage_name":"minea-vis-pris"}],[88014860,{"idx":12,"name":"sig2-gun-02","tpage_name":"lwassig-pris"}],[60620900,{"idx":100,"name":"jakc-lens","tpage_name":"minea-vis-pris"}],[88014859,{"idx":11,"name":"sig2-gun-01","tpage_name":"lwassig-pris"}],[60620899,{"idx":99,"name":"jakc-gogglemetal","tpage_name":"minea-vis-pris"}],[88014857,{"idx":9,"name":"sig2-glove","tpage_name":"lwassig-pris"}],[60620897,{"idx":97,"name":"jakc-armor","tpage_name":"minea-vis-pris"}],[88014848,{"idx":0,"name":"bam-eyelight","tpage_name":"lwassig-pris"}],[60620888,{"idx":88,"name":"mine-red-stripe-metal-01","tpage_name":"minea-vis-pris"}],[87621651,{"idx":19,"name":"eco-lt-cryst-03","tpage_name":"lnstobb-pris"}],[91357191,{"idx":7,"name":"klever-hair","tpage_name":"lkleever-pris"}],[87621647,{"idx":15,"name":"nst-egg-spider-pipe","tpage_name":"lnstobb-pris"}],[91357187,{"idx":3,"name":"klever-eye","tpage_name":"lkleever-pris"}],[71434307,{"idx":67,"name":"wstd-fight-plat-box-end","tpage_name":"wasstadc-tfrag"}],[87621643,{"idx":11,"name":"nst-egg-spider-body","tpage_name":"lnstobb-pris"}],[71434303,{"idx":63,"name":"artifact-plain-02","tpage_name":"wasstadc-tfrag"}],[87621642,{"idx":10,"name":"mhcent-skin-03","tpage_name":"lnstobb-pris"}],[71434302,{"idx":62,"name":"artifact-plain-01","tpage_name":"wasstadc-tfrag"}],[87621641,{"idx":9,"name":"mhcent-skin-02","tpage_name":"lnstobb-pris"}],[71434301,{"idx":61,"name":"artifact-blue-glow-01","tpage_name":"wasstadc-tfrag"}],[87621640,{"idx":8,"name":"mhcent-mouth-02","tpage_name":"lnstobb-pris"}],[71434300,{"idx":60,"name":"artifact-dec-01","tpage_name":"wasstadc-tfrag"}],[87621639,{"idx":7,"name":"mhcent-mouth-01","tpage_name":"lnstobb-pris"}],[87621638,{"idx":6,"name":"mhcent-metal-02","tpage_name":"lnstobb-pris"}],[71434298,{"idx":58,"name":"wstd-scaffold-teeth","tpage_name":"wasstadc-tfrag"}],[87621637,{"idx":5,"name":"mhcent-metal-01","tpage_name":"lnstobb-pris"}],[71434297,{"idx":57,"name":"wstd-platform-wall","tpage_name":"wasstadc-tfrag"}],[87621636,{"idx":4,"name":"mhcent-eye","tpage_name":"lnstobb-pris"}],[88866816,{"idx":0,"name":"hud-kanga-lizard","tpage_name":"waschase-minimap"}],[71434296,{"idx":56,"name":"wstd-platform-floor","tpage_name":"wasstadc-tfrag"}],[86769664,{"idx":0,"name":"JakIII","tpage_name":"title-minimap"}],[60620884,{"idx":84,"name":"mine-gray-metal-01","tpage_name":"minea-vis-pris"}],[86704162,{"idx":34,"name":"king-skirt-b","tpage_name":"ldamklev-pris2"}],[74252362,{"idx":74,"name":"blue-gem","tpage_name":"sewg-vis-pris"}],[81723442,{"idx":50,"name":"klever-face-01","tpage_name":"ljndklev-pris"}],[86704161,{"idx":33,"name":"king-wristband","tpage_name":"ldamklev-pris2"}],[81723441,{"idx":49,"name":"klever-eyelid","tpage_name":"ljndklev-pris"}],[86704160,{"idx":32,"name":"king-wraps","tpage_name":"ldamklev-pris2"}],[81723440,{"idx":48,"name":"klever-eye","tpage_name":"ljndklev-pris"}],[86704159,{"idx":31,"name":"king-wrap","tpage_name":"ldamklev-pris2"}],[74252359,{"idx":71,"name":"sewer-plate-03","tpage_name":"sewg-vis-pris"}],[90439699,{"idx":19,"name":"des-mount-bottom-01","tpage_name":"deserte-vis-tfrag"}],[81723439,{"idx":47,"name":"klever-earcup","tpage_name":"ljndklev-pris"}],[86704158,{"idx":30,"name":"king-vestback","tpage_name":"ldamklev-pris2"}],[74252358,{"idx":70,"name":"sewer-pipe-rim-05b","tpage_name":"sewg-vis-pris"}],[90439698,{"idx":18,"name":"des-palm-leaf-01","tpage_name":"deserte-vis-tfrag"}],[86704157,{"idx":29,"name":"king-vest","tpage_name":"ldamklev-pris2"}],[74252357,{"idx":69,"name":"sewer-pipe-rim-05","tpage_name":"sewg-vis-pris"}],[90439697,{"idx":17,"name":"des-palmtree-trunk-02","tpage_name":"deserte-vis-tfrag"}],[86704156,{"idx":28,"name":"king-thinstrap","tpage_name":"ldamklev-pris2"}],[74252356,{"idx":68,"name":"sewer-nut","tpage_name":"sewg-vis-pris"}],[86704155,{"idx":27,"name":"king-teeth","tpage_name":"ldamklev-pris2"}],[74252355,{"idx":67,"name":"sew-metal-floor-01","tpage_name":"sewg-vis-pris"}],[105185281,{"idx":1,"name":"ashelin-bolts","tpage_name":"desoasis-pris2"}],[86704154,{"idx":26,"name":"king-skirt","tpage_name":"ldamklev-pris2"}],[74252354,{"idx":66,"name":"sew-laserbeam-tip","tpage_name":"sewg-vis-pris"}],[90439694,{"idx":14,"name":"des-cliff-top-01","tpage_name":"deserte-vis-tfrag"}],[86704153,{"idx":25,"name":"king-shoebottom","tpage_name":"ldamklev-pris2"}],[74252353,{"idx":65,"name":"sew-gun-rim-03","tpage_name":"sewg-vis-pris"}],[86704147,{"idx":19,"name":"king-lgblackstrap","tpage_name":"ldamklev-pris2"}],[86704145,{"idx":17,"name":"king-iris","tpage_name":"ldamklev-pris2"}],[90439685,{"idx":5,"name":"des-palmplant-leaf-02","tpage_name":"deserte-vis-tfrag"}],[86704144,{"idx":16,"name":"king-horn","tpage_name":"ldamklev-pris2"}],[90439684,{"idx":4,"name":"des-palmtree-beard","tpage_name":"deserte-vis-tfrag"}],[91684864,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desrace1-water"}],[86704143,{"idx":15,"name":"king-hand","tpage_name":"ldamklev-pris2"}],[90439683,{"idx":3,"name":"des-palm-root","tpage_name":"deserte-vis-tfrag"}],[86704142,{"idx":14,"name":"king-hair","tpage_name":"ldamklev-pris2"}],[90439682,{"idx":2,"name":"des-palm-top","tpage_name":"deserte-vis-tfrag"}],[86704141,{"idx":13,"name":"king-greenmetalplain","tpage_name":"ldamklev-pris2"}],[74252341,{"idx":53,"name":"sewer-plate-04","tpage_name":"sewg-vis-pris"}],[86704140,{"idx":12,"name":"king-greenmetal","tpage_name":"ldamklev-pris2"}],[74252340,{"idx":52,"name":"sew-saw-part2","tpage_name":"sewg-vis-pris"}],[86704139,{"idx":11,"name":"king-finger","tpage_name":"ldamklev-pris2"}],[74252339,{"idx":51,"name":"sew-saw-lens","tpage_name":"sewg-vis-pris"}],[86704138,{"idx":10,"name":"king-face-01","tpage_name":"ldamklev-pris2"}],[74252338,{"idx":50,"name":"sew-laserturret-pole","tpage_name":"sewg-vis-pris"}],[86704137,{"idx":9,"name":"king-earing","tpage_name":"ldamklev-pris2"}],[74252337,{"idx":49,"name":"sew-gun-rim-04","tpage_name":"sewg-vis-pris"}],[86704136,{"idx":8,"name":"king-ear","tpage_name":"ldamklev-pris2"}],[74252336,{"idx":48,"name":"sew-fan-canopy","tpage_name":"sewg-vis-pris"}],[86704135,{"idx":7,"name":"king-clip-02","tpage_name":"ldamklev-pris2"}],[74252335,{"idx":47,"name":"sew-fan-basetop","tpage_name":"sewg-vis-pris"}],[86704132,{"idx":4,"name":"king-bluemetal","tpage_name":"ldamklev-pris2"}],[74252332,{"idx":44,"name":"roboguard-die-stamped-metal-red","tpage_name":"sewg-vis-pris"}],[86704131,{"idx":3,"name":"king-blackskirt2","tpage_name":"ldamklev-pris2"}],[81723411,{"idx":19,"name":"environment-oldmetal","tpage_name":"ljndklev-pris"}],[74252331,{"idx":43,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewg-vis-pris"}],[86704130,{"idx":2,"name":"king-arm","tpage_name":"ldamklev-pris2"}],[81723410,{"idx":18,"name":"daxtertuft","tpage_name":"ljndklev-pris"}],[74252330,{"idx":42,"name":"environment-oldmetal","tpage_name":"sewg-vis-pris"}],[86704129,{"idx":1,"name":"environment-oldmetal","tpage_name":"ldamklev-pris2"}],[81723409,{"idx":17,"name":"daxterteeth","tpage_name":"ljndklev-pris"}],[86704128,{"idx":0,"name":"bam-eyelight","tpage_name":"ldamklev-pris2"}],[81723408,{"idx":16,"name":"daxternose","tpage_name":"ljndklev-pris"}],[74252328,{"idx":40,"name":"cguard1-lens","tpage_name":"sewg-vis-pris"}],[86638675,{"idx":83,"name":"intcept-tread01","tpage_name":"wasdoors-vis-pris"}],[111542275,{"idx":3,"name":"des-burn-eye-off","tpage_name":"desert-vis-shrub"}],[86638674,{"idx":82,"name":"intcept-pipe01","tpage_name":"wasdoors-vis-pris"}],[86638673,{"idx":81,"name":"jakchires-teeth","tpage_name":"wasdoors-vis-pris"}],[86638672,{"idx":80,"name":"jakchires-shoeteop","tpage_name":"wasdoors-vis-pris"}],[101580832,{"idx":32,"name":"wstlander-04-skirt","tpage_name":"lwlandm-pris"}],[86638671,{"idx":79,"name":"jakchires-shoemetal","tpage_name":"wasdoors-vis-pris"}],[101580831,{"idx":31,"name":"wstlander-04-shirt-strap","tpage_name":"lwlandm-pris"}],[107020295,{"idx":7,"name":"for-shrub-moss","tpage_name":"volcanoa-vis-shrub"}],[102039575,{"idx":23,"name":"tess-shoetop","tpage_name":"gungame-vis-pris2"}],[89587775,{"idx":63,"name":"jakchires-jacket","tpage_name":"lwstdpck-pris"}],[107020294,{"idx":6,"name":"vola-leaf-small-01","tpage_name":"volcanoa-vis-shrub"}],[102039574,{"idx":22,"name":"tess-shoebottom","tpage_name":"gungame-vis-pris2"}],[89587774,{"idx":62,"name":"jakchires-horn","tpage_name":"lwstdpck-pris"}],[107020293,{"idx":5,"name":"fora-shrub-pebbles","tpage_name":"volcanoa-vis-shrub"}],[102039573,{"idx":21,"name":"tess-shirtstraps","tpage_name":"gungame-vis-pris2"}],[89587773,{"idx":61,"name":"jakchires-hair","tpage_name":"lwstdpck-pris"}],[107020292,{"idx":4,"name":"vola-lava-rock-01","tpage_name":"volcanoa-vis-shrub"}],[102039572,{"idx":20,"name":"tess-shirt-128","tpage_name":"gungame-vis-pris2"}],[89587772,{"idx":60,"name":"jakchires-glovetop","tpage_name":"lwstdpck-pris"}],[107020291,{"idx":3,"name":"vola-grass-floor-01","tpage_name":"volcanoa-vis-shrub"}],[102039571,{"idx":19,"name":"tess-scarf","tpage_name":"gungame-vis-pris2"}],[89587771,{"idx":59,"name":"jakchires-facert","tpage_name":"lwstdpck-pris"}],[107020288,{"idx":0,"name":"vol-shrub-grass","tpage_name":"volcanoa-vis-shrub"}],[102039568,{"idx":16,"name":"tess-jeansback","tpage_name":"gungame-vis-pris2"}],[89587768,{"idx":56,"name":"jakchires-eyebrow","tpage_name":"lwstdpck-pris"}],[99418223,{"idx":111,"name":"grunt-metal-01","tpage_name":"volcanox-pris"}],[129302543,{"idx":15,"name":"sewer-metal-floor-02","tpage_name":"sewn-vis-pris"}],[86638611,{"idx":19,"name":"environment-oldmetal","tpage_name":"wasdoors-vis-pris"}],[81657891,{"idx":35,"name":"sig-belt","tpage_name":"arenacst-pris2"}],[74186811,{"idx":59,"name":"wire-metal","tpage_name":"sewh-vis-pris"}],[99418222,{"idx":110,"name":"grunt-hose","tpage_name":"volcanox-pris"}],[129302542,{"idx":14,"name":"sewer-metal-block-04","tpage_name":"sewn-vis-pris"}],[86638610,{"idx":18,"name":"daxtertuft","tpage_name":"wasdoors-vis-pris"}],[74186810,{"idx":58,"name":"widow-pod-gun-metal","tpage_name":"sewh-vis-pris"}],[81657890,{"idx":34,"name":"charHOLD","tpage_name":"arenacst-pris2"}],[99418221,{"idx":109,"name":"grunt-gem-01","tpage_name":"volcanox-pris"}],[129302541,{"idx":13,"name":"sewer-metal-01","tpage_name":"sewn-vis-pris"}],[86638609,{"idx":17,"name":"daxterteeth","tpage_name":"wasdoors-vis-pris"}],[74186809,{"idx":57,"name":"squid-tubes","tpage_name":"sewh-vis-pris"}],[81657889,{"idx":33,"name":"king-wristband","tpage_name":"arenacst-pris2"}],[99418220,{"idx":108,"name":"grunt-eye-01","tpage_name":"volcanox-pris"}],[129302540,{"idx":12,"name":"sew-saw-part2","tpage_name":"sewn-vis-pris"}],[86638608,{"idx":16,"name":"daxternose","tpage_name":"wasdoors-vis-pris"}],[74186808,{"idx":56,"name":"squid-bulb-sm","tpage_name":"sewh-vis-pris"}],[81657888,{"idx":32,"name":"king-wraps","tpage_name":"arenacst-pris2"}],[99418219,{"idx":107,"name":"monk-mummy-uppertorso","tpage_name":"volcanox-pris"}],[129302539,{"idx":11,"name":"sew-saw-lens","tpage_name":"sewn-vis-pris"}],[86638607,{"idx":15,"name":"daxterlense","tpage_name":"wasdoors-vis-pris"}],[81657887,{"idx":31,"name":"king-wrap","tpage_name":"arenacst-pris2"}],[74186807,{"idx":55,"name":"roboguard-shouldershield","tpage_name":"sewh-vis-pris"}],[99418218,{"idx":106,"name":"monk-mummy-straps","tpage_name":"volcanox-pris"}],[129302538,{"idx":10,"name":"sew-laserturret-pole","tpage_name":"sewn-vis-pris"}],[86638606,{"idx":14,"name":"daxterhelmetplain","tpage_name":"wasdoors-vis-pris"}],[81657886,{"idx":30,"name":"king-vestback","tpage_name":"arenacst-pris2"}],[74186806,{"idx":54,"name":"roboguard-die-stamped-metal-red","tpage_name":"sewh-vis-pris"}],[99418217,{"idx":105,"name":"monk-mummy-skirt-01","tpage_name":"volcanox-pris"}],[129302537,{"idx":9,"name":"sew-gun-rim-04","tpage_name":"sewn-vis-pris"}],[86638605,{"idx":13,"name":"daxterheadwidenew","tpage_name":"wasdoors-vis-pris"}],[74186805,{"idx":53,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewh-vis-pris"}],[81657885,{"idx":29,"name":"king-vest","tpage_name":"arenacst-pris2"}],[90374145,{"idx":1,"name":"des-cave-floor-01","tpage_name":"desertb-vis-water"}],[99418216,{"idx":104,"name":"monk-mummy-shoebottom","tpage_name":"volcanox-pris"}],[129302536,{"idx":8,"name":"sew-gun-drum-01","tpage_name":"sewn-vis-pris"}],[86638604,{"idx":12,"name":"daxtergoggles","tpage_name":"wasdoors-vis-pris"}],[74186804,{"idx":52,"name":"cguardgame-shoebottom","tpage_name":"sewh-vis-pris"}],[81657884,{"idx":28,"name":"king-thinstrap","tpage_name":"arenacst-pris2"}],[90374144,{"idx":0,"name":"des-beach-01","tpage_name":"desertb-vis-water"}],[99418215,{"idx":103,"name":"monk-mummy-precplain","tpage_name":"volcanox-pris"}],[129302535,{"idx":7,"name":"sew-fan-canopy","tpage_name":"sewn-vis-pris"}],[86638603,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"wasdoors-vis-pris"}],[81657883,{"idx":27,"name":"king-teeth","tpage_name":"arenacst-pris2"}],[74186803,{"idx":51,"name":"cguardgame-metallight-01small","tpage_name":"sewh-vis-pris"}],[99418214,{"idx":102,"name":"monk-mummy-precedge","tpage_name":"volcanox-pris"}],[129302534,{"idx":6,"name":"sew-fan-basetop","tpage_name":"sewn-vis-pris"}],[86638602,{"idx":10,"name":"daxterfoot","tpage_name":"wasdoors-vis-pris"}],[81657882,{"idx":26,"name":"king-skirt","tpage_name":"arenacst-pris2"}],[74186802,{"idx":50,"name":"cguardgame-metaledark-02","tpage_name":"sewh-vis-pris"}],[99418213,{"idx":101,"name":"monk-mummy-precchest","tpage_name":"volcanox-pris"}],[129302533,{"idx":5,"name":"airlockl-door-metalframe","tpage_name":"sewn-vis-pris"}],[86638601,{"idx":9,"name":"daxterfinger","tpage_name":"wasdoors-vis-pris"}],[81657881,{"idx":25,"name":"king-shoebottom","tpage_name":"arenacst-pris2"}],[74186801,{"idx":49,"name":"cguardgame-backplate","tpage_name":"sewh-vis-pris"}],[99418212,{"idx":100,"name":"monk-mummy-headgearback","tpage_name":"volcanox-pris"}],[129302532,{"idx":4,"name":"airlock-door-metal2","tpage_name":"sewn-vis-pris"}],[86638600,{"idx":8,"name":"daxterear","tpage_name":"wasdoors-vis-pris"}],[81657880,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"arenacst-pris2"}],[74186800,{"idx":48,"name":"cguard1-lens","tpage_name":"sewh-vis-pris"}],[99418211,{"idx":99,"name":"monk-mummy-ear","tpage_name":"volcanox-pris"}],[129302531,{"idx":3,"name":"airlock-door-main","tpage_name":"sewn-vis-pris"}],[86638599,{"idx":7,"name":"daxterbolt","tpage_name":"wasdoors-vis-pris"}],[81657879,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"arenacst-pris2"}],[74186799,{"idx":47,"name":"cguard1-gunmetaldark2","tpage_name":"sewh-vis-pris"}],[99418210,{"idx":98,"name":"monk-mummy-boottoe","tpage_name":"volcanox-pris"}],[129302530,{"idx":2,"name":"airlock-door-cog1","tpage_name":"sewn-vis-pris"}],[86638598,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"wasdoors-vis-pris"}],[81657878,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"arenacst-pris2"}],[74186798,{"idx":46,"name":"cguard1-chestplate","tpage_name":"sewh-vis-pris"}],[99418209,{"idx":97,"name":"monk-mummy-boot","tpage_name":"volcanox-pris"}],[129302529,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewn-vis-pris"}],[86638597,{"idx":5,"name":"daxterarm","tpage_name":"wasdoors-vis-pris"}],[81657877,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"arenacst-pris2"}],[74186797,{"idx":45,"name":"brown-hose","tpage_name":"sewh-vis-pris"}],[99418208,{"idx":96,"name":"monk-mummy-arm","tpage_name":"volcanox-pris"}],[129302528,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewn-vis-pris"}],[86638596,{"idx":4,"name":"daxter-orange","tpage_name":"wasdoors-vis-pris"}],[81657876,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"arenacst-pris2"}],[74186796,{"idx":44,"name":"blue-gem","tpage_name":"sewh-vis-pris"}],[86638595,{"idx":3,"name":"daxter-furhilite","tpage_name":"wasdoors-vis-pris"}],[81657875,{"idx":19,"name":"king-lgblackstrap","tpage_name":"arenacst-pris2"}],[86638594,{"idx":2,"name":"daxter-eyelid","tpage_name":"wasdoors-vis-pris"}],[81657874,{"idx":18,"name":"king-leg","tpage_name":"arenacst-pris2"}],[74186794,{"idx":42,"name":"widow-dull-inards","tpage_name":"sewh-vis-pris"}],[86638593,{"idx":1,"name":"bam-hairhilite","tpage_name":"wasdoors-vis-pris"}],[81657873,{"idx":17,"name":"king-iris","tpage_name":"arenacst-pris2"}],[74186793,{"idx":41,"name":"roboguard-headshield","tpage_name":"sewh-vis-pris"}],[86638592,{"idx":0,"name":"bam-eyelight","tpage_name":"wasdoors-vis-pris"}],[81657872,{"idx":16,"name":"king-horn","tpage_name":"arenacst-pris2"}],[74186792,{"idx":40,"name":"kg-grunt-rim-03","tpage_name":"sewh-vis-pris"}],[86507552,{"idx":32,"name":"widow-bomb-thrust","tpage_name":"lbombbot-pris"}],[90243092,{"idx":20,"name":"wascity-metal-indent","tpage_name":"desertb-vis-tfrag"}],[81526832,{"idx":48,"name":"kg-grunt-cable-01","tpage_name":"ctypesc-pris"}],[86507550,{"idx":30,"name":"widow-bomb","tpage_name":"lbombbot-pris"}],[90243090,{"idx":18,"name":"common-black","tpage_name":"desertb-vis-tfrag"}],[81526830,{"idx":46,"name":"kg-fl-tret-jets01","tpage_name":"ctypesc-pris"}],[86507549,{"idx":29,"name":"citwide-crimson-wall-plain","tpage_name":"lbombbot-pris"}],[81526829,{"idx":45,"name":"kg-fl-tret-hood01","tpage_name":"ctypesc-pris"}],[90243089,{"idx":17,"name":"wascitya-airlock-metal","tpage_name":"desertb-vis-tfrag"}],[86507548,{"idx":28,"name":"citwide-crimson-tube","tpage_name":"lbombbot-pris"}],[81526828,{"idx":44,"name":"kg-fl-tret-dash01","tpage_name":"ctypesc-pris"}],[90243088,{"idx":16,"name":"wascity-base","tpage_name":"desertb-vis-tfrag"}],[86507547,{"idx":27,"name":"citwide-crimson-red","tpage_name":"lbombbot-pris"}],[81526827,{"idx":43,"name":"kg-fl-tret-backthing01","tpage_name":"ctypesc-pris"}],[90243087,{"idx":15,"name":"wascity-outerwall-metal-d","tpage_name":"desertb-vis-tfrag"}],[86507546,{"idx":26,"name":"citwide-crimson-light","tpage_name":"lbombbot-pris"}],[90243086,{"idx":14,"name":"wascity-metal-spike-01","tpage_name":"desertb-vis-tfrag"}],[81526826,{"idx":42,"name":"kg-fl-tret-red-plate","tpage_name":"ctypesc-pris"}],[86507540,{"idx":20,"name":"cguard1-backmetal","tpage_name":"lbombbot-pris"}],[86507539,{"idx":19,"name":"environment-oldmetal","tpage_name":"lbombbot-pris"}],[86507536,{"idx":16,"name":"bombot-turret01","tpage_name":"lbombbot-pris"}],[86507535,{"idx":15,"name":"bombot-roundend","tpage_name":"lbombbot-pris"}],[86507534,{"idx":14,"name":"bombot-rimgrey","tpage_name":"lbombbot-pris"}],[81526814,{"idx":30,"name":"spydroid-red","tpage_name":"ctypesc-pris"}],[86507533,{"idx":13,"name":"bombot-redplate-01","tpage_name":"lbombbot-pris"}],[81526813,{"idx":29,"name":"spydroid-light-small-red","tpage_name":"ctypesc-pris"}],[86507532,{"idx":12,"name":"bombot-rail01","tpage_name":"lbombbot-pris"}],[81526812,{"idx":28,"name":"spydroid-light-small","tpage_name":"ctypesc-pris"}],[86507531,{"idx":11,"name":"bombot-post01","tpage_name":"lbombbot-pris"}],[81526811,{"idx":27,"name":"spydroid-light","tpage_name":"ctypesc-pris"}],[86507530,{"idx":10,"name":"bombot-lens","tpage_name":"lbombbot-pris"}],[81526810,{"idx":26,"name":"spydroid-leg-grey-end","tpage_name":"ctypesc-pris"}],[86507529,{"idx":9,"name":"bombot-joint","tpage_name":"lbombbot-pris"}],[81526809,{"idx":25,"name":"spydroid-leg-grey","tpage_name":"ctypesc-pris"}],[74055729,{"idx":49,"name":"sewer-screw-02","tpage_name":"sewi-vis-pris"}],[86507527,{"idx":7,"name":"bombot-guntop","tpage_name":"lbombbot-pris"}],[81526807,{"idx":23,"name":"wire-metal","tpage_name":"ctypesc-pris"}],[74055727,{"idx":47,"name":"sewer-metal-floor-01","tpage_name":"sewi-vis-pris"}],[86507526,{"idx":6,"name":"bombot-guards","tpage_name":"lbombbot-pris"}],[81526806,{"idx":22,"name":"widow-pod-gun-metal","tpage_name":"ctypesc-pris"}],[74055726,{"idx":46,"name":"sewfence-02","tpage_name":"sewi-vis-pris"}],[86507525,{"idx":5,"name":"bombot-greybarrelside","tpage_name":"lbombbot-pris"}],[81526805,{"idx":21,"name":"widow-dull-inards","tpage_name":"ctypesc-pris"}],[74055725,{"idx":45,"name":"sewfence-01","tpage_name":"sewi-vis-pris"}],[86441988,{"idx":4,"name":"hud-vehicle-health-bar-01","tpage_name":"factoryb-minimap"}],[85196808,{"idx":8,"name":"intcept-pipe01","tpage_name":"desrace1-pris"}],[86441987,{"idx":3,"name":"hud-torpedo","tpage_name":"factoryb-minimap"}],[85196807,{"idx":7,"name":"intcept-gun01","tpage_name":"desrace1-pris"}],[86441986,{"idx":2,"name":"hud-fac-tower-01","tpage_name":"factoryb-minimap"}],[85196806,{"idx":6,"name":"intcept-base-patern02","tpage_name":"desrace1-pris"}],[86441985,{"idx":1,"name":"hud-fac-target-01","tpage_name":"factoryb-minimap"}],[85196805,{"idx":5,"name":"intcept-base-patern01","tpage_name":"desrace1-pris"}],[86441984,{"idx":0,"name":"map-factoryb","tpage_name":"factoryb-minimap"}],[85196804,{"idx":4,"name":"intcept-base-green01","tpage_name":"desrace1-pris"}],[85786624,{"idx":0,"name":"wstd-arena-token","tpage_name":"wasstadb-water"}],[74580004,{"idx":36,"name":"sewer-brick-roof-01","tpage_name":"sewm-vis-tfrag"}],[82182145,{"idx":1,"name":"map-wascity","tpage_name":"waswide-minimap"}],[73465885,{"idx":29,"name":"sewer-pipe-rim-01","tpage_name":"sewk-vis-tfrag"}],[48562285,{"idx":109,"name":"cguard1-guntube","tpage_name":"sewa-vis-pris"}],[57278545,{"idx":81,"name":"wstlander-04-headband","tpage_name":"waswide-vis-pris"}],[82116608,{"idx":0,"name":"map-desert","tpage_name":"desert-minimap"}],[75890708,{"idx":20,"name":"onin-crate-body","tpage_name":"onintent-tfrag"}],[60948548,{"idx":68,"name":"fora-stone-05","tpage_name":"minec-vis-tfrag"}],[82051072,{"idx":0,"name":"wstlander-01-glovetop","tpage_name":"wasstadc-water"}],[60883012,{"idx":68,"name":"mine-red-metal-01","tpage_name":"mineb-vis-pris"}],[74579992,{"idx":24,"name":"sewer-pipe-02","tpage_name":"sewm-vis-tfrag"}],[81985583,{"idx":47,"name":"wstlander-02-skirt","tpage_name":"wasstadc-pris"}],[75759683,{"idx":67,"name":"onin-shirt","tpage_name":"onintent-pris"}],[81985574,{"idx":38,"name":"wstlander-02-armor","tpage_name":"wasstadc-pris"}],[75759674,{"idx":58,"name":"onin-hand","tpage_name":"onintent-pris"}],[81985572,{"idx":36,"name":"marauder-sword-metal","tpage_name":"wasstadc-pris"}],[75759672,{"idx":56,"name":"onin-finger","tpage_name":"onintent-pris"}],[81985563,{"idx":27,"name":"marauder-leather-strap","tpage_name":"wasstadc-pris"}],[81985538,{"idx":2,"name":"wstlander-01-gunmetal-02","tpage_name":"wasstadc-pris"}],[74514458,{"idx":26,"name":"squid-tubes","tpage_name":"sewj-vis-pris"}],[81788928,{"idx":0,"name":"sig-flatfangs","tpage_name":"arenacst-water"}],[75563028,{"idx":20,"name":"sig-metal-01","tpage_name":"lsig-pris2"}],[81723407,{"idx":15,"name":"daxterlense","tpage_name":"ljndklev-pris"}],[81723406,{"idx":14,"name":"daxterhelmetplain","tpage_name":"ljndklev-pris"}],[74252326,{"idx":38,"name":"cguard1-guntube","tpage_name":"sewg-vis-pris"}],[81723405,{"idx":13,"name":"daxterheadwidenew","tpage_name":"ljndklev-pris"}],[74252325,{"idx":37,"name":"cguard1-gunmetaldark2","tpage_name":"sewg-vis-pris"}],[81723404,{"idx":12,"name":"daxtergoggles","tpage_name":"ljndklev-pris"}],[74252324,{"idx":36,"name":"cguard1-chestplate","tpage_name":"sewg-vis-pris"}],[81723403,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"ljndklev-pris"}],[74252323,{"idx":35,"name":"cguard1-backmetal","tpage_name":"sewg-vis-pris"}],[81723402,{"idx":10,"name":"daxterfoot","tpage_name":"ljndklev-pris"}],[81723401,{"idx":9,"name":"daxterfinger","tpage_name":"ljndklev-pris"}],[81723400,{"idx":8,"name":"daxterear","tpage_name":"ljndklev-pris"}],[81723399,{"idx":7,"name":"daxterbolt","tpage_name":"ljndklev-pris"}],[81723398,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"ljndklev-pris"}],[81723397,{"idx":5,"name":"daxterarm","tpage_name":"ljndklev-pris"}],[81723396,{"idx":4,"name":"daxter-orange","tpage_name":"ljndklev-pris"}],[81723395,{"idx":3,"name":"daxter-furhilite","tpage_name":"ljndklev-pris"}],[81723394,{"idx":2,"name":"daxter-eyelid","tpage_name":"ljndklev-pris"}],[81723393,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljndklev-pris"}],[81723392,{"idx":0,"name":"bam-eyelight","tpage_name":"ljndklev-pris"}],[102039576,{"idx":24,"name":"tess-sleeve","tpage_name":"gungame-vis-pris2"}],[89587776,{"idx":64,"name":"jakchires-leatherpouch","tpage_name":"lwstdpck-pris"}],[102039570,{"idx":18,"name":"tess-lowerboot","tpage_name":"gungame-vis-pris2"}],[89587770,{"idx":58,"name":"jakchires-facelft","tpage_name":"lwstdpck-pris"}],[102039569,{"idx":17,"name":"tess-jeanscuff","tpage_name":"gungame-vis-pris2"}],[89587769,{"idx":57,"name":"jakchires-eyelid","tpage_name":"lwstdpck-pris"}],[102039567,{"idx":15,"name":"tess-jeans","tpage_name":"gungame-vis-pris2"}],[89587767,{"idx":55,"name":"jakchires-eye","tpage_name":"lwstdpck-pris"}],[102039566,{"idx":14,"name":"tess-hairband","tpage_name":"gungame-vis-pris2"}],[89587766,{"idx":54,"name":"jakchires-clips","tpage_name":"lwstdpck-pris"}],[102039565,{"idx":13,"name":"tess-hair","tpage_name":"gungame-vis-pris2"}],[89587765,{"idx":53,"name":"jakchires-chestplate","tpage_name":"lwstdpck-pris"}],[102039560,{"idx":8,"name":"tess-eye","tpage_name":"gungame-vis-pris2"}],[89587760,{"idx":48,"name":"jakc-wristband-a2","tpage_name":"lwstdpck-pris"}],[102039559,{"idx":7,"name":"tess-emblem","tpage_name":"gungame-vis-pris2"}],[89587759,{"idx":47,"name":"jakc-wraps","tpage_name":"lwstdpck-pris"}],[81657919,{"idx":63,"name":"seem-arm","tpage_name":"arenacst-pris2"}],[81657906,{"idx":50,"name":"sig-horn","tpage_name":"arenacst-pris2"}],[81657904,{"idx":48,"name":"sig-gun-05","tpage_name":"arenacst-pris2"}],[81657892,{"idx":36,"name":"sig-eye","tpage_name":"arenacst-pris2"}],[74186812,{"idx":60,"name":"spydroid-gold","tpage_name":"sewh-vis-pris"}],[81657871,{"idx":15,"name":"king-hand","tpage_name":"arenacst-pris2"}],[74186791,{"idx":39,"name":"kg-grunt-cable-01","tpage_name":"sewh-vis-pris"}],[81657870,{"idx":14,"name":"king-hair","tpage_name":"arenacst-pris2"}],[74186790,{"idx":38,"name":"environment-oldmetal","tpage_name":"sewh-vis-pris"}],[81657869,{"idx":13,"name":"king-greenmetalplain","tpage_name":"arenacst-pris2"}],[74186789,{"idx":37,"name":"cguard1-guntube","tpage_name":"sewh-vis-pris"}],[81657868,{"idx":12,"name":"king-greenmetal","tpage_name":"arenacst-pris2"}],[74186788,{"idx":36,"name":"cguard1-backmetal","tpage_name":"sewh-vis-pris"}],[81657867,{"idx":11,"name":"king-finger","tpage_name":"arenacst-pris2"}],[81657866,{"idx":10,"name":"king-face-01","tpage_name":"arenacst-pris2"}],[74186786,{"idx":34,"name":"sewer-plate-04","tpage_name":"sewh-vis-pris"}],[81657865,{"idx":9,"name":"king-earing","tpage_name":"arenacst-pris2"}],[74186785,{"idx":33,"name":"sew-laserturret-top","tpage_name":"sewh-vis-pris"}],[81657864,{"idx":8,"name":"king-ear","tpage_name":"arenacst-pris2"}],[74186784,{"idx":32,"name":"sew-laserturret-center","tpage_name":"sewh-vis-pris"}],[81657863,{"idx":7,"name":"king-clip-02","tpage_name":"arenacst-pris2"}],[74186783,{"idx":31,"name":"sew-laserturret-2","tpage_name":"sewh-vis-pris"}],[81657862,{"idx":6,"name":"king-chest","tpage_name":"arenacst-pris2"}],[74186782,{"idx":30,"name":"sew-laserturret-1","tpage_name":"sewh-vis-pris"}],[81657861,{"idx":5,"name":"king-bolt","tpage_name":"arenacst-pris2"}],[74186781,{"idx":29,"name":"sew-gun-panel-06","tpage_name":"sewh-vis-pris"}],[81657860,{"idx":4,"name":"king-bluemetal","tpage_name":"arenacst-pris2"}],[81657859,{"idx":3,"name":"king-blackskirt2","tpage_name":"arenacst-pris2"}],[49283179,{"idx":107,"name":"squid-drabgun","tpage_name":"sewd-vis-pris"}],[81657858,{"idx":2,"name":"king-arm","tpage_name":"arenacst-pris2"}],[49283178,{"idx":106,"name":"kg-grunt-rim-03","tpage_name":"sewd-vis-pris"}],[81657857,{"idx":1,"name":"environment-oldmetal","tpage_name":"arenacst-pris2"}],[49283177,{"idx":105,"name":"kg-grunt-cable-01","tpage_name":"sewd-vis-pris"}],[81657856,{"idx":0,"name":"bam-eyelight","tpage_name":"arenacst-pris2"}],[49283176,{"idx":104,"name":"wire-metal","tpage_name":"sewd-vis-pris"}],[81592422,{"idx":102,"name":"jakchires-glovetop","tpage_name":"arenacst-pris"}],[81592415,{"idx":95,"name":"jakchires-chestplate","tpage_name":"arenacst-pris"}],[108986375,{"idx":7,"name":"metalflut-roll","tpage_name":"wasleapr-pris"}],[81592414,{"idx":94,"name":"jakchires-brwnleather","tpage_name":"arenacst-pris"}],[108986374,{"idx":6,"name":"metalflut-rings","tpage_name":"wasleapr-pris"}],[81592412,{"idx":92,"name":"jakchires-blackstrap","tpage_name":"arenacst-pris"}],[108986372,{"idx":4,"name":"metalflut-nail","tpage_name":"wasleapr-pris"}],[81592411,{"idx":91,"name":"jakchires-arm","tpage_name":"arenacst-pris"}],[108986371,{"idx":3,"name":"metalflut-leatherstrap-c","tpage_name":"wasleapr-pris"}],[81592410,{"idx":90,"name":"jakc-wristband-a2","tpage_name":"arenacst-pris"}],[108986370,{"idx":2,"name":"metalflut-leatherstrap-b-01","tpage_name":"wasleapr-pris"}],[81592409,{"idx":89,"name":"jakc-wraps","tpage_name":"arenacst-pris"}],[108986369,{"idx":1,"name":"metalflut-eye","tpage_name":"wasleapr-pris"}],[81592408,{"idx":88,"name":"jakc-waistband2","tpage_name":"arenacst-pris"}],[108986368,{"idx":0,"name":"environment-oldmetal","tpage_name":"wasleapr-pris"}],[81592407,{"idx":87,"name":"jakc-scarf","tpage_name":"arenacst-pris"}],[81592406,{"idx":86,"name":"jakc-lens","tpage_name":"arenacst-pris"}],[81592405,{"idx":85,"name":"jakc-gogglemetal","tpage_name":"arenacst-pris"}],[81592404,{"idx":84,"name":"jakc-chestplate-straps","tpage_name":"arenacst-pris"}],[81592403,{"idx":83,"name":"jakc-armor","tpage_name":"arenacst-pris"}],[81592383,{"idx":63,"name":"prebot-envmap","tpage_name":"arenacst-pris"}],[81592382,{"idx":62,"name":"bat-amulet-03","tpage_name":"arenacst-pris"}],[81592381,{"idx":61,"name":"bat-amulet-02","tpage_name":"arenacst-pris"}],[81592380,{"idx":60,"name":"bat-amulet-01","tpage_name":"arenacst-pris"}],[81592379,{"idx":59,"name":"gun-tip","tpage_name":"arenacst-pris"}],[99024899,{"idx":3,"name":"glider-ring-dest2","tpage_name":"hanga-sprite"}],[81592378,{"idx":58,"name":"gun-main","tpage_name":"arenacst-pris"}],[99024898,{"idx":2,"name":"glider-ring-dest","tpage_name":"hanga-sprite"}],[81592377,{"idx":57,"name":"gun-laser","tpage_name":"arenacst-pris"}],[81592376,{"idx":56,"name":"gun-barrel-alt","tpage_name":"arenacst-pris"}],[99024896,{"idx":0,"name":"racegate","tpage_name":"hanga-sprite"}],[81592375,{"idx":55,"name":"pecker-yellowfur","tpage_name":"arenacst-pris"}],[81592374,{"idx":54,"name":"pecker-wingtop","tpage_name":"arenacst-pris"}],[81592373,{"idx":53,"name":"pecker-wingbottom","tpage_name":"arenacst-pris"}],[81592372,{"idx":52,"name":"pecker-teeth","tpage_name":"arenacst-pris"}],[81592371,{"idx":51,"name":"pecker-tail","tpage_name":"arenacst-pris"}],[81592370,{"idx":50,"name":"pecker-plume","tpage_name":"arenacst-pris"}],[100073496,{"idx":24,"name":"jakb-lightbrownstrap","tpage_name":"ljak-pris"}],[106299396,{"idx":4,"name":"sword-trail-low","tpage_name":"mined-water"}],[105054216,{"idx":8,"name":"ashelin-lo-chest","tpage_name":"desoasis-pris"}],[81592369,{"idx":49,"name":"pecker-face","tpage_name":"arenacst-pris"}],[100073495,{"idx":23,"name":"jakb-lightbrownspat","tpage_name":"ljak-pris"}],[106299395,{"idx":3,"name":"ecocreature-teeth","tpage_name":"mined-water"}],[105054215,{"idx":7,"name":"ashelin-lo-cgrank","tpage_name":"desoasis-pris"}],[81592368,{"idx":48,"name":"pecker-eyelid","tpage_name":"arenacst-pris"}],[100073494,{"idx":22,"name":"jakb-leatherstrap","tpage_name":"ljak-pris"}],[106299394,{"idx":2,"name":"prebot-redgradient","tpage_name":"mined-water"}],[105054214,{"idx":6,"name":"ashelin-lo-cglogo","tpage_name":"desoasis-pris"}],[81592367,{"idx":47,"name":"pecker-body-01","tpage_name":"arenacst-pris"}],[100073493,{"idx":21,"name":"jakb-leatherpouch","tpage_name":"ljak-pris"}],[106299393,{"idx":1,"name":"prebot-shockwave","tpage_name":"mined-water"}],[105054213,{"idx":5,"name":"ashelin-lo-brownstrap","tpage_name":"desoasis-pris"}],[81592366,{"idx":46,"name":"jakb-shoeteop","tpage_name":"arenacst-pris"}],[100073492,{"idx":20,"name":"jakb-jacketsleeve","tpage_name":"ljak-pris"}],[106299392,{"idx":0,"name":"prebot-shockwave-end","tpage_name":"mined-water"}],[105054212,{"idx":4,"name":"ashelin-lo-boottop","tpage_name":"desoasis-pris"}],[81592365,{"idx":45,"name":"jakb-shoemetal","tpage_name":"arenacst-pris"}],[100073491,{"idx":19,"name":"jakb-jacketbody","tpage_name":"ljak-pris"}],[105054211,{"idx":3,"name":"ashelin-lo-bolts","tpage_name":"desoasis-pris"}],[81592364,{"idx":44,"name":"jakb-shoebottom","tpage_name":"arenacst-pris"}],[100073490,{"idx":18,"name":"jakb-horn","tpage_name":"ljak-pris"}],[105054210,{"idx":2,"name":"ashelin-lo-beltbuckle","tpage_name":"desoasis-pris"}],[81592363,{"idx":43,"name":"jakb-scarf","tpage_name":"arenacst-pris"}],[90308623,{"idx":15,"name":"kgtrns-topjet01","tpage_name":"desertb-vis-shrub"}],[100073489,{"idx":17,"name":"jakb-hairtrans","tpage_name":"ljak-pris"}],[105054209,{"idx":1,"name":"environment-oldmetal","tpage_name":"desoasis-pris"}],[81592362,{"idx":42,"name":"jakb-pants","tpage_name":"arenacst-pris"}],[90308622,{"idx":14,"name":"kgtrns-box01","tpage_name":"desertb-vis-shrub"}],[100073488,{"idx":16,"name":"jakb-glovetop","tpage_name":"ljak-pris"}],[105054208,{"idx":0,"name":"bam-hairhilite","tpage_name":"desoasis-pris"}],[100073487,{"idx":15,"name":"jakb-facert","tpage_name":"ljak-pris"}],[100073486,{"idx":14,"name":"jakb-facelft","tpage_name":"ljak-pris"}],[100073485,{"idx":13,"name":"jakb-eyelid","tpage_name":"ljak-pris"}],[100073484,{"idx":12,"name":"jakb-eyebrow","tpage_name":"ljak-pris"}],[81592357,{"idx":37,"name":"jakb-jacketsleeve","tpage_name":"arenacst-pris"}],[100073483,{"idx":11,"name":"jakb-eye","tpage_name":"ljak-pris"}],[100073482,{"idx":10,"name":"jakb-clips","tpage_name":"ljak-pris"}],[100073481,{"idx":9,"name":"jakb-brownleather","tpage_name":"ljak-pris"}],[81592354,{"idx":34,"name":"jakb-hairtrans","tpage_name":"arenacst-pris"}],[90308614,{"idx":6,"name":"wascity-overlay-bullethole-a","tpage_name":"desertb-vis-shrub"}],[100073480,{"idx":8,"name":"jakb-blackstrap","tpage_name":"ljak-pris"}],[81592353,{"idx":33,"name":"jakb-glovetop","tpage_name":"arenacst-pris"}],[90308613,{"idx":5,"name":"wascity-blotch-withstreaks-01","tpage_name":"desertb-vis-shrub"}],[100073479,{"idx":7,"name":"jakb-armor","tpage_name":"ljak-pris"}],[81592352,{"idx":32,"name":"jakb-facert","tpage_name":"arenacst-pris"}],[90308612,{"idx":4,"name":"wascity-stain-window-01","tpage_name":"desertb-vis-shrub"}],[100073478,{"idx":6,"name":"jak-teeth","tpage_name":"ljak-pris"}],[81592351,{"idx":31,"name":"jakb-facelft","tpage_name":"arenacst-pris"}],[90308611,{"idx":3,"name":"wascity-stain-wall-01","tpage_name":"desertb-vis-shrub"}],[100073477,{"idx":5,"name":"jak-gogglemetal","tpage_name":"ljak-pris"}],[91357217,{"idx":33,"name":"klever-fingertop","tpage_name":"lkleever-pris"}],[81592350,{"idx":30,"name":"jakb-eyelid","tpage_name":"arenacst-pris"}],[100073476,{"idx":4,"name":"jak-belt","tpage_name":"ljak-pris"}],[91357216,{"idx":32,"name":"klever-fingerbottom","tpage_name":"lkleever-pris"}],[81592349,{"idx":29,"name":"jakb-eyebrow","tpage_name":"arenacst-pris"}],[100073475,{"idx":3,"name":"jackb-lens","tpage_name":"ljak-pris"}],[91357215,{"idx":31,"name":"klever-widebrownstrap","tpage_name":"lkleever-pris"}],[81592348,{"idx":28,"name":"jakb-eye","tpage_name":"arenacst-pris"}],[71630908,{"idx":60,"name":"seem-skirt-small","tpage_name":"ldampksm-pris2"}],[90308608,{"idx":0,"name":"des-shrub-pebbles","tpage_name":"desertb-vis-shrub"}],[100073474,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljak-pris"}],[91357214,{"idx":30,"name":"klever-undershirt","tpage_name":"lkleever-pris"}],[81592347,{"idx":27,"name":"jakb-clips","tpage_name":"arenacst-pris"}],[71630907,{"idx":59,"name":"seem-skirt","tpage_name":"ldampksm-pris2"}],[100073473,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljak-pris"}],[91357213,{"idx":29,"name":"klever-thighs","tpage_name":"lkleever-pris"}],[81592346,{"idx":26,"name":"jakb-brownleather","tpage_name":"arenacst-pris"}],[71630906,{"idx":58,"name":"king-skirt-b","tpage_name":"ldampksm-pris2"}],[100073472,{"idx":0,"name":"bam-eyelight","tpage_name":"ljak-pris"}],[91357212,{"idx":28,"name":"klever-skirtlight","tpage_name":"lkleever-pris"}],[81592345,{"idx":25,"name":"jakb-blackstrap","tpage_name":"arenacst-pris"}],[71630905,{"idx":57,"name":"seem-teeth","tpage_name":"ldampksm-pris2"}],[81592344,{"idx":24,"name":"jakb-armor","tpage_name":"arenacst-pris"}],[71630904,{"idx":56,"name":"seem-pipes-02","tpage_name":"ldampksm-pris2"}],[81592343,{"idx":23,"name":"jak-teeth","tpage_name":"arenacst-pris"}],[71630903,{"idx":55,"name":"seem-headpiecetop","tpage_name":"ldampksm-pris2"}],[81592342,{"idx":22,"name":"jak-gogglemetal","tpage_name":"arenacst-pris"}],[71630902,{"idx":54,"name":"seem-headgearback","tpage_name":"ldampksm-pris2"}],[81592341,{"idx":21,"name":"jak-belt","tpage_name":"arenacst-pris"}],[71630901,{"idx":53,"name":"seem-uppertorso","tpage_name":"ldampksm-pris2"}],[81592340,{"idx":20,"name":"jackb-lens","tpage_name":"arenacst-pris"}],[71630900,{"idx":52,"name":"seem-straps","tpage_name":"ldampksm-pris2"}],[85327880,{"idx":8,"name":"map-forest","tpage_name":"foresta-minimap"}],[81592339,{"idx":19,"name":"environment-oldmetal","tpage_name":"arenacst-pris"}],[71630899,{"idx":51,"name":"seem-precmetal-plain","tpage_name":"ldampksm-pris2"}],[85327879,{"idx":7,"name":"hud-purple-bar-01","tpage_name":"foresta-minimap"}],[86573059,{"idx":3,"name":"was-kangalizard-fin","tpage_name":"waschase-pris"}],[81592338,{"idx":18,"name":"daxtertuft","tpage_name":"arenacst-pris"}],[71630898,{"idx":50,"name":"seem-precmetal-edge","tpage_name":"ldampksm-pris2"}],[85327878,{"idx":6,"name":"wascity-turret-hud-arrow-01","tpage_name":"foresta-minimap"}],[86573058,{"idx":2,"name":"was-kangalizard-face","tpage_name":"waschase-pris"}],[81592337,{"idx":17,"name":"daxterteeth","tpage_name":"arenacst-pris"}],[71630897,{"idx":49,"name":"seem-precmetal-chestplate-01","tpage_name":"ldampksm-pris2"}],[85327877,{"idx":5,"name":"hud-chase-statues-01","tpage_name":"foresta-minimap"}],[86573057,{"idx":1,"name":"was-kangalizard-body-bottom","tpage_name":"waschase-pris"}],[81592336,{"idx":16,"name":"daxternose","tpage_name":"arenacst-pris"}],[71630896,{"idx":48,"name":"seem-pipes-01","tpage_name":"ldampksm-pris2"}],[85327876,{"idx":4,"name":"hud-dark-eco-plant","tpage_name":"foresta-minimap"}],[86573056,{"idx":0,"name":"was-kangalizard-body","tpage_name":"waschase-pris"}],[81592335,{"idx":15,"name":"daxterlense","tpage_name":"arenacst-pris"}],[71630895,{"idx":47,"name":"seem-pipeend","tpage_name":"ldampksm-pris2"}],[85327875,{"idx":3,"name":"hud-neo-spawner","tpage_name":"foresta-minimap"}],[81592334,{"idx":14,"name":"daxterhelmetplain","tpage_name":"arenacst-pris"}],[71630894,{"idx":46,"name":"seem-hand","tpage_name":"ldampksm-pris2"}],[81592333,{"idx":13,"name":"daxterheadwidenew","tpage_name":"arenacst-pris"}],[71630893,{"idx":45,"name":"seem-finger","tpage_name":"ldampksm-pris2"}],[81592332,{"idx":12,"name":"daxtergoggles","tpage_name":"arenacst-pris"}],[71630892,{"idx":44,"name":"seem-face","tpage_name":"ldampksm-pris2"}],[81592331,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"arenacst-pris"}],[71630891,{"idx":43,"name":"seem-eyelid","tpage_name":"ldampksm-pris2"}],[81592330,{"idx":10,"name":"daxterfoot","tpage_name":"arenacst-pris"}],[71630890,{"idx":42,"name":"seem-eye","tpage_name":"ldampksm-pris2"}],[81592329,{"idx":9,"name":"daxterfinger","tpage_name":"arenacst-pris"}],[71630889,{"idx":41,"name":"seem-ear","tpage_name":"ldampksm-pris2"}],[81592328,{"idx":8,"name":"daxterear","tpage_name":"arenacst-pris"}],[71630888,{"idx":40,"name":"seem-boottoe","tpage_name":"ldampksm-pris2"}],[81592327,{"idx":7,"name":"daxterbolt","tpage_name":"arenacst-pris"}],[71630887,{"idx":39,"name":"seem-bootmet","tpage_name":"ldampksm-pris2"}],[81592326,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"arenacst-pris"}],[71630886,{"idx":38,"name":"seem-bootlower","tpage_name":"ldampksm-pris2"}],[81592325,{"idx":5,"name":"daxterarm","tpage_name":"arenacst-pris"}],[71630885,{"idx":37,"name":"seem-bootleg","tpage_name":"ldampksm-pris2"}],[94371936,{"idx":96,"name":"yellowcard01","tpage_name":"intpfall-vis-pris"}],[81592324,{"idx":4,"name":"daxter-orange","tpage_name":"arenacst-pris"}],[71630884,{"idx":36,"name":"seem-bootbottom","tpage_name":"ldampksm-pris2"}],[94371935,{"idx":95,"name":"wing02grey01","tpage_name":"intpfall-vis-pris"}],[81592323,{"idx":3,"name":"daxter-furhilite","tpage_name":"arenacst-pris"}],[71630883,{"idx":35,"name":"seem-arm","tpage_name":"ldampksm-pris2"}],[94371934,{"idx":94,"name":"wing02","tpage_name":"intpfall-vis-pris"}],[81592322,{"idx":2,"name":"daxter-eyelid","tpage_name":"arenacst-pris"}],[94371933,{"idx":93,"name":"wing01","tpage_name":"intpfall-vis-pris"}],[81592321,{"idx":1,"name":"bam-hairhilite","tpage_name":"arenacst-pris"}],[71630881,{"idx":33,"name":"king-wristband","tpage_name":"ldampksm-pris2"}],[94371932,{"idx":92,"name":"turret01","tpage_name":"intpfall-vis-pris"}],[81592320,{"idx":0,"name":"bam-eyelight","tpage_name":"arenacst-pris"}],[71630880,{"idx":32,"name":"king-wraps","tpage_name":"ldampksm-pris2"}],[81526833,{"idx":49,"name":"kg-grunt-rim-03","tpage_name":"ctypesc-pris"}],[90243093,{"idx":21,"name":"wascitya-redish-metal","tpage_name":"desertb-vis-tfrag"}],[81526802,{"idx":18,"name":"roboguard-shouldershield","tpage_name":"ctypesc-pris"}],[74055722,{"idx":42,"name":"sew-jump-pad-grate","tpage_name":"sewi-vis-pris"}],[86507522,{"idx":2,"name":"bombot-darkgrey-02","tpage_name":"lbombbot-pris"}],[81526799,{"idx":15,"name":"roboguard-die-stamped-metal-blue","tpage_name":"ctypesc-pris"}],[81526798,{"idx":14,"name":"environment-oldmetal","tpage_name":"ctypesc-pris"}],[81526797,{"idx":13,"name":"cguardgame-shoebottom","tpage_name":"ctypesc-pris"}],[81526796,{"idx":12,"name":"cguardgame-metallight-01small","tpage_name":"ctypesc-pris"}],[81526794,{"idx":10,"name":"cguardgame-backplate","tpage_name":"ctypesc-pris"}],[81526792,{"idx":8,"name":"cguard1-lens","tpage_name":"ctypesc-pris"}],[67829812,{"idx":52,"name":"twirl","tpage_name":"freehq-sprite"}],[81526790,{"idx":6,"name":"cguard1-guntube","tpage_name":"ctypesc-pris"}],[67829810,{"idx":50,"name":"landscape","tpage_name":"freehq-sprite"}],[81526788,{"idx":4,"name":"cguard1-chestplate","tpage_name":"ctypesc-pris"}],[67829808,{"idx":48,"name":"rectangle","tpage_name":"freehq-sprite"}],[81526787,{"idx":3,"name":"cguard1-backmetal","tpage_name":"ctypesc-pris"}],[67829807,{"idx":47,"name":"line-scroll2","tpage_name":"freehq-sprite"}],[81526786,{"idx":2,"name":"brown-hose","tpage_name":"ctypesc-pris"}],[67829806,{"idx":46,"name":"holo-curve","tpage_name":"freehq-sprite"}],[81526785,{"idx":1,"name":"blue-gem","tpage_name":"ctypesc-pris"}],[67829805,{"idx":45,"name":"line-scroll","tpage_name":"freehq-sprite"}],[81526784,{"idx":0,"name":"bam-eyelight","tpage_name":"ctypesc-pris"}],[67829804,{"idx":44,"name":"vinroom-tv-text-r","tpage_name":"freehq-sprite"}],[80085020,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"lashelin-pris2"}],[76349480,{"idx":40,"name":"torn-hair-01","tpage_name":"ltornsam-pris2"}],[73859120,{"idx":48,"name":"sewer-pipe-01","tpage_name":"sewg-vis-tfrag"}],[80085019,{"idx":27,"name":"ashelin-teeth","tpage_name":"lashelin-pris2"}],[73859119,{"idx":47,"name":"sewer-brick-roof-05","tpage_name":"sewg-vis-tfrag"}],[76349479,{"idx":39,"name":"torn-gunbarrel-02","tpage_name":"ltornsam-pris2"}],[80085018,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"lashelin-pris2"}],[76349478,{"idx":38,"name":"torn-gunbarrel","tpage_name":"ltornsam-pris2"}],[73859118,{"idx":46,"name":"sewer-bolt-side-02","tpage_name":"sewg-vis-tfrag"}],[80085017,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"lashelin-pris2"}],[76349477,{"idx":37,"name":"torn-footleather","tpage_name":"ltornsam-pris2"}],[73859117,{"idx":45,"name":"sewer-bolt-side-01","tpage_name":"sewg-vis-tfrag"}],[80085016,{"idx":24,"name":"ashelin-shield","tpage_name":"lashelin-pris2"}],[76349476,{"idx":36,"name":"torn-finger","tpage_name":"ltornsam-pris2"}],[73859116,{"idx":44,"name":"sewer-flat-pipe-01","tpage_name":"sewg-vis-tfrag"}],[80085015,{"idx":23,"name":"ashelin-shells","tpage_name":"lashelin-pris2"}],[73859115,{"idx":43,"name":"sewer-scaffold-02","tpage_name":"sewg-vis-tfrag"}],[76349475,{"idx":35,"name":"torn-face-right","tpage_name":"ltornsam-pris2"}],[80085014,{"idx":22,"name":"ashelin-redtop","tpage_name":"lashelin-pris2"}],[73859114,{"idx":42,"name":"sewer-rubber-rim-01","tpage_name":"sewg-vis-tfrag"}],[76349474,{"idx":34,"name":"torn-face","tpage_name":"ltornsam-pris2"}],[80085013,{"idx":21,"name":"ashelin-pantstop","tpage_name":"lashelin-pris2"}],[73859113,{"idx":41,"name":"sewer-pipe-rim-06","tpage_name":"sewg-vis-tfrag"}],[76349473,{"idx":33,"name":"torn-eyelid","tpage_name":"ltornsam-pris2"}],[80085012,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"lashelin-pris2"}],[73859112,{"idx":40,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewg-vis-tfrag"}],[76349472,{"idx":32,"name":"torn-eye","tpage_name":"ltornsam-pris2"}],[80085011,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"lashelin-pris2"}],[73859111,{"idx":39,"name":"sewer-block-02-hitweak","tpage_name":"sewg-vis-tfrag"}],[76349471,{"idx":31,"name":"torn-ear","tpage_name":"ltornsam-pris2"}],[80085010,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"lashelin-pris2"}],[76349470,{"idx":30,"name":"torn-blademetal","tpage_name":"ltornsam-pris2"}],[73859110,{"idx":38,"name":"sewer-brick-block-04","tpage_name":"sewg-vis-tfrag"}],[80085006,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"lashelin-pris2"}],[76349466,{"idx":26,"name":"torn-armlft","tpage_name":"ltornsam-pris2"}],[73859106,{"idx":34,"name":"sewer-brick-block-11","tpage_name":"sewg-vis-tfrag"}],[80085005,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"lashelin-pris2"}],[73859105,{"idx":33,"name":"sewer-stone-arch-01","tpage_name":"sewg-vis-tfrag"}],[76349465,{"idx":25,"name":"charHOLD","tpage_name":"ltornsam-pris2"}],[80085004,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"lashelin-pris2"}],[73859104,{"idx":32,"name":"sewer-brick-block-10","tpage_name":"sewg-vis-tfrag"}],[76349464,{"idx":24,"name":"samosbird-wing","tpage_name":"ltornsam-pris2"}],[80085003,{"idx":11,"name":"ashelin-glove","tpage_name":"lashelin-pris2"}],[73859103,{"idx":31,"name":"sewer-mantel-02","tpage_name":"sewg-vis-tfrag"}],[76349463,{"idx":23,"name":"samosbird-plume","tpage_name":"ltornsam-pris2"}],[80084998,{"idx":6,"name":"ashelin-chest","tpage_name":"lashelin-pris2"}],[73859098,{"idx":26,"name":"sewer-plate-05-hitweak","tpage_name":"sewg-vis-tfrag"}],[76349458,{"idx":18,"name":"samos-teeth2","tpage_name":"ltornsam-pris2"}],[80084997,{"idx":5,"name":"ashelin-cgrank","tpage_name":"lashelin-pris2"}],[73859097,{"idx":25,"name":"sewer-plate-01","tpage_name":"sewg-vis-tfrag"}],[76349457,{"idx":17,"name":"samos-strap","tpage_name":"ltornsam-pris2"}],[80084996,{"idx":4,"name":"ashelin-cglogo","tpage_name":"lashelin-pris2"}],[73859096,{"idx":24,"name":"sewer-metal-trim-01","tpage_name":"sewg-vis-tfrag"}],[76349456,{"idx":16,"name":"samos-metal","tpage_name":"ltornsam-pris2"}],[80084995,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"lashelin-pris2"}],[73859095,{"idx":23,"name":"sewer-pipe-rim-09","tpage_name":"sewg-vis-tfrag"}],[76349455,{"idx":15,"name":"samos-log-03","tpage_name":"ltornsam-pris2"}],[80084994,{"idx":2,"name":"ashelin-boottop","tpage_name":"lashelin-pris2"}],[73859094,{"idx":22,"name":"sewer-pipe-02","tpage_name":"sewg-vis-tfrag"}],[76349454,{"idx":14,"name":"samos-log-02","tpage_name":"ltornsam-pris2"}],[80084993,{"idx":1,"name":"ashelin-bolts","tpage_name":"lashelin-pris2"}],[73859093,{"idx":21,"name":"sewer-nut-01","tpage_name":"sewg-vis-tfrag"}],[76349453,{"idx":13,"name":"samos-log-01","tpage_name":"ltornsam-pris2"}],[80084992,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"lashelin-pris2"}],[73859092,{"idx":20,"name":"sewer-plate-03","tpage_name":"sewg-vis-tfrag"}],[76349452,{"idx":12,"name":"samos-lens","tpage_name":"ltornsam-pris2"}],[96206863,{"idx":15,"name":"seem-pipes-01","tpage_name":"wasseem-pris2"}],[94961683,{"idx":19,"name":"jakchires-eyelid","tpage_name":"lsigjakc-pris"}],[79626241,{"idx":1,"name":"des-waterfall-dest","tpage_name":"wasintro-vis-water"}],[75890701,{"idx":13,"name":"onin-cage-plain","tpage_name":"onintent-tfrag"}],[60948541,{"idx":61,"name":"mina-idol-02-noalpha","tpage_name":"minec-vis-tfrag"}],[79364256,{"idx":160,"name":"monk-uppertorso-01","tpage_name":"wasseem-pris"}],[129171456,{"idx":0,"name":"sewer-brick-block-01","tpage_name":"sewn-vis-tfrag"}],[79364254,{"idx":158,"name":"monk-strap","tpage_name":"wasseem-pris"}],[79364253,{"idx":157,"name":"monk-staffa-wood","tpage_name":"wasseem-pris"}],[79364252,{"idx":156,"name":"monk-scarob","tpage_name":"wasseem-pris"}],[103546890,{"idx":10,"name":"common-black","tpage_name":"lctyhijk-tfrag"}],[101056530,{"idx":18,"name":"jakchires-eyebrow","tpage_name":"ljakcklv-pris"}],[96075810,{"idx":34,"name":"jakc-skirt","tpage_name":"ljakc-pris"}],[79364248,{"idx":152,"name":"monk-pipe-01","tpage_name":"wasseem-pris"}],[103546889,{"idx":9,"name":"missle-launcher-gear-02","tpage_name":"lctyhijk-tfrag"}],[101056529,{"idx":17,"name":"jakchires-eye","tpage_name":"ljakcklv-pris"}],[96075809,{"idx":33,"name":"jakchires-teeth","tpage_name":"ljakc-pris"}],[79364247,{"idx":151,"name":"monk-neckcover","tpage_name":"wasseem-pris"}],[103546888,{"idx":8,"name":"missle-launcher-shaft-01","tpage_name":"lctyhijk-tfrag"}],[101056528,{"idx":16,"name":"jakchires-clips","tpage_name":"ljakcklv-pris"}],[96075808,{"idx":32,"name":"jakchires-shoeteop","tpage_name":"ljakc-pris"}],[79364246,{"idx":150,"name":"monk-maletorso","tpage_name":"wasseem-pris"}],[79364245,{"idx":149,"name":"monk-maleshoebottom","tpage_name":"wasseem-pris"}],[79364243,{"idx":147,"name":"monk-malefoot2","tpage_name":"wasseem-pris"}],[79364242,{"idx":146,"name":"monk-malearm","tpage_name":"wasseem-pris"}],[79364241,{"idx":145,"name":"monk-lens","tpage_name":"wasseem-pris"}],[79364228,{"idx":132,"name":"monk-femalebootoe","tpage_name":"wasseem-pris"}],[104267828,{"idx":52,"name":"stdm-marble-floor-01","tpage_name":"stadium-vis-tfrag"}],[120455168,{"idx":0,"name":"ruins-citywall-frame","tpage_name":"forestx-vis-tfrag"}],[79364227,{"idx":131,"name":"monk-femalebootmet","tpage_name":"wasseem-pris"}],[104267827,{"idx":51,"name":"rub-met-strp-close","tpage_name":"stadium-vis-tfrag"}],[79364226,{"idx":130,"name":"monk-femalebootlower","tpage_name":"wasseem-pris"}],[104267826,{"idx":50,"name":"rub-metal-flatpipe-01","tpage_name":"stadium-vis-tfrag"}],[79364225,{"idx":129,"name":"monk-femalebelt","tpage_name":"wasseem-pris"}],[104267825,{"idx":49,"name":"rub-palshaft-dirt-blue-01","tpage_name":"stadium-vis-tfrag"}],[79364224,{"idx":128,"name":"monk-face-06","tpage_name":"wasseem-pris"}],[104267824,{"idx":48,"name":"rub-beam-gen-hole","tpage_name":"stadium-vis-tfrag"}],[79364221,{"idx":125,"name":"monk-face-03","tpage_name":"wasseem-pris"}],[104267821,{"idx":45,"name":"rub-wall-gen-06","tpage_name":"stadium-vis-tfrag"}],[79364220,{"idx":124,"name":"monk-face-02","tpage_name":"wasseem-pris"}],[104267820,{"idx":44,"name":"city-slum-burning-can","tpage_name":"stadium-vis-tfrag"}],[79364219,{"idx":123,"name":"monk-face-01","tpage_name":"wasseem-pris"}],[104267819,{"idx":43,"name":"stdm-glass-01","tpage_name":"stadium-vis-tfrag"}],[79364215,{"idx":119,"name":"monk-ear-01","tpage_name":"wasseem-pris"}],[104267815,{"idx":39,"name":"rub-wall-gen-02","tpage_name":"stadium-vis-tfrag"}],[79364214,{"idx":118,"name":"monk-cheststraps","tpage_name":"wasseem-pris"}],[104267814,{"idx":38,"name":"rub-wall-gen-04","tpage_name":"stadium-vis-tfrag"}],[79364213,{"idx":117,"name":"monk-bootbottom","tpage_name":"wasseem-pris"}],[104267813,{"idx":37,"name":"rub-panels-01","tpage_name":"stadium-vis-tfrag"}],[79364212,{"idx":116,"name":"monk-arm","tpage_name":"wasseem-pris"}],[114229252,{"idx":4,"name":"ctyslumb-fountain-fall-dest","tpage_name":"ctyslumb-vis-water"}],[104267812,{"idx":36,"name":"rub-wall-trim","tpage_name":"stadium-vis-tfrag"}],[79364211,{"idx":115,"name":"dk-sat-shell-01","tpage_name":"wasseem-pris"}],[104267811,{"idx":35,"name":"rub-metal-pipeside-01","tpage_name":"stadium-vis-tfrag"}],[114229251,{"idx":3,"name":"ctyslumb-fountain-fall","tpage_name":"ctyslumb-vis-water"}],[79364209,{"idx":113,"name":"dk-sat-screen-01","tpage_name":"wasseem-pris"}],[114229249,{"idx":1,"name":"ctyslumb-water","tpage_name":"ctyslumb-vis-water"}],[104267809,{"idx":33,"name":"stdm-wallrock-dirt","tpage_name":"stadium-vis-tfrag"}],[79364208,{"idx":112,"name":"dk-sat-rim-bright-01","tpage_name":"wasseem-pris"}],[104267808,{"idx":32,"name":"rub-rubble-01","tpage_name":"stadium-vis-tfrag"}],[79364205,{"idx":109,"name":"dk-sat-rim-01","tpage_name":"wasseem-pris"}],[104267805,{"idx":29,"name":"stdm-rubble-01","tpage_name":"stadium-vis-tfrag"}],[101646336,{"idx":0,"name":"wstlander-01-glovetop","tpage_name":"lwlandm-water"}],[81723456,{"idx":64,"name":"klever-gunmetal-02","tpage_name":"ljndklev-pris"}],[79364183,{"idx":87,"name":"jakchires-eye","tpage_name":"wasseem-pris"}],[104267783,{"idx":7,"name":"rub-copper-metal-02","tpage_name":"stadium-vis-tfrag"}],[50725043,{"idx":179,"name":"quantref-04","tpage_name":"foresta-vis-pris"}],[79364182,{"idx":86,"name":"jakchires-clips","tpage_name":"wasseem-pris"}],[104267782,{"idx":6,"name":"rub-marble-floor-01-hitweak","tpage_name":"stadium-vis-tfrag"}],[50725042,{"idx":178,"name":"quantref-03","tpage_name":"foresta-vis-pris"}],[79364181,{"idx":85,"name":"jakchires-chestplate","tpage_name":"wasseem-pris"}],[104267781,{"idx":5,"name":"stdm-metal-rim-01","tpage_name":"stadium-vis-tfrag"}],[50725041,{"idx":177,"name":"quantref-02","tpage_name":"foresta-vis-pris"}],[79364180,{"idx":84,"name":"jakchires-brwnleather","tpage_name":"wasseem-pris"}],[104267780,{"idx":4,"name":"stdm-light-fix-a","tpage_name":"stadium-vis-tfrag"}],[50725040,{"idx":176,"name":"quantref-01","tpage_name":"foresta-vis-pris"}],[79364179,{"idx":83,"name":"jakchires-brownstrap","tpage_name":"wasseem-pris"}],[104267779,{"idx":3,"name":"rub-metal-01","tpage_name":"stadium-vis-tfrag"}],[50725039,{"idx":175,"name":"precprism-lens-06","tpage_name":"foresta-vis-pris"}],[79364178,{"idx":82,"name":"jakchires-blackstrap","tpage_name":"wasseem-pris"}],[104267778,{"idx":2,"name":"rub-statue-stone-01","tpage_name":"stadium-vis-tfrag"}],[50725038,{"idx":174,"name":"precprism-lens-05","tpage_name":"foresta-vis-pris"}],[79364177,{"idx":81,"name":"jakchires-arm","tpage_name":"wasseem-pris"}],[104267777,{"idx":1,"name":"stdm-lg-stone-trim-01","tpage_name":"stadium-vis-tfrag"}],[50725037,{"idx":173,"name":"precprism-lens-03","tpage_name":"foresta-vis-pris"}],[79364176,{"idx":80,"name":"jakc-wristband-a2","tpage_name":"wasseem-pris"}],[104267776,{"idx":0,"name":"rub-stad-brick","tpage_name":"stadium-vis-tfrag"}],[50725036,{"idx":172,"name":"holo-cube-face-02","tpage_name":"foresta-vis-pris"}],[79364175,{"idx":79,"name":"jakc-wraps","tpage_name":"wasseem-pris"}],[50725035,{"idx":171,"name":"holo-cube-face-01","tpage_name":"foresta-vis-pris"}],[79364174,{"idx":78,"name":"jakc-waistband2","tpage_name":"wasseem-pris"}],[50725034,{"idx":170,"name":"beamgen-metal-edge-02","tpage_name":"foresta-vis-pris"}],[79364173,{"idx":77,"name":"jakc-skirt","tpage_name":"wasseem-pris"}],[50725033,{"idx":169,"name":"beamgen-metal-edge-01","tpage_name":"foresta-vis-pris"}],[79364172,{"idx":76,"name":"jakc-scarfhanging","tpage_name":"wasseem-pris"}],[50725032,{"idx":168,"name":"beamgen-metal-dec-trim-01","tpage_name":"foresta-vis-pris"}],[79364171,{"idx":75,"name":"jakc-scarf","tpage_name":"wasseem-pris"}],[50725031,{"idx":167,"name":"beamgen-lens","tpage_name":"foresta-vis-pris"}],[79364170,{"idx":74,"name":"jakc-lens","tpage_name":"wasseem-pris"}],[79364169,{"idx":73,"name":"jakc-gogglemetal","tpage_name":"wasseem-pris"}],[79364168,{"idx":72,"name":"jakc-chestplate-straps","tpage_name":"wasseem-pris"}],[79364167,{"idx":71,"name":"jakc-armor","tpage_name":"wasseem-pris"}],[79364166,{"idx":70,"name":"dark-crystal-pickup-03","tpage_name":"wasseem-pris"}],[79364165,{"idx":69,"name":"dark-crystal-pickup-02","tpage_name":"wasseem-pris"}],[79364164,{"idx":68,"name":"dark-crystal-pickup-01","tpage_name":"wasseem-pris"}],[79364163,{"idx":67,"name":"dark-crystal-knob-02","tpage_name":"wasseem-pris"}],[74383443,{"idx":83,"name":"sewer-metal-edge-01","tpage_name":"sewj-vis-tfrag"}],[79364162,{"idx":66,"name":"dark-crystal-knob-01","tpage_name":"wasseem-pris"}],[74383442,{"idx":82,"name":"sewer-stone-newarch-01","tpage_name":"sewj-vis-tfrag"}],[79364156,{"idx":60,"name":"seem-precmetal-edge","tpage_name":"wasseem-pris"}],[90570776,{"idx":24,"name":"des-cliff-top-03","tpage_name":"desertd-vis-tfrag"}],[95944730,{"idx":26,"name":"torn-shoe-02","tpage_name":"freehq-pris2"}],[100925450,{"idx":10,"name":"king-face-01","tpage_name":"ljkdmpk-pris2"}],[79364108,{"idx":12,"name":"daxtergoggles","tpage_name":"wasseem-pris"}],[74383388,{"idx":28,"name":"sewer-pipe-rim-09","tpage_name":"sewj-vis-tfrag"}],[95944725,{"idx":21,"name":"torn-metal2","tpage_name":"freehq-pris2"}],[92209185,{"idx":33,"name":"klever-widebrownstrap","tpage_name":"ldamklev-pris"}],[100925445,{"idx":5,"name":"king-bolt","tpage_name":"ljkdmpk-pris2"}],[79364103,{"idx":7,"name":"daxterbolt","tpage_name":"wasseem-pris"}],[74383383,{"idx":23,"name":"sewer-metal-03","tpage_name":"sewj-vis-tfrag"}],[76480618,{"idx":106,"name":"jakc-scarfhanging","tpage_name":"freehq-pris"}],[90177598,{"idx":62,"name":"des-cactus-med-01","tpage_name":"desertg-vis-pris"}],[106364938,{"idx":10,"name":"veger-coatbelt","tpage_name":"mined-pris2"}],[76480617,{"idx":105,"name":"jakc-skirt","tpage_name":"freehq-pris"}],[90177597,{"idx":61,"name":"des-cactus-leaf","tpage_name":"desertg-vis-pris"}],[106364937,{"idx":9,"name":"veger-coat","tpage_name":"mined-pris2"}],[76480616,{"idx":104,"name":"jakchires-teeth","tpage_name":"freehq-pris"}],[106364936,{"idx":8,"name":"veger-bootstrap","tpage_name":"mined-pris2"}],[76480615,{"idx":103,"name":"jakchires-shoeteop","tpage_name":"freehq-pris"}],[90177595,{"idx":59,"name":"des-spiderweb","tpage_name":"desertg-vis-pris"}],[106364935,{"idx":7,"name":"veger-bootfoot","tpage_name":"mined-pris2"}],[76480613,{"idx":101,"name":"jakchires-shoebottom","tpage_name":"freehq-pris"}],[106364933,{"idx":5,"name":"veger-bookspine","tpage_name":"mined-pris2"}],[76480612,{"idx":100,"name":"jakchires-precarmor-01","tpage_name":"freehq-pris"}],[106364932,{"idx":4,"name":"veger-booksides","tpage_name":"mined-pris2"}],[76480611,{"idx":99,"name":"jakchires-pants","tpage_name":"freehq-pris"}],[106364931,{"idx":3,"name":"veger-bookleather","tpage_name":"mined-pris2"}],[76480606,{"idx":94,"name":"jakchires-hair","tpage_name":"freehq-pris"}],[76480605,{"idx":93,"name":"jakchires-glovetop","tpage_name":"freehq-pris"}],[76480604,{"idx":92,"name":"jakchires-facert","tpage_name":"freehq-pris"}],[76480603,{"idx":91,"name":"jakchires-facelft","tpage_name":"freehq-pris"}],[76480602,{"idx":90,"name":"jakchires-eyelid","tpage_name":"freehq-pris"}],[76480601,{"idx":89,"name":"jakchires-eyebrow","tpage_name":"freehq-pris"}],[76480600,{"idx":88,"name":"jakchires-eye","tpage_name":"freehq-pris"}],[76480599,{"idx":87,"name":"jakchires-clips","tpage_name":"freehq-pris"}],[35389659,{"idx":219,"name":"klever-fingertop","tpage_name":"introcst-pris"}],[76480598,{"idx":86,"name":"jakchires-chestplate","tpage_name":"freehq-pris"}],[35389658,{"idx":218,"name":"klever-fingerbottom","tpage_name":"introcst-pris"}],[76480597,{"idx":85,"name":"jakchires-brwnleather","tpage_name":"freehq-pris"}],[35389657,{"idx":217,"name":"klever-widebrownstrap","tpage_name":"introcst-pris"}],[76480596,{"idx":84,"name":"jakchires-brownstrap","tpage_name":"freehq-pris"}],[35389656,{"idx":216,"name":"klever-undershirt","tpage_name":"introcst-pris"}],[76480595,{"idx":83,"name":"jakchires-blackstrap","tpage_name":"freehq-pris"}],[35389655,{"idx":215,"name":"klever-thighs","tpage_name":"introcst-pris"}],[76480594,{"idx":82,"name":"jakchires-arm","tpage_name":"freehq-pris"}],[35389654,{"idx":214,"name":"klever-skirtlight","tpage_name":"introcst-pris"}],[76480586,{"idx":74,"name":"jakc-armor","tpage_name":"freehq-pris"}],[35389646,{"idx":206,"name":"klever-gunmetal-03","tpage_name":"introcst-pris"}],[76349486,{"idx":46,"name":"torn-pipe","tpage_name":"ltornsam-pris2"}],[73859126,{"idx":54,"name":"sewer-small-light-01","tpage_name":"sewg-vis-tfrag"}],[76349485,{"idx":45,"name":"torn-mouth","tpage_name":"ltornsam-pris2"}],[73859125,{"idx":53,"name":"sewer-pipe-rim-01","tpage_name":"sewg-vis-tfrag"}],[76349483,{"idx":43,"name":"torn-legshield","tpage_name":"ltornsam-pris2"}],[73859123,{"idx":51,"name":"sewer-round-02","tpage_name":"sewg-vis-tfrag"}],[80085023,{"idx":31,"name":"environment-oldmetal","tpage_name":"lashelin-pris2"}],[76349482,{"idx":42,"name":"torn-handle-01","tpage_name":"ltornsam-pris2"}],[73859122,{"idx":50,"name":"sewer-round-03","tpage_name":"sewg-vis-tfrag"}],[80085022,{"idx":30,"name":"bam-hairhilite","tpage_name":"lashelin-pris2"}],[76349481,{"idx":41,"name":"torn-hair-02","tpage_name":"ltornsam-pris2"}],[73859121,{"idx":49,"name":"sewer-round-01","tpage_name":"sewg-vis-tfrag"}],[80085021,{"idx":29,"name":"bam-eyelight","tpage_name":"lashelin-pris2"}],[76349469,{"idx":29,"name":"torn-belt2","tpage_name":"ltornsam-pris2"}],[73859109,{"idx":37,"name":"sewer-brick-block-02","tpage_name":"sewg-vis-tfrag"}],[80085009,{"idx":17,"name":"ashelin-handle-01","tpage_name":"lashelin-pris2"}],[76349467,{"idx":27,"name":"torn-armor","tpage_name":"ltornsam-pris2"}],[73859107,{"idx":35,"name":"sewer-brick-roof-03","tpage_name":"sewg-vis-tfrag"}],[80085007,{"idx":15,"name":"ashelin-gunholster","tpage_name":"lashelin-pris2"}],[76349442,{"idx":2,"name":"samos-arm","tpage_name":"ltornsam-pris2"}],[73859082,{"idx":10,"name":"sewer-pipe-rim-05b","tpage_name":"sewg-vis-tfrag"}],[76218392,{"idx":24,"name":"samosbird-wing","tpage_name":"onintent-pris2"}],[35127452,{"idx":156,"name":"roboguard-shouldershield","tpage_name":"factorya-pris"}],[73728032,{"idx":32,"name":"sewer-pool-rim-02","tpage_name":"sewh-vis-tfrag"}],[76218391,{"idx":23,"name":"samosbird-plume","tpage_name":"onintent-pris2"}],[35127451,{"idx":155,"name":"roboguard-headshield","tpage_name":"factorya-pris"}],[73728031,{"idx":31,"name":"sewer-metal-edge-01","tpage_name":"sewh-vis-tfrag"}],[76218390,{"idx":22,"name":"samosbird-eye","tpage_name":"onintent-pris2"}],[73728030,{"idx":30,"name":"sewer-track-01","tpage_name":"sewh-vis-tfrag"}],[76218389,{"idx":21,"name":"samosbird-body","tpage_name":"onintent-pris2"}],[35127449,{"idx":153,"name":"roboguard-die-stamped-metal-blue","tpage_name":"factorya-pris"}],[73728029,{"idx":29,"name":"sewer-scaffold-02","tpage_name":"sewh-vis-tfrag"}],[76218388,{"idx":20,"name":"samosbird-beak","tpage_name":"onintent-pris2"}],[73728028,{"idx":28,"name":"sewer-plate-01","tpage_name":"sewh-vis-tfrag"}],[35127448,{"idx":152,"name":"cguardgame-shoebottom","tpage_name":"factorya-pris"}],[76218387,{"idx":19,"name":"samos-vest","tpage_name":"onintent-pris2"}],[73728027,{"idx":27,"name":"sewer-scaffold-01","tpage_name":"sewh-vis-tfrag"}],[35127447,{"idx":151,"name":"cguardgame-metallight-01small","tpage_name":"factorya-pris"}],[71237667,{"idx":35,"name":"king-skirt-b","tpage_name":"ldampeck-pris2"}],[76218386,{"idx":18,"name":"samos-teeth2","tpage_name":"onintent-pris2"}],[73728026,{"idx":26,"name":"sewer-pipe-rim-06","tpage_name":"sewh-vis-tfrag"}],[35127446,{"idx":150,"name":"cguardgame-metaledark-02","tpage_name":"factorya-pris"}],[76218385,{"idx":17,"name":"samos-strap","tpage_name":"onintent-pris2"}],[35127445,{"idx":149,"name":"cguardgame-backplate","tpage_name":"factorya-pris"}],[73728025,{"idx":25,"name":"sewer-plate-05","tpage_name":"sewh-vis-tfrag"}],[71237665,{"idx":33,"name":"king-wristband","tpage_name":"ldampeck-pris2"}],[76218384,{"idx":16,"name":"samos-metal","tpage_name":"onintent-pris2"}],[35127444,{"idx":148,"name":"cguard1-lens","tpage_name":"factorya-pris"}],[73728024,{"idx":24,"name":"sewer-mantel-02","tpage_name":"sewh-vis-tfrag"}],[71237664,{"idx":32,"name":"king-wraps","tpage_name":"ldampeck-pris2"}],[76218383,{"idx":15,"name":"samos-log-03","tpage_name":"onintent-pris2"}],[35127443,{"idx":147,"name":"cguard1-guntube","tpage_name":"factorya-pris"}],[73728023,{"idx":23,"name":"sewer-mantel-01","tpage_name":"sewh-vis-tfrag"}],[71237663,{"idx":31,"name":"king-wrap","tpage_name":"ldampeck-pris2"}],[76218382,{"idx":14,"name":"samos-log-02","tpage_name":"onintent-pris2"}],[35127442,{"idx":146,"name":"cguard1-gunmetaldark2","tpage_name":"factorya-pris"}],[73728022,{"idx":22,"name":"sewer-brick-roof-03","tpage_name":"sewh-vis-tfrag"}],[71237662,{"idx":30,"name":"king-vestback","tpage_name":"ldampeck-pris2"}],[76218381,{"idx":13,"name":"samos-log-01","tpage_name":"onintent-pris2"}],[35127441,{"idx":145,"name":"cguard1-chestplate","tpage_name":"factorya-pris"}],[73728021,{"idx":21,"name":"sewer-block-02-hitweak","tpage_name":"sewh-vis-tfrag"}],[71237661,{"idx":29,"name":"king-vest","tpage_name":"ldampeck-pris2"}],[76218380,{"idx":12,"name":"samos-lens","tpage_name":"onintent-pris2"}],[35127440,{"idx":144,"name":"cguard1-backmetal","tpage_name":"factorya-pris"}],[71237660,{"idx":28,"name":"king-thinstrap","tpage_name":"ldampeck-pris2"}],[76218379,{"idx":11,"name":"samos-leaf","tpage_name":"onintent-pris2"}],[35127439,{"idx":143,"name":"brown-hose","tpage_name":"factorya-pris"}],[73728019,{"idx":19,"name":"sewer-brick-block-02","tpage_name":"sewh-vis-tfrag"}],[71237659,{"idx":27,"name":"king-teeth","tpage_name":"ldampeck-pris2"}],[76218378,{"idx":10,"name":"samos-helmet","tpage_name":"onintent-pris2"}],[35127438,{"idx":142,"name":"blue-gem","tpage_name":"factorya-pris"}],[73728018,{"idx":18,"name":"sewer-concrete-block-02","tpage_name":"sewh-vis-tfrag"}],[71237658,{"idx":26,"name":"king-skirt","tpage_name":"ldampeck-pris2"}],[76218377,{"idx":9,"name":"samos-hair","tpage_name":"onintent-pris2"}],[73728017,{"idx":17,"name":"sewer-brick-block-04","tpage_name":"sewh-vis-tfrag"}],[71237657,{"idx":25,"name":"king-shoebottom","tpage_name":"ldampeck-pris2"}],[76218376,{"idx":8,"name":"samos-finger-01","tpage_name":"onintent-pris2"}],[73728016,{"idx":16,"name":"sewer-pipe-rim-10","tpage_name":"sewh-vis-tfrag"}],[71237656,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"ldampeck-pris2"}],[76218375,{"idx":7,"name":"samos-face","tpage_name":"onintent-pris2"}],[73728015,{"idx":15,"name":"sewer-electric-ring","tpage_name":"sewh-vis-tfrag"}],[71237655,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"ldampeck-pris2"}],[76218374,{"idx":6,"name":"samos-eyelid","tpage_name":"onintent-pris2"}],[73728014,{"idx":14,"name":"sewer-metal-trim-01","tpage_name":"sewh-vis-tfrag"}],[71237654,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"ldampeck-pris2"}],[76218373,{"idx":5,"name":"samos-eye","tpage_name":"onintent-pris2"}],[73728013,{"idx":13,"name":"sewer-metal-new-01","tpage_name":"sewh-vis-tfrag"}],[35127433,{"idx":137,"name":"lfacrm-hangar-tooth-01","tpage_name":"factorya-pris"}],[71237653,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"ldampeck-pris2"}],[76218372,{"idx":4,"name":"samos-ear","tpage_name":"onintent-pris2"}],[73728012,{"idx":12,"name":"sewer-pipe-02","tpage_name":"sewh-vis-tfrag"}],[35127432,{"idx":136,"name":"lfacrm-hangar-panel-rim-01","tpage_name":"factorya-pris"}],[71237652,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"ldampeck-pris2"}],[76218371,{"idx":3,"name":"samos-diaper","tpage_name":"onintent-pris2"}],[73728011,{"idx":11,"name":"sewer-block-02","tpage_name":"sewh-vis-tfrag"}],[35127431,{"idx":135,"name":"lfacrm-hangar-panel-02","tpage_name":"factorya-pris"}],[71237651,{"idx":19,"name":"king-lgblackstrap","tpage_name":"ldampeck-pris2"}],[76218370,{"idx":2,"name":"samos-arm","tpage_name":"onintent-pris2"}],[73728010,{"idx":10,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewh-vis-tfrag"}],[35127430,{"idx":134,"name":"lfacrm-hangar-panel-01","tpage_name":"factorya-pris"}],[71237650,{"idx":18,"name":"king-leg","tpage_name":"ldampeck-pris2"}],[76218369,{"idx":1,"name":"bam-hairhilite","tpage_name":"onintent-pris2"}],[74973189,{"idx":5,"name":"sewer-shrub-pitting-01","tpage_name":"sewl-vis-shrub"}],[73728009,{"idx":9,"name":"sewer-brick-block-06","tpage_name":"sewh-vis-tfrag"}],[35127429,{"idx":133,"name":"lfacrm-hangar-edge-01","tpage_name":"factorya-pris"}],[71237649,{"idx":17,"name":"king-iris","tpage_name":"ldampeck-pris2"}],[76218368,{"idx":0,"name":"bam-eyelight","tpage_name":"onintent-pris2"}],[74973188,{"idx":4,"name":"sewer-shrub-rust-01","tpage_name":"sewl-vis-shrub"}],[73728008,{"idx":8,"name":"sewer-brick-block-01","tpage_name":"sewh-vis-tfrag"}],[35127428,{"idx":132,"name":"jakchires-teeth","tpage_name":"factorya-pris"}],[71237648,{"idx":16,"name":"king-horn","tpage_name":"ldampeck-pris2"}],[75956224,{"idx":0,"name":"onin-tank-glass","tpage_name":"onintent-water"}],[73465864,{"idx":8,"name":"sewer-metal-block-04","tpage_name":"sewk-vis-tfrag"}],[74711044,{"idx":4,"name":"sewer-water-01-m","tpage_name":"sewm-vis-water"}],[57278524,{"idx":60,"name":"wstlander-01-pants","tpage_name":"waswide-vis-pris"}],[67239964,{"idx":28,"name":"vin-panel-09","tpage_name":"vinroom-vis-tfrag"}],[94371841,{"idx":1,"name":"palcab-lowres-background-hills-01","tpage_name":"intpfall-vis-pris"}],[75890714,{"idx":26,"name":"onin-dresser-drawer-b","tpage_name":"onintent-tfrag"}],[75890700,{"idx":12,"name":"onin-cage-grey","tpage_name":"onintent-tfrag"}],[75890699,{"idx":11,"name":"onin-cage-bottom","tpage_name":"onintent-tfrag"}],[60948539,{"idx":59,"name":"mina-idol-01-noalpha","tpage_name":"minec-vis-tfrag"}],[75890698,{"idx":10,"name":"onin-bowl2","tpage_name":"onintent-tfrag"}],[108986411,{"idx":43,"name":"monk-jewelry","tpage_name":"wasleapr-pris"}],[81592451,{"idx":131,"name":"gun-cover","tpage_name":"arenacst-pris"}],[75825167,{"idx":15,"name":"onin-spider-03","tpage_name":"onintent-sprite"}],[74579987,{"idx":19,"name":"sewer-metal-block-05","tpage_name":"sewm-vis-tfrag"}],[60883007,{"idx":63,"name":"mine-caution-metal-01","tpage_name":"mineb-vis-pris"}],[108986410,{"idx":42,"name":"monk-hand","tpage_name":"wasleapr-pris"}],[81592450,{"idx":130,"name":"jakc-scarfhanging","tpage_name":"arenacst-pris"}],[75825166,{"idx":14,"name":"onin-spider-02","tpage_name":"onintent-sprite"}],[74579986,{"idx":18,"name":"sewer-metal-block-01","tpage_name":"sewm-vis-tfrag"}],[60883006,{"idx":62,"name":"mine-can-metal-01","tpage_name":"mineb-vis-pris"}],[108986409,{"idx":41,"name":"monk-hair-f","tpage_name":"wasleapr-pris"}],[75825165,{"idx":13,"name":"onin-spider-01","tpage_name":"onintent-sprite"}],[79560705,{"idx":1,"name":"des-shrub-pebbles","tpage_name":"wasintro-vis-shrub"}],[74579985,{"idx":17,"name":"sewer-pipe-rim-03","tpage_name":"sewm-vis-tfrag"}],[60883005,{"idx":61,"name":"rat-teeth","tpage_name":"mineb-vis-pris"}],[108986408,{"idx":40,"name":"monk-hair-a","tpage_name":"wasleapr-pris"}],[81592448,{"idx":128,"name":"jakc-skirt","tpage_name":"arenacst-pris"}],[75825164,{"idx":12,"name":"onin-magic-bigpuff","tpage_name":"onintent-sprite"}],[74579984,{"idx":16,"name":"sewer-pipe-small-02","tpage_name":"sewm-vis-tfrag"}],[60883004,{"idx":60,"name":"rat-skin","tpage_name":"mineb-vis-pris"}],[108986407,{"idx":39,"name":"monk-goldjewel","tpage_name":"wasleapr-pris"}],[75825163,{"idx":11,"name":"onin-game-x-darkener","tpage_name":"onintent-sprite"}],[74579983,{"idx":15,"name":"sewer-concrete-edge-01","tpage_name":"sewm-vis-tfrag"}],[60883003,{"idx":59,"name":"rat-sidehair","tpage_name":"mineb-vis-pris"}],[108986406,{"idx":38,"name":"monk-goggles","tpage_name":"wasleapr-pris"}],[75825162,{"idx":10,"name":"onin-game-x","tpage_name":"onintent-sprite"}],[74579982,{"idx":14,"name":"common-black","tpage_name":"sewm-vis-tfrag"}],[60883002,{"idx":58,"name":"rat-nose","tpage_name":"mineb-vis-pris"}],[108986405,{"idx":37,"name":"monk-goggleleather","tpage_name":"wasleapr-pris"}],[75825161,{"idx":9,"name":"onin-game-triangle-darkener","tpage_name":"onintent-sprite"}],[74579981,{"idx":13,"name":"sewer-metal-trim-02","tpage_name":"sewm-vis-tfrag"}],[60883001,{"idx":57,"name":"rat-hair","tpage_name":"mineb-vis-pris"}],[108986404,{"idx":36,"name":"monk-gem","tpage_name":"wasleapr-pris"}],[75825160,{"idx":8,"name":"onin-game-triangle","tpage_name":"onintent-sprite"}],[74579980,{"idx":12,"name":"sewer-lip-01","tpage_name":"sewm-vis-tfrag"}],[60883000,{"idx":56,"name":"rat-eye","tpage_name":"mineb-vis-pris"}],[108986403,{"idx":35,"name":"monk-finger","tpage_name":"wasleapr-pris"}],[75825159,{"idx":7,"name":"onin-game-square-darkener","tpage_name":"onintent-sprite"}],[74579979,{"idx":11,"name":"sewer-pipe-rim-05b","tpage_name":"sewm-vis-tfrag"}],[60882999,{"idx":55,"name":"rat-eartrans","tpage_name":"mineb-vis-pris"}],[75825158,{"idx":6,"name":"onin-game-square","tpage_name":"onintent-sprite"}],[74579978,{"idx":10,"name":"sewer-metal-block-02","tpage_name":"sewm-vis-tfrag"}],[60882998,{"idx":54,"name":"minc-strut-01","tpage_name":"mineb-vis-pris"}],[75825157,{"idx":5,"name":"onin-game-scatter","tpage_name":"onintent-sprite"}],[74579977,{"idx":9,"name":"sewer-pipe-rim-08","tpage_name":"sewm-vis-tfrag"}],[60882997,{"idx":53,"name":"minc-metal-siding-01","tpage_name":"mineb-vis-pris"}],[75825156,{"idx":4,"name":"onin-game-circle-darkener","tpage_name":"onintent-sprite"}],[74579976,{"idx":8,"name":"sewer-metal-block-04","tpage_name":"sewm-vis-tfrag"}],[57147456,{"idx":64,"name":"king-skirt-b","tpage_name":"waspala-pris2"}],[60882996,{"idx":52,"name":"minc-metal-platfrom-02","tpage_name":"mineb-vis-pris"}],[75825155,{"idx":3,"name":"onin-game-circle","tpage_name":"onintent-sprite"}],[74579975,{"idx":7,"name":"sewer-plate-01","tpage_name":"sewm-vis-tfrag"}],[60882995,{"idx":51,"name":"minc-metal-patch-01","tpage_name":"mineb-vis-pris"}],[75825154,{"idx":2,"name":"hummingbird-wing2","tpage_name":"onintent-sprite"}],[74579974,{"idx":6,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewm-vis-tfrag"}],[60882994,{"idx":50,"name":"minc-bolt","tpage_name":"mineb-vis-pris"}],[75825153,{"idx":1,"name":"hummingbird-wing","tpage_name":"onintent-sprite"}],[74579973,{"idx":5,"name":"sewer-plate-05-hitweak","tpage_name":"sewm-vis-tfrag"}],[60882993,{"idx":49,"name":"minc-blue-paint-rust03","tpage_name":"mineb-vis-pris"}],[75825152,{"idx":0,"name":"hummingbird-body","tpage_name":"onintent-sprite"}],[74579972,{"idx":4,"name":"sewer-block-01","tpage_name":"sewm-vis-tfrag"}],[60882992,{"idx":48,"name":"minc-blue-paint-01","tpage_name":"mineb-vis-pris"}],[94240855,{"idx":87,"name":"palcab-lowres-background-mounatin-window","tpage_name":"intpfall-vis-tfrag"}],[94240854,{"idx":86,"name":"palcab-lowres-farm-road","tpage_name":"intpfall-vis-tfrag"}],[94240853,{"idx":85,"name":"t-palshaft-r-strp-plate01","tpage_name":"intpfall-vis-tfrag"}],[94240852,{"idx":84,"name":"t-citypal-statue-stone-01","tpage_name":"intpfall-vis-tfrag"}],[94240851,{"idx":83,"name":"t-citypal-dmnd-01","tpage_name":"intpfall-vis-tfrag"}],[94240850,{"idx":82,"name":"palcab-lowres-background-desert-01","tpage_name":"intpfall-vis-tfrag"}],[94240849,{"idx":81,"name":"palcab-lowres-stadium-grass","tpage_name":"intpfall-vis-tfrag"}],[94240848,{"idx":80,"name":"palace-break-girder01","tpage_name":"intpfall-vis-tfrag"}],[94240847,{"idx":79,"name":"ctyp-metal-01","tpage_name":"intpfall-vis-tfrag"}],[94240846,{"idx":78,"name":"city-lowres-damaged-01","tpage_name":"intpfall-vis-tfrag"}],[94240845,{"idx":77,"name":"tcab-plat-edg-01","tpage_name":"intpfall-vis-tfrag"}],[94240844,{"idx":76,"name":"tcab-beam01","tpage_name":"intpfall-vis-tfrag"}],[94240843,{"idx":75,"name":"citywide-hangmetal","tpage_name":"intpfall-vis-tfrag"}],[94240842,{"idx":74,"name":"palcab-lowres-background-trees-edge","tpage_name":"intpfall-vis-tfrag"}],[94240841,{"idx":73,"name":"palcab-lowres-background-trees2","tpage_name":"intpfall-vis-tfrag"}],[94240840,{"idx":72,"name":"palcab-swingp-base","tpage_name":"intpfall-vis-tfrag"}],[94240838,{"idx":70,"name":"palcab-lowres-background-mount-build-02","tpage_name":"intpfall-vis-tfrag"}],[94240837,{"idx":69,"name":"palcab-lowres-background-mount-build-01","tpage_name":"intpfall-vis-tfrag"}],[75563035,{"idx":27,"name":"sig-skirts-02","tpage_name":"lsig-pris2"}],[75563034,{"idx":26,"name":"sig-skirts","tpage_name":"lsig-pris2"}],[75563033,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"lsig-pris2"}],[75563032,{"idx":24,"name":"sig-shoetop","tpage_name":"lsig-pris2"}],[75563031,{"idx":23,"name":"sig-shoebottom","tpage_name":"lsig-pris2"}],[60620871,{"idx":71,"name":"minc-rust-pipe-06","tpage_name":"minea-vis-pris"}],[75563030,{"idx":22,"name":"sig-sac","tpage_name":"lsig-pris2"}],[75563029,{"idx":21,"name":"sig-metal-dirty","tpage_name":"lsig-pris2"}],[75563027,{"idx":19,"name":"sig-lens","tpage_name":"lsig-pris2"}],[75563026,{"idx":18,"name":"sig-horn","tpage_name":"lsig-pris2"}],[75563025,{"idx":17,"name":"sig-headgear","tpage_name":"lsig-pris2"}],[75563024,{"idx":16,"name":"sig-gun-05","tpage_name":"lsig-pris2"}],[75563023,{"idx":15,"name":"sig-gun-04","tpage_name":"lsig-pris2"}],[75563022,{"idx":14,"name":"sig-gun-03","tpage_name":"lsig-pris2"}],[75563021,{"idx":13,"name":"sig-gun-02","tpage_name":"lsig-pris2"}],[75563020,{"idx":12,"name":"sig-gun-01","tpage_name":"lsig-pris2"}],[75563019,{"idx":11,"name":"sig-glovetop","tpage_name":"lsig-pris2"}],[75563018,{"idx":10,"name":"sig-glove","tpage_name":"lsig-pris2"}],[75563017,{"idx":9,"name":"sig-gem-01","tpage_name":"lsig-pris2"}],[75563016,{"idx":8,"name":"sig-flask","tpage_name":"lsig-pris2"}],[75563015,{"idx":7,"name":"sig-facert","tpage_name":"lsig-pris2"}],[75563014,{"idx":6,"name":"sig-faceleft","tpage_name":"lsig-pris2"}],[75563013,{"idx":5,"name":"sig-eyelid","tpage_name":"lsig-pris2"}],[75563012,{"idx":4,"name":"sig-eye","tpage_name":"lsig-pris2"}],[75563011,{"idx":3,"name":"sig-belt","tpage_name":"lsig-pris2"}],[75563010,{"idx":2,"name":"environment-oldmetal","tpage_name":"lsig-pris2"}],[49414230,{"idx":86,"name":"squid-drabgun","tpage_name":"sewc-vis-pris"}],[75563009,{"idx":1,"name":"charHOLD","tpage_name":"lsig-pris2"}],[49414229,{"idx":85,"name":"wire-metal","tpage_name":"sewc-vis-pris"}],[75563008,{"idx":0,"name":"bam-eyelight","tpage_name":"lsig-pris2"}],[49414228,{"idx":84,"name":"squid-tubes","tpage_name":"sewc-vis-pris"}],[75038739,{"idx":19,"name":"nwasp-skin-03","tpage_name":"sewl-vis-pris"}],[71303199,{"idx":31,"name":"king-arm","tpage_name":"ldamsig-pris2"}],[75038738,{"idx":18,"name":"nwasp-skin-02","tpage_name":"sewl-vis-pris"}],[71303198,{"idx":30,"name":"vin-teeth-01","tpage_name":"ldamsig-pris2"}],[75038737,{"idx":17,"name":"nwasp-skin-01","tpage_name":"sewl-vis-pris"}],[71303197,{"idx":29,"name":"sig-undergarments","tpage_name":"ldamsig-pris2"}],[75038736,{"idx":16,"name":"nwasp-metal-01","tpage_name":"sewl-vis-pris"}],[71303196,{"idx":28,"name":"sig-skirts-03","tpage_name":"ldamsig-pris2"}],[75038735,{"idx":15,"name":"nwasp-hose","tpage_name":"sewl-vis-pris"}],[55115855,{"idx":79,"name":"wascityskeet-center-green","tpage_name":"wascityb-vis-tfrag"}],[71303195,{"idx":27,"name":"sig-skirts-02","tpage_name":"ldamsig-pris2"}],[75038734,{"idx":14,"name":"nwasp-gem-01","tpage_name":"sewl-vis-pris"}],[55115854,{"idx":78,"name":"wascityskeet-center-blue","tpage_name":"wascityb-vis-tfrag"}],[71303194,{"idx":26,"name":"sig-skirts","tpage_name":"ldamsig-pris2"}],[75038733,{"idx":13,"name":"nwasp-eye-01","tpage_name":"sewl-vis-pris"}],[55115853,{"idx":77,"name":"wascityskeet-clay-gold","tpage_name":"wascityb-vis-tfrag"}],[71303193,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"ldamsig-pris2"}],[75038732,{"idx":12,"name":"grunt-skin-03","tpage_name":"sewl-vis-pris"}],[55115852,{"idx":76,"name":"wascityskeet-clay-silver","tpage_name":"wascityb-vis-tfrag"}],[71303192,{"idx":24,"name":"sig-shoetop","tpage_name":"ldamsig-pris2"}],[75038731,{"idx":11,"name":"grunt-skin-02","tpage_name":"sewl-vis-pris"}],[55115851,{"idx":75,"name":"wascity-satellite-piece-01","tpage_name":"wascityb-vis-tfrag"}],[71303191,{"idx":23,"name":"sig-shoebottom","tpage_name":"ldamsig-pris2"}],[75038729,{"idx":9,"name":"grunt-metal-01","tpage_name":"sewl-vis-pris"}],[55115849,{"idx":73,"name":"wascityskeet-blade","tpage_name":"wascityb-vis-tfrag"}],[71303189,{"idx":21,"name":"sig-metal-dirty","tpage_name":"ldamsig-pris2"}],[75038727,{"idx":7,"name":"grunt-gem-01","tpage_name":"sewl-vis-pris"}],[55115847,{"idx":71,"name":"wascityskeet-center","tpage_name":"wascityb-vis-tfrag"}],[71303187,{"idx":19,"name":"sig-lens","tpage_name":"ldamsig-pris2"}],[75038726,{"idx":6,"name":"grunt-eye-01","tpage_name":"sewl-vis-pris"}],[55115846,{"idx":70,"name":"environment-oldmetal","tpage_name":"wascityb-vis-tfrag"}],[71303186,{"idx":18,"name":"sig-horn","tpage_name":"ldamsig-pris2"}],[75038725,{"idx":5,"name":"airlock-door-cog1","tpage_name":"sewl-vis-pris"}],[71303185,{"idx":17,"name":"sig-headgear","tpage_name":"ldamsig-pris2"}],[75038724,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewl-vis-pris"}],[55115844,{"idx":68,"name":"city-slum-wood-plain","tpage_name":"wascityb-vis-tfrag"}],[71303184,{"idx":16,"name":"sig-gun-05","tpage_name":"ldamsig-pris2"}],[73793544,{"idx":8,"name":"sewer-water-wave-01-g","tpage_name":"sewg-vis-water"}],[75038723,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewl-vis-pris"}],[71303183,{"idx":15,"name":"sig-gun-04","tpage_name":"ldamsig-pris2"}],[75038722,{"idx":2,"name":"airlock-door-main","tpage_name":"sewl-vis-pris"}],[71303182,{"idx":14,"name":"sig-gun-03","tpage_name":"ldamsig-pris2"}],[75038721,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewl-vis-pris"}],[71303181,{"idx":13,"name":"sig-gun-02","tpage_name":"ldamsig-pris2"}],[73793541,{"idx":5,"name":"sewer-water-wave-01-g-dest","tpage_name":"sewg-vis-water"}],[75038720,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewl-vis-pris"}],[71303180,{"idx":12,"name":"sig-gun-01","tpage_name":"ldamsig-pris2"}],[73793540,{"idx":4,"name":"sewer-water-still-01-g-dest","tpage_name":"sewg-vis-water"}],[106233928,{"idx":72,"name":"jakchires-teeth","tpage_name":"mined-pris"}],[118685728,{"idx":32,"name":"king-wrap","tpage_name":"ljkcdmkl-pris2"}],[121176088,{"idx":24,"name":"jakc-scarf","tpage_name":"hiphog-vis-pris"}],[126156808,{"idx":8,"name":"sewer-metal-trim-02","tpage_name":"sewo-vis-tfrag"}],[106233927,{"idx":71,"name":"jakchires-shoeteop","tpage_name":"mined-pris"}],[118685727,{"idx":31,"name":"king-vestback","tpage_name":"ljkcdmkl-pris2"}],[121176087,{"idx":23,"name":"jakc-lens","tpage_name":"hiphog-vis-pris"}],[126156807,{"idx":7,"name":"sewer-pipe-rim-05b","tpage_name":"sewo-vis-tfrag"}],[106233926,{"idx":70,"name":"jakchires-shoemetal","tpage_name":"mined-pris"}],[118685726,{"idx":30,"name":"king-vest","tpage_name":"ljkcdmkl-pris2"}],[121176086,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"hiphog-vis-pris"}],[126156806,{"idx":6,"name":"sewer-concrete-edge-02","tpage_name":"sewo-vis-tfrag"}],[74973187,{"idx":3,"name":"sewer-hang-moss-01","tpage_name":"sewl-vis-shrub"}],[73728007,{"idx":7,"name":"sewer-plate-04","tpage_name":"sewh-vis-tfrag"}],[35127427,{"idx":131,"name":"jakchires-shoeteop","tpage_name":"factorya-pris"}],[71237647,{"idx":15,"name":"king-hand","tpage_name":"ldampeck-pris2"}],[106233925,{"idx":69,"name":"jakchires-shoebottom","tpage_name":"mined-pris"}],[118685725,{"idx":29,"name":"king-thinstrap","tpage_name":"ljkcdmkl-pris2"}],[121176085,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"hiphog-vis-pris"}],[126156805,{"idx":5,"name":"sewer-scaffold-01","tpage_name":"sewo-vis-tfrag"}],[74973186,{"idx":2,"name":"sewer-moss-01","tpage_name":"sewl-vis-shrub"}],[73728006,{"idx":6,"name":"sewer-block-01","tpage_name":"sewh-vis-tfrag"}],[35127426,{"idx":130,"name":"jakchires-shoemetal","tpage_name":"factorya-pris"}],[71237646,{"idx":14,"name":"king-hair","tpage_name":"ldampeck-pris2"}],[106233924,{"idx":68,"name":"jakchires-precarmor-01","tpage_name":"mined-pris"}],[118685724,{"idx":28,"name":"king-teeth","tpage_name":"ljkcdmkl-pris2"}],[121176084,{"idx":20,"name":"jakc-armor","tpage_name":"hiphog-vis-pris"}],[126156804,{"idx":4,"name":"sewer-hall-light-01","tpage_name":"sewo-vis-tfrag"}],[74973185,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewl-vis-shrub"}],[73728005,{"idx":5,"name":"sewer-metal-block-01","tpage_name":"sewh-vis-tfrag"}],[35127425,{"idx":129,"name":"jakchires-shoebottom","tpage_name":"factorya-pris"}],[71237645,{"idx":13,"name":"king-greenmetalplain","tpage_name":"ldampeck-pris2"}],[106233923,{"idx":67,"name":"jakchires-pants","tpage_name":"mined-pris"}],[118685723,{"idx":27,"name":"king-skirt-b","tpage_name":"ljkcdmkl-pris2"}],[121176083,{"idx":19,"name":"environment-oldmetal","tpage_name":"hiphog-vis-pris"}],[126156803,{"idx":3,"name":"sewer-plate-05","tpage_name":"sewo-vis-tfrag"}],[74973184,{"idx":0,"name":"sewer-nut","tpage_name":"sewl-vis-shrub"}],[73728004,{"idx":4,"name":"sewer-plate-05-hitweak","tpage_name":"sewh-vis-tfrag"}],[35127424,{"idx":128,"name":"jakchires-precarmor-01","tpage_name":"factorya-pris"}],[71237644,{"idx":12,"name":"king-greenmetal","tpage_name":"ldampeck-pris2"}],[74907727,{"idx":79,"name":"sewer-plate-01-hitweak","tpage_name":"sewl-vis-tfrag"}],[96075787,{"idx":11,"name":"jakchires-arm","tpage_name":"ljakc-pris"}],[74907726,{"idx":78,"name":"sewer-pipe-rim-05b-hitweak","tpage_name":"sewl-vis-tfrag"}],[96075786,{"idx":10,"name":"jakc-wristband-a2","tpage_name":"ljakc-pris"}],[74907725,{"idx":77,"name":"sewer-scaffold-03-hitweak","tpage_name":"sewl-vis-tfrag"}],[96075785,{"idx":9,"name":"jakc-wraps","tpage_name":"ljakc-pris"}],[74907724,{"idx":76,"name":"sewer-brick-block-04-highertweak","tpage_name":"sewl-vis-tfrag"}],[96075784,{"idx":8,"name":"jakc-waistband2","tpage_name":"ljakc-pris"}],[74907723,{"idx":75,"name":"sewer-metal-block-05","tpage_name":"sewl-vis-tfrag"}],[96075783,{"idx":7,"name":"jakc-scarf","tpage_name":"ljakc-pris"}],[74907722,{"idx":74,"name":"strip-black","tpage_name":"sewl-vis-tfrag"}],[96075782,{"idx":6,"name":"jakc-lens","tpage_name":"ljakc-pris"}],[74907721,{"idx":73,"name":"sewer-metal-floor-01","tpage_name":"sewl-vis-tfrag"}],[96075781,{"idx":5,"name":"jakc-gogglemetal","tpage_name":"ljakc-pris"}],[74907720,{"idx":72,"name":"sewer-black","tpage_name":"sewl-vis-tfrag"}],[96075780,{"idx":4,"name":"jakc-chestplate-straps","tpage_name":"ljakc-pris"}],[97320960,{"idx":0,"name":"hud-arena-token","tpage_name":"wasstadb-minimap"}],[111869967,{"idx":15,"name":"stadiumb-hud-ord-korean","tpage_name":"wasleapr-minimap"}],[111869966,{"idx":14,"name":"stadiumb-hud-ord-er","tpage_name":"wasleapr-minimap"}],[111869965,{"idx":13,"name":"stadiumb-hud-ord-e","tpage_name":"wasleapr-minimap"}],[74907672,{"idx":24,"name":"sewer-lip-01-hitweak","tpage_name":"sewl-vis-tfrag"}],[74907671,{"idx":23,"name":"sewer-metal-03","tpage_name":"sewl-vis-tfrag"}],[74907670,{"idx":22,"name":"sewer-plate-05","tpage_name":"sewl-vis-tfrag"}],[74907669,{"idx":21,"name":"sewer-pipe-rim-06","tpage_name":"sewl-vis-tfrag"}],[74907667,{"idx":19,"name":"sewer-metal-trim-01","tpage_name":"sewl-vis-tfrag"}],[74907666,{"idx":18,"name":"sewer-bolt-side-02","tpage_name":"sewl-vis-tfrag"}],[74907665,{"idx":17,"name":"sewer-bolt-side-01","tpage_name":"sewl-vis-tfrag"}],[74907662,{"idx":14,"name":"sewer-metal-block-06","tpage_name":"sewl-vis-tfrag"}],[106168400,{"idx":80,"name":"sewer-red-light-01","tpage_name":"mined-tfrag"}],[118620200,{"idx":40,"name":"klever-bolt","tpage_name":"ljkcdmkl-pris"}],[121110560,{"idx":32,"name":"hip-temp-02","tpage_name":"hiphog-vis-tfrag"}],[74907661,{"idx":13,"name":"sewer-pipe-02","tpage_name":"sewl-vis-tfrag"}],[106168399,{"idx":79,"name":"minc-green-paint-02","tpage_name":"mined-tfrag"}],[118620199,{"idx":39,"name":"klever-blackstrap","tpage_name":"ljkcdmkl-pris"}],[121110559,{"idx":31,"name":"hip-tbooth01","tpage_name":"hiphog-vis-tfrag"}],[74907660,{"idx":12,"name":"common-black","tpage_name":"sewl-vis-tfrag"}],[106168398,{"idx":78,"name":"minc-rust-bars-01","tpage_name":"mined-tfrag"}],[118620198,{"idx":38,"name":"klever-armor-02","tpage_name":"ljkcdmkl-pris"}],[121110558,{"idx":30,"name":"hip-troofmetal01","tpage_name":"hiphog-vis-tfrag"}],[74907659,{"idx":11,"name":"sewer-pipe-rim-07-hitweak","tpage_name":"sewl-vis-tfrag"}],[106168397,{"idx":77,"name":"cav-metdoor-02","tpage_name":"mined-tfrag"}],[118620197,{"idx":37,"name":"klever-armor-01","tpage_name":"ljkcdmkl-pris"}],[121110557,{"idx":29,"name":"hip-tredmetal04","tpage_name":"hiphog-vis-tfrag"}],[74907658,{"idx":10,"name":"sewer-scaffold-03","tpage_name":"sewl-vis-tfrag"}],[74907657,{"idx":9,"name":"sewer-scaffold-02","tpage_name":"sewl-vis-tfrag"}],[74907656,{"idx":8,"name":"sewer-metal-block-07","tpage_name":"sewl-vis-tfrag"}],[73662476,{"idx":12,"name":"sewer-shrub-pitting-01","tpage_name":"sewi-vis-shrub"}],[74907655,{"idx":7,"name":"sewer-brick-block-09","tpage_name":"sewl-vis-tfrag"}],[73662475,{"idx":11,"name":"sewer-plate-02","tpage_name":"sewi-vis-shrub"}],[74907654,{"idx":6,"name":"sewer-pipe-rim-08","tpage_name":"sewl-vis-tfrag"}],[74907653,{"idx":5,"name":"sewer-small-light-01","tpage_name":"sewl-vis-tfrag"}],[73662473,{"idx":9,"name":"sewer-plate-05","tpage_name":"sewi-vis-shrub"}],[74907652,{"idx":4,"name":"sewer-nut-01","tpage_name":"sewl-vis-tfrag"}],[73662472,{"idx":8,"name":"sew-mine-b-body","tpage_name":"sewi-vis-shrub"}],[74907651,{"idx":3,"name":"sewer-pipe-rim-05b","tpage_name":"sewl-vis-tfrag"}],[73662471,{"idx":7,"name":"sew-gasstep-tube","tpage_name":"sewi-vis-shrub"}],[74907650,{"idx":2,"name":"sewer-concrete-edge-02","tpage_name":"sewl-vis-tfrag"}],[73662470,{"idx":6,"name":"sew-moving-stepb-grate","tpage_name":"sewi-vis-shrub"}],[74907649,{"idx":1,"name":"sewer-scaffold-01","tpage_name":"sewl-vis-tfrag"}],[74907648,{"idx":0,"name":"sewer-metal-block-04","tpage_name":"sewl-vis-tfrag"}],[73662468,{"idx":4,"name":"sewer-shrub-rust-01","tpage_name":"sewi-vis-shrub"}],[74776606,{"idx":30,"name":"nfish-teeth-01","tpage_name":"sewm-vis-pris"}],[61079626,{"idx":74,"name":"roboguard-shouldershield","tpage_name":"minec-vis-pris"}],[74776605,{"idx":29,"name":"nfish-skin-01","tpage_name":"sewm-vis-pris"}],[61079625,{"idx":73,"name":"roboguard-headshield","tpage_name":"minec-vis-pris"}],[74776604,{"idx":28,"name":"nfish-metalspike-01","tpage_name":"sewm-vis-pris"}],[61079624,{"idx":72,"name":"kg-grunt-rim-03","tpage_name":"minec-vis-pris"}],[74776603,{"idx":27,"name":"nfish-metal-01","tpage_name":"sewm-vis-pris"}],[61079623,{"idx":71,"name":"kg-grunt-rim-02","tpage_name":"minec-vis-pris"}],[74776602,{"idx":26,"name":"nfish-hose-02","tpage_name":"sewm-vis-pris"}],[61079622,{"idx":70,"name":"kg-grunt-rim-01","tpage_name":"minec-vis-pris"}],[74776601,{"idx":25,"name":"nfish-hose","tpage_name":"sewm-vis-pris"}],[61079621,{"idx":69,"name":"kg-grunt-cable-01","tpage_name":"minec-vis-pris"}],[74776600,{"idx":24,"name":"nfish-eye-01","tpage_name":"sewm-vis-pris"}],[61079620,{"idx":68,"name":"environment-oldmetal","tpage_name":"minec-vis-pris"}],[74776599,{"idx":23,"name":"sewer-screw-02","tpage_name":"sewm-vis-pris"}],[61079619,{"idx":67,"name":"cguardgame-metallight-01small","tpage_name":"minec-vis-pris"}],[74776598,{"idx":22,"name":"sewer-plate-04","tpage_name":"sewm-vis-pris"}],[61079618,{"idx":66,"name":"cguardgame-metaledark-02","tpage_name":"minec-vis-pris"}],[74776597,{"idx":21,"name":"sewer-pipe-rim-07","tpage_name":"sewm-vis-pris"}],[61079617,{"idx":65,"name":"cguard1-lens","tpage_name":"minec-vis-pris"}],[74776596,{"idx":20,"name":"sewer-metal-floor-02","tpage_name":"sewm-vis-pris"}],[61079616,{"idx":64,"name":"cguard1-guntube","tpage_name":"minec-vis-pris"}],[74776595,{"idx":19,"name":"sewer-metal-block-04","tpage_name":"sewm-vis-pris"}],[61079615,{"idx":63,"name":"cguard1-gunmetaldark2","tpage_name":"minec-vis-pris"}],[74776594,{"idx":18,"name":"sew-saw-part2","tpage_name":"sewm-vis-pris"}],[61079614,{"idx":62,"name":"cguard1-chestplate","tpage_name":"minec-vis-pris"}],[74776593,{"idx":17,"name":"sew-saw-lens","tpage_name":"sewm-vis-pris"}],[61079613,{"idx":61,"name":"cguard1-backmetal","tpage_name":"minec-vis-pris"}],[74776592,{"idx":16,"name":"sew-laserturret-pole","tpage_name":"sewm-vis-pris"}],[61079612,{"idx":60,"name":"bam-eyelight","tpage_name":"minec-vis-pris"}],[74776591,{"idx":15,"name":"sew-gun-rim-04","tpage_name":"sewm-vis-pris"}],[74776590,{"idx":14,"name":"sew-gun-drum-01","tpage_name":"sewm-vis-pris"}],[91357211,{"idx":27,"name":"klever-skirtdark","tpage_name":"lkleever-pris"}],[74776589,{"idx":13,"name":"sew-fan-canopy","tpage_name":"sewm-vis-pris"}],[91357210,{"idx":26,"name":"klever-shoebottom","tpage_name":"lkleever-pris"}],[74776588,{"idx":12,"name":"sew-fan-basetop","tpage_name":"sewm-vis-pris"}],[91357209,{"idx":25,"name":"klever-shoe","tpage_name":"lkleever-pris"}],[74776587,{"idx":11,"name":"sewer-plate-05","tpage_name":"sewm-vis-pris"}],[91357204,{"idx":20,"name":"klever-gunmetal-03","tpage_name":"lkleever-pris"}],[71434324,{"idx":84,"name":"wstd-fight-plat-lrg-floor-05","tpage_name":"wasstadc-tfrag"}],[74776582,{"idx":6,"name":"sewer-metal-01","tpage_name":"sewm-vis-pris"}],[91357202,{"idx":18,"name":"klever-gunmetal-01","tpage_name":"lkleever-pris"}],[71434322,{"idx":82,"name":"wstd-scaffold-wall-03","tpage_name":"wasstadc-tfrag"}],[74776580,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewm-vis-pris"}],[91357201,{"idx":17,"name":"klever-bolt","tpage_name":"lkleever-pris"}],[71434321,{"idx":81,"name":"wstd-fight-plat-floor-03","tpage_name":"wasstadc-tfrag"}],[74776579,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewm-vis-pris"}],[73531399,{"idx":7,"name":"sewer-water-wave-01-i-dest","tpage_name":"sewi-vis-water"}],[74711049,{"idx":9,"name":"sewer-waterfall-02-m","tpage_name":"sewm-vis-water"}],[73465869,{"idx":13,"name":"sewer-scaffold-02","tpage_name":"sewk-vis-tfrag"}],[48562269,{"idx":93,"name":"saberfish-nail-01","tpage_name":"sewa-vis-pris"}],[57278529,{"idx":65,"name":"wstlander-01-wrap","tpage_name":"waswide-vis-pris"}],[67239969,{"idx":33,"name":"vin-pipe-03","tpage_name":"vinroom-vis-tfrag"}],[91291664,{"idx":16,"name":"gun-building-brick-01","tpage_name":"gungame-vis-tfrag"}],[95027204,{"idx":4,"name":"sig-eye","tpage_name":"lsigjakc-pris2"}],[73859144,{"idx":72,"name":"sewer-stone-newarch-01","tpage_name":"sewg-vis-tfrag"}],[74711042,{"idx":2,"name":"sewer-water-highlight-01-m-dest","tpage_name":"sewm-vis-water"}],[73465862,{"idx":6,"name":"sewer-concrete-edge-02","tpage_name":"sewk-vis-tfrag"}],[57278522,{"idx":58,"name":"wstlander-01-leatherstrap","tpage_name":"waswide-vis-pris"}],[67239962,{"idx":26,"name":"vin-panel-07","tpage_name":"vinroom-vis-tfrag"}],[91291662,{"idx":14,"name":"gun-bridge-brace01","tpage_name":"gungame-vis-tfrag"}],[95027202,{"idx":2,"name":"environment-oldmetal","tpage_name":"lsigjakc-pris2"}],[73859142,{"idx":70,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewg-vis-tfrag"}],[74711040,{"idx":0,"name":"sewer-water-01-m-dest","tpage_name":"sewm-vis-water"}],[73465860,{"idx":4,"name":"sewer-metal-block-06","tpage_name":"sewk-vis-tfrag"}],[48562260,{"idx":84,"name":"jakc-scarfhanging","tpage_name":"sewa-vis-pris"}],[57278520,{"idx":56,"name":"wstlander-01-gunmetal-04","tpage_name":"waswide-vis-pris"}],[67239960,{"idx":24,"name":"vin-panel-05","tpage_name":"vinroom-vis-tfrag"}],[74645515,{"idx":11,"name":"sewer-pipe-small-02","tpage_name":"sewm-vis-shrub"}],[75890695,{"idx":7,"name":"onin-bottle-3-label","tpage_name":"onintent-tfrag"}],[60948535,{"idx":55,"name":"min-env-mar-01","tpage_name":"minec-vis-tfrag"}],[74645514,{"idx":10,"name":"sewer-pipe-rim-02","tpage_name":"sewm-vis-shrub"}],[75890694,{"idx":6,"name":"onin-bottle-3","tpage_name":"onintent-tfrag"}],[74645513,{"idx":9,"name":"sewer-pipe-rim-09","tpage_name":"sewm-vis-shrub"}],[75890693,{"idx":5,"name":"onin-bottle-2","tpage_name":"onintent-tfrag"}],[60948533,{"idx":53,"name":"minc-safe-plate-02","tpage_name":"minec-vis-tfrag"}],[74645512,{"idx":8,"name":"sewer-pipe-01","tpage_name":"sewm-vis-shrub"}],[75890692,{"idx":4,"name":"onin-bottle-1","tpage_name":"onintent-tfrag"}],[74645511,{"idx":7,"name":"sewer-plate-05","tpage_name":"sewm-vis-shrub"}],[75890691,{"idx":3,"name":"onin-basket2","tpage_name":"onintent-tfrag"}],[74645510,{"idx":6,"name":"sewer-metal-01","tpage_name":"sewm-vis-shrub"}],[75890690,{"idx":2,"name":"onin-basket-rim","tpage_name":"onintent-tfrag"}],[74645509,{"idx":5,"name":"sew-jump-pad-grate","tpage_name":"sewm-vis-shrub"}],[75890689,{"idx":1,"name":"onin-basket","tpage_name":"onintent-tfrag"}],[60948529,{"idx":49,"name":"minc-rocky-cliff-01","tpage_name":"minec-vis-tfrag"}],[74645508,{"idx":4,"name":"sewer-pipe-small-01","tpage_name":"sewm-vis-shrub"}],[75890688,{"idx":0,"name":"onin-bamboo-mat","tpage_name":"onintent-tfrag"}],[60948528,{"idx":48,"name":"minc-slab-01","tpage_name":"minec-vis-tfrag"}],[74645507,{"idx":3,"name":"sewer-shrub-rust-01","tpage_name":"sewm-vis-shrub"}],[60948527,{"idx":47,"name":"minc-rocky-cliff-02","tpage_name":"minec-vis-tfrag"}],[74645506,{"idx":2,"name":"sewer-hang-moss-01","tpage_name":"sewm-vis-shrub"}],[60948526,{"idx":46,"name":"minc-blue-paint-rust05","tpage_name":"minec-vis-tfrag"}],[74645505,{"idx":1,"name":"sewer-moss-01","tpage_name":"sewm-vis-shrub"}],[60948525,{"idx":45,"name":"minc-rocky-ground-02","tpage_name":"minec-vis-tfrag"}],[74645504,{"idx":0,"name":"sewer-nut","tpage_name":"sewm-vis-shrub"}],[60948524,{"idx":44,"name":"minc-rocky-ground-01","tpage_name":"minec-vis-tfrag"}],[91160675,{"idx":99,"name":"jakchires-jacket","tpage_name":"gungame-vis-pris"}],[104857655,{"idx":55,"name":"intcept-tread01","tpage_name":"oasiscst-pris"}],[112328735,{"idx":31,"name":"jakc-wristband-a2","tpage_name":"wascast-pris"}],[91160672,{"idx":96,"name":"jakchires-glovetop","tpage_name":"gungame-vis-pris"}],[112328732,{"idx":28,"name":"jakc-skirt","tpage_name":"wascast-pris"}],[104857652,{"idx":52,"name":"jakc-scarfhanging","tpage_name":"oasiscst-pris"}],[74580050,{"idx":82,"name":"sewer-metal-02","tpage_name":"sewm-vis-tfrag"}],[90767390,{"idx":30,"name":"des-temple-stone-01","tpage_name":"deserth-vis-tfrag"}],[99483650,{"idx":2,"name":"for-egg-bulbtop-01","tpage_name":"lformach-vis-pris"}],[88277030,{"idx":38,"name":"cguard-air-train-belt","tpage_name":"introcst-tfrag"}],[91160671,{"idx":95,"name":"jakchires-facert","tpage_name":"gungame-vis-pris"}],[112328731,{"idx":27,"name":"jakc-scarfhanging","tpage_name":"wascast-pris"}],[104857651,{"idx":51,"name":"jakc-skirt","tpage_name":"oasiscst-pris"}],[74580049,{"idx":81,"name":"sewer-rim-01","tpage_name":"sewm-vis-tfrag"}],[90767389,{"idx":29,"name":"des-totem-stone-eye","tpage_name":"deserth-vis-tfrag"}],[99483649,{"idx":1,"name":"for-egg-bulb-01","tpage_name":"lformach-vis-pris"}],[88277029,{"idx":37,"name":"cguard-air-train-backdoor","tpage_name":"introcst-tfrag"}],[91160670,{"idx":94,"name":"jakchires-facelft","tpage_name":"gungame-vis-pris"}],[112328730,{"idx":26,"name":"jakc-scarf","tpage_name":"wascast-pris"}],[104857650,{"idx":50,"name":"jakchires-teeth","tpage_name":"oasiscst-pris"}],[74580048,{"idx":80,"name":"sewer-panel-01","tpage_name":"sewm-vis-tfrag"}],[90767388,{"idx":28,"name":"des-totem-stone-trim","tpage_name":"deserth-vis-tfrag"}],[99483648,{"idx":0,"name":"for-egg-bottom","tpage_name":"lformach-vis-pris"}],[88277028,{"idx":36,"name":"cguard-air-train-inside-plain","tpage_name":"introcst-tfrag"}],[91160669,{"idx":93,"name":"jakchires-eyelid","tpage_name":"gungame-vis-pris"}],[104857649,{"idx":49,"name":"jakchires-shoeteop","tpage_name":"oasiscst-pris"}],[112328729,{"idx":25,"name":"jakc-lens","tpage_name":"wascast-pris"}],[74580047,{"idx":79,"name":"sewer-block-01-hitweak","tpage_name":"sewm-vis-tfrag"}],[88277027,{"idx":35,"name":"cguard-air-train-hatch-door","tpage_name":"introcst-tfrag"}],[91160668,{"idx":92,"name":"jakchires-eyebrow","tpage_name":"gungame-vis-pris"}],[104857648,{"idx":48,"name":"jakchires-shoemetal","tpage_name":"oasiscst-pris"}],[112328728,{"idx":24,"name":"jakc-gogglemetal","tpage_name":"wascast-pris"}],[74580046,{"idx":78,"name":"sewer-brick-block-04-hitweak","tpage_name":"sewm-vis-tfrag"}],[88277026,{"idx":34,"name":"cguard-air-train-gold","tpage_name":"introcst-tfrag"}],[74579995,{"idx":27,"name":"sewer-metal-trim-01","tpage_name":"sewm-vis-tfrag"}],[60883015,{"idx":71,"name":"mine-under-metal-01","tpage_name":"mineb-vis-pris"}],[74579989,{"idx":21,"name":"sewer-rubber-rim-01","tpage_name":"sewm-vis-tfrag"}],[79560709,{"idx":5,"name":"des-rock-shrub-01","tpage_name":"wasintro-vis-shrub"}],[60883009,{"idx":65,"name":"mine-gray-metal-01","tpage_name":"mineb-vis-pris"}],[74579988,{"idx":20,"name":"sewer-plate-02","tpage_name":"sewm-vis-tfrag"}],[60883008,{"idx":64,"name":"mine-decal-metal-01","tpage_name":"mineb-vis-pris"}],[91160595,{"idx":19,"name":"environment-oldmetal","tpage_name":"gungame-vis-pris"}],[73728075,{"idx":75,"name":"sewer-scaffold-03-hitweak","tpage_name":"sewh-vis-tfrag"}],[35127495,{"idx":199,"name":"squid-drabgun","tpage_name":"factorya-pris"}],[91160594,{"idx":18,"name":"daxtertuft","tpage_name":"gungame-vis-pris"}],[73728074,{"idx":74,"name":"sewer-brick-block-04-highertweak","tpage_name":"sewh-vis-tfrag"}],[91160593,{"idx":17,"name":"daxterteeth","tpage_name":"gungame-vis-pris"}],[73728073,{"idx":73,"name":"sewer-stone-newarch-01","tpage_name":"sewh-vis-tfrag"}],[74579971,{"idx":3,"name":"sewer-block-02","tpage_name":"sewm-vis-tfrag"}],[60882991,{"idx":47,"name":"min-rust-bars-01","tpage_name":"mineb-vis-pris"}],[91160590,{"idx":14,"name":"daxterhelmetplain","tpage_name":"gungame-vis-pris"}],[73728070,{"idx":70,"name":"sewer-flat-pipe-01-hitweak","tpage_name":"sewh-vis-tfrag"}],[35127490,{"idx":194,"name":"errocyber-eyelid","tpage_name":"factorya-pris"}],[74579968,{"idx":0,"name":"sewer-plate-05","tpage_name":"sewm-vis-tfrag"}],[60882988,{"idx":44,"name":"min-blue-paint-rust02","tpage_name":"mineb-vis-pris"}],[91029523,{"idx":19,"name":"gun-cita-bit-03","tpage_name":"gungame-sprite"}],[38731963,{"idx":187,"name":"male1_01","tpage_name":"wasstada-sprite"}],[73597003,{"idx":75,"name":"sewer-mantel-02","tpage_name":"sewi-vis-tfrag"}],[92274703,{"idx":15,"name":"vehicle-tread-blur-02","tpage_name":"desrace2-pris"}],[74448901,{"idx":5,"name":"sewer-shrub-pitting-01","tpage_name":"sewj-vis-shrub"}],[74448897,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewj-vis-shrub"}],[74448896,{"idx":0,"name":"sewer-nut","tpage_name":"sewj-vis-shrub"}],[74383434,{"idx":74,"name":"sewer-metal-floor-01","tpage_name":"sewj-vis-tfrag"}],[74383433,{"idx":73,"name":"strip-black","tpage_name":"sewj-vis-tfrag"}],[90570773,{"idx":21,"name":"des-cliff-trans-01","tpage_name":"desertd-vis-tfrag"}],[74383432,{"idx":72,"name":"sewer-black","tpage_name":"sewj-vis-tfrag"}],[90570772,{"idx":20,"name":"des-cliff-top-01","tpage_name":"desertd-vis-tfrag"}],[94765056,{"idx":0,"name":"hud-gladiator","tpage_name":"wasstadc-minimap"}],[38731956,{"idx":180,"name":"femcher2_15","tpage_name":"wasstada-sprite"}],[73596996,{"idx":68,"name":"sewer-metal-block-05","tpage_name":"sewi-vis-tfrag"}],[92274696,{"idx":8,"name":"vehicle-brace-pipe-01","tpage_name":"desrace2-pris"}],[74383421,{"idx":61,"name":"sewer-big-brace-trim-02","tpage_name":"sewj-vis-tfrag"}],[90570761,{"idx":9,"name":"des-wasmetal02","tpage_name":"desertd-vis-tfrag"}],[91815941,{"idx":5,"name":"citwide-crimson-gold","tpage_name":"ctyinda-vis-pris"}],[74383420,{"idx":60,"name":"sewer-big-brace-trim-01","tpage_name":"sewj-vis-tfrag"}],[90570760,{"idx":8,"name":"des-plate-05","tpage_name":"desertd-vis-tfrag"}],[91815940,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"ctyinda-vis-pris"}],[74383419,{"idx":59,"name":"sewer-plate-03-hitweak","tpage_name":"sewj-vis-tfrag"}],[90570759,{"idx":7,"name":"des-wasmetal19","tpage_name":"desertd-vis-tfrag"}],[91815939,{"idx":3,"name":"airlock-door-metal2","tpage_name":"ctyinda-vis-pris"}],[74383417,{"idx":57,"name":"sewer-round-03","tpage_name":"sewj-vis-tfrag"}],[90570757,{"idx":5,"name":"des-wasmetal22","tpage_name":"desertd-vis-tfrag"}],[91815937,{"idx":1,"name":"airlock-door-cog","tpage_name":"ctyinda-vis-pris"}],[74383413,{"idx":53,"name":"sewer-brick-roof-03","tpage_name":"sewj-vis-tfrag"}],[74383412,{"idx":52,"name":"sewer-block-02-hitweak","tpage_name":"sewj-vis-tfrag"}],[74383411,{"idx":51,"name":"sewer-brick-block-02","tpage_name":"sewj-vis-tfrag"}],[74383410,{"idx":50,"name":"sewer-brick-block-11","tpage_name":"sewj-vis-tfrag"}],[74383409,{"idx":49,"name":"sewer-brick-block-10","tpage_name":"sewj-vis-tfrag"}],[74383407,{"idx":47,"name":"sewer-pipe-small-02","tpage_name":"sewj-vis-tfrag"}],[56950887,{"idx":103,"name":"common_sandstone_base01","tpage_name":"waspala-tfrag"}],[74383405,{"idx":45,"name":"sewer-pipe-rim-07","tpage_name":"sewj-vis-tfrag"}],[56950885,{"idx":101,"name":"common_sandstone_trim01","tpage_name":"waspala-tfrag"}],[74383401,{"idx":41,"name":"sewer-plate-04","tpage_name":"sewj-vis-tfrag"}],[56950881,{"idx":97,"name":"wascity-outerwall-rock","tpage_name":"waspala-tfrag"}],[74383400,{"idx":40,"name":"sewer-block-01","tpage_name":"sewj-vis-tfrag"}],[56950880,{"idx":96,"name":"waspala-throne-floor","tpage_name":"waspala-tfrag"}],[74383396,{"idx":36,"name":"sewer-brick-roof-01","tpage_name":"sewj-vis-tfrag"}],[56950876,{"idx":92,"name":"waspala-throne-back-01","tpage_name":"waspala-tfrag"}],[74383395,{"idx":35,"name":"sewer-brick-block-04","tpage_name":"sewj-vis-tfrag"}],[56950875,{"idx":91,"name":"waspala-throne-back-03","tpage_name":"waspala-tfrag"}],[79364115,{"idx":19,"name":"environment-oldmetal","tpage_name":"wasseem-pris"}],[74383394,{"idx":34,"name":"sewer-metal-block-01","tpage_name":"sewj-vis-tfrag"}],[56950874,{"idx":90,"name":"waspala-palmplant-leaf-02","tpage_name":"waspala-tfrag"}],[79364114,{"idx":18,"name":"daxtertuft","tpage_name":"wasseem-pris"}],[74383393,{"idx":33,"name":"sewer-metal-block-02","tpage_name":"sewj-vis-tfrag"}],[56950873,{"idx":89,"name":"waspala-branch-01","tpage_name":"waspala-tfrag"}],[79364113,{"idx":17,"name":"daxterteeth","tpage_name":"wasseem-pris"}],[74383392,{"idx":32,"name":"sewer-pipe-rim-01","tpage_name":"sewj-vis-tfrag"}],[79364112,{"idx":16,"name":"daxternose","tpage_name":"wasseem-pris"}],[56950872,{"idx":88,"name":"waspala-palmtree-beard","tpage_name":"waspala-tfrag"}],[74317827,{"idx":3,"name":"sewer-watefall-froth-01-j-dest","tpage_name":"sewj-vis-water"}],[49414227,{"idx":83,"name":"roboguard-die-stamped-metal-red","tpage_name":"sewc-vis-pris"}],[74317826,{"idx":2,"name":"sewer-watefall-froth-01-j","tpage_name":"sewj-vis-water"}],[49414226,{"idx":82,"name":"brown-hose","tpage_name":"sewc-vis-pris"}],[74317825,{"idx":1,"name":"sewer-waterfall-02-j-dest","tpage_name":"sewj-vis-water"}],[49414225,{"idx":81,"name":"blue-gem","tpage_name":"sewc-vis-pris"}],[74317824,{"idx":0,"name":"sewer-waterfall-02-j","tpage_name":"sewj-vis-water"}],[49414224,{"idx":80,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewc-vis-pris"}],[74252367,{"idx":79,"name":"squid-tubes","tpage_name":"sewg-vis-pris"}],[81723447,{"idx":55,"name":"klever-brownstrap","tpage_name":"ljndklev-pris"}],[74252366,{"idx":78,"name":"squid-bulb-sm","tpage_name":"sewg-vis-pris"}],[81723446,{"idx":54,"name":"klever-arm","tpage_name":"ljndklev-pris"}],[74252365,{"idx":77,"name":"roboguard-shouldershield","tpage_name":"sewg-vis-pris"}],[81723445,{"idx":53,"name":"klever-mustache","tpage_name":"ljndklev-pris"}],[74252364,{"idx":76,"name":"roboguard-headshield","tpage_name":"sewg-vis-pris"}],[81723444,{"idx":52,"name":"klever-hair","tpage_name":"ljndklev-pris"}],[74252363,{"idx":75,"name":"brown-hose","tpage_name":"sewg-vis-pris"}],[81723443,{"idx":51,"name":"klever-face-01scars","tpage_name":"ljndklev-pris"}],[74252334,{"idx":46,"name":"wire-metal","tpage_name":"sewg-vis-pris"}],[86704134,{"idx":6,"name":"king-chest","tpage_name":"ldamklev-pris2"}],[74252333,{"idx":45,"name":"widow-pod-gun-metal","tpage_name":"sewg-vis-pris"}],[86704133,{"idx":5,"name":"king-bolt","tpage_name":"ldamklev-pris2"}],[74252306,{"idx":18,"name":"airlockl-door-metalframe","tpage_name":"sewg-vis-pris"}],[74252305,{"idx":17,"name":"airlock-door-metal2","tpage_name":"sewg-vis-pris"}],[74252304,{"idx":16,"name":"airlock-door-main","tpage_name":"sewg-vis-pris"}],[74252303,{"idx":15,"name":"airlock-door-cog1","tpage_name":"sewg-vis-pris"}],[74252302,{"idx":14,"name":"airlock-door-cog","tpage_name":"sewg-vis-pris"}],[74252301,{"idx":13,"name":"airlock-door-bolt","tpage_name":"sewg-vis-pris"}],[60555321,{"idx":57,"name":"minb-stone25","tpage_name":"minea-vis-tfrag"}],[74252300,{"idx":12,"name":"sewer-screw-02","tpage_name":"sewg-vis-pris"}],[60555320,{"idx":56,"name":"minc-slab-03","tpage_name":"minea-vis-tfrag"}],[74252299,{"idx":11,"name":"sewer-plate-05","tpage_name":"sewg-vis-pris"}],[60555319,{"idx":55,"name":"minc-door-metal-07","tpage_name":"minea-vis-tfrag"}],[74252298,{"idx":10,"name":"sewer-pipe-rim-07","tpage_name":"sewg-vis-pris"}],[60555318,{"idx":54,"name":"minc-door-metal-03","tpage_name":"minea-vis-tfrag"}],[74252296,{"idx":8,"name":"sewer-metal-floor-02","tpage_name":"sewg-vis-pris"}],[60555316,{"idx":52,"name":"minc-pre-04","tpage_name":"minea-vis-tfrag"}],[74252295,{"idx":7,"name":"sewer-metal-block-04","tpage_name":"sewg-vis-pris"}],[60555315,{"idx":51,"name":"minc-pre-10","tpage_name":"minea-vis-tfrag"}],[74252294,{"idx":6,"name":"sewer-metal-01","tpage_name":"sewg-vis-pris"}],[60555314,{"idx":50,"name":"minc-01","tpage_name":"minea-vis-tfrag"}],[74252293,{"idx":5,"name":"sew-gun-drum-01","tpage_name":"sewg-vis-pris"}],[74252291,{"idx":3,"name":"cguardgame-shoebottom","tpage_name":"sewg-vis-pris"}],[60555311,{"idx":47,"name":"minc-ox-pipe-01","tpage_name":"minea-vis-tfrag"}],[74252290,{"idx":2,"name":"cguardgame-metallight-01small","tpage_name":"sewg-vis-pris"}],[60555310,{"idx":46,"name":"minc-red-paint-02","tpage_name":"minea-vis-tfrag"}],[74252289,{"idx":1,"name":"cguardgame-metaledark-02","tpage_name":"sewg-vis-pris"}],[60555309,{"idx":45,"name":"minc-chain-metal-01","tpage_name":"minea-vis-tfrag"}],[74252288,{"idx":0,"name":"cguardgame-backplate","tpage_name":"sewg-vis-pris"}],[35651708,{"idx":124,"name":"king-skirt-b","tpage_name":"introcst-pris2"}],[60555308,{"idx":44,"name":"minc-strut-01","tpage_name":"minea-vis-tfrag"}],[74186775,{"idx":23,"name":"sewer-pipe-rim-05b","tpage_name":"sewh-vis-pris"}],[49283175,{"idx":103,"name":"widow-pod-gun-metal","tpage_name":"sewd-vis-pris"}],[74186773,{"idx":21,"name":"sewer-nut","tpage_name":"sewh-vis-pris"}],[49283173,{"idx":101,"name":"squid-tubes","tpage_name":"sewd-vis-pris"}],[74186772,{"idx":20,"name":"sewer-metal-block-04","tpage_name":"sewh-vis-pris"}],[49283172,{"idx":100,"name":"squid-bulb-sm","tpage_name":"sewd-vis-pris"}],[74186771,{"idx":19,"name":"sew-metal-floor-01","tpage_name":"sewh-vis-pris"}],[49283171,{"idx":99,"name":"roboguard-shouldershield","tpage_name":"sewd-vis-pris"}],[74186770,{"idx":18,"name":"sew-gun-rim-03","tpage_name":"sewh-vis-pris"}],[49283170,{"idx":98,"name":"roboguard-headshield","tpage_name":"sewd-vis-pris"}],[74186769,{"idx":17,"name":"sew-gun-panel-02","tpage_name":"sewh-vis-pris"}],[49283169,{"idx":97,"name":"roboguard-die-stamped-metal-red","tpage_name":"sewd-vis-pris"}],[74186768,{"idx":16,"name":"sew-saw-tubes","tpage_name":"sewh-vis-pris"}],[49283168,{"idx":96,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewd-vis-pris"}],[74186767,{"idx":15,"name":"sew-saw-part2","tpage_name":"sewh-vis-pris"}],[49283167,{"idx":95,"name":"environment-oldmetal","tpage_name":"sewd-vis-pris"}],[74186766,{"idx":14,"name":"sew-saw-part1","tpage_name":"sewh-vis-pris"}],[49283166,{"idx":94,"name":"cguard1-lens","tpage_name":"sewd-vis-pris"}],[74186764,{"idx":12,"name":"scoutbot-shoulder","tpage_name":"sewh-vis-pris"}],[49283164,{"idx":92,"name":"cguard1-gunmetaldark2","tpage_name":"sewd-vis-pris"}],[74186763,{"idx":11,"name":"scoutbot-plate-logo","tpage_name":"sewh-vis-pris"}],[49283163,{"idx":91,"name":"cguard1-chestplate","tpage_name":"sewd-vis-pris"}],[90767384,{"idx":24,"name":"des-ruins-wall-01","tpage_name":"deserth-vis-tfrag"}],[74580044,{"idx":76,"name":"sewer-plate-01-hitweak","tpage_name":"sewm-vis-tfrag"}],[67108964,{"idx":100,"name":"vin-door-large-01","tpage_name":"vinroom-vis-pris"}],[74186762,{"idx":10,"name":"scoutbot-plate-edge","tpage_name":"sewh-vis-pris"}],[49283162,{"idx":90,"name":"cguard1-backmetal","tpage_name":"sewd-vis-pris"}],[74186761,{"idx":9,"name":"scoutbot-plate-body","tpage_name":"sewh-vis-pris"}],[49283161,{"idx":89,"name":"brown-hose","tpage_name":"sewd-vis-pris"}],[74186760,{"idx":8,"name":"scoutbot-lens","tpage_name":"sewh-vis-pris"}],[49283160,{"idx":88,"name":"blue-gem","tpage_name":"sewd-vis-pris"}],[74186759,{"idx":7,"name":"scoutbot-legs","tpage_name":"sewh-vis-pris"}],[74186758,{"idx":6,"name":"sewer-plate-03","tpage_name":"sewh-vis-pris"}],[74186757,{"idx":5,"name":"sew-laserbeam-tip","tpage_name":"sewh-vis-pris"}],[90767378,{"idx":18,"name":"des-palm-root","tpage_name":"deserth-vis-tfrag"}],[74580038,{"idx":70,"name":"sewer-lip-01-hitweak","tpage_name":"sewm-vis-tfrag"}],[74186756,{"idx":4,"name":"sew-gun-round-cap-01","tpage_name":"sewh-vis-pris"}],[74121225,{"idx":9,"name":"sewer-watefall-froth-01-h-dest","tpage_name":"sewh-vis-water"}],[71630865,{"idx":17,"name":"king-iris","tpage_name":"ldampksm-pris2"}],[74121224,{"idx":8,"name":"sewer-water-wave-02-h","tpage_name":"sewh-vis-water"}],[71630864,{"idx":16,"name":"king-horn","tpage_name":"ldampksm-pris2"}],[74121223,{"idx":7,"name":"sewer-watefall-froth-01-h","tpage_name":"sewh-vis-water"}],[71630863,{"idx":15,"name":"king-hand","tpage_name":"ldampksm-pris2"}],[74121222,{"idx":6,"name":"sewer-water-wave-02-h-dest","tpage_name":"sewh-vis-water"}],[71630862,{"idx":14,"name":"king-hair","tpage_name":"ldampksm-pris2"}],[74121221,{"idx":5,"name":"sewer-waterfall-02-h-dest","tpage_name":"sewh-vis-water"}],[71630861,{"idx":13,"name":"king-greenmetalplain","tpage_name":"ldampksm-pris2"}],[74121220,{"idx":4,"name":"sewer-water-01-h-dest","tpage_name":"sewh-vis-water"}],[71630860,{"idx":12,"name":"king-greenmetal","tpage_name":"ldampksm-pris2"}],[74121219,{"idx":3,"name":"sewer-waterfall-02-h","tpage_name":"sewh-vis-water"}],[71630859,{"idx":11,"name":"king-finger","tpage_name":"ldampksm-pris2"}],[74121218,{"idx":2,"name":"sewer-water-01-h","tpage_name":"sewh-vis-water"}],[71630858,{"idx":10,"name":"king-face-01","tpage_name":"ldampksm-pris2"}],[74055724,{"idx":44,"name":"sewer-pipe-small-01","tpage_name":"sewi-vis-pris"}],[86507524,{"idx":4,"name":"bombot-greybarrelend","tpage_name":"lbombbot-pris"}],[74055723,{"idx":43,"name":"sewer-nut-01","tpage_name":"sewi-vis-pris"}],[86507523,{"idx":3,"name":"bombot-gearsides","tpage_name":"lbombbot-pris"}],[74055721,{"idx":41,"name":"sew-gun-panel-03","tpage_name":"sewi-vis-pris"}],[81526801,{"idx":17,"name":"roboguard-headshield","tpage_name":"ctypesc-pris"}],[86507521,{"idx":1,"name":"bombot-darkgrey-01","tpage_name":"lbombbot-pris"}],[74055696,{"idx":16,"name":"sew-saw-tubes","tpage_name":"sewi-vis-pris"}],[77791236,{"idx":4,"name":"wstd-tentacle-plate03","tpage_name":"wasstadb-pris"}],[67829796,{"idx":36,"name":"vinroom-tv-linetext-08","tpage_name":"freehq-sprite"}],[74055695,{"idx":15,"name":"sew-saw-plate","tpage_name":"sewi-vis-pris"}],[77791235,{"idx":3,"name":"wstd-scaffold-teeth","tpage_name":"wasstadb-pris"}],[67829795,{"idx":35,"name":"vinroom-tv-linetext-07","tpage_name":"freehq-sprite"}],[74055694,{"idx":14,"name":"sew-saw-part2","tpage_name":"sewi-vis-pris"}],[67829794,{"idx":34,"name":"vinroom-tv-linetext-06","tpage_name":"freehq-sprite"}],[74055693,{"idx":13,"name":"sew-saw-part1","tpage_name":"sewi-vis-pris"}],[67829793,{"idx":33,"name":"vinroom-tv-linetext-05","tpage_name":"freehq-sprite"}],[74055692,{"idx":12,"name":"sew-saw-logo","tpage_name":"sewi-vis-pris"}],[67829792,{"idx":32,"name":"vinroom-tv-linetext-04","tpage_name":"freehq-sprite"}],[74055691,{"idx":11,"name":"sew-saw-lens","tpage_name":"sewi-vis-pris"}],[67829791,{"idx":31,"name":"vinroom-tv-linetext-03","tpage_name":"freehq-sprite"}],[74055690,{"idx":10,"name":"sew-saw-fan","tpage_name":"sewi-vis-pris"}],[67829790,{"idx":30,"name":"vinroom-tv-linetext-02","tpage_name":"freehq-sprite"}],[74055689,{"idx":9,"name":"sew-saw-body","tpage_name":"sewi-vis-pris"}],[67829789,{"idx":29,"name":"vinroom-tv-linetext-01","tpage_name":"freehq-sprite"}],[74055688,{"idx":8,"name":"sew-saw-blade","tpage_name":"sewi-vis-pris"}],[67829788,{"idx":28,"name":"vinroom-tv-beam","tpage_name":"freehq-sprite"}],[74055687,{"idx":7,"name":"sew-saw-arm","tpage_name":"sewi-vis-pris"}],[74055686,{"idx":6,"name":"airlockl-door-metalframe","tpage_name":"sewi-vis-pris"}],[67829786,{"idx":26,"name":"vinroom-small-monitor-08","tpage_name":"freehq-sprite"}],[74055685,{"idx":5,"name":"airlock-door-metal2","tpage_name":"sewi-vis-pris"}],[67829785,{"idx":25,"name":"vinroom-small-monitor-07","tpage_name":"freehq-sprite"}],[74055684,{"idx":4,"name":"airlock-door-main","tpage_name":"sewi-vis-pris"}],[67829784,{"idx":24,"name":"vinroom-small-monitor-06","tpage_name":"freehq-sprite"}],[74055683,{"idx":3,"name":"airlock-door-cog","tpage_name":"sewi-vis-pris"}],[67829783,{"idx":23,"name":"vinroom-small-monitor-05","tpage_name":"freehq-sprite"}],[74055682,{"idx":2,"name":"airlock-door-bolt","tpage_name":"sewi-vis-pris"}],[67829782,{"idx":22,"name":"vinroom-small-monitor-04","tpage_name":"freehq-sprite"}],[74055681,{"idx":1,"name":"sewer-plate-05","tpage_name":"sewi-vis-pris"}],[67829781,{"idx":21,"name":"vinroom-small-monitor-03","tpage_name":"freehq-sprite"}],[71565321,{"idx":9,"name":"pecker-yellowfur","tpage_name":"ldampksm-pris"}],[74055680,{"idx":0,"name":"sewer-plate-02","tpage_name":"sewi-vis-pris"}],[67829780,{"idx":20,"name":"vinroom-small-monitor-02","tpage_name":"freehq-sprite"}],[71565320,{"idx":8,"name":"pecker-wingtop","tpage_name":"ldampksm-pris"}],[73924623,{"idx":15,"name":"sewer-shrub-pitting-01","tpage_name":"sewg-vis-shrub"}],[73924622,{"idx":14,"name":"sew-mine-b-body","tpage_name":"sewg-vis-shrub"}],[73924608,{"idx":0,"name":"sewer-nut","tpage_name":"sewg-vis-shrub"}],[49021008,{"idx":80,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewe-vis-tfrag"}],[75759628,{"idx":12,"name":"daxtergoggles","tpage_name":"onintent-pris"}],[74514448,{"idx":16,"name":"cguardgame-metallight-01small","tpage_name":"sewj-vis-pris"}],[67043368,{"idx":40,"name":"vinroom-tv-text-g","tpage_name":"vinroom-sprite"}],[79495168,{"idx":0,"name":"des-wascity-outerwall-rock","tpage_name":"wasintro-vis-tfrag"}],[75759627,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"onintent-pris"}],[74514447,{"idx":15,"name":"cguardgame-metaledark-02","tpage_name":"sewj-vis-pris"}],[67043367,{"idx":39,"name":"vinroom-tv-text-a","tpage_name":"vinroom-sprite"}],[75759626,{"idx":10,"name":"daxterfoot","tpage_name":"onintent-pris"}],[74514446,{"idx":14,"name":"cguardgame-backplate","tpage_name":"sewj-vis-pris"}],[67043366,{"idx":38,"name":"vinroom-tv-radar-dots","tpage_name":"vinroom-sprite"}],[75759624,{"idx":8,"name":"daxterear","tpage_name":"onintent-pris"}],[74514444,{"idx":12,"name":"cguard1-guntube","tpage_name":"sewj-vis-pris"}],[67043364,{"idx":36,"name":"vinroom-tv-morgan","tpage_name":"vinroom-sprite"}],[75759623,{"idx":7,"name":"daxterbolt","tpage_name":"onintent-pris"}],[74514443,{"idx":11,"name":"cguard1-gunmetaldark2","tpage_name":"sewj-vis-pris"}],[67043363,{"idx":35,"name":"vinroom-tv-linetext-08","tpage_name":"vinroom-sprite"}],[75759622,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"onintent-pris"}],[74514442,{"idx":10,"name":"cguard1-chestplate","tpage_name":"sewj-vis-pris"}],[67043362,{"idx":34,"name":"vinroom-tv-linetext-07","tpage_name":"vinroom-sprite"}],[57081922,{"idx":66,"name":"waspala-wheel-pipe","tpage_name":"waspala-pris"}],[75759621,{"idx":5,"name":"daxterarm","tpage_name":"onintent-pris"}],[74514441,{"idx":9,"name":"cguard1-backmetal","tpage_name":"sewj-vis-pris"}],[67043361,{"idx":33,"name":"vinroom-tv-linetext-06","tpage_name":"vinroom-sprite"}],[57081921,{"idx":65,"name":"waspala-wheel-paddle","tpage_name":"waspala-pris"}],[75759620,{"idx":4,"name":"daxter-orange","tpage_name":"onintent-pris"}],[74514440,{"idx":8,"name":"brown-hose","tpage_name":"sewj-vis-pris"}],[67043360,{"idx":32,"name":"vinroom-tv-linetext-05","tpage_name":"vinroom-sprite"}],[57081920,{"idx":64,"name":"waspala-wheel-interior","tpage_name":"waspala-pris"}],[62062640,{"idx":48,"name":"was-gun-beam","tpage_name":"wascityb-sprite"}],[75759619,{"idx":3,"name":"daxter-furhilite","tpage_name":"onintent-pris"}],[74514439,{"idx":7,"name":"blue-gem","tpage_name":"sewj-vis-pris"}],[67043359,{"idx":31,"name":"vinroom-tv-linetext-04","tpage_name":"vinroom-sprite"}],[57081919,{"idx":63,"name":"waspala-wheel-face-02","tpage_name":"waspala-pris"}],[62062639,{"idx":47,"name":"twirl-path","tpage_name":"wascityb-sprite"}],[75759618,{"idx":2,"name":"daxter-eyelid","tpage_name":"onintent-pris"}],[67043358,{"idx":30,"name":"vinroom-tv-linetext-03","tpage_name":"vinroom-sprite"}],[57081918,{"idx":62,"name":"waspala-wheel-face-01","tpage_name":"waspala-pris"}],[62062638,{"idx":46,"name":"boom","tpage_name":"wascityb-sprite"}],[75759617,{"idx":1,"name":"bam-hairhilite","tpage_name":"onintent-pris"}],[74514437,{"idx":5,"name":"airlock-door-cog1","tpage_name":"sewj-vis-pris"}],[67043357,{"idx":29,"name":"vinroom-tv-linetext-02","tpage_name":"vinroom-sprite"}],[57081917,{"idx":61,"name":"waspala-wheel-edge","tpage_name":"waspala-pris"}],[62062637,{"idx":45,"name":"wave-foam","tpage_name":"wascityb-sprite"}],[75759616,{"idx":0,"name":"bam-eyelight","tpage_name":"onintent-pris"}],[74514436,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewj-vis-pris"}],[67043356,{"idx":28,"name":"vinroom-tv-linetext-01","tpage_name":"vinroom-sprite"}],[57081916,{"idx":60,"name":"waspala-elevator-tube","tpage_name":"waspala-pris"}],[62062636,{"idx":44,"name":"water-froth","tpage_name":"wascityb-sprite"}],[73859108,{"idx":36,"name":"sewer-brick-roof-01","tpage_name":"sewg-vis-tfrag"}],[80085008,{"idx":16,"name":"ashelin-hair","tpage_name":"lashelin-pris2"}],[76349468,{"idx":28,"name":"torn-belt","tpage_name":"ltornsam-pris2"}],[73859102,{"idx":30,"name":"sewer-metal-trim-02","tpage_name":"sewg-vis-tfrag"}],[80085002,{"idx":10,"name":"ashelin-face","tpage_name":"lashelin-pris2"}],[76349462,{"idx":22,"name":"samosbird-eye","tpage_name":"ltornsam-pris2"}],[73859101,{"idx":29,"name":"sewer-lip-01","tpage_name":"sewg-vis-tfrag"}],[80085001,{"idx":9,"name":"ashelin-eyelid","tpage_name":"lashelin-pris2"}],[76349461,{"idx":21,"name":"samosbird-body","tpage_name":"ltornsam-pris2"}],[73859100,{"idx":28,"name":"sewer-block-02","tpage_name":"sewg-vis-tfrag"}],[80085000,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"lashelin-pris2"}],[76349460,{"idx":20,"name":"samosbird-beak","tpage_name":"ltornsam-pris2"}],[73859099,{"idx":27,"name":"sewer-block-01","tpage_name":"sewg-vis-tfrag"}],[80084999,{"idx":7,"name":"ashelin-eye","tpage_name":"lashelin-pris2"}],[76349459,{"idx":19,"name":"samos-vest","tpage_name":"ltornsam-pris2"}],[73859091,{"idx":19,"name":"sewer-plate-02","tpage_name":"sewg-vis-tfrag"}],[76349451,{"idx":11,"name":"samos-leaf","tpage_name":"ltornsam-pris2"}],[73859090,{"idx":18,"name":"sewer-pipe-rim-03","tpage_name":"sewg-vis-tfrag"}],[76349450,{"idx":10,"name":"samos-helmet","tpage_name":"ltornsam-pris2"}],[73859089,{"idx":17,"name":"sewer-pipe-rim-07","tpage_name":"sewg-vis-tfrag"}],[76349449,{"idx":9,"name":"samos-hair","tpage_name":"ltornsam-pris2"}],[73859088,{"idx":16,"name":"sewer-plate-04","tpage_name":"sewg-vis-tfrag"}],[76349448,{"idx":8,"name":"samos-finger-01","tpage_name":"ltornsam-pris2"}],[73859087,{"idx":15,"name":"sewer-metal-block-01","tpage_name":"sewg-vis-tfrag"}],[76349447,{"idx":7,"name":"samos-face","tpage_name":"ltornsam-pris2"}],[73859086,{"idx":14,"name":"sewer-concrete-edge-02","tpage_name":"sewg-vis-tfrag"}],[76349446,{"idx":6,"name":"samos-eyelid","tpage_name":"ltornsam-pris2"}],[73859085,{"idx":13,"name":"sewer-scaffold-01","tpage_name":"sewg-vis-tfrag"}],[76349445,{"idx":5,"name":"samos-eye","tpage_name":"ltornsam-pris2"}],[73859084,{"idx":12,"name":"sewer-metal-01","tpage_name":"sewg-vis-tfrag"}],[76349444,{"idx":4,"name":"samos-ear","tpage_name":"ltornsam-pris2"}],[73859083,{"idx":11,"name":"sewer-metal-block-02","tpage_name":"sewg-vis-tfrag"}],[76349443,{"idx":3,"name":"samos-diaper","tpage_name":"ltornsam-pris2"}],[73859081,{"idx":9,"name":"sewer-pipe-small-02","tpage_name":"sewg-vis-tfrag"}],[76349441,{"idx":1,"name":"bam-hairhilite","tpage_name":"ltornsam-pris2"}],[73859080,{"idx":8,"name":"sewer-concrete-edge-01","tpage_name":"sewg-vis-tfrag"}],[76349440,{"idx":0,"name":"bam-eyelight","tpage_name":"ltornsam-pris2"}],[73859079,{"idx":7,"name":"common-black","tpage_name":"sewg-vis-tfrag"}],[62652459,{"idx":43,"name":"citn-allsuedeplain","tpage_name":"ctypepa-pris"}],[73859078,{"idx":6,"name":"sewer-hall-light-01","tpage_name":"sewg-vis-tfrag"}],[62652458,{"idx":42,"name":"citn-allsuede","tpage_name":"ctypepa-pris"}],[73859077,{"idx":5,"name":"sewer-pipe-rim-08","tpage_name":"sewg-vis-tfrag"}],[62652457,{"idx":41,"name":"citn-allshoebottom","tpage_name":"ctypepa-pris"}],[73859076,{"idx":4,"name":"sewer-metal-03","tpage_name":"sewg-vis-tfrag"}],[62652456,{"idx":40,"name":"citn-allleye","tpage_name":"ctypepa-pris"}],[73859075,{"idx":3,"name":"sewer-plate-05","tpage_name":"sewg-vis-tfrag"}],[62652455,{"idx":39,"name":"citn-allleatherwrinkled","tpage_name":"ctypepa-pris"}],[73859074,{"idx":2,"name":"sewer-pipe-rim-05","tpage_name":"sewg-vis-tfrag"}],[62652454,{"idx":38,"name":"citn-allleatherstrap","tpage_name":"ctypepa-pris"}],[73859073,{"idx":1,"name":"sewer-metal-block-04","tpage_name":"sewg-vis-tfrag"}],[62652453,{"idx":37,"name":"citn-allleather-shoulder","tpage_name":"ctypepa-pris"}],[73859072,{"idx":0,"name":"sewer-metal-block-06","tpage_name":"sewg-vis-tfrag"}],[62652452,{"idx":36,"name":"citn-allleather-edge","tpage_name":"ctypepa-pris"}],[73728079,{"idx":79,"name":"sewer-pipe-rim-05b-hitweak","tpage_name":"sewh-vis-tfrag"}],[73728077,{"idx":77,"name":"sewer-metal-block-06-highertweak","tpage_name":"sewh-vis-tfrag"}],[73728076,{"idx":76,"name":"sewer-metal-block-01-hitweak","tpage_name":"sewh-vis-tfrag"}],[73728072,{"idx":72,"name":"sewer-block-01-hitweak","tpage_name":"sewh-vis-tfrag"}],[35127492,{"idx":196,"name":"errolcyber-roboeye","tpage_name":"factorya-pris"}],[91160592,{"idx":16,"name":"daxternose","tpage_name":"gungame-vis-pris"}],[73728071,{"idx":71,"name":"sewer-brick-block-04-hitweak","tpage_name":"sewh-vis-tfrag"}],[35127491,{"idx":195,"name":"errolcyber-metaleyelid","tpage_name":"factorya-pris"}],[91160591,{"idx":15,"name":"daxterlense","tpage_name":"gungame-vis-pris"}],[92209184,{"idx":32,"name":"klever-undershirt","tpage_name":"ldamklev-pris"}],[100925444,{"idx":4,"name":"king-bluemetal","tpage_name":"ljkdmpk-pris2"}],[95944724,{"idx":20,"name":"torn-legshield","tpage_name":"freehq-pris2"}],[92209183,{"idx":31,"name":"klever-thighs","tpage_name":"ldamklev-pris"}],[95944723,{"idx":19,"name":"torn-handle-01","tpage_name":"freehq-pris2"}],[100925443,{"idx":3,"name":"king-blackskirt2","tpage_name":"ljkdmpk-pris2"}],[92209182,{"idx":30,"name":"klever-skirtlight","tpage_name":"ldamklev-pris"}],[95944722,{"idx":18,"name":"torn-hair-02","tpage_name":"freehq-pris2"}],[100925442,{"idx":2,"name":"king-arm","tpage_name":"ljkdmpk-pris2"}],[92209180,{"idx":28,"name":"klever-shoebottom","tpage_name":"ldamklev-pris"}],[95944720,{"idx":16,"name":"torn-gunbarrel-02","tpage_name":"freehq-pris2"}],[100925440,{"idx":0,"name":"bam-eyelight","tpage_name":"ljkdmpk-pris2"}],[73728053,{"idx":53,"name":"sewer-pipe-small-02","tpage_name":"sewh-vis-tfrag"}],[35127473,{"idx":177,"name":"errolcyber-head-01","tpage_name":"factorya-pris"}],[92209179,{"idx":27,"name":"klever-shoe","tpage_name":"ldamklev-pris"}],[95944719,{"idx":15,"name":"torn-gunbarrel","tpage_name":"freehq-pris2"}],[73728052,{"idx":52,"name":"sewer-concrete-edge-01","tpage_name":"sewh-vis-tfrag"}],[35127472,{"idx":176,"name":"errolcyber-hair","tpage_name":"factorya-pris"}],[92209178,{"idx":26,"name":"klever-horn","tpage_name":"ldamklev-pris"}],[95944718,{"idx":14,"name":"torn-footleather","tpage_name":"freehq-pris2"}],[73728051,{"idx":51,"name":"common-black","tpage_name":"sewh-vis-tfrag"}],[35127471,{"idx":175,"name":"errolcyber-greymetal-02","tpage_name":"factorya-pris"}],[92209177,{"idx":25,"name":"klever-handwrap","tpage_name":"ldamklev-pris"}],[95944717,{"idx":13,"name":"torn-finger","tpage_name":"freehq-pris2"}],[73728050,{"idx":50,"name":"sewer-pipe-rim-08","tpage_name":"sewh-vis-tfrag"}],[35127470,{"idx":174,"name":"errolcyber-greymetal","tpage_name":"factorya-pris"}],[73728049,{"idx":49,"name":"sewer-metal-block-06","tpage_name":"sewh-vis-tfrag"}],[35127469,{"idx":173,"name":"errolcyber-greyknobs","tpage_name":"factorya-pris"}],[73728048,{"idx":48,"name":"sewer-concrete-edge-02","tpage_name":"sewh-vis-tfrag"}],[35127468,{"idx":172,"name":"errolcyber-glovepalm","tpage_name":"factorya-pris"}],[73728003,{"idx":3,"name":"sewer-pipe-rim-05b","tpage_name":"sewh-vis-tfrag"}],[35127423,{"idx":127,"name":"jakchires-pants","tpage_name":"factorya-pris"}],[71237643,{"idx":11,"name":"king-finger","tpage_name":"ldampeck-pris2"}],[73728002,{"idx":2,"name":"sewer-metal-block-02","tpage_name":"sewh-vis-tfrag"}],[35127422,{"idx":126,"name":"jakchires-lightbrownspat","tpage_name":"factorya-pris"}],[71237642,{"idx":10,"name":"king-face-01","tpage_name":"ldampeck-pris2"}],[73728001,{"idx":1,"name":"sewer-brick-block-11","tpage_name":"sewh-vis-tfrag"}],[35127421,{"idx":125,"name":"jakchires-leatherpouch","tpage_name":"factorya-pris"}],[71237641,{"idx":9,"name":"king-earing","tpage_name":"ldampeck-pris2"}],[73728000,{"idx":0,"name":"sewer-brick-block-10","tpage_name":"sewh-vis-tfrag"}],[35127420,{"idx":124,"name":"jakchires-jacket","tpage_name":"factorya-pris"}],[71237640,{"idx":8,"name":"king-ear","tpage_name":"ldampeck-pris2"}],[90243098,{"idx":26,"name":"wascitya-airlock-metal-bits","tpage_name":"desertb-vis-tfrag"}],[90243097,{"idx":25,"name":"wascity-metal-dirty","tpage_name":"desertb-vis-tfrag"}],[90243095,{"idx":23,"name":"wascity-metal-fan","tpage_name":"desertb-vis-tfrag"}],[90243094,{"idx":22,"name":"wascity-cement-road","tpage_name":"desertb-vis-tfrag"}],[73662467,{"idx":3,"name":"sewer-hang-moss-01","tpage_name":"sewi-vis-shrub"}],[73662466,{"idx":2,"name":"sewer-nut","tpage_name":"sewi-vis-shrub"}],[73662465,{"idx":1,"name":"sewer-moss-01","tpage_name":"sewi-vis-shrub"}],[71172105,{"idx":9,"name":"pecker-yellowfur","tpage_name":"ldampeck-pris"}],[73662464,{"idx":0,"name":"sewer-pipe-small-01","tpage_name":"sewi-vis-shrub"}],[71172104,{"idx":8,"name":"pecker-wingtop","tpage_name":"ldampeck-pris"}],[73596994,{"idx":66,"name":"sewer-brick-roof-05","tpage_name":"sewi-vis-tfrag"}],[38731954,{"idx":178,"name":"femcher2_13","tpage_name":"wasstada-sprite"}],[92274694,{"idx":6,"name":"intcept-tread01","tpage_name":"desrace2-pris"}],[73596987,{"idx":59,"name":"sewer-plate-03","tpage_name":"sewi-vis-tfrag"}],[38731947,{"idx":171,"name":"femcher2_06","tpage_name":"wasstada-sprite"}],[73596986,{"idx":58,"name":"sewer-plate-02","tpage_name":"sewi-vis-tfrag"}],[38731946,{"idx":170,"name":"femcher2_05","tpage_name":"wasstada-sprite"}],[73596985,{"idx":57,"name":"sewer-concrete-edge-01","tpage_name":"sewi-vis-tfrag"}],[38731945,{"idx":169,"name":"femcher2_04","tpage_name":"wasstada-sprite"}],[73596984,{"idx":56,"name":"common-black","tpage_name":"sewi-vis-tfrag"}],[38731944,{"idx":168,"name":"femcher2_03","tpage_name":"wasstada-sprite"}],[73596983,{"idx":55,"name":"sewer-scaffold-03","tpage_name":"sewi-vis-tfrag"}],[38731943,{"idx":167,"name":"femcher2_02","tpage_name":"wasstada-sprite"}],[58654823,{"idx":103,"name":"blue-panel","tpage_name":"hiphog-sprite"}],[73596970,{"idx":42,"name":"sewer-rubber-rim-01","tpage_name":"sewi-vis-tfrag"}],[38731930,{"idx":154,"name":"female1_10","tpage_name":"wasstada-sprite"}],[71106610,{"idx":50,"name":"dummy-blade-handle-01","tpage_name":"wasstadb-tfrag"}],[58654810,{"idx":90,"name":"screen-14","tpage_name":"hiphog-sprite"}],[73596969,{"idx":41,"name":"sewer-metal-trim-01","tpage_name":"sewi-vis-tfrag"}],[38731929,{"idx":153,"name":"female1_09","tpage_name":"wasstada-sprite"}],[71106609,{"idx":49,"name":"dummy-faceplate-01","tpage_name":"wasstadb-tfrag"}],[58654809,{"idx":89,"name":"screen-13","tpage_name":"hiphog-sprite"}],[73596968,{"idx":40,"name":"sewer-plate-05","tpage_name":"sewi-vis-tfrag"}],[38731928,{"idx":152,"name":"female1_08","tpage_name":"wasstada-sprite"}],[58654808,{"idx":88,"name":"screen-12","tpage_name":"hiphog-sprite"}],[71106608,{"idx":48,"name":"dummy-blade-long-01","tpage_name":"wasstadb-tfrag"}],[73596967,{"idx":39,"name":"sewer-pipe-rim-06","tpage_name":"sewi-vis-tfrag"}],[38731927,{"idx":151,"name":"female1_07","tpage_name":"wasstada-sprite"}],[58654807,{"idx":87,"name":"screen-11","tpage_name":"hiphog-sprite"}],[71106607,{"idx":47,"name":"dummy-black-bar-01","tpage_name":"wasstadb-tfrag"}],[73596963,{"idx":35,"name":"sewer-metal-block-01","tpage_name":"sewi-vis-tfrag"}],[38731923,{"idx":147,"name":"female1_03","tpage_name":"wasstada-sprite"}],[71106603,{"idx":43,"name":"dummy-chestplate-01","tpage_name":"wasstadb-tfrag"}],[58654803,{"idx":83,"name":"screen-07","tpage_name":"hiphog-sprite"}],[73596962,{"idx":34,"name":"sewer-metal-block-04","tpage_name":"sewi-vis-tfrag"}],[38731922,{"idx":146,"name":"female1_02","tpage_name":"wasstada-sprite"}],[71106602,{"idx":42,"name":"dummy-black-01","tpage_name":"wasstadb-tfrag"}],[58654802,{"idx":82,"name":"screen-06","tpage_name":"hiphog-sprite"}],[73596961,{"idx":33,"name":"sewer-concrete-edge-02","tpage_name":"sewi-vis-tfrag"}],[38731921,{"idx":145,"name":"female1_01","tpage_name":"wasstada-sprite"}],[71106601,{"idx":41,"name":"dummy-stripe-pole-01","tpage_name":"wasstadb-tfrag"}],[58654801,{"idx":81,"name":"screen-05","tpage_name":"hiphog-sprite"}],[73596960,{"idx":32,"name":"sewer-scaffold-01","tpage_name":"sewi-vis-tfrag"}],[38731920,{"idx":144,"name":"female1_00","tpage_name":"wasstada-sprite"}],[71106600,{"idx":40,"name":"wstd-stands-ceilingplate","tpage_name":"wasstadb-tfrag"}],[58654800,{"idx":80,"name":"screen-04","tpage_name":"hiphog-sprite"}],[73596959,{"idx":31,"name":"sewer-pipe-rim-05b","tpage_name":"sewi-vis-tfrag"}],[38731919,{"idx":143,"name":"flying-bird-16","tpage_name":"wasstada-sprite"}],[71106599,{"idx":39,"name":"wstd-scaffold-floor-01","tpage_name":"wasstadb-tfrag"}],[58654799,{"idx":79,"name":"screen-03","tpage_name":"hiphog-sprite"}],[73596957,{"idx":29,"name":"sewer-pipe-rim-07","tpage_name":"sewi-vis-tfrag"}],[38731917,{"idx":141,"name":"flying-bird-14","tpage_name":"wasstada-sprite"}],[71106597,{"idx":37,"name":"wstd-platform-floor","tpage_name":"wasstadb-tfrag"}],[58654797,{"idx":77,"name":"screen-01","tpage_name":"hiphog-sprite"}],[73596956,{"idx":28,"name":"sewer-pipe-01","tpage_name":"sewi-vis-tfrag"}],[38731916,{"idx":140,"name":"flying-bird-13","tpage_name":"wasstada-sprite"}],[71106596,{"idx":36,"name":"wstd-platform-base","tpage_name":"wasstadb-tfrag"}],[58654796,{"idx":76,"name":"screen-00","tpage_name":"hiphog-sprite"}],[73465923,{"idx":67,"name":"sewer-pipe-small-02","tpage_name":"sewk-vis-tfrag"}],[73465922,{"idx":66,"name":"sewer-pipe-rim-09","tpage_name":"sewk-vis-tfrag"}],[73465921,{"idx":65,"name":"strip-black","tpage_name":"sewk-vis-tfrag"}],[73465920,{"idx":64,"name":"sewer-metal-trim-02-hitweak","tpage_name":"sewk-vis-tfrag"}],[73465919,{"idx":63,"name":"sewer-rusted-metal","tpage_name":"sewk-vis-tfrag"}],[73465918,{"idx":62,"name":"sewer-corroded-trim","tpage_name":"sewk-vis-tfrag"}],[73465917,{"idx":61,"name":"sewer-plate-06","tpage_name":"sewk-vis-tfrag"}],[52297857,{"idx":129,"name":"lfacrm-plate-05","tpage_name":"freehq-tfrag"}],[73465916,{"idx":60,"name":"sewer-nut-rim","tpage_name":"sewk-vis-tfrag"}],[52297856,{"idx":128,"name":"lfacrm-girder-01","tpage_name":"freehq-tfrag"}],[73465915,{"idx":59,"name":"sewer-nut","tpage_name":"sewk-vis-tfrag"}],[52297855,{"idx":127,"name":"cityslumc-pipe","tpage_name":"freehq-tfrag"}],[73465914,{"idx":58,"name":"sewer-big-brace-trim-02","tpage_name":"sewk-vis-tfrag"}],[52297854,{"idx":126,"name":"cityslumc-door-plate","tpage_name":"freehq-tfrag"}],[73465913,{"idx":57,"name":"sewer-big-brace-trim-01","tpage_name":"sewk-vis-tfrag"}],[52297853,{"idx":125,"name":"cityslumc-metal-trim","tpage_name":"freehq-tfrag"}],[73465912,{"idx":56,"name":"sewer-plate-04","tpage_name":"sewk-vis-tfrag"}],[73465911,{"idx":55,"name":"sewer-big-brace-02","tpage_name":"sewk-vis-tfrag"}],[73465910,{"idx":54,"name":"sewer-brick-roof-04","tpage_name":"sewk-vis-tfrag"}],[73465909,{"idx":53,"name":"sewer-brick-roof-01","tpage_name":"sewk-vis-tfrag"}],[73465908,{"idx":52,"name":"sewer-brick-roof-03","tpage_name":"sewk-vis-tfrag"}],[73465907,{"idx":51,"name":"sewer-brick-roof-02","tpage_name":"sewk-vis-tfrag"}],[73465906,{"idx":50,"name":"sewer-red-light-02","tpage_name":"sewk-vis-tfrag"}],[52297846,{"idx":118,"name":"ctyslumc-overhang-02","tpage_name":"freehq-tfrag"}],[73465905,{"idx":49,"name":"sewer-red-light-01","tpage_name":"sewk-vis-tfrag"}],[73465904,{"idx":48,"name":"sewer-yellow-light-02","tpage_name":"sewk-vis-tfrag"}],[57278564,{"idx":100,"name":"wstlanderchic-skirt","tpage_name":"waswide-vis-pris"}],[73465903,{"idx":47,"name":"sewer-yellow-light-01","tpage_name":"sewk-vis-tfrag"}],[57278563,{"idx":99,"name":"wstlanderchic-shoetopb","tpage_name":"waswide-vis-pris"}],[73465902,{"idx":46,"name":"sewer-round-01","tpage_name":"sewk-vis-tfrag"}],[48562302,{"idx":126,"name":"kg-grunt-rim-03","tpage_name":"sewa-vis-pris"}],[57278562,{"idx":98,"name":"wstlanderchic-shoetop","tpage_name":"waswide-vis-pris"}],[73465901,{"idx":45,"name":"sewer-plate-01","tpage_name":"sewk-vis-tfrag"}],[48562301,{"idx":125,"name":"kg-grunt-cable-01","tpage_name":"sewa-vis-pris"}],[57278561,{"idx":97,"name":"wstlanderchic-shirtb","tpage_name":"waswide-vis-pris"}],[73465900,{"idx":44,"name":"sewer-pipe-rim-07","tpage_name":"sewk-vis-tfrag"}],[48562300,{"idx":124,"name":"squid-drabgun","tpage_name":"sewa-vis-pris"}],[57278560,{"idx":96,"name":"wstlanderchic-shirt","tpage_name":"waswide-vis-pris"}],[73465899,{"idx":43,"name":"sewer-screw-02","tpage_name":"sewk-vis-tfrag"}],[52297839,{"idx":111,"name":"ctyslumc-wall-trim","tpage_name":"freehq-tfrag"}],[48562299,{"idx":123,"name":"wire-metal","tpage_name":"sewa-vis-pris"}],[57278559,{"idx":95,"name":"wstlanderchic-pants","tpage_name":"waswide-vis-pris"}],[73465898,{"idx":42,"name":"sew-gun-rim-03","tpage_name":"sewk-vis-tfrag"}],[48562298,{"idx":122,"name":"widow-pod-gun-metal","tpage_name":"sewa-vis-pris"}],[57278558,{"idx":94,"name":"wstlanderchic-legwrap2","tpage_name":"waswide-vis-pris"}],[73465897,{"idx":41,"name":"sewer-rubber-rim-01","tpage_name":"sewk-vis-tfrag"}],[48562297,{"idx":121,"name":"widow-dull-inards","tpage_name":"sewa-vis-pris"}],[57278557,{"idx":93,"name":"wstlanderchic-hairtop","tpage_name":"waswide-vis-pris"}],[104726635,{"idx":107,"name":"vehicle-wheel-01","tpage_name":"deshover-pris"}],[122159155,{"idx":51,"name":"fac-tower-02","tpage_name":"factoryb-vis-tfrag"}],[73465896,{"idx":40,"name":"sewer-pipe-rim-10","tpage_name":"sewk-vis-tfrag"}],[48562296,{"idx":120,"name":"squid-tubes","tpage_name":"sewa-vis-pris"}],[57278556,{"idx":92,"name":"wstlanderchic-hair","tpage_name":"waswide-vis-pris"}],[104726634,{"idx":106,"name":"vehicle-snake-tread-02","tpage_name":"deshover-pris"}],[122159154,{"idx":50,"name":"factory-base-01","tpage_name":"factoryb-vis-tfrag"}],[73465895,{"idx":39,"name":"sewer-block-01","tpage_name":"sewk-vis-tfrag"}],[48562295,{"idx":119,"name":"squid-bulb-sm","tpage_name":"sewa-vis-pris"}],[57278555,{"idx":91,"name":"wstlanderchic-flesh","tpage_name":"waswide-vis-pris"}],[104726633,{"idx":105,"name":"vehicle-snake-tread-01","tpage_name":"deshover-pris"}],[122159153,{"idx":49,"name":"fac-tower-pipe-rim-01","tpage_name":"factoryb-vis-tfrag"}],[73465894,{"idx":38,"name":"sewer-metal-trim-02","tpage_name":"sewk-vis-tfrag"}],[48562294,{"idx":118,"name":"roboguard-shouldershield","tpage_name":"sewa-vis-pris"}],[57278554,{"idx":90,"name":"wstlanderchic-eye","tpage_name":"waswide-vis-pris"}],[104726632,{"idx":104,"name":"dark-crystal-pickup-03","tpage_name":"deshover-pris"}],[73465893,{"idx":37,"name":"sewer-lip-01","tpage_name":"sewk-vis-tfrag"}],[48562293,{"idx":117,"name":"roboguard-headshield","tpage_name":"sewa-vis-pris"}],[52297833,{"idx":105,"name":"common-black","tpage_name":"freehq-tfrag"}],[57278553,{"idx":89,"name":"wstlanderchic-corset","tpage_name":"waswide-vis-pris"}],[104726631,{"idx":103,"name":"dark-crystal-pickup-02","tpage_name":"deshover-pris"}],[122159151,{"idx":47,"name":"facb-metal-grill-01","tpage_name":"factoryb-vis-tfrag"}],[73465892,{"idx":36,"name":"sewer-pipe-rim-08","tpage_name":"sewk-vis-tfrag"}],[52297832,{"idx":104,"name":"ctyslumc-light","tpage_name":"freehq-tfrag"}],[57278552,{"idx":88,"name":"wstlanderchic-bootleg","tpage_name":"waswide-vis-pris"}],[104726630,{"idx":102,"name":"dark-crystal-pickup-01","tpage_name":"deshover-pris"}],[122159150,{"idx":46,"name":"facb-light-01","tpage_name":"factoryb-vis-tfrag"}],[73465891,{"idx":35,"name":"sewer-small-light-01","tpage_name":"sewk-vis-tfrag"}],[48562291,{"idx":115,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewa-vis-pris"}],[57278551,{"idx":87,"name":"wstlanderchic-bootarmor","tpage_name":"waswide-vis-pris"}],[104726629,{"idx":101,"name":"dark-crystal-knob-02","tpage_name":"deshover-pris"}],[73465890,{"idx":34,"name":"sewer-metal-block-02","tpage_name":"sewk-vis-tfrag"}],[48562290,{"idx":114,"name":"cguardgame-shoebottom","tpage_name":"sewa-vis-pris"}],[57278550,{"idx":86,"name":"wstlanderchic-blackstrapplain","tpage_name":"waswide-vis-pris"}],[104726628,{"idx":100,"name":"dark-crystal-knob-01","tpage_name":"deshover-pris"}],[122159148,{"idx":44,"name":"fac-tower-09","tpage_name":"factoryb-vis-tfrag"}],[73465889,{"idx":33,"name":"sewer-metal-03","tpage_name":"sewk-vis-tfrag"}],[48562289,{"idx":113,"name":"cguardgame-metallight-01small","tpage_name":"sewa-vis-pris"}],[57278549,{"idx":85,"name":"wstlanderchic-blackstrap","tpage_name":"waswide-vis-pris"}],[104726627,{"idx":99,"name":"jakchires-teeth","tpage_name":"deshover-pris"}],[122159147,{"idx":43,"name":"fac-tower-large-panel-01","tpage_name":"factoryb-vis-tfrag"}],[73465888,{"idx":32,"name":"sewer-pipe-rim-06","tpage_name":"sewk-vis-tfrag"}],[48562288,{"idx":112,"name":"cguardgame-metaledark-02","tpage_name":"sewa-vis-pris"}],[57278548,{"idx":84,"name":"wstlander-04-skirt","tpage_name":"waswide-vis-pris"}],[104726626,{"idx":98,"name":"jakchires-shoeteop","tpage_name":"deshover-pris"}],[122159146,{"idx":42,"name":"fac-tower-pipe-03","tpage_name":"factoryb-vis-tfrag"}],[73465887,{"idx":31,"name":"sewer-round-02","tpage_name":"sewk-vis-tfrag"}],[48562287,{"idx":111,"name":"cguardgame-backplate","tpage_name":"sewa-vis-pris"}],[57278547,{"idx":83,"name":"wstlander-04-shirt-strap","tpage_name":"waswide-vis-pris"}],[104726625,{"idx":97,"name":"jakchires-shoemetal","tpage_name":"deshover-pris"}],[122159145,{"idx":41,"name":"fac-tower-01","tpage_name":"factoryb-vis-tfrag"}],[73465886,{"idx":30,"name":"sewer-round-03","tpage_name":"sewk-vis-tfrag"}],[48562286,{"idx":110,"name":"cguard1-lens","tpage_name":"sewa-vis-pris"}],[57278546,{"idx":82,"name":"wstlander-04-shirt","tpage_name":"waswide-vis-pris"}],[104726624,{"idx":96,"name":"jakchires-shoebottom","tpage_name":"deshover-pris"}],[122159144,{"idx":40,"name":"fac-tower-04","tpage_name":"factoryb-vis-tfrag"}],[104726623,{"idx":95,"name":"jakchires-precarmor-01","tpage_name":"deshover-pris"}],[73465884,{"idx":28,"name":"sewer-pipe-02-edge-01","tpage_name":"sewk-vis-tfrag"}],[48562284,{"idx":108,"name":"cguard1-gunmetaldark2","tpage_name":"sewa-vis-pris"}],[67239984,{"idx":48,"name":"warpgate-post-01","tpage_name":"vinroom-vis-tfrag"}],[57278544,{"idx":80,"name":"wstlander-04-gun","tpage_name":"waswide-vis-pris"}],[104726622,{"idx":94,"name":"jakchires-pants","tpage_name":"deshover-pris"}],[122159142,{"idx":38,"name":"facb_dec-metal-01","tpage_name":"factoryb-vis-tfrag"}],[73465883,{"idx":27,"name":"sewer-pipe-01","tpage_name":"sewk-vis-tfrag"}],[48562283,{"idx":107,"name":"cguard1-chestplate","tpage_name":"sewa-vis-pris"}],[67239983,{"idx":47,"name":"warpgate-precursormetal","tpage_name":"vinroom-vis-tfrag"}],[57278543,{"idx":79,"name":"wstlander-04-dark-blue","tpage_name":"waswide-vis-pris"}],[104726621,{"idx":93,"name":"jakchires-lightbrownspat","tpage_name":"deshover-pris"}],[122159141,{"idx":37,"name":"facb-big-metal-panl01","tpage_name":"factoryb-vis-tfrag"}],[73465882,{"idx":26,"name":"sewer-stone-arch-01","tpage_name":"sewk-vis-tfrag"}],[48562282,{"idx":106,"name":"cguard1-backmetal","tpage_name":"sewa-vis-pris"}],[67239982,{"idx":46,"name":"warpgate-circuitpattern2","tpage_name":"vinroom-vis-tfrag"}],[57278542,{"idx":78,"name":"wstlander-03-flesh","tpage_name":"waswide-vis-pris"}],[104726620,{"idx":92,"name":"jakchires-leatherpouch","tpage_name":"deshover-pris"}],[122159140,{"idx":36,"name":"fac-tower-door-02","tpage_name":"factoryb-vis-tfrag"}],[73465881,{"idx":25,"name":"sewer-metal-block-07","tpage_name":"sewk-vis-tfrag"}],[48562281,{"idx":105,"name":"brown-hose","tpage_name":"sewa-vis-pris"}],[67239981,{"idx":45,"name":"vin-rim-04","tpage_name":"vinroom-vis-tfrag"}],[57278541,{"idx":77,"name":"wstlander-03-eye","tpage_name":"waswide-vis-pris"}],[104726619,{"idx":91,"name":"jakchires-jacket","tpage_name":"deshover-pris"}],[122159139,{"idx":35,"name":"facb-spotlight","tpage_name":"factoryb-vis-tfrag"}],[73465880,{"idx":24,"name":"sewer-scaffold-03","tpage_name":"sewk-vis-tfrag"}],[48562280,{"idx":104,"name":"blue-gem","tpage_name":"sewa-vis-pris"}],[67239980,{"idx":44,"name":"vin-wall-bottom-greyblue","tpage_name":"vinroom-vis-tfrag"}],[57278540,{"idx":76,"name":"wstlander-02-skirt","tpage_name":"waswide-vis-pris"}],[104726618,{"idx":90,"name":"jakchires-horn","tpage_name":"deshover-pris"}],[122159138,{"idx":34,"name":"fac-tower-large-panel-02","tpage_name":"factoryb-vis-tfrag"}],[73465879,{"idx":23,"name":"sewer-metal-trim-01","tpage_name":"sewk-vis-tfrag"}],[48562279,{"idx":103,"name":"sew-frog-skin-04","tpage_name":"sewa-vis-pris"}],[67239979,{"idx":43,"name":"vin-wall-02","tpage_name":"vinroom-vis-tfrag"}],[57278539,{"idx":75,"name":"wstlander-02-shirt","tpage_name":"waswide-vis-pris"}],[104726617,{"idx":89,"name":"jakchires-hair","tpage_name":"deshover-pris"}],[122159137,{"idx":33,"name":"fac-tower-base-04","tpage_name":"factoryb-vis-tfrag"}],[73465878,{"idx":22,"name":"sewer-bolt-side-02","tpage_name":"sewk-vis-tfrag"}],[48562278,{"idx":102,"name":"sew-frog-skin-03","tpage_name":"sewa-vis-pris"}],[67239978,{"idx":42,"name":"vin-wall-01","tpage_name":"vinroom-vis-tfrag"}],[57278538,{"idx":74,"name":"wstlander-02-scarf","tpage_name":"waswide-vis-pris"}],[104726616,{"idx":88,"name":"jakchires-glovetop","tpage_name":"deshover-pris"}],[119668776,{"idx":40,"name":"jinx-scarf-ingame","tpage_name":"ljinx-pris"}],[122159136,{"idx":32,"name":"facb_redmetal-d-02","tpage_name":"factoryb-vis-tfrag"}],[73465877,{"idx":21,"name":"sewer-bolt-side-01","tpage_name":"sewk-vis-tfrag"}],[48562277,{"idx":101,"name":"sew-frog-skin-02","tpage_name":"sewa-vis-pris"}],[67239977,{"idx":41,"name":"vin-turbine-panel-04","tpage_name":"vinroom-vis-tfrag"}],[57278537,{"idx":73,"name":"wstlander-02-ponytail","tpage_name":"waswide-vis-pris"}],[104726615,{"idx":87,"name":"jakchires-facert","tpage_name":"deshover-pris"}],[119668775,{"idx":39,"name":"com-power-box-wires-01","tpage_name":"ljinx-pris"}],[122159135,{"idx":31,"name":"fac-tower-pipe-01","tpage_name":"factoryb-vis-tfrag"}],[73465876,{"idx":20,"name":"sewer-brick-block-10","tpage_name":"sewk-vis-tfrag"}],[48562276,{"idx":100,"name":"sew-frog-skin-01","tpage_name":"sewa-vis-pris"}],[67239976,{"idx":40,"name":"vin-turbine-panel-01","tpage_name":"vinroom-vis-tfrag"}],[57278536,{"idx":72,"name":"wstlander-02-head","tpage_name":"waswide-vis-pris"}],[104726614,{"idx":86,"name":"jakchires-facelft","tpage_name":"deshover-pris"}],[119668774,{"idx":38,"name":"com-power-box-tube","tpage_name":"ljinx-pris"}],[73465875,{"idx":19,"name":"sewer-brick-block-11","tpage_name":"sewk-vis-tfrag"}],[67239975,{"idx":39,"name":"vin-rim-03","tpage_name":"vinroom-vis-tfrag"}],[48562275,{"idx":99,"name":"sew-frog-fin-02","tpage_name":"sewa-vis-pris"}],[57278535,{"idx":71,"name":"wstlander-02-glove","tpage_name":"waswide-vis-pris"}],[104726613,{"idx":85,"name":"jakchires-eyelid","tpage_name":"deshover-pris"}],[119668773,{"idx":37,"name":"com-power-box-symbol","tpage_name":"ljinx-pris"}],[122159133,{"idx":29,"name":"facb-big-metal-panl02","tpage_name":"factoryb-vis-tfrag"}],[73465874,{"idx":18,"name":"sewer-pipe-02","tpage_name":"sewk-vis-tfrag"}],[74711054,{"idx":14,"name":"sewer-watefall-froth-01-m-dest","tpage_name":"sewm-vis-water"}],[48562274,{"idx":98,"name":"sew-frog-fin-01","tpage_name":"sewa-vis-pris"}],[57278534,{"idx":70,"name":"wstlander-02-eye","tpage_name":"waswide-vis-pris"}],[67239974,{"idx":38,"name":"vin-rim-02","tpage_name":"vinroom-vis-tfrag"}],[104726612,{"idx":84,"name":"jakchires-eyebrow","tpage_name":"deshover-pris"}],[119668772,{"idx":36,"name":"com-power-box-plate","tpage_name":"ljinx-pris"}],[122159132,{"idx":28,"name":"fac-tower-door-01","tpage_name":"factoryb-vis-tfrag"}],[73465873,{"idx":17,"name":"common-black","tpage_name":"sewk-vis-tfrag"}],[74711053,{"idx":13,"name":"sewer-watefall-froth-01-m","tpage_name":"sewm-vis-water"}],[48562273,{"idx":97,"name":"sew-frog-eye-01","tpage_name":"sewa-vis-pris"}],[57278533,{"idx":69,"name":"wstlander-02-bootheel","tpage_name":"waswide-vis-pris"}],[67239973,{"idx":37,"name":"vin-rim-01","tpage_name":"vinroom-vis-tfrag"}],[104726611,{"idx":83,"name":"jakchires-eye","tpage_name":"deshover-pris"}],[119668771,{"idx":35,"name":"citwide-crimson-wall-plain","tpage_name":"ljinx-pris"}],[122159131,{"idx":27,"name":"fac-tower-base-rim-02","tpage_name":"factoryb-vis-tfrag"}],[73465872,{"idx":16,"name":"sewer-pipe-rim-07-hitweak","tpage_name":"sewk-vis-tfrag"}],[48562272,{"idx":96,"name":"saberfish-skin-03","tpage_name":"sewa-vis-pris"}],[74711052,{"idx":12,"name":"sewer-water-wave-01-m-dest","tpage_name":"sewm-vis-water"}],[57278532,{"idx":68,"name":"wstlander-02-belt","tpage_name":"waswide-vis-pris"}],[67239972,{"idx":36,"name":"vin-red","tpage_name":"vinroom-vis-tfrag"}],[104726610,{"idx":82,"name":"jakchires-clips","tpage_name":"deshover-pris"}],[119668770,{"idx":34,"name":"citwide-crimson-tube","tpage_name":"ljinx-pris"}],[122159130,{"idx":26,"name":"fac-tower-panel-01","tpage_name":"factoryb-vis-tfrag"}],[73465871,{"idx":15,"name":"sewer-pipe-rim-05b","tpage_name":"sewk-vis-tfrag"}],[74711051,{"idx":11,"name":"sewer-water-still-01-m-dest","tpage_name":"sewm-vis-water"}],[48562271,{"idx":95,"name":"saberfish-skin-02","tpage_name":"sewa-vis-pris"}],[57278531,{"idx":67,"name":"wstlander-02-armor","tpage_name":"waswide-vis-pris"}],[67239971,{"idx":35,"name":"vin-pipe-05","tpage_name":"vinroom-vis-tfrag"}],[104726609,{"idx":81,"name":"jakchires-chestplate","tpage_name":"deshover-pris"}],[119668769,{"idx":33,"name":"citwide-crimson-red","tpage_name":"ljinx-pris"}],[122159129,{"idx":25,"name":"fac-tower-base-rim-04","tpage_name":"factoryb-vis-tfrag"}],[73465870,{"idx":14,"name":"sewer-nut-01","tpage_name":"sewk-vis-tfrag"}],[74711050,{"idx":10,"name":"sewer-waterfall-01-m-dest","tpage_name":"sewm-vis-water"}],[48562270,{"idx":94,"name":"saberfish-skin-01","tpage_name":"sewa-vis-pris"}],[57278530,{"idx":66,"name":"wstlander-02-arm","tpage_name":"waswide-vis-pris"}],[67239970,{"idx":34,"name":"vin-pipe-04","tpage_name":"vinroom-vis-tfrag"}],[104726608,{"idx":80,"name":"jakchires-brwnleather","tpage_name":"deshover-pris"}],[119668768,{"idx":32,"name":"citwide-crimson-light","tpage_name":"ljinx-pris"}],[122159128,{"idx":24,"name":"fac-tower-08","tpage_name":"factoryb-vis-tfrag"}],[104726607,{"idx":79,"name":"jakchires-brownstrap","tpage_name":"deshover-pris"}],[119668767,{"idx":31,"name":"citwide-crimson-gold","tpage_name":"ljinx-pris"}],[122159127,{"idx":23,"name":"fac-tower-base-rim-03","tpage_name":"factoryb-vis-tfrag"}],[73465868,{"idx":12,"name":"sewer-scaffold-01","tpage_name":"sewk-vis-tfrag"}],[74711048,{"idx":8,"name":"sewer-waterfall-01-m","tpage_name":"sewm-vis-water"}],[48562268,{"idx":92,"name":"grunt-metal-01","tpage_name":"sewa-vis-pris"}],[57278528,{"idx":64,"name":"wstlander-01-skirt","tpage_name":"waswide-vis-pris"}],[67239968,{"idx":32,"name":"vin-pipe-02","tpage_name":"vinroom-vis-tfrag"}],[104726606,{"idx":78,"name":"jakchires-blackstrap","tpage_name":"deshover-pris"}],[38732066,{"idx":290,"name":"male5_20","tpage_name":"wasstada-sprite"}],[119668766,{"idx":30,"name":"sig2-shoetop","tpage_name":"ljinx-pris"}],[122159126,{"idx":22,"name":"facb-bigpipe-01","tpage_name":"factoryb-vis-tfrag"}],[73465867,{"idx":11,"name":"sewer-brick-block-09","tpage_name":"sewk-vis-tfrag"}],[74711047,{"idx":7,"name":"sewer-water-wave-01-m","tpage_name":"sewm-vis-water"}],[48562267,{"idx":91,"name":"grunt-hose","tpage_name":"sewa-vis-pris"}],[57278527,{"idx":63,"name":"wstlander-01-shoulderarmor","tpage_name":"waswide-vis-pris"}],[67239967,{"idx":31,"name":"vin-pipe-01","tpage_name":"vinroom-vis-tfrag"}],[104726605,{"idx":77,"name":"jakchires-arm","tpage_name":"deshover-pris"}],[38732065,{"idx":289,"name":"male5_19","tpage_name":"wasstada-sprite"}],[119668765,{"idx":29,"name":"sig2-shoebottom","tpage_name":"ljinx-pris"}],[122159125,{"idx":21,"name":"facb_dec-metal-02","tpage_name":"factoryb-vis-tfrag"}],[73465866,{"idx":10,"name":"sewer-metal-floor-01","tpage_name":"sewk-vis-tfrag"}],[74711046,{"idx":6,"name":"sewer-water-still-01-m","tpage_name":"sewm-vis-water"}],[48562266,{"idx":90,"name":"grunt-eye-01","tpage_name":"sewa-vis-pris"}],[57278526,{"idx":62,"name":"wstlander-01-shoetop","tpage_name":"waswide-vis-pris"}],[67239966,{"idx":30,"name":"vin-panel-11","tpage_name":"vinroom-vis-tfrag"}],[104726604,{"idx":76,"name":"jakc-wristband-a2","tpage_name":"deshover-pris"}],[38732064,{"idx":288,"name":"male5_18","tpage_name":"wasstada-sprite"}],[122159124,{"idx":20,"name":"facb-corrugate-01","tpage_name":"factoryb-vis-tfrag"}],[73465865,{"idx":9,"name":"sewer-metal-block-01","tpage_name":"sewk-vis-tfrag"}],[74711045,{"idx":5,"name":"sewer-water-highlight-01-m","tpage_name":"sewm-vis-water"}],[57278525,{"idx":61,"name":"wstlander-01-shoebottom","tpage_name":"waswide-vis-pris"}],[67239965,{"idx":29,"name":"vin-panel-10","tpage_name":"vinroom-vis-tfrag"}],[104726603,{"idx":75,"name":"jakc-wraps","tpage_name":"deshover-pris"}],[38732063,{"idx":287,"name":"male5_17","tpage_name":"wasstada-sprite"}],[122159123,{"idx":19,"name":"fac-tower-base-02","tpage_name":"factoryb-vis-tfrag"}],[104726602,{"idx":74,"name":"jakc-waistband2","tpage_name":"deshover-pris"}],[38732062,{"idx":286,"name":"male5_16","tpage_name":"wasstada-sprite"}],[122159122,{"idx":18,"name":"facb_blue-metal-01","tpage_name":"factoryb-vis-tfrag"}],[73465863,{"idx":7,"name":"sewer-plate-05","tpage_name":"sewk-vis-tfrag"}],[57278523,{"idx":59,"name":"wstlander-01-mustache","tpage_name":"waswide-vis-pris"}],[67239963,{"idx":27,"name":"vin-panel-08","tpage_name":"vinroom-vis-tfrag"}],[104726601,{"idx":73,"name":"jakc-skirt","tpage_name":"deshover-pris"}],[38732061,{"idx":285,"name":"male5_15","tpage_name":"wasstada-sprite"}],[122159121,{"idx":17,"name":"facb-glass-01","tpage_name":"factoryb-vis-tfrag"}],[104726600,{"idx":72,"name":"jakc-scarfhanging","tpage_name":"deshover-pris"}],[38732060,{"idx":284,"name":"male5_14","tpage_name":"wasstada-sprite"}],[119668760,{"idx":24,"name":"jakbsmall-glovetop","tpage_name":"ljinx-pris"}],[122159120,{"idx":16,"name":"facb_temp_dark","tpage_name":"factoryb-vis-tfrag"}],[73465861,{"idx":5,"name":"sewer-metal-block-05","tpage_name":"sewk-vis-tfrag"}],[74711041,{"idx":1,"name":"sewer-waterfall-02-m-dest","tpage_name":"sewm-vis-water"}],[48562261,{"idx":85,"name":"jakc-skirt","tpage_name":"sewa-vis-pris"}],[57278521,{"idx":57,"name":"wstlander-01-head","tpage_name":"waswide-vis-pris"}],[67239961,{"idx":25,"name":"vin-panel-06","tpage_name":"vinroom-vis-tfrag"}],[104726599,{"idx":71,"name":"jakc-scarf","tpage_name":"deshover-pris"}],[38732059,{"idx":283,"name":"male5_13","tpage_name":"wasstada-sprite"}],[119668759,{"idx":23,"name":"jakbsmall-finger","tpage_name":"ljinx-pris"}],[122159119,{"idx":15,"name":"facb-beam01","tpage_name":"factoryb-vis-tfrag"}],[104726598,{"idx":70,"name":"jakc-lens","tpage_name":"deshover-pris"}],[38732058,{"idx":282,"name":"male5_12","tpage_name":"wasstada-sprite"}],[119668758,{"idx":22,"name":"jakbsmall-blackstrap","tpage_name":"ljinx-pris"}],[122159118,{"idx":14,"name":"facb_redmetal-d-01","tpage_name":"factoryb-vis-tfrag"}],[73465859,{"idx":3,"name":"sewer-big-brace-01","tpage_name":"sewk-vis-tfrag"}],[48562259,{"idx":83,"name":"jakchires-teeth","tpage_name":"sewa-vis-pris"}],[52297799,{"idx":71,"name":"freehq-wal-tilem07","tpage_name":"freehq-tfrag"}],[57278519,{"idx":55,"name":"wstlander-01-gunmetal-03","tpage_name":"waswide-vis-pris"}],[67239959,{"idx":23,"name":"vin-panel-04","tpage_name":"vinroom-vis-tfrag"}],[104726597,{"idx":69,"name":"jakc-gogglemetal","tpage_name":"deshover-pris"}],[38732057,{"idx":281,"name":"male5_11","tpage_name":"wasstada-sprite"}],[119668757,{"idx":21,"name":"environment-oldmetal","tpage_name":"ljinx-pris"}],[122159117,{"idx":13,"name":"facb_temp_medium","tpage_name":"factoryb-vis-tfrag"}],[73465858,{"idx":2,"name":"sewer-block-02-hitweak","tpage_name":"sewk-vis-tfrag"}],[48562258,{"idx":82,"name":"jakchires-shoeteop","tpage_name":"sewa-vis-pris"}],[67239958,{"idx":22,"name":"vin-panel-03","tpage_name":"vinroom-vis-tfrag"}],[52297798,{"idx":70,"name":"freehq-red-light","tpage_name":"freehq-tfrag"}],[57278518,{"idx":54,"name":"wstlander-01-gunmetal-02","tpage_name":"waswide-vis-pris"}],[104726596,{"idx":68,"name":"jakc-chestplate-straps","tpage_name":"deshover-pris"}],[38732056,{"idx":280,"name":"male5_10","tpage_name":"wasstada-sprite"}],[119668756,{"idx":20,"name":"citn-allleye","tpage_name":"ljinx-pris"}],[122159116,{"idx":12,"name":"facb_blue-metal-03","tpage_name":"factoryb-vis-tfrag"}],[73465857,{"idx":1,"name":"sew-metal-floor-01","tpage_name":"sewk-vis-tfrag"}],[48562257,{"idx":81,"name":"jakchires-shoemetal","tpage_name":"sewa-vis-pris"}],[67239957,{"idx":21,"name":"vin-panel-01","tpage_name":"vinroom-vis-tfrag"}],[52297797,{"idx":69,"name":"freehq-wal-tilem04","tpage_name":"freehq-tfrag"}],[57278517,{"idx":53,"name":"wstlander-01-gunmetal-01","tpage_name":"waswide-vis-pris"}],[104726595,{"idx":67,"name":"jakc-armor","tpage_name":"deshover-pris"}],[38732055,{"idx":279,"name":"male5_09","tpage_name":"wasstada-sprite"}],[122159115,{"idx":11,"name":"facb_dec-metal-03","tpage_name":"factoryb-vis-tfrag"}],[73465856,{"idx":0,"name":"sewer-grate-01","tpage_name":"sewk-vis-tfrag"}],[48562256,{"idx":80,"name":"jakchires-shoebottom","tpage_name":"sewa-vis-pris"}],[67239956,{"idx":20,"name":"vin-monitor-rim-05","tpage_name":"vinroom-vis-tfrag"}],[52297796,{"idx":68,"name":"freehq-wal-tilem03","tpage_name":"freehq-tfrag"}],[57278516,{"idx":52,"name":"wstlander-01-eye","tpage_name":"waswide-vis-pris"}],[73138184,{"idx":8,"name":"fora-shrub-vine","tpage_name":"forestb-vis-shrub"}],[74383364,{"idx":4,"name":"sewer-nut-01","tpage_name":"sewj-vis-tfrag"}],[75628544,{"idx":0,"name":"sig-flatfangs","tpage_name":"lsig-water"}],[56950844,{"idx":60,"name":"waspala-throne-bolt","tpage_name":"waspala-tfrag"}],[60686384,{"idx":48,"name":"minc-blue-paint-rust05","tpage_name":"mineb-vis-tfrag"}],[73138183,{"idx":7,"name":"fora-shrub-weed","tpage_name":"forestb-vis-shrub"}],[74383363,{"idx":3,"name":"sewer-pipe-rim-05b","tpage_name":"sewj-vis-tfrag"}],[56950843,{"idx":59,"name":"waspala-throne-base","tpage_name":"waspala-tfrag"}],[60686383,{"idx":47,"name":"minb-stone21","tpage_name":"mineb-vis-tfrag"}],[73138182,{"idx":6,"name":"fora-shrub-asian-grass","tpage_name":"forestb-vis-shrub"}],[74383362,{"idx":2,"name":"sewer-concrete-edge-02","tpage_name":"sewj-vis-tfrag"}],[56950842,{"idx":58,"name":"waspala-step-01","tpage_name":"waspala-tfrag"}],[60686382,{"idx":46,"name":"minc-blue-paint-rust03","tpage_name":"mineb-vis-tfrag"}],[73138181,{"idx":5,"name":"fora-shrub-grass","tpage_name":"forestb-vis-shrub"}],[74383361,{"idx":1,"name":"sewer-scaffold-01","tpage_name":"sewj-vis-tfrag"}],[56950841,{"idx":57,"name":"waspala-metal-plate03","tpage_name":"waspala-tfrag"}],[60686381,{"idx":45,"name":"minc-safe-plate-02","tpage_name":"mineb-vis-tfrag"}],[73138180,{"idx":4,"name":"fora-shrub-cattail","tpage_name":"forestb-vis-shrub"}],[60686380,{"idx":44,"name":"minb-rock-floor01","tpage_name":"mineb-vis-tfrag"}],[74383360,{"idx":0,"name":"sewer-metal-block-04","tpage_name":"sewj-vis-tfrag"}],[56950840,{"idx":56,"name":"waspala-stage-step","tpage_name":"waspala-tfrag"}],[73138179,{"idx":3,"name":"fora-shrub-pebbles","tpage_name":"forestb-vis-shrub"}],[56950839,{"idx":55,"name":"waspala-stage-tile","tpage_name":"waspala-tfrag"}],[60686379,{"idx":43,"name":"minc-safe-plate-01","tpage_name":"mineb-vis-tfrag"}],[73138178,{"idx":2,"name":"fora-shrub-moss","tpage_name":"forestb-vis-shrub"}],[56950838,{"idx":54,"name":"waspala-fountain-base02","tpage_name":"waspala-tfrag"}],[60686378,{"idx":42,"name":"minc-strut-01","tpage_name":"mineb-vis-tfrag"}],[73138177,{"idx":1,"name":"fora-shrub-hanging-growth","tpage_name":"forestb-vis-shrub"}],[60686377,{"idx":41,"name":"minc-rust-02","tpage_name":"mineb-vis-tfrag"}],[73138176,{"idx":0,"name":"for-bark","tpage_name":"forestb-vis-shrub"}],[60686376,{"idx":40,"name":"minc-yel-safe-paint-rust01","tpage_name":"mineb-vis-tfrag"}],[56950836,{"idx":52,"name":"waspala-step-top","tpage_name":"waspala-tfrag"}],[104792152,{"idx":88,"name":"dk-sat-panel-01","tpage_name":"desresc-pris"}],[130940932,{"idx":4,"name":"holostatic-03","tpage_name":"deshover-sprite"}],[104792151,{"idx":87,"name":"dk-sat-claw-01","tpage_name":"desresc-pris"}],[130940931,{"idx":3,"name":"holostatic-02","tpage_name":"deshover-sprite"}],[104792150,{"idx":86,"name":"dk-sat-cable-03","tpage_name":"desresc-pris"}],[130940930,{"idx":2,"name":"holostatic-01","tpage_name":"deshover-sprite"}],[104792148,{"idx":84,"name":"dk-sat-cable-01","tpage_name":"desresc-pris"}],[85196822,{"idx":22,"name":"jakc-wristband-a2","tpage_name":"desrace1-pris"}],[38732043,{"idx":267,"name":"male4_18","tpage_name":"wasstada-sprite"}],[100990983,{"idx":7,"name":"jakb-armor","tpage_name":"ljakklev-pris"}],[38731983,{"idx":207,"name":"male2_00","tpage_name":"wasstada-sprite"}],[93519903,{"idx":31,"name":"hud-small-vehicle-health-bar-01","tpage_name":"wasall-minimap"}],[49348612,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewb-vis-pris"}],[35651632,{"idx":48,"name":"samos-teeth2","tpage_name":"introcst-pris2"}],[85196821,{"idx":21,"name":"vehicle-wheel-blur-01","tpage_name":"desrace1-pris"}],[88932361,{"idx":9,"name":"forest-leaf4","tpage_name":"foresta-sprite"}],[38732042,{"idx":266,"name":"male4_17","tpage_name":"wasstada-sprite"}],[49348611,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewb-vis-pris"}],[35651631,{"idx":47,"name":"samos-strap","tpage_name":"introcst-pris2"}],[85196820,{"idx":20,"name":"vehicle-wheel-01","tpage_name":"desrace1-pris"}],[88932360,{"idx":8,"name":"forest-leaf3","tpage_name":"foresta-sprite"}],[38732041,{"idx":265,"name":"male4_16","tpage_name":"wasstada-sprite"}],[100990981,{"idx":5,"name":"jak-gogglemetal","tpage_name":"ljakklev-pris"}],[38731981,{"idx":205,"name":"male1_19","tpage_name":"wasstada-sprite"}],[49348610,{"idx":2,"name":"airlock-door-main","tpage_name":"sewb-vis-pris"}],[35651630,{"idx":46,"name":"samos-metal","tpage_name":"introcst-pris2"}],[85196819,{"idx":19,"name":"vehicle-tread-blur-02","tpage_name":"desrace1-pris"}],[88932359,{"idx":7,"name":"forest-leaf2","tpage_name":"foresta-sprite"}],[38732040,{"idx":264,"name":"male4_15","tpage_name":"wasstada-sprite"}],[49348609,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewb-vis-pris"}],[35651629,{"idx":45,"name":"samos-log-03","tpage_name":"introcst-pris2"}],[85196818,{"idx":18,"name":"vehicle-toad-exhaust-01","tpage_name":"desrace1-pris"}],[88932358,{"idx":6,"name":"forest-leaf","tpage_name":"foresta-sprite"}],[38732039,{"idx":263,"name":"male4_14","tpage_name":"wasstada-sprite"}],[100990979,{"idx":3,"name":"jackb-lens","tpage_name":"ljakklev-pris"}],[38731979,{"idx":203,"name":"male1_17","tpage_name":"wasstada-sprite"}],[49348608,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewb-vis-pris"}],[35651628,{"idx":44,"name":"samos-log-02","tpage_name":"introcst-pris2"}],[85196816,{"idx":16,"name":"vehicle-gun-box-01","tpage_name":"desrace1-pris"}],[38732037,{"idx":261,"name":"male4_12","tpage_name":"wasstada-sprite"}],[112197657,{"idx":25,"name":"intcept-b-teeth01","tpage_name":"desinter-pris"}],[100991037,{"idx":61,"name":"klever-widebrownstrap","tpage_name":"ljakklev-pris"}],[112197638,{"idx":6,"name":"intcept-tread01","tpage_name":"desinter-pris"}],[38732018,{"idx":242,"name":"male3_14","tpage_name":"wasstada-sprite"}],[100991018,{"idx":42,"name":"klever-face-01scars","tpage_name":"ljakklev-pris"}],[113442818,{"idx":2,"name":"sat-shield-dest","tpage_name":"desresc-warp"}],[60555267,{"idx":3,"name":"mina-idol-02","tpage_name":"minea-vis-tfrag"}],[35651667,{"idx":83,"name":"king-bluemetal","tpage_name":"introcst-pris2"}],[85196815,{"idx":15,"name":"vehicle-gas-tank-01","tpage_name":"desrace1-pris"}],[35389615,{"idx":175,"name":"klever-mustache","tpage_name":"introcst-pris"}],[88932355,{"idx":3,"name":"wave-foam","tpage_name":"foresta-sprite"}],[38732036,{"idx":260,"name":"male4_11","tpage_name":"wasstada-sprite"}],[112197656,{"idx":24,"name":"intcept-b-pipe01","tpage_name":"desinter-pris"}],[100991036,{"idx":60,"name":"klever-undershirt","tpage_name":"ljakklev-pris"}],[112197637,{"idx":5,"name":"intcept-teeth01","tpage_name":"desinter-pris"}],[38732017,{"idx":241,"name":"male3_13","tpage_name":"wasstada-sprite"}],[113442817,{"idx":1,"name":"sat-shield-env-uvscroll","tpage_name":"desresc-warp"}],[100991017,{"idx":41,"name":"klever-face-01","tpage_name":"ljakklev-pris"}],[60555266,{"idx":2,"name":"mina-idol-02-noalpha","tpage_name":"minea-vis-tfrag"}],[35651666,{"idx":82,"name":"king-wristband","tpage_name":"introcst-pris2"}],[85196814,{"idx":14,"name":"vehicle-chrome-pipe-01","tpage_name":"desrace1-pris"}],[35389614,{"idx":174,"name":"klever-hair","tpage_name":"introcst-pris"}],[38732035,{"idx":259,"name":"male4_10","tpage_name":"wasstada-sprite"}],[112197655,{"idx":23,"name":"intcept-b-gun01","tpage_name":"desinter-pris"}],[100991035,{"idx":59,"name":"klever-thighs","tpage_name":"ljakklev-pris"}],[60555265,{"idx":1,"name":"mina-idol-01-noalpha","tpage_name":"minea-vis-tfrag"}],[35651665,{"idx":81,"name":"king-wrap","tpage_name":"introcst-pris2"}],[85196813,{"idx":13,"name":"vehicle-cap-pin-01","tpage_name":"desrace1-pris"}],[35389613,{"idx":173,"name":"klever-face-01scars","tpage_name":"introcst-pris"}],[88932353,{"idx":1,"name":"grenadier-grenade-part","tpage_name":"foresta-sprite"}],[38732034,{"idx":258,"name":"male4_09","tpage_name":"wasstada-sprite"}],[112197654,{"idx":22,"name":"intcept-b-base-patern02","tpage_name":"desinter-pris"}],[100991034,{"idx":58,"name":"klever-skirtlight","tpage_name":"ljakklev-pris"}],[85196812,{"idx":12,"name":"vehicle-brace-pipe-01","tpage_name":"desrace1-pris"}],[35389612,{"idx":172,"name":"klever-face-01","tpage_name":"introcst-pris"}],[88932352,{"idx":0,"name":"mech-flame","tpage_name":"foresta-sprite"}],[38732033,{"idx":257,"name":"male4_08","tpage_name":"wasstada-sprite"}],[112197653,{"idx":21,"name":"intcept-b-base-patern01","tpage_name":"desinter-pris"}],[100991033,{"idx":57,"name":"klever-skirtdark","tpage_name":"ljakklev-pris"}],[85196811,{"idx":11,"name":"vehicle-body-panel-01","tpage_name":"desrace1-pris"}],[35389611,{"idx":171,"name":"klever-eyelid","tpage_name":"introcst-pris"}],[38732032,{"idx":256,"name":"male4_07","tpage_name":"wasstada-sprite"}],[112197652,{"idx":20,"name":"intcept-b-base-green01","tpage_name":"desinter-pris"}],[100991032,{"idx":56,"name":"klever-shoebottom","tpage_name":"ljakklev-pris"}],[85196809,{"idx":9,"name":"intcept-teeth01","tpage_name":"desrace1-pris"}],[35389609,{"idx":169,"name":"klever-earcup","tpage_name":"introcst-pris"}],[38732030,{"idx":254,"name":"male4_05","tpage_name":"wasstada-sprite"}],[100991030,{"idx":54,"name":"klever-mustache","tpage_name":"ljakklev-pris"}],[38732029,{"idx":253,"name":"male4_04","tpage_name":"wasstada-sprite"}],[112197649,{"idx":17,"name":"vehicle-wheel-blur-01","tpage_name":"desinter-pris"}],[100991029,{"idx":53,"name":"klever-horn","tpage_name":"ljakklev-pris"}],[38732028,{"idx":252,"name":"male4_03","tpage_name":"wasstada-sprite"}],[112197648,{"idx":16,"name":"vehicle-wheel-01","tpage_name":"desinter-pris"}],[100991028,{"idx":52,"name":"klever-handwrap","tpage_name":"ljakklev-pris"}],[38732026,{"idx":250,"name":"male4_01","tpage_name":"wasstada-sprite"}],[112197646,{"idx":14,"name":"vehicle-toad-exhaust-01","tpage_name":"desinter-pris"}],[100991026,{"idx":50,"name":"klever-hair","tpage_name":"ljakklev-pris"}],[38732025,{"idx":249,"name":"male4_00","tpage_name":"wasstada-sprite"}],[112197645,{"idx":13,"name":"vehicle-metal-plate-01","tpage_name":"desinter-pris"}],[100991025,{"idx":49,"name":"klever-gunmetal-05","tpage_name":"ljakklev-pris"}],[85196802,{"idx":2,"name":"can-side-long","tpage_name":"desrace1-pris"}],[38732023,{"idx":247,"name":"male3_19","tpage_name":"wasstada-sprite"}],[112197643,{"idx":11,"name":"vehicle-gas-tank-01","tpage_name":"desinter-pris"}],[100991023,{"idx":47,"name":"klever-gunmetal-03","tpage_name":"ljakklev-pris"}],[85196801,{"idx":1,"name":"can-knob","tpage_name":"desrace1-pris"}],[38732022,{"idx":246,"name":"male3_18","tpage_name":"wasstada-sprite"}],[112197642,{"idx":10,"name":"vehicle-chrome-pipe-01","tpage_name":"desinter-pris"}],[100991022,{"idx":46,"name":"klever-gunmetal-02","tpage_name":"ljakklev-pris"}],[20774912,{"idx":0,"name":"stdmb-energy-wall-01","tpage_name":"stadiumb-vis-alpha"}],[85196800,{"idx":0,"name":"can-cap","tpage_name":"desrace1-pris"}],[38732021,{"idx":245,"name":"male3_17","tpage_name":"wasstada-sprite"}],[112197641,{"idx":9,"name":"vehicle-cap-pin-01","tpage_name":"desinter-pris"}],[100991021,{"idx":45,"name":"klever-gunmetal-01","tpage_name":"ljakklev-pris"}],[38732020,{"idx":244,"name":"male3_16","tpage_name":"wasstada-sprite"}],[112197640,{"idx":8,"name":"vehicle-brace-pipe-01","tpage_name":"desinter-pris"}],[100991020,{"idx":44,"name":"klever-fingertop","tpage_name":"ljakklev-pris"}],[38732019,{"idx":243,"name":"male3_15","tpage_name":"wasstada-sprite"}],[100991019,{"idx":43,"name":"klever-fingerbottom","tpage_name":"ljakklev-pris"}],[112197639,{"idx":7,"name":"vehicle-body-panel-01","tpage_name":"desinter-pris"}],[48234536,{"idx":40,"name":"was-burningbush-04","tpage_name":"desert-vis-tfrag"}],[60686336,{"idx":0,"name":"minb-rock01","tpage_name":"mineb-vis-tfrag"}],[38732011,{"idx":235,"name":"male3_07","tpage_name":"wasstada-sprite"}],[100991011,{"idx":35,"name":"klever-brownstrap","tpage_name":"ljakklev-pris"}],[48234535,{"idx":39,"name":"was-burningbush-01","tpage_name":"desert-vis-tfrag"}],[38732010,{"idx":234,"name":"male3_06","tpage_name":"wasstada-sprite"}],[100991010,{"idx":34,"name":"klever-bolt","tpage_name":"ljakklev-pris"}],[48234534,{"idx":38,"name":"was-burningbush-03","tpage_name":"desert-vis-tfrag"}],[38732009,{"idx":233,"name":"male3_05","tpage_name":"wasstada-sprite"}],[100991009,{"idx":33,"name":"klever-blackstrap","tpage_name":"ljakklev-pris"}],[48234533,{"idx":37,"name":"was-burningbush-light-01","tpage_name":"desert-vis-tfrag"}],[38732008,{"idx":232,"name":"male3_04","tpage_name":"wasstada-sprite"}],[100991008,{"idx":32,"name":"klever-armor-02","tpage_name":"ljakklev-pris"}],[48234532,{"idx":36,"name":"des-wascity-outerwall-metal-d","tpage_name":"desert-vis-tfrag"}],[50724892,{"idx":28,"name":"mtn-environment-front-backup","tpage_name":"foresta-vis-pris"}],[38732007,{"idx":231,"name":"male3_03","tpage_name":"wasstada-sprite"}],[100991007,{"idx":31,"name":"klever-armor-01","tpage_name":"ljakklev-pris"}],[104726547,{"idx":19,"name":"environment-oldmetal","tpage_name":"deshover-pris"}],[48234531,{"idx":35,"name":"des-wascity-cement-road","tpage_name":"desert-vis-tfrag"}],[50724891,{"idx":27,"name":"fora-statue-stone-sides","tpage_name":"foresta-vis-pris"}],[38732006,{"idx":230,"name":"male3_02","tpage_name":"wasstada-sprite"}],[100991006,{"idx":30,"name":"klever-arm","tpage_name":"ljakklev-pris"}],[104726546,{"idx":18,"name":"daxtertuft","tpage_name":"deshover-pris"}],[48234530,{"idx":34,"name":"des-wascity-palace-siding-01","tpage_name":"desert-vis-tfrag"}],[50724890,{"idx":26,"name":"fora-statue-stone","tpage_name":"foresta-vis-pris"}],[38732005,{"idx":229,"name":"male3_01","tpage_name":"wasstada-sprite"}],[100991005,{"idx":29,"name":"jakb-shoeteop","tpage_name":"ljakklev-pris"}],[104726545,{"idx":17,"name":"daxterteeth","tpage_name":"deshover-pris"}],[48234529,{"idx":33,"name":"des-wascity-outerwall-metal-b","tpage_name":"desert-vis-tfrag"}],[38732004,{"idx":228,"name":"male3_00","tpage_name":"wasstada-sprite"}],[100991004,{"idx":28,"name":"jakb-shoemetal","tpage_name":"ljakklev-pris"}],[104726544,{"idx":16,"name":"daxternose","tpage_name":"deshover-pris"}],[48234527,{"idx":31,"name":"des-wascity-outerwall-rock","tpage_name":"desert-vis-tfrag"}],[38732002,{"idx":226,"name":"male2_19","tpage_name":"wasstada-sprite"}],[104726542,{"idx":14,"name":"daxterhelmetplain","tpage_name":"deshover-pris"}],[100991002,{"idx":26,"name":"jakb-scarf","tpage_name":"ljakklev-pris"}],[48234526,{"idx":30,"name":"des-cliff-top-02","tpage_name":"desert-vis-tfrag"}],[48234520,{"idx":24,"name":"des-mount-bottom-01","tpage_name":"desert-vis-tfrag"}],[49479700,{"idx":20,"name":"sewer-waterfall-01-e","tpage_name":"sewe-vis-water"}],[50724880,{"idx":16,"name":"fora-precursor-metal-plain-01dk","tpage_name":"foresta-vis-pris"}],[48234518,{"idx":22,"name":"des-cliff-top-04","tpage_name":"desert-vis-tfrag"}],[49479698,{"idx":18,"name":"sewer-water-01-e","tpage_name":"sewe-vis-water"}],[50724878,{"idx":14,"name":"fora-precursor-metal-edge-01","tpage_name":"foresta-vis-pris"}],[38731993,{"idx":217,"name":"male2_10","tpage_name":"wasstada-sprite"}],[104726533,{"idx":5,"name":"daxterarm","tpage_name":"deshover-pris"}],[103481353,{"idx":9,"name":"des-pinetree-leaf-01","tpage_name":"deserta-vis-shrub"}],[100990993,{"idx":17,"name":"jakb-hairtrans","tpage_name":"ljakklev-pris"}],[48234517,{"idx":21,"name":"des-cliff-top-03","tpage_name":"desert-vis-tfrag"}],[50724877,{"idx":13,"name":"fora-precursor-light","tpage_name":"foresta-vis-pris"}],[48234516,{"idx":20,"name":"des-cave-rock","tpage_name":"desert-vis-tfrag"}],[50724876,{"idx":12,"name":"fora-precursor-glass-b-02","tpage_name":"foresta-vis-pris"}],[38731991,{"idx":215,"name":"male2_08","tpage_name":"wasstada-sprite"}],[104726531,{"idx":3,"name":"daxter-furhilite","tpage_name":"deshover-pris"}],[103481351,{"idx":7,"name":"des-sand-grass-01","tpage_name":"deserta-vis-shrub"}],[100990991,{"idx":15,"name":"jakb-facert","tpage_name":"ljakklev-pris"}],[48234515,{"idx":19,"name":"des-cave-wall-01","tpage_name":"desert-vis-tfrag"}],[48234513,{"idx":17,"name":"des-mount-02","tpage_name":"desert-vis-tfrag"}],[49479693,{"idx":13,"name":"sewer-waterfall-02-e-dest","tpage_name":"sewe-vis-water"}],[48234511,{"idx":15,"name":"des-cliff-top-01","tpage_name":"desert-vis-tfrag"}],[49479691,{"idx":11,"name":"sewer-water-01-e-dest","tpage_name":"sewe-vis-water"}],[38731986,{"idx":210,"name":"male2_03","tpage_name":"wasstada-sprite"}],[93519906,{"idx":34,"name":"hud-turbo-boost-rim-01","tpage_name":"wasall-minimap"}],[100990986,{"idx":10,"name":"jakb-clips","tpage_name":"ljakklev-pris"}],[48234509,{"idx":13,"name":"des-corral-plate-02","tpage_name":"desert-vis-tfrag"}],[38731984,{"idx":208,"name":"male2_01","tpage_name":"wasstada-sprite"}],[100990984,{"idx":8,"name":"jakb-blackstrap","tpage_name":"ljakklev-pris"}],[103481344,{"idx":0,"name":"des-shrub-pebbles","tpage_name":"deserta-vis-shrub"}],[93519904,{"idx":32,"name":"hud-turbo-boost-off-01","tpage_name":"wasall-minimap"}],[48234506,{"idx":10,"name":"des-mount-01","tpage_name":"desert-vis-tfrag"}],[50724866,{"idx":2,"name":"airlock-door-main","tpage_name":"foresta-vis-pris"}],[48234505,{"idx":9,"name":"des-plainrope","tpage_name":"desert-vis-tfrag"}],[50724865,{"idx":1,"name":"airlock-door-cog","tpage_name":"foresta-vis-pris"}],[38731974,{"idx":198,"name":"male1_12","tpage_name":"wasstada-sprite"}],[98500614,{"idx":6,"name":"wang_4","tpage_name":"hanga-hfrag"}],[38731955,{"idx":179,"name":"femcher2_14","tpage_name":"wasstada-sprite"}],[73596995,{"idx":67,"name":"sewer-pipe-small-01","tpage_name":"sewi-vis-tfrag"}],[92274695,{"idx":7,"name":"vehicle-body-panel-01","tpage_name":"desrace2-pris"}],[38731942,{"idx":166,"name":"femcher2_01","tpage_name":"wasstada-sprite"}],[58654822,{"idx":102,"name":"twirl","tpage_name":"hiphog-sprite"}],[73596982,{"idx":54,"name":"sewer-bolt-side-02","tpage_name":"sewi-vis-tfrag"}],[38731941,{"idx":165,"name":"femcher2_00","tpage_name":"wasstada-sprite"}],[73596981,{"idx":53,"name":"sewer-bolt-side-01","tpage_name":"sewi-vis-tfrag"}],[38731940,{"idx":164,"name":"female1_20","tpage_name":"wasstada-sprite"}],[58654820,{"idx":100,"name":"vinroom-small-monitor-08","tpage_name":"hiphog-sprite"}],[73596980,{"idx":52,"name":"sewer-nut-01","tpage_name":"sewi-vis-tfrag"}],[96075807,{"idx":31,"name":"jakchires-shoemetal","tpage_name":"ljakc-pris"}],[101056527,{"idx":15,"name":"jakchires-chestplate","tpage_name":"ljakcklv-pris"}],[79495185,{"idx":17,"name":"des-mount-01","tpage_name":"wasintro-vis-tfrag"}],[81985545,{"idx":9,"name":"wstlander-01-shoebottom","tpage_name":"wasstadc-pris"}],[96075806,{"idx":30,"name":"jakchires-shoebottom","tpage_name":"ljakc-pris"}],[101056526,{"idx":14,"name":"jakchires-brwnleather","tpage_name":"ljakcklv-pris"}],[79495184,{"idx":16,"name":"des-cactus-01","tpage_name":"wasintro-vis-tfrag"}],[81985544,{"idx":8,"name":"wstlander-01-pants","tpage_name":"wasstadc-pris"}],[96075805,{"idx":29,"name":"jakchires-precarmor-01","tpage_name":"ljakc-pris"}],[101056525,{"idx":13,"name":"jakchires-brownstrap","tpage_name":"ljakcklv-pris"}],[79495183,{"idx":15,"name":"des-cactus-02","tpage_name":"wasintro-vis-tfrag"}],[81985543,{"idx":7,"name":"wstlander-01-mustache","tpage_name":"wasstadc-pris"}],[79495182,{"idx":14,"name":"des-palmplant-leaf-01","tpage_name":"wasintro-vis-tfrag"}],[81985542,{"idx":6,"name":"wstlander-01-leatherstrap","tpage_name":"wasstadc-pris"}],[74514462,{"idx":30,"name":"squid-drabgun","tpage_name":"sewj-vis-pris"}],[38731918,{"idx":142,"name":"flying-bird-15","tpage_name":"wasstada-sprite"}],[71106598,{"idx":38,"name":"wstd-platform-wall","tpage_name":"wasstadb-tfrag"}],[58654798,{"idx":78,"name":"screen-02","tpage_name":"hiphog-sprite"}],[79495181,{"idx":13,"name":"des-palmtree-beard","tpage_name":"wasintro-vis-tfrag"}],[81985541,{"idx":5,"name":"wstlander-01-head","tpage_name":"wasstadc-pris"}],[74514461,{"idx":29,"name":"wire-metal","tpage_name":"sewj-vis-pris"}],[38731915,{"idx":139,"name":"flying-bird-12","tpage_name":"wasstada-sprite"}],[73596955,{"idx":27,"name":"sewer-round-02","tpage_name":"sewi-vis-tfrag"}],[71106595,{"idx":35,"name":"wstd-scaffold-wall-03","tpage_name":"wasstadb-tfrag"}],[58654795,{"idx":75,"name":"vinroom-tv-text-r","tpage_name":"hiphog-sprite"}],[96075800,{"idx":24,"name":"jakchires-horn","tpage_name":"ljakc-pris"}],[101056520,{"idx":8,"name":"jakc-waistband2","tpage_name":"ljakcklv-pris"}],[102301700,{"idx":4,"name":"onin-game-square-darkener","tpage_name":"waspgame-sprite"}],[38731914,{"idx":138,"name":"flying-bird-11","tpage_name":"wasstada-sprite"}],[73596954,{"idx":26,"name":"sewer-round-03","tpage_name":"sewi-vis-tfrag"}],[58654794,{"idx":74,"name":"vinroom-tv-text-o","tpage_name":"hiphog-sprite"}],[96075799,{"idx":23,"name":"jakchires-hair","tpage_name":"ljakc-pris"}],[101056519,{"idx":7,"name":"jakc-scarf","tpage_name":"ljakcklv-pris"}],[102301699,{"idx":3,"name":"onin-game-square","tpage_name":"waspgame-sprite"}],[38731913,{"idx":137,"name":"flying-bird-10","tpage_name":"wasstada-sprite"}],[73596953,{"idx":25,"name":"sewer-round-01","tpage_name":"sewi-vis-tfrag"}],[71106593,{"idx":33,"name":"wstd-scaffold-wall-edge","tpage_name":"wasstadb-tfrag"}],[58654793,{"idx":73,"name":"vinroom-tv-text-n","tpage_name":"hiphog-sprite"}],[96075798,{"idx":22,"name":"jakchires-glovetop","tpage_name":"ljakc-pris"}],[101056518,{"idx":6,"name":"jakc-lens","tpage_name":"ljakcklv-pris"}],[102301698,{"idx":2,"name":"onin-game-scatter","tpage_name":"waspgame-sprite"}],[38731912,{"idx":136,"name":"flying-bird-09","tpage_name":"wasstada-sprite"}],[73596952,{"idx":24,"name":"sewer-block-02","tpage_name":"sewi-vis-tfrag"}],[71106592,{"idx":32,"name":"wstd-scaffold-wall-02","tpage_name":"wasstadb-tfrag"}],[58654792,{"idx":72,"name":"vinroom-tv-text-m","tpage_name":"hiphog-sprite"}],[96075797,{"idx":21,"name":"jakchires-facert","tpage_name":"ljakc-pris"}],[101056517,{"idx":5,"name":"jakc-gogglemetal","tpage_name":"ljakcklv-pris"}],[102301697,{"idx":1,"name":"onin-game-circle-darkener","tpage_name":"waspgame-sprite"}],[38731911,{"idx":135,"name":"flying-bird-08","tpage_name":"wasstada-sprite"}],[73596951,{"idx":23,"name":"sewer-pipe-rim-08","tpage_name":"sewi-vis-tfrag"}],[71106591,{"idx":31,"name":"wstd-scaffold-wall-01","tpage_name":"wasstadb-tfrag"}],[58654791,{"idx":71,"name":"vinroom-tv-text-g","tpage_name":"hiphog-sprite"}],[38731910,{"idx":134,"name":"flying-bird-07","tpage_name":"wasstada-sprite"}],[71106590,{"idx":30,"name":"wstd-scaffold-teeth","tpage_name":"wasstadb-tfrag"}],[58654790,{"idx":70,"name":"vinroom-tv-text-a","tpage_name":"hiphog-sprite"}],[73596950,{"idx":22,"name":"sewer-small-light-01","tpage_name":"sewi-vis-tfrag"}],[74514435,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewj-vis-pris"}],[67043355,{"idx":27,"name":"vinroom-tv-circle","tpage_name":"vinroom-sprite"}],[49610835,{"idx":83,"name":"sewer-brick-block-10","tpage_name":"sewf-vis-tfrag"}],[62062635,{"idx":43,"name":"flying-bird-16","tpage_name":"wascityb-sprite"}],[60817455,{"idx":47,"name":"minc-door-metal-03","tpage_name":"mineb-vis-shrub"}],[35651676,{"idx":92,"name":"veger-bootstrap","tpage_name":"introcst-pris2"}],[60555276,{"idx":12,"name":"minc-rust-bars-01","tpage_name":"minea-vis-tfrag"}],[49348656,{"idx":48,"name":"kg-grunt-cable-01","tpage_name":"sewb-vis-pris"}],[74514434,{"idx":2,"name":"airlock-door-main","tpage_name":"sewj-vis-pris"}],[67043354,{"idx":26,"name":"vinroom-tv-beam","tpage_name":"vinroom-sprite"}],[49610834,{"idx":82,"name":"sewer-brick-block-11","tpage_name":"sewf-vis-tfrag"}],[62062634,{"idx":42,"name":"flying-bird-15","tpage_name":"wascityb-sprite"}],[60817454,{"idx":46,"name":"minc-crm-paint-wall-01","tpage_name":"mineb-vis-shrub"}],[35651675,{"idx":91,"name":"veger-bootfoot","tpage_name":"introcst-pris2"}],[60555275,{"idx":11,"name":"minc-blue-paint-rust02","tpage_name":"minea-vis-tfrag"}],[49348655,{"idx":47,"name":"environment-oldmetal","tpage_name":"sewb-vis-pris"}],[74514433,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewj-vis-pris"}],[62062633,{"idx":41,"name":"flying-bird-14","tpage_name":"wascityb-sprite"}],[67043353,{"idx":25,"name":"vinroom-small-monitor-08","tpage_name":"vinroom-sprite"}],[49610833,{"idx":81,"name":"sewer-block-02-hitweak","tpage_name":"sewf-vis-tfrag"}],[60817453,{"idx":45,"name":"minc-rust-pipe-06","tpage_name":"mineb-vis-shrub"}],[35651674,{"idx":90,"name":"veger-bootbolt","tpage_name":"introcst-pris2"}],[60555274,{"idx":10,"name":"minc-yel-paint-rust01","tpage_name":"minea-vis-tfrag"}],[49348654,{"idx":46,"name":"cguard1-lens","tpage_name":"sewb-vis-pris"}],[74514432,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewj-vis-pris"}],[62062632,{"idx":40,"name":"flying-bird-13","tpage_name":"wascityb-sprite"}],[67043352,{"idx":24,"name":"vinroom-small-monitor-07","tpage_name":"vinroom-sprite"}],[49610832,{"idx":80,"name":"sewer-red-light-02","tpage_name":"sewf-vis-tfrag"}],[60817452,{"idx":44,"name":"minc-rust-pipe-04","tpage_name":"mineb-vis-shrub"}],[35651673,{"idx":89,"name":"veger-bookspine","tpage_name":"introcst-pris2"}],[60555273,{"idx":9,"name":"minc-blue-paint-01","tpage_name":"minea-vis-tfrag"}],[49348653,{"idx":45,"name":"cguard1-guntube","tpage_name":"sewb-vis-pris"}],[35651672,{"idx":88,"name":"veger-booksides","tpage_name":"introcst-pris2"}],[60555272,{"idx":8,"name":"minc-blue-paint-rust01","tpage_name":"minea-vis-tfrag"}],[49348652,{"idx":44,"name":"cguard1-gunmetaldark2","tpage_name":"sewb-vis-pris"}],[35651671,{"idx":87,"name":"veger-bookleather","tpage_name":"introcst-pris2"}],[60555271,{"idx":7,"name":"minc-crate-02","tpage_name":"minea-vis-tfrag"}],[49348651,{"idx":43,"name":"cguard1-chestplate","tpage_name":"sewb-vis-pris"}],[35651670,{"idx":86,"name":"king-wraps","tpage_name":"introcst-pris2"}],[60555270,{"idx":6,"name":"minb-rock01","tpage_name":"minea-vis-tfrag"}],[49348650,{"idx":42,"name":"cguard1-backmetal","tpage_name":"sewb-vis-pris"}],[35651669,{"idx":85,"name":"king-precursermetal-trim","tpage_name":"introcst-pris2"}],[60555269,{"idx":5,"name":"min-env-mar-01","tpage_name":"minea-vis-tfrag"}],[49348649,{"idx":41,"name":"bam-eyelight","tpage_name":"sewb-vis-pris"}],[35651668,{"idx":84,"name":"king-precursermetal-decor","tpage_name":"introcst-pris2"}],[35651663,{"idx":79,"name":"king-vest","tpage_name":"introcst-pris2"}],[35651662,{"idx":78,"name":"king-thinstrap","tpage_name":"introcst-pris2"}],[49348642,{"idx":34,"name":"cguardgame-metallight-01small","tpage_name":"sewb-vis-pris"}],[35651661,{"idx":77,"name":"king-teeth","tpage_name":"introcst-pris2"}],[8192019,{"idx":19,"name":"citn-allleatherstrap","tpage_name":"ctywide-vis-pris"}],[35651623,{"idx":39,"name":"samos-hair","tpage_name":"introcst-pris2"}],[112394260,{"idx":20,"name":"des-transport-wheel-side","tpage_name":"desrescg-pris"}],[106168360,{"idx":40,"name":"minc-brok-edge","tpage_name":"mined-tfrag"}],[118620160,{"idx":0,"name":"bam-eyelight","tpage_name":"ljkcdmkl-pris"}],[56950879,{"idx":95,"name":"waspala-window-side","tpage_name":"waspala-tfrag"}],[112394259,{"idx":19,"name":"des-transport-wheel-back","tpage_name":"desrescg-pris"}],[106168359,{"idx":39,"name":"minc-brok-edge01","tpage_name":"mined-tfrag"}],[56950878,{"idx":94,"name":"waspala-palm-dirt","tpage_name":"waspala-tfrag"}],[112394258,{"idx":18,"name":"des-transport-wheel","tpage_name":"desrescg-pris"}],[106168358,{"idx":38,"name":"minc-light","tpage_name":"mined-tfrag"}],[56950877,{"idx":93,"name":"waspala-throne-back-02","tpage_name":"waspala-tfrag"}],[112394257,{"idx":17,"name":"des-transport-wall-01","tpage_name":"desrescg-pris"}],[106168357,{"idx":37,"name":"minc-stone01","tpage_name":"mined-tfrag"}],[35651606,{"idx":22,"name":"ashelin-redtop","tpage_name":"introcst-pris2"}],[112394256,{"idx":16,"name":"des-transport-tread","tpage_name":"desrescg-pris"}],[64225285,{"idx":5,"name":"waspala-small-rocks","tpage_name":"waspala-shrub"}],[35389642,{"idx":202,"name":"klever-blackstrap","tpage_name":"introcst-pris"}],[35389641,{"idx":201,"name":"klever-armor-02","tpage_name":"introcst-pris"}],[35389638,{"idx":198,"name":"klever-clips","tpage_name":"introcst-pris"}],[35389637,{"idx":197,"name":"klever-chest","tpage_name":"introcst-pris"}],[35389636,{"idx":196,"name":"klever-brownstrap","tpage_name":"introcst-pris"}],[35389635,{"idx":195,"name":"klever-arm","tpage_name":"introcst-pris"}],[35389504,{"idx":64,"name":"jakb-horn","tpage_name":"introcst-pris"}],[41615404,{"idx":44,"name":"city-mark-clay-pot-01","tpage_name":"wascitya-vis-pris"}],[55312384,{"idx":0,"name":"wascity-outerwall-metal-c","tpage_name":"wascityb-vis-pris"}],[35389489,{"idx":49,"name":"jackb-lens","tpage_name":"introcst-pris"}],[49086469,{"idx":5,"name":"sewer-screw-02","tpage_name":"sewe-vis-shrub"}],[35389486,{"idx":46,"name":"daxterteeth","tpage_name":"introcst-pris"}],[49086466,{"idx":2,"name":"sewer-nut","tpage_name":"sewe-vis-shrub"}],[35389485,{"idx":45,"name":"daxternose","tpage_name":"introcst-pris"}],[49086465,{"idx":1,"name":"sewer-hang-moss-01","tpage_name":"sewe-vis-shrub"}],[35389480,{"idx":40,"name":"daxterfoot-bottom","tpage_name":"introcst-pris"}],[17956960,{"idx":96,"name":"rub-palace-tower-side","tpage_name":"ctyport-vis-tfrag"}],[41615380,{"idx":20,"name":"was-tizard-hair","tpage_name":"wascitya-vis-pris"}],[35389475,{"idx":35,"name":"daxterbodyshort-eix","tpage_name":"introcst-pris"}],[41615375,{"idx":15,"name":"was-tizard-beak","tpage_name":"wascitya-vis-pris"}],[35389474,{"idx":34,"name":"daxterarm","tpage_name":"introcst-pris"}],[41615374,{"idx":14,"name":"gekko-tubes","tpage_name":"wascitya-vis-pris"}],[35389467,{"idx":27,"name":"cguard1-shirt","tpage_name":"introcst-pris"}],[41615367,{"idx":7,"name":"gekko-eye-01","tpage_name":"wascitya-vis-pris"}],[41549824,{"idx":0,"name":"wascity-window-glass-01","tpage_name":"wascitya-vis-water"}],[35389466,{"idx":26,"name":"cguard1-scarf","tpage_name":"introcst-pris"}],[41615366,{"idx":6,"name":"gekko-body","tpage_name":"wascitya-vis-pris"}],[94371840,{"idx":0,"name":"palcab-lowres-background-grass-to-desert-01","tpage_name":"intpfall-vis-pris"}],[75890713,{"idx":25,"name":"onin-dresser-drawer","tpage_name":"onintent-tfrag"}],[75890709,{"idx":21,"name":"onin-critter-face","tpage_name":"onintent-tfrag"}],[60948549,{"idx":69,"name":"fora-endblocks","tpage_name":"minec-vis-tfrag"}],[75890707,{"idx":19,"name":"onin-circle-rug-top","tpage_name":"onintent-tfrag"}],[60948547,{"idx":67,"name":"fora-roof-support","tpage_name":"minec-vis-tfrag"}],[75890706,{"idx":18,"name":"onin-circle-rug-mid","tpage_name":"onintent-tfrag"}],[60948546,{"idx":66,"name":"fora-metal-green-02","tpage_name":"minec-vis-tfrag"}],[75890705,{"idx":17,"name":"onin-circle-rug","tpage_name":"onintent-tfrag"}],[60948545,{"idx":65,"name":"fora-metal-green-main","tpage_name":"minec-vis-tfrag"}],[75890704,{"idx":16,"name":"onin-candle-holder","tpage_name":"onintent-tfrag"}],[60948544,{"idx":64,"name":"fora-metal-wallgrill","tpage_name":"minec-vis-tfrag"}],[75890703,{"idx":15,"name":"onin-candle","tpage_name":"onintent-tfrag"}],[60948543,{"idx":63,"name":"fora-citywall","tpage_name":"minec-vis-tfrag"}],[75890697,{"idx":9,"name":"onin-bowl","tpage_name":"onintent-tfrag"}],[48562200,{"idx":24,"name":"daxtertuft","tpage_name":"sewa-vis-pris"}],[52297740,{"idx":12,"name":"freehq-wal-plate04","tpage_name":"freehq-tfrag"}],[75890696,{"idx":8,"name":"onin-bottle-cork","tpage_name":"onintent-tfrag"}],[48562199,{"idx":23,"name":"daxterteeth","tpage_name":"sewa-vis-pris"}],[48562198,{"idx":22,"name":"daxternose","tpage_name":"sewa-vis-pris"}],[52297738,{"idx":10,"name":"freehq-gray-metal-disc01","tpage_name":"freehq-tfrag"}],[48562197,{"idx":21,"name":"daxterlense","tpage_name":"sewa-vis-pris"}],[52297737,{"idx":9,"name":"freehq-corrosive-metal-01","tpage_name":"freehq-tfrag"}],[48562196,{"idx":20,"name":"daxterhelmetplain","tpage_name":"sewa-vis-pris"}],[48562195,{"idx":19,"name":"daxterheadwidenew","tpage_name":"sewa-vis-pris"}],[48562194,{"idx":18,"name":"daxtergoggles","tpage_name":"sewa-vis-pris"}],[48562193,{"idx":17,"name":"daxterfoot-bottom","tpage_name":"sewa-vis-pris"}],[48562192,{"idx":16,"name":"daxterfoot","tpage_name":"sewa-vis-pris"}],[48562191,{"idx":15,"name":"daxterfinger","tpage_name":"sewa-vis-pris"}],[48562190,{"idx":14,"name":"daxterear","tpage_name":"sewa-vis-pris"}],[48562189,{"idx":13,"name":"daxterbolt","tpage_name":"sewa-vis-pris"}],[52297729,{"idx":1,"name":"common-gray","tpage_name":"freehq-tfrag"}],[48562188,{"idx":12,"name":"daxterbodyshort-eix","tpage_name":"sewa-vis-pris"}],[112525328,{"idx":16,"name":"daxternose","tpage_name":"desrescc-pris"}],[95944706,{"idx":2,"name":"charHOLD","tpage_name":"freehq-pris2"}],[92209166,{"idx":14,"name":"klever-brownstrap","tpage_name":"ldamklev-pris"}],[42401830,{"idx":38,"name":"wascity-steel-bar-HI","tpage_name":"wasdoors-vis-tfrag"}],[48627730,{"idx":18,"name":"sewer-metal-block-07","tpage_name":"sewb-vis-tfrag"}],[48562187,{"idx":11,"name":"daxterarm","tpage_name":"sewa-vis-pris"}],[35127419,{"idx":123,"name":"jakchires-horn","tpage_name":"factorya-pris"}],[71237639,{"idx":7,"name":"king-clip-02","tpage_name":"ldampeck-pris2"}],[48562186,{"idx":10,"name":"daxter-orange","tpage_name":"sewa-vis-pris"}],[92471304,{"idx":8,"name":"flamingstick","tpage_name":"sewa-sprite"}],[94961664,{"idx":0,"name":"bam-eyelight","tpage_name":"lsigjakc-pris"}],[35127418,{"idx":122,"name":"jakchires-hair","tpage_name":"factorya-pris"}],[71237638,{"idx":6,"name":"king-chest","tpage_name":"ldampeck-pris2"}],[112525326,{"idx":14,"name":"daxterhelmetplain","tpage_name":"desrescc-pris"}],[95944704,{"idx":0,"name":"bam-eyelight","tpage_name":"freehq-pris2"}],[92209164,{"idx":12,"name":"klever-blackstrap","tpage_name":"ldamklev-pris"}],[42401828,{"idx":36,"name":"wascity-red","tpage_name":"wasdoors-vis-tfrag"}],[48562185,{"idx":9,"name":"daxter-furhilite","tpage_name":"sewa-vis-pris"}],[92471303,{"idx":7,"name":"ceiling-dust","tpage_name":"sewa-sprite"}],[35127417,{"idx":121,"name":"jakchires-glovetop","tpage_name":"factorya-pris"}],[71237637,{"idx":5,"name":"king-bolt","tpage_name":"ldampeck-pris2"}],[48562184,{"idx":8,"name":"daxter-eyelid","tpage_name":"sewa-vis-pris"}],[92471302,{"idx":6,"name":"water-froth","tpage_name":"sewa-sprite"}],[89980942,{"idx":14,"name":"des-rock-01","tpage_name":"desertg-vis-tfrag"}],[35127416,{"idx":120,"name":"jakchires-facert","tpage_name":"factorya-pris"}],[71237636,{"idx":4,"name":"king-bluemetal","tpage_name":"ldampeck-pris2"}],[112525324,{"idx":12,"name":"daxtergoggles","tpage_name":"desrescc-pris"}],[42401826,{"idx":34,"name":"wascitya-stone-top-door","tpage_name":"wasdoors-vis-tfrag"}],[48627726,{"idx":14,"name":"sewer-pipe-02","tpage_name":"sewb-vis-tfrag"}],[43647006,{"idx":30,"name":"market-orange","tpage_name":"waswide-sprite"}],[48562183,{"idx":7,"name":"bam-hairhilite","tpage_name":"sewa-vis-pris"}],[92471301,{"idx":5,"name":"bigstarflash","tpage_name":"sewa-sprite"}],[89980941,{"idx":13,"name":"des-corral-metal-05","tpage_name":"desertg-vis-tfrag"}],[35127415,{"idx":119,"name":"jakchires-facelft","tpage_name":"factorya-pris"}],[71237635,{"idx":3,"name":"king-blackskirt2","tpage_name":"ldampeck-pris2"}],[112525323,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"desrescc-pris"}],[42401825,{"idx":33,"name":"wascitya-airlock-groove","tpage_name":"wasdoors-vis-tfrag"}],[48627725,{"idx":13,"name":"common-black","tpage_name":"sewb-vis-tfrag"}],[43647005,{"idx":29,"name":"market-melon","tpage_name":"waswide-sprite"}],[48562182,{"idx":6,"name":"bam-eyelight","tpage_name":"sewa-vis-pris"}],[92471300,{"idx":4,"name":"explosion-wave","tpage_name":"sewa-sprite"}],[89980940,{"idx":12,"name":"des-corral-bar-02","tpage_name":"desertg-vis-tfrag"}],[35127414,{"idx":118,"name":"jakchires-eyelid","tpage_name":"factorya-pris"}],[71237634,{"idx":2,"name":"king-arm","tpage_name":"ldampeck-pris2"}],[48562181,{"idx":5,"name":"airlockl-door-metalframe","tpage_name":"sewa-vis-pris"}],[92471299,{"idx":3,"name":"mech-flame","tpage_name":"sewa-sprite"}],[89980939,{"idx":11,"name":"des-corral-metal-01","tpage_name":"desertg-vis-tfrag"}],[35127413,{"idx":117,"name":"jakchires-eyebrow","tpage_name":"factorya-pris"}],[71237633,{"idx":1,"name":"environment-oldmetal","tpage_name":"ldampeck-pris2"}],[48562180,{"idx":4,"name":"airlock-door-metal2","tpage_name":"sewa-vis-pris"}],[35127412,{"idx":116,"name":"jakchires-eye","tpage_name":"factorya-pris"}],[71237632,{"idx":0,"name":"bam-eyelight","tpage_name":"ldampeck-pris2"}],[48562179,{"idx":3,"name":"airlock-door-main","tpage_name":"sewa-vis-pris"}],[92471297,{"idx":1,"name":"water-trail","tpage_name":"sewa-sprite"}],[89980937,{"idx":9,"name":"des-corral-plate-01","tpage_name":"desertg-vis-tfrag"}],[35127411,{"idx":115,"name":"jakchires-clips","tpage_name":"factorya-pris"}],[48562178,{"idx":2,"name":"airlock-door-cog1","tpage_name":"sewa-vis-pris"}],[92471296,{"idx":0,"name":"water-wake","tpage_name":"sewa-sprite"}],[89980936,{"idx":8,"name":"des-corral-bar-03","tpage_name":"desertg-vis-tfrag"}],[91226116,{"idx":4,"name":"strip-shurb-dripstain-01","tpage_name":"gungame-vis-shrub"}],[35127410,{"idx":114,"name":"jakchires-chestplate","tpage_name":"factorya-pris"}],[48562177,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewa-vis-pris"}],[107151407,{"idx":47,"name":"spikey-frog-legfront","tpage_name":"volcanoa-vis-pris"}],[35127404,{"idx":108,"name":"jakc-wraps","tpage_name":"factorya-pris"}],[42401814,{"idx":22,"name":"wascity-ground-2-ditch-05","tpage_name":"wasdoors-vis-tfrag"}],[48627714,{"idx":2,"name":"sewer-pipe-rim-05","tpage_name":"sewb-vis-tfrag"}],[107151406,{"idx":46,"name":"spikey-frog-leg","tpage_name":"volcanoa-vis-pris"}],[35127403,{"idx":107,"name":"jakc-waistband2","tpage_name":"factorya-pris"}],[42401813,{"idx":21,"name":"wascity-ground-2-ditch-03","tpage_name":"wasdoors-vis-tfrag"}],[48627713,{"idx":1,"name":"sewer-metal-block-04","tpage_name":"sewb-vis-tfrag"}],[107151405,{"idx":45,"name":"spikey-frog-eye","tpage_name":"volcanoa-vis-pris"}],[35127402,{"idx":106,"name":"jakc-skirt","tpage_name":"factorya-pris"}],[42401812,{"idx":20,"name":"wascity-ground-2-ditch-04","tpage_name":"wasdoors-vis-tfrag"}],[48627712,{"idx":0,"name":"sewer-metal-block-06","tpage_name":"sewb-vis-tfrag"}],[107151404,{"idx":44,"name":"spikey-frog-belly","tpage_name":"volcanoa-vis-pris"}],[35127401,{"idx":105,"name":"jakc-scarfhanging","tpage_name":"factorya-pris"}],[42401811,{"idx":19,"name":"wascity-ditch-wall-top-to-ground","tpage_name":"wasdoors-vis-tfrag"}],[107151403,{"idx":43,"name":"spikey-frog-back","tpage_name":"volcanoa-vis-pris"}],[35127400,{"idx":104,"name":"jakc-scarf","tpage_name":"factorya-pris"}],[42401810,{"idx":18,"name":"wascity-stonewall-bricks","tpage_name":"wasdoors-vis-tfrag"}],[35127399,{"idx":103,"name":"jakc-lens","tpage_name":"factorya-pris"}],[42401809,{"idx":17,"name":"wascitya-stone-top-breakaway","tpage_name":"wasdoors-vis-tfrag"}],[35127398,{"idx":102,"name":"jakc-gogglemetal","tpage_name":"factorya-pris"}],[42401808,{"idx":16,"name":"wascity-cement-road","tpage_name":"wasdoors-vis-tfrag"}],[90570778,{"idx":26,"name":"des-mount-bottom-01","tpage_name":"desertd-vis-tfrag"}],[35127397,{"idx":101,"name":"jakc-chestplate-straps","tpage_name":"factorya-pris"}],[42401807,{"idx":15,"name":"wascitya-stone-bottom","tpage_name":"wasdoors-vis-tfrag"}],[35127396,{"idx":100,"name":"jakc-armor","tpage_name":"factorya-pris"}],[42401806,{"idx":14,"name":"wascitya-stone-top","tpage_name":"wasdoors-vis-tfrag"}],[35127395,{"idx":99,"name":"environment-oldmetal","tpage_name":"factorya-pris"}],[35127394,{"idx":98,"name":"daxtertuft","tpage_name":"factorya-pris"}],[73990151,{"idx":7,"name":"sewer-plate-05","tpage_name":"sewh-vis-shrub"}],[35127392,{"idx":96,"name":"daxternose","tpage_name":"factorya-pris"}],[35127391,{"idx":95,"name":"daxterlense","tpage_name":"factorya-pris"}],[90570771,{"idx":19,"name":"des-mount-02","tpage_name":"desertd-vis-tfrag"}],[74383431,{"idx":71,"name":"sewer-grate-01","tpage_name":"sewj-vis-tfrag"}],[73990149,{"idx":5,"name":"sew-gasstep-tube","tpage_name":"sewh-vis-shrub"}],[35127390,{"idx":94,"name":"daxterhelmetplain","tpage_name":"factorya-pris"}],[107151392,{"idx":32,"name":"vol-bouncer-cloth","tpage_name":"volcanoa-vis-pris"}],[90570770,{"idx":18,"name":"des-mount-01","tpage_name":"desertd-vis-tfrag"}],[74383430,{"idx":70,"name":"sewer-block-02","tpage_name":"sewj-vis-tfrag"}],[73990148,{"idx":4,"name":"sew-moving-stepb-grate","tpage_name":"sewh-vis-shrub"}],[35127389,{"idx":93,"name":"daxterheadwidenew","tpage_name":"factorya-pris"}],[90570769,{"idx":17,"name":"des-rock-01","tpage_name":"desertd-vis-tfrag"}],[74383429,{"idx":69,"name":"sewer-big-brace-02","tpage_name":"sewj-vis-tfrag"}],[73990147,{"idx":3,"name":"sewer-pipe-small-01","tpage_name":"sewh-vis-shrub"}],[35127388,{"idx":92,"name":"daxtergoggles","tpage_name":"factorya-pris"}],[42401798,{"idx":6,"name":"wascitya-airlock-metal","tpage_name":"wasdoors-vis-tfrag"}],[48234498,{"idx":2,"name":"was-burningbush-02","tpage_name":"desert-vis-tfrag"}],[10879098,{"idx":122,"name":"lfacrm-plate-05","tpage_name":"ctyslumb-vis-tfrag"}],[64815120,{"idx":16,"name":"minc-safe-plate-02","tpage_name":"minea-vis-shrub"}],[48627780,{"idx":68,"name":"sewer-big-brace-01","tpage_name":"sewb-vis-tfrag"}],[73990146,{"idx":2,"name":"sewer-nut","tpage_name":"sewh-vis-shrub"}],[35127387,{"idx":91,"name":"daxterfoot-bottom","tpage_name":"factorya-pris"}],[42401797,{"idx":5,"name":"wascity-base","tpage_name":"wasdoors-vis-tfrag"}],[48234497,{"idx":1,"name":"des-beach-01","tpage_name":"desert-vis-tfrag"}],[10879097,{"idx":121,"name":"city-ind-buldge-light-self-illuminated-03","tpage_name":"ctyslumb-vis-tfrag"}],[64815119,{"idx":15,"name":"minc-rust-pipe-03","tpage_name":"minea-vis-shrub"}],[61079579,{"idx":27,"name":"minc-blue-paint-rust01","tpage_name":"minec-vis-pris"}],[48627779,{"idx":67,"name":"sewer-brick-roof-03","tpage_name":"sewb-vis-tfrag"}],[103350379,{"idx":107,"name":"rail-trim-01","tpage_name":"comba-pris"}],[135725059,{"idx":3,"name":"seem-bootbottom","tpage_name":"lseemwca-pris2"}],[73990145,{"idx":1,"name":"sewer-hang-moss-01","tpage_name":"sewh-vis-shrub"}],[35127386,{"idx":90,"name":"daxterfoot","tpage_name":"factorya-pris"}],[42401796,{"idx":4,"name":"common-black","tpage_name":"wasdoors-vis-tfrag"}],[64815118,{"idx":14,"name":"minc-door-metal-03","tpage_name":"minea-vis-shrub"}],[48627778,{"idx":66,"name":"sewer-brick-roof-02","tpage_name":"sewb-vis-tfrag"}],[103350378,{"idx":106,"name":"rail-detail-01","tpage_name":"comba-pris"}],[135725058,{"idx":2,"name":"seem-arm","tpage_name":"lseemwca-pris2"}],[73990144,{"idx":0,"name":"sewer-moss-01","tpage_name":"sewh-vis-shrub"}],[35127385,{"idx":89,"name":"daxterfinger","tpage_name":"factorya-pris"}],[42401795,{"idx":3,"name":"wascity-metal-spike-01","tpage_name":"wasdoors-vis-tfrag"}],[64815117,{"idx":13,"name":"minc-green-paint-02","tpage_name":"minea-vis-shrub"}],[48627777,{"idx":65,"name":"sewer-brick-roof-04","tpage_name":"sewb-vis-tfrag"}],[103350377,{"idx":105,"name":"rail-pipe-01","tpage_name":"comba-pris"}],[135725057,{"idx":1,"name":"environment-oldmetal","tpage_name":"lseemwca-pris2"}],[35127384,{"idx":88,"name":"daxterear","tpage_name":"factorya-pris"}],[75563038,{"idx":30,"name":"vin-teeth-01","tpage_name":"lsig-pris2"}],[42401794,{"idx":2,"name":"wascity-greenmetal-tube","tpage_name":"wasdoors-vis-tfrag"}],[64815116,{"idx":12,"name":"minc-door-metal-01","tpage_name":"minea-vis-shrub"}],[48627776,{"idx":64,"name":"sewer-brick-roof-01","tpage_name":"sewb-vis-tfrag"}],[103350376,{"idx":104,"name":"kid-medallion","tpage_name":"comba-pris"}],[127008796,{"idx":28,"name":"minc-platfrom-metal-01","tpage_name":"volcanox-tfrag"}],[135725056,{"idx":0,"name":"bam-eyelight","tpage_name":"lseemwca-pris2"}],[35127383,{"idx":87,"name":"daxterbolt","tpage_name":"factorya-pris"}],[75563037,{"idx":29,"name":"sig-undergarments","tpage_name":"lsig-pris2"}],[42401793,{"idx":1,"name":"wascity-outerwall-metal-b","tpage_name":"wasdoors-vis-tfrag"}],[64815115,{"idx":11,"name":"minc-blue-paint-rust01","tpage_name":"minea-vis-shrub"}],[61079575,{"idx":23,"name":"manta-skin-01","tpage_name":"minec-vis-pris"}],[35127382,{"idx":86,"name":"daxterbodyshort-eix","tpage_name":"factorya-pris"}],[75563036,{"idx":28,"name":"sig-skirts-03","tpage_name":"lsig-pris2"}],[42401792,{"idx":0,"name":"wascity-outerwall-metal-c","tpage_name":"wasdoors-vis-tfrag"}],[64815114,{"idx":10,"name":"minc-rust-bars-01","tpage_name":"minea-vis-shrub"}],[48627774,{"idx":62,"name":"sewer-big-brace-trim-02","tpage_name":"sewb-vis-tfrag"}],[61079574,{"idx":22,"name":"manta-metal-02","tpage_name":"minec-vis-pris"}],[35127381,{"idx":85,"name":"daxterarm","tpage_name":"factorya-pris"}],[64815113,{"idx":9,"name":"minc-rust-pipe-05","tpage_name":"minea-vis-shrub"}],[48627773,{"idx":61,"name":"sewer-big-brace-trim-01","tpage_name":"sewb-vis-tfrag"}],[61079573,{"idx":21,"name":"manta-metal-01","tpage_name":"minec-vis-pris"}],[35127380,{"idx":84,"name":"daxter-orange","tpage_name":"factorya-pris"}],[64815112,{"idx":8,"name":"min-env-mar-01","tpage_name":"minea-vis-shrub"}],[48627772,{"idx":60,"name":"sewer-plate-03-hitweak","tpage_name":"sewb-vis-tfrag"}],[61079572,{"idx":20,"name":"manta-laser","tpage_name":"minec-vis-pris"}],[107151382,{"idx":22,"name":"bam-eyelight","tpage_name":"volcanoa-vis-pris"}],[103350372,{"idx":100,"name":"rail-edge-01","tpage_name":"comba-pris"}],[127008792,{"idx":24,"name":"common_sandstone_ground01","tpage_name":"volcanox-tfrag"}],[35127379,{"idx":83,"name":"daxter-furhilite","tpage_name":"factorya-pris"}],[64815111,{"idx":7,"name":"minc-blue-paint-rust04","tpage_name":"minea-vis-shrub"}],[48627771,{"idx":59,"name":"sewer-round-01","tpage_name":"sewb-vis-tfrag"}],[61079571,{"idx":19,"name":"manta-hose","tpage_name":"minec-vis-pris"}],[107151381,{"idx":21,"name":"grunt-skin-03","tpage_name":"volcanoa-vis-pris"}],[103350371,{"idx":99,"name":"rail-cord-01","tpage_name":"comba-pris"}],[127008791,{"idx":23,"name":"common_sandstone_taper01","tpage_name":"volcanox-tfrag"}],[35127378,{"idx":82,"name":"daxter-eyelid","tpage_name":"factorya-pris"}],[107151380,{"idx":20,"name":"grunt-skin-02","tpage_name":"volcanoa-vis-pris"}],[90570758,{"idx":6,"name":"des-wasmetal12","tpage_name":"desertd-vis-tfrag"}],[74383418,{"idx":58,"name":"sewer-round-02","tpage_name":"sewj-vis-tfrag"}],[91815938,{"idx":2,"name":"airlock-door-main","tpage_name":"ctyinda-vis-pris"}],[35127377,{"idx":81,"name":"bam-hairhilite","tpage_name":"factorya-pris"}],[107151379,{"idx":19,"name":"grunt-skin-01","tpage_name":"volcanoa-vis-pris"}],[103350369,{"idx":97,"name":"rail-pipe-03","tpage_name":"comba-pris"}],[127008789,{"idx":21,"name":"warpgate-precursormetal","tpage_name":"volcanox-tfrag"}],[35127376,{"idx":80,"name":"bam-eyelight","tpage_name":"factorya-pris"}],[64815108,{"idx":4,"name":"minc-blue-paint-rust05","tpage_name":"minea-vis-shrub"}],[48627768,{"idx":56,"name":"sewer-bolt-side-02","tpage_name":"sewb-vis-tfrag"}],[61079568,{"idx":16,"name":"grunt-teeth-01","tpage_name":"minec-vis-pris"}],[107151365,{"idx":5,"name":"metalflut-leatherstrap-c","tpage_name":"volcanoa-vis-pris"}],[100925465,{"idx":25,"name":"king-shoebottom","tpage_name":"ljkdmpk-pris2"}],[35127362,{"idx":66,"name":"wing02grey01","tpage_name":"factorya-pris"}],[53805062,{"idx":6,"name":"forb-water-dest","tpage_name":"forestb-vis-water"}],[35127361,{"idx":65,"name":"wing02","tpage_name":"factorya-pris"}],[262321,{"idx":177,"name":"static2","tpage_name":"level-default-sprite"}],[53805061,{"idx":5,"name":"forb-water","tpage_name":"forestb-vis-water"}],[107151363,{"idx":3,"name":"metalflut-eye","tpage_name":"volcanoa-vis-pris"}],[100925463,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"ljkdmpk-pris2"}],[35127360,{"idx":64,"name":"wing01","tpage_name":"factorya-pris"}],[262320,{"idx":176,"name":"static1","tpage_name":"level-default-sprite"}],[107151362,{"idx":2,"name":"environment-oldmetal","tpage_name":"volcanoa-vis-pris"}],[100925462,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"ljkdmpk-pris2"}],[103350352,{"idx":80,"name":"pecker-yellowfur","tpage_name":"comba-pris"}],[35127359,{"idx":63,"name":"turret01","tpage_name":"factorya-pris"}],[262319,{"idx":175,"name":"light-burst","tpage_name":"level-default-sprite"}],[103350351,{"idx":79,"name":"pecker-wingtop","tpage_name":"comba-pris"}],[127008771,{"idx":3,"name":"vola-rock-side","tpage_name":"volcanox-tfrag"}],[35127358,{"idx":62,"name":"stripe03","tpage_name":"factorya-pris"}],[262318,{"idx":174,"name":"rockbit16","tpage_name":"level-default-sprite"}],[103350350,{"idx":78,"name":"pecker-wingbottom","tpage_name":"comba-pris"}],[127008770,{"idx":2,"name":"vola-rock-top","tpage_name":"volcanox-tfrag"}],[35127357,{"idx":61,"name":"seat01","tpage_name":"factorya-pris"}],[262317,{"idx":173,"name":"rockbit15","tpage_name":"level-default-sprite"}],[103350349,{"idx":77,"name":"pecker-teeth","tpage_name":"comba-pris"}],[127008769,{"idx":1,"name":"vola-grass-floor-01","tpage_name":"volcanox-tfrag"}],[35127356,{"idx":60,"name":"rail01","tpage_name":"factorya-pris"}],[262316,{"idx":172,"name":"rockbit14","tpage_name":"level-default-sprite"}],[58654731,{"idx":11,"name":"hiphog-neon-clock-sun-small","tpage_name":"hiphog-sprite"}],[103350348,{"idx":76,"name":"pecker-tail","tpage_name":"comba-pris"}],[127008768,{"idx":0,"name":"vola-lava-rock-01","tpage_name":"volcanox-tfrag"}],[35127355,{"idx":59,"name":"post01","tpage_name":"factorya-pris"}],[262315,{"idx":171,"name":"rockbit13","tpage_name":"level-default-sprite"}],[58654730,{"idx":10,"name":"hiphog-neon-clock-sun","tpage_name":"hiphog-sprite"}],[103350347,{"idx":75,"name":"pecker-plume","tpage_name":"comba-pris"}],[35127354,{"idx":58,"name":"lightCase01","tpage_name":"factorya-pris"}],[262314,{"idx":170,"name":"rockbit12","tpage_name":"level-default-sprite"}],[58654729,{"idx":9,"name":"hiphog-neon-clock-moon-small","tpage_name":"hiphog-sprite"}],[103350346,{"idx":74,"name":"pecker-face","tpage_name":"comba-pris"}],[35127353,{"idx":57,"name":"light01","tpage_name":"factorya-pris"}],[262313,{"idx":169,"name":"rockbit11","tpage_name":"level-default-sprite"}],[58654728,{"idx":8,"name":"hiphog-neon-clock-moon","tpage_name":"hiphog-sprite"}],[61145088,{"idx":0,"name":"waspala-glass-03","tpage_name":"waspala-alpha"}],[35127347,{"idx":51,"name":"gunbox01","tpage_name":"factorya-pris"}],[262307,{"idx":163,"name":"rockbit05","tpage_name":"level-default-sprite"}],[58654722,{"idx":2,"name":"hiphog-mirror","tpage_name":"hiphog-sprite"}],[53674002,{"idx":18,"name":"turret-mh-metal","tpage_name":"forestb-vis-tfrag"}],[35127346,{"idx":50,"name":"gunBoxFront01","tpage_name":"factorya-pris"}],[262306,{"idx":162,"name":"rockbit04","tpage_name":"level-default-sprite"}],[58654721,{"idx":1,"name":"hiphog-daxter-neon-on","tpage_name":"hiphog-sprite"}],[53674001,{"idx":17,"name":"fora-grass-to-mud","tpage_name":"forestb-vis-tfrag"}],[35127345,{"idx":49,"name":"gunBoxBack01","tpage_name":"factorya-pris"}],[262305,{"idx":161,"name":"rockbit03","tpage_name":"level-default-sprite"}],[48824325,{"idx":5,"name":"sewer-shrub-pitting-01","tpage_name":"sewc-vis-shrub"}],[58654720,{"idx":0,"name":"hiphog-daxter-neon-off","tpage_name":"hiphog-sprite"}],[53674000,{"idx":16,"name":"fora-grass-fringe","tpage_name":"forestb-vis-tfrag"}],[35127344,{"idx":48,"name":"grillRim01","tpage_name":"factorya-pris"}],[262304,{"idx":160,"name":"big-cloud","tpage_name":"level-default-sprite"}],[48824324,{"idx":4,"name":"sewer-hang-moss-01","tpage_name":"sewc-vis-shrub"}],[35127343,{"idx":47,"name":"gauge01","tpage_name":"factorya-pris"}],[262303,{"idx":159,"name":"explo-texture","tpage_name":"level-default-sprite"}],[48824323,{"idx":3,"name":"sewer-moss-01","tpage_name":"sewc-vis-shrub"}],[35127342,{"idx":46,"name":"dash01","tpage_name":"factorya-pris"}],[262302,{"idx":158,"name":"tinyspeck","tpage_name":"level-default-sprite"}],[48824322,{"idx":2,"name":"sewer-shrub-rust-01","tpage_name":"sewc-vis-shrub"}],[35127341,{"idx":45,"name":"backThing01","tpage_name":"factorya-pris"}],[48824321,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewc-vis-shrub"}],[29229066,{"idx":10,"name":"dust-sparkle","tpage_name":"nsta-sprite"}],[11796546,{"idx":66,"name":"sewer-metal-floor-02","tpage_name":"ctyinda-vis-tfrag"}],[29229064,{"idx":8,"name":"ceiling-dust","tpage_name":"nsta-sprite"}],[11796544,{"idx":64,"name":"sewer-metal-block-06","tpage_name":"ctyinda-vis-tfrag"}],[29229063,{"idx":7,"name":"flying-gull-06","tpage_name":"nsta-sprite"}],[29229062,{"idx":6,"name":"flying-gull-05","tpage_name":"nsta-sprite"}],[11796542,{"idx":62,"name":"city-ind-panels-scorched-03","tpage_name":"ctyinda-vis-tfrag"}],[29229061,{"idx":5,"name":"flying-gull-04","tpage_name":"nsta-sprite"}],[11796541,{"idx":61,"name":"city-ind-panels-scorched-02","tpage_name":"ctyinda-vis-tfrag"}],[29229060,{"idx":4,"name":"flying-gull-03","tpage_name":"nsta-sprite"}],[11796540,{"idx":60,"name":"city-ind-wall-band-striped-01","tpage_name":"ctyinda-vis-tfrag"}],[94371930,{"idx":90,"name":"tpal-drain01","tpage_name":"intpfall-vis-pris"}],[28049442,{"idx":34,"name":"tpal-piller-caps01","tpage_name":"intpalrf-tfrag"}],[94371928,{"idx":88,"name":"tpal-beam-red01","tpage_name":"intpfall-vis-pris"}],[120520708,{"idx":4,"name":"airlock-door-metal2","tpage_name":"forestx-vis-pris"}],[28049440,{"idx":32,"name":"intr-grey","tpage_name":"intpalrf-tfrag"}],[94371927,{"idx":87,"name":"stripe03","tpage_name":"intpfall-vis-pris"}],[120520707,{"idx":3,"name":"airlock-door-main","tpage_name":"forestx-vis-pris"}],[28049439,{"idx":31,"name":"intr-grey-holes","tpage_name":"intpalrf-tfrag"}],[26542212,{"idx":132,"name":"wstd-throne-table-big","tpage_name":"wasstada-tfrag"}],[62652432,{"idx":16,"name":"citichic-boot-02","tpage_name":"ctypepa-pris"}],[17563657,{"idx":9,"name":"hiphog-exterior-orange-on","tpage_name":"ctyport-sprite"}],[11337757,{"idx":29,"name":"ctyslumc-wire","tpage_name":"ctyslumc-vis-shrub"}],[26542211,{"idx":131,"name":"common_sandstone_trim01","tpage_name":"wasstada-tfrag"}],[62652431,{"idx":15,"name":"citichic-boot-01","tpage_name":"ctypepa-pris"}],[26542210,{"idx":130,"name":"common_sandstone_ground01","tpage_name":"wasstada-tfrag"}],[62652430,{"idx":14,"name":"citfat-hairtrans","tpage_name":"ctypepa-pris"}],[26542209,{"idx":129,"name":"common_sandstone_taper01","tpage_name":"wasstada-tfrag"}],[62652429,{"idx":13,"name":"citfat-hairflat","tpage_name":"ctypepa-pris"}],[81985587,{"idx":51,"name":"wstlander-04-gun","tpage_name":"wasstadc-pris"}],[96927747,{"idx":3,"name":"torn-armlft","tpage_name":"ltornjnx-pris2"}],[75759687,{"idx":71,"name":"pecker-body-01","tpage_name":"onintent-pris"}],[26542206,{"idx":126,"name":"wstd-scaffold-bar","tpage_name":"wasstada-tfrag"}],[62652426,{"idx":10,"name":"citfat-eyebrow","tpage_name":"ctypepa-pris"}],[26542205,{"idx":125,"name":"wstd-scaffold-wall-03","tpage_name":"wasstada-tfrag"}],[62652425,{"idx":9,"name":"citfat-eye","tpage_name":"ctypepa-pris"}],[26542204,{"idx":124,"name":"wstd-scaffold-plate-01","tpage_name":"wasstada-tfrag"}],[62652424,{"idx":8,"name":"citfat-cottonclip","tpage_name":"ctypepa-pris"}],[17563649,{"idx":1,"name":"ctyport-muddrop","tpage_name":"ctyport-sprite"}],[8847389,{"idx":29,"name":"des-burn-eye-off","tpage_name":"ctysluma-vis-shrub"}],[26542203,{"idx":123,"name":"wstd-scaffold-wall-02","tpage_name":"wasstada-tfrag"}],[62652423,{"idx":7,"name":"citfat-cottonbutton","tpage_name":"ctypepa-pris"}],[81985582,{"idx":46,"name":"wstlander-02-shirt","tpage_name":"wasstadc-pris"}],[75759682,{"idx":66,"name":"onin-scarf","tpage_name":"onintent-pris"}],[26542201,{"idx":121,"name":"wstd-scaffold-wall-edge","tpage_name":"wasstada-tfrag"}],[62652421,{"idx":5,"name":"citfat-buzzcut","tpage_name":"ctypepa-pris"}],[81985581,{"idx":45,"name":"wstlander-02-scarf","tpage_name":"wasstadc-pris"}],[75759681,{"idx":65,"name":"onin-rings2","tpage_name":"onintent-pris"}],[26542200,{"idx":120,"name":"wstd-scaffold-teeth","tpage_name":"wasstada-tfrag"}],[62652420,{"idx":4,"name":"citfat-1-pants","tpage_name":"ctypepa-pris"}],[81985580,{"idx":44,"name":"wstlander-02-ponytail","tpage_name":"wasstadc-pris"}],[75759680,{"idx":64,"name":"onin-rings","tpage_name":"onintent-pris"}],[26542199,{"idx":119,"name":"wstd-platform-wall","tpage_name":"wasstada-tfrag"}],[62652419,{"idx":3,"name":"citfat-1-headtop","tpage_name":"ctypepa-pris"}],[26542152,{"idx":72,"name":"wstd-floor-panel02","tpage_name":"wasstada-tfrag"}],[41484312,{"idx":24,"name":"common-black","tpage_name":"wascitya-vis-shrub"}],[48955392,{"idx":0,"name":"sewer-nut","tpage_name":"sewd-vis-shrub"}],[73924615,{"idx":7,"name":"sewer-pipe-01","tpage_name":"sewg-vis-shrub"}],[38862866,{"idx":18,"name":"nestb-basekor","tpage_name":"nsta-vis-tfrag"}],[26542151,{"idx":71,"name":"wstd-tentacle-barrel","tpage_name":"wasstada-tfrag"}],[41484311,{"idx":23,"name":"wascity-outerwall-metal-d","tpage_name":"wascitya-vis-shrub"}],[73924614,{"idx":6,"name":"sewer-plate-05","tpage_name":"sewg-vis-shrub"}],[38862865,{"idx":17,"name":"nsta-finger-pipe","tpage_name":"nsta-vis-tfrag"}],[26542150,{"idx":70,"name":"wstd-tentacle-plate01","tpage_name":"wasstada-tfrag"}],[41484310,{"idx":22,"name":"wascity-base","tpage_name":"wascitya-vis-shrub"}],[73924613,{"idx":5,"name":"sewer-metal-01","tpage_name":"sewg-vis-shrub"}],[38862864,{"idx":16,"name":"nsta-cave-carved-surface","tpage_name":"nsta-vis-tfrag"}],[262284,{"idx":140,"name":"rockbit02","tpage_name":"level-default-sprite"}],[26542149,{"idx":69,"name":"wstd-tentacle-plate03","tpage_name":"wasstada-tfrag"}],[41484309,{"idx":21,"name":"wascitya-redish-metal","tpage_name":"wascitya-vis-shrub"}],[73924612,{"idx":4,"name":"sew-jump-pad-grate","tpage_name":"sewg-vis-shrub"}],[38862863,{"idx":15,"name":"nsta-cave-carved-surface-bottom","tpage_name":"nsta-vis-tfrag"}],[262283,{"idx":139,"name":"rockbit01","tpage_name":"level-default-sprite"}],[55115828,{"idx":52,"name":"wascity-beach-wet-01","tpage_name":"wascityb-vis-tfrag"}],[48889928,{"idx":72,"name":"sewer-metal-block-02","tpage_name":"sewd-vis-tfrag"}],[71303168,{"idx":0,"name":"bam-eyelight","tpage_name":"ldamsig-pris2"}],[26542148,{"idx":68,"name":"wstd-stands-stairs01","tpage_name":"wasstada-tfrag"}],[41484308,{"idx":20,"name":"wascity-metal-dirty","tpage_name":"wascitya-vis-shrub"}],[73924611,{"idx":3,"name":"sewer-hang-moss-01","tpage_name":"sewg-vis-shrub"}],[38862862,{"idx":14,"name":"nsta-cave-plain-edging","tpage_name":"nsta-vis-tfrag"}],[55115827,{"idx":51,"name":"wascity-beach-wet-02","tpage_name":"wascityb-vis-tfrag"}],[48889927,{"idx":71,"name":"sewer-small-light-01","tpage_name":"sewd-vis-tfrag"}],[26542147,{"idx":67,"name":"wstd-stands-stairs02","tpage_name":"wasstada-tfrag"}],[41484307,{"idx":19,"name":"wascity-outerwall-metal-c","tpage_name":"wascitya-vis-shrub"}],[73924610,{"idx":2,"name":"sewer-moss-01","tpage_name":"sewg-vis-shrub"}],[38862861,{"idx":13,"name":"nsta-cave-plain","tpage_name":"nsta-vis-tfrag"}],[262281,{"idx":137,"name":"shell-casing-03","tpage_name":"level-default-sprite"}],[55115826,{"idx":50,"name":"wascity-beach-01","tpage_name":"wascityb-vis-tfrag"}],[48889926,{"idx":70,"name":"sewer-brick-block-11","tpage_name":"sewd-vis-tfrag"}],[26542146,{"idx":66,"name":"wstd-stands-seats01","tpage_name":"wasstada-tfrag"}],[41484306,{"idx":18,"name":"wascity-outerwall-metal-b","tpage_name":"wascitya-vis-shrub"}],[73924609,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewg-vis-shrub"}],[49021009,{"idx":81,"name":"sewer-brick-block-04-hitweak","tpage_name":"sewe-vis-tfrag"}],[71434249,{"idx":9,"name":"wstd-throne-wall01","tpage_name":"wasstadc-tfrag"}],[38862860,{"idx":12,"name":"nsta-cave-stalags-04-insides","tpage_name":"nsta-vis-tfrag"}],[262280,{"idx":136,"name":"shell-casing-02","tpage_name":"level-default-sprite"}],[55115825,{"idx":49,"name":"wascity-ditch-wall-top-to-beach","tpage_name":"wascityb-vis-tfrag"}],[48889925,{"idx":69,"name":"sewer-brick-block-10","tpage_name":"sewd-vis-tfrag"}],[26542145,{"idx":65,"name":"wstd-stands-seats02","tpage_name":"wasstada-tfrag"}],[41484305,{"idx":17,"name":"wascity-roof-1","tpage_name":"wascitya-vis-shrub"}],[55115824,{"idx":48,"name":"wascity-ditch-wall-top-to-ground-edging","tpage_name":"wascityb-vis-tfrag"}],[41418844,{"idx":92,"name":"wascity-palace-elevator-shaft","tpage_name":"wascitya-vis-tfrag"}],[48889924,{"idx":68,"name":"sewer-brick-roof-05","tpage_name":"sewd-vis-tfrag"}],[26542132,{"idx":52,"name":"wstd-precursor-metal-plain-01","tpage_name":"wasstada-tfrag"}],[41484292,{"idx":4,"name":"wascity-overlay-bullethole-b","tpage_name":"wascitya-vis-shrub"}],[73596938,{"idx":10,"name":"sewer-black","tpage_name":"sewi-vis-tfrag"}],[55115811,{"idx":35,"name":"wascity-ground-2-ditch-03","tpage_name":"wascityb-vis-tfrag"}],[41418831,{"idx":79,"name":"waspala-elevator-bolt02","tpage_name":"wascitya-vis-tfrag"}],[48889911,{"idx":55,"name":"sewer-bolt-side-01","tpage_name":"sewd-vis-tfrag"}],[26542131,{"idx":51,"name":"mtn-environment-front-backup","tpage_name":"wasstada-tfrag"}],[41484291,{"idx":3,"name":"wascity-overlay-tribal-1","tpage_name":"wascitya-vis-shrub"}],[73596937,{"idx":9,"name":"sewer-brick-block-01","tpage_name":"sewi-vis-tfrag"}],[74842117,{"idx":5,"name":"sewer-watefall-froth-01-l-dest","tpage_name":"sewl-vis-water"}],[71106577,{"idx":17,"name":"wstd-stands-lowall01","tpage_name":"wasstadb-tfrag"}],[55115810,{"idx":34,"name":"wascity-ground-01","tpage_name":"wascityb-vis-tfrag"}],[41418830,{"idx":78,"name":"waspala-elevator-tube","tpage_name":"wascitya-vis-tfrag"}],[48889910,{"idx":54,"name":"sewer-round-02","tpage_name":"sewd-vis-tfrag"}],[26542126,{"idx":46,"name":"wstd-spike-01","tpage_name":"wasstada-tfrag"}],[73596932,{"idx":4,"name":"sewer-brick-block-04","tpage_name":"sewi-vis-tfrag"}],[55115805,{"idx":29,"name":"wascity-stonewall-bricks-HI","tpage_name":"wascityb-vis-tfrag"}],[41418825,{"idx":73,"name":"waspala-elevator-wood02","tpage_name":"wascitya-vis-tfrag"}],[48889905,{"idx":49,"name":"sewer-metal-floor-01","tpage_name":"sewd-vis-tfrag"}],[26542125,{"idx":45,"name":"wstd-torchbowl-01","tpage_name":"wasstada-tfrag"}],[73596931,{"idx":3,"name":"sewer-brick-block-02","tpage_name":"sewi-vis-tfrag"}],[71106571,{"idx":11,"name":"wstd-stands-rib","tpage_name":"wasstadb-tfrag"}],[55115804,{"idx":28,"name":"wascity-wall-weathered","tpage_name":"wascityb-vis-tfrag"}],[41418824,{"idx":72,"name":"waspala-elevator-bolt","tpage_name":"wascitya-vis-tfrag"}],[26542124,{"idx":44,"name":"wstd-torchbowl-coal-01","tpage_name":"wasstada-tfrag"}],[73596930,{"idx":2,"name":"sewer-brick-block-11","tpage_name":"sewi-vis-tfrag"}],[71106570,{"idx":10,"name":"wstd-stands-shell01","tpage_name":"wasstadb-tfrag"}],[55115803,{"idx":27,"name":"wascity-stucco-wall-bleached-edge-01","tpage_name":"wascityb-vis-tfrag"}],[41418823,{"idx":71,"name":"waspala-elevator-metal","tpage_name":"wascitya-vis-tfrag"}],[48889903,{"idx":47,"name":"sewer-black","tpage_name":"sewd-vis-tfrag"}],[26542123,{"idx":43,"name":"wstd-torchbowl-02","tpage_name":"wasstada-tfrag"}],[73596929,{"idx":1,"name":"sewer-brick-block-10","tpage_name":"sewi-vis-tfrag"}],[55115802,{"idx":26,"name":"wascity-outerwall-metal-c","tpage_name":"wascityb-vis-tfrag"}],[41418822,{"idx":70,"name":"wascitya-stone-bottom-door","tpage_name":"wascitya-vis-tfrag"}],[48889902,{"idx":46,"name":"sewer-plate-01","tpage_name":"sewd-vis-tfrag"}],[26542089,{"idx":9,"name":"wstd-small-rockwall-01","tpage_name":"wasstada-tfrag"}],[26542088,{"idx":8,"name":"wstd-rockwall-01","tpage_name":"wasstada-tfrag"}],[35389465,{"idx":25,"name":"cguard1-rubber-01","tpage_name":"introcst-pris"}],[17956945,{"idx":81,"name":"citywide-pillar","tpage_name":"ctyport-vis-tfrag"}],[21299319,{"idx":119,"name":"vehicle-snake-nu-chassis-01","tpage_name":"wasall-pris"}],[92209157,{"idx":5,"name":"klever-face-01","tpage_name":"ldamklev-pris"}],[57147408,{"idx":16,"name":"king-horn","tpage_name":"waspala-pris2"}],[60882948,{"idx":4,"name":"manta-metal-01","tpage_name":"mineb-vis-pris"}],[62128128,{"idx":0,"name":"back01","tpage_name":"ctycara-pris"}],[35389464,{"idx":24,"name":"cguard1-pants","tpage_name":"introcst-pris"}],[17956944,{"idx":80,"name":"city-wall-base-rim-02","tpage_name":"ctyport-vis-tfrag"}],[21299318,{"idx":118,"name":"vehicle-fox-yellow-bar","tpage_name":"wasall-pris"}],[53673998,{"idx":14,"name":"fora-rock-small","tpage_name":"forestb-vis-tfrag"}],[92209156,{"idx":4,"name":"klever-eyelid","tpage_name":"ldamklev-pris"}],[57147407,{"idx":15,"name":"king-hand","tpage_name":"waspala-pris2"}],[60882947,{"idx":3,"name":"manta-laser","tpage_name":"mineb-vis-pris"}],[35389463,{"idx":23,"name":"cguard1-metalcollar","tpage_name":"introcst-pris"}],[17956943,{"idx":79,"name":"city-railing","tpage_name":"ctyport-vis-tfrag"}],[21299317,{"idx":117,"name":"vehicle-fox-plate-hood","tpage_name":"wasall-pris"}],[92209155,{"idx":3,"name":"klever-eye","tpage_name":"ldamklev-pris"}],[57147406,{"idx":14,"name":"king-hair","tpage_name":"waspala-pris2"}],[60882946,{"idx":2,"name":"manta-hose","tpage_name":"mineb-vis-pris"}],[35389462,{"idx":22,"name":"cguard1-lens","tpage_name":"introcst-pris"}],[17956942,{"idx":78,"name":"city-metal-pipeside-01","tpage_name":"ctyport-vis-tfrag"}],[21299316,{"idx":116,"name":"vehicle-fox-plate-back","tpage_name":"wasall-pris"}],[92209154,{"idx":2,"name":"klever-earcup","tpage_name":"ldamklev-pris"}],[57147405,{"idx":13,"name":"king-greenmetalplain","tpage_name":"waspala-pris2"}],[60882945,{"idx":1,"name":"manta-gem-01","tpage_name":"mineb-vis-pris"}],[21299315,{"idx":115,"name":"vehicle-fox-pipe-small","tpage_name":"wasall-pris"}],[92209153,{"idx":1,"name":"bam-hairhilite","tpage_name":"ldamklev-pris"}],[57147404,{"idx":12,"name":"king-greenmetal","tpage_name":"waspala-pris2"}],[60882944,{"idx":0,"name":"manta-eye-01","tpage_name":"mineb-vis-pris"}],[21299314,{"idx":114,"name":"vehicle-fox-pipe-large","tpage_name":"wasall-pris"}],[92209152,{"idx":0,"name":"bam-eyelight","tpage_name":"ldamklev-pris"}],[57147403,{"idx":11,"name":"king-finger","tpage_name":"waspala-pris2"}],[21299313,{"idx":113,"name":"vehicle-fox-grill","tpage_name":"wasall-pris"}],[57147402,{"idx":10,"name":"king-face-01","tpage_name":"waspala-pris2"}],[35389458,{"idx":18,"name":"cguard1-gunstrap","tpage_name":"introcst-pris"}],[17956938,{"idx":74,"name":"citywide-palace-tower-side","tpage_name":"ctyport-vis-tfrag"}],[21299312,{"idx":112,"name":"vehicle-fox-exhaust-tube","tpage_name":"wasall-pris"}],[57147401,{"idx":9,"name":"king-earing","tpage_name":"waspala-pris2"}],[35389457,{"idx":17,"name":"cguard1-gunmetaldark2","tpage_name":"introcst-pris"}],[17956937,{"idx":73,"name":"city-step","tpage_name":"ctyport-vis-tfrag"}],[21299311,{"idx":111,"name":"vehicle-fox-engine","tpage_name":"wasall-pris"}],[57147400,{"idx":8,"name":"king-ear","tpage_name":"waspala-pris2"}],[21299305,{"idx":105,"name":"vehicle-fox-gun-02","tpage_name":"wasall-pris"}],[53673985,{"idx":1,"name":"fora-rock","tpage_name":"forestb-vis-tfrag"}],[57147394,{"idx":2,"name":"king-arm","tpage_name":"waspala-pris2"}],[21299288,{"idx":88,"name":"rhino-wheel-01","tpage_name":"wasall-pris"}],[48693248,{"idx":0,"name":"sewer-nut","tpage_name":"sewb-vis-shrub"}],[21299287,{"idx":87,"name":"rhino-scoop-01","tpage_name":"wasall-pris"}],[21299286,{"idx":86,"name":"rhino-rag-01","tpage_name":"wasall-pris"}],[21299285,{"idx":85,"name":"rhino-metal-01","tpage_name":"wasall-pris"}],[21299282,{"idx":82,"name":"rhino-front-02","tpage_name":"wasall-pris"}],[106234026,{"idx":170,"name":"roboboss-pipe-shin","tpage_name":"mined-pris"}],[144834606,{"idx":46,"name":"rail-edge-01","tpage_name":"combn-tfrag"}],[151060506,{"idx":26,"name":"fac-switch-red-01","tpage_name":"factoryc-vis-pris"}],[154796046,{"idx":14,"name":"daxterhelmetplain","tpage_name":"ljakndax-pris"}],[62193675,{"idx":11,"name":"pipe01","tpage_name":"ctycarb-pris"}],[60948495,{"idx":15,"name":"minc-chain-metal-01","tpage_name":"minec-vis-tfrag"}],[57212955,{"idx":27,"name":"was-burningbush-04","tpage_name":"waswide-vis-tfrag"}],[21299281,{"idx":81,"name":"rhino-front-01","tpage_name":"wasall-pris"}],[106234025,{"idx":169,"name":"roboboss-pipe-02","tpage_name":"mined-pris"}],[144834605,{"idx":45,"name":"rail-light-blue","tpage_name":"combn-tfrag"}],[151060505,{"idx":25,"name":"fac-switch-green-01","tpage_name":"factoryc-vis-pris"}],[154796045,{"idx":13,"name":"daxterheadwidenew","tpage_name":"ljakndax-pris"}],[62193674,{"idx":10,"name":"floorboard01","tpage_name":"ctycarb-pris"}],[60948494,{"idx":14,"name":"minc-blue-paint-01","tpage_name":"minec-vis-tfrag"}],[57212954,{"idx":26,"name":"was-burningbush-01","tpage_name":"waswide-vis-tfrag"}],[63438854,{"idx":6,"name":"waspala-water-dest","tpage_name":"waspala-water"}],[21299280,{"idx":80,"name":"intcept-tread01","tpage_name":"wasall-pris"}],[106234024,{"idx":168,"name":"roboboss-nose","tpage_name":"mined-pris"}],[151060504,{"idx":24,"name":"common-black","tpage_name":"factoryc-vis-pris"}],[154796044,{"idx":12,"name":"daxtergoggles","tpage_name":"ljakndax-pris"}],[62193673,{"idx":9,"name":"exstpipe01","tpage_name":"ctycarb-pris"}],[60948493,{"idx":13,"name":"minc-blue-white-paint-safe-rust04","tpage_name":"minec-vis-tfrag"}],[57212953,{"idx":25,"name":"was-burningbush-03","tpage_name":"waswide-vis-tfrag"}],[63438853,{"idx":5,"name":"waspala-waterfall-dest","tpage_name":"waspala-water"}],[21299279,{"idx":79,"name":"vehicle-snake-gun-02","tpage_name":"wasall-pris"}],[106234023,{"idx":167,"name":"roboboss-darkmetdull-02","tpage_name":"mined-pris"}],[144834603,{"idx":43,"name":"rail-env-car-01","tpage_name":"combn-tfrag"}],[154796043,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"ljakndax-pris"}],[62193672,{"idx":8,"name":"bikecwing01","tpage_name":"ctycarb-pris"}],[60948492,{"idx":12,"name":"minc-blue-yel-paint-safe-rust04","tpage_name":"minec-vis-tfrag"}],[57212952,{"idx":24,"name":"was-burningbush-light-01","tpage_name":"waswide-vis-tfrag"}],[63438852,{"idx":4,"name":"waspala-waterfall","tpage_name":"waspala-water"}],[21299278,{"idx":78,"name":"vehicle-snake-gun-01","tpage_name":"wasall-pris"}],[94240862,{"idx":94,"name":"palcab-lowres-background-grass-to-desert-02","tpage_name":"intpfall-vis-tfrag"}],[106234022,{"idx":166,"name":"roboboss-darkmetdull-01","tpage_name":"mined-pris"}],[144834602,{"idx":42,"name":"rail-patch-01","tpage_name":"combn-tfrag"}],[154796042,{"idx":10,"name":"daxterfoot","tpage_name":"ljakndax-pris"}],[62193671,{"idx":7,"name":"bikecside01","tpage_name":"ctycarb-pris"}],[60948491,{"idx":11,"name":"minc-rust-02","tpage_name":"minec-vis-tfrag"}],[57212951,{"idx":23,"name":"was-burningbush-02","tpage_name":"waswide-vis-tfrag"}],[63438851,{"idx":3,"name":"waspala-water","tpage_name":"waspala-water"}],[21299261,{"idx":61,"name":"vehicle-toad-dash-01","tpage_name":"wasall-pris"}],[21299260,{"idx":60,"name":"vehicle-toad-tire-01-blur","tpage_name":"wasall-pris"}],[21299259,{"idx":59,"name":"vehicle-snake-tread-01-blur","tpage_name":"wasall-pris"}],[38731779,{"idx":3,"name":"lava-drop-04","tpage_name":"wasstada-sprite"}],[21299258,{"idx":58,"name":"vehicle-toad-tire-01","tpage_name":"wasall-pris"}],[38731778,{"idx":2,"name":"lava-drop-03","tpage_name":"wasstada-sprite"}],[21299257,{"idx":57,"name":"vehicle-toad-tank-02","tpage_name":"wasall-pris"}],[38731777,{"idx":1,"name":"lava-drop-02","tpage_name":"wasstada-sprite"}],[21299256,{"idx":56,"name":"vehicle-toad-tank-01","tpage_name":"wasall-pris"}],[38731776,{"idx":0,"name":"lava-drop-01","tpage_name":"wasstada-sprite"}],[21299255,{"idx":55,"name":"vehicle-toad-exhaust-01","tpage_name":"wasall-pris"}],[21299254,{"idx":54,"name":"vehicle-toad-chassis-03","tpage_name":"wasall-pris"}],[21299253,{"idx":53,"name":"vehicle-toad-chassis-02","tpage_name":"wasall-pris"}],[21299252,{"idx":52,"name":"vehicle-toad-chassis-01","tpage_name":"wasall-pris"}],[21299251,{"idx":51,"name":"vehicle-turtle-dash-01","tpage_name":"wasall-pris"}],[21299250,{"idx":50,"name":"vehicle-tread-blur-02","tpage_name":"wasall-pris"}],[21299249,{"idx":49,"name":"vehicle-shocks-stretch-02","tpage_name":"wasall-pris"}],[61079589,{"idx":37,"name":"minc-plate-01","tpage_name":"minec-vis-pris"}],[48627789,{"idx":77,"name":"sewer-rubber-rim-01","tpage_name":"sewb-vis-tfrag"}],[21299248,{"idx":48,"name":"vehicle-shocks-stretch-01","tpage_name":"wasall-pris"}],[61079588,{"idx":36,"name":"minc-blue-paint-rust02","tpage_name":"minec-vis-pris"}],[48627788,{"idx":76,"name":"sewer-metal-block-02","tpage_name":"sewb-vis-tfrag"}],[21299247,{"idx":47,"name":"vehicle-shocks-03","tpage_name":"wasall-pris"}],[21299246,{"idx":46,"name":"vehicle-shocks-02","tpage_name":"wasall-pris"}],[115081304,{"idx":88,"name":"vehicle-snake-tread-01","tpage_name":"desboss1-pris"}],[67239943,{"idx":7,"name":"vin-control-panel-02","tpage_name":"vinroom-vis-tfrag"}],[48562243,{"idx":67,"name":"jakchires-eye","tpage_name":"sewa-vis-pris"}],[52297783,{"idx":55,"name":"freehq-monitor08","tpage_name":"freehq-tfrag"}],[57278503,{"idx":39,"name":"metalflut-eye","tpage_name":"waswide-vis-pris"}],[61014043,{"idx":27,"name":"minc-rust-pipe-07","tpage_name":"minec-vis-shrub"}],[62259223,{"idx":23,"name":"turret01","tpage_name":"ctycarc-pris"}],[21299245,{"idx":45,"name":"vehicle-pad-02","tpage_name":"wasall-pris"}],[21299244,{"idx":44,"name":"vehicle-lite-01","tpage_name":"wasall-pris"}],[115081302,{"idx":86,"name":"jakchires-shoeteop","tpage_name":"desboss1-pris"}],[67239941,{"idx":5,"name":"vin-blue-light","tpage_name":"vinroom-vis-tfrag"}],[48562241,{"idx":65,"name":"jakchires-chestplate","tpage_name":"sewa-vis-pris"}],[52297781,{"idx":53,"name":"freehq-monitor03","tpage_name":"freehq-tfrag"}],[61014041,{"idx":25,"name":"mine-moving-step-top-lod02","tpage_name":"minec-vis-shrub"}],[62259221,{"idx":21,"name":"seat01","tpage_name":"ctycarc-pris"}],[21299243,{"idx":43,"name":"vehicle-green-dash-01","tpage_name":"wasall-pris"}],[61079582,{"idx":30,"name":"minc-rust-01","tpage_name":"minec-vis-pris"}],[48627782,{"idx":70,"name":"sewer-metal-trim-02","tpage_name":"sewb-vis-tfrag"}],[21299241,{"idx":41,"name":"vehicle-tread-blur-01","tpage_name":"wasall-pris"}],[61079581,{"idx":29,"name":"minc-door-metal-01","tpage_name":"minec-vis-pris"}],[48627781,{"idx":69,"name":"sewer-big-brace-02","tpage_name":"sewb-vis-tfrag"}],[35061763,{"idx":3,"name":"errolcyber-lens","tpage_name":"factorya-water"}],[11403343,{"idx":79,"name":"ctyslumc-tarp-01","tpage_name":"ctyslumc-vis-tfrag"}],[35061762,{"idx":2,"name":"windshield01","tpage_name":"factorya-water"}],[11403342,{"idx":78,"name":"ctyslumc-window-panes2","tpage_name":"ctyslumc-vis-tfrag"}],[74842115,{"idx":3,"name":"sewer-waterfall-02-l","tpage_name":"sewl-vis-water"}],[73596935,{"idx":7,"name":"sewer-brick-roof-03","tpage_name":"sewi-vis-tfrag"}],[21299239,{"idx":39,"name":"vehicle-snake-tread-01","tpage_name":"wasall-pris"}],[74842114,{"idx":2,"name":"sewer-watefall-froth-01-l","tpage_name":"sewl-vis-water"}],[73596934,{"idx":6,"name":"sewer-block-02-hitweak","tpage_name":"sewi-vis-tfrag"}],[21299238,{"idx":38,"name":"vehicle-snake-tank-02","tpage_name":"wasall-pris"}],[21299237,{"idx":37,"name":"vehicle-snake-tank-01","tpage_name":"wasall-pris"}],[21299235,{"idx":35,"name":"vehicle-snake-drum-02","tpage_name":"wasall-pris"}],[21299234,{"idx":34,"name":"vehicle-snake-drum-01","tpage_name":"wasall-pris"}],[21299233,{"idx":33,"name":"vehicle-snake-chassis-01","tpage_name":"wasall-pris"}],[39780359,{"idx":7,"name":"nsta-finger-pipe","tpage_name":"nstb-vis-pris"}],[21299232,{"idx":32,"name":"vehicle-safety-plate-01","tpage_name":"wasall-pris"}],[21299231,{"idx":31,"name":"vehicle-metal-plate-02","tpage_name":"wasall-pris"}],[21299230,{"idx":30,"name":"vehicle-chrome-pipe-01","tpage_name":"wasall-pris"}],[21299229,{"idx":29,"name":"common-black","tpage_name":"wasall-pris"}],[21299228,{"idx":28,"name":"vehicle-wire-01","tpage_name":"wasall-pris"}],[21299227,{"idx":27,"name":"vehicle-wheel-01","tpage_name":"wasall-pris"}],[21299226,{"idx":26,"name":"vehicle-tread-01","tpage_name":"wasall-pris"}],[21299225,{"idx":25,"name":"vehicle-sml-met-01","tpage_name":"wasall-pris"}],[21299224,{"idx":24,"name":"vehicle-side-panel-01","tpage_name":"wasall-pris"}],[21299223,{"idx":23,"name":"vehicle-shocks-01","tpage_name":"wasall-pris"}],[21299222,{"idx":22,"name":"vehicle-rims-01","tpage_name":"wasall-pris"}],[48758848,{"idx":64,"name":"sewer-pipe-rim-05b-hitweak","tpage_name":"sewc-vis-tfrag"}],[21299221,{"idx":21,"name":"vehicle-pipe-01","tpage_name":"wasall-pris"}],[21299220,{"idx":20,"name":"vehicle-pad-01","tpage_name":"wasall-pris"}],[21299219,{"idx":19,"name":"vehicle-metal-plate-01","tpage_name":"wasall-pris"}],[21299218,{"idx":18,"name":"vehicle-gun-box-top-01","tpage_name":"wasall-pris"}],[21299217,{"idx":17,"name":"vehicle-gun-box-01","tpage_name":"wasall-pris"}],[21299216,{"idx":16,"name":"vehicle-gas-tank-01","tpage_name":"wasall-pris"}],[21299214,{"idx":14,"name":"vehicle-exhaust-pipe-01","tpage_name":"wasall-pris"}],[21299213,{"idx":13,"name":"vehicle-dash-02","tpage_name":"wasall-pris"}],[20906098,{"idx":114,"name":"citywide-sail-01","tpage_name":"stadiumb-vis-tfrag"}],[49545238,{"idx":22,"name":"power-switch-01","tpage_name":"sewe-vis-pris"}],[20906094,{"idx":110,"name":"rub-rubble-ground","tpage_name":"stadiumb-vis-tfrag"}],[20906093,{"idx":109,"name":"rub-cement-top","tpage_name":"stadiumb-vis-tfrag"}],[50790413,{"idx":13,"name":"for-prec-text","tpage_name":"foresta-vis-water"}],[20906092,{"idx":108,"name":"rub-city-wall-frame","tpage_name":"stadiumb-vis-tfrag"}],[50790412,{"idx":12,"name":"fora-water-wave-01-dest","tpage_name":"foresta-vis-water"}],[20906091,{"idx":107,"name":"rub-stad-brick-pieces","tpage_name":"stadiumb-vis-tfrag"}],[50790411,{"idx":11,"name":"fora-water-wave-01","tpage_name":"foresta-vis-water"}],[20906090,{"idx":106,"name":"stdmb-lightpost-base-02","tpage_name":"stadiumb-vis-tfrag"}],[20906087,{"idx":103,"name":"stdmb-track-01","tpage_name":"stadiumb-vis-tfrag"}],[50790407,{"idx":7,"name":"fora-water-dest","tpage_name":"foresta-vis-water"}],[67960837,{"idx":5,"name":"wang_3","tpage_name":"wasintro-hfrag"}],[49283137,{"idx":65,"name":"sew-wallswitch-metal-01","tpage_name":"sewd-vis-pris"}],[20906084,{"idx":100,"name":"rub-copper-metal-02","tpage_name":"stadiumb-vis-tfrag"}],[50790404,{"idx":4,"name":"fora-waterfall-01","tpage_name":"foresta-vis-water"}],[67960834,{"idx":2,"name":"wang_0","tpage_name":"wasintro-hfrag"}],[49283134,{"idx":62,"name":"sewer-pipe-rim-05b-hitweak","tpage_name":"sewd-vis-pris"}],[20906083,{"idx":99,"name":"rub-met-strp-close","tpage_name":"stadiumb-vis-tfrag"}],[50790403,{"idx":3,"name":"fora-water","tpage_name":"foresta-vis-water"}],[67960833,{"idx":1,"name":"wang_mip","tpage_name":"wasintro-hfrag"}],[49283133,{"idx":61,"name":"sewer-pipe-rim-05","tpage_name":"sewd-vis-pris"}],[20906082,{"idx":98,"name":"rub-palace-tower-side","tpage_name":"stadiumb-vis-tfrag"}],[67960832,{"idx":0,"name":"wang_black","tpage_name":"wasintro-hfrag"}],[49283132,{"idx":60,"name":"sewer-brick-block-11","tpage_name":"sewd-vis-pris"}],[20906081,{"idx":97,"name":"rub-panels-01","tpage_name":"stadiumb-vis-tfrag"}],[49545221,{"idx":5,"name":"airlockl-door-metalframe","tpage_name":"sewe-vis-pris"}],[20906080,{"idx":96,"name":"rub-palshaft-dirt-blue-01","tpage_name":"stadiumb-vis-tfrag"}],[49545220,{"idx":4,"name":"airlock-door-metal2","tpage_name":"sewe-vis-pris"}],[20906079,{"idx":95,"name":"stdmb-broken-light","tpage_name":"stadiumb-vis-tfrag"}],[49545219,{"idx":3,"name":"airlock-door-main","tpage_name":"sewe-vis-pris"}],[10813471,{"idx":31,"name":"cityslumc-gold-trim","tpage_name":"ctyslumb-vis-shrub"}],[20906078,{"idx":94,"name":"rub-ox-pipe-01","tpage_name":"stadiumb-vis-tfrag"}],[49545218,{"idx":2,"name":"airlock-door-cog","tpage_name":"sewe-vis-pris"}],[20906077,{"idx":93,"name":"rub-wall-gen-03","tpage_name":"stadiumb-vis-tfrag"}],[49545217,{"idx":1,"name":"airlock-door-bolt","tpage_name":"sewe-vis-pris"}],[10813469,{"idx":29,"name":"ctyslumc-wire","tpage_name":"ctyslumb-vis-shrub"}],[20906076,{"idx":92,"name":"rub-metal-pipeside-01","tpage_name":"stadiumb-vis-tfrag"}],[10813468,{"idx":28,"name":"ctyslumc-light","tpage_name":"ctyslumb-vis-shrub"}],[8323108,{"idx":36,"name":"t-citywide-met-strp01","tpage_name":"ctywide-vis-tfrag"}],[20906075,{"idx":91,"name":"rub-wall-gen-06","tpage_name":"stadiumb-vis-tfrag"}],[85196817,{"idx":17,"name":"vehicle-metal-plate-01","tpage_name":"desrace1-pris"}],[38732038,{"idx":262,"name":"male4_13","tpage_name":"wasstada-sprite"}],[16973824,{"idx":0,"name":"city-farm-aquaduct-glass-01","tpage_name":"ctyfarmb-vis-water"}],[10813467,{"idx":27,"name":"ctyslumc-wall","tpage_name":"ctyslumb-vis-shrub"}],[8323107,{"idx":35,"name":"t-citywide-met-bm-red-strp01","tpage_name":"ctywide-vis-tfrag"}],[20906074,{"idx":90,"name":"rub-cement-pillars","tpage_name":"stadiumb-vis-tfrag"}],[20906073,{"idx":89,"name":"rub-wall-gen-02","tpage_name":"stadiumb-vis-tfrag"}],[20906072,{"idx":88,"name":"rub-wall-gen-04","tpage_name":"stadiumb-vis-tfrag"}],[10813464,{"idx":24,"name":"ctyslumc-stain","tpage_name":"ctyslumb-vis-shrub"}],[20906071,{"idx":87,"name":"rub-wall-trim","tpage_name":"stadiumb-vis-tfrag"}],[10813463,{"idx":23,"name":"cityslumc-grass-yellow","tpage_name":"ctyslumb-vis-shrub"}],[20906070,{"idx":86,"name":"rub-metal-flatpipe-01","tpage_name":"stadiumb-vis-tfrag"}],[28180480,{"idx":0,"name":"palroof-stain-wall-01","tpage_name":"intpalrf-alpha"}],[20906069,{"idx":85,"name":"rub-cement-broken-end","tpage_name":"stadiumb-vis-tfrag"}],[20906068,{"idx":84,"name":"rub-cement-a","tpage_name":"stadiumb-vis-tfrag"}],[20906067,{"idx":83,"name":"rub-city-wall-inside-damaged","tpage_name":"stadiumb-vis-tfrag"}],[20906066,{"idx":82,"name":"rub-wall-side-beam-02","tpage_name":"stadiumb-vis-tfrag"}],[20906065,{"idx":81,"name":"rub-wall-gen-01","tpage_name":"stadiumb-vis-tfrag"}],[20906064,{"idx":80,"name":"rub-beam-gen","tpage_name":"stadiumb-vis-tfrag"}],[20906063,{"idx":79,"name":"rub-stad-brick","tpage_name":"stadiumb-vis-tfrag"}],[20906062,{"idx":78,"name":"rub-marble-floor-01-hitweak","tpage_name":"stadiumb-vis-tfrag"}],[85196824,{"idx":24,"name":"jakchires-precarmor-01","tpage_name":"desrace1-pris"}],[38732045,{"idx":269,"name":"male4_20","tpage_name":"wasstada-sprite"}],[119668745,{"idx":9,"name":"citn-1-pants","tpage_name":"ljinx-pris"}],[122159105,{"idx":1,"name":"facb_redmetal-02","tpage_name":"factoryb-vis-tfrag"}],[100990985,{"idx":9,"name":"jakb-brownleather","tpage_name":"ljakklev-pris"}],[38731985,{"idx":209,"name":"male2_02","tpage_name":"wasstada-sprite"}],[93519905,{"idx":33,"name":"hud-turbo-boost-on-01","tpage_name":"wasall-minimap"}],[49348614,{"idx":6,"name":"sewer-pipe-rim-07","tpage_name":"sewb-vis-pris"}],[35651634,{"idx":50,"name":"samosbird-beak","tpage_name":"introcst-pris2"}],[20906054,{"idx":70,"name":"stdmb-marble-floor-01","tpage_name":"stadiumb-vis-tfrag"}],[112328765,{"idx":61,"name":"bat-amulet-03","tpage_name":"wascast-pris"}],[60686394,{"idx":58,"name":"lt-eco-vent-side-01","tpage_name":"mineb-vis-tfrag"}],[74383374,{"idx":14,"name":"sewer-metal-block-06","tpage_name":"sewj-vis-tfrag"}],[85196823,{"idx":23,"name":"jakchires-brownstrap","tpage_name":"desrace1-pris"}],[38732044,{"idx":268,"name":"male4_19","tpage_name":"wasstada-sprite"}],[119668744,{"idx":8,"name":"citfat-hairflat","tpage_name":"ljinx-pris"}],[122159104,{"idx":0,"name":"common-black","tpage_name":"factoryb-vis-tfrag"}],[49348613,{"idx":5,"name":"airlock-door-cog1","tpage_name":"sewb-vis-pris"}],[35651633,{"idx":49,"name":"samos-vest","tpage_name":"introcst-pris2"}],[20906053,{"idx":69,"name":"stdmb-wall-03","tpage_name":"stadiumb-vis-tfrag"}],[112328764,{"idx":60,"name":"bat-amulet-02","tpage_name":"wascast-pris"}],[60686393,{"idx":57,"name":"lt-eco-vent-blue-01","tpage_name":"mineb-vis-tfrag"}],[74383373,{"idx":13,"name":"sewer-pipe-02","tpage_name":"sewj-vis-tfrag"}],[85196810,{"idx":10,"name":"intcept-tread01","tpage_name":"desrace1-pris"}],[35389610,{"idx":170,"name":"klever-eye","tpage_name":"introcst-pris"}],[38732031,{"idx":255,"name":"male4_06","tpage_name":"wasstada-sprite"}],[100991031,{"idx":55,"name":"klever-shoe","tpage_name":"ljakklev-pris"}],[20906040,{"idx":56,"name":"stdmb-panel-09","tpage_name":"stadiumb-vis-tfrag"}],[112328751,{"idx":47,"name":"jakchires-leatherpouch","tpage_name":"wascast-pris"}],[38732027,{"idx":251,"name":"male4_02","tpage_name":"wasstada-sprite"}],[112197647,{"idx":15,"name":"vehicle-tread-blur-02","tpage_name":"desinter-pris"}],[100991027,{"idx":51,"name":"klever-hand","tpage_name":"ljakklev-pris"}],[20906036,{"idx":52,"name":"stdmb-panel-01","tpage_name":"stadiumb-vis-tfrag"}],[112328747,{"idx":43,"name":"jakchires-glovetop","tpage_name":"wascast-pris"}],[85196803,{"idx":3,"name":"can-type","tpage_name":"desrace1-pris"}],[38732024,{"idx":248,"name":"male3_20","tpage_name":"wasstada-sprite"}],[112197644,{"idx":12,"name":"vehicle-gun-box-01","tpage_name":"desinter-pris"}],[100991024,{"idx":48,"name":"klever-gunmetal-04","tpage_name":"ljakklev-pris"}],[20906033,{"idx":49,"name":"stdmb-gray-metal-01","tpage_name":"stadiumb-vis-tfrag"}],[112328744,{"idx":40,"name":"jakchires-eyelid","tpage_name":"wascast-pris"}],[60686373,{"idx":37,"name":"minc-blue-paint-rust04","tpage_name":"mineb-vis-tfrag"}],[56950833,{"idx":49,"name":"waspala-fountain-base01","tpage_name":"waspala-tfrag"}],[48234514,{"idx":18,"name":"des-cave-floor-01","tpage_name":"desert-vis-tfrag"}],[49479694,{"idx":14,"name":"sewer-water-highlight-01-e-dest","tpage_name":"sewe-vis-water"}],[20906007,{"idx":23,"name":"city-slum-burning-can","tpage_name":"stadiumb-vis-tfrag"}],[14680107,{"idx":43,"name":"jakchires-teeth","tpage_name":"ctygenb-vis-pris"}],[60686347,{"idx":11,"name":"minc-blue-paint-rust02","tpage_name":"mineb-vis-tfrag"}],[56950807,{"idx":23,"name":"common-black","tpage_name":"waspala-tfrag"}],[48234510,{"idx":14,"name":"des-cliff-trans-01","tpage_name":"desert-vis-tfrag"}],[20906003,{"idx":19,"name":"rub-rubble-01","tpage_name":"stadiumb-vis-tfrag"}],[14680103,{"idx":39,"name":"jakchires-precarmor-01","tpage_name":"ctygenb-vis-pris"}],[48234512,{"idx":16,"name":"des-cliff-01","tpage_name":"desert-vis-tfrag"}],[49479692,{"idx":12,"name":"sewer-waterfall-01-e-dest","tpage_name":"sewe-vis-water"}],[38731987,{"idx":211,"name":"male2_04","tpage_name":"wasstada-sprite"}],[103481347,{"idx":3,"name":"des-pinetree-bark","tpage_name":"deserta-vis-shrub"}],[100990987,{"idx":11,"name":"jakb-eye","tpage_name":"ljakklev-pris"}],[20905996,{"idx":12,"name":"stdm-glass-01","tpage_name":"stadiumb-vis-tfrag"}],[14680096,{"idx":32,"name":"jakchires-glovetop","tpage_name":"ctygenb-vis-pris"}],[48234508,{"idx":12,"name":"des-corral-metal-01","tpage_name":"desert-vis-tfrag"}],[50724868,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"foresta-vis-pris"}],[20905992,{"idx":8,"name":"stdm-wallrock-dirt","tpage_name":"stadiumb-vis-tfrag"}],[14680092,{"idx":28,"name":"jakchires-eyebrow","tpage_name":"ctygenb-vis-pris"}],[38731975,{"idx":199,"name":"male1_13","tpage_name":"wasstada-sprite"}],[20905984,{"idx":0,"name":"rub-metal-01","tpage_name":"stadiumb-vis-tfrag"}],[14680084,{"idx":20,"name":"jakc-wristband-a2","tpage_name":"ctygenb-vis-pris"}],[29229059,{"idx":3,"name":"flying-gull-02","tpage_name":"nsta-sprite"}],[11796539,{"idx":59,"name":"city-ind-metal-09","tpage_name":"ctyinda-vis-tfrag"}],[60620836,{"idx":36,"name":"daxterheadwidenew","tpage_name":"minea-vis-pris"}],[49414216,{"idx":72,"name":"kg-grunt-rim-01","tpage_name":"sewc-vis-pris"}],[29229058,{"idx":2,"name":"flying-gull-01","tpage_name":"nsta-sprite"}],[11796538,{"idx":58,"name":"city-ind-metal-03","tpage_name":"ctyinda-vis-tfrag"}],[60620835,{"idx":35,"name":"daxtergoggles","tpage_name":"minea-vis-pris"}],[49414215,{"idx":71,"name":"kg-grunt-cable-01","tpage_name":"sewc-vis-pris"}],[29229057,{"idx":1,"name":"nest-egg-shell","tpage_name":"nsta-sprite"}],[589917,{"idx":93,"name":"hud-newhud-shine-01","tpage_name":"level-default-minimap"}],[11796537,{"idx":57,"name":"city-ind-support-base","tpage_name":"ctyinda-vis-tfrag"}],[60620834,{"idx":34,"name":"daxterfoot-bottom","tpage_name":"minea-vis-pris"}],[49414214,{"idx":70,"name":"cguard1-lens","tpage_name":"sewc-vis-pris"}],[29229056,{"idx":0,"name":"nest-egg-lens","tpage_name":"nsta-sprite"}],[589916,{"idx":92,"name":"hud-newhud-reddot-01","tpage_name":"level-default-minimap"}],[11796536,{"idx":56,"name":"city-ind-black","tpage_name":"ctyinda-vis-tfrag"}],[60620833,{"idx":33,"name":"daxterfoot","tpage_name":"minea-vis-pris"}],[49414213,{"idx":69,"name":"cguard1-guntube","tpage_name":"sewc-vis-pris"}],[60620832,{"idx":32,"name":"daxterfinger","tpage_name":"minea-vis-pris"}],[49414212,{"idx":68,"name":"cguard1-gunmetaldark2","tpage_name":"sewc-vis-pris"}],[101056541,{"idx":29,"name":"jakchires-precarmor-01","tpage_name":"ljakcklv-pris"}],[103546901,{"idx":21,"name":"missle-launcher-tube-end-01","tpage_name":"lctyhijk-tfrag"}],[49414170,{"idx":26,"name":"cguardgame-backplate","tpage_name":"sewc-vis-pris"}],[50659350,{"idx":22,"name":"fora-roof-support","tpage_name":"foresta-vis-tfrag"}],[60620831,{"idx":31,"name":"daxterear","tpage_name":"minea-vis-pris"}],[49414211,{"idx":67,"name":"cguard1-chestplate","tpage_name":"sewc-vis-pris"}],[60620830,{"idx":30,"name":"daxterbolt","tpage_name":"minea-vis-pris"}],[49414210,{"idx":66,"name":"cguard1-backmetal","tpage_name":"sewc-vis-pris"}],[60620829,{"idx":29,"name":"daxterbodyshort-eix","tpage_name":"minea-vis-pris"}],[49414209,{"idx":65,"name":"bam-eyelight","tpage_name":"sewc-vis-pris"}],[60620828,{"idx":28,"name":"daxterarm","tpage_name":"minea-vis-pris"}],[60620827,{"idx":27,"name":"daxter-orange","tpage_name":"minea-vis-pris"}],[60620826,{"idx":26,"name":"daxter-furhilite","tpage_name":"minea-vis-pris"}],[15794181,{"idx":5,"name":"ctyfarm-eggplant-leaf-2","tpage_name":"ctyfarma-sprite"}],[852021,{"idx":53,"name":"bluecrate-05","tpage_name":"halfpipe-tfrag"}],[60620825,{"idx":25,"name":"daxter-eyelid","tpage_name":"minea-vis-pris"}],[15794180,{"idx":4,"name":"ctyfarm-eggplant-leaf-1","tpage_name":"ctyfarma-sprite"}],[8323100,{"idx":28,"name":"citywide-pillar","tpage_name":"ctywide-vis-tfrag"}],[60620824,{"idx":24,"name":"bam-hairhilite","tpage_name":"minea-vis-pris"}],[15794179,{"idx":3,"name":"ctyfarm-eggplant-body","tpage_name":"ctyfarma-sprite"}],[8323099,{"idx":27,"name":"citywide-fort-gold","tpage_name":"ctywide-vis-tfrag"}],[15794178,{"idx":2,"name":"ctyfarm-chili-stem","tpage_name":"ctyfarma-sprite"}],[8323098,{"idx":26,"name":"citywide-redwall","tpage_name":"ctywide-vis-tfrag"}],[101056532,{"idx":20,"name":"jakchires-facelft","tpage_name":"ljakcklv-pris"}],[96075812,{"idx":36,"name":"gun-main","tpage_name":"ljakc-pris"}],[103546892,{"idx":12,"name":"missle-launcher-rim-01","tpage_name":"lctyhijk-tfrag"}],[49414161,{"idx":17,"name":"sewer-pipe-small-01","tpage_name":"sewc-vis-pris"}],[50659341,{"idx":13,"name":"sewer-metal-block-05","tpage_name":"foresta-vis-tfrag"}],[15794177,{"idx":1,"name":"ctyfarm-chili-leaf","tpage_name":"ctyfarma-sprite"}],[101056531,{"idx":19,"name":"jakchires-eyelid","tpage_name":"ljakcklv-pris"}],[96075811,{"idx":35,"name":"jakc-scarfhanging","tpage_name":"ljakc-pris"}],[103546891,{"idx":11,"name":"missle-launcher-gear-01","tpage_name":"lctyhijk-tfrag"}],[49414160,{"idx":16,"name":"sew-laserturret-pole","tpage_name":"sewc-vis-pris"}],[50659340,{"idx":12,"name":"sewer-concrete-edge-02","tpage_name":"foresta-vis-tfrag"}],[15794176,{"idx":0,"name":"ctyfarm-cab-body","tpage_name":"ctyfarma-sprite"}],[14548996,{"idx":4,"name":"sign-ctygenb-praxis-banner","tpage_name":"ctygenb-sprite"}],[49414159,{"idx":15,"name":"sew-laserturret-center","tpage_name":"sewc-vis-pris"}],[50659339,{"idx":11,"name":"sewer-metal-block-06","tpage_name":"foresta-vis-tfrag"}],[49414158,{"idx":14,"name":"sew-laserturret-bot","tpage_name":"sewc-vis-pris"}],[49414157,{"idx":13,"name":"sew-laser-guard-side","tpage_name":"sewc-vis-pris"}],[50659337,{"idx":9,"name":"fora-stream-rocks","tpage_name":"foresta-vis-tfrag"}],[49414156,{"idx":12,"name":"sew-gun-round-cap-01","tpage_name":"sewc-vis-pris"}],[49414155,{"idx":11,"name":"sew-gun-round-02","tpage_name":"sewc-vis-pris"}],[8323215,{"idx":143,"name":"bluecrate-05","tpage_name":"ctywide-vis-tfrag"}],[14680118,{"idx":54,"name":"cty-grunt-skin-03","tpage_name":"ctygenb-vis-pris"}],[49414154,{"idx":10,"name":"sew-gun-rim-02","tpage_name":"sewc-vis-pris"}],[14680117,{"idx":53,"name":"cty-grunt-skin-02","tpage_name":"ctygenb-vis-pris"}],[49414153,{"idx":9,"name":"sew-gun-panel-05","tpage_name":"sewc-vis-pris"}],[8323213,{"idx":141,"name":"rub-palace-tower-side","tpage_name":"ctywide-vis-tfrag"}],[60620814,{"idx":14,"name":"bam-eyelight","tpage_name":"minea-vis-pris"}],[50659374,{"idx":46,"name":"fora-precursor-metal-plain-01dk","tpage_name":"foresta-vis-tfrag"}],[14680116,{"idx":52,"name":"cty-grunt-skin-01","tpage_name":"ctygenb-vis-pris"}],[49414152,{"idx":8,"name":"sew-gun-panel-02","tpage_name":"sewc-vis-pris"}],[8323212,{"idx":140,"name":"metalcrate-lod04","tpage_name":"ctywide-vis-tfrag"}],[50659332,{"idx":4,"name":"fora-bark","tpage_name":"foresta-vis-tfrag"}],[20840472,{"idx":24,"name":"jakc-wraps","tpage_name":"stadiumb-vis-pris"}],[14680115,{"idx":51,"name":"cty-grunt-metal-01","tpage_name":"ctygenb-vis-pris"}],[49414151,{"idx":7,"name":"sew-gun-drum-01","tpage_name":"sewc-vis-pris"}],[8323211,{"idx":139,"name":"metalcrate-lod03","tpage_name":"ctywide-vis-tfrag"}],[50659331,{"idx":3,"name":"fora-grass","tpage_name":"foresta-vis-tfrag"}],[60620812,{"idx":12,"name":"minc-safe-plate-01","tpage_name":"minea-vis-pris"}],[50659372,{"idx":44,"name":"fora-bark-ends","tpage_name":"foresta-vis-tfrag"}],[14680114,{"idx":50,"name":"cty-grunt-hose","tpage_name":"ctygenb-vis-pris"}],[49414150,{"idx":6,"name":"sew-gun-body-01","tpage_name":"sewc-vis-pris"}],[8323210,{"idx":138,"name":"metalcrate-lod02","tpage_name":"ctywide-vis-tfrag"}],[50659330,{"idx":2,"name":"fora-grass-fringe","tpage_name":"foresta-vis-tfrag"}],[14680113,{"idx":49,"name":"cty-grunt-gem-01","tpage_name":"ctygenb-vis-pris"}],[115736637,{"idx":61,"name":"vehicle-wheel-01","tpage_name":"lnstcst-pris"}],[49414149,{"idx":5,"name":"sew-gun-barrel-01","tpage_name":"sewc-vis-pris"}],[8323209,{"idx":137,"name":"metalcrate-01","tpage_name":"ctywide-vis-tfrag"}],[50659329,{"idx":1,"name":"fora-rock-small","tpage_name":"foresta-vis-tfrag"}],[14680112,{"idx":48,"name":"cty-grunt-eye-01","tpage_name":"ctygenb-vis-pris"}],[115736636,{"idx":60,"name":"vehicle-tread-01","tpage_name":"lnstcst-pris"}],[49414148,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewc-vis-pris"}],[8323208,{"idx":136,"name":"metalcrate-04","tpage_name":"ctywide-vis-tfrag"}],[50659328,{"idx":0,"name":"fora-rock","tpage_name":"foresta-vis-tfrag"}],[14680111,{"idx":47,"name":"prebot-envmap","tpage_name":"ctygenb-vis-pris"}],[115736635,{"idx":59,"name":"desert-egg-gem-01","tpage_name":"lnstcst-pris"}],[129433615,{"idx":15,"name":"dp-text-16","tpage_name":"wasseem-sprite"}],[49414147,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewc-vis-pris"}],[8323207,{"idx":135,"name":"metalcrate-05","tpage_name":"ctywide-vis-tfrag"}],[60620808,{"idx":8,"name":"minc-rust-01","tpage_name":"minea-vis-pris"}],[50659368,{"idx":40,"name":"fora-butress-metal-01","tpage_name":"foresta-vis-tfrag"}],[115736634,{"idx":58,"name":"desert-egg-bulbtop-01","tpage_name":"lnstcst-pris"}],[129433614,{"idx":14,"name":"dp-text-15","tpage_name":"wasseem-sprite"}],[49414146,{"idx":2,"name":"airlock-door-main","tpage_name":"sewc-vis-pris"}],[8323206,{"idx":134,"name":"metalcrate-02","tpage_name":"ctywide-vis-tfrag"}],[60620807,{"idx":7,"name":"minc-door-metal-01","tpage_name":"minea-vis-pris"}],[50659367,{"idx":39,"name":"fora-statue-stone","tpage_name":"foresta-vis-tfrag"}],[115736633,{"idx":57,"name":"desert-egg-bulb-01","tpage_name":"lnstcst-pris"}],[128188433,{"idx":17,"name":"wascity-ground-01","tpage_name":"waswide-vis-shrub"}],[129433613,{"idx":13,"name":"dp-text-14","tpage_name":"wasseem-sprite"}],[49414145,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewc-vis-pris"}],[8323205,{"idx":133,"name":"bluecrate-lod04","tpage_name":"ctywide-vis-tfrag"}],[49414144,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewc-vis-pris"}],[8323204,{"idx":132,"name":"bluecrate-lod02","tpage_name":"ctywide-vis-tfrag"}],[17956962,{"idx":98,"name":"city-yellowlight","tpage_name":"ctyport-vis-tfrag"}],[35389482,{"idx":42,"name":"daxterheadwidenew","tpage_name":"introcst-pris"}],[17956961,{"idx":97,"name":"city-port-seam-metal-HI","tpage_name":"ctyport-vis-tfrag"}],[35389481,{"idx":41,"name":"daxtergoggles","tpage_name":"introcst-pris"}],[41615381,{"idx":21,"name":"was-tizard-nail","tpage_name":"wascitya-vis-pris"}],[17956959,{"idx":95,"name":"city-port-cable-quare-01","tpage_name":"ctyport-vis-tfrag"}],[35389479,{"idx":39,"name":"daxterfoot","tpage_name":"introcst-pris"}],[41615379,{"idx":19,"name":"was-tizard-fin","tpage_name":"wascitya-vis-pris"}],[17956958,{"idx":94,"name":"city-port-cable-cylinder-01","tpage_name":"ctyport-vis-tfrag"}],[35389478,{"idx":38,"name":"daxterfinger","tpage_name":"introcst-pris"}],[41615378,{"idx":18,"name":"was-tizard-facefin","tpage_name":"wascitya-vis-pris"}],[17956952,{"idx":88,"name":"city-port-pavmnt--scorched-01","tpage_name":"ctyport-vis-tfrag"}],[35389472,{"idx":32,"name":"daxter-furhilite","tpage_name":"introcst-pris"}],[41615372,{"idx":12,"name":"gekko-metal-01","tpage_name":"wascitya-vis-pris"}],[17956951,{"idx":87,"name":"common-black","tpage_name":"ctyport-vis-tfrag"}],[35389471,{"idx":31,"name":"daxter-eyelid","tpage_name":"introcst-pris"}],[41615371,{"idx":11,"name":"gekko-laserbarrel","tpage_name":"wascitya-vis-pris"}],[17956950,{"idx":86,"name":"city-port-pavmnt--cracked-01","tpage_name":"ctyport-vis-tfrag"}],[35389470,{"idx":30,"name":"cguard1-teeth","tpage_name":"introcst-pris"}],[41615370,{"idx":10,"name":"gekko-laser","tpage_name":"wascitya-vis-pris"}],[89980947,{"idx":19,"name":"des-mount-01","tpage_name":"desertg-vis-tfrag"}],[94961667,{"idx":3,"name":"jakc-armor","tpage_name":"lsigjakc-pris"}],[17956939,{"idx":75,"name":"t-citywide-met-strp01","tpage_name":"ctyport-vis-tfrag"}],[35389459,{"idx":19,"name":"cguard1-guntube","tpage_name":"introcst-pris"}],[17956936,{"idx":72,"name":"t-citywide-met-strp-close","tpage_name":"ctyport-vis-tfrag"}],[35389456,{"idx":16,"name":"cguard1-gunmetaldark","tpage_name":"introcst-pris"}],[17956934,{"idx":70,"name":"hip-twood01","tpage_name":"ctyport-vis-tfrag"}],[35389454,{"idx":14,"name":"cguard1-gunhandle","tpage_name":"introcst-pris"}],[17956933,{"idx":69,"name":"hip-tmetring02","tpage_name":"ctyport-vis-tfrag"}],[35389453,{"idx":13,"name":"cguard1-gunboltlight","tpage_name":"introcst-pris"}],[35651664,{"idx":80,"name":"king-vestback","tpage_name":"introcst-pris2"}],[49348644,{"idx":36,"name":"cguardgame-shoebottom","tpage_name":"sewb-vis-pris"}],[589915,{"idx":91,"name":"hud-newhud-greendot-01","tpage_name":"level-default-minimap"}],[89980935,{"idx":7,"name":"des-corral-plate-03","tpage_name":"desertg-vis-tfrag"}],[91226115,{"idx":3,"name":"gun-shellcasings-02","tpage_name":"gungame-vis-shrub"}],[17956932,{"idx":68,"name":"hip-tmetfloor04","tpage_name":"ctyport-vis-tfrag"}],[35389452,{"idx":12,"name":"cguard1-greyheadshield","tpage_name":"introcst-pris"}],[17956931,{"idx":67,"name":"environment-oldmetal","tpage_name":"ctyport-vis-tfrag"}],[35389451,{"idx":11,"name":"cguard1-glove","tpage_name":"introcst-pris"}],[17956930,{"idx":66,"name":"city-port-barge-side-plain","tpage_name":"ctyport-vis-tfrag"}],[35389450,{"idx":10,"name":"cguard1-face","tpage_name":"introcst-pris"}],[17956929,{"idx":65,"name":"city-port-barge-side-doors","tpage_name":"ctyport-vis-tfrag"}],[35389449,{"idx":9,"name":"cguard1-eyering","tpage_name":"introcst-pris"}],[41484304,{"idx":16,"name":"wascity-cactus-flower","tpage_name":"wascitya-vis-shrub"}],[17956928,{"idx":64,"name":"city-port-barge-side","tpage_name":"ctyport-vis-tfrag"}],[35389448,{"idx":8,"name":"cguard1-chestplate","tpage_name":"introcst-pris"}],[41484303,{"idx":15,"name":"wascity-cactus-green","tpage_name":"wascitya-vis-shrub"}],[17956927,{"idx":63,"name":"city-port-barge-plain-metal-1","tpage_name":"ctyport-vis-tfrag"}],[35389447,{"idx":7,"name":"cguard1-brushedmetal","tpage_name":"introcst-pris"}],[41484302,{"idx":14,"name":"wascitya-stone-top","tpage_name":"wascitya-vis-shrub"}],[17956926,{"idx":62,"name":"city-port-barge-metal-darker","tpage_name":"ctyport-vis-tfrag"}],[35389446,{"idx":6,"name":"cguard1-boottop","tpage_name":"introcst-pris"}],[41484301,{"idx":13,"name":"wascity-overlay-damaged","tpage_name":"wascitya-vis-shrub"}],[17956924,{"idx":60,"name":"city-port-crate-metal-inside","tpage_name":"ctyport-vis-tfrag"}],[35389444,{"idx":4,"name":"cguard1-armshield","tpage_name":"introcst-pris"}],[41484299,{"idx":11,"name":"wascity-ground-stain-01","tpage_name":"wascitya-vis-shrub"}],[17956923,{"idx":59,"name":"city-port-barge-grating","tpage_name":"ctyport-vis-tfrag"}],[35389443,{"idx":3,"name":"cguard-shoemetal","tpage_name":"introcst-pris"}],[35651654,{"idx":70,"name":"king-leg","tpage_name":"introcst-pris2"}],[589905,{"idx":81,"name":"hud-gunpurple-02a","tpage_name":"level-default-minimap"}],[11796525,{"idx":45,"name":"city-ind-wall-base-top-03","tpage_name":"ctyinda-vis-tfrag"}],[41484298,{"idx":10,"name":"wascity-shrub-orange-01","tpage_name":"wascitya-vis-shrub"}],[17956922,{"idx":58,"name":"city-port-barge-plain-metal","tpage_name":"ctyport-vis-tfrag"}],[35389442,{"idx":2,"name":"cguard-shoebottom","tpage_name":"introcst-pris"}],[41484297,{"idx":9,"name":"wascity-ditch-wall-top-to-ground","tpage_name":"wascitya-vis-shrub"}],[17956921,{"idx":57,"name":"city-greenlight2","tpage_name":"ctyport-vis-tfrag"}],[35389441,{"idx":1,"name":"bam-hairhilite","tpage_name":"introcst-pris"}],[41484296,{"idx":8,"name":"wascity-overlay-crack","tpage_name":"wascitya-vis-shrub"}],[17956920,{"idx":56,"name":"city-port-roofmetal-rim","tpage_name":"ctyport-vis-tfrag"}],[35389440,{"idx":0,"name":"bam-eyelight","tpage_name":"introcst-pris"}],[41484295,{"idx":7,"name":"wascity-stain-wall-01","tpage_name":"wascitya-vis-shrub"}],[17956919,{"idx":55,"name":"city-roofmetal","tpage_name":"ctyport-vis-tfrag"}],[41484294,{"idx":6,"name":"wascity-overlay-bullethole-a","tpage_name":"wascitya-vis-shrub"}],[17956918,{"idx":54,"name":"city-port-control-panel-litup2","tpage_name":"ctyport-vis-tfrag"}],[41484293,{"idx":5,"name":"wascity-overlay-bullethole-c","tpage_name":"wascitya-vis-shrub"}],[17956917,{"idx":53,"name":"city-port-bridge-main","tpage_name":"ctyport-vis-tfrag"}],[17956916,{"idx":52,"name":"city-port-piece-metal","tpage_name":"ctyport-vis-tfrag"}],[17956915,{"idx":51,"name":"city-greenlight","tpage_name":"ctyport-vis-tfrag"}],[41484290,{"idx":2,"name":"wascity-steel-bar","tpage_name":"wascitya-vis-shrub"}],[17956914,{"idx":50,"name":"city-port-plate-05","tpage_name":"ctyport-vis-tfrag"}],[35651645,{"idx":61,"name":"king-earing","tpage_name":"introcst-pris2"}],[589896,{"idx":72,"name":"hud-arrow-down-02-lit","tpage_name":"level-default-minimap"}],[11796516,{"idx":36,"name":"city-ind-wall-base-08","tpage_name":"ctyinda-vis-tfrag"}],[16777236,{"idx":20,"name":"city-farm-mar-main","tpage_name":"ctyfarmb-vis-pris"}],[41484289,{"idx":1,"name":"wascity-stain-window-01","tpage_name":"wascitya-vis-shrub"}],[17956913,{"idx":49,"name":"city-port-bridge-side","tpage_name":"ctyport-vis-tfrag"}],[41484288,{"idx":0,"name":"wascity-blotch-withstreaks-01","tpage_name":"wascitya-vis-shrub"}],[17956912,{"idx":48,"name":"city-port-citywall","tpage_name":"ctyport-vis-tfrag"}],[17956911,{"idx":47,"name":"city-port-pavmnt-01","tpage_name":"ctyport-vis-tfrag"}],[17956910,{"idx":46,"name":"city-port-ventbase-01","tpage_name":"ctyport-vis-tfrag"}],[17956909,{"idx":45,"name":"city-port-door01","tpage_name":"ctyport-vis-tfrag"}],[17956908,{"idx":44,"name":"city-port-barrel-body","tpage_name":"ctyport-vis-tfrag"}],[17956907,{"idx":43,"name":"city-port-bolt","tpage_name":"ctyport-vis-tfrag"}],[17956906,{"idx":42,"name":"city-port-metal-beam","tpage_name":"ctyport-vis-tfrag"}],[17956905,{"idx":41,"name":"city-roofmetal-rim","tpage_name":"ctyport-vis-tfrag"}],[115081290,{"idx":74,"name":"jakchires-facelft","tpage_name":"desboss1-pris"}],[11796548,{"idx":68,"name":"cty-ind-ground02","tpage_name":"ctyinda-vis-tfrag"}],[17956904,{"idx":40,"name":"city-port-roofmetal","tpage_name":"ctyport-vis-tfrag"}],[35651635,{"idx":51,"name":"samosbird-body","tpage_name":"introcst-pris2"}],[49348615,{"idx":7,"name":"sewer-plate-05","tpage_name":"sewb-vis-pris"}],[589886,{"idx":62,"name":"hud-gunred-01a","tpage_name":"level-default-minimap"}],[16777226,{"idx":10,"name":"yak-medfur-end","tpage_name":"ctyfarmb-vis-pris"}],[11796506,{"idx":26,"name":"city-ind-redlight","tpage_name":"ctyinda-vis-tfrag"}],[17956903,{"idx":39,"name":"city-port-copper-lines","tpage_name":"ctyport-vis-tfrag"}],[589885,{"idx":61,"name":"hud-gunblue-common-01","tpage_name":"level-default-minimap"}],[16777225,{"idx":9,"name":"yak-medfur","tpage_name":"ctyfarmb-vis-pris"}],[11796505,{"idx":25,"name":"city-ind-bigpipe-siding-02","tpage_name":"ctyinda-vis-tfrag"}],[17956902,{"idx":38,"name":"city-port-small-metal-highlite","tpage_name":"ctyport-vis-tfrag"}],[589884,{"idx":60,"name":"hud-gunblue-03a","tpage_name":"level-default-minimap"}],[16777224,{"idx":8,"name":"yak-lips2","tpage_name":"ctyfarmb-vis-pris"}],[11796504,{"idx":24,"name":"city-ind-metal-green-main-side","tpage_name":"ctyinda-vis-tfrag"}],[17956901,{"idx":37,"name":"city-port-dark-marble","tpage_name":"ctyport-vis-tfrag"}],[589883,{"idx":59,"name":"hud-gunblue-02a","tpage_name":"level-default-minimap"}],[11796503,{"idx":23,"name":"city-ind-wall-noisy-05","tpage_name":"ctyinda-vis-tfrag"}],[16777223,{"idx":7,"name":"yak-lightmed-transfur","tpage_name":"ctyfarmb-vis-pris"}],[17956900,{"idx":36,"name":"city-redlight","tpage_name":"ctyport-vis-tfrag"}],[589882,{"idx":58,"name":"hud-gunblue-01a","tpage_name":"level-default-minimap"}],[16777222,{"idx":6,"name":"yak-lightfur","tpage_name":"ctyfarmb-vis-pris"}],[11796502,{"idx":22,"name":"city-ind-wall-noisy-03","tpage_name":"ctyinda-vis-tfrag"}],[17956898,{"idx":34,"name":"city-port-canopyarm-swivel-sides","tpage_name":"ctyport-vis-tfrag"}],[17956896,{"idx":32,"name":"city-port-bigpipe-siding","tpage_name":"ctyport-vis-tfrag"}],[35651627,{"idx":43,"name":"samos-log-01","tpage_name":"introcst-pris2"}],[589878,{"idx":54,"name":"hud-arrow-top-01-lit","tpage_name":"level-default-minimap"}],[16777218,{"idx":2,"name":"city-farm-veg-green-1","tpage_name":"ctyfarmb-vis-pris"}],[11796498,{"idx":18,"name":"city-bigpipe-ring-02","tpage_name":"ctyinda-vis-tfrag"}],[8060958,{"idx":30,"name":"mud-bubble","tpage_name":"ctywide-sprite"}],[115081281,{"idx":65,"name":"jakchires-arm","tpage_name":"desboss1-pris"}],[17956895,{"idx":31,"name":"city-port-metal-block-01","tpage_name":"ctyport-vis-tfrag"}],[35651626,{"idx":42,"name":"samos-lens","tpage_name":"introcst-pris2"}],[589877,{"idx":53,"name":"hud-arrow-right-01-lit","tpage_name":"level-default-minimap"}],[16777217,{"idx":1,"name":"city-farm-veg-cabseed","tpage_name":"ctyfarmb-vis-pris"}],[8060957,{"idx":29,"name":"water-splat","tpage_name":"ctywide-sprite"}],[11796497,{"idx":17,"name":"city-ind-grate-01","tpage_name":"ctyinda-vis-tfrag"}],[17956894,{"idx":30,"name":"city-port-garage-door01","tpage_name":"ctyport-vis-tfrag"}],[35651625,{"idx":41,"name":"samos-leaf","tpage_name":"introcst-pris2"}],[589876,{"idx":52,"name":"hud-arrow-left-01-lit","tpage_name":"level-default-minimap"}],[16777216,{"idx":0,"name":"city-farm-veg-cableaf","tpage_name":"ctyfarmb-vis-pris"}],[11796496,{"idx":16,"name":"city-muck-01","tpage_name":"ctyinda-vis-tfrag"}],[17956893,{"idx":29,"name":"city-port-wall-metal-01","tpage_name":"ctyport-vis-tfrag"}],[35651624,{"idx":40,"name":"samos-helmet","tpage_name":"introcst-pris2"}],[589875,{"idx":51,"name":"hud-arrow-down-01-lit","tpage_name":"level-default-minimap"}],[11796495,{"idx":15,"name":"city-ind-metal-02","tpage_name":"ctyinda-vis-tfrag"}],[17956892,{"idx":28,"name":"city-port-litwindow","tpage_name":"ctyport-vis-tfrag"}],[17956891,{"idx":27,"name":"city-port-metal","tpage_name":"ctyport-vis-tfrag"}],[17956890,{"idx":26,"name":"city-port-metal-green-main-side","tpage_name":"ctyport-vis-tfrag"}],[17956889,{"idx":25,"name":"city-port-black","tpage_name":"ctyport-vis-tfrag"}],[17956888,{"idx":24,"name":"city-bluelight","tpage_name":"ctyport-vis-tfrag"}],[17956887,{"idx":23,"name":"city-port-bracketmetal-tiny","tpage_name":"ctyport-vis-tfrag"}],[17956886,{"idx":22,"name":"city-port-bigpipe-ring-side","tpage_name":"ctyport-vis-tfrag"}],[115081271,{"idx":55,"name":"jakc-armor","tpage_name":"desboss1-pris"}],[126287891,{"idx":19,"name":"nwasp-skin-03","tpage_name":"sewo-vis-pris"}],[11796529,{"idx":49,"name":"city-ind-wall-05","tpage_name":"ctyinda-vis-tfrag"}],[17956885,{"idx":21,"name":"city-port-metal-green-main","tpage_name":"ctyport-vis-tfrag"}],[115081270,{"idx":54,"name":"environment-oldmetal","tpage_name":"desboss1-pris"}],[126287890,{"idx":18,"name":"nwasp-skin-02","tpage_name":"sewo-vis-pris"}],[11796528,{"idx":48,"name":"city-ind-wall-base-07","tpage_name":"ctyinda-vis-tfrag"}],[17956884,{"idx":20,"name":"city-port-wallbase","tpage_name":"ctyport-vis-tfrag"}],[115081269,{"idx":53,"name":"daxtertuft","tpage_name":"desboss1-pris"}],[126287889,{"idx":17,"name":"nwasp-skin-01","tpage_name":"sewo-vis-pris"}],[11796527,{"idx":47,"name":"city-ind-buldge-light-self-illuminated-02","tpage_name":"ctyinda-vis-tfrag"}],[589907,{"idx":83,"name":"hud-gunpurple-common-01","tpage_name":"level-default-minimap"}],[17956883,{"idx":19,"name":"city-port-pushblock-metal","tpage_name":"ctyport-vis-tfrag"}],[115081268,{"idx":52,"name":"daxterteeth","tpage_name":"desboss1-pris"}],[126287888,{"idx":16,"name":"nwasp-metal-01","tpage_name":"sewo-vis-pris"}],[11796526,{"idx":46,"name":"city-ind-wall-06","tpage_name":"ctyinda-vis-tfrag"}],[589906,{"idx":82,"name":"hud-gunpurple-03a","tpage_name":"level-default-minimap"}],[17956882,{"idx":18,"name":"city-port-metal-block-04","tpage_name":"ctyport-vis-tfrag"}],[115081267,{"idx":51,"name":"daxternose","tpage_name":"desboss1-pris"}],[126287887,{"idx":15,"name":"nwasp-hose","tpage_name":"sewo-vis-pris"}],[17956881,{"idx":17,"name":"city-port-green-marble","tpage_name":"ctyport-vis-tfrag"}],[115081266,{"idx":50,"name":"daxterlense","tpage_name":"desboss1-pris"}],[126287886,{"idx":14,"name":"nwasp-gem-01","tpage_name":"sewo-vis-pris"}],[11796524,{"idx":44,"name":"city-ind-wall-base-05","tpage_name":"ctyinda-vis-tfrag"}],[589904,{"idx":80,"name":"hud-gunpurple-01a","tpage_name":"level-default-minimap"}],[17956880,{"idx":16,"name":"city-port-bridge-grate01","tpage_name":"ctyport-vis-tfrag"}],[35651611,{"idx":27,"name":"ashelin-teeth","tpage_name":"introcst-pris2"}],[589862,{"idx":38,"name":"hud-npcring-bar-01","tpage_name":"level-default-minimap"}],[8060942,{"idx":14,"name":"ticker-e","tpage_name":"ctywide-sprite"}],[11796482,{"idx":2,"name":"city-ind-wall-base-01","tpage_name":"ctyinda-vis-tfrag"}],[115081265,{"idx":49,"name":"daxterhelmetplain","tpage_name":"desboss1-pris"}],[126287885,{"idx":13,"name":"nwasp-eye-01","tpage_name":"sewo-vis-pris"}],[11796523,{"idx":43,"name":"city-ind-border-stripe-dark-01","tpage_name":"ctyinda-vis-tfrag"}],[589903,{"idx":79,"name":"hud-gun-reticle","tpage_name":"level-default-minimap"}],[17956879,{"idx":15,"name":"city-port-bridge-brace01","tpage_name":"ctyport-vis-tfrag"}],[35651610,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"introcst-pris2"}],[589861,{"idx":37,"name":"hud-npcring-01","tpage_name":"level-default-minimap"}],[8060941,{"idx":13,"name":"ticker-d","tpage_name":"ctywide-sprite"}],[11796481,{"idx":1,"name":"city-ind-band-dark-01","tpage_name":"ctyinda-vis-tfrag"}],[115081264,{"idx":48,"name":"daxterheadwidenew","tpage_name":"desboss1-pris"}],[126287884,{"idx":12,"name":"grunt-skin-03","tpage_name":"sewo-vis-pris"}],[11796522,{"idx":42,"name":"city-ind-litemetal-01","tpage_name":"ctyinda-vis-tfrag"}],[589902,{"idx":78,"name":"hud-arrow-top-02-lit","tpage_name":"level-default-minimap"}],[17956878,{"idx":14,"name":"city-port-bridge-grid01","tpage_name":"ctyport-vis-tfrag"}],[35651609,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"introcst-pris2"}],[589860,{"idx":36,"name":"map-target-marker","tpage_name":"level-default-minimap"}],[8060940,{"idx":12,"name":"ticker-c","tpage_name":"ctywide-sprite"}],[11796480,{"idx":0,"name":"city-ind-wall-02","tpage_name":"ctyinda-vis-tfrag"}],[115081263,{"idx":47,"name":"daxtergoggles","tpage_name":"desboss1-pris"}],[126287883,{"idx":11,"name":"grunt-skin-02","tpage_name":"sewo-vis-pris"}],[11796521,{"idx":41,"name":"city-ind-dark-marble","tpage_name":"ctyinda-vis-tfrag"}],[589901,{"idx":77,"name":"hud-arrow-top-02","tpage_name":"level-default-minimap"}],[104660997,{"idx":5,"name":"des-rock-shrub-01","tpage_name":"deserte-vis-shrub"}],[100925457,{"idx":17,"name":"king-iris","tpage_name":"ljkdmpk-pris2"}],[17956877,{"idx":13,"name":"city-port-ground-01","tpage_name":"ctyport-vis-tfrag"}],[35651608,{"idx":24,"name":"ashelin-shield","tpage_name":"introcst-pris2"}],[589859,{"idx":35,"name":"hud-mapring-alarm-01","tpage_name":"level-default-minimap"}],[8060939,{"idx":11,"name":"ticker-b","tpage_name":"ctywide-sprite"}],[115081262,{"idx":46,"name":"daxterfoot-bottom","tpage_name":"desboss1-pris"}],[11796520,{"idx":40,"name":"city-ind-catwalk-slope-metal","tpage_name":"ctyinda-vis-tfrag"}],[589900,{"idx":76,"name":"hud-arrow-right-02-lit","tpage_name":"level-default-minimap"}],[16777240,{"idx":24,"name":"city-farm-sprinkle-suppport","tpage_name":"ctyfarmb-vis-pris"}],[17956876,{"idx":12,"name":"city-port-seam-side-metal","tpage_name":"ctyport-vis-tfrag"}],[35651607,{"idx":23,"name":"ashelin-shells","tpage_name":"introcst-pris2"}],[589858,{"idx":34,"name":"hud-mapring-01","tpage_name":"level-default-minimap"}],[8060938,{"idx":10,"name":"ticker-a","tpage_name":"ctywide-sprite"}],[115081261,{"idx":45,"name":"daxterfoot","tpage_name":"desboss1-pris"}],[126287881,{"idx":9,"name":"grunt-metal-01","tpage_name":"sewo-vis-pris"}],[11796519,{"idx":39,"name":"cty-ind-catwalk-panels","tpage_name":"ctyinda-vis-tfrag"}],[589899,{"idx":75,"name":"hud-arrow-right-02","tpage_name":"level-default-minimap"}],[16777239,{"idx":23,"name":"city-farm-sprinkle-metal-dirt","tpage_name":"ctyfarmb-vis-pris"}],[17956875,{"idx":11,"name":"city-port-bigtop-underside","tpage_name":"ctyport-vis-tfrag"}],[115081260,{"idx":44,"name":"daxterfinger","tpage_name":"desboss1-pris"}],[11796518,{"idx":38,"name":"city-ind-litwindow-TOP-03","tpage_name":"ctyinda-vis-tfrag"}],[589898,{"idx":74,"name":"hud-arrow-left-02-lit","tpage_name":"level-default-minimap"}],[16777238,{"idx":22,"name":"city-farm-sprinkle-metal","tpage_name":"ctyfarmb-vis-pris"}],[17956874,{"idx":10,"name":"city-port-metal-rim-01","tpage_name":"ctyport-vis-tfrag"}],[115081259,{"idx":43,"name":"daxterear","tpage_name":"desboss1-pris"}],[126287879,{"idx":7,"name":"grunt-gem-01","tpage_name":"sewo-vis-pris"}],[11796517,{"idx":37,"name":"city-ind-wall-07","tpage_name":"ctyinda-vis-tfrag"}],[589897,{"idx":73,"name":"hud-arrow-left-02","tpage_name":"level-default-minimap"}],[16777237,{"idx":21,"name":"city-farm-veg-cablip","tpage_name":"ctyfarmb-vis-pris"}],[17956873,{"idx":9,"name":"city-port-metal-block-02","tpage_name":"ctyport-vis-tfrag"}],[115081258,{"idx":42,"name":"daxterbolt","tpage_name":"desboss1-pris"}],[126287878,{"idx":6,"name":"grunt-eye-01","tpage_name":"sewo-vis-pris"}],[17956872,{"idx":8,"name":"city-port-bridge-top","tpage_name":"ctyport-vis-tfrag"}],[115081257,{"idx":41,"name":"daxterbodyshort-eix","tpage_name":"desboss1-pris"}],[126287877,{"idx":5,"name":"airlock-door-cog1","tpage_name":"sewo-vis-pris"}],[11796515,{"idx":35,"name":"city-ind-catwalk-coping-01","tpage_name":"ctyinda-vis-tfrag"}],[589895,{"idx":71,"name":"hud-arrow-down-02","tpage_name":"level-default-minimap"}],[16777235,{"idx":19,"name":"city-farm-mar-leaf-02","tpage_name":"ctyfarmb-vis-pris"}],[17956871,{"idx":7,"name":"city-port-tower-balcony-under","tpage_name":"ctyport-vis-tfrag"}],[115081256,{"idx":40,"name":"daxterarm","tpage_name":"desboss1-pris"}],[126287876,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewo-vis-pris"}],[11796514,{"idx":34,"name":"city-ind-wall-noisy-border-01","tpage_name":"ctyinda-vis-tfrag"}],[589894,{"idx":70,"name":"hud-gunyellow-common-01","tpage_name":"level-default-minimap"}],[16777234,{"idx":18,"name":"city-farm-veg-leaf-1","tpage_name":"ctyfarmb-vis-pris"}],[17956870,{"idx":6,"name":"city-port-seam-main-metal","tpage_name":"ctyport-vis-tfrag"}],[115081255,{"idx":39,"name":"daxter-orange","tpage_name":"desboss1-pris"}],[126287875,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewo-vis-pris"}],[11796513,{"idx":33,"name":"city-port-metal-green-main-side","tpage_name":"ctyinda-vis-tfrag"}],[589893,{"idx":69,"name":"hud-gunyellow-03b","tpage_name":"level-default-minimap"}],[16777233,{"idx":17,"name":"city-farm-veg-green-2","tpage_name":"ctyfarmb-vis-pris"}],[17956869,{"idx":5,"name":"city-port-seam-metal","tpage_name":"ctyport-vis-tfrag"}],[115081254,{"idx":38,"name":"daxter-furhilite","tpage_name":"desboss1-pris"}],[126287874,{"idx":2,"name":"airlock-door-main","tpage_name":"sewo-vis-pris"}],[11796512,{"idx":32,"name":"city-ind-buldge-light-self-illuminated-01","tpage_name":"ctyinda-vis-tfrag"}],[589892,{"idx":68,"name":"hud-gunyellow-03a","tpage_name":"level-default-minimap"}],[16777232,{"idx":16,"name":"city-farm-veg-chilberry-02","tpage_name":"ctyfarmb-vis-pris"}],[17956868,{"idx":4,"name":"city-port-grnd-cobl-01","tpage_name":"ctyport-vis-tfrag"}],[115081253,{"idx":37,"name":"daxter-eyelid","tpage_name":"desboss1-pris"}],[126287873,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewo-vis-pris"}],[11796511,{"idx":31,"name":"city-ind-buldge-light-01","tpage_name":"ctyinda-vis-tfrag"}],[589891,{"idx":67,"name":"hud-gunyellow-02a","tpage_name":"level-default-minimap"}],[16777231,{"idx":15,"name":"city-farm-cabmain","tpage_name":"ctyfarmb-vis-pris"}],[17956867,{"idx":3,"name":"city-port-seawalll","tpage_name":"ctyport-vis-tfrag"}],[115081252,{"idx":36,"name":"bam-hairhilite","tpage_name":"desboss1-pris"}],[126287872,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewo-vis-pris"}],[11796510,{"idx":30,"name":"city-ind-wall-noisy-01","tpage_name":"ctyinda-vis-tfrag"}],[589890,{"idx":66,"name":"hud-gunyellow-01a","tpage_name":"level-default-minimap"}],[16777230,{"idx":14,"name":"city-farm-beettree-trunk","tpage_name":"ctyfarmb-vis-pris"}],[17956866,{"idx":2,"name":"city-port-seam-side-metal-plain","tpage_name":"ctyport-vis-tfrag"}],[115081251,{"idx":35,"name":"bam-eyelight","tpage_name":"desboss1-pris"}],[11796509,{"idx":29,"name":"city-ind-wall-noisy-border-02","tpage_name":"ctyinda-vis-tfrag"}],[589889,{"idx":65,"name":"hud-gunred-common-01","tpage_name":"level-default-minimap"}],[16777229,{"idx":13,"name":"city-farm-beettree-bulb","tpage_name":"ctyfarmb-vis-pris"}],[17956865,{"idx":1,"name":"city-port-seawalll-lip","tpage_name":"ctyport-vis-tfrag"}],[115081250,{"idx":34,"name":"terraformer-jewels","tpage_name":"desboss1-pris"}],[11796508,{"idx":28,"name":"city-ind-wall-noisy-04","tpage_name":"ctyinda-vis-tfrag"}],[589888,{"idx":64,"name":"hud-gunred-03a","tpage_name":"level-default-minimap"}],[16777228,{"idx":12,"name":"city-farm-beettree-blossom","tpage_name":"ctyfarmb-vis-pris"}],[67829813,{"idx":53,"name":"onin-magic-bigpuff","tpage_name":"freehq-sprite"}],[17956864,{"idx":0,"name":"city-port-seawalll-front","tpage_name":"ctyport-vis-tfrag"}],[16711684,{"idx":4,"name":"city-farm-road-end-blend-to-alpha","tpage_name":"ctyfarmb-vis-alpha"}],[11796507,{"idx":27,"name":"city-ind-wall-noisy-border-05","tpage_name":"ctyinda-vis-tfrag"}],[16777227,{"idx":11,"name":"yak-nose","tpage_name":"ctyfarmb-vis-pris"}],[589887,{"idx":63,"name":"hud-gunred-02a","tpage_name":"level-default-minimap"}],[88014855,{"idx":7,"name":"sig2-flask","tpage_name":"lwassig-pris"}],[60620895,{"idx":95,"name":"mine-rust-01","tpage_name":"minea-vis-pris"}],[17891357,{"idx":29,"name":"kgtrns-topjet01","tpage_name":"ctyport-vis-shrub"}],[458837,{"idx":85,"name":"jakc-arm","tpage_name":"level-default-pris"}],[88014854,{"idx":6,"name":"sig2-facert","tpage_name":"lwassig-pris"}],[60620894,{"idx":94,"name":"mine-red-paint-rust05","tpage_name":"minea-vis-pris"}],[17891356,{"idx":28,"name":"kgtrns-box01","tpage_name":"ctyport-vis-shrub"}],[458836,{"idx":84,"name":"talkbox-orange-01","tpage_name":"level-default-pris"}],[38731949,{"idx":173,"name":"femcher2_08","tpage_name":"wasstada-sprite"}],[73596989,{"idx":61,"name":"sewer-hall-light-01","tpage_name":"sewi-vis-tfrag"}],[92274689,{"idx":1,"name":"intcept-base-patern01","tpage_name":"desrace2-pris"}],[88014853,{"idx":5,"name":"sig2-faceleft","tpage_name":"lwassig-pris"}],[60620893,{"idx":93,"name":"mine-metal-wheel-01","tpage_name":"minea-vis-pris"}],[17891355,{"idx":27,"name":"kgtrns-wing01","tpage_name":"ctyport-vis-shrub"}],[458835,{"idx":83,"name":"talkbox-light-02","tpage_name":"level-default-pris"}],[38731948,{"idx":172,"name":"femcher2_07","tpage_name":"wasstada-sprite"}],[73596988,{"idx":60,"name":"sewer-plate-01","tpage_name":"sewi-vis-tfrag"}],[92274688,{"idx":0,"name":"intcept-base-green01","tpage_name":"desrace2-pris"}],[88014852,{"idx":4,"name":"sig2-eyestillsmall","tpage_name":"lwassig-pris"}],[60620892,{"idx":92,"name":"mine-blue-metal-01","tpage_name":"minea-vis-pris"}],[17891354,{"idx":26,"name":"kgtrns-side01","tpage_name":"ctyport-vis-shrub"}],[458834,{"idx":82,"name":"talkbox-light-01","tpage_name":"level-default-pris"}],[88014851,{"idx":3,"name":"sig2-belt","tpage_name":"lwassig-pris"}],[60620891,{"idx":91,"name":"mine-white-stripe-metal-01","tpage_name":"minea-vis-pris"}],[17891353,{"idx":25,"name":"city-port-roofmetal-rim","tpage_name":"ctyport-vis-shrub"}],[458833,{"idx":81,"name":"talkbox-grill-01","tpage_name":"level-default-pris"}],[88014850,{"idx":2,"name":"sig-skirts-02","tpage_name":"lwassig-pris"}],[60620890,{"idx":90,"name":"mine-under-metal-01","tpage_name":"minea-vis-pris"}],[17891352,{"idx":24,"name":"city-port-wallbase","tpage_name":"ctyport-vis-shrub"}],[458832,{"idx":80,"name":"talkbox-body-08","tpage_name":"level-default-pris"}],[17891351,{"idx":23,"name":"city-port-small-metal-highlite","tpage_name":"ctyport-vis-shrub"}],[458831,{"idx":79,"name":"talkbox-body-07","tpage_name":"level-default-pris"}],[38731939,{"idx":163,"name":"female1_19","tpage_name":"wasstada-sprite"}],[73596979,{"idx":51,"name":"sewer-scaffold-02","tpage_name":"sewi-vis-tfrag"}],[58654819,{"idx":99,"name":"vinroom-small-monitor-07","tpage_name":"hiphog-sprite"}],[17891345,{"idx":17,"name":"city-inda-scorch-small","tpage_name":"ctyport-vis-shrub"}],[458825,{"idx":73,"name":"talkbox-body-01","tpage_name":"level-default-pris"}],[79495202,{"idx":34,"name":"des-wascity-outerwall-metal-d","tpage_name":"wasintro-vis-tfrag"}],[81985562,{"idx":26,"name":"marauder-leather-part","tpage_name":"wasstadc-pris"}],[38731938,{"idx":162,"name":"female1_18","tpage_name":"wasstada-sprite"}],[73596978,{"idx":50,"name":"sewer-pipe-rim-03","tpage_name":"sewi-vis-tfrag"}],[58654818,{"idx":98,"name":"vinroom-small-monitor-06","tpage_name":"hiphog-sprite"}],[71106618,{"idx":58,"name":"wstd-stands-shell02","tpage_name":"wasstadb-tfrag"}],[17891344,{"idx":16,"name":"city-inda-scorch-big","tpage_name":"ctyport-vis-shrub"}],[458824,{"idx":72,"name":"sk-yellowfurnew","tpage_name":"level-default-pris"}],[79495201,{"idx":33,"name":"des-wascity-cement-road","tpage_name":"wasintro-vis-tfrag"}],[81985561,{"idx":25,"name":"marauder-leather-handle","tpage_name":"wasstadc-pris"}],[38731937,{"idx":161,"name":"female1_17","tpage_name":"wasstada-sprite"}],[73596977,{"idx":49,"name":"sewer-flat-pipe-01","tpage_name":"sewi-vis-tfrag"}],[58654817,{"idx":97,"name":"vinroom-small-monitor-05","tpage_name":"hiphog-sprite"}],[17891343,{"idx":15,"name":"city-ind-overlay-bullethole-c","tpage_name":"ctyport-vis-shrub"}],[458823,{"idx":71,"name":"sk-solidorangefur","tpage_name":"level-default-pris"}],[79495200,{"idx":32,"name":"des-wascity-palace-siding-01","tpage_name":"wasintro-vis-tfrag"}],[81985560,{"idx":24,"name":"marauder-leather-buckle","tpage_name":"wasstadc-pris"}],[38731936,{"idx":160,"name":"female1_16","tpage_name":"wasstada-sprite"}],[73596976,{"idx":48,"name":"sewer-plate-04","tpage_name":"sewi-vis-tfrag"}],[58654816,{"idx":96,"name":"vinroom-small-monitor-04","tpage_name":"hiphog-sprite"}],[17891342,{"idx":14,"name":"city-ind-overlay-bullethole-b","tpage_name":"ctyport-vis-shrub"}],[458822,{"idx":70,"name":"sk-shinywhite","tpage_name":"level-default-pris"}],[79495199,{"idx":31,"name":"des-wascity-outerwall-metal-b","tpage_name":"wasintro-vis-tfrag"}],[81985559,{"idx":23,"name":"marauder-leather-brown","tpage_name":"wasstadc-pris"}],[38731935,{"idx":159,"name":"female1_15","tpage_name":"wasstada-sprite"}],[73596975,{"idx":47,"name":"sewer-lip-01","tpage_name":"sewi-vis-tfrag"}],[71106615,{"idx":55,"name":"wstd-scaffold-bar","tpage_name":"wasstadb-tfrag"}],[58654815,{"idx":95,"name":"vinroom-small-monitor-03","tpage_name":"hiphog-sprite"}],[17891341,{"idx":13,"name":"city-ind-overlay-bullethole-a","tpage_name":"ctyport-vis-shrub"}],[458821,{"idx":69,"name":"sk-orange2yellowfur","tpage_name":"level-default-pris"}],[38731934,{"idx":158,"name":"female1_14","tpage_name":"wasstada-sprite"}],[73596974,{"idx":46,"name":"sewer-pool-rim-02","tpage_name":"sewi-vis-tfrag"}],[71106614,{"idx":54,"name":"dummy-red-01","tpage_name":"wasstadb-tfrag"}],[58654814,{"idx":94,"name":"vinroom-small-monitor-02","tpage_name":"hiphog-sprite"}],[17891340,{"idx":12,"name":"city-port-decal-01","tpage_name":"ctyport-vis-shrub"}],[458820,{"idx":68,"name":"sk-finger","tpage_name":"level-default-pris"}],[38731933,{"idx":157,"name":"female1_13","tpage_name":"wasstada-sprite"}],[71106613,{"idx":53,"name":"dummy-env-01","tpage_name":"wasstadb-tfrag"}],[58654813,{"idx":93,"name":"vinroom-small-monitor-01","tpage_name":"hiphog-sprite"}],[17891339,{"idx":11,"name":"city-port-boltl-stain-roundl","tpage_name":"ctyport-vis-shrub"}],[458819,{"idx":67,"name":"sk-eye-lid","tpage_name":"level-default-pris"}],[38731932,{"idx":156,"name":"female1_12","tpage_name":"wasstada-sprite"}],[58654812,{"idx":92,"name":"vinroom-tv-radar","tpage_name":"hiphog-sprite"}],[17891338,{"idx":10,"name":"city-port-decal-04","tpage_name":"ctyport-vis-shrub"}],[458818,{"idx":66,"name":"sk-ear","tpage_name":"level-default-pris"}],[38731931,{"idx":155,"name":"female1_11","tpage_name":"wasstada-sprite"}],[73596971,{"idx":43,"name":"sewer-pipe-rim-09","tpage_name":"sewi-vis-tfrag"}],[71106611,{"idx":51,"name":"dummy-white-01","tpage_name":"wasstadb-tfrag"}],[58654811,{"idx":91,"name":"screen-15","tpage_name":"hiphog-sprite"}],[17891337,{"idx":9,"name":"city-port-tbolt","tpage_name":"ctyport-vis-shrub"}],[458817,{"idx":65,"name":"sk-bodyfur","tpage_name":"level-default-pris"}],[62717981,{"idx":29,"name":"environment-oldmetal","tpage_name":"ctypesa-pris"}],[71434241,{"idx":1,"name":"wstd-floor-panel02","tpage_name":"wasstadc-tfrag"}],[79495193,{"idx":25,"name":"des-cliff-top-02","tpage_name":"wasintro-vis-tfrag"}],[81985553,{"idx":17,"name":"marauder-gun-blade","tpage_name":"wasstadc-pris"}],[17891335,{"idx":7,"name":"city-port-decal-02","tpage_name":"ctyport-vis-shrub"}],[62717979,{"idx":27,"name":"darkguard-scarf","tpage_name":"ctypesa-pris"}],[49020999,{"idx":71,"name":"sewer-metal-block-02","tpage_name":"sewe-vis-tfrag"}],[79495192,{"idx":24,"name":"des-cliff-01","tpage_name":"wasintro-vis-tfrag"}],[81985552,{"idx":16,"name":"marauder-blade-joint","tpage_name":"wasstadc-pris"}],[17891334,{"idx":6,"name":"city-port-decal-03","tpage_name":"ctyport-vis-shrub"}],[62717978,{"idx":26,"name":"darkguard-headshield","tpage_name":"ctypesa-pris"}],[49020998,{"idx":70,"name":"sewer-metal-trim-01","tpage_name":"sewe-vis-tfrag"}],[79495191,{"idx":23,"name":"des-cliff-top-01","tpage_name":"wasintro-vis-tfrag"}],[81985551,{"idx":15,"name":"marauder-blade","tpage_name":"wasstadc-pris"}],[17891333,{"idx":5,"name":"city-port-grease-stain-ground","tpage_name":"ctyport-vis-shrub"}],[62717977,{"idx":25,"name":"darkguard-armshield","tpage_name":"ctypesa-pris"}],[49020997,{"idx":69,"name":"sewer-grill-02","tpage_name":"sewe-vis-tfrag"}],[79495190,{"idx":22,"name":"des-rock-01","tpage_name":"wasintro-vis-tfrag"}],[81985550,{"idx":14,"name":"marauder-belt","tpage_name":"wasstadc-pris"}],[38731926,{"idx":150,"name":"female1_06","tpage_name":"wasstada-sprite"}],[73596966,{"idx":38,"name":"sewer-pipe-02","tpage_name":"sewi-vis-tfrag"}],[71106606,{"idx":46,"name":"dummy-eye-01","tpage_name":"wasstadb-tfrag"}],[58654806,{"idx":86,"name":"screen-10","tpage_name":"hiphog-sprite"}],[17891332,{"idx":4,"name":"city-port-bigpipe-ring-side","tpage_name":"ctyport-vis-shrub"}],[79495189,{"idx":21,"name":"des-cliff-top-03","tpage_name":"wasintro-vis-tfrag"}],[81985549,{"idx":13,"name":"wstlander-01-wrap","tpage_name":"wasstadc-pris"}],[38731925,{"idx":149,"name":"female1_05","tpage_name":"wasstada-sprite"}],[73596965,{"idx":37,"name":"sewer-metal-block-02","tpage_name":"sewi-vis-tfrag"}],[71106605,{"idx":45,"name":"dummy-white-bar-01","tpage_name":"wasstadb-tfrag"}],[58654805,{"idx":85,"name":"screen-09","tpage_name":"hiphog-sprite"}],[17891331,{"idx":3,"name":"city-port-canopyarm-swivel-sides","tpage_name":"ctyport-vis-shrub"}],[62717975,{"idx":23,"name":"cguardgame-sleeve","tpage_name":"ctypesa-pris"}],[49020995,{"idx":67,"name":"sewer-block-02-hitweak","tpage_name":"sewe-vis-tfrag"}],[79495188,{"idx":20,"name":"des-cliff-trans-01","tpage_name":"wasintro-vis-tfrag"}],[81985548,{"idx":12,"name":"wstlander-01-skirt","tpage_name":"wasstadc-pris"}],[38731924,{"idx":148,"name":"female1_04","tpage_name":"wasstada-sprite"}],[71106604,{"idx":44,"name":"dummy-blade-01","tpage_name":"wasstadb-tfrag"}],[58654804,{"idx":84,"name":"screen-08","tpage_name":"hiphog-sprite"}],[17891330,{"idx":2,"name":"city-port-blotch-withstreaks-01","tpage_name":"ctyport-vis-shrub"}],[62717974,{"idx":22,"name":"cguardgame-shouldershield","tpage_name":"ctypesa-pris"}],[49020994,{"idx":66,"name":"sewer-brick-roof-01","tpage_name":"sewe-vis-tfrag"}],[79495187,{"idx":19,"name":"des-mount-bottom-01","tpage_name":"wasintro-vis-tfrag"}],[81985547,{"idx":11,"name":"wstlander-01-shoulderarmor","tpage_name":"wasstadc-pris"}],[17891329,{"idx":1,"name":"city-port-stain-02","tpage_name":"ctyport-vis-shrub"}],[62717973,{"idx":21,"name":"cguardgame-shoebottom","tpage_name":"ctypesa-pris"}],[49020993,{"idx":65,"name":"sewer-brick-roof-03","tpage_name":"sewe-vis-tfrag"}],[79495186,{"idx":18,"name":"des-mount-02","tpage_name":"wasintro-vis-tfrag"}],[81985546,{"idx":10,"name":"wstlander-01-shoetop","tpage_name":"wasstadc-pris"}],[17891328,{"idx":0,"name":"city-port-stain-01","tpage_name":"ctyport-vis-shrub"}],[62717972,{"idx":20,"name":"cguardgame-scarf","tpage_name":"ctypesa-pris"}],[49020992,{"idx":64,"name":"sewer-small-light-01","tpage_name":"sewe-vis-tfrag"}],[17825803,{"idx":11,"name":"mechdax-eye","tpage_name":"ctyport-vis-pris"}],[458785,{"idx":33,"name":"gun-yellow-mag","tpage_name":"level-default-pris"}],[62652447,{"idx":31,"name":"citn-allhair","tpage_name":"ctypepa-pris"}],[35389651,{"idx":211,"name":"klever-shoe","tpage_name":"introcst-pris"}],[76480591,{"idx":79,"name":"jakc-waistband2","tpage_name":"freehq-pris"}],[17563660,{"idx":12,"name":"hiphog-exterior-yellow","tpage_name":"ctyport-sprite"}],[11337760,{"idx":32,"name":"cityslumc-grass","tpage_name":"ctyslumc-vis-shrub"}],[11403303,{"idx":39,"name":"common-black","tpage_name":"ctyslumc-vis-tfrag"}],[8912943,{"idx":47,"name":"city-fort-grey-trim","tpage_name":"ctysluma-vis-tfrag"}],[35389650,{"idx":210,"name":"klever-horn","tpage_name":"introcst-pris"}],[76480590,{"idx":78,"name":"jakc-scarf","tpage_name":"freehq-pris"}],[17563659,{"idx":11,"name":"hiphog-exterior-purple-on","tpage_name":"ctyport-sprite"}],[11337759,{"idx":31,"name":"ctyslumc-decal-02","tpage_name":"ctyslumc-vis-shrub"}],[35389649,{"idx":209,"name":"klever-hand","tpage_name":"introcst-pris"}],[76480589,{"idx":77,"name":"jakc-lens","tpage_name":"freehq-pris"}],[17563658,{"idx":10,"name":"hiphog-exterior-purple","tpage_name":"ctyport-sprite"}],[35389648,{"idx":208,"name":"klever-gunmetal-05","tpage_name":"introcst-pris"}],[76480588,{"idx":76,"name":"jakc-gogglemetal","tpage_name":"freehq-pris"}],[35389647,{"idx":207,"name":"klever-gunmetal-04","tpage_name":"introcst-pris"}],[76480587,{"idx":75,"name":"jakc-chestplate-straps","tpage_name":"freehq-pris"}],[35389640,{"idx":200,"name":"klever-armor-01","tpage_name":"introcst-pris"}],[35389639,{"idx":199,"name":"klever-handwrap","tpage_name":"introcst-pris"}],[75890702,{"idx":14,"name":"onin-cage-top","tpage_name":"onintent-tfrag"}],[60948542,{"idx":62,"name":"fora-citywall-frame","tpage_name":"minec-vis-tfrag"}],[16908294,{"idx":6,"name":"city-farm-stone-border-02","tpage_name":"ctyfarmb-vis-tfrag"}],[117637217,{"idx":97,"name":"jakchires-eyelid","tpage_name":"destrack-pris"}],[104857605,{"idx":5,"name":"daxterarm","tpage_name":"oasiscst-pris"}],[60620885,{"idx":85,"name":"mine-pipe-metal-01","tpage_name":"minea-vis-pris"}],[35651622,{"idx":38,"name":"samos-finger-01","tpage_name":"introcst-pris2"}],[79364240,{"idx":144,"name":"monk-jewelry","tpage_name":"wasseem-pris"}],[16842762,{"idx":10,"name":"city-farm-flowers","tpage_name":"ctyfarmb-vis-shrub"}],[94371911,{"idx":71,"name":"palace-break-spike03","tpage_name":"intpfall-vis-pris"}],[28049423,{"idx":15,"name":"tpal-big-metal-panl01","tpage_name":"intpalrf-tfrag"}],[35651621,{"idx":37,"name":"samos-face","tpage_name":"introcst-pris2"}],[79364239,{"idx":143,"name":"monk-hand","tpage_name":"wasseem-pris"}],[120455179,{"idx":11,"name":"fora-rock-small","tpage_name":"forestx-vis-tfrag"}],[16842761,{"idx":9,"name":"city-farm-veg-chilberry","tpage_name":"ctyfarmb-vis-shrub"}],[67829762,{"idx":2,"name":"holo-line","tpage_name":"freehq-sprite"}],[589870,{"idx":46,"name":"map-guard-frustum","tpage_name":"level-default-minimap"}],[11796490,{"idx":10,"name":"city-ind-door-top-01","tpage_name":"ctyinda-vis-tfrag"}],[35651619,{"idx":35,"name":"samos-eye","tpage_name":"introcst-pris2"}],[79364237,{"idx":141,"name":"monk-hair-a","tpage_name":"wasseem-pris"}],[120455177,{"idx":9,"name":"forx-citywall-frame","tpage_name":"forestx-vis-tfrag"}],[16842759,{"idx":7,"name":"city-farm-blotch-withstreaks-01","tpage_name":"ctyfarmb-vis-shrub"}],[94371908,{"idx":68,"name":"palace-break-spanel-5","tpage_name":"intpfall-vis-pris"}],[28049420,{"idx":12,"name":"tpal-wind-fram-01","tpage_name":"intpalrf-tfrag"}],[67829760,{"idx":0,"name":"vinroom-tv-circle","tpage_name":"freehq-sprite"}],[589869,{"idx":45,"name":"mini-map-icons","tpage_name":"level-default-minimap"}],[11796489,{"idx":9,"name":"city-ind-wall-base-03","tpage_name":"ctyinda-vis-tfrag"}],[35651618,{"idx":34,"name":"samos-ear","tpage_name":"introcst-pris2"}],[79364236,{"idx":140,"name":"monk-goldjewel","tpage_name":"wasseem-pris"}],[120455176,{"idx":8,"name":"forx-mount-glass01","tpage_name":"forestx-vis-tfrag"}],[16842758,{"idx":6,"name":"city-farm-cattail-grass","tpage_name":"ctyfarmb-vis-shrub"}],[94371907,{"idx":67,"name":"palace-break-spanel-4","tpage_name":"intpfall-vis-pris"}],[28049419,{"idx":11,"name":"tpal-wind-glass-01","tpage_name":"intpalrf-tfrag"}],[589868,{"idx":44,"name":"minimap-mask","tpage_name":"level-default-minimap"}],[11796488,{"idx":8,"name":"city-ind-door-large-01","tpage_name":"ctyinda-vis-tfrag"}],[35651617,{"idx":33,"name":"samos-diaper","tpage_name":"introcst-pris2"}],[112394267,{"idx":27,"name":"intcept-teeth01","tpage_name":"desrescg-pris"}],[106168367,{"idx":47,"name":"mined_red_cgtd","tpage_name":"mined-tfrag"}],[118620167,{"idx":7,"name":"jakc-scarf","tpage_name":"ljkcdmkl-pris"}],[56950886,{"idx":102,"name":"common_sandstone_pill01","tpage_name":"waspala-tfrag"}],[79364235,{"idx":139,"name":"monk-goggles","tpage_name":"wasseem-pris"}],[120455175,{"idx":7,"name":"sewer-metal-block-04","tpage_name":"forestx-vis-tfrag"}],[16842757,{"idx":5,"name":"city-farm-wall-vine","tpage_name":"ctyfarmb-vis-shrub"}],[28049418,{"idx":10,"name":"tpal-panl02","tpage_name":"intpalrf-tfrag"}],[589867,{"idx":43,"name":"hud-transparent-01","tpage_name":"level-default-minimap"}],[11796487,{"idx":7,"name":"city-ind-wall-band-plain-01","tpage_name":"ctyinda-vis-tfrag"}],[35651616,{"idx":32,"name":"samos-arm","tpage_name":"introcst-pris2"}],[79364234,{"idx":138,"name":"monk-goggleleather","tpage_name":"wasseem-pris"}],[120455174,{"idx":6,"name":"sewer-metal-block-06","tpage_name":"forestx-vis-tfrag"}],[16842756,{"idx":4,"name":"city-farm-ground-stain-01","tpage_name":"ctyfarmb-vis-shrub"}],[94371905,{"idx":65,"name":"palace-break-spanel-2","tpage_name":"intpfall-vis-pris"}],[28049417,{"idx":9,"name":"tpal-beam-red-yellow01","tpage_name":"intpalrf-tfrag"}],[589866,{"idx":42,"name":"hud-timerboard-01","tpage_name":"level-default-minimap"}],[11796486,{"idx":6,"name":"city-ind-wall-band-vent-01","tpage_name":"ctyinda-vis-tfrag"}],[35651615,{"idx":31,"name":"environment-oldmetal","tpage_name":"introcst-pris2"}],[112394265,{"idx":25,"name":"intcept-gun01","tpage_name":"desrescg-pris"}],[118620165,{"idx":5,"name":"jakc-gogglemetal","tpage_name":"ljkcdmkl-pris"}],[56950884,{"idx":100,"name":"common_sandstone_ground01","tpage_name":"waspala-tfrag"}],[79364233,{"idx":137,"name":"monk-gem","tpage_name":"wasseem-pris"}],[120455173,{"idx":5,"name":"sewer-concrete-edge-02","tpage_name":"forestx-vis-tfrag"}],[16842755,{"idx":3,"name":"city-farm-stain-02","tpage_name":"ctyfarmb-vis-shrub"}],[94371904,{"idx":64,"name":"palace-break-spanel-1","tpage_name":"intpfall-vis-pris"}],[28049416,{"idx":8,"name":"tpal-beam-red01","tpage_name":"intpalrf-tfrag"}],[589865,{"idx":41,"name":"hud-scoreboard-01","tpage_name":"level-default-minimap"}],[11796485,{"idx":5,"name":"city-ind-wall-01","tpage_name":"ctyinda-vis-tfrag"}],[35651614,{"idx":30,"name":"bam-hairhilite","tpage_name":"introcst-pris2"}],[112394264,{"idx":24,"name":"intcept-base-patern02","tpage_name":"desrescg-pris"}],[106168364,{"idx":44,"name":"minc-train-pipe-gen-01","tpage_name":"mined-tfrag"}],[118620164,{"idx":4,"name":"jakc-chestplate-straps","tpage_name":"ljkcdmkl-pris"}],[56950883,{"idx":99,"name":"common_sandstone_taper01","tpage_name":"waspala-tfrag"}],[79364232,{"idx":136,"name":"monk-finger","tpage_name":"wasseem-pris"}],[16842754,{"idx":2,"name":"city-farm-stain-01","tpage_name":"ctyfarmb-vis-shrub"}],[94371903,{"idx":63,"name":"palace-break-sdanger2","tpage_name":"intpfall-vis-pris"}],[28049415,{"idx":7,"name":"tpal-beam01","tpage_name":"intpalrf-tfrag"}],[35651613,{"idx":29,"name":"bam-eyelight","tpage_name":"introcst-pris2"}],[112394263,{"idx":23,"name":"intcept-base-patern01","tpage_name":"desrescg-pris"}],[106168363,{"idx":43,"name":"minc-blue-paint-rust01","tpage_name":"mined-tfrag"}],[118620163,{"idx":3,"name":"jakc-armor","tpage_name":"ljkcdmkl-pris"}],[56950882,{"idx":98,"name":"waspala-lowres-desert-mount-01","tpage_name":"waspala-tfrag"}],[16842753,{"idx":1,"name":"city-farm-shrub-overhang-02","tpage_name":"ctyfarmb-vis-shrub"}],[94371902,{"idx":62,"name":"palace-break-sdanger1","tpage_name":"intpfall-vis-pris"}],[28049414,{"idx":6,"name":"tpal-piller-caps02","tpage_name":"intpalrf-tfrag"}],[35651612,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"introcst-pris2"}],[112394262,{"idx":22,"name":"intcept-base-green01","tpage_name":"desrescg-pris"}],[106168362,{"idx":42,"name":"minc-safe-plate-02","tpage_name":"mined-tfrag"}],[118620162,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljkcdmkl-pris"}],[16842752,{"idx":0,"name":"city-farm-shrub-overhang","tpage_name":"ctyfarmb-vis-shrub"}],[94371901,{"idx":61,"name":"palace-break-scabel1","tpage_name":"intpfall-vis-pris"}],[28049413,{"idx":5,"name":"tpal-horiz-trim01","tpage_name":"intpalrf-tfrag"}],[49283154,{"idx":82,"name":"cguardgame-shoebottom","tpage_name":"sewd-vis-pris"}],[74186754,{"idx":2,"name":"sew-gun-drum-01","tpage_name":"sewh-vis-pris"}],[49283152,{"idx":80,"name":"cguardgame-metallight-01small","tpage_name":"sewd-vis-pris"}],[74186752,{"idx":0,"name":"sew-gun-barrel-01","tpage_name":"sewh-vis-pris"}],[16777221,{"idx":5,"name":"yak-horn","tpage_name":"ctyfarmb-vis-pris"}],[11796501,{"idx":21,"name":"city-green-pipe01","tpage_name":"ctyinda-vis-tfrag"}],[16777220,{"idx":4,"name":"yak-eye","tpage_name":"ctyfarmb-vis-pris"}],[11796500,{"idx":20,"name":"city-ind-bigpipe-siding","tpage_name":"ctyinda-vis-tfrag"}],[49283150,{"idx":78,"name":"cguardgame-metaledark-02","tpage_name":"sewd-vis-pris"}],[16777219,{"idx":3,"name":"bam-eyelight","tpage_name":"ctyfarmb-vis-pris"}],[11796499,{"idx":19,"name":"city-bigpipe-main-02","tpage_name":"ctyinda-vis-tfrag"}],[8060959,{"idx":31,"name":"baron-propoganda-logo","tpage_name":"ctywide-sprite"}],[35389473,{"idx":33,"name":"daxter-orange","tpage_name":"introcst-pris"}],[41615373,{"idx":13,"name":"gekko-nails","tpage_name":"wascitya-vis-pris"}],[91291692,{"idx":44,"name":"gun-guncase-side-01","tpage_name":"gungame-vis-tfrag"}],[41549826,{"idx":2,"name":"fora-water-dest","tpage_name":"wascitya-vis-water"}],[35389468,{"idx":28,"name":"cguard1-shouldershield","tpage_name":"introcst-pris"}],[41615368,{"idx":8,"name":"gekko-fingers","tpage_name":"wascitya-vis-pris"}],[48889930,{"idx":74,"name":"sewer-metal-edge-01","tpage_name":"sewd-vis-tfrag"}],[71303170,{"idx":2,"name":"environment-oldmetal","tpage_name":"ldamsig-pris2"}],[67829763,{"idx":3,"name":"screen-00","tpage_name":"freehq-sprite"}],[16187392,{"idx":0,"name":"city-farm-aquaduct-glass-01","tpage_name":"ctyfarma-vis-water"}],[8716312,{"idx":24,"name":"baron-neon-cheek-b","tpage_name":"ctysluma-sprite"}],[61014036,{"idx":20,"name":"minc-blue-yel-paint-safe-rust04","tpage_name":"minec-vis-shrub"}],[52297776,{"idx":48,"name":"freehq-wal-plate02","tpage_name":"freehq-tfrag"}],[67239936,{"idx":0,"name":"common-black","tpage_name":"vinroom-vis-tfrag"}],[48562236,{"idx":60,"name":"jakc-wristband-a2","tpage_name":"sewa-vis-pris"}],[81985579,{"idx":43,"name":"wstlander-02-head","tpage_name":"wasstadc-pris"}],[75759679,{"idx":63,"name":"onin-neck","tpage_name":"onintent-pris"}],[26542198,{"idx":118,"name":"wstd-platform-floor","tpage_name":"wasstada-tfrag"}],[62652418,{"idx":2,"name":"citfat-1-beard","tpage_name":"ctypepa-pris"}],[16121901,{"idx":45,"name":"city-farm-road-blend-to-alpha-01","tpage_name":"ctyfarma-vis-tfrag"}],[26542197,{"idx":117,"name":"wstd-platform-base","tpage_name":"wasstada-tfrag"}],[62652417,{"idx":1,"name":"bam-hairhilite","tpage_name":"ctypepa-pris"}],[16121900,{"idx":44,"name":"citywide-wall-frame","tpage_name":"ctyfarma-vis-tfrag"}],[55115865,{"idx":89,"name":"wascity-steps","tpage_name":"wascityb-vis-tfrag"}],[71303205,{"idx":37,"name":"king-ear","tpage_name":"ldamsig-pris2"}],[55115864,{"idx":88,"name":"wascity-chimney-hires","tpage_name":"wascityb-vis-tfrag"}],[71303204,{"idx":36,"name":"king-clip-02","tpage_name":"ldamsig-pris2"}],[55115863,{"idx":87,"name":"wascity-roof-1","tpage_name":"wascityb-vis-tfrag"}],[71303203,{"idx":35,"name":"king-chest","tpage_name":"ldamsig-pris2"}],[16121886,{"idx":30,"name":"city-farm-rock","tpage_name":"ctyfarma-vis-tfrag"}],[100466689,{"idx":1,"name":"monk-malepants","tpage_name":"wasseem-water"}],[94240789,{"idx":21,"name":"city-lowres-ind-wall-04","tpage_name":"intpfall-vis-tfrag"}],[60620929,{"idx":129,"name":"jakc-skirt","tpage_name":"minea-vis-pris"}],[26542181,{"idx":101,"name":"wstd-stands-ceilingplate","tpage_name":"wasstada-tfrag"}],[16121884,{"idx":28,"name":"city-farm-lamp","tpage_name":"ctyfarma-vis-tfrag"}],[81985555,{"idx":19,"name":"marauder-gun-part","tpage_name":"wasstadc-pris"}],[26542174,{"idx":94,"name":"wstd-stands-plate04","tpage_name":"wasstada-tfrag"}],[55181314,{"idx":2,"name":"common-water-canal","tpage_name":"wascityb-vis-water"}],[16121877,{"idx":21,"name":"city-farm-vegtree-bark-01","tpage_name":"ctyfarma-vis-tfrag"}],[81985554,{"idx":18,"name":"marauder-gun-metal","tpage_name":"wasstadc-pris"}],[26542173,{"idx":93,"name":"wstd-stands-plate05","tpage_name":"wasstada-tfrag"}],[90177601,{"idx":65,"name":"des-cactus-small-02","tpage_name":"desertg-vis-pris"}],[106364941,{"idx":13,"name":"veger-eyelid","tpage_name":"mined-pris2"}],[16121876,{"idx":20,"name":"for-foliage","tpage_name":"ctyfarma-vis-tfrag"}],[26542172,{"idx":92,"name":"wstd-throne-chair01","tpage_name":"wasstada-tfrag"}],[55181312,{"idx":0,"name":"wascity-window-glass-01","tpage_name":"wascityb-vis-water"}],[90177600,{"idx":64,"name":"des-cactus-small-01","tpage_name":"desertg-vis-pris"}],[106364940,{"idx":12,"name":"veger-endpaper","tpage_name":"mined-pris2"}],[16121875,{"idx":19,"name":"city-farm-dirt-mound-01","tpage_name":"ctyfarma-vis-tfrag"}],[60948519,{"idx":39,"name":"minc-crate-02","tpage_name":"minec-vis-tfrag"}],[26542171,{"idx":91,"name":"wstd-spear01","tpage_name":"wasstada-tfrag"}],[90177599,{"idx":63,"name":"des-cactus-needle","tpage_name":"desertg-vis-pris"}],[106364939,{"idx":11,"name":"veger-coatclips","tpage_name":"mined-pris2"}],[55115850,{"idx":74,"name":"wascity-metal-ladder-rung","tpage_name":"wascityb-vis-tfrag"}],[71303190,{"idx":22,"name":"sig-sac","tpage_name":"ldamsig-pris2"}],[16121874,{"idx":18,"name":"city-farm-dirt-small-01","tpage_name":"ctyfarma-vis-tfrag"}],[60948518,{"idx":38,"name":"minb-stone19","tpage_name":"minec-vis-tfrag"}],[26542170,{"idx":90,"name":"wstd-stands-plate03","tpage_name":"wasstada-tfrag"}],[16121873,{"idx":17,"name":"city-farm-dirt-mound-blend-01","tpage_name":"ctyfarma-vis-tfrag"}],[60948517,{"idx":37,"name":"minb-stone-tile","tpage_name":"minec-vis-tfrag"}],[26542169,{"idx":89,"name":"wstd-throne-wall01","tpage_name":"wasstada-tfrag"}],[55115848,{"idx":72,"name":"wascityskeet-clay","tpage_name":"wascityb-vis-tfrag"}],[71303188,{"idx":20,"name":"sig-metal-01","tpage_name":"ldamsig-pris2"}],[16121872,{"idx":16,"name":"city-farm-cart-woodslat-02","tpage_name":"ctyfarma-vis-tfrag"}],[60948516,{"idx":36,"name":"minb-stone20","tpage_name":"minec-vis-tfrag"}],[26542168,{"idx":88,"name":"wstd-throne-arch01","tpage_name":"wasstada-tfrag"}],[16121871,{"idx":15,"name":"city-farm-dirtymetal-01","tpage_name":"ctyfarma-vis-tfrag"}],[60948515,{"idx":35,"name":"minb-stone-edge","tpage_name":"minec-vis-tfrag"}],[26542166,{"idx":86,"name":"wstd-stands-lowall01","tpage_name":"wasstada-tfrag"}],[16121869,{"idx":13,"name":"city-farm-metal-panel-02","tpage_name":"ctyfarma-vis-tfrag"}],[60948513,{"idx":33,"name":"minc-grill-01","tpage_name":"minec-vis-tfrag"}],[26542165,{"idx":85,"name":"wstd-stands-plate02","tpage_name":"wasstada-tfrag"}],[48955405,{"idx":13,"name":"sewer-metal-04","tpage_name":"sewd-vis-shrub"}],[16121868,{"idx":12,"name":"city-farm-metal-panel-01","tpage_name":"ctyfarma-vis-tfrag"}],[60948512,{"idx":32,"name":"minc-yel-paint-wall-01","tpage_name":"minec-vis-tfrag"}],[26542164,{"idx":84,"name":"wstd-scaffold-strut","tpage_name":"wasstada-tfrag"}],[48955404,{"idx":12,"name":"sewer-pipe-02-edge-01","tpage_name":"sewd-vis-shrub"}],[60948511,{"idx":31,"name":"minc-metal-patch-01","tpage_name":"minec-vis-tfrag"}],[26542163,{"idx":83,"name":"wstd-throne-plat02","tpage_name":"wasstada-tfrag"}],[48955403,{"idx":11,"name":"sewer-grate-01","tpage_name":"sewd-vis-shrub"}],[38862877,{"idx":29,"name":"nsta-cave-trim-top","tpage_name":"nsta-vis-tfrag"}],[60948510,{"idx":30,"name":"mina-idol-01","tpage_name":"minec-vis-tfrag"}],[26542162,{"idx":82,"name":"wstd-throne-plat03","tpage_name":"wasstada-tfrag"}],[48955402,{"idx":10,"name":"sewer-pipe-small-02","tpage_name":"sewd-vis-shrub"}],[38862876,{"idx":28,"name":"nsta-cave-trim","tpage_name":"nsta-vis-tfrag"}],[60948509,{"idx":29,"name":"mina-idol-02","tpage_name":"minec-vis-tfrag"}],[26542161,{"idx":81,"name":"wstd-stands-shell02","tpage_name":"wasstada-tfrag"}],[48955401,{"idx":9,"name":"sewer-pipe-rim-02","tpage_name":"sewd-vis-shrub"}],[60948508,{"idx":28,"name":"minc-crm-paint-wall-01","tpage_name":"minec-vis-tfrag"}],[26542160,{"idx":80,"name":"wstd-stands-shell01","tpage_name":"wasstada-tfrag"}],[48955400,{"idx":8,"name":"sewer-pipe-rim-09","tpage_name":"sewd-vis-shrub"}],[55115839,{"idx":63,"name":"city-slum-burning-can","tpage_name":"wascityb-vis-tfrag"}],[71303179,{"idx":11,"name":"sig-glovetop","tpage_name":"ldamsig-pris2"}],[73793539,{"idx":3,"name":"sewer-waterfall-02-g-dest","tpage_name":"sewg-vis-water"}],[60948507,{"idx":27,"name":"minc-blue-paint-rust03","tpage_name":"minec-vis-tfrag"}],[81985540,{"idx":4,"name":"wstlander-01-gunmetal-04","tpage_name":"wasstadc-pris"}],[74514460,{"idx":28,"name":"widow-pod-gun-metal","tpage_name":"sewj-vis-pris"}],[26542159,{"idx":79,"name":"wstd-floor-panel01","tpage_name":"wasstada-tfrag"}],[48955399,{"idx":7,"name":"sewer-pipe-01","tpage_name":"sewd-vis-shrub"}],[55115838,{"idx":62,"name":"common-gray-dark","tpage_name":"wascityb-vis-tfrag"}],[73793538,{"idx":2,"name":"sewer-water-01-g-dest","tpage_name":"sewg-vis-water"}],[71303178,{"idx":10,"name":"sig-glove","tpage_name":"ldamsig-pris2"}],[48627792,{"idx":80,"name":"sewer-metal-edge-01","tpage_name":"sewb-vis-tfrag"}],[60948506,{"idx":26,"name":"minc-blue-paint-02","tpage_name":"minec-vis-tfrag"}],[81985539,{"idx":3,"name":"wstlander-01-gunmetal-03","tpage_name":"wasstadc-pris"}],[74514459,{"idx":27,"name":"widow-dull-inards","tpage_name":"sewj-vis-pris"}],[26542158,{"idx":78,"name":"wstd-stands-shell","tpage_name":"wasstada-tfrag"}],[48955398,{"idx":6,"name":"sewer-plate-05","tpage_name":"sewd-vis-shrub"}],[38862872,{"idx":24,"name":"nsta-cave-mites","tpage_name":"nsta-vis-tfrag"}],[262292,{"idx":148,"name":"rainbow-halo","tpage_name":"level-default-sprite"}],[48627791,{"idx":79,"name":"sewer-mantel-02","tpage_name":"sewb-vis-tfrag"}],[60948505,{"idx":25,"name":"minc-plate-01","tpage_name":"minec-vis-tfrag"}],[60948504,{"idx":24,"name":"minc-stone","tpage_name":"minec-vis-tfrag"}],[81985537,{"idx":1,"name":"wstlander-01-gunmetal-01","tpage_name":"wasstadc-pris"}],[74514457,{"idx":25,"name":"squid-bulb-sm","tpage_name":"sewj-vis-pris"}],[26542156,{"idx":76,"name":"wstd-stands-plate01","tpage_name":"wasstada-tfrag"}],[48955396,{"idx":4,"name":"sew-jump-pad-grate","tpage_name":"sewd-vis-shrub"}],[73924619,{"idx":11,"name":"sew-moving-stepb-grate","tpage_name":"sewg-vis-shrub"}],[38862870,{"idx":22,"name":"nsta-cave-teeth","tpage_name":"nsta-vis-tfrag"}],[60948503,{"idx":23,"name":"minc-rust-pipe-03","tpage_name":"minec-vis-tfrag"}],[81985536,{"idx":0,"name":"wstlander-01-eye","tpage_name":"wasstadc-pris"}],[74514456,{"idx":24,"name":"roboguard-shouldershield","tpage_name":"sewj-vis-pris"}],[26542155,{"idx":75,"name":"wstd-canopy","tpage_name":"wasstada-tfrag"}],[48955395,{"idx":3,"name":"sewer-hang-moss-01","tpage_name":"sewd-vis-shrub"}],[73924618,{"idx":10,"name":"sewer-pipe-small-02","tpage_name":"sewg-vis-shrub"}],[71434258,{"idx":18,"name":"wstd-fight-plat-lrg-floor-02","tpage_name":"wasstadc-tfrag"}],[38862869,{"idx":21,"name":"nsta-cave-top-platform","tpage_name":"nsta-vis-tfrag"}],[60948502,{"idx":22,"name":"minc-rust-pipe-04","tpage_name":"minec-vis-tfrag"}],[48627787,{"idx":75,"name":"sewer-small-light-01","tpage_name":"sewb-vis-tfrag"}],[60948501,{"idx":21,"name":"minc-train-pipe-01","tpage_name":"minec-vis-tfrag"}],[26542153,{"idx":73,"name":"wstd-floor-panel03","tpage_name":"wasstada-tfrag"}],[48955393,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewd-vis-shrub"}],[73924616,{"idx":8,"name":"sewer-pipe-rim-09","tpage_name":"sewg-vis-shrub"}],[38862867,{"idx":19,"name":"nstab-basekor","tpage_name":"nsta-vis-tfrag"}],[262287,{"idx":143,"name":"lightning-tile","tpage_name":"level-default-sprite"}],[48627786,{"idx":74,"name":"sewer-red-light-02","tpage_name":"sewb-vis-tfrag"}],[60948500,{"idx":20,"name":"minc-light","tpage_name":"minec-vis-tfrag"}],[1114170,{"idx":58,"name":"hud-speaker-full","tpage_name":"progress-minimap"}],[16056330,{"idx":10,"name":"city-farm-flowers","tpage_name":"ctyfarma-vis-shrub"}],[12320790,{"idx":22,"name":"city-ind-grnd-cobl-01","tpage_name":"ctyindb-vis-tfrag"}],[14811150,{"idx":14,"name":"city-sideframe-plain","tpage_name":"ctygenb-vis-tfrag"}],[79364101,{"idx":5,"name":"daxterarm","tpage_name":"wasseem-pris"}],[74383381,{"idx":21,"name":"sewer-pipe-rim-06","tpage_name":"sewj-vis-tfrag"}],[56950861,{"idx":77,"name":"waspala-column-03","tpage_name":"waspala-tfrag"}],[60882974,{"idx":30,"name":"monster-frog-legfront","tpage_name":"mineb-vis-pris"}],[81723448,{"idx":56,"name":"klever-chest","tpage_name":"ljndklev-pris"}],[74252368,{"idx":80,"name":"widow-dull-inards","tpage_name":"sewg-vis-pris"}],[67043331,{"idx":3,"name":"screen-02","tpage_name":"vinroom-sprite"}],[60817431,{"idx":23,"name":"minc-strut-01","tpage_name":"mineb-vis-shrub"}],[49610811,{"idx":59,"name":"sewer-lip-01","tpage_name":"sewf-vis-tfrag"}],[1114169,{"idx":57,"name":"hud-speaker-empty","tpage_name":"progress-minimap"}],[16056329,{"idx":9,"name":"city-farm-veg-chilberry","tpage_name":"ctyfarma-vis-shrub"}],[14811149,{"idx":13,"name":"city-wall-plain","tpage_name":"ctygenb-vis-tfrag"}],[12320789,{"idx":21,"name":"city-ind-redlight","tpage_name":"ctyindb-vis-tfrag"}],[94371883,{"idx":43,"name":"palace-break-glass03","tpage_name":"intpfall-vis-pris"}],[79364100,{"idx":4,"name":"daxter-orange","tpage_name":"wasseem-pris"}],[60882973,{"idx":29,"name":"monster-frog-leg","tpage_name":"mineb-vis-pris"}],[67043330,{"idx":2,"name":"screen-01","tpage_name":"vinroom-sprite"}],[60817430,{"idx":22,"name":"minc-blue-paint-01","tpage_name":"mineb-vis-shrub"}],[49610810,{"idx":58,"name":"sewer-round-02","tpage_name":"sewf-vis-tfrag"}],[1114168,{"idx":56,"name":"hud-sliderframe","tpage_name":"progress-minimap"}],[16056328,{"idx":8,"name":"city-farm-dirt-small-01","tpage_name":"ctyfarma-vis-shrub"}],[14811148,{"idx":12,"name":"city-support-main-01","tpage_name":"ctygenb-vis-tfrag"}],[12320788,{"idx":20,"name":"city-ind-bigpipe-siding-02","tpage_name":"ctyindb-vis-tfrag"}],[94371882,{"idx":42,"name":"palace-break-glass02","tpage_name":"intpfall-vis-pris"}],[79364099,{"idx":3,"name":"daxter-furhilite","tpage_name":"wasseem-pris"}],[74383379,{"idx":19,"name":"sewer-metal-trim-01","tpage_name":"sewj-vis-tfrag"}],[60882972,{"idx":28,"name":"monster-frog-fin","tpage_name":"mineb-vis-pris"}],[67043329,{"idx":1,"name":"screen-00","tpage_name":"vinroom-sprite"}],[60817429,{"idx":21,"name":"minc-blue-paint-rust05","tpage_name":"mineb-vis-shrub"}],[49610809,{"idx":57,"name":"sewer-round-03","tpage_name":"sewf-vis-tfrag"}],[1114167,{"idx":55,"name":"hud-sliderbackground","tpage_name":"progress-minimap"}],[16056327,{"idx":7,"name":"city-farm-blotch-withstreaks-01","tpage_name":"ctyfarma-vis-shrub"}],[14811147,{"idx":11,"name":"city-canal-top","tpage_name":"ctygenb-vis-tfrag"}],[12320787,{"idx":19,"name":"city-ind-support-base","tpage_name":"ctyindb-vis-tfrag"}],[94371881,{"idx":41,"name":"palace-break-glass01","tpage_name":"intpfall-vis-pris"}],[79364098,{"idx":2,"name":"daxter-eyelid","tpage_name":"wasseem-pris"}],[74383378,{"idx":18,"name":"sewer-bolt-side-02","tpage_name":"sewj-vis-tfrag"}],[60882971,{"idx":27,"name":"monster-frog-eye","tpage_name":"mineb-vis-pris"}],[1114166,{"idx":54,"name":"hud-skullgem","tpage_name":"progress-minimap"}],[16056326,{"idx":6,"name":"city-farm-cattail-grass","tpage_name":"ctyfarma-vis-shrub"}],[14811146,{"idx":10,"name":"city-lurkermetal-01","tpage_name":"ctygenb-vis-tfrag"}],[12320786,{"idx":18,"name":"city-ind-bigpipe-siding","tpage_name":"ctyindb-vis-tfrag"}],[94371880,{"idx":40,"name":"palace-break-girder02","tpage_name":"intpfall-vis-pris"}],[81723500,{"idx":108,"name":"jakchires-shoebottom","tpage_name":"ljndklev-pris"}],[79364097,{"idx":1,"name":"bam-hairhilite","tpage_name":"wasseem-pris"}],[74383377,{"idx":17,"name":"sewer-bolt-side-01","tpage_name":"sewj-vis-tfrag"}],[60882970,{"idx":26,"name":"monster-frog-belly","tpage_name":"mineb-vis-pris"}],[1114165,{"idx":53,"name":"hud-silvercup","tpage_name":"progress-minimap"}],[16056325,{"idx":5,"name":"city-farm-wall-vine","tpage_name":"ctyfarma-vis-shrub"}],[14811145,{"idx":9,"name":"city-bridgesupports","tpage_name":"ctygenb-vis-tfrag"}],[12320785,{"idx":17,"name":"city-ind-metal-02","tpage_name":"ctyindb-vis-tfrag"}],[94371879,{"idx":39,"name":"palace-break-girder01","tpage_name":"intpfall-vis-pris"}],[81723499,{"idx":107,"name":"jakchires-precarmor-01","tpage_name":"ljndklev-pris"}],[48562255,{"idx":79,"name":"jakchires-precarmor-01","tpage_name":"sewa-vis-pris"}],[67239955,{"idx":19,"name":"vin-monitor-rim-04","tpage_name":"vinroom-vis-tfrag"}],[52297795,{"idx":67,"name":"freehq-wal-tilem02","tpage_name":"freehq-tfrag"}],[57278515,{"idx":51,"name":"metalflut-wrap","tpage_name":"waswide-vis-pris"}],[79364096,{"idx":0,"name":"bam-eyelight","tpage_name":"wasseem-pris"}],[60882969,{"idx":25,"name":"monster-frog-back","tpage_name":"mineb-vis-pris"}],[1114164,{"idx":52,"name":"hud-screen-uparrow","tpage_name":"progress-minimap"}],[16056324,{"idx":4,"name":"city-farm-ground-stain-01","tpage_name":"ctyfarma-vis-shrub"}],[14811144,{"idx":8,"name":"city-railing","tpage_name":"ctygenb-vis-tfrag"}],[12320784,{"idx":16,"name":"city-ind-wall-noisy-01","tpage_name":"ctyindb-vis-tfrag"}],[94371878,{"idx":38,"name":"palace-break-floor02","tpage_name":"intpfall-vis-pris"}],[75890751,{"idx":63,"name":"onin-tent-wood-posts","tpage_name":"onintent-tfrag"}],[81723498,{"idx":106,"name":"jakchires-pants","tpage_name":"ljndklev-pris"}],[48562254,{"idx":78,"name":"jakchires-pants","tpage_name":"sewa-vis-pris"}],[67239954,{"idx":18,"name":"vin-monitor-rim-02","tpage_name":"vinroom-vis-tfrag"}],[52297794,{"idx":66,"name":"freehq-wal-tilem06","tpage_name":"freehq-tfrag"}],[57278514,{"idx":50,"name":"metalflut-skin-02","tpage_name":"waswide-vis-pris"}],[60882968,{"idx":24,"name":"bam-eyelight","tpage_name":"mineb-vis-pris"}],[1114163,{"idx":51,"name":"hud-screen-lftrt-arrow","tpage_name":"progress-minimap"}],[16056323,{"idx":3,"name":"city-farm-stain-02","tpage_name":"ctyfarma-vis-shrub"}],[14811143,{"idx":7,"name":"city-bridgeseam","tpage_name":"ctygenb-vis-tfrag"}],[12320783,{"idx":15,"name":"city-ind-wall-noisy-border-01","tpage_name":"ctyindb-vis-tfrag"}],[94371877,{"idx":37,"name":"palace-break-floor01","tpage_name":"intpfall-vis-pris"}],[103088137,{"idx":9,"name":"des-pinetree-leaf-01","tpage_name":"desertc-vis-shrub"}],[75890750,{"idx":62,"name":"onin-tent-patch2","tpage_name":"onintent-tfrag"}],[81723497,{"idx":105,"name":"jakchires-lightbrownspat","tpage_name":"ljndklev-pris"}],[48562253,{"idx":77,"name":"jakchires-lightbrownspat","tpage_name":"sewa-vis-pris"}],[67239953,{"idx":17,"name":"vin-monitor-rim","tpage_name":"vinroom-vis-tfrag"}],[52297793,{"idx":65,"name":"freehq-wal-tilem05","tpage_name":"freehq-tfrag"}],[57278513,{"idx":49,"name":"metalflut-skin-01","tpage_name":"waswide-vis-pris"}],[60882967,{"idx":23,"name":"minc-blue-paint-rust04","tpage_name":"mineb-vis-pris"}],[1114162,{"idx":50,"name":"hud-screen-downarrow","tpage_name":"progress-minimap"}],[16056322,{"idx":2,"name":"city-farm-stain-01","tpage_name":"ctyfarma-vis-shrub"}],[14811142,{"idx":6,"name":"city-bridge-walk","tpage_name":"ctygenb-vis-tfrag"}],[12320782,{"idx":14,"name":"city-ind-wall-noisy-05","tpage_name":"ctyindb-vis-tfrag"}],[94371876,{"idx":36,"name":"palace-break-door","tpage_name":"intpfall-vis-pris"}],[103088136,{"idx":8,"name":"des-pinetree-leaf-02","tpage_name":"desertc-vis-shrub"}],[75890749,{"idx":61,"name":"onin-tent-patch1","tpage_name":"onintent-tfrag"}],[81723496,{"idx":104,"name":"jakchires-leatherpouch","tpage_name":"ljndklev-pris"}],[48562252,{"idx":76,"name":"jakchires-leatherpouch","tpage_name":"sewa-vis-pris"}],[67239952,{"idx":16,"name":"vin-handle-01","tpage_name":"vinroom-vis-tfrag"}],[52297792,{"idx":64,"name":"freehq-pipe03","tpage_name":"freehq-tfrag"}],[57278512,{"idx":48,"name":"metalflut-saddleseat","tpage_name":"waswide-vis-pris"}],[1114161,{"idx":49,"name":"hud-piechart","tpage_name":"progress-minimap"}],[16056321,{"idx":1,"name":"city-farm-shrub-overhang-02","tpage_name":"ctyfarma-vis-shrub"}],[14811141,{"idx":5,"name":"city-canal-top2","tpage_name":"ctygenb-vis-tfrag"}],[12320781,{"idx":13,"name":"city-ind-litemetal-01","tpage_name":"ctyindb-vis-tfrag"}],[94371875,{"idx":35,"name":"palace-break-brokenwall","tpage_name":"intpfall-vis-pris"}],[103088135,{"idx":7,"name":"des-sand-grass-01","tpage_name":"desertc-vis-shrub"}],[75890748,{"idx":60,"name":"onin-tent-base-patch1","tpage_name":"onintent-tfrag"}],[81723495,{"idx":103,"name":"jakchires-jacket","tpage_name":"ljndklev-pris"}],[48562251,{"idx":75,"name":"jakchires-jacket","tpage_name":"sewa-vis-pris"}],[67239951,{"idx":15,"name":"vin-floor-symbol","tpage_name":"vinroom-vis-tfrag"}],[52297791,{"idx":63,"name":"freehq-gray-metal-disc08","tpage_name":"freehq-tfrag"}],[57278511,{"idx":47,"name":"metalflut-saddlehang","tpage_name":"waswide-vis-pris"}],[1114160,{"idx":48,"name":"hud-orb","tpage_name":"progress-minimap"}],[16056320,{"idx":0,"name":"city-farm-shrub-overhang","tpage_name":"ctyfarma-vis-shrub"}],[14811140,{"idx":4,"name":"city-bridge-ends","tpage_name":"ctygenb-vis-tfrag"}],[12320780,{"idx":12,"name":"city-ind-wall-base-03","tpage_name":"ctyindb-vis-tfrag"}],[94371874,{"idx":34,"name":"palace-break-bigwall08","tpage_name":"intpfall-vis-pris"}],[75890747,{"idx":59,"name":"onin-tent-base","tpage_name":"onintent-tfrag"}],[81723494,{"idx":102,"name":"jakchires-horn","tpage_name":"ljndklev-pris"}],[48562250,{"idx":74,"name":"jakchires-horn","tpage_name":"sewa-vis-pris"}],[67239950,{"idx":14,"name":"vin-floor-04b","tpage_name":"vinroom-vis-tfrag"}],[52297790,{"idx":62,"name":"freehq-pipe04","tpage_name":"freehq-tfrag"}],[57278510,{"idx":46,"name":"metalflut-saddle","tpage_name":"waswide-vis-pris"}],[15990805,{"idx":21,"name":"city-farm-veg-leaf-1","tpage_name":"ctyfarma-vis-pris"}],[15990791,{"idx":7,"name":"city-farm-veg-green-1","tpage_name":"ctyfarma-vis-pris"}],[14745611,{"idx":11,"name":"city-wall-decal-01","tpage_name":"ctygenb-vis-shrub"}],[49610774,{"idx":22,"name":"sewer-pipe-rim-08","tpage_name":"sewf-vis-tfrag"}],[60817435,{"idx":27,"name":"minc-yel-paint-rust01","tpage_name":"mineb-vis-shrub"}],[67043335,{"idx":7,"name":"screen-06","tpage_name":"vinroom-sprite"}],[15990790,{"idx":6,"name":"city-farm-veg-cabseed","tpage_name":"ctyfarma-vis-pris"}],[14745610,{"idx":10,"name":"city-stain-window-01","tpage_name":"ctygenb-vis-shrub"}],[60817434,{"idx":26,"name":"min-rat-mesh-01","tpage_name":"mineb-vis-shrub"}],[67043334,{"idx":6,"name":"screen-05","tpage_name":"vinroom-sprite"}],[15990789,{"idx":5,"name":"city-farm-veg-cableaf","tpage_name":"ctyfarma-vis-pris"}],[14745609,{"idx":9,"name":"city-stain-wall-01","tpage_name":"ctygenb-vis-shrub"}],[49610772,{"idx":20,"name":"sewer-metal-block-01","tpage_name":"sewf-vis-tfrag"}],[60817433,{"idx":25,"name":"mine-moving-plat-girder","tpage_name":"mineb-vis-shrub"}],[67043333,{"idx":5,"name":"screen-04","tpage_name":"vinroom-sprite"}],[49610813,{"idx":61,"name":"sewer-round-01","tpage_name":"sewf-vis-tfrag"}],[15990788,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"ctyfarma-vis-pris"}],[14745608,{"idx":8,"name":"city-railing","tpage_name":"ctygenb-vis-shrub"}],[12255248,{"idx":16,"name":"city-port-bigpipe-ring-side","tpage_name":"ctyindb-vis-shrub"}],[60817432,{"idx":24,"name":"mine-moving-step-top-lod02","tpage_name":"mineb-vis-shrub"}],[67043332,{"idx":4,"name":"screen-03","tpage_name":"vinroom-sprite"}],[15990787,{"idx":3,"name":"airlock-door-metal2","tpage_name":"ctyfarma-vis-pris"}],[14745607,{"idx":7,"name":"city-metalrim-01","tpage_name":"ctygenb-vis-shrub"}],[12255247,{"idx":15,"name":"city-wire","tpage_name":"ctyindb-vis-shrub"}],[49610770,{"idx":18,"name":"sewer-metal-03","tpage_name":"sewf-vis-tfrag"}],[15990786,{"idx":2,"name":"airlock-door-main","tpage_name":"ctyfarma-vis-pris"}],[14745606,{"idx":6,"name":"city-mark-wire","tpage_name":"ctygenb-vis-shrub"}],[12255246,{"idx":14,"name":"city-inda-scorch-small","tpage_name":"ctyindb-vis-shrub"}],[49610769,{"idx":17,"name":"sewer-plate-05","tpage_name":"sewf-vis-tfrag"}],[95879179,{"idx":11,"name":"torn-face","tpage_name":"ltorn-pris2"}],[15990785,{"idx":1,"name":"airlock-door-cog","tpage_name":"ctyfarma-vis-pris"}],[14745605,{"idx":5,"name":"city-ground-stain-01","tpage_name":"ctygenb-vis-shrub"}],[12255245,{"idx":13,"name":"city-inda-scorch-big","tpage_name":"ctyindb-vis-shrub"}],[49610768,{"idx":16,"name":"sewer-pipe-rim-06","tpage_name":"sewf-vis-tfrag"}],[95879178,{"idx":10,"name":"torn-eyelid","tpage_name":"ltorn-pris2"}],[15990784,{"idx":0,"name":"airlock-door-bolt","tpage_name":"ctyfarma-vis-pris"}],[14745604,{"idx":4,"name":"city-dirt-to-wall","tpage_name":"ctygenb-vis-shrub"}],[12255244,{"idx":12,"name":"city-ind-overlay-bullethole-a","tpage_name":"ctyindb-vis-shrub"}],[49610767,{"idx":15,"name":"sewer-pipe-rim-01","tpage_name":"sewf-vis-tfrag"}],[95879177,{"idx":9,"name":"torn-eye","tpage_name":"ltorn-pris2"}],[60817428,{"idx":20,"name":"minc-yel-safe-paint-rust01","tpage_name":"mineb-vis-shrub"}],[67043328,{"idx":0,"name":"piss-puddle","tpage_name":"vinroom-sprite"}],[49610808,{"idx":56,"name":"sewer-bolt-side-02","tpage_name":"sewf-vis-tfrag"}],[21299212,{"idx":12,"name":"vehicle-dash-01","tpage_name":"wasall-pris"}],[15925252,{"idx":4,"name":"city-farm-road-end-blend-to-alpha","tpage_name":"ctyfarma-vis-alpha"}],[14680072,{"idx":8,"name":"jakc-scarfhanging","tpage_name":"ctygenb-vis-pris"}],[1114219,{"idx":107,"name":"wascity-04","tpage_name":"progress-minimap"}],[14811199,{"idx":63,"name":"city-metal-orange","tpage_name":"ctygenb-vis-tfrag"}],[12320839,{"idx":71,"name":"city-port-bigpipe-ring-side","tpage_name":"ctyindb-vis-tfrag"}],[21299211,{"idx":11,"name":"vehicle-cushion-01","tpage_name":"wasall-pris"}],[15925251,{"idx":3,"name":"city-farm-road-blend-to-alpha-01","tpage_name":"ctyfarma-vis-alpha"}],[1114218,{"idx":106,"name":"wascity-03","tpage_name":"progress-minimap"}],[14811198,{"idx":62,"name":"city-metal-doorframe1","tpage_name":"ctygenb-vis-tfrag"}],[12320838,{"idx":70,"name":"city-port-cable-cylinder-01","tpage_name":"ctyindb-vis-tfrag"}],[21299210,{"idx":10,"name":"vehicle-cap-pin-01","tpage_name":"wasall-pris"}],[15925250,{"idx":2,"name":"city-farm-road-01","tpage_name":"ctyfarma-vis-alpha"}],[1114217,{"idx":105,"name":"wascity-02","tpage_name":"progress-minimap"}],[14811197,{"idx":61,"name":"city-dark-grey-plain","tpage_name":"ctygenb-vis-tfrag"}],[12320837,{"idx":69,"name":"t-citywide-met-bm-red-strp01","tpage_name":"ctyindb-vis-tfrag"}],[21299209,{"idx":9,"name":"vehicle-brace-pipe-01","tpage_name":"wasall-pris"}],[15925249,{"idx":1,"name":"city-farm-treetop-02","tpage_name":"ctyfarma-vis-alpha"}],[1114216,{"idx":104,"name":"wascity-01","tpage_name":"progress-minimap"}],[14811196,{"idx":60,"name":"city-wall-plain-greyblue","tpage_name":"ctygenb-vis-tfrag"}],[12320836,{"idx":68,"name":"city-ind-panels-scorched","tpage_name":"ctyindb-vis-tfrag"}],[21299208,{"idx":8,"name":"vehicle-body-panel-01","tpage_name":"wasall-pris"}],[15925248,{"idx":0,"name":"city-farm-treetop","tpage_name":"ctyfarma-vis-alpha"}],[14680068,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"ctygenb-vis-pris"}],[1114215,{"idx":103,"name":"desert-04","tpage_name":"progress-minimap"}],[14811195,{"idx":59,"name":"city-wall-greyblue-plain-lowres","tpage_name":"ctygenb-vis-tfrag"}],[12320835,{"idx":67,"name":"city-ind-wall-band-striped-01","tpage_name":"ctyindb-vis-tfrag"}],[17956925,{"idx":61,"name":"city-port-barge-glass","tpage_name":"ctyport-vis-tfrag"}],[35389445,{"idx":5,"name":"cguard1-backmetal","tpage_name":"introcst-pris"}],[8323158,{"idx":86,"name":"ctyslumc-light-blue","tpage_name":"ctywide-vis-tfrag"}],[71630873,{"idx":25,"name":"king-shoebottom","tpage_name":"ldampksm-pris2"}],[35389645,{"idx":205,"name":"klever-gunmetal-02","tpage_name":"introcst-pris"}],[14876674,{"idx":2,"name":"city-window-glass-02","tpage_name":"ctygenb-vis-water"}],[8716317,{"idx":29,"name":"baron-neon-cheek-d-on","tpage_name":"ctysluma-sprite"}],[81657901,{"idx":45,"name":"sig-gun-02","tpage_name":"arenacst-pris2"}],[48496657,{"idx":17,"name":"sew-metal-floor-01","tpage_name":"sewa-vis-tfrag"}],[49741837,{"idx":13,"name":"sew-poison-light","tpage_name":"sewf-vis-pris"}],[35389644,{"idx":204,"name":"klever-gunmetal-01","tpage_name":"introcst-pris"}],[17563653,{"idx":5,"name":"hiphog-exterior-blue-on","tpage_name":"ctyport-sprite"}],[11337753,{"idx":25,"name":"ctyslumc-stain","tpage_name":"ctyslumc-vis-shrub"}],[8847393,{"idx":33,"name":"des-burn-precursor-head-01","tpage_name":"ctysluma-vis-shrub"}],[14876673,{"idx":1,"name":"city-door-window-glass-02","tpage_name":"ctygenb-vis-water"}],[11141133,{"idx":13,"name":"sign-wide-b","tpage_name":"ctyslumc-sprite"}],[8716316,{"idx":28,"name":"baron-neon-cheek-d","tpage_name":"ctysluma-sprite"}],[81657900,{"idx":44,"name":"sig-gun-01","tpage_name":"arenacst-pris2"}],[48496656,{"idx":16,"name":"sewer-metal-floor-01","tpage_name":"sewa-vis-tfrag"}],[49741836,{"idx":12,"name":"sewer-screw-02","tpage_name":"sewf-vis-pris"}],[35389643,{"idx":203,"name":"klever-bolt","tpage_name":"introcst-pris"}],[17563652,{"idx":4,"name":"hiphog-exterior-blue","tpage_name":"ctyport-sprite"}],[8847392,{"idx":32,"name":"des-burn-precursor-01-bottom","tpage_name":"ctysluma-vis-shrub"}],[14876672,{"idx":0,"name":"city-window-glass-01","tpage_name":"ctygenb-vis-water"}],[11141132,{"idx":12,"name":"sign-wide-a","tpage_name":"ctyslumc-sprite"}],[8716315,{"idx":27,"name":"baron-neon-cheek-c-on","tpage_name":"ctysluma-sprite"}],[81657899,{"idx":43,"name":"sig-glovetop","tpage_name":"arenacst-pris2"}],[74186819,{"idx":67,"name":"squid-drabgun","tpage_name":"sewh-vis-pris"}],[48496655,{"idx":15,"name":"sewer-metal-floor-02","tpage_name":"sewa-vis-tfrag"}],[49741835,{"idx":11,"name":"sewer-pipe-rim-07","tpage_name":"sewf-vis-pris"}],[1114243,{"idx":131,"name":"tower-04","tpage_name":"progress-minimap"}],[14811223,{"idx":87,"name":"rub-panels-01","tpage_name":"ctygenb-vis-tfrag"}],[39714823,{"idx":7,"name":"nstab-eggskin","tpage_name":"nstb-vis-shrub"}],[49545259,{"idx":43,"name":"roboguard-headshield","tpage_name":"sewe-vis-pris"}],[1114242,{"idx":130,"name":"tower-03","tpage_name":"progress-minimap"}],[14811222,{"idx":86,"name":"rub-palace-tower-side","tpage_name":"ctygenb-vis-tfrag"}],[39714822,{"idx":6,"name":"nestb-basekor","tpage_name":"nstb-vis-shrub"}],[1114241,{"idx":129,"name":"tower-02","tpage_name":"progress-minimap"}],[14811221,{"idx":85,"name":"rub-beam-gen","tpage_name":"ctygenb-vis-tfrag"}],[1114240,{"idx":128,"name":"tower-01","tpage_name":"progress-minimap"}],[14811220,{"idx":84,"name":"city-burning-can","tpage_name":"ctygenb-vis-tfrag"}],[39714820,{"idx":4,"name":"nsta-transparent","tpage_name":"nstb-vis-shrub"}],[103088132,{"idx":4,"name":"des-shrub-pebbles","tpage_name":"desertc-vis-shrub"}],[94371872,{"idx":32,"name":"palace-break-bigwall06","tpage_name":"intpfall-vis-pris"}],[49545256,{"idx":40,"name":"environment-oldmetal","tpage_name":"sewe-vis-pris"}],[1114239,{"idx":127,"name":"rubble-04","tpage_name":"progress-minimap"}],[14811219,{"idx":83,"name":"t-citywide-met-strp-close","tpage_name":"ctygenb-vis-tfrag"}],[39714819,{"idx":3,"name":"nsta-rock-shrubs","tpage_name":"nstb-vis-shrub"}],[1114237,{"idx":125,"name":"rubble-02","tpage_name":"progress-minimap"}],[14811217,{"idx":81,"name":"citywide-pillar","tpage_name":"ctygenb-vis-tfrag"}],[39714817,{"idx":1,"name":"nestb-eggskin","tpage_name":"nstb-vis-shrub"}],[103088129,{"idx":1,"name":"des-rock-shrub-01","tpage_name":"desertc-vis-shrub"}],[94371869,{"idx":29,"name":"palace-break-bigwall03","tpage_name":"intpfall-vis-pris"}],[49545253,{"idx":37,"name":"cguardgame-metaledark-02","tpage_name":"sewe-vis-pris"}],[1114236,{"idx":124,"name":"rubble-01","tpage_name":"progress-minimap"}],[14811216,{"idx":80,"name":"city-metal-pipeside-01","tpage_name":"ctygenb-vis-tfrag"}],[39714816,{"idx":0,"name":"nest-fingerback","tpage_name":"nstb-vis-shrub"}],[49545250,{"idx":34,"name":"cguard1-guntube","tpage_name":"sewe-vis-pris"}],[1114233,{"idx":121,"name":"comb-02","tpage_name":"progress-minimap"}],[14811213,{"idx":77,"name":"tcab-i-redstripe-01","tpage_name":"ctygenb-vis-tfrag"}],[49545249,{"idx":33,"name":"cguard1-gunmetaldark2","tpage_name":"sewe-vis-pris"}],[49545248,{"idx":32,"name":"cguard1-chestplate","tpage_name":"sewe-vis-pris"}],[49545247,{"idx":31,"name":"cguard1-backmetal","tpage_name":"sewe-vis-pris"}],[1114230,{"idx":118,"name":"temple-03","tpage_name":"progress-minimap"}],[14811210,{"idx":74,"name":"tcab-threads-beam-01","tpage_name":"ctygenb-vis-tfrag"}],[1114229,{"idx":117,"name":"temple-02","tpage_name":"progress-minimap"}],[14811209,{"idx":73,"name":"tcab-beam01","tpage_name":"ctygenb-vis-tfrag"}],[12320849,{"idx":81,"name":"city-base-vent-01","tpage_name":"ctyindb-vis-tfrag"}],[17825811,{"idx":19,"name":"mechdax-yellowfur","tpage_name":"ctyport-vis-pris"}],[1114228,{"idx":116,"name":"temple-01","tpage_name":"progress-minimap"}],[14811208,{"idx":72,"name":"city-ind-metal-green-main-side","tpage_name":"ctygenb-vis-tfrag"}],[12320848,{"idx":80,"name":"city-ind-ground-metal","tpage_name":"ctyindb-vis-tfrag"}],[16384000,{"idx":0,"name":"map-ctyfarmb","tpage_name":"ctyfarmb-minimap"}],[8912920,{"idx":24,"name":"city-slum-door-01","tpage_name":"ctysluma-vis-tfrag"}],[49545244,{"idx":28,"name":"bam-eyelight","tpage_name":"sewe-vis-pris"}],[17825810,{"idx":18,"name":"mechdax-solidorangemetal","tpage_name":"ctyport-vis-pris"}],[1114227,{"idx":115,"name":"volcano-04","tpage_name":"progress-minimap"}],[14811207,{"idx":71,"name":"city-outpostwall-strip","tpage_name":"ctygenb-vis-tfrag"}],[12320847,{"idx":79,"name":"rub-beam-gen","tpage_name":"ctyindb-vis-tfrag"}],[49545243,{"idx":27,"name":"power-switch-06","tpage_name":"sewe-vis-pris"}],[17825809,{"idx":17,"name":"mechdax-orange2yel-metal","tpage_name":"ctyport-vis-pris"}],[1114226,{"idx":114,"name":"volcano-03","tpage_name":"progress-minimap"}],[14811206,{"idx":70,"name":"t-citywide-met-strp01","tpage_name":"ctygenb-vis-tfrag"}],[12320846,{"idx":78,"name":"city-ind-metal-09","tpage_name":"ctyindb-vis-tfrag"}],[49545242,{"idx":26,"name":"power-switch-05","tpage_name":"sewe-vis-pris"}],[17825808,{"idx":16,"name":"mechdax-nose","tpage_name":"ctyport-vis-pris"}],[458790,{"idx":38,"name":"jakbsmall-brownleather","tpage_name":"level-default-pris"}],[1114225,{"idx":113,"name":"volcano-02","tpage_name":"progress-minimap"}],[14811205,{"idx":69,"name":"t-citywide-met-pill-01","tpage_name":"ctygenb-vis-tfrag"}],[12320845,{"idx":77,"name":"city-ind-palace-cable-section","tpage_name":"ctyindb-vis-tfrag"}],[49545241,{"idx":25,"name":"power-switch-04","tpage_name":"sewe-vis-pris"}],[17825807,{"idx":15,"name":"mechdax-metallic","tpage_name":"ctyport-vis-pris"}],[62652451,{"idx":35,"name":"citn-allleather","tpage_name":"ctypepa-pris"}],[1114224,{"idx":112,"name":"volcano-01","tpage_name":"progress-minimap"}],[14811204,{"idx":68,"name":"citywide-panels-01","tpage_name":"ctygenb-vis-tfrag"}],[12320844,{"idx":76,"name":"city-ind-palace-cable-section-band","tpage_name":"ctyindb-vis-tfrag"}],[49545240,{"idx":24,"name":"power-switch-03","tpage_name":"sewe-vis-pris"}],[17825806,{"idx":14,"name":"mechdax-leather","tpage_name":"ctyport-vis-pris"}],[62652450,{"idx":34,"name":"citn-alllcotton-wrinkled","tpage_name":"ctypepa-pris"}],[1114223,{"idx":111,"name":"factory-04","tpage_name":"progress-minimap"}],[14811203,{"idx":67,"name":"t-palshaft-dirt-blue-01","tpage_name":"ctygenb-vis-tfrag"}],[12320843,{"idx":75,"name":"city-port-cable-quare-01","tpage_name":"ctyindb-vis-tfrag"}],[49545239,{"idx":23,"name":"power-switch-02","tpage_name":"sewe-vis-pris"}],[17825805,{"idx":13,"name":"mechdax-horn","tpage_name":"ctyport-vis-pris"}],[458787,{"idx":35,"name":"gun-yellowgreen","tpage_name":"level-default-pris"}],[62652449,{"idx":33,"name":"citn-alllcotton-gather","tpage_name":"ctypepa-pris"}],[1114222,{"idx":110,"name":"factory-03","tpage_name":"progress-minimap"}],[14811202,{"idx":66,"name":"city-stonefloor-singlestone","tpage_name":"ctygenb-vis-tfrag"}],[17825804,{"idx":12,"name":"mechdax-finger","tpage_name":"ctyport-vis-pris"}],[458786,{"idx":34,"name":"gun-yellow-mag-end","tpage_name":"level-default-pris"}],[62652448,{"idx":32,"name":"citn-alllcotton","tpage_name":"ctypepa-pris"}],[1114221,{"idx":109,"name":"factory-02","tpage_name":"progress-minimap"}],[14811201,{"idx":65,"name":"city-metalsiding-02","tpage_name":"ctygenb-vis-tfrag"}],[17825802,{"idx":10,"name":"mechdax-ear","tpage_name":"ctyport-vis-pris"}],[458784,{"idx":32,"name":"gun-yellow-glow","tpage_name":"level-default-pris"}],[10420224,{"idx":0,"name":"map-ctyslumb","tpage_name":"ctyslumb-minimap"}],[62652446,{"idx":30,"name":"citn-allflesh","tpage_name":"ctypepa-pris"}],[17825801,{"idx":9,"name":"mechdax-armfur","tpage_name":"ctyport-vis-pris"}],[458783,{"idx":31,"name":"gun-tip","tpage_name":"level-default-pris"}],[62652445,{"idx":29,"name":"citn-alleyebrow","tpage_name":"ctypepa-pris"}],[17825800,{"idx":8,"name":"airlockl-door-metalframe","tpage_name":"ctyport-vis-pris"}],[458782,{"idx":30,"name":"gun-teeth","tpage_name":"level-default-pris"}],[62652444,{"idx":28,"name":"citn-allbuckel","tpage_name":"ctypepa-pris"}],[71368704,{"idx":0,"name":"sig-flatfangs","tpage_name":"ldamsig-water"}],[17825799,{"idx":7,"name":"airlock-door-metal2","tpage_name":"ctyport-vis-pris"}],[458781,{"idx":29,"name":"gun-red-mag","tpage_name":"level-default-pris"}],[62652443,{"idx":27,"name":"citn-1-pants","tpage_name":"ctypepa-pris"}],[17825798,{"idx":6,"name":"airlock-door-main","tpage_name":"ctyport-vis-pris"}],[458780,{"idx":28,"name":"gun-red-glow","tpage_name":"level-default-pris"}],[62652442,{"idx":26,"name":"citichic-vest-01","tpage_name":"ctypepa-pris"}],[17825797,{"idx":5,"name":"airlock-door-cog","tpage_name":"ctyport-vis-pris"}],[458779,{"idx":27,"name":"gun-purple-glow","tpage_name":"level-default-pris"}],[62652441,{"idx":25,"name":"citichic-skirt-01","tpage_name":"ctypepa-pris"}],[1114214,{"idx":102,"name":"desert-03","tpage_name":"progress-minimap"}],[14811194,{"idx":58,"name":"city-wall-bottom-greyblue","tpage_name":"ctygenb-vis-tfrag"}],[12320834,{"idx":66,"name":"city-ind-panels-scorched-03","tpage_name":"ctyindb-vis-tfrag"}],[17825796,{"idx":4,"name":"airlock-door-bolt","tpage_name":"ctyport-vis-pris"}],[458778,{"idx":26,"name":"gun-pump","tpage_name":"level-default-pris"}],[62652440,{"idx":24,"name":"citichic-shirt-01","tpage_name":"ctypepa-pris"}],[1114213,{"idx":101,"name":"desert-02","tpage_name":"progress-minimap"}],[14811193,{"idx":57,"name":"city-door-02","tpage_name":"ctygenb-vis-tfrag"}],[12320833,{"idx":65,"name":"city-ind-panels-scorched-02","tpage_name":"ctyindb-vis-tfrag"}],[1114212,{"idx":100,"name":"desert-01","tpage_name":"progress-minimap"}],[14811192,{"idx":56,"name":"city-wall-bottom","tpage_name":"ctygenb-vis-tfrag"}],[1114208,{"idx":96,"name":"mine-01","tpage_name":"progress-minimap"}],[14811188,{"idx":52,"name":"city-metal-windowframe","tpage_name":"ctygenb-vis-tfrag"}],[14811187,{"idx":51,"name":"city-black","tpage_name":"ctygenb-vis-tfrag"}],[12320827,{"idx":59,"name":"city-ind-ventglow","tpage_name":"ctyindb-vis-tfrag"}],[14811186,{"idx":50,"name":"city-base-vent-01","tpage_name":"ctygenb-vis-tfrag"}],[12320826,{"idx":58,"name":"city-ind-metal-03","tpage_name":"ctyindb-vis-tfrag"}],[14811185,{"idx":49,"name":"city-smallpipe-elbow-01","tpage_name":"ctygenb-vis-tfrag"}],[12320825,{"idx":57,"name":"city-ind-buldge-light-self-illuminated-02","tpage_name":"ctyindb-vis-tfrag"}],[14811184,{"idx":48,"name":"city-smallpipe-ring-01","tpage_name":"ctygenb-vis-tfrag"}],[12320824,{"idx":56,"name":"city-ind-litwindow-TOP-04","tpage_name":"ctyindb-vis-tfrag"}],[14811183,{"idx":47,"name":"city-smallpipe-pipe-01","tpage_name":"ctygenb-vis-tfrag"}],[12320823,{"idx":55,"name":"city-ind-metal-04-hitweak","tpage_name":"ctyindb-vis-tfrag"}],[14811182,{"idx":46,"name":"city-door-03","tpage_name":"ctygenb-vis-tfrag"}],[12320822,{"idx":54,"name":"city-ind-wall-base-top-03","tpage_name":"ctyindb-vis-tfrag"}],[14811181,{"idx":45,"name":"city-metal-doorframe2","tpage_name":"ctygenb-vis-tfrag"}],[14811180,{"idx":44,"name":"city-light-yellow","tpage_name":"ctygenb-vis-tfrag"}],[12320820,{"idx":52,"name":"city-ind-wall-06","tpage_name":"ctyindb-vis-tfrag"}],[1114194,{"idx":82,"name":"stadium-03","tpage_name":"progress-minimap"}],[14811174,{"idx":38,"name":"city-bulb-blend","tpage_name":"ctygenb-vis-tfrag"}],[12320814,{"idx":46,"name":"city-ind-wall-noisy-04","tpage_name":"ctyindb-vis-tfrag"}],[1114193,{"idx":81,"name":"stadium-02","tpage_name":"progress-minimap"}],[14811173,{"idx":37,"name":"common-black","tpage_name":"ctygenb-vis-tfrag"}],[12320813,{"idx":45,"name":"city-ind-door-large-01","tpage_name":"ctyindb-vis-tfrag"}],[1114192,{"idx":80,"name":"stadium-01","tpage_name":"progress-minimap"}],[14811172,{"idx":36,"name":"city-windowframe-03","tpage_name":"ctygenb-vis-tfrag"}],[12320812,{"idx":44,"name":"city-ind-wall-thin-04","tpage_name":"ctyindb-vis-tfrag"}],[1114191,{"idx":79,"name":"sewer-04","tpage_name":"progress-minimap"}],[14811171,{"idx":35,"name":"city-metal-flatpipe-01","tpage_name":"ctygenb-vis-tfrag"}],[12320811,{"idx":43,"name":"city-ind-wall-03","tpage_name":"ctyindb-vis-tfrag"}],[1114189,{"idx":77,"name":"sewer-02","tpage_name":"progress-minimap"}],[14811169,{"idx":33,"name":"city-hole-edge-01","tpage_name":"ctygenb-vis-tfrag"}],[12320809,{"idx":41,"name":"city-ind-litwindow-TOP-03","tpage_name":"ctyindb-vis-tfrag"}],[1114188,{"idx":76,"name":"sewer-01","tpage_name":"progress-minimap"}],[14811168,{"idx":32,"name":"city-outpostwall","tpage_name":"ctygenb-vis-tfrag"}],[12320808,{"idx":40,"name":"city-ind-door-top-01","tpage_name":"ctyindb-vis-tfrag"}],[14811167,{"idx":31,"name":"city-baselight-01","tpage_name":"ctygenb-vis-tfrag"}],[12320807,{"idx":39,"name":"city-ind-wall-07","tpage_name":"ctyindb-vis-tfrag"}],[14811166,{"idx":30,"name":"city-ind-buldge-light-self-illuminated-01","tpage_name":"ctygenb-vis-tfrag"}],[12320806,{"idx":38,"name":"city-ind-wall-base-08","tpage_name":"ctyindb-vis-tfrag"}],[14811165,{"idx":29,"name":"city-ind-buldge-light-01","tpage_name":"ctygenb-vis-tfrag"}],[12320805,{"idx":37,"name":"city-ind-wall-band-vent-01","tpage_name":"ctyindb-vis-tfrag"}],[14811164,{"idx":28,"name":"city-windowframe1","tpage_name":"ctygenb-vis-tfrag"}],[12320804,{"idx":36,"name":"city-ind-wall-base-01","tpage_name":"ctyindb-vis-tfrag"}],[14811163,{"idx":27,"name":"city-bigpipe-ring-02","tpage_name":"ctygenb-vis-tfrag"}],[12320803,{"idx":35,"name":"city-ind-wall-base-02","tpage_name":"ctyindb-vis-tfrag"}],[14811162,{"idx":26,"name":"city-lamp-bluelight","tpage_name":"ctygenb-vis-tfrag"}],[12320802,{"idx":34,"name":"city-ind-wall-base-top-01","tpage_name":"ctyindb-vis-tfrag"}],[14811161,{"idx":25,"name":"city-metal-wall-lamp-02","tpage_name":"ctygenb-vis-tfrag"}],[12320801,{"idx":33,"name":"city-ind-wall-01","tpage_name":"ctyindb-vis-tfrag"}],[14811160,{"idx":24,"name":"city-metal-wall-lamp-01","tpage_name":"ctygenb-vis-tfrag"}],[12320800,{"idx":32,"name":"city-ind-wall-band-plain-01","tpage_name":"ctyindb-vis-tfrag"}],[1114179,{"idx":67,"name":"nest-04","tpage_name":"progress-minimap"}],[14811159,{"idx":23,"name":"city-wall-base-rim-01","tpage_name":"ctygenb-vis-tfrag"}],[12320799,{"idx":31,"name":"city-ind-wall-02","tpage_name":"ctyindb-vis-tfrag"}],[262326,{"idx":182,"name":"leaf3","tpage_name":"level-default-sprite"}],[1114158,{"idx":46,"name":"hud-hoverboard-icon","tpage_name":"progress-minimap"}],[14811138,{"idx":2,"name":"city-metal-canal-smalltop","tpage_name":"ctygenb-vis-tfrag"}],[12320778,{"idx":10,"name":"city-ind-catwalk-coping-01","tpage_name":"ctyindb-vis-tfrag"}],[14745619,{"idx":19,"name":"city-roofmetal-rim","tpage_name":"ctygenb-vis-shrub"}],[15990799,{"idx":15,"name":"city-farm-sprinkle-metal","tpage_name":"ctyfarma-vis-pris"}],[14745618,{"idx":18,"name":"city-base-vent-01","tpage_name":"ctygenb-vis-shrub"}],[15990798,{"idx":14,"name":"city-farm-mar-main","tpage_name":"ctyfarma-vis-pris"}],[14745617,{"idx":17,"name":"city-wall-greyblue-plain-lowres","tpage_name":"ctygenb-vis-shrub"}],[15990797,{"idx":13,"name":"city-farm-mar-leaf-02","tpage_name":"ctyfarma-vis-pris"}],[14745616,{"idx":16,"name":"city-wire","tpage_name":"ctygenb-vis-shrub"}],[15990796,{"idx":12,"name":"city-farm-cabmain","tpage_name":"ctyfarma-vis-pris"}],[14745615,{"idx":15,"name":"city-windowframe-03","tpage_name":"ctygenb-vis-shrub"}],[15990795,{"idx":11,"name":"city-farm-beettree-trunk","tpage_name":"ctyfarma-vis-pris"}],[14745614,{"idx":14,"name":"city-wall-decal-05","tpage_name":"ctygenb-vis-shrub"}],[15990794,{"idx":10,"name":"city-farm-beettree-bulb","tpage_name":"ctyfarma-vis-pris"}],[14745613,{"idx":13,"name":"city-wall-decal-04","tpage_name":"ctygenb-vis-shrub"}],[15990793,{"idx":9,"name":"city-farm-beettree-blossom","tpage_name":"ctyfarma-vis-pris"}],[14745612,{"idx":12,"name":"city-wall-decal-02","tpage_name":"ctygenb-vis-shrub"}],[15990792,{"idx":8,"name":"airlock-door-cog1","tpage_name":"ctyfarma-vis-pris"}],[8388609,{"idx":1,"name":"security-dot-src","tpage_name":"ctywide-vis-water"}],[8323190,{"idx":118,"name":"fac-lo-glass-01","tpage_name":"ctywide-vis-tfrag"}],[8388613,{"idx":5,"name":"searchlight-envmap","tpage_name":"ctywide-vis-water"}],[8388608,{"idx":0,"name":"security-dot-dest","tpage_name":"ctywide-vis-water"}],[96927795,{"idx":51,"name":"jinx-rope-01","tpage_name":"ltornjnx-pris2"}],[99418155,{"idx":43,"name":"jakchires-leatherpouch","tpage_name":"volcanox-pris"}],[111869955,{"idx":3,"name":"stadiumb-hud-lap-02","tpage_name":"wasleapr-minimap"}],[8323170,{"idx":98,"name":"city-lowres-mhcity-wall-02","tpage_name":"ctywide-vis-tfrag"}],[104792129,{"idx":65,"name":"wstlander-02-eye","tpage_name":"desresc-pris"}],[118489109,{"idx":21,"name":"sig-metal-dirty","tpage_name":"deshunt-pris2"}],[1114178,{"idx":66,"name":"nest-03","tpage_name":"progress-minimap"}],[14811158,{"idx":22,"name":"city-endblocks","tpage_name":"ctygenb-vis-tfrag"}],[12320798,{"idx":30,"name":"city-green-pipe01","tpage_name":"ctyindb-vis-tfrag"}],[1114176,{"idx":64,"name":"nest-01","tpage_name":"progress-minimap"}],[14811156,{"idx":20,"name":"city-wall-inset-panel-01","tpage_name":"ctygenb-vis-tfrag"}],[12320796,{"idx":28,"name":"city-ind-band-dark-01","tpage_name":"ctyindb-vis-tfrag"}],[62128134,{"idx":6,"name":"floorboard01","tpage_name":"ctycara-pris"}],[60882954,{"idx":10,"name":"minc-metal-wheel-01","tpage_name":"mineb-vis-pris"}],[57147414,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"waspala-pris2"}],[14811155,{"idx":19,"name":"city-wall-01","tpage_name":"ctygenb-vis-tfrag"}],[12320795,{"idx":27,"name":"city-ind-grate-01","tpage_name":"ctyindb-vis-tfrag"}],[14811154,{"idx":18,"name":"city-wall","tpage_name":"ctygenb-vis-tfrag"}],[12320794,{"idx":26,"name":"city-muck-01","tpage_name":"ctyindb-vis-tfrag"}],[8323162,{"idx":90,"name":"city-step","tpage_name":"ctywide-vis-tfrag"}],[104792121,{"idx":57,"name":"wstlander-01-shoetop","tpage_name":"desresc-pris"}],[118489101,{"idx":13,"name":"sig-gun-02","tpage_name":"deshunt-pris2"}],[122224641,{"idx":1,"name":"facb-roadmarkings-01","tpage_name":"factoryb-vis-alpha"}],[71630877,{"idx":29,"name":"king-vest","tpage_name":"ldampksm-pris2"}],[14811153,{"idx":17,"name":"city-metal-strip-01","tpage_name":"ctygenb-vis-tfrag"}],[12320793,{"idx":25,"name":"city-bigpipe-ring-02","tpage_name":"ctyindb-vis-tfrag"}],[262329,{"idx":185,"name":"radial-halo","tpage_name":"level-default-sprite"}],[53805069,{"idx":13,"name":"forb-water-wave-01-dest","tpage_name":"forestb-vis-water"}],[8323155,{"idx":83,"name":"can-side-long","tpage_name":"ctywide-vis-tfrag"}],[49217548,{"idx":12,"name":"sewer-water-highlight-01-c","tpage_name":"sewc-vis-water"}],[71630870,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"ldampksm-pris2"}],[65540,{"idx":4,"name":"lens-highlight","tpage_name":"common"}],[262325,{"idx":181,"name":"leaf2","tpage_name":"level-default-sprite"}],[53805065,{"idx":9,"name":"forb-waterfall-01-dest","tpage_name":"forestb-vis-water"}],[65539,{"idx":3,"name":"common-white","tpage_name":"common"}],[262324,{"idx":180,"name":"leaf1","tpage_name":"level-default-sprite"}],[53805064,{"idx":8,"name":"forb-waterfall-01","tpage_name":"forestb-vis-water"}],[65538,{"idx":2,"name":"autoeye-pupil","tpage_name":"common"}],[35651701,{"idx":117,"name":"veger-walkingstick-02","tpage_name":"introcst-pris2"}],[60555301,{"idx":37,"name":"minc-blue-paint-rust05","tpage_name":"minea-vis-tfrag"}],[115081246,{"idx":30,"name":"terraformer-organic-03","tpage_name":"desboss1-pris"}],[67829809,{"idx":49,"name":"circle","tpage_name":"freehq-sprite"}],[589911,{"idx":87,"name":"hud-newhud-01","tpage_name":"level-default-minimap"}],[11796531,{"idx":51,"name":"city-ind-metal-04-hitweak","tpage_name":"ctyinda-vis-tfrag"}],[35651660,{"idx":76,"name":"king-skirt","tpage_name":"introcst-pris2"}],[49348640,{"idx":32,"name":"cguardgame-metaledark-02","tpage_name":"sewb-vis-pris"}],[35651700,{"idx":116,"name":"veger-walkingstick-01","tpage_name":"introcst-pris2"}],[60555300,{"idx":36,"name":"minc-train-pipe-cap-02","tpage_name":"minea-vis-tfrag"}],[115081245,{"idx":29,"name":"terraformer-bodytopstrans","tpage_name":"desboss1-pris"}],[35651659,{"idx":75,"name":"king-shoebottom","tpage_name":"introcst-pris2"}],[35651699,{"idx":115,"name":"veger-vest","tpage_name":"introcst-pris2"}],[60555299,{"idx":35,"name":"minc-door-metal-01","tpage_name":"minea-vis-tfrag"}],[115081244,{"idx":28,"name":"terraformer-bodytopplain","tpage_name":"desboss1-pris"}],[12320819,{"idx":51,"name":"city-ind-wall-base-05","tpage_name":"ctyindb-vis-tfrag"}],[14811179,{"idx":43,"name":"city-trim","tpage_name":"ctygenb-vis-tfrag"}],[26542180,{"idx":100,"name":"wstd-stands-ceiling","tpage_name":"wasstada-tfrag"}],[16121883,{"idx":27,"name":"city-farm-cart-woodslat","tpage_name":"ctyfarma-vis-tfrag"}],[8060943,{"idx":15,"name":"wave-foam","tpage_name":"ctywide-sprite"}],[11796483,{"idx":3,"name":"city-ind-wall-base-02","tpage_name":"ctyinda-vis-tfrag"}],[26542179,{"idx":99,"name":"wstd-throne-floor01","tpage_name":"wasstada-tfrag"}],[16121882,{"idx":26,"name":"farm-grass-ground-02","tpage_name":"ctyfarma-vis-tfrag"}],[8716361,{"idx":73,"name":"sign-crimson","tpage_name":"ctysluma-sprite"}],[49610754,{"idx":2,"name":"sewer-nut","tpage_name":"sewf-vis-tfrag"}],[60817415,{"idx":7,"name":"mine-track-metal1","tpage_name":"mineb-vis-shrub"}],[26542178,{"idx":98,"name":"wstd-flag","tpage_name":"wasstada-tfrag"}],[16121881,{"idx":25,"name":"city-farm-sprinkle-pipe","tpage_name":"ctyfarma-vis-tfrag"}],[81985558,{"idx":22,"name":"marauder-leather-brnstrap","tpage_name":"wasstadc-pris"}],[26542177,{"idx":97,"name":"wstd-interior-rock01","tpage_name":"wasstada-tfrag"}],[16121880,{"idx":24,"name":"city-farm-sprinkle-metal","tpage_name":"ctyfarma-vis-tfrag"}],[26542167,{"idx":87,"name":"wstd-throne-arch02","tpage_name":"wasstada-tfrag"}],[16121870,{"idx":14,"name":"city-farm-metal-bracket-01","tpage_name":"ctyfarma-vis-tfrag"}],[60948514,{"idx":34,"name":"minb-stone26","tpage_name":"minec-vis-tfrag"}],[8060930,{"idx":2,"name":"burning-bush-off","tpage_name":"ctywide-sprite"}],[589850,{"idx":26,"name":"hud-gun-yellow-shell-01","tpage_name":"level-default-minimap"}],[1114231,{"idx":119,"name":"temple-04","tpage_name":"progress-minimap"}],[14811211,{"idx":75,"name":"tcab-star-01","tpage_name":"ctygenb-vis-tfrag"}],[70254592,{"idx":0,"name":"hud-nest-cocoon-01","tpage_name":"nsta-minimap"}],[8323189,{"idx":117,"name":"fac-lo-grey-panel-03","tpage_name":"ctywide-vis-tfrag"}],[8323188,{"idx":116,"name":"fac-lo-bldng-panel-01","tpage_name":"ctywide-vis-tfrag"}],[35651656,{"idx":72,"name":"king-precursermetal-plain","tpage_name":"introcst-pris2"}],[74514455,{"idx":23,"name":"roboguard-headshield","tpage_name":"sewj-vis-pris"}],[75759635,{"idx":19,"name":"environment-oldmetal","tpage_name":"onintent-pris"}],[35651696,{"idx":112,"name":"veger-sleevelower","tpage_name":"introcst-pris2"}],[115081241,{"idx":25,"name":"terraformer-metal-07","tpage_name":"desboss1-pris"}],[35651655,{"idx":71,"name":"king-lgblackstrap","tpage_name":"introcst-pris2"}],[74514454,{"idx":22,"name":"roboguard-die-stamped-metal-red","tpage_name":"sewj-vis-pris"}],[75759634,{"idx":18,"name":"daxtertuft","tpage_name":"onintent-pris"}],[35651695,{"idx":111,"name":"veger-sleeve","tpage_name":"introcst-pris2"}],[60555295,{"idx":31,"name":"minb-stone21","tpage_name":"minea-vis-tfrag"}],[115081240,{"idx":24,"name":"terraformer-organic-02","tpage_name":"desboss1-pris"}],[67829803,{"idx":43,"name":"vinroom-tv-text-o","tpage_name":"freehq-sprite"}],[35651653,{"idx":69,"name":"king-iris","tpage_name":"introcst-pris2"}],[74514452,{"idx":20,"name":"kg-grunt-rim-03","tpage_name":"sewj-vis-pris"}],[67043372,{"idx":44,"name":"vinroom-tv-text-r","tpage_name":"vinroom-sprite"}],[57081932,{"idx":76,"name":"waspala-chain-anchor","tpage_name":"waspala-pris"}],[75759632,{"idx":16,"name":"daxternose","tpage_name":"onintent-pris"}],[35651693,{"idx":109,"name":"veger-shoulderplate","tpage_name":"introcst-pris2"}],[60555293,{"idx":29,"name":"minb-stone-edge","tpage_name":"minea-vis-tfrag"}],[115081238,{"idx":22,"name":"terraformer-metal-10","tpage_name":"desboss1-pris"}],[67829801,{"idx":41,"name":"vinroom-tv-text-m","tpage_name":"freehq-sprite"}],[35651651,{"idx":67,"name":"king-hand","tpage_name":"introcst-pris2"}],[49348631,{"idx":23,"name":"cguardgame-backplate","tpage_name":"sewb-vis-pris"}],[8192025,{"idx":25,"name":"newbike-02","tpage_name":"ctywide-vis-pris"}],[74514450,{"idx":18,"name":"environment-oldmetal","tpage_name":"sewj-vis-pris"}],[67043370,{"idx":42,"name":"vinroom-tv-text-n","tpage_name":"vinroom-sprite"}],[75759630,{"idx":14,"name":"daxterhelmetplain","tpage_name":"onintent-pris"}],[79495170,{"idx":2,"name":"des-bark-crooked-01","tpage_name":"wasintro-vis-tfrag"}],[35651691,{"idx":107,"name":"veger-scarf","tpage_name":"introcst-pris2"}],[60555291,{"idx":27,"name":"minb-stone11","tpage_name":"minea-vis-tfrag"}],[49348671,{"idx":63,"name":"squid-drabgun","tpage_name":"sewb-vis-pris"}],[115081236,{"idx":20,"name":"terraformer-metal-05","tpage_name":"desboss1-pris"}],[11796494,{"idx":14,"name":"city-inda-wallbase","tpage_name":"ctyinda-vis-tfrag"}],[8060954,{"idx":26,"name":"city-mark-hangsign-01","tpage_name":"ctywide-sprite"}],[67829799,{"idx":39,"name":"vinroom-tv-text-a","tpage_name":"freehq-sprite"}],[35651650,{"idx":66,"name":"king-hair","tpage_name":"introcst-pris2"}],[8192024,{"idx":24,"name":"newbike-01","tpage_name":"ctywide-vis-pris"}],[74514449,{"idx":17,"name":"cguardgame-shoebottom","tpage_name":"sewj-vis-pris"}],[67043369,{"idx":41,"name":"vinroom-tv-text-m","tpage_name":"vinroom-sprite"}],[75759629,{"idx":13,"name":"daxterheadwidenew","tpage_name":"onintent-pris"}],[35651690,{"idx":106,"name":"veger-parchment","tpage_name":"introcst-pris2"}],[60555290,{"idx":26,"name":"minb-stone15","tpage_name":"minea-vis-tfrag"}],[49348670,{"idx":62,"name":"wire-metal","tpage_name":"sewb-vis-pris"}],[115081235,{"idx":19,"name":"terraformer-metal-04","tpage_name":"desboss1-pris"}],[11796493,{"idx":13,"name":"city-ind-wall-thin-04","tpage_name":"ctyinda-vis-tfrag"}],[35651649,{"idx":65,"name":"king-greenmetalplain","tpage_name":"introcst-pris2"}],[8192023,{"idx":23,"name":"citn-allsuede","tpage_name":"ctywide-vis-pris"}],[35651689,{"idx":105,"name":"veger-pants","tpage_name":"introcst-pris2"}],[60555289,{"idx":25,"name":"minb-stone26","tpage_name":"minea-vis-tfrag"}],[49348669,{"idx":61,"name":"squid-tubes","tpage_name":"sewb-vis-pris"}],[115081234,{"idx":18,"name":"terraformer-metal-02","tpage_name":"desboss1-pris"}],[11796492,{"idx":12,"name":"city-ind-wall-03","tpage_name":"ctyinda-vis-tfrag"}],[35651648,{"idx":64,"name":"king-greenmetal","tpage_name":"introcst-pris2"}],[8192022,{"idx":22,"name":"citn-allshoebottom","tpage_name":"ctywide-vis-pris"}],[35651688,{"idx":104,"name":"veger-pages","tpage_name":"introcst-pris2"}],[60555288,{"idx":24,"name":"minb-stone22","tpage_name":"minea-vis-tfrag"}],[49348668,{"idx":60,"name":"roboguard-die-stamped-metal-red","tpage_name":"sewb-vis-pris"}],[115081233,{"idx":17,"name":"terraformer-metal-01","tpage_name":"desboss1-pris"}],[11796491,{"idx":11,"name":"city-ind-wall-04","tpage_name":"ctyinda-vis-tfrag"}],[35651647,{"idx":63,"name":"king-finger","tpage_name":"introcst-pris2"}],[8192021,{"idx":21,"name":"citn-allleye","tpage_name":"ctywide-vis-pris"}],[35651687,{"idx":103,"name":"veger-legwraps","tpage_name":"introcst-pris2"}],[60555287,{"idx":23,"name":"minb-stone23","tpage_name":"minea-vis-tfrag"}],[49348667,{"idx":59,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewb-vis-pris"}],[115081232,{"idx":16,"name":"terraformer-footpipes-01","tpage_name":"desboss1-pris"}],[589829,{"idx":5,"name":"hud-arrow-top-01","tpage_name":"level-default-minimap"}],[35651646,{"idx":62,"name":"king-face-01","tpage_name":"introcst-pris2"}],[8192020,{"idx":20,"name":"citn-allleatherwrinkled","tpage_name":"ctywide-vis-pris"}],[74514445,{"idx":13,"name":"cguard1-lens","tpage_name":"sewj-vis-pris"}],[67043365,{"idx":37,"name":"vinroom-tv-radar","tpage_name":"vinroom-sprite"}],[75759625,{"idx":9,"name":"daxterfinger","tpage_name":"onintent-pris"}],[35651686,{"idx":102,"name":"veger-hand","tpage_name":"introcst-pris2"}],[60555286,{"idx":22,"name":"minb-brok-edge-02","tpage_name":"minea-vis-tfrag"}],[49348666,{"idx":58,"name":"brown-hose","tpage_name":"sewb-vis-pris"}],[115081231,{"idx":15,"name":"terraformer-transstrips-01","tpage_name":"desboss1-pris"}],[589828,{"idx":4,"name":"hud-arrow-right-01","tpage_name":"level-default-minimap"}],[62783490,{"idx":2,"name":"grunt-hose","tpage_name":"ctypepb-pris"}],[55312410,{"idx":26,"name":"city-mark-basket2","tpage_name":"wascityb-vis-pris"}],[35651644,{"idx":60,"name":"king-ear","tpage_name":"introcst-pris2"}],[8192018,{"idx":18,"name":"citn-allleather-shoulder","tpage_name":"ctywide-vis-pris"}],[720904,{"idx":8,"name":"loadsave-back","tpage_name":"level-default-shrub"}],[35651684,{"idx":100,"name":"veger-gold","tpage_name":"introcst-pris2"}],[49348664,{"idx":56,"name":"widow-pod-gun-metal","tpage_name":"sewb-vis-pris"}],[115081229,{"idx":13,"name":"terraformer-minecore","tpage_name":"desboss1-pris"}],[589826,{"idx":2,"name":"hud-arrow-down-01","tpage_name":"level-default-minimap"}],[35651643,{"idx":59,"name":"king-clip-02","tpage_name":"introcst-pris2"}],[8192017,{"idx":17,"name":"citn-allleather-edge","tpage_name":"ctywide-vis-pris"}],[720903,{"idx":7,"name":"loadsave-audio-options","tpage_name":"level-default-shrub"}],[35651683,{"idx":99,"name":"veger-fingertop","tpage_name":"introcst-pris2"}],[60555283,{"idx":19,"name":"minb-rock-floor01","tpage_name":"minea-vis-tfrag"}],[49348663,{"idx":55,"name":"widow-dull-inards","tpage_name":"sewb-vis-pris"}],[115081228,{"idx":12,"name":"terraformer-metal-08","tpage_name":"desboss1-pris"}],[589825,{"idx":1,"name":"hud-arrow-dkpwr-01","tpage_name":"level-default-minimap"}],[35651642,{"idx":58,"name":"king-chest","tpage_name":"introcst-pris2"}],[49348622,{"idx":14,"name":"sewer-plate-02","tpage_name":"sewb-vis-pris"}],[8192016,{"idx":16,"name":"citn-allleather","tpage_name":"ctywide-vis-pris"}],[720902,{"idx":6,"name":"loadsave-05","tpage_name":"level-default-shrub"}],[35651682,{"idx":98,"name":"veger-fingerbottom","tpage_name":"introcst-pris2"}],[49348662,{"idx":54,"name":"squid-bulb-sm","tpage_name":"sewb-vis-pris"}],[115081227,{"idx":11,"name":"terraformer-metal-03","tpage_name":"desboss1-pris"}],[589824,{"idx":0,"name":"checkpoint","tpage_name":"level-default-minimap"}],[35651641,{"idx":57,"name":"king-bolt","tpage_name":"introcst-pris2"}],[49348621,{"idx":13,"name":"sewer-metal-floor-01","tpage_name":"sewb-vis-pris"}],[8192015,{"idx":15,"name":"citn-alllcotton","tpage_name":"ctywide-vis-pris"}],[720901,{"idx":5,"name":"loadsave-04","tpage_name":"level-default-shrub"}],[35651681,{"idx":97,"name":"veger-face","tpage_name":"introcst-pris2"}],[49348661,{"idx":53,"name":"roboguard-shouldershield","tpage_name":"sewb-vis-pris"}],[11796484,{"idx":4,"name":"city-ind-wall-base-top-01","tpage_name":"ctyinda-vis-tfrag"}],[35651640,{"idx":56,"name":"king-blackskirt2","tpage_name":"introcst-pris2"}],[49348620,{"idx":12,"name":"sewer-pipe-01","tpage_name":"sewb-vis-pris"}],[8192014,{"idx":14,"name":"citn-allflesh","tpage_name":"ctywide-vis-pris"}],[35651680,{"idx":96,"name":"veger-endpaper","tpage_name":"introcst-pris2"}],[60555280,{"idx":16,"name":"minc-safe-plate-01","tpage_name":"minea-vis-tfrag"}],[49348660,{"idx":52,"name":"roboguard-headshield","tpage_name":"sewb-vis-pris"}],[35651639,{"idx":55,"name":"king-arm","tpage_name":"introcst-pris2"}],[49348619,{"idx":11,"name":"sewer-metal-block-04","tpage_name":"sewb-vis-pris"}],[8192013,{"idx":13,"name":"citn-allbuckel","tpage_name":"ctywide-vis-pris"}],[720899,{"idx":3,"name":"loadsave-02","tpage_name":"level-default-shrub"}],[35651679,{"idx":95,"name":"veger-coatclips","tpage_name":"introcst-pris2"}],[60555279,{"idx":15,"name":"minc-blue-paint-rust04","tpage_name":"minea-vis-tfrag"}],[49348659,{"idx":51,"name":"kg-grunt-rim-03","tpage_name":"sewb-vis-pris"}],[35651638,{"idx":54,"name":"samosbird-wing","tpage_name":"introcst-pris2"}],[49348618,{"idx":10,"name":"sew-movingstep-grate","tpage_name":"sewb-vis-pris"}],[8192012,{"idx":12,"name":"citfat-hairflat","tpage_name":"ctywide-vis-pris"}],[81723503,{"idx":111,"name":"jakchires-teeth","tpage_name":"ljndklev-pris"}],[720898,{"idx":2,"name":"loadsave-01","tpage_name":"level-default-shrub"}],[95027213,{"idx":13,"name":"sig-gun-02","tpage_name":"lsigjakc-pris2"}],[91291673,{"idx":25,"name":"gun-building-wall-gray-01","tpage_name":"gungame-vis-tfrag"}],[8323093,{"idx":21,"name":"citywide-stadium-lightbank","tpage_name":"ctywide-vis-tfrag"}],[852013,{"idx":45,"name":"metalcrate-lod02","tpage_name":"halfpipe-tfrag"}],[14548993,{"idx":1,"name":"ctygenb-ticker-space","tpage_name":"ctygenb-sprite"}],[35651678,{"idx":94,"name":"veger-coatbelt","tpage_name":"introcst-pris2"}],[60555278,{"idx":14,"name":"minc-grill-01","tpage_name":"minea-vis-tfrag"}],[49348658,{"idx":50,"name":"kg-grunt-rim-02","tpage_name":"sewb-vis-pris"}],[35651637,{"idx":53,"name":"samosbird-plume","tpage_name":"introcst-pris2"}],[49348617,{"idx":9,"name":"sew-laserturret-pole","tpage_name":"sewb-vis-pris"}],[81723502,{"idx":110,"name":"jakchires-shoeteop","tpage_name":"ljndklev-pris"}],[720897,{"idx":1,"name":"environment-title","tpage_name":"level-default-shrub"}],[35651677,{"idx":93,"name":"veger-coat","tpage_name":"introcst-pris2"}],[60555277,{"idx":13,"name":"minc-rust-01","tpage_name":"minea-vis-tfrag"}],[49348657,{"idx":49,"name":"kg-grunt-rim-01","tpage_name":"sewb-vis-pris"}],[35651636,{"idx":52,"name":"samosbird-eye","tpage_name":"introcst-pris2"}],[49348616,{"idx":8,"name":"sewer-screw-02","tpage_name":"sewb-vis-pris"}],[81723501,{"idx":109,"name":"jakchires-shoemetal","tpage_name":"ljndklev-pris"}],[720896,{"idx":0,"name":"environment-oldmetal","tpage_name":"level-default-shrub"}],[11730952,{"idx":8,"name":"city-ind-overlay-bullethole-a","tpage_name":"ctyinda-vis-shrub"}],[524291,{"idx":3,"name":"sky-glow-soft","tpage_name":"sky-textures"}],[62717953,{"idx":1,"name":"cguardgame-backplate","tpage_name":"ctypesa-pris"}],[94371923,{"idx":83,"name":"palace-break-winwall02","tpage_name":"intpfall-vis-pris"}],[28049435,{"idx":27,"name":"intr-panl_piller-no-alpha01","tpage_name":"intpalrf-tfrag"}],[67829775,{"idx":15,"name":"screen-12","tpage_name":"freehq-sprite"}],[71565315,{"idx":3,"name":"pecker-face","tpage_name":"ldampksm-pris"}],[852012,{"idx":44,"name":"metalcrate-01","tpage_name":"halfpipe-tfrag"}],[14548992,{"idx":0,"name":"ctygenb-ticker-backing","tpage_name":"ctygenb-sprite"}],[8912952,{"idx":56,"name":"city-slum-crater-blend-02","tpage_name":"ctysluma-vis-tfrag"}],[28114946,{"idx":2,"name":"tpal-met-pip-01","tpage_name":"intpalrf-shrub"}],[16908326,{"idx":38,"name":"t-citywide-met-strp01","tpage_name":"ctyfarmb-vis-tfrag"}],[117637208,{"idx":88,"name":"jakc-wristband-a2","tpage_name":"destrack-pris"}],[94371913,{"idx":73,"name":"palace-break-wall03","tpage_name":"intpfall-vis-pris"}],[28049425,{"idx":17,"name":"palroof-metal","tpage_name":"intpalrf-tfrag"}],[67829765,{"idx":5,"name":"screen-02","tpage_name":"freehq-sprite"}],[8912942,{"idx":46,"name":"city-fort-column","tpage_name":"ctysluma-vis-tfrag"}],[94371886,{"idx":46,"name":"palace-break-infloor","tpage_name":"intpfall-vis-pris"}],[81723450,{"idx":58,"name":"klever-handwrap","tpage_name":"ljndklev-pris"}],[74252370,{"idx":82,"name":"kg-grunt-rim-03","tpage_name":"sewg-vis-pris"}],[94371912,{"idx":72,"name":"palace-break-wall02","tpage_name":"intpfall-vis-pris"}],[28049424,{"idx":16,"name":"troof-sndwch-beam-01","tpage_name":"intpalrf-tfrag"}],[67829764,{"idx":4,"name":"screen-01","tpage_name":"freehq-sprite"}],[8912941,{"idx":45,"name":"fort-exhaust","tpage_name":"ctysluma-vis-tfrag"}],[8192026,{"idx":26,"name":"newbike-03","tpage_name":"ctywide-vis-pris"}],[35651652,{"idx":68,"name":"king-horn","tpage_name":"introcst-pris2"}],[21299302,{"idx":102,"name":"vehicle-fox-drum-02","tpage_name":"wasall-pris"}],[94371909,{"idx":69,"name":"palace-break-spike01","tpage_name":"intpfall-vis-pris"}],[28049421,{"idx":13,"name":"tpal-drain01","tpage_name":"intpalrf-tfrag"}],[79364238,{"idx":142,"name":"monk-hair-f","tpage_name":"wasseem-pris"}],[120455178,{"idx":10,"name":"forx-citywall","tpage_name":"forestx-vis-tfrag"}],[16842760,{"idx":8,"name":"city-farm-dirt-small-01","tpage_name":"ctyfarmb-vis-shrub"}],[67829761,{"idx":1,"name":"tinydot","tpage_name":"freehq-sprite"}],[100925452,{"idx":12,"name":"king-greenmetal","tpage_name":"ljkdmpk-pris2"}],[95944732,{"idx":28,"name":"torn-vest","tpage_name":"freehq-pris2"}],[100925451,{"idx":11,"name":"king-finger","tpage_name":"ljkdmpk-pris2"}],[95944731,{"idx":27,"name":"torn-teeth-01","tpage_name":"freehq-pris2"}],[21299295,{"idx":95,"name":"vehicle-tread-02","tpage_name":"wasall-pris"}],[94240879,{"idx":111,"name":"tpal-beam-redstripe01","tpage_name":"intpfall-vis-tfrag"}],[127860739,{"idx":3,"name":"palcab-lowres-background-trees2","tpage_name":"lfaccity-alpha"}],[61079635,{"idx":83,"name":"pecker-tail","tpage_name":"minec-vis-pris"}],[21299294,{"idx":94,"name":"tread-turtle","tpage_name":"wasall-pris"}],[94240878,{"idx":110,"name":"palroof-metal","tpage_name":"intpfall-vis-tfrag"}],[127860738,{"idx":2,"name":"palcab-lowres-background-trees-edge","tpage_name":"lfaccity-alpha"}],[61079634,{"idx":82,"name":"pecker-plume","tpage_name":"minec-vis-pris"}],[100925449,{"idx":9,"name":"king-earing","tpage_name":"ljkdmpk-pris2"}],[95944729,{"idx":25,"name":"torn-shoe","tpage_name":"freehq-pris2"}],[21299293,{"idx":93,"name":"tread-toad","tpage_name":"wasall-pris"}],[94240877,{"idx":109,"name":"troof-sndwch-beam-01","tpage_name":"intpfall-vis-tfrag"}],[127860737,{"idx":1,"name":"palcab-lowres-background-crater-rim","tpage_name":"lfaccity-alpha"}],[61079633,{"idx":81,"name":"pecker-face","tpage_name":"minec-vis-pris"}],[100925448,{"idx":8,"name":"king-ear","tpage_name":"ljkdmpk-pris2"}],[95944728,{"idx":24,"name":"torn-scarf","tpage_name":"freehq-pris2"}],[21299292,{"idx":92,"name":"tread-snake","tpage_name":"wasall-pris"}],[21299236,{"idx":36,"name":"vehicle-snake-drum-03","tpage_name":"wasall-pris"}],[39780363,{"idx":11,"name":"nsta-wall","tpage_name":"nstb-vis-pris"}],[94240876,{"idx":108,"name":"tpal-beam-red01","tpage_name":"intpfall-vis-tfrag"}],[127860736,{"idx":0,"name":"palcab-lowres-background-shoreline-02","tpage_name":"lfaccity-alpha"}],[61079632,{"idx":80,"name":"pecker-body-01","tpage_name":"minec-vis-pris"}],[100925447,{"idx":7,"name":"king-clip-02","tpage_name":"ljkdmpk-pris2"}],[95944727,{"idx":23,"name":"torn-pipe","tpage_name":"freehq-pris2"}],[75890745,{"idx":57,"name":"onin-temp-01","tpage_name":"onintent-tfrag"}],[81723492,{"idx":100,"name":"jakchires-glovetop","tpage_name":"ljndklev-pris"}],[48562248,{"idx":72,"name":"jakchires-glovetop","tpage_name":"sewa-vis-pris"}],[67239948,{"idx":12,"name":"vin-floor-03c","tpage_name":"vinroom-vis-tfrag"}],[52297788,{"idx":60,"name":"freehq-pipe01","tpage_name":"freehq-tfrag"}],[57278508,{"idx":44,"name":"metalflut-rings","tpage_name":"waswide-vis-pris"}],[94371898,{"idx":58,"name":"palace-break-roof02","tpage_name":"intpfall-vis-pris"}],[28049410,{"idx":2,"name":"palroof-scalestone-01","tpage_name":"intpalrf-tfrag"}],[61669393,{"idx":17,"name":"mtn-environment-front-backup","tpage_name":"foresta-vis-shrub"}],[89587716,{"idx":4,"name":"pecker-plume","tpage_name":"lwstdpck-pris"}],[75890736,{"idx":48,"name":"onin-skull-top","tpage_name":"onintent-tfrag"}],[71106589,{"idx":29,"name":"wstd-ladder","tpage_name":"wasstadb-tfrag"}],[58654789,{"idx":69,"name":"dust-sparkle","tpage_name":"hiphog-sprite"}],[73596949,{"idx":21,"name":"sewer-metal-03","tpage_name":"sewi-vis-tfrag"}],[38731909,{"idx":133,"name":"flying-bird-06","tpage_name":"wasstada-sprite"}],[94371867,{"idx":27,"name":"palace-break-bigwall01","tpage_name":"intpfall-vis-pris"}],[75890740,{"idx":52,"name":"onin-tank-center-piece","tpage_name":"onintent-tfrag"}],[89587720,{"idx":8,"name":"pecker-wingtop","tpage_name":"lwstdpck-pris"}],[71106584,{"idx":24,"name":"wstd-tentacle-plate02","tpage_name":"wasstadb-tfrag"}],[73596944,{"idx":16,"name":"sewer-concrete-block-02","tpage_name":"sewi-vis-tfrag"}],[94371866,{"idx":26,"name":"palace-break-base03","tpage_name":"intpfall-vis-pris"}],[75890739,{"idx":51,"name":"onin-tank-bolt","tpage_name":"onintent-tfrag"}],[89587719,{"idx":7,"name":"pecker-wingbottom","tpage_name":"lwstdpck-pris"}],[112525327,{"idx":15,"name":"daxterlense","tpage_name":"desrescc-pris"}],[95944705,{"idx":1,"name":"bam-hairhilite","tpage_name":"freehq-pris2"}],[92209165,{"idx":13,"name":"klever-bolt","tpage_name":"ldamklev-pris"}],[42401829,{"idx":37,"name":"wascity-roof-1","tpage_name":"wasdoors-vis-tfrag"}],[48627729,{"idx":17,"name":"sewer-concrete-edge-01","tpage_name":"sewb-vis-tfrag"}],[60882956,{"idx":12,"name":"minc-rust-bars-01","tpage_name":"mineb-vis-pris"}],[57147416,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"waspala-pris2"}],[62128136,{"idx":8,"name":"pipe01","tpage_name":"ctycara-pris"}],[71106583,{"idx":23,"name":"wstd-flag","tpage_name":"wasstadb-tfrag"}],[73596943,{"idx":15,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewi-vis-tfrag"}],[94371865,{"idx":25,"name":"palace-break-base02","tpage_name":"intpfall-vis-pris"}],[75890738,{"idx":50,"name":"onin-table-rim","tpage_name":"onintent-tfrag"}],[89587718,{"idx":6,"name":"pecker-teeth","tpage_name":"lwstdpck-pris"}],[35127474,{"idx":178,"name":"errolcyber-head-02","tpage_name":"factorya-pris"}],[71106582,{"idx":22,"name":"wstd-throne-plat03","tpage_name":"wasstadb-tfrag"}],[73596942,{"idx":14,"name":"sewer-brick-block-06","tpage_name":"sewi-vis-tfrag"}],[94371860,{"idx":20,"name":"jets01","tpage_name":"intpfall-vis-pris"}],[77791238,{"idx":6,"name":"wstd-trapdoor-grate","tpage_name":"wasstadb-pris"}],[67829798,{"idx":38,"name":"vinroom-tv-radar-dots","tpage_name":"freehq-sprite"}],[49676289,{"idx":1,"name":"sewer-nut","tpage_name":"sewf-vis-shrub"}],[112525321,{"idx":9,"name":"daxterfinger","tpage_name":"desrescc-pris"}],[42401823,{"idx":31,"name":"wascitya-airlock-metal-bits","tpage_name":"wasdoors-vis-tfrag"}],[60882950,{"idx":6,"name":"manta-skin-01","tpage_name":"mineb-vis-pris"}],[62128130,{"idx":2,"name":"carafront01","tpage_name":"ctycara-pris"}],[57147410,{"idx":18,"name":"king-leg","tpage_name":"waspala-pris2"}],[94371859,{"idx":19,"name":"jetTop01","tpage_name":"intpfall-vis-pris"}],[77791237,{"idx":5,"name":"wstd-trapdoor-bolt","tpage_name":"wasstadb-pris"}],[67829797,{"idx":37,"name":"vinroom-tv-radar","tpage_name":"freehq-sprite"}],[99418154,{"idx":42,"name":"jakchires-jacket","tpage_name":"volcanox-pris"}],[96927794,{"idx":50,"name":"jinx-pants","tpage_name":"ltornjnx-pris2"}],[111869954,{"idx":2,"name":"stadiumb-hud-lap-01","tpage_name":"wasleapr-minimap"}],[49676288,{"idx":0,"name":"sewer-pipe-small-01","tpage_name":"sewf-vis-shrub"}],[112525320,{"idx":8,"name":"daxterear","tpage_name":"desrescc-pris"}],[42401822,{"idx":30,"name":"wascity-stone-bricks-2-plain","tpage_name":"wasdoors-vis-tfrag"}],[43647002,{"idx":26,"name":"cherry","tpage_name":"waswide-sprite"}],[60882949,{"idx":5,"name":"manta-metal-02","tpage_name":"mineb-vis-pris"}],[62128129,{"idx":1,"name":"brace01","tpage_name":"ctycara-pris"}],[57147409,{"idx":17,"name":"king-iris","tpage_name":"waspala-pris2"}],[76480593,{"idx":81,"name":"jakc-wristband-a2","tpage_name":"freehq-pris"}],[35389653,{"idx":213,"name":"klever-skirtdark","tpage_name":"introcst-pris"}],[71106576,{"idx":16,"name":"wstd-tentacle-plate03","tpage_name":"wasstadb-tfrag"}],[74842116,{"idx":4,"name":"sewer-waterfall-02-l-dest","tpage_name":"sewl-vis-water"}],[94371858,{"idx":18,"name":"hood01","tpage_name":"intpfall-vis-pris"}],[75890731,{"idx":43,"name":"onin-shelf-inside","tpage_name":"onintent-tfrag"}],[35127467,{"idx":171,"name":"errolcyber-fingers","tpage_name":"factorya-pris"}],[73728047,{"idx":47,"name":"sewer-metal-block-04","tpage_name":"sewh-vis-tfrag"}],[112525319,{"idx":7,"name":"daxterbolt","tpage_name":"desrescc-pris"}],[42401821,{"idx":29,"name":"wascity-stone-plain-wall-3","tpage_name":"wasdoors-vis-tfrag"}],[48627721,{"idx":9,"name":"sewer-pipe-rim-10","tpage_name":"sewb-vis-tfrag"}],[43647001,{"idx":25,"name":"cotton-wrap-debris","tpage_name":"waswide-sprite"}],[8912913,{"idx":17,"name":"city-slumwall-07","tpage_name":"ctysluma-vis-tfrag"}],[76480592,{"idx":80,"name":"jakc-wraps","tpage_name":"freehq-pris"}],[35389652,{"idx":212,"name":"klever-shoebottom","tpage_name":"introcst-pris"}],[41418843,{"idx":91,"name":"lt-eco-vent-side-01","tpage_name":"wascitya-vis-tfrag"}],[55115823,{"idx":47,"name":"wascity-outerwall-metal-b","tpage_name":"wascityb-vis-tfrag"}],[94371857,{"idx":17,"name":"gunbox02","tpage_name":"intpfall-vis-pris"}],[75890730,{"idx":42,"name":"onin-shelf","tpage_name":"onintent-tfrag"}],[35127466,{"idx":170,"name":"errolcyber-earcup","tpage_name":"factorya-pris"}],[73728046,{"idx":46,"name":"sewer-lip-01-hitweak","tpage_name":"sewh-vis-tfrag"}],[112525318,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"desrescc-pris"}],[42401820,{"idx":28,"name":"wascity-ditch-wall-top-to-ground-edging","tpage_name":"wasdoors-vis-tfrag"}],[48627720,{"idx":8,"name":"sewer-block-01","tpage_name":"sewb-vis-tfrag"}],[43647000,{"idx":24,"name":"straw-ground","tpage_name":"waswide-sprite"}],[41418842,{"idx":90,"name":"lt-eco-vent-blue-01","tpage_name":"wascitya-vis-tfrag"}],[48889922,{"idx":66,"name":"sewer-metal-trim-01","tpage_name":"sewd-vis-tfrag"}],[55115822,{"idx":46,"name":"wascity-torch-tank","tpage_name":"wascityb-vis-tfrag"}],[8323182,{"idx":110,"name":"fac-lo-panel-01","tpage_name":"ctywide-vis-tfrag"}],[104792141,{"idx":77,"name":"wstlander-04-shirt","tpage_name":"desresc-pris"}],[94371852,{"idx":12,"name":"gauge01","tpage_name":"intpfall-vis-pris"}],[75890725,{"idx":37,"name":"onin-rope","tpage_name":"onintent-tfrag"}],[60948565,{"idx":85,"name":"lt-eco-vent-side-01","tpage_name":"minec-vis-tfrag"}],[35127461,{"idx":165,"name":"errolcyber-bluedome","tpage_name":"factorya-pris"}],[73728041,{"idx":41,"name":"sewer-pipe-rim-03","tpage_name":"sewh-vis-tfrag"}],[53739551,{"idx":31,"name":"kgtrns-hatch01","tpage_name":"forestb-vis-pris"}],[48758831,{"idx":47,"name":"sewer-round-03","tpage_name":"sewc-vis-tfrag"}],[94371851,{"idx":11,"name":"flatgerydark01","tpage_name":"intpfall-vis-pris"}],[75890724,{"idx":36,"name":"onin-rocks","tpage_name":"onintent-tfrag"}],[60948564,{"idx":84,"name":"lt-eco-vent-blue-01","tpage_name":"minec-vis-tfrag"}],[35127460,{"idx":164,"name":"errolcyber-bigshoulder","tpage_name":"factorya-pris"}],[73728040,{"idx":40,"name":"sewer-scaffold-03","tpage_name":"sewh-vis-tfrag"}],[41418836,{"idx":84,"name":"common_sandstone_base01","tpage_name":"wascitya-vis-tfrag"}],[55115816,{"idx":40,"name":"wascity-palm-trunk","tpage_name":"wascityb-vis-tfrag"}],[48889916,{"idx":60,"name":"sewer-pipe-rim-10","tpage_name":"sewd-vis-tfrag"}],[53739550,{"idx":30,"name":"kgtrns-box01","tpage_name":"forestb-vis-pris"}],[48758830,{"idx":46,"name":"sewer-round-01","tpage_name":"sewc-vis-tfrag"}],[8323177,{"idx":105,"name":"fac-lo-red-panel-03","tpage_name":"ctywide-vis-tfrag"}],[104792136,{"idx":72,"name":"wstlander-03-eye","tpage_name":"desresc-pris"}],[118489116,{"idx":28,"name":"sig-skirts-03","tpage_name":"deshunt-pris2"}],[73531397,{"idx":5,"name":"sewer-water-still-01-i-dest","tpage_name":"sewi-vis-water"}],[74776577,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewm-vis-pris"}],[94371850,{"idx":10,"name":"dash01","tpage_name":"intpfall-vis-pris"}],[75890723,{"idx":35,"name":"onin-plain-metal","tpage_name":"onintent-tfrag"}],[60948563,{"idx":83,"name":"minc-brick-wall-01","tpage_name":"minec-vis-tfrag"}],[35127459,{"idx":163,"name":"errolcyber-bighand-01","tpage_name":"factorya-pris"}],[73728039,{"idx":39,"name":"sewer-brick-roof-01","tpage_name":"sewh-vis-tfrag"}],[41418835,{"idx":83,"name":"common_sandstone_trim01","tpage_name":"wascitya-vis-tfrag"}],[48889915,{"idx":59,"name":"sewer-grate-01","tpage_name":"sewd-vis-tfrag"}],[55115815,{"idx":39,"name":"wascity-ground2ocean-shore-rocks","tpage_name":"wascityb-vis-tfrag"}],[53739549,{"idx":29,"name":"environment-oldmetal","tpage_name":"forestb-vis-pris"}],[48758829,{"idx":45,"name":"sewer-bolt-side-02","tpage_name":"sewc-vis-tfrag"}],[94371849,{"idx":9,"name":"backThing01","tpage_name":"intpfall-vis-pris"}],[75890722,{"idx":34,"name":"onin-jar-bottom","tpage_name":"onintent-tfrag"}],[60948562,{"idx":82,"name":"minc-light-blue","tpage_name":"minec-vis-tfrag"}],[35127458,{"idx":162,"name":"errocyber-faceflesh","tpage_name":"factorya-pris"}],[73728038,{"idx":38,"name":"sewer-stone-arch-01","tpage_name":"sewh-vis-tfrag"}],[8912904,{"idx":8,"name":"city-slum-bracketmetal-tiny","tpage_name":"ctysluma-vis-tfrag"}],[41418834,{"idx":82,"name":"common_sandstone_taper01","tpage_name":"wascitya-vis-tfrag"}],[48889914,{"idx":58,"name":"sewer-round-01","tpage_name":"sewd-vis-tfrag"}],[55115814,{"idx":38,"name":"wascity-ocean-shore-rocks","tpage_name":"wascityb-vis-tfrag"}],[53739548,{"idx":28,"name":"darkguard-shouldershield","tpage_name":"forestb-vis-pris"}],[48758828,{"idx":44,"name":"sewer-bolt-side-01","tpage_name":"sewc-vis-tfrag"}],[94371848,{"idx":8,"name":"Ashelin","tpage_name":"intpfall-vis-pris"}],[75890721,{"idx":33,"name":"onin-jar","tpage_name":"onintent-tfrag"}],[60948561,{"idx":81,"name":"minc-ox-pipe-01","tpage_name":"minec-vis-tfrag"}],[35127457,{"idx":161,"name":"wire-metal","tpage_name":"factorya-pris"}],[73728037,{"idx":37,"name":"sewer-pipe-rim-07","tpage_name":"sewh-vis-tfrag"}],[8912903,{"idx":7,"name":"city-slum-hangsign-01","tpage_name":"ctysluma-vis-tfrag"}],[41418833,{"idx":81,"name":"common_sandstone_ground01","tpage_name":"wascitya-vis-tfrag"}],[55115813,{"idx":37,"name":"wascity-rock-small","tpage_name":"wascityb-vis-tfrag"}],[53739547,{"idx":27,"name":"darkguard-scarf","tpage_name":"forestb-vis-pris"}],[8323165,{"idx":93,"name":"ctyslumc-wall-LOW","tpage_name":"ctywide-vis-tfrag"}],[104792124,{"idx":60,"name":"wstlander-01-wrap","tpage_name":"desresc-pris"}],[118489104,{"idx":16,"name":"sig-gun-05","tpage_name":"deshunt-pris2"}],[8323163,{"idx":91,"name":"cityslumc-purple-column","tpage_name":"ctywide-vis-tfrag"}],[104792122,{"idx":58,"name":"wstlander-01-shoulderarmor","tpage_name":"desresc-pris"}],[118489102,{"idx":14,"name":"sig-gun-03","tpage_name":"deshunt-pris2"}],[71630878,{"idx":30,"name":"king-vestback","tpage_name":"ldampksm-pris2"}],[115081247,{"idx":31,"name":"terraformer-transbodytop-01","tpage_name":"desboss1-pris"}],[74383391,{"idx":31,"name":"sewer-pipe-02-edge-01","tpage_name":"sewj-vis-tfrag"}],[56950871,{"idx":87,"name":"waspala-palmtree-trunk-01","tpage_name":"waspala-tfrag"}],[79364111,{"idx":15,"name":"daxterlense","tpage_name":"wasseem-pris"}],[458883,{"idx":131,"name":"common-gray-dark","tpage_name":"level-default-pris"}],[42467329,{"idx":1,"name":"wascity-stain-window-01","tpage_name":"wasdoors-vis-shrub"}],[53673990,{"idx":6,"name":"fora-foliage","tpage_name":"forestb-vis-tfrag"}],[35389490,{"idx":50,"name":"jak-belt","tpage_name":"introcst-pris"}],[49086470,{"idx":6,"name":"sewer-metal-block-04","tpage_name":"sewe-vis-shrub"}],[74383390,{"idx":30,"name":"sewer-pipe-01","tpage_name":"sewj-vis-tfrag"}],[79364110,{"idx":14,"name":"daxterhelmetplain","tpage_name":"wasseem-pris"}],[458882,{"idx":130,"name":"jakc-hair-norm","tpage_name":"level-default-pris"}],[42467328,{"idx":0,"name":"wascity-stain-wall-01","tpage_name":"wasdoors-vis-shrub"}],[74383389,{"idx":29,"name":"sewer-pipe-rim-10","tpage_name":"sewj-vis-tfrag"}],[79364109,{"idx":13,"name":"daxterheadwidenew","tpage_name":"wasseem-pris"}],[458881,{"idx":129,"name":"jakc-hair-dark","tpage_name":"level-default-pris"}],[35389488,{"idx":48,"name":"environment-oldmetal","tpage_name":"introcst-pris"}],[49086468,{"idx":4,"name":"sew-movingstep-grate","tpage_name":"sewe-vis-shrub"}],[786437,{"idx":5,"name":"font.24lo2","tpage_name":"gamefont"}],[458880,{"idx":128,"name":"jakc-finger-norm","tpage_name":"level-default-pris"}],[53673987,{"idx":3,"name":"fora-stream-rocks","tpage_name":"forestb-vis-tfrag"}],[35389487,{"idx":47,"name":"daxtertuft","tpage_name":"introcst-pris"}],[49086467,{"idx":3,"name":"sewer-pipe-small-01","tpage_name":"sewe-vis-shrub"}],[786436,{"idx":4,"name":"font.24lo","tpage_name":"gamefont"}],[74383387,{"idx":27,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewj-vis-tfrag"}],[79364107,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"wasseem-pris"}],[458879,{"idx":127,"name":"jakc-finger-dark","tpage_name":"level-default-pris"}],[53673986,{"idx":2,"name":"fora-grass","tpage_name":"forestb-vis-tfrag"}],[74383386,{"idx":26,"name":"sewer-flat-pipe-01","tpage_name":"sewj-vis-tfrag"}],[79364106,{"idx":10,"name":"daxterfoot","tpage_name":"wasseem-pris"}],[458878,{"idx":126,"name":"jakc-face-norm","tpage_name":"level-default-pris"}],[74383385,{"idx":25,"name":"sewer-metal-floor-02","tpage_name":"sewj-vis-tfrag"}],[79364105,{"idx":9,"name":"daxterfinger","tpage_name":"wasseem-pris"}],[458877,{"idx":125,"name":"jakc-face-dark","tpage_name":"level-default-pris"}],[53673984,{"idx":0,"name":"fora-bark","tpage_name":"forestb-vis-tfrag"}],[35389484,{"idx":44,"name":"daxterlense","tpage_name":"introcst-pris"}],[49086464,{"idx":0,"name":"sewer-moss-01","tpage_name":"sewe-vis-shrub"}],[48627794,{"idx":82,"name":"sewer-brick-block-10","tpage_name":"sewb-vis-tfrag"}],[786433,{"idx":1,"name":"font.12lo","tpage_name":"gamefont"}],[74383384,{"idx":24,"name":"sewer-lip-01-hitweak","tpage_name":"sewj-vis-tfrag"}],[79364104,{"idx":8,"name":"daxterear","tpage_name":"wasseem-pris"}],[458876,{"idx":124,"name":"jakc-eyebrow-norm","tpage_name":"level-default-pris"}],[35389483,{"idx":43,"name":"daxterhelmetplain","tpage_name":"introcst-pris"}],[48627793,{"idx":81,"name":"sewer-brick-block-11","tpage_name":"sewb-vis-tfrag"}],[73531393,{"idx":1,"name":"sewer-waterfall-02-i","tpage_name":"sewi-vis-water"}],[786432,{"idx":0,"name":"font.12hi","tpage_name":"gamefont"}],[458875,{"idx":123,"name":"jakc-eyebrow-dark","tpage_name":"level-default-pris"}],[50659379,{"idx":51,"name":"fora-green-eco-vent-hole","tpage_name":"foresta-vis-tfrag"}],[74383382,{"idx":22,"name":"sewer-plate-05","tpage_name":"sewj-vis-tfrag"}],[56950862,{"idx":78,"name":"waspala-metal-plate04","tpage_name":"waspala-tfrag"}],[79364102,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"wasseem-pris"}],[458874,{"idx":122,"name":"jakc-arm-norm","tpage_name":"level-default-pris"}],[50659378,{"idx":50,"name":"fora-bridge-green","tpage_name":"foresta-vis-tfrag"}],[49414198,{"idx":54,"name":"environment-oldmetal","tpage_name":"sewc-vis-pris"}],[74252372,{"idx":84,"name":"squid-drabgun","tpage_name":"sewg-vis-pris"}],[81723452,{"idx":60,"name":"klever-armor-02","tpage_name":"ljndklev-pris"}],[458873,{"idx":121,"name":"jakc-arm-dark","tpage_name":"level-default-pris"}],[458871,{"idx":119,"name":"jakc-wristbands-a","tpage_name":"level-default-pris"}],[50659375,{"idx":47,"name":"fora-cliff-face-far","tpage_name":"foresta-vis-tfrag"}],[74252369,{"idx":81,"name":"kg-grunt-cable-01","tpage_name":"sewg-vis-pris"}],[81723449,{"idx":57,"name":"klever-clips","tpage_name":"ljndklev-pris"}],[458870,{"idx":118,"name":"jakc-wristband-a2","tpage_name":"level-default-pris"}],[35389477,{"idx":37,"name":"daxterear","tpage_name":"introcst-pris"}],[41615377,{"idx":17,"name":"was-tizard-face","tpage_name":"wascitya-vis-pris"}],[458869,{"idx":117,"name":"jakc-wraps","tpage_name":"level-default-pris"}],[35389476,{"idx":36,"name":"daxterbolt","tpage_name":"introcst-pris"}],[41615376,{"idx":16,"name":"was-tizard-body","tpage_name":"wascitya-vis-pris"}],[50659373,{"idx":45,"name":"fora-statue-stone-sides","tpage_name":"foresta-vis-tfrag"}],[458868,{"idx":116,"name":"jakc-waistband2","tpage_name":"level-default-pris"}],[458867,{"idx":115,"name":"jakc-waistband","tpage_name":"level-default-pris"}],[458866,{"idx":114,"name":"jakc-skirt","tpage_name":"level-default-pris"}],[458865,{"idx":113,"name":"jakc-shoulderarmor-01","tpage_name":"level-default-pris"}],[74383372,{"idx":12,"name":"common-black","tpage_name":"sewj-vis-tfrag"}],[56950852,{"idx":68,"name":"waspala-fire-coal","tpage_name":"waspala-tfrag"}],[60686392,{"idx":56,"name":"minc-green-paint-02","tpage_name":"mineb-vis-tfrag"}],[20840496,{"idx":48,"name":"jakchires-teeth","tpage_name":"stadiumb-vis-pris"}],[10879056,{"idx":80,"name":"ctyslumc-billc","tpage_name":"ctyslumb-vis-tfrag"}],[458864,{"idx":112,"name":"jakc-shoetop","tpage_name":"level-default-pris"}],[74383371,{"idx":11,"name":"sewer-pipe-rim-07-hitweak","tpage_name":"sewj-vis-tfrag"}],[56950851,{"idx":67,"name":"waspala-ceiling-frame","tpage_name":"waspala-tfrag"}],[60686391,{"idx":55,"name":"minc-door-metal-01","tpage_name":"mineb-vis-tfrag"}],[20840495,{"idx":47,"name":"jakchires-shoeteop","tpage_name":"stadiumb-vis-pris"}],[10879055,{"idx":79,"name":"ctyslumc-light","tpage_name":"ctyslumb-vis-tfrag"}],[458863,{"idx":111,"name":"jakc-shoeplate","tpage_name":"level-default-pris"}],[74383370,{"idx":10,"name":"sewer-scaffold-03","tpage_name":"sewj-vis-tfrag"}],[60686390,{"idx":54,"name":"minc-door-metal-03","tpage_name":"mineb-vis-tfrag"}],[20840494,{"idx":46,"name":"jakchires-shoemetal","tpage_name":"stadiumb-vis-pris"}],[10879054,{"idx":78,"name":"common-gun-panel-03","tpage_name":"ctyslumb-vis-tfrag"}],[458862,{"idx":110,"name":"jakc-shoebottom","tpage_name":"level-default-pris"}],[8323181,{"idx":109,"name":"fac-lo-hangar-door-01","tpage_name":"ctywide-vis-tfrag"}],[104792140,{"idx":76,"name":"wstlander-04-headband","tpage_name":"desresc-pris"}],[8388612,{"idx":4,"name":"hidelight-lightfade","tpage_name":"ctywide-vis-water"}],[94371856,{"idx":16,"name":"gunbox01","tpage_name":"intpfall-vis-pris"}],[75890729,{"idx":41,"name":"onin-sack","tpage_name":"onintent-tfrag"}],[35127465,{"idx":169,"name":"errolcyber-dirtymetal","tpage_name":"factorya-pris"}],[73728045,{"idx":45,"name":"sewer-metal-block-02-small","tpage_name":"sewh-vis-tfrag"}],[8912911,{"idx":15,"name":"city-slumbase-wall-3","tpage_name":"ctysluma-vis-tfrag"}],[41418841,{"idx":89,"name":"wascity-chimney-hires","tpage_name":"wascitya-vis-tfrag"}],[55115821,{"idx":45,"name":"wascity-cement-road","tpage_name":"wascityb-vis-tfrag"}],[851971,{"idx":3,"name":"vil-beachrock","tpage_name":"halfpipe-tfrag"}],[35389461,{"idx":21,"name":"cguard1-jacketstraps","tpage_name":"introcst-pris"}],[327712,{"idx":32,"name":"mushroom-src","tpage_name":"level-default-water"}],[8323180,{"idx":108,"name":"fac-lo-grey-panel-01","tpage_name":"ctywide-vis-tfrag"}],[104792139,{"idx":75,"name":"wstlander-04-gun","tpage_name":"desresc-pris"}],[8388611,{"idx":3,"name":"security-env-uscroll","tpage_name":"ctywide-vis-water"}],[94371855,{"idx":15,"name":"gunBoxFront01","tpage_name":"intpfall-vis-pris"}],[75890728,{"idx":40,"name":"onin-rug-rolled-top","tpage_name":"onintent-tfrag"}],[35127464,{"idx":168,"name":"errolcyber-chestplate","tpage_name":"factorya-pris"}],[73728044,{"idx":44,"name":"sewer-metal-block-06-slime02","tpage_name":"sewh-vis-tfrag"}],[8912910,{"idx":14,"name":"city-slum-litwindow","tpage_name":"ctysluma-vis-tfrag"}],[41418840,{"idx":88,"name":"wascity-metal-ladder-rung","tpage_name":"wascitya-vis-tfrag"}],[48889920,{"idx":64,"name":"sewer-metal-trim-02","tpage_name":"sewd-vis-tfrag"}],[55115820,{"idx":44,"name":"city-port-bigpipe-ring-side","tpage_name":"wascityb-vis-tfrag"}],[48693250,{"idx":2,"name":"sewer-shrub-pitting-01","tpage_name":"sewb-vis-shrub"}],[21299290,{"idx":90,"name":"tread-interceptor-rhino","tpage_name":"wasall-pris"}],[53739554,{"idx":34,"name":"kgtrns-wing01","tpage_name":"forestb-vis-pris"}],[48758834,{"idx":50,"name":"sewer-lip-01","tpage_name":"sewc-vis-tfrag"}],[851970,{"idx":2,"name":"t1-grass","tpage_name":"halfpipe-tfrag"}],[35389460,{"idx":20,"name":"cguard1-headshield","tpage_name":"introcst-pris"}],[327711,{"idx":31,"name":"mushroom-dest","tpage_name":"level-default-water"}],[8323179,{"idx":107,"name":"fac-lo-grey-panel-02","tpage_name":"ctywide-vis-tfrag"}],[104792138,{"idx":74,"name":"wstlander-04-dark-blue","tpage_name":"desresc-pris"}],[118489118,{"idx":30,"name":"vin-teeth-01","tpage_name":"deshunt-pris2"}],[8388610,{"idx":2,"name":"security-env-dest","tpage_name":"ctywide-vis-water"}],[262279,{"idx":135,"name":"shell-casing-01","tpage_name":"level-default-sprite"}],[327710,{"idx":30,"name":"yellow-laser","tpage_name":"level-default-water"}],[8323175,{"idx":103,"name":"city-lowres-mhcity-tower-01","tpage_name":"ctywide-vis-tfrag"}],[104792134,{"idx":70,"name":"wstlander-02-shirt","tpage_name":"desresc-pris"}],[118489114,{"idx":26,"name":"sig-skirts","tpage_name":"deshunt-pris2"}],[73531395,{"idx":3,"name":"sewer-waterfall-02-i-dest","tpage_name":"sewi-vis-water"}],[48627795,{"idx":83,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewb-vis-tfrag"}],[8323174,{"idx":102,"name":"city-lowres-mhcity-wall-03","tpage_name":"ctywide-vis-tfrag"}],[104792133,{"idx":69,"name":"wstlander-02-scarf","tpage_name":"desresc-pris"}],[118489113,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"deshunt-pris2"}],[262274,{"idx":130,"name":"splash-foam","tpage_name":"level-default-sprite"}],[8323166,{"idx":94,"name":"cityslumc-billc-LOW","tpage_name":"ctywide-vis-tfrag"}],[104792125,{"idx":61,"name":"wstlander-02-arm","tpage_name":"desresc-pris"}],[118489105,{"idx":17,"name":"sig-headgear","tpage_name":"deshunt-pris2"}],[1114177,{"idx":65,"name":"nest-02","tpage_name":"progress-minimap"}],[14811157,{"idx":21,"name":"city-wall-base-rim-02","tpage_name":"ctygenb-vis-tfrag"}],[12320797,{"idx":29,"name":"city-ind-wall-noisy-03","tpage_name":"ctyindb-vis-tfrag"}],[74186765,{"idx":13,"name":"sew-gun-round-01","tpage_name":"sewh-vis-pris"}],[49283165,{"idx":93,"name":"cguard1-guntube","tpage_name":"sewd-vis-pris"}],[262257,{"idx":113,"name":"topglow","tpage_name":"level-default-sprite"}],[35389592,{"idx":152,"name":"jakb-armor","tpage_name":"introcst-pris"}],[20840484,{"idx":36,"name":"jakchires-facert","tpage_name":"stadiumb-vis-pris"}],[10879044,{"idx":68,"name":"ctyslumc-pinetree-big-bark","tpage_name":"ctyslumb-vis-tfrag"}],[458852,{"idx":100,"name":"jakc-hair","tpage_name":"level-default-pris"}],[1114157,{"idx":45,"name":"hud-hourglass","tpage_name":"progress-minimap"}],[14811137,{"idx":1,"name":"city-canal-bottom","tpage_name":"ctygenb-vis-tfrag"}],[12320777,{"idx":9,"name":"city-ind-catwalk-slope-metal","tpage_name":"ctyindb-vis-tfrag"}],[8323186,{"idx":114,"name":"fac-lo-top-01","tpage_name":"ctywide-vis-tfrag"}],[90767376,{"idx":16,"name":"des-palm-top","tpage_name":"deserth-vis-tfrag"}],[74580036,{"idx":68,"name":"strip-black","tpage_name":"sewm-vis-tfrag"}],[262246,{"idx":102,"name":"water-radiate","tpage_name":"level-default-sprite"}],[35389591,{"idx":151,"name":"handcuff-04","tpage_name":"introcst-pris"}],[76480531,{"idx":19,"name":"environment-oldmetal","tpage_name":"freehq-pris"}],[20840483,{"idx":35,"name":"jakchires-facelft","tpage_name":"stadiumb-vis-pris"}],[458851,{"idx":99,"name":"jakc-gogglemetal","tpage_name":"level-default-pris"}],[1114156,{"idx":44,"name":"hud-gunicon-04","tpage_name":"progress-minimap"}],[14811136,{"idx":0,"name":"city-canal","tpage_name":"ctygenb-vis-tfrag"}],[12320776,{"idx":8,"name":"cty-ind-catwalk-panels","tpage_name":"ctyindb-vis-tfrag"}],[8323185,{"idx":113,"name":"fac-lo-red-panel-01","tpage_name":"ctywide-vis-tfrag"}],[90767375,{"idx":15,"name":"des-branch-01","tpage_name":"deserth-vis-tfrag"}],[74580035,{"idx":67,"name":"sewer-nut-rim","tpage_name":"sewm-vis-tfrag"}],[74186753,{"idx":1,"name":"sew-gun-body-01","tpage_name":"sewh-vis-pris"}],[262245,{"idx":101,"name":"water-drops","tpage_name":"level-default-sprite"}],[589827,{"idx":3,"name":"hud-arrow-left-01","tpage_name":"level-default-minimap"}],[115081230,{"idx":14,"name":"terraformer-minestrips-01","tpage_name":"desboss1-pris"}],[8323144,{"idx":72,"name":"palcab-lowres-background-mountains-02","tpage_name":"ctywide-vis-tfrag"}],[8323167,{"idx":95,"name":"cityslumc-awning-LOW","tpage_name":"ctywide-vis-tfrag"}],[262227,{"idx":83,"name":"flame01","tpage_name":"level-default-sprite"}],[21299309,{"idx":109,"name":"vehicle-fox-tread-01-blur","tpage_name":"wasall-pris"}],[57147398,{"idx":6,"name":"king-chest","tpage_name":"waspala-pris2"}],[10879012,{"idx":36,"name":"common-black","tpage_name":"ctyslumb-vis-tfrag"}],[262220,{"idx":76,"name":"suckpart","tpage_name":"level-default-sprite"}],[20840473,{"idx":25,"name":"jakc-wristband-a2","tpage_name":"stadiumb-vis-pris"}],[10879033,{"idx":57,"name":"ctyslumc-wall","tpage_name":"ctyslumb-vis-tfrag"}],[458841,{"idx":89,"name":"jakc-blackstrap","tpage_name":"level-default-pris"}],[20840470,{"idx":22,"name":"jakc-skirt","tpage_name":"stadiumb-vis-pris"}],[458838,{"idx":86,"name":"jakc-armor","tpage_name":"level-default-pris"}],[20840469,{"idx":21,"name":"jakc-scarfhanging","tpage_name":"stadiumb-vis-pris"}],[96927796,{"idx":52,"name":"jinx-scarf","tpage_name":"ltornjnx-pris2"}],[99418156,{"idx":44,"name":"jakchires-lightbrownspat","tpage_name":"volcanox-pris"}],[111869956,{"idx":4,"name":"stadiumb-hud-lap-03","tpage_name":"wasleapr-minimap"}],[8323171,{"idx":99,"name":"city-lowres-mhcity-wall-06","tpage_name":"ctywide-vis-tfrag"}],[104792130,{"idx":66,"name":"wstlander-02-glove","tpage_name":"desresc-pris"}],[118489110,{"idx":22,"name":"sig-sac","tpage_name":"deshunt-pris2"}],[90767361,{"idx":1,"name":"des-totem-stone-01","tpage_name":"deserth-vis-tfrag"}],[74580021,{"idx":53,"name":"sewer-bolt-side-01","tpage_name":"sewm-vis-tfrag"}],[262231,{"idx":87,"name":"lightning-anim-01","tpage_name":"level-default-sprite"}],[20840468,{"idx":20,"name":"jakc-scarf","tpage_name":"stadiumb-vis-pris"}],[8323169,{"idx":97,"name":"ctyslumc-window-panes-LOW","tpage_name":"ctywide-vis-tfrag"}],[104792128,{"idx":64,"name":"wstlander-02-bootheel","tpage_name":"desresc-pris"}],[118489108,{"idx":20,"name":"sig-metal-01","tpage_name":"deshunt-pris2"}],[262229,{"idx":85,"name":"laser-hit-rim","tpage_name":"level-default-sprite"}],[20840466,{"idx":18,"name":"jakc-gogglemetal","tpage_name":"stadiumb-vis-pris"}],[8323168,{"idx":96,"name":"city-tile-LOW","tpage_name":"ctywide-vis-tfrag"}],[104792127,{"idx":63,"name":"wstlander-02-belt","tpage_name":"desresc-pris"}],[118489107,{"idx":19,"name":"sig-lens","tpage_name":"deshunt-pris2"}],[262228,{"idx":84,"name":"laser-hit","tpage_name":"level-default-sprite"}],[20840465,{"idx":17,"name":"jakc-chestplate-straps","tpage_name":"stadiumb-vis-pris"}],[20840464,{"idx":16,"name":"jakc-armor","tpage_name":"stadiumb-vis-pris"}],[8323178,{"idx":106,"name":"fac-lo-red-panel-02","tpage_name":"ctywide-vis-tfrag"}],[104792137,{"idx":73,"name":"wstlander-03-flesh","tpage_name":"desresc-pris"}],[118489117,{"idx":29,"name":"sig-undergarments","tpage_name":"deshunt-pris2"}],[73531398,{"idx":6,"name":"sewer-water-wave-01-i","tpage_name":"sewi-vis-water"}],[74776578,{"idx":2,"name":"airlock-door-main","tpage_name":"sewm-vis-pris"}],[8323164,{"idx":92,"name":"cityslumc-purple-plain","tpage_name":"ctywide-vis-tfrag"}],[104792123,{"idx":59,"name":"wstlander-01-skirt","tpage_name":"desresc-pris"}],[118489103,{"idx":15,"name":"sig-gun-04","tpage_name":"deshunt-pris2"}],[71630879,{"idx":31,"name":"king-wrap","tpage_name":"ldampksm-pris2"}],[262224,{"idx":80,"name":"woodchip","tpage_name":"level-default-sprite"}],[35127407,{"idx":111,"name":"jakchires-blackstrap","tpage_name":"factorya-pris"}],[524290,{"idx":2,"name":"full-moon","tpage_name":"sky-textures"}],[11730951,{"idx":7,"name":"city-ind-overlay-bullethole-c","tpage_name":"ctyinda-vis-shrub"}],[62717952,{"idx":0,"name":"cguardgame-armshield","tpage_name":"ctypesa-pris"}],[49020972,{"idx":44,"name":"sewer-metal-floor-01","tpage_name":"sewe-vis-tfrag"}],[74383367,{"idx":7,"name":"sewer-brick-block-09","tpage_name":"sewj-vis-tfrag"}],[56950847,{"idx":63,"name":"waspala-throne-cushion","tpage_name":"waspala-tfrag"}],[20840491,{"idx":43,"name":"jakchires-pants","tpage_name":"stadiumb-vis-pris"}],[10879051,{"idx":75,"name":"ctyslumc-window-panes2","tpage_name":"ctyslumb-vis-tfrag"}],[458859,{"idx":107,"name":"jakc-pants","tpage_name":"level-default-pris"}],[75890711,{"idx":23,"name":"onin-critter-fur-trans","tpage_name":"onintent-tfrag"}],[11599873,{"idx":1,"name":"sign-onin-knows","tpage_name":"ctyinda-sprite"}],[26542194,{"idx":114,"name":"wstd-mount-post","tpage_name":"wasstada-tfrag"}],[35389502,{"idx":62,"name":"jakb-glovetop","tpage_name":"introcst-pris"}],[458762,{"idx":10,"name":"board-main","tpage_name":"level-default-pris"}],[35651703,{"idx":119,"name":"veger-whitecloth","tpage_name":"introcst-pris2"}],[60555303,{"idx":39,"name":"minc-light","tpage_name":"minea-vis-tfrag"}],[115081248,{"idx":32,"name":"terraformer-cockpit","tpage_name":"desboss1-pris"}],[67829811,{"idx":51,"name":"yavin","tpage_name":"freehq-sprite"}],[983068,{"idx":28,"name":"dk-maker-idol-eye-01","tpage_name":"halfpipe-pris"}],[21299284,{"idx":84,"name":"rhino-horn-02","tpage_name":"wasall-pris"}],[94240868,{"idx":100,"name":"palcab-lowres-background-mountains-02","tpage_name":"intpfall-vis-tfrag"}],[10878987,{"idx":11,"name":"city-slum-litwindow","tpage_name":"ctyslumb-vis-tfrag"}],[262208,{"idx":64,"name":"pal-lightning-red","tpage_name":"level-default-sprite"}],[74514451,{"idx":19,"name":"kg-grunt-cable-01","tpage_name":"sewj-vis-pris"}],[67043371,{"idx":43,"name":"vinroom-tv-text-o","tpage_name":"vinroom-sprite"}],[75759631,{"idx":15,"name":"daxterlense","tpage_name":"onintent-pris"}],[35651692,{"idx":108,"name":"veger-shoebottom","tpage_name":"introcst-pris2"}],[60555292,{"idx":28,"name":"minb-stone20","tpage_name":"minea-vis-tfrag"}],[115081237,{"idx":21,"name":"terraformer-metal-09","tpage_name":"desboss1-pris"}],[589834,{"idx":10,"name":"hud-darkeco-pickup-01","tpage_name":"level-default-minimap"}],[67829800,{"idx":40,"name":"vinroom-tv-text-g","tpage_name":"freehq-sprite"}],[262207,{"idx":63,"name":"pal-lightning","tpage_name":"level-default-sprite"}],[8323146,{"idx":74,"name":"palcab-lowres-background-peaks-01","tpage_name":"ctywide-vis-tfrag"}],[49217539,{"idx":3,"name":"sewer-waterfall-02-c-dest","tpage_name":"sewc-vis-water"}],[262206,{"idx":62,"name":"motion-blur-part","tpage_name":"level-default-sprite"}],[8323145,{"idx":73,"name":"palcab-lowres-background-mountains","tpage_name":"ctywide-vis-tfrag"}],[262205,{"idx":61,"name":"middot","tpage_name":"level-default-sprite"}],[81985557,{"idx":21,"name":"marauder-hand-blue","tpage_name":"wasstadc-pris"}],[26542176,{"idx":96,"name":"wstd-stands-rib","tpage_name":"wasstada-tfrag"}],[16121879,{"idx":23,"name":"city-farm-sprinkle-suppport","tpage_name":"ctyfarma-vis-tfrag"}],[12255240,{"idx":8,"name":"city-ind-wall-noisy-03","tpage_name":"ctyindb-vis-shrub"}],[14745600,{"idx":0,"name":"city-blotch-withstreaks-01","tpage_name":"ctygenb-vis-shrub"}],[262201,{"idx":57,"name":"lasersmoke-31","tpage_name":"level-default-sprite"}],[81985556,{"idx":20,"name":"marauder-gun-tip","tpage_name":"wasstadc-pris"}],[26542175,{"idx":95,"name":"wstd-stands-black","tpage_name":"wasstada-tfrag"}],[16121878,{"idx":22,"name":"city-farm-sprinkle-metal-dirt","tpage_name":"ctyfarma-vis-tfrag"}],[8716357,{"idx":69,"name":"baron-neon-white-e-on","tpage_name":"ctysluma-sprite"}],[60817411,{"idx":3,"name":"minc-plate-01","tpage_name":"mineb-vis-shrub"}],[57081871,{"idx":15,"name":"daxterlense","tpage_name":"waspala-pris"}],[12255239,{"idx":7,"name":"city-ind-wall-noisy-border-05","tpage_name":"ctyindb-vis-shrub"}],[35651685,{"idx":101,"name":"veger-hair","tpage_name":"introcst-pris2"}],[60555285,{"idx":21,"name":"minb-brok-floor","tpage_name":"minea-vis-tfrag"}],[49348665,{"idx":57,"name":"blue-gem","tpage_name":"sewb-vis-pris"}],[262200,{"idx":56,"name":"lasersmoke-30","tpage_name":"level-default-sprite"}],[262199,{"idx":55,"name":"lasersmoke-29","tpage_name":"level-default-sprite"}],[94371926,{"idx":86,"name":"seat01","tpage_name":"intpfall-vis-pris"}],[120520706,{"idx":2,"name":"airlock-door-cog1","tpage_name":"forestx-vis-pris"}],[28049438,{"idx":30,"name":"intr-scalestone-no-alpha01","tpage_name":"intpalrf-tfrag"}],[852015,{"idx":47,"name":"metalcrate-lod04","tpage_name":"halfpipe-tfrag"}],[14548995,{"idx":3,"name":"sign-ctygenb-erol","tpage_name":"ctygenb-sprite"}],[8716359,{"idx":71,"name":"baron-neon-white-long-on","tpage_name":"ctysluma-sprite"}],[60817413,{"idx":5,"name":"minc-rocky-ground-01","tpage_name":"mineb-vis-shrub"}],[49610793,{"idx":41,"name":"sew-metal-floor-01","tpage_name":"sewf-vis-tfrag"}],[57081873,{"idx":17,"name":"daxterteeth","tpage_name":"waspala-pris"}],[11403339,{"idx":75,"name":"common-gun-panel-03","tpage_name":"ctyslumc-vis-tfrag"}],[262198,{"idx":54,"name":"lasersmoke-28","tpage_name":"level-default-sprite"}],[262166,{"idx":22,"name":"gun-yellow-muzzleflash","tpage_name":"level-default-sprite"}],[8323192,{"idx":120,"name":"fac-lo-tower-door-01","tpage_name":"ctywide-vis-tfrag"}],[262165,{"idx":21,"name":"gun-yellow-beam","tpage_name":"level-default-sprite"}],[8323191,{"idx":119,"name":"fac-lo-red-panel-04","tpage_name":"ctywide-vis-tfrag"}],[21299291,{"idx":91,"name":"tread-scorpion","tpage_name":"wasall-pris"}],[94240875,{"idx":107,"name":"tpal-beam01","tpage_name":"intpfall-vis-tfrag"}],[61079631,{"idx":79,"name":"squid-drabgun","tpage_name":"minec-vis-pris"}],[262291,{"idx":147,"name":"colorflash","tpage_name":"level-default-sprite"}],[38862871,{"idx":23,"name":"nsta-cave-sides","tpage_name":"nsta-vis-tfrag"}],[262164,{"idx":20,"name":"gun-enemy-muzzleflash","tpage_name":"level-default-sprite"}],[79364263,{"idx":167,"name":"environment-darkprec","tpage_name":"wasseem-pris"}],[129171463,{"idx":7,"name":"sewer-block-02-hitweak","tpage_name":"sewn-vis-tfrag"}],[262163,{"idx":19,"name":"gun-enemy-beam","tpage_name":"level-default-sprite"}],[262161,{"idx":17,"name":"gun-blue-hit-spek","tpage_name":"level-default-sprite"}],[79364255,{"idx":159,"name":"monk-trim","tpage_name":"wasseem-pris"}],[262155,{"idx":11,"name":"footprntr","tpage_name":"level-default-sprite"}],[103350345,{"idx":73,"name":"pecker-eyelid","tpage_name":"comba-pris"}],[35127352,{"idx":56,"name":"kcfrontend01","tpage_name":"factorya-pris"}],[262312,{"idx":168,"name":"rockbit10","tpage_name":"level-default-sprite"}],[58654727,{"idx":7,"name":"hiphog-neon-clock-hand-small","tpage_name":"hiphog-sprite"}],[262327,{"idx":183,"name":"radial-gradient","tpage_name":"level-default-sprite"}],[10813466,{"idx":26,"name":"ctyslumc-decal-04","tpage_name":"ctyslumb-vis-shrub"}],[8912961,{"idx":65,"name":"city-slum-onintent-siding","tpage_name":"ctysluma-vis-tfrag"}],[43646997,{"idx":21,"name":"rope-mesh-debris-01","tpage_name":"waswide-sprite"}],[35127349,{"idx":53,"name":"hood01","tpage_name":"factorya-pris"}],[262309,{"idx":165,"name":"rockbit07","tpage_name":"level-default-sprite"}],[55115861,{"idx":85,"name":"city-slum-medpipe-02","tpage_name":"wascityb-vis-tfrag"}],[71303201,{"idx":33,"name":"king-bluemetal","tpage_name":"ldamsig-pris2"}],[1114211,{"idx":99,"name":"mine-04","tpage_name":"progress-minimap"}],[14811191,{"idx":55,"name":"city-red","tpage_name":"ctygenb-vis-tfrag"}],[131074,{"idx":2,"name":"war-armor-weathered","tpage_name":"environment-generic"}],[62324736,{"idx":0,"name":"windshield01","tpage_name":"ctycarc-water"}],[48627756,{"idx":44,"name":"sewer-grate-01","tpage_name":"sewb-vis-tfrag"}],[61079556,{"idx":4,"name":"gekko-laser","tpage_name":"minec-vis-pris"}],[95027203,{"idx":3,"name":"sig-belt","tpage_name":"lsigjakc-pris2"}],[91291663,{"idx":15,"name":"gun-bridge-main","tpage_name":"gungame-vis-tfrag"}],[73859143,{"idx":71,"name":"sewer-flat-pipe-01-hitweak","tpage_name":"sewg-vis-tfrag"}],[8323083,{"idx":11,"name":"citywide-palace-support-03","tpage_name":"ctywide-vis-tfrag"}],[852003,{"idx":35,"name":"bluecrate-02","tpage_name":"halfpipe-tfrag"}],[90767374,{"idx":14,"name":"des-palmplant-leaf-02","tpage_name":"deserth-vis-tfrag"}],[74580034,{"idx":66,"name":"sewer-nut","tpage_name":"sewm-vis-tfrag"}],[262244,{"idx":100,"name":"laser-hit2","tpage_name":"level-default-sprite"}],[8323184,{"idx":112,"name":"facb-lo-grey-panel-02","tpage_name":"ctywide-vis-tfrag"}],[104792143,{"idx":79,"name":"wstlander-04-skirt","tpage_name":"desresc-pris"}],[79364257,{"idx":161,"name":"monk-waistwrap","tpage_name":"wasseem-pris"}],[129171457,{"idx":1,"name":"sewer-brick-roof-01-mipping","tpage_name":"sewn-vis-tfrag"}],[262157,{"idx":13,"name":"glow","tpage_name":"level-default-sprite"}],[94371931,{"idx":91,"name":"tpal-horiz-trim02","tpage_name":"intpfall-vis-pris"}],[28049443,{"idx":35,"name":"intr-drain01","tpage_name":"intpalrf-tfrag"}],[10813465,{"idx":25,"name":"ctyslumc-decal-02","tpage_name":"ctyslumb-vis-shrub"}],[8912960,{"idx":64,"name":"city-slum-onintent-skull","tpage_name":"ctysluma-vis-tfrag"}],[11403320,{"idx":56,"name":"stdm-bush-01","tpage_name":"ctyslumc-vis-tfrag"}],[43646996,{"idx":20,"name":"clay-pot-debris-01","tpage_name":"waswide-sprite"}],[42401816,{"idx":24,"name":"wascitya-redish-metal","tpage_name":"wasdoors-vis-tfrag"}],[48627716,{"idx":4,"name":"sewer-hall-light-01","tpage_name":"sewb-vis-tfrag"}],[35127348,{"idx":52,"name":"gunbox02","tpage_name":"factorya-pris"}],[262308,{"idx":164,"name":"rockbit06","tpage_name":"level-default-sprite"}],[94240874,{"idx":106,"name":"tpal-piller-caps01","tpage_name":"intpfall-vis-tfrag"}],[61079630,{"idx":78,"name":"minc-chain-metal-01","tpage_name":"minec-vis-pris"}],[1114210,{"idx":98,"name":"mine-03","tpage_name":"progress-minimap"}],[14811190,{"idx":54,"name":"city-pipe","tpage_name":"ctygenb-vis-tfrag"}],[131073,{"idx":1,"name":"pal-environment-front","tpage_name":"environment-generic"}],[1114209,{"idx":97,"name":"mine-02","tpage_name":"progress-minimap"}],[14811189,{"idx":53,"name":"city-sideframe","tpage_name":"ctygenb-vis-tfrag"}],[131072,{"idx":0,"name":"environment-ocean","tpage_name":"environment-generic"}],[35651596,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"introcst-pris2"}],[393233,{"idx":17,"name":"krimsoncrate-lod03","tpage_name":"level-default-tfrag"}],[79364244,{"idx":148,"name":"monk-maleleg","tpage_name":"wasseem-pris"}],[262144,{"idx":0,"name":"bigpuff","tpage_name":"level-default-sprite"}],[8323084,{"idx":12,"name":"citywide-wall-grey","tpage_name":"ctywide-vis-tfrag"}],[852004,{"idx":36,"name":"bluecrate-lod03","tpage_name":"halfpipe-tfrag"}],[12058624,{"idx":0,"name":"intro-sphere","tpage_name":"ctyindb-sprite"}],[262184,{"idx":40,"name":"lasersmoke-14","tpage_name":"level-default-sprite"}],[79364258,{"idx":162,"name":"monk-wristwrap","tpage_name":"wasseem-pris"}],[129171458,{"idx":2,"name":"sewer-brick-block-11","tpage_name":"sewn-vis-tfrag"}],[262158,{"idx":14,"name":"glow-hotdot","tpage_name":"level-default-sprite"}],[8323172,{"idx":100,"name":"city-lowres-mhcity-wall-05","tpage_name":"ctywide-vis-tfrag"}],[104792131,{"idx":67,"name":"wstlander-02-head","tpage_name":"desresc-pris"}],[118489111,{"idx":23,"name":"sig-shoebottom","tpage_name":"deshunt-pris2"}],[90767362,{"idx":2,"name":"des-cliff-trans-01","tpage_name":"deserth-vis-tfrag"}],[74580022,{"idx":54,"name":"sewer-bolt-side-02","tpage_name":"sewm-vis-tfrag"}],[262232,{"idx":88,"name":"lightning-anim-02","tpage_name":"level-default-sprite"}],[16121898,{"idx":42,"name":"common-black","tpage_name":"ctyfarma-vis-tfrag"}],[262272,{"idx":128,"name":"vol-light","tpage_name":"level-default-sprite"}],[589848,{"idx":24,"name":"hud-gun-red-shell-01","tpage_name":"level-default-minimap"}],[35651597,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"introcst-pris2"}],[393234,{"idx":18,"name":"krimsoncrate-lod04","tpage_name":"level-default-tfrag"}],[8323085,{"idx":13,"name":"citywide-wall-grill","tpage_name":"ctywide-vis-tfrag"}],[12058625,{"idx":1,"name":"sign-fashion2","tpage_name":"ctyindb-sprite"}],[852005,{"idx":37,"name":"bluecrate-04","tpage_name":"halfpipe-tfrag"}],[8323125,{"idx":53,"name":"t-palshaft-roof-01","tpage_name":"ctywide-vis-tfrag"}],[35389469,{"idx":29,"name":"cguard1-sleeve","tpage_name":"introcst-pris"}],[41615369,{"idx":9,"name":"gekko-hose","tpage_name":"wascitya-vis-pris"}],[327720,{"idx":40,"name":"com-rod-01","tpage_name":"level-default-water"}],[95027219,{"idx":19,"name":"sig-lens","tpage_name":"lsigjakc-pris2"}],[91291679,{"idx":31,"name":"gun-building-windowboard-01","tpage_name":"gungame-vis-tfrag"}],[262159,{"idx":15,"name":"glow-soft","tpage_name":"level-default-sprite"}],[8323173,{"idx":101,"name":"common-black","tpage_name":"ctywide-vis-tfrag"}],[104792132,{"idx":68,"name":"wstlander-02-ponytail","tpage_name":"desresc-pris"}],[118489112,{"idx":24,"name":"sig-shoetop","tpage_name":"deshunt-pris2"}],[90767363,{"idx":3,"name":"des-cliff-top-01","tpage_name":"deserth-vis-tfrag"}],[74580023,{"idx":55,"name":"sewer-natural-rock","tpage_name":"sewm-vis-tfrag"}],[262233,{"idx":89,"name":"lightning-anim-03","tpage_name":"level-default-sprite"}],[262294,{"idx":150,"name":"diamond-star","tpage_name":"level-default-sprite"}],[103350343,{"idx":71,"name":"jakchires-teeth","tpage_name":"comba-pris"}],[35127350,{"idx":54,"name":"jetTop01","tpage_name":"factorya-pris"}],[262310,{"idx":166,"name":"rockbit08","tpage_name":"level-default-sprite"}],[55115862,{"idx":86,"name":"city-slum-medpipe-01","tpage_name":"wascityb-vis-tfrag"}],[71303202,{"idx":34,"name":"king-bolt","tpage_name":"ldamsig-pris2"}],[262273,{"idx":129,"name":"splash","tpage_name":"level-default-sprite"}],[38862853,{"idx":5,"name":"nsta-cave-stalags-04","tpage_name":"nsta-vis-tfrag"}],[94371914,{"idx":74,"name":"palace-break-wall04","tpage_name":"intpfall-vis-pris"}],[28049426,{"idx":18,"name":"tpal-met-pip-01","tpage_name":"intpalrf-tfrag"}],[67829766,{"idx":6,"name":"screen-03","tpage_name":"freehq-sprite"}],[106168354,{"idx":34,"name":"cav-stone-01","tpage_name":"mined-tfrag"}],[112394254,{"idx":14,"name":"des-transport-pouch-02","tpage_name":"desrescg-pris"}],[35651598,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"introcst-pris2"}],[393235,{"idx":19,"name":"life-crate","tpage_name":"level-default-tfrag"}],[95027206,{"idx":6,"name":"sig-faceleft","tpage_name":"lsigjakc-pris2"}],[91291666,{"idx":18,"name":"gun-building-door-01","tpage_name":"gungame-vis-tfrag"}],[73859146,{"idx":74,"name":"sewer-brick-block-04-hitweak","tpage_name":"sewg-vis-tfrag"}],[8323086,{"idx":14,"name":"citywide-wall-greydrain","tpage_name":"ctywide-vis-tfrag"}],[852006,{"idx":38,"name":"bluecrate-01","tpage_name":"halfpipe-tfrag"}],[12058626,{"idx":2,"name":"sign-onin-knows","tpage_name":"ctyindb-sprite"}],[262170,{"idx":26,"name":"lasersmoke-00","tpage_name":"level-default-sprite"}],[262210,{"idx":66,"name":"rod-of-god","tpage_name":"level-default-sprite"}],[94240863,{"idx":95,"name":"palcab-lowres-background-strip","tpage_name":"intpfall-vis-tfrag"}],[90767377,{"idx":17,"name":"des-palm-leaf-01","tpage_name":"deserth-vis-tfrag"}],[74580037,{"idx":69,"name":"sewer-mantel-02","tpage_name":"sewm-vis-tfrag"}],[74186755,{"idx":3,"name":"sew-gun-panel-05","tpage_name":"sewh-vis-pris"}],[262247,{"idx":103,"name":"explosion-edge","tpage_name":"level-default-sprite"}],[8323187,{"idx":115,"name":"fac-lo-bldng-panel-02","tpage_name":"ctywide-vis-tfrag"}],[95027220,{"idx":20,"name":"sig-metal-01","tpage_name":"lsigjakc-pris2"}],[91291680,{"idx":32,"name":"gun-cover","tpage_name":"gungame-vis-tfrag"}],[262160,{"idx":16,"name":"gun-blue-beam","tpage_name":"level-default-sprite"}],[103350344,{"idx":72,"name":"pecker-body-01","tpage_name":"comba-pris"}],[35127351,{"idx":55,"name":"jets01","tpage_name":"factorya-pris"}],[262311,{"idx":167,"name":"rockbit09","tpage_name":"level-default-sprite"}],[58654726,{"idx":6,"name":"hiphog-neon-clock-hand","tpage_name":"hiphog-sprite"}],[94371915,{"idx":75,"name":"palace-break-wall05","tpage_name":"intpfall-vis-pris"}],[28049427,{"idx":19,"name":"thrm-shield-01","tpage_name":"intpalrf-tfrag"}],[35651599,{"idx":15,"name":"ashelin-gunholster","tpage_name":"introcst-pris2"}],[393236,{"idx":20,"name":"life-crate-alpha-green","tpage_name":"level-default-tfrag"}],[95027207,{"idx":7,"name":"sig-facert","tpage_name":"lsigjakc-pris2"}],[73859147,{"idx":75,"name":"sewer-block-01-hitweak","tpage_name":"sewg-vis-tfrag"}],[8323087,{"idx":15,"name":"citywide-wall-brown-strip","tpage_name":"ctywide-vis-tfrag"}],[852007,{"idx":39,"name":"bluecrate-lod02","tpage_name":"halfpipe-tfrag"}],[12058627,{"idx":3,"name":"sign-praxis-banner","tpage_name":"ctyindb-sprite"}],[262187,{"idx":43,"name":"lasersmoke-17","tpage_name":"level-default-sprite"}],[262171,{"idx":27,"name":"lasersmoke-01","tpage_name":"level-default-sprite"}],[73990152,{"idx":8,"name":"sew-mine-b-body","tpage_name":"sewh-vis-shrub"}],[76480512,{"idx":0,"name":"bam-eyelight","tpage_name":"freehq-pris"}],[35127393,{"idx":97,"name":"daxterteeth","tpage_name":"factorya-pris"}],[262162,{"idx":18,"name":"gun-blue-puffs","tpage_name":"level-default-sprite"}],[8323176,{"idx":104,"name":"city-lowres-mhcity-tower-02","tpage_name":"ctywide-vis-tfrag"}],[104792135,{"idx":71,"name":"wstlander-02-skirt","tpage_name":"desresc-pris"}],[118489115,{"idx":27,"name":"sig-skirts-02","tpage_name":"deshunt-pris2"}],[73531396,{"idx":4,"name":"sewer-water-still-01-i","tpage_name":"sewi-vis-water"}],[74776576,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewm-vis-pris"}],[90767366,{"idx":6,"name":"des-cliff-top-03","tpage_name":"deserth-vis-tfrag"}],[74580026,{"idx":58,"name":"sewer-block-02-hitweak","tpage_name":"sewm-vis-tfrag"}],[262236,{"idx":92,"name":"dirtpuff01","tpage_name":"level-default-sprite"}],[589846,{"idx":22,"name":"hud-gun-purple-shell-01","tpage_name":"level-default-minimap"}],[35651595,{"idx":11,"name":"ashelin-glove","tpage_name":"introcst-pris2"}],[393232,{"idx":16,"name":"krimsoncrate-lod02","tpage_name":"level-default-tfrag"}],[11403384,{"idx":120,"name":"lfacrm-girder-01","tpage_name":"ctyslumc-vis-tfrag"}],[48758784,{"idx":0,"name":"sewer-metal-block-06","tpage_name":"sewc-vis-tfrag"}],[52297777,{"idx":49,"name":"freehq-wal-plate01","tpage_name":"freehq-tfrag"}],[61014037,{"idx":21,"name":"minc-yel-paint-rust01","tpage_name":"minec-vis-shrub"}],[48562237,{"idx":61,"name":"jakchires-arm","tpage_name":"sewa-vis-pris"}],[62259217,{"idx":17,"name":"light01","tpage_name":"ctycarc-pris"}],[8323072,{"idx":0,"name":"citywide-metal-wall-1","tpage_name":"ctywide-vis-tfrag"}],[851992,{"idx":24,"name":"common_sandstone_base01","tpage_name":"halfpipe-tfrag"}],[262172,{"idx":28,"name":"lasersmoke-02","tpage_name":"level-default-sprite"}],[8323152,{"idx":80,"name":"can-cap","tpage_name":"ctywide-vis-tfrag"}],[49217545,{"idx":9,"name":"sewer-water-wave-01-c-dest","tpage_name":"sewc-vis-water"}],[71630867,{"idx":19,"name":"king-lgblackstrap","tpage_name":"ldampksm-pris2"}],[94240865,{"idx":97,"name":"palcab-lowres-background-grass-to-desert-01","tpage_name":"intpfall-vis-tfrag"}],[11337755,{"idx":27,"name":"ctyslumc-wall","tpage_name":"ctyslumc-vis-shrub"}],[35651657,{"idx":73,"name":"king-precursermetal-trim2","tpage_name":"introcst-pris2"}],[35651697,{"idx":113,"name":"veger-stickwrap","tpage_name":"introcst-pris2"}],[60555297,{"idx":33,"name":"minc-base-metal-platfrom-01","tpage_name":"minea-vis-tfrag"}],[100728835,{"idx":3,"name":"sig-belt","tpage_name":"ljaksig-pris2"}],[88277035,{"idx":43,"name":"cguard-air-train-inside-wall","tpage_name":"introcst-tfrag"}],[8323200,{"idx":128,"name":"bluecrate-02","tpage_name":"ctywide-vis-tfrag"}],[115081242,{"idx":26,"name":"terraformer-bodyside-bottom","tpage_name":"desboss1-pris"}],[79364249,{"idx":153,"name":"monk-pipeend","tpage_name":"wasseem-pris"}],[262149,{"idx":5,"name":"crate-metalbolt-splinter","tpage_name":"level-default-sprite"}],[262183,{"idx":39,"name":"lasersmoke-13","tpage_name":"level-default-sprite"}],[8323123,{"idx":51,"name":"t-palshaft-dirt-blue-01","tpage_name":"ctywide-vis-tfrag"}],[100728846,{"idx":14,"name":"sig-gun-03","tpage_name":"ljaksig-pris2"}],[99483666,{"idx":18,"name":"turret-metal-red","tpage_name":"lformach-vis-pris"}],[49086475,{"idx":11,"name":"sewer-plate-05","tpage_name":"sewe-vis-shrub"}],[35389495,{"idx":55,"name":"jakb-brownleather","tpage_name":"introcst-pris"}],[41615395,{"idx":35,"name":"was-dogat-tail","tpage_name":"wascitya-vis-pris"}],[35651658,{"idx":74,"name":"king-precursermetal-trimbolt","tpage_name":"introcst-pris2"}],[35651698,{"idx":114,"name":"veger-teeth","tpage_name":"introcst-pris2"}],[60555298,{"idx":34,"name":"minc-metal-patch-01","tpage_name":"minea-vis-tfrag"}],[100728836,{"idx":4,"name":"sig-eye","tpage_name":"ljaksig-pris2"}],[88277036,{"idx":44,"name":"cguard-air-train-inside-mechanical","tpage_name":"introcst-tfrag"}],[8323201,{"idx":129,"name":"bluecrate-lod03","tpage_name":"ctywide-vis-tfrag"}],[115081243,{"idx":27,"name":"terraformer-bodyside-top","tpage_name":"desboss1-pris"}],[79364250,{"idx":154,"name":"monk-redjewel","tpage_name":"wasseem-pris"}],[262150,{"idx":6,"name":"crate-wood-01-splinter","tpage_name":"level-default-sprite"}],[94371873,{"idx":33,"name":"palace-break-bigwall07","tpage_name":"intpfall-vis-pris"}],[75890746,{"idx":58,"name":"onin-tent","tpage_name":"onintent-tfrag"}],[81723493,{"idx":101,"name":"jakchires-hair","tpage_name":"ljndklev-pris"}],[48562249,{"idx":73,"name":"jakchires-hair","tpage_name":"sewa-vis-pris"}],[67239949,{"idx":13,"name":"vin-floor-04","tpage_name":"vinroom-vis-tfrag"}],[52297789,{"idx":61,"name":"freehq-pipe02","tpage_name":"freehq-tfrag"}],[57278509,{"idx":45,"name":"metalflut-roll","tpage_name":"waswide-vis-pris"}],[94371899,{"idx":59,"name":"palace-break-roof03","tpage_name":"intpfall-vis-pris"}],[28049411,{"idx":3,"name":"tpal-beam-redstripe01","tpage_name":"intpalrf-tfrag"}],[61669394,{"idx":18,"name":"fora-precursor-metal-plain-01dk","tpage_name":"foresta-vis-shrub"}],[89587717,{"idx":5,"name":"pecker-tail","tpage_name":"lwstdpck-pris"}],[75890737,{"idx":49,"name":"onin-table","tpage_name":"onintent-tfrag"}],[851988,{"idx":20,"name":"common_sandstone_ground01","tpage_name":"halfpipe-tfrag"}],[11403372,{"idx":108,"name":"ctyslumc-wall-colored2","tpage_name":"ctyslumc-vis-tfrag"}],[41287692,{"idx":12,"name":"wstd-shrub-pebbles","tpage_name":"wasstada-shrub"}],[52297765,{"idx":37,"name":"freehq-ground-tile-set1-rtc","tpage_name":"freehq-tfrag"}],[61014025,{"idx":9,"name":"minc-platfrom-metal-01","tpage_name":"minec-vis-shrub"}],[62259205,{"idx":5,"name":"gunBoxBack01","tpage_name":"ctycarc-pris"}],[458755,{"idx":3,"name":"bam-leather-belt","tpage_name":"level-default-pris"}],[28114947,{"idx":3,"name":"tpal-piller-caps01","tpage_name":"intpalrf-shrub"}],[16908327,{"idx":39,"name":"citywide-wall-frame","tpage_name":"ctyfarmb-vis-tfrag"}],[117637209,{"idx":89,"name":"jakchires-arm","tpage_name":"destrack-pris"}],[262278,{"idx":134,"name":"laser-hit2-add","tpage_name":"level-default-sprite"}],[38862858,{"idx":10,"name":"nsta-cave-floor-01","tpage_name":"nsta-vis-tfrag"}],[79364251,{"idx":155,"name":"monk-rope","tpage_name":"wasseem-pris"}],[262151,{"idx":7,"name":"explosion-nebula","tpage_name":"level-default-sprite"}],[94371900,{"idx":60,"name":"palace-break-rooftile","tpage_name":"intpfall-vis-pris"}],[28049412,{"idx":4,"name":"tpal-flaps01","tpage_name":"intpalrf-tfrag"}],[851989,{"idx":21,"name":"common_sandstone_taper01","tpage_name":"halfpipe-tfrag"}],[35651584,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"introcst-pris2"}],[11403373,{"idx":109,"name":"cityslumc-metal-trim","tpage_name":"ctyslumc-vis-tfrag"}],[52297766,{"idx":38,"name":"freehq-monitor05","tpage_name":"freehq-tfrag"}],[61014026,{"idx":10,"name":"minc-blue-paint-rust01","tpage_name":"minec-vis-shrub"}],[62259206,{"idx":6,"name":"gunBoxFront01","tpage_name":"ctycarc-pris"}],[35389496,{"idx":56,"name":"jakb-clips","tpage_name":"introcst-pris"}],[41615396,{"idx":36,"name":"was-kangalizard-body","tpage_name":"wascitya-vis-pris"}],[49086476,{"idx":12,"name":"sewer-metal-block-06","tpage_name":"sewe-vis-shrub"}],[458756,{"idx":4,"name":"board-blueglow","tpage_name":"level-default-pris"}],[112394284,{"idx":44,"name":"intcept-b-base-patern01","tpage_name":"desrescg-pris"}],[118620184,{"idx":24,"name":"jakchires-glovetop","tpage_name":"ljkcdmkl-pris"}],[121110544,{"idx":16,"name":"hip-tredmetal09","tpage_name":"hiphog-vis-tfrag"}],[262168,{"idx":24,"name":"hotdot","tpage_name":"level-default-sprite"}],[262202,{"idx":58,"name":"lightning-darkjak","tpage_name":"level-default-sprite"}],[8323142,{"idx":70,"name":"palcab-lowres-background-hilltops-01","tpage_name":"ctywide-vis-tfrag"}],[71630857,{"idx":9,"name":"king-earing","tpage_name":"ldampksm-pris2"}],[94371917,{"idx":77,"name":"palace-break-wall07","tpage_name":"intpfall-vis-pris"}],[28049429,{"idx":21,"name":"troof-beam01","tpage_name":"intpalrf-tfrag"}],[35651601,{"idx":17,"name":"ashelin-handle-01","tpage_name":"introcst-pris2"}],[393238,{"idx":22,"name":"life-crate-plain","tpage_name":"level-default-tfrag"}],[262169,{"idx":25,"name":"lakedrop","tpage_name":"level-default-sprite"}],[262203,{"idx":59,"name":"green-lightning","tpage_name":"level-default-sprite"}],[8323143,{"idx":71,"name":"palcab-lowres-background-peaks-02","tpage_name":"ctywide-vis-tfrag"}],[8323183,{"idx":111,"name":"fac-lo-tower-base-01","tpage_name":"ctywide-vis-tfrag"}],[104792142,{"idx":78,"name":"wstlander-04-shirt-strap","tpage_name":"desresc-pris"}],[90767373,{"idx":13,"name":"des-palmtree-beard","tpage_name":"deserth-vis-tfrag"}],[74580033,{"idx":65,"name":"sewer-black","tpage_name":"sewm-vis-tfrag"}],[262243,{"idx":99,"name":"hitspark","tpage_name":"level-default-sprite"}],[8323073,{"idx":1,"name":"city-dirtywood","tpage_name":"ctywide-vis-tfrag"}],[851993,{"idx":25,"name":"environment-darkprec","tpage_name":"halfpipe-tfrag"}],[262173,{"idx":29,"name":"lasersmoke-03","tpage_name":"level-default-sprite"}],[8323153,{"idx":81,"name":"can-knob","tpage_name":"ctywide-vis-tfrag"}],[71630868,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"ldampksm-pris2"}],[94240866,{"idx":98,"name":"palcab-lowres-background-crater-01","tpage_name":"intpfall-vis-tfrag"}],[11337756,{"idx":28,"name":"ctyslumc-light","tpage_name":"ctyslumc-vis-shrub"}],[17563656,{"idx":8,"name":"hiphog-exterior-orange","tpage_name":"ctyport-sprite"}],[8323074,{"idx":2,"name":"citywide-slum-roof","tpage_name":"ctywide-vis-tfrag"}],[851994,{"idx":26,"name":"dk-eco-vent-glow-01","tpage_name":"halfpipe-tfrag"}],[8323114,{"idx":42,"name":"t-citywide-wall-tile-01","tpage_name":"ctywide-vis-tfrag"}],[262174,{"idx":30,"name":"lasersmoke-04","tpage_name":"level-default-sprite"}],[8323154,{"idx":82,"name":"can-type","tpage_name":"ctywide-vis-tfrag"}],[49217547,{"idx":11,"name":"sewer-waterfall-01-c","tpage_name":"sewc-vis-water"}],[71630869,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"ldampksm-pris2"}],[8323075,{"idx":3,"name":"city-slum-roof","tpage_name":"ctywide-vis-tfrag"}],[851995,{"idx":27,"name":"dk-eco-vent-side-01","tpage_name":"halfpipe-tfrag"}],[8323115,{"idx":43,"name":"palcab-lowres-background-rocksnow2","tpage_name":"ctywide-vis-tfrag"}],[262175,{"idx":31,"name":"lasersmoke-05","tpage_name":"level-default-sprite"}],[100728838,{"idx":6,"name":"sig-faceleft","tpage_name":"ljaksig-pris2"}],[88277038,{"idx":46,"name":"cguard-air-train-side2","tpage_name":"introcst-tfrag"}],[8323203,{"idx":131,"name":"bluecrate-01","tpage_name":"ctywide-vis-tfrag"}],[89587722,{"idx":10,"name":"bam-hairhilite","tpage_name":"lwstdpck-pris"}],[75890742,{"idx":54,"name":"onin-tank-metal","tpage_name":"onintent-tfrag"}],[589839,{"idx":15,"name":"hud-egg-glow","tpage_name":"level-default-minimap"}],[35651588,{"idx":4,"name":"ashelin-cglogo","tpage_name":"introcst-pris2"}],[14745603,{"idx":3,"name":"city-dirt-overlay","tpage_name":"ctygenb-vis-shrub"}],[12255243,{"idx":11,"name":"city-ind-overlay-bullethole-c","tpage_name":"ctyindb-vis-shrub"}],[11403377,{"idx":113,"name":"ctyslumc-window-panes-LOW","tpage_name":"ctyslumc-vis-tfrag"}],[52297770,{"idx":42,"name":"freehq-panel-06","tpage_name":"freehq-tfrag"}],[48562230,{"idx":54,"name":"jakc-chestplate-straps","tpage_name":"sewa-vis-pris"}],[61014030,{"idx":14,"name":"minc-falngplat-lorez","tpage_name":"minec-vis-shrub"}],[62259210,{"idx":10,"name":"jetTop01","tpage_name":"ctycarc-pris"}],[8323076,{"idx":4,"name":"citywide-metal-wall","tpage_name":"ctywide-vis-tfrag"}],[8323116,{"idx":44,"name":"palcab-lowres-background-rocksnow","tpage_name":"ctywide-vis-tfrag"}],[262176,{"idx":32,"name":"lasersmoke-06","tpage_name":"level-default-sprite"}],[94240869,{"idx":101,"name":"palcab-lowres-background-mountains","tpage_name":"intpfall-vis-tfrag"}],[8323077,{"idx":5,"name":"city-bluelight","tpage_name":"ctywide-vis-tfrag"}],[1114195,{"idx":83,"name":"stadium-04","tpage_name":"progress-minimap"}],[14811175,{"idx":39,"name":"city-bluelight","tpage_name":"ctygenb-vis-tfrag"}],[12320815,{"idx":47,"name":"city-ind-buldge-light-01","tpage_name":"ctyindb-vis-tfrag"}],[16711680,{"idx":0,"name":"city-farm-treetop","tpage_name":"ctyfarmb-vis-alpha"}],[262177,{"idx":33,"name":"lasersmoke-07","tpage_name":"level-default-sprite"}],[94240870,{"idx":102,"name":"palcab-lowres-background-shoreline-02","tpage_name":"intpfall-vis-tfrag"}],[94240864,{"idx":96,"name":"palcab-smallpipe","tpage_name":"intpfall-vis-tfrag"}],[11337754,{"idx":26,"name":"ctyslumc-decal-04","tpage_name":"ctyslumc-vis-shrub"}],[8847394,{"idx":34,"name":"wascity-ground-01","tpage_name":"ctysluma-vis-shrub"}],[8323151,{"idx":79,"name":"palcab-lowres-background-hills-01","tpage_name":"ctywide-vis-tfrag"}],[49217544,{"idx":8,"name":"sewer-waterfall-01-c-dest","tpage_name":"sewc-vis-water"}],[71630866,{"idx":18,"name":"king-leg","tpage_name":"ldampksm-pris2"}],[65537,{"idx":1,"name":"autoeye-lid","tpage_name":"common"}],[35651590,{"idx":6,"name":"ashelin-chest","tpage_name":"introcst-pris2"}],[8323078,{"idx":6,"name":"citywide-wall-mainmetal","tpage_name":"ctywide-vis-tfrag"}],[14811176,{"idx":40,"name":"city-roofmetal","tpage_name":"ctygenb-vis-tfrag"}],[12320816,{"idx":48,"name":"city-ind-buldge-light-self-illuminated-01","tpage_name":"ctyindb-vis-tfrag"}],[16711681,{"idx":1,"name":"city-farm-treetop-02","tpage_name":"ctyfarmb-vis-alpha"}],[8323118,{"idx":46,"name":"citywide-consite-steel","tpage_name":"ctywide-vis-tfrag"}],[262178,{"idx":34,"name":"lasersmoke-08","tpage_name":"level-default-sprite"}],[262218,{"idx":74,"name":"specs","tpage_name":"level-default-sprite"}],[94240871,{"idx":103,"name":"tpal-panl_piller01","tpage_name":"intpfall-vis-tfrag"}],[61079627,{"idx":75,"name":"squid-bulb-sm","tpage_name":"minec-vis-pris"}],[11337761,{"idx":33,"name":"cityslumc-grass-yellow","tpage_name":"ctyslumc-vis-shrub"}],[17563661,{"idx":13,"name":"hiphog-exterior-yellow-on","tpage_name":"ctyport-sprite"}],[74186774,{"idx":22,"name":"sewer-pipe-rim-05","tpage_name":"sewh-vis-pris"}],[49283174,{"idx":102,"name":"widow-dull-inards","tpage_name":"sewd-vis-pris"}],[262266,{"idx":122,"name":"shockwave","tpage_name":"level-default-sprite"}],[100728841,{"idx":9,"name":"sig-gem-01","tpage_name":"ljaksig-pris2"}],[99483661,{"idx":13,"name":"turret-controls","tpage_name":"lformach-vis-pris"}],[88277041,{"idx":49,"name":"cguard-air-train-inside-floor","tpage_name":"introcst-tfrag"}],[35651591,{"idx":7,"name":"ashelin-eye","tpage_name":"introcst-pris2"}],[8323079,{"idx":7,"name":"citywide-wall-boltedmetal","tpage_name":"ctywide-vis-tfrag"}],[14811177,{"idx":41,"name":"city-roof-tile","tpage_name":"ctygenb-vis-tfrag"}],[12320817,{"idx":49,"name":"city-ind-wall-base-07","tpage_name":"ctyindb-vis-tfrag"}],[16711682,{"idx":2,"name":"city-farm-road-01","tpage_name":"ctyfarmb-vis-alpha"}],[262179,{"idx":35,"name":"lasersmoke-09","tpage_name":"level-default-sprite"}],[262219,{"idx":75,"name":"starflash","tpage_name":"level-default-sprite"}],[94240872,{"idx":104,"name":"tpal-beam-red-yellow01","tpage_name":"intpfall-vis-tfrag"}],[61079628,{"idx":76,"name":"widow-dull-inards","tpage_name":"minec-vis-pris"}],[11337762,{"idx":34,"name":"cityslumc-gold-trim","tpage_name":"ctyslumc-vis-shrub"}],[17563662,{"idx":14,"name":"sign-arrows","tpage_name":"ctyport-sprite"}],[589843,{"idx":19,"name":"hud-gun-blue-shell-01","tpage_name":"level-default-minimap"}],[35651592,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"introcst-pris2"}],[8323080,{"idx":8,"name":"citywide-wall-frame","tpage_name":"ctywide-vis-tfrag"}],[14811178,{"idx":42,"name":"city-sidewall-2","tpage_name":"ctygenb-vis-tfrag"}],[12320818,{"idx":50,"name":"city-ind-wall-05","tpage_name":"ctyindb-vis-tfrag"}],[16711683,{"idx":3,"name":"city-farm-road-blend-to-alpha-01","tpage_name":"ctyfarmb-vis-alpha"}],[262180,{"idx":36,"name":"lasersmoke-10","tpage_name":"level-default-sprite"}],[11468800,{"idx":0,"name":"map-ctyinda","tpage_name":"ctyinda-minimap"}],[589844,{"idx":20,"name":"hud-gun-empty-shell-01","tpage_name":"level-default-minimap"}],[35651593,{"idx":9,"name":"ashelin-eyelid","tpage_name":"introcst-pris2"}],[11403382,{"idx":118,"name":"lfacrm-plate-05","tpage_name":"ctyslumc-vis-tfrag"}],[52297775,{"idx":47,"name":"freehq-floor-walk-set02","tpage_name":"freehq-tfrag"}],[62259215,{"idx":15,"name":"kcfrontend01","tpage_name":"ctycarc-pris"}],[48562235,{"idx":59,"name":"jakc-wraps","tpage_name":"sewa-vis-pris"}],[65994755,{"idx":3,"name":"enemy-tracer","tpage_name":"intpfall-sprite"}],[61014035,{"idx":19,"name":"minc-blue-white-paint-safe-rust04","tpage_name":"minec-vis-shrub"}],[95027201,{"idx":1,"name":"charHOLD","tpage_name":"lsigjakc-pris2"}],[91291661,{"idx":13,"name":"gun-blue-mag","tpage_name":"gungame-vis-tfrag"}],[73859141,{"idx":69,"name":"strip-black","tpage_name":"sewg-vis-tfrag"}],[8323081,{"idx":9,"name":"citywide-wall-orange-plain","tpage_name":"ctywide-vis-tfrag"}],[262181,{"idx":37,"name":"lasersmoke-11","tpage_name":"level-default-sprite"}],[35651594,{"idx":10,"name":"ashelin-face","tpage_name":"introcst-pris2"}],[393231,{"idx":15,"name":"krimsoncrate-05","tpage_name":"level-default-tfrag"}],[11403383,{"idx":119,"name":"lfacrm-rubber-01","tpage_name":"ctyslumc-vis-tfrag"}],[8323082,{"idx":10,"name":"citywide-wall-greybolts","tpage_name":"ctywide-vis-tfrag"}],[35651602,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"introcst-pris2"}],[112394252,{"idx":12,"name":"des-transport-plate-02","tpage_name":"desrescg-pris"}],[393239,{"idx":23,"name":"skull-gem-alpha-00","tpage_name":"level-default-tfrag"}],[262190,{"idx":46,"name":"lasersmoke-20","tpage_name":"level-default-sprite"}],[852008,{"idx":40,"name":"bluecrate-lod04","tpage_name":"halfpipe-tfrag"}],[35651603,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"introcst-pris2"}],[112394253,{"idx":13,"name":"des-transport-pouch-01","tpage_name":"desrescg-pris"}],[64225282,{"idx":2,"name":"for-shrub-moss","tpage_name":"waspala-shrub"}],[393240,{"idx":24,"name":"skull-gem-alpha-01","tpage_name":"level-default-tfrag"}],[262191,{"idx":47,"name":"lasersmoke-21","tpage_name":"level-default-sprite"}],[852009,{"idx":41,"name":"metalcrate-02","tpage_name":"halfpipe-tfrag"}],[35651604,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"introcst-pris2"}],[64225283,{"idx":3,"name":"waspala-shrub-plant","tpage_name":"waspala-shrub"}],[393241,{"idx":25,"name":"skull-gem-alpha-02","tpage_name":"level-default-tfrag"}],[11403379,{"idx":115,"name":"city-tile-LOW","tpage_name":"ctyslumc-vis-tfrag"}],[52297772,{"idx":44,"name":"freehq-floor-tile-set01","tpage_name":"freehq-tfrag"}],[65994752,{"idx":0,"name":"seagull-wing","tpage_name":"intpfall-sprite"}],[48562232,{"idx":56,"name":"jakc-lens","tpage_name":"sewa-vis-pris"}],[61014032,{"idx":16,"name":"minc-yel-safe-paint-rust01","tpage_name":"minec-vis-shrub"}],[76480608,{"idx":96,"name":"jakchires-jacket","tpage_name":"freehq-pris"}],[106364928,{"idx":0,"name":"bam-eyelight","tpage_name":"mined-pris2"}],[852010,{"idx":42,"name":"metalcrate-05","tpage_name":"halfpipe-tfrag"}],[35651605,{"idx":21,"name":"ashelin-pantstop","tpage_name":"introcst-pris2"}],[112394255,{"idx":15,"name":"des-transport-pouch-03","tpage_name":"desrescg-pris"}],[393242,{"idx":26,"name":"skull-gem-alpha-03","tpage_name":"level-default-tfrag"}],[11403380,{"idx":116,"name":"ctyslumc-wall-trim-LOW","tpage_name":"ctyslumc-vis-tfrag"}],[52297773,{"idx":45,"name":"freehq-floor-tile-set02","tpage_name":"freehq-tfrag"}],[48562233,{"idx":57,"name":"jakc-scarf","tpage_name":"sewa-vis-pris"}],[65994753,{"idx":1,"name":"palcab-blue-rotaters","tpage_name":"intpfall-sprite"}],[61014033,{"idx":17,"name":"minc-rust-02","tpage_name":"minec-vis-shrub"}],[76480609,{"idx":97,"name":"jakchires-leatherpouch","tpage_name":"freehq-pris"}],[106364929,{"idx":1,"name":"bam-hairhilite","tpage_name":"mined-pris2"}],[94371922,{"idx":82,"name":"palace-break-winwall01","tpage_name":"intpfall-vis-pris"}],[28049434,{"idx":26,"name":"intr-horiz-trim02","tpage_name":"intpalrf-tfrag"}],[67829774,{"idx":14,"name":"screen-11","tpage_name":"freehq-sprite"}],[71565314,{"idx":2,"name":"pecker-eyelid","tpage_name":"ldampksm-pris"}],[8912951,{"idx":55,"name":"city-slum-crater-blend-01","tpage_name":"ctysluma-vis-tfrag"}],[852011,{"idx":43,"name":"metalcrate-04","tpage_name":"halfpipe-tfrag"}],[262194,{"idx":50,"name":"lasersmoke-24","tpage_name":"level-default-sprite"}],[11403381,{"idx":117,"name":"city-ind-black","tpage_name":"ctyslumc-vis-tfrag"}],[52297774,{"idx":46,"name":"freehq-floor-walk-set01","tpage_name":"freehq-tfrag"}],[61014034,{"idx":18,"name":"minc-blue-paint-02","tpage_name":"minec-vis-shrub"}],[48562234,{"idx":58,"name":"jakc-waistband2","tpage_name":"sewa-vis-pris"}],[65994754,{"idx":2,"name":"edgeglow","tpage_name":"intpfall-sprite"}],[76480610,{"idx":98,"name":"jakchires-lightbrownspat","tpage_name":"freehq-pris"}],[106364930,{"idx":2,"name":"environment-oldmetal","tpage_name":"mined-pris2"}],[8323135,{"idx":63,"name":"t-palshaft-plate01","tpage_name":"ctywide-vis-tfrag"}],[71630850,{"idx":2,"name":"king-arm","tpage_name":"ldampksm-pris2"}],[262195,{"idx":51,"name":"lasersmoke-25","tpage_name":"level-default-sprite"}],[8323136,{"idx":64,"name":"ctywide-ox-met-01","tpage_name":"ctywide-vis-tfrag"}],[71630851,{"idx":3,"name":"king-blackskirt2","tpage_name":"ldampksm-pris2"}],[262196,{"idx":52,"name":"lasersmoke-26","tpage_name":"level-default-sprite"}],[94371925,{"idx":85,"name":"rail01","tpage_name":"intpfall-vis-pris"}],[120520705,{"idx":1,"name":"airlock-door-cog","tpage_name":"forestx-vis-pris"}],[28049437,{"idx":29,"name":"intr-beam-no-alpha01","tpage_name":"intpalrf-tfrag"}],[852014,{"idx":46,"name":"metalcrate-lod03","tpage_name":"halfpipe-tfrag"}],[14548994,{"idx":2,"name":"sign-ctygenb-arrows","tpage_name":"ctygenb-sprite"}],[8716358,{"idx":70,"name":"baron-neon-white-long","tpage_name":"ctysluma-sprite"}],[60817412,{"idx":4,"name":"minb-stone26","tpage_name":"mineb-vis-shrub"}],[49610792,{"idx":40,"name":"sewer-plate-04","tpage_name":"sewf-vis-tfrag"}],[57081872,{"idx":16,"name":"daxternose","tpage_name":"waspala-pris"}],[11403338,{"idx":74,"name":"ctyslumc-light-blue","tpage_name":"ctyslumc-vis-tfrag"}],[8323137,{"idx":65,"name":"citywide-exhaust-body","tpage_name":"ctywide-vis-tfrag"}],[71630852,{"idx":4,"name":"king-bluemetal","tpage_name":"ldampksm-pris2"}],[262197,{"idx":53,"name":"lasersmoke-27","tpage_name":"level-default-sprite"}],[8716360,{"idx":72,"name":"sign-blank","tpage_name":"ctysluma-sprite"}],[49610753,{"idx":1,"name":"sewer-concrete-edge-02","tpage_name":"sewf-vis-tfrag"}],[60817414,{"idx":6,"name":"minb-brok-floor","tpage_name":"mineb-vis-shrub"}],[49610794,{"idx":42,"name":"sewer-grate-01","tpage_name":"sewf-vis-tfrag"}],[57081874,{"idx":18,"name":"daxtertuft","tpage_name":"waspala-pris"}],[11403340,{"idx":76,"name":"ctyslumc-window-panes","tpage_name":"ctyslumc-vis-tfrag"}],[8716362,{"idx":74,"name":"sign-doctors","tpage_name":"ctysluma-sprite"}],[60817416,{"idx":8,"name":"minc-metal-wheel-01","tpage_name":"mineb-vis-shrub"}],[49610796,{"idx":44,"name":"sewer-metal-block-05","tpage_name":"sewf-vis-tfrag"}],[14680098,{"idx":34,"name":"jakchires-horn","tpage_name":"ctygenb-vis-pris"}],[262182,{"idx":38,"name":"lasersmoke-12","tpage_name":"level-default-sprite"}],[8323122,{"idx":50,"name":"t-palshaft-pil-01","tpage_name":"ctywide-vis-tfrag"}],[35389493,{"idx":53,"name":"beacon-body-01","tpage_name":"introcst-pris"}],[41615393,{"idx":33,"name":"was-dogat-face","tpage_name":"wascitya-vis-pris"}],[49086473,{"idx":9,"name":"sew-laserturret-pole","tpage_name":"sewe-vis-shrub"}],[458753,{"idx":1,"name":"bam-hairhilite","tpage_name":"level-default-pris"}],[8716367,{"idx":79,"name":"blue-tracer","tpage_name":"ctysluma-sprite"}],[95879170,{"idx":2,"name":"charHOLD","tpage_name":"ltorn-pris2"}],[60817421,{"idx":13,"name":"minc-rust-02","tpage_name":"mineb-vis-shrub"}],[49610801,{"idx":49,"name":"sewer-brick-block-09","tpage_name":"sewf-vis-tfrag"}],[8323126,{"idx":54,"name":"citywide-window-litwindow","tpage_name":"ctywide-vis-tfrag"}],[851990,{"idx":22,"name":"common_sandstone_trim01","tpage_name":"halfpipe-tfrag"}],[262300,{"idx":156,"name":"ring","tpage_name":"level-default-sprite"}],[48824320,{"idx":0,"name":"sewer-nut","tpage_name":"sewc-vis-shrub"}],[35651585,{"idx":1,"name":"ashelin-bolts","tpage_name":"introcst-pris2"}],[983077,{"idx":37,"name":"environment-darkprec","tpage_name":"halfpipe-pris"}],[11403374,{"idx":110,"name":"cityslumc-lamp-small","tpage_name":"ctyslumc-vis-tfrag"}],[52297767,{"idx":39,"name":"freehq-ground-tile-set1-bm","tpage_name":"freehq-tfrag"}],[61014027,{"idx":11,"name":"minc-rust-bars-01","tpage_name":"minec-vis-shrub"}],[62259207,{"idx":7,"name":"gunbox01","tpage_name":"ctycarc-pris"}],[851991,{"idx":23,"name":"common_sandstone_pill01","tpage_name":"halfpipe-tfrag"}],[35651586,{"idx":2,"name":"ashelin-boottop","tpage_name":"introcst-pris2"}],[14745601,{"idx":1,"name":"city-bluelight","tpage_name":"ctygenb-vis-shrub"}],[12255241,{"idx":9,"name":"city-ind-wall-noisy-05","tpage_name":"ctyindb-vis-shrub"}],[11403375,{"idx":111,"name":"cityslumc-lamp-gold","tpage_name":"ctyslumc-vis-tfrag"}],[28114944,{"idx":0,"name":"troof-beam01","tpage_name":"intpalrf-shrub"}],[16908324,{"idx":36,"name":"city-farm-mark-roof-tiles","tpage_name":"ctyfarmb-vis-tfrag"}],[117637206,{"idx":86,"name":"jakc-waistband2","tpage_name":"destrack-pris"}],[262275,{"idx":131,"name":"ripples","tpage_name":"level-default-sprite"}],[100728850,{"idx":18,"name":"sig-horn","tpage_name":"ljaksig-pris2"}],[99483670,{"idx":22,"name":"common-black","tpage_name":"lformach-vis-pris"}],[94371916,{"idx":76,"name":"palace-break-wall06","tpage_name":"intpfall-vis-pris"}],[28049428,{"idx":20,"name":"troof-shield-02","tpage_name":"intpalrf-tfrag"}],[67829768,{"idx":8,"name":"screen-05","tpage_name":"freehq-sprite"}],[70320128,{"idx":0,"name":"JakIII","tpage_name":"inttitle-minimap"}],[35651600,{"idx":16,"name":"ashelin-hair","tpage_name":"introcst-pris2"}],[393237,{"idx":21,"name":"life-crate-bolt","tpage_name":"level-default-tfrag"}],[100728837,{"idx":5,"name":"sig-eyelid","tpage_name":"ljaksig-pris2"}],[88277037,{"idx":45,"name":"cguard-air-train-glass","tpage_name":"introcst-tfrag"}],[8323202,{"idx":130,"name":"bluecrate-04","tpage_name":"ctywide-vis-tfrag"}],[35651587,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"introcst-pris2"}],[14745602,{"idx":2,"name":"city-copper","tpage_name":"ctygenb-vis-shrub"}],[12255242,{"idx":10,"name":"city-ind-overlay-bullethole-b","tpage_name":"ctyindb-vis-shrub"}],[11403376,{"idx":112,"name":"cityslumc-pipe","tpage_name":"ctyslumc-vis-tfrag"}],[52297769,{"idx":41,"name":"freehq-env","tpage_name":"freehq-tfrag"}],[48562229,{"idx":53,"name":"jakc-armor","tpage_name":"sewa-vis-pris"}],[61014029,{"idx":13,"name":"minc-safe-plate-01","tpage_name":"minec-vis-shrub"}],[62259209,{"idx":9,"name":"hood01","tpage_name":"ctycarc-pris"}],[100728839,{"idx":7,"name":"sig-facert","tpage_name":"ljaksig-pris2"}],[88277039,{"idx":47,"name":"cguard-air-train-canister","tpage_name":"introcst-tfrag"}],[89587723,{"idx":11,"name":"environment-oldmetal","tpage_name":"lwstdpck-pris"}],[75890743,{"idx":55,"name":"onin-tank-wood","tpage_name":"onintent-tfrag"}],[589840,{"idx":16,"name":"hud-green-eco-pickup-01","tpage_name":"level-default-minimap"}],[35651589,{"idx":5,"name":"ashelin-cgrank","tpage_name":"introcst-pris2"}],[76480607,{"idx":95,"name":"jakchires-horn","tpage_name":"freehq-pris"}],[11403378,{"idx":114,"name":"cityslumc-awning-LOW","tpage_name":"ctyslumc-vis-tfrag"}],[52297771,{"idx":43,"name":"freehg-display01","tpage_name":"freehq-tfrag"}],[48562231,{"idx":55,"name":"jakc-gogglemetal","tpage_name":"sewa-vis-pris"}],[61014031,{"idx":15,"name":"minc-blue-paint-rust02","tpage_name":"minec-vis-shrub"}],[62259211,{"idx":11,"name":"jets01","tpage_name":"ctycarc-pris"}],[35389501,{"idx":61,"name":"jakb-facert","tpage_name":"introcst-pris"}],[458761,{"idx":9,"name":"board-iris-bottom","tpage_name":"level-default-pris"}],[21299283,{"idx":83,"name":"rhino-horn-01","tpage_name":"wasall-pris"}],[94240867,{"idx":99,"name":"palcab-lowres-background-peaks-02","tpage_name":"intpfall-vis-tfrag"}],[106234027,{"idx":171,"name":"roboboss-shinyorange-01","tpage_name":"mined-pris"}],[144834607,{"idx":47,"name":"rail-base-mid-01","tpage_name":"combn-tfrag"}],[151060507,{"idx":27,"name":"fac-switch-rim-01","tpage_name":"factoryc-vis-pris"}],[154796047,{"idx":15,"name":"daxterlense","tpage_name":"ljakndax-pris"}],[62193676,{"idx":12,"name":"riges01","tpage_name":"ctycarb-pris"}],[60948496,{"idx":16,"name":"minc-red-paint-02","tpage_name":"minec-vis-tfrag"}],[10878986,{"idx":10,"name":"city-slum-bigpipe-04","tpage_name":"ctyslumb-vis-tfrag"}],[26542196,{"idx":116,"name":"wstd-scaffold-wall-01","tpage_name":"wasstada-tfrag"}],[62652416,{"idx":0,"name":"bam-eyelight","tpage_name":"ctypepa-pris"}],[16121899,{"idx":43,"name":"t-citywide-met-strp01","tpage_name":"ctyfarma-vis-tfrag"}],[107151408,{"idx":48,"name":"spikey-frog-toenails","tpage_name":"volcanoa-vis-pris"}],[122093568,{"idx":0,"name":"hemi-gradient-flames","tpage_name":"factoryb-vis-water"}],[35127405,{"idx":109,"name":"jakc-wristband-a2","tpage_name":"factorya-pris"}],[524288,{"idx":0,"name":"common-gray","tpage_name":"sky-textures"}],[11730949,{"idx":5,"name":"city-ind-stain-02","tpage_name":"ctyinda-vis-shrub"}],[74383365,{"idx":5,"name":"sewer-small-light-01","tpage_name":"sewj-vis-tfrag"}],[56950845,{"idx":61,"name":"waspala-stage-end","tpage_name":"waspala-tfrag"}],[60686385,{"idx":49,"name":"min-env-mar-01","tpage_name":"mineb-vis-tfrag"}],[20840489,{"idx":41,"name":"jakchires-leatherpouch","tpage_name":"stadiumb-vis-pris"}],[10879049,{"idx":73,"name":"ctyslumc-window-panes","tpage_name":"ctyslumb-vis-tfrag"}],[458857,{"idx":105,"name":"jakc-leggging","tpage_name":"level-default-pris"}],[35127406,{"idx":110,"name":"jakchires-arm","tpage_name":"factorya-pris"}],[524289,{"idx":1,"name":"environment-ocean-alphamod","tpage_name":"sky-textures"}],[11730950,{"idx":6,"name":"city-ind-decal-04","tpage_name":"ctyinda-vis-shrub"}],[74383366,{"idx":6,"name":"sewer-pipe-rim-08","tpage_name":"sewj-vis-tfrag"}],[56950846,{"idx":62,"name":"waspala-throne-cap","tpage_name":"waspala-tfrag"}],[60686386,{"idx":50,"name":"minc-red-paint-01","tpage_name":"mineb-vis-tfrag"}],[20840490,{"idx":42,"name":"jakchires-lightbrownspat","tpage_name":"stadiumb-vis-pris"}],[458858,{"idx":106,"name":"jakc-lens","tpage_name":"level-default-pris"}],[75890710,{"idx":22,"name":"onin-critter-fur","tpage_name":"onintent-tfrag"}],[60948550,{"idx":70,"name":"fora-supportmetall","tpage_name":"minec-vis-tfrag"}],[11599872,{"idx":0,"name":"sign-fashion2","tpage_name":"ctyinda-sprite"}],[35127408,{"idx":112,"name":"jakchires-brownstrap","tpage_name":"factorya-pris"}],[74383368,{"idx":8,"name":"sewer-metal-block-07","tpage_name":"sewj-vis-tfrag"}],[56950848,{"idx":64,"name":"waspala-fountain-base03","tpage_name":"waspala-tfrag"}],[20840492,{"idx":44,"name":"jakchires-precarmor-01","tpage_name":"stadiumb-vis-pris"}],[458860,{"idx":108,"name":"jakc-scarf","tpage_name":"level-default-pris"}],[75890712,{"idx":24,"name":"onin-dirt-floor","tpage_name":"onintent-tfrag"}],[10813462,{"idx":22,"name":"cityslumc-grass","tpage_name":"ctyslumb-vis-shrub"}],[11599874,{"idx":2,"name":"sign-praxis-banner","tpage_name":"ctyinda-sprite"}],[35127409,{"idx":113,"name":"jakchires-brwnleather","tpage_name":"factorya-pris"}],[112525317,{"idx":5,"name":"daxterarm","tpage_name":"desrescc-pris"}],[42401819,{"idx":27,"name":"wascity-ground-01","tpage_name":"wasdoors-vis-tfrag"}],[43646999,{"idx":23,"name":"straw-bit","tpage_name":"waswide-sprite"}],[48562176,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewa-vis-pris"}],[524292,{"idx":4,"name":"sky-hotdot","tpage_name":"sky-textures"}],[11730953,{"idx":9,"name":"city-ind-overlay-bullethole-b","tpage_name":"ctyinda-vis-shrub"}],[62717954,{"idx":2,"name":"cguardgame-blackstrap","tpage_name":"ctypesa-pris"}],[49020974,{"idx":46,"name":"sewer-grate-01","tpage_name":"sewe-vis-tfrag"}],[74383369,{"idx":9,"name":"sewer-scaffold-02","tpage_name":"sewj-vis-tfrag"}],[56950849,{"idx":65,"name":"waspala-elevator-bolt02","tpage_name":"waspala-tfrag"}],[20840493,{"idx":45,"name":"jakchires-shoebottom","tpage_name":"stadiumb-vis-pris"}],[458861,{"idx":109,"name":"jakc-scarfhanging","tpage_name":"level-default-pris"}],[20840467,{"idx":19,"name":"jakc-lens","tpage_name":"stadiumb-vis-pris"}],[20840471,{"idx":23,"name":"jakc-waistband2","tpage_name":"stadiumb-vis-pris"}],[458839,{"idx":87,"name":"jakc-beltbuckles","tpage_name":"level-default-pris"}],[20840474,{"idx":26,"name":"jakchires-arm","tpage_name":"stadiumb-vis-pris"}],[10879034,{"idx":58,"name":"ctyslumc-light-amber","tpage_name":"ctyslumb-vis-tfrag"}],[458842,{"idx":90,"name":"jakc-brownstrap","tpage_name":"level-default-pris"}],[65536,{"idx":0,"name":"autoeye-iris","tpage_name":"common"}],[20840475,{"idx":27,"name":"jakchires-blackstrap","tpage_name":"stadiumb-vis-pris"}],[10879035,{"idx":59,"name":"ctyslumc-brown","tpage_name":"ctyslumb-vis-tfrag"}],[458843,{"idx":91,"name":"jakc-chestplate","tpage_name":"level-default-pris"}],[35389584,{"idx":144,"name":"beacon-body-02","tpage_name":"introcst-pris"}],[76480524,{"idx":12,"name":"daxtergoggles","tpage_name":"freehq-pris"}],[20840476,{"idx":28,"name":"jakchires-brownstrap","tpage_name":"stadiumb-vis-pris"}],[10879036,{"idx":60,"name":"ctyslumc-green","tpage_name":"ctyslumb-vis-tfrag"}],[458844,{"idx":92,"name":"jakc-chestplate-straps","tpage_name":"level-default-pris"}],[35389585,{"idx":145,"name":"beacon-body-03","tpage_name":"introcst-pris"}],[76480525,{"idx":13,"name":"daxterheadwidenew","tpage_name":"freehq-pris"}],[20840477,{"idx":29,"name":"jakchires-brwnleather","tpage_name":"stadiumb-vis-pris"}],[458845,{"idx":93,"name":"jakc-eyebrow","tpage_name":"level-default-pris"}],[35389593,{"idx":153,"name":"prebot-envmap","tpage_name":"introcst-pris"}],[20840485,{"idx":37,"name":"jakchires-glovetop","tpage_name":"stadiumb-vis-pris"}],[10879045,{"idx":69,"name":"ctyslumc-tree-top","tpage_name":"ctyslumb-vis-tfrag"}],[458853,{"idx":101,"name":"jakc-horn","tpage_name":"level-default-pris"}],[20840486,{"idx":38,"name":"jakchires-hair","tpage_name":"stadiumb-vis-pris"}],[458854,{"idx":102,"name":"jakc-jacketbody","tpage_name":"level-default-pris"}],[20840487,{"idx":39,"name":"jakchires-horn","tpage_name":"stadiumb-vis-pris"}],[10879047,{"idx":71,"name":"ctyslumc-light-blue","tpage_name":"ctyslumb-vis-tfrag"}],[458855,{"idx":103,"name":"jakc-leatherpouch","tpage_name":"level-default-pris"}],[20840488,{"idx":40,"name":"jakchires-jacket","tpage_name":"stadiumb-vis-pris"}],[10879048,{"idx":72,"name":"ctyslumc-window","tpage_name":"ctyslumb-vis-tfrag"}],[458856,{"idx":104,"name":"jakc-leatherstrap","tpage_name":"level-default-pris"}],[8716288,{"idx":0,"name":"baron-neon-blue-a","tpage_name":"ctysluma-sprite"}],[8716289,{"idx":1,"name":"baron-neon-blue-a-on","tpage_name":"ctysluma-sprite"}],[196608,{"idx":0,"name":"checker","tpage_name":"programmer"}],[8716290,{"idx":2,"name":"baron-neon-blue-b","tpage_name":"ctysluma-sprite"}],[196609,{"idx":1,"name":"colorbars13","tpage_name":"programmer"}],[8716291,{"idx":3,"name":"baron-neon-blue-b-on","tpage_name":"ctysluma-sprite"}],[196610,{"idx":2,"name":"programmer_eye_left","tpage_name":"programmer"}],[8716292,{"idx":4,"name":"baron-neon-blue-c","tpage_name":"ctysluma-sprite"}],[196611,{"idx":3,"name":"programmer_eye_right","tpage_name":"programmer"}],[8716293,{"idx":5,"name":"baron-neon-blue-c-on","tpage_name":"ctysluma-sprite"}],[196612,{"idx":4,"name":"skull-gem-dest","tpage_name":"programmer"}],[8716294,{"idx":6,"name":"baron-neon-blue-d","tpage_name":"ctysluma-sprite"}],[8716295,{"idx":7,"name":"baron-neon-blue-d-on","tpage_name":"ctysluma-sprite"}],[8716296,{"idx":8,"name":"baron-neon-blue-e","tpage_name":"ctysluma-sprite"}],[8716297,{"idx":9,"name":"baron-neon-blue-e-on","tpage_name":"ctysluma-sprite"}],[8716298,{"idx":10,"name":"baron-neon-blue-f","tpage_name":"ctysluma-sprite"}],[8716299,{"idx":11,"name":"baron-neon-blue-f-on","tpage_name":"ctysluma-sprite"}],[655360,{"idx":0,"name":"environment-ice","tpage_name":"level-default-warp"}],[327703,{"idx":23,"name":"lightjak-wings-u-src","tpage_name":"level-default-water"}],[16908325,{"idx":37,"name":"common-black","tpage_name":"ctyfarmb-vis-tfrag"}],[60620916,{"idx":116,"name":"jakchires-glovetop","tpage_name":"minea-vis-pris"}],[94240776,{"idx":8,"name":"palcab-lowres-ctyslum-roof-01","tpage_name":"intpfall-vis-tfrag"}],[8716300,{"idx":12,"name":"baron-neon-blue-g","tpage_name":"ctysluma-sprite"}],[48496640,{"idx":0,"name":"sewer-plate-01","tpage_name":"sewa-vis-tfrag"}],[655361,{"idx":1,"name":"environment-phong-rim","tpage_name":"level-default-warp"}],[327704,{"idx":24,"name":"lightjak-wings-v-src","tpage_name":"level-default-water"}],[8716301,{"idx":13,"name":"baron-neon-blue-g-on","tpage_name":"ctysluma-sprite"}],[48496641,{"idx":1,"name":"sewer-pipe-rim-01","tpage_name":"sewa-vis-tfrag"}],[655362,{"idx":2,"name":"shield-env-rim-dest","tpage_name":"level-default-warp"}],[60620918,{"idx":118,"name":"jakchires-horn","tpage_name":"minea-vis-pris"}],[94240778,{"idx":10,"name":"palcab-lowres-ctyslum-roof-02","tpage_name":"intpfall-vis-tfrag"}],[8716302,{"idx":14,"name":"baron-neon-blue-h","tpage_name":"ctysluma-sprite"}],[655364,{"idx":4,"name":"shield-env-uscroll","tpage_name":"level-default-warp"}],[16908329,{"idx":41,"name":"citywide-wall-greydrain","tpage_name":"ctyfarmb-vis-tfrag"}],[8716304,{"idx":16,"name":"baron-neon-blue-i","tpage_name":"ctysluma-sprite"}],[48496644,{"idx":4,"name":"sewer-block-01","tpage_name":"sewa-vis-tfrag"}],[49741824,{"idx":0,"name":"airlock-door-bolt","tpage_name":"sewf-vis-pris"}],[655365,{"idx":5,"name":"shield-env-uvscroll","tpage_name":"level-default-warp"}],[8716305,{"idx":17,"name":"baron-neon-blue-i-on","tpage_name":"ctysluma-sprite"}],[48496645,{"idx":5,"name":"sewer-brick-block-01","tpage_name":"sewa-vis-tfrag"}],[49741825,{"idx":1,"name":"airlock-door-cog","tpage_name":"sewf-vis-pris"}],[8716306,{"idx":18,"name":"baron-neon-blue-j","tpage_name":"ctysluma-sprite"}],[48496646,{"idx":6,"name":"sewer-mantel-01","tpage_name":"sewa-vis-tfrag"}],[49741826,{"idx":2,"name":"airlock-door-main","tpage_name":"sewf-vis-pris"}],[8716307,{"idx":19,"name":"baron-neon-blue-j-on","tpage_name":"ctysluma-sprite"}],[8716308,{"idx":20,"name":"baron-neon-blue-k","tpage_name":"ctysluma-sprite"}],[60620925,{"idx":125,"name":"jakchires-shoemetal","tpage_name":"minea-vis-pris"}],[94240785,{"idx":17,"name":"palcab-lowres-ctyslumc-wall-01","tpage_name":"intpfall-vis-tfrag"}],[8716309,{"idx":21,"name":"baron-neon-blue-k-on","tpage_name":"ctysluma-sprite"}],[81657893,{"idx":37,"name":"sig-eyelid","tpage_name":"arenacst-pris2"}],[74186813,{"idx":61,"name":"spydroid-leg-grey","tpage_name":"sewh-vis-pris"}],[48496649,{"idx":9,"name":"sewer-brick-block-06","tpage_name":"sewa-vis-tfrag"}],[49741829,{"idx":5,"name":"sewer-pipe-01","tpage_name":"sewf-vis-pris"}],[8716310,{"idx":22,"name":"baron-neon-cheek-a","tpage_name":"ctysluma-sprite"}],[81657894,{"idx":38,"name":"sig-faceleft","tpage_name":"arenacst-pris2"}],[74186814,{"idx":62,"name":"spydroid-leg-grey-end","tpage_name":"sewh-vis-pris"}],[48496650,{"idx":10,"name":"sewer-mantel-02","tpage_name":"sewa-vis-tfrag"}],[49741830,{"idx":6,"name":"airlock-door-cog1","tpage_name":"sewf-vis-pris"}],[8716311,{"idx":23,"name":"baron-neon-cheek-a-on","tpage_name":"ctysluma-sprite"}],[81657895,{"idx":39,"name":"sig-facert","tpage_name":"arenacst-pris2"}],[74186815,{"idx":63,"name":"spydroid-light","tpage_name":"sewh-vis-pris"}],[48496651,{"idx":11,"name":"sewer-metal-block-05","tpage_name":"sewa-vis-tfrag"}],[49741831,{"idx":7,"name":"sew-gasstep-rim-lod1","tpage_name":"sewf-vis-pris"}],[81657896,{"idx":40,"name":"sig-flask","tpage_name":"arenacst-pris2"}],[74186816,{"idx":64,"name":"spydroid-light-small","tpage_name":"sewh-vis-pris"}],[48496652,{"idx":12,"name":"sewer-pipe-rim-05b","tpage_name":"sewa-vis-tfrag"}],[49741832,{"idx":8,"name":"sew-gasstep-tube","tpage_name":"sewf-vis-pris"}],[8716313,{"idx":25,"name":"baron-neon-cheek-b-on","tpage_name":"ctysluma-sprite"}],[81657897,{"idx":41,"name":"sig-gem-01","tpage_name":"arenacst-pris2"}],[74186817,{"idx":65,"name":"spydroid-light-small-red","tpage_name":"sewh-vis-pris"}],[48496653,{"idx":13,"name":"sewer-concrete-edge-02","tpage_name":"sewa-vis-tfrag"}],[49741833,{"idx":9,"name":"sew-gasstep-vent","tpage_name":"sewf-vis-pris"}],[12189701,{"idx":5,"name":"citwide-crimson-gold","tpage_name":"ctyindb-vis-pris"}],[8716314,{"idx":26,"name":"baron-neon-cheek-c","tpage_name":"ctysluma-sprite"}],[81657898,{"idx":42,"name":"sig-glove","tpage_name":"arenacst-pris2"}],[74186818,{"idx":66,"name":"spydroid-red","tpage_name":"sewh-vis-pris"}],[48496654,{"idx":14,"name":"sewer-metal-block-06","tpage_name":"sewa-vis-tfrag"}],[49741834,{"idx":10,"name":"sew-movingstep-grate","tpage_name":"sewf-vis-pris"}],[12189702,{"idx":6,"name":"citwide-crimson-light","tpage_name":"ctyindb-vis-pris"}],[17563663,{"idx":15,"name":"sign-blank","tpage_name":"ctyport-sprite"}],[12189703,{"idx":7,"name":"citwide-crimson-red","tpage_name":"ctyindb-vis-pris"}],[12189704,{"idx":8,"name":"citwide-crimson-tube","tpage_name":"ctyindb-vis-pris"}],[14680064,{"idx":0,"name":"airlock-door-bolt","tpage_name":"ctygenb-vis-pris"}],[12189705,{"idx":9,"name":"citwide-crimson-wall-plain","tpage_name":"ctyindb-vis-pris"}],[14680065,{"idx":1,"name":"airlock-door-cog","tpage_name":"ctygenb-vis-pris"}],[8716318,{"idx":30,"name":"baron-neon-dot-a","tpage_name":"ctysluma-sprite"}],[81657902,{"idx":46,"name":"sig-gun-03","tpage_name":"arenacst-pris2"}],[48496658,{"idx":18,"name":"sewer-metal-block-04","tpage_name":"sewa-vis-tfrag"}],[49741838,{"idx":14,"name":"sewer-flat-pipe-01","tpage_name":"sewf-vis-pris"}],[8716319,{"idx":31,"name":"baron-neon-dot-a-on","tpage_name":"ctysluma-sprite"}],[81657903,{"idx":47,"name":"sig-gun-04","tpage_name":"arenacst-pris2"}],[48496659,{"idx":19,"name":"sewer-metal-01","tpage_name":"sewa-vis-tfrag"}],[49741839,{"idx":15,"name":"sewer-metal-block-06","tpage_name":"sewf-vis-pris"}],[8716320,{"idx":32,"name":"baron-neon-dot-b","tpage_name":"ctysluma-sprite"}],[8716321,{"idx":33,"name":"baron-neon-dot-b-on","tpage_name":"ctysluma-sprite"}],[81657905,{"idx":49,"name":"sig-headgear","tpage_name":"arenacst-pris2"}],[48496661,{"idx":21,"name":"sewer-pipe-rim-08","tpage_name":"sewa-vis-tfrag"}],[49741841,{"idx":17,"name":"sewer-plate-04","tpage_name":"sewf-vis-pris"}],[8716322,{"idx":34,"name":"baron-neon-dot-c","tpage_name":"ctysluma-sprite"}],[8716323,{"idx":35,"name":"baron-neon-dot-c-on","tpage_name":"ctysluma-sprite"}],[81657907,{"idx":51,"name":"sig-lens","tpage_name":"arenacst-pris2"}],[48496663,{"idx":23,"name":"sewer-brick-block-10","tpage_name":"sewa-vis-tfrag"}],[49741843,{"idx":19,"name":"sewcurved-door-01","tpage_name":"sewf-vis-pris"}],[62259200,{"idx":0,"name":"backThing01","tpage_name":"ctycarc-pris"}],[52297760,{"idx":32,"name":"freehq-ground-tile-set1-lbc","tpage_name":"freehq-tfrag"}],[61014020,{"idx":4,"name":"minc-grass-ill-01","tpage_name":"minec-vis-shrub"}],[8716324,{"idx":36,"name":"baron-neon-dot-d","tpage_name":"ctysluma-sprite"}],[81657908,{"idx":52,"name":"sig-metal-01","tpage_name":"arenacst-pris2"}],[48496664,{"idx":24,"name":"sewer-brick-block-11","tpage_name":"sewa-vis-tfrag"}],[49741844,{"idx":20,"name":"sewcurved-door-04","tpage_name":"sewf-vis-pris"}],[8716325,{"idx":37,"name":"baron-neon-dot-d-on","tpage_name":"ctysluma-sprite"}],[81657909,{"idx":53,"name":"sig-metal-dirty","tpage_name":"arenacst-pris2"}],[48496665,{"idx":25,"name":"sewer-small-light-01","tpage_name":"sewa-vis-tfrag"}],[49741845,{"idx":21,"name":"sewcurved-door-05","tpage_name":"sewf-vis-pris"}],[62259202,{"idx":2,"name":"dash01","tpage_name":"ctycarc-pris"}],[52297762,{"idx":34,"name":"freehq-ground-tile-set1-m","tpage_name":"freehq-tfrag"}],[61014022,{"idx":6,"name":"minc-blue-paint-rust04","tpage_name":"minec-vis-shrub"}],[8716326,{"idx":38,"name":"baron-neon-dot-ring","tpage_name":"ctysluma-sprite"}],[81657910,{"idx":54,"name":"sig-sac","tpage_name":"arenacst-pris2"}],[48496666,{"idx":26,"name":"sewer-plate-02","tpage_name":"sewa-vis-tfrag"}],[49741846,{"idx":22,"name":"sewcurved-door-06","tpage_name":"sewf-vis-pris"}],[81657911,{"idx":55,"name":"sig-shoebottom","tpage_name":"arenacst-pris2"}],[48496667,{"idx":27,"name":"sewer-grate-01","tpage_name":"sewa-vis-tfrag"}],[81657912,{"idx":56,"name":"sig-shoetop","tpage_name":"arenacst-pris2"}],[48496668,{"idx":28,"name":"sewer-pipe-01","tpage_name":"sewa-vis-tfrag"}],[57212928,{"idx":0,"name":"wascity-outerwall-rock","tpage_name":"waswide-vis-tfrag"}],[81657913,{"idx":57,"name":"sig-shoulderarmor","tpage_name":"arenacst-pris2"}],[48496669,{"idx":29,"name":"sewer-plate-05","tpage_name":"sewa-vis-tfrag"}],[81657914,{"idx":58,"name":"sig-skirts","tpage_name":"arenacst-pris2"}],[48496670,{"idx":30,"name":"sewer-screw-02","tpage_name":"sewa-vis-tfrag"}],[81657915,{"idx":59,"name":"sig-skirts-02","tpage_name":"arenacst-pris2"}],[48496671,{"idx":31,"name":"sew-elevator-lod0top","tpage_name":"sewa-vis-tfrag"}],[81657916,{"idx":60,"name":"sig-skirts-03","tpage_name":"arenacst-pris2"}],[48496672,{"idx":32,"name":"sewer-big-brace-01","tpage_name":"sewa-vis-tfrag"}],[81657917,{"idx":61,"name":"sig-undergarments","tpage_name":"arenacst-pris2"}],[48496673,{"idx":33,"name":"sewer-concrete-block-02","tpage_name":"sewa-vis-tfrag"}],[57212933,{"idx":5,"name":"wascity-steel-bar","tpage_name":"waswide-vis-tfrag"}],[81657918,{"idx":62,"name":"vin-teeth-01","tpage_name":"arenacst-pris2"}],[48496674,{"idx":34,"name":"sewer-lip-01-hitweak","tpage_name":"sewa-vis-tfrag"}],[57212934,{"idx":6,"name":"wascitya-flag-a","tpage_name":"waswide-vis-tfrag"}],[11403318,{"idx":54,"name":"ctyslumc-wall","tpage_name":"ctyslumc-vis-tfrag"}],[11403319,{"idx":55,"name":"ctyslumc-light-amber","tpage_name":"ctyslumc-vis-tfrag"}],[8716340,{"idx":52,"name":"baron-neon-nose","tpage_name":"ctysluma-sprite"}],[11730944,{"idx":0,"name":"city-ind-blotch-withstreaks-01","tpage_name":"ctyinda-vis-shrub"}],[11730945,{"idx":1,"name":"city-ind-stain-01","tpage_name":"ctyinda-vis-shrub"}],[11403322,{"idx":58,"name":"ctyslumc-flowerbed-flowers-a","tpage_name":"ctyslumc-vis-tfrag"}],[11730946,{"idx":2,"name":"city-ind-decal-01","tpage_name":"ctyinda-vis-shrub"}],[11403323,{"idx":59,"name":"common-gray-dark","tpage_name":"ctyslumc-vis-tfrag"}],[65542,{"idx":6,"name":"skull-gem-env","tpage_name":"common"}],[11730947,{"idx":3,"name":"city-ind-decal-02","tpage_name":"ctyinda-vis-shrub"}],[11403324,{"idx":60,"name":"ctyslumc-green","tpage_name":"ctyslumc-vis-tfrag"}],[11730948,{"idx":4,"name":"city-ind-decal-03","tpage_name":"ctyinda-vis-shrub"}],[11403325,{"idx":61,"name":"ctyslumc-tree-top","tpage_name":"ctyslumc-vis-tfrag"}],[11403326,{"idx":62,"name":"ctyslumc-pinetree-big-bark","tpage_name":"ctyslumc-vis-tfrag"}],[11403327,{"idx":63,"name":"ctyslumc-window","tpage_name":"ctyslumc-vis-tfrag"}],[11403333,{"idx":69,"name":"ctyslumc-light","tpage_name":"ctyslumc-vis-tfrag"}],[8716353,{"idx":65,"name":"baron-neon-white-c-on","tpage_name":"ctysluma-sprite"}],[11403334,{"idx":70,"name":"ctyslumc-billc","tpage_name":"ctyslumc-vis-tfrag"}],[8716354,{"idx":66,"name":"baron-neon-white-d","tpage_name":"ctysluma-sprite"}],[60817408,{"idx":0,"name":"minc-rust-01","tpage_name":"mineb-vis-shrub"}],[57081868,{"idx":12,"name":"daxtergoggles","tpage_name":"waspala-pris"}],[8716355,{"idx":67,"name":"baron-neon-white-d-on","tpage_name":"ctysluma-sprite"}],[60817409,{"idx":1,"name":"minc-bolt","tpage_name":"mineb-vis-shrub"}],[57081869,{"idx":13,"name":"daxterheadwidenew","tpage_name":"waspala-pris"}],[8716363,{"idx":75,"name":"sign-hiphog","tpage_name":"ctysluma-sprite"}],[60817417,{"idx":9,"name":"minc-screw-01","tpage_name":"mineb-vis-shrub"}],[49610797,{"idx":45,"name":"sewer-rusted-metal","tpage_name":"sewf-vis-tfrag"}],[8716364,{"idx":76,"name":"sign-m5","tpage_name":"ctysluma-sprite"}],[49610757,{"idx":5,"name":"sewer-metal-block-06","tpage_name":"sewf-vis-tfrag"}],[60817418,{"idx":10,"name":"minc-rust-pipe-03","tpage_name":"mineb-vis-shrub"}],[49610798,{"idx":46,"name":"sewer-nut-rim","tpage_name":"sewf-vis-tfrag"}],[8716365,{"idx":77,"name":"sign-metalhead","tpage_name":"ctysluma-sprite"}],[49610758,{"idx":6,"name":"common-black","tpage_name":"sewf-vis-tfrag"}],[95879168,{"idx":0,"name":"bam-eyelight","tpage_name":"ltorn-pris2"}],[60817419,{"idx":11,"name":"minc-rust-bars-01","tpage_name":"mineb-vis-shrub"}],[49610799,{"idx":47,"name":"sewer-corroded-trim","tpage_name":"sewf-vis-tfrag"}],[35389491,{"idx":51,"name":"jak-gogglemetal","tpage_name":"introcst-pris"}],[49086471,{"idx":7,"name":"sewer-pipe-rim-07","tpage_name":"sewe-vis-shrub"}],[35389492,{"idx":52,"name":"jak-teeth","tpage_name":"introcst-pris"}],[49086472,{"idx":8,"name":"sewer-pipe-01","tpage_name":"sewe-vis-shrub"}],[41615392,{"idx":32,"name":"was-dogat-body","tpage_name":"wascitya-vis-pris"}],[458752,{"idx":0,"name":"bam-eyelight","tpage_name":"level-default-pris"}],[35389494,{"idx":54,"name":"jakb-blackstrap","tpage_name":"introcst-pris"}],[41615394,{"idx":34,"name":"was-dogat-nose","tpage_name":"wascitya-vis-pris"}],[49086474,{"idx":10,"name":"sew-moving-stepb-grate","tpage_name":"sewe-vis-shrub"}],[458754,{"idx":2,"name":"bam-iris-16x16","tpage_name":"level-default-pris"}],[60620917,{"idx":117,"name":"jakchires-hair","tpage_name":"minea-vis-pris"}],[94240777,{"idx":9,"name":"palcab-lowres-ctyslum-wall-01","tpage_name":"intpfall-vis-tfrag"}],[35389497,{"idx":57,"name":"jakb-eye","tpage_name":"introcst-pris"}],[41615397,{"idx":37,"name":"was-kangalizard-body-bottom","tpage_name":"wascitya-vis-pris"}],[49086477,{"idx":13,"name":"sewer-shrub-pitting-01","tpage_name":"sewe-vis-shrub"}],[458757,{"idx":5,"name":"board-edge","tpage_name":"level-default-pris"}],[16908307,{"idx":19,"name":"farm-grass-ground-02","tpage_name":"ctyfarmb-vis-tfrag"}],[8847367,{"idx":7,"name":"city-slum-bigpipe-02","tpage_name":"ctysluma-vis-shrub"}],[35389498,{"idx":58,"name":"jakb-eyebrow","tpage_name":"introcst-pris"}],[41615398,{"idx":38,"name":"was-kangalizard-face","tpage_name":"wascitya-vis-pris"}],[458758,{"idx":6,"name":"board-fins","tpage_name":"level-default-pris"}],[16908308,{"idx":20,"name":"city-farm-rock","tpage_name":"ctyfarmb-vis-tfrag"}],[8847368,{"idx":8,"name":"city-slum-brick-showing-through","tpage_name":"ctysluma-vis-shrub"}],[35389499,{"idx":59,"name":"jakb-eyelid","tpage_name":"introcst-pris"}],[41615399,{"idx":39,"name":"was-kangalizard-fin","tpage_name":"wascitya-vis-pris"}],[458759,{"idx":7,"name":"board-fins-bottom","tpage_name":"level-default-pris"}],[112394287,{"idx":47,"name":"intcept-b-pipe01","tpage_name":"desrescg-pris"}],[118620187,{"idx":27,"name":"jakchires-jacket","tpage_name":"ljkcdmkl-pris"}],[121110547,{"idx":19,"name":"hip-tred-check10","tpage_name":"hiphog-vis-tfrag"}],[327687,{"idx":7,"name":"blue-beam-dest","tpage_name":"level-default-water"}],[16908309,{"idx":21,"name":"city-farm-rock-small","tpage_name":"ctyfarmb-vis-tfrag"}],[458806,{"idx":54,"name":"jakbsmall-jacketbody","tpage_name":"level-default-pris"}],[8847369,{"idx":9,"name":"city-slum-stain-wall-01","tpage_name":"ctysluma-vis-shrub"}],[35389500,{"idx":60,"name":"jakb-facelft","tpage_name":"introcst-pris"}],[458760,{"idx":8,"name":"board-iris","tpage_name":"level-default-pris"}],[112394288,{"idx":48,"name":"intcept-b-teeth01","tpage_name":"desrescg-pris"}],[118620188,{"idx":28,"name":"jakchires-leatherpouch","tpage_name":"ljkcdmkl-pris"}],[121110548,{"idx":20,"name":"hip-tred-check09","tpage_name":"hiphog-vis-tfrag"}],[62652422,{"idx":6,"name":"citfat-cotton-gather","tpage_name":"ctypepa-pris"}],[327688,{"idx":8,"name":"water-wake","tpage_name":"level-default-water"}],[16908310,{"idx":22,"name":"city-farm-cart-woodslat","tpage_name":"ctyfarmb-vis-tfrag"}],[458807,{"idx":55,"name":"jakbsmall-jacketsleeve","tpage_name":"level-default-pris"}],[8847370,{"idx":10,"name":"city-slum-dirt-overlay","tpage_name":"ctysluma-vis-shrub"}],[16908311,{"idx":23,"name":"for-foliage","tpage_name":"ctyfarmb-vis-tfrag"}],[8847371,{"idx":11,"name":"city-slum-stain-window-01","tpage_name":"ctysluma-vis-shrub"}],[16908312,{"idx":24,"name":"city-farm-vegtree-bark-01","tpage_name":"ctyfarmb-vis-tfrag"}],[99483662,{"idx":14,"name":"turret-hose","tpage_name":"lformach-vis-pris"}],[100728842,{"idx":10,"name":"sig-glove","tpage_name":"ljaksig-pris2"}],[88277042,{"idx":50,"name":"cguard-air-train-seat","tpage_name":"introcst-tfrag"}],[60620903,{"idx":103,"name":"jakc-wraps","tpage_name":"minea-vis-pris"}],[88014863,{"idx":15,"name":"sig2-gun-05","tpage_name":"lwassig-pris"}],[8847372,{"idx":12,"name":"city-slum-shrub-overhang","tpage_name":"ctysluma-vis-shrub"}],[35389503,{"idx":63,"name":"jakb-hairtrans","tpage_name":"introcst-pris"}],[458763,{"idx":11,"name":"board-main-bottom","tpage_name":"level-default-pris"}],[16908313,{"idx":25,"name":"city-farm-dirt-mound-01","tpage_name":"ctyfarmb-vis-tfrag"}],[99483663,{"idx":15,"name":"turret-light","tpage_name":"lformach-vis-pris"}],[100728843,{"idx":11,"name":"sig-glovetop","tpage_name":"ljaksig-pris2"}],[88277043,{"idx":51,"name":"cguard-air-train-window-trim","tpage_name":"introcst-tfrag"}],[10879038,{"idx":62,"name":"ctyslumc-grass","tpage_name":"ctyslumb-vis-tfrag"}],[20840478,{"idx":30,"name":"jakchires-chestplate","tpage_name":"stadiumb-vis-pris"}],[8847373,{"idx":13,"name":"city-slum-shrub-overhang-02","tpage_name":"ctysluma-vis-shrub"}],[16908314,{"idx":26,"name":"city-farm-sprinkle-metal-dirt","tpage_name":"ctyfarmb-vis-tfrag"}],[99483664,{"idx":16,"name":"turret-metal","tpage_name":"lformach-vis-pris"}],[100728844,{"idx":12,"name":"sig-gun-01","tpage_name":"ljaksig-pris2"}],[10879039,{"idx":63,"name":"stdm-bush-01","tpage_name":"ctyslumb-vis-tfrag"}],[20840479,{"idx":31,"name":"jakchires-clips","tpage_name":"stadiumb-vis-pris"}],[786434,{"idx":2,"name":"font.24hi","tpage_name":"gamefont"}],[8847374,{"idx":14,"name":"city-slum-vine","tpage_name":"ctysluma-vis-shrub"}],[35389505,{"idx":65,"name":"jakb-jacketbody","tpage_name":"introcst-pris"}],[41615405,{"idx":45,"name":"city-mark-cotton-32x32","tpage_name":"wascitya-vis-pris"}],[55312385,{"idx":1,"name":"common-black","tpage_name":"wascityb-vis-pris"}],[62652427,{"idx":11,"name":"citfat-eyebrow-bro","tpage_name":"ctypepa-pris"}],[327693,{"idx":13,"name":"lightning-beam-01","tpage_name":"level-default-water"}],[16908315,{"idx":27,"name":"city-farm-sprinkle-suppport","tpage_name":"ctyfarmb-vis-tfrag"}],[99483665,{"idx":17,"name":"turret-metal-2","tpage_name":"lformach-vis-pris"}],[100728845,{"idx":13,"name":"sig-gun-02","tpage_name":"ljaksig-pris2"}],[10879040,{"idx":64,"name":"ctyslumc-bush-01","tpage_name":"ctyslumb-vis-tfrag"}],[20840480,{"idx":32,"name":"jakchires-eye","tpage_name":"stadiumb-vis-pris"}],[60620906,{"idx":106,"name":"jakchires-blackstrap","tpage_name":"minea-vis-pris"}],[88014866,{"idx":18,"name":"sig2-lens","tpage_name":"lwassig-pris"}],[786435,{"idx":3,"name":"font.24hi2","tpage_name":"gamefont"}],[8847375,{"idx":15,"name":"city-slumwall-05","tpage_name":"ctysluma-vis-shrub"}],[48627715,{"idx":3,"name":"sewer-plate-05","tpage_name":"sewb-vis-tfrag"}],[43646995,{"idx":19,"name":"wood-plain-debris","tpage_name":"waswide-sprite"}],[42401815,{"idx":23,"name":"wascity-rock-small","tpage_name":"wasdoors-vis-tfrag"}],[35389506,{"idx":66,"name":"jakb-jacketsleeve","tpage_name":"introcst-pris"}],[41615406,{"idx":46,"name":"city-mark-cotton-wrap","tpage_name":"wascitya-vis-pris"}],[55312386,{"idx":2,"name":"drill-turret-control-02","tpage_name":"wascityb-vis-pris"}],[62652428,{"idx":12,"name":"citfat-fleshbrown","tpage_name":"ctypepa-pris"}],[327694,{"idx":14,"name":"lightning-beam-02","tpage_name":"level-default-water"}],[16908316,{"idx":28,"name":"city-farm-sprinkle-metal","tpage_name":"ctyfarmb-vis-tfrag"}],[10879041,{"idx":65,"name":"ctyslumc-flowerbed-flowers-a","tpage_name":"ctyslumb-vis-tfrag"}],[20840481,{"idx":33,"name":"jakchires-eyebrow","tpage_name":"stadiumb-vis-pris"}],[60620907,{"idx":107,"name":"jakchires-brownstrap","tpage_name":"minea-vis-pris"}],[88014867,{"idx":19,"name":"sig2-metal-01","tpage_name":"lwassig-pris"}],[8847376,{"idx":16,"name":"city-slum-clothesline-01","tpage_name":"ctysluma-vis-shrub"}],[35389507,{"idx":67,"name":"jakb-leatherpouch","tpage_name":"introcst-pris"}],[41615407,{"idx":47,"name":"city-mark-rope-mesh-01","tpage_name":"wascitya-vis-pris"}],[55312387,{"idx":3,"name":"wascity-metal-door-01","tpage_name":"wascityb-vis-pris"}],[327695,{"idx":15,"name":"blue-needle","tpage_name":"level-default-water"}],[16908317,{"idx":29,"name":"city-farm-sprinkle-pipe","tpage_name":"ctyfarmb-vis-tfrag"}],[99483667,{"idx":19,"name":"turret-mh-metal","tpage_name":"lformach-vis-pris"}],[100728847,{"idx":15,"name":"sig-gun-04","tpage_name":"ljaksig-pris2"}],[8847377,{"idx":17,"name":"city-slum-decal-02","tpage_name":"ctysluma-vis-shrub"}],[35389508,{"idx":68,"name":"jakb-leatherstrap","tpage_name":"introcst-pris"}],[41615408,{"idx":48,"name":"city-mark-basket2","tpage_name":"wascitya-vis-pris"}],[55312388,{"idx":4,"name":"wascity-metal-indent","tpage_name":"wascityb-vis-pris"}],[327696,{"idx":16,"name":"environment-lightjak","tpage_name":"level-default-water"}],[16908318,{"idx":30,"name":"farm-grass-ground-01","tpage_name":"ctyfarmb-vis-tfrag"}],[99483668,{"idx":20,"name":"for-egg-bulbtop-02","tpage_name":"lformach-vis-pris"}],[100728848,{"idx":16,"name":"sig-gun-05","tpage_name":"ljaksig-pris2"}],[8847378,{"idx":18,"name":"city-slum-bigpipe-04","tpage_name":"ctysluma-vis-shrub"}],[48627718,{"idx":6,"name":"sewer-concrete-edge-02","tpage_name":"sewb-vis-tfrag"}],[43646998,{"idx":22,"name":"basket-debris-01","tpage_name":"waswide-sprite"}],[35389509,{"idx":69,"name":"jakb-lightbrownspat","tpage_name":"introcst-pris"}],[41615409,{"idx":49,"name":"city-mark-rice-01","tpage_name":"wascitya-vis-pris"}],[55312389,{"idx":5,"name":"wascity-outerwall-metal","tpage_name":"wascityb-vis-pris"}],[327697,{"idx":17,"name":"environment-lightjak-wing","tpage_name":"level-default-water"}],[16908319,{"idx":31,"name":"city-farm-lamp","tpage_name":"ctyfarmb-vis-tfrag"}],[458816,{"idx":64,"name":"sk-armfur","tpage_name":"level-default-pris"}],[8847379,{"idx":19,"name":"city-slumwall-metalsiding-01","tpage_name":"ctysluma-vis-shrub"}],[35389510,{"idx":70,"name":"jakb-lightbrownstrap","tpage_name":"introcst-pris"}],[41615410,{"idx":50,"name":"city-mark-wood-plain","tpage_name":"wascitya-vis-pris"}],[55312390,{"idx":6,"name":"wascity-outerwall-metal-b","tpage_name":"wascityb-vis-pris"}],[458770,{"idx":18,"name":"gun-blue-mag","tpage_name":"level-default-pris"}],[16908320,{"idx":32,"name":"city-ind-metal-02","tpage_name":"ctyfarmb-vis-tfrag"}],[11862016,{"idx":0,"name":"map-ctyindb","tpage_name":"ctyindb-minimap"}],[10616836,{"idx":4,"name":"sign-gt2","tpage_name":"ctyslumb-sprite"}],[60620911,{"idx":111,"name":"jakchires-eye","tpage_name":"minea-vis-pris"}],[94240771,{"idx":3,"name":"palcab-lowres-background-crater-bottom-enviro","tpage_name":"intpfall-vis-tfrag"}],[88014871,{"idx":23,"name":"sig2-shoetop","tpage_name":"lwassig-pris"}],[8847380,{"idx":20,"name":"city-slum-decal-01","tpage_name":"ctysluma-vis-shrub"}],[35389511,{"idx":71,"name":"jakb-pants","tpage_name":"introcst-pris"}],[41615411,{"idx":51,"name":"city-mark-rope-01","tpage_name":"wascitya-vis-pris"}],[55312391,{"idx":7,"name":"wascity-steel-bar","tpage_name":"wascityb-vis-pris"}],[458771,{"idx":19,"name":"gun-cover","tpage_name":"level-default-pris"}],[62652433,{"idx":17,"name":"citichic-boot-03","tpage_name":"ctypepa-pris"}],[92209161,{"idx":9,"name":"klever-arm","tpage_name":"ldamklev-pris"}],[73728034,{"idx":34,"name":"sewer-flat-pipe-01","tpage_name":"sewh-vis-tfrag"}],[35127454,{"idx":158,"name":"squid-tubes","tpage_name":"factorya-pris"}],[57147412,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"waspala-pris2"}],[62128132,{"idx":4,"name":"cushion01","tpage_name":"ctycara-pris"}],[327699,{"idx":19,"name":"red-bomb-gradient","tpage_name":"level-default-water"}],[16908321,{"idx":33,"name":"city-ind-bigpipe-siding","tpage_name":"ctyfarmb-vis-tfrag"}],[8847381,{"idx":21,"name":"city-fort-decal","tpage_name":"ctysluma-vis-shrub"}],[35389512,{"idx":72,"name":"jakb-scarf","tpage_name":"introcst-pris"}],[55312392,{"idx":8,"name":"wascity-wall-canister","tpage_name":"wascityb-vis-pris"}],[458772,{"idx":20,"name":"gun-dark-mag","tpage_name":"level-default-pris"}],[62652434,{"idx":18,"name":"citichic-boot-04","tpage_name":"ctypepa-pris"}],[92209162,{"idx":10,"name":"klever-armor-01","tpage_name":"ldamklev-pris"}],[73728035,{"idx":35,"name":"sewer-bolt-side-01","tpage_name":"sewh-vis-tfrag"}],[35127455,{"idx":159,"name":"widow-dull-inards","tpage_name":"factorya-pris"}],[57147413,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"waspala-pris2"}],[16908322,{"idx":34,"name":"city-port-metal-block-04","tpage_name":"ctyfarmb-vis-tfrag"}],[8847382,{"idx":22,"name":"wascitya-stone-top","tpage_name":"ctysluma-vis-shrub"}],[35389513,{"idx":73,"name":"jakb-shoebottom","tpage_name":"introcst-pris"}],[55312393,{"idx":9,"name":"wascitya-redish-metal","tpage_name":"wascityb-vis-pris"}],[458773,{"idx":21,"name":"gun-eye","tpage_name":"level-default-pris"}],[62652435,{"idx":19,"name":"citichic-eye","tpage_name":"ctypepa-pris"}],[16908323,{"idx":35,"name":"city-port-roofmetal","tpage_name":"ctyfarmb-vis-tfrag"}],[8847383,{"idx":23,"name":"city-slum-crater-shards-01","tpage_name":"ctysluma-vis-shrub"}],[35389514,{"idx":74,"name":"jakb-shoemetal","tpage_name":"introcst-pris"}],[55312394,{"idx":10,"name":"wst-plain-metal","tpage_name":"wascityb-vis-pris"}],[458774,{"idx":22,"name":"gun-laser","tpage_name":"level-default-pris"}],[62652436,{"idx":20,"name":"citichic-flesh","tpage_name":"ctypepa-pris"}],[57147415,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"waspala-pris2"}],[62128135,{"idx":7,"name":"moter01","tpage_name":"ctycara-pris"}],[8847384,{"idx":24,"name":"city-inda-scorch-big","tpage_name":"ctysluma-vis-shrub"}],[35389515,{"idx":75,"name":"jakb-shoeteop","tpage_name":"introcst-pris"}],[55312395,{"idx":11,"name":"wst-turret-barrel","tpage_name":"wascityb-vis-pris"}],[458775,{"idx":23,"name":"gun-leather","tpage_name":"level-default-pris"}],[62652437,{"idx":21,"name":"citichic-hair-01","tpage_name":"ctypepa-pris"}],[8847385,{"idx":25,"name":"city-inda-scorch-small","tpage_name":"ctysluma-vis-shrub"}],[458776,{"idx":24,"name":"gun-magport","tpage_name":"level-default-pris"}],[62652438,{"idx":22,"name":"citichic-pants","tpage_name":"ctypepa-pris"}],[57147417,{"idx":25,"name":"king-shoebottom","tpage_name":"waspala-pris2"}],[8847386,{"idx":26,"name":"city-ind-overlay-bullethole-a","tpage_name":"ctysluma-vis-shrub"}],[458777,{"idx":25,"name":"gun-main","tpage_name":"level-default-pris"}],[62652439,{"idx":23,"name":"citichic-pants-02","tpage_name":"ctypepa-pris"}],[57147418,{"idx":26,"name":"king-skirt","tpage_name":"waspala-pris2"}],[62128138,{"idx":10,"name":"carbdash01","tpage_name":"ctycara-pris"}],[8847387,{"idx":27,"name":"city-ind-overlay-bullethole-b","tpage_name":"ctysluma-vis-shrub"}],[1114155,{"idx":43,"name":"hud-gunicon-03","tpage_name":"progress-minimap"}],[12320775,{"idx":7,"name":"city-ind-wall-noisy-border-02","tpage_name":"ctyindb-vis-tfrag"}],[57147419,{"idx":27,"name":"king-teeth","tpage_name":"waspala-pris2"}],[62128139,{"idx":11,"name":"carbside01","tpage_name":"ctycara-pris"}],[35389455,{"idx":15,"name":"cguard1-gunleather","tpage_name":"introcst-pris"}],[16908328,{"idx":40,"name":"citywide-wall-greybolts","tpage_name":"ctyfarmb-vis-tfrag"}],[655363,{"idx":3,"name":"shield-env-rim-src","tpage_name":"level-default-warp"}],[60620919,{"idx":119,"name":"jakchires-jacket","tpage_name":"minea-vis-pris"}],[94240779,{"idx":11,"name":"palcab-lowres-ctyslum-wall-04","tpage_name":"intpfall-vis-tfrag"}],[8847388,{"idx":28,"name":"city-ind-overlay-bullethole-c","tpage_name":"ctysluma-vis-shrub"}],[17563648,{"idx":0,"name":"ctyport-hiphog-halo","tpage_name":"ctyport-sprite"}],[57147420,{"idx":28,"name":"king-thinstrap","tpage_name":"waspala-pris2"}],[62128140,{"idx":12,"name":"carbwing01","tpage_name":"ctycara-pris"}],[458826,{"idx":74,"name":"talkbox-body-02","tpage_name":"level-default-pris"}],[35389520,{"idx":80,"name":"pecker-body-01","tpage_name":"introcst-pris"}],[55312400,{"idx":16,"name":"gekko-hose","tpage_name":"wascityb-vis-pris"}],[92209170,{"idx":18,"name":"klever-fingertop","tpage_name":"ldamklev-pris"}],[95944710,{"idx":6,"name":"torn-belt2","tpage_name":"freehq-pris2"}],[73728043,{"idx":43,"name":"sewer-metal-block-06-slime","tpage_name":"sewh-vis-tfrag"}],[35127463,{"idx":167,"name":"errolcyber-bluewrap","tpage_name":"factorya-pris"}],[57147421,{"idx":29,"name":"king-vest","tpage_name":"waspala-pris2"}],[60882961,{"idx":17,"name":"minc-train-pipe-02","tpage_name":"mineb-vis-pris"}],[62128141,{"idx":13,"name":"carccase01","tpage_name":"ctycara-pris"}],[458827,{"idx":75,"name":"talkbox-body-03","tpage_name":"level-default-pris"}],[8847390,{"idx":30,"name":"des-burn-eye-on","tpage_name":"ctysluma-vis-shrub"}],[35389521,{"idx":81,"name":"pecker-eyelid","tpage_name":"introcst-pris"}],[55312401,{"idx":17,"name":"gekko-laser","tpage_name":"wascityb-vis-pris"}],[57147422,{"idx":30,"name":"king-vestback","tpage_name":"waspala-pris2"}],[62128142,{"idx":14,"name":"carcfoil01","tpage_name":"ctycara-pris"}],[458828,{"idx":76,"name":"talkbox-body-04","tpage_name":"level-default-pris"}],[8847391,{"idx":31,"name":"des-burn-precursor-01","tpage_name":"ctysluma-vis-shrub"}],[48627731,{"idx":19,"name":"sewer-pipe-rim-06","tpage_name":"sewb-vis-tfrag"}],[35389522,{"idx":82,"name":"pecker-face","tpage_name":"introcst-pris"}],[55312402,{"idx":18,"name":"gekko-laserbarrel","tpage_name":"wascityb-vis-pris"}],[1114159,{"idx":47,"name":"hud-oningame-icon","tpage_name":"progress-minimap"}],[12320779,{"idx":11,"name":"city-ind-dark-marble","tpage_name":"ctyindb-vis-tfrag"}],[14811139,{"idx":3,"name":"city-metal-canal","tpage_name":"ctygenb-vis-tfrag"}],[57147423,{"idx":31,"name":"king-wrap","tpage_name":"waspala-pris2"}],[62128143,{"idx":15,"name":"carcnose01","tpage_name":"ctycara-pris"}],[20840461,{"idx":13,"name":"bam-eyelight","tpage_name":"stadiumb-vis-pris"}],[458829,{"idx":77,"name":"talkbox-body-05","tpage_name":"level-default-pris"}],[48627732,{"idx":20,"name":"sewer-pipe-01","tpage_name":"sewb-vis-tfrag"}],[35389523,{"idx":83,"name":"pecker-plume","tpage_name":"introcst-pris"}],[55312403,{"idx":19,"name":"gekko-metal-01","tpage_name":"wascityb-vis-pris"}],[14680090,{"idx":26,"name":"jakchires-clips","tpage_name":"ctygenb-vis-pris"}],[10879080,{"idx":104,"name":"ctyslumc-wall-trim","tpage_name":"ctyslumb-vis-tfrag"}],[57147424,{"idx":32,"name":"king-wraps","tpage_name":"waspala-pris2"}],[62128144,{"idx":16,"name":"carcside01","tpage_name":"ctycara-pris"}],[20840462,{"idx":14,"name":"bam-hairhilite","tpage_name":"stadiumb-vis-pris"}],[458830,{"idx":78,"name":"talkbox-body-06","tpage_name":"level-default-pris"}],[48627733,{"idx":21,"name":"sewer-pipe-02-edge-01","tpage_name":"sewb-vis-tfrag"}],[35389524,{"idx":84,"name":"pecker-tail","tpage_name":"introcst-pris"}],[55312404,{"idx":20,"name":"gekko-nails","tpage_name":"wascityb-vis-pris"}],[61538304,{"idx":0,"name":"freehq-glass-01","tpage_name":"freehq-water"}],[49741840,{"idx":16,"name":"sewer-plate-03","tpage_name":"sewf-vis-pris"}],[14680091,{"idx":27,"name":"jakchires-eye","tpage_name":"ctygenb-vis-pris"}],[10879081,{"idx":105,"name":"cityslumc-purple-plain","tpage_name":"ctyslumb-vis-tfrag"}],[57147425,{"idx":33,"name":"king-wristband","tpage_name":"waspala-pris2"}],[62128145,{"idx":17,"name":"carcvent01","tpage_name":"ctycara-pris"}],[20840463,{"idx":15,"name":"environment-oldmetal","tpage_name":"stadiumb-vis-pris"}],[48627734,{"idx":22,"name":"sewer-pipe-rim-01","tpage_name":"sewb-vis-tfrag"}],[115736618,{"idx":42,"name":"jakchires-jacket","tpage_name":"lnstcst-pris"}],[35389525,{"idx":85,"name":"pecker-teeth","tpage_name":"introcst-pris"}],[55312405,{"idx":21,"name":"gekko-tubes","tpage_name":"wascityb-vis-pris"}],[16908288,{"idx":0,"name":"city-farm-stonewall-bricks","tpage_name":"ctyfarmb-vis-tfrag"}],[117637211,{"idx":91,"name":"jakchires-brownstrap","tpage_name":"destrack-pris"}],[49414218,{"idx":74,"name":"kg-grunt-rim-03","tpage_name":"sewc-vis-pris"}],[60620838,{"idx":38,"name":"daxterlense","tpage_name":"minea-vis-pris"}],[10879082,{"idx":106,"name":"cityslumc-door-plate","tpage_name":"ctyslumb-vis-tfrag"}],[94371842,{"idx":2,"name":"palcab-lowres-background-trees-edge","tpage_name":"intpfall-vis-pris"}],[75890715,{"idx":27,"name":"onin-dresser-drawer-handle","tpage_name":"onintent-tfrag"}],[8912897,{"idx":1,"name":"city-slum-medpipe-02","tpage_name":"ctysluma-vis-tfrag"}],[41418827,{"idx":75,"name":"waspala-wheel-edge","tpage_name":"wascitya-vis-tfrag"}],[55115807,{"idx":31,"name":"wascity-stucco-wall-bleached-2-broken","tpage_name":"wascityb-vis-tfrag"}],[53739541,{"idx":21,"name":"cguardgame-shoebottom","tpage_name":"forestb-vis-pris"}],[48758821,{"idx":37,"name":"sewer-metal-floor-01","tpage_name":"sewc-vis-tfrag"}],[94371843,{"idx":3,"name":"palcab-lowres-background-trees2","tpage_name":"intpfall-vis-pris"}],[75890716,{"idx":28,"name":"onin-dresser-drawer2","tpage_name":"onintent-tfrag"}],[8912898,{"idx":2,"name":"city-slum-medpipe-01","tpage_name":"ctysluma-vis-tfrag"}],[41418828,{"idx":76,"name":"waspala-elevator-wood01","tpage_name":"wascitya-vis-tfrag"}],[48889908,{"idx":52,"name":"sewer-lip-01","tpage_name":"sewd-vis-tfrag"}],[55115808,{"idx":32,"name":"wascity-ditch-wall-top-to-ground","tpage_name":"wascityb-vis-tfrag"}],[53739542,{"idx":22,"name":"cguardgame-shouldershield","tpage_name":"forestb-vis-pris"}],[48758822,{"idx":38,"name":"sewer-plate-01","tpage_name":"sewc-vis-tfrag"}],[94371844,{"idx":4,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"intpfall-vis-pris"}],[75890717,{"idx":29,"name":"onin-dresser-wood","tpage_name":"onintent-tfrag"}],[60948557,{"idx":77,"name":"minc-safe-slide01","tpage_name":"minec-vis-tfrag"}],[35127453,{"idx":157,"name":"squid-bulb-sm","tpage_name":"factorya-pris"}],[73728033,{"idx":33,"name":"sewer-pipe-01","tpage_name":"sewh-vis-tfrag"}],[8912899,{"idx":3,"name":"city-slum-greenmetal-tube","tpage_name":"ctysluma-vis-tfrag"}],[41418829,{"idx":77,"name":"waspala-corgmetal","tpage_name":"wascitya-vis-tfrag"}],[48889909,{"idx":53,"name":"sewer-round-03","tpage_name":"sewd-vis-tfrag"}],[55115809,{"idx":33,"name":"wascity-ground-2-ditch-04","tpage_name":"wascityb-vis-tfrag"}],[53739543,{"idx":23,"name":"cguardgame-sleeve","tpage_name":"forestb-vis-pris"}],[71106561,{"idx":1,"name":"wstd-floor-panel02","tpage_name":"wasstadb-tfrag"}],[94371845,{"idx":5,"name":"palcab-lowres-farm-road","tpage_name":"intpfall-vis-pris"}],[75890718,{"idx":30,"name":"onin-dresser-wood2","tpage_name":"onintent-tfrag"}],[60948558,{"idx":78,"name":"minc-train-pipe-cap-01","tpage_name":"minec-vis-tfrag"}],[8912900,{"idx":4,"name":"city-slum-ditch-wall-top-02","tpage_name":"ctysluma-vis-tfrag"}],[91160696,{"idx":120,"name":"jakc-scarfhanging","tpage_name":"gungame-vis-pris"}],[112328756,{"idx":52,"name":"jakchires-shoemetal","tpage_name":"wascast-pris"}],[94371846,{"idx":6,"name":"palcab-lowres-farm-wall","tpage_name":"intpfall-vis-pris"}],[75890719,{"idx":31,"name":"onin-genie-lamp","tpage_name":"onintent-tfrag"}],[8912901,{"idx":5,"name":"city-slum-ground-2-ditch-03","tpage_name":"ctysluma-vis-tfrag"}],[91160697,{"idx":121,"name":"jakc-skirt","tpage_name":"gungame-vis-pris"}],[112328757,{"idx":53,"name":"jakchires-shoeteop","tpage_name":"wascast-pris"}],[53739545,{"idx":25,"name":"darkguard-armshield","tpage_name":"forestb-vis-pris"}],[48758825,{"idx":41,"name":"strip-black","tpage_name":"sewc-vis-tfrag"}],[94371847,{"idx":7,"name":"palcab-lowres-farm-wall-top","tpage_name":"intpfall-vis-pris"}],[75890720,{"idx":32,"name":"onin-genie-lamp-plain","tpage_name":"onintent-tfrag"}],[60948560,{"idx":80,"name":"minc-slab-01a","tpage_name":"minec-vis-tfrag"}],[35127456,{"idx":160,"name":"widow-pod-gun-metal","tpage_name":"factorya-pris"}],[73728036,{"idx":36,"name":"sewer-bolt-side-02","tpage_name":"sewh-vis-tfrag"}],[8912902,{"idx":6,"name":"city-slum-ditch-wall-top-to-ground","tpage_name":"ctysluma-vis-tfrag"}],[41418832,{"idx":80,"name":"waspala-elevator-cable","tpage_name":"wascitya-vis-tfrag"}],[48889912,{"idx":56,"name":"sewer-bolt-side-02","tpage_name":"sewd-vis-tfrag"}],[55115812,{"idx":36,"name":"wascity-ground-2-ditch-05","tpage_name":"wascityb-vis-tfrag"}],[53739546,{"idx":26,"name":"darkguard-headshield","tpage_name":"forestb-vis-pris"}],[48758826,{"idx":42,"name":"sewer-grate-01","tpage_name":"sewc-vis-tfrag"}],[94371853,{"idx":13,"name":"grillRim01","tpage_name":"intpfall-vis-pris"}],[75890726,{"idx":38,"name":"onin-rug-long","tpage_name":"onintent-tfrag"}],[35127462,{"idx":166,"name":"errolcyber-bluemetal-01","tpage_name":"factorya-pris"}],[851968,{"idx":0,"name":"cv-supportpole-end-2x2","tpage_name":"halfpipe-tfrag"}],[41418838,{"idx":86,"name":"city-slum-medpipe-01","tpage_name":"wascitya-vis-tfrag"}],[55115818,{"idx":42,"name":"wascity-palm-beard","tpage_name":"wascityb-vis-tfrag"}],[53739552,{"idx":32,"name":"kgtrns-side01","tpage_name":"forestb-vis-pris"}],[48758832,{"idx":48,"name":"sewer-round-02","tpage_name":"sewc-vis-tfrag"}],[94371854,{"idx":14,"name":"gunBoxBack01","tpage_name":"intpfall-vis-pris"}],[75890727,{"idx":39,"name":"onin-rug-rolled","tpage_name":"onintent-tfrag"}],[851969,{"idx":1,"name":"cv-woodpoles","tpage_name":"halfpipe-tfrag"}],[41418839,{"idx":87,"name":"city-slum-medpipe-02","tpage_name":"wascitya-vis-tfrag"}],[48889919,{"idx":63,"name":"sewer-scaffold-01","tpage_name":"sewd-vis-tfrag"}],[55115819,{"idx":43,"name":"wascity-wood-plain","tpage_name":"wascityb-vis-tfrag"}],[48693249,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewb-vis-shrub"}],[53739553,{"idx":33,"name":"kgtrns-topjet01","tpage_name":"forestb-vis-pris"}],[94371861,{"idx":21,"name":"kcfrontend01","tpage_name":"intpfall-vis-pris"}],[49676290,{"idx":2,"name":"sewer-shrub-pitting-01","tpage_name":"sewf-vis-shrub"}],[112525322,{"idx":10,"name":"daxterfoot","tpage_name":"desrescc-pris"}],[42401824,{"idx":32,"name":"wascitya-airlock-door","tpage_name":"wasdoors-vis-tfrag"}],[60882951,{"idx":7,"name":"minc-rust-02","tpage_name":"mineb-vis-pris"}],[62128131,{"idx":3,"name":"carawing01","tpage_name":"ctycara-pris"}],[57147411,{"idx":19,"name":"king-lgblackstrap","tpage_name":"waspala-pris2"}],[94371862,{"idx":22,"name":"light01","tpage_name":"intpfall-vis-pris"}],[75890735,{"idx":47,"name":"onin-skull-teeth","tpage_name":"onintent-tfrag"}],[89587715,{"idx":3,"name":"pecker-face","tpage_name":"lwstdpck-pris"}],[79364216,{"idx":120,"name":"monk-eye-c","tpage_name":"wasseem-pris"}],[104267816,{"idx":40,"name":"rub-ox-pipe-01","tpage_name":"stadium-vis-tfrag"}],[33423360,{"idx":0,"name":"ya-water","tpage_name":"halfpipe-water"}],[720911,{"idx":15,"name":"loadsave-mission","tpage_name":"level-default-shrub"}],[62783491,{"idx":3,"name":"grunt-metal-01","tpage_name":"ctypepb-pris"}],[55312411,{"idx":27,"name":"city-mark-rice-01","tpage_name":"wascityb-vis-pris"}],[60882986,{"idx":42,"name":"mincrane-piston-01","tpage_name":"mineb-vis-pris"}],[81723460,{"idx":68,"name":"klever-hand","tpage_name":"ljndklev-pris"}],[67043343,{"idx":15,"name":"screen-14","tpage_name":"vinroom-sprite"}],[60817443,{"idx":35,"name":"minc-ox-pipe-01","tpage_name":"mineb-vis-shrub"}],[62062623,{"idx":31,"name":"flying-bird-04","tpage_name":"wascityb-sprite"}],[49610823,{"idx":71,"name":"sewer-big-brace-trim-02","tpage_name":"sewf-vis-tfrag"}],[851977,{"idx":9,"name":"halfpipe-grid-01","tpage_name":"halfpipe-tfrag"}],[94371863,{"idx":23,"name":"lightCase01","tpage_name":"intpfall-vis-pris"}],[851978,{"idx":10,"name":"lt-eco-vent-blue-01","tpage_name":"halfpipe-tfrag"}],[71106580,{"idx":20,"name":"wstd-spear01","tpage_name":"wasstadb-tfrag"}],[73596940,{"idx":12,"name":"sewer-metal-block-06","tpage_name":"sewi-vis-tfrag"}],[94371864,{"idx":24,"name":"palace-break-base01","tpage_name":"intpfall-vis-pris"}],[112525325,{"idx":13,"name":"daxterheadwidenew","tpage_name":"desrescc-pris"}],[42401827,{"idx":35,"name":"wascitya-stone-bottom-door","tpage_name":"wasdoors-vis-tfrag"}],[851979,{"idx":11,"name":"lt-eco-vent-side-01","tpage_name":"halfpipe-tfrag"}],[71106581,{"idx":21,"name":"wstd-spear02","tpage_name":"wasstadb-tfrag"}],[73596941,{"idx":13,"name":"sewer-brick-roof-01","tpage_name":"sewi-vis-tfrag"}],[94371870,{"idx":30,"name":"palace-break-bigwall04","tpage_name":"intpfall-vis-pris"}],[81723490,{"idx":98,"name":"jakchires-facelft","tpage_name":"ljndklev-pris"}],[48562246,{"idx":70,"name":"jakchires-facelft","tpage_name":"sewa-vis-pris"}],[67239946,{"idx":10,"name":"vin-floor-02a","tpage_name":"vinroom-vis-tfrag"}],[52297786,{"idx":58,"name":"freehq-projector03","tpage_name":"freehq-tfrag"}],[57278506,{"idx":42,"name":"metalflut-nail","tpage_name":"waswide-vis-pris"}],[61014046,{"idx":30,"name":"minc-light-blue","tpage_name":"minec-vis-shrub"}],[62259226,{"idx":26,"name":"wing02grey01","tpage_name":"ctycarc-pris"}],[94371896,{"idx":56,"name":"palace-break-rebar","tpage_name":"intpfall-vis-pris"}],[28049408,{"idx":0,"name":"tpal-panl_piller01","tpage_name":"intpalrf-tfrag"}],[61669391,{"idx":15,"name":"fora-precursor-metal-edge-01","tpage_name":"foresta-vis-shrub"}],[8912925,{"idx":29,"name":"city-bluelight","tpage_name":"ctysluma-vis-tfrag"}],[94371871,{"idx":31,"name":"palace-break-bigwall05","tpage_name":"intpfall-vis-pris"}],[75890744,{"idx":56,"name":"onin-tassles","tpage_name":"onintent-tfrag"}],[81723491,{"idx":99,"name":"jakchires-facert","tpage_name":"ljndklev-pris"}],[48562247,{"idx":71,"name":"jakchires-facert","tpage_name":"sewa-vis-pris"}],[67239947,{"idx":11,"name":"vin-floor-03","tpage_name":"vinroom-vis-tfrag"}],[52297787,{"idx":59,"name":"freehq-projector04","tpage_name":"freehq-tfrag"}],[57278507,{"idx":43,"name":"metalflut-plates-02","tpage_name":"waswide-vis-pris"}],[71106588,{"idx":28,"name":"wstd-scaffold-strut","tpage_name":"wasstadb-tfrag"}],[73596948,{"idx":20,"name":"sewer-grill-03","tpage_name":"sewi-vis-tfrag"}],[38731908,{"idx":132,"name":"flying-bird-05","tpage_name":"wasstada-sprite"}],[94371924,{"idx":84,"name":"post01","tpage_name":"intpfall-vis-pris"}],[120520704,{"idx":0,"name":"airlock-door-bolt","tpage_name":"forestx-vis-pris"}],[28049436,{"idx":28,"name":"intr-panl02","tpage_name":"intpalrf-tfrag"}],[8912953,{"idx":57,"name":"slum-ditch-bottom-01-small","tpage_name":"ctysluma-vis-tfrag"}],[60817436,{"idx":28,"name":"minc-yel-paint-wall-01","tpage_name":"mineb-vis-shrub"}],[49610816,{"idx":64,"name":"sewer-brick-roof-02","tpage_name":"sewf-vis-tfrag"}],[67043336,{"idx":8,"name":"screen-07","tpage_name":"vinroom-sprite"}],[49610776,{"idx":24,"name":"sewer-block-01","tpage_name":"sewf-vis-tfrag"}],[52101136,{"idx":16,"name":"nst-egg-spider-body","tpage_name":"nsta-vis-pris"}],[57081856,{"idx":0,"name":"bam-eyelight","tpage_name":"waspala-pris"}],[60817437,{"idx":29,"name":"mine-falling-elevator-top-lod2","tpage_name":"mineb-vis-shrub"}],[67043337,{"idx":9,"name":"screen-08","tpage_name":"vinroom-sprite"}],[49610817,{"idx":65,"name":"sewer-brick-roof-01","tpage_name":"sewf-vis-tfrag"}],[8716328,{"idx":40,"name":"baron-neon-eye-a","tpage_name":"ctysluma-sprite"}],[62259204,{"idx":4,"name":"grillRim01","tpage_name":"ctycarc-pris"}],[52297764,{"idx":36,"name":"freehq-ground-tile-set1-ltc","tpage_name":"freehq-tfrag"}],[61014024,{"idx":8,"name":"minc-rust-pipe-03","tpage_name":"minec-vis-shrub"}],[10616833,{"idx":1,"name":"sign-blank","tpage_name":"ctyslumb-sprite"}],[49610777,{"idx":25,"name":"sewer-metal-block-04","tpage_name":"sewf-vis-tfrag"}],[52101137,{"idx":17,"name":"nst-egg-spider-egg","tpage_name":"nsta-vis-pris"}],[57081857,{"idx":1,"name":"bam-hairhilite","tpage_name":"waspala-pris"}],[60817438,{"idx":30,"name":"mine-moving-plat-wheel","tpage_name":"mineb-vis-shrub"}],[67043338,{"idx":10,"name":"screen-09","tpage_name":"vinroom-sprite"}],[49610818,{"idx":66,"name":"sewer-brick-roof-03","tpage_name":"sewf-vis-tfrag"}],[60817439,{"idx":31,"name":"mine-moving-plat-drilltip","tpage_name":"mineb-vis-shrub"}],[67043339,{"idx":11,"name":"screen-10","tpage_name":"vinroom-sprite"}],[49610819,{"idx":67,"name":"sewer-brick-roof-04","tpage_name":"sewf-vis-tfrag"}],[60817440,{"idx":32,"name":"mine-moving-plat-top-lod1","tpage_name":"mineb-vis-shrub"}],[62062620,{"idx":28,"name":"flying-bird-01","tpage_name":"wascityb-sprite"}],[67043340,{"idx":12,"name":"screen-11","tpage_name":"vinroom-sprite"}],[49610820,{"idx":68,"name":"sewer-big-brace-01","tpage_name":"sewf-vis-tfrag"}],[49610780,{"idx":28,"name":"sewer-pipe-rim-10","tpage_name":"sewf-vis-tfrag"}],[52101140,{"idx":20,"name":"nst-egg-spider-pipe","tpage_name":"nsta-vis-pris"}],[57081860,{"idx":4,"name":"daxter-orange","tpage_name":"waspala-pris"}],[60817441,{"idx":33,"name":"minc-chain-metal-01","tpage_name":"mineb-vis-shrub"}],[62062621,{"idx":29,"name":"flying-bird-02","tpage_name":"wascityb-sprite"}],[67043341,{"idx":13,"name":"screen-12","tpage_name":"vinroom-sprite"}],[49610821,{"idx":69,"name":"sewer-big-brace-02","tpage_name":"sewf-vis-tfrag"}],[49610781,{"idx":29,"name":"sewer-rubber-rim-01","tpage_name":"sewf-vis-tfrag"}],[57081861,{"idx":5,"name":"daxterarm","tpage_name":"waspala-pris"}],[60817442,{"idx":34,"name":"minc-blue-white-paint-safe-rust04","tpage_name":"mineb-vis-shrub"}],[67043342,{"idx":14,"name":"screen-13","tpage_name":"vinroom-sprite"}],[49610822,{"idx":70,"name":"sewer-big-brace-trim-01","tpage_name":"sewf-vis-tfrag"}],[62062622,{"idx":30,"name":"flying-bird-03","tpage_name":"wascityb-sprite"}],[49610782,{"idx":30,"name":"sew-gun-rim-03","tpage_name":"sewf-vis-tfrag"}],[57081862,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"waspala-pris"}],[15990800,{"idx":16,"name":"city-farm-sprinkle-metal-dirt","tpage_name":"ctyfarma-vis-pris"}],[49610783,{"idx":31,"name":"sewer-screw-02","tpage_name":"sewf-vis-tfrag"}],[57081863,{"idx":7,"name":"daxterbolt","tpage_name":"waspala-pris"}],[15990801,{"idx":17,"name":"city-farm-sprinkle-suppport","tpage_name":"ctyfarma-vis-pris"}],[49610784,{"idx":32,"name":"sewer-pipe-rim-07","tpage_name":"sewf-vis-tfrag"}],[57081864,{"idx":8,"name":"daxterear","tpage_name":"waspala-pris"}],[8716336,{"idx":48,"name":"baron-neon-ghotee","tpage_name":"ctysluma-sprite"}],[10616841,{"idx":9,"name":"sign-tall-a","tpage_name":"ctyslumb-sprite"}],[15990802,{"idx":18,"name":"city-farm-veg-cablip","tpage_name":"ctyfarma-vis-pris"}],[49610785,{"idx":33,"name":"sewer-plate-01","tpage_name":"sewf-vis-tfrag"}],[57081865,{"idx":9,"name":"daxterfinger","tpage_name":"waspala-pris"}],[8716337,{"idx":49,"name":"baron-neon-ghotee-on","tpage_name":"ctysluma-sprite"}],[10616842,{"idx":10,"name":"sign-tall-b","tpage_name":"ctyslumb-sprite"}],[16121885,{"idx":29,"name":"city-farm-rock-small","tpage_name":"ctyfarma-vis-tfrag"}],[49283129,{"idx":57,"name":"sewer-grill-01","tpage_name":"sewd-vis-pris"}],[15990803,{"idx":19,"name":"city-farm-veg-chilberry-02","tpage_name":"ctyfarma-vis-pris"}],[49610786,{"idx":34,"name":"sewer-pipe-rim-05b","tpage_name":"sewf-vis-tfrag"}],[57081866,{"idx":10,"name":"daxterfoot","tpage_name":"waspala-pris"}],[8716338,{"idx":50,"name":"baron-neon-mouth","tpage_name":"ctysluma-sprite"}],[10616843,{"idx":11,"name":"sign-wide-a","tpage_name":"ctyslumb-sprite"}],[15990804,{"idx":20,"name":"city-farm-veg-green-2","tpage_name":"ctyfarma-vis-pris"}],[16121887,{"idx":31,"name":"city-ind-metal-02","tpage_name":"ctyfarma-vis-tfrag"}],[49283131,{"idx":59,"name":"sonar-wave","tpage_name":"sewd-vis-pris"}],[50659376,{"idx":48,"name":"fora-spawn-root","tpage_name":"foresta-vis-tfrag"}],[35389526,{"idx":86,"name":"pecker-wingbottom","tpage_name":"introcst-pris"}],[55312406,{"idx":22,"name":"city-mark-clay-pot-01","tpage_name":"wascityb-vis-pris"}],[16908289,{"idx":1,"name":"city-farm-stone-wall-01","tpage_name":"ctyfarmb-vis-tfrag"}],[117637212,{"idx":92,"name":"jakchires-brwnleather","tpage_name":"destrack-pris"}],[104857600,{"idx":0,"name":"bam-eyelight","tpage_name":"oasiscst-pris"}],[49414219,{"idx":75,"name":"roboguard-headshield","tpage_name":"sewc-vis-pris"}],[60620839,{"idx":39,"name":"daxternose","tpage_name":"minea-vis-pris"}],[35389527,{"idx":87,"name":"pecker-wingtop","tpage_name":"introcst-pris"}],[55312407,{"idx":23,"name":"city-mark-cotton-32x32","tpage_name":"wascityb-vis-pris"}],[16908290,{"idx":2,"name":"city-farm-stonewall-base-01","tpage_name":"ctyfarmb-vis-tfrag"}],[117637213,{"idx":93,"name":"jakchires-chestplate","tpage_name":"destrack-pris"}],[104857601,{"idx":1,"name":"bam-hairhilite","tpage_name":"oasiscst-pris"}],[49414220,{"idx":76,"name":"roboguard-shouldershield","tpage_name":"sewc-vis-pris"}],[60620840,{"idx":40,"name":"daxterteeth","tpage_name":"minea-vis-pris"}],[60620881,{"idx":81,"name":"mine-can-metal-01","tpage_name":"minea-vis-pris"}],[35389528,{"idx":88,"name":"pecker-yellowfur","tpage_name":"introcst-pris"}],[62783488,{"idx":0,"name":"grunt-eye-01","tpage_name":"ctypepb-pris"}],[55312408,{"idx":24,"name":"city-mark-cotton-wrap","tpage_name":"wascityb-vis-pris"}],[16908291,{"idx":3,"name":"city-farm-wall-top","tpage_name":"ctyfarmb-vis-tfrag"}],[117637214,{"idx":94,"name":"jakchires-clips","tpage_name":"destrack-pris"}],[104857602,{"idx":2,"name":"daxter-eyelid","tpage_name":"oasiscst-pris"}],[49414221,{"idx":77,"name":"squid-bulb-sm","tpage_name":"sewc-vis-pris"}],[60620841,{"idx":41,"name":"daxtertuft","tpage_name":"minea-vis-pris"}],[60620882,{"idx":82,"name":"mine-caution-metal-01","tpage_name":"minea-vis-pris"}],[16908292,{"idx":4,"name":"city-farm-sprinkle-metalbase","tpage_name":"ctyfarmb-vis-tfrag"}],[117637215,{"idx":95,"name":"jakchires-eye","tpage_name":"destrack-pris"}],[104857603,{"idx":3,"name":"daxter-furhilite","tpage_name":"oasiscst-pris"}],[49414222,{"idx":78,"name":"widow-dull-inards","tpage_name":"sewc-vis-pris"}],[60620842,{"idx":42,"name":"environment-oldmetal","tpage_name":"minea-vis-pris"}],[60620883,{"idx":83,"name":"mine-decal-metal-01","tpage_name":"minea-vis-pris"}],[16908293,{"idx":5,"name":"city-farm-black","tpage_name":"ctyfarmb-vis-tfrag"}],[117637216,{"idx":96,"name":"jakchires-eyebrow","tpage_name":"destrack-pris"}],[104857604,{"idx":4,"name":"daxter-orange","tpage_name":"oasiscst-pris"}],[49414223,{"idx":79,"name":"widow-pod-gun-metal","tpage_name":"sewc-vis-pris"}],[16908295,{"idx":7,"name":"city-farm-smalldirt","tpage_name":"ctyfarmb-vis-tfrag"}],[117637218,{"idx":98,"name":"jakchires-facelft","tpage_name":"destrack-pris"}],[104857606,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"oasiscst-pris"}],[60620886,{"idx":86,"name":"mine-red-big-metal-01","tpage_name":"minea-vis-pris"}],[14680099,{"idx":35,"name":"jakchires-jacket","tpage_name":"ctygenb-vis-pris"}],[10879089,{"idx":113,"name":"cityslumc-lamp-small","tpage_name":"ctyslumb-vis-tfrag"}],[16908296,{"idx":8,"name":"city-farm-metal-panel-01","tpage_name":"ctyfarmb-vis-tfrag"}],[117637219,{"idx":99,"name":"jakchires-facert","tpage_name":"destrack-pris"}],[104857607,{"idx":7,"name":"daxterbolt","tpage_name":"oasiscst-pris"}],[60620887,{"idx":87,"name":"mine-red-metal-01","tpage_name":"minea-vis-pris"}],[99483715,{"idx":67,"name":"dp-bipedal-skin-bulge-01","tpage_name":"lformach-vis-pris"}],[106954795,{"idx":43,"name":"vol-plat-top","tpage_name":"volcanoa-vis-tfrag"}],[14680100,{"idx":36,"name":"jakchires-leatherpouch","tpage_name":"ctygenb-vis-pris"}],[10879090,{"idx":114,"name":"cityslumc-lamp-gold","tpage_name":"ctyslumb-vis-tfrag"}],[16908297,{"idx":9,"name":"city-farm-metal-panel-02","tpage_name":"ctyfarmb-vis-tfrag"}],[117637220,{"idx":100,"name":"jakchires-glovetop","tpage_name":"destrack-pris"}],[148766720,{"idx":0,"name":"bam-eyelight","tpage_name":"warpcast-pris"}],[104857608,{"idx":8,"name":"daxterear","tpage_name":"oasiscst-pris"}],[1114171,{"idx":59,"name":"hud-whack-icon","tpage_name":"progress-minimap"}],[12320791,{"idx":23,"name":"city-ind-grnd-cobl-02","tpage_name":"ctyindb-vis-tfrag"}],[14811151,{"idx":15,"name":"city-roofmetal-rim","tpage_name":"ctygenb-vis-tfrag"}],[16908298,{"idx":10,"name":"city-farm-metal-bracket-02","tpage_name":"ctyfarmb-vis-tfrag"}],[117637221,{"idx":101,"name":"jakchires-hair","tpage_name":"destrack-pris"}],[148766721,{"idx":1,"name":"bam-hairhilite","tpage_name":"warpcast-pris"}],[104857609,{"idx":9,"name":"daxterfinger","tpage_name":"oasiscst-pris"}],[60620889,{"idx":89,"name":"mine-red-white-metal-01","tpage_name":"minea-vis-pris"}],[12320792,{"idx":24,"name":"city-bigpipe-main-02","tpage_name":"ctyindb-vis-tfrag"}],[14811152,{"idx":16,"name":"city-step","tpage_name":"ctygenb-vis-tfrag"}],[16908299,{"idx":11,"name":"city-farm-metal-bracket-01","tpage_name":"ctyfarmb-vis-tfrag"}],[117637222,{"idx":102,"name":"jakchires-horn","tpage_name":"destrack-pris"}],[148766722,{"idx":2,"name":"environment-oldmetal","tpage_name":"warpcast-pris"}],[104857610,{"idx":10,"name":"daxterfoot","tpage_name":"oasiscst-pris"}],[16908300,{"idx":12,"name":"city-farm-bigpipe-01","tpage_name":"ctyfarmb-vis-tfrag"}],[117637223,{"idx":103,"name":"jakchires-jacket","tpage_name":"destrack-pris"}],[148766723,{"idx":3,"name":"jakc-armor","tpage_name":"warpcast-pris"}],[104857611,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"oasiscst-pris"}],[8847360,{"idx":0,"name":"slum-ground-01-small","tpage_name":"ctysluma-vis-shrub"}],[53674004,{"idx":20,"name":"fora-spawn-root","tpage_name":"forestb-vis-tfrag"}],[99483719,{"idx":71,"name":"dp-bipedal-spine-01","tpage_name":"lformach-vis-pris"}],[106954799,{"idx":47,"name":"vol-bark-burnt-hole","tpage_name":"volcanoa-vis-tfrag"}],[14680104,{"idx":40,"name":"jakchires-shoebottom","tpage_name":"ctygenb-vis-pris"}],[16580609,{"idx":1,"name":"ctyfarm-chili-leaf","tpage_name":"ctyfarmb-sprite"}],[10879094,{"idx":118,"name":"ctyslumc-window-panes-LOW","tpage_name":"ctyslumb-vis-tfrag"}],[16908301,{"idx":13,"name":"city-farm-aquaduct-glass-02","tpage_name":"ctyfarmb-vis-tfrag"}],[99483651,{"idx":3,"name":"for-egg-gem-01","tpage_name":"lformach-vis-pris"}],[74580051,{"idx":83,"name":"sewer-grindpipe","tpage_name":"sewm-vis-tfrag"}],[88277031,{"idx":39,"name":"cguard-air-train-side1","tpage_name":"introcst-tfrag"}],[8847361,{"idx":1,"name":"city-slum-blotch-withstreaks-01","tpage_name":"ctysluma-vis-shrub"}],[53674005,{"idx":21,"name":"fora-green-eco-vent-hole","tpage_name":"forestb-vis-tfrag"}],[99483720,{"idx":72,"name":"dp-bipedal-toe-01","tpage_name":"lformach-vis-pris"}],[106954800,{"idx":48,"name":"min-env-mar-01","tpage_name":"volcanoa-vis-tfrag"}],[14680105,{"idx":41,"name":"jakchires-shoemetal","tpage_name":"ctygenb-vis-pris"}],[16580610,{"idx":2,"name":"ctyfarm-chili-stem","tpage_name":"ctyfarmb-sprite"}],[10879095,{"idx":119,"name":"ctyslumc-wall-trim-LOW","tpage_name":"ctyslumb-vis-tfrag"}],[327680,{"idx":0,"name":"bomb-gradient","tpage_name":"level-default-water"}],[16908302,{"idx":14,"name":"city-farm-tree-bark-01","tpage_name":"ctyfarmb-vis-tfrag"}],[8847362,{"idx":2,"name":"city-slum-cattail-grass","tpage_name":"ctysluma-vis-shrub"}],[99483721,{"idx":73,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"lformach-vis-pris"}],[106954801,{"idx":49,"name":"vola-dp-organic-pipe","tpage_name":"volcanoa-vis-tfrag"}],[14680106,{"idx":42,"name":"jakchires-shoeteop","tpage_name":"ctygenb-vis-pris"}],[16580611,{"idx":3,"name":"ctyfarm-eggplant-body","tpage_name":"ctyfarmb-sprite"}],[10879096,{"idx":120,"name":"city-ind-black","tpage_name":"ctyslumb-vis-tfrag"}],[458765,{"idx":13,"name":"environment-oldmetal","tpage_name":"level-default-pris"}],[327681,{"idx":1,"name":"bomb-gradient-flames","tpage_name":"level-default-water"}],[16908303,{"idx":15,"name":"city-farm-cart-woodslat-02","tpage_name":"ctyfarmb-vis-tfrag"}],[8847363,{"idx":3,"name":"city-dirtywood-small","tpage_name":"ctysluma-vis-shrub"}],[99483722,{"idx":74,"name":"environment-darkprec","tpage_name":"lformach-vis-pris"}],[106954802,{"idx":50,"name":"minc-light","tpage_name":"volcanoa-vis-tfrag"}],[16580612,{"idx":4,"name":"ctyfarm-eggplant-leaf-1","tpage_name":"ctyfarmb-sprite"}],[458766,{"idx":14,"name":"environment-title","tpage_name":"level-default-pris"}],[327682,{"idx":2,"name":"bomb-gradient-rim","tpage_name":"level-default-water"}],[16908304,{"idx":16,"name":"city-farm-dirtymetal-01","tpage_name":"ctyfarmb-vis-tfrag"}],[8847364,{"idx":4,"name":"city-slum-bracketmetal-tiny","tpage_name":"ctysluma-vis-shrub"}],[99483723,{"idx":75,"name":"spawner-base-dead","tpage_name":"lformach-vis-pris"}],[106954803,{"idx":51,"name":"minc-platfrom-metal-01","tpage_name":"volcanoa-vis-tfrag"}],[14680108,{"idx":44,"name":"bat-amulet-01","tpage_name":"ctygenb-vis-pris"}],[16580613,{"idx":5,"name":"ctyfarm-eggplant-leaf-2","tpage_name":"ctyfarmb-sprite"}],[458767,{"idx":15,"name":"gun-backslit","tpage_name":"level-default-pris"}],[52101138,{"idx":18,"name":"nst-egg-spider-eye","tpage_name":"nsta-vis-pris"}],[57081858,{"idx":2,"name":"daxter-eyelid","tpage_name":"waspala-pris"}],[327683,{"idx":3,"name":"loadsave-frame","tpage_name":"level-default-water"}],[16908305,{"idx":17,"name":"city-farm-dirt-mound-blend-01","tpage_name":"ctyfarmb-vis-tfrag"}],[8847365,{"idx":5,"name":"city-slum-dirt-overlay-dirt","tpage_name":"ctysluma-vis-shrub"}],[99483724,{"idx":76,"name":"spawner-base-main-dead","tpage_name":"lformach-vis-pris"}],[14680109,{"idx":45,"name":"bat-amulet-02","tpage_name":"ctygenb-vis-pris"}],[220529116,{"idx":476,"name":"ogre-envmap","tpage_name":"museum4-pris"}],[10879099,{"idx":123,"name":"lfacrm-rubber-01","tpage_name":"ctyslumb-vis-tfrag"}],[458768,{"idx":16,"name":"gun-barrel-alt","tpage_name":"level-default-pris"}],[52101139,{"idx":19,"name":"nst-egg-spider-metal","tpage_name":"nsta-vis-pris"}],[57081859,{"idx":3,"name":"daxter-furhilite","tpage_name":"waspala-pris"}],[327684,{"idx":4,"name":"loadsave-screen","tpage_name":"level-default-water"}],[16908306,{"idx":18,"name":"city-farm-dirt-small-01","tpage_name":"ctyfarmb-vis-tfrag"}],[8847366,{"idx":6,"name":"city-slum-wire","tpage_name":"ctysluma-vis-shrub"}],[14680110,{"idx":46,"name":"bat-amulet-03","tpage_name":"ctygenb-vis-pris"}],[220529117,{"idx":477,"name":"ogre-phong","tpage_name":"museum4-pris"}],[10879100,{"idx":124,"name":"ctyslumc-bigtext","tpage_name":"ctyslumb-vis-tfrag"}],[458769,{"idx":17,"name":"gun-blue-glow","tpage_name":"level-default-pris"}],[262328,{"idx":184,"name":"radial-gradient-yellow","tpage_name":"level-default-sprite"}],[53805068,{"idx":12,"name":"forb-water-wave-01","tpage_name":"forestb-vis-water"}],[8716303,{"idx":15,"name":"baron-neon-blue-h-on","tpage_name":"ctysluma-sprite"}],[48496643,{"idx":3,"name":"sewer-metal-block-01","tpage_name":"sewa-vis-tfrag"}],[11403283,{"idx":19,"name":"city-slums-nail","tpage_name":"ctyslumc-vis-tfrag"}],[8912923,{"idx":27,"name":"city-metal-wall","tpage_name":"ctysluma-vis-tfrag"}],[8716356,{"idx":68,"name":"baron-neon-white-e","tpage_name":"ctysluma-sprite"}],[60817410,{"idx":2,"name":"minc-light","tpage_name":"mineb-vis-shrub"}],[57081870,{"idx":14,"name":"daxterhelmetplain","tpage_name":"waspala-pris"}],[11403336,{"idx":72,"name":"ctyslumc-grass","tpage_name":"ctyslumc-vis-tfrag"}],[11403346,{"idx":82,"name":"ctyslumc-grate1","tpage_name":"ctyslumc-vis-tfrag"}],[8716368,{"idx":80,"name":"red-tracer","tpage_name":"ctysluma-sprite"}],[95879171,{"idx":3,"name":"torn-armlft","tpage_name":"ltorn-pris2"}],[60817422,{"idx":14,"name":"minc-blue-paint-rust01","tpage_name":"mineb-vis-shrub"}],[49610802,{"idx":50,"name":"sewer-scaffold-01","tpage_name":"sewf-vis-tfrag"}],[11403348,{"idx":84,"name":"ctyslumc-floor-base","tpage_name":"ctyslumc-vis-tfrag"}],[52297741,{"idx":13,"name":"freehq-gray-metal-disc02","tpage_name":"freehq-tfrag"}],[48562201,{"idx":25,"name":"environment-oldmetal","tpage_name":"sewa-vis-pris"}],[11403349,{"idx":85,"name":"ctyslumc-railing-trim","tpage_name":"ctyslumc-vis-tfrag"}],[52297742,{"idx":14,"name":"freehq-wal-tilem01","tpage_name":"freehq-tfrag"}],[11403350,{"idx":86,"name":"ctyslumc-overhang-01","tpage_name":"ctyslumc-vis-tfrag"}],[52297743,{"idx":15,"name":"freehq-gray-metal-disc03","tpage_name":"freehq-tfrag"}],[11403351,{"idx":87,"name":"cityslumc-wall-surface-01","tpage_name":"ctyslumc-vis-tfrag"}],[52297744,{"idx":16,"name":"freehq-gray-metal-disc04","tpage_name":"freehq-tfrag"}],[11403352,{"idx":88,"name":"ctyslumc-overhang-02","tpage_name":"ctyslumc-vis-tfrag"}],[52297745,{"idx":17,"name":"freehq-handle-01","tpage_name":"freehq-tfrag"}],[11403353,{"idx":89,"name":"cityslumc-grey-side-pillar","tpage_name":"ctyslumc-vis-tfrag"}],[11403354,{"idx":90,"name":"ctyslumc-roof","tpage_name":"ctyslumc-vis-tfrag"}],[52297747,{"idx":19,"name":"freehq-gray-metal-disc05","tpage_name":"freehq-tfrag"}],[11403355,{"idx":91,"name":"city-tile","tpage_name":"ctyslumc-vis-tfrag"}],[11403356,{"idx":92,"name":"cityslumc-awning","tpage_name":"ctyslumc-vis-tfrag"}],[52297749,{"idx":21,"name":"freehq-gray-metal-disc07","tpage_name":"freehq-tfrag"}],[11403357,{"idx":93,"name":"ctyslumc-wall-sliver","tpage_name":"ctyslumc-vis-tfrag"}],[52297750,{"idx":22,"name":"freehq-blue-light","tpage_name":"freehq-tfrag"}],[11403358,{"idx":94,"name":"ctyslumc-overhang-03","tpage_name":"ctyslumc-vis-tfrag"}],[52297751,{"idx":23,"name":"freehq-green-light","tpage_name":"freehq-tfrag"}],[11403359,{"idx":95,"name":"cityslumc-pinkish-purple","tpage_name":"ctyslumc-vis-tfrag"}],[52297752,{"idx":24,"name":"freehq-panel-01","tpage_name":"freehq-tfrag"}],[11403360,{"idx":96,"name":"cityslumc-top-pillar","tpage_name":"ctyslumc-vis-tfrag"}],[11403361,{"idx":97,"name":"cityslumc-little-gold","tpage_name":"ctyslumc-vis-tfrag"}],[52297754,{"idx":26,"name":"freehq-monitor01","tpage_name":"freehq-tfrag"}],[11403362,{"idx":98,"name":"cityslumc-gold-trim","tpage_name":"ctyslumc-vis-tfrag"}],[983066,{"idx":26,"name":"dk-maker-idol-collar-01","tpage_name":"halfpipe-pris"}],[11403363,{"idx":99,"name":"cityslumc-purple-column","tpage_name":"ctyslumc-vis-tfrag"}],[52297756,{"idx":28,"name":"freehq-panel-05","tpage_name":"freehq-tfrag"}],[61014016,{"idx":0,"name":"minc-bolt","tpage_name":"minec-vis-shrub"}],[71106565,{"idx":5,"name":"wstd-floor-panel01","tpage_name":"wasstadb-tfrag"}],[983067,{"idx":27,"name":"dk-maker-idol-collar-02","tpage_name":"halfpipe-pris"}],[11403364,{"idx":100,"name":"cityslumc-purple-column-2","tpage_name":"ctyslumc-vis-tfrag"}],[52297757,{"idx":29,"name":"freehq-ground-tile-set1-lm","tpage_name":"freehq-tfrag"}],[61014017,{"idx":1,"name":"minc-light","tpage_name":"minec-vis-shrub"}],[983069,{"idx":29,"name":"dk-maker-idol-eye-dk-01","tpage_name":"halfpipe-pris"}],[11403366,{"idx":102,"name":"ctyslumc-wall-trim","tpage_name":"ctyslumc-vis-tfrag"}],[52297759,{"idx":31,"name":"freehq-monitor04","tpage_name":"freehq-tfrag"}],[61014019,{"idx":3,"name":"minc-rocky-ground-01","tpage_name":"minec-vis-shrub"}],[983070,{"idx":30,"name":"dk-maker-idol-globes-01","tpage_name":"halfpipe-pris"}],[11403367,{"idx":103,"name":"cityslumc-purple-plain","tpage_name":"ctyslumc-vis-tfrag"}],[983071,{"idx":31,"name":"dk-maker-idol-globes-dk-01","tpage_name":"halfpipe-pris"}],[11403368,{"idx":104,"name":"cityslumc-door-plate","tpage_name":"ctyslumc-vis-tfrag"}],[52297761,{"idx":33,"name":"freehq-ground-tile-set1-rbc","tpage_name":"freehq-tfrag"}],[61014021,{"idx":5,"name":"minc-rust-01","tpage_name":"minec-vis-shrub"}],[983072,{"idx":32,"name":"dk-maker-idol-head-01","tpage_name":"halfpipe-pris"}],[10944512,{"idx":0,"name":"map-ctyslumc","tpage_name":"ctyslumc-minimap"}],[11403369,{"idx":105,"name":"cityslumc-lamp-red","tpage_name":"ctyslumc-vis-tfrag"}],[35651620,{"idx":36,"name":"samos-eyelid","tpage_name":"introcst-pris2"}],[94371910,{"idx":70,"name":"palace-break-spike02","tpage_name":"intpfall-vis-pris"}],[28049422,{"idx":14,"name":"tpal-horiz-trim02","tpage_name":"intpalrf-tfrag"}],[983073,{"idx":33,"name":"dk-maker-idol-metal-01","tpage_name":"halfpipe-pris"}],[220529060,{"idx":420,"name":"bluesage-leatherbuckle","tpage_name":"museum4-pris"}],[11403370,{"idx":106,"name":"cityslumc-door","tpage_name":"ctyslumc-vis-tfrag"}],[41287690,{"idx":10,"name":"nsta-transparent","tpage_name":"wasstada-shrub"}],[52297763,{"idx":35,"name":"freehq-ground-tile-set1-tm","tpage_name":"freehq-tfrag"}],[61014023,{"idx":7,"name":"minc-strut-01","tpage_name":"minec-vis-shrub"}],[62259203,{"idx":3,"name":"gauge01","tpage_name":"ctycarc-pris"}],[983074,{"idx":34,"name":"dk-maker-idol-tubes-01","tpage_name":"halfpipe-pris"}],[11403371,{"idx":107,"name":"cityslumc-door-metal","tpage_name":"ctyslumc-vis-tfrag"}],[41287691,{"idx":11,"name":"wstd-rock-shrubs","tpage_name":"wasstada-shrub"}],[11403328,{"idx":64,"name":"ctyslumc-brown","tpage_name":"ctyslumc-vis-tfrag"}],[8716351,{"idx":63,"name":"baron-neon-white-b-on","tpage_name":"ctysluma-sprite"}],[11730954,{"idx":10,"name":"city-inda-scorch-small","tpage_name":"ctyinda-vis-shrub"}],[62717955,{"idx":3,"name":"cguardgame-boottop","tpage_name":"ctypesa-pris"}],[49020975,{"idx":47,"name":"strip-black","tpage_name":"sewe-vis-tfrag"}],[11403332,{"idx":68,"name":"ctyslumc-vine-hang-a","tpage_name":"ctyslumc-vis-tfrag"}],[8716352,{"idx":64,"name":"baron-neon-white-c","tpage_name":"ctysluma-sprite"}],[11730955,{"idx":11,"name":"city-inda-scorch-big","tpage_name":"ctyinda-vis-shrub"}],[62717956,{"idx":4,"name":"cguardgame-chestplate","tpage_name":"ctypesa-pris"}],[63963136,{"idx":0,"name":"wang_0","tpage_name":"desert-hfrag"}],[49020976,{"idx":48,"name":"sewer-metal-block-05","tpage_name":"sewe-vis-tfrag"}],[74514453,{"idx":21,"name":"roboguard-die-stamped-metal-blue","tpage_name":"sewj-vis-pris"}],[75759633,{"idx":17,"name":"daxterteeth","tpage_name":"onintent-pris"}],[35651694,{"idx":110,"name":"veger-shoulderplatemetal","tpage_name":"introcst-pris2"}],[60555294,{"idx":30,"name":"minb-stone12","tpage_name":"minea-vis-tfrag"}],[115081239,{"idx":23,"name":"terraformer-organic-01","tpage_name":"desboss1-pris"}],[67829802,{"idx":42,"name":"vinroom-tv-text-n","tpage_name":"freehq-sprite"}],[35651702,{"idx":118,"name":"veger-walkingstick-03","tpage_name":"introcst-pris2"}],[60555302,{"idx":38,"name":"minc-blue-paint-rust03","tpage_name":"minea-vis-tfrag"}],[100728840,{"idx":8,"name":"sig-flask","tpage_name":"ljaksig-pris2"}],[88277040,{"idx":48,"name":"cguard-air-train-light","tpage_name":"introcst-tfrag"}],[35651704,{"idx":120,"name":"veger-eyelid","tpage_name":"introcst-pris2"}],[60555304,{"idx":40,"name":"minc-train-pipe-01","tpage_name":"minea-vis-tfrag"}],[35651705,{"idx":121,"name":"veger-iris","tpage_name":"introcst-pris2"}],[60555305,{"idx":41,"name":"minc-rust-pipe-04","tpage_name":"minea-vis-tfrag"}],[12255232,{"idx":0,"name":"city-ind-stain-02","tpage_name":"ctyindb-vis-shrub"}],[12255233,{"idx":1,"name":"city-ind-blotch-withstreaks-01","tpage_name":"ctyindb-vis-shrub"}],[12255234,{"idx":2,"name":"city-ind-stain-01","tpage_name":"ctyindb-vis-shrub"}],[12255235,{"idx":3,"name":"city-ind-decal-02","tpage_name":"ctyindb-vis-shrub"}],[12255236,{"idx":4,"name":"city-ind-decal-03","tpage_name":"ctyindb-vis-shrub"}],[12255237,{"idx":5,"name":"city-ind-decal-01","tpage_name":"ctyindb-vis-shrub"}],[117506052,{"idx":4,"name":"freehq-wal-tilem07","tpage_name":"freehq-shrub"}],[118751232,{"idx":0,"name":"bam-eyelight","tpage_name":"wcaseem-pris2"}],[1114190,{"idx":78,"name":"sewer-03","tpage_name":"progress-minimap"}],[12320810,{"idx":42,"name":"city-ind-wall-04","tpage_name":"ctyindb-vis-tfrag"}],[73728078,{"idx":78,"name":"sewer-plate-01-hitweak","tpage_name":"sewh-vis-tfrag"}],[35389586,{"idx":146,"name":"beacon-lens","tpage_name":"introcst-pris"}],[76480526,{"idx":14,"name":"daxterhelmetplain","tpage_name":"freehq-pris"}],[458846,{"idx":94,"name":"jakc-face","tpage_name":"level-default-pris"}],[35389587,{"idx":147,"name":"common-black","tpage_name":"introcst-pris"}],[76480527,{"idx":15,"name":"daxterlense","tpage_name":"freehq-pris"}],[458847,{"idx":95,"name":"jakc-finger","tpage_name":"level-default-pris"}],[35389588,{"idx":148,"name":"handcuff-01","tpage_name":"introcst-pris"}],[76480528,{"idx":16,"name":"daxternose","tpage_name":"freehq-pris"}],[458848,{"idx":96,"name":"jakc-flap","tpage_name":"level-default-pris"}],[35389589,{"idx":149,"name":"handcuff-02","tpage_name":"introcst-pris"}],[76480529,{"idx":17,"name":"daxterteeth","tpage_name":"freehq-pris"}],[458849,{"idx":97,"name":"jakc-forearm-arm","tpage_name":"level-default-pris"}],[35389590,{"idx":150,"name":"handcuff-03","tpage_name":"introcst-pris"}],[76480530,{"idx":18,"name":"daxtertuft","tpage_name":"freehq-pris"}],[20840482,{"idx":34,"name":"jakchires-eyelid","tpage_name":"stadiumb-vis-pris"}],[458850,{"idx":98,"name":"jakc-glovetop","tpage_name":"level-default-pris"}],[60620920,{"idx":120,"name":"jakchires-leatherpouch","tpage_name":"minea-vis-pris"}],[94240780,{"idx":12,"name":"palcab-lowres-ctyslum-wall-02","tpage_name":"intpfall-vis-tfrag"}],[21299240,{"idx":40,"name":"vehicle-snake-tread-02","tpage_name":"wasall-pris"}],[39780367,{"idx":15,"name":"nestb-mektunnel","tpage_name":"nstb-vis-pris"}],[94240880,{"idx":112,"name":"tpal-horiz-trim02","tpage_name":"intpfall-vis-tfrag"}],[127860740,{"idx":4,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"lfaccity-alpha"}],[129105920,{"idx":0,"name":"sewer-water-highlight-01-n","tpage_name":"sewn-vis-water"}],[61079636,{"idx":84,"name":"pecker-teeth","tpage_name":"minec-vis-pris"}],[60620921,{"idx":121,"name":"jakchires-lightbrownspat","tpage_name":"minea-vis-pris"}],[94240781,{"idx":13,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"intpfall-vis-tfrag"}],[60620922,{"idx":122,"name":"jakchires-pants","tpage_name":"minea-vis-pris"}],[94240782,{"idx":14,"name":"palcab-lowres-ctyslum-roof-03","tpage_name":"intpfall-vis-tfrag"}],[14680066,{"idx":2,"name":"airlock-door-main","tpage_name":"ctygenb-vis-pris"}],[262298,{"idx":154,"name":"redpuff","tpage_name":"level-default-sprite"}],[60620923,{"idx":123,"name":"jakchires-precarmor-01","tpage_name":"minea-vis-pris"}],[94240783,{"idx":15,"name":"palcab-swingp-trim","tpage_name":"intpfall-vis-tfrag"}],[10879057,{"idx":81,"name":"ctyslumc-grate1","tpage_name":"ctyslumb-vis-tfrag"}],[14680067,{"idx":3,"name":"airlock-door-metal2","tpage_name":"ctygenb-vis-pris"}],[262299,{"idx":155,"name":"edge-cloud","tpage_name":"level-default-sprite"}],[49741842,{"idx":18,"name":"sewer-plate-05","tpage_name":"sewf-vis-pris"}],[10879083,{"idx":107,"name":"ctyslumc-wall-colored","tpage_name":"ctyslumb-vis-tfrag"}],[14680093,{"idx":29,"name":"jakchires-eyelid","tpage_name":"ctygenb-vis-pris"}],[99483709,{"idx":61,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"lformach-vis-pris"}],[10879084,{"idx":108,"name":"cityslumc-metal-trim","tpage_name":"ctyslumb-vis-tfrag"}],[14680094,{"idx":30,"name":"jakchires-facelft","tpage_name":"ctygenb-vis-pris"}],[10879085,{"idx":109,"name":"ctyslumc-wall-colored2","tpage_name":"ctyslumb-vis-tfrag"}],[14680095,{"idx":31,"name":"jakchires-facert","tpage_name":"ctygenb-vis-pris"}],[10879086,{"idx":110,"name":"cityslumc-lamp-red","tpage_name":"ctyslumb-vis-tfrag"}],[10879087,{"idx":111,"name":"cityslumc-door","tpage_name":"ctyslumb-vis-tfrag"}],[14680097,{"idx":33,"name":"jakchires-hair","tpage_name":"ctygenb-vis-pris"}],[99483716,{"idx":68,"name":"dp-bipedal-skin-bulge-02","tpage_name":"lformach-vis-pris"}],[10879091,{"idx":115,"name":"cityslumc-pipe","tpage_name":"ctyslumb-vis-tfrag"}],[14680101,{"idx":37,"name":"jakchires-lightbrownspat","tpage_name":"ctygenb-vis-pris"}],[99483717,{"idx":69,"name":"dp-bipedal-skin-plate-01","tpage_name":"lformach-vis-pris"}],[106954797,{"idx":45,"name":"vola-dp-tendon","tpage_name":"volcanoa-vis-tfrag"}],[10879092,{"idx":116,"name":"cityslumc-awning-LOW","tpage_name":"ctyslumb-vis-tfrag"}],[14680102,{"idx":38,"name":"jakchires-pants","tpage_name":"ctygenb-vis-pris"}],[99483718,{"idx":70,"name":"dp-bipedal-skin-ribs-01","tpage_name":"lformach-vis-pris"}],[106954798,{"idx":46,"name":"vol-dk-sat-environment-map","tpage_name":"volcanoa-vis-tfrag"}],[16580608,{"idx":0,"name":"ctyfarm-cab-body","tpage_name":"ctyfarmb-sprite"}],[10879093,{"idx":117,"name":"city-tile-LOW","tpage_name":"ctyslumb-vis-tfrag"}],[38732046,{"idx":270,"name":"male5_00","tpage_name":"wasstada-sprite"}],[119668746,{"idx":10,"name":"citn-allbuckel","tpage_name":"ljinx-pris"}],[122159106,{"idx":2,"name":"facb_redmetal-01","tpage_name":"factoryb-vis-tfrag"}],[8912905,{"idx":9,"name":"city-slum-hangsign-02","tpage_name":"ctysluma-vis-tfrag"}],[38732047,{"idx":271,"name":"male5_01","tpage_name":"wasstada-sprite"}],[119668747,{"idx":11,"name":"citn-alleyebrow","tpage_name":"ljinx-pris"}],[122159107,{"idx":3,"name":"fac-tower-door-03","tpage_name":"factoryb-vis-tfrag"}],[8912906,{"idx":10,"name":"city-slum-hangsign-03","tpage_name":"ctysluma-vis-tfrag"}],[85196827,{"idx":27,"name":"intcept-b-base-green01","tpage_name":"desrace1-pris"}],[38732048,{"idx":272,"name":"male5_02","tpage_name":"wasstada-sprite"}],[119668748,{"idx":12,"name":"citn-allflesh","tpage_name":"ljinx-pris"}],[122159108,{"idx":4,"name":"facb_temp_rust2","tpage_name":"factoryb-vis-tfrag"}],[8912907,{"idx":11,"name":"city-slumbase-wall","tpage_name":"ctysluma-vis-tfrag"}],[85196828,{"idx":28,"name":"intcept-b-base-patern01","tpage_name":"desrace1-pris"}],[8912908,{"idx":12,"name":"city-slumwall-01","tpage_name":"ctysluma-vis-tfrag"}],[85196829,{"idx":29,"name":"intcept-b-base-patern02","tpage_name":"desrace1-pris"}],[8912909,{"idx":13,"name":"city-slum-bigpipe-04","tpage_name":"ctysluma-vis-tfrag"}],[85196830,{"idx":30,"name":"intcept-b-gun01","tpage_name":"desrace1-pris"}],[85196831,{"idx":31,"name":"intcept-b-pipe01","tpage_name":"desrace1-pris"}],[85196832,{"idx":32,"name":"intcept-b-teeth01","tpage_name":"desrace1-pris"}],[8912912,{"idx":16,"name":"city-slumbase-wall-broken-to-bricks-2","tpage_name":"ctysluma-vis-tfrag"}],[8912914,{"idx":18,"name":"city-slumwall-06","tpage_name":"ctysluma-vis-tfrag"}],[393220,{"idx":4,"name":"charHOLD","tpage_name":"level-default-tfrag"}],[8912915,{"idx":19,"name":"slum-stone-broken","tpage_name":"ctysluma-vis-tfrag"}],[393221,{"idx":5,"name":"cmn-precursor-metal-plain-01small","tpage_name":"level-default-tfrag"}],[8912916,{"idx":20,"name":"slum-stone-03","tpage_name":"ctysluma-vis-tfrag"}],[393222,{"idx":6,"name":"common-black","tpage_name":"level-default-tfrag"}],[8912917,{"idx":21,"name":"city-slum-roof","tpage_name":"ctysluma-vis-tfrag"}],[393223,{"idx":7,"name":"common-transparent","tpage_name":"level-default-tfrag"}],[8912918,{"idx":22,"name":"city-slum-roof-side","tpage_name":"ctysluma-vis-tfrag"}],[393224,{"idx":8,"name":"egg-ndimadman","tpage_name":"level-default-tfrag"}],[8912919,{"idx":23,"name":"city-slum-roof-1","tpage_name":"ctysluma-vis-tfrag"}],[393225,{"idx":9,"name":"fuel-cell-endcaps","tpage_name":"level-default-tfrag"}],[58654786,{"idx":66,"name":"vinroom-tv-circle","tpage_name":"hiphog-sprite"}],[73596946,{"idx":18,"name":"sewer-pipe-rim-05","tpage_name":"sewi-vis-tfrag"}],[38731906,{"idx":130,"name":"flying-bird-03","tpage_name":"wasstada-sprite"}],[393226,{"idx":10,"name":"fuel-cell-inside","tpage_name":"level-default-tfrag"}],[58654787,{"idx":67,"name":"holo-line","tpage_name":"hiphog-sprite"}],[73596947,{"idx":19,"name":"sewer-metal-02","tpage_name":"sewi-vis-tfrag"}],[38731907,{"idx":131,"name":"flying-bird-04","tpage_name":"wasstada-sprite"}],[8912921,{"idx":25,"name":"city-slum-awning-rustedmetal","tpage_name":"ctysluma-vis-tfrag"}],[393227,{"idx":11,"name":"grunt-gem-01","tpage_name":"level-default-tfrag"}],[8912922,{"idx":26,"name":"city-slumbase-wall-broken-to-bricks","tpage_name":"ctysluma-vis-tfrag"}],[393228,{"idx":12,"name":"krimsoncrate-01","tpage_name":"level-default-tfrag"}],[393229,{"idx":13,"name":"krimsoncrate-02","tpage_name":"level-default-tfrag"}],[8912924,{"idx":28,"name":"city-slum-wood-plain","tpage_name":"ctysluma-vis-tfrag"}],[393230,{"idx":14,"name":"krimsoncrate-04","tpage_name":"level-default-tfrag"}],[38862848,{"idx":0,"name":"nsta-wall","tpage_name":"nsta-vis-tfrag"}],[38862851,{"idx":3,"name":"nstab-eggskin","tpage_name":"nsta-vis-tfrag"}],[73596945,{"idx":17,"name":"sewer-metal-trim-02","tpage_name":"sewi-vis-tfrag"}],[73924617,{"idx":9,"name":"sewer-pipe-rim-02","tpage_name":"sewg-vis-shrub"}],[38862868,{"idx":20,"name":"nsta-fingerback","tpage_name":"nsta-vis-tfrag"}],[73924620,{"idx":12,"name":"sew-gasstep-tube","tpage_name":"sewg-vis-shrub"}],[39583744,{"idx":0,"name":"nstb-quicksand-scroll","tpage_name":"nstb-vis-alpha"}],[60883013,{"idx":69,"name":"mine-red-stripe-metal-01","tpage_name":"mineb-vis-pris"}],[74579993,{"idx":25,"name":"sewer-pipe-rim-09","tpage_name":"sewm-vis-tfrag"}],[81723487,{"idx":95,"name":"jakchires-eye","tpage_name":"ljndklev-pris"}],[39583745,{"idx":1,"name":"nstb-quicksand-dest","tpage_name":"nstb-vis-alpha"}],[60883014,{"idx":70,"name":"mine-red-white-metal-01","tpage_name":"mineb-vis-pris"}],[74579994,{"idx":26,"name":"sewer-metal-03","tpage_name":"sewm-vis-tfrag"}],[81723488,{"idx":96,"name":"jakchires-eyebrow","tpage_name":"ljndklev-pris"}],[48562244,{"idx":68,"name":"jakchires-eyebrow","tpage_name":"sewa-vis-pris"}],[67239944,{"idx":8,"name":"vin-floor-01","tpage_name":"vinroom-vis-tfrag"}],[52297784,{"idx":56,"name":"freehq-projector01","tpage_name":"freehq-tfrag"}],[57278504,{"idx":40,"name":"metalflut-leatherstrap-b-01","tpage_name":"waswide-vis-pris"}],[61014044,{"idx":28,"name":"minc-light-gray","tpage_name":"minec-vis-shrub"}],[62259224,{"idx":24,"name":"wing01","tpage_name":"ctycarc-pris"}],[91291653,{"idx":5,"name":"city-port-metal","tpage_name":"gungame-vis-tfrag"}],[73859133,{"idx":61,"name":"sewer-plate-03-hitweak","tpage_name":"sewg-vis-tfrag"}],[39649282,{"idx":2,"name":"nsta-wall","tpage_name":"nstb-vis-tfrag"}],[91291656,{"idx":8,"name":"common-gun-panel-03","tpage_name":"gungame-vis-tfrag"}],[73859136,{"idx":64,"name":"sewer-metal-edge-01","tpage_name":"sewg-vis-tfrag"}],[39649285,{"idx":5,"name":"nsta-cave-stalags-04","tpage_name":"nstb-vis-tfrag"}],[91291657,{"idx":9,"name":"fort-door-metal","tpage_name":"gungame-vis-tfrag"}],[73859137,{"idx":65,"name":"sewer-pool-rim-02","tpage_name":"sewg-vis-tfrag"}],[39649286,{"idx":6,"name":"nsta-finger-pipe","tpage_name":"nstb-vis-tfrag"}],[39649290,{"idx":10,"name":"nstab-eggskin","tpage_name":"nstb-vis-tfrag"}],[39649292,{"idx":12,"name":"nsta-cave-floor-01","tpage_name":"nstb-vis-tfrag"}],[39649295,{"idx":15,"name":"nsta-cave-plain","tpage_name":"nstb-vis-tfrag"}],[39649296,{"idx":16,"name":"nsta-cave-stalags-04-insides","tpage_name":"nstb-vis-tfrag"}],[39649297,{"idx":17,"name":"nsta-cave-carved-surface-bottom","tpage_name":"nstb-vis-tfrag"}],[39649298,{"idx":18,"name":"nsta-cave-carved-surface","tpage_name":"nstb-vis-tfrag"}],[39649299,{"idx":19,"name":"nsta-cave-plain-edging","tpage_name":"nstb-vis-tfrag"}],[39649301,{"idx":21,"name":"nestb-basekor","tpage_name":"nstb-vis-tfrag"}],[39649302,{"idx":22,"name":"nstab-basekor","tpage_name":"nstb-vis-tfrag"}],[62062624,{"idx":32,"name":"flying-bird-05","tpage_name":"wascityb-sprite"}],[67043344,{"idx":16,"name":"screen-15","tpage_name":"vinroom-sprite"}],[49610824,{"idx":72,"name":"sewer-metal-trim-01","tpage_name":"sewf-vis-tfrag"}],[39649303,{"idx":23,"name":"nsta-fingerback","tpage_name":"nstb-vis-tfrag"}],[62062625,{"idx":33,"name":"flying-bird-06","tpage_name":"wascityb-sprite"}],[67043345,{"idx":17,"name":"tinydot","tpage_name":"vinroom-sprite"}],[49610825,{"idx":73,"name":"sewer-scaffold-03","tpage_name":"sewf-vis-tfrag"}],[39649304,{"idx":24,"name":"nsta-cave-teeth","tpage_name":"nstb-vis-tfrag"}],[62062626,{"idx":34,"name":"flying-bird-07","tpage_name":"wascityb-sprite"}],[67043346,{"idx":18,"name":"vinroom-small-monitor-01","tpage_name":"vinroom-sprite"}],[49610826,{"idx":74,"name":"sewer-metal-block-02","tpage_name":"sewf-vis-tfrag"}],[39649305,{"idx":25,"name":"nsta-cave-top-platform","tpage_name":"nstb-vis-tfrag"}],[62062627,{"idx":35,"name":"flying-bird-08","tpage_name":"wascityb-sprite"}],[67043347,{"idx":19,"name":"vinroom-small-monitor-02","tpage_name":"vinroom-sprite"}],[49610827,{"idx":75,"name":"sewer-small-light-01","tpage_name":"sewf-vis-tfrag"}],[39649306,{"idx":26,"name":"nsta-cave-sides","tpage_name":"nstb-vis-tfrag"}],[62062628,{"idx":36,"name":"flying-bird-09","tpage_name":"wascityb-sprite"}],[67043348,{"idx":20,"name":"vinroom-small-monitor-03","tpage_name":"vinroom-sprite"}],[49610828,{"idx":76,"name":"sewer-metal-trim-02","tpage_name":"sewf-vis-tfrag"}],[39649308,{"idx":28,"name":"nsta-cave-mites","tpage_name":"nstb-vis-tfrag"}],[62062630,{"idx":38,"name":"flying-bird-11","tpage_name":"wascityb-sprite"}],[67043350,{"idx":22,"name":"vinroom-small-monitor-05","tpage_name":"vinroom-sprite"}],[49610830,{"idx":78,"name":"sewer-yellow-light-02","tpage_name":"sewf-vis-tfrag"}],[39649309,{"idx":29,"name":"nsta-cave-trim","tpage_name":"nstb-vis-tfrag"}],[62062631,{"idx":39,"name":"flying-bird-12","tpage_name":"wascityb-sprite"}],[67043351,{"idx":23,"name":"vinroom-small-monitor-06","tpage_name":"vinroom-sprite"}],[49610831,{"idx":79,"name":"sewer-red-light-01","tpage_name":"sewf-vis-tfrag"}],[39649310,{"idx":30,"name":"nsta-cave-trim-top","tpage_name":"nstb-vis-tfrag"}],[63963137,{"idx":1,"name":"wang_1","tpage_name":"desert-hfrag"}],[49020977,{"idx":49,"name":"sewer-plate-01","tpage_name":"sewe-vis-tfrag"}],[62717957,{"idx":5,"name":"cguardgame-ear","tpage_name":"ctypesa-pris"}],[39649311,{"idx":31,"name":"nstab-mekbrain-plain","tpage_name":"nstb-vis-tfrag"}],[63963138,{"idx":2,"name":"wang_2","tpage_name":"desert-hfrag"}],[62717958,{"idx":6,"name":"cguardgame-face","tpage_name":"ctypesa-pris"}],[91357188,{"idx":4,"name":"klever-eyelid","tpage_name":"lkleever-pris"}],[71434308,{"idx":68,"name":"wstd-fight-plat-tube","tpage_name":"wasstadc-tfrag"}],[91357190,{"idx":6,"name":"klever-face-01scars","tpage_name":"lkleever-pris"}],[91357193,{"idx":9,"name":"klever-arm","tpage_name":"lkleever-pris"}],[71434313,{"idx":73,"name":"wstd-scaffold-bar","tpage_name":"wasstadc-tfrag"}],[91357194,{"idx":10,"name":"klever-brownstrap","tpage_name":"lkleever-pris"}],[71434314,{"idx":74,"name":"wstd-fight-plat-wall-01","tpage_name":"wasstadc-tfrag"}],[43647018,{"idx":42,"name":"burning-bush-off","tpage_name":"waswide-sprite"}],[91357195,{"idx":11,"name":"klever-chest","tpage_name":"lkleever-pris"}],[71434315,{"idx":75,"name":"wstd-fight-plat-grate","tpage_name":"wasstadc-tfrag"}],[1114244,{"idx":132,"name":"precursor-01","tpage_name":"progress-minimap"}],[39714824,{"idx":8,"name":"nsta-finger-pipe","tpage_name":"nstb-vis-shrub"}],[91357198,{"idx":14,"name":"klever-armor-01","tpage_name":"lkleever-pris"}],[71434318,{"idx":78,"name":"wstd-fight-plat-floor-01","tpage_name":"wasstadc-tfrag"}],[1114247,{"idx":135,"name":"precursor-04","tpage_name":"progress-minimap"}],[39714827,{"idx":11,"name":"nst-egg-bulb-01","tpage_name":"nstb-vis-shrub"}],[91357199,{"idx":15,"name":"klever-armor-02","tpage_name":"lkleever-pris"}],[71434319,{"idx":79,"name":"wstd-fight-plat-floor-02","tpage_name":"wasstadc-tfrag"}],[1114248,{"idx":136,"name":"arena-01","tpage_name":"progress-minimap"}],[39714828,{"idx":12,"name":"nsta-cave-sides-shrub","tpage_name":"nstb-vis-shrub"}],[91357200,{"idx":16,"name":"klever-blackstrap","tpage_name":"lkleever-pris"}],[71434320,{"idx":80,"name":"wstd-scaffold-strut","tpage_name":"wasstadc-tfrag"}],[1114249,{"idx":137,"name":"arena-02","tpage_name":"progress-minimap"}],[39714829,{"idx":13,"name":"nsta-cave-top-platform-shrub","tpage_name":"nstb-vis-shrub"}],[21299242,{"idx":42,"name":"vehicle-wheel-blur-01","tpage_name":"wasall-pris"}],[39780369,{"idx":17,"name":"nsta-goo-base","tpage_name":"nstb-vis-pris"}],[94240882,{"idx":114,"name":"intr-grey","tpage_name":"intpfall-vis-tfrag"}],[129105922,{"idx":2,"name":"sewer-waterfall-02-n","tpage_name":"sewn-vis-water"}],[61079638,{"idx":86,"name":"pecker-wingtop","tpage_name":"minec-vis-pris"}],[106168381,{"idx":61,"name":"mined-pillar-top-dest","tpage_name":"mined-tfrag"}],[118620181,{"idx":21,"name":"jakchires-eyelid","tpage_name":"ljkcdmkl-pris"}],[121110541,{"idx":13,"name":"hip-tbotred01","tpage_name":"hiphog-vis-tfrag"}],[39845893,{"idx":5,"name":"environment-nstb-water","tpage_name":"nstb-vis-water"}],[8716339,{"idx":51,"name":"baron-neon-mouth-on","tpage_name":"ctysluma-sprite"}],[10616844,{"idx":12,"name":"sign-wide-b","tpage_name":"ctyslumb-sprite"}],[14352384,{"idx":0,"name":"map-ctygenb","tpage_name":"ctygenb-minimap"}],[106168382,{"idx":62,"name":"mined-pillar-molten-top","tpage_name":"mined-tfrag"}],[118620182,{"idx":22,"name":"jakchires-facelft","tpage_name":"ljkcdmkl-pris"}],[121110542,{"idx":14,"name":"hip-tbotblue01","tpage_name":"hiphog-vis-tfrag"}],[39845894,{"idx":6,"name":"nstb-water","tpage_name":"nstb-vis-water"}],[106233914,{"idx":58,"name":"jakchires-eyelid","tpage_name":"mined-pris"}],[118685714,{"idx":18,"name":"king-leg","tpage_name":"ljkcdmkl-pris2"}],[121176074,{"idx":10,"name":"daxterfoot","tpage_name":"hiphog-vis-pris"}],[39911426,{"idx":2,"name":"wstd-lava-base","tpage_name":"wasstada-alpha"}],[106233916,{"idx":60,"name":"jakchires-facert","tpage_name":"mined-pris"}],[118685716,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"ljkcdmkl-pris2"}],[121176076,{"idx":12,"name":"daxtergoggles","tpage_name":"hiphog-vis-pris"}],[39911428,{"idx":4,"name":"wstd-lava-base-dest","tpage_name":"wasstada-alpha"}],[20906060,{"idx":76,"name":"stdmb-track-side-01","tpage_name":"stadiumb-vis-tfrag"}],[74579996,{"idx":28,"name":"sewer-scaffold-01","tpage_name":"sewm-vis-tfrag"}],[60883016,{"idx":72,"name":"mine-white-stripe-metal-01","tpage_name":"mineb-vis-pris"}],[41418752,{"idx":0,"name":"wascitya-stone-bottom","tpage_name":"wascitya-vis-tfrag"}],[74579997,{"idx":29,"name":"sewer-concrete-edge-02","tpage_name":"sewm-vis-tfrag"}],[60883017,{"idx":73,"name":"mine-blue-metal-01","tpage_name":"mineb-vis-pris"}],[41418753,{"idx":1,"name":"wascitya-stone-top","tpage_name":"wascitya-vis-tfrag"}],[74579998,{"idx":30,"name":"sewer-pipe-rim-05","tpage_name":"sewm-vis-tfrag"}],[60883018,{"idx":74,"name":"mine-metal-wheel-01","tpage_name":"mineb-vis-pris"}],[41418754,{"idx":2,"name":"wascity-metal-spike-01","tpage_name":"wascitya-vis-tfrag"}],[74579999,{"idx":31,"name":"sewer-plate-04","tpage_name":"sewm-vis-tfrag"}],[60883019,{"idx":75,"name":"mine-red-paint-rust05","tpage_name":"mineb-vis-pris"}],[41418755,{"idx":3,"name":"wascity-metal-wall-base-plate","tpage_name":"wascitya-vis-tfrag"}],[74580000,{"idx":32,"name":"sewer-pipe-rim-07","tpage_name":"sewm-vis-tfrag"}],[60883020,{"idx":76,"name":"mine-rust-01","tpage_name":"mineb-vis-pris"}],[41418756,{"idx":4,"name":"wascity-metal-segments","tpage_name":"wascitya-vis-tfrag"}],[74580001,{"idx":33,"name":"sewer-plate-03","tpage_name":"sewm-vis-tfrag"}],[60883021,{"idx":77,"name":"mine-slate-metal-01","tpage_name":"mineb-vis-pris"}],[41418757,{"idx":5,"name":"wascity-greenmetal-tube","tpage_name":"wascitya-vis-tfrag"}],[74580002,{"idx":34,"name":"sewer-flat-pipe-01","tpage_name":"sewm-vis-tfrag"}],[60883022,{"idx":78,"name":"jakchires-precarmor-01","tpage_name":"mineb-vis-pris"}],[41418758,{"idx":6,"name":"wascity-metal-piece-02","tpage_name":"wascitya-vis-tfrag"}],[41418759,{"idx":7,"name":"wascity-metal-dirty","tpage_name":"wascitya-vis-tfrag"}],[41418760,{"idx":8,"name":"common-black","tpage_name":"wascitya-vis-tfrag"}],[74580005,{"idx":37,"name":"sewer-scaffold-03","tpage_name":"sewm-vis-tfrag"}],[41418761,{"idx":9,"name":"wascity-metal-door-01","tpage_name":"wascitya-vis-tfrag"}],[74580006,{"idx":38,"name":"sewer-brick-block-11","tpage_name":"sewm-vis-tfrag"}],[41418762,{"idx":10,"name":"wascity-wallspike-2-ground-01","tpage_name":"wascitya-vis-tfrag"}],[74580007,{"idx":39,"name":"sewer-brick-block-10","tpage_name":"sewm-vis-tfrag"}],[41418763,{"idx":11,"name":"wascity-wallspike-01","tpage_name":"wascitya-vis-tfrag"}],[76480513,{"idx":1,"name":"bam-hairhilite","tpage_name":"freehq-pris"}],[74580008,{"idx":40,"name":"sewer-brick-block-01","tpage_name":"sewm-vis-tfrag"}],[41418764,{"idx":12,"name":"wascity-stucco-wall-bleached-01","tpage_name":"wascitya-vis-tfrag"}],[76480514,{"idx":2,"name":"daxter-eyelid","tpage_name":"freehq-pris"}],[74580009,{"idx":41,"name":"sewer-brick-block-06","tpage_name":"sewm-vis-tfrag"}],[41418765,{"idx":13,"name":"wascity-stucco-wall-bleached-2-bricks-01","tpage_name":"wascitya-vis-tfrag"}],[76480515,{"idx":3,"name":"daxter-furhilite","tpage_name":"freehq-pris"}],[74580010,{"idx":42,"name":"sewer-concrete-block-02","tpage_name":"sewm-vis-tfrag"}],[41418766,{"idx":14,"name":"wascity-stucco-wall-bleached-edge-01","tpage_name":"wascitya-vis-tfrag"}],[76480516,{"idx":4,"name":"daxter-orange","tpage_name":"freehq-pris"}],[74580011,{"idx":43,"name":"sewer-brick-block-02","tpage_name":"sewm-vis-tfrag"}],[41418767,{"idx":15,"name":"wascity-ditch-wall-top-to-ground","tpage_name":"wascitya-vis-tfrag"}],[76480517,{"idx":5,"name":"daxterarm","tpage_name":"freehq-pris"}],[74580012,{"idx":44,"name":"sewer-pipe-01","tpage_name":"sewm-vis-tfrag"}],[41418768,{"idx":16,"name":"wascity-ground-2-ditch-04","tpage_name":"wascitya-vis-tfrag"}],[76480518,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"freehq-pris"}],[74580013,{"idx":45,"name":"sewer-pipe-02-edge-01","tpage_name":"sewm-vis-tfrag"}],[41418769,{"idx":17,"name":"wascity-ground-01","tpage_name":"wascitya-vis-tfrag"}],[76480519,{"idx":7,"name":"daxterbolt","tpage_name":"freehq-pris"}],[74580014,{"idx":46,"name":"sewer-pipe-rim-01","tpage_name":"sewm-vis-tfrag"}],[41418770,{"idx":18,"name":"wascity-ground-2-ditch-03","tpage_name":"wascitya-vis-tfrag"}],[76480520,{"idx":8,"name":"daxterear","tpage_name":"freehq-pris"}],[74580015,{"idx":47,"name":"sewer-round-03","tpage_name":"sewm-vis-tfrag"}],[41418771,{"idx":19,"name":"wascity-rock-small","tpage_name":"wascitya-vis-tfrag"}],[76480521,{"idx":9,"name":"daxterfinger","tpage_name":"freehq-pris"}],[74580016,{"idx":48,"name":"sewer-round-02","tpage_name":"sewm-vis-tfrag"}],[41418772,{"idx":20,"name":"wascity-ground-2-ditch-05","tpage_name":"wascitya-vis-tfrag"}],[76480522,{"idx":10,"name":"daxterfoot","tpage_name":"freehq-pris"}],[74580017,{"idx":49,"name":"sewer-round-01","tpage_name":"sewm-vis-tfrag"}],[41418773,{"idx":21,"name":"wascity-stucco-wall-supports-end","tpage_name":"wascitya-vis-tfrag"}],[76480523,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"freehq-pris"}],[74580018,{"idx":50,"name":"sewer-pipe-rim-06","tpage_name":"sewm-vis-tfrag"}],[41418774,{"idx":22,"name":"wascity-stucco-wall-supports","tpage_name":"wascitya-vis-tfrag"}],[74580019,{"idx":51,"name":"sewer-brick-roof-05","tpage_name":"sewm-vis-tfrag"}],[41418775,{"idx":23,"name":"wascity-stone-plain-wall-3","tpage_name":"wascitya-vis-tfrag"}],[41418776,{"idx":24,"name":"wascity-stone-bricks-2-plain","tpage_name":"wascitya-vis-tfrag"}],[41418777,{"idx":25,"name":"wascity-wall-weathered","tpage_name":"wascitya-vis-tfrag"}],[48889857,{"idx":1,"name":"sewer-concrete-edge-02","tpage_name":"sewd-vis-tfrag"}],[111542276,{"idx":4,"name":"des-burn-eye-on","tpage_name":"desert-vis-shrub"}],[41418778,{"idx":26,"name":"wascity-stonewall-bricks","tpage_name":"wascitya-vis-tfrag"}],[48889858,{"idx":2,"name":"sewer-plate-05-hitweak","tpage_name":"sewd-vis-tfrag"}],[111542277,{"idx":5,"name":"des-burn-precursor-01","tpage_name":"desert-vis-shrub"}],[41418779,{"idx":27,"name":"wascity-metal-pole","tpage_name":"wascitya-vis-tfrag"}],[48889859,{"idx":3,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewd-vis-tfrag"}],[111542278,{"idx":6,"name":"des-burn-precursor-01-bottom","tpage_name":"desert-vis-shrub"}],[41418780,{"idx":28,"name":"wascity-stucco-wall-bleached-cut-01","tpage_name":"wascitya-vis-tfrag"}],[48889860,{"idx":4,"name":"sewer-metal-block-01","tpage_name":"sewd-vis-tfrag"}],[111542279,{"idx":7,"name":"des-burn-precursor-head-01","tpage_name":"desert-vis-shrub"}],[41418781,{"idx":29,"name":"wascity-stonewall-bricks-HI","tpage_name":"wascitya-vis-tfrag"}],[48889861,{"idx":5,"name":"sewer-block-02","tpage_name":"sewd-vis-tfrag"}],[111542280,{"idx":8,"name":"wascity-ground-01","tpage_name":"desert-vis-shrub"}],[41418782,{"idx":30,"name":"wascity-wall-canister","tpage_name":"wascitya-vis-tfrag"}],[48889862,{"idx":6,"name":"sewer-pipe-small-02","tpage_name":"sewd-vis-tfrag"}],[41418783,{"idx":31,"name":"wascity-steel-bar","tpage_name":"wascitya-vis-tfrag"}],[48889863,{"idx":7,"name":"sewer-plate-05","tpage_name":"sewd-vis-tfrag"}],[41418784,{"idx":32,"name":"wascity-wood-plain","tpage_name":"wascitya-vis-tfrag"}],[48889864,{"idx":8,"name":"sewer-pipe-rim-05b","tpage_name":"sewd-vis-tfrag"}],[41418785,{"idx":33,"name":"wascity-metal-indent","tpage_name":"wascitya-vis-tfrag"}],[48889865,{"idx":9,"name":"sewer-pipe-rim-08","tpage_name":"sewd-vis-tfrag"}],[41418786,{"idx":34,"name":"wascity-metal-piece-01","tpage_name":"wascitya-vis-tfrag"}],[48889866,{"idx":10,"name":"sewer-metal-block-04","tpage_name":"sewd-vis-tfrag"}],[41418787,{"idx":35,"name":"wascitya-stone-top-breakaway","tpage_name":"wascitya-vis-tfrag"}],[48889867,{"idx":11,"name":"sewer-metal-block-05","tpage_name":"sewd-vis-tfrag"}],[41418788,{"idx":36,"name":"wascity-outerwall-metal","tpage_name":"wascitya-vis-tfrag"}],[48889868,{"idx":12,"name":"sewer-plate-02","tpage_name":"sewd-vis-tfrag"}],[94961665,{"idx":1,"name":"bam-hairhilite","tpage_name":"lsigjakc-pris"}],[41418789,{"idx":37,"name":"wascity-outerwall-metal-c","tpage_name":"wascitya-vis-tfrag"}],[48889869,{"idx":13,"name":"sewer-rubber-rim-01","tpage_name":"sewd-vis-tfrag"}],[94961666,{"idx":2,"name":"environment-oldmetal","tpage_name":"lsigjakc-pris"}],[41418790,{"idx":38,"name":"wascity-outerwall-metal-b","tpage_name":"wascitya-vis-tfrag"}],[41418791,{"idx":39,"name":"wascity-outerwall-metal-d","tpage_name":"wascitya-vis-tfrag"}],[48889871,{"idx":15,"name":"common-black","tpage_name":"sewd-vis-tfrag"}],[41418792,{"idx":40,"name":"city-slum-burning-can","tpage_name":"wascitya-vis-tfrag"}],[48889872,{"idx":16,"name":"sewer-concrete-edge-01","tpage_name":"sewd-vis-tfrag"}],[41418793,{"idx":41,"name":"wascity-steps","tpage_name":"wascitya-vis-tfrag"}],[48889873,{"idx":17,"name":"sewer-pipe-rim-03","tpage_name":"sewd-vis-tfrag"}],[41418794,{"idx":42,"name":"wascity-torch-tank","tpage_name":"wascitya-vis-tfrag"}],[48889874,{"idx":18,"name":"sewer-brick-block-03","tpage_name":"sewd-vis-tfrag"}],[74580039,{"idx":71,"name":"sewer-flat-pipe-01-hitweak","tpage_name":"sewm-vis-tfrag"}],[41418795,{"idx":43,"name":"wascity-cement-road","tpage_name":"wascitya-vis-tfrag"}],[48889875,{"idx":19,"name":"sewer-block-01","tpage_name":"sewd-vis-tfrag"}],[137035784,{"idx":8,"name":"mid","tpage_name":"lctysnpr-pris"}],[162922521,{"idx":25,"name":"rail-pipe-02","tpage_name":"raild-tfrag"}],[137035785,{"idx":9,"name":"outer","tpage_name":"lctysnpr-pris"}],[162922522,{"idx":26,"name":"rail-fit-01","tpage_name":"raild-tfrag"}],[146341900,{"idx":12,"name":"facb_temp_medium","tpage_name":"factoryc-vis-tfrag"}],[137035786,{"idx":10,"name":"sewer-metal-floor-01","tpage_name":"lctysnpr-pris"}],[162922523,{"idx":27,"name":"comb-ring","tpage_name":"raild-tfrag"}],[146341901,{"idx":13,"name":"fac-tower-pipe-01","tpage_name":"factoryc-vis-tfrag"}],[137035787,{"idx":11,"name":"sewer-pipe-rim-07","tpage_name":"lctysnpr-pris"}],[146341902,{"idx":14,"name":"facc-big-metal-panl01","tpage_name":"factoryc-vis-tfrag"}],[137035788,{"idx":12,"name":"sewer-plate-02","tpage_name":"lctysnpr-pris"}],[146341903,{"idx":15,"name":"facc-arches-01","tpage_name":"factoryc-vis-tfrag"}],[137035789,{"idx":13,"name":"sewer-plate-05","tpage_name":"lctysnpr-pris"}],[146341904,{"idx":16,"name":"facc-panel-05","tpage_name":"factoryc-vis-tfrag"}],[137035790,{"idx":14,"name":"sewer-screw-02","tpage_name":"lctysnpr-pris"}],[146341905,{"idx":17,"name":"facc-panel-04","tpage_name":"factoryc-vis-tfrag"}],[146341906,{"idx":18,"name":"facc-pipe-01","tpage_name":"factoryc-vis-tfrag"}],[146341907,{"idx":19,"name":"facc-panel-06","tpage_name":"factoryc-vis-tfrag"}],[170196996,{"idx":4,"name":"ashelin-cglogo","tpage_name":"outrocst-pris2"}],[170196997,{"idx":5,"name":"ashelin-cgrank","tpage_name":"outrocst-pris2"}],[134742023,{"idx":7,"name":"rub-beam-gen","tpage_name":"rubblec-vis-shrub"}],[170197056,{"idx":64,"name":"seem-face","tpage_name":"outrocst-pris2"}],[181403676,{"idx":28,"name":"catapult-panel-pattern-01","tpage_name":"desjump-pris"}],[190119936,{"idx":0,"name":"common-black","tpage_name":"lbiped-pris"}],[170197057,{"idx":65,"name":"seem-finger","tpage_name":"outrocst-pris2"}],[181403677,{"idx":29,"name":"catapult-panel-small","tpage_name":"desjump-pris"}],[190119937,{"idx":1,"name":"dp-bipedal-backhand-01","tpage_name":"lbiped-pris"}],[170197058,{"idx":66,"name":"seem-hand","tpage_name":"outrocst-pris2"}],[181403678,{"idx":30,"name":"catapult-wood-arm-01","tpage_name":"desjump-pris"}],[190119938,{"idx":2,"name":"dp-bipedal-chest-01","tpage_name":"lbiped-pris"}],[170197059,{"idx":67,"name":"seem-headgearback","tpage_name":"outrocst-pris2"}],[181403679,{"idx":31,"name":"catapult-wood-rope","tpage_name":"desjump-pris"}],[190119939,{"idx":3,"name":"dp-bipedal-dk-hose-01","tpage_name":"lbiped-pris"}],[170197060,{"idx":68,"name":"seem-headpiecetop","tpage_name":"outrocst-pris2"}],[181403680,{"idx":32,"name":"catapult-wood-tip","tpage_name":"desjump-pris"}],[190119940,{"idx":4,"name":"dp-bipedal-dk-plate-01","tpage_name":"lbiped-pris"}],[170197061,{"idx":69,"name":"seem-pipeend","tpage_name":"outrocst-pris2"}],[181403681,{"idx":33,"name":"beamgen-lens","tpage_name":"desjump-pris"}],[190119941,{"idx":5,"name":"dp-bipedal-dk-plate-02","tpage_name":"lbiped-pris"}],[170197062,{"idx":70,"name":"seem-pipes-01","tpage_name":"outrocst-pris2"}],[181403682,{"idx":34,"name":"beamgen-metal-dec-trim-01","tpage_name":"desjump-pris"}],[190119942,{"idx":6,"name":"dp-bipedal-dk-plate-03","tpage_name":"lbiped-pris"}],[170197063,{"idx":71,"name":"seem-pipes-02","tpage_name":"outrocst-pris2"}],[181403683,{"idx":35,"name":"beamgen-metal-edge-01","tpage_name":"desjump-pris"}],[190119943,{"idx":7,"name":"dp-bipedal-dk-plate-04","tpage_name":"lbiped-pris"}],[146341936,{"idx":48,"name":"facc-door-frame-02","tpage_name":"factoryc-vis-tfrag"}],[170197065,{"idx":73,"name":"seem-precmetal-edge","tpage_name":"outrocst-pris2"}],[181403685,{"idx":37,"name":"rhino-horn-01","tpage_name":"desjump-pris"}],[190119945,{"idx":9,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"lbiped-pris"}],[146341937,{"idx":49,"name":"facc-wall-trim-02","tpage_name":"factoryc-vis-tfrag"}],[146341938,{"idx":50,"name":"facc-techwall-01","tpage_name":"factoryc-vis-tfrag"}],[170197067,{"idx":75,"name":"seem-skirt","tpage_name":"outrocst-pris2"}],[181403687,{"idx":39,"name":"vehicle-exhaust-pipe-01","tpage_name":"desjump-pris"}],[190119947,{"idx":11,"name":"dp-bipedal-finger-plate-01","tpage_name":"lbiped-pris"}],[137035783,{"idx":7,"name":"inner","tpage_name":"lctysnpr-pris"}],[146341939,{"idx":51,"name":"facc-light-02","tpage_name":"factoryc-vis-tfrag"}],[170197069,{"idx":77,"name":"seem-straps","tpage_name":"outrocst-pris2"}],[190119949,{"idx":13,"name":"dp-bipedal-power-hose","tpage_name":"lbiped-pris"}],[170197070,{"idx":78,"name":"seem-teeth","tpage_name":"outrocst-pris2"}],[190119950,{"idx":14,"name":"dp-bipedal-skin-bulge-01","tpage_name":"lbiped-pris"}],[173998081,{"idx":1,"name":"sig-flatfangs","tpage_name":"ltowerb-vis-water"}],[173998082,{"idx":2,"name":"errolcyber-lens","tpage_name":"ltowerb-vis-water"}],[170197078,{"idx":86,"name":"tess-eye","tpage_name":"outrocst-pris2"}],[170197079,{"idx":87,"name":"tess-eyelid","tpage_name":"outrocst-pris2"}],[170197080,{"idx":88,"name":"tess-face","tpage_name":"outrocst-pris2"}],[170197001,{"idx":9,"name":"ashelin-eyelid","tpage_name":"outrocst-pris2"}],[172687361,{"idx":1,"name":"common-glass","tpage_name":"precura-vis-water"}],[170197083,{"idx":91,"name":"tess-hair","tpage_name":"outrocst-pris2"}],[195100683,{"idx":11,"name":"kg-fl-tret-backend","tpage_name":"lblowtkg-pris"}],[170197084,{"idx":92,"name":"tess-hairband","tpage_name":"outrocst-pris2"}],[195100684,{"idx":12,"name":"kg-fl-tret-backthing01","tpage_name":"lblowtkg-pris"}],[170197085,{"idx":93,"name":"tess-jeans","tpage_name":"outrocst-pris2"}],[195100685,{"idx":13,"name":"kg-fl-tret-black-plate","tpage_name":"lblowtkg-pris"}],[126877696,{"idx":0,"name":"ctyslumc-overhang-02","tpage_name":"lfacrm1-tfrag"}],[126877699,{"idx":3,"name":"ctyslumc-wall","tpage_name":"lfacrm1-tfrag"}],[153813004,{"idx":12,"name":"mhcity-puffer-mid-01","tpage_name":"mhcityb-vis-pris"}],[118751255,{"idx":23,"name":"seem-straps","tpage_name":"wcaseem-pris2"}],[153813005,{"idx":13,"name":"mhcity-puffer-top-01","tpage_name":"mhcityb-vis-pris"}],[81723463,{"idx":71,"name":"klever-shoebottom","tpage_name":"ljndklev-pris"}],[81723464,{"idx":72,"name":"klever-skirtdark","tpage_name":"ljndklev-pris"}],[81723466,{"idx":74,"name":"klever-thighs","tpage_name":"ljndklev-pris"}],[81723467,{"idx":75,"name":"klever-undershirt","tpage_name":"ljndklev-pris"}],[81723468,{"idx":76,"name":"klever-widebrownstrap","tpage_name":"ljndklev-pris"}],[81723469,{"idx":77,"name":"klever-fingerbottom","tpage_name":"ljndklev-pris"}],[81723470,{"idx":78,"name":"klever-fingertop","tpage_name":"ljndklev-pris"}],[81723471,{"idx":79,"name":"jakc-armor","tpage_name":"ljndklev-pris"}],[170459141,{"idx":5,"name":"daxterarm","tpage_name":"ljkdxvin-pris"}],[170459142,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"ljkdxvin-pris"}],[171704322,{"idx":2,"name":"templea_sandstone01","tpage_name":"templec-vis-tfrag"}],[223346693,{"idx":5,"name":"rub-cement-broken-end","tpage_name":"lpattack-vis-tfrag"}],[16121892,{"idx":36,"name":"city-farm-mar-main","tpage_name":"ctyfarma-vis-tfrag"}],[53674003,{"idx":19,"name":"turret-hose","tpage_name":"forestb-vis-tfrag"}],[153878538,{"idx":10,"name":"pecker-wingbottom","tpage_name":"ldmpckgn-pris"}],[155123718,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"mhctycst-pris"}],[155123721,{"idx":9,"name":"daxterfinger","tpage_name":"mhctycst-pris"}],[155123722,{"idx":10,"name":"daxterfoot","tpage_name":"mhctycst-pris"}],[155123723,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"mhctycst-pris"}],[155123724,{"idx":12,"name":"daxtergoggles","tpage_name":"mhctycst-pris"}],[155123725,{"idx":13,"name":"daxterheadwidenew","tpage_name":"mhctycst-pris"}],[155123726,{"idx":14,"name":"daxterhelmetplain","tpage_name":"mhctycst-pris"}],[155123727,{"idx":15,"name":"daxterlense","tpage_name":"mhctycst-pris"}],[188940298,{"idx":10,"name":"facc-markings-06","tpage_name":"factoryd-vis-shrub"}],[155123729,{"idx":17,"name":"daxterteeth","tpage_name":"mhctycst-pris"}],[188940299,{"idx":11,"name":"facc-markings-05","tpage_name":"factoryd-vis-shrub"}],[155123730,{"idx":18,"name":"daxtertuft","tpage_name":"mhctycst-pris"}],[155123731,{"idx":19,"name":"environment-oldmetal","tpage_name":"mhctycst-pris"}],[155123732,{"idx":20,"name":"jakc-armor","tpage_name":"mhctycst-pris"}],[155123733,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"mhctycst-pris"}],[155123734,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"mhctycst-pris"}],[155123735,{"idx":23,"name":"jakc-lens","tpage_name":"mhctycst-pris"}],[155123737,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"mhctycst-pris"}],[155123738,{"idx":26,"name":"jakc-skirt","tpage_name":"mhctycst-pris"}],[155123739,{"idx":27,"name":"jakc-waistband2","tpage_name":"mhctycst-pris"}],[155123740,{"idx":28,"name":"jakc-wraps","tpage_name":"mhctycst-pris"}],[155123741,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"mhctycst-pris"}],[155123742,{"idx":30,"name":"jakchires-arm","tpage_name":"mhctycst-pris"}],[137297940,{"idx":20,"name":"torn-legshield","tpage_name":"citycast-pris2"}],[139788300,{"idx":12,"name":"samos-lens","tpage_name":"lsamos-pris2"}],[155123743,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"mhctycst-pris"}],[155123744,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"mhctycst-pris"}],[155123745,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"mhctycst-pris"}],[170524672,{"idx":0,"name":"holograph-env-rim-dest","tpage_name":"ljkdxvin-warp"}],[222167043,{"idx":3,"name":"flut-dkbluefeathers","tpage_name":"museum4-tfrag"}],[11796549,{"idx":69,"name":"cty-ind-ground01","tpage_name":"ctyinda-vis-tfrag"}],[115081291,{"idx":75,"name":"jakchires-facert","tpage_name":"desboss1-pris"}],[170524673,{"idx":1,"name":"holograph-env-noise","tpage_name":"ljkdxvin-warp"}],[220266539,{"idx":43,"name":"samos-arm","tpage_name":"museum3-pris2"}],[11796550,{"idx":70,"name":"city-ind-palace-cable-section-band","tpage_name":"ctyinda-vis-tfrag"}],[115081292,{"idx":76,"name":"jakchires-glovetop","tpage_name":"desboss1-pris"}],[170524675,{"idx":3,"name":"holograph-env-scan","tpage_name":"ljkdxvin-warp"}],[220266541,{"idx":45,"name":"samos-ear","tpage_name":"museum3-pris2"}],[222167046,{"idx":6,"name":"flut-wing","tpage_name":"museum4-tfrag"}],[11796552,{"idx":72,"name":"city-yellow-light-monster","tpage_name":"ctyinda-vis-tfrag"}],[115081294,{"idx":78,"name":"jakchires-horn","tpage_name":"desboss1-pris"}],[170721280,{"idx":0,"name":"palcab-lowres-background-hills-01","tpage_name":"lcitysml-tfrag"}],[170721281,{"idx":1,"name":"palcab-lowres-background-crater-bottom-enviro","tpage_name":"lcitysml-tfrag"}],[170721282,{"idx":2,"name":"palcab-lowres-ctywide-wall-01","tpage_name":"lcitysml-tfrag"}],[170721283,{"idx":3,"name":"palcab-lowres-background-rocksnow2","tpage_name":"lcitysml-tfrag"}],[170721284,{"idx":4,"name":"palcab-lowres-background-rocksnow","tpage_name":"lcitysml-tfrag"}],[170721285,{"idx":5,"name":"palcab-lowres-ctywide-wall-02","tpage_name":"lcitysml-tfrag"}],[170721286,{"idx":6,"name":"palcab-lowres-ctyslum-ground","tpage_name":"lcitysml-tfrag"}],[152240159,{"idx":31,"name":"king-chest","tpage_name":"wascast-pris2"}],[170721287,{"idx":7,"name":"palcab-lowres-ctyslum-roof-03","tpage_name":"lcitysml-tfrag"}],[152240160,{"idx":32,"name":"king-clip-02","tpage_name":"wascast-pris2"}],[170721291,{"idx":11,"name":"palcab-lowres-ctyslum-wall-02","tpage_name":"lcitysml-tfrag"}],[170721294,{"idx":14,"name":"palcab-pipe-hoze","tpage_name":"lcitysml-tfrag"}],[170721295,{"idx":15,"name":"palcab-lowres-mark-roof-02","tpage_name":"lcitysml-tfrag"}],[170721296,{"idx":16,"name":"city-lowres-ind-wall-04","tpage_name":"lcitysml-tfrag"}],[170721298,{"idx":18,"name":"strip-metal-02-lores","tpage_name":"lcitysml-tfrag"}],[170721299,{"idx":19,"name":"palcab-lowres-stadium-canopy","tpage_name":"lcitysml-tfrag"}],[170721300,{"idx":20,"name":"city-lowres-ind-wall-02","tpage_name":"lcitysml-tfrag"}],[170721301,{"idx":21,"name":"city-lowres-fort-yellow","tpage_name":"lcitysml-tfrag"}],[170721309,{"idx":29,"name":"city-lowres-ind-wall-07","tpage_name":"lcitysml-tfrag"}],[170721310,{"idx":30,"name":"city-lowres-ind-wall-08","tpage_name":"lcitysml-tfrag"}],[170721311,{"idx":31,"name":"palcab-lowres-mark-roof-rim-01","tpage_name":"lcitysml-tfrag"}],[170721312,{"idx":32,"name":"palcab-lowres-mark-shops-01","tpage_name":"lcitysml-tfrag"}],[170721313,{"idx":33,"name":"palcab-lowres-mark-awning-green","tpage_name":"lcitysml-tfrag"}],[170721314,{"idx":34,"name":"palcab-lowres-mark-awning-red","tpage_name":"lcitysml-tfrag"}],[170721315,{"idx":35,"name":"city-lowres-ctygen-side-02","tpage_name":"lcitysml-tfrag"}],[170721316,{"idx":36,"name":"city-lowres-ctygen-stripe-01","tpage_name":"lcitysml-tfrag"}],[181927936,{"idx":0,"name":"lava-drop-01","tpage_name":"mined-sprite"}],[170721317,{"idx":37,"name":"city-lowres-ctygen-roof-02","tpage_name":"lcitysml-tfrag"}],[181927937,{"idx":1,"name":"lava-drop-02","tpage_name":"mined-sprite"}],[170721318,{"idx":38,"name":"city-lowres-ctygen-build-01","tpage_name":"lcitysml-tfrag"}],[181927938,{"idx":2,"name":"lava-drop-03","tpage_name":"mined-sprite"}],[128974923,{"idx":75,"name":"ashelin-gunbarrel-03","tpage_name":"freecast-pris2"}],[128974924,{"idx":76,"name":"ashelin-gunholster","tpage_name":"freecast-pris2"}],[128974925,{"idx":77,"name":"ashelin-hair","tpage_name":"freecast-pris2"}],[128974926,{"idx":78,"name":"ashelin-handle-01","tpage_name":"freecast-pris2"}],[128974927,{"idx":79,"name":"ashelin-jacketbody","tpage_name":"freecast-pris2"}],[153878529,{"idx":1,"name":"jakchires-brownstrap","tpage_name":"ldmpckgn-pris"}],[128974929,{"idx":81,"name":"ashelin-jacketstraps","tpage_name":"freecast-pris2"}],[153878530,{"idx":2,"name":"jakchires-precarmor-01","tpage_name":"ldmpckgn-pris"}],[128974930,{"idx":82,"name":"ashelin-pantstop","tpage_name":"freecast-pris2"}],[153878531,{"idx":3,"name":"bam-eyelight","tpage_name":"ldmpckgn-pris"}],[128974931,{"idx":83,"name":"ashelin-redtop","tpage_name":"freecast-pris2"}],[153878532,{"idx":4,"name":"pecker-body-01","tpage_name":"ldmpckgn-pris"}],[155123712,{"idx":0,"name":"bam-eyelight","tpage_name":"mhctycst-pris"}],[128974932,{"idx":84,"name":"ashelin-shells","tpage_name":"freecast-pris2"}],[153878533,{"idx":5,"name":"pecker-eyelid","tpage_name":"ldmpckgn-pris"}],[155123713,{"idx":1,"name":"bam-hairhilite","tpage_name":"mhctycst-pris"}],[128974933,{"idx":85,"name":"ashelin-shield","tpage_name":"freecast-pris2"}],[153092107,{"idx":11,"name":"rail-base-dark-01","tpage_name":"railx-tfrag"}],[153092108,{"idx":12,"name":"rail-edge-01","tpage_name":"railx-tfrag"}],[134676480,{"idx":0,"name":"rub-metal-01","tpage_name":"rubblec-vis-tfrag"}],[134676481,{"idx":1,"name":"rub-blue-paint-rust04","tpage_name":"rubblec-vis-tfrag"}],[170721372,{"idx":92,"name":"tcab-plat-edg-01-lores","tpage_name":"lcitysml-tfrag"}],[184418352,{"idx":48,"name":"rub-city-wall-inside-damaged","tpage_name":"stadiuma-vis-tfrag"}],[190644252,{"idx":28,"name":"veger-shoulderplatemetal","tpage_name":"templee-pris2"}],[134676487,{"idx":7,"name":"rub-rubble-01","tpage_name":"rubblec-vis-tfrag"}],[170721373,{"idx":93,"name":"tcab-beam01","tpage_name":"lcitysml-tfrag"}],[184418353,{"idx":49,"name":"rub-wall-side-beam","tpage_name":"stadiuma-vis-tfrag"}],[190644253,{"idx":29,"name":"veger-sleeve","tpage_name":"templee-pris2"}],[221904992,{"idx":96,"name":"jak-orig-hairplain","tpage_name":"museum4-pris2"}],[170721374,{"idx":94,"name":"palcab-wall-lores","tpage_name":"lcitysml-tfrag"}],[184418354,{"idx":50,"name":"rub-palace-tower-side","tpage_name":"stadiuma-vis-tfrag"}],[190644254,{"idx":30,"name":"veger-sleevelower","tpage_name":"templee-pris2"}],[170721375,{"idx":95,"name":"ctyp-metal-01","tpage_name":"lcitysml-tfrag"}],[184418355,{"idx":51,"name":"rub-rock","tpage_name":"stadiuma-vis-tfrag"}],[190644255,{"idx":31,"name":"veger-stickwrap","tpage_name":"templee-pris2"}],[170721376,{"idx":96,"name":"palace-break-brokenwall","tpage_name":"lcitysml-tfrag"}],[184418356,{"idx":52,"name":"rub-wall-gen-02","tpage_name":"stadiuma-vis-tfrag"}],[190644256,{"idx":32,"name":"veger-teeth","tpage_name":"templee-pris2"}],[170721377,{"idx":97,"name":"city-lowres-mhcity-ground-01","tpage_name":"lcitysml-tfrag"}],[184418357,{"idx":53,"name":"rub-panels-01","tpage_name":"stadiuma-vis-tfrag"}],[190644257,{"idx":33,"name":"veger-vest","tpage_name":"templee-pris2"}],[170721378,{"idx":98,"name":"t-palshaft-r-strp-plate01","tpage_name":"lcitysml-tfrag"}],[184418358,{"idx":54,"name":"rub-beam-gen-hole","tpage_name":"stadiuma-vis-tfrag"}],[190644258,{"idx":34,"name":"veger-walkingstick-01","tpage_name":"templee-pris2"}],[170721379,{"idx":99,"name":"palcab-lorez-plates-red-stripe01","tpage_name":"lcitysml-tfrag"}],[184418359,{"idx":55,"name":"rub-wall-side-beam-02","tpage_name":"stadiuma-vis-tfrag"}],[190644259,{"idx":35,"name":"veger-walkingstick-02","tpage_name":"templee-pris2"}],[170721380,{"idx":100,"name":"palcab-lowres-background-desert-01","tpage_name":"lcitysml-tfrag"}],[184418360,{"idx":56,"name":"rub-palshaft-dirt-blue-01","tpage_name":"stadiuma-vis-tfrag"}],[190644260,{"idx":36,"name":"veger-walkingstick-03","tpage_name":"templee-pris2"}],[170459144,{"idx":8,"name":"daxterear","tpage_name":"ljkdxvin-pris"}],[171704324,{"idx":4,"name":"templea_sandstone_brick01","tpage_name":"templec-vis-tfrag"}],[172949504,{"idx":0,"name":"bam-eyelight","tpage_name":"precurd-vis-pris"}],[186515456,{"idx":0,"name":"backThing01","tpage_name":"lctyblow-pris"}],[170459145,{"idx":9,"name":"daxterfinger","tpage_name":"ljkdxvin-pris"}],[171704325,{"idx":5,"name":"temple_sandstone_pill01","tpage_name":"templec-vis-tfrag"}],[172949505,{"idx":1,"name":"bam-hairhilite","tpage_name":"precurd-vis-pris"}],[186515457,{"idx":1,"name":"dash01","tpage_name":"lctyblow-pris"}],[170459146,{"idx":10,"name":"daxterfoot","tpage_name":"ljkdxvin-pris"}],[171704326,{"idx":6,"name":"wascity-rope","tpage_name":"templec-vis-tfrag"}],[172949506,{"idx":2,"name":"daxter-eyelid","tpage_name":"precurd-vis-pris"}],[16121888,{"idx":32,"name":"city-ind-bigpipe-siding","tpage_name":"ctyfarma-vis-tfrag"}],[186515458,{"idx":2,"name":"gauge01","tpage_name":"lctyblow-pris"}],[170459147,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"ljkdxvin-pris"}],[171704327,{"idx":7,"name":"temple_metal01","tpage_name":"templec-vis-tfrag"}],[172949507,{"idx":3,"name":"daxter-furhilite","tpage_name":"precurd-vis-pris"}],[16121889,{"idx":33,"name":"city-farm-cartbase","tpage_name":"ctyfarma-vis-tfrag"}],[186515459,{"idx":3,"name":"grillRim01","tpage_name":"lctyblow-pris"}],[16121890,{"idx":34,"name":"city-farm-cartwheeltrim","tpage_name":"ctyfarma-vis-tfrag"}],[186515460,{"idx":4,"name":"gunBoxBack01","tpage_name":"lctyblow-pris"}],[16121891,{"idx":35,"name":"city-farm-cartwheeltread","tpage_name":"ctyfarma-vis-tfrag"}],[171376640,{"idx":0,"name":"templea-waterfall","tpage_name":"templea-vis-water"}],[171376642,{"idx":2,"name":"environment-lightjak","tpage_name":"templea-vis-water"}],[223019013,{"idx":5,"name":"rub-cement-a","tpage_name":"rublcst-vis-tfrag"}],[171376643,{"idx":3,"name":"lightjak-wings","tpage_name":"templea-vis-water"}],[223019014,{"idx":6,"name":"rub-cement-pillars","tpage_name":"rublcst-vis-tfrag"}],[171507714,{"idx":2,"name":"temple_sandstone_ground02","tpage_name":"templeb-vis-tfrag"}],[223150085,{"idx":5,"name":"daxterarm","tpage_name":"rublcst-vis-pris"}],[171507715,{"idx":3,"name":"temple_sandstone_base01","tpage_name":"templeb-vis-tfrag"}],[223150086,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"rublcst-vis-pris"}],[223150088,{"idx":8,"name":"daxterear","tpage_name":"rublcst-vis-pris"}],[223150089,{"idx":9,"name":"daxterfinger","tpage_name":"rublcst-vis-pris"}],[173998080,{"idx":0,"name":"windshield01","tpage_name":"ltowerb-vis-water"}],[171507720,{"idx":8,"name":"temple_sandstone_box01","tpage_name":"templeb-vis-tfrag"}],[223150091,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"rublcst-vis-pris"}],[171507723,{"idx":11,"name":"temple-floor-01","tpage_name":"templeb-vis-tfrag"}],[223150094,{"idx":14,"name":"daxterhelmetplain","tpage_name":"rublcst-vis-pris"}],[171507728,{"idx":16,"name":"temple-candle-side","tpage_name":"templeb-vis-tfrag"}],[223150099,{"idx":19,"name":"environment-oldmetal","tpage_name":"rublcst-vis-pris"}],[171507729,{"idx":17,"name":"temple-candle-top","tpage_name":"templeb-vis-tfrag"}],[223150100,{"idx":20,"name":"intcept-tread01","tpage_name":"rublcst-vis-pris"}],[171507730,{"idx":18,"name":"temple-candle-wax-top","tpage_name":"templeb-vis-tfrag"}],[223150101,{"idx":21,"name":"jakc-armor","tpage_name":"rublcst-vis-pris"}],[171507731,{"idx":19,"name":"temple_sandstone_star01","tpage_name":"templeb-vis-tfrag"}],[223150102,{"idx":22,"name":"jakc-chestplate-straps","tpage_name":"rublcst-vis-pris"}],[223150103,{"idx":23,"name":"jakc-gogglemetal","tpage_name":"rublcst-vis-pris"}],[153813003,{"idx":11,"name":"mhcity-floor-brace-02","tpage_name":"mhcityb-vis-pris"}],[118751254,{"idx":22,"name":"seem-precmetal-plain","tpage_name":"wcaseem-pris2"}],[171507734,{"idx":22,"name":"wstd-torchbowl-coal-01","tpage_name":"templeb-vis-tfrag"}],[223150105,{"idx":25,"name":"jakc-scarf","tpage_name":"rublcst-vis-pris"}],[223150108,{"idx":28,"name":"jakc-waistband2","tpage_name":"rublcst-vis-pris"}],[223150109,{"idx":29,"name":"jakc-wraps","tpage_name":"rublcst-vis-pris"}],[171507740,{"idx":28,"name":"templea_sandstone_brick01","tpage_name":"templeb-vis-tfrag"}],[223150111,{"idx":31,"name":"jakchires-arm","tpage_name":"rublcst-vis-pris"}],[171507742,{"idx":30,"name":"wascity-rope","tpage_name":"templeb-vis-tfrag"}],[223150113,{"idx":33,"name":"jakchires-arm-norm","tpage_name":"rublcst-vis-pris"}],[171507743,{"idx":31,"name":"warpgate-circuitpattern2","tpage_name":"templeb-vis-tfrag"}],[223150114,{"idx":34,"name":"jakchires-blackstrap","tpage_name":"rublcst-vis-pris"}],[223150115,{"idx":35,"name":"jakchires-brownstrap","tpage_name":"rublcst-vis-pris"}],[171507745,{"idx":33,"name":"warpgate-post-01","tpage_name":"templeb-vis-tfrag"}],[223150116,{"idx":36,"name":"jakchires-brwnleather","tpage_name":"rublcst-vis-pris"}],[171507747,{"idx":35,"name":"temple_sandstone_brick-01","tpage_name":"templeb-vis-tfrag"}],[171507748,{"idx":36,"name":"temple_sandstone_pill03","tpage_name":"templeb-vis-tfrag"}],[171507749,{"idx":37,"name":"temple_sandstone_trim02","tpage_name":"templeb-vis-tfrag"}],[171507750,{"idx":38,"name":"temple_sandstone_steptop01","tpage_name":"templeb-vis-tfrag"}],[171507751,{"idx":39,"name":"temple_sandstone_trim01","tpage_name":"templeb-vis-tfrag"}],[171507752,{"idx":40,"name":"temple_sandstone_taper01","tpage_name":"templeb-vis-tfrag"}],[171507754,{"idx":42,"name":"temple_sandstone_pill02","tpage_name":"templeb-vis-tfrag"}],[171507755,{"idx":43,"name":"temple_pre-02","tpage_name":"templeb-vis-tfrag"}],[171507756,{"idx":44,"name":"temple_pre-01","tpage_name":"templeb-vis-tfrag"}],[171507757,{"idx":45,"name":"rail-env-wall-01","tpage_name":"templeb-vis-tfrag"}],[171507758,{"idx":46,"name":"temple_sandstone_pill04","tpage_name":"templeb-vis-tfrag"}],[171507759,{"idx":47,"name":"temple_sandstone_pill06","tpage_name":"templeb-vis-tfrag"}],[171507760,{"idx":48,"name":"temple_pre-03","tpage_name":"templeb-vis-tfrag"}],[171507765,{"idx":53,"name":"temple_sandstone_pill07","tpage_name":"templeb-vis-tfrag"}],[171507766,{"idx":54,"name":"common_sandstone_ground01","tpage_name":"templeb-vis-tfrag"}],[171507767,{"idx":55,"name":"common_sandstone_taper01","tpage_name":"templeb-vis-tfrag"}],[208470021,{"idx":5,"name":"whack-scoreboard-5","tpage_name":"powergd-sprite"}],[188940288,{"idx":0,"name":"facc-bolt-02","tpage_name":"factoryd-vis-shrub"}],[171507768,{"idx":56,"name":"common_sandstone_trim01","tpage_name":"templeb-vis-tfrag"}],[208470022,{"idx":6,"name":"whack-scoreboard-6","tpage_name":"powergd-sprite"}],[188940289,{"idx":1,"name":"facc-bolt-01","tpage_name":"factoryd-vis-shrub"}],[171507769,{"idx":57,"name":"common_sandstone_pill01","tpage_name":"templeb-vis-tfrag"}],[223150140,{"idx":60,"name":"jakchires-leatherpouch","tpage_name":"rublcst-vis-pris"}],[208470023,{"idx":7,"name":"whack-scoreboard-7","tpage_name":"powergd-sprite"}],[171507770,{"idx":58,"name":"common_sandstone_base01","tpage_name":"templeb-vis-tfrag"}],[208470024,{"idx":8,"name":"whack-scoreboard-8","tpage_name":"powergd-sprite"}],[223150141,{"idx":61,"name":"jakchires-lightbrownspat","tpage_name":"rublcst-vis-pris"}],[171507732,{"idx":20,"name":"temple_metal01","tpage_name":"templeb-vis-tfrag"}],[177733632,{"idx":0,"name":"precur-window-glass","tpage_name":"precurd-vis-water"}],[171507733,{"idx":21,"name":"temple_metal02","tpage_name":"templeb-vis-tfrag"}],[177733633,{"idx":1,"name":"errolcyber-lens","tpage_name":"precurd-vis-water"}],[153878540,{"idx":12,"name":"pecker-yellowfur","tpage_name":"ldmpckgn-pris"}],[155123720,{"idx":8,"name":"daxterear","tpage_name":"mhctycst-pris"}],[173670400,{"idx":0,"name":"tow-eggpod-01","tpage_name":"towerb-vis-tfrag"}],[173670401,{"idx":1,"name":"tow-egg-remains-side","tpage_name":"towerb-vis-tfrag"}],[173670402,{"idx":2,"name":"tow-pup-skin-01","tpage_name":"towerb-vis-tfrag"}],[173670403,{"idx":3,"name":"tow-pupeyes-01","tpage_name":"towerb-vis-tfrag"}],[173670404,{"idx":4,"name":"tow-pup-detail-01","tpage_name":"towerb-vis-tfrag"}],[171769900,{"idx":44,"name":"jakchires-chestplate","tpage_name":"templea-vis-pris"}],[171769901,{"idx":45,"name":"jakchires-clips","tpage_name":"templea-vis-pris"}],[173670406,{"idx":6,"name":"tow-eggtop-01","tpage_name":"towerb-vis-tfrag"}],[171769902,{"idx":46,"name":"jakchires-eye","tpage_name":"templea-vis-pris"}],[173670407,{"idx":7,"name":"tow-basebone-01","tpage_name":"towerb-vis-tfrag"}],[171769903,{"idx":47,"name":"jakchires-eyebrow","tpage_name":"templea-vis-pris"}],[171769904,{"idx":48,"name":"jakchires-eyelid","tpage_name":"templea-vis-pris"}],[171769905,{"idx":49,"name":"jakchires-facelft","tpage_name":"templea-vis-pris"}],[171769906,{"idx":50,"name":"jakchires-facert","tpage_name":"templea-vis-pris"}],[171769907,{"idx":51,"name":"jakchires-glovetop","tpage_name":"templea-vis-pris"}],[173670412,{"idx":12,"name":"tow-wall-supports","tpage_name":"towerb-vis-tfrag"}],[171769908,{"idx":52,"name":"jakchires-hair","tpage_name":"templea-vis-pris"}],[173670413,{"idx":13,"name":"tow-base-ground","tpage_name":"towerb-vis-tfrag"}],[171769909,{"idx":53,"name":"jakchires-horn","tpage_name":"templea-vis-pris"}],[173670414,{"idx":14,"name":"tow-plat-side","tpage_name":"towerb-vis-tfrag"}],[171769910,{"idx":54,"name":"jakchires-jacket","tpage_name":"templea-vis-pris"}],[173670415,{"idx":15,"name":"tow-base-ground-plat","tpage_name":"towerb-vis-tfrag"}],[171769911,{"idx":55,"name":"jakchires-leatherpouch","tpage_name":"templea-vis-pris"}],[173670416,{"idx":16,"name":"tow-dplight-blue-01","tpage_name":"towerb-vis-tfrag"}],[171769912,{"idx":56,"name":"jakchires-lightbrownspat","tpage_name":"templea-vis-pris"}],[173670417,{"idx":17,"name":"tow-pup-metal-01","tpage_name":"towerb-vis-tfrag"}],[173670418,{"idx":18,"name":"tow-egg-group-base","tpage_name":"towerb-vis-tfrag"}],[170524674,{"idx":2,"name":"holograph-env-rim","tpage_name":"ljkdxvin-warp"}],[220266540,{"idx":44,"name":"samos-diaper","tpage_name":"museum3-pris2"}],[222167045,{"idx":5,"name":"flut-wingends","tpage_name":"museum4-tfrag"}],[11796551,{"idx":71,"name":"city-ind-palace-cable-section","tpage_name":"ctyinda-vis-tfrag"}],[115081293,{"idx":77,"name":"jakchires-hair","tpage_name":"desboss1-pris"}],[171900928,{"idx":0,"name":"minc-pre-12","tpage_name":"templed-vis-water"}],[172490752,{"idx":0,"name":"precur-floor-plate-02","tpage_name":"precura-vis-tfrag"}],[172490753,{"idx":1,"name":"precur-tubes-small-01","tpage_name":"precura-vis-tfrag"}],[50724884,{"idx":20,"name":"fora-bridge-plank","tpage_name":"foresta-vis-pris"}],[172490754,{"idx":2,"name":"precur-plate-pattern-01","tpage_name":"precura-vis-tfrag"}],[172490755,{"idx":3,"name":"precur-tubes-segment-01","tpage_name":"precura-vis-tfrag"}],[172490756,{"idx":4,"name":"precur-nail-01","tpage_name":"precura-vis-tfrag"}],[173735936,{"idx":0,"name":"tow-eggcase-01","tpage_name":"towerb-vis-alpha"}],[172490757,{"idx":5,"name":"precur-nail-02","tpage_name":"precura-vis-tfrag"}],[173735937,{"idx":1,"name":"tow-eggtop-01","tpage_name":"towerb-vis-alpha"}],[172490758,{"idx":6,"name":"precur-floor-plate-01","tpage_name":"precura-vis-tfrag"}],[173735938,{"idx":2,"name":"tow-eggside-01","tpage_name":"towerb-vis-alpha"}],[172490759,{"idx":7,"name":"precur-plate-end-01","tpage_name":"precura-vis-tfrag"}],[172490760,{"idx":8,"name":"precur-wall-tube-02","tpage_name":"precura-vis-tfrag"}],[172490762,{"idx":10,"name":"precur-wall-brace-01","tpage_name":"precura-vis-tfrag"}],[172490763,{"idx":11,"name":"precur-light-green-01","tpage_name":"precura-vis-tfrag"}],[195100686,{"idx":14,"name":"kg-fl-tret-dash01","tpage_name":"lblowtkg-pris"}],[170197086,{"idx":94,"name":"tess-jeansback","tpage_name":"outrocst-pris2"}],[194052118,{"idx":22,"name":"marauder-sword-edge","tpage_name":"deschase-pris"}],[171769981,{"idx":125,"name":"temple_metal03","tpage_name":"templea-vis-pris"}],[125829125,{"idx":5,"name":"comm-metal-03","tpage_name":"deshover-tfrag"}],[172490776,{"idx":24,"name":"precur-plate-thin-01","tpage_name":"precura-vis-tfrag"}],[177471496,{"idx":8,"name":"rail-gray-metal-01","tpage_name":"railb2-tfrag"}],[179961856,{"idx":0,"name":"bam-eyelight","tpage_name":"loutro2-pris2"}],[220201197,{"idx":237,"name":"cguardred-armshield","tpage_name":"museum3-pris"}],[195100687,{"idx":15,"name":"kg-fl-tret-guntrack","tpage_name":"lblowtkg-pris"}],[170197087,{"idx":95,"name":"tess-jeanscuff","tpage_name":"outrocst-pris2"}],[172490777,{"idx":25,"name":"precur-plate-large-01","tpage_name":"precura-vis-tfrag"}],[177471497,{"idx":9,"name":"rail-light-blue-small","tpage_name":"railb2-tfrag"}],[194052119,{"idx":23,"name":"marauder-sword-metal","tpage_name":"deschase-pris"}],[171769982,{"idx":126,"name":"temple_sandstone_brick-01","tpage_name":"templea-vis-pris"}],[195100688,{"idx":16,"name":"kg-fl-tret-hood01","tpage_name":"lblowtkg-pris"}],[200081408,{"idx":0,"name":"charHOLD","tpage_name":"volcanoa-vis-pris2"}],[170197088,{"idx":96,"name":"tess-lowerboot","tpage_name":"outrocst-pris2"}],[194052120,{"idx":24,"name":"intcept-base-green01","tpage_name":"deschase-pris"}],[172490778,{"idx":26,"name":"precur-road-plate-01","tpage_name":"precura-vis-tfrag"}],[177471498,{"idx":10,"name":"rail-detail-01","tpage_name":"railb2-tfrag"}],[179961858,{"idx":2,"name":"charHOLD","tpage_name":"loutro2-pris2"}],[220201199,{"idx":239,"name":"cguardred-boottop","tpage_name":"museum3-pris"}],[195100689,{"idx":17,"name":"kg-fl-tret-jets01","tpage_name":"lblowtkg-pris"}],[200081409,{"idx":1,"name":"flamer-wing","tpage_name":"volcanoa-vis-pris2"}],[170197089,{"idx":97,"name":"tess-scarf","tpage_name":"outrocst-pris2"}],[172490779,{"idx":27,"name":"precur-container-plate-01","tpage_name":"precura-vis-tfrag"}],[177471499,{"idx":11,"name":"rail-cord-01","tpage_name":"railb2-tfrag"}],[194052121,{"idx":25,"name":"intcept-base-patern01","tpage_name":"deschase-pris"}],[195100692,{"idx":20,"name":"kg-fl-tret-red-plate","tpage_name":"lblowtkg-pris"}],[200081412,{"idx":4,"name":"grunt-hose","tpage_name":"volcanoa-vis-pris2"}],[170197092,{"idx":100,"name":"tess-shoebottom","tpage_name":"outrocst-pris2"}],[172490782,{"idx":30,"name":"precur-plate-honey-01","tpage_name":"precura-vis-tfrag"}],[177471502,{"idx":14,"name":"rail-env-car-01","tpage_name":"railb2-tfrag"}],[194052124,{"idx":28,"name":"intcept-pipe01","tpage_name":"deschase-pris"}],[200081413,{"idx":5,"name":"grunt-metal-01","tpage_name":"volcanoa-vis-pris2"}],[170197093,{"idx":101,"name":"tess-shoetop","tpage_name":"outrocst-pris2"}],[172490783,{"idx":31,"name":"precur-engine-frame-01","tpage_name":"precura-vis-tfrag"}],[177471503,{"idx":15,"name":"rail-light-yellow","tpage_name":"railb2-tfrag"}],[195100694,{"idx":22,"name":"roboguard-headshield","tpage_name":"lblowtkg-pris"}],[200081414,{"idx":6,"name":"grunt-skin-01","tpage_name":"volcanoa-vis-pris2"}],[170197094,{"idx":102,"name":"tess-sleeve","tpage_name":"outrocst-pris2"}],[172490784,{"idx":32,"name":"precur-wall-tube-01","tpage_name":"precura-vis-tfrag"}],[177471504,{"idx":16,"name":"rail-light-yellow-small","tpage_name":"railb2-tfrag"}],[200081415,{"idx":7,"name":"grunt-skin-02","tpage_name":"volcanoa-vis-pris2"}],[170197095,{"idx":103,"name":"tess-teeth","tpage_name":"outrocst-pris2"}],[172490785,{"idx":33,"name":"precur-platform-plate","tpage_name":"precura-vis-tfrag"}],[177471505,{"idx":17,"name":"rail-pipe-02","tpage_name":"railb2-tfrag"}],[172490786,{"idx":34,"name":"precur-tubes-bundle-02","tpage_name":"precura-vis-tfrag"}],[177471506,{"idx":18,"name":"comb-redmarker","tpage_name":"railb2-tfrag"}],[172490787,{"idx":35,"name":"precur-rubber-01","tpage_name":"precura-vis-tfrag"}],[177471507,{"idx":19,"name":"rail-pipe-05","tpage_name":"railb2-tfrag"}],[172490789,{"idx":37,"name":"precur-light-blue-01","tpage_name":"precura-vis-tfrag"}],[177471509,{"idx":21,"name":"rail-trim-01","tpage_name":"railb2-tfrag"}],[172490790,{"idx":38,"name":"precur-tube-honey-big","tpage_name":"precura-vis-tfrag"}],[177471510,{"idx":22,"name":"rail-light-red","tpage_name":"railb2-tfrag"}],[174391296,{"idx":0,"name":"bam-eyelight","tpage_name":"ldesgcst-pris2"}],[172490791,{"idx":39,"name":"precur-control-screen","tpage_name":"precura-vis-tfrag"}],[177471511,{"idx":23,"name":"rail-rock-01","tpage_name":"railb2-tfrag"}],[172490792,{"idx":40,"name":"common-black","tpage_name":"precura-vis-tfrag"}],[174391297,{"idx":1,"name":"charHOLD","tpage_name":"ldesgcst-pris2"}],[174391298,{"idx":2,"name":"environment-oldmetal","tpage_name":"ldesgcst-pris2"}],[172490793,{"idx":41,"name":"precur-floor-large-01","tpage_name":"precura-vis-tfrag"}],[177471513,{"idx":25,"name":"rail-env-wall-01","tpage_name":"railb2-tfrag"}],[194052135,{"idx":39,"name":"vehicle-tread-blur-02","tpage_name":"deschase-pris"}],[172490800,{"idx":48,"name":"precur-generator-crystal-01","tpage_name":"precura-vis-tfrag"}],[172490801,{"idx":49,"name":"precur-wall-tube-03","tpage_name":"precura-vis-tfrag"}],[174391306,{"idx":10,"name":"sig-glove","tpage_name":"ldesgcst-pris2"}],[172490802,{"idx":50,"name":"precur-blue-light-02","tpage_name":"precura-vis-tfrag"}],[174391307,{"idx":11,"name":"sig-glovetop","tpage_name":"ldesgcst-pris2"}],[174391311,{"idx":15,"name":"sig-gun-04","tpage_name":"ldesgcst-pris2"}],[172490806,{"idx":54,"name":"precur-light-green-big","tpage_name":"precura-vis-tfrag"}],[179961886,{"idx":30,"name":"sig-belt","tpage_name":"loutro2-pris2"}],[174391312,{"idx":16,"name":"sig-gun-05","tpage_name":"ldesgcst-pris2"}],[172490807,{"idx":55,"name":"precur-trim-01","tpage_name":"precura-vis-tfrag"}],[179961887,{"idx":31,"name":"sig-eye","tpage_name":"loutro2-pris2"}],[174391313,{"idx":17,"name":"sig-headgear","tpage_name":"ldesgcst-pris2"}],[172490808,{"idx":56,"name":"precur-bomb-light","tpage_name":"precura-vis-tfrag"}],[179961888,{"idx":32,"name":"sig-eyelid","tpage_name":"loutro2-pris2"}],[174391315,{"idx":19,"name":"sig-lens","tpage_name":"ldesgcst-pris2"}],[172490810,{"idx":58,"name":"precur-light-red-01","tpage_name":"precura-vis-tfrag"}],[179961890,{"idx":34,"name":"sig-facert","tpage_name":"loutro2-pris2"}],[174391316,{"idx":20,"name":"sig-metal-01","tpage_name":"ldesgcst-pris2"}],[172490811,{"idx":59,"name":"precur-floor-base-01","tpage_name":"precura-vis-tfrag"}],[179961891,{"idx":35,"name":"sig-flask","tpage_name":"loutro2-pris2"}],[174391318,{"idx":22,"name":"sig-sac","tpage_name":"ldesgcst-pris2"}],[172490813,{"idx":61,"name":"precur-bomb-spawner-hole","tpage_name":"precura-vis-tfrag"}],[179961893,{"idx":37,"name":"sig-glove","tpage_name":"loutro2-pris2"}],[174391319,{"idx":23,"name":"sig-shoebottom","tpage_name":"ldesgcst-pris2"}],[172490814,{"idx":62,"name":"precur-small-plate-edge","tpage_name":"precura-vis-tfrag"}],[179961894,{"idx":38,"name":"sig-glovetop","tpage_name":"loutro2-pris2"}],[174391320,{"idx":24,"name":"sig-shoetop","tpage_name":"ldesgcst-pris2"}],[172490815,{"idx":63,"name":"environment-precur-level","tpage_name":"precura-vis-tfrag"}],[179961895,{"idx":39,"name":"sig-gun-01","tpage_name":"loutro2-pris2"}],[174391324,{"idx":28,"name":"sig-skirts-03","tpage_name":"ldesgcst-pris2"}],[172490819,{"idx":67,"name":"precur-floor-large-01-lotweak","tpage_name":"precura-vis-tfrag"}],[179961899,{"idx":43,"name":"sig-gun-05","tpage_name":"loutro2-pris2"}],[172949553,{"idx":49,"name":"terraformer-metal-05","tpage_name":"precurd-vis-pris"}],[187891713,{"idx":1,"name":"stadiumb-hud-booster-off-01","tpage_name":"lfaccar-minimap"}],[172949554,{"idx":50,"name":"terraformer-metal-07","tpage_name":"precurd-vis-pris"}],[187891714,{"idx":2,"name":"stadiumb-hud-booster-on-01","tpage_name":"lfaccar-minimap"}],[172949555,{"idx":51,"name":"terraformer-metal-08","tpage_name":"precurd-vis-pris"}],[187891715,{"idx":3,"name":"hud-small-vehicle-health-bar-01","tpage_name":"lfaccar-minimap"}],[172949556,{"idx":52,"name":"terraformer-metal-09","tpage_name":"precurd-vis-pris"}],[187891716,{"idx":4,"name":"hud-turbo-boost-off-01","tpage_name":"lfaccar-minimap"}],[172949557,{"idx":53,"name":"terraformer-metal-10","tpage_name":"precurd-vis-pris"}],[187891717,{"idx":5,"name":"hud-turbo-boost-on-01","tpage_name":"lfaccar-minimap"}],[172949558,{"idx":54,"name":"terraformer-minestrips-01","tpage_name":"precurd-vis-pris"}],[187891718,{"idx":6,"name":"hud-turbo-boost-rim-01","tpage_name":"lfaccar-minimap"}],[172949559,{"idx":55,"name":"terraformer-organic-01","tpage_name":"precurd-vis-pris"}],[172949569,{"idx":65,"name":"jakc-skirt","tpage_name":"precurd-vis-pris"}],[134873241,{"idx":153,"name":"rub-pal-metal","tpage_name":"rubbleb-vis-tfrag"}],[172949599,{"idx":95,"name":"errolcyber-bluemetal-01","tpage_name":"precurd-vis-pris"}],[172949601,{"idx":97,"name":"errolcyber-chestplate","tpage_name":"precurd-vis-pris"}],[172949602,{"idx":98,"name":"errolcyber-dirtymetal","tpage_name":"precurd-vis-pris"}],[172949603,{"idx":99,"name":"errolcyber-fingers","tpage_name":"precurd-vis-pris"}],[172949604,{"idx":100,"name":"errolcyber-glovepalm","tpage_name":"precurd-vis-pris"}],[172949605,{"idx":101,"name":"errolcyber-greyknobs","tpage_name":"precurd-vis-pris"}],[172949606,{"idx":102,"name":"errolcyber-greymetal","tpage_name":"precurd-vis-pris"}],[172949607,{"idx":103,"name":"errolcyber-greymetal-02","tpage_name":"precurd-vis-pris"}],[172949608,{"idx":104,"name":"errolcyber-insidewires","tpage_name":"precurd-vis-pris"}],[172949609,{"idx":105,"name":"errolcyber-jointpipe","tpage_name":"precurd-vis-pris"}],[172949610,{"idx":106,"name":"errolcyber-metalgold","tpage_name":"precurd-vis-pris"}],[172949611,{"idx":107,"name":"errolcyber-redmetal-01","tpage_name":"precurd-vis-pris"}],[172949612,{"idx":108,"name":"errolcyber-redmetal-02","tpage_name":"precurd-vis-pris"}],[170197081,{"idx":89,"name":"tess-finger","tpage_name":"outrocst-pris2"}],[197591041,{"idx":1,"name":"hud-small-vehicle-health-bar-01","tpage_name":"raila-minimap"}],[172949613,{"idx":109,"name":"errolcyber-redmetal-03","tpage_name":"precurd-vis-pris"}],[170197082,{"idx":90,"name":"tess-glove","tpage_name":"outrocst-pris2"}],[195100682,{"idx":10,"name":"environment-oldmetal","tpage_name":"lblowtkg-pris"}],[197591042,{"idx":2,"name":"hud-small-vehicle-health-bar-02","tpage_name":"raila-minimap"}],[172949614,{"idx":110,"name":"errolcyber-rubberpipe","tpage_name":"precurd-vis-pris"}],[153878528,{"idx":0,"name":"jakc-wristband-a2","tpage_name":"ldmpckgn-pris"}],[128974928,{"idx":80,"name":"ashelin-jacketsleeve","tpage_name":"freecast-pris2"}],[173211648,{"idx":0,"name":"hud-tformer-target-01","tpage_name":"desboss1-minimap"}],[173473796,{"idx":4,"name":"tow-eggtop-01","tpage_name":"ltowerb-vis-tfrag"}],[173473797,{"idx":5,"name":"tow-pup-skin-01","tpage_name":"ltowerb-vis-tfrag"}],[173473798,{"idx":6,"name":"tow-pupeyes-01","tpage_name":"ltowerb-vis-tfrag"}],[173473799,{"idx":7,"name":"tow-pup-detail-01","tpage_name":"ltowerb-vis-tfrag"}],[173473800,{"idx":8,"name":"tow-basebone-01","tpage_name":"ltowerb-vis-tfrag"}],[173473802,{"idx":10,"name":"city-lowres-mhcity-wall-06","tpage_name":"ltowerb-vis-tfrag"}],[173473806,{"idx":14,"name":"mhcity-base-ground","tpage_name":"ltowerb-vis-tfrag"}],[173473807,{"idx":15,"name":"tow-eggside-01","tpage_name":"ltowerb-vis-tfrag"}],[173473809,{"idx":17,"name":"tow-wall-supports","tpage_name":"ltowerb-vis-tfrag"}],[173473810,{"idx":18,"name":"tow-egg-group-base","tpage_name":"ltowerb-vis-tfrag"}],[173670408,{"idx":8,"name":"mhcity-wall-tentacle-02","tpage_name":"towerb-vis-tfrag"}],[176160768,{"idx":0,"name":"holograph-env-rim-dest","tpage_name":"templea-warp"}],[220201119,{"idx":159,"name":"keira-iris-64x64","tpage_name":"museum3-pris"}],[188940291,{"idx":3,"name":"fac-drop-plat-plate-side-01","tpage_name":"factoryd-vis-shrub"}],[171507771,{"idx":59,"name":"temple_sandstone_scale_01","tpage_name":"templeb-vis-tfrag"}],[223150142,{"idx":62,"name":"jakchires-pants","tpage_name":"rublcst-vis-pris"}],[208470025,{"idx":9,"name":"whack-scoreboard-9","tpage_name":"powergd-sprite"}],[188940292,{"idx":4,"name":"fac-drop-plat-plate-trim-01","tpage_name":"factoryd-vis-shrub"}],[190185472,{"idx":0,"name":"holograph-env-noise","tpage_name":"volcanox-warp"}],[171507772,{"idx":60,"name":"tpl-symbl-yellow-glow-01","tpage_name":"templeb-vis-tfrag"}],[223150143,{"idx":63,"name":"jakchires-precarmor-01","tpage_name":"rublcst-vis-pris"}],[208470026,{"idx":10,"name":"time-bubble-orbiter","tpage_name":"powergd-sprite"}],[188940293,{"idx":5,"name":"fac-drop-plat-plate-trim-02","tpage_name":"factoryd-vis-shrub"}],[190185473,{"idx":1,"name":"holograph-env-rim","tpage_name":"volcanox-warp"}],[171507773,{"idx":61,"name":"environment-darkprec","tpage_name":"templeb-vis-tfrag"}],[223150144,{"idx":64,"name":"jakchires-shoebottom","tpage_name":"rublcst-vis-pris"}],[172621826,{"idx":2,"name":"precur-nail-01","tpage_name":"precura-vis-shrub"}],[170721321,{"idx":41,"name":"city-lowres-ctygen-side-01","tpage_name":"lcitysml-tfrag"}],[220528902,{"idx":262,"name":"mayor-hair-01","tpage_name":"museum4-pris"}],[188940294,{"idx":6,"name":"facc-markings-02","tpage_name":"factoryd-vis-shrub"}],[190185474,{"idx":2,"name":"holograph-env-scan","tpage_name":"volcanox-warp"}],[171507774,{"idx":62,"name":"dk-eco-vent-glow-01","tpage_name":"templeb-vis-tfrag"}],[223150145,{"idx":65,"name":"jakchires-shoemetal","tpage_name":"rublcst-vis-pris"}],[188940295,{"idx":7,"name":"facc-markings-03","tpage_name":"factoryd-vis-shrub"}],[190185475,{"idx":3,"name":"holograph-env-rim-dest","tpage_name":"volcanox-warp"}],[171507775,{"idx":63,"name":"dk-eco-vent-side-01","tpage_name":"templeb-vis-tfrag"}],[223150146,{"idx":66,"name":"jakchires-shoeteop","tpage_name":"rublcst-vis-pris"}],[188940296,{"idx":8,"name":"facc-markings-01","tpage_name":"factoryd-vis-shrub"}],[171507776,{"idx":64,"name":"temple_metal04","tpage_name":"templeb-vis-tfrag"}],[223150147,{"idx":67,"name":"jakchires-teeth","tpage_name":"rublcst-vis-pris"}],[188940297,{"idx":9,"name":"facc-markings-04","tpage_name":"factoryd-vis-shrub"}],[171507777,{"idx":65,"name":"common-black","tpage_name":"templeb-vis-tfrag"}],[223150148,{"idx":68,"name":"kid-blackstrap","tpage_name":"rublcst-vis-pris"}],[197722127,{"idx":15,"name":"kg-grunt-rim-02","tpage_name":"lfacrm2-pris"}],[173867103,{"idx":95,"name":"dark-crystal-pickup-01","tpage_name":"ltowerb-vis-pris"}],[173867104,{"idx":96,"name":"dark-crystal-pickup-02","tpage_name":"ltowerb-vis-pris"}],[189530128,{"idx":16,"name":"vehicle-wheel-01","tpage_name":"desrally-pris"}],[194510848,{"idx":0,"name":"bam-eyelight","tpage_name":"gridcst-pris2"}],[174129216,{"idx":64,"name":"prec-veger-foot-02","tpage_name":"loutro-pris2"}],[194052096,{"idx":0,"name":"marauder-belt","tpage_name":"deschase-pris"}],[171769959,{"idx":103,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"templea-vis-pris"}],[189530129,{"idx":17,"name":"vehicle-wheel-blur-01","tpage_name":"desrally-pris"}],[194510849,{"idx":1,"name":"bam-hairhilite","tpage_name":"gridcst-pris2"}],[174129217,{"idx":65,"name":"prec-veger-handback","tpage_name":"loutro-pris2"}],[194052097,{"idx":1,"name":"marauder-blade","tpage_name":"deschase-pris"}],[171769960,{"idx":104,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"templea-vis-pris"}],[189530130,{"idx":18,"name":"des-corral-metal-01","tpage_name":"desrally-pris"}],[194510850,{"idx":2,"name":"environment-oldmetal","tpage_name":"gridcst-pris2"}],[174129218,{"idx":66,"name":"prec-veger-handpalm","tpage_name":"loutro-pris2"}],[194052098,{"idx":2,"name":"marauder-blade-joint","tpage_name":"deschase-pris"}],[171769961,{"idx":105,"name":"dp-bipedal-eye-01","tpage_name":"templea-vis-pris"}],[189530131,{"idx":19,"name":"des-corral-plate-02","tpage_name":"desrally-pris"}],[194510851,{"idx":3,"name":"jinx-arm","tpage_name":"gridcst-pris2"}],[174129219,{"idx":67,"name":"prec-veger-leg","tpage_name":"loutro-pris2"}],[194052099,{"idx":3,"name":"marauder-gun-blade","tpage_name":"deschase-pris"}],[171769962,{"idx":106,"name":"dp-bipedal-finger-plate-01","tpage_name":"templea-vis-pris"}],[189530132,{"idx":20,"name":"des-pole-01","tpage_name":"desrally-pris"}],[194510852,{"idx":4,"name":"jinx-belt","tpage_name":"gridcst-pris2"}],[174129220,{"idx":68,"name":"prec-veger-mouth","tpage_name":"loutro-pris2"}],[194052100,{"idx":4,"name":"marauder-gun-metal","tpage_name":"deschase-pris"}],[171769963,{"idx":107,"name":"dp-bipedal-nose-01","tpage_name":"templea-vis-pris"}],[174129221,{"idx":69,"name":"prec-veger-neck","tpage_name":"loutro-pris2"}],[194052101,{"idx":5,"name":"marauder-gun-part","tpage_name":"deschase-pris"}],[192938024,{"idx":40,"name":"precur-small-plate-edge","tpage_name":"lprecurc-vis-tfrag"}],[171769964,{"idx":108,"name":"dp-bipedal-power-hose","tpage_name":"templea-vis-pris"}],[174129222,{"idx":70,"name":"prec-veger-newface","tpage_name":"loutro-pris2"}],[194052102,{"idx":6,"name":"marauder-gun-tip","tpage_name":"deschase-pris"}],[171769965,{"idx":109,"name":"dp-bipedal-skin-bulge-01","tpage_name":"templea-vis-pris"}],[174129223,{"idx":71,"name":"prec-veger-nose","tpage_name":"loutro-pris2"}],[194052103,{"idx":7,"name":"marauder-hand-blue","tpage_name":"deschase-pris"}],[174129224,{"idx":72,"name":"prec-veger-orange","tpage_name":"loutro-pris2"}],[194052104,{"idx":8,"name":"marauder-leather-brnstrap","tpage_name":"deschase-pris"}],[171769967,{"idx":111,"name":"dp-bipedal-skin-plate-01","tpage_name":"templea-vis-pris"}],[174129225,{"idx":73,"name":"prec-veger-sleeve","tpage_name":"loutro-pris2"}],[194052105,{"idx":9,"name":"marauder-leather-brown","tpage_name":"deschase-pris"}],[171769968,{"idx":112,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"templea-vis-pris"}],[174129226,{"idx":74,"name":"prec-veger-spat","tpage_name":"loutro-pris2"}],[194052106,{"idx":10,"name":"marauder-leather-buckle","tpage_name":"deschase-pris"}],[192938029,{"idx":45,"name":"lt-eco-vent-blue-01","tpage_name":"lprecurc-vis-tfrag"}],[171769969,{"idx":113,"name":"dp-bipedal-skin-ribs-01","tpage_name":"templea-vis-pris"}],[171638785,{"idx":1,"name":"comb-pipe2","tpage_name":"templed-vis-tfrag"}],[174129227,{"idx":75,"name":"prec-veger-vest","tpage_name":"loutro-pris2"}],[194052107,{"idx":11,"name":"marauder-leather-handle","tpage_name":"deschase-pris"}],[192938030,{"idx":46,"name":"lt-eco-vent-side-01","tpage_name":"lprecurc-vis-tfrag"}],[171769970,{"idx":114,"name":"dp-bipedal-spine-01","tpage_name":"templea-vis-pris"}],[174129228,{"idx":76,"name":"veger-coatclips","tpage_name":"loutro-pris2"}],[194052108,{"idx":12,"name":"marauder-leather-part","tpage_name":"deschase-pris"}],[171769971,{"idx":115,"name":"dp-bipedal-toe-01","tpage_name":"templea-vis-pris"}],[171638787,{"idx":3,"name":"comb-crct-medium","tpage_name":"templed-vis-tfrag"}],[174129229,{"idx":77,"name":"veger-hair","tpage_name":"loutro-pris2"}],[194052109,{"idx":13,"name":"marauder-leather-strap","tpage_name":"deschase-pris"}],[171638788,{"idx":4,"name":"comb-temp-glass","tpage_name":"templed-vis-tfrag"}],[174129230,{"idx":78,"name":"veger-scarf","tpage_name":"loutro-pris2"}],[194052110,{"idx":14,"name":"marauder-metal-mask","tpage_name":"deschase-pris"}],[189005909,{"idx":85,"name":"spydroid-light","tpage_name":"factoryd-vis-pris"}],[189005910,{"idx":86,"name":"spydroid-light-small","tpage_name":"factoryd-vis-pris"}],[189005912,{"idx":88,"name":"spydroid-red","tpage_name":"factoryd-vis-pris"}],[189005913,{"idx":89,"name":"squid-bulb-sm","tpage_name":"factoryd-vis-pris"}],[189005918,{"idx":94,"name":"widow-pod-gun-metal","tpage_name":"factoryd-vis-pris"}],[189005919,{"idx":95,"name":"wire-metal","tpage_name":"factoryd-vis-pris"}],[189005921,{"idx":97,"name":"common-black","tpage_name":"factoryd-vis-pris"}],[189005922,{"idx":98,"name":"missle-bot-eye-01","tpage_name":"factoryd-vis-pris"}],[189005923,{"idx":99,"name":"missle-bot-gear-01","tpage_name":"factoryd-vis-pris"}],[189005924,{"idx":100,"name":"missle-bot-gear-02","tpage_name":"factoryd-vis-pris"}],[189005925,{"idx":101,"name":"missle-bot-gear-03","tpage_name":"factoryd-vis-pris"}],[189005926,{"idx":102,"name":"missle-bot-generator-01","tpage_name":"factoryd-vis-pris"}],[221380608,{"idx":0,"name":"des-bush-timer-chase-trail","tpage_name":"lbbtcha1-water"}],[189005928,{"idx":104,"name":"missle-bot-generator-03","tpage_name":"factoryd-vis-pris"}],[174325811,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"ldesgcst-pris"}],[188022791,{"idx":7,"name":"daxterbolt","tpage_name":"lvincst-pris"}],[189005929,{"idx":105,"name":"missle-bot-hull-01","tpage_name":"factoryd-vis-pris"}],[174325812,{"idx":52,"name":"jakchires-teeth","tpage_name":"ldesgcst-pris"}],[188022792,{"idx":8,"name":"daxterear","tpage_name":"lvincst-pris"}],[170721381,{"idx":101,"name":"city-lowres-mhcity-tower-01","tpage_name":"lcitysml-tfrag"}],[184418361,{"idx":57,"name":"rub-metal-flatpipe-01","tpage_name":"stadiuma-vis-tfrag"}],[190644261,{"idx":37,"name":"veger-whitecloth","tpage_name":"templee-pris2"}],[170721382,{"idx":102,"name":"city-lowres-mhcity-tower-02","tpage_name":"lcitysml-tfrag"}],[184418362,{"idx":58,"name":"rub-metal-pipeside-01","tpage_name":"stadiuma-vis-tfrag"}],[190644262,{"idx":38,"name":"seem-arm","tpage_name":"templee-pris2"}],[170721383,{"idx":103,"name":"t-palshaft-panl-01","tpage_name":"lcitysml-tfrag"}],[184418363,{"idx":59,"name":"rub-wall-gen-06","tpage_name":"stadiuma-vis-tfrag"}],[190644263,{"idx":39,"name":"seem-bootbottom","tpage_name":"templee-pris2"}],[170721384,{"idx":104,"name":"t-palshaft-pil-01","tpage_name":"lcitysml-tfrag"}],[184418364,{"idx":60,"name":"rub-metal-01","tpage_name":"stadiuma-vis-tfrag"}],[203096064,{"idx":0,"name":"bam-eyelight","tpage_name":"lctyass-pris"}],[190644264,{"idx":40,"name":"seem-bootleg","tpage_name":"templee-pris2"}],[174391299,{"idx":3,"name":"sig-belt","tpage_name":"ldesgcst-pris2"}],[170721385,{"idx":105,"name":"ctywide-ox-met-01","tpage_name":"lcitysml-tfrag"}],[184418365,{"idx":61,"name":"rub-wall-gen-04","tpage_name":"stadiuma-vis-tfrag"}],[203096065,{"idx":1,"name":"bombot-darkgrey-01","tpage_name":"lctyass-pris"}],[190644265,{"idx":41,"name":"seem-bootlower","tpage_name":"templee-pris2"}],[174391300,{"idx":4,"name":"sig-eye","tpage_name":"ldesgcst-pris2"}],[170721386,{"idx":106,"name":"palcab-lowres-background-grass-to-desert-01","tpage_name":"lcitysml-tfrag"}],[184418366,{"idx":62,"name":"fora-cliff-face-far","tpage_name":"stadiuma-vis-tfrag"}],[203096066,{"idx":2,"name":"bombot-darkgrey-02","tpage_name":"lctyass-pris"}],[190644266,{"idx":42,"name":"seem-bootmet","tpage_name":"templee-pris2"}],[174391301,{"idx":5,"name":"sig-eyelid","tpage_name":"ldesgcst-pris2"}],[170721387,{"idx":107,"name":"citywide-consite-steel","tpage_name":"lcitysml-tfrag"}],[184418367,{"idx":63,"name":"rub-pal-metal","tpage_name":"stadiuma-vis-tfrag"}],[203096067,{"idx":3,"name":"bombot-gearsides","tpage_name":"lctyass-pris"}],[190644267,{"idx":43,"name":"seem-boottoe","tpage_name":"templee-pris2"}],[223805511,{"idx":71,"name":"krew-shirtleather","tpage_name":"museum3b-pris"}],[174391302,{"idx":6,"name":"sig-faceleft","tpage_name":"ldesgcst-pris2"}],[170721388,{"idx":108,"name":"tcab-blue-ring-01","tpage_name":"lcitysml-tfrag"}],[184418368,{"idx":64,"name":"citywide-wall-grey","tpage_name":"stadiuma-vis-tfrag"}],[203096068,{"idx":4,"name":"bombot-greybarrelend","tpage_name":"lctyass-pris"}],[190644268,{"idx":44,"name":"seem-ear","tpage_name":"templee-pris2"}],[223805512,{"idx":72,"name":"krew-vehicle","tpage_name":"museum3b-pris"}],[174391303,{"idx":7,"name":"sig-facert","tpage_name":"ldesgcst-pris2"}],[170721390,{"idx":110,"name":"palcab-swingp-trim","tpage_name":"lcitysml-tfrag"}],[184418370,{"idx":66,"name":"citywide-wall-mainmetal","tpage_name":"stadiuma-vis-tfrag"}],[203096070,{"idx":6,"name":"bombot-guards","tpage_name":"lctyass-pris"}],[190644270,{"idx":46,"name":"seem-eyelid","tpage_name":"templee-pris2"}],[223805514,{"idx":74,"name":"krewleg","tpage_name":"museum3b-pris"}],[174391305,{"idx":9,"name":"sig-gem-01","tpage_name":"ldesgcst-pris2"}],[176881665,{"idx":1,"name":"ecocreature-teeth","tpage_name":"towera-water"}],[117637274,{"idx":154,"name":"wstlander-04-gun","tpage_name":"destrack-pris"}],[170721391,{"idx":111,"name":"palcab-lowres-background-mounatin-window","tpage_name":"lcitysml-tfrag"}],[184418371,{"idx":67,"name":"citywide-wall-greydrain","tpage_name":"stadiuma-vis-tfrag"}],[203096071,{"idx":7,"name":"bombot-guntop","tpage_name":"lctyass-pris"}],[190644271,{"idx":47,"name":"seem-face","tpage_name":"templee-pris2"}],[223805515,{"idx":75,"name":"kid-blackstrap","tpage_name":"museum3b-pris"}],[170721392,{"idx":112,"name":"tcab-beam01-lores","tpage_name":"lcitysml-tfrag"}],[184418372,{"idx":68,"name":"rub-rubble-01","tpage_name":"stadiuma-vis-tfrag"}],[203096072,{"idx":8,"name":"bombot-insidegun","tpage_name":"lctyass-pris"}],[190644272,{"idx":48,"name":"seem-finger","tpage_name":"templee-pris2"}],[223805516,{"idx":76,"name":"kid-brownstrap","tpage_name":"museum3b-pris"}],[170721393,{"idx":113,"name":"palcab-lowres-background-shoreline-01","tpage_name":"lcitysml-tfrag"}],[184418373,{"idx":69,"name":"stdm-lg-stone-trim-01","tpage_name":"stadiuma-vis-tfrag"}],[203096073,{"idx":9,"name":"bombot-joint","tpage_name":"lctyass-pris"}],[190644273,{"idx":49,"name":"seem-hand","tpage_name":"templee-pris2"}],[223805517,{"idx":77,"name":"kid-clips","tpage_name":"museum3b-pris"}],[174391308,{"idx":12,"name":"sig-gun-01","tpage_name":"ldesgcst-pris2"}],[170721394,{"idx":114,"name":"palcab-lowres-background-mountains","tpage_name":"lcitysml-tfrag"}],[184418374,{"idx":70,"name":"rub-statue-stone-01","tpage_name":"stadiuma-vis-tfrag"}],[203096074,{"idx":10,"name":"bombot-lens","tpage_name":"lctyass-pris"}],[190644274,{"idx":50,"name":"seem-headgearback","tpage_name":"templee-pris2"}],[223805518,{"idx":78,"name":"kid-eye","tpage_name":"museum3b-pris"}],[174391309,{"idx":13,"name":"sig-gun-02","tpage_name":"ldesgcst-pris2"}],[170721395,{"idx":115,"name":"palcab-lowres-background-peaks-01","tpage_name":"lcitysml-tfrag"}],[184418375,{"idx":71,"name":"city-lowres-mhcity-tower-01","tpage_name":"stadiuma-vis-tfrag"}],[203096075,{"idx":11,"name":"bombot-post01","tpage_name":"lctyass-pris"}],[190644275,{"idx":51,"name":"seem-headpiecetop","tpage_name":"templee-pris2"}],[223805519,{"idx":79,"name":"kid-eyelid","tpage_name":"museum3b-pris"}],[174391310,{"idx":14,"name":"sig-gun-03","tpage_name":"ldesgcst-pris2"}],[170721396,{"idx":116,"name":"palcab-lowres-background-peaks-02","tpage_name":"lcitysml-tfrag"}],[184418376,{"idx":72,"name":"rub-cement-pillars","tpage_name":"stadiuma-vis-tfrag"}],[203096076,{"idx":12,"name":"bombot-rail01","tpage_name":"lctyass-pris"}],[190644276,{"idx":52,"name":"seem-pipeend","tpage_name":"templee-pris2"}],[223805520,{"idx":80,"name":"kid-face","tpage_name":"museum3b-pris"}],[170721398,{"idx":118,"name":"palcab-lowres-background-desert-to-shore","tpage_name":"lcitysml-tfrag"}],[184418378,{"idx":74,"name":"rub-copper","tpage_name":"stadiuma-vis-tfrag"}],[203096078,{"idx":14,"name":"bombot-rimgrey","tpage_name":"lctyass-pris"}],[190644278,{"idx":54,"name":"seem-pipes-02","tpage_name":"templee-pris2"}],[223805522,{"idx":82,"name":"kid-foot","tpage_name":"museum3b-pris"}],[170721399,{"idx":119,"name":"palcab-lowres-background-crater-01","tpage_name":"lcitysml-tfrag"}],[203096079,{"idx":15,"name":"bombot-roundend","tpage_name":"lctyass-pris"}],[190644279,{"idx":55,"name":"seem-precmetal-chestplate-01","tpage_name":"templee-pris2"}],[223805523,{"idx":83,"name":"kid-hair","tpage_name":"museum3b-pris"}],[174391314,{"idx":18,"name":"sig-horn","tpage_name":"ldesgcst-pris2"}],[223805524,{"idx":84,"name":"kid-helmet","tpage_name":"museum3b-pris"}],[223805525,{"idx":85,"name":"kid-medallion","tpage_name":"museum3b-pris"}],[223805526,{"idx":86,"name":"kid-overalls","tpage_name":"museum3b-pris"}],[174391317,{"idx":21,"name":"sig-metal-dirty","tpage_name":"ldesgcst-pris2"}],[223805527,{"idx":87,"name":"kid-sash","tpage_name":"museum3b-pris"}],[174391322,{"idx":26,"name":"sig-skirts","tpage_name":"ldesgcst-pris2"}],[174391323,{"idx":27,"name":"sig-skirts-02","tpage_name":"ldesgcst-pris2"}],[174391325,{"idx":29,"name":"sig-undergarments","tpage_name":"ldesgcst-pris2"}],[174391326,{"idx":30,"name":"vin-teeth-01","tpage_name":"ldesgcst-pris2"}],[175374337,{"idx":1,"name":"hud-small-vehicle-health-bar-01","tpage_name":"comba-minimap"}],[175767578,{"idx":26,"name":"prec-surfer-sash","tpage_name":"loutro-pris"}],[176160769,{"idx":1,"name":"holograph-env-noise","tpage_name":"templea-warp"}],[220201120,{"idx":160,"name":"keira-largewraps","tpage_name":"museum3-pris"}],[176160770,{"idx":2,"name":"holograph-env-rim","tpage_name":"templea-warp"}],[220201121,{"idx":161,"name":"keira-lens-large","tpage_name":"museum3-pris"}],[176160771,{"idx":3,"name":"holograph-env-scan","tpage_name":"templea-warp"}],[220201122,{"idx":162,"name":"keira-maskbolt","tpage_name":"museum3-pris"}],[195100690,{"idx":18,"name":"kg-fl-tret-motor","tpage_name":"lblowtkg-pris"}],[200081410,{"idx":2,"name":"grunt-eye-01","tpage_name":"volcanoa-vis-pris2"}],[170197090,{"idx":98,"name":"tess-shirt-128","tpage_name":"outrocst-pris2"}],[177471500,{"idx":12,"name":"rail-pipe-01","tpage_name":"railb2-tfrag"}],[194052122,{"idx":26,"name":"intcept-base-patern02","tpage_name":"deschase-pris"}],[195100691,{"idx":19,"name":"kg-fl-tret-post01","tpage_name":"lblowtkg-pris"}],[200081411,{"idx":3,"name":"grunt-gem-01","tpage_name":"volcanoa-vis-pris2"}],[170197091,{"idx":99,"name":"tess-shirtstraps","tpage_name":"outrocst-pris2"}],[177471501,{"idx":13,"name":"rail-pipe-03","tpage_name":"railb2-tfrag"}],[194052123,{"idx":27,"name":"intcept-gun01","tpage_name":"deschase-pris"}],[177471508,{"idx":20,"name":"comb-yell-light","tpage_name":"railb2-tfrag"}],[177733635,{"idx":3,"name":"terraformer-cpitwindows-01","tpage_name":"precurd-vis-water"}],[177733636,{"idx":4,"name":"terraformer-cpitwindows-02","tpage_name":"precurd-vis-water"}],[179961885,{"idx":29,"name":"environment-oldmetal","tpage_name":"loutro2-pris2"}],[179961889,{"idx":33,"name":"sig-faceleft","tpage_name":"loutro2-pris2"}],[179961892,{"idx":36,"name":"sig-gem-01","tpage_name":"loutro2-pris2"}],[179961896,{"idx":40,"name":"sig-gun-02","tpage_name":"loutro2-pris2"}],[179961897,{"idx":41,"name":"sig-gun-03","tpage_name":"loutro2-pris2"}],[179961898,{"idx":42,"name":"sig-gun-04","tpage_name":"loutro2-pris2"}],[216924160,{"idx":0,"name":"keira-mask","tpage_name":"museum-water"}],[179961913,{"idx":57,"name":"vin-teeth-01","tpage_name":"loutro2-pris2"}],[181010432,{"idx":0,"name":"bam-eyelight","tpage_name":"desbcst-pris"}],[181010433,{"idx":1,"name":"bam-hairhilite","tpage_name":"desbcst-pris"}],[181010434,{"idx":2,"name":"daxter-eyelid","tpage_name":"desbcst-pris"}],[181010435,{"idx":3,"name":"daxter-furhilite","tpage_name":"desbcst-pris"}],[181010436,{"idx":4,"name":"daxter-orange","tpage_name":"desbcst-pris"}],[181010437,{"idx":5,"name":"daxterarm","tpage_name":"desbcst-pris"}],[181010438,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"desbcst-pris"}],[181010439,{"idx":7,"name":"daxterbolt","tpage_name":"desbcst-pris"}],[181010440,{"idx":8,"name":"daxterear","tpage_name":"desbcst-pris"}],[129368069,{"idx":5,"name":"rub-greyblue-plain-lowres","tpage_name":"stadiumb-vis-shrub"}],[181010441,{"idx":9,"name":"daxterfinger","tpage_name":"desbcst-pris"}],[129368070,{"idx":6,"name":"rub-beam-gen","tpage_name":"stadiumb-vis-shrub"}],[181010442,{"idx":10,"name":"daxterfoot","tpage_name":"desbcst-pris"}],[129368071,{"idx":7,"name":"rub-wall-small-grill","tpage_name":"stadiumb-vis-shrub"}],[181010443,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"desbcst-pris"}],[181010444,{"idx":12,"name":"daxtergoggles","tpage_name":"desbcst-pris"}],[216072193,{"idx":1,"name":"ashelin-bolts","tpage_name":"museum-pris2"}],[181010445,{"idx":13,"name":"daxterheadwidenew","tpage_name":"desbcst-pris"}],[216072194,{"idx":2,"name":"ashelin-boottop","tpage_name":"museum-pris2"}],[181010446,{"idx":14,"name":"daxterhelmetplain","tpage_name":"desbcst-pris"}],[216072195,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"museum-pris2"}],[164429824,{"idx":0,"name":"rub-greyblue-plain-lowres","tpage_name":"rubblea2-vis-shrub"}],[181010447,{"idx":15,"name":"daxterlense","tpage_name":"desbcst-pris"}],[164429825,{"idx":1,"name":"rub-beam-gen","tpage_name":"rubblea2-vis-shrub"}],[181010448,{"idx":16,"name":"daxternose","tpage_name":"desbcst-pris"}],[164429826,{"idx":2,"name":"rub-wall-small-grill","tpage_name":"rubblea2-vis-shrub"}],[181010449,{"idx":17,"name":"daxterteeth","tpage_name":"desbcst-pris"}],[216072198,{"idx":6,"name":"ashelin-chest","tpage_name":"museum-pris2"}],[164429827,{"idx":3,"name":"rub-met-strp-close","tpage_name":"rubblea2-vis-shrub"}],[181010450,{"idx":18,"name":"daxtertuft","tpage_name":"desbcst-pris"}],[216072199,{"idx":7,"name":"ashelin-eye","tpage_name":"museum-pris2"}],[164429828,{"idx":4,"name":"rub-shrub-grass","tpage_name":"rubblea2-vis-shrub"}],[181010451,{"idx":19,"name":"environment-oldmetal","tpage_name":"desbcst-pris"}],[216072200,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"museum-pris2"}],[164429829,{"idx":5,"name":"rub-crater-shards-01","tpage_name":"rubblea2-vis-shrub"}],[181010452,{"idx":20,"name":"jakc-armor","tpage_name":"desbcst-pris"}],[216072201,{"idx":9,"name":"ashelin-eyelid","tpage_name":"museum-pris2"}],[164429830,{"idx":6,"name":"rub-ground-01-small","tpage_name":"rubblea2-vis-shrub"}],[181010453,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"desbcst-pris"}],[216072202,{"idx":10,"name":"ashelin-face","tpage_name":"museum-pris2"}],[181010454,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"desbcst-pris"}],[216072203,{"idx":11,"name":"ashelin-glove","tpage_name":"museum-pris2"}],[181010455,{"idx":23,"name":"jakc-lens","tpage_name":"desbcst-pris"}],[216072204,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"museum-pris2"}],[181010456,{"idx":24,"name":"jakc-scarf","tpage_name":"desbcst-pris"}],[216072205,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"museum-pris2"}],[181010457,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"desbcst-pris"}],[216072206,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"museum-pris2"}],[164429835,{"idx":11,"name":"rub-shrub-cattail","tpage_name":"rubblea2-vis-shrub"}],[181010458,{"idx":26,"name":"jakc-skirt","tpage_name":"desbcst-pris"}],[216072207,{"idx":15,"name":"ashelin-gunholster","tpage_name":"museum-pris2"}],[164429836,{"idx":12,"name":"rub-overlay-bullethole-c","tpage_name":"rubblea2-vis-shrub"}],[181010459,{"idx":27,"name":"jakc-waistband2","tpage_name":"desbcst-pris"}],[216072208,{"idx":16,"name":"ashelin-hair","tpage_name":"museum-pris2"}],[164429837,{"idx":13,"name":"rub-stain-01","tpage_name":"rubblea2-vis-shrub"}],[181010460,{"idx":28,"name":"jakc-wraps","tpage_name":"desbcst-pris"}],[216072209,{"idx":17,"name":"ashelin-handle-01","tpage_name":"museum-pris2"}],[181010461,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"desbcst-pris"}],[216072210,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"museum-pris2"}],[181010462,{"idx":30,"name":"jakchires-arm","tpage_name":"desbcst-pris"}],[216072211,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"museum-pris2"}],[181010463,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"desbcst-pris"}],[216072212,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"museum-pris2"}],[181010466,{"idx":34,"name":"jakchires-chestplate","tpage_name":"desbcst-pris"}],[216072215,{"idx":23,"name":"ashelin-shells","tpage_name":"museum-pris2"}],[181010467,{"idx":35,"name":"jakchires-clips","tpage_name":"desbcst-pris"}],[216072216,{"idx":24,"name":"ashelin-shield","tpage_name":"museum-pris2"}],[181010477,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"desbcst-pris"}],[216072226,{"idx":34,"name":"torn-armor","tpage_name":"museum-pris2"}],[181010481,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"desbcst-pris"}],[216072230,{"idx":38,"name":"torn-ear","tpage_name":"museum-pris2"}],[181010482,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"desbcst-pris"}],[216072231,{"idx":39,"name":"torn-eye","tpage_name":"museum-pris2"}],[216072238,{"idx":46,"name":"torn-gunbarrel-02","tpage_name":"museum-pris2"}],[198443013,{"idx":5,"name":"des-totem-stone-01","tpage_name":"hangb-vis-tfrag"}],[181010493,{"idx":61,"name":"errolcyber-bighand-01","tpage_name":"desbcst-pris"}],[216072242,{"idx":50,"name":"torn-legshield","tpage_name":"museum-pris2"}],[181010497,{"idx":65,"name":"errolcyber-bluewrap","tpage_name":"desbcst-pris"}],[216072246,{"idx":54,"name":"torn-scarf","tpage_name":"museum-pris2"}],[198443018,{"idx":10,"name":"des-bridge-plank","tpage_name":"hangb-vis-tfrag"}],[181010498,{"idx":66,"name":"errolcyber-chestplate","tpage_name":"desbcst-pris"}],[216072247,{"idx":55,"name":"torn-shoe","tpage_name":"museum-pris2"}],[198443019,{"idx":11,"name":"des-rock-01","tpage_name":"hangb-vis-tfrag"}],[181010499,{"idx":67,"name":"errolcyber-dirtymetal","tpage_name":"desbcst-pris"}],[216072248,{"idx":56,"name":"torn-shoe-02","tpage_name":"museum-pris2"}],[181010500,{"idx":68,"name":"errolcyber-earcup","tpage_name":"desbcst-pris"}],[216072249,{"idx":57,"name":"torn-teeth-01","tpage_name":"museum-pris2"}],[198443030,{"idx":22,"name":"des-corral-metal-01","tpage_name":"hangb-vis-tfrag"}],[181010510,{"idx":78,"name":"errolcyber-insidewires","tpage_name":"desbcst-pris"}],[216072259,{"idx":67,"name":"tess-face","tpage_name":"museum-pris2"}],[181010511,{"idx":79,"name":"errolcyber-jointpipe","tpage_name":"desbcst-pris"}],[216072260,{"idx":68,"name":"tess-finger","tpage_name":"museum-pris2"}],[216072261,{"idx":69,"name":"tess-glove","tpage_name":"museum-pris2"}],[216072262,{"idx":70,"name":"tess-hair","tpage_name":"museum-pris2"}],[198443034,{"idx":26,"name":"wascity-outerwall-metal-d","tpage_name":"hangb-vis-tfrag"}],[181010514,{"idx":82,"name":"errolcyber-pipes-01","tpage_name":"desbcst-pris"}],[216072263,{"idx":71,"name":"tess-hairband","tpage_name":"museum-pris2"}],[198443035,{"idx":27,"name":"wascity-base","tpage_name":"hangb-vis-tfrag"}],[181010515,{"idx":83,"name":"errolcyber-pipes-02","tpage_name":"desbcst-pris"}],[216072264,{"idx":72,"name":"tess-jeans","tpage_name":"museum-pris2"}],[198443036,{"idx":28,"name":"wascitya-airlock-metal","tpage_name":"hangb-vis-tfrag"}],[181010516,{"idx":84,"name":"errolcyber-pipes-03","tpage_name":"desbcst-pris"}],[216072265,{"idx":73,"name":"tess-jeansback","tpage_name":"museum-pris2"}],[198443037,{"idx":29,"name":"common-black","tpage_name":"hangb-vis-tfrag"}],[181010517,{"idx":85,"name":"errolcyber-redmetal-01","tpage_name":"desbcst-pris"}],[216072266,{"idx":74,"name":"tess-jeanscuff","tpage_name":"museum-pris2"}],[198443038,{"idx":30,"name":"wascity-outerwall-metal-b","tpage_name":"hangb-vis-tfrag"}],[181010518,{"idx":86,"name":"errolcyber-redmetal-02","tpage_name":"desbcst-pris"}],[216072267,{"idx":75,"name":"tess-lowerboot","tpage_name":"museum-pris2"}],[198443039,{"idx":31,"name":"des-marauder-bridge-floor","tpage_name":"hangb-vis-tfrag"}],[181010519,{"idx":87,"name":"errolcyber-redmetal-03","tpage_name":"desbcst-pris"}],[216072268,{"idx":76,"name":"tess-scarf","tpage_name":"museum-pris2"}],[216072269,{"idx":77,"name":"tess-shirt-128","tpage_name":"museum-pris2"}],[198443040,{"idx":32,"name":"des-cave-floor-01","tpage_name":"hangb-vis-tfrag"}],[181010520,{"idx":88,"name":"errolcyber-roboeye","tpage_name":"desbcst-pris"}],[208404480,{"idx":0,"name":"errolcyber-lens","tpage_name":"deserrol-water"}],[181010521,{"idx":89,"name":"errolcyber-rubberpipe","tpage_name":"desbcst-pris"}],[216072270,{"idx":78,"name":"tess-shirtstraps","tpage_name":"museum-pris2"}],[216072271,{"idx":79,"name":"tess-shoebottom","tpage_name":"museum-pris2"}],[216072272,{"idx":80,"name":"tess-shoetop","tpage_name":"museum-pris2"}],[216072273,{"idx":81,"name":"tess-sleeve","tpage_name":"museum-pris2"}],[216072274,{"idx":82,"name":"tess-teeth","tpage_name":"museum-pris2"}],[216072275,{"idx":83,"name":"tess-underwear","tpage_name":"museum-pris2"}],[216072276,{"idx":84,"name":"tess-upperboot","tpage_name":"museum-pris2"}],[181010527,{"idx":95,"name":"desw-tubes-segment-02","tpage_name":"desbcst-pris"}],[198443047,{"idx":39,"name":"des-wascity-cement-road","tpage_name":"hangb-vis-tfrag"}],[216072277,{"idx":85,"name":"samos-arm","tpage_name":"museum-pris2"}],[181010528,{"idx":96,"name":"desw-tubes-small-01","tpage_name":"desbcst-pris"}],[198443048,{"idx":40,"name":"des-low-sand","tpage_name":"hangb-vis-tfrag"}],[216072278,{"idx":86,"name":"samos-diaper","tpage_name":"museum-pris2"}],[181010529,{"idx":97,"name":"dm-urchin-cables-01","tpage_name":"desbcst-pris"}],[198443049,{"idx":41,"name":"des-low-tree-bark","tpage_name":"hangb-vis-tfrag"}],[216072279,{"idx":87,"name":"samos-ear","tpage_name":"museum-pris2"}],[181010530,{"idx":98,"name":"dm-urchin-finger-01","tpage_name":"desbcst-pris"}],[198443050,{"idx":42,"name":"des-low-palm-leaf-01","tpage_name":"hangb-vis-tfrag"}],[216072281,{"idx":89,"name":"samos-eyelid","tpage_name":"museum-pris2"}],[181010532,{"idx":100,"name":"environment-darkprec","tpage_name":"desbcst-pris"}],[198443052,{"idx":44,"name":"des-low-metal-bridge","tpage_name":"hangb-vis-tfrag"}],[181075968,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"desbcst-pris2"}],[181075969,{"idx":1,"name":"ashelin-bolts","tpage_name":"desbcst-pris2"}],[181075970,{"idx":2,"name":"ashelin-boottop","tpage_name":"desbcst-pris2"}],[181075971,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"desbcst-pris2"}],[181075972,{"idx":4,"name":"ashelin-cglogo","tpage_name":"desbcst-pris2"}],[181075973,{"idx":5,"name":"ashelin-cgrank","tpage_name":"desbcst-pris2"}],[181075974,{"idx":6,"name":"ashelin-chest","tpage_name":"desbcst-pris2"}],[181075975,{"idx":7,"name":"ashelin-eye","tpage_name":"desbcst-pris2"}],[181075976,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"desbcst-pris2"}],[181075977,{"idx":9,"name":"ashelin-eyelid","tpage_name":"desbcst-pris2"}],[181075978,{"idx":10,"name":"ashelin-face","tpage_name":"desbcst-pris2"}],[181075979,{"idx":11,"name":"ashelin-glove","tpage_name":"desbcst-pris2"}],[181075980,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"desbcst-pris2"}],[181075981,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"desbcst-pris2"}],[181075982,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"desbcst-pris2"}],[181075983,{"idx":15,"name":"ashelin-gunholster","tpage_name":"desbcst-pris2"}],[164495361,{"idx":1,"name":"rub-dirt-a","tpage_name":"rubblea2-vis-water"}],[181075984,{"idx":16,"name":"ashelin-hair","tpage_name":"desbcst-pris2"}],[164495362,{"idx":2,"name":"rub-watera2","tpage_name":"rubblea2-vis-water"}],[181075985,{"idx":17,"name":"ashelin-handle-01","tpage_name":"desbcst-pris2"}],[164495363,{"idx":3,"name":"rub-water-desta2","tpage_name":"rubblea2-vis-water"}],[181075986,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"desbcst-pris2"}],[181075987,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"desbcst-pris2"}],[164495365,{"idx":5,"name":"rub-water-wave-01-dest","tpage_name":"rubblea2-vis-water"}],[181075988,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"desbcst-pris2"}],[187301888,{"idx":0,"name":"racegate","tpage_name":"lbbring2-sprite"}],[48955397,{"idx":5,"name":"sewer-metal-01","tpage_name":"sewd-vis-shrub"}],[181075989,{"idx":21,"name":"ashelin-pantstop","tpage_name":"desbcst-pris2"}],[181075990,{"idx":22,"name":"ashelin-redtop","tpage_name":"desbcst-pris2"}],[181010489,{"idx":57,"name":"deswalk-break-03","tpage_name":"desbcst-pris"}],[198443009,{"idx":1,"name":"des-mount-01","tpage_name":"hangb-vis-tfrag"}],[220201223,{"idx":263,"name":"cguardred-shouldershield","tpage_name":"museum3-pris"}],[181075991,{"idx":23,"name":"ashelin-shells","tpage_name":"desbcst-pris2"}],[220201224,{"idx":264,"name":"cguardred-sleeve","tpage_name":"museum3-pris"}],[181075992,{"idx":24,"name":"ashelin-shield","tpage_name":"desbcst-pris2"}],[181075993,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"desbcst-pris2"}],[181075994,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"desbcst-pris2"}],[181075995,{"idx":27,"name":"ashelin-teeth","tpage_name":"desbcst-pris2"}],[181075996,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"desbcst-pris2"}],[181075997,{"idx":29,"name":"bam-eyelight","tpage_name":"desbcst-pris2"}],[181075998,{"idx":30,"name":"bam-hairhilite","tpage_name":"desbcst-pris2"}],[181075999,{"idx":31,"name":"charHOLD","tpage_name":"desbcst-pris2"}],[181076000,{"idx":32,"name":"environment-oldmetal","tpage_name":"desbcst-pris2"}],[181076001,{"idx":33,"name":"sig-belt","tpage_name":"desbcst-pris2"}],[181076002,{"idx":34,"name":"sig-eye","tpage_name":"desbcst-pris2"}],[181076003,{"idx":35,"name":"sig-eyelid","tpage_name":"desbcst-pris2"}],[181076004,{"idx":36,"name":"sig-faceleft","tpage_name":"desbcst-pris2"}],[181076005,{"idx":37,"name":"sig-facert","tpage_name":"desbcst-pris2"}],[181076006,{"idx":38,"name":"sig-flask","tpage_name":"desbcst-pris2"}],[181076007,{"idx":39,"name":"sig-gem-01","tpage_name":"desbcst-pris2"}],[181076008,{"idx":40,"name":"sig-glove","tpage_name":"desbcst-pris2"}],[193527808,{"idx":0,"name":"bam-eyelight","tpage_name":"desboss2-pris"}],[222888042,{"idx":106,"name":"city-lowres-mhcity-tower-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076012,{"idx":44,"name":"sig-gun-03","tpage_name":"desbcst-pris2"}],[193527812,{"idx":4,"name":"daxter-orange","tpage_name":"desboss2-pris"}],[222888046,{"idx":110,"name":"palcab-lowres-background-mountains","tpage_name":"lfacctyb-vis-tfrag"}],[181076016,{"idx":48,"name":"sig-horn","tpage_name":"desbcst-pris2"}],[193527816,{"idx":8,"name":"daxterear","tpage_name":"desboss2-pris"}],[222888050,{"idx":114,"name":"palcab-lowres-background-hilltops-01","tpage_name":"lfacctyb-vis-tfrag"}],[218038272,{"idx":0,"name":"time-bubble","tpage_name":"lbbtcha3-sprite"}],[181076018,{"idx":50,"name":"sig-metal-01","tpage_name":"desbcst-pris2"}],[193527818,{"idx":10,"name":"daxterfoot","tpage_name":"desboss2-pris"}],[222888052,{"idx":116,"name":"city-lowres-mhcity-ground-01","tpage_name":"lfacctyb-vis-tfrag"}],[218038273,{"idx":1,"name":"time-bubble-clock","tpage_name":"lbbtcha3-sprite"}],[181076019,{"idx":51,"name":"sig-metal-dirty","tpage_name":"desbcst-pris2"}],[193527819,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"desboss2-pris"}],[222888053,{"idx":117,"name":"tcab-beam01-lores","tpage_name":"lfacctyb-vis-tfrag"}],[218038274,{"idx":2,"name":"time-bubble-orbiter","tpage_name":"lbbtcha3-sprite"}],[181076020,{"idx":52,"name":"sig-sac","tpage_name":"desbcst-pris2"}],[193527820,{"idx":12,"name":"daxtergoggles","tpage_name":"desboss2-pris"}],[222888054,{"idx":118,"name":"tcab-blue-ring-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076021,{"idx":53,"name":"sig-shoebottom","tpage_name":"desbcst-pris2"}],[193527821,{"idx":13,"name":"daxterheadwidenew","tpage_name":"desboss2-pris"}],[222888055,{"idx":119,"name":"palcab-lowres-background-peaks-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076022,{"idx":54,"name":"sig-shoetop","tpage_name":"desbcst-pris2"}],[193527822,{"idx":14,"name":"daxterhelmetplain","tpage_name":"desboss2-pris"}],[222888056,{"idx":120,"name":"palcab-lowres-background-shoreline-02","tpage_name":"lfacctyb-vis-tfrag"}],[181010522,{"idx":90,"name":"errolcyber-rubberpipe-light","tpage_name":"desbcst-pris"}],[198443042,{"idx":34,"name":"des-volcano-lava","tpage_name":"hangb-vis-tfrag"}],[181010523,{"idx":91,"name":"errolcyber-spine","tpage_name":"desbcst-pris"}],[198443043,{"idx":35,"name":"des-wascity-outerwall-metal-b","tpage_name":"hangb-vis-tfrag"}],[181010524,{"idx":92,"name":"errolcyber-teeth","tpage_name":"desbcst-pris"}],[198443044,{"idx":36,"name":"des-wascity-outerwall-metal-d","tpage_name":"hangb-vis-tfrag"}],[181010525,{"idx":93,"name":"desw-hardplate-01","tpage_name":"desbcst-pris"}],[198443045,{"idx":37,"name":"des-wascity-palace-siding-01","tpage_name":"hangb-vis-tfrag"}],[181010526,{"idx":94,"name":"desw-hardplate-edge-01","tpage_name":"desbcst-pris"}],[198443046,{"idx":38,"name":"des-wascity-outerwall-rock","tpage_name":"hangb-vis-tfrag"}],[184418318,{"idx":14,"name":"rub-blastdoors","tpage_name":"stadiuma-vis-tfrag"}],[188153858,{"idx":2,"name":"des-sand-grass-01","tpage_name":"desertf-vis-shrub"}],[153092109,{"idx":13,"name":"rail-pipe-01","tpage_name":"railx-tfrag"}],[174391304,{"idx":8,"name":"sig-flask","tpage_name":"ldesgcst-pris2"}],[223805513,{"idx":73,"name":"krew-vehicle2","tpage_name":"museum3b-pris"}],[184418369,{"idx":65,"name":"citywide-wall-grill","tpage_name":"stadiuma-vis-tfrag"}],[190644269,{"idx":45,"name":"seem-eye","tpage_name":"templee-pris2"}],[203096069,{"idx":5,"name":"bombot-greybarrelside","tpage_name":"lctyass-pris"}],[223805521,{"idx":81,"name":"kid-finger","tpage_name":"museum3b-pris"}],[184418377,{"idx":73,"name":"city-lowres-mhcity-tower-02","tpage_name":"stadiuma-vis-tfrag"}],[190644277,{"idx":53,"name":"seem-pipes-01","tpage_name":"templee-pris2"}],[203096077,{"idx":13,"name":"bombot-redplate-01","tpage_name":"lctyass-pris"}],[203096101,{"idx":37,"name":"citn-allleye","tpage_name":"lctyass-pris"}],[203096102,{"idx":38,"name":"citn-allshoebottom","tpage_name":"lctyass-pris"}],[139788301,{"idx":13,"name":"samos-log-01","tpage_name":"lsamos-pris2"}],[137297941,{"idx":21,"name":"torn-metal2","tpage_name":"citycast-pris2"}],[203096103,{"idx":39,"name":"citn-allsuede","tpage_name":"lctyass-pris"}],[139788302,{"idx":14,"name":"samos-log-02","tpage_name":"lsamos-pris2"}],[137297942,{"idx":22,"name":"torn-mouth","tpage_name":"citycast-pris2"}],[203096104,{"idx":40,"name":"widow-bomb","tpage_name":"lctyass-pris"}],[171704367,{"idx":47,"name":"common_sandstone_base01","tpage_name":"templec-vis-tfrag"}],[170459187,{"idx":51,"name":"jakchires-pants","tpage_name":"ljkdxvin-pris"}],[172949548,{"idx":44,"name":"terraformer-footpipes-01","tpage_name":"precurd-vis-pris"}],[170459188,{"idx":52,"name":"jakchires-precarmor-01","tpage_name":"ljkdxvin-pris"}],[203096106,{"idx":42,"name":"widow-bomb-thrust","tpage_name":"lctyass-pris"}],[172949549,{"idx":45,"name":"terraformer-metal-01","tpage_name":"precurd-vis-pris"}],[170459189,{"idx":53,"name":"jakchires-shoebottom","tpage_name":"ljkdxvin-pris"}],[172949550,{"idx":46,"name":"terraformer-metal-02","tpage_name":"precurd-vis-pris"}],[170459190,{"idx":54,"name":"jakchires-shoemetal","tpage_name":"ljkdxvin-pris"}],[172949551,{"idx":47,"name":"terraformer-metal-03","tpage_name":"precurd-vis-pris"}],[170459191,{"idx":55,"name":"jakchires-shoeteop","tpage_name":"ljkdxvin-pris"}],[172949552,{"idx":48,"name":"terraformer-metal-04","tpage_name":"precurd-vis-pris"}],[170459192,{"idx":56,"name":"jakchires-teeth","tpage_name":"ljkdxvin-pris"}],[171507744,{"idx":32,"name":"warpgate-precursormetal","tpage_name":"templeb-vis-tfrag"}],[181469184,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desjump-water"}],[187105280,{"idx":0,"name":"desw-wall-tube-01","tpage_name":"deswalk-vis-tfrag"}],[168624153,{"idx":25,"name":"fac-vehicle-tank-02","tpage_name":"lfaccar-pris"}],[48758789,{"idx":5,"name":"sewer-plate-04","tpage_name":"sewc-vis-tfrag"}],[115081277,{"idx":61,"name":"jakc-skirt","tpage_name":"desboss1-pris"}],[187105281,{"idx":1,"name":"desw-hardplate-edge-01","tpage_name":"deswalk-vis-tfrag"}],[48758790,{"idx":6,"name":"sewer-pipe-rim-05b","tpage_name":"sewc-vis-tfrag"}],[115081278,{"idx":62,"name":"jakc-waistband2","tpage_name":"desboss1-pris"}],[187105282,{"idx":2,"name":"desw-hardplate-01","tpage_name":"deswalk-vis-tfrag"}],[48758791,{"idx":7,"name":"sewer-pipe-rim-07","tpage_name":"sewc-vis-tfrag"}],[115081279,{"idx":63,"name":"jakc-wraps","tpage_name":"desboss1-pris"}],[187105283,{"idx":3,"name":"desw-tubes-segment-02","tpage_name":"deswalk-vis-tfrag"}],[168624156,{"idx":28,"name":"light01","tpage_name":"lfaccar-pris"}],[48758792,{"idx":8,"name":"sewer-pipe-rim-03","tpage_name":"sewc-vis-tfrag"}],[115081280,{"idx":64,"name":"jakc-wristband-a2","tpage_name":"desboss1-pris"}],[187105284,{"idx":4,"name":"desw-plate-pattern-01","tpage_name":"deswalk-vis-tfrag"}],[187105285,{"idx":5,"name":"desw-container-plate-01","tpage_name":"deswalk-vis-tfrag"}],[48758794,{"idx":10,"name":"sewer-plate-02","tpage_name":"sewc-vis-tfrag"}],[187105286,{"idx":6,"name":"desw-plate-large-01","tpage_name":"deswalk-vis-tfrag"}],[48758795,{"idx":11,"name":"sewer-plate-03","tpage_name":"sewc-vis-tfrag"}],[187105287,{"idx":7,"name":"desw-beam01","tpage_name":"deswalk-vis-tfrag"}],[48758796,{"idx":12,"name":"sewer-metal-03","tpage_name":"sewc-vis-tfrag"}],[48758797,{"idx":13,"name":"sewer-pipe-rim-08","tpage_name":"sewc-vis-tfrag"}],[48758798,{"idx":14,"name":"sewer-hall-light-01","tpage_name":"sewc-vis-tfrag"}],[115081286,{"idx":70,"name":"jakchires-clips","tpage_name":"desboss1-pris"}],[187105290,{"idx":10,"name":"desw-tubes-small-01","tpage_name":"deswalk-vis-tfrag"}],[48758799,{"idx":15,"name":"common-black","tpage_name":"sewc-vis-tfrag"}],[11796545,{"idx":65,"name":"sewer-metal-block-01","tpage_name":"ctyinda-vis-tfrag"}],[115081287,{"idx":71,"name":"jakchires-eye","tpage_name":"desboss1-pris"}],[187105291,{"idx":11,"name":"desw-tentacle-01","tpage_name":"deswalk-vis-tfrag"}],[115081288,{"idx":72,"name":"jakchires-eyebrow","tpage_name":"desboss1-pris"}],[187105294,{"idx":14,"name":"desw-hardplate-01-hitweak","tpage_name":"deswalk-vis-tfrag"}],[190840834,{"idx":2,"name":"precur-tubes-small-01","tpage_name":"precurd-vis-shrub"}],[220201068,{"idx":108,"name":"daxterfoot","tpage_name":"museum3-pris"}],[187105295,{"idx":15,"name":"desw-tubes-bundle-01-hitweak","tpage_name":"deswalk-vis-tfrag"}],[190840835,{"idx":3,"name":"precur-bridge-plate-01","tpage_name":"precurd-vis-shrub"}],[220201069,{"idx":109,"name":"daxterfoot-bottom","tpage_name":"museum3-pris"}],[187105296,{"idx":16,"name":"desw-wall-light-01","tpage_name":"deswalk-vis-tfrag"}],[190840836,{"idx":4,"name":"precur-bridge-plate-edge","tpage_name":"precurd-vis-shrub"}],[220201070,{"idx":110,"name":"daxtergoggles","tpage_name":"museum3-pris"}],[173473819,{"idx":27,"name":"tow-outer-tubes","tpage_name":"ltowerb-vis-tfrag"}],[187105297,{"idx":17,"name":"desw-wall-tube-01-hitweak","tpage_name":"deswalk-vis-tfrag"}],[190840837,{"idx":5,"name":"precur-floor-plate-01","tpage_name":"precurd-vis-shrub"}],[220201071,{"idx":111,"name":"daxterheadwidenew","tpage_name":"museum3-pris"}],[220266545,{"idx":49,"name":"samos-finger-01","tpage_name":"museum3-pris2"}],[222167050,{"idx":10,"name":"orange","tpage_name":"museum4-tfrag"}],[115081298,{"idx":82,"name":"jakchires-pants","tpage_name":"desboss1-pris"}],[187105301,{"idx":21,"name":"desw-skirt-02","tpage_name":"deswalk-vis-tfrag"}],[190840841,{"idx":9,"name":"precur-floor-large-01","tpage_name":"precurd-vis-shrub"}],[220201075,{"idx":115,"name":"daxterteeth","tpage_name":"museum3-pris"}],[220266546,{"idx":50,"name":"samos-hair","tpage_name":"museum3-pris2"}],[222167051,{"idx":11,"name":"flut-leg","tpage_name":"museum4-tfrag"}],[115081299,{"idx":83,"name":"jakchires-precarmor-01","tpage_name":"desboss1-pris"}],[187105302,{"idx":22,"name":"desw-skirt-01","tpage_name":"deswalk-vis-tfrag"}],[190840842,{"idx":10,"name":"precur-small-plate-01","tpage_name":"precurd-vis-shrub"}],[220201076,{"idx":116,"name":"daxtertuft","tpage_name":"museum3-pris"}],[220266547,{"idx":51,"name":"samos-helmet","tpage_name":"museum3-pris2"}],[222167052,{"idx":12,"name":"flut-tail","tpage_name":"museum4-tfrag"}],[15597568,{"idx":0,"name":"map-ctyfarma","tpage_name":"ctyfarma-minimap"}],[115081300,{"idx":84,"name":"jakchires-shoebottom","tpage_name":"desboss1-pris"}],[187105303,{"idx":23,"name":"desw-light-trim-01","tpage_name":"deswalk-vis-tfrag"}],[190840843,{"idx":11,"name":"precur-small-plate-02","tpage_name":"precurd-vis-shrub"}],[220201077,{"idx":117,"name":"environment-oldmetal","tpage_name":"museum3-pris"}],[220266548,{"idx":52,"name":"samos-leaf","tpage_name":"museum3-pris2"}],[222167053,{"idx":13,"name":"flut-nostril","tpage_name":"museum4-tfrag"}],[115081301,{"idx":85,"name":"jakchires-shoemetal","tpage_name":"desboss1-pris"}],[187105304,{"idx":24,"name":"desw-wall-glow-02","tpage_name":"deswalk-vis-tfrag"}],[190840844,{"idx":12,"name":"precur-bridge-stage-01","tpage_name":"precurd-vis-shrub"}],[220201078,{"idx":118,"name":"jackb-lens","tpage_name":"museum3-pris"}],[220266549,{"idx":53,"name":"samos-lens","tpage_name":"museum3-pris2"}],[222167054,{"idx":14,"name":"war-teeth","tpage_name":"museum4-tfrag"}],[187105305,{"idx":25,"name":"environment-darkprec","tpage_name":"deswalk-vis-tfrag"}],[190840845,{"idx":13,"name":"precur-nail-02","tpage_name":"precurd-vis-shrub"}],[220201079,{"idx":119,"name":"jak-belt","tpage_name":"museum3-pris"}],[220266556,{"idx":60,"name":"samos-vest","tpage_name":"museum3-pris2"}],[222167061,{"idx":21,"name":"war-largebutton","tpage_name":"museum4-tfrag"}],[220266557,{"idx":61,"name":"samosbird-beak","tpage_name":"museum3-pris2"}],[222167062,{"idx":22,"name":"war-hair","tpage_name":"museum4-tfrag"}],[220266558,{"idx":62,"name":"samosbird-body","tpage_name":"museum3-pris2"}],[222167063,{"idx":23,"name":"assis-flesh4x4","tpage_name":"museum4-tfrag"}],[220266559,{"idx":63,"name":"samosbird-eye","tpage_name":"museum3-pris2"}],[48758824,{"idx":40,"name":"sew-gun-panel-03","tpage_name":"sewc-vis-tfrag"}],[220266560,{"idx":64,"name":"samosbird-plume","tpage_name":"museum3-pris2"}],[220266561,{"idx":65,"name":"samosbird-wing","tpage_name":"museum3-pris2"}],[181010464,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"desbcst-pris"}],[216072213,{"idx":21,"name":"ashelin-pantstop","tpage_name":"museum-pris2"}],[187170821,{"idx":5,"name":"environment-darkprec","tpage_name":"deswalk-vis-pris"}],[181010465,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"desbcst-pris"}],[216072214,{"idx":22,"name":"ashelin-redtop","tpage_name":"museum-pris2"}],[187170822,{"idx":6,"name":"dm-urchin-base-01","tpage_name":"deswalk-vis-pris"}],[181010468,{"idx":36,"name":"jakchires-eye","tpage_name":"desbcst-pris"}],[216072217,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"museum-pris2"}],[187170825,{"idx":9,"name":"dm-urchin-skin-01","tpage_name":"deswalk-vis-pris"}],[181010469,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"desbcst-pris"}],[216072218,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"museum-pris2"}],[187170826,{"idx":10,"name":"dm-tentacle-armor-01","tpage_name":"deswalk-vis-pris"}],[181010470,{"idx":38,"name":"jakchires-eyelid","tpage_name":"desbcst-pris"}],[216072219,{"idx":27,"name":"ashelin-teeth","tpage_name":"museum-pris2"}],[187170827,{"idx":11,"name":"dm-tentacle-armor-02","tpage_name":"deswalk-vis-pris"}],[181010471,{"idx":39,"name":"jakchires-facelft","tpage_name":"desbcst-pris"}],[216072220,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"museum-pris2"}],[187170828,{"idx":12,"name":"dm-tentacle-armor-03","tpage_name":"deswalk-vis-pris"}],[181010472,{"idx":40,"name":"jakchires-facert","tpage_name":"desbcst-pris"}],[216072221,{"idx":29,"name":"bam-eyelight","tpage_name":"museum-pris2"}],[187170829,{"idx":13,"name":"dm-tentacle-armor-04","tpage_name":"deswalk-vis-pris"}],[181010473,{"idx":41,"name":"jakchires-glovetop","tpage_name":"desbcst-pris"}],[216072222,{"idx":30,"name":"bam-hairhilite","tpage_name":"museum-pris2"}],[187170830,{"idx":14,"name":"dm-tentacle-armor-05","tpage_name":"deswalk-vis-pris"}],[181010474,{"idx":42,"name":"jakchires-hair","tpage_name":"desbcst-pris"}],[216072223,{"idx":31,"name":"charHOLD","tpage_name":"museum-pris2"}],[187170831,{"idx":15,"name":"dm-tentacle-skin-01","tpage_name":"deswalk-vis-pris"}],[181010475,{"idx":43,"name":"jakchires-horn","tpage_name":"desbcst-pris"}],[216072224,{"idx":32,"name":"environment-oldmetal","tpage_name":"museum-pris2"}],[187170832,{"idx":16,"name":"dm-tentacle-skin-02","tpage_name":"deswalk-vis-pris"}],[181010476,{"idx":44,"name":"jakchires-jacket","tpage_name":"desbcst-pris"}],[216072225,{"idx":33,"name":"torn-armlft","tpage_name":"museum-pris2"}],[187170833,{"idx":17,"name":"dm-ecotank-cap-01","tpage_name":"deswalk-vis-pris"}],[181010478,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"desbcst-pris"}],[216072227,{"idx":35,"name":"torn-belt","tpage_name":"museum-pris2"}],[187170835,{"idx":19,"name":"dm-ecotank-trim-01","tpage_name":"deswalk-vis-pris"}],[181010479,{"idx":47,"name":"jakchires-pants","tpage_name":"desbcst-pris"}],[216072228,{"idx":36,"name":"torn-belt2","tpage_name":"museum-pris2"}],[187170836,{"idx":20,"name":"dm-ecotank-trim-02","tpage_name":"deswalk-vis-pris"}],[181010480,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"desbcst-pris"}],[216072229,{"idx":37,"name":"torn-blademetal","tpage_name":"museum-pris2"}],[187170837,{"idx":21,"name":"dm-ecotank-trim-03","tpage_name":"deswalk-vis-pris"}],[181010483,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"desbcst-pris"}],[216072232,{"idx":40,"name":"torn-eyelid","tpage_name":"museum-pris2"}],[187170840,{"idx":24,"name":"terraformer-footpipes-01","tpage_name":"deswalk-vis-pris"}],[181010484,{"idx":52,"name":"jakchires-teeth","tpage_name":"desbcst-pris"}],[216072233,{"idx":41,"name":"torn-face","tpage_name":"museum-pris2"}],[187170841,{"idx":25,"name":"terraformer-metal-01","tpage_name":"deswalk-vis-pris"}],[181010485,{"idx":53,"name":"vehicle-snake-tread-01","tpage_name":"desbcst-pris"}],[216072234,{"idx":42,"name":"torn-face-right","tpage_name":"museum-pris2"}],[187170842,{"idx":26,"name":"terraformer-metal-02","tpage_name":"deswalk-vis-pris"}],[181010486,{"idx":54,"name":"vehicle-snake-tread-02","tpage_name":"desbcst-pris"}],[216072235,{"idx":43,"name":"torn-finger","tpage_name":"museum-pris2"}],[187170843,{"idx":27,"name":"terraformer-metal-03","tpage_name":"deswalk-vis-pris"}],[181010487,{"idx":55,"name":"vehicle-wheel-01","tpage_name":"desbcst-pris"}],[216072236,{"idx":44,"name":"torn-footleather","tpage_name":"museum-pris2"}],[187170844,{"idx":28,"name":"terraformer-metal-04","tpage_name":"deswalk-vis-pris"}],[181010488,{"idx":56,"name":"deswalk-break-01","tpage_name":"desbcst-pris"}],[216072237,{"idx":45,"name":"torn-gunbarrel","tpage_name":"museum-pris2"}],[187170845,{"idx":29,"name":"terraformer-metal-05","tpage_name":"deswalk-vis-pris"}],[198443010,{"idx":2,"name":"des-mount-02","tpage_name":"hangb-vis-tfrag"}],[181010490,{"idx":58,"name":"errocyber-eye","tpage_name":"desbcst-pris"}],[216072239,{"idx":47,"name":"torn-hair-01","tpage_name":"museum-pris2"}],[187170847,{"idx":31,"name":"terraformer-metal-08","tpage_name":"deswalk-vis-pris"}],[181010491,{"idx":59,"name":"errocyber-eyelid","tpage_name":"desbcst-pris"}],[216072240,{"idx":48,"name":"torn-hair-02","tpage_name":"museum-pris2"}],[187170848,{"idx":32,"name":"terraformer-metal-09","tpage_name":"deswalk-vis-pris"}],[181010492,{"idx":60,"name":"errocyber-faceflesh","tpage_name":"desbcst-pris"}],[216072241,{"idx":49,"name":"torn-handle-01","tpage_name":"museum-pris2"}],[187170849,{"idx":33,"name":"terraformer-metal-10","tpage_name":"deswalk-vis-pris"}],[181010494,{"idx":62,"name":"errolcyber-bigshoulder","tpage_name":"desbcst-pris"}],[216072243,{"idx":51,"name":"torn-metal2","tpage_name":"museum-pris2"}],[187170851,{"idx":35,"name":"terraformer-minestrips-01","tpage_name":"deswalk-vis-pris"}],[181010495,{"idx":63,"name":"errolcyber-bluedome","tpage_name":"desbcst-pris"}],[216072244,{"idx":52,"name":"torn-mouth","tpage_name":"museum-pris2"}],[187170852,{"idx":36,"name":"terraformer-organic-01","tpage_name":"deswalk-vis-pris"}],[181010496,{"idx":64,"name":"errolcyber-bluemetal-01","tpage_name":"desbcst-pris"}],[216072245,{"idx":53,"name":"torn-pipe","tpage_name":"museum-pris2"}],[187170853,{"idx":37,"name":"terraformer-organic-02","tpage_name":"deswalk-vis-pris"}],[50724867,{"idx":3,"name":"airlock-door-metal2","tpage_name":"foresta-vis-pris"}],[181010501,{"idx":69,"name":"errolcyber-fingers","tpage_name":"desbcst-pris"}],[216072250,{"idx":58,"name":"torn-vest","tpage_name":"museum-pris2"}],[187170858,{"idx":42,"name":"ecocreature-claws","tpage_name":"deswalk-vis-pris"}],[198443022,{"idx":14,"name":"des-pole-01","tpage_name":"hangb-vis-tfrag"}],[181010502,{"idx":70,"name":"errolcyber-glovepalm","tpage_name":"desbcst-pris"}],[216072251,{"idx":59,"name":"tess-belly","tpage_name":"museum-pris2"}],[187170859,{"idx":43,"name":"ecocreature-eye","tpage_name":"deswalk-vis-pris"}],[181010505,{"idx":73,"name":"errolcyber-greymetal-02","tpage_name":"desbcst-pris"}],[216072254,{"idx":62,"name":"tess-buckle","tpage_name":"museum-pris2"}],[187170862,{"idx":46,"name":"ecocreature-joint","tpage_name":"deswalk-vis-pris"}],[198443026,{"idx":18,"name":"des-ruins-top-01","tpage_name":"hangb-vis-tfrag"}],[181010506,{"idx":74,"name":"errolcyber-hair","tpage_name":"desbcst-pris"}],[216072255,{"idx":63,"name":"tess-chest","tpage_name":"museum-pris2"}],[187170863,{"idx":47,"name":"ecocreature-palm","tpage_name":"deswalk-vis-pris"}],[198443027,{"idx":19,"name":"des-corral-plate-01","tpage_name":"hangb-vis-tfrag"}],[181010507,{"idx":75,"name":"errolcyber-head-01","tpage_name":"desbcst-pris"}],[216072256,{"idx":64,"name":"tess-emblem","tpage_name":"museum-pris2"}],[187170864,{"idx":48,"name":"terraformer-minecore","tpage_name":"deswalk-vis-pris"}],[181010508,{"idx":76,"name":"errolcyber-head-02","tpage_name":"desbcst-pris"}],[216072257,{"idx":65,"name":"tess-eye","tpage_name":"museum-pris2"}],[187170865,{"idx":49,"name":"terraformer-transstrips-01","tpage_name":"deswalk-vis-pris"}],[181010509,{"idx":77,"name":"errolcyber-insidemouth","tpage_name":"desbcst-pris"}],[216072258,{"idx":66,"name":"tess-eyelid","tpage_name":"museum-pris2"}],[187170866,{"idx":50,"name":"dm-urchin-light-02-dest","tpage_name":"deswalk-vis-pris"}],[187367424,{"idx":0,"name":"racegate","tpage_name":"lbbring3-sprite"}],[49020933,{"idx":5,"name":"sewer-plate-05","tpage_name":"sewe-vis-tfrag"}],[188022793,{"idx":9,"name":"daxterfinger","tpage_name":"lvincst-pris"}],[188022794,{"idx":10,"name":"daxterfoot","tpage_name":"lvincst-pris"}],[188022795,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"lvincst-pris"}],[223084544,{"idx":0,"name":"rub-crater-shards-01","tpage_name":"rublcst-vis-shrub"}],[188022797,{"idx":13,"name":"daxterheadwidenew","tpage_name":"lvincst-pris"}],[223084546,{"idx":2,"name":"rub-beam-gen","tpage_name":"rublcst-vis-shrub"}],[165806106,{"idx":26,"name":"city-lowres-ind-wall-03","tpage_name":"ltowcity-tfrag"}],[174325796,{"idx":36,"name":"jakchires-eye","tpage_name":"ldesgcst-pris"}],[184287236,{"idx":4,"name":"preship-blue-window-glue","tpage_name":"loutro-shrub"}],[174325797,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"ldesgcst-pris"}],[184287237,{"idx":5,"name":"preship-blue-thruster","tpage_name":"loutro-shrub"}],[174325798,{"idx":38,"name":"jakchires-eyelid","tpage_name":"ldesgcst-pris"}],[184287238,{"idx":6,"name":"preship-window-strip-01","tpage_name":"loutro-shrub"}],[134676611,{"idx":131,"name":"stdm-trim-02","tpage_name":"rubblec-vis-tfrag"}],[165806111,{"idx":31,"name":"palcab-lowres-mark-roof-rim-01","tpage_name":"ltowcity-tfrag"}],[92209158,{"idx":6,"name":"klever-face-01scars","tpage_name":"ldamklev-pris"}],[92209159,{"idx":7,"name":"klever-hair","tpage_name":"ldamklev-pris"}],[174325801,{"idx":41,"name":"jakchires-glovetop","tpage_name":"ldesgcst-pris"}],[184287241,{"idx":9,"name":"preship-metal-edge-03","tpage_name":"loutro-shrub"}],[92209160,{"idx":8,"name":"klever-mustache","tpage_name":"ldamklev-pris"}],[174325802,{"idx":42,"name":"jakchires-hair","tpage_name":"ldesgcst-pris"}],[184287242,{"idx":10,"name":"preship-metal-trim-03","tpage_name":"loutro-shrub"}],[92209163,{"idx":11,"name":"klever-armor-02","tpage_name":"ldamklev-pris"}],[189005908,{"idx":84,"name":"spydroid-leg-grey-end","tpage_name":"factoryd-vis-pris"}],[208928788,{"idx":20,"name":"terraformer-bluelight","tpage_name":"precurd-vis-pris2"}],[170721302,{"idx":22,"name":"city-lowres-fort-red","tpage_name":"lcitysml-tfrag"}],[188088320,{"idx":0,"name":"holograph-env-rim-dest","tpage_name":"lvincst-warp"}],[151126066,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"combx-pris"}],[14680080,{"idx":16,"name":"jakc-lens","tpage_name":"ctygenb-vis-pris"}],[10879070,{"idx":94,"name":"city-tile","tpage_name":"ctyslumb-vis-tfrag"}],[170721303,{"idx":23,"name":"palcab-lowres-mark-roof-01","tpage_name":"lcitysml-tfrag"}],[188088321,{"idx":1,"name":"holograph-env-noise","tpage_name":"lvincst-warp"}],[151126067,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"combx-pris"}],[14680081,{"idx":17,"name":"jakc-scarf","tpage_name":"ctygenb-vis-pris"}],[10879071,{"idx":95,"name":"cityslumc-awning","tpage_name":"ctyslumb-vis-tfrag"}],[170721304,{"idx":24,"name":"city-lowres-port-roof","tpage_name":"lcitysml-tfrag"}],[188088322,{"idx":2,"name":"holograph-env-rim","tpage_name":"lvincst-warp"}],[151126068,{"idx":52,"name":"jakchires-teeth","tpage_name":"combx-pris"}],[14680082,{"idx":18,"name":"jakc-waistband2","tpage_name":"ctygenb-vis-pris"}],[10879072,{"idx":96,"name":"ctyslumc-wall-sliver","tpage_name":"ctyslumb-vis-tfrag"}],[170721305,{"idx":25,"name":"city-lowres-ind-wall-01","tpage_name":"lcitysml-tfrag"}],[188088323,{"idx":3,"name":"holograph-env-scan","tpage_name":"lvincst-warp"}],[14680083,{"idx":19,"name":"jakc-wraps","tpage_name":"ctygenb-vis-pris"}],[10879073,{"idx":97,"name":"cityslumc-top-pillar","tpage_name":"ctyslumb-vis-tfrag"}],[171507761,{"idx":49,"name":"temple_pre-04","tpage_name":"templeb-vis-tfrag"}],[171507763,{"idx":51,"name":"temple_sandstone_ground01","tpage_name":"templeb-vis-tfrag"}],[171507737,{"idx":25,"name":"lt-eco-vent-blue-01","tpage_name":"templeb-vis-tfrag"}],[177733637,{"idx":5,"name":"environment-lightjak","tpage_name":"precurd-vis-water"}],[171507738,{"idx":26,"name":"lt-eco-vent-side-01","tpage_name":"templeb-vis-tfrag"}],[177733638,{"idx":6,"name":"lightjak-wings","tpage_name":"precurd-vis-water"}],[171638835,{"idx":51,"name":"temple_sandstone_pill02","tpage_name":"templed-vis-tfrag"}],[50659362,{"idx":34,"name":"fora-stone-05","tpage_name":"foresta-vis-tfrag"}],[189005882,{"idx":58,"name":"cguardgame-backplate","tpage_name":"factoryd-vis-pris"}],[170197064,{"idx":72,"name":"seem-precmetal-chestplate-01","tpage_name":"outrocst-pris2"}],[181403684,{"idx":36,"name":"beamgen-metal-edge-02","tpage_name":"desjump-pris"}],[190119944,{"idx":8,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"lbiped-pris"}],[189005891,{"idx":67,"name":"cguardgame-metaledark-02","tpage_name":"factoryd-vis-pris"}],[208928771,{"idx":3,"name":"terraformer-metal-01","tpage_name":"precurd-vis-pris2"}],[170197066,{"idx":74,"name":"seem-precmetal-plain","tpage_name":"outrocst-pris2"}],[181403686,{"idx":38,"name":"rhino-metal-01","tpage_name":"desjump-pris"}],[190119946,{"idx":10,"name":"dp-bipedal-eye-01","tpage_name":"lbiped-pris"}],[189005893,{"idx":69,"name":"cguardgame-metallight-01small","tpage_name":"factoryd-vis-pris"}],[208928773,{"idx":5,"name":"terraformer-metal-03","tpage_name":"precurd-vis-pris2"}],[170197068,{"idx":76,"name":"seem-skirt-small","tpage_name":"outrocst-pris2"}],[181403688,{"idx":40,"name":"vehicle-wire-01","tpage_name":"desjump-pris"}],[190119948,{"idx":12,"name":"dp-bipedal-nose-01","tpage_name":"lbiped-pris"}],[189005895,{"idx":71,"name":"cguardgame-shoebottom","tpage_name":"factoryd-vis-pris"}],[208928775,{"idx":7,"name":"terraformer-metal-05","tpage_name":"precurd-vis-pris2"}],[170197071,{"idx":79,"name":"seem-uppertorso","tpage_name":"outrocst-pris2"}],[190119951,{"idx":15,"name":"dp-bipedal-skin-bulge-02","tpage_name":"lbiped-pris"}],[189005898,{"idx":74,"name":"kg-grunt-cable-01","tpage_name":"factoryd-vis-pris"}],[208928778,{"idx":10,"name":"terraformer-metal-09","tpage_name":"precurd-vis-pris2"}],[170197072,{"idx":80,"name":"tess-belly","tpage_name":"outrocst-pris2"}],[195100672,{"idx":0,"name":"bam-eyelight","tpage_name":"lblowtkg-pris"}],[190119952,{"idx":16,"name":"dp-bipedal-skin-plate-01","tpage_name":"lbiped-pris"}],[189005899,{"idx":75,"name":"kg-grunt-rim-01","tpage_name":"factoryd-vis-pris"}],[208928779,{"idx":11,"name":"terraformer-metal-10","tpage_name":"precurd-vis-pris2"}],[170197073,{"idx":81,"name":"tess-belt","tpage_name":"outrocst-pris2"}],[190119953,{"idx":17,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"lbiped-pris"}],[170197074,{"idx":82,"name":"tess-belt2","tpage_name":"outrocst-pris2"}],[190119954,{"idx":18,"name":"dp-bipedal-skin-ribs-01","tpage_name":"lbiped-pris"}],[208928781,{"idx":13,"name":"terraformer-minestrips-01","tpage_name":"precurd-vis-pris2"}],[189005901,{"idx":77,"name":"kg-grunt-rim-03","tpage_name":"factoryd-vis-pris"}],[170197075,{"idx":83,"name":"tess-buckle","tpage_name":"outrocst-pris2"}],[195100675,{"idx":3,"name":"cguard1-backmetal","tpage_name":"lblowtkg-pris"}],[190119955,{"idx":19,"name":"dp-bipedal-spine-01","tpage_name":"lbiped-pris"}],[208928782,{"idx":14,"name":"terraformer-organic-01","tpage_name":"precurd-vis-pris2"}],[189005902,{"idx":78,"name":"roboguard-die-stamped-metal-blue","tpage_name":"factoryd-vis-pris"}],[170197076,{"idx":84,"name":"tess-chest","tpage_name":"outrocst-pris2"}],[190119956,{"idx":20,"name":"dp-bipedal-toe-01","tpage_name":"lbiped-pris"}],[171638829,{"idx":45,"name":"temple_sandstone_trim01","tpage_name":"templed-vis-tfrag"}],[208928783,{"idx":15,"name":"terraformer-organic-02","tpage_name":"precurd-vis-pris2"}],[189005903,{"idx":79,"name":"roboguard-die-stamped-metal-red","tpage_name":"factoryd-vis-pris"}],[170197077,{"idx":85,"name":"tess-emblem","tpage_name":"outrocst-pris2"}],[195100677,{"idx":5,"name":"cguard1-guntube","tpage_name":"lblowtkg-pris"}],[190119957,{"idx":21,"name":"environment-darkprec","tpage_name":"lbiped-pris"}],[171638830,{"idx":46,"name":"temple_sandstone_steptop01","tpage_name":"templed-vis-tfrag"}],[1114232,{"idx":120,"name":"comb-01","tpage_name":"progress-minimap"}],[14811212,{"idx":76,"name":"tcab-ring-01","tpage_name":"ctygenb-vis-tfrag"}],[208928785,{"idx":17,"name":"terraformer-organic-04","tpage_name":"precurd-vis-pris2"}],[189005905,{"idx":81,"name":"roboguard-shouldershield","tpage_name":"factoryd-vis-pris"}],[189005911,{"idx":87,"name":"spydroid-light-small-red","tpage_name":"factoryd-vis-pris"}],[189005916,{"idx":92,"name":"squid-tubes","tpage_name":"factoryd-vis-pris"}],[184287239,{"idx":7,"name":"preship-metal-hull-03","tpage_name":"loutro-shrub"}],[174325799,{"idx":39,"name":"jakchires-facelft","tpage_name":"ldesgcst-pris"}],[189005917,{"idx":93,"name":"widow-dull-inards","tpage_name":"factoryd-vis-pris"}],[184287240,{"idx":8,"name":"preship-metal-hull-01","tpage_name":"loutro-shrub"}],[174325800,{"idx":40,"name":"jakchires-facert","tpage_name":"ldesgcst-pris"}],[173867012,{"idx":4,"name":"environment-oldmetal","tpage_name":"ltowerb-vis-pris"}],[173867013,{"idx":5,"name":"errocyber-faceflesh","tpage_name":"ltowerb-vis-pris"}],[173867014,{"idx":6,"name":"errolcyber-bluedome","tpage_name":"ltowerb-vis-pris"}],[173867015,{"idx":7,"name":"errolcyber-earcup","tpage_name":"ltowerb-vis-pris"}],[189005927,{"idx":103,"name":"missle-bot-generator-02","tpage_name":"factoryd-vis-pris"}],[173867017,{"idx":9,"name":"errolcyber-head-01","tpage_name":"ltowerb-vis-pris"}],[173867018,{"idx":10,"name":"errolcyber-head-02","tpage_name":"ltowerb-vis-pris"}],[189005930,{"idx":106,"name":"missle-bot-leg-01","tpage_name":"factoryd-vis-pris"}],[173867019,{"idx":11,"name":"errolcyber-insidemouth","tpage_name":"ltowerb-vis-pris"}],[208928768,{"idx":0,"name":"terraformer-bodyside-bottom","tpage_name":"precurd-vis-pris2"}],[189005931,{"idx":107,"name":"missle-bot-pipe-01","tpage_name":"factoryd-vis-pris"}],[173867020,{"idx":12,"name":"errolcyber-pipes-01","tpage_name":"ltowerb-vis-pris"}],[208928769,{"idx":1,"name":"terraformer-bodyside-top","tpage_name":"precurd-vis-pris2"}],[189005932,{"idx":108,"name":"missle-bot-pipe-02","tpage_name":"factoryd-vis-pris"}],[189005933,{"idx":109,"name":"missle-bot-thruster-01","tpage_name":"factoryd-vis-pris"}],[189005934,{"idx":110,"name":"missle-bot-thruster-02","tpage_name":"factoryd-vis-pris"}],[189005935,{"idx":111,"name":"missle-bot-wire-01","tpage_name":"factoryd-vis-pris"}],[189005947,{"idx":123,"name":"dp-bipedal-nose-01","tpage_name":"factoryd-vis-pris"}],[223870987,{"idx":11,"name":"baron-eyelid","tpage_name":"museum3b-pris2"}],[81723486,{"idx":94,"name":"jakchires-clips","tpage_name":"ljndklev-pris"}],[171638823,{"idx":39,"name":"rail-env-wall-01","tpage_name":"templed-vis-tfrag"}],[172884003,{"idx":35,"name":"dp-bipedal-skin-plate-01","tpage_name":"precura-vis-pris"}],[189005964,{"idx":140,"name":"eco-lt-cryst-03","tpage_name":"factoryd-vis-pris"}],[223871004,{"idx":28,"name":"baron-swordtop","tpage_name":"museum3b-pris2"}],[173867095,{"idx":87,"name":"errolcyber-rubberpipe-light","tpage_name":"ltowerb-vis-pris"}],[188809255,{"idx":39,"name":"facd-metal-wall-01","tpage_name":"factoryd-vis-tfrag"}],[173473813,{"idx":21,"name":"tow-baserock","tpage_name":"ltowerb-vis-tfrag"}],[172228633,{"idx":25,"name":"temple_pre-01","tpage_name":"templeb-vis-pris"}],[171769951,{"idx":95,"name":"common-black","tpage_name":"templea-vis-pris"}],[172884004,{"idx":36,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"precura-vis-pris"}],[189005965,{"idx":141,"name":"errocyber-eye","tpage_name":"factoryd-vis-pris"}],[223871005,{"idx":29,"name":"baron-whitestrap","tpage_name":"museum3b-pris2"}],[173867096,{"idx":88,"name":"errolcyber-spine","tpage_name":"ltowerb-vis-pris"}],[188809256,{"idx":40,"name":"facd-metal-nut-01","tpage_name":"factoryd-vis-tfrag"}],[190709761,{"idx":1,"name":"neo-wasp-base","tpage_name":"ltowera-vis-pris"}],[171769952,{"idx":96,"name":"dp-bipedal-backhand-01","tpage_name":"templea-vis-pris"}],[172884005,{"idx":37,"name":"dp-bipedal-skin-ribs-01","tpage_name":"precura-vis-pris"}],[189005966,{"idx":142,"name":"errocyber-eyelid","tpage_name":"factoryd-vis-pris"}],[223871006,{"idx":30,"name":"baron-wristguard","tpage_name":"museum3b-pris2"}],[173867097,{"idx":89,"name":"errocyber-eye","tpage_name":"ltowerb-vis-pris"}],[188809257,{"idx":41,"name":"facd-metal-nut-02","tpage_name":"factoryd-vis-tfrag"}],[190709762,{"idx":2,"name":"neo-wasp-body","tpage_name":"ltowera-vis-pris"}],[720900,{"idx":4,"name":"loadsave-03","tpage_name":"level-default-shrub"}],[171638827,{"idx":43,"name":"temple_sandstone_brick-01","tpage_name":"templed-vis-tfrag"}],[172884007,{"idx":39,"name":"dp-bipedal-toe-01","tpage_name":"precura-vis-pris"}],[171769954,{"idx":98,"name":"dp-bipedal-dk-hose-01","tpage_name":"templea-vis-pris"}],[189005968,{"idx":144,"name":"errolcyber-roboeye","tpage_name":"factoryd-vis-pris"}],[223871008,{"idx":32,"name":"brut-armfur","tpage_name":"museum3b-pris2"}],[173867099,{"idx":91,"name":"errolcyber-metaleyelid","tpage_name":"ltowerb-vis-pris"}],[188809259,{"idx":43,"name":"facc-big-metal-panl04-hitweak","tpage_name":"factoryd-vis-tfrag"}],[173473817,{"idx":25,"name":"tow-base-ground","tpage_name":"ltowerb-vis-tfrag"}],[172228637,{"idx":29,"name":"temple_pre-04","tpage_name":"templeb-vis-pris"}],[189333504,{"idx":0,"name":"rail-env-wall-01","tpage_name":"comba-shrub"}],[189333505,{"idx":1,"name":"rail-base-dark-01","tpage_name":"comba-shrub"}],[189333506,{"idx":2,"name":"rail-rider-decal-01","tpage_name":"comba-shrub"}],[189333507,{"idx":3,"name":"rail-pipe-03","tpage_name":"comba-shrub"}],[189333508,{"idx":4,"name":"rail-dash-01","tpage_name":"comba-shrub"}],[189333509,{"idx":5,"name":"rail-gray-metal-01","tpage_name":"comba-shrub"}],[189333510,{"idx":6,"name":"rail-car-vent-01","tpage_name":"comba-shrub"}],[189333511,{"idx":7,"name":"rail-chair-01","tpage_name":"comba-shrub"}],[189333512,{"idx":8,"name":"rail-light-blue","tpage_name":"comba-shrub"}],[189333514,{"idx":10,"name":"vehicle-snake-chassis-01","tpage_name":"comba-shrub"}],[189333515,{"idx":11,"name":"vehicle-exhaust-pipe-01","tpage_name":"comba-shrub"}],[189333516,{"idx":12,"name":"vehicle-snake-tank-02","tpage_name":"comba-shrub"}],[189333517,{"idx":13,"name":"vehicle-pipe-01","tpage_name":"comba-shrub"}],[189333518,{"idx":14,"name":"vehicle-chrome-pipe-01","tpage_name":"comba-shrub"}],[172752896,{"idx":0,"name":"precur-tube-joint-01","tpage_name":"precurb-vis-shrub"}],[189333519,{"idx":15,"name":"vehicle-body-panel-01","tpage_name":"comba-shrub"}],[171507717,{"idx":5,"name":"temple-steps-brown","tpage_name":"templeb-vis-tfrag"}],[172752897,{"idx":1,"name":"precur-blue-light-01","tpage_name":"precurb-vis-shrub"}],[189333520,{"idx":16,"name":"vehicle-safety-plate-01","tpage_name":"comba-shrub"}],[171507718,{"idx":6,"name":"temple_sandstone_dtale02","tpage_name":"templeb-vis-tfrag"}],[172752898,{"idx":2,"name":"precur-nail-01","tpage_name":"precurb-vis-shrub"}],[172949616,{"idx":112,"name":"errolcyber-spine","tpage_name":"precurd-vis-pris"}],[207814656,{"idx":0,"name":"gun-clank-target-01","tpage_name":"lgunrnc-pris"}],[207814657,{"idx":1,"name":"gun-ratchet-target-01","tpage_name":"lgunrnc-pris"}],[57147397,{"idx":5,"name":"king-bolt","tpage_name":"waspala-pris2"}],[207814658,{"idx":2,"name":"kg-target-side-01","tpage_name":"lgunrnc-pris"}],[207814659,{"idx":3,"name":"rc-mnstr-target-01","tpage_name":"lgunrnc-pris"}],[189333532,{"idx":28,"name":"vehicle-snake-drum-03","tpage_name":"comba-shrub"}],[195559432,{"idx":8,"name":"jinx-boottop","tpage_name":"towercst-pris2"}],[57147399,{"idx":7,"name":"king-clip-02","tpage_name":"waspala-pris2"}],[207814660,{"idx":4,"name":"rc-mnstr-target-02","tpage_name":"lgunrnc-pris"}],[189333533,{"idx":29,"name":"rail-light-green","tpage_name":"comba-shrub"}],[195559433,{"idx":9,"name":"jinx-brownstrap","tpage_name":"towercst-pris2"}],[189530127,{"idx":15,"name":"vehicle-tread-blur-02","tpage_name":"desrally-pris"}],[193265667,{"idx":3,"name":"tow-energy-bridge","tpage_name":"towerb-vis-water"}],[189530144,{"idx":32,"name":"wstlander-01-shoebottom","tpage_name":"desrally-pris"}],[194510864,{"idx":16,"name":"jinx-glove","tpage_name":"gridcst-pris2"}],[216006748,{"idx":92,"name":"keira-blackstrap","tpage_name":"museum-pris"}],[216006749,{"idx":93,"name":"keira-brownstraps-new","tpage_name":"museum-pris"}],[223805528,{"idx":88,"name":"kid-shirt","tpage_name":"museum3b-pris"}],[223805529,{"idx":89,"name":"kid-teeth","tpage_name":"museum3b-pris"}],[174391321,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"ldesgcst-pris2"}],[223805530,{"idx":90,"name":"crocadog-collar","tpage_name":"museum3b-pris"}],[190840832,{"idx":0,"name":"precur-tube-joint-01","tpage_name":"precurd-vis-shrub"}],[220201066,{"idx":106,"name":"daxterear","tpage_name":"museum3-pris"}],[172228635,{"idx":27,"name":"rail-env-wall-01","tpage_name":"templeb-vis-pris"}],[173473815,{"idx":23,"name":"tow-outerpod-shell","tpage_name":"ltowerb-vis-tfrag"}],[190840833,{"idx":1,"name":"precur-blue-light-01","tpage_name":"precurd-vis-shrub"}],[220201067,{"idx":107,"name":"daxterfinger","tpage_name":"museum3-pris"}],[190840838,{"idx":6,"name":"precur-wall-groove-01","tpage_name":"precurd-vis-shrub"}],[220201072,{"idx":112,"name":"daxterhelmetplain","tpage_name":"museum3-pris"}],[190840839,{"idx":7,"name":"precur-bridge-floor-01","tpage_name":"precurd-vis-shrub"}],[220201073,{"idx":113,"name":"daxterlense","tpage_name":"museum3-pris"}],[190840840,{"idx":8,"name":"precur-small-plate-edge","tpage_name":"precurd-vis-shrub"}],[220201074,{"idx":114,"name":"daxternose","tpage_name":"museum3-pris"}],[190840846,{"idx":14,"name":"precur-nail-01","tpage_name":"precurd-vis-shrub"}],[220201080,{"idx":120,"name":"jak-gogglemetal","tpage_name":"museum3-pris"}],[203096105,{"idx":41,"name":"widow-bomb-glow","tpage_name":"lctyass-pris"}],[192675840,{"idx":0,"name":"racegate","tpage_name":"lbbring5-sprite"}],[170459173,{"idx":37,"name":"jakchires-brwnleather","tpage_name":"ljkdxvin-pris"}],[171704353,{"idx":33,"name":"temple_sandstone_pill07","tpage_name":"templec-vis-tfrag"}],[175439893,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"rubblea-vis-pris2"}],[172949533,{"idx":29,"name":"errolcyber-earcup","tpage_name":"precurd-vis-pris"}],[174194713,{"idx":25,"name":"jakchires-facert","tpage_name":"ljkfeet-pris"}],[193527836,{"idx":28,"name":"jakc-wraps","tpage_name":"desboss2-pris"}],[212008963,{"idx":3,"name":"hud-small-vehicle-health-bar-01","tpage_name":"lpattack-minimap"}],[193527837,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"desboss2-pris"}],[212008964,{"idx":4,"name":"hud-turbo-boost-off-01","tpage_name":"lpattack-minimap"}],[193527838,{"idx":30,"name":"jakchires-arm","tpage_name":"desboss2-pris"}],[212008965,{"idx":5,"name":"hud-turbo-boost-on-01","tpage_name":"lpattack-minimap"}],[193527839,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"desboss2-pris"}],[212008966,{"idx":6,"name":"hud-turbo-boost-rim-01","tpage_name":"lpattack-minimap"}],[193527840,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"desboss2-pris"}],[193527841,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"desboss2-pris"}],[193527842,{"idx":34,"name":"jakchires-chestplate","tpage_name":"desboss2-pris"}],[90243100,{"idx":28,"name":"des-branch-01","tpage_name":"desertb-vis-tfrag"}],[193527843,{"idx":35,"name":"jakchires-clips","tpage_name":"desboss2-pris"}],[90243101,{"idx":29,"name":"des-red-rock-01","tpage_name":"desertb-vis-tfrag"}],[193527844,{"idx":36,"name":"jakchires-eye","tpage_name":"desboss2-pris"}],[193527845,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"desboss2-pris"}],[193527846,{"idx":38,"name":"jakchires-eyelid","tpage_name":"desboss2-pris"}],[90243104,{"idx":32,"name":"des-cliff-trans-01","tpage_name":"desertb-vis-tfrag"}],[193527847,{"idx":39,"name":"jakchires-facelft","tpage_name":"desboss2-pris"}],[90243105,{"idx":33,"name":"des-cliff-top-01","tpage_name":"desertb-vis-tfrag"}],[193527848,{"idx":40,"name":"jakchires-facert","tpage_name":"desboss2-pris"}],[193527849,{"idx":41,"name":"jakchires-glovetop","tpage_name":"desboss2-pris"}],[193527850,{"idx":42,"name":"jakchires-hair","tpage_name":"desboss2-pris"}],[90243108,{"idx":36,"name":"des-corral-plate-03","tpage_name":"desertb-vis-tfrag"}],[193527851,{"idx":43,"name":"jakchires-horn","tpage_name":"desboss2-pris"}],[90243109,{"idx":37,"name":"des-bridge-plank","tpage_name":"desertb-vis-tfrag"}],[193527852,{"idx":44,"name":"jakchires-jacket","tpage_name":"desboss2-pris"}],[90243110,{"idx":38,"name":"des-bridge-brace-01","tpage_name":"desertb-vis-tfrag"}],[193527853,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"desboss2-pris"}],[57081867,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"waspala-pris"}],[193527854,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"desboss2-pris"}],[90243112,{"idx":40,"name":"des-rock-01","tpage_name":"desertb-vis-tfrag"}],[193527855,{"idx":47,"name":"jakchires-pants","tpage_name":"desboss2-pris"}],[90243113,{"idx":41,"name":"des-mount-01","tpage_name":"desertb-vis-tfrag"}],[90243114,{"idx":42,"name":"des-pole-brace","tpage_name":"desertb-vis-tfrag"}],[193527856,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"desboss2-pris"}],[208470016,{"idx":0,"name":"whack-scoreboard-0","tpage_name":"powergd-sprite"}],[171507762,{"idx":50,"name":"temple_sandstone_pill05","tpage_name":"templeb-vis-tfrag"}],[171507764,{"idx":52,"name":"temple_sandstone_wall01","tpage_name":"templeb-vis-tfrag"}],[122290301,{"idx":125,"name":"daxternose","tpage_name":"factoryb-vis-pris"}],[11796547,{"idx":67,"name":"city-ind-buldge-light-self-illuminated-03","tpage_name":"ctyinda-vis-tfrag"}],[115081289,{"idx":73,"name":"jakchires-eyelid","tpage_name":"desboss1-pris"}],[193593344,{"idx":0,"name":"racegate","tpage_name":"lbbring6-sprite"}],[55246853,{"idx":5,"name":"wascity-steel-bar","tpage_name":"wascityb-vis-shrub"}],[193724416,{"idx":0,"name":"environment-darkprec","tpage_name":"lprenme-pris"}],[193724417,{"idx":1,"name":"neo-wasp-base","tpage_name":"lprenme-pris"}],[193724418,{"idx":2,"name":"neo-wasp-body","tpage_name":"lprenme-pris"}],[193724419,{"idx":3,"name":"neo-wasp-brown","tpage_name":"lprenme-pris"}],[193724420,{"idx":4,"name":"neo-wasp-dark-brown","tpage_name":"lprenme-pris"}],[181403666,{"idx":18,"name":"catapult-body-under","tpage_name":"desjump-pris"}],[186384386,{"idx":2,"name":"des-bridge-bar-01","tpage_name":"desertf-vis-pris"}],[177668126,{"idx":30,"name":"cmn-precursor-plainstripe","tpage_name":"railcst-tfrag"}],[171442226,{"idx":50,"name":"environment-darkprec","tpage_name":"templea-vis-tfrag"}],[170197046,{"idx":54,"name":"samosbird-wing","tpage_name":"outrocst-pris2"}],[193724421,{"idx":5,"name":"neo-wasp-eye","tpage_name":"lprenme-pris"}],[193724422,{"idx":6,"name":"dm-ship-cockpit-01","tpage_name":"lprenme-pris"}],[193724423,{"idx":7,"name":"dm-ship-hull-01","tpage_name":"lprenme-pris"}],[193724424,{"idx":8,"name":"dm-ship-hull-02","tpage_name":"lprenme-pris"}],[193724425,{"idx":9,"name":"dm-ship-nose-01","tpage_name":"lprenme-pris"}],[193724426,{"idx":10,"name":"dm-ship-nose-02","tpage_name":"lprenme-pris"}],[193724427,{"idx":11,"name":"dm-ship-plate-01","tpage_name":"lprenme-pris"}],[193724428,{"idx":12,"name":"dm-ship-tentacle-01","tpage_name":"lprenme-pris"}],[189005900,{"idx":76,"name":"kg-grunt-rim-02","tpage_name":"factoryd-vis-pris"}],[208928780,{"idx":12,"name":"terraformer-metal-11","tpage_name":"precurd-vis-pris2"}],[193986579,{"idx":19,"name":"seem-precmetal-chestplate-01","tpage_name":"templed-vis-pris2"}],[197722119,{"idx":7,"name":"cguard1-lens","tpage_name":"lfacrm2-pris"}],[193986580,{"idx":20,"name":"seem-precmetal-edge","tpage_name":"templed-vis-pris2"}],[197722120,{"idx":8,"name":"cguardgame-backplate","tpage_name":"lfacrm2-pris"}],[193986581,{"idx":21,"name":"seem-precmetal-plain","tpage_name":"templed-vis-pris2"}],[197722121,{"idx":9,"name":"cguardgame-metaledark-02","tpage_name":"lfacrm2-pris"}],[189005906,{"idx":82,"name":"spydroid-gold","tpage_name":"factoryd-vis-pris"}],[208928786,{"idx":18,"name":"terraformer-organic-05","tpage_name":"precurd-vis-pris2"}],[193986585,{"idx":25,"name":"seem-teeth","tpage_name":"templed-vis-pris2"}],[197722125,{"idx":13,"name":"kg-grunt-cable-01","tpage_name":"lfacrm2-pris"}],[197722126,{"idx":14,"name":"kg-grunt-rim-01","tpage_name":"lfacrm2-pris"}],[193986586,{"idx":26,"name":"seem-uppertorso","tpage_name":"templed-vis-pris2"}],[189005907,{"idx":83,"name":"spydroid-leg-grey","tpage_name":"factoryd-vis-pris"}],[208928787,{"idx":19,"name":"terraformer-tank-01","tpage_name":"precurd-vis-pris2"}],[171638789,{"idx":5,"name":"temple_sandstone_dtale02","tpage_name":"templed-vis-tfrag"}],[194052111,{"idx":15,"name":"marauder-metal-plate","tpage_name":"deschase-pris"}],[171769974,{"idx":118,"name":"temple_metal02","tpage_name":"templea-vis-pris"}],[171638790,{"idx":6,"name":"temple_sandstone_ground02","tpage_name":"templed-vis-tfrag"}],[194052112,{"idx":16,"name":"marauder-shoe-bottom","tpage_name":"deschase-pris"}],[194052113,{"idx":17,"name":"marauder-skin","tpage_name":"deschase-pris"}],[125829120,{"idx":0,"name":"comm-centre-glow-02","tpage_name":"deshover-tfrag"}],[194052114,{"idx":18,"name":"marauder-skin-nipple","tpage_name":"deschase-pris"}],[125829121,{"idx":1,"name":"comm-centre-glow","tpage_name":"deshover-tfrag"}],[194052115,{"idx":19,"name":"marauder-skirt-01","tpage_name":"deschase-pris"}],[125829122,{"idx":2,"name":"comm-metal-01","tpage_name":"deshover-tfrag"}],[171638794,{"idx":10,"name":"temple_sandstone_out_01","tpage_name":"templed-vis-tfrag"}],[194052116,{"idx":20,"name":"marauder-skirt-02","tpage_name":"deschase-pris"}],[125829123,{"idx":3,"name":"comm-hose-01","tpage_name":"deshover-tfrag"}],[171638795,{"idx":11,"name":"templea_sandstone_brick01","tpage_name":"templed-vis-tfrag"}],[194052117,{"idx":21,"name":"marauder-spike","tpage_name":"deschase-pris"}],[125829124,{"idx":4,"name":"comm-metal-02","tpage_name":"deshover-tfrag"}],[175374338,{"idx":2,"name":"hud-small-vehicle-health-bar-02","tpage_name":"comba-minimap"}],[171638798,{"idx":14,"name":"lt-eco-vent-blue-01","tpage_name":"templed-vis-tfrag"}],[171638799,{"idx":15,"name":"lt-eco-vent-side-01","tpage_name":"templed-vis-tfrag"}],[171638800,{"idx":16,"name":"min-env-mar-01","tpage_name":"templed-vis-tfrag"}],[171638801,{"idx":17,"name":"minc-01","tpage_name":"templed-vis-tfrag"}],[171638803,{"idx":19,"name":"minc-pre-04","tpage_name":"templed-vis-tfrag"}],[171638804,{"idx":20,"name":"minc-pre-11","tpage_name":"templed-vis-tfrag"}],[171638805,{"idx":21,"name":"warpgate-circuitpattern2","tpage_name":"templed-vis-tfrag"}],[134676551,{"idx":71,"name":"rub-stad-brick","tpage_name":"rubblec-vis-tfrag"}],[171638806,{"idx":22,"name":"warpgate-precursormetal","tpage_name":"templed-vis-tfrag"}],[134676552,{"idx":72,"name":"rub-wall-gen-04","tpage_name":"rubblec-vis-tfrag"}],[186515464,{"idx":8,"name":"hood01","tpage_name":"lctyblow-pris"}],[189005824,{"idx":0,"name":"bam-eyelight","tpage_name":"factoryd-vis-pris"}],[222167068,{"idx":28,"name":"war-autoeye","tpage_name":"museum4-tfrag"}],[134676553,{"idx":73,"name":"rub-wall-gen-02","tpage_name":"rubblec-vis-tfrag"}],[222167069,{"idx":29,"name":"flut-eye-16x16","tpage_name":"museum4-tfrag"}],[222167070,{"idx":30,"name":"flut-eyelid","tpage_name":"museum4-tfrag"}],[222167071,{"idx":31,"name":"blady-lense","tpage_name":"museum4-tfrag"}],[222167072,{"idx":32,"name":"blady-mouthtop","tpage_name":"museum4-tfrag"}],[194052132,{"idx":36,"name":"vehicle-gun-box-01","tpage_name":"deschase-pris"}],[205258752,{"idx":0,"name":"ceiling-dust","tpage_name":"waspala-sprite"}],[222167073,{"idx":33,"name":"blady-hat","tpage_name":"museum4-tfrag"}],[194052133,{"idx":37,"name":"vehicle-metal-plate-01","tpage_name":"deschase-pris"}],[205258753,{"idx":1,"name":"dust-sparkle","tpage_name":"waspala-sprite"}],[222167074,{"idx":34,"name":"blady-hatplain","tpage_name":"museum4-tfrag"}],[194052134,{"idx":38,"name":"vehicle-toad-exhaust-01","tpage_name":"deschase-pris"}],[222167075,{"idx":35,"name":"blady-hateye","tpage_name":"museum4-tfrag"}],[48758835,{"idx":51,"name":"sewer-plate-03-hitweak","tpage_name":"sewc-vis-tfrag"}],[222167076,{"idx":36,"name":"blady-hatseamend","tpage_name":"museum4-tfrag"}],[48758836,{"idx":52,"name":"sewer-big-brace-trim-01","tpage_name":"sewc-vis-tfrag"}],[194052136,{"idx":40,"name":"vehicle-wheel-01","tpage_name":"deschase-pris"}],[222167077,{"idx":37,"name":"blady-hateyecenter","tpage_name":"museum4-tfrag"}],[48758837,{"idx":53,"name":"sewer-big-brace-trim-02","tpage_name":"sewc-vis-tfrag"}],[194052137,{"idx":41,"name":"vehicle-wheel-blur-01","tpage_name":"deschase-pris"}],[222167078,{"idx":38,"name":"farmer-flesh4x4","tpage_name":"museum4-tfrag"}],[194052138,{"idx":42,"name":"catapult-body-under","tpage_name":"deschase-pris"}],[222167079,{"idx":39,"name":"blady-brownleather","tpage_name":"museum4-tfrag"}],[194052139,{"idx":43,"name":"catapult-bone-spike","tpage_name":"deschase-pris"}],[186515476,{"idx":20,"name":"kg-pickup-pipe","tpage_name":"lctyblow-pris"}],[189005836,{"idx":12,"name":"errolcyber-fingers","tpage_name":"factoryd-vis-pris"}],[222167080,{"idx":40,"name":"blady-belt","tpage_name":"museum4-tfrag"}],[153944087,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"ldmpckgn-pris2"}],[186515477,{"idx":21,"name":"kg-pickup-sidelogo","tpage_name":"lctyblow-pris"}],[189005837,{"idx":13,"name":"errolcyber-glovepalm","tpage_name":"factoryd-vis-pris"}],[224067586,{"idx":2,"name":"common-glass","tpage_name":"museum4-water"}],[222167081,{"idx":41,"name":"farmer-teeth","tpage_name":"museum4-tfrag"}],[186515478,{"idx":22,"name":"kg-pickup-wings01","tpage_name":"lctyblow-pris"}],[189005838,{"idx":14,"name":"errolcyber-greyknobs","tpage_name":"factoryd-vis-pris"}],[224067587,{"idx":3,"name":"common-gray-dark","tpage_name":"museum4-water"}],[222167082,{"idx":42,"name":"blady-shirt","tpage_name":"museum4-tfrag"}],[194052142,{"idx":46,"name":"catapult-brass-pipe01","tpage_name":"deschase-pris"}],[186515479,{"idx":23,"name":"kg-pickup-wings02","tpage_name":"lctyblow-pris"}],[189005839,{"idx":15,"name":"errolcyber-greymetal","tpage_name":"factoryd-vis-pris"}],[222167083,{"idx":43,"name":"blady-diaper","tpage_name":"museum4-tfrag"}],[48758843,{"idx":59,"name":"sewer-red-light-01","tpage_name":"sewc-vis-tfrag"}],[194052143,{"idx":47,"name":"catapult-cap-pin-01","tpage_name":"deschase-pris"}],[186515480,{"idx":24,"name":"light01","tpage_name":"lctyblow-pris"}],[193986560,{"idx":0,"name":"bam-eyelight","tpage_name":"templed-vis-pris2"}],[189005840,{"idx":16,"name":"errolcyber-greymetal-02","tpage_name":"factoryd-vis-pris"}],[222167084,{"idx":44,"name":"farmer-whitestraps","tpage_name":"museum4-tfrag"}],[48758844,{"idx":60,"name":"sewer-red-light-02","tpage_name":"sewc-vis-tfrag"}],[194052144,{"idx":48,"name":"catapult-gun-box-01","tpage_name":"deschase-pris"}],[186515481,{"idx":25,"name":"lightCase01","tpage_name":"lctyblow-pris"}],[193986561,{"idx":1,"name":"environment-oldmetal","tpage_name":"templed-vis-pris2"}],[189005841,{"idx":17,"name":"errolcyber-hair","tpage_name":"factoryd-vis-pris"}],[222167085,{"idx":45,"name":"farmer-toes","tpage_name":"museum4-tfrag"}],[48758845,{"idx":61,"name":"sewer-brick-roof-05","tpage_name":"sewc-vis-tfrag"}],[194052145,{"idx":49,"name":"catapult-metal-part-01","tpage_name":"deschase-pris"}],[186515482,{"idx":26,"name":"post01","tpage_name":"lctyblow-pris"}],[193986562,{"idx":2,"name":"seem-arm","tpage_name":"templed-vis-pris2"}],[189005842,{"idx":18,"name":"errolcyber-head-01","tpage_name":"factoryd-vis-pris"}],[222167086,{"idx":46,"name":"blady-feaTher","tpage_name":"museum4-tfrag"}],[135462966,{"idx":54,"name":"daxterbodyshort-eix","tpage_name":"rubblea-vis-pris"}],[48758846,{"idx":62,"name":"sewer-metal-floor-02","tpage_name":"sewc-vis-tfrag"}],[194052146,{"idx":50,"name":"catapult-metal-plate-01","tpage_name":"deschase-pris"}],[193986563,{"idx":3,"name":"seem-bootbottom","tpage_name":"templed-vis-pris2"}],[186515483,{"idx":27,"name":"rail01","tpage_name":"lctyblow-pris"}],[189005843,{"idx":19,"name":"errolcyber-head-02","tpage_name":"factoryd-vis-pris"}],[222167087,{"idx":47,"name":"blady-metal","tpage_name":"museum4-tfrag"}],[135462967,{"idx":55,"name":"daxterbolt","tpage_name":"rubblea-vis-pris"}],[48758847,{"idx":63,"name":"sewer-block-02-hitweak","tpage_name":"sewc-vis-tfrag"}],[194052147,{"idx":51,"name":"catapult-panel-face","tpage_name":"deschase-pris"}],[186515484,{"idx":28,"name":"seat01","tpage_name":"lctyblow-pris"}],[193986564,{"idx":4,"name":"seem-bootleg","tpage_name":"templed-vis-pris2"}],[189005844,{"idx":20,"name":"errolcyber-insidemouth","tpage_name":"factoryd-vis-pris"}],[222167088,{"idx":48,"name":"blady-bag","tpage_name":"museum4-tfrag"}],[194052148,{"idx":52,"name":"catapult-panel-pattern-01","tpage_name":"deschase-pris"}],[186515485,{"idx":29,"name":"stripe03","tpage_name":"lctyblow-pris"}],[193986565,{"idx":5,"name":"seem-bootlower","tpage_name":"templed-vis-pris2"}],[189005845,{"idx":21,"name":"errolcyber-insidewires","tpage_name":"factoryd-vis-pris"}],[222167089,{"idx":49,"name":"blady-brown4x4","tpage_name":"museum4-tfrag"}],[135462969,{"idx":57,"name":"daxterfinger","tpage_name":"rubblea-vis-pris"}],[50659354,{"idx":26,"name":"fora-citywall-frame","tpage_name":"foresta-vis-tfrag"}],[48758849,{"idx":65,"name":"sewer-small-light-01","tpage_name":"sewc-vis-tfrag"}],[194052149,{"idx":53,"name":"catapult-panel-small","tpage_name":"deschase-pris"}],[186515486,{"idx":30,"name":"turret01","tpage_name":"lctyblow-pris"}],[193986566,{"idx":6,"name":"seem-bootmet","tpage_name":"templed-vis-pris2"}],[189005846,{"idx":22,"name":"errolcyber-jointpipe","tpage_name":"factoryd-vis-pris"}],[222167090,{"idx":50,"name":"blady-armband","tpage_name":"museum4-tfrag"}],[50659355,{"idx":27,"name":"fora-citywall","tpage_name":"foresta-vis-tfrag"}],[48758850,{"idx":66,"name":"sewer-metal-block-02","tpage_name":"sewc-vis-tfrag"}],[194052150,{"idx":54,"name":"catapult-wood-arm-01","tpage_name":"deschase-pris"}],[186515487,{"idx":31,"name":"wing01","tpage_name":"lctyblow-pris"}],[193986567,{"idx":7,"name":"seem-boottoe","tpage_name":"templed-vis-pris2"}],[189005847,{"idx":23,"name":"errolcyber-metalgold","tpage_name":"factoryd-vis-pris"}],[222167091,{"idx":51,"name":"blady-eyecentered-32x32","tpage_name":"museum4-tfrag"}],[50659356,{"idx":28,"name":"fora-metal-green-02","tpage_name":"foresta-vis-tfrag"}],[48758851,{"idx":67,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewc-vis-tfrag"}],[194052151,{"idx":55,"name":"catapult-wood-rope","tpage_name":"deschase-pris"}],[186515488,{"idx":32,"name":"wing02","tpage_name":"lctyblow-pris"}],[193986568,{"idx":8,"name":"seem-ear","tpage_name":"templed-vis-pris2"}],[189005848,{"idx":24,"name":"errolcyber-pipes-01","tpage_name":"factoryd-vis-pris"}],[222167092,{"idx":52,"name":"blady-eyelid","tpage_name":"museum4-tfrag"}],[50659357,{"idx":29,"name":"fora-metal-green-main","tpage_name":"foresta-vis-tfrag"}],[48758852,{"idx":68,"name":"sewer-mantel-02","tpage_name":"sewc-vis-tfrag"}],[194052152,{"idx":56,"name":"catapult-wood-tip","tpage_name":"deschase-pris"}],[171638831,{"idx":47,"name":"temple_sandstone_pill03","tpage_name":"templed-vis-tfrag"}],[186515489,{"idx":33,"name":"wing02grey01","tpage_name":"lctyblow-pris"}],[193986569,{"idx":9,"name":"seem-eye","tpage_name":"templed-vis-pris2"}],[189005849,{"idx":25,"name":"errolcyber-pipes-02","tpage_name":"factoryd-vis-pris"}],[135462973,{"idx":61,"name":"daxterheadwidenew","tpage_name":"rubblea-vis-pris"}],[50659358,{"idx":30,"name":"fora-metal-wallgrill","tpage_name":"foresta-vis-tfrag"}],[48758853,{"idx":69,"name":"sewer-flat-pipe-01-hitweak","tpage_name":"sewc-vis-tfrag"}],[194052153,{"idx":57,"name":"rhino-horn-01","tpage_name":"deschase-pris"}],[186580992,{"idx":0,"name":"windshield01","tpage_name":"lctyblow-water"}],[171638832,{"idx":48,"name":"temple_sandstone_star01","tpage_name":"templed-vis-tfrag"}],[70254595,{"idx":3,"name":"map-nst-upper-2","tpage_name":"nsta-minimap"}],[1114234,{"idx":122,"name":"comb-03","tpage_name":"progress-minimap"}],[14811214,{"idx":78,"name":"tcab-beam-bolt01","tpage_name":"ctygenb-vis-tfrag"}],[193986570,{"idx":10,"name":"seem-eyelid","tpage_name":"templed-vis-pris2"}],[189005850,{"idx":26,"name":"errolcyber-pipes-03","tpage_name":"factoryd-vis-pris"}],[50659359,{"idx":31,"name":"fora-foliage","tpage_name":"foresta-vis-tfrag"}],[48758854,{"idx":70,"name":"sewer-metal-edge-01","tpage_name":"sewc-vis-tfrag"}],[194052154,{"idx":58,"name":"rhino-metal-01","tpage_name":"deschase-pris"}],[193986571,{"idx":11,"name":"seem-face","tpage_name":"templed-vis-pris2"}],[189005851,{"idx":27,"name":"errolcyber-redmetal-01","tpage_name":"factoryd-vis-pris"}],[50659360,{"idx":32,"name":"fora-small-bottom","tpage_name":"foresta-vis-tfrag"}],[48758855,{"idx":71,"name":"sewer-metal-trim-02-hitweak","tpage_name":"sewc-vis-tfrag"}],[194052155,{"idx":59,"name":"vehicle-exhaust-pipe-01","tpage_name":"deschase-pris"}],[171638834,{"idx":50,"name":"temple_pre-01","tpage_name":"templed-vis-tfrag"}],[193986572,{"idx":12,"name":"seem-finger","tpage_name":"templed-vis-pris2"}],[197722112,{"idx":0,"name":"bam-eyelight","tpage_name":"lfacrm2-pris"}],[189005852,{"idx":28,"name":"errolcyber-redmetal-02","tpage_name":"factoryd-vis-pris"}],[50659361,{"idx":33,"name":"fora-grass-patch","tpage_name":"foresta-vis-tfrag"}],[194052156,{"idx":60,"name":"vehicle-wire-01","tpage_name":"deschase-pris"}],[171638836,{"idx":52,"name":"temple_pre-04","tpage_name":"templed-vis-tfrag"}],[193986574,{"idx":14,"name":"seem-headgearback","tpage_name":"templed-vis-pris2"}],[197722114,{"idx":2,"name":"brown-hose","tpage_name":"lfacrm2-pris"}],[189005854,{"idx":30,"name":"errolcyber-rubberpipe","tpage_name":"factoryd-vis-pris"}],[50659363,{"idx":35,"name":"fora-endblocks","tpage_name":"foresta-vis-tfrag"}],[194052158,{"idx":62,"name":"intcept-b-base-green01","tpage_name":"deschase-pris"}],[171638837,{"idx":53,"name":"temple_pre-03","tpage_name":"templed-vis-tfrag"}],[194052159,{"idx":63,"name":"intcept-b-base-patern01","tpage_name":"deschase-pris"}],[171638838,{"idx":54,"name":"common_sandstone_ground01","tpage_name":"templed-vis-tfrag"}],[50659365,{"idx":37,"name":"fora-grass-to-mud","tpage_name":"foresta-vis-tfrag"}],[194052160,{"idx":64,"name":"intcept-b-base-patern02","tpage_name":"deschase-pris"}],[171638839,{"idx":55,"name":"common_sandstone_taper01","tpage_name":"templed-vis-tfrag"}],[193986577,{"idx":17,"name":"seem-pipes-01","tpage_name":"templed-vis-pris2"}],[198967297,{"idx":1,"name":"terraformer-cpitwindows-01","tpage_name":"desboss2-water"}],[197722117,{"idx":5,"name":"cguard1-gunmetaldark2","tpage_name":"lfacrm2-pris"}],[189005857,{"idx":33,"name":"errolcyber-teeth","tpage_name":"factoryd-vis-pris"}],[194052161,{"idx":65,"name":"intcept-b-gun01","tpage_name":"deschase-pris"}],[194052163,{"idx":67,"name":"intcept-b-teeth01","tpage_name":"deschase-pris"}],[117637207,{"idx":87,"name":"jakc-wraps","tpage_name":"destrack-pris"}],[117637210,{"idx":90,"name":"jakchires-blackstrap","tpage_name":"destrack-pris"}],[121438231,{"idx":23,"name":"mh-flyer-metal-01","tpage_name":"desbattl-pris"}],[189333525,{"idx":21,"name":"common-black","tpage_name":"comba-shrub"}],[195559425,{"idx":1,"name":"bam-hairhilite","tpage_name":"towercst-pris2"}],[142016549,{"idx":37,"name":"facc-beam-02","tpage_name":"lfacrm2-tfrag"}],[194445372,{"idx":60,"name":"brace01","tpage_name":"gridcst-pris"}],[208142352,{"idx":16,"name":"terraformer-organic-03","tpage_name":"desboss1-pris2"}],[189333526,{"idx":22,"name":"vehicle-cushion-01","tpage_name":"comba-shrub"}],[195559426,{"idx":2,"name":"charHOLD","tpage_name":"towercst-pris2"}],[142016550,{"idx":38,"name":"facc-big-metal-panl01","tpage_name":"lfacrm2-tfrag"}],[57212935,{"idx":7,"name":"wascitya-flag-b","tpage_name":"waswide-vis-tfrag"}],[194445373,{"idx":61,"name":"carafront01","tpage_name":"gridcst-pris"}],[208142353,{"idx":17,"name":"terraformer-organic-04","tpage_name":"desboss1-pris2"}],[189333527,{"idx":23,"name":"vehicle-snake-gun-01","tpage_name":"comba-shrub"}],[195559427,{"idx":3,"name":"environment-oldmetal","tpage_name":"towercst-pris2"}],[142016551,{"idx":39,"name":"facc-metal-panel-07","tpage_name":"lfacrm2-tfrag"}],[57212936,{"idx":8,"name":"wascity-metal-piece-02","tpage_name":"waswide-vis-tfrag"}],[194445374,{"idx":62,"name":"carawing01","tpage_name":"gridcst-pris"}],[208142354,{"idx":18,"name":"terraformer-organic-05","tpage_name":"desboss1-pris2"}],[189333528,{"idx":24,"name":"vehicle-rims-01","tpage_name":"comba-shrub"}],[195559428,{"idx":4,"name":"jinx-arm","tpage_name":"towercst-pris2"}],[57212937,{"idx":9,"name":"wascitya-flag-c","tpage_name":"waswide-vis-tfrag"}],[194445375,{"idx":63,"name":"cushion01","tpage_name":"gridcst-pris"}],[208142355,{"idx":19,"name":"terraformer-tank-01","tpage_name":"desboss1-pris2"}],[189333529,{"idx":25,"name":"vehicle-snake-drum-02","tpage_name":"comba-shrub"}],[195559429,{"idx":5,"name":"jinx-belt","tpage_name":"towercst-pris2"}],[142016553,{"idx":41,"name":"fac-elevator-side-01","tpage_name":"lfacrm2-tfrag"}],[57212938,{"idx":10,"name":"wascitya-flag-d","tpage_name":"waswide-vis-tfrag"}],[70254593,{"idx":1,"name":"map-nst-upper","tpage_name":"nsta-minimap"}],[55312433,{"idx":49,"name":"tentacle-01","tpage_name":"wascityb-vis-pris"}],[194445376,{"idx":64,"name":"floorboard01","tpage_name":"gridcst-pris"}],[208142356,{"idx":20,"name":"terraformer-bluelight","tpage_name":"desboss1-pris2"}],[214368256,{"idx":0,"name":"bam-eyelight","tpage_name":"loninsim-pris"}],[189333530,{"idx":26,"name":"vehicle-snake-tank-01","tpage_name":"comba-shrub"}],[195559430,{"idx":6,"name":"jinx-blademetal","tpage_name":"towercst-pris2"}],[55312434,{"idx":50,"name":"tentacle-02","tpage_name":"wascityb-vis-pris"}],[194445377,{"idx":65,"name":"moter01","tpage_name":"gridcst-pris"}],[214368257,{"idx":1,"name":"bam-hairhilite","tpage_name":"loninsim-pris"}],[189333531,{"idx":27,"name":"vehicle-snake-drum-01","tpage_name":"comba-shrub"}],[195559431,{"idx":7,"name":"jinx-boottoe","tpage_name":"towercst-pris2"}],[194445378,{"idx":66,"name":"pipe01","tpage_name":"gridcst-pris"}],[214368258,{"idx":2,"name":"environment-oldmetal","tpage_name":"loninsim-pris"}],[129368072,{"idx":8,"name":"rub-met-strp-close","tpage_name":"stadiumb-vis-shrub"}],[126877712,{"idx":16,"name":"cityslumc-metal-trim","tpage_name":"lfacrm1-tfrag"}],[195100706,{"idx":34,"name":"nwasp-gem-01","tpage_name":"lblowtkg-pris"}],[129368073,{"idx":9,"name":"rub-blotch-withstreaks-01","tpage_name":"stadiumb-vis-shrub"}],[126877713,{"idx":17,"name":"lfacrm-plate-01","tpage_name":"lfacrm1-tfrag"}],[195100707,{"idx":35,"name":"nwasp-hose","tpage_name":"lblowtkg-pris"}],[129368074,{"idx":10,"name":"rub-stain-02","tpage_name":"stadiumb-vis-shrub"}],[126877714,{"idx":18,"name":"lfacrm-plate-05","tpage_name":"lfacrm1-tfrag"}],[195100708,{"idx":36,"name":"nwasp-metal-01","tpage_name":"lblowtkg-pris"}],[129368075,{"idx":11,"name":"rub-overlay-bullethole-b","tpage_name":"stadiumb-vis-shrub"}],[126877715,{"idx":19,"name":"freehq-gray-metal-disc08","tpage_name":"lfacrm1-tfrag"}],[195100709,{"idx":37,"name":"nwasp-skin-01","tpage_name":"lblowtkg-pris"}],[129368076,{"idx":12,"name":"rub-overlay-bullethole-c","tpage_name":"stadiumb-vis-shrub"}],[126877716,{"idx":20,"name":"lfacrm-rivet-metal-01","tpage_name":"lfacrm1-tfrag"}],[195100710,{"idx":38,"name":"nwasp-skin-02","tpage_name":"lblowtkg-pris"}],[129368077,{"idx":13,"name":"rub-overlay-bullethole-a","tpage_name":"stadiumb-vis-shrub"}],[126877717,{"idx":21,"name":"lfacrm-rubber-01","tpage_name":"lfacrm1-tfrag"}],[195100711,{"idx":39,"name":"nwasp-skin-03","tpage_name":"lblowtkg-pris"}],[129368078,{"idx":14,"name":"rub-scorch","tpage_name":"stadiumb-vis-shrub"}],[126877718,{"idx":22,"name":"lfacrm-yellow-metal-01","tpage_name":"lfacrm1-tfrag"}],[195100712,{"idx":40,"name":"homing-missle-body","tpage_name":"lblowtkg-pris"}],[129368079,{"idx":15,"name":"rub-statue-stone-01","tpage_name":"stadiumb-vis-shrub"}],[126877719,{"idx":23,"name":"lfacrm-pbox-01","tpage_name":"lfacrm1-tfrag"}],[195100713,{"idx":41,"name":"homing-missle-body-tip","tpage_name":"lblowtkg-pris"}],[195100714,{"idx":42,"name":"homing-missle-exhaust","tpage_name":"lblowtkg-pris"}],[195100715,{"idx":43,"name":"homing-missle-fin-01","tpage_name":"lblowtkg-pris"}],[195100716,{"idx":44,"name":"bombot-darkgrey-01","tpage_name":"lblowtkg-pris"}],[195100717,{"idx":45,"name":"bombot-darkgrey-02","tpage_name":"lblowtkg-pris"}],[126877724,{"idx":28,"name":"lfacrm-yellow-metalrim-01","tpage_name":"lfacrm1-tfrag"}],[195100718,{"idx":46,"name":"bombot-gearsides","tpage_name":"lblowtkg-pris"}],[195100719,{"idx":47,"name":"bombot-greybarrelend","tpage_name":"lblowtkg-pris"}],[195100720,{"idx":48,"name":"bombot-greybarrelside","tpage_name":"lblowtkg-pris"}],[195100721,{"idx":49,"name":"bombot-guards","tpage_name":"lblowtkg-pris"}],[195100722,{"idx":50,"name":"bombot-guntop","tpage_name":"lblowtkg-pris"}],[195100723,{"idx":51,"name":"bombot-insidegun","tpage_name":"lblowtkg-pris"}],[126877730,{"idx":34,"name":"ctyslumc-overhang-01","tpage_name":"lfacrm1-tfrag"}],[211288064,{"idx":0,"name":"tow-wall-supports","tpage_name":"towercst-shrub"}],[195100724,{"idx":52,"name":"bombot-joint","tpage_name":"lblowtkg-pris"}],[126877731,{"idx":35,"name":"freehq-gray-metal-disc01","tpage_name":"lfacrm1-tfrag"}],[171507724,{"idx":12,"name":"temple_sandstone_pill01","tpage_name":"templeb-vis-tfrag"}],[223150095,{"idx":15,"name":"daxterlense","tpage_name":"rublcst-vis-pris"}],[211288065,{"idx":1,"name":"tow-groundpod","tpage_name":"towercst-shrub"}],[195100725,{"idx":53,"name":"bombot-lens","tpage_name":"lblowtkg-pris"}],[171507725,{"idx":13,"name":"temple_sandstone_stepside01","tpage_name":"templeb-vis-tfrag"}],[223150096,{"idx":16,"name":"daxternose","tpage_name":"rublcst-vis-pris"}],[211288066,{"idx":2,"name":"tow-eggside-01","tpage_name":"towercst-shrub"}],[195100726,{"idx":54,"name":"bombot-post01","tpage_name":"lblowtkg-pris"}],[195100727,{"idx":55,"name":"bombot-rail01","tpage_name":"lblowtkg-pris"}],[195100728,{"idx":56,"name":"bombot-redplate-01","tpage_name":"lblowtkg-pris"}],[195100729,{"idx":57,"name":"bombot-rimgrey","tpage_name":"lblowtkg-pris"}],[126877736,{"idx":40,"name":"common-black","tpage_name":"lfacrm1-tfrag"}],[195100730,{"idx":58,"name":"bombot-roundend","tpage_name":"lblowtkg-pris"}],[195100731,{"idx":59,"name":"bombot-turret01","tpage_name":"lblowtkg-pris"}],[126877738,{"idx":42,"name":"lfacrm-pipe-01","tpage_name":"lfacrm1-tfrag"}],[195100732,{"idx":60,"name":"bombot-wheel","tpage_name":"lblowtkg-pris"}],[126877739,{"idx":43,"name":"lfacrm-plate-04","tpage_name":"lfacrm1-tfrag"}],[195100733,{"idx":61,"name":"kg-grunt-cable-01","tpage_name":"lblowtkg-pris"}],[126877740,{"idx":44,"name":"lfacrm-box-01","tpage_name":"lfacrm1-tfrag"}],[195100734,{"idx":62,"name":"kg-grunt-rim-03","tpage_name":"lblowtkg-pris"}],[126877741,{"idx":45,"name":"lfacrm-metal-panel-08","tpage_name":"lfacrm1-tfrag"}],[193986578,{"idx":18,"name":"seem-pipes-02","tpage_name":"templed-vis-pris2"}],[198967298,{"idx":2,"name":"terraformer-cpitwindows-02","tpage_name":"desboss2-water"}],[197722118,{"idx":6,"name":"cguard1-guntube","tpage_name":"lfacrm2-pris"}],[189005858,{"idx":34,"name":"blue-gem","tpage_name":"factoryd-vis-pris"}],[194052162,{"idx":66,"name":"intcept-b-pipe01","tpage_name":"deschase-pris"}],[195166215,{"idx":7,"name":"cty-grunt-eye-01","tpage_name":"lblowtmh-pris"}],[195166217,{"idx":9,"name":"cty-grunt-hose","tpage_name":"lblowtmh-pris"}],[195166218,{"idx":10,"name":"cty-grunt-metal-01","tpage_name":"lblowtmh-pris"}],[195166219,{"idx":11,"name":"cty-grunt-skin-01","tpage_name":"lblowtmh-pris"}],[190316545,{"idx":1,"name":"rail-base-dark-01","tpage_name":"railcst-shrub"}],[171638845,{"idx":61,"name":"tpl-door-face-01","tpage_name":"templed-vis-tfrag"}],[195166220,{"idx":12,"name":"cty-grunt-skin-02","tpage_name":"lblowtmh-pris"}],[190316546,{"idx":2,"name":"rail-rider-decal-01","tpage_name":"railcst-shrub"}],[171638846,{"idx":62,"name":"temple_sandstone_pill05","tpage_name":"templed-vis-tfrag"}],[195166221,{"idx":13,"name":"cty-grunt-skin-03","tpage_name":"lblowtmh-pris"}],[190316547,{"idx":3,"name":"rail-pipe-03","tpage_name":"railcst-shrub"}],[171638847,{"idx":63,"name":"temple_sandstone_ground03","tpage_name":"templed-vis-tfrag"}],[195166222,{"idx":14,"name":"cty-grunt-teeth-01","tpage_name":"lblowtmh-pris"}],[190316548,{"idx":4,"name":"rail-dash-01","tpage_name":"railcst-shrub"}],[171638848,{"idx":64,"name":"temple_sandstone_pill06","tpage_name":"templed-vis-tfrag"}],[195166223,{"idx":15,"name":"bam-eyelight","tpage_name":"lblowtmh-pris"}],[190316549,{"idx":5,"name":"rail-gray-metal-01","tpage_name":"railcst-shrub"}],[171638849,{"idx":65,"name":"temple_sandstone_taper01","tpage_name":"templed-vis-tfrag"}],[195166224,{"idx":16,"name":"blue-gem","tpage_name":"lblowtmh-pris"}],[174129210,{"idx":58,"name":"daxter-eyelid","tpage_name":"loutro-pris2"}],[190316550,{"idx":6,"name":"rail-car-vent-01","tpage_name":"railcst-shrub"}],[171638850,{"idx":66,"name":"temple_metal04","tpage_name":"templed-vis-tfrag"}],[195166225,{"idx":17,"name":"brown-hose","tpage_name":"lblowtmh-pris"}],[174129211,{"idx":59,"name":"daxter-furhilite","tpage_name":"loutro-pris2"}],[190316551,{"idx":7,"name":"rail-chair-01","tpage_name":"railcst-shrub"}],[171638851,{"idx":67,"name":"temple_sandstone_ground04","tpage_name":"templed-vis-tfrag"}],[195166226,{"idx":18,"name":"cguard1-backmetal","tpage_name":"lblowtmh-pris"}],[174129212,{"idx":60,"name":"daxterteeth","tpage_name":"loutro-pris2"}],[190316552,{"idx":8,"name":"rail-light-blue","tpage_name":"railcst-shrub"}],[171638852,{"idx":68,"name":"temple_sandstone_ground01","tpage_name":"templed-vis-tfrag"}],[195166227,{"idx":19,"name":"cguard1-chestplate","tpage_name":"lblowtmh-pris"}],[174129213,{"idx":61,"name":"prec-veger-body","tpage_name":"loutro-pris2"}],[171638853,{"idx":69,"name":"environment-darkprec","tpage_name":"templed-vis-tfrag"}],[195166228,{"idx":20,"name":"cguard1-guntube","tpage_name":"lblowtmh-pris"}],[174129214,{"idx":62,"name":"prec-veger-ear","tpage_name":"loutro-pris2"}],[190316554,{"idx":10,"name":"rail-light-green","tpage_name":"railcst-shrub"}],[171638854,{"idx":70,"name":"dk-eco-vent-glow-01","tpage_name":"templed-vis-tfrag"}],[195166229,{"idx":21,"name":"cguard1-lens","tpage_name":"lblowtmh-pris"}],[174129215,{"idx":63,"name":"prec-veger-foot","tpage_name":"loutro-pris2"}],[171638855,{"idx":71,"name":"dk-eco-vent-side-01","tpage_name":"templed-vis-tfrag"}],[195166230,{"idx":22,"name":"cguardgame-backplate","tpage_name":"lblowtmh-pris"}],[195166231,{"idx":23,"name":"cguardgame-metallight-01small","tpage_name":"lblowtmh-pris"}],[195166232,{"idx":24,"name":"cguardgame-shoebottom","tpage_name":"lblowtmh-pris"}],[197722136,{"idx":24,"name":"widow-pod-gun-metal","tpage_name":"lfacrm2-pris"}],[189005876,{"idx":52,"name":"brown-hose","tpage_name":"factoryd-vis-pris"}],[195166233,{"idx":25,"name":"environment-oldmetal","tpage_name":"lblowtmh-pris"}],[197722137,{"idx":25,"name":"wire-metal","tpage_name":"lfacrm2-pris"}],[189005877,{"idx":53,"name":"cguard1-backmetal","tpage_name":"factoryd-vis-pris"}],[195166234,{"idx":26,"name":"roboguard-die-stamped-metal-blue","tpage_name":"lblowtmh-pris"}],[197722138,{"idx":26,"name":"squid-drabgun","tpage_name":"lfacrm2-pris"}],[189005878,{"idx":54,"name":"cguard1-chestplate","tpage_name":"factoryd-vis-pris"}],[195166235,{"idx":27,"name":"roboguard-headshield","tpage_name":"lblowtmh-pris"}],[189005879,{"idx":55,"name":"cguard1-gunmetaldark2","tpage_name":"factoryd-vis-pris"}],[195166236,{"idx":28,"name":"roboguard-shouldershield","tpage_name":"lblowtmh-pris"}],[189005880,{"idx":56,"name":"cguard1-guntube","tpage_name":"factoryd-vis-pris"}],[195166237,{"idx":29,"name":"widow-pod-gun-metal","tpage_name":"lblowtmh-pris"}],[189005881,{"idx":57,"name":"cguard1-lens","tpage_name":"factoryd-vis-pris"}],[195166238,{"idx":30,"name":"wire-metal","tpage_name":"lblowtmh-pris"}],[195493923,{"idx":35,"name":"jakchires-clips","tpage_name":"towercst-pris"}],[195493924,{"idx":36,"name":"jakchires-eye","tpage_name":"towercst-pris"}],[195493925,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"towercst-pris"}],[195493926,{"idx":38,"name":"jakchires-eyelid","tpage_name":"towercst-pris"}],[195493927,{"idx":39,"name":"jakchires-facelft","tpage_name":"towercst-pris"}],[195493928,{"idx":40,"name":"jakchires-facert","tpage_name":"towercst-pris"}],[195493929,{"idx":41,"name":"jakchires-glovetop","tpage_name":"towercst-pris"}],[195493930,{"idx":42,"name":"jakchires-hair","tpage_name":"towercst-pris"}],[144506884,{"idx":4,"name":"dax-msl-lnch-clamp-01","tpage_name":"lpatkcs-tfrag"}],[145752064,{"idx":0,"name":"hud-vehicle-health-bar-01","tpage_name":"wasdefen-minimap"}],[195493931,{"idx":43,"name":"jakchires-horn","tpage_name":"towercst-pris"}],[195493932,{"idx":44,"name":"jakchires-jacket","tpage_name":"towercst-pris"}],[195493933,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"towercst-pris"}],[195493934,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"towercst-pris"}],[195493935,{"idx":47,"name":"jakchires-pants","tpage_name":"towercst-pris"}],[195493936,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"towercst-pris"}],[195493937,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"towercst-pris"}],[195493938,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"towercst-pris"}],[42467330,{"idx":2,"name":"wascity-blotch-withstreaks-01","tpage_name":"wasdoors-vis-shrub"}],[170196999,{"idx":7,"name":"ashelin-eye","tpage_name":"outrocst-pris2"}],[171442179,{"idx":3,"name":"temple_sandstone_base01","tpage_name":"templea-vis-tfrag"}],[188022801,{"idx":17,"name":"daxterteeth","tpage_name":"lvincst-pris"}],[223084550,{"idx":6,"name":"rail-env-wall-01","tpage_name":"rublcst-vis-shrub"}],[170197000,{"idx":8,"name":"ashelin-eyebrow","tpage_name":"outrocst-pris2"}],[172687360,{"idx":0,"name":"precur-window-glass","tpage_name":"precura-vis-water"}],[171442180,{"idx":4,"name":"templea_sandstone01","tpage_name":"templea-vis-tfrag"}],[188022802,{"idx":18,"name":"daxtertuft","tpage_name":"lvincst-pris"}],[223084551,{"idx":7,"name":"rail-base-dark-01","tpage_name":"rublcst-vis-shrub"}],[195493939,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"towercst-pris"}],[195493940,{"idx":52,"name":"jakchires-teeth","tpage_name":"towercst-pris"}],[222888057,{"idx":121,"name":"palcab-lowres-background-desert-to-shore","tpage_name":"lfacctyb-vis-tfrag"}],[181076023,{"idx":55,"name":"sig-shoulderarmor","tpage_name":"desbcst-pris2"}],[193527823,{"idx":15,"name":"daxterlense","tpage_name":"desboss2-pris"}],[195493941,{"idx":53,"name":"backThing01","tpage_name":"towercst-pris"}],[222888058,{"idx":122,"name":"palcab-lowres-background-crater-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076024,{"idx":56,"name":"sig-skirts","tpage_name":"desbcst-pris2"}],[193527824,{"idx":16,"name":"daxternose","tpage_name":"desboss2-pris"}],[195493942,{"idx":54,"name":"common-black","tpage_name":"towercst-pris"}],[42467334,{"idx":6,"name":"wascity-shrub-orange-01","tpage_name":"wasdoors-vis-shrub"}],[208928784,{"idx":16,"name":"terraformer-organic-03","tpage_name":"precurd-vis-pris2"}],[189005904,{"idx":80,"name":"roboguard-headshield","tpage_name":"factoryd-vis-pris"}],[213909504,{"idx":0,"name":"kg-rob-trans-tank-01","tpage_name":"lctyprot-water"}],[193527872,{"idx":64,"name":"errolcyber-bigshoulder","tpage_name":"desboss2-pris"}],[222888059,{"idx":123,"name":"palcab-smallpipe-lores","tpage_name":"lfacctyb-vis-tfrag"}],[181076025,{"idx":57,"name":"sig-skirts-02","tpage_name":"desbcst-pris2"}],[193527825,{"idx":17,"name":"daxterteeth","tpage_name":"desboss2-pris"}],[220528703,{"idx":63,"name":"bluesage-barrel","tpage_name":"museum4-pris"}],[49020968,{"idx":40,"name":"sewer-plate-02","tpage_name":"sewe-vis-tfrag"}],[222888060,{"idx":124,"name":"palcab-lowres-background-peaks-02","tpage_name":"lfacctyb-vis-tfrag"}],[181076026,{"idx":58,"name":"sig-skirts-03","tpage_name":"desbcst-pris2"}],[198508546,{"idx":2,"name":"des-waterfall-dest","tpage_name":"hanga-vis-water"}],[193527826,{"idx":18,"name":"daxtertuft","tpage_name":"desboss2-pris"}],[220528704,{"idx":64,"name":"bluesage-barreltop","tpage_name":"museum4-pris"}],[49020969,{"idx":41,"name":"sewer-plate-03","tpage_name":"sewe-vis-tfrag"}],[223084557,{"idx":13,"name":"rail-chair-01","tpage_name":"rublcst-vis-shrub"}],[220201081,{"idx":121,"name":"jak-teeth","tpage_name":"museum3-pris"}],[222888061,{"idx":125,"name":"palcab-lowres-background-mountains-02","tpage_name":"lfacctyb-vis-tfrag"}],[181076027,{"idx":59,"name":"sig-undergarments","tpage_name":"desbcst-pris2"}],[193527827,{"idx":19,"name":"environment-oldmetal","tpage_name":"desboss2-pris"}],[223084558,{"idx":14,"name":"rail-light-blue","tpage_name":"rublcst-vis-shrub"}],[220201082,{"idx":122,"name":"jakb-armor","tpage_name":"museum3-pris"}],[220528705,{"idx":65,"name":"bluesage-copperfixture","tpage_name":"museum4-pris"}],[49020970,{"idx":42,"name":"common-black","tpage_name":"sewe-vis-tfrag"}],[220528706,{"idx":66,"name":"bluesage-copperwire","tpage_name":"museum4-pris"}],[49020971,{"idx":43,"name":"sewer-concrete-edge-01","tpage_name":"sewe-vis-tfrag"}],[126877744,{"idx":48,"name":"lfacrm-tasphlt01","tpage_name":"lfacrm1-tfrag"}],[195493950,{"idx":62,"name":"hood01","tpage_name":"towercst-pris"}],[129171462,{"idx":6,"name":"sewer-block-01","tpage_name":"sewn-vis-tfrag"}],[195493951,{"idx":63,"name":"jetTop01","tpage_name":"towercst-pris"}],[129171468,{"idx":12,"name":"sewer-pipe-rim-08","tpage_name":"sewn-vis-tfrag"}],[170459148,{"idx":12,"name":"daxtergoggles","tpage_name":"ljkdxvin-pris"}],[171704328,{"idx":8,"name":"temple_metal02","tpage_name":"templec-vis-tfrag"}],[172949508,{"idx":4,"name":"daxter-orange","tpage_name":"precurd-vis-pris"}],[174194688,{"idx":0,"name":"bam-eyelight","tpage_name":"ljkfeet-pris"}],[137232434,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"citycast-pris"}],[129171469,{"idx":13,"name":"sewer-stone-newarch-01-lotweak","tpage_name":"sewn-vis-tfrag"}],[170459149,{"idx":13,"name":"daxterheadwidenew","tpage_name":"ljkdxvin-pris"}],[171704329,{"idx":9,"name":"wstd-torchbowl-coal-01","tpage_name":"templec-vis-tfrag"}],[172949509,{"idx":5,"name":"daxterarm","tpage_name":"precurd-vis-pris"}],[174194689,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljkfeet-pris"}],[137232435,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"citycast-pris"}],[170459150,{"idx":14,"name":"daxterhelmetplain","tpage_name":"ljkdxvin-pris"}],[171704330,{"idx":10,"name":"temple_sandstone_base01","tpage_name":"templec-vis-tfrag"}],[172949510,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"precurd-vis-pris"}],[174194690,{"idx":2,"name":"environment-oldmetal","tpage_name":"ljkfeet-pris"}],[137232436,{"idx":52,"name":"jakchires-teeth","tpage_name":"citycast-pris"}],[129171471,{"idx":15,"name":"sewer-block-02","tpage_name":"sewn-vis-tfrag"}],[129171472,{"idx":16,"name":"sewer-stone-crack-01-hitweak","tpage_name":"sewn-vis-tfrag"}],[137232438,{"idx":54,"name":"flatgerydark01","tpage_name":"citycast-pris"}],[129171473,{"idx":17,"name":"sewer-metal-trim-02","tpage_name":"sewn-vis-tfrag"}],[57212940,{"idx":12,"name":"wascity-outerwall-metal-b","tpage_name":"waswide-vis-tfrag"}],[60948480,{"idx":0,"name":"minc-cliff-face-01","tpage_name":"minec-vis-tfrag"}],[137232439,{"idx":55,"name":"palm-speaker","tpage_name":"citycast-pris"}],[129171474,{"idx":18,"name":"sewer-lip-01","tpage_name":"sewn-vis-tfrag"}],[60948481,{"idx":1,"name":"minc-door-metal-01","tpage_name":"minec-vis-tfrag"}],[129171475,{"idx":19,"name":"sewer-pillar-01","tpage_name":"sewn-vis-tfrag"}],[57212942,{"idx":14,"name":"wascity-metal-dirty","tpage_name":"waswide-vis-tfrag"}],[60948482,{"idx":2,"name":"minc-train-pipe-cap-02","tpage_name":"minec-vis-tfrag"}],[129171476,{"idx":20,"name":"sewer-metal-02","tpage_name":"sewn-vis-tfrag"}],[60948483,{"idx":3,"name":"minc-base-metal-platfrom-01","tpage_name":"minec-vis-tfrag"}],[129171477,{"idx":21,"name":"sewer-brick-roof-03","tpage_name":"sewn-vis-tfrag"}],[220332032,{"idx":0,"name":"keira-mask","tpage_name":"museum3-water"}],[129171478,{"idx":22,"name":"sewer-mantel-01","tpage_name":"sewn-vis-tfrag"}],[217055242,{"idx":10,"name":"jinx-boottop","tpage_name":"museum2-pris2"}],[198574115,{"idx":35,"name":"des-cliff-top-05","tpage_name":"hanga-vis-tfrag"}],[214368262,{"idx":6,"name":"onin-chain","tpage_name":"loninsim-pris"}],[162725891,{"idx":3,"name":"rail-light-yellow-small","tpage_name":"railf-tfrag"}],[193527868,{"idx":60,"name":"errocyber-eye","tpage_name":"desboss2-pris"}],[217055243,{"idx":11,"name":"jinx-brownstrap","tpage_name":"museum2-pris2"}],[214368263,{"idx":7,"name":"onin-eye","tpage_name":"loninsim-pris"}],[135331932,{"idx":92,"name":"rub-window-02","tpage_name":"rubblea-vis-tfrag"}],[162725892,{"idx":4,"name":"rail-edge-01","tpage_name":"railf-tfrag"}],[193527869,{"idx":61,"name":"errocyber-eyelid","tpage_name":"desboss2-pris"}],[217055244,{"idx":12,"name":"jinx-brownstrapbolts","tpage_name":"museum2-pris2"}],[198574117,{"idx":37,"name":"des-cliff-trans-01","tpage_name":"hanga-vis-tfrag"}],[135331933,{"idx":93,"name":"rub-wall-gen-05","tpage_name":"rubblea-vis-tfrag"}],[162725893,{"idx":5,"name":"rail-cord-01","tpage_name":"railf-tfrag"}],[193527870,{"idx":62,"name":"errocyber-faceflesh","tpage_name":"desboss2-pris"}],[217055245,{"idx":13,"name":"jinx-buckles","tpage_name":"museum2-pris2"}],[198574118,{"idx":38,"name":"des-cliff-top-02","tpage_name":"hanga-vis-tfrag"}],[214368265,{"idx":9,"name":"onin-face","tpage_name":"loninsim-pris"}],[135331934,{"idx":94,"name":"rub-ground","tpage_name":"rubblea-vis-tfrag"}],[162725894,{"idx":6,"name":"rail-detail-01","tpage_name":"railf-tfrag"}],[193527871,{"idx":63,"name":"errolcyber-bighand-01","tpage_name":"desboss2-pris"}],[217055246,{"idx":14,"name":"jinx-cigar","tpage_name":"museum2-pris2"}],[198574119,{"idx":39,"name":"des-mount-bottom-01","tpage_name":"hanga-vis-tfrag"}],[214368266,{"idx":10,"name":"onin-finger","tpage_name":"loninsim-pris"}],[135331935,{"idx":95,"name":"rub-statue-stone-01","tpage_name":"rubblea-vis-tfrag"}],[162725895,{"idx":7,"name":"rail-base-mid-01","tpage_name":"railf-tfrag"}],[217055247,{"idx":15,"name":"jinx-cigarflame","tpage_name":"museum2-pris2"}],[214368267,{"idx":11,"name":"onin-hair","tpage_name":"loninsim-pris"}],[135331936,{"idx":96,"name":"rub-wall-side-beam","tpage_name":"rubblea-vis-tfrag"}],[162725896,{"idx":8,"name":"rail-gray-metal-01","tpage_name":"railf-tfrag"}],[193527873,{"idx":65,"name":"errolcyber-bluedome","tpage_name":"desboss2-pris"}],[217055248,{"idx":16,"name":"jinx-eyelid","tpage_name":"museum2-pris2"}],[135331937,{"idx":97,"name":"rub-wall-small-grill","tpage_name":"rubblea-vis-tfrag"}],[162725897,{"idx":9,"name":"rail-pipe-03","tpage_name":"railf-tfrag"}],[193527874,{"idx":66,"name":"errolcyber-bluemetal-01","tpage_name":"desboss2-pris"}],[217055249,{"idx":17,"name":"jinx-face","tpage_name":"museum2-pris2"}],[214368269,{"idx":13,"name":"onin-handpalm","tpage_name":"loninsim-pris"}],[135331938,{"idx":98,"name":"rub-window-01","tpage_name":"rubblea-vis-tfrag"}],[162725898,{"idx":10,"name":"rail-pipe-01","tpage_name":"railf-tfrag"}],[193527875,{"idx":67,"name":"errolcyber-bluewrap","tpage_name":"desboss2-pris"}],[217055250,{"idx":18,"name":"jinx-finger","tpage_name":"museum2-pris2"}],[214695936,{"idx":0,"name":"bt-wasp-flame","tpage_name":"lblowcst-sprite"}],[193527876,{"idx":68,"name":"errolcyber-chestplate","tpage_name":"desboss2-pris"}],[217055251,{"idx":19,"name":"jinx-glove","tpage_name":"museum2-pris2"}],[214368271,{"idx":15,"name":"onin-idoleye","tpage_name":"loninsim-pris"}],[193527877,{"idx":69,"name":"errolcyber-dirtymetal","tpage_name":"desboss2-pris"}],[217055252,{"idx":20,"name":"jinx-glovepalm","tpage_name":"museum2-pris2"}],[214368272,{"idx":16,"name":"onin-mat","tpage_name":"loninsim-pris"}],[193527878,{"idx":70,"name":"errolcyber-earcup","tpage_name":"desboss2-pris"}],[217055253,{"idx":21,"name":"jinx-hair","tpage_name":"museum2-pris2"}],[214368273,{"idx":17,"name":"onin-neck","tpage_name":"loninsim-pris"}],[193527879,{"idx":71,"name":"errolcyber-fingers","tpage_name":"desboss2-pris"}],[217055254,{"idx":22,"name":"jinx-hairtye","tpage_name":"museum2-pris2"}],[198574127,{"idx":47,"name":"des-low-sand","tpage_name":"hanga-vis-tfrag"}],[214368274,{"idx":18,"name":"onin-rings","tpage_name":"loninsim-pris"}],[193527880,{"idx":72,"name":"errolcyber-glovepalm","tpage_name":"desboss2-pris"}],[217055255,{"idx":23,"name":"jinx-handle","tpage_name":"museum2-pris2"}],[198574128,{"idx":48,"name":"des-low-tree-bark","tpage_name":"hanga-vis-tfrag"}],[214368275,{"idx":19,"name":"onin-rings2","tpage_name":"loninsim-pris"}],[193527881,{"idx":73,"name":"errolcyber-greyknobs","tpage_name":"desboss2-pris"}],[217055256,{"idx":24,"name":"jinx-iris","tpage_name":"museum2-pris2"}],[198574129,{"idx":49,"name":"des-low-palm-leaf-01","tpage_name":"hanga-vis-tfrag"}],[214368276,{"idx":20,"name":"onin-scarf","tpage_name":"loninsim-pris"}],[193527882,{"idx":74,"name":"errolcyber-greymetal","tpage_name":"desboss2-pris"}],[217055257,{"idx":25,"name":"jinx-kneepad","tpage_name":"museum2-pris2"}],[198574130,{"idx":50,"name":"des-low-metal-bridge","tpage_name":"hanga-vis-tfrag"}],[214368277,{"idx":21,"name":"onin-shirt","tpage_name":"loninsim-pris"}],[193527883,{"idx":75,"name":"errolcyber-greymetal-02","tpage_name":"desboss2-pris"}],[217055258,{"idx":26,"name":"jinx-pants","tpage_name":"museum2-pris2"}],[198574131,{"idx":51,"name":"des-low-sand-brown-big","tpage_name":"hanga-vis-tfrag"}],[214368278,{"idx":22,"name":"onin-skirt","tpage_name":"loninsim-pris"}],[214368279,{"idx":23,"name":"onin-teeth","tpage_name":"loninsim-pris"}],[173146112,{"idx":0,"name":"precur-nail-01","tpage_name":"precurc-vis-shrub"}],[222887978,{"idx":42,"name":"city-lowres-ctygen-build-03","tpage_name":"lfacctyb-vis-tfrag"}],[195559434,{"idx":10,"name":"jinx-brownstrapbolts","tpage_name":"towercst-pris2"}],[195559435,{"idx":11,"name":"jinx-buckles","tpage_name":"towercst-pris2"}],[173146114,{"idx":2,"name":"precur-tube-joint-01","tpage_name":"precurc-vis-shrub"}],[222887980,{"idx":44,"name":"city-lowres-ctygen-build-04","tpage_name":"lfacctyb-vis-tfrag"}],[199294976,{"idx":0,"name":"hud-temple-token","tpage_name":"templec-minimap"}],[195559436,{"idx":12,"name":"jinx-cigar","tpage_name":"towercst-pris2"}],[173146115,{"idx":3,"name":"precur-blue-light-01","tpage_name":"precurc-vis-shrub"}],[222887981,{"idx":45,"name":"city-lowres-ctygen-roof-01","tpage_name":"lfacctyb-vis-tfrag"}],[195559437,{"idx":13,"name":"jinx-cigarflame","tpage_name":"towercst-pris2"}],[195559438,{"idx":14,"name":"jinx-eyelid","tpage_name":"towercst-pris2"}],[195559439,{"idx":15,"name":"jinx-face","tpage_name":"towercst-pris2"}],[195559463,{"idx":39,"name":"sig-glove","tpage_name":"towercst-pris2"}],[195559464,{"idx":40,"name":"sig-glovetop","tpage_name":"towercst-pris2"}],[195559465,{"idx":41,"name":"sig-gun-01","tpage_name":"towercst-pris2"}],[195559466,{"idx":42,"name":"sig-gun-02","tpage_name":"towercst-pris2"}],[195559467,{"idx":43,"name":"sig-gun-03","tpage_name":"towercst-pris2"}],[195559468,{"idx":44,"name":"sig-gun-04","tpage_name":"towercst-pris2"}],[195559469,{"idx":45,"name":"sig-gun-05","tpage_name":"towercst-pris2"}],[195559470,{"idx":46,"name":"sig-headgear","tpage_name":"towercst-pris2"}],[195559471,{"idx":47,"name":"sig-horn","tpage_name":"towercst-pris2"}],[195559472,{"idx":48,"name":"sig-lens","tpage_name":"towercst-pris2"}],[195559473,{"idx":49,"name":"sig-metal-01","tpage_name":"towercst-pris2"}],[195559474,{"idx":50,"name":"sig-metal-dirty","tpage_name":"towercst-pris2"}],[217055327,{"idx":95,"name":"sig-gun-01","tpage_name":"museum2-pris2"}],[195559487,{"idx":63,"name":"torn-blademetal","tpage_name":"towercst-pris2"}],[217055339,{"idx":107,"name":"sig-shoetop","tpage_name":"museum2-pris2"}],[189530146,{"idx":34,"name":"wstlander-01-shoulderarmor","tpage_name":"desrally-pris"}],[194510866,{"idx":18,"name":"jinx-hair","tpage_name":"gridcst-pris2"}],[223084545,{"idx":1,"name":"rub-greyblue-plain-lowres","tpage_name":"rublcst-vis-shrub"}],[188022796,{"idx":12,"name":"daxtergoggles","tpage_name":"lvincst-pris"}],[195559499,{"idx":75,"name":"torn-handle-01","tpage_name":"towercst-pris2"}],[52297758,{"idx":30,"name":"freehq-ground-tile-set1-rm","tpage_name":"freehq-tfrag"}],[61014018,{"idx":2,"name":"minc-plate-01","tpage_name":"minec-vis-shrub"}],[217055337,{"idx":105,"name":"sig-sac","tpage_name":"museum2-pris2"}],[217972737,{"idx":1,"name":"time-bubble-clock","tpage_name":"lbbtcha2-sprite"}],[195559497,{"idx":73,"name":"torn-hair-01","tpage_name":"towercst-pris2"}],[220200960,{"idx":0,"name":"bam-eyelight","tpage_name":"museum3-pris"}],[127795325,{"idx":125,"name":"palcab-lowres-background-peaks-02","tpage_name":"lfaccity-tfrag"}],[220200961,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum3-pris"}],[127795326,{"idx":126,"name":"palcab-lorez-metal01-red","tpage_name":"lfaccity-tfrag"}],[220528707,{"idx":67,"name":"bluesage-eye-centered-16x16","tpage_name":"museum4-pris"}],[220528708,{"idx":68,"name":"bluesage-eyelid","tpage_name":"museum4-pris"}],[220528709,{"idx":69,"name":"bluesage-flesh","tpage_name":"museum4-pris"}],[220528710,{"idx":70,"name":"bluesage-greenwire","tpage_name":"museum4-pris"}],[220528711,{"idx":71,"name":"bluesage-helmetwires","tpage_name":"museum4-pris"}],[220528712,{"idx":72,"name":"bluesage-helmetwires2","tpage_name":"museum4-pris"}],[220528713,{"idx":73,"name":"bluesage-jacket","tpage_name":"museum4-pris"}],[220528714,{"idx":74,"name":"bluesage-leather","tpage_name":"museum4-pris"}],[220528716,{"idx":76,"name":"bluesage-lense","tpage_name":"museum4-pris"}],[220528717,{"idx":77,"name":"bluesage-pants","tpage_name":"museum4-pris"}],[174325808,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"ldesgcst-pris"}],[184287248,{"idx":16,"name":"preship-metal-hull-02","tpage_name":"loutro-shrub"}],[188022788,{"idx":4,"name":"daxter-orange","tpage_name":"lvincst-pris"}],[220528718,{"idx":78,"name":"bluesage-pants2","tpage_name":"museum4-pris"}],[174325809,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"ldesgcst-pris"}],[188022789,{"idx":5,"name":"daxterarm","tpage_name":"lvincst-pris"}],[220528719,{"idx":79,"name":"bluesage-staff","tpage_name":"museum4-pris"}],[220528720,{"idx":80,"name":"bluesage-staffhandle","tpage_name":"museum4-pris"}],[220201101,{"idx":141,"name":"jakb-scarf","tpage_name":"museum3-pris"}],[195493909,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"towercst-pris"}],[188022829,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"lvincst-pris"}],[220201102,{"idx":142,"name":"jakb-shoebottom","tpage_name":"museum3-pris"}],[220201103,{"idx":143,"name":"jakb-shoemetal","tpage_name":"museum3-pris"}],[220528726,{"idx":86,"name":"charHOLD","tpage_name":"museum4-pris"}],[220201104,{"idx":144,"name":"jakb-shoeteop","tpage_name":"museum3-pris"}],[195493912,{"idx":24,"name":"jakc-scarf","tpage_name":"towercst-pris"}],[188022832,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"lvincst-pris"}],[220201105,{"idx":145,"name":"keira-bellylong","tpage_name":"museum3-pris"}],[188022798,{"idx":14,"name":"daxterhelmetplain","tpage_name":"lvincst-pris"}],[223084547,{"idx":3,"name":"rub-wall-small-grill","tpage_name":"rublcst-vis-shrub"}],[220528728,{"idx":88,"name":"es-eyelid","tpage_name":"museum4-pris"}],[195493913,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"towercst-pris"}],[188022833,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"lvincst-pris"}],[220201106,{"idx":146,"name":"keira-belt","tpage_name":"museum3-pris"}],[188022799,{"idx":15,"name":"daxterlense","tpage_name":"lvincst-pris"}],[223084548,{"idx":4,"name":"rub-ground-01-small","tpage_name":"rublcst-vis-shrub"}],[220528729,{"idx":89,"name":"es-green-metal","tpage_name":"museum4-pris"}],[195493914,{"idx":26,"name":"jakc-skirt","tpage_name":"towercst-pris"}],[188022834,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"lvincst-pris"}],[220201107,{"idx":147,"name":"keira-blackstrap","tpage_name":"museum3-pris"}],[188022800,{"idx":16,"name":"daxternose","tpage_name":"lvincst-pris"}],[170196998,{"idx":6,"name":"ashelin-chest","tpage_name":"outrocst-pris2"}],[171442178,{"idx":2,"name":"temple_sandstone_ground02","tpage_name":"templea-vis-tfrag"}],[223084549,{"idx":5,"name":"rub-met-strp-close","tpage_name":"rublcst-vis-shrub"}],[220528730,{"idx":90,"name":"es-precursor-metal-01","tpage_name":"museum4-pris"}],[173867094,{"idx":86,"name":"errolcyber-rubberpipe","tpage_name":"ltowerb-vis-pris"}],[195035154,{"idx":18,"name":"stadiumb-hud-lap-03","tpage_name":"desrally-minimap"}],[188809254,{"idx":38,"name":"facc-seam-metal","tpage_name":"factoryd-vis-tfrag"}],[189005963,{"idx":139,"name":"eco-lt-cryst-02","tpage_name":"factoryd-vis-pris"}],[223871003,{"idx":27,"name":"baron-swordhilt","tpage_name":"museum3b-pris2"}],[173473812,{"idx":20,"name":"tow-pup-metal-01","tpage_name":"ltowerb-vis-tfrag"}],[172228632,{"idx":24,"name":"temple_sandstone_pill01","tpage_name":"templeb-vis-pris"}],[220201131,{"idx":171,"name":"samos-finger-01","tpage_name":"museum3-pris"}],[211222529,{"idx":1,"name":"tow-wall-supports","tpage_name":"towercst-tfrag"}],[171769859,{"idx":3,"name":"dk-maker-idol-eye-dk-01","tpage_name":"templea-vis-pris"}],[174325803,{"idx":43,"name":"jakchires-horn","tpage_name":"ldesgcst-pris"}],[184287243,{"idx":11,"name":"preship-metal-ring-top","tpage_name":"loutro-shrub"}],[176816163,{"idx":35,"name":"neo-wasp-base","tpage_name":"towera-pris"}],[195493904,{"idx":16,"name":"daxternose","tpage_name":"towercst-pris"}],[188022824,{"idx":40,"name":"jakchires-facert","tpage_name":"lvincst-pris"}],[220528754,{"idx":114,"name":"evilbro-redcape","tpage_name":"museum4-pris"}],[220201132,{"idx":172,"name":"samos-helmet","tpage_name":"museum3-pris"}],[211222530,{"idx":2,"name":"tow-eggpod-01","tpage_name":"towercst-tfrag"}],[174325804,{"idx":44,"name":"jakchires-jacket","tpage_name":"ldesgcst-pris"}],[184287244,{"idx":12,"name":"preship-metal-edge-01","tpage_name":"loutro-shrub"}],[188022784,{"idx":0,"name":"bam-eyelight","tpage_name":"lvincst-pris"}],[176816164,{"idx":36,"name":"neo-wasp-body","tpage_name":"towera-pris"}],[195493905,{"idx":17,"name":"daxterteeth","tpage_name":"towercst-pris"}],[188022825,{"idx":41,"name":"jakchires-glovetop","tpage_name":"lvincst-pris"}],[220528755,{"idx":115,"name":"evilbro-rings","tpage_name":"museum4-pris"}],[220201133,{"idx":173,"name":"samos-leaf","tpage_name":"museum3-pris"}],[211222531,{"idx":3,"name":"tow-groundpod","tpage_name":"towercst-tfrag"}],[174325805,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"ldesgcst-pris"}],[188022785,{"idx":1,"name":"bam-hairhilite","tpage_name":"lvincst-pris"}],[184287245,{"idx":13,"name":"preship-metal-edge-02","tpage_name":"loutro-shrub"}],[176816165,{"idx":37,"name":"neo-wasp-brown","tpage_name":"towera-pris"}],[195493906,{"idx":18,"name":"daxtertuft","tpage_name":"towercst-pris"}],[188022826,{"idx":42,"name":"jakchires-hair","tpage_name":"lvincst-pris"}],[220528756,{"idx":116,"name":"evilbro-strap","tpage_name":"museum4-pris"}],[220201134,{"idx":174,"name":"samos-lens","tpage_name":"museum3-pris"}],[211222532,{"idx":4,"name":"tow-basebone-01","tpage_name":"towercst-tfrag"}],[220528757,{"idx":117,"name":"evilbro-teeth","tpage_name":"museum4-pris"}],[173867098,{"idx":90,"name":"errocyber-eyelid","tpage_name":"ltowerb-vis-pris"}],[188809258,{"idx":42,"name":"facd-yellow-glow","tpage_name":"factoryd-vis-tfrag"}],[189005967,{"idx":143,"name":"errolcyber-metaleyelid","tpage_name":"factoryd-vis-pris"}],[223871007,{"idx":31,"name":"brut-ankle","tpage_name":"museum3b-pris2"}],[173473816,{"idx":24,"name":"tow-wall-tentacle-02","tpage_name":"ltowerb-vis-tfrag"}],[172228636,{"idx":28,"name":"temple_pre-03","tpage_name":"templeb-vis-pris"}],[220201135,{"idx":175,"name":"samos-log-03","tpage_name":"museum3-pris"}],[211222533,{"idx":5,"name":"tow-blackhole","tpage_name":"towercst-tfrag"}],[220528758,{"idx":118,"name":"evilbro-wrap","tpage_name":"museum4-pris"}],[220201136,{"idx":176,"name":"samos-metal","tpage_name":"museum3-pris"}],[211222534,{"idx":6,"name":"tow-egg-group-base","tpage_name":"towercst-tfrag"}],[220528759,{"idx":119,"name":"explorer-ball","tpage_name":"museum4-pris"}],[173867100,{"idx":92,"name":"errolcyber-roboeye","tpage_name":"ltowerb-vis-pris"}],[188809260,{"idx":44,"name":"facc-metal-panel-07","tpage_name":"factoryd-vis-tfrag"}],[223871009,{"idx":33,"name":"brut-armsleeve","tpage_name":"museum3b-pris2"}],[172228638,{"idx":30,"name":"temple_metal02","tpage_name":"templeb-vis-pris"}],[220201137,{"idx":177,"name":"samos-strap","tpage_name":"museum3-pris"}],[211222535,{"idx":7,"name":"tow-eggtop-01","tpage_name":"towercst-tfrag"}],[220528760,{"idx":120,"name":"explorer-belt","tpage_name":"museum4-pris"}],[173867101,{"idx":93,"name":"dark-crystal-knob-01","tpage_name":"ltowerb-vis-pris"}],[188809261,{"idx":45,"name":"facc-big-metal-panl01","tpage_name":"factoryd-vis-tfrag"}],[223871010,{"idx":34,"name":"brut-button","tpage_name":"museum3b-pris2"}],[220201138,{"idx":178,"name":"samosyoung-beard","tpage_name":"museum3-pris"}],[211222536,{"idx":8,"name":"mhcity-skin-ground-01","tpage_name":"towercst-tfrag"}],[195493911,{"idx":23,"name":"jakc-lens","tpage_name":"towercst-pris"}],[188022831,{"idx":47,"name":"jakchires-pants","tpage_name":"lvincst-pris"}],[220528761,{"idx":121,"name":"explorer-buckle","tpage_name":"museum4-pris"}],[173867102,{"idx":94,"name":"dark-crystal-knob-02","tpage_name":"ltowerb-vis-pris"}],[188809262,{"idx":46,"name":"facc-floor-trim","tpage_name":"factoryd-vis-tfrag"}],[223871011,{"idx":35,"name":"brut-cloaktail","tpage_name":"museum3b-pris2"}],[220201139,{"idx":179,"name":"samosyoung-belt","tpage_name":"museum3-pris"}],[211222537,{"idx":9,"name":"tow-eggside-01","tpage_name":"towercst-tfrag"}],[220528762,{"idx":122,"name":"explorer-eye-centered-16x16","tpage_name":"museum4-pris"}],[220201140,{"idx":180,"name":"samosyoung-buckle","tpage_name":"museum3-pris"}],[211222538,{"idx":10,"name":"tow-pupeyes-01","tpage_name":"towercst-tfrag"}],[220528763,{"idx":123,"name":"explorer-eyelid","tpage_name":"museum4-pris"}],[220201141,{"idx":181,"name":"samosyoung-diaper","tpage_name":"museum3-pris"}],[211222539,{"idx":11,"name":"tow-pup-skin-01","tpage_name":"towercst-tfrag"}],[220201142,{"idx":182,"name":"samosyoung-egg","tpage_name":"museum3-pris"}],[220528812,{"idx":172,"name":"fman-beard-01","tpage_name":"museum4-pris"}],[71303214,{"idx":46,"name":"king-iris","tpage_name":"ldamsig-pris2"}],[106364963,{"idx":35,"name":"veger-walkingstick-02","tpage_name":"mined-pris2"}],[195493915,{"idx":27,"name":"jakc-waistband2","tpage_name":"towercst-pris"}],[188022835,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"lvincst-pris"}],[220528765,{"idx":125,"name":"explorer-pants","tpage_name":"museum4-pris"}],[220201143,{"idx":183,"name":"samosyoung-face","tpage_name":"museum3-pris"}],[220528813,{"idx":173,"name":"fman-beard-02","tpage_name":"museum4-pris"}],[71303215,{"idx":47,"name":"king-leg","tpage_name":"ldamsig-pris2"}],[106364964,{"idx":36,"name":"veger-walkingstick-03","tpage_name":"mined-pris2"}],[195493916,{"idx":28,"name":"jakc-wraps","tpage_name":"towercst-pris"}],[188022836,{"idx":52,"name":"jakchires-teeth","tpage_name":"lvincst-pris"}],[220528766,{"idx":126,"name":"explorer-ring","tpage_name":"museum4-pris"}],[220528789,{"idx":149,"name":"farmer-whitestraps","tpage_name":"museum4-pris"}],[223871034,{"idx":58,"name":"daxter-furhilite","tpage_name":"museum3b-pris2"}],[173670419,{"idx":19,"name":"tow-eggside-01","tpage_name":"towerb-vis-tfrag"}],[220528809,{"idx":169,"name":"fman-armhair","tpage_name":"museum4-pris"}],[71303211,{"idx":43,"name":"king-hair","tpage_name":"ldamsig-pris2"}],[106364960,{"idx":32,"name":"veger-teeth","tpage_name":"mined-pris2"}],[173670420,{"idx":20,"name":"tow-groundpod","tpage_name":"towerb-vis-tfrag"}],[220528810,{"idx":170,"name":"fman-bandanna","tpage_name":"museum4-pris"}],[71303212,{"idx":44,"name":"king-hand","tpage_name":"ldamsig-pris2"}],[106364961,{"idx":33,"name":"veger-vest","tpage_name":"mined-pris2"}],[173670421,{"idx":21,"name":"tow-wall-supports-HI","tpage_name":"towerb-vis-tfrag"}],[220528811,{"idx":171,"name":"fman-bandanna2","tpage_name":"museum4-pris"}],[211550209,{"idx":1,"name":"preship-glass-01","tpage_name":"temp-shrub"}],[71303213,{"idx":45,"name":"king-horn","tpage_name":"ldamsig-pris2"}],[106364962,{"idx":34,"name":"veger-walkingstick-01","tpage_name":"mined-pris2"}],[221511680,{"idx":0,"name":"des-bush-timer-chase-trail","tpage_name":"lbbtcha3-water"}],[173670422,{"idx":22,"name":"tow-blackhole","tpage_name":"towerb-vis-tfrag"}],[220201198,{"idx":238,"name":"cguardred-backmetal","tpage_name":"museum3-pris"}],[192937986,{"idx":2,"name":"precur-tubes-small-01","tpage_name":"lprecurc-vis-tfrag"}],[171769926,{"idx":70,"name":"tpl-door-face-01","tpage_name":"templea-vis-pris"}],[189005940,{"idx":116,"name":"dp-bipedal-dk-plate-02","tpage_name":"factoryd-vis-pris"}],[223870980,{"idx":4,"name":"baron-beard","tpage_name":"museum3b-pris2"}],[81723479,{"idx":87,"name":"jakc-wraps","tpage_name":"ljndklev-pris"}],[220528821,{"idx":181,"name":"fman-shirt","tpage_name":"museum4-pris"}],[71303223,{"idx":55,"name":"king-skirt","tpage_name":"ldamsig-pris2"}],[220201211,{"idx":251,"name":"cguardred-gunstrap","tpage_name":"museum3-pris"}],[172883992,{"idx":24,"name":"dp-bipedal-dk-plate-02","tpage_name":"precura-vis-pris"}],[189005953,{"idx":129,"name":"dp-bipedal-skin-ribs-01","tpage_name":"factoryd-vis-pris"}],[223870993,{"idx":17,"name":"baron-largebutton","tpage_name":"museum3b-pris2"}],[220528834,{"idx":194,"name":"hudax-flesh","tpage_name":"museum4-pris"}],[143327239,{"idx":7,"name":"pow-green-edge-01","tpage_name":"powergd-tfrag"}],[173670423,{"idx":23,"name":"tow-bridge-source","tpage_name":"towerb-vis-tfrag"}],[220201212,{"idx":252,"name":"cguardred-guntube","tpage_name":"museum3-pris"}],[171638813,{"idx":29,"name":"templea_sandstone01","tpage_name":"templed-vis-tfrag"}],[172883993,{"idx":25,"name":"dp-bipedal-dk-plate-03","tpage_name":"precura-vis-pris"}],[189005954,{"idx":130,"name":"dp-bipedal-spine-01","tpage_name":"factoryd-vis-pris"}],[223870994,{"idx":18,"name":"baron-pants","tpage_name":"museum3b-pris2"}],[220528835,{"idx":195,"name":"hudax-hair","tpage_name":"museum4-pris"}],[143327240,{"idx":8,"name":"common-black","tpage_name":"powergd-tfrag"}],[181141504,{"idx":0,"name":"sig-flatfangs","tpage_name":"desbcst-water"}],[173670424,{"idx":24,"name":"tow-baserock","tpage_name":"towerb-vis-tfrag"}],[220201213,{"idx":253,"name":"cguardred-headshield","tpage_name":"museum3-pris"}],[171638814,{"idx":30,"name":"temple_metal01","tpage_name":"templed-vis-tfrag"}],[172883994,{"idx":26,"name":"dp-bipedal-dk-plate-04","tpage_name":"precura-vis-pris"}],[189005955,{"idx":131,"name":"dp-bipedal-toe-01","tpage_name":"factoryd-vis-pris"}],[223870995,{"idx":19,"name":"baron-pipes","tpage_name":"museum3b-pris2"}],[173867086,{"idx":78,"name":"errolcyber-greymetal","tpage_name":"ltowerb-vis-pris"}],[195035146,{"idx":10,"name":"stadiumb-hud-ord-korean","tpage_name":"desrally-minimap"}],[188809246,{"idx":30,"name":"facc-wall-trim-01","tpage_name":"factoryd-vis-tfrag"}],[220528836,{"idx":196,"name":"hudax-leather-01","tpage_name":"museum4-pris"}],[143327241,{"idx":9,"name":"pow-green-tile-03","tpage_name":"powergd-tfrag"}],[181141505,{"idx":1,"name":"errolcyber-lens","tpage_name":"desbcst-water"}],[173670425,{"idx":25,"name":"rail-env-wall-01","tpage_name":"towerb-vis-tfrag"}],[262185,{"idx":41,"name":"lasersmoke-15","tpage_name":"level-default-sprite"}],[220201214,{"idx":254,"name":"cguardred-jacketstraps","tpage_name":"museum3-pris"}],[171638815,{"idx":31,"name":"temple_metal02","tpage_name":"templed-vis-tfrag"}],[172883995,{"idx":27,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"precura-vis-pris"}],[171769942,{"idx":86,"name":"comb-env2","tpage_name":"templea-vis-pris"}],[189005956,{"idx":132,"name":"environment-darkprec","tpage_name":"factoryd-vis-pris"}],[223870996,{"idx":20,"name":"baron-scarf","tpage_name":"museum3b-pris2"}],[173867087,{"idx":79,"name":"errolcyber-greymetal-02","tpage_name":"ltowerb-vis-pris"}],[195035147,{"idx":11,"name":"stadiumb-hud-ord-nd","tpage_name":"desrally-minimap"}],[188809247,{"idx":31,"name":"facc-beam-01","tpage_name":"factoryd-vis-tfrag"}],[220528837,{"idx":197,"name":"hudax-leather-02","tpage_name":"museum4-pris"}],[143327242,{"idx":10,"name":"pow-green-tile-01","tpage_name":"powergd-tfrag"}],[173670426,{"idx":26,"name":"tow-wall-tentacle-02","tpage_name":"towerb-vis-tfrag"}],[262186,{"idx":42,"name":"lasersmoke-16","tpage_name":"level-default-sprite"}],[220201215,{"idx":255,"name":"cguardred-lens","tpage_name":"museum3-pris"}],[171638816,{"idx":32,"name":"wstd-torchbowl-coal-01","tpage_name":"templed-vis-tfrag"}],[172883996,{"idx":28,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"precura-vis-pris"}],[171769943,{"idx":87,"name":"kid-medallion","tpage_name":"templea-vis-pris"}],[189005957,{"idx":133,"name":"neo-wasp-base","tpage_name":"factoryd-vis-pris"}],[223870997,{"idx":21,"name":"baron-scarfend","tpage_name":"museum3b-pris2"}],[173867088,{"idx":80,"name":"errolcyber-insidewires","tpage_name":"ltowerb-vis-pris"}],[195035148,{"idx":12,"name":"stadiumb-hud-ord-o","tpage_name":"desrally-minimap"}],[198770688,{"idx":0,"name":"sig2-flatfangs","tpage_name":"lblowcst-water"}],[188809248,{"idx":32,"name":"facc-hole-grill-01","tpage_name":"factoryd-vis-tfrag"}],[220528838,{"idx":198,"name":"hudax-lense","tpage_name":"museum4-pris"}],[143327243,{"idx":11,"name":"pow-green-tile-02","tpage_name":"powergd-tfrag"}],[220201216,{"idx":256,"name":"cguardred-metalcollar","tpage_name":"museum3-pris"}],[172883997,{"idx":29,"name":"dp-bipedal-eye-01","tpage_name":"precura-vis-pris"}],[189005958,{"idx":134,"name":"neo-wasp-body","tpage_name":"factoryd-vis-pris"}],[223870998,{"idx":22,"name":"baron-shoebottom","tpage_name":"museum3b-pris2"}],[173867089,{"idx":81,"name":"errolcyber-jointpipe","tpage_name":"ltowerb-vis-pris"}],[195035149,{"idx":13,"name":"stadiumb-hud-ord-rd","tpage_name":"desrally-minimap"}],[188809249,{"idx":33,"name":"facd-metal-blue-glue-01","tpage_name":"factoryd-vis-tfrag"}],[220528839,{"idx":199,"name":"hudax-lenseside","tpage_name":"museum4-pris"}],[143327244,{"idx":12,"name":"pow-green-tile-04","tpage_name":"powergd-tfrag"}],[220201217,{"idx":257,"name":"cguardred-pants","tpage_name":"museum3-pris"}],[171638818,{"idx":34,"name":"wascity-rope","tpage_name":"templed-vis-tfrag"}],[172883998,{"idx":30,"name":"dp-bipedal-finger-plate-01","tpage_name":"precura-vis-pris"}],[189005959,{"idx":135,"name":"neo-wasp-brown","tpage_name":"factoryd-vis-pris"}],[223870999,{"idx":23,"name":"baron-shoulder","tpage_name":"museum3b-pris2"}],[173867090,{"idx":82,"name":"errolcyber-metalgold","tpage_name":"ltowerb-vis-pris"}],[195035150,{"idx":14,"name":"stadiumb-hud-ord-st","tpage_name":"desrally-minimap"}],[188809250,{"idx":34,"name":"facc-metal-panel-10","tpage_name":"factoryd-vis-tfrag"}],[220528840,{"idx":200,"name":"hudax-tooth","tpage_name":"museum4-pris"}],[143327245,{"idx":13,"name":"pow-green-tile-05","tpage_name":"powergd-tfrag"}],[220201218,{"idx":258,"name":"cguardred-rubber-01","tpage_name":"museum3-pris"}],[171638819,{"idx":35,"name":"temple_sandstone_stepside01","tpage_name":"templed-vis-tfrag"}],[172883999,{"idx":31,"name":"dp-bipedal-nose-01","tpage_name":"precura-vis-pris"}],[189005960,{"idx":136,"name":"neo-wasp-dark-brown","tpage_name":"factoryd-vis-pris"}],[223871000,{"idx":24,"name":"baron-swordcover","tpage_name":"museum3b-pris2"}],[173867091,{"idx":83,"name":"errolcyber-redmetal-01","tpage_name":"ltowerb-vis-pris"}],[195035151,{"idx":15,"name":"stadiumb-hud-ord-th","tpage_name":"desrally-minimap"}],[188809251,{"idx":35,"name":"facd-wall-01","tpage_name":"factoryd-vis-tfrag"}],[220528841,{"idx":201,"name":"hudax-vest","tpage_name":"museum4-pris"}],[143327246,{"idx":14,"name":"pow-green-edge-04","tpage_name":"powergd-tfrag"}],[220201219,{"idx":259,"name":"cguardred-scarf","tpage_name":"museum3-pris"}],[172884000,{"idx":32,"name":"dp-bipedal-power-hose","tpage_name":"precura-vis-pris"}],[189005961,{"idx":137,"name":"neo-wasp-eye","tpage_name":"factoryd-vis-pris"}],[223871001,{"idx":25,"name":"baron-swordcovertip","tpage_name":"museum3b-pris2"}],[173867092,{"idx":84,"name":"errolcyber-redmetal-02","tpage_name":"ltowerb-vis-pris"}],[195035152,{"idx":16,"name":"stadiumb-hud-lap-01","tpage_name":"desrally-minimap"}],[188809252,{"idx":36,"name":"facd-wall-girders-01","tpage_name":"factoryd-vis-tfrag"}],[220528842,{"idx":202,"name":"hudax-vestbutton","tpage_name":"museum4-pris"}],[143327247,{"idx":15,"name":"pow-green-edge-05","tpage_name":"powergd-tfrag"}],[220201220,{"idx":260,"name":"cguardred-shirt","tpage_name":"museum3-pris"}],[174129181,{"idx":29,"name":"environment-oldmetal","tpage_name":"loutro-pris2"}],[171638821,{"idx":37,"name":"temple_bark01","tpage_name":"templed-vis-tfrag"}],[172884001,{"idx":33,"name":"dp-bipedal-skin-bulge-01","tpage_name":"precura-vis-pris"}],[189005962,{"idx":138,"name":"squid-drabgun","tpage_name":"factoryd-vis-pris"}],[223871002,{"idx":26,"name":"baron-swordhandles","tpage_name":"museum3b-pris2"}],[173867093,{"idx":85,"name":"errolcyber-redmetal-03","tpage_name":"ltowerb-vis-pris"}],[195035153,{"idx":17,"name":"stadiumb-hud-lap-02","tpage_name":"desrally-minimap"}],[188809253,{"idx":37,"name":"facd-metal-wall-rim-01","tpage_name":"factoryd-vis-tfrag"}],[220528843,{"idx":203,"name":"hudax-vestedge","tpage_name":"museum4-pris"}],[220201221,{"idx":261,"name":"cguardred-shoebottom","tpage_name":"museum3-pris"}],[171638822,{"idx":38,"name":"temple-celing-01","tpage_name":"templed-vis-tfrag"}],[172884002,{"idx":34,"name":"dp-bipedal-skin-bulge-02","tpage_name":"precura-vis-pris"}],[220528844,{"idx":204,"name":"hudax-wrap","tpage_name":"museum4-pris"}],[220201222,{"idx":262,"name":"cguardred-shoemetal","tpage_name":"museum3-pris"}],[197328896,{"idx":0,"name":"facc-metal-panel-07","tpage_name":"factorya-shrub"}],[193527886,{"idx":78,"name":"errolcyber-head-02","tpage_name":"desboss2-pris"}],[220201225,{"idx":265,"name":"cguardred-teeth","tpage_name":"museum3-pris"}],[171769953,{"idx":97,"name":"dp-bipedal-chest-01","tpage_name":"templea-vis-pris"}],[172884006,{"idx":38,"name":"dp-bipedal-spine-01","tpage_name":"precura-vis-pris"}],[220528848,{"idx":208,"name":"mayor-flesh","tpage_name":"museum4-pris"}],[197328897,{"idx":1,"name":"facc-metal-panel-09","tpage_name":"factorya-shrub"}],[193527887,{"idx":79,"name":"errolcyber-insidemouth","tpage_name":"desboss2-pris"}],[220201108,{"idx":148,"name":"keira-brownstraps-new","tpage_name":"museum3-pris"}],[220528731,{"idx":91,"name":"esbelly-01","tpage_name":"museum4-pris"}],[49020996,{"idx":68,"name":"sewer-flat-pipe-01-red","tpage_name":"sewe-vis-tfrag"}],[220201109,{"idx":149,"name":"keira-chokerhighres","tpage_name":"museum3-pris"}],[220528732,{"idx":92,"name":"eseye","tpage_name":"museum4-pris"}],[194052140,{"idx":44,"name":"catapult-bowl","tpage_name":"deschase-pris"}],[207749120,{"idx":0,"name":"kg-target-c-forcefield-01-dest","tpage_name":"lgunnorm-water"}],[170459176,{"idx":40,"name":"jakchires-eye","tpage_name":"ljkdxvin-pris"}],[171704356,{"idx":36,"name":"temple_sandstone_taper01","tpage_name":"templec-vis-tfrag"}],[174194716,{"idx":28,"name":"jakchires-horn","tpage_name":"ljkfeet-pris"}],[172949536,{"idx":32,"name":"errolcyber-head-02","tpage_name":"precurd-vis-pris"}],[175439896,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"rubblea-vis-pris2"}],[188022803,{"idx":19,"name":"environment-oldmetal","tpage_name":"lvincst-pris"}],[223084552,{"idx":8,"name":"rail-rider-decal-01","tpage_name":"rublcst-vis-shrub"}],[220528733,{"idx":93,"name":"eseyebrow","tpage_name":"museum4-pris"}],[194052141,{"idx":45,"name":"catapult-brace-pipe-01","tpage_name":"deschase-pris"}],[207749121,{"idx":1,"name":"kg-target-c-forcefield-01","tpage_name":"lgunnorm-water"}],[170459177,{"idx":41,"name":"jakchires-eyebrow","tpage_name":"ljkdxvin-pris"}],[171704357,{"idx":37,"name":"temple_sandstone_brick-02","tpage_name":"templec-vis-tfrag"}],[172949537,{"idx":33,"name":"errolcyber-insidemouth","tpage_name":"precurd-vis-pris"}],[174194717,{"idx":29,"name":"jakchires-jacket","tpage_name":"ljkfeet-pris"}],[175439897,{"idx":25,"name":"king-shoebottom","tpage_name":"rubblea-vis-pris2"}],[170197036,{"idx":44,"name":"samos-log-02","tpage_name":"outrocst-pris2"}],[181403656,{"idx":8,"name":"vehicle-brace-pipe-01","tpage_name":"desjump-pris"}],[171442216,{"idx":40,"name":"temple_pre_arrow-05","tpage_name":"templea-vis-tfrag"}],[195493918,{"idx":30,"name":"jakchires-arm","tpage_name":"towercst-pris"}],[188022838,{"idx":54,"name":"cipher-drum-02","tpage_name":"lvincst-pris"}],[220201111,{"idx":151,"name":"keira-eyelid","tpage_name":"museum3-pris"}],[223084553,{"idx":9,"name":"rail-pipe-03","tpage_name":"rublcst-vis-shrub"}],[220528734,{"idx":94,"name":"espants-01","tpage_name":"museum4-pris"}],[170459178,{"idx":42,"name":"jakchires-eyelid","tpage_name":"ljkdxvin-pris"}],[171704358,{"idx":38,"name":"temple_sandstone_pill06","tpage_name":"templec-vis-tfrag"}],[172949538,{"idx":34,"name":"errolcyber-pipes-01","tpage_name":"precurd-vis-pris"}],[174194718,{"idx":30,"name":"jakchires-leatherpouch","tpage_name":"ljkfeet-pris"}],[175439898,{"idx":26,"name":"king-skirt","tpage_name":"rubblea-vis-pris2"}],[220266542,{"idx":46,"name":"samos-eye","tpage_name":"museum3-pris2"}],[222167047,{"idx":7,"name":"flut-plume","tpage_name":"museum4-tfrag"}],[11796553,{"idx":73,"name":"city-red-light-monster","tpage_name":"ctyinda-vis-tfrag"}],[115081295,{"idx":79,"name":"jakchires-jacket","tpage_name":"desboss1-pris"}],[170197037,{"idx":45,"name":"samos-log-03","tpage_name":"outrocst-pris2"}],[181403657,{"idx":9,"name":"vehicle-cap-pin-01","tpage_name":"desjump-pris"}],[171442217,{"idx":41,"name":"temple_pre-01","tpage_name":"templea-vis-tfrag"}],[195493919,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"towercst-pris"}],[188022839,{"idx":55,"name":"cipher-drum-03","tpage_name":"lvincst-pris"}],[220201112,{"idx":152,"name":"keira-face","tpage_name":"museum3-pris"}],[194248705,{"idx":1,"name":"neo-wasp-base","tpage_name":"lprecurc-vis-pris"}],[188022805,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"lvincst-pris"}],[223084554,{"idx":10,"name":"rail-dash-01","tpage_name":"rublcst-vis-shrub"}],[220528735,{"idx":95,"name":"espants-02","tpage_name":"museum4-pris"}],[170459179,{"idx":43,"name":"jakchires-facelft","tpage_name":"ljkdxvin-pris"}],[171704359,{"idx":39,"name":"temple_sandstone_ground01","tpage_name":"templec-vis-tfrag"}],[172949539,{"idx":35,"name":"errolcyber-pipes-02","tpage_name":"precurd-vis-pris"}],[174194719,{"idx":31,"name":"jakchires-pants","tpage_name":"ljkfeet-pris"}],[175439899,{"idx":27,"name":"king-skirt-b","tpage_name":"rubblea-vis-pris2"}],[220266543,{"idx":47,"name":"samos-eyelid","tpage_name":"museum3-pris2"}],[222167048,{"idx":8,"name":"flut-face","tpage_name":"museum4-tfrag"}],[11796554,{"idx":74,"name":"city-ind-ventglow","tpage_name":"ctyinda-vis-tfrag"}],[115081296,{"idx":80,"name":"jakchires-leatherpouch","tpage_name":"desboss1-pris"}],[170197038,{"idx":46,"name":"samos-metal","tpage_name":"outrocst-pris2"}],[181403658,{"idx":10,"name":"vehicle-chrome-pipe-01","tpage_name":"desjump-pris"}],[171442218,{"idx":42,"name":"temple_pre_arrow-04","tpage_name":"templea-vis-tfrag"}],[195493920,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"towercst-pris"}],[188022840,{"idx":56,"name":"cipher-side-01","tpage_name":"lvincst-pris"}],[220201113,{"idx":153,"name":"keira-glasses","tpage_name":"museum3-pris"}],[223084555,{"idx":11,"name":"rail-gray-metal-01","tpage_name":"rublcst-vis-shrub"}],[220528736,{"idx":96,"name":"esskin","tpage_name":"museum4-pris"}],[170459180,{"idx":44,"name":"jakchires-facert","tpage_name":"ljkdxvin-pris"}],[171704360,{"idx":40,"name":"temple_sandstone_wall01","tpage_name":"templec-vis-tfrag"}],[172949540,{"idx":36,"name":"errolcyber-pipes-03","tpage_name":"precurd-vis-pris"}],[174194720,{"idx":32,"name":"jakchires-precarmor-01","tpage_name":"ljkfeet-pris"}],[175439900,{"idx":28,"name":"king-teeth","tpage_name":"rubblea-vis-pris2"}],[220266544,{"idx":48,"name":"samos-face","tpage_name":"museum3-pris2"}],[222167049,{"idx":9,"name":"flut-brow","tpage_name":"museum4-tfrag"}],[11796555,{"idx":75,"name":"city-base-vent-01","tpage_name":"ctyinda-vis-tfrag"}],[115081297,{"idx":81,"name":"jakchires-lightbrownspat","tpage_name":"desboss1-pris"}],[170197039,{"idx":47,"name":"samos-strap","tpage_name":"outrocst-pris2"}],[181403659,{"idx":11,"name":"vehicle-gas-tank-01","tpage_name":"desjump-pris"}],[171442219,{"idx":43,"name":"temple_pre-04","tpage_name":"templea-vis-tfrag"}],[195493921,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"towercst-pris"}],[188022841,{"idx":57,"name":"cipher-side-02","tpage_name":"lvincst-pris"}],[220201114,{"idx":154,"name":"keira-glovenewlarge","tpage_name":"museum3-pris"}],[223084556,{"idx":12,"name":"rail-car-vent-01","tpage_name":"rublcst-vis-shrub"}],[220528737,{"idx":97,"name":"evilbro-balls","tpage_name":"museum4-pris"}],[170459181,{"idx":45,"name":"jakchires-glovetop","tpage_name":"ljkdxvin-pris"}],[171704361,{"idx":41,"name":"temple_sandstone_ground03","tpage_name":"templec-vis-tfrag"}],[172949541,{"idx":37,"name":"errolcyber-teeth","tpage_name":"precurd-vis-pris"}],[174194721,{"idx":33,"name":"jakchires-teeth","tpage_name":"ljkfeet-pris"}],[175439901,{"idx":29,"name":"king-thinstrap","tpage_name":"rubblea-vis-pris2"}],[170197040,{"idx":48,"name":"samos-teeth2","tpage_name":"outrocst-pris2"}],[181403660,{"idx":12,"name":"vehicle-gun-box-01","tpage_name":"desjump-pris"}],[171442220,{"idx":44,"name":"temple_sandstone_pill03","tpage_name":"templea-vis-tfrag"}],[195493922,{"idx":34,"name":"jakchires-chestplate","tpage_name":"towercst-pris"}],[188022842,{"idx":58,"name":"cipher-side-03","tpage_name":"lvincst-pris"}],[220201115,{"idx":155,"name":"keira-gogglestrap","tpage_name":"museum3-pris"}],[192938026,{"idx":42,"name":"precur-trim-01","tpage_name":"lprecurc-vis-tfrag"}],[171769966,{"idx":110,"name":"dp-bipedal-skin-bulge-02","tpage_name":"templea-vis-pris"}],[205389826,{"idx":2,"name":"ecocreature-teeth","tpage_name":"deswalk-vis-water"}],[189530162,{"idx":50,"name":"wstlander-04-dark-blue","tpage_name":"desrally-pris"}],[164626562,{"idx":130,"name":"prec-dumb-helmet","tpage_name":"railcst-pris"}],[220528738,{"idx":98,"name":"evilbro-beard","tpage_name":"museum4-pris"}],[49021003,{"idx":75,"name":"sewer-red-light-01","tpage_name":"sewe-vis-tfrag"}],[170459182,{"idx":46,"name":"jakchires-hair","tpage_name":"ljkdxvin-pris"}],[171704362,{"idx":42,"name":"temple-wall-01","tpage_name":"templec-vis-tfrag"}],[172949542,{"idx":38,"name":"terraformer-bodyside-bottom","tpage_name":"precurd-vis-pris"}],[175439902,{"idx":30,"name":"king-vest","tpage_name":"rubblea-vis-pris2"}],[181403661,{"idx":13,"name":"vehicle-metal-plate-01","tpage_name":"desjump-pris"}],[170197041,{"idx":49,"name":"samos-vest","tpage_name":"outrocst-pris2"}],[171442221,{"idx":45,"name":"temple_bark01","tpage_name":"templea-vis-tfrag"}],[220201116,{"idx":156,"name":"keira-hair-newest","tpage_name":"museum3-pris"}],[220528739,{"idx":99,"name":"evilbro-belt","tpage_name":"museum4-pris"}],[170459183,{"idx":47,"name":"jakchires-horn","tpage_name":"ljkdxvin-pris"}],[171704363,{"idx":43,"name":"common_sandstone_taper01","tpage_name":"templec-vis-tfrag"}],[172949543,{"idx":39,"name":"terraformer-bodyside-top","tpage_name":"precurd-vis-pris"}],[175439903,{"idx":31,"name":"king-vestback","tpage_name":"rubblea-vis-pris2"}],[181403662,{"idx":14,"name":"vehicle-toad-exhaust-01","tpage_name":"desjump-pris"}],[170197042,{"idx":50,"name":"samosbird-beak","tpage_name":"outrocst-pris2"}],[171442222,{"idx":46,"name":"temple_sandstone_pill02","tpage_name":"templea-vis-tfrag"}],[220201117,{"idx":157,"name":"keira-handbottom","tpage_name":"museum3-pris"}],[174325789,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"ldesgcst-pris"}],[176816149,{"idx":21,"name":"environment-darkprec","tpage_name":"towera-pris"}],[195493890,{"idx":2,"name":"daxter-eyelid","tpage_name":"towercst-pris"}],[188022810,{"idx":26,"name":"jakc-skirt","tpage_name":"lvincst-pris"}],[223084559,{"idx":15,"name":"rail-light-green","tpage_name":"rublcst-vis-shrub"}],[220528740,{"idx":100,"name":"evilbro-blueleather-01","tpage_name":"museum4-pris"}],[170459184,{"idx":48,"name":"jakchires-jacket","tpage_name":"ljkdxvin-pris"}],[171704364,{"idx":44,"name":"common_sandstone_ground01","tpage_name":"templec-vis-tfrag"}],[172949544,{"idx":40,"name":"terraformer-bodytopplain","tpage_name":"precurd-vis-pris"}],[175439904,{"idx":32,"name":"king-wrap","tpage_name":"rubblea-vis-pris2"}],[181403663,{"idx":15,"name":"vehicle-tread-blur-02","tpage_name":"desjump-pris"}],[170197043,{"idx":51,"name":"samosbird-body","tpage_name":"outrocst-pris2"}],[171442223,{"idx":47,"name":"temple_pre-02","tpage_name":"templea-vis-tfrag"}],[220201118,{"idx":158,"name":"keira-handtop","tpage_name":"museum3-pris"}],[195493891,{"idx":3,"name":"daxter-furhilite","tpage_name":"towercst-pris"}],[188022811,{"idx":27,"name":"jakc-waistband2","tpage_name":"lvincst-pris"}],[220528741,{"idx":101,"name":"evilbro-blueleather-02","tpage_name":"museum4-pris"}],[49021006,{"idx":78,"name":"sewer-metal-edge-01","tpage_name":"sewe-vis-tfrag"}],[171704365,{"idx":45,"name":"common_sandstone_trim01","tpage_name":"templec-vis-tfrag"}],[172949545,{"idx":41,"name":"terraformer-bodytopstrans","tpage_name":"precurd-vis-pris"}],[170459185,{"idx":49,"name":"jakchires-leatherpouch","tpage_name":"ljkdxvin-pris"}],[175439905,{"idx":33,"name":"king-wraps","tpage_name":"rubblea-vis-pris2"}],[181403664,{"idx":16,"name":"vehicle-wheel-01","tpage_name":"desjump-pris"}],[186384384,{"idx":0,"name":"des-pole-01","tpage_name":"desertf-vis-pris"}],[170197044,{"idx":52,"name":"samosbird-eye","tpage_name":"outrocst-pris2"}],[171442224,{"idx":48,"name":"temple_pre-03","tpage_name":"templea-vis-tfrag"}],[174325791,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"ldesgcst-pris"}],[176816151,{"idx":23,"name":"ecocreature-eye","tpage_name":"towera-pris"}],[195493892,{"idx":4,"name":"daxter-orange","tpage_name":"towercst-pris"}],[188022812,{"idx":28,"name":"jakc-wraps","tpage_name":"lvincst-pris"}],[220528742,{"idx":102,"name":"evilbro-brownleather","tpage_name":"museum4-pris"}],[49021007,{"idx":79,"name":"sewer-stone-newarch-01","tpage_name":"sewe-vis-tfrag"}],[171704366,{"idx":46,"name":"common_sandstone_pill01","tpage_name":"templec-vis-tfrag"}],[172949546,{"idx":42,"name":"terraformer-cockpit","tpage_name":"precurd-vis-pris"}],[170459186,{"idx":50,"name":"jakchires-lightbrownspat","tpage_name":"ljkdxvin-pris"}],[175439906,{"idx":34,"name":"king-wristband","tpage_name":"rubblea-vis-pris2"}],[220266550,{"idx":54,"name":"samos-log-01","tpage_name":"museum3-pris2"}],[222167055,{"idx":15,"name":"war-cape","tpage_name":"museum4-tfrag"}],[115081303,{"idx":87,"name":"jakchires-teeth","tpage_name":"desboss1-pris"}],[181403665,{"idx":17,"name":"vehicle-wheel-blur-01","tpage_name":"desjump-pris"}],[186384385,{"idx":1,"name":"des-pole-brace","tpage_name":"desertf-vis-pris"}],[177668125,{"idx":29,"name":"cmn-precursor-blue-glow","tpage_name":"railcst-tfrag"}],[170197045,{"idx":53,"name":"samosbird-plume","tpage_name":"outrocst-pris2"}],[171442225,{"idx":49,"name":"temple_sandstone_pill05","tpage_name":"templea-vis-tfrag"}],[174325792,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"ldesgcst-pris"}],[176816152,{"idx":24,"name":"ecocreature-flesh","tpage_name":"towera-pris"}],[56950788,{"idx":4,"name":"waspala-corgmetal","tpage_name":"waspala-tfrag"}],[195493893,{"idx":5,"name":"daxterarm","tpage_name":"towercst-pris"}],[188022813,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"lvincst-pris"}],[220528743,{"idx":103,"name":"evilbro-chin","tpage_name":"museum4-pris"}],[220266551,{"idx":55,"name":"samos-log-02","tpage_name":"museum3-pris2"}],[222167056,{"idx":16,"name":"war-brokenstrap","tpage_name":"museum4-tfrag"}],[174325793,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"ldesgcst-pris"}],[184287233,{"idx":1,"name":"preship-glass-01","tpage_name":"loutro-shrub"}],[176816153,{"idx":25,"name":"ecocreature-insidemouth","tpage_name":"towera-pris"}],[195493894,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"towercst-pris"}],[188022814,{"idx":30,"name":"jakchires-arm","tpage_name":"lvincst-pris"}],[220528744,{"idx":104,"name":"evilbro-eyelid","tpage_name":"museum4-pris"}],[220266552,{"idx":56,"name":"samos-log-03","tpage_name":"museum3-pris2"}],[222167057,{"idx":17,"name":"war-chestplate","tpage_name":"museum4-tfrag"}],[115081305,{"idx":89,"name":"vehicle-snake-tread-02","tpage_name":"desboss1-pris"}],[181403667,{"idx":19,"name":"catapult-bone-spike","tpage_name":"desjump-pris"}],[186384387,{"idx":3,"name":"des-corral-bar-01","tpage_name":"desertf-vis-pris"}],[177668127,{"idx":31,"name":"cmn-precursor-stonehenge-side","tpage_name":"railcst-tfrag"}],[170197047,{"idx":55,"name":"seem-arm","tpage_name":"outrocst-pris2"}],[171442227,{"idx":51,"name":"dk-eco-vent-glow-01","tpage_name":"templea-vis-tfrag"}],[195493895,{"idx":7,"name":"daxterbolt","tpage_name":"towercst-pris"}],[188022815,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"lvincst-pris"}],[220528745,{"idx":105,"name":"evilbro-flesh","tpage_name":"museum4-pris"}],[220266553,{"idx":57,"name":"samos-metal","tpage_name":"museum3-pris2"}],[222167058,{"idx":18,"name":"war-guards","tpage_name":"museum4-tfrag"}],[115081306,{"idx":90,"name":"vehicle-wheel-01","tpage_name":"desboss1-pris"}],[181403668,{"idx":20,"name":"catapult-bowl","tpage_name":"desjump-pris"}],[186384388,{"idx":4,"name":"des-corral-bar-03","tpage_name":"desertf-vis-pris"}],[177668128,{"idx":32,"name":"cmn-precursor-stonehengetop","tpage_name":"railcst-tfrag"}],[170197048,{"idx":56,"name":"seem-bootbottom","tpage_name":"outrocst-pris2"}],[171442228,{"idx":52,"name":"dk-eco-vent-side-01","tpage_name":"templea-vis-tfrag"}],[220201123,{"idx":163,"name":"keira-pantslarge","tpage_name":"museum3-pris"}],[174325795,{"idx":35,"name":"jakchires-clips","tpage_name":"ldesgcst-pris"}],[184287235,{"idx":3,"name":"preship-blue-window-blue-02","tpage_name":"loutro-shrub"}],[176816155,{"idx":27,"name":"ecocreature-palm","tpage_name":"towera-pris"}],[195493896,{"idx":8,"name":"daxterear","tpage_name":"towercst-pris"}],[188022816,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"lvincst-pris"}],[220528746,{"idx":106,"name":"evilbro-hair-01","tpage_name":"museum4-pris"}],[220266554,{"idx":58,"name":"samos-strap","tpage_name":"museum3-pris2"}],[222167059,{"idx":19,"name":"bab-pendant","tpage_name":"museum4-tfrag"}],[181403669,{"idx":21,"name":"catapult-brace-pipe-01","tpage_name":"desjump-pris"}],[186384389,{"idx":5,"name":"des-plainrope","tpage_name":"desertf-vis-pris"}],[177668129,{"idx":33,"name":"cmn-precursor-plat-lod03","tpage_name":"railcst-tfrag"}],[170197049,{"idx":57,"name":"seem-bootleg","tpage_name":"outrocst-pris2"}],[171442229,{"idx":53,"name":"temple_sandstone_pill07","tpage_name":"templea-vis-tfrag"}],[220201124,{"idx":164,"name":"keira-shirt","tpage_name":"museum3-pris"}],[195493897,{"idx":9,"name":"daxterfinger","tpage_name":"towercst-pris"}],[188022817,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"lvincst-pris"}],[220528747,{"idx":107,"name":"evilbro-mecharm-01","tpage_name":"museum4-pris"}],[220266555,{"idx":59,"name":"samos-teeth2","tpage_name":"museum3-pris2"}],[222167060,{"idx":20,"name":"war-skirt","tpage_name":"museum4-tfrag"}],[186384390,{"idx":6,"name":"des-wasmetal01","tpage_name":"desertf-vis-pris"}],[177668130,{"idx":34,"name":"pre-mic-groove","tpage_name":"railcst-tfrag"}],[181403670,{"idx":22,"name":"catapult-brass-pipe01","tpage_name":"desjump-pris"}],[170197050,{"idx":58,"name":"seem-bootlower","tpage_name":"outrocst-pris2"}],[171442230,{"idx":54,"name":"temple_sandstone_scale_01","tpage_name":"templea-vis-tfrag"}],[220201125,{"idx":165,"name":"keira-shoebottom","tpage_name":"museum3-pris"}],[195493898,{"idx":10,"name":"daxterfoot","tpage_name":"towercst-pris"}],[188022818,{"idx":34,"name":"jakchires-chestplate","tpage_name":"lvincst-pris"}],[220528748,{"idx":108,"name":"evilbro-mecharm-02","tpage_name":"museum4-pris"}],[181403671,{"idx":23,"name":"catapult-cap-pin-01","tpage_name":"desjump-pris"}],[186384391,{"idx":7,"name":"des-bridge-plank","tpage_name":"desertf-vis-pris"}],[177668131,{"idx":35,"name":"pre-mic-dark","tpage_name":"railcst-tfrag"}],[170197051,{"idx":59,"name":"seem-bootmet","tpage_name":"outrocst-pris2"}],[171442231,{"idx":55,"name":"temple_sandstone_wall01","tpage_name":"templea-vis-tfrag"}],[220201126,{"idx":166,"name":"keira-torch-guard-01","tpage_name":"museum3-pris"}],[195493899,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"towercst-pris"}],[188022819,{"idx":35,"name":"jakchires-clips","tpage_name":"lvincst-pris"}],[220528749,{"idx":109,"name":"evilbro-mecharm-03","tpage_name":"museum4-pris"}],[189333521,{"idx":17,"name":"vehicle-metal-plate-02","tpage_name":"comba-shrub"}],[216006695,{"idx":39,"name":"jakc-wristband-a2","tpage_name":"museum-pris"}],[181403672,{"idx":24,"name":"catapult-gun-box-01","tpage_name":"desjump-pris"}],[186384392,{"idx":8,"name":"des-corral-plate-03","tpage_name":"desertf-vis-pris"}],[188874752,{"idx":0,"name":"facc-hole-grill-01","tpage_name":"factoryd-vis-alpha"}],[177668132,{"idx":36,"name":"pre-mic-plain","tpage_name":"railcst-tfrag"}],[170197052,{"idx":60,"name":"seem-boottoe","tpage_name":"outrocst-pris2"}],[171442232,{"idx":56,"name":"temple_sandstone_pill06","tpage_name":"templea-vis-tfrag"}],[220201127,{"idx":167,"name":"keira-torch-nozzle-01","tpage_name":"museum3-pris"}],[195493900,{"idx":12,"name":"daxtergoggles","tpage_name":"towercst-pris"}],[188022820,{"idx":36,"name":"jakchires-eye","tpage_name":"lvincst-pris"}],[220528750,{"idx":110,"name":"evilbro-mechglove-01","tpage_name":"museum4-pris"}],[189333522,{"idx":18,"name":"vehicle-brace-pipe-01","tpage_name":"comba-shrub"}],[216006696,{"idx":40,"name":"jakchires-arm","tpage_name":"museum-pris"}],[181403673,{"idx":25,"name":"catapult-metal-part-01","tpage_name":"desjump-pris"}],[186384393,{"idx":9,"name":"des-corral-metal-02","tpage_name":"desertf-vis-pris"}],[188874753,{"idx":1,"name":"facd-spotlights","tpage_name":"factoryd-vis-alpha"}],[177668133,{"idx":37,"name":"pre-mic-speaker","tpage_name":"railcst-tfrag"}],[170197053,{"idx":61,"name":"seem-ear","tpage_name":"outrocst-pris2"}],[171442233,{"idx":57,"name":"tpl-symbl-yellow-glow-01","tpage_name":"templea-vis-tfrag"}],[220201128,{"idx":168,"name":"keira-torch-nozzle-02","tpage_name":"museum3-pris"}],[171769856,{"idx":0,"name":"dk-maker-idol-collar-01","tpage_name":"templea-vis-pris"}],[195493901,{"idx":13,"name":"daxterheadwidenew","tpage_name":"towercst-pris"}],[188022821,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"lvincst-pris"}],[220528751,{"idx":111,"name":"evilbro-mechglove-02","tpage_name":"museum4-pris"}],[189333523,{"idx":19,"name":"vehicle-cap-pin-01","tpage_name":"comba-shrub"}],[216006697,{"idx":41,"name":"jakchires-blackstrap","tpage_name":"museum-pris"}],[170197054,{"idx":62,"name":"seem-eye","tpage_name":"outrocst-pris2"}],[181403674,{"idx":26,"name":"catapult-metal-plate-01","tpage_name":"desjump-pris"}],[186384394,{"idx":10,"name":"des-corral-plate-02","tpage_name":"desertf-vis-pris"}],[188874754,{"idx":2,"name":"fac-drop-plat-plate-01","tpage_name":"factoryd-vis-alpha"}],[171442234,{"idx":58,"name":"temple_sandstone_brick-02","tpage_name":"templea-vis-tfrag"}],[220201129,{"idx":169,"name":"samos-arm","tpage_name":"museum3-pris"}],[171769857,{"idx":1,"name":"dk-maker-idol-collar-02","tpage_name":"templea-vis-pris"}],[195493902,{"idx":14,"name":"daxterhelmetplain","tpage_name":"towercst-pris"}],[188022822,{"idx":38,"name":"jakchires-eyelid","tpage_name":"lvincst-pris"}],[220528752,{"idx":112,"name":"evilbro-pants","tpage_name":"museum4-pris"}],[220201130,{"idx":170,"name":"samos-ear","tpage_name":"museum3-pris"}],[211222528,{"idx":0,"name":"tow-baserock","tpage_name":"towercst-tfrag"}],[171769858,{"idx":2,"name":"dk-maker-idol-eye-01","tpage_name":"templea-vis-pris"}],[195493903,{"idx":15,"name":"daxterlense","tpage_name":"towercst-pris"}],[188022823,{"idx":39,"name":"jakchires-facelft","tpage_name":"lvincst-pris"}],[220528753,{"idx":113,"name":"evilbro-pipes","tpage_name":"museum4-pris"}],[223019011,{"idx":3,"name":"rub-panels-01","tpage_name":"rublcst-vis-tfrag"}],[220528651,{"idx":11,"name":"bam-eyelight","tpage_name":"museum4-pris"}],[222888008,{"idx":72,"name":"palcab-lowres-farm-wall-top","tpage_name":"lfacctyb-vis-tfrag"}],[187105288,{"idx":8,"name":"desw-wall-pucker-01","tpage_name":"deswalk-vis-tfrag"}],[189595648,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desrally-water"}],[217055377,{"idx":145,"name":"veger-whitecloth","tpage_name":"museum2-pris2"}],[71565319,{"idx":7,"name":"pecker-wingbottom","tpage_name":"ldampksm-pris"}],[67829779,{"idx":19,"name":"vinroom-small-monitor-01","tpage_name":"freehq-sprite"}],[193527899,{"idx":91,"name":"errolcyber-rubberpipe","tpage_name":"desboss2-pris"}],[217055274,{"idx":42,"name":"king-face-01","tpage_name":"museum2-pris2"}],[222888009,{"idx":73,"name":"t-palshaft-roof-01","tpage_name":"lfacctyb-vis-tfrag"}],[187105289,{"idx":9,"name":"desw-tubes-segment-01","tpage_name":"deswalk-vis-tfrag"}],[189595649,{"idx":1,"name":"wstlander-01-glovetop","tpage_name":"desrally-water"}],[222167040,{"idx":0,"name":"bam-eyelight","tpage_name":"museum4-tfrag"}],[193527900,{"idx":92,"name":"errolcyber-rubberpipe-light","tpage_name":"desboss2-pris"}],[217055275,{"idx":43,"name":"king-finger","tpage_name":"museum2-pris2"}],[220201061,{"idx":101,"name":"daxter-furhilite","tpage_name":"museum3-pris"}],[171769913,{"idx":57,"name":"jakchires-pants","tpage_name":"templea-vis-pris"}],[173015093,{"idx":53,"name":"precur-trim-01","tpage_name":"precurc-vis-tfrag"}],[71630856,{"idx":8,"name":"king-ear","tpage_name":"ldampksm-pris2"}],[222888041,{"idx":105,"name":"palcab-lorez-plates-red-stripe01","tpage_name":"lfacctyb-vis-tfrag"}],[135725069,{"idx":13,"name":"seem-hand","tpage_name":"lseemwca-pris2"}],[194445351,{"idx":39,"name":"daxterarm","tpage_name":"gridcst-pris"}],[170459175,{"idx":39,"name":"jakchires-clips","tpage_name":"ljkdxvin-pris"}],[171704355,{"idx":35,"name":"temple_metal04","tpage_name":"templec-vis-tfrag"}],[172949535,{"idx":31,"name":"errolcyber-head-01","tpage_name":"precurd-vis-pris"}],[175439895,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"rubblea-vis-pris2"}],[174194715,{"idx":27,"name":"jakchires-hair","tpage_name":"ljkfeet-pris"}],[140378116,{"idx":4,"name":"airlock-door-metal2","tpage_name":"minee-pris"}],[129171496,{"idx":40,"name":"sewer-stone-arch-02-hitweak","tpage_name":"sewn-vis-tfrag"}],[220201062,{"idx":102,"name":"daxter-orange","tpage_name":"museum3-pris"}],[171769914,{"idx":58,"name":"jakchires-precarmor-01","tpage_name":"templea-vis-pris"}],[173015094,{"idx":54,"name":"precur-small-plate-edge","tpage_name":"precurc-vis-tfrag"}],[194445352,{"idx":40,"name":"daxterbodyshort-eix","tpage_name":"gridcst-pris"}],[220201063,{"idx":103,"name":"daxterarm","tpage_name":"museum3-pris"}],[171769915,{"idx":59,"name":"jakchires-shoebottom","tpage_name":"templea-vis-pris"}],[173015095,{"idx":55,"name":"precur-wall-tube-03","tpage_name":"precurc-vis-tfrag"}],[134676558,{"idx":78,"name":"ctypal-wall-tile-01","tpage_name":"rubblec-vis-tfrag"}],[158334978,{"idx":2,"name":"rub-water","tpage_name":"rubblea-vis-water"}],[222888043,{"idx":107,"name":"palcab-swingp-trim","tpage_name":"lfacctyb-vis-tfrag"}],[181076009,{"idx":41,"name":"sig-glovetop","tpage_name":"desbcst-pris2"}],[193527809,{"idx":1,"name":"bam-hairhilite","tpage_name":"desboss2-pris"}],[217055309,{"idx":77,"name":"prec-veger-nose","tpage_name":"museum2-pris2"}],[194445353,{"idx":41,"name":"daxterbolt","tpage_name":"gridcst-pris"}],[174325764,{"idx":4,"name":"daxter-orange","tpage_name":"ldesgcst-pris"}],[164364324,{"idx":36,"name":"rub-metal-pipeside-01","tpage_name":"rubblea2-vis-tfrag"}],[159383604,{"idx":52,"name":"jakchires-teeth","tpage_name":"slumbset-pris"}],[220201065,{"idx":105,"name":"daxterbolt","tpage_name":"museum3-pris"}],[171769917,{"idx":61,"name":"jakchires-shoeteop","tpage_name":"templea-vis-pris"}],[173015097,{"idx":57,"name":"precur-tube-honey-big","tpage_name":"precurc-vis-tfrag"}],[222888045,{"idx":109,"name":"palcab-lowres-background-shoreline-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076011,{"idx":43,"name":"sig-gun-02","tpage_name":"desbcst-pris2"}],[193527811,{"idx":3,"name":"daxter-furhilite","tpage_name":"desboss2-pris"}],[217055311,{"idx":79,"name":"prec-veger-sleeve","tpage_name":"museum2-pris2"}],[220266496,{"idx":0,"name":"bam-eyelight","tpage_name":"museum3-pris2"}],[222953476,{"idx":4,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"lfacctyb-vis-alpha"}],[220529048,{"idx":408,"name":"geo-eye-16x16","tpage_name":"museum4-pris"}],[220201176,{"idx":216,"name":"kor-hair","tpage_name":"museum3-pris"}],[201130013,{"idx":29,"name":"prec-staff-02","tpage_name":"loutro2-pris"}],[105054308,{"idx":100,"name":"marauder-sword-edge","tpage_name":"desoasis-pris"}],[112525388,{"idx":76,"name":"jakchires-shoeteop","tpage_name":"desrescc-pris"}],[194445355,{"idx":43,"name":"daxterfinger","tpage_name":"gridcst-pris"}],[171769918,{"idx":62,"name":"jakchires-teeth","tpage_name":"templea-vis-pris"}],[173015098,{"idx":58,"name":"precur-light-red-01","tpage_name":"precurc-vis-tfrag"}],[217055312,{"idx":80,"name":"prec-veger-spat","tpage_name":"museum2-pris2"}],[220266497,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum3-pris2"}],[220201177,{"idx":217,"name":"kor-head","tpage_name":"museum3-pris"}],[201130014,{"idx":30,"name":"bam-eyelight","tpage_name":"loutro2-pris"}],[105054309,{"idx":101,"name":"marauder-sword-metal","tpage_name":"desoasis-pris"}],[112525389,{"idx":77,"name":"jakchires-teeth","tpage_name":"desrescc-pris"}],[208142336,{"idx":0,"name":"terraformer-bodyside-bottom","tpage_name":"desboss1-pris2"}],[194445356,{"idx":44,"name":"daxterfoot","tpage_name":"gridcst-pris"}],[171769919,{"idx":63,"name":"temple_flag01","tpage_name":"templea-vis-pris"}],[173015099,{"idx":59,"name":"precur-floor-large-01","tpage_name":"precurc-vis-tfrag"}],[174129152,{"idx":0,"name":"bam-eyelight","tpage_name":"loutro-pris2"}],[223871018,{"idx":42,"name":"brut-footbottom","tpage_name":"museum3b-pris2"}],[172228647,{"idx":39,"name":"temple_sandstone_pill02","tpage_name":"templeb-vis-pris"}],[720912,{"idx":16,"name":"loadsave-part-01","tpage_name":"level-default-shrub"}],[222888047,{"idx":111,"name":"palcab-lowres-background-grass-to-desert-02","tpage_name":"lfacctyb-vis-tfrag"}],[181076013,{"idx":45,"name":"sig-gun-04","tpage_name":"desbcst-pris2"}],[193527813,{"idx":5,"name":"daxterarm","tpage_name":"desboss2-pris"}],[217055313,{"idx":81,"name":"prec-veger-vest","tpage_name":"museum2-pris2"}],[208142337,{"idx":1,"name":"terraformer-bodyside-top","tpage_name":"desboss1-pris2"}],[194445357,{"idx":45,"name":"daxterfoot-bottom","tpage_name":"gridcst-pris"}],[171638793,{"idx":9,"name":"temple-steps-brown","tpage_name":"templed-vis-tfrag"}],[174129153,{"idx":1,"name":"bam-hairhilite","tpage_name":"loutro-pris2"}],[223871019,{"idx":43,"name":"brut-footstrap","tpage_name":"museum3b-pris2"}],[172228648,{"idx":40,"name":"temple_sandstone_pill05","tpage_name":"templeb-vis-pris"}],[720913,{"idx":17,"name":"loadsave-save","tpage_name":"level-default-shrub"}],[173015100,{"idx":60,"name":"environment-precur-level","tpage_name":"precurc-vis-tfrag"}],[222888048,{"idx":112,"name":"palcab-lowres-background-grass-to-desert-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076014,{"idx":46,"name":"sig-gun-05","tpage_name":"desbcst-pris2"}],[193527814,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"desboss2-pris"}],[217055314,{"idx":82,"name":"veger-coatclips","tpage_name":"museum2-pris2"}],[208142338,{"idx":2,"name":"terraformer-footpipes-01","tpage_name":"desboss1-pris2"}],[194445358,{"idx":46,"name":"daxtergoggles","tpage_name":"gridcst-pris"}],[222888049,{"idx":113,"name":"palcab-lowres-background-mounatin-window","tpage_name":"lfacctyb-vis-tfrag"}],[181076015,{"idx":47,"name":"sig-headgear","tpage_name":"desbcst-pris2"}],[193527815,{"idx":7,"name":"daxterbolt","tpage_name":"desboss2-pris"}],[208142339,{"idx":3,"name":"terraformer-metal-01","tpage_name":"desboss1-pris2"}],[194445359,{"idx":47,"name":"daxterheadwidenew","tpage_name":"gridcst-pris"}],[208142340,{"idx":4,"name":"terraformer-metal-02","tpage_name":"desboss1-pris2"}],[194445360,{"idx":48,"name":"daxterhelmetplain","tpage_name":"gridcst-pris"}],[222888051,{"idx":115,"name":"palcab-lowres-background-desert-01","tpage_name":"lfacctyb-vis-tfrag"}],[181076017,{"idx":49,"name":"sig-lens","tpage_name":"desbcst-pris2"}],[193527817,{"idx":9,"name":"daxterfinger","tpage_name":"desboss2-pris"}],[173015104,{"idx":64,"name":"precur-floor-large-01-lotweak","tpage_name":"precurc-vis-tfrag"}],[208142344,{"idx":8,"name":"terraformer-metal-07","tpage_name":"desboss1-pris2"}],[194445364,{"idx":52,"name":"daxtertuft","tpage_name":"gridcst-pris"}],[208142345,{"idx":9,"name":"terraformer-metal-08","tpage_name":"desboss1-pris2"}],[194445365,{"idx":53,"name":"citwide-crimson-gold","tpage_name":"gridcst-pris"}],[220528684,{"idx":44,"name":"billy-wrap","tpage_name":"museum4-pris"}],[223019044,{"idx":36,"name":"rail-pipe-02","tpage_name":"rublcst-vis-tfrag"}],[217055315,{"idx":83,"name":"veger-hair","tpage_name":"museum2-pris2"}],[195559475,{"idx":51,"name":"sig-sac","tpage_name":"towercst-pris2"}],[217055316,{"idx":84,"name":"veger-scarf","tpage_name":"museum2-pris2"}],[195559476,{"idx":52,"name":"sig-shoebottom","tpage_name":"towercst-pris2"}],[217055317,{"idx":85,"name":"charHOLD","tpage_name":"museum2-pris2"}],[195559477,{"idx":53,"name":"sig-shoetop","tpage_name":"towercst-pris2"}],[187170834,{"idx":18,"name":"dm-ecotank-light-rim-01","tpage_name":"deswalk-vis-pris"}],[172228674,{"idx":66,"name":"templea_sandstone01","tpage_name":"templeb-vis-pris"}],[217055318,{"idx":86,"name":"sig-belt","tpage_name":"museum2-pris2"}],[198574081,{"idx":1,"name":"des-mount-02","tpage_name":"hanga-vis-tfrag"}],[171769972,{"idx":116,"name":"environment-darkprec","tpage_name":"templea-vis-pris"}],[207880192,{"idx":0,"name":"terraformer-cpitwindows-01","tpage_name":"desboss1-water"}],[195559478,{"idx":54,"name":"sig-shoulderarmor","tpage_name":"towercst-pris2"}],[217055319,{"idx":87,"name":"sig-eye","tpage_name":"museum2-pris2"}],[217055320,{"idx":88,"name":"sig-eyelid","tpage_name":"museum2-pris2"}],[129236992,{"idx":0,"name":"sewer-pipe-small-01","tpage_name":"sewn-vis-shrub"}],[217055321,{"idx":89,"name":"sig-faceleft","tpage_name":"museum2-pris2"}],[198574084,{"idx":4,"name":"des-totem-stone-01","tpage_name":"hanga-vis-tfrag"}],[195559481,{"idx":57,"name":"sig-skirts-03","tpage_name":"towercst-pris2"}],[217055322,{"idx":90,"name":"sig-facert","tpage_name":"museum2-pris2"}],[195559482,{"idx":58,"name":"sig-undergarments","tpage_name":"towercst-pris2"}],[217055323,{"idx":91,"name":"sig-flask","tpage_name":"museum2-pris2"}],[198574086,{"idx":6,"name":"des-cliff-01","tpage_name":"hanga-vis-tfrag"}],[195559483,{"idx":59,"name":"torn-armlft","tpage_name":"towercst-pris2"}],[217055324,{"idx":92,"name":"sig-gem-01","tpage_name":"museum2-pris2"}],[217055325,{"idx":93,"name":"sig-glove","tpage_name":"museum2-pris2"}],[195559485,{"idx":61,"name":"torn-belt","tpage_name":"towercst-pris2"}],[217055326,{"idx":94,"name":"sig-glovetop","tpage_name":"museum2-pris2"}],[195559486,{"idx":62,"name":"torn-belt2","tpage_name":"towercst-pris2"}],[217055328,{"idx":96,"name":"sig-gun-02","tpage_name":"museum2-pris2"}],[140312576,{"idx":0,"name":"sewer-pipe-small-01","tpage_name":"minee-shrub"}],[217055329,{"idx":97,"name":"sig-gun-03","tpage_name":"museum2-pris2"}],[215482369,{"idx":1,"name":"facb-roadmarkings-01","tpage_name":"lfacout-vis-alpha"}],[195559489,{"idx":65,"name":"torn-eye","tpage_name":"towercst-pris2"}],[217055330,{"idx":98,"name":"sig-gun-04","tpage_name":"museum2-pris2"}],[195559490,{"idx":66,"name":"torn-eyelid","tpage_name":"towercst-pris2"}],[217055338,{"idx":106,"name":"sig-shoebottom","tpage_name":"museum2-pris2"}],[189530145,{"idx":33,"name":"wstlander-01-shoetop","tpage_name":"desrally-pris"}],[194510865,{"idx":17,"name":"jinx-glovepalm","tpage_name":"gridcst-pris2"}],[217972738,{"idx":2,"name":"time-bubble-orbiter","tpage_name":"lbbtcha2-sprite"}],[195559498,{"idx":74,"name":"torn-hair-02","tpage_name":"towercst-pris2"}],[217055340,{"idx":108,"name":"sig-shoulderarmor","tpage_name":"museum2-pris2"}],[189530147,{"idx":35,"name":"wstlander-01-skirt","tpage_name":"desrally-pris"}],[194510867,{"idx":19,"name":"jinx-hairtye","tpage_name":"gridcst-pris2"}],[195559500,{"idx":76,"name":"torn-legshield","tpage_name":"towercst-pris2"}],[217055341,{"idx":109,"name":"sig-skirts","tpage_name":"museum2-pris2"}],[189530148,{"idx":36,"name":"wstlander-01-wrap","tpage_name":"desrally-pris"}],[194510868,{"idx":20,"name":"jinx-handle","tpage_name":"gridcst-pris2"}],[195559501,{"idx":77,"name":"torn-metal2","tpage_name":"towercst-pris2"}],[217055342,{"idx":110,"name":"sig-skirts-02","tpage_name":"museum2-pris2"}],[189530149,{"idx":37,"name":"wstlander-02-arm","tpage_name":"desrally-pris"}],[194510869,{"idx":21,"name":"jinx-iris","tpage_name":"gridcst-pris2"}],[198574105,{"idx":25,"name":"des-ruins-roof-01","tpage_name":"hanga-vis-tfrag"}],[130351112,{"idx":8,"name":"des-beast-metal-riveting","tpage_name":"deshover-pris2"}],[195559502,{"idx":78,"name":"torn-mouth","tpage_name":"towercst-pris2"}],[217055343,{"idx":111,"name":"sig-skirts-03","tpage_name":"museum2-pris2"}],[189530150,{"idx":38,"name":"wstlander-02-armor","tpage_name":"desrally-pris"}],[194510870,{"idx":22,"name":"jinx-kneepad","tpage_name":"gridcst-pris2"}],[195559503,{"idx":79,"name":"torn-pipe","tpage_name":"towercst-pris2"}],[217055344,{"idx":112,"name":"sig-undergarments","tpage_name":"museum2-pris2"}],[189530151,{"idx":39,"name":"wstlander-02-belt","tpage_name":"desrally-pris"}],[194510871,{"idx":23,"name":"jinx-pants","tpage_name":"gridcst-pris2"}],[195559504,{"idx":80,"name":"torn-scarf","tpage_name":"towercst-pris2"}],[217055345,{"idx":113,"name":"vin-teeth-01","tpage_name":"museum2-pris2"}],[189530152,{"idx":40,"name":"wstlander-02-bootheel","tpage_name":"desrally-pris"}],[194510872,{"idx":24,"name":"jinx-rope-01","tpage_name":"gridcst-pris2"}],[195559505,{"idx":81,"name":"torn-shoe","tpage_name":"towercst-pris2"}],[217055346,{"idx":114,"name":"veger-bookleather","tpage_name":"museum2-pris2"}],[189530153,{"idx":41,"name":"wstlander-02-eye","tpage_name":"desrally-pris"}],[194510873,{"idx":25,"name":"jinx-scarf","tpage_name":"gridcst-pris2"}],[195559480,{"idx":56,"name":"sig-skirts-02","tpage_name":"towercst-pris2"}],[212992000,{"idx":0,"name":"mech-flame","tpage_name":"lpattack-sprite"}],[195559506,{"idx":82,"name":"torn-shoe-02","tpage_name":"towercst-pris2"}],[217055347,{"idx":115,"name":"veger-booksides","tpage_name":"museum2-pris2"}],[189530154,{"idx":42,"name":"wstlander-02-glove","tpage_name":"desrally-pris"}],[194510874,{"idx":26,"name":"jinx-shirt","tpage_name":"gridcst-pris2"}],[195559507,{"idx":83,"name":"torn-teeth-01","tpage_name":"towercst-pris2"}],[217055348,{"idx":116,"name":"veger-bookspine","tpage_name":"museum2-pris2"}],[189530155,{"idx":43,"name":"wstlander-02-head","tpage_name":"desrally-pris"}],[194510875,{"idx":27,"name":"jinx-shoebottom2","tpage_name":"gridcst-pris2"}],[195559508,{"idx":84,"name":"torn-vest","tpage_name":"towercst-pris2"}],[217055349,{"idx":117,"name":"veger-bootbolt","tpage_name":"museum2-pris2"}],[189530156,{"idx":44,"name":"wstlander-02-ponytail","tpage_name":"desrally-pris"}],[203227136,{"idx":0,"name":"wstd-torchbowl-coal-01","tpage_name":"templed-vis-shrub"}],[194510876,{"idx":28,"name":"jinx-singlerope","tpage_name":"gridcst-pris2"}],[195559509,{"idx":85,"name":"vin-teeth-01","tpage_name":"towercst-pris2"}],[217055350,{"idx":118,"name":"veger-bootfoot","tpage_name":"museum2-pris2"}],[189530157,{"idx":45,"name":"wstlander-02-scarf","tpage_name":"desrally-pris"}],[203227137,{"idx":1,"name":"temple_sandstone_ground01","tpage_name":"templed-vis-shrub"}],[194510877,{"idx":29,"name":"jinx-teeth","tpage_name":"gridcst-pris2"}],[198574113,{"idx":33,"name":"des-beach-01","tpage_name":"hanga-vis-tfrag"}],[217055351,{"idx":119,"name":"veger-bootstrap","tpage_name":"museum2-pris2"}],[181076010,{"idx":42,"name":"sig-gun-01","tpage_name":"desbcst-pris2"}],[193527810,{"idx":2,"name":"daxter-eyelid","tpage_name":"desboss2-pris"}],[222888044,{"idx":108,"name":"city-lowres-mhcity-tower-02","tpage_name":"lfacctyb-vis-tfrag"}],[198574114,{"idx":34,"name":"des-mount-sand-trans","tpage_name":"hanga-vis-tfrag"}],[217055352,{"idx":120,"name":"veger-coat","tpage_name":"museum2-pris2"}],[217055353,{"idx":121,"name":"veger-coatbelt","tpage_name":"museum2-pris2"}],[217055354,{"idx":122,"name":"veger-endpaper","tpage_name":"museum2-pris2"}],[170721400,{"idx":120,"name":"palcab-lowres-background-grass-to-desert-02","tpage_name":"lcitysml-tfrag"}],[203096080,{"idx":16,"name":"bombot-turret01","tpage_name":"lctyass-pris"}],[190644280,{"idx":56,"name":"seem-precmetal-edge","tpage_name":"templee-pris2"}],[208076800,{"idx":0,"name":"terraformer-bodyside-bottom","tpage_name":"desboss2-pris2"}],[175505411,{"idx":3,"name":"hud-progress-meter-arrow-02","tpage_name":"precura-minimap"}],[171769871,{"idx":15,"name":"daxterarm","tpage_name":"templea-vis-pris"}],[173015051,{"idx":11,"name":"precur-tubes-segment-02","tpage_name":"precurc-vis-tfrag"}],[217055355,{"idx":123,"name":"veger-eyelid","tpage_name":"museum2-pris2"}],[170721401,{"idx":121,"name":"palcab-lowres-background-mountains-02","tpage_name":"lcitysml-tfrag"}],[203096081,{"idx":17,"name":"bombot-wheel","tpage_name":"lctyass-pris"}],[190644281,{"idx":57,"name":"seem-precmetal-plain","tpage_name":"templee-pris2"}],[208076801,{"idx":1,"name":"terraformer-bodyside-top","tpage_name":"desboss2-pris2"}],[217055356,{"idx":124,"name":"veger-face","tpage_name":"museum2-pris2"}],[170721402,{"idx":122,"name":"palcab-lowres-background-hilltops-01","tpage_name":"lcitysml-tfrag"}],[203096082,{"idx":18,"name":"environment-oldmetal","tpage_name":"lctyass-pris"}],[190644282,{"idx":58,"name":"seem-skirt","tpage_name":"templee-pris2"}],[208076802,{"idx":2,"name":"terraformer-footpipes-01","tpage_name":"desboss2-pris2"}],[217055357,{"idx":125,"name":"veger-fingerbottom","tpage_name":"museum2-pris2"}],[170721403,{"idx":123,"name":"rub-palace-tower-side","tpage_name":"lcitysml-tfrag"}],[203096083,{"idx":19,"name":"cguard1-backmetal","tpage_name":"lctyass-pris"}],[190644283,{"idx":59,"name":"seem-skirt-small","tpage_name":"templee-pris2"}],[208076803,{"idx":3,"name":"terraformer-metal-01","tpage_name":"desboss2-pris2"}],[217055358,{"idx":126,"name":"veger-fingertop","tpage_name":"museum2-pris2"}],[190644284,{"idx":60,"name":"seem-straps","tpage_name":"templee-pris2"}],[203096084,{"idx":20,"name":"cguard1-guntube","tpage_name":"lctyass-pris"}],[208076804,{"idx":4,"name":"terraformer-metal-02","tpage_name":"desboss2-pris2"}],[217055359,{"idx":127,"name":"veger-gold","tpage_name":"museum2-pris2"}],[190644285,{"idx":61,"name":"seem-teeth","tpage_name":"templee-pris2"}],[203096085,{"idx":21,"name":"kg-grunt-cable-01","tpage_name":"lctyass-pris"}],[208076805,{"idx":5,"name":"terraformer-metal-03","tpage_name":"desboss2-pris2"}],[217055360,{"idx":128,"name":"veger-hand","tpage_name":"museum2-pris2"}],[190644286,{"idx":62,"name":"seem-uppertorso","tpage_name":"templee-pris2"}],[203096086,{"idx":22,"name":"kg-grunt-rim-03","tpage_name":"lctyass-pris"}],[208076806,{"idx":6,"name":"terraformer-metal-04","tpage_name":"desboss2-pris2"}],[217055361,{"idx":129,"name":"veger-iris","tpage_name":"museum2-pris2"}],[203096087,{"idx":23,"name":"roboguard-headshield","tpage_name":"lctyass-pris"}],[208076807,{"idx":7,"name":"terraformer-metal-05","tpage_name":"desboss2-pris2"}],[217055362,{"idx":130,"name":"veger-legwraps","tpage_name":"museum2-pris2"}],[217055363,{"idx":131,"name":"veger-pages","tpage_name":"museum2-pris2"}],[217055364,{"idx":132,"name":"veger-pants","tpage_name":"museum2-pris2"}],[217055365,{"idx":133,"name":"veger-parchment","tpage_name":"museum2-pris2"}],[67829767,{"idx":7,"name":"screen-04","tpage_name":"freehq-sprite"}],[217055366,{"idx":134,"name":"veger-shoebottom","tpage_name":"museum2-pris2"}],[217055367,{"idx":135,"name":"veger-shoulderplate","tpage_name":"museum2-pris2"}],[70320129,{"idx":1,"name":"jak3-japan","tpage_name":"inttitle-minimap"}],[67829769,{"idx":9,"name":"screen-06","tpage_name":"freehq-sprite"}],[217055368,{"idx":136,"name":"veger-shoulderplatemetal","tpage_name":"museum2-pris2"}],[70320130,{"idx":2,"name":"NaughtyDog","tpage_name":"inttitle-minimap"}],[67829770,{"idx":10,"name":"screen-07","tpage_name":"freehq-sprite"}],[217055369,{"idx":137,"name":"veger-sleeve","tpage_name":"museum2-pris2"}],[67829771,{"idx":11,"name":"screen-08","tpage_name":"freehq-sprite"}],[181076028,{"idx":60,"name":"vin-teeth-01","tpage_name":"desbcst-pris2"}],[193527828,{"idx":20,"name":"jakc-armor","tpage_name":"desboss2-pris"}],[198574132,{"idx":52,"name":"des-low-sand-brown-03","tpage_name":"hanga-vis-tfrag"}],[217055259,{"idx":27,"name":"jinx-rope-01","tpage_name":"museum2-pris2"}],[174456832,{"idx":0,"name":"sig-flatfangs","tpage_name":"ldesgcst-water"}],[172556327,{"idx":39,"name":"precur-control-screen","tpage_name":"precurb-vis-tfrag"}],[217055370,{"idx":138,"name":"veger-sleevelower","tpage_name":"museum2-pris2"}],[71565312,{"idx":0,"name":"bam-eyelight","tpage_name":"ldampksm-pris"}],[67829772,{"idx":12,"name":"screen-09","tpage_name":"freehq-sprite"}],[193527829,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"desboss2-pris"}],[198574133,{"idx":53,"name":"des-low-sand-brown-01","tpage_name":"hanga-vis-tfrag"}],[217055260,{"idx":28,"name":"jinx-scarf","tpage_name":"museum2-pris2"}],[217055371,{"idx":139,"name":"veger-stickwrap","tpage_name":"museum2-pris2"}],[71565313,{"idx":1,"name":"pecker-body-01","tpage_name":"ldampksm-pris"}],[67829773,{"idx":13,"name":"screen-10","tpage_name":"freehq-sprite"}],[193527830,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"desboss2-pris"}],[198574134,{"idx":54,"name":"des-low-sand-brown-02","tpage_name":"hanga-vis-tfrag"}],[217055261,{"idx":29,"name":"jinx-shirt","tpage_name":"museum2-pris2"}],[203096097,{"idx":33,"name":"citn-allleather-edge","tpage_name":"lctyass-pris"}],[208076817,{"idx":17,"name":"terraformer-organic-04","tpage_name":"desboss2-pris2"}],[217055372,{"idx":140,"name":"veger-teeth","tpage_name":"museum2-pris2"}],[193527831,{"idx":23,"name":"jakc-lens","tpage_name":"desboss2-pris"}],[198574135,{"idx":55,"name":"des-low-sand-grey-01","tpage_name":"hanga-vis-tfrag"}],[217055262,{"idx":30,"name":"jinx-shoebottom2","tpage_name":"museum2-pris2"}],[217055307,{"idx":75,"name":"prec-veger-neck","tpage_name":"museum2-pris2"}],[120258579,{"idx":19,"name":"kg-pickup-fender-edge","tpage_name":"lctyhijk-pris"}],[193527832,{"idx":24,"name":"jakc-scarf","tpage_name":"desboss2-pris"}],[217055263,{"idx":31,"name":"jinx-singlerope","tpage_name":"museum2-pris2"}],[217055308,{"idx":76,"name":"prec-veger-newface","tpage_name":"museum2-pris2"}],[120258580,{"idx":20,"name":"kg-pickup-handrail","tpage_name":"lctyhijk-pris"}],[193527833,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"desboss2-pris"}],[217055264,{"idx":32,"name":"jinx-teeth","tpage_name":"museum2-pris2"}],[193527834,{"idx":26,"name":"jakc-skirt","tpage_name":"desboss2-pris"}],[212008961,{"idx":1,"name":"stadiumb-hud-booster-off-01","tpage_name":"lpattack-minimap"}],[217055265,{"idx":33,"name":"jinx-wraps","tpage_name":"museum2-pris2"}],[217055376,{"idx":144,"name":"veger-walkingstick-03","tpage_name":"museum2-pris2"}],[71565318,{"idx":6,"name":"pecker-teeth","tpage_name":"ldampksm-pris"}],[67829778,{"idx":18,"name":"screen-15","tpage_name":"freehq-sprite"}],[193527835,{"idx":27,"name":"jakc-waistband2","tpage_name":"desboss2-pris"}],[212008962,{"idx":2,"name":"stadiumb-hud-booster-on-01","tpage_name":"lpattack-minimap"}],[198574139,{"idx":59,"name":"des-low-sand-green-03","tpage_name":"hanga-vis-tfrag"}],[217055266,{"idx":34,"name":"king-arm","tpage_name":"museum2-pris2"}],[220201146,{"idx":186,"name":"samosyoung-log-03","tpage_name":"museum3-pris"}],[173015059,{"idx":19,"name":"precur-plate-end-01","tpage_name":"precurc-vis-tfrag"}],[171769879,{"idx":23,"name":"daxterheadwidenew","tpage_name":"templea-vis-pris"}],[220528774,{"idx":134,"name":"farmer-fag-edgewrap","tpage_name":"museum4-pris"}],[173015065,{"idx":25,"name":"precur-lightball-base","tpage_name":"precurc-vis-tfrag"}],[171769885,{"idx":29,"name":"environment-oldmetal","tpage_name":"templea-vis-pris"}],[220528780,{"idx":140,"name":"farmer-mouth","tpage_name":"museum4-pris"}],[173015066,{"idx":26,"name":"precur-pipe-round-01","tpage_name":"precurc-vis-tfrag"}],[171769886,{"idx":30,"name":"jakc-armor","tpage_name":"templea-vis-pris"}],[220528781,{"idx":141,"name":"farmer-mustach","tpage_name":"museum4-pris"}],[173015067,{"idx":27,"name":"precur-plate-plain-01","tpage_name":"precurc-vis-tfrag"}],[171769887,{"idx":31,"name":"jakc-chestplate-straps","tpage_name":"templea-vis-pris"}],[220528782,{"idx":142,"name":"farmer-pants","tpage_name":"museum4-pris"}],[173015068,{"idx":28,"name":"precur-container-plate-01","tpage_name":"precurc-vis-tfrag"}],[171769888,{"idx":32,"name":"jakc-gogglemetal","tpage_name":"templea-vis-pris"}],[220528783,{"idx":143,"name":"farmer-redstraps","tpage_name":"museum4-pris"}],[171769889,{"idx":33,"name":"jakc-lens","tpage_name":"templea-vis-pris"}],[220528784,{"idx":144,"name":"farmer-shirt","tpage_name":"museum4-pris"}],[171769890,{"idx":34,"name":"jakc-scarf","tpage_name":"templea-vis-pris"}],[220528785,{"idx":145,"name":"farmer-shirt2","tpage_name":"museum4-pris"}],[220528786,{"idx":146,"name":"farmer-stick","tpage_name":"museum4-pris"}],[171769892,{"idx":36,"name":"jakc-skirt","tpage_name":"templea-vis-pris"}],[220528787,{"idx":147,"name":"farmer-teeth","tpage_name":"museum4-pris"}],[220528788,{"idx":148,"name":"farmer-toes","tpage_name":"museum4-pris"}],[220528814,{"idx":174,"name":"fman-beard-03","tpage_name":"museum4-pris"}],[71303216,{"idx":48,"name":"king-lgblackstrap","tpage_name":"ldamsig-pris2"}],[106364965,{"idx":37,"name":"veger-whitecloth","tpage_name":"mined-pris2"}],[220528815,{"idx":175,"name":"fman-belt","tpage_name":"museum4-pris"}],[71303217,{"idx":49,"name":"king-precursermetal-decor","tpage_name":"ldamsig-pris2"}],[220528816,{"idx":176,"name":"fman-eye-centered-16x16","tpage_name":"museum4-pris"}],[211550214,{"idx":6,"name":"preship-window-strip-01","tpage_name":"temp-shrub"}],[71303218,{"idx":50,"name":"king-precursermetal-plain","tpage_name":"ldamsig-pris2"}],[189005936,{"idx":112,"name":"dp-bipedal-backhand-01","tpage_name":"factoryd-vis-pris"}],[223870976,{"idx":0,"name":"bam-eyelight","tpage_name":"museum3b-pris2"}],[81723475,{"idx":83,"name":"jakc-scarf","tpage_name":"ljndklev-pris"}],[220528817,{"idx":177,"name":"fman-eyelid","tpage_name":"museum4-pris"}],[211550215,{"idx":7,"name":"preship-metal-hull-03","tpage_name":"temp-shrub"}],[71303219,{"idx":51,"name":"king-precursermetal-trim","tpage_name":"ldamsig-pris2"}],[189005937,{"idx":113,"name":"dp-bipedal-chest-01","tpage_name":"factoryd-vis-pris"}],[223870977,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum3b-pris2"}],[81723476,{"idx":84,"name":"jakc-scarfhanging","tpage_name":"ljndklev-pris"}],[220528818,{"idx":178,"name":"fman-flesh","tpage_name":"museum4-pris"}],[211550216,{"idx":8,"name":"preship-metal-hull-01","tpage_name":"temp-shrub"}],[71303220,{"idx":52,"name":"king-precursermetal-trim2","tpage_name":"ldamsig-pris2"}],[189005938,{"idx":114,"name":"dp-bipedal-dk-hose-01","tpage_name":"factoryd-vis-pris"}],[223870978,{"idx":2,"name":"baron-armor","tpage_name":"museum3b-pris2"}],[81723477,{"idx":85,"name":"jakc-skirt","tpage_name":"ljndklev-pris"}],[220528819,{"idx":179,"name":"fman-metal","tpage_name":"museum4-pris"}],[211550217,{"idx":9,"name":"preship-metal-edge-03","tpage_name":"temp-shrub"}],[71303221,{"idx":53,"name":"king-precursermetal-trimbolt","tpage_name":"ldamsig-pris2"}],[220201196,{"idx":236,"name":"samos-eyelid","tpage_name":"museum3-pris"}],[192937985,{"idx":1,"name":"precur-plate-large-01","tpage_name":"lprecurc-vis-tfrag"}],[173015105,{"idx":65,"name":"precur-light-green-big","tpage_name":"precurc-vis-tfrag"}],[171769925,{"idx":69,"name":"tpl-door-edge-01","tpage_name":"templea-vis-pris"}],[189005939,{"idx":115,"name":"dp-bipedal-dk-plate-01","tpage_name":"factoryd-vis-pris"}],[223870979,{"idx":3,"name":"baron-armshield","tpage_name":"museum3b-pris2"}],[81723478,{"idx":86,"name":"jakc-waistband2","tpage_name":"ljndklev-pris"}],[220528820,{"idx":180,"name":"fman-sharktooth","tpage_name":"museum4-pris"}],[211550218,{"idx":10,"name":"preship-metal-trim-03","tpage_name":"temp-shrub"}],[71303222,{"idx":54,"name":"king-shoebottom","tpage_name":"ldamsig-pris2"}],[171769927,{"idx":71,"name":"tpl-door-round-01","tpage_name":"templea-vis-pris"}],[262192,{"idx":48,"name":"lasersmoke-22","tpage_name":"level-default-sprite"}],[189005941,{"idx":117,"name":"dp-bipedal-dk-plate-03","tpage_name":"factoryd-vis-pris"}],[223870981,{"idx":5,"name":"baron-blackleatherstrap","tpage_name":"museum3b-pris2"}],[81723480,{"idx":88,"name":"jakc-wristband-a2","tpage_name":"ljndklev-pris"}],[220528822,{"idx":182,"name":"fman-tatoo","tpage_name":"museum4-pris"}],[211550220,{"idx":12,"name":"preship-metal-edge-01","tpage_name":"temp-shrub"}],[71303224,{"idx":56,"name":"king-teeth","tpage_name":"ldamsig-pris2"}],[171769928,{"idx":72,"name":"temple_sandstone_out_01","tpage_name":"templea-vis-pris"}],[262193,{"idx":49,"name":"lasersmoke-23","tpage_name":"level-default-sprite"}],[189005942,{"idx":118,"name":"dp-bipedal-dk-plate-04","tpage_name":"factoryd-vis-pris"}],[223870982,{"idx":6,"name":"baron-bolts","tpage_name":"museum3b-pris2"}],[81723481,{"idx":89,"name":"jakchires-arm","tpage_name":"ljndklev-pris"}],[220528823,{"idx":183,"name":"fman-teeth","tpage_name":"museum4-pris"}],[211550221,{"idx":13,"name":"preship-metal-edge-02","tpage_name":"temp-shrub"}],[71303225,{"idx":57,"name":"king-thinstrap","tpage_name":"ldamsig-pris2"}],[220201200,{"idx":240,"name":"cguardred-brushedmetal","tpage_name":"museum3-pris"}],[171769930,{"idx":74,"name":"temple_sandstone_trim02","tpage_name":"templea-vis-pris"}],[189005944,{"idx":120,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"factoryd-vis-pris"}],[223870984,{"idx":8,"name":"baron-brushedmetal","tpage_name":"museum3b-pris2"}],[81723483,{"idx":91,"name":"jakchires-brownstrap","tpage_name":"ljndklev-pris"}],[220528825,{"idx":185,"name":"fman-vest","tpage_name":"museum4-pris"}],[211550223,{"idx":15,"name":"preship-metal-trim-02","tpage_name":"temp-shrub"}],[71303227,{"idx":59,"name":"king-vestback","tpage_name":"ldamsig-pris2"}],[220201202,{"idx":242,"name":"cguardred-eyering","tpage_name":"museum3-pris"}],[192937991,{"idx":7,"name":"precur-tubes-segment-01","tpage_name":"lprecurc-vis-tfrag"}],[171769931,{"idx":75,"name":"tpl-symbl-yellow-01","tpage_name":"templea-vis-pris"}],[189005945,{"idx":121,"name":"dp-bipedal-eye-01","tpage_name":"factoryd-vis-pris"}],[223870985,{"idx":9,"name":"baron-chestemblem","tpage_name":"museum3b-pris2"}],[81723484,{"idx":92,"name":"jakchires-brwnleather","tpage_name":"ljndklev-pris"}],[220528826,{"idx":186,"name":"fman-vestplain","tpage_name":"museum4-pris"}],[211550224,{"idx":16,"name":"preship-metal-hull-02","tpage_name":"temp-shrub"}],[71303228,{"idx":60,"name":"king-wrap","tpage_name":"ldamsig-pris2"}],[220201203,{"idx":243,"name":"cguardred-face","tpage_name":"museum3-pris"}],[171769932,{"idx":76,"name":"tpl-symbl-yellow-glow-01","tpage_name":"templea-vis-pris"}],[189005946,{"idx":122,"name":"dp-bipedal-finger-plate-01","tpage_name":"factoryd-vis-pris"}],[223870986,{"idx":10,"name":"baron-eye","tpage_name":"museum3b-pris2"}],[81723485,{"idx":93,"name":"jakchires-chestplate","tpage_name":"ljndklev-pris"}],[220528827,{"idx":187,"name":"fman-wrap","tpage_name":"museum4-pris"}],[71303229,{"idx":61,"name":"king-wraps","tpage_name":"ldamsig-pris2"}],[220201204,{"idx":244,"name":"cguardred-glove","tpage_name":"museum3-pris"}],[171638807,{"idx":23,"name":"warpgate-post-01","tpage_name":"templed-vis-tfrag"}],[172883987,{"idx":19,"name":"common-black","tpage_name":"precura-vis-pris"}],[171769934,{"idx":78,"name":"pre-lens-01","tpage_name":"templea-vis-pris"}],[189005948,{"idx":124,"name":"dp-bipedal-power-hose","tpage_name":"factoryd-vis-pris"}],[223870988,{"idx":12,"name":"baron-face","tpage_name":"museum3b-pris2"}],[220528829,{"idx":189,"name":"hair-01","tpage_name":"museum4-pris"}],[220201206,{"idx":246,"name":"cguardred-gunboltlight","tpage_name":"museum3-pris"}],[171638808,{"idx":24,"name":"temple_sandstone_base01","tpage_name":"templed-vis-tfrag"}],[172883988,{"idx":20,"name":"dp-bipedal-backhand-01","tpage_name":"precura-vis-pris"}],[171769935,{"idx":79,"name":"pre-lens-glass01","tpage_name":"templea-vis-pris"}],[189005949,{"idx":125,"name":"dp-bipedal-skin-bulge-01","tpage_name":"factoryd-vis-pris"}],[223870989,{"idx":13,"name":"baron-hand","tpage_name":"museum3b-pris2"}],[220528830,{"idx":190,"name":"hudax-buckle","tpage_name":"museum4-pris"}],[220201207,{"idx":247,"name":"cguardred-gunhandle","tpage_name":"museum3-pris"}],[171638809,{"idx":25,"name":"temple_sandstone_box01","tpage_name":"templed-vis-tfrag"}],[172883989,{"idx":21,"name":"dp-bipedal-chest-01","tpage_name":"precura-vis-pris"}],[192937996,{"idx":12,"name":"precur-wall-groove-01","tpage_name":"lprecurc-vis-tfrag"}],[171769936,{"idx":80,"name":"pre-light-01","tpage_name":"templea-vis-pris"}],[189005950,{"idx":126,"name":"dp-bipedal-skin-bulge-02","tpage_name":"factoryd-vis-pris"}],[223870990,{"idx":14,"name":"baron-headshield","tpage_name":"museum3b-pris2"}],[81723489,{"idx":97,"name":"jakchires-eyelid","tpage_name":"ljndklev-pris"}],[220528831,{"idx":191,"name":"hudax-cotton-32x32","tpage_name":"museum4-pris"}],[220201208,{"idx":248,"name":"cguardred-gunleather","tpage_name":"museum3-pris"}],[171638810,{"idx":26,"name":"temple_sandstone_pill01","tpage_name":"templed-vis-tfrag"}],[172883990,{"idx":22,"name":"dp-bipedal-dk-hose-01","tpage_name":"precura-vis-pris"}],[171769937,{"idx":81,"name":"pre-med-01","tpage_name":"templea-vis-pris"}],[173015061,{"idx":21,"name":"precur-plate-honey-01","tpage_name":"precurc-vis-tfrag"}],[171769881,{"idx":25,"name":"daxterlense","tpage_name":"templea-vis-pris"}],[189005951,{"idx":127,"name":"dp-bipedal-skin-plate-01","tpage_name":"factoryd-vis-pris"}],[223870991,{"idx":15,"name":"baron-jacketinside","tpage_name":"museum3b-pris2"}],[220528832,{"idx":192,"name":"hudax-cotton-gather","tpage_name":"museum4-pris"}],[220201209,{"idx":249,"name":"cguardred-gunmetaldark","tpage_name":"museum3-pris"}],[192937998,{"idx":14,"name":"precur-rubber-01","tpage_name":"lprecurc-vis-tfrag"}],[171769938,{"idx":82,"name":"pre-pipe-01","tpage_name":"templea-vis-pris"}],[173015062,{"idx":22,"name":"precur-tubes-bundle-01","tpage_name":"precurc-vis-tfrag"}],[171769882,{"idx":26,"name":"daxternose","tpage_name":"templea-vis-pris"}],[172883991,{"idx":23,"name":"dp-bipedal-dk-plate-01","tpage_name":"precura-vis-pris"}],[189005952,{"idx":128,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"factoryd-vis-pris"}],[223870992,{"idx":16,"name":"baron-jacketsleeve","tpage_name":"museum3b-pris2"}],[220528833,{"idx":193,"name":"hudax-eyelid","tpage_name":"museum4-pris"}],[220201210,{"idx":250,"name":"cguardred-gunmetaldark2","tpage_name":"museum3-pris"}],[171638828,{"idx":44,"name":"temple_sandstone_trim02","tpage_name":"templed-vis-tfrag"}],[172884008,{"idx":40,"name":"environment-darkprec","tpage_name":"precura-vis-pris"}],[171769955,{"idx":99,"name":"dp-bipedal-dk-plate-01","tpage_name":"templea-vis-pris"}],[220528850,{"idx":210,"name":"redsage-dial","tpage_name":"museum4-pris"}],[217055374,{"idx":142,"name":"veger-walkingstick-01","tpage_name":"museum2-pris2"}],[71565316,{"idx":4,"name":"pecker-plume","tpage_name":"ldampksm-pris"}],[67829776,{"idx":16,"name":"screen-13","tpage_name":"freehq-sprite"}],[203096099,{"idx":35,"name":"citn-allleatherstrap","tpage_name":"lctyass-pris"}],[208076819,{"idx":19,"name":"terraformer-tank-01","tpage_name":"desboss2-pris2"}],[197328899,{"idx":3,"name":"facc-hole-grill-01","tpage_name":"factorya-shrub"}],[193527889,{"idx":81,"name":"errolcyber-jointpipe","tpage_name":"desboss2-pris"}],[171769956,{"idx":100,"name":"dp-bipedal-dk-plate-02","tpage_name":"templea-vis-pris"}],[220528851,{"idx":211,"name":"redsage-flesh","tpage_name":"museum4-pris"}],[217055375,{"idx":143,"name":"veger-walkingstick-02","tpage_name":"museum2-pris2"}],[71565317,{"idx":5,"name":"pecker-tail","tpage_name":"ldampksm-pris"}],[67829777,{"idx":17,"name":"screen-14","tpage_name":"freehq-sprite"}],[203096100,{"idx":36,"name":"citn-allleatherwrinkled","tpage_name":"lctyass-pris"}],[208076820,{"idx":20,"name":"terraformer-bluelight","tpage_name":"desboss2-pris2"}],[171769891,{"idx":35,"name":"jakc-scarfhanging","tpage_name":"templea-vis-pris"}],[173015071,{"idx":31,"name":"precur-tube-joint-02","tpage_name":"precurc-vis-tfrag"}],[198574080,{"idx":0,"name":"des-mount-01","tpage_name":"hanga-vis-tfrag"}],[197328900,{"idx":4,"name":"facc-door-frame-01","tpage_name":"factorya-shrub"}],[193527890,{"idx":82,"name":"errolcyber-metaleyelid","tpage_name":"desboss2-pris"}],[171769957,{"idx":101,"name":"dp-bipedal-dk-plate-03","tpage_name":"templea-vis-pris"}],[220528852,{"idx":212,"name":"redsage-lense","tpage_name":"museum4-pris"}],[171769958,{"idx":102,"name":"dp-bipedal-dk-plate-04","tpage_name":"templea-vis-pris"}],[223871012,{"idx":36,"name":"brut-cloaktop","tpage_name":"museum3b-pris2"}],[720906,{"idx":10,"name":"loadsave-game-options","tpage_name":"level-default-shrub"}],[220528853,{"idx":213,"name":"redsage-multitile","tpage_name":"museum4-pris"}],[223871013,{"idx":37,"name":"brut-diaper","tpage_name":"museum3b-pris2"}],[720907,{"idx":11,"name":"loadsave-graphic-options","tpage_name":"level-default-shrub"}],[220528854,{"idx":214,"name":"redsage-multitileglow","tpage_name":"museum4-pris"}],[223871014,{"idx":38,"name":"brut-eye","tpage_name":"museum3b-pris2"}],[720908,{"idx":12,"name":"loadsave-journal","tpage_name":"level-default-shrub"}],[220528855,{"idx":215,"name":"redsage-squaretile","tpage_name":"museum4-pris"}],[223871015,{"idx":39,"name":"brut-eyelid","tpage_name":"museum3b-pris2"}],[720909,{"idx":13,"name":"loadsave-load","tpage_name":"level-default-shrub"}],[220528856,{"idx":216,"name":"sculptor-belt","tpage_name":"museum4-pris"}],[223871016,{"idx":40,"name":"brut-feather","tpage_name":"museum3b-pris2"}],[720910,{"idx":14,"name":"loadsave-map","tpage_name":"level-default-shrub"}],[220528857,{"idx":217,"name":"sculptor-eye","tpage_name":"museum4-pris"}],[223871017,{"idx":41,"name":"brut-finger","tpage_name":"museum3b-pris2"}],[220528858,{"idx":218,"name":"sculptor-eyelid","tpage_name":"museum4-pris"}],[220528859,{"idx":219,"name":"sculptor-glove","tpage_name":"museum4-pris"}],[220528860,{"idx":220,"name":"sculptor-hair","tpage_name":"museum4-pris"}],[223871020,{"idx":44,"name":"brut-foottop","tpage_name":"museum3b-pris2"}],[172228649,{"idx":41,"name":"temple_sandstone_stepside01","tpage_name":"templeb-vis-pris"}],[220528861,{"idx":221,"name":"sculptor-hammer","tpage_name":"museum4-pris"}],[189071360,{"idx":0,"name":"errolcyber-lens","tpage_name":"factoryd-vis-water"}],[171638840,{"idx":56,"name":"common_sandstone_trim01","tpage_name":"templed-vis-tfrag"}],[172884020,{"idx":52,"name":"neo-wasp-base","tpage_name":"precura-vis-pris"}],[223871021,{"idx":45,"name":"brut-hair","tpage_name":"museum3b-pris2"}],[172228650,{"idx":42,"name":"temple_sandstone_trim02","tpage_name":"templeb-vis-pris"}],[720915,{"idx":19,"name":"loadsave-secrets","tpage_name":"level-default-shrub"}],[220528862,{"idx":222,"name":"sculptor-headband","tpage_name":"museum4-pris"}],[171638841,{"idx":57,"name":"common_sandstone_pill01","tpage_name":"templed-vis-tfrag"}],[172884021,{"idx":53,"name":"neo-wasp-body","tpage_name":"precura-vis-pris"}],[223871022,{"idx":46,"name":"brut-handpalm","tpage_name":"museum3b-pris2"}],[720916,{"idx":20,"name":"loadsave-part-02c","tpage_name":"level-default-shrub"}],[220528863,{"idx":223,"name":"sculptor-metal","tpage_name":"museum4-pris"}],[171638842,{"idx":58,"name":"common_sandstone_base01","tpage_name":"templed-vis-tfrag"}],[172884022,{"idx":54,"name":"neo-wasp-brown","tpage_name":"precura-vis-pris"}],[223871023,{"idx":47,"name":"brut-headtop","tpage_name":"museum3b-pris2"}],[720917,{"idx":21,"name":"loadsave-frametop","tpage_name":"level-default-shrub"}],[220528864,{"idx":224,"name":"sculptor-pants","tpage_name":"museum4-pris"}],[171638843,{"idx":59,"name":"temple_sandstone_pill07","tpage_name":"templed-vis-tfrag"}],[172884023,{"idx":55,"name":"neo-wasp-dark-brown","tpage_name":"precura-vis-pris"}],[223871024,{"idx":48,"name":"brut-jacket","tpage_name":"museum3b-pris2"}],[720918,{"idx":22,"name":"loadsave-metalframe","tpage_name":"level-default-shrub"}],[220528865,{"idx":225,"name":"sculptor-patch-01","tpage_name":"museum4-pris"}],[190316544,{"idx":0,"name":"rail-env-wall-01","tpage_name":"railcst-shrub"}],[171638844,{"idx":60,"name":"temple_sandstone_brick-02","tpage_name":"templed-vis-tfrag"}],[172884024,{"idx":56,"name":"neo-wasp-eye","tpage_name":"precura-vis-pris"}],[223871025,{"idx":49,"name":"brut-jaw","tpage_name":"museum3b-pris2"}],[720919,{"idx":23,"name":"loadsave-post","tpage_name":"level-default-shrub"}],[220528866,{"idx":226,"name":"sculptor-patch-02","tpage_name":"museum4-pris"}],[223871026,{"idx":50,"name":"brut-legfur","tpage_name":"museum3b-pris2"}],[206241797,{"idx":5,"name":"mhcity-building-base-01","tpage_name":"lctydest-tfrag"}],[188809277,{"idx":61,"name":"facc-metal-panel-07-lotweak","tpage_name":"factoryd-vis-tfrag"}],[720920,{"idx":24,"name":"loadsave-metalframe-02","tpage_name":"level-default-shrub"}],[220528867,{"idx":227,"name":"sculptor-scarf","tpage_name":"museum4-pris"}],[223871027,{"idx":51,"name":"brut-lens","tpage_name":"museum3b-pris2"}],[220528868,{"idx":228,"name":"sculptor-screw","tpage_name":"museum4-pris"}],[214368280,{"idx":24,"name":"onin-toe","tpage_name":"loninsim-pris"}],[221839360,{"idx":0,"name":"hud-terraformer-head-01","tpage_name":"deswalk-minimap"}],[223871028,{"idx":52,"name":"brut-metalrim","tpage_name":"museum3b-pris2"}],[206241799,{"idx":7,"name":"mhcity-mektunnel","tpage_name":"lctydest-tfrag"}],[188809279,{"idx":63,"name":"facc-redspot","tpage_name":"factoryd-vis-tfrag"}],[220528869,{"idx":229,"name":"sculptor-shirt","tpage_name":"museum4-pris"}],[221839361,{"idx":1,"name":"hud-mhcentipede-meter-01","tpage_name":"deswalk-minimap"}],[223871029,{"idx":53,"name":"brut-shirt","tpage_name":"museum3b-pris2"}],[220528870,{"idx":230,"name":"sculptor-teeth","tpage_name":"museum4-pris"}],[221839362,{"idx":2,"name":"hud-small-frame-01","tpage_name":"deswalk-minimap"}],[223871030,{"idx":54,"name":"brut-teeth","tpage_name":"museum3b-pris2"}],[220528871,{"idx":231,"name":"sculptor-teeth-02","tpage_name":"museum4-pris"}],[221839363,{"idx":3,"name":"hud-small-frame-02","tpage_name":"deswalk-minimap"}],[223871031,{"idx":55,"name":"brut-ties","tpage_name":"museum3b-pris2"}],[220528872,{"idx":232,"name":"sculptor-vestbottom","tpage_name":"museum4-pris"}],[223871032,{"idx":56,"name":"brut-toenails","tpage_name":"museum3b-pris2"}],[220528873,{"idx":233,"name":"sculptor-visor","tpage_name":"museum4-pris"}],[223871033,{"idx":57,"name":"charHOLD","tpage_name":"museum3b-pris2"}],[220528874,{"idx":234,"name":"vest-01","tpage_name":"museum4-pris"}],[223871035,{"idx":59,"name":"environment-oldmetal","tpage_name":"museum3b-pris2"}],[220528876,{"idx":236,"name":"yelsage-barrelplain","tpage_name":"museum4-pris"}],[220528877,{"idx":237,"name":"yelsage-barrelstrap","tpage_name":"museum4-pris"}],[220528878,{"idx":238,"name":"yelsage-barreltop","tpage_name":"museum4-pris"}],[220528879,{"idx":239,"name":"yelsage-beard","tpage_name":"museum4-pris"}],[220528880,{"idx":240,"name":"yelsage-boltstrip","tpage_name":"museum4-pris"}],[220528881,{"idx":241,"name":"yelsage-eye-16x16new","tpage_name":"museum4-pris"}],[220528882,{"idx":242,"name":"yelsage-eyelid","tpage_name":"museum4-pris"}],[220528883,{"idx":243,"name":"yelsage-flesh","tpage_name":"museum4-pris"}],[220528884,{"idx":244,"name":"yelsage-handlewrap","tpage_name":"museum4-pris"}],[220528885,{"idx":245,"name":"yelsage-headpipe-01","tpage_name":"museum4-pris"}],[200081416,{"idx":8,"name":"grunt-skin-03","tpage_name":"volcanoa-vis-pris2"}],[170197096,{"idx":104,"name":"tess-underwear","tpage_name":"outrocst-pris2"}],[202571776,{"idx":0,"name":"rail-base-mid-01","tpage_name":"raila-tfrag"}],[220528980,{"idx":340,"name":"minetall-overalls","tpage_name":"museum4-pris"}],[220528886,{"idx":246,"name":"yelsage-helmet","tpage_name":"museum4-pris"}],[170197097,{"idx":105,"name":"tess-upperboot","tpage_name":"outrocst-pris2"}],[202571777,{"idx":1,"name":"rail-light-red","tpage_name":"raila-tfrag"}],[220528981,{"idx":341,"name":"minetall-pants","tpage_name":"museum4-pris"}],[220528887,{"idx":247,"name":"yelsage-jacketbrown","tpage_name":"museum4-pris"}],[195100705,{"idx":33,"name":"nwasp-eye-01","tpage_name":"lblowtkg-pris"}],[202571785,{"idx":9,"name":"rail-pipe-05","tpage_name":"raila-tfrag"}],[220528989,{"idx":349,"name":"ogre-bolt","tpage_name":"museum4-pris"}],[220528895,{"idx":255,"name":"yelsage-pantsbutton","tpage_name":"museum4-pris"}],[220528896,{"idx":256,"name":"yelsage-ring","tpage_name":"museum4-pris"}],[220528897,{"idx":257,"name":"yelsage-smallplainmetal","tpage_name":"museum4-pris"}],[220528898,{"idx":258,"name":"yelsage-staffmetal-01","tpage_name":"museum4-pris"}],[220528899,{"idx":259,"name":"yelsage-teeth","tpage_name":"museum4-pris"}],[220528900,{"idx":260,"name":"yelsage-yellowlens","tpage_name":"museum4-pris"}],[220528901,{"idx":261,"name":"mayor-eyelid","tpage_name":"museum4-pris"}],[220528903,{"idx":263,"name":"mayor-hair-02","tpage_name":"museum4-pris"}],[220528904,{"idx":264,"name":"mayor-hair-03","tpage_name":"museum4-pris"}],[220528905,{"idx":265,"name":"mayor-haircurl","tpage_name":"museum4-pris"}],[220528906,{"idx":266,"name":"mayor-hat","tpage_name":"museum4-pris"}],[220528907,{"idx":267,"name":"mayor-pants","tpage_name":"museum4-pris"}],[206962699,{"idx":11,"name":"citywide-wall-greybolts","tpage_name":"lfreeout-tfrag"}],[205717519,{"idx":15,"name":"bomb-target-01","tpage_name":"lgunnorm-pris"}],[220528908,{"idx":268,"name":"mayor-scarf","tpage_name":"museum4-pris"}],[206962700,{"idx":12,"name":"citywide-palace-support-03","tpage_name":"lfreeout-tfrag"}],[205717520,{"idx":16,"name":"kg-target-c-front","tpage_name":"lgunnorm-pris"}],[172949561,{"idx":57,"name":"terraformer-organic-03","tpage_name":"precurd-vis-pris"}],[190382081,{"idx":1,"name":"rail-base-dark-01","tpage_name":"raila-shrub"}],[120258583,{"idx":23,"name":"kg-pickup-pipe","tpage_name":"lctyhijk-pris"}],[222888011,{"idx":75,"name":"citywide-palace-01","tpage_name":"lfacctyb-vis-tfrag"}],[222167042,{"idx":2,"name":"flut-neck","tpage_name":"museum4-tfrag"}],[193527902,{"idx":94,"name":"errolcyber-teeth","tpage_name":"desboss2-pris"}],[42401799,{"idx":7,"name":"wascity-outerwall-metal-d","tpage_name":"wasdoors-vis-tfrag"}],[217055277,{"idx":45,"name":"king-greenmetalplain","tpage_name":"museum2-pris2"}],[172949562,{"idx":58,"name":"terraformer-transbodytop-01","tpage_name":"precurd-vis-pris"}],[190382082,{"idx":2,"name":"rail-rider-decal-01","tpage_name":"raila-shrub"}],[120258584,{"idx":24,"name":"kg-pickup-sidelogo","tpage_name":"lctyhijk-pris"}],[222888012,{"idx":76,"name":"citywide-hangmetal","tpage_name":"lfacctyb-vis-tfrag"}],[217055278,{"idx":46,"name":"king-hair","tpage_name":"museum2-pris2"}],[208142348,{"idx":12,"name":"terraformer-metal-11","tpage_name":"desboss1-pris2"}],[194445368,{"idx":56,"name":"citwide-crimson-tube","tpage_name":"gridcst-pris"}],[223019047,{"idx":39,"name":"rub-wallrock-dirt","tpage_name":"rublcst-vis-tfrag"}],[208142349,{"idx":13,"name":"terraformer-minestrips-01","tpage_name":"desboss1-pris2"}],[194445369,{"idx":57,"name":"citwide-crimson-wall-plain","tpage_name":"gridcst-pris"}],[223019048,{"idx":40,"name":"slum-ground-01","tpage_name":"rublcst-vis-tfrag"}],[208142350,{"idx":14,"name":"terraformer-organic-01","tpage_name":"desboss1-pris2"}],[194445370,{"idx":58,"name":"gun-main","tpage_name":"gridcst-pris"}],[223019049,{"idx":41,"name":"rail-env-car-01","tpage_name":"rublcst-vis-tfrag"}],[189333524,{"idx":20,"name":"vehicle-snake-gun-02","tpage_name":"comba-shrub"}],[195559424,{"idx":0,"name":"bam-eyelight","tpage_name":"towercst-pris2"}],[142016548,{"idx":36,"name":"facc-seam-metal-hitweak","tpage_name":"lfacrm2-tfrag"}],[55312428,{"idx":44,"name":"was-kangalizard-fin","tpage_name":"wascityb-vis-pris"}],[208142351,{"idx":15,"name":"terraformer-organic-02","tpage_name":"desboss1-pris2"}],[194445371,{"idx":59,"name":"back01","tpage_name":"gridcst-pris"}],[223019050,{"idx":42,"name":"rail-env-wall-01","tpage_name":"rublcst-vis-tfrag"}],[154796057,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"ljakndax-pris"}],[172949563,{"idx":59,"name":"jakc-armor","tpage_name":"precurd-vis-pris"}],[190382083,{"idx":3,"name":"rail-pipe-03","tpage_name":"raila-shrub"}],[120258585,{"idx":25,"name":"kg-pickup-wings01","tpage_name":"lctyhijk-pris"}],[222888013,{"idx":77,"name":"city-lowres-mhcity-wall-02","tpage_name":"lfacctyb-vis-tfrag"}],[217055279,{"idx":47,"name":"king-hand","tpage_name":"museum2-pris2"}],[220201144,{"idx":184,"name":"samosyoung-hair","tpage_name":"museum3-pris"}],[173015052,{"idx":12,"name":"precur-wall-groove-01","tpage_name":"precurc-vis-tfrag"}],[171769872,{"idx":16,"name":"daxterbodyshort-eix","tpage_name":"templea-vis-pris"}],[195493917,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"towercst-pris"}],[188022837,{"idx":53,"name":"cipher-drum-01","tpage_name":"lvincst-pris"}],[170197035,{"idx":43,"name":"samos-log-01","tpage_name":"outrocst-pris2"}],[181403655,{"idx":7,"name":"vehicle-body-panel-01","tpage_name":"desjump-pris"}],[171442215,{"idx":39,"name":"rail-env-wall-01","tpage_name":"templea-vis-tfrag"}],[220528767,{"idx":127,"name":"explorer-spats","tpage_name":"museum4-pris"}],[172949564,{"idx":60,"name":"jakc-chestplate-straps","tpage_name":"precurd-vis-pris"}],[190382084,{"idx":4,"name":"rail-dash-01","tpage_name":"raila-shrub"}],[120258586,{"idx":26,"name":"kg-pickup-wings02","tpage_name":"lctyhijk-pris"}],[222888014,{"idx":78,"name":"city-lowres-mhcity-wall-01","tpage_name":"lfacctyb-vis-tfrag"}],[220201145,{"idx":185,"name":"samosyoung-log-01","tpage_name":"museum3-pris"}],[173015053,{"idx":13,"name":"common-black","tpage_name":"precurc-vis-tfrag"}],[171769873,{"idx":17,"name":"daxterbolt","tpage_name":"templea-vis-pris"}],[220528768,{"idx":128,"name":"explorer-stick","tpage_name":"museum4-pris"}],[220528968,{"idx":328,"name":"geo-vest3","tpage_name":"museum4-pris"}],[220528935,{"idx":295,"name":"mineshort-twine","tpage_name":"museum4-pris"}],[172949565,{"idx":61,"name":"jakc-gogglemetal","tpage_name":"precurd-vis-pris"}],[190382085,{"idx":5,"name":"rail-gray-metal-01","tpage_name":"raila-shrub"}],[222888015,{"idx":79,"name":"city-lowres-mhcity-detower-01","tpage_name":"lfacctyb-vis-tfrag"}],[220528969,{"idx":329,"name":"geo-vest4","tpage_name":"museum4-pris"}],[220528936,{"idx":296,"name":"mineshort-wrap","tpage_name":"museum4-pris"}],[220528970,{"idx":330,"name":"minetall-belt","tpage_name":"museum4-pris"}],[223019019,{"idx":11,"name":"rub-beam-gen","tpage_name":"rublcst-vis-tfrag"}],[170459164,{"idx":28,"name":"jakc-scarf","tpage_name":"ljkdxvin-pris"}],[171704344,{"idx":24,"name":"temple_sandstone_trim01","tpage_name":"templec-vis-tfrag"}],[172949524,{"idx":20,"name":"dm-ship-hull-01","tpage_name":"precurd-vis-pris"}],[175439884,{"idx":12,"name":"king-greenmetal","tpage_name":"rubblea-vis-pris2"}],[174194704,{"idx":16,"name":"jakchires-blackstrap","tpage_name":"ljkfeet-pris"}],[162725905,{"idx":17,"name":"rail-light-yellow","tpage_name":"railf-tfrag"}],[135331945,{"idx":105,"name":"rub-pal-metal","tpage_name":"rubblea-vis-tfrag"}],[220528966,{"idx":326,"name":"geo-vest","tpage_name":"museum4-pris"}],[220528967,{"idx":327,"name":"geo-vest2","tpage_name":"museum4-pris"}],[208142347,{"idx":11,"name":"terraformer-metal-10","tpage_name":"desboss1-pris2"}],[194445367,{"idx":55,"name":"citwide-crimson-red","tpage_name":"gridcst-pris"}],[223019046,{"idx":38,"name":"rub-dirt-a","tpage_name":"rublcst-vis-tfrag"}],[220528971,{"idx":331,"name":"minetall-birbody","tpage_name":"museum4-pris"}],[220529006,{"idx":366,"name":"ogre-vestfront","tpage_name":"museum4-pris"}],[126877729,{"idx":33,"name":"ctyslumc-light","tpage_name":"lfacrm1-tfrag"}],[134348809,{"idx":9,"name":"forest-leaf4","tpage_name":"volcanoa-sprite"}],[220529007,{"idx":367,"name":"ogre-wristband","tpage_name":"museum4-pris"}],[220529008,{"idx":368,"name":"p-white","tpage_name":"museum4-pris"}],[216989797,{"idx":101,"name":"prec-tess-sleeve","tpage_name":"museum2-pris"}],[223150154,{"idx":74,"name":"kid-finger","tpage_name":"rublcst-vis-pris"}],[216989798,{"idx":102,"name":"prec-tess-nose","tpage_name":"museum2-pris"}],[223150155,{"idx":75,"name":"kid-foot","tpage_name":"rublcst-vis-pris"}],[216989799,{"idx":103,"name":"daxter-furhilite","tpage_name":"museum2-pris"}],[223150156,{"idx":76,"name":"kid-hair","tpage_name":"rublcst-vis-pris"}],[184418327,{"idx":23,"name":"rub-metal-wallgrill","tpage_name":"stadiuma-vis-tfrag"}],[171966527,{"idx":63,"name":"charHOLD","tpage_name":"templea-vis-pris2"}],[190644227,{"idx":3,"name":"veger-bookleather","tpage_name":"templee-pris2"}],[216989800,{"idx":104,"name":"daxter-pants","tpage_name":"museum2-pris"}],[223150157,{"idx":77,"name":"kid-helmet","tpage_name":"rublcst-vis-pris"}],[655366,{"idx":6,"name":"sat-shield","tpage_name":"level-default-warp"}],[216989801,{"idx":105,"name":"daxterbolt","tpage_name":"museum2-pris"}],[223150158,{"idx":78,"name":"kid-medallion","tpage_name":"rublcst-vis-pris"}],[655367,{"idx":7,"name":"sat-shield-dest","tpage_name":"level-default-warp"}],[216989802,{"idx":106,"name":"daxtergoggles","tpage_name":"museum2-pris"}],[223150159,{"idx":79,"name":"kid-overalls","tpage_name":"rublcst-vis-pris"}],[216989803,{"idx":107,"name":"daxterhelmetplain","tpage_name":"museum2-pris"}],[223150160,{"idx":80,"name":"kid-sash","tpage_name":"rublcst-vis-pris"}],[162725899,{"idx":11,"name":"rail-env-car-01","tpage_name":"railf-tfrag"}],[135331939,{"idx":99,"name":"rub-wall-gen-06","tpage_name":"rubblea-vis-tfrag"}],[129171479,{"idx":23,"name":"sewer-stone-crack-02","tpage_name":"sewn-vis-tfrag"}],[220528938,{"idx":298,"name":"gambler-barrel","tpage_name":"museum4-pris"}],[217055331,{"idx":99,"name":"sig-gun-05","tpage_name":"museum2-pris2"}],[195559491,{"idx":67,"name":"torn-face","tpage_name":"towercst-pris2"}],[170328095,{"idx":31,"name":"comb-redmarker","tpage_name":"combe-tfrag"}],[172818455,{"idx":23,"name":"precur-wall-tube-02","tpage_name":"precurd-vis-tfrag"}],[223805456,{"idx":16,"name":"errol-facemask","tpage_name":"museum3b-pris"}],[223150131,{"idx":51,"name":"jakchires-facert","tpage_name":"rublcst-vis-pris"}],[221904951,{"idx":55,"name":"jak-orig-jackettop","tpage_name":"museum4-pris2"}],[153681958,{"idx":38,"name":"mhcity-goo-base","tpage_name":"mhcityb-vis-tfrag"}],[172949568,{"idx":64,"name":"jakc-scarfhanging","tpage_name":"precurd-vis-pris"}],[190382088,{"idx":8,"name":"rail-light-blue","tpage_name":"raila-shrub"}],[222888018,{"idx":82,"name":"city-lowres-mhcity-wall-05","tpage_name":"lfacctyb-vis-tfrag"}],[222888019,{"idx":83,"name":"common-black","tpage_name":"lfacctyb-vis-tfrag"}],[172949570,{"idx":66,"name":"jakc-waistband2","tpage_name":"precurd-vis-pris"}],[190382090,{"idx":10,"name":"vehicle-snake-chassis-01","tpage_name":"raila-shrub"}],[222888020,{"idx":84,"name":"city-lowres-mhcity-wall-03","tpage_name":"lfacctyb-vis-tfrag"}],[171769893,{"idx":37,"name":"jakc-waistband2","tpage_name":"templea-vis-pris"}],[173015073,{"idx":33,"name":"precur-engine-frame-01","tpage_name":"precurc-vis-tfrag"}],[172949571,{"idx":67,"name":"jakc-wraps","tpage_name":"precurd-vis-pris"}],[190382091,{"idx":11,"name":"vehicle-exhaust-pipe-01","tpage_name":"raila-shrub"}],[222888021,{"idx":85,"name":"palcab-swingp-base-lores","tpage_name":"lfacctyb-vis-tfrag"}],[171769894,{"idx":38,"name":"jakc-wraps","tpage_name":"templea-vis-pris"}],[173015074,{"idx":34,"name":"precur-blue-light-02","tpage_name":"precurc-vis-tfrag"}],[172949572,{"idx":68,"name":"jakc-wristband-a2","tpage_name":"precurd-vis-pris"}],[194117632,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"deschase-water"}],[190382092,{"idx":12,"name":"vehicle-snake-tank-02","tpage_name":"raila-shrub"}],[222888022,{"idx":86,"name":"palcab-lorez-asphalt01","tpage_name":"lfacctyb-vis-tfrag"}],[171769895,{"idx":39,"name":"jakc-wristband-a2","tpage_name":"templea-vis-pris"}],[173015075,{"idx":35,"name":"precur-wall-blade-01","tpage_name":"precurc-vis-tfrag"}],[172949573,{"idx":69,"name":"jakchires-arm","tpage_name":"precurd-vis-pris"}],[190382093,{"idx":13,"name":"vehicle-pipe-01","tpage_name":"raila-shrub"}],[222888023,{"idx":87,"name":"palcab-lowres-background-trees-edge","tpage_name":"lfacctyb-vis-tfrag"}],[171769896,{"idx":40,"name":"jakchires-arm","tpage_name":"templea-vis-pris"}],[173015076,{"idx":36,"name":"precur-floor-plate-02","tpage_name":"precurc-vis-tfrag"}],[172949574,{"idx":70,"name":"jakchires-blackstrap","tpage_name":"precurd-vis-pris"}],[190382094,{"idx":14,"name":"vehicle-chrome-pipe-01","tpage_name":"raila-shrub"}],[222888024,{"idx":88,"name":"palcab-lowres-background-trees2","tpage_name":"lfacctyb-vis-tfrag"}],[171769897,{"idx":41,"name":"jakchires-blackstrap","tpage_name":"templea-vis-pris"}],[173015077,{"idx":37,"name":"precur-platform-plate","tpage_name":"precurc-vis-tfrag"}],[172949575,{"idx":71,"name":"jakchires-brownstrap","tpage_name":"precurd-vis-pris"}],[190382095,{"idx":15,"name":"vehicle-body-panel-01","tpage_name":"raila-shrub"}],[222888025,{"idx":89,"name":"palcab-lorez-metal02","tpage_name":"lfacctyb-vis-tfrag"}],[171769898,{"idx":42,"name":"jakchires-brownstrap","tpage_name":"templea-vis-pris"}],[173015078,{"idx":38,"name":"precur-floor-plate-01","tpage_name":"precurc-vis-tfrag"}],[222888026,{"idx":90,"name":"palcab-lorez-metal01-red","tpage_name":"lfacctyb-vis-tfrag"}],[171769899,{"idx":43,"name":"jakchires-brwnleather","tpage_name":"templea-vis-pris"}],[173015079,{"idx":39,"name":"precur-tubes-bundle-02","tpage_name":"precurc-vis-tfrag"}],[222888027,{"idx":91,"name":"palcab-lorez-metal01-red-stripe","tpage_name":"lfacctyb-vis-tfrag"}],[223019030,{"idx":22,"name":"rail-base-mid-01","tpage_name":"rublcst-vis-tfrag"}],[220528670,{"idx":30,"name":"assis-brownstrapas","tpage_name":"museum4-pris"}],[49020935,{"idx":7,"name":"sewer-pipe-rim-08","tpage_name":"sewe-vis-tfrag"}],[222888028,{"idx":92,"name":"palcab-lorez-plates01","tpage_name":"lfacctyb-vis-tfrag"}],[223019031,{"idx":23,"name":"rail-base-dark-01","tpage_name":"rublcst-vis-tfrag"}],[220528671,{"idx":31,"name":"assis-glove","tpage_name":"museum4-pris"}],[49020936,{"idx":8,"name":"sewer-plate-05-hitweak","tpage_name":"sewe-vis-tfrag"}],[222888029,{"idx":93,"name":"tcab-beam01","tpage_name":"lfacctyb-vis-tfrag"}],[195559488,{"idx":64,"name":"torn-ear","tpage_name":"towercst-pris2"}],[215482368,{"idx":0,"name":"facb-bridgelights-01","tpage_name":"lfacout-vis-alpha"}],[126877743,{"idx":47,"name":"lfacrm-arches-01","tpage_name":"lfacrm1-tfrag"}],[223019032,{"idx":24,"name":"rail-gray-metal-01","tpage_name":"rublcst-vis-tfrag"}],[220528672,{"idx":32,"name":"assis-lens","tpage_name":"museum4-pris"}],[49020937,{"idx":9,"name":"sewer-block-01","tpage_name":"sewe-vis-tfrag"}],[222888030,{"idx":94,"name":"palcab-wall-lores","tpage_name":"lfacctyb-vis-tfrag"}],[222888033,{"idx":97,"name":"t-palshaft-panl-01","tpage_name":"lfacctyb-vis-tfrag"}],[223019036,{"idx":28,"name":"rub-precursor-a","tpage_name":"rublcst-vis-tfrag"}],[220528676,{"idx":36,"name":"billy-hair","tpage_name":"museum4-pris"}],[135725061,{"idx":5,"name":"seem-bootlower","tpage_name":"lseemwca-pris2"}],[49020941,{"idx":13,"name":"sewer-brick-block-01","tpage_name":"sewe-vis-tfrag"}],[216989794,{"idx":98,"name":"prec-tess-scarf","tpage_name":"museum2-pris"}],[146341911,{"idx":23,"name":"facc-pipe-02","tpage_name":"factoryc-vis-tfrag"}],[152567811,{"idx":3,"name":"wstd-torchbowl-coal-01","tpage_name":"templex-vis-shrub"}],[223150151,{"idx":71,"name":"kid-eye","tpage_name":"rublcst-vis-pris"}],[195493954,{"idx":66,"name":"kg-pickup-bed","tpage_name":"towercst-pris"}],[215416834,{"idx":2,"name":"facb_redmetal-02","tpage_name":"lfacout-vis-tfrag"}],[223805570,{"idx":130,"name":"krew-eyelid","tpage_name":"museum3b-pris"}],[216072253,{"idx":61,"name":"tess-belt2","tpage_name":"museum-pris2"}],[198443024,{"idx":16,"name":"des-wasmetal01","tpage_name":"hangb-vis-tfrag"}],[181010504,{"idx":72,"name":"errolcyber-greymetal","tpage_name":"desbcst-pris"}],[222888034,{"idx":98,"name":"citywide-consite-steel","tpage_name":"lfacctyb-vis-tfrag"}],[223019037,{"idx":29,"name":"rub-precursor-c","tpage_name":"rublcst-vis-tfrag"}],[220528677,{"idx":37,"name":"billy-hat","tpage_name":"museum4-pris"}],[135725062,{"idx":6,"name":"seem-bootmet","tpage_name":"lseemwca-pris2"}],[49020942,{"idx":14,"name":"sewer-brick-block-04","tpage_name":"sewe-vis-tfrag"}],[216989795,{"idx":99,"name":"prec-tess-shirt","tpage_name":"museum2-pris"}],[223150152,{"idx":72,"name":"kid-eyelid","tpage_name":"rublcst-vis-pris"}],[195493955,{"idx":67,"name":"kg-pickup-body","tpage_name":"towercst-pris"}],[215416835,{"idx":3,"name":"fac-tower-base-03","tpage_name":"lfacout-vis-tfrag"}],[223805571,{"idx":131,"name":"krew-lfteye","tpage_name":"museum3b-pris"}],[222888035,{"idx":99,"name":"palcab-lowres-stadium-grass","tpage_name":"lfacctyb-vis-tfrag"}],[223019038,{"idx":30,"name":"comb-ring","tpage_name":"rublcst-vis-tfrag"}],[220528678,{"idx":38,"name":"billy-jug","tpage_name":"museum4-pris"}],[135725063,{"idx":7,"name":"seem-boottoe","tpage_name":"lseemwca-pris2"}],[49020943,{"idx":15,"name":"sewer-block-02","tpage_name":"sewe-vis-tfrag"}],[216989796,{"idx":100,"name":"prec-tess-shirtstraps","tpage_name":"museum2-pris"}],[223150153,{"idx":73,"name":"kid-face","tpage_name":"rublcst-vis-pris"}],[223805572,{"idx":132,"name":"krew-rteye","tpage_name":"museum3b-pris"}],[222888036,{"idx":100,"name":"ctyp-metal-01","tpage_name":"lfacctyb-vis-tfrag"}],[223019039,{"idx":31,"name":"rail-detail-01","tpage_name":"rublcst-vis-tfrag"}],[220528679,{"idx":39,"name":"billy-jugrope","tpage_name":"museum4-pris"}],[135725064,{"idx":8,"name":"seem-ear","tpage_name":"lseemwca-pris2"}],[49020944,{"idx":16,"name":"sewer-concrete-block-02","tpage_name":"sewe-vis-tfrag"}],[172949566,{"idx":62,"name":"jakc-lens","tpage_name":"precurd-vis-pris"}],[190382086,{"idx":6,"name":"rail-car-vent-01","tpage_name":"raila-shrub"}],[222888016,{"idx":80,"name":"city-lowres-mhcity-detower-02","tpage_name":"lfacctyb-vis-tfrag"}],[172949567,{"idx":63,"name":"jakc-scarf","tpage_name":"precurd-vis-pris"}],[190382087,{"idx":7,"name":"rail-chair-01","tpage_name":"raila-shrub"}],[222888017,{"idx":81,"name":"city-lowres-mhcity-wall-06","tpage_name":"lfacctyb-vis-tfrag"}],[220529003,{"idx":363,"name":"ogre-pipeholders","tpage_name":"museum4-pris"}],[134348806,{"idx":6,"name":"forest-leaf","tpage_name":"volcanoa-sprite"}],[220529004,{"idx":364,"name":"ogre-skinbone","tpage_name":"museum4-pris"}],[126877727,{"idx":31,"name":"cityslumc-pipe","tpage_name":"lfacrm1-tfrag"}],[134348807,{"idx":7,"name":"forest-leaf2","tpage_name":"volcanoa-sprite"}],[222888037,{"idx":101,"name":"palcab-lowres-background-strip","tpage_name":"lfacctyb-vis-tfrag"}],[135725065,{"idx":9,"name":"seem-eye","tpage_name":"lseemwca-pris2"}],[49020945,{"idx":17,"name":"sewer-mantel-01","tpage_name":"sewe-vis-tfrag"}],[217055303,{"idx":71,"name":"prec-veger-handback","tpage_name":"museum2-pris2"}],[205717515,{"idx":11,"name":"kg-target-gun-02","tpage_name":"lgunnorm-pris"}],[206962695,{"idx":7,"name":"citywide-wall-mainmetal","tpage_name":"lfreeout-tfrag"}],[120258575,{"idx":15,"name":"kg-pickup-bed","tpage_name":"lctyhijk-pris"}],[223805569,{"idx":129,"name":"vin-waistband","tpage_name":"museum3b-pris"}],[216072252,{"idx":60,"name":"tess-belt","tpage_name":"museum-pris2"}],[181010503,{"idx":71,"name":"errolcyber-greyknobs","tpage_name":"desbcst-pris"}],[216989793,{"idx":97,"name":"prec-tess-pantsfront","tpage_name":"museum2-pris"}],[146341910,{"idx":22,"name":"facc-panel-03","tpage_name":"factoryc-vis-tfrag"}],[152567810,{"idx":2,"name":"for-shrub-grass","tpage_name":"templex-vis-shrub"}],[223150150,{"idx":70,"name":"kid-clips","tpage_name":"rublcst-vis-pris"}],[195493953,{"idx":65,"name":"kcfrontend01","tpage_name":"towercst-pris"}],[215416833,{"idx":1,"name":"facb_redmetal-01","tpage_name":"lfacout-vis-tfrag"}],[220529005,{"idx":365,"name":"ogre-tanleather","tpage_name":"museum4-pris"}],[126877728,{"idx":32,"name":"ctyslumc-window-panes2","tpage_name":"lfacrm1-tfrag"}],[134348808,{"idx":8,"name":"forest-leaf3","tpage_name":"volcanoa-sprite"}],[222888038,{"idx":102,"name":"t-palshaft-pil-01","tpage_name":"lfacctyb-vis-tfrag"}],[135725066,{"idx":10,"name":"seem-eyelid","tpage_name":"lseemwca-pris2"}],[49020946,{"idx":18,"name":"sewer-mantel-02","tpage_name":"sewe-vis-tfrag"}],[217055304,{"idx":72,"name":"prec-veger-handpalm","tpage_name":"museum2-pris2"}],[205717516,{"idx":12,"name":"kg-target-gun-04","tpage_name":"lgunnorm-pris"}],[206962696,{"idx":8,"name":"citywide-wall-frame","tpage_name":"lfreeout-tfrag"}],[120258576,{"idx":16,"name":"kg-pickup-body","tpage_name":"lctyhijk-pris"}],[223805566,{"idx":126,"name":"vin-shoe-02","tpage_name":"museum3b-pris"}],[216989790,{"idx":94,"name":"prec-tess-necktrans","tpage_name":"museum2-pris"}],[220529002,{"idx":362,"name":"ogre-pipeends","tpage_name":"museum4-pris"}],[126877725,{"idx":29,"name":"common-gray","tpage_name":"lfacrm1-tfrag"}],[134348805,{"idx":5,"name":"lava-bubble","tpage_name":"volcanoa-sprite"}],[220528963,{"idx":323,"name":"geo-pants","tpage_name":"museum4-pris"}],[172818457,{"idx":25,"name":"precur-wall-blade-01","tpage_name":"precurd-vis-tfrag"}],[223805458,{"idx":18,"name":"errol-gunbarrel-02","tpage_name":"museum3b-pris"}],[223150133,{"idx":53,"name":"jakchires-facert-norm","tpage_name":"rublcst-vis-pris"}],[221904953,{"idx":57,"name":"jak-orig-lens","tpage_name":"museum4-pris2"}],[153681960,{"idx":40,"name":"mhcity-basebone","tpage_name":"mhcityb-vis-tfrag"}],[217055333,{"idx":101,"name":"sig-horn","tpage_name":"museum2-pris2"}],[195559493,{"idx":69,"name":"torn-finger","tpage_name":"towercst-pris2"}],[216989788,{"idx":92,"name":"prec-tess-hair","tpage_name":"museum2-pris"}],[181272582,{"idx":6,"name":"hud-wasdoors-ring","tpage_name":"desjump-minimap"}],[220528961,{"idx":321,"name":"geo-liner","tpage_name":"museum4-pris"}],[216989791,{"idx":95,"name":"prec-tess-pantsback","tpage_name":"museum2-pris"}],[146341908,{"idx":20,"name":"facc-wall-rnd-light-01","tpage_name":"factoryc-vis-tfrag"}],[152567808,{"idx":0,"name":"temple_leaf02","tpage_name":"templex-vis-shrub"}],[223805567,{"idx":127,"name":"vin-suspendercenter","tpage_name":"museum3b-pris"}],[222888031,{"idx":95,"name":"tcab-plat-edg-01-lores","tpage_name":"lfacctyb-vis-tfrag"}],[223019034,{"idx":26,"name":"comb-temp-glass","tpage_name":"rublcst-vis-tfrag"}],[220528674,{"idx":34,"name":"bam-iris-16x16","tpage_name":"museum4-pris"}],[49020939,{"idx":11,"name":"sewer-brick-block-03","tpage_name":"sewe-vis-tfrag"}],[223019020,{"idx":12,"name":"rub-wall-gen-04","tpage_name":"rublcst-vis-tfrag"}],[170459165,{"idx":29,"name":"jakc-scarfhanging","tpage_name":"ljkdxvin-pris"}],[171704345,{"idx":25,"name":"temple_sandstone_pill03","tpage_name":"templec-vis-tfrag"}],[172949525,{"idx":21,"name":"dm-ship-hull-02","tpage_name":"precurd-vis-pris"}],[175439885,{"idx":13,"name":"king-greenmetalplain","tpage_name":"rubblea-vis-pris2"}],[174194705,{"idx":17,"name":"jakchires-brownstrap","tpage_name":"ljkfeet-pris"}],[162725906,{"idx":18,"name":"rail-light-blue-small","tpage_name":"railf-tfrag"}],[135331946,{"idx":106,"name":"rub-pal-metal-trim","tpage_name":"rubblea-vis-tfrag"}],[223805440,{"idx":0,"name":"bam-eyelight","tpage_name":"museum3b-pris"}],[223019024,{"idx":16,"name":"rub-copper-metal-02","tpage_name":"rublcst-vis-tfrag"}],[170459169,{"idx":33,"name":"jakc-wristband-a2","tpage_name":"ljkdxvin-pris"}],[171704349,{"idx":29,"name":"rail-env-wall-01","tpage_name":"templec-vis-tfrag"}],[175439889,{"idx":17,"name":"king-iris","tpage_name":"rubblea-vis-pris2"}],[172949529,{"idx":25,"name":"environment-darkprec","tpage_name":"precurd-vis-pris"}],[174194709,{"idx":21,"name":"jakchires-eye","tpage_name":"ljkfeet-pris"}],[194052128,{"idx":32,"name":"vehicle-brace-pipe-01","tpage_name":"deschase-pris"}],[202768388,{"idx":4,"name":"hud-vehicle-health-bar-01","tpage_name":"lblowcst-minimap"}],[60948497,{"idx":17,"name":"minc-blue-paint-rust04","tpage_name":"minec-vis-tfrag"}],[223805444,{"idx":4,"name":"errol-boottoe","tpage_name":"museum3b-pris"}],[223150119,{"idx":39,"name":"jakchires-eye","tpage_name":"rublcst-vis-pris"}],[221904939,{"idx":43,"name":"jak-orig-armor","tpage_name":"museum4-pris2"}],[153681946,{"idx":26,"name":"mhcity-de-tower-under","tpage_name":"mhcityb-vis-tfrag"}],[170459153,{"idx":17,"name":"daxterteeth","tpage_name":"ljkdxvin-pris"}],[171704333,{"idx":13,"name":"temple_sandstone_ground02","tpage_name":"templec-vis-tfrag"}],[175439873,{"idx":1,"name":"environment-oldmetal","tpage_name":"rubblea-vis-pris2"}],[174194693,{"idx":5,"name":"jakb-prison-handwraps","tpage_name":"ljkfeet-pris"}],[172949513,{"idx":9,"name":"daxterfinger","tpage_name":"precurd-vis-pris"}],[194510855,{"idx":7,"name":"jinx-boottop","tpage_name":"gridcst-pris2"}],[189530135,{"idx":23,"name":"wstlander-01-eye","tpage_name":"desrally-pris"}],[49283139,{"idx":67,"name":"sew-wallswitch-metal-03","tpage_name":"sewd-vis-pris"}],[16121895,{"idx":39,"name":"farm-grass-ground-01","tpage_name":"ctyfarma-vis-tfrag"}],[223936514,{"idx":2,"name":"bab-eye","tpage_name":"museum4b-pris"}],[223936520,{"idx":8,"name":"bab-pendant","tpage_name":"museum4b-pris"}],[170328089,{"idx":25,"name":"rail-gray-metal-01","tpage_name":"combe-tfrag"}],[172818449,{"idx":17,"name":"precur-nail-01","tpage_name":"precurd-vis-tfrag"}],[223805450,{"idx":10,"name":"errol-earcup","tpage_name":"museum3b-pris"}],[223150125,{"idx":45,"name":"jakchires-eyelid","tpage_name":"rublcst-vis-pris"}],[221904945,{"idx":49,"name":"jak-orig-eyelid","tpage_name":"museum4-pris2"}],[223805565,{"idx":125,"name":"vin-shoe-01","tpage_name":"museum3b-pris"}],[216989789,{"idx":93,"name":"prec-tess-headband","tpage_name":"museum2-pris"}],[220528962,{"idx":322,"name":"geo-lips","tpage_name":"museum4-pris"}],[170328096,{"idx":32,"name":"rail-light-red","tpage_name":"combe-tfrag"}],[172818456,{"idx":24,"name":"precur-plate-end-01","tpage_name":"precurd-vis-tfrag"}],[223805457,{"idx":17,"name":"errol-gunbarrel-01","tpage_name":"museum3b-pris"}],[223150132,{"idx":52,"name":"jakchires-facert-dark","tpage_name":"rublcst-vis-pris"}],[221904952,{"idx":56,"name":"jak-orig-leatherpouch","tpage_name":"museum4-pris2"}],[153681959,{"idx":39,"name":"mhcity-grind-strand-01","tpage_name":"mhcityb-vis-tfrag"}],[118620210,{"idx":50,"name":"klever-fingertop","tpage_name":"ljkcdmkl-pris"}],[217055332,{"idx":100,"name":"sig-headgear","tpage_name":"museum2-pris2"}],[198443051,{"idx":43,"name":"des-low-pinetree-leaf-01","tpage_name":"hangb-vis-tfrag"}],[181010531,{"idx":99,"name":"dm-urchin-plate-01","tpage_name":"desbcst-pris"}],[216072280,{"idx":88,"name":"samos-eye","tpage_name":"museum-pris2"}],[223150104,{"idx":24,"name":"jakc-lens","tpage_name":"rublcst-vis-pris"}],[221904924,{"idx":28,"name":"charHOLD","tpage_name":"museum4-pris2"}],[153681931,{"idx":11,"name":"mhcity-grunt-egg-gem-01","tpage_name":"mhcityb-vis-tfrag"}],[172949591,{"idx":87,"name":"jakchires-precarmor-01","tpage_name":"precurd-vis-pris"}],[213843984,{"idx":16,"name":"dp-bipedal-skin-bulge-01","tpage_name":"lpattack-vis-pris"}],[216989792,{"idx":96,"name":"prec-tess-pantscuff","tpage_name":"museum2-pris"}],[146341909,{"idx":21,"name":"facc-panel-02","tpage_name":"factoryc-vis-tfrag"}],[152567809,{"idx":1,"name":"temple_leaf01","tpage_name":"templex-vis-shrub"}],[223150149,{"idx":69,"name":"kid-brownstrap","tpage_name":"rublcst-vis-pris"}],[195493952,{"idx":64,"name":"jets01","tpage_name":"towercst-pris"}],[215416832,{"idx":0,"name":"facb_redmetal-d-03","tpage_name":"lfacout-vis-tfrag"}],[223805568,{"idx":128,"name":"vin-teeth-01","tpage_name":"museum3b-pris"}],[222888032,{"idx":96,"name":"palace-break-brokenwall","tpage_name":"lfacctyb-vis-tfrag"}],[223019035,{"idx":27,"name":"rail-light-yellow-small","tpage_name":"rublcst-vis-tfrag"}],[220528675,{"idx":35,"name":"billy-flesh","tpage_name":"museum4-pris"}],[135725060,{"idx":4,"name":"seem-bootleg","tpage_name":"lseemwca-pris2"}],[49020940,{"idx":12,"name":"sewer-stone-arch-01","tpage_name":"sewe-vis-tfrag"}],[223019021,{"idx":13,"name":"rub-wall-gen-02","tpage_name":"rublcst-vis-tfrag"}],[170459166,{"idx":30,"name":"jakc-skirt","tpage_name":"ljkdxvin-pris"}],[171704346,{"idx":26,"name":"temple_pre-02","tpage_name":"templec-vis-tfrag"}],[175439886,{"idx":14,"name":"king-hair","tpage_name":"rubblea-vis-pris2"}],[172949526,{"idx":22,"name":"dm-ship-nose-01","tpage_name":"precurd-vis-pris"}],[174194706,{"idx":18,"name":"jakchires-brwnleather","tpage_name":"ljkfeet-pris"}],[162725907,{"idx":19,"name":"rail-pipe-02","tpage_name":"railf-tfrag"}],[135331947,{"idx":107,"name":"rub-pal-pillar","tpage_name":"rubblea-vis-tfrag"}],[194052125,{"idx":29,"name":"intcept-teeth01","tpage_name":"deschase-pris"}],[202768385,{"idx":1,"name":"hud-target-reticle","tpage_name":"lblowcst-minimap"}],[223805441,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum3b-pris"}],[220528964,{"idx":324,"name":"geo-rope","tpage_name":"museum4-pris"}],[172818458,{"idx":26,"name":"precur-tubes-bundle-02","tpage_name":"precurd-vis-tfrag"}],[223805459,{"idx":19,"name":"errol-gunbarrel-03","tpage_name":"museum3b-pris"}],[223150134,{"idx":54,"name":"jakchires-glovetop","tpage_name":"rublcst-vis-pris"}],[221904954,{"idx":58,"name":"jak-orig-lenscover","tpage_name":"museum4-pris2"}],[217055334,{"idx":102,"name":"sig-lens","tpage_name":"museum2-pris2"}],[198574097,{"idx":17,"name":"des-ruins-top-01","tpage_name":"hanga-vis-tfrag"}],[195559494,{"idx":70,"name":"torn-footleather","tpage_name":"towercst-pris2"}],[223019025,{"idx":17,"name":"rub-palace-tower-side","tpage_name":"rublcst-vis-tfrag"}],[170459170,{"idx":34,"name":"jakchires-arm","tpage_name":"ljkdxvin-pris"}],[175439890,{"idx":18,"name":"king-leg","tpage_name":"rubblea-vis-pris2"}],[172949530,{"idx":26,"name":"environment-oldmetal","tpage_name":"precurd-vis-pris"}],[174194710,{"idx":22,"name":"jakchires-eyebrow","tpage_name":"ljkfeet-pris"}],[194052129,{"idx":33,"name":"vehicle-cap-pin-01","tpage_name":"deschase-pris"}],[202768389,{"idx":5,"name":"hud-target-reticle-fancy-01","tpage_name":"lblowcst-minimap"}],[60948498,{"idx":18,"name":"minc-yel-safe-paint-rust01","tpage_name":"minec-vis-tfrag"}],[223805445,{"idx":5,"name":"errol-brownpipe","tpage_name":"museum3b-pris"}],[223150120,{"idx":40,"name":"jakchires-eye-dark","tpage_name":"rublcst-vis-pris"}],[221904940,{"idx":44,"name":"jak-orig-belt","tpage_name":"museum4-pris2"}],[171704323,{"idx":3,"name":"temple-floor-01","tpage_name":"templec-vis-tfrag"}],[170459143,{"idx":7,"name":"daxterbolt","tpage_name":"ljkdxvin-pris"}],[221446144,{"idx":0,"name":"des-bush-timer-chase-trail","tpage_name":"lbbtcha2-water"}],[170197055,{"idx":63,"name":"seem-eyelid","tpage_name":"outrocst-pris2"}],[181403675,{"idx":27,"name":"catapult-panel-face","tpage_name":"desjump-pris"}],[171442235,{"idx":59,"name":"temple_metal04","tpage_name":"templea-vis-tfrag"}],[186384395,{"idx":11,"name":"des-wasmetal07","tpage_name":"desertf-vis-pris"}],[176422913,{"idx":1,"name":"token-purple","tpage_name":"templec-sprite"}],[170197013,{"idx":21,"name":"ashelin-pantstop","tpage_name":"outrocst-pris2"}],[173932553,{"idx":9,"name":"sig-gem-01","tpage_name":"ltowerb-vis-pris2"}],[170459154,{"idx":18,"name":"daxtertuft","tpage_name":"ljkdxvin-pris"}],[171704334,{"idx":14,"name":"temple_sandstone_steptop01","tpage_name":"templec-vis-tfrag"}],[175439874,{"idx":2,"name":"king-arm","tpage_name":"rubblea-vis-pris2"}],[174194694,{"idx":6,"name":"jakb-prison-wraps","tpage_name":"ljkfeet-pris"}],[172949514,{"idx":10,"name":"daxterfoot","tpage_name":"precurd-vis-pris"}],[194510856,{"idx":8,"name":"jinx-brownstrap","tpage_name":"gridcst-pris2"}],[189530136,{"idx":24,"name":"wstlander-01-gunmetal-01","tpage_name":"desrally-pris"}],[16121896,{"idx":40,"name":"citywide-wall-greybolts","tpage_name":"ctyfarma-vis-tfrag"}],[223936515,{"idx":3,"name":"bab-fur","tpage_name":"museum4b-pris"}],[220528956,{"idx":316,"name":"geo-hat-02","tpage_name":"museum4-pris"}],[194510862,{"idx":14,"name":"jinx-face","tpage_name":"gridcst-pris2"}],[189530142,{"idx":30,"name":"wstlander-01-mustache","tpage_name":"desrally-pris"}],[223936521,{"idx":9,"name":"bab-shoulderstrap","tpage_name":"museum4b-pris"}],[153813023,{"idx":31,"name":"mhcity-bubble","tpage_name":"mhcityb-vis-pris"}],[220201201,{"idx":241,"name":"cguardred-chestplate","tpage_name":"museum3-pris"}],[171769929,{"idx":73,"name":"temple_sandstone_scale_01","tpage_name":"templea-vis-pris"}],[189005943,{"idx":119,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"factoryd-vis-pris"}],[223870983,{"idx":7,"name":"baron-brownleatherstrap","tpage_name":"museum3b-pris2"}],[81723482,{"idx":90,"name":"jakchires-blackstrap","tpage_name":"ljndklev-pris"}],[220528824,{"idx":184,"name":"fman-toothstring","tpage_name":"museum4-pris"}],[211550222,{"idx":14,"name":"preship-metal-trim-01","tpage_name":"temp-shrub"}],[71303226,{"idx":58,"name":"king-vest","tpage_name":"ldamsig-pris2"}],[170328090,{"idx":26,"name":"rail-pipe-05","tpage_name":"combe-tfrag"}],[172818450,{"idx":18,"name":"precur-tubes-segment-01","tpage_name":"precurd-vis-tfrag"}],[223805451,{"idx":11,"name":"errol-eye","tpage_name":"museum3b-pris"}],[223150126,{"idx":46,"name":"jakchires-eyelid-dark","tpage_name":"rublcst-vis-pris"}],[221904946,{"idx":50,"name":"jak-orig-face","tpage_name":"museum4-pris2"}],[223805559,{"idx":119,"name":"vin-lens","tpage_name":"museum3b-pris"}],[175767625,{"idx":73,"name":"prec-leader-wrap","tpage_name":"loutro-pris"}],[165806185,{"idx":105,"name":"palcab-lorez-plates-red-stripe01","tpage_name":"ltowcity-tfrag"}],[194445325,{"idx":13,"name":"jakchires-arm","tpage_name":"gridcst-pris"}],[221773825,{"idx":1,"name":"cactus-bit1","tpage_name":"desertd-sprite"}],[216072310,{"idx":118,"name":"seem-finger","tpage_name":"museum-pris2"}],[223215683,{"idx":67,"name":"veger-walkingstick-01","tpage_name":"rublcst-vis-pris2"}],[216989783,{"idx":87,"name":"prec-tess-emblem","tpage_name":"museum2-pris"}],[220528960,{"idx":320,"name":"geo-lense","tpage_name":"museum4-pris"}],[220201205,{"idx":245,"name":"cguardred-greyheadshield","tpage_name":"museum3-pris"}],[170328094,{"idx":30,"name":"rail-env-wall-01","tpage_name":"combe-tfrag"}],[172818454,{"idx":22,"name":"precur-small-plate-02","tpage_name":"precurd-vis-tfrag"}],[223805455,{"idx":15,"name":"errol-faceemblem","tpage_name":"museum3b-pris"}],[223150130,{"idx":50,"name":"jakchires-facelft-norm","tpage_name":"rublcst-vis-pris"}],[221904950,{"idx":54,"name":"jak-orig-handwraps","tpage_name":"museum4-pris2"}],[153681957,{"idx":37,"name":"mhcity-de-tower-puff-01","tpage_name":"mhcityb-vis-tfrag"}],[216989787,{"idx":91,"name":"prec-tess-glove","tpage_name":"museum2-pris"}],[194445349,{"idx":37,"name":"daxter-furhilite","tpage_name":"gridcst-pris"}],[223019028,{"idx":20,"name":"rail-light-blue","tpage_name":"rublcst-vis-tfrag"}],[140378114,{"idx":2,"name":"airlock-door-cog1","tpage_name":"minee-pris"}],[129171494,{"idx":38,"name":"sewer-scaffold-02","tpage_name":"sewn-vis-tfrag"}],[175439877,{"idx":5,"name":"king-bolt","tpage_name":"rubblea-vis-pris2"}],[174194697,{"idx":9,"name":"jakc-gogglemetal","tpage_name":"ljkfeet-pris"}],[172949517,{"idx":13,"name":"daxterheadwidenew","tpage_name":"precurd-vis-pris"}],[223936518,{"idx":6,"name":"bab-longfur","tpage_name":"museum4b-pris"}],[170328093,{"idx":29,"name":"rail-fit-01","tpage_name":"combe-tfrag"}],[172818453,{"idx":21,"name":"precur-small-plate-edge","tpage_name":"precurd-vis-tfrag"}],[223805454,{"idx":14,"name":"errol-face","tpage_name":"museum3b-pris"}],[223150129,{"idx":49,"name":"jakchires-facelft-dark","tpage_name":"rublcst-vis-pris"}],[221904949,{"idx":53,"name":"jak-orig-hair","tpage_name":"museum4-pris2"}],[118620207,{"idx":47,"name":"klever-face-01","tpage_name":"ljkcdmkl-pris"}],[223805562,{"idx":122,"name":"vin-pants","tpage_name":"museum3b-pris"}],[223215686,{"idx":70,"name":"veger-whitecloth","tpage_name":"rublcst-vis-pris2"}],[216989786,{"idx":90,"name":"prec-tess-face","tpage_name":"museum2-pris"}],[220528998,{"idx":358,"name":"ogre-lens","tpage_name":"museum4-pris"}],[129368081,{"idx":17,"name":"rub-coil-support","tpage_name":"stadiumb-vis-shrub"}],[126877721,{"idx":25,"name":"lfacrm-lens-01","tpage_name":"lfacrm1-tfrag"}],[134348801,{"idx":1,"name":"lava-drop-02","tpage_name":"volcanoa-sprite"}],[220201064,{"idx":104,"name":"daxterbodyshort-eix","tpage_name":"museum3-pris"}],[190447616,{"idx":0,"name":"racegate","tpage_name":"lbbring4-sprite"}],[171769916,{"idx":60,"name":"jakchires-shoemetal","tpage_name":"templea-vis-pris"}],[173015096,{"idx":56,"name":"precur-floor-base-01","tpage_name":"precurc-vis-tfrag"}],[217055310,{"idx":78,"name":"prec-veger-orange","tpage_name":"museum2-pris2"}],[194445354,{"idx":42,"name":"daxterear","tpage_name":"gridcst-pris"}],[174325765,{"idx":5,"name":"daxterarm","tpage_name":"ldesgcst-pris"}],[164364325,{"idx":37,"name":"rub-cement-a","tpage_name":"rubblea2-vis-tfrag"}],[159383605,{"idx":53,"name":"keira-bellylong","tpage_name":"slumbset-pris"}],[223019033,{"idx":25,"name":"rail-pipe-03","tpage_name":"rublcst-vis-tfrag"}],[162791452,{"idx":28,"name":"comb-ring","tpage_name":"railc-tfrag"}],[220528958,{"idx":318,"name":"geo-kneebuckle","tpage_name":"museum4-pris"}],[170328092,{"idx":28,"name":"rail-rock-01","tpage_name":"combe-tfrag"}],[172818452,{"idx":20,"name":"precur-small-plate-01","tpage_name":"precurd-vis-tfrag"}],[223805453,{"idx":13,"name":"errol-eyelid","tpage_name":"museum3b-pris"}],[223150128,{"idx":48,"name":"jakchires-facelft","tpage_name":"rublcst-vis-pris"}],[221904948,{"idx":52,"name":"jak-orig-goggles","tpage_name":"museum4-pris2"}],[153681955,{"idx":35,"name":"mhcity-tallhouse","tpage_name":"mhcityb-vis-tfrag"}],[223805561,{"idx":121,"name":"vin-metal","tpage_name":"museum3b-pris"}],[223215685,{"idx":69,"name":"veger-walkingstick-03","tpage_name":"rublcst-vis-pris2"}],[216989785,{"idx":89,"name":"prec-tess-eyelid","tpage_name":"museum2-pris"}],[220528997,{"idx":357,"name":"ogre-hair","tpage_name":"museum4-pris"}],[129368080,{"idx":16,"name":"rub-rubble-01","tpage_name":"stadiumb-vis-shrub"}],[126877720,{"idx":24,"name":"lfacrm-pbox-02","tpage_name":"lfacrm1-tfrag"}],[134348800,{"idx":0,"name":"lava-drop-01","tpage_name":"volcanoa-sprite"}],[181272578,{"idx":2,"name":"hud-wasdoors","tpage_name":"desjump-minimap"}],[162791451,{"idx":27,"name":"rail-pipe-02","tpage_name":"railc-tfrag"}],[220528957,{"idx":317,"name":"geo-headstrap","tpage_name":"museum4-pris"}],[194510863,{"idx":15,"name":"jinx-finger","tpage_name":"gridcst-pris2"}],[189530143,{"idx":31,"name":"wstlander-01-pants","tpage_name":"desrally-pris"}],[223936522,{"idx":10,"name":"bab-skin","tpage_name":"museum4b-pris"}],[170328091,{"idx":27,"name":"rail-pipe-02","tpage_name":"combe-tfrag"}],[172818451,{"idx":19,"name":"precur-floor-plate-02","tpage_name":"precurd-vis-tfrag"}],[223805452,{"idx":12,"name":"errol-eyebrow","tpage_name":"museum3b-pris"}],[223150127,{"idx":47,"name":"jakchires-eyelid-norm","tpage_name":"rublcst-vis-pris"}],[221904947,{"idx":51,"name":"jak-orig-finger","tpage_name":"museum4-pris2"}],[223805560,{"idx":120,"name":"vin-ltbrownstrap","tpage_name":"museum3b-pris"}],[175767626,{"idx":74,"name":"prec-orblarge","tpage_name":"loutro-pris"}],[165806186,{"idx":106,"name":"city-lowres-mhcity-tower-01","tpage_name":"ltowcity-tfrag"}],[194445326,{"idx":14,"name":"jakchires-blackstrap","tpage_name":"gridcst-pris"}],[223215684,{"idx":68,"name":"veger-walkingstick-02","tpage_name":"rublcst-vis-pris2"}],[216989784,{"idx":88,"name":"prec-tess-eye","tpage_name":"museum2-pris"}],[220528996,{"idx":356,"name":"ogre-greymetalbolt","tpage_name":"museum4-pris"}],[223019023,{"idx":15,"name":"rub-floor-c","tpage_name":"rublcst-vis-tfrag"}],[170459168,{"idx":32,"name":"jakc-wraps","tpage_name":"ljkdxvin-pris"}],[171704348,{"idx":28,"name":"temple_sandstone_pill02","tpage_name":"templec-vis-tfrag"}],[175439888,{"idx":16,"name":"king-horn","tpage_name":"rubblea-vis-pris2"}],[172949528,{"idx":24,"name":"dm-ship-plate-01","tpage_name":"precurd-vis-pris"}],[174194708,{"idx":20,"name":"jakchires-clips","tpage_name":"ljkfeet-pris"}],[162725909,{"idx":21,"name":"rail-light-red","tpage_name":"railf-tfrag"}],[135331949,{"idx":109,"name":"rub-stad-brick","tpage_name":"rubblea-vis-tfrag"}],[194052127,{"idx":31,"name":"vehicle-body-panel-01","tpage_name":"deschase-pris"}],[202768387,{"idx":3,"name":"hud-target-box-01","tpage_name":"lblowcst-minimap"}],[223805443,{"idx":3,"name":"errol-blackpipe","tpage_name":"museum3b-pris"}],[223150118,{"idx":38,"name":"jakchires-clips","tpage_name":"rublcst-vis-pris"}],[221904938,{"idx":42,"name":"jak-orig-arm","tpage_name":"museum4-pris2"}],[153681945,{"idx":25,"name":"mhcity-mektunnel","tpage_name":"mhcityb-vis-tfrag"}],[170459152,{"idx":16,"name":"daxternose","tpage_name":"ljkdxvin-pris"}],[171704332,{"idx":12,"name":"temple-box-brown","tpage_name":"templec-vis-tfrag"}],[175439872,{"idx":0,"name":"bam-eyelight","tpage_name":"rubblea-vis-pris2"}],[174194692,{"idx":4,"name":"jak-orig-finger-formorph","tpage_name":"ljkfeet-pris"}],[172949512,{"idx":8,"name":"daxterear","tpage_name":"precurd-vis-pris"}],[194510854,{"idx":6,"name":"jinx-boottoe","tpage_name":"gridcst-pris2"}],[189530134,{"idx":22,"name":"des-rope-01","tpage_name":"desrally-pris"}],[16121894,{"idx":38,"name":"city-farm-mark-roof-tiles","tpage_name":"ctyfarma-vis-tfrag"}],[223936513,{"idx":1,"name":"bab-diaper","tpage_name":"museum4b-pris"}],[153813015,{"idx":23,"name":"mh-spawner-metal-tooth","tpage_name":"mhcityb-vis-pris"}],[220201060,{"idx":100,"name":"daxter-eyelid","tpage_name":"museum3-pris"}],[222888040,{"idx":104,"name":"t-palshaft-r-strp-plate01","tpage_name":"lfacctyb-vis-tfrag"}],[223019043,{"idx":35,"name":"rail-pipe-01","tpage_name":"rublcst-vis-tfrag"}],[220528683,{"idx":43,"name":"billy-tail","tpage_name":"museum4-pris"}],[135725068,{"idx":12,"name":"seem-finger","tpage_name":"lseemwca-pris2"}],[184549376,{"idx":0,"name":"citywide-sail-01","tpage_name":"stadiuma-vis-pris"}],[201129998,{"idx":14,"name":"prec-tess-pantsback","tpage_name":"loutro2-pris"}],[217055306,{"idx":74,"name":"prec-veger-mouth","tpage_name":"museum2-pris2"}],[205717518,{"idx":14,"name":"kg-target-side-01","tpage_name":"lgunnorm-pris"}],[206962698,{"idx":10,"name":"citywide-wall-boltedmetal","tpage_name":"lfreeout-tfrag"}],[120258578,{"idx":18,"name":"kg-pickup-fender","tpage_name":"lctyhijk-pris"}],[194445350,{"idx":38,"name":"daxter-orange","tpage_name":"gridcst-pris"}],[223019029,{"idx":21,"name":"rail-edge-01","tpage_name":"rublcst-vis-tfrag"}],[170459174,{"idx":38,"name":"jakchires-chestplate","tpage_name":"ljkdxvin-pris"}],[171704354,{"idx":34,"name":"temple_bark01","tpage_name":"templec-vis-tfrag"}],[175439894,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"rubblea-vis-pris2"}],[172949534,{"idx":30,"name":"errolcyber-hair","tpage_name":"precurd-vis-pris"}],[174194714,{"idx":26,"name":"jakchires-glovetop","tpage_name":"ljkfeet-pris"}],[140378115,{"idx":3,"name":"airlock-door-main","tpage_name":"minee-pris"}],[129171495,{"idx":39,"name":"sewer-pipe-rim-10","tpage_name":"sewn-vis-tfrag"}],[171704338,{"idx":18,"name":"temple_sandstone_dtale02","tpage_name":"templec-vis-tfrag"}],[175439878,{"idx":6,"name":"king-chest","tpage_name":"rubblea-vis-pris2"}],[174194698,{"idx":10,"name":"jakc-lens","tpage_name":"ljkfeet-pris"}],[172949518,{"idx":14,"name":"daxterhelmetplain","tpage_name":"precurd-vis-pris"}],[223936519,{"idx":7,"name":"bab-nail-01","tpage_name":"museum4b-pris"}],[153813021,{"idx":29,"name":"mhcity-basebone","tpage_name":"mhcityb-vis-pris"}],[170328088,{"idx":24,"name":"rail-light-yellow","tpage_name":"combe-tfrag"}],[172818448,{"idx":16,"name":"precur-nail-02","tpage_name":"precurd-vis-tfrag"}],[223805449,{"idx":9,"name":"errol-ear","tpage_name":"museum3b-pris"}],[223019022,{"idx":14,"name":"rub-wall-trim","tpage_name":"rublcst-vis-tfrag"}],[170459167,{"idx":31,"name":"jakc-waistband2","tpage_name":"ljkdxvin-pris"}],[171704347,{"idx":27,"name":"temple_pre-01","tpage_name":"templec-vis-tfrag"}],[175439887,{"idx":15,"name":"king-hand","tpage_name":"rubblea-vis-pris2"}],[172949527,{"idx":23,"name":"dm-ship-nose-02","tpage_name":"precurd-vis-pris"}],[174194707,{"idx":19,"name":"jakchires-chestplate","tpage_name":"ljkfeet-pris"}],[162725908,{"idx":20,"name":"rail-rock-01","tpage_name":"railf-tfrag"}],[135331948,{"idx":108,"name":"rub-pal-glass","tpage_name":"rubblea-vis-tfrag"}],[194052126,{"idx":30,"name":"intcept-tread01","tpage_name":"deschase-pris"}],[202768386,{"idx":2,"name":"wascity-turret-hud-big-arrow-01","tpage_name":"lblowcst-minimap"}],[223805442,{"idx":2,"name":"environment-oldmetal","tpage_name":"museum3b-pris"}],[170459151,{"idx":15,"name":"daxterlense","tpage_name":"ljkdxvin-pris"}],[171704331,{"idx":11,"name":"temple_sandstone_star01","tpage_name":"templec-vis-tfrag"}],[174194691,{"idx":3,"name":"jak-orig-arm-formorph","tpage_name":"ljkfeet-pris"}],[172949511,{"idx":7,"name":"daxterbolt","tpage_name":"precurd-vis-pris"}],[194510853,{"idx":5,"name":"jinx-blademetal","tpage_name":"gridcst-pris2"}],[189530133,{"idx":21,"name":"des-pole-brace","tpage_name":"desrally-pris"}],[16121893,{"idx":37,"name":"city-farm-road-01","tpage_name":"ctyfarma-vis-tfrag"}],[223936512,{"idx":0,"name":"bab-allfur","tpage_name":"museum4b-pris"}],[146341934,{"idx":46,"name":"facc-beam-02","tpage_name":"factoryc-vis-tfrag"}],[153813014,{"idx":22,"name":"mh-spawner-metal-01","tpage_name":"mhcityb-vis-pris"}],[139722752,{"idx":0,"name":"keira-mask","tpage_name":"lkeira-water"}],[137232392,{"idx":8,"name":"daxterear","tpage_name":"citycast-pris"}],[171704336,{"idx":16,"name":"temple_sandstone_box01","tpage_name":"templec-vis-tfrag"}],[175439876,{"idx":4,"name":"king-bluemetal","tpage_name":"rubblea-vis-pris2"}],[174194696,{"idx":8,"name":"jakc-chestplate-straps","tpage_name":"ljkfeet-pris"}],[172949516,{"idx":12,"name":"daxtergoggles","tpage_name":"precurd-vis-pris"}],[223936517,{"idx":5,"name":"bab-furtrans","tpage_name":"museum4b-pris"}],[170459155,{"idx":19,"name":"environment-oldmetal","tpage_name":"ljkdxvin-pris"}],[171704335,{"idx":15,"name":"temple_sandstone_stepside01","tpage_name":"templec-vis-tfrag"}],[175439875,{"idx":3,"name":"king-blackskirt2","tpage_name":"rubblea-vis-pris2"}],[174194695,{"idx":7,"name":"jakc-armor","tpage_name":"ljkfeet-pris"}],[172949515,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"precurd-vis-pris"}],[194510857,{"idx":9,"name":"jinx-brownstrapbolts","tpage_name":"gridcst-pris2"}],[189530137,{"idx":25,"name":"wstlander-01-gunmetal-02","tpage_name":"desrally-pris"}],[49283141,{"idx":69,"name":"cguardgame-backplate","tpage_name":"sewd-vis-pris"}],[16121897,{"idx":41,"name":"citywide-wall-greydrain","tpage_name":"ctyfarma-vis-tfrag"}],[223936516,{"idx":4,"name":"bab-furskin-trans","tpage_name":"museum4b-pris"}],[172949560,{"idx":56,"name":"terraformer-organic-02","tpage_name":"precurd-vis-pris"}],[190382080,{"idx":0,"name":"rail-env-wall-01","tpage_name":"raila-shrub"}],[120258582,{"idx":22,"name":"kg-pickup-joint","tpage_name":"lctyhijk-pris"}],[222888010,{"idx":74,"name":"palace-break-girder01","tpage_name":"lfacctyb-vis-tfrag"}],[222167041,{"idx":1,"name":"flut-yellow2dkblue","tpage_name":"museum4-tfrag"}],[193527901,{"idx":93,"name":"errolcyber-spine","tpage_name":"desboss2-pris"}],[217055276,{"idx":44,"name":"king-greenmetal","tpage_name":"museum2-pris2"}],[223019018,{"idx":10,"name":"rub-city-wall-inside-damaged","tpage_name":"rublcst-vis-tfrag"}],[170459163,{"idx":27,"name":"jakc-lens","tpage_name":"ljkdxvin-pris"}],[171704343,{"idx":23,"name":"temple_sandstone_trim02","tpage_name":"templec-vis-tfrag"}],[172949523,{"idx":19,"name":"dm-ship-cockpit-01","tpage_name":"precurd-vis-pris"}],[175439883,{"idx":11,"name":"king-finger","tpage_name":"rubblea-vis-pris2"}],[174194703,{"idx":15,"name":"jakchires-arm","tpage_name":"ljkfeet-pris"}],[162725904,{"idx":16,"name":"comb-redmarker","tpage_name":"railf-tfrag"}],[135331944,{"idx":104,"name":"rub-citywall","tpage_name":"rubblea-vis-tfrag"}],[129171484,{"idx":28,"name":"sewer-metal-block-04","tpage_name":"sewn-vis-tfrag"}],[220528976,{"idx":336,"name":"minetall-hair","tpage_name":"museum4-pris"}],[217055336,{"idx":104,"name":"sig-metal-dirty","tpage_name":"museum2-pris2"}],[217972736,{"idx":0,"name":"time-bubble","tpage_name":"lbbtcha2-sprite"}],[195559496,{"idx":72,"name":"torn-gunbarrel-02","tpage_name":"towercst-pris2"}],[222888007,{"idx":71,"name":"palcab-lowres-farm-wall","tpage_name":"lfacctyb-vis-tfrag"}],[193527898,{"idx":90,"name":"errolcyber-roboeye","tpage_name":"desboss2-pris"}],[217055273,{"idx":41,"name":"king-earing","tpage_name":"museum2-pris2"}],[223019017,{"idx":9,"name":"rub-wall-side-beam-02","tpage_name":"rublcst-vis-tfrag"}],[170459162,{"idx":26,"name":"jakc-gogglemetal","tpage_name":"ljkdxvin-pris"}],[172949522,{"idx":18,"name":"daxtertuft","tpage_name":"precurd-vis-pris"}],[175439882,{"idx":10,"name":"king-face-01","tpage_name":"rubblea-vis-pris2"}],[171704342,{"idx":22,"name":"temple_sandstone_brick-01","tpage_name":"templec-vis-tfrag"}],[174194702,{"idx":14,"name":"jakc-wristband-a2","tpage_name":"ljkfeet-pris"}],[162725903,{"idx":15,"name":"comb-temp-dark","tpage_name":"railf-tfrag"}],[135331943,{"idx":103,"name":"rub-cement-a","tpage_name":"rubblea-vis-tfrag"}],[129171483,{"idx":27,"name":"sewer-stone-arch-01","tpage_name":"sewn-vis-tfrag"}],[220528975,{"idx":335,"name":"minetall-dynamite","tpage_name":"museum4-pris"}],[223805460,{"idx":20,"name":"errol-gunhandle","tpage_name":"museum3b-pris"}],[223150135,{"idx":55,"name":"jakchires-hair","tpage_name":"rublcst-vis-pris"}],[221904955,{"idx":59,"name":"jak-orig-pants","tpage_name":"museum4-pris2"}],[222888006,{"idx":70,"name":"t-citywide-wall-tile-01","tpage_name":"lfacctyb-vis-tfrag"}],[193527897,{"idx":89,"name":"errolcyber-redmetal-03","tpage_name":"desboss2-pris"}],[217055272,{"idx":40,"name":"king-ear","tpage_name":"museum2-pris2"}],[223019016,{"idx":8,"name":"rub-wall-gen-01","tpage_name":"rublcst-vis-tfrag"}],[170459161,{"idx":25,"name":"jakc-chestplate-straps","tpage_name":"ljkdxvin-pris"}],[175439881,{"idx":9,"name":"king-earing","tpage_name":"rubblea-vis-pris2"}],[172949521,{"idx":17,"name":"daxterteeth","tpage_name":"precurd-vis-pris"}],[174194701,{"idx":13,"name":"jakc-wraps","tpage_name":"ljkfeet-pris"}],[162725902,{"idx":14,"name":"rail-patch-01","tpage_name":"railf-tfrag"}],[135331942,{"idx":102,"name":"rub-roof-tile","tpage_name":"rubblea-vis-tfrag"}],[129171482,{"idx":26,"name":"sewer-stone-arch-02","tpage_name":"sewn-vis-tfrag"}],[220528974,{"idx":334,"name":"minetall-birdwings","tpage_name":"museum4-pris"}],[222888005,{"idx":69,"name":"city-lowres-damaged-01","tpage_name":"lfacctyb-vis-tfrag"}],[193527896,{"idx":88,"name":"errolcyber-redmetal-02","tpage_name":"desboss2-pris"}],[217055271,{"idx":39,"name":"king-clip-02","tpage_name":"museum2-pris2"}],[223019015,{"idx":7,"name":"rub-cement-broken-end","tpage_name":"rublcst-vis-tfrag"}],[170459160,{"idx":24,"name":"jakc-armor","tpage_name":"ljkdxvin-pris"}],[171704340,{"idx":20,"name":"temple_sandstone_out_01","tpage_name":"templec-vis-tfrag"}],[175439880,{"idx":8,"name":"king-ear","tpage_name":"rubblea-vis-pris2"}],[172949520,{"idx":16,"name":"daxternose","tpage_name":"precurd-vis-pris"}],[174194700,{"idx":12,"name":"jakc-waistband2","tpage_name":"ljkfeet-pris"}],[162725901,{"idx":13,"name":"comb-temp-glass","tpage_name":"railf-tfrag"}],[135331941,{"idx":101,"name":"rub-metal-pipeside-01","tpage_name":"rubblea-vis-tfrag"}],[129171481,{"idx":25,"name":"sewer-concrete-block-02","tpage_name":"sewn-vis-tfrag"}],[220528973,{"idx":333,"name":"minetall-birdtail","tpage_name":"museum4-pris"}],[222888004,{"idx":68,"name":"city-lowres-newslums-stripe-01","tpage_name":"lfacctyb-vis-tfrag"}],[193527895,{"idx":87,"name":"errolcyber-redmetal-01","tpage_name":"desboss2-pris"}],[217055270,{"idx":38,"name":"king-chest","tpage_name":"museum2-pris2"}],[153092129,{"idx":33,"name":"rail-step-06","tpage_name":"railx-tfrag"}],[175439879,{"idx":7,"name":"king-clip-02","tpage_name":"rubblea-vis-pris2"}],[172949519,{"idx":15,"name":"daxterlense","tpage_name":"precurd-vis-pris"}],[174194699,{"idx":11,"name":"jakc-scarf","tpage_name":"ljkfeet-pris"}],[162725900,{"idx":12,"name":"rail-pipe-05","tpage_name":"railf-tfrag"}],[135331940,{"idx":100,"name":"rub-palshaft-dirt-blue-01","tpage_name":"rubblea-vis-tfrag"}],[129171480,{"idx":24,"name":"sewer-brick-roof-01","tpage_name":"sewn-vis-tfrag"}],[220528939,{"idx":299,"name":"gambler-card","tpage_name":"museum4-pris"}],[222888003,{"idx":67,"name":"city-lowres-newslums-bigwindows-02","tpage_name":"lfacctyb-vis-tfrag"}],[222888002,{"idx":66,"name":"city-lowres-newslums-stripe-02","tpage_name":"lfacctyb-vis-tfrag"}],[222888001,{"idx":65,"name":"t-strip-lo-palsup-danger2","tpage_name":"lfacctyb-vis-tfrag"}],[222888000,{"idx":64,"name":"t-strip-lo-palsup-danger1","tpage_name":"lfacctyb-vis-tfrag"}],[223805535,{"idx":95,"name":"crocadog-footbottom","tpage_name":"museum3b-pris"}],[211025923,{"idx":3,"name":"wascity-metal-door-01","tpage_name":"desjump-tfrag"}],[159383552,{"idx":0,"name":"bam-eyelight","tpage_name":"slumbset-pris"}],[198705200,{"idx":48,"name":"torn-ear","tpage_name":"lblowcst-pris"}],[222887999,{"idx":63,"name":"t-strip-lo-palsup-panel-5","tpage_name":"lfacctyb-vis-tfrag"}],[222953475,{"idx":3,"name":"palcab-lowres-background-trees2","tpage_name":"lfacctyb-vis-alpha"}],[220529047,{"idx":407,"name":"gambler-eye-16x16","tpage_name":"museum4-pris"}],[220201175,{"idx":215,"name":"kor-finger","tpage_name":"museum3-pris"}],[105054307,{"idx":99,"name":"marauder-spike","tpage_name":"desoasis-pris"}],[112525387,{"idx":75,"name":"jakchires-shoemetal","tpage_name":"desrescc-pris"}],[223805534,{"idx":94,"name":"crocadog-faceyellow","tpage_name":"museum3b-pris"}],[211025922,{"idx":2,"name":"wascity-outerwall-metal-c","tpage_name":"desjump-tfrag"}],[198705199,{"idx":47,"name":"torn-belt2","tpage_name":"lblowcst-pris"}],[175505410,{"idx":2,"name":"hud-darkmaker-mech-shield-01","tpage_name":"precura-minimap"}],[171769870,{"idx":14,"name":"daxter-orange","tpage_name":"templea-vis-pris"}],[173015050,{"idx":10,"name":"precur-wall-tube-01","tpage_name":"precurc-vis-tfrag"}],[222887998,{"idx":62,"name":"t-strip-lo-palsup-panel-4","tpage_name":"lfacctyb-vis-tfrag"}],[222953474,{"idx":2,"name":"palcab-lowres-background-trees-edge","tpage_name":"lfacctyb-vis-alpha"}],[220201174,{"idx":214,"name":"kor-eyelid","tpage_name":"museum3-pris"}],[105054306,{"idx":98,"name":"marauder-skirt-02","tpage_name":"desoasis-pris"}],[112525386,{"idx":74,"name":"jakchires-shoebottom","tpage_name":"desrescc-pris"}],[223805533,{"idx":93,"name":"crocadog-facegreen","tpage_name":"museum3b-pris"}],[198574121,{"idx":41,"name":"des-cave-floor-01","tpage_name":"hanga-vis-tfrag"}],[211025921,{"idx":1,"name":"wascity-metal-dirty","tpage_name":"desjump-tfrag"}],[198705198,{"idx":46,"name":"torn-belt","tpage_name":"lblowcst-pris"}],[222887997,{"idx":61,"name":"t-strip-lo-palsup-panel-3","tpage_name":"lfacctyb-vis-tfrag"}],[193527888,{"idx":80,"name":"errolcyber-insidewires","tpage_name":"desboss2-pris"}],[197328898,{"idx":2,"name":"facc-beam-01","tpage_name":"factorya-shrub"}],[223805532,{"idx":92,"name":"crocadog-eyelid","tpage_name":"museum3b-pris"}],[211025920,{"idx":0,"name":"wascitya-airlock-metal-bits","tpage_name":"desjump-tfrag"}],[198705197,{"idx":45,"name":"torn-armor","tpage_name":"lblowcst-pris"}],[10616840,{"idx":8,"name":"sign-square-b","tpage_name":"ctyslumb-sprite"}],[8716335,{"idx":47,"name":"baron-neon-eye-c-on","tpage_name":"ctysluma-sprite"}],[171769868,{"idx":12,"name":"daxter-eyelid","tpage_name":"templea-vis-pris"}],[173015048,{"idx":8,"name":"precur-road-plate-01","tpage_name":"precurc-vis-tfrag"}],[222887996,{"idx":60,"name":"t-strip-lo-palsup-panel-2","tpage_name":"lfacctyb-vis-tfrag"}],[223805531,{"idx":91,"name":"crocadog-eye","tpage_name":"museum3b-pris"}],[179961912,{"idx":56,"name":"sig-undergarments","tpage_name":"loutro2-pris2"}],[193658892,{"idx":12,"name":"targetred","tpage_name":"lmech-pris"}],[142016521,{"idx":9,"name":"facc-panel-05","tpage_name":"lfacrm2-tfrag"}],[198705196,{"idx":44,"name":"torn-armlft","tpage_name":"lblowcst-pris"}],[10616839,{"idx":7,"name":"sign-square-a","tpage_name":"ctyslumb-sprite"}],[8716334,{"idx":46,"name":"baron-neon-eye-c","tpage_name":"ctysluma-sprite"}],[171769867,{"idx":11,"name":"bam-hairhilite","tpage_name":"templea-vis-pris"}],[173015047,{"idx":7,"name":"precur-tubes-segment-01","tpage_name":"precurc-vis-tfrag"}],[222887995,{"idx":59,"name":"t-strip-lo-palsup-panel-1","tpage_name":"lfacctyb-vis-tfrag"}],[222167044,{"idx":4,"name":"flut-creamfeathers","tpage_name":"museum4-tfrag"}],[223412224,{"idx":0,"name":"cactus-bit1","tpage_name":"desertg-sprite"}],[179961911,{"idx":55,"name":"sig-skirts-03","tpage_name":"loutro2-pris2"}],[193658891,{"idx":11,"name":"environment-darkprec","tpage_name":"lmech-pris"}],[198705195,{"idx":43,"name":"charHOLD","tpage_name":"lblowcst-pris"}],[10616838,{"idx":6,"name":"sign-hiphog","tpage_name":"ctyslumb-sprite"}],[8716333,{"idx":45,"name":"baron-neon-eye-border-on","tpage_name":"ctysluma-sprite"}],[171769866,{"idx":10,"name":"bam-eyelight","tpage_name":"templea-vis-pris"}],[173015046,{"idx":6,"name":"precur-nail-01","tpage_name":"precurc-vis-tfrag"}],[222887994,{"idx":58,"name":"rub-palace-tower-side","tpage_name":"lfacctyb-vis-tfrag"}],[193527885,{"idx":77,"name":"errolcyber-head-01","tpage_name":"desboss2-pris"}],[173015045,{"idx":5,"name":"precur-nail-02","tpage_name":"precurc-vis-tfrag"}],[222887993,{"idx":57,"name":"palcab-lowres-background-mount-build-03","tpage_name":"lfacctyb-vis-tfrag"}],[193527884,{"idx":76,"name":"errolcyber-hair","tpage_name":"desboss2-pris"}],[198705173,{"idx":21,"name":"sig2-flask","tpage_name":"lblowcst-pris"}],[179961909,{"idx":53,"name":"sig-skirts","tpage_name":"loutro2-pris2"}],[193658889,{"idx":9,"name":"dm-mech-tubes-01","tpage_name":"lmech-pris"}],[55312398,{"idx":14,"name":"gekko-eye-01","tpage_name":"wascityb-vis-pris"}],[198705193,{"idx":41,"name":"sig2-undergarments","tpage_name":"lblowcst-pris"}],[8716331,{"idx":43,"name":"baron-neon-eye-b-on","tpage_name":"ctysluma-sprite"}],[171769864,{"idx":8,"name":"dk-maker-idol-tubes-01","tpage_name":"templea-vis-pris"}],[173015044,{"idx":4,"name":"precur-light-green-01","tpage_name":"precurc-vis-tfrag"}],[222887992,{"idx":56,"name":"palcab-lowres-background-mount-build-02","tpage_name":"lfacctyb-vis-tfrag"}],[198705172,{"idx":20,"name":"sig2-facert","tpage_name":"lblowcst-pris"}],[179961908,{"idx":52,"name":"sig-shoulderarmor","tpage_name":"loutro2-pris2"}],[193658888,{"idx":8,"name":"dm-mech-plate-shoulder","tpage_name":"lmech-pris"}],[55312397,{"idx":13,"name":"gekko-body","tpage_name":"wascityb-vis-pris"}],[198705192,{"idx":40,"name":"sig2-skirts-03","tpage_name":"lblowcst-pris"}],[10616835,{"idx":3,"name":"sign-future","tpage_name":"ctyslumb-sprite"}],[8716330,{"idx":42,"name":"baron-neon-eye-b","tpage_name":"ctysluma-sprite"}],[171769863,{"idx":7,"name":"dk-maker-idol-metal-01","tpage_name":"templea-vis-pris"}],[173015043,{"idx":3,"name":"precur-tube-joint-01","tpage_name":"precurc-vis-tfrag"}],[222887991,{"idx":55,"name":"palcab-lowres-background-mount-build-01","tpage_name":"lfacctyb-vis-tfrag"}],[198705171,{"idx":19,"name":"sig2-faceleft","tpage_name":"lblowcst-pris"}],[179961907,{"idx":51,"name":"sig-shoetop","tpage_name":"loutro2-pris2"}],[193658887,{"idx":7,"name":"dm-mech-plate-shin","tpage_name":"lmech-pris"}],[142016516,{"idx":4,"name":"facc-alt-wall","tpage_name":"lfacrm2-tfrag"}],[55312396,{"idx":12,"name":"wst-turret-side","tpage_name":"wascityb-vis-pris"}],[106954767,{"idx":15,"name":"vola-jump-plat","tpage_name":"volcanoa-vis-tfrag"}],[198705191,{"idx":39,"name":"sig2-skirts","tpage_name":"lblowcst-pris"}],[10616834,{"idx":2,"name":"sign-crimson","tpage_name":"ctyslumb-sprite"}],[8716329,{"idx":41,"name":"baron-neon-eye-a-on","tpage_name":"ctysluma-sprite"}],[171769862,{"idx":6,"name":"dk-maker-idol-head-01","tpage_name":"templea-vis-pris"}],[173015042,{"idx":2,"name":"precur-tubes-small-01","tpage_name":"precurc-vis-tfrag"}],[222887990,{"idx":54,"name":"t-palshaft-plate01","tpage_name":"lfacctyb-vis-tfrag"}],[198705170,{"idx":18,"name":"sig2-eyestillsmall","tpage_name":"lblowcst-pris"}],[179961906,{"idx":50,"name":"sig-shoebottom","tpage_name":"loutro2-pris2"}],[193658886,{"idx":6,"name":"dm-mech-plate-head","tpage_name":"lmech-pris"}],[142016515,{"idx":3,"name":"facc-sewer-floor","tpage_name":"lfacrm2-tfrag"}],[209911810,{"idx":2,"name":"artifact-plain-01","tpage_name":"deschase-tfrag"}],[198705190,{"idx":38,"name":"sig2-shoulderarmor","tpage_name":"lblowcst-pris"}],[171769861,{"idx":5,"name":"dk-maker-idol-globes-dk-01","tpage_name":"templea-vis-pris"}],[173015041,{"idx":1,"name":"precur-plate-large-01","tpage_name":"precurc-vis-tfrag"}],[222887989,{"idx":53,"name":"t-citywide-met-wall-02","tpage_name":"lfacctyb-vis-tfrag"}],[198705169,{"idx":17,"name":"sig2-belt","tpage_name":"lblowcst-pris"}],[217055335,{"idx":103,"name":"sig-metal-01","tpage_name":"museum2-pris2"}],[195559495,{"idx":71,"name":"torn-gunbarrel","tpage_name":"towercst-pris2"}],[208142346,{"idx":10,"name":"terraformer-metal-09","tpage_name":"desboss1-pris2"}],[194445366,{"idx":54,"name":"citwide-crimson-light","tpage_name":"gridcst-pris"}],[223019045,{"idx":37,"name":"rail-pipe-05","tpage_name":"rublcst-vis-tfrag"}],[223805492,{"idx":52,"name":"krew-foot","tpage_name":"museum3b-pris"}],[213844052,{"idx":84,"name":"king-face-01-small","tpage_name":"lpattack-vis-pris"}],[179961905,{"idx":49,"name":"sig-sac","tpage_name":"loutro2-pris2"}],[193658885,{"idx":5,"name":"dm-mech-pipe","tpage_name":"lmech-pris"}],[209911809,{"idx":1,"name":"artifact-blue-glow-01","tpage_name":"deschase-tfrag"}],[198705189,{"idx":37,"name":"sig2-shoetop","tpage_name":"lblowcst-pris"}],[10616832,{"idx":0,"name":"sign-baron","tpage_name":"ctyslumb-sprite"}],[8716327,{"idx":39,"name":"baron-neon-dot-ring-on","tpage_name":"ctysluma-sprite"}],[171769860,{"idx":4,"name":"dk-maker-idol-globes-01","tpage_name":"templea-vis-pris"}],[173015040,{"idx":0,"name":"precur-wall-brace-01","tpage_name":"precurc-vis-tfrag"}],[222887988,{"idx":52,"name":"t-citywide-red-met-01","tpage_name":"lfacctyb-vis-tfrag"}],[198705168,{"idx":16,"name":"sig-skirts-02","tpage_name":"lblowcst-pris"}],[222887987,{"idx":51,"name":"t-citywide-met-pill-01","tpage_name":"lfacctyb-vis-tfrag"}],[198705167,{"idx":15,"name":"jakbsmall-glovetop","tpage_name":"lblowcst-pris"}],[170197034,{"idx":42,"name":"samos-lens","tpage_name":"outrocst-pris2"}],[181403654,{"idx":6,"name":"intcept-tread01","tpage_name":"desjump-pris"}],[171442214,{"idx":38,"name":"temple_sandstone_brick-01","tpage_name":"templea-vis-tfrag"}],[173932574,{"idx":30,"name":"vin-teeth-01","tpage_name":"ltowerb-vis-pris2"}],[179961903,{"idx":47,"name":"sig-metal-01","tpage_name":"loutro2-pris2"}],[193658883,{"idx":3,"name":"dm-mech-joint","tpage_name":"lmech-pris"}],[142016512,{"idx":0,"name":"facc-metal-panel-11","tpage_name":"lfacrm2-tfrag"}],[106954763,{"idx":11,"name":"vola-grass-floor-01","tpage_name":"volcanoa-vis-tfrag"}],[198705187,{"idx":35,"name":"sig2-sac","tpage_name":"lblowcst-pris"}],[222887986,{"idx":50,"name":"t-citywide-met-strp01","tpage_name":"lfacctyb-vis-tfrag"}],[198705166,{"idx":14,"name":"jakbsmall-finger","tpage_name":"lblowcst-pris"}],[170197033,{"idx":41,"name":"samos-leaf","tpage_name":"outrocst-pris2"}],[181403653,{"idx":5,"name":"intcept-teeth01","tpage_name":"desjump-pris"}],[171442213,{"idx":37,"name":"temple_metal03","tpage_name":"templea-vis-tfrag"}],[173932573,{"idx":29,"name":"sig-undergarments","tpage_name":"ltowerb-vis-pris2"}],[179961902,{"idx":46,"name":"sig-lens","tpage_name":"loutro2-pris2"}],[193658882,{"idx":2,"name":"dm-mech-head","tpage_name":"lmech-pris"}],[198705186,{"idx":34,"name":"sig2-metal-dirty","tpage_name":"lblowcst-pris"}],[222887985,{"idx":49,"name":"t-citywide-met-strp02","tpage_name":"lfacctyb-vis-tfrag"}],[198705165,{"idx":13,"name":"jakbsmall-blackstrap","tpage_name":"lblowcst-pris"}],[170197032,{"idx":40,"name":"samos-helmet","tpage_name":"outrocst-pris2"}],[181403652,{"idx":4,"name":"intcept-pipe01","tpage_name":"desjump-pris"}],[171442212,{"idx":36,"name":"warpgate-post-01","tpage_name":"templea-vis-tfrag"}],[173932572,{"idx":28,"name":"sig-skirts-03","tpage_name":"ltowerb-vis-pris2"}],[179961901,{"idx":45,"name":"sig-horn","tpage_name":"loutro2-pris2"}],[193658881,{"idx":1,"name":"dm-mech-eye","tpage_name":"lmech-pris"}],[222887984,{"idx":48,"name":"palcab-lorez-metal01","tpage_name":"lfacctyb-vis-tfrag"}],[198705164,{"idx":12,"name":"environment-oldmetal","tpage_name":"lblowcst-pris"}],[170197031,{"idx":39,"name":"samos-hair","tpage_name":"outrocst-pris2"}],[181403651,{"idx":3,"name":"intcept-gun01","tpage_name":"desjump-pris"}],[171442211,{"idx":35,"name":"warpgate-precursormetal","tpage_name":"templea-vis-tfrag"}],[173932571,{"idx":27,"name":"sig-skirts-02","tpage_name":"ltowerb-vis-pris2"}],[179961900,{"idx":44,"name":"sig-headgear","tpage_name":"loutro2-pris2"}],[193658880,{"idx":0,"name":"dm-mech-claws","tpage_name":"lmech-pris"}],[222887983,{"idx":47,"name":"palcab-lorez-metal03","tpage_name":"lfacctyb-vis-tfrag"}],[198705163,{"idx":11,"name":"citn-allleye","tpage_name":"lblowcst-pris"}],[170197030,{"idx":38,"name":"samos-finger-01","tpage_name":"outrocst-pris2"}],[181403650,{"idx":2,"name":"intcept-base-patern02","tpage_name":"desjump-pris"}],[171442210,{"idx":34,"name":"warpgate-circuitpattern2","tpage_name":"templea-vis-tfrag"}],[173932570,{"idx":26,"name":"sig-skirts","tpage_name":"ltowerb-vis-pris2"}],[198705183,{"idx":31,"name":"sig2-horn","tpage_name":"lblowcst-pris"}],[222887982,{"idx":46,"name":"city-lowres-ctygen-stripe-02","tpage_name":"lfacctyb-vis-tfrag"}],[198705162,{"idx":10,"name":"citn-allleatherwrinkled","tpage_name":"lblowcst-pris"}],[170197029,{"idx":37,"name":"samos-face","tpage_name":"outrocst-pris2"}],[181403649,{"idx":1,"name":"intcept-base-patern01","tpage_name":"desjump-pris"}],[173932569,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"ltowerb-vis-pris2"}],[198705182,{"idx":30,"name":"sig2-headgear","tpage_name":"lblowcst-pris"}],[198705161,{"idx":9,"name":"citn-allleatherstrap","tpage_name":"lblowcst-pris"}],[201195520,{"idx":0,"name":"sig-flatfangs","tpage_name":"loutro2-water"}],[198705160,{"idx":8,"name":"citn-allleather","tpage_name":"lblowcst-pris"}],[223150165,{"idx":85,"name":"vehicle-wheel-01","tpage_name":"rublcst-vis-pris"}],[48627785,{"idx":73,"name":"sewer-red-light-01","tpage_name":"sewb-vis-tfrag"}],[222887979,{"idx":43,"name":"city-lowres-ctygen-build-05","tpage_name":"lfacctyb-vis-tfrag"}],[198705159,{"idx":7,"name":"citn-alllcotton","tpage_name":"lblowcst-pris"}],[223150164,{"idx":84,"name":"rhino-wheel-01","tpage_name":"rublcst-vis-pris"}],[48627784,{"idx":72,"name":"sewer-scaffold-03","tpage_name":"sewb-vis-tfrag"}],[170197026,{"idx":34,"name":"samos-ear","tpage_name":"outrocst-pris2"}],[171442206,{"idx":30,"name":"common_sandstone_trim01","tpage_name":"templea-vis-tfrag"}],[173932566,{"idx":22,"name":"sig-sac","tpage_name":"ltowerb-vis-pris2"}],[173867105,{"idx":97,"name":"dark-crystal-pickup-03","tpage_name":"ltowerb-vis-pris"}],[202506245,{"idx":5,"name":"comb-env2","tpage_name":"raila-alpha"}],[134676534,{"idx":54,"name":"rub-copper-metal-01","tpage_name":"rubblec-vis-tfrag"}],[150863874,{"idx":2,"name":"daxter-eyelid","tpage_name":"towerc-pris"}],[198705179,{"idx":27,"name":"sig2-gun-03","tpage_name":"lblowcst-pris"}],[216989806,{"idx":110,"name":"prec-veger-sleeve","tpage_name":"museum2-pris"}],[223150163,{"idx":83,"name":"rhino-horn-02","tpage_name":"rublcst-vis-pris"}],[48627783,{"idx":71,"name":"sewer-metal-trim-01","tpage_name":"sewb-vis-tfrag"}],[222887977,{"idx":41,"name":"city-lowres-ctygen-side-01","tpage_name":"lfacctyb-vis-tfrag"}],[216989805,{"idx":109,"name":"daxtertuft","tpage_name":"museum2-pris"}],[223150162,{"idx":82,"name":"kid-teeth","tpage_name":"rublcst-vis-pris"}],[220529017,{"idx":377,"name":"war-teeth","tpage_name":"museum4-pris"}],[222887976,{"idx":40,"name":"city-lowres-ctygen-build-02","tpage_name":"lfacctyb-vis-tfrag"}],[655369,{"idx":9,"name":"sat-shield-env-uvscroll","tpage_name":"level-default-warp"}],[216989804,{"idx":108,"name":"daxterlense","tpage_name":"museum2-pris"}],[223150161,{"idx":81,"name":"kid-shirt","tpage_name":"rublcst-vis-pris"}],[140247051,{"idx":11,"name":"sewer-mantel-01","tpage_name":"minee-tfrag"}],[170197023,{"idx":31,"name":"environment-oldmetal","tpage_name":"outrocst-pris2"}],[173932563,{"idx":19,"name":"sig-lens","tpage_name":"ltowerb-vis-pris2"}],[198705176,{"idx":24,"name":"sig2-glovetop","tpage_name":"lblowcst-pris"}],[222887975,{"idx":39,"name":"palcab-lowres-mark-highway","tpage_name":"lfacctyb-vis-tfrag"}],[179961910,{"idx":54,"name":"sig-skirts-02","tpage_name":"loutro2-pris2"}],[193658890,{"idx":10,"name":"dm-mech-waist","tpage_name":"lmech-pris"}],[55312399,{"idx":15,"name":"gekko-fingers","tpage_name":"wascityb-vis-pris"}],[198705194,{"idx":42,"name":"bam-hairhilite","tpage_name":"lblowcst-pris"}],[10616837,{"idx":5,"name":"sign-happy-pirate","tpage_name":"ctyslumb-sprite"}],[8716332,{"idx":44,"name":"baron-neon-eye-border","tpage_name":"ctysluma-sprite"}],[61014028,{"idx":12,"name":"minc-blue-paint-01","tpage_name":"minec-vis-shrub"}],[62259208,{"idx":8,"name":"gunbox02","tpage_name":"ctycarc-pris"}],[220528965,{"idx":325,"name":"geo-shirt","tpage_name":"museum4-pris"}],[223019027,{"idx":19,"name":"rail-patch-01","tpage_name":"rublcst-vis-tfrag"}],[170459172,{"idx":36,"name":"jakchires-brownstrap","tpage_name":"ljkdxvin-pris"}],[171704352,{"idx":32,"name":"temple_sandstone_pill05","tpage_name":"templec-vis-tfrag"}],[175439892,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"rubblea-vis-pris2"}],[172949532,{"idx":28,"name":"errolcyber-bluedome","tpage_name":"precurd-vis-pris"}],[174194712,{"idx":24,"name":"jakchires-facelft","tpage_name":"ljkfeet-pris"}],[194052131,{"idx":35,"name":"vehicle-gas-tank-01","tpage_name":"deschase-pris"}],[202768391,{"idx":7,"name":"hud-torn-head-01","tpage_name":"lblowcst-minimap"}],[140378113,{"idx":1,"name":"airlock-door-cog","tpage_name":"minee-pris"}],[129171493,{"idx":37,"name":"sewer-scaffold-01","tpage_name":"sewn-vis-tfrag"}],[170197028,{"idx":36,"name":"samos-eyelid","tpage_name":"outrocst-pris2"}],[181403648,{"idx":0,"name":"intcept-base-green01","tpage_name":"desjump-pris"}],[171442208,{"idx":32,"name":"common_sandstone_base01","tpage_name":"templea-vis-tfrag"}],[173932568,{"idx":24,"name":"sig-shoetop","tpage_name":"ltowerb-vis-pris2"}],[188809267,{"idx":51,"name":"facd-blue-glow-panel-01","tpage_name":"factoryd-vis-tfrag"}],[202506247,{"idx":7,"name":"rail-light-red","tpage_name":"raila-alpha"}],[134676536,{"idx":56,"name":"rub-wall-gen-03","tpage_name":"rubblec-vis-tfrag"}],[150863876,{"idx":4,"name":"daxter-orange","tpage_name":"towerc-pris"}],[198705181,{"idx":29,"name":"sig2-gun-05","tpage_name":"lblowcst-pris"}],[174325807,{"idx":47,"name":"jakchires-pants","tpage_name":"ldesgcst-pris"}],[188022787,{"idx":3,"name":"daxter-furhilite","tpage_name":"lvincst-pris"}],[176816167,{"idx":39,"name":"neo-wasp-eye","tpage_name":"towera-pris"}],[184287247,{"idx":15,"name":"preship-metal-trim-02","tpage_name":"loutro-shrub"}],[188022828,{"idx":44,"name":"jakchires-jacket","tpage_name":"lvincst-pris"}],[195493908,{"idx":20,"name":"jakc-armor","tpage_name":"towercst-pris"}],[223805447,{"idx":7,"name":"errol-chestplateside","tpage_name":"museum3b-pris"}],[223150122,{"idx":42,"name":"jakchires-eyebrow","tpage_name":"rublcst-vis-pris"}],[221904942,{"idx":46,"name":"jak-orig-earflaps","tpage_name":"museum4-pris2"}],[194445347,{"idx":35,"name":"jakchires-teeth","tpage_name":"gridcst-pris"}],[223019026,{"idx":18,"name":"rub-met-strp-close","tpage_name":"rublcst-vis-tfrag"}],[170459171,{"idx":35,"name":"jakchires-blackstrap","tpage_name":"ljkdxvin-pris"}],[171704351,{"idx":31,"name":"temple_pre-03","tpage_name":"templec-vis-tfrag"}],[175439891,{"idx":19,"name":"king-lgblackstrap","tpage_name":"rubblea-vis-pris2"}],[172949531,{"idx":27,"name":"errocyber-faceflesh","tpage_name":"precurd-vis-pris"}],[174194711,{"idx":23,"name":"jakchires-eyelid","tpage_name":"ljkfeet-pris"}],[194052130,{"idx":34,"name":"vehicle-chrome-pipe-01","tpage_name":"deschase-pris"}],[202768390,{"idx":6,"name":"hud-target-reticle-fancy-02","tpage_name":"lblowcst-minimap"}],[140378112,{"idx":0,"name":"airlock-door-bolt","tpage_name":"minee-pris"}],[129171492,{"idx":36,"name":"sewer-plate-05","tpage_name":"sewn-vis-tfrag"}],[60948499,{"idx":19,"name":"minc-strut-01","tpage_name":"minec-vis-tfrag"}],[170197027,{"idx":35,"name":"samos-eye","tpage_name":"outrocst-pris2"}],[171442207,{"idx":31,"name":"common_sandstone_pill01","tpage_name":"templea-vis-tfrag"}],[173932567,{"idx":23,"name":"sig-shoebottom","tpage_name":"ltowerb-vis-pris2"}],[198705180,{"idx":28,"name":"sig2-gun-04","tpage_name":"lblowcst-pris"}],[174325806,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"ldesgcst-pris"}],[188022786,{"idx":2,"name":"daxter-eyelid","tpage_name":"lvincst-pris"}],[176816166,{"idx":38,"name":"neo-wasp-dark-brown","tpage_name":"towera-pris"}],[184287246,{"idx":14,"name":"preship-metal-trim-01","tpage_name":"loutro-shrub"}],[188022827,{"idx":43,"name":"jakchires-horn","tpage_name":"lvincst-pris"}],[195493907,{"idx":19,"name":"environment-oldmetal","tpage_name":"towercst-pris"}],[223805446,{"idx":6,"name":"errol-chestplate","tpage_name":"museum3b-pris"}],[223150121,{"idx":41,"name":"jakchires-eye-norm","tpage_name":"rublcst-vis-pris"}],[221904941,{"idx":45,"name":"jak-orig-clips","tpage_name":"museum4-pris2"}],[222953473,{"idx":1,"name":"palcab-lowres-background-crater-rim","tpage_name":"lfacctyb-vis-alpha"}],[220201173,{"idx":213,"name":"kor-eye","tpage_name":"museum3-pris"}],[222953472,{"idx":0,"name":"palcab-lowres-background-shoreline-02","tpage_name":"lfacctyb-vis-alpha"}],[220201172,{"idx":212,"name":"kor-chain","tpage_name":"museum3-pris"}],[222888039,{"idx":103,"name":"ctywide-ox-met-01","tpage_name":"lfacctyb-vis-tfrag"}],[135725067,{"idx":11,"name":"seem-face","tpage_name":"lseemwca-pris2"}],[217055305,{"idx":73,"name":"prec-veger-leg","tpage_name":"museum2-pris2"}],[205717517,{"idx":13,"name":"kg-target-gun-05","tpage_name":"lgunnorm-pris"}],[206962697,{"idx":9,"name":"citywide-wall-orange-plain","tpage_name":"lfreeout-tfrag"}],[120258577,{"idx":17,"name":"kg-pickup-engine-01","tpage_name":"lctyhijk-pris"}],[222887974,{"idx":38,"name":"city-lowres-ctygen-build-01","tpage_name":"lfacctyb-vis-tfrag"}],[222887973,{"idx":37,"name":"city-lowres-ctygen-roof-02","tpage_name":"lfacctyb-vis-tfrag"}],[222887972,{"idx":36,"name":"city-lowres-ctygen-stripe-01","tpage_name":"lfacctyb-vis-tfrag"}],[222887971,{"idx":35,"name":"city-lowres-ctygen-side-02","tpage_name":"lfacctyb-vis-tfrag"}],[222887970,{"idx":34,"name":"palcab-lowres-mark-awning-red","tpage_name":"lfacctyb-vis-tfrag"}],[222887969,{"idx":33,"name":"palcab-lowres-mark-awning-green","tpage_name":"lfacctyb-vis-tfrag"}],[220528934,{"idx":294,"name":"mineshort-teeth","tpage_name":"museum4-pris"}],[220528933,{"idx":293,"name":"mineshort-suspenders","tpage_name":"museum4-pris"}],[220528932,{"idx":292,"name":"mineshort-stick2","tpage_name":"museum4-pris"}],[220528931,{"idx":291,"name":"mineshort-stick1","tpage_name":"museum4-pris"}],[220528930,{"idx":290,"name":"mineshort-shirtplain","tpage_name":"museum4-pris"}],[220528929,{"idx":289,"name":"mineshort-shirt2","tpage_name":"museum4-pris"}],[220528928,{"idx":288,"name":"mineshort-shirt1","tpage_name":"museum4-pris"}],[220528927,{"idx":287,"name":"mineshort-screw","tpage_name":"museum4-pris"}],[162791453,{"idx":29,"name":"rail-fit-01","tpage_name":"railc-tfrag"}],[220528959,{"idx":319,"name":"geo-lamp","tpage_name":"museum4-pris"}],[220528926,{"idx":286,"name":"mineshort-pothandle","tpage_name":"museum4-pris"}],[220528925,{"idx":285,"name":"mineshort-pot","tpage_name":"museum4-pris"}],[220528924,{"idx":284,"name":"mineshort-pants","tpage_name":"museum4-pris"}],[220528923,{"idx":283,"name":"mineshort-mustache","tpage_name":"museum4-pris"}],[220528922,{"idx":282,"name":"mineshort-metalmud","tpage_name":"museum4-pris"}],[220528921,{"idx":281,"name":"mineshort-metal","tpage_name":"museum4-pris"}],[220528920,{"idx":280,"name":"mineshort-leathermud","tpage_name":"museum4-pris"}],[220528919,{"idx":279,"name":"mineshort-lampback","tpage_name":"museum4-pris"}],[220528915,{"idx":275,"name":"mineshort-candle","tpage_name":"museum4-pris"}],[220528914,{"idx":274,"name":"mayor-white-eye","tpage_name":"museum4-pris"}],[220528913,{"idx":273,"name":"mayor-vesthole","tpage_name":"museum4-pris"}],[220528912,{"idx":272,"name":"mayor-vestbutton","tpage_name":"museum4-pris"}],[220528911,{"idx":271,"name":"mayor-spats","tpage_name":"museum4-pris"}],[220528910,{"idx":270,"name":"mayor-shirt2","tpage_name":"museum4-pris"}],[220528909,{"idx":269,"name":"mayor-shirt","tpage_name":"museum4-pris"}],[223805558,{"idx":118,"name":"vin-hair-02","tpage_name":"museum3b-pris"}],[175767624,{"idx":72,"name":"prec-leader-shirt","tpage_name":"loutro-pris"}],[165806184,{"idx":104,"name":"t-palshaft-r-strp-plate01","tpage_name":"ltowcity-tfrag"}],[194445324,{"idx":12,"name":"jakc-wristband-a2","tpage_name":"gridcst-pris"}],[221773824,{"idx":0,"name":"ceiling-dust","tpage_name":"desertd-sprite"}],[216072309,{"idx":117,"name":"seem-face","tpage_name":"museum-pris2"}],[223215682,{"idx":66,"name":"veger-vest","tpage_name":"rublcst-vis-pris2"}],[216989782,{"idx":86,"name":"prec-tess-belt2","tpage_name":"museum2-pris"}],[217055302,{"idx":70,"name":"prec-veger-foot-02","tpage_name":"museum2-pris2"}],[193527894,{"idx":86,"name":"errolcyber-pipes-03","tpage_name":"desboss2-pris"}],[217055269,{"idx":37,"name":"king-bolt","tpage_name":"museum2-pris2"}],[195559462,{"idx":38,"name":"sig-gem-01","tpage_name":"towercst-pris2"}],[220528652,{"idx":12,"name":"bam-hairhilite","tpage_name":"museum4-pris"}],[223019012,{"idx":4,"name":"rub-pal-red","tpage_name":"rublcst-vis-tfrag"}],[223150139,{"idx":59,"name":"jakchires-jacket","tpage_name":"rublcst-vis-pris"}],[221904959,{"idx":63,"name":"jak-orig-wraps","tpage_name":"museum4-pris2"}],[118620217,{"idx":57,"name":"klever-hand","tpage_name":"ljkcdmkl-pris"}],[223805557,{"idx":117,"name":"vin-hair-01","tpage_name":"museum3b-pris"}],[175767623,{"idx":71,"name":"prec-leader-robe-02","tpage_name":"loutro-pris"}],[165806183,{"idx":103,"name":"ctywide-ox-met-01","tpage_name":"ltowcity-tfrag"}],[194445323,{"idx":11,"name":"jakc-wraps","tpage_name":"gridcst-pris"}],[223215681,{"idx":65,"name":"veger-teeth","tpage_name":"rublcst-vis-pris2"}],[216989781,{"idx":85,"name":"prec-tess-belt","tpage_name":"museum2-pris"}],[222167066,{"idx":26,"name":"billy-wrap","tpage_name":"museum4-tfrag"}],[193527926,{"idx":118,"name":"vehicle-wheel-01","tpage_name":"desboss2-pris"}],[217055301,{"idx":69,"name":"prec-veger-foot","tpage_name":"museum2-pris2"}],[193527893,{"idx":85,"name":"errolcyber-pipes-02","tpage_name":"desboss2-pris"}],[217055268,{"idx":36,"name":"king-bluemetal","tpage_name":"museum2-pris2"}],[195559461,{"idx":37,"name":"sig-flask","tpage_name":"towercst-pris2"}],[223150138,{"idx":58,"name":"jakchires-horn","tpage_name":"rublcst-vis-pris"}],[221904958,{"idx":62,"name":"jak-orig-teeth","tpage_name":"museum4-pris2"}],[223805556,{"idx":116,"name":"vin-gunhandle-01","tpage_name":"museum3b-pris"}],[223215680,{"idx":64,"name":"veger-stickwrap","tpage_name":"rublcst-vis-pris2"}],[216989780,{"idx":84,"name":"prec-teeth","tpage_name":"museum2-pris"}],[222167065,{"idx":25,"name":"explorer-belt","tpage_name":"museum4-tfrag"}],[193527925,{"idx":117,"name":"vehicle-snake-tread-02","tpage_name":"desboss2-pris"}],[217055300,{"idx":68,"name":"prec-veger-ear","tpage_name":"museum2-pris2"}],[193527892,{"idx":84,"name":"errolcyber-pipes-01","tpage_name":"desboss2-pris"}],[217055267,{"idx":35,"name":"king-blackskirt2","tpage_name":"museum2-pris2"}],[153092126,{"idx":30,"name":"rail-step-03","tpage_name":"railx-tfrag"}],[195559460,{"idx":36,"name":"sig-facert","tpage_name":"towercst-pris2"}],[223019010,{"idx":2,"name":"rub-rubble-01","tpage_name":"rublcst-vis-tfrag"}],[223150137,{"idx":57,"name":"jakchires-hair-norm","tpage_name":"rublcst-vis-pris"}],[221904957,{"idx":61,"name":"jak-orig-strap","tpage_name":"museum4-pris2"}],[153681964,{"idx":44,"name":"mhcity-base","tpage_name":"mhcityb-vis-tfrag"}],[223805555,{"idx":115,"name":"vin-gunbarrel-02","tpage_name":"museum3b-pris"}],[165609472,{"idx":0,"name":"environment-darkprec","tpage_name":"wasdefen-pris"}],[159383572,{"idx":20,"name":"jakc-armor","tpage_name":"slumbset-pris"}],[223215679,{"idx":63,"name":"veger-sleevelower","tpage_name":"rublcst-vis-pris2"}],[216989779,{"idx":83,"name":"prec-surfer-sleeve","tpage_name":"museum2-pris"}],[222167064,{"idx":24,"name":"war-wrapstrap","tpage_name":"museum4-tfrag"}],[193527924,{"idx":116,"name":"vehicle-snake-tread-01","tpage_name":"desboss2-pris"}],[217055299,{"idx":67,"name":"prec-veger-body","tpage_name":"museum2-pris2"}],[167313433,{"idx":25,"name":"daxtertuft","tpage_name":"stadium-vis-pris"}],[193527891,{"idx":83,"name":"errolcyber-metalgold","tpage_name":"desboss2-pris"}],[153092125,{"idx":29,"name":"rail-step-05","tpage_name":"railx-tfrag"}],[195559459,{"idx":35,"name":"sig-faceleft","tpage_name":"towercst-pris2"}],[223019009,{"idx":1,"name":"rub-marble-floor-01-hitweak","tpage_name":"rublcst-vis-tfrag"}],[223150136,{"idx":56,"name":"jakchires-hair-dark","tpage_name":"rublcst-vis-pris"}],[221904956,{"idx":60,"name":"jak-orig-skirt","tpage_name":"museum4-pris2"}],[208076816,{"idx":16,"name":"terraformer-organic-03","tpage_name":"desboss2-pris2"}],[213057536,{"idx":0,"name":"mech-flame","tpage_name":"lprecurc-sprite"}],[203096096,{"idx":32,"name":"citn-allleather","tpage_name":"lctyass-pris"}],[223805554,{"idx":114,"name":"vin-gunbarrel","tpage_name":"museum3b-pris"}],[223215678,{"idx":62,"name":"veger-sleeve","tpage_name":"rublcst-vis-pris2"}],[216989778,{"idx":82,"name":"prec-surfer-shirt","tpage_name":"museum2-pris"}],[217055298,{"idx":66,"name":"king-wristband","tpage_name":"museum2-pris2"}],[167313432,{"idx":24,"name":"daxterteeth","tpage_name":"stadium-vis-pris"}],[195559458,{"idx":34,"name":"sig-eyelid","tpage_name":"towercst-pris2"}],[223019008,{"idx":0,"name":"stdm-wallrock-dirt","tpage_name":"rublcst-vis-tfrag"}],[208076815,{"idx":15,"name":"terraformer-organic-02","tpage_name":"desboss2-pris2"}],[203096095,{"idx":31,"name":"citn-alllcotton-wrinkled","tpage_name":"lctyass-pris"}],[197722135,{"idx":23,"name":"widow-dull-inards","tpage_name":"lfacrm2-pris"}],[223805553,{"idx":113,"name":"vin-glove-02","tpage_name":"museum3b-pris"}],[159383570,{"idx":18,"name":"daxtertuft","tpage_name":"slumbset-pris"}],[223215677,{"idx":61,"name":"veger-shoulderplatemetal","tpage_name":"rublcst-vis-pris2"}],[216989777,{"idx":81,"name":"prec-surfer-sash","tpage_name":"museum2-pris"}],[217055297,{"idx":65,"name":"king-wraps","tpage_name":"museum2-pris2"}],[173539331,{"idx":3,"name":"tow-wall-supports","tpage_name":"ltowerb-vis-shrub"}],[167313431,{"idx":23,"name":"daxternose","tpage_name":"stadium-vis-pris"}],[195559457,{"idx":33,"name":"sig-eye","tpage_name":"towercst-pris2"}],[208076814,{"idx":14,"name":"terraformer-organic-01","tpage_name":"desboss2-pris2"}],[203096094,{"idx":30,"name":"citn-alllcotton","tpage_name":"lctyass-pris"}],[197722134,{"idx":22,"name":"squid-tubes","tpage_name":"lfacrm2-pris"}],[223805552,{"idx":112,"name":"vin-glove-01","tpage_name":"museum3b-pris"}],[217055296,{"idx":64,"name":"king-wrap","tpage_name":"museum2-pris2"}],[173539330,{"idx":2,"name":"tow-groundpod","tpage_name":"ltowerb-vis-shrub"}],[167313430,{"idx":22,"name":"daxterlense","tpage_name":"stadium-vis-pris"}],[195559456,{"idx":32,"name":"sig-belt","tpage_name":"towercst-pris2"}],[208076813,{"idx":13,"name":"terraformer-minestrips-01","tpage_name":"desboss2-pris2"}],[203096093,{"idx":29,"name":"citn-allflesh","tpage_name":"lctyass-pris"}],[197722133,{"idx":21,"name":"squid-bulb-sm","tpage_name":"lfacrm2-pris"}],[223805551,{"idx":111,"name":"vin-finger-01","tpage_name":"museum3b-pris"}],[220528987,{"idx":347,"name":"ogre-beardring","tpage_name":"museum4-pris"}],[202571783,{"idx":7,"name":"rail-gray-metal-01","tpage_name":"raila-tfrag"}],[217055295,{"idx":63,"name":"king-vestback","tpage_name":"museum2-pris2"}],[167313429,{"idx":21,"name":"daxterhelmetplain","tpage_name":"stadium-vis-pris"}],[195559455,{"idx":31,"name":"jinx-wraps","tpage_name":"towercst-pris2"}],[208076812,{"idx":12,"name":"terraformer-metal-11","tpage_name":"desboss2-pris2"}],[203096092,{"idx":28,"name":"citn-alleyebrow","tpage_name":"lctyass-pris"}],[197722132,{"idx":20,"name":"roboguard-shouldershield","tpage_name":"lfacrm2-pris"}],[223805550,{"idx":110,"name":"vin-face-01","tpage_name":"museum3b-pris"}],[159383567,{"idx":15,"name":"daxterlense","tpage_name":"slumbset-pris"}],[220528986,{"idx":346,"name":"ogre-arm","tpage_name":"museum4-pris"}],[202571782,{"idx":6,"name":"comb-redmarker","tpage_name":"raila-tfrag"}],[217055294,{"idx":62,"name":"king-vest","tpage_name":"museum2-pris2"}],[167313428,{"idx":20,"name":"daxterheadwidenew","tpage_name":"stadium-vis-pris"}],[195559454,{"idx":30,"name":"jinx-teeth","tpage_name":"towercst-pris2"}],[208076811,{"idx":11,"name":"terraformer-metal-10","tpage_name":"desboss2-pris2"}],[203096091,{"idx":27,"name":"citn-allbuckel","tpage_name":"lctyass-pris"}],[197722131,{"idx":19,"name":"roboguard-headshield","tpage_name":"lfacrm2-pris"}],[223805549,{"idx":109,"name":"vin-emblem","tpage_name":"museum3b-pris"}],[159383566,{"idx":14,"name":"daxterhelmetplain","tpage_name":"slumbset-pris"}],[220528985,{"idx":345,"name":"minetall-stick","tpage_name":"museum4-pris"}],[202571781,{"idx":5,"name":"rail-cord-01","tpage_name":"raila-tfrag"}],[218169346,{"idx":2,"name":"time-bubble-orbiter","tpage_name":"lbbsdrp2-sprite"}],[164626470,{"idx":38,"name":"jakchires-eyebrow","tpage_name":"railcst-pris"}],[217055293,{"idx":61,"name":"king-thinstrap","tpage_name":"museum2-pris2"}],[167313427,{"idx":19,"name":"daxtergoggles","tpage_name":"stadium-vis-pris"}],[195559453,{"idx":29,"name":"jinx-singlerope","tpage_name":"towercst-pris2"}],[208076810,{"idx":10,"name":"terraformer-metal-09","tpage_name":"desboss2-pris2"}],[203096090,{"idx":26,"name":"citn-1-pants","tpage_name":"lctyass-pris"}],[197722130,{"idx":18,"name":"roboguard-die-stamped-metal-red","tpage_name":"lfacrm2-pris"}],[223805548,{"idx":108,"name":"vin-ear","tpage_name":"museum3b-pris"}],[159383565,{"idx":13,"name":"daxterheadwidenew","tpage_name":"slumbset-pris"}],[170197025,{"idx":33,"name":"samos-diaper","tpage_name":"outrocst-pris2"}],[171442205,{"idx":29,"name":"common_sandstone_taper01","tpage_name":"templea-vis-tfrag"}],[173932565,{"idx":21,"name":"sig-metal-dirty","tpage_name":"ltowerb-vis-pris2"}],[198705178,{"idx":26,"name":"sig2-gun-02","tpage_name":"lblowcst-pris"}],[220528984,{"idx":344,"name":"minetall-shoveltop","tpage_name":"museum4-pris"}],[202571780,{"idx":4,"name":"rail-pipe-03","tpage_name":"raila-tfrag"}],[217055292,{"idx":60,"name":"king-teeth","tpage_name":"museum2-pris2"}],[167313426,{"idx":18,"name":"daxterfoot-bottom","tpage_name":"stadium-vis-pris"}],[195559452,{"idx":28,"name":"jinx-shoebottom2","tpage_name":"towercst-pris2"}],[208076809,{"idx":9,"name":"terraformer-metal-08","tpage_name":"desboss2-pris2"}],[203096089,{"idx":25,"name":"citfat-hairflat","tpage_name":"lctyass-pris"}],[197722129,{"idx":17,"name":"roboguard-die-stamped-metal-blue","tpage_name":"lfacrm2-pris"}],[223805547,{"idx":107,"name":"vin-clip","tpage_name":"museum3b-pris"}],[159383564,{"idx":12,"name":"daxtergoggles","tpage_name":"slumbset-pris"}],[8716350,{"idx":62,"name":"baron-neon-white-b","tpage_name":"ctysluma-sprite"}],[170197024,{"idx":32,"name":"samos-arm","tpage_name":"outrocst-pris2"}],[171442204,{"idx":28,"name":"common_sandstone_ground01","tpage_name":"templea-vis-tfrag"}],[173932564,{"idx":20,"name":"sig-metal-01","tpage_name":"ltowerb-vis-pris2"}],[198705177,{"idx":25,"name":"sig2-gun-01","tpage_name":"lblowcst-pris"}],[220528983,{"idx":343,"name":"minetall-shovelbottom","tpage_name":"museum4-pris"}],[202571779,{"idx":3,"name":"rail-edge-01","tpage_name":"raila-tfrag"}],[218169344,{"idx":0,"name":"time-bubble","tpage_name":"lbbsdrp2-sprite"}],[217055291,{"idx":59,"name":"king-skirt-b","tpage_name":"museum2-pris2"}],[167313425,{"idx":17,"name":"daxterfoot","tpage_name":"stadium-vis-pris"}],[195559451,{"idx":27,"name":"jinx-shirt","tpage_name":"towercst-pris2"}],[172949615,{"idx":111,"name":"errolcyber-rubberpipe-light","tpage_name":"precurd-vis-pris"}],[208076808,{"idx":8,"name":"terraformer-metal-07","tpage_name":"desboss2-pris2"}],[203096088,{"idx":24,"name":"bam-hairhilite","tpage_name":"lctyass-pris"}],[202702848,{"idx":0,"name":"hud-torn-head-01","tpage_name":"lctypalt-minimap"}],[197722128,{"idx":16,"name":"kg-grunt-rim-03","tpage_name":"lfacrm2-pris"}],[223805546,{"idx":106,"name":"vin-blackstrap","tpage_name":"museum3b-pris"}],[159383563,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"slumbset-pris"}],[8716349,{"idx":61,"name":"baron-neon-white-a-on","tpage_name":"ctysluma-sprite"}],[220528982,{"idx":342,"name":"minetall-shirtbuckles","tpage_name":"museum4-pris"}],[202571778,{"idx":2,"name":"rail-pipe-01","tpage_name":"raila-tfrag"}],[217055290,{"idx":58,"name":"king-skirt","tpage_name":"museum2-pris2"}],[167313424,{"idx":16,"name":"daxterfinger","tpage_name":"stadium-vis-pris"}],[195559450,{"idx":26,"name":"jinx-scarf","tpage_name":"towercst-pris2"}],[223805545,{"idx":105,"name":"vin-belt-02","tpage_name":"museum3b-pris"}],[159383562,{"idx":10,"name":"daxterfoot","tpage_name":"slumbset-pris"}],[217055289,{"idx":57,"name":"king-shoebottom","tpage_name":"museum2-pris2"}],[167313423,{"idx":15,"name":"daxterear","tpage_name":"stadium-vis-pris"}],[220201110,{"idx":150,"name":"keira-chokermetal","tpage_name":"museum3-pris"}],[195559449,{"idx":25,"name":"jinx-rope-01","tpage_name":"towercst-pris2"}],[223805544,{"idx":104,"name":"vin-belt","tpage_name":"museum3b-pris"}],[159383561,{"idx":9,"name":"daxterfinger","tpage_name":"slumbset-pris"}],[217055288,{"idx":56,"name":"king-precursermetal-trimbolt","tpage_name":"museum2-pris2"}],[167313422,{"idx":14,"name":"daxterbolt","tpage_name":"stadium-vis-pris"}],[195559448,{"idx":24,"name":"jinx-pants","tpage_name":"towercst-pris2"}],[223805543,{"idx":103,"name":"vin-armor","tpage_name":"museum3b-pris"}],[159383560,{"idx":8,"name":"daxterear","tpage_name":"slumbset-pris"}],[217055287,{"idx":55,"name":"king-precursermetal-trim2","tpage_name":"museum2-pris2"}],[195559447,{"idx":23,"name":"jinx-kneepad","tpage_name":"towercst-pris2"}],[223805542,{"idx":102,"name":"crocadog-upperbody-01","tpage_name":"museum3b-pris"}],[159383559,{"idx":7,"name":"daxterbolt","tpage_name":"slumbset-pris"}],[217055286,{"idx":54,"name":"king-precursermetal-trim","tpage_name":"museum2-pris2"}],[223150123,{"idx":43,"name":"jakchires-eyebrow-dark","tpage_name":"rublcst-vis-pris"}],[221904943,{"idx":47,"name":"jak-orig-eye","tpage_name":"museum4-pris2"}],[213844008,{"idx":40,"name":"king-iris","tpage_name":"lpattack-vis-pris"}],[223805448,{"idx":8,"name":"errol-chinstrap","tpage_name":"museum3b-pris"}],[223805541,{"idx":101,"name":"crocadog-toenails","tpage_name":"museum3b-pris"}],[159383558,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"slumbset-pris"}],[217055285,{"idx":53,"name":"king-precursermetal-plain","tpage_name":"museum2-pris2"}],[195559445,{"idx":21,"name":"jinx-handle","tpage_name":"towercst-pris2"}],[223805540,{"idx":100,"name":"crocadog-teeth","tpage_name":"museum3b-pris"}],[159383557,{"idx":5,"name":"daxterarm","tpage_name":"slumbset-pris"}],[8716343,{"idx":55,"name":"baron-neon-skull-circle-on","tpage_name":"ctysluma-sprite"}],[217055284,{"idx":52,"name":"king-precursermetal-decor","tpage_name":"museum2-pris2"}],[195559444,{"idx":20,"name":"jinx-hairtye","tpage_name":"towercst-pris2"}],[223805539,{"idx":99,"name":"crocadog-scale","tpage_name":"museum3b-pris"}],[159383556,{"idx":4,"name":"daxter-orange","tpage_name":"slumbset-pris"}],[8716342,{"idx":54,"name":"baron-neon-skull-circle","tpage_name":"ctysluma-sprite"}],[217055283,{"idx":51,"name":"king-lgblackstrap","tpage_name":"museum2-pris2"}],[195559443,{"idx":19,"name":"jinx-hair","tpage_name":"towercst-pris2"}],[105054313,{"idx":105,"name":"intcept-gun01","tpage_name":"desoasis-pris"}],[223805538,{"idx":98,"name":"crocadog-nose","tpage_name":"museum3b-pris"}],[159383555,{"idx":3,"name":"daxter-furhilite","tpage_name":"slumbset-pris"}],[198705203,{"idx":51,"name":"torn-face-right","tpage_name":"lblowcst-pris"}],[8716341,{"idx":53,"name":"baron-neon-nose-on","tpage_name":"ctysluma-sprite"}],[217055282,{"idx":50,"name":"king-leg","tpage_name":"museum2-pris2"}],[195559442,{"idx":18,"name":"jinx-glovepalm","tpage_name":"towercst-pris2"}],[105054312,{"idx":104,"name":"intcept-base-patern02","tpage_name":"desoasis-pris"}],[198705202,{"idx":50,"name":"torn-face","tpage_name":"lblowcst-pris"}],[217055281,{"idx":49,"name":"king-iris","tpage_name":"museum2-pris2"}],[195559441,{"idx":17,"name":"jinx-glove","tpage_name":"towercst-pris2"}],[198705201,{"idx":49,"name":"torn-eye-lorez","tpage_name":"lblowcst-pris"}],[217055280,{"idx":48,"name":"king-horn","tpage_name":"museum2-pris2"}],[195559440,{"idx":16,"name":"jinx-finger","tpage_name":"towercst-pris2"}],[179961904,{"idx":48,"name":"sig-metal-dirty","tpage_name":"loutro2-pris2"}],[193658884,{"idx":4,"name":"dm-mech-joint-cap","tpage_name":"lmech-pris"}],[106954764,{"idx":12,"name":"vola-rock-side","tpage_name":"volcanoa-vis-tfrag"}],[209911808,{"idx":0,"name":"artifact-dec-01","tpage_name":"deschase-tfrag"}],[198705188,{"idx":36,"name":"sig2-shoebottom","tpage_name":"lblowcst-pris"}],[187170861,{"idx":45,"name":"ecocreature-insidemouth","tpage_name":"deswalk-vis-pris"}],[221904897,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum4-pris2"}],[187170860,{"idx":44,"name":"ecocreature-flesh","tpage_name":"deswalk-vis-pris"}],[221904896,{"idx":0,"name":"bam-eyelight","tpage_name":"museum4-pris2"}],[220528918,{"idx":278,"name":"mineshort-lamp","tpage_name":"museum4-pris"}],[220528917,{"idx":277,"name":"mineshort-hairyflesh","tpage_name":"museum4-pris"}],[220528916,{"idx":276,"name":"mineshort-flesh","tpage_name":"museum4-pris"}],[223215676,{"idx":60,"name":"veger-shoulderplate","tpage_name":"rublcst-vis-pris2"}],[216989776,{"idx":80,"name":"prec-surfer-pants","tpage_name":"museum2-pris"}],[223215675,{"idx":59,"name":"veger-shoebottom","tpage_name":"rublcst-vis-pris2"}],[216989775,{"idx":79,"name":"prec-surfer-hairshort","tpage_name":"museum2-pris"}],[223215674,{"idx":58,"name":"veger-scarf","tpage_name":"rublcst-vis-pris2"}],[216989774,{"idx":78,"name":"prec-surfer-hair","tpage_name":"museum2-pris"}],[223215673,{"idx":57,"name":"veger-parchment","tpage_name":"rublcst-vis-pris2"}],[216989773,{"idx":77,"name":"prec-surfer-chain-03","tpage_name":"museum2-pris"}],[219480132,{"idx":68,"name":"was-turret-hs-icon","tpage_name":"progress-minimap2"}],[223215672,{"idx":56,"name":"veger-pants","tpage_name":"rublcst-vis-pris2"}],[216989772,{"idx":76,"name":"prec-surfer-chain-02","tpage_name":"museum2-pris"}],[219480131,{"idx":67,"name":"satgame-hs-icon","tpage_name":"progress-minimap2"}],[223215671,{"idx":55,"name":"veger-pages","tpage_name":"rublcst-vis-pris2"}],[216989771,{"idx":75,"name":"prec-surfer-chain","tpage_name":"museum2-pris"}],[219480130,{"idx":66,"name":"ratchet-hs-icon","tpage_name":"progress-minimap2"}],[223215670,{"idx":54,"name":"veger-legwraps","tpage_name":"rublcst-vis-pris2"}],[216989770,{"idx":74,"name":"prec-staff-02","tpage_name":"museum2-pris"}],[219480129,{"idx":65,"name":"daxhead-hs-02-icon","tpage_name":"progress-minimap2"}],[223215669,{"idx":53,"name":"veger-iris","tpage_name":"rublcst-vis-pris2"}],[216989769,{"idx":73,"name":"prec-staff-01","tpage_name":"museum2-pris"}],[219480128,{"idx":64,"name":"daxhead-hs-01-icon","tpage_name":"progress-minimap2"}],[223215668,{"idx":52,"name":"veger-hand","tpage_name":"rublcst-vis-pris2"}],[216989768,{"idx":72,"name":"prec-orbsmall","tpage_name":"museum2-pris"}],[221904944,{"idx":48,"name":"jak-orig-eyebrow","tpage_name":"museum4-pris2"}],[223150124,{"idx":44,"name":"jakchires-eyebrow-norm","tpage_name":"rublcst-vis-pris"}],[219480127,{"idx":63,"name":"clank-hs-icon","tpage_name":"progress-minimap2"}],[223215667,{"idx":51,"name":"veger-hair","tpage_name":"rublcst-vis-pris2"}],[216989767,{"idx":71,"name":"prec-orblarge","tpage_name":"museum2-pris"}],[219480126,{"idx":62,"name":"hud-gray-testpattern-bars-01","tpage_name":"progress-minimap2"}],[223215666,{"idx":50,"name":"veger-gold","tpage_name":"rublcst-vis-pris2"}],[216989766,{"idx":70,"name":"prec-neck","tpage_name":"museum2-pris"}],[219480125,{"idx":61,"name":"inv-ygun-common","tpage_name":"progress-minimap2"}],[223215665,{"idx":49,"name":"veger-fingertop","tpage_name":"rublcst-vis-pris2"}],[216989765,{"idx":69,"name":"prec-leader-wrap","tpage_name":"museum2-pris"}],[219480124,{"idx":60,"name":"inv-ygun-03b","tpage_name":"progress-minimap2"}],[223215664,{"idx":48,"name":"veger-fingerbottom","tpage_name":"rublcst-vis-pris2"}],[216989764,{"idx":68,"name":"prec-leader-shirt","tpage_name":"museum2-pris"}],[219480123,{"idx":59,"name":"inv-ygun-03a","tpage_name":"progress-minimap2"}],[223215663,{"idx":47,"name":"veger-face","tpage_name":"rublcst-vis-pris2"}],[216989763,{"idx":67,"name":"prec-leader-robe-02","tpage_name":"museum2-pris"}],[219480122,{"idx":58,"name":"inv-ygun-02","tpage_name":"progress-minimap2"}],[223215662,{"idx":46,"name":"veger-eyelid","tpage_name":"rublcst-vis-pris2"}],[216989762,{"idx":66,"name":"prec-leader-robe-01","tpage_name":"museum2-pris"}],[219480121,{"idx":57,"name":"inv-ygun-01","tpage_name":"progress-minimap2"}],[223215661,{"idx":45,"name":"veger-endpaper","tpage_name":"rublcst-vis-pris2"}],[216989761,{"idx":65,"name":"prec-leader-pants","tpage_name":"museum2-pris"}],[221904937,{"idx":41,"name":"environment-oldmetal","tpage_name":"museum4-pris2"}],[223150117,{"idx":37,"name":"jakchires-chestplate","tpage_name":"rublcst-vis-pris"}],[219480120,{"idx":56,"name":"inv-rgun-common","tpage_name":"progress-minimap2"}],[223215660,{"idx":44,"name":"veger-coatclips","tpage_name":"rublcst-vis-pris2"}],[216989760,{"idx":64,"name":"prec-leader-headshield","tpage_name":"museum2-pris"}],[219480119,{"idx":55,"name":"inv-rgun-03","tpage_name":"progress-minimap2"}],[223215659,{"idx":43,"name":"veger-coatbelt","tpage_name":"rublcst-vis-pris2"}],[216989759,{"idx":63,"name":"prec-leader-hair","tpage_name":"museum2-pris"}],[219480118,{"idx":54,"name":"inv-rgun-02","tpage_name":"progress-minimap2"}],[223215658,{"idx":42,"name":"veger-coat","tpage_name":"rublcst-vis-pris2"}],[216989758,{"idx":62,"name":"prec-leader-frontskirt","tpage_name":"museum2-pris"}],[214368270,{"idx":14,"name":"onin-idol","tpage_name":"loninsim-pris"}],[218103810,{"idx":2,"name":"time-bubble-orbiter","tpage_name":"lbbsdrp1-sprite"}],[219480117,{"idx":53,"name":"inv-rgun-01","tpage_name":"progress-minimap2"}],[223215657,{"idx":41,"name":"veger-bootstrap","tpage_name":"rublcst-vis-pris2"}],[216989757,{"idx":61,"name":"prec-leader-foreheadshield","tpage_name":"museum2-pris"}],[219480116,{"idx":52,"name":"inv-pgun-common","tpage_name":"progress-minimap2"}],[223215656,{"idx":40,"name":"veger-bootfoot","tpage_name":"rublcst-vis-pris2"}],[216989756,{"idx":60,"name":"prec-leader-face2","tpage_name":"museum2-pris"}],[214368268,{"idx":12,"name":"onin-hand","tpage_name":"loninsim-pris"}],[218103808,{"idx":0,"name":"time-bubble","tpage_name":"lbbsdrp1-sprite"}],[223150112,{"idx":32,"name":"jakchires-arm-dark","tpage_name":"rublcst-vis-pris"}],[219480115,{"idx":51,"name":"inv-pgun-03","tpage_name":"progress-minimap2"}],[223215655,{"idx":39,"name":"veger-bootbolt","tpage_name":"rublcst-vis-pris2"}],[216989755,{"idx":59,"name":"prec-leader-belt","tpage_name":"museum2-pris"}],[219480114,{"idx":50,"name":"inv-pgun-02","tpage_name":"progress-minimap2"}],[223215654,{"idx":38,"name":"veger-bookspine","tpage_name":"rublcst-vis-pris2"}],[216989754,{"idx":58,"name":"prec-leader-beard","tpage_name":"museum2-pris"}],[216072197,{"idx":5,"name":"ashelin-cgrank","tpage_name":"museum-pris2"}],[217317377,{"idx":1,"name":"fora-shrub-vine","tpage_name":"forestx-vis-shrub"}],[223150110,{"idx":30,"name":"jakc-wristband-a2","tpage_name":"rublcst-vis-pris"}],[219480113,{"idx":49,"name":"inv-pgun-01","tpage_name":"progress-minimap2"}],[223215653,{"idx":37,"name":"veger-booksides","tpage_name":"rublcst-vis-pris2"}],[216989753,{"idx":57,"name":"prec-leader-armband","tpage_name":"museum2-pris"}],[1114154,{"idx":42,"name":"hud-gunicon-02","tpage_name":"progress-minimap"}],[12320774,{"idx":6,"name":"city-ind-border-stripe-dark-01","tpage_name":"ctyindb-vis-tfrag"}],[216072196,{"idx":4,"name":"ashelin-cglogo","tpage_name":"museum-pris2"}],[217317376,{"idx":0,"name":"fora-shrub-pebbles","tpage_name":"forestx-vis-shrub"}],[219480112,{"idx":48,"name":"inv-light-shield","tpage_name":"progress-minimap2"}],[223215652,{"idx":36,"name":"veger-bookleather","tpage_name":"rublcst-vis-pris2"}],[216989752,{"idx":56,"name":"prec-leader-arm","tpage_name":"museum2-pris"}],[1114153,{"idx":41,"name":"hud-gunicon-01","tpage_name":"progress-minimap"}],[12320773,{"idx":5,"name":"city-ind-wall-noisy-border-05","tpage_name":"ctyindb-vis-tfrag"}],[219480111,{"idx":47,"name":"inv-light-regen","tpage_name":"progress-minimap2"}],[223215651,{"idx":35,"name":"king-wristband","tpage_name":"rublcst-vis-pris2"}],[216989751,{"idx":55,"name":"prec-insidemouth","tpage_name":"museum2-pris"}],[1114152,{"idx":40,"name":"hud-goldcup","tpage_name":"progress-minimap"}],[12320772,{"idx":4,"name":"city-inda-wallbase","tpage_name":"ctyindb-vis-tfrag"}],[223150107,{"idx":27,"name":"jakc-skirt","tpage_name":"rublcst-vis-pris"}],[219480110,{"idx":46,"name":"inv-light-flight","tpage_name":"progress-minimap2"}],[223215650,{"idx":34,"name":"king-wraps","tpage_name":"rublcst-vis-pris2"}],[216989750,{"idx":54,"name":"prec-handpalm","tpage_name":"museum2-pris"}],[202309633,{"idx":1,"name":"hud-sniper-button-red-01","tpage_name":"lctysnpr-minimap"}],[1114151,{"idx":39,"name":"hud-egg-glow","tpage_name":"progress-minimap"}],[12320771,{"idx":3,"name":"city-port-metal-green-main-side","tpage_name":"ctyindb-vis-tfrag"}],[223150106,{"idx":26,"name":"jakc-scarfhanging","tpage_name":"rublcst-vis-pris"}],[219480109,{"idx":45,"name":"inv-light-flash-freeze-01","tpage_name":"progress-minimap2"}],[223215649,{"idx":33,"name":"king-wrap","tpage_name":"rublcst-vis-pris2"}],[216989749,{"idx":53,"name":"prec-hand-back","tpage_name":"museum2-pris"}],[202309632,{"idx":0,"name":"hud-sniper-button-green-01","tpage_name":"lctysnpr-minimap"}],[219480108,{"idx":44,"name":"inv-items-war-amulet-03","tpage_name":"progress-minimap2"}],[223215648,{"idx":32,"name":"king-vestback","tpage_name":"rublcst-vis-pris2"}],[216989748,{"idx":52,"name":"prec-dumb-sleeve","tpage_name":"museum2-pris"}],[1114149,{"idx":37,"name":"hud-bikeicon","tpage_name":"progress-minimap"}],[12320769,{"idx":1,"name":"city-ind-metal-green-main-side","tpage_name":"ctyindb-vis-tfrag"}],[219480107,{"idx":43,"name":"inv-items-war-amulet-02","tpage_name":"progress-minimap2"}],[223215647,{"idx":31,"name":"king-vest","tpage_name":"rublcst-vis-pris2"}],[216989747,{"idx":51,"name":"prec-dumb-shirt","tpage_name":"museum2-pris"}],[12320768,{"idx":0,"name":"city-ind-black","tpage_name":"ctyindb-vis-tfrag"}],[219480106,{"idx":42,"name":"inv-items-war-amulet-01","tpage_name":"progress-minimap2"}],[223215646,{"idx":30,"name":"king-thinstrap","tpage_name":"rublcst-vis-pris2"}],[216989746,{"idx":50,"name":"prec-dumb-pants","tpage_name":"museum2-pris"}],[219480105,{"idx":41,"name":"inv-items-timemap-01","tpage_name":"progress-minimap2"}],[223215645,{"idx":29,"name":"king-teeth","tpage_name":"rublcst-vis-pris2"}],[216989745,{"idx":49,"name":"prec-dumb-helmet","tpage_name":"museum2-pris"}],[219480104,{"idx":40,"name":"inv-items-sealmar","tpage_name":"progress-minimap2"}],[223215644,{"idx":28,"name":"king-skirt-b","tpage_name":"rublcst-vis-pris2"}],[216989744,{"idx":48,"name":"errolcyber-teeth","tpage_name":"museum2-pris"}],[219480103,{"idx":39,"name":"inv-items-quant-ref-01","tpage_name":"progress-minimap2"}],[223215643,{"idx":27,"name":"king-skirt","tpage_name":"rublcst-vis-pris2"}],[216989743,{"idx":47,"name":"errolcyber-spine","tpage_name":"museum2-pris"}],[219480102,{"idx":38,"name":"inv-items-prism-01","tpage_name":"progress-minimap2"}],[223215642,{"idx":26,"name":"king-shoebottom","tpage_name":"rublcst-vis-pris2"}],[216989742,{"idx":46,"name":"errolcyber-rubberpipe-light","tpage_name":"museum2-pris"}],[223150098,{"idx":18,"name":"daxtertuft","tpage_name":"rublcst-vis-pris"}],[219480101,{"idx":37,"name":"inv-items-lighteco-01","tpage_name":"progress-minimap2"}],[223215641,{"idx":25,"name":"king-precursermetal-trimbolt","tpage_name":"rublcst-vis-pris2"}],[216989741,{"idx":45,"name":"errolcyber-rubberpipe","tpage_name":"museum2-pris"}],[223150097,{"idx":17,"name":"daxterteeth","tpage_name":"rublcst-vis-pris"}],[219480100,{"idx":36,"name":"inv-items-jetboard-02","tpage_name":"progress-minimap2"}],[223215640,{"idx":24,"name":"king-precursermetal-trim2","tpage_name":"rublcst-vis-pris2"}],[216989740,{"idx":44,"name":"errolcyber-roboeye","tpage_name":"museum2-pris"}],[219480099,{"idx":35,"name":"inv-items-jetboard-01","tpage_name":"progress-minimap2"}],[223215639,{"idx":23,"name":"king-precursermetal-trim","tpage_name":"rublcst-vis-pris2"}],[216989739,{"idx":43,"name":"errolcyber-redmetal-03","tpage_name":"museum2-pris"}],[219480098,{"idx":34,"name":"inv-items-holocube-01","tpage_name":"progress-minimap2"}],[223215638,{"idx":22,"name":"king-precursermetal-plain","tpage_name":"rublcst-vis-pris2"}],[216989738,{"idx":42,"name":"errolcyber-redmetal-02","tpage_name":"museum2-pris"}],[219480097,{"idx":33,"name":"inv-items-gatepass-01","tpage_name":"progress-minimap2"}],[223215637,{"idx":21,"name":"king-precursermetal-decor","tpage_name":"rublcst-vis-pris2"}],[216989737,{"idx":41,"name":"errolcyber-redmetal-01","tpage_name":"museum2-pris"}],[223150093,{"idx":13,"name":"daxterheadwidenew","tpage_name":"rublcst-vis-pris"}],[219480096,{"idx":32,"name":"inv-items-eco-sphere-01","tpage_name":"progress-minimap2"}],[223215636,{"idx":20,"name":"king-lgblackstrap","tpage_name":"rublcst-vis-pris2"}],[216989736,{"idx":40,"name":"errolcyber-pipes-03","tpage_name":"museum2-pris"}],[223150092,{"idx":12,"name":"daxtergoggles","tpage_name":"rublcst-vis-pris"}],[219480095,{"idx":31,"name":"inv-items-darkeco-01","tpage_name":"progress-minimap2"}],[223215635,{"idx":19,"name":"king-leg","tpage_name":"rublcst-vis-pris2"}],[216989735,{"idx":39,"name":"errolcyber-pipes-02","tpage_name":"museum2-pris"}],[219480094,{"idx":30,"name":"inv-items-cypherglyph","tpage_name":"progress-minimap2"}],[223215634,{"idx":18,"name":"king-iris","tpage_name":"rublcst-vis-pris2"}],[216989734,{"idx":38,"name":"errolcyber-pipes-01","tpage_name":"museum2-pris"}],[223150090,{"idx":10,"name":"daxterfoot","tpage_name":"rublcst-vis-pris"}],[219480093,{"idx":29,"name":"inv-items-beamgen-01","tpage_name":"progress-minimap2"}],[223215633,{"idx":17,"name":"king-horn","tpage_name":"rublcst-vis-pris2"}],[216989733,{"idx":37,"name":"errolcyber-metalgold","tpage_name":"museum2-pris"}],[219480092,{"idx":28,"name":"inv-dark-punch","tpage_name":"progress-minimap2"}],[223215632,{"idx":16,"name":"king-hand","tpage_name":"rublcst-vis-pris2"}],[216989732,{"idx":36,"name":"errolcyber-metaleyelid","tpage_name":"museum2-pris"}],[219480091,{"idx":27,"name":"inv-dark-invisible","tpage_name":"progress-minimap2"}],[223215631,{"idx":15,"name":"king-hair","tpage_name":"rublcst-vis-pris2"}],[216989731,{"idx":35,"name":"errolcyber-jointpipe","tpage_name":"museum2-pris"}],[223150087,{"idx":7,"name":"daxterbolt","tpage_name":"rublcst-vis-pris"}],[219480090,{"idx":26,"name":"inv-dark-bomb","tpage_name":"progress-minimap2"}],[223215630,{"idx":14,"name":"king-greenmetalplain","tpage_name":"rublcst-vis-pris2"}],[216989730,{"idx":34,"name":"errolcyber-insidewires","tpage_name":"museum2-pris"}],[219480089,{"idx":25,"name":"inv-dark-blast","tpage_name":"progress-minimap2"}],[223215629,{"idx":13,"name":"king-greenmetal","tpage_name":"rublcst-vis-pris2"}],[216989729,{"idx":33,"name":"errolcyber-insidemouth","tpage_name":"museum2-pris"}],[219480088,{"idx":24,"name":"inv-car-xride-02","tpage_name":"progress-minimap2"}],[223215628,{"idx":12,"name":"king-finger","tpage_name":"rublcst-vis-pris2"}],[216989728,{"idx":32,"name":"errolcyber-head-02","tpage_name":"museum2-pris"}],[223150084,{"idx":4,"name":"daxter-orange","tpage_name":"rublcst-vis-pris"}],[167313421,{"idx":13,"name":"daxterbodyshort-eix","tpage_name":"stadium-vis-pris"}],[151126081,{"idx":65,"name":"pecker-eyelid","tpage_name":"combx-pris"}],[219480087,{"idx":23,"name":"inv-car-xride-01","tpage_name":"progress-minimap2"}],[223215627,{"idx":11,"name":"king-face-01","tpage_name":"rublcst-vis-pris2"}],[216989727,{"idx":31,"name":"errolcyber-head-01","tpage_name":"museum2-pris"}],[223150083,{"idx":3,"name":"daxter-furhilite","tpage_name":"rublcst-vis-pris"}],[167313420,{"idx":12,"name":"daxterarm","tpage_name":"stadium-vis-pris"}],[151126080,{"idx":64,"name":"pecker-yellowfur","tpage_name":"combx-pris"}],[219480086,{"idx":22,"name":"inv-car-turtle-02","tpage_name":"progress-minimap2"}],[223215626,{"idx":10,"name":"king-earing","tpage_name":"rublcst-vis-pris2"}],[216989726,{"idx":30,"name":"errolcyber-hair","tpage_name":"museum2-pris"}],[223150082,{"idx":2,"name":"daxter-eyelid","tpage_name":"rublcst-vis-pris"}],[194445336,{"idx":24,"name":"jakchires-glovetop","tpage_name":"gridcst-pris"}],[165806196,{"idx":116,"name":"city-lowres-mhcity-ground-01","tpage_name":"ltowcity-tfrag"}],[167313419,{"idx":11,"name":"daxter-orange","tpage_name":"stadium-vis-pris"}],[151126079,{"idx":63,"name":"pecker-wingtop","tpage_name":"combx-pris"}],[219480085,{"idx":21,"name":"inv-car-turtle-01","tpage_name":"progress-minimap2"}],[223215625,{"idx":9,"name":"king-ear","tpage_name":"rublcst-vis-pris2"}],[216989725,{"idx":29,"name":"errolcyber-greymetal-02","tpage_name":"museum2-pris"}],[223150081,{"idx":1,"name":"bam-hairhilite","tpage_name":"rublcst-vis-pris"}],[194445335,{"idx":23,"name":"jakchires-facert","tpage_name":"gridcst-pris"}],[165806195,{"idx":115,"name":"palcab-lowres-background-desert-01","tpage_name":"ltowcity-tfrag"}],[167313418,{"idx":10,"name":"daxter-furhilite","tpage_name":"stadium-vis-pris"}],[151126078,{"idx":62,"name":"pecker-wingbottom","tpage_name":"combx-pris"}],[219480084,{"idx":20,"name":"inv-car-toad-02","tpage_name":"progress-minimap2"}],[223215624,{"idx":8,"name":"king-clip-02","tpage_name":"rublcst-vis-pris2"}],[216989724,{"idx":28,"name":"errolcyber-greymetal","tpage_name":"museum2-pris"}],[223150080,{"idx":0,"name":"bam-eyelight","tpage_name":"rublcst-vis-pris"}],[194445334,{"idx":22,"name":"jakchires-facelft","tpage_name":"gridcst-pris"}],[165806194,{"idx":114,"name":"palcab-lowres-background-hilltops-01","tpage_name":"ltowcity-tfrag"}],[167313417,{"idx":9,"name":"daxter-eyelid","tpage_name":"stadium-vis-pris"}],[151126077,{"idx":61,"name":"pecker-teeth","tpage_name":"combx-pris"}],[219480083,{"idx":19,"name":"inv-car-toad-01","tpage_name":"progress-minimap2"}],[223215623,{"idx":7,"name":"king-chest","tpage_name":"rublcst-vis-pris2"}],[216989723,{"idx":27,"name":"errolcyber-greyknobs","tpage_name":"museum2-pris"}],[219480082,{"idx":18,"name":"inv-car-snake-02","tpage_name":"progress-minimap2"}],[223215622,{"idx":6,"name":"king-bolt","tpage_name":"rublcst-vis-pris2"}],[216989722,{"idx":26,"name":"errolcyber-glovepalm","tpage_name":"museum2-pris"}],[219480081,{"idx":17,"name":"inv-car-snake-01","tpage_name":"progress-minimap2"}],[223215621,{"idx":5,"name":"king-bluemetal","tpage_name":"rublcst-vis-pris2"}],[216989721,{"idx":25,"name":"errolcyber-fingers","tpage_name":"museum2-pris"}],[219480080,{"idx":16,"name":"inv-car-scorpion-02","tpage_name":"progress-minimap2"}],[223215620,{"idx":4,"name":"king-blackskirt2","tpage_name":"rublcst-vis-pris2"}],[216989720,{"idx":24,"name":"errolcyber-earcup","tpage_name":"museum2-pris"}],[206241800,{"idx":8,"name":"mhcity-grind-strand-01","tpage_name":"lctydest-tfrag"}],[219480079,{"idx":15,"name":"inv-car-scorpion-01","tpage_name":"progress-minimap2"}],[223215619,{"idx":3,"name":"king-arm","tpage_name":"rublcst-vis-pris2"}],[216989719,{"idx":23,"name":"errolcyber-dirtymetal","tpage_name":"museum2-pris"}],[219480078,{"idx":14,"name":"inv-car-rhino-02","tpage_name":"progress-minimap2"}],[223215618,{"idx":2,"name":"environment-oldmetal","tpage_name":"rublcst-vis-pris2"}],[221970438,{"idx":6,"name":"final-beam-light","tpage_name":"precurd-sprite"}],[216989718,{"idx":22,"name":"errolcyber-chestplate","tpage_name":"museum2-pris"}],[206241798,{"idx":6,"name":"mhcity-goo-base","tpage_name":"lctydest-tfrag"}],[219480077,{"idx":13,"name":"inv-car-rhino-01","tpage_name":"progress-minimap2"}],[223215617,{"idx":1,"name":"bam-hairhilite","tpage_name":"rublcst-vis-pris2"}],[221970437,{"idx":5,"name":"final-beam-dark","tpage_name":"precurd-sprite"}],[216989717,{"idx":21,"name":"errolcyber-bluewrap","tpage_name":"museum2-pris"}],[193986576,{"idx":16,"name":"seem-pipeend","tpage_name":"templed-vis-pris2"}],[198967296,{"idx":0,"name":"errolcyber-lens","tpage_name":"desboss2-water"}],[189005856,{"idx":32,"name":"errolcyber-spine","tpage_name":"factoryd-vis-pris"}],[197722116,{"idx":4,"name":"cguard1-chestplate","tpage_name":"lfacrm2-pris"}],[208928777,{"idx":9,"name":"terraformer-metal-08","tpage_name":"precurd-vis-pris2"}],[219480076,{"idx":12,"name":"inv-car-mirage-02","tpage_name":"progress-minimap2"}],[223215616,{"idx":0,"name":"bam-eyelight","tpage_name":"rublcst-vis-pris2"}],[221970436,{"idx":4,"name":"final-beam-comb","tpage_name":"precurd-sprite"}],[216989716,{"idx":20,"name":"errolcyber-bluemetal-01","tpage_name":"museum2-pris"}],[193986575,{"idx":15,"name":"seem-headpiecetop","tpage_name":"templed-vis-pris2"}],[189005855,{"idx":31,"name":"errolcyber-rubberpipe-light","tpage_name":"factoryd-vis-pris"}],[197722115,{"idx":3,"name":"cguard1-backmetal","tpage_name":"lfacrm2-pris"}],[208928776,{"idx":8,"name":"terraformer-metal-07","tpage_name":"precurd-vis-pris2"}],[219480075,{"idx":11,"name":"inv-car-mirage-01","tpage_name":"progress-minimap2"}],[216989715,{"idx":19,"name":"errolcyber-bluedome","tpage_name":"museum2-pris"}],[189005853,{"idx":29,"name":"errolcyber-redmetal-03","tpage_name":"factoryd-vis-pris"}],[193986573,{"idx":13,"name":"seem-hand","tpage_name":"templed-vis-pris2"}],[197722113,{"idx":1,"name":"blue-gem","tpage_name":"lfacrm2-pris"}],[208928774,{"idx":6,"name":"terraformer-metal-04","tpage_name":"precurd-vis-pris2"}],[184418351,{"idx":47,"name":"rub-city-wall-main","tpage_name":"stadiuma-vis-tfrag"}],[190644251,{"idx":27,"name":"veger-shoulderplate","tpage_name":"templee-pris2"}],[170721371,{"idx":91,"name":"palcab-lorez-metal01-red-stripe","tpage_name":"lcitysml-tfrag"}],[222887968,{"idx":32,"name":"palcab-lowres-mark-shops-01","tpage_name":"lfacctyb-vis-tfrag"}],[216662068,{"idx":52,"name":"torn-vest","tpage_name":"outcast3-pris"}],[216006822,{"idx":166,"name":"onin-scarf","tpage_name":"museum-pris"}],[152240164,{"idx":36,"name":"king-finger","tpage_name":"wascast-pris2"}],[153485344,{"idx":32,"name":"mhcity-basebone","tpage_name":"mhcitya-vis-tfrag"}],[184418350,{"idx":46,"name":"city-bridgeseam","tpage_name":"stadiuma-vis-tfrag"}],[190644250,{"idx":26,"name":"veger-shoebottom","tpage_name":"templee-pris2"}],[170721370,{"idx":90,"name":"palcab-lorez-plates01","tpage_name":"lcitysml-tfrag"}],[222887967,{"idx":31,"name":"palcab-lowres-mark-roof-rim-01","tpage_name":"lfacctyb-vis-tfrag"}],[216662067,{"idx":51,"name":"torn-teeth-01","tpage_name":"outcast3-pris"}],[216006821,{"idx":165,"name":"onin-rings2","tpage_name":"museum-pris"}],[184418349,{"idx":45,"name":"city-metal-strip-01","tpage_name":"stadiuma-vis-tfrag"}],[190644249,{"idx":25,"name":"veger-scarf","tpage_name":"templee-pris2"}],[170721369,{"idx":89,"name":"palcab-lorez-metal01-red","tpage_name":"lcitysml-tfrag"}],[222887966,{"idx":30,"name":"city-lowres-ind-wall-06","tpage_name":"lfacctyb-vis-tfrag"}],[216662066,{"idx":50,"name":"torn-shoe-02","tpage_name":"outcast3-pris"}],[216006820,{"idx":164,"name":"onin-rings","tpage_name":"museum-pris"}],[184418348,{"idx":44,"name":"rub-metal-green-main","tpage_name":"stadiuma-vis-tfrag"}],[190644248,{"idx":24,"name":"veger-parchment","tpage_name":"templee-pris2"}],[170721368,{"idx":88,"name":"palcab-lorez-metal02","tpage_name":"lcitysml-tfrag"}],[222887965,{"idx":29,"name":"city-lowres-ind-wall-05","tpage_name":"lfacctyb-vis-tfrag"}],[216662065,{"idx":49,"name":"torn-shoe","tpage_name":"outcast3-pris"}],[216006819,{"idx":163,"name":"onin-neck","tpage_name":"museum-pris"}],[120324097,{"idx":1,"name":"ctydecoy-glass-01","tpage_name":"lctyhijk-water"}],[184418347,{"idx":43,"name":"rub-citywall-frame","tpage_name":"stadiuma-vis-tfrag"}],[190644247,{"idx":23,"name":"veger-pants","tpage_name":"templee-pris2"}],[170721367,{"idx":87,"name":"palcab-lowres-background-trees2","tpage_name":"lcitysml-tfrag"}],[222887964,{"idx":28,"name":"city-lowres-ind-wall-08","tpage_name":"lfacctyb-vis-tfrag"}],[216662064,{"idx":48,"name":"torn-scarf","tpage_name":"outcast3-pris"}],[216006818,{"idx":162,"name":"onin-mat","tpage_name":"museum-pris"}],[184418346,{"idx":42,"name":"rub-roof-support","tpage_name":"stadiuma-vis-tfrag"}],[190644246,{"idx":22,"name":"veger-pages","tpage_name":"templee-pris2"}],[170721366,{"idx":86,"name":"palcab-lowres-background-trees-edge","tpage_name":"lcitysml-tfrag"}],[222887963,{"idx":27,"name":"city-lowres-ind-wall-07","tpage_name":"lfacctyb-vis-tfrag"}],[216662063,{"idx":47,"name":"torn-pipe","tpage_name":"outcast3-pris"}],[216006817,{"idx":161,"name":"onin-idoleye","tpage_name":"museum-pris"}],[184418345,{"idx":41,"name":"city-lowres-mhcity-wall-03","tpage_name":"stadiuma-vis-tfrag"}],[190644245,{"idx":21,"name":"veger-legwraps","tpage_name":"templee-pris2"}],[170721365,{"idx":85,"name":"palcab-lorez-asphalt01","tpage_name":"lcitysml-tfrag"}],[222887962,{"idx":26,"name":"city-lowres-ind-wall-03","tpage_name":"lfacctyb-vis-tfrag"}],[216662062,{"idx":46,"name":"torn-mouth","tpage_name":"outcast3-pris"}],[216006816,{"idx":160,"name":"onin-idol","tpage_name":"museum-pris"}],[152240158,{"idx":30,"name":"king-bolt","tpage_name":"wascast-pris2"}],[153485338,{"idx":26,"name":"mhcity-bigwall","tpage_name":"mhcitya-vis-tfrag"}],[184418344,{"idx":40,"name":"city-lowres-mhcity-wall-05","tpage_name":"stadiuma-vis-tfrag"}],[190644244,{"idx":20,"name":"veger-iris","tpage_name":"templee-pris2"}],[170721364,{"idx":84,"name":"city-lowres-mhcity-wall-03","tpage_name":"lcitysml-tfrag"}],[222887961,{"idx":25,"name":"city-lowres-port-roof","tpage_name":"lfacctyb-vis-tfrag"}],[216662061,{"idx":45,"name":"torn-metal2","tpage_name":"outcast3-pris"}],[216006815,{"idx":159,"name":"onin-handpalm","tpage_name":"museum-pris"}],[152240157,{"idx":29,"name":"king-bluemetal","tpage_name":"wascast-pris2"}],[153485337,{"idx":25,"name":"mhcity-base-02","tpage_name":"mhcitya-vis-tfrag"}],[184418343,{"idx":39,"name":"city-lowres-mhcity-wall-06","tpage_name":"stadiuma-vis-tfrag"}],[190644243,{"idx":19,"name":"veger-hand","tpage_name":"templee-pris2"}],[170721363,{"idx":83,"name":"common-black","tpage_name":"lcitysml-tfrag"}],[222887960,{"idx":24,"name":"city-lowres-ind-wall-01","tpage_name":"lfacctyb-vis-tfrag"}],[216662060,{"idx":44,"name":"torn-legshield","tpage_name":"outcast3-pris"}],[216006814,{"idx":158,"name":"onin-hand","tpage_name":"museum-pris"}],[184418342,{"idx":38,"name":"city-lowres-mhcity-wall-02","tpage_name":"stadiuma-vis-tfrag"}],[190644242,{"idx":18,"name":"veger-hair","tpage_name":"templee-pris2"}],[171966542,{"idx":78,"name":"flamer-wing","tpage_name":"templea-vis-pris2"}],[170721362,{"idx":82,"name":"city-lowres-mhcity-wall-05","tpage_name":"lcitysml-tfrag"}],[222887959,{"idx":23,"name":"palcab-lowres-mark-roof-01","tpage_name":"lfacctyb-vis-tfrag"}],[216662059,{"idx":43,"name":"torn-handle-01","tpage_name":"outcast3-pris"}],[216006813,{"idx":157,"name":"onin-hair","tpage_name":"museum-pris"}],[184418341,{"idx":37,"name":"ctyslumc-window-panes-LOW","tpage_name":"stadiuma-vis-tfrag"}],[190644241,{"idx":17,"name":"veger-gold","tpage_name":"templee-pris2"}],[195624961,{"idx":1,"name":"windshield01","tpage_name":"towercst-water"}],[171966541,{"idx":77,"name":"spidereye-environment","tpage_name":"templea-vis-pris2"}],[170721361,{"idx":81,"name":"city-lowres-mhcity-wall-06","tpage_name":"lcitysml-tfrag"}],[222887958,{"idx":22,"name":"city-lowres-fort-red","tpage_name":"lfacctyb-vis-tfrag"}],[216662058,{"idx":42,"name":"torn-hair-02","tpage_name":"outcast3-pris"}],[216006812,{"idx":156,"name":"onin-finger","tpage_name":"museum-pris"}],[184418340,{"idx":36,"name":"city-tile-LOW","tpage_name":"stadiuma-vis-tfrag"}],[190644240,{"idx":16,"name":"veger-fingertop","tpage_name":"templee-pris2"}],[195624960,{"idx":0,"name":"sig-flatfangs","tpage_name":"towercst-water"}],[171966540,{"idx":76,"name":"spidereye","tpage_name":"templea-vis-pris2"}],[170721360,{"idx":80,"name":"city-lowres-mhcity-detower-02","tpage_name":"lcitysml-tfrag"}],[222887957,{"idx":21,"name":"city-lowres-fort-yellow","tpage_name":"lfacctyb-vis-tfrag"}],[216662057,{"idx":41,"name":"torn-hair-01","tpage_name":"outcast3-pris"}],[216006811,{"idx":155,"name":"onin-face","tpage_name":"museum-pris"}],[154664963,{"idx":3,"name":"hud-dmrobot-target-02","tpage_name":"wascityb-minimap"}],[184418339,{"idx":35,"name":"cityslumc-awning-LOW","tpage_name":"stadiuma-vis-tfrag"}],[190644239,{"idx":15,"name":"veger-fingerbottom","tpage_name":"templee-pris2"}],[171966539,{"idx":75,"name":"spider-tusk","tpage_name":"templea-vis-pris2"}],[170721359,{"idx":79,"name":"city-lowres-mhcity-detower-01","tpage_name":"lcitysml-tfrag"}],[222887956,{"idx":20,"name":"city-lowres-ind-wall-02","tpage_name":"lfacctyb-vis-tfrag"}],[216662056,{"idx":40,"name":"torn-gunbarrel-02","tpage_name":"outcast3-pris"}],[216006810,{"idx":154,"name":"onin-eyelid","tpage_name":"museum-pris"}],[154664962,{"idx":2,"name":"hud-dmrobot-target-01","tpage_name":"wascityb-minimap"}],[184418338,{"idx":34,"name":"cityslumc-purple-plain","tpage_name":"stadiuma-vis-tfrag"}],[190644238,{"idx":14,"name":"veger-face","tpage_name":"templee-pris2"}],[171966538,{"idx":74,"name":"spider-leg","tpage_name":"templea-vis-pris2"}],[170721358,{"idx":78,"name":"city-lowres-mhcity-wall-01","tpage_name":"lcitysml-tfrag"}],[162988050,{"idx":18,"name":"rail-light-yellow-small","tpage_name":"railb-tfrag"}],[222887955,{"idx":19,"name":"palcab-lowres-stadium-canopy","tpage_name":"lfacctyb-vis-tfrag"}],[216662055,{"idx":39,"name":"torn-gunbarrel","tpage_name":"outcast3-pris"}],[216006809,{"idx":153,"name":"onin-eye","tpage_name":"museum-pris"}],[154664961,{"idx":1,"name":"wascity-turret-hud-big-arrow-01","tpage_name":"wascityb-minimap"}],[184418337,{"idx":33,"name":"ctyslumc-light-blue","tpage_name":"stadiuma-vis-tfrag"}],[190644237,{"idx":13,"name":"veger-eyelid","tpage_name":"templee-pris2"}],[171966537,{"idx":73,"name":"spider-emblem","tpage_name":"templea-vis-pris2"}],[170721357,{"idx":77,"name":"city-lowres-mhcity-wall-02","tpage_name":"lcitysml-tfrag"}],[222887954,{"idx":18,"name":"palcab-steel-lores","tpage_name":"lfacctyb-vis-tfrag"}],[216662054,{"idx":38,"name":"torn-footleather","tpage_name":"outcast3-pris"}],[216006808,{"idx":152,"name":"onin-chain","tpage_name":"museum-pris"}],[137232440,{"idx":56,"name":"yellowcard01","tpage_name":"citycast-pris"}],[154664960,{"idx":0,"name":"wascity-turret-hud-arrow-01","tpage_name":"wascityb-minimap"}],[184418336,{"idx":32,"name":"cityslumc-purple-column","tpage_name":"stadiuma-vis-tfrag"}],[190644236,{"idx":12,"name":"veger-endpaper","tpage_name":"templee-pris2"}],[171966536,{"idx":72,"name":"spider-allfur-med","tpage_name":"templea-vis-pris2"}],[170721356,{"idx":76,"name":"citywide-hangmetal","tpage_name":"lcitysml-tfrag"}],[222887953,{"idx":17,"name":"city-lowres-ind-wall-04","tpage_name":"lfacctyb-vis-tfrag"}],[216662053,{"idx":37,"name":"torn-finger","tpage_name":"outcast3-pris"}],[216006807,{"idx":151,"name":"onin-braclet","tpage_name":"museum-pris"}],[222887952,{"idx":16,"name":"palcab-lowres-mark-roof-02","tpage_name":"lfacctyb-vis-tfrag"}],[216662052,{"idx":36,"name":"torn-face-right","tpage_name":"outcast3-pris"}],[216006806,{"idx":150,"name":"onin-bowlhead","tpage_name":"museum-pris"}],[49283138,{"idx":66,"name":"sew-wallswitch-metal-02","tpage_name":"sewd-vis-pris"}],[67960838,{"idx":6,"name":"wang_4","tpage_name":"wasintro-hfrag"}],[171966534,{"idx":70,"name":"grunt-skin-03","tpage_name":"templea-vis-pris2"}],[190644234,{"idx":10,"name":"veger-coatbelt","tpage_name":"templee-pris2"}],[170721354,{"idx":74,"name":"palace-break-girder01","tpage_name":"lcitysml-tfrag"}],[222887951,{"idx":15,"name":"palcab-pipe-hoze","tpage_name":"lfacctyb-vis-tfrag"}],[216662051,{"idx":35,"name":"torn-face","tpage_name":"outcast3-pris"}],[216006805,{"idx":149,"name":"onin-arm","tpage_name":"museum-pris"}],[216072324,{"idx":132,"name":"seem-uppertorso","tpage_name":"museum-pris2"}],[216072323,{"idx":131,"name":"seem-teeth","tpage_name":"museum-pris2"}],[216072322,{"idx":130,"name":"seem-straps","tpage_name":"museum-pris2"}],[216072321,{"idx":129,"name":"seem-skirt-small","tpage_name":"museum-pris2"}],[216072320,{"idx":128,"name":"seem-skirt","tpage_name":"museum-pris2"}],[216072319,{"idx":127,"name":"seem-precmetal-plain","tpage_name":"museum-pris2"}],[223805537,{"idx":97,"name":"crocadog-lowerbody-01","tpage_name":"museum3b-pris"}],[159383554,{"idx":2,"name":"daxter-eyelid","tpage_name":"slumbset-pris"}],[198705185,{"idx":33,"name":"sig2-metal-01","tpage_name":"lblowcst-pris"}],[208666625,{"idx":1,"name":"hud-gladiator","tpage_name":"deschase-minimap"}],[155123749,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"mhctycst-pris"}],[216072318,{"idx":126,"name":"seem-precmetal-edge","tpage_name":"museum-pris2"}],[223805536,{"idx":96,"name":"crocadog-insidemouth","tpage_name":"museum3b-pris"}],[211025924,{"idx":4,"name":"wascitya-airlock-door","tpage_name":"desjump-tfrag"}],[159383553,{"idx":1,"name":"bam-hairhilite","tpage_name":"slumbset-pris"}],[198705184,{"idx":32,"name":"sig2-lens","tpage_name":"lblowcst-pris"}],[208666624,{"idx":0,"name":"hud-marauder-vehicle","tpage_name":"deschase-minimap"}],[216072317,{"idx":125,"name":"seem-precmetal-chestplate-01","tpage_name":"museum-pris2"}],[216072316,{"idx":124,"name":"seem-pipes-02","tpage_name":"museum-pris2"}],[197722124,{"idx":12,"name":"environment-oldmetal","tpage_name":"lfacrm2-pris"}],[193986584,{"idx":24,"name":"seem-straps","tpage_name":"templed-vis-pris2"}],[211353602,{"idx":2,"name":"tow-eggside-01","tpage_name":"towercst-alpha"}],[216072315,{"idx":123,"name":"seem-pipes-01","tpage_name":"museum-pris2"}],[197722123,{"idx":11,"name":"cguardgame-shoebottom","tpage_name":"lfacrm2-pris"}],[193986583,{"idx":23,"name":"seem-skirt-small","tpage_name":"templed-vis-pris2"}],[211353601,{"idx":1,"name":"tow-eggtop-01","tpage_name":"towercst-alpha"}],[216072314,{"idx":122,"name":"seem-pipeend","tpage_name":"museum-pris2"}],[197722122,{"idx":10,"name":"cguardgame-metallight-01small","tpage_name":"lfacrm2-pris"}],[193986582,{"idx":22,"name":"seem-skirt","tpage_name":"templed-vis-pris2"}],[211353600,{"idx":0,"name":"tow-eggcase-01","tpage_name":"towercst-alpha"}],[216072313,{"idx":121,"name":"seem-headpiecetop","tpage_name":"museum-pris2"}],[170131457,{"idx":1,"name":"bam-hairhilite","tpage_name":"outrocst-pris"}],[216072312,{"idx":120,"name":"seem-headgearback","tpage_name":"museum-pris2"}],[216072311,{"idx":119,"name":"seem-hand","tpage_name":"museum-pris2"}],[216072308,{"idx":116,"name":"seem-eyelid","tpage_name":"museum-pris2"}],[216072307,{"idx":115,"name":"seem-eye","tpage_name":"museum-pris2"}],[216072306,{"idx":114,"name":"seem-ear","tpage_name":"museum-pris2"}],[195559492,{"idx":68,"name":"torn-face-right","tpage_name":"towercst-pris2"}],[216727552,{"idx":0,"name":"keira-mask","tpage_name":"outcast3-water"}],[140378154,{"idx":42,"name":"jakchires-eye","tpage_name":"minee-pris"}],[146604054,{"idx":22,"name":"daxterfoot","tpage_name":"lforplnt-vis-pris"}],[216072305,{"idx":113,"name":"seem-boottoe","tpage_name":"museum-pris2"}],[216072304,{"idx":112,"name":"seem-bootmet","tpage_name":"museum-pris2"}],[216072303,{"idx":111,"name":"seem-bootlower","tpage_name":"museum-pris2"}],[216072302,{"idx":110,"name":"seem-bootleg","tpage_name":"museum-pris2"}],[216072301,{"idx":109,"name":"seem-bootbottom","tpage_name":"museum-pris2"}],[216072300,{"idx":108,"name":"seem-arm","tpage_name":"museum-pris2"}],[216072299,{"idx":107,"name":"samosbird-wing","tpage_name":"museum-pris2"}],[216072298,{"idx":106,"name":"samosbird-plume","tpage_name":"museum-pris2"}],[216072297,{"idx":105,"name":"samosbird-eye","tpage_name":"museum-pris2"}],[216072296,{"idx":104,"name":"samosbird-body","tpage_name":"museum-pris2"}],[216072295,{"idx":103,"name":"samosbird-beak","tpage_name":"museum-pris2"}],[216072294,{"idx":102,"name":"samos-vest","tpage_name":"museum-pris2"}],[216072293,{"idx":101,"name":"samos-teeth2","tpage_name":"museum-pris2"}],[216072292,{"idx":100,"name":"samos-strap","tpage_name":"museum-pris2"}],[216072291,{"idx":99,"name":"samos-metal","tpage_name":"museum-pris2"}],[216072290,{"idx":98,"name":"samos-log-03","tpage_name":"museum-pris2"}],[216072289,{"idx":97,"name":"samos-log-02","tpage_name":"museum-pris2"}],[216072288,{"idx":96,"name":"samos-log-01","tpage_name":"museum-pris2"}],[216072287,{"idx":95,"name":"samos-lens","tpage_name":"museum-pris2"}],[208338970,{"idx":26,"name":"errolcyber-metalgold","tpage_name":"deserrol-pris"}],[216072286,{"idx":94,"name":"samos-leaf","tpage_name":"museum-pris2"}],[208338969,{"idx":25,"name":"errolcyber-metaleyelid","tpage_name":"deserrol-pris"}],[216072285,{"idx":93,"name":"samos-helmet","tpage_name":"museum-pris2"}],[203292673,{"idx":1,"name":"fan-blade","tpage_name":"factorya-sprite"}],[208338968,{"idx":24,"name":"errolcyber-jointpipe","tpage_name":"deserrol-pris"}],[216072284,{"idx":92,"name":"samos-hair","tpage_name":"museum-pris2"}],[203292672,{"idx":0,"name":"dust-sparkle","tpage_name":"factorya-sprite"}],[208338967,{"idx":23,"name":"errolcyber-insidewires","tpage_name":"deserrol-pris"}],[216072283,{"idx":91,"name":"samos-finger-01","tpage_name":"museum-pris2"}],[208338966,{"idx":22,"name":"errolcyber-insidemouth","tpage_name":"deserrol-pris"}],[223346692,{"idx":4,"name":"rub-elec-switch-light-on-orange","tpage_name":"lpattack-vis-tfrag"}],[216072282,{"idx":90,"name":"samos-face","tpage_name":"museum-pris2"}],[208338965,{"idx":21,"name":"errolcyber-head-02","tpage_name":"deserrol-pris"}],[223346691,{"idx":3,"name":"rub-elec-switch-pole-01","tpage_name":"lpattack-vis-tfrag"}],[223346690,{"idx":2,"name":"rub-wall-gen-03","tpage_name":"lpattack-vis-tfrag"}],[208338963,{"idx":19,"name":"errolcyber-hair","tpage_name":"deserrol-pris"}],[223346689,{"idx":1,"name":"rub-elec-switch-panel-01","tpage_name":"lpattack-vis-tfrag"}],[208338962,{"idx":18,"name":"errolcyber-greymetal-02","tpage_name":"deserrol-pris"}],[223346688,{"idx":0,"name":"rub-elec-switch-blue-paint-01","tpage_name":"lpattack-vis-tfrag"}],[208338961,{"idx":17,"name":"errolcyber-greymetal","tpage_name":"deserrol-pris"}],[208338960,{"idx":16,"name":"errolcyber-greyknobs","tpage_name":"deserrol-pris"}],[154796084,{"idx":52,"name":"jakchires-teeth","tpage_name":"ljakndax-pris"}],[208338959,{"idx":15,"name":"errolcyber-glovepalm","tpage_name":"deserrol-pris"}],[154796083,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"ljakndax-pris"}],[208338958,{"idx":14,"name":"errolcyber-fingers","tpage_name":"deserrol-pris"}],[208338957,{"idx":13,"name":"errolcyber-earcup","tpage_name":"deserrol-pris"}],[206241796,{"idx":4,"name":"mhcity-vein-01","tpage_name":"lctydest-tfrag"}],[188809276,{"idx":60,"name":"facc-redmetal-01-hitweak","tpage_name":"factoryd-vis-tfrag"}],[170131576,{"idx":120,"name":"pecker-yellowfur","tpage_name":"outrocst-pris"}],[208338956,{"idx":12,"name":"errolcyber-dirtymetal","tpage_name":"deserrol-pris"}],[206241795,{"idx":3,"name":"mhcity-grunt-egg-03","tpage_name":"lctydest-tfrag"}],[188809275,{"idx":59,"name":"facd-wall-girders-01-hitweak","tpage_name":"factoryd-vis-tfrag"}],[170131575,{"idx":119,"name":"pecker-wingtop","tpage_name":"outrocst-pris"}],[208338955,{"idx":11,"name":"errolcyber-chestplate","tpage_name":"deserrol-pris"}],[208338954,{"idx":10,"name":"errolcyber-bluewrap","tpage_name":"deserrol-pris"}],[208338953,{"idx":9,"name":"errolcyber-bluemetal-01","tpage_name":"deserrol-pris"}],[151060537,{"idx":57,"name":"spydroid-light-small","tpage_name":"factoryc-vis-pris"}],[154796077,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"ljakndax-pris"}],[208338952,{"idx":8,"name":"errolcyber-bluedome","tpage_name":"deserrol-pris"}],[67043349,{"idx":21,"name":"vinroom-small-monitor-04","tpage_name":"vinroom-sprite"}],[62062629,{"idx":37,"name":"flying-bird-10","tpage_name":"wascityb-sprite"}],[49610829,{"idx":77,"name":"sewer-yellow-light-01","tpage_name":"sewf-vis-tfrag"}],[208338951,{"idx":7,"name":"errolcyber-bigshoulder","tpage_name":"deserrol-pris"}],[151060535,{"idx":55,"name":"spydroid-leg-grey-end","tpage_name":"factoryc-vis-pris"}],[154796075,{"idx":43,"name":"jakchires-horn","tpage_name":"ljakndax-pris"}],[208338950,{"idx":6,"name":"errolcyber-bighand-01","tpage_name":"deserrol-pris"}],[151060534,{"idx":54,"name":"spydroid-leg-grey","tpage_name":"factoryc-vis-pris"}],[154796074,{"idx":42,"name":"jakchires-hair","tpage_name":"ljakndax-pris"}],[208338949,{"idx":5,"name":"errocyber-faceflesh","tpage_name":"deserrol-pris"}],[208338948,{"idx":4,"name":"errocyber-eyelid","tpage_name":"deserrol-pris"}],[208338947,{"idx":3,"name":"errocyber-eye","tpage_name":"deserrol-pris"}],[208338946,{"idx":2,"name":"environment-oldmetal","tpage_name":"deserrol-pris"}],[208338945,{"idx":1,"name":"bam-hairhilite","tpage_name":"deserrol-pris"}],[8716348,{"idx":60,"name":"baron-neon-white-a","tpage_name":"ctysluma-sprite"}],[208338944,{"idx":0,"name":"bam-eyelight","tpage_name":"deserrol-pris"}],[8716347,{"idx":59,"name":"baron-neon-triangle-a-on","tpage_name":"ctysluma-sprite"}],[8716346,{"idx":58,"name":"baron-neon-triangle-a","tpage_name":"ctysluma-sprite"}],[8716345,{"idx":57,"name":"baron-neon-skull-main-on","tpage_name":"ctysluma-sprite"}],[8716344,{"idx":56,"name":"baron-neon-skull-main","tpage_name":"ctysluma-sprite"}],[198705175,{"idx":23,"name":"sig2-glove","tpage_name":"lblowcst-pris"}],[170197022,{"idx":30,"name":"bam-hairhilite","tpage_name":"outrocst-pris2"}],[171442202,{"idx":26,"name":"temple_sandstone_trim01","tpage_name":"templea-vis-tfrag"}],[173932562,{"idx":18,"name":"sig-horn","tpage_name":"ltowerb-vis-pris2"}],[216006826,{"idx":170,"name":"onin-toe","tpage_name":"museum-pris"}],[216006825,{"idx":169,"name":"onin-teeth","tpage_name":"museum-pris"}],[152240167,{"idx":39,"name":"king-hair","tpage_name":"wascast-pris2"}],[153485347,{"idx":35,"name":"mhcity-toadstool-vein-01","tpage_name":"mhcitya-vis-tfrag"}],[216006824,{"idx":168,"name":"onin-skirt","tpage_name":"museum-pris"}],[216006823,{"idx":167,"name":"onin-shirt","tpage_name":"museum-pris"}],[216006801,{"idx":145,"name":"klever-widebrownstrap","tpage_name":"museum-pris"}],[184418330,{"idx":26,"name":"rub-butress-metal-02","tpage_name":"stadiuma-vis-tfrag"}],[171966530,{"idx":66,"name":"grunt-hose","tpage_name":"templea-vis-pris2"}],[190644230,{"idx":6,"name":"veger-bootbolt","tpage_name":"templee-pris2"}],[170721350,{"idx":70,"name":"t-citywide-wall-tile-01","tpage_name":"lcitysml-tfrag"}],[216006800,{"idx":144,"name":"klever-undershirt","tpage_name":"museum-pris"}],[184418329,{"idx":25,"name":"rub-butress-metal-01","tpage_name":"stadiuma-vis-tfrag"}],[171966529,{"idx":65,"name":"grunt-gem-01","tpage_name":"templea-vis-pris2"}],[190644229,{"idx":5,"name":"veger-bookspine","tpage_name":"templee-pris2"}],[170721349,{"idx":69,"name":"city-lowres-damaged-01","tpage_name":"lcitysml-tfrag"}],[216006799,{"idx":143,"name":"klever-thighs","tpage_name":"museum-pris"}],[184418328,{"idx":24,"name":"rub-supportmetall","tpage_name":"stadiuma-vis-tfrag"}],[171966528,{"idx":64,"name":"grunt-eye-01","tpage_name":"templea-vis-pris2"}],[190644228,{"idx":4,"name":"veger-booksides","tpage_name":"templee-pris2"}],[170721348,{"idx":68,"name":"city-lowres-newslums-stripe-01","tpage_name":"lcitysml-tfrag"}],[216006798,{"idx":142,"name":"klever-skirtlight","tpage_name":"museum-pris"}],[216006797,{"idx":141,"name":"klever-skirtdark","tpage_name":"museum-pris"}],[121110639,{"idx":111,"name":"hip-map3","tpage_name":"hiphog-vis-tfrag"}],[152240139,{"idx":11,"name":"seem-face","tpage_name":"wascast-pris2"}],[153485319,{"idx":7,"name":"mhcity-grunt-egg-metal-01","tpage_name":"mhcitya-vis-tfrag"}],[184418326,{"idx":22,"name":"rub-endblocks","tpage_name":"stadiuma-vis-tfrag"}],[190644226,{"idx":2,"name":"environment-oldmetal","tpage_name":"templee-pris2"}],[170721346,{"idx":66,"name":"city-lowres-newslums-stripe-02","tpage_name":"lcitysml-tfrag"}],[195821580,{"idx":12,"name":"mech-flame","tpage_name":"factoryd-sprite"}],[216006796,{"idx":140,"name":"klever-shoebottom","tpage_name":"museum-pris"}],[184418325,{"idx":21,"name":"rub-stone-05","tpage_name":"stadiuma-vis-tfrag"}],[190644225,{"idx":1,"name":"bam-hairhilite","tpage_name":"templee-pris2"}],[170721345,{"idx":65,"name":"t-strip-lo-palsup-danger2","tpage_name":"lcitysml-tfrag"}],[195821579,{"idx":11,"name":"glass-shard-04","tpage_name":"factoryd-sprite"}],[216006795,{"idx":139,"name":"klever-shoe","tpage_name":"museum-pris"}],[184418324,{"idx":20,"name":"rub-citywall","tpage_name":"stadiuma-vis-tfrag"}],[190644224,{"idx":0,"name":"bam-eyelight","tpage_name":"templee-pris2"}],[170721344,{"idx":64,"name":"t-strip-lo-palsup-danger1","tpage_name":"lcitysml-tfrag"}],[194445348,{"idx":36,"name":"daxter-eyelid","tpage_name":"gridcst-pris"}],[175767648,{"idx":96,"name":"prec-insidemouth","tpage_name":"loutro-pris"}],[195821578,{"idx":10,"name":"glass-shard-03","tpage_name":"factoryd-sprite"}],[216006794,{"idx":138,"name":"klever-mustache","tpage_name":"museum-pris"}],[184418323,{"idx":19,"name":"rub-city-wall-frame","tpage_name":"stadiuma-vis-tfrag"}],[170721343,{"idx":63,"name":"t-strip-lo-palsup-panel-5","tpage_name":"lcitysml-tfrag"}],[187105317,{"idx":37,"name":"desw-wall-light-03","tpage_name":"deswalk-vis-tfrag"}],[195821577,{"idx":9,"name":"glass-shard-02","tpage_name":"factoryd-sprite"}],[216006793,{"idx":137,"name":"klever-horn","tpage_name":"museum-pris"}],[184418322,{"idx":18,"name":"rub-wall-trim","tpage_name":"stadiuma-vis-tfrag"}],[170721342,{"idx":62,"name":"t-strip-lo-palsup-panel-4","tpage_name":"lcitysml-tfrag"}],[187105316,{"idx":36,"name":"desw-wall-light-02","tpage_name":"deswalk-vis-tfrag"}],[195821576,{"idx":8,"name":"glass-shard-01","tpage_name":"factoryd-sprite"}],[216006792,{"idx":136,"name":"klever-handwrap","tpage_name":"museum-pris"}],[187105315,{"idx":35,"name":"dk-eco-vent-side-01","tpage_name":"deswalk-vis-tfrag"}],[195821575,{"idx":7,"name":"dust-sparkle","tpage_name":"factoryd-sprite"}],[216006791,{"idx":135,"name":"klever-hand","tpage_name":"museum-pris"}],[184418320,{"idx":16,"name":"stdm-cobble-floor-01","tpage_name":"stadiuma-vis-tfrag"}],[170721340,{"idx":60,"name":"t-strip-lo-palsup-panel-2","tpage_name":"lcitysml-tfrag"}],[187105314,{"idx":34,"name":"dk-eco-vent-glow-01","tpage_name":"deswalk-vis-tfrag"}],[195821574,{"idx":6,"name":"ceiling-dust","tpage_name":"factoryd-sprite"}],[216006790,{"idx":134,"name":"klever-hair","tpage_name":"museum-pris"}],[184418319,{"idx":15,"name":"rub-wall-gen-01","tpage_name":"stadiuma-vis-tfrag"}],[170721339,{"idx":59,"name":"t-strip-lo-palsup-panel-1","tpage_name":"lcitysml-tfrag"}],[187105313,{"idx":33,"name":"lt-eco-vent-side-01","tpage_name":"deswalk-vis-tfrag"}],[195821573,{"idx":5,"name":"errolbomb-target-supr-ring-01","tpage_name":"factoryd-sprite"}],[216006789,{"idx":133,"name":"klever-gunmetal-05","tpage_name":"museum-pris"}],[187105312,{"idx":32,"name":"lt-eco-vent-blue-01","tpage_name":"deswalk-vis-tfrag"}],[195821572,{"idx":4,"name":"errolbomb-target-supr-01","tpage_name":"factoryd-sprite"}],[216006788,{"idx":132,"name":"klever-gunmetal-04","tpage_name":"museum-pris"}],[184418317,{"idx":13,"name":"stdm-trim-02","tpage_name":"stadiuma-vis-tfrag"}],[188153857,{"idx":1,"name":"des-rock-shrub-01","tpage_name":"desertf-vis-shrub"}],[170721337,{"idx":57,"name":"palcab-lowres-background-mount-build-03","tpage_name":"lcitysml-tfrag"}],[195821571,{"idx":3,"name":"errolbomb-target-reg-corner-01","tpage_name":"factoryd-sprite"}],[216006787,{"idx":131,"name":"klever-gunmetal-03","tpage_name":"museum-pris"}],[184418316,{"idx":12,"name":"rub-marble-floor-01-hitweak","tpage_name":"stadiuma-vis-tfrag"}],[188153856,{"idx":0,"name":"des-shrub-pebbles","tpage_name":"desertf-vis-shrub"}],[170721336,{"idx":56,"name":"palcab-lowres-background-mount-build-02","tpage_name":"lcitysml-tfrag"}],[195821570,{"idx":2,"name":"errolbomb-target-reg-01","tpage_name":"factoryd-sprite"}],[216006786,{"idx":130,"name":"klever-gunmetal-02","tpage_name":"museum-pris"}],[184418315,{"idx":11,"name":"stdm-wall-03","tpage_name":"stadiuma-vis-tfrag"}],[170721335,{"idx":55,"name":"palcab-lowres-background-mount-build-01","tpage_name":"lcitysml-tfrag"}],[195821569,{"idx":1,"name":"errolbomb-target-indicator-arrow-01","tpage_name":"factoryd-sprite"}],[216006785,{"idx":129,"name":"klever-gunmetal-01","tpage_name":"museum-pris"}],[184418314,{"idx":10,"name":"stdm-wall-04","tpage_name":"stadiuma-vis-tfrag"}],[170721334,{"idx":54,"name":"t-palshaft-plate01","tpage_name":"lcitysml-tfrag"}],[195493889,{"idx":1,"name":"bam-hairhilite","tpage_name":"towercst-pris"}],[188022809,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"lvincst-pris"}],[194248709,{"idx":5,"name":"neo-wasp-eye","tpage_name":"lprecurc-vis-pris"}],[195821568,{"idx":0,"name":"errolbomb-target-dot-01","tpage_name":"factoryd-sprite"}],[216006784,{"idx":128,"name":"klever-fingertop","tpage_name":"museum-pris"}],[184418313,{"idx":9,"name":"rub-stad-brick","tpage_name":"stadiuma-vis-tfrag"}],[170721333,{"idx":53,"name":"t-citywide-met-wall-02","tpage_name":"lcitysml-tfrag"}],[195493888,{"idx":0,"name":"bam-eyelight","tpage_name":"towercst-pris"}],[188022808,{"idx":24,"name":"jakc-scarf","tpage_name":"lvincst-pris"}],[194248708,{"idx":4,"name":"neo-wasp-dark-brown","tpage_name":"lprecurc-vis-pris"}],[216006783,{"idx":127,"name":"klever-fingerbottom","tpage_name":"museum-pris"}],[184418312,{"idx":8,"name":"citywide-stadium-lightbank","tpage_name":"stadiuma-vis-tfrag"}],[170721332,{"idx":52,"name":"t-citywide-red-met-01","tpage_name":"lcitysml-tfrag"}],[188022807,{"idx":23,"name":"jakc-lens","tpage_name":"lvincst-pris"}],[194248707,{"idx":3,"name":"neo-wasp-brown","tpage_name":"lprecurc-vis-pris"}],[216006782,{"idx":126,"name":"klever-face-01scars","tpage_name":"museum-pris"}],[184418311,{"idx":7,"name":"citywide-stadium-lightpost-end","tpage_name":"stadiuma-vis-tfrag"}],[170721331,{"idx":51,"name":"t-citywide-met-pill-01","tpage_name":"lcitysml-tfrag"}],[188022806,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"lvincst-pris"}],[194248706,{"idx":2,"name":"neo-wasp-body","tpage_name":"lprecurc-vis-pris"}],[195493968,{"idx":80,"name":"mhcity-eggskin","tpage_name":"towercst-pris"}],[215416848,{"idx":16,"name":"fac-tower-door-01","tpage_name":"lfacout-vis-tfrag"}],[216662028,{"idx":12,"name":"keira-glovenewlarge","tpage_name":"outcast3-pris"}],[216006781,{"idx":125,"name":"klever-face-01","tpage_name":"museum-pris"}],[184418310,{"idx":6,"name":"citywide-stadium-lightpost-end-02","tpage_name":"stadiuma-vis-tfrag"}],[170721330,{"idx":50,"name":"t-citywide-met-strp01","tpage_name":"lcitysml-tfrag"}],[195493967,{"idx":79,"name":"lightCase01","tpage_name":"towercst-pris"}],[215416847,{"idx":15,"name":"facb-big-metal-panl02","tpage_name":"lfacout-vis-tfrag"}],[216662027,{"idx":11,"name":"keira-glasses","tpage_name":"outcast3-pris"}],[216006780,{"idx":124,"name":"klever-eyelid","tpage_name":"museum-pris"}],[184418309,{"idx":5,"name":"citywide-stadium-lightpost-base","tpage_name":"stadiuma-vis-tfrag"}],[170721329,{"idx":49,"name":"t-citywide-met-strp02","tpage_name":"lcitysml-tfrag"}],[188022804,{"idx":20,"name":"jakc-armor","tpage_name":"lvincst-pris"}],[194248704,{"idx":0,"name":"environment-darkprec","tpage_name":"lprecurc-vis-pris"}],[165806137,{"idx":57,"name":"palcab-lowres-background-mount-build-03","tpage_name":"ltowcity-tfrag"}],[175767577,{"idx":25,"name":"prec-surfer-pants","tpage_name":"loutro-pris"}],[195493966,{"idx":78,"name":"light01","tpage_name":"towercst-pris"}],[215416846,{"idx":14,"name":"facb-bigpipe-01","tpage_name":"lfacout-vis-tfrag"}],[216662026,{"idx":10,"name":"keira-face","tpage_name":"outcast3-pris"}],[216006779,{"idx":123,"name":"klever-eye","tpage_name":"museum-pris"}],[184418308,{"idx":4,"name":"citywide-stadium-lightpost","tpage_name":"stadiuma-vis-tfrag"}],[170721328,{"idx":48,"name":"palcab-lorez-metal01","tpage_name":"lcitysml-tfrag"}],[195493965,{"idx":77,"name":"kg-pickup-wings02","tpage_name":"towercst-pris"}],[215416845,{"idx":13,"name":"facb_redmetal-d-01b","tpage_name":"lfacout-vis-tfrag"}],[216662025,{"idx":9,"name":"keira-eyelid","tpage_name":"outcast3-pris"}],[216006778,{"idx":122,"name":"klever-earcup","tpage_name":"museum-pris"}],[184418307,{"idx":3,"name":"citywide-stadium-lightpost-base-02","tpage_name":"stadiuma-vis-tfrag"}],[170721327,{"idx":47,"name":"palcab-lorez-metal03","tpage_name":"lcitysml-tfrag"}],[195493964,{"idx":76,"name":"kg-pickup-wings01","tpage_name":"towercst-pris"}],[215416844,{"idx":12,"name":"fac-tower-base-rim-03","tpage_name":"lfacout-vis-tfrag"}],[216662024,{"idx":8,"name":"keira-chokermetal","tpage_name":"outcast3-pris"}],[216006777,{"idx":121,"name":"klever-clips","tpage_name":"museum-pris"}],[184418306,{"idx":2,"name":"citywide-sail-01","tpage_name":"stadiuma-vis-tfrag"}],[170721326,{"idx":46,"name":"city-lowres-ctygen-stripe-02","tpage_name":"lcitysml-tfrag"}],[195493963,{"idx":75,"name":"kg-pickup-sidelogo","tpage_name":"towercst-pris"}],[215416843,{"idx":11,"name":"fac-tower-base-rim-02","tpage_name":"lfacout-vis-tfrag"}],[216662023,{"idx":7,"name":"keira-chokerhighres","tpage_name":"outcast3-pris"}],[184418305,{"idx":1,"name":"rub-copper-metal-02","tpage_name":"stadiuma-vis-tfrag"}],[170721325,{"idx":45,"name":"city-lowres-ctygen-roof-01","tpage_name":"lcitysml-tfrag"}],[195493962,{"idx":74,"name":"kg-pickup-pipe","tpage_name":"towercst-pris"}],[217907202,{"idx":2,"name":"time-bubble-orbiter","tpage_name":"lbbtcha1-sprite"}],[215416842,{"idx":10,"name":"facb_blue-metal-03","tpage_name":"lfacout-vis-tfrag"}],[216662022,{"idx":6,"name":"keira-brownstraps-new","tpage_name":"outcast3-pris"}],[216006775,{"idx":119,"name":"klever-brownstrap","tpage_name":"museum-pris"}],[184418304,{"idx":0,"name":"rub-beam-gen","tpage_name":"stadiuma-vis-tfrag"}],[170721324,{"idx":44,"name":"city-lowres-ctygen-build-04","tpage_name":"lcitysml-tfrag"}],[195493961,{"idx":73,"name":"kg-pickup-joint","tpage_name":"towercst-pris"}],[217907201,{"idx":1,"name":"time-bubble-clock","tpage_name":"lbbtcha1-sprite"}],[215416841,{"idx":9,"name":"common-black","tpage_name":"lfacout-vis-tfrag"}],[216662021,{"idx":5,"name":"keira-blackstrap","tpage_name":"outcast3-pris"}],[170721323,{"idx":43,"name":"city-lowres-ctygen-build-05","tpage_name":"lcitysml-tfrag"}],[195493960,{"idx":72,"name":"kg-pickup-hood","tpage_name":"towercst-pris"}],[217907200,{"idx":0,"name":"time-bubble","tpage_name":"lbbtcha1-sprite"}],[215416840,{"idx":8,"name":"fac-tower-panel-01","tpage_name":"lfacout-vis-tfrag"}],[216662020,{"idx":4,"name":"keira-belt","tpage_name":"outcast3-pris"}],[216006773,{"idx":117,"name":"klever-blackstrap","tpage_name":"museum-pris"}],[170721322,{"idx":42,"name":"city-lowres-ctygen-build-03","tpage_name":"lcitysml-tfrag"}],[195493959,{"idx":71,"name":"kg-pickup-handrail","tpage_name":"towercst-pris"}],[215416839,{"idx":7,"name":"fac-tower-base-rim-04","tpage_name":"lfacout-vis-tfrag"}],[216662019,{"idx":3,"name":"keira-bellylong","tpage_name":"outcast3-pris"}],[216006772,{"idx":116,"name":"klever-armor-02","tpage_name":"museum-pris"}],[195493958,{"idx":70,"name":"kg-pickup-fender-edge","tpage_name":"towercst-pris"}],[215416838,{"idx":6,"name":"facb_temp_dark","tpage_name":"lfacout-vis-tfrag"}],[216662018,{"idx":2,"name":"charHOLD","tpage_name":"outcast3-pris"}],[216006771,{"idx":115,"name":"klever-armor-01","tpage_name":"museum-pris"}],[170721320,{"idx":40,"name":"city-lowres-ctygen-build-02","tpage_name":"lcitysml-tfrag"}],[195493957,{"idx":69,"name":"kg-pickup-fender","tpage_name":"towercst-pris"}],[215416837,{"idx":5,"name":"fac-tower-base-02","tpage_name":"lfacout-vis-tfrag"}],[216662017,{"idx":1,"name":"bam-hairhilite","tpage_name":"outcast3-pris"}],[216006770,{"idx":114,"name":"klever-arm","tpage_name":"museum-pris"}],[115081285,{"idx":69,"name":"jakchires-chestplate","tpage_name":"desboss1-pris"}],[135004165,{"idx":5,"name":"security-env-dest","tpage_name":"rubbleb-vis-water"}],[181927939,{"idx":3,"name":"lava-drop-04","tpage_name":"mined-sprite"}],[170721319,{"idx":39,"name":"palcab-lowres-mark-highway","tpage_name":"lcitysml-tfrag"}],[195493956,{"idx":68,"name":"kg-pickup-engine-01","tpage_name":"towercst-pris"}],[215416836,{"idx":4,"name":"facb-big-metal-panl04","tpage_name":"lfacout-vis-tfrag"}],[216662016,{"idx":0,"name":"bam-eyelight","tpage_name":"outcast3-pris"}],[216006769,{"idx":113,"name":"keira-torch-nozzle-02","tpage_name":"museum-pris"}],[115081284,{"idx":68,"name":"jakchires-brwnleather","tpage_name":"desboss1-pris"}],[135004164,{"idx":4,"name":"security-dot-dest","tpage_name":"rubbleb-vis-water"}],[216006768,{"idx":112,"name":"keira-torch-nozzle-01","tpage_name":"museum-pris"}],[115081283,{"idx":67,"name":"jakchires-brownstrap","tpage_name":"desboss1-pris"}],[135004163,{"idx":3,"name":"rub-water-destb","tpage_name":"rubbleb-vis-water"}],[216006767,{"idx":111,"name":"keira-torch-guard-01","tpage_name":"museum-pris"}],[115081282,{"idx":66,"name":"jakchires-blackstrap","tpage_name":"desboss1-pris"}],[135004162,{"idx":2,"name":"rub-waterb","tpage_name":"rubbleb-vis-water"}],[216006766,{"idx":110,"name":"keira-shoebottom","tpage_name":"museum-pris"}],[216006765,{"idx":109,"name":"keira-shirt","tpage_name":"museum-pris"}],[216006764,{"idx":108,"name":"keira-pantslarge","tpage_name":"museum-pris"}],[216006763,{"idx":107,"name":"keira-maskbolt","tpage_name":"museum-pris"}],[216006762,{"idx":106,"name":"keira-lens-large","tpage_name":"museum-pris"}],[216006761,{"idx":105,"name":"keira-largewraps","tpage_name":"museum-pris"}],[216006760,{"idx":104,"name":"keira-iris-64x64","tpage_name":"museum-pris"}],[216006759,{"idx":103,"name":"keira-handtop","tpage_name":"museum-pris"}],[216006758,{"idx":102,"name":"keira-handbottom","tpage_name":"museum-pris"}],[216006757,{"idx":101,"name":"keira-hair-newest","tpage_name":"museum-pris"}],[216006756,{"idx":100,"name":"keira-gogglestrap","tpage_name":"museum-pris"}],[216006755,{"idx":99,"name":"keira-glovenewlarge","tpage_name":"museum-pris"}],[216006754,{"idx":98,"name":"keira-glasses","tpage_name":"museum-pris"}],[216006753,{"idx":97,"name":"keira-face","tpage_name":"museum-pris"}],[61079640,{"idx":88,"name":"pecker-eyelid","tpage_name":"minec-vis-pris"}],[216006752,{"idx":96,"name":"keira-eyelid","tpage_name":"museum-pris"}],[61079639,{"idx":87,"name":"pecker-yellowfur","tpage_name":"minec-vis-pris"}],[216006751,{"idx":95,"name":"keira-chokermetal","tpage_name":"museum-pris"}],[216006750,{"idx":94,"name":"keira-chokerhighres","tpage_name":"museum-pris"}],[61079637,{"idx":85,"name":"pecker-wingbottom","tpage_name":"minec-vis-pris"}],[216006747,{"idx":91,"name":"keira-belt","tpage_name":"museum-pris"}],[216006746,{"idx":90,"name":"keira-bellylong","tpage_name":"museum-pris"}],[216006727,{"idx":71,"name":"pecker-yellowfur","tpage_name":"museum-pris"}],[94240858,{"idx":90,"name":"strip-metal-02-hitweak","tpage_name":"intpfall-vis-tfrag"}],[216006726,{"idx":70,"name":"pecker-wingtop","tpage_name":"museum-pris"}],[216006725,{"idx":69,"name":"pecker-wingbottom","tpage_name":"museum-pris"}],[216006724,{"idx":68,"name":"pecker-teeth","tpage_name":"museum-pris"}],[216006723,{"idx":67,"name":"pecker-tail","tpage_name":"museum-pris"}],[216006722,{"idx":66,"name":"pecker-plume","tpage_name":"museum-pris"}],[198443033,{"idx":25,"name":"des-wasmetal07","tpage_name":"hangb-vis-tfrag"}],[181010513,{"idx":81,"name":"errolcyber-metalgold","tpage_name":"desbcst-pris"}],[205914113,{"idx":1,"name":"mhcitya-base-goo-01-dest","tpage_name":"lmhcitya-vis-tfrag"}],[216006721,{"idx":65,"name":"pecker-face","tpage_name":"museum-pris"}],[198443032,{"idx":24,"name":"des-corral-metal-04","tpage_name":"hangb-vis-tfrag"}],[181010512,{"idx":80,"name":"errolcyber-metaleyelid","tpage_name":"desbcst-pris"}],[205914112,{"idx":0,"name":"mhcitya-base-goo-01","tpage_name":"lmhcitya-vis-tfrag"}],[216006720,{"idx":64,"name":"pecker-eyelid","tpage_name":"museum-pris"}],[216006719,{"idx":63,"name":"pecker-body-01","tpage_name":"museum-pris"}],[216006718,{"idx":62,"name":"jakchires-teeth","tpage_name":"museum-pris"}],[216006717,{"idx":61,"name":"jakchires-shoeteop","tpage_name":"museum-pris"}],[217120769,{"idx":1,"name":"sig-flatfangs","tpage_name":"museum2-water"}],[216006716,{"idx":60,"name":"jakchires-shoemetal","tpage_name":"museum-pris"}],[217120768,{"idx":0,"name":"errolcyber-lens","tpage_name":"museum2-water"}],[216006715,{"idx":59,"name":"jakchires-shoebottom","tpage_name":"museum-pris"}],[216006714,{"idx":58,"name":"jakchires-precarmor-01","tpage_name":"museum-pris"}],[216006713,{"idx":57,"name":"jakchires-pants","tpage_name":"museum-pris"}],[216006712,{"idx":56,"name":"jakchires-lightbrownspat","tpage_name":"museum-pris"}],[216006711,{"idx":55,"name":"jakchires-leatherpouch","tpage_name":"museum-pris"}],[222167067,{"idx":27,"name":"war-booboo","tpage_name":"museum4-tfrag"}],[216006710,{"idx":54,"name":"jakchires-jacket","tpage_name":"museum-pris"}],[216006709,{"idx":53,"name":"jakchires-horn","tpage_name":"museum-pris"}],[216006708,{"idx":52,"name":"jakchires-hair","tpage_name":"museum-pris"}],[220529050,{"idx":410,"name":"minetall-eye-16x16","tpage_name":"museum4-pris"}],[216006707,{"idx":51,"name":"jakchires-glovetop","tpage_name":"museum-pris"}],[220529049,{"idx":409,"name":"mineshort-eye-16x16","tpage_name":"museum4-pris"}],[216006706,{"idx":50,"name":"jakchires-facert","tpage_name":"museum-pris"}],[216006705,{"idx":49,"name":"jakchires-facelft","tpage_name":"museum-pris"}],[216006704,{"idx":48,"name":"jakchires-eyelid","tpage_name":"museum-pris"}],[216006703,{"idx":47,"name":"jakchires-eyebrow","tpage_name":"museum-pris"}],[216006702,{"idx":46,"name":"jakchires-eye","tpage_name":"museum-pris"}],[216006701,{"idx":45,"name":"jakchires-clips","tpage_name":"museum-pris"}],[216006700,{"idx":44,"name":"jakchires-chestplate","tpage_name":"museum-pris"}],[216006699,{"idx":43,"name":"jakchires-brwnleather","tpage_name":"museum-pris"}],[216006698,{"idx":42,"name":"jakchires-brownstrap","tpage_name":"museum-pris"}],[216006694,{"idx":38,"name":"jakc-wraps","tpage_name":"museum-pris"}],[174325763,{"idx":3,"name":"daxter-furhilite","tpage_name":"ldesgcst-pris"}],[159383603,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"slumbset-pris"}],[164364323,{"idx":35,"name":"rub-dirt-a","tpage_name":"rubblea2-vis-tfrag"}],[216006693,{"idx":37,"name":"jakc-waistband2","tpage_name":"museum-pris"}],[174325762,{"idx":2,"name":"daxter-eyelid","tpage_name":"ldesgcst-pris"}],[159383602,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"slumbset-pris"}],[164364322,{"idx":34,"name":"rub-copper-metal-02","tpage_name":"rubblea2-vis-tfrag"}],[216006692,{"idx":36,"name":"jakc-skirt","tpage_name":"museum-pris"}],[174325761,{"idx":1,"name":"bam-hairhilite","tpage_name":"ldesgcst-pris"}],[159383601,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"slumbset-pris"}],[164364321,{"idx":33,"name":"rub-statue-stone-01","tpage_name":"rubblea2-vis-tfrag"}],[216006691,{"idx":35,"name":"jakc-scarfhanging","tpage_name":"museum-pris"}],[174325760,{"idx":0,"name":"bam-eyelight","tpage_name":"ldesgcst-pris"}],[159383600,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"slumbset-pris"}],[164364320,{"idx":32,"name":"rub-ground","tpage_name":"rubblea2-vis-tfrag"}],[216006690,{"idx":34,"name":"jakc-scarf","tpage_name":"museum-pris"}],[159383599,{"idx":47,"name":"jakchires-pants","tpage_name":"slumbset-pris"}],[164364319,{"idx":31,"name":"rub-butress-metal-02","tpage_name":"rubblea2-vis-tfrag"}],[216006689,{"idx":33,"name":"jakc-lens","tpage_name":"museum-pris"}],[159383598,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"slumbset-pris"}],[164364318,{"idx":30,"name":"rub-butress-metal-01","tpage_name":"rubblea2-vis-tfrag"}],[216006688,{"idx":32,"name":"jakc-gogglemetal","tpage_name":"museum-pris"}],[216006687,{"idx":31,"name":"jakc-chestplate-straps","tpage_name":"museum-pris"}],[216006686,{"idx":30,"name":"jakc-armor","tpage_name":"museum-pris"}],[94240817,{"idx":49,"name":"city-lowres-ctygen-side-01","tpage_name":"intpfall-vis-tfrag"}],[184418333,{"idx":29,"name":"citywide-wall-brown-strip","tpage_name":"stadiuma-vis-tfrag"}],[171966533,{"idx":69,"name":"grunt-skin-02","tpage_name":"templea-vis-pris2"}],[190644233,{"idx":9,"name":"veger-coat","tpage_name":"templee-pris2"}],[170721353,{"idx":73,"name":"t-palshaft-roof-01","tpage_name":"lcitysml-tfrag"}],[222887950,{"idx":14,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"lfacctyb-vis-tfrag"}],[216662050,{"idx":34,"name":"torn-eyelid","tpage_name":"outcast3-pris"}],[215416870,{"idx":38,"name":"fac-tower-02-hitweak","tpage_name":"lfacout-vis-tfrag"}],[49283136,{"idx":64,"name":"sewer-pipe-small-01","tpage_name":"sewd-vis-pris"}],[67960836,{"idx":4,"name":"wang_2","tpage_name":"wasintro-hfrag"}],[223805564,{"idx":124,"name":"vin-shirt-02","tpage_name":"museum3b-pris"}],[184418332,{"idx":28,"name":"rub-metal-green-02","tpage_name":"stadiuma-vis-tfrag"}],[171966532,{"idx":68,"name":"grunt-skin-01","tpage_name":"templea-vis-pris2"}],[190644232,{"idx":8,"name":"veger-bootstrap","tpage_name":"templee-pris2"}],[170721352,{"idx":72,"name":"palcab-lowres-farm-wall-top","tpage_name":"lcitysml-tfrag"}],[222887949,{"idx":13,"name":"palcab-lowres-ctyslum-wall-04","tpage_name":"lfacctyb-vis-tfrag"}],[216662049,{"idx":33,"name":"torn-eye","tpage_name":"outcast3-pris"}],[215416869,{"idx":37,"name":"fac-tower-06","tpage_name":"lfacout-vis-tfrag"}],[49283135,{"idx":63,"name":"sewer-pipe-rim-07","tpage_name":"sewd-vis-pris"}],[67960835,{"idx":3,"name":"wang_1","tpage_name":"wasintro-hfrag"}],[223805563,{"idx":123,"name":"vin-shirt-01","tpage_name":"museum3b-pris"}],[118751256,{"idx":24,"name":"seem-teeth","tpage_name":"wcaseem-pris2"}],[126222336,{"idx":0,"name":"sewer-nut","tpage_name":"sewo-vis-shrub"}],[184418331,{"idx":27,"name":"rub-city-wall-bottom-frame","tpage_name":"stadiuma-vis-tfrag"}],[171966531,{"idx":67,"name":"grunt-metal-01","tpage_name":"templea-vis-pris2"}],[190644231,{"idx":7,"name":"veger-bootfoot","tpage_name":"templee-pris2"}],[170721351,{"idx":71,"name":"palcab-lowres-farm-wall","tpage_name":"lcitysml-tfrag"}],[222887948,{"idx":12,"name":"palcab-lowres-ctyslum-roof-02","tpage_name":"lfacctyb-vis-tfrag"}],[216662048,{"idx":32,"name":"torn-ear","tpage_name":"outcast3-pris"}],[215416868,{"idx":36,"name":"fac-tower-base-04","tpage_name":"lfacout-vis-tfrag"}],[216662047,{"idx":31,"name":"torn-blademetal","tpage_name":"outcast3-pris"}],[222887947,{"idx":11,"name":"palcab-lowres-ctyslum-wall-02","tpage_name":"lfacctyb-vis-tfrag"}],[215416867,{"idx":35,"name":"facb_bluewindow_selfilluminated","tpage_name":"lfacout-vis-tfrag"}],[216662046,{"idx":30,"name":"torn-belt2","tpage_name":"outcast3-pris"}],[222887946,{"idx":10,"name":"palcab-lowres-ctyslum-wall-01","tpage_name":"lfacctyb-vis-tfrag"}],[215416866,{"idx":34,"name":"facb_redmetal-03","tpage_name":"lfacout-vis-tfrag"}],[216662045,{"idx":29,"name":"torn-belt","tpage_name":"outcast3-pris"}],[222887945,{"idx":9,"name":"palcab-lowres-ctyslum-roof-01","tpage_name":"lfacctyb-vis-tfrag"}],[215416865,{"idx":33,"name":"facb_dec-metal-02","tpage_name":"lfacout-vis-tfrag"}],[220528955,{"idx":315,"name":"geo-hat","tpage_name":"museum4-pris"}],[214892559,{"idx":15,"name":"grunt-teeth-01","tpage_name":"lppatrol-vis-pris"}],[198443056,{"idx":48,"name":"des-low-sand-brown-02","tpage_name":"hangb-vis-tfrag"}],[220528954,{"idx":314,"name":"geo-eyebrow","tpage_name":"museum4-pris"}],[214892558,{"idx":14,"name":"grunt-gem-01","tpage_name":"lppatrol-vis-pris"}],[198443055,{"idx":47,"name":"des-low-sand-brown-03","tpage_name":"hangb-vis-tfrag"}],[208928772,{"idx":4,"name":"terraformer-metal-02","tpage_name":"precurd-vis-pris2"}],[127795232,{"idx":32,"name":"palcab-lowres-mark-roof-rim-01","tpage_name":"lfaccity-tfrag"}],[219480071,{"idx":7,"name":"inv-bgun-03b","tpage_name":"progress-minimap2"}],[216989711,{"idx":15,"name":"errocyber-eyelid","tpage_name":"museum2-pris"}],[214499351,{"idx":23,"name":"onin-teeth","tpage_name":"loutro3-pris"}],[127795231,{"idx":31,"name":"city-lowres-ind-wall-06","tpage_name":"lfaccity-tfrag"}],[208928770,{"idx":2,"name":"terraformer-footpipes-01","tpage_name":"precurd-vis-pris2"}],[219480070,{"idx":6,"name":"inv-bgun-03a","tpage_name":"progress-minimap2"}],[220725250,{"idx":2,"name":"cty-explode-barrel-rim","tpage_name":"lblowcst-tfrag"}],[216989710,{"idx":14,"name":"errocyber-eye","tpage_name":"museum2-pris"}],[214499350,{"idx":22,"name":"onin-skirt","tpage_name":"loutro3-pris"}],[127795230,{"idx":30,"name":"city-lowres-ind-wall-05","tpage_name":"lfaccity-tfrag"}],[219480069,{"idx":5,"name":"inv-bgun-02","tpage_name":"progress-minimap2"}],[220725249,{"idx":1,"name":"cty-explode-barrel-orange","tpage_name":"lblowcst-tfrag"}],[216989709,{"idx":13,"name":"environment-oldmetal","tpage_name":"museum2-pris"}],[214499349,{"idx":21,"name":"onin-shirt","tpage_name":"loutro3-pris"}],[127795229,{"idx":29,"name":"city-lowres-ind-wall-08","tpage_name":"lfaccity-tfrag"}],[219480068,{"idx":4,"name":"inv-bgun-01","tpage_name":"progress-minimap2"}],[220725248,{"idx":0,"name":"cty-explode-barrel-cap","tpage_name":"lblowcst-tfrag"}],[216989708,{"idx":12,"name":"daxterteeth","tpage_name":"museum2-pris"}],[214499348,{"idx":20,"name":"onin-scarf","tpage_name":"loutro3-pris"}],[127795228,{"idx":28,"name":"city-lowres-ind-wall-07","tpage_name":"lfaccity-tfrag"}],[219480067,{"idx":3,"name":"inv-armor-shoulder","tpage_name":"progress-minimap2"}],[216989707,{"idx":11,"name":"daxternose","tpage_name":"museum2-pris"}],[214499347,{"idx":19,"name":"onin-rings2","tpage_name":"loutro3-pris"}],[127795227,{"idx":27,"name":"city-lowres-ind-wall-03","tpage_name":"lfaccity-tfrag"}],[219480066,{"idx":2,"name":"inv-armor-legs","tpage_name":"progress-minimap2"}],[216989706,{"idx":10,"name":"daxterheadwidenew","tpage_name":"museum2-pris"}],[214499346,{"idx":18,"name":"onin-rings","tpage_name":"loutro3-pris"}],[127795226,{"idx":26,"name":"city-lowres-port-roof","tpage_name":"lfaccity-tfrag"}],[219480065,{"idx":1,"name":"inv-armor-body","tpage_name":"progress-minimap2"}],[216989705,{"idx":9,"name":"daxterfoot-bottom","tpage_name":"museum2-pris"}],[214499345,{"idx":17,"name":"onin-neck","tpage_name":"loutro3-pris"}],[127795225,{"idx":25,"name":"city-lowres-ind-wall-01","tpage_name":"lfaccity-tfrag"}],[219480064,{"idx":0,"name":"inv-armor-arms","tpage_name":"progress-minimap2"}],[216989704,{"idx":8,"name":"daxterfoot","tpage_name":"museum2-pris"}],[214499344,{"idx":16,"name":"onin-mat","tpage_name":"loutro3-pris"}],[216989703,{"idx":7,"name":"daxterfinger","tpage_name":"museum2-pris"}],[214499343,{"idx":15,"name":"onin-idoleye","tpage_name":"loutro3-pris"}],[127795223,{"idx":23,"name":"palcab-lowres-mark-roof-01","tpage_name":"lfaccity-tfrag"}],[216006776,{"idx":120,"name":"klever-chest","tpage_name":"museum-pris"}],[164692006,{"idx":38,"name":"daxter-eyelid","tpage_name":"railcst-pris2"}],[218234882,{"idx":2,"name":"time-bubble-orbiter","tpage_name":"lbbsdrp3-sprite"}],[216989702,{"idx":6,"name":"daxterear","tpage_name":"museum2-pris"}],[214499342,{"idx":14,"name":"onin-idol","tpage_name":"loutro3-pris"}],[127795222,{"idx":22,"name":"city-lowres-fort-red","tpage_name":"lfaccity-tfrag"}],[216989701,{"idx":5,"name":"daxterbodyshort-eix","tpage_name":"museum2-pris"}],[214499341,{"idx":13,"name":"onin-handpalm","tpage_name":"loutro3-pris"}],[127795221,{"idx":21,"name":"city-lowres-fort-yellow","tpage_name":"lfaccity-tfrag"}],[216006774,{"idx":118,"name":"klever-bolt","tpage_name":"museum-pris"}],[164692004,{"idx":36,"name":"veger-walkingstick-03","tpage_name":"railcst-pris2"}],[218234880,{"idx":0,"name":"time-bubble","tpage_name":"lbbsdrp3-sprite"}],[216989700,{"idx":4,"name":"daxterarm","tpage_name":"museum2-pris"}],[214499340,{"idx":12,"name":"onin-hand","tpage_name":"loutro3-pris"}],[127795220,{"idx":20,"name":"city-lowres-ind-wall-02","tpage_name":"lfaccity-tfrag"}],[216989699,{"idx":3,"name":"daxter-orange","tpage_name":"museum2-pris"}],[214499339,{"idx":11,"name":"onin-hair","tpage_name":"loutro3-pris"}],[127795219,{"idx":19,"name":"palcab-lowres-stadium-canopy","tpage_name":"lfaccity-tfrag"}],[217055241,{"idx":9,"name":"jinx-boottoe","tpage_name":"museum2-pris2"}],[208338981,{"idx":37,"name":"errolcyber-teeth","tpage_name":"deserrol-pris"}],[216989698,{"idx":2,"name":"daxter-eyelid","tpage_name":"museum2-pris"}],[214499338,{"idx":10,"name":"onin-finger","tpage_name":"loutro3-pris"}],[127795218,{"idx":18,"name":"palcab-steel-lores","tpage_name":"lfaccity-tfrag"}],[217055240,{"idx":8,"name":"jinx-blademetal","tpage_name":"museum2-pris2"}],[208338980,{"idx":36,"name":"errolcyber-spine","tpage_name":"deserrol-pris"}],[216989697,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum2-pris"}],[214499337,{"idx":9,"name":"onin-face","tpage_name":"loutro3-pris"}],[127795217,{"idx":17,"name":"city-lowres-ind-wall-04","tpage_name":"lfaccity-tfrag"}],[216989696,{"idx":0,"name":"bam-eyelight","tpage_name":"museum2-pris"}],[214499336,{"idx":8,"name":"onin-eyelid","tpage_name":"loutro3-pris"}],[127795216,{"idx":16,"name":"palcab-lowres-mark-roof-02","tpage_name":"lfaccity-tfrag"}],[214499335,{"idx":7,"name":"onin-eye","tpage_name":"loutro3-pris"}],[127795215,{"idx":15,"name":"palcab-pipe-hoze","tpage_name":"lfaccity-tfrag"}],[214499332,{"idx":4,"name":"onin-bowlhead","tpage_name":"loutro3-pris"}],[127795212,{"idx":12,"name":"palcab-lowres-ctyslum-roof-02","tpage_name":"lfaccity-tfrag"}],[214499331,{"idx":3,"name":"onin-arm","tpage_name":"loutro3-pris"}],[127795211,{"idx":11,"name":"palcab-lowres-ctyslum-wall-02","tpage_name":"lfaccity-tfrag"}],[214499330,{"idx":2,"name":"environment-oldmetal","tpage_name":"loutro3-pris"}],[127795210,{"idx":10,"name":"palcab-lowres-ctyslum-wall-01","tpage_name":"lfaccity-tfrag"}],[217055232,{"idx":0,"name":"bam-eyelight","tpage_name":"museum2-pris2"}],[208338972,{"idx":28,"name":"errolcyber-pipes-02","tpage_name":"deserrol-pris"}],[214499329,{"idx":1,"name":"bam-hairhilite","tpage_name":"loutro3-pris"}],[127795209,{"idx":9,"name":"palcab-lowres-ctyslum-roof-01","tpage_name":"lfaccity-tfrag"}],[208338971,{"idx":27,"name":"errolcyber-pipes-01","tpage_name":"deserrol-pris"}],[214499328,{"idx":0,"name":"bam-eyelight","tpage_name":"loutro3-pris"}],[127795208,{"idx":8,"name":"palcab-lowres-ctyslum-roof-03","tpage_name":"lfaccity-tfrag"}],[214368264,{"idx":8,"name":"onin-eyelid","tpage_name":"loninsim-pris"}],[216858624,{"idx":0,"name":"jakc-scarf","tpage_name":"deserta-vis-pris"}],[223805461,{"idx":21,"name":"errol-hair","tpage_name":"museum3b-pris"}],[213844021,{"idx":53,"name":"rhino-front-01","tpage_name":"lpattack-vis-pris"}],[214368261,{"idx":5,"name":"onin-braclet","tpage_name":"loninsim-pris"}],[162725890,{"idx":2,"name":"rail-light-blue","tpage_name":"railf-tfrag"}],[214368260,{"idx":4,"name":"onin-bowlhead","tpage_name":"loninsim-pris"}],[162725889,{"idx":1,"name":"rail-base-dark-01","tpage_name":"railf-tfrag"}],[214368259,{"idx":3,"name":"onin-arm","tpage_name":"loninsim-pris"}],[208338979,{"idx":35,"name":"errolcyber-rubberpipe-light","tpage_name":"deserrol-pris"}],[217055239,{"idx":7,"name":"jinx-belt","tpage_name":"museum2-pris2"}],[198705158,{"idx":6,"name":"citn-allflesh","tpage_name":"lblowcst-pris"}],[223805510,{"idx":70,"name":"krew-shirt","tpage_name":"museum3b-pris"}],[213844070,{"idx":102,"name":"king-wristband-small","tpage_name":"lpattack-vis-pris"}],[49020987,{"idx":59,"name":"sewer-scaffold-01","tpage_name":"sewe-vis-tfrag"}],[62717967,{"idx":15,"name":"cguardgame-metaledark-02","tpage_name":"ctypesa-pris"}],[170197021,{"idx":29,"name":"bam-eyelight","tpage_name":"outrocst-pris2"}],[171442201,{"idx":25,"name":"temple_sandstone_ground01","tpage_name":"templea-vis-tfrag"}],[173932561,{"idx":17,"name":"sig-headgear","tpage_name":"ltowerb-vis-pris2"}],[198705174,{"idx":22,"name":"sig2-gem-01","tpage_name":"lblowcst-pris"}],[198705157,{"idx":5,"name":"citn-alleyebrow","tpage_name":"lblowcst-pris"}],[223805509,{"idx":69,"name":"krew-ring","tpage_name":"museum3b-pris"}],[213844069,{"idx":101,"name":"king-wrap-small","tpage_name":"lpattack-vis-pris"}],[49020986,{"idx":58,"name":"sewer-plate-06","tpage_name":"sewe-vis-tfrag"}],[62717966,{"idx":14,"name":"cguardgame-jacketstrap","tpage_name":"ctypesa-pris"}],[198705156,{"idx":4,"name":"citn-allbuckel","tpage_name":"lblowcst-pris"}],[223805508,{"idx":68,"name":"krew-plainmetal","tpage_name":"museum3b-pris"}],[213844068,{"idx":100,"name":"king-vestback-small","tpage_name":"lpattack-vis-pris"}],[49020985,{"idx":57,"name":"sewer-metal-trim-02","tpage_name":"sewe-vis-tfrag"}],[62717965,{"idx":13,"name":"cguardgame-guntube","tpage_name":"ctypesa-pris"}],[198705155,{"idx":3,"name":"citn-1-pants","tpage_name":"lblowcst-pris"}],[223805507,{"idx":67,"name":"krew-pipe-anim","tpage_name":"museum3b-pris"}],[213844067,{"idx":99,"name":"king-vest-small","tpage_name":"lpattack-vis-pris"}],[49020984,{"idx":56,"name":"sewer-light-flourescent-01","tpage_name":"sewe-vis-tfrag"}],[62717964,{"idx":12,"name":"cguardgame-gunmetaldark2","tpage_name":"ctypesa-pris"}],[198705154,{"idx":2,"name":"citfat-hairflat","tpage_name":"lblowcst-pris"}],[223805506,{"idx":66,"name":"krew-pipe-02","tpage_name":"museum3b-pris"}],[213844066,{"idx":98,"name":"king-thinstrap-small","tpage_name":"lpattack-vis-pris"}],[62717963,{"idx":11,"name":"cguardgame-gunmetaldark","tpage_name":"ctypesa-pris"}],[170197017,{"idx":25,"name":"ashelin-shoebottom","tpage_name":"outrocst-pris2"}],[171442197,{"idx":21,"name":"temple_sandstone_steptop01","tpage_name":"templea-vis-tfrag"}],[173932557,{"idx":13,"name":"sig-gun-02","tpage_name":"ltowerb-vis-pris2"}],[198705153,{"idx":1,"name":"cguardgame-scarf","tpage_name":"lblowcst-pris"}],[223805505,{"idx":65,"name":"krew-pipe-01","tpage_name":"museum3b-pris"}],[213844065,{"idx":97,"name":"king-skirt-small","tpage_name":"lpattack-vis-pris"}],[49020982,{"idx":54,"name":"sewer-round-02","tpage_name":"sewe-vis-tfrag"}],[63963142,{"idx":6,"name":"wang_mip","tpage_name":"desert-hfrag"}],[62717962,{"idx":10,"name":"cguardgame-gunleather","tpage_name":"ctypesa-pris"}],[170197016,{"idx":24,"name":"ashelin-shield","tpage_name":"outrocst-pris2"}],[171442196,{"idx":20,"name":"wascity-rope","tpage_name":"templea-vis-tfrag"}],[173932556,{"idx":12,"name":"sig-gun-01","tpage_name":"ltowerb-vis-pris2"}],[198705152,{"idx":0,"name":"bam-eyelight","tpage_name":"lblowcst-pris"}],[223805504,{"idx":64,"name":"krew-pants","tpage_name":"museum3b-pris"}],[213844064,{"idx":96,"name":"king-shoebottom-small","tpage_name":"lpattack-vis-pris"}],[49020981,{"idx":53,"name":"sewer-round-03","tpage_name":"sewe-vis-tfrag"}],[63963141,{"idx":5,"name":"wang_black","tpage_name":"desert-hfrag"}],[62717961,{"idx":9,"name":"cguardgame-gunhandle","tpage_name":"ctypesa-pris"}],[176422915,{"idx":3,"name":"token-white","tpage_name":"templec-sprite"}],[170197015,{"idx":23,"name":"ashelin-shells","tpage_name":"outrocst-pris2"}],[173932555,{"idx":11,"name":"sig-glovetop","tpage_name":"ltowerb-vis-pris2"}],[223805503,{"idx":63,"name":"krew-mole","tpage_name":"museum3b-pris"}],[213844063,{"idx":95,"name":"king-precursermetal-trimbolt-small","tpage_name":"lpattack-vis-pris"}],[176422914,{"idx":2,"name":"tpl-symbol-tail","tpage_name":"templec-sprite"}],[170197014,{"idx":22,"name":"ashelin-redtop","tpage_name":"outrocst-pris2"}],[171442194,{"idx":18,"name":"temple_sandstone_dtale02","tpage_name":"templea-vis-tfrag"}],[173932554,{"idx":10,"name":"sig-glove","tpage_name":"ltowerb-vis-pris2"}],[223805502,{"idx":62,"name":"krew-metalattachment","tpage_name":"museum3b-pris"}],[213844062,{"idx":94,"name":"king-precursermetal-trim2-small","tpage_name":"lpattack-vis-pris"}],[49020979,{"idx":51,"name":"sewer-lip-01","tpage_name":"sewe-vis-tfrag"}],[63963139,{"idx":3,"name":"wang_3","tpage_name":"desert-hfrag"}],[62717959,{"idx":7,"name":"cguardgame-greyheadshield","tpage_name":"ctypesa-pris"}],[170197012,{"idx":20,"name":"ashelin-jacketstraps","tpage_name":"outrocst-pris2"}],[171442192,{"idx":16,"name":"templea_sandstone_brick01","tpage_name":"templea-vis-tfrag"}],[173932552,{"idx":8,"name":"sig-flask","tpage_name":"ltowerb-vis-pris2"}],[170197011,{"idx":19,"name":"ashelin-jacketsleeve","tpage_name":"outrocst-pris2"}],[171442191,{"idx":15,"name":"temple_sandstone_box01","tpage_name":"templea-vis-tfrag"}],[173932551,{"idx":7,"name":"sig-facert","tpage_name":"ltowerb-vis-pris2"}],[170197010,{"idx":18,"name":"ashelin-jacketbody","tpage_name":"outrocst-pris2"}],[171442190,{"idx":14,"name":"temple_sandstone_star01","tpage_name":"templea-vis-tfrag"}],[173932550,{"idx":6,"name":"sig-faceleft","tpage_name":"ltowerb-vis-pris2"}],[223805498,{"idx":58,"name":"krew-leatherplain","tpage_name":"museum3b-pris"}],[213844058,{"idx":90,"name":"king-horn-small","tpage_name":"lpattack-vis-pris"}],[170197009,{"idx":17,"name":"ashelin-handle-01","tpage_name":"outrocst-pris2"}],[171442189,{"idx":13,"name":"temple_sandstone_trim02","tpage_name":"templea-vis-tfrag"}],[173932549,{"idx":5,"name":"sig-eyelid","tpage_name":"ltowerb-vis-pris2"}],[223805497,{"idx":57,"name":"krew-lamp","tpage_name":"museum3b-pris"}],[213844057,{"idx":89,"name":"king-hand-small","tpage_name":"lpattack-vis-pris"}],[170197008,{"idx":16,"name":"ashelin-hair","tpage_name":"outrocst-pris2"}],[173932548,{"idx":4,"name":"sig-eye","tpage_name":"ltowerb-vis-pris2"}],[186515475,{"idx":19,"name":"kg-pickup-joint","tpage_name":"lctyblow-pris"}],[189005835,{"idx":11,"name":"errolcyber-earcup","tpage_name":"factoryd-vis-pris"}],[172818495,{"idx":63,"name":"precur-light-green-big","tpage_name":"precurd-vis-tfrag"}],[223805496,{"idx":56,"name":"krew-jewe-smaller","tpage_name":"museum3b-pris"}],[213844056,{"idx":88,"name":"king-hair-small","tpage_name":"lpattack-vis-pris"}],[170197007,{"idx":15,"name":"ashelin-gunholster","tpage_name":"outrocst-pris2"}],[171442187,{"idx":11,"name":"temple_sandstone_pill01","tpage_name":"templea-vis-tfrag"}],[173932547,{"idx":3,"name":"sig-belt","tpage_name":"ltowerb-vis-pris2"}],[189005834,{"idx":10,"name":"errolcyber-dirtymetal","tpage_name":"factoryd-vis-pris"}],[186515474,{"idx":18,"name":"kg-pickup-hood","tpage_name":"lctyblow-pris"}],[172818494,{"idx":62,"name":"precur-floor-large-01-lotweak","tpage_name":"precurd-vis-tfrag"}],[223805495,{"idx":55,"name":"krew-handle","tpage_name":"museum3b-pris"}],[213844055,{"idx":87,"name":"king-greenmetalplain-small","tpage_name":"lpattack-vis-pris"}],[170197006,{"idx":14,"name":"ashelin-gunbarrel-03","tpage_name":"outrocst-pris2"}],[171442186,{"idx":10,"name":"wstd-torchbowl-coal-01","tpage_name":"templea-vis-tfrag"}],[173932546,{"idx":2,"name":"environment-oldmetal","tpage_name":"ltowerb-vis-pris2"}],[189005833,{"idx":9,"name":"errolcyber-chestplate","tpage_name":"factoryd-vis-pris"}],[186515473,{"idx":17,"name":"kg-pickup-handrail","tpage_name":"lctyblow-pris"}],[172818493,{"idx":61,"name":"precur-terraformer-low-body-01","tpage_name":"precurd-vis-tfrag"}],[223805494,{"idx":54,"name":"krew-hand","tpage_name":"museum3b-pris"}],[213844054,{"idx":86,"name":"king-greenmetal-small","tpage_name":"lpattack-vis-pris"}],[189005832,{"idx":8,"name":"errolcyber-bluewrap","tpage_name":"factoryd-vis-pris"}],[186515472,{"idx":16,"name":"kg-pickup-fender-edge","tpage_name":"lctyblow-pris"}],[172818492,{"idx":60,"name":"precur-terraformer-low-body-03","tpage_name":"precurd-vis-tfrag"}],[223805493,{"idx":53,"name":"krew-goldtooth","tpage_name":"museum3b-pris"}],[213844053,{"idx":85,"name":"king-finger-small","tpage_name":"lpattack-vis-pris"}],[189005831,{"idx":7,"name":"errolcyber-bluemetal-01","tpage_name":"factoryd-vis-pris"}],[186515471,{"idx":15,"name":"kg-pickup-fender","tpage_name":"lctyblow-pris"}],[172818491,{"idx":59,"name":"precur-terraformer-low-metal-01","tpage_name":"precurd-vis-tfrag"}],[189005830,{"idx":6,"name":"errolcyber-bluedome","tpage_name":"factoryd-vis-pris"}],[186515470,{"idx":14,"name":"kg-pickup-engine-01","tpage_name":"lctyblow-pris"}],[172818490,{"idx":58,"name":"precur-terraformer-low-body-02","tpage_name":"precurd-vis-tfrag"}],[223805491,{"idx":51,"name":"krew-fan-01","tpage_name":"museum3b-pris"}],[213844051,{"idx":83,"name":"king-earing-small","tpage_name":"lpattack-vis-pris"}],[189005829,{"idx":5,"name":"errolcyber-bigshoulder","tpage_name":"factoryd-vis-pris"}],[190251009,{"idx":1,"name":"common-glass","tpage_name":"precurc-vis-water"}],[186515469,{"idx":13,"name":"kg-pickup-body","tpage_name":"lctyblow-pris"}],[172818489,{"idx":57,"name":"precur-terraformer-low-legs","tpage_name":"precurd-vis-tfrag"}],[223805490,{"idx":50,"name":"krew-facert","tpage_name":"museum3b-pris"}],[213844050,{"idx":82,"name":"king-ear-small","tpage_name":"lpattack-vis-pris"}],[189005828,{"idx":4,"name":"errolcyber-bighand-01","tpage_name":"factoryd-vis-pris"}],[190251008,{"idx":0,"name":"precur-ice-01","tpage_name":"precurc-vis-water"}],[186515468,{"idx":12,"name":"kg-pickup-bed","tpage_name":"lctyblow-pris"}],[172818488,{"idx":56,"name":"precur-terraformer-low-metal-02","tpage_name":"precurd-vis-tfrag"}],[223805489,{"idx":49,"name":"krew-facelft","tpage_name":"museum3b-pris"}],[213844049,{"idx":81,"name":"king-clip-02-small","tpage_name":"lpattack-vis-pris"}],[189005827,{"idx":3,"name":"errocyber-faceflesh","tpage_name":"factoryd-vis-pris"}],[186515467,{"idx":11,"name":"kcfrontend01","tpage_name":"lctyblow-pris"}],[172818487,{"idx":55,"name":"precur-blue-light-02","tpage_name":"precurd-vis-tfrag"}],[223805488,{"idx":48,"name":"krew-eyebrow","tpage_name":"museum3b-pris"}],[213844048,{"idx":80,"name":"king-chest-small","tpage_name":"lpattack-vis-pris"}],[189005826,{"idx":2,"name":"environment-oldmetal","tpage_name":"factoryd-vis-pris"}],[186515466,{"idx":10,"name":"jets01","tpage_name":"lctyblow-pris"}],[172818486,{"idx":54,"name":"environment-precur-level","tpage_name":"precurd-vis-tfrag"}],[223805487,{"idx":47,"name":"krew-chairleather","tpage_name":"museum3b-pris"}],[213844047,{"idx":79,"name":"king-bolt-small","tpage_name":"lpattack-vis-pris"}],[186515465,{"idx":9,"name":"jetTop01","tpage_name":"lctyblow-pris"}],[189005825,{"idx":1,"name":"bam-hairhilite","tpage_name":"factoryd-vis-pris"}],[172818485,{"idx":53,"name":"precur-floor-large-01","tpage_name":"precurd-vis-tfrag"}],[223805486,{"idx":46,"name":"krew-chain","tpage_name":"museum3b-pris"}],[213844046,{"idx":78,"name":"king-blackskirt2-small","tpage_name":"lpattack-vis-pris"}],[223805485,{"idx":45,"name":"krew-bracelet","tpage_name":"museum3b-pris"}],[213844045,{"idx":77,"name":"king-arm-small","tpage_name":"lpattack-vis-pris"}],[186515463,{"idx":7,"name":"gunbox02","tpage_name":"lctyblow-pris"}],[172818483,{"idx":51,"name":"precur-floor-base-01","tpage_name":"precurd-vis-tfrag"}],[139657239,{"idx":23,"name":"keira-torch-guard-01","tpage_name":"lkeira-pris"}],[223805484,{"idx":44,"name":"krew-belt","tpage_name":"museum3b-pris"}],[213844044,{"idx":76,"name":"tread-interceptor-rhino","tpage_name":"lpattack-vis-pris"}],[186515462,{"idx":6,"name":"gunbox01","tpage_name":"lctyblow-pris"}],[172818482,{"idx":50,"name":"precur-wall-tube-03","tpage_name":"precurd-vis-tfrag"}],[139657238,{"idx":22,"name":"keira-shoebottom","tpage_name":"lkeira-pris"}],[49021005,{"idx":77,"name":"sewer-pipe-rim-06","tpage_name":"sewe-vis-tfrag"}],[71434245,{"idx":5,"name":"wstd-spear02","tpage_name":"wasstadc-tfrag"}],[223805483,{"idx":43,"name":"krew-arm","tpage_name":"museum3b-pris"}],[213844043,{"idx":75,"name":"neo-wasp-eye","tpage_name":"lpattack-vis-pris"}],[186515461,{"idx":5,"name":"gunBoxFront01","tpage_name":"lctyblow-pris"}],[172818481,{"idx":49,"name":"precur-trim-01","tpage_name":"precurd-vis-tfrag"}],[139657237,{"idx":21,"name":"keira-shirt","tpage_name":"lkeira-pris"}],[49021004,{"idx":76,"name":"sewer-red-light-02","tpage_name":"sewe-vis-tfrag"}],[71434244,{"idx":4,"name":"wstd-spear01","tpage_name":"wasstadc-tfrag"}],[223805482,{"idx":42,"name":"errol-wristband","tpage_name":"museum3b-pris"}],[213844042,{"idx":74,"name":"neo-wasp-dark-brown","tpage_name":"lpattack-vis-pris"}],[223805481,{"idx":41,"name":"errol-teeth","tpage_name":"museum3b-pris"}],[213844041,{"idx":73,"name":"neo-wasp-brown","tpage_name":"lpattack-vis-pris"}],[223805480,{"idx":40,"name":"errol-sleeve-rttop","tpage_name":"museum3b-pris"}],[213844040,{"idx":72,"name":"neo-wasp-body","tpage_name":"lpattack-vis-pris"}],[223805479,{"idx":39,"name":"errol-sleeve-lfttop","tpage_name":"museum3b-pris"}],[213844039,{"idx":71,"name":"neo-wasp-base","tpage_name":"lpattack-vis-pris"}],[104792149,{"idx":85,"name":"dk-sat-cable-02","tpage_name":"desresc-pris"}],[130940929,{"idx":1,"name":"hologram-lines","tpage_name":"deshover-sprite"}],[223805478,{"idx":38,"name":"errol-sleeve","tpage_name":"museum3b-pris"}],[213844038,{"idx":70,"name":"vehicle-wire-01","tpage_name":"lpattack-vis-pris"}],[223805477,{"idx":37,"name":"errol-shoulder-rtshield","tpage_name":"museum3b-pris"}],[213844037,{"idx":69,"name":"vehicle-wheel-01","tpage_name":"lpattack-vis-pris"}],[223805476,{"idx":36,"name":"errol-shoebottom","tpage_name":"museum3b-pris"}],[213844036,{"idx":68,"name":"vehicle-pipe-01","tpage_name":"lpattack-vis-pris"}],[223805475,{"idx":35,"name":"errol-shoe","tpage_name":"museum3b-pris"}],[213844035,{"idx":67,"name":"vehicle-gun-box-01","tpage_name":"lpattack-vis-pris"}],[49610807,{"idx":55,"name":"sewer-bolt-side-01","tpage_name":"sewf-vis-tfrag"}],[60817427,{"idx":19,"name":"minc-blue-paint-rust02","tpage_name":"mineb-vis-shrub"}],[95879176,{"idx":8,"name":"torn-ear","tpage_name":"ltorn-pris2"}],[223805474,{"idx":34,"name":"errol-scarf","tpage_name":"museum3b-pris"}],[213844034,{"idx":66,"name":"vehicle-gas-tank-01","tpage_name":"lpattack-vis-pris"}],[49610806,{"idx":54,"name":"sewer-pipe-rim-07-hitweak","tpage_name":"sewf-vis-tfrag"}],[60817426,{"idx":18,"name":"minc-metal-grate-01","tpage_name":"mineb-vis-shrub"}],[95879175,{"idx":7,"name":"torn-blademetal","tpage_name":"ltorn-pris2"}],[214958086,{"idx":6,"name":"rub-rubble-01","tpage_name":"lppatrol-vis-tfrag"}],[223805473,{"idx":33,"name":"errol-pipeends","tpage_name":"museum3b-pris"}],[213844033,{"idx":65,"name":"vehicle-exhaust-pipe-01","tpage_name":"lpattack-vis-pris"}],[49610805,{"idx":53,"name":"sewer-plate-06","tpage_name":"sewf-vis-tfrag"}],[60817425,{"idx":17,"name":"minc-blue-paint-safe-rust04","tpage_name":"mineb-vis-shrub"}],[95879174,{"idx":6,"name":"torn-belt2","tpage_name":"ltorn-pris2"}],[172818471,{"idx":39,"name":"precur-bridge-plate-01","tpage_name":"precurd-vis-tfrag"}],[139657227,{"idx":11,"name":"keira-glovenewlarge","tpage_name":"lkeira-pris"}],[211550219,{"idx":11,"name":"preship-metal-ring-top","tpage_name":"temp-shrub"}],[172949639,{"idx":135,"name":"precur-planet-water-01","tpage_name":"precurd-vis-pris"}],[223805472,{"idx":32,"name":"errol-pantleg","tpage_name":"museum3b-pris"}],[213844032,{"idx":64,"name":"vehicle-cushion-01","tpage_name":"lpattack-vis-pris"}],[49610804,{"idx":52,"name":"sewer-nut-01","tpage_name":"sewf-vis-tfrag"}],[60817424,{"idx":16,"name":"minc-blue-yel-paint-safe-rust04","tpage_name":"mineb-vis-shrub"}],[95879173,{"idx":5,"name":"torn-belt","tpage_name":"ltorn-pris2"}],[172818470,{"idx":38,"name":"precur-bridge-floor-01","tpage_name":"precurd-vis-tfrag"}],[139657226,{"idx":10,"name":"keira-glasses","tpage_name":"lkeira-pris"}],[211222544,{"idx":16,"name":"rail-env-wall-01","tpage_name":"towercst-tfrag"}],[214958084,{"idx":4,"name":"lt-eco-vent-side-01","tpage_name":"lppatrol-vis-tfrag"}],[223805471,{"idx":31,"name":"errol-mouthpiece","tpage_name":"museum3b-pris"}],[213844031,{"idx":63,"name":"vehicle-chrome-pipe-01","tpage_name":"lpattack-vis-pris"}],[95879172,{"idx":4,"name":"torn-armor","tpage_name":"ltorn-pris2"}],[49610803,{"idx":51,"name":"sewer-scaffold-02","tpage_name":"sewf-vis-tfrag"}],[60817423,{"idx":15,"name":"minc-safe-plate-01","tpage_name":"mineb-vis-shrub"}],[172818469,{"idx":37,"name":"precur-bridge-stage-01","tpage_name":"precurd-vis-tfrag"}],[211222543,{"idx":15,"name":"tow-plat-side","tpage_name":"towercst-tfrag"}],[214958083,{"idx":3,"name":"lt-eco-vent-blue-01","tpage_name":"lppatrol-vis-tfrag"}],[223805470,{"idx":30,"name":"errol-metalrim","tpage_name":"museum3b-pris"}],[213844030,{"idx":62,"name":"vehicle-cap-pin-01","tpage_name":"lpattack-vis-pris"}],[172818468,{"idx":36,"name":"precur-engine-frame-01","tpage_name":"precurd-vis-tfrag"}],[139657224,{"idx":8,"name":"keira-eyelid","tpage_name":"lkeira-pris"}],[211222542,{"idx":14,"name":"tow-base-ground","tpage_name":"towercst-tfrag"}],[214958082,{"idx":2,"name":"dk-eco-vent-side-01","tpage_name":"lppatrol-vis-tfrag"}],[144834584,{"idx":24,"name":"common-black","tpage_name":"combn-tfrag"}],[223805469,{"idx":29,"name":"errol-lens","tpage_name":"museum3b-pris"}],[213844029,{"idx":61,"name":"vehicle-brace-pipe-01","tpage_name":"lpattack-vis-pris"}],[211222541,{"idx":13,"name":"tow-pup-detail-01","tpage_name":"towercst-tfrag"}],[214958081,{"idx":1,"name":"dk-eco-vent-glow-01","tpage_name":"lppatrol-vis-tfrag"}],[223805468,{"idx":28,"name":"errol-kneepadstrap","tpage_name":"museum3b-pris"}],[213844028,{"idx":60,"name":"rhino-wheel-01","tpage_name":"lpattack-vis-pris"}],[95879169,{"idx":1,"name":"bam-hairhilite","tpage_name":"ltorn-pris2"}],[211222540,{"idx":12,"name":"tow-pup-metal-01","tpage_name":"towercst-tfrag"}],[214958080,{"idx":0,"name":"environment-darkprec","tpage_name":"lppatrol-vis-tfrag"}],[223805467,{"idx":27,"name":"errol-kneeguard","tpage_name":"museum3b-pris"}],[213844027,{"idx":59,"name":"rhino-scoop-01","tpage_name":"lpattack-vis-pris"}],[172818465,{"idx":33,"name":"precur-pipe-round-01","tpage_name":"precurd-vis-tfrag"}],[139657221,{"idx":5,"name":"keira-brownstraps-new","tpage_name":"lkeira-pris"}],[118620219,{"idx":59,"name":"klever-horn","tpage_name":"ljkcdmkl-pris"}],[211550213,{"idx":5,"name":"preship-blue-thruster","tpage_name":"temp-shrub"}],[172949633,{"idx":129,"name":"errolcyber-roboeye","tpage_name":"precurd-vis-pris"}],[223805466,{"idx":26,"name":"errol-jacket","tpage_name":"museum3b-pris"}],[213844026,{"idx":58,"name":"rhino-rag-01","tpage_name":"lpattack-vis-pris"}],[172818464,{"idx":32,"name":"precur-floor-plate-01","tpage_name":"precurd-vis-tfrag"}],[139657220,{"idx":4,"name":"keira-blackstrap","tpage_name":"lkeira-pris"}],[118620218,{"idx":58,"name":"klever-handwrap","tpage_name":"ljkcdmkl-pris"}],[211550212,{"idx":4,"name":"preship-blue-window-glue","tpage_name":"temp-shrub"}],[172949632,{"idx":128,"name":"errolcyber-metaleyelid","tpage_name":"precurd-vis-pris"}],[223805465,{"idx":25,"name":"errol-inseam","tpage_name":"museum3b-pris"}],[213844025,{"idx":57,"name":"rhino-metal-01","tpage_name":"lpattack-vis-pris"}],[211550211,{"idx":3,"name":"preship-blue-window-blue-02","tpage_name":"temp-shrub"}],[172949631,{"idx":127,"name":"errocyber-eyelid","tpage_name":"precurd-vis-pris"}],[127008775,{"idx":7,"name":"vola-rock-side-wall","tpage_name":"volcanox-tfrag"}],[223805464,{"idx":24,"name":"errol-headleather","tpage_name":"museum3b-pris"}],[213844024,{"idx":56,"name":"rhino-horn-02","tpage_name":"lpattack-vis-pris"}],[172818462,{"idx":30,"name":"precur-plate-honey-01","tpage_name":"precurd-vis-tfrag"}],[211550210,{"idx":2,"name":"preship-metal-window-01","tpage_name":"temp-shrub"}],[172949630,{"idx":126,"name":"errocyber-eye","tpage_name":"precurd-vis-pris"}],[127008774,{"idx":6,"name":"vol-ladder-wood","tpage_name":"volcanox-tfrag"}],[223805463,{"idx":23,"name":"errol-handpalm","tpage_name":"museum3b-pris"}],[213844023,{"idx":55,"name":"rhino-horn-01","tpage_name":"lpattack-vis-pris"}],[172818461,{"idx":29,"name":"precur-plate-pattern-01","tpage_name":"precurd-vis-tfrag"}],[139657217,{"idx":1,"name":"bam-hairhilite","tpage_name":"lkeira-pris"}],[223805462,{"idx":22,"name":"errol-handback","tpage_name":"museum3b-pris"}],[213844022,{"idx":54,"name":"rhino-front-02","tpage_name":"lpattack-vis-pris"}],[172818460,{"idx":28,"name":"precur-light-green-02","tpage_name":"precurd-vis-tfrag"}],[139657216,{"idx":0,"name":"bam-eyelight","tpage_name":"lkeira-pris"}],[172949600,{"idx":96,"name":"errolcyber-bluewrap","tpage_name":"precurd-vis-pris"}],[213843993,{"idx":25,"name":"intcept-tread01","tpage_name":"lpattack-vis-pris"}],[42336258,{"idx":2,"name":"racegate","tpage_name":"nstb-sprite"}],[172949598,{"idx":94,"name":"errolcyber-bigshoulder","tpage_name":"precurd-vis-pris"}],[213843991,{"idx":23,"name":"environment-darkprec","tpage_name":"lpattack-vis-pris"}],[42336256,{"idx":0,"name":"errol-ring-01","tpage_name":"nstb-sprite"}],[172949597,{"idx":93,"name":"errolcyber-bighand-01","tpage_name":"precurd-vis-pris"}],[213843990,{"idx":22,"name":"dp-bipedal-toe-01","tpage_name":"lpattack-vis-pris"}],[172949596,{"idx":92,"name":"dm-ship-tentacle-01","tpage_name":"precurd-vis-pris"}],[213843989,{"idx":21,"name":"dp-bipedal-spine-01","tpage_name":"lpattack-vis-pris"}],[172949595,{"idx":91,"name":"jakchires-teeth","tpage_name":"precurd-vis-pris"}],[213843988,{"idx":20,"name":"dp-bipedal-skin-ribs-01","tpage_name":"lpattack-vis-pris"}],[172949594,{"idx":90,"name":"jakchires-shoeteop","tpage_name":"precurd-vis-pris"}],[213843987,{"idx":19,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"lpattack-vis-pris"}],[172949593,{"idx":89,"name":"jakchires-shoemetal","tpage_name":"precurd-vis-pris"}],[213843986,{"idx":18,"name":"dp-bipedal-skin-plate-01","tpage_name":"lpattack-vis-pris"}],[200343552,{"idx":0,"name":"flamer-wing","tpage_name":"templea-vis-alpha"}],[172949592,{"idx":88,"name":"jakchires-shoebottom","tpage_name":"precurd-vis-pris"}],[213843985,{"idx":17,"name":"dp-bipedal-skin-bulge-02","tpage_name":"lpattack-vis-pris"}],[172949590,{"idx":86,"name":"jakchires-pants","tpage_name":"precurd-vis-pris"}],[213843983,{"idx":15,"name":"dp-bipedal-power-hose","tpage_name":"lpattack-vis-pris"}],[190382109,{"idx":29,"name":"rail-light-green","tpage_name":"raila-shrub"}],[172949589,{"idx":85,"name":"jakchires-lightbrownspat","tpage_name":"precurd-vis-pris"}],[213843982,{"idx":14,"name":"dp-bipedal-nose-01","tpage_name":"lpattack-vis-pris"}],[190382108,{"idx":28,"name":"vehicle-snake-drum-03","tpage_name":"raila-shrub"}],[172949588,{"idx":84,"name":"jakchires-leatherpouch","tpage_name":"precurd-vis-pris"}],[213843981,{"idx":13,"name":"dp-bipedal-finger-plate-01","tpage_name":"lpattack-vis-pris"}],[190382107,{"idx":27,"name":"vehicle-snake-drum-01","tpage_name":"raila-shrub"}],[172949587,{"idx":83,"name":"jakchires-jacket","tpage_name":"precurd-vis-pris"}],[213843980,{"idx":12,"name":"dp-bipedal-eye-01","tpage_name":"lpattack-vis-pris"}],[190382106,{"idx":26,"name":"vehicle-snake-tank-01","tpage_name":"raila-shrub"}],[172949586,{"idx":82,"name":"jakchires-horn","tpage_name":"precurd-vis-pris"}],[213843979,{"idx":11,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"lpattack-vis-pris"}],[190382105,{"idx":25,"name":"vehicle-snake-drum-02","tpage_name":"raila-shrub"}],[172949585,{"idx":81,"name":"jakchires-hair","tpage_name":"precurd-vis-pris"}],[213843978,{"idx":10,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"lpattack-vis-pris"}],[190382104,{"idx":24,"name":"vehicle-rims-01","tpage_name":"raila-shrub"}],[172949584,{"idx":80,"name":"jakchires-glovetop","tpage_name":"precurd-vis-pris"}],[213843977,{"idx":9,"name":"dp-bipedal-dk-plate-04","tpage_name":"lpattack-vis-pris"}],[190382103,{"idx":23,"name":"vehicle-snake-gun-01","tpage_name":"raila-shrub"}],[172949583,{"idx":79,"name":"jakchires-facert","tpage_name":"precurd-vis-pris"}],[213843976,{"idx":8,"name":"dp-bipedal-dk-plate-03","tpage_name":"lpattack-vis-pris"}],[190382102,{"idx":22,"name":"vehicle-cushion-01","tpage_name":"raila-shrub"}],[172949582,{"idx":78,"name":"jakchires-facelft","tpage_name":"precurd-vis-pris"}],[213843975,{"idx":7,"name":"dp-bipedal-dk-plate-02","tpage_name":"lpattack-vis-pris"}],[190382101,{"idx":21,"name":"common-black","tpage_name":"raila-shrub"}],[172949581,{"idx":77,"name":"jakchires-eyelid","tpage_name":"precurd-vis-pris"}],[213843974,{"idx":6,"name":"dp-bipedal-dk-plate-01","tpage_name":"lpattack-vis-pris"}],[190382100,{"idx":20,"name":"vehicle-snake-gun-02","tpage_name":"raila-shrub"}],[172949580,{"idx":76,"name":"jakchires-eyebrow","tpage_name":"precurd-vis-pris"}],[213843973,{"idx":5,"name":"dp-bipedal-dk-hose-01","tpage_name":"lpattack-vis-pris"}],[190382099,{"idx":19,"name":"vehicle-cap-pin-01","tpage_name":"raila-shrub"}],[172949579,{"idx":75,"name":"jakchires-eye","tpage_name":"precurd-vis-pris"}],[213843972,{"idx":4,"name":"dp-bipedal-chest-01","tpage_name":"lpattack-vis-pris"}],[190382098,{"idx":18,"name":"vehicle-brace-pipe-01","tpage_name":"raila-shrub"}],[172949578,{"idx":74,"name":"jakchires-clips","tpage_name":"precurd-vis-pris"}],[213843971,{"idx":3,"name":"dp-bipedal-backhand-01","tpage_name":"lpattack-vis-pris"}],[190382097,{"idx":17,"name":"vehicle-metal-plate-02","tpage_name":"raila-shrub"}],[172949577,{"idx":73,"name":"jakchires-chestplate","tpage_name":"precurd-vis-pris"}],[213843970,{"idx":2,"name":"common-transparent","tpage_name":"lpattack-vis-pris"}],[190382096,{"idx":16,"name":"vehicle-safety-plate-01","tpage_name":"raila-shrub"}],[172949576,{"idx":72,"name":"jakchires-brwnleather","tpage_name":"precurd-vis-pris"}],[213843969,{"idx":1,"name":"common-black","tpage_name":"lpattack-vis-pris"}],[184418335,{"idx":31,"name":"t-citywide-met-strp01","tpage_name":"stadiuma-vis-tfrag"}],[190644235,{"idx":11,"name":"veger-coatclips","tpage_name":"templee-pris2"}],[170721355,{"idx":75,"name":"citywide-palace-01","tpage_name":"lcitysml-tfrag"}],[171966535,{"idx":71,"name":"spider-allfur-dark","tpage_name":"templea-vis-pris2"}],[188022830,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"lvincst-pris"}],[195493910,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"towercst-pris"}],[212860928,{"idx":0,"name":"mech-flame","tpage_name":"ltowera-sprite"}],[173015064,{"idx":24,"name":"precur-light-green-02","tpage_name":"precurc-vis-tfrag"}],[171769884,{"idx":28,"name":"daxtertuft","tpage_name":"templea-vis-pris"}],[220528779,{"idx":139,"name":"farmer-headband","tpage_name":"museum4-pris"}],[173015063,{"idx":23,"name":"precur-frame-small-01","tpage_name":"precurc-vis-tfrag"}],[171769883,{"idx":27,"name":"daxterteeth","tpage_name":"templea-vis-pris"}],[220528778,{"idx":138,"name":"farmer-hat-02","tpage_name":"museum4-pris"}],[220528777,{"idx":137,"name":"farmer-hat","tpage_name":"museum4-pris"}],[220528776,{"idx":136,"name":"farmer-hair","tpage_name":"museum4-pris"}],[173015060,{"idx":20,"name":"precur-plate-pattern-01","tpage_name":"precurc-vis-tfrag"}],[171769880,{"idx":24,"name":"daxterhelmetplain","tpage_name":"templea-vis-pris"}],[220528775,{"idx":135,"name":"farmer-flesh4x4","tpage_name":"museum4-pris"}],[171769878,{"idx":22,"name":"daxtergoggles","tpage_name":"templea-vis-pris"}],[220528773,{"idx":133,"name":"farmer-fag-02","tpage_name":"museum4-pris"}],[173015057,{"idx":17,"name":"precur-plate-thin-01","tpage_name":"precurc-vis-tfrag"}],[171769877,{"idx":21,"name":"daxterfoot-bottom","tpage_name":"templea-vis-pris"}],[220528772,{"idx":132,"name":"farmer-fag-01","tpage_name":"museum4-pris"}],[173015056,{"idx":16,"name":"precur-wall-tube-02","tpage_name":"precurc-vis-tfrag"}],[171769876,{"idx":20,"name":"daxterfoot","tpage_name":"templea-vis-pris"}],[220528771,{"idx":131,"name":"farmer-belt","tpage_name":"museum4-pris"}],[171769875,{"idx":19,"name":"daxterfinger","tpage_name":"templea-vis-pris"}],[220528770,{"idx":130,"name":"explorer-vest-02","tpage_name":"museum4-pris"}],[173015054,{"idx":14,"name":"precur-rubber-01","tpage_name":"precurc-vis-tfrag"}],[171769874,{"idx":18,"name":"daxterear","tpage_name":"templea-vis-pris"}],[220528769,{"idx":129,"name":"explorer-vest-01","tpage_name":"museum4-pris"}],[173015049,{"idx":9,"name":"precur-tentacle-01","tpage_name":"precurc-vis-tfrag"}],[171769869,{"idx":13,"name":"daxter-furhilite","tpage_name":"templea-vis-pris"}],[220528764,{"idx":124,"name":"explorer-mustache","tpage_name":"museum4-pris"}],[164626468,{"idx":36,"name":"jakchires-clips","tpage_name":"railcst-pris"}],[174587908,{"idx":4,"name":"nst-egg-spider-pipe","tpage_name":"lbbspid-pris"}],[220201100,{"idx":140,"name":"jakb-pants","tpage_name":"museum3-pris"}],[214958085,{"idx":5,"name":"rub-statue-stone-01","tpage_name":"lppatrol-vis-tfrag"}],[211222545,{"idx":17,"name":"tow-wall-tentacle-02","tpage_name":"towercst-tfrag"}],[220201147,{"idx":187,"name":"samosyoung-pants","tpage_name":"museum3-pris"}],[220201099,{"idx":139,"name":"jakb-lightbrownstrap","tpage_name":"museum3-pris"}],[220201098,{"idx":138,"name":"jakb-lightbrownspat","tpage_name":"museum3-pris"}],[220201097,{"idx":137,"name":"jakb-leatherstrap","tpage_name":"museum3-pris"}],[220201096,{"idx":136,"name":"jakb-leatherpouch","tpage_name":"museum3-pris"}],[220201095,{"idx":135,"name":"jakb-jacketsleeve","tpage_name":"museum3-pris"}],[220201094,{"idx":134,"name":"jakb-jacketbody","tpage_name":"museum3-pris"}],[220201093,{"idx":133,"name":"jakb-horn","tpage_name":"museum3-pris"}],[220201092,{"idx":132,"name":"jakb-hairtrans","tpage_name":"museum3-pris"}],[220201091,{"idx":131,"name":"jakb-glovetop","tpage_name":"museum3-pris"}],[220201090,{"idx":130,"name":"jakb-facert","tpage_name":"museum3-pris"}],[220201089,{"idx":129,"name":"jakb-facelft","tpage_name":"museum3-pris"}],[220201088,{"idx":128,"name":"jakb-eyelid","tpage_name":"museum3-pris"}],[220201087,{"idx":127,"name":"jakb-eyebrow","tpage_name":"museum3-pris"}],[220201086,{"idx":126,"name":"jakb-eye","tpage_name":"museum3-pris"}],[220201085,{"idx":125,"name":"jakb-clips","tpage_name":"museum3-pris"}],[220201084,{"idx":124,"name":"jakb-brownleather","tpage_name":"museum3-pris"}],[220201083,{"idx":123,"name":"jakb-blackstrap","tpage_name":"museum3-pris"}],[209518592,{"idx":0,"name":"hud-darkeco-tower-egg","tpage_name":"lctydest-minimap"}],[172556338,{"idx":50,"name":"precur-generator-crystal-01","tpage_name":"precurb-vis-tfrag"}],[71172101,{"idx":5,"name":"pecker-tail","tpage_name":"ldampeck-pris"}],[220201192,{"idx":232,"name":"kor-wraps","tpage_name":"museum3-pris"}],[214827009,{"idx":1,"name":"flamingstick","tpage_name":"factoryc-sprite"}],[201130029,{"idx":45,"name":"prec-tess-necktrans","tpage_name":"loutro2-pris"}],[220528948,{"idx":308,"name":"gambler-spats","tpage_name":"museum4-pris"}],[198705212,{"idx":60,"name":"torn-metal2","tpage_name":"lblowcst-pris"}],[217382912,{"idx":0,"name":"fora-dirt","tpage_name":"forestx-vis-alpha"}],[214892552,{"idx":8,"name":"grunt-eye-01","tpage_name":"lppatrol-vis-pris"}],[129433612,{"idx":12,"name":"dp-text-13","tpage_name":"wasseem-sprite"}],[128188432,{"idx":16,"name":"des-burn-precursor-head-01","tpage_name":"waswide-vis-shrub"}],[205848577,{"idx":1,"name":"mhcityb-base-goo-01-dest","tpage_name":"lmhcityb-vis-tfrag"}],[135725079,{"idx":23,"name":"seem-skirt-small","tpage_name":"lseemwca-pris2"}],[208338978,{"idx":34,"name":"errolcyber-rubberpipe","tpage_name":"deserrol-pris"}],[217055238,{"idx":6,"name":"jinx-arm","tpage_name":"museum2-pris2"}],[205848576,{"idx":0,"name":"mhcityb-base-goo-01","tpage_name":"lmhcityb-vis-tfrag"}],[135725078,{"idx":22,"name":"seem-skirt","tpage_name":"lseemwca-pris2"}],[130351116,{"idx":12,"name":"des-beast-skin","tpage_name":"deshover-pris2"}],[208470020,{"idx":4,"name":"whack-scoreboard-4","tpage_name":"powergd-sprite"}],[193527860,{"idx":52,"name":"jakchires-teeth","tpage_name":"desboss2-pris"}],[90243118,{"idx":46,"name":"des-mount-02","tpage_name":"desertb-vis-tfrag"}],[208338975,{"idx":31,"name":"errolcyber-redmetal-02","tpage_name":"deserrol-pris"}],[217055235,{"idx":3,"name":"daxter-furhilite","tpage_name":"museum2-pris2"}],[130351115,{"idx":11,"name":"des-beast-nails","tpage_name":"deshover-pris2"}],[208470019,{"idx":3,"name":"whack-scoreboard-3","tpage_name":"powergd-sprite"}],[193527859,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"desboss2-pris"}],[90243117,{"idx":45,"name":"des-corral-plate-02","tpage_name":"desertb-vis-tfrag"}],[208338974,{"idx":30,"name":"errolcyber-redmetal-01","tpage_name":"deserrol-pris"}],[217055234,{"idx":2,"name":"daxter-eyelid","tpage_name":"museum2-pris2"}],[130351114,{"idx":10,"name":"des-beast-mouth","tpage_name":"deshover-pris2"}],[208470018,{"idx":2,"name":"whack-scoreboard-2","tpage_name":"powergd-sprite"}],[193527858,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"desboss2-pris"}],[90243116,{"idx":44,"name":"des-corral-metal-01","tpage_name":"desertb-vis-tfrag"}],[208338973,{"idx":29,"name":"errolcyber-pipes-03","tpage_name":"deserrol-pris"}],[217055233,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum2-pris2"}],[130351113,{"idx":9,"name":"des-beast-metal-teeth","tpage_name":"deshover-pris2"}],[208470017,{"idx":1,"name":"whack-scoreboard-1","tpage_name":"powergd-sprite"}],[193527857,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"desboss2-pris"}],[90243115,{"idx":43,"name":"des-pole-01","tpage_name":"desertb-vis-tfrag"}],[208338964,{"idx":20,"name":"errolcyber-head-01","tpage_name":"deserrol-pris"}],[214564864,{"idx":0,"name":"preship-metal-hull-03","tpage_name":"loutro3-shrub"}],[195559479,{"idx":55,"name":"sig-skirts","tpage_name":"towercst-pris2"}],[207880193,{"idx":1,"name":"terraformer-cpitwindows-02","tpage_name":"desboss1-water"}],[195493949,{"idx":61,"name":"gunbox02","tpage_name":"towercst-pris"}],[207814663,{"idx":7,"name":"rc-mnstr-target-03-silver","tpage_name":"lgunrnc-pris"}],[195493948,{"idx":60,"name":"gunbox01","tpage_name":"towercst-pris"}],[207814662,{"idx":6,"name":"rc-mnstr-target-04","tpage_name":"lgunrnc-pris"}],[195493947,{"idx":59,"name":"gunBoxFront01","tpage_name":"towercst-pris"}],[129171459,{"idx":3,"name":"sewer-brick-block-10","tpage_name":"sewn-vis-tfrag"}],[207814661,{"idx":5,"name":"rc-mnstr-target-03","tpage_name":"lgunrnc-pris"}],[195493946,{"idx":58,"name":"gunBoxBack01","tpage_name":"towercst-pris"}],[195493945,{"idx":57,"name":"grillRim01","tpage_name":"towercst-pris"}],[212926464,{"idx":0,"name":"mech-flame","tpage_name":"lformach-sprite"}],[195493944,{"idx":56,"name":"gauge01","tpage_name":"towercst-pris"}],[195493943,{"idx":55,"name":"dash01","tpage_name":"towercst-pris"}],[217055237,{"idx":5,"name":"environment-oldmetal","tpage_name":"museum2-pris2"}],[208338977,{"idx":33,"name":"errolcyber-roboeye","tpage_name":"deserrol-pris"}],[214499334,{"idx":6,"name":"onin-chain","tpage_name":"loutro3-pris"}],[127795214,{"idx":14,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"lfaccity-tfrag"}],[217055236,{"idx":4,"name":"daxterteeth","tpage_name":"museum2-pris2"}],[208338976,{"idx":32,"name":"errolcyber-redmetal-03","tpage_name":"deserrol-pris"}],[214499333,{"idx":5,"name":"onin-braclet","tpage_name":"loutro3-pris"}],[127795213,{"idx":13,"name":"palcab-lowres-ctyslum-wall-04","tpage_name":"lfaccity-tfrag"}],[217055373,{"idx":141,"name":"veger-vest","tpage_name":"museum2-pris2"}],[203096098,{"idx":34,"name":"citn-allleather-shoulder","tpage_name":"lctyass-pris"}],[208076818,{"idx":18,"name":"terraformer-organic-05","tpage_name":"desboss2-pris2"}],[220528894,{"idx":254,"name":"yelsage-lens","tpage_name":"museum4-pris"}],[202571784,{"idx":8,"name":"rail-pipe-02","tpage_name":"raila-tfrag"}],[220528988,{"idx":348,"name":"ogre-bluefur","tpage_name":"museum4-pris"}],[220528893,{"idx":253,"name":"yelsage-leatherstrapblack","tpage_name":"museum4-pris"}],[220528892,{"idx":252,"name":"yelsage-leatherstrap","tpage_name":"museum4-pris"}],[220528891,{"idx":251,"name":"yelsage-leatherbutton","tpage_name":"museum4-pris"}],[220528890,{"idx":250,"name":"yelsage-leather","tpage_name":"museum4-pris"}],[220528889,{"idx":249,"name":"yelsage-jacketwhite-02","tpage_name":"museum4-pris"}],[220528888,{"idx":248,"name":"yelsage-jacketwhite-01","tpage_name":"museum4-pris"}],[220201195,{"idx":235,"name":"samos-eye","tpage_name":"museum3-pris"}],[216072192,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"museum-pris2"}],[201130032,{"idx":48,"name":"prec-tess-nose","tpage_name":"loutro2-pris"}],[220528951,{"idx":311,"name":"geo-belt","tpage_name":"museum4-pris"}],[198705215,{"idx":63,"name":"torn-shoe","tpage_name":"lblowcst-pris"}],[214892555,{"idx":11,"name":"grunt-skin-01","tpage_name":"lppatrol-vis-pris"}],[220201194,{"idx":234,"name":"kor-wrapsdirty","tpage_name":"museum3-pris"}],[201130031,{"idx":47,"name":"prec-tess-eyelid","tpage_name":"loutro2-pris"}],[220528950,{"idx":310,"name":"gambler-vest","tpage_name":"museum4-pris"}],[198705214,{"idx":62,"name":"torn-scarf","tpage_name":"lblowcst-pris"}],[214892554,{"idx":10,"name":"grunt-metal-01","tpage_name":"lppatrol-vis-pris"}],[220201193,{"idx":233,"name":"kor-wrapsclean","tpage_name":"museum3-pris"}],[201130030,{"idx":46,"name":"prec-tess-eye","tpage_name":"loutro2-pris"}],[220528949,{"idx":309,"name":"gambler-tie","tpage_name":"museum4-pris"}],[198705213,{"idx":61,"name":"torn-pipe","tpage_name":"lblowcst-pris"}],[214892553,{"idx":9,"name":"grunt-hose","tpage_name":"lppatrol-vis-pris"}],[172556349,{"idx":61,"name":"precur-floor-large-01-lotweak","tpage_name":"precurb-vis-tfrag"}],[220201191,{"idx":231,"name":"kor-uppercaps","tpage_name":"museum3-pris"}],[214827008,{"idx":0,"name":"explosion-wave","tpage_name":"factoryc-sprite"}],[201130028,{"idx":44,"name":"prec-tess-face","tpage_name":"loutro2-pris"}],[220528947,{"idx":307,"name":"gambler-shirtsmall","tpage_name":"museum4-pris"}],[159383589,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"slumbset-pris"}],[165609489,{"idx":17,"name":"dp-robot-tentacle-01","tpage_name":"wasdefen-pris"}],[149028867,{"idx":3,"name":"gun-tip","tpage_name":"gungame1-pris"}],[198705211,{"idx":59,"name":"torn-legshield","tpage_name":"lblowcst-pris"}],[214892551,{"idx":7,"name":"dm_mine-spider-spawn-small-tube","tpage_name":"lppatrol-vis-pris"}],[129433611,{"idx":11,"name":"dp-text-12","tpage_name":"wasseem-sprite"}],[128188431,{"idx":15,"name":"des-burn-precursor-01-bottom","tpage_name":"waswide-vis-shrub"}],[172556348,{"idx":60,"name":"precur-small-plate-02","tpage_name":"precurb-vis-tfrag"}],[220201190,{"idx":230,"name":"kor-toe","tpage_name":"museum3-pris"}],[201130027,{"idx":43,"name":"prec-neck","tpage_name":"loutro2-pris"}],[220528946,{"idx":306,"name":"gambler-shirt","tpage_name":"museum4-pris"}],[149028866,{"idx":2,"name":"gun-main","tpage_name":"gungame1-pris"}],[198705210,{"idx":58,"name":"torn-handle-01","tpage_name":"lblowcst-pris"}],[214892550,{"idx":6,"name":"dm_mine-spider-spawn-hole","tpage_name":"lppatrol-vis-pris"}],[129433610,{"idx":10,"name":"dp-text-11","tpage_name":"wasseem-sprite"}],[128188430,{"idx":14,"name":"des-burn-precursor-01","tpage_name":"waswide-vis-shrub"}],[172556347,{"idx":59,"name":"environment-precur-level","tpage_name":"precurb-vis-tfrag"}],[220201189,{"idx":229,"name":"kor-stickside","tpage_name":"museum3-pris"}],[201130026,{"idx":42,"name":"daxter-eyelid","tpage_name":"loutro2-pris"}],[220528945,{"idx":305,"name":"gambler-metal","tpage_name":"museum4-pris"}],[149028865,{"idx":1,"name":"gun-laser","tpage_name":"gungame1-pris"}],[198705209,{"idx":57,"name":"torn-hair-02","tpage_name":"lblowcst-pris"}],[214892549,{"idx":5,"name":"dm_mine-spider-spawn","tpage_name":"lppatrol-vis-pris"}],[129433609,{"idx":9,"name":"dp-text-10","tpage_name":"wasseem-sprite"}],[128188429,{"idx":13,"name":"des-burn-eye-on","tpage_name":"waswide-vis-shrub"}],[172556346,{"idx":58,"name":"precur-small-plate-edge","tpage_name":"precurb-vis-tfrag"}],[220201188,{"idx":228,"name":"kor-stickend","tpage_name":"museum3-pris"}],[201130025,{"idx":41,"name":"prec-veger-sleeve","tpage_name":"loutro2-pris"}],[220528944,{"idx":304,"name":"gambler-hat","tpage_name":"museum4-pris"}],[149028864,{"idx":0,"name":"gun-barrel-alt","tpage_name":"gungame1-pris"}],[198705208,{"idx":56,"name":"torn-hair-01","tpage_name":"lblowcst-pris"}],[214892548,{"idx":4,"name":"environment-darkprec","tpage_name":"lppatrol-vis-pris"}],[172556345,{"idx":57,"name":"precur-switch-light","tpage_name":"precurb-vis-tfrag"}],[220201187,{"idx":227,"name":"kor-sleevetight","tpage_name":"museum3-pris"}],[201130024,{"idx":40,"name":"daxtertuft","tpage_name":"loutro2-pris"}],[220528943,{"idx":303,"name":"gambler-hair2","tpage_name":"museum4-pris"}],[198705207,{"idx":55,"name":"torn-gunbarrel-02","tpage_name":"lblowcst-pris"}],[214892547,{"idx":3,"name":"dm-mspider-tubes-01","tpage_name":"lppatrol-vis-pris"}],[172556344,{"idx":56,"name":"precur-bomb-spawner-hole","tpage_name":"precurb-vis-tfrag"}],[220201186,{"idx":226,"name":"kor-sleeveoutside","tpage_name":"museum3-pris"}],[201130023,{"idx":39,"name":"daxterteeth","tpage_name":"loutro2-pris"}],[220528942,{"idx":302,"name":"gambler-hair","tpage_name":"museum4-pris"}],[198705206,{"idx":54,"name":"torn-gunbarrel","tpage_name":"lblowcst-pris"}],[214892546,{"idx":2,"name":"dm-mspider-purplesac","tpage_name":"lppatrol-vis-pris"}],[172556343,{"idx":55,"name":"precur-floor-large-01","tpage_name":"precurb-vis-tfrag"}],[220201185,{"idx":225,"name":"kor-sleeveinside","tpage_name":"museum3-pris"}],[201130022,{"idx":38,"name":"daxternose","tpage_name":"loutro2-pris"}],[220528941,{"idx":301,"name":"gambler-glasses","tpage_name":"museum4-pris"}],[198705205,{"idx":53,"name":"torn-footleather","tpage_name":"lblowcst-pris"}],[214892545,{"idx":1,"name":"dm-mspider-plate-01","tpage_name":"lppatrol-vis-pris"}],[172556342,{"idx":54,"name":"precur-light-red-01","tpage_name":"precurb-vis-tfrag"}],[220201184,{"idx":224,"name":"kor-robelight","tpage_name":"museum3-pris"}],[201130021,{"idx":37,"name":"daxterlense","tpage_name":"loutro2-pris"}],[220528940,{"idx":300,"name":"gambler-cork","tpage_name":"museum4-pris"}],[198705204,{"idx":52,"name":"torn-finger","tpage_name":"lblowcst-pris"}],[214892544,{"idx":0,"name":"dm-mspider-pipe","tpage_name":"lppatrol-vis-pris"}],[172556341,{"idx":53,"name":"precur-tube-honey-big","tpage_name":"precurb-vis-tfrag"}],[220201183,{"idx":223,"name":"kor-panel","tpage_name":"museum3-pris"}],[201130020,{"idx":36,"name":"daxterhelmetplain","tpage_name":"loutro2-pris"}],[172556340,{"idx":52,"name":"precur-floor-base-01","tpage_name":"precurb-vis-tfrag"}],[71172103,{"idx":7,"name":"pecker-wingbottom","tpage_name":"ldampeck-pris"}],[220201182,{"idx":222,"name":"kor-lowercaps","tpage_name":"museum3-pris"}],[201130019,{"idx":35,"name":"daxterheadwidenew","tpage_name":"loutro2-pris"}],[172556339,{"idx":51,"name":"precur-trim-01","tpage_name":"precurb-vis-tfrag"}],[71172102,{"idx":6,"name":"pecker-teeth","tpage_name":"ldampeck-pris"}],[220201181,{"idx":221,"name":"kor-leatherstrap","tpage_name":"museum3-pris"}],[201130018,{"idx":34,"name":"daxtergoggles","tpage_name":"loutro2-pris"}],[220201180,{"idx":220,"name":"kor-jewellight","tpage_name":"museum3-pris"}],[201130017,{"idx":33,"name":"daxterbolt","tpage_name":"loutro2-pris"}],[172556337,{"idx":49,"name":"precur-wall-tube-03","tpage_name":"precurb-vis-tfrag"}],[71172100,{"idx":4,"name":"pecker-plume","tpage_name":"ldampeck-pris"}],[220201179,{"idx":219,"name":"kor-jeweldark","tpage_name":"museum3-pris"}],[201130016,{"idx":32,"name":"daxter-pants","tpage_name":"loutro2-pris"}],[105054311,{"idx":103,"name":"intcept-base-patern01","tpage_name":"desoasis-pris"}],[112525391,{"idx":79,"name":"jakc-scarfhanging","tpage_name":"desrescc-pris"}],[172556336,{"idx":48,"name":"precur-light-green-big","tpage_name":"precurb-vis-tfrag"}],[71172099,{"idx":3,"name":"pecker-face","tpage_name":"ldampeck-pris"}],[220201178,{"idx":218,"name":"kor-hood","tpage_name":"museum3-pris"}],[201130015,{"idx":31,"name":"daxter-orange","tpage_name":"loutro2-pris"}],[105054310,{"idx":102,"name":"intcept-base-green01","tpage_name":"desoasis-pris"}],[112525390,{"idx":78,"name":"jakc-skirt","tpage_name":"desrescc-pris"}],[220528972,{"idx":332,"name":"minetall-birdfoot","tpage_name":"museum4-pris"}],[201130012,{"idx":28,"name":"prec-leader-headshield","tpage_name":"loutro2-pris"}],[209846272,{"idx":0,"name":"cty-roboscreen-dest","tpage_name":"foresta-warp"}],[201130011,{"idx":27,"name":"prec-leader-foreheadshield","tpage_name":"loutro2-pris"}],[207355911,{"idx":7,"name":"grunt-vector-trail-01","tpage_name":"powergd-water"}],[216662031,{"idx":15,"name":"keira-handbottom","tpage_name":"outcast3-pris"}],[195493971,{"idx":83,"name":"mhcity-tower-door-metal-01","tpage_name":"towercst-pris"}],[215416851,{"idx":19,"name":"facb_blue-metal-02","tpage_name":"lfacout-vis-tfrag"}],[201130010,{"idx":26,"name":"prec-handpalm","tpage_name":"loutro2-pris"}],[207355910,{"idx":6,"name":"pow-pow-ring-red-07","tpage_name":"powergd-water"}],[143458312,{"idx":8,"name":"rail-edge-01","tpage_name":"combb-tfrag"}],[122290252,{"idx":76,"name":"kgfighter-trim-01","tpage_name":"factoryb-vis-pris"}],[137232412,{"idx":28,"name":"jakc-wraps","tpage_name":"citycast-pris"}],[216662030,{"idx":14,"name":"keira-hair-newest","tpage_name":"outcast3-pris"}],[195493970,{"idx":82,"name":"mhcity-tower-door-frame-01","tpage_name":"towercst-pris"}],[215416850,{"idx":18,"name":"fac-tower-pipe-01","tpage_name":"lfacout-vis-tfrag"}],[201130009,{"idx":25,"name":"prec-hand-back","tpage_name":"loutro2-pris"}],[207355909,{"idx":5,"name":"pow-pow-ring-red-06","tpage_name":"powergd-water"}],[143458311,{"idx":7,"name":"rail-env-car-01","tpage_name":"combb-tfrag"}],[122290251,{"idx":75,"name":"kgfighter-lod02-top","tpage_name":"factoryb-vis-pris"}],[137232411,{"idx":27,"name":"jakc-waistband2","tpage_name":"citycast-pris"}],[195493969,{"idx":81,"name":"mhcity-grunt-egg-horns-01","tpage_name":"towercst-pris"}],[216662029,{"idx":13,"name":"keira-gogglestrap","tpage_name":"outcast3-pris"}],[215416849,{"idx":17,"name":"facb-light-01","tpage_name":"lfacout-vis-tfrag"}],[220201171,{"idx":211,"name":"kor-bootsole","tpage_name":"museum3-pris"}],[207355908,{"idx":4,"name":"pow-pow-ring-red-05","tpage_name":"powergd-water"}],[201130008,{"idx":24,"name":"prec-dumb-sleeve","tpage_name":"loutro2-pris"}],[105054303,{"idx":95,"name":"marauder-skin","tpage_name":"desoasis-pris"}],[112525383,{"idx":71,"name":"jakchires-lightbrownspat","tpage_name":"desrescc-pris"}],[220201170,{"idx":210,"name":"kor-boot","tpage_name":"museum3-pris"}],[207355907,{"idx":3,"name":"pow-pow-ring-red-04","tpage_name":"powergd-water"}],[201130007,{"idx":23,"name":"prec-dumb-shirt","tpage_name":"loutro2-pris"}],[74579991,{"idx":23,"name":"sewer-metal-block-06","tpage_name":"sewm-vis-tfrag"}],[60883011,{"idx":67,"name":"mine-red-big-metal-01","tpage_name":"mineb-vis-pris"}],[220201169,{"idx":209,"name":"kor-belt","tpage_name":"museum3-pris"}],[207355906,{"idx":2,"name":"pow-pow-ring-red-03","tpage_name":"powergd-water"}],[201130006,{"idx":22,"name":"prec-dumb-pants","tpage_name":"loutro2-pris"}],[60883010,{"idx":66,"name":"mine-pipe-metal-01","tpage_name":"mineb-vis-pris"}],[105054301,{"idx":93,"name":"marauder-metal-plate","tpage_name":"desoasis-pris"}],[112525381,{"idx":69,"name":"jakchires-jacket","tpage_name":"desrescc-pris"}],[172556326,{"idx":38,"name":"common-black","tpage_name":"precurb-vis-tfrag"}],[220201168,{"idx":208,"name":"kor-bag3","tpage_name":"museum3-pris"}],[207355905,{"idx":1,"name":"pow-pow-ring-red-02","tpage_name":"powergd-water"}],[201130005,{"idx":21,"name":"prec-dumb-helmet","tpage_name":"loutro2-pris"}],[105054300,{"idx":92,"name":"marauder-metal-mask","tpage_name":"desoasis-pris"}],[112525380,{"idx":68,"name":"jakchires-horn","tpage_name":"desrescc-pris"}],[172556325,{"idx":37,"name":"precur-wall-blade-01","tpage_name":"precurb-vis-tfrag"}],[220201167,{"idx":207,"name":"kor-bag2","tpage_name":"museum3-pris"}],[207355904,{"idx":0,"name":"pow-pow-ring-red-01","tpage_name":"powergd-water"}],[201130004,{"idx":20,"name":"prec-tess-sleeve","tpage_name":"loutro2-pris"}],[105054299,{"idx":91,"name":"marauder-leather-strap","tpage_name":"desoasis-pris"}],[112525379,{"idx":67,"name":"jakchires-hair","tpage_name":"desrescc-pris"}],[172556324,{"idx":36,"name":"precur-blue-light-02","tpage_name":"precurb-vis-tfrag"}],[220201166,{"idx":206,"name":"kor-bag1","tpage_name":"museum3-pris"}],[201130003,{"idx":19,"name":"prec-tess-shirtstraps","tpage_name":"loutro2-pris"}],[105054298,{"idx":90,"name":"marauder-leather-part","tpage_name":"desoasis-pris"}],[112525378,{"idx":66,"name":"jakchires-glovetop","tpage_name":"desrescc-pris"}],[172556323,{"idx":35,"name":"precur-pipe-round-01","tpage_name":"precurb-vis-tfrag"}],[201130002,{"idx":18,"name":"prec-tess-shirt","tpage_name":"loutro2-pris"}],[105054297,{"idx":89,"name":"marauder-leather-handle","tpage_name":"desoasis-pris"}],[112525377,{"idx":65,"name":"jakchires-facert","tpage_name":"desrescc-pris"}],[201130001,{"idx":17,"name":"prec-tess-scarf","tpage_name":"loutro2-pris"}],[105054296,{"idx":88,"name":"marauder-leather-buckle","tpage_name":"desoasis-pris"}],[112525376,{"idx":64,"name":"jakchires-facelft","tpage_name":"desrescc-pris"}],[172556321,{"idx":33,"name":"precur-nail-02","tpage_name":"precurb-vis-tfrag"}],[201130000,{"idx":16,"name":"prec-tess-pantsfront","tpage_name":"loutro2-pris"}],[105054295,{"idx":87,"name":"marauder-leather-brown","tpage_name":"desoasis-pris"}],[112525375,{"idx":63,"name":"jakchires-eyelid","tpage_name":"desrescc-pris"}],[181272580,{"idx":4,"name":"hud-wasdoors-health","tpage_name":"desjump-minimap"}],[172556320,{"idx":32,"name":"precur-road-plate-01","tpage_name":"precurb-vis-tfrag"}],[201129999,{"idx":15,"name":"prec-tess-pantscuff","tpage_name":"loutro2-pris"}],[105054294,{"idx":86,"name":"marauder-leather-brnstrap","tpage_name":"desoasis-pris"}],[112525374,{"idx":62,"name":"jakchires-eyebrow","tpage_name":"desrescc-pris"}],[181272579,{"idx":3,"name":"hud-catapult-01","tpage_name":"desjump-minimap"}],[172556319,{"idx":31,"name":"precur-engine-frame-01","tpage_name":"precurb-vis-tfrag"}],[201129997,{"idx":13,"name":"prec-tess-headband","tpage_name":"loutro2-pris"}],[201129996,{"idx":12,"name":"prec-tess-hair","tpage_name":"loutro2-pris"}],[172556316,{"idx":28,"name":"precur-container-plate-01","tpage_name":"precurb-vis-tfrag"}],[201129995,{"idx":11,"name":"prec-tess-glove","tpage_name":"loutro2-pris"}],[220201149,{"idx":189,"name":"samosyoung-vest","tpage_name":"museum3-pris"}],[201129986,{"idx":2,"name":"daxterarm","tpage_name":"loutro2-pris"}],[74579970,{"idx":2,"name":"sewer-metal-block-02-small","tpage_name":"sewm-vis-tfrag"}],[60882990,{"idx":46,"name":"min-rust-01","tpage_name":"mineb-vis-pris"}],[11141124,{"idx":4,"name":"sign-baron","tpage_name":"ctyslumc-sprite"}],[112525361,{"idx":49,"name":"jakc-gogglemetal","tpage_name":"desrescc-pris"}],[172556306,{"idx":18,"name":"precur-plate-plain-01","tpage_name":"precurb-vis-tfrag"}],[71303172,{"idx":4,"name":"sig-eye","tpage_name":"ldamsig-pris2"}],[48889932,{"idx":76,"name":"sewer-flat-pipe-01-hitweak","tpage_name":"sewd-vis-tfrag"}],[220201148,{"idx":188,"name":"samosyoung-shirt","tpage_name":"museum3-pris"}],[201129985,{"idx":1,"name":"daxter-furhilite","tpage_name":"loutro2-pris"}],[74579969,{"idx":1,"name":"sewer-mantel-01","tpage_name":"sewm-vis-tfrag"}],[60882989,{"idx":45,"name":"min-rat-mesh-01","tpage_name":"mineb-vis-pris"}],[11141123,{"idx":3,"name":"sign-square-b","tpage_name":"ctyslumc-sprite"}],[112525360,{"idx":48,"name":"jakc-chestplate-straps","tpage_name":"desrescc-pris"}],[201129984,{"idx":0,"name":"bam-hairhilite","tpage_name":"loutro2-pris"}],[11141122,{"idx":2,"name":"sign-future-slumc","tpage_name":"ctyslumc-sprite"}],[220528953,{"idx":313,"name":"geo-buckle","tpage_name":"museum4-pris"}],[198705217,{"idx":65,"name":"torn-vest","tpage_name":"lblowcst-pris"}],[214892557,{"idx":13,"name":"grunt-skin-03","tpage_name":"lppatrol-vis-pris"}],[198443054,{"idx":46,"name":"des-low-sand-brown-big","tpage_name":"hangb-vis-tfrag"}],[220528952,{"idx":312,"name":"geo-braid","tpage_name":"museum4-pris"}],[198705216,{"idx":64,"name":"torn-shoe-02","tpage_name":"lblowcst-pris"}],[214892556,{"idx":12,"name":"grunt-skin-02","tpage_name":"lppatrol-vis-pris"}],[198443053,{"idx":45,"name":"des-low-sand-brown-01","tpage_name":"hangb-vis-tfrag"}],[223805501,{"idx":61,"name":"krew-loop2","tpage_name":"museum3b-pris"}],[213844061,{"idx":93,"name":"king-precursermetal-plain-small","tpage_name":"lpattack-vis-pris"}],[223805500,{"idx":60,"name":"krew-loop","tpage_name":"museum3b-pris"}],[213844060,{"idx":92,"name":"king-lgblackstrap-small","tpage_name":"lpattack-vis-pris"}],[223805499,{"idx":59,"name":"krew-light","tpage_name":"museum3b-pris"}],[213844059,{"idx":91,"name":"king-leg-small","tpage_name":"lpattack-vis-pris"}],[172556315,{"idx":27,"name":"precur-plate-pattern-01","tpage_name":"precurb-vis-tfrag"}],[220528995,{"idx":355,"name":"ogre-furtrans2","tpage_name":"museum4-pris"}],[201129994,{"idx":10,"name":"prec-tess-emblem","tpage_name":"loutro2-pris"}],[198639634,{"idx":18,"name":"tpl-wing03","tpage_name":"hanga-vis-pris"}],[129171461,{"idx":5,"name":"sewer-brick-block-04","tpage_name":"sewn-vis-tfrag"}],[130416641,{"idx":1,"name":"vol-metal-01","tpage_name":"volcanox-shrub"}],[172556314,{"idx":26,"name":"precur-plate-honey-01","tpage_name":"precurb-vis-tfrag"}],[11141131,{"idx":11,"name":"sign-tall-b","tpage_name":"ctyslumc-sprite"}],[220528994,{"idx":354,"name":"ogre-furtrans","tpage_name":"museum4-pris"}],[201129993,{"idx":9,"name":"prec-tess-belt2","tpage_name":"loutro2-pris"}],[198639633,{"idx":17,"name":"tpl-wing01","tpage_name":"hanga-vis-pris"}],[129171460,{"idx":4,"name":"sewer-brick-block-02","tpage_name":"sewn-vis-tfrag"}],[130416640,{"idx":0,"name":"vol-shrub-grass","tpage_name":"volcanox-shrub"}],[11141130,{"idx":10,"name":"sign-tall-a","tpage_name":"ctyslumc-sprite"}],[220528993,{"idx":353,"name":"ogre-furlong","tpage_name":"museum4-pris"}],[201129992,{"idx":8,"name":"prec-tess-belt","tpage_name":"loutro2-pris"}],[198639632,{"idx":16,"name":"tpl-rut01","tpage_name":"hanga-vis-pris"}],[172556312,{"idx":24,"name":"precur-wall-tube-02","tpage_name":"precurb-vis-tfrag"}],[11141129,{"idx":9,"name":"sign-hiphog","tpage_name":"ctyslumc-sprite"}],[220528992,{"idx":352,"name":"ogre-eye","tpage_name":"museum4-pris"}],[201129991,{"idx":7,"name":"daxterfoot-bottom","tpage_name":"loutro2-pris"}],[198639631,{"idx":15,"name":"tpl-glider-wood03","tpage_name":"hanga-vis-pris"}],[172556311,{"idx":23,"name":"precur-tubes-bundle-02","tpage_name":"precurb-vis-tfrag"}],[11141128,{"idx":8,"name":"sign-happy-pirate","tpage_name":"ctyslumc-sprite"}],[112525365,{"idx":53,"name":"jakc-wraps","tpage_name":"desrescc-pris"}],[220528991,{"idx":351,"name":"ogre-claw","tpage_name":"museum4-pris"}],[201129990,{"idx":6,"name":"daxterfoot","tpage_name":"loutro2-pris"}],[198639630,{"idx":14,"name":"tpl-glider-precursor01","tpage_name":"hanga-vis-pris"}],[172556310,{"idx":22,"name":"precur-platform-plate","tpage_name":"precurb-vis-tfrag"}],[11141127,{"idx":7,"name":"sign-gt2","tpage_name":"ctyslumc-sprite"}],[112525364,{"idx":52,"name":"jakc-waistband2","tpage_name":"desrescc-pris"}],[220528990,{"idx":350,"name":"ogre-brownleather","tpage_name":"museum4-pris"}],[201129989,{"idx":5,"name":"daxterfinger","tpage_name":"loutro2-pris"}],[198639629,{"idx":13,"name":"tpl-glider-metal02","tpage_name":"hanga-vis-pris"}],[172556309,{"idx":21,"name":"precur-wall-tube-01","tpage_name":"precurb-vis-tfrag"}],[71303175,{"idx":7,"name":"sig-facert","tpage_name":"ldamsig-pris2"}],[48889935,{"idx":79,"name":"sewer-brick-block-04-hitweak","tpage_name":"sewd-vis-tfrag"}],[11141126,{"idx":6,"name":"sign-crimson","tpage_name":"ctyslumc-sprite"}],[112525363,{"idx":51,"name":"jakc-scarf","tpage_name":"desrescc-pris"}],[201129988,{"idx":4,"name":"daxterear","tpage_name":"loutro2-pris"}],[198639628,{"idx":12,"name":"tpl-glider-metal01","tpage_name":"hanga-vis-pris"}],[172556308,{"idx":20,"name":"precur-tentacle-01","tpage_name":"precurb-vis-tfrag"}],[71303174,{"idx":6,"name":"sig-faceleft","tpage_name":"ldamsig-pris2"}],[48889934,{"idx":78,"name":"sewer-lip-01-hitweak","tpage_name":"sewd-vis-tfrag"}],[220201150,{"idx":190,"name":"vin-teeth-01","tpage_name":"museum3-pris"}],[11141125,{"idx":5,"name":"sign-blank","tpage_name":"ctyslumc-sprite"}],[112525362,{"idx":50,"name":"jakc-lens","tpage_name":"desrescc-pris"}],[201129987,{"idx":3,"name":"daxterbodyshort-eix","tpage_name":"loutro2-pris"}],[198639627,{"idx":11,"name":"tpl-glider-grip01","tpage_name":"hanga-vis-pris"}],[220528979,{"idx":339,"name":"minetall-overallbutton","tpage_name":"museum4-pris"}],[198639618,{"idx":2,"name":"des-glider-ring-yellow","tpage_name":"hanga-vis-pris"}],[220528978,{"idx":338,"name":"minetall-leggings","tpage_name":"museum4-pris"}],[198639617,{"idx":1,"name":"des-glider-ring-deco","tpage_name":"hanga-vis-pris"}],[220528977,{"idx":337,"name":"minetall-leatherstrap","tpage_name":"museum4-pris"}],[198639616,{"idx":0,"name":"des-burn-precursor-01","tpage_name":"hanga-vis-pris"}],[220529001,{"idx":361,"name":"ogre-pipe","tpage_name":"museum4-pris"}],[198574138,{"idx":58,"name":"des-low-sand-green-01","tpage_name":"hanga-vis-tfrag"}],[216006658,{"idx":2,"name":"environment-oldmetal","tpage_name":"museum-pris"}],[220529000,{"idx":360,"name":"ogre-nose","tpage_name":"museum4-pris"}],[129368083,{"idx":19,"name":"rub-crater-shards-01","tpage_name":"stadiumb-vis-shrub"}],[126877723,{"idx":27,"name":"lfacrm-girder-01","tpage_name":"lfacrm1-tfrag"}],[134348803,{"idx":3,"name":"lava-drop-04","tpage_name":"volcanoa-sprite"}],[198574137,{"idx":57,"name":"des-low-sand-grey-02","tpage_name":"hanga-vis-tfrag"}],[216006657,{"idx":1,"name":"bam-hairhilite","tpage_name":"museum-pris"}],[220528999,{"idx":359,"name":"ogre-ltmetal","tpage_name":"museum4-pris"}],[129368082,{"idx":18,"name":"rub-ground-01-small","tpage_name":"stadiumb-vis-shrub"}],[126877722,{"idx":26,"name":"lfacrm-oilcap-01","tpage_name":"lfacrm1-tfrag"}],[134348802,{"idx":2,"name":"lava-drop-03","tpage_name":"volcanoa-sprite"}],[198574136,{"idx":56,"name":"des-low-sand-green-02","tpage_name":"hanga-vis-tfrag"}],[216006656,{"idx":0,"name":"bam-eyelight","tpage_name":"museum-pris"}],[219480074,{"idx":10,"name":"inv-car-fox-02","tpage_name":"progress-minimap2"}],[216989714,{"idx":18,"name":"errolcyber-bigshoulder","tpage_name":"museum2-pris"}],[221970434,{"idx":2,"name":"gen-03","tpage_name":"precurd-sprite"}],[198443059,{"idx":51,"name":"des-low-sand-green-02","tpage_name":"hangb-vis-tfrag"}],[219480073,{"idx":9,"name":"inv-car-fox-01","tpage_name":"progress-minimap2"}],[216989713,{"idx":17,"name":"errolcyber-bighand-01","tpage_name":"museum2-pris"}],[221970433,{"idx":1,"name":"gen-02","tpage_name":"precurd-sprite"}],[198443058,{"idx":50,"name":"des-low-sand-green-03","tpage_name":"hangb-vis-tfrag"}],[219480072,{"idx":8,"name":"inv-bgun-common","tpage_name":"progress-minimap2"}],[216989712,{"idx":16,"name":"errocyber-faceflesh","tpage_name":"museum2-pris"}],[214499352,{"idx":24,"name":"onin-toe","tpage_name":"loutro3-pris"}],[221970432,{"idx":0,"name":"gen-01","tpage_name":"precurd-sprite"}],[198443057,{"idx":49,"name":"des-low-sand-green-01","tpage_name":"hangb-vis-tfrag"}],[208142343,{"idx":7,"name":"terraformer-metal-05","tpage_name":"desboss1-pris2"}],[194445363,{"idx":51,"name":"daxterteeth","tpage_name":"gridcst-pris"}],[220528682,{"idx":42,"name":"billy-shirt","tpage_name":"museum4-pris"}],[223019042,{"idx":34,"name":"rail-cord-01","tpage_name":"rublcst-vis-tfrag"}],[208142342,{"idx":6,"name":"terraformer-metal-04","tpage_name":"desboss1-pris2"}],[175767662,{"idx":110,"name":"prec-leader-robe-01","tpage_name":"loutro-pris"}],[194445362,{"idx":50,"name":"daxternose","tpage_name":"gridcst-pris"}],[220528681,{"idx":41,"name":"billy-pants","tpage_name":"museum4-pris"}],[223019041,{"idx":33,"name":"rail-trim-01","tpage_name":"rublcst-vis-tfrag"}],[208142341,{"idx":5,"name":"terraformer-metal-03","tpage_name":"desboss1-pris2"}],[194445361,{"idx":49,"name":"daxterlense","tpage_name":"gridcst-pris"}],[220528680,{"idx":40,"name":"billy-jugtop","tpage_name":"museum4-pris"}],[223019040,{"idx":32,"name":"rail-light-blue-small","tpage_name":"rublcst-vis-tfrag"}],[60817420,{"idx":12,"name":"minc-blue-paint-rust04","tpage_name":"mineb-vis-shrub"}],[49610800,{"idx":48,"name":"sewer-metal-floor-01","tpage_name":"sewf-vis-tfrag"}],[195559484,{"idx":60,"name":"torn-armor","tpage_name":"towercst-pris2"}],[214237184,{"idx":0,"name":"kg-rob-target-01","tpage_name":"lctyprot-sprite"}],[170721341,{"idx":61,"name":"t-strip-lo-palsup-panel-3","tpage_name":"lcitysml-tfrag"}],[184418321,{"idx":17,"name":"common-black","tpage_name":"stadiuma-vis-tfrag"}],[170721297,{"idx":17,"name":"palcab-steel-lores","tpage_name":"lcitysml-tfrag"}],[195493984,{"idx":96,"name":"gun-purple-glow","tpage_name":"towercst-pris"}],[216662044,{"idx":28,"name":"torn-armor","tpage_name":"outcast3-pris"}],[222887944,{"idx":8,"name":"palcab-lowres-ctyslum-roof-03","tpage_name":"lfacctyb-vis-tfrag"}],[215416864,{"idx":32,"name":"fac-tower-01","tpage_name":"lfacout-vis-tfrag"}],[195493983,{"idx":95,"name":"gun-main","tpage_name":"towercst-pris"}],[216662043,{"idx":27,"name":"torn-armlft","tpage_name":"outcast3-pris"}],[222887943,{"idx":7,"name":"palcab-lowres-ctyslum-ground","tpage_name":"lfacctyb-vis-tfrag"}],[215416863,{"idx":31,"name":"fac-tower-pipe-03","tpage_name":"lfacout-vis-tfrag"}],[195493982,{"idx":94,"name":"gun-dark-mag","tpage_name":"towercst-pris"}],[216662042,{"idx":26,"name":"keira-torch-nozzle-02","tpage_name":"outcast3-pris"}],[222887942,{"idx":6,"name":"palcab-lowres-ctywide-wall-02","tpage_name":"lfacctyb-vis-tfrag"}],[215416862,{"idx":30,"name":"facb_redmetal-d-01","tpage_name":"lfacout-vis-tfrag"}],[222887941,{"idx":5,"name":"palcab-lowres-background-rocksnow","tpage_name":"lfacctyb-vis-tfrag"}],[195493981,{"idx":93,"name":"wing02grey01","tpage_name":"towercst-pris"}],[216662041,{"idx":25,"name":"keira-torch-nozzle-01","tpage_name":"outcast3-pris"}],[215416861,{"idx":29,"name":"facb-metal-grill-01","tpage_name":"lfacout-vis-tfrag"}],[222887940,{"idx":4,"name":"palcab-lowres-background-rocksnow2","tpage_name":"lfacctyb-vis-tfrag"}],[195493980,{"idx":92,"name":"wing02","tpage_name":"towercst-pris"}],[216662040,{"idx":24,"name":"keira-torch-guard-01","tpage_name":"outcast3-pris"}],[215416860,{"idx":28,"name":"facb-spotlight","tpage_name":"lfacout-vis-tfrag"}],[50724879,{"idx":15,"name":"fora-precursor-metal-plain-01","tpage_name":"foresta-vis-pris"}],[49479699,{"idx":19,"name":"sewer-water-highlight-01-e","tpage_name":"sewe-vis-water"}],[195493979,{"idx":91,"name":"wing01","tpage_name":"towercst-pris"}],[216662039,{"idx":23,"name":"keira-shoebottom","tpage_name":"outcast3-pris"}],[222887939,{"idx":3,"name":"palcab-lowres-background-crater-bottom-enviro","tpage_name":"lfacctyb-vis-tfrag"}],[215416859,{"idx":27,"name":"facb_dec-metal-01","tpage_name":"lfacout-vis-tfrag"}],[216662038,{"idx":22,"name":"keira-shirt","tpage_name":"outcast3-pris"}],[195493978,{"idx":90,"name":"turret01","tpage_name":"towercst-pris"}],[222887938,{"idx":2,"name":"palcab-lowres-ctywide-wall-01","tpage_name":"lfacctyb-vis-tfrag"}],[215416858,{"idx":26,"name":"facb-big-metal-panl01","tpage_name":"lfacout-vis-tfrag"}],[216662037,{"idx":21,"name":"keira-pantslarge","tpage_name":"outcast3-pris"}],[195493977,{"idx":89,"name":"stripe03","tpage_name":"towercst-pris"}],[222887937,{"idx":1,"name":"strip-metal-02-lores","tpage_name":"lfacctyb-vis-tfrag"}],[215416857,{"idx":25,"name":"fac-tower-door-02","tpage_name":"lfacout-vis-tfrag"}],[216662036,{"idx":20,"name":"keira-maskbolt","tpage_name":"outcast3-pris"}],[195493976,{"idx":88,"name":"seat01","tpage_name":"towercst-pris"}],[215416856,{"idx":24,"name":"fac-tower-08","tpage_name":"lfacout-vis-tfrag"}],[222887936,{"idx":0,"name":"palcab-lowres-background-hills-01","tpage_name":"lfacctyb-vis-tfrag"}],[216662035,{"idx":19,"name":"keira-lens-large","tpage_name":"outcast3-pris"}],[195493975,{"idx":87,"name":"rail01","tpage_name":"towercst-pris"}],[215416855,{"idx":23,"name":"fac-tower-door-03","tpage_name":"lfacout-vis-tfrag"}],[216662034,{"idx":18,"name":"keira-largewraps","tpage_name":"outcast3-pris"}],[195493974,{"idx":86,"name":"post01","tpage_name":"towercst-pris"}],[215416854,{"idx":22,"name":"facb-beam01","tpage_name":"lfacout-vis-tfrag"}],[216662033,{"idx":17,"name":"keira-iris-64x64","tpage_name":"outcast3-pris"}],[195493973,{"idx":85,"name":"mhcity-wall-tentacle-01","tpage_name":"towercst-pris"}],[215416853,{"idx":21,"name":"facb_redmetal-d-02","tpage_name":"lfacout-vis-tfrag"}],[216662032,{"idx":16,"name":"keira-handtop","tpage_name":"outcast3-pris"}],[195493972,{"idx":84,"name":"mhcity-vein-01","tpage_name":"towercst-pris"}],[215416852,{"idx":20,"name":"facb_dec-metal-03","tpage_name":"lfacout-vis-tfrag"}],[195559446,{"idx":22,"name":"jinx-iris","tpage_name":"towercst-pris2"}],[206241794,{"idx":2,"name":"mhcity-grunt-egg-gem-01","tpage_name":"lctydest-tfrag"}],[188809274,{"idx":58,"name":"facc-metal-ring-03","tpage_name":"factoryd-vis-tfrag"}],[170131574,{"idx":118,"name":"pecker-wingbottom","tpage_name":"outrocst-pris"}],[188809273,{"idx":57,"name":"facd-darkmaker-tentacle-01","tpage_name":"factoryd-vis-tfrag"}],[206241793,{"idx":1,"name":"mhcity-grunt-egg-rim-01","tpage_name":"lctydest-tfrag"}],[170131573,{"idx":117,"name":"pecker-teeth","tpage_name":"outrocst-pris"}],[153354241,{"idx":1,"name":"mhcity-de-door-skin-02","tpage_name":"mhcitya-vis-pris"}],[134676541,{"idx":61,"name":"rub-palace-tower-side","tpage_name":"rubblec-vis-tfrag"}],[150863881,{"idx":9,"name":"daxterfinger","tpage_name":"towerc-pris"}],[188809272,{"idx":56,"name":"facd-darkmaker-web-01","tpage_name":"factoryd-vis-tfrag"}],[206241792,{"idx":0,"name":"mhcity-de-tower-puff-01","tpage_name":"lctydest-tfrag"}],[202506252,{"idx":12,"name":"comb-pre-metal-fade-plain","tpage_name":"raila-alpha"}],[170131572,{"idx":116,"name":"pecker-tail","tpage_name":"outrocst-pris"}],[153354240,{"idx":0,"name":"mhcity-de-door-skin-01","tpage_name":"mhcitya-vis-pris"}],[134676540,{"idx":60,"name":"rub-wall-side-beam-02","tpage_name":"rubblec-vis-tfrag"}],[150863880,{"idx":8,"name":"daxterear","tpage_name":"towerc-pris"}],[188809271,{"idx":55,"name":"facd-darkmaker-metal-01","tpage_name":"factoryd-vis-tfrag"}],[202506251,{"idx":11,"name":"comb-pre-metal-01-plain","tpage_name":"raila-alpha"}],[170131571,{"idx":115,"name":"pecker-plume","tpage_name":"outrocst-pris"}],[150863879,{"idx":7,"name":"daxterbolt","tpage_name":"towerc-pris"}],[188809270,{"idx":54,"name":"facd-tubes-segment-02","tpage_name":"factoryd-vis-tfrag"}],[202506250,{"idx":10,"name":"comb-pre-metal-fade-yellow","tpage_name":"raila-alpha"}],[170131570,{"idx":114,"name":"pecker-face","tpage_name":"outrocst-pris"}],[188809269,{"idx":53,"name":"facd-tubing-01","tpage_name":"factoryd-vis-tfrag"}],[202506249,{"idx":9,"name":"comb-pre-metal-01-yellow","tpage_name":"raila-alpha"}],[170131569,{"idx":113,"name":"pecker-eyelid","tpage_name":"outrocst-pris"}],[188809268,{"idx":52,"name":"facd-wires-01","tpage_name":"factoryd-vis-tfrag"}],[170131568,{"idx":112,"name":"pecker-body-01","tpage_name":"outrocst-pris"}],[188809245,{"idx":29,"name":"facc-redstriping-01-hitweak","tpage_name":"factoryd-vis-tfrag"}],[170131545,{"idx":89,"name":"klever-widebrownstrap","tpage_name":"outrocst-pris"}],[195035145,{"idx":9,"name":"stadiumb-hud-ord-er","tpage_name":"desrally-minimap"}],[173867085,{"idx":77,"name":"errolcyber-greyknobs","tpage_name":"ltowerb-vis-pris"}],[188809244,{"idx":28,"name":"facc-redstriping-01","tpage_name":"factoryd-vis-tfrag"}],[170131544,{"idx":88,"name":"klever-undershirt","tpage_name":"outrocst-pris"}],[195035144,{"idx":8,"name":"stadiumb-hud-ord-e","tpage_name":"desrally-minimap"}],[173867084,{"idx":76,"name":"errolcyber-glovepalm","tpage_name":"ltowerb-vis-pris"}],[188809243,{"idx":27,"name":"facc-metal-panel-09","tpage_name":"factoryd-vis-tfrag"}],[170131543,{"idx":87,"name":"klever-thighs","tpage_name":"outrocst-pris"}],[195035143,{"idx":7,"name":"stadiumb-hud-nmbr-08","tpage_name":"desrally-minimap"}],[173867083,{"idx":75,"name":"errolcyber-fingers","tpage_name":"ltowerb-vis-pris"}],[188809242,{"idx":26,"name":"facc-big-metal-panl02","tpage_name":"factoryd-vis-tfrag"}],[170131542,{"idx":86,"name":"klever-skirtlight","tpage_name":"outrocst-pris"}],[195035142,{"idx":6,"name":"stadiumb-hud-nmbr-07","tpage_name":"desrally-minimap"}],[173867082,{"idx":74,"name":"errolcyber-dirtymetal","tpage_name":"ltowerb-vis-pris"}],[188809241,{"idx":25,"name":"facc-pipe-04","tpage_name":"factoryd-vis-tfrag"}],[170131541,{"idx":85,"name":"klever-skirtdark","tpage_name":"outrocst-pris"}],[195035141,{"idx":5,"name":"stadiumb-hud-nmbr-06","tpage_name":"desrally-minimap"}],[173867081,{"idx":73,"name":"errolcyber-chestplate","tpage_name":"ltowerb-vis-pris"}],[188809240,{"idx":24,"name":"facc-redmetal-01","tpage_name":"factoryd-vis-tfrag"}],[170131540,{"idx":84,"name":"klever-shoebottom","tpage_name":"outrocst-pris"}],[195035140,{"idx":4,"name":"stadiumb-hud-nmbr-05","tpage_name":"desrally-minimap"}],[173867080,{"idx":72,"name":"errolcyber-bluewrap","tpage_name":"ltowerb-vis-pris"}],[188809239,{"idx":23,"name":"facc-light-01","tpage_name":"factoryd-vis-tfrag"}],[170131539,{"idx":83,"name":"klever-shoe","tpage_name":"outrocst-pris"}],[195035139,{"idx":3,"name":"stadiumb-hud-nmbr-04","tpage_name":"desrally-minimap"}],[173867079,{"idx":71,"name":"errolcyber-bluemetal-01","tpage_name":"ltowerb-vis-pris"}],[188809238,{"idx":22,"name":"facc-light-02","tpage_name":"factoryd-vis-tfrag"}],[170131538,{"idx":82,"name":"klever-mustache","tpage_name":"outrocst-pris"}],[195035138,{"idx":2,"name":"stadiumb-hud-nmbr-03","tpage_name":"desrally-minimap"}],[173867078,{"idx":70,"name":"errolcyber-bigshoulder","tpage_name":"ltowerb-vis-pris"}],[188809237,{"idx":21,"name":"facc-beam-02","tpage_name":"factoryd-vis-tfrag"}],[173867077,{"idx":69,"name":"errolcyber-bighand-01","tpage_name":"ltowerb-vis-pris"}],[170131537,{"idx":81,"name":"klever-horn","tpage_name":"outrocst-pris"}],[195035137,{"idx":1,"name":"stadiumb-hud-nmbr-02","tpage_name":"desrally-minimap"}],[188809236,{"idx":20,"name":"facc-seam-metal-hitweak","tpage_name":"factoryd-vis-tfrag"}],[173867076,{"idx":68,"name":"wing02grey01","tpage_name":"ltowerb-vis-pris"}],[170131536,{"idx":80,"name":"klever-handwrap","tpage_name":"outrocst-pris"}],[195035136,{"idx":0,"name":"stadiumb-hud-nmbr-01","tpage_name":"desrally-minimap"}],[188809235,{"idx":19,"name":"facc-metal-panel-10-hitweak","tpage_name":"factoryd-vis-tfrag"}],[173867075,{"idx":67,"name":"wing02","tpage_name":"ltowerb-vis-pris"}],[170131535,{"idx":79,"name":"klever-hand","tpage_name":"outrocst-pris"}],[188809234,{"idx":18,"name":"facc-arches-01","tpage_name":"factoryd-vis-tfrag"}],[173867074,{"idx":66,"name":"wing01","tpage_name":"ltowerb-vis-pris"}],[170131534,{"idx":78,"name":"klever-hair","tpage_name":"outrocst-pris"}],[173867073,{"idx":65,"name":"turret01","tpage_name":"ltowerb-vis-pris"}],[188809233,{"idx":17,"name":"facc-metal-rim-03-hitweak","tpage_name":"factoryd-vis-tfrag"}],[170131533,{"idx":77,"name":"klever-gunmetal-05","tpage_name":"outrocst-pris"}],[188809232,{"idx":16,"name":"facc-bigredplates-01","tpage_name":"factoryd-vis-tfrag"}],[173867072,{"idx":64,"name":"stripe03","tpage_name":"ltowerb-vis-pris"}],[170131532,{"idx":76,"name":"klever-gunmetal-04","tpage_name":"outrocst-pris"}],[165806136,{"idx":56,"name":"palcab-lowres-background-mount-build-02","tpage_name":"ltowcity-tfrag"}],[175767576,{"idx":24,"name":"prec-surfer-hairshort","tpage_name":"loutro-pris"}],[188809231,{"idx":15,"name":"facc-big-metal-panl04","tpage_name":"factoryd-vis-tfrag"}],[173867071,{"idx":63,"name":"seat01","tpage_name":"ltowerb-vis-pris"}],[170131531,{"idx":75,"name":"klever-gunmetal-03","tpage_name":"outrocst-pris"}],[134676635,{"idx":155,"name":"rub-door-metal","tpage_name":"rubblec-vis-tfrag"}],[165806135,{"idx":55,"name":"palcab-lowres-background-mount-build-01","tpage_name":"ltowcity-tfrag"}],[175767575,{"idx":23,"name":"prec-surfer-hair","tpage_name":"loutro-pris"}],[188809230,{"idx":14,"name":"facc-panel-03","tpage_name":"factoryd-vis-tfrag"}],[173867070,{"idx":62,"name":"rail01","tpage_name":"ltowerb-vis-pris"}],[170131530,{"idx":74,"name":"klever-gunmetal-02","tpage_name":"outrocst-pris"}],[159186952,{"idx":8,"name":"ctyslumc-wire","tpage_name":"slumbset-shrub"}],[134676634,{"idx":154,"name":"rub-door-metal-frame","tpage_name":"rubblec-vis-tfrag"}],[165806134,{"idx":54,"name":"t-palshaft-plate01","tpage_name":"ltowcity-tfrag"}],[175767574,{"idx":22,"name":"prec-surfer-chain-03","tpage_name":"loutro-pris"}],[188809229,{"idx":13,"name":"facc-panel-02","tpage_name":"factoryd-vis-tfrag"}],[173867069,{"idx":61,"name":"post01","tpage_name":"ltowerb-vis-pris"}],[170131529,{"idx":73,"name":"klever-gunmetal-01","tpage_name":"outrocst-pris"}],[165806133,{"idx":53,"name":"t-citywide-met-wall-02","tpage_name":"ltowcity-tfrag"}],[175767573,{"idx":21,"name":"prec-surfer-chain-02","tpage_name":"loutro-pris"}],[159186951,{"idx":7,"name":"ctyslumc-light","tpage_name":"slumbset-shrub"}],[188809228,{"idx":12,"name":"facc-panel-01","tpage_name":"factoryd-vis-tfrag"}],[173867068,{"idx":60,"name":"lightCase01","tpage_name":"ltowerb-vis-pris"}],[170131528,{"idx":72,"name":"klever-fingertop","tpage_name":"outrocst-pris"}],[165806132,{"idx":52,"name":"t-citywide-red-met-01","tpage_name":"ltowcity-tfrag"}],[173277212,{"idx":28,"name":"tow-dplight-blue-01","tpage_name":"ltowera-vis-tfrag"}],[175767572,{"idx":20,"name":"prec-surfer-chain","tpage_name":"loutro-pris"}],[159186950,{"idx":6,"name":"ctyslumc-wall","tpage_name":"slumbset-shrub"}],[188809227,{"idx":11,"name":"facc-wall-rnd-light-01","tpage_name":"factoryd-vis-tfrag"}],[173867067,{"idx":59,"name":"light01","tpage_name":"ltowerb-vis-pris"}],[170131527,{"idx":71,"name":"klever-fingerbottom","tpage_name":"outrocst-pris"}],[81723474,{"idx":82,"name":"jakc-lens","tpage_name":"ljndklev-pris"}],[165806131,{"idx":51,"name":"t-citywide-met-pill-01","tpage_name":"ltowcity-tfrag"}],[173277211,{"idx":27,"name":"tow-wall-supports-HI","tpage_name":"ltowera-vis-tfrag"}],[175767571,{"idx":19,"name":"prec-neck","tpage_name":"loutro-pris"}],[159186949,{"idx":5,"name":"ctyslumc-decal-04","tpage_name":"slumbset-shrub"}],[188809226,{"idx":10,"name":"facc-panel-06","tpage_name":"factoryd-vis-tfrag"}],[173867066,{"idx":58,"name":"kcfrontend01","tpage_name":"ltowerb-vis-pris"}],[170131526,{"idx":70,"name":"klever-face-01scars","tpage_name":"outrocst-pris"}],[81723473,{"idx":81,"name":"jakc-gogglemetal","tpage_name":"ljndklev-pris"}],[159186948,{"idx":4,"name":"ctyslumc-decal-02","tpage_name":"slumbset-shrub"}],[188809225,{"idx":9,"name":"facc-pipe-02","tpage_name":"factoryd-vis-tfrag"}],[173867065,{"idx":57,"name":"jets01","tpage_name":"ltowerb-vis-pris"}],[170131525,{"idx":69,"name":"klever-face-01","tpage_name":"outrocst-pris"}],[81723472,{"idx":80,"name":"jakc-chestplate-straps","tpage_name":"ljndklev-pris"}],[159186947,{"idx":3,"name":"cityslumc-grass-yellow","tpage_name":"slumbset-shrub"}],[188809224,{"idx":8,"name":"facc-pipe-01","tpage_name":"factoryd-vis-tfrag"}],[173867064,{"idx":56,"name":"jetTop01","tpage_name":"ltowerb-vis-pris"}],[170131524,{"idx":68,"name":"klever-eyelid","tpage_name":"outrocst-pris"}],[159186946,{"idx":2,"name":"ctyslumc-stain","tpage_name":"slumbset-shrub"}],[188809223,{"idx":7,"name":"facc-wall-01","tpage_name":"factoryd-vis-tfrag"}],[173867063,{"idx":55,"name":"jakchires-teeth","tpage_name":"ltowerb-vis-pris"}],[170131523,{"idx":67,"name":"klever-eye","tpage_name":"outrocst-pris"}],[159186945,{"idx":1,"name":"cityslumc-gold-trim","tpage_name":"slumbset-shrub"}],[188809222,{"idx":6,"name":"facc-pipe-03","tpage_name":"factoryd-vis-tfrag"}],[173867062,{"idx":54,"name":"jakchires-shoeteop","tpage_name":"ltowerb-vis-pris"}],[170131522,{"idx":66,"name":"klever-earcup","tpage_name":"outrocst-pris"}],[159186944,{"idx":0,"name":"cityslumc-grass","tpage_name":"slumbset-shrub"}],[188809221,{"idx":5,"name":"facc-door-frame-01","tpage_name":"factoryd-vis-tfrag"}],[173867061,{"idx":53,"name":"jakchires-shoemetal","tpage_name":"ltowerb-vis-pris"}],[170131521,{"idx":65,"name":"klever-clips","tpage_name":"outrocst-pris"}],[188809220,{"idx":4,"name":"facc-door-frame-02","tpage_name":"factoryd-vis-tfrag"}],[173867060,{"idx":52,"name":"jakchires-shoebottom","tpage_name":"ltowerb-vis-pris"}],[170131520,{"idx":64,"name":"klever-chest","tpage_name":"outrocst-pris"}],[188809219,{"idx":3,"name":"common-black","tpage_name":"factoryd-vis-tfrag"}],[173867059,{"idx":51,"name":"jakchires-precarmor-01","tpage_name":"ltowerb-vis-pris"}],[170131519,{"idx":63,"name":"klever-brownstrap","tpage_name":"outrocst-pris"}],[188809218,{"idx":2,"name":"facc-panel-04","tpage_name":"factoryd-vis-tfrag"}],[173867058,{"idx":50,"name":"jakchires-pants","tpage_name":"ltowerb-vis-pris"}],[170131518,{"idx":62,"name":"klever-bolt","tpage_name":"outrocst-pris"}],[188809217,{"idx":1,"name":"facc-panel-05","tpage_name":"factoryd-vis-tfrag"}],[173867057,{"idx":49,"name":"jakchires-lightbrownspat","tpage_name":"ltowerb-vis-pris"}],[170131517,{"idx":61,"name":"klever-blackstrap","tpage_name":"outrocst-pris"}],[165806121,{"idx":41,"name":"city-lowres-ctygen-side-01","tpage_name":"ltowcity-tfrag"}],[173277201,{"idx":17,"name":"tow-plat-side","tpage_name":"ltowera-vis-tfrag"}],[175767561,{"idx":9,"name":"daxterheadwidenew","tpage_name":"loutro-pris"}],[188809216,{"idx":0,"name":"facc-metal-panel-11","tpage_name":"factoryd-vis-tfrag"}],[173867056,{"idx":48,"name":"jakchires-leatherpouch","tpage_name":"ltowerb-vis-pris"}],[170131516,{"idx":60,"name":"klever-armor-02","tpage_name":"outrocst-pris"}],[165806120,{"idx":40,"name":"city-lowres-ctygen-build-02","tpage_name":"ltowcity-tfrag"}],[173277200,{"idx":16,"name":"tow-base-ground","tpage_name":"ltowera-vis-tfrag"}],[175767560,{"idx":8,"name":"daxterfoot-bottom","tpage_name":"loutro-pris"}],[173867055,{"idx":47,"name":"jakchires-jacket","tpage_name":"ltowerb-vis-pris"}],[170131515,{"idx":59,"name":"klever-armor-01","tpage_name":"outrocst-pris"}],[165806119,{"idx":39,"name":"palcab-lowres-mark-highway","tpage_name":"ltowcity-tfrag"}],[173277199,{"idx":15,"name":"tow-wall-supports","tpage_name":"ltowera-vis-tfrag"}],[175767559,{"idx":7,"name":"daxterfoot","tpage_name":"loutro-pris"}],[173867054,{"idx":46,"name":"jakchires-horn","tpage_name":"ltowerb-vis-pris"}],[170131514,{"idx":58,"name":"klever-arm","tpage_name":"outrocst-pris"}],[165806118,{"idx":38,"name":"city-lowres-ctygen-build-01","tpage_name":"ltowcity-tfrag"}],[173277198,{"idx":14,"name":"lt-eco-vent-side-01","tpage_name":"ltowera-vis-tfrag"}],[175767558,{"idx":6,"name":"daxterfinger","tpage_name":"loutro-pris"}],[173867053,{"idx":45,"name":"jakchires-hair","tpage_name":"ltowerb-vis-pris"}],[170131513,{"idx":57,"name":"jakchires-teeth","tpage_name":"outrocst-pris"}],[165806117,{"idx":37,"name":"city-lowres-ctygen-roof-02","tpage_name":"ltowcity-tfrag"}],[173277197,{"idx":13,"name":"lt-eco-vent-blue-01","tpage_name":"ltowera-vis-tfrag"}],[175767557,{"idx":5,"name":"daxterear","tpage_name":"loutro-pris"}],[173867052,{"idx":44,"name":"jakchires-glovetop","tpage_name":"ltowerb-vis-pris"}],[170131512,{"idx":56,"name":"jakchires-shoeteop","tpage_name":"outrocst-pris"}],[165806116,{"idx":36,"name":"city-lowres-ctygen-stripe-01","tpage_name":"ltowcity-tfrag"}],[173277196,{"idx":12,"name":"tow-egg-remains-side","tpage_name":"ltowera-vis-tfrag"}],[175767556,{"idx":4,"name":"daxterbodyshort-eix","tpage_name":"loutro-pris"}],[173867051,{"idx":43,"name":"jakchires-facert","tpage_name":"ltowerb-vis-pris"}],[170131511,{"idx":55,"name":"jakchires-shoemetal","tpage_name":"outrocst-pris"}],[165806115,{"idx":35,"name":"city-lowres-ctygen-side-02","tpage_name":"ltowcity-tfrag"}],[175767555,{"idx":3,"name":"daxterarm","tpage_name":"loutro-pris"}],[173867050,{"idx":42,"name":"jakchires-facelft","tpage_name":"ltowerb-vis-pris"}],[170131510,{"idx":54,"name":"jakchires-shoebottom","tpage_name":"outrocst-pris"}],[165806114,{"idx":34,"name":"palcab-lowres-mark-awning-red","tpage_name":"ltowcity-tfrag"}],[175767554,{"idx":2,"name":"daxter-orange","tpage_name":"loutro-pris"}],[173867049,{"idx":41,"name":"jakchires-eyelid","tpage_name":"ltowerb-vis-pris"}],[170131509,{"idx":53,"name":"jakchires-precarmor-01","tpage_name":"outrocst-pris"}],[173867048,{"idx":40,"name":"jakchires-eyebrow","tpage_name":"ltowerb-vis-pris"}],[170131508,{"idx":52,"name":"jakchires-pants","tpage_name":"outrocst-pris"}],[173867047,{"idx":39,"name":"jakchires-eye","tpage_name":"ltowerb-vis-pris"}],[170131507,{"idx":51,"name":"jakchires-lightbrownspat","tpage_name":"outrocst-pris"}],[173867046,{"idx":38,"name":"jakchires-clips","tpage_name":"ltowerb-vis-pris"}],[170131506,{"idx":50,"name":"jakchires-leatherpouch","tpage_name":"outrocst-pris"}],[173867045,{"idx":37,"name":"jakchires-chestplate","tpage_name":"ltowerb-vis-pris"}],[170131505,{"idx":49,"name":"jakchires-jacket","tpage_name":"outrocst-pris"}],[173867044,{"idx":36,"name":"jakchires-brwnleather","tpage_name":"ltowerb-vis-pris"}],[170131504,{"idx":48,"name":"jakchires-horn","tpage_name":"outrocst-pris"}],[173867043,{"idx":35,"name":"jakchires-brownstrap","tpage_name":"ltowerb-vis-pris"}],[170131503,{"idx":47,"name":"jakchires-hair","tpage_name":"outrocst-pris"}],[173867042,{"idx":34,"name":"jakchires-blackstrap","tpage_name":"ltowerb-vis-pris"}],[170131502,{"idx":46,"name":"jakchires-glovetop","tpage_name":"outrocst-pris"}],[173867041,{"idx":33,"name":"jakchires-arm","tpage_name":"ltowerb-vis-pris"}],[170131501,{"idx":45,"name":"jakchires-facert","tpage_name":"outrocst-pris"}],[173867040,{"idx":32,"name":"jakc-wristband-a2","tpage_name":"ltowerb-vis-pris"}],[170131500,{"idx":44,"name":"jakchires-facelft","tpage_name":"outrocst-pris"}],[173867039,{"idx":31,"name":"jakc-wraps","tpage_name":"ltowerb-vis-pris"}],[170131499,{"idx":43,"name":"jakchires-eyelid","tpage_name":"outrocst-pris"}],[173867038,{"idx":30,"name":"jakc-waistband2","tpage_name":"ltowerb-vis-pris"}],[170131498,{"idx":42,"name":"jakchires-eyebrow","tpage_name":"outrocst-pris"}],[173867037,{"idx":29,"name":"jakc-skirt","tpage_name":"ltowerb-vis-pris"}],[170131497,{"idx":41,"name":"jakchires-eye","tpage_name":"outrocst-pris"}],[173867036,{"idx":28,"name":"jakc-scarfhanging","tpage_name":"ltowerb-vis-pris"}],[170131496,{"idx":40,"name":"jakchires-clips","tpage_name":"outrocst-pris"}],[173867035,{"idx":27,"name":"jakc-scarf","tpage_name":"ltowerb-vis-pris"}],[170131495,{"idx":39,"name":"jakchires-chestplate","tpage_name":"outrocst-pris"}],[173867034,{"idx":26,"name":"jakc-lens","tpage_name":"ltowerb-vis-pris"}],[170131494,{"idx":38,"name":"jakchires-brwnleather","tpage_name":"outrocst-pris"}],[173867033,{"idx":25,"name":"jakc-gogglemetal","tpage_name":"ltowerb-vis-pris"}],[170131493,{"idx":37,"name":"jakchires-brownstrap","tpage_name":"outrocst-pris"}],[127795236,{"idx":36,"name":"city-lowres-ctygen-side-02","tpage_name":"lfaccity-tfrag"}],[173867032,{"idx":24,"name":"jakc-chestplate-straps","tpage_name":"ltowerb-vis-pris"}],[181338112,{"idx":0,"name":"racegate","tpage_name":"lbbring1-sprite"}],[170131492,{"idx":36,"name":"jakchires-blackstrap","tpage_name":"outrocst-pris"}],[173867031,{"idx":23,"name":"jakc-armor","tpage_name":"ltowerb-vis-pris"}],[170131491,{"idx":35,"name":"jakchires-arm","tpage_name":"outrocst-pris"}],[173867030,{"idx":22,"name":"hood01","tpage_name":"ltowerb-vis-pris"}],[170131490,{"idx":34,"name":"jakc-wristband-a2","tpage_name":"outrocst-pris"}],[173867029,{"idx":21,"name":"gunbox02","tpage_name":"ltowerb-vis-pris"}],[170131489,{"idx":33,"name":"jakc-wraps","tpage_name":"outrocst-pris"}],[173867028,{"idx":20,"name":"gunbox01","tpage_name":"ltowerb-vis-pris"}],[170131488,{"idx":32,"name":"jakc-waistband2","tpage_name":"outrocst-pris"}],[173867027,{"idx":19,"name":"gunBoxFront01","tpage_name":"ltowerb-vis-pris"}],[170131487,{"idx":31,"name":"jakc-skirt","tpage_name":"outrocst-pris"}],[173867026,{"idx":18,"name":"gunBoxBack01","tpage_name":"ltowerb-vis-pris"}],[170131486,{"idx":30,"name":"jakc-scarfhanging","tpage_name":"outrocst-pris"}],[173867025,{"idx":17,"name":"grillRim01","tpage_name":"ltowerb-vis-pris"}],[170131485,{"idx":29,"name":"jakc-scarf","tpage_name":"outrocst-pris"}],[173867024,{"idx":16,"name":"gauge01","tpage_name":"ltowerb-vis-pris"}],[170131484,{"idx":28,"name":"jakc-lens","tpage_name":"outrocst-pris"}],[173867023,{"idx":15,"name":"errolcyber-teeth","tpage_name":"ltowerb-vis-pris"}],[170131483,{"idx":27,"name":"jakc-gogglemetal","tpage_name":"outrocst-pris"}],[173867022,{"idx":14,"name":"errolcyber-pipes-03","tpage_name":"ltowerb-vis-pris"}],[170131482,{"idx":26,"name":"jakc-chestplate-straps","tpage_name":"outrocst-pris"}],[173867021,{"idx":13,"name":"errolcyber-pipes-02","tpage_name":"ltowerb-vis-pris"}],[170131481,{"idx":25,"name":"jakc-armor","tpage_name":"outrocst-pris"}],[173867016,{"idx":8,"name":"errolcyber-hair","tpage_name":"ltowerb-vis-pris"}],[170131476,{"idx":20,"name":"environment-oldmetal","tpage_name":"outrocst-pris"}],[169869345,{"idx":33,"name":"kg-rob-trans-gun04","tpage_name":"lctyprot-pris"}],[169869344,{"idx":32,"name":"missle-launcher-tube-end-02","tpage_name":"lctyprot-pris"}],[169869343,{"idx":31,"name":"missle-launcher-tube-end-01","tpage_name":"lctyprot-pris"}],[169869342,{"idx":30,"name":"missle-launcher-tube","tpage_name":"lctyprot-pris"}],[169869341,{"idx":29,"name":"missle-launcher-top-02","tpage_name":"lctyprot-pris"}],[169869340,{"idx":28,"name":"missle-launcher-top-01","tpage_name":"lctyprot-pris"}],[169869339,{"idx":27,"name":"missle-launcher-shaft-01","tpage_name":"lctyprot-pris"}],[169869327,{"idx":15,"name":"kg-rob-trans-rod-02","tpage_name":"lctyprot-pris"}],[173604864,{"idx":0,"name":"tow-eggcase-01","tpage_name":"ltowerb-vis-alpha"}],[169869324,{"idx":12,"name":"kg-rob-trans-panel-06","tpage_name":"lctyprot-pris"}],[169869322,{"idx":10,"name":"kg-rob-trans-panel-04","tpage_name":"lctyprot-pris"}],[169869314,{"idx":2,"name":"homing-missle-exhaust","tpage_name":"lctyprot-pris"}],[169869313,{"idx":1,"name":"homing-missle-body-tip","tpage_name":"lctyprot-pris"}],[169869312,{"idx":0,"name":"homing-missle-body","tpage_name":"lctyprot-pris"}],[168624158,{"idx":30,"name":"tread-interceptor-rhino","tpage_name":"lfaccar-pris"}],[169869338,{"idx":26,"name":"missle-launcher-rim-01","tpage_name":"lctyprot-pris"}],[168624157,{"idx":29,"name":"lightCase01","tpage_name":"lfaccar-pris"}],[177340417,{"idx":1,"name":"temple_flag02","tpage_name":"templec-vis-pris"}],[169869337,{"idx":25,"name":"missle-launcher-panel-02","tpage_name":"lctyprot-pris"}],[168624155,{"idx":27,"name":"jets01","tpage_name":"lfaccar-pris"}],[169869335,{"idx":23,"name":"missle-launcher-metal-01","tpage_name":"lctyprot-pris"}],[168624154,{"idx":26,"name":"fac-vehicle-tire-tread-01","tpage_name":"lfaccar-pris"}],[169869334,{"idx":22,"name":"missle-launcher-gear-02","tpage_name":"lctyprot-pris"}],[169869332,{"idx":20,"name":"kg-rob-trans-thruster-glow-01","tpage_name":"lctyprot-pris"}],[168624152,{"idx":24,"name":"fac-vehicle-tank-01","tpage_name":"lfaccar-pris"}],[48758788,{"idx":4,"name":"sewer-metal-block-01","tpage_name":"sewc-vis-tfrag"}],[11796534,{"idx":54,"name":"city-ind-grnd-cobl-02","tpage_name":"ctyinda-vis-tfrag"}],[115081276,{"idx":60,"name":"jakc-scarfhanging","tpage_name":"desboss1-pris"}],[169869331,{"idx":19,"name":"kg-rob-trans-thruster-04","tpage_name":"lctyprot-pris"}],[168624151,{"idx":23,"name":"fac-vehicle-safety-plate-01","tpage_name":"lfaccar-pris"}],[48758787,{"idx":3,"name":"sewer-pipe-rim-05","tpage_name":"sewc-vis-tfrag"}],[11796533,{"idx":53,"name":"city-ind-grnd-cobl-01","tpage_name":"ctyinda-vis-tfrag"}],[115081275,{"idx":59,"name":"jakc-scarf","tpage_name":"desboss1-pris"}],[169869330,{"idx":18,"name":"kg-rob-trans-thruster-03","tpage_name":"lctyprot-pris"}],[168624150,{"idx":22,"name":"fac-vehicle-rim-01","tpage_name":"lfaccar-pris"}],[48758786,{"idx":2,"name":"sewer-metal-block-04","tpage_name":"sewc-vis-tfrag"}],[11796532,{"idx":52,"name":"city-ind-litwindow-TOP-04","tpage_name":"ctyinda-vis-tfrag"}],[115081274,{"idx":58,"name":"jakc-lens","tpage_name":"desboss1-pris"}],[169869329,{"idx":17,"name":"kg-rob-trans-thruster-02","tpage_name":"lctyprot-pris"}],[168624149,{"idx":21,"name":"fac-vehicle-metal-plate-02","tpage_name":"lfaccar-pris"}],[48758785,{"idx":1,"name":"sewer-plate-05","tpage_name":"sewc-vis-tfrag"}],[115081273,{"idx":57,"name":"jakc-gogglemetal","tpage_name":"desboss1-pris"}],[169869328,{"idx":16,"name":"kg-rob-trans-thruster-01","tpage_name":"lctyprot-pris"}],[168624148,{"idx":20,"name":"fac-vehicle-hubcap-01","tpage_name":"lfaccar-pris"}],[115081272,{"idx":56,"name":"jakc-chestplate-straps","tpage_name":"desboss1-pris"}],[173604866,{"idx":2,"name":"tow-eggside-01","tpage_name":"ltowerb-vis-alpha"}],[169869326,{"idx":14,"name":"kg-rob-trans-rod-01","tpage_name":"lctyprot-pris"}],[168624146,{"idx":18,"name":"fac-vehicle-exhaust-pipe-01","tpage_name":"lfaccar-pris"}],[173604865,{"idx":1,"name":"tow-eggtop-01","tpage_name":"ltowerb-vis-alpha"}],[169869325,{"idx":13,"name":"kg-rob-trans-ribs01","tpage_name":"lctyprot-pris"}],[168624145,{"idx":17,"name":"fac-vehicle-exhaust-01","tpage_name":"lfaccar-pris"}],[169869323,{"idx":11,"name":"kg-rob-trans-panel-05","tpage_name":"lctyprot-pris"}],[168624143,{"idx":15,"name":"fac-vehicle-detail-01","tpage_name":"lfaccar-pris"}],[169869321,{"idx":9,"name":"kg-rob-trans-panel-03","tpage_name":"lctyprot-pris"}],[168624141,{"idx":13,"name":"fac-vehicle-controls","tpage_name":"lfaccar-pris"}],[169869320,{"idx":8,"name":"kg-rob-trans-panel-02","tpage_name":"lctyprot-pris"}],[168624140,{"idx":12,"name":"fac-vehicle-cap-pin-01","tpage_name":"lfaccar-pris"}],[169869319,{"idx":7,"name":"kg-rob-trans-panel-01","tpage_name":"lctyprot-pris"}],[168624139,{"idx":11,"name":"fac-vehicle-brace-pipe-01","tpage_name":"lfaccar-pris"}],[169869318,{"idx":6,"name":"kg-rob-trans-gun05","tpage_name":"lctyprot-pris"}],[168624138,{"idx":10,"name":"fac-vehicle-bolt-01","tpage_name":"lfaccar-pris"}],[169869317,{"idx":5,"name":"kg-rob-trans-door-edge-01","tpage_name":"lctyprot-pris"}],[168624137,{"idx":9,"name":"fac-vehicle-body-02","tpage_name":"lfaccar-pris"}],[169869316,{"idx":4,"name":"common-black","tpage_name":"lctyprot-pris"}],[168624136,{"idx":8,"name":"fac-vehicle-body-01","tpage_name":"lfaccar-pris"}],[169869315,{"idx":3,"name":"homing-missle-fin-01","tpage_name":"lctyprot-pris"}],[168624135,{"idx":7,"name":"common-black","tpage_name":"lfaccar-pris"}],[165806206,{"idx":126,"name":"rub-palace-tower-side","tpage_name":"ltowcity-tfrag"}],[194445346,{"idx":34,"name":"jakchires-shoeteop","tpage_name":"gridcst-pris"}],[164364317,{"idx":29,"name":"rub-supportmetall","tpage_name":"rubblea2-vis-tfrag"}],[159383597,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"slumbset-pris"}],[165806205,{"idx":125,"name":"palcab-lowres-background-mountains-02","tpage_name":"ltowcity-tfrag"}],[194445345,{"idx":33,"name":"jakchires-shoemetal","tpage_name":"gridcst-pris"}],[164364316,{"idx":28,"name":"rub-metal-wallgrill","tpage_name":"rubblea2-vis-tfrag"}],[159383596,{"idx":44,"name":"jakchires-jacket","tpage_name":"slumbset-pris"}],[165806204,{"idx":124,"name":"palcab-lowres-background-peaks-02","tpage_name":"ltowcity-tfrag"}],[194445344,{"idx":32,"name":"jakchires-shoebottom","tpage_name":"gridcst-pris"}],[164364315,{"idx":27,"name":"rub-endblocks","tpage_name":"rubblea2-vis-tfrag"}],[159383595,{"idx":43,"name":"jakchires-horn","tpage_name":"slumbset-pris"}],[165806203,{"idx":123,"name":"palcab-smallpipe-lores","tpage_name":"ltowcity-tfrag"}],[194445343,{"idx":31,"name":"jakchires-precarmor-01","tpage_name":"gridcst-pris"}],[165806202,{"idx":122,"name":"palcab-lowres-background-crater-01","tpage_name":"ltowcity-tfrag"}],[194445342,{"idx":30,"name":"jakchires-pants","tpage_name":"gridcst-pris"}],[193200162,{"idx":34,"name":"neo-wasp-eye","tpage_name":"towerb-vis-pris"}],[165609492,{"idx":20,"name":"dm-missle-tubes","tpage_name":"wasdefen-pris"}],[159383592,{"idx":40,"name":"jakchires-facert","tpage_name":"slumbset-pris"}],[165806201,{"idx":121,"name":"palcab-lowres-background-desert-to-shore","tpage_name":"ltowcity-tfrag"}],[194445341,{"idx":29,"name":"jakchires-lightbrownspat","tpage_name":"gridcst-pris"}],[193200161,{"idx":33,"name":"neo-wasp-dark-brown","tpage_name":"towerb-vis-pris"}],[165609491,{"idx":19,"name":"dm-missle-tip","tpage_name":"wasdefen-pris"}],[159383591,{"idx":39,"name":"jakchires-facelft","tpage_name":"slumbset-pris"}],[165806200,{"idx":120,"name":"palcab-lowres-background-shoreline-02","tpage_name":"ltowcity-tfrag"}],[194445340,{"idx":28,"name":"jakchires-leatherpouch","tpage_name":"gridcst-pris"}],[193200160,{"idx":32,"name":"neo-wasp-brown","tpage_name":"towerb-vis-pris"}],[165609490,{"idx":18,"name":"dm-missle-body","tpage_name":"wasdefen-pris"}],[159383590,{"idx":38,"name":"jakchires-eyelid","tpage_name":"slumbset-pris"}],[165806199,{"idx":119,"name":"palcab-lowres-background-peaks-01","tpage_name":"ltowcity-tfrag"}],[194445339,{"idx":27,"name":"jakchires-jacket","tpage_name":"gridcst-pris"}],[193200159,{"idx":31,"name":"neo-wasp-body","tpage_name":"towerb-vis-pris"}],[194445338,{"idx":26,"name":"jakchires-horn","tpage_name":"gridcst-pris"}],[165806198,{"idx":118,"name":"tcab-blue-ring-01","tpage_name":"ltowcity-tfrag"}],[193200158,{"idx":30,"name":"neo-wasp-base","tpage_name":"towerb-vis-pris"}],[194445337,{"idx":25,"name":"jakchires-hair","tpage_name":"gridcst-pris"}],[165806197,{"idx":117,"name":"tcab-beam01-lores","tpage_name":"ltowcity-tfrag"}],[193200157,{"idx":29,"name":"environment-darkprec","tpage_name":"towerb-vis-pris"}],[194445333,{"idx":21,"name":"jakchires-eyelid","tpage_name":"gridcst-pris"}],[165806193,{"idx":113,"name":"palcab-lowres-background-mounatin-window","tpage_name":"ltowcity-tfrag"}],[167313416,{"idx":8,"name":"bam-hairhilite","tpage_name":"stadium-vis-pris"}],[151126076,{"idx":60,"name":"pecker-tail","tpage_name":"combx-pris"}],[194445332,{"idx":20,"name":"jakchires-eyebrow","tpage_name":"gridcst-pris"}],[165806192,{"idx":112,"name":"palcab-lowres-background-grass-to-desert-01","tpage_name":"ltowcity-tfrag"}],[167313415,{"idx":7,"name":"bam-eyelight","tpage_name":"stadium-vis-pris"}],[151126075,{"idx":59,"name":"pecker-plume","tpage_name":"combx-pris"}],[10879079,{"idx":103,"name":"cityslumc-awning-HI","tpage_name":"ctyslumb-vis-tfrag"}],[14680089,{"idx":25,"name":"jakchires-chestplate","tpage_name":"ctygenb-vis-pris"}],[194445331,{"idx":19,"name":"jakchires-eye","tpage_name":"gridcst-pris"}],[165806191,{"idx":111,"name":"palcab-lowres-background-grass-to-desert-02","tpage_name":"ltowcity-tfrag"}],[151126074,{"idx":58,"name":"pecker-face","tpage_name":"combx-pris"}],[14680088,{"idx":24,"name":"jakchires-brwnleather","tpage_name":"ctygenb-vis-pris"}],[10879078,{"idx":102,"name":"cityslumc-purple-column","tpage_name":"ctyslumb-vis-tfrag"}],[165609481,{"idx":9,"name":"dp-robot-globe-joint","tpage_name":"wasdefen-pris"}],[159383581,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"slumbset-pris"}],[164364301,{"idx":13,"name":"rub-met-strp-close","tpage_name":"rubblea2-vis-tfrag"}],[94240803,{"idx":35,"name":"palcab-lowres-farm-wall","tpage_name":"intpfall-vis-tfrag"}],[194445330,{"idx":18,"name":"jakchires-clips","tpage_name":"gridcst-pris"}],[199426050,{"idx":2,"name":"dust-sparkle","tpage_name":"templea-sprite"}],[175767630,{"idx":78,"name":"prec-teeth","tpage_name":"loutro-pris"}],[165806190,{"idx":110,"name":"palcab-lowres-background-mountains","tpage_name":"ltowcity-tfrag"}],[151126073,{"idx":57,"name":"pecker-body-01","tpage_name":"combx-pris"}],[14680087,{"idx":23,"name":"jakchires-brownstrap","tpage_name":"ctygenb-vis-pris"}],[10879077,{"idx":101,"name":"cityslumc-purple-column-2","tpage_name":"ctyslumb-vis-tfrag"}],[194445329,{"idx":17,"name":"jakchires-chestplate","tpage_name":"gridcst-pris"}],[175767629,{"idx":77,"name":"prec-staff-02","tpage_name":"loutro-pris"}],[165806189,{"idx":109,"name":"palcab-lowres-background-shoreline-01","tpage_name":"ltowcity-tfrag"}],[14680086,{"idx":22,"name":"jakchires-blackstrap","tpage_name":"ctygenb-vis-pris"}],[10879076,{"idx":100,"name":"cityslumc-gold-trim","tpage_name":"ctyslumb-vis-tfrag"}],[48627757,{"idx":45,"name":"sew-metal-floor-01","tpage_name":"sewb-vis-tfrag"}],[61079557,{"idx":5,"name":"gekko-laserbarrel","tpage_name":"minec-vis-pris"}],[175767628,{"idx":76,"name":"prec-staff-01","tpage_name":"loutro-pris"}],[194445328,{"idx":16,"name":"jakchires-brwnleather","tpage_name":"gridcst-pris"}],[199426048,{"idx":0,"name":"ceiling-dust","tpage_name":"templea-sprite"}],[165806188,{"idx":108,"name":"city-lowres-mhcity-tower-02","tpage_name":"ltowcity-tfrag"}],[14680085,{"idx":21,"name":"jakchires-arm","tpage_name":"ctygenb-vis-pris"}],[10879075,{"idx":99,"name":"cityslumc-pinkish-purple","tpage_name":"ctyslumb-vis-tfrag"}],[94240801,{"idx":33,"name":"city-lowres-ind-wall-05","tpage_name":"intpfall-vis-tfrag"}],[60620941,{"idx":141,"name":"pecker-wingtop","tpage_name":"minea-vis-pris"}],[175767627,{"idx":75,"name":"prec-orbsmall","tpage_name":"loutro-pris"}],[194445327,{"idx":15,"name":"jakchires-brownstrap","tpage_name":"gridcst-pris"}],[165806187,{"idx":107,"name":"palcab-swingp-trim","tpage_name":"ltowcity-tfrag"}],[10879074,{"idx":98,"name":"cityslumc-little-gold","tpage_name":"ctyslumb-vis-tfrag"}],[175767622,{"idx":70,"name":"prec-leader-pants","tpage_name":"loutro-pris"}],[194445322,{"idx":10,"name":"jakc-waistband2","tpage_name":"gridcst-pris"}],[165806182,{"idx":102,"name":"t-palshaft-pil-01","tpage_name":"ltowcity-tfrag"}],[151126065,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"combx-pris"}],[49741828,{"idx":4,"name":"airlockl-door-metalframe","tpage_name":"sewf-vis-pris"}],[14680079,{"idx":15,"name":"jakc-gogglemetal","tpage_name":"ctygenb-vis-pris"}],[10879069,{"idx":93,"name":"ctyslumc-overhang-03","tpage_name":"ctyslumb-vis-tfrag"}],[175767621,{"idx":69,"name":"prec-leader-hair","tpage_name":"loutro-pris"}],[194445321,{"idx":9,"name":"jakc-skirt","tpage_name":"gridcst-pris"}],[165806181,{"idx":101,"name":"palcab-lowres-background-strip","tpage_name":"ltowcity-tfrag"}],[151126064,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"combx-pris"}],[49741827,{"idx":3,"name":"airlock-door-metal2","tpage_name":"sewf-vis-pris"}],[14680078,{"idx":14,"name":"jakc-chestplate-straps","tpage_name":"ctygenb-vis-pris"}],[10879068,{"idx":92,"name":"cityslumc-wall-surface-01","tpage_name":"ctyslumb-vis-tfrag"}],[175767620,{"idx":68,"name":"prec-leader-frontskirt","tpage_name":"loutro-pris"}],[194445320,{"idx":8,"name":"jakc-scarfhanging","tpage_name":"gridcst-pris"}],[165806180,{"idx":100,"name":"ctyp-metal-01","tpage_name":"ltowcity-tfrag"}],[151126063,{"idx":47,"name":"jakchires-pants","tpage_name":"combx-pris"}],[14680077,{"idx":13,"name":"jakc-armor","tpage_name":"ctygenb-vis-pris"}],[10879067,{"idx":91,"name":"ctyslumc-roof","tpage_name":"ctyslumb-vis-tfrag"}],[142016520,{"idx":8,"name":"facc-bigredplates-01","tpage_name":"lfacrm2-tfrag"}],[144506880,{"idx":0,"name":"missle-launcher-gear-01","tpage_name":"lpatkcs-tfrag"}],[194445319,{"idx":7,"name":"jakc-scarf","tpage_name":"gridcst-pris"}],[175767619,{"idx":67,"name":"prec-leader-face2","tpage_name":"loutro-pris"}],[165806179,{"idx":99,"name":"palcab-lowres-stadium-grass","tpage_name":"ltowcity-tfrag"}],[151126062,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"combx-pris"}],[14680076,{"idx":12,"name":"environment-oldmetal","tpage_name":"ctygenb-vis-pris"}],[10879066,{"idx":90,"name":"cityslumc-grey-side-pillar","tpage_name":"ctyslumb-vis-tfrag"}],[194445318,{"idx":6,"name":"jakc-lens","tpage_name":"gridcst-pris"}],[175767618,{"idx":66,"name":"prec-leader-belt","tpage_name":"loutro-pris"}],[165806178,{"idx":98,"name":"citywide-consite-steel","tpage_name":"ltowcity-tfrag"}],[151126061,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"combx-pris"}],[14680075,{"idx":11,"name":"bam-hairhilite","tpage_name":"ctygenb-vis-pris"}],[10879065,{"idx":89,"name":"ctyslumc-overhang-02","tpage_name":"ctyslumb-vis-tfrag"}],[194445317,{"idx":5,"name":"jakc-gogglemetal","tpage_name":"gridcst-pris"}],[175767617,{"idx":65,"name":"prec-leader-beard","tpage_name":"loutro-pris"}],[165806177,{"idx":97,"name":"t-palshaft-panl-01","tpage_name":"ltowcity-tfrag"}],[151126060,{"idx":44,"name":"jakchires-jacket","tpage_name":"combx-pris"}],[14680074,{"idx":10,"name":"bam-eyelight","tpage_name":"ctygenb-vis-pris"}],[10879064,{"idx":88,"name":"ctyslumc-overhang-01","tpage_name":"ctyslumb-vis-tfrag"}],[194445316,{"idx":4,"name":"jakc-chestplate-straps","tpage_name":"gridcst-pris"}],[175767616,{"idx":64,"name":"prec-leader-arm","tpage_name":"loutro-pris"}],[165806176,{"idx":96,"name":"palace-break-brokenwall","tpage_name":"ltowcity-tfrag"}],[14680073,{"idx":9,"name":"jakc-skirt","tpage_name":"ctygenb-vis-pris"}],[10879063,{"idx":87,"name":"ctyslumc-floor-base","tpage_name":"ctyslumb-vis-tfrag"}],[194445315,{"idx":3,"name":"jakc-armor","tpage_name":"gridcst-pris"}],[175767615,{"idx":63,"name":"daxtertuft","tpage_name":"loutro-pris"}],[165806175,{"idx":95,"name":"tcab-plat-edg-01-lores","tpage_name":"ltowcity-tfrag"}],[10879062,{"idx":86,"name":"ctyslumc-railing-trim","tpage_name":"ctyslumb-vis-tfrag"}],[94240788,{"idx":20,"name":"palcab-lowres-mark-roof-02","tpage_name":"intpfall-vis-tfrag"}],[60620928,{"idx":128,"name":"jakc-scarfhanging","tpage_name":"minea-vis-pris"}],[194445314,{"idx":2,"name":"environment-oldmetal","tpage_name":"gridcst-pris"}],[175767614,{"idx":62,"name":"daxterlense","tpage_name":"loutro-pris"}],[165806174,{"idx":94,"name":"palcab-wall-lores","tpage_name":"ltowcity-tfrag"}],[94240787,{"idx":19,"name":"palcab-pipe-hoze","tpage_name":"intpfall-vis-tfrag"}],[60620927,{"idx":127,"name":"jakchires-teeth","tpage_name":"minea-vis-pris"}],[194445313,{"idx":1,"name":"bam-hairhilite","tpage_name":"gridcst-pris"}],[175767613,{"idx":61,"name":"daxtergoggles","tpage_name":"loutro-pris"}],[165806173,{"idx":93,"name":"tcab-beam01","tpage_name":"ltowcity-tfrag"}],[10879060,{"idx":84,"name":"ctyslumc-vine-hang-a","tpage_name":"ctyslumb-vis-tfrag"}],[194445312,{"idx":0,"name":"bam-eyelight","tpage_name":"gridcst-pris"}],[175767612,{"idx":60,"name":"daxterbolt","tpage_name":"loutro-pris"}],[165806172,{"idx":92,"name":"palcab-lorez-plates01","tpage_name":"ltowcity-tfrag"}],[175767611,{"idx":59,"name":"daxter-eyelid","tpage_name":"loutro-pris"}],[165806171,{"idx":91,"name":"palcab-lorez-metal01-red-stripe","tpage_name":"ltowcity-tfrag"}],[165806170,{"idx":90,"name":"palcab-lorez-metal01-red","tpage_name":"ltowcity-tfrag"}],[165806169,{"idx":89,"name":"palcab-lorez-metal02","tpage_name":"ltowcity-tfrag"}],[165806168,{"idx":88,"name":"palcab-lowres-background-trees2","tpage_name":"ltowcity-tfrag"}],[165806167,{"idx":87,"name":"palcab-lowres-background-trees-edge","tpage_name":"ltowcity-tfrag"}],[165806166,{"idx":86,"name":"palcab-lorez-asphalt01","tpage_name":"ltowcity-tfrag"}],[190709765,{"idx":5,"name":"neo-wasp-eye","tpage_name":"ltowera-vis-pris"}],[165806165,{"idx":85,"name":"palcab-swingp-base-lores","tpage_name":"ltowcity-tfrag"}],[190709764,{"idx":4,"name":"neo-wasp-dark-brown","tpage_name":"ltowera-vis-pris"}],[165806164,{"idx":84,"name":"city-lowres-mhcity-wall-03","tpage_name":"ltowcity-tfrag"}],[190709763,{"idx":3,"name":"neo-wasp-brown","tpage_name":"ltowera-vis-pris"}],[165806163,{"idx":83,"name":"common-black","tpage_name":"ltowcity-tfrag"}],[190709760,{"idx":0,"name":"environment-darkprec","tpage_name":"ltowera-vis-pris"}],[165806160,{"idx":80,"name":"city-lowres-mhcity-detower-02","tpage_name":"ltowcity-tfrag"}],[165806159,{"idx":79,"name":"city-lowres-mhcity-detower-01","tpage_name":"ltowcity-tfrag"}],[151126042,{"idx":26,"name":"jakc-skirt","tpage_name":"combx-pris"}],[165806158,{"idx":78,"name":"city-lowres-mhcity-wall-01","tpage_name":"ltowcity-tfrag"}],[151126041,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"combx-pris"}],[165806157,{"idx":77,"name":"city-lowres-mhcity-wall-02","tpage_name":"ltowcity-tfrag"}],[151126040,{"idx":24,"name":"jakc-scarf","tpage_name":"combx-pris"}],[165806156,{"idx":76,"name":"citywide-hangmetal","tpage_name":"ltowcity-tfrag"}],[151126039,{"idx":23,"name":"jakc-lens","tpage_name":"combx-pris"}],[165806155,{"idx":75,"name":"citywide-palace-01","tpage_name":"ltowcity-tfrag"}],[151126038,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"combx-pris"}],[165806154,{"idx":74,"name":"palace-break-girder01","tpage_name":"ltowcity-tfrag"}],[151126037,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"combx-pris"}],[165806153,{"idx":73,"name":"t-palshaft-roof-01","tpage_name":"ltowcity-tfrag"}],[151126036,{"idx":20,"name":"jakc-armor","tpage_name":"combx-pris"}],[165806152,{"idx":72,"name":"palcab-lowres-farm-wall-top","tpage_name":"ltowcity-tfrag"}],[151126035,{"idx":19,"name":"environment-oldmetal","tpage_name":"combx-pris"}],[165806151,{"idx":71,"name":"palcab-lowres-farm-wall","tpage_name":"ltowcity-tfrag"}],[151126034,{"idx":18,"name":"daxtertuft","tpage_name":"combx-pris"}],[165806150,{"idx":70,"name":"t-citywide-wall-tile-01","tpage_name":"ltowcity-tfrag"}],[151126033,{"idx":17,"name":"daxterteeth","tpage_name":"combx-pris"}],[165806149,{"idx":69,"name":"city-lowres-damaged-01","tpage_name":"ltowcity-tfrag"}],[151126032,{"idx":16,"name":"daxternose","tpage_name":"combx-pris"}],[165806148,{"idx":68,"name":"city-lowres-newslums-stripe-01","tpage_name":"ltowcity-tfrag"}],[165806147,{"idx":67,"name":"city-lowres-newslums-bigwindows-02","tpage_name":"ltowcity-tfrag"}],[165806146,{"idx":66,"name":"city-lowres-newslums-stripe-02","tpage_name":"ltowcity-tfrag"}],[165806145,{"idx":65,"name":"t-strip-lo-palsup-danger2","tpage_name":"ltowcity-tfrag"}],[165806144,{"idx":64,"name":"t-strip-lo-palsup-danger1","tpage_name":"ltowcity-tfrag"}],[165806143,{"idx":63,"name":"t-strip-lo-palsup-panel-5","tpage_name":"ltowcity-tfrag"}],[165806142,{"idx":62,"name":"t-strip-lo-palsup-panel-4","tpage_name":"ltowcity-tfrag"}],[165806141,{"idx":61,"name":"t-strip-lo-palsup-panel-3","tpage_name":"ltowcity-tfrag"}],[49020991,{"idx":63,"name":"sewer-black","tpage_name":"sewe-vis-tfrag"}],[62717971,{"idx":19,"name":"cguardgame-metallight-plain","tpage_name":"ctypesa-pris"}],[175767580,{"idx":28,"name":"prec-surfer-sleeve","tpage_name":"loutro-pris"}],[184483840,{"idx":0,"name":"citywide-stdm-wire","tpage_name":"stadiuma-vis-shrub"}],[165806140,{"idx":60,"name":"t-strip-lo-palsup-panel-2","tpage_name":"ltowcity-tfrag"}],[175767579,{"idx":27,"name":"prec-surfer-shirt","tpage_name":"loutro-pris"}],[165806139,{"idx":59,"name":"t-strip-lo-palsup-panel-1","tpage_name":"ltowcity-tfrag"}],[173277210,{"idx":26,"name":"rail-env-wall-01","tpage_name":"ltowera-vis-tfrag"}],[175767570,{"idx":18,"name":"prec-leader-armband","tpage_name":"loutro-pris"}],[165806130,{"idx":50,"name":"t-citywide-met-strp01","tpage_name":"ltowcity-tfrag"}],[173277202,{"idx":18,"name":"tow-base-ground-plat","tpage_name":"ltowera-vis-tfrag"}],[175767562,{"idx":10,"name":"daxterhelmetplain","tpage_name":"loutro-pris"}],[165806122,{"idx":42,"name":"city-lowres-ctygen-build-03","tpage_name":"ltowcity-tfrag"}],[165806113,{"idx":33,"name":"palcab-lowres-mark-awning-green","tpage_name":"ltowcity-tfrag"}],[175767553,{"idx":1,"name":"daxter-furhilite","tpage_name":"loutro-pris"}],[173277193,{"idx":9,"name":"tow-basebone-01","tpage_name":"ltowera-vis-tfrag"}],[165806112,{"idx":32,"name":"palcab-lowres-mark-shops-01","tpage_name":"ltowcity-tfrag"}],[175767552,{"idx":0,"name":"bam-eyelight","tpage_name":"loutro-pris"}],[173277192,{"idx":8,"name":"tow-eggtop-01","tpage_name":"ltowera-vis-tfrag"}],[165806110,{"idx":30,"name":"city-lowres-ind-wall-06","tpage_name":"ltowcity-tfrag"}],[173277190,{"idx":6,"name":"tow-pup-detail-01","tpage_name":"ltowera-vis-tfrag"}],[165806109,{"idx":29,"name":"city-lowres-ind-wall-05","tpage_name":"ltowcity-tfrag"}],[173277189,{"idx":5,"name":"tow-pupeyes-01","tpage_name":"ltowera-vis-tfrag"}],[165806108,{"idx":28,"name":"city-lowres-ind-wall-08","tpage_name":"ltowcity-tfrag"}],[173277188,{"idx":4,"name":"tow-eggpod-01","tpage_name":"ltowera-vis-tfrag"}],[94240857,{"idx":89,"name":"palcab-lowres-background-shoreline-01","tpage_name":"intpfall-vis-tfrag"}],[121634817,{"idx":1,"name":"minb-spidweb-02","tpage_name":"mineb-vis-water"}],[94240856,{"idx":88,"name":"tcab-blue-ring-01","tpage_name":"intpfall-vis-tfrag"}],[121634816,{"idx":0,"name":"minb-spidweb-01","tpage_name":"mineb-vis-water"}],[173277187,{"idx":3,"name":"tow-pup-skin-01","tpage_name":"ltowera-vis-tfrag"}],[165806107,{"idx":27,"name":"city-lowres-ind-wall-07","tpage_name":"ltowcity-tfrag"}],[165806105,{"idx":25,"name":"city-lowres-port-roof","tpage_name":"ltowcity-tfrag"}],[165806104,{"idx":24,"name":"city-lowres-ind-wall-01","tpage_name":"ltowcity-tfrag"}],[165806103,{"idx":23,"name":"palcab-lowres-mark-roof-01","tpage_name":"ltowcity-tfrag"}],[172032001,{"idx":1,"name":"wstd-torchbowl-coal-01","tpage_name":"templeb-vis-shrub"}],[165806101,{"idx":21,"name":"city-lowres-fort-yellow","tpage_name":"ltowcity-tfrag"}],[135725071,{"idx":15,"name":"seem-headpiecetop","tpage_name":"lseemwca-pris2"}],[172032000,{"idx":0,"name":"temple-candle-wick","tpage_name":"templeb-vis-shrub"}],[170786820,{"idx":4,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"lcitysml-alpha"}],[165806100,{"idx":20,"name":"city-lowres-ind-wall-02","tpage_name":"ltowcity-tfrag"}],[135725070,{"idx":14,"name":"seem-headgearback","tpage_name":"lseemwca-pris2"}],[170786819,{"idx":3,"name":"palcab-lowres-background-trees2","tpage_name":"lcitysml-alpha"}],[165806099,{"idx":19,"name":"palcab-lowres-stadium-canopy","tpage_name":"ltowcity-tfrag"}],[170786818,{"idx":2,"name":"palcab-lowres-background-trees-edge","tpage_name":"lcitysml-alpha"}],[165806098,{"idx":18,"name":"palcab-steel-lores","tpage_name":"ltowcity-tfrag"}],[170786817,{"idx":1,"name":"palcab-lowres-background-crater-rim","tpage_name":"lcitysml-alpha"}],[165806097,{"idx":17,"name":"city-lowres-ind-wall-04","tpage_name":"ltowcity-tfrag"}],[165806093,{"idx":13,"name":"palcab-lowres-ctyslum-wall-04","tpage_name":"ltowcity-tfrag"}],[165806092,{"idx":12,"name":"palcab-lowres-ctyslum-roof-02","tpage_name":"ltowcity-tfrag"}],[165806088,{"idx":8,"name":"palcab-lowres-ctyslum-roof-03","tpage_name":"ltowcity-tfrag"}],[164692023,{"idx":55,"name":"prec-veger-vest","tpage_name":"railcst-pris2"}],[164692022,{"idx":54,"name":"prec-veger-spat","tpage_name":"railcst-pris2"}],[164692021,{"idx":53,"name":"prec-veger-sleeve","tpage_name":"railcst-pris2"}],[164692020,{"idx":52,"name":"prec-veger-orange","tpage_name":"railcst-pris2"}],[164692019,{"idx":51,"name":"prec-veger-nose","tpage_name":"railcst-pris2"}],[164692018,{"idx":50,"name":"prec-veger-newface","tpage_name":"railcst-pris2"}],[164692017,{"idx":49,"name":"prec-veger-neck","tpage_name":"railcst-pris2"}],[164692016,{"idx":48,"name":"prec-veger-mouth","tpage_name":"railcst-pris2"}],[164692015,{"idx":47,"name":"prec-veger-leg","tpage_name":"railcst-pris2"}],[164692014,{"idx":46,"name":"prec-veger-handpalm","tpage_name":"railcst-pris2"}],[164692013,{"idx":45,"name":"prec-veger-handback","tpage_name":"railcst-pris2"}],[164692012,{"idx":44,"name":"prec-veger-foot-02","tpage_name":"railcst-pris2"}],[164692011,{"idx":43,"name":"prec-veger-foot","tpage_name":"railcst-pris2"}],[164692010,{"idx":42,"name":"prec-veger-ear","tpage_name":"railcst-pris2"}],[164692009,{"idx":41,"name":"prec-veger-body","tpage_name":"railcst-pris2"}],[164692008,{"idx":40,"name":"daxterteeth","tpage_name":"railcst-pris2"}],[164692007,{"idx":39,"name":"daxter-furhilite","tpage_name":"railcst-pris2"}],[164692005,{"idx":37,"name":"veger-whitecloth","tpage_name":"railcst-pris2"}],[164692003,{"idx":35,"name":"veger-walkingstick-02","tpage_name":"railcst-pris2"}],[164692002,{"idx":34,"name":"veger-walkingstick-01","tpage_name":"railcst-pris2"}],[164692001,{"idx":33,"name":"veger-vest","tpage_name":"railcst-pris2"}],[164692000,{"idx":32,"name":"veger-teeth","tpage_name":"railcst-pris2"}],[164691999,{"idx":31,"name":"veger-stickwrap","tpage_name":"railcst-pris2"}],[172163078,{"idx":6,"name":"tpl-symbl-yellow-01","tpage_name":"templec-vis-water"}],[173408258,{"idx":2,"name":"tow-eggside-01","tpage_name":"ltowera-vis-alpha"}],[164691998,{"idx":30,"name":"veger-sleevelower","tpage_name":"railcst-pris2"}],[173408257,{"idx":1,"name":"tow-eggtop-01","tpage_name":"ltowera-vis-alpha"}],[172163077,{"idx":5,"name":"tpl-symbl-violet-01","tpage_name":"templec-vis-water"}],[164691997,{"idx":29,"name":"veger-sleeve","tpage_name":"railcst-pris2"}],[173408256,{"idx":0,"name":"tow-eggcase-01","tpage_name":"ltowera-vis-alpha"}],[172163076,{"idx":4,"name":"tpl-symbl-yellow-glow-01","tpage_name":"templec-vis-water"}],[164691996,{"idx":28,"name":"veger-shoulderplatemetal","tpage_name":"railcst-pris2"}],[172163075,{"idx":3,"name":"tpl-symbl-violet-glow-01","tpage_name":"templec-vis-water"}],[164691995,{"idx":27,"name":"veger-shoulderplate","tpage_name":"railcst-pris2"}],[172163074,{"idx":2,"name":"tplc-water","tpage_name":"templec-vis-water"}],[164691994,{"idx":26,"name":"veger-shoebottom","tpage_name":"railcst-pris2"}],[172163073,{"idx":1,"name":"tplc-water-dest","tpage_name":"templec-vis-water"}],[164691993,{"idx":25,"name":"veger-scarf","tpage_name":"railcst-pris2"}],[164691992,{"idx":24,"name":"veger-parchment","tpage_name":"railcst-pris2"}],[164691991,{"idx":23,"name":"veger-pants","tpage_name":"railcst-pris2"}],[164691990,{"idx":22,"name":"veger-pages","tpage_name":"railcst-pris2"}],[164691989,{"idx":21,"name":"veger-legwraps","tpage_name":"railcst-pris2"}],[164691988,{"idx":20,"name":"veger-iris","tpage_name":"railcst-pris2"}],[120258574,{"idx":14,"name":"homing-missle-fin-01","tpage_name":"lctyhijk-pris"}],[164626574,{"idx":142,"name":"prec-leader-robe-01","tpage_name":"railcst-pris"}],[206962694,{"idx":6,"name":"cityslumc-purple-plain","tpage_name":"lfreeout-tfrag"}],[205717514,{"idx":10,"name":"kg-target-gun-01","tpage_name":"lgunnorm-pris"}],[120258573,{"idx":13,"name":"homing-missle-exhaust","tpage_name":"lctyhijk-pris"}],[164626573,{"idx":141,"name":"prec-controller-rim","tpage_name":"railcst-pris"}],[189530173,{"idx":61,"name":"intcept-b-teeth01","tpage_name":"desrally-pris"}],[206962693,{"idx":5,"name":"ctyslumc-light-blue","tpage_name":"lfreeout-tfrag"}],[205717513,{"idx":9,"name":"kg-target-d-front","tpage_name":"lgunnorm-pris"}],[120258572,{"idx":12,"name":"homing-missle-body-tip","tpage_name":"lctyhijk-pris"}],[189530172,{"idx":60,"name":"intcept-b-pipe01","tpage_name":"desrally-pris"}],[206962692,{"idx":4,"name":"cityslumc-purple-column","tpage_name":"lfreeout-tfrag"}],[205717512,{"idx":8,"name":"kg-target-bonus-01","tpage_name":"lgunnorm-pris"}],[164626572,{"idx":140,"name":"prec-controller-plain","tpage_name":"railcst-pris"}],[81723462,{"idx":70,"name":"klever-shoe","tpage_name":"ljndklev-pris"}],[120258571,{"idx":11,"name":"homing-missle-body","tpage_name":"lctyhijk-pris"}],[189530171,{"idx":59,"name":"intcept-b-gun01","tpage_name":"desrally-pris"}],[206962691,{"idx":3,"name":"ctyslumc-wall-trim-LOW","tpage_name":"lfreeout-tfrag"}],[205717511,{"idx":7,"name":"kg-target-blasted-01","tpage_name":"lgunnorm-pris"}],[164626571,{"idx":139,"name":"prec-controller-dk","tpage_name":"railcst-pris"}],[81723461,{"idx":69,"name":"klever-horn","tpage_name":"ljndklev-pris"}],[120258570,{"idx":10,"name":"ctydecoy-siren-01","tpage_name":"lctyhijk-pris"}],[189530170,{"idx":58,"name":"intcept-b-base-patern02","tpage_name":"desrally-pris"}],[206962690,{"idx":2,"name":"ctyslumc-window-panes-LOW","tpage_name":"lfreeout-tfrag"}],[205717510,{"idx":6,"name":"kg-target-b-front-01","tpage_name":"lgunnorm-pris"}],[164626570,{"idx":138,"name":"prec-controller-but2","tpage_name":"railcst-pris"}],[120258569,{"idx":9,"name":"ctydecoy-round-01","tpage_name":"lctyhijk-pris"}],[206962689,{"idx":1,"name":"city-tile-LOW","tpage_name":"lfreeout-tfrag"}],[205717509,{"idx":5,"name":"kg-target-01","tpage_name":"lgunnorm-pris"}],[189530169,{"idx":57,"name":"intcept-b-base-patern01","tpage_name":"desrally-pris"}],[164626569,{"idx":137,"name":"prec-controller-but","tpage_name":"railcst-pris"}],[135463044,{"idx":132,"name":"dk-sat-screen-rim-01","tpage_name":"rubblea-vis-pris"}],[172818444,{"idx":12,"name":"precur-tubes-bundle-01","tpage_name":"precurd-vis-tfrag"}],[170328084,{"idx":20,"name":"rail-detail-01","tpage_name":"combe-tfrag"}],[81723459,{"idx":67,"name":"klever-gunmetal-05","tpage_name":"ljndklev-pris"}],[120258568,{"idx":8,"name":"ctydecoy-plate-09","tpage_name":"lctyhijk-pris"}],[189530168,{"idx":56,"name":"intcept-b-base-green01","tpage_name":"desrally-pris"}],[206962688,{"idx":0,"name":"cityslumc-awning-LOW","tpage_name":"lfreeout-tfrag"}],[205717508,{"idx":4,"name":"gun-dummy-side-a-01","tpage_name":"lgunnorm-pris"}],[164626568,{"idx":136,"name":"prec-controller-black","tpage_name":"railcst-pris"}],[135463043,{"idx":131,"name":"dk-sat-screen-01","tpage_name":"rubblea-vis-pris"}],[172818443,{"idx":11,"name":"precur-tube-joint-01","tpage_name":"precurd-vis-tfrag"}],[170328083,{"idx":19,"name":"rail-trim-01","tpage_name":"combe-tfrag"}],[81723458,{"idx":66,"name":"klever-gunmetal-04","tpage_name":"ljndklev-pris"}],[189530167,{"idx":55,"name":"wstlander-04-skirt","tpage_name":"desrally-pris"}],[205717507,{"idx":3,"name":"gun-citd-front-01","tpage_name":"lgunnorm-pris"}],[164626567,{"idx":135,"name":"prec-insidemouth","tpage_name":"railcst-pris"}],[135463042,{"idx":130,"name":"dk-sat-rim-bright-01","tpage_name":"rubblea-vis-pris"}],[170328082,{"idx":18,"name":"rail-light-blue-small","tpage_name":"combe-tfrag"}],[81723457,{"idx":65,"name":"klever-gunmetal-03","tpage_name":"ljndklev-pris"}],[189530166,{"idx":54,"name":"wstlander-04-shirt-strap","tpage_name":"desrally-pris"}],[205717506,{"idx":2,"name":"gun-citc-front-01","tpage_name":"lgunnorm-pris"}],[164626566,{"idx":134,"name":"prec-tess-shirtstraps","tpage_name":"railcst-pris"}],[189530165,{"idx":53,"name":"wstlander-04-shirt","tpage_name":"desrally-pris"}],[205717505,{"idx":1,"name":"gun-citb-front-01","tpage_name":"lgunnorm-pris"}],[164626565,{"idx":133,"name":"prec-dumb-sleeve","tpage_name":"railcst-pris"}],[81723455,{"idx":63,"name":"klever-gunmetal-01","tpage_name":"ljndklev-pris"}],[189530164,{"idx":52,"name":"wstlander-04-headband","tpage_name":"desrally-pris"}],[205717504,{"idx":0,"name":"gun-cita-front-01","tpage_name":"lgunnorm-pris"}],[164626564,{"idx":132,"name":"prec-dumb-shirt","tpage_name":"railcst-pris"}],[81723454,{"idx":62,"name":"klever-bolt","tpage_name":"ljndklev-pris"}],[189530163,{"idx":51,"name":"wstlander-04-gun","tpage_name":"desrally-pris"}],[164626563,{"idx":131,"name":"prec-dumb-pants","tpage_name":"railcst-pris"}],[81723453,{"idx":61,"name":"klever-blackstrap","tpage_name":"ljndklev-pris"}],[189530161,{"idx":49,"name":"wstlander-03-flesh","tpage_name":"desrally-pris"}],[164626561,{"idx":129,"name":"eco-lt-cryst-02","tpage_name":"railcst-pris"}],[81723451,{"idx":59,"name":"klever-armor-01","tpage_name":"ljndklev-pris"}],[189530160,{"idx":48,"name":"wstlander-03-eye","tpage_name":"desrally-pris"}],[164626560,{"idx":128,"name":"eco-lt-cryst-01","tpage_name":"railcst-pris"}],[189530159,{"idx":47,"name":"wstlander-02-skirt","tpage_name":"desrally-pris"}],[164626559,{"idx":127,"name":"dark-crystal-knob-02","tpage_name":"railcst-pris"}],[189530158,{"idx":46,"name":"wstlander-02-shirt","tpage_name":"desrally-pris"}],[194510878,{"idx":30,"name":"jinx-wraps","tpage_name":"gridcst-pris2"}],[164626558,{"idx":126,"name":"dark-crystal-knob-01","tpage_name":"railcst-pris"}],[194510861,{"idx":13,"name":"jinx-eyelid","tpage_name":"gridcst-pris2"}],[189530141,{"idx":29,"name":"wstlander-01-leatherstrap","tpage_name":"desrally-pris"}],[164626541,{"idx":109,"name":"torn-handle-01","tpage_name":"railcst-pris"}],[194510860,{"idx":12,"name":"jinx-cigarflame","tpage_name":"gridcst-pris2"}],[189530140,{"idx":28,"name":"wstlander-01-head","tpage_name":"desrally-pris"}],[164626540,{"idx":108,"name":"torn-gunbarrel-02","tpage_name":"railcst-pris"}],[194510859,{"idx":11,"name":"jinx-cigar","tpage_name":"gridcst-pris2"}],[189530139,{"idx":27,"name":"wstlander-01-gunmetal-04","tpage_name":"desrally-pris"}],[164626539,{"idx":107,"name":"torn-gunbarrel","tpage_name":"railcst-pris"}],[194510858,{"idx":10,"name":"jinx-buckles","tpage_name":"gridcst-pris2"}],[189530138,{"idx":26,"name":"wstlander-01-gunmetal-03","tpage_name":"desrally-pris"}],[164626538,{"idx":106,"name":"torn-armor","tpage_name":"railcst-pris"}],[189530126,{"idx":14,"name":"vehicle-toad-exhaust-01","tpage_name":"desrally-pris"}],[193265666,{"idx":2,"name":"tow-energy-bridge-dest","tpage_name":"towerb-vis-water"}],[164626526,{"idx":94,"name":"prec-staff-02","tpage_name":"railcst-pris"}],[189530125,{"idx":13,"name":"vehicle-metal-plate-01","tpage_name":"desrally-pris"}],[164626525,{"idx":93,"name":"prec-staff-01","tpage_name":"railcst-pris"}],[189530124,{"idx":12,"name":"vehicle-gun-box-01","tpage_name":"desrally-pris"}],[164626524,{"idx":92,"name":"prec-orbsmall","tpage_name":"railcst-pris"}],[189530123,{"idx":11,"name":"vehicle-gas-tank-01","tpage_name":"desrally-pris"}],[164626523,{"idx":91,"name":"prec-orblarge","tpage_name":"railcst-pris"}],[189530122,{"idx":10,"name":"vehicle-chrome-pipe-01","tpage_name":"desrally-pris"}],[164626522,{"idx":90,"name":"prec-leader-wrap","tpage_name":"railcst-pris"}],[189530121,{"idx":9,"name":"vehicle-cap-pin-01","tpage_name":"desrally-pris"}],[164626521,{"idx":89,"name":"prec-leader-shirt","tpage_name":"railcst-pris"}],[189530120,{"idx":8,"name":"vehicle-brace-pipe-01","tpage_name":"desrally-pris"}],[164626520,{"idx":88,"name":"prec-leader-robe-02","tpage_name":"railcst-pris"}],[189530119,{"idx":7,"name":"vehicle-body-panel-01","tpage_name":"desrally-pris"}],[164626519,{"idx":87,"name":"prec-leader-pants","tpage_name":"railcst-pris"}],[189530118,{"idx":6,"name":"intcept-tread01","tpage_name":"desrally-pris"}],[164626518,{"idx":86,"name":"prec-leader-frontskirt","tpage_name":"railcst-pris"}],[189530117,{"idx":5,"name":"intcept-teeth01","tpage_name":"desrally-pris"}],[164626517,{"idx":85,"name":"prec-leader-belt","tpage_name":"railcst-pris"}],[189530116,{"idx":4,"name":"intcept-pipe01","tpage_name":"desrally-pris"}],[164626516,{"idx":84,"name":"prec-leader-arm","tpage_name":"railcst-pris"}],[189530115,{"idx":3,"name":"intcept-gun01","tpage_name":"desrally-pris"}],[164626515,{"idx":83,"name":"prec-surfer-sleeve","tpage_name":"railcst-pris"}],[189530114,{"idx":2,"name":"intcept-base-patern02","tpage_name":"desrally-pris"}],[164626514,{"idx":82,"name":"prec-surfer-shirt","tpage_name":"railcst-pris"}],[189530113,{"idx":1,"name":"intcept-base-patern01","tpage_name":"desrally-pris"}],[164626513,{"idx":81,"name":"prec-surfer-sash","tpage_name":"railcst-pris"}],[189530112,{"idx":0,"name":"intcept-base-green01","tpage_name":"desrally-pris"}],[164626512,{"idx":80,"name":"prec-surfer-pants","tpage_name":"railcst-pris"}],[164626511,{"idx":79,"name":"prec-surfer-hairshort","tpage_name":"railcst-pris"}],[164626510,{"idx":78,"name":"prec-surfer-hair","tpage_name":"railcst-pris"}],[164626509,{"idx":77,"name":"prec-surfer-chain-03","tpage_name":"railcst-pris"}],[164626508,{"idx":76,"name":"prec-surfer-chain-02","tpage_name":"railcst-pris"}],[164626507,{"idx":75,"name":"prec-surfer-chain","tpage_name":"railcst-pris"}],[164626506,{"idx":74,"name":"prec-neck","tpage_name":"railcst-pris"}],[164626505,{"idx":73,"name":"prec-leader-armband","tpage_name":"railcst-pris"}],[164626504,{"idx":72,"name":"prec-handpalm","tpage_name":"railcst-pris"}],[164626503,{"idx":71,"name":"prec-hand-back","tpage_name":"railcst-pris"}],[164626491,{"idx":59,"name":"prec-teeth","tpage_name":"railcst-pris"}],[164626490,{"idx":58,"name":"prec-leader-headshield","tpage_name":"railcst-pris"}],[164626489,{"idx":57,"name":"prec-leader-hair","tpage_name":"railcst-pris"}],[164626488,{"idx":56,"name":"prec-leader-foreheadshield","tpage_name":"railcst-pris"}],[164626487,{"idx":55,"name":"prec-leader-face2","tpage_name":"railcst-pris"}],[164626486,{"idx":54,"name":"prec-leader-beard","tpage_name":"railcst-pris"}],[164626485,{"idx":53,"name":"jakchires-teeth","tpage_name":"railcst-pris"}],[164626484,{"idx":52,"name":"jakchires-shoeteop","tpage_name":"railcst-pris"}],[164626483,{"idx":51,"name":"jakchires-shoemetal","tpage_name":"railcst-pris"}],[164626482,{"idx":50,"name":"jakchires-shoebottom","tpage_name":"railcst-pris"}],[164626481,{"idx":49,"name":"jakchires-precarmor-01","tpage_name":"railcst-pris"}],[164626480,{"idx":48,"name":"jakchires-pants","tpage_name":"railcst-pris"}],[164626479,{"idx":47,"name":"jakchires-lightbrownspat","tpage_name":"railcst-pris"}],[164626478,{"idx":46,"name":"jakchires-leatherpouch","tpage_name":"railcst-pris"}],[164626477,{"idx":45,"name":"jakchires-jacket","tpage_name":"railcst-pris"}],[164626476,{"idx":44,"name":"jakchires-horn","tpage_name":"railcst-pris"}],[164626475,{"idx":43,"name":"jakchires-hair","tpage_name":"railcst-pris"}],[164626474,{"idx":42,"name":"jakchires-glovetop","tpage_name":"railcst-pris"}],[164626473,{"idx":41,"name":"jakchires-facert","tpage_name":"railcst-pris"}],[164626472,{"idx":40,"name":"jakchires-facelft","tpage_name":"railcst-pris"}],[164626471,{"idx":39,"name":"jakchires-eyelid","tpage_name":"railcst-pris"}],[164626469,{"idx":37,"name":"jakchires-eye","tpage_name":"railcst-pris"}],[174587907,{"idx":3,"name":"nst-egg-spider-metal","tpage_name":"lbbspid-pris"}],[164626467,{"idx":35,"name":"jakchires-chestplate","tpage_name":"railcst-pris"}],[174587906,{"idx":2,"name":"nst-egg-spider-eye","tpage_name":"lbbspid-pris"}],[173342726,{"idx":6,"name":"tow-slime-01","tpage_name":"ltowera-vis-shrub"}],[164626466,{"idx":34,"name":"jakchires-brwnleather","tpage_name":"railcst-pris"}],[174587905,{"idx":1,"name":"nst-egg-spider-egg","tpage_name":"lbbspid-pris"}],[173342725,{"idx":5,"name":"tow-eggside-01","tpage_name":"ltowera-vis-shrub"}],[164626465,{"idx":33,"name":"jakchires-brownstrap","tpage_name":"railcst-pris"}],[174587904,{"idx":0,"name":"nst-egg-spider-body","tpage_name":"lbbspid-pris"}],[173342724,{"idx":4,"name":"tow-groundpod","tpage_name":"ltowera-vis-shrub"}],[164626464,{"idx":32,"name":"jakchires-blackstrap","tpage_name":"railcst-pris"}],[173342723,{"idx":3,"name":"tow-wall-supports","tpage_name":"ltowera-vis-shrub"}],[164626463,{"idx":31,"name":"jakchires-arm","tpage_name":"railcst-pris"}],[164626462,{"idx":30,"name":"jakc-wristband-a2","tpage_name":"railcst-pris"}],[174325794,{"idx":34,"name":"jakchires-chestplate","tpage_name":"ldesgcst-pris"}],[164364354,{"idx":66,"name":"rub-cement-top","tpage_name":"rubblea2-vis-tfrag"}],[184287234,{"idx":2,"name":"preship-metal-window-01","tpage_name":"loutro-shrub"}],[176816154,{"idx":26,"name":"ecocreature-joint","tpage_name":"towera-pris"}],[173867011,{"idx":3,"name":"dash01","tpage_name":"ltowerb-vis-pris"}],[163905571,{"idx":35,"name":"rail-trim-01","tpage_name":"raila-pris"}],[173867010,{"idx":2,"name":"bam-hairhilite","tpage_name":"ltowerb-vis-pris"}],[163905570,{"idx":34,"name":"rail-detail-01","tpage_name":"raila-pris"}],[173867009,{"idx":1,"name":"bam-eyelight","tpage_name":"ltowerb-vis-pris"}],[163905569,{"idx":33,"name":"rail-pipe-01","tpage_name":"raila-pris"}],[173867008,{"idx":0,"name":"backThing01","tpage_name":"ltowerb-vis-pris"}],[163905568,{"idx":32,"name":"rail-edge-01","tpage_name":"raila-pris"}],[163905567,{"idx":31,"name":"rail-cord-01","tpage_name":"raila-pris"}],[127008783,{"idx":15,"name":"vola-grass-fringe-05-HI","tpage_name":"volcanox-tfrag"}],[130744323,{"idx":3,"name":"des-rock-shrub-01","tpage_name":"deserth-vis-shrub"}],[171376645,{"idx":5,"name":"lightjak-wings-v-src","tpage_name":"templea-vis-water"}],[163905565,{"idx":29,"name":"rail-pipe-03","tpage_name":"raila-pris"}],[130744321,{"idx":1,"name":"des-shrub-pebbles","tpage_name":"deserth-vis-shrub"}],[171376644,{"idx":4,"name":"lightjak-wings-u-src","tpage_name":"templea-vis-water"}],[172621824,{"idx":0,"name":"precur-tube-joint-01","tpage_name":"precura-vis-shrub"}],[163905564,{"idx":28,"name":"rail-light-red","tpage_name":"raila-pris"}],[130744320,{"idx":0,"name":"des-sand-grass-01","tpage_name":"deserth-vis-shrub"}],[171376641,{"idx":1,"name":"templea-waterfall-dest","tpage_name":"templea-vis-water"}],[163905561,{"idx":25,"name":"rail-env-wall-01","tpage_name":"raila-pris"}],[170131456,{"idx":0,"name":"bam-eyelight","tpage_name":"outrocst-pris"}],[163905556,{"idx":20,"name":"rail-base-mid-01","tpage_name":"raila-pris"}],[135397391,{"idx":15,"name":"rub-ground-01-small","tpage_name":"rubblea-vis-shrub"}],[170459140,{"idx":4,"name":"daxter-orange","tpage_name":"ljkdxvin-pris"}],[162988060,{"idx":28,"name":"comb-env2","tpage_name":"railb-tfrag"}],[129171490,{"idx":34,"name":"sewer-black","tpage_name":"sewn-vis-tfrag"}],[135397390,{"idx":14,"name":"rub-crater-shards-01","tpage_name":"rubblea-vis-shrub"}],[170459139,{"idx":3,"name":"daxter-furhilite","tpage_name":"ljkdxvin-pris"}],[162988059,{"idx":27,"name":"rail-env-wall-01","tpage_name":"railb-tfrag"}],[129171489,{"idx":33,"name":"sewer-mantel-02","tpage_name":"sewn-vis-tfrag"}],[135397389,{"idx":13,"name":"rub-scorch","tpage_name":"rubblea-vis-shrub"}],[170459138,{"idx":2,"name":"daxter-eyelid","tpage_name":"ljkdxvin-pris"}],[162988058,{"idx":26,"name":"comb-pipe2","tpage_name":"railb-tfrag"}],[162988057,{"idx":25,"name":"rail-light-red","tpage_name":"railb-tfrag"}],[170459137,{"idx":1,"name":"bam-hairhilite","tpage_name":"ljkdxvin-pris"}],[129171488,{"idx":32,"name":"sewer-stone-crack-03","tpage_name":"sewn-vis-tfrag"}],[135397388,{"idx":12,"name":"rub-met-strp-close","tpage_name":"rubblea-vis-shrub"}],[129171487,{"idx":31,"name":"sewer-block-03-hitweak","tpage_name":"sewn-vis-tfrag"}],[135397387,{"idx":11,"name":"rub-wall-small-grill","tpage_name":"rubblea-vis-shrub"}],[170459136,{"idx":0,"name":"bam-eyelight","tpage_name":"ljkdxvin-pris"}],[162988056,{"idx":24,"name":"comb-ring","tpage_name":"railb-tfrag"}],[162988055,{"idx":23,"name":"rail-pipe-02","tpage_name":"railb-tfrag"}],[162988054,{"idx":22,"name":"rail-pipe-05","tpage_name":"railb-tfrag"}],[162988053,{"idx":21,"name":"comb-redmarker","tpage_name":"railb-tfrag"}],[162988052,{"idx":20,"name":"rail-trim-01","tpage_name":"railb-tfrag"}],[162988051,{"idx":19,"name":"rail-light-yellow","tpage_name":"railb-tfrag"}],[162988049,{"idx":17,"name":"rail-env-car-01","tpage_name":"railb-tfrag"}],[162988048,{"idx":16,"name":"rail-rock-01","tpage_name":"railb-tfrag"}],[162988047,{"idx":15,"name":"rail-pipe-03","tpage_name":"railb-tfrag"}],[162988046,{"idx":14,"name":"rail-pipe-01","tpage_name":"railb-tfrag"}],[162988045,{"idx":13,"name":"rail-cord-01","tpage_name":"railb-tfrag"}],[162988044,{"idx":12,"name":"rail-detail-01","tpage_name":"railb-tfrag"}],[162988043,{"idx":11,"name":"rail-light-blue-small","tpage_name":"railb-tfrag"}],[162988042,{"idx":10,"name":"rail-gray-metal-01","tpage_name":"railb-tfrag"}],[162988041,{"idx":9,"name":"rail-base-dark-01","tpage_name":"railb-tfrag"}],[162988040,{"idx":8,"name":"rail-base-mid-01","tpage_name":"railb-tfrag"}],[162988039,{"idx":7,"name":"rail-edge-01","tpage_name":"railb-tfrag"}],[162988038,{"idx":6,"name":"rail-light-blue","tpage_name":"railb-tfrag"}],[162988037,{"idx":5,"name":"rail-patch-01","tpage_name":"railb-tfrag"}],[162988035,{"idx":3,"name":"comb-temp-glass","tpage_name":"railb-tfrag"}],[162988034,{"idx":2,"name":"comb-temp-dark","tpage_name":"railb-tfrag"}],[162922526,{"idx":30,"name":"rail-env-wall-01","tpage_name":"raild-tfrag"}],[171638786,{"idx":2,"name":"comb-plate-02","tpage_name":"templed-vis-tfrag"}],[162922524,{"idx":28,"name":"rail-tread-01","tpage_name":"raild-tfrag"}],[171638784,{"idx":0,"name":"comb-temp-dark","tpage_name":"templed-vis-tfrag"}],[162922520,{"idx":24,"name":"rail-light-yellow-small","tpage_name":"raild-tfrag"}],[162922518,{"idx":22,"name":"rail-light-red","tpage_name":"raild-tfrag"}],[162922517,{"idx":21,"name":"rail-light-yellow","tpage_name":"raild-tfrag"}],[162922516,{"idx":20,"name":"comb-redmarker","tpage_name":"raild-tfrag"}],[162922515,{"idx":19,"name":"rail-rock-01","tpage_name":"raild-tfrag"}],[162922514,{"idx":18,"name":"rail-pipe-05","tpage_name":"raild-tfrag"}],[162922513,{"idx":17,"name":"rail-gray-metal-01","tpage_name":"raild-tfrag"}],[162922512,{"idx":16,"name":"rail-light-blue","tpage_name":"raild-tfrag"}],[162922511,{"idx":15,"name":"rail-pipe-03","tpage_name":"raild-tfrag"}],[162922510,{"idx":14,"name":"rail-pipe-01","tpage_name":"raild-tfrag"}],[162922509,{"idx":13,"name":"rail-cord-01","tpage_name":"raild-tfrag"}],[162922508,{"idx":12,"name":"rail-detail-01","tpage_name":"raild-tfrag"}],[162922507,{"idx":11,"name":"rail-env-car-01","tpage_name":"raild-tfrag"}],[162922505,{"idx":9,"name":"rail-base-dark-01","tpage_name":"raild-tfrag"}],[162922504,{"idx":8,"name":"rail-base-mid-01","tpage_name":"raild-tfrag"}],[162922503,{"idx":7,"name":"rail-edge-01","tpage_name":"raild-tfrag"}],[162922502,{"idx":6,"name":"rail-light-blue-small","tpage_name":"raild-tfrag"}],[162922501,{"idx":5,"name":"rail-patch-01","tpage_name":"raild-tfrag"}],[162922500,{"idx":4,"name":"rail-trim-01","tpage_name":"raild-tfrag"}],[162922498,{"idx":2,"name":"comb-temp-glass","tpage_name":"raild-tfrag"}],[162922497,{"idx":1,"name":"comb-temp-dark","tpage_name":"raild-tfrag"}],[170262530,{"idx":2,"name":"dust-sparkle","tpage_name":"stadiuma-sprite"}],[162791450,{"idx":26,"name":"rail-light-red","tpage_name":"railc-tfrag"}],[162791449,{"idx":25,"name":"rail-pipe-05","tpage_name":"railc-tfrag"}],[170262528,{"idx":0,"name":"missile-target-01","tpage_name":"stadiuma-sprite"}],[162791448,{"idx":24,"name":"rail-light-yellow","tpage_name":"railc-tfrag"}],[162791447,{"idx":23,"name":"comb-redmarker","tpage_name":"railc-tfrag"}],[162791446,{"idx":22,"name":"rail-env-wall-01","tpage_name":"railc-tfrag"}],[162791445,{"idx":21,"name":"rail-rock-01","tpage_name":"railc-tfrag"}],[162791444,{"idx":20,"name":"rail-light-yellow-small","tpage_name":"railc-tfrag"}],[162791443,{"idx":19,"name":"rail-tread-01","tpage_name":"railc-tfrag"}],[162791442,{"idx":18,"name":"rail-trim-01","tpage_name":"railc-tfrag"}],[162791441,{"idx":17,"name":"rail-pipe-03","tpage_name":"railc-tfrag"}],[162791440,{"idx":16,"name":"rail-pipe-01","tpage_name":"railc-tfrag"}],[162791439,{"idx":15,"name":"rail-cord-01","tpage_name":"railc-tfrag"}],[162791438,{"idx":14,"name":"rail-detail-01","tpage_name":"railc-tfrag"}],[162791437,{"idx":13,"name":"rail-light-blue-small","tpage_name":"railc-tfrag"}],[162791436,{"idx":12,"name":"rail-gray-metal-01","tpage_name":"railc-tfrag"}],[170196994,{"idx":2,"name":"ashelin-boottop","tpage_name":"outrocst-pris2"}],[162725914,{"idx":26,"name":"comb-env2","tpage_name":"railf-tfrag"}],[170196993,{"idx":1,"name":"ashelin-bolts","tpage_name":"outrocst-pris2"}],[162725913,{"idx":25,"name":"comb-pipe2","tpage_name":"railf-tfrag"}],[174325788,{"idx":28,"name":"jakc-wraps","tpage_name":"ldesgcst-pris"}],[159383628,{"idx":76,"name":"keira-torch-nozzle-02","tpage_name":"slumbset-pris"}],[164364348,{"idx":60,"name":"rub-elec-switch-light-off","tpage_name":"rubblea2-vis-tfrag"}],[176816148,{"idx":20,"name":"dp-bipedal-toe-01","tpage_name":"towera-pris"}],[174325787,{"idx":27,"name":"jakc-waistband2","tpage_name":"ldesgcst-pris"}],[159383627,{"idx":75,"name":"keira-torch-nozzle-01","tpage_name":"slumbset-pris"}],[164364347,{"idx":59,"name":"rub-elec-switch-light-on","tpage_name":"rubblea2-vis-tfrag"}],[176816147,{"idx":19,"name":"dp-bipedal-spine-01","tpage_name":"towera-pris"}],[174325786,{"idx":26,"name":"jakc-skirt","tpage_name":"ldesgcst-pris"}],[159383626,{"idx":74,"name":"keira-torch-guard-01","tpage_name":"slumbset-pris"}],[164364346,{"idx":58,"name":"rub-copper-metal-01","tpage_name":"rubblea2-vis-tfrag"}],[176816146,{"idx":18,"name":"dp-bipedal-skin-ribs-01","tpage_name":"towera-pris"}],[174325785,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"ldesgcst-pris"}],[159383625,{"idx":73,"name":"keira-shoebottom","tpage_name":"slumbset-pris"}],[164364345,{"idx":57,"name":"rub-lamp-light-01","tpage_name":"rubblea2-vis-tfrag"}],[176816145,{"idx":17,"name":"dp-bipedal-skin-plate-small-01","tpage_name":"towera-pris"}],[174325784,{"idx":24,"name":"jakc-scarf","tpage_name":"ldesgcst-pris"}],[159383624,{"idx":72,"name":"keira-shirt","tpage_name":"slumbset-pris"}],[164364344,{"idx":56,"name":"rub-lamp-fencespike-round","tpage_name":"rubblea2-vis-tfrag"}],[176816144,{"idx":16,"name":"dp-bipedal-skin-plate-01","tpage_name":"towera-pris"}],[174325783,{"idx":23,"name":"jakc-lens","tpage_name":"ldesgcst-pris"}],[159383623,{"idx":71,"name":"keira-pantslarge","tpage_name":"slumbset-pris"}],[176816143,{"idx":15,"name":"dp-bipedal-skin-bulge-02","tpage_name":"towera-pris"}],[174325782,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"ldesgcst-pris"}],[159383622,{"idx":70,"name":"keira-maskbolt","tpage_name":"slumbset-pris"}],[176816142,{"idx":14,"name":"dp-bipedal-skin-bulge-01","tpage_name":"towera-pris"}],[174325781,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"ldesgcst-pris"}],[159383621,{"idx":69,"name":"keira-lens-large","tpage_name":"slumbset-pris"}],[179306501,{"idx":5,"name":"hud-small-frame-02","tpage_name":"factoryd-minimap"}],[176816141,{"idx":13,"name":"dp-bipedal-power-hose","tpage_name":"towera-pris"}],[159383620,{"idx":68,"name":"keira-largewraps","tpage_name":"slumbset-pris"}],[179306500,{"idx":4,"name":"hud-small-frame-01","tpage_name":"factoryd-minimap"}],[176816140,{"idx":12,"name":"dp-bipedal-nose-01","tpage_name":"towera-pris"}],[174325780,{"idx":20,"name":"jakc-armor","tpage_name":"ldesgcst-pris"}],[159383619,{"idx":67,"name":"keira-iris-64x64","tpage_name":"slumbset-pris"}],[179306499,{"idx":3,"name":"hud-mhcentipede-meter-01","tpage_name":"factoryd-minimap"}],[176816139,{"idx":11,"name":"dp-bipedal-finger-plate-01","tpage_name":"towera-pris"}],[174325779,{"idx":19,"name":"environment-oldmetal","tpage_name":"ldesgcst-pris"}],[174325778,{"idx":18,"name":"daxtertuft","tpage_name":"ldesgcst-pris"}],[159383618,{"idx":66,"name":"keira-handtop","tpage_name":"slumbset-pris"}],[176816138,{"idx":10,"name":"dp-bipedal-eye-01","tpage_name":"towera-pris"}],[159383617,{"idx":65,"name":"keira-handbottom","tpage_name":"slumbset-pris"}],[179306497,{"idx":1,"name":"hud-errol-02","tpage_name":"factoryd-minimap"}],[176816137,{"idx":9,"name":"dp-bipedal-dk-stomach-plate-01","tpage_name":"towera-pris"}],[174325777,{"idx":17,"name":"daxterteeth","tpage_name":"ldesgcst-pris"}],[174325776,{"idx":16,"name":"daxternose","tpage_name":"ldesgcst-pris"}],[159383616,{"idx":64,"name":"keira-hair-newest","tpage_name":"slumbset-pris"}],[164364336,{"idx":48,"name":"rub-rock-small","tpage_name":"rubblea2-vis-tfrag"}],[179306496,{"idx":0,"name":"hud-errol-01","tpage_name":"factoryd-minimap"}],[176816136,{"idx":8,"name":"dp-bipedal-dk-sm-plate-01","tpage_name":"towera-pris"}],[159383615,{"idx":63,"name":"keira-gogglestrap","tpage_name":"slumbset-pris"}],[164364335,{"idx":47,"name":"rub-window-02","tpage_name":"rubblea2-vis-tfrag"}],[176816135,{"idx":7,"name":"dp-bipedal-dk-plate-04","tpage_name":"towera-pris"}],[174325775,{"idx":15,"name":"daxterlense","tpage_name":"ldesgcst-pris"}],[174325774,{"idx":14,"name":"daxterhelmetplain","tpage_name":"ldesgcst-pris"}],[164364334,{"idx":46,"name":"rub-roof-tile","tpage_name":"rubblea2-vis-tfrag"}],[159383614,{"idx":62,"name":"keira-glovenewlarge","tpage_name":"slumbset-pris"}],[176816134,{"idx":6,"name":"dp-bipedal-dk-plate-03","tpage_name":"towera-pris"}],[171835414,{"idx":22,"name":"timemap-wordborder","tpage_name":"templed-vis-pris"}],[164364333,{"idx":45,"name":"rub-grass-fringe","tpage_name":"rubblea2-vis-tfrag"}],[159383613,{"idx":61,"name":"keira-glasses","tpage_name":"slumbset-pris"}],[176816133,{"idx":5,"name":"dp-bipedal-dk-plate-02","tpage_name":"towera-pris"}],[174325773,{"idx":13,"name":"daxterheadwidenew","tpage_name":"ldesgcst-pris"}],[171835413,{"idx":21,"name":"timemap-smallball-02","tpage_name":"templed-vis-pris"}],[164364332,{"idx":44,"name":"rub-cement-broken-end","tpage_name":"rubblea2-vis-tfrag"}],[159383612,{"idx":60,"name":"keira-face","tpage_name":"slumbset-pris"}],[176816132,{"idx":4,"name":"dp-bipedal-dk-plate-01","tpage_name":"towera-pris"}],[174325772,{"idx":12,"name":"daxtergoggles","tpage_name":"ldesgcst-pris"}],[171835412,{"idx":20,"name":"timemap-smallball-01","tpage_name":"templed-vis-pris"}],[159383611,{"idx":59,"name":"keira-eyelid","tpage_name":"slumbset-pris"}],[164364331,{"idx":43,"name":"rub-wallrock-dirt","tpage_name":"rubblea2-vis-tfrag"}],[176816131,{"idx":3,"name":"dp-bipedal-dk-hose-01","tpage_name":"towera-pris"}],[174325771,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"ldesgcst-pris"}],[171835411,{"idx":19,"name":"timemap-precmetal-teeth","tpage_name":"templed-vis-pris"}],[159383610,{"idx":58,"name":"keira-chokermetal","tpage_name":"slumbset-pris"}],[164364330,{"idx":42,"name":"rub-stream-rocks","tpage_name":"rubblea2-vis-tfrag"}],[176816130,{"idx":2,"name":"dp-bipedal-chest-01","tpage_name":"towera-pris"}],[174325770,{"idx":10,"name":"daxterfoot","tpage_name":"ldesgcst-pris"}],[171835410,{"idx":18,"name":"timemap-precmetal-plain-large","tpage_name":"templed-vis-pris"}],[159383609,{"idx":57,"name":"keira-chokerhighres","tpage_name":"slumbset-pris"}],[164364329,{"idx":41,"name":"rub-grass","tpage_name":"rubblea2-vis-tfrag"}],[176816129,{"idx":1,"name":"dp-bipedal-backhand-01","tpage_name":"towera-pris"}],[174325769,{"idx":9,"name":"daxterfinger","tpage_name":"ldesgcst-pris"}],[171835409,{"idx":17,"name":"timemap-precmetal-feet","tpage_name":"templed-vis-pris"}],[159383608,{"idx":56,"name":"keira-brownstraps-new","tpage_name":"slumbset-pris"}],[164364328,{"idx":40,"name":"rub-wall-side-beam","tpage_name":"rubblea2-vis-tfrag"}],[176816128,{"idx":0,"name":"common-black","tpage_name":"towera-pris"}],[174325768,{"idx":8,"name":"daxterear","tpage_name":"ldesgcst-pris"}],[171835408,{"idx":16,"name":"timemap-notchborder","tpage_name":"templed-vis-pris"}],[159383607,{"idx":55,"name":"keira-blackstrap","tpage_name":"slumbset-pris"}],[164364327,{"idx":39,"name":"rub-metal-01","tpage_name":"rubblea2-vis-tfrag"}],[174325767,{"idx":7,"name":"daxterbolt","tpage_name":"ldesgcst-pris"}],[171835407,{"idx":15,"name":"timemap-centerball","tpage_name":"templed-vis-pris"}],[164364326,{"idx":38,"name":"rub-wall-gen-06","tpage_name":"rubblea2-vis-tfrag"}],[159383606,{"idx":54,"name":"keira-belt","tpage_name":"slumbset-pris"}],[174325766,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"ldesgcst-pris"}],[171835406,{"idx":14,"name":"timemap-ball-precmetal","tpage_name":"templed-vis-pris"}],[159383594,{"idx":42,"name":"jakchires-hair","tpage_name":"slumbset-pris"}],[164364314,{"idx":26,"name":"rub-city-wall-main","tpage_name":"rubblea2-vis-tfrag"}],[94240816,{"idx":48,"name":"city-lowres-ctygen-build-02","tpage_name":"intpfall-vis-tfrag"}],[165609493,{"idx":21,"name":"dm-missle-tip-glow-01","tpage_name":"wasdefen-pris"}],[159383593,{"idx":41,"name":"jakchires-glovetop","tpage_name":"slumbset-pris"}],[164364313,{"idx":25,"name":"rub-city-wall-bottom-frame","tpage_name":"rubblea2-vis-tfrag"}],[94240815,{"idx":47,"name":"city-lowres-ctygen-roof-02","tpage_name":"intpfall-vis-tfrag"}],[159383588,{"idx":36,"name":"jakchires-eye","tpage_name":"slumbset-pris"}],[165609488,{"idx":16,"name":"dp-robot-pipe-01","tpage_name":"wasdefen-pris"}],[164364308,{"idx":20,"name":"rub-palshaft-dirt-blue-01","tpage_name":"rubblea2-vis-tfrag"}],[129302559,{"idx":31,"name":"grunt-skin-01","tpage_name":"sewn-vis-pris"}],[2147418112,{"idx":0,"name":"placeholder-white","tpage_name":"placeholder"}],[94240810,{"idx":42,"name":"city-lowres-ctygen-side-02","tpage_name":"intpfall-vis-tfrag"}],[159383587,{"idx":35,"name":"jakchires-clips","tpage_name":"slumbset-pris"}],[165609487,{"idx":15,"name":"dp-robot-panel-06","tpage_name":"wasdefen-pris"}],[164364307,{"idx":19,"name":"rub-citywall","tpage_name":"rubblea2-vis-tfrag"}],[129302558,{"idx":30,"name":"grunt-metal-01","tpage_name":"sewn-vis-pris"}],[94240809,{"idx":41,"name":"palcab-lowres-mark-highway","tpage_name":"intpfall-vis-tfrag"}],[159383586,{"idx":34,"name":"jakchires-chestplate","tpage_name":"slumbset-pris"}],[165609486,{"idx":14,"name":"dp-robot-panel-02","tpage_name":"wasdefen-pris"}],[164364306,{"idx":18,"name":"rub-city-wall-frame","tpage_name":"rubblea2-vis-tfrag"}],[129302557,{"idx":29,"name":"grunt-hose","tpage_name":"sewn-vis-pris"}],[94240808,{"idx":40,"name":"palcab-lowres-mark-awning-red","tpage_name":"intpfall-vis-tfrag"}],[159383585,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"slumbset-pris"}],[165609485,{"idx":13,"name":"dp-robot-hull-04","tpage_name":"wasdefen-pris"}],[164364305,{"idx":17,"name":"rub-stone-05","tpage_name":"rubblea2-vis-tfrag"}],[129302556,{"idx":28,"name":"grunt-gem-01","tpage_name":"sewn-vis-pris"}],[94240807,{"idx":39,"name":"palcab-lowres-mark-awning-green","tpage_name":"intpfall-vis-tfrag"}],[159383584,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"slumbset-pris"}],[165609484,{"idx":12,"name":"dp-robot-hull-02","tpage_name":"wasdefen-pris"}],[164364304,{"idx":16,"name":"rub-roof-support","tpage_name":"rubblea2-vis-tfrag"}],[129302555,{"idx":27,"name":"grunt-eye-01","tpage_name":"sewn-vis-pris"}],[94240806,{"idx":38,"name":"palcab-lowres-mark-shops-01","tpage_name":"intpfall-vis-tfrag"}],[159383583,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"slumbset-pris"}],[165609483,{"idx":11,"name":"dp-robot-hull-01","tpage_name":"wasdefen-pris"}],[164364303,{"idx":15,"name":"rub-rock","tpage_name":"rubblea2-vis-tfrag"}],[94240805,{"idx":37,"name":"palcab-lowres-mark-roof-rim-01","tpage_name":"intpfall-vis-tfrag"}],[159383582,{"idx":30,"name":"jakchires-arm","tpage_name":"slumbset-pris"}],[165609482,{"idx":10,"name":"dp-robot-hex-pattern-01","tpage_name":"wasdefen-pris"}],[164364302,{"idx":14,"name":"rub-wall-gen-01","tpage_name":"rubblea2-vis-tfrag"}],[61079560,{"idx":8,"name":"gekko-tubes","tpage_name":"minec-vis-pris"}],[94240804,{"idx":36,"name":"palcab-lowres-farm-wall-top","tpage_name":"intpfall-vis-tfrag"}],[165609480,{"idx":8,"name":"dp-robot-eyes","tpage_name":"wasdefen-pris"}],[159383580,{"idx":28,"name":"jakc-wraps","tpage_name":"slumbset-pris"}],[164364300,{"idx":12,"name":"rub-wall-gen-02","tpage_name":"rubblea2-vis-tfrag"}],[60620942,{"idx":142,"name":"pecker-yellowfur","tpage_name":"minea-vis-pris"}],[94240802,{"idx":34,"name":"city-lowres-ind-wall-06","tpage_name":"intpfall-vis-tfrag"}],[48627758,{"idx":46,"name":"sewer-metal-block-05","tpage_name":"sewb-vis-tfrag"}],[61079558,{"idx":6,"name":"gekko-metal-01","tpage_name":"minec-vis-pris"}],[159383579,{"idx":27,"name":"jakc-waistband2","tpage_name":"slumbset-pris"}],[164364299,{"idx":11,"name":"rub-wall-gen-04","tpage_name":"rubblea2-vis-tfrag"}],[165609479,{"idx":7,"name":"dp-robot-cable-01","tpage_name":"wasdefen-pris"}],[165609478,{"idx":6,"name":"dp-robot-tendons-01","tpage_name":"wasdefen-pris"}],[159383578,{"idx":26,"name":"jakc-skirt","tpage_name":"slumbset-pris"}],[164364298,{"idx":10,"name":"rub-panels-01","tpage_name":"rubblea2-vis-tfrag"}],[60620940,{"idx":140,"name":"pecker-wingbottom","tpage_name":"minea-vis-pris"}],[94240800,{"idx":32,"name":"city-lowres-ind-wall-08","tpage_name":"intpfall-vis-tfrag"}],[165609477,{"idx":5,"name":"dp-robot-rim-01","tpage_name":"wasdefen-pris"}],[159383577,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"slumbset-pris"}],[164364297,{"idx":9,"name":"rub-palace-tower-side","tpage_name":"rubblea2-vis-tfrag"}],[60620939,{"idx":139,"name":"pecker-teeth","tpage_name":"minea-vis-pris"}],[94240799,{"idx":31,"name":"city-lowres-ind-wall-07","tpage_name":"intpfall-vis-tfrag"}],[159383576,{"idx":24,"name":"jakc-scarf","tpage_name":"slumbset-pris"}],[165609476,{"idx":4,"name":"dp-robot-panel-05","tpage_name":"wasdefen-pris"}],[164364296,{"idx":8,"name":"rub-city-wall-inside-damaged","tpage_name":"rubblea2-vis-tfrag"}],[60620938,{"idx":138,"name":"pecker-tail","tpage_name":"minea-vis-pris"}],[94240798,{"idx":30,"name":"city-lowres-ind-wall-03","tpage_name":"intpfall-vis-tfrag"}],[165609475,{"idx":3,"name":"dp-robot-panel-03","tpage_name":"wasdefen-pris"}],[159383575,{"idx":23,"name":"jakc-lens","tpage_name":"slumbset-pris"}],[164364295,{"idx":7,"name":"rub-wall-side-beam-02","tpage_name":"rubblea2-vis-tfrag"}],[60620937,{"idx":137,"name":"pecker-plume","tpage_name":"minea-vis-pris"}],[94240797,{"idx":29,"name":"city-lowres-port-roof","tpage_name":"intpfall-vis-tfrag"}],[165609474,{"idx":2,"name":"dp-robot-leg-hull-01","tpage_name":"wasdefen-pris"}],[159383574,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"slumbset-pris"}],[164364294,{"idx":6,"name":"rub-wall-trim","tpage_name":"rubblea2-vis-tfrag"}],[60620936,{"idx":136,"name":"pecker-face","tpage_name":"minea-vis-pris"}],[94240796,{"idx":28,"name":"city-lowres-ind-wall-01","tpage_name":"intpfall-vis-tfrag"}],[165609473,{"idx":1,"name":"dp-robot-hull-03","tpage_name":"wasdefen-pris"}],[159383573,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"slumbset-pris"}],[164364293,{"idx":5,"name":"rub-rubble-01","tpage_name":"rubblea2-vis-tfrag"}],[60620935,{"idx":135,"name":"pecker-eyelid","tpage_name":"minea-vis-pris"}],[94240795,{"idx":27,"name":"city-side-support","tpage_name":"intpfall-vis-tfrag"}],[159383571,{"idx":19,"name":"environment-oldmetal","tpage_name":"slumbset-pris"}],[164364291,{"idx":3,"name":"rub-metal-flatpipe-01","tpage_name":"rubblea2-vis-tfrag"}],[60620933,{"idx":133,"name":"minc-rust-03","tpage_name":"minea-vis-pris"}],[94240793,{"idx":25,"name":"city-lowres-fort-red","tpage_name":"intpfall-vis-tfrag"}],[159383569,{"idx":17,"name":"daxterteeth","tpage_name":"slumbset-pris"}],[164364289,{"idx":1,"name":"rub-beam-gen","tpage_name":"rubblea2-vis-tfrag"}],[60620931,{"idx":131,"name":"minc-bolt","tpage_name":"minea-vis-pris"}],[94240791,{"idx":23,"name":"city-lowres-ind-wall-02","tpage_name":"intpfall-vis-tfrag"}],[159383568,{"idx":16,"name":"daxternose","tpage_name":"slumbset-pris"}],[164364288,{"idx":0,"name":"rub-wall-gen-03","tpage_name":"rubblea2-vis-tfrag"}],[60620930,{"idx":130,"name":"minc-base-metal-platfrom-01","tpage_name":"minea-vis-pris"}],[94240790,{"idx":22,"name":"palcab-lowres-stadium-canopy","tpage_name":"intpfall-vis-tfrag"}],[159318050,{"idx":34,"name":"rail-pipe-05","tpage_name":"comba-tfrag"}],[159318049,{"idx":33,"name":"rail-pipe-02","tpage_name":"comba-tfrag"}],[159318048,{"idx":32,"name":"rail-gray-metal-01","tpage_name":"comba-tfrag"}],[159318047,{"idx":31,"name":"comb-redmarker","tpage_name":"comba-tfrag"}],[159318045,{"idx":29,"name":"rail-cord-01","tpage_name":"comba-tfrag"}],[159318044,{"idx":28,"name":"rail-pipe-03","tpage_name":"comba-tfrag"}],[159318043,{"idx":27,"name":"rail-edge-01","tpage_name":"comba-tfrag"}],[159318042,{"idx":26,"name":"comb-yell-light","tpage_name":"comba-tfrag"}],[159318041,{"idx":25,"name":"comb-env2","tpage_name":"comba-tfrag"}],[159318040,{"idx":24,"name":"comb-grate","tpage_name":"comba-tfrag"}],[159318033,{"idx":17,"name":"comb-pipe","tpage_name":"comba-tfrag"}],[159252482,{"idx":2,"name":"ctyslumb-fountain-fall-dest","tpage_name":"slumbset-water"}],[159252481,{"idx":1,"name":"keira-mask","tpage_name":"slumbset-water"}],[159252480,{"idx":0,"name":"ctyslumb-water-dest","tpage_name":"slumbset-water"}],[172818432,{"idx":0,"name":"precur-road-plate-01","tpage_name":"precurd-vis-tfrag"}],[170328072,{"idx":8,"name":"comb-yell-light","tpage_name":"combe-tfrag"}],[159121452,{"idx":44,"name":"cityslumc-metal-trim","tpage_name":"slumbset-tfrag"}],[171573251,{"idx":3,"name":"temple_flag03","tpage_name":"templea-vis-shrub"}],[159121451,{"idx":43,"name":"ctyslumc-wall-colored2","tpage_name":"slumbset-tfrag"}],[170328070,{"idx":6,"name":"rail-light-blue","tpage_name":"combe-tfrag"}],[159121450,{"idx":42,"name":"ctyslumc-wall-colored","tpage_name":"slumbset-tfrag"}],[171573249,{"idx":1,"name":"temple_sandstone_ground01","tpage_name":"templea-vis-shrub"}],[170328069,{"idx":5,"name":"rail-edge-01","tpage_name":"combe-tfrag"}],[159121449,{"idx":41,"name":"ctyslumc-light","tpage_name":"slumbset-tfrag"}],[171573248,{"idx":0,"name":"wstd-torchbowl-coal-01","tpage_name":"templea-vis-shrub"}],[170328068,{"idx":4,"name":"rail-cord-01","tpage_name":"combe-tfrag"}],[159121448,{"idx":40,"name":"stdm-bush-01","tpage_name":"slumbset-tfrag"}],[170328067,{"idx":3,"name":"rail-base-dark-01","tpage_name":"combe-tfrag"}],[159121447,{"idx":39,"name":"ctyslumc-vine-hang-a","tpage_name":"slumbset-tfrag"}],[127795237,{"idx":37,"name":"city-lowres-ctygen-stripe-01","tpage_name":"lfaccity-tfrag"}],[162856986,{"idx":26,"name":"rail-trim-01","tpage_name":"raile-tfrag"}],[159121446,{"idx":38,"name":"ctyslumc-wall-sliver","tpage_name":"slumbset-tfrag"}],[170328065,{"idx":1,"name":"comb-temp-glass","tpage_name":"combe-tfrag"}],[162856985,{"idx":25,"name":"comb-ring","tpage_name":"raile-tfrag"}],[159121445,{"idx":37,"name":"common-gun-panel-03","tpage_name":"slumbset-tfrag"}],[127795235,{"idx":35,"name":"palcab-lowres-mark-awning-red","tpage_name":"lfaccity-tfrag"}],[170328064,{"idx":0,"name":"comb-temp-dark","tpage_name":"combe-tfrag"}],[162856984,{"idx":24,"name":"comb-temp-dark","tpage_name":"raile-tfrag"}],[159121444,{"idx":36,"name":"ctyslumc-brown","tpage_name":"slumbset-tfrag"}],[127795234,{"idx":34,"name":"palcab-lowres-mark-awning-green","tpage_name":"lfaccity-tfrag"}],[162856983,{"idx":23,"name":"rail-env-wall-01","tpage_name":"raile-tfrag"}],[159121443,{"idx":35,"name":"ctyslumc-window","tpage_name":"slumbset-tfrag"}],[127795233,{"idx":33,"name":"palcab-lowres-mark-shops-01","tpage_name":"lfaccity-tfrag"}],[162856982,{"idx":22,"name":"rail-pipe-02","tpage_name":"raile-tfrag"}],[159121442,{"idx":34,"name":"cityslumc-pipe","tpage_name":"slumbset-tfrag"}],[162856981,{"idx":21,"name":"rail-pipe-05","tpage_name":"raile-tfrag"}],[159121441,{"idx":33,"name":"cityslumc-door","tpage_name":"slumbset-tfrag"}],[162856980,{"idx":20,"name":"rail-fit-01","tpage_name":"raile-tfrag"}],[159121440,{"idx":32,"name":"cityslumc-top-pillar","tpage_name":"slumbset-tfrag"}],[159121439,{"idx":31,"name":"cityslumc-little-gold","tpage_name":"slumbset-tfrag"}],[162856978,{"idx":18,"name":"rail-light-red","tpage_name":"raile-tfrag"}],[159121438,{"idx":30,"name":"ctyslumc-light-blue","tpage_name":"slumbset-tfrag"}],[162856977,{"idx":17,"name":"rail-light-yellow","tpage_name":"raile-tfrag"}],[159121437,{"idx":29,"name":"cityslumc-gold-trim","tpage_name":"slumbset-tfrag"}],[162856976,{"idx":16,"name":"comb-redmarker","tpage_name":"raile-tfrag"}],[159121436,{"idx":28,"name":"ctyslumc-overhang-01","tpage_name":"slumbset-tfrag"}],[162856975,{"idx":15,"name":"rail-light-yellow-small","tpage_name":"raile-tfrag"}],[159121435,{"idx":27,"name":"cityslumc-wall-surface-01","tpage_name":"slumbset-tfrag"}],[162856974,{"idx":14,"name":"comb-temp-glass","tpage_name":"raile-tfrag"}],[159121434,{"idx":26,"name":"ctyslumc-wall-trim","tpage_name":"slumbset-tfrag"}],[162856973,{"idx":13,"name":"rail-rock-01","tpage_name":"raile-tfrag"}],[159121433,{"idx":25,"name":"cityslumc-grey-side-pillar","tpage_name":"slumbset-tfrag"}],[162856972,{"idx":12,"name":"rail-env-car-01","tpage_name":"raile-tfrag"}],[159121432,{"idx":24,"name":"cityslumc-awning","tpage_name":"slumbset-tfrag"}],[162856971,{"idx":11,"name":"rail-gray-metal-01","tpage_name":"raile-tfrag"}],[159121431,{"idx":23,"name":"ctyslumc-window-panes","tpage_name":"slumbset-tfrag"}],[162856970,{"idx":10,"name":"rail-base-dark-01","tpage_name":"raile-tfrag"}],[159121430,{"idx":22,"name":"ctyslumc-roof","tpage_name":"slumbset-tfrag"}],[162856969,{"idx":9,"name":"rail-light-blue","tpage_name":"raile-tfrag"}],[159121429,{"idx":21,"name":"ctyslumc-green","tpage_name":"slumbset-tfrag"}],[162856968,{"idx":8,"name":"rail-patch-01","tpage_name":"raile-tfrag"}],[159121428,{"idx":20,"name":"ctyslumc-window-panes2","tpage_name":"slumbset-tfrag"}],[162856967,{"idx":7,"name":"rail-pipe-03","tpage_name":"raile-tfrag"}],[159121427,{"idx":19,"name":"cityslumc-pinkish-purple","tpage_name":"slumbset-tfrag"}],[162856966,{"idx":6,"name":"rail-pipe-01","tpage_name":"raile-tfrag"}],[159121426,{"idx":18,"name":"ctyslumc-overhang-03","tpage_name":"slumbset-tfrag"}],[162856965,{"idx":5,"name":"rail-cord-01","tpage_name":"raile-tfrag"}],[159121425,{"idx":17,"name":"ctyslumc-pinetree-big-bark","tpage_name":"slumbset-tfrag"}],[162856964,{"idx":4,"name":"rail-detail-01","tpage_name":"raile-tfrag"}],[159121424,{"idx":16,"name":"ctyslumc-tree-top","tpage_name":"slumbset-tfrag"}],[162856963,{"idx":3,"name":"rail-light-blue-small","tpage_name":"raile-tfrag"}],[159121423,{"idx":15,"name":"ctyslumc-flowerbed-flowers-a","tpage_name":"slumbset-tfrag"}],[162856962,{"idx":2,"name":"rail-base-mid-01","tpage_name":"raile-tfrag"}],[159121422,{"idx":14,"name":"ctyslumc-grass","tpage_name":"slumbset-tfrag"}],[162856961,{"idx":1,"name":"rail-edge-01","tpage_name":"raile-tfrag"}],[159121421,{"idx":13,"name":"common-black","tpage_name":"slumbset-tfrag"}],[159121420,{"idx":12,"name":"ctyslumc-overhang-02","tpage_name":"slumbset-tfrag"}],[159121419,{"idx":11,"name":"cityslumc-purple-column-2","tpage_name":"slumbset-tfrag"}],[159121418,{"idx":10,"name":"cityslumc-purple-column","tpage_name":"slumbset-tfrag"}],[159121417,{"idx":9,"name":"cityslumc-door-plate","tpage_name":"slumbset-tfrag"}],[159121416,{"idx":8,"name":"cityslumc-lamp-gold","tpage_name":"slumbset-tfrag"}],[159121415,{"idx":7,"name":"cityslumc-lamp-red","tpage_name":"slumbset-tfrag"}],[159121414,{"idx":6,"name":"ctyslumc-light-amber","tpage_name":"slumbset-tfrag"}],[159121413,{"idx":5,"name":"cityslumc-lamp-small","tpage_name":"slumbset-tfrag"}],[122159159,{"idx":55,"name":"palace-break-rebar","tpage_name":"factoryb-vis-tfrag"}],[159121412,{"idx":4,"name":"ctyslumc-billc","tpage_name":"slumbset-tfrag"}],[122159158,{"idx":54,"name":"fac-tower-girder-01","tpage_name":"factoryb-vis-tfrag"}],[159121411,{"idx":3,"name":"ctyslumc-wall","tpage_name":"slumbset-tfrag"}],[122159157,{"idx":53,"name":"fac-tower-base-rim-01","tpage_name":"factoryb-vis-tfrag"}],[159121410,{"idx":2,"name":"ctyslumc-floor-base","tpage_name":"slumbset-tfrag"}],[122159156,{"idx":52,"name":"fac-tower-broken-metal-02","tpage_name":"factoryb-vis-tfrag"}],[159121409,{"idx":1,"name":"ctyslumc-railing-trim","tpage_name":"slumbset-tfrag"}],[159121408,{"idx":0,"name":"cityslumc-purple-plain","tpage_name":"slumbset-tfrag"}],[71303171,{"idx":3,"name":"sig-belt","tpage_name":"ldamsig-pris2"}],[48889931,{"idx":75,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewd-vis-tfrag"}],[172556305,{"idx":17,"name":"precur-light-green-02","tpage_name":"precurb-vis-tfrag"}],[155123785,{"idx":73,"name":"mhcity-de-tower-egg-inside","tpage_name":"mhctycst-pris"}],[172556304,{"idx":16,"name":"precur-frame-small-01","tpage_name":"precurb-vis-tfrag"}],[155123784,{"idx":72,"name":"jakchires-hair-norm","tpage_name":"mhctycst-pris"}],[71303169,{"idx":1,"name":"charHOLD","tpage_name":"ldamsig-pris2"}],[48889929,{"idx":73,"name":"sewer-red-light-01","tpage_name":"sewd-vis-tfrag"}],[172556303,{"idx":15,"name":"precur-tube-joint-02","tpage_name":"precurb-vis-tfrag"}],[155123783,{"idx":71,"name":"jakchires-hair-dark","tpage_name":"mhctycst-pris"}],[172556302,{"idx":14,"name":"precur-plate-end-01","tpage_name":"precurb-vis-tfrag"}],[155123782,{"idx":70,"name":"jakchires-facert-norm","tpage_name":"mhctycst-pris"}],[172556301,{"idx":13,"name":"precur-floor-plate-01","tpage_name":"precurb-vis-tfrag"}],[155123781,{"idx":69,"name":"jakchires-facert-dark","tpage_name":"mhctycst-pris"}],[172556300,{"idx":12,"name":"precur-tubes-segment-01","tpage_name":"precurb-vis-tfrag"}],[155123780,{"idx":68,"name":"jakchires-facelft-norm","tpage_name":"mhctycst-pris"}],[155123779,{"idx":67,"name":"jakchires-facelft-dark","tpage_name":"mhctycst-pris"}],[172556299,{"idx":11,"name":"precur-nail-01","tpage_name":"precurb-vis-tfrag"}],[155123778,{"idx":66,"name":"jakchires-eyelid-norm","tpage_name":"mhctycst-pris"}],[173801478,{"idx":6,"name":"tow-slime-01","tpage_name":"towerb-vis-shrub"}],[172556298,{"idx":10,"name":"precur-light-green-01","tpage_name":"precurb-vis-tfrag"}],[173801477,{"idx":5,"name":"tow-eggside-01","tpage_name":"towerb-vis-shrub"}],[172556297,{"idx":9,"name":"precur-floor-plate-02","tpage_name":"precurb-vis-tfrag"}],[155123777,{"idx":65,"name":"jakchires-eyelid-dark","tpage_name":"mhctycst-pris"}],[48758820,{"idx":36,"name":"sewer-pipe-rim-09","tpage_name":"sewc-vis-tfrag"}],[53739540,{"idx":20,"name":"cguardgame-scarf","tpage_name":"forestb-vis-pris"}],[173801476,{"idx":4,"name":"tow-groundpod","tpage_name":"towerb-vis-shrub"}],[172556296,{"idx":8,"name":"precur-tubes-bundle-01","tpage_name":"precurb-vis-tfrag"}],[155123776,{"idx":64,"name":"jakchires-eyebrow-norm","tpage_name":"mhctycst-pris"}],[48758819,{"idx":35,"name":"sewer-plate-06","tpage_name":"sewc-vis-tfrag"}],[53739539,{"idx":19,"name":"cguardgame-metallight-plain","tpage_name":"forestb-vis-pris"}],[173801475,{"idx":3,"name":"tow-wall-supports","tpage_name":"towerb-vis-shrub"}],[172556295,{"idx":7,"name":"precur-tube-joint-01","tpage_name":"precurb-vis-tfrag"}],[155123775,{"idx":63,"name":"jakchires-eyebrow-dark","tpage_name":"mhctycst-pris"}],[48758818,{"idx":34,"name":"sewer-pipe-rim-10","tpage_name":"sewc-vis-tfrag"}],[53739538,{"idx":18,"name":"cguardgame-metallight-02","tpage_name":"forestb-vis-pris"}],[172556294,{"idx":6,"name":"precur-plate-thin-01","tpage_name":"precurb-vis-tfrag"}],[155123774,{"idx":62,"name":"jakchires-eye-norm","tpage_name":"mhctycst-pris"}],[48758817,{"idx":33,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewc-vis-tfrag"}],[53739537,{"idx":17,"name":"cguardgame-metallight-01small","tpage_name":"forestb-vis-pris"}],[172556293,{"idx":5,"name":"precur-tubes-segment-02","tpage_name":"precurb-vis-tfrag"}],[155123773,{"idx":61,"name":"jakchires-eye-dark","tpage_name":"mhctycst-pris"}],[53739536,{"idx":16,"name":"cguardgame-metalered-01","tpage_name":"forestb-vis-pris"}],[172556292,{"idx":4,"name":"precur-wall-groove-01","tpage_name":"precurb-vis-tfrag"}],[155123772,{"idx":60,"name":"jakchires-arm-norm","tpage_name":"mhctycst-pris"}],[48758815,{"idx":31,"name":"sewer-pipe-rim-06","tpage_name":"sewc-vis-tfrag"}],[53739535,{"idx":15,"name":"cguardgame-metaledark-02","tpage_name":"forestb-vis-pris"}],[172556291,{"idx":3,"name":"precur-wall-brace-01","tpage_name":"precurb-vis-tfrag"}],[155123771,{"idx":59,"name":"jakchires-arm-dark","tpage_name":"mhctycst-pris"}],[53739534,{"idx":14,"name":"cguardgame-jacketstrap","tpage_name":"forestb-vis-pris"}],[172556290,{"idx":2,"name":"precur-light-blue-01","tpage_name":"precurb-vis-tfrag"}],[155123770,{"idx":58,"name":"mhcity-vein-01","tpage_name":"mhctycst-pris"}],[48758813,{"idx":29,"name":"sewer-pipe-02-edge-01","tpage_name":"sewc-vis-tfrag"}],[53739533,{"idx":13,"name":"cguardgame-guntube","tpage_name":"forestb-vis-pris"}],[172556289,{"idx":1,"name":"precur-tubes-small-01","tpage_name":"precurb-vis-tfrag"}],[155123769,{"idx":57,"name":"mhcity-grunt-egg-metal-01","tpage_name":"mhctycst-pris"}],[48758812,{"idx":28,"name":"sewer-pipe-rim-01","tpage_name":"sewc-vis-tfrag"}],[53739532,{"idx":12,"name":"cguardgame-gunmetaldark2","tpage_name":"forestb-vis-pris"}],[172556288,{"idx":0,"name":"precur-plate-large-01","tpage_name":"precurb-vis-tfrag"}],[155123768,{"idx":56,"name":"mhcity-grunt-egg-horns-01","tpage_name":"mhctycst-pris"}],[48758811,{"idx":27,"name":"sewer-rubber-rim-01","tpage_name":"sewc-vis-tfrag"}],[53739531,{"idx":11,"name":"cguardgame-gunmetaldark","tpage_name":"forestb-vis-pris"}],[155123764,{"idx":52,"name":"jakchires-teeth","tpage_name":"mhctycst-pris"}],[48758807,{"idx":23,"name":"sewer-block-01","tpage_name":"sewc-vis-tfrag"}],[53739527,{"idx":7,"name":"cguardgame-greyheadshield","tpage_name":"forestb-vis-pris"}],[155123763,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"mhctycst-pris"}],[48758806,{"idx":22,"name":"sewer-block-02","tpage_name":"sewc-vis-tfrag"}],[53739526,{"idx":6,"name":"cguardgame-face","tpage_name":"forestb-vis-pris"}],[155123762,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"mhctycst-pris"}],[48758805,{"idx":21,"name":"sewer-pipe-02","tpage_name":"sewc-vis-tfrag"}],[53739525,{"idx":5,"name":"cguardgame-ear","tpage_name":"forestb-vis-pris"}],[155123761,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"mhctycst-pris"}],[48758804,{"idx":20,"name":"sewer-plate-05-hitweak","tpage_name":"sewc-vis-tfrag"}],[53739524,{"idx":4,"name":"cguardgame-chestplate","tpage_name":"forestb-vis-pris"}],[170065920,{"idx":0,"name":"comb-grate","tpage_name":"combn-alpha"}],[155123760,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"mhctycst-pris"}],[48758803,{"idx":19,"name":"sewer-concrete-edge-02","tpage_name":"sewc-vis-tfrag"}],[53739523,{"idx":3,"name":"cguardgame-boottop","tpage_name":"forestb-vis-pris"}],[155123759,{"idx":47,"name":"jakchires-pants","tpage_name":"mhctycst-pris"}],[53739522,{"idx":2,"name":"cguardgame-blackstrap","tpage_name":"forestb-vis-pris"}],[155123758,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"mhctycst-pris"}],[48758801,{"idx":17,"name":"sewer-pipe-small-02","tpage_name":"sewc-vis-tfrag"}],[53739521,{"idx":1,"name":"cguardgame-backplate","tpage_name":"forestb-vis-pris"}],[155123757,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"mhctycst-pris"}],[48758800,{"idx":16,"name":"sewer-concrete-edge-01","tpage_name":"sewc-vis-tfrag"}],[53739520,{"idx":0,"name":"cguardgame-armshield","tpage_name":"forestb-vis-pris"}],[155123756,{"idx":44,"name":"jakchires-jacket","tpage_name":"mhctycst-pris"}],[155123755,{"idx":43,"name":"jakchires-horn","tpage_name":"mhctycst-pris"}],[155123754,{"idx":42,"name":"jakchires-hair","tpage_name":"mhctycst-pris"}],[162594833,{"idx":17,"name":"comb-pre-metal-fade-plain","tpage_name":"comba-alpha"}],[155123753,{"idx":41,"name":"jakchires-glovetop","tpage_name":"mhctycst-pris"}],[162594832,{"idx":16,"name":"comb-pre-metal-01-plain","tpage_name":"comba-alpha"}],[155123752,{"idx":40,"name":"jakchires-facert","tpage_name":"mhctycst-pris"}],[162594831,{"idx":15,"name":"comb-pre-metal-fade-yellow","tpage_name":"comba-alpha"}],[155123751,{"idx":39,"name":"jakchires-facelft","tpage_name":"mhctycst-pris"}],[162594830,{"idx":14,"name":"comb-pre-metal-01-yellow","tpage_name":"comba-alpha"}],[155123750,{"idx":38,"name":"jakchires-eyelid","tpage_name":"mhctycst-pris"}],[155123748,{"idx":36,"name":"jakchires-eye","tpage_name":"mhctycst-pris"}],[162594828,{"idx":12,"name":"rail-light-red","tpage_name":"comba-alpha"}],[155123747,{"idx":35,"name":"jakchires-clips","tpage_name":"mhctycst-pris"}],[162594826,{"idx":10,"name":"comb-env2","tpage_name":"comba-alpha"}],[155123746,{"idx":34,"name":"jakchires-chestplate","tpage_name":"mhctycst-pris"}],[155123736,{"idx":24,"name":"jakc-scarf","tpage_name":"mhctycst-pris"}],[162594816,{"idx":0,"name":"comb-grate","tpage_name":"comba-alpha"}],[155123728,{"idx":16,"name":"daxternose","tpage_name":"mhctycst-pris"}],[154664964,{"idx":4,"name":"wascity-turret-hud-health-01","tpage_name":"wascityb-minimap"}],[155910144,{"idx":0,"name":"mhcity-de-tower-egg","tpage_name":"mhctycst-water"}],[154402818,{"idx":2,"name":"vehicle-tread-02","tpage_name":"ltrtwhls-pris"}],[154402817,{"idx":1,"name":"vehicle-wheel-01","tpage_name":"ltrtwhls-pris"}],[154337282,{"idx":2,"name":"remote-button","tpage_name":"ltnjxhip-tfrag"}],[154337281,{"idx":1,"name":"remote-metal-face-01","tpage_name":"ltnjxhip-tfrag"}],[154337280,{"idx":0,"name":"remote-metal-face-02","tpage_name":"ltnjxhip-tfrag"}],[153878539,{"idx":11,"name":"pecker-wingtop","tpage_name":"ldmpckgn-pris"}],[155123719,{"idx":7,"name":"daxterbolt","tpage_name":"mhctycst-pris"}],[153813013,{"idx":21,"name":"mh-spawner-inner-mouth-01","tpage_name":"mhcityb-vis-pris"}],[153813009,{"idx":17,"name":"mhcity-tower-door-metal-01","tpage_name":"mhcityb-vis-pris"}],[137232387,{"idx":3,"name":"daxter-furhilite","tpage_name":"citycast-pris"}],[61079562,{"idx":10,"name":"grunt-gem-01","tpage_name":"minec-vis-pris"}],[48627762,{"idx":50,"name":"sewer-brick-block-09","tpage_name":"sewb-vis-tfrag"}],[153813007,{"idx":15,"name":"mhcity-grunt-egg-horns-01","tpage_name":"mhcityb-vis-pris"}],[137232385,{"idx":1,"name":"bam-hairhilite","tpage_name":"citycast-pris"}],[118751258,{"idx":26,"name":"seem-skirt","tpage_name":"wcaseem-pris2"}],[153813001,{"idx":9,"name":"mhcity-twitch-blade-cap","tpage_name":"mhcityb-vis-pris"}],[118751252,{"idx":20,"name":"seem-precmetal-chestplate-01","tpage_name":"wcaseem-pris2"}],[61079554,{"idx":2,"name":"gekko-fingers","tpage_name":"minec-vis-pris"}],[48627754,{"idx":42,"name":"sewer-block-02","tpage_name":"sewb-vis-tfrag"}],[153813000,{"idx":8,"name":"mhcity-grunt-egg-metal-01","tpage_name":"mhcityb-vis-pris"}],[118751251,{"idx":19,"name":"seem-pipes-02","tpage_name":"wcaseem-pris2"}],[61079553,{"idx":1,"name":"gekko-eye-01","tpage_name":"minec-vis-pris"}],[48627753,{"idx":41,"name":"sewer-plate-01","tpage_name":"sewb-vis-tfrag"}],[153681941,{"idx":21,"name":"mhcity-bigwall","tpage_name":"mhcityb-vis-tfrag"}],[153681940,{"idx":20,"name":"mhcity-base-02","tpage_name":"mhcityb-vis-tfrag"}],[153681939,{"idx":19,"name":"mhcity-lilhouse-door-frame","tpage_name":"mhcityb-vis-tfrag"}],[153681938,{"idx":18,"name":"mhcity-black","tpage_name":"mhcityb-vis-tfrag"}],[153681937,{"idx":17,"name":"mhcity-grunt-egg-neck-01","tpage_name":"mhcityb-vis-tfrag"}],[153681936,{"idx":16,"name":"mhcity-building-door-frame","tpage_name":"mhcityb-vis-tfrag"}],[153681935,{"idx":15,"name":"mhcity-building-base-01","tpage_name":"mhcityb-vis-tfrag"}],[153681934,{"idx":14,"name":"mhcity-grunt-egg-metal-01","tpage_name":"mhcityb-vis-tfrag"}],[157417473,{"idx":1,"name":"hud-jetboard-health","tpage_name":"lforplnt-minimap"}],[153681933,{"idx":13,"name":"mhcity-gapfiller-top-01","tpage_name":"mhcityb-vis-tfrag"}],[153681930,{"idx":10,"name":"mhcity-grunt-egg-03-to-floor","tpage_name":"mhcityb-vis-tfrag"}],[153681929,{"idx":9,"name":"mhcity-skin-ground-to-floor-01","tpage_name":"mhcityb-vis-tfrag"}],[153681928,{"idx":8,"name":"mhcity-vein-01","tpage_name":"mhcityb-vis-tfrag"}],[153681927,{"idx":7,"name":"mhcity-floor-brace-02","tpage_name":"mhcityb-vis-tfrag"}],[153681926,{"idx":6,"name":"mhcity-skin-ground-01","tpage_name":"mhcityb-vis-tfrag"}],[153681925,{"idx":5,"name":"mhcity-grunt-egg-03","tpage_name":"mhcityb-vis-tfrag"}],[153681924,{"idx":4,"name":"mhcity-baserock","tpage_name":"mhcityb-vis-tfrag"}],[153681923,{"idx":3,"name":"mhcity-wall-tentacle-02","tpage_name":"mhcityb-vis-tfrag"}],[153681922,{"idx":2,"name":"mhcity-grunt-egg-rim-01","tpage_name":"mhcityb-vis-tfrag"}],[153681921,{"idx":1,"name":"mhcity-eggskin","tpage_name":"mhcityb-vis-tfrag"}],[153681920,{"idx":0,"name":"mhcity-wall-tentacle-01","tpage_name":"mhcityb-vis-tfrag"}],[153354270,{"idx":30,"name":"mhcity-twitch-blade-cap","tpage_name":"mhcitya-vis-pris"}],[153354269,{"idx":29,"name":"mhcity-puffer-top-01","tpage_name":"mhcitya-vis-pris"}],[153354262,{"idx":22,"name":"mhcity-de-door-glow-off","tpage_name":"mhcitya-vis-pris"}],[153354261,{"idx":21,"name":"mhcity-de-door-glow-01","tpage_name":"mhcitya-vis-pris"}],[153092139,{"idx":43,"name":"rail-monitor-screen-02","tpage_name":"railx-tfrag"}],[159318039,{"idx":23,"name":"comb-pipe3","tpage_name":"comba-tfrag"}],[153092138,{"idx":42,"name":"rail-monitor-screen-01","tpage_name":"railx-tfrag"}],[159318038,{"idx":22,"name":"comb-pipe2","tpage_name":"comba-tfrag"}],[153092137,{"idx":41,"name":"rail-light-red","tpage_name":"railx-tfrag"}],[159318037,{"idx":21,"name":"comb-plate-02","tpage_name":"comba-tfrag"}],[153092136,{"idx":40,"name":"rail-light-blue-small-2","tpage_name":"railx-tfrag"}],[159318036,{"idx":20,"name":"comb-comb-tile","tpage_name":"comba-tfrag"}],[153092135,{"idx":39,"name":"rail-light-blue-small-3","tpage_name":"railx-tfrag"}],[159318035,{"idx":19,"name":"rail-pipe-01","tpage_name":"comba-tfrag"}],[153092134,{"idx":38,"name":"rail-light-blue-small","tpage_name":"railx-tfrag"}],[159318034,{"idx":18,"name":"comb-long-vent","tpage_name":"comba-tfrag"}],[153092132,{"idx":36,"name":"rail-grate-01","tpage_name":"railx-tfrag"}],[159318032,{"idx":16,"name":"rail-light-red","tpage_name":"comba-tfrag"}],[153092131,{"idx":35,"name":"rail-step-07","tpage_name":"railx-tfrag"}],[159318031,{"idx":15,"name":"comb-ring","tpage_name":"comba-tfrag"}],[153092130,{"idx":34,"name":"rail-step-02","tpage_name":"railx-tfrag"}],[159318030,{"idx":14,"name":"comb-pipe1","tpage_name":"comba-tfrag"}],[153092128,{"idx":32,"name":"rail-step-01","tpage_name":"railx-tfrag"}],[159318028,{"idx":12,"name":"comb-env","tpage_name":"comba-tfrag"}],[153092127,{"idx":31,"name":"rail-step-04","tpage_name":"railx-tfrag"}],[159318027,{"idx":11,"name":"rail-base-mid-01","tpage_name":"comba-tfrag"}],[153092124,{"idx":28,"name":"rail-fit-01","tpage_name":"railx-tfrag"}],[159318024,{"idx":8,"name":"comb-tarn-fade-wall-01","tpage_name":"comba-tfrag"}],[153092123,{"idx":27,"name":"rail-light-yellow-small","tpage_name":"railx-tfrag"}],[159318023,{"idx":7,"name":"comb-tarn-wall-01","tpage_name":"comba-tfrag"}],[153092122,{"idx":26,"name":"rail-pipe-04","tpage_name":"railx-tfrag"}],[159318022,{"idx":6,"name":"comb-crct-small","tpage_name":"comba-tfrag"}],[153092121,{"idx":25,"name":"rail-pipe-03","tpage_name":"railx-tfrag"}],[159318021,{"idx":5,"name":"comb-crct-medium","tpage_name":"comba-tfrag"}],[153092120,{"idx":24,"name":"rail-env-ground-01","tpage_name":"railx-tfrag"}],[160563200,{"idx":0,"name":"hud-vehicle-health-bar-01","tpage_name":"stadiuma-minimap"}],[159318020,{"idx":4,"name":"comb-crct-small-drk","tpage_name":"comba-tfrag"}],[153092119,{"idx":23,"name":"rail-base-mid-trim-01","tpage_name":"railx-tfrag"}],[159318019,{"idx":3,"name":"comb-temp-light","tpage_name":"comba-tfrag"}],[153092118,{"idx":22,"name":"rail-tread-01","tpage_name":"railx-tfrag"}],[159318018,{"idx":2,"name":"comb-temp-glass","tpage_name":"comba-tfrag"}],[159318017,{"idx":1,"name":"comb-temp-dark","tpage_name":"comba-tfrag"}],[153092117,{"idx":21,"name":"rail-base-dark-trim-01","tpage_name":"railx-tfrag"}],[159318016,{"idx":0,"name":"comb-temp-medium","tpage_name":"comba-tfrag"}],[153092116,{"idx":20,"name":"rail-comb-02","tpage_name":"railx-tfrag"}],[153092115,{"idx":19,"name":"rail-vent-01","tpage_name":"railx-tfrag"}],[153092114,{"idx":18,"name":"rail-env-wall-01","tpage_name":"railx-tfrag"}],[153092113,{"idx":17,"name":"rail-pipe-02","tpage_name":"railx-tfrag"}],[153092112,{"idx":16,"name":"rail-detail-01","tpage_name":"railx-tfrag"}],[153092111,{"idx":15,"name":"rail-light-yellow","tpage_name":"railx-tfrag"}],[153092110,{"idx":14,"name":"rail-trim-01","tpage_name":"railx-tfrag"}],[153092106,{"idx":10,"name":"rail-light-blue","tpage_name":"railx-tfrag"}],[153092105,{"idx":9,"name":"rail-base-mid-01","tpage_name":"railx-tfrag"}],[154337284,{"idx":4,"name":"remote-rim-01","tpage_name":"ltnjxhip-tfrag"}],[153092104,{"idx":8,"name":"rail-cord-01","tpage_name":"railx-tfrag"}],[154337283,{"idx":3,"name":"common-black","tpage_name":"ltnjxhip-tfrag"}],[153092103,{"idx":7,"name":"rail-comb-01","tpage_name":"railx-tfrag"}],[152961024,{"idx":0,"name":"minc-pre-12","tpage_name":"combx-water"}],[152895502,{"idx":14,"name":"tpl-door-face-01","tpage_name":"combx-tfrag"}],[152895501,{"idx":13,"name":"rail-env-wall-01","tpage_name":"combx-tfrag"}],[49610759,{"idx":7,"name":"sewer-pipe-02","tpage_name":"sewf-vis-tfrag"}],[152895499,{"idx":11,"name":"comb-comb-tile","tpage_name":"combx-tfrag"}],[152436738,{"idx":2,"name":"temple_sandstone_dirt01","tpage_name":"templex-vis-water"}],[152436737,{"idx":1,"name":"temple-waterfall-dest","tpage_name":"templex-vis-water"}],[152436736,{"idx":0,"name":"temple-waterfall","tpage_name":"templex-vis-water"}],[152240187,{"idx":59,"name":"king-wristband","tpage_name":"wascast-pris2"}],[164691987,{"idx":19,"name":"veger-hand","tpage_name":"railcst-pris2"}],[152240186,{"idx":58,"name":"king-wraps","tpage_name":"wascast-pris2"}],[164691986,{"idx":18,"name":"veger-hair","tpage_name":"railcst-pris2"}],[152240185,{"idx":57,"name":"king-wrap","tpage_name":"wascast-pris2"}],[164691985,{"idx":17,"name":"veger-gold","tpage_name":"railcst-pris2"}],[152240184,{"idx":56,"name":"king-vestback","tpage_name":"wascast-pris2"}],[164691984,{"idx":16,"name":"veger-fingertop","tpage_name":"railcst-pris2"}],[152240183,{"idx":55,"name":"king-vest","tpage_name":"wascast-pris2"}],[164691983,{"idx":15,"name":"veger-fingerbottom","tpage_name":"railcst-pris2"}],[152240182,{"idx":54,"name":"king-thinstrap","tpage_name":"wascast-pris2"}],[164691982,{"idx":14,"name":"veger-face","tpage_name":"railcst-pris2"}],[164691981,{"idx":13,"name":"veger-eyelid","tpage_name":"railcst-pris2"}],[152240181,{"idx":53,"name":"king-teeth","tpage_name":"wascast-pris2"}],[164691980,{"idx":12,"name":"veger-endpaper","tpage_name":"railcst-pris2"}],[152240180,{"idx":52,"name":"king-skirt-b","tpage_name":"wascast-pris2"}],[164691979,{"idx":11,"name":"veger-coatclips","tpage_name":"railcst-pris2"}],[152240179,{"idx":51,"name":"king-skirt","tpage_name":"wascast-pris2"}],[152240178,{"idx":50,"name":"king-shoebottom","tpage_name":"wascast-pris2"}],[164691978,{"idx":10,"name":"veger-coatbelt","tpage_name":"railcst-pris2"}],[152240177,{"idx":49,"name":"king-precursermetal-trimbolt","tpage_name":"wascast-pris2"}],[164691977,{"idx":9,"name":"veger-coat","tpage_name":"railcst-pris2"}],[152240176,{"idx":48,"name":"king-precursermetal-trim2","tpage_name":"wascast-pris2"}],[164691976,{"idx":8,"name":"veger-bootstrap","tpage_name":"railcst-pris2"}],[152240175,{"idx":47,"name":"king-precursermetal-trim","tpage_name":"wascast-pris2"}],[164691975,{"idx":7,"name":"veger-bootfoot","tpage_name":"railcst-pris2"}],[153485355,{"idx":43,"name":"mhcity-base","tpage_name":"mhcitya-vis-tfrag"}],[152240174,{"idx":46,"name":"king-precursermetal-plain","tpage_name":"wascast-pris2"}],[164691974,{"idx":6,"name":"veger-bootbolt","tpage_name":"railcst-pris2"}],[152240173,{"idx":45,"name":"king-precursermetal-decor","tpage_name":"wascast-pris2"}],[164691973,{"idx":5,"name":"veger-bookspine","tpage_name":"railcst-pris2"}],[152240172,{"idx":44,"name":"king-lgblackstrap","tpage_name":"wascast-pris2"}],[164691972,{"idx":4,"name":"veger-booksides","tpage_name":"railcst-pris2"}],[153485352,{"idx":40,"name":"mhcity-goo-base","tpage_name":"mhcitya-vis-tfrag"}],[152240171,{"idx":43,"name":"king-leg","tpage_name":"wascast-pris2"}],[164691971,{"idx":3,"name":"veger-bookleather","tpage_name":"railcst-pris2"}],[153485351,{"idx":39,"name":"mhcity-de-tower-puff-01","tpage_name":"mhcitya-vis-tfrag"}],[152240170,{"idx":42,"name":"king-iris","tpage_name":"wascast-pris2"}],[164691970,{"idx":2,"name":"environment-oldmetal","tpage_name":"railcst-pris2"}],[152240169,{"idx":41,"name":"king-horn","tpage_name":"wascast-pris2"}],[164691969,{"idx":1,"name":"bam-hairhilite","tpage_name":"railcst-pris2"}],[152240168,{"idx":40,"name":"king-hand","tpage_name":"wascast-pris2"}],[164691968,{"idx":0,"name":"bam-eyelight","tpage_name":"railcst-pris2"}],[152240166,{"idx":38,"name":"king-greenmetalplain","tpage_name":"wascast-pris2"}],[153485345,{"idx":33,"name":"mhcity-base-ground","tpage_name":"mhcitya-vis-tfrag"}],[152240165,{"idx":37,"name":"king-greenmetal","tpage_name":"wascast-pris2"}],[153485343,{"idx":31,"name":"mhcity-farm-dirt-01","tpage_name":"mhcitya-vis-tfrag"}],[152240163,{"idx":35,"name":"king-face-01","tpage_name":"wascast-pris2"}],[152240162,{"idx":34,"name":"king-earing","tpage_name":"wascast-pris2"}],[153485341,{"idx":29,"name":"mhcity-mektunnel","tpage_name":"mhcitya-vis-tfrag"}],[152240161,{"idx":33,"name":"king-ear","tpage_name":"wascast-pris2"}],[153485314,{"idx":2,"name":"mhcity-grunt-egg-rim-01","tpage_name":"mhcitya-vis-tfrag"}],[152240134,{"idx":6,"name":"seem-bootmet","tpage_name":"wascast-pris2"}],[153485313,{"idx":1,"name":"mhcity-eggskin","tpage_name":"mhcitya-vis-tfrag"}],[152240133,{"idx":5,"name":"seem-bootlower","tpage_name":"wascast-pris2"}],[153485312,{"idx":0,"name":"mhcity-wall-tentacle-01","tpage_name":"mhcitya-vis-tfrag"}],[152240132,{"idx":4,"name":"seem-bootleg","tpage_name":"wascast-pris2"}],[152240131,{"idx":3,"name":"seem-bootbottom","tpage_name":"wascast-pris2"}],[152240130,{"idx":2,"name":"seem-arm","tpage_name":"wascast-pris2"}],[154796076,{"idx":44,"name":"jakchires-jacket","tpage_name":"ljakndax-pris"}],[151060536,{"idx":56,"name":"spydroid-light","tpage_name":"factoryc-vis-pris"}],[150667390,{"idx":126,"name":"tow-pup-skin-01","tpage_name":"towerc-tfrag"}],[174325810,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"ldesgcst-pris"}],[188022790,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"lvincst-pris"}],[152240129,{"idx":1,"name":"environment-oldmetal","tpage_name":"wascast-pris2"}],[150994949,{"idx":5,"name":"tentacle-02","tpage_name":"desert-vis-pris"}],[152240128,{"idx":0,"name":"bam-eyelight","tpage_name":"wascast-pris2"}],[150994948,{"idx":4,"name":"tentacle-01","tpage_name":"desert-vis-pris"}],[150863890,{"idx":18,"name":"daxtertuft","tpage_name":"towerc-pris"}],[134283268,{"idx":4,"name":"sig2-gun-02","tpage_name":"ltnjxhip-pris"}],[150863889,{"idx":17,"name":"daxterteeth","tpage_name":"towerc-pris"}],[155844608,{"idx":0,"name":"mhcity-de-tower-egg","tpage_name":"lctydest-water"}],[153354248,{"idx":8,"name":"mhcity-vein-01","tpage_name":"mhcitya-vis-pris"}],[150863888,{"idx":16,"name":"daxternose","tpage_name":"towerc-pris"}],[150863872,{"idx":0,"name":"bam-eyelight","tpage_name":"towerc-pris"}],[150667370,{"idx":106,"name":"city-lowres-mhcity-tower-01","tpage_name":"towerc-tfrag"}],[174325790,{"idx":30,"name":"jakchires-arm","tpage_name":"ldesgcst-pris"}],[176816150,{"idx":22,"name":"ecocreature-claws","tpage_name":"towera-pris"}],[150274073,{"idx":25,"name":"sig-shoulderarmor","tpage_name":"lsigklv-pris2"}],[150274071,{"idx":23,"name":"sig-shoebottom","tpage_name":"lsigklv-pris2"}],[150274070,{"idx":22,"name":"sig-sac","tpage_name":"lsigklv-pris2"}],[150274069,{"idx":21,"name":"sig-metal-dirty","tpage_name":"lsigklv-pris2"}],[150274068,{"idx":20,"name":"sig-metal-01","tpage_name":"lsigklv-pris2"}],[150274067,{"idx":19,"name":"sig-lens","tpage_name":"lsigklv-pris2"}],[150274066,{"idx":18,"name":"sig-horn","tpage_name":"lsigklv-pris2"}],[150274065,{"idx":17,"name":"sig-headgear","tpage_name":"lsigklv-pris2"}],[150274064,{"idx":16,"name":"sig-gun-05","tpage_name":"lsigklv-pris2"}],[150274063,{"idx":15,"name":"sig-gun-04","tpage_name":"lsigklv-pris2"}],[150274062,{"idx":14,"name":"sig-gun-03","tpage_name":"lsigklv-pris2"}],[150274061,{"idx":13,"name":"sig-gun-02","tpage_name":"lsigklv-pris2"}],[150274060,{"idx":12,"name":"sig-gun-01","tpage_name":"lsigklv-pris2"}],[150274059,{"idx":11,"name":"sig-glovetop","tpage_name":"lsigklv-pris2"}],[150274058,{"idx":10,"name":"sig-glove","tpage_name":"lsigklv-pris2"}],[150274057,{"idx":9,"name":"sig-gem-01","tpage_name":"lsigklv-pris2"}],[150274056,{"idx":8,"name":"sig-flask","tpage_name":"lsigklv-pris2"}],[151519235,{"idx":3,"name":"holograph-env-scan","tpage_name":"ltnfxhip-warp"}],[150274055,{"idx":7,"name":"sig-facert","tpage_name":"lsigklv-pris2"}],[151519234,{"idx":2,"name":"holograph-env-rim","tpage_name":"ltnfxhip-warp"}],[150274054,{"idx":6,"name":"sig-faceleft","tpage_name":"lsigklv-pris2"}],[151519233,{"idx":1,"name":"holograph-env-noise","tpage_name":"ltnfxhip-warp"}],[150274053,{"idx":5,"name":"sig-eyelid","tpage_name":"lsigklv-pris2"}],[151519232,{"idx":0,"name":"holograph-env-rim-dest","tpage_name":"ltnfxhip-warp"}],[150274052,{"idx":4,"name":"sig-eye","tpage_name":"lsigklv-pris2"}],[150274051,{"idx":3,"name":"sig-belt","tpage_name":"lsigklv-pris2"}],[150274050,{"idx":2,"name":"environment-oldmetal","tpage_name":"lsigklv-pris2"}],[150274049,{"idx":1,"name":"charHOLD","tpage_name":"lsigklv-pris2"}],[150274048,{"idx":0,"name":"bam-eyelight","tpage_name":"lsigklv-pris2"}],[149553159,{"idx":7,"name":"facc-markings-04","tpage_name":"lfacrm2-shrub"}],[149553158,{"idx":6,"name":"facc-markings-03","tpage_name":"lfacrm2-shrub"}],[149553157,{"idx":5,"name":"facc-markings-01","tpage_name":"lfacrm2-shrub"}],[149553156,{"idx":4,"name":"facc-markings-05","tpage_name":"lfacrm2-shrub"}],[149553155,{"idx":3,"name":"facc-markings-06","tpage_name":"lfacrm2-shrub"}],[149553154,{"idx":2,"name":"facc-markings-02","tpage_name":"lfacrm2-shrub"}],[149553153,{"idx":1,"name":"facc-bolt-01","tpage_name":"lfacrm2-shrub"}],[149553152,{"idx":0,"name":"facc-bolt-02","tpage_name":"lfacrm2-shrub"}],[148766745,{"idx":25,"name":"jakchires-hair","tpage_name":"warpcast-pris"}],[153747465,{"idx":9,"name":"city-ind-stain-02","tpage_name":"mhcityb-vis-shrub"}],[152502285,{"idx":13,"name":"temple_metal02","tpage_name":"templex-vis-tfrag"}],[49217543,{"idx":7,"name":"sewer-water-highlight-01-c-dest","tpage_name":"sewc-vis-water"}],[135463046,{"idx":134,"name":"dk-sat-rim-lod-01","tpage_name":"rubblea-vis-pris"}],[170328086,{"idx":22,"name":"rail-pipe-03","tpage_name":"combe-tfrag"}],[172818446,{"idx":14,"name":"precur-tube-honey-big","tpage_name":"precurd-vis-tfrag"}],[148766744,{"idx":24,"name":"jakchires-glovetop","tpage_name":"warpcast-pris"}],[153747464,{"idx":8,"name":"mhcity-goo-plants","tpage_name":"mhcityb-vis-shrub"}],[156237824,{"idx":0,"name":"hud-kg-bombbot-hud-01","tpage_name":"lbombbot-minimap"}],[152502284,{"idx":12,"name":"temple_sandstone_box01","tpage_name":"templex-vis-tfrag"}],[49217542,{"idx":6,"name":"sewer-water-01-c","tpage_name":"sewc-vis-water"}],[148766743,{"idx":23,"name":"jakchires-facert","tpage_name":"warpcast-pris"}],[152502283,{"idx":11,"name":"temple_sandstone_star01","tpage_name":"templex-vis-tfrag"}],[49217541,{"idx":5,"name":"sewer-waterfall-02-c","tpage_name":"sewc-vis-water"}],[148766742,{"idx":22,"name":"jakchires-facelft","tpage_name":"warpcast-pris"}],[153747462,{"idx":6,"name":"city-wire","tpage_name":"mhcityb-vis-shrub"}],[152502282,{"idx":10,"name":"temple_sandstone_stepside01","tpage_name":"templex-vis-tfrag"}],[49217540,{"idx":4,"name":"sewer-water-01-c-dest","tpage_name":"sewc-vis-water"}],[148766741,{"idx":21,"name":"jakchires-eyelid","tpage_name":"warpcast-pris"}],[152502281,{"idx":9,"name":"temple_sandstone_trim02","tpage_name":"templex-vis-tfrag"}],[148766740,{"idx":20,"name":"jakchires-eyebrow","tpage_name":"warpcast-pris"}],[153747460,{"idx":4,"name":"mhcity-plant-light-01","tpage_name":"mhcityb-vis-shrub"}],[152502280,{"idx":8,"name":"wstd-torchbowl-coal-01","tpage_name":"templex-vis-tfrag"}],[148766739,{"idx":19,"name":"jakchires-eye","tpage_name":"warpcast-pris"}],[153747459,{"idx":3,"name":"mhcity-plant-01","tpage_name":"mhcityb-vis-shrub"}],[152502279,{"idx":7,"name":"temple_sandstone_ground01","tpage_name":"templex-vis-tfrag"}],[148766738,{"idx":18,"name":"jakchires-clips","tpage_name":"warpcast-pris"}],[153747458,{"idx":2,"name":"mhcity-grunt-egg-horns-01","tpage_name":"mhcityb-vis-shrub"}],[152502278,{"idx":6,"name":"temple_sandstone_taper01","tpage_name":"templex-vis-tfrag"}],[148766737,{"idx":17,"name":"jakchires-chestplate","tpage_name":"warpcast-pris"}],[153747457,{"idx":1,"name":"mhcity-eggskin","tpage_name":"mhcityb-vis-shrub"}],[152502277,{"idx":5,"name":"temple_sandstone_pill01","tpage_name":"templex-vis-tfrag"}],[148766736,{"idx":16,"name":"jakchires-brwnleather","tpage_name":"warpcast-pris"}],[153747456,{"idx":0,"name":"mhcity-grunt-egg-rim-01","tpage_name":"mhcityb-vis-shrub"}],[152502276,{"idx":4,"name":"temple_sandstone_trim01","tpage_name":"templex-vis-tfrag"}],[148766735,{"idx":15,"name":"jakchires-brownstrap","tpage_name":"warpcast-pris"}],[152502275,{"idx":3,"name":"temple_sandstone01","tpage_name":"templex-vis-tfrag"}],[148766734,{"idx":14,"name":"jakchires-blackstrap","tpage_name":"warpcast-pris"}],[152502274,{"idx":2,"name":"temple_sandstone_base01","tpage_name":"templex-vis-tfrag"}],[148766733,{"idx":13,"name":"jakchires-arm","tpage_name":"warpcast-pris"}],[152502273,{"idx":1,"name":"temple_bark01","tpage_name":"templex-vis-tfrag"}],[148766732,{"idx":12,"name":"jakc-wristband-a2","tpage_name":"warpcast-pris"}],[152502272,{"idx":0,"name":"temple_sandstone_out_01","tpage_name":"templex-vis-tfrag"}],[151126059,{"idx":43,"name":"jakchires-horn","tpage_name":"combx-pris"}],[163577859,{"idx":3,"name":"security-env-uscroll","tpage_name":"comba-water"}],[147390519,{"idx":55,"name":"switch-body-02","tpage_name":"powergd-pris"}],[151126058,{"idx":42,"name":"jakchires-hair","tpage_name":"combx-pris"}],[163577858,{"idx":2,"name":"security-dot-src","tpage_name":"comba-water"}],[147390518,{"idx":54,"name":"switch-body-01","tpage_name":"powergd-pris"}],[151126057,{"idx":41,"name":"jakchires-glovetop","tpage_name":"combx-pris"}],[163577857,{"idx":1,"name":"security-env-dest","tpage_name":"comba-water"}],[147390517,{"idx":53,"name":"squid-drabgun","tpage_name":"powergd-pris"}],[151126056,{"idx":40,"name":"jakchires-facert","tpage_name":"combx-pris"}],[163577856,{"idx":0,"name":"security-dot-dest","tpage_name":"comba-water"}],[147390516,{"idx":52,"name":"cipher-side-03","tpage_name":"powergd-pris"}],[151126055,{"idx":39,"name":"jakchires-facelft","tpage_name":"combx-pris"}],[147390515,{"idx":51,"name":"cipher-side-02","tpage_name":"powergd-pris"}],[151126054,{"idx":38,"name":"jakchires-eyelid","tpage_name":"combx-pris"}],[147390514,{"idx":50,"name":"cipher-side-01","tpage_name":"powergd-pris"}],[151126053,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"combx-pris"}],[147390513,{"idx":49,"name":"cipher-drum-03","tpage_name":"powergd-pris"}],[151126052,{"idx":36,"name":"jakchires-eye","tpage_name":"combx-pris"}],[147390512,{"idx":48,"name":"cipher-drum-02","tpage_name":"powergd-pris"}],[112328763,{"idx":59,"name":"bat-amulet-01","tpage_name":"wascast-pris"}],[151126051,{"idx":35,"name":"jakchires-clips","tpage_name":"combx-pris"}],[147390511,{"idx":47,"name":"cipher-drum-01","tpage_name":"powergd-pris"}],[151126050,{"idx":34,"name":"jakchires-chestplate","tpage_name":"combx-pris"}],[147390510,{"idx":46,"name":"grunt-vector-eye-01","tpage_name":"powergd-pris"}],[151126049,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"combx-pris"}],[147390509,{"idx":45,"name":"grunt-vector-02","tpage_name":"powergd-pris"}],[151126048,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"combx-pris"}],[147390508,{"idx":44,"name":"grunt-vector-01","tpage_name":"powergd-pris"}],[151126047,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"combx-pris"}],[147390507,{"idx":43,"name":"sk-yellowfurnew","tpage_name":"powergd-pris"}],[151126046,{"idx":30,"name":"jakchires-arm","tpage_name":"combx-pris"}],[147390506,{"idx":42,"name":"sk-solidorangefur","tpage_name":"powergd-pris"}],[151126045,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"combx-pris"}],[147390505,{"idx":41,"name":"sk-orange2yellowfur","tpage_name":"powergd-pris"}],[128909378,{"idx":66,"name":"talkbox-light-02","tpage_name":"freecast-pris"}],[151126044,{"idx":28,"name":"jakc-wraps","tpage_name":"combx-pris"}],[147390504,{"idx":40,"name":"sk-ear","tpage_name":"powergd-pris"}],[128909377,{"idx":65,"name":"jakc-armor","tpage_name":"freecast-pris"}],[122290195,{"idx":19,"name":"fac-tower-pipe-rim-01","tpage_name":"factoryb-vis-pris"}],[112328755,{"idx":51,"name":"jakchires-shoebottom","tpage_name":"wascast-pris"}],[151126043,{"idx":27,"name":"jakc-waistband2","tpage_name":"combx-pris"}],[147390503,{"idx":39,"name":"sk-eye-lid","tpage_name":"powergd-pris"}],[128909376,{"idx":64,"name":"gun-yellowgreen","tpage_name":"freecast-pris"}],[122290194,{"idx":18,"name":"fac-tower-pipe-03","tpage_name":"factoryb-vis-pris"}],[112328754,{"idx":50,"name":"jakchires-precarmor-01","tpage_name":"wascast-pris"}],[151126031,{"idx":15,"name":"daxterlense","tpage_name":"combx-pris"}],[147390491,{"idx":27,"name":"bam-leather-belt-blue","tpage_name":"powergd-pris"}],[128909364,{"idx":52,"name":"pecker-plume","tpage_name":"freecast-pris"}],[151126030,{"idx":14,"name":"daxterhelmetplain","tpage_name":"combx-pris"}],[147390490,{"idx":26,"name":"bam-hairhilite","tpage_name":"powergd-pris"}],[128909363,{"idx":51,"name":"pecker-face","tpage_name":"freecast-pris"}],[151126029,{"idx":13,"name":"daxterheadwidenew","tpage_name":"combx-pris"}],[147390489,{"idx":25,"name":"widow-pod-gun-metal","tpage_name":"powergd-pris"}],[128909362,{"idx":50,"name":"pecker-eyelid","tpage_name":"freecast-pris"}],[154861568,{"idx":0,"name":"turbo-circle","tpage_name":"destrack-sprite"}],[151126028,{"idx":12,"name":"daxtergoggles","tpage_name":"combx-pris"}],[147390488,{"idx":24,"name":"widow-dull-inards","tpage_name":"powergd-pris"}],[128909361,{"idx":49,"name":"pecker-body-01","tpage_name":"freecast-pris"}],[151126027,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"combx-pris"}],[147390487,{"idx":23,"name":"squid-bulb-sm","tpage_name":"powergd-pris"}],[128909360,{"idx":48,"name":"onin-toe","tpage_name":"freecast-pris"}],[151126026,{"idx":10,"name":"daxterfoot","tpage_name":"combx-pris"}],[147390486,{"idx":22,"name":"roboguard-shouldershield","tpage_name":"powergd-pris"}],[128909359,{"idx":47,"name":"onin-teeth","tpage_name":"freecast-pris"}],[151126025,{"idx":9,"name":"daxterfinger","tpage_name":"combx-pris"}],[147390485,{"idx":21,"name":"roboguard-headshield","tpage_name":"powergd-pris"}],[128909358,{"idx":46,"name":"onin-skirt","tpage_name":"freecast-pris"}],[151126024,{"idx":8,"name":"daxterear","tpage_name":"combx-pris"}],[147390484,{"idx":20,"name":"kg-grunt-rim-03","tpage_name":"powergd-pris"}],[128909357,{"idx":45,"name":"onin-shirt","tpage_name":"freecast-pris"}],[151126023,{"idx":7,"name":"daxterbolt","tpage_name":"combx-pris"}],[147390483,{"idx":19,"name":"kg-grunt-rim-02","tpage_name":"powergd-pris"}],[128909356,{"idx":44,"name":"onin-scarf","tpage_name":"freecast-pris"}],[151126022,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"combx-pris"}],[147390482,{"idx":18,"name":"kg-grunt-rim-01","tpage_name":"powergd-pris"}],[128909355,{"idx":43,"name":"onin-rings2","tpage_name":"freecast-pris"}],[151126021,{"idx":5,"name":"daxterarm","tpage_name":"combx-pris"}],[147390481,{"idx":17,"name":"kg-grunt-cable-01","tpage_name":"powergd-pris"}],[128909354,{"idx":42,"name":"onin-rings","tpage_name":"freecast-pris"}],[151126020,{"idx":4,"name":"daxter-orange","tpage_name":"combx-pris"}],[147390480,{"idx":16,"name":"grunt-teeth-01","tpage_name":"powergd-pris"}],[128909353,{"idx":41,"name":"onin-neck","tpage_name":"freecast-pris"}],[151126019,{"idx":3,"name":"daxter-furhilite","tpage_name":"combx-pris"}],[147390479,{"idx":15,"name":"grunt-skin-03","tpage_name":"powergd-pris"}],[128909352,{"idx":40,"name":"onin-mat","tpage_name":"freecast-pris"}],[151126018,{"idx":2,"name":"daxter-eyelid","tpage_name":"combx-pris"}],[147390478,{"idx":14,"name":"grunt-skin-02","tpage_name":"powergd-pris"}],[128909351,{"idx":39,"name":"onin-idoleye","tpage_name":"freecast-pris"}],[151126017,{"idx":1,"name":"bam-hairhilite","tpage_name":"combx-pris"}],[147390477,{"idx":13,"name":"grunt-skin-01","tpage_name":"powergd-pris"}],[128909350,{"idx":38,"name":"onin-idol","tpage_name":"freecast-pris"}],[151126016,{"idx":0,"name":"bam-eyelight","tpage_name":"combx-pris"}],[147390476,{"idx":12,"name":"grunt-metal-01","tpage_name":"powergd-pris"}],[128909349,{"idx":37,"name":"onin-handpalm","tpage_name":"freecast-pris"}],[162791435,{"idx":11,"name":"rail-base-dark-01","tpage_name":"railc-tfrag"}],[146604095,{"idx":63,"name":"jakchires-teeth","tpage_name":"lforplnt-vis-pris"}],[162791434,{"idx":10,"name":"rail-base-mid-01","tpage_name":"railc-tfrag"}],[146604094,{"idx":62,"name":"jakchires-shoeteop","tpage_name":"lforplnt-vis-pris"}],[162791433,{"idx":9,"name":"rail-edge-01","tpage_name":"railc-tfrag"}],[146604093,{"idx":61,"name":"jakchires-shoemetal","tpage_name":"lforplnt-vis-pris"}],[162791432,{"idx":8,"name":"rail-light-blue","tpage_name":"railc-tfrag"}],[146604092,{"idx":60,"name":"jakchires-shoebottom","tpage_name":"lforplnt-vis-pris"}],[162791431,{"idx":7,"name":"rail-env-car-01","tpage_name":"railc-tfrag"}],[146604091,{"idx":59,"name":"jakchires-pants","tpage_name":"lforplnt-vis-pris"}],[146604090,{"idx":58,"name":"jakchires-lightbrownspat","tpage_name":"lforplnt-vis-pris"}],[146604089,{"idx":57,"name":"jakchires-leatherpouch","tpage_name":"lforplnt-vis-pris"}],[162791428,{"idx":4,"name":"comb-temp-dark","tpage_name":"railc-tfrag"}],[146604088,{"idx":56,"name":"jakchires-jacket","tpage_name":"lforplnt-vis-pris"}],[162791427,{"idx":3,"name":"comb-temp-glass","tpage_name":"railc-tfrag"}],[146604087,{"idx":55,"name":"jakchires-horn","tpage_name":"lforplnt-vis-pris"}],[162791426,{"idx":2,"name":"rail-patch-01","tpage_name":"railc-tfrag"}],[146604086,{"idx":54,"name":"jakchires-hair","tpage_name":"lforplnt-vis-pris"}],[146604085,{"idx":53,"name":"jakchires-glovetop","tpage_name":"lforplnt-vis-pris"}],[146604084,{"idx":52,"name":"jakchires-facert","tpage_name":"lforplnt-vis-pris"}],[146604083,{"idx":51,"name":"jakchires-facelft","tpage_name":"lforplnt-vis-pris"}],[146604082,{"idx":50,"name":"jakchires-eyelid","tpage_name":"lforplnt-vis-pris"}],[146604081,{"idx":49,"name":"jakchires-eyebrow","tpage_name":"lforplnt-vis-pris"}],[146604080,{"idx":48,"name":"jakchires-eye","tpage_name":"lforplnt-vis-pris"}],[146604079,{"idx":47,"name":"jakchires-clips","tpage_name":"lforplnt-vis-pris"}],[146604078,{"idx":46,"name":"jakchires-chestplate","tpage_name":"lforplnt-vis-pris"}],[146604077,{"idx":45,"name":"jakchires-brwnleather","tpage_name":"lforplnt-vis-pris"}],[146604076,{"idx":44,"name":"jakchires-brownstrap","tpage_name":"lforplnt-vis-pris"}],[146604075,{"idx":43,"name":"jakchires-blackstrap","tpage_name":"lforplnt-vis-pris"}],[146604074,{"idx":42,"name":"jakchires-arm","tpage_name":"lforplnt-vis-pris"}],[146604073,{"idx":41,"name":"jakc-wristband-a2","tpage_name":"lforplnt-vis-pris"}],[146604072,{"idx":40,"name":"jakc-wraps","tpage_name":"lforplnt-vis-pris"}],[146604071,{"idx":39,"name":"jakc-waistband2","tpage_name":"lforplnt-vis-pris"}],[153944073,{"idx":9,"name":"king-earing","tpage_name":"ldmpckgn-pris2"}],[151453713,{"idx":17,"name":"torn-hair-01","tpage_name":"ltnfxhip-pris2"}],[150208533,{"idx":21,"name":"klever-gunmetal-05","tpage_name":"lsigklv-pris"}],[146472993,{"idx":33,"name":"facc-markings-01","tpage_name":"factoryc-vis-shrub"}],[151453712,{"idx":16,"name":"torn-gunbarrel-02","tpage_name":"ltnfxhip-pris2"}],[153944072,{"idx":8,"name":"king-ear","tpage_name":"ldmpckgn-pris2"}],[150208532,{"idx":20,"name":"klever-gunmetal-04","tpage_name":"lsigklv-pris"}],[146472992,{"idx":32,"name":"facc-markings-05","tpage_name":"factoryc-vis-shrub"}],[177471495,{"idx":7,"name":"rail-base-dark-01","tpage_name":"railb2-tfrag"}],[172490775,{"idx":23,"name":"precur-light-green-02","tpage_name":"precura-vis-tfrag"}],[146341995,{"idx":107,"name":"facc-redspot","tpage_name":"factoryc-vis-tfrag"}],[177471494,{"idx":6,"name":"rail-base-mid-01","tpage_name":"railb2-tfrag"}],[172490774,{"idx":22,"name":"precur-frame-small-01","tpage_name":"precura-vis-tfrag"}],[146341994,{"idx":106,"name":"facc-metal-panel-12","tpage_name":"factoryc-vis-tfrag"}],[177471493,{"idx":5,"name":"rail-edge-01","tpage_name":"railb2-tfrag"}],[172490773,{"idx":21,"name":"precur-plate-plain-01","tpage_name":"precura-vis-tfrag"}],[146341993,{"idx":105,"name":"facc-big-metal-panl01-hitweak","tpage_name":"factoryc-vis-tfrag"}],[177471492,{"idx":4,"name":"rail-light-blue","tpage_name":"railb2-tfrag"}],[178716672,{"idx":0,"name":"hud-des-beast","tpage_name":"deshover-minimap"}],[172490772,{"idx":20,"name":"precur-tubes-segment-02","tpage_name":"precura-vis-tfrag"}],[146341992,{"idx":104,"name":"facc-big-metal-panl04-hitweak","tpage_name":"factoryc-vis-tfrag"}],[177471491,{"idx":3,"name":"rail-patch-01","tpage_name":"railb2-tfrag"}],[172490771,{"idx":19,"name":"precur-wall-blade-01","tpage_name":"precura-vis-tfrag"}],[146341991,{"idx":103,"name":"facc-seam-metal-hitweak","tpage_name":"factoryc-vis-tfrag"}],[177471490,{"idx":2,"name":"comb-temp-glass","tpage_name":"railb2-tfrag"}],[172490770,{"idx":18,"name":"precur-tentacle-01","tpage_name":"precura-vis-tfrag"}],[146341990,{"idx":102,"name":"facc-metal-rim-03-hitweak","tpage_name":"factoryc-vis-tfrag"}],[177471489,{"idx":1,"name":"comb-temp-dark","tpage_name":"railb2-tfrag"}],[146341989,{"idx":101,"name":"facc-redmetal-02","tpage_name":"factoryc-vis-tfrag"}],[172490769,{"idx":17,"name":"precur-wall-groove-01","tpage_name":"precura-vis-tfrag"}],[146341988,{"idx":100,"name":"facc-redmetaledge-01-hitweak","tpage_name":"factoryc-vis-tfrag"}],[172490768,{"idx":16,"name":"precur-pipe-round-01","tpage_name":"precura-vis-tfrag"}],[146341987,{"idx":99,"name":"facc-redmetaledge-01","tpage_name":"factoryc-vis-tfrag"}],[172490766,{"idx":14,"name":"precur-tubes-bundle-01","tpage_name":"precura-vis-tfrag"}],[146341986,{"idx":98,"name":"fac-punch-wall--metal-edge-02","tpage_name":"factoryc-vis-tfrag"}],[172490765,{"idx":13,"name":"precur-tube-joint-02","tpage_name":"precura-vis-tfrag"}],[146341985,{"idx":97,"name":"fac-punch-wall--metal-edge-01","tpage_name":"factoryc-vis-tfrag"}],[172490764,{"idx":12,"name":"precur-tube-joint-01","tpage_name":"precura-vis-tfrag"}],[146341984,{"idx":96,"name":"facc-bigredplates-01-hitweak","tpage_name":"factoryc-vis-tfrag"}],[146341959,{"idx":71,"name":"facc-grill-02","tpage_name":"factoryc-vis-tfrag"}],[146341958,{"idx":70,"name":"facc-grill-01","tpage_name":"factoryc-vis-tfrag"}],[146341957,{"idx":69,"name":"facc-metal-rim-02","tpage_name":"factoryc-vis-tfrag"}],[146341956,{"idx":68,"name":"facc-metal-panel-07","tpage_name":"factoryc-vis-tfrag"}],[146341955,{"idx":67,"name":"facc-metal-rim-03","tpage_name":"factoryc-vis-tfrag"}],[61538340,{"idx":36,"name":"common-glass","tpage_name":"freehq-water"}],[146341954,{"idx":66,"name":"facc-metal-panel-10-hitweak","tpage_name":"factoryc-vis-tfrag"}],[146341953,{"idx":65,"name":"facc-floor-grill-01","tpage_name":"factoryc-vis-tfrag"}],[146341952,{"idx":64,"name":"facc-big-metal-panl02","tpage_name":"factoryc-vis-tfrag"}],[146341951,{"idx":63,"name":"facc-redmetal-01","tpage_name":"factoryc-vis-tfrag"}],[146341950,{"idx":62,"name":"facc-wheel-face-01","tpage_name":"factoryc-vis-tfrag"}],[146341949,{"idx":61,"name":"facc-wheel-rim-02","tpage_name":"factoryc-vis-tfrag"}],[146341948,{"idx":60,"name":"facc-wheel-rim-01","tpage_name":"factoryc-vis-tfrag"}],[146341945,{"idx":57,"name":"facc-bigredplates-01","tpage_name":"factoryc-vis-tfrag"}],[153813022,{"idx":30,"name":"mhcity-dirtymetal","tpage_name":"mhcityb-vis-pris"}],[146341942,{"idx":54,"name":"facc-beam-plat","tpage_name":"factoryc-vis-tfrag"}],[146341940,{"idx":52,"name":"facc-light-01","tpage_name":"factoryc-vis-tfrag"}],[146341932,{"idx":44,"name":"facc-redstriping-01-hitweak","tpage_name":"factoryc-vis-tfrag"}],[153813012,{"idx":20,"name":"mh-spawner-02","tpage_name":"mhcityb-vis-pris"}],[146341931,{"idx":43,"name":"facc-pipe-03","tpage_name":"factoryc-vis-tfrag"}],[153813011,{"idx":19,"name":"mh-spawner-01","tpage_name":"mhcityb-vis-pris"}],[137232389,{"idx":5,"name":"daxterarm","tpage_name":"citycast-pris"}],[146341930,{"idx":42,"name":"common-black","tpage_name":"factoryc-vis-tfrag"}],[153813010,{"idx":18,"name":"mhcity-wall-tentacle-01","tpage_name":"mhcityb-vis-pris"}],[137232388,{"idx":4,"name":"daxter-orange","tpage_name":"citycast-pris"}],[61079563,{"idx":11,"name":"grunt-hose","tpage_name":"minec-vis-pris"}],[48627763,{"idx":51,"name":"sewer-scaffold-01","tpage_name":"sewb-vis-tfrag"}],[146341928,{"idx":40,"name":"facc-sewer-floor","tpage_name":"factoryc-vis-tfrag"}],[153813008,{"idx":16,"name":"mhcity-tower-door-frame-01","tpage_name":"mhcityb-vis-pris"}],[137232386,{"idx":2,"name":"daxter-eyelid","tpage_name":"citycast-pris"}],[61079561,{"idx":9,"name":"grunt-eye-01","tpage_name":"minec-vis-pris"}],[48627761,{"idx":49,"name":"sewer-lip-01","tpage_name":"sewb-vis-tfrag"}],[112525359,{"idx":47,"name":"jakc-armor","tpage_name":"desrescc-pris"}],[118751259,{"idx":27,"name":"seem-skirt-small","tpage_name":"wcaseem-pris2"}],[146341926,{"idx":38,"name":"facc-metal-ring-03","tpage_name":"factoryc-vis-tfrag"}],[153813006,{"idx":14,"name":"common-black","tpage_name":"mhcityb-vis-pris"}],[134742024,{"idx":8,"name":"rub-wall-small-grill","tpage_name":"rubblec-vis-shrub"}],[137232384,{"idx":0,"name":"bam-eyelight","tpage_name":"citycast-pris"}],[126222337,{"idx":1,"name":"sewer-pipe-small-01","tpage_name":"sewo-vis-shrub"}],[118751257,{"idx":25,"name":"seem-uppertorso","tpage_name":"wcaseem-pris2"}],[61079559,{"idx":7,"name":"gekko-nails","tpage_name":"minec-vis-pris"}],[48627759,{"idx":47,"name":"sewer-metal-floor-01","tpage_name":"sewb-vis-tfrag"}],[146341922,{"idx":34,"name":"facc-metal-panel-10","tpage_name":"factoryc-vis-tfrag"}],[153813002,{"idx":10,"name":"mhcity-eggskin","tpage_name":"mhcityb-vis-pris"}],[118751253,{"idx":21,"name":"seem-precmetal-edge","tpage_name":"wcaseem-pris2"}],[61079555,{"idx":3,"name":"gekko-hose","tpage_name":"minec-vis-pris"}],[48627755,{"idx":43,"name":"strip-black","tpage_name":"sewb-vis-tfrag"}],[146341919,{"idx":31,"name":"facc-floor-trim","tpage_name":"factoryc-vis-tfrag"}],[153812999,{"idx":7,"name":"mhcity-grunt-egg-03","tpage_name":"mhcityb-vis-pris"}],[118751250,{"idx":18,"name":"seem-pipes-01","tpage_name":"wcaseem-pris2"}],[61079552,{"idx":0,"name":"gekko-body","tpage_name":"minec-vis-pris"}],[48627752,{"idx":40,"name":"sewer-pipe-rim-09","tpage_name":"sewb-vis-tfrag"}],[146341918,{"idx":30,"name":"facc-corrugate-01","tpage_name":"factoryc-vis-tfrag"}],[153812998,{"idx":6,"name":"mhcity-vein-01","tpage_name":"mhcityb-vis-pris"}],[118751249,{"idx":17,"name":"seem-pipeend","tpage_name":"wcaseem-pris2"}],[48627751,{"idx":39,"name":"sewer-plate-02","tpage_name":"sewb-vis-tfrag"}],[146341917,{"idx":29,"name":"facc-redstriping-01","tpage_name":"factoryc-vis-tfrag"}],[153812997,{"idx":5,"name":"mhcity-grunt-egg-rim-01","tpage_name":"mhcityb-vis-pris"}],[118751248,{"idx":16,"name":"seem-headpiecetop","tpage_name":"wcaseem-pris2"}],[146341916,{"idx":28,"name":"facc-seam-metal","tpage_name":"factoryc-vis-tfrag"}],[153812996,{"idx":4,"name":"mhcity-grunt-egg-neck-01","tpage_name":"mhcityb-vis-pris"}],[118751247,{"idx":15,"name":"seem-headgearback","tpage_name":"wcaseem-pris2"}],[146341915,{"idx":27,"name":"facc-pipe-rim-01","tpage_name":"factoryc-vis-tfrag"}],[153812995,{"idx":3,"name":"mhcity-grunt-egg-gem-01","tpage_name":"mhcityb-vis-pris"}],[118751246,{"idx":14,"name":"seem-hand","tpage_name":"wcaseem-pris2"}],[48627748,{"idx":36,"name":"sewer-metal-block-01","tpage_name":"sewb-vis-tfrag"}],[146341914,{"idx":26,"name":"facc-bigpipe-01","tpage_name":"factoryc-vis-tfrag"}],[152567814,{"idx":6,"name":"temple_sandstone_ground01","tpage_name":"templex-vis-shrub"}],[153812994,{"idx":2,"name":"mhcity-grunt-egg-bulbtop-01","tpage_name":"mhcityb-vis-pris"}],[118751245,{"idx":13,"name":"seem-finger","tpage_name":"wcaseem-pris2"}],[146341913,{"idx":25,"name":"facc-big-metal-panl04","tpage_name":"factoryc-vis-tfrag"}],[153812993,{"idx":1,"name":"mhcity-grunt-egg-bulb-01","tpage_name":"mhcityb-vis-pris"}],[118751244,{"idx":12,"name":"seem-face","tpage_name":"wcaseem-pris2"}],[48627746,{"idx":34,"name":"sewer-plate-04","tpage_name":"sewb-vis-tfrag"}],[146341912,{"idx":24,"name":"facc-panel-01","tpage_name":"factoryc-vis-tfrag"}],[153812992,{"idx":0,"name":"mhcity-grunt-egg-base-01","tpage_name":"mhcityb-vis-pris"}],[118751243,{"idx":11,"name":"seem-eyelid","tpage_name":"wcaseem-pris2"}],[48627745,{"idx":33,"name":"sewer-plate-03","tpage_name":"sewb-vis-tfrag"}],[145489936,{"idx":16,"name":"sniper-core-glow-01","tpage_name":"lctysnpr-tfrag"}],[121438234,{"idx":26,"name":"mh-flyer-skin-01","tpage_name":"desbattl-pris"}],[128909314,{"idx":2,"name":"environment-oldmetal","tpage_name":"freecast-pris"}],[145489935,{"idx":15,"name":"cty-sniper-red","tpage_name":"lctysnpr-tfrag"}],[121438233,{"idx":25,"name":"mh-flyer-seat-02","tpage_name":"desbattl-pris"}],[128909313,{"idx":1,"name":"bam-hairhilite","tpage_name":"freecast-pris"}],[145489934,{"idx":14,"name":"kgt-gun01","tpage_name":"lctysnpr-tfrag"}],[121438232,{"idx":24,"name":"mh-flyer-seat-01","tpage_name":"desbattl-pris"}],[128909312,{"idx":0,"name":"bam-eyelight","tpage_name":"freecast-pris"}],[145489933,{"idx":13,"name":"kgt-rim01","tpage_name":"lctysnpr-tfrag"}],[145489931,{"idx":11,"name":"kgt-gun02","tpage_name":"lctysnpr-tfrag"}],[145489930,{"idx":10,"name":"kgt-gun03","tpage_name":"lctysnpr-tfrag"}],[145489929,{"idx":9,"name":"common-black","tpage_name":"lctysnpr-tfrag"}],[145489928,{"idx":8,"name":"snip-trt-metal-08","tpage_name":"lctysnpr-tfrag"}],[145489927,{"idx":7,"name":"snip-trt-metal-06","tpage_name":"lctysnpr-tfrag"}],[145489926,{"idx":6,"name":"snip-trt-metal-07","tpage_name":"lctysnpr-tfrag"}],[145489925,{"idx":5,"name":"snip-trt-metal-05","tpage_name":"lctysnpr-tfrag"}],[145489924,{"idx":4,"name":"snip-trt-metal-02","tpage_name":"lctysnpr-tfrag"}],[145489923,{"idx":3,"name":"snip-trt-metal-bolt","tpage_name":"lctysnpr-tfrag"}],[145489922,{"idx":2,"name":"snip-trt-metal-01","tpage_name":"lctysnpr-tfrag"}],[127008795,{"idx":27,"name":"minc-light","tpage_name":"volcanox-tfrag"}],[145489921,{"idx":1,"name":"snip-trt-metal-04","tpage_name":"lctysnpr-tfrag"}],[127008794,{"idx":26,"name":"common_sandstone_base01","tpage_name":"volcanox-tfrag"}],[145489920,{"idx":0,"name":"snip-trt-metal-03","tpage_name":"lctysnpr-tfrag"}],[127008793,{"idx":25,"name":"common_sandstone_trim01","tpage_name":"volcanox-tfrag"}],[144048130,{"idx":2,"name":"map-ctymarka","tpage_name":"mhcityb-minimap"}],[144048128,{"idx":0,"name":"map-ctyfarmb","tpage_name":"mhcityb-minimap"}],[144834582,{"idx":22,"name":"comb-tarn-wall-01","tpage_name":"combn-tfrag"}],[143589402,{"idx":26,"name":"comb-redmarker","tpage_name":"combc-tfrag"}],[144834580,{"idx":20,"name":"comb-crct-medium","tpage_name":"combn-tfrag"}],[143589400,{"idx":24,"name":"rail-rock-01","tpage_name":"combc-tfrag"}],[143589399,{"idx":23,"name":"rail-pipe-02","tpage_name":"combc-tfrag"}],[144834579,{"idx":19,"name":"comb-crct-small-drk","tpage_name":"combn-tfrag"}],[144834575,{"idx":15,"name":"minc-pre-11","tpage_name":"combn-tfrag"}],[143589395,{"idx":19,"name":"rail-light-yellow-small","tpage_name":"combc-tfrag"}],[127008773,{"idx":5,"name":"vola-grass-blob","tpage_name":"volcanox-tfrag"}],[144834574,{"idx":14,"name":"minc-pre-04","tpage_name":"combn-tfrag"}],[143589394,{"idx":18,"name":"rail-pipe-03","tpage_name":"combc-tfrag"}],[144834573,{"idx":13,"name":"minc-pre-10","tpage_name":"combn-tfrag"}],[143589393,{"idx":17,"name":"rail-pipe-01","tpage_name":"combc-tfrag"}],[144834572,{"idx":12,"name":"minc-01","tpage_name":"combn-tfrag"}],[143589392,{"idx":16,"name":"rail-cord-01","tpage_name":"combc-tfrag"}],[144834571,{"idx":11,"name":"min-env-mar-01","tpage_name":"combn-tfrag"}],[143589391,{"idx":15,"name":"rail-detail-01","tpage_name":"combc-tfrag"}],[142016552,{"idx":40,"name":"facc-floor-trim","tpage_name":"lfacrm2-tfrag"}],[154468352,{"idx":0,"name":"water-splat","tpage_name":"lforplnt-sprite"}],[49283105,{"idx":33,"name":"sew-laserturret-3","tpage_name":"sewd-vis-pris"}],[142016547,{"idx":35,"name":"facc-metal-panel-10-hitweak","tpage_name":"lfacrm2-tfrag"}],[55312427,{"idx":43,"name":"was-kangalizard-face","tpage_name":"wascityb-vis-pris"}],[112525373,{"idx":61,"name":"jakchires-eye","tpage_name":"desrescc-pris"}],[105054293,{"idx":85,"name":"marauder-hand-blue","tpage_name":"desoasis-pris"}],[142016546,{"idx":34,"name":"facc-metal-rim-03-hitweak","tpage_name":"lfacrm2-tfrag"}],[55312426,{"idx":42,"name":"was-kangalizard-body-bottom","tpage_name":"wascityb-vis-pris"}],[112525372,{"idx":60,"name":"jakchires-clips","tpage_name":"desrescc-pris"}],[105054292,{"idx":84,"name":"marauder-gun-tip","tpage_name":"desoasis-pris"}],[142016545,{"idx":33,"name":"fac-elevator-top-01","tpage_name":"lfacrm2-tfrag"}],[55312425,{"idx":41,"name":"was-kangalizard-body","tpage_name":"wascityb-vis-pris"}],[112525371,{"idx":59,"name":"jakchires-chestplate","tpage_name":"desrescc-pris"}],[105054291,{"idx":83,"name":"marauder-gun-part","tpage_name":"desoasis-pris"}],[142016544,{"idx":32,"name":"fac-elevator-side-02","tpage_name":"lfacrm2-tfrag"}],[55312424,{"idx":40,"name":"was-dogat-tail","tpage_name":"wascityb-vis-pris"}],[112525370,{"idx":58,"name":"jakchires-brwnleather","tpage_name":"desrescc-pris"}],[105054290,{"idx":82,"name":"marauder-gun-metal","tpage_name":"desoasis-pris"}],[142016543,{"idx":31,"name":"fac-elevator-rail-02","tpage_name":"lfacrm2-tfrag"}],[55312423,{"idx":39,"name":"was-dogat-nose","tpage_name":"wascityb-vis-pris"}],[112525369,{"idx":57,"name":"jakchires-brownstrap","tpage_name":"desrescc-pris"}],[105054289,{"idx":81,"name":"marauder-gun-blade","tpage_name":"desoasis-pris"}],[142016542,{"idx":30,"name":"fac-elevator-rail-01","tpage_name":"lfacrm2-tfrag"}],[55312422,{"idx":38,"name":"was-dogat-face","tpage_name":"wascityb-vis-pris"}],[112525368,{"idx":56,"name":"jakchires-blackstrap","tpage_name":"desrescc-pris"}],[105054288,{"idx":80,"name":"marauder-blade-joint","tpage_name":"desoasis-pris"}],[142016541,{"idx":29,"name":"facc-light-01","tpage_name":"lfacrm2-tfrag"}],[55312421,{"idx":37,"name":"was-dogat-body","tpage_name":"wascityb-vis-pris"}],[112525367,{"idx":55,"name":"jakchires-arm","tpage_name":"desrescc-pris"}],[105054287,{"idx":79,"name":"marauder-blade","tpage_name":"desoasis-pris"}],[142016540,{"idx":28,"name":"facc-light-02","tpage_name":"lfacrm2-tfrag"}],[55312420,{"idx":36,"name":"was-tizard-nail","tpage_name":"wascityb-vis-pris"}],[112525366,{"idx":54,"name":"jakc-wristband-a2","tpage_name":"desrescc-pris"}],[105054286,{"idx":78,"name":"marauder-belt","tpage_name":"desoasis-pris"}],[142016538,{"idx":26,"name":"facc-arches-01","tpage_name":"lfacrm2-tfrag"}],[55312418,{"idx":34,"name":"was-tizard-fin","tpage_name":"wascityb-vis-pris"}],[142016536,{"idx":24,"name":"facc-pipe-03","tpage_name":"lfacrm2-tfrag"}],[55312416,{"idx":32,"name":"was-tizard-face","tpage_name":"wascityb-vis-pris"}],[142016535,{"idx":23,"name":"facc-door-frame-01","tpage_name":"lfacrm2-tfrag"}],[55312415,{"idx":31,"name":"was-tizard-body","tpage_name":"wascityb-vis-pris"}],[38731793,{"idx":17,"name":"flying-bird-02","tpage_name":"wasstada-sprite"}],[142016534,{"idx":22,"name":"facc-door-frame-02","tpage_name":"lfacrm2-tfrag"}],[38731792,{"idx":16,"name":"flying-bird-01","tpage_name":"wasstada-sprite"}],[62783494,{"idx":6,"name":"grunt-skin-03","tpage_name":"ctypepb-pris"}],[55312414,{"idx":30,"name":"was-tizard-beak","tpage_name":"wascityb-vis-pris"}],[142016533,{"idx":21,"name":"common-black","tpage_name":"lfacrm2-tfrag"}],[62783493,{"idx":5,"name":"grunt-skin-02","tpage_name":"ctypepb-pris"}],[55312413,{"idx":29,"name":"city-mark-rope-01","tpage_name":"wascityb-vis-pris"}],[142016532,{"idx":20,"name":"facc-big-metal-panl04","tpage_name":"lfacrm2-tfrag"}],[99483703,{"idx":55,"name":"dp-bipedal-chest-01","tpage_name":"lformach-vis-pris"}],[106954783,{"idx":31,"name":"wascity-metal-ladder-rung","tpage_name":"volcanoa-vis-tfrag"}],[144506891,{"idx":11,"name":"dax-msl-lnch-table-01","tpage_name":"lpatkcs-tfrag"}],[142016531,{"idx":19,"name":"facc-wall-rnd-light-01","tpage_name":"lfacrm2-tfrag"}],[99483702,{"idx":54,"name":"dp-bipedal-backhand-01","tpage_name":"lformach-vis-pris"}],[106954782,{"idx":30,"name":"wascity-wood-plain","tpage_name":"volcanoa-vis-tfrag"}],[144506890,{"idx":10,"name":"dax-msl-lnch-table-side-01","tpage_name":"lpatkcs-tfrag"}],[142016530,{"idx":18,"name":"facc-panel-06","tpage_name":"lfacrm2-tfrag"}],[71303177,{"idx":9,"name":"sig-gem-01","tpage_name":"ldamsig-pris2"}],[73793537,{"idx":1,"name":"sewer-water-01-g","tpage_name":"sewg-vis-water"}],[106954781,{"idx":29,"name":"vol-ladder-wood","tpage_name":"volcanoa-vis-tfrag"}],[144506889,{"idx":9,"name":"dax-msl-lnch-side-01","tpage_name":"lpatkcs-tfrag"}],[142016529,{"idx":17,"name":"facc-panel-01","tpage_name":"lfacrm2-tfrag"}],[106954780,{"idx":28,"name":"vol-plate-01","tpage_name":"volcanoa-vis-tfrag"}],[71303176,{"idx":8,"name":"sig-flask","tpage_name":"ldamsig-pris2"}],[48889936,{"idx":80,"name":"sewer-block-01-hitweak","tpage_name":"sewd-vis-tfrag"}],[73793536,{"idx":0,"name":"sewer-waterfall-02-g","tpage_name":"sewg-vis-water"}],[144506888,{"idx":8,"name":"dax-msl-lnch-side-rim-01","tpage_name":"lpatkcs-tfrag"}],[142016528,{"idx":16,"name":"facc-pipe-02","tpage_name":"lfacrm2-tfrag"}],[144506887,{"idx":7,"name":"dax-msl-lnch-table-box-01","tpage_name":"lpatkcs-tfrag"}],[142016527,{"idx":15,"name":"facc-panel-03","tpage_name":"lfacrm2-tfrag"}],[144506886,{"idx":6,"name":"dax-msl-lnch-pipe-01","tpage_name":"lpatkcs-tfrag"}],[142016526,{"idx":14,"name":"facc-panel-02","tpage_name":"lfacrm2-tfrag"}],[106954777,{"idx":25,"name":"vol-dpipe-02","tpage_name":"volcanoa-vis-tfrag"}],[144506885,{"idx":5,"name":"dax-msl-lnch-rim-01","tpage_name":"lpatkcs-tfrag"}],[142016525,{"idx":13,"name":"facc-pipe-01","tpage_name":"lfacrm2-tfrag"}],[106954776,{"idx":24,"name":"vola-rock-top","tpage_name":"volcanoa-vis-tfrag"}],[144506883,{"idx":3,"name":"missle-launcher-shaft-01","tpage_name":"lpatkcs-tfrag"}],[142016523,{"idx":11,"name":"facc-wall-01","tpage_name":"lfacrm2-tfrag"}],[106954774,{"idx":22,"name":"vola-grass-fringe-full","tpage_name":"volcanoa-vis-tfrag"}],[144506882,{"idx":2,"name":"missle-launcher-panel-03","tpage_name":"lpatkcs-tfrag"}],[142016522,{"idx":10,"name":"facc-panel-04","tpage_name":"lfacrm2-tfrag"}],[106954773,{"idx":21,"name":"vola-vine","tpage_name":"volcanoa-vis-tfrag"}],[146604070,{"idx":38,"name":"jakc-skirt","tpage_name":"lforplnt-vis-pris"}],[140378170,{"idx":58,"name":"jakchires-teeth","tpage_name":"minee-pris"}],[157810689,{"idx":1,"name":"hud-gladiator","tpage_name":"desoasis-minimap"}],[146604069,{"idx":37,"name":"jakc-scarfhanging","tpage_name":"lforplnt-vis-pris"}],[140378169,{"idx":57,"name":"jakchires-shoeteop","tpage_name":"minee-pris"}],[157810688,{"idx":0,"name":"hud-ashlyn-head","tpage_name":"desoasis-minimap"}],[146604068,{"idx":36,"name":"jakc-scarf","tpage_name":"lforplnt-vis-pris"}],[140378168,{"idx":56,"name":"jakchires-shoemetal","tpage_name":"minee-pris"}],[146604067,{"idx":35,"name":"jakc-lens","tpage_name":"lforplnt-vis-pris"}],[140378167,{"idx":55,"name":"jakchires-shoebottom","tpage_name":"minee-pris"}],[156565506,{"idx":2,"name":"dust-sparkle","tpage_name":"mhcitya-sprite"}],[146604066,{"idx":34,"name":"jakc-gogglemetal","tpage_name":"lforplnt-vis-pris"}],[140378166,{"idx":54,"name":"jakchires-precarmor-01","tpage_name":"minee-pris"}],[112328741,{"idx":37,"name":"jakchires-clips","tpage_name":"wascast-pris"}],[91160681,{"idx":105,"name":"jakchires-shoemetal","tpage_name":"gungame-vis-pris"}],[146604062,{"idx":30,"name":"daxtertuft","tpage_name":"lforplnt-vis-pris"}],[140378162,{"idx":50,"name":"jakchires-jacket","tpage_name":"minee-pris"}],[112328740,{"idx":36,"name":"jakchires-chestplate","tpage_name":"wascast-pris"}],[91160680,{"idx":104,"name":"jakchires-shoebottom","tpage_name":"gungame-vis-pris"}],[146604061,{"idx":29,"name":"daxterteeth","tpage_name":"lforplnt-vis-pris"}],[140378161,{"idx":49,"name":"jakchires-horn","tpage_name":"minee-pris"}],[146604060,{"idx":28,"name":"daxternose","tpage_name":"lforplnt-vis-pris"}],[140378160,{"idx":48,"name":"jakchires-hair","tpage_name":"minee-pris"}],[146604059,{"idx":27,"name":"daxterlense","tpage_name":"lforplnt-vis-pris"}],[140378159,{"idx":47,"name":"jakchires-glovetop","tpage_name":"minee-pris"}],[146604058,{"idx":26,"name":"daxterhelmetplain","tpage_name":"lforplnt-vis-pris"}],[140378158,{"idx":46,"name":"jakchires-facert","tpage_name":"minee-pris"}],[140378157,{"idx":45,"name":"jakchires-facelft","tpage_name":"minee-pris"}],[146604057,{"idx":25,"name":"daxterheadwidenew","tpage_name":"lforplnt-vis-pris"}],[140378156,{"idx":44,"name":"jakchires-eyelid","tpage_name":"minee-pris"}],[152829956,{"idx":4,"name":"fac-punch-wall-glass-edge-01","tpage_name":"factoryc-vis-water"}],[146604056,{"idx":24,"name":"daxtergoggles","tpage_name":"lforplnt-vis-pris"}],[140378155,{"idx":43,"name":"jakchires-eyebrow","tpage_name":"minee-pris"}],[152829955,{"idx":3,"name":"fac-punch-wall-glass-01","tpage_name":"factoryc-vis-water"}],[146604055,{"idx":23,"name":"daxterfoot-bottom","tpage_name":"lforplnt-vis-pris"}],[140378153,{"idx":41,"name":"jakchires-clips","tpage_name":"minee-pris"}],[146604053,{"idx":21,"name":"daxterfinger","tpage_name":"lforplnt-vis-pris"}],[140378152,{"idx":40,"name":"jakchires-chestplate","tpage_name":"minee-pris"}],[146604052,{"idx":20,"name":"daxterear","tpage_name":"lforplnt-vis-pris"}],[144113692,{"idx":28,"name":"rail-light-red","tpage_name":"combd-tfrag"}],[140378151,{"idx":39,"name":"jakchires-brwnleather","tpage_name":"minee-pris"}],[146604051,{"idx":19,"name":"daxterbolt","tpage_name":"lforplnt-vis-pris"}],[144113691,{"idx":27,"name":"comb-redmarker","tpage_name":"combd-tfrag"}],[140378150,{"idx":38,"name":"jakchires-brownstrap","tpage_name":"minee-pris"}],[146604050,{"idx":18,"name":"daxterbodyshort-eix","tpage_name":"lforplnt-vis-pris"}],[144113690,{"idx":26,"name":"rail-env-wall-01","tpage_name":"combd-tfrag"}],[140378149,{"idx":37,"name":"jakchires-blackstrap","tpage_name":"minee-pris"}],[144113689,{"idx":25,"name":"rail-fit-01","tpage_name":"combd-tfrag"}],[146604049,{"idx":17,"name":"daxterarm","tpage_name":"lforplnt-vis-pris"}],[140378148,{"idx":36,"name":"jakchires-arm","tpage_name":"minee-pris"}],[146604048,{"idx":16,"name":"daxter-orange","tpage_name":"lforplnt-vis-pris"}],[144113688,{"idx":24,"name":"rail-tread-01","tpage_name":"combd-tfrag"}],[140378147,{"idx":35,"name":"jakc-wristband-a2","tpage_name":"minee-pris"}],[146604047,{"idx":15,"name":"daxter-furhilite","tpage_name":"lforplnt-vis-pris"}],[144113687,{"idx":23,"name":"rail-rock-01","tpage_name":"combd-tfrag"}],[140378146,{"idx":34,"name":"jakc-wraps","tpage_name":"minee-pris"}],[144113686,{"idx":22,"name":"rail-pipe-02","tpage_name":"combd-tfrag"}],[146604046,{"idx":14,"name":"daxter-eyelid","tpage_name":"lforplnt-vis-pris"}],[74580043,{"idx":75,"name":"sewer-pipe-rim-05b-hitweak","tpage_name":"sewm-vis-tfrag"}],[74580042,{"idx":74,"name":"sewer-scaffold-03-hitweak","tpage_name":"sewm-vis-tfrag"}],[140378145,{"idx":33,"name":"jakc-waistband2","tpage_name":"minee-pris"}],[146604045,{"idx":13,"name":"bam-hairhilite","tpage_name":"lforplnt-vis-pris"}],[144113685,{"idx":21,"name":"rail-pipe-05","tpage_name":"combd-tfrag"}],[74580041,{"idx":73,"name":"sewer-brick-block-04-highertweak","tpage_name":"sewm-vis-tfrag"}],[140378144,{"idx":32,"name":"jakc-skirt","tpage_name":"minee-pris"}],[150339584,{"idx":0,"name":"sig-flatfangs","tpage_name":"lsigklv-water"}],[146604044,{"idx":12,"name":"bam-eyelight","tpage_name":"lforplnt-vis-pris"}],[144113684,{"idx":20,"name":"rail-gray-metal-01","tpage_name":"combd-tfrag"}],[74580040,{"idx":72,"name":"sewer-metal-block-01-hitweak","tpage_name":"sewm-vis-tfrag"}],[140378143,{"idx":31,"name":"jakc-scarfhanging","tpage_name":"minee-pris"}],[146604043,{"idx":11,"name":"jakchires-precarmor-01","tpage_name":"lforplnt-vis-pris"}],[144113683,{"idx":19,"name":"rail-light-yellow","tpage_name":"combd-tfrag"}],[140378142,{"idx":30,"name":"jakc-scarf","tpage_name":"minee-pris"}],[149094402,{"idx":2,"name":"gun-red-mag","tpage_name":"gungame2-pris"}],[146604042,{"idx":10,"name":"mh-plant-legs","tpage_name":"lforplnt-vis-pris"}],[144113682,{"idx":18,"name":"rail-pipe-03","tpage_name":"combd-tfrag"}],[140378141,{"idx":29,"name":"jakc-lens","tpage_name":"minee-pris"}],[149094401,{"idx":1,"name":"gun-red-glow","tpage_name":"gungame2-pris"}],[146604041,{"idx":9,"name":"mh-plant-head","tpage_name":"lforplnt-vis-pris"}],[144113681,{"idx":17,"name":"rail-pipe-01","tpage_name":"combd-tfrag"}],[140378140,{"idx":28,"name":"jakc-gogglemetal","tpage_name":"minee-pris"}],[149094400,{"idx":0,"name":"gun-main","tpage_name":"gungame2-pris"}],[146604040,{"idx":8,"name":"mh-gem-dest","tpage_name":"lforplnt-vis-pris"}],[144113680,{"idx":16,"name":"rail-cord-01","tpage_name":"combd-tfrag"}],[140378139,{"idx":27,"name":"jakc-chestplate-straps","tpage_name":"minee-pris"}],[146604039,{"idx":7,"name":"mh-gem-alpha-02","tpage_name":"lforplnt-vis-pris"}],[144113679,{"idx":15,"name":"rail-detail-01","tpage_name":"combd-tfrag"}],[140378138,{"idx":26,"name":"jakc-armor","tpage_name":"minee-pris"}],[146604038,{"idx":6,"name":"mh-gem-alpha-01","tpage_name":"lforplnt-vis-pris"}],[144113678,{"idx":14,"name":"rail-light-blue","tpage_name":"combd-tfrag"}],[140378137,{"idx":25,"name":"environment-oldmetal","tpage_name":"minee-pris"}],[146604037,{"idx":5,"name":"mh-gem","tpage_name":"lforplnt-vis-pris"}],[144113677,{"idx":13,"name":"rail-light-yellow-small","tpage_name":"combd-tfrag"}],[140378136,{"idx":24,"name":"daxtertuft","tpage_name":"minee-pris"}],[146604036,{"idx":4,"name":"nst-egg-spider-pipe","tpage_name":"lforplnt-vis-pris"}],[144113676,{"idx":12,"name":"rail-trim-01","tpage_name":"combd-tfrag"}],[140378135,{"idx":23,"name":"daxterteeth","tpage_name":"minee-pris"}],[146604035,{"idx":3,"name":"nst-egg-spider-metal","tpage_name":"lforplnt-vis-pris"}],[144113675,{"idx":11,"name":"rail-light-blue-small","tpage_name":"combd-tfrag"}],[140378134,{"idx":22,"name":"daxternose","tpage_name":"minee-pris"}],[146604034,{"idx":2,"name":"nst-egg-spider-eye","tpage_name":"lforplnt-vis-pris"}],[144113674,{"idx":10,"name":"rail-base-mid-01","tpage_name":"combd-tfrag"}],[140378133,{"idx":21,"name":"daxterlense","tpage_name":"minee-pris"}],[146604033,{"idx":1,"name":"nst-egg-spider-egg","tpage_name":"lforplnt-vis-pris"}],[144113673,{"idx":9,"name":"rail-edge-01","tpage_name":"combd-tfrag"}],[140378132,{"idx":20,"name":"daxterhelmetplain","tpage_name":"minee-pris"}],[146604032,{"idx":0,"name":"nst-egg-spider-body","tpage_name":"lforplnt-vis-pris"}],[144113672,{"idx":8,"name":"rail-base-dark-01","tpage_name":"combd-tfrag"}],[140378131,{"idx":19,"name":"daxterheadwidenew","tpage_name":"minee-pris"}],[144113671,{"idx":7,"name":"rail-env-car-01","tpage_name":"combd-tfrag"}],[146472961,{"idx":1,"name":"fac-fence-rim-01","tpage_name":"factoryc-vis-shrub"}],[140247061,{"idx":21,"name":"sewer-plate-02","tpage_name":"minee-tfrag"}],[139657240,{"idx":24,"name":"keira-torch-nozzle-01","tpage_name":"lkeira-pris"}],[139657236,{"idx":20,"name":"keira-pantslarge","tpage_name":"lkeira-pris"}],[139657235,{"idx":19,"name":"keira-maskbolt","tpage_name":"lkeira-pris"}],[139657234,{"idx":18,"name":"keira-lens-large","tpage_name":"lkeira-pris"}],[139657233,{"idx":17,"name":"keira-largewraps","tpage_name":"lkeira-pris"}],[139657232,{"idx":16,"name":"keira-iris-64x64","tpage_name":"lkeira-pris"}],[139657231,{"idx":15,"name":"keira-handtop","tpage_name":"lkeira-pris"}],[139657230,{"idx":14,"name":"keira-handbottom","tpage_name":"lkeira-pris"}],[139657229,{"idx":13,"name":"keira-hair-newest","tpage_name":"lkeira-pris"}],[139657228,{"idx":12,"name":"keira-gogglestrap","tpage_name":"lkeira-pris"}],[139657225,{"idx":9,"name":"keira-face","tpage_name":"lkeira-pris"}],[142147585,{"idx":1,"name":"ceiling-dust","tpage_name":"templex-sprite"}],[139657223,{"idx":7,"name":"keira-chokermetal","tpage_name":"lkeira-pris"}],[139657222,{"idx":6,"name":"keira-chokerhighres","tpage_name":"lkeira-pris"}],[139591698,{"idx":18,"name":"daxtertuft","tpage_name":"ldax-pris"}],[118620211,{"idx":51,"name":"klever-gunmetal-01","tpage_name":"ljkcdmkl-pris"}],[121110571,{"idx":43,"name":"hip-tgreenlite01","tpage_name":"hiphog-vis-tfrag"}],[137232433,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"citycast-pris"}],[135331928,{"idx":88,"name":"rub-greyblue-plain-lowres","tpage_name":"rubblea-vis-tfrag"}],[137232432,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"citycast-pris"}],[135331927,{"idx":87,"name":"rub-wall-gen-01","tpage_name":"rubblea-vis-tfrag"}],[137232431,{"idx":47,"name":"jakchires-pants","tpage_name":"citycast-pris"}],[135331926,{"idx":86,"name":"rub-met-strp-close","tpage_name":"rubblea-vis-tfrag"}],[143458330,{"idx":26,"name":"rail-light-red","tpage_name":"combb-tfrag"}],[137232430,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"citycast-pris"}],[135331925,{"idx":85,"name":"rub-wall-gen-02","tpage_name":"rubblea-vis-tfrag"}],[143458329,{"idx":25,"name":"rail-light-yellow","tpage_name":"combb-tfrag"}],[137232429,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"citycast-pris"}],[135331924,{"idx":84,"name":"rub-wall-gen-04","tpage_name":"rubblea-vis-tfrag"}],[137232415,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"citycast-pris"}],[52428800,{"idx":0,"name":"sewer-pipe-small-01","tpage_name":"sewa-vis-shrub"}],[48627790,{"idx":78,"name":"sewer-grill-02","tpage_name":"sewb-vis-tfrag"}],[135725082,{"idx":26,"name":"seem-uppertorso","tpage_name":"lseemwca-pris2"}],[135725081,{"idx":25,"name":"seem-teeth","tpage_name":"lseemwca-pris2"}],[135725080,{"idx":24,"name":"seem-straps","tpage_name":"lseemwca-pris2"}],[135725077,{"idx":21,"name":"seem-precmetal-plain","tpage_name":"lseemwca-pris2"}],[135725076,{"idx":20,"name":"seem-precmetal-edge","tpage_name":"lseemwca-pris2"}],[135725075,{"idx":19,"name":"seem-precmetal-chestplate-01","tpage_name":"lseemwca-pris2"}],[135725074,{"idx":18,"name":"seem-pipes-02","tpage_name":"lseemwca-pris2"}],[135725073,{"idx":17,"name":"seem-pipes-01","tpage_name":"lseemwca-pris2"}],[135725072,{"idx":16,"name":"seem-pipeend","tpage_name":"lseemwca-pris2"}],[135659525,{"idx":5,"name":"lfacrm-hangar-tooth-01","tpage_name":"lfacrm1-pris"}],[135659524,{"idx":4,"name":"lfacrm-hangar-panel-rim-01","tpage_name":"lfacrm1-pris"}],[135659523,{"idx":3,"name":"lfacrm-hangar-panel-02","tpage_name":"lfacrm1-pris"}],[135659522,{"idx":2,"name":"lfacrm-hangar-panel-01","tpage_name":"lfacrm1-pris"}],[135659521,{"idx":1,"name":"lfacrm-hangar-edge-01","tpage_name":"lfacrm1-pris"}],[121110643,{"idx":115,"name":"hip-gun-barrel-01","tpage_name":"hiphog-vis-tfrag"}],[153485323,{"idx":11,"name":"mhcity-vein-01","tpage_name":"mhcitya-vis-tfrag"}],[152240143,{"idx":15,"name":"seem-headpiecetop","tpage_name":"wascast-pris2"}],[135463047,{"idx":135,"name":"dk-sat-shell-lod-01","tpage_name":"rubblea-vis-pris"}],[170328087,{"idx":23,"name":"rail-light-yellow-small","tpage_name":"combe-tfrag"}],[172818447,{"idx":15,"name":"precur-light-green-01","tpage_name":"precurd-vis-tfrag"}],[135463045,{"idx":133,"name":"dk-sat-shell-01","tpage_name":"rubblea-vis-pris"}],[170328085,{"idx":21,"name":"rail-pipe-01","tpage_name":"combe-tfrag"}],[172818445,{"idx":13,"name":"precur-tube-joint-02","tpage_name":"precurd-vis-tfrag"}],[135463041,{"idx":129,"name":"dk-sat-rim-03","tpage_name":"rubblea-vis-pris"}],[170328081,{"idx":17,"name":"rail-base-mid-01","tpage_name":"combe-tfrag"}],[172818441,{"idx":9,"name":"precur-plate-thin-01","tpage_name":"precurd-vis-tfrag"}],[135463040,{"idx":128,"name":"dk-sat-rim-02","tpage_name":"rubblea-vis-pris"}],[170328080,{"idx":16,"name":"rail-env-car-01","tpage_name":"combe-tfrag"}],[172818440,{"idx":8,"name":"precur-tubes-segment-02","tpage_name":"precurd-vis-tfrag"}],[135463039,{"idx":127,"name":"dk-sat-rim-01","tpage_name":"rubblea-vis-pris"}],[170328079,{"idx":15,"name":"rail-patch-01","tpage_name":"combe-tfrag"}],[172818439,{"idx":7,"name":"precur-wall-tube-01","tpage_name":"precurd-vis-tfrag"}],[135463038,{"idx":126,"name":"dk-sat-panel-01","tpage_name":"rubblea-vis-pris"}],[170328078,{"idx":14,"name":"comb-env2","tpage_name":"combe-tfrag"}],[172818438,{"idx":6,"name":"precur-wall-groove-01","tpage_name":"precurd-vis-tfrag"}],[159121458,{"idx":50,"name":"city-ind-black","tpage_name":"slumbset-tfrag"}],[135463037,{"idx":125,"name":"dk-sat-claw-01","tpage_name":"rubblea-vis-pris"}],[170328077,{"idx":13,"name":"comb-pipe2","tpage_name":"combe-tfrag"}],[159121457,{"idx":49,"name":"ctyslumc-wall-trim-LOW","tpage_name":"slumbset-tfrag"}],[135463036,{"idx":124,"name":"dk-sat-cable-03","tpage_name":"rubblea-vis-pris"}],[172818436,{"idx":4,"name":"precur-tubes-small-01","tpage_name":"precurd-vis-tfrag"}],[159121456,{"idx":48,"name":"ctyslumc-window-panes-LOW","tpage_name":"slumbset-tfrag"}],[135463035,{"idx":123,"name":"dk-sat-cable-02","tpage_name":"rubblea-vis-pris"}],[172818435,{"idx":3,"name":"precur-plate-large-01","tpage_name":"precurd-vis-tfrag"}],[159121455,{"idx":47,"name":"city-tile-LOW","tpage_name":"slumbset-tfrag"}],[135463034,{"idx":122,"name":"dk-sat-cable-01","tpage_name":"rubblea-vis-pris"}],[172818434,{"idx":2,"name":"precur-tentacle-01","tpage_name":"precurd-vis-tfrag"}],[159121454,{"idx":46,"name":"cityslumc-awning-LOW","tpage_name":"slumbset-tfrag"}],[135463033,{"idx":121,"name":"environment-darkprec","tpage_name":"rubblea-vis-pris"}],[172818433,{"idx":1,"name":"precur-wall-brace-01","tpage_name":"precurd-vis-tfrag"}],[159121453,{"idx":45,"name":"ctyslumc-grate1","tpage_name":"slumbset-tfrag"}],[135462978,{"idx":66,"name":"daxtertuft","tpage_name":"rubblea-vis-pris"}],[152895498,{"idx":10,"name":"comb-crct-medium","tpage_name":"combx-tfrag"}],[135462977,{"idx":65,"name":"daxterteeth","tpage_name":"rubblea-vis-pris"}],[152895497,{"idx":9,"name":"comb-plate-02","tpage_name":"combx-tfrag"}],[135462976,{"idx":64,"name":"daxternose","tpage_name":"rubblea-vis-pris"}],[152895496,{"idx":8,"name":"comb-pipe2","tpage_name":"combx-tfrag"}],[135462975,{"idx":63,"name":"daxterlense","tpage_name":"rubblea-vis-pris"}],[152895495,{"idx":7,"name":"minc-pre-11","tpage_name":"combx-tfrag"}],[135462974,{"idx":62,"name":"daxterhelmetplain","tpage_name":"rubblea-vis-pris"}],[152895494,{"idx":6,"name":"minc-pre-04","tpage_name":"combx-tfrag"}],[135462972,{"idx":60,"name":"daxtergoggles","tpage_name":"rubblea-vis-pris"}],[152895492,{"idx":4,"name":"minc-01","tpage_name":"combx-tfrag"}],[135462971,{"idx":59,"name":"daxterfoot-bottom","tpage_name":"rubblea-vis-pris"}],[152895491,{"idx":3,"name":"min-env-mar-01","tpage_name":"combx-tfrag"}],[135462970,{"idx":58,"name":"daxterfoot","tpage_name":"rubblea-vis-pris"}],[152895490,{"idx":2,"name":"comb-temp-glass","tpage_name":"combx-tfrag"}],[135462968,{"idx":56,"name":"daxterear","tpage_name":"rubblea-vis-pris"}],[152895488,{"idx":0,"name":"comb-temp-dark","tpage_name":"combx-tfrag"}],[171442200,{"idx":24,"name":"temple_sandstone_taper01","tpage_name":"templea-vis-tfrag"}],[173932560,{"idx":16,"name":"sig-gun-05","tpage_name":"ltowerb-vis-pris2"}],[170197020,{"idx":28,"name":"ashelin-whitestrap","tpage_name":"outrocst-pris2"}],[135331980,{"idx":140,"name":"rub-cement-top","tpage_name":"rubblea-vis-tfrag"}],[173932559,{"idx":15,"name":"sig-gun-04","tpage_name":"ltowerb-vis-pris2"}],[170197019,{"idx":27,"name":"ashelin-teeth","tpage_name":"outrocst-pris2"}],[135331979,{"idx":139,"name":"rub-door-metal","tpage_name":"rubblea-vis-tfrag"}],[171442198,{"idx":22,"name":"temple_sandstone_stepside01","tpage_name":"templea-vis-tfrag"}],[173932558,{"idx":14,"name":"sig-gun-03","tpage_name":"ltowerb-vis-pris2"}],[170197018,{"idx":26,"name":"ashelin-shoemetal","tpage_name":"outrocst-pris2"}],[135331978,{"idx":138,"name":"rub-door-metal-frame","tpage_name":"rubblea-vis-tfrag"}],[171442185,{"idx":9,"name":"temple_metal02","tpage_name":"templea-vis-tfrag"}],[173932545,{"idx":1,"name":"charHOLD","tpage_name":"ltowerb-vis-pris2"}],[170197005,{"idx":13,"name":"ashelin-gunbarrel-02","tpage_name":"outrocst-pris2"}],[135331965,{"idx":125,"name":"rub-lamp-light-01","tpage_name":"rubblea-vis-tfrag"}],[170197004,{"idx":12,"name":"ashelin-gunbarrel-01","tpage_name":"outrocst-pris2"}],[171442184,{"idx":8,"name":"temple_metal01","tpage_name":"templea-vis-tfrag"}],[173932544,{"idx":0,"name":"bam-eyelight","tpage_name":"ltowerb-vis-pris2"}],[135331964,{"idx":124,"name":"rub-lamp-fencespike-round","tpage_name":"rubblea-vis-tfrag"}],[170197003,{"idx":11,"name":"ashelin-glove","tpage_name":"outrocst-pris2"}],[171442183,{"idx":7,"name":"temple-floor-01","tpage_name":"templea-vis-tfrag"}],[135331963,{"idx":123,"name":"rub-stad-brick-pieces","tpage_name":"rubblea-vis-tfrag"}],[135331962,{"idx":122,"name":"rub-blastdoors","tpage_name":"rubblea-vis-tfrag"}],[170197002,{"idx":10,"name":"ashelin-face","tpage_name":"outrocst-pris2"}],[135331955,{"idx":115,"name":"rub-endblocks","tpage_name":"rubblea-vis-tfrag"}],[170196995,{"idx":3,"name":"ashelin-brownstrap","tpage_name":"outrocst-pris2"}],[170196992,{"idx":0,"name":"ashelin-beltbuckle","tpage_name":"outrocst-pris2"}],[135331952,{"idx":112,"name":"rub-cement-broken-end","tpage_name":"rubblea-vis-tfrag"}],[162725912,{"idx":24,"name":"comb-ring","tpage_name":"railf-tfrag"}],[135331951,{"idx":111,"name":"rub-copper-metal-02","tpage_name":"rubblea-vis-tfrag"}],[162725911,{"idx":23,"name":"rail-env-wall-01","tpage_name":"railf-tfrag"}],[135331950,{"idx":110,"name":"rub-marble-floor-01-hitweak","tpage_name":"rubblea-vis-tfrag"}],[162725910,{"idx":22,"name":"rail-fit-01","tpage_name":"railf-tfrag"}],[135331923,{"idx":83,"name":"rub-panels-01","tpage_name":"rubblea-vis-tfrag"}],[135331922,{"idx":82,"name":"rub-wall-trim","tpage_name":"rubblea-vis-tfrag"}],[135331921,{"idx":81,"name":"rub-palace-tower-side","tpage_name":"rubblea-vis-tfrag"}],[135331920,{"idx":80,"name":"rub-city-wall-inside-damaged","tpage_name":"rubblea-vis-tfrag"}],[135331919,{"idx":79,"name":"rub-wall-side-beam-02","tpage_name":"rubblea-vis-tfrag"}],[150274078,{"idx":30,"name":"vin-teeth-01","tpage_name":"lsigklv-pris2"}],[135331918,{"idx":78,"name":"rub-pal-red","tpage_name":"rubblea-vis-tfrag"}],[150274077,{"idx":29,"name":"sig-undergarments","tpage_name":"lsigklv-pris2"}],[135331917,{"idx":77,"name":"rub-metal-flatpipe-01","tpage_name":"rubblea-vis-tfrag"}],[150274076,{"idx":28,"name":"sig-skirts-03","tpage_name":"lsigklv-pris2"}],[135331916,{"idx":76,"name":"rub-beam-gen","tpage_name":"rubblea-vis-tfrag"}],[150274075,{"idx":27,"name":"sig-skirts-02","tpage_name":"lsigklv-pris2"}],[135331915,{"idx":75,"name":"rub-wall-gen-03","tpage_name":"rubblea-vis-tfrag"}],[150274074,{"idx":26,"name":"sig-skirts","tpage_name":"lsigklv-pris2"}],[135331914,{"idx":74,"name":"rub-dirt-a","tpage_name":"rubblea-vis-tfrag"}],[150274072,{"idx":24,"name":"sig-shoetop","tpage_name":"lsigklv-pris2"}],[135331912,{"idx":72,"name":"rub-stream-rocks","tpage_name":"rubblea-vis-tfrag"}],[143458317,{"idx":13,"name":"rail-detail-01","tpage_name":"combb-tfrag"}],[122290257,{"idx":81,"name":"robotank-tank-beige","tpage_name":"factoryb-vis-pris"}],[137232417,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"citycast-pris"}],[135331847,{"idx":7,"name":"rub-rubble-01","tpage_name":"rubblea-vis-tfrag"}],[135331841,{"idx":1,"name":"rub-blue-paint-rust04","tpage_name":"rubblea-vis-tfrag"}],[135331840,{"idx":0,"name":"rub-metal-01","tpage_name":"rubblea-vis-tfrag"}],[134873264,{"idx":176,"name":"rub-door-metal","tpage_name":"rubbleb-vis-tfrag"}],[187170823,{"idx":7,"name":"dm-urchin-horn-01","tpage_name":"deswalk-vis-pris"}],[134873263,{"idx":175,"name":"rub-door-metal-frame","tpage_name":"rubbleb-vis-tfrag"}],[134873258,{"idx":170,"name":"rub-elec-switch-light-off","tpage_name":"rubbleb-vis-tfrag"}],[134873257,{"idx":169,"name":"rub-elec-switch-light-on","tpage_name":"rubbleb-vis-tfrag"}],[134873256,{"idx":168,"name":"rub-beam-gen-hole","tpage_name":"rubbleb-vis-tfrag"}],[134873255,{"idx":167,"name":"rub-lamp-light-01","tpage_name":"rubbleb-vis-tfrag"}],[134873254,{"idx":166,"name":"rub-lamp-fencespike-round","tpage_name":"rubbleb-vis-tfrag"}],[172228646,{"idx":38,"name":"temple_sandstone_brick-01","tpage_name":"templeb-vis-pris"}],[134873246,{"idx":158,"name":"rub-metal-pipeside-01","tpage_name":"rubbleb-vis-tfrag"}],[134873245,{"idx":157,"name":"rub-palshaft-dirt-blue-01","tpage_name":"rubbleb-vis-tfrag"}],[134873244,{"idx":156,"name":"rub-pal-glass","tpage_name":"rubbleb-vis-tfrag"}],[134873243,{"idx":155,"name":"rub-pal-pillar","tpage_name":"rubbleb-vis-tfrag"}],[134873242,{"idx":154,"name":"rub-pal-metal-trim","tpage_name":"rubbleb-vis-tfrag"}],[173473814,{"idx":22,"name":"tow-wall-supports-HI","tpage_name":"ltowerb-vis-tfrag"}],[134873234,{"idx":146,"name":"rub-butress-metal-02","tpage_name":"rubbleb-vis-tfrag"}],[172228631,{"idx":23,"name":"temple_sandstone01","tpage_name":"templeb-vis-pris"}],[173473811,{"idx":19,"name":"tow-groundpod","tpage_name":"ltowerb-vis-tfrag"}],[134873231,{"idx":143,"name":"rub-endblocks","tpage_name":"rubbleb-vis-tfrag"}],[173473805,{"idx":13,"name":"mhcity-baserock","tpage_name":"ltowerb-vis-tfrag"}],[134873225,{"idx":137,"name":"rub-city-wall-frame","tpage_name":"rubbleb-vis-tfrag"}],[173473804,{"idx":12,"name":"city-lowres-mhcity-tower-01","tpage_name":"ltowerb-vis-tfrag"}],[134873224,{"idx":136,"name":"rub-stad-brick-pieces","tpage_name":"rubbleb-vis-tfrag"}],[173473803,{"idx":11,"name":"city-lowres-mhcity-wall-05","tpage_name":"ltowerb-vis-tfrag"}],[134873223,{"idx":135,"name":"rub-blastdoors","tpage_name":"rubbleb-vis-tfrag"}],[173473801,{"idx":9,"name":"mhcity-basebone","tpage_name":"ltowerb-vis-tfrag"}],[134873221,{"idx":133,"name":"rub-stream-rocks","tpage_name":"rubbleb-vis-tfrag"}],[173473795,{"idx":3,"name":"tow-eggcase-01","tpage_name":"ltowerb-vis-tfrag"}],[134873215,{"idx":127,"name":"rub-cement-broken-end","tpage_name":"rubbleb-vis-tfrag"}],[173473794,{"idx":2,"name":"mhcity-wall-tentacle-02","tpage_name":"ltowerb-vis-tfrag"}],[134873214,{"idx":126,"name":"rub-copper-metal-02","tpage_name":"rubbleb-vis-tfrag"}],[173473793,{"idx":1,"name":"tow-eggpod-01","tpage_name":"ltowerb-vis-tfrag"}],[134873213,{"idx":125,"name":"rub-marble-floor-01-hitweak","tpage_name":"rubbleb-vis-tfrag"}],[134873212,{"idx":124,"name":"rub-greyblue-plain-lowres","tpage_name":"rubbleb-vis-tfrag"}],[172228608,{"idx":0,"name":"temple_sandstone_base01","tpage_name":"templeb-vis-pris"}],[134873208,{"idx":120,"name":"rub-ground","tpage_name":"rubbleb-vis-tfrag"}],[134873207,{"idx":119,"name":"rub-stad-brick","tpage_name":"rubbleb-vis-tfrag"}],[154796082,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"ljakndax-pris"}],[134873202,{"idx":114,"name":"rub-wall-gen-06","tpage_name":"rubbleb-vis-tfrag"}],[154796081,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"ljakndax-pris"}],[134873201,{"idx":113,"name":"rub-cement-a","tpage_name":"rubbleb-vis-tfrag"}],[154796080,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"ljakndax-pris"}],[134873200,{"idx":112,"name":"rub-wall-small-grill","tpage_name":"rubbleb-vis-tfrag"}],[151060539,{"idx":59,"name":"spydroid-red","tpage_name":"factoryc-vis-pris"}],[154796079,{"idx":47,"name":"jakchires-pants","tpage_name":"ljakndax-pris"}],[134873199,{"idx":111,"name":"rub-wall-gen-05","tpage_name":"rubbleb-vis-tfrag"}],[151060538,{"idx":58,"name":"spydroid-light-small-red","tpage_name":"factoryc-vis-pris"}],[154796078,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"ljakndax-pris"}],[134873198,{"idx":110,"name":"rub-window-02","tpage_name":"rubbleb-vis-tfrag"}],[151060533,{"idx":53,"name":"spydroid-gold","tpage_name":"factoryc-vis-pris"}],[154796073,{"idx":41,"name":"jakchires-glovetop","tpage_name":"ljakndax-pris"}],[134873193,{"idx":105,"name":"rub-city-wall-inside-damaged","tpage_name":"rubbleb-vis-tfrag"}],[151060532,{"idx":52,"name":"kg-grunt-rim-03","tpage_name":"factoryc-vis-pris"}],[167247872,{"idx":0,"name":"hud-jinx-head","tpage_name":"ljinx-minimap"}],[154796072,{"idx":40,"name":"jakchires-facert","tpage_name":"ljakndax-pris"}],[134873192,{"idx":104,"name":"rub-window-01","tpage_name":"rubbleb-vis-tfrag"}],[154796071,{"idx":39,"name":"jakchires-facelft","tpage_name":"ljakndax-pris"}],[134873191,{"idx":103,"name":"rub-roof-tile","tpage_name":"rubbleb-vis-tfrag"}],[154796070,{"idx":38,"name":"jakchires-eyelid","tpage_name":"ljakndax-pris"}],[134873190,{"idx":102,"name":"rub-wall-side-beam","tpage_name":"rubbleb-vis-tfrag"}],[154796069,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"ljakndax-pris"}],[151060529,{"idx":49,"name":"kg-grunt-cable-01","tpage_name":"factoryc-vis-pris"}],[134873189,{"idx":101,"name":"rub-wall-gen-01","tpage_name":"rubbleb-vis-tfrag"}],[154796068,{"idx":36,"name":"jakchires-eye","tpage_name":"ljakndax-pris"}],[134873188,{"idx":100,"name":"rub-wall-trim","tpage_name":"rubbleb-vis-tfrag"}],[154796067,{"idx":35,"name":"jakchires-clips","tpage_name":"ljakndax-pris"}],[134873187,{"idx":99,"name":"rub-wall-side-beam-02","tpage_name":"rubbleb-vis-tfrag"}],[154796066,{"idx":34,"name":"jakchires-chestplate","tpage_name":"ljakndax-pris"}],[134873186,{"idx":98,"name":"rub-wall-gen-02","tpage_name":"rubbleb-vis-tfrag"}],[154796065,{"idx":33,"name":"jakchires-brwnleather","tpage_name":"ljakndax-pris"}],[134873185,{"idx":97,"name":"rub-wall-gen-04","tpage_name":"rubbleb-vis-tfrag"}],[140247050,{"idx":10,"name":"sewer-mantel-02","tpage_name":"minee-tfrag"}],[127795250,{"idx":50,"name":"palcab-lorez-metal02","tpage_name":"lfaccity-tfrag"}],[164757504,{"idx":0,"name":"stdm-grass-fringe","tpage_name":"stadium-vis-alpha"}],[154796064,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"ljakndax-pris"}],[134873184,{"idx":96,"name":"rub-panels-01","tpage_name":"rubbleb-vis-tfrag"}],[122093572,{"idx":4,"name":"fac-target-glass-01","tpage_name":"factoryb-vis-water"}],[154796063,{"idx":31,"name":"jakchires-blackstrap","tpage_name":"ljakndax-pris"}],[134873183,{"idx":95,"name":"rub-met-strp-close","tpage_name":"rubbleb-vis-tfrag"}],[122093571,{"idx":3,"name":"hemi-gradient-flames-dest","tpage_name":"factoryb-vis-water"}],[327702,{"idx":22,"name":"lightjak-wings","tpage_name":"level-default-water"}],[49283140,{"idx":68,"name":"sew-wallswitch-metal-04","tpage_name":"sewd-vis-pris"}],[70451200,{"idx":0,"name":"wstlander-01-glovetop","tpage_name":"waswide-vis-water"}],[154796062,{"idx":30,"name":"jakchires-arm","tpage_name":"ljakndax-pris"}],[134873182,{"idx":94,"name":"rub-palace-tower-side","tpage_name":"rubbleb-vis-tfrag"}],[122093570,{"idx":2,"name":"hemi-gradient-dest","tpage_name":"factoryb-vis-water"}],[154796061,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"ljakndax-pris"}],[134873181,{"idx":93,"name":"rub-pal-red","tpage_name":"rubbleb-vis-tfrag"}],[122093569,{"idx":1,"name":"hemi-gradient-rim","tpage_name":"factoryb-vis-water"}],[154796060,{"idx":28,"name":"jakc-wraps","tpage_name":"ljakndax-pris"}],[134873180,{"idx":92,"name":"rub-metal-flatpipe-01","tpage_name":"rubbleb-vis-tfrag"}],[134873179,{"idx":91,"name":"rub-beam-gen","tpage_name":"rubbleb-vis-tfrag"}],[154796059,{"idx":27,"name":"jakc-waistband2","tpage_name":"ljakndax-pris"}],[134873178,{"idx":90,"name":"rub-wall-gen-03","tpage_name":"rubbleb-vis-tfrag"}],[154796058,{"idx":26,"name":"jakc-skirt","tpage_name":"ljakndax-pris"}],[154796056,{"idx":24,"name":"jakc-scarf","tpage_name":"ljakndax-pris"}],[134873176,{"idx":88,"name":"rub-dirt-a","tpage_name":"rubbleb-vis-tfrag"}],[137232393,{"idx":9,"name":"daxterfinger","tpage_name":"citycast-pris"}],[134742033,{"idx":17,"name":"rub-stain-01","tpage_name":"rubblec-vis-shrub"}],[137232391,{"idx":7,"name":"daxterbolt","tpage_name":"citycast-pris"}],[134742031,{"idx":15,"name":"rub-ground-01-small","tpage_name":"rubblec-vis-shrub"}],[134676629,{"idx":149,"name":"rub-elec-switch-light-on","tpage_name":"rubblec-vis-tfrag"}],[173277209,{"idx":25,"name":"tow-wall-tentacle-02","tpage_name":"ltowera-vis-tfrag"}],[175767569,{"idx":17,"name":"prec-handpalm","tpage_name":"loutro-pris"}],[165806129,{"idx":49,"name":"t-citywide-met-strp02","tpage_name":"ltowcity-tfrag"}],[134676628,{"idx":148,"name":"rub-elec-switch-light-off","tpage_name":"rubblec-vis-tfrag"}],[173277208,{"idx":24,"name":"tow-eggside-01","tpage_name":"ltowera-vis-tfrag"}],[175767568,{"idx":16,"name":"prec-hand-back","tpage_name":"loutro-pris"}],[165806128,{"idx":48,"name":"palcab-lorez-metal01","tpage_name":"ltowcity-tfrag"}],[134676627,{"idx":147,"name":"rub-beam-gen-hole","tpage_name":"rubblec-vis-tfrag"}],[173277207,{"idx":23,"name":"tow-blackhole","tpage_name":"ltowera-vis-tfrag"}],[175767567,{"idx":15,"name":"bam-hairhilite","tpage_name":"loutro-pris"}],[165806127,{"idx":47,"name":"palcab-lorez-metal03","tpage_name":"ltowcity-tfrag"}],[134676626,{"idx":146,"name":"rub-lamp-light-01","tpage_name":"rubblec-vis-tfrag"}],[173277206,{"idx":22,"name":"tow-groundpod","tpage_name":"ltowera-vis-tfrag"}],[175767566,{"idx":14,"name":"prec-leader-headshield","tpage_name":"loutro-pris"}],[165806126,{"idx":46,"name":"city-lowres-ctygen-stripe-02","tpage_name":"ltowcity-tfrag"}],[134676625,{"idx":145,"name":"rub-lamp-fencespike-round","tpage_name":"rubblec-vis-tfrag"}],[173277205,{"idx":21,"name":"tow-egg-group-base","tpage_name":"ltowera-vis-tfrag"}],[175767565,{"idx":13,"name":"prec-leader-foreheadshield","tpage_name":"loutro-pris"}],[165806125,{"idx":45,"name":"city-lowres-ctygen-roof-01","tpage_name":"ltowcity-tfrag"}],[134676624,{"idx":144,"name":"rub-butress-metal-02","tpage_name":"rubblec-vis-tfrag"}],[173277204,{"idx":20,"name":"tow-pup-metal-01","tpage_name":"ltowera-vis-tfrag"}],[175767564,{"idx":12,"name":"daxterteeth","tpage_name":"loutro-pris"}],[165806124,{"idx":44,"name":"city-lowres-ctygen-build-04","tpage_name":"ltowcity-tfrag"}],[134676623,{"idx":143,"name":"rub-endblocks","tpage_name":"rubblec-vis-tfrag"}],[173277203,{"idx":19,"name":"tow-baserock","tpage_name":"ltowera-vis-tfrag"}],[175767563,{"idx":11,"name":"daxternose","tpage_name":"loutro-pris"}],[165806123,{"idx":43,"name":"city-lowres-ctygen-build-05","tpage_name":"ltowcity-tfrag"}],[165806102,{"idx":22,"name":"city-lowres-fort-red","tpage_name":"ltowcity-tfrag"}],[134676602,{"idx":122,"name":"stdm-grass","tpage_name":"rubblec-vis-tfrag"}],[134676596,{"idx":116,"name":"rub-city-wall-frame","tpage_name":"rubblec-vis-tfrag"}],[170786816,{"idx":0,"name":"palcab-lowres-background-shoreline-02","tpage_name":"lcitysml-alpha"}],[165806096,{"idx":16,"name":"palcab-lowres-mark-roof-02","tpage_name":"ltowcity-tfrag"}],[134676595,{"idx":115,"name":"rub-stad-brick-pieces","tpage_name":"rubblec-vis-tfrag"}],[165806095,{"idx":15,"name":"palcab-pipe-hoze","tpage_name":"ltowcity-tfrag"}],[134676594,{"idx":114,"name":"rub-stream-rocks","tpage_name":"rubblec-vis-tfrag"}],[165806094,{"idx":14,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"ltowcity-tfrag"}],[134676591,{"idx":111,"name":"rub-copper-metal-02","tpage_name":"rubblec-vis-tfrag"}],[165806091,{"idx":11,"name":"palcab-lowres-ctyslum-wall-02","tpage_name":"ltowcity-tfrag"}],[134676590,{"idx":110,"name":"rub-cement-broken-end","tpage_name":"rubblec-vis-tfrag"}],[165806090,{"idx":10,"name":"palcab-lowres-ctyslum-wall-01","tpage_name":"ltowcity-tfrag"}],[134676589,{"idx":109,"name":"rub-marble-floor-01-hitweak","tpage_name":"rubblec-vis-tfrag"}],[165806089,{"idx":9,"name":"palcab-lowres-ctyslum-roof-01","tpage_name":"ltowcity-tfrag"}],[134676587,{"idx":107,"name":"ctyn-beams","tpage_name":"rubblec-vis-tfrag"}],[165806087,{"idx":7,"name":"palcab-lowres-ctyslum-ground","tpage_name":"ltowcity-tfrag"}],[134676586,{"idx":106,"name":"rub-wall-small-grill","tpage_name":"rubblec-vis-tfrag"}],[165806086,{"idx":6,"name":"palcab-lowres-ctywide-wall-02","tpage_name":"ltowcity-tfrag"}],[134676585,{"idx":105,"name":"ctyn-brown-red","tpage_name":"rubblec-vis-tfrag"}],[165806085,{"idx":5,"name":"palcab-lowres-background-rocksnow","tpage_name":"ltowcity-tfrag"}],[134676584,{"idx":104,"name":"ctyn-wall-2","tpage_name":"rubblec-vis-tfrag"}],[165806084,{"idx":4,"name":"palcab-lowres-background-rocksnow2","tpage_name":"ltowcity-tfrag"}],[49414217,{"idx":73,"name":"kg-grunt-rim-02","tpage_name":"sewc-vis-pris"}],[60620837,{"idx":37,"name":"daxterhelmetplain","tpage_name":"minea-vis-pris"}],[134676583,{"idx":103,"name":"ctyn-black-wall-lower-01","tpage_name":"rubblec-vis-tfrag"}],[165806083,{"idx":3,"name":"palcab-lowres-background-crater-bottom-enviro","tpage_name":"ltowcity-tfrag"}],[134676582,{"idx":102,"name":"ctyn-top-bevel-small-bottom","tpage_name":"rubblec-vis-tfrag"}],[165806082,{"idx":2,"name":"palcab-lowres-ctywide-wall-01","tpage_name":"ltowcity-tfrag"}],[134676581,{"idx":101,"name":"rub-metal-pipeside-01","tpage_name":"rubblec-vis-tfrag"}],[165806081,{"idx":1,"name":"strip-metal-02-lores","tpage_name":"ltowcity-tfrag"}],[134676580,{"idx":100,"name":"rub-palshaft-dirt-blue-01","tpage_name":"rubblec-vis-tfrag"}],[153354280,{"idx":40,"name":"mhcity-bubble","tpage_name":"mhcitya-vis-pris"}],[165806080,{"idx":0,"name":"palcab-lowres-background-hills-01","tpage_name":"ltowcity-tfrag"}],[134676573,{"idx":93,"name":"rub-cement-a","tpage_name":"rubblec-vis-tfrag"}],[153354273,{"idx":33,"name":"mhcity-dirtymetal","tpage_name":"mhcitya-vis-pris"}],[134676572,{"idx":92,"name":"rub-window-02","tpage_name":"rubblec-vis-tfrag"}],[153354272,{"idx":32,"name":"mhcity-basebone","tpage_name":"mhcitya-vis-pris"}],[134676568,{"idx":88,"name":"rub-roof-tile","tpage_name":"rubblec-vis-tfrag"}],[153354268,{"idx":28,"name":"mhcity-puffer-mid-01","tpage_name":"mhcitya-vis-pris"}],[134676567,{"idx":87,"name":"rub-wall-gen-06","tpage_name":"rubblec-vis-tfrag"}],[153354267,{"idx":27,"name":"mhcity-floor-brace-02","tpage_name":"mhcitya-vis-pris"}],[134676566,{"idx":86,"name":"rub-wall-gen-05","tpage_name":"rubblec-vis-tfrag"}],[153354266,{"idx":26,"name":"mhcity-eggskin","tpage_name":"mhcitya-vis-pris"}],[134676565,{"idx":85,"name":"rub-wall-side-beam","tpage_name":"rubblec-vis-tfrag"}],[153354265,{"idx":25,"name":"mhcity-wall-tentacle-01","tpage_name":"mhcitya-vis-pris"}],[134676564,{"idx":84,"name":"rub-window-01","tpage_name":"rubblec-vis-tfrag"}],[153354264,{"idx":24,"name":"mhcity-grunt-egg-rim-burn","tpage_name":"mhcitya-vis-pris"}],[134676560,{"idx":80,"name":"t-citypal-red-met-01","tpage_name":"rubblec-vis-tfrag"}],[153354260,{"idx":20,"name":"mhcity-grunt-egg-metal-01","tpage_name":"mhcitya-vis-pris"}],[134676559,{"idx":79,"name":"t-citypal-small-block-01","tpage_name":"rubblec-vis-tfrag"}],[158334979,{"idx":3,"name":"rub-water-dest","tpage_name":"rubblea-vis-water"}],[153354259,{"idx":19,"name":"mhcity-grunt-egg-03","tpage_name":"mhcitya-vis-pris"}],[134676547,{"idx":67,"name":"rub-ground","tpage_name":"rubblec-vis-tfrag"}],[153354247,{"idx":7,"name":"mhcity-grunt-egg-rim-01","tpage_name":"mhcitya-vis-pris"}],[150863887,{"idx":15,"name":"daxterlense","tpage_name":"towerc-pris"}],[154599426,{"idx":2,"name":"hud-dax-missle-meter-03","tpage_name":"lpatkcs-minimap"}],[134676546,{"idx":66,"name":"rub-wall-gen-01","tpage_name":"rubblec-vis-tfrag"}],[153354246,{"idx":6,"name":"mhcity-grunt-egg-neck-01","tpage_name":"mhcitya-vis-pris"}],[150863886,{"idx":14,"name":"daxterhelmetplain","tpage_name":"towerc-pris"}],[154599425,{"idx":1,"name":"hud-dax-missle-meter-02","tpage_name":"lpatkcs-minimap"}],[153354245,{"idx":5,"name":"mhcity-grunt-egg-gem-01","tpage_name":"mhcitya-vis-pris"}],[134676545,{"idx":65,"name":"rub-wall-trim","tpage_name":"rubblec-vis-tfrag"}],[150863885,{"idx":13,"name":"daxterheadwidenew","tpage_name":"towerc-pris"}],[154599424,{"idx":0,"name":"hud-dax-missle-meter-01","tpage_name":"lpatkcs-minimap"}],[153354244,{"idx":4,"name":"mhcity-grunt-egg-bulbtop-01","tpage_name":"mhcitya-vis-pris"}],[134676544,{"idx":64,"name":"rub-met-strp-close","tpage_name":"rubblec-vis-tfrag"}],[150863884,{"idx":12,"name":"daxtergoggles","tpage_name":"towerc-pris"}],[153354243,{"idx":3,"name":"mhcity-grunt-egg-bulb-01","tpage_name":"mhcitya-vis-pris"}],[150863883,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"towerc-pris"}],[134676543,{"idx":63,"name":"rub-panels-01","tpage_name":"rubblec-vis-tfrag"}],[153354242,{"idx":2,"name":"mhcity-grunt-egg-base-01","tpage_name":"mhcitya-vis-pris"}],[150863882,{"idx":10,"name":"daxterfoot","tpage_name":"towerc-pris"}],[134676542,{"idx":62,"name":"rub-city-wall-inside-damaged","tpage_name":"rubblec-vis-tfrag"}],[150863878,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"towerc-pris"}],[134676538,{"idx":58,"name":"rub-metal-flatpipe-01","tpage_name":"rubblec-vis-tfrag"}],[150863877,{"idx":5,"name":"daxterarm","tpage_name":"towerc-pris"}],[134676537,{"idx":57,"name":"rub-beam-gen","tpage_name":"rubblec-vis-tfrag"}],[134676535,{"idx":55,"name":"rub-statue-stone-01","tpage_name":"rubblec-vis-tfrag"}],[150863875,{"idx":3,"name":"daxter-furhilite","tpage_name":"towerc-pris"}],[134676533,{"idx":53,"name":"rub-dirt-a","tpage_name":"rubblec-vis-tfrag"}],[150863873,{"idx":1,"name":"bam-hairhilite","tpage_name":"towerc-pris"}],[134283272,{"idx":8,"name":"sig2-shoulderarmor","tpage_name":"ltnjxhip-pris"}],[134283271,{"idx":7,"name":"sig2-metal-01","tpage_name":"ltnjxhip-pris"}],[134283270,{"idx":6,"name":"sig2-gun-04","tpage_name":"ltnjxhip-pris"}],[134283269,{"idx":5,"name":"sig2-gun-03","tpage_name":"ltnjxhip-pris"}],[135462965,{"idx":53,"name":"daxterarm","tpage_name":"rubblea-vis-pris"}],[134217785,{"idx":57,"name":"torn-vest","tpage_name":"ltnjxhip-pris2"}],[135462964,{"idx":52,"name":"daxter-orange","tpage_name":"rubblea-vis-pris"}],[134217784,{"idx":56,"name":"torn-teeth-01","tpage_name":"ltnjxhip-pris2"}],[135462963,{"idx":51,"name":"daxter-furhilite","tpage_name":"rubblea-vis-pris"}],[134217783,{"idx":55,"name":"torn-shoe-02","tpage_name":"ltnjxhip-pris2"}],[135462962,{"idx":50,"name":"daxter-eyelid","tpage_name":"rubblea-vis-pris"}],[134217782,{"idx":54,"name":"torn-shoe","tpage_name":"ltnjxhip-pris2"}],[135462961,{"idx":49,"name":"bam-hairhilite","tpage_name":"rubblea-vis-pris"}],[134217781,{"idx":53,"name":"torn-scarf","tpage_name":"ltnjxhip-pris2"}],[135462960,{"idx":48,"name":"pecker-yellowfur","tpage_name":"rubblea-vis-pris"}],[134217780,{"idx":52,"name":"torn-pipe","tpage_name":"ltnjxhip-pris2"}],[135462959,{"idx":47,"name":"pecker-wingtop","tpage_name":"rubblea-vis-pris"}],[134217779,{"idx":51,"name":"torn-mouth","tpage_name":"ltnjxhip-pris2"}],[135462958,{"idx":46,"name":"pecker-wingbottom","tpage_name":"rubblea-vis-pris"}],[134217778,{"idx":50,"name":"torn-metal2","tpage_name":"ltnjxhip-pris2"}],[135462957,{"idx":45,"name":"pecker-teeth","tpage_name":"rubblea-vis-pris"}],[134217777,{"idx":49,"name":"torn-legshield","tpage_name":"ltnjxhip-pris2"}],[135462956,{"idx":44,"name":"pecker-tail","tpage_name":"rubblea-vis-pris"}],[134217776,{"idx":48,"name":"torn-handle-01","tpage_name":"ltnjxhip-pris2"}],[135462955,{"idx":43,"name":"pecker-plume","tpage_name":"rubblea-vis-pris"}],[134217775,{"idx":47,"name":"torn-hair-02","tpage_name":"ltnjxhip-pris2"}],[135462954,{"idx":42,"name":"pecker-face","tpage_name":"rubblea-vis-pris"}],[134217774,{"idx":46,"name":"torn-hair-01","tpage_name":"ltnjxhip-pris2"}],[135462953,{"idx":41,"name":"pecker-eyelid","tpage_name":"rubblea-vis-pris"}],[134217773,{"idx":45,"name":"torn-gunbarrel-02","tpage_name":"ltnjxhip-pris2"}],[135462952,{"idx":40,"name":"pecker-body-01","tpage_name":"rubblea-vis-pris"}],[134217772,{"idx":44,"name":"torn-gunbarrel","tpage_name":"ltnjxhip-pris2"}],[135462951,{"idx":39,"name":"bam-eyelight","tpage_name":"rubblea-vis-pris"}],[134217771,{"idx":43,"name":"torn-footleather","tpage_name":"ltnjxhip-pris2"}],[134217770,{"idx":42,"name":"torn-finger","tpage_name":"ltnjxhip-pris2"}],[134217769,{"idx":41,"name":"torn-face-right","tpage_name":"ltnjxhip-pris2"}],[135462948,{"idx":36,"name":"vehicle-wheel-01","tpage_name":"rubblea-vis-pris"}],[134217768,{"idx":40,"name":"torn-face","tpage_name":"ltnjxhip-pris2"}],[134217767,{"idx":39,"name":"torn-eyelid","tpage_name":"ltnjxhip-pris2"}],[134217766,{"idx":38,"name":"torn-eye","tpage_name":"ltnjxhip-pris2"}],[134217765,{"idx":37,"name":"torn-ear","tpage_name":"ltnjxhip-pris2"}],[134217764,{"idx":36,"name":"torn-blademetal","tpage_name":"ltnjxhip-pris2"}],[134217763,{"idx":35,"name":"torn-belt2","tpage_name":"ltnjxhip-pris2"}],[134217762,{"idx":34,"name":"torn-belt","tpage_name":"ltnjxhip-pris2"}],[134217761,{"idx":33,"name":"torn-armor","tpage_name":"ltnjxhip-pris2"}],[134217760,{"idx":32,"name":"torn-armlft","tpage_name":"ltnjxhip-pris2"}],[134217759,{"idx":31,"name":"charHOLD","tpage_name":"ltnjxhip-pris2"}],[134217758,{"idx":30,"name":"jinx-wraps","tpage_name":"ltnjxhip-pris2"}],[134217757,{"idx":29,"name":"jinx-teeth","tpage_name":"ltnjxhip-pris2"}],[134217756,{"idx":28,"name":"jinx-singlerope","tpage_name":"ltnjxhip-pris2"}],[134217755,{"idx":27,"name":"jinx-shoebottom2","tpage_name":"ltnjxhip-pris2"}],[134217754,{"idx":26,"name":"jinx-shirt","tpage_name":"ltnjxhip-pris2"}],[134217753,{"idx":25,"name":"jinx-scarf","tpage_name":"ltnjxhip-pris2"}],[134217752,{"idx":24,"name":"jinx-rope-01","tpage_name":"ltnjxhip-pris2"}],[134217751,{"idx":23,"name":"jinx-pants","tpage_name":"ltnjxhip-pris2"}],[134217750,{"idx":22,"name":"jinx-kneepad","tpage_name":"ltnjxhip-pris2"}],[134217749,{"idx":21,"name":"jinx-iris","tpage_name":"ltnjxhip-pris2"}],[134217748,{"idx":20,"name":"jinx-handle","tpage_name":"ltnjxhip-pris2"}],[129433601,{"idx":1,"name":"dp-text-02","tpage_name":"wasseem-sprite"}],[115736621,{"idx":45,"name":"jakchires-pants","tpage_name":"lnstcst-pris"}],[134217747,{"idx":19,"name":"jinx-hairtye","tpage_name":"ltnjxhip-pris2"}],[129433600,{"idx":0,"name":"dp-text-01","tpage_name":"wasseem-sprite"}],[115736620,{"idx":44,"name":"jakchires-lightbrownspat","tpage_name":"lnstcst-pris"}],[134217746,{"idx":18,"name":"jinx-hair","tpage_name":"ltnjxhip-pris2"}],[115736619,{"idx":43,"name":"jakchires-leatherpouch","tpage_name":"lnstcst-pris"}],[134217745,{"idx":17,"name":"jinx-glovepalm","tpage_name":"ltnjxhip-pris2"}],[135462924,{"idx":12,"name":"rhino-wheel-01","tpage_name":"rubblea-vis-pris"}],[134217744,{"idx":16,"name":"jinx-glove","tpage_name":"ltnjxhip-pris2"}],[134217743,{"idx":15,"name":"jinx-finger","tpage_name":"ltnjxhip-pris2"}],[134217742,{"idx":14,"name":"jinx-face","tpage_name":"ltnjxhip-pris2"}],[134217741,{"idx":13,"name":"jinx-eyelid","tpage_name":"ltnjxhip-pris2"}],[135462920,{"idx":8,"name":"rhino-horn-02","tpage_name":"rubblea-vis-pris"}],[134217740,{"idx":12,"name":"jinx-cigarflame","tpage_name":"ltnjxhip-pris2"}],[134217739,{"idx":11,"name":"jinx-cigar","tpage_name":"ltnjxhip-pris2"}],[134217738,{"idx":10,"name":"jinx-buckles","tpage_name":"ltnjxhip-pris2"}],[134217737,{"idx":9,"name":"jinx-brownstrapbolts","tpage_name":"ltnjxhip-pris2"}],[135462916,{"idx":4,"name":"intcept-tread01","tpage_name":"rubblea-vis-pris"}],[134217736,{"idx":8,"name":"jinx-brownstrap","tpage_name":"ltnjxhip-pris2"}],[134217735,{"idx":7,"name":"jinx-boottop","tpage_name":"ltnjxhip-pris2"}],[134217734,{"idx":6,"name":"jinx-boottoe","tpage_name":"ltnjxhip-pris2"}],[134217733,{"idx":5,"name":"jinx-blademetal","tpage_name":"ltnjxhip-pris2"}],[134217732,{"idx":4,"name":"jinx-belt","tpage_name":"ltnjxhip-pris2"}],[134217731,{"idx":3,"name":"jinx-arm","tpage_name":"ltnjxhip-pris2"}],[134217730,{"idx":2,"name":"environment-oldmetal","tpage_name":"ltnjxhip-pris2"}],[134217729,{"idx":1,"name":"bam-hairhilite","tpage_name":"ltnjxhip-pris2"}],[134217728,{"idx":0,"name":"bam-eyelight","tpage_name":"ltnjxhip-pris2"}],[130351111,{"idx":7,"name":"des-beast-metal-cap","tpage_name":"deshover-pris2"}],[130351110,{"idx":6,"name":"des-beast-metal-02","tpage_name":"deshover-pris2"}],[130351107,{"idx":3,"name":"des-beast-gunend","tpage_name":"deshover-pris2"}],[129302562,{"idx":34,"name":"grunt-teeth-01","tpage_name":"sewn-vis-pris"}],[94240813,{"idx":45,"name":"city-lowres-ctygen-roof-01","tpage_name":"intpfall-vis-tfrag"}],[48627769,{"idx":57,"name":"sewer-round-03","tpage_name":"sewb-vis-tfrag"}],[61079569,{"idx":17,"name":"manta-eye-01","tpage_name":"minec-vis-pris"}],[129302561,{"idx":33,"name":"grunt-skin-03","tpage_name":"sewn-vis-pris"}],[94240812,{"idx":44,"name":"city-lowres-ctygen-stripe-01","tpage_name":"intpfall-vis-tfrag"}],[129302560,{"idx":32,"name":"grunt-skin-02","tpage_name":"sewn-vis-pris"}],[94240811,{"idx":43,"name":"city-lowres-ctygen-build-01","tpage_name":"intpfall-vis-tfrag"}],[146604065,{"idx":33,"name":"jakc-chestplate-straps","tpage_name":"lforplnt-vis-pris"}],[140378165,{"idx":53,"name":"jakchires-pants","tpage_name":"minee-pris"}],[129171545,{"idx":89,"name":"sewer-round-01","tpage_name":"sewn-vis-tfrag"}],[156565504,{"idx":0,"name":"water-splat","tpage_name":"mhcitya-sprite"}],[146604064,{"idx":32,"name":"jakc-armor","tpage_name":"lforplnt-vis-pris"}],[140378164,{"idx":52,"name":"jakchires-lightbrownspat","tpage_name":"minee-pris"}],[129171544,{"idx":88,"name":"sewer-round-02","tpage_name":"sewn-vis-tfrag"}],[55115796,{"idx":20,"name":"wascity-metal-pole","tpage_name":"wascityb-vis-tfrag"}],[48889896,{"idx":40,"name":"sewer-plate-03","tpage_name":"sewd-vis-tfrag"}],[41418816,{"idx":64,"name":"wascity-elev-door-orange","tpage_name":"wascitya-vis-tfrag"}],[112328742,{"idx":38,"name":"jakchires-eye","tpage_name":"wascast-pris"}],[91160682,{"idx":106,"name":"jakchires-shoeteop","tpage_name":"gungame-vis-pris"}],[140378163,{"idx":51,"name":"jakchires-leatherpouch","tpage_name":"minee-pris"}],[146604063,{"idx":31,"name":"environment-oldmetal","tpage_name":"lforplnt-vis-pris"}],[129171543,{"idx":87,"name":"sewer-round-03","tpage_name":"sewn-vis-tfrag"}],[140378130,{"idx":18,"name":"daxtergoggles","tpage_name":"minee-pris"}],[144113670,{"idx":6,"name":"rail-patch-01","tpage_name":"combd-tfrag"}],[129171510,{"idx":54,"name":"sewer-big-brace-trim-02","tpage_name":"sewn-vis-tfrag"}],[140378129,{"idx":17,"name":"daxterfoot-bottom","tpage_name":"minee-pris"}],[129171509,{"idx":53,"name":"sewer-metal-block-06","tpage_name":"sewn-vis-tfrag"}],[140378128,{"idx":16,"name":"daxterfoot","tpage_name":"minee-pris"}],[129171508,{"idx":52,"name":"sewer-grate-01","tpage_name":"sewn-vis-tfrag"}],[140378127,{"idx":15,"name":"daxterfinger","tpage_name":"minee-pris"}],[129171507,{"idx":51,"name":"sewer-grindpipe","tpage_name":"sewn-vis-tfrag"}],[140378126,{"idx":14,"name":"daxterear","tpage_name":"minee-pris"}],[144113666,{"idx":2,"name":"comb-temp-glass","tpage_name":"combd-tfrag"}],[129171506,{"idx":50,"name":"strip-black","tpage_name":"sewn-vis-tfrag"}],[140378125,{"idx":13,"name":"daxterbolt","tpage_name":"minee-pris"}],[144113665,{"idx":1,"name":"comb-temp-dark","tpage_name":"combd-tfrag"}],[129171505,{"idx":49,"name":"sewer-plate-03","tpage_name":"sewn-vis-tfrag"}],[140378124,{"idx":12,"name":"daxterbodyshort-eix","tpage_name":"minee-pris"}],[129171504,{"idx":48,"name":"sewer-pipe-rim-05b","tpage_name":"sewn-vis-tfrag"}],[140378123,{"idx":11,"name":"daxterarm","tpage_name":"minee-pris"}],[129171503,{"idx":47,"name":"sewer-pipe-02","tpage_name":"sewn-vis-tfrag"}],[140378122,{"idx":10,"name":"daxter-orange","tpage_name":"minee-pris"}],[129171502,{"idx":46,"name":"sewer-plate-02","tpage_name":"sewn-vis-tfrag"}],[140378121,{"idx":9,"name":"daxter-furhilite","tpage_name":"minee-pris"}],[129171501,{"idx":45,"name":"sewer-metal-floor-01","tpage_name":"sewn-vis-tfrag"}],[140378120,{"idx":8,"name":"daxter-eyelid","tpage_name":"minee-pris"}],[129171500,{"idx":44,"name":"sewer-pipe-01","tpage_name":"sewn-vis-tfrag"}],[140378119,{"idx":7,"name":"bam-hairhilite","tpage_name":"minee-pris"}],[129171499,{"idx":43,"name":"sewer-pipe-rim-07","tpage_name":"sewn-vis-tfrag"}],[140378118,{"idx":6,"name":"bam-eyelight","tpage_name":"minee-pris"}],[129171498,{"idx":42,"name":"sewer-nut-01","tpage_name":"sewn-vis-tfrag"}],[140378117,{"idx":5,"name":"airlockl-door-metalframe","tpage_name":"minee-pris"}],[129171497,{"idx":41,"name":"sewer-brick-roof-06","tpage_name":"sewn-vis-tfrag"}],[129171486,{"idx":30,"name":"sewer-brick-wall-01","tpage_name":"sewn-vis-tfrag"}],[135397386,{"idx":10,"name":"rub-beam-gen","tpage_name":"rubblea-vis-shrub"}],[129171485,{"idx":29,"name":"sewer-hall-light-01","tpage_name":"sewn-vis-tfrag"}],[135397385,{"idx":9,"name":"rub-greyblue-plain-lowres","tpage_name":"rubblea-vis-shrub"}],[129171470,{"idx":14,"name":"sewer-stone-crack-01","tpage_name":"sewn-vis-tfrag"}],[130416650,{"idx":10,"name":"vol-bark-burnt","tpage_name":"volcanox-shrub"}],[129171467,{"idx":11,"name":"sewer-small-light-01","tpage_name":"sewn-vis-tfrag"}],[130416647,{"idx":7,"name":"vola-grass-floor-01","tpage_name":"volcanox-shrub"}],[129171466,{"idx":10,"name":"sewer-brick-block-10-hitweak","tpage_name":"sewn-vis-tfrag"}],[130416646,{"idx":6,"name":"vola-small-rock-sides","tpage_name":"volcanox-shrub"}],[129171465,{"idx":9,"name":"sewer-brick-block-11-hitweak","tpage_name":"sewn-vis-tfrag"}],[130416645,{"idx":5,"name":"fora-shrub-pebbles","tpage_name":"volcanox-shrub"}],[129171464,{"idx":8,"name":"sewer-stone-newarch-01","tpage_name":"sewn-vis-tfrag"}],[130416644,{"idx":4,"name":"vola-shrub-leaf","tpage_name":"volcanox-shrub"}],[130351109,{"idx":5,"name":"des-beast-metal-01","tpage_name":"deshover-pris2"}],[129105929,{"idx":9,"name":"sewer-waterfall-01-n-dest","tpage_name":"sewn-vis-water"}],[130351108,{"idx":4,"name":"des-beast-leg","tpage_name":"deshover-pris2"}],[129105928,{"idx":8,"name":"sewer-water-wave-01-n-dest","tpage_name":"sewn-vis-water"}],[130351106,{"idx":2,"name":"des-beast-feet","tpage_name":"deshover-pris2"}],[129105926,{"idx":6,"name":"sewer-water-still-01-n-dest","tpage_name":"sewn-vis-water"}],[128974937,{"idx":89,"name":"ashelin-whitestrap","tpage_name":"freecast-pris2"}],[155123717,{"idx":5,"name":"daxterarm","tpage_name":"mhctycst-pris"}],[153878537,{"idx":9,"name":"pecker-teeth","tpage_name":"ldmpckgn-pris"}],[128974936,{"idx":88,"name":"ashelin-teeth","tpage_name":"freecast-pris2"}],[155123716,{"idx":4,"name":"daxter-orange","tpage_name":"mhctycst-pris"}],[153878536,{"idx":8,"name":"pecker-tail","tpage_name":"ldmpckgn-pris"}],[128974935,{"idx":87,"name":"ashelin-shoemetal","tpage_name":"freecast-pris2"}],[155123715,{"idx":3,"name":"daxter-furhilite","tpage_name":"mhctycst-pris"}],[153878535,{"idx":7,"name":"pecker-plume","tpage_name":"ldmpckgn-pris"}],[128974934,{"idx":86,"name":"ashelin-shoebottom","tpage_name":"freecast-pris2"}],[155123714,{"idx":2,"name":"daxter-eyelid","tpage_name":"mhctycst-pris"}],[153878534,{"idx":6,"name":"pecker-face","tpage_name":"ldmpckgn-pris"}],[128974922,{"idx":74,"name":"ashelin-gunbarrel-02","tpage_name":"freecast-pris2"}],[128974921,{"idx":73,"name":"ashelin-gunbarrel-01","tpage_name":"freecast-pris2"}],[128974920,{"idx":72,"name":"ashelin-glove","tpage_name":"freecast-pris2"}],[128974919,{"idx":71,"name":"ashelin-face","tpage_name":"freecast-pris2"}],[128974918,{"idx":70,"name":"ashelin-eyelid","tpage_name":"freecast-pris2"}],[128974917,{"idx":69,"name":"ashelin-eyebrow","tpage_name":"freecast-pris2"}],[128974916,{"idx":68,"name":"ashelin-eye","tpage_name":"freecast-pris2"}],[128974915,{"idx":67,"name":"ashelin-chest","tpage_name":"freecast-pris2"}],[128974914,{"idx":66,"name":"ashelin-cgrank","tpage_name":"freecast-pris2"}],[128974913,{"idx":65,"name":"ashelin-cglogo","tpage_name":"freecast-pris2"}],[128974912,{"idx":64,"name":"ashelin-brownstrap","tpage_name":"freecast-pris2"}],[128974911,{"idx":63,"name":"ashelin-boottop","tpage_name":"freecast-pris2"}],[146407430,{"idx":6,"name":"facc-convey-02","tpage_name":"factoryc-vis-alpha"}],[128974910,{"idx":62,"name":"ashelin-bolts","tpage_name":"freecast-pris2"}],[146407429,{"idx":5,"name":"facc-convey-02-dest","tpage_name":"factoryc-vis-alpha"}],[128974909,{"idx":61,"name":"ashelin-beltbuckle","tpage_name":"freecast-pris2"}],[146407428,{"idx":4,"name":"facc-convey-dest","tpage_name":"factoryc-vis-alpha"}],[128974908,{"idx":60,"name":"veger-whitecloth","tpage_name":"freecast-pris2"}],[146407427,{"idx":3,"name":"facc-convey","tpage_name":"factoryc-vis-alpha"}],[128974907,{"idx":59,"name":"veger-walkingstick-03","tpage_name":"freecast-pris2"}],[146407426,{"idx":2,"name":"facc-hole-grill-01","tpage_name":"factoryc-vis-alpha"}],[128974906,{"idx":58,"name":"veger-walkingstick-02","tpage_name":"freecast-pris2"}],[128974905,{"idx":57,"name":"veger-walkingstick-01","tpage_name":"freecast-pris2"}],[146407424,{"idx":0,"name":"facb-glass-01","tpage_name":"factoryc-vis-alpha"}],[128974904,{"idx":56,"name":"veger-vest","tpage_name":"freecast-pris2"}],[128974903,{"idx":55,"name":"veger-teeth","tpage_name":"freecast-pris2"}],[128974902,{"idx":54,"name":"veger-stickwrap","tpage_name":"freecast-pris2"}],[128974901,{"idx":53,"name":"veger-sleevelower","tpage_name":"freecast-pris2"}],[128974900,{"idx":52,"name":"veger-sleeve","tpage_name":"freecast-pris2"}],[128974899,{"idx":51,"name":"veger-shoulderplatemetal","tpage_name":"freecast-pris2"}],[128974898,{"idx":50,"name":"veger-shoulderplate","tpage_name":"freecast-pris2"}],[128974897,{"idx":49,"name":"veger-shoebottom","tpage_name":"freecast-pris2"}],[128974896,{"idx":48,"name":"veger-scarf","tpage_name":"freecast-pris2"}],[128974895,{"idx":47,"name":"veger-parchment","tpage_name":"freecast-pris2"}],[128974894,{"idx":46,"name":"veger-pants","tpage_name":"freecast-pris2"}],[128974893,{"idx":45,"name":"veger-pages","tpage_name":"freecast-pris2"}],[137232400,{"idx":16,"name":"daxternose","tpage_name":"citycast-pris"}],[122290240,{"idx":64,"name":"kgfighter-08","tpage_name":"factoryb-vis-pris"}],[142671872,{"idx":0,"name":"sniper-core-glass-01","tpage_name":"lctysnpr-water"}],[128974892,{"idx":44,"name":"veger-legwraps","tpage_name":"freecast-pris2"}],[128974891,{"idx":43,"name":"veger-iris","tpage_name":"freecast-pris2"}],[128974890,{"idx":42,"name":"veger-hand","tpage_name":"freecast-pris2"}],[128974889,{"idx":41,"name":"veger-hair","tpage_name":"freecast-pris2"}],[128974888,{"idx":40,"name":"veger-gold","tpage_name":"freecast-pris2"}],[128974887,{"idx":39,"name":"veger-fingertop","tpage_name":"freecast-pris2"}],[128974886,{"idx":38,"name":"veger-fingerbottom","tpage_name":"freecast-pris2"}],[128974885,{"idx":37,"name":"veger-face","tpage_name":"freecast-pris2"}],[128974884,{"idx":36,"name":"veger-eyelid","tpage_name":"freecast-pris2"}],[128974883,{"idx":35,"name":"veger-endpaper","tpage_name":"freecast-pris2"}],[128974882,{"idx":34,"name":"veger-coatclips","tpage_name":"freecast-pris2"}],[128974881,{"idx":33,"name":"veger-coatbelt","tpage_name":"freecast-pris2"}],[128974880,{"idx":32,"name":"veger-coat","tpage_name":"freecast-pris2"}],[128974879,{"idx":31,"name":"veger-bootstrap","tpage_name":"freecast-pris2"}],[128974878,{"idx":30,"name":"veger-bootfoot","tpage_name":"freecast-pris2"}],[128974877,{"idx":29,"name":"veger-bootbolt","tpage_name":"freecast-pris2"}],[128974876,{"idx":28,"name":"veger-bookspine","tpage_name":"freecast-pris2"}],[128974875,{"idx":27,"name":"veger-booksides","tpage_name":"freecast-pris2"}],[128974874,{"idx":26,"name":"veger-bookleather","tpage_name":"freecast-pris2"}],[128974873,{"idx":25,"name":"samosbird-wing","tpage_name":"freecast-pris2"}],[128974872,{"idx":24,"name":"samosbird-plume","tpage_name":"freecast-pris2"}],[128974871,{"idx":23,"name":"samosbird-eye","tpage_name":"freecast-pris2"}],[130220050,{"idx":18,"name":"daxtertuft","tpage_name":"lpatkcs-pris"}],[128974870,{"idx":22,"name":"samosbird-body","tpage_name":"freecast-pris2"}],[130220049,{"idx":17,"name":"daxterteeth","tpage_name":"lpatkcs-pris"}],[128974869,{"idx":21,"name":"samosbird-beak","tpage_name":"freecast-pris2"}],[130220048,{"idx":16,"name":"daxternose","tpage_name":"lpatkcs-pris"}],[128974868,{"idx":20,"name":"samos-vest","tpage_name":"freecast-pris2"}],[130220047,{"idx":15,"name":"daxterlense","tpage_name":"lpatkcs-pris"}],[128974867,{"idx":19,"name":"samos-teeth2","tpage_name":"freecast-pris2"}],[130220046,{"idx":14,"name":"daxterhelmetplain","tpage_name":"lpatkcs-pris"}],[128974866,{"idx":18,"name":"samos-strap","tpage_name":"freecast-pris2"}],[130220045,{"idx":13,"name":"daxterheadwidenew","tpage_name":"lpatkcs-pris"}],[128974865,{"idx":17,"name":"samos-metal","tpage_name":"freecast-pris2"}],[130220044,{"idx":12,"name":"daxtergoggles","tpage_name":"lpatkcs-pris"}],[128974864,{"idx":16,"name":"samos-log-03","tpage_name":"freecast-pris2"}],[130220043,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"lpatkcs-pris"}],[128974863,{"idx":15,"name":"samos-log-02","tpage_name":"freecast-pris2"}],[130220042,{"idx":10,"name":"daxterfoot","tpage_name":"lpatkcs-pris"}],[128974862,{"idx":14,"name":"samos-log-01","tpage_name":"freecast-pris2"}],[130220041,{"idx":9,"name":"daxterfinger","tpage_name":"lpatkcs-pris"}],[128974861,{"idx":13,"name":"samos-lens","tpage_name":"freecast-pris2"}],[130220040,{"idx":8,"name":"daxterear","tpage_name":"lpatkcs-pris"}],[128974860,{"idx":12,"name":"samos-leaf","tpage_name":"freecast-pris2"}],[130220039,{"idx":7,"name":"daxterbolt","tpage_name":"lpatkcs-pris"}],[128974859,{"idx":11,"name":"samos-helmet","tpage_name":"freecast-pris2"}],[130220038,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"lpatkcs-pris"}],[128974858,{"idx":10,"name":"samos-hair","tpage_name":"freecast-pris2"}],[130220037,{"idx":5,"name":"daxterarm","tpage_name":"lpatkcs-pris"}],[128974857,{"idx":9,"name":"samos-finger-01","tpage_name":"freecast-pris2"}],[130220036,{"idx":4,"name":"daxter-orange","tpage_name":"lpatkcs-pris"}],[128974856,{"idx":8,"name":"samos-face","tpage_name":"freecast-pris2"}],[130220035,{"idx":3,"name":"daxter-furhilite","tpage_name":"lpatkcs-pris"}],[128974855,{"idx":7,"name":"samos-eyelid","tpage_name":"freecast-pris2"}],[130220034,{"idx":2,"name":"daxter-eyelid","tpage_name":"lpatkcs-pris"}],[128974854,{"idx":6,"name":"samos-eye","tpage_name":"freecast-pris2"}],[130220033,{"idx":1,"name":"bam-hairhilite","tpage_name":"lpatkcs-pris"}],[128974853,{"idx":5,"name":"samos-ear","tpage_name":"freecast-pris2"}],[130220032,{"idx":0,"name":"bam-eyelight","tpage_name":"lpatkcs-pris"}],[128974852,{"idx":4,"name":"samos-diaper","tpage_name":"freecast-pris2"}],[128974851,{"idx":3,"name":"samos-arm","tpage_name":"freecast-pris2"}],[128974850,{"idx":2,"name":"environment-oldmetal","tpage_name":"freecast-pris2"}],[128974849,{"idx":1,"name":"bam-hairhilite","tpage_name":"freecast-pris2"}],[128974848,{"idx":0,"name":"bam-eyelight","tpage_name":"freecast-pris2"}],[104792206,{"idx":142,"name":"environment-darkprec","tpage_name":"desresc-pris"}],[128909375,{"idx":63,"name":"gun-yellow-mag-end","tpage_name":"freecast-pris"}],[122290193,{"idx":17,"name":"fac-tower-base-03","tpage_name":"factoryb-vis-pris"}],[112328753,{"idx":49,"name":"jakchires-pants","tpage_name":"wascast-pris"}],[146341894,{"idx":6,"name":"facc-metal-panel-09","tpage_name":"factoryc-vis-tfrag"}],[128909374,{"idx":62,"name":"gun-tip","tpage_name":"freecast-pris"}],[122290192,{"idx":16,"name":"fac-tower-panel-02","tpage_name":"factoryb-vis-pris"}],[112328752,{"idx":48,"name":"jakchires-lightbrownspat","tpage_name":"wascast-pris"}],[146341893,{"idx":5,"name":"facc-beam-01","tpage_name":"factoryc-vis-tfrag"}],[128909373,{"idx":61,"name":"gun-teeth","tpage_name":"freecast-pris"}],[146341892,{"idx":4,"name":"facc-door-frame-01","tpage_name":"factoryc-vis-tfrag"}],[128909372,{"idx":60,"name":"gun-main","tpage_name":"freecast-pris"}],[112328750,{"idx":46,"name":"jakchires-jacket","tpage_name":"wascast-pris"}],[146341891,{"idx":3,"name":"facc-turret-base","tpage_name":"factoryc-vis-tfrag"}],[128909371,{"idx":59,"name":"gun-eye","tpage_name":"freecast-pris"}],[112328749,{"idx":45,"name":"jakchires-horn","tpage_name":"wascast-pris"}],[146341890,{"idx":2,"name":"facc-wall-trim-01","tpage_name":"factoryc-vis-tfrag"}],[128909370,{"idx":58,"name":"environment-title","tpage_name":"freecast-pris"}],[112328748,{"idx":44,"name":"jakchires-hair","tpage_name":"wascast-pris"}],[146341889,{"idx":1,"name":"facc-wall-01","tpage_name":"factoryc-vis-tfrag"}],[128909369,{"idx":57,"name":"pecker-yellowfur","tpage_name":"freecast-pris"}],[146341888,{"idx":0,"name":"facc-metal-panel-11","tpage_name":"factoryc-vis-tfrag"}],[128909368,{"idx":56,"name":"pecker-wingtop","tpage_name":"freecast-pris"}],[122290186,{"idx":10,"name":"fac-tower-07","tpage_name":"factoryb-vis-pris"}],[112328746,{"idx":42,"name":"jakchires-facert","tpage_name":"wascast-pris"}],[128909367,{"idx":55,"name":"pecker-wingbottom","tpage_name":"freecast-pris"}],[128909366,{"idx":54,"name":"pecker-teeth","tpage_name":"freecast-pris"}],[128909365,{"idx":53,"name":"pecker-tail","tpage_name":"freecast-pris"}],[91160683,{"idx":107,"name":"jakchires-teeth","tpage_name":"gungame-vis-pris"}],[112328743,{"idx":39,"name":"jakchires-eyebrow","tpage_name":"wascast-pris"}],[128909348,{"idx":36,"name":"onin-hand","tpage_name":"freecast-pris"}],[128909347,{"idx":35,"name":"onin-hair","tpage_name":"freecast-pris"}],[128909346,{"idx":34,"name":"onin-finger","tpage_name":"freecast-pris"}],[128909345,{"idx":33,"name":"onin-face","tpage_name":"freecast-pris"}],[128909344,{"idx":32,"name":"onin-eyelid","tpage_name":"freecast-pris"}],[91160662,{"idx":86,"name":"jakchires-blackstrap","tpage_name":"gungame-vis-pris"}],[104857642,{"idx":42,"name":"jakchires-jacket","tpage_name":"oasiscst-pris"}],[112328722,{"idx":18,"name":"daxtertuft","tpage_name":"wascast-pris"}],[128909343,{"idx":31,"name":"onin-eye","tpage_name":"freecast-pris"}],[128909342,{"idx":30,"name":"onin-chain","tpage_name":"freecast-pris"}],[128909341,{"idx":29,"name":"onin-braclet","tpage_name":"freecast-pris"}],[60686348,{"idx":12,"name":"minb-hang-strut-metl-01","tpage_name":"mineb-vis-tfrag"}],[128909340,{"idx":28,"name":"onin-bowlhead","tpage_name":"freecast-pris"}],[128909339,{"idx":27,"name":"onin-arm","tpage_name":"freecast-pris"}],[60686346,{"idx":10,"name":"minc-blue-paint-rust01","tpage_name":"mineb-vis-tfrag"}],[128909338,{"idx":26,"name":"keira-torch-nozzle-02","tpage_name":"freecast-pris"}],[60686345,{"idx":9,"name":"minc-rust-pipe-03","tpage_name":"mineb-vis-tfrag"}],[128909337,{"idx":25,"name":"keira-torch-nozzle-01","tpage_name":"freecast-pris"}],[60686344,{"idx":8,"name":"minc-rust-pipe-04","tpage_name":"mineb-vis-tfrag"}],[128909336,{"idx":24,"name":"keira-torch-guard-01","tpage_name":"freecast-pris"}],[128909335,{"idx":23,"name":"keira-shoebottom","tpage_name":"freecast-pris"}],[56950802,{"idx":18,"name":"waspala-yellow-01","tpage_name":"waspala-tfrag"}],[60686342,{"idx":6,"name":"minb-stone09","tpage_name":"mineb-vis-tfrag"}],[128909334,{"idx":22,"name":"keira-shirt","tpage_name":"freecast-pris"}],[56950801,{"idx":17,"name":"waspala-red-01","tpage_name":"waspala-tfrag"}],[60686341,{"idx":5,"name":"minb-stone17","tpage_name":"mineb-vis-tfrag"}],[128909333,{"idx":21,"name":"keira-pantslarge","tpage_name":"freecast-pris"}],[56950800,{"idx":16,"name":"waspala-blue-01","tpage_name":"waspala-tfrag"}],[50724900,{"idx":36,"name":"fora-precursor-circuitpattern-01","tpage_name":"foresta-vis-pris"}],[60686340,{"idx":4,"name":"minb-stone11","tpage_name":"mineb-vis-tfrag"}],[128909332,{"idx":20,"name":"keira-maskbolt","tpage_name":"freecast-pris"}],[60686339,{"idx":3,"name":"minb-stone12","tpage_name":"mineb-vis-tfrag"}],[128909331,{"idx":19,"name":"keira-lens-large","tpage_name":"freecast-pris"}],[60686338,{"idx":2,"name":"minb-stone-brick","tpage_name":"mineb-vis-tfrag"}],[128909330,{"idx":18,"name":"keira-largewraps","tpage_name":"freecast-pris"}],[60686337,{"idx":1,"name":"minc-cliff-face-01","tpage_name":"mineb-vis-tfrag"}],[128909329,{"idx":17,"name":"keira-iris-64x64","tpage_name":"freecast-pris"}],[128909328,{"idx":16,"name":"keira-handtop","tpage_name":"freecast-pris"}],[128909327,{"idx":15,"name":"keira-handbottom","tpage_name":"freecast-pris"}],[128909322,{"idx":10,"name":"keira-face","tpage_name":"freecast-pris"}],[128909321,{"idx":9,"name":"keira-eyelid","tpage_name":"freecast-pris"}],[127795331,{"idx":131,"name":"rub-palace-tower-side","tpage_name":"lfaccity-tfrag"}],[127795330,{"idx":130,"name":"palcab-lorez-plates-red-stripe01","tpage_name":"lfaccity-tfrag"}],[127795329,{"idx":129,"name":"palcab-lorez-plates01","tpage_name":"lfaccity-tfrag"}],[127795328,{"idx":128,"name":"palcab-lorez-asphalt01","tpage_name":"lfaccity-tfrag"}],[127795327,{"idx":127,"name":"palcab-lorez-metal01-red-stripe","tpage_name":"lfaccity-tfrag"}],[127795324,{"idx":124,"name":"palcab-smallpipe-lores","tpage_name":"lfaccity-tfrag"}],[127795323,{"idx":123,"name":"palcab-lowres-background-shoreline-02","tpage_name":"lfaccity-tfrag"}],[127795322,{"idx":122,"name":"palcab-lowres-background-grass-to-desert-01","tpage_name":"lfaccity-tfrag"}],[127795321,{"idx":121,"name":"palcab-lowres-background-grass-to-desert-02","tpage_name":"lfaccity-tfrag"}],[127795320,{"idx":120,"name":"palcab-lowres-background-mountains","tpage_name":"lfaccity-tfrag"}],[127795319,{"idx":119,"name":"palcab-lowres-background-peaks-01","tpage_name":"lfaccity-tfrag"}],[153944098,{"idx":34,"name":"king-wristband","tpage_name":"ldmpckgn-pris2"}],[127795318,{"idx":118,"name":"palcab-lowres-background-crater-01","tpage_name":"lfaccity-tfrag"}],[153944097,{"idx":33,"name":"king-wraps","tpage_name":"ldmpckgn-pris2"}],[127795317,{"idx":117,"name":"palcab-lowres-background-desert-to-shore","tpage_name":"lfaccity-tfrag"}],[153944096,{"idx":32,"name":"king-wrap","tpage_name":"ldmpckgn-pris2"}],[127795316,{"idx":116,"name":"palcab-lowres-background-hilltops-01","tpage_name":"lfaccity-tfrag"}],[153944095,{"idx":31,"name":"king-vestback","tpage_name":"ldmpckgn-pris2"}],[127795315,{"idx":115,"name":"palcab-lowres-background-mounatin-window","tpage_name":"lfaccity-tfrag"}],[153944094,{"idx":30,"name":"king-vest","tpage_name":"ldmpckgn-pris2"}],[127795314,{"idx":114,"name":"palcab-lowres-background-shoreline-01","tpage_name":"lfaccity-tfrag"}],[153944093,{"idx":29,"name":"king-thinstrap","tpage_name":"ldmpckgn-pris2"}],[127795313,{"idx":113,"name":"palcab-swingp-trim","tpage_name":"lfaccity-tfrag"}],[153944092,{"idx":28,"name":"king-teeth","tpage_name":"ldmpckgn-pris2"}],[127795312,{"idx":112,"name":"tcab-blue-ring-01","tpage_name":"lfaccity-tfrag"}],[153944091,{"idx":27,"name":"king-skirt-b","tpage_name":"ldmpckgn-pris2"}],[127795311,{"idx":111,"name":"city-lowres-mhcity-tower-01","tpage_name":"lfaccity-tfrag"}],[153944090,{"idx":26,"name":"king-skirt","tpage_name":"ldmpckgn-pris2"}],[127795310,{"idx":110,"name":"city-lowres-mhcity-tower-02","tpage_name":"lfaccity-tfrag"}],[153944089,{"idx":25,"name":"king-shoebottom","tpage_name":"ldmpckgn-pris2"}],[127795309,{"idx":109,"name":"ctywide-ox-met-01","tpage_name":"lfaccity-tfrag"}],[153944088,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"ldmpckgn-pris2"}],[127795308,{"idx":108,"name":"t-palshaft-pil-01","tpage_name":"lfaccity-tfrag"}],[153944086,{"idx":22,"name":"king-precursermetal-trim","tpage_name":"ldmpckgn-pris2"}],[127795306,{"idx":106,"name":"tcab-beam01-lores","tpage_name":"lfaccity-tfrag"}],[153944085,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"ldmpckgn-pris2"}],[150208545,{"idx":33,"name":"klever-widebrownstrap","tpage_name":"lsigklv-pris"}],[127795305,{"idx":105,"name":"t-palshaft-r-strp-plate01","tpage_name":"lfaccity-tfrag"}],[153944084,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"ldmpckgn-pris2"}],[151453724,{"idx":28,"name":"torn-vest","tpage_name":"ltnfxhip-pris2"}],[150208544,{"idx":32,"name":"klever-undershirt","tpage_name":"lsigklv-pris"}],[127795304,{"idx":104,"name":"city-lowres-mhcity-ground-01","tpage_name":"lfaccity-tfrag"}],[153944083,{"idx":19,"name":"king-lgblackstrap","tpage_name":"ldmpckgn-pris2"}],[151453723,{"idx":27,"name":"torn-teeth-01","tpage_name":"ltnfxhip-pris2"}],[150208543,{"idx":31,"name":"klever-thighs","tpage_name":"lsigklv-pris"}],[127795303,{"idx":103,"name":"palcab-lowres-background-strip","tpage_name":"lfaccity-tfrag"}],[153944082,{"idx":18,"name":"king-leg","tpage_name":"ldmpckgn-pris2"}],[151453722,{"idx":26,"name":"torn-shoe-02","tpage_name":"ltnfxhip-pris2"}],[150208542,{"idx":30,"name":"klever-skirtlight","tpage_name":"lsigklv-pris"}],[127795302,{"idx":102,"name":"t-palshaft-panl-01","tpage_name":"lfaccity-tfrag"}],[153944081,{"idx":17,"name":"king-iris","tpage_name":"ldmpckgn-pris2"}],[151453721,{"idx":25,"name":"torn-shoe","tpage_name":"ltnfxhip-pris2"}],[150208541,{"idx":29,"name":"klever-skirtdark","tpage_name":"lsigklv-pris"}],[127795301,{"idx":101,"name":"citywide-consite-steel","tpage_name":"lfaccity-tfrag"}],[153944080,{"idx":16,"name":"king-horn","tpage_name":"ldmpckgn-pris2"}],[151453720,{"idx":24,"name":"torn-scarf","tpage_name":"ltnfxhip-pris2"}],[150208540,{"idx":28,"name":"klever-shoebottom","tpage_name":"lsigklv-pris"}],[127795300,{"idx":100,"name":"palace-break-brokenwall","tpage_name":"lfaccity-tfrag"}],[153944079,{"idx":15,"name":"king-hand","tpage_name":"ldmpckgn-pris2"}],[151453719,{"idx":23,"name":"torn-pipe","tpage_name":"ltnfxhip-pris2"}],[150208539,{"idx":27,"name":"klever-shoe","tpage_name":"lsigklv-pris"}],[127795299,{"idx":99,"name":"palcab-lowres-stadium-grass","tpage_name":"lfaccity-tfrag"}],[153944078,{"idx":14,"name":"king-hair","tpage_name":"ldmpckgn-pris2"}],[151453718,{"idx":22,"name":"torn-mouth","tpage_name":"ltnfxhip-pris2"}],[157679618,{"idx":2,"name":"hud-target-reticle","tpage_name":"desbattl-minimap"}],[150208538,{"idx":26,"name":"klever-mustache","tpage_name":"lsigklv-pris"}],[127795298,{"idx":98,"name":"palcab-wall-lores","tpage_name":"lfaccity-tfrag"}],[153944077,{"idx":13,"name":"king-greenmetalplain","tpage_name":"ldmpckgn-pris2"}],[151453717,{"idx":21,"name":"torn-metal2","tpage_name":"ltnfxhip-pris2"}],[157679617,{"idx":1,"name":"hud-des-beast","tpage_name":"desbattl-minimap"}],[150208537,{"idx":25,"name":"klever-horn","tpage_name":"lsigklv-pris"}],[127795297,{"idx":97,"name":"ctyp-metal-01","tpage_name":"lfaccity-tfrag"}],[61669381,{"idx":5,"name":"fora-shrub-pebbles","tpage_name":"foresta-vis-shrub"}],[151453716,{"idx":20,"name":"torn-legshield","tpage_name":"ltnfxhip-pris2"}],[153944076,{"idx":12,"name":"king-greenmetal","tpage_name":"ldmpckgn-pris2"}],[157679616,{"idx":0,"name":"wascity-turret-hud-big-arrow-01","tpage_name":"desbattl-minimap"}],[150208536,{"idx":24,"name":"klever-handwrap","tpage_name":"lsigklv-pris"}],[146472996,{"idx":36,"name":"facc-markings-06","tpage_name":"factoryc-vis-shrub"}],[127795296,{"idx":96,"name":"tcab-plat-edg-01-lores","tpage_name":"lfaccity-tfrag"}],[151453715,{"idx":19,"name":"torn-handle-01","tpage_name":"ltnfxhip-pris2"}],[153944075,{"idx":11,"name":"king-finger","tpage_name":"ldmpckgn-pris2"}],[150208535,{"idx":23,"name":"klever-hand","tpage_name":"lsigklv-pris"}],[146472995,{"idx":35,"name":"facc-markings-03","tpage_name":"factoryc-vis-shrub"}],[127795295,{"idx":95,"name":"tcab-beam01","tpage_name":"lfaccity-tfrag"}],[61669379,{"idx":3,"name":"fora-shrub-grass","tpage_name":"foresta-vis-shrub"}],[151453714,{"idx":18,"name":"torn-hair-02","tpage_name":"ltnfxhip-pris2"}],[150208534,{"idx":22,"name":"klever-hair","tpage_name":"lsigklv-pris"}],[153944074,{"idx":10,"name":"king-face-01","tpage_name":"ldmpckgn-pris2"}],[146472994,{"idx":34,"name":"facc-markings-04","tpage_name":"factoryc-vis-shrub"}],[127795294,{"idx":94,"name":"palcab-lowres-background-desert-01","tpage_name":"lfaccity-tfrag"}],[151453711,{"idx":15,"name":"torn-gunbarrel","tpage_name":"ltnfxhip-pris2"}],[153944071,{"idx":7,"name":"king-clip-02","tpage_name":"ldmpckgn-pris2"}],[150208531,{"idx":19,"name":"klever-gunmetal-03","tpage_name":"lsigklv-pris"}],[146472991,{"idx":31,"name":"facc-markings-02","tpage_name":"factoryc-vis-shrub"}],[127795291,{"idx":91,"name":"palcab-lowres-background-trees2","tpage_name":"lfaccity-tfrag"}],[151453710,{"idx":14,"name":"torn-footleather","tpage_name":"ltnfxhip-pris2"}],[153944070,{"idx":6,"name":"king-chest","tpage_name":"ldmpckgn-pris2"}],[150208530,{"idx":18,"name":"klever-gunmetal-02","tpage_name":"lsigklv-pris"}],[146472990,{"idx":30,"name":"facb-move-plat-plate-02","tpage_name":"factoryc-vis-shrub"}],[127795290,{"idx":90,"name":"palcab-lowres-background-trees-edge","tpage_name":"lfaccity-tfrag"}],[151453709,{"idx":13,"name":"torn-finger","tpage_name":"ltnfxhip-pris2"}],[153944069,{"idx":5,"name":"king-bolt","tpage_name":"ldmpckgn-pris2"}],[150208529,{"idx":17,"name":"klever-gunmetal-01","tpage_name":"lsigklv-pris"}],[146472989,{"idx":29,"name":"facb-move-plat-plate-01","tpage_name":"factoryc-vis-shrub"}],[127795289,{"idx":89,"name":"palcab-swingp-base-lores","tpage_name":"lfaccity-tfrag"}],[151453708,{"idx":12,"name":"torn-face-right","tpage_name":"ltnfxhip-pris2"}],[153944068,{"idx":4,"name":"king-bluemetal","tpage_name":"ldmpckgn-pris2"}],[150208528,{"idx":16,"name":"klever-fingertop","tpage_name":"lsigklv-pris"}],[127795288,{"idx":88,"name":"city-lowres-mhcity-wall-03","tpage_name":"lfaccity-tfrag"}],[151453707,{"idx":11,"name":"torn-face","tpage_name":"ltnfxhip-pris2"}],[153944067,{"idx":3,"name":"king-blackskirt2","tpage_name":"ldmpckgn-pris2"}],[150208527,{"idx":15,"name":"klever-fingerbottom","tpage_name":"lsigklv-pris"}],[127795287,{"idx":87,"name":"common-black","tpage_name":"lfaccity-tfrag"}],[151453706,{"idx":10,"name":"torn-eyelid","tpage_name":"ltnfxhip-pris2"}],[153944066,{"idx":2,"name":"king-arm","tpage_name":"ldmpckgn-pris2"}],[150208526,{"idx":14,"name":"klever-face-01scars","tpage_name":"lsigklv-pris"}],[127795286,{"idx":86,"name":"city-lowres-mhcity-wall-05","tpage_name":"lfaccity-tfrag"}],[151453705,{"idx":9,"name":"torn-eye","tpage_name":"ltnfxhip-pris2"}],[153944065,{"idx":1,"name":"environment-oldmetal","tpage_name":"ldmpckgn-pris2"}],[150208525,{"idx":13,"name":"klever-face-01","tpage_name":"lsigklv-pris"}],[146472985,{"idx":25,"name":"facc-floor-grill-01","tpage_name":"factoryc-vis-shrub"}],[127795285,{"idx":85,"name":"city-lowres-mhcity-wall-06","tpage_name":"lfaccity-tfrag"}],[151453704,{"idx":8,"name":"torn-ear","tpage_name":"ltnfxhip-pris2"}],[153944064,{"idx":0,"name":"bam-eyelight","tpage_name":"ldmpckgn-pris2"}],[150208524,{"idx":12,"name":"klever-eyelid","tpage_name":"lsigklv-pris"}],[146472984,{"idx":24,"name":"facc-bolt-01","tpage_name":"factoryc-vis-shrub"}],[127795284,{"idx":84,"name":"palcab-lowres-background-mountains-02","tpage_name":"lfaccity-tfrag"}],[151453703,{"idx":7,"name":"torn-blademetal","tpage_name":"ltnfxhip-pris2"}],[152698883,{"idx":3,"name":"tpl-symbl-yellow-01","tpage_name":"templex-vis-pris"}],[150208523,{"idx":11,"name":"klever-eye","tpage_name":"lsigklv-pris"}],[146472983,{"idx":23,"name":"facc-bolt-02","tpage_name":"factoryc-vis-shrub"}],[127795283,{"idx":83,"name":"city-lowres-mhcity-detower-02","tpage_name":"lfaccity-tfrag"}],[151453702,{"idx":6,"name":"torn-belt2","tpage_name":"ltnfxhip-pris2"}],[152698882,{"idx":2,"name":"temple_sandstone_trim02","tpage_name":"templex-vis-pris"}],[150208522,{"idx":10,"name":"klever-earcup","tpage_name":"lsigklv-pris"}],[146472982,{"idx":22,"name":"fac-rotofan-rim-02","tpage_name":"factoryc-vis-shrub"}],[127795282,{"idx":82,"name":"city-lowres-mhcity-detower-01","tpage_name":"lfaccity-tfrag"}],[151453701,{"idx":5,"name":"torn-belt","tpage_name":"ltnfxhip-pris2"}],[152698881,{"idx":1,"name":"temple_sandstone_scale_01","tpage_name":"templex-vis-pris"}],[150208521,{"idx":9,"name":"klever-clips","tpage_name":"lsigklv-pris"}],[146472981,{"idx":21,"name":"fac-rotofan-blade-01","tpage_name":"factoryc-vis-shrub"}],[127795281,{"idx":81,"name":"city-lowres-mhcity-wall-01","tpage_name":"lfaccity-tfrag"}],[151453700,{"idx":4,"name":"torn-armor","tpage_name":"ltnfxhip-pris2"}],[152698880,{"idx":0,"name":"temple_sandstone_out_01","tpage_name":"templex-vis-pris"}],[150208520,{"idx":8,"name":"klever-chest","tpage_name":"lsigklv-pris"}],[146472980,{"idx":20,"name":"fac-rotofan-blade-02","tpage_name":"factoryc-vis-shrub"}],[127795280,{"idx":80,"name":"city-lowres-mhcity-wall-02","tpage_name":"lfaccity-tfrag"}],[151453699,{"idx":3,"name":"torn-armlft","tpage_name":"ltnfxhip-pris2"}],[150208519,{"idx":7,"name":"klever-brownstrap","tpage_name":"lsigklv-pris"}],[146472979,{"idx":19,"name":"fac-rotofan-cap-01","tpage_name":"factoryc-vis-shrub"}],[127795279,{"idx":79,"name":"citywide-hangmetal","tpage_name":"lfaccity-tfrag"}],[151453698,{"idx":2,"name":"charHOLD","tpage_name":"ltnfxhip-pris2"}],[150208518,{"idx":6,"name":"klever-bolt","tpage_name":"lsigklv-pris"}],[146472978,{"idx":18,"name":"fac-rotofan-cap-02","tpage_name":"factoryc-vis-shrub"}],[127795278,{"idx":78,"name":"citywide-palace-01","tpage_name":"lfaccity-tfrag"}],[151453697,{"idx":1,"name":"bam-hairhilite","tpage_name":"ltnfxhip-pris2"}],[150208517,{"idx":5,"name":"klever-blackstrap","tpage_name":"lsigklv-pris"}],[146472977,{"idx":17,"name":"fac-rotofan-rim-01","tpage_name":"factoryc-vis-shrub"}],[127795277,{"idx":77,"name":"palace-break-girder01","tpage_name":"lfaccity-tfrag"}],[151453696,{"idx":0,"name":"bam-eyelight","tpage_name":"ltnfxhip-pris2"}],[150208516,{"idx":4,"name":"klever-armor-02","tpage_name":"lsigklv-pris"}],[146472976,{"idx":16,"name":"robopod-rim-02","tpage_name":"factoryc-vis-shrub"}],[127795276,{"idx":76,"name":"t-palshaft-roof-01","tpage_name":"lfaccity-tfrag"}],[150208515,{"idx":3,"name":"klever-armor-01","tpage_name":"lsigklv-pris"}],[146472975,{"idx":15,"name":"robopod-panel-02","tpage_name":"factoryc-vis-shrub"}],[127795275,{"idx":75,"name":"palcab-lowres-farm-wall-top","tpage_name":"lfaccity-tfrag"}],[150208514,{"idx":2,"name":"klever-arm","tpage_name":"lsigklv-pris"}],[146472974,{"idx":14,"name":"robopod-door-01","tpage_name":"factoryc-vis-shrub"}],[127795274,{"idx":74,"name":"palcab-lowres-farm-wall","tpage_name":"lfaccity-tfrag"}],[122290331,{"idx":155,"name":"jakchires-lightbrownspat","tpage_name":"factoryb-vis-pris"}],[150208513,{"idx":1,"name":"bam-hairhilite","tpage_name":"lsigklv-pris"}],[146472973,{"idx":13,"name":"robopod-panel-01","tpage_name":"factoryc-vis-shrub"}],[127795273,{"idx":73,"name":"t-citywide-wall-tile-01","tpage_name":"lfaccity-tfrag"}],[150208512,{"idx":0,"name":"bam-eyelight","tpage_name":"lsigklv-pris"}],[146472972,{"idx":12,"name":"common-black","tpage_name":"factoryc-vis-shrub"}],[127795272,{"idx":72,"name":"city-lowres-damaged-01","tpage_name":"lfaccity-tfrag"}],[146472971,{"idx":11,"name":"robopod-door-02","tpage_name":"factoryc-vis-shrub"}],[140247071,{"idx":31,"name":"sew-elevator-lod0top","tpage_name":"minee-tfrag"}],[127795271,{"idx":71,"name":"city-lowres-newslums-stripe-01","tpage_name":"lfaccity-tfrag"}],[146472970,{"idx":10,"name":"robopod-rim-01","tpage_name":"factoryc-vis-shrub"}],[140247070,{"idx":30,"name":"sewer-screw-02","tpage_name":"minee-tfrag"}],[127795270,{"idx":70,"name":"city-lowres-newslums-bigwindows-02","tpage_name":"lfaccity-tfrag"}],[146472969,{"idx":9,"name":"fac-firetorch-fire-01","tpage_name":"factoryc-vis-shrub"}],[140247069,{"idx":29,"name":"sewer-plate-05","tpage_name":"minee-tfrag"}],[127795269,{"idx":69,"name":"city-lowres-newslums-stripe-02","tpage_name":"lfaccity-tfrag"}],[146472968,{"idx":8,"name":"fac-firetorch-01","tpage_name":"factoryc-vis-shrub"}],[140247068,{"idx":28,"name":"sewer-pipe-01","tpage_name":"minee-tfrag"}],[127795268,{"idx":68,"name":"t-strip-lo-palsup-danger2","tpage_name":"lfaccity-tfrag"}],[146472967,{"idx":7,"name":"fac-break-floor-edge-02","tpage_name":"factoryc-vis-shrub"}],[140247067,{"idx":27,"name":"sewer-grate-01","tpage_name":"minee-tfrag"}],[127795267,{"idx":67,"name":"t-strip-lo-palsup-danger1","tpage_name":"lfaccity-tfrag"}],[146472966,{"idx":6,"name":"facc-beam-02","tpage_name":"factoryc-vis-shrub"}],[127795266,{"idx":66,"name":"t-strip-lo-palsup-panel-5","tpage_name":"lfaccity-tfrag"}],[146472965,{"idx":5,"name":"fac-break-floor-edge-01","tpage_name":"factoryc-vis-shrub"}],[127795265,{"idx":65,"name":"t-strip-lo-palsup-panel-4","tpage_name":"lfaccity-tfrag"}],[146472964,{"idx":4,"name":"fac-break-floor-bolt","tpage_name":"factoryc-vis-shrub"}],[127795264,{"idx":64,"name":"t-strip-lo-palsup-panel-3","tpage_name":"lfaccity-tfrag"}],[146472963,{"idx":3,"name":"fac-fence-rim-03","tpage_name":"factoryc-vis-shrub"}],[140247063,{"idx":23,"name":"sewer-concrete-edge-02","tpage_name":"minee-tfrag"}],[127795263,{"idx":63,"name":"t-strip-lo-palsup-panel-2","tpage_name":"lfaccity-tfrag"}],[146472962,{"idx":2,"name":"fac-fence-rim-02","tpage_name":"factoryc-vis-shrub"}],[140247062,{"idx":22,"name":"sewer-metal-floor-02","tpage_name":"minee-tfrag"}],[127795262,{"idx":62,"name":"t-strip-lo-palsup-panel-1","tpage_name":"lfaccity-tfrag"}],[146472960,{"idx":0,"name":"fac-fence-rim-grill-01","tpage_name":"factoryc-vis-shrub"}],[140247060,{"idx":20,"name":"sewer-metal-floor-01","tpage_name":"minee-tfrag"}],[127795260,{"idx":60,"name":"palcab-lowres-background-mount-build-03","tpage_name":"lfaccity-tfrag"}],[140247059,{"idx":19,"name":"sewer-metal-block-04","tpage_name":"minee-tfrag"}],[127795259,{"idx":59,"name":"palcab-lowres-background-mount-build-02","tpage_name":"lfaccity-tfrag"}],[140247058,{"idx":18,"name":"sewer-metal-01","tpage_name":"minee-tfrag"}],[127795258,{"idx":58,"name":"palcab-lowres-background-mount-build-01","tpage_name":"lfaccity-tfrag"}],[140247057,{"idx":17,"name":"sewer-metal-block-06","tpage_name":"minee-tfrag"}],[127795257,{"idx":57,"name":"t-palshaft-plate01","tpage_name":"lfaccity-tfrag"}],[140247056,{"idx":16,"name":"sewer-pipe-rim-08","tpage_name":"minee-tfrag"}],[127795256,{"idx":56,"name":"t-citywide-met-wall-02","tpage_name":"lfaccity-tfrag"}],[140247055,{"idx":15,"name":"sewer-small-light-01","tpage_name":"minee-tfrag"}],[127795255,{"idx":55,"name":"t-citywide-met-pill-01","tpage_name":"lfaccity-tfrag"}],[140247054,{"idx":14,"name":"sewer-lip-01-hitweak","tpage_name":"minee-tfrag"}],[143982594,{"idx":2,"name":"map-ctyporta","tpage_name":"mhcitya-minimap"}],[127795254,{"idx":54,"name":"t-citywide-met-strp02","tpage_name":"lfaccity-tfrag"}],[140247053,{"idx":13,"name":"sewer-pipe-rim-05b","tpage_name":"minee-tfrag"}],[143982593,{"idx":1,"name":"map-ctyfarmb","tpage_name":"mhcitya-minimap"}],[127795253,{"idx":53,"name":"t-citywide-red-met-01","tpage_name":"lfaccity-tfrag"}],[140247052,{"idx":12,"name":"sewer-metal-block-05","tpage_name":"minee-tfrag"}],[127795252,{"idx":52,"name":"t-citywide-met-strp01","tpage_name":"lfaccity-tfrag"}],[140247049,{"idx":9,"name":"sewer-concrete-block-02","tpage_name":"minee-tfrag"}],[127795249,{"idx":49,"name":"palcab-lorez-metal01","tpage_name":"lfaccity-tfrag"}],[140247048,{"idx":8,"name":"sewer-brick-block-01","tpage_name":"minee-tfrag"}],[127795248,{"idx":48,"name":"palcab-lorez-metal03","tpage_name":"lfaccity-tfrag"}],[140247047,{"idx":7,"name":"sewer-block-01","tpage_name":"minee-tfrag"}],[127795247,{"idx":47,"name":"city-lowres-ctygen-stripe-02","tpage_name":"lfaccity-tfrag"}],[140247046,{"idx":6,"name":"sewer-metal-block-01","tpage_name":"minee-tfrag"}],[127795246,{"idx":46,"name":"city-lowres-ctygen-roof-01","tpage_name":"lfaccity-tfrag"}],[140247045,{"idx":5,"name":"sewer-big-brace-01","tpage_name":"minee-tfrag"}],[127795245,{"idx":45,"name":"city-lowres-ctygen-build-04","tpage_name":"lfaccity-tfrag"}],[140247044,{"idx":4,"name":"sewer-pipe-rim-01","tpage_name":"minee-tfrag"}],[127795244,{"idx":44,"name":"city-lowres-ctygen-build-05","tpage_name":"lfaccity-tfrag"}],[140247043,{"idx":3,"name":"sewer-plate-01","tpage_name":"minee-tfrag"}],[127795243,{"idx":43,"name":"city-lowres-ctygen-build-03","tpage_name":"lfaccity-tfrag"}],[140247042,{"idx":2,"name":"sewer-brick-block-06","tpage_name":"minee-tfrag"}],[127795242,{"idx":42,"name":"city-lowres-ctygen-side-01","tpage_name":"lfaccity-tfrag"}],[140247041,{"idx":1,"name":"sewer-brick-block-11","tpage_name":"minee-tfrag"}],[127795241,{"idx":41,"name":"city-lowres-ctygen-build-02","tpage_name":"lfaccity-tfrag"}],[140247040,{"idx":0,"name":"sewer-brick-block-10","tpage_name":"minee-tfrag"}],[127795240,{"idx":40,"name":"palcab-lowres-mark-highway","tpage_name":"lfaccity-tfrag"}],[127795239,{"idx":39,"name":"city-lowres-ctygen-build-01","tpage_name":"lfaccity-tfrag"}],[127795238,{"idx":38,"name":"city-lowres-ctygen-roof-02","tpage_name":"lfaccity-tfrag"}],[127795207,{"idx":7,"name":"palcab-lowres-ctyslum-ground","tpage_name":"lfaccity-tfrag"}],[127795206,{"idx":6,"name":"palcab-lowres-ctywide-wall-02","tpage_name":"lfaccity-tfrag"}],[127795205,{"idx":5,"name":"palcab-lowres-background-rocksnow","tpage_name":"lfaccity-tfrag"}],[42336264,{"idx":8,"name":"flying-gull-06","tpage_name":"nstb-sprite"}],[129040384,{"idx":0,"name":"keira-mask","tpage_name":"freecast-water"}],[127795204,{"idx":4,"name":"palcab-lowres-background-rocksnow2","tpage_name":"lfaccity-tfrag"}],[127795203,{"idx":3,"name":"palcab-lowres-background-crater-bottom-enviro","tpage_name":"lfaccity-tfrag"}],[127795202,{"idx":2,"name":"palcab-lowres-ctywide-wall-01","tpage_name":"lfaccity-tfrag"}],[127795201,{"idx":1,"name":"strip-metal-02-lores","tpage_name":"lfaccity-tfrag"}],[127795200,{"idx":0,"name":"palcab-lowres-background-hills-01","tpage_name":"lfaccity-tfrag"}],[127008790,{"idx":22,"name":"warpgate-post-01","tpage_name":"volcanox-tfrag"}],[127008787,{"idx":19,"name":"vol-bark-burnt","tpage_name":"volcanox-tfrag"}],[127008786,{"idx":18,"name":"temple_sandstone_trim02","tpage_name":"volcanox-tfrag"}],[127008785,{"idx":17,"name":"temple_sandstone_plat01","tpage_name":"volcanox-tfrag"}],[127008784,{"idx":16,"name":"temple_sandstone_taper01","tpage_name":"volcanox-tfrag"}],[126877774,{"idx":78,"name":"lfacrm-gar-dumpster-03","tpage_name":"lfacrm1-tfrag"}],[126877773,{"idx":77,"name":"lfacrm-gar-dumpster-02","tpage_name":"lfacrm1-tfrag"}],[126877772,{"idx":76,"name":"lfacrm-gar-dumpster-01","tpage_name":"lfacrm1-tfrag"}],[126877771,{"idx":75,"name":"lfacrm-ind-wall-base-07","tpage_name":"lfacrm1-tfrag"}],[126877770,{"idx":74,"name":"lfacrm-plate-05-bridge","tpage_name":"lfacrm1-tfrag"}],[126877769,{"idx":73,"name":"lfacrm-wall-circuit","tpage_name":"lfacrm1-tfrag"}],[126877768,{"idx":72,"name":"lfacrm-monitor-rim-02","tpage_name":"lfacrm1-tfrag"}],[126877767,{"idx":71,"name":"lfacrm-red-light-01","tpage_name":"lfacrm1-tfrag"}],[126877766,{"idx":70,"name":"lfacrm-floor-01","tpage_name":"lfacrm1-tfrag"}],[126877765,{"idx":69,"name":"lfacrm-chrome-pipe-01","tpage_name":"lfacrm1-tfrag"}],[126877764,{"idx":68,"name":"lfacrm-brace-pipe-01","tpage_name":"lfacrm1-tfrag"}],[126877763,{"idx":67,"name":"lfacrm-blue-light-01","tpage_name":"lfacrm1-tfrag"}],[126877762,{"idx":66,"name":"lfacrm-wall-01","tpage_name":"lfacrm1-tfrag"}],[126877761,{"idx":65,"name":"lfacrm-yellowstripe","tpage_name":"lfacrm1-tfrag"}],[126877760,{"idx":64,"name":"lfacrm-grill-02","tpage_name":"lfacrm1-tfrag"}],[126877759,{"idx":63,"name":"lfacrm-smallpipe","tpage_name":"lfacrm1-tfrag"}],[126877758,{"idx":62,"name":"lfacrm-monitor-rim-03","tpage_name":"lfacrm1-tfrag"}],[126877757,{"idx":61,"name":"lfacrm-roof-03","tpage_name":"lfacrm1-tfrag"}],[126877756,{"idx":60,"name":"lfacrm-grill-01","tpage_name":"lfacrm1-tfrag"}],[126877755,{"idx":59,"name":"lfacrm-rivet-02","tpage_name":"lfacrm1-tfrag"}],[126877754,{"idx":58,"name":"lfacrml-beam02","tpage_name":"lfacrm1-tfrag"}],[126877753,{"idx":57,"name":"lfacrm-trim-02","tpage_name":"lfacrm1-tfrag"}],[126877752,{"idx":56,"name":"lfacrm-plate-06","tpage_name":"lfacrm1-tfrag"}],[126877751,{"idx":55,"name":"lfacrm-monitor-rim-01","tpage_name":"lfacrm1-tfrag"}],[126877750,{"idx":54,"name":"lfacrm-blue-light-02","tpage_name":"lfacrm1-tfrag"}],[126877749,{"idx":53,"name":"lfacrm-wall-02","tpage_name":"lfacrm1-tfrag"}],[126877748,{"idx":52,"name":"lfacrm-panl02","tpage_name":"lfacrm1-tfrag"}],[126877747,{"idx":51,"name":"lfacrm-rivet-01","tpage_name":"lfacrm1-tfrag"}],[126877746,{"idx":50,"name":"lfacrm-monitor-rim-04","tpage_name":"lfacrm1-tfrag"}],[126877745,{"idx":49,"name":"lfacrml-beam01","tpage_name":"lfacrm1-tfrag"}],[126877742,{"idx":46,"name":"lfacrm-starpanel-01","tpage_name":"lfacrm1-tfrag"}],[126877704,{"idx":8,"name":"cityslumc-pinkish-purple","tpage_name":"lfacrm1-tfrag"}],[126877703,{"idx":7,"name":"ctyslumc-wall-trim","tpage_name":"lfacrm1-tfrag"}],[126812164,{"idx":4,"name":"holograph-env-rim-dest","tpage_name":"deshover-warp"}],[143589390,{"idx":14,"name":"rail-light-blue","tpage_name":"combc-tfrag"}],[126156870,{"idx":70,"name":"sewer-grill-02","tpage_name":"sewo-vis-tfrag"}],[143589389,{"idx":13,"name":"rail-base-dark-01","tpage_name":"combc-tfrag"}],[126156869,{"idx":69,"name":"sewer-metal-block-05","tpage_name":"sewo-vis-tfrag"}],[143589388,{"idx":12,"name":"rail-base-mid-01","tpage_name":"combc-tfrag"}],[126156868,{"idx":68,"name":"sew-metal-floor-01","tpage_name":"sewo-vis-tfrag"}],[144834567,{"idx":7,"name":"mina-idol-02","tpage_name":"combn-tfrag"}],[143589387,{"idx":11,"name":"rail-edge-01","tpage_name":"combc-tfrag"}],[126156867,{"idx":67,"name":"sewer-block-02","tpage_name":"sewo-vis-tfrag"}],[144834566,{"idx":6,"name":"minb-stone23","tpage_name":"combn-tfrag"}],[143589386,{"idx":10,"name":"rail-light-blue-small","tpage_name":"combc-tfrag"}],[126156866,{"idx":66,"name":"sewer-grate-01","tpage_name":"sewo-vis-tfrag"}],[144834565,{"idx":5,"name":"minb-stone22","tpage_name":"combn-tfrag"}],[143589385,{"idx":9,"name":"rail-trim-01","tpage_name":"combc-tfrag"}],[126156865,{"idx":65,"name":"sewer-metal-floor-01","tpage_name":"sewo-vis-tfrag"}],[144834564,{"idx":4,"name":"minb-stone15","tpage_name":"combn-tfrag"}],[143589384,{"idx":8,"name":"rail-env-car-01","tpage_name":"combc-tfrag"}],[126156864,{"idx":64,"name":"sewer-big-brace-02","tpage_name":"sewo-vis-tfrag"}],[144834563,{"idx":3,"name":"minb-stone11","tpage_name":"combn-tfrag"}],[126156863,{"idx":63,"name":"sewer-big-brace-01","tpage_name":"sewo-vis-tfrag"}],[143589382,{"idx":6,"name":"rail-patch-01","tpage_name":"combc-tfrag"}],[144834562,{"idx":2,"name":"minb-stone20","tpage_name":"combn-tfrag"}],[126156862,{"idx":62,"name":"sewer-brick-roof-04","tpage_name":"sewo-vis-tfrag"}],[126156855,{"idx":55,"name":"strip-black","tpage_name":"sewo-vis-tfrag"}],[126156854,{"idx":54,"name":"sewer-plate-03","tpage_name":"sewo-vis-tfrag"}],[126156853,{"idx":53,"name":"sewer-plate-02","tpage_name":"sewo-vis-tfrag"}],[126156852,{"idx":52,"name":"sewer-metal-block-01","tpage_name":"sewo-vis-tfrag"}],[126156851,{"idx":51,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewo-vis-tfrag"}],[126156850,{"idx":50,"name":"sewer-concrete-edge-01","tpage_name":"sewo-vis-tfrag"}],[126156849,{"idx":49,"name":"sewer-pipe-rim-03","tpage_name":"sewo-vis-tfrag"}],[126156848,{"idx":48,"name":"sewer-small-light-01","tpage_name":"sewo-vis-tfrag"}],[126156847,{"idx":47,"name":"sewer-metal-block-02","tpage_name":"sewo-vis-tfrag"}],[126156846,{"idx":46,"name":"sewer-plate-01","tpage_name":"sewo-vis-tfrag"}],[126156844,{"idx":44,"name":"sewer-big-brace-trim-02","tpage_name":"sewo-vis-tfrag"}],[126156843,{"idx":43,"name":"sewer-big-brace-trim-01","tpage_name":"sewo-vis-tfrag"}],[126156842,{"idx":42,"name":"sewer-plate-04","tpage_name":"sewo-vis-tfrag"}],[126156841,{"idx":41,"name":"sewer-plate-03-hitweak","tpage_name":"sewo-vis-tfrag"}],[126156840,{"idx":40,"name":"sewer-plate-06","tpage_name":"sewo-vis-tfrag"}],[131137559,{"idx":23,"name":"mhcity-bubble","tpage_name":"lctydest-pris"}],[126156839,{"idx":39,"name":"sewer-pipe-rim-07","tpage_name":"sewo-vis-tfrag"}],[131137558,{"idx":22,"name":"mhcity-de-tower-egg-inside","tpage_name":"lctydest-pris"}],[126156838,{"idx":38,"name":"sewer-metal-edge-01","tpage_name":"sewo-vis-tfrag"}],[126156837,{"idx":37,"name":"sewer-flat-pipe-01","tpage_name":"sewo-vis-tfrag"}],[122290341,{"idx":165,"name":"facb-big-metal-panl02","tpage_name":"factoryb-vis-pris"}],[164626461,{"idx":29,"name":"jakc-wraps","tpage_name":"railcst-pris"}],[122290340,{"idx":164,"name":"facb_dec-metal-02","tpage_name":"factoryb-vis-pris"}],[164626460,{"idx":28,"name":"jakc-waistband2","tpage_name":"railcst-pris"}],[122290339,{"idx":163,"name":"facb_blue-metal-02","tpage_name":"factoryb-vis-pris"}],[164626459,{"idx":27,"name":"jakc-skirt","tpage_name":"railcst-pris"}],[122290338,{"idx":162,"name":"fac-target-redglow-01","tpage_name":"factoryb-vis-pris"}],[164626458,{"idx":26,"name":"jakc-scarfhanging","tpage_name":"railcst-pris"}],[122290337,{"idx":161,"name":"jakchires-teeth","tpage_name":"factoryb-vis-pris"}],[164626457,{"idx":25,"name":"jakc-scarf","tpage_name":"railcst-pris"}],[172097536,{"idx":0,"name":"wstd-torchbowl-coal-01","tpage_name":"templec-vis-shrub"}],[122290336,{"idx":160,"name":"jakchires-shoeteop","tpage_name":"factoryb-vis-pris"}],[164626456,{"idx":24,"name":"jakc-lens","tpage_name":"railcst-pris"}],[122290335,{"idx":159,"name":"jakchires-shoemetal","tpage_name":"factoryb-vis-pris"}],[164626455,{"idx":23,"name":"jakc-gogglemetal","tpage_name":"railcst-pris"}],[122290334,{"idx":158,"name":"jakchires-shoebottom","tpage_name":"factoryb-vis-pris"}],[164626454,{"idx":22,"name":"jakc-chestplate-straps","tpage_name":"railcst-pris"}],[122290333,{"idx":157,"name":"jakchires-precarmor-01","tpage_name":"factoryb-vis-pris"}],[164626453,{"idx":21,"name":"jakc-armor","tpage_name":"railcst-pris"}],[122290332,{"idx":156,"name":"jakchires-pants","tpage_name":"factoryb-vis-pris"}],[164626452,{"idx":20,"name":"environment-oldmetal","tpage_name":"railcst-pris"}],[169607170,{"idx":2,"name":"vehicle-wheel-01","tpage_name":"lsnkwhls-pris"}],[122290330,{"idx":154,"name":"jakchires-leatherpouch","tpage_name":"factoryb-vis-pris"}],[164626450,{"idx":18,"name":"daxtertuft","tpage_name":"railcst-pris"}],[169607169,{"idx":1,"name":"vehicle-snake-tread-02","tpage_name":"lsnkwhls-pris"}],[122290329,{"idx":153,"name":"jakchires-jacket","tpage_name":"factoryb-vis-pris"}],[164626449,{"idx":17,"name":"daxterteeth","tpage_name":"railcst-pris"}],[169607168,{"idx":0,"name":"vehicle-snake-tread-01","tpage_name":"lsnkwhls-pris"}],[122290328,{"idx":152,"name":"jakchires-horn","tpage_name":"factoryb-vis-pris"}],[164626448,{"idx":16,"name":"daxternose","tpage_name":"railcst-pris"}],[122290327,{"idx":151,"name":"jakchires-hair","tpage_name":"factoryb-vis-pris"}],[164626447,{"idx":15,"name":"daxterlense","tpage_name":"railcst-pris"}],[122290326,{"idx":150,"name":"jakchires-glovetop","tpage_name":"factoryb-vis-pris"}],[164626446,{"idx":14,"name":"daxterhelmetplain","tpage_name":"railcst-pris"}],[122290325,{"idx":149,"name":"jakchires-facert","tpage_name":"factoryb-vis-pris"}],[164626445,{"idx":13,"name":"daxterheadwidenew","tpage_name":"railcst-pris"}],[122290324,{"idx":148,"name":"jakchires-facelft","tpage_name":"factoryb-vis-pris"}],[164626444,{"idx":12,"name":"daxtergoggles","tpage_name":"railcst-pris"}],[122290323,{"idx":147,"name":"jakchires-eyelid","tpage_name":"factoryb-vis-pris"}],[164626443,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"railcst-pris"}],[122290322,{"idx":146,"name":"jakchires-eyebrow","tpage_name":"factoryb-vis-pris"}],[164626442,{"idx":10,"name":"daxterfoot","tpage_name":"railcst-pris"}],[122290321,{"idx":145,"name":"jakchires-eye","tpage_name":"factoryb-vis-pris"}],[164626441,{"idx":9,"name":"daxterfinger","tpage_name":"railcst-pris"}],[165871620,{"idx":4,"name":"palcab-lowres-ctyslum-wall-03","tpage_name":"ltowcity-alpha"}],[122290320,{"idx":144,"name":"jakchires-clips","tpage_name":"factoryb-vis-pris"}],[164626440,{"idx":8,"name":"daxterear","tpage_name":"railcst-pris"}],[122290319,{"idx":143,"name":"jakchires-chestplate","tpage_name":"factoryb-vis-pris"}],[165871619,{"idx":3,"name":"palcab-lowres-background-trees2","tpage_name":"ltowcity-alpha"}],[164626439,{"idx":7,"name":"daxterbolt","tpage_name":"railcst-pris"}],[165871618,{"idx":2,"name":"palcab-lowres-background-trees-edge","tpage_name":"ltowcity-alpha"}],[122290318,{"idx":142,"name":"jakchires-brwnleather","tpage_name":"factoryb-vis-pris"}],[164626438,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"railcst-pris"}],[165871617,{"idx":1,"name":"palcab-lowres-background-crater-rim","tpage_name":"ltowcity-alpha"}],[164626437,{"idx":5,"name":"daxterarm","tpage_name":"railcst-pris"}],[122290317,{"idx":141,"name":"jakchires-brownstrap","tpage_name":"factoryb-vis-pris"}],[165871616,{"idx":0,"name":"palcab-lowres-background-shoreline-02","tpage_name":"ltowcity-alpha"}],[164626436,{"idx":4,"name":"daxter-orange","tpage_name":"railcst-pris"}],[122290316,{"idx":140,"name":"jakchires-blackstrap","tpage_name":"factoryb-vis-pris"}],[164626435,{"idx":3,"name":"daxter-furhilite","tpage_name":"railcst-pris"}],[122290315,{"idx":139,"name":"jakchires-arm","tpage_name":"factoryb-vis-pris"}],[164626434,{"idx":2,"name":"daxter-eyelid","tpage_name":"railcst-pris"}],[122290314,{"idx":138,"name":"jakc-wristband-a2","tpage_name":"factoryb-vis-pris"}],[164626433,{"idx":1,"name":"bam-hairhilite","tpage_name":"railcst-pris"}],[122290313,{"idx":137,"name":"jakc-wraps","tpage_name":"factoryb-vis-pris"}],[164626432,{"idx":0,"name":"bam-eyelight","tpage_name":"railcst-pris"}],[122290312,{"idx":136,"name":"jakc-waistband2","tpage_name":"factoryb-vis-pris"}],[122290311,{"idx":135,"name":"jakc-skirt","tpage_name":"factoryb-vis-pris"}],[122290310,{"idx":134,"name":"jakc-scarfhanging","tpage_name":"factoryb-vis-pris"}],[122290309,{"idx":133,"name":"jakc-scarf","tpage_name":"factoryb-vis-pris"}],[122290308,{"idx":132,"name":"jakc-lens","tpage_name":"factoryb-vis-pris"}],[122290307,{"idx":131,"name":"jakc-gogglemetal","tpage_name":"factoryb-vis-pris"}],[122290306,{"idx":130,"name":"jakc-chestplate-straps","tpage_name":"factoryb-vis-pris"}],[122290305,{"idx":129,"name":"jakc-armor","tpage_name":"factoryb-vis-pris"}],[122290304,{"idx":128,"name":"environment-oldmetal","tpage_name":"factoryb-vis-pris"}],[122290303,{"idx":127,"name":"daxtertuft","tpage_name":"factoryb-vis-pris"}],[122290302,{"idx":126,"name":"daxterteeth","tpage_name":"factoryb-vis-pris"}],[122290300,{"idx":124,"name":"daxterlense","tpage_name":"factoryb-vis-pris"}],[122290299,{"idx":123,"name":"daxterhelmetplain","tpage_name":"factoryb-vis-pris"}],[122290298,{"idx":122,"name":"daxterheadwidenew","tpage_name":"factoryb-vis-pris"}],[122290297,{"idx":121,"name":"daxtergoggles","tpage_name":"factoryb-vis-pris"}],[154664976,{"idx":16,"name":"hud-target-reticle","tpage_name":"wascityb-minimap"}],[122290296,{"idx":120,"name":"daxterfoot-bottom","tpage_name":"factoryb-vis-pris"}],[122290295,{"idx":119,"name":"daxterfoot","tpage_name":"factoryb-vis-pris"}],[122290294,{"idx":118,"name":"daxterfinger","tpage_name":"factoryb-vis-pris"}],[122290293,{"idx":117,"name":"daxterear","tpage_name":"factoryb-vis-pris"}],[122290292,{"idx":116,"name":"daxterbolt","tpage_name":"factoryb-vis-pris"}],[122290291,{"idx":115,"name":"daxterbodyshort-eix","tpage_name":"factoryb-vis-pris"}],[122290290,{"idx":114,"name":"daxterarm","tpage_name":"factoryb-vis-pris"}],[154664969,{"idx":9,"name":"hud-dmrobot-target-small-01","tpage_name":"wascityb-minimap"}],[122290289,{"idx":113,"name":"daxter-orange","tpage_name":"factoryb-vis-pris"}],[154664968,{"idx":8,"name":"hud-dmrobot-target-03","tpage_name":"wascityb-minimap"}],[122290288,{"idx":112,"name":"daxter-furhilite","tpage_name":"factoryb-vis-pris"}],[154664967,{"idx":7,"name":"wascity-turret-hud-health-04","tpage_name":"wascityb-minimap"}],[122290287,{"idx":111,"name":"daxter-eyelid","tpage_name":"factoryb-vis-pris"}],[154664966,{"idx":6,"name":"wascity-turret-hud-health-03","tpage_name":"wascityb-minimap"}],[122290286,{"idx":110,"name":"bam-hairhilite","tpage_name":"factoryb-vis-pris"}],[154664965,{"idx":5,"name":"wascity-turret-hud-health-02","tpage_name":"wascityb-minimap"}],[122290285,{"idx":109,"name":"bam-eyelight","tpage_name":"factoryb-vis-pris"}],[137232428,{"idx":44,"name":"jakchires-jacket","tpage_name":"citycast-pris"}],[122290268,{"idx":92,"name":"robotank-tread-r-dest","tpage_name":"factoryb-vis-pris"}],[137232427,{"idx":43,"name":"jakchires-horn","tpage_name":"citycast-pris"}],[143458327,{"idx":23,"name":"comb-redmarker","tpage_name":"combb-tfrag"}],[122290267,{"idx":91,"name":"robotank-tread-l-dest","tpage_name":"factoryb-vis-pris"}],[137232426,{"idx":42,"name":"jakchires-hair","tpage_name":"citycast-pris"}],[122290266,{"idx":90,"name":"robotank-tank-rim","tpage_name":"factoryb-vis-pris"}],[137232425,{"idx":41,"name":"jakchires-glovetop","tpage_name":"citycast-pris"}],[143458325,{"idx":21,"name":"rail-pipe-05","tpage_name":"combb-tfrag"}],[122290265,{"idx":89,"name":"robotank-tank-red-cap","tpage_name":"factoryb-vis-pris"}],[137232424,{"idx":40,"name":"jakchires-facert","tpage_name":"citycast-pris"}],[143458324,{"idx":20,"name":"rail-rock-01","tpage_name":"combb-tfrag"}],[122290264,{"idx":88,"name":"robotank-tank-red","tpage_name":"factoryb-vis-pris"}],[143458323,{"idx":19,"name":"rail-gray-metal-01","tpage_name":"combb-tfrag"}],[137232423,{"idx":39,"name":"jakchires-facelft","tpage_name":"citycast-pris"}],[122290263,{"idx":87,"name":"robotank-tank-metal-plain","tpage_name":"factoryb-vis-pris"}],[137232422,{"idx":38,"name":"jakchires-eyelid","tpage_name":"citycast-pris"}],[143458322,{"idx":18,"name":"rail-pipe-03","tpage_name":"combb-tfrag"}],[122290262,{"idx":86,"name":"robotank-tank-lod-top","tpage_name":"factoryb-vis-pris"}],[143458321,{"idx":17,"name":"rail-pipe-01","tpage_name":"combb-tfrag"}],[137232421,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"citycast-pris"}],[122290261,{"idx":85,"name":"robotank-tank-hubcap","tpage_name":"factoryb-vis-pris"}],[143458320,{"idx":16,"name":"rail-cord-01","tpage_name":"combb-tfrag"}],[137232420,{"idx":36,"name":"jakchires-eye","tpage_name":"citycast-pris"}],[122290260,{"idx":84,"name":"robotank-tank-grey","tpage_name":"factoryb-vis-pris"}],[143458319,{"idx":15,"name":"rail-light-blue","tpage_name":"combb-tfrag"}],[137232419,{"idx":35,"name":"jakchires-clips","tpage_name":"citycast-pris"}],[122290259,{"idx":83,"name":"robotank-tank-blackstrip","tpage_name":"factoryb-vis-pris"}],[143458318,{"idx":14,"name":"rail-light-yellow-small","tpage_name":"combb-tfrag"}],[137232418,{"idx":34,"name":"jakchires-chestplate","tpage_name":"citycast-pris"}],[122290258,{"idx":82,"name":"robotank-tank-beige-logo","tpage_name":"factoryb-vis-pris"}],[143458316,{"idx":12,"name":"rail-base-dark-01","tpage_name":"combb-tfrag"}],[122290256,{"idx":80,"name":"robotank-pipe-small-01","tpage_name":"factoryb-vis-pris"}],[137232416,{"idx":32,"name":"jakchires-brownstrap","tpage_name":"citycast-pris"}],[143458314,{"idx":10,"name":"rail-light-blue-small","tpage_name":"combb-tfrag"}],[122290254,{"idx":78,"name":"kgfighter-trim-03","tpage_name":"factoryb-vis-pris"}],[137232414,{"idx":30,"name":"jakchires-arm","tpage_name":"citycast-pris"}],[143458313,{"idx":9,"name":"rail-base-mid-01","tpage_name":"combb-tfrag"}],[137232413,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"citycast-pris"}],[122290253,{"idx":77,"name":"kgfighter-trim-02","tpage_name":"factoryb-vis-pris"}],[137232410,{"idx":26,"name":"jakc-skirt","tpage_name":"citycast-pris"}],[143458310,{"idx":6,"name":"rail-patch-01","tpage_name":"combb-tfrag"}],[122290250,{"idx":74,"name":"kgfighter-lod02-tail","tpage_name":"factoryb-vis-pris"}],[137232409,{"idx":25,"name":"jakc-scarfhanging","tpage_name":"citycast-pris"}],[122290249,{"idx":73,"name":"kgfighter-lod02-side","tpage_name":"factoryb-vis-pris"}],[137232408,{"idx":24,"name":"jakc-scarf","tpage_name":"citycast-pris"}],[122290248,{"idx":72,"name":"kgfighter-lod02-cpit","tpage_name":"factoryb-vis-pris"}],[137232407,{"idx":23,"name":"jakc-lens","tpage_name":"citycast-pris"}],[122290247,{"idx":71,"name":"kgfighter-lens-01","tpage_name":"factoryb-vis-pris"}],[143458306,{"idx":2,"name":"comb-temp-glass","tpage_name":"combb-tfrag"}],[137232406,{"idx":22,"name":"jakc-gogglemetal","tpage_name":"citycast-pris"}],[122290246,{"idx":70,"name":"kgfighter-14","tpage_name":"factoryb-vis-pris"}],[16121861,{"idx":5,"name":"city-farm-black","tpage_name":"ctyfarma-vis-tfrag"}],[17367041,{"idx":1,"name":"map-ctyportb","tpage_name":"ctyport-minimap"}],[143458305,{"idx":1,"name":"comb-temp-dark","tpage_name":"combb-tfrag"}],[137232405,{"idx":21,"name":"jakc-chestplate-straps","tpage_name":"citycast-pris"}],[122290245,{"idx":69,"name":"kgfighter-13","tpage_name":"factoryb-vis-pris"}],[137232404,{"idx":20,"name":"jakc-armor","tpage_name":"citycast-pris"}],[122290244,{"idx":68,"name":"kgfighter-12","tpage_name":"factoryb-vis-pris"}],[137232403,{"idx":19,"name":"environment-oldmetal","tpage_name":"citycast-pris"}],[122290243,{"idx":67,"name":"kgfighter-11","tpage_name":"factoryb-vis-pris"}],[137232402,{"idx":18,"name":"daxtertuft","tpage_name":"citycast-pris"}],[122290242,{"idx":66,"name":"kgfighter-10","tpage_name":"factoryb-vis-pris"}],[137232401,{"idx":17,"name":"daxterteeth","tpage_name":"citycast-pris"}],[122290241,{"idx":65,"name":"kgfighter-09","tpage_name":"factoryb-vis-pris"}],[137232399,{"idx":15,"name":"daxterlense","tpage_name":"citycast-pris"}],[122290239,{"idx":63,"name":"kgfighter-07","tpage_name":"factoryb-vis-pris"}],[137232398,{"idx":14,"name":"daxterhelmetplain","tpage_name":"citycast-pris"}],[122290238,{"idx":62,"name":"kgfighter-06","tpage_name":"factoryb-vis-pris"}],[137232397,{"idx":13,"name":"daxterheadwidenew","tpage_name":"citycast-pris"}],[134742037,{"idx":21,"name":"rub-scorch","tpage_name":"rubblec-vis-shrub"}],[122290237,{"idx":61,"name":"kgfighter-05","tpage_name":"factoryb-vis-pris"}],[137232396,{"idx":12,"name":"daxtergoggles","tpage_name":"citycast-pris"}],[122290236,{"idx":60,"name":"kgfighter-03","tpage_name":"factoryb-vis-pris"}],[137232395,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"citycast-pris"}],[134742035,{"idx":19,"name":"rub-overlay-bullethole-c","tpage_name":"rubblec-vis-shrub"}],[122290235,{"idx":59,"name":"kgfighter-02","tpage_name":"factoryb-vis-pris"}],[137232394,{"idx":10,"name":"daxterfoot","tpage_name":"citycast-pris"}],[134742034,{"idx":18,"name":"rub-blotch-withstreaks-01","tpage_name":"rubblec-vis-shrub"}],[122290234,{"idx":58,"name":"kgfighter-01","tpage_name":"factoryb-vis-pris"}],[137232390,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"citycast-pris"}],[134742030,{"idx":14,"name":"rub-crater-shards-01","tpage_name":"rubblec-vis-shrub"}],[122290230,{"idx":54,"name":"fac-tower-pipe-01","tpage_name":"factoryb-vis-pris"}],[134742022,{"idx":6,"name":"rub-greyblue-plain-lowres","tpage_name":"rubblec-vis-shrub"}],[122290222,{"idx":46,"name":"fac-tower-base-rim-04","tpage_name":"factoryb-vis-pris"}],[134742021,{"idx":5,"name":"rub-met-strp-close","tpage_name":"rubblec-vis-shrub"}],[122290221,{"idx":45,"name":"fac-tower-base-rim-03","tpage_name":"factoryb-vis-pris"}],[122159177,{"idx":73,"name":"fac-tower-pipe-02b","tpage_name":"factoryb-vis-tfrag"}],[139591697,{"idx":17,"name":"daxterteeth","tpage_name":"ldax-pris"}],[122159176,{"idx":72,"name":"facb_redmetal-03","tpage_name":"factoryb-vis-tfrag"}],[139591696,{"idx":16,"name":"daxternose","tpage_name":"ldax-pris"}],[118620209,{"idx":49,"name":"klever-fingerbottom","tpage_name":"ljkcdmkl-pris"}],[121110569,{"idx":41,"name":"hip-tredlite01","tpage_name":"hiphog-vis-tfrag"}],[122159175,{"idx":71,"name":"facb-beam01-hitweak","tpage_name":"factoryb-vis-tfrag"}],[139591695,{"idx":15,"name":"daxterlense","tpage_name":"ldax-pris"}],[118620208,{"idx":48,"name":"klever-face-01scars","tpage_name":"ljkcdmkl-pris"}],[121110568,{"idx":40,"name":"hip-treddark01","tpage_name":"hiphog-vis-tfrag"}],[122159174,{"idx":70,"name":"fac-tower-door-03-hitweak","tpage_name":"factoryb-vis-tfrag"}],[139591694,{"idx":14,"name":"daxterhelmetplain","tpage_name":"ldax-pris"}],[122159173,{"idx":69,"name":"fac-tower-02-hitweak","tpage_name":"factoryb-vis-tfrag"}],[139591693,{"idx":13,"name":"daxterheadwidenew","tpage_name":"ldax-pris"}],[118620206,{"idx":46,"name":"klever-eyelid","tpage_name":"ljkcdmkl-pris"}],[121110566,{"idx":38,"name":"hip-tredmed01","tpage_name":"hiphog-vis-tfrag"}],[143327232,{"idx":0,"name":"pow-flat002","tpage_name":"powergd-tfrag"}],[122159172,{"idx":68,"name":"fac-tower-base-02-hitweak","tpage_name":"factoryb-vis-tfrag"}],[139591692,{"idx":12,"name":"daxtergoggles","tpage_name":"ldax-pris"}],[118620205,{"idx":45,"name":"klever-eye","tpage_name":"ljkcdmkl-pris"}],[121110565,{"idx":37,"name":"hip-tamblit01","tpage_name":"hiphog-vis-tfrag"}],[122159171,{"idx":67,"name":"facb_blue-metal-03-lotweak","tpage_name":"factoryb-vis-tfrag"}],[139591691,{"idx":11,"name":"daxterfoot-bottom","tpage_name":"ldax-pris"}],[118620204,{"idx":44,"name":"klever-earcup","tpage_name":"ljkcdmkl-pris"}],[121110564,{"idx":36,"name":"hip-tmetfloor04","tpage_name":"hiphog-vis-tfrag"}],[122159170,{"idx":66,"name":"facb_bluewindow_selfilluminated","tpage_name":"factoryb-vis-tfrag"}],[139591690,{"idx":10,"name":"daxterfoot","tpage_name":"ldax-pris"}],[118620203,{"idx":43,"name":"klever-clips","tpage_name":"ljkcdmkl-pris"}],[121110563,{"idx":35,"name":"hip-tcounter04","tpage_name":"hiphog-vis-tfrag"}],[142082049,{"idx":1,"name":"facc-hole-grill-01","tpage_name":"lfacrm2-alpha"}],[122159169,{"idx":65,"name":"fac-tower-07","tpage_name":"factoryb-vis-tfrag"}],[139591689,{"idx":9,"name":"daxterfinger","tpage_name":"ldax-pris"}],[118620202,{"idx":42,"name":"klever-chest","tpage_name":"ljkcdmkl-pris"}],[121110562,{"idx":34,"name":"hip-tcounter02","tpage_name":"hiphog-vis-tfrag"}],[122159168,{"idx":64,"name":"fac-tower-lens-01","tpage_name":"factoryb-vis-tfrag"}],[139591688,{"idx":8,"name":"daxterear","tpage_name":"ldax-pris"}],[118620201,{"idx":41,"name":"klever-brownstrap","tpage_name":"ljkcdmkl-pris"}],[121110561,{"idx":33,"name":"hip-tredlight01","tpage_name":"hiphog-vis-tfrag"}],[122159167,{"idx":63,"name":"fac-tower-door-04","tpage_name":"factoryb-vis-tfrag"}],[139591687,{"idx":7,"name":"daxterbolt","tpage_name":"ldax-pris"}],[122159166,{"idx":62,"name":"fac-tower-door-05","tpage_name":"factoryb-vis-tfrag"}],[139591686,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"ldax-pris"}],[122159165,{"idx":61,"name":"fac-tower-03","tpage_name":"factoryb-vis-tfrag"}],[139591685,{"idx":5,"name":"daxterarm","tpage_name":"ldax-pris"}],[122159164,{"idx":60,"name":"fac-tower-05","tpage_name":"factoryb-vis-tfrag"}],[139591684,{"idx":4,"name":"daxter-orange","tpage_name":"ldax-pris"}],[122159163,{"idx":59,"name":"fac-tower-break-wall-01","tpage_name":"factoryb-vis-tfrag"}],[139591683,{"idx":3,"name":"daxter-furhilite","tpage_name":"ldax-pris"}],[118620196,{"idx":36,"name":"klever-arm","tpage_name":"ljkcdmkl-pris"}],[121110556,{"idx":28,"name":"hip-tyellmetal02","tpage_name":"hiphog-vis-tfrag"}],[122159162,{"idx":58,"name":"fac-tower-girder-02","tpage_name":"factoryb-vis-tfrag"}],[139591682,{"idx":2,"name":"daxter-eyelid","tpage_name":"ldax-pris"}],[118620195,{"idx":35,"name":"jakchires-teeth","tpage_name":"ljkcdmkl-pris"}],[121110555,{"idx":27,"name":"hip-tyellmetal01","tpage_name":"hiphog-vis-tfrag"}],[122159161,{"idx":57,"name":"fac-tower-panel-02","tpage_name":"factoryb-vis-tfrag"}],[139591681,{"idx":1,"name":"bam-hairhilite","tpage_name":"ldax-pris"}],[118620194,{"idx":34,"name":"jakchires-shoeteop","tpage_name":"ljkcdmkl-pris"}],[121110554,{"idx":26,"name":"hip-tredmetal03","tpage_name":"hiphog-vis-tfrag"}],[122159160,{"idx":56,"name":"fac-tower-pipe-02","tpage_name":"factoryb-vis-tfrag"}],[139591680,{"idx":0,"name":"bam-eyelight","tpage_name":"ldax-pris"}],[118620193,{"idx":33,"name":"jakchires-shoemetal","tpage_name":"ljkcdmkl-pris"}],[121110553,{"idx":25,"name":"hip-tyellmetal04","tpage_name":"hiphog-vis-tfrag"}],[128909326,{"idx":14,"name":"keira-hair-newest","tpage_name":"freecast-pris"}],[121438246,{"idx":38,"name":"quantref-04","tpage_name":"desbattl-pris"}],[128909325,{"idx":13,"name":"keira-gogglestrap","tpage_name":"freecast-pris"}],[121438245,{"idx":37,"name":"quantref-03","tpage_name":"desbattl-pris"}],[128909324,{"idx":12,"name":"keira-glovenewlarge","tpage_name":"freecast-pris"}],[121438244,{"idx":36,"name":"quantref-02","tpage_name":"desbattl-pris"}],[128909323,{"idx":11,"name":"keira-glasses","tpage_name":"freecast-pris"}],[121438243,{"idx":35,"name":"quantref-01","tpage_name":"desbattl-pris"}],[128909320,{"idx":8,"name":"keira-chokermetal","tpage_name":"freecast-pris"}],[121438240,{"idx":32,"name":"homing-missle-fin-01","tpage_name":"desbattl-pris"}],[128909319,{"idx":7,"name":"keira-chokerhighres","tpage_name":"freecast-pris"}],[121438239,{"idx":31,"name":"homing-missle-exhaust","tpage_name":"desbattl-pris"}],[128909318,{"idx":6,"name":"keira-brownstraps-new","tpage_name":"freecast-pris"}],[121438238,{"idx":30,"name":"homing-missle-body-tip","tpage_name":"desbattl-pris"}],[128909317,{"idx":5,"name":"keira-blackstrap","tpage_name":"freecast-pris"}],[121438237,{"idx":29,"name":"homing-missle-body","tpage_name":"desbattl-pris"}],[121438236,{"idx":28,"name":"mh-flyer-wing","tpage_name":"desbattl-pris"}],[128909316,{"idx":4,"name":"keira-belt","tpage_name":"freecast-pris"}],[121438235,{"idx":27,"name":"mh-flyer-skin-finger-01","tpage_name":"desbattl-pris"}],[128909315,{"idx":3,"name":"keira-bellylong","tpage_name":"freecast-pris"}],[121176116,{"idx":52,"name":"jakchires-teeth","tpage_name":"hiphog-vis-pris"}],[126156836,{"idx":36,"name":"sewer-round-01","tpage_name":"sewo-vis-tfrag"}],[134873095,{"idx":7,"name":"rub-rubble-01","tpage_name":"rubbleb-vis-tfrag"}],[121176115,{"idx":51,"name":"jakchires-shoeteop","tpage_name":"hiphog-vis-pris"}],[126156835,{"idx":35,"name":"sewer-pipe-rim-08","tpage_name":"sewo-vis-tfrag"}],[121176114,{"idx":50,"name":"jakchires-shoemetal","tpage_name":"hiphog-vis-pris"}],[131137554,{"idx":18,"name":"mhcity-grunt-egg-metal-01","tpage_name":"lctydest-pris"}],[126156834,{"idx":34,"name":"sewer-pipe-small-02","tpage_name":"sewo-vis-tfrag"}],[121176113,{"idx":49,"name":"jakchires-shoebottom","tpage_name":"hiphog-vis-pris"}],[131137553,{"idx":17,"name":"mhcity-grunt-egg-horns-01","tpage_name":"lctydest-pris"}],[126156833,{"idx":33,"name":"sewer-rubber-rim-01","tpage_name":"sewo-vis-tfrag"}],[121176112,{"idx":48,"name":"jakchires-precarmor-01","tpage_name":"hiphog-vis-pris"}],[126156832,{"idx":32,"name":"sewer-metal-03","tpage_name":"sewo-vis-tfrag"}],[121176111,{"idx":47,"name":"jakchires-pants","tpage_name":"hiphog-vis-pris"}],[126156831,{"idx":31,"name":"sewer-stone-arch-01","tpage_name":"sewo-vis-tfrag"}],[121176110,{"idx":46,"name":"jakchires-lightbrownspat","tpage_name":"hiphog-vis-pris"}],[131137550,{"idx":14,"name":"mhcity-vein-01","tpage_name":"lctydest-pris"}],[126156830,{"idx":30,"name":"sewer-round-02","tpage_name":"sewo-vis-tfrag"}],[134873089,{"idx":1,"name":"rub-blue-paint-rust04","tpage_name":"rubbleb-vis-tfrag"}],[121176109,{"idx":45,"name":"jakchires-leatherpouch","tpage_name":"hiphog-vis-pris"}],[126156829,{"idx":29,"name":"sewer-round-03","tpage_name":"sewo-vis-tfrag"}],[121176101,{"idx":37,"name":"jakchires-eyebrow","tpage_name":"hiphog-vis-pris"}],[131137541,{"idx":5,"name":"mhcity-eggskin","tpage_name":"lctydest-pris"}],[126156821,{"idx":21,"name":"sewer-bolt-side-02","tpage_name":"sewo-vis-tfrag"}],[121176100,{"idx":36,"name":"jakchires-eye","tpage_name":"hiphog-vis-pris"}],[126156820,{"idx":20,"name":"sewer-bolt-side-01","tpage_name":"sewo-vis-tfrag"}],[121176094,{"idx":30,"name":"jakchires-arm","tpage_name":"hiphog-vis-pris"}],[126156814,{"idx":14,"name":"sewer-nut-01","tpage_name":"sewo-vis-tfrag"}],[121176093,{"idx":29,"name":"jakc-wristband-a2","tpage_name":"hiphog-vis-pris"}],[126156813,{"idx":13,"name":"sewer-scaffold-02","tpage_name":"sewo-vis-tfrag"}],[126156812,{"idx":12,"name":"sewer-brick-block-09","tpage_name":"sewo-vis-tfrag"}],[121176092,{"idx":28,"name":"jakc-wraps","tpage_name":"hiphog-vis-pris"}],[152240156,{"idx":28,"name":"king-blackskirt2","tpage_name":"wascast-pris2"}],[153485336,{"idx":24,"name":"mhcity-lilhouse-door-frame","tpage_name":"mhcitya-vis-tfrag"}],[121110656,{"idx":128,"name":"hip-environment","tpage_name":"hiphog-vis-tfrag"}],[152240155,{"idx":27,"name":"king-arm","tpage_name":"wascast-pris2"}],[153485335,{"idx":23,"name":"mhcity-de-tower-under","tpage_name":"mhcitya-vis-tfrag"}],[121110655,{"idx":127,"name":"gun-gunrack-02","tpage_name":"hiphog-vis-tfrag"}],[152240154,{"idx":26,"name":"seem-uppertorso","tpage_name":"wascast-pris2"}],[121110654,{"idx":126,"name":"gun-gunrack-01","tpage_name":"hiphog-vis-tfrag"}],[152240153,{"idx":25,"name":"seem-teeth","tpage_name":"wascast-pris2"}],[121110653,{"idx":125,"name":"hip-carawing01","tpage_name":"hiphog-vis-tfrag"}],[152240152,{"idx":24,"name":"seem-straps","tpage_name":"wascast-pris2"}],[121110652,{"idx":124,"name":"hip-gun-dark-mag","tpage_name":"hiphog-vis-tfrag"}],[152240151,{"idx":23,"name":"seem-skirt-small","tpage_name":"wascast-pris2"}],[121110651,{"idx":123,"name":"hip-gun-barrel-alt","tpage_name":"hiphog-vis-tfrag"}],[153485330,{"idx":18,"name":"mhcity-gapfiller-top-01","tpage_name":"mhcitya-vis-tfrag"}],[152240150,{"idx":22,"name":"seem-skirt","tpage_name":"wascast-pris2"}],[121110650,{"idx":122,"name":"hip-gun-cover","tpage_name":"hiphog-vis-tfrag"}],[121110649,{"idx":121,"name":"hip-gun-magport","tpage_name":"hiphog-vis-tfrag"}],[152240149,{"idx":21,"name":"seem-precmetal-plain","tpage_name":"wascast-pris2"}],[153485328,{"idx":16,"name":"mhcity-grunt-egg-03-to-floor","tpage_name":"mhcitya-vis-tfrag"}],[152240148,{"idx":20,"name":"seem-precmetal-edge","tpage_name":"wascast-pris2"}],[121110648,{"idx":120,"name":"common-black","tpage_name":"hiphog-vis-tfrag"}],[153485327,{"idx":15,"name":"mhcity-skin-ground-to-floor-01","tpage_name":"mhcitya-vis-tfrag"}],[152240147,{"idx":19,"name":"seem-precmetal-chestplate-01","tpage_name":"wascast-pris2"}],[121110647,{"idx":119,"name":"hip-gun-main","tpage_name":"hiphog-vis-tfrag"}],[121110646,{"idx":118,"name":"hip-gun-pump","tpage_name":"hiphog-vis-tfrag"}],[152240146,{"idx":18,"name":"seem-pipes-02","tpage_name":"wascast-pris2"}],[153485326,{"idx":14,"name":"mhcity-floor-brace-02","tpage_name":"mhcitya-vis-tfrag"}],[121110645,{"idx":117,"name":"hip-gun-leather","tpage_name":"hiphog-vis-tfrag"}],[152240145,{"idx":17,"name":"seem-pipes-01","tpage_name":"wascast-pris2"}],[153485325,{"idx":13,"name":"mhcity-grunt-egg-gem-01","tpage_name":"mhcitya-vis-tfrag"}],[121110644,{"idx":116,"name":"hip-gun-gray-01","tpage_name":"hiphog-vis-tfrag"}],[152240144,{"idx":16,"name":"seem-pipeend","tpage_name":"wascast-pris2"}],[153485324,{"idx":12,"name":"mhcity-skin-ground-01","tpage_name":"mhcitya-vis-tfrag"}],[121110642,{"idx":114,"name":"hip-gun-gray-02","tpage_name":"hiphog-vis-tfrag"}],[153485322,{"idx":10,"name":"mhcity-black","tpage_name":"mhcitya-vis-tfrag"}],[152240142,{"idx":14,"name":"seem-headgearback","tpage_name":"wascast-pris2"}],[121110641,{"idx":113,"name":"hip-crate-body","tpage_name":"hiphog-vis-tfrag"}],[153485321,{"idx":9,"name":"mhcity-grunt-egg-neck-01","tpage_name":"mhcitya-vis-tfrag"}],[152240141,{"idx":13,"name":"seem-hand","tpage_name":"wascast-pris2"}],[121110640,{"idx":112,"name":"hip-map2","tpage_name":"hiphog-vis-tfrag"}],[153485320,{"idx":8,"name":"mhcity-building-door-frame","tpage_name":"mhcitya-vis-tfrag"}],[152240140,{"idx":12,"name":"seem-finger","tpage_name":"wascast-pris2"}],[121110638,{"idx":110,"name":"hip-map4","tpage_name":"hiphog-vis-tfrag"}],[153485318,{"idx":6,"name":"mhcity-building-base-01","tpage_name":"mhcitya-vis-tfrag"}],[152240138,{"idx":10,"name":"seem-eyelid","tpage_name":"wascast-pris2"}],[153485317,{"idx":5,"name":"mhcity-grunt-egg-03","tpage_name":"mhcitya-vis-tfrag"}],[121110637,{"idx":109,"name":"hip-map1","tpage_name":"hiphog-vis-tfrag"}],[152240137,{"idx":9,"name":"seem-eye","tpage_name":"wascast-pris2"}],[153485316,{"idx":4,"name":"mhcity-baserock","tpage_name":"mhcitya-vis-tfrag"}],[121110636,{"idx":108,"name":"hip-curtain","tpage_name":"hiphog-vis-tfrag"}],[152240136,{"idx":8,"name":"seem-ear","tpage_name":"wascast-pris2"}],[48955394,{"idx":2,"name":"sewer-moss-01","tpage_name":"sewd-vis-shrub"}],[153485315,{"idx":3,"name":"mhcity-wall-tentacle-02","tpage_name":"mhcitya-vis-tfrag"}],[121110635,{"idx":107,"name":"hip-glass-shard-01","tpage_name":"hiphog-vis-tfrag"}],[152240135,{"idx":7,"name":"seem-boottoe","tpage_name":"wascast-pris2"}],[121110627,{"idx":99,"name":"hip-blue-light","tpage_name":"hiphog-vis-tfrag"}],[121110625,{"idx":97,"name":"hip-tred-trim02","tpage_name":"hiphog-vis-tfrag"}],[121110624,{"idx":96,"name":"hip-tblack-trim01","tpage_name":"hiphog-vis-tfrag"}],[121110623,{"idx":95,"name":"hip-tred-trim01","tpage_name":"hiphog-vis-tfrag"}],[121110622,{"idx":94,"name":"hip-tcounter03","tpage_name":"hiphog-vis-tfrag"}],[121110621,{"idx":93,"name":"hip-tcounter01","tpage_name":"hiphog-vis-tfrag"}],[121110620,{"idx":92,"name":"hip-tgreen-try01","tpage_name":"hiphog-vis-tfrag"}],[121110619,{"idx":91,"name":"hip-tred-step05","tpage_name":"hiphog-vis-tfrag"}],[121110618,{"idx":90,"name":"hip-tmetfloor13","tpage_name":"hiphog-vis-tfrag"}],[121110617,{"idx":89,"name":"hip-tmetfloor08","tpage_name":"hiphog-vis-tfrag"}],[121110616,{"idx":88,"name":"hip-tmetfloor12","tpage_name":"hiphog-vis-tfrag"}],[121110615,{"idx":87,"name":"hip-tmetfloor06","tpage_name":"hiphog-vis-tfrag"}],[139788312,{"idx":24,"name":"samosbird-wing","tpage_name":"lsamos-pris2"}],[121110612,{"idx":84,"name":"hip-tmetfloor-vent04","tpage_name":"hiphog-vis-tfrag"}],[139788311,{"idx":23,"name":"samosbird-plume","tpage_name":"lsamos-pris2"}],[121110611,{"idx":83,"name":"hip-tred-check12","tpage_name":"hiphog-vis-tfrag"}],[139788310,{"idx":22,"name":"samosbird-eye","tpage_name":"lsamos-pris2"}],[121110610,{"idx":82,"name":"hip-tred-check06","tpage_name":"hiphog-vis-tfrag"}],[139788309,{"idx":21,"name":"samosbird-body","tpage_name":"lsamos-pris2"}],[121110609,{"idx":81,"name":"hip-tred-check07","tpage_name":"hiphog-vis-tfrag"}],[139788308,{"idx":20,"name":"samosbird-beak","tpage_name":"lsamos-pris2"}],[137297948,{"idx":28,"name":"torn-vest","tpage_name":"citycast-pris2"}],[121110608,{"idx":80,"name":"hip-tmetfloor01","tpage_name":"hiphog-vis-tfrag"}],[139788307,{"idx":19,"name":"samos-vest","tpage_name":"lsamos-pris2"}],[137297947,{"idx":27,"name":"torn-teeth-01","tpage_name":"citycast-pris2"}],[121110607,{"idx":79,"name":"hip-tred-check05","tpage_name":"hiphog-vis-tfrag"}],[139788306,{"idx":18,"name":"samos-teeth2","tpage_name":"lsamos-pris2"}],[137297946,{"idx":26,"name":"torn-shoe-02","tpage_name":"citycast-pris2"}],[121110606,{"idx":78,"name":"hip-tred-check02","tpage_name":"hiphog-vis-tfrag"}],[139788305,{"idx":17,"name":"samos-strap","tpage_name":"lsamos-pris2"}],[137297945,{"idx":25,"name":"torn-shoe","tpage_name":"citycast-pris2"}],[121110605,{"idx":77,"name":"hip-tred-check11","tpage_name":"hiphog-vis-tfrag"}],[139788304,{"idx":16,"name":"samos-metal","tpage_name":"lsamos-pris2"}],[137297944,{"idx":24,"name":"torn-scarf","tpage_name":"citycast-pris2"}],[121110604,{"idx":76,"name":"hip-tmetfloor03","tpage_name":"hiphog-vis-tfrag"}],[137297943,{"idx":23,"name":"torn-pipe","tpage_name":"citycast-pris2"}],[139788303,{"idx":15,"name":"samos-log-03","tpage_name":"lsamos-pris2"}],[121110603,{"idx":75,"name":"hip-tmetfloor02","tpage_name":"hiphog-vis-tfrag"}],[137297939,{"idx":19,"name":"torn-handle-01","tpage_name":"citycast-pris2"}],[139788299,{"idx":11,"name":"samos-leaf","tpage_name":"lsamos-pris2"}],[121110599,{"idx":71,"name":"hip-tred-steptrim01","tpage_name":"hiphog-vis-tfrag"}],[137297938,{"idx":18,"name":"torn-hair-02","tpage_name":"citycast-pris2"}],[139788298,{"idx":10,"name":"samos-helmet","tpage_name":"lsamos-pris2"}],[121110598,{"idx":70,"name":"hip-tred-step06","tpage_name":"hiphog-vis-tfrag"}],[137297937,{"idx":17,"name":"torn-hair-01","tpage_name":"citycast-pris2"}],[139788297,{"idx":9,"name":"samos-hair","tpage_name":"lsamos-pris2"}],[121110597,{"idx":69,"name":"hip-tred-check08","tpage_name":"hiphog-vis-tfrag"}],[137297936,{"idx":16,"name":"torn-gunbarrel-02","tpage_name":"citycast-pris2"}],[139788296,{"idx":8,"name":"samos-finger-01","tpage_name":"lsamos-pris2"}],[121110596,{"idx":68,"name":"hip-tred-step02","tpage_name":"hiphog-vis-tfrag"}],[137297935,{"idx":15,"name":"torn-gunbarrel","tpage_name":"citycast-pris2"}],[139788295,{"idx":7,"name":"samos-face","tpage_name":"lsamos-pris2"}],[121110595,{"idx":67,"name":"hip-tpillerpaint01","tpage_name":"hiphog-vis-tfrag"}],[137297934,{"idx":14,"name":"torn-footleather","tpage_name":"citycast-pris2"}],[139788294,{"idx":6,"name":"samos-eyelid","tpage_name":"lsamos-pris2"}],[121110594,{"idx":66,"name":"hip-tred-step03","tpage_name":"hiphog-vis-tfrag"}],[137297933,{"idx":13,"name":"torn-finger","tpage_name":"citycast-pris2"}],[139788293,{"idx":5,"name":"samos-eye","tpage_name":"lsamos-pris2"}],[121110593,{"idx":65,"name":"hip-tred-step04","tpage_name":"hiphog-vis-tfrag"}],[137297932,{"idx":12,"name":"torn-face-right","tpage_name":"citycast-pris2"}],[139788292,{"idx":4,"name":"samos-ear","tpage_name":"lsamos-pris2"}],[121110592,{"idx":64,"name":"hip-twood01","tpage_name":"hiphog-vis-tfrag"}],[137297931,{"idx":11,"name":"torn-face","tpage_name":"citycast-pris2"}],[139788291,{"idx":3,"name":"samos-diaper","tpage_name":"lsamos-pris2"}],[121110591,{"idx":63,"name":"hip-tpillerpaint04","tpage_name":"hiphog-vis-tfrag"}],[137297930,{"idx":10,"name":"torn-eyelid","tpage_name":"citycast-pris2"}],[139788290,{"idx":2,"name":"samos-arm","tpage_name":"lsamos-pris2"}],[121110590,{"idx":62,"name":"hip-tpillerpaint05","tpage_name":"hiphog-vis-tfrag"}],[137297929,{"idx":9,"name":"torn-eye","tpage_name":"citycast-pris2"}],[139788289,{"idx":1,"name":"bam-hairhilite","tpage_name":"lsamos-pris2"}],[121110589,{"idx":61,"name":"hip-tpillerpaint02","tpage_name":"hiphog-vis-tfrag"}],[137297928,{"idx":8,"name":"torn-ear","tpage_name":"citycast-pris2"}],[139788288,{"idx":0,"name":"bam-eyelight","tpage_name":"lsamos-pris2"}],[121110588,{"idx":60,"name":"hip-tred-trim03","tpage_name":"hiphog-vis-tfrag"}],[120258581,{"idx":21,"name":"kg-pickup-hood","tpage_name":"lctyhijk-pris"}],[120258567,{"idx":7,"name":"ctydecoy-plate-08","tpage_name":"lctyhijk-pris"}],[120258566,{"idx":6,"name":"ctydecoy-plate-07","tpage_name":"lctyhijk-pris"}],[120258565,{"idx":5,"name":"ctydecoy-plate-05","tpage_name":"lctyhijk-pris"}],[121503744,{"idx":0,"name":"dust-cloud","tpage_name":"title-sprite"}],[120258564,{"idx":4,"name":"ctydecoy-plate-03","tpage_name":"lctyhijk-pris"}],[120258563,{"idx":3,"name":"ctydecoy-plate-02","tpage_name":"lctyhijk-pris"}],[120258562,{"idx":2,"name":"ctydecoy-plate-01","tpage_name":"lctyhijk-pris"}],[120258561,{"idx":1,"name":"ctydecoy-light-01","tpage_name":"lctyhijk-pris"}],[120258560,{"idx":0,"name":"ctydecoy-glow-02","tpage_name":"lctyhijk-pris"}],[118751242,{"idx":10,"name":"seem-eye","tpage_name":"wcaseem-pris2"}],[48627744,{"idx":32,"name":"sewer-plate-06","tpage_name":"sewb-vis-tfrag"}],[118751241,{"idx":9,"name":"seem-ear","tpage_name":"wcaseem-pris2"}],[48627743,{"idx":31,"name":"sewer-pipe-rim-05b","tpage_name":"sewb-vis-tfrag"}],[118751240,{"idx":8,"name":"seem-boottoe","tpage_name":"wcaseem-pris2"}],[48627742,{"idx":30,"name":"sewer-pipe-rim-07","tpage_name":"sewb-vis-tfrag"}],[118751239,{"idx":7,"name":"seem-bootmet","tpage_name":"wcaseem-pris2"}],[48627741,{"idx":29,"name":"sewer-flat-pipe-01","tpage_name":"sewb-vis-tfrag"}],[118751238,{"idx":6,"name":"seem-bootlower","tpage_name":"wcaseem-pris2"}],[48627740,{"idx":28,"name":"sewer-pipe-rim-08","tpage_name":"sewb-vis-tfrag"}],[118751237,{"idx":5,"name":"seem-bootleg","tpage_name":"wcaseem-pris2"}],[43647019,{"idx":43,"name":"baron-propoganda-logo","tpage_name":"waswide-sprite"}],[48627739,{"idx":27,"name":"sewer-pipe-small-02","tpage_name":"sewb-vis-tfrag"}],[118751236,{"idx":4,"name":"seem-bootbottom","tpage_name":"wcaseem-pris2"}],[118751235,{"idx":3,"name":"seem-arm","tpage_name":"wcaseem-pris2"}],[48627737,{"idx":25,"name":"sewer-pipe-rim-03","tpage_name":"sewb-vis-tfrag"}],[118751233,{"idx":1,"name":"environment-oldmetal","tpage_name":"wcaseem-pris2"}],[48627735,{"idx":23,"name":"sewer-stone-arch-01","tpage_name":"sewb-vis-tfrag"}],[137297927,{"idx":7,"name":"torn-blademetal","tpage_name":"citycast-pris2"}],[118620227,{"idx":67,"name":"klever-widebrownstrap","tpage_name":"ljkcdmkl-pris"}],[121110587,{"idx":59,"name":"hip-tyellwall04","tpage_name":"hiphog-vis-tfrag"}],[137297926,{"idx":6,"name":"torn-belt2","tpage_name":"citycast-pris2"}],[118620226,{"idx":66,"name":"klever-undershirt","tpage_name":"ljkcdmkl-pris"}],[121110586,{"idx":58,"name":"hip-tred-step01","tpage_name":"hiphog-vis-tfrag"}],[137297925,{"idx":5,"name":"torn-belt","tpage_name":"citycast-pris2"}],[138543105,{"idx":1,"name":"windshield01","tpage_name":"desoasis-water"}],[118620225,{"idx":65,"name":"klever-thighs","tpage_name":"ljkcdmkl-pris"}],[121110585,{"idx":57,"name":"hip-tlogorag01","tpage_name":"hiphog-vis-tfrag"}],[137297924,{"idx":4,"name":"torn-armor","tpage_name":"citycast-pris2"}],[138543104,{"idx":0,"name":"intcept-lorez-spike01","tpage_name":"desoasis-water"}],[118620224,{"idx":64,"name":"klever-skirtlight","tpage_name":"ljkcdmkl-pris"}],[121110584,{"idx":56,"name":"hip-tpillerpaint03","tpage_name":"hiphog-vis-tfrag"}],[137297923,{"idx":3,"name":"torn-armlft","tpage_name":"citycast-pris2"}],[118620223,{"idx":63,"name":"klever-skirtdark","tpage_name":"ljkcdmkl-pris"}],[121110583,{"idx":55,"name":"hip-tpillerpaint06","tpage_name":"hiphog-vis-tfrag"}],[137297922,{"idx":2,"name":"charHOLD","tpage_name":"citycast-pris2"}],[118620222,{"idx":62,"name":"klever-shoebottom","tpage_name":"ljkcdmkl-pris"}],[121110582,{"idx":54,"name":"hip-tyellwall03","tpage_name":"hiphog-vis-tfrag"}],[137297921,{"idx":1,"name":"bam-hairhilite","tpage_name":"citycast-pris2"}],[118620221,{"idx":61,"name":"klever-shoe","tpage_name":"ljkcdmkl-pris"}],[121110581,{"idx":53,"name":"hip-tyellwall02","tpage_name":"hiphog-vis-tfrag"}],[137297920,{"idx":0,"name":"bam-eyelight","tpage_name":"citycast-pris2"}],[118620220,{"idx":60,"name":"klever-mustache","tpage_name":"ljkcdmkl-pris"}],[121110580,{"idx":52,"name":"hip-tyellwall01","tpage_name":"hiphog-vis-tfrag"}],[118620216,{"idx":56,"name":"klever-hair","tpage_name":"ljkcdmkl-pris"}],[134807556,{"idx":4,"name":"rub-water-destc","tpage_name":"rubblec-vis-water"}],[118620215,{"idx":55,"name":"klever-gunmetal-05","tpage_name":"ljkcdmkl-pris"}],[134807555,{"idx":3,"name":"rub-waterc","tpage_name":"rubblec-vis-water"}],[121110575,{"idx":47,"name":"hip-daxter-portrate06","tpage_name":"hiphog-vis-tfrag"}],[118620214,{"idx":54,"name":"klever-gunmetal-04","tpage_name":"ljkcdmkl-pris"}],[121110574,{"idx":46,"name":"hip-daxter-portrate04","tpage_name":"hiphog-vis-tfrag"}],[118620213,{"idx":53,"name":"klever-gunmetal-03","tpage_name":"ljkcdmkl-pris"}],[121110573,{"idx":45,"name":"hip-tpinup02","tpage_name":"hiphog-vis-tfrag"}],[118620212,{"idx":52,"name":"klever-gunmetal-02","tpage_name":"ljkcdmkl-pris"}],[121110572,{"idx":44,"name":"hip-tgreenmed01","tpage_name":"hiphog-vis-tfrag"}],[118620192,{"idx":32,"name":"jakchires-shoebottom","tpage_name":"ljkcdmkl-pris"}],[121110552,{"idx":24,"name":"hip-tyellmetal03","tpage_name":"hiphog-vis-tfrag"}],[118620191,{"idx":31,"name":"jakchires-precarmor-01","tpage_name":"ljkcdmkl-pris"}],[121110551,{"idx":23,"name":"hip-tboothlight01","tpage_name":"hiphog-vis-tfrag"}],[118620190,{"idx":30,"name":"jakchires-pants","tpage_name":"ljkcdmkl-pris"}],[121110550,{"idx":22,"name":"hip-tbooth02","tpage_name":"hiphog-vis-tfrag"}],[118620189,{"idx":29,"name":"jakchires-lightbrownspat","tpage_name":"ljkcdmkl-pris"}],[121110549,{"idx":21,"name":"hip-tgreenmetal01","tpage_name":"hiphog-vis-tfrag"}],[117637284,{"idx":164,"name":"intcept-b-teeth01","tpage_name":"destrack-pris"}],[73596933,{"idx":5,"name":"sewer-block-01","tpage_name":"sewi-vis-tfrag"}],[117637283,{"idx":163,"name":"intcept-b-pipe01","tpage_name":"destrack-pris"}],[117637282,{"idx":162,"name":"intcept-b-gun01","tpage_name":"destrack-pris"}],[117637281,{"idx":161,"name":"intcept-b-base-patern02","tpage_name":"destrack-pris"}],[117637280,{"idx":160,"name":"intcept-b-base-patern01","tpage_name":"destrack-pris"}],[117637279,{"idx":159,"name":"intcept-b-base-green01","tpage_name":"destrack-pris"}],[73596928,{"idx":0,"name":"sewer-brick-block-09","tpage_name":"sewi-vis-tfrag"}],[41418821,{"idx":69,"name":"wascitya-stone-top-door","tpage_name":"wascitya-vis-tfrag"}],[55115801,{"idx":25,"name":"wascity-metal-wall-base-plate","tpage_name":"wascityb-vis-tfrag"}],[117637278,{"idx":158,"name":"wstlander-04-skirt","tpage_name":"destrack-pris"}],[41418820,{"idx":68,"name":"wascity-steps-red","tpage_name":"wascitya-vis-tfrag"}],[55115800,{"idx":24,"name":"wascitya-redish-metal","tpage_name":"wascityb-vis-tfrag"}],[117637277,{"idx":157,"name":"wstlander-04-shirt-strap","tpage_name":"destrack-pris"}],[48889899,{"idx":43,"name":"sewer-pipe-rim-06","tpage_name":"sewd-vis-tfrag"}],[55115799,{"idx":23,"name":"wascitya-stone-bottom","tpage_name":"wascityb-vis-tfrag"}],[117637276,{"idx":156,"name":"wstlander-04-shirt","tpage_name":"destrack-pris"}],[48889898,{"idx":42,"name":"sewer-pipe-rim-09","tpage_name":"sewd-vis-tfrag"}],[41418818,{"idx":66,"name":"wascity-elev-door-dark","tpage_name":"wascitya-vis-tfrag"}],[55115798,{"idx":22,"name":"wascitya-stone-top","tpage_name":"wascityb-vis-tfrag"}],[117637275,{"idx":155,"name":"wstlander-04-headband","tpage_name":"destrack-pris"}],[48889897,{"idx":41,"name":"sewer-pipe-02","tpage_name":"sewd-vis-tfrag"}],[41418817,{"idx":65,"name":"wascity-elev-door-orange-2","tpage_name":"wascitya-vis-tfrag"}],[55115797,{"idx":21,"name":"wascity-wall-canister","tpage_name":"wascityb-vis-tfrag"}],[117637273,{"idx":153,"name":"wstlander-04-dark-blue","tpage_name":"destrack-pris"}],[48889895,{"idx":39,"name":"sewer-pipe-rim-07","tpage_name":"sewd-vis-tfrag"}],[41418815,{"idx":63,"name":"wascity-elev-door-snake-eye","tpage_name":"wascitya-vis-tfrag"}],[55115795,{"idx":19,"name":"wascity-stucco-wall-supports","tpage_name":"wascityb-vis-tfrag"}],[148766772,{"idx":52,"name":"daxtertuft","tpage_name":"warpcast-pris"}],[117637272,{"idx":152,"name":"wstlander-03-flesh","tpage_name":"destrack-pris"}],[48889894,{"idx":38,"name":"sewer-plate-04","tpage_name":"sewd-vis-tfrag"}],[41418814,{"idx":62,"name":"wascity-elev-door-snake","tpage_name":"wascitya-vis-tfrag"}],[55115794,{"idx":18,"name":"wascity-stucco-wall-supports-end","tpage_name":"wascityb-vis-tfrag"}],[148766771,{"idx":51,"name":"daxterteeth","tpage_name":"warpcast-pris"}],[117637271,{"idx":151,"name":"wstlander-03-eye","tpage_name":"destrack-pris"}],[55115793,{"idx":17,"name":"wascity-metal-indent","tpage_name":"wascityb-vis-tfrag"}],[148766770,{"idx":50,"name":"daxternose","tpage_name":"warpcast-pris"}],[117637270,{"idx":150,"name":"wstlander-02-skirt","tpage_name":"destrack-pris"}],[48889892,{"idx":36,"name":"sewer-hall-light-01","tpage_name":"sewd-vis-tfrag"}],[55115792,{"idx":16,"name":"wascity-stonewall-bricks","tpage_name":"wascityb-vis-tfrag"}],[148766769,{"idx":49,"name":"daxterlense","tpage_name":"warpcast-pris"}],[117637269,{"idx":149,"name":"wstlander-02-shirt","tpage_name":"destrack-pris"}],[48889891,{"idx":35,"name":"sewer-mantel-02","tpage_name":"sewd-vis-tfrag"}],[55115791,{"idx":15,"name":"wascity-stucco-wall-bleached-cut-01","tpage_name":"wascityb-vis-tfrag"}],[148766768,{"idx":48,"name":"daxterhelmetplain","tpage_name":"warpcast-pris"}],[117637268,{"idx":148,"name":"wstlander-02-scarf","tpage_name":"destrack-pris"}],[48889890,{"idx":34,"name":"sewer-mantel-01","tpage_name":"sewd-vis-tfrag"}],[41418810,{"idx":58,"name":"common-gray-dark","tpage_name":"wascitya-vis-tfrag"}],[55115790,{"idx":14,"name":"wascity-stucco-wall-bleached-2-bricks-01","tpage_name":"wascityb-vis-tfrag"}],[122290176,{"idx":0,"name":"common-black","tpage_name":"factoryb-vis-pris"}],[112328736,{"idx":32,"name":"jakchires-arm","tpage_name":"wascast-pris"}],[91160676,{"idx":100,"name":"jakchires-leatherpouch","tpage_name":"gungame-vis-pris"}],[104857656,{"idx":56,"name":"vehicle-wheel-01","tpage_name":"oasiscst-pris"}],[148766767,{"idx":47,"name":"daxterheadwidenew","tpage_name":"warpcast-pris"}],[117637267,{"idx":147,"name":"wstlander-02-ponytail","tpage_name":"destrack-pris"}],[48889889,{"idx":33,"name":"sewer-metal-block-06","tpage_name":"sewd-vis-tfrag"}],[55115789,{"idx":13,"name":"wascity-stucco-wall-bleached-01","tpage_name":"wascityb-vis-tfrag"}],[148766766,{"idx":46,"name":"daxtergoggles","tpage_name":"warpcast-pris"}],[117637266,{"idx":146,"name":"wstlander-02-head","tpage_name":"destrack-pris"}],[48889888,{"idx":32,"name":"sewer-flat-pipe-01","tpage_name":"sewd-vis-tfrag"}],[41418808,{"idx":56,"name":"wascitya-airlock-groove","tpage_name":"wascitya-vis-tfrag"}],[55115788,{"idx":12,"name":"wascity-metal-piece-01","tpage_name":"wascityb-vis-tfrag"}],[112328734,{"idx":30,"name":"jakc-wraps","tpage_name":"wascast-pris"}],[91160674,{"idx":98,"name":"jakchires-horn","tpage_name":"gungame-vis-pris"}],[104857654,{"idx":54,"name":"intcept-pipe01","tpage_name":"oasiscst-pris"}],[148766765,{"idx":45,"name":"daxterfoot-bottom","tpage_name":"warpcast-pris"}],[117637265,{"idx":145,"name":"wstlander-02-glove","tpage_name":"destrack-pris"}],[41418807,{"idx":55,"name":"wascity-roof-1","tpage_name":"wascitya-vis-tfrag"}],[48889887,{"idx":31,"name":"sewer-pipe-rim-05","tpage_name":"sewd-vis-tfrag"}],[55115787,{"idx":11,"name":"wascity-metal-piece-02","tpage_name":"wascityb-vis-tfrag"}],[91160673,{"idx":97,"name":"jakchires-hair","tpage_name":"gungame-vis-pris"}],[112328733,{"idx":29,"name":"jakc-waistband2","tpage_name":"wascast-pris"}],[104857653,{"idx":53,"name":"kid-medallion","tpage_name":"oasiscst-pris"}],[148766764,{"idx":44,"name":"daxterfoot","tpage_name":"warpcast-pris"}],[117637264,{"idx":144,"name":"wstlander-02-eye","tpage_name":"destrack-pris"}],[48889886,{"idx":30,"name":"sewer-metal-03","tpage_name":"sewd-vis-tfrag"}],[55115786,{"idx":10,"name":"wascity-wallspike-01","tpage_name":"wascityb-vis-tfrag"}],[148766763,{"idx":43,"name":"daxterfinger","tpage_name":"warpcast-pris"}],[117637263,{"idx":143,"name":"wstlander-02-bootheel","tpage_name":"destrack-pris"}],[148766762,{"idx":42,"name":"daxterear","tpage_name":"warpcast-pris"}],[152502302,{"idx":30,"name":"temple_pre-04","tpage_name":"templex-vis-tfrag"}],[117637262,{"idx":142,"name":"wstlander-02-belt","tpage_name":"destrack-pris"}],[148766761,{"idx":41,"name":"daxterbolt","tpage_name":"warpcast-pris"}],[152502301,{"idx":29,"name":"temple_pre-01","tpage_name":"templex-vis-tfrag"}],[117637261,{"idx":141,"name":"wstlander-02-armor","tpage_name":"destrack-pris"}],[148766760,{"idx":40,"name":"daxterbodyshort-eix","tpage_name":"warpcast-pris"}],[117637260,{"idx":140,"name":"wstlander-02-arm","tpage_name":"destrack-pris"}],[148766759,{"idx":39,"name":"daxterarm","tpage_name":"warpcast-pris"}],[152502299,{"idx":27,"name":"temple_sandstone_pill07","tpage_name":"templex-vis-tfrag"}],[117637259,{"idx":139,"name":"wstlander-01-wrap","tpage_name":"destrack-pris"}],[41418801,{"idx":49,"name":"wascity-base","tpage_name":"wascitya-vis-tfrag"}],[55115781,{"idx":5,"name":"wascity-metal-dirty","tpage_name":"wascityb-vis-tfrag"}],[67108965,{"idx":101,"name":"vin-support-base-02","tpage_name":"vinroom-vis-pris"}],[74580045,{"idx":77,"name":"sewer-metal-block-04-hitweak","tpage_name":"sewm-vis-tfrag"}],[88277025,{"idx":33,"name":"cguard-air-train-fin","tpage_name":"introcst-tfrag"}],[112328727,{"idx":23,"name":"jakc-chestplate-straps","tpage_name":"wascast-pris"}],[91160667,{"idx":91,"name":"jakchires-eye","tpage_name":"gungame-vis-pris"}],[104857647,{"idx":47,"name":"jakchires-shoebottom","tpage_name":"oasiscst-pris"}],[148766758,{"idx":38,"name":"daxter-orange","tpage_name":"warpcast-pris"}],[117637258,{"idx":138,"name":"wstlander-01-skirt","tpage_name":"destrack-pris"}],[41418800,{"idx":48,"name":"wascitya-airlock-door","tpage_name":"wascitya-vis-tfrag"}],[55115780,{"idx":4,"name":"wascity-metal-door-01","tpage_name":"wascityb-vis-tfrag"}],[91160666,{"idx":90,"name":"jakchires-clips","tpage_name":"gungame-vis-pris"}],[112328726,{"idx":22,"name":"jakc-armor","tpage_name":"wascast-pris"}],[104857646,{"idx":46,"name":"jakchires-precarmor-01","tpage_name":"oasiscst-pris"}],[148766757,{"idx":37,"name":"daxter-furhilite","tpage_name":"warpcast-pris"}],[117637257,{"idx":137,"name":"wstlander-01-shoulderarmor","tpage_name":"destrack-pris"}],[71630876,{"idx":28,"name":"king-thinstrap","tpage_name":"ldampksm-pris2"}],[122224640,{"idx":0,"name":"facb-bridgelights-01","tpage_name":"factoryb-vis-alpha"}],[104792120,{"idx":56,"name":"wstlander-01-shoebottom","tpage_name":"desresc-pris"}],[118489100,{"idx":12,"name":"sig-gun-01","tpage_name":"deshunt-pris2"}],[71630875,{"idx":27,"name":"king-teeth","tpage_name":"ldampksm-pris2"}],[71630874,{"idx":26,"name":"king-skirt","tpage_name":"ldampksm-pris2"}],[71630872,{"idx":24,"name":"king-precursermetal-trimbolt","tpage_name":"ldampksm-pris2"}],[71630855,{"idx":7,"name":"king-clip-02","tpage_name":"ldampksm-pris2"}],[71630854,{"idx":6,"name":"king-chest","tpage_name":"ldampksm-pris2"}],[71630853,{"idx":5,"name":"king-bolt","tpage_name":"ldampksm-pris2"}],[71630849,{"idx":1,"name":"environment-oldmetal","tpage_name":"ldampksm-pris2"}],[71630848,{"idx":0,"name":"bam-eyelight","tpage_name":"ldampksm-pris2"}],[71434295,{"idx":55,"name":"wstd-platform-base","tpage_name":"wasstadc-tfrag"}],[106364952,{"idx":24,"name":"veger-parchment","tpage_name":"mined-pris2"}],[106364951,{"idx":23,"name":"veger-pants","tpage_name":"mined-pris2"}],[71303200,{"idx":32,"name":"king-blackskirt2","tpage_name":"ldamsig-pris2"}],[106364949,{"idx":21,"name":"veger-legwraps","tpage_name":"mined-pris2"}],[71172098,{"idx":2,"name":"pecker-eyelid","tpage_name":"ldampeck-pris"}],[71172097,{"idx":1,"name":"pecker-body-01","tpage_name":"ldampeck-pris"}],[71172096,{"idx":0,"name":"bam-eyelight","tpage_name":"ldampeck-pris"}],[48758840,{"idx":56,"name":"sewer-scaffold-01","tpage_name":"sewc-vis-tfrag"}],[66191360,{"idx":0,"name":"fora-dirt","tpage_name":"foresta-vis-alpha"}],[48758841,{"idx":57,"name":"sewer-metal-trim-01","tpage_name":"sewc-vis-tfrag"}],[66191361,{"idx":1,"name":"fora-precursor-glass-b-02","tpage_name":"foresta-vis-alpha"}],[154796035,{"idx":3,"name":"daxter-furhilite","tpage_name":"ljakndax-pris"}],[144834595,{"idx":35,"name":"comb-long-vent","tpage_name":"combn-tfrag"}],[106234015,{"idx":159,"name":"airlock-door-metal2","tpage_name":"mined-pris"}],[60948484,{"idx":4,"name":"minc-rust-01","tpage_name":"minec-vis-tfrag"}],[62193664,{"idx":0,"name":"bike-01","tpage_name":"ctycarb-pris"}],[61669392,{"idx":16,"name":"fora-precursor-tube-ring-02","tpage_name":"foresta-vis-shrub"}],[61669390,{"idx":14,"name":"fora-precursor-circuitpattern-01","tpage_name":"foresta-vis-shrub"}],[61669389,{"idx":13,"name":"fora-precursor-metal-plain-01","tpage_name":"foresta-vis-shrub"}],[61669387,{"idx":11,"name":"fora-shrub-vine","tpage_name":"foresta-vis-shrub"}],[61669386,{"idx":10,"name":"fora-shrub-growth","tpage_name":"foresta-vis-shrub"}],[130351104,{"idx":0,"name":"des-beast-brown-tube","tpage_name":"deshover-pris2"}],[94240884,{"idx":116,"name":"tpal-big-metal-panl01","tpage_name":"intpfall-vis-tfrag"}],[129105924,{"idx":4,"name":"sewer-waterfall-01-n","tpage_name":"sewn-vis-water"}],[42401804,{"idx":12,"name":"wascity-torch-tank","tpage_name":"wasdoors-vis-tfrag"}],[94240883,{"idx":115,"name":"tpal-horiz-trim01","tpage_name":"intpfall-vis-tfrag"}],[129105923,{"idx":3,"name":"sewer-water-wave-01-n","tpage_name":"sewn-vis-water"}],[42401803,{"idx":11,"name":"wascity-metal-dirty","tpage_name":"wasdoors-vis-tfrag"}],[94240881,{"idx":113,"name":"intr-grey-holes","tpage_name":"intpfall-vis-tfrag"}],[129105921,{"idx":1,"name":"sewer-water-still-01-n","tpage_name":"sewn-vis-water"}],[42401801,{"idx":9,"name":"wascity-outerwall-metal","tpage_name":"wasdoors-vis-tfrag"}],[61079629,{"idx":77,"name":"widow-pod-gun-metal","tpage_name":"minec-vis-pris"}],[94240873,{"idx":105,"name":"troof-beam01","tpage_name":"intpfall-vis-tfrag"}],[154796041,{"idx":9,"name":"daxterfinger","tpage_name":"ljakndax-pris"}],[151060501,{"idx":21,"name":"widow-dull-inards","tpage_name":"factoryc-vis-pris"}],[144834601,{"idx":41,"name":"comb-stone-02","tpage_name":"combn-tfrag"}],[106234021,{"idx":165,"name":"roboboss-antennae","tpage_name":"mined-pris"}],[60948490,{"idx":10,"name":"minc-blue-paint-safe-rust04","tpage_name":"minec-vis-tfrag"}],[57212950,{"idx":22,"name":"wascity-palace-siding-01","tpage_name":"waswide-vis-tfrag"}],[62193670,{"idx":6,"name":"bikecnosecone01","tpage_name":"ctycarb-pris"}],[94240861,{"idx":93,"name":"palcab-lowres-background-peaks-01","tpage_name":"intpfall-vis-tfrag"}],[154796040,{"idx":8,"name":"daxterear","tpage_name":"ljakndax-pris"}],[153550860,{"idx":12,"name":"mhcity-pebbles","tpage_name":"mhcitya-vis-shrub"}],[144834600,{"idx":40,"name":"comb-stone-01","tpage_name":"combn-tfrag"}],[106234020,{"idx":164,"name":"roboboss-abs","tpage_name":"mined-pris"}],[60948489,{"idx":9,"name":"minc-rust-bars-01","tpage_name":"minec-vis-tfrag"}],[57212949,{"idx":21,"name":"wascity-cement-road","tpage_name":"waswide-vis-tfrag"}],[62193669,{"idx":5,"name":"bikecmotor01","tpage_name":"ctycarb-pris"}],[94240860,{"idx":92,"name":"palcab-lowres-background-desert-to-shore","tpage_name":"intpfall-vis-tfrag"}],[154796039,{"idx":7,"name":"daxterbolt","tpage_name":"ljakndax-pris"}],[153550859,{"idx":11,"name":"mhcity-goo-plants","tpage_name":"mhcitya-vis-shrub"}],[144834599,{"idx":39,"name":"comb-stone-05","tpage_name":"combn-tfrag"}],[106234019,{"idx":163,"name":"prebot-innermetal-edges","tpage_name":"mined-pris"}],[57212948,{"idx":20,"name":"wascity-metal-door-01","tpage_name":"waswide-vis-tfrag"}],[60948488,{"idx":8,"name":"minc-yel-paint-rust01","tpage_name":"minec-vis-tfrag"}],[62193668,{"idx":4,"name":"bikebside01","tpage_name":"ctycarb-pris"}],[94240859,{"idx":91,"name":"palcab-lowres-background-hilltops-01","tpage_name":"intpfall-vis-tfrag"}],[154796038,{"idx":6,"name":"daxterbodyshort-eix","tpage_name":"ljakndax-pris"}],[144834598,{"idx":38,"name":"comb-stone-04","tpage_name":"combn-tfrag"}],[106234018,{"idx":162,"name":"prebot-foot","tpage_name":"mined-pris"}],[57212947,{"idx":19,"name":"wascity-metal-fan","tpage_name":"waswide-vis-tfrag"}],[60948487,{"idx":7,"name":"minc-safe-plate-01","tpage_name":"minec-vis-tfrag"}],[62193667,{"idx":3,"name":"bikebjets01","tpage_name":"ctycarb-pris"}],[154796037,{"idx":5,"name":"daxterarm","tpage_name":"ljakndax-pris"}],[151060497,{"idx":17,"name":"roboguard-headshield","tpage_name":"factoryc-vis-pris"}],[144834597,{"idx":37,"name":"comb-stone-03","tpage_name":"combn-tfrag"}],[106234017,{"idx":161,"name":"gun-blue-glow","tpage_name":"mined-pris"}],[57212946,{"idx":18,"name":"wascity-metal-indent","tpage_name":"waswide-vis-tfrag"}],[60948486,{"idx":6,"name":"minc-blue-paint-rust01","tpage_name":"minec-vis-tfrag"}],[62193666,{"idx":2,"name":"bike-03","tpage_name":"ctycarb-pris"}],[48758842,{"idx":58,"name":"sewer-metal-trim-02","tpage_name":"sewc-vis-tfrag"}],[66191362,{"idx":2,"name":"precprism-lens-07","tpage_name":"foresta-vis-alpha"}],[154796036,{"idx":4,"name":"daxter-orange","tpage_name":"ljakndax-pris"}],[153550856,{"idx":8,"name":"city-ind-stain-02","tpage_name":"mhcitya-vis-shrub"}],[144834596,{"idx":36,"name":"comb-comb-tile","tpage_name":"combn-tfrag"}],[106234016,{"idx":160,"name":"airlockl-door-metalframe","tpage_name":"mined-pris"}],[60948485,{"idx":5,"name":"minc-blue-paint-rust02","tpage_name":"minec-vis-tfrag"}],[57212945,{"idx":17,"name":"wascity-outerwall-metal-d","tpage_name":"waswide-vis-tfrag"}],[62193665,{"idx":1,"name":"bike-02","tpage_name":"ctycarb-pris"}],[60882979,{"idx":35,"name":"minc-rust-pipe-05","tpage_name":"mineb-vis-pris"}],[60882977,{"idx":33,"name":"minc-blue-paint-rust01","tpage_name":"mineb-vis-pris"}],[8912938,{"idx":42,"name":"city-fort-red","tpage_name":"ctysluma-vis-tfrag"}],[8912937,{"idx":41,"name":"city-slum-burning-can","tpage_name":"ctysluma-vis-tfrag"}],[60555307,{"idx":43,"name":"minb-stone14","tpage_name":"minea-vis-tfrag"}],[8912936,{"idx":40,"name":"city-slum-lightwall","tpage_name":"ctysluma-vis-tfrag"}],[60555306,{"idx":42,"name":"minc-rust-pipe-03","tpage_name":"minea-vis-tfrag"}],[8912935,{"idx":39,"name":"slum-stone-bottom","tpage_name":"ctysluma-vis-tfrag"}],[8912933,{"idx":37,"name":"city-wall-plain-1","tpage_name":"ctysluma-vis-tfrag"}],[8912931,{"idx":35,"name":"city-slum-bigpipe-02","tpage_name":"ctysluma-vis-tfrag"}],[8912929,{"idx":33,"name":"city-slum-building-frame","tpage_name":"ctysluma-vis-tfrag"}],[8912928,{"idx":32,"name":"city-slumbase-wall-boarded","tpage_name":"ctysluma-vis-tfrag"}],[8912927,{"idx":31,"name":"city-side-support-tops","tpage_name":"ctysluma-vis-tfrag"}],[8912926,{"idx":30,"name":"common-black","tpage_name":"ctysluma-vis-tfrag"}],[60555317,{"idx":53,"name":"minc-pre-11","tpage_name":"minea-vis-tfrag"}],[8912945,{"idx":49,"name":"slum-ground-01","tpage_name":"ctysluma-vis-tfrag"}],[8912944,{"idx":48,"name":"slum-ditch-bottom-01","tpage_name":"ctysluma-vis-tfrag"}],[94240814,{"idx":46,"name":"city-lowres-ctygen-stripe-02","tpage_name":"intpfall-vis-tfrag"}],[48627770,{"idx":58,"name":"sewer-round-02","tpage_name":"sewb-vis-tfrag"}],[61079570,{"idx":18,"name":"manta-gem-01","tpage_name":"minec-vis-pris"}],[60620932,{"idx":132,"name":"minc-rust-02","tpage_name":"minea-vis-pris"}],[94240792,{"idx":24,"name":"city-lowres-fort-yellow","tpage_name":"intpfall-vis-tfrag"}],[60620926,{"idx":126,"name":"jakchires-shoeteop","tpage_name":"minea-vis-pris"}],[94240786,{"idx":18,"name":"palcab-lowres-ctyslumc-wall-02","tpage_name":"intpfall-vis-tfrag"}],[60620924,{"idx":124,"name":"jakchires-shoebottom","tpage_name":"minea-vis-pris"}],[94240784,{"idx":16,"name":"palcab-steel","tpage_name":"intpfall-vis-tfrag"}],[105054316,{"idx":108,"name":"intcept-tread01","tpage_name":"desoasis-pris"}],[134938636,{"idx":12,"name":"rub-beam-gen","tpage_name":"rubbleb-vis-shrub"}],[105054315,{"idx":107,"name":"intcept-teeth01","tpage_name":"desoasis-pris"}],[134938635,{"idx":11,"name":"rub-greyblue-plain-lowres","tpage_name":"rubbleb-vis-shrub"}],[105054314,{"idx":106,"name":"intcept-pipe01","tpage_name":"desoasis-pris"}],[134938634,{"idx":10,"name":"rub-met-strp-close","tpage_name":"rubbleb-vis-shrub"}],[57147396,{"idx":4,"name":"king-bluemetal","tpage_name":"waspala-pris2"}],[57147395,{"idx":3,"name":"king-blackskirt2","tpage_name":"waspala-pris2"}],[57147393,{"idx":1,"name":"environment-oldmetal","tpage_name":"waspala-pris2"}],[57147392,{"idx":0,"name":"bam-eyelight","tpage_name":"waspala-pris2"}],[42401805,{"idx":13,"name":"wascity-steel-bar","tpage_name":"wasdoors-vis-tfrag"}],[42401802,{"idx":10,"name":"wascity-metal-wall-base-plate","tpage_name":"wasdoors-vis-tfrag"}],[42401800,{"idx":8,"name":"wascity-metal-door-01","tpage_name":"wasdoors-vis-tfrag"}],[104792205,{"idx":141,"name":"dark-crystal-pickup-03","tpage_name":"desresc-pris"}],[104792204,{"idx":140,"name":"dark-crystal-pickup-02","tpage_name":"desresc-pris"}],[104792203,{"idx":139,"name":"dark-crystal-pickup-01","tpage_name":"desresc-pris"}],[104792202,{"idx":138,"name":"dark-crystal-knob-02","tpage_name":"desresc-pris"}],[139657241,{"idx":25,"name":"keira-torch-nozzle-02","tpage_name":"lkeira-pris"}],[104792201,{"idx":137,"name":"dark-crystal-knob-01","tpage_name":"desresc-pris"}],[60686375,{"idx":39,"name":"minc-rust-pipe-05","tpage_name":"mineb-vis-tfrag"}],[56950835,{"idx":51,"name":"waspala-step-02","tpage_name":"waspala-tfrag"}],[60686372,{"idx":36,"name":"minc-grill-01","tpage_name":"mineb-vis-tfrag"}],[56950832,{"idx":48,"name":"waspala-chain-anchor","tpage_name":"waspala-tfrag"}],[60686371,{"idx":35,"name":"minc-red-paint-02","tpage_name":"mineb-vis-tfrag"}],[56950831,{"idx":47,"name":"waspala-elevator-shaft","tpage_name":"waspala-tfrag"}],[60686370,{"idx":34,"name":"minc-chain-metal-01","tpage_name":"mineb-vis-tfrag"}],[56950830,{"idx":46,"name":"waspala-pool-floor","tpage_name":"waspala-tfrag"}],[60686369,{"idx":33,"name":"minc-ox-pipe-01","tpage_name":"mineb-vis-tfrag"}],[56950829,{"idx":45,"name":"waspala-elevator-cable","tpage_name":"waspala-tfrag"}],[60686368,{"idx":32,"name":"minb-stone-tile","tpage_name":"mineb-vis-tfrag"}],[56950828,{"idx":44,"name":"waspala-elevator-tube","tpage_name":"waspala-tfrag"}],[56950827,{"idx":43,"name":"waspala-elevator-metal-plate","tpage_name":"waspala-tfrag"}],[60686366,{"idx":30,"name":"minc-rust-bars-01","tpage_name":"mineb-vis-tfrag"}],[56950826,{"idx":42,"name":"waspala-elevator-metal","tpage_name":"waspala-tfrag"}],[60686365,{"idx":29,"name":"minc-yel-paint-rust01","tpage_name":"mineb-vis-tfrag"}],[56950825,{"idx":41,"name":"waspala-window-frame","tpage_name":"waspala-tfrag"}],[60686364,{"idx":28,"name":"minc-blue-paint-01","tpage_name":"mineb-vis-tfrag"}],[56950824,{"idx":40,"name":"waspala-column-piece","tpage_name":"waspala-tfrag"}],[60686363,{"idx":27,"name":"minc-rust-01","tpage_name":"mineb-vis-tfrag"}],[56950823,{"idx":39,"name":"waspala-fire-holder04","tpage_name":"waspala-tfrag"}],[60686358,{"idx":22,"name":"minb-stone00","tpage_name":"mineb-vis-tfrag"}],[56950818,{"idx":34,"name":"waspala-fire-holder03","tpage_name":"waspala-tfrag"}],[139657219,{"idx":3,"name":"keira-belt","tpage_name":"lkeira-pris"}],[104792179,{"idx":115,"name":"dk-sat-shell-lod-01","tpage_name":"desresc-pris"}],[60686357,{"idx":21,"name":"minb-stone-edge","tpage_name":"mineb-vis-tfrag"}],[56950817,{"idx":33,"name":"waspala-column-02","tpage_name":"waspala-tfrag"}],[139657218,{"idx":2,"name":"keira-bellylong","tpage_name":"lkeira-pris"}],[104792178,{"idx":114,"name":"dk-sat-rim-lod-01","tpage_name":"desresc-pris"}],[60686356,{"idx":20,"name":"minb-stone19","tpage_name":"mineb-vis-tfrag"}],[56950816,{"idx":32,"name":"waspala-column-01","tpage_name":"waspala-tfrag"}],[60686351,{"idx":15,"name":"minb-stone20","tpage_name":"mineb-vis-tfrag"}],[56950811,{"idx":27,"name":"waspala-metal-bar","tpage_name":"waspala-tfrag"}],[60686350,{"idx":14,"name":"minb-stone26","tpage_name":"mineb-vis-tfrag"}],[56950810,{"idx":26,"name":"waspala-metal-plate02","tpage_name":"waspala-tfrag"}],[60686349,{"idx":13,"name":"minb-hang-strut-metl-02","tpage_name":"mineb-vis-tfrag"}],[56950809,{"idx":25,"name":"waspala-metal-plate01","tpage_name":"waspala-tfrag"}],[55312419,{"idx":35,"name":"was-tizard-hair","tpage_name":"wascityb-vis-pris"}],[55312417,{"idx":33,"name":"was-tizard-facefin","tpage_name":"wascityb-vis-pris"}],[106954775,{"idx":23,"name":"vol-bushbase-01","tpage_name":"volcanoa-vis-tfrag"}],[55246857,{"idx":9,"name":"wascity-ground-stain-01","tpage_name":"wascityb-vis-shrub"}],[55246854,{"idx":6,"name":"wascity-stain-wall-01","tpage_name":"wascityb-vis-shrub"}],[73596939,{"idx":11,"name":"sewer-pipe-small-02","tpage_name":"sewi-vis-tfrag"}],[148766756,{"idx":36,"name":"daxter-eyelid","tpage_name":"warpcast-pris"}],[117637256,{"idx":136,"name":"wstlander-01-shoetop","tpage_name":"destrack-pris"}],[41418798,{"idx":46,"name":"wascitya-redish-metal","tpage_name":"wascitya-vis-tfrag"}],[55115778,{"idx":2,"name":"wascity-metal-segments","tpage_name":"wascityb-vis-tfrag"}],[91160664,{"idx":88,"name":"jakchires-brwnleather","tpage_name":"gungame-vis-pris"}],[118554624,{"idx":0,"name":"sig-flatfangs","tpage_name":"deshunt-water"}],[112328724,{"idx":20,"name":"eco-lt-cryst-02","tpage_name":"wascast-pris"}],[104857644,{"idx":44,"name":"jakchires-lightbrownspat","tpage_name":"oasiscst-pris"}],[148766755,{"idx":35,"name":"jakchires-teeth","tpage_name":"warpcast-pris"}],[117637255,{"idx":135,"name":"wstlander-01-shoebottom","tpage_name":"destrack-pris"}],[91160663,{"idx":87,"name":"jakchires-brownstrap","tpage_name":"gungame-vis-pris"}],[104857643,{"idx":43,"name":"jakchires-leatherpouch","tpage_name":"oasiscst-pris"}],[148766754,{"idx":34,"name":"jakchires-shoeteop","tpage_name":"warpcast-pris"}],[117637254,{"idx":134,"name":"wstlander-01-pants","tpage_name":"destrack-pris"}],[262189,{"idx":45,"name":"lasersmoke-19","tpage_name":"level-default-sprite"}],[262188,{"idx":44,"name":"lasersmoke-18","tpage_name":"level-default-sprite"}],[50790409,{"idx":9,"name":"fora-waterfall-01-dest","tpage_name":"foresta-vis-water"}],[8585216,{"idx":0,"name":"map-ctysluma","tpage_name":"ctysluma-minimap"}],[74907698,{"idx":50,"name":"sewer-brick-block-11","tpage_name":"sewl-vis-tfrag"}],[74907695,{"idx":47,"name":"sewer-pipe-small-02","tpage_name":"sewl-vis-tfrag"}],[74907694,{"idx":46,"name":"sewer-concrete-edge-01","tpage_name":"sewl-vis-tfrag"}],[74907693,{"idx":45,"name":"sewer-pipe-rim-07","tpage_name":"sewl-vis-tfrag"}],[74907692,{"idx":44,"name":"sewer-grill-02","tpage_name":"sewl-vis-tfrag"}],[74907691,{"idx":43,"name":"sewer-metal-02","tpage_name":"sewl-vis-tfrag"}],[74907690,{"idx":42,"name":"sewer-pipe-rim-05","tpage_name":"sewl-vis-tfrag"}],[74907689,{"idx":41,"name":"sewer-plate-04","tpage_name":"sewl-vis-tfrag"}],[74907688,{"idx":40,"name":"sewer-block-01","tpage_name":"sewl-vis-tfrag"}],[74907685,{"idx":37,"name":"sewer-pipe-rim-03","tpage_name":"sewl-vis-tfrag"}],[74907684,{"idx":36,"name":"sewer-brick-roof-01","tpage_name":"sewl-vis-tfrag"}],[74907682,{"idx":34,"name":"sewer-metal-block-01","tpage_name":"sewl-vis-tfrag"}],[74907681,{"idx":33,"name":"sewer-metal-block-02","tpage_name":"sewl-vis-tfrag"}],[74907680,{"idx":32,"name":"sewer-pipe-rim-01","tpage_name":"sewl-vis-tfrag"}],[74907679,{"idx":31,"name":"sewer-pipe-02-edge-01","tpage_name":"sewl-vis-tfrag"}],[74907678,{"idx":30,"name":"sewer-pipe-01","tpage_name":"sewl-vis-tfrag"}],[74907677,{"idx":29,"name":"sewer-pipe-rim-10","tpage_name":"sewl-vis-tfrag"}],[74907676,{"idx":28,"name":"sewer-pipe-rim-09","tpage_name":"sewl-vis-tfrag"}],[74907675,{"idx":27,"name":"sewer-metal-block-06-hitweak","tpage_name":"sewl-vis-tfrag"}],[74907674,{"idx":26,"name":"sewer-flat-pipe-01","tpage_name":"sewl-vis-tfrag"}],[74907673,{"idx":25,"name":"sewer-metal-floor-02","tpage_name":"sewl-vis-tfrag"}],[50659369,{"idx":41,"name":"fora-butress-metal-02","tpage_name":"foresta-vis-tfrag"}],[50724882,{"idx":18,"name":"fora-precursor-tube-ring-02","tpage_name":"foresta-vis-pris"}],[50724864,{"idx":0,"name":"airlock-door-bolt","tpage_name":"foresta-vis-pris"}],[49610766,{"idx":14,"name":"sewer-pipe-02-edge-01","tpage_name":"sewf-vis-tfrag"}],[49610765,{"idx":13,"name":"sewer-pipe-01","tpage_name":"sewf-vis-tfrag"}],[49610764,{"idx":12,"name":"sewer-stone-arch-01","tpage_name":"sewf-vis-tfrag"}],[49610763,{"idx":11,"name":"sewer-metal-block-07","tpage_name":"sewf-vis-tfrag"}],[49545270,{"idx":54,"name":"squid-drabgun","tpage_name":"sewe-vis-pris"}],[49545269,{"idx":53,"name":"kg-grunt-rim-03","tpage_name":"sewe-vis-pris"}],[49545268,{"idx":52,"name":"kg-grunt-rim-02","tpage_name":"sewe-vis-pris"}],[49545267,{"idx":51,"name":"kg-grunt-rim-01","tpage_name":"sewe-vis-pris"}],[49545266,{"idx":50,"name":"kg-grunt-cable-01","tpage_name":"sewe-vis-pris"}],[86507520,{"idx":0,"name":"bam-eyelight","tpage_name":"lbombbot-pris"}],[49545264,{"idx":48,"name":"widow-pod-gun-metal","tpage_name":"sewe-vis-pris"}],[49545263,{"idx":47,"name":"widow-dull-inards","tpage_name":"sewe-vis-pris"}],[49545261,{"idx":45,"name":"squid-bulb-sm","tpage_name":"sewe-vis-pris"}],[49545260,{"idx":44,"name":"roboguard-shouldershield","tpage_name":"sewe-vis-pris"}],[49545254,{"idx":38,"name":"cguardgame-metallight-01small","tpage_name":"sewe-vis-pris"}],[49545251,{"idx":35,"name":"cguard1-lens","tpage_name":"sewe-vis-pris"}],[60686362,{"idx":26,"name":"minc-platfrom-metal-01","tpage_name":"mineb-vis-tfrag"}],[56950822,{"idx":38,"name":"waspala-column-base","tpage_name":"waspala-tfrag"}],[49479701,{"idx":21,"name":"sewer-waterfall-02-e","tpage_name":"sewe-vis-water"}],[50724881,{"idx":17,"name":"fora-precursor-small-groove","tpage_name":"foresta-vis-pris"}],[60686361,{"idx":25,"name":"minc-light","tpage_name":"mineb-vis-tfrag"}],[56950821,{"idx":37,"name":"waspala-cliff-rock-01","tpage_name":"waspala-tfrag"}],[60686360,{"idx":24,"name":"minb-brok-floor","tpage_name":"mineb-vis-tfrag"}],[56950820,{"idx":36,"name":"waspala-cliff-rock-02","tpage_name":"waspala-tfrag"}],[60686359,{"idx":23,"name":"minb-brok-edge-02","tpage_name":"mineb-vis-tfrag"}],[56950819,{"idx":35,"name":"waspala-cliff-rock-top","tpage_name":"waspala-tfrag"}],[60686355,{"idx":19,"name":"minb-idol-02","tpage_name":"mineb-vis-tfrag"}],[56950815,{"idx":31,"name":"waspala-fountain-bar","tpage_name":"waspala-tfrag"}],[60686354,{"idx":18,"name":"minb-stone23","tpage_name":"mineb-vis-tfrag"}],[56950814,{"idx":30,"name":"waspala-column-plate","tpage_name":"waspala-tfrag"}],[60686353,{"idx":17,"name":"minb-stone22","tpage_name":"mineb-vis-tfrag"}],[56950813,{"idx":29,"name":"waspala-fire-holder02","tpage_name":"waspala-tfrag"}],[60686352,{"idx":16,"name":"minb-stone15","tpage_name":"mineb-vis-tfrag"}],[56950812,{"idx":28,"name":"waspala-fire-holder01","tpage_name":"waspala-tfrag"}],[117637205,{"idx":85,"name":"jakc-skirt","tpage_name":"destrack-pris"}],[117637204,{"idx":84,"name":"jakc-scarfhanging","tpage_name":"destrack-pris"}],[117637203,{"idx":83,"name":"jakc-scarf","tpage_name":"destrack-pris"}],[117637202,{"idx":82,"name":"jakc-lens","tpage_name":"destrack-pris"}],[118489089,{"idx":1,"name":"charHOLD","tpage_name":"deshunt-pris2"}],[101056569,{"idx":57,"name":"klever-horn","tpage_name":"ljakcklv-pris"}],[117637191,{"idx":71,"name":"daxtergoggles","tpage_name":"destrack-pris"}],[49414190,{"idx":46,"name":"cguardgame-shoebottom","tpage_name":"sewc-vis-pris"}],[101056561,{"idx":49,"name":"klever-gunmetal-01","tpage_name":"ljakcklv-pris"}],[49414186,{"idx":42,"name":"cguardgame-metallight-01small","tpage_name":"sewc-vis-pris"}],[101056557,{"idx":45,"name":"klever-face-01","tpage_name":"ljakcklv-pris"}],[50659364,{"idx":36,"name":"fora-supportmetall","tpage_name":"foresta-vis-tfrag"}],[49414184,{"idx":40,"name":"cguardgame-metaledark-02","tpage_name":"sewc-vis-pris"}],[101056555,{"idx":43,"name":"klever-eye","tpage_name":"ljakcklv-pris"}],[61669385,{"idx":9,"name":"for-bark","tpage_name":"foresta-vis-shrub"}],[61669384,{"idx":8,"name":"fora-shrub-weed","tpage_name":"foresta-vis-shrub"}],[61669383,{"idx":7,"name":"fora-shrub-cattail","tpage_name":"foresta-vis-shrub"}],[61669382,{"idx":6,"name":"fora-shrub-asian-grass","tpage_name":"foresta-vis-shrub"}],[8912950,{"idx":54,"name":"fort-door-metal","tpage_name":"ctysluma-vis-tfrag"}],[8912949,{"idx":53,"name":"sewer-rubber-rim-01","tpage_name":"ctysluma-vis-tfrag"}],[8912948,{"idx":52,"name":"city-slum-stonewall-bricks","tpage_name":"ctysluma-vis-tfrag"}],[8912947,{"idx":51,"name":"city-dirtywood","tpage_name":"ctysluma-vis-tfrag"}],[8912940,{"idx":44,"name":"fort-exhaust-body","tpage_name":"ctysluma-vis-tfrag"}],[8912939,{"idx":43,"name":"city-fort-yellow","tpage_name":"ctysluma-vis-tfrag"}],[8912934,{"idx":38,"name":"city-wall-plain-bottom","tpage_name":"ctysluma-vis-tfrag"}],[8912932,{"idx":36,"name":"city-slum-bigpipe-03","tpage_name":"ctysluma-vis-tfrag"}],[8912930,{"idx":34,"name":"city-side-support","tpage_name":"ctysluma-vis-tfrag"}],[49283111,{"idx":39,"name":"sew-laserturret-top","tpage_name":"sewd-vis-pris"}],[16121867,{"idx":11,"name":"city-farm-tree-bark-01","tpage_name":"ctyfarma-vis-tfrag"}],[49283110,{"idx":38,"name":"sew-laserturret-red","tpage_name":"sewd-vis-pris"}],[16121866,{"idx":10,"name":"city-farm-aquaduct-glass-02","tpage_name":"ctyfarma-vis-tfrag"}],[49283109,{"idx":37,"name":"sew-laserturret-pole","tpage_name":"sewd-vis-pris"}],[17367045,{"idx":5,"name":"map-ctyportf","tpage_name":"ctyport-minimap"}],[16121865,{"idx":9,"name":"city-farm-bigpipe-01","tpage_name":"ctyfarma-vis-tfrag"}],[49283108,{"idx":36,"name":"sew-laserturret-center","tpage_name":"sewd-vis-pris"}],[17367044,{"idx":4,"name":"map-ctyporte","tpage_name":"ctyport-minimap"}],[16121864,{"idx":8,"name":"city-farm-metal-bracket-02","tpage_name":"ctyfarma-vis-tfrag"}],[49283107,{"idx":35,"name":"sew-laserturret-bot-lod1","tpage_name":"sewd-vis-pris"}],[17367043,{"idx":3,"name":"map-ctyportd","tpage_name":"ctyport-minimap"}],[16121863,{"idx":7,"name":"city-farm-smalldirt","tpage_name":"ctyfarma-vis-tfrag"}],[49283106,{"idx":34,"name":"sew-laserturret-bot","tpage_name":"sewd-vis-pris"}],[17367042,{"idx":2,"name":"map-ctyportc","tpage_name":"ctyport-minimap"}],[16121862,{"idx":6,"name":"city-farm-stone-border-02","tpage_name":"ctyfarma-vis-tfrag"}],[49283104,{"idx":32,"name":"sew-laserturret-2","tpage_name":"sewd-vis-pris"}],[17367040,{"idx":0,"name":"map-ctyporta","tpage_name":"ctyport-minimap"}],[16121860,{"idx":4,"name":"city-farm-sprinkle-metalbase","tpage_name":"ctyfarma-vis-tfrag"}],[49283103,{"idx":31,"name":"sew-laserturret-1","tpage_name":"sewd-vis-pris"}],[16121859,{"idx":3,"name":"city-farm-wall-top","tpage_name":"ctyfarma-vis-tfrag"}],[49283102,{"idx":30,"name":"sew-gun-round-cap-01","tpage_name":"sewd-vis-pris"}],[16121858,{"idx":2,"name":"city-farm-stonewall-base-01","tpage_name":"ctyfarma-vis-tfrag"}],[49283101,{"idx":29,"name":"sew-gun-round-02","tpage_name":"sewd-vis-pris"}],[16121857,{"idx":1,"name":"city-farm-stone-wall-01","tpage_name":"ctyfarma-vis-tfrag"}],[49283100,{"idx":28,"name":"sew-gun-round-01","tpage_name":"sewd-vis-pris"}],[16121856,{"idx":0,"name":"city-farm-stonewall-bricks","tpage_name":"ctyfarma-vis-tfrag"}],[49283099,{"idx":27,"name":"sew-gun-rim-05","tpage_name":"sewd-vis-pris"}],[49283098,{"idx":26,"name":"sew-gun-rim-04","tpage_name":"sewd-vis-pris"}],[49283097,{"idx":25,"name":"sew-gun-rim-03","tpage_name":"sewd-vis-pris"}],[49283096,{"idx":24,"name":"sew-gun-rim-02","tpage_name":"sewd-vis-pris"}],[49283095,{"idx":23,"name":"sew-gun-rim-01","tpage_name":"sewd-vis-pris"}],[49283094,{"idx":22,"name":"sew-gun-panel-06","tpage_name":"sewd-vis-pris"}],[49283093,{"idx":21,"name":"sew-gun-panel-05","tpage_name":"sewd-vis-pris"}],[49283092,{"idx":20,"name":"sew-gun-panel-03","tpage_name":"sewd-vis-pris"}],[49283091,{"idx":19,"name":"sew-gun-panel-02","tpage_name":"sewd-vis-pris"}],[49283090,{"idx":18,"name":"sew-gun-panel-01","tpage_name":"sewd-vis-pris"}],[100925461,{"idx":21,"name":"king-precursermetal-plain","tpage_name":"ljkdmpk-pris2"}],[49283089,{"idx":17,"name":"sew-gun-drum-01","tpage_name":"sewd-vis-pris"}],[100925460,{"idx":20,"name":"king-precursermetal-decor","tpage_name":"ljkdmpk-pris2"}],[49283088,{"idx":16,"name":"sew-gun-body-01","tpage_name":"sewd-vis-pris"}],[100925459,{"idx":19,"name":"king-lgblackstrap","tpage_name":"ljkdmpk-pris2"}],[49283087,{"idx":15,"name":"sew-gun-barrel-01","tpage_name":"sewd-vis-pris"}],[100925458,{"idx":18,"name":"king-leg","tpage_name":"ljkdmpk-pris2"}],[49283086,{"idx":14,"name":"common-black","tpage_name":"sewd-vis-pris"}],[71630871,{"idx":23,"name":"king-precursermetal-trim2","tpage_name":"ldampksm-pris2"}],[49217549,{"idx":13,"name":"sewer-water-wave-01-c","tpage_name":"sewc-vis-water"}],[49152017,{"idx":17,"name":"sew-wallswitch-red-01","tpage_name":"sewd-vis-water"}],[49152016,{"idx":16,"name":"sew-wallswitch-green-01","tpage_name":"sewd-vis-water"}],[49152015,{"idx":15,"name":"sewer-water-wave-02-d-dest","tpage_name":"sewd-vis-water"}],[49152014,{"idx":14,"name":"sewer-water-highlight-01-d","tpage_name":"sewd-vis-water"}],[49152013,{"idx":13,"name":"sewer-water-wave-02-d","tpage_name":"sewd-vis-water"}],[49152006,{"idx":6,"name":"sewer-water-wave-01-d","tpage_name":"sewd-vis-water"}],[49152001,{"idx":1,"name":"sewer-water-01-d-dest","tpage_name":"sewd-vis-water"}],[49021000,{"idx":72,"name":"sewer-metal-02","tpage_name":"sewe-vis-tfrag"}],[62717980,{"idx":28,"name":"darkguard-shouldershield","tpage_name":"ctypesa-pris"}],[62717970,{"idx":18,"name":"cguardgame-metallight-02","tpage_name":"ctypesa-pris"}],[49020990,{"idx":62,"name":"sewer-brick-block-10","tpage_name":"sewe-vis-tfrag"}],[62717969,{"idx":17,"name":"cguardgame-metallight-01small","tpage_name":"ctypesa-pris"}],[49020989,{"idx":61,"name":"sewer-brick-block-11","tpage_name":"sewe-vis-tfrag"}],[62717968,{"idx":16,"name":"cguardgame-metalered-01","tpage_name":"ctypesa-pris"}],[49020988,{"idx":60,"name":"sewer-stone-arch-02","tpage_name":"sewe-vis-tfrag"}],[63963140,{"idx":4,"name":"wang_4","tpage_name":"desert-hfrag"}],[62717960,{"idx":8,"name":"cguardgame-gunboltlight","tpage_name":"ctypesa-pris"}],[49020980,{"idx":52,"name":"sewer-round-01","tpage_name":"sewe-vis-tfrag"}],[71434294,{"idx":54,"name":"wstd-scaffold-wall-01","tpage_name":"wasstadc-tfrag"}],[49020967,{"idx":39,"name":"sewer-metal-block-06","tpage_name":"sewe-vis-tfrag"}],[49020966,{"idx":38,"name":"sewer-hall-light-01","tpage_name":"sewe-vis-tfrag"}],[55246865,{"idx":17,"name":"wascity-awning-b","tpage_name":"wascityb-vis-shrub"}],[49020965,{"idx":37,"name":"sewer-plate-04","tpage_name":"sewe-vis-tfrag"}],[55246864,{"idx":16,"name":"wascity-ground-stain-satellite-01","tpage_name":"wascityb-vis-shrub"}],[49020964,{"idx":36,"name":"sewer-pipe-rim-07","tpage_name":"sewe-vis-tfrag"}],[55246863,{"idx":15,"name":"wascity-cactus-flower","tpage_name":"wascityb-vis-shrub"}],[49020963,{"idx":35,"name":"sewer-pipe-rim-10","tpage_name":"sewe-vis-tfrag"}],[49020962,{"idx":34,"name":"sewer-pipe-02-edge-01","tpage_name":"sewe-vis-tfrag"}],[55246862,{"idx":14,"name":"wascity-cactus-green","tpage_name":"wascityb-vis-shrub"}],[49020961,{"idx":33,"name":"sewer-pipe-rim-01","tpage_name":"sewe-vis-tfrag"}],[55246861,{"idx":13,"name":"wascitya-stone-top","tpage_name":"wascityb-vis-shrub"}],[71434282,{"idx":42,"name":"wstd-fight-plat-lrg-floor-01","tpage_name":"wasstadc-tfrag"}],[49020960,{"idx":32,"name":"sewer-pipe-01","tpage_name":"sewe-vis-tfrag"}],[55246860,{"idx":12,"name":"wascity-overlay-crack","tpage_name":"wascityb-vis-shrub"}],[49020959,{"idx":31,"name":"sewer-pipe-rim-05b","tpage_name":"sewe-vis-tfrag"}],[55246859,{"idx":11,"name":"wascity-overlay-tribal-3","tpage_name":"wascityb-vis-shrub"}],[49020958,{"idx":30,"name":"sewer-pipe-rim-05","tpage_name":"sewe-vis-tfrag"}],[55246858,{"idx":10,"name":"wascity-overlay-tribal-1","tpage_name":"wascityb-vis-shrub"}],[49020956,{"idx":28,"name":"sewer-brick-block-02","tpage_name":"sewe-vis-tfrag"}],[55246856,{"idx":8,"name":"wascity-shrub-orange-01","tpage_name":"wascityb-vis-shrub"}],[49020955,{"idx":27,"name":"sewer-pool-rim-02","tpage_name":"sewe-vis-tfrag"}],[55246855,{"idx":7,"name":"wascity-ditch-wall-top-to-ground","tpage_name":"wascityb-vis-shrub"}],[49020952,{"idx":24,"name":"sewer-concrete-edge-02","tpage_name":"sewe-vis-tfrag"}],[55246852,{"idx":4,"name":"wascity-blotch-withstreaks-01","tpage_name":"wascityb-vis-shrub"}],[49020951,{"idx":23,"name":"sewer-metal-03","tpage_name":"sewe-vis-tfrag"}],[55246851,{"idx":3,"name":"wascity-overlay-bullethole-c","tpage_name":"wascityb-vis-shrub"}],[49020950,{"idx":22,"name":"sewer-pipe-small-02","tpage_name":"sewe-vis-tfrag"}],[55246850,{"idx":2,"name":"wascity-overlay-bullethole-b","tpage_name":"wascityb-vis-shrub"}],[49020949,{"idx":21,"name":"sewer-pipe-rim-09","tpage_name":"sewe-vis-tfrag"}],[55246849,{"idx":1,"name":"wascity-overlay-bullethole-a","tpage_name":"wascityb-vis-shrub"}],[49020948,{"idx":20,"name":"sewer-pipe-02","tpage_name":"sewe-vis-tfrag"}],[55246848,{"idx":0,"name":"wascity-stain-window-01","tpage_name":"wascityb-vis-shrub"}],[71434264,{"idx":24,"name":"wstd-stands-black","tpage_name":"wasstadc-tfrag"}],[49020934,{"idx":6,"name":"sewer-pipe-rim-03","tpage_name":"sewe-vis-tfrag"}],[49020932,{"idx":4,"name":"sewer-metal-block-04","tpage_name":"sewe-vis-tfrag"}],[49020930,{"idx":2,"name":"sewer-metal-block-01","tpage_name":"sewe-vis-tfrag"}],[71303173,{"idx":5,"name":"sig-eyelid","tpage_name":"ldamsig-pris2"}],[48889933,{"idx":77,"name":"sewer-stone-arch-01","tpage_name":"sewd-vis-tfrag"}],[48889917,{"idx":61,"name":"sewer-light-flourescent-01","tpage_name":"sewd-vis-tfrag"}],[55115817,{"idx":41,"name":"wascity-palm-leaf-worn","tpage_name":"wascityb-vis-tfrag"}],[71303230,{"idx":62,"name":"king-wristband","tpage_name":"ldamsig-pris2"}],[71303210,{"idx":42,"name":"king-greenmetalplain","tpage_name":"ldamsig-pris2"}],[106364959,{"idx":31,"name":"veger-stickwrap","tpage_name":"mined-pris2"}],[71303209,{"idx":41,"name":"king-greenmetal","tpage_name":"ldamsig-pris2"}],[106364958,{"idx":30,"name":"veger-sleevelower","tpage_name":"mined-pris2"}],[71303208,{"idx":40,"name":"king-finger","tpage_name":"ldamsig-pris2"}],[106364957,{"idx":29,"name":"veger-sleeve","tpage_name":"mined-pris2"}],[71303207,{"idx":39,"name":"king-face-01","tpage_name":"ldamsig-pris2"}],[73203712,{"idx":0,"name":"fora-dirt","tpage_name":"forestb-vis-alpha"}],[106364956,{"idx":28,"name":"veger-shoulderplatemetal","tpage_name":"mined-pris2"}],[55115785,{"idx":9,"name":"wascity-wallspike-2-ground-01","tpage_name":"wascityb-vis-tfrag"}],[48889885,{"idx":29,"name":"sewer-pipe-02-edge-01","tpage_name":"sewd-vis-tfrag"}],[71303206,{"idx":38,"name":"king-earing","tpage_name":"ldamsig-pris2"}],[106364955,{"idx":27,"name":"veger-shoulderplate","tpage_name":"mined-pris2"}],[55115784,{"idx":8,"name":"wascity-steel-bar","tpage_name":"wascityb-vis-tfrag"}],[48889884,{"idx":28,"name":"sewer-pipe-rim-01","tpage_name":"sewd-vis-tfrag"}],[106364954,{"idx":26,"name":"veger-shoebottom","tpage_name":"mined-pris2"}],[55115783,{"idx":7,"name":"wascity-greenmetal-tube","tpage_name":"wascityb-vis-tfrag"}],[48889883,{"idx":27,"name":"sewer-pipe-01","tpage_name":"sewd-vis-tfrag"}],[106364953,{"idx":25,"name":"veger-scarf","tpage_name":"mined-pris2"}],[55115782,{"idx":6,"name":"wascity-metal-spike-01","tpage_name":"wascityb-vis-tfrag"}],[48889882,{"idx":26,"name":"sewer-brick-block-06","tpage_name":"sewd-vis-tfrag"}],[106364950,{"idx":22,"name":"veger-pages","tpage_name":"mined-pris2"}],[106364948,{"idx":20,"name":"veger-iris","tpage_name":"mined-pris2"}],[106364947,{"idx":19,"name":"veger-hand","tpage_name":"mined-pris2"}],[106364946,{"idx":18,"name":"veger-hair","tpage_name":"mined-pris2"}],[106364945,{"idx":17,"name":"veger-gold","tpage_name":"mined-pris2"}],[106364944,{"idx":16,"name":"veger-fingertop","tpage_name":"mined-pris2"}],[106364943,{"idx":15,"name":"veger-fingerbottom","tpage_name":"mined-pris2"}],[106364942,{"idx":14,"name":"veger-face","tpage_name":"mined-pris2"}],[75759669,{"idx":53,"name":"onin-eye","tpage_name":"onintent-pris"}],[57081969,{"idx":113,"name":"palm-speaker","tpage_name":"waspala-pris"}],[81985569,{"idx":33,"name":"marauder-skirt-02","tpage_name":"wasstadc-pris"}],[26542187,{"idx":107,"name":"wstd-stands-plateedge","tpage_name":"wasstada-tfrag"}],[26542186,{"idx":106,"name":"wstd-spear02","tpage_name":"wasstada-tfrag"}],[81985567,{"idx":31,"name":"marauder-skin-nipple","tpage_name":"wasstadc-pris"}],[26542185,{"idx":105,"name":"wstd-throne-wall02","tpage_name":"wasstada-tfrag"}],[26542184,{"idx":104,"name":"wstd-throne-floor02","tpage_name":"wasstada-tfrag"}],[60620934,{"idx":134,"name":"pecker-body-01","tpage_name":"minea-vis-pris"}],[94240794,{"idx":26,"name":"palcab-lowres-mark-roof-01","tpage_name":"intpfall-vis-tfrag"}],[48627767,{"idx":55,"name":"sewer-bolt-side-01","tpage_name":"sewb-vis-tfrag"}],[61079567,{"idx":15,"name":"grunt-skin-03","tpage_name":"minec-vis-pris"}],[64815107,{"idx":3,"name":"minc-blue-paint-rust02","tpage_name":"minea-vis-shrub"}],[61079566,{"idx":14,"name":"grunt-skin-02","tpage_name":"minec-vis-pris"}],[48627766,{"idx":54,"name":"sewer-pipe-rim-07-hitweak","tpage_name":"sewb-vis-tfrag"}],[64815106,{"idx":2,"name":"minc-plate-01","tpage_name":"minea-vis-shrub"}],[61079565,{"idx":13,"name":"grunt-skin-01","tpage_name":"minec-vis-pris"}],[48627765,{"idx":53,"name":"sewer-nut-01","tpage_name":"sewb-vis-tfrag"}],[64815105,{"idx":1,"name":"minb-stone26","tpage_name":"minea-vis-shrub"}],[61079564,{"idx":12,"name":"grunt-metal-01","tpage_name":"minec-vis-pris"}],[48627764,{"idx":52,"name":"sewer-scaffold-02","tpage_name":"sewb-vis-tfrag"}],[64815104,{"idx":0,"name":"minc-rust-01","tpage_name":"minea-vis-shrub"}],[92274697,{"idx":9,"name":"vehicle-cap-pin-01","tpage_name":"desrace2-pris"}],[73596997,{"idx":69,"name":"sewer-stone-newarch-01","tpage_name":"sewi-vis-tfrag"}],[38731957,{"idx":181,"name":"femcher2_16","tpage_name":"wasstada-sprite"}],[43647016,{"idx":40,"name":"fruit1","tpage_name":"waswide-sprite"}],[48627736,{"idx":24,"name":"sewer-metal-03","tpage_name":"sewb-vis-tfrag"}],[52297785,{"idx":57,"name":"freehq-projector02","tpage_name":"freehq-tfrag"}],[67239945,{"idx":9,"name":"vin-floor-02","tpage_name":"vinroom-vis-tfrag"}],[48562245,{"idx":69,"name":"jakchires-eyelid","tpage_name":"sewa-vis-pris"}],[62259225,{"idx":25,"name":"wing02","tpage_name":"ctycarc-pris"}],[61014045,{"idx":29,"name":"minc-light-red","tpage_name":"minec-vis-shrub"}],[57278505,{"idx":41,"name":"metalflut-leatherstrap-c","tpage_name":"waswide-vis-pris"}],[52297782,{"idx":54,"name":"freehq-monitor06","tpage_name":"freehq-tfrag"}],[48562242,{"idx":66,"name":"jakchires-clips","tpage_name":"sewa-vis-pris"}],[67239942,{"idx":6,"name":"vin-control-panel-01","tpage_name":"vinroom-vis-tfrag"}],[62259222,{"idx":22,"name":"stripe03","tpage_name":"ctycarc-pris"}],[61014042,{"idx":26,"name":"minc-screw-01","tpage_name":"minec-vis-shrub"}],[57278502,{"idx":38,"name":"environment-oldmetal","tpage_name":"waswide-vis-pris"}],[52297780,{"idx":52,"name":"freehq-monitor07","tpage_name":"freehq-tfrag"}],[67239940,{"idx":4,"name":"vin-black","tpage_name":"vinroom-vis-tfrag"}],[48562240,{"idx":64,"name":"jakchires-brwnleather","tpage_name":"sewa-vis-pris"}],[62259220,{"idx":20,"name":"rail01","tpage_name":"ctycarc-pris"}],[61014040,{"idx":24,"name":"minc-blue-paint-rust05","tpage_name":"minec-vis-shrub"}],[52297779,{"idx":51,"name":"freehq-monitor02","tpage_name":"freehq-tfrag"}],[67239939,{"idx":3,"name":"strip-vin-rim-02","tpage_name":"vinroom-vis-tfrag"}],[48562239,{"idx":63,"name":"jakchires-brownstrap","tpage_name":"sewa-vis-pris"}],[62259219,{"idx":19,"name":"post01","tpage_name":"ctycarc-pris"}],[61014039,{"idx":23,"name":"minc-metal-grate-01","tpage_name":"minec-vis-shrub"}],[52297778,{"idx":50,"name":"freehq-wal-plate03","tpage_name":"freehq-tfrag"}],[67239938,{"idx":2,"name":"strip-vin-pipe-01","tpage_name":"vinroom-vis-tfrag"}],[48562238,{"idx":62,"name":"jakchires-blackstrap","tpage_name":"sewa-vis-pris"}],[62259218,{"idx":18,"name":"lightCase01","tpage_name":"ctycarc-pris"}],[61014038,{"idx":22,"name":"minc-blue-paint-safe-rust04","tpage_name":"minec-vis-shrub"}],[57278498,{"idx":34,"name":"citn-allleatherstrap","tpage_name":"waswide-vis-pris"}],[60882987,{"idx":43,"name":"min-blue-paint-rust01","tpage_name":"mineb-vis-pris"}],[55312412,{"idx":28,"name":"city-mark-wood-plain","tpage_name":"wascityb-vis-pris"}],[62783492,{"idx":4,"name":"grunt-skin-01","tpage_name":"ctypepb-pris"}],[11141121,{"idx":1,"name":"sign-square-a","tpage_name":"ctyslumc-sprite"}],[60882984,{"idx":40,"name":"minc-metal-grate-01","tpage_name":"mineb-vis-pris"}],[55312409,{"idx":25,"name":"city-mark-rope-mesh-01","tpage_name":"wascityb-vis-pris"}],[62783489,{"idx":1,"name":"grunt-gem-01","tpage_name":"ctypepb-pris"}],[60882983,{"idx":39,"name":"minc-light-smallcase","tpage_name":"mineb-vis-pris"}],[60882982,{"idx":38,"name":"minc-blue-paint-safe-rust04","tpage_name":"mineb-vis-pris"}],[60882975,{"idx":31,"name":"monster-frog-toenails","tpage_name":"mineb-vis-pris"}],[49152009,{"idx":9,"name":"sewer-water-still-01-d-dest","tpage_name":"sewd-vis-water"}],[47906829,{"idx":13,"name":"nsta-cave-top-platform-shrub","tpage_name":"nsta-vis-shrub"}],[49152008,{"idx":8,"name":"sewer-water-wave-01-d-dest","tpage_name":"sewd-vis-water"}],[47906828,{"idx":12,"name":"nsta-cave-sides-shrub","tpage_name":"nsta-vis-shrub"}],[49152007,{"idx":7,"name":"sewer-water-still-01-d","tpage_name":"sewd-vis-water"}],[47906827,{"idx":11,"name":"nst-egg-bulb-01","tpage_name":"nsta-vis-shrub"}],[49152005,{"idx":5,"name":"sewer-water-highlight-01-d-dest","tpage_name":"sewd-vis-water"}],[47906825,{"idx":9,"name":"nsta-rock-shrubs","tpage_name":"nsta-vis-shrub"}],[49152004,{"idx":4,"name":"sewer-water-01-d","tpage_name":"sewd-vis-water"}],[47906824,{"idx":8,"name":"nstab-eggskin","tpage_name":"nsta-vis-shrub"}],[49152003,{"idx":3,"name":"sewer-waterfall-02-d","tpage_name":"sewd-vis-water"}],[47906823,{"idx":7,"name":"nestb-basekor","tpage_name":"nsta-vis-shrub"}],[49152002,{"idx":2,"name":"sewer-waterfall-02-d-dest","tpage_name":"sewd-vis-water"}],[47906822,{"idx":6,"name":"nsta-finger-pipe","tpage_name":"nsta-vis-shrub"}],[47906818,{"idx":2,"name":"nestb-eggskin","tpage_name":"nsta-vis-shrub"}],[47906817,{"idx":1,"name":"nest-fingerback","tpage_name":"nsta-vis-shrub"}],[47906816,{"idx":0,"name":"nsta-transparent","tpage_name":"nsta-vis-shrub"}],[42336268,{"idx":12,"name":"dust-sparkle","tpage_name":"nstb-sprite"}],[42336267,{"idx":11,"name":"crack01","tpage_name":"nstb-sprite"}],[42336265,{"idx":9,"name":"ceiling-dust","tpage_name":"nstb-sprite"}],[42336263,{"idx":7,"name":"flying-gull-05","tpage_name":"nstb-sprite"}],[42336262,{"idx":6,"name":"flying-gull-04","tpage_name":"nstb-sprite"}],[42336261,{"idx":5,"name":"flying-gull-03","tpage_name":"nstb-sprite"}],[92274700,{"idx":12,"name":"vehicle-gun-box-01","tpage_name":"desrace2-pris"}],[38731960,{"idx":184,"name":"femcher2_19","tpage_name":"wasstada-sprite"}],[73597000,{"idx":72,"name":"sewer-block-01-hitweak","tpage_name":"sewi-vis-tfrag"}],[42336260,{"idx":4,"name":"flying-gull-02","tpage_name":"nstb-sprite"}],[92274699,{"idx":11,"name":"vehicle-gas-tank-01","tpage_name":"desrace2-pris"}],[38731959,{"idx":183,"name":"femcher2_18","tpage_name":"wasstada-sprite"}],[73596999,{"idx":71,"name":"sewer-brick-block-04-hitweak","tpage_name":"sewi-vis-tfrag"}],[42336259,{"idx":3,"name":"flying-gull-01","tpage_name":"nstb-sprite"}],[92274698,{"idx":10,"name":"vehicle-chrome-pipe-01","tpage_name":"desrace2-pris"}],[38731958,{"idx":182,"name":"femcher2_17","tpage_name":"wasstada-sprite"}],[73596998,{"idx":70,"name":"sewer-brick-block-10-hitweak","tpage_name":"sewi-vis-tfrag"}],[42336257,{"idx":1,"name":"errol-ring-02","tpage_name":"nstb-sprite"}],[41418826,{"idx":74,"name":"waspala-elevator-metal-plate","tpage_name":"wascitya-vis-tfrag"}],[55115806,{"idx":30,"name":"wascity-metal-piece-03","tpage_name":"wascityb-vis-tfrag"}],[48889906,{"idx":50,"name":"strip-black","tpage_name":"sewd-vis-tfrag"}],[48758810,{"idx":26,"name":"sewer-metal-block-05","tpage_name":"sewc-vis-tfrag"}],[53739530,{"idx":10,"name":"cguardgame-gunleather","tpage_name":"forestb-vis-pris"}],[48758809,{"idx":25,"name":"sewer-flat-pipe-01","tpage_name":"sewc-vis-tfrag"}],[53739529,{"idx":9,"name":"cguardgame-gunhandle","tpage_name":"forestb-vis-pris"}],[48758808,{"idx":24,"name":"sewer-pipe-01","tpage_name":"sewc-vis-tfrag"}],[53739528,{"idx":8,"name":"cguardgame-gunboltlight","tpage_name":"forestb-vis-pris"}],[41418799,{"idx":47,"name":"wascitya-slum-lightwall","tpage_name":"wascitya-vis-tfrag"}],[48889879,{"idx":23,"name":"sewer-concrete-block-02","tpage_name":"sewd-vis-tfrag"}],[41418797,{"idx":45,"name":"wascitya-airlock-metal","tpage_name":"wascitya-vis-tfrag"}],[55115777,{"idx":1,"name":"wascity-stone-bricks-2-plain","tpage_name":"wascityb-vis-tfrag"}],[48889877,{"idx":21,"name":"sewer-brick-block-02","tpage_name":"sewd-vis-tfrag"}],[41418796,{"idx":44,"name":"wascity-ditch-wall-top-to-ground-edging","tpage_name":"wascitya-vis-tfrag"}],[55115776,{"idx":0,"name":"wascity-stone-plain-wall-3","tpage_name":"wascityb-vis-tfrag"}],[48889876,{"idx":20,"name":"sewer-brick-block-01","tpage_name":"sewd-vis-tfrag"}]] diff --git a/decompiler/config/jakx/ntsc_v1/type_casts.jsonc b/decompiler/config/jakx/ntsc_v1/type_casts.jsonc new file mode 100644 index 0000000000..47a2b59b2f --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/type_casts.jsonc @@ -0,0 +1,18 @@ +{ + // "(method 2 array)": [ + // [23, "gp", "(array int32)"], + // [43, "gp", "(array uint32)"], + // [63, "gp", "(array int64)"], + // [83, "gp", "(array uint64)"], + // [102, "gp", "(array int8)"], + // [121, "gp", "(array uint8)"], + // [141, "gp", "(array int16)"], + // [161, "gp", "(array uint16)"], + // [186, "gp", "(array uint128)"], + // [204, "gp", "(array int32)"], + // [223, "gp", "(array float)"], + // [232, "gp", "(array float)"], + // [249, "gp", "(array basic)"], + // [258, "gp", "(array basic)"] + // ], +} diff --git a/decompiler/config/jakx/ntsc_v1/var_names.jsonc b/decompiler/config/jakx/ntsc_v1/var_names.jsonc new file mode 100644 index 0000000000..6de3aaeb93 --- /dev/null +++ b/decompiler/config/jakx/ntsc_v1/var_names.jsonc @@ -0,0 +1,5 @@ +{ + // "(method 0 inline-array-class)": { + // "args": ["allocation", "type-to-make", "count"] + // }, +} diff --git a/decompiler/config/jakx/potentially_useful/anonymous_function_types.jsonc b/decompiler/config/jakx/potentially_useful/anonymous_function_types.jsonc new file mode 100644 index 0000000000..6405d2a531 --- /dev/null +++ b/decompiler/config/jakx/potentially_useful/anonymous_function_types.jsonc @@ -0,0 +1,901 @@ +{ + // NOTE: almost all of these were just copy pasted from jak2 + // so it's impossible to know which are actually needed for jakx... + // commenting out incase there's something here actually needed + + "gkernel": [ + [17, "(function process symbol)"], + [24, "(function process symbol)"], + [26, "(function process symbol)"], + [29, "(function process symbol)"], + [32, "(function process symbol)"], + [34, "(function process symbol)"], + [36, "(function process symbol)"] + ], + "profile": [[3, "(function profile-segment-array profile-collapse none)"]], + "surface-h": [ + [0, "(function none)"], + [1, "(function none)"], + [2, "(function none)"] + ], + "gsound": [ + [1, "(function none)"], + [3, "(function none)"], + [5, "(function none)"] + ], + "joint-mod": [[21, "(function cspace transformq none)"]], + "level-info": [ + [0, "(function int)"], + [1, "(function int)"], + [2, "(function int)"] + ], + "game-info": [ + [11, "(function string none :behavior process)"], + [17, "(function symbol symbol int none :behavior process)"], + [ + 22, + "(function symbol symbol continue-point game-save resetter-spec none :behavior process)" + ] + ], + "game-task": [ + [0, "(function symbol)"], + [1, "(function symbol)"], + [2, "(function symbol)"], + [3, "(function symbol)"] + ], + "settings": [ + [6, "(function engine-pers connection-pers object object symbol)"] + ], + "generic-obs": [[51, "(function symbol :behavior touch-tracker)"]], + "target-util": [ + [2, "(function none :behavior target)"], + [3, "(function none :behavior target)"], + [4, "(function none :behavior manipy)"], + [5, "(function none :behavior manipy)"], + [6, "(function none :behavior target)"] + ], + "logic-target": [ + [0, "(function external-art-buffer none)"], + [1, "(function external-art-buffer none)"] + ], + "sidekick": [[6, "(function object vector int string :behavior sidekick)"]], + "target-handler": [ + [10, "(function handle none :behavior target)"], + [14, "(function none :behavior target)"] + ], + "target-anim": [ + [3, "(function none :behavior target)"], + [4, "(function none :behavior target)"], + [7, "(function none :behavior target)"], + [8, "(function none :behavior target)"], + [13, "(function (pointer time-frame) none :behavior target)"], + [14, "(function none :behavior target)"], + [15, "(function none :behavior target)"], + [16, "(function none :behavior target)"], + [17, "(function none :behavior target)"] + ], + "target": [ + [1, "(function object :behavior target)"], + [7, "(function object :behavior target)"], + [18, "(function process-focusable object :behavior target)"], + [29, "(function surface surface surface int object :behavior target)"], + [35, "(function surface surface surface int object :behavior target)"], + [45, "(function surface surface surface int object :behavior target)"], + [46, "(function surface surface surface int object :behavior target)"], + [77, "(function surface surface surface int object :behavior target)"] + ], + "target2": [ + [12, "(function vector time-frame float object :behavior process)"], + [15, "(function object :behavior target)"], + [23, "(function object :behavior target)"], + [64, "(function symbol :behavior target)"] + ], + "target-lightjak": [[68, "(function symbol object :behavior target)"]], + "target-invisible": [[10, "(function object :behavior target)"]], + "target-death": [ + [1, "(function object :behavior target)"], + [2, "(function object :behavior target)"], + [3, "(function symbol object :behavior target)"], + [4, "(function object :behavior target)"], + [9, "(function handle object :behavior target)"], + [10, "(function object :behavior target)"], + [14, "(function process-drawable object)"], + [25, "(function surface surface surface int object :behavior target)"], + [26, "(function surface surface surface int object :behavior target)"], + [28, "(function continue-point object)"], + [34, "(function process symbol)"], + [35, "(function process symbol)"], + [36, "(function process symbol)"], + [37, "(function process symbol)"], + [38, "(function process symbol)"] + ], + "target-gun": [ + [15, "(function pickup-type pickup-type none :behavior target)"], + [16, "(function pickup-type none :behavior target)"], + [25, "(function surface surface surface int object :behavior target)"] + ], + "target-board": [ + [30, "(function surface surface surface int object :behavior target)"], + [31, "(function surface surface surface int object :behavior target)"], + [32, "(function surface surface surface int object :behavior target)"], + [33, "(function surface surface surface int object :behavior target)"], + [34, "(function surface surface surface int object :behavior target)"] + ], + "vent": [ + [26, "(function vent symbol)"], + [27, "(function vent symbol)"], + [28, "(function vent symbol)"], + [29, "(function vent symbol)"] + ], + "crates": [[35, "(function process symbol)"]], + "collectables": [ + [77, "(function part-tracker vector)"], + [78, "(function part-tracker vector)"] + ], + "trajectory": [[15, "(function trajectory none)"]], + "progress": [[3, "(function int none :behavior process)"]], + "level": [ + [25, "(function level-group int symbol)"], + [7, "(function none)"], + [4, "(function load-state sound-bank-state symbol)"] + ], + "main": [ + [11, "(function int none)"], + [9, "(function none)"], + [8, "(function none)"], + [7, "(function none)"], + [3, "(function symbol :behavior process)"] + ], + "scene": [[4, "(function symbol :behavior scene-player)"]], + "pov-camera": [ + [ + 7, + "(function process int symbol event-message-block object :behavior pov-camera)" + ] + ], + "airlock": [ + [7, "(function object :behavior com-airlock)"], + [11, "(function object :behavior com-airlock)"], + [12, "(function object :behavior com-airlock)"] + ], + "default-menu": [ + [3, "(function object)"], + [4, "(function object)"], + [5, "(function object)"], + [6, "(function object)"], + [7, "(function int debug-menu-msg object)"], + [8, "(function object)"], + [9, "(function object)"], + [10, "(function object)"], + [11, "(function object)"], + [12, "(function object)"], + [13, "(function object)"], + [14, "(function object)"], + [15, "(function object)"], + [16, "(function object)"], + [17, "(function object)"], + [18, "(function int debug-menu-msg float object)"], + [20, "(function object)"], + [21, "(function object)"], + [22, "(function object)"], + [23, "(function object)"], + [24, "(function object)"], + [25, "(function object)"], + [26, "(function object)"], + [27, "(function int debug-menu-msg float object)"], + [28, "(function int debug-menu-msg float object)"], + [29, "(function object)"], + [30, "(function int debug-menu-msg float object)"], + [31, "(function int debug-menu-msg float object)"], + [32, "(function int debug-menu-msg float object)"], + [33, "(function int debug-menu-msg float object)"], + [34, "(function object)"], + [35, "(function object)"], + [36, "(function int debug-menu-msg float object)"], + [37, "(function int debug-menu-msg float object)"], + [38, "(function int debug-menu-msg float object)"], + [39, "(function int debug-menu-msg float object)"], + [40, "(function object)"], + [41, "(function object)"], + [42, "(function int debug-menu-msg float object)"], + [43, "(function int debug-menu-msg float object)"], + [44, "(function int debug-menu-msg float object)"], + [45, "(function int debug-menu-msg float object)"], + [46, "(function int debug-menu-msg float object)"], + [47, "(function int debug-menu-msg float object)"], + [48, "(function int debug-menu-msg float object)"], + [49, "(function int debug-menu-msg float object)"], + [50, "(function int debug-menu-msg float object)"], + [51, "(function int debug-menu-msg float object)"], + [52, "(function int debug-menu-msg float object)"], + [53, "(function int debug-menu-msg float object)"], + [54, "(function int debug-menu-msg float object)"], + [55, "(function int debug-menu-msg float object)"], + [56, "(function int debug-menu-msg float object)"], + [57, "(function int debug-menu-msg float object)"], + [58, "(function int debug-menu-msg float object)"], + [59, "(function int debug-menu-msg float object)"], + [60, "(function int debug-menu-msg float object)"], + [61, "(function int debug-menu-msg float object)"], + [62, "(function int debug-menu-msg float object)"], + [63, "(function int debug-menu-msg float object)"], + [64, "(function int debug-menu-msg float object)"], + [65, "(function int debug-menu-msg float object)"], + [66, "(function int debug-menu-msg float object)"], + [67, "(function int debug-menu-msg float object)"], + [68, "(function int debug-menu-msg float object)"], + [69, "(function int debug-menu-msg float object)"], + [70, "(function int debug-menu-msg float object)"], + [71, "(function int debug-menu-msg float object)"], + [72, "(function int debug-menu-msg float object)"], + [73, "(function int debug-menu-msg float object)"], + [74, "(function int debug-menu-msg float object)"], + [75, "(function int debug-menu-msg float object)"], + [76, "(function int debug-menu-msg float object)"], + [77, "(function int debug-menu-msg float object)"], + [78, "(function int debug-menu-msg float object)"], + [79, "(function int debug-menu-msg float object)"], + [80, "(function int debug-menu-msg float object)"], + [81, "(function int debug-menu-msg float object)"], + [82, "(function int debug-menu-msg float object)"], + [83, "(function int debug-menu-msg float object)"], + [84, "(function int debug-menu-msg float object)"], + [85, "(function int debug-menu-msg float object)"], + [86, "(function int debug-menu-msg float object)"], + [87, "(function int debug-menu-msg float object)"], + [88, "(function int debug-menu-msg float object)"], + [89, "(function int debug-menu-msg float object)"], + [90, "(function int debug-menu-msg float object)"], + [91, "(function int debug-menu-msg float object)"], + [92, "(function int debug-menu-msg float object)"], + [93, "(function int debug-menu-msg float object)"], + [94, "(function int debug-menu-msg float object)"], + [95, "(function int debug-menu-msg float object)"], + [96, "(function int debug-menu-msg float object)"], + [97, "(function int debug-menu-msg float object)"], + [98, "(function int debug-menu-msg float object)"], + [99, "(function int debug-menu-msg float object)"], + [100, "(function int debug-menu-msg float object)"], + [101, "(function int debug-menu-msg float object)"], + [102, "(function int debug-menu-msg float object)"], + [103, "(function int debug-menu-msg float object)"], + [104, "(function int debug-menu-msg float object)"], + [105, "(function int debug-menu-msg float object)"], + [106, "(function int debug-menu-msg float object)"], + [107, "(function int debug-menu-msg float object)"], + [108, "(function int debug-menu-msg float object)"], + [109, "(function int debug-menu-msg float object)"], + [110, "(function int debug-menu-msg float object)"], + [111, "(function int debug-menu-msg float object)"], + [112, "(function int debug-menu-msg float object)"], + [113, "(function int debug-menu-msg float object)"], + [114, "(function int debug-menu-msg float object)"], + [115, "(function int debug-menu-msg float object)"], + [116, "(function int debug-menu-msg float object)"], + [117, "(function int debug-menu-msg float object)"], + [118, "(function int debug-menu-msg float object)"], + [119, "(function int debug-menu-msg float object)"], + [120, "(function int debug-menu-msg float object)"], + [121, "(function int debug-menu-msg float object)"], + [122, "(function int debug-menu-msg float object)"], + [123, "(function int debug-menu-msg float object)"], + [124, "(function int debug-menu-msg float object)"], + [125, "(function int debug-menu-msg float object)"], + [126, "(function int debug-menu-msg float object)"], + [127, "(function int debug-menu-msg float object)"], + [128, "(function int debug-menu-msg float object)"], + [129, "(function int debug-menu-msg float object)"], + [130, "(function int debug-menu-msg float object)"], + [131, "(function int debug-menu-msg float object)"], + [132, "(function int debug-menu-msg float object)"], + [133, "(function int debug-menu-msg float object)"], + [134, "(function int debug-menu-msg float object)"], + [135, "(function int debug-menu-msg float object)"], + [136, "(function int debug-menu-msg float object)"], + [137, "(function int debug-menu-msg float object)"], + [138, "(function int debug-menu-msg float object)"], + [139, "(function int debug-menu-msg float object)"], + [140, "(function int debug-menu-msg float object)"], + [141, "(function int debug-menu-msg float object)"], + [142, "(function int debug-menu-msg float object)"], + [143, "(function int debug-menu-msg float object)"], + [144, "(function int debug-menu-msg float object)"], + [145, "(function int debug-menu-msg float object)"], + [146, "(function int debug-menu-msg float object)"], + [147, "(function int debug-menu-msg float object)"], + [148, "(function int debug-menu-msg float object)"], + [149, "(function int debug-menu-msg float object)"], + [150, "(function int debug-menu-msg float object)"], + [151, "(function int debug-menu-msg float object)"], + [152, "(function int debug-menu-msg float object)"], + [153, "(function int debug-menu-msg float object)"], + [154, "(function int debug-menu-msg float object)"], + [155, "(function int debug-menu-msg float object)"], + [156, "(function int debug-menu-msg float object)"], + [157, "(function int debug-menu-msg float object)"], + [158, "(function int debug-menu-msg float object)"], + [159, "(function int debug-menu-msg float object)"], + [160, "(function object)"], + [161, "(function object)"], + [162, "(function object)"], + [163, "(function object)"], + [164, "(function object)"], + [165, "(function object)"], + [166, "(function object)"], + [167, "(function object)"], + [168, "(function int debug-menu-msg object)"], + [169, "(function int debug-menu-msg object)"], + [170, "(function int debug-menu-msg object)"], + [171, "(function int debug-menu-msg object)"], + [172, "(function int debug-menu-msg object)"], + [173, "(function int debug-menu-msg float object)"], + [174, "(function int debug-menu-msg float object)"], + [175, "(function int debug-menu-msg float object)"], + [176, "(function int debug-menu-msg float object)"], + [177, "(function int debug-menu-msg float object)"], + [178, "(function int debug-menu-msg float object)"], + [179, "(function int debug-menu-msg float object)"], + [180, "(function int debug-menu-msg float object)"], + [181, "(function int debug-menu-msg float object)"], + [182, "(function int debug-menu-msg float object)"], + [183, "(function int debug-menu-msg float object)"], + [184, "(function int debug-menu-msg float object)"], + [185, "(function int debug-menu-msg float object)"], + [186, "(function int debug-menu-msg float object)"], + [187, "(function int debug-menu-msg float object)"], + [188, "(function int debug-menu-msg float object)"], + [189, "(function int debug-menu-msg float object)"], + [190, "(function int debug-menu-msg float object)"], + [191, "(function int debug-menu-msg float object)"], + [192, "(function int debug-menu-msg float object)"], + [193, "(function int debug-menu-msg float object)"], + [194, "(function int debug-menu-msg float object)"], + [195, "(function int debug-menu-msg float object)"], + [196, "(function int debug-menu-msg float object)"], + [197, "(function int debug-menu-msg float object)"], + [198, "(function int debug-menu-msg float object)"], + [199, "(function int debug-menu-msg float object)"], + [200, "(function int debug-menu-msg float object)"], + [201, "(function int debug-menu-msg float object)"], + [202, "(function int debug-menu-msg float object)"], + [203, "(function int debug-menu-msg float object)"], + [204, "(function int debug-menu-msg float object)"], + [205, "(function int debug-menu-msg float object)"], + [206, "(function int debug-menu-msg float object)"], + [207, "(function int debug-menu-msg float object)"], + [208, "(function int debug-menu-msg float object)"], + [209, "(function int debug-menu-msg float object)"], + [210, "(function int debug-menu-msg float object)"], + [211, "(function int debug-menu-msg float object)"], + [212, "(function int debug-menu-msg float object)"], + [213, "(function int debug-menu-msg float object)"], + [214, "(function int debug-menu-msg float object)"], + [215, "(function symbol debug-menu-msg float float object)"], + [216, "(function symbol debug-menu-msg float float object)"], + [217, "(function int debug-menu-msg float object)"], + [218, "(function symbol debug-menu-msg float float object)"], + [219, "(function symbol debug-menu-msg float float object)"], + [220, "(function symbol debug-menu-msg float float object)"], + [221, "(function symbol debug-menu-msg float float object)"], + [222, "(function symbol debug-menu-msg float float object)"], + [223, "(function symbol debug-menu-msg float float object)"], + [224, "(function symbol debug-menu-msg float float object)"], + [225, "(function symbol debug-menu-msg float float object)"], + [226, "(function symbol debug-menu-msg float float object)"], + [227, "(function symbol debug-menu-msg float float object)"], + [228, "(function symbol debug-menu-msg float float object)"], + [229, "(function symbol debug-menu-msg float float object)"], + [230, "(function symbol debug-menu-msg float float object)"], + [231, "(function symbol debug-menu-msg float float object)"], + [232, "(function symbol debug-menu-msg float float object)"], + [233, "(function symbol debug-menu-msg float float object)"], + [234, "(function symbol debug-menu-msg float float object)"], + [235, "(function object)"], + [236, "(function object)"], + [237, "(function symbol debug-menu-msg float float object)"], + [239, "(function symbol debug-menu-msg object)"], + [240, "(function int debug-menu-msg float object)"], + [241, "(function int debug-menu-msg float object)"], + [242, "(function int debug-menu-msg float object)"], + [243, "(function int debug-menu-msg float object)"], + [244, "(function debug-menu debug-menu symbol)"], + [245, "(function debug-menu debug-menu symbol)"], + [246, "(function debug-menu debug-menu symbol)"], + [247, "(function debug-menu debug-menu symbol)"] + ], + "enemy-states": [[38, "(function object :behavior enemy)"]], + "scene-actor": [ + [0, "(function none)"], + [1, "(function flut-npc none)"], + [2, "(function flut-npc art-element)"], + [39, "(function flut-npc flut-npc)"] + ], + "warp-gate": [ + [0, "(function object)"], + [8, "(function string object :behavior process)"], + [12, "(function object :behavior target)"] + ], + "gun-yellow-shot": [[59, "(function handle object :behavior process)"]], + "gun-dark-shot": [ + [25, "(function collide-shape-prim none :behavior gravity-spinner)"], + [34, "(function handle float object :behavior process)"] + ], + "entity": [ + [11, "(function process object)"], + [16, "(function process object)"], + [57, "(function process object)"], + [61, "(function process object)"] + ], + "target-darkjak": [ + [5, "(function object :behavior target)"], + [ + 20, + "(function (pointer float) (pointer int64) (pointer int64) object :behavior target)" + ], + [21, "(function object :behavior target)"] + ], + "memory-usage": [ + [2, "(function process-drawable symbol)"], + [3, "(function basic symbol)"] + ], + "bug-report": [ + [0, "(function object :behavior bug-report)"], + [1, "(function object :behavior bug-report)"] + ], + "relocate": [[7, "(function sparticle-system sparticle-cpuinfo none)"]], + "target-mech": [ + [7, "(function object :behavior target)"], + [8, "(function object :behavior target)"], + [9, "(function object :behavior target)"], + [18, "(function surface surface surface int object :behavior target)"], + [19, "(function surface surface surface int object :behavior target)"] + ], + "mech-states": [[57, "(function object :behavior target)"]], + "target-flut": [ + [14, "(function surface surface surface int object :behavior target)"], + [20, "(function object :behavior target)"], + [21, "(function object :behavior target)"], + [33, "(function process-focusable object)"], + [72, "(function object)"], + [73, "(function object :behavior target)"], + [74, "(function object :behavior target)"] + ], + "nav-control": [ + [0, "(function object nav-control none)"], + [1, "(function object nav-control none)"], + [2, "(function object nav-control none)"], + [3, "(function object nav-control none)"], + [4, "(function object nav-control none)"], + [5, "(function object nav-control none)"], + [6, "(function object nav-control none)"], + [7, "(function object nav-control none)"], + [8, "(function object nav-control none)"], + [9, "(function object nav-control none)"] + ], + "nav-enemy": [[7, "(function enemy-jump-info none :behavior nav-enemy)"]], + "task-control": [ + [53, "(function game-task-node-info symbol object)"], + [54, "(function game-task-node-info object)"], + [67, "(function pair symbol)"] + ], + "merc-death": [[3, "(function time-frame :behavior process-drawable)"]], + "vehicle-states": [ + [10, "(function collide-shape-prim none)"], + [12, "(function collide-shape-prim none)"] + ], + "prebot-states": [[21, "(function vector :behavior prebot)"]], + "wasall-obs": [ + [0, "(function object)"], + [1, "(function object)"], + [2, "(function object)"], + [3, "(function object)"] + ], + "roboguard": [ + [1, "(function cspace transformq none)"], + [2, "(function cspace transformq none)"], + [25, "(function int int float object :behavior roboguard)"], + [45, "(function roboguard symbol object)"] + ], + "vehicle": [ + [6, "(function collide-shape-prim none)"], + [7, "(function collide-shape-prim none)"] + ], + "wvehicle-wheel": [ + [7, "(function collide-shape-prim none)"], + [11, "(function collide-shape-prim none)"], + [17, "(function collide-shape-prim none)"] + ], + "wvehicle-states": [ + [20, "(function collide-shape-prim none)"], + [22, "(function collide-shape-prim none)"] + ], + "wvehicle": [[6, "(function collide-shape-prim none)"]], + "pilot-states": [ + [15, "(function surface surface surface int object :behavior target)"] + ], + "was-squad-control": [[16, "(function object object)"]], + "des-cactus": [[13, "(function collide-shape-prim none)"]], + "desertg-obs": [ + [4, "(function collide-shape-prim none)"], + [7, "(function collide-shape-prim none)"] + ], + "desertf-obs": [[7, "(function none)"]], + "temple-obs2": [ + [43, "(function symbol)"], + [46, "(function object :behavior tpl-watcher)"] + ], + "temple-scenes": [ + [0, "(function none)"], + [1, "(function none)"], + [2, "(function none)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"] + ], + "des-beast-2": [ + [1, "(function cspace transformq none)"], + [2, "(function cspace transformq none)"], + [23, "(function projectile none)"] + ], + "scorpion-gun": [ + [33, "(function cspace transformq none)"], + [34, "(function cspace transformq none)"] + ], + "hover-formation": [ + [10, "(function form-search-info float)"], + [11, "(function int int form-search-info uint)"], + [14, "(function vector object)"], + [15, "(function int int (pointer object) int)"] + ], + "robo-hover": [ + [14, "(function robo-hover cspace float float vector vector int object)"] + ], + "tower-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"] + ], + "forest-kill-plants": [ + [5, "(function engine-pers connection-pers object object symbol)"], + [7, "(function engine-pers connection-pers object object symbol)"] + ], + "forest-tasks": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"], + [14, "(function none :behavior scene-player)"], + [15, "(function none :behavior scene-player)"], + [16, "(function none :behavior scene-player)"], + [17, "(function none :behavior scene-player)"], + [18, "(function none :behavior scene-player)"], + [19, "(function none :behavior scene-player)"], + [20, "(function none :behavior scene-player)"], + [21, "(function none :behavior scene-player)"] + ], + "neo-wasp": [[15, "(function neo-wasp cspace transformq float float none)"]], + "for-turret": [ + [1, "(function cspace transformq none)"], + [2, "(function cspace transformq none)"], + [3, "(function cspace transformq none)"], + [4, "(function cspace transformq none)"] + ], + "volcano-obs": [[38, "(function cspace transformq none)"]], + "spiky-frog": [[9, "(function cspace transformq none)"]], + "volcano-scenes": [ + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"] + ], + "mantis": [ + [8, "(function mantis vector float int vector vector)"], + [15, "(function mantis collide-shape-moving vector symbol)"] + ], + "wcar-faccar": [[9, "(function handle object :behavior process)"]], + "wasstadb-obs": [[5, "(function object)"]], + "arena-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"] + ], + "traffic-engine": [ + [24, "(function traffic-find-segment-struct nav-segment none)"] + ], + "desert-scenes": [ + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"], + [14, "(function none :behavior scene-player)"], + [15, "(function none :behavior scene-player)"], + [16, "(function none :behavior scene-player)"], + [17, "(function none :behavior scene-player)"], + [18, "(function none :behavior scene-player)"], + [19, "(function none :behavior scene-player)"], + [20, "(function none :behavior scene-player)"], + [21, "(function none :behavior scene-player)"], + [22, "(function none :behavior scene-player)"], + [23, "(function none :behavior scene-player)"], + [24, "(function none :behavior scene-player)"], + [25, "(function none :behavior scene-player)"], + [26, "(function none :behavior scene-player)"], + [27, "(function none :behavior scene-player)"], + [28, "(function none :behavior scene-player)"], + [29, "(function none :behavior scene-player)"], + [30, "(function none :behavior scene-player)"], + [31, "(function none :behavior scene-player)"], + [32, "(function none :behavior scene-player)"], + [33, "(function none :behavior scene-player)"], + [34, "(function none :behavior scene-player)"], + [35, "(function none :behavior scene-player)"], + [36, "(function symbol :behavior scene-player)"] + ], + "throne-scenes": [[0, "(function none :behavior scene-player)"]], + "terraformer-setup": [[38, "(function object :behavior manipy)"]], + "mined-scenes": [ + [6, "(function none :behavior scene-player)"], + [7, "(function process-drawable vector none :behavior scene-player)"], + [8, "(function process-drawable vector none :behavior scene-player)"] + ], + "wasteland-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"] + ], + "wasdoors-scenes": [[2, "(function none :behavior scene-player)"]], + "wasdef-manager": [ + [7, "(function process-tree object)"], + [8, "(function process-tree object)"], + [9, "(function process-tree object)"] + ], + "des-burning-bush": [[37, "(function symbol)"]], + "mh-wasp": [ + [9, "(function mh-wasp cspace float float vector vector int none)"] + ], + "mh-bat": [ + [1, "(function cspace transformq none)"], + [21, "(function object :behavior mh-bat)"], + [26, "(function object :behavior mh-bat)"], + [30, "(function object :behavior mh-bat)"], + [34, "(function object :behavior mh-bat)"], + [39, "(function object :behavior mh-bat)"] + ], + "factoryc-obs2": [ + [67, "(function (pointer joint-exploder) :behavior fac-break-floor)"] + ], + "factory-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function process-drawable none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"], + [14, "(function none :behavior scene-player)"], + [15, "(function none :behavior scene-player)"] + ], + "factory-boss-setup": [[37, "(function object :behavior manipy)"]], + "factory-boss-scenes": [ + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"] + ], + "bot": [[25, "(function gui-connection symbol :behavior bot)"]], + "oasis-defense": [ + [4, "(function collide-shape-prim none)"], + [11, "(function collide-shape-prim none)"] + ], + "ash-oasis-course": [ + [0, "(function ashelin-oasis object)"], + [1, "(function ashelin-oasis object)"], + [2, "(function asht-wait-spot ashelin-oasis object)"], + [3, "(function ashelin-oasis symbol)"] + ], + "comb-obs": [ + [16, "(function collide-shape-prim none)"], + [33, "(function collide-shape-prim none)"], + [49, "(function collide-shape-prim none)"] + ], + "comb-sentry": [[19, "(function collide-shape-prim none)"]], + "comb-field": [[5, "(function symbol)"]], + "comb-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"] + ], + "railx-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"] + ], + "title-obs": [ + [20, "(function external-art-buffer int)"], + [22, "(function game-task object)"], + [26, "(function vector :behavior manipy)"], + [30, "(function object :behavior manipy)"] + ], + "ff-squad-control": [ + [6, "(function process-focusable traffic-object-type-info none)"], + [7, "(function process-focusable traffic-object-type-info none)"], + [8, "(function process-focusable traffic-object-type-info none)"], + [9, "(function crimson-guard traffic-object-type-info none)"] + ], + "guard": [ + [31, "(function crimson-guard collide-shape vector symbol)"], + [49, "(function process city-attacker-info int)"] + ], + "guard-tazer": [ + [7, "(function collide-shape-prim none)"], + [13, "(function collide-shape-prim none)"] + ], + "roboguard-city": [ + [13, "(function cspace transformq none)"], + [78, "(function roboguard-city symbol quaternion :behavior process)"] + ], + "ctywide-obs": [[93, "(function symbol)"]], + "ctywide-scenes": [ + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"] + ], + "ctyport-obs": [[5, "(function collide-shape-prim none)"]], + "ctyport-scenes": [ + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"] + ], + "ctyport-attack": [[45, "(function object :behavior process)"]], + "intro-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"], + [14, "(function none :behavior scene-player)"], + [15, "(function none :behavior scene-player)"], + [16, "(function none :behavior scene-player)"], + [17, "(function none :behavior scene-player)"], + [18, "(function none :behavior scene-player)"], + [19, "(function none :behavior scene-player)"], + [20, "(function none :behavior scene-player)"], + [21, "(function none :behavior scene-player)"], + [22, "(function none :behavior scene-player)"], + [23, "(function none :behavior scene-player)"], + [24, "(function none :behavior scene-player)"], + [25, "(function none :behavior scene-player)"], + [26, "(function none :behavior scene-player)"], + [27, "(function none :behavior scene-player)"], + [28, "(function none :behavior scene-player)"], + [29, "(function none :behavior scene-player)"], + [30, "(function none :behavior scene-player)"], + [31, "(function none :behavior scene-player)"], + [32, "(function none :behavior scene-player)"], + [33, "(function none :behavior scene-player)"], + [34, "(function none :behavior scene-player)"], + [35, "(function none :behavior scene-player)"], + [36, "(function none :behavior scene-player)"], + [37, "(function none :behavior scene-player)"], + [38, "(function none :behavior scene-player)"], + [39, "(function none :behavior scene-player)"] + ], + "freehq-scenes": [[0, "(function none :behavior scene-player)"]], + "hiphog-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"] + ], + "rubble-attack": [[7, "(function int)"]], + "rublcst-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"] + ], + "vinroom-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"] + ], + "gungame-manager": [[6, "(function process symbol)"]], + "blow-tower-obs2": [ + [16, "(function bt-mh-flyer cspace float float vector vector int none)"], + [117, "(function bt-roboguard symbol quaternion)"], + [124, "(function cspace transformq none)"] + ], + "cty-blow-tower": [ + [39, "(function collide-shape-prim none)"], + [27, "(function process symbol)"], + [46, "(function collide-shape-prim none)"], + [69, "(function process object)"] + ], + "assault-enemies": [ + [36, "(function assault-crimson-guard city-attacker-info int)"] + ], + "assault-task": [[11, "(function symbol :behavior process)"]], + "precura-obs": [[98, "(function symbol :behavior process)"]], + "precurd-scenes": [ + [0, "(function none :behavior scene-player)"], + [1, "(function none :behavior scene-player)"], + [2, "(function none :behavior scene-player)"], + [3, "(function none :behavior scene-player)"], + [4, "(function none :behavior scene-player)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"], + [14, "(function none :behavior scene-player)"] + ] +} diff --git a/decompiler/config/jakx/potentially_useful/hacks.jsonc b/decompiler/config/jakx/potentially_useful/hacks.jsonc new file mode 100644 index 0000000000..388bcd7087 --- /dev/null +++ b/decompiler/config/jakx/potentially_useful/hacks.jsonc @@ -0,0 +1,785 @@ +{ + //////////////////////////// + // HACKS and ASM FUNCTIONS + //////////////////////////// + + "types_with_bad_inspect_methods": [ + "game-task-event", + "game-task-control", + "predator-edge", + "manipy", + "process-tree", + "vector", + "target", + "vehicle-load-parts" + ], + + "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": [ + ["(method 20 res-lump)", "b0", 2], + ["(method 11 res-lump)", "b0", 1], + ["(method 12 res-lump)", "b0", 1] + ], + + // if a cond with an else case is being used a value in a place where it looks wrong + // you can add the function name to this list and it will more aggressively reject this rewrite. + "aggressively_reject_cond_to_value_rewrite": [ + "(method 10 res-lump)", + "(method 11 res-lump)", + "(method 12 res-lump)" + ], + + // 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": [ + // checking boxed type is different now - these make the cfg stuff sad + "name=", + "(method 77 grenadier)", + "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", + "(method 17 collide-edge-work)", + "(method 10 collide-cache-prim)", + "(method 17 collide-cache)", + "(method 16 ocean)", + + // unknown instructions + // 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 + "(method 10 manipulator)", + "(method 46 ff-squad-control)", + "memcpy", + + // jak x + "get-string-length", + "rand-uint31-gen", + "vector-rotate-y-fast!", + + // jak x decompiler crashes + "(method 13 race-line)", + "(method 23 gui-control)", + "(method 34 sky-work)", + "(method 35 sky-work)", + "(method 11 collide-mesh)", + "target-standard-event-handler", + "display-loop-main", + "(method 22 level)", + "(method 11 medius-cache)", + "water-anim-event-handler" + ], + + // these functions use pairs and the decompiler + // will be less picky about types related to pairs. + "pair_functions_by_name": [ + "ref", + "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)", + "(method 10 level-load-info)", + "(method 29 level-group)", + "(method 26 level-group)", + "(method 19 level)", + "(method 10 level)", + "update-sound-banks", + "level-base-level-name", + "borrow-city-expansion", + "add-want-level", + "level-find-borrow-slot", + "(method 18 level)", + "(method 11 tow-tentacle)", + "city-sound-expand-want-list", + "(method 12 cty-borrow-manager)", + "(method 16 cty-borrow-manager)", + "mark-permanent-holds", + "update-sound-info", + "insert-into-sound-list", + // title-obs + "(anon-function 22 title-obs)", + "cty-faction-evaluate-commands", + "traffic-manager-event-handler", + "(method 20 cty-faction-manager)" + ], + + // 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": { + "~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, + "~33L~S~44L ~S": 2, + "~44L~S ~33L~S": 2, + "~10Htfrag: ~8,,0m": 1, + "~140Hshrub: ~8,,0m": 1, + "~272Halpha: ~8,,0m~%": 1, + "~27Htie: ~8,,0m": 1, + "~140Hfg-tf: ~8,,0m": 1, + "~270Hfg-pr: ~8,,0m~%": 1, + "~10Hfg-wa: ~8,,0m": 1, + "~140Hfg-sh: ~8,,0m": 1, + "~267Hfg-p2: ~8,,0m~%": 1, + "~30Hp2: ~8D~131Hhf: ~8D~%~1K": 2, + "Current time (~d:~d) [mission-percentage ~f~%": 2, + "~0K~Name~130HID~+50HVol~+15HPitch~+24HPan~+18HEar~+24HDist~%": 1, + "~130H~5D ~4D ~5D ~4D ~3D ~5,,0M~%": 5 + }, + + "blocks_ending_in_asm_branch": { + "light-merge!": [1, 2, 3, 5, 7], + "bsp-camera-asm": [1, 2, 3, 4, 6, 7], + "level-remap-texture": [2, 3, 4, 5, 6], + "start-perf-stat-collection": [26], + "end-perf-stat-collection": [0], + + "(method 23 gui-control)": [10, 46, 50, 58, 81, 90, 101], + + "find-offending-process-focusable": [16, 19], + "(method 19 process-drawable)": [0, 2, 3, 7, 10, 11, 30], + "(anon-function 11 game-save)": [0, 3, 4, 5], + "(anon-function 3 game-save)": [15, 16], + "(anon-function 12 lightjak-wings)": [2, 3], + "target-standard-event-handler": [ + 5, 6, 7, 20, 64, 65, 66, 67, 72, 73, 83, 84, 85, 86, 87, 88, 96, 97, 109, + 264, 265, 282, 283, 284, 290, 291, 306, 336, 350, 351, 412, 415, 427 + ], + "(method 9 curve-color-fast)": [0, 1], + "evaluate-color-curve-fast": [0, 1], + "(anon-function 0 target-death)": [71, 131, 132, 137], + "target-board-handler": [15, 16, 20], + "sprite-draw-distorters": [4, 5], + "(method 10 simple-sprite-system)": [0], + "add-debug-box-with-transform": [0, 3], + "add-debug-line-sphere": [0], + "bones-mtx-calc-execute": [19, 7], + "foreground-draw": [0, 1, 126], + "unpack-comp-rle": [1, 3, 5, 6], + "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 16 level)": [0, 1, 5, 13, 14, 15], + "upload-vis-bits": [2, 6, 3, 0], + "set-background-regs!": [4, 3], + "draw-drawable-tree-instance-shrub": [5, 7, 9, 11], + "draw-drawable-tree-instance-tie": [21, 23, 31, 33], + "(method 12 flow-control)": [3, 9, 22], + "(method 26 level-group)": [40, 41, 67], + "borrow-city-expansion": [0, 9, 13, 15, 17], + "dma-add-process-drawable": [0, 77], + "real-main-draw-hook": [120, 122], + "display-frame-finish": [61], + "display-loop-main": [130], + "(method 63 collide-shape-moving)": [1, 2, 14, 49], + "(method 67 collide-shape-moving)": [2, 3, 13], + "(method 51 rigid-body-object)": [5], + "(anon-function 2 rigid-body-queue)": [0, 2], + "(method 15 rigid-body-queue)": [5, 6, 7, 9], + "(method 13 rigid-body-queue)": [5, 6, 7, 9], + "(method 11 rigid-body-queue)": [0, 6, 7, 9], + "(method 10 rigid-body-queue)": [10, 34, 37], + "(method 9 los-control)": [0, 43], + "load-game-text-info": [19, 20, 21], + "draw-actor-marks": [8], + "find-nearest-entity": [7, 9], + "(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 + ], + "update-actor-hash": [0, 2, 4], + "(method 24 grid-hash)": [39, 35, 22, 15], + "(anon-function 4 gun-states)": [ + 18, 128, 129, 131, 133, 135, 138, 139, 143 + ], + "(method 16 sparticle-launch-control)": [25, 35, 36, 48, 62, 65, 100, 102], + "(anon-function 17 target-ladder)": [0, 1], + "command-get-process": [46], + "foreground-draw-hud": [0, 7, 8, 9, 16, 22], + "target-flut-falling-anim-trans": [8, 9], + "(method 12 nav-mesh)": [0, 1, 2, 9], + "(method 20 nav-mesh)": [9], + "(method 21 nav-mesh)": [7], + "(method 29 nav-mesh)": [0, 1, 2, 4], + "(method 33 nav-mesh)": [10, 11, 12, 13], + "(method 34 nav-mesh)": [0, 1, 2, 4], + "(method 35 nav-mesh)": [0, 1, 2, 4], + "(method 36 nav-mesh)": [1, 2], + "(method 37 nav-mesh)": [4], + "(method 45 nav-mesh)": [1, 2], + "(method 46 nav-mesh)": [1, 2, 19, 20], + "(method 48 nav-mesh)": [4, 5, 6, 8], + "(method 49 nav-mesh)": [0, 1, 2, 3, 5], + "(method 18 nav-control)": [11, 12, 19, 20, 31, 34], + "(method 19 nav-control)": [9, 10], + "(method 40 nav-state)": [1, 2], + "point-poly-distance-min": [0, 1, 2, 3, 4, 5, 6, 7, 10], + "find-closest-circle-ray-intersection": [0, 4, 15, 16, 17, 18], + "(method 39 vehicle)": [0, 10, 12, 15], + "(anon-function 7 vehicle-states)": [0, 2], + "(method 11 vehicle-hud-requests)": [0, 6, 7, 10], + "(anon-function 12 neo-juicer)": [29, 30], + "(method 160 neo-grenadier)": [1, 2, 3], + "(method 82 spydroid-orig)": [13], + "(method 118 vehicle)": [3, 4, 7, 8, 9, 10, 17, 26, 30, 31, 33], + "(method 25 squad-control)": [0, 4, 5, 7], + "target-pilot-post": [0, 29], + "(method 36 was-squad-control)": [0, 8, 14, 16], + "(anon-function 6 nst-tasks)": [4, 9, 10, 16, 23, 30], + "(method 33 task-manager-nest-cocoons)": [3, 7, 13, 28], + "(method 90 wvehicle)": [29, 37, 38, 44], + "(anon-function 2 artifact-race)": [40, 55, 56, 57, 65, 66], + "(anon-function 27 course-race)": [6], + "(anon-function 65 temple-obs)": [5, 6], + "(anon-function 5 target-turret)": [0, 1, 2, 3], + "dp-bipedal-consider-attacks": [15, 19], + "(anon-function 25 volcanox-obs)": [3, 5, 6], + "(method 36 task-manager-arena-fight-base)": [11], + "(method 28 hud-wasgun)": [0, 1, 2, 4], + "(method 15 hud-wasgun)": [8, 28, 29, 30, 54], + "(method 15 vehicle-controller)": [0, 3, 5, 6, 7, 10], + "(method 51 hvehicle)": [5], + "(method 159 hvehicle)": [0, 1, 10, 19, 21, 23, 26], + "(method 18 vehicle-controller)": [0, 1, 74, 75], + "glider-too-low?": [2, 19, 21], + "(method 39 task-manager-desert-glide)": [0, 3, 4, 9], + "(method 36 task-manager-desert-glide)": [20, 50, 60], + "(method 37 task-manager-desert-glide)": [11, 12, 23, 29, 31], + "(method 34 task-manager-desert-glide)": [3], + "(anon-function 20 target-flut)": [0, 38, 39], + "(anon-function 14 flut-racer)": [7, 17, 19], + "(method 28 conveyor)": [22], + "generic-merc-execute-all": [7, 15], + "check-enemy": [0, 1], + "(method 91 h-warf)": [0], + "(method 51 h-warf)": [5], + "(method 44 nav-graph)": [0, 7, 8, 26, 34], + "(method 15 city-level-info)": [0, 1, 2, 6, 7, 9, 11, 13], + "(method 10 traffic-suppressor)": [0, 1, 2, 4], + "(method 18 traffic-tracker)": [5, 6, 7, 8], + "(method 21 traffic-tracker)": [0], + "(method 9 cty-faction-manager)": [8], + "(method 46 traffic-engine)": [0, 1, 2, 4], + "(method 42 traffic-engine)": [6], + "(method 17 traffic-manager)": [7, 19, 27, 28, 29, 30, 41], + "(anon-function 10 guard-rifle)": [9], + "(method 261 crimson-guard)": [52, 64], + "(anon-function 13 metalhead-predator)": [24, 25], + "(anon-function 90 ctywide-obs)": [4], + "(anon-function 10 cty-sniper-turret)": [44], + "(method 33 rub-tower)": [9, 10], + "(method 30 gungame-manager)": [0, 4, 5, 7], + "closest-pt-in-triangle": [17], + + "find-knot-span": [0, 1, 2, 3, 5, 6, 7, 8, 9], + "curve-evaluate!": [0, 2, 5, 6, 7, 8, 9], + "circle-circle-xz-intersect": [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 + ] + }, + + // 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": { + "auto-save-post": [[182, 1]], + "(method 10 menu-secret-option)": [[289, 1]], + "(method 10 menu-create-game-option)": [[49, 1]], + "(method 10 menu-format-card-option)": [[49, 1]], + "(method 10 menu-card-removed-option)": [[49, 1]], + "(method 10 menu-insert-card-option)": [[49, 1]], + "(method 10 menu-hero-mode-message-option)": [[50, 1]], + "(method 10 menu-secrets-insufficient-space-option)": [[51, 1]], + "(method 10 menu-error-loading-option)": [ + [65, 1], + [100, 1] + ], + "(method 10 menu-insufficient-space-option)": [ + [72, 1], + [112, 1] + ], + "(method 10 menu-error-auto-saving-option)": [[73, 1]], + "(method 10 menu-loading-option)": [[113, 1]], + "(method 10 menu-icon-info-option)": [[150, 1]], + "(method 17 hud-goal)": [[71, 0]], + "(method 17 hud-miss)": [[71, 0]], + "(method 16 resetter)": [ + [68, 1], + [101, 1], + [130, 1] + ], + "(method 32 task-manager-desert-turtle-training)": [[59, 1]], + "(method 24 race-manager)": [[97, 1]], + "(method 25 race-manager)": [ + [97, 1], + [126, 1] + ], + "(method 15 hud-race-final-stats)": [[131, 0]], + "(method 15 hud-wasbbv-goal-time)": [[74, 0]], + "(method 32 task-manager-lightjak-training)": [[53, 0]], + "(method 18 hover-training-manager)": [[69, 0]], + "(method 37 task-manager-arena-training)": [[67, 1]], + "(method 15 hud-arena-final-stats)": [ + [103, 0], + [147, 0] + ], + "(method 35 task-manager-arena-fight-base)": [[53, 0]], + "(method 32 task-manager-arena-gun-training)": [[53, 0]], + "(method 26 task-manager-arena-fight-2)": [ + [72, 0], + [186, 0] + ], + "(method 37 task-manager-wascity-gungame)": [ + [48, 0], + [78, 0], + [119, 0], + [157, 0], + [195, 0], + [227, 0], + [268, 0], + [306, 0], + [338, 0], + [379, 0], + [411, 0], + [446, 0] + ], + "(method 30 was-pre-game)": [ + [184, 0], + [276, 0] + ], + "(method 32 task-manager-throne-gun-training)": [[53, 0]], + "(method 17 hud-spider-killed)": [[71, 0]], + "(trans idle des-burning-bush)": [ + [226, 1], + [257, 0] + ], + "(method 37 des-burning-bush)": [ + [278, 0], + [336, 0] + ], + "(method 38 des-burning-bush)": [ + [109, 0], + [153, 0], + [196, 0] + ], + "(method 15 freeze-time-hud)": [[108, 0]], + "(method 17 freeze-time-hud)": [[97, 0]], + "(method 15 hud-wasbbv-score)": [[61, 0]], + "(method 15 hud-wasbbv-goal)": [[64, 0]], + "(method 32 task-manager-dark-punch-training)": [[53, 0]], + "(method 32 task-manager-lightjak-training-shield)": [[53, 0]], + "(trans credits highres-viewer-manager)": [[185, 0]], + "(trans idle hirez-viewer)": [[356, 0]], + "(trans idle burning-bush)": [ + [171, 1], + [202, 0] + ], + "(method 33 task-manager-bbush-board)": [[86, 0]], + "(method 17 board-score-hud)": [[71, 0]], + "(method 23 gungame-manager)": [ + [52, 0], + [90, 0], + [128, 0], + [164, 0], + [194, 0], + [235, 0], + [273, 0], + [305, 0], + [346, 0], + [378, 0], + [413, 0] + ], + "(trans carry precur-bomb)": [[60, 0]] + }, + + "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 17 sky-work)", + "(method 18 sky-work)", + "(method 32 sky-work)", + "(method 31 sky-work)", + "(method 29 sky-work)", + "(method 30 sky-work)", + // "(method 34 sky-work)", + // "(method 35 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 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 32 spatial-hash)", + "(method 34 spatial-hash)", + "(method 35 spatial-hash)", + "(method 36 spatial-hash)", + "(method 38 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", + "(method 21 cloth-system)", + "debug-line-clip?", + "(method 9 font-work)", + "live-func-curve", + "birth-func-curve", + "sparticle-motion-blur-dirt", + "foreground-draw-hud", + "shadow-execute", + "shadow-add-double-edges", + "shadow-add-single-edges", + "shadow-add-facing-single-tris", + "shadow-add-double-tris", + "shadow-xform-verts", + "shadow-calc-dual-verts", + "shadow-scissor-edges", + "shadow-scissor-top", + "shadow-init-vars", + "shadow-find-facing-single-tris", + "shadow-find-single-edges", + "shadow-find-facing-double-tris", + "shadow-find-double-edges", + "shadow-add-verts", + "shadow-add-single-tris" + ], + + "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": [ + ["lfac", 0, 0], + ["ltow", 0, 0], + ["lcit", 0, 0], + ["pow", 0, 0], + ["wasintro", 0, 0], + ["lfacctyb", 0, 0], + ["intpfall", 0, 0], + ["lfaccity", 0, 0], + ["ltowcity", 0, 0], + ["powergd", 0, 0], + ["lcitysml", 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. + // this just suppresses a message. + "expected_merged_objs": [] +} diff --git a/decompiler/config/jakx/potentially_useful/process_stack_size_overrides.jsonc b/decompiler/config/jakx/potentially_useful/process_stack_size_overrides.jsonc new file mode 100644 index 0000000000..e6f9ea856b --- /dev/null +++ b/decompiler/config/jakx/potentially_useful/process_stack_size_overrides.jsonc @@ -0,0 +1,15 @@ +// This overrides the stack size for calls to stack-size-set! in given functions. +{ + // NOTE: almost all of these were just copy pasted from jak2 + // so it's impossible to know which are actually needed for jakx... + // commenting out incase there's something here actually needed + + "(method 29 target)": 2048, + "(method 11 part-spawner)": 64, + "(method 11 elevator)": 1024, + "scene-player-init": 1024, + "task-manager-init-by-other": 2048, + "race-manager-init-by-other": 1024, + "neo-sat-shield-init-by-other": 64, + "bt-gun-manager-init-by-other": 256 +} diff --git a/decompiler/config/jakx/potentially_useful/stack_structures.jsonc b/decompiler/config/jakx/potentially_useful/stack_structures.jsonc new file mode 100644 index 0000000000..1edf56bd92 --- /dev/null +++ b/decompiler/config/jakx/potentially_useful/stack_structures.jsonc @@ -0,0 +1,2522 @@ +{ + // NOTE: almost all of these were just copy pasted from jak2 + // so it's impossible to know which are actually needed for jakx... + // commenting out incase there's something here actually needed + + "quaternion-smooth-seek!": [[16, ["inline-array", "quaternion", 2]]], + "eul->matrix": [[16, "vector"]], + "segment-segment-find-intersection-xz": [[16, "vector"]], + "vector-line-xz-distance-point!": [[16, "matrix"]], + "vector-segment-xz-distance-point!": [[16, "matrix"]], + "nearest-dist2-between-moving-points": [[16, ["inline-array", "vector", 2]]], + "vector-circle-tangent-new": [ + [32, "vector"], + [48, "vector"] + ], + "rotate-vector-to-vector": [[16, "quaternion"]], + "init-for-transform": [[192, "vector"]], + "show-mc-info": [[16, "mc-slot-info"]], + "joint-mod-blend-world-callback": [[16, "joint-mod-blend-world-work"]], + "(method 42 nav-mesh)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 44 nav-mesh)": [ + [16, "vector"], + [32, "vector"] + ], + "string->sound-name": [[16, ["array", "sound-name", 1]]], + "sound-name->string": [[16, ["array", "uint8", 16]]], + "doppler-pitch-shift": [[16, ["inline-array", "vector", 2]]], + "(anon-function 1 gsound)": [ + [16, ["array", "symbol", 4]], + [32, ["array", "symbol", 4]] + ], + "update-light-hash": [ + [16, "bounding-box"], + [48, "vector"], + [64, "vector"] + ], + "(method 19 cloth-system)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 35 cloth-on-skeleton)": [[16, "vector"]], + "(method 22 cloth-system)": [ + [80, "vector"], + [144, "vector"] + ], + "(method 14 cloth-on-skeleton)": [[16, "matrix"]], + "(method 36 cloth-on-skeleton)": [[16, "matrix"]], + "(method 24 cloth-system)": [[48, "current-position-info"]], + "(method 28 cloth-system)": [ + [64, "vector"], + [64, "vector"] + ], + "(method 23 cloth-system)": [ + [16, "matrix"], + [128, "vector"], + [192, "vector"] + ], + "matrix<-parented-transformq!": [[16, "vector"]], + "joint-mod-ik-callback": [ + [16, "matrix"], + [80, "matrix"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"], + [208, "vector"], + [224, "vector"], + [240, "matrix"], + [272, "vector"], + [256, "vector"], + [288, "vector"], + [304, "vector"], + [320, "quaternion"], + [336, "quaternion"], + [352, "vector"], + [384, "vector"], + [448, "vector"], + [464, "vector"], + [480, "vector"], + [496, "quaternion"], + [512, "matrix"], + [576, "vector"], + [592, "matrix"], + [608, "matrix"], + [656, "matrix"], + [720, "matrix"], + [752, "matrix"] + ], + "joint-mod-look-at-handler": [ + [16, "matrix"], + [80, "quaternion"], + [96, "vector"], + [112, "vector"], + [128, "vector"] + ], + "joint-mod-joint-set-world-handler": [ + [32, "vector"], + [48, "vector"] + ], + "(method 13 gui-control)": [[16, ["array", "sound-id", 4]]], + "(method 29 game-info)": [[16, ["array", "int8", 4]]], + "(method 9 joint-control)": [[16, "vector"]], + "(method 23 game-info)": [[16, ["array", "uint16", 512]]], + "(method 18 drawable-region-face)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 11 sound-controller)": [[16, "sync-info-params"]], + "(code explode explosion)": [[16, "overlaps-others-params"]], + "(event explode explosion)": [ + [16, "mystery-cquery-type0"], + [608, ["inline-array", "vector", 2]] + ], + "find-closest-solid-sphere-prim": [[16, "vector"]], + "explosion-init-by-other": [[16, "traffic-danger-info"]], + "(enter cam-launcher-longfall)": [[16, "vector"]], + "want-to-board?": [ + [16, "collide-query"], + [560, ["inline-array", "sphere", 3]], + [608, "vector"] + ], + "(method 16 target)": [[16, "vector"]], + "can-exit-duck?": [[560, ["inline-array", "sphere", 2]]], + "target-no-stick-post": [[32, "collide-query"]], + "target-compute-edge-rider": [[96, "bone"]], + "target-compute-edge": [[96, "bone"]], + "bend-gravity": [[32, "vector"]], + "target-update-ik": [ + [16, "collide-query"], + [624, "vector"], + [592, "vector"], + [640, "vector"], + [656, "vector"] + ], + "target-collision-reaction": [ + [16, "vector"], + [32, "vector"], + [48, "matrix"] + ], + "poly-find-nearest-edge": [[16, "vector"]], + "(method 23 task-arrow)": [[16, "cquery-with-vec"]], + "projectile-update-velocity-space-wars": [[64, "vector"]], + "projectile-move-fill-line-sphere": [[16, "collide-query"]], + "(method 38 projectile)": [[16, "collide-query"]], + "(method 10 ragdoll)": [[16, "vector"]], + "(method 19 wings-ragdoll)": [[16, "vector"]], + "find-water-with-spheres": [[16, "water-info"]], + "(method 18 ragdoll)": [ + [16, "collide-query"], + [560, "bounding-box"], + [624, ["inline-array", "water-sphere", 2]] + ], + "(method 17 ragdoll-edit-info)": [ + [224, "vector"], + [384, "matrix"], + [448, "vector"], + [608, "matrix"], + [672, "vector"] + ], + "(method 16 ragdoll-edit-info)": [ + [16, ["inline-array", "matrix", 60]], + [3984, "vector"], + [4016, "matrix"], + [4080, "matrix"], + [4144, "matrix"] + ], + "target-send-attack": [[112, "vector"]], + "target-stance-anim": [[64, ["array", "time-frame", 4]]], + "init-var-jump": [[96, "vector"]], + "(code target-running-attack)": [[112, "collide-query"]], + "(anon-function 12 target2)": [[16, "vector"]], + "lightning-start": [ + [16, "vector"], + [32, "vector"] + ], + "(method 9 curve-color-fast)": [[16, "rgbaf"]], + "(method 9 curve2d-fast)": [ + [16, "vector"], + [32, "vector"] + ], + "evaluate-color-curve-fast": [[16, "vector"]], + "evaluate-curve-fast": [ + [16, "vector"], + [32, "vector"] + ], + "lightning-trail-fractal-gen": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + "(post open lightjak-shield)": [[32, "vector"]], + "(method 24 freeze-screen)": [[32, "vector"]], + "(post target-launch-dir)": [[16, "collide-query"]], + "arrive-at-continue": [[16, "event-message-block"]], + "(code target-hit)": [[16, "vector"]], + "apply-pos-from-entity": [[208, "collide-query"]], + "target-death-main": [ + [16, "event-message-block"], + [96, ["array", "level", 1]] + ], + "find-nearest-focusable": [[48, "vector"]], + "target-gun-joint-pre0": [ + [640, ["inline-array", "sphere", 1]], + [656, "vector"] + ], + "target-gun-can-fire-yellow?": [[16, "gun-yellow-3-event-msg"]], + "draw-beam": [[16, ["inline-array", "vector", 2]]], + "(code die gun)": [[144, "vector"]], + "light-trail-tracker-init-by-other": [[16, "vector"]], + "(method 11 light-trail)": [[16, "light-trail-breadcrumb"]], + "(method 12 light-trail)": [ + [16, ["array", "int32", 4]], + [160, "vector"], + [176, "vector"], + [32, "rgbaf"], + [48, "vector"], + [112, "vector"], + [208, ["inline-array", "vector", 5]], + [288, "rgbaf"] + ], + "target-board-ride-post": [[64, "vector"]], + "target-board-compute-edge": [ + [32, "vector"], + [128, "vector"] + ], + "board-turn-around?": [[48, "vector"]], + "target-board-green-eco-attack": [ + [16, "vector"], + [32, ["array", "collide-shape", 384]] + ], + "(enter target-board-jump)": [[48, "vector"]], + "(code target-board-flip)": [[16, "vector"]], + "(code target-board-trickx)": [[16, "vector"]], + "(code target-board-tricky)": [[16, "vector"]], + "(code target-board-hold)": [[16, "vector"]], + "target-board-spin-check": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + "target-board-ground-check": [[32, "vector"]], + "(method 9 plane-volume)": [ + [64, "vector"], + [112, "vector"], + [16, "vector"], + [32, "vector"], + [48, "vector"], + [80, "vector"], + [128, "vector"] + ], + "add-a-bunch": [[16, "vector"]], + "birth-pickup-at-point": [[16, "vector"]], + "(code pickup eco)": [[16, "event-message-block"]], + "(method 10 simple-sprite-system)": [[16, ["array", "texture-id", 128]]], + "make-debug-sphere-table": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"], + [112, "vector"] + ], + "add-debug-sphere-from-table": [ + [16, "vector"], + [48, "vector"], + [64, "vector"] + ], + "internal-draw-debug-line": [ + [16, "vector4w-2"], + [48, "vector4w-2"], + [80, "vector"], + [96, "vector"] + ], + "add-debug-box-with-transform": [ + [16, ["inline-array", "vector", 8]], + [144, ["inline-array", "vector", 2]], + [176, "vector"] + ], + "add-debug-line-sphere": [ + [48, "matrix"], + [112, "matrix"], + [128, "vector"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [208, "vector"], + [192, "vector"] + ], + "add-debug-arc": [ + [16, "vector"], + [32, "vector"] + ], + "add-debug-curve": [ + [16, "vector"], + [32, "vector"] + ], + "add-debug-points": [[16, "vector"]], + "add-debug-cursor": [[16, "vector"]], + "(method 11 impact-control)": [[16, "touching-shapes-entry"]], + "(method 9 cubic-curve)": [[16, "trajectory"]], + "(method 10 cubic-curve)": [[16, "trajectory"]], + "(method 11 cubic-curve)": [[16, "trajectory"]], + "(method 12 cubic-curve)": [[16, "trajectory"]], + "(method 13 cubic-curve)": [[16, "trajectory"]], + "slave-set-rotation!": [ + [96, "vector"], + [112, "matrix"], + [176, "vector"] + ], + "v-slrp2!": [ + [32, "vector"], + [64, "matrix"] + ], + "v-slrp3!": [[32, "vector"]], + "(method 15 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "vector"] + ], + "(method 16 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "tracking-spline-sampler"] + ], + "(method 18 tracking-spline)": [[16, "tracking-spline-sampler"]], + "(code cam-eye)": [[112, "vector"]], + "(enter cam-circular)": [[32, "vector"]], + "cam-string-joystick": [ + [32, "vector"], + [48, "vector"] + ], + "cam-string-line-of-sight": [[192, "vector"]], + "cam-los-collide": [ + [592, "vector"], + [608, "vector"] + ], + "los-cw-ccw": [ + [48, ["inline-array", "vector", 4]], + [16, "vector"], + [32, "vector"], + [112, "vector"] + ], + "master-track-target": [[16, "vector"]], + "(code cam-point-watch)": [[16, "vector"]], + "cam-helper-temp": [[16, ["inline-array", "vector", 3]]], + "update-view-planes": [ + [208, "vector"], + [224, "vector"] + ], + "clmf-pos-rot": [[112, "matrix"]], + "cam-layout-entity-info": [[208, "vector"]], + "cam-layout-entity-volume-info-create": [ + [80, "vector"], + [128, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [96, "vector"], + [144, "vector"], + [112, "vector"] + ], + "(method 23 tracking-spline)": [[32, "vector"]], + "(method 21 tracking-spline)": [[16, "tracking-spline-sampler"]], + "(method 18 light-trail)": [[16, "vector"]], + "ragdoll-joint-callback": [ + [112, "vector"], + [128, "matrix"], + [192, "vector"], + [224, "vector"] + ], + "ragdoll-matrix-interp": [ + [16, "matrix"], + [144, "matrix"] + ], + "(method 15 ragdoll)": [ + [80, "matrix"], + [160, "vector"], + [304, "vector"], + [144, "vector"], + [176, "vector"], + [192, "vector"], + [208, "vector"], + [224, "vector"], + [240, "vector"] + ], + "(method 14 ragdoll)": [[144, "vector"]], + "(method 14 light-trail)": [[16, "light-trail-breadcrumb"]], + "check-water-level-drop": [[16, "vector"]], + "check-water-level-drop-motion": [[16, "vector"]], + "(method 17 water-control)": [[16, "light-trail-tracker-spawn-params"]], + "(method 10 water-control)": [[288, "vector"]], + "(method 11 flow-control)": [ + [80, "vector"], + [128, "vector"] + ], + "(method 13 flow-control)": [ + [64, "vector"], + [80, "vector"], + [96, "vector"], + [128, "vector"] + ], + "progress-post": [[176, "hud-box"]], + "(method 15 hud-gun)": [[16, "hud-sprite"]], + "play": [[96, ["array", "symbol", 10]]], + "update-sound-banks": [[16, ["array", "int8", 36]]], + "show-level": [[16, ["array", "symbol", 10]]], + "(method 20 load-state)": [ + [16, ["inline-array", "level-buffer-state", 10]], + [176, ["inline-array", "level-buffer-state", 10]] + ], + "calc-vu1-lights": [[16, "light-group"]], + "teleport-camera-by-pos": [[16, "vector"]], + "water-anim-event-handler": [[16, "vector"]], + "blocking-plane-spawn": [[16, ["inline-array", "vector", 2]]], + "(method 11 blocking-plane)": [[16, ["inline-array", "vector", 2]]], + "(method 56 enemy)": [ + [48, "vector"], + [32, "vector"] + ], + "(method 58 enemy)": [[80, "vector"]], + "(method 82 enemy)": [[96, "attack-info"]], + "(post knocked-recover enemy)": [ + [1120, "vector"], + [1136, "vector"] + ], + "(post running elevator)": [[16, "vector"]], + "matrix-3x3-triple-transpose-product": [[16, ["inline-array", "matrix", 3]]], + "(method 63 collide-shape-moving)": [[16, "rigid-body-move-work"]], + "(method 18 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], + "(method 22 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], + "(method 23 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], + "(method 24 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], + "(method 28 rigid-body-control)": [[16, "rigid-body-impact"]], + "(method 50 rigid-body-object)": [[16, "rigid-body-impact"]], + "(method 51 rigid-body-object)": [[16, "rigid-body-impact"]], + "ptest": [[16, "vector"]], + "spawn-guard-projectile": [[16, "projectile-init-by-other-params"]], + "(method 25 guard-shot)": [[32, "vector"]], + "(method 25 metalhead-shot)": [[32, "vector"]], + "(event impact metalhead-grenade-shot)": [[16, "collide-query"]], + "(method 9 los-control)": [ + [32, "collide-query"], + [16, "vector"] + ], + "(method 22 joint-exploder)": [[16, "collide-query"]], + "(method 25 joint-exploder)": [[16, "bounding-box"]], + "(method 15 debris-group)": [[64, "vector"]], + "debris-group-init-by-other": [[16, "vector"]], + "shield-sphere-init-by-other": [[16, "shield-sphere-distort-spawn-params"]], + "gun-yellow-shot-do-deflect": [ + [144, ["array", "collide-shape", 384]], + [64, "vector"] + ], + "(method 31 gun-yellow-shot-2)": [[16, "light-trail-tracker-spawn-params"]], + "(method 25 gun-yellow-shot)": [[32, "vector"]], + "gun-fire-yellow-3": [[16, "gun-yellow-3-event-msg"]], + "(code impact-explode gun-yellow-3-saucer)": [[16, "explosion-init-params"]], + "saucer-land-move": [[16, "vector"]], + "(method 25 gun-yellow-shot-2)": [[32, "vector"]], + "(method 36 gun-yellow-shot-2)": [[96, "vector"]], + "(method 52 gun-yellow-3-saucer)": [ + [48, ["inline-array", "target-quality-info-saucer", 66]], + [1104, ["array", "collide-shape", 384]], + [32, "vector"], + [3728, ["array", "int8", 100]], + [3824, "vector"] + ], + "(code impact gun-red-3-grenade)": [[16, "red-3-sphere-init-params"]], + "(post explode gun-red-2-shockwave)": [[16, "vector"]], + "(method 27 gun-red-2-shockwave)": [ + [16, "vector"], + [32, "red-2-ring-init-params"] + ], + "(method 31 gun-red-3-grenade)": [ + [16, "vector"], + [32, "light-trail-tracker-spawn-params"] + ], + "(method 45 gun-red-3-grenade)": [ + [16, "vector"], + [112, ["array", "collide-shape", 384]] + ], + "(method 47 gun-red-3-grenade)": [ + [16, "vector"], + [112, ["array", "collide-shape", 384]] + ], + "(method 17 gun-red-2-shockwave)": [ + [48, ["array", "collide-shape", 384]], + [16, "vector"], + [1584, "collide-query"] + ], + "(method 19 gun-red-2-shockwave)": [ + [16, "collide-query"], + [576, "vector"], + [624, "vector"], + [592, "vector"] + ], + "(method 23 gun-red-2-shockwave)": [[32, "vector"]], + "(method 24 gun-red-2-shockwave)": [[16, "vector"]], + "gun-fire-red-2": [[16, "gun-red-2-shockwave-init-params"]], + "gun-fire-red-3": [ + [160, ["array", "collide-shape", 384]], + [112, "vector"], + [128, "vector"], + [1696, "vector"] + ], + "(method 26 gun-red-shot)": [[16, "vector"]], + "gun-dark-reaction": [[112, "vector"]], + "gun-fire-red-1": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + "(trans expand gun-gravity)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [80, "collide-query"], + [624, "matrix"] + ], + "gun-fire-dark-3": [[16, "projectile-init-by-other-params"]], + "(trans moving gun-dark-shot)": [[16, "vector"]], + "(enter impact gun-dark-shot)": [ + [192, ["array", "collide-shape", 384]], + [96, "vector"] + ], + "gravity-spinner-init-by-other": [[32, "vector"]], + "(code zero-g gravity-spinner)": [[112, "vector"]], + "(method 25 gun-dark-3-nuke)": [[16, "matrix"]], + "(code impact-dud gun-dark-3-nuke)": [[16, "explosion-init-params"]], + "(method 54 gun-dark-3-nuke)": [ + [32, ["array", "collide-shape", 384]], + [16, "vector"] + ], + "(trans impact gun-dark-3-nuke)": [ + [96, "gun-dark-3-sphere-init-params"], + [128, "gun-dark-3-sphere-init-params"] + ], + "(method 19 gravity-spinner)": [ + [176, ["array", "collide-shape", 384]], + [128, "vector"], + [112, "vector"], + [1712, "vector"], + [2288, "vector"] + ], + "(method 16 gravity-spinner)": [[32, "vector"]], + "(method 22 gun-gravity)": [ + [112, ["array", "collide-shape", 384]], + [16, "vector"] + ], + "target-bomb1-fire-shot": [ + [96, "vector"], + [112, "vector"] + ], + "(code target-darkjak-smack)": [[112, "projectile-init-by-other-params"]], + "(method 25 darkjak-ball)": [[32, "vector"]], + "sparticle-track-hadouken": [[16, "vector"]], + "sparticle-red-2-converge": [[16, "vector"]], + "(method 9 rope-constraint)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 26 gun-blue-shot)": [[32, "vector"]], + "(method 24 gun-blue-shot)": [[96, "vector"]], + "gun-fire-blue-2": [[16, "gun-blue-lightning-command"]], + "gun-fire-blue-2-old": [ + [16, "gun-blue-lightning-command"], + [752, "vector"], + [704, "vector"], + [736, "vector"], + [816, "vector"] + ], + "find-gun-blue-2-target-old": [ + [48, ["array", "collide-shape", 384]], + [16, "vector"] + ], + "find-gun-blue-2-target": [ + [48, ["array", "collide-shape", 384]], + [16, "vector"] + ], + "(method 31 gun-blue-shot-3)": [[16, "light-trail-tracker-spawn-params"]], + "gun-blue-shot-3-move": [[160, "dist-dot-val"]], + "gun-fire-blue-3": [ + [16, "projectile-init-by-other-params"], + [160, "vector"], + [3968, "vector"], + [176, ["inline-array", "target-quality-info", 384]], + [1312, ["array", "collide-shape", 384]] + ], + "create-lightning-tracker-if-necessary": [ + [16, "gun-blue-2-lightning-init-params"] + ], + "(method 25 gun-blue-2-lightning-tracker)": [ + [32, "gun-blue-lightning-command"], + [704, "vector"], + [736, "collide-query"] + ], + "collide-list-fill-bg-using-line-sphere": [ + [32, "matrix"], + [96, "collide-query"] + ], + "collide-list-fill-bg-using-box": [ + [32, "matrix"], + [96, "collide-query"] + ], + "add-collide-debug-box": [[16, "bounding-box"]], + "(method 10 collide-mesh)": [[16, "oot-work"]], + "(method 9 touching-list)": [[16, "add-prims-touching-work"]], + "(method 9 collide-edge-edge)": [ + [16, "matrix"], + [80, ["inline-array", "sphere", 6]], + [176, "collide-query"] + ], + "(method 13 collide-edge-work)": [[16, "faei-stack-vars"]], + "(method 50 collide-shape)": [[32, "vector"]], + "(method 45 collide-shape)": [[16, "do-push-aways-work"]], + "(method 18 collide-shape-prim-mesh)": [[16, "collide-tri-result"]], + "(method 15 collide-shape-prim-sphere)": [[16, "collide-query"]], + "cshape-reaction-update-state": [ + [16, "vector"], + [32, "vector"] + ], + "(method 37 control-info)": [[48, "vector"]], + "(method 23 grid-hash)": [ + [16, "grid-hash-box"], + [32, "grid-hash-box"], + [48, "vector"], + [64, "vector"] + ], + "(method 11 grid-hash)": [ + [16, "vector"], + [32, "vector"] + ], + "draw-grid": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + "(method 9 actor-hash-buckets)": [ + [16, ["inline-array", "vector", 2]], + [48, ["inline-array", "vector", 2]] + ], + "(method 15 sphere-hash)": [[16, "vector"]], + "(method 33 spatial-hash)": [[16, ["inline-array", "vector", 2]]], + "(method 24 grid-hash)": [[16, "vector"]], + "(method 14 collide-cache)": [[16, "bounding-box"]], + "(method 16 collide-cache)": [[16, "collide-puls-work"]], + "(method 20 collide-cache)": [[16, "matrix"]], + "col-rend-draw": [[16, "matrix"]], + "(method 11 collide-mesh)": [[16, "spat-work"]], + "(method 11 manipulator)": [[80, "vector"]], + "draw-axis": [ + [32, "vector"], + [48, "vector"], + [64, "vector"], + [96, "vector"], + [112, "vector"] + ], + "(method 16 bug-report)": [ + [160, ["array", "float", 9]], + [48, "vector"], + [64, "vector"] + ], + "particle-adgif-callback": [[16, ["inline-array", "vector", 4]]], + "sp-adjust-launch": [[16, "matrix"]], + "sp-launch-particles-death": [[16, "matrix"]], + "sp-relaunch-setup-fields": [[16, "matrix"]], + "sparticle-respawn-timer": [[16, "vector"]], + "sparticle-respawn-heights": [[16, "vector"]], + "sparticle-rotate-to-vel-3d": [[16, "vector"]], + "spt-func-turn-to-vel-radial": [[16, "vector"]], + "spt-func-relative-pos": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "matrix"], + [128, "matrix"], + [192, "matrix"] + ], + "sparticle-3d-rotate-xz-to-camera": [[16, "vector"]], + "sparticle-3d-rotate-xz-to-camera-eco-shaft": [[16, "vector"]], + "sparticle-2d-spline-align-instant": [[16, "vector"]], + "birth-func-converge": [[16, "vector"]], + "check-shell-level2": [[16, "vector"]], + "check-shell-level1": [[16, "vector"]], + "process-drawable-burn-effect": [[32, "rgbaf"]], + "birth-func-vector-orient": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + "birth-func-target-orient": [[48, "vector"]], + "process-drawable-shock-skel-effect": [ + [176, "matrix"], + [256, "vector"], + [272, "vector"], + [288, "vector"], + [304, "quaternion"], + [384, "vector"] + ], + "process-drawable-shock-effect": [ + [80, "collide-query"], + [16, "matrix"] + ], + "process-drawable-shock-effect-replace": [ + [80, "collide-query"], + [16, "matrix"] + ], + "(trans target-ladder-walk-up)": [[96, "vector"]], + "(trans target-ladder-walk-down)": [[96, "vector"]], + "(post target-ladder)": [[96, "matrix"]], + "(anon-function 47 script)": [[16, "vector"]], + "(anon-function 48 script)": [ + [16, "vector"], + [32, "vector"] + ], + "(anon-function 49 script)": [ + [128, "part-tracker-subsampler-init-params"], + [176, "part-tracker-init-params"] + ], + "(method 9 mood-control)": [[16, "mood-control-work"]], + "check-drop-level-rain": [[16, "vector"]], + "(method 28 path-control)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"] + ], + "(method 29 path-control)": [[32, "vector"]], + "print-default-collision": [ + [144, "vector"], + [96, "vector"], + [112, "vector"], + [128, "vector"], + [160, "matrix"] + ], + "mech-spawn-thruster": [[32, "vector"]], + "mech-shield-init-by-other": [[16, "shield-sphere-distort-spawn-params"]], + "target-mech-get-off?": [[560, ["inline-array", "sphere", 1]]], + "mech-update-ik": [ + [16, "collide-query"], + [592, "vector"], + [608, "vector"], + [624, "vector"], + [640, "vector"], + [656, "vector"], + [672, "vector"] + ], + "target-mech-init": [[96, "shield-sphere-spawn-params"]], + "target-mech-add-thrust": [[16, "vector"]], + "target-mech-collision": [[144, "vector"]], + "(code target-mech-carry-throw)": [[640, ["inline-array", "sphere", 1]]], + "(trans target-mech-carry-drag)": [[560, ["inline-array", "sphere", 1]]], + "(code target-mech-carry-drop)": [[672, ["inline-array", "sphere", 1]]], + "target-mech-carry-update": [[560, ["inline-array", "sphere", 1]]], + "flut-update-ik": [ + [16, "collide-query"], + [624, "vector"], + [640, "vector"], + [656, "vector"], + [592, "vector"], + [608, "vector"] + ], + "(code target-flut-get-on)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 11 minimap)": [[16, ["inline-array", "vector", 4]]], + "(method 15 minimap)": [[16, "minimap-draw-work"]], + "(method 19 minimap)": [ + [32, "vector"], + [16, "vector"] + ], + "(method 24 minimap)": [[16, "minimap-draw-work"]], + "(method 23 minimap)": [ + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "matrix"], + [144, "matrix"] + ], + "(method 26 minimap)": [ + [32, "vector"], + [48, "vector"], + [64, "matrix"] + ], + "(method 17 minimap)": [ + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "matrix"], + [144, "matrix"], + [256, "vector"], + [240, "vector"] + ], + "(method 18 minimap)": [ + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "matrix"], + [144, "matrix"], + [240, "vector"], + [256, "vector"] + ], + "(method 14 trail-graph)": [[16, ["inline-array", "vector", 2]]], + "(method 15 trail-graph)": [[16, ["inline-array", "vector", 4]]], + "(method 12 lightning-bolt)": [ + [80, "vector"], + [112, "matrix"], + [176, "vector"], + [192, "vector"], + [16, "vector"], + [32, "matrix"], + [304, "matrix"], + [272, "vector"], + [368, "vector"], + [384, "vector"] + ], + "(method 11 lightning-bolt)": [[48, "vector"]], + "(method 20 lightning-bolt)": [[16, "vector"]], + "(method 16 lightning-bolt)": [[144, ["array", "rgba", 1]]], + "(method 9 nav-mesh)": [[16, "vector"]], + "(method 10 nav-mesh)": [[32, "nav-find-poly-parms"]], + "find-nearest-nav-mesh": [[16, "nav-find-poly-parms"]], + "point-to-poly-boundary": [[16, ["inline-array", "vector", 4]]], + "(method 11 nav-mesh)": [[16, "nav-find-poly-parms"]], + "(method 31 entity-actor)": [[16, "nav-find-poly-parms"]], + "(method 32 entity-actor)": [[32, "nav-find-poly-parms"]], + "(method 15 nav-mesh)": [[16, ["array", "int8", 4]]], + "(method 17 nav-mesh)": [[16, "vector"]], + "(method 20 nav-mesh)": [[16, "nav-ray"]], + "(method 21 nav-mesh)": [ + [16, "nav-ray"], + [96, "vector"] + ], + "(method 36 nav-mesh)": [[16, "nav-poly"]], + "(method 37 nav-mesh)": [[16, ["inline-array", "nav-poly", 3]]], + "(method 39 nav-mesh)": [[16, ["inline-array", "vector", 3]]], + "(method 43 nav-mesh)": [[16, "vector"]], + "(method 25 nav-mesh)": [[32, "nav-stack-type2"]], + "(method 12 nav-mesh)": [[16, "nav-stack-type"]], + "(anon-function 9 nav-control)": [[16, ["inline-array", "vector", 1]]], + "(anon-function 4 nav-control)": [[16, ["inline-array", "vector", 1]]], + "debug-nav-validate-current-poly": [[16, "vector"]], + "(method 9 nav-control)": [[16, "vector"]], + "circle-tangent-directions": [[48, "vector"]], + "(method 18 nav-control)": [[16, "nav-control-cfs-work"]], + "(method 19 nav-control)": [[16, "nav-control-cfs-work"]], + "(method 11 nav-state)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 24 nav-state)": [[16, ["inline-array", "vector", 1]]], + "(method 28 nav-state)": [[208, "vector"]], + "(method 31 nav-state)": [ + [16, "nav-avoid-spheres-params"], + [112, "nav-ray"] + ], + "(method 32 nav-state)": [[16, "nav-control-cfs-work"]], + "(method 34 nav-state)": [[16, ["inline-array", "vector", 1]]], + "(method 37 nav-state)": [[16, ["inline-array", "vector", 1]]], + "(method 50 nav-state)": [[16, "nav-ray"]], + "(method 52 nav-state)": [ + [16, "vector"], + [32, "nav-route-portal"], + [80, ["inline-array", "vector", 2]], + [192, "matrix"] + ], + "(method 53 nav-state)": [ + [16, "nav-avoid-spheres-params"], + [112, "nav-ray"] + ], + "(method 91 nav-enemy)": [[16, "vector"]], + "(method 161 nav-enemy)": [[16, "vector"]], + "(method 160 nav-enemy)": [[16, "vector"]], + "(code hostile monster-frog)": [[16, "vector"]], + "(code notice monster-frog)": [[16, "vector"]], + "elec-gate-post": [[48, "vector"]], + "(enter active elec-gate)": [[176, ["inline-array", "vector", 2]]], + "(method 26 min-rat-engine)": [[96, "vector"]], + "(code arrived min-bomb-elevator)": [[16, ["array", "symbol", 3]]], + "(code down-idle min-crane-switch)": [[16, ["array", "symbol", 3]]], + "(method 208 manta)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 200 manta)": [[16, "vector"]], + "(method 201 manta)": [[16, ["inline-array", "matrix", 2]]], + "(method 109 rat)": [[112, "vector"]], + "(post running-in-wheel rat)": [ + [96, "vector"], + [112, "vector"], + [128, "vector"] + ], + "(post idle rat-spawner)": [ + [96, "vector"], + [112, "enemy-init-by-other-params"] + ], + "(method 37 min-bomb-train)": [[144, "vector"]], + "(method 10 game-task-node-info)": [[16, ["array", "game-task-node", 64]]], + "fail-mission": [[96, "resetter-params"]], + "restart-mission": [[96, "resetter-params"]], + "gekko-postbind": [ + [576, ["inline-array", "vector", 1]], + [656, "vector"], + [672, "vector"], + [752, "vector"], + [768, "vector"], + [848, "vector"], + [864, "vector"], + [944, "vector"], + [960, "vector"] + ], + "(method 202 gekko)": [ + [16, "vector"], + [32, "vector"] + ], + "merc-blend-shape": [[16, ["array", "int16", 128]]], + "(method 26 battle)": [[16, "vector"]], + "fruit-check-ground-bounce": [[16, "vector"]], + "wascity-cactus-callback": [[16, "vector"]], + "vehicle-draw-thruster": [[16, "vehicle-thruster-work"]], + "(method 30 vehicle)": [[16, ["array", "uint32", 1]]], + "(method 55 vehicle)": [[16, "matrix"]], + "(method 54 vehicle)": [[16, "rigid-body-move-work"]], + "(method 78 vehicle)": [ + [16, "vehicle-stack-type3"], + [144, "sprite-glow-data"], + [208, "sprite-glow-data"] + ], + "vehicle-explode-post": [[16, ["array", "uint32", 1]]], + "(method 129 vehicle)": [[16, "mystery-vehicle-type0"]], + "(event fly-to-dest prebot-large-eco-creature)": [[96, "vector"]], + "large-eco-creature-split": [ + [16, "enemy-init-by-other-params"], + [64, "vector"] + ], + "spt-func-pillar-rocks-bounce1": [[16, "vector"]], + "spt-func-pillar-rocks-bounce2": [[16, "vector"]], + "prebot-sword-init-by-other": [[16, "weapon-trail-tracker-spawn-params"]], + "(trans idle prebot-shockwave)": [[560, "bounding-box"]], + "(enter test prebot)": [ + [16, "enemy-init-by-other-params"], + [64, "vector"] + ], + "prebot-spawn-shockwave": [[16, "vector"]], + "prebot-light-flash": [[16, "vector"]], + "prebot-common": [ + [112, "vector"], + [96, "vector"] + ], + "prebot-neck-callback": [[144, "vector"]], + "prebot-launch-critter": [ + [64, "vector"], + [80, "vector"], + [16, "enemy-init-by-other-params"] + ], + "(post attacking-1 tentacle)": [[16, "vector"]], + "(method 155 sew-laser-guard)": [ + [32, "vector"], + [160, "vector"] + ], + "(trans idle sew-laser-beam)": [[32, "vector"]], + "(method 25 sew-move-turret-shot)": [[32, "vector"]], + "spawn-sew-move-turret-projectile": [ + [16, "projectile-init-by-other-params"], + [144, "vector"] + ], + "(method 162 sew-laser-turret)": [ + [32, ["array", "collide-shape", 384]], + [16, "vector"] + ], + "(trans alert sew-laser-turret)": [ + [32, ["array", "collide-shape", 384]], + [16, "vector"] + ], + "(method 161 sew-laser-turret)": [[64, "rgbaf"]], + "(method 159 sew-laser-turret)": [[32, "vector"]], + "(trans active sew-moving-step-a)": [[16, "vector"]], + "spawn-moving-step-b-step": [[16, "sew-moving-step-b-step-param"]], + "(method 231 saberfish)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + "(method 236 saberfish)": [[16, "saberfish-spawner-query-msg"]], + "(method 237 saberfish)": [[16, "saberfish-spawner-query-msg"]], + "(method 238 saberfish)": [ + [16, "saberfish-spawner-query-msg"], + [576, "vector"], + [144, "vector"], + [272, "vector"], + [288, "vector"], + [448, "vector"], + [464, "vector"], + [480, "vector"], + [496, "vector"] + ], + "(method 225 saberfish)": [[16, "saberfish-spawner-query-msg"]], + "(code active saberfish-mgr-room1)": [[16, "saberfish-spawner-command"]], + "(code stage-0 saberfish-mgr-room2)": [[16, "saberfish-spawner-command"]], + "(code stage-2 saberfish-mgr-room2)": [[16, "saberfish-spawner-command"]], + "(code stage-1 saberfish-mgr-room2)": [[16, "saberfish-spawner-command"]], + "(method 22 saberfish-spawner)": [[16, "nav-poly"]], + "(method 24 saberfish-spawner)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 11 saberfish-spawner)": [[32, "vector"]], + "(method 25 saberfish-spawner)": [[16, "saberfish-init-by-other-params"]], + "(method 17 saberfish-spawn-manager-base)": [[16, "saberfish-spawn-query"]], + "(method 18 saberfish-spawn-manager-base)": [[16, "saberfish-spawn-query"]], + "(code active kg-hopper)": [[16, "vector"]], + "(method 191 kg-hopper)": [ + [96, "vector"], + [176, "collide-query"] + ], + "(method 99 kg-hopper)": [[80, "vector"]], + "spt-func-birth-on-bubble-pop": [ + [16, "vector"], + [32, "vector"] + ], + "(code turned-off sew-power-switch)": [[16, ["array", "symbol", 10]]], + "(trans hostile neo-grenadier)": [[48, "vector"]], + "(code flee sewer-frog)": [[16, "vector"]], + "(enter explode spydroid-orig)": [[192, "vector"]], + "(method 196 roboguard)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 195 roboguard)": [[16, "vector"]], + "(anon-function 1 roboguard)": [ + [16, "vector"], + [32, "vector"] + ], + "(anon-function 25 roboguard)": [[48, "matrix"]], + "(method 91 vehicle)": [[16, "vehicle-controls"]], + "(method 48 vehicle)": [[16, "matrix"]], + "(method 118 vehicle)": [[16, "vehicle-controls"]], + "(method 32 squad-control)": [[16, "vector"]], + "(method 17 squad-control)": [[16, "primary-target-pos-vel"]], + "(method 16 squad-control)": [ + [16, ["inline-array", "primary-target-pos-vel", 2]] + ], + "(method 24 squad-control)": [[16, "primary-target-pos-vel"]], + "(method 25 squad-control)": [ + [16, ["inline-array", "primary-target-pos-vel", 2]] + ], + "(method 50 vehicle)": [[16, ["inline-array", "rigid-body-impact", 2]]], + "(method 93 vehicle)": [[16, "mystery-vehicle-type2"]], + "(method 94 vehicle)": [ + [16, "mystery-vehicle-type1"], + [128, ["inline-array", "collide-query", 2]], + [816, ["inline-array", "matrix", 2]] + ], + "(method 135 vehicle)": [[16, ["inline-array", "matrix", 2]]], + "(method 13 was-squad-control)": [ + [16, ["inline-array", "matrix", 2]], + [192, "matrix"], + [208, ["array", "uint32", 1]] + ], + "(method 35 was-squad-control)": [ + [16, ["inline-array", "matrix", 2]], + [240, "cquery-with-5vec"] + ], + "(method 39 vehicle-wheel)": [[16, "rigid-body-move-work"]], + "(enter explode wvehicle)": [[16, "matrix"]], + "(method 77 wvehicle)": [[16, "vector"]], + "(method 30 wvehicle)": [[16, "matrix"]], + "(method 92 wvehicle)": [[16, "vector"]], + "(method 163 wvehicle)": [[16, "matrix"]], + "(method 165 wvehicle)": [ + [16, "vehicle-controls"], + [32, "matrix"] + ], + "(method 198 wvehicle)": [[16, "wvehicle-physics-work"]], + "(method 195 wvehicle)": [[16, "light-trail-tracker-spawn-params"]], + "cshape-reaction-scorp-shot": [[16, "vector"]], + "(method 26 v-scorp-shot)": [[32, "vector"]], + "(method 25 v-rhino-shot)": [[32, "vector"]], + "(method 31 v-toad-shot)": [ + [32, "light-trail-tracker-spawn-params"], + [16, "vector"] + ], + "(method 78 wvehicle)": [ + [16, "wvehicle-part-work"], + [624, "wvehicle-draw-thruster-params"] + ], + "(method 172 wvehicle)": [[16, ["inline-array", "quaternion", 2]]], + "(method 173 wvehicle)": [[16, "wvehicle-stack-type1"]], + "(method 161 wvehicle)": [[16, "vehicle-wheel-init-params"]], + "(method 31 wvehicle)": [[16, "wvehicle-physics-work"]], + "(method 162 wvehicle)": [[16, "wvehicle-physics-work"]], + "(method 164 wvehicle)": [[16, "wvehicle-stack-type6"]], + "(method 95 vehicle)": [[16, "matrix"]], + "(method 93 wvehicle)": [ + [16, ["inline-array", "matrix", 2]], + [112, "wvehicle-physics-work"], + [128, "matrix"] + ], + "(method 33 wvehicle)": [ + [16, ["inline-array", "quaternion", 2]], + [48, "wvehicle-stack-type4"] + ], + "(method 149 wvehicle)": [[16, "wvehicle-stack-type2"]], + "(method 199 wvehicle)": [[16, "wvehicle-stack-type3"]], + "(method 169 wcar-snake-base)": [[16, "wcar-proj-init-by-other-params"]], + "(method 79 wcar-snake-base)": [ + [16, ["inline-array", "quaternion", 3]], + [64, "wcar-stack-type1"] + ], + "(method 79 v-turtle)": [ + [16, ["inline-array", "quaternion", 3]], + [64, "wvehicle-physics-work"], + [128, "wvehicle-jmod-work"] + ], + "(method 31 squad-control)": [[48, "squad-control-stack-type0"]], + "target-pilot-post": [ + [48, "cquery-with-5vec"], + [640, "matrix"] + ], + "(code target-pilot-get-off)": [[96, "matrix"]], + "target-pilot-trans": [[16, ["inline-array", "vector", 10]]], + "(method 34 was-squad-control)": [ + [16, "cquery-with-vec"], + [576, ["inline-array", "vector", 2]], + [592, "mystery-traffic-object-spawn-params0"] + ], + "(method 9 race-control)": [[16, "race-mesh-slice-query"]], + "(method 9 race-path)": [[16, "vector"]], + "(method 10 race-path)": [[16, ["inline-array", "vector", 4]]], + "(method 11 race-path)": [[16, ["inline-array", "race-path-sample", 6]]], + "(method 16 race-mesh)": [[16, "race-mesh-hash-search"]], + "(method 12 race-path)": [[16, "matrix"]], + "(method 18 race-mesh)": [[16, "race-mesh-slice-query"]], + "(method 17 race-mesh)": [[16, "race-mesh-slice-query"]], + "sparticle-motion-blur-dirt": [[16, "matrix"]], + "check-scorp-shell-level1": [[16, "vector"]], + "check-scorp-shell-level2": [[16, "vector"]], + "(method 22 turbo-pickup)": [[16, "cquery-with-vec"]], + "(method 17 tire-trail)": [[16, "matrix"]], + "(method 200 wvehicle)": [[16, "wvehicle-physics-work"]], + "(method 38 wvehicle)": [ + [16, "wvehicle-stack-type5"], + [112, "wvehicle-stack-type7"], + [272, "wvehicle-stack-type5"], + [304, "matrix"] + ], + "(method 24 w-parking-spot)": [[16, "cquery-with-5vec"]], + "(method 79 v-scorpion)": [ + [32, ["inline-array", "quaternion", 3]], + [16, "vector"], + [80, "wvehicle-physics-work"] + ], + "(method 169 v-scorpion)": [[16, "wcar-rhino-proj-params"]], + "(method 169 v-toad)": [[16, "wcar-toad-stack-var0"]], + "(method 79 v-toad)": [ + [16, ["inline-array", "quaternion", 2]], + [48, ["inline-array", "quaternion", 1]], + [64, "wvehicle-physics-work"] + ], + "(method 203 v-toad)": [[16, "wvehicle-physics-work"]], + "(method 169 v-rhino)": [[16, "wcar-rhino-proj-params"]], + "(method 169 v-mirage)": [[16, "wcar-toad-stack-var0"]], + "(method 79 v-rhino)": [ + [16, ["inline-array", "quaternion", 3]], + [64, ["inline-array", "quaternion", 3]] + ], + "(method 17 turret-control)": [[16, "turret-control-stack-var0"]], + "(method 9 turret-control)": [ + [16, "turret-control-stack-var1"], + [272, "collide-query"] + ], + "(code idle des-beast)": [[16, "vector"]], + "des-beast-gun-swivel-callback": [ + [16, "vector"], + [80, "vector"] + ], + "(trans idle beast-rider)": [[16, "vector"]], + "(method 31 beast-grenade)": [ + [16, "light-trail-tracker-spawn-params"], + [48, "vector"] + ], + "des-beast-gun-callback": [ + [32, "vector"], + [80, "vector"] + ], + "(method 84 des-beast)": [[176, "vector"]], + "(method 167 des-beast)": [[32, ["array", "collide-shape", 64]]], + "(method 164 des-beast)": [ + [48, "vector"], + [176, "vector"] + ], + "sig-pilot-trans": [[16, "matrix"]], + "update-nst-lights": [ + [32, "vector"], + [48, "vector"] + ], + "(code notice nst-cocoon-a)": [ + [16, "vector"], + [32, "vector"] + ], + "(code die nst-metalhead-eggs)": [[16, "vector"]], + "birth-func-find-ground": [ + [16, "collide-query"], + [560, "vector"] + ], + "spt-func-check-hit-ground": [[16, "vector"]], + "part-nest-bat1-path": [[80, "vector"]], + "part-nest-bat2-path": [[80, "vector"]], + "part-nest-bat3-path": [[80, "vector"]], + "part-nest-bat4-path": [[80, "vector"]], + "part-nest-bat5-path": [[80, "vector"]], + "part-nest-bat6-path": [[80, "vector"]], + "part-nest-bat7-path": [[80, "vector"]], + "part-nest-bat8-path": [[80, "vector"]], + "part-nest-bat9-path": [[80, "vector"]], + "part-nest-bat10-path": [[80, "vector"]], + "(method 160 egg-spider)": [[16, "vector"]], + "(method 194 egg-spider)": [ + [32, "vector"], + [80, "vector"] + ], + "(trans jump-on-vehicle egg-spider)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"] + ], + "(trans on-vehicle egg-spider)": [ + [16, "vector"], + [32, "vector"] + ], + "(trans idle spider-manager)": [ + [160, "enemy-init-by-other-params"], + [48, "vector"], + [16, "vector"] + ], + "(method 24 spider-manager)": [[16, "cquery-with-vec"]], + "(method 25 spider-manager)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "nav-poly"], + [112, "vector"], + [128, "vector"] + ], + "check-drop-level-egg-spider-dirt-rubble": [[16, "vector"]], + "vehicle-draw-laser": [[32, "vector"]], + "vehicle-draw-beam": [[32, "vector"]], + "(method 30 v-marauder)": [[16, "vector"]], + "(method 79 v-marauder)": [[16, ["inline-array", "quaternion", 3]]], + "(method 90 v-marauder)": [ + [16, "wcar-marauder-stack-var0"], + [48, ["inline-array", "vector", 1]], + [144, "wcar-marauder-stack-var0"], + [160, "wcar-marauder-stack-var0"], + [192, "wcar-marauder-stack-var0"] + ], + "(method 79 v-marauder-b)": [[16, ["inline-array", "quaternion", 3]]], + "wasdoors-point-inside?": [[16, ["inline-array", "vector", 3]]], + "tizard-tilt-jmod-func": [[16, "quaternion"]], + "(method 34 tizard)": [ + [16, "collide-query"], + [560, ["inline-array", "sphere", 2]] + ], + "(method 90 wvehicle)": [[16, "wvehicle-physics-work"]], + "(method 30 des-plant)": [ + [16, "vector"], + [32, ["inline-array", "quaternion", 10]] + ], + "(event idle des-cactus-obstacle)": [[96, "vector"]], + "(code idle was-artifact)": [[64, "vector"]], + "(method 23 was-artifact)": [[16, "cquery-with-vec"]], + "(method 25 was-artifact)": [[16, "matrix"]], + "(code active task-manager-desert-artifact-race)": [ + [144, "matrix"], + [96, ["inline-array", "task-arrow-params", 1]] + ], + "(method 20 race-manager)": [[16, ["inline-array", "vector", 5]]], + "(method 9 racer-state)": [ + [16, "matrix3"], + [48, "race-mesh-slice-query"], + [160, ["inline-array", "vector", 1]] + ], + "(method 12 race-state)": [[16, ["array", "float", 10]]], + "(method 15 race-state)": [[16, "matrix"]], + "(method 17 race-state)": [[16, "race-manager-stack-var0"]], + "(method 19 race-state)": [[96, "matrix"]], + "(method 21 race-manager)": [[16, "race-manager-stack-var1"]], + "(method 15 hud-race-timer)": [[16, ["array", "time-frame", 5]]], + "(method 182 wvehicle)": [[16, ["inline-array", "vector", 1]]], + "(method 177 wvehicle)": [[16, "wvehicle-race-stack-var0"]], + "(method 185 wvehicle)": [[16, ["inline-array", "vector", 1]]], + "(method 181 wvehicle)": [ + [16, "wvehicle-physics-work"], + [1552, "wvehicle-physics-work"] + ], + "(method 180 wvehicle)": [[16, ["array", "int8", 16]]], + "kleever-pilot-trans": [[16, "kleever-rider-stack-var0"]], + "wland-driver-pilot-trans": [[16, "kleever-rider-stack-var0"]], + "(method 33 task-manager-race)": [[16, "course-race-stack-var0"]], + "(method 22 tpl-elec-swing-pole)": [ + [16, "vector"], + [32, "vector"] + ], + "(trans go-door tpl-token)": [ + [96, ["inline-array", "vector", 16]], + [352, ["inline-array", "vector", 16]], + [688, "vector"] + ], + "(method 164 des-beast-2)": [[32, "vector"]], + "(post hostile des-beast-2)": [ + [112, ["inline-array", "vector", 16]], + [96, "vector"], + [464, "vector"], + [480, "vector"], + [560, ["inline-array", "vector", 2]] + ], + "(method 31 beast-grenade-2)": [[16, "light-trail-tracker-spawn-params"]], + "(anon-function 2 des-beast-2)": [[16, "matrix"]], + "(anon-function 1 des-beast-2)": [[16, "matrix"]], + "(method 26 scorpion-gun-shot)": [[32, "vector"]], + "(post active scorpion-gun-manager)": [ + [16, ["inline-array", "vector", 1]], + [32, ["inline-array", "vector", 2]] + ], + "control-post": [[16, "quaternion"]], + "(code cam-scorpion-gun)": [[16, "event-message-block"]], + "(method 157 mh-flyer)": [ + [16, "vector"], + [32, "vector"] + ], + "mh-flyer-fly-post": [ + [576, "vector"], + [640, ["inline-array", "vector", 2]] + ], + "(method 31 mh-flyer-shot)": [[16, "light-trail-tracker-spawn-params"]], + "(enter impact mh-flyer-shot)": [[16, "explosion-init-params"]], + "scorpion-gun-manager-handler": [[16, "vector"]], + "(post firing scorpion-gun)": [ + [16, "scorpion-gun-stack-var0"], + [272, "matrix"] + ], + "aim-post": [ + [640, "vector"], + [672, "vector"], + [688, "vector"], + [704, "vector"], + [720, "collide-query"], + [1264, "vector"], + [1280, ["array", "rgba", 1]], + [16, "event-message-block"], + [96, "vector"] + ], + "(method 25 turret-shot)": [[32, "vector"]], + "(method 57 target-turret)": [[112, "vector"]], + "(method 11 hover-formation)": [[16, "vector"]], + "test-gen-perms": [[16, "gen-perms-context"]], + "gen-perms": [[16, ["array", "int32", 32]]], + "(method 14 hover-formation-control)": [[256, "vector"]], + "(method 11 hover-formation-control)": [[16, ["inline-array", "vector", 16]]], + "(method 11 hover-nav-control)": [[80, "vector"]], + "(method 25 hover-nav-control)": [[80, "vector"]], + "(method 37 nav-network)": [[16, "bounding-box"]], + "(method 27 nav-network)": [[16, "vector"]], + "(method 33 nav-network)": [[16, "vector"]], + "(method 34 nav-network)": [[48, "vector"]], + "(method 16 hover-nav-control)": [[16, "vector"]], + "(method 15 hover-nav-control)": [[16, "vector"]], + "(method 12 hover-nav-control)": [ + [32, "vector"], + [48, "vector"] + ], + "(method 169 hover-enemy)": [ + [16, "vector"], + [32, "vector"], + [48, "collide-query"] + ], + "(enter ambush hover-enemy)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 176 hover-enemy)": [[16, "vector"]], + "(method 169 flamer-hover)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 30 hover-nav-control)": [ + [16, "vector"], + [64, "vector"], + [80, ["array", "float", 16]], + [32, "vector"], + [144, ["inline-array", "vector", 4]], + [208, ["inline-array", "vector", 4]] + ], + "(event ambush-attack robo-hover)": [[16, "projectile-init-by-other-params"]], + "(anon-function 14 robo-hover)": [[112, "vector"]], + "(method 26 tow-spawner)": [ + [16, "enemy-init-by-other-params"], + [80, "vector"], + [96, "vector"] + ], + "(trans active tow-spawner)": [[16, ["inline-array", "vector", 1]]], + "(method 11 for-tower)": [[16, "vector"]], + "for-log-callback": [[16, "vector"]], + "spt-forest-check-ground-lie-flat": [ + [16, "quaternion"], + [32, "matrix"] + ], + "spt-check-water-lie-flat": [ + [112, "vector"], + [128, "vector"] + ], + "spt-func-birth-on-stop": [ + [16, "vector"], + [32, "vector"] + ], + "spt-func-for-ground-dirt-bounce1": [[16, "vector"]], + "spt-func-for-ground-dirt-bounce2": [[16, "vector"]], + "(code active task-manager-forest-plants)": [[176, "vector"]], + "(method 26 task-manager-forest-plants)": [ + [96, "light-trail-tracker-spawn-params"] + ], + "(post knocked-recover dp-bipedal)": [ + [560, "vector"], + [576, "vector"] + ], + "(enter shield-idle dp-bipedal)": [[16, "shield-sphere-spawn-params"]], + "(trans hostile dp-bipedal)": [[16, ["inline-array", "vector", 1]]], + "dp-bipedal-attack-close-post": [[16, ["inline-array", "vector", 1]]], + "dp-bipedal-formation-post": [[16, "vector"]], + "region-check-has-los": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + "(post idle dp-bipedal-spawner)": [ + [48, "enemy-init-by-other-params"], + [16, ["array", "collide-shape", 1]] + ], + "trajectory-prediction": [[16, ["inline-array", "vector", 6]]], + "(method 206 dp-bipedal)": [[16, ["inline-array", "vector", 1]]], + "(method 209 dp-bipedal)": [[48, "vector"]], + "(method 208 dp-bipedal)": [[576, "vector"]], + "(post idle neo-wasp-spawner)": [[16, "enemy-init-by-other-params"]], + "(event attack neo-wasp)": [[16, "projectile-init-by-other-params"]], + "(anon-function 15 neo-wasp)": [ + [32, "matrix"], + [112, "quaternion"], + [128, "vector"] + ], + "(method 35 neo-spawner)": [[16, "enemy-init-by-other-params"]], + "(enter die neo-spawner)": [[192, "vector"]], + "(method 25 for-turret-shot)": [[32, "vector"]], + "(method 57 for-turret)": [ + [96, "vector"], + [16, "matrix"] + ], + "(method 15 hud-for-turret-health)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [112, "vector"], + [256, "vector"], + [272, "vector"], + [288, "vector"] + ], + "(method 52 for-turret)": [ + [32, "vector"], + [64, "vector"] + ], + "(enter closed dm-spines)": [[16, ["inline-array", "vector", 2]]], + "check-drop-level-flitter-dirt-rubble": [[16, "vector"]], + "(method 11 chain-physics)": [ + [144, "vector"], + [128, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"], + [256, "vector"], + [208, "vector"], + [224, "vector"] + ], + "(method 31 vol-balance-plat)": [ + [32, "vector"], + [96, "vector"], + [112, "vector"] + ], + "(method 47 vol-stone-lid)": [[16, "vector"]], + "(method 49 vol-stone-lid)": [[128, ["inline-array", "vector", 2]]], + "(code notice spiky-frog)": [[16, "vector"]], + "(method 121 flamer-lava)": [[16, "vector"]], + "(method 200 flamer-lava)": [[64, "vector"]], + "(method 204 flamer-lava)": [ + [16, "vector"], + [32, "vector"] + ], + "spt-func-birth-on-pop": [ + [16, "vector"], + [32, "vector"] + ], + "(code ambush mantis)": [[16, "vector"]], + "(code hop-away mantis)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 74 mantis)": [[1104, ["inline-array", "sphere", 6]]], + "(method 160 mantis)": [[16, "vector"]], + "(code shatter mhcity-dark-eco-door-broken)": [[16, "vector"]], + "(trans idle dm-mine-spider-spawner)": [[32, "enemy-init-by-other-params"]], + "(method 32 dm-mine-spider-spawner)": [[16, "cquery-with-vec"]], + "(method 33 dm-mine-spider-spawner)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 160 dm-mine-spider)": [[16, "vector"]], + "(method 192 dm-mine-spider)": [[32, "vector"]], + "check-drop-level-dm-mine-spider-dirt-rubble": [[16, "vector"]], + "(method 160 spyder)": [[16, "vector"]], + "(method 197 spyder)": [ + [640, "vector"], + [624, "vector"] + ], + "(method 79 v-faccar)": [[16, ["inline-array", "quaternion", 1]]], + "part-wasstada-bird2-path": [[80, "vector"]], + "(code ambush marauder)": [ + [32, "vector"], + [80, "vector"] + ], + "(code save marauder)": [[16, "vector"]], + "(code hostile marauder)": [[16, "vector"]], + "(trans hostile marauder)": [[32, "vector"]], + "(method 197 marauder)": [ + [64, "vector"], + [192, "vector"] + ], + "(method 40 wstd-fight-plat-box)": [ + [16, ["inline-array", "vector", 4]], + [128, "vector"] + ], + "(method 38 wstd-fight-plat-box)": [[16, "vector"]], + "(method 39 wstd-fight-plat-box)": [ + [32, ["array", "collide-shape", 64]], + [16, "vector"], + [288, "vector"] + ], + "(enter go-down task-manager-arena-fight)": [[16, "vector"]], + "(method 36 task-manager-arena-fight-base)": [[16, "vector"]], + "(method 32 task-manager-arena-fight-base)": [ + [16, "marauder-init-by-other-params"] + ], + "(enter go-down task-manager-arena-fight-2)": [[16, "vector"]], + "(method 15 hud-wasgun)": [[48, "vector"]], + "(method 25 wascity-turret-shot)": [[32, "vector"]], + "(method 31 dm-flyer-shot)": [[16, "light-trail-tracker-spawn-params"]], + "(method 31 maker-grenade)": [[32, "light-trail-tracker-spawn-params"]], + "spawn-skeet-enum": [[16, "vector"]], + "def-launch-circle": [ + [16, "vector"], + [32, "vector"] + ], + "(method 26 task-manager-wascity-gungame)": [[144, "vector"]], + "(method 56 wascity-turret)": [[32, "vector"]], + "(method 44 wascity-turret)": [ + [176, "vector"], + [144, "vector"] + ], + "(method 62 wascity-turret)": [ + [16, "matrix"], + [80, "vector"], + [752, "vector"], + [624, "vector"], + [656, "vector"], + [704, "vector"], + [880, "vector"] + ], + "(method 57 wascity-turret)": [[128, "vector"]], + "wascity-turret-add-radar": [[32, "vector"]], + "(method 21 traffic-manager)": [[16, ["array", "int8", 29]]], + "(method 13 xz-height-map)": [[16, ["inline-array", "vector", 2]]], + "(method 10 xz-height-map)": [[16, ["inline-array", "bounding-box", 2]]], + "(method 20 vehicle-controller)": [[16, ["inline-array", "vector", 2]]], + "(method 16 vehicle-controller)": [[16, ["inline-array", "vector", 2]]], + "(method 51 hvehicle)": [[16, "vehicle-physics-work"]], + "(method 90 hvehicle)": [[16, "vehicle-physics-work"]], + "(method 157 hvehicle)": [[16, "matrix"]], + "(method 94 hvehicle)": [[16, "matrix"]], + "(method 91 hvehicle)": [[16, "vehicle-controls"]], + "(method 54 hvehicle)": [[16, "rigid-body-move-work"]], + "(method 30 hvehicle)": [[16, ["inline-array", "vector", 2]]], + "(method 18 vehicle-controller)": [ + [32, "vehicle-physics-work"], + [288, ["array", "collide-shape", 10]] + ], + "(method 158 hvehicle)": [[16, ["inline-array", "vector", 2]]], + "(method 20 traffic-engine)": [[16, "traffic-find-segment-struct"]], + "(method 31 hvehicle)": [ + [960, ["inline-array", "vector", 4]], + [1056, "vector"], + [1072, ["inline-array", "vehicle-attach-point", 4]] + ], + "(method 97 hvehicle)": [[16, "collide-query"]], + "(method 78 hvehicle)": [[16, "hvehicle-effects-stack-var0"]], + "(post idle glider-ring)": [[128, "vector"]], + "glider-ring-standard-event-handler": [[16, ["inline-array", "vector", 2]]], + "glider-ring-init-by-other": [ + [48, "light-trail-tracker-spawn-params"], + [16, "vector"] + ], + "(method 49 h-glider)": [[16, "vector"]], + "(method 36 task-manager-desert-glide)": [[224, "vector"]], + "(method 26 task-manager-desert-glide)": [ + [96, ["array", "symbol", 10]], + [144, "vector"] + ], + "(method 31 h-glider)": [[48, "vehicle-physics-work"]], + "sparticle-shadow-update": [ + [16, "vector"], + [32, "matrix"], + [96, "vector"] + ], + "(method 27 was-pre-game)": [[16, "vector"]], + "(method 31 was-pre-game)": [ + [80, "vector"], + [96, "vector"], + [112, "vector"], + [128, "vector"] + ], + "(post attack was-pre-beam)": [[16, "vector"]], + "(post idle was-pre-beam)": [[16, "vector"]], + "(method 187 flut-racer)": [ + [96, ["array", "collide-shape", 384]], + [80, "vector"] + ], + "ring-hit-logic": [[112, "vector"]], + "(method 30 task-manager-wascity-leaper-race)": [ + [96, ["array", "symbol", 10]] + ], + "(code active task-manager-wascity-leaper-race)": [ + [32, ["array", "symbol", 10]] + ], + "(enter fail task-manager-wascity-leaper-race)": [ + [16, ["array", "symbol", 10]] + ], + "(method 26 task-manager-desert-catch-lizards)": [ + [224, ["array", "collide-shape", 32]] + ], + "(method 33 task-manager-desert-catch-lizards)": [ + [32, ["inline-array", "vector", 2]] + ], + "(method 165 desert-lizard)": [ + [32, "vector"], + [48, "vector"], + [64, ["inline-array", "vector", 1]] + ], + "(post idle desert-lizard-spawner)": [[48, "enemy-init-by-other-params"]], + "(anon-function 33 desert-scenes)": [[16, "vector"]], + "(method 19 dm-tentacle-ragdoll)": [ + [16, "vector"], + [32, "vector"] + ], + "foot-impact": [[16, "vector"]], + "launch-mine": [ + [16, "vector"], + [48, "enemy-init-by-other-params"] + ], + "(method 10 terraformer-foot-mark-pt-array)": [ + [592, ["inline-array", "vector", 4]], + [1216, "bounding-box"] + ], + "(enter run-script terraformer-head)": [[16, "vector"]], + "(enter swing-laser terraformer-head)": [[16, "vector"]], + "terraformer-head-launch-critter": [ + [16, "vector"], + [32, "enemy-init-by-other-params"], + [160, "matrix"] + ], + "terraformer-head-always": [ + [272, "vector"], + [256, "vector"] + ], + "(method 12 ocean)": [[16, "vector"]], + "(method 18 ocean)": [ + [16, "vector"], + [32, "vector4"], + [48, "vector"] + ], + "(method 28 ocean)": [[16, "vector"]], + "(method 33 ocean)": [[16, "vector"]], + "(method 34 ocean)": [[16, "vector"]], + "(method 35 ocean)": [[16, "vector"]], + "(method 36 ocean)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 46 ocean)": [[16, "vector"]], + "(method 59 ocean)": [[16, "vector"]], + "(method 60 ocean)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 61 ocean)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 62 ocean)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 63 ocean)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 67 ocean)": [[16, "vector"]], + "(post flying maker)": [[48, "vector"]], + "(post standup maker)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 36 maker)": [ + [64, "vector"], + [336, "vector"] + ], + "(method 41 maker)": [[560, "vector"]], + "maker-init-by-other": [[32, "light-trail-tracker-spawn-params"]], + "(trans active task-manager-bbush-spirit-chase)": [ + [80, "vector"], + [96, "vector"], + [128, "vector"] + ], + "(trans idle desert-chase-ring)": [[16, "vector"]], + "(trans active task-manager-bbush-spirit-drop)": [ + [80, "vector"], + [96, "vector"], + [128, "vector"] + ], + "(code active task-manager-desert-bbush-get-to)": [ + [160, "vector"], + [176, "matrix"] + ], + "(trans menu des-burning-bush)": [ + [16, "vector"], + [32, "vector"] + ], + "(trans talking des-burning-bush)": [[16, "des-burning-bush-stack-var0"]], + "(method 37 des-burning-bush)": [[16, "bbush-menu-state"]], + "(method 38 des-burning-bush)": [[112, "des-burning-bush-stack-var1"]], + "trail-effect-init-by-other": [[16, "light-trail-tracker-spawn-params"]], + "(trans active task-manager-bbush-timer-chase)": [[80, "vector"]], + "(event attack mh-wasp)": [[16, "projectile-init-by-other-params"]], + "(anon-function 9 mh-wasp)": [[112, "vector"]], + "check-mh-centipede-explosion-level": [[16, "vector"]], + "spt-func-ground-dirt-bounce2": [[16, "vector"]], + "spt-func-ground-dirt-bounce1": [[16, "vector"]], + "(method 42 mh-centipede)": [ + [144, "vector"], + [160, "vector"], + [176, "vector"], + [16, "projectile-init-by-other-params"] + ], + "(method 38 mh-centipede)": [[16, "matrix"]], + "(method 39 mh-centipede)": [[16, "matrix"]], + "(method 40 mh-centipede)": [ + [16, "matrix"], + [816, "vector"], + [832, "vector"] + ], + "(trans die mh-centipede)": [[96, "vector"]], + "(method 10 mh-centipede-crater-pt-array)": [ + [592, ["inline-array", "vector", 4]], + [1216, "bounding-box"] + ], + "(method 161 mh-bat)": [ + [16, "vector"], + [32, "vector"] + ], + "mh-bat-fly-post": [ + [16, "vector"], + [32, "vector"] + ], + "(post idle fac-fire-torch)": [[16, "matrix"]], + "fac-robopod-add-hoverbot": [[32, "enemy-init-by-other-params"]], + "(enter impact factory-boss-shockwave-bomb)": [[176, "vector"]], + "(method 9 factory-boss-lightning-gate)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 59 missile-bot)": [[80, "vector"]], + "factory-boss-launch-critter": [ + [32, "enemy-init-by-other-params"], + [160, "matrix"] + ], + "factory-boss-launch-critter-handler": [ + [96, "vector"], + [112, "vector"], + [128, "matrix"] + ], + "factory-boss-always": [ + [224, "vector"], + [16, "vector"], + [240, "vector"], + [80, "matrix"] + ], + "(method 201 bot)": [[16, "enemy-best-focus"]], + "(method 202 bot)": [[16, "connection-pers"]], + "(method 25 ashelin-shot)": [[32, "vector"]], + "(method 248 ashelin)": [ + [16, "nav-avoid-spheres-params"], + [112, "clamp-travel-vector-to-mesh-return-info"] + ], + "(code active task-manager-desert-oasis-defense)": [ + [112, "mystery-traffic-object-spawn-params0"] + ], + "(method 32 task-manager-desert-oasis-defense)": [ + [16, "mystery-traffic-object-spawn-params0"] + ], + "(method 33 task-manager-desert-oasis-defense)": [ + [16, "marauder-init-by-other-params"] + ], + "(method 26 task-manager-desert-oasis-defense)": [ + [96, "wvehicle-ai-drop-off-params"] + ], + "(trans active dark-eco-orb)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "collide-query"], + [624, "vector"], + [640, "vector"], + [656, "vector"], + [672, "vector"] + ], + "(method 26 task-manager-destroy-darkeco)": [[16, ["array", "symbol", 10]]], + "(trans idle grind-electricity)": [ + [16, "vector"], + [32, "vector"] + ], + "dark-eco-tower-init-by-other": [ + [16, "vector"], + [16, "vector"], + [32, "vector"], + [48, "puffer-init-by-other-params"] + ], + "spawn-shock-effect": [ + [80, "collide-query"], + [16, "matrix"], + [624, "vector"] + ], + "(method 34 comb-block)": [[16, "vector"]], + "(method 11 comb-pillar)": [[16, ["inline-array", "vector", 1]]], + "(method 25 comb-sentry-shot)": [[32, "vector"]], + "(method 32 comb-sentry)": [ + [16, "matrix"], + [80, ["inline-array", "vector", 5]] + ], + "(method 38 comb-sentry)": [[16, "comb-sentry-stack-var0"]], + "(method 39 comb-sentry)": [[16, "comb-sentry-stack-var1"]], + "sled-shot-reaction": [[16, ["inline-array", "vector", 1]]], + "(method 33 h-sled)": [[16, ["inline-array", "vector", 2]]], + "(method 90 h-sled)": [[16, "h-sled-physics-work"]], + "(method 93 h-sled)": [[16, "matrix"]], + "(method 38 h-sled)": [ + [16, "matrix"], + [64, ["inline-array", "vector", 2]] + ], + "(method 31 h-sled)": [ + [1056, "matrix"], + [1104, "matrix"], + [1168, "matrix"], + [16, "h-sled-physics-work"] + ], + "(method 97 h-sled)": [ + [16, "collide-query"], + [560, ["inline-array", "vector", 1]], + [624, "vector"] + ], + "(method 152 h-sled)": [[16, "comb-sentry-stack-var0"]], + "(method 25 sled-shot)": [[32, "vector"]], + "sled-find-mesh-dir": [[16, "h-sled-stack-var0"]], + "(method 78 h-sled)": [[16, "h-sled-stack-var1"]], + "(method 25 ffight-shot)": [[32, "vector"]], + "(enter impact ftank-shot)": [[16, "traffic-danger-info"]], + "(method 25 ftank-shot)": [[32, "vector"]], + "(method 25 fturret-shot)": [[32, "vector"]], + "(method 25 gun-warf-shot)": [[32, "vector"]], + "(enter impact warf-projectile)": [[16, "warf-explosion-sphere-init-params"]], + "(method 43 warf-projectile)": [[16, ["array", "collide-shape", 384]]], + "(method 91 h-warf)": [ + [112, "projectile-init-by-other-params"], + [80, "vector"], + [96, "vector"], + [864, "vector"] + ], + "(method 31 h-warf)": [[48, "vehicle-physics-work"]], + "(method 51 h-warf)": [[16, "rigid-body-impact"]], + "(method 54 h-warf)": [[16, "vehicle-physics-work"]], + "(method 78 h-warf)": [[16, "h-warf-stack-var0"]], + "(method 164 h-warf)": [[16, "vector"]], + "(code hostile fac-gunturret)": [[16, "vector"]], + "fac-robotank-turret-init-by-other": [[16, "vector"]], + "(method 31 fac-robotank-turret)": [[16, "collide-query"]], + "(method 33 fac-robotank-turret)": [ + [16, ["inline-array", "vector", 2]], + [48, ["inline-array", "vector", 2]] + ], + "robotank-turret-handler": [ + [16, "vector"], + [32, "quaternion"] + ], + "draw-2d-hud": [ + [16, ["inline-array", "vector4w", 4]], + [80, "vector4w"] + ], + "(method 36 fac-gun-tower)": [ + [16, "vector"], + [32, ["array", "collide-shape", 384]] + ], + "(method 35 fac-gun-tower)": [[32, "vector"]], + "fac-robotank-init-by-other": [[32, "vector"]], + "(trans flying factory-fighter)": [[16, "vector"]], + "(method 16 factory-manager)": [ + [48, "vector"], + [64, "vector"], + [80, "vector"], + [128, "vector"] + ], + "factory-fighter-init-by-other": [[16, "light-trail-tracker-spawn-params"]], + "(code explode factory-fighter)": [[112, "vector"]], + "(trans credits highres-viewer-manager)": [[16, "event-message-block"]], + "(trans idle hirez-viewer)": [[48, "vector"]], + "(code wait title-control)": [[16, "event-message-block"]], + "(code startup title-control)": [ + [16, ["array", "symbol", 10]], + [64, "event-message-block"], // this memory is reused as both mc-slot-info and event-message-block + [368, ["array", "symbol", 10]] + ], + "(method 9 nav-node)": [[48, ["inline-array", "vector", 2]]], + "(method 10 nav-node)": [[16, "vector"]], + "(method 9 nav-graph)": [[16, "matrix"]], + "(method 9 grid-info)": [[16, "vector"]], + "(method 11 grid-info)": [[16, "bounding-box"]], + "(method 13 grid-info)": [[16, "bounding-box"]], + "(method 9 city-level-info)": [ + [16, "vis-ray"], + [192, "vector"], + [208, "vector"], + [224, "vector"], + [128, "vector"], + [144, "vector"] + ], + "(method 11 city-level-info)": [[16, "vector"]], + "(method 12 city-level-info)": [[16, ["inline-array", "vector", 7]]], + "(method 17 city-level-info)": [[16, ["inline-array", "vis-grid-pos", 2]]], + "(method 16 city-level-info)": [ + [48, "vis-grid-box"], + [64, "vis-grid-box"] + ], + "(method 15 city-level-info)": [ + [32, "vis-grid-box"], + [16, "vis-grid-box"] + ], + "(method 14 traffic-level-data)": [ + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + "(method 18 city-level-info)": [[16, "bounding-box"]], + "(method 13 traffic-suppressor)": [ + [16, "bounding-box"], + [48, "vector4w"] + ], + "(method 22 traffic-tracker)": [[16, "traffic-engine-stack-var0"]], + "(method 22 traffic-engine)": [[16, "traffic-danger-info"]], + "(method 43 traffic-engine)": [[16, ["array", "collide-shape", 64]]], + "(method 52 traffic-engine)": [[16, "vector"]], + "(method 54 traffic-engine)": [ + [16, ["inline-array", "traffic-suppression-box", 2]], + [80, ["array", "collide-shape", 40]] + ], + "(method 53 traffic-engine)": [[16, ["array", "collide-shape", 40]]], + "(trans active formation-object)": [[48, "traffic-danger-info"]], + "(method 37 formation-object)": [[96, "vector"]], + "(method 38 formation-object)": [[16, "vector"]], + "(method 30 formation-object)": [[16, "msg-get-num-inactive"]], + "(method 204 citizen)": [ + [16, "vector"], + [32, "iter-seg"] + ], + "(method 207 citizen)": [ + [80, "vector"], + [32, "iter-seg"] + ], + "(method 202 citizen)": [ + [64, "vector"], + [80, "vector"] + ], + "(method 160 citizen)": [[16, "vector"]], + "(method 203 citizen)": [ + [80, "vector"], + [96, "vector"] + ], + "(method 45 formation-object)": [[16, "msg-get-inactive-objects"]], + "(trans move-to-vehicle civilian)": [ + [32, "vector"], + [128, "vector"] + ], + "civilian-flee-post": [ + [48, "vector"], + [80, "vector"] + ], + "civilian-avoid-danger-post": [[112, "vector"]], + "civilian-clear-path-post": [[96, "vector"]], + "(method 239 wlander)": [[48, "vector"]], + "(method 242 wlander)": [[32, "vector"]], + "(method 238 wlander)": [ + [32, ["array", "collide-shape", 64]], + [288, "vector"] + ], + "(method 241 wlander)": [ + [32, ["array", "collide-shape", 64]], + [288, "vector"] + ], + "(method 13 flee-info)": [ + [48, "vector"], + [64, "vector"] + ], + "(method 15 rope-system)": [ + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + "(enter rescue-start task-manager-desert-rescue)": [ + [16, "desert-rescue-transport-init-params"] + ], + "(code board-vehicle wland-passenger)": [ + [128, "vector"], + [176, "vector"] + ], + "(trans boarding wland-passenger)": [[32, "vector"]], + "(enter approaching-transport wland-passenger)": [[16, "vector"]], + "(method 231 wland-passenger)": [[16, "matrix"]], + "spawn-wlander": [[16, "wland-passenger-init-by-other-params"]], + "update-nav-sphere": [[64, "vector"]], + "compute-transport-approach-pt": [[48, "vector"]], + "(method 19 rope-prim-system)": [ + [48, "matrix"], + [16, "vector"], + [32, "vector"], + [208, "rgbaf"], + [224, "rgbaf"] + ], + "(method 211 neo-sat)": [[16, "vector"]], + "(method 232 neo-sat)": [[32, "vector"]], + "(method 220 neo-sat)": [[16, "vector"]], + "(method 221 neo-sat)": [[32, "vector"]], + "(method 206 neo-sat)": [ + [32, "vector"], + [48, "collide-query"] + ], + "(method 227 neo-sat)": [[16, "collide-query"]], + "spawn-neo-sat": [[16, "neo-sat-init-params"]], + "desert-rescue-transport-init-by-other": [ + [16, "light-trail-tracker-spawn-params"] + ], + "(method 254 crimson-guard)": [ + [16, "vector"], + [96, "vector"] + ], + "(method 255 crimson-guard)": [[64, "vector"]], + "(enter grenade-throw-post-reloading crimson-guard)": [ + [16, "reload-grenade-spawn-params"] + ], + "(method 46 ff-squad-control)": [[112, "ff-squad-control-stack-var0"]], + "(method 16 ff-squad-control)": [[192, ["array", "float", 16]]], + "(method 45 ff-squad-control)": [[16, "vector"]], + "(method 258 crimson-guard)": [[16, "collide-query"]], + "(method 259 crimson-guard)": [ + [96, "vector"], + [32, "vector"], + [48, "vector"], + [160, "vector"], + [176, "vector"] + ], + "(method 212 crimson-guard)": [[16, "shield-sphere-spawn-params"]], + "(method 266 crimson-guard)": [ + [32, "vector"], + [656, "vector"], + [720, "vector"] + ], + "(code sitting vehicle-grenade)": [[16, "traffic-danger-info"]], + "(method 44 vehicle-grenade)": [[16, "traffic-danger-info"]], + "(method 31 vehicle-grenade)": [[16, "vector"]], + "(method 264 crimson-guard)": [[32, "vector"]], + "(method 78 h-bike-base)": [[16, "bike-stack-var0"]], + "(method 217 citizen-enemy)": [[32, ["array", "collide-shape", 64]]], + "(method 225 metalhead-predator)": [ + [160, "vector"], + [176, "vector"], + [208, "vector"] + ], + "(trans close-attack roboguard-city)": [ + [32, ["array", "collide-shape", 384]] + ], + "(code roll-chase roboguard-city)": [[16, "vector"]], + "spawn-roboguard-projectile": [[16, "projectile-init-by-other-params"]], + "(method 237 roboguard-city)": [[16, "vector"]], + "(code flip spydroid)": [[16, "vector"]], + "(trans fire flying-turret)": [[16, "ft-gun-info"]], + "(method 161 flying-turret)": [[16, "vector"]], + "(method 31 h-kg-pickup)": [[48, "vector"]], + "(method 11 flitter-spawner)": [[32, "traffic-object-spawn-params"]], + "(method 21 flitter-spawner)": [[16, "traffic-object-spawn-params"]], + "(code active task-manager-ctywide-bbush-get-to)": [ + [160, "vector"], + [176, "matrix"] + ], + "(trans talking burning-bush)": [ + [32, "vector"], + [64, "vector"] + ], + "(method 32 propa)": [[16, ["array", "collide-shape", 64]]], + "(event idle propa)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 23 parking-spot)": [ + [16, "cquery-with-vec"], + [560, ["inline-array", "vector", 1]] + ], + "(method 24 parking-spot)": [[16, "cquery-with-vec"]], + "(method 11 security-wall)": [[32, "vector"]], + "(method 24 security-wall)": [[16, ["inline-array", "vector", 1]]], + "(trans menu burning-bush)": [[128, "vector"]], + "check-drop-level-ctyport-drop-userdata": [[16, "vector"]], + "(method 16 boat-manager)": [[16, "matrix"]], + "(method 31 boat-base)": [[16, "matrix"]], + "(method 30 boat-base)": [[96, ["inline-array", "vector", 6]]], + "(trans idle krimson-wall-break)": [[16, "matrix"]], + "(trans explode krimson-wall-break)": [[16, "vector"]], + "(method 35 htorpedo)": [[16, "light-trail-tracker-spawn-params"]], + "(enter start-mission ctyport-attack-manager)": [ + [16, ["array", "symbol", 10]] + ], + "(method 49 ctyport-attack-manager)": [ + [64, ["array", "collide-shape", 384]], + [32, "vector"] + ], + "(method 44 ctyport-attack-manager)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 45 ctyport-attack-manager)": [[16, "vector"]], + "(method 79 v-catapult)": [[16, ["inline-array", "quaternion", 3]]], + "(method 33 desert-jump-manager)": [[16, "vector"]], + "(code active desert-jump-manager)": [[96, ["array", "symbol", 10]]], + "(method 32 desert-jump-manager)": [ + [16, "mystery-traffic-object-spawn-params0"] + ], + "(method 23 beam-generator)": [[16, "matrix"]], + "(trans active player-controller)": [ + [32, "vector"], + [48, "vector"] + ], + "(code active desert-chase-ambush-manager)": [ + [16, ["inline-array", "traffic-object-spawn-params", 1]] + ], + "(method 34 desert-chase-ambush-manager)": [ + [16, "projectile-init-by-other-params"] + ], + "(method 33 desert-chase-ambush-manager)": [ + [16, "mystery-traffic-object-spawn-params0"] + ], + "(method 32 desert-chase-ambush-manager)": [ + [16, "marauder-init-by-other-params"] + ], + "(method 22 deschase-artifact)": [[16, "matrix"]], + "(method 12 deschase-vehicle-control)": [ + [64, ["array", "collide-shape", 128]], + [16, "matrix"] + ], + "(method 32 desert-chase-chase-manager)": [ + [16, "traffic-object-spawn-params"] + ], + "desert-chase-chase-intro-sequence": [[16, "player-controller-init-params"]], + "(method 32 bombbot-bomb)": [[592, "vector"]], + "bombbot-player-init-by-other": [[96, "vector"]], + "(trans hostile bombbot-player)": [[16, "vector"]], + "(post hostile bombbot-player)": [ + [576, "vector"], + [16, "vector"], + [592, "vector"] + ], + "(method 197 bombbot-player)": [ + [80, "matrix"], + [144, "vector"], + [720, "vector"], + [736, "vector"] + ], + "(method 196 bombbot-player)": [ + [16, "vector"], + [32, "vector"], + [48, "collide-query"], + [592, ["array", "collide-shape", 64]], + [848, "vector"] + ], + "(method 139 bombbot-player)": [ + [560, "vector"], + [576, "vector"], + [592, "vector"], + [608, "vector"], + [1168, "vector"], + [1216, "collide-query"] + ], + "(post hostile bomb-bot)": [[16, "vector"]], + "(trans hostile bomb-bot)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 196 bomb-bot)": [[16, ["array", "collide-shape", 64]]], + "(method 198 bombbot)": [ + [48, "vector"], + [64, "vector"], + [144, "vector"] + ], + "bombbot-gun-callback": [ + [32, "vector"], + [80, "vector"] + ], + "bombbot-gun-swivel-callback": [ + [16, "vector"], + [80, "vector"] + ], + "bombbot-callback": [ + [16, "vector"], + [32, "quaternion"], + [48, "vector"], + [64, "vector"] + ], + "(enter explode bombbot)": [ + [112, "vector"], + [128, "vector"], + [144, "vector"], + [256, "vector"] + ], + "(trans drop-bombs bombbot)": [[32, "vector"]], + "(trans hostile bombbot)": [[32, "vector"]], + "(method 160 bombbot)": [[32, "vector"]], + "(method 197 bombbot)": [ + [80, "matrix"], + [144, "vector"], + [720, "vector"], + [736, "vector"] + ], + "(method 203 bombbot)": [ + [80, "vector"], + [176, "vector"], + [400, "vector"] + ], + "(method 204 bombbot)": [[80, "vector"]], + "(method 194 bombbot)": [ + [608, "vector"], + [592, "vector"], + [624, "vector"], + [672, "vector"], + [720, "vector"] + ], + "(method 196 bombbot)": [[16, ["array", "collide-shape", 64]]], + "(method 25 bombbot-shot)": [[32, "vector"]], + "(enter blow-wall bombbot)": [[16, ["array", "symbol", 10]]], + "check-drop-level-ctysluma-drop-userdata": [[16, "vector"]], + "check-drop-level-ctyslumb-drop-userdata": [[16, "vector"]], + "(method 36 cty-missile-lure)": [[16, "vector"]], + "(method 36 cty-hijack-manager)": [[16, "cty-hijack-missile-init-params"]], + "(enter player-riding cty-hijack-manager)": [ + [96, "cty-missile-lure-init-params"], + [144, "cty-missile-lure-init-params"] + ], + "(method 38 cty-hijack-manager)": [ + [64, "vector"], + [80, "vector"] + ], + "(code wait ctyport-attack-manager-bbush)": [[96, ["array", "symbol", 10]]], + "check-drop-level-palroof-drop-userdata": [[16, "vector"]], + "check-drop-level-ctyfarmb-drop-userdata": [[16, "vector"]], + "check-drop-level-ctyfarma-drop-userdata": [[16, "vector"]], + "(method 11 com-power-box)": [ + [16, "vector"], + [48, "vector"] + ], + "(enter active task-manager-city-destroy-grid)": [ + [224, "enemy-init-by-other-params"] + ], + "(code exit-vehicle jinx)": [ + [32, "vector"], + [64, "vector"] + ], + "(code board-vehicle jinx)": [[16, "vector"]], + "(trans move-to-vehicle jinx)": [ + [32, "vector"], + [128, "vector"] + ], + "(post moribund cty-sniper-button)": [[16, "vector"]], + "(method 11 cty-sniper-turret)": [[32, "vector"]], + "sniper-turret-post": [[112, "vector"]], + "citysniper-draw-2d-hud": [ + [16, ["inline-array", "vector4w", 4]], + [80, "vector4w"] + ], + "(enter lock cty-sniper-turret-reticle)": [[16, "vector"]], + "(enter impact cty-sniper-turret-shot)": [[16, "traffic-danger-info"]], + "(method 25 cty-sniper-turret-shot)": [[32, "vector"]], + "cty-sniper-turret-handler": [[96, "vector"]], + "king-pilot-trans": [[16, "matrix"]], + "(method 32 rubble-attack-manager)": [ + [16, "vector"], + [592, "traj3d-params"], + [672, "vector"] + ], + "(method 30 power-game)": [[32, "vector"]], + "(method 44 power-game)": [[32, "vector"]], + "spt-func-ground-spark-bounce": [[16, "vector"]], + "gun-dummy-gun-aim-jmod-func": [[16, "vector"]], + "(method 38 gun-dummy-gun)": [[16, "primary-target-pos-vel"]], + "(method 29 gungame-manager)": [[16, "primary-target-pos-vel"]], + "(method 30 gungame-manager)": [ + [16, ["inline-array", "primary-target-pos-vel", 2]] + ], + "(method 11 blow-tower-path-cursor)": [[16, "vector"]], + "(method 44 tower-flyer)": [[16, "flyer-projectile-params"]], + "(method 49 tower-flyer)": [ + [48, "collide-query"], + [16, "vector"] + ], + "(method 41 bt-barrel)": [[32, ["array", "collide-shape", 384]]], + "(method 40 bt-barrel)": [[32, ["array", "collide-shape", 384]]], + "setup-bt-barrels": [ + [32, "vector"], + [64, "vector"] + ], + "bt-barrel-ground-probe": [[16, "collide-query"]], + "(method 51 bt-mh-flyer)": [ + [16, "vector"], + [112, "vector"] + ], + "(method 40 bt-missile)": [[112, "vector"]], + "(anon-function 16 blow-tower-obs2)": [[112, "quaternion"]], + "kg-bombbot-find-nearest-nav-mesh": [[16, "nav-poly"]], + "(method 47 bt-grunt)": [[16, "vector"]], + "(method 22 bt-gun-manager)": [[16, "vector"]], + "(method 36 bt-hellcat)": [ + [16, "matrix"], + [80, "vector"], + [96, "vector"], + [112, "vector"], + [128, "vector"] + ], + "(method 43 bt-pickup)": [[16, "vector"]], + "(method 38 task-manager-blow-tower)": [[480, "vector"]], + "(method 18 bt-gun-manager)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [208, "vector"] + ], + "(method 32 bt-vehicle)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 47 tower-flyer)": [ + [32, "vector"], + [48, "vector"], + [144, "vector"] + ], + "(method 20 bt-gun-manager)": [ + [48, "vector"], + [64, "vector"], + [96, "vector"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"], + [800, "vector"], + [816, "vector"], + [848, "vector"], + [896, "vector"], + [912, "vector"], + [928, "vector"], + [944, "vector"], + [1552, "vector"], + [1568, "vector"], + [1600, "vector"], + [1648, "vector"], + [1664, "vector"], + [1680, "vector"], + [1696, "vector"] + ], + "(method 19 bt-gun-manager)": [ + [80, "vector"], + [32, "vector"], + [48, "vector"] + ], + "(method 31 bt-pickup)": [[128, "vector"]], + "(method 31 bt-hellcat)": [ + [176, "vector"], + [192, "vector"], + [240, "vector"], + [320, "vector"], + [336, "vector"] + ], + "(method 50 bt-hellcat)": [ + [16, "vector"], + [32, "quaternion"] + ], + "(method 47 bt-hellcat)": [ + [80, "vector"], + [32, "vector"], + [96, "matrix"] + ], + "(method 48 bt-hellcat)": [ + [32, "vector"], + [48, "vector"] + ], + "(method 29 bt-hellcat)": [[112, "quaternion"]], + "(method 21 bt-gun-manager)": [ + [320, "collide-query"], + [160, "vector"] + ], + "draw-path-blow-curve": [[16, "matrix"]], + "(method 22 trail-graph)": [[16, "trail-vis-work"]], + "(method 13 trail-graph)": [[16, ["inline-array", "vector", 3]]], + "(method 16 trail-graph)": [[16, ["inline-array", "vector", 2]]], + "(method 17 trail-graph)": [[16, "trail-conn-search"]], + "(trans explode gunship-missile)": [[32, ["array", "collide-shape", 384]]], + "(trans spinning-laser protect-gunship)": [ + [32, "vector"], + [64, "vector"] + ], + "find-reposition-pt": [ + [16, "vector"], + [96, "vector"], + [112, "vector"] + ], + "(method 50 protect-gunship)": [[16, "vector"]], + "find-nearest-nav-mesh-protect": [[16, "nav-poly"]], + "(method 37 protect-gunship)": [[752, "vector"]], + "(method 36 protect-gunship)": [[16, "gunship-missile-init-params"]], + "(method 39 protect-gunship)": [[16, "protect-gunship-enemy-spawn-params"]], + "(method 55 protect-gunship)": [[16, "collide-query"]], + "(method 21 prot-crate)": [[16, "vector"]], + "(method 36 task-manager-protect-hq)": [[16, "protect-gunship-init-params"]], + "spawn-protect-enemy": [[16, "traffic-object-spawn-params"]], + "(method 35 task-manager-protect-hq)": [[16, "traffic-object-spawn-params"]], + "(trans hostile assault-bombbot)": [[32, "vector"]], + "(enter explode assault-bombbot)": [[112, ["array", "collide-shape", 384]]], + "(code roll-initial assault-roboguard)": [[16, "vector"]], + "(method 31 assault-bombbot-shot)": [ + [16, "light-trail-tracker-spawn-params"] + ], + "(code active task-manager-city-port-assault)": [ + [16, "player-controller-init-params"] + ], + "(method 40 task-manager-city-port-assault)": [[16, ["array", "symbol", 10]]], + "(enter combat task-manager-city-port-assault)": [ + [16, "player-controller-init-params"] + ], + "(code player-entrance task-manager-city-port-assault)": [ + [16, "player-controller-init-params"] + ], + "(enter transition task-manager-city-port-assault)": [ + [16, "player-controller-init-params"] + ], + "(method 47 task-manager-city-port-assault)": [[64, "vector"]], + "(method 48 task-manager-city-port-assault)": [[64, "vector"]], + "(method 41 task-manager-city-port-assault)": [[48, "vector"]], + "(trans idle precur-generator)": [[112, "vector"]], + "(method 23 precur-generator-d)": [[16, "vector"]], + "(event idle precur-door-d)": [[16, "attack-info"]], + "(method 23 precur-door-c)": [[112, "vector"]], + "(method 11 precur-path)": [[16, "vector"]], + "precur-bomb-handler": [[16, "attack-info"]], + "(event idle precur-bomb-spawner)": [[16, "attack-info"]], + "(method 21 precur-bomb-spawner)": [[16, "vector"]], + "precur-bomb-init-by-other": [[16, "vector"]], + "(method 25 precur-laser-beam)": [[16, "collide-query"]], + "(method 24 precur-laser-beam)": [[16, "collide-query"]], + "process-drawable-shock-wave-effect": [ + [16, "matrix"], + [80, "collide-query"] + ], + "(method 22 precur-path)": [[16, "collide-query"]], + "precur-bridge-path-2nd-trigger": [[16, "vector"]], + "precur-bridge-blocks-trigger": [[16, "vector"]], + "precur-bridge-path-trigger": [[16, "vector"]], + "(post idle precur-bridge-blocks-break)": [ + [16, "vector"], + [32, "vector"] + ], + "texture-anim-layer-draw": [ + [16, "matrix"], + [80, "matrix"], + [144, "matrix"], + [208, "matrix"] + ], + "closest-pt-in-triangle": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + "vector-interp-angle!": [[16, "quaternion"]], + "vector-cap-rotation!": [[16, "quaternion"]], + "camera-teleport-to-entity": [[16, "transformq"]], + "camera-teleport-to-location": [[16, "transformq"]] +} diff --git a/decompiler/config/jakx/potentially_useful/type_casts.jsonc b/decompiler/config/jakx/potentially_useful/type_casts.jsonc new file mode 100644 index 0000000000..643f6d1fba --- /dev/null +++ b/decompiler/config/jakx/potentially_useful/type_casts.jsonc @@ -0,0 +1,11232 @@ +{ + // NOTE: almost all of these were just copy pasted from jak2 + // so it's impossible to know which are actually needed for jakx... + // commenting out incase there's something here actually needed + + "(method 2 array)": [ + [23, "gp", "(array int32)"], + [43, "gp", "(array uint32)"], + [63, "gp", "(array int64)"], + [83, "gp", "(array uint64)"], + [102, "gp", "(array int8)"], + [121, "gp", "(array uint8)"], + [141, "gp", "(array int16)"], + [161, "gp", "(array uint16)"], + [186, "gp", "(array uint128)"], + [204, "gp", "(array int32)"], + [223, "gp", "(array float)"], + [232, "gp", "(array float)"], + [249, "gp", "(array basic)"], + [258, "gp", "(array basic)"] + ], + "(method 3 array)": [ + [51, "gp", "(array int32)"], + [69, "gp", "(array uint32)"], + [87, "gp", "(array int64)"], + [105, "gp", "(array uint64)"], + [122, "gp", "(array int8)"], + [139, "gp", "(array int8)"], + [157, "gp", "(array int16)"], + [175, "gp", "(array uint16)"], + [198, "gp", "(array uint128)"], + [214, "gp", "(array int32)"], + [233, "gp", "(array float)"], + [250, "gp", "(array basic)"] + ], + "(method 0 cpu-thread)": [[[0, 35], "v0", "cpu-thread"]], + "(method 0 process)": [ + [11, "a0", "int"], + [[12, 52], "v0", "process"] + ], + "inspect-process-heap": [ + [[4, 11], "s5", "basic"], + [17, "s5", "pointer"] + ], + "(method 15 dead-pool)": [ + [[24, 25], "v1", "(pointer process)"], + [[30, 39], "s4", "(pointer process)"] + ], + "(method 25 dead-pool-heap)": [ + [5, "v1", "pointer"], + [13, "a0", "pointer"], + [25, "v1", "pointer"] + ], + "method-state": [[12, "a2", "state"]], + "(method 0 protect-frame)": [ + [0, "a0", "int"], + [[1, 8], "v0", "protect-frame"] + ], + "(method 9 process)": [[[58, 61], "s5", "process"]], + "(method 10 process)": [[[17, 27], "s4", "protect-frame"]], + "string-cat-to-last-char": [ + [3, "s5", "(pointer uint8)"], + [4, "s5", "string"] + ], + "enter-state": [ + [70, "s0", "protect-frame"], + [103, "t9", "(function object object object object object object none)"] + ], + "send-event-function": [[[7, 15], "a0", "process"]], + "logf": [ + [12, "f0", "float"], + [12, "f1", "float"], + [19, "f0", "float"], + [19, "f1", "float"] + ], + "log2f": [ + [12, "f0", "float"], + [12, "f1", "float"], + [19, "f0", "float"], + [19, "f1", "float"] + ], + "cube-root": [ + [17, "f0", "float"], + [17, "f1", "float"], + [18, "f0", "float"], + [18, "f1", "float"], + [[23, 32], "f0", "float"] + ], + "generate-rand-vector-on-sphere": [ + [12, "v1", "float"], + [28, "v1", "float"] + ], + "vector-segment-distance-point!": [[[21, 30], "f1", "float"]], + "vector4-array-add!": [ + [11, "s5", "(inline-array vector4)"], + [12, "s4", "(inline-array vector4)"], + [13, "gp", "(inline-array vector4)"] + ], + "vector4-array-sub!": [ + [11, "s5", "(inline-array vector4)"], + [12, "s4", "(inline-array vector4)"], + [13, "gp", "(inline-array vector4)"] + ], + "vector4-array-mul!": [ + [11, "s5", "(inline-array vector4)"], + [12, "s4", "(inline-array vector4)"], + [13, "gp", "(inline-array vector4)"] + ], + "vector4-array-scale!": [ + [11, "s5", "(inline-array vector4)"], + [12, "gp", "(inline-array vector4)"] + ], + "vector4-array-madd!": [ + [13, "s5", "(inline-array vector4)"], + [14, "s4", "(inline-array vector4)"], + [15, "gp", "(inline-array vector4)"] + ], + "vector4-array-msub!": [ + [13, "s5", "(inline-array vector4)"], + [14, "s4", "(inline-array vector4)"], + [15, "gp", "(inline-array vector4)"] + ], + "vector4-array-lerp!": [ + [13, "s5", "(inline-array vector4)"], + [14, "s4", "(inline-array vector4)"], + [15, "gp", "(inline-array vector4)"] + ], + "(method 9 clock)": [[47, "v1", "float"]], + "service-cpads": [[[207, 311], "s3", "pad-buttons"]], + "(method 3 connection-pers)": [[97, "f0", "float"]], + "(method 0 engine-pers)": [ + [32, "v1", "pointer"], + [23, "v1", "pointer"], + [26, "v1", "pointer"], + [24, "v1", "(pointer pointer)"] + ], + "(method 0 engine)": [ + [44, "v1", "pointer"], + [47, "v1", "pointer"], + [53, "v1", "connectable"], + [65, "v1", "connectable"] + ], + "(method 21 engine)": [[8, "a0", "connection"]], + "(method 20 engine)": [[8, "a0", "connection"]], + "(method 19 engine)": [[8, "a0", "connection"]], + "(method 15 engine)": [[[0, 36], "v1", "connection"]], + "(method 13 engine)": [ + [[0, 25], "s4", "connection"], + [13, "t9", "(function object object object object object)"] + ], + "(method 12 engine)": [ + [[0, 25], "s4", "connection"], + [13, "t9", "(function object object object object object)"] + ], + "(method 9 connection)": [[8, "a0", "pointer"]], + "(method 10 connection)": [[8, "a0", "pointer"]], + "(method 11 connection)": [[5, "a1", "pointer"]], + "(method 10 profile-array)": [ + [[69, 73], "a0", "(pointer uint128)"], + [[73, 82], "a1", "vector4w"], + [[82, 89], "a1", "vector4w"], + [[90, 96], "a0", "vector4w"], + [[113, 117], "a1", "(pointer uint128)"], + [[117, 126], "a2", "vector4w"], + [[126, 136], "a2", "vector4w"], + [[137, 149], "a1", "vector4w"], + [[187, 191], "t2", "(pointer int128)"], + [[191, 225], "t4", "vector4w"], + [[225, 231], "a2", "vector4w"], + [[231, 237], "a2", "vector4w"] + ], + "draw-sprite2d-xy": [ + [[35, 40], "t0", "dma-packet"], + [[45, 49], "t0", "gs-gif-tag"], + [54, "t0", "(pointer gs-prim)"], + [56, "t0", "(pointer gs-rgbaq)"], + [67, "t0", "(pointer gs-xyzf)"], + [88, "t0", "(pointer gs-xyzf)"], + [[97, 109], "v1", "(pointer uint64)"] + ], + "draw-sprite2d-xy-absolute": [ + [[6, 10], "t4", "dma-packet"], + [[16, 19], "t4", "gs-gif-tag"], + [24, "t4", "(pointer gs-prim)"], + [25, "t4", "(pointer gs-rgbaq)"], + [36, "t4", "(pointer gs-xyzf)"], + [49, "t4", "(pointer gs-xyzf)"], + [[62, 69], "v1", "(pointer uint64)"] + ], + "draw-quad2d": [ + [[18, 22], "t2", "dma-packet"], + [[28, 31], "t2", "gs-gif-tag"], + [36, "t2", "(pointer gs-prim)"], + [38, "t2", "(pointer gs-rgbaq)"], + [46, "t2", "(pointer gs-xyzf)"], + [48, "t2", "(pointer gs-rgbaq)"], + [61, "t2", "(pointer gs-xyzf)"], + [63, "t2", "(pointer gs-rgbaq)"], + [76, "t2", "(pointer gs-xyzf)"], + [78, "t2", "(pointer gs-rgbaq)"], + [96, "t2", "(pointer gs-xyzf)"], + [97, "t2", "(pointer uint64)"], + [[110, 117], "v1", "(pointer uint64)"] + ], + "dma-bucket-insert-tag": [ + [[2, 6], "v1", "dma-bucket"], + [3, "a0", "dma-bucket"] + ], + "dma-buffer-add-buckets": [ + [[1, 4], "v1", "dma-bucket"], + [5, "v1", "pointer"], + [[9, 11], "v1", "dma-bucket"], + [11, "v1", "pointer"] + ], + "dma-buffer-patch-buckets": [ + [[3, 34], "a0", "dma-bucket"], + [[34, 38], "a0", "dma-packet"] + // [34, "a0", "(inline-array dma-bucket)"] + ], + "disasm-dma-list": [ + [43, "v1", "dma-packet"], + [266, "v1", "(pointer uint64)"], + [272, "v1", "(pointer uint64)"], + [133, "v1", "(pointer uint64)"], + [152, "v1", "(pointer uint64)"], + [167, "v1", "(pointer uint64)"], + [176, "v1", "(pointer uint64)"], + [198, "v1", "(pointer uint64)"], + [207, "v1", "(pointer uint64)"], + [238, "v1", "(pointer uint64)"], + [247, "v1", "(pointer uint64)"], + [282, "v1", "(pointer uint64)"], + [291, "v1", "(pointer uint64)"], + [324, "v1", "(pointer uint64)"], + [334, "v1", "(pointer uint64)"], + [141, "v1", "int"], + [25, "v1", "dma-tag"] + ], + "(method 3 connection-minimap)": [[97, "f0", "float"]], + "dma-buffer-add-ref-texture": [ + [[47, 54], "a3", "dma-packet"], + [[56, 69], "a3", "gs-gif-tag"], + [[71, 87], "a2", "dma-packet"] + ], + "texture-page-default-allocate": [[51, "a3", "(pointer int32)"]], + "texture-page-font-allocate": [[33, "a3", "(pointer int32)"]], + "upload-vram-pages": [[[187, 193], "v1", "dma-packet"]], + "upload-vram-pages-pris": [[[181, 187], "v1", "dma-packet"]], + "(method 13 texture-page)": [[45, "a0", "(pointer uint64)"]], + "(method 11 texture-pool)": [[217, "a0", "(pointer uint64)"]], + "texture-page-login": [[34, "v0", "texture-page"]], + "(method 9 texture-page-dir)": [ + [[36, 40], "t1", "adgif-shader"], + [[31, 41], "t2", "(pointer shader-ptr)"], + [37, "t0", "(pointer int32)"] + ], + "texture-page-dir-inspect": [[[137, 138], "v1", "adgif-shader"]], + "(method 24 texture-pool)": [ + [[77, 100], "a1", "adgif-shader"] + // [[70, 93], "a1", "adgif-shader"], + // [92, "a1", "adgif-shader"] + ], + "(method 8 res-lump)": [ + [258, "s0", "array"], + [[157, 239], "s0", "(array object)"] + ], + "(method 15 res-lump)": [[132, "s5", "res-tag-pair"]], + "(method 17 res-lump)": [[22, "s4", "(pointer pointer)"]], + "(method 19 res-lump)": [ + [38, "t2", "int"], + [38, "a2", "int"] + ], + "(method 20 res-lump)": [[341, "t0", "(pointer uint128)"]], + "(method 16 res-lump)": [ + [22, "t1", "(pointer uint64)"], + [29, "t2", "(pointer uint64)"] + ], + "(method 18 res-lump)": [["_stack_", 16, "object"]], + "(method 21 res-lump)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"] + ], + "(method 0 fact-info-target)": [[3, "v0", "fact-info-target"]], + "(method 0 fact-info-crate)": [[3, "v0", "fact-info-crate"]], + "(method 0 fact-info-enemy)": [ + [7, "v0", "fact-info-enemy"], + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"] + ], + "(method 0 fact-info)": [ + [87, "v1", "(pointer int32)"], + [11, "v1", "res-lump"] + ], + "(method 0 collide-shape-moving)": [[[5, 12], "v0", "collide-shape-moving"]], + "(method 0 collide-shape-prim-group)": [ + [[6, 12], "v0", "collide-shape-prim-group"] + ], + "(method 0 collide-shape-prim-sphere)": [ + [[5, 8], "v0", "collide-shape-prim-sphere"] + ], + "(method 0 collide-shape-prim-mesh)": [ + [[6, 11], "v0", "collide-shape-prim-mesh"] + ], + "(method 0 touching-list)": [[[6, 8], "v0", "touching-list"]], + "(method 11 touching-prims-entry-pool)": [ + [[0, 8], "v1", "touching-prims-entry"], + [8, "v1", "pointer"], + [[9, 11], "v1", "touching-prims-entry"], + [[1, 20], "a1", "touching-prims-entry"] + ], + "(method 0 prim-strip)": [[[101, 121], "a0", "vector"]], + "(method 0 script-context)": [[[8, 17], "v0", "script-context"]], + "joint-mod-spinner-callback": [[[2, 63], "gp", "joint-mod-spinner"]], + "joint-mod-rotate-local-callback": [ + [[2, 16], "v1", "joint-mod-rotate-local"] + ], + "joint-mod-rotate-world-callback": [ + [[0, 24], "s3", "joint-mod-rotate-world"] + ], + "num-func-chan": [[7, "v1", "joint-control-channel"]], + "joint-channel-float-delete!": [ + [7, "a0", "pointer"], + [7, "a1", "pointer"] + ], + "(method 21 process-focusable)": [ + [15, "gp", "collide-shape-moving"], + [35, "gp", "collide-shape-moving"] + ], + "joint-mod-set-local-callback": [[[1, 24], "v1", "joint-mod-set-local"]], + "joint-mod-add-local-callback": [[[1, 37], "s4", "joint-mod-add-local"]], + "joint-mod-set-world-callback": [[[1, 4], "v1", "joint-mod-set-local"]], + "joint-mod-set-world-no-trans-callback": [ + [[1, 25], "s4", "joint-mod-set-world-no-trans"] + ], + "joint-mod-blend-local-callback": [[[1, 28], "gp", "joint-mod-blend-local"]], + "joint-mod-blend-world-callback": [[[1, 150], "gp", "joint-mod-blend-world"]], + "(top-level-login eye-h)": [[77, "a3", "eye-control"]], + "entity-actor-lookup": [["_stack_", 16, "res-tag"]], + "entity-actor-count": [["_stack_", 16, "res-tag"]], + "(method 3 collide-query)": [ + [116, "f0", "float"], + [137, "f0", "float"] + ], + "shrubbery-login-post-texture": [ + [[13, 15], "a3", "qword"], + [16, "a3", "pointer"], + [24, "a3", "pointer"], + [[17, 23], "a3", "qword"], + [[13, 23], "a1", "qword"], + [14, "a2", "qword"], + [[27, 29], "a3", "qword"], + [[27, 29], "a1", "qword"], + [[35, 37], "a3", "qword"], + [[35, 37], "a2", "qword"] + ], + "(method 3 sparticle-cpuinfo)": [[110, "f0", "float"]], + "(method 0 path-control)": [["_stack_", 16, "res-tag"]], + "str-load": [[[18, 44], "s2", "load-chunk-msg"]], + "str-load-status": [ + [[18, 22], "v1", "load-chunk-msg"], + [26, "v1", "load-chunk-msg"] + ], + "str-play-async": [[[7, 40], "s2", "play-chunk-msg"]], + "str-play-stop": [[[7, 36], "s4", "play-chunk-msg"]], + "str-play-queue": [[[7, 98], "s4", "play-chunk-msg"]], + "str-ambient-play": [[[7, 20], "s5", "play-chunk-msg"]], + "str-ambient-stop": [[[7, 20], "s5", "play-chunk-msg"]], + "dgo-load-begin": [[[19, 43], "s1", "load-dgo-msg"]], + "dgo-load-get-next": [[[14, 31], "v1", "load-dgo-msg"]], + "dgo-load-continue": [[[5, 23], "gp", "load-dgo-msg"]], + "dgo-load-cancel": [[[3, 8], "v0", "sound-rpc-cancel-dgo"]], + "dgo-load-link": [ + [7, "s4", "uint"], + [17, "s4", "uint"], + [55, "s4", "uint"], + [27, "s4", "uint"], + [37, "s4", "uint"], + [60, "s4", "pointer"] + ], + "ramdisk-load": [[[7, 12], "v1", "ramdisk-rpc-load"]], + "sound-buffer-dump": [[[13, 39], "s3", "sound-rpc-play"]], + "(method 10 engine-sound-pers)": [[[2, 17], "v1", "sound-rpc-set-param"]], + "check-irx-version": [[[3, 51], "gp", "sound-rpc-get-irx-version"]], + "sound-bank-iop-store": [[[7, 11], "v1", "sound-rpc-bank-cmd"]], + "sound-bank-iop-free": [[[7, 12], "v1", "sound-rpc-bank-cmd"]], + "sound-bank-load": [[[11, 16], "v1", "sound-rpc-load-bank"]], + "sound-bank-load-from-iop": [[[7, 12], "v1", "sound-rpc-load-bank"]], + "sound-bank-load-from-ee": [[[8, 14], "v1", "sound-rpc-load-bank"]], + "sound-bank-unload": [[[6, 11], "v1", "sound-rpc-unload-bank"]], + "sound-music-load": [[[6, 11], "v1", "sound-rpc-load-music"]], + "sound-music-unload": [[[3, 8], "v1", "sound-rpc-unload-music"]], + "set-language": [[[6, 9], "v1", "sound-rpc-set-language"]], + "sound-set-stereo-mode": [[[4, 9], "v1", "sound-rpc-set-stereo-mode"]], + "list-sounds": [[[3, 7], "v1", "sound-rpc-list-sounds"]], + "string->sound-name": [[[2, 18], "a1", "(pointer uint8)"]], + "sound-set-volume": [[[3, 16], "v1", "sound-rpc-set-master-volume"]], + "sound-set-reverb": [[[5, 25], "v1", "sound-rpc-set-reverb"]], + "sound-set-ear-trans": [[[7, 45], "gp", "sound-rpc-set-ear-trans"]], + "sound-name->string": [[2, "a1", "(pointer sound-name)"]], + "sound-play-by-name": [ + [[12, 45], "s5", "sound-rpc-play"], + [[22, 39], "s3", "process-drawable"] + ], + "sound-play-by-spec": [ + [[4, 54], "s5", "sound-rpc-play"], + [[31, 47], "s3", "process-drawable"] + ], + "sound-pause": [[[3, 8], "v1", "sound-rpc-pause-sound"]], + "sound-stop": [[[3, 8], "v1", "sound-rpc-stop-sound"]], + "sound-continue": [[[3, 8], "v1", "sound-rpc-continue-sound"]], + "sound-group-pause": [[[3, 7], "v1", "sound-rpc-pause-group"]], + "sound-group-stop": [[[3, 7], "v1", "sound-rpc-stop-group"]], + "sound-group-continue": [[[3, 7], "v1", "sound-rpc-continue-group"]], + "sound-set-flava": [[[3, 10], "v1", "sound-rpc-set-flava"]], + "sound-set-midi-reg": [[[3, 10], "v1", "sound-rpc-set-midi-reg"]], + "sound-set-fps": [[[3, 10], "v1", "sound-rpc-set-fps"]], + "(method 0 ambient-sound)": [ + ["_stack_", 16, "sound-spec"], + ["_stack_", 32, "int32"], + ["_stack_", 48, "vector"], + [87, "v1", "sound-spec"] + ], + "ear-trans": [[32, "s5", "process-focusable"]], + "loader-test-command": [[[5, 10], "v1", "sound-rpc-test-cmd"]], + "update-light-hash": [ + [[234, 239], "a1", "light-hash-bucket"], + [[207, 211], "a0", "light-hash-bucket"] + ], + "desaturate-mood-colors": [[[20, 90], "a0", "(inline-array mood-color)"]], + "(method 9 cloth-on-skeleton)": [ + [58, "a0", "process-focusable"], + [80, "s5", "process-focusable"], + [84, "s5", "process-focusable"], + [95, "s5", "process-focusable"], + [98, "s5", "process-focusable"], + [123, "s5", "process-focusable"] + ], + "(method 13 cloth-system)": [ + [143, "a1", "vector"], + [144, "a3", "vector"], + [147, "a1", "vector"], + [148, "a1", "vector"] + ], + "(method 37 cloth-system)": [ + [27, "s3", "pair"], + [32, "s3", "pair"], + [33, "s3", "pair"], + [69, "v1", "pair"] + ], + "(method 11 cloth-on-skeleton)": [[17, "a1", "process-drawable"]], + "(method 25 cloth-on-skeleton)": [ + [22, "v1", "process-drawable"], + [25, "v1", "process-focusable"] + ], + "(method 16 cloth-system)": [[21, "v1", "int"]], + "(method 33 cloth-on-skeleton)": [[11, "v1", "process-focusable"]], + "(method 18 cloth-on-skeleton)": [[15, "a1", "process-focusable"]], + "(method 35 cloth-on-skeleton)": [ + [27, "s5", "process-focusable"], + [113, "s5", "process-focusable"], + [193, "s5", "process-focusable"], + [217, "s5", "process-focusable"] + ], + "(method 14 cloth-on-skeleton)": [ + [18, "s4", "process-focusable"], + [39, "s4", "process-focusable"], + [35, "s4", "process-focusable"] + ], + "(method 36 cloth-on-skeleton)": [ + [18, "s4", "process-focusable"], + [35, "s4", "process-focusable"], + [39, "s4", "process-focusable"] + ], + "(method 23 cloth-system)": [ + [120, "f1", "float"], + ["_stack_", 152, "float"], + ["_stack_", 156, "float"], + ["_stack_", 164, "float"], + ["_stack_", 168, "float"], + ["_stack_", 212, "float"] + ], + "(method 22 cloth-system)": [ + ["_stack_", 104, "float"], + ["_stack_", 108, "float"], + ["_stack_", 116, "float"], + ["_stack_", 120, "float"], + ["_stack_", 160, "float"], + ["_stack_", 164, "float"] + ], + "(method 10 cloth-on-skeleton)": [ + [30, "s4", "process-focusable"], + [153, "s4", "process-focusable"], + [160, "v0", "joint"], + [122, "s4", "process-focusable"], + [129, "v0", "joint"], + [92, "s4", "process-focusable"], + [99, "v0", "joint"] + ], + "emerc-vu1-init-buffer": [[[82, 84], "v1", "dma-packet"]], + "emerc-vu1-initialize-chain": [ + [[19, 59], "s5", "emerc-vu1-low-mem"], + [80, "gp", "(inline-array dma-packet)"], + [[12, 18], "gp", "(pointer vif-tag)"] + ], + "merc-edge-stats": [[31, "v1", "merc-ctrl"]], + "(method 8 merc-ctrl)": [ + [46, "s2", "pointer"], // was merc-fragment-control + [[22, 45], "s2", "merc-fragment-control"], + [[89, 93], "a1", "merc-blend-ctrl"], + [103, "a1", "pointer"] + ], + "merc-vu1-initialize-chain": [ + [[13, 19], "gp", "(pointer vif-tag)"], + [[19, 116], "s5", "merc-vu1-low-mem"], + [127, "gp", "(inline-array dma-packet)"] + ], + "(method 9 merc-fragment)": [[[13, 265], "s1", "adgif-shader"]], + "(method 9 merc-effect)": [ + [38, "v1", "merc-eye-ctrl"], + [63, "s4", "pointer"], + [64, "s5", "pointer"] + ], + "merc-vu1-init-buffer": [[[90, 92], "v1", "dma-packet"]], + "texture-usage-init": [[27, "a1", "vector"]], + "(method 9 art)": [[9, "v1", "pointer"]], + "(code pov-camera-start-playing pov-camera)": [[24, "v0", "joint"]], + "(method 9 art-mesh-geo)": [ + [20, "s4", "(pointer int16)"], + [[14, 19], "a0", "drawable"], + [10, "v1", "(pointer art)"], + [14, "v1", "(pointer art)"] + ], + "(method 9 art-joint-anim)": [[9, "v1", "pointer"]], + "joint-control-copy!": [ + [8, "a0", "uint"], + [8, "v1", "uint"] + ], + "joint-control-remap!": [ + [127, "t9", "(function joint-control joint-control-channel int object)"], + [181, "t9", "(function joint-control joint-control-channel int object)"], + ["_stack_", 60, "basic"] + ], + "flatten-joint-control-to-spr": [ + [[201, 203], "a1", "terrain-context"], + [[131, 133], "a0", "terrain-context"], + [[182, 184], "a1", "terrain-context"], + [[164, 166], "a0", "terrain-context"], + [195, "v1", "terrain-context"], + [65, "a3", "(pointer float)"], + [67, "a3", "(pointer float)"], + [[18, 47], "a2", "(inline-array vector)"], + [47, "a2", "pointer"], + [[48, 118], "a2", "(inline-array vector)"], + [118, "a2", "pointer"], + [24, "a3", "(pointer float)"], + [17, "a2", "int"] + ], + "(method 12 art-joint-anim-manager)": [ + [15, "a0", "pointer"], + [15, "v1", "pointer"], + [21, "a0", "pointer"], + [21, "v1", "pointer"] + ], + "(method 11 art-joint-anim-manager)": [ + [54, "v1", "uint"], + [54, "s2", "uint"], + [60, "s2", "uint"], + [66, "s2", "uint"], + [72, "s2", "uint"], + [88, "a1", "uint"], + [95, "a2", "uint"] + ], + "(method 2 art-joint-anim-manager-slot)": [ + [21, "s2", "uint"], + [21, "v1", "uint"] + ], + "create-interpolated2-joint-animation-frame": [ + [[48, 125], "v1", "joint-anim-frame"], + [[62, 67], "t2", "(inline-array vector)"], + [[67, 71], "a2", "(inline-array vector)"] + ], + "joint-mod-ik-callback": [ + [6, "gp", "joint-mod-ik"], + [9, "gp", "joint-mod-ik"], + [[1, 35], "gp", "joint-mod-ik"], + [[1, 422], "gp", "joint-mod-ik"] + ], + "real-joint-mod-gun-look-at-handler": [ + [1, "v1", "joint-mod"], + [2, "v1", "joint-mod"] + ], + "joint-mod-foot-rot-handler": [ + [[0, 7], "s5", "joint-mod"], + [[35, 152], "s5", "joint-mod"] + ], + "(method 11 joint-mod)": [ + [[0, 27], "s1", "process-drawable"], + [[19, 62], "s2", "fact-info-enemy"] + ], + "joint-mod-look-at-handler": [ + [[2, 406], "gp", "joint-mod"], + [409, "a3", "float"] + ], + "joint-mod-world-look-at-handler": [ + [[0, 217], "gp", "joint-mod"], + [220, "a3", "float"] + ], + "joint-mod-rotate-handler": [[[2, 114], "s5", "joint-mod"]], + "joint-mod-scale-handler": [[[1, 14], "s5", "joint-mod"]], + "joint-mod-joint-set-handler": [[[2, 23], "s4", "joint-mod"]], + "joint-mod-joint-set-world-handler": [[[6, 197], "s5", "joint-mod"]], + "joint-mod-joint-set*-handler": [[[2, 39], "s5", "joint-mod"]], + "joint-mod-joint-set*-world-handler": [[[4, 53], "s5", "joint-mod"]], + "joint-mod-polar-look-at-callback": [ + [[0, 363], "s5", "joint-mod-polar-look-at"] + ], + "(method 10 bsp-header)": [ + [27, "a1", "terrain-context"], + [31, "a0", "terrain-context"] + ], + "bsp-camera-asm": [ + [26, "v1", "pointer"], + [[26, 63], "t1", "bsp-node"], + [43, "t3", "uint"] + ], + "level-remap-texture": [ + [15, "t0", "(pointer uint32)"], + [21, "t0", "(pointer uint32)"], + [19, "t0", "(pointer uint64)"], + [12, "v1", "int"], + [12, "a3", "int"] + ], + "build-masks": [ + [[18, 22], "a1", "drawable-tree-tfrag"], + [24, "a2", "drawable-inline-array-tfrag"], + [[27, 31], "a2", "(inline-array tfragment)"], + [[38, 42], "a1", "drawable-tree-tfrag-trans"], + [44, "a2", "drawable-inline-array-tfrag"], + [[47, 51], "a2", "(inline-array tfragment)"], + [[58, 62], "a1", "drawable-tree-tfrag-water"], + [64, "a2", "drawable-inline-array-tfrag"], + [[67, 71], "a2", "(inline-array tfragment)"], + [[78, 79], "a1", "drawable-tree-instance-tie"], + [123, "a1", "drawable-tree-instance-shrub"], + [[129, 133], "a2", "(inline-array prototype-bucket-shrub)"] + ], + "drawable-load": [[16, "v0", "drawable"]], + "art-load": [[7, "v0", "art"]], + "art-group-load-check": [[21, "v0", "art-group"]], + "(method 9 external-art-control)": [ + [[170, 191], "s4", "external-art-buffer"] + ], + "(method 11 external-art-control)": [[19, "s5", "process-drawable"]], + "(method 15 gui-control)": [ + [13, "s1", "gui-connection"], + [36, "s1", "gui-connection"], + [43, "s1", "gui-connection"], + [8, "s1", "gui-connection"] + ], + "(method 14 gui-control)": [[[7, 41], "s2", "gui-connection"]], + "(method 13 gui-control)": [ + [64, "s3", "gui-connection"], + [71, "s3", "gui-connection"] + ], + "(method 17 gui-control)": [ + [[45, 262], "gp", "gui-connection"], + [13, "v1", "gui-connection"] + ], + "(method 16 gui-control)": [[[19, 118], "s1", "gui-connection"]], + "(method 9 gui-control)": [ + [131, "v1", "gui-connection"], + [17, "v1", "gui-connection"], + [24, "v1", "gui-connection"], + [[115, 125], "v1", "gui-connection"], + [129, "v1", "gui-connection"], + [127, "a0", "gui-connection"] + ], + "(method 10 gui-control)": [[[9, 32], "s3", "gui-connection"]], + "(method 12 gui-control)": [ + [128, "v1", "gui-connection"], + [177, "v1", "process-drawable"], + [214, "v1", "gui-connection"] + ], + "(method 22 gui-control)": [[54, "v1", "process-drawable"]], + "(method 21 gui-control)": [ + [28, "v1", "process-drawable"], + [31, "v1", "process-drawable"], + [45, "s4", "process-drawable"], + [48, "s4", "process-drawable"], + [5, "v0", "sound-rpc-set-param"] + ], + "(method 23 gui-control)": [[285, "v0", "sound-rpc-set-param"]], + "(method 10 continue-point)": [[24, "a1", "level-buffer-state-small"]], + "print-continues": [ + [2, "gp", "pair"], + [3, "v1", "symbol"], + [4, "v1", "level-load-info"], + [[7, 14], "v1", "continue-point"] + ], + "(method 10 fact-info-target)": [[74, "v1", "target"]], + "(method 34 game-info)": [[[22, 208], "f0", "float"]], + "(method 19 game-info)": [ + [[5, 29], "s5", "pair"], + [8, "v1", "symbol"], + [9, "v1", "level-load-info"], + [[11, 18], "s3", "continue-point"], + [[11, 24], "s4", "pair"] + ], + "(method 9 game-info)": [ + [ + 617, + "s0", + "(function cpu-thread function symbol symbol continue-point game-save resetter-spec none)" + ] + ], + "(method 9 lod-set)": [["_stack_", 16, "res-tag"]], + "execute-math-engine": [ + [18, "v1", "process-drawable"], + [21, "v1", "process-drawable"], + [22, "v1", "process-drawable"] + ], + "execute-cloth-engine": [ + [30, "s3", "process-drawable"], + [21, "s3", "process-drawable"] + ], + "ja-post": [ + [43, "a0", "collide-shape"], + [45, "a0", "collide-shape"] + ], + "transform-and-sleep": [ + [10, "a0", "collide-shape"], + [12, "a0", "collide-shape"] + ], + "transform-and-sleep-code": [ + [10, "a0", "collide-shape"], + [12, "a0", "collide-shape"] + ], + "transform-post": [ + [3, "a0", "collide-shape"], + [5, "a0", "collide-shape"] + ], + "rider-trans": [ + [1, "a0", "collide-shape"], + [3, "a0", "collide-shape"] + ], + "rider-post": [ + [4, "a0", "collide-shape"], + [9, "a0", "collide-shape"], + [13, "gp", "collide-shape"], + [15, "gp", "collide-shape"], + [3, "gp", "collide-shape"], + [8, "gp", "collide-shape"] + ], + "pusher-post": [ + [3, "gp", "collide-shape"], + [8, "gp", "collide-shape"], + [10, "gp", "collide-shape"] + ], + "(method 14 process-drawable)": [ + [124, "s4", "collide-shape"], + [111, "v1", "vector"], + [126, "s4", "collide-shape"] + ], + "(method 9 level-load-info)": [ + [3, "a2", "pair"], + [5, "a2", "pair"], + [7, "t0", "symbol"], + [9, "t0", "symbol"], + [25, "v1", "pair"], + [24, "v1", "pair"] + ], + "skeleton-group->draw-control": [ + [283, "v1", "process-drawable"], + [286, "v1", "process-drawable"], + [289, "v1", "process-drawable"], + [292, "v1", "process-drawable"] + ], + "(enter process-drawable-art-error)": [ + [32, "v1", "collide-shape"], + [30, "gp", "collide-shape"] + ], + "(method 10 process-drawable)": [ + [32, "a0", "collide-shape"], + [50, "t0", "int"] + ], + "(method 17 process-drawable)": [[7, "v1", "collide-shape"]], + "(method 18 process-drawable)": [[1, "v1", "pointer"]], + "ja-linear-vel": [["_stack_", 16, "res-tag"]], + "joint-control-reset!": [ + [3, "a1", "int"], + [7, "a1", "int"], + [5, "a0", "int"], + [[11, 34], "v1", "joint-control-channel"] + ], + "ja-channel-push!": [ + [35, "v1", "int"], + [35, "a0", "int"] + ], + "ja-blend-eval": [[[3, 26], "s5", "joint-control-channel"]], + "cspace-inspect-tree": [[[27, 85], "s2", "cspace"]], + "(method 9 joint-control)": [ + [[15, 68], "s3", "joint-control-channel"], + [[13, 70], "s5", "(pointer float)"] + ], + "(method 10 top-anim-joint-control)": [ + [5, "a0", "process-drawable"], + [162, "s2", "art-joint-anim"] + ], + "(method 32 game-info)": [[45, "v1", "game-task-node-info"]], + "(method 11 game-save)": [ + [[85, 272], "s4", "(inline-array game-save-tag)"], + [272, "s4", "pointer"] + ], + "auto-save-post": [ + [228, "v1", "dma-packet"], + [229, "v1", "dma-packet"], + [230, "v1", "dma-packet"] + ], + "(method 23 game-info)": [ + [915, "s4", "pointer"], + [527, "a1", "pointer"], + [133, "v1", "pointer"], + [[190, 912], "s4", "game-save-tag"], + [[4, 133], "v1", "(inline-array game-save-tag)"], + [780, "v1", "pointer"] + ], + "(method 22 game-info)": [ + [235, "s1", "int"], + [1336, "a0", "pointer"], + [64, "v1", "connection"], + [66, "v0", "resetter-spec"], + [383, "s2", "game-save-tag"], + [1131, "s5", "game-save-tag"], + [[237, 244], "a0", "(inline-array game-save-tag)"], + [[255, 260], "a0", "(inline-array game-save-tag)"], + [[271, 276], "a0", "(inline-array game-save-tag)"], + [[287, 292], "a0", "(inline-array game-save-tag)"], + [[303, 308], "a0", "(inline-array game-save-tag)"], + [[319, 324], "a0", "(inline-array game-save-tag)"], + [[335, 340], "a0", "(inline-array game-save-tag)"], + [[351, 356], "a0", "(inline-array game-save-tag)"], + [[368, 378], "s1", "(inline-array game-save-tag)"], + [[391, 396], "a0", "(inline-array game-save-tag)"], + [[398, 403], "a0", "(inline-array game-save-tag)"], + [[237, 244], "a0", "(inline-array game-save-tag)"], + [[405, 410], "a0", "(inline-array game-save-tag)"], + [[412, 417], "a0", "(inline-array game-save-tag)"], + [[419, 424], "a0", "(inline-array game-save-tag)"], + [[426, 431], "a0", "(inline-array game-save-tag)"], + [[434, 438], "a0", "(inline-array game-save-tag)"], + [[441, 445], "a0", "(inline-array game-save-tag)"], + [[448, 452], "a0", "(inline-array game-save-tag)"], + [[455, 459], "a0", "(inline-array game-save-tag)"], + [[462, 466], "a0", "(inline-array game-save-tag)"], + [[469, 473], "a0", "(inline-array game-save-tag)"], + [[476, 480], "a0", "(inline-array game-save-tag)"], + [[483, 487], "a0", "(inline-array game-save-tag)"], + [[490, 494], "a0", "(inline-array game-save-tag)"], + [[497, 501], "a0", "(inline-array game-save-tag)"], + [[504, 508], "a0", "(inline-array game-save-tag)"], + [[511, 515], "a0", "(inline-array game-save-tag)"], + [[518, 522], "a0", "(inline-array game-save-tag)"], + [[525, 529], "a0", "(inline-array game-save-tag)"], + [[532, 536], "a0", "(inline-array game-save-tag)"], + [[539, 543], "a0", "(inline-array game-save-tag)"], + [[546, 550], "a0", "(inline-array game-save-tag)"], + [[553, 557], "a0", "(inline-array game-save-tag)"], + [[560, 565], "a0", "(inline-array game-save-tag)"], + [573, "a1", "(pointer float)"], + [[581, 585], "a0", "(inline-array game-save-tag)"], + [[588, 592], "a0", "(inline-array game-save-tag)"], + [[595, 599], "a0", "(inline-array game-save-tag)"], + [[602, 606], "a0", "(inline-array game-save-tag)"], + [[609, 613], "a0", "(inline-array game-save-tag)"], + [[616, 620], "a0", "(inline-array game-save-tag)"], + [[623, 628], "a0", "(inline-array game-save-tag)"], + [637, "a1", "(pointer float)"], + [645, "a1", "(pointer float)"], + [[653, 658], "a0", "(inline-array game-save-tag)"], + [664, "a2", "(pointer uint8)"], + [772, "a3", "(pointer uint16)"], + [800, "a2", "(pointer float)"], + [897, "a2", "(pointer time-frame)"], + [919, "a2", "(pointer time-frame)"], + [941, "a2", "(pointer time-frame)"], + [963, "a2", "(pointer time-frame)"], + [987, "a3", "(pointer uint16)"], + [1013, "a3", "(pointer uint16)"], + [1039, "a3", "(pointer uint16)"], + [1065, "a3", "(pointer time-frame)"], + [1098, "a3", "(pointer uint8)"], + [[674, 678], "a0", "(inline-array game-save-tag)"], + [[699, 703], "v1", "(inline-array game-save-tag)"], + [[729, 734], "a0", "(inline-array game-save-tag)"], + [[759, 764], "a1", "(inline-array game-save-tag)"], + [[787, 791], "a1", "(inline-array game-save-tag)"], + [[813, 817], "a0", "(inline-array game-save-tag)"], + [[820, 824], "a0", "(inline-array game-save-tag)"], + [[827, 831], "a0", "(inline-array game-save-tag)"], + [[834, 838], "a0", "(inline-array game-save-tag)"], + [[841, 845], "a0", "(inline-array game-save-tag)"], + [[848, 852], "a0", "(inline-array game-save-tag)"], + [[855, 859], "a0", "(inline-array game-save-tag)"], + [[862, 866], "a0", "(inline-array game-save-tag)"], + [[869, 873], "a0", "(inline-array game-save-tag)"], + [[876, 880], "a0", "(inline-array game-save-tag)"], + [[883, 888], "a0", "(inline-array game-save-tag)"], + [[905, 910], "a0", "(inline-array game-save-tag)"], + [[927, 932], "a0", "(inline-array game-save-tag)"], + [[949, 954], "a0", "(inline-array game-save-tag)"], + [[973, 977], "a1", "(inline-array game-save-tag)"], + [[999, 1003], "a1", "(inline-array game-save-tag)"], + [[1025, 1029], "a1", "(inline-array game-save-tag)"], + [[1051, 1055], "a1", "(inline-array game-save-tag)"], + [[1080, 1084], "a1", "(inline-array game-save-tag)"], + [[1116, 1126], "s3", "(inline-array game-save-tag)"], + [[1139, 1144], "a0", "(inline-array game-save-tag)"], + [[1147, 1152], "a0", "(inline-array game-save-tag)"], + [[1155, 1160], "a0", "(inline-array game-save-tag)"], + [[1163, 1168], "a0", "(inline-array game-save-tag)"], + [[1171, 1176], "a0", "(inline-array game-save-tag)"], + [[1179, 1184], "a0", "(inline-array game-save-tag)"], + [[1187, 1192], "a0", "(inline-array game-save-tag)"], + [[1195, 1202], "a0", "(inline-array game-save-tag)"], + [[1205, 1212], "a0", "(inline-array game-save-tag)"], + [[1215, 1220], "a0", "(inline-array game-save-tag)"], + [[1223, 1228], "a0", "(inline-array game-save-tag)"], + [[1231, 1240], "a0", "(inline-array game-save-tag)"], + [[1243, 1252], "a0", "(inline-array game-save-tag)"], + [[1255, 1264], "a0", "(inline-array game-save-tag)"], + [[1267, 1276], "a0", "(inline-array game-save-tag)"], + [[1279, 1288], "a0", "(inline-array game-save-tag)"], + [[1291, 1300], "a0", "(inline-array game-save-tag)"], + [[1303, 1317], "a0", "(inline-array game-save-tag)"], + [[1320, 1334], "a0", "(inline-array game-save-tag)"] + ], + "generic-vu1-init-buf-special": [ + [53, "v1", "dma-packet"], + [54, "v1", "dma-packet"], + [55, "v1", "dma-packet"] + ], + "generic-vu1-init-buf": [[[48, 51], "v1", "dma-packet"]], + "generic-init-buf": [ + [[66, 69], "a0", "dma-packet"], + [[75, 83], "v1", "(pointer uint32)"] + ], + "generic-add-constants": [ + [10, "a0", "dma-packet"], + [15, "a0", "dma-packet"], + [8, "a0", "dma-packet"] + ], + "generic-add-shrub-constants": [ + [28, "t0", "dma-packet"], + [30, "t0", "dma-packet"], + [35, "t0", "dma-packet"] + ], + "(method 9 user-setting-data)": [ + [[76, 80], "v1", "connection"], + [[22, 66], "s3", "connection"] + ], + /**"(method 10 user-setting-data)": [ + [[184, 190], "v1", "(array uint8)"], + [499, "v1", "handle"], + [521, "v1", "handle"], + [543, "v1", "handle"], + [565, "v1", "handle"], + [511, "v1", "handle"], + [533, "v1", "handle"], + [555, "v1", "handle"], + [577, "v1", "handle"], + [578, "v1", "handle"], + [497, "a2", "(pointer process)"], + [519, "a2", "(pointer process)"], + [541, "a2", "(pointer process)"], + [563, "a2", "(pointer process)"], + [1206, "t0", "int"], + [1270, "t0", "int"], + [1252, "t0", "int"], + [1224, "t0", "int"] + ],**/ + "(method 10 user-setting-data)": [ + [[186, 199], "v1", "(array uint8)"], + [498, "v1", "handle"] + ], + "(method 9 cam-setting-data)": [ + [[76, 80], "v1", "connection"], + [[22, 66], "s3", "connection"] + ], + "(method 10 cam-setting-data)": [ + [33, "v1", "handle"], + [36, "v1", "handle"], + [432, "a3", "vector"], + [441, "a3", "vector"], + [450, "a3", "vector"], + [461, "a3", "vector"], + [471, "v1", "handle"], + [474, "v1", "handle"], + [492, "v1", "handle"], + [495, "v1", "handle"], + [32, "a0", "handle"], + [470, "a0", "handle"], + [483, "a0", "handle"], + [484, "a0", "handle"], + [491, "a0", "handle"], + [503, "a0", "handle"], + [44, "a0", "handle"], + [53, "a3", "vector"] + ], + "(exit active talker)": [[38, "v1", "process-drawable"]], + "talker-spawn-func": [ + [76, "a0", "talker"], + [79, "v1", "talker"], + [82, "v1", "talker"] + ], + "(method 11 speech-channel)": [ + [70, "v1", "process-drawable"], + [250, "s4", "process-drawable"], + [264, "s4", "process-drawable"], + [267, "s4", "process-drawable"], + [232, "v0", "sound-rpc-set-param"] + ], + "(method 17 speech-control)": [[5, "v1", "speech-type-info"]], + "(method 18 drawable-region-face)": [ + [58, "v1", "(inline-array vector)"], + [60, "v1", "(inline-array vector)"], + [62, "v1", "(inline-array vector)"], + [70, "v1", "(inline-array vector)"], + [72, "v1", "(inline-array vector)"], + [74, "v1", "(inline-array vector)"], + [83, "v1", "(inline-array vector)"], + ["_stack_", 56, "(inline-array vector)"] + ], + "region-tree-execute": [ + [114, "v1", "region-prim-area"], + [107, "v1", "region-prim-area"], + [97, "v1", "region-prim-area"], + [159, "v1", "region-prim-area"], + [204, "v1", "region-prim-area"], + [210, "v1", "region-prim-area"], + [221, "v1", "region-prim-area"], + [165, "v1", "region-prim-area"], + [169, "v1", "region-prim-area"], + [175, "a0", "region-prim-area"], + [191, "v1", "region-prim-area"], + [120, "v1", "region-prim-area"], + [124, "v1", "region-prim-area"], + [146, "v1", "region-prim-area"], + [129, "a1", "region-prim-area"], + [103, "v1", "region-prim-area"], + [[19, 29], "v1", "region-prim-area"], + [39, "a0", "region-prim-area"], + [45, "a0", "region-prim-area"], + [51, "a0", "region-prim-area"], + [32, "a0", "region-prim-area"] + ], + "(method 16 drawable-inline-array-region-prim)": [ + [[1, 7], "v1", "drawable-region-prim"] + ], + "clone-anim-once": [ + [22, "gp", "process-drawable"], + [31, "gp", "process-drawable"], + [50, "gp", "process-drawable"], + [48, "a0", "collide-shape"], + [57, "gp", "process-drawable"], + [64, "gp", "process-drawable"], + [68, "gp", "process-drawable"], + [107, "v1", "manipy"], + [52, "a0", "collide-shape"] + ], + "birth-func-simple-prim": [ + [28, "a0", "simple-prim-particle-binding"], + [25, "t0", "texture-id"], + [33, "a0", "simple-prim-particle-binding"] + ], + "(method 11 sound-controller)": [[18, "v0", "string"]], + "process-drawable-random-point!": [ + [29, "s4", "collide-shape"], + [33, "s4", "collide-shape"] + ], + "(code explode explosion)": [ + [6, "a0", "collide-shape"], + [17, "a0", "collide-shape"], + [22, "v1", "collide-shape"], + [19, "a0", "collide-shape"], + [8, "a0", "collide-shape"] + ], + "(event explode explosion)": [ + [8, "a0", "collide-shape"], + [35, "s3", "process-drawable"], + [63, "s2", "process-focusable"], + [55, "a0", "process-focusable"], + [63, "s3", "process-focusable"], + [78, "s3", "process-focusable"], + [58, "a0", "process-focusable"] + ], + "find-closest-solid-sphere-prim": [[12, "v1", "collide-shape-prim-group"]], + "explosion-init-by-other": [ + [82, "v1", "collide-shape"], + [56, "a0", "collide-shape"] + ], + "(code active touch-tracker)": [ + [65, "v1", "collide-shape"], + [22, "a0", "process-drawable"], + [31, "v1", "collide-shape"], + [32, "a0", "collide-shape"], + [43, "a0", "collide-shape"], + [55, "a0", "collide-shape"], + [26, "a0", "collide-shape"], + [45, "a0", "collide-shape"], + [57, "a0", "collide-shape"] + ], + "(event active touch-tracker)": [ + [71, "a0", "process"], + [98, "t9", "(function touch-tracker object)"] + ], + "launcher-init-by-other": [ + [85, "a0", "collide-shape"], + [136, "v0", "vector"], + [87, "a0", "collide-shape"] + ], + "(method 11 launcher)": [ + [55, "a0", "collide-shape"], + [128, "v0", "vector"], + [57, "a0", "collide-shape"] + ], + "(trans active launcher)": [[75, "v1", "collide-shape"]], + "(exit active launcher)": [[2, "v0", "sound-rpc-set-param"]], + "(event active launcher)": [ + [45, "a0", "collide-shape"], + [48, "a0", "collide-shape"], + [48, "a1", "vector"], + [51, "a0", "collide-shape"], + [53, "a0", "collide-shape"] + ], + "(event idle launcher)": [ + [12, "a0", "collide-shape"], + [18, "a0", "collide-shape"], + [20, "a0", "collide-shape"], + [15, "a0", "collide-shape"] + ], + "camera-pov-from": [ + [9, "gp", "process-drawable"], + [12, "gp", "process-drawable"], + [19, "v0", "joint"] + ], + "ja-anim-done?": [[30, "gp", "process-drawable"]], + "process-release?": [[13, "a0", "process-focusable"]], + "(exit active lightning-tracker)": [[4, "v0", "sound-rpc-set-param"]], + "(code active lightning-tracker)": [[67, "s4", "process-drawable"]], + "(method 16 lightning-tracker)": [ + [109, "s5", "process-focusable"], + [53, "a0", "process-drawable"], + [66, "a0", "process-focusable"], + [82, "a0", "process-focusable"], + [69, "a0", "process-focusable"] + ], + "manipy-init": [ + [207, "v0", "joint"], + [232, "v0", "joint"] + ], + "(code idle manipy)": [ + [61, "a1", "process-drawable"], + [82, "gp", "process-drawable"], + [88, "gp", "process-drawable"], + [131, "a0", "process-drawable"], + [193, "a0", "process-drawable"], + [164, "a0", "process"], + [[159, 190], "gp", "handle"] + ], + "(trans idle manipy)": [[62, "v1", "process-drawable"]], + "(event idle manipy)": [ + [45, "v0", "joint"], + [227, "v1", "process-drawable"], + [354, "v1", "vector"], + [362, "v1", "vector"], + [396, "t9", "(function manipy none)"], + [479, "a0", "process"], + [502, "v1", "process-drawable"], + [511, "a0", "process-drawable"], + [539, "v1", "vector"], + [547, "v1", "vector"], + [202, "v1", "float"], + [402, "v1", "float"], + [431, "v1", "float"], + [466, "v1", "float"], + [698, "a0", "float"], + [128, "v1", "float"], + [131, "v1", "float"], + [134, "v1", "float"], + [145, "v1", "float"], + [160, "v1", "float"], + [163, "v1", "float"], + [166, "v1", "float"], + [169, "v1", "float"], + [184, "v1", "float"], + [187, "v1", "float"], + [190, "v1", "float"], + [193, "v1", "float"] + ], + "swingpole-init": [[56, "a0", "process-drawable"]], + "(code idle swingpole)": [ + [6, "a0", "collide-shape"], + [8, "a0", "collide-shape"] + ], + "(code active swingpole)": [[34, "a0", "process-focusable"]], + "(method 22 swingpole)": [ + [37, "a0", "collide-shape"], + [53, "v1", "process-drawable"], + [66, "a0", "collide-shape"], + [69, "a0", "collide-shape"], + [40, "a0", "collide-shape"] + ], + "entity-lookup-part-group": [ + [29, "s3", "string"], + ["_stack_", 16, "res-tag"], + [39, "gp", "int"] + ], + "(event active part-spawner)": [[25, "v1", "vector"]], + "(method 11 part-spawner)": [ + [148, "v0", "(pointer degrees)"], + [238, "a2", "vector"] + ], + "(method 11 part-controller)": [["_stack_", 16, "res-tag"]], + "(trans linger part-tracker)": [ + [37, "v1", "process-drawable"], + [41, "v1", "process-drawable"], + [50, "v1", "process-drawable"] + ], + "(trans active part-tracker)": [ + [41, "v1", "process-drawable"], + [45, "v1", "process-drawable"], + [54, "v1", "process-drawable"] + ], + "local-space-proc-joint": [ + [12, "a2", "process-drawable"], + [14, "a1", "int"] + ], + "part-tracker-init": [ + [65, "s4", "particle-local-space-info"], + [68, "s4", "particle-local-space-info"], + [63, "s4", "particle-local-space-info"], + [78, "s4", "particle-local-space-info"] + ], + "(trans active part-tracker-subsampler)": [ + [41, "v1", "process-drawable"], + [45, "v1", "process-drawable"], + [51, "v1", "process-drawable"] + ], + "(event active part-tracker)": [ + [9, "v1", "process"], + [13, "a0", "process"], + [16, "v1", "process"], + [31, "v1", "vector"] + ], + "(method 0 carry-info)": [[42, "s5", "collide-shape"]], + "(method 11 carry-info)": [ + [211, "a0", "process-drawable"], + [212, "v1", "collide-shape"], + [218, "a2", "process-drawable"], + [225, "a1", "process-drawable"], + [231, "a0", "process-drawable"], + [232, "v1", "collide-shape"], + [219, "a1", "collide-shape"], + [226, "a0", "collide-shape"] + ], + "(method 12 carry-info)": [ + [46, "a0", "process-drawable"], + [47, "v1", "collide-shape"], + [52, "a1", "process-focusable"], + [59, "a1", "process-focusable"] + ], + "(method 13 carry-info)": [[22, "v0", "carry-info"]], + "(method 14 carry-info)": [ + [151, "a0", "process-focusable"], + [158, "a2", "process-focusable"], + [165, "a1", "process-focusable"], + [171, "a0", "process-focusable"] + ], + "(method 16 carry-info)": [[22, "v0", "carry-info"]], + "target-log-attack": [[47, "a3", "attack-info"]], + "(method 11 attack-info)": [ + [114, "s2", "process-drawable"], + [152, "s3", "process-drawable"] + ], + "(anon-function 3 target-util)": [ + [7, "a0", "process-drawable"], + [16, "v1", "process-drawable"] + ], + "external-target-spawn": [[240, "v1", "process-drawable"]], + "target-compute-pole": [ + [12, "s2", "swingpole"], + [11, "s2", "swingpole"], + [19, "s2", "swingpole"], + [27, "s2", "swingpole"], + [32, "s2", "swingpole"], + [88, "s2", "swingpole"], + [111, "s2", "swingpole"] + ], + "target-compute-edge-rider": [[48, "a0", "process-drawable"]], + "target-compute-edge": [[48, "a0", "process-drawable"]], + "history-draw": [ + [16, "a1", "int"], + [151, "a0", "uint"] + ], + "history-print": [[20, "a1", "int"]], + "target-collision-reaction": [ + [400, "a0", "process-focusable"], + [579, "a0", "process-focusable"], + [585, "a0", "process-focusable"], + [633, "a0", "process-focusable"], + ["_stack_", 96, "collide-status"], + ["_stack_", 104, "cshape-reaction-flags"] + ], + "(post sidekick-clone)": [[930, "v1", "process-drawable"]], + "(code enter remote)": [[16, "a0", "process-focusable"]], + "(trans enter remote)": [ + [25, "a0", "process-focusable"], + [28, "a0", "process-focusable"] + ], + "remote-track": [[94, "gp", "process-focusable"]], + "(method 24 remote)": [ + [17, "a0", "process-focusable"], + [20, "a0", "process-focusable"], + [26, "s4", "process-focusable"], + [29, "s4", "process-focusable"], + [16, "s4", "process-focusable"] + ], + "(method 25 remote)": [[[8, 12], "a0", "collide-shape"]], + "(code idle judge)": [[39, "v0", "float"]], + "(event idle task-arrow)": [ + [6, "a0", "vector"], + [52, "v1", "float"], + [59, "v1", "float"] + ], + "projectile-update-velocity-space-wars": [ + [59, "a0", "process-drawable"], + [60, "a0", "collide-shape"] + ], + "(method 35 projectile)": [[5, "a1", "process"]], + "(event idle ragdoll-proc)": [ + [14, "gp", "attack-info"], + [18, "gp", "attack-info"], + [112, "gp", "attack-info"], + [115, "gp", "attack-info"], + [27, "a0", "process-drawable"], + [32, "s2", "process-drawable"], + [34, "a0", "process-drawable"], + [44, "s2", "process-drawable"], + [54, "s2", "process-drawable"], + [61, "s2", "process-drawable"], + [50, "a3", "touching-prims-entry"], + [68, "gp", "attack-info"], + [72, "gp", "attack-info"] + ], + "wings-post": [ + [4, "v1", "process-focusable"], + [62, "v1", "process-drawable"], + [68, "v1", "process-drawable"], + [74, "v1", "process-drawable"], + [90, "v1", "process-focusable"] + ], + "(exit idle wings)": [ + [12, "a0", "ragdoll-proc"], + [15, "a0", "ragdoll-proc"] + ], + "wings-init": [[37, "v1", "process-drawable"]], + "(trans idle wings)": [ + [88, "v1", "ragdoll-proc"], + [21, "v1", "process-drawable"], + [24, "v1", "process-drawable"], + [29, "v1", "process-drawable"], + [35, "v1", "process-drawable"], + [41, "v1", "process-drawable"], + [47, "v1", "process-drawable"], + [53, "v1", "process-drawable"], + [59, "v1", "process-drawable"], + [65, "v1", "process-drawable"] + ], + "(code idle wings)": [ + [[179, 197], "a0", "ragdoll-proc"], + [212, "v1", "art-joint-anim"], + [117, "v1", "art-joint-anim"] + ], + "(code close wings)": [[29, "v1", "art-joint-anim"]], + "(code use wings)": [[14, "v1", "art-joint-anim"]], + "(method 16 ragdoll-edit-info)": [ + ["_stack_", 4368, "matrix"], + [[8, 12], "a0", "matrix"], + [47, "a0", "pointer"], + [47, "a1", "pointer"], + [[52, 56], "a3", "matrix"], + [[216, 220], "a3", "matrix"], + [[249, 253], "a3", "matrix"], + [364, "a0", "matrix"], + [380, "a0", "matrix"] + ], + "target-generic-event-handler": [ + [571, "a0", "vector"], + [1022, "v1", "(state object object object object target)"], + [1077, "a0", "process"], + [12, "v1", "float"], + [561, "v1", "float"] + ], + "target-send-attack": [ + [36, "s2", "process-focusable"], + ["_stack_", 96, "symbol"], + [168, "s4", "process"], + [167, "v1", "process"] + ], + "target-standard-event-handler": [ + [44, "v1", "(pointer process)"], + [92, "a0", "vector"], + [111, "a0", "vector"], + [130, "a0", "vector"], + [257, "v1", "(pointer process)"], + [295, "a0", "process"], + [297, "v1", "(pointer process)"], + [313, "a0", "process"], + [315, "v1", "(pointer process)"], + [348, "a0", "process"], + [350, "v1", "(pointer process)"], + [434, "s5", "process"], + [436, "v1", "(pointer process)"], + [453, "a0", "process"], + [455, "v1", "(pointer process)"], + [476, "a0", "process"], + [478, "v1", "(pointer process)"], + [534, "a0", "process"], + [536, "v1", "(pointer process)"], + [556, "a0", "process"], + [558, "v1", "(pointer process)"], + [715, "v1", "(pointer process)"], + [973, "a0", "process"], + [975, "v1", "(pointer process)"], + [1031, "v1", "(pointer process)"], + [1069, "v1", "(pointer process)"], + [67, "a0", "vector"], + [136, "v1", "float"] + ], + "(anon-function 10 target-handler)": [ + [32, "a0", "process-focusable"], + [40, "a0", "process"], + [47, "a0", "process"], + [61, "a0", "process-focusable"] + ], + "target-attacked": [ + [259, "a0", "vector"], + [313, "a0", "vector"] + ], + "target-edge-grab-anim": [ + [54, "v1", "art-joint-anim"], + [111, "v1", "art-joint-anim"] + ], + "target-attack-air-anim": [ + [83, "v1", "art-joint-anim"], + [251, "v1", "art-joint-anim"] + ], + "target-hit-ground-anim": [ + [108, "v1", "art-joint-anim"], + [189, "v1", "art-joint-anim"], + [306, "a1", "art-joint-anim"], + [458, "v1", "art-joint-anim"], + [510, "v1", "art-joint-anim"], + [663, "v1", "art-joint-anim"], + [723, "v1", "art-joint-anim"], + [895, "v1", "art-joint-anim"], + [1056, "v1", "art-joint-anim"], + [1155, "v1", "art-joint-anim"] + ], + "(anon-function 4 target-anim)": [ + [104, "v1", "art-joint-anim"], + [171, "v1", "art-joint-anim"], + [238, "v1", "art-joint-anim"], + [295, "v1", "art-joint-anim"] + ], + "(anon-function 3 target-anim)": [ + [105, "v1", "art-joint-anim"], + [165, "v1", "art-joint-anim"], + [239, "v1", "art-joint-anim"], + [297, "v1", "art-joint-anim"] + ], + "target-hit-ground-flop-anim": [[39, "v1", "art-joint-anim"]], + "(anon-function 8 target-anim)": [ + [84, "v1", "art-joint-anim"], + [179, "v1", "art-joint-anim"] + ], + "target-falling-anim": [[61, "v1", "art-joint-anim"]], + "target-stance-push": [ + [73, "v1", "art-joint-anim"], + [125, "v1", "art-joint-anim"] + ], + "target-stance-anim": [ + [949, "v1", "art-joint-anim"], + [170, "v1", "art-joint-anim"], + [236, "v1", "art-joint-anim"], + [422, "a1", "art-joint-anim"], + [512, "a1", "art-joint-anim"], + [817, "v1", "art-joint-anim"] + ], + "(anon-function 17 target-anim)": [ + [106, "gp", "art-joint-anim"], + [164, "v1", "art-joint-anim"], + [216, "v1", "art-joint-anim"] + ], + "(anon-function 13 target-anim)": [ + [31, "v1", "art-joint-anim"], + [321, "v1", "art-joint-anim"] + ], + "(anon-function 14 target-anim)": [ + [28, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(anon-function 15 target-anim)": [[158, "a1", "art-joint-anim"]], + "(anon-function 16 target-anim)": [ + [84, "a1", "art-joint-anim"], + [230, "v1", "art-joint-anim"] + ], + "(code target-slide-down)": [ + [30, "v1", "art-joint-anim"], + [102, "v1", "art-joint-anim"] + ], + "(enter target-double-jump)": [[110, "v1", "vector"]], + "(code target-flop)": [[33, "v1", "art-joint-anim"]], + "mod-var-jump": [ + [156, "v0", "vector"], + [76, "f1", "float"] + ], + "(code target-running-attack)": [ + [118, "gp", "art-joint-anim"], + [437, "v1", "art-joint-anim"], + [465, "v1", "art-joint-anim"], + [493, "v1", "art-joint-anim"], + [265, "f26", "float"], + [348, "f26", "float"] + ], + "(event target-running-attack)": [[48, "v1", "process-focusable"]], + "(code target-attack)": [ + [282, "s5", "art-joint-anim"], + [359, "a0", "process-focusable"], + [362, "a0", "process-focusable"] + ], + "(code target-falling)": [[67, "v1", "art-joint-anim"]], + "(trans target-duck-high-jump-jump)": [[11, "v0", "sound-rpc-set-param"]], + "(enter target-high-jump)": [[21, "v1", "vector"]], + "(code target-double-jump)": [ + [95, "v1", "art-joint-anim"], + [133, "v1", "art-joint-anim"] + ], + "(code target-jump-forward)": [[64, "v1", "art-joint-anim"]], + "(enter target-jump)": [[42, "v1", "vector"]], + "(code target-duck-stance)": [ + [59, "v1", "art-joint-anim"], + [369, "v1", "art-joint-anim"], + [422, "v1", "art-joint-anim"], + [112, "v1", "art-joint-anim"], + [238, "v1", "art-joint-anim"], + [297, "v1", "art-joint-anim"] + ], + "(code target-blast-recover)": [ + [23, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"], + [134, "v1", "art-joint-anim"] + ], + "(code target-hide)": [ + [14, "v1", "art-joint-anim"], + [143, "v1", "art-joint-anim"], + [258, "v1", "art-joint-anim"], + [204, "v1", "art-joint-anim"], + [317, "v1", "art-joint-anim"], + [385, "v1", "art-joint-anim"], + [431, "v1", "art-joint-anim"], + [488, "v1", "art-joint-anim"] + ], + "(anon-function 15 target2)": [[26, "f0", "float"]], + "(code target-eco-powerup)": [ + [74, "v1", "art-joint-anim"], + [128, "v1", "art-joint-anim"], + [191, "v1", "art-joint-anim"], + [250, "v1", "art-joint-anim"] + ], + "(code target-edge-grab-jump)": [[83, "a1", "art-joint-anim"]], + "(code target-edge-grab)": [ + [21, "v1", "process-focusable"], + [25, "v1", "process-focusable"], + [278, "f0", "float"] + ], + "(exit target-edge-grab)": [ + [17, "v1", "process-focusable"], + [21, "v1", "process-focusable"] + ], + "(code target-pole-flip-forward-jump)": [[26, "t9", "(function none)"]], + "(code target-pole-flip-up)": [[23, "v1", "art-joint-anim"]], + "(code target-pole-cycle)": [ + [103, "v1", "art-joint-anim"], + [163, "v1", "art-joint-anim"] + ], + "(code target-grab-ride)": [ + [30, "a0", "process-focusable"], + [23, "a0", "process-focusable"], + [33, "a0", "process-focusable"] + ], + "(code target-grab)": [ + [154, "v1", "art-joint-anim"], + [242, "v1", "art-joint-anim"], + [419, "v1", "art-joint-anim"], + [616, "v1", "art-joint-anim"], + [689, "v1", "art-joint-anim"], + [756, "v1", "art-joint-anim"] + ], + "(event target-grab)": [[75, "a0", "process"]], + "(code target-load-wait)": [ + [21, "v1", "art-joint-anim"], + [134, "v1", "art-joint-anim"], + [191, "v1", "art-joint-anim"] + ], + "(anon-function 12 target2)": [ + [19, "s4", "target"], + [21, "s4", "target"], + [29, "s4", "target"], + [34, "s4", "target"], + [44, "s4", "target"], + [58, "s4", "target"], + [70, "s4", "target"], + [80, "s4", "target"], + [83, "s4", "target"], + [92, "s4", "target"], + [94, "s4", "target"], + [129, "s4", "target"], + [139, "s4", "target"] + ], + "(trans target-float)": [[130, "v1", "(state target)"]], + "(code target-look-around)": [[22, "v1", "float"]], + "(code target-stance-look-around)": [[13, "v1", "float"]], + "(code target-swim-up)": [[18, "v1", "art-joint-anim"]], + "(code target-swim-down)": [[70, "v1", "art-joint-anim"]], + "(exit target-swim-down)": [[56, "v0", "sound-rpc-set-param"]], + "(event target-swim-down)": [[[12, 99], "v1", "attack-info"]], + "(code target-swim-walk)": [ + [143, "v1", "art-joint-anim"], + [58, "v1", "art-joint-anim"] + ], + "(code target-swim-stance)": [[33, "v1", "art-joint-anim"]], + "(exit target-swim-stance)": [[42, "v0", "sound-rpc-set-param"]], + "lightning-draw-all": [ + [42, "v1", "connection"], + [43, "s1", "dma-buffer"] + ], + "lightning-draw": [ + [[407, 444], "v1", "(inline-array vector)"], + ["_stack_", 20, "(inline-array gcf-vertex)"], + ["_stack_", 176, "gcf-control"], + [440, "a1", "pointer"], + [441, "a0", "pointer"], + [438, "a1", "(pointer uint128)"], + [439, "a0", "(pointer uint128)"], + [[472, 487], "a0", "dma-packet"], + [[559, 576], "a0", "dma-packet"], + [[597, 602], "a0", "dma-packet"], + [436, "a1", "(pointer uint128)"], + [437, "a0", "(pointer uint128)"], + [[470, 472], "a0", "dma-packet"] + ], + "lightning-trail-fractal-gen": [ + [52, "v1", "float"], + [71, "v1", "float"], + [90, "v1", "float"] + ], + "lightning-trail-uniform-gen": [ + [21, "v1", "float"], + [43, "v1", "float"], + [65, "v1", "float"] + ], + "lightning-uniform-gen": [ + [38, "v1", "float"], + [60, "v1", "float"], + [82, "v1", "float"] + ], + "lightning-fractal-gen": [ + [37, "v1", "float"], + [64, "v1", "float"], + [91, "v1", "float"] + ], + "(method 19 light-trail-tracker)": [ + [17, "a1", "process-drawable"], + [21, "a1", "process-drawable"], + [30, "a1", "process-drawable"], + [34, "a1", "process-drawable"] + ], + "(code target-powerjak-get-on)": [ + [86, "v1", "art-joint-anim"], + [145, "v1", "art-joint-anim"] + ], + "(code target-lightjak-get-on)": [ + [222, "v1", "art-joint-anim"], + [686, "v1", "art-joint-anim"], + [770, "v1", "art-joint-anim"], + [484, "v0", "sound-rpc-set-param"] + ], + "(code target-lightjak-get-off)": [[159, "v1", "art-joint-anim"]], + "(code target-lightjak-swoop)": [[30, "v1", "art-joint-anim"]], + "(code target-lightjak-swoop-again)": [ + [214, "v1", "art-joint-anim"], + [112, "v1", "art-joint-anim"] + ], + "(code target-lightjak-swoop-falling)": [ + [14, "v1", "art-joint-anim"], + [66, "v1", "art-joint-anim"] + ], + "(method 10 lightjak-shield)": [[7, "v0", "sound-rpc-set-param"]], + "target-lightjak-end-mode": [[94, "v0", "sound-rpc-set-param"]], + "(exit target-lightjak-get-on)": [[2, "v0", "sound-rpc-set-param"]], + "(code hit lightjak-shield)": [ + [143, "v1", "art-joint-anim"], + [198, "v1", "art-joint-anim"] + ], + "(code close lightjak-shield)": [[30, "v1", "art-joint-anim"]], + "(code open lightjak-shield)": [[182, "v1", "art-joint-anim"]], + "(code target-lightjak-regen)": [ + [126, "v1", "art-joint-anim"], + [563, "v1", "art-joint-anim"], + [378, "v1", "art-joint-anim"] + ], + "(code target-lightjak-shield)": [[194, "gp", "art-joint-anim"]], + "(code idle freeze-control)": [[59, "a1", "process-focusable"]], + "(enter idle freeze-control)": [[48, "v1", "float"]], + "(code target-invisible-get-on)": [ + [72, "s5", "process-drawable"], + [112, "v1", "art-joint-anim"], + [304, "v1", "art-joint-anim"], + [248, "v1", "art-joint-anim"] + ], + "(code target-launch-dir)": [[184, "v1", "art-joint-anim"]], + "(trans target-launch-dir)": [ + [112, "f3", "float"], + [129, "f2", "float"] + ], + "(enter target-launch-dir)": [[27, "f2", "float"]], + "next-continue": [ + [4, "a2", "symbol"], + [5, "a2", "level-load-info"], + [12, "a3", "continue-point"] + ], + "(code target-hit)": [[915, "v1", "art-joint-anim"]], + "target-hit-setup-anim": [ + [153, "v1", "art-joint-anim"], + [225, "v1", "art-joint-anim"] + ], + "target-death-reset": [[21, "v1", "connection"]], + "target-continue-init-art": [ + [141, "v1", "skeleton-group"], + [159, "v1", "skeleton-group"] + ], + "(event target-continue)": [[18, "a0", "process"]], + "target-hit-effect": [ + [16, "a0", "vector"], + [70, "a0", "vector"] + ], + "arrive-at-continue": [ + [[265, 293], "s5", "handle"], + [[343, 395], "gp", "handle"], + [[422, 458], "gp", "handle"], + [312, "s5", "handle"], + [315, "s5", "handle"], + [318, "s5", "handle"] + ], + "(anon-function 4 target-death)": [[273, "v1", "art-joint-anim"]], + "(anon-function 3 target-death)": [ + [228, "v1", "art-joint-anim"], + [312, "v1", "art-joint-anim"], + [447, "v1", "art-joint-anim"], + [391, "v1", "art-joint-anim"] + ], + "(anon-function 2 target-death)": [ + [58, "v1", "art-joint-anim"], + [197, "v1", "art-joint-anim"], + [141, "v1", "art-joint-anim"] + ], + "(anon-function 1 target-death)": [[73, "v1", "art-joint-anim"]], + "(code target-death)": [ + [618, "v1", "art-joint-anim"], + [745, "v1", "art-joint-anim"], + [1003, "v1", "art-joint-anim"] + ], + "part-tracker-init-base": [ + [61, "s2", "matrix"], + [70, "s2", "matrix"] + ], + "(exit idle freeze-control)": [[72, "v0", "float"]], + "target-death-main": [ + ["_stack_", 96, "level"], + [[346, 584], "s5", "handle"], + [529, "v1", "float"], + [506, "v1", "float"], + [483, "v1", "float"] + ], + "target-gun-end-mode": [[59, "v0", "sound-rpc-set-param"]], + "find-nearest-focusable": [ + [48, "s3", "process-focusable"], + [56, "s3", "process-focusable"], + [65, "s3", "process-focusable"] + ], + "target-gun-find-track": [ + [474, "s5", "process-focusable"], + [481, "s5", "process-focusable"], + [260, "s5", "process-focusable"], + [372, "s5", "process-focusable"], + [392, "s5", "process-focusable"], + [419, "s5", "process-focusable"], + [422, "s5", "process-focusable"], + [430, "s5", "process-focusable"] + ], + "target-gun-joint-pre0": [ + [931, "a0", "process-focusable"], + [932, "a0", "process-focusable"], + [934, "a0", "process-focusable"] + ], + "target-gun-check": [[626, "v0", "sound-rpc-set-param"]], + "gun-post": [ + [[12, 222], "gp", "target"], + [5, "gp", "gun"] + ], + "(code idle gun)": [[16, "v1", "art-joint-anim"]], + "(code use gun)": [ + [38, "v1", "art-joint-anim"], + [406, "s2", "pair"], + [542, "s2", "pair"], + [98, "v1", "art-joint-anim"], + [158, "v1", "art-joint-anim"], + [218, "v1", "art-joint-anim"], + [278, "v1", "art-joint-anim"] + ], + "(post use gun)": [[169, "gp", "gun"]], + "(method 9 gun-info)": [[74, "s2", "collide-shape-prim"]], + "get-remaining-player-ammo": [[32, "v0", "float"]], + "target-gun-type-set!": [[6, "gp", "int"]], + "target-gun-joint-points": [[858, "a0", "int"]], + "(method 12 light-trail)": [ + ["_stack_", 88, "float"], + ["_stack_", 92, "float"], + ["_stack_", 96, "float"], + ["_stack_", 140, "float"], + ["_stack_", 144, "float"], + ["_stack_", 148, "float"], + ["_stack_", 152, "float"], + ["_stack_", 156, "float"], + [25, "a1", "light-trail-breadcrumb"], + [178, "s4", "light-trail-breadcrumb"], + [556, "a0", "vector"] + ], + "compute-trail-scaled-t": [[17, "v1", "float"]], + "(code idle board)": [ + [19, "v1", "art-joint-anim"], + [37, "v1", "art-joint-anim"] + ], + "(trans hidden board)": [[4, "a0", "target"]], + "(trans idle board)": [[4, "a0", "target"]], + "(trans use board)": [ + [8, "a0", "target"], + [22, "a1", "target"] + ], + "(code use board)": [[17, "v1", "art-joint-anim"]], + "target-board-handler": [[107, "a0", "process"]], + "target-board-green-eco-attack": [[52, "v1", "collide-shape"]], + "target-board-effect": [[334, "v0", "sound-rpc-set-param"]], + "target-board-physics": [[167, "v0", "sound-rpc-set-param"]], + "target-board-real-post": [[360, "v0", "sound-rpc-set-param"]], + "(code target-board-stance)": [[49, "v1", "art-joint-anim"]], + "(code target-board-halfpipe)": [[173, "t9", "(function none)"]], + "(code target-board-jump)": [[16, "v1", "art-joint-anim"]], + "(enter target-board-jump)": [ + [364, "v1", "process-drawable"], + [421, "v1", "process-drawable"] + ], + "(code target-board-jump-kick)": [[15, "v1", "art-joint-anim"]], + "(code target-board-wall-kick)": [ + [10, "v1", "art-joint-anim"], + [59, "f0", "float"] + ], + "(exit target-board-flip)": [[31, "v0", "sound-rpc-set-param"]], + "(enter target-board-flip)": [[78, "v0", "sound-rpc-set-param"]], + "(code target-board-flip)": [ + [319, "v1", "art-joint-anim"], + [385, "v1", "art-joint-anim"], + [108, "v1", "art-joint-anim"], + [218, "v1", "art-joint-anim"] + ], + "(exit target-board-hold)": [[9, "v0", "sound-rpc-set-param"]], + "(code target-board-hit-ground)": [ + [77, "v1", "art-joint-anim"], + [147, "v1", "art-joint-anim"] + ], + "(trans target-board-ride-edge)": [ + [107, "v0", "sound-rpc-set-param"], + [235, "a0", "sound-name"] + ], + "(enter target-board-ride-edge)": [[6, "v0", "sound-rpc-set-param"]], + "(exit target-board-ride-edge)": [[8, "v0", "sound-rpc-set-param"]], + "(code target-board-trickx)": [ + [81, "v1", "art-joint-anim"], + [149, "v1", "art-joint-anim"], + [218, "v1", "art-joint-anim"], + [301, "v1", "art-joint-anim"] + ], + "(code target-board-tricky)": [ + [514, "v1", "art-joint-anim"], + [75, "v1", "art-joint-anim"], + [143, "v1", "art-joint-anim"], + [212, "v1", "art-joint-anim"], + [326, "v1", "art-joint-anim"] + ], + "(exit target-board-tricky)": [[27, "v0", "sound-rpc-set-param"]], + "(code target-board-hold)": [ + [615, "v1", "art-joint-anim"], + [685, "v1", "art-joint-anim"], + [755, "v1", "art-joint-anim"], + [825, "v1", "art-joint-anim"], + [131, "v1", "art-joint-anim"], + [261, "v1", "art-joint-anim"], + [391, "v1", "art-joint-anim"], + [511, "v1", "art-joint-anim"] + ], + "target-board-anim-trans": [[192, "v0", "sound-rpc-set-param"]], + "target-board-ground-check": [ + [259, "v1", "process-drawable"], + [319, "v1", "process-drawable"] + ], + "(code target-board-hit)": [[14, "v0", "sound-rpc-set-param"]], + "(enter target-board-grab)": [[21, "v0", "sound-rpc-set-param"]], + "(event target-board-grab)": [[35, "a0", "process"]], + "(code target-board-get-off)": [[78, "v1", "art-joint-anim"]], + "(code target-board-get-on)": [[55, "v1", "art-joint-anim"]], + "(event target-board-halfpipe)": [[82, "v1", "float"]], + "(method 9 plane-volume)": [["_stack_", 148, "float"]], + "(code vent-pickup)": [[27, "gp", "process-focusable"]], + "(event open light-eco-vent)": [[22, "gp", "process-drawable"]], + "(event open dark-eco-vent)": [[22, "gp", "process-drawable"]], + "crate-standard-event-handler": [ + [5, "v1", "attack-info"], + [6, "v1", "attack-info"], + [10, "v1", "attack-info"], + [66, "gp", "process-focusable"], + [177, "v1", "attack-info"], + [435, "v1", "attack-info"], + [563, "v1", "impact-control"], + [660, "a0", "vector"] + ], + "(event carry crate)": [[15, "a0", "vector"]], + "(enter fall crate)": [ + [35, "v0", "carry-info"], + [39, "a0", "carry-info"] + ], + "(code notice-blue crate)": [ + [19, "v1", "process-drawable"], + [30, "v1", "collide-shape"], + [78, "v1", "vector"] + ], + "(code die crate)": [[44, "v1", "process-focusable"]], + "(method 42 crate)": [[60, "v0", "float"]], + "(method 9 fact-info)": [ + ["_stack_", 16, "pickup-type"], + [135, "a0", "process-drawable"], + [183, "a0", "process-drawable"] + ], + "pickup-ammo-set!": [ + ["_stack_", 16, "float"], + [140, "v1", "float"], + [222, "v0", "float"], + [21, "v1", "float"] + ], + "check-blue-suck": [[19, "v1", "collide-shape"]], + "add-blue-motion": [[20, "gp", "process-focusable"]], + "collectable-standard-event-handler": [ + [115, "a0", "vector"], + [133, "a0", "vector"], + [198, "a0", "process"], + [323, "a0", "process"] + ], + "(event pickup collectable)": [ + [17, "a0", "vector"], + [18, "v1", "vector"] + ], + "(code pickup eco)": [[41, "t9", "(function none)"]], + "notify-gem-pickup": [ + [18, "f1", "float"], + [39, "f1", "float"] + ], + "(method 32 collectable)": [ + [19, "v1", "int"], + [19, "a0", "int"], + [23, "a0", "int"], + [159, "v1", "process-drawable"] + ], + "(anon-function 77 collectables)": [ + [2, "v1", "handle"], + [5, "v1", "handle"], + [13, "v1", "collectable"], + [34, "a0", "process-focusable"], + [8, "v1", "handle"], + [37, "a0", "process-focusable"] + ], + "(anon-function 78 collectables)": [ + [2, "v1", "handle"], + [5, "v1", "handle"], + [8, "v1", "handle"], + [13, "v1", "collectable"], + [34, "a0", "process-focusable"], + [27, "a0", "process-focusable"], + [37, "a0", "process-focusable"] + ], + "(code die eco)": [[54, "v0", "float"]], + "sprite-add-matrix-data": [ + [[3, 16], "a2", "dma-packet"], + [[17, 28], "a1", "matrix"], + [[46, 58], "a2", "dma-packet"], + [[70, 97], "a2", "vector"], + [[98, 113], "a1", "vector"], + [[119, 133], "a1", "vector"] + ], + "sprite-add-frame-data": [[[3, 17], "a0", "dma-packet"]], + "sprite-add-2d-chunk": [ + [[7, 21], "a0", "dma-packet"], + [[33, 53], "a0", "dma-packet"], + [[57, 77], "a0", "dma-packet"], + [[78, 88], "v1", "dma-packet"], + [65, "a3", "int"] + ], + "sprite-add-3d-chunk": [ + [[7, 21], "a0", "dma-packet"], + [[33, 53], "a0", "dma-packet"], + [[57, 77], "a0", "dma-packet"], + [[78, 88], "v1", "dma-packet"], + [65, "a3", "int"] + ], + "sprite-draw": [ + [[71, 83], "a0", "dma-packet"], + [[85, 93], "a0", "dma-packet"], + [[109, 116], "a0", "dma-packet"], + [[127, 134], "a0", "dma-packet"], + [[148, 155], "a0", "dma-packet"] + ], + "sprite-init-distorter": [ + [50, "a3", "uint"], + [[46, 59], "a1", "dma-packet"] + ], + "sprite-draw-distorters": [ + [[73, 98], "a0", "vector"], + ["_stack_", 32, "vector"], + ["_stack_", 48, "vector"], + [[174, 199], "a1", "dma-packet"], + [[206, 213], "a0", "dma-packet"], + [[215, 221], "a0", "vector4w"], + [[223, 231], "a0", "dma-packet"], + [[251, 276], "a1", "dma-packet"], + [[281, 288], "a1", "dma-packet"], + [[290, 296], "a1", "vector4w"], + [[297, 305], "v1", "dma-packet"] + ], + "sprite-glow-init-engine": [ + [[8, 22], "a0", "dma-packet"], + [[32, 50], "a1", "dma-packet"], + [[52, 74], "a1", "dma-packet"], + [[76, 84], "a0", "dma-packet"], + [[85, 92], "v1", "dma-packet"] + ], + "sprite-glow-add-sprite": [[[0, 33], "v1", "sprite-glow-cnt-template"]], + "sprite-glow-add-simple-sprite": [ + [[0, 33], "v1", "sprite-glow-ref-template"] + ], + "add-shader-to-dma": [[[6, 8], "v1", "(pointer uint32)"]], + "add-debug-sphere-from-table": [ + [[38, 41], "v1", "vector"], + [[55, 59], "s0", "(inline-array vector)"] + ], + "add-debug-point": [ + [[36, 43], "a3", "dma-packet"], + [[45, 52], "a3", "gs-gif-tag"], + [[65, 73], "a3", "vector4w-2"], + [[85, 93], "a3", "vector4w-2"], + [[102, 110], "a3", "vector4w-2"], + [[122, 130], "a1", "vector4w-2"], + [[129, 148], "a0", "(pointer uint64)"] + ], + "internal-draw-debug-line": [ + [[5, 224], "s5", "rgba"], + [[27, 29], "v1", "rgba"], + [[109, 115], "a3", "dma-packet"], + [[118, 124], "a3", "gs-gif-tag"], + [[232, 245], "a1", "(inline-array vector4w-2)"], + [[107, 267], "a0", "(pointer uint64)"] + ], + "add-debug-flat-triangle": [ + [[73, 80], "a3", "dma-packet"], + [[82, 89], "a3", "gs-gif-tag"], + [[111, 131], "a3", "(inline-array vector)"], + [[68, 149], "a0", "(pointer uint64)"] + ], + "add-debug-line2d": [ + [[61, 68], "a2", "dma-packet"], + [[70, 77], "a2", "gs-gif-tag"], + [[79, 85], "a2", "vector4w-2"], + [[87, 93], "a2", "vector4w-2"], + [[97, 111], "a0", "(pointer uint64)"] + ], + "drawable-frag-count": [[[14, 20], "s5", "drawable-group"]], + "add-boundary-shader": [ + [[6, 12], "a0", "gs-gif-tag"], + [[14, 31], "s5", "adgif-shader"] + ], + "add-debug-bound": [ + //[105, "v1", "dma-packet"], + //[85, "a0", "dma-packet"], + ["_stack_", 16, "dma-packet"], + [91, "v1", "dma-packet"] + ], + "target-history-print": [["_stack_", 32, "collide-status"]], + "(method 13 sync-linear)": [ + ["_stack_", 16, "res-tag"], + [27, "v0", "(pointer float)"] + ], + "(method 13 sync-eased)": [ + ["_stack_", 16, "res-tag"], + [31, "v0", "(pointer float)"] + ], + "(method 13 sync-paused)": [ + ["_stack_", 16, "res-tag"], + [29, "v0", "(pointer float)"] + ], + "(method 11 impact-control)": [ + [58, "v1", "collide-shape-prim"], + [66, "v1", "collide-shape-prim"] + ], + "cam-slave-get-vector-with-offset": [ + [59, "v0", "vector"], + [24, "v0", "vector"], + [69, "s3", "vector"] + ], + "cam-slave-get-interp-time": [[29, "f0", "float"]], + "cam-standard-event-handler": [ + [13, "gp", "(state camera-slave)"], + [19, "gp", "(state camera-slave)"], + [22, "gp", "(state camera-slave)"] + ], + "cam-calc-follow!": [ + ["_stack_", 144, "float"], + ["_stack_", 160, "float"] + ], + "(method 15 tracking-spline)": [ + [28, "a0", "int"], + [38, "a0", "int"] + ], + "(code cam-pov)": [ + [15, "a1", "process-drawable"], + [24, "a0", "process-drawable"] + ], + "(code cam-pov180)": [ + [15, "a1", "process-drawable"], + [23, "v1", "process-drawable"], + [45, "v1", "process-drawable"], + [58, "v1", "process-drawable"], + [80, "a1", "process-drawable"] + ], + "(code cam-pov-track)": [ + [19, "a1", "process-drawable"], + [30, "a0", "process-drawable"] + ], + "(event cam-string)": [ + [11, "v1", "vector"], + [44, "s5", "vector"], + [51, "s5", "vector"], + [53, "s5", "vector"], + [62, "s5", "vector"], + [69, "s5", "vector"], + [71, "s5", "vector"], + [80, "gp", "vector"], + [87, "gp", "vector"], + [89, "gp", "vector"], + [98, "gp", "vector"], + [105, "gp", "vector"], + [107, "gp", "vector"], + [141, "a0", "vector"], + [145, "a0", "vector"], + [174, "v1", "vector"], + [184, "v1", "float"], + [28, "v1", "float"], + [31, "v1", "float"] + ], + "set-string-params": [[30, "v0", "entity-camera"]], + "cam-string-joystick": [[842, "v1", "process-drawable"]], + "cam-dist-analog-input": [[32, "f0", "float"]], + "cam-los-collide": [ + [92, "s1", "(inline-array collide-cache-tri)"], + [205, "s1", "(inline-array collide-cache-tri)"], + [135, "s1", "(inline-array collide-cache-tri)"], + [140, "s1", "(inline-array collide-cache-tri)"], + [175, "s1", "(inline-array collide-cache-tri)"], + [375, "v1", "(inline-array tracking-spline)"] + ], + "cam-los-spline-collide": [ + [70, "s3", "(inline-array collide-cache-tri)"], + [88, "s3", "(inline-array collide-cache-tri)"] + ], + "cam-draw-collide-cache": [ + [[8, 14], "gp", "(inline-array collide-cache-tri)"] + ], + "(method 16 camera-master)": [ + [14, "a2", "process-focusable"], + [16, "v1", "int"] + ], + "reset-follow": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(event cam-master-active)": [ + [80, "gp", "matrix"], + [170, "s5", "vector"], + [275, "v1", "process"], + [330, "a0", "camera-slave"], + [448, "v1", "camera-slave"], + [512, "v1", "camera-slave"], + [542, "v1", "camera-slave"], + [611, "a0", "vector"], + [799, "v1", "float"], + [784, "v1", "vector"], + [589, "v1", "float"], + [593, "v1", "float"], + [602, "v1", "float"], + [606, "v1", "float"], + [796, "v1", "float"] + ], + "master-track-target": [ + [53, "gp", "process-focusable"], + [100, "gp", "process-focusable"], + [121, "gp", "process-focusable"], + [132, "gp", "process-focusable"], + [203, "gp", "process-focusable"], + [273, "gp", "process-focusable"], + [280, "gp", "process-focusable"], + [286, "gp", "process-focusable"], + [366, "gp", "process-focusable"], + [480, "gp", "process-focusable"], + [486, "gp", "process-focusable"], + [490, "gp", "process-focusable"], + [528, "gp", "process-focusable"], + [531, "gp", "process-focusable"], + [409, "gp", "process-focusable"], + [415, "gp", "process-focusable"], + [171, "gp", "process-focusable"], + [195, "gp", "process-focusable"] + ], + "reset-target-tracking": [ + [14, "gp", "process-focusable"], + [40, "gp", "process-focusable"], + [51, "gp", "process-focusable"], + [65, "gp", "process-focusable"], + [86, "gp", "process-focusable"], + [131, "gp", "process-focusable"] + ], + "cam-free-floating-input": [ + [179, "v1", "cpad-list"], + [191, "v1", "cpad-list"], + [203, "v1", "cpad-list"], + [215, "v1", "cpad-list"], + [229, "a0", "cpad-list"], + [237, "v1", "cpad-list"] + ], + "(event cam-combiner-active)": [ + [103, "gp", "camera-slave"], + [105, "gp", "camera-slave"], + [189, "gp", "camera-slave"], + [191, "gp", "camera-slave"], + [206, "gp", "camera-slave"], + [210, "gp", "camera-slave"], + [214, "gp", "camera-slave"], + [230, "gp", "camera-slave"], + [234, "gp", "camera-slave"] + ], + "execute-cam-post-hook-engine": [ + [8, "s5", "connection"], + [[14, 17], "s5", "connection"], + [18, "t9", "(function object object object object object)"], + [9, "s5", "connection"] + ], + "cam-layout-init": [[10, "v1", "connection"]], + "cam-layout-function-call": [ + [15, "gp", "(function string int basic object)"] + ], + "cam-layout-do-action": [[99, "s5", "(function int symbol object)"]], + "cam-layout-do-menu": [ + [[280, 363], "s4", "clm-list"], + [374, "v1", "clm-item"], + [[136, 182], "s3", "clm-list"], + [209, "a0", "clm-item"], + [219, "v1", "clm-item"], + [234, "s3", "clm-item"], + [239, "v1", "clm-item"], + [244, "s3", "clm-item"] + ], + "clmf-save-all": [[18, "v1", "connection"]], + "cam-layout-save-campointsoffset": [[12, "v0", "vector"]], + "cam-layout-save-splineoffset": [ + [37, "v0", "vector"], + [25, "v0", "vector"] + ], + "cam-layout-save-interesting": [ + [13, "v0", "vector"], + [38, "v0", "vector"] + ], + "cam-layout-save-align": [ + [38, "v0", "vector"], + [13, "v0", "vector"] + ], + "cam-layout-save-pivot": [ + [13, "v0", "vector"], + [38, "v0", "vector"] + ], + "cam-layout-save-cam-trans": [ + [29, "v0", "vector"], + [40, "v0", "vector"], + [93, "s5", "symbol"], + [95, "s2", "symbol"], + [94, "s2", "symbol"] + ], + "cam-layout-save-cam-rot": [[13, "v0", "vector"]], + "clmf-next-entity": [[38, "a0", "connection"]], + "cam-layout-entity-info": [[202, "v1", "vector"]], + "cam-layout-entity-volume-info-create": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 164, "float"], + [16, "v0", "(inline-array vector)"] + ], + "cam-layout-print": [[[22, 25], "v1", "dma-packet"]], + "(method 19 level-group)": [ + [237, "s2", "continue-point"], + [191, "s0", "continue-point"], + [196, "s2", "continue-point"], + [207, "s0", "continue-point"], + [213, "s0", "continue-point"], + [222, "s0", "continue-point"] + ], + "master-choose-entity": [[162, "s0", "(pointer camera-slave)"]], + "bones-mtx-calc-execute": [ + [[126, 154], "a0", "pris-mtx"], + [[126, 154], "a1", "pris-mtx"], + [67, "v1", "bone-memory"], + [72, "a1", "bone-memory"], + [76, "a1", "bone-memory"], + [80, "a1", "bone-memory"], + [84, "a1", "bone-memory"], + [88, "a1", "bone-memory"], + [92, "a1", "bone-memory"], + [96, "a0", "dma-bank-control"], + [159, "a0", "dma-bank-control"] + ], + "bones-set-sqwc": [[2, "v1", "dma-bank-control"]], + "bones-reset-sqwc": [[2, "v1", "dma-bank-control"]], + "bones-init": [ + [1, "v1", "bone-memory"], + [6, "a1", "bone-memory"], + [10, "a1", "bone-memory"], + [14, "a1", "bone-memory"], + [18, "a1", "bone-memory"], + [22, "a1", "bone-memory"], + [26, "a1", "bone-memory"], + [44, "a0", "dma-packet"], + [45, "a0", "(pointer uint64)"] + ], + "foreground-init": [ + [[0, 99], "gp", "foreground-work"], + [[21, 23], "a0", "(pointer uint64)"] + ], + "texscroll-make-request": [[[5, 40], "a1", "mei-texture-scroll"]], + "texscroll-execute": [ + [19, "t1", "pointer"], + [15, "a2", "merc-fragment-control"], + [[20, 24], "t1", "merc-fragment"], + [40, "a2", "merc-fragment-control"], + [45, "a2", "merc-fragment-control"], + [48, "a2", "merc-fragment-control"], + [51, "a2", "int"], + [[10, 31], "a1", "mei-texture-scroll"], + [39, "t1", "(pointer int8)"] + ], + "foreground-add-mtx-calc": [[1, "v1", "foreground-work"]], + "foreground-wrapup": [ + [[1, 90], "gp", "foreground-work"], + [[25, 31], "a0", "dma-packet"], + [[55, 60], "a0", "dma-packet"] + ], + "foreground-shadow": [ + [2, "a3", "foreground-work"], + [[13, 19], "t1", "vector"], + [[44, 121], "t2", "shadow-dma-packet"], + [[82, 87], "t7", "vector"] + ], + "foreground-generic-merc-add-fragments": [ + [[5, 54], "a3", "merc-fragment-control"], + [[5, 57], "v1", "merc-fragment"], + [28, "t4", "foreground-work"], + [[16, 19], "a1", "dma-packet"], + [21, "t3", "(pointer int32)"], + [[38, 41], "a1", "dma-packet"], + [[49, 52], "a1", "dma-packet"] + ], + "foreground-ripple": [ + [2, "v1", "foreground-work"], + [25, "v1", "foreground-work"], + [[27, 32], "a0", "foreground-work"] + ], + "foreground-draw": [ + [[1, 64], "at", "foreground-work"], + [13, "t0", "foreground-work"], + [27, "t1", "foreground-work"], + [32, "a2", "foreground-work"], + [37, "a1", "foreground-work"], + [70, "a0", "foreground-work"], + [114, "v1", "foreground-work"], + [116, "v1", "foreground-work"], + [118, "v1", "foreground-work"], + [142, "v1", "foreground-work"], + [187, "a0", "foreground-work"], + [236, "a0", "foreground-work"], + [249, "a0", "foreground-work"], + [272, "a0", "foreground-work"], + [389, "v1", "foreground-work"], + [397, "a0", "foreground-work"], + [437, "a0", "foreground-work"], + [452, "a0", "foreground-work"], + [465, "v1", "foreground-work"], + [488, "v1", "foreground-work"], + [495, "v1", "foreground-work"], + [520, "v1", "foreground-work"], + [538, "v1", "foreground-work"], + [544, "v1", "foreground-work"], + [573, "a0", "foreground-work"], + [603, "v1", "foreground-work"], + [614, "v1", "foreground-work"], + [622, "v1", "foreground-work"], + [632, "v1", "foreground-work"], + [332, "a3", "(pointer uint8)"], + [339, "v1", "(pointer uint8)"], + [357, "t0", "(pointer uint8)"], + [364, "v1", "(pointer uint8)"], + [669, "s5", "int"], + [675, "a0", "foreground-work"], + [[38, 61], "a2", "bone-calculation"], + [[185, 189], "v1", "mei-texture-scroll"], + [[268, 297], "v1", "mei-envmap-tint"], + [[300, 339], "v1", "(pointer uint8)"], + [339, "v1", "(pointer uint8)"], + [[340, 364], "v1", "(pointer uint8)"], + [364, "v1", "(pointer uint8)"], + [[365, 372], "v1", "(pointer uint8)"] + ], + "generic-work-init": [ + [4, "a0", "generic-work"], + [[9, 19], "a0", "generic-work"], + [23, "a1", "generic-work"] + ], + "generic-initialize-without-sync": [ + [8, "a0", "generic-work"], + [21, "a0", "generic-work"] + ], + "generic-initialize": [ + [8, "a0", "generic-work"], + [21, "a0", "generic-work"] + ], + "generic-wrapup": [ + [1, "v1", "generic-work"], + [4, "v1", "generic-work"] + ], + "generic-warp-source": [[2, "at", "generic-work"]], + "(method 9 font-work)": [ + [16, "t0", "(pointer uint32)"], + [47, "a2", "(pointer uint32)"], + [49, "a2", "(pointer uint32)"], + [51, "a2", "(pointer uint32)"], + [53, "a2", "(pointer uint32)"] + ], + "unpack-comp-rle": [[[10, 26], "a0", "(pointer int8)"]], + "unpack-comp-huf": [[[21, 23], "t3", "(pointer uint16)"]], + "(method 16 level)": [ + [222, "v1", "(pointer uint128)"], + [223, "a1", "(pointer uint128)"], + [225, "a0", "(pointer uint128)"], + [[71, 168], "s1", "(pointer int8)"], + [72, "v1", "(pointer int8)"], + [[74, 169], "s0", "(pointer int8)"], + [[170, 193], "s1", "(pointer uint8)"], + [[171, 193], "s2", "(pointer uint8)"], + [227, "v1", "(pointer uint8)"] + ], + "upload-vis-bits": [ + [14, "a1", "(pointer uint128)"], + [[8, 35], "a2", "(pointer uint128)"] + ], + "finish-background": [ + [900, "t4", "(pointer int32)"], + [963, "t4", "(pointer int32)"], + [1026, "t4", "(pointer int32)"], + [1089, "t3", "(pointer int32)"] + ], + "(method 16 drawable-inline-array-node)": [[[1, 7], "v1", "draw-node"]], + "(method 9 shrubbery)": [ + [23, "a2", "(pointer int32)"], + [28, "a3", "(pointer int32)"] + ], + "shrub-upload-view-data": [[[3, 17], "a0", "dma-packet"]], + "shrub-do-init-frame": [ + [[12, 21], "a0", "dma-packet"], + [[26, 29], "a0", "dma-packet"], + [33, "v1", "(pointer vif-tag)"], + [[35, 41], "v1", "(pointer uint32)"], + [42, "v1", "(pointer vif-tag)"], + [[44, 51], "v1", "(pointer uint32)"], + [52, "v1", "(pointer vif-tag)"], + [54, "v1", "(pointer uint32)"] + ], + "shrub-init-frame": [ + [[8, 12], "a0", "dma-packet"], + [[18, 21], "a0", "gs-gif-tag"], + [24, "v1", "(pointer gs-test)"], + [26, "v1", "(pointer gs-reg64)"] + ], + "shrub-upload-model": [ + [[17, 26], "a3", "dma-packet"], + [[33, 41], "a0", "dma-packet"], + [[47, 55], "a0", "dma-packet"] + ], + "draw-prototype-inline-array-shrub": [ + [387, "a0", "prototype-shrubbery"], + [481, "v1", "prototype-shrubbery"], + [[637, 646], "a1", "prototype-bucket-shrub"], + [[301, 392], "s1", "prototype-bucket-shrub"], + [[470, 515], "s1", "prototype-bucket-shrub"], + [[470, 658], "gp", "prototype-bucket-shrub"], + [[13, 56], "v1", "prototype-bucket-shrub"] + // [[102, 114], "a0", "shrub-near-packet"], + // [[114, 117], "v1", "vector4w-3"], + // [118, "a1", "vector4w"], + // [123, "v1", "dma-packet"], + // [[124, 126], "v1", "vector4w"], + // [[334, 364], "s1", "prototype-bucket-shrub"], + // [416, "a0", "drawable-group"], + // [420, "s1", "prototype-bucket-shrub"], + // [525, "v1", "drawable-group"], + // [[518, 535], "s1", "prototype-bucket-shrub"], + // [558, "s1", "prototype-bucket-shrub"], + // [[677, 718], "gp", "prototype-bucket-shrub"], + // [[696, 706], "a1", "prototype-bucket-shrub"] + ], + "(method 8 drawable-tree-instance-shrub)": [[51, "v1", "drawable-group"]], + "(method 13 drawable-tree-instance-shrub)": [ + [[12, 151], "gp", "prototype-bucket-shrub"], + [19, "a1", "drawable-group"], + [45, "v1", "drawable-group"], + [67, "s3", "shrubbery"], + [93, "v1", "drawable-group"], + [115, "s3", "shrubbery"], + [161, "gp", "(inline-array prototype-bucket-shrub)"] + ], + "draw-drawable-tree-instance-shrub": [[86, "a0", "drawable-group"]], + "(method 9 tfragment)": [ + [27, "a3", "(pointer int32)"], + [32, "t0", "texture"] + ], + "add-tfrag-mtx-0": [[[3, 17], "a0", "dma-packet"]], + "add-tfrag-mtx-1": [[[3, 17], "a0", "dma-packet"]], + "add-tfrag-data": [ + [[3, 17], "a0", "dma-packet"], + [[24, 31], "v1", "dma-packet"] + ], + "tfrag-init-buffer": [[[73, 81], "v1", "dma-packet"]], + "tfrag-end-buffer": [ + [[21, 28], "a2", "dma-packet"], + [[31, 38], "a0", "(pointer vif-tag)"], + [[38, 42], "a0", "(pointer int32)"], + [[43, 49], "a0", "(pointer vif-tag)"] + ], + "tfrag-vu1-init-buf": [ + [[47, 55], "v1", "dma-packet"], + [[81, 86], "v1", "dma-packet"], + [89, "v1", "(pointer int32)"] + ], + "draw-drawable-tree-tfrag-water": [ + [18, "v1", "drawable-inline-array-node"], + [20, "a0", "drawable-inline-array-node"] + ], + "draw-drawable-tree-tfrag-trans": [ + [18, "v1", "drawable-inline-array-node"], + [20, "a0", "drawable-inline-array-node"] + ], + "draw-drawable-tree-tfrag": [ + [17, "v1", "drawable-inline-array-node"], + [19, "a0", "drawable-inline-array-node"] + ], + "(method 9 tie-fragment)": [ + [21, "a2", "(pointer int32)"], + [26, "a3", "(pointer int32)"], + [[1, 70], "s5", "adgif-shader"] + ], + "tie-init-engine": [ + [[37, 51], "a0", "dma-packet"], + [[63, 71], "a0", "dma-packet"], + [[73, 80], "a0", "dma-packet"], + [[81, 90], "v1", "vector"], + [[91, 98], "v1", "(pointer vif-tag)"] + ], + "tie-end-buffer": [ + [[47, 54], "a1", "dma-packet"], + [[58, 69], "a0", "(pointer vif-tag)"] + ], + "tie-ints": [ + [17, "v1", "(pointer uint32)"], + [21, "v1", "(pointer uint32)"] + ], + "tie-floats": [[[3, 73], "gp", "(pointer uint32)"]], + "instance-tie-patch-buckets": [ + [39, "a0", "(pointer uint64)"], + [137, "a0", "(pointer uint64)"], + [235, "a0", "(pointer uint64)"], + [333, "a0", "(pointer uint64)"], + [431, "a0", "(pointer uint64)"], + [530, "a0", "(pointer uint64)"], + [629, "a0", "(pointer uint64)"], + [728, "a0", "(pointer uint64)"], + [827, "a0", "(pointer uint64)"], + [926, "a0", "(pointer uint64)"], + [1025, "a0", "(pointer uint64)"], + [1124, "a0", "(pointer uint64)"], + [1223, "a0", "(pointer uint64)"] + ], + "draw-drawable-tree-instance-tie": [ + [[23, 37], "v1", "drawable-inline-array-node"], + [25, "a0", "drawable-inline-array-node"], + [120, "s2", "drawable-inline-array-instance-tie"], + [132, "v1", "int"], + [132, "a0", "int"] + ], + "tie-init-buf": [ + [[44, 51], "a0", "dma-packet"], + [[53, 60], "a0", "gs-gif-tag"], + [64, "a0", "(pointer gs-zbuf)"], + [66, "a0", "(pointer gs-reg64)"], + [[71, 79], "v1", "dma-packet"], + [[104, 110], "v1", "dma-packet"], + [112, "v1", "(pointer uint32)"] + ], + "(method 13 drawable-tree-instance-tie)": [ + [[51, 70], "t1", "tie-fragment"], + [[102, 120], "a3", "tie-fragment"], + [[160, 178], "t1", "tie-fragment"], + [[211, 229], "a3", "tie-fragment"], + [[266, 286], "t1", "tie-fragment"], + [[320, 340], "a1", "tie-fragment"], + [[381, 400], "t1", "tie-fragment"], + [[432, 450], "a3", "tie-fragment"], + [[487, 507], "t1", "tie-fragment"], + [[541, 561], "a1", "tie-fragment"], + [[598, 616], "t1", "tie-fragment"], + [[649, 667], "a3", "tie-fragment"], + [[703, 723], "t1", "tie-fragment"], + [[756, 776], "a1", "tie-fragment"] + ], + "(method 9 prim-strip)": [ + [224, "t2", "int"], + [224, "t0", "int"], + [226, "t1", "int"], + [226, "a3", "int"], + [[190, 231], "a1", "(inline-array prim-vertex)"], + [[148, 164], "a1", "(inline-array prim-vertex)"], + [[192, 230], "a2", "(inline-array prim-vertex)"], + [147, "a1", "(pointer uint128)"], + [[278, 281], "v1", "dma-packet"], + [230, "a2", "(pointer uint128)"] + ], + "prim-engine-execute": [ + [[15, 21], "v1", "connection"], + [[21, 25], "a0", "prim-strip"] + ], + "(event tracking light-trail-tracker)": [[55, "v1", "float"]], + "(method 21 light-trail)": [[[18, 64], "gp", "light-trail-breadcrumb"]], + "(method 14 light-trail)": [ + [47, "a0", "uint"], + [[10, 32], "a1", "light-trail-breadcrumb"], + [[34, 60], "s3", "light-trail-breadcrumb"], + [[34, 73], "s2", "light-trail-breadcrumb"] + ], + "debug-menu-item-var-update-display-str": [ + [48, "v1", "int"], + [63, "v1", "int"], + [68, "v1", "int"], + [46, "v1", "int"], + [45, "v1", "int"], + [65, "v1", "int"], + [66, "v1", "int"] + ], + "debug-menu-rebuild": [[7, "a0", "debug-menu-item"]], + "debug-menu-func-decode": [[18, "a0", "symbol"]], + "debug-menu-find-from-template": [ + [9, "s5", "string"], + [10, "s4", "debug-menu-item"], + [18, "s4", "debug-menu-item-submenu"], + [3, "s5", "debug-menu"] + ], + "debug-menu-render": [[[118, 121], "v1", "dma-packet"]], + "debug-menu-send-msg": [ + [17, "s2", "debug-menu-item-submenu"], + [12, "s2", "debug-menu-item"] + ], + "debug-menu-item-var-joypad-handler": [ + [206, "a1", "int"], + [207, "v1", "int"] + ], + "debug-menu-item-get-max-width": [ + [5, "a0", "debug-menu-item-submenu"], + [20, "a0", "debug-menu-item-var"] + ], + "debug-menu-item-var-make-float": [[32, "f0", "int"]], + "ragdoll-joint-callback": [[92, "t9", "(function cspace transformq none)"]], + "(method 15 ragdoll)": [ + [78, "s4", "ragdoll-edit-info"], + [92, "s4", "ragdoll-edit-info"], + [202, "s4", "ragdoll-edit-info"], + [216, "s4", "ragdoll-edit-info"], + [221, "s4", "ragdoll-edit-info"], + [362, "s4", "ragdoll-edit-info"], + [110, "s4", "ragdoll-edit-info"], + [115, "s4", "ragdoll-edit-info"] + ], + "(trans tracking weapon-trail-tracker)": [ + [36, "gp", "process-drawable"], + [45, "gp", "process-drawable"] + ], + "(trans tracking tread-trail-tracker)": [ + [27, "gp", "process-drawable"], + [30, "gp", "process-drawable"] + ], + "(method 23 weapon-trail)": [[[0, 100], "gp", "weapon-trail-crumb"]], + "(method 22 weapon-trail)": [[32, "v0", "light-trail-breadcrumb"]], + "(method 22 tread-trail)": [[19, "v0", "light-trail-breadcrumb"]], + "(method 23 tread-trail)": [[[0, 100], "s5", "tread-trail-crumb"]], + "(method 23 tire-trail)": [[[0, 74], "s5", "tire-trail-crumb"]], + "(method 22 tire-trail)": [[[18, 24], "v1", "tire-trail-crumb"]], + "(trans idle fma-sphere)": [[39, "a2", "process-drawable"]], + "part-water-splash-callback": [[3, "v1", "float"]], + "(method 15 water-control)": [[48, "v1", "float"]], + "(method 13 water-control)": [[158, "v1", "process-drawable"]], + "find-water-2": [ + [8, "v1", "region-prim-area"], + [15, "a1", "region-prim-area"] + ], + "find-water-1": [ + [62, "a0", "region-prim-area"], + [40, "a1", "region-prim-area"], + [6, "v1", "region-prim-area"], + [8, "v1", "region-prim-area"], + [11, "a1", "region-prim-area"] + ], + "water-info<-region": [ + [62, "v1", "pair"], + [71, "v1", "pair"], + [72, "v1", "pair"], + [210, "v1", "pair"], + [211, "v1", "pair"], + [212, "v1", "pair"], + [213, "s1", "pair"], + [280, "s1", "pair"], + [281, "s1", "pair"], + [271, "a0", "process-focusable"], + [111, "v1", "pair"], + [112, "v1", "pair"], + [144, "s0", "process-drawable"], + [156, "v1", "pair"], + [157, "v1", "pair"], + [61, "s1", "pair"], + [70, "s1", "pair"], + [209, "s1", "pair"], + [110, "s1", "pair"], + [155, "s1", "pair"], + [290, "a0", "region-prim-area"] + ], + "(method 10 flow-control)": [["_stack_", 48, "flow-section"]], + "(method 12 flow-control)": [ + [23, "a0", "connection"], + [24, "a0", "collide-shape"], + [71, "a0", "connection"], + [72, "a0", "collide-shape"], + [148, "a1", "process-focusable"] + ], + "(event idle water-flow)": [[15, "a0", "process-focusable"]], + "(method 9 menu-select-start-option)": [ + [393, "s3", "pair"], + [394, "v1", "pair"] + ], + "(method 24 progress)": [ + [64, "v1", "menu-missions-option"], + [69, "v1", "menu-missions-option"] + ], + "(method 31 progress)": [ + [64, "v1", "menu-missions-option"], + [69, "v1", "menu-missions-option"] + ], + "(method 9 menu-slider-option)": [[10, "v1", "(pointer float)"]], + "(method 33 progress)": [ + [18, "v1", "vector"], + [17, "gp", "vector"] + ], + "(method 32 progress)": [ + [46, "v1", "paged-menu-option"], + [50, "v1", "paged-menu-option"], + [310, "v1", "menu-select-start-option"], + [315, "v1", "menu-select-start-option"], + [319, "v1", "menu-select-start-option"], + [330, "v1", "menu-select-scene-option"], + [335, "v1", "menu-select-scene-option"], + [339, "v1", "menu-select-scene-option"], + [405, "v1", "menu-missions-option"], + [410, "v1", "menu-missions-option"] + ], + "(method 10 menu-memcard-slot-option)": [ + [215, "v1", "vector"], + [[273, 276], "v1", "dma-packet"] + ], + "(method 10 menu-picture-slider-option)": [[36, "v1", "pointer"]], + "(method 10 menu-sound-slider-option)": [[29, "v1", "pointer"]], + "(method 10 menu-center-screen-graphic-option)": [["_stack_", 16, "float"]], + "(method 52 progress)": [ + [[284, 287], "v1", "dma-packet"], + [80, "v1", "texture"], + [132, "v1", "texture"] + ], + "(method 9 progress-icon-array)": [[[108, 111], "v1", "dma-packet"]], + "hide-hud": [ + [11, "v1", "connection"], + [23, "v1", "connection"] + ], + "enable-hud": [[17, "v1", "connection"]], + "(method 13 hud-box)": [ + [[84, 89], "t3", "(inline-array vector4w)"], + [[116, 121], "t7", "(inline-array vector4w)"], + [[122, 126], "t7", "(inline-array vector4w)"], + [[126, 131], "t5", "(inline-array vector4w)"], + [[131, 136], "t4", "(inline-array vector4w)"], + [137, "t4", "(inline-array vector4w)"], + [[177, 200], "t2", "(inline-array vector4w)"], + [[116, 132], "t4", "(inline-array vector4w)"] + ], + "(method 9 hud-sprite)": [ + [34, "s3", "texture"], + [63, "s3", "texture"], + [78, "s3", "texture"], + [96, "s3", "texture"], + [85, "s3", "texture"], + [[39, 42], "s2", "(inline-array vector4w)"], + [51, "a0", "(pointer uint64)"], + [58, "a0", "(pointer uint64)"], + [[185, 196], "v1", "(inline-array vector4w)"], + [[211, 218], "t5", "(inline-array vector)"], + [[222, 229], "t5", "(inline-array vector)"], + [[230, 240], "t5", "(inline-array vector)"], + [[244, 254], "t5", "(inline-array vector)"], + [[256, 262], "t5", "(inline-array vector4w)"], + [[264, 270], "a2", "(inline-array vector4w)"], + [[280, 286], "v1", "(inline-array vector4w)"], + [[272, 278], "a2", "(inline-array vector4w)"] + ], + "(method 10 hud-box)": [[[31, 77], "v1", "(inline-array vector4w)"]], + "(method 11 hud-box)": [[[31, 77], "v1", "(inline-array vector4w)"]], + "(method 12 hud-box)": [[[31, 77], "v1", "(inline-array vector4w)"]], + "hud-create-icon": [ + [33, "a0", "process-drawable"], + [38, "a0", "manipy"] + ], + "hud-hidden?": [ + [9, "v1", "connection"], + [10, "a0", "hud"], + [12, "a0", "hud"] + ], + "ready-hud": [ + [23, "v1", "connection"], + [37, "v1", "connection"] + ], + "show-hud": [ + [22, "v1", "connection"], + [34, "v1", "connection"] + ], + "hide-hud-quick": [ + [11, "v1", "connection"], + [23, "v1", "connection"] + ], + "(method 9 hud-box)": [[[53, 84], "v1", "(inline-array vector4w)"]], + "(method 10 hud-sprite)": [ + [32, "s0", "texture"], + [242, "s0", "texture"], + [243, "s0", "texture"], + [[39, 45], "v1", "(inline-array vector4w)"], + [[230, 242], "v1", "(inline-array vector4w)"], + [[275, 332], "v1", "(inline-array vector)"], + [45, "s0", "texture"] + ], + "(method 50 progress)": [ + ["_stack_", 96, "float"], + ["_stack_", 176, "float"] + ], + "find-mission-text-at-index": [[157, "v1", "symbol"]], + "(method 11 controls-page-info)": [["_stack_", 64, "float"]], + "(method 16 hud)": [ + [127, "v1", "int"], + [147, "v1", "int"] + ], + "lookup-level-info": [ + [11, "v1", "basic"], + [21, "a1", "symbol"], + [[22, 34], "a1", "level-load-info"] + ], + "(method 29 level-group)": [[[2, 53], "v1", "pair"]], + "level-find-borrow-slot": [[[204, 211], "a2", "level"]], + "(method 19 level)": [ + [[40, 118], "a3", "symbol"], + [[52, 56], "a0", "texture-anim-array"] + ], + "level-update-after-load": [ + [[25, 58], "s1", "drawable-tree-tfrag"], + [142, "v1", "drawable-inline-array-tfrag"], + [147, "v1", "drawable-inline-array-tfrag"], + [152, "a0", "drawable-inline-array-tfrag"], + [175, "v1", "drawable-tree-instance-tie"], + [178, "v1", "drawable-tree-instance-tie"], + [393, "a1", "(pointer int32)"], + [398, "a2", "(pointer int32)"] + ], + "(method 25 level)": [ + [97, "s1", "(function object object)"], + [171, "s0", "(function object object object)"] + ], + "(method 9 level)": [ + [51, "s5", "(function object object)"], + [[143, 166], "v1", "task-mask"] + ], + "(method 10 level)": [ + [[214, 217], "v1", "symbol"], + [[216, 220], "a0", "texture-anim-array"], + [137, "s5", "(function level object)"], + [[349, 358], "a1", "type"] + ], + "(method 30 level-group)": [[87, "v0", "level"]], + "(method 10 load-state)": [ + [461, "v1", "level"], + [468, "v1", "level"] + ], + "update-sound-banks": [[131, "a0", "pair"]], + "borrow-city-expansion": [ + [23, "a0", "basic"], + [52, "s5", "basic"] + ], + "find-instance-by-name-level": [ + [11, "v1", "drawable-tree-instance-shrub"], + [38, "v1", "drawable-tree-instance-tie"] + ], + "dma-add-process-drawable": [ + [42, "a0", "foreground-work"], + [45, "a0", "foreground-work"], + [78, "a0", "foreground-work"], + [198, "t0", "(pointer int128)"] + ], + "calc-shadow-masks": [[10, "v0", "(array float)"]], + "dma-add-process-drawable-hud": [ + [[43, 59], "v1", "level"], + [11, "a0", "foreground-work"] + ], + "default-init-buffer": [[[116, 126], "a1", "dma-packet"]], + "default-end-buffer": [ + [[117, 123], "a1", "dma-packet"], + [125, "a1", "(pointer uint32)"] + ], + "display-frame-start": [ + [4, "v1", "vif-bank"], + [9, "a0", "vif-bank"] + ], + "display-frame-finish": [ + [[504, 513], "a0", "dma-packet"], + [542, "a0", "(pointer uint64)"] + ], + "(method 15 drawable-tree)": [ + [[1, 4], "v1", "drawable-inline-array-node"], + [[29, 34], "t0", "drawable-inline-array-node"], + [[28, 32], "t2", "drawable-inline-array-node"], + [[42, 46], "t2", "(pointer int8)"] + ], + "get-shadow-by-name": [[7, "v1", "process-drawable"]], + "set-shadow-by-name": [[7, "v1", "process-drawable"]], + "find-instance-by-index": [ + [26, "t1", "drawable-tree-instance-shrub"], + [40, "t1", "drawable-tree-instance-tie"] + ], + "print-prototype-list": [ + [25, "v1", "drawable-tree-instance-shrub"], + [104, "v1", "drawable-tree-instance-tie"] + ], + "draw-instance-info": [ + [[188, 203], "s5", "prototype-bucket-shrub"], + [[192, 303], "s1", "prototype-shrubbery"], + [[359, 400], "v1", "prototype-tie"], + [[44, 64], "s1", "drawable-inline-array-instance-tie"], + [[331, 450], "s5", "prototype-bucket-tie"], + [[35, 41], "v1", "drawable-tree-instance-tie"] + ], + "set-graphics-mode": [[[0, 100], "gp", "gs-bank"]], + "(method 9 screen-filter)": [[[118, 128], "t1", "rgba"]], + "display-loop-main": [[231, "t9", "(function none)"]], + "effect-param->sound-spec": [[178, "v1", "collide-shape-moving"]], + "(method 10 effect-control)": [ + [149, "v1", "collide-shape-moving"], + [427, "s3", "death-info"], + [433, "s3", "death-info"], + [435, "s3", "death-info"], + [470, "s3", "death-info"], + [476, "s3", "death-info"], + [478, "s3", "death-info"], + [483, "s3", "death-info"], + [487, "s3", "death-info"], + [507, "s3", "death-info"], + [25, "v0", "string"], + [48, "v0", "pair"] + ], + "(method 12 effect-control)": [ + [99, "gp", "(pointer int8)"], + ["_stack_", 112, "res-tag"] + ], + "process-drawable-draw-subtitles": [[26, "v0", "(array subtitle-range)"]], + "(method 25 scene-player)": [ + [102, "s1", "process-drawable"], + [163, "s1", "process-drawable"], + [166, "s1", "process-drawable"], + [169, "s1", "process-drawable"], + [172, "s1", "process-drawable"] + ], + "(method 9 scene-actor)": [ + [179, "s3", "skeleton-group"], + [286, "a0", "process-drawable"], + [290, "v1", "process-drawable"], + [294, "a0", "process-drawable"], + [370, "a0", "process-drawable"], + [549, "v1", "manipy"], + [557, "v1", "manipy"], + [563, "v1", "manipy"], + [578, "v1", "manipy"], + [584, "v1", "manipy"], + [528, "a0", "process-drawable"], + [536, "v1", "process-drawable"], + [543, "a0", "process-drawable"], + [751, "a0", "process-drawable"], + [755, "v1", "process-drawable"], + [759, "a0", "process-drawable"] + ], + "(post play-anim scene-player)": [ + [210, "s4", "process-drawable"], + [261, "s4", "process-drawable"], + [324, "s5", "process-drawable"], + [707, "v0", "sound-rpc-set-param"], + [586, "v0", "sound-rpc-set-param"] + ], + "(trans play-anim scene-player)": [ + [71, "v1", "process-drawable"], + [78, "v1", "process-drawable"] + ], + "(event play-anim scene-player)": [ + [11, "t9", "(function scene-player none)"] + ], + "(code othercam-running)": [ + [14, "s2", "process-drawable"], + [18, "s2", "process-drawable"], + [24, "s2", "process-drawable"], + [38, "s2", "process-drawable"], + [47, "s2", "process-drawable"], + [64, "s2", "process-drawable"] + ], + "(enter othercam-running)": [ + [56, "gp", "process-drawable"], + [59, "gp", "process-drawable"] + ], + "(event othercam-running)": [ + [17, "v1", "process-drawable"], + [24, "v0", "joint"], + [41, "a0", "process"] + ], + "(anon-function 7 pov-camera)": [ + [9, "v1", "float"], + [16, "v1", "float"] + ], + "target-powerup-process": [[358, "v0", "sound-rpc-set-param"]], + "cloud-track": [ + [[19, 83], "s1", "handle"], + [[29, 116], "s2", "handle"] + ], + "(method 22 com-airlock)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + [104, "v0", "(pointer float)"], + [143, "v0", "(pointer float)"], + [46, "v0", "airlock-options"], + [193, "v0", "pair"] + ], + "airlock-command-lookup": [ + [5, "s4", "pair"], + [15, "s4", "pair"], + [16, "v1", "pair"], + [21, "s5", "pair"], + [20, "s5", "pair"] + ], + "(anon-function 7 airlock)": [[14, "v0", "pair"]], + "(code open com-airlock)": [ + [123, "v0", "sound-rpc-set-param"], + [232, "v0", "sound-rpc-set-param"], + [442, "v0", "sound-rpc-set-param"], + [462, "v0", "sound-rpc-set-param"] + ], + "(anon-function 12 airlock)": [[14, "v0", "pair"]], + "(method 25 com-airlock)": [[90, "v0", "pair"]], + "(method 27 com-airlock)": [[108, "v0", "sound-rpc-set-param"]], + "(exit close com-airlock)": [ + [10, "v0", "sound-rpc-set-param"], + [30, "v0", "sound-rpc-set-param"] + ], + "(trans close com-airlock)": [[58, "v0", "sound-rpc-set-param"]], + "(code close com-airlock)": [ + [196, "v0", "sound-rpc-set-param"], + [303, "v0", "sound-rpc-set-param"], + [394, "v0", "sound-rpc-set-param"] + ], + "(method 26 water-anim)": [ + [52, "v0", "(pointer float)"], + ["_stack_", 16, "res-tag"] + ], + "(method 28 water-anim)": [ + [27, "v0", "vector"], + ["_stack_", 16, "res-tag"] + ], + "water-anim-event-handler": [ + [50, "s5", "water-info"], + [96, "gp", "process-focusable"], + [146, "gp", "process-focusable"], + [200, "s5", "water-info"], + [23, "v1", "float"] + ], + "(event idle blocking-plane)": [[113, "gp", "process-drawable"]], + "(method 15 proc-focusable-spawner)": [[26, "a0", "process-focusable"]], + "(method 10 idle-control)": [ + [35, "v1", "pair"], + [79, "v1", "art-joint-anim"] + ], + "(method 55 enemy)": [ + [27, "a0", "process-focusable"], + [30, "a0", "process-focusable"] + ], + "(method 59 enemy)": [ + [57, "a0", "process-focusable"], + [60, "a0", "process-focusable"] + ], + "(method 62 enemy)": [ + [2, "v1", "attack-info"], + [5, "v1", "attack-info"] + ], + "enemy-setup-gem": [[46, "v1", "float"]], + "(method 119 enemy)": [ + ["_stack_", 16, "res-tag"], + [135, "v0", "(pointer actor-group)"] + ], + "(method 113 enemy)": [[17, "v0", "process-focusable"]], + "(method 106 enemy)": [ + [16, "v1", "connection"], + [17, "v1", "collide-shape"], + [21, "v1", "collide-shape"], + [33, "a1", "process-focusable"], + [65, "v1", "connection"], + [66, "v1", "collide-shape"], + [70, "v1", "collide-shape"], + [82, "a1", "process-focusable"], + [112, "v1", "connection"], + [113, "v1", "collide-shape"], + [117, "v1", "collide-shape"], + [129, "a1", "process-focusable"], + [44, "a1", "process-focusable"], + [93, "a1", "process-focusable"], + [140, "a1", "process-focusable"] + ], + "(method 140 enemy)": [[18, "a1", "process-focusable"]], + "get-penetrate-using-from-attack-event": [ + [2, "v1", "attack-info"], + [5, "v1", "attack-info"], + [25, "v1", "collide-shape"] + ], + "(method 83 enemy)": [ + [21, "s3", "process-focusable"], + [67, "s3", "process-drawable"], + [68, "a1", "collide-shape"] + ], + "(method 82 enemy)": [ + [80, "v1", "process-drawable"], + [122, "v1", "attack-info"], + [170, "s2", "attack-info"], + [266, "s2", "attack-info"], + [286, "s4", "rigid-body-impact"], + [373, "s4", "rigid-body-impact"], + [787, "a0", "vector"], + [349, "s4", "rigid-body-impact"] + ], + "(method 147 enemy)": [[34, "a1", "process-focusable"]], + "(method 98 enemy)": [[28, "a1", "art-joint-anim"]], + "(method 96 enemy)": [[52, "s5", "art-joint-anim"]], + "(method 97 enemy)": [[28, "a1", "art-joint-anim"]], + "(method 85 enemy)": [[17, "a1", "art-joint-anim"]], + "(method 86 enemy)": [[11, "v1", "art-joint-anim"]], + "(method 124 enemy)": [ + [13, "s5", "ragdoll-proc"], + [21, "s5", "ragdoll-proc"], + [24, "s5", "ragdoll-proc"] + ], + "(method 125 enemy)": [ + [14, "s5", "ragdoll-proc"], + [42, "s5", "ragdoll-proc"], + [60, "s5", "ragdoll-proc"] + ], + "(method 126 enemy)": [ + [100, "s2", "ragdoll-proc"], + [102, "s2", "ragdoll-proc"], + [105, "s2", "ragdoll-proc"], + [115, "s2", "ragdoll-proc"], + [133, "s2", "ragdoll-proc"], + [152, "s2", "ragdoll-proc"], + [124, "s2", "ragdoll-proc"] + ], + "(method 105 enemy)": [ + [16, "a0", "process-focusable"], + [19, "a0", "process-focusable"] + ], + "(method 11 enemy)": [[12, "v0", "symbol"]], + "(code notice enemy)": [[31, "v1", "art-joint-anim"]], + "(code stare enemy)": [[23, "gp", "art-joint-anim"]], + "(code victory enemy)": [[30, "v1", "art-joint-anim"]], + "(code die enemy)": [[71, "v1", "art-joint-anim"]], + "(code die-falling enemy)": [[78, "gp", "art-joint-anim"]], + "(code view-anims enemy)": [[20, "s4", "art-joint-anim"]], + "(event gun-dark-2-stretch enemy)": [ + [8, "s5", "attack-info"], + [32, "s5", "attack-info"], + [71, "s5", "attack-info"] + ], + "(code knocked-recover enemy)": [ + [34, "v1", "art-joint-anim"], + [67, "v1", "ragdoll-proc"] + ], + "(method 114 enemy)": [ + [39, "s4", "touching-shapes-entry"], + [29, "s4", "touching-shapes-entry"], + [15, "s4", "touching-shapes-entry"], + [22, "s4", "touching-shapes-entry"], + [50, "s4", "touching-shapes-entry"], + [4, "s4", "touching-shapes-entry"], + [3, "s4", "touching-shapes-entry"] + ], + "gun-dark-2-ragdoll-start": [ + [72, "s4", "ragdoll-proc"], + [74, "s4", "ragdoll-proc"], + [77, "s4", "ragdoll-proc"], + [87, "s4", "ragdoll-proc"], + [104, "s4", "ragdoll-proc"], + [96, "s4", "ragdoll-proc"] + ], + "gun-dark-2-anim-code": [ + [127, "gp", "art-joint-anim"], + [30, "v1", "float"], + [53, "v1", "float"], + [154, "v1", "float"] + ], + "(trans gun-dark-2-stretch enemy)": [ + [136, "v1", "collide-shape-prim-sphere"], + [147, "a0", "process-focusable"], + [153, "v1", "process-focusable"], + [27, "v1", "float"] + ], + "(code hit enemy)": [[30, "v1", "art-joint-anim"]], + "(code flee enemy)": [[22, "v1", "art-joint-anim"]], + "(method 143 enemy)": [[81, "s5", "gem"]], + "(method 141 enemy)": [[44, "t1", "int"]], + "(method 56 enemy)": [ + [269, "v1", "float"], + [268, "v0", "float"] + ], + "(code debug-control nav-enemy)": [[28, "v1", "art-joint-anim"]], + "(event idle drop-plat)": [ + [23, "a0", "process-focusable"], + [55, "a0", "process-focusable"], + [58, "a0", "process-focusable"] + ], + "(event idle bouncer)": [ + [110, "v1", "attack-info"], + [116, "v1", "attack-info"] + ], + "(method 11 elevator)": [ + [35, "v1", "collide-shape-prim-group"], + ["_stack_", 32, "float"] + ], + "(method 48 elevator)": [["_stack_", 16, "float"]], + "teleport-check": [["_stack_", 16, "float"]], + "elevator-event": [ + [23, "v1", "focus"], + [361, "v1", "float"], + [133, "v1", "float"], + [89, "v1", "float"] + ], + "(method 51 elevator)": [[10, "v1", "collide-shape-prim-group"]], + "(method 63 collide-shape-moving)": [ + [298, "a0", "process-focusable"], + [300, "a0", "process-focusable"] + ], + "(method 14 rigid-body-control)": [[18, "v1", "vector"]], + "transform-rigid-body-prims": [[4, "v1", "collide-shape-prim-group"]], + "(method 67 collide-shape-moving)": [ + [8, "v1", "collide-shape-prim-group"], + [[30, 56], "s1", "collide-cache-prim"] + ], + "(method 49 rigid-body-object)": [ + [45, "s4", "process-focusable"], + [82, "s4", "process-drawable"], + [87, "s3", "attack-info"], + [89, "s3", "attack-info"], + [96, "s3", "attack-info"], + [115, "s4", "process-focusable"], + [129, "s5", "attack-info"], + [148, "v1", "focus"], + [172, "a0", "process-focusable"], + [183, "a0", "process-focusable"], + [191, "a0", "process-focusable"], + [193, "a0", "process-focusable"], + [230, "s4", "process-focusable"], + [237, "v1", "float"], + [241, "s4", "process-focusable"], + [243, "s4", "process-focusable"] + ], + "(method 47 rigid-body-object)": [ + [18, "v1", "float"], + [52, "v1", "float"], + [26, "v1", "float"] + ], + "(method 10 rigid-body-queue)": [ + [134, "a0", "process-focusable"], + [146, "a0", "rigid-body-object"], + [148, "a0", "rigid-body-object"], + [51, "s3", "process-focusable"], + [72, "s3", "rigid-body-object"], + [20, "a0", "process-focusable"] + ], + "scene-player-init": [ + [[37, 44], "s5", "(array scene)"], + [83, "v0", "(array scene)"] + ], + "(method 34 process-taskable)": [ + [58, "v0", "joint"], + [68, "v1", "collide-shape-prim-group"] + ], + "(code active process-taskable)": [ + [37, "gp", "handle"], + [72, "gp", "handle"] + ], + "(code target-warp-in)": [ + [340, "v1", "art-joint-anim"], + [13, "v0", "string"], + [128, "gp", "process"] + ], + "(post idle air-train)": [[4, "t9", "(function none)"]], + "(method 28 metalhead-shot)": [ + [29, "s5", "process-drawable"], + [32, "s5", "process-drawable"], + [10, "v0", "sound-rpc-set-param"] + ], + "(event impact metalhead-grenade-shot)": [[11, "s4", "process-focusable"]], + "(method 9 los-control)": [ + [85, "s1", "process-focusable"], + [96, "s2", "process-focusable"], + [109, "s1", "process-focusable"] + ], + "(method 0 joint-exploder-tuning)": [ + [[7, 82], "v0", "joint-exploder-tuning"] + ], + "joint-exploder-joint-callback": [ + [3, "s4", "joint-exploder"], + [24, "s4", "joint-exploder"] + ], + "(method 28 joint-exploder)": [[222, "s4", "joint-exploder-list"]], + "(enter freefall ragdoll-test)": [ + [15, "a0", "ragdoll-proc"], + [20, "a0", "ragdoll-proc"] + ], + "(trans freefall-reform ragdoll-test)": [ + [23, "gp", "ragdoll-proc"], + [29, "gp", "ragdoll-proc"] + ], + "(trans idle ragdoll-test)": [ + [55, "v1", "ragdoll-proc"], + [57, "v1", "ragdoll-proc"] + ], + "(trans freefall ragdoll-test)": [ + [32, "a0", "ragdoll-proc"], + [35, "a0", "ragdoll-proc"] + ], + "(exit freefall ragdoll-test)": [ + [12, "a0", "ragdoll-proc"], + [15, "a0", "ragdoll-proc"] + ], + "(exit tweak ragdoll-test)": [ + [12, "a0", "ragdoll-proc"], + [15, "a0", "ragdoll-proc"] + ], + "(enter tweak ragdoll-test)": [ + [15, "a0", "ragdoll-proc"], + [20, "a0", "ragdoll-proc"] + ], + "(trans reform ragdoll-test)": [ + [25, "gp", "ragdoll-proc"], + [31, "gp", "ragdoll-proc"], + [37, "gp", "ragdoll-proc"] + ], + "(trans tweak ragdoll-test)": [ + [34, "gp", "ragdoll-proc"], + [48, "gp", "ragdoll-proc"], + [40, "gp", "ragdoll-proc"], + [43, "gp", "ragdoll-proc"], + [46, "gp", "ragdoll-proc"], + [51, "gp", "ragdoll-proc"] + ], + "(method 0 debris-tuning)": [[[7, 84], "v0", "debris-tuning"]], + "(method 38 shield-sphere)": [[71, "v1", "rigid-body-impact"]], + "(code distort shield-sphere-distort)": [[14, "v1", "art-joint-anim"]], + "(trans distort shield-sphere-distort)": [ + [14, "v1", "process-drawable"], + [21, "v1", "process-drawable"] + ], + "(method 39 shield-sphere)": [ + [2, "v1", "attack-info"], + [5, "v1", "attack-info"] + ], + "(method 41 shield-sphere)": [ + [16, "v1", "attack-info"], + [27, "v1", "attack-info"] + ], + "(method 33 shield-sphere)": [ + [44, "s5", "process-focusable"], + [51, "s5", "process-focusable"] + ], + "(event time-of-day-tick)": [ + [9, "v1", "float"], + [203, "v1", "float"] + ], + "gun-yellow-deflect-reaction": [ + [33, "a0", "collide-shape-prim"], + [46, "v1", "collide-shape-prim"], + [52, "v1", "collide-shape-prim"], + [62, "s2", "gun-yellow-shot-2"], + [58, "v1", "gun-yellow-shot-2"], + [68, "s2", "gun-yellow-shot-2"], + [[9, 66], "s3", "handle"] + ], + "gun-yellow-shot-do-deflect": [ + [134, "s1", "process-focusable"], + [178, "s1", "process-focusable"], + ["_stack_", 136, "handle"], + ["_stack_", 1716, "float"], + ["_stack_", 1748, "float"] + ], + "gun-fire-yellow-1": [[33, "v0", "process"]], + "gun-fire-yellow-2": [[33, "v0", "process"]], + "gun-fire-yellow-3": [[140, "v0", "process"]], + "(method 35 gun-yellow-3-saucer)": [ + [[17, 22], "v1", "gun-yellow-3-event-msg"] + ], + "(code impact-explode gun-yellow-3-saucer)": [[34, "a0", "process"]], + "(method 36 gun-yellow-shot-2)": [[66, "s4", "touching-shapes-entry"]], + "(method 52 gun-yellow-3-saucer)": [ + [471, "a0", "process-focusable"], + [474, "a0", "process-focusable"], + [122, "s3", "process-focusable"], + [146, "s3", "process-focusable"], + ["_stack_", 1088, "float"], + ["_stack_", 3808, "float"] + ], + "(method 53 gun-yellow-3-saucer)": [[88, "v0", "process"]], + "red-2-ring-event-handler": [ + [6, "v1", "vector"], + [12, "v1", "float"] + ], + "(code active red-3-sphere)": [ + [14, "v1", "art-joint-anim"], + [66, "v1", "art-joint-anim"] + ], + "(code impact-tiny gun-red-3-grenade)": [[32, "a0", "process"]], + "(method 45 gun-red-3-grenade)": [ + [59, "a0", "process-focusable"], + [63, "a0", "process-focusable"], + [82, "a0", "process-focusable"], + [85, "a0", "process-focusable"], + ["_stack_", 1688, "float"], + ["_stack_", 1692, "float"], + ["_stack_", 1752, "float"], + ["_stack_", 1756, "float"] + ], + "(method 47 gun-red-3-grenade)": [ + [53, "s1", "process-focusable"], + [63, "s1", "process-focusable"], + [76, "s1", "process-focusable"] + ], + "(method 17 gun-red-2-shockwave)": [ + [43, "s3", "process-focusable"], + [93, "s3", "process-focusable"], + [122, "s3", "process-focusable"], + ["_stack_", 32, "vector"] + ], + "gun-fire-red-3": [ + [216, "s1", "process-focusable"], + [246, "s1", "process-focusable"], + [436, "gp", "process-focusable"], + [440, "a0", "process-focusable"], + ["_stack_", 28, "float"], + [168, "gp", "process-focusable"], + [314, "s1", "process-focusable"] + ], + "gun-fire-red-1": [ + [147, "v1", "manipy"], + [191, "v1", "manipy"], + [194, "v1", "manipy"], + [197, "v1", "manipy"] + ], + "(method 23 gun-red-shot)": [[10, "s4", "process-focusable"]], + "(method 26 gun-red-shot)": [ + [43, "a0", "connection"], + [44, "a0", "collide-shape"], + [92, "a0", "connection"], + [93, "a0", "collide-shape"] + ], + "(trans charging gun-red-2-shockwave)": [[6, "a1", "process-drawable"]], + "gun-fire-dark-1": [[38, "v0", "process"]], + "(event active gun-dark-3-sphere)": [ + [[3, 35], "v1", "gun-dark-3-sphere-init-params"] + ], + "gun-fire-dark-3": [[64, "v0", "process"]], + "(exit startup gun-dark-shot)": [[20, "v0", "sound-rpc-set-param"]], + "(code startup gun-dark-shot)": [[88, "a1", "process-focusable"]], + "(enter moving gun-dark-shot)": [[22, "a1", "process-focusable"]], + "(trans moving gun-dark-shot)": [ + [27, "s2", "process-focusable"], + [39, "a0", "process-focusable"], + [42, "a0", "process-focusable"] + ], + "(enter impact gun-dark-shot)": [ + [245, "s1", "process-focusable"], + [256, "s1", "process-focusable"], + [262, "s1", "process-focusable"], + [201, "v0", "(array float)"] + ], + "(method 20 gravity-spinner)": [ + [19, "s5", "process-focusable"], + [63, "s5", "process-focusable"] + ], + "(method 21 gravity-spinner)": [ + [19, "s5", "process-focusable"], + [26, "s5", "process-focusable"] + ], + "(anon-function 34 gun-dark-shot)": [ + [134, "s5", "process-focusable"], + [137, "s5", "process-focusable"], + [141, "s5", "process-focusable"], + [144, "s5", "process-focusable"], + [162, "s5", "process-focusable"], + [167, "s5", "process-focusable"], + [170, "s5", "process-focusable"] + ], + "gravity-spinner-init-by-other": [ + [33, "gp", "process-focusable"], + [39, "gp", "process-focusable"], + [47, "gp", "process-focusable"], + [54, "gp", "process-focusable"], + [69, "gp", "process-focusable"], + [73, "gp", "process-focusable"], + [77, "gp", "process-focusable"], + [94, "gp", "process-focusable"], + [100, "gp", "process-focusable"], + [113, "gp", "process-focusable"], + [144, "v1", "float"], + [182, "v1", "float"] + ], + "(code zero-g gravity-spinner)": [ + [71, "gp", "process-focusable"], + [100, "gp", "process-focusable"], + [104, "gp", "process-focusable"], + [137, "gp", "process-focusable"], + [144, "gp", "process-focusable"], + [165, "gp", "process-focusable"], + [174, "v1", "collide-shape-moving"], + [262, "gp", "process-focusable"], + [270, "gp", "process-focusable"], + [285, "gp", "process-focusable"], + [176, "v1", "collide-shape-moving"] + ], + "(enter zero-g gravity-spinner)": [[17, "v1", "float"]], + "(event zero-g gravity-spinner)": [ + [105, "a0", "attack-info"], + [109, "v1", "attack-info"], + [168, "s4", "process-drawable"], + [170, "s4", "process-drawable"], + [182, "s4", "process-drawable"], + [184, "s4", "process-drawable"], + [177, "s4", "process-drawable"], + ["_stack_", 36, "float"] + ], + "zero-g-wait-for-land": [ + [22, "s5", "process-focusable"], + [26, "s5", "process-focusable"], + [33, "s5", "process-focusable"], + [42, "s5", "process-focusable"], + [52, "s5", "process-focusable"], + [53, "a0", "collide-shape-moving"], + [61, "s5", "process-focusable"], + [72, "s5", "process-focusable"], + [84, "s5", "process-focusable"], + [99, "s5", "process-focusable"], + [108, "s5", "process-focusable"] + ], + "(enter zero-g-vehicle gravity-spinner)": [[17, "v1", "float"]], + "(enter launch-0 gun-dark-3-nuke)": [[15, "t9", "(function none)"]], + "(enter launch-1 gun-dark-3-nuke)": [[12, "t9", "(function none)"]], + "(enter launch-2 gun-dark-3-nuke)": [[18, "t9", "(function none)"]], + "(code impact-dud gun-dark-3-nuke)": [[39, "a0", "process"]], + "(method 54 gun-dark-3-nuke)": [[47, "s1", "process-focusable"]], + "(method 22 gravity-spinner)": [ + [18, "s3", "process-focusable"], + [24, "s3", "process-focusable"], + [29, "s3", "process-focusable"] + ], + "(method 23 gravity-spinner)": [ + [25, "gp", "process-focusable"], + [29, "gp", "process-focusable"], + [35, "gp", "process-focusable"], + [44, "gp", "process-focusable"] + ], + "(method 19 gravity-spinner)": [ + [40, "s5", "process-focusable"], + [68, "s5", "process-focusable"], + [377, "s5", "process-focusable"], + [435, "s5", "process-focusable"], + [113, "a0", "process-focusable"], + [124, "a0", "process-focusable"], + [131, "a0", "process-focusable"], + [134, "a0", "process-focusable"], + [200, "s5", "process-focusable"], + ["_stack_", 148, "process"], + ["_stack_", 156, "float"], + ["_stack_", 160, "float"], + ["_stack_", 172, "float"], + ["_stack_", 1736, "float"], + ["_stack_", 2312, "float"] + ], + "(method 16 gravity-spinner)": [ + [22, "s4", "process-focusable"], + [43, "s4", "process-focusable"] + ], + "(method 17 gravity-spinner)": [ + [101, "s4", "process-focusable"], + [127, "s4", "process-focusable"], + [149, "s4", "process-focusable"] + ], + "(method 24 gravity-spinner)": [ + [19, "s5", "process-focusable"], + [26, "s5", "process-focusable"], + [42, "s5", "process-focusable"], + [47, "s5", "process-focusable"], + [52, "s5", "process-focusable"], + [55, "s5", "process-focusable"], + [66, "s5", "process-focusable"], + [59, "s5", "process-focusable"], + [61, "s5", "process-focusable"] + ], + "(trans expand gun-gravity)": [ + [116, "v1", "float"], + [149, "v1", "float"] + ], + "(method 22 gun-gravity)": [ + [14, "v0", "process"], + [35, "v1", "gravity-ring"], + [36, "v1", "gravity-ring"], + [[51, 53], "v1", "gravity-ring"], + [101, "s1", "process-focusable"], + [113, "s1", "process-focusable"] + ], + "process-drawable-shock-effect-bullseye": [[85, "a0", "lightning-tracker"]], + "(method 14 level-group)": [ + [62, "a0", "entity-actor"], + [66, "a0", "entity-actor"] + ], + "(method 23 level-group)": [[28, "v0", "(inline-array vector)"]], + "expand-bounding-box-from-nav-meshes": [["_stack_", 16, "res-tag"]], + "expand-vis-box-with-point": [[10, "v0", "(inline-array vector)"]], + "(method 25 level-group)": [ + [24, "s3", "entity-actor"], + [112, "s3", "entity-actor"], + [120, "s3", "entity-actor"], + [143, "v0", "string"], + [56, "v0", "string"], + [99, "v0", "(inline-array vector)"] + ], + "process-drawable-scale-from-entity!": [[11, "v0", "vector"]], + "reset-actors": [ + [174, "t9", "(function level none)"], + [162, "v0", "(function level none)"] + ], + "process-status-bits": [[8, "s5", "process-drawable"]], + "(method 24 level-group)": [ + [127, "v0", "(pointer actor-group)"], + [28, "v0", "(inline-array vector)"], + ["_stack_", 28, "float"], + ["_stack_", 32, "float"], + ["_stack_", 48, "res-tag"] + ], + "(method 15 level-group)": [ + [262, "s0", "process-drawable"], + [268, "s0", "process-drawable"], + [275, "s0", "process-drawable"], + [277, "s0", "process-drawable"], + [308, "s4", "process-drawable"], + [663, "a0", "drawable-region-prim"], + [666, "a0", "drawable-region-prim"], + [726, "a0", "drawable-region-prim"], + [729, "a0", "drawable-region-prim"] + ], + "check-for-rougue-process": [ + [133, "gp", "part-tracker"], + [157, "gp", "part-spawner"], + [184, "v1", "process-drawable"], + [187, "v1", "process-drawable"], + [192, "v1", "process-drawable"], + [199, "v1", "process-drawable"], + [209, "v1", "process-drawable"], + [212, "v1", "process-drawable"], + [217, "v1", "process-drawable"], + [224, "v1", "process-drawable"] + ], + "draw-actor-marks": [ + [20, "gp", "process-drawable"], + [29, "gp", "process-drawable"], + [33, "gp", "process-drawable"], + [40, "gp", "process-drawable"], + [45, "gp", "process-drawable"], + [47, "gp", "process-drawable"], + [52, "gp", "process-drawable"], + [54, "gp", "process-drawable"], + [59, "gp", "process-drawable"], + [67, "gp", "process-drawable"], + [69, "gp", "process-drawable"], + [78, "gp", "process-drawable"], + [106, "gp", "process-drawable"], + [105, "v0", "string"], + [131, "v0", "(pointer int32)"], + [155, "gp", "process-drawable"], + [174, "v0", "string"], + [187, "gp", "process-drawable"], + [271, "gp", "process-drawable"], + [250, "gp", "process-drawable"], + [208, "v0", "(inline-array vector)"], + [120, "a2", "string"] + ], + "(anon-function 57 entity)": [ + [6, "gp", "process-drawable"], + [8, "gp", "process-drawable"], + [13, "gp", "process-drawable"], + [15, "gp", "process-drawable"] + ], + "draw-subtitle-image": [ + [[163, 194], "v1", "(pointer uint128)"], + [[195, 199], "t0", "vector4w"], + [[199, 206], "t0", "vector4w"], + [[206, 213], "a2", "vector4w"], + [[214, 220], "v1", "vector4w"], + [[223, 254], "v1", "(pointer uint128)"], + [[255, 266], "t0", "vector4w"], + [[266, 273], "a1", "vector4w"], + [[274, 280], "v1", "vector4w"] + ], + "darkjak-ball-move": [ + [52, "v1", "collide-shape-prim-group"], + [56, "a0", "collide-shape-prim-group"] + ], + "(code target-darkjak-get-on)": [[280, "v1", "art-joint-anim"]], + "(code target-darkjak-bomb0)": [ + ["_stack_", 16, "float"], + ["_stack_", 20, "float"], + [37, "v1", "art-joint-anim"], + [133, "v1", "art-joint-anim"], + [213, "v1", "art-joint-anim"], + [692, "v1", "process-drawable"], + [793, "v1", "manipy"] + ], + "darkjak-ball-slide-reaction": [[23, "v1", "darkjak-ball"]], + "(code target-darkjak-smack-charge)": [[95, "v1", "art-joint-anim"]], + "(exit target-darkjak-smack-charge)": [[61, "v0", "sound-rpc-set-param"]], + "(anon-function 21 target-darkjak)": [[62, "gp", "art-joint-anim"]], + "(code target-darkjak-running-attack)": [ + [258, "gp", "process-focusable"], + ["_stack_", 16, "float"], + ["_stack_", 20, "float"], + ["_stack_", 48, "float"], + ["_stack_", 56, "handle"], + [577, "v1", "art-joint-anim"], + [605, "v1", "art-joint-anim"], + [633, "v1", "art-joint-anim"], + [673, "v1", "art-joint-anim"], + [701, "v1", "art-joint-anim"], + [897, "v1", "art-joint-anim"] + ], + "(code target-darkjak-get-off)": [ + [174, "v1", "art-joint-anim"], + [332, "v1", "art-joint-anim"], + [424, "v1", "art-joint-anim"] + ], + "(anon-function 20 target-darkjak)": [ + [120, "v1", "art-joint-anim"], + [151, "v1", "art-joint-anim"] + ], + "(code target-darkjak-bomb1)": [ + [419, "v1", "art-joint-anim"], + ["_stack_", 160, "float"], + ["_stack_", 164, "float"] + ], + "target-bomb1-fire-shot": [[21, "s5", "process-focusable"]], + "(code target-darkjak-smack)": [ + [70, "gp", "art-joint-anim"], + [314, "v1", "art-joint-anim"], + [173, "f28", "float"], + [206, "f28", "float"], + [211, "f28", "float"], + [285, "f0", "float"] + ], + "(method 37 darkjak-ball)": [ + [72, "s0", "process-focusable"], + [81, "s0", "process-focusable"] + ], + "(method 9 lightning-bolt)": [[132, "v1", "float"]], + "(method 9 darkjak-info)": [[71, "v0", "sound-rpc-set-param"]], + "(event target-darkjak-bomb0)": [[51, "v1", "process"]], + "sparticle-track-hadouken": [[[1, 8], "a3", "darkjak-ball"]], + "gun-fire-blue-1": [[76, "v0", "process"]], + "(event inactive gun-blue-2-lightning-tracker)": [ + [4, "v1", "gun-blue-lightning-command"] + ], + "(event active gun-blue-2-lightning-tracker)": [ + [15, "v1", "gun-blue-lightning-command"] + ], + "cshape-reaction-blue-shot": [[15, "v1", "gun-blue-shot"]], + "(method 24 gun-blue-shot)": [[26, "v0", "vector"]], + "gun-fire-blue-2-old": [ + [182, "s3", "process-focusable"], + [261, "s5", "process-focusable"], + [265, "a0", "process-focusable"], + [419, "v0", "process"], + [264, "s5", "process-focusable"] + ], + "find-gun-blue-2-target-old": [[54, "s1", "process-focusable"]], + "find-gun-blue-2-target": [[49, "s2", "process-focusable"]], + "is-valid-blue-2-target": [ + [17, "v0", "process"], + [22, "s5", "process-focusable"] + ], + "(method 31 gun-blue-shot-3)": [[51, "v1", "float"]], + "gun-blue-shot-3-move": [ + [43, "a0", "process-focusable"], + [46, "a0", "process-focusable"] + ], + "gun-fire-blue-3": [ + [570, "a0", "process-focusable"], + [573, "a0", "process-focusable"], + [696, "s5", "process"], + [722, "v0", "process"], + [80, "s4", "process-focusable"], + [112, "s4", "process-focusable"], + [143, "s4", "process-focusable"], + [194, "s4", "process-focusable"], + ["_stack_", 1296, "float"], + [444, "v1", "float"], + [499, "v1", "float"], + [519, "v1", "float"], + [539, "v1", "float"], + [633, "v1", "float"], + [657, "v1", "float"] + ], + "(method 25 gun-blue-2-lightning-tracker)": [ + [183, "s2", "process-focusable"], + [358, "v0", "process"] + ], + "(method 26 gun-blue-2-lightning-tracker)": [[101, "v0", "process"]], + "(method 9 rope-constraint)": [["_stack_", 64, "vector"]], + "(top-level-login target-darkjak)": [ + [255, "a0", "(function none :behavior target)"], + [254, "a0", "(state target)"] + ], + "collide-list-fill-bg-using-line-sphere": [ + [261, "a0", "collide-hash-scratch"], + [[279, 285], "v1", "collide-hash-scratch"], + [[246, 251], "v1", "collide-hash-scratch"], + [293, "a0", "collide-hash-scratch"], + [102, "v1", "float"] + ], + "collide-list-fill-bg-using-box": [ + [223, "a0", "collide-hash-scratch"], + [255, "a0", "collide-hash-scratch"], + [208, "v1", "collide-hash-scratch"], + [210, "v1", "collide-hash-scratch"], + [212, "v1", "collide-hash-scratch"], + [241, "v1", "collide-hash-scratch"], + [243, "v1", "collide-hash-scratch"], + [246, "v1", "collide-hash-scratch"] + ], + "(method 8 collide-hash)": [ + [47, "a2", "collide-hash-scratch"], + [59, "a2", "collide-hash-scratch"], + [31, "a1", "collide-hash-scratch"], + [70, "a1", "collide-hash-scratch"], + [63, "a0", "int"], + [51, "a3", "int"] + ], + "(method 9 collide-mesh)": [ + [17, "s5", "collide-mesh-tri"], + [22, "s5", "collide-mesh-tri"], + [27, "s5", "collide-mesh-tri"], + [32, "s5", "collide-mesh-tri"], + [62, "s5", "collide-mesh-tri"] + ], + "(method 10 collide-mesh)": [[[13, 51], "s4", "collide-mesh-cache-tri"]], + "(method 13 collide-mesh)": [ + [21, "a3", "(inline-array vector)"], + [[22, 61], "a3", "vector"], + [[20, 61], "t0", "(inline-array vector)"], + [[76, 123], "v1", "collide-mesh-tri"] + ], + "(method 13 touching-list)": [[[0, 77], "v0", "touching-shapes-entry"]], + "(method 11 touching-list)": [ + [8, "s5", "touching-shapes-entry"], + [11, "s5", "touching-shapes-entry"], + [13, "s5", "touching-shapes-entry"], + [48, "s5", "touching-shapes-entry"], + [52, "s5", "touching-shapes-entry"], + [10, "s5", "touching-shapes-entry"], + [33, "s5", "touching-shapes-entry"], + [50, "s5", "touching-shapes-entry"] + ], + "(method 10 touching-list)": [[[5, 11], "s5", "touching-shapes-entry"]], + "(method 12 touching-list)": [ + [4, "gp", "touching-shapes-entry"], + [6, "gp", "touching-shapes-entry"], + [17, "gp", "touching-shapes-entry"], + [32, "gp", "touching-shapes-entry"], + [103, "gp", "touching-shapes-entry"] + ], + "(method 9 collide-edge-work)": [ + [[5, 47], "s4", "collide-edge-hold-item"], + [[6, 49], "s3", "collide-edge-edge"] + ], + "(method 9 collide-edge-edge)": [[20, "a0", "collide-shape-moving"]], + "(method 13 collide-edge-work)": [[[8, 119], "s1", "collide-edge-edge"]], + "(method 20 collide-edge-work)": [ + [100, "a0", "collide-shape-moving"], + [179, "v1", "int"], + [179, "a1", "int"] + ], + "collide-shape-draw-debug-marks": [ + [24, "v1", "connection"], + [[24, 41], "a0", "collide-shape"], + [56, "v1", "connection"], + [[56, 70], "a0", "collide-shape"], + [88, "v1", "connection"], + [[88, 104], "a0", "collide-shape"], + [71, "a0", "collide-shape"] + ], + "(method 50 collide-shape)": [ + [30, "gp", "process-drawable"], + [32, "a1", "collide-shape"], + [66, "gp", "process-focusable"], + [70, "gp", "process-focusable"], + [78, "gp", "process-focusable"], + [82, "gp", "process-focusable"], + [99, "gp", "process-focusable"] + ], + "(method 36 collide-shape)": [[[1, 40], "v1", "collide-shape-prim"]], + "(method 38 collide-shape)": [ + [[42, 80], "s5", "collide-shape-prim-mesh"], + [34, "v0", "(array collide-mesh)"] + ], + "(method 40 collide-shape)": [ + [30, "a0", "connection"], + [31, "a0", "collide-shape"], + [79, "a0", "connection"], + [80, "a0", "collide-shape-moving"], + [156, "s4", "(pointer uint64)"] + ], + "(method 45 collide-shape)": [ + [28, "a0", "connection"], + [29, "a0", "collide-shape"], + [79, "a0", "connection"], + [80, "a0", "collide-shape-moving"], + [[224, 235], "s1", "collide-shape-moving"] + ], + "(method 12 collide-shape-prim-sphere)": [ + [17, "gp", "collide-shape-prim-mesh"] + ], + "(method 13 collide-shape-prim)": [[[12, 43], "s4", "collide-shape-prim"]], + "(method 12 collide-shape-prim-group)": [ + [[12, 43], "s4", "collide-shape-prim"] + ], + "cshape-reaction-update-state": [["_stack_", 56, "collide-status"]], + "(method 17 collide-shape-prim-mesh)": [ + [[6, 11], "s2", "collide-shape-prim-group"] + ], + "(method 19 collide-shape-prim)": [[[3, 32], "s4", "collide-shape-prim"]], + "(method 18 collide-shape-prim-sphere)": [ + [79, "s4", "collide-shape-prim-mesh"] + ], + "(method 66 collide-shape-moving)": [[[29, 58], "s0", "collide-cache-prim"]], + "(method 56 collide-shape-moving)": [ + [73, "a0", "process-focusable"], + [176, "a0", "process-focusable"] + ], + "(method 18 collide-shape-prim-group)": [ + [[3, 32], "s4", "collide-shape-prim"] + ], + "(method 35 collide-shape)": [ + [27, "a0", "connection"], + [28, "a0", "collide-shape"], + [76, "a0", "connection"], + [77, "a0", "collide-shape"] + ], + "(method 44 collide-shape)": [[25, "a0", "process-drawable"]], + "(method 11 grid-hash)": [ + [[141, 147], "t6", "pointer"], + [128, "t1", "pointer"], + [149, "t4", "pointer"], + [152, "t1", "pointer"] + ], + "(method 9 actor-hash-buckets)": [ + [20, "a0", "connection"], + [22, "a0", "collide-shape"], + [121, "v1", "connection"], + [124, "s4", "collide-shape"], + [[16, 160], "s4", "collide-shape"], + [89, "a0", "collide-shape"] + ], + "(method 10 grid-hash)": [[12, "a0", "(pointer uint128)"]], + "(method 27 sphere-hash)": [[44, "s2", "(pointer int8)"]], + "(method 24 grid-hash)": [ + [78, "a0", "(pointer uint128)"], + [191, "a3", "(pointer int8)"], + [195, "a1", "(pointer uint8)"], + [237, "v1", "(pointer uint128)"] + ], + "col-rend-draw": [ + [[161, 217], "s5", "collide-cache-prim"], + [164, "v1", "collide-shape-prim-sphere"], + [[14, 152], "s3", "collide-cache-tri"], + [68, "a3", "int"], + [191, "a3", "int"] + ], + "(method 9 collide-cache)": [ + //[[28, 56], "gp", "collide-shape-prim"], + [33, "gp", "collide-cache-prim"], + [35, "gp", "collide-shape-prim"], + [[50, 56], "gp", "collide-cache-prim"], + [36, "v1", "collide-shape-prim-sphere"], + [[4, 26], "gp", "collide-cache-tri"] + ], + "(method 9 collide-mesh-cache)": [ + [[10, 83], "s4", "collide-mesh-cache-entry"], + [58, "a1", "int"] + ], + "command-get-float": [[20, "gp", "bfloat"]], + "command-get-int": [[17, "gp", "bfloat"]], + "(anon-function 2 memory-usage)": [[211, "v1", "collide-shape-moving"]], + "(method 8 process-tree)": [ + [33, "v1", "symbol"] + // [6, "a3", "symbol"] + ], + "(method 11 memory-usage-block)": [[112, "v1", "int"]], + "(method 14 draw-control)": [ + [38, "t9", "(function object object object none)"] + ], + "build-instance-list": [ + [33, "v1", "drawable-tree-instance-shrub"], + [85, "v1", "drawable-tree-instance-tie"] + ], + "debug-menu-make-continue-sub-menu": [ + [5, "v1", "symbol"], + [10, "v1", "level-load-info"], + [13, "v1", "level-load-info"], + [21, "v1", "continue-point"], + [47, "v1", "continue-point"], + [56, "v1", "continue-point"] + ], + "(anon-function 218 default-menu)": [ + [[2, 13], "v1", "texture-id"], + [[18, 29], "a1", "adgif-shader"], + [34, "v1", "texture-id"], + [[42, 44], "v1", "adgif-shader"] + ], + "(anon-function 219 default-menu)": [ + [[2, 13], "v1", "texture-id"], + [[18, 29], "a1", "adgif-shader"], + [34, "v1", "texture-id"], + [[42, 44], "v1", "adgif-shader"] + ], + "(anon-function 220 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 221 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 222 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 223 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 224 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 225 default-menu)": [ + [[2, 13], "v1", "texture-id"], + [[18, 29], "a1", "adgif-shader"], + [34, "v1", "texture-id"], + [[42, 44], "v1", "adgif-shader"] + ], + "(anon-function 226 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 227 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 228 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 229 default-menu)": [ + [[2, 13], "v1", "texture-id"], + [[18, 29], "a1", "adgif-shader"], + [34, "v1", "texture-id"], + [[42, 44], "v1", "adgif-shader"] + ], + "(anon-function 230 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 231 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 232 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 233 default-menu)": [ + [[2, 13], "v1", "texture-id"], + [[18, 29], "a1", "adgif-shader"], + [34, "v1", "texture-id"], + [[42, 44], "v1", "adgif-shader"] + ], + "(anon-function 234 default-menu)": [ + [[3, 13], "v1", "texture-id"], + [[20, 28], "a1", "adgif-shader"], + [33, "v1", "texture-id"], + [41, "v1", "adgif-shader"] + ], + "(anon-function 237 default-menu)": [ + [[30, 37], "s5", "adgif-shader"], + [[5, 25], "s4", "texture-id"] + ], + "dm-float-field-tie-vanish-far-func": [ + [25, "s2", "prototype-bucket-tie"], + [31, "s2", "prototype-bucket-tie"], + [28, "s2", "prototype-bucket-tie"], + [54, "s2", "prototype-bucket-tie"], + [55, "s2", "prototype-bucket-tie"] + ], + "dm-float-field-tie-rvanish-func": [[[25, 56], "s2", "prototype-bucket-tie"]], + "all-texture-tweak-adjust": [[[35, 44], "s0", "adgif-shader"]], + "dm-debug-actor-lod-dist": [ + [7, "v1", "process-drawable"], + [13, "v1", "process-drawable"], + [40, "v1", "process-drawable"], + [50, "v0", "(pointer float)"], + ["_stack_", 16, "res-tag"] + ], + "debug-create-cam-restore": [ + [232, "a0", "level"], + [235, "a0", "level"] + ], + "(anon-function 107 default-menu)": [[7, "v1", "target-flags"]], + "glst-length-of-longest-name": [[5, "s5", "glst-named-node"]], + "glst-find-node-by-name": [[6, "s5", "glst-named-node"]], + "(code target-gun-stance)": [ + [870, "v1", "art-joint-anim"], + [184, "v1", "art-joint-anim"], + [280, "v1", "art-joint-anim"], + [377, "v1", "art-joint-anim"], + [485, "v1", "art-joint-anim"], + [573, "v1", "art-joint-anim"], + [633, "v1", "art-joint-anim"], + [693, "v1", "art-joint-anim"] + ], + "execute-part-engine": [ + [11, "v1", "connection"], + [12, "a0", "process-drawable"], + [13, "v1", "connection"], + [[19, 53], "s0", "vector"], + [23, "v1", "connection"], + [28, "v1", "connection"], + [29, "v1", "int"], + [137, "a3", "vector"], + [35, "a0", "process-drawable"] + ], + "sparticle-track-root-prim": [[3, "v1", "collide-shape"]], + "sparticle-mode-animate": [ + [5, "v1", "(array symbol)"], + [[7, 16], "a1", "(array uint32)"], + [18, "a1", "vector4w"], + [21, "a1", "(pointer int32)"], + [26, "a1", "(array int32)"], + [28, "v1", "(array int32)"], + [32, "a0", "(pointer int64)"], + // [33, "a0", "(pointer int64)"], + [44, "v1", "(pointer int32)"], + [46, "v1", "(pointer int32)"] + ], + "birth-func-texture-group": [[[2, 12], "s5", "(array int32)"]], + "(method 10 sparticle-launcher)": [[[28, 72], "gp", "(array int32)"]], + "sparticle-texture-animate": [[[0, 48], "v1", "(array int32)"]], + "sparticle-respawn-timer": [[[4, 35], "gp", "(array int32)"]], + "sparticle-respawn-heights": [[[2, 59], "gp", "(array int32)"]], + "sparticle-texture-day-night": [[[2, 78], "s2", "(array int32)"]], + "execute-particle-local-space-engine": [ + [6, "v1", "connection"], + [9, "v1", "connection"], + [10, "v1", "connection"], + [11, "t9", "(function particle-local-space-info object)"], + [15, "s5", "connection"], + [[29, 34], "a1", "particle-local-space-info"] + ], + "birth-func-flip-based-on-scale": [ + [4, "v1", "int"], + [16, "v1", "int"] + ], + "forall-particles-runner": [ + [[19, 28], "s4", "sparticle-cpuinfo"], + [34, "s4", "pointer"], + [35, "s3", "pointer"] + ], + "(method 2 sparticle-cpuinfo)": [[14, "f0", "float"]], + "sp-orbiter": [[[78, 89], "v1", "sprite-vec-data-2d"]], + "forall-particles-with-key-runner": [ + [32, "s3", "(inline-array sparticle-cpuinfo)"], + [42, "s3", "(inline-array sparticle-cpuinfo)"] + ], + "sp-process-particle-system": [[14, "a1", "vector"]], + "(method 3 sparticle-launch-control)": [[40, "f0", "float"]], + "sp-kill-particle": [ + [7, "a1", "uint"], + [7, "v1", "uint"] + ], + "sp-relaunch-setup-fields": [ + ["_stack_", 80, "(inline-array sp-field-init-spec)"] + ], + "eco-track-root-prim-fadeout": [[3, "a0", "collide-shape"]], + "process-drawable-burn-effect": [ + [28, "a0", "process-drawable"], + [108, "v1", "process-drawable"], + [49, "a0", "process-drawable"], + [64, "a0", "process-drawable"] + ], + "birth-func-vector-orient": [[[6, 23], "s3", "sprite-vec-data-2d"]], + "process-drawable-shock-skel-effect": [ + [87, "v0", "(array cspace)"], + [248, "v1", "lightning-tracker"], + [250, "v1", "lightning-tracker"] + ], + "process-drawable2-shock-effect": [[94, "a0", "lightning-tracker"]], + "process-drawable-shock-effect": [ + [211, "a0", "lightning-tracker"], + [200, "v1", "lightning-tracker"] + ], + "process-drawable-shock-effect-replace": [ + [208, "a0", "lightning-tracker"], + [197, "v1", "lightning-tracker"] + ], + "board-zap-track": [[14, "v1", "process-drawable"]], + "(event active ladder)": [ + [21, "v1", "float"], + [43, "v1", "vector"] + ], + "(event idle ladder)": [ + [32, "s2", "process-focusable"], + [14, "a0", "process-focusable"], + [35, "s2", "process-focusable"] + ], + "(code target-ladder-stance)": [ + [180, "v1", "art-joint-anim"], + [80, "v1", "art-joint-anim"] + ], + "(code target-ladder-walk-down)": [ + [88, "v0", "float"], + [89, "v1", "float"] + ], + "(code target-ladder-switch)": [[16, "v1", "art-joint-anim"]], + "(code target-ladder-jump-off)": [[17, "v1", "art-joint-anim"]], + "(code target-ladder-slide-down)": [[73, "v1", "art-joint-anim"]], + "(exit target-ladder-slide-down)": [[2, "v0", "sound-rpc-set-param"]], + "(code target-ladder-walk-up)": [ + [123, "v0", "float"], + [124, "v1", "float"] + ], + "(trans target-ladder-walk-up)": [ + [45, "v0", "float"], + [119, "v0", "float"], + [[46, 56], "v1", "float"] + ], + "(post target-ladder-start)": [[28, "t9", "(function none)"]], + "(code target-ladder-start)": [ + [20, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"] + ], + "(post target-ladder-slide-down)": [ + [65, "t9", "(function none)"], + [3, "f0", "float"], + [34, "f0", "float"], + [51, "v0", "float"], + [52, "v1", "float"] + ], + "(trans target-ladder-walk-down)": [ + [45, "v0", "float"], + [[45, 56], "v1", "float"], + [118, "v0", "float"], + [119, "v1", "float"] + ], + "(post target-ladder)": [[41, "v0", "matrix"]], + "(trans target-ladder)": [[100, "v0", "float"]], + "region-prim-lookup-by-id": [[45, "t6", "drawable-region-prim"]], + "(method 18 drawable-tree-region-prim)": [ + [[22, 49], "s2", "drawable-region-prim"], + [5, "a0", "region-prim-area"] + ], + "(method 9 region)": [ + [[55, 60], "a0", "drawable-region-prim"], + [58, "v1", "region-prim-area"], + [4, "a0", "region-prim-area"], + [50, "v1", "drawable-region-prim"] + ], + "(method 17 drawable-tree-region-prim)": [ + [[23, 28], "a0", "drawable-region-prim"], + [4, "a0", "region-prim-area"] + ], + "command-get-trans": [ + [40, "v1", "process-drawable"], + [43, "v1", "process-drawable"], + [63, "s4", "process-drawable"], + [67, "s4", "process-drawable"], + [70, "s4", "process-drawable"], + [76, "v0", "joint"], + [78, "s4", "process-drawable"] + ], + "command-get-entity": [[10, "gp", "process"]], + "command-get-param": [[122, "gp", "bfloat"]], + "command-get-time": [[119, "gp", "bfloat"]], + "(anon-function 0 script)": [ + [48, "s0", "process-drawable"], + [53, "s0", "process-drawable"], + [55, "s0", "process-drawable"], + [61, "v0", "joint"], + [69, "s2", "process-drawable"], + [74, "s2", "process-drawable"], + [76, "s2", "process-drawable"], + [82, "v0", "joint"] + ], + "(anon-function 29 script)": [ + [12, "v1", "symbol"], + [10, "s4", "game-task-node-info"] + ], + "(anon-function 38 script)": [ + [16, "a0", "entity-actor"], + [20, "a0", "entity-actor"] + ], + "(anon-function 42 script)": [[5, "v1", "symbol"]], + "(anon-function 47 script)": [ + [44, "s4", "process-drawable"], + [48, "s4", "process-drawable"], + [53, "s4", "process-drawable"], + [59, "v0", "joint"], + [65, "s4", "process-drawable"], + [79, "s4", "process-drawable"], + [81, "s4", "process-drawable"], + [84, "s4", "process-drawable"], + [86, "s4", "process-drawable"], + [94, "gp", "(function process-drawable cspace none)"] + ], + "(anon-function 48 script)": [ + [94, "gp", "process-drawable"], + [101, "v0", "joint"], + [109, "gp", "process-drawable"], + [134, "s4", "process-drawable"], + [141, "v0", "joint"], + [149, "s4", "process-drawable"], + [169, "s4", "process-drawable"], + [163, "s4", "process-drawable"], + [123, "gp", "process-drawable"], + [129, "gp", "process-drawable"] + ], + "(anon-function 49 script)": [ + [131, "a0", "process-drawable"], + [137, "v1", "process-drawable"], + [140, "v1", "process-drawable"], + [146, "v0", "joint"], + [155, "a0", "process-drawable"], + [183, "a0", "process-drawable"], + [191, "a0", "process-drawable"], + [91, "s3", "drawable-region-prim"] + ], + "(anon-function 62 script)": [[24, "v0", "float"]], + "(anon-function 65 script)": [ + [10, "s4", "pair"], + [16, "s5", "entity-actor"], + [42, "s4", "pair"], + [43, "s4", "pair"] + ], + "(anon-function 66 script)": [ + [10, "gp", "pair"], + [55, "gp", "pair"], + [56, "gp", "pair"] + ], + "(anon-function 69 script)": [ + [14, "s5", "pair"], + [11, "s4", "process-focusable"], + [180, "s5", "pair"], + [181, "s5", "pair"] + ], + "(anon-function 70 script)": [[49, "v1", "process"]], + "(anon-function 71 script)": [[66, "v1", "process"]], + "(anon-function 15 script)": [ + [17, "v1", "pair"], + [30, "v1", "pair"], + [31, "v1", "pair"] + ], + "(anon-function 9 script)": [ + [35, "s5", "pair"], + [37, "a2", "symbol"], + [78, "v1", "process-drawable"], + [83, "a0", "process-drawable"], + [89, "v1", "process-drawable"], + [95, "v0", "joint"], + [67, "s5", "pair"], + [68, "s5", "pair"] + ], + "(anon-function 84 script)": [[21, "v1", "bfloat"]], + "(method 9 script-context)": [[138, "a0", "symbol"]], + "(anon-function 101 script)": [ + [3, "s5", "pair"], + [9, "s5", "pair"], + [10, "s5", "pair"] + ], + "(anon-function 97 script)": [ + [3, "s5", "pair"], + [13, "s5", "pair"], + [14, "s5", "pair"] + ], + "(anon-function 96 script)": [ + [3, "s5", "pair"], + [14, "s5", "pair"], + [15, "s5", "pair"] + ], + "(anon-function 95 script)": [ + [5, "s5", "pair"], + [11, "s5", "pair"], + [12, "s5", "pair"] + ], + "(anon-function 94 script)": [ + [5, "s5", "pair"], + [11, "s5", "pair"], + [12, "s5", "pair"] + ], + "(anon-function 93 script)": [ + [3, "s4", "pair"], + [6, "s3", "pair"], + [17, "s3", "pair"], + [18, "s4", "pair"], + [25, "s4", "pair"], + [26, "s4", "pair"], + [35, "s4", "pair"], + [36, "s4", "pair"] + ], + "(anon-function 92 script)": [ + [4, "s3", "pair"], + [7, "s2", "pair"], + [25, "s2", "pair"], + [26, "s4", "pair"], + [33, "s4", "pair"], + [34, "s4", "pair"], + [43, "s3", "pair"], + [44, "s3", "pair"] + ], + "(anon-function 89 script)": [[3, "t9", "(function none)"]], + "(anon-function 91 script)": [[4, "v1", "symbol"]], + "(method 10 script-context)": [[22, "s3", "symbol"]], + "command-get-process": [ + [37, "gp", "entity-actor"], + [83, "v1", "connection"], + [84, "a2", "game-task-node-info"], + [86, "v1", "connection"], + [104, "v1", "connection"], + [197, "s4", "process-drawable"], + [200, "s4", "process-drawable"], + [206, "s4", "process-drawable"], + [213, "s4", "process-drawable"], + [218, "s4", "process-drawable"] + ], + "(anon-function 7 relocate)": [ + [3, "a0", "int"], + [8, "a0", "int"] + ], + "(method 7 process)": [ + [[47, 88], "v1", "connection"], + [[120, 124], "a0", "basic"], + [[127, 130], "a0", "basic"] + ], + "(method 9 mood-control)": [[695, "v0", "sound-rpc-set-param"]], + "update-mood-pulse": [[[5, 45], "gp", "pulse-state"]], + "update-mood-electricity": [[[3, 19], "gp", "electricity-state"]], + "update-mood-florescent": [[[1, 48], "gp", "florescent-state"]], + "update-mood-flicker": [[[1, 58], "gp", "flicker-state"]], + "update-mood-light": [[[7, 175], "gp", "light-state"]], + "update-mood-flames": [[[5, 102], "gp", "flames-state"]], + "(method 23 mood-control)": [ + [121, "a1", "vector"], + [125, "a1", "vector"], + [129, "a1", "vector"], + [133, "a1", "vector"], + [137, "v1", "vector"], + [122, "a0", "vector"], + [126, "a0", "vector"], + [130, "a0", "vector"], + [134, "a0", "vector"], + [138, "a0", "vector"] + ], + "copy-mood-exterior": [ + [[16, 20], "a1", "mood-context"], + [30, "a0", "(inline-array vector)"], + [33, "a0", "(inline-array vector)"], + [31, "v1", "(inline-array vector)"], + [32, "v1", "(inline-array vector)"], + [[17, 19], "v1", "(inline-array vector)"] + ], + "copy-mood-exterior-ambi": [ + [[12, 17], "a2", "mood-context"], + [[13, 16], "v1", "mood-context"] + ], + "overide-mood-color": [ + [40, "a2", "(inline-array vector)"], + [44, "a0", "(inline-array vector)"], + [107, "a0", "mood-context"], + [[91, 107], "s3", "mood-context"] + ], + "(method 11 sky-work)": [[[7, 63], "s3", "mood-context"]], + "sky-make-sun-data": [[[7, 58], "s3", "sky-sun-data"]], + "update-mood-ctysluma": [[[23, 72], "s5", "ctysluma-states"]], + "sparticle-track-sun": [[148, "s4", "vector"]], + "foreground-draw-hud": [ + [26, "t2", "foreground-work"], + [36, "a1", "foreground-work"], + [79, "t2", "foreground-work"], + [[85, 102], "t2", "(pointer uint128)"], + [166, "a1", "int"], + [172, "a0", "foreground-work"], + [12, "t0", "foreground-work"], + [31, "t1", "foreground-work"], + [103, "t1", "vu-lights"], + [164, "a0", "(pointer uint128)"], + [90, "t1", "vu-lights"], + [[93, 99], "t1", "(pointer uint128)"], + [101, "t1", "(pointer uint128)"], + [[42, 49], "t6", "bone-calculation"], + [[0, 200], "at", "foreground-work"] + ], + "free-eye-index": [[30, "a2", "eye-control"]], + "update-eyes": [ + [23, "v1", "process-drawable"], + [29, "v1", "process-drawable"] + ], + "render-eyes-64": [ + [[77, 82], "v1", "dma-gif-packet"], + [[88, 93], "s0", "adgif-shader"], + [[132, 164], "v1", "(inline-array vector4w)"], + [[244, 274], "a1", "(inline-array vector4w)"], + [[284, 292], "v1", "dma-gif-packet"], + [[298, 303], "s0", "adgif-shader"], + [[376, 406], "a1", "(inline-array vector4w)"], + [[442, 450], "v1", "dma-gif-packet"], + [[456, 461], "s0", "adgif-shader"], + [[535, 562], "a1", "(inline-array vector4w)"], + [[575, 580], "v1", "dma-gif-packet"], + [[586, 591], "s0", "adgif-shader"], + [[664, 694], "a1", "(inline-array vector4w)"], + [[733, 738], "v1", "dma-gif-packet"], + [[744, 749], "s0", "adgif-shader"], + [[845, 874], "a1", "(inline-array vector4w)"], + [[887, 892], "v1", "dma-gif-packet"], + [[898, 903], "s0", "adgif-shader"], + [[1003, 1029], "a1", "(inline-array vector4w)"], + [180, "a0", "int"], + [188, "a1", "int"], + [310, "a0", "int"], + [318, "a1", "int"], + [468, "a0", "int"], + [476, "a1", "int"], + [598, "a0", "int"], + [606, "a1", "int"], + [756, "a0", "int"], + [764, "a1", "int"], + [910, "a0", "int"], + [918, "a1", "int"] + ], + "render-eyes-32": [ + [[77, 82], "v1", "dma-gif-packet"], + [[88, 93], "s0", "adgif-shader"], + [[132, 164], "v1", "(inline-array vector4w)"], + [[244, 274], "a1", "(inline-array vector4w)"], + [[287, 292], "v1", "dma-gif-packet"], + [[298, 303], "s0", "adgif-shader"], + [[376, 406], "a1", "(inline-array vector4w)"], + [[445, 450], "v1", "dma-gif-packet"], + [[456, 461], "s0", "adgif-shader"], + [[532, 562], "a1", "(inline-array vector4w)"], + [[575, 580], "v1", "dma-gif-packet"], + [[586, 591], "s0", "adgif-shader"], + [[664, 694], "a1", "(inline-array vector4w)"], + [[733, 738], "v1", "dma-gif-packet"], + [[744, 749], "s0", "adgif-shader"], + [[845, 874], "a1", "(inline-array vector4w)"], + [[887, 892], "v1", "dma-gif-packet"], + [[898, 903], "s0", "adgif-shader"], + [[1000, 1029], "a1", "(inline-array vector4w)"], + [180, "a0", "int"], + [188, "a1", "int"], + [910, "a0", "int"], + [918, "a1", "int"], + [310, "a0", "int"], + [318, "a1", "int"], + [468, "a0", "int"], + [476, "a1", "int"], + [598, "a0", "int"], + [606, "a1", "int"], + [756, "a0", "int"], + [764, "a1", "int"] + ], + "(method 28 path-control)": [["_stack_", 124, "float"]], + "collision-edit-get-prim": [[11, "v1", "collide-shape"]], + "collision-edit-get-max-prim": [[11, "v1", "collide-shape"]], + "print-actual-collision": [ + [12, "v1", "collide-shape"], + [182, "v1", "collide-shape"], + [83, "v1", "collide-shape-prim-mesh"], + [87, "v1", "(array string)"] + ], + "print-default-collision": [ + [23, "v1", "process-drawable"], + [27, "v1", "process-drawable"], + [55, "v1", "process-drawable"], + [66, "v1", "process-drawable"], + [76, "v0", "(array collide-mesh)"], + [138, "v1", "process-drawable"], + [157, "v1", "process-drawable"], + [267, "a1", "process-drawable"], + [277, "v1", "process-drawable"], + [375, "v1", "process-drawable"], + [[190, 250], "a0", "(inline-array collide-cache-tri)"] + ], + "(method 10 collision-edit-info)": [[[495, 538], "s4", "collide-cache-tri"]], + "(event slide-control-ride slide-control)": [ + [21, "gp", "process-drawable"], + [32, "v1", "vector"], + [36, "v1", "vector"], + [28, "v1", "vector"] + ], + "(code target-tube-walk)": [ + [44, "v1", "art-joint-anim"], + [129, "v1", "art-joint-anim"] + ], + "(code target-tube-start)": [[163, "v1", "float"]], + "(trans active simple-nav-sphere)": [ + [10, "v1", "process-drawable"], + [14, "a0", "collide-shape"], + [17, "a0", "collide-shape"] + ], + "simple-nav-sphere-event-handler": [ + [11, "a0", "collide-shape"], + [14, "a0", "collide-shape"], + [24, "a0", "collide-shape"], + [26, "a0", "collide-shape"], + [28, "a0", "collide-shape"], + [21, "v1", "float"] + ], + "target-mech-handler": [ + [94, "a0", "process"], + [[198, 380], "s3", "attack-info"] + ], + "mech-update-ik": [ + [3, "v1", "process-drawable"], + [36, "s5", "collide-shape"], + [41, "s5", "collide-shape"], + [85, "s5", "collide-shape-moving"] + ], + "target-mech-collision": [[108, "v0", "carry-info"]], + "(anon-function 8 target-mech)": [ + [4, "gp", "target"], + [10, "gp", "target"], + [14, "gp", "target"] + ], + "(anon-function 9 target-mech)": [ + [6, "v1", "target"], + [10, "v1", "target"], + [16, "v1", "target"], + [20, "v1", "target"], + [24, "v1", "target"], + [28, "v1", "target"], + [32, "v1", "target"] + ], + "(event target-mech-grab)": [[27, "a0", "process"]], + "(code target-mech-get-off)": [[67, "v1", "art-joint-anim"]], + "(code target-mech-get-up)": [ + [74, "v1", "process-drawable"], + [80, "v1", "process-drawable"], + [115, "v1", "art-joint-anim"] + ], + "(code target-mech-get-on)": [ + [74, "v1", "process-drawable"], + [80, "v1", "process-drawable"], + [115, "v1", "art-joint-anim"] + ], + "(code target-mech-carry-throw)": [ + [51, "v0", "carry-info"], + [112, "v0", "carry-info"] + ], + "(enter target-mech-carry-hit-ground)": [[3, "v0", "sound-rpc-set-param"]], + "(exit target-mech-carry-drag)": [ + [28, "v0", "sound-rpc-set-param"], + [11, "v0", "sound-rpc-set-param"] + ], + "(code target-mech-carry-walk)": [[80, "f0", "float"]], + "(code target-mech-carry-drop)": [ + [42, "v0", "carry-info"], + [110, "v1", "art-joint-anim"], + [176, "v0", "carry-info"], + [283, "v0", "sound-rpc-set-param"], + [316, "v0", "sound-rpc-set-param"] + ], + "(code target-mech-carry-pickup)": [ + [137, "v0", "carry-info"], + [377, "v1", "art-joint-anim"], + [541, "v0", "carry-info"], + [574, "f0", "float"] + ], + "(code target-mech-death)": [ + [410, "gp", "art-joint-anim"], + [731, "v1", "art-joint-anim"] + ], + "(code target-mech-walk)": [[91, "f0", "float"]], + "(code target-mech-punch)": [ + [107, "v1", "art-joint-anim"], + [135, "v1", "art-joint-anim"], + [163, "v1", "art-joint-anim"], + [191, "v1", "art-joint-anim"], + [231, "v1", "art-joint-anim"], + [259, "v1", "art-joint-anim"], + [287, "v1", "art-joint-anim"], + [315, "v1", "art-joint-anim"] + ], + "(event target-mech-punch)": [ + [45, "gp", "collide-query"], + [53, "s4", "collide-shape-prim"], + [68, "s5", "process-focusable"], + [104, "gp", "collide-query"], + [109, "s4", "collide-shape-prim"], + [137, "s5", "process-focusable"], + [166, "gp", "collide-query"], + [213, "gp", "collide-query"] + ], + "target-mech-punch-pick": [ + [227, "s5", "art-joint-anim"], + [246, "s5", "art-joint-anim"] + ], + "(code target-mech-jump)": [[26, "t9", "(function none)"]], + "(enter target-mech-hit-ground)": [[3, "v0", "sound-rpc-set-param"]], + "(method 33 flut)": [[8, "v0", "(array collide-shape)"]], + "(event target-flut-grab)": [[35, "a0", "process"]], + "(post target-flut-kanga-catch)": [[21, "s5", "process-focusable"]], + "(code target-flut-kanga-catch)": [ + [62, "s5", "art-joint-anim"], + [127, "s5", "process-focusable"], + [137, "s5", "process-focusable"], + [187, "s5", "process-focusable"] + ], + "target-flut-standard-event-handler": [[305, "a0", "process"]], + "target-flut-hit-ground-anim": [ + [137, "v1", "art-joint-anim"], + [212, "v1", "art-joint-anim"] + ], + "(code target-flut-run-wild)": [[72, "v1", "art-joint-anim"]], + "(code target-flut-double-jump)": [[14, "v1", "art-joint-anim"]], + "(code target-flut-stance)": [ + [87, "v1", "art-joint-anim"], + [153, "v1", "art-joint-anim"], + [219, "v1", "art-joint-anim"] + ], + "(trans target-flut-walk)": [ + [144, "f0", "float"], + [149, "f1", "float"] + ], + "(code target-flut-walk)": [[65, "v1", "art-joint-anim"]], + "(event target-flut-running-attack)": [ + [40, "v1", "process-drawable"], + [46, "s5", "collide-shape"] + ], + "(code target-flut-air-attack-hit-ground)": [[81, "v1", "art-joint-anim"]], + "(code target-flut-air-attack)": [[78, "v1", "art-joint-anim"]], + "flut-update-ik": [ + [3, "v1", "process-drawable"], + [36, "s5", "collide-shape"], + [41, "s5", "collide-shape"], + [96, "s5", "collide-shape-moving"] + ], + "(anon-function 74 target-flut)": [ + [6, "gp", "target"], + [10, "gp", "target"], + [16, "gp", "target"], + [24, "gp", "target"], + [33, "gp", "target"], + [42, "a0", "target"], + [49, "gp", "target"], + [56, "gp", "target"] + ], + "(anon-function 21 target-flut)": [[58, "v1", "art-joint-anim"]], + "(code target-flut-death)": [ + [609, "a1", "art-joint-anim"], + [698, "a1", "art-joint-anim"] + ], + "(code target-flut-get-on)": [ + [75, "s3", "process-drawable"], + [72, "s2", "process-drawable"], + [204, "v1", "process-drawable"], + [201, "s3", "process-drawable"] + ], + "(code target-flut-running-attack)": [ + [129, "a0", "uint"], + [298, "v1", "art-joint-anim"] + ], + "(trans target-flut-running-attack)": [[87, "v1", "int"]], + "(anon-function 20 target-flut)": [ + [119, "v1", "art-joint-anim"], + [284, "v1", "art-joint-anim"] + ], + "(method 14 minimap)": [ + [84, "v1", "process-drawable"], + [99, "v1", "entity-actor"], + [108, "v1", "process-drawable"], + [112, "s2", "entity-actor"], + [93, "s2", "basic"] + ], + "(method 12 minimap)": [[18, "v0", "connection-minimap"]], + "(method 15 minimap)": [ + [48, "s2", "(pointer uint128)"], + [[85, 90], "s1", "(pointer uint128)"], + [[282, 287], "s3", "(pointer uint128)"], + [[290, 293], "s3", "(pointer uint128)"], + [[294, 301], "v1", "(inline-array vector4w)"], + [[302, 307], "v1", "(inline-array vector4w)"], + [[313, 322], "v1", "(inline-array vector4w)"], + [[324, 329], "v1", "(inline-array vector4w)"], + [[335, 344], "v1", "(inline-array vector4w)"], + [[345, 351], "v1", "(inline-array vector4w)"], + [[357, 366], "v1", "(inline-array vector4w)"], + [[368, 374], "v1", "(inline-array vector4w)"], + [[380, 389], "v1", "(inline-array vector4w)"] + ], + "(method 19 minimap)": [ + [[114, 144], "s3", "(inline-array vector4w)"], + [[151, 155], "v1", "(inline-array vector4w)"], + [[157, 161], "a0", "(inline-array vector4w)"], + [[163, 168], "v1", "(inline-array vector4w)"], + [[170, 174], "v1", "(inline-array vector4w)"] + ], + "(method 18 level)": [[[13, 961], "s5", "level-memory-mode"]], + "(method 24 minimap)": [ + [[16, 21], "v1", "adgif-shader"], + [[90, 98], "v1", "(inline-array vector)"], + [[107, 116], "v1", "(inline-array vector)"], + [[125, 133], "v1", "(inline-array vector)"], + [[142, 151], "v1", "(inline-array vector)"], + [77, "s3", "(pointer uint128)"], + [79, "s3", "(pointer uint128)"], + [[100, 104], "a0", "(inline-array vector4w)"], + [[118, 122], "v1", "(inline-array vector4w)"], + [[135, 139], "a0", "(inline-array vector4w)"], + [[153, 157], "v1", "(inline-array vector4w)"], + [[172, 175], "s2", "adgif-shader"] + ], + "(method 23 minimap)": [ + [28, "a0", "process-drawable"], + [62, "v1", "process-drawable"], + [81, "a0", "process-drawable"], + [319, "a1", "(pointer uint128)"], + [321, "a0", "(inline-array vector4w)"], + [[336, 344], "v1", "(inline-array vector)"], + [[351, 361], "v1", "(inline-array vector4w)"], + [[365, 373], "v1", "(inline-array vector)"], + [[380, 390], "v1", "(inline-array vector4w)"], + [[393, 402], "v1", "(inline-array vector)"], + [[409, 419], "v1", "(inline-array vector4w)"], + [[423, 432], "v1", "(inline-array vector)"], + [[439, 449], "v1", "(inline-array vector4w)"] + ], + "(method 26 minimap)": [ + [34, "a0", "process-drawable"], + [49, "v1", "process-drawable"], + [64, "a0", "process-drawable"], + [305, "a1", "(pointer uint128)"], + [[310, 319], "a0", "(inline-array vector4w)"], + [[322, 330], "v1", "(inline-array vector)"], + [[337, 347], "v1", "(inline-array vector4w)"], + [[351, 359], "v1", "(inline-array vector)"], + [[366, 376], "v1", "(inline-array vector4w)"], + [[379, 388], "v1", "(inline-array vector)"], + [[395, 405], "v1", "(inline-array vector4w)"], + [[409, 418], "v1", "(inline-array vector)"], + [[425, 435], "v1", "(inline-array vector4w)"] + ], + "(method 17 minimap)": [ + [28, "a0", "process-drawable"], + [68, "v1", "process-drawable"], + [87, "a0", "process-drawable"], + [[353, 360], "a0", "(pointer uint128)"], + [364, "a0", "(pointer uint128)"], + [367, "a0", "(pointer uint128)"], + [[372, 381], "v1", "(inline-array vector4w)"], + [[384, 392], "v1", "(inline-array vector)"], + [[399, 408], "v1", "(inline-array vector4w)"], + [[412, 420], "v1", "(inline-array vector)"], + [[427, 436], "v1", "(inline-array vector4w)"], + [[439, 448], "v1", "(inline-array vector)"], + [[455, 464], "v1", "(inline-array vector4w)"], + [[468, 477], "v1", "(inline-array vector)"], + [[484, 493], "v1", "(inline-array vector4w)"] + ], + "(method 18 minimap)": [ + [28, "a0", "process-drawable"], + [68, "v1", "process-drawable"], + [87, "a0", "process-drawable"], + [360, "t1", "(pointer uint128)"], + [363, "t1", "(pointer uint128)"], + [365, "t0", "(pointer uint128)"], + [[368, 377], "t0", "(inline-array vector4w)"], + [[379, 383], "a3", "(inline-array vector4w)"], + [[390, 399], "a3", "(inline-array vector4w)"], + [[401, 405], "a3", "(inline-array vector4w)"], + [[412, 421], "a2", "(inline-array vector4w)"], + [[423, 427], "a2", "(inline-array vector4w)"], + [[434, 443], "a1", "(inline-array vector4w)"], + [[445, 449], "a1", "(inline-array vector4w)"], + [[456, 465], "v1", "(inline-array vector4w)"] + ], + "(method 21 minimap)": [ + [[14, 17], "s3", "(pointer uint128)"], + [71, "s3", "(pointer uint128)"], + [73, "s3", "(pointer uint128)"], + [[217, 224], "v1", "(inline-array vector4w)"], + [[226, 235], "v1", "(inline-array vector)"], + [[236, 241], "v1", "(inline-array vector4w)"], + [[243, 252], "v1", "(inline-array vector)"], + [[254, 259], "v1", "(inline-array vector4w)"], + [[261, 270], "v1", "(inline-array vector)"], + [[271, 277], "v1", "(inline-array vector4w)"], + [[279, 288], "v1", "(inline-array vector)"], + [[290, 296], "v1", "(inline-array vector4w)"], + [[380, 385], "s2", "(pointer uint128)"], + [[425, 430], "s3", "(pointer uint128)"], + [[498, 503], "s3", "(pointer uint128)"], + [[511, 514], "s3", "(pointer uint128)"], + [[516, 523], "v1", "(inline-array vector4w)"], + [[524, 528], "v1", "(inline-array vector4w)"], + [[529, 534], "v1", "(inline-array vector4w)"], + [[536, 541], "v1", "(inline-array vector4w)"], + [[543, 549], "v1", "(inline-array vector4w)"] + ], + "(method 16 minimap)": [ + [30, "v1", "process-drawable"], + [34, "v1", "process-drawable"], + [56, "v1", "entity-actor"], + [66, "a0", "process-drawable"], + [77, "a0", "entity-actor"], + [50, "v1", "entity-actor"], + [[542, 545], "v1", "(pointer uint128)"], + [[548, 557], "t1", "(inline-array vector4w)"], + [[558, 562], "a0", "(inline-array vector4w)"], + [[568, 578], "a0", "(inline-array vector4w)"], + [[579, 583], "a0", "(inline-array vector4w)"], + [[589, 599], "v1", "(inline-array vector4w)"] + ], + "(method 10 engine-minimap)": [[6, "s5", "connection-minimap"]], + "(method 14 engine-minimap)": [ + [159, "a0", "entity-actor"], + [152, "v1", "entity-actor"] + ], + "(method 12 lightning-bolt)": [ + ["_stack_", 56, "float"], + ["_stack_", 236, "float"] + ], + "(method 15 lightning-bolt)": [ + [47, "v1", "float"], + [64, "v1", "float"] + ], + "(method 21 lightning-bolt)": [ + [49, "v1", "float"], + [77, "v1", "float"], + ["_stack_", 32, "float"] + ], + "(method 20 lightning-bolt)": [ + [15, "v1", "float"], + [32, "v1", "float"] + ], + "(method 17 lightning-bolt)": [[36, "v1", "float"]], + "(method 11 lightning-bolt)": [ + ["_stack_", 24, "float"], + ["_stack_", 40, "float"], + ["_stack_", 68, "float"], + ["_stack_", 72, "float"] + ], + "(method 16 lightning-bolt)": [["_stack_", 176, "rgba"]], + "(method 28 nav-mesh)": [[[22, 78], "s4", "nav-engine"]], + "(method 12 nav-engine)": [ + [[22, 28], "v1", "connection"], + [[29, 31], "a0", "process-focusable"], + [[34, 86], "s2", "collide-shape"], + [90, "v1", "collide-shape-prim-group"], + [110, "s2", "collide-shape-prim-sphere"] + ], + "(method 13 nav-engine)": [ + [[53, 65], "s4", "nav-mesh"], + [[38, 50], "s3", "nav-mesh"] + ], + "nav-control-validate": [ + [29, "s5", "int"], + [29, "v1", "int"] + ], + "connection-list-validate": [[5, "gp", "connection"]], + "(method 25 nav-mesh)": [ + [16, "v0", "(inline-array sphere)"], + ["_stack_", 16, "res-tag"] + ], + "(method 46 nav-mesh)": [["_stack_", 28, "float"]], + "(method 48 nav-mesh)": [ + [15, "v1", "entity-nav-mesh"], + [[34, 43], "v1", "nav-mesh-link"] + ], + "compute-dir-parm": [ + [18, "f0", "float"], + [8, "a2", "uint"], + [10, "v1", "float"] + ], + "(method 18 nav-control)": [ + [252, "a2", "float"], + [250, "a3", "uint"], + [250, "t0", "uint"] + ], + "(code hit nav-enemy)": [[30, "v1", "art-joint-anim"]], + "(code active nav-enemy)": [ + [30, "v1", "art-joint-anim"], + [127, "v1", "art-joint-anim"], + [189, "v1", "art-joint-anim"], + [298, "v1", "art-joint-anim"] + ], + "(code notice nav-enemy)": [[31, "v1", "art-joint-anim"]], + "(enter notice nav-enemy)": [ + [21, "a0", "process-focusable"], + [24, "a0", "process-focusable"] + ], + "(code taunt nav-enemy)": [[84, "v1", "art-joint-anim"]], + "(code pacing nav-enemy)": [[34, "gp", "art-joint-anim"]], + "(trans pacing nav-enemy)": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(enter circling nav-enemy)": [ + [69, "gp", "process-focusable"], + [73, "a0", "process-focusable"], + [72, "gp", "process-focusable"] + ], + "(code circling nav-enemy)": [[34, "gp", "art-joint-anim"]], + "(trans circling nav-enemy)": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(enter pacing nav-enemy)": [ + [103, "gp", "process-focusable"], + [107, "a0", "process-focusable"], + [106, "gp", "process-focusable"] + ], + "(enter taunt nav-enemy)": [ + [37, "gp", "process-focusable"], + [41, "a0", "process-focusable"], + [40, "gp", "process-focusable"] + ], + "(code stare nav-enemy)": [[23, "gp", "art-joint-anim"]], + "nav-enemy-stare-post": [ + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"] + ], + "nav-enemy-face-focus-post": [ + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"] + ], + "nav-enemy-flee-post": [ + [18, "a0", "process-focusable"], + [21, "a0", "process-focusable"] + ], + "nav-enemy-chase-post": [ + [15, "a0", "process-focusable"], + [18, "a0", "process-focusable"] + ], + "(method 119 nav-enemy)": [["_stack_", 16, "res-tag"]], + "(method 59 nav-enemy)": [ + [57, "a0", "process-focusable"], + [60, "a0", "process-focusable"] + ], + "(method 167 nav-enemy)": [ + [17, "v1", "process-focusable"], + [21, "a0", "process-focusable"], + [20, "v1", "process-focusable"] + ], + "(method 171 nav-enemy)": [ + [18, "s5", "process-focusable"], + [35, "s5", "process-focusable"], + [39, "a0", "process-focusable"], + [38, "s5", "process-focusable"] + ], + "(method 172 nav-enemy)": [ + [22, "v1", "process-focusable"], + [26, "a0", "process-focusable"], + [25, "v1", "process-focusable"] + ], + "(method 16 nav-mesh)": [ + [27, "v1", "int"], + [22, "v1", "int"], + [24, "a0", "int"], + [26, "a0", "int"] + ], + "(method 15 nav-mesh)": [ + [18, "v1", "int"], + [20, "a2", "int"], + [22, "a2", "int"] + ], + "(code active monster-frog)": [ + [27, "v1", "art-joint-anim"], + [80, "v1", "art-joint-anim"], + [172, "v1", "art-joint-anim"], + [234, "v1", "art-joint-anim"], + [343, "v1", "art-joint-anim"] + ], + "(code attack-recover monster-frog)": [ + [10, "v1", "art-joint-anim"], + [87, "v1", "art-joint-anim"], + [158, "v1", "art-joint-anim"] + ], + "(code attack monster-frog)": [[19, "v1", "art-joint-anim"]], + "(method 85 monster-frog)": [ + [19, "v1", "art-joint-anim"], + [54, "v1", "art-joint-anim"], + [89, "v1", "art-joint-anim"], + [121, "v1", "art-joint-anim"] + ], + "(method 86 monster-frog)": [ + [19, "v1", "art-joint-anim"], + [54, "v1", "art-joint-anim"], + [89, "v1", "art-joint-anim"], + [121, "v1", "art-joint-anim"] + ], + "(post turn monster-frog)": [ + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"] + ], + "(code turn monster-frog)": [ + [21, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"] + ], + "(code hostile monster-frog)": [ + [16, "gp", "process-focusable"], + [117, "v1", "art-joint-anim"], + [202, "v1", "art-joint-anim"] + ], + "(code notice monster-frog)": [ + [23, "v1", "art-joint-anim"], + [71, "v1", "art-joint-anim"], + [103, "a0", "process-focusable"], + [106, "a0", "process-focusable"], + [149, "v1", "art-joint-anim"] + ], + "(code ambush monster-frog)": [ + [21, "a0", "process-focusable"], + [24, "a0", "process-focusable"], + [68, "v1", "art-joint-anim"] + ], + "monster-frog-hop-fast-code": [ + [15, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + "monster-frog-hop-slow-code": [ + [231, "v1", "art-joint-anim"], + [288, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"], + [117, "v1", "art-joint-anim"] + ], + "update-mood-mineb": [ + [41, "f0", "float"], + [45, "f0", "float"] + ], + "(code extended min-bridge)": [[10, "v1", "art-joint-anim"]], + "(code extend min-bridge)": [[49, "v1", "art-joint-anim"]], + "(code extended min-folding-plat)": [[15, "v1", "art-joint-anim"]], + "(code extend min-folding-plat)": [[44, "v1", "art-joint-anim"]], + "(method 11 min-falling-step)": [["_stack_", 16, "res-tag"]], + "(method 11 rat-spawner)": [["_stack_", 16, "res-tag"]], + "(method 0 flow-control)": [["_stack_", 16, "res-tag"]], + "(code lowered min-falling-step)": [[18, "v1", "art-joint-anim"]], + "(code lowering min-falling-step)": [[65, "v1", "art-joint-anim"]], + "(code idle min-falling-step)": [[28, "v1", "art-joint-anim"]], + "(code resetting min-falling-elevator)": [[25, "v1", "art-joint-anim"]], + "(code falling min-falling-elevator)": [[10, "v1", "art-joint-anim"]], + "(code unstable min-falling-elevator)": [ + [36, "v1", "art-joint-anim"], + [88, "v1", "art-joint-anim"] + ], + "(trans active min-moving-plat-spooler)": [[12, "v0", "sound-rpc-set-param"]], + "min-ramp-callback": [[6, "v1", "min-ramp"]], + "(post arrived min-falling-elevator)": [[4, "t9", "(function none)"]], + "(post running min-falling-elevator)": [[4, "t9", "(function none)"]], + "min-falling-elevator-callback": [[[3, 31], "v1", "min-falling-elevator"]], + "(post running min-boss-elev)": [[50, "t9", "(function none)"]], + "(code open min-elev-doors)": [[25, "v1", "art-joint-anim"]], + "(post waiting min-bomb-elevator)": [[4, "t9", "(function none)"]], + "(post running min-bomb-elevator)": [ + [4, "t9", "(function none)"], + [15, "v1", "process-drawable"] + ], + "(code lowering min-target-sign)": [[15, "v1", "art-joint-anim"]], + "(code running min-rat-engine)": [ + [10, "v1", "art-joint-anim"], + [139, "v1", "art-joint-anim"], + [114, "a0", "entity-actor"], + [118, "a0", "entity-actor"] + ], + "(code shutdown min-rat-engine)": [[14, "v1", "art-joint-anim"]], + "(enter shutdown min-rat-engine)": [[2, "v1", "collide-shape-prim-group"]], + "(event idle min-target-sign)": [[[6, 42], "gp", "touching-shapes-entry"]], + "(method 11 min-target-sign)": [ + [62, "v1", "collide-shape-prim-group"], + [[65, 71], "v1", "collide-shape-prim-group"] + ], + "(method 11 min-rat-engine)": [["_stack_", 16, "res-tag"]], + "(method 21 min-target-sign)": [[[21, 25], "gp", "collide-shape-prim-group"]], + "min-bomb-elevator-callback": [[[3, 31], "v1", "min-bomb-elevator"]], + "(enter running min-rat-engine)": [[68, "v1", "collide-shape-prim-group"]], + "mineb-activate": [ + ["_stack_", 16, "res-tag"], + [17, "v0", "(pointer actor-group)"], + [41, "a0", "entity-actor"], + [45, "a0", "entity-actor"] + ], + "(event up-idle basebutton)": [ + [4, "v1", "attack-info"], + [32, "v1", "attack-info"], + [37, "v1", "attack-info"] + ], + "(method 34 basebutton)": [[35, "v1", "art-joint-anim"]], + "(method 34 min-crane-switch)": [[35, "v1", "art-joint-anim"]], + "joint-mod-rat-engine-callback": [[6, "v1", "min-rat-engine"]], + "(method 27 min-rat-engine)": [[14, "a2", "process-focusable"]], + "(method 11 rat-light-manager)": [["_stack_", 16, "res-tag"]], + "(code idle manta)": [ + [100, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"] + ], + "manta-fly-code": [ + [168, "v1", "art-joint-anim"], + [196, "v1", "art-joint-anim"] + ], + "(code ambush manta)": [ + [30, "v1", "art-joint-anim"], + [82, "v1", "art-joint-anim"] + ], + "(code notice-to-fly manta)": [ + [14, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(code attack manta)": [ + [17, "v1", "art-joint-anim"], + [113, "v1", "art-joint-anim"], + [173, "v1", "art-joint-anim"], + [225, "v1", "art-joint-anim"] + ], + "(code knocked-recover manta)": [[16, "v1", "art-joint-anim"]], + "(exit attack-end manta)": [[2, "v1", "collide-shape-prim-group"]], + "(code attack-end manta)": [[16, "v1", "art-joint-anim"]], + "(enter attack-end manta)": [[3, "a0", "collide-shape-prim-group"]], + "(code land manta)": [ + [105, "v1", "art-joint-anim"], + [161, "v1", "art-joint-anim"], + [41, "v1", "art-joint-anim"] + ], + "(method 50 manta)": [ + [10, "v1", "collide-shape-prim-group"], + [34, "v1", "collide-shape-prim-group"] + ], + "(method 87 manta)": [[43, "v1", "art-joint-anim"]], + "(method 85 manta)": [ + [22, "v1", "art-joint-anim"], + [58, "v1", "art-joint-anim"], + [91, "v1", "art-joint-anim"] + ], + "(method 86 manta)": [[19, "v1", "art-joint-anim"]], + "(method 200 manta)": [ + [34, "a0", "connection"], + [35, "a0", "collide-shape"], + [83, "a0", "connection"], + [84, "a0", "collide-shape"] + ], + "(method 205 manta)": [ + [15, "a0", "process-focusable"], + [18, "a0", "process-focusable"] + ], + "(method 121 manta)": [["_stack_", 16, "res-tag"]], + "(code wheel-die rat)": [[14, "v1", "art-joint-anim"]], + "rat-joint-mod-roll": [[9, "gp", "rat"]], + "(code running-in-wheel rat)": [ + [14, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + "(enter running-in-wheel rat)": [ + [47, "v1", "collide-shape-prim-group"], + [53, "v1", "collide-shape-prim-group"] + ], + "(code knocked-recover rat)": [ + [38, "v1", "art-joint-anim"], + [59, "v1", "ragdoll-proc"], + [137, "v1", "art-joint-anim"], + [233, "v1", "art-joint-anim"] + ], + "(code stare rat)": [[91, "v1", "art-joint-anim"]], + "(code flee-stare rat)": [[91, "v1", "art-joint-anim"]], + "(code attack rat)": [[14, "v1", "art-joint-anim"]], + "(code wait-by-wheel-wait rat)": [[91, "v1", "art-joint-anim"]], + "(code notice rat)": [ + [22, "v1", "art-joint-anim"], + [80, "v1", "art-joint-anim"], + [203, "v1", "art-joint-anim"], + [140, "v1", "art-joint-anim"] + ], + "(code active-turn rat)": [ + [30, "v1", "art-joint-anim"], + [83, "v1", "art-joint-anim"] + ], + "(code active rat)": [[29, "v1", "art-joint-anim"]], + "rat-run-code": [[14, "v1", "art-joint-anim"]], + "(code ambush rat)": [ + [14, "v1", "art-joint-anim"], + [86, "v1", "art-joint-anim"], + [189, "v1", "art-joint-anim"] + ], + "(post idle rat-spawner)": [[103, "v0", "vector"]], + "(method 59 rat)": [ + [15, "a0", "process-focusable"], + [18, "a0", "process-focusable"] + ], + "(method 50 rat)": [ + [5, "v1", "collide-shape-prim-group"], + [20, "v1", "collide-shape-prim-group"] + ], + "(method 82 rat)": [[93, "v0", "vector"]], + "min-bomb-train-callback": [[[3, 31], "v1", "min-bomb-train"]], + "(code active min-bomb-train)": [ + [18, "gp", "task-manager"], + [21, "gp", "task-manager"], + [16, "s5", "task-manager"] + ], + "(event active min-bomb-train)": [ + [18, "v1", "collide-shape-prim-group"], + [[10, 29], "s4", "touching-shapes-entry"], + [37, "gp", "process-focusable"], + [49, "s3", "attack-info"], + [68, "v1", "touching-shapes-entry"], + [163, "v1", "task-manager"] + ], + "(trans wait min-bomb-train)": [ + [11, "v0", "string"], + [13, "a0", "string"] + ], + "(method 38 min-bomb-train)": [ + [105, "v1", "task-manager"], + [118, "v1", "task-manager"], + [121, "v1", "task-manager"], + [132, "v1", "task-manager"], + [211, "v1", "task-manager"], + [234, "v1", "task-manager"] + ], + "(code resolution task-manager)": [[40, "gp", "handle"]], + "(method 31 task-manager)": [[[15, 259], "v0", "resetter-spec"]], + "(anon-function 67 task-control)": [ + [3, "s4", "pair"], + [4, "s4", "pair"], + [5, "a0", "pair"], + [6, "s4", "pair"], + [7, "a0", "pair"], + [8, "a0", "pair"], + [9, "s4", "pair"], + [10, "a0", "pair"], + [11, "a0", "pair"], + [12, "a0", "pair"], + [13, "v1", "symbol"], + [20, "s4", "pair"], + [21, "a0", "pair"], + [24, "v1", "level-load-info"], + [29, "a0", "pair"], + [33, "v1", "level-load-info"], + [38, "v1", "level-load-info"], + [43, "gp", "pair"], + [42, "gp", "pair"] + ], + "play-task": [[89, "v1", "pair"]], + "fail-mission": [ + [149, "s4", "game-task-node-info"], + [152, "s4", "game-task-node-info"], + [158, "s4", "game-task-node-info"], + [198, "s4", "game-task-node-info"], + [196, "s4", "game-task-node-info"], + [197, "s4", "game-task-node-info"], + [13, "v1", "connection"], + [17, "a0", "task-manager"], + [20, "a0", "task-manager"] + ], + "restart-mission": [ + [144, "s5", "game-task-node-info"], + [150, "s5", "game-task-node-info"], + [153, "s5", "game-task-node-info"], + [159, "s5", "game-task-node-info"], + [13, "v1", "connection"], + [17, "a0", "task-manager"], + [20, "a0", "task-manager"] + ], + "(method 11 min-bomb-train)": [["_stack_", 16, "res-tag"]], + "(code hostile-wall gekko)": [ + [20, "v1", "art-joint-anim"], + [70, "v1", "art-joint-anim"] + ], + "(code active-wall gekko)": [[14, "v1", "art-joint-anim"]], + "(code attack-wall gekko)": [ + [126, "v1", "art-joint-anim"], + [191, "v1", "art-joint-anim"] + ], + "(code jump-off-wall-falling gekko)": [[14, "v1", "art-joint-anim"]], + "gekko-stare-code": [[76, "v1", "art-joint-anim"]], + "(code flee gekko)": [ + [24, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + "(code attack gekko)": [ + [14, "v1", "art-joint-anim"], + [106, "v1", "art-joint-anim"], + [180, "v1", "art-joint-anim"] + ], + "(exit attack gekko)": [[31, "v1", "collide-shape-prim-group"]], + "(code turn gekko)": [ + [34, "v1", "art-joint-anim"], + [83, "v1", "art-joint-anim"] + ], + "(code turn-quick gekko)": [ + [14, "v1", "art-joint-anim"], + [82, "v1", "art-joint-anim"] + ], + "(enter knocked gekko)": [[42, "v1", "ragdoll-proc"]], + "(post knocked gekko)": [[4, "t9", "(function none)"]], + "(post knocked-recover gekko)": [[4, "t9", "(function none)"]], + "gekko-postbind": [ + [[3, 476], "gp", "gekko"], + ["_stack_", 560, "float"], + ["_stack_", 980, "gekko-foot-info"] + ], + "gekko-foot-rot-handler": [[2, "v1", "gekko"]], + "(code knocked-recover gekko)": [ + [19, "v1", "art-joint-anim"], + [48, "v1", "ragdoll-proc"] + ], + "(enter attack gekko)": [[30, "v1", "collide-shape-prim-group"]], + "(code hostile gekko)": [ + [22, "v1", "art-joint-anim"], + [75, "v1", "art-joint-anim"] + ], + "(code active gekko)": [ + [328, "v1", "art-joint-anim"], + [382, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"] + ], + "(code jump-off-wall gekko)": [[14, "v1", "art-joint-anim"]], + "(post knocked-wall gekko)": [[3, "t9", "(function none)"]], + "(code turn-wall gekko)": [[46, "v1", "art-joint-anim"]], + "(code jump-off-wall-recover gekko)": [ + [13, "v1", "art-joint-anim"], + [71, "v1", "art-joint-anim"] + ], + "(method 50 gekko)": [ + [8, "v1", "collide-shape-prim-group"], + [12, "a0", "collide-shape-prim-group"], + [24, "v1", "collide-shape-prim-group"], + [35, "v1", "collide-shape-prim-group"], + [39, "a0", "collide-shape-prim-group"] + ], + "(method 59 gekko)": [ + [15, "a0", "process-focusable"], + [18, "a0", "process-focusable"] + ], + "(method 125 gekko)": [ + [15, "a0", "ragdoll-proc"], + [17, "a0", "ragdoll-proc"], + [28, "s5", "ragdoll-proc"], + [50, "s5", "ragdoll-proc"], + [11, "s5", "ragdoll-proc"], + [14, "s5", "ragdoll-proc"] + ], + "(method 86 gekko)": [ + [23, "a2", "art-joint-anim"], + [55, "a2", "art-joint-anim"], + [84, "a2", "art-joint-anim"] + ], + "(method 85 gekko)": [ + [19, "v1", "art-joint-anim"], + [47, "v1", "art-joint-anim"] + ], + "(method 108 gekko)": [[19, "v1", "process-focusable"]], + "(method 11 basebutton)": [["_stack_", 16, "res-tag"]], + "clmf-cam-string": [["_stack_", 16, "res-tag"]], + "(code knocked-recover grunt)": [ + [15, "v1", "ragdoll-proc"], + [40, "v1", "art-joint-anim"], + [69, "v1", "art-joint-anim"], + [130, "a0", "ragdoll-proc"], + [132, "a0", "ragdoll-proc"] + ], + "(trans wait-for-focus grunt)": [ + [13, "s5", "process-focusable"], + [40, "s5", "process-focusable"] + ], + "(code stop-chase grunt)": [[77, "gp", "art-joint-anim"]], + "(code pacing grunt)": [[145, "gp", "art-joint-anim"]], + "(code circling grunt)": [ + [260, "v1", "art-joint-anim"], + [308, "v1", "art-joint-anim"], + [153, "gp", "art-joint-anim"] + ], + "(code spin-attack grunt)": [ + [45, "gp", "art-joint-anim"], + [73, "a0", "process-focusable"], + [76, "a0", "process-focusable"] + ], + "(enter spin-attack grunt)": [ + [43, "gp", "process-focusable"], + [47, "a0", "process-focusable"], + [46, "gp", "process-focusable"] + ], + "(code attack grunt)": [ + [55, "gp", "art-joint-anim"], + [155, "a0", "grunt-global-info"] + ], + "(code hostile grunt)": [[122, "gp", "art-joint-anim"]], + "(code active grunt)": [ + [143, "gp", "art-joint-anim"], + [227, "gp", "art-joint-anim"], + [271, "gp", "art-joint-anim"], + [354, "v1", "art-joint-anim"], + [414, "v1", "art-joint-anim"] + ], + "(code falling-ambush grunt)": [[53, "v1", "art-joint-anim"]], + "setup-blerc-chains": [ + [43, "v1", "int"], + [80, "s0", "int"], + [83, "a0", "int"], + [[30, 40], "s1", "merc-fragment-control"], + [41, "v1", "merc-fragment"], + [46, "v1", "(pointer uint8)"], + [59, "a0", "merc-blend-ctrl"], + [[64, 76], "s1", "merc-fragment-control"], + [77, "a1", "merc-blend-ctrl"], + [106, "v1", "(pointer uint32)"], + [108, "v1", "(pointer uint32)"] + ], + "(method 26 battle)": [ + [35, "a0", "connection"], + [36, "a0", "collide-shape"], + [84, "a0", "connection"], + [85, "a0", "collide-shape"] + ], + "(method 30 battle)": [ + [7, "s5", "nav-enemy"], + [32, "a2", "nav-enemy"] + ], + "(method 51 battle)": [ + [38, "s4", "nav-enemy"], + [53, "s4", "nav-enemy"] + ], + "(method 28 battle)": [ + [21, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(method 29 battle)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"] + ], + "part-wascityb-bird1-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascityb-bird2-path": [ + [13, "v1", "int"], + [86, "a0", "part-spawner"] + ], + "part-wascityb-bird3-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascityb-bird4-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascityb-bird5-path": [ + [13, "v1", "int"], + [86, "a0", "part-spawner"] + ], + "part-wascityb-bird6-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascityb-bird7-path": [ + [13, "v1", "int"], + [86, "a0", "part-spawner"] + ], + "part-wascityb-bird8-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascityb-bird9-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascityb-bird10-path": [ + [13, "v1", "int"], + [86, "a0", "part-spawner"] + ], + "part-wascitya-fly1-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "part-wascitya-fly2-path": [ + [13, "v1", "int"], + [86, "a0", "part-spawner"] + ], + "part-wascitya-fly3-path": [ + [13, "v1", "int"], + [90, "a0", "part-spawner"] + ], + "(event idle market-object)": [ + [[6, 10], "a1", "attack-info"], + [16, "a1", "attack-info"] + ], + "fruit-stand-event-handler": [ + [4, "gp", "attack-info"], + [32, "gp", "attack-info"] + ], + "fruit-check-ground-bounce": [ + [5, "v1", "fruit-stand"], + [[9, 40], "v1", "fruit-stand"], + [8, "a0", "fruit-stand"] + ], + "(event idle wascity-cactus)": [[[7, 17], "a1", "attack-info"]], + "wascity-cactus-callback": [ + [[9, 39], "s4", "wascity-cactus"], + [10, "s3", "int"], + [12, "s3", "int"], + [25, "s3", "int"], + [30, "s3", "int"], + [37, "s3", "int"] + ], + "(method 35 monk-npc)": [ + [23, "v1", "int"], + [23, "a0", "int"], + [27, "a0", "int"] + ], + "(method 37 monk-npc)": [ + [6, "v1", "int"], + [6, "a1", "int"], + [10, "a1", "int"] + ], + "(enter die market-object)": [ + [118, "v0", "(state symbol int market-object)"] + ], + "(method 50 dogat)": [ + [5, "v1", "collide-shape-prim-group"], + [18, "v1", "collide-shape-prim-group"] + ], + "(code active dogat)": [[14, "v1", "art-joint-anim"]], + "(code sit-idle dogat)": [ + [155, "v1", "art-joint-anim"], + [88, "v1", "art-joint-anim"], + [21, "v1", "art-joint-anim"] + ], + "(method 62 vehicle)": [[8, "v1", "collide-shape-prim-group"]], + "(method 115 vehicle)": [ + [19, "s4", "process-focusable"], + [26, "s4", "process-focusable"], + [31, "s4", "process-focusable"], + [44, "s4", "process-focusable"] + ], + "(trans fly-to-dest prebot-large-eco-creature)": [[300, "v1", "float"]], + "(event fly-to-dest prebot-large-eco-creature)": [ + [5, "v1", "attack-info"], + [10, "v1", "attack-info"], + [128, "s5", "vector"], + [129, "gp", "vector"], + [131, "gp", "vector"], + [132, "s5", "vector"], + [125, "v1", "float"], + [127, "v1", "float"], + [156, "gp", "vector"], + [157, "s5", "vector"], + [201, "s5", "vector"], + [205, "s5", "vector"], + [209, "s5", "vector"], + [214, "gp", "vector"] + ], + "(code victory prebot-large-eco-creature)": [[42, "v1", "art-joint-anim"]], + "(trans hostile prebot-large-eco-creature)": [ + [27, "a0", "process-focusable"], + [30, "a0", "process-focusable"] + ], + "(method 82 prebot-large-eco-creature)": [ + [10, "s4", "attack-info"], + [15, "s4", "attack-info"], + [63, "s4", "attack-info"], + [67, "s4", "attack-info"], + [71, "s4", "attack-info"] + ], + "large-eco-creature-split": [ + [83, "a0", "prebot-large-eco-creature"], + [86, "a0", "prebot-medium-eco-creature"], + [95, "a0", "prebot-medium-eco-creature"], + [97, "a0", "prebot-medium-eco-creature"], + [90, "a1", "prebot-medium-eco-creature"], + [93, "a0", "prebot-medium-eco-creature"], + [142, "a0", "prebot-medium-eco-creature"], + [145, "a0", "prebot-medium-eco-creature"], + [154, "a0", "prebot-medium-eco-creature"], + [156, "a0", "prebot-medium-eco-creature"], + [149, "a1", "prebot-medium-eco-creature"], + [152, "a0", "prebot-medium-eco-creature"], + [[77, 95], "v1", "(pointer prebot-medium-eco-creature)"], + [64, "v1", "(pointer prebot-medium-eco-creature)"], + [[123, 154], "v1", "(pointer prebot-medium-eco-creature)"] + ], + "prebot-eco-creature-joint-callback": [ + [1, "v1", "float"], + [[17, 27], "a2", "float"] + ], + "(code knocked-recover prebot-medium-eco-creature)": [ + [34, "gp", "art-joint-anim"], + [61, "v1", "ragdoll-proc"], + [102, "gp", "art-joint-anim"], + [166, "t9", "(function none)"] + ], + "prebot-tentacle-init-by-other": [[121, "a0", "prebot"]], + "prebot-gun-init-by-other": [[120, "a0", "prebot"]], + "prebot-sword-init-by-other": [ + [103, "a0", "prebot"], + [202, "s5", "weapon-trail-tracker"], + [205, "s5", "weapon-trail-tracker"] + ], + "prebot-eco-pillar-init-by-other": [[346, "v1", "float"]], + "(code impact prebot-gun-shot)": [[39, "a0", "process"]], + "(trans idle prebot-sword)": [[94, "a1", "prebot"]], + "(event idle prebot-sword)": [ + [67, "gp", "process-drawable"], + [76, "v1", "float"], + [88, "v1", "float"] + ], + "(method 11 cav-railblocker)": [ + [97, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(enter fall cav-railblocker)": [[74, "a0", "process"]], + "(event idle cav-railblocker)": [ + [29, "v1", "attack-info"], + [34, "v1", "attack-info"], + [43, "v1", "attack-info"], + [46, "v1", "attack-info"], + [49, "v1", "attack-info"], + [52, "v1", "attack-info"] + ], + "(method 30 cav-railblocker)": [[21, "v1", "float"]], + "prebot-spawn-shockwave": [[42, "v1", "process-drawable"]], + "prebot-handler": [[202, "a1", "vector"]], + "prebot-go-next-stage": [ + [27, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(trans play-hit-movie prebot)": [[86, "v0", "entity-actor"]], + "(trans destroy-pillars prebot)": [[241, "gp", "process-drawable"]], + "prebot-setup-shot-offsets": [ + [13, "v1", "float"], + [33, "v1", "float"], + [49, "v1", "float"] + ], + "prebot-fire-tentacle": [[21, "v1", "prebot-tentacle"]], + "(trans watch-critters prebot)": [[47, "a0", "process-drawable"]], + "prebot-launch-critter": [ + [27, "s3", "process-drawable"], + [67, "s3", "process-drawable"], + [112, "s3", "process-drawable"] + ], + "set-mined-filter!": [[12, "v1", "mined-states"]], + "update-mood-mined": [[[15, 45], "s5", "mined-states"]], + "(code attacking-0 tentacle)": [[14, "v1", "art-joint-anim"]], + "(code kill-player tentacle)": [[14, "v1", "art-joint-anim"]], + "(code stop-chase kg-grunt)": [[77, "gp", "art-joint-anim"]], + "(code pacing kg-grunt)": [[145, "gp", "art-joint-anim"]], + "(method 86 kg-grunt)": [[22, "v1", "art-joint-anim"]], + "(trans wait-for-focus kg-grunt)": [ + [13, "s5", "process-focusable"], + [40, "s5", "process-focusable"] + ], + "(method 85 kg-grunt)": [ + [87, "s4", "art-joint-anim"], + [233, "a1", "art-joint-anim"], + [323, "s4", "art-joint-anim"] + ], + "(code circling kg-grunt)": [ + [260, "v1", "art-joint-anim"], + [308, "v1", "art-joint-anim"], + [153, "gp", "art-joint-anim"] + ], + "(code spin-attack kg-grunt)": [ + [45, "gp", "art-joint-anim"], + [73, "a0", "process-focusable"], + [76, "a0", "process-focusable"] + ], + "(enter spin-attack kg-grunt)": [ + [43, "gp", "process-focusable"], + [46, "gp", "process-focusable"] + ], + "(code attack kg-grunt)": [ + [55, "gp", "art-joint-anim"], + [[150, 156], "a0", "kg-grunt-anim-info"] + ], + "(code hostile kg-grunt)": [[122, "gp", "art-joint-anim"]], + "(code active kg-grunt)": [ + [227, "gp", "art-joint-anim"], + [271, "gp", "art-joint-anim"], + [354, "v1", "art-joint-anim"], + [414, "v1", "art-joint-anim"], + [143, "gp", "art-joint-anim"] + ], + "(method 82 kg-grunt)": [[144, "v1", "rigid-body-impact"]], + "(code falling-ambush kg-grunt)": [[53, "v1", "art-joint-anim"]], + "(method 38 sew-laser-shot)": [ + [33, "a0", "process-focusable"], + [36, "a0", "process-focusable"] + ], + "(code idle sew-gas-step)": [[14, "v1", "art-joint-anim"]], + "(event idle jump-pad)": [[[18, 25], "v1", "attack-info"]], + "jump-pad-joint-fan": [[[4, 15], "gp", "jump-pad"]], + "(post fire jump-pad)": [[28, "t9", "(function none)"]], + "(code going-down sew-floor-switch)": [ + [26, "v1", "art-joint-anim"], + [83, "v0", "pair"] + ], + "(event idle-up sew-floor-switch)": [[4, "v1", "attack-info"]], + "sew-fan-joint-floor": [[[7, 12], "s1", "sew-fan"]], + "sew-fan-joint-fan": [[[3, 20], "v1", "sew-fan"]], + "(method 82 sew-fan)": [[[46, 63], "v1", "attack-info"]], + "(method 11 sew-wall-switch)": [["_stack_", 16, "res-tag"]], + "(method 11 sew-pipe)": [["_stack_", 16, "res-tag"]], + "(enter down sew-pipe)": [[13, "v1", "art-joint-anim"]], + "(code lower sew-pipe)": [[83, "v1", "art-joint-anim"]], + "(enter raised sew-m-gate)": [[13, "v1", "art-joint-anim"]], + "(code open sew-m-gate)": [[80, "v1", "art-joint-anim"]], + "(code open sew-gate)": [[15, "v1", "art-joint-anim"]], + "(event idle sew-wall-switch)": [[4, "v1", "attack-info"]], + "(code open sew-wall-switch)": [[10, "v1", "art-joint-anim"]], + "(code closing sew-fence-gate)": [[19, "v1", "art-joint-anim"]], + "(code opening sew-fence-gate)": [[18, "v1", "art-joint-anim"]], + "(code open sew-fence-gate)": [[10, "v1", "art-joint-anim"]], + "(code active sew-move-turret)": [[109, "v1", "art-joint-anim"]], + "(method 162 sew-laser-turret)": [ + [41, "v1", "process-focusable"], + [45, "v1", "process-focusable"], + [49, "v1", "process-focusable"] + ], + "(trans alert sew-laser-turret)": [ + [181, "a2", "process-focusable"], + [185, "a2", "process-focusable"], + [189, "a2", "process-focusable"] + ], + "check-enemy": [ + [19, "a0", "collide-shape-moving"], + [17, "a0", "collide-shape-moving"] + ], + "(code saberfish-sitting-on-land saberfish)": [[10, "v1", "art-joint-anim"]], + "(code saberfish-crawl-out-of-tube saberfish)": [ + [37, "v1", "art-joint-anim"] + ], + "(code stare-idle saberfish)": [[22, "v1", "art-joint-anim"]], + "(code attack saberfish)": [ + [17, "v1", "art-joint-anim"], + [190, "v1", "art-joint-anim"], + [130, "v1", "art-joint-anim"] + ], + "(code water-land saberfish)": [[16, "v1", "art-joint-anim"]], + "(code active saberfish)": [[40, "v1", "art-joint-anim"]], + "(code water-impact saberfish)": [[16, "v1", "art-joint-anim"]], + "(enter water-impact saberfish)": [[5, "t9", "(function none)"]], + "(code knocked-recover saberfish)": [ + [23, "v1", "ragdoll-proc"], + [43, "v1", "art-joint-anim"], + [83, "v1", "art-joint-anim"] + ], + "(code knocked-recover-water saberfish)": [ + [23, "v1", "ragdoll-proc"], + [49, "v1", "art-joint-anim"] + ], + "(method 50 saberfish)": [ + [5, "v1", "collide-shape-prim-group"], + [20, "v1", "collide-shape-prim-group"] + ], + "(code diving-into-water saberfish)": [ + [15, "gp", "art-joint-anim"], + [30, "gp", "art-joint-anim"] + ], + "(code transition-terrain-jump-from-water)": [[14, "v1", "art-joint-anim"]], + "(code transition-terrain-jump-from-land)": [[43, "v1", "art-joint-anim"]], + "saberfish-chase-post": [ + [13, "a0", "process-focusable"], + [16, "a0", "process-focusable"] + ], + "(trans hostile saberfish)": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(enter swimming-hostile saberfish)": [ + [8, "t9", "(function none)"], + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"] + ], + "turbo-swim": [[14, "v1", "art-joint-anim"]], + "(code transition-terrain-move-towards-initial-jump saberfish)": [ + [14, "t9", "(function none)"] + ], + "(method 241 saberfish)": [[11, "v1", "ragdoll-proc"]], + "(method 240 saberfish)": [ + [13, "s5", "ragdoll-proc"], + [19, "s5", "ragdoll-proc"], + [22, "s5", "ragdoll-proc"] + ], + "(method 125 saberfish)": [ + [14, "s5", "ragdoll-proc"], + [35, "s5", "ragdoll-proc"], + [57, "s5", "ragdoll-proc"] + ], + "(method 242 saberfish)": [[43, "a2", "ragdoll-proc"]], + "(trans swimming-hostile saberfish)": [ + [20, "s5", "process-focusable"], + [118, "a0", "process-focusable"], + [144, "v1", "float"] + ], + "(method 231 saberfish)": [ + ["_stack_", 72, "float"], + ["_stack_", 76, "float"], + ["_stack_", 84, "float"] + ], + "(method 97 saberfish)": [[20, "a1", "art-joint-anim"]], + "(method 96 saberfish)": [[16, "a1", "art-joint-anim"]], + "(method 98 saberfish)": [[22, "a1", "art-joint-anim"]], + "(method 237 saberfish)": [[21, "v0", "saberfish-spawner-query-msg"]], + "(method 238 saberfish)": [ + ["_stack_", 196, "float"], + ["_stack_", 252, "float"], + ["_stack_", 256, "float"], + ["_stack_", 528, "float"], + ["_stack_", 532, "float"] + ], + "(method 82 saberfish)": [[[8, 29], "s5", "saberfish-spawner-query-msg"]], + "(method 225 saberfish)": [[6, "v1", "vector"]], + "(method 220 saberfish)": [ + [17, "s4", "process-focusable"], + [21, "s4", "process-focusable"], + [26, "s4", "process-focusable"], + [45, "s4", "process-focusable"], + [48, "s4", "process-focusable"] + ], + "(method 216 saberfish)": [[154, "v1", "process-focusable"]], + "(method 214 saberfish)": [[18, "v1", "collide-shape-prim-group"]], + "(method 215 saberfish)": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(method 24 saberfish-spawner)": [["_stack_", 48, "float"]], + "(method 11 saberfish-spawner)": [ + [194, "v0", "vector"], + ["_stack_", 16, "res-tag"] + ], + "(method 11 saberfish-spawn-manager-base)": [["_stack_", 16, "res-tag"]], + "(method 26 saberfish-spawner)": [ + [[9, 49], "gp", "saberfish-spawner-query-msg"], + [[77, 85], "v1", "saberfish-spawner-command"], + [161, "v1", "saberfish-spawn-query"], + [[111, 164], "v1", "saberfish-spawn-query"], + [[105, 108], "v1", "saberfish-spawn-query"], + [[139, 149], "a2", "saberfish"] + ], + "saberfish-mgr-event-handler": [ + [[19, 28], "gp", "saberfish-spawner-query-msg"] + ], + "(method 97 kg-hopper)": [[16, "a1", "art-joint-anim"]], + "(method 96 kg-hopper)": [[16, "a1", "art-joint-anim"]], + "(method 98 kg-hopper)": [[16, "a1", "art-joint-anim"]], + "(method 85 kg-hopper)": [ + [33, "a1", "art-joint-anim"], + [86, "a1", "art-joint-anim"] + ], + "(method 86 kg-hopper)": [[27, "v1", "art-joint-anim"]], + "(trans hostile kg-hopper)": [ + [24, "gp", "process-focusable"], + [153, "gp", "process-focusable"], + [156, "gp", "process-focusable"] + ], + "set-sewg-electricity-scale!": [[[10, 14], "v1", "sewg-states"]], + "set-sewh-electricity-scale!": [[[12, 15], "v1", "sewh-states"]], + "update-mood-sewc": [[[17, 86], "gp", "sewc-states"]], + "update-mood-sewd": [[[17, 86], "gp", "sewd-states"]], + "update-mood-sewg": [[[17, 79], "gp", "sewg-states"]], + "update-mood-sewj": [[[17, 71], "gp", "sewj-states"]], + "update-mood-sewh": [[[17, 64], "gp", "sewh-states"]], + "(code attack neo-juicer)": [ + [14, "v1", "art-joint-anim"], + [87, "v1", "art-joint-anim"], + [123, "s3", "process-focusable"], + [281, "a0", "process-focusable"], + [284, "a0", "process-focusable"] + ], + "(code victory neo-juicer)": [[31, "gp", "art-joint-anim"]], + "(code notice neo-juicer)": [ + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"], + [83, "a1", "art-joint-anim"] + ], + "(code active neo-juicer)": [ + [118, "gp", "art-joint-anim"], + [201, "a1", "art-joint-anim"] + ], + "(method 194 neo-juicer)": [ + [21, "s3", "process-focusable"], + [24, "s3", "process-focusable"] + ], + "neo-juicer-proj-move": [[15, "s5", "process-focusable"]], + "(method 38 neo-juicer-shot)": [ + [33, "a0", "process-focusable"], + [36, "a0", "process-focusable"] + ], + "(method 35 neo-juicer-shot)": [ + [7, "v1", "(inline-array vector)"], + [11, "v1", "(inline-array vector)"], + [16, "v1", "(inline-array vector)"], + [20, "v1", "(inline-array vector)"] + ], + "(post hostile neo-juicer)": [ + [13, "a0", "process-focusable"], + [16, "a0", "process-focusable"] + ], + "neo-juicer-face-player-post": [ + [29, "gp", "process-focusable"], + [66, "gp", "process-focusable"], + [69, "gp", "process-focusable"] + ], + "(code circling neo-juicer)": [ + [205, "gp", "art-joint-anim"], + [113, "gp", "art-joint-anim"] + ], + "(code hit neo-juicer)": [[30, "v1", "art-joint-anim"]], + "(code taunt neo-juicer)": [[84, "v1", "art-joint-anim"]], + "(code stare neo-juicer)": [[23, "gp", "art-joint-anim"]], + "(method 196 neo-juicer)": [[4, "v1", "collide-shape-prim-group"]], + "(method 85 neo-juicer)": [ + [37, "a1", "art-joint-anim"], + [113, "s5", "art-joint-anim"], + [153, "s4", "art-joint-anim"] + ], + "(method 86 neo-juicer)": [ + [18, "s4", "art-joint-anim"], + [66, "s4", "art-joint-anim"] + ], + "(code victory neo-grenadier)": [ + [27, "v1", "art-joint-anim"], + [76, "v1", "art-joint-anim"] + ], + "(code hit neo-grenadier)": [ + [87, "gp", "art-joint-anim"], + [208, "a0", "process-focusable"] + ], + "(post attack neo-grenadier)": [ + [22, "a0", "process-focusable"], + [25, "a0", "process-focusable"] + ], + "(method 78 neo-grenadier)": [[41, "a0", "process-focusable"]], + "(code attack neo-grenadier)": [ + [74, "v1", "art-joint-anim"], + [159, "v1", "art-joint-anim"], + [287, "a0", "process-focusable"], + [290, "a0", "process-focusable"], + [309, "v1", "art-joint-anim"], + [358, "v1", "art-joint-anim"] + ], + "(event attack neo-grenadier)": [ + [23, "s4", "process-focusable"], + [26, "s4", "process-focusable"], + [129, "v1", "metalhead-grenade-shot"] + ], + "(exit spin-kick neo-grenadier)": [[2, "v1", "collide-shape-prim-group"]], + "(post spin-kick neo-grenadier)": [ + [22, "a0", "process-focusable"], + [25, "a0", "process-focusable"] + ], + "(method 86 neo-grenadier)": [ + [18, "s4", "art-joint-anim"], + [64, "a1", "art-joint-anim"], + [94, "v1", "art-joint-anim"] + ], + "(method 85 neo-grenadier)": [ + [76, "s4", "art-joint-anim"], + [160, "s5", "art-joint-anim"] + ], + "(code spin-kick neo-grenadier)": [[14, "v1", "art-joint-anim"]], + "(enter spin-kick neo-grenadier)": [[23, "v1", "collide-shape-prim-group"]], + "(code backup neo-grenadier)": [[10, "v1", "art-joint-anim"]], + "(code hostile neo-grenadier)": [[45, "gp", "art-joint-anim"]], + "(trans hostile neo-grenadier)": [ + [19, "a0", "process-focusable"], + [22, "a0", "process-focusable"], + [156, "a0", "process-focusable"] + ], + "(code active neo-grenadier)": [ + [136, "v1", "art-joint-anim"], + [198, "v1", "art-joint-anim"], + [51, "v1", "art-joint-anim"], + [291, "v1", "art-joint-anim"] + ], + "(method 193 neo-grenadier)": [ + [20, "s5", "process-focusable"], + [78, "s5", "process-focusable"] + ], + "sewer-frog-turn-to-face": [ + [62, "v1", "art-joint-anim"], + [123, "v1", "art-joint-anim"], + [199, "v1", "art-joint-anim"], + [264, "v1", "art-joint-anim"] + ], + "sewer-frog-hop": [ + [63, "v1", "art-joint-anim"], + [153, "v1", "art-joint-anim"] + ], + "(code attack sewer-frog)": [ + [20, "v1", "art-joint-anim"], + [77, "a0", "collide-shape-prim-group"], + [101, "v1", "art-joint-anim"], + [160, "v1", "collide-shape-prim-group"], + [196, "v1", "art-joint-anim"] + ], + "(post knocked sewer-frog)": [ + [16, "v1", "ragdoll-proc"], + [19, "v1", "ragdoll-proc"], + [23, "v1", "ragdoll-proc"], + [31, "t9", "(function none)"] + ], + "(method 167 sewer-frog)": [ + [20, "a0", "process-focusable"], + [23, "a0", "process-focusable"] + ], + "(method 59 sewer-frog)": [ + [18, "a0", "process-focusable"], + [21, "a0", "process-focusable"] + ], + "(method 108 sewer-frog)": [[19, "v1", "process-focusable"]], + "(method 125 sewer-frog)": [ + [14, "a0", "ragdoll-proc"], + [16, "a0", "ragdoll-proc"] + ], + "(trans hostile spydroid-orig)": [ + [29, "a0", "process-focusable"], + [32, "a0", "process-focusable"] + ], + "(method 82 spydroid-orig)": [ + [65, "s0", "process-drawable"], + [90, "s0", "process-drawable"], + [113, "s0", "process-drawable"], + [208, "v1", "attack-info"], + [214, "v1", "attack-info"], + [239, "v1", "vector"], + [308, "v1", "rigid-body-impact"], + [34, "v0", "vector"] + ], + "(code close-attack roboguard)": [ + [30, "v1", "art-joint-anim"], + [58, "v1", "art-joint-anim"], + [144, "a0", "collide-shape-prim-group"], + [168, "v1", "art-joint-anim"], + [196, "v1", "art-joint-anim"], + [271, "v1", "art-joint-anim"], + [299, "v1", "art-joint-anim"], + [355, "v1", "collide-shape-prim-group"] + ], + "(post knocked roboguard)": [[30, "t9", "(function none)"]], + "(post knocked-recover roboguard)": [[30, "t9", "(function none)"]], + "(post die roboguard)": [[30, "t9", "(function none)"]], + "(code notice roboguard)": [ + [23, "v1", "art-joint-anim"], + [87, "v1", "art-joint-anim"] + ], + "roboguard-turret-code": [ + [75, "a1", "art-joint-anim"], + [168, "a1", "art-joint-anim"] + ], + "(method 86 roboguard)": [ + [24, "a2", "art-joint-anim"], + [53, "a2", "art-joint-anim"] + ], + "(method 82 roboguard)": [[109, "v1", "rigid-body-impact"]], + "(method 59 roboguard)": [[41, "s5", "process-focusable"]], + "(method 85 roboguard)": [ + [30, "v1", "art-joint-anim"], + [58, "v1", "art-joint-anim"] + ], + "(anon-function 1 roboguard)": [ + [[10, 16], "s3", "roboguard"], + [11, "s2", "int"], + [14, "s2", "int"] + ], + "(anon-function 2 roboguard)": [[[2, 79], "s3", "roboguard"]], + "(method 33 vehicle)": [[1, "a1", "rigid-body-vehicle-constants"]], + "(method 49 vehicle)": [ + [67, "s3", "attack-info"], + [86, "s3", "attack-info"], + [249, "v1", "float"], + [275, "v1", "float"] + ], + "(method 33 squad-control)": [[34, "s2", "process-focusable"]], + "(method 32 squad-control)": [ + [21, "a0", "process-focusable"], + [24, "a0", "process-focusable"] + ], + "(method 26 squad-control)": [ + [20, "s5", "process-focusable"], + [29, "s5", "process-focusable"], + [31, "s5", "process-focusable"] + ], + "(method 24 squad-control)": [ + [36, "s4", "process-focusable"], + [45, "s4", "process-focusable"], + [47, "s4", "process-focusable"] + ], + "(method 50 vehicle)": [ + [31, "s1", "process-focusable"], + [35, "a0", "process-focusable"], + [34, "s1", "process-focusable"] + ], + "(method 13 was-squad-control)": [ + [42, "v1", "process-focusable"], + [47, "v1", "process-focusable"], + [127, "s3", "process-focusable"], + [133, "s3", "process-focusable"], + [138, "s3", "process-focusable"], + [142, "s3", "process-focusable"], + [69, "v1", "process-focusable"], + [265, "a1", "process-focusable"], + [233, "v1", "process-focusable"] + ], + "(method 35 was-squad-control)": [ + [37, "s4", "process-focusable"], + [62, "s4", "process-focusable"], + [93, "s4", "process-focusable"], + [121, "s4", "process-drawable"], + [112, "s4", "process-drawable"] + ], + "(method 34 vehicle-wheel)": [[1, "a1", "vehicle-wheel-init-params"]], + "(method 38 wvehicle)": [ + [635, "v1", "vector"], + [637, "v1", "vector"], + [638, "v1", "vector"], + [540, "v1", "vector"], + [[542, 547], "v1", "vector"], + [452, "v1", "vector"], + [[454, 459], "v1", "vector"], + [[418, 426], "a2", "vector"], + [[394, 402], "a2", "vector"] + ], + "(method 33 wvehicle)": [[1, "a1", "rigid-body-vehicle-constants"]], + "(enter explode wvehicle)": [ + [233, "a0", "process"], + [328, "v1", "process-drawable"] + ], + "(enter explode-into-nothing wvehicle)": [[48, "a0", "process"]], + "(post sink wvehicle)": [[40, "a1", "process-drawable"]], + "(method 49 wvehicle)": [ + [34, "a1", "process-drawable"], + [173, "v1", "race-decision-point"], + [175, "v1", "race-decision-point"], + [203, "v1", "race-decision-point"], + [217, "v1", "race-decision-point"], + [493, "a0", "process"], + [513, "v1", "vector"], + [[525, 529], "v1", "wvehicle-ai-drop-off-params"], + [21, "v1", "float"], + [477, "v1", "float"] + ], + "(method 77 wvehicle)": [ + [179, "s4", "process-focusable"], + [186, "s4", "process-focusable"], + [194, "s4", "process-focusable"] + ], + "(method 165 wvehicle)": [ + [102, "s2", "process-focusable"], + [126, "s2", "process-focusable"], + [150, "s2", "process-focusable"], + [164, "s2", "process-focusable"] + ], + "(trans idle kill-player-process)": [ + [24, "gp", "process-focusable"], + [33, "gp", "process-focusable"] + ], + "cshape-reaction-scorp-shot": [[15, "v1", "v-scorp-shot"]], + "(method 78 wvehicle)": [ + [262, "s1", "tire-trail-tracker"], + [271, "s1", "tire-trail-tracker"], + [287, "s1", "tire-trail-tracker"], + [309, "s1", "tire-trail-tracker"], + [322, "s1", "tire-trail-tracker"], + [358, "v1", "collide-shape-prim-group"] + ], + "(method 97 wvehicle)": [ + [[509, 528], "s4", "wvehicle-physics-work"], + [[133, 139], "s0", "wvehicle-physics-work"], + [[157, 169], "s0", "wvehicle-physics-work"], + [18, "v1", "wvehicle-physics-work"], + [[160, 174], "s4", "wvehicle-physics-work"] + ], + "(method 162 wvehicle)": [[268, "a0", "uint"]], + "(method 96 vehicle)": [[14, "v1", "collide-shape-prim-group"]], + "(method 93 wvehicle)": [ + [297, "a0", "uint"], + [304, "a0", "uint"], + [440, "a0", "uint"], + [447, "a0", "uint"], + [479, "a0", "uint"] + ], + "(method 62 wcar-snake-base)": [ + [4, "s5", "collide-shape-prim-group"], + [10, "s5", "collide-shape-prim-group"], + [16, "s5", "collide-shape-prim-group"], + [[22, 48], "s5", "collide-shape-prim-group"] + ], + "(method 62 v-turtle)": [ + [4, "s5", "collide-shape-prim-group"], + [[10, 35], "s5", "collide-shape-prim-group"] + ], + "(method 14 squad-control)": [ + [6, "a2", "int"], + [13, "a2", "int"], + [20, "v1", "int"] + ], + "target-pilot-init": [ + [73, "s4", "vehicle"], + [80, "s4", "vehicle"], + [[84, 99], "s4", "vehicle"], + [117, "s4", "vehicle"], + [[122, 266], "s4", "vehicle"] + ], + "target-pilot-exit": [ + [85, "s5", "vehicle"], + [92, "s5", "vehicle"] + ], + "target-pilot-post": [ + [96, "s5", "vehicle"], + [106, "s5", "vehicle"], + [113, "s5", "vehicle"], + [290, "s5", "vehicle"], + [298, "s5", "vehicle"], + [303, "s5", "vehicle"] + ], + "target-pilot-handler": [ + [31, "a0", "vehicle"], + [35, "a0", "vehicle"], + [94, "a0", "process"], + [182, "a0", "process"] + ], + "(enter target-pilot-edge-grab)": [ + [42, "a0", "process-focusable"], + [45, "a0", "process-focusable"] + ], + "(code target-pilot-impact)": [ + [102, "v1", "art-joint-anim"], + [157, "v1", "art-joint-anim"], + [220, "v1", "art-joint-anim"], + [275, "v1", "art-joint-anim"], + [329, "v1", "art-joint-anim"], + [389, "v1", "art-joint-anim"], + [447, "v1", "art-joint-anim"], + [517, "v1", "art-joint-anim"], + [572, "v1", "art-joint-anim"], + [626, "v1", "art-joint-anim"], + [686, "v1", "art-joint-anim"], + [744, "v1", "art-joint-anim"] + ], + "(code target-pilot-daxter-perch)": [ + [16, "v1", "art-joint-anim"], + [130, "v1", "art-joint-anim"], + [69, "v1", "art-joint-anim"] + ], + "(code target-pilot-get-on)": [ + [79, "gp", "art-joint-anim"], + [187, "a1", "vehicle"] + ], + "(trans target-pilot-get-on)": [ + [28, "gp", "process-focusable"], + [36, "gp", "vehicle"], + [47, "gp", "vehicle"] + ], + "(event target-pilot-grab)": [[33, "a0", "process"]], + "target-pilot-signal-ready": [ + [20, "gp", "vehicle"], + [35, "gp", "vehicle"] + ], + "target-daxter-pilot-car-anim-loop": [[70, "v1", "art-joint-anim"]], + "target-pilot-trans": [[14, "a0", "vehicle"]], + "(method 14 race-mesh)": [ + [21, "v1", "race-mesh-slice"], + [26, "v1", "race-mesh-slice"] + ], + "(method 11 race-mesh)": [ + [5, "v1", "race-mesh-slice"], + [9, "v1", "race-mesh-slice"] + ], + "(method 12 race-mesh)": [[13, "v1", "race-mesh-slice"]], + "(method 15 race-mesh)": [[10, "v1", "race-mesh-slice"]], + "(method 17 race-mesh)": [[35, "s3", "race-mesh-hash-cell"]], + "(method 19 race-mesh)": [[12, "v1", "race-mesh-slice"]], + "(method 18 race-mesh)": [ + [15, "a2", "race-mesh-hash-search"], + [31, "v1", "race-mesh-hash-cell"], + [45, "a2", "int"] + ], + "(trans tracking tire-trail-tracker)": [ + [15, "v1", "process-drawable"], + [22, "v1", "process-drawable"] + ], + "(method 19 tire-trail)": [ + [[5, 28], "s5", "tire-trail-crumb"], + [[5, 28], "s4", "tire-trail-crumb"] + ], + "vehicle-spawn": [[93, "gp", "vehicle"]], + "vehicle-spawn-hack": [[41, "gp", "vehicle"]], + "(method 11 w-parking-spot)": [[42, "v0", "vector"]], + "(method 21 w-parking-spot)": [ + [20, "s5", "vehicle"], + [22, "s5", "vehicle"] + ], + "(method 25 w-parking-spot)": [ + [13, "v1", "vehicle"], + [18, "v1", "vehicle"], + [27, "v1", "vehicle"] + ], + "(method 26 w-parking-spot)": [[15, "v1", "int"]], + "(method 62 v-snake)": [[[4, 48], "s5", "collide-shape-prim-group"]], + "(method 62 v-scorpion)": [[[4, 41], "s5", "collide-shape-prim-group"]], + "(method 62 v-toad)": [[[4, 41], "s5", "collide-shape-prim-group"]], + "(method 62 v-fox)": [[[4, 48], "s5", "collide-shape-prim-group"]], + "(method 62 v-rhino)": [[[4, 41], "s5", "collide-shape-prim-group"]], + "(method 62 v-mirage)": [[[4, 48], "s5", "collide-shape-prim-group"]], + "(method 62 v-x-ride)": [[[4, 48], "s5", "collide-shape-prim-group"]], + "(code part-tester-idle)": [[[6, 22], "s5", "process-drawable"]], + "(code down des-beast)": [[22, "v1", "art-joint-anim"]], + "des-beast-gun-swivel-callback": [[[19, 83], "s3", "des-beast"]], + "(code idle beast-rider)": [[10, "v1", "art-joint-anim"]], + "(trans idle beast-rider)": [[25, "v1", "process-drawable"]], + "(code impact beast-grenade)": [[33, "a0", "process"]], + "des-beast-gun-callback": [[[13, 76], "s4", "des-beast"]], + "(method 84 des-beast)": [ + [99, "s1", "process-drawable"], + [115, "s1", "process-drawable"], + [121, "s1", "process-drawable"], + [128, "s1", "process-drawable"], + [300, "s4", "touching-shapes-entry"], + [309, "s5", "process-drawable"] + ], + "(method 82 des-beast)": [[[25, 89], "s5", "attack-info"]], + "(method 26 task-manager-highlight-vehicle)": [ + [40, "a0", "process-focusable"] + ], + "(code active task-manager-highlight-vehicle-wait)": [ + [69, "t9", "(function none)"] + ], + "(method 26 task-manager-nest-hunt)": [[358, "v1", "process-focusable"]], + "(method 26 task-manager-highlight-vehicle-wait)": [ + [40, "a0", "process-focusable"] + ], + "(method 26 task-manager-temple-climb)": [ + [126, "s5", "process-focusable"], + [130, "s5", "process-focusable"] + ], + "(method 26 task-manager-desert-beast-battle)": [ + [39, "a0", "process-focusable"] + ], + "(method 26 task-manager-desert-hover)": [[58, "a0", "process-focusable"]], + "(trans idle sig-rider)": [ + [24, "a0", "vehicle"], + [26, "a0", "vehicle"] + ], + "(method 32 task-manager-temple)": [ + [129, "s5", "process-focusable"], + [167, "s5", "process-focusable"] + ], + "set-nstb-lights!": [[[19, 29], "v1", "nstb-states"]], + "update-mood-nsta": [[17, "v1", "nsta-states"]], + "update-mood-nstb": [[17, "v1", "nstb-states"]], + "(enter fail task-manager-desert-interceptors-attack)": [ + [ + 12, + "v0", + "(state resetter-params task-manager-desert-interceptors-attack)" + ] + ], + "(code retracting nst-cocoon-b)": [[10, "v1", "art-joint-anim"]], + "(code hit nst-cocoon-a)": [[115, "t9", "(function none)"]], + "(code notice nst-cocoon-a)": [[33, "v1", "art-joint-anim"]], + "(code falling nst-falling-stone-bridge)": [[75, "v1", "art-joint-anim"]], + "(event idle nst-light-barrier)": [ + [5, "v1", "attack-info"], + [7, "v1", "attack-info"], + [28, "v1", "process-focusable"] + ], + "(method 22 nst-collapsing-stone-bridge)": [ + [62, "s2", "pair"], + [81, "s2", "pair"], + [82, "v1", "pair"], + [95, "s2", "pair"], + [96, "v1", "pair"], + [97, "v1", "pair"], + [103, "s3", "pair"], + [102, "s3", "pair"], + [105, "s3", "pair"] + ], + "(method 26 task-manager-nest-cocoon-gas)": [ + [223, "a0", "process-focusable"] + ], + "birth-func-set-fog-num": [[21, "v1", "task-manager-nest-cocoon-gas"]], + "part-nest-bat1-path": [ + [13, "v1", "int"], + [86, "v1", "part-tracker"], + [90, "a0", "part-tracker"] + ], + "part-nest-bat2-path": [ + [13, "v1", "int"], + [86, "a0", "part-tracker"] + ], + "part-nest-bat3-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-nest-bat4-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-nest-bat5-path": [ + [13, "v1", "int"], + [86, "a0", "part-tracker"] + ], + "part-nest-bat6-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-nest-bat7-path": [ + [13, "v1", "int"], + [86, "a0", "part-tracker"] + ], + "part-nest-bat8-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-nest-bat9-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-nest-bat10-path": [ + [13, "v1", "int"], + [86, "a0", "part-tracker"] + ], + "(method 32 task-manager-nest-cocoons)": [["_stack_", 16, "res-tag"]], + "(code active task-manager-nest-cocoons)": [ + [155, "v1", "(pointer process)"], + [168, "gp", "handle"] + ], + "(method 26 task-manager-nest-cocoons)": [[156, "a0", "process-focusable"]], + "(method 33 task-manager-nest-cocoons)": [ + [77, "v1", "process"], + [80, "v1", "process"] + ], + "(code resolution task-manager-nest-cocoons)": [ + [102, "t9", "(function none)"] + ], + "(code attack egg-spider)": [ + [14, "v1", "art-joint-anim"], + [88, "v1", "art-joint-anim"] + ], + "(method 82 egg-spider)": [ + [[8, 40], "s1", "attack-info"], + [54, "v1", "rigid-body-impact"], + ["_stack_", 16, "float"], + ["_stack_", 32, "float"] + ], + "(post idle egg-spider)": [[4, "t9", "(function none)"]], + "(method 194 egg-spider)": [ + [26, "s2", "process-focusable"], + [33, "s2", "process-focusable"], + [39, "s2", "process-focusable"], + [78, "s2", "process-focusable"], + [108, "s2", "process-focusable"], + [111, "s2", "process-focusable"] + ], + "(code on-vehicle egg-spider)": [ + [10, "v1", "art-joint-anim"], + [62, "v1", "art-joint-anim"] + ], + "(exit on-vehicle egg-spider)": [ + [12, "a0", "wvehicle"], + [15, "a0", "wvehicle"] + ], + "(code ambush egg-spider)": [ + [143, "a0", "process-focusable"], + [146, "a0", "process-focusable"], + [209, "v1", "art-joint-anim"] + ], + "(code jump-on-vehicle egg-spider)": [[10, "v1", "art-joint-anim"]], + "(trans attack egg-spider)": [ + [29, "a0", "process-focusable"], + [35, "a0", "process-focusable"], + [38, "a0", "process-focusable"] + ], + "(trans jump-on-vehicle egg-spider)": [ + [17, "s4", "wvehicle"], + [24, "s4", "wvehicle"], + [28, "s4", "wvehicle"] + ], + "(trans on-vehicle egg-spider)": [ + [17, "s5", "process-focusable"], + [26, "s5", "wvehicle"], + [33, "s5", "wvehicle"], + [40, "s5", "wvehicle"] + ], + "(trans hostile egg-spider)": [ + [66, "gp", "wvehicle"], + [77, "gp", "wvehicle"], + [88, "gp", "wvehicle"], + [103, "gp", "wvehicle"], + [125, "gp", "wvehicle"], + [142, "gp", "wvehicle"], + [151, "gp", "wvehicle"], + [169, "gp", "wvehicle"], + [172, "gp", "wvehicle"] + ], + "(trans idle spider-manager)": [ + [252, "gp", "process-focusable"], + [255, "gp", "process-focusable"], + [265, "gp", "process-focusable"] + ], + "(method 23 spider-manager)": [ + [18, "v1", "egg-spider"], + [24, "v1", "egg-spider"], + [34, "s3", "int"] + ], + "(method 11 spider-manager)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"] + ], + "ripple-find-height": [[[31, 82], "s4", "mei-ripple"]], + "(method 21 task-manager-desert-hover)": [["_stack_", 16, "res-tag"]], + "(method 11 nst-metalhead-eggs)": [["_stack_", 16, "res-tag"]], + "(method 11 nst-falling-stone-bridge)": [["_stack_", 16, "res-tag"]], + "(method 11 sew-m-gate)": [["_stack_", 16, "res-tag"]], + "(method 9 turret-control)": [[344, "a0", "collide-shape-prim"]], + "(method 62 v-marauder)": [[[4, 53], "s5", "collide-shape-prim-group"]], + "(method 62 v-marauder-b)": [[[4, 53], "s5", "collide-shape-prim-group"]], + "(method 15 wasdoors-manager)": [ + [29, "s5", "process-focusable"], + [34, "s5", "process-focusable"] + ], + "wasdoors-cleanup": [[25, "s5", "process-focusable"]], + "update-mood-wascityb": [[[39, 51], "s4", "wascityb-states"]], + "set-wascityb-turret-flash!": [[10, "v1", "wascityb-states"]], + "tizard-tilt-jmod-func": [ + [11, "v1", "tizard"], + [16, "v1", "tizard"], + ["_stack_", 32, "tizard"], + ["_stack_", 36, "int"], + [25, "a1", "tizard"] + ], + "(code die tizard)": [[41, "v1", "art-joint-anim"]], + "(code turning tizard)": [ + [57, "v1", "art-joint-anim"], + [115, "v1", "art-joint-anim"] + ], + "(code walk tizard)": [[14, "v1", "art-joint-anim"]], + "(method 34 tizard)": [["_stack_", 608, "pat-surface"]], + "(method 168 wvehicle)": [ + [52, "s5", "process-focusable"], + [61, "s5", "process-focusable"], + [63, "s5", "process-focusable"] + ], + "(method 90 wvehicle)": [ + [58, "a0", "uint"], + [65, "a0", "uint"], + [146, "a0", "process-focusable"], + [89, "v1", "uint"] + ], + "(event idle des-plant)": [[[12, 22], "s4", "attack-info"]], + "(method 31 des-plant)": [[[10, 23], "s5", "collide-shape-prim-group"]], + "(event idle des-cactus-obstacle)": [ + [21, "s2", "process-focusable"], + [[142, 144], "v1", "touching-shapes-entry"], + [142, "a2", "touching-shapes-entry"], + [147, "a2", "touching-shapes-entry"] + ], + "(code up des-jump-bridge)": [ + [23, "v1", "art-joint-anim"], + [44, "v1", "art-joint-anim"] + ], + "(code lower des-draw-bridge)": [[25, "v1", "art-joint-anim"]], + "(code raise des-draw-bridge)": [[15, "v1", "art-joint-anim"]], + "(code down des-draw-bridge)": [[18, "v1", "art-joint-anim"]], + "(code raise des-jump-bridge)": [ + [15, "v1", "art-joint-anim"], + [68, "v1", "art-joint-anim"] + ], + "sparticle-duststorm-move": [[27, "v1", "float"]], + "(event track desert-dust-storm)": [ + [52, "a0", "vector"], + [4, "v1", "float"], + [55, "v1", "float"], + [16, "v1", "float"] + ], + "(event hold-pos desert-dust-storm)": [ + [37, "a0", "vector"], + [40, "v1", "float"], + [9, "v1", "float"] + ], + "(method 17 desert-dust-storm)": [ + [27, "v1", "float"], + [65, "v1", "float"], + [82, "v1", "float"] + ], + "(method 20 desert-dust-storm)": [ + [129, "v1", "float"], + [153, "v1", "float"] + ], + "(method 18 desert-dust-storm)": [ + [54, "v1", "float"], + [87, "v1", "float"], + [106, "v1", "float"] + ], + "(method 19 desert-dust-storm)": [ + [70, "v1", "float"], + [96, "v1", "float"], + [123, "v1", "float"] + ], + "update-mood-desertg": [[38, "s5", "desert-states"]], + "(code complete task-manager-desert-artifact-race)": [ + [66, "t9", "(function none)"] + ], + "(method 24 was-artifact)": [ + [29, "a1", "process-drawable"], + [30, "a0", "collide-shape"] + ], + "(method 21 task-manager-desert-artifact-race)": [ + [182, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(code active task-manager-desert-artifact-race)": [ + [352, "v1", "(pointer process)"], + [434, "s5", "process-drawable"], + [442, "s5", "process-drawable"], + [448, "s5", "process-drawable"], + [466, "s5", "process-drawable"], + [544, "s5", "process-drawable"], + [257, "v1", "(pointer process)"] + ], + "(enter fail task-manager-desert-artifact-race)": [ + [12, "v0", "(state resetter-params task-manager)"] + ], + "(method 21 task-manager-desert-turtle-training)": [ + [36, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(method 26 task-manager-desert-turtle-training)": [ + [30, "a0", "process-drawable"], + [35, "a0", "process-drawable"], + [39, "a0", "wvehicle"], + [42, "a0", "wvehicle"] + ], + "(code active task-manager-desert-turtle-training)": [ + [554, "v1", "wvehicle"], + [1064, "v0", "(state task-manager)"], + [1066, "t9", "(function none)"] + ], + "(method 9 race-info)": [[4, "v0", "entity-race-mesh"]], + "(method 20 race-manager)": [[23, "v0", "entity-race-mesh"]], + "(method 9 racer-state)": [ + [16, "v1", "process-focusable"], + [23, "v1", "process-focusable"] + ], + "(method 11 race-state)": [ + [[94, 103], "s5", "process-drawable"], + [[156, 162], "s5", "process-drawable"] + ], + "(method 19 race-state)": [[78, "a3", "process-drawable"]], + "(post active race-manager)": [[71, "v1", "rigid-body-object"]], + "(method 177 wvehicle)": [ + [64, "a0", "uint"], + [71, "a0", "uint"], + [[185, 196], "v1", "process-drawable"] + ], + "wland-driver-pilot-trans": [[[14, 19], "a0", "wvehicle"]], + "(trans idle kleever-rider)": [[25, "v1", "process-drawable"]], + "kleever-pilot-trans": [[[14, 19], "a0", "wvehicle"]], + "(code finished task-manager-desert-course-race)": [ + [83, "t9", "(function none)"] + ], + "(code active task-manager-desert-course-race)": [ + [18, "t9", "(function none)"] + ], + "(code complete task-manager-race)": [[11, "t9", "(function none)"]], + "(code active task-manager-bbush-rally)": [[59, "t9", "(function none)"]], + "(code active task-manager-bbush-time-trial-1)": [ + [70, "t9", "(function none)"] + ], + "(method 33 task-manager-bbush-rally)": [[32, "s3", "vehicle"]], + "(method 33 task-manager-desert-course-race)": [[27, "s3", "vehicle"]], + "task-manager-desert-course-race-pre-race-sequence": [ + [58, "v1", "process-focusable"], + [64, "v1", "process-focusable"], + [199, "a0", "process-focusable"], + [320, "v1", "process-focusable"], + [375, "v1", "process-focusable"] + ], + "(code active task-manager-race)": [ + [109, "a1", "process-focusable"], + [263, "t9", "(function none)"] + ], + "(event closed tpl-break-door-a)": [[[9, 22], "v1", "attack-info"]], + "(event closed tpl-break-alcove)": [[[4, 17], "v1", "attack-info"]], + "(method 11 tpl-fan-three)": [[99, "v0", "(pointer float)"]], + "(method 11 tpl-spindle)": [[131, "v0", "(pointer float)"]], + "(method 11 tpl-fan-two)": [[99, "v0", "(pointer float)"]], + "(event idle-up tpl-spike-trap)": [ + [42, "gp", "process-drawable"], + [83, "gp", "process-focusable"] + ], + "(code idle-down tpl-spike-trap)": [[29, "v1", "art-joint-anim"]], + "(code idle-up tpl-spike-trap)": [[29, "v1", "art-joint-anim"]], + "(code alert tpl-holo-eye)": [[27, "v1", "art-joint-anim"]], + "(code idle tpl-holo-eye)": [ + [10, "v1", "art-joint-anim"], + [92, "v1", "art-joint-anim"], + [158, "v1", "art-joint-anim"] + ], + "(event idle tpl-bouncer)": [[[120, 127], "v1", "attack-info"]], + "(trans active task-manager-temple-oracle-powerup)": [ + [14, "gp", "process-drawable"] + ], + "(code flip tpl-spinning-plat)": [[18, "v0", "sound-rpc-set-param"]], + "(trans flip tpl-spinning-plat)": [ + [2, "v1", "collide-shape-prim-group"], + [26, "v0", "sound-rpc-set-param"] + ], + "(event idle tpl-door-switch)": [[5, "v1", "attack-info"]], + "(method 11 tpl-watcher)": [ + [51, "v0", "(pointer actor-group)"], + [156, "s3", "particle-local-space-info"], + [159, "s3", "particle-local-space-info"], + [154, "s3", "particle-local-space-info"], + [161, "s3", "particle-local-space-info"], + ["_stack_", 16, "res-tag"] + ], + "(code down tpl-door-switch)": [ + [26, "v1", "art-joint-anim"], + [99, "v0", "(pointer actor-group)"], + ["_stack_", 96, "res-tag"] + ], + "(method 11 tpl-watcher-manager)": [["_stack_", 16, "res-tag"]], + "(method 11 hover-training-manager)": [["_stack_", 16, "res-tag"]], + "(method 11 tpl-token)": [["_stack_", 16, "res-tag"]], + "(method 11 tpl-holo-eye)": [["_stack_", 16, "res-tag"]], + "(code firing tpl-watcher)": [[143, "a1", "process-drawable"]], + "(event firing tpl-watcher)": [[[4, 13], "v1", "attack-info"]], + "(event idle tpl-watcher)": [[[12, 21], "v1", "attack-info"]], + "(code open tpl-gate)": [[26, "v1", "art-joint-anim"]], + "(code close tpl-gate)": [[59, "v1", "art-joint-anim"]], + "(code until-watchers-dead tpl-watcher-manager)": [ + [73, "a0", "process-focusable"] + ], + "(event standing-down tpl-watcher)": [[[12, 21], "v1", "attack-info"]], + "(event flip tpl-spinning-plat)": [ + [29, "gp", "process-focusable"], + [71, "gp", "process-focusable"] + ], + "shoot-at-jak": [[61, "s3", "process-focusable"]], + "update-mood-templea": [[[34, 69], "s5", "templea-states"]], + "(code attack tomb-baby-spider)": [[30, "v1", "art-joint-anim"]], + "(exit attack tomb-baby-spider)": [[2, "v1", "collide-shape-prim-group"]], + "(code attack-stop tomb-baby-spider)": [[10, "v1", "art-joint-anim"]], + "(method 87 tomb-baby-spider)": [ + [49, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"], + [[127, 140], "v1", "collide-shape-prim-group"] + ], + "(method 86 tomb-baby-spider)": [ + [13, "a2", "art-joint-anim"], + [50, "a2", "art-joint-anim"] + ], + "(method 85 tomb-baby-spider)": [ + [[2, 11], "a2", "collide-shape-prim-group"], + [36, "a2", "art-joint-anim"], + [73, "a2", "art-joint-anim"] + ], + "(enter attack tomb-baby-spider)": [[14, "v1", "collide-shape-prim-group"]], + "(code notice tomb-baby-spider)": [ + [32, "a0", "process-focusable"], + [35, "a0", "process-focusable"], + [57, "v1", "art-joint-anim"], + [120, "v1", "art-joint-anim"] + ], + "(code active tomb-baby-spider)": [ + [30, "v1", "art-joint-anim"], + [126, "v1", "art-joint-anim"], + [188, "v1", "art-joint-anim"], + [297, "v1", "art-joint-anim"] + ], + "(code collapsing tpl-break-bridge)": [ + [27, "a2", "collide-shape-prim-group"] + ], + "(event idle tpl-break-bridge)": [[12, "v1", "attack-info"]], + "(code drop tpl-stone-break)": [[14, "v1", "art-joint-anim"]], + "(trans drop tpl-stone-break)": [[34, "v0", "sound-rpc-set-param"]], + "(code hostile des-beast-2)": [ + [14, "v1", "art-joint-anim"], + [42, "v1", "art-joint-anim"] + ], + "(event hidden quantum-reflector)": [[[12, 34], "v1", "vector"]], + "(enter impact beast-grenade-2)": [[59, "a0", "process"]], + "(method 82 des-beast-2)": [[54, "v1", "float"]], + "(trans die-run des-beast-2)": [ + [102, "v1", "(pointer process)"], + [94, "v1", "handle"] + ], + "(post hostile des-beast-2)": [ + ["_stack_", 500, "float"], + ["_stack_", 336, "float"] + ], + "(anon-function 23 des-beast-2)": [ + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"] + ], + "(method 140 des-beast-2)": [ + [22, "s4", "process-focusable"], + [31, "s4", "process-focusable"], + [33, "s4", "process-focusable"] + ], + "(anon-function 2 des-beast-2)": [[[13, 38], "s4", "des-beast-2"]], + "(anon-function 1 des-beast-2)": [[[13, 46], "s4", "des-beast-2"]], + "(event idle scorpion-gun-aim)": [[7, "a0", "vector"]], + "(post active scorpion-gun-manager)": [[25, "v1", "vehicle"]], + "(enter active scorpion-gun-manager)": [[76, "gp", "vehicle"]], + "(method 24 scorpion-gun)": [ + [14, "gp", "process-drawable"], + [20, "gp", "process-drawable"], + [26, "gp", "process-focusable"] + ], + "scorpion-gun-handler": [[110, "v1", "vector"]], + "(code cam-scorpion-gun)": [[26, "v0", "handle"]], + "(method 21 scorpion-gun-manager)": [ + [13, "v1", "process-drawable"], + [19, "v1", "process-drawable"] + ], + "(method 31 mh-flyer-shot)": [ + [85, "s3", "process-focusable"], + [91, "s3", "process-focusable"], + [93, "s3", "process-focusable"], + ["_stack_", 96, "float"], + ["_stack_", 112, "float"] + ], + "mh-flyer-shot-move": [ + [21, "s2", "process-focusable"], + [27, "s2", "process-focusable"], + [29, "s2", "process-focusable"] + ], + "(enter impact mh-flyer-shot)": [[51, "a0", "process"]], + "(code orbiting mh-flyer)": [[14, "v1", "art-joint-anim"]], + "scorpion-gun-manager-handler": [ + [23, "v0", "vector"], + [42, "v1", "vector"] + ], + "(anon-function 33 scorpion-gun)": [[2, "v1", "scorpion-gun"]], + "(anon-function 34 scorpion-gun)": [[6, "v1", "scorpion-gun"]], + "aim-post": [ + [180, "s4", "process-drawable"], + [189, "s4", "process-focusable"], + [140, "s4", "process"], + [34, "v0", "(array collide-shape)"], + [291, "a1", "collide-shape-prim"], + ["_stack_", 1312, "rgba"] + ], + "(code impact turret-shot)": [[4, "v1", "collide-shape-prim-group"]], + "(event impact turret-shot)": [[13, "v1", "process-drawable"]], + "target-turret-stance-handler": [[102, "gp", "attack-info"]], + "(code target-turret-get-on)": [[169, "v1", "art-joint-anim"]], + "target-for-turret-get-off-play": [[14, "v1", "art-joint-anim"]], + "target-turret-get-off-play": [[14, "v1", "art-joint-anim"]], + "target-for-turret-get-on-play": [[74, "a0", "process-drawable"]], + "(code cam-turret)": [ + [19, "a0", "target"], + [22, "a0", "target"], + [35, "gp", "target-turret"], + [39, "gp", "target-turret"] + ], + "target-turret-get-on-play": [ + [13, "v1", "art-joint-anim"], + [102, "a0", "process-drawable"] + ], + "target-for-turret-stance-play": [ + [80, "v0", "float"], + [81, "v1", "float"] + ], + "(post shutdown target-turret)": [[33, "t9", "(function none)"]], + "(post active target-turret)": [[54, "t9", "(function none)"]], + "(method 56 target-turret)": [ + [[9, 16], "v0", "vector"], + [28, "v0", "vector"] + ], + "(method 14 nav-network)": [[[4, 8], "a3", "list-node"]], + "(method 11 hover-formation)": [[68, "v0", "vector"]], + "(method 14 hover-formation-control)": [ + [18, "v0", "path-control"], + [131, "a0", "process-focusable"], + [35, "a0", "process-focusable"], + [134, "a0", "process-focusable"] + ], + "(method 13 hover-formation-control)": [ + [16, "v0", "path-control"], + [46, "s1", "process-focusable"], + [39, "s1", "process-focusable"], + [33, "a0", "process-focusable"], + [49, "s1", "process-focusable"] + ], + "(method 16 hover-formation-control)": [ + [32, "s4", "process-focusable"], + [52, "s4", "process-focusable"], + [55, "s4", "process-focusable"] + ], + "(method 11 hover-formation-control)": [ + [43, "a0", "process-focusable"], + [46, "a0", "process-focusable"] + ], + "(method 15 nav-network)": [ + [64, "a2", "nav-network-path-node"], + [[69, 87], "a2", "nav-network-path-node"], + [[109, 120], "a2", "nav-network-path-node"], + [[37, 40], "v1", "nav-network-path-node"] + ], + "(method 13 nav-network)": [ + [47, "a0", "nav-network-path-node"], + [44, "a0", "nav-network-path-node"] + ], + "(method 25 nav-network)": [[[59, 117], "s2", "nav-network-path-node"]], + "(method 26 nav-network)": [ + [[13, 15], "v1", "hover-nav-sphere"], + [[91, 102], "a3", "hover-nav-sphere"] + ], + "(method 27 nav-network)": [ + [[21, 23], "v1", "hover-nav-sphere"], + [24, "v1", "hover-nav-sphere"] + ], + "(method 28 nav-network)": [ + [81, "v1", "hover-nav-sphere"], + [5, "v1", "hover-nav-sphere"], + [[12, 14], "v1", "hover-nav-sphere"] + ], + "(method 17 hover-nav-control)": [[7, "a0", "collide-shape-prim-group"]], + "(method 32 hover-nav-control)": [ + [[4, 61], "v1", "hover-nav-path-segment"], + [5, "a2", "hover-nav-path-segment"], + [28, "a2", "hover-nav-path-segment"] + ], + "(method 37 nav-network)": [[36, "v0", "string"]], + "(method 11 hover-nav-control)": [["_stack_", 144, "float"]], + "(method 59 hover-enemy)": [ + [24, "a0", "process-focusable"], + [27, "a0", "process-focusable"], + [35, "s5", "process-focusable"], + [38, "s5", "process-focusable"], + [23, "s5", "process-focusable"] + ], + "hover-enemy-fly-code": [ + [21, "gp", "art-joint-anim"], + [43, "gp", "art-joint-anim"], + [65, "gp", "art-joint-anim"] + ], + "(method 169 hover-enemy)": [["_stack_", 608, "float"]], + "(method 176 hover-enemy)": [[[93, 95], "v1", "vector"]], + "(enter ambush hover-enemy)": [[71, "a0", "collide-shape-prim-group"]], + "(code flying-death hover-enemy)": [[20, "v1", "art-joint-anim"]], + "(enter flying-death hover-enemy)": [[46, "a1", "process-drawable"]], + "(method 159 hover-enemy)": [[[6, 11], "a0", "collide-shape-prim-group"]], + "hover-enemy-hostile-post": [[14, "v0", "hover-formation"]], + "(method 82 hover-enemy)": [ + [122, "v1", "vector"], + [147, "a0", "collide-shape-prim-group"] + ], + "(code flying-death-explode flamer-hover)": [[14, "v1", "art-joint-anim"]], + "(code knocked-recover flamer-hover)": [[14, "v1", "art-joint-anim"]], + "(code attack flamer-hover)": [ + [19, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + "(event attack flamer-hover)": [ + [22, "s5", "process-focusable"], + [25, "s5", "process-focusable"] + ], + "(method 50 flamer-hover)": [ + [10, "v1", "collide-shape-prim-group"], + [30, "v1", "collide-shape-prim-group"] + ], + "(method 85 flamer-hover)": [ + [100, "a1", "art-joint-anim"], + [70, "s4", "art-joint-anim"] + ], + "(method 30 hover-nav-control)": [[205, "a1", "pointer"]], + "(method 0 hover-formation-control)": [[136, "v0", "int"]], + "(method 121 robo-hover)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + ["_stack_", 48, "res-tag"], + ["_stack_", 64, "res-tag"], + [176, "v0", "(pointer float)"], + [114, "v0", "(pointer float)"], + [88, "v0", "(pointer actor-group)"] + ], + "robo-hover-arm-jmod": [ + [[13, 55], "s4", "robo-hover"], + [52, "s2", "int"] + ], + "(code ambush-attack robo-hover)": [[37, "v1", "art-joint-anim"]], + "(method 183 robo-hover)": [ + [31, "a0", "process-focusable"], + [34, "a0", "process-focusable"] + ], + "(post hostile robo-hover)": [[4, "t9", "(function none)"]], + "(post kick-attack robo-hover)": [ + [34, "a0", "process-focusable"], + [37, "a0", "process-focusable"] + ], + "(code attack robo-hover)": [[37, "v1", "art-joint-anim"]], + "(post ambush-attack robo-hover)": [[3, "t9", "(function none)"]], + "(post notice robo-hover)": [[4, "t9", "(function none)"]], + "(code knocked-recover robo-hover)": [ + [26, "v1", "art-joint-anim"], + [55, "v1", "ragdoll-proc"] + ], + "(post knocked robo-hover)": [[6, "t9", "(function none)"]], + "(method 82 robo-hover)": [ + [9, "v1", "attack-info"], + [96, "v1", "attack-info"], + [117, "v1", "rigid-body-impact"] + ], + "(method 56 robo-hover)": [[21, "a1", "process-drawable"]], + "(code wait-to-trigger-movie tow-large-plat)": [[10, "v1", "art-joint-anim"]], + "(code lower tow-large-plat)": [[10, "v1", "art-joint-anim"]], + "(code idle tow-large-plat)": [[10, "v1", "art-joint-anim"]], + "(code lowered tow-large-plat)": [[10, "v1", "art-joint-anim"]], + "(code idle tow-tentacle)": [[13, "v1", "art-joint-anim"]], + "(method 26 tow-spawner)": [ + [98, "s3", "prebot-small-eco-creature"], + [[101, 111], "s3", "prebot-small-eco-creature"] + ], + "(method 25 tow-spawner)": [[28, "v0", "(array collide-shape)"]], + "(code spawning tow-spawner)": [ + [14, "v1", "art-joint-anim"], + [152, "v1", "art-joint-anim"], + [209, "v1", "art-joint-anim"] + ], + "(code active tow-spawner)": [[14, "v1", "art-joint-anim"]], + "(method 11 actor-group-watcher)": [["_stack_", 16, "res-tag"]], + "(method 11 tow-large-plat)": [["_stack_", 16, "res-tag"]], + "update-mood-forest": [[[23, 71], "gp", "forest-states"]], + "set-forest-gun-flash!": [[13, "v1", "forest-states"]], + "set-forest-fog-interp!": [ + [21, "v1", "forest-states"], + [10, "v1", "forest-states"] + ], + "(method 23 for-log)": [[53, "v1", "process-drawable"]], + "(method 24 for-log)": [ + [8, "a0", "water-anim"], + [10, "a0", "water-anim"] + ], + "for-pillar-event-handler": [[27, "v1", "focus"]], + "for-log-callback": [ + [[9, 39], "s4", "for-log"], + [[10, 38], "s3", "int"] + ], + "(event idle for-break-bridge-board)": [ + [18, "a0", "touching-shapes-entry"], + [21, "a0", "collide-shape-prim-group"], + [25, "a0", "collide-shape-prim-group"], + [27, "v1", "attack-info"], + [17, "gp", "touching-shapes-entry"], + [62, "gp", "touching-shapes-entry"], + [44, "gp", "touching-shapes-entry"] + ], + "(method 26 task-manager-forest-plants)": [ + [93, "s5", "hud"], + [131, "s5", "hud"] + ], + "(anon-function 7 forest-kill-plants)": [[10, "a1", "connection-minimap"]], + "(code active task-manager-forest-plants)": [ + [764, "v1", "(pointer process)"], + [766, "s5", "handle"], + [760, "s5", "handle"], + [763, "s5", "handle"], + [761, "v1", "handle"] + ], + "(method 32 task-manager-forest-machine)": [["_stack_", 16, "res-tag"]], + "(method 32 task-manager-forest-plants)": [["_stack_", 16, "res-tag"]], + "(code active task-manager-forest-machine-resolution)": [ + [78, "v1", "int"], + ["_stack_", 16, "res-tag"] + ], + "set-railx-light-brightness-fora!": [ + [[30, 35], "v1", "railx-states-fora"], + [[13, 18], "v1", "railx-states-fora"] + ], + "(anon-function 21 forest-tasks)": [ + [13, "t9", "(function mood-context symbol)"] + ], + "(anon-function 4 forest-tasks)": [ + [13, "t9", "(function mood-context symbol)"] + ], + "(anon-function 10 forest-tasks)": [ + [13, "t9", "(function mood-context symbol)"] + ], + "(anon-function 11 forest-tasks)": [ + [13, "t9", "(function mood-context symbol)"] + ], + "(code die mh-plant)": [[10, "v1", "art-joint-anim"]], + "(trans repopulate mh-plant)": [ + [21, "v1", "art-joint-anim"], + [175, "v1", "art-joint-anim"], + [229, "v1", "art-joint-anim"], + [267, "v1", "art-joint-anim"] + ], + "(code idle mh-plant)": [[10, "v1", "art-joint-anim"]], + "(trans pop-up mh-plant)": [[22, "v1", "art-joint-anim"]], + "mh-plant-event-handler": [ + [22, "v1", "attack-info"], + [74, "a0", "process-focusable"] + ], + "(method 34 mh-plant)": [ + [70, "s5", "collide-shape-prim-group"], + [76, "s5", "collide-shape-prim-group"] + ], + "(event active for-statue)": [[[13, 52], "gp", "touching-shapes-entry"]], + "(code open-eyes for-statue)": [[10, "v1", "art-joint-anim"]], + "(code complete for-statue)": [[18, "v1", "art-joint-anim"]], + "(trans idle for-race-ring)": [ + [32, "a2", "process-drawable"], + [33, "a0", "collide-shape"] + ], + "(code active task-manager-forest-ring-chase)": [ + [36, "v0", "path-control"], + [39, "a0", "path-control"] + ], + "for-race-ring-finder-init-by-other": [[37, "v0", "path-control"]], + "(method 22 for-race-ring-finder)": [ + [15, "v0", "path-control"], + [111, "v0", "entity-actor"] + ], + "(method 32 task-manager-forest-ring-chase)": [["_stack_", 16, "res-tag"]], + "(enter impact dp-bipedal-grenade-shot)": [ + [13, "v1", "collide-shape-prim-group"] + ], + "(event impact dp-bipedal-grenade-shot)": [ + [13, "v1", "process-drawable"], + [28, "s4", "collide-shape"] + ], + "(code turret-active-shoot dp-bipedal)": [[14, "v1", "art-joint-anim"]], + "(code turret-get-off dp-bipedal)": [ + [14, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"] + ], + "(code turret-get-on dp-bipedal)": [ + [25, "v1", "art-joint-anim"], + [102, "v1", "art-joint-anim"] + ], + "(code turret-seek dp-bipedal)": [ + [14, "v1", "art-joint-anim"], + [72, "v1", "(state dp-bipedal)"] + ], + "(post die dp-bipedal)": [[17, "t9", "(function none)"]], + "(post active dp-bipedal)": [[17, "t9", "(function none)"]], + "(code knocked-recover dp-bipedal)": [ + [26, "v1", "art-joint-anim"], + [55, "v1", "ragdoll-proc"], + [98, "a0", "ragdoll-proc"], + [100, "a0", "ragdoll-proc"], + [118, "v1", "art-joint-anim"] + ], + "(code knocked dp-bipedal)": [[4, "t9", "(function none)"]], + "(post knocked dp-bipedal)": [[14, "t9", "(function none)"]], + "(code attack-throw dp-bipedal)": [[14, "v1", "art-joint-anim"]], + "(code attack-close dp-bipedal)": [ + [21, "v1", "art-joint-anim"], + [88, "v1", "art-joint-anim"], + [149, "v1", "art-joint-anim"] + ], + "(code shield-explode dp-bipedal)": [[14, "v1", "art-joint-anim"]], + "(code shield-in dp-bipedal)": [[14, "v1", "art-joint-anim"]], + "(code shield-idle dp-bipedal)": [ + [14, "v1", "art-joint-anim"], + [96, "v1", "(state dp-bipedal)"], + [80, "v1", "float"] + ], + "(code shield-out dp-bipedal)": [[14, "v1", "art-joint-anim"]], + "(code hostile-stand dp-bipedal)": [ + [14, "v1", "art-joint-anim"], + [72, "v1", "(state dp-bipedal)"] + ], + "(code hostile dp-bipedal)": [[14, "v1", "art-joint-anim"]], + "(code de-ambush dp-bipedal)": [ + [84, "v1", "art-joint-anim"], + [23, "v1", "art-joint-anim"] + ], + "(code ambush dp-bipedal)": [ + [28, "v1", "art-joint-anim"], + [96, "v1", "art-joint-anim"] + ], + "dp-bipedal-turret-code": [[86, "v1", "float"]], + "(method 82 dp-bipedal)": [[98, "v1", "rigid-body-impact"]], + "(method 59 dp-bipedal)": [ + [112, "s5", "process-focusable"], + [121, "s5", "process-focusable"], + [140, "s5", "process-focusable"], + [155, "s5", "process-focusable"], + [185, "s5", "process-focusable"], + [186, "s5", "process-focusable"], + [189, "s5", "process-focusable"] + ], + "(method 207 dp-bipedal)": [[[2, 5], "a2", "collide-shape-prim-group"]], + "(method 85 dp-bipedal)": [ + [35, "v1", "art-joint-anim"], + [63, "v1", "art-joint-anim"], + [98, "v1", "art-joint-anim"] + ], + "(method 86 dp-bipedal)": [ + [32, "v1", "art-joint-anim"], + [60, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(method 126 dp-bipedal)": [ + [17, "v1", "ragdoll-proc"], + [29, "v1", "ragdoll-proc"], + [31, "v1", "ragdoll-proc"], + [37, "v1", "ragdoll-proc"] + ], + "region-check-has-los": [ + [129, "v1", "region-prim-area"], + [134, "a0", "region-prim-area"], + [[48, 58], "v1", "region-prim-area"], + [61, "a0", "region-prim-area"], + [153, "a1", "region-prim-area"], + [156, "a2", "region-prim-area"], + [68, "a0", "region-prim-area"], + [74, "a0", "region-prim-area"], + [80, "a0", "region-prim-area"] + ], + "(method 33 dp-bipedal-shield)": [ + [38, "s5", "process-focusable"], + [50, "s5", "process-focusable"], + [68, "s5", "process-focusable"], + [71, "s5", "process-focusable"] + ], + "(method 41 dp-bipedal-shield)": [[9, "v1", "attack-info"]], + "(method 121 dp-bipedal)": [["_stack_", 16, "res-tag"]], + "(method 121 neo-wasp)": [ + [211, "v0", "(pointer float)"], + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + ["_stack_", 48, "res-tag"], + ["_stack_", 64, "res-tag"], + [161, "v0", "(pointer float)"], + [240, "v0", "(pointer float)"], + [135, "v0", "(pointer actor-group)"] + ], + "(code knocked-recover neo-wasp)": [[20, "v1", "art-joint-anim"]], + "(post ambush-attack neo-wasp)": [[59, "t9", "(function none)"]], + "(code ambush-attack neo-wasp)": [[38, "v1", "art-joint-anim"]], + "(code attack neo-wasp)": [[38, "v1", "art-joint-anim"]], + "(post notice neo-wasp)": [[4, "t9", "(function none)"]], + "(trans hostile neo-wasp)": [[42, "v1", "art-joint-anim"]], + "(method 56 neo-wasp)": [[21, "a1", "process-drawable"]], + "(method 85 neo-wasp)": [[32, "a1", "art-joint-anim"]], + "(method 182 neo-wasp)": [ + [25, "s5", "process-focusable"], + [44, "s5", "process-focusable"] + ], + "(method 86 neo-wasp)": [[11, "v1", "art-joint-anim"]], + "(method 159 neo-wasp)": [[[6, 9], "a0", "collide-shape-prim-group"]], + "(code spawn-enemy neo-spawner)": [ + [14, "v1", "art-joint-anim"], + [187, "v1", "art-joint-anim"] + ], + "(code open neo-spawner)": [ + [14, "v1", "art-joint-anim"], + [115, "v0", "handle"] + ], + "(code opening neo-spawner)": [[15, "v1", "art-joint-anim"]], + "(code closed neo-spawner)": [[13, "v1", "art-joint-anim"]], + "neo-spawner-handler": [[[71, 119], "gp", "attack-info"]], + "(code vulnerable neo-spawner)": [[14, "v1", "art-joint-anim"]], + "(enter dead neo-spawner)": [[27, "v1", "art-joint-anim"]], + "(method 11 neo-spawner-manager)": [["_stack_", 16, "res-tag"]], + "(method 11 neo-spawner)": [["_stack_", 16, "res-tag"]], + "(method 28 for-turret-shot)": [ + [29, "s5", "process-drawable"], + [32, "s5", "process-drawable"], + [10, "v0", "sound-rpc-set-param"] + ], + "(post active for-turret)": [[90, "t9", "(function none)"]], + "(post idle for-turret)": [[4, "t9", "(function none)"]], + "(post setup for-turret)": [[14, "t9", "(function none)"]], + "(method 18 hud-for-turret-health)": [ + [21, "a0", "vector"], + [25, "a0", "vector"], + [11, "v1", "float"] + ], + "(method 15 hud-for-turret-health)": [ + [517, "s2", "process-focusable"], + ["_stack_", 352, "float"], + ["_stack_", 368, "float"] + ], + "(post shutdown for-turret)": [[32, "t9", "(function none)"]], + "(post gunner-active for-turret)": [ + [24, "gp", "process-focusable"], + [47, "gp", "process-focusable"], + [70, "gp", "process-focusable"] + ], + "(method 56 for-turret)": [ + [[18, 36], "s4", "vector"], + [74, "s4", "vector"] + ], + "(anon-function 1 for-turret)": [ + [12, "a3", "int"], + [13, "a2", "for-turret"] + ], + "(anon-function 2 for-turret)": [[[6, 13], "v1", "for-turret"]], + "(anon-function 3 for-turret)": [[[3, 13], "s4", "for-turret"]], + "(anon-function 4 for-turret)": [[6, "v1", "for-turret"]], + "(method 37 for-turret)": [["_stack_", 16, "res-tag"]], + "(code idle vol-holo-eye)": [ + [14, "v1", "art-joint-anim"], + [80, "v1", "art-joint-anim"] + ], + "(code alert vol-holo-eye)": [[10, "v1", "art-joint-anim"]], + "(code close vol-holo-eye)": [[14, "v1", "art-joint-anim"]], + "(code closed dm-spines)": [[10, "v1", "art-joint-anim"]], + "(code attack flitter)": [ + [20, "v1", "art-joint-anim"], + [147, "v1", "art-joint-anim"] + ], + "(code circling flitter)": [[27, "v1", "art-joint-anim"]], + "(trans circling flitter)": [[14, "gp", "process-focusable"]], + "(code stare flitter)": [[126, "v1", "art-joint-anim"]], + "(post stare flitter)": [[9, "t9", "(function none)"]], + "(post active flitter)": [[9, "t9", "(function none)"]], + "(method 192 flitter)": [[19, "s3", "process-focusable"]], + "(code ambush-jumping flitter)": [ + [14, "v1", "art-joint-anim"], + [251, "v1", "art-joint-anim"] + ], + "(code ambush flitter)": [ + [132, "a0", "process-focusable"], + [135, "a0", "process-focusable"] + ], + "(method 86 flitter)": [[15, "a1", "art-joint-anim"]], + "(method 85 flitter)": [ + [14, "v1", "art-joint-anim"], + [69, "v1", "art-joint-anim"] + ], + "(trans attack flitter)": [ + [29, "gp", "process-focusable"], + [35, "gp", "process-focusable"], + [53, "gp", "process-focusable"], + [56, "gp", "process-focusable"] + ], + "(method 49 rigid-body-platform)": [ + [13, "v1", "rigid-body-control-point"], + [30, "v1", "collide-rider"], + [54, "v1", "process-focusable"], + [65, "v1", "process-focusable"], + [132, "v1", "process-focusable"], + [139, "v1", "float"] + ], + "(code falling vol-collapsing-rock)": [[11, "v1", "art-joint-anim"]], + "(code target-indax-hit)": [[351, "v1", "art-joint-anim"]], + "(code target-indax-get-off)": [[51, "gp", "art-joint-anim"]], + "(code target-indax-attack-air)": [[11, "gp", "art-joint-anim"]], + "(code target-indax-running-attack)": [ + [21, "gp", "art-joint-anim"], + [120, "f26", "float"], + [203, "f26", "float"] + ], + "(trans target-indax-get-off)": [ + [20, "v1", "process-drawable"], + [26, "v1", "process-drawable"], + [32, "v1", "process-drawable"] + ], + "(code target-indax-attack)": [[18, "gp", "art-joint-anim"]], + "(code target-indax-trip)": [ + [17, "v1", "art-joint-anim"], + [90, "v1", "art-joint-anim"] + ], + "(code target-indax-hit-ground)": [[14, "v1", "art-joint-anim"]], + "(code target-indax-double-jump)": [ + [50, "v1", "art-joint-anim"], + [104, "v1", "art-joint-anim"] + ], + "(code target-indax-walk)": [[89, "v1", "art-joint-anim"]], + "(code target-indax-stance)": [ + [23, "v1", "art-joint-anim"], + [240, "v1", "art-joint-anim"], + [94, "v1", "art-joint-anim"], + [182, "v1", "art-joint-anim"] + ], + "(code target-indax-start)": [[54, "v1", "art-joint-anim"]], + "target-indax-handler": [ + [97, "a0", "process"], + [147, "a0", "process"] + ], + "(code target-indax-death)": [ + [161, "v1", "art-joint-anim"], + [279, "v1", "art-joint-anim"], + [370, "v1", "art-joint-anim"], + [423, "v1", "art-joint-anim"], + [510, "v1", "art-joint-anim"], + [599, "v1", "art-joint-anim"], + [844, "v1", "art-joint-anim"] + ], + "(event target-indax-grab)": [[35, "a0", "process"]], + "(code target-indax-grab)": [[14, "v1", "art-joint-anim"]], + "(code target-indax-hang-attack)": [[14, "v1", "art-joint-anim"]], + "(enter target-indax-hang-attack)": [[5, "t9", "(function none)"]], + "(code target-indax-hang-dodge)": [ + [15, "v1", "art-joint-anim"], + [104, "v1", "art-joint-anim"] + ], + "(code target-indax-hang-walk)": [[34, "v1", "art-joint-anim"]], + "(code target-indax-hang-stance)": [ + [27, "v1", "art-joint-anim"], + [148, "v1", "art-joint-anim"], + [90, "v1", "art-joint-anim"] + ], + "(enter target-indax-hang-dodge)": [[5, "t9", "(function none)"]], + "(post target-indax-hang-stance)": [[10, "t9", "(function none)"]], + "(enter target-indax-hang-stance)": [[5, "t9", "(function none)"]], + "(enter target-indax-hang-turn-around)": [[5, "t9", "(function none)"]], + "(event idle vol-lava-ball)": [ + [47, "gp", "process-drawable"], + [90, "gp", "process-focusable"], + [12, "v1", "float"] + ], + "(event idle vol-bouncer)": [[[119, 126], "v1", "attack-info"]], + "(enter active vol-steam-explosion)": [ + [[18, 22], "v1", "collide-shape-prim-group"] + ], + "(enter stopped-up vol-steam-explosion)": [ + [[2, 5], "v1", "collide-shape-prim-group"] + ], + "(post idle lava-shoot)": [[[51, 97], "v1", "collide-shape-prim-group"]], + "(event idle lava-shoot)": [ + [18, "gp", "process-focusable"], + [38, "gp", "process-focusable"], + [87, "gp", "process-focusable"] + ], + "(post active vol-steam-explosion)": [ + [[66, 129], "v1", "collide-shape-prim-group"] + ], + "(event active vol-steam-explosion)": [ + [17, "gp", "process-focusable"], + [30, "gp", "process-focusable"], + [150, "v1", "float"], + [112, "v1", "float"], + [120, "v1", "float"] + ], + "(post active vol-lava-ball-spout)": [[86, "v0", "vector"]], + "(anon-function 38 volcano-obs)": [[7, "gp", "vol-balance-plat"]], + "(code collapse vol-break-ground)": [[10, "v1", "art-joint-anim"]], + "(post active vol-stone-lid)": [ + [6, "gp", "process-drawable"], + [15, "gp", "process-drawable"], + [35, "gp", "process-drawable"], + [86, "gp", "process-drawable"], + [94, "gp", "process-drawable"], + [32, "v1", "float"] + ], + "(method 49 vol-stone-lid)": [ + [6, "s5", "attack-info"], + [15, "s5", "attack-info"], + [17, "s5", "attack-info"], + [37, "a0", "process-focusable"], + [40, "a0", "process-focusable"], + [140, "s5", "attack-info"] + ], + "(method 59 spiky-frog)": [ + [18, "a0", "process-focusable"], + [21, "a0", "process-focusable"] + ], + "(method 125 spiky-frog)": [[[4, 51], "s5", "ragdoll-proc"]], + "(code knocked-recover spiky-frog)": [ + [25, "v1", "art-joint-anim"], + [49, "v1", "ragdoll-proc"], + [109, "v1", "art-joint-anim"] + ], + "(code attack-recover spiky-frog)": [ + [10, "v1", "art-joint-anim"], + [87, "v1", "art-joint-anim"], + [158, "v1", "art-joint-anim"] + ], + "(code attack spiky-frog)": [[19, "v1", "art-joint-anim"]], + "(code turn spiky-frog)": [ + [21, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"] + ], + "(code rolling-stop spiky-frog)": [[14, "v1", "art-joint-anim"]], + "(code rolling-start spiky-frog)": [ + [16, "v1", "art-joint-anim"], + [64, "v1", "art-joint-anim"] + ], + "(code hostile spiky-frog)": [[14, "v1", "art-joint-anim"]], + "(code notice spiky-frog)": [ + [23, "v1", "art-joint-anim"], + [71, "v1", "art-joint-anim"], + [130, "v1", "art-joint-anim"] + ], + "spiky-frog-hop-slow-code": [ + [231, "v1", "art-joint-anim"], + [288, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"], + [117, "v1", "art-joint-anim"] + ], + "(anon-function 9 spiky-frog)": [[[5, 11], "v1", "spiky-frog"]], + "(code flee-path flut-wild)": [[14, "v1", "art-joint-anim"]], + "(method 82 flut-wild)": [[79, "v0", "vector"]], + "(code notice flut-wild)": [[33, "v1", "art-joint-anim"]], + "(enter notice flut-wild)": [[90, "v1", "int"]], + "(method 121 flamer-lava)": [[159, "v1", "vector"]], + "(post knocked flamer-lava)": [[22, "t9", "(function none)"]], + "(method 50 flamer-lava)": [ + [10, "v1", "collide-shape-prim-group"], + [30, "v1", "collide-shape-prim-group"] + ], + "(code attack flamer-lava)": [ + [19, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + "(event attack flamer-lava)": [ + [22, "gp", "process-focusable"], + [25, "gp", "process-focusable"] + ], + "(method 85 flamer-lava)": [ + [70, "s4", "art-joint-anim"], + [100, "a1", "art-joint-anim"] + ], + "(trans hostile flamer-lava)": [ + [20, "a0", "process-focusable"], + [23, "a0", "process-focusable"] + ], + "(method 82 flamer-lava)": [[81, "v1", "vector"]], + "(method 196 flamer-lava)": [[15, "v0", "hover-formation-control"]], + "flamer-lava-fly-code": [ + [33, "v1", "art-joint-anim"], + [64, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(method 195 flamer-lava)": [[36, "v0", "hover-formation-control"]], + "(event stopped-up vol-steam-explosion)": [ + [24, "v1", "float"], + [16, "v1", "float"] + ], + "(method 97 mantis)": [[20, "a1", "art-joint-anim"]], + "(method 96 mantis)": [[16, "a1", "art-joint-anim"]], + "(method 98 mantis)": [[16, "a1", "art-joint-anim"]], + "(code crawl mantis)": [ + [256, "v1", "art-joint-anim"], + [25, "v1", "art-joint-anim"] + ], + "(code attack1 mantis)": [ + [19, "v1", "art-joint-anim"], + [53, "a0", "process-focusable"], + [56, "a0", "process-focusable"], + [129, "v1", "art-joint-anim"], + [201, "v1", "art-joint-anim"] + ], + "(code attack0 mantis)": [ + [18, "v1", "art-joint-anim"], + [90, "v1", "art-joint-anim"] + ], + "(code ambush-jumping mantis)": [ + [14, "v1", "art-joint-anim"], + [174, "v1", "art-joint-anim"] + ], + "(code roll-right mantis)": [ + [14, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"] + ], + "(code roll-left mantis)": [ + [14, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"] + ], + "(trans hostile mantis)": [ + [27, "gp", "process-focusable"], + [41, "gp", "process-focusable"], + [100, "gp", "process-focusable"] + ], + "(code ambush-crawling mantis)": [[23, "v1", "art-joint-anim"]], + "(code active mantis)": [ + [79, "v1", "art-joint-anim"], + [195, "v1", "art-joint-anim"], + [139, "v1", "art-joint-anim"], + [23, "v1", "art-joint-anim"] + ], + "(code hop-away mantis)": [ + [24, "gp", "process-focusable"], + [59, "gp", "process-focusable"], + [133, "v1", "art-joint-anim"] + ], + "(method 75 mantis)": [ + [20, "a0", "process-focusable"], + [23, "a0", "process-focusable"] + ], + "(method 200 mantis)": [ + [21, "s5", "process-focusable"], + [35, "s5", "process-focusable"] + ], + "(method 59 mantis)": [ + [23, "a0", "process-focusable"], + [26, "a0", "process-focusable"] + ], + "(code idle mhcity-vein-writhing-large)": [[14, "v1", "art-joint-anim"]], + "(trans idle mhcity-claw-finger-small)": [ + [67, "v1", "float"], + [88, "v1", "float"], + [112, "v1", "float"], + [134, "v1", "float"], + [159, "v1", "float"], + [181, "v1", "float"], + [211, "v1", "float"] + ], + "(code idle mhcity-vein-writhing-small)": [[14, "v1", "art-joint-anim"]], + "(code idle mhcity-dark-eco-nodule)": [[14, "v1", "art-joint-anim"]], + "(event cracked-idle mhcity-dark-eco-door)": [[5, "a0", "attack-info"]], + "(code crack mhcity-dark-eco-door-broken)": [[10, "v1", "art-joint-anim"]], + "(code shatter mhcity-dark-eco-door-broken)": [[112, "v1", "art-joint-anim"]], + "mhcity-ambient-killable-event-handler": [[[3, 18], "v1", "attack-info"]], + "(code active mhcity-puffer-large)": [[14, "v1", "art-joint-anim"]], + "(code blowing mhcity-puffer-large)": [[14, "v1", "art-joint-anim"]], + "(code active mhcity-puffer)": [[14, "v1", "art-joint-anim"]], + "(code blowing mhcity-puffer)": [[14, "v1", "art-joint-anim"]], + "(event puffer-active-base-state mhcity-puffer)": [[6, "a0", "vector"]], + "(code idle mhcity-dark-eco-door)": [[16, "v1", "float"]], + "(code ambush dm-mine-spider)": [ + [62, "v1", "art-joint-anim"], + [134, "v1", "art-joint-anim"], + [207, "v1", "art-joint-anim"] + ], + "(code run-stop dm-mine-spider)": [ + [14, "v1", "art-joint-anim"], + [71, "v1", "art-joint-anim"] + ], + "(code attack dm-mine-spider)": [[19, "v1", "art-joint-anim"]], + "(trans idle dm-mine-spider-spawner)": [[142, "gp", "process-drawable"]], + "(event idle dm-mine-spider-spawner)": [[[22, 28], "v1", "attack-info"]], + "(method 31 dm-mine-spider-spawner)": [ + [17, "v1", "dm-mine-spider"], + [23, "v1", "dm-mine-spider"], + [33, "s3", "int"] + ], + "(method 82 dm-mine-spider)": [ + [14, "v1", "process-drawable"], + [29, "s3", "collide-shape"] + ], + "(method 192 dm-mine-spider)": [ + [19, "a0", "process-focusable"], + [22, "a0", "process-focusable"] + ], + "(code attack spyder)": [ + [116, "a0", "process-focusable"], + [119, "a0", "process-focusable"], + [242, "a0", "process-focusable"], + [245, "a0", "process-focusable"] + ], + "(code backup spyder)": [[22, "v1", "art-joint-anim"]], + "(trans hostile spyder)": [ + [20, "a0", "process-focusable"], + [23, "a0", "process-focusable"] + ], + "(method 59 spyder)": [ + [36, "s5", "process-focusable"], + [47, "s5", "process-focusable"], + [48, "s5", "process-focusable"], + [51, "s5", "process-focusable"] + ], + "(method 85 spyder)": [ + [14, "v1", "art-joint-anim"], + [132, "v1", "art-joint-anim"], + [100, "s5", "art-joint-anim"] + ], + "(method 96 spyder)": [[52, "s5", "art-joint-anim"]], + "spyder-face-player-post": [ + [21, "gp", "process-focusable"], + [40, "gp", "process-focusable"], + [43, "gp", "process-focusable"] + ], + "(method 86 spyder)": [[16, "a1", "art-joint-anim"]], + "(method 193 spyder)": [ + [17, "a0", "process-focusable"], + [20, "a0", "process-focusable"] + ], + "(code knocked-recover rapid-gunner)": [ + [27, "v1", "ragdoll-proc"], + [50, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"], + [163, "v1", "art-joint-anim"] + ], + "(code attack rapid-gunner)": [ + [24, "v1", "art-joint-anim"], + [78, "v1", "art-joint-anim"], + [132, "v1", "art-joint-anim"] + ], + "(code turret-get-off rapid-gunner)": [ + [14, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"] + ], + "(code turret-active-shoot rapid-gunner)": [[14, "v1", "art-joint-anim"]], + "(code turret-get-on rapid-gunner)": [ + [14, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"], + [154, "v1", "art-joint-anim"] + ], + "(code turret-seek rapid-gunner)": [[14, "v1", "art-joint-anim"]], + "rapid-gunner-turret-code": [[86, "v1", "float"]], + "(method 140 rapid-gunner)": [ + [37, "a0", "process-focusable"], + [40, "a0", "process-focusable"] + ], + "(code die-eaten kanga-lizard)": [[22, "v1", "art-joint-anim"]], + "(method 11 dm-mine-spider-spawner)": [["_stack_", 16, "res-tag"]], + "(method 11 vol-holo-eye)": [["_stack_", 16, "res-tag"]], + "(method 32 task-manager-kanga-lizard)": [["_stack_", 16, "res-tag"]], + "(code explode rub-dark-jak-door)": [[129, "v1", "art-joint-anim"]], + "(event idle rub-dark-jak-door)": [[4, "v1", "attack-info"]], + "(code drop rub-falling-step)": [[14, "v1", "art-joint-anim"]], + "set-stadiuma-electricity-scale!": [ + [[93, 95], "v1", "stadiuma-states"], + [[70, 72], "v1", "stadiuma-states"], + [[51, 53], "v1", "stadiuma-states"], + [[32, 34], "v1", "stadiuma-states"], + [[13, 15], "v1", "stadiuma-states"] + ], + "(method 62 v-faccar)": [[[4, 53], "s5", "collide-shape-prim-group"]], + "(event idle task-manager-arena-training)": [ + [23, "a0", "entity-actor"], + [24, "s4", "entity-actor"], + [88, "gp", "entity-actor"] + ], + "(trans hide arena-token)": [[24, "v0", "string"]], + "(event idle wstd-trapdoor)": [[4, "v1", "attack-info"]], + "(trans idle crowd-manager)": [[328, "v0", "sound-rpc-set-param"]], + "crowd-dude-func": [ + [6, "a1", "int"], + [8, "v1", "wasstada-crowd"] + ], + "part-wasstada-bird2-path": [ + [13, "v1", "int"], + [86, "a0", "part-tracker"] + ], + "part-wasstada-bird1-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-wasstada-bird3-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-wasstada-bird4-path": [ + [13, "v1", "int"], + [90, "a0", "part-tracker"] + ], + "part-wasstada-bird5-path": [ + [13, "v1", "int"], + [86, "a0", "part-tracker"] + ], + "(code lava-die marauder)": [[34, "v1", "art-joint-anim"]], + "(code attack-run marauder)": [ + [21, "v1", "art-joint-anim"], + [88, "v1", "art-joint-anim"] + ], + "(code ambush marauder)": [[101, "v1", "art-joint-anim"]], + "(code victory marauder)": [ + [26, "v1", "art-joint-anim"], + [81, "v1", "art-joint-anim"] + ], + "(method 62 marauder)": [[13, "v1", "attack-info"]], + "(code jump-out marauder)": [ + [29, "v1", "art-joint-anim"], + [172, "v1", "art-joint-anim"] + ], + "(code gun-shoot marauder)": [ + [21, "v1", "art-joint-anim"], + [83, "v1", "art-joint-anim"], + [135, "v1", "art-joint-anim"] + ], + "(enter gun-shoot marauder)": [ + [26, "a0", "process-focusable"], + [29, "a0", "process-focusable"] + ], + "(trans hostile marauder)": [ + [48, "gp", "process-focusable"], + [61, "gp", "process-focusable"], + [64, "gp", "process-focusable"] + ], + "(trans save-wait marauder)": [ + [18, "a0", "process-focusable"], + [21, "a0", "process-focusable"] + ], + "(method 97 marauder)": [ + [18, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"] + ], + "(method 96 marauder)": [ + [55, "v1", "art-joint-anim"], + [83, "v1", "art-joint-anim"] + ], + "(method 98 marauder)": [ + [37, "v1", "art-joint-anim"], + [67, "v1", "art-joint-anim"] + ], + "(method 86 marauder)": [ + [15, "a2", "art-joint-anim"], + [44, "a2", "art-joint-anim"], + [75, "a2", "art-joint-anim"], + [104, "a2", "art-joint-anim"] + ], + "(method 85 marauder)": [ + [21, "v1", "art-joint-anim"], + [49, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"], + [107, "v1", "art-joint-anim"] + ], + "(method 84 marauder)": [[26, "v1", "process-focusable"]], + "(method 82 marauder)": [ + [81, "v1", "rigid-body-impact"], + [101, "a0", "vector"], + [122, "v1", "vector"], + [137, "a0", "vector"], + [[132, 167], "s4", "vector"], + [[134, 168], "s5", "vector"] + ], + "(method 196 marauder)": [[4, "v1", "collide-shape-prim-group"]], + "(method 197 marauder)": [ + [23, "s4", "process-focusable"], + [42, "s4", "process-focusable"], + [56, "s4", "process-focusable"], + [59, "s4", "process-focusable"], + [[66, 70], "v1", "float"] + ], + "(method 147 marauder)": [[34, "a1", "process-focusable"]], + "(method 42 wstd-fight-plat-smlplat)": [ + [[12, 27], "s5", "wstd-fight-plat-box"] + ], + "(code go-down wstd-fight-plat-smlplat)": [ + [[61, 77], "v1", "wstd-fight-plat-box"], + [78, "v1", "(pointer crate)"] + ], + "(code go-down wstd-fight-plat)": [ + [[156, 172], "v1", "wstd-fight-plat-box"], + [173, "v1", "(pointer crate)"] + ], + "(code open wstd-fight-house-a)": [[48, "v1", "art-joint-anim"]], + "(method 40 wstd-fight-plat)": [ + [[13, 25], "s4", "wstd-fight-plat-box"], + [[41, 53], "s4", "wstd-fight-plat-box"], + [[69, 81], "s4", "wstd-fight-plat-box"], + [[97, 109], "s4", "wstd-fight-plat-box"], + [[127, 136], "s4", "wstd-door"], + [[154, 163], "s4", "wstd-door"], + [[181, 190], "s4", "wstd-door"], + [[208, 226], "s4", "wstd-door"] + ], + "(code open wstd-fight-plat-box)": [ + [27, "v1", "art-joint-anim"], + [108, "v1", "art-joint-anim"] + ], + "(trans open wstd-fight-plat-box)": [ + [21, "a0", "(pointer process)"], + [45, "gp", "process-focusable"] + ], + "(method 40 wstd-fight-plat-box)": [[177, "v1", "process-drawable"]], + "(method 38 wstd-fight-plat-box)": [[62, "s5", "process-drawable"]], + "(trans active task-manager-throne-rog)": [[14, "gp", "process-drawable"]], + "(enter end wstd-fight-plat-large)": [ + [[38, 62], "s4", "wstd-fight-plat-smlplat"] + ], + "(enter go-down wstd-fight-plat-large)": [ + [[38, 94], "s4", "wstd-fight-plat-smlplat"] + ], + "(method 41 wstd-fight-plat-large)": [[[28, 59], "s4", "wstd-door"]], + "(enter go-down task-manager-arena-fight)": [ + [53, "gp", "process-drawable"], + [63, "gp", "process-drawable"], + [73, "gp", "process-drawable"], + [83, "gp", "process-drawable"], + [33, "v1", "float"] + ], + "(method 26 task-manager-arena-fight)": [ + [[90, 149], "s3", "wstd-fight-plat"] + ], + "(code wait-start task-manager-arena-fight-2)": [ + [63, "gp", "process-drawable"] + ], + "(method 26 task-manager-arena-fight-2)": [ + [437, "v1", "(pointer crate)"], + [[373, 493], "s3", "wstd-fight-plat"], + [514, "s3", "process-drawable"], + [519, "s3", "process-drawable"], + [524, "s3", "process-drawable"], + [[299, 335], "s3", "wstd-fight-plat"], + [412, "v1", "float"] + ], + "(method 21 task-manager-arena-fight-2)": [ + [[378, 383], "a0", "crate"], + ["_stack_", 16, "res-tag"] + ], + "(method 21 task-manager-arena-fight)": [["_stack_", 16, "res-tag"]], + "(method 21 task-manager-arena-fight-3)": [ + ["_stack_", 16, "res-tag"], + [106, "t0", "float"] + ], + "wstd-fight-plat-large-init-by-other": [ + [[169, 193], "s3", "wstd-fight-plat-smlplat"] + ], + "(method 36 task-manager-arena-fight-base)": [ + [43, "s5", "process-focusable"], + [57, "v1", "handle"] + ], + "(method 32 task-manager-arena-fight-base)": [[95, "s5", "process-drawable"]], + "(enter go-down task-manager-arena-fight-2)": [ + [[16, 81], "gp", "wstd-fight-plat"] + ], + "(method 26 task-manager-arena-fight-3)": [ + [110, "v1", "(pointer crate)"], + [[46, 180], "s3", "wstd-fight-plat-large"], + [[196, 212], "s3", "process-drawable"], + [85, "v1", "float"] + ], + "(enter active wstd-fight-plat-large)": [[16, "v1", "float"]], + "(event idle crowd-manager)": [[4, "v1", "float"]], + "(event active wstd-fight-plat-large)": [ + [15, "v1", "float"], + [4, "v1", "float"] + ], + "(event active wstd-fight-plat)": [[4, "v1", "float"]], + "(event active wstd-fight-plat-smlplat)": [[12, "v1", "float"]], + "(method 21 task-manager-arena-training)": [["_stack_", 16, "res-tag"]], + "(anon-function 3 arena-scenes)": [[6, "v1", "process-drawable"]], + "(anon-function 6 arena-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 7 arena-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 8 arena-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 9 arena-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(method 18 hud-wasgun)": [ + [43, "t2", "vector"], + [46, "t1", "float"] + ], + "(method 15 hud-wasgun)": [ + [[148, 158], "s3", "(pointer uint32)"], + [[449, 452], "v1", "dma-packet"] + ], + "(enter impact wascity-turret-shot)": [ + [15, "v1", "collide-shape-prim-group"] + ], + "(event impact wascity-turret-shot)": [[13, "v1", "process-drawable"]], + "dm-flyer-shot-move": [ + [35, "s2", "process-focusable"], + [41, "s2", "process-focusable"], + [43, "s2", "process-focusable"] + ], + "(method 31 dm-flyer-shot)": [ + [120, "s3", "process-focusable"], + [126, "s3", "process-focusable"], + [128, "s3", "process-focusable"], + ["_stack_", 96, "float"], + ["_stack_", 112, "float"] + ], + "(enter impact dm-flyer-shot)": [[50, "a0", "process"]], + "(code impact maker-grenade)": [[32, "a0", "process"]], + "(method 36 maker-grenade)": [[14, "s5", "wascity-turret-shot"]], + "(code flying skeet)": [[[182, 187], "v1", "task-manager-wascity-gungame"]], + "joint-mod-recoil": [ + [[0, 39], "gp", "wascity-turret"], + [[1, 38], "s5", "int"] + ], + "(post flying skeet)": [ + [13, "a0", "task-manager-wascity-gungame"], + [[76, 99], "gp", "task-manager-wascity-gungame"], + [175, "gp", "task-manager-wascity-gungame"], + [201, "gp", "task-manager-wascity-gungame"], + [15, "a0", "task-manager-wascity-gungame"] + ], + "wasgun-manager-shot-missed": [ + [[17, 22], "v1", "task-manager-wascity-gungame"] + ], + "skeet-standard-event-handler": [ + [[29, 145], "gp", "task-manager-wascity-gungame"] + ], + "(method 37 task-manager-wascity-gungame)": [ + [[26, 31], "v1", "hud"], + [[15, 61], "gp", "hud"], + [101, "gp", "hud"], + [139, "gp", "hud"], + [177, "gp", "hud"], + [209, "gp", "hud"], + [250, "gp", "hud"], + [288, "gp", "hud"], + [320, "gp", "hud"], + [361, "gp", "hud"], + [393, "gp", "hud"], + [428, "gp", "hud"] + ], + "spawn-skeet": [[141, "s1", "skeet"]], + "(enter explode skeet)": [ + [22, "a0", "task-manager-wascity-gungame"], + [35, "a0", "hud-wasgun"], + [41, "a0", "hud-wasgun"] + ], + "wct-show-flut": [[6, "v0", "flut"]], + "(method 56 wascity-turret)": [ + [133, "a1", "vector"], + [[76, 85], "v0", "vector"], + [[88, 97], "v0", "vector"], + [6, "v1", "float"] + ], + "(method 62 wascity-turret)": [ + [224, "s3", "process"], + [257, "s2", "process-drawable"], + [273, "s2", "process-drawable"], + [274, "v1", "collide-shape"], + [357, "a0", "collide-shape-prim-group"], + [385, "a0", "collide-shape-prim-group"], + [403, "a1", "collide-shape-prim-group"], + [429, "a0", "collide-shape-prim-group"], + [10, "v0", "(array collide-shape)"], + [309, "a1", "skeet"] + ], + "(method 33 task-manager-wascity-gungame)": [["_stack_", 16, "res-tag"]], + "city-sound-expand-want-list": [[63, "s4", "int"]], + "(method 10 xz-height-map)": [[121, "s0", "pointer"]], + "(method 9 xz-height-map)": [ + [36, "a2", "pointer"], + [[37, 49], "a1", "(pointer int8)"] + ], + "(enter explode hvehicle)": [ + [143, "a0", "process"], + [238, "v1", "joint-exploder"] + ], + "(method 49 hvehicle)": [ + [[40, 60], "s5", "traffic-object-spawn-params"], + [65, "v1", "float"] + ], + "(method 51 hvehicle)": [ + [155, "v1", "(pointer process)"], + [110, "v1", "uint"] + ], + "(method 33 hvehicle)": [[39, "s5", "rigid-body-vehicle-constants"]], + "(method 94 hvehicle)": [[42, "f0", "float"]], + "(method 18 vehicle-controller)": [[[231, 316], "v1", "hvehicle"]], + "(method 31 hvehicle)": [ + [69, "v1", "float"], + [164, "v1", "float"], + [67, "a0", "int"], + [162, "a0", "int"] + ], + "(method 97 hvehicle)": [[159, "a0", "vector"]], + "(post idle glider-ring)": [ + [203, "v1", "art-joint-anim"], + [[413, 424], "v1", "glider-prim"] + ], + "(method 25 glider-ring)": [[15, "v1", "glider-prim"]], + "glider-ring-standard-event-handler": [ + [47, "s5", "process-drawable"], + [[53, 62], "gp", "collide-shape-moving"], + [295, "gp", "collide-shape-moving"] + ], + "glider-ring-init-by-other": [[55, "v1", "art-joint-anim"]], + "(method 49 h-glider)": [ + [10, "a2", "vector"], + [21, "a1", "vector"], + [25, "a1", "vector"] + ], + "(method 97 h-glider)": [[159, "a0", "vector"]], + "glider-thermal-updraft-velocity": [ + [20, "v1", "task-manager-desert-glide"], + [23, "v1", "task-manager-desert-glide"] + ], + "(method 36 task-manager-desert-glide)": [ + [[64, 147], "s4", "hvehicle"], + [[216, 232], "v1", "hvehicle"], + [[296, 339], "s3", "hvehicle"] + ], + "(method 37 task-manager-desert-glide)": [[158, "a0", "glider-thermal"]], + "(method 26 task-manager-desert-glide)": [ + [75, "s5", "hvehicle"], + [171, "s5", "hvehicle"] + ], + "pre-populate-clouds": [ + [22, "v1", "float"], + [44, "v1", "float"], + [66, "v1", "float"] + ], + "(method 15 hud-glider-altitude)": [[18, "v1", "float"]], + "(code idle was-pre-beam)": [[28, "v1", "art-joint-anim"]], + "(code active was-pre-game)": [[21, "v1", "art-joint-anim"]], + "(code idle was-pre-game)": [ + [25, "v1", "art-joint-anim"], + [78, "v1", "art-joint-anim"] + ], + "(code attack was-pre-beam)": [[26, "v1", "art-joint-anim"]], + "(enter active was-pre-game)": [[[337, 343], "v1", "hud"]], + "(method 26 was-pre-game)": [[[104, 157], "s1", "pre-game-bubble"]], + "(method 30 was-pre-game)": [ + [[161, 167], "v1", "hud"], + [[253, 259], "v1", "hud"] + ], + "(code idle was-pre-heart)": [ + [15, "v1", "art-joint-anim"], + [76, "v1", "art-joint-anim"], + [131, "v1", "art-joint-anim"], + [192, "v1", "art-joint-anim"], + [247, "v1", "art-joint-anim"], + [308, "v1", "art-joint-anim"], + [363, "v1", "art-joint-anim"], + [422, "v1", "art-joint-anim"], + [477, "v1", "art-joint-anim"] + ], + "(post fall pre-game-bubble)": [[17, "t9", "(function none)"]], + "(post race flut-racer)": [[21, "v0", "entity-actor"]], + "ring-hit-logic": [ + [30, "v0", "entity"], + [[40, 51], "v1", "process-drawable"] + ], + "(code race flut-racer)": [[53, "v1", "art-joint-anim"]], + "(method 33 task-manager-wascity-leaper-race)": [ + [63, "a0", "entity-actor"], + [67, "a0", "entity-actor"], + [45, "a0", "entity-actor"], + [49, "a0", "entity-actor"], + ["_stack_", 16, "res-tag"] + ], + "(method 26 task-manager-wascity-leaper-race)": [ + [75, "v1", "process-drawable"] + ], + "(trans race flut-racer)": [ + [43, "v0", "int"], + [21, "v0", "int"] + ], + "(post jump flut-racer)": [[6, "t9", "(function none)"]], + "(method 33 task-manager-desert-glide)": [["_stack_", 16, "res-tag"]], + "(code idle kleever-catch-lizards)": [[10, "v1", "art-joint-anim"]], + "(code active task-manager-desert-catch-lizards)": [ + [858, "gp", "handle"], + [[904, 910], "v1", "wvehicle"] + ], + "(code resolution task-manager-desert-catch-lizards)": [ + [28, "t9", "(function none)"] + ], + "(method 30 task-manager-desert-catch-lizards)": [ + [40, "v1", "float"], + [43, "v1", "float"] + ], + "(method 26 task-manager-desert-catch-lizards)": [ + [275, "v0", "(array collide-shape)"], + ["_stack_", 192, "res-tag"] + ], + "(method 82 desert-lizard)": [[96, "v0", "vector"]], + "(code notice desert-lizard)": [[31, "v1", "art-joint-anim"]], + "(trans flee desert-lizard)": [[[232, 257], "gp", "wvehicle"]], + "desert-lizard-flee-post": [[[10, 30], "s4", "process-focusable"]], + "(anon-function 33 desert-scenes)": [ + [39, "gp", "process-drawable"], + [71, "v1", "float"] + ], + "(anon-function 34 desert-scenes)": [[54, "v1", "float"]], + "(code active task-manager-throne-gun-training)": [[126, "v1", "float"]], + "(enter idle dm-tentacle)": [[11, "v1", "float"]], + "(trans moving desw-snake-stump)": [["_stack_", 16, "float"]], + "desw-snake-stump-handler": [[8, "v1", "focus"]], + "dm-tentacle-handler": [ + [[116, 140], "v1", "attack-info"], + [[179, 199], "s5", "dm-tentacle-ragdoll-proc"] + ], + "(event idle desw-eco-tank)": [[[109, 130], "v1", "attack-info"]], + "(event idle dm-urchin)": [[[109, 130], "v1", "attack-info"]], + "(enter strike dm-tentacle)": [ + [[9, 13], "a0", "dm-tentacle-ragdoll-proc"], + [15, "a0", "dm-tentacle-ragdoll-proc"] + ], + "(enter sweep dm-tentacle)": [ + [[9, 13], "a0", "dm-tentacle-ragdoll-proc"], + [15, "a0", "dm-tentacle-ragdoll-proc"] + ], + "(enter whip dm-tentacle)": [ + [[9, 13], "a0", "dm-tentacle-ragdoll-proc"], + [15, "a0", "dm-tentacle-ragdoll-proc"] + ], + "(enter spit dm-tentacle)": [ + [[9, 13], "a0", "dm-tentacle-ragdoll-proc"], + [15, "a0", "dm-tentacle-ragdoll-proc"] + ], + "(trans idle dm-tentacle)": [[57, "v1", "float"]], + "dm-tentacle-start-ragdoll": [[[55, 106], "gp", "dm-tentacle-ragdoll-proc"]], + "foot-impact": [ + [320, "v0", "manipy"], + [403, "v1", "process-drawable"], + [524, "v1", "process-drawable"] + ], + "(event idle terraformer-leg)": [ + [57, "s5", "process-drawable"], + [99, "gp", "vehicle"], + [202, "a0", "nav-mesh"], + [205, "a0", "nav-mesh"] + ], + "(post attack terraformer-drone)": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(enter explode terraformer-drone)": [[93, "a0", "process"]], + "(method 82 terraformer-drone)": [[29, "v1", "vector"]], + "(method 59 terraformer-drone)": [ + [51, "a0", "process-focusable"], + [54, "a0", "process-focusable"] + ], + "terraformer-handler": [ + [50, "a0", "terraformer-drone"], + [[69, 76], "s5", "terraformer-leg"], + [52, "a0", "terraformer-drone"] + ], + "terraformer-always": [[[97, 104], "a1", "terraformer-leg"]], + "terraformer-update-mine-vars": [ + [[97, 142], "s4", "terraformer-mine"], + [[113, 121], "s2", "terraformer-mine"] + ], + "(event idle terraformer-target)": [[53, "a0", "process"]], + "terraformer-mine-explode": [[50, "a0", "process-drawable"]], + "(method 11 terraformer-head)": [["_stack_", 16, "res-tag"]], + "joint-mod-disc-look-at-callback": [ + [[3, 46], "s4", "joint-mod-disc-look-at"] + ], + "terraformer-head-check-launch-script": [[93, "v1", "float"]], + "(trans swing-laser terraformer-head)": [ + [80, "v1", "float"], + [346, "v1", "float"] + ], + "(event moving terraformer-head-laser-projectile)": [ + [7, "a1", "vector"], + [51, "v0", "vector"] + ], + "terraformer-head-always-handler": [ + [5, "a0", "terraformer-drone"], + [7, "a0", "terraformer-drone"], + [45, "a1", "vector"] + ], + "(method 11 desw-snake-stump)": [["_stack_", 16, "res-tag"]], + "(method 13 ocean)": [ + [[249, 252], "v1", "dma-packet"], + [[321, 324], "v1", "dma-packet"] + ], + "(method 22 ocean)": [[[3, 11], "a0", "dma-packet"]], + "(method 23 ocean)": [[[3, 11], "a0", "dma-packet"]], + "(method 25 ocean)": [[[8, 16], "a1", "dma-packet"]], + "(method 26 ocean)": [ + [[11, 19], "a3", "dma-packet"], + [[30, 38], "a2", "dma-packet"] + ], + "(method 27 ocean)": [ + [[19, 27], "a0", "dma-packet"], + [30, "s3", "matrix"], + [[49, 54], "s2", "vector"] + ], + "(method 28 ocean)": [ + [[43, 51], "a0", "dma-packet"], + [66, "a2", "(pointer int16)"], + [[81, 89], "a1", "vector4w"], + [[90, 98], "v1", "vector4w"], + [[111, 127], "t0", "vector4w"], + [[130, 268], "a1", "(inline-array vector4w)"] + ], + "(method 29 ocean)": [ + [[36, 41], "a0", "dma-packet"], + [91, "a1", "(pointer int16)"] + ], + "(method 30 ocean)": [ + [29, "a0", "(pointer uint8)"], + [31, "v1", "int"] + ], + "(method 31 ocean)": [[32, "a0", "(pointer int32)"]], + "(method 32 ocean)": [ + [31, "t0", "(pointer int32)"], + [47, "a2", "(pointer uint8)"], + [55, "v1", "(pointer int8)"], + [49, "a1", "int"], + [33, "a1", "int"] + ], + "(method 33 ocean)": [ + [[52, 60], "a0", "dma-packet"], + [[63, 67], "v1", "vector4w"], + [[93, 232], "v1", "(inline-array vector4w)"], + [[245, 253], "a0", "dma-packet"] + ], + "(method 34 ocean)": [ + [[44, 52], "a0", "dma-packet"], + [[61, 65], "v1", "vector4w"], + [[68, 147], "v1", "(inline-array vector4w)"], + [[166, 174], "a0", "dma-packet"] + ], + "(method 36 ocean)": [["_stack_", 48, "ocean-trans-mask"]], + "(method 38 ocean)": [ + [104, "a1", "(pointer int32)"], + [108, "a3", "(pointer uint8)"], + [110, "a1", "(pointer int32)"] + ], + "(method 39 ocean)": [ + [[7, 15], "a0", "dma-packet"], + [[17, 51], "v1", "matrix"] + ], + "(method 40 ocean)": [["_stack_", 40, "ocean-trans-mask"]], + "(method 41 ocean)": [[[3, 11], "a0", "dma-packet"]], + "(method 42 ocean)": [[[3, 11], "a0", "dma-packet"]], + "(method 45 ocean)": [ + [[19, 27], "a1", "dma-packet"], + [30, "s3", "matrix"], + [[47, 52], "s2", "vector"] + ], + "(method 48 ocean)": [[[8, 16], "a1", "dma-packet"]], + "(method 49 ocean)": [ + [24, "a0", "(pointer uint8)"], + [26, "v1", "int"] + ], + "(method 51 ocean)": [ + [39, "a0", "(pointer uint8)"], + [47, "v1", "(pointer uint8)"], + [41, "a1", "int"], + [30, "a1", "int"] + ], + "(method 52 ocean)": [ + [[54, 68], "a2", "dma-packet"], + [[82, 87], "a0", "dma-packet"], + [99, "v1", "(pointer uint64)"] + ], + "(method 53 ocean)": [ + [[52, 60], "a0", "dma-packet"], + [[62, 67], "v1", "vector4w"], + [[70, 149], "v1", "(inline-array vector4w)"], + [[162, 170], "a0", "dma-packet"] + ], + "(method 57 ocean)": [ + [[7, 15], "a0", "dma-packet"], + [[18, 28], "a0", "vector"], + [[28, 39], "a0", "vector"], + [[39, 50], "a0", "vector"], + [[51, 62], "v1", "vector"] + ], + "(method 59 ocean)": [ + [[22, 27], "a0", "dma-packet"], + [227, "t3", "(pointer uint8)"] + ], + "(method 60 ocean)": [[[3, 191], "s4", "(inline-array ocean-vertex)"]], + "(method 61 ocean)": [[[3, 194], "s4", "(inline-array ocean-vertex)"]], + "(method 62 ocean)": [[[3, 193], "s4", "(inline-array ocean-vertex)"]], + "(method 63 ocean)": [[[3, 200], "s4", "(inline-array ocean-vertex)"]], + "(method 64 ocean)": [[[3, 228], "gp", "(inline-array ocean-vertex)"]], + "(method 65 ocean)": [[[3, 234], "gp", "(inline-array ocean-vertex)"]], + "(method 66 ocean)": [[[3, 234], "gp", "(inline-array ocean-vertex)"]], + "(method 67 ocean)": [[[3, 240], "gp", "(inline-array ocean-vertex)"]], + "(method 68 ocean)": [[[4, 179], "s3", "(inline-array ocean-vertex)"]], + "(method 69 ocean)": [[[114, 121], "gp", "dma-packet"]], + "(method 71 ocean)": [[[8, 16], "a1", "dma-packet"]], + "(method 72 ocean)": [[[2, 6], "v1", "(inline-array vector4w)"]], + "(method 73 ocean)": [[[6, 11], "a0", "dma-packet"]], + "(method 74 ocean)": [ + [[6, 11], "a0", "dma-packet"], + [[19, 24], "a0", "dma-packet"] + ], + "(method 75 ocean)": [[[3, 8], "a0", "dma-packet"]], + "(method 76 ocean)": [[[3, 8], "a0", "dma-packet"]], + "(method 77 ocean)": [[[3, 8], "a0", "dma-packet"]], + "(method 78 ocean)": [[[58, 63], "a0", "dma-packet"]], + "(method 80 ocean)": [ + [[66, 81], "v1", "(inline-array vector4w)"], + [[121, 126], "v1", "(inline-array vector4w)"], + [[193, 215], "v1", "(inline-array vector4w)"], + [[251, 273], "v1", "(inline-array vector4w)"], + [[332, 354], "v1", "(inline-array vector4w)"] + ], + "(method 81 ocean)": [ + [[68, 90], "v1", "(inline-array vector4w)"], + [[157, 179], "v1", "(inline-array vector4w)"] + ], + "(method 82 ocean)": [ + [69, "v1", "(pointer uint128)"], + [[97, 115], "s1", "(inline-array vector4w)"] + ], + "(method 83 ocean)": [[[66, 92], "t1", "(inline-array vector4w)"]], + "(method 84 ocean)": [ + [32, "v1", "(pointer uint128)"], + [[89, 118], "s0", "(inline-array vector4w)"], + [[128, 137], "s4", "(pointer uint128)"], + [[128, 137], "v1", "(pointer uint128)"] + ], + "(method 87 ocean)": [ + [[227, 232], "a0", "(inline-array vector4w)"], + [[244, 270], "a1", "(inline-array vector4w)"], + [[282, 288], "a0", "(inline-array vector4w)"], + [[299, 324], "a1", "(inline-array vector4w)"] + ], + "(method 88 ocean)": [ + [[69, 87], "v1", "(inline-array vector4w)"], + [[88, 93], "a0", "(inline-array vector4w)"], + [[93, 101], "v1", "(inline-array vector4w)"], + [[138, 144], "v1", "adgif-shader"], + [[234, 240], "v1", "adgif-shader"], + [[382, 421], "v1", "(inline-array vector4w)"] + ], + "(method 89 ocean)": [ + [[68, 81], "v1", "(inline-array vector4w)"], + [[137, 148], "v1", "(inline-array vector4w)"], + [[202, 215], "v1", "(inline-array vector4w)"], + [[269, 282], "v1", "(inline-array vector4w)"], + [[336, 349], "v1", "(inline-array vector4w)"], + [[405, 416], "v1", "(inline-array vector4w)"] + ], + "(method 90 ocean)": [[0, "a2", "(pointer int32)"]], + "(method 50 ocean)": [[31, "v1", "int"]], + "(anon-function 7 mined-scenes)": [[33, "a0", "process"]], + "(anon-function 8 mined-scenes)": [[31, "a0", "process"]], + "(code flying maker)": [[10, "v1", "art-joint-anim"]], + "(method 30 task-manager-wascity-defend)": [ + [28, "v1", "handle"], + [55, "v1", "handle"], + [82, "v1", "handle"], + [25, "v1", "handle"], + [52, "v1", "handle"], + [79, "v1", "handle"] + ], + "(code walking maker)": [[[123, 126], "v1", "task-manager-wascity-defend"]], + "(post flying maker)": [[[260, 275], "v1", "task-manager-wascity-defend"]], + "(post walking maker)": [[[740, 755], "v1", "task-manager-wascity-defend"]], + "(post standup maker)": [[[26, 41], "v1", "task-manager-wascity-defend"]], + "(code standup maker)": [ + [13, "v1", "art-joint-anim"], + [97, "v1", "art-joint-anim"] + ], + "maker-standard-event-handler": [ + [148, "v1", "touching-shapes-entry"], + [153, "s5", "touching-shapes-entry"], + [147, "s5", "touching-shapes-entry"], + [260, "gp", "attack-info"], + [332, "gp", "attack-info"], + [379, "gp", "attack-info"] + ], + "maker-init-by-other": [[237, "v1", "vector"]], + "(code resolution task-manager-bbush-spirit-drop)": [[40, "gp", "handle"]], + "(event dormant score-drop)": [[5, "a0", "vector"]], + "(code resolution task-manager-desert-bbush-ring)": [[40, "gp", "handle"]], + "(trans idle desert-chase-ring)": [[20, "a2", "vehicle"]], + "(event dormant spirit)": [[6, "v1", "vector"]], + "(event idle spirit)": [[6, "v1", "vector"]], + "(code resolution task-manager-bbush-egg-spider)": [[40, "gp", "handle"]], + "(trans active task-manager-bbush-egg-spider)": [[18, "v1", "int"]], + "(code resolution task-manager-bbush-spirit-chase)": [[40, "gp", "handle"]], + "(method 36 task-manager-bbush-spirit-drop)": [[23, "s4", "spirit"]], + "(method 21 task-manager-bbush-spirit-drop)": [["_stack_", 16, "res-tag"]], + "(trans idle des-burning-bush)": [ + [179, "v1", "vehicle"], + [151, "a1", "int"] + ], + "(method 35 des-burning-bush)": [[48, "v1", "float"]], + "(code menu des-burning-bush)": [[[29, 54], "v1", "game-task-event"]], + "(event dormant trail-effect)": [[6, "v1", "vector"]], + "(event idle trail-effect)": [[6, "v1", "vector"]], + "(code resolution task-manager-bbush-timer-chase)": [[40, "gp", "handle"]], + "(event active task-manager-bbush-timer-chase)": [ + [4, "v1", "float"], + [[30, 33], "a0", "freeze-time-hud"], + [[43, 46], "a0", "freeze-time-hud"], + [[56, 59], "a0", "freeze-time-hud"], + [[69, 72], "a0", "freeze-time-hud"], + [[85, 88], "a0", "freeze-time-hud"], + [[98, 101], "a0", "freeze-time-hud"], + [[111, 114], "a0", "freeze-time-hud"], + [[124, 127], "a0", "freeze-time-hud"], + [[140, 143], "a0", "freeze-time-hud"], + [[166, 169], "a0", "freeze-time-hud"], + [[179, 182], "a0", "freeze-time-hud"], + [[153, 156], "a0", "freeze-time-hud"] + ], + "(trans active task-manager-bbush-timer-chase)": [ + [[25, 28], "a0", "freeze-time-hud"], + [[38, 41], "a0", "freeze-time-hud"], + [[51, 54], "a0", "freeze-time-hud"], + [[64, 67], "a0", "freeze-time-hud"] + ], + "(method 26 task-manager-bbush-roll-count)": [[17, "v1", "vehicle"]], + "(method 26 task-manager-vehicle-bbush)": [ + [37, "v1", "process-focusable"], + [[83, 134], "v1", "vehicle"] + ], + "(method 21 task-manager-bbush-timer-chase)": [["_stack_", 96, "res-tag"]], + "(method 21 task-manager-bbush-egg-spider)": [["_stack_", 16, "res-tag"]], + "(method 21 task-manager-bbush-spirit-chase)": [["_stack_", 16, "res-tag"]], + "(method 21 task-manager-desert-bbush-ring)": [["_stack_", 16, "res-tag"]], + "(code attack needle-fish)": [ + [14, "v1", "art-joint-anim"], + [66, "v1", "art-joint-anim"] + ], + "(code stare needle-fish)": [[14, "v1", "art-joint-anim"]], + "needle-fish-joint-mod-tail": [[[8, 42], "s4", "needle-fish"]], + "(method 28 needle-fish-shot)": [ + [10, "v0", "sound-rpc-set-param"], + [29, "s5", "process-drawable"], + [32, "s5", "process-drawable"] + ], + "(enter explode needle-fish)": [[95, "a0", "process"]], + "(method 59 needle-fish)": [ + [30, "a0", "process-focusable"], + [33, "a0", "process-focusable"] + ], + "(method 56 mh-wasp)": [[21, "a1", "process-drawable"]], + "(post notice mh-wasp)": [[4, "t9", "(function none)"]], + "(trans hostile mh-wasp)": [[36, "v1", "art-joint-anim"]], + "(code attack mh-wasp)": [[38, "v1", "art-joint-anim"]], + "(code knocked-recover mh-wasp)": [[20, "v1", "art-joint-anim"]], + "(method 86 mh-wasp)": [[11, "v1", "art-joint-anim"]], + "(method 113 mh-wasp)": [[[11, 89], "s5", "process-focusable"]], + "(method 85 mh-wasp)": [[32, "a1", "art-joint-anim"]], + "(method 121 mh-wasp)": [ + [116, "v0", "(pointer float)"], + [181, "v0", "(pointer float)"], + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + ["_stack_", 48, "res-tag"], + ["_stack_", 64, "res-tag"] + ], + "(method 11 mh-centipede)": [ + [433, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(method 26 task-manager-mh-centipede)": [[[113, 118], "a0", "vehicle"]], + "(method 30 task-manager-mh-centipede)": [[5, "a1", "vector"]], + "(method 26 task-manager-nstb-crystal)": [[[31, 36], "a0", "vehicle"]], + "(method 42 mh-centipede)": [ + [70, "v1", "float"], + [93, "v1", "float"] + ], + "(method 38 mh-centipede)": [[171, "v1", "float"]], + "(method 39 mh-centipede)": [ + [70, "v1", "float"], + [185, "v1", "float"], + [208, "v1", "float"] + ], + "(trans die mh-centipede)": [[16, "v0", "vehicle"]], + "mh-centipede-active-handler": [ + [[5, 119], "s4", "touching-shapes-entry"], + [91, "gp", "vehicle"], + [[208, 227], "v1", "attack-info"] + ], + "(enter impact mh-centipede-shot)": [[71, "a0", "process"]], + "(event hidden rod-spawner)": [ + [[13, 21], "a1", "vector"], + [[27, 35], "a0", "vector"] + ], + "(method 32 task-manager-mh-centipede)": [["_stack_", 16, "res-tag"]], + "(method 59 mh-bat)": [[[26, 43], "s5", "process-focusable"]], + "(method 126 mh-bat)": [[[20, 24], "v1", "ragdoll-proc"]], + "(method 50 mh-bat)": [ + [8, "v1", "collide-shape-prim-group"], + [18, "v1", "collide-shape-prim-group"] + ], + "(code knocked-recover mh-bat)": [ + [26, "v1", "art-joint-anim"], + [55, "v1", "ragdoll-proc"], + [108, "v1", "art-joint-anim"] + ], + "(code attack-1 mh-bat)": [ + [14, "v1", "art-joint-anim"], + [160, "v1", "art-joint-anim"] + ], + "mh-bat-fly-code": [[15, "v1", "art-joint-anim"]], + "set-factoryc-light!": [[[12, 14], "v1", "factoryc-states"]], + "(method 24 conveyor)": [ + ["_stack_", 16, "res-tag"], + [23, "v0", "(pointer float)"] + ], + "(method 21 conveyor)": [["_stack_", 32, "conveyor-section"]], + "(method 28 conveyor)": [ + [23, "a0", "connection"], + [24, "a0", "collide-shape"], + [71, "a0", "connection"], + [72, "a0", "collide-shape"] + ], + "fac-robopod-base-handler": [[6, "v1", "rigid-body-impact"]], + "(method 11 fac-zapper)": [ + [[183, 213], "s4", "(pointer generic-spot-shadow-effect)"] + ], + "(method 11 fac-fire-torch)": [[99, "v0", "particle-local-space-info"]], + "(code generate fac-robopod)": [ + [28, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(code die fac-punch-wall)": [ + [17, "v1", "collide-shape-prim-group"], + [89, "v1", "art-joint-anim"], + [112, "v0", "sound-rpc-set-param"] + ], + "(method 24 factory-conveyor)": [ + [40, "v0", "float"], + [39, "t0", "float"], + ["_stack_", 16, "res-tag"] + ], + "(enter perish-immediately)": [ + [13, "v1", "art-joint-anim"], + [29, "v1", "collide-shape-prim-group"] + ], + "(code plat-idle fac-move-plat-a)": [[6, "t9", "(function none)"]], + "(event idle fac-switch)": [[[5, 15], "gp", "attack-info"]], + "(event idle fac-break-floor)": [[4, "v1", "attack-info"]], + "(event idle fac-break-fence)": [[[7, 13], "gp", "rigid-body-impact"]], + "(code plat-idle fac-move-plat-b)": [[6, "t9", "(function none)"]], + "(event idle fac-rotfan)": [[87, "gp", "process-focusable"]], + "(enter out fac-rotfan)": [ + [2, "v1", "collide-shape-prim-group"], + [6, "v1", "collide-shape-prim-group"], + [10, "v1", "collide-shape-prim-group"] + ], + "(code spindown fac-rotfan)": [ + [201, "v1", "collide-shape-prim-group"], + [205, "v1", "collide-shape-prim-group"], + [209, "v1", "collide-shape-prim-group"], + [147, "v0", "sound-rpc-set-param"] + ], + "(method 22 fac-switch)": [[16, "v0", "string"]], + "(anon-function 1 mh-bat)": [[1, "v1", "float"]], + "(code flickering factory-elec-gate)": [[83, "s5", "int"]], + "(anon-function 0 factory-scenes)": [[13, "t9", "(function level none)"]], + "(anon-function 1 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 2 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 3 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 4 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 5 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 7 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 8 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 9 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 6 factory-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "update-mood-lfacrm1": [[[24, 105], "gp", "lfacrm1-states"]], + "update-lfacrm1-lights": [[81, "v1", "lfacrm1-states"]], + "(code dormant fac-elevator-a)": [[19, "v1", "art-joint-anim"]], + "(code waiting fac-elevator-a)": [[44, "v1", "art-joint-anim"]], + "(code running fac-elevator-a)": [ + [23, "v1", "art-joint-anim"], + [71, "t9", "(function none)"] + ], + "(trans running fac-elevator-a)": [[4, "v0", "sound-rpc-set-param"]], + "set-lfacrm1-door!": [[[26, 32], "v1", "lfacrm1-states"]], + "(method 11 fac-switch)": [["_stack_", 16, "res-tag"]], + "(method 11 factory-elec-gate)": [ + ["_stack_", 16, "res-tag"], + [88, "v0", "(pointer actor-group)"] + ], + "(enter impact factory-boss-shot)": [[60, "a0", "process"]], + "(event idle fac-drop-plat)": [ + [10, "s5", "factory-boss-floorbuster-bomb"], + [18, "s5", "floorbuster-bomb-explosion"] + ], + "(method 11 fac-drop-plat)": [ + [100, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "fac-drop-plat-rot-once": [ + ["_stack_", 48, "float"], + ["_stack_", 64, "float"] + ], + "(enter impact factory-boss-floorbuster-bomb)": [ + [60, "a0", "process"], + [84, "v1", "floorbuster-bomb-explosion"] + ], + "(enter impact factory-boss-shockwave-bomb)": [ + [59, "a0", "process"], + [213, "s4", "(pointer manipy)"], + [332, "s4", "(pointer manipy)"] + ], + "(method 9 factory-boss-lightning-gate)": [[173, "a3", "float"]], + "update-mood-factory": [[[30, 102], "gp", "factory-states"]], + "set-factoryd-light!": [[10, "v1", "factoryd-states"]], + "(code notice missile-bot)": [[10, "v1", "art-joint-anim"]], + "(trans knocked missile-bot)": [[44, "v1", "float"]], + "(post knocked missile-bot)": [[12, "t9", "(function none)"]], + "(trans fizzle missile-bot)": [ + [53, "v1", "float"], + [92, "v1", "float"] + ], + "factory-boss-launch-critter-pick-anim": [[10, "v1", "float"]], + "(method 50 missile-bot)": [ + [2, "v1", "collide-shape-prim-group"], + [6, "a0", "collide-shape-prim-group"] + ], + "(enter knocked missile-bot)": [[9, "v1", "float"]], + "(anon-function 1 factory-boss-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "(anon-function 2 factory-boss-scenes)": [ + [13, "t9", "(function mood-context none)"] + ], + "factory-boss-check-launch-script": [[100, "v1", "float"]], + "(enter beaten factory-boss)": [[44, "gp", "(pointer process)"]], + "factory-boss-handler": [[[12, 15], "v1", "nav-enemy"]], + "factory-boss-drop-bomb": [[75, "v1", "factory-boss-floorbuster-bomb"]], + "(method 11 factory-boss)": [["_stack_", 16, "res-tag"]], + "(method 26 factory-boss)": [[16, "v1", "float"]], + "factory-boss-always": [ + [632, "s4", "process-drawable"], + [663, "s4", "process-drawable"], + [741, "s4", "process-drawable"], + [268, "v1", "float"], + [308, "v1", "float"], + [362, "v1", "float"], + [406, "v1", "float"], + [456, "v1", "float"], + [496, "v1", "float"], + [693, "v1", "float"], + ["_stack_", 272, "float"], + ["_stack_", 288, "float"], + ["_stack_", 320, "float"], + ["_stack_", 336, "float"], + ["_stack_", 352, "float"], + ["_stack_", 368, "float"], + ["_stack_", 384, "float"], + ["_stack_", 400, "float"] + ], + "(method 26 task-manager-factory-assault)": [ + [[21, 34], "s5", "process-focusable"], + [114, "v0", "vehicle"] + ], + "generic-merc-execute-all": [ + [145, "v1", "generic-work"], + [147, "v1", "generic-work"], + [149, "v1", "generic-work"], + [78, "v1", "generic-work"], + [80, "v1", "generic-work"], + [82, "v1", "generic-work"], + [97, "a0", "generic-work"] + ], + "(event idle simple-focus)": [[6, "v1", "vector"]], + "(code die-falling bot)": [[32, "gp", "art-joint-anim"]], + "(code failed bot)": [ + [23, "gp", "art-joint-anim"], + [70, "v0", "string"] + ], + "(code hit bot)": [[30, "v1", "art-joint-anim"]], + "(method 201 bot)": [ + [41, "a0", "connection"], + [42, "a0", "collide-shape"], + [90, "a0", "connection"], + [91, "a0", "collide-shape"], + [153, "a1", "process-focusable"] + ], + "(method 140 bot)": [ + [70, "s5", "process-focusable"], + [[34, 74], "s5", "process-focusable"] + ], + "(method 82 bot)": [ + [105, "a0", "bot"], + [107, "v1", "process"], + [222, "a0", "vector"] + ], + "(method 236 bot)": [ + [28, "t9", "(function bot int)"], + [46, "t9", "(function bot int)"] + ], + "(method 84 bot)": [[45, "v1", "process-focusable"]], + "(method 235 bot)": [[[15, 39], "s3", "process-focusable"]], + "(method 202 bot)": [ + [10, "v1", "sphere"], + [40, "a0", "connection"], + [41, "a0", "collide-shape"], + [49, "a3", "sphere"], + [58, "f2", "float"], + [89, "a0", "connection"], + [90, "a0", "collide-shape"], + [98, "a3", "sphere"], + [107, "f2", "float"] + ], + "(code standing-turn ashelin)": [[47, "s4", "art-joint-anim"]], + "(code tumble-right ashelin)": [ + [35, "v1", "art-joint-anim"], + [168, "v1", "art-joint-anim"], + [280, "v1", "art-joint-anim"] + ], + "(code cartwheel-left ashelin)": [ + [35, "v1", "art-joint-anim"], + [168, "v1", "art-joint-anim"], + [280, "v1", "art-joint-anim"] + ], + "(code back-spring ashelin)": [ + [30, "v1", "art-joint-anim"], + [309, "v1", "art-joint-anim"], + [171, "v1", "art-joint-anim"] + ], + "(post chase ashelin)": [ + [14, "a0", "process-focusable"], + [17, "a0", "process-focusable"] + ], + "(code standing-blast ashelin)": [[68, "v1", "art-joint-anim"]], + "(code standing-idle ashelin)": [ + [189, "v1", "art-joint-anim"], + [126, "v1", "art-joint-anim"] + ], + "(code waiting-idle ashelin)": [ + [204, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(code die-falling ashelin)": [[85, "gp", "art-joint-anim"]], + "(method 55 ashelin)": [ + [[19, 23], "a0", "process-focusable"], + [25, "a0", "process-focusable"] + ], + "(method 85 ashelin)": [[129, "s5", "art-joint-anim"]], + "(method 86 ashelin)": [ + [22, "s5", "art-joint-anim"], + [77, "v1", "art-joint-anim"], + [111, "v1", "art-joint-anim"], + [165, "v1", "art-joint-anim"], + [199, "v1", "art-joint-anim"] + ], + "(method 87 ashelin)": [[67, "v1", "art-joint-anim"]], + "(code active task-manager-desert-oasis-defense)": [ + [363, "a0", "collide-shape-moving"], + [426, "v1", "float"], + [366, "a0", "collide-shape-moving"], + [685, "v1", "float"] + ], + "(method 32 task-manager-desert-oasis-defense)": [ + [98, "a0", "collide-shape-moving"], + [116, "v1", "float"], + [130, "v1", "float"], + [101, "a0", "collide-shape-moving"] + ], + "(method 33 task-manager-desert-oasis-defense)": [ + [[107, 168], "s1", "marauder"] + ], + "(method 26 task-manager-desert-oasis-defense)": [ + [298, "s4", "process-drawable"], + [308, "s4", "process-drawable"], + [331, "s4", "process-drawable"], + [55, "s3", "process-drawable"], + [106, "v1", "float"], + [146, "v1", "float"], + [163, "v1", "float"] + ], + "(method 82 ashelin-oasis)": [[11, "v1", "rigid-body-impact"]], + "(method 263 ashelin-oasis)": [ + [85, "gp", "process-drawable"], + [88, "gp", "process-drawable"], + [67, "v0", "sound-rpc-set-param"] + ], + "(anon-function 1 ash-oasis-course)": [[82, "v1", "asht-wait-spot"]], + "(method 198 bot)": [ + [18, "a0", "uint"], + [8, "v1", "uint"] + ], + "(code active dark-eco-orb)": [ + [33, "v1", "art-joint-anim"], + [17, "v1", "float"] + ], + "dark-eco-tower-init-by-other": [[93, "v1", "vector"]], + "(code hit dark-eco-orb)": [[14, "v1", "art-joint-anim"]], + "(trans idle grind-electricity)": [ + ["_stack_", 48, "(pointer lightning-tracker)"] + ], + "dark-eco-orb-init-by-other": [[100, "v1", "vector"]], + "dark-eco-orb-event-handler": [[[29, 71], "gp", "attack-info"]], + "spawn-shock-effect": [["_stack_", 640, "(pointer lightning-tracker)"]], + "(method 21 task-manager-destroy-darkeco)": [["_stack_", 16, "res-tag"]], + "(code explode comb-block)": [[50, "a0", "process"]], + "(method 29 comb-energy-ring)": [ + [52, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + "(method 30 comb-energy-ring)": [ + [10, "s5", "collide-shape-prim-group"], + [16, "s5", "collide-shape-prim-group"] + ], + "(event idle comb-block)": [ + [20, "s4", "attack-info"], + [22, "s4", "attack-info"] + ], + "(event idle comb-pillar)": [[[20, 30], "s4", "attack-info"]], + "(event path-follow comb-sentry)": [[[13, 30], "s4", "attack-info"]], + "(method 33 comb-sentry)": [[10, "v1", "collide-shape-prim-group"]], + "(method 32 comb-sentry)": [[[28, 75], "s5", "process-focusable"]], + "(event idle-close comb-field)": [ + [[22, 27], "v1", "attack-info"], + [55, "s4", "process-drawable"], + [132, "v1", "process-drawable"], + [148, "v1", "process-drawable"], + [155, "v1", "process-drawable"], + [158, "a0", "process-drawable"], + [172, "v1", "process-drawable"], + [179, "v1", "process-drawable"], + [182, "a0", "process-drawable"], + [195, "v1", "process-drawable"], + [198, "a0", "process-drawable"], + [267, "v1", "process-drawable"], + [275, "gp", "collide-shape"], + [284, "gp", "collide-shape"], + [[203, 207], "a2", "float"] + ], + "(method 62 h-sled)": [[[4, 41], "s5", "collide-shape-prim-group"]], + "(method 33 h-sled)": [[1, "a1", "rigid-body-vehicle-constants"]], + "(method 49 h-sled)": [ + [72, "v1", "vector"], + [64, "v1", "float"], + [41, "v1", "float"] + ], + "(enter explode h-sled)": [ + [107, "a0", "process"], + [202, "v1", "joint-exploder"] + ], + "(method 97 h-sled)": [[2, "a2", "h-sled-physics-work"]], + "(method 26 task-manager-tube-ride)": [[[21, 51], "s5", "process-focusable"]], + "(code complete task-manager-tube-ride)": [[23, "t9", "(function none)"]], + "(code active task-manager-tube-ride)": [ + [[244, 259], "gp", "process-focusable"], + [418, "v1", "process-focusable"], + [494, "v1", "process-focusable"], + [[569, 584], "gp", "process-focusable"], + [611, "t9", "(function none)"] + ], + "(code complete task-manager-comb-travel)": [[51, "t9", "(function none)"]], + "(method 15 hud-factory-damage)": [[26, "v1", "float"]], + "(method 43 warf-projectile)": [[35, "a1", "process-focusable"]], + "(method 91 h-warf)": [ + [126, "v0", "vehicle"], + [354, "v0", "vehicle"] + ], + "(method 54 h-warf)": [[[15, 21], "a0", "process-focusable"]], + "(method 97 h-warf)": [[159, "a0", "vector"]], + "(method 156 fac-gunturret)": [[[11, 19], "a0", "process-focusable"]], + "(method 155 fac-gunturret)": [[[15, 23], "a0", "process-focusable"]], + "(code fire fac-robotank-turret)": [ + [65, "v1", "art-joint-anim"], + [122, "v1", "art-joint-anim"] + ], + "(code ready fac-robotank-turret)": [[10, "v1", "art-joint-anim"]], + "(method 31 fac-robotank-turret)": [[76, "s3", "collide-shape-prim"]], + "fac-robotank-reticle-handler": [ + [6, "v1", "vector"], + [[11, 34], "s5", "vector"], + [[12, 34], "gp", "vector"], + [56, "v1", "float"] + ], + "robotank-turret-handler": [ + [52, "v1", "collide-shape-prim-group"], + [66, "v1", "collide-shape-prim-group"], + [[96, 106], "s4", "cspace"], + [18, "v1", "float"] + ], + "(enter die fac-gun-tower)": [[13, "v1", "art-joint-anim"]], + "(event idle fac-gun-tower)": [ + [19, "gp", "projectile"], + [24, "gp", "projectile"], + [35, "gp", "projectile"], + [83, "gp", "projectile"] + ], + "fac-gun-tower-standard-event-handler": [ + [[3, 11], "gp", "attack-info"], + [[4, 22], "a2", "touching-shapes-entry"] + ], + "(event idle fac-gun-tower-base)": [[[18, 86], "s4", "projectile"]], + "(code idle fac-gun-tower-base)": [[10, "v1", "art-joint-anim"]], + "(method 36 fac-gun-tower)": [[46, "s2", "process-focusable"]], + "(method 35 fac-gun-tower)": [[79, "v0", "vehicle"]], + "fac-robotank-init-by-other": [ + [182, "gp", "factory-manager"], + [208, "gp", "factory-manager"], + [224, "gp", "factory-manager"], + [293, "t1", "float"], + [[346, 518], "gp", "fac-robotank-tread-info"] + ], + "(method 7 fac-robotank)": [ + [21, "a1", "fac-robotank"], + [28, "a1", "fac-robotank"], + [35, "a2", "fac-robotank"] + ], + "(post moving fac-robotank)": [[[33, 87], "s5", "factory-manager"]], + "fac-robotank-handler": [[[98, 105], "v1", "attack-info"]], + "fac-robotank-post": [ + [[365, 368], "v1", "fac-robotank-turret"], + [394, "v1", "float"] + ], + "(code idle factory-fighter)": [[10, "v1", "art-joint-anim"]], + "fac-target-standard-event-handler": [[[48, 54], "v1", "attack-info"]], + "(enter idle fac-target)": [[63, "v1", "art-joint-anim"]], + "(enter retracted fac-target)": [[33, "v1", "art-joint-anim"]], + "(method 60 factory-fighter)": [[52, "v0", "vehicle"]], + "(code die factory-fighter)": [[11, "v1", "art-joint-anim"]], + "(method 32 task-manager-factory-sky-battle)": [["_stack_", 16, "res-tag"]], + "update-railx-lights": [[[33, 88], "s3", "railx-states"]], + "update-mood-railx": [[[64, 109], "gp", "railx-states"]], + "set-railx-light-brightness!": [ + [[30, 36], "v1", "railx-states"], + [[13, 19], "v1", "railx-states"] + ], + "(code idle rail-warp-gate)": [[10, "v1", "art-joint-anim"]], + "(code idle hirez-viewer)": [[20, "v1", "art-joint-anim"]], + "(post startup title-control)": [ + [155, "gp", "external-art-buffer"], + [226, "gp", "external-art-buffer"] + ], + "(code startup title-control)": [ + [[59, 149], "gp", "mc-slot-info"], // (+ sp-0 64) is reused as both mc-slot-info and event-message-block + [354, "v1", "process-drawable"], + [356, "s4", "quaternion"] + ], + "(method 42 nav-graph)": [[27, "v1", "uint"]], + "(method 44 nav-graph)": [ + [[102, 125], "s0", "mysql-nav-edge"], + [144, "s0", "mysql-nav-edge"], + [236, "s0", "mysql-nav-edge"], + [246, "v1", "mysql-nav-edge"], + [254, "v1", "mysql-nav-edge"] + ], + "make-nav-graph": [ + [[28, 31], "v1", "mysql-nav-graph-level-info"], + [31, "v1", "mysql-nav-graph-level-info"] + ], + "(method 9 city-level-info)": [[387, "v1", "nav-segment"]], + "(method 11 city-level-info)": [[27, "a3", "(pointer int8)"]], + "(method 26 traffic-tracker)": [[26, "a0", "process-focusable"]], + "(method 25 traffic-tracker)": [[24, "a0", "process-focusable"]], + "(method 17 traffic-tracker)": [[23, "s1", "process-focusable"]], + "(method 21 traffic-tracker)": [[42, "s3", "vehicle"]], + "(method 44 traffic-engine)": [ + [115, "a3", "uint"], + [130, "a3", "uint"], + [99, "a2", "uint"], + [49, "t0", "uint"], + [66, "a2", "nav-branch"], + [65, "a3", "int"], + [76, "t0", "int"], + [98, "a3", "int"], + [114, "t0", "int"], + [129, "a2", "int"] + ], + "(method 19 traffic-engine)": [ + [19, "v1", "process-focusable"], + [30, "v1", "hvehicle"] + ], + "(method 52 traffic-engine)": [ + [36, "a2", "process-focusable"], + [[312, 341], "s2", "nav-segment"], + [149, "s3", "process-focusable"], + [160, "s3", "process-focusable"], + [169, "s3", "citizen"], + [79, "s3", "process-focusable"], + [90, "s3", "process-focusable"], + [113, "s3", "vehicle"] + ], + "(method 34 formation-object)": [ + [26, "a0", "process-focusable"], + [29, "a0", "process-focusable"] + ], + "(method 47 formation-object)": [[[20, 25], "v1", "citizen"]], + "traffic-manager-event-handler": [ + [[363, 370], "s5", "level"], + [[386, 395], "v1", "msg-get-num-inactive"], + [[399, 405], "v1", "msg-get-num-inactive"], + [74, "v1", "float"], + [166, "v1", "float"], + [509, "v1", "float"], + [[408, 412], "v1", "msg-get-inactive-objects"], + [[109, 113], "s5", "traffic-object-spawn-params"] + ], + "(method 41 formation-object)": [ + [[85, 181], "s5", "traffic-object-spawn-params"] + ], + "(method 12 mission-squad-control)": [ + [28, "v1", "process-drawable"], + [41, "v1", "process-focusable"] + ], + "(code wait citizen)": [[22, "v1", "art-joint-anim"]], + "(code in-ditch citizen)": [ + [23, "v1", "art-joint-anim"], + [122, "v1", "art-joint-anim"] + ], + "(method 82 citizen)": [ + [108, "v1", "vector"], + [[190, 321], "s5", "traffic-object-spawn-params"] + ], + "(method 59 citizen)": [[[99, 108], "a0", "process-focusable"]], + "(method 63 citizen)": [[[31, 60], "v1", "target"]], + "(post active citizen)": [ + [92, "a0", "formation-object"], + [94, "a0", "formation-object"] + ], + "(trans active citizen)": [ + [97, "a0", "formation-object"], + [101, "a0", "formation-object"] + ], + "(trans wait citizen)": [[[42, 45], "a0", "formation-object"]], + "(method 206 citizen)": [[[10, 62], "s4", "vehicle"]], + "(code on-ground civilian)": [[20, "v1", "art-joint-anim"]], + "(code dive civilian)": [[20, "v1", "art-joint-anim"]], + "(code cower-ground civilian)": [ + [22, "v1", "art-joint-anim"], + [84, "v1", "art-joint-anim"], + [155, "v1", "art-joint-anim"] + ], + "(method 233 civilian)": [[40, "v1", "ragdoll-proc"]], + "(event wait-for-ride civilian)": [[[3, 7], "a0", "process"]], + "(trans wait-for-ride civilian)": [[31, "v1", "vehicle"]], + "(code wait-for-ride civilian)": [[22, "v1", "art-joint-anim"]], + "(method 232 civilian)": [[[11, 44], "s3", "vehicle"]], + "(trans move-to-vehicle civilian)": [[[11, 53], "s0", "vehicle"]], + "(code board-vehicle civilian)": [ + [[116, 137], "s2", "vehicle"], + [[264, 284], "s5", "vehicle"], + [[358, 365], "a0", "vehicle"] + ], + "(trans ride civilian)": [[[9, 15], "v1", "vehicle"]], + "(code exit-vehicle civilian)": [ + [[13, 19], "a0", "vehicle"], + [[69, 83], "s5", "vehicle"], + [[199, 204], "v1", "vehicle"], + [[252, 262], "a0", "vehicle"], + [[157, 172], "s4", "vehicle"] + ], + "(trans exit-vehicle civilian)": [[[9, 15], "v1", "vehicle"]], + "(code wait-at-dest civilian)": [[22, "v1", "art-joint-anim"]], + "(event ride civilian)": [[5, "a0", "vector"]], + "(trans board-vehicle civilian)": [[[9, 15], "v1", "vehicle"]], + "(method 82 civilian)": [ + [[23, 26], "a0", "traffic-danger-info"], + [[69, 72], "a0", "traffic-danger-info"], + [[97, 109], "v1", "traffic-danger-info"] + ], + "civilian-flee-post": [[[71, 79], "s5", "nav-branch"]], + "(method 32 squad-control-city)": [[[50, 58], "s4", "process-focusable"]], + "(method 34 squad-control-city)": [ + [[85, 98], "a0", "process-focusable"], + [[24, 41], "a0", "vehicle"] + ], + "(method 35 squad-control-city)": [ + [[17, 51], "s2", "process-focusable"], + [99, "v1", "connection"], + [100, "v1", "collide-shape"], + [105, "v1", "collide-shape"], + [114, "s1", "process-focusable"], + [177, "s1", "process-focusable"], + [195, "s1", "process-focusable"], + [235, "v1", "connection"], + [236, "v1", "collide-shape"], + [241, "v1", "collide-shape"], + [250, "s1", "process-focusable"], + [313, "s1", "process-focusable"], + [331, "s1", "process-focusable"], + [370, "v1", "connection"], + [371, "v1", "collide-shape"], + [376, "v1", "collide-shape"], + [385, "s1", "process-focusable"], + [448, "s1", "process-focusable"], + [466, "s1", "process-focusable"] + ], + "(method 17 traffic-manager)": [ + [38, "s1", "int"], + [[115, 123], "s1", "int"] + ], + "(method 50 traffic-engine)": [ + [6, "a1", "int"], + [14, "a1", "int"], + [22, "a1", "int"] + ], + "(code gun-shoot wlander-female)": [ + [27, "v1", "art-joint-anim"], + [79, "v1", "art-joint-anim"], + [497, "v1", "process-focusable"], + [510, "v1", "art-joint-anim"], + [563, "v1", "art-joint-anim"], + [147, "s5", "process-focusable"], + [150, "s5", "process-focusable"], + [194, "v1", "art-joint-anim"], + [246, "v1", "art-joint-anim"], + [306, "v1", "art-joint-anim"], + [362, "v1", "art-joint-anim"], + [427, "v1", "art-joint-anim"] + ], + "(code close-attack wlander-female)": [[123, "v1", "art-joint-anim"]], + "(code wait wlander-female)": [ + [16, "v1", "art-joint-anim"], + [67, "v1", "art-joint-anim"] + ], + "(method 86 wlander-female)": [ + [18, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"] + ], + "(method 85 wlander-female)": [ + [18, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"] + ], + "(code close-attack wlander-male)": [[123, "v1", "art-joint-anim"]], + "(code standing wlander-male)": [[22, "v1", "art-joint-anim"]], + "(code gun-shoot wlander-male)": [ + [24, "v1", "art-joint-anim"], + [442, "v1", "process-focusable"], + [455, "v1", "art-joint-anim"], + [508, "v1", "art-joint-anim"], + [92, "s5", "process-focusable"], + [95, "s5", "process-focusable"], + [139, "v1", "art-joint-anim"], + [191, "v1", "art-joint-anim"], + [251, "v1", "art-joint-anim"], + [307, "v1", "art-joint-anim"], + [372, "v1", "art-joint-anim"] + ], + "(method 85 wlander-male)": [ + [18, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"] + ], + "(method 86 wlander-male)": [ + [18, "v1", "art-joint-anim"], + [46, "v1", "art-joint-anim"] + ], + "(trans gun-shoot wlander)": [ + [19, "gp", "process-focusable"], + [23, "gp", "process-focusable"], + [27, "gp", "process-focusable"], + [[57, 59], "gp", "process-focusable"], + [71, "gp", "process-focusable"], + [91, "gp", "process-focusable"], + [94, "gp", "process-focusable"] + ], + "(trans hostile wlander)": [[[30, 111], "gp", "process-focusable"]], + "(code wait waster-b)": [ + [101, "v1", "art-joint-anim"], + [150, "v1", "art-joint-anim"] + ], + "(exit get-up-back waster-b)": [ + [9, "v1", "collide-shape-prim-group"], + [[12, 24], "v1", "collide-shape-prim-group"] + ], + "(exit get-up-front waster-b)": [[[9, 24], "v1", "collide-shape-prim-group"]], + "(enter knocked waster-b)": [[[8, 22], "v1", "collide-shape-prim-group"]], + "(method 86 waster-b)": [[30, "v1", "art-joint-anim"]], + "(method 85 waster-b)": [ + [40, "a1", "art-joint-anim"], + [92, "a1", "art-joint-anim"], + [140, "s4", "art-joint-anim"], + [28, "a0", "civilian-global-info"], + [80, "a0", "civilian-global-info"] + ], + "(method 87 waster-b)": [[58, "v1", "art-joint-anim"]], + "(method 55 waster-b)": [[[27, 31], "a0", "process-focusable"]], + "(method 240 wlander)": [[4, "v1", "collide-shape-prim-group"]], + "(method 239 wlander)": [ + [23, "s4", "process-focusable"], + [42, "s4", "process-focusable"], + [59, "s4", "process-focusable"], + [67, "s4", "process-focusable"], + [85, "s4", "process-focusable"], + [69, "s4", "process-focusable"] + ], + "(method 82 wlander)": [ + [10, "a0", "float"], + [[8, 19], "v1", "handle"], + [[182, 186], "v1", "process-focusable"], + [[198, 211], "v1", "traffic-danger-info"] + ], + "(method 125 wlander)": [[[14, 51], "s5", "ragdoll-proc"]], + "(method 126 wlander)": [[[14, 24], "v1", "ragdoll-proc"]], + "(method 241 wlander)": [ + [43, "a1", "process-focusable"], + [47, "a1", "process-focusable"], + [51, "a1", "process-focusable"] + ], + "(method 13 flee-info)": [[79, "s4", "nav-branch"]], + "(enter wait-for-vehicle-return task-manager-desert-rescue)": [ + [[28, 33], "a0", "process-focusable"] + ], + "(code active wland-passenger)": [ + [112, "v1", "art-joint-anim"], + [171, "v1", "art-joint-anim"], + [22, "v1", "art-joint-anim"], + [40, "v1", "float"], + [80, "v1", "float"] + ], + "(trans race-home task-manager-desert-rescue)": [ + [58, "v1", "process-focusable"] + ], + "(code board-vehicle wland-passenger)": [ + [19, "v1", "art-joint-anim"], + [[58, 66], "s5", "vehicle"], + [[103, 112], "s5", "vehicle"], + [161, "v1", "art-joint-anim"], + [217, "s5", "vehicle"], + [236, "s5", "vehicle"], + [240, "s5", "vehicle"], + [[315, 336], "gp", "vehicle"], + [[349, 356], "a0", "vehicle"] + ], + "(trans board-vehicle wland-passenger)": [[[9, 15], "v1", "vehicle"]], + "(trans boarding wland-passenger)": [[56, "v0", "vehicle"]], + "(event ride wland-passenger)": [[[12, 15], "v1", "vehicle"]], + "(method 231 wland-passenger)": [ + [[10, 35], "s5", "vehicle"], + [[48, 54], "v1", "vehicle"] + ], + "(method 228 wland-passenger)": [[[11, 44], "s3", "vehicle"]], + "(code exit-vehicle wland-passenger)": [ + [[13, 19], "a0", "vehicle"], + [34, "v1", "art-joint-anim"], + [[61, 107], "gp", "vehicle"], + [[161, 182], "gp", "vehicle"], + [[211, 230], "s4", "vehicle"], + [266, "v1", "art-joint-anim"], + [345, "v1", "art-joint-anim"] + ], + "(trans exit-vehicle wland-passenger)": [[[9, 15], "v1", "vehicle"]], + "(enter entering-transport wland-passenger)": [[[39, 44], "a0", "vehicle"]], + "(method 227 wland-passenger)": [[11, "v0", "vehicle"]], + "update-nav-sphere": [ + [72, "f30", "float"], + [116, "f30", "float"] + ], + "(method 19 rope-joint-system)": [ + [23, "s4", "process-drawable"], + [37, "s4", "process-drawable"], + [51, "s4", "process-drawable"] + ], + "(method 19 rope-prim-system)": [ + ["_stack_", 132, "float"], + ["_stack_", 136, "float"] + ], + "(code turning-on neo-sat-shield)": [[10, "v1", "art-joint-anim"]], + "(code turning-off neo-sat-shield)": [[10, "v1", "art-joint-anim"]], + "(code hit neo-sat-shield)": [[10, "v1", "art-joint-anim"]], + "(method 25 neo-sat-shield)": [[13, "a0", "process-focusable"]], + "(code sat-idle neo-sat)": [[10, "v1", "art-joint-anim"]], + "(enter neo-sat-drill-prepare neo-sat)": [[27, "v1", "art-joint-anim"]], + "(enter neo-sat-drill-impact neo-sat)": [ + [213, "v1", "float"], + [231, "v1", "float"] + ], + "(method 211 neo-sat)": [ + [[369, 372], "v1", "process-focusable"], + [375, "v1", "collide-shape-moving"], + [18, "v1", "float"], + [107, "v1", "float"], + [162, "v1", "float"], + [212, "v1", "float"] + ], + "(code die neo-sat)": [ + [18, "v1", "art-joint-anim"], + [[255, 262], "gp", "handle"], + [78, "v1", "time-frame"] + ], + "(trans hostile neo-sat)": [[45, "v1", "float"]], + "(code active neo-sat-shield)": [[14, "v1", "art-joint-anim"]], + "(method 10 rope-neo-sat-whip)": [[[17, 30], "s5", "neo-sat"]], + "(method 82 neo-sat)": [[[58, 62], "v1", "process"]], + "(method 59 neo-sat)": [[[133, 137], "a0", "process-focusable"]], + "(method 203 neo-sat)": [[[28, 33], "a1", "process-focusable"]], + "(method 209 neo-sat)": [ + [55, "v1", "float"], + [94, "v1", "float"], + [117, "v1", "float"], + [138, "v1", "float"] + ], + "(method 210 neo-sat)": [[143, "v1", "process-focusable"]], + "(method 62 neo-sat)": [[14, "a0", "attack-info"]], + "(method 206 neo-sat)": [[128, "v1", "collide-shape-prim-sphere"]], + "(method 227 neo-sat)": [ + [91, "v1", "collide-shape-prim-sphere"], + [106, "v1", "collide-shape-moving"] + ], + "(trans neo-sat-laser-attack neo-sat)": [[54, "v1", "float"]], + "sparticle-height-set": [[[17, 33], "a0", "neo-sat"]], + "sparticle-shockwave-set": [[[17, 30], "a0", "neo-sat"]], + "(method 10 rope-joint-system)": [[28, "v1", "process-drawable"]], + "(method 9 rope-system)": [ + [62, "a0", "vector"], + [51, "a0", "vector"] + ], + "(method 20 rope-system)": [ + [11, "a1", "vector"], + [16, "a1", "vector"] + ], + "(code preparing-for-launch desert-rescue-transport)": [ + [10, "v1", "art-joint-anim"] + ], + "(code waiting-for-passenger desert-rescue-transport)": [ + [14, "v1", "art-joint-anim"] + ], + "(method 45 task-manager-desert-rescue)": [ + [[40, 48], "a0", "process-focusable"] + ], + "(method 48 task-manager-desert-rescue)": [[20, "f30", "float"]], + "(trans fight task-manager-desert-rescue)": [[67, "v1", "process-focusable"]], + "(trans pickup-passenger task-manager-desert-rescue)": [ + [[18, 27], "gp", "wland-passenger"], + [[84, 89], "a0", "process-focusable"], + [212, "v1", "process-focusable"] + ], + "(trans drop-off-passenger task-manager-desert-rescue)": [ + [67, "v1", "process-focusable"] + ], + "(trans play-dead-wlander-movie task-manager-desert-rescue)": [ + [[17, 25], "v1", "wland-passenger"] + ], + "(event play-dead-wlander-movie task-manager-desert-rescue)": [ + [[12, 19], "v1", "wland-passenger"] + ], + "(trans active task-manager-desert-rescue)": [[264, "a0", "vehicle"]], + "(method 43 task-manager-desert-rescue)": [[25, "v0", "handle"]], + "(method 43 desert-rescue-transport)": [ + [[63, 70], "v1", "tread-trail-tracker"], + [77, "v1", "tread-trail-tracker"], + [[107, 114], "v1", "tread-trail-tracker"], + [121, "v1", "tread-trail-tracker"] + ], + "(method 37 desert-rescue-transport)": [[23, "s4", "float"]], + "(trans active task-manager-desert-rescue-bbush)": [[66, "a0", "vehicle"]], + "(method 34 vehicle-rider)": [[[10, 33], "s5", "vehicle"]], + "(code get-up-front crimson-guard)": [[20, "v1", "art-joint-anim"]], + "(code get-up-back crimson-guard)": [[20, "v1", "art-joint-anim"]], + "(code close-attack-active crimson-guard)": [ + [15, "v1", "art-joint-anim"], + [48, "v1", "collide-shape-prim-group"] + ], + "(exit close-attack-active crimson-guard)": [ + [2, "v1", "collide-shape-prim-group"] + ], + "(code close-attack crimson-guard)": [ + [15, "v1", "art-joint-anim"], + [48, "v1", "collide-shape-prim-group"] + ], + "(exit close-attack crimson-guard)": [[2, "v1", "collide-shape-prim-group"]], + "(code roll-right crimson-guard)": [ + [[87, 98], "a0", "process-focusable"], + [[174, 185], "a0", "process-focusable"] + ], + "(code roll-left crimson-guard)": [ + [[87, 98], "a0", "process-focusable"], + [[174, 185], "a0", "process-focusable"] + ], + "(code arrest crimson-guard)": [ + [22, "v1", "art-joint-anim"], + [164, "v1", "art-joint-anim"], + [99, "v1", "art-joint-anim"] + ], + "(code waiting-ambush crimson-guard)": [ + [22, "v1", "art-joint-anim"], + [139, "v1", "art-joint-anim"], + [71, "v1", "art-joint-anim"] + ], + "orient-towards-code": [ + [35, "v1", "art-joint-anim"], + [103, "v1", "art-joint-anim"] + ], + "(code rifle-reload crimson-guard)": [ + [14, "v1", "art-joint-anim"], + [115, "a0", "process-focusable"], + [164, "v1", "art-joint-anim"], + [33, "v1", "float"], + [74, "v1", "float"] + ], + "(code gun-shoot crimson-guard)": [ + [28, "v1", "art-joint-anim"], + [166, "v1", "process-focusable"], + [276, "a0", "process-focusable"], + [314, "v1", "art-joint-anim"] + ], + "(trans gun-shoot crimson-guard)": [[[12, 55], "gp", "process-focusable"]], + "(trans rifle-hostile crimson-guard)": [[22, "v1", "process-focusable"]], + "(method 114 crimson-guard)": [[[2, 40], "s4", "touching-shapes-entry"]], + "(method 82 crimson-guard)": [ + [[203, 213], "s5", "traffic-danger-info"], + [238, "s5", "traffic-danger-info"], + [296, "s5", "traffic-danger-info"], + [[310, 322], "v1", "traffic-danger-info"], + [[471, 475], "v1", "process-focusable"] + ], + "(method 86 crimson-guard)": [ + [23, "a1", "art-joint-anim"], + [77, "a1", "art-joint-anim"], + [109, "a1", "art-joint-anim"], + [141, "v1", "art-joint-anim"], + [183, "a1", "art-joint-anim"], + [67, "v1", "guard-global-info"] + ], + "(code attack crimson-guard)": [[146, "a0", "process-focusable"]], + "(trans attack crimson-guard)": [ + [38, "v1", "process-focusable"], + [43, "v1", "process-focusable"], + [83, "a0", "process-focusable"] + ], + "(code attack-tazer crimson-guard)": [ + [14, "v1", "art-joint-anim"], + [67, "v1", "collide-shape-prim-group"], + [158, "v1", "collide-shape-prim-group"], + [195, "v1", "art-joint-anim"] + ], + "(trans attack-tazer crimson-guard)": [[[38, 44], "v1", "process-focusable"]], + "(enter grenade-hostile crimson-guard)": [[16, "v1", "float"]], + "(code grenade-throw-post-reloading crimson-guard)": [ + [14, "v1", "art-joint-anim"], + [123, "v1", "art-joint-anim"] + ], + "(method 24 reload-grenade)": [[[10, 26], "s5", "process-focusable"]], + "(method 264 crimson-guard)": [[[67, 73], "a0", "process-focusable"]], + "(method 194 crimson-guard)": [[80, "v1", "float"]], + "(method 46 ff-squad-control)": [ + [278, "t2", "ff-squad-control"], + [[158, 227], "s0", "crimson-guard"], + [221, "a0", "ff-squad-control"], + [[60, 109], "a3", "vehicle"], + [[285, 289], "t2", "traffic-guard-type-array"], + [297, "t2", "traffic-guard-type-array"], + [18, "a1", "ff-squad-control"], + [229, "v1", "ff-squad-control"], + [319, "a1", "ff-squad-control"] + ], + "(method 252 crimson-guard)": [ + [74, "s5", "process-focusable"], + [69, "s5", "process-focusable"], + [126, "s5", "process-focusable"], + [146, "s5", "process-focusable"], + [202, "s5", "process-focusable"], + [205, "s5", "process-focusable"] + ], + "(method 51 ff-squad-control)": [ + [13, "v1", "connection"], + [14, "v1", "collide-shape"], + [18, "v1", "collide-shape"], + [27, "s2", "process-focusable"], + [36, "s2", "process-focusable"], + [50, "s3", "connection"], + [67, "v1", "connection"], + [68, "v1", "collide-shape"], + [72, "v1", "collide-shape"], + [81, "s2", "process-focusable"], + [119, "v1", "connection"], + [120, "v1", "collide-shape"], + [124, "v1", "collide-shape"], + [133, "s2", "process-focusable"] + ], + "(method 39 ff-squad-control)": [[[7, 12], "gp", "crimson-guard"]], + "(method 43 ff-squad-control)": [[8, "gp", "crimson-guard"]], + "(method 16 ff-squad-control)": [ + ["_stack_", 176, "(array crimson-guard)"], + ["_stack_", 180, "(array float)"], + [[49, 82], "s2", "crimson-guard"] + ], + "(method 282 crimson-guard)": [ + ["_stack_", 24, "float"], + ["_stack_", 32, "float"], + [28, "v1", "float"] + ], + "(method 12 ff-squad-control)": [ + [28, "a1", "traffic-guard-type-array"], + [30, "a1", "traffic-guard-type-array"] + ], + "(method 55 ff-squad-control)": [[5, "v1", "ff-squad-control"]], + "(method 45 ff-squad-control)": [ + [130, "t0", "ff-squad-control"], + [[37, 92], "a2", "squad-alert-state-settings"], + [[44, 104], "a1", "traffic-guard-type-array"] + ], + "(code knocked-recover crimson-guard)": [[23, "a1", "art-joint-anim"]], + "(method 289 crimson-guard)": [[21, "v1", "float"]], + "(method 258 crimson-guard)": [[152, "v1", "collide-shape-prim"]], + "(method 212 crimson-guard)": [[[246, 249], "v1", "vehicle"]], + "(method 265 crimson-guard)": [ + [22, "s4", "process-focusable"], + [52, "s4", "process-focusable"] + ], + "(method 261 crimson-guard)": [[177, "v1", "process-focusable"]], + "(code impact vehicle-grenade)": [[33, "a0", "process"]], + "(post moving vehicle-grenade-deflect)": [[19, "t9", "(function none)"]], + "(code moving vehicle-grenade-deflect)": [[4, "t9", "(function none)"]], + "(method 35 vehicle-grenade-deflect)": [ + [[53, 58], "a0", "process-focusable"], + [102, "v1", "target"] + ], + "(method 38 guard-lazer-shot)": [[[28, 37], "a0", "process-focusable"]], + "(code sitting vehicle-grenade)": [[27, "a0", "float"]], + "(code wait citizen-fat)": [ + [101, "v1", "art-joint-anim"], + [150, "v1", "art-joint-anim"] + ], + "(exit get-up-back citizen-fat)": [ + [[9, 24], "v1", "collide-shape-prim-group"] + ], + "(exit get-up-front citizen-fat)": [ + [[9, 24], "v1", "collide-shape-prim-group"] + ], + "(enter knocked citizen-fat)": [[[8, 22], "v1", "collide-shape-prim-group"]], + "(method 86 citizen-fat)": [[30, "v1", "art-joint-anim"]], + "(method 85 citizen-fat)": [ + [40, "a1", "art-joint-anim"], + [92, "a1", "art-joint-anim"], + [140, "s4", "art-joint-anim"], + [28, "a0", "civilian-global-info"], + [80, "a0", "civilian-global-info"] + ], + "(method 87 citizen-fat)": [[58, "v1", "art-joint-anim"]], + "(method 55 citizen-fat)": [[[24, 31], "a0", "process-focusable"]], + "(code wait citizen-norm)": [ + [101, "v1", "art-joint-anim"], + [150, "v1", "art-joint-anim"] + ], + "(method 212 citizen-norm)": [[[36, 39], "v1", "vehicle"]], + "(exit get-up-back citizen-norm)": [ + [[9, 24], "v1", "collide-shape-prim-group"] + ], + "(exit get-up-front citizen-norm)": [ + [[9, 24], "v1", "collide-shape-prim-group"] + ], + "(enter knocked citizen-norm)": [[[8, 22], "v1", "collide-shape-prim-group"]], + "(method 86 citizen-norm)": [[33, "v1", "art-joint-anim"]], + "(method 85 citizen-norm)": [ + [19, "v1", "art-joint-anim"], + [58, "v1", "art-joint-anim"], + [118, "a1", "art-joint-anim"], + [170, "a1", "art-joint-anim"], + [233, "s4", "art-joint-anim"], + [106, "a0", "civilian-global-info"], + [158, "a0", "civilian-global-info"] + ], + "(method 87 citizen-norm)": [[58, "v1", "art-joint-anim"]], + "(method 55 citizen-norm)": [[[32, 39], "a0", "process-focusable"]], + "(code wait citizen-chick)": [[22, "v1", "art-joint-anim"]], + "(exit get-up-back citizen-chick)": [ + [[9, 24], "v1", "collide-shape-prim-group"] + ], + "(exit get-up-front citizen-chick)": [ + [[9, 24], "v1", "collide-shape-prim-group"] + ], + "(enter knocked citizen-chick)": [ + [[8, 22], "v1", "collide-shape-prim-group"] + ], + "(method 86 citizen-chick)": [[30, "v1", "art-joint-anim"]], + "(method 87 citizen-chick)": [[58, "v1", "art-joint-anim"]], + "(method 55 citizen-chick)": [[[24, 31], "a0", "process-focusable"]], + "(method 85 citizen-chick)": [ + [40, "a1", "art-joint-anim"], + [92, "a1", "art-joint-anim"], + [140, "s4", "art-joint-anim"], + [28, "a0", "civilian-global-info"], + [80, "a0", "civilian-global-info"] + ], + "(code active citizen-enemy)": [[30, "v1", "art-joint-anim"]], + "(method 217 citizen-enemy)": [ + [46, "s1", "process-focusable"], + [50, "s1", "process-focusable"], + [72, "s1", "process-focusable"] + ], + "(method 84 citizen-enemy)": [[45, "v1", "process-focusable"]], + "(trans active mh-squad-member)": [ + [29, "v1", "process-focusable"], + [34, "v1", "process-focusable"] + ], + "(method 217 mh-squad-member)": [[71, "a0", "process-focusable"]], + "(method 84 mh-squad-member)": [[40, "v1", "process-focusable"]], + "(method 84 kg-squad-member)": [[40, "v1", "process-focusable"]], + "(code circling metalhead-flitter)": [[27, "v1", "art-joint-anim"]], + "(trans circling metalhead-flitter)": [[[10, 15], "gp", "process-focusable"]], + "(code stare metalhead-flitter)": [[126, "v1", "art-joint-anim"]], + "(code attack metalhead-flitter)": [ + [35, "v1", "art-joint-anim"], + [161, "v1", "art-joint-anim"] + ], + "(trans attack metalhead-flitter)": [[[16, 57], "gp", "process-focusable"]], + "(post stare metalhead-flitter)": [[9, "t9", "(function none)"]], + "(post active metalhead-flitter)": [[9, "t9", "(function none)"]], + "(method 224 metalhead-flitter)": [[[17, 56], "s3", "process-focusable"]], + "(code ambush-jumping metalhead-flitter)": [ + [14, "v1", "art-joint-anim"], + [251, "v1", "art-joint-anim"] + ], + "(enter ambush metalhead-flitter)": [[[44, 54], "a0", "process-focusable"]], + "(method 86 metalhead-flitter)": [[15, "a1", "art-joint-anim"]], + "(method 85 metalhead-flitter)": [ + [14, "v1", "art-joint-anim"], + [69, "v1", "art-joint-anim"] + ], + "(method 227 metalhead-flitter)": [[4, "v1", "collide-shape-prim-group"]], + "(method 51 kg-squad-control)": [ + [[37, 52], "a2", "kg-squad-settings"], + [[86, 94], "t0", "kg-squad-settings"], + [[114, 124], "t0", "kg-squad-member"] + ], + "(method 52 kg-squad-control)": [[[25, 33], "a3", "kg-squad-member"]], + "(method 38 kg-squad-control)": [[[0, 5], "a1", "kg-squad-member"]], + "(method 43 kg-squad-control)": [[[3, 6], "v1", "kg-squad-member"]], + "(method 39 kg-squad-control)": [[[0, 5], "a1", "kg-squad-member"]], + "(method 39 mh-squad-control)": [[[0, 5], "a1", "mh-squad-member"]], + "(method 48 mh-squad-control)": [[[10, 18], "a3", "mh-squad-settings"]], + "(code knocked-recover metalhead-grunt)": [ + [[13, 16], "v1", "ragdoll-proc"], + [40, "v1", "art-joint-anim"], + [69, "v1", "art-joint-anim"] + ], + "(trans wait-for-focus metalhead-grunt)": [ + [[10, 41], "s5", "process-focusable"] + ], + "(code stop-chase metalhead-grunt)": [[77, "gp", "art-joint-anim"]], + "(code spin-attack metalhead-grunt)": [ + [45, "gp", "art-joint-anim"], + [[69, 77], "a0", "process-focusable"] + ], + "(enter spin-attack metalhead-grunt)": [ + [[34, 48], "gp", "process-focusable"] + ], + "(code attack metalhead-grunt)": [ + [55, "gp", "art-joint-anim"], + [[150, 156], "a0", "mh-grunt-anim-info"] + ], + "(code hostile metalhead-grunt)": [[38, "gp", "art-joint-anim"]], + "(code active metalhead-grunt)": [ + [203, "gp", "art-joint-anim"], + [247, "gp", "art-joint-anim"], + [330, "v1", "art-joint-anim"], + [390, "v1", "art-joint-anim"], + [119, "gp", "art-joint-anim"] + ], + "(code falling-ambush metalhead-grunt)": [[18, "v1", "art-joint-anim"]], + "(method 85 metalhead-predator)": [ + [22, "v1", "art-joint-anim"], + [54, "v1", "art-joint-anim"], + [97, "v1", "art-joint-anim"], + [127, "v1", "art-joint-anim"], + [161, "v1", "art-joint-anim"], + [193, "v1", "art-joint-anim"] + ], + "(code close-attack metalhead-predator)": [ + [15, "v1", "art-joint-anim"], + [93, "v1", "art-joint-anim"] + ], + "(code hostile metalhead-predator)": [ + [14, "v1", "art-joint-anim"], + [67, "v1", "art-joint-anim"] + ], + "(trans hostile metalhead-predator)": [[[16, 59], "gp", "process-focusable"]], + "(trans fire metalhead-predator)": [[[10, 26], "v1", "process-focusable"]], + "(code fire metalhead-predator)": [ + [26, "v1", "art-joint-anim"], + [[95, 125], "s5", "process-focusable"] + ], + "(method 224 metalhead-predator)": [ + [[4, 20], "v1", "collide-shape-prim-group"] + ], + "(method 59 metalhead-predator)": [[[14, 33], "s5", "process-focusable"]], + "(method 86 metalhead-predator)": [ + [22, "v1", "art-joint-anim"], + [54, "v1", "art-joint-anim"], + [90, "v1", "art-joint-anim"], + [124, "v1", "art-joint-anim"], + [156, "v1", "art-joint-anim"] + ], + "(method 225 metalhead-predator)": [[[65, 211], "s3", "process-focusable"]], + "(code close-attack roboguard-city)": [ + [30, "v1", "art-joint-anim"], + [58, "v1", "art-joint-anim"], + [144, "a0", "collide-shape-prim-group"], + [168, "v1", "art-joint-anim"], + [196, "v1", "art-joint-anim"], + [252, "v1", "collide-shape-prim-group"], + [269, "v1", "art-joint-anim"], + [297, "v1", "art-joint-anim"], + [[353, 358], "v1", "collide-shape-prim-group"] + ], + "(trans close-attack roboguard-city)": [ + [4, "v1", "collide-shape-prim-group"], + [54, "s3", "process-focusable"], + [[66, 71], "s3", "process-focusable"] + ], + "(code roll-exit roboguard-city)": [[25, "v1", "art-joint-anim"]], + "(code roll-enter roboguard-city)": [[14, "v1", "art-joint-anim"]], + "(trans dizzy roboguard-city)": [ + [52, "v1", "float"], + [80, "v1", "float"], + [108, "v1", "float"], + [136, "v1", "float"], + [164, "v1", "float"], + [192, "v1", "float"], + [220, "v1", "float"], + [248, "v1", "float"] + ], + "roboguard-city-turret-code": [ + [75, "a1", "art-joint-anim"], + [168, "a1", "art-joint-anim"] + ], + "(code dizzy roboguard-city)": [[14, "v1", "art-joint-anim"]], + "(method 238 roboguard-city)": [[40, "v1", "float"]], + "(method 236 roboguard-city)": [[144, "v1", "float"]], + "(method 86 roboguard-city)": [ + [33, "a2", "art-joint-anim"], + [62, "a2", "art-joint-anim"] + ], + "(method 85 roboguard-city)": [ + [39, "v1", "art-joint-anim"], + [67, "v1", "art-joint-anim"] + ], + "(method 59 roboguard-city)": [[[16, 35], "s5", "process-focusable"]], + "(method 194 roboguard-city)": [ + [27, "v1", "float"], + [53, "v1", "float"], + [244, "v1", "float"] + ], + "(method 237 roboguard-city)": [[112, "a0", "process-focusable"]], + "(anon-function 13 roboguard-city)": [[[2, 76], "s3", "roboguard-city"]], + "(code exit-transport spydroid)": [[14, "v1", "art-joint-anim"]], + "(method 236 spydroid)": [[71, "a0", "process-focusable"]], + "(enter hunting spydroid)": [[5, "t9", "(function none)"]], + "(method 194 spydroid)": [[48, "v1", "float"]], + "(code spydroid-notice spydroid)": [[14, "v1", "art-joint-anim"]], + "(code scan spydroid)": [[14, "v1", "art-joint-anim"]], + "(trans spydroid-notice spydroid)": [[[53, 60], "a0", "process-focusable"]], + "(code flip spydroid)": [[[18, 26], "a0", "process-focusable"]], + "(code wait-for-vulnerable-close)": [[28, "v1", "art-joint-anim"]], + "(method 233 spydroid)": [ + [26, "s4", "process-focusable"], + [52, "s4", "process-focusable"] + ], + "(method 82 spydroid)": [[4, "v1", "enemy-jump-info"]], + "(trans hostile spydroid)": [[[10, 23], "gp", "process-focusable"]], + "(code wait-for-vulnerable spydroid)": [[14, "v1", "art-joint-anim"]], + "(trans wait-for-vulnerable spydroid)": [ + [[10, 66], "gp", "process-focusable"] + ], + "(trans wait-for-vulnerable-close)": [[[10, 66], "gp", "process-focusable"]], + "(code attack spydroid)": [ + [[16, 24], "a0", "process-focusable"], + [51, "v1", "art-joint-anim"], + [157, "v1", "art-joint-anim"] + ], + "(event active spydroid)": [[[3, 13], "gp", "traffic-danger-info"]], + "(event search spydroid)": [[[3, 13], "gp", "traffic-danger-info"]], + "(method 232 spydroid)": [[[40, 47], "a0", "process-focusable"]], + "(code fire flying-turret)": [[21, "v1", "art-joint-anim"]], + "(method 194 flying-turret)": [ + [26, "v1", "float"], + [137, "v1", "float"] + ], + "(method 228 flying-turret)": [[99, "v1", "float"]], + "(method 227 flying-turret)": [ + [165, "v1", "float"], + [213, "v1", "float"] + ], + "(method 226 flying-turret)": [[90, "a0", "process-focusable"]], + "(method 140 flying-turret)": [[[29, 35], "a0", "process-focusable"]], + "(trans hostile flying-turret)": [[323, "v1", "process-focusable"]], + "flying-turret-gun-aim-func": [[[2, 46], "s4", "flying-turret"]], + "(method 14 billiard-table)": [[129, "a1", "billiard-table"]], + "(method 13 billiard-table)": [ + [18, "v1", "float"], + [34, "v1", "float"], + [50, "v1", "float"] + ], + "compute-suck-speed-scalar": [[1, "v1", "float"]], + "(method 30 h-kg-pickup)": [[[181, 207], "s4", "dark-barrel"]], + "(code resolution task-manager-bbush-board)": [[40, "gp", "handle"]], + "(code active task-manager-bbush-board)": [ + [47, "gp", "handle"], + [96, "gp", "handle"] + ], + "(method 11 flitter-spawner)": [ + [24, "v0", "(pointer actor-group)"], + ["_stack_", 16, "res-tag"] + ], + "(method 21 task-manager-desert-rescue-bbush)": [["_stack_", 16, "res-tag"]], + "(trans active flitter-spawner)": [ + [[195, 217], "s5", "process-focusable"], + [33, "v1", "process-focusable"] + ], + "(event idle ctyn-lamp)": [[13, "s5", "joint-exploder"]], + "(method 32 propa)": [ + [38, "s1", "process-focusable"], + [42, "s1", "process-focusable"], + [46, "s1", "process-focusable"] + ], + "(post idle propa)": [ + [193, "a0", "process-focusable"], + [92, "v0", "sound-rpc-set-param"] + ], + "(event idle propa)": [ + [[12, 15], "v1", "attack-info"], + [[62, 65], "a0", "collide-shape-prim-group"] + ], + "(method 21 parking-spot)": [[[10, 158], "s5", "vehicle"]], + "(method 23 parking-spot)": [[[66, 69], "v1", "vehicle"]], + "parking-spot-spawn": [[[11, 15], "v0", "vehicle"]], + "(event idle-close security-wall)": [ + [[23, 28], "v1", "attack-info"], + [56, "s3", "process-drawable"], + [133, "v1", "process-drawable"], + [149, "v1", "process-drawable"], + [156, "v1", "process-drawable"], + [159, "a0", "process-drawable"], + [173, "v1", "process-drawable"], + [180, "v1", "process-drawable"], + [183, "a0", "process-drawable"], + [196, "v1", "process-drawable"], + [199, "a0", "process-drawable"], + [281, "v1", "process-drawable"], + [291, "a0", "collide-shape"], + [[204, 208], "a2", "float"] + ], + "(method 33 task-manager-bbush-board)": [[55, "v1", "hud"]], + "(code active task-manager-city-vehicle-training-hover-zone-2)": [ + [[24, 28], "v1", "vehicle"], + [103, "v1", "vehicle"] + ], + "(code complete task-manager-city-vehicle-training-hover-zone-1)": [ + [10, "t9", "(function none)"] + ], + "(code fail task-manager-city-vehicle-training-hover-zone-1)": [ + [12, "t9", "(function none)"] + ], + "(code active task-manager-city-vehicle-training-hover-zone-1)": [ + [137, "v1", "vehicle"], + [201, "t9", "(function none)"] + ], + "(event active task-manager-bbush-board)": [[4, "v1", "float"]], + "(code idle farthy)": [[10, "v1", "art-joint-anim"]], + "ctyport-sparticle-mode-animate": [ + [5, "v1", "(array symbol)"], + [11, "a1", "(array int32)"], + [18, "a1", "(array int32)"], + [21, "a1", "(array int32)"], + [27, "a0", "(array int32)"], + [28, "v1", "(array int32)"], + [44, "v1", "(pointer int32)"], + [46, "v1", "(pointer int32)"], + [16, "a1", "(pointer uint32)"], + [32, "a2", "int"], + [33, "a1", "(pointer uint64)"] + ], + "(method 30 boat-base)": [ + [280, "v1", "boat-manager"], + [330, "v1", "boat-manager"] + ], + "(method 35 htorpedo)": [[[96, 107], "s3", "particle-local-space-info"]], + "(method 17 light-trail-tracker-torpedo)": [[1, "v1", "htorpedo"]], + "(event player-control htorpedo)": [[5, "v1", "float"]], + "(event waiting htorpedo)": [[5, "v1", "float"]], + "(method 15 ctyport-attack-hud)": [[137, "v1", "float"]], + "(enter start-mission ctyport-attack-manager)": [[77, "v1", "float"]], + "(trans get-on-nuke ctyport-attack-manager)": [ + [[133, 138], "a0", "process-focusable"] + ], + "(method 49 ctyport-attack-manager)": [[[52, 68], "s4", "process-focusable"]], + "(anon-function 45 ctyport-attack)": [ + [13, "a0", "ctyport-attack-manager"], + [16, "a0", "ctyport-attack-manager"] + ], + "(method 44 ctyport-attack-manager)": [ + [137, "v1", "float"], + [163, "v1", "float"] + ], + "(method 51 ctyport-attack-manager)": [[31, "v0", "entity-actor"]], + "(event menacing ctyport-mine)": [[14, "v1", "vector"]], + "(event idle ctyport-mine)": [[22, "v1", "vector"]], + "(event hidden ctyport-mine)": [[6, "v1", "vector"]], + "ctyport-mine-init-by-other": [ + [118, "v1", "float"], + [141, "v1", "float"], + [167, "v1", "float"], + [193, "v1", "float"] + ], + "(method 47 ctyport-attack-manager)": [[39, "a1", "process-focusable"]], + "(trans head-to-wall ctyport-attack-manager)": [ + [45, "v1", "process-focusable"] + ], + "(trans pickup-nukes ctyport-attack-manager)": [ + [175, "v1", "process-focusable"] + ], + "(code explode krimson-wall-break)": [[18, "v0", "art-joint-anim"]], + "update-mood-ctygenb": [[[61, 97], "gp", "ctygenb-states"]], + "update-mood-ctyslumc": [[[30, 62], "s5", "ctyslumc-states"]], + "update-mood-ctyslumb": [[[30, 62], "s5", "ctyslumb-states"]], + "update-mood-mountain": [[[50, 83], "gp", "mountain-states"]], + "update-mood-atoll": [[[30, 48], "s4", "atoll-states"]], + "(code die v-catapult)": [[13, "t9", "(function none)"]], + "(post hostile v-catapult)": [[4, "t9", "(function none)"]], + "(code active catapult-shot-sphere)": [ + [14, "v1", "art-joint-anim"], + [66, "v1", "art-joint-anim"] + ], + "(method 90 v-catapult)": [ + [54, "v1", "art-joint-anim"], + [143, "v1", "art-joint-anim"] + ], + "(method 62 v-catapult)": [[[4, 41], "s5", "collide-shape-prim-group"]], + "(method 49 v-catapult)": [ + [[4, 16], "a0", "vector"], + [[5, 19], "v1", "process"] + ], + "(code explode wascity-airlock-debris)": [ + [3, "v0", "entity-actor"], + [7, "v0", "entity-actor"] + ], + "(method 26 desert-jump-manager)": [ + [[374, 379], "s4", "process-focusable"], + [405, "s4", "process-focusable"], + [531, "s4", "process-focusable"], + [[80, 318], "s3", "process-focusable"], + [518, "v1", "float"], + [631, "v1", "float"], + [458, "v1", "float"], + [167, "v1", "float"] + ], + "(code active desert-jump-manager)": [ + [443, "a0", "process-focusable"], + [83, "v0", "entity-actor"], + [518, "v1", "float"], + [63, "v1", "float"], + [183, "a0", "int"], + [236, "a0", "int"] + ], + "(method 30 desert-jump-manager)": [[[16, 21], "v1", "projectile"]], + "(method 32 desert-jump-manager)": [ + [122, "s2", "wvehicle"], + [225, "v1", "float"], + [240, "v1", "float"] + ], + "(method 22 beam-generator)": [[[26, 30], "a1", "process-focusable"]], + "(method 21 deschase-artifact)": [[[26, 30], "a1", "process-focusable"]], + "(method 35 player-controller)": [[12, "v1", "vector"]], + "(code active desert-chase-ambush-manager)": [[136, "a2", "float"]], + "(method 34 desert-chase-ambush-manager)": [[72, "v1", "handle"]], + "(method 32 desert-chase-ambush-manager)": [[[90, 137], "s2", "marauder"]], + "(method 10 deschase-vehicle-control)": [ + [[17, 26], "v1", "process-focusable"] + ], + "(method 12 deschase-vehicle-control)": [ + [[16, 32], "gp", "process-focusable"], + [46, "v0", "(array collide-shape)"] + ], + "(method 26 desert-chase-chase-manager)": [ + [[19, 24], "a0", "process-focusable"], + [66, "a0", "process-focusable"] + ], + "(method 33 desert-chase-chase-manager)": [[28, "a0", "process-focusable"]], + "(code complete desert-chase-chase-manager)": [[14, "t9", "(function none)"]], + "desert-chase-ambush-intro-sequence": [ + [325, "v1", "float"], + [404, "a2", "float"] + ], + "(code active desert-chase-chase-manager)": [ + [[399, 420], "s5", "process-focusable"], + [529, "s5", "process-focusable"], + [538, "s5", "process-focusable"], + [358, "s3", "process-focusable"], + [360, "v1", "process-focusable"] + ], + "catapult-target-handler": [[4, "v1", "vector"]], + "(event back bombbot-bomb)": [[[13, 53], "s3", "process-focusable"]], + "(enter explode bombbot-bomb)": [[59, "a0", "process"]], + "(method 26 task-manager-port-fight)": [[[315, 343], "s2", "bombbot"]], + "(code hostile bombbot-player)": [[38, "v1", "art-joint-anim"]], + "(method 196 bombbot-player)": [[[214, 218], "a0", "process-focusable"]], + "(trans hostile bomb-bot)": [[[34, 61], "gp", "process-focusable"]], + "(method 196 bomb-bot)": [ + [[1, 119], "gp", "process-focusable"], + [[30, 68], "s2", "process-focusable"] + ], + "(method 84 bombbot)": [[27, "v1", "process-focusable"]], + "bombbot-gun-callback": [[[6, 76], "s4", "bombbot"]], + "bombbot-gun-swivel-callback": [[[4, 87], "s3", "bombbot"]], + "bombbot-head-callback": [[[2, 56], "s4", "bombbot"]], + "bombbot-callback": [[[2, 190], "s4", "bombbot"]], + "(enter explode bombbot)": [[110, "a0", "process"]], + "(code die bombbot)": [[11, "v1", "art-joint-anim"]], + "(code blow-wall bombbot)": [[10, "v1", "art-joint-anim"]], + "(code drop-bombs bombbot)": [[10, "v1", "art-joint-anim"]], + "(code hostile bombbot)": [[10, "v1", "art-joint-anim"]], + "(trans hostile bombbot)": [[[45, 94], "v1", "process-focusable"]], + "(enter hostile bombbot)": [[15, "v1", "collide-shape-prim-group"]], + "(method 200 bombbot)": [[4, "v1", "collide-shape-prim-group"]], + "(method 194 bombbot)": [ + ["_stack_", 896, "float"], + ["_stack_", 912, "float"] + ], + "(method 196 bombbot)": [ + [[68, 76], "s1", "process-focusable"], + [110, "gp", "process-focusable"] + ], + "(method 51 ctyport-attack-manager-bbush)": [[12, "v0", "entity-actor"]], + "(code wait ctyport-attack-manager-bbush)": [ + [136, "v0", "entity-actor"], + [[141, 144], "a0", "process-focusable"] + ], + "(method 46 cty-hijack-missile)": [[[17, 24], "a0", "process-focusable"]], + "(trans chasing-2 cty-hijack-missile)": [[75, "v1", "process-focusable"]], + "(trans fake-chase cty-hijack-missile)": [ + [342, "v1", "process-focusable"], + [74, "v1", "float"], + [94, "v1", "float"], + [117, "v1", "float"], + [137, "v1", "float"], + [157, "v1", "float"] + ], + "(method 53 cty-hijack-missile)": [[13, "v1", "float"]], + "(method 51 cty-hijack-missile)": [ + [[17, 196], "s5", "process-focusable"], + [[461, 467], "v1", "vehicle"], + [[588, 594], "v1", "vehicle"], + [263, "v1", "float"], + [286, "v1", "float"], + [309, "v1", "float"], + [329, "v1", "float"], + [349, "v1", "float"], + [371, "v1", "float"], + [394, "v1", "float"], + [414, "v1", "float"], + [434, "v1", "float"], + ["_stack_", 72, "float"], + ["_stack_", 80, "float"] + ], + "(method 48 cty-hijack-missile)": [[[17, 25], "v1", "h-kg-pickup"]], + "(method 47 cty-hijack-missile)": [[[19, 86], "s2", "h-kg-pickup"]], + "(method 50 cty-hijack-missile)": [ + [[74, 79], "a0", "process-focusable"], + [176, "v1", "process-focusable"], + [228, "v1", "process-focusable"] + ], + "(method 11 hijack-missile-bobber)": [ + [20, "v1", "float"], + [59, "v1", "float"] + ], + "(method 36 cty-missile-lure)": [ + [16, "v1", "connection"], + [17, "v1", "collide-shape"], + [21, "v1", "collide-shape"], + [60, "v1", "connection"], + [61, "v1", "collide-shape"], + [65, "v1", "collide-shape"], + [103, "v1", "connection"], + [104, "v1", "collide-shape"], + [108, "v1", "collide-shape"] + ], + "(code opening cty-missile-lure)": [[25, "v1", "art-joint-anim"]], + "(code closing cty-missile-lure)": [[19, "v1", "art-joint-anim"]], + "(code active cty-missile-lure)": [[10, "v1", "art-joint-anim"]], + "(trans active cty-hijack-manager)": [ + [[18, 45], "gp", "process-focusable"], + [104, "v1", "process-focusable"], + [[136, 151], "gp", "process-focusable"], + [169, "gp", "process-focusable"] + ], + "(trans decoy-stage cty-hijack-manager)": [ + [29, "v1", "process-focusable"], + [450, "v1", "process-focusable"] + ], + "(code show-missile-launch cty-hijack-manager)": [ + [78, "a0", "process-focusable"] + ], + "(enter player-riding cty-hijack-manager)": [ + [[42, 45], "a0", "boat-manager"] + ], + "(code recoil cty-missile-launcher)": [[14, "v1", "art-joint-anim"]], + "(trans player-riding cty-hijack-manager)": [ + [25, "v1", "process-focusable"], + [183, "v1", "process-focusable"] + ], + "(code idle cty-missile-launcher)": [[14, "v1", "art-joint-anim"]], + "(method 37 cty-hijack-manager)": [[[27, 34], "s4", "process-focusable"]], + "(enter fail cty-hijack-manager)": [ + [7, "v0", "(state resetter-params cty-hijack-manager)"] + ], + "(method 20 ctyport-attack-manager-bbush)": [["_stack_", 96, "res-tag"]], + "(code idle farm-sprinkler-barrels)": [[10, "v1", "art-joint-anim"]], + "(code explode com-power-box)": [ + [77, "v1", "collide-shape-prim-group"], + [116, "a0", "process"] + ], + "(enter active task-manager-city-destroy-grid)": [ + ["_stack_", 272, "res-tag"] + ], + "(code wait task-manager-city-destroy-grid)": [[40, "t9", "(function none)"]], + "(code die jinx)": [[37, "v1", "art-joint-anim"]], + "(post die jinx)": [[11, "t9", "(function none)"]], + "(method 32 task-manager-city-destroy-grid)": [ + [118, "s5", "process-focusable"], + [132, "gp", "process-drawable"], + [135, "gp", "process-drawable"], + [100, "v0", "sound-rpc-set-param"] + ], + "(method 84 jinx)": [[45, "v1", "process-focusable"]], + "(code do-power-box jinx)": [ + [19, "v1", "art-joint-anim"], + [83, "v1", "art-joint-anim"], + [135, "v1", "art-joint-anim"], + [254, "v1", "art-joint-anim"], + [194, "v1", "art-joint-anim"] + ], + "(code waiting-idle jinx)": [ + [159, "v1", "art-joint-anim"], + [81, "v1", "art-joint-anim"] + ], + "(code board-vehicle jinx)": [ + [14, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"], + [134, "v1", "art-joint-anim"], + [189, "v1", "art-joint-anim"], + [244, "v1", "art-joint-anim"], + [[297, 304], "a0", "vehicle"] + ], + "(code wait-for-ride jinx)": [ + [159, "v1", "art-joint-anim"], + [81, "v1", "art-joint-anim"] + ], + "(method 232 jinx)": [[[11, 44], "s3", "vehicle"]], + "(code exit-vehicle jinx)": [ + [[9, 15], "a0", "vehicle"], + [108, "v1", "art-joint-anim"], + [162, "v1", "art-joint-anim"], + [217, "v1", "art-joint-anim"], + [281, "v1", "art-joint-anim"], + [[35, 50], "s5", "vehicle"], + [[71, 78], "a0", "vehicle"] + ], + "board-vehicle-get-in-car-end": [[[9, 30], "gp", "vehicle"]], + "board-vehicle-get-in-car-sit": [[[10, 31], "s4", "vehicle"]], + "board-vehicle-get-in-car-land": [[[10, 31], "s4", "vehicle"]], + "board-vehicle-get-in-car-jump": [[[12, 34], "s0", "vehicle"]], + "(enter wait-for-ride jinx)": [[[14, 21], "a0", "vehicle"]], + "(trans wait-for-ride jinx)": [[16, "v1", "vehicle"]], + "(enter move-to-vehicle jinx)": [[[9, 30], "gp", "vehicle"]], + "(trans move-to-vehicle jinx)": [[[11, 46], "s0", "vehicle"]], + "(method 26 task-manager-city-destroy-grid)": [ + [[17, 666], "s5", "jinx"], + [[193, 210], "v1", "vehicle"], + [[253, 287], "a2", "vehicle"], + [[494, 664], "s4", "vehicle"] + ], + "check-onintent-bugs": [[[31, 49], "s3", "sprite-vec-data-2d"]], + "(method 11 cty-sniper-battery)": [ + [185, "v1", "art-joint-anim"], + ["_stack_", 16, "res-tag"] + ], + "cty-sniper-battery-handler": [ + [11, "v1", "vector"], + [[18, 25], "a1", "attack-info"], + [41, "a1", "attack-info"], + [43, "a1", "attack-info"], + [45, "a1", "attack-info"], + [47, "a1", "attack-info"] + ], + "(code bail-up cty-sniper-button)": [[35, "v1", "art-joint-anim"]], + "(code idle-down cty-sniper-button)": [[65, "v1", "art-joint-anim"]], + "(code going-down cty-sniper-button)": [ + [52, "v1", "art-joint-anim"], + [27, "v1", "float"] + ], + "(event idle-up cty-sniper-button)": [[[3, 5], "v1", "attack-info"]], + "(code going-down cty-sniper-button-top)": [[10, "v1", "art-joint-anim"]], + "(code going-up cty-sniper-button-top)": [[10, "v1", "art-joint-anim"]], + "(code vulnerable cty-sniper-battery)": [[17, "v1", "art-joint-anim"]], + "(code idle cty-sniper-battery)": [[12, "v1", "art-joint-anim"]], + "(code explode cty-sniper-battery)": [[198, "v1", "process-drawable"]], + "(method 11 cty-sniper-turret)": [ + ["_stack_", 16, "res-tag"], + [14, "v0", "(pointer actor-group)"] + ], + "(code die cty-sniper-turret)": [[142, "v1", "art-joint-anim"]], + "(code ready cty-sniper-turret)": [ + [11, "v1", "art-joint-anim"], + [66, "v1", "art-joint-anim"], + [95, "v1", "art-joint-anim"] + ], + "(code locked-on cty-sniper-turret)": [[33, "v1", "art-joint-anim"]], + "(code asleep cty-sniper-turret)": [[10, "v1", "art-joint-anim"]], + "(trans idle cty-sniper-turret-reticle)": [ + [50, "v1", "float"], + [70, "v1", "float"] + ], + "(enter idle cty-sniper-turret-reticle)": [ + [23, "v1", "float"], + [43, "v1", "float"] + ], + "cty-sniper-turret-reticle-handler": [[7, "a0", "vector"]], + "(method 15 hud-cty-sniper-fight)": [[86, "v1", "cty-sniper-button-top"]], + "(method 22 simple-prim-turret-reticle)": [[3, "v1", "cty-sniper-turret"]], + "cty-sniper-turret-handler": [ + [75, "v1", "collide-shape-prim-group"], + [265, "v0", "(pointer actor-group)"], + [[268, 271], "a0", "hud-cty-sniper-fight"], + [284, "v1", "collide-shape-prim-group"], + [[439, 448], "s5", "cspace"], + [17, "v1", "float"] + ], + "(method 26 task-manager-city-sniper-fight)": [["_stack_", 16, "res-tag"]], + "(code active task-manager-city-sniper-fight)": [ + [80, "a1", "process-drawable"] + ], + "hfrag-add-constants": [[[3, 17], "a0", "dma-packet"]], + "hfrag-vu1-end-buffer": [ + [[1, 8], "a1", "dma-packet"], + [[10, 28], "a1", "(pointer vif-tag)"] + ], + "hfrag-vu1-init-buf": [ + [[53, 60], "a0", "dma-packet"], + [[63, 67], "a0", "(pointer uint32)"], + [[68, 79], "a0", "(pointer vif-tag)"], + [[81, 91], "v1", "dma-packet"], + [[135, 141], "v1", "dma-packet"], + [143, "v1", "(pointer uint32)"] + ], + "real-wang-texture-anim-func": [[[3, 31], "v1", "mood-context"]], + "hiphog-mirror-sheen-func": [ + [[50, 64], "a2", "ripple-wave"], + [48, "a2", "ripple-wave"], + [49, "a2", "(inline-array ripple-wave)"] + ], + "(method 26 rubble-attack-manager)": [[[62, 68], "v1", "dm-missile-target"]], + "(code lock dm-missile-target)": [[14, "v1", "art-joint-anim"]], + "dm-missile-target-handler": [ + [6, "v1", "vector"], + [[11, 13], "gp", "vector"] + ], + "(method 32 rubble-attack-manager)": [[140, "s2", "vector"]], + "(event idle rub-elec-gate)": [ + [33, "v1", "process-drawable"], + [43, "gp", "rigid-body-impact"], + [90, "gp", "rigid-body-impact"] + ], + "(method 34 rub-electric-gate-switch)": [ + [2, "v1", "collide-shape-prim-group"], + [6, "a1", "collide-shape-prim-group"] + ], + "(method 34 rub-tower)": [ + [4, "v1", "collide-shape-prim-group"], + [8, "a1", "collide-shape-prim-group"] + ], + "(code fallen rub-tower)": [[18, "v1", "art-joint-anim"]], + "(code fall rub-tower)": [[33, "v1", "art-joint-anim"]], + "(code unstable rub-tower)": [[20, "v1", "art-joint-anim"]], + "(method 11 rub-elec-gate)": [["_stack_", 16, "res-tag"]], + "birth-func-power-score": [ + [2, "v1", "(pointer int32)"], + [4, "v1", "(pointer int32)"], + [29, "v1", "(pointer int32)"] + ], + "(code die power-game-player)": [ + [51, "v1", "art-joint-anim"], + [104, "v1", "art-joint-anim"] + ], + "power-game-player-init": [[120, "v1", "handle"]], + "(code active power-game-chaser)": [[13, "v1", "art-joint-anim"]], + "(trans active power-game-chaser)": [[[16, 310], "gp", "power-game-object"]], + "(method 30 power-game)": [[[10, 23], "s4", "power-game-player"]], + "(code die power-game-switcher)": [[202, "v1", "art-joint-anim"]], + "(trans active power-game-zapper)": [[[16, 438], "gp", "power-game-zapper"]], + "(code active power-game-zapper)": [[13, "v1", "art-joint-anim"]], + "(code cam-power-game)": [[4, "t9", "(function none)"]], + "(code idle power-game-switcher)": [[169, "v1", "art-joint-anim"]], + "(code active power-game-switcher)": [[16, "v1", "art-joint-anim"]], + "(trans active power-game-switcher)": [ + [[170, 181], "v1", "power-game-object"] + ], + "(code die power-game-zapper)": [[99, "v1", "art-joint-anim"]], + "(trans active power-game-glyph)": [[[16, 27], "v1", "power-game-object"]], + "(trans idle power-game-switcher)": [[[27, 38], "v1", "power-game-object"]], + "(method 31 gun-dummy)": [ + [3, "v1", "tpath-control-frame"], + [5, "v1", "(inline-array tpath-control-frame)"], + [10, "v1", "tpath-control-frame"], + [12, "v1", "(inline-array tpath-control-frame)"], + [17, "v1", "(inline-array tpath-control-frame)"], + [23, "v1", "tpath-control-frame"], + [32, "v1", "tpath-control-frame"], + [36, "v1", "(inline-array tpath-control-frame)"], + [41, "v1", "tpath-control-frame"], + [43, "v1", "(inline-array tpath-control-frame)"], + [48, "v1", "tpath-control-frame"], + [50, "v1", "(inline-array tpath-control-frame)"], + [55, "v1", "tpath-control-frame"], + [57, "v1", "(inline-array tpath-control-frame)"], + [62, "v1", "tpath-control-frame"], + [64, "v1", "(inline-array tpath-control-frame)"] + ], + "generate-next-fire-time": [[18, "v1", "float"]], + "gun-dummy-event-handler": [[[50, 90], "s5", "attack-info"]], + "gun-dummy-gun-aim-jmod-func": [[[2, 10], "s4", "gun-dummy-gun"]], + "(method 30 gun-dummy)": [[26, "v0", "path-control"]], + "(method 33 gun-dummy-explode)": [[73, "a0", "process"]], + "(code open gungame-door)": [[35, "v1", "art-joint-anim"]], + "update-mood-freehq": [[[24, 63], "gp", "freehq-states"]], + "update-mood-hiphog": [[[26, 74], "s5", "hiphog-states"]], + "update-mood-vinroom": [[[24, 141], "gp", "vinroom-states"]], + "update-mood-oracle": [[[19, 135], "s5", "oracle-states"]], + "(method 21 gungame-manager)": [["_stack_", 16, "res-tag"]], + "(method 35 gungame-task-manager)": [["_stack_", 16, "res-tag"]], + "(method 23 gungame-manager)": [[[16, 396], "gp", "hud"]], + "(method 24 gungame-manager)": [[[23, 35], "a1", "training-path"]], + "(method 25 gungame-manager)": [[12, "a0", "training-path"]], + "(trans charging tower-flyer)": [[17, "v1", "process-focusable"]], + "(method 11 tower-flyer-bobber)": [[32, "v1", "float"]], + "(trans riding cast-rider)": [[[16, 23], "a0", "process-focusable"]], + "(event riding cast-rider)": [[22, "v1", "vector"]], + "(trans fleeing tower-flyer)": [[[52, 57], "a1", "process-focusable"]], + "(enter fly-up bt-barrel)": [ + [45, "v1", "float"], + [85, "v1", "float"], + [112, "v1", "float"], + [132, "v1", "float"], + [157, "v1", "float"], + [177, "v1", "float"], + [197, "v1", "float"], + [224, "v1", "float"] + ], + "(method 30 blow-tower-enemy)": [[[5, 36], "s4", "attack-info"]], + "(method 46 tower-flyer)": [ + [[28, 48], "s5", "process-focusable"], + [[206, 211], "a1", "process-focusable"], + [242, "v1", "float"], + [263, "v1", "float"] + ], + "(method 43 tower-flyer)": [[57, "a1", "process-focusable"]], + "(method 41 bt-barrel)": [ + [78, "a0", "process-focusable"], + [81, "a0", "process-focusable"] + ], + "(method 40 bt-barrel)": [[56, "s2", "process-focusable"]], + "(method 42 bt-barrel)": [[36, "a1", "process-focusable"]], + "setup-bt-barrels": [ + [45, "v1", "float"], + [141, "v1", "float"] + ], + "(code jumping-start bt-grunt)": [[14, "v1", "art-joint-anim"]], + "(code jumping bt-grunt)": [[14, "v1", "art-joint-anim"]], + "(code riding-land bt-grunt)": [ + [19, "v1", "art-joint-anim"], + [197, "v1", "art-joint-anim"] + ], + "(code riding-idle-ship bt-grunt)": [ + [369, "v1", "art-joint-anim"], + [30, "v1", "art-joint-anim"], + [112, "v1", "art-joint-anim"], + [198, "v1", "art-joint-anim"], + [284, "v1", "art-joint-anim"] + ], + "(code riding-idle bt-grunt)": [[14, "v1", "art-joint-anim"]], + "(code riding-attack bt-grunt)": [ + [21, "v1", "art-joint-anim"], + [114, "v1", "art-joint-anim"] + ], + "(method 33 bt-roboguard)": [[176, "v1", "float"]], + "bt-roboguard-turret-code": [ + [75, "a1", "art-joint-anim"], + [168, "a1", "art-joint-anim"] + ], + "(method 43 bt-roboguard)": [[51, "v1", "float"]], + "(code hovering bt-mh-flyer)": [ + [14, "v1", "art-joint-anim"], + [45, "v1", "art-joint-anim"], + [76, "v1", "art-joint-anim"] + ], + "(code firing bt-mh-flyer)": [[30, "v1", "art-joint-anim"]], + "(post hovering bt-mh-flyer)": [[6, "t9", "(function none)"]], + "(post charging bt-mh-flyer)": [[6, "t9", "(function none)"]], + "(post fleeing bt-mh-flyer)": [[6, "t9", "(function none)"]], + "(post firing bt-mh-flyer)": [[6, "t9", "(function none)"]], + "bt-grunt-idle-code": [ + [92, "v1", "art-joint-anim"], + [21, "v1", "art-joint-anim"], + [109, "v1", "float"], + [147, "v1", "float"] + ], + "(trans idle bt-grunt)": [ + [[23, 52], "gp", "process-focusable"], + [173, "v1", "float"] + ], + "(enter riding-land bt-grunt)": [[[81, 89], "a0", "process-focusable"]], + "(enter chasing bt-missile)": [[[16, 24], "v1", "process-focusable"]], + "(method 40 bt-missile)": [[[101, 115], "s4", "process-focusable"]], + "(method 51 bt-grunt)": [[[55, 88], "s5", "ragdoll-proc"]], + "(method 52 bt-grunt)": [[[10, 51], "gp", "ragdoll-proc"]], + "(method 196 kg-bombbot)": [[[24, 62], "s5", "process-focusable"]], + "(method 15 hud-hellcat)": [[20, "v1", "float"]], + "(method 22 bt-gun-manager)": [ + [107, "v1", "float"], + [118, "v1", "float"], + [26, "v0", "vector"], + [160, "v0", "vector"], + [181, "v1", "vector"], + [215, "v1", "vector"], + [127, "v1", "float"], + [143, "v1", "float"] + ], + "(method 37 bt-vehicle)": [[[22, 45], "s4", "process-focusable"]], + "(code cam-bt-gun)": [[26, "v0", "handle"]], + "(method 29 bt-vehicle)": [ + [[169, 184], "s4", "attack-info"], + [8, "v1", "float"], + [79, "v1", "float"], + [83, "v1", "float"], + [[116, 123], "a0", "blow-tower-path-cursor"], + [157, "v1", "float"] + ], + "(method 49 bt-hellcat)": [[60, "v1", "float"]], + "(method 29 bt-pickup)": [[92, "v0", "vector"]], + "(method 43 bt-pickup)": [[79, "v1", "float"]], + "(method 38 task-manager-blow-tower)": [ + [584, "v1", "handle"], + [[1092, 1136], "s4", "process-focusable"] + ], + "(method 29 bt-hellcat)": [ + [52, "a0", "bt-gun-manager"], + [56, "a0", "bt-gun-manager"], + [113, "v1", "float"], + [119, "v1", "float"] + ], + "(method 18 bt-gun-manager)": [ + [251, "a0", "process-focusable"], + [[256, 260], "a0", "process-focusable"], + [298, "a0", "process-focusable"], + [[303, 307], "a0", "process-focusable"], + [[382, 416], "s1", "bt-hellcat"], + [[488, 504], "s5", "bt-hellcat"] + ], + "bt-force-show-hud": [ + [22, "v1", "connection"], + [34, "v1", "connection"], + [35, "a0", "process"] + ], + "(method 20 bt-gun-manager)": [ + [15, "v1", "connection"], + [16, "v1", "collide-shape"], + [20, "v1", "collide-shape"], + [37, "a0", "process-focusable"], + [43, "a0", "process-focusable"], + [46, "a0", "process-focusable"], + [321, "v1", "connection"], + [322, "v1", "collide-shape"], + [326, "v1", "collide-shape"], + [343, "a0", "process-focusable"], + [[349, 353], "a0", "process-focusable"], + [626, "v1", "connection"], + [627, "v1", "collide-shape"], + [631, "v1", "collide-shape"], + [648, "a0", "process-focusable"], + [[654, 658], "a0", "process-focusable"], + [927, "a0", "process"], + ["_stack_", 16, "float"], + ["_stack_", 88, "float"], + ["_stack_", 136, "float"], + ["_stack_", 840, "float"], + ["_stack_", 888, "float"], + ["_stack_", 1592, "float"], + ["_stack_", 1640, "float"] + ], + "(method 19 bt-gun-manager)": [ + [[191, 196], "a0", "process-focusable"], + [[50, 55], "a0", "process-focusable"], + [[88, 93], "a0", "process-focusable"] + ], + "(trans mission-debug task-manager-blow-tower)": [ + [[176, 178], "v1", "bt-hellcat"], + [[188, 193], "v1", "bt-pickup"] + ], + "(method 31 bt-hellcat)": [ + [[295, 303], "v1", "bt-gun-manager"], + [[533, 538], "v1", "bt-gun-manager"], + [[718, 726], "a0", "bt-gun-manager"] + ], + "(method 42 bt-vehicle)": [[34, "v1", "float"]], + "(method 46 bt-roboguard)": [[[20, 24], "a0", "process-focusable"]], + "(anon-function 124 blow-tower-obs2)": [[[2, 72], "s3", "bt-roboguard"]], + "(method 49 bt-grunt)": [[34, "v1", "float"]], + "bt-missile-init-by-other": [ + [68, "v1", "float"], + [186, "v1", "float"], + [207, "v1", "float"] + ], + "(method 47 bt-hellcat)": [ + [[105, 108], "v1", "vector"], + [[62, 67], "v1", "bt-gun-manager"] + ], + "(method 50 bt-hellcat)": [[[26, 31], "v1", "bt-gun-manager"]], + "(method 21 bt-gun-manager)": [ + [[52, 64], "v1", "process-focusable"], + [312, "v1", "collide-shape-prim-sphere"] + ], + "(method 30 task-manager-blow-tower)": [[[46, 62], "v1", "blow-tower-clock"]], + "(method 32 bt-vehicle)": [ + ["_stack_", 76, "float"], + ["_stack_", 100, "float"] + ], + "real-wang-texture-anim-func": [[[3, 31], "v1", "mood-context"]], + "(method 24 sky-work)": [ + [256, "s4", "(pointer int32)"], + [261, "s4", "(pointer int32)"] + ], + "(method 28 sky-work)": [ + [143, "s4", "(pointer int32)"], + [148, "s4", "(pointer int32)"] + ], + "(method 36 sky-work)": [ + [81, "s5", "(pointer int32)"], + [86, "s5", "(pointer int32)"] + ], + "(method 37 sky-work)": [ + [67, "s5", "(pointer int32)"], + [72, "s5", "(pointer int32)"] + ], + "(method 38 sky-work)": [[[83, 179], "v1", "(inline-array qword)"]], + "(method 14 sky-work)": [[[80, 256], "s4", "sky-work"]], + "(method 13 sky-work)": [ + [65, "v1", "(pointer uint128)"], + [[70, 77], "a0", "vector4w"], + [[78, 84], "v1", "vector4w"] + ], + "(method 10 trail-graph)": [[16, "v1", "trail-conn-hash-cell"]], + "(method 24 trail-graph)": [[19, "a1", "trail-conn-hash-cell"]], + "(method 28 trail-graph)": [[36, "a1", "int"]], + "(method 30 trail-graph)": [[67, "a2", "int"]], + "(event idle gunship-engine)": [[[4, 19], "v1", "attack-info"]], + "(post hover protect-gunship)": [[5, "t9", "(function none)"]], + "(enter landed protect-gunship)": [[10, "t9", "(function none)"]], + "(enter raising protect-gunship)": [[29, "t9", "(function none)"]], + "(enter lowering protect-gunship)": [[23, "t9", "(function none)"]], + "(post lowering protect-gunship)": [[10, "t9", "(function none)"]], + "(enter enemy-spawning protect-gunship)": [[5, "t9", "(function none)"]], + "(code explode gunship-exploder)": [[10, "v1", "art-joint-anim"]], + "(post enemy-spawning protect-gunship)": [[5, "t9", "(function none)"]], + "(event launch gunship-missile)": [[5, "a0", "vector"]], + "(trans explode gunship-missile)": [ + [75, "s3", "process-focusable"], + [79, "s3", "process-focusable"], + [85, "s3", "process-focusable"] + ], + "(method 44 protect-gunship)": [ + [[228, 239], "s3", "particle-local-space-info"] + ], + "(enter hover protect-gunship)": [[6, "t9", "(function none)"]], + "(post spinning-laser protect-gunship)": [[5, "t9", "(function none)"]], + "(trans spinning-laser protect-gunship)": [[113, "v1", "float"]], + "(enter spinning-laser protect-gunship)": [[8, "t9", "(function none)"]], + "find-reposition-pt": [ + [[35, 40], "v1", "protect-gunship"], + [[113, 119], "v1", "protect-gunship"], + ["_stack_", 44, "float"], + ["_stack_", 56, "float"], + ["_stack_", 76, "float"], + ["_stack_", 80, "float"] + ], + "(method 53 protect-gunship)": [ + [52, "v1", "float"], + [67, "v1", "float"], + [83, "v1", "float"], + [34, "v0", "int"] + ], + "(method 50 protect-gunship)": [[126, "v1", "float"]], + "(method 49 protect-gunship)": [[19, "v1", "float"]], + "(method 52 protect-gunship)": [[[104, 111], "a0", "protect-gunship"]], + "(method 41 protect-gunship)": [ + [[395, 398], "v1", "gunship-engine"], + [467, "v1", "float"] + ], + "(method 37 protect-gunship)": [ + [358, "v1", "float"], + [378, "v1", "float"] + ], + "(method 38 protect-gunship)": [[20, "v1", "float"]], + "gunship-missile-init-by-other": [[136, "v1", "float"]], + "(method 55 protect-gunship)": [[127, "v1", "collide-shape-prim-sphere"]], + "(method 21 prot-crate)": [ + [72, "v1", "float"], + [97, "v1", "float"] + ], + "(method 45 protect-gunship)": [[7, "a1", "int"]], + "(enter fail task-manager-protect-hq)": [ + [26, "v0", "(state resetter-params task-manager-protect-hq)"] + ], + "(trans hostile assault-bombbot)": [[[76, 125], "v1", "process-focusable"]], + "(method 209 assault-bombbot)": [[48, "v1", "process-focusable"]], + "(code wait-for-enemies assault-crimson-guard)": [ + [22, "v1", "art-joint-anim"] + ], + "(trans wait-for-enemies assault-crimson-guard)": [ + [[15, 23], "a0", "process-focusable"] + ], + "(trans active assault-crimson-guard)": [ + [[27, 35], "a0", "process-focusable"] + ], + "(anon-function 36 assault-enemies)": [[[17, 26], "s4", "process-focusable"]], + "(method 212 assault-crimson-guard)": [[4, "a0", "vector"]], + "(code tracking assault-cleanup)": [[[28, 43], "v1", "process-focusable"]], + "(code cower-ground assault-citizen-norm)": [ + [22, "v1", "art-joint-anim"], + [161, "v1", "art-joint-anim"], + [180, "v1", "float"], + [225, "v1", "float"] + ], + "(trans flee-madly assault-citizen-norm)": [ + [41, "v1", "float"], + [68, "v1", "float"] + ], + "(code exit-transport assault-metalhead-flitter)": [ + [14, "v1", "art-joint-anim"] + ], + "(code exit-transport assault-metalhead-grunt)": [ + [14, "v1", "art-joint-anim"] + ], + "(method 212 assault-citizen-norm)": [[28, "a0", "vector"]], + "(method 212 assault-roboguard)": [[16, "a1", "vector"]], + "(method 46 task-manager-city-port-assault)": [[17, "v1", "float"]], + "(method 45 task-manager-city-port-assault)": [[15, "v1", "float"]], + "(enter combat task-manager-city-port-assault)": [ + [[33, 39], "a0", "assault-player-controller"] + ], + "(method 47 task-manager-city-port-assault)": [[31, "v1", "float"]], + "(method 48 task-manager-city-port-assault)": [ + [32, "v1", "float"], + [191, "v1", "float"] + ], + "(method 40 task-manager-city-port-assault)": [ + [[168, 174], "v1", "assault-player-controller"] + ], + "(method 42 task-manager-city-port-assault)": [ + [33, "v1", "float"], + [83, "v1", "float"] + ], + "(method 43 task-manager-city-port-assault)": [ + [[17, 69], "s4", "assault-spawn-cmd"] + ], + "(code going-down precur-switch)": [[10, "v1", "art-joint-anim"]], + "(event idle precur-generator-d-gem)": [ + [6, "a0", "vector"], + [10, "v1", "vector"] + ], + "(code idle precur-generator-d)": [[10, "v1", "art-joint-anim"]], + "(trans idle precur-generator)": [[181, "v1", "float"]], + "(method 23 precur-generator-d)": [ + [61, "a3", "float"], + [28, "a3", "float"], + [94, "a3", "float"] + ], + "(method 11 precur-platform-round)": [ + [[169, 180], "s3", "particle-local-space-info"] + ], + "(event idle precur-door-d)": [ + [[5, 34], "s4", "attack-info"], + [[19, 38], "s3", "attack-info"] + ], + "precur-door-c-handler": [[[3, 5], "v1", "attack-info"]], + "set-precura-generator-light!": [[10, "v1", "precura-states"]], + "update-mood-precura": [[[74, 113], "gp", "precura-states"]], + "set-precura-laser-light!": [ + [[13, 17], "v1", "precura-states"], + [23, "v1", "precura-states"], + [22, "v1", "precura-states"] + ], + "set-precura-bomb-light!": [[[11, 14], "v1", "precura-states"]], + "(post carry precur-bomb)": [[4, "t9", "(function none)"]], + "(post fall precur-bomb)": [[4, "t9", "(function none)"]], + "(enter explode precur-bomb)": [[51, "a0", "process"]], + "(code idle precur-bomb-spawner)": [ + [53, "v1", "art-joint-anim"], + [111, "v1", "art-joint-anim"] + ], + "(method 11 precur-path)": [ + [[141, 145], "a0", "precur-spot-shadow-effect"], + [[130, 141], "v1", "(pointer precur-spot-shadow-effect)"] + ], + "precur-bomb-handler": [ + [[5, 34], "s4", "attack-info"], + [[19, 38], "s3", "attack-info"] + ], + "(enter fall mechblock)": [ + [42, "v0", "carry-info"], + [[43, 47], "a0", "carry-info"] + ], + "(event drag-object mechblock)": [ + [48, "v0", "carry-info"], + [[49, 53], "a0", "carry-info"], + [57, "a0", "vector"], + [79, "a0", "vector"] + ], + "(event carry mechblock)": [[23, "a0", "vector"]], + "(event idle mechblock)": [ + [[20, 27], "a0", "carry-info"], + [[34, 39], "a0", "carry-info"] + ], + "(event idle precur-bomb-spawner)": [ + [[10, 39], "s4", "attack-info"], + [[24, 43], "s3", "attack-info"] + ], + "(enter idle precur-bomb-spawner)": [[15, "v1", "art-joint-anim"]], + "(method 25 precur-laser-beam)": [[5, "v1", "float"]], + "(method 24 precur-laser-beam)": [[6, "v1", "float"]], + "process-drawable-shock-wave-effect": [ + ["_stack_", 624, "(pointer lightning-tracker)"] + ], + "(method 23 precur-path)": [[[35, 58], "a0", "precur-spot-shadow-effect"]], + "init-mood-precurc": [[[3, 10], "v1", "precurc-states"]], + "(post idle precur-bridge-blocks-break)": [ + [53, "gp", "collide-shape-prim-group"], + [61, "gp", "collide-shape-prim-group"] + ], + "(code dormant precur-laser-beam)": [["_stack_", 16, "res-tag"]], + "(method 11 precur-generator-c)": [["_stack_", 16, "res-tag"]], + "(method 11 precur-generator-d)": [["_stack_", 16, "res-tag"]], + "(method 11 precur-bridge-path-break)": [["_stack_", 16, "res-tag"]], + "(method 11 precura-door-a)": [ + [141, "v0", "pair"], + [129, "v0", "pair"] + ], + "(trans idle precur-generator-d)": [ + [33, "v1", "object"], + [[33, 66], "v1", "object"] + ], + "(method 21 lfaccity-pparticle-mover)": [ + [[32, 39], "a1", "process-drawable"] + ], + "update-mood-lfaccity": [[[32, 200], "gp", "lfaccity-states"]], + "(method 11 lfaccity-pparticle-mover)": [["_stack_", 16, "res-tag"]], + "(code idle neon-baron)": [ + [248, "a0", "(array object)"], + [250, "a0", "(array object)"], + [282, "a0", "(array object)"], + [284, "a0", "(array object)"], + [316, "a0", "(array object)"], + [318, "a0", "(array object)"], + [350, "a0", "(array object)"], + [352, "a0", "(array object)"], + [384, "a0", "(array object)"], + [386, "a0", "(array object)"] + ], + "(method 10 neon-baron)": [[11, "s5", "uint"]], + "(method 15 neon-baron)": [[29, "s5", "int"]], + "(method 16 neon-baron)": [[5, "a1", "int"]], + "texture-anim-layer-add-clut-shader": [ + [[23, 30], "a3", "dma-packet"], + [[32, 39], "a3", "gs-gif-tag"], + [49, "a1", "(pointer gs-tex0)"], + [51, "a1", "(pointer gs-reg64)"], + [52, "a1", "(pointer gs-tex1)"], + [54, "a1", "(pointer gs-reg64)"], + [56, "a1", "(pointer gs-test)"], + [58, "a1", "(pointer gs-reg64)"], + [60, "a1", "(pointer gs-clamp)"], + [62, "a1", "(pointer gs-reg64)"], + [64, "a1", "(pointer gs-alpha)"], + [66, "a1", "(pointer gs-reg64)"] + ], + "texture-anim-layer-draw": [[[24, 182], "s4", "(pointer uint128)"]], + "update-texture-anim": [ + [213, "v1", "(pointer uint128)"], + [[214, 230], "t0", "vector4w"], + [[230, 238], "t0", "vector4w"], + [[239, 247], "v1", "vector4w"] + ], + "(method 9 texture-anim-layer)": [ + [5, "v1", "symbol"], + [11, "v1", "symbol"] + ], + "(method 9 texture-anim)": [ + [5, "v1", "symbol"], + [11, "v1", "symbol"], + ["_stack_", 16, "texture-page"] + ], + "shadow-vu1-init-buffer": [[[18, 27], "a0", "dma-packet"]], + "shadow-vu1-add-constants": [ + [[7, 16], "a2", "dma-packet"], + [[20, 66], "v1", "shadow-vu1-constants"], + [[72, 77], "a1", "dma-packet"], + [[82, 94], "a1", "shadow-vu1-data"] + ], + "shadow-vu1-add-matrix": [ + [[11, 19], "a3", "dma-packet"], + [[26, 30], "v1", "matrix"] + ], + "shadow-vu0-upload": [[[16, 18], "a0", "dma-packet"]], + "shadow-make-invert-buf": [[[13, 16], "v1", "dma-packet"]], + "shadow-invert-z-buf": [ + [[4, 8], "a2", "dma-packet"], + [[13, 16], "a2", "gs-gif-tag"], + [27, "t1", "(pointer gs-reg)"], + [28, "t1", "(pointer gs-reg64)"], + [30, "t1", "(pointer gs-reg)"], + [32, "t1", "(pointer gs-frame)"], + [34, "t1", "(pointer gs-reg)"], + [38, "t1", "(pointer gs-reg)"], + [42, "t1", "(pointer gs-reg)"], + [36, "t1", "(pointer gs-zbuf)"], + [40, "t1", "(pointer gs-test)"], + [44, "t1", "(pointer gs-alpha)"], + [45, "t1", "(pointer gs-reg)"], + [47, "t1", "(pointer gs-reg64)"], + [49, "t1", "(pointer gs-reg)"], + [51, "t1", "(pointer gs-rgbaq)"], + [[61, 64], "t2", "gs-gif-tag"], + [89, "t4", "(pointer gs-xyzf)"], + [79, "t4", "(pointer gs-xyzf)"], + [[106, 117], "v1", "(pointer uint64)"] + ], + "shadow-dma-init": [ + [[18, 21], "t4", "dma-packet"], + [[27, 31], "t6", "dma-packet"], + [[36, 39], "t6", "gs-gif-tag"], + [43, "t4", "(pointer gs-reg64)"], + [47, "t4", "(pointer gs-test)"], + [45, "t4", "(pointer gs-reg64)"], + [49, "t4", "(pointer gs-reg64)"], + [51, "t4", "(pointer gs-alpha)"], + [53, "t4", "(pointer gs-reg64)"], + [58, "t4", "(pointer gs-frame)"], + [60, "t4", "(pointer gs-reg64)"], + [64, "t4", "(pointer gs-reg64)"], + [73, "t4", "(pointer gs-reg64)"], + [81, "t4", "(pointer gs-reg)"], + [84, "t4", "(pointer gs-reg)"], + [62, "t4", "(pointer gs-zbuf)"], + [71, "t4", "(pointer gs-xy-offset)"], + [79, "t4", "(pointer gs-tex0)"], + [82, "t4", "(pointer gs-tex1)"], + [85, "t4", "(pointer gs-miptbp)"], + [87, "t4", "(pointer gs-reg)"], + [96, "t4", "(pointer gs-clamp)"], + [[103, 106], "t3", "gs-gif-tag"], + [[122, 125], "t3", "gs-gif-tag"], + [111, "t3", "(pointer gs-prim)"], + [113, "t3", "(pointer gs-rgbaq)"], + [143, "t5", "(pointer gs-xyzf)"], + [156, "t5", "(pointer gs-xyzf)"], + [[167, 170], "a3", "gs-gif-tag"], + [177, "a3", "(pointer gs-test)"], + [179, "a3", "(pointer gs-reg64)"], + [183, "a3", "(pointer gs-reg64)"], + [193, "a3", "(pointer gs-reg64)"], + [190, "a3", "(pointer gs-reg64)"], + [202, "a3", "(pointer gs-reg64)"], + [181, "a3", "(pointer gs-zbuf)"], + [188, "a3", "(pointer gs-frame)"], + [191, "a3", "(pointer uint64)"], + [206, "a3", "(pointer gs-reg64)"], + [213, "a3", "(pointer gs-reg64)"], + [214, "a3", "(pointer uint64)"], + [216, "a3", "(pointer gs-reg64)"], + [211, "a3", "(pointer gs-frame)"], + [204, "a3", "(pointer gs-zbuf)"], + [200, "a3", "(pointer gs-test)"], + [229, "v1", "(pointer uint64)"], + [225, "v1", "(pointer uint64)"], + [230, "v1", "(pointer uint64)"], + [235, "v1", "(pointer uint64)"] + ], + "shadow-dma-end": [ + [34, "a1", "dma-packet"], + [33, "a1", "dma-packet"], + [36, "a1", "dma-packet"], + [25, "v1", "(pointer uint64)"], + [41, "v1", "dma-packet"], + [42, "v1", "(pointer uint64)"], + [[113, 116], "a0", "gs-gif-tag"], + [[102, 107], "a0", "dma-packet"], + [120, "a0", "(pointer uint64)"], + [122, "a0", "(pointer gs-reg64)"], + [126, "a0", "(pointer gs-reg64)"], + [133, "a0", "(pointer gs-reg64)"], + [134, "a0", "(pointer uint64)"], + [136, "a0", "(pointer gs-reg64)"], + [137, "a0", "(pointer uint64)"], + [139, "a0", "(pointer gs-reg64)"], + [124, "a0", "(pointer gs-test)"], + [131, "a0", "(pointer gs-frame)"], + [[146, 151], "a1", "dma-packet"], + [201, "t0", "(pointer uint64)"], + [214, "t0", "(pointer uint64)"], + [237, "t0", "(pointer uint64)"], + [250, "t0", "(pointer uint64)"], + [[156, 159], "a1", "gs-gif-tag"], + [160, "a1", "(pointer gs-prim)"], + [161, "a1", "(pointer gs-rgbaq)"], + [[166, 169], "a1", "(inline-array gs-gif-tag)"], + [268, "v1", "(pointer uint64)"], + [264, "v1", "(pointer uint64)"], + [269, "v1", "(pointer uint64)"], + [274, "v1", "(pointer uint64)"] + ], + "shadow-execute-all": [ + [[56, 63], "v1", "shadow-dcache"], + [114, "v1", "shadow-dcache"], + [119, "a0", "uint32"], + [[191, 249], "gp", "shadow-dcache"], + [96, "v1", "shadow-dcache"] + ], + "real-fog-texture-anim-func": [[[6, 160], "s2", "(pointer uint32)"]], + "calculate-basis-functions-vector!": [ + [[8, 20], "v1", "(pointer float)"], + [[0, 60], "f1", "float"] + ], + "ellipsoid-random-point-on!": [ + [19, "v1", "float"], + [44, "v1", "float"] + ], + "curve-evaluate!": [[62, "s5", "pointer"]], + "(method 16 setting-control)": [[[5, 27], "s4", "connection"]], + "(method 3 game-text-info)": [[34, "v1", "game-text"]], + "hyphenate-word": [[15, "a0", "string"]], + "update-tracking-position": [ + [[31, 47], "s4", "part-spawner"], + [[53, 79], "s4", "process-drawable"] + ], + "update-pitch-with-doppler": [[[26, 49], "v1", "process-focusable"]] +} diff --git a/decompiler/config/jakx/potentially_useful/var_names.jsonc b/decompiler/config/jakx/potentially_useful/var_names.jsonc new file mode 100644 index 0000000000..ffeee2cb79 --- /dev/null +++ b/decompiler/config/jakx/potentially_useful/var_names.jsonc @@ -0,0 +1,2143 @@ +{ + // NOTE: almost all of these were just copy pasted from jak2 + // so it's impossible to know which are actually needed for jakx... + // commenting out incase there's something here actually needed + + "(method 0 inline-array-class)": { + "args": ["allocation", "type-to-make", "count"] + }, + "(method 9 inline-array-class)": { + "args": ["object-to-insert"] + }, + "(method 3 inline-array-class)": { + "args": ["idx-to-remove"] + }, + "identity": { + "args": ["obj"] + }, + "1/": { + "args": ["x"] + }, + "+": { + "args": ["a", "b"] + }, + "-": { + "args": ["a", "b"] + }, + "*": { + "args": ["a", "b"] + }, + "/": { + "args": ["a", "b"] + }, + "ash": { + "args": ["x", "shift-amount"] + }, + "mod": { + "args": ["a", "b"] + }, + "rem": { + "args": ["a", "b"] + }, + "abs": { + "args": ["x"] + }, + "min": { + "args": ["a", "b"] + }, + "max": { + "args": ["a", "b"] + }, + "logior": { + "args": ["a", "b"] + }, + "logand": { + "args": ["a", "b"] + }, + "lognor": { + "args": ["a", "b"] + }, + "logxor": { + "args": ["a", "b"] + }, + "lognot": { + "args": ["x"] + }, + "basic-type?": { + "args": ["obj", "typ"] + }, + "type-type?": { + "args": ["check-type", "parent-type"] + }, + "type?": { + "args": ["obj", "desired-type"] + }, + "find-parent-method": { + "args": ["typ", "method-id"] + }, + "ref&": { + "args": ["list", "idx"] + }, + "ref": { + "args": ["list", "idx"] + }, + "last": { + "args": ["list"] + }, + "member": { + "args": ["obj-to-find", "list"] + }, + "nmember": { + "args": ["obj-to-find", "list"] + }, + "assoc": { + "args": ["key", "assoc-list"] + }, + "assoce": { + "args": ["key", "assoc-list"] + }, + "nassoc": { + "args": ["key", "assoc-list"] + }, + "nassoce": { + "args": ["key", "assoc-list"] + }, + "append!": { + "args": ["list", "new-obj"] + }, + "delete!": { + "args": ["obj", "list"] + }, + "delete-car!": { + "args": ["car-to-match", "list"] + }, + "insert-cons!": { + "args": ["new-obj", "list"] + }, + "sort": { + "args": ["list", "compare-func"] + }, + "string->symbol-debug": { + "args": ["str"] + }, + "symbol->string-debug": { + "args": ["sym"] + }, + "symbol->hash": { + "args": ["sym"] + }, + "mem-copy!": { + "args": ["dst", "src", "bytes"] + }, + "qmem-copy<-!": { + "args": ["dst", "src", "qwc"] + }, + "qmem-copy->!": { + "args": ["dst", "src", "qwc"] + }, + "qmem-clear!": { + "args": ["dst", "qwc"] + }, + "mem-set32!": { + "args": ["dst", "word-count", "value"] + }, + "mem-or!": { + "args": ["dst", "src", "bytes"] + }, + "fact": { + "args": ["x"] + }, + "print": { + "args": ["obj"] + }, + "printl": { + "args": ["obj"] + }, + "inspect": { + "args": ["obj"] + }, + "mem-print": { + "args": ["ptr", "word-count"] + }, + "print-tree-bitmask": { + "args": ["mask", "count"] + }, + "valid?": { + "args": [ + "obj", + "expected-type", + "err-msg-str", + "allow-false", + "err-msg-dest" + ] + }, + "(method 0 process-tree)": { + "args": ["allocation", "type-to-make", "name"] + }, + "(method 9 process-tree)": { + "args": ["this", "active-tree", "name", "stack-pointer"] + }, + "(method 9 process)": { + "args": ["this", "active-tree", "name", "stack-pointer"] + }, + "(method 10 process-tree)": { + "args": ["this", "ent"] + }, + "(method 0 clock)": { + "args": ["allocation", "type-to-make", "index"] + }, + "(method 9 clock)": { + "args": ["this", "rate"] + }, + "(method 16 clock)": { + "args": ["this", "xor-val"] + }, + "(method 17 clock)": { + "args": ["this", "xor-val"] + }, + "(method 18 clock)": { + "args": ["this", "xor-val"] + }, + "(method 19 clock)": { + "args": ["this", "xor-val"] + }, + "(method 20 clock)": { + "args": ["this", "xor-val"] + }, + "(method 21 clock)": { + "args": ["this", "xor-val"] + }, + "(method 22 clock)": { + "args": ["this", "xor-val"] + }, + "(method 23 clock)": { + "args": ["this", "xor-val"] + }, + "(method 9 thread)": { + "args": ["this", "size-bytes"] + }, + "(method 0 cpu-thread)": { + "args": [ + "allocation", + "type-to-make", + "proc", + "name", + "stack-size", + "stack-top" + ] + }, + "(method 0 dead-pool)": { + "args": ["allocation", "type-to-make", "num-proc", "process-size", "name"] + }, + "(method 15 dead-pool)": { + "args": ["this", "proc-type", "proc-size", "unk"] + }, + "(method 15 dead-pool-heap)": { + "args": ["this", "proc-type", "proc-size", "unk"] + }, + "(method 16 dead-pool)": { + "args": ["this", "proc"] + }, + "(method 16 dead-pool-heap)": { + "args": ["this", "proc"] + }, + "(method 0 dead-pool-heap)": { + "args": ["allocation", "type-to-make", "name", "max-num-proc", "heap-size"] + }, + "(method 17 dead-pool-heap)": { + "args": ["this", "allocation", "heap-size"] + }, + "(method 18 dead-pool-heap)": { + "args": ["this", "compact-count"] + }, + "(method 19 dead-pool-heap)": { + "args": ["this", "proc"] + }, + "(method 20 dead-pool-heap)": { + "args": ["this", "count"] + }, + "(method 25 dead-pool-heap)": { + "args": ["this", "first-rec"] + }, + "(method 26 dead-pool-heap)": { + "args": ["this", "rec"] + }, + "(method 27 dead-pool-heap)": { + "args": ["this", "first-rec"] + }, + "(method 28 dead-pool-heap)": { + "args": ["this", "size"] + }, + "(method 0 protect-frame)": { + "args": ["stack-addr", "type-to-make", "exit-func"] + }, + "(method 0 sql-result)": { + "args": ["allocation", "type-to-make", "num-elts"] + }, + "load-package": { + "args": ["package-name", "heap"] + }, + "unload-package": { + "args": ["package-name"] + }, + "inspect-process-heap": { + "args": ["proc"] + }, + "method-state": { + "args": ["typ", "state-name"] + }, + "process-by-name": { + "args": ["process-name", "tree"] + }, + "process-not-name": { + "args": ["name", "tree"] + }, + "process-count": { + "args": ["tree"] + }, + "kill-by-name": { + "args": ["name", "tree"] + }, + "kill-by-type": { + "args": ["typ", "tree"] + }, + "kill-not-name": { + "args": ["name", "tree"] + }, + "kill-not-type": { + "args": ["typ", "tree"] + }, + "kill-by-type-inherited": { + "args": ["typ", "tree"] + }, + "iterate-process-tree": { + "args": ["tree", "callback", "context"] + }, + "execute-process-tree": { + "args": ["tree", "callback", "context"] + }, + "search-process-tree": { + "args": ["tree", "callback"] + }, + "inspect-process-tree": { + "args": ["tree", "depth", "mask", "detail"] + }, + "previous-brother": { + "args": ["tree"] + }, + "change-parent": { + "args": ["proc-to-change", "new-parent"] + }, + "change-to-last-brother": { + "args": ["proc"] + }, + "matrix-transpose!": { + "args": ["dst", "src"] + }, + "matrix-axis-sin-cos!": { + "args": ["dst", "axis", "s", "c"] + }, + "vector-rad<-vector-deg/2!": { + "args": ["out", "in"] + }, + "vector-rad<-vector-deg!": { + "args": ["out", "in"] + }, + "copy-string<-string": { + "args": ["dst", "src"] + }, + "string=": { + "args": ["a", "b"] + }, + "string-prefix=": { + "args": ["prefix", "str"] + }, + "charp-prefix=": { + "args": ["prefix", "str"] + }, + "string-suffix=": { + "args": ["suffix", "str"] + }, + "string-position": { + "args": ["substr", "base-str"] + }, + "string-charp=": { + "args": ["a", "b"] + }, + "name=": { + "args": ["a", "b"] + }, + "copyn-string<-charp": { + "args": ["dst", "src", "num-chars"] + }, + "string<-charp": { + "args": ["dst", "src"] + }, + "charp<-string": { + "args": ["dst", "src"] + }, + "copyn-charp<-string": { + "args": ["dst", "src", "len"] + }, + "copy-charp<-charp": { + "args": ["dst", "src"] + }, + "cat-string<-string": { + "args": ["dst", "src"] + }, + "catn-string<-charp": { + "args": ["dst", "src", "num-chars"] + }, + "cat-string<-string_to_charp": { + "args": ["dst", "src", "stop-ptr"] + }, + "append-character-to-string": { + "args": ["str", "char"] + }, + "charp-basename": { + "args": ["str"] + }, + "clear": { + "args": ["str"] + }, + "string?": { + "args": ["a", "b"] + }, + "string<=?": { + "args": ["a", "b"] + }, + "string>=?": { + "args": ["a", "b"] + }, + "game-task->string": { + "args": ["task"], + "vars": { + "v1-0": "val" + } + }, + "file-info-correct-version?": { + "args": ["file", "kind", "version-override"], + "vars": { + "s5-0": "major", + "v1-1": "file-kind", + "s4-0": "type" + } + }, + "make-vfile-name": { + "args": ["kind", "name"] + }, + "make-file-name": { + "args": ["kind", "name", "ag-version-override", "arg3"] + }, + "file-stream-read-string": { + "args": ["fs", "str"] + }, + "(method 0 file-stream)": { + "args": ["obj", "arg1", "file-name", "mode"] + }, + "service-cpads": { + "vars": { + "gp-0": "pads", + "s5-0": "pad-idx", + "s4-0": "pad", + "s3-0": "motor-idx", + "s3-1": "buttons-pressed", + "v1-123": "lang", + "v1-135": "territory" + } + }, + "service-keybd": { + "vars": { + "gp-0": "keyboard", + "v1-0": "key-idx" + } + }, + "service-mouse": { + "vars": { + "gp-0": "mouse" + } + }, + "(method 0 dma-buffer)": { + "args": ["allocation", "type-to-make", "size-bytes"] + }, + "dma-buffer-inplace-new": { + "args": ["dma-buff", "size-bytes"] + }, + "dma-buffer-length": { + "args": ["dma-buf"] + }, + "dma-buffer-free": { + "args": ["dma-buf"] + }, + "dma-buffer-add-vu-function": { + "args": ["dma-buf", "vu-func", "flush-path-3"] + }, + "dma-buffer-send": { + "args": ["chan", "buf"] + }, + "dma-buffer-send-chain": { + "args": ["chan", "buf"] + }, + "dma-buffer-patch-buckets": { + "args": ["base", "count"] + }, + "dma-buffer-add-buckets": { + "args": ["dma-buf", "bucket-count"] + }, + "dma-bucket-insert-tag": { + "args": ["buckets", "bucket", "start-tag", "end-tag-to-patch"] + }, + "disasm-vif-details": { + "args": ["fmt-dest", "vif-data", "unpack-cmd", "unpack-count"] + }, + "disasm-vif-tag": { + "args": ["tag", "count", "format-dest", "details?"] + }, + "disasm-dma-tag": { + "args": ["tag", "format-dest"] + }, + "disasm-dma-list": { + "args": ["data", "mode", "verbose", "stream", "expected-size"] + }, + "gs-set-default-store-image": { + "args": [ + "packet", + "source-vram", + "width", + "tex-fmt", + "ssax", + "ssay", + "rrw", + "rrh" + ] + }, + "store-image": { + "args": ["work"] + }, + "texture-bpp": { + "args": ["tex-format"] + }, + "texture-qwc": { + "args": ["w", "h", "tex-format"] + }, + "physical-address": { + "args": ["addr"] + }, + "dma-buffer-add-ref-texture": { + "args": ["dma-buf", "tex-data-ptr", "w", "h", "tex-format"] + }, + "gs-find-block": { + "args": ["bx", "by", "tex-format"] + }, + "gs-page-width": { + "args": ["tex-format"] + }, + "gs-page-height": { + "args": ["tex-format"] + }, + "gs-block-width": { + "args": ["tex-format"] + }, + "gs-block-height": { + "args": ["tex-format"] + }, + "gs-largest-block": { + "args": ["w", "h", "tex-format"] + }, + "gs-blocks-used": { + "args": ["w", "h", "tex-format"] + }, + "texture-page-default-allocate": { + "args": ["pool", "page", "heap", "page-id"] + }, + "texture-page-common-allocate": { + "args": ["pool", "page", "heap", "page-id"] + }, + "texture-page-font-allocate": { + "args": ["pool", "page", "heap", "page-id"] + }, + "texture-page-common-boot-allocate": { + "args": ["pool", "page", "heap", "page-id"] + }, + "upload-vram-data": { + "args": ["dma-buf", "dest", "data-ptr", "h", "w"] + }, + "upload-vram-pages": { + "args": ["pool", "pool-segment", "page", "mode", "bucket"] + }, + "update-vram-pages": { + "args": ["pool", "pool-segment", "page", "mode"] + }, + "upload-vram-pages-pris": { + "args": ["pool", "pool-segment", "page", "bucket", "mask"] + }, + "texture-page-level-allocate": { + "args": ["pool", "page", "heap", "page-id"] + }, + "texture-page-size-check": { + "args": ["pool", "lev", "print?"] + }, + "upload-textures": { + "args": ["pool"] + }, + "texture-relocate": { + "args": ["dma-buf", "tex", "dest", "tex-format", "clut-dest"] + }, + "texture-page-login": { + "args": ["id", "alloc-func", "heap"] + }, + "lookup-texture-by-id": { + "args": ["id"] + }, + "lookup-texture-by-id-fast": { + "args": ["id"] + }, + "lookup-texture-by-name": { + "args": ["tex-name", "page-name", "page-out"] + }, + "lookup-texture-id-by-name": { + "args": ["tex-name", "page-name"] + }, + "lookup-level-texture-by-name": { + "args": ["tex-name", "lev", "page-out"] + }, + "lookup-tex-id-from-texture": { + "args": ["tex"] + }, + "lookup-level-texture-id-by-name": { + "args": ["tex-name", "lev", "lev-page-idx"] + }, + "link-texture-by-id": { + "args": ["id", "shader"] + }, + "adgif-shader-update!": { + "args": ["shader", "tex"] + }, + "hack-texture": { + "args": ["tex"] + }, + "adgif-shader-login": { + "args": ["shader"] + }, + "adgif-shader-login-no-remap": { + "args": ["shader"] + }, + "adgif-shader-login-fast": { + "args": ["shader"] + }, + "adgif-shader-login-no-remap-fast": { + "args": ["shader"] + }, + "adgif-shader<-texture-simple!": { + "args": ["shader", "tex"] + }, + "set-dirty-mask!": { + "args": ["lev", "mask-idx", "m0", "m1"] + }, + "(method 13 texture-pool)": { + "args": ["this", "lev", "texture-page-count", "texture-ids"] + }, + "(method 14 texture-pool)": { + "args": ["pool", "lev", "category", "bucket"] + }, + "(method 15 texture-pool)": { + "args": ["this", "size"] + }, + "(method 16 texture-pool)": { + "args": ["this", "segment", "size"] + }, + "(method 17 texture-pool)": { + "args": ["this", "page"] + }, + "(method 18 texture-pool)": { + "args": ["this", "id"] + }, + "(method 7 texture-page)": { + "args": ["this", "heap", "filename"] + }, + "(method 9 texture-page)": { + "args": ["this", "heap"] + }, + "(method 11 texture-page)": { + "args": ["this", "new-dest", "seg-id"] + }, + "(method 12 texture-page)": { + "args": ["page", "buf", "mode"] + }, + "(method 13 texture-page)": { + "args": ["this", "mode"] + }, + "merc-fragment-fp-data": { + "args": ["frag"] + }, + "show-mc-info": { + "args": ["buf"], + "vars": { + "s5-0": "slot", + "s4-0": "slot-idx" + } + }, + "(method 17 res-lump)": { + "args": ["this", "tag", "arg2"] + }, + "(method 20 res-lump)": { + "args": ["this", "arg1", "tag-pair", "arg3"] + }, + "(method 9 res-lump)": { + "args": ["this", "name", "mode", "time"] + }, + "(method 15 res-lump)": { + "vars": { + "s5-0": ["tag-pair", "res-tag-pair"], + "s2-0": "existing-tag", + "s3-0": "data-size", + "v1-25": "resource-mem" + } + }, + "(method 10 smush-control)": { + "vars": { + "f30-0": "elapsed-time", + "f0-2": "period" + } + }, + "(method 12 smush-control)": { + "args": [ + "this", + "amplitude", + "period", + "duration", + "damp-amplitude", + "damp-period", + "clock" + ] + }, + "(method 11 smush-control)": { + "vars": { + "f30-0": "elapsed-time", + "f0-2": "period" + } + }, + "(method 10 collide-mesh-cache)": { + "args": ["this", "id"] + }, + "(method 11 touching-prims-entry-pool)": { + "vars": { + "v1-0": "prev", + "a1-0": "current", + "a2-0": "next" + } + }, + "(method 0 prim-strip)": { + "args": ["allocation", "type-to-make", "num-vertices", "tex-id", "tex-name"] + }, + "num-func-loop-set!": { + "args": ["chan", "frame"] + }, + "num-func-seek!": { + "args": ["chan", "arg1", "arg2", "arg3"] + }, + "cspace-by-name-no-fail": { + "args": ["proc", "name"] + }, + "cspace-index-by-name-no-fail": { + "args": ["proc", "name"], + "vars": { + "v0-0": "idx" + } + }, + "num-func-identity": { + "args": ["chan", "arg1", "arg2", "arg3"] + }, + "num-func-loop!": { + "args": ["chan", "arg1", "arg2", "arg3"] + }, + "num-func-none": { + "args": ["chan", "arg1", "arg2", "arg3"] + }, + "num-func-+!": { + "args": ["chan", "arg1", "arg2", "arg3"] + }, + "num-func--!": { + "args": ["chan", "arg1", "arg2", "arg3"] + }, + "joint-channel-float-delete!": { + "args": ["chan"] + }, + "(method 21 process-focusable)": { + "vars": { + "gp-0": "cshape" + }, + "args": ["this", "mode"] + }, + "(method 20 process-focusable)": { + "vars": { + "v1-0": "mask", + "v0-0": ["search-flag", "search-info-flag"] + } + }, + "(method 10 focus)": { + "args": ["this", "proc"], + "vars": { + "s5-0": "root", + "v1-2": "cshape" + } + }, + "(method 11 focus)": { + "args": ["this", "cspec"] + }, + "(method 12 focus)": { + "args": ["this", "proc"] + }, + "(method 13 effect-control)": { + "args": ["this", "offset"] + }, + "(method 0 effect-control)": { + "args": ["allocation", "type-to-make", "proc"] + }, + "(method 0 joint-mod-spinner)": { + "args": ["allocation", "type-to-make", "proc", "bone-idx", "axis", "rate"] + }, + "(method 9 joint-mod-base)": { + "args": ["this", "proc", "bone-idx", "flags"] + }, + "joint-mod-debug-draw": { + "args": ["jmod"] + }, + "joint-mod-spinner-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "joint-mod-rotate-local-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "vector<-cspace2!": { + "args": ["output-vec", "input-cspace"] + }, + "joint-mod-rotate-world-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "joint-mod-set-local-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "joint-mod-add-local-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "joint-mod-set-world-callback": { + "args": ["bone-cspace", "joint-trasnform"] + }, + "joint-mod-set-world-no-trans-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "joint-mod-blend-local-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "joint-mod-blend-world-callback": { + "args": ["bone-cspace", "joint-transform"] + }, + "spawn-projectile": { + "args": ["proj-type", "params", "parent-proc-tree", "pool"] + }, + "(top-level-login eye-h)": { + "vars": { + "a0-11": "eye-ctrl", + "v1-5": "ctrl-idx", + "a1-11": "eye-idx", + "a2-11": "shader-idx" + } + }, + "free-eye-index": { + "args": ["idx"] + }, + "(method 0 rpc-buffer)": { + "args": ["allocation", "type-to-make", "elt-size", "elt-count"] + }, + "(method 0 rpc-buffer-pair)": { + "args": ["allocation", "type-to-make", "elt-size", "elt-count", "rpc-port"] + }, + "(method 9 rpc-buffer-pair)": { + "args": ["this", "fno", "recv-buffer", "recv-buffer-size"] + }, + "(method 12 rpc-buffer-pair)": { + "args": ["this", "print-stall-warning"] + }, + "(method 0 path-control)": { + "args": [ + "allocation", + "type-to-make", + "proc", + "lump-name", + "lump-time", + "lump-actor", + "must-exist" + ] + }, + "(method 0 curve-control)": { + "args": [ + "allocation", + "type-to-make", + "proc", + "lump-name", + "lump-time", + "lump-actor", + "must-exist" + ] + }, + "point-poly-intersection?": { + "args": ["mesh", "pt", "num-verts", "verts"] + }, + "str-load": { + "args": ["name", "chunk-idx", "dest-addr", "max-len"] + }, + "str-load-status": { + "args": ["maxlen-out"] + }, + "str-play-async": { + "args": ["name", "id", "volume", "group"] + }, + "str-play-stop": { + "args": ["name", "id"] + }, + "str-play-queue": { + "args": ["name0", "name1", "name2", "name3", "ids", "mask"] + }, + "str-ambient-play": { + "args": ["name"] + }, + "str-ambient-stop": { + "args": ["name"] + }, + "dgo-load-begin": { + "args": ["name", "buffer1", "buffer2", "buffer-top"] + }, + "dgo-load-get-next": { + "args": ["done-out"] + }, + "dgo-load-continue": { + "args": ["buffer1", "buffer2", "buffer-top"] + }, + "find-temp-buffer": { + "args": ["size"] + }, + "dgo-load-link": { + "args": [ + "object-file", + "heap", + "end-of-buffer", + "print-login", + "loaded-from-top" + ] + }, + "destroy-mem": { + "args": ["start", "end"] + }, + "sound-name=": { + "args": ["a", "b"] + }, + "str-id-is-playing?": { + "args": ["id"] + }, + "current-str-pos": { + "args": ["id"] + }, + "current-str-status": { + "args": ["id"] + }, + "is-ramdisk-loaded?": { + "args": ["name"] + }, + "sound-bank-iop-store": { + "args": ["name"] + }, + "sound-bank-iop-free": { + "args": ["name"] + }, + "sound-bank-load": { + "args": ["name", "mode", "priority"] + }, + "sound-bank-load-from-iop": { + "args": ["name"] + }, + "sound-bank-load-from-ee": { + "args": ["name", "addr"] + }, + "sound-bank-unload": { + "args": ["name"] + }, + "sound-music-load": { + "args": ["name"] + }, + "set-language": { + "args": ["lang"] + }, + "sound-set-stereo-mode": { + "args": ["mode"] + }, + "sound-command->string": { + "args": ["cmd"] + }, + "sound-trans-convert": { + "args": ["int-trans", "meter-trans"] + }, + "sound-unit-vector-convert": { + "args": ["int-unit-vector", "float-unit-vector"] + }, + "sound-angle-convert": { + "args": ["float-angle"] + }, + "string->sound-name": { + "args": ["str"] + }, + "sound-name->string": { + "args": ["name"] + }, + "sound-set-volume": { + "args": ["group", "vol"] + }, + "sound-set-reverb": { + "args": ["reverb", "left", "right", "core"] + }, + "sound-set-ear-trans": { + "args": ["ear0", "ear1", "cam", "fwd", "left", "scale"] + }, + "sound-play-by-name": { + "args": ["name", "id", "vol", "pitch", "bend", "group", "trans"] + }, + "sound-play-by-spec": { + "args": ["spec", "name", "trans"] + }, + "sound-pause": { + "args": ["id"] + }, + "sound-stop": { + "args": ["id"] + }, + "sound-continue": { + "args": ["id"] + }, + "sound-group-pause": { + "args": ["group"] + }, + "sound-group-stop": { + "args": ["group"] + }, + "sound-group-continue": { + "args": ["group"] + }, + "sound-set-flava": { + "args": ["flava", "excitement"] + }, + "sound-set-midi-reg": { + "args": ["reg", "val"] + }, + "sound-set-fps": { + "args": ["fps"] + }, + "show-iop-info": { + "args": ["dma"] + }, + "show-iop-memory": { + "args": ["dma"] + }, + "ear-trans": { + "args": ["mode"] + }, + "loader-test-command": { + "args": ["cmd", "param"] + }, + "doppler-pitch-shift": { + "args": ["sound-pos", "sound-vel"] + }, + "(method 0 ambient-sound)": { + "args": ["allocation", "type-to-make", "spec", "trans", "lump-time"] + }, + "(method 10 ambient-sound)": { + "args": ["this", "new-sound"] + }, + "(method 11 ambient-sound)": { + "args": ["this", "new-trans"] + }, + "(method 12 ambient-sound)": { + "args": ["this", "new-vol"] + }, + "clear-mood-times": { + "args": ["mood-ctx"], + "vars": { + "v1-0": "idx" + } + }, + "(method 13 mood-control)": { + "args": ["this", "target-interp", "rate-interp", "set-current-interp?"], + "vars": { + "f0-1": "clamped-interp" + } + }, + "light-slerp": { + "args": ["light-out", "light-a", "light-b", "alpha"], + "vars": { + "s3-0": "clamped-alpha", + "f0-2": "extra-x-a", + "f1-2": "extra-x-b" + } + }, + "light-group-slerp": { + "args": ["light-group-out", "light-group-a", "light-group-b", "alpha"], + "vars": { + "s2-0": "group-idx" + } + }, + "light-group-process!": { + "args": ["vu-lights", "light-group", "vec1", "vec2"] + }, + "vu-lights-default!": { + "args": ["lights"] + }, + "lookup-light-sphere-by-name": { + "args": ["name", "hash"], + "vars": { + "s4-0": "num-lights", + "s3-0": "light" + } + }, + "light-merge!": { + "args": ["out", "other"] + }, + "light-group-scale!": { + "args": ["group", "backup-ptr", "scale"], + "vars": { + "arg1": "other", + "v1-4": "light-idx" + } + }, + "light-group-madd!": { + "args": ["group", "backup-ptr", "other", "scalar"], + "vars": { + "s4-0": "new-light", + "f30-0": "ambi-scaled", + "f24-0": "dir0-scaled", + "f26-0": "dir1-scaled", + "f28-0": "dir2-scaled" + } + }, + "light-group-lerp!": { + "args": ["group", "backup-ptr", "other", "scalar"] + }, + "shadow-info-copy!": { + "args": ["dest", "src"], + "vars": { + "v1-0": "light-idx" + } + }, + "init-mood-control": { + "args": ["ctrl"] + }, + "init-overide-table": { + "args": ["table"] + }, + "print-mood-tables": { + "vars": { + "v1-2": "data-idx", + "gp-0": "_color-idx", + "v1-5": "color-idx", + "gp-1": "_fog-idx", + "v1-33": "fog-idx" + } + }, + "desaturate-mood-colors": { + "vars": { + "a0-8": ["mood-colors", "(inline-array mood-color)"], + "v1-1": "data-idx", + "a1-3": "color-data", + "f1-2": "max-light-color", + "f0-4": "max-0th-light-color", + "gp-1": "_color-idx", + "v1-4": "color-idx" + } + }, + "desaturate-mood-fog": { + "vars": { + "arg0": "table-ptr", + "v1-2": "data-idx", + "a0-5": "fog-data", + "f0-2": "max-fog-val", + "gp-1": "_fog-idx", + "v1-5": "fog-idx" + } + }, + "vector-xz-normalize!": { + "args": ["vec", "arg1"] + }, + "(method 10 texture-page)": { + "args": ["this", "num-segments", "upload-offset"], + "vars": { + "v1-0": "offset", + "a2-1": "i" + } + }, + "(method 0 align-control)": { + "vars": { + "v0-0": ["this", "align-control"] + } + }, + "flatten-joint-control-to-spr": { + "args": ["jc"], + "vars": { + "s5-0": "chan-count", + "f0-0": "one", + "v1-2": "chan-float-offset", + "a2-0": ["chan-vector-ptr", "(inline-array vector)"], + "a0-2": "interp2-selected-idx", + "a1-0": "chan-idx", + "a3-2": "chan", + "a3-3": ["flt1", "(pointer float)"], + "f1-0": "interp2-selected-weight1", + "a2-1": ["prev-chan-ptr", "(inline-array vector)"], + "f2-2": "interp2-selected-weight2", + "f1-2": "one-minus-interp2", + "a2-2": ["chans-to-stack", "(inline-array vector)"], + "s4-0": "upload-count", + "s3-0": "upload-chan-idx", + "v1-11": "upload-chan", + "s2-0": "anim", + "f0-2": "frame-num", + "s1-0": "int-frame-num", + "f30-0": "frame-frac", + "s0-0": "last-frame", + "v1-20": "upload" + } + }, + "matrix-from-joint-anim-frame": { + "args": ["jacc", "joint-idx", "frame-idx"], + "vars": { + "v1-1": "fixed-matrix", + "v0-0": "frame-matrix" + } + }, + "matrix-from-control-channel!": { + "args": ["dest-mat", "requested-joint", "chan"], + "vars": { + "s4-0": "jacc", + "s5-0": "joint-num", + "f30-0": "frame-num", + "a2-3": "mat", + "s3-1": "first-mat", + "a2-7": "second-mat", + "f0-9": "mat-blend" + } + }, + "joint-anim-login": { + "args": ["jad"] + }, + "joint-anim-inspect-elt": { + "args": ["ja", "frame"] + }, + "jacc-mem-usage": { + "args": ["jacc", "mem-block", "flags"] + }, + "joint-control-cleanup": { + "args": ["jc", "heap", "ja"] + }, + "joint-control-channel-eval": { + "args": ["jcc"] + }, + "joint-control-channel-eval!": { + "args": ["jcc", "num-func"] + }, + "joint-control-channel-group-eval!": { + "args": ["jcc", "ja", "num-func"] + }, + "joint-control-channel-group!": {}, + "joint-control-copy!": { + "args": ["dst", "src"] + }, + "joint-control-remap!": { + "args": [ + "jc", + "dst-art-group", + "parent-art-group", + "remap-list", + "seed", + "prefix" + ] + }, + "matrix-from-control-pair!": { + "args": ["matrix-to-modify", "jcc", "jnt", "active-frame-interp"] + }, + "matrix-from-control!": { + "args": ["mat-stack", "jnt", "jc", "mode"] + }, + "cspace<-cspace!": { + "args": ["dst", "src"] + }, + "cspace<-cspace-normalized!": { + "args": ["dst", "src"] + }, + "cspace<-parent-joint!": { + "args": ["dst", "proc", "parent-idx"] + }, + "cspace<-rot-yxy!": { + "args": ["dst", "src"] + }, + "cspace<-transform-yxy!": { + "args": ["dst", "src"] + }, + "cspace<-transformq!": { + "args": ["dst", "src"] + }, + "cspace<-transformq+trans!": { + "args": ["dst", "src", "extra-trans"] + }, + "cspace<-transformq+world-trans!": { + "args": ["dst", "src", "extra-trans"] + }, + "cspace<-transformq+rot-offset!": { + "args": ["dst", "src", "extra-rot"] + }, + "cspace-calc-total-matrix!": { + "args": ["csp", "dst"] + }, + "cspace<-matrix-no-push-joint!": { + "args": ["dst", "jc"] + }, + "cspace<-matrix-joint!": { + "args": ["dst", "src"] + }, + "cspace<-parented-matrix-joint!": { + "args": ["dst", "joint-mat"] + }, + "cspace<-parented-matrix-mirror!": { + "args": ["dst", "joint-mat"] + }, + "cspace<-parented-matrix-joint-flip-z!": { + "args": ["dst", "joint-mat"] + }, + "cspace<-matrix-joint-flip-z!": { + "args": ["dst", "src"] + }, + "cspace<-parented-transformq-joint!": { + "args": ["dst", "joint-transformq"] + }, + "cspace<-parented-transformq-joint-flip-z!": { + "args": ["dst", "joint-transformq"] + }, + "create-interpolated-joint-animation-frame": { + "args": ["dst", "num-joints", "jc"] + }, + "create-interpolated2-joint-animation-frame": { + "args": ["dst", "num-joints", "jc"] + }, + "(method 37 cloth-system)": { + "args": ["this", "command"], + "vars": { + "s5-0": "msg", + "s4-0": "flags" + } + }, + "(method 11 cloth-on-skeleton)": { + "vars": { + "a1-0": "proc" + } + }, + "(method 25 cloth-on-skeleton)": { + "vars": { + "v1-1": "proc", + "a1-3": "draw-ctrl", + "v1-4": "fade" + } + }, + "(method 33 cloth-on-skeleton)": { + "vars": { + "v1-3": "draw-ctrl" + }, + "args": ["this", "lights"] + }, + "(method 33 cloth-system)": { + "args": ["this", "lights"] + }, + "emerc-vu1-init-buffer": { + "args": ["bucket", "arg1", "arg2"], + "vars": { + "v1-0": "disp", + "a1-6": "block-len", + "a3-0": "dma-buf", + "s5-0": "dma-bucket", + "s3-0": "buf", + "s4-3": "base", + "v1-17": "packet" + } + }, + "emerc-vu1-initialize-chain": { + "args": ["gif-packet"] + }, + "(method 9 merc-effect)": { + "vars": { + "v1-0": "tex-login", + "s5-0": "tex-idx", + "v1-1": "extra", + "s4-0": "eye-ctrl", + "a0-12": "ctrl-header", + "a0-10": "shader", + "s5-1": "fragment", + "s4-1": "geo", + "s3-0": "frag-idx", + "s2-0": "sizeof-frag", + "s1-0": "sizeof-geo" + } + }, + "(method 9 joint-mod-polar-look-at)": { + "args": ["this", "proc", "joint-id"] + }, + "(method 10 joint-mod-polar-look-at)": { + "args": ["this", "pos"] + }, + "(method 11 joint-mod-polar-look-at)": { + "args": ["this", "other", "pos"] + }, + "(method 12 joint-mod-polar-look-at)": { + "args": ["this", "duration", "final-val", "restart-if-in-progress"] + }, + "(method 13 joint-mod-polar-look-at)": { + "args": ["this", "duration", "restart-if-in-progress"] + }, + "(method 0 joint-mod-ik)": { + "args": ["allocation", "type-to-make", "proc", "joint-id", "hand-dist"] + }, + "(method 9 joint-mod-ik)": { + "args": ["this", "pos"] + }, + "(method 10 joint-mod-ik)": { + "args": ["this", "enable"] + }, + "(method 0 joint-mod)": { + "args": ["allocation", "type-to-make", "mode", "proc", "base-joint-id"] + }, + "(method 9 joint-mod)": { + "args": ["this", "mode"] + }, + "(method 10 joint-mod)": { + "args": ["this", "pos"] + }, + "(method 11 joint-mod)": { + "args": ["this", "target", "mode", "proc"] + }, + "(method 13 joint-mod)": { + "args": ["this", "x", "y", "z"] + }, + "(method 14 joint-mod)": { + "args": ["this", "trans", "quat", "scale"] + }, + "(method 13 gui-control)": { + "vars": { + "s3-0": ["con-i-0", "gui-connection"], + "a0-33": ["con-i-1", "gui-connection"] + } + }, + "(method 10 gui-control)": { + "vars": { + "s3-0": ["con-i-0", "gui-connection"] + } + }, + "(method 17 game-info)": { + "vars": { + "v1-7": "game-subtasks", + "a0-6": "i", + "a1-8": "subtask", + "s3-0": "game-task-max", + "s4-0": "game-task" + } + }, + "print-continues": { + "vars": { + "gp-0": "levels", + "s5-0": "continues", + "v1-2": "continue" + } + }, + "(method 10 continue-point)": { + "vars": { + "v1-0": "level", + "v1-1": "i", + "v1-4": "ii", + "a0-16": "rot", + "v1-11": "continue-rot" + } + }, + "(method 19 game-info)": { + "args": ["this", "name"], + "vars": { + "s4-0": "continues", + "s3-0": "cont", + "s5-0": "levels" + } + }, + "position->stream": { + "args": ["stream", "arg1", "newline?"] + }, + "(method 9 game-info)": { + "args": ["this", "mode", "arg2", "continue-name", "reset-spec"], + "vars": { + "s1-0": "name", + "s2-1": "level-info" + } + }, + "(method 11 fact-info-target)": { + "args": ["this", "pickup", "amount", "pickup-handle"] + }, + "(method 31 game-info)": { + "vars": { + "gp-0": "highscore-arr" + } + }, + "(method 33 game-info)": { + "vars": { + "s5-0": "level", + "s4-0": "subtasks", + "s3-0": "i", + "s2-0": "subtask" + } + }, + "(top-level-login game-task)": { + "vars": { + "gp-0": "game-info" + } + }, + "process-drawable-error-print": { + "args": ["proc", "error"] + }, + "process-drawable-cloth-command": { + "args": ["proc", "cmd"], + "vars": { + "s4-0": "i", + "a0-5": "cloth" + } + }, + "process-drawable-slow-mo-cloth": { + "args": ["proc", "disable-wind?"], + "vars": { + "v1-6": "i", + "a2-4": "cloth" + } + }, + "process-drawable-show-all-cloth": { + "args": ["proc", "arg1"], + "vars": { + "s4-0": "i" + } + }, + "process-drawable-set-wind-strength": { + "args": ["proc", "strength"], + "vars": { + "v1-6": "i" + } + }, + "process-drawable-set-cloth-ground-height": { + "args": ["proc", "height"], + "vars": { + "v1-6": "i" + } + }, + "process-drawable-set-riding": { + "args": ["proc", "riding?"], + "vars": { + "v1-6": "i" + } + }, + "process-drawable-reset-all-cloth": { + "args": ["proc"], + "vars": { + "v1-6": "i" + } + }, + "(method 10 draw-control)": { + "args": ["this", "lod"] + }, + "(method 11 draw-control)": { + "args": ["this", "lods"], + "vars": { + "a1-2": "lod" + } + }, + "(method 9 lod-set)": { + "args": ["this", "skelgroup", "ag", "entity"], + "vars": { + "s3-0": "max-lod", + "a0-1": "i", + "v1-14": "jgeo", + "v1-15": "dist" + } + }, + "(method 13 draw-control)": { + "args": ["this", "jgeo", "allocation"] + }, + "(method 15 draw-control)": { + "args": ["this", "joints", "jcontrol"] + }, + "execute-cloth-engine": { + "vars": { + "s3-0": "proc", + "s2-0": "i" + } + }, + "rider-post": { + "vars": { + "gp-0": "cshape" + } + }, + "pusher-post": { + "vars": { + "gp-0": "cshape" + } + }, + "process-drawable-delay-player": { + "args": ["delay"] + }, + "draw-root": { + "args": ["proc"] + }, + "(method 15 process-drawable)": { + "args": ["this", "name"] + }, + "skeleton-group->draw-control": { + "args": ["proc", "skelgroup", "arg2"] + }, + "ja-group-in-array?": { + "args": ["anim-array"] + }, + "ja-rate": { + "args": ["chan"] + }, + "ja-linear-vel": { + "args": ["chan"] + }, + "(method 32 game-info)": { + "vars": { + "a0-2": "node", + "a1-6": "node-info", + "s5-0": "completed-tasks" + } + }, + "(method 34 game-info)": { + "args": ["this", "gun"] + }, + "(method 11 game-info)": { + "args": ["this", "task"] + }, + "(method 22 game-info)": { + "args": ["this", "save", "name"] + }, + "add-blackout": { + "args": ["arg0", "r", "g", "b", "arg4"] + }, + "can-jump?": { + "args": ["mode"] + }, + "(method 16 ragdoll)": { + "args": ["this", "proc", "setup"] + }, + "(method 22 ragdoll)": { + "args": ["this", "idx"] + }, + "(method 25 ragdoll)": { + "args": ["this", "proc"] + }, + "target-send-attack": { + "vars": { + "t1-11": ["name", "sound-name"] + } + }, + "(code target-running-attack)": { + "vars": { + "t1-5": ["name", "sound-name"] + } + }, + "arrive-at-continue": { + "vars": { + "s5-2": ["s5-2", "handle"] + } + }, + "find-nearest-focusable": { + "vars": { + "s0-1": ["s0-1", "search-info-flag"], + "s1-1": ["s1-1", "search-info-flag"] + } + }, + "gun->eco": { + "vars": { + "v0-0": ["v0-0", "pickup-type"] + } + }, + "gun->ammo": { + "vars": { + "v0-0": ["v0-0", "pickup-type"] + } + }, + "gun-pickup-type->game-feature": { + "vars": { + "v0-0": ["v0-0", "game-feature"] + } + }, + "(method 9 highscore-info)": { + "args": ["this", "score"], + "vars": { + "v0-0": "place" + } + }, + "(method 12 game-info)": { + "vars": { + "s5-0": "subtasks", + "s4-0": "i" + } + }, + "(method 10 border-plane)": { + "vars": { + "arg0": "pt" + } + }, + "merc-vu1-add-vu-function": { + "args": ["dma", "func", "flush-mode"], + "vars": { + "v1-0": "func-data", + "a3-0": "qwc", + "a1-1": "dst", + "t0-1": "qwc-this-time" + } + }, + "bsp-camera-asm": { + "vars": { + "a3-0": "cam-pos-i1", + "a3-1": "cam-pos-32", + "a3-2": "cam-pos-16", + "a3-3": "cam-pos-8", + "a3-4": "cam-pos-8m", + "v1-0": "nodes", + "a2-0": "nidx", + "t1-1": "node", + "t3-0": "front-min", + "t6-0": "front-min-compare", + "t0-2": "front-max", + "t4-0": "front-max-compare", + "t2-0": "back-min", + "t7-0": "back-min-compare", + "t0-3": "back-max", + "t5-0": "back-max-compare", + "t0-4": "front-idx", + "t6-1": "not-f-min", + "t7-1": "not-b-min", + "t3-1": "f-flag", + "t4-2": "f-in-box", + "t5-2": "b-in-box", + "t2-1": "b-flag", + "t1-2": "back-idx" + } + }, + "target-collision-low-coverage": { + "vars": { + "sv-16": "contact-normal", + "sv-56": "overhang-nrm", + "sv-52": "tangent" + } + }, + "transform-float-point": { + "args": ["src-world-pt", "dst-gs-screen-pt"] + }, + "add-debug-point": { + "args": ["enable", "bucket", "pt"] + }, + "internal-draw-debug-line": { + "args": ["bucket", "p0", "p1", "color", "mode", "color2"] + }, + "internal-draw-debug-text-3d": { + "args": ["bucket", "text", "pos", "color", "offset"] + }, + "add-debug-outline-triangle": { + "args": ["enable", "bucket", "p0", "p1", "p2", "color"] + }, + "add-debug-triangle-normal": { + "args": ["enable", "bucket", "p0", "p1", "p2", "color"] + }, + "add-debug-flat-triangle": { + "args": ["enable", "bucket", "p0", "p1", "p2", "color"] + }, + "get-debug-text-3d": { + "args": ["enable", "bucket", "p0", "p1", "color", "mode", "color2"] + }, + "debug-reset-buffers": { + "args": ["enable", "bucket", "p0", "p1", "color"] + }, + "add-debug-line": { + "args": ["enable", "bucket", "p0", "p1", "color", "mode", "color2"] + }, + "add-debug-line2d": { + "args": ["enable", "bucket", "p0", "p1", "color"] + }, + "add-debug-box": { + "args": ["enable", "bucket", "p0", "p1", "color"] + }, + "add-debug-box-with-transform": { + "args": ["enable", "bucket", "box", "mat", "color"] + }, + "add-debug-x": { + "args": ["enable", "bucket", "pos", "color"] + }, + "add-debug-cross": { + "args": ["enable", "bucket", "pos", "len"] + }, + "add-debug-text-3d": { + "args": ["enable", "bucket", "text", "pos", "color", "offset"] + }, + "add-debug-sphere-with-transform": { + "args": ["enable", "bucket", "pos", "radius", "mat", "color"] + }, + "add-debug-sphere": { + "args": ["enable", "bucket", "pos", "radius", "color"] + }, + "add-debug-text-sphere": { + "args": ["enable", "bucket", "pos", "radius", "text", "color"] + }, + "add-debug-spheres": { + "args": ["enable", "bucket", "spheres", "count", "color"] + }, + "add-debug-line-sphere": { + "args": ["enable", "bucket", "base", "dir", "rad", "color"] + }, + "add-debug-circle": { + "args": ["enable", "bucket", "origin", "radius", "color", "mat"] + }, + "add-debug-vector": { + "args": ["enable", "bucket", "base", "dir", "len-scale", "color"] + }, + "add-debug-matrix": { + "args": ["enable", "bucket", "mat", "len"] + }, + "add-debug-rot-matrix": { + "args": ["enable", "bucket", "mat", "len", "trans"] + }, + "add-debug-quaternion": { + "args": ["enable", "bucket", "trans", "quat"] + }, + "add-debug-cspace": { + "args": ["enable", "bucket", "cs"] + }, + "foreground-draw": { + "args": ["dc", "dma-buf", "dist"], + "vars": { + "at-0": "work", + "a0-1": "bone-calc", + "v1-0": "matrix-mem", + "t1-0": "num-bones", + "a3-3": "matrix-mem-size", + "t0-1": "regs", + "t0-2": "bone-output", + "t1-2": "bone-flags", + "t4-0": "fg-regs", + "a1-6": "calc-list", + "a2-5": "calc", + "s5-0": "dma-ptr", + "s4-0": "bucket-info", + "a0-5": "lights-in", + "v1-6": "lights-out", + "a1-8": "inv-camera", + "s3-0": "geo", + "s2-0": "effect-mask", + "s1-0": "effect-idx", + "v1-41": "texscroll-info", + "v1-76": "envmap-info", + "f1-1": "envmap-fade0", + "f0-4": "envmap-fade1", + "f1-3": "envmap-interp", + "f0-6": "envmap-strength", + "a0-39": "envmap-tint", + "v1-79": "envmap-rgba-out", + "f0-7": "envmap-rgba-multiplier", + "a1-17": "tod-rgba", + "a0-81": "fade-amount", + "v1-161": "fade-enable", + "f0-11": "dist-until-gone" + } + }, + "fma-sphere-init-by-other": { + "args": ["fma-parms"] + }, + "(method 9 progress-list-level)": { + "vars": { + "s3-0": ["act", "game-task-node-flag"] + } + }, + "(method 4 progress-list-level)": { + "vars": { + "s4-0": ["act", "game-task-node-flag"] + } + }, + "level-find-borrow-slot": { + "args": ["borrower-level", "mode"], + "vars": { + "v1-0": "host-level-borrow-slot", + "a2-0": "host-level-candidate-idx", + "a3-3": "host-level-candidate", + "t0-7": "mode2", + "t0-10": "found-slot", + "t0-8": "host-level-slot-idx" + } + }, + "(method 24 com-airlock)": { + "args": ["this", "level-status"] + }, + "(method 29 com-airlock)": { + "args": ["this", "side"] + }, + "(method 23 com-airlock)": { + "vars": { + "s3-0": "tpos", + "f26-0": "target-dist", + "s4-0": "cmd" + } + }, + "(method 26 com-airlock)": { + "args": ["this", "arg1", "side"] + }, + "(method 9 proc-focusable-spawner)": { + "args": ["this", "count", "allocation"] + }, + "(method 15 proc-focusable-spawner)": { + "vars": { + "s5-0": "i", + "s4-0": "proc", + "a0-6": "pfoc", + "v1-8": "ii" + } + }, + "(method 119 enemy)": { + "vars": { + "a1-5": ["cspec", "collide-spec"] + } + }, + "(method 64 enemy)": { + "vars": { + "s3-2": ["aware", "enemy-aware"] + } + }, + "(method 146 enemy)": { + "vars": { + "gp-0": ["name", "sound-name"] + } + }, + "(method 82 enemy)": { + "args": ["this", "proc", "argc", "msg", "block"] + }, + "(method 11 process-taskable)": { + "args": ["this", "entity"] + }, + "debris-group-init-by-other": { + "args": ["tuning", "params", "pdraw"], + "vars": { + "s3-0": "i", + "s1-0": "debris", + "s2-0": "skel", + "v0-18": "draw", + "sv-48": "tuning-scale", + "s0-0": "joint-transform", + "sv-64": "debris-scale" + } + }, + "(method 15 debris-group)": { + "args": ["this", "idx"], + "vars": { + "s3-0": "cquery", + "v1-3": "debris-box", + "s5-0": "box-num", + "s4-0": "box-start", + "a0-1": "bbox", + "sv-96": "name", + "a1-13": "id", + "v1-7": "debris-start" + } + }, + "(trans idle debris-group)": { + "vars": { + "gp-0": "i", + "s5-0": "debris", + "s4-0": "draw-ctrl", + "gp-1": "ii", + "s5-1": "debris-box", + "s3-0": "box-num", + "s4-1": "box-start", + "s1-0": "bbox" + } + }, + "(method 16 debris-group)": { + "args": ["this", "idx"], + "vars": { + "s5-0": "debris-box", + "s4-0": "i", + "v1-7": "debris" + } + }, + "(enter burnt-husk gun-yellow-3-saucer)": { + "vars": { + "s5-0": ["name", "sound-name"] + } + }, + "reset-actors": { + "vars": { + "s5-0": ["perm", "entity-perm-status"] + } + }, + "(method 24 level-group)": { + "vars": { + "a0-9": ["enemy-option", "enemy-option"] + } + }, + "(code target-darkjak-running-attack)": { + "vars": { + "t1-2": ["name", "sound-name"] + } + }, + "(method 18 level)": { + "vars": { + "s5-0": "mem-mode", + "a0-31": "lev", + "sv-32": "mask", + "sv-20": "memory-unused?" + } + }, + "(method 119 nav-enemy)": { + "vars": { + "a1-13": ["cspec", "collide-spec"] + } + }, + "(method 216 saberfish)": { + "vars": { + "s4-1": ["s4-1", "saberfish-command"] + } + }, + "find-behavior<-in-water?": { + "vars": { + "v0-0": ["v0-0", "saberfish-find-behavior"] + } + }, + "(method 23 spider-manager)": { + "vars": { + "s3-0": ["dist", "float"] + } + }, + "(method 121 sewer-frog)": { + "vars": { + "v1-10": ["name", "sound-name"] + } + }, + "(trans target-board-ride-edge)": { + "vars": { + "a0-44": ["name", "sound-name"] + } + }, + "(method 9 menu-create-game-option)": { + "vars": { + "a0-26": ["name", "sound-name"] + } + }, + "(code active task-manager-forest-plants)": { + "vars": { + "s5-8": ["hand", "handle"] + } + }, + "(method 31 dm-mine-spider-spawner)": { + "vars": { + "s3-0": ["s3-0", "float"] + } + }, + "(method 26 task-manager-wascity-gungame)": { + "vars": { + "s4-1": ["sname", "sound-name"] + } + }, + "terraformer-head-always": { + "vars": { + "s4-2": ["sname", "sound-name"] + } + }, + "launch-mine": { + "vars": { + "v0-1": ["hand", "handle"] + } + }, + "(method 42 mh-centipede)": { + "vars": { + "s0-0": ["sname", "sound-name"] + } + }, + "check-enemy": { + "args": ["turret", "radius", "pfoc"] + }, + "(method 202 bot)": { + "vars": { + "s4-0": ["cspec", "collide-spec"] + } + }, + "(enter impact warf-projectile)": { + "vars": { + "s4-0": ["sname", "sound-name"] + } + }, + "symbol->city-target-type": { + "vars": { + "v0-0": ["type", "city-target-type"] + } + }, + "city-target-type->traffic-object-type": { + "vars": { + "v0-0": ["type", "traffic-type"] + } + }, + "city-target-type->cty-faction": { + "vars": { + "v0-0": ["type", "cty-faction"] + } + }, + "map-symbol-to-nav-territory-type": { + "vars": { + "v0-0": ["type", "nav-territory-type"] + } + }, + "guard-type->city-target-type": { + "vars": { + "v0-0": ["type", "city-target-type"] + } + }, + "(code die neo-sat)": { + "vars": { + "gp-0": ["hand", "handle"] + } + }, + "(method 48 task-manager-desert-rescue)": { + "vars": { + "f30-0": ["f30-0", "float"] + } + }, + "(method 31 gun-dummy)": { + "vars": { + "f0-0": "total-time", + "v1-0": "curr-frame" + } + }, + "symbol->gun-pickup-type": { + "vars": { + "v0-0": ["type", "pickup-type"] + } + }, + "symbol->faction-type": { + "vars": { + "v0-0": ["type", "assault-cmd-faction-type"] + } + }, + "symbol->speech-type": { + "vars": { + "v0-0": ["type", "assault-cmd-speech-type"] + } + }, + "symbol->assault-target-type": { + "vars": { + "v0-0": ["type", "assault-target-type"] + } + } +} diff --git a/decompiler/data/StrFileReader.cpp b/decompiler/data/StrFileReader.cpp index 526f92bda3..4731fbea1d 100644 --- a/decompiler/data/StrFileReader.cpp +++ b/decompiler/data/StrFileReader.cpp @@ -23,6 +23,7 @@ StrFileReader::StrFileReader(const fs::path& file_path, GameVersion version) : m break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: init_jak2(file_path); break; default: diff --git a/decompiler/data/dir_tpages.cpp b/decompiler/data/dir_tpages.cpp index b0e2f5814a..d2c0c9d3b3 100644 --- a/decompiler/data/dir_tpages.cpp +++ b/decompiler/data/dir_tpages.cpp @@ -45,7 +45,8 @@ DirTpageResult process_dir_tpages(ObjectFileData& data) { word_idx++; } - if (data.linked_data.version != GameVersion::Jak3) { + if (data.linked_data.version != GameVersion::Jak3 && + data.linked_data.version != GameVersion::JakX) { word_idx = ((word_idx + 3) / 4) * 4; } ASSERT(word_idx == (int)words.size()); diff --git a/decompiler/data/game_text.cpp b/decompiler/data/game_text.cpp index 4c97e2b278..d8c29efe93 100644 --- a/decompiler/data/game_text.cpp +++ b/decompiler/data/game_text.cpp @@ -8,6 +8,7 @@ #include "game_subs.h" #include "common/goos/Reader.h" +#include "common/log/log.h" #include "common/util/BitUtils.h" #include "common/util/font/font_utils.h" #include "common/util/font/font_utils_korean.h" @@ -43,6 +44,8 @@ bool word_is_type(const LinkedWord& word, const std::string& type_name) { } // namespace /* +Jak 3: + (deftype game-text (structure) ((id uint32 :offset-assert 0) (text basic :offset-assert 4) @@ -56,6 +59,25 @@ bool word_is_type(const LinkedWord& word, const std::string& type_name) { (data game-text :dynamic :offset-assert 16) ) ) + +Jak X: + +(deftype game-text (structure) + ((id text-id :offset-assert 0) + (index uint32 :offset-assert 4) + ) + ) + +(deftype game-text-info (basic) + ((length int32 :offset-assert 4) + (language-id int32 :offset-assert 8) + (group-name string :offset-assert 12) + (dic-index (pointer uint32) :offset-assert 16) + (dic-data (pointer uint8) :offset-assert 20) + (text (pointer game-text) :offset-assert 24) + (text-data (pointer uint8) :offset-assert 28) + ) + ) */ GameTextResult process_game_text(ObjectFileData& data, GameTextVersion version) { @@ -86,65 +108,205 @@ GameTextResult process_game_text(ObjectFileData& data, GameTextVersion version) read_words.at(offset)++; auto group_label = get_label(data, words.at(offset++)); auto group_name = data.linked_data.get_goal_string_by_label(group_label); - ASSERT(group_name == "common"); + if (version == GameTextVersion::JAKX) { + ASSERT(group_name == "common" || group_name == "subtitles"); + } else { + ASSERT(group_name == "common"); + } // remember that we read these bytes auto group_start = (group_label.offset / 4) - 1; - for (int j = 0; j < align16(8 + 1 + (int)group_name.length()) / 4; j++) { + for (int j = 0; + j < align16(8 + 1 + (int)group_name.length()) / 4 && (group_start + j) < read_words.size(); + j++) { read_words.at(group_start + j)++; } - // read each text... - for (u32 i = 0; i < text_count; i++) { - // id number - read_words.at(offset)++; - auto text_id = get_word(words.at(offset++)); + if (version != GameTextVersion::JAKX) { + // read each text... + for (u32 i = 0; i < text_count; i++) { + // id number + read_words.at(offset)++; + auto text_id = get_word(words.at(offset++)); - // label to string - read_words.at(offset)++; - auto text_label = get_label(data, words.at(offset++)); + // label to string + read_words.at(offset)++; + auto text_label = get_label(data, words.at(offset++)); - // actual string - auto text = data.linked_data.get_goal_string_by_label(text_label); - result.total_text++; - result.total_chars += text.length(); + // actual string + auto text = data.linked_data.get_goal_string_by_label(text_label); + result.total_text++; + result.total_chars += text.length(); - // no duplicate ids - if (result.text.find(text_id) != result.text.end()) { - ASSERT(false); + // no duplicate ids + if (result.text.find(text_id) != result.text.end()) { + ASSERT(false); + } + + // escape characters + if (get_font_bank(version)->is_language_id_korean(language)) { + // If we are doing korean, we process it differently + result.text[text_id] = get_font_bank(version)->convert_korean_game_to_utf8(text.c_str()); + } else if (font_bank_exists(version)) { + result.text[text_id] = get_font_bank(version)->convert_game_to_utf8(text.c_str()); + } else { + result.text[text_id] = goos::get_readable_string(text.c_str()); // HACK! + } + + // remember what we read (-1 for the type tag) + auto string_start = (text_label.offset / 4) - 1; + // 8 for type tag and length fields, 1 for null char. + for (int j = 0, m = align16(8 + 1 + (int)text.length()) / 4; + j < m && string_start + j < (int)read_words.size(); j++) { + read_words.at(string_start + j)++; + } } - // escape characters - if (get_font_bank(version)->is_language_id_korean(language)) { - // If we are doing korean, we process it differently - result.text[text_id] = get_font_bank(version)->convert_korean_game_to_utf8(text.c_str()); - } else if (font_bank_exists(version)) { - result.text[text_id] = get_font_bank(version)->convert_game_to_utf8(text.c_str()); - } else { - result.text[text_id] = goos::get_readable_string(text.c_str()); // HACK! + // alignment to the string section. + while (offset & 3) { + read_words.at(offset)++; + offset++; } - // remember what we read (-1 for the type tag) - auto string_start = (text_label.offset / 4) - 1; - // 8 for type tag and length fields, 1 for null char. - for (int j = 0, m = align16(8 + 1 + (int)text.length()) / 4; - j < m && string_start + j < (int)read_words.size(); j++) { - read_words.at(string_start + j)++; + // make sure we read each thing at least once. + // reading more than once is ok, some text is duplicated. + for (int i = 0; i < int(words.size()); i++) { + if (read_words[i] < 1) { + std::string debug; + data.linked_data.append_word_to_string(debug, words.at(i)); + ASSERT_MSG(false, fmt::format("[{}] {} 0x{}", i, int(read_words[i]), debug.c_str())); + } } - } - - // alignment to the string section. - while (offset & 3) { + } else { + // dic-index field read_words.at(offset)++; - offset++; - } + auto dic_index = get_label(data, words.at(offset++)); - // make sure we read each thing at least once. - // reading more than once is ok, some text is duplicated. - for (int i = 0; i < int(words.size()); i++) { - if (read_words[i] < 1) { - std::string debug; - data.linked_data.append_word_to_string(debug, words.at(i)); - ASSERT_MSG(false, fmt::format("[{}] {} 0x{}", i, int(read_words[i]), debug.c_str())); + // dic-data field + read_words.at(offset)++; + auto dic_data = get_label(data, words.at(offset++)); + + // text field + read_words.at(offset)++; + auto game_texts = get_label(data, words.at(offset++)); + + // text-data field + read_words.at(offset)++; + auto text_data = get_label(data, words.at(offset++)); + + for (u32 i = 0; i < text_count; i++) { + // id number + read_words.at(game_texts.offset / 4 + i * 2)++; + auto id = get_word(words.at(game_texts.offset / 4 + i * 2)); + + if (result.text.find(id) != result.text.end()) { + ASSERT(false); + } + + // index within text-data + read_words.at(game_texts.offset / 4 + i * 2 - 1)++; + auto index = get_word(words.at(game_texts.offset / 4 + i * 2 + 1)); + + result.total_text++; + + std::string text; + + u32 text_offset = text_data.offset + index; + + // number of dictionary elements + read_words.at(text_offset / 4)++; + u32 entries = data.data.at(text_offset++ + 0x80); + + auto flag = entries & 128; + entries = 127 & entries; + + if (entries == 127) { + u32 add; + do { + read_words.at(text_offset / 4)++; + add = data.data.at(text_offset++ + 0x80); + entries += add; + } while (add == 255); + } + + for (u32 j = 0; j < entries; j++) { + u32 idx; + + if (flag) { + u32 low_address = text_offset + j * 2; + u32 high_address = text_offset + j * 2 + 1; + + read_words.at(low_address / 4)++; + read_words.at(high_address / 4)++; + + idx = data.data.at(low_address + 0x80) + data.data.at(high_address + 0x80) * 256; + } else { + read_words.at((text_offset + j) / 4)++; + idx = data.data.at(text_offset + j + 0x80); + } + + read_words.at(dic_index.offset / 4 + idx)++; + auto d_idx = get_word(words.at(dic_index.offset / 4 + idx)); + + read_words.at((dic_data.offset + d_idx) / 4)++; + auto sublen = data.data.at(dic_data.offset + d_idx + 0x80); + + for (u32 x = 0; x < sublen; x++) { + read_words.at((dic_data.offset + d_idx + x + 1) / 4)++; + text += data.data.at(dic_data.offset + d_idx + x + 1 + 0x80); + } + + result.total_chars += sublen; + } + + // escape characters + if (font_bank_exists(version)) { + result.text[id] = get_font_bank(version)->convert_game_to_utf8(text.c_str()); + } else { + result.text[id] = goos::get_readable_string(text.c_str()); // HACK! + } + } + + size_t unused_dictionary_indices = 0; + size_t unused_words = 0; + + // check if we read each thing at least once. + // reading more than once is ok, some text is duplicated. + for (int i = 0; i < int(words.size()); i++) { + if (read_words[i] < 1) { + if (i < dic_data.offset / 4) { + std::string text; + u32 d_idx = get_word(words.at(i)); + + auto sublen = data.data.at(dic_data.offset + d_idx + 0x80); + + for (u32 x = 0; x < sublen; x++) { + read_words.at((dic_data.offset + d_idx + x + 1) / 4)++; + text += data.data.at(dic_data.offset + d_idx + x + 1 + 0x80); + } + + lg::debug(fmt::format("Unused dictionary entry in {} [index {}] {} {:?}", + data.name_in_dgo, i - (dic_index.offset / 4), int(read_words[i]), + text.c_str())); + + unused_dictionary_indices++; + } else { + std::string debug; + data.linked_data.append_word_to_string(debug, words.at(i)); + lg::debug(fmt::format("Unused word in {} [{}] {} 0x{}", data.name_in_dgo, i, + int(read_words[i]), debug.c_str())); + unused_words++; + } + } + } + + if (unused_dictionary_indices) { + lg::warn(fmt::format("{} dictionary entries unused by game text in {}", + unused_dictionary_indices, data.name_in_dgo)); + } + + if (unused_words) { + lg::warn( + fmt::format("{} data words unused by game text in {}", unused_words, data.name_in_dgo)); } } diff --git a/decompiler/data/streamed_audio.cpp b/decompiler/data/streamed_audio.cpp index 12335f0658..054dcede25 100644 --- a/decompiler/data/streamed_audio.cpp +++ b/decompiler/data/streamed_audio.cpp @@ -34,6 +34,7 @@ struct AudioDir { }; std::vector entries; + u32 version = 1; int entry_count() const { return entries.size(); } @@ -153,7 +154,7 @@ AudioDir read_audio_dir(const decompiler::Config& config, const fs::path& path) e.start_byte = AUDIO_PAGE_SIZE * entries[i].value; result.entries.push_back(e); } - } else if (config.game_version == GameVersion::Jak3) { + } else if (config.game_version == GameVersion::Jak3 || config.game_version == GameVersion::JakX) { struct VagDirJak3 { u32 id[2]; u32 version; @@ -179,6 +180,8 @@ AudioDir read_audio_dir(const decompiler::Config& config, const fs::path& path) ASSERT(dir.id[1] == 0x52494444); lg::warn("version {} count {}", dir.version, dir.count); + result.version = dir.version; + std::vector entries; for (size_t i = 0; i < dir.count; i++) { @@ -216,7 +219,8 @@ AudioFileInfo process_audio_file(const fs::path& output_folder, std::span data, const std::string& name, const std::string& suffix, - bool stereo) { + bool stereo, + u32 version) { BinaryReader reader(data); auto header = reader.read(); @@ -228,7 +232,7 @@ AudioFileInfo process_audio_file(const fs::path& output_folder, header.debug_print(); reader = BinaryReader(data.subspan(0, header.size)); - const auto [left_samples, right_samples] = decode_adpcm(reader, stereo); + const auto [left_samples, right_samples] = decode_adpcm(reader, stereo, version); while (reader.bytes_left()) { ASSERT(reader.read() == 0); @@ -280,7 +284,8 @@ void process_streamed_audio(const decompiler::Config& config, lg::info("File {}, total {:.2f} minutes", entry.name, audio_len / 60.0); auto data = std::span(wad_data).subspan(entry.start_byte); - auto info = process_audio_file(output_path, data, entry.name, suffix, entry.stereo); + auto info = + process_audio_file(output_path, data, entry.name, suffix, entry.stereo, dir_data.version); audio_len += info.length_seconds; filename_data[i][lang_id + 1] = info.filename; } diff --git a/decompiler/data/tpage.cpp b/decompiler/data/tpage.cpp index aeb4185ba6..d1fd1c0bd8 100644 --- a/decompiler/data/tpage.cpp +++ b/decompiler/data/tpage.cpp @@ -355,6 +355,9 @@ TexturePage read_texture_page(ObjectFileData& data, case GameVersion::Jak3: ASSERT(tpage.info.major_version == versions::jak3::TX_PAGE_VERSION); break; + case GameVersion::JakX: + ASSERT(tpage.info.major_version == versions::jakx::TX_PAGE_VERSION); + break; default: ASSERT(false); } diff --git a/decompiler/decompilation_process.cpp b/decompiler/decompilation_process.cpp index 569ce91b78..2b3ad20778 100644 --- a/decompiler/decompilation_process.cpp +++ b/decompiler/decompilation_process.cpp @@ -215,15 +215,28 @@ int run_decompilation_process(decompiler::Config config, if (!result.empty()) { file_util::write_text_file(out_folder / "assets" / "game_text.txt", result); } + + if (config.game_version == GameVersion::JakX) { + auto subtitle_result = db.process_game_text_files(config, "SUBTIT"); + if (!subtitle_result.empty()) { + file_util::write_text_file(out_folder / "assets" / "game_subs.txt", subtitle_result); + } + } } lg::info("[Mem] After text: {} MB", get_peak_rss() / (1024 * 1024)); if (config.process_subtitle_text || config.process_subtitle_images) { - auto result = db.process_all_spool_subtitles( - config, config.process_subtitle_images ? out_folder / "assets" / "subtitle-images" : ""); - if (!result.empty()) { - file_util::write_text_file(out_folder / "assets" / "game_subs.txt", result); + if (config.game_version == GameVersion::JakX) { + lg::warn( + "- Jak X does not use spools, ignoring process_subtitle_text and/or " + "process_subtitle_images"); + } else { + auto result = db.process_all_spool_subtitles( + config, config.process_subtitle_images ? out_folder / "assets" / "subtitle-images" : ""); + if (!result.empty()) { + file_util::write_text_file(out_folder / "assets" / "game_subs.txt", result); + } } } diff --git a/decompiler/level_extractor/BspHeader.cpp b/decompiler/level_extractor/BspHeader.cpp index 9884ec3fa6..7d9d589ec9 100644 --- a/decompiler/level_extractor/BspHeader.cpp +++ b/decompiler/level_extractor/BspHeader.cpp @@ -458,7 +458,8 @@ void TieFragment::read_from_file(TypedRef ref, num_dverts = read_plain_data_field(ref, "num-dverts", dts); break; case GameVersion::Jak2: - case GameVersion::Jak3: { + case GameVersion::Jak3: + case GameVersion::JakX: { auto debug_data_ref = TypedRef(deref_label(get_field_ref(ref, "debug", dts)), dts.ts.lookup_type("tie-fragment-debug")); num_tris = read_plain_data_field(debug_data_ref, "num-tris", dts); @@ -929,6 +930,7 @@ void PrototypeBucketTie::read_from_file(TypedRef ref, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: flags = read_plain_data_field(ref, "flags", dts); break; default: @@ -1577,6 +1579,7 @@ void PrototypeBucketShrub::read_from_file(TypedRef ref, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: flags = read_plain_data_field(ref, "flags", dts); break; default: @@ -2157,6 +2160,7 @@ void BspHeader::read_from_file(const decompiler::LinkedObjectFile& file, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: visible_list_length = read_plain_data_field(ref, "visible-list-length", dts); extra_vis_list_length = read_plain_data_field(ref, "extra-vis-list-length", dts); break; @@ -2189,7 +2193,7 @@ void BspHeader::read_from_file(const decompiler::LinkedObjectFile& file, get_and_check_ref_to_basic(ref, "collide-hash", "collide-hash", dts), dts, version); } - if (version == GameVersion::Jak3) { + if (version == GameVersion::Jak3 || version == GameVersion::JakX) { if (get_word_kind_for_field(ref, "hfrag-drawable", dts) == decompiler::LinkedWord::PTR) { hfrag.emplace(); hfrag->read_from_file(get_and_check_ref_to_basic(ref, "hfrag-drawable", "hfragment", dts), diff --git a/decompiler/level_extractor/extract_merc.cpp b/decompiler/level_extractor/extract_merc.cpp index dbba525986..e18c55ab7f 100644 --- a/decompiler/level_extractor/extract_merc.cpp +++ b/decompiler/level_extractor/extract_merc.cpp @@ -769,9 +769,9 @@ s32 find_or_add_texture_to_level(tfrag3::Level& out, } // check eyes - u32 eye_tpage = PerGameVersion(0x1cf, 0x70c, 0x3)[version]; - u32 left_id = PerGameVersion(0x6f, 0x7, 0x2)[version]; - u32 right_id = PerGameVersion(0x70, 0x8, 0x3)[version]; + u32 eye_tpage = PerGameVersion(0x1cf, 0x70c, 0x3, 0x3)[version]; + u32 left_id = PerGameVersion(0x6f, 0x7, 0x2, 0x2)[version]; + u32 right_id = PerGameVersion(0x70, 0x8, 0x3, 0x3)[version]; if (eye_out && (pc_combo_tex_id >> 16) == eye_tpage) { auto tex_it = tex_db.textures.find(pc_combo_tex_id); @@ -859,7 +859,8 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, u32 tidx = 2; tex_combo = (((u32)tpage) << 16) | tidx; } break; - case GameVersion::Jak3: { + case GameVersion::Jak3: + case GameVersion::JakX: { // (define *generic-envmap-texture* (get-texture pal-environment-front environment-generic)) // (defconstant environment-generic 2) tpage // (def-tex pal-environment-front environment-generic 1) texture diff --git a/decompiler/level_extractor/extract_tie.cpp b/decompiler/level_extractor/extract_tie.cpp index 53ce30a09a..5d3d8d63e4 100644 --- a/decompiler/level_extractor/extract_tie.cpp +++ b/decompiler/level_extractor/extract_tie.cpp @@ -1627,7 +1627,7 @@ void emulate_tie_instance_program(std::vector& protos, GameVersion bool inserted = frag.vertex_by_dest_addr.insert({(u32)dest_ptr, vertex_info}).second; // TODO hack - if (version != GameVersion::Jak3) { + if (version != GameVersion::Jak3 && version != GameVersion::JakX) { ASSERT(inserted); } nd.bp1++; @@ -2571,6 +2571,7 @@ void add_vertices_and_static_draw(tfrag3::TieTree& tree, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: info = get_jak2_tie_category(proto.proto_flag); break; default: diff --git a/decompiler/types2/ForwardProp.cpp b/decompiler/types2/ForwardProp.cpp index fd858d1448..2ba825f140 100644 --- a/decompiler/types2/ForwardProp.cpp +++ b/decompiler/types2/ForwardProp.cpp @@ -747,6 +747,13 @@ void types2_for_logior(types2::Type& type_out, return; } + if (arg0_type.typespec().base_type() == "pointer" && + arg1_type.typespec().base_type() == "pointer") { + env.func->warnings.warning("Using logior on pointers"); + type_out.type = TP_Type::make_from_ts("int"); + return; + } + if (common_int2_case(type_out, dts, arg0_type, arg1_type)) { return; } @@ -1971,6 +1978,7 @@ bool load_var_op_determine_type(types2::Type& type_out, art_get_by_name_method_id = 10; break; case GameVersion::Jak3: + case GameVersion::JakX: art_get_by_name_method_id = 11; break; default: diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index d576201623..c107d80331 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -218,13 +218,23 @@ 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; + if (m_version == GameVersion::JakX) { + if (type == "process-tree") { + *dest = ((u64)0xe << 32) + (0 << 16) + 0x2c; + return true; + } + if (type == "process") { + *dest = ((u64)0xe << 32) + (0 << 16) + 0x90; + } + } else { + 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); diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index f197c876fc..a2b886a497 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -1067,6 +1067,10 @@ const std::unordered_map< ArrayFieldDecompMeta(TypeSpec("uint64"), 8, ArrayFieldDecompMeta::Kind::REF_TO_INTEGER_ARR)}}}, + }}, + {GameVersion::JakX, + { + // TODO }}}; goos::Object decompile_structure(const TypeSpec& type, diff --git a/decompiler/util/sparticle_decompile.cpp b/decompiler/util/sparticle_decompile.cpp index d70cc7515b..33c4133143 100644 --- a/decompiler/util/sparticle_decompile.cpp +++ b/decompiler/util/sparticle_decompile.cpp @@ -159,6 +159,82 @@ enum class FieldId2 { SPT_END = 72, }; +// jakx version +enum class FieldIdX { + MISC_FIELDS_START = 0, + SPT_TEXTURE = 1, + SPT_ANIM = 2, + SPT_ANIM_SPEED = 3, + SPT_BIRTH_FUNC = 4, + SPT_JOINT_REFPOINT = 5, + SPT_NUM = 6, + MISC_FIELDS_END = 7, + SPRITE_FIELDS_START = 8, + SPT_X = 9, + SPT_Y = 10, + SPT_Z = 11, + SPT_SCALE_X = 12, + SPT_ROT_X = 13, + SPT_ROT_Y = 14, + SPT_ROT_Z = 15, + SPT_SCALE_Y = 16, + SPT_R = 17, + SPT_G = 18, + SPT_B = 19, + SPT_A = 20, + SPRITE_FIELDS_END = 21, + CPU_FIELDS_START = 22, + SPT_OMEGA = 23, + SPT_VEL_X = 24, + SPT_VEL_Y = 25, + SPT_VEL_Z = 26, + SPT_SCALEVEL_X = 27, + SPT_ROTVEL_X = 28, + SPT_ROTVEL_Y = 29, + SPT_ROTVEL_Z = 30, + SPT_SCALEVEL_Y = 31, + SPT_FADE_R = 32, + SPT_FADE_G = 33, + SPT_FADE_B = 34, + SPT_FADE_A = 35, + SPT_ACCEL_X = 36, + SPT_ACCEL_Y = 37, + SPT_ACCEL_Z = 38, + SPT_DUMMY = 39, + SPT_QUAT_X = 40, + SPT_QUAT_Y = 41, + SPT_QUAT_Z = 42, + SPT_QUAD_W = 43, + SPT_FRICTION = 44, + SPT_TIMER = 45, + SPT_FLAGS = 46, + SPT_USERDATA = 47, + SPT_FUNC = 48, + SPT_NEXT_TIME = 49, + SPT_NEXT_LAUNCHER = 50, + CPU_FIELDS_END = 51, + LAUNCH_FIELDS_START = 52, + SPT_LAUNCHROT_X = 53, + SPT_LAUNCHROT_Y = 54, + SPT_LAUNCHROT_Z = 55, + SPT_LAUNCHROT_W = 56, + SPT_CONEROT_X = 57, + SPT_CONEROT_Y = 58, + SPT_CONEROT_Z = 59, + SPT_CONEROT_W = 60, + SPT_ROTATE_X = 61, + SPT_ROTATE_Y = 62, + SPT_ROTATE_Z = 63, + SPT_CONEROT_RADIUS = 64, + SPT_MAT_SCALE_X = 65, + SPT_MAT_SCALE_Y = 66, + SPT_MAT_SCALE_Z = 67, + LAUNCH_FIELDS_END = 68, + SPT_SCALE = 69, + SPT_SCALEVEL = 70, + SPT_END = 71, +}; + // NOTE : "per second" here means it's in 1/60th instead of the usual 1/300ths constexpr bool allow_per_sec = false; @@ -335,10 +411,86 @@ const SparticleFieldDecomp field_kind_jak2[73] = { {true, FieldKind::END_FLAG} // SPT_END = 72 }; +const SparticleFieldDecomp field_kind_jakx[72] = { + {false}, // MISC_FIELDS_START = 0 + {true, FieldKind::TEXTURE_ID}, // SPT_TEXTURE = 1 + {false}, // SPT_ANIM = 2 + {false}, // SPT_ANIM_SPEED = 3 + {true, FieldKind::FUNCTION}, // SPT_BIRTH_FUNC = 4 + {false}, // SPT_JOINT/REFPOINT = 5 + {true, FieldKind::FLOAT}, // SPT_NUM = 6 + {false}, // MISC_FIELDS_END = 7 + {false}, // SPRITE_FIELDS_START = 8 + {true, FieldKind::METERS}, // SPT_X = 9 + {true, FieldKind::METERS}, // SPT_Y = 10 + {true, FieldKind::METERS}, // SPT_Z = 11 + {true, FieldKind::METERS}, // SPT_SCALE_X = 12 + {true, FieldKind::ROT_X}, // SPT_ROT_X = 13 + {true, FieldKind::DEGREES}, // SPT_ROT_Y = 14 + {true, FieldKind::DEGREES}, // SPT_ROT_Z = 15 + {true, FieldKind::METERS}, // SPT_SCALE_Y = 16 + {true, FieldKind::FLOAT}, // SPT_R = 17 + {true, FieldKind::FLOAT}, // SPT_G = 18 + {true, FieldKind::FLOAT}, // SPT_B = 19 + {true, FieldKind::FLOAT}, // SPT_A = 20 + {false}, // SPRITE_FIELDS_END = 21 + {false}, // CPU_FIELDS_START = 22 + {true, FieldKind::DEGREES}, // SPT_OMEGA = 23 + {true, FieldKind::METERS_PER_SEC}, // SPT_VEL_X = 24 (likely m/s) + {true, FieldKind::METERS_PER_SEC}, // SPT_VEL_Y = 25 + {true, FieldKind::METERS_PER_SEC}, // SPT_VEL_Z = 26 + {true, FieldKind::METERS_PER_SEC}, // SPT_SCALEVEL_X = 27 + {true, FieldKind::DEGREES_PER_SEC}, // SPT_ROTVEL_X = 28 + {true, FieldKind::DEGREES_PER_SEC}, // SPT_ROTVEL_Y = 29 + {true, FieldKind::DEGREES_PER_SEC}, // SPT_ROTVEL_Z = 30 + {true, FieldKind::METERS_PER_SEC}, // SPT_SCALEVEL_Y = 31 + {true, FieldKind::FLOAT_PER_SEC}, // SPT_FADE_R = 32 + {true, FieldKind::FLOAT_PER_SEC}, // SPT_FADE_G = 33 + {true, FieldKind::FLOAT_PER_SEC}, // SPT_FADE_B = 34 + {true, FieldKind::FLOAT_PER_SEC}, // SPT_FADE_A = 35 + {true, FieldKind::METERS_PER_SEC}, // SPT_ACCEL_X = 36 + {true, FieldKind::METERS_PER_SEC}, // SPT_ACCEL_Y = 37 + {true, FieldKind::METERS_PER_SEC}, // SPT_ACCEL_Z = 38 + {false}, // SPT_DUMMY = 39 + {false}, // SPT_QUAT_X = 40 + {false}, // SPT_QUAT_Y = 41 + {false}, // SPT_QUAT_Z = 42 + {false}, // SPT_QUAD_W = 43 + {true, FieldKind::FLOAT}, // SPT_FRICTION = 44 + {true, FieldKind::SECONDS}, // SPT_TIMER = 45 + {true, FieldKind::CPUINFO_FLAGS}, // SPT_FLAGS = 46 + {true, FieldKind::USERDATA}, // SPT_USERDATA = 47 + {true, FieldKind::FUNCTION}, // SPT_FUNC = 48 + {true, FieldKind::SECONDS}, // SPT_NEXT_TIME = 49 + {true, FieldKind::LAUNCHER_BY_ID}, // SPT_NEXT_LAUNCHER = 50 + {false}, // CPU_FIELDS_END = 51 + {false}, // LAUNCH_FIELDS_START = 52 + {true, FieldKind::DEGREES}, // SPT_LAUNCHROT_X = 53 + {true, FieldKind::DEGREES}, // SPT_LAUNCHROT_Y = 54 + {true, FieldKind::DEGREES}, // SPT_LAUNCHROT_Z = 55 + {true, FieldKind::DEGREES}, // SPT_LAUNCHROT_W = 56 + {true, FieldKind::DEGREES}, // SPT_CONEROT_X = 57 + {true, FieldKind::DEGREES}, // SPT_CONEROT_Y = 58 + {true, FieldKind::DEGREES}, // SPT_CONEROT_Z = 59 + {false}, // SPT_CONEROT_W = 60 + {true, FieldKind::DEGREES}, // SPT_ROTATE_X = 61 + {true, FieldKind::DEGREES}, // SPT_ROTATE_Y = 62 + {true, FieldKind::DEGREES}, // SPT_ROTATE_Z = 63 + {true, FieldKind::METERS}, // SPT_CONEROT_RADIUS = 64 + {true, FieldKind::METERS}, // SPT_MAT_SCALE_X = 65 + {true, FieldKind::METERS}, // SPT_MAT_SCALE_X = 66 + {true, FieldKind::METERS}, // SPT_MAT_SCALE_X = 67 + {false}, // LAUNCH_FIELDS_END = 68 + {false}, // SPT_SCALE = 69 + {false}, // SPT_SCALEVEL = 70 + {true, FieldKind::END_FLAG} // SPT_END = 71 +}; + const std::unordered_map field_kinds = { {GameVersion::Jak1, field_kind_jak1}, {GameVersion::Jak2, field_kind_jak2}, - {GameVersion::Jak3, field_kind_jak2}}; + {GameVersion::Jak3, field_kind_jak2}, + {GameVersion::JakX, field_kind_jakx}}; float word_as_float(const LinkedWord& w) { ASSERT(w.kind() == LinkedWord::PLAIN_DATA); diff --git a/decompiler/util/type_utils.h b/decompiler/util/type_utils.h index f258c10c57..d1674a6220 100644 --- a/decompiler/util/type_utils.h +++ b/decompiler/util/type_utils.h @@ -13,9 +13,8 @@ namespace decompiler { bool allowable_base_type_for_symbol_to_string(const TypeSpec& ts); constexpr PerGameVersion SYMBOL_TO_STRING_MEM_OFFSET_DECOMP = { - 8167 * 8, jak2::SYM_TO_STRING_OFFSET, - -99999, // not supported this way! + 8167 * 8, jak2::SYM_TO_STRING_OFFSET, -99999, -99999, // not supported this way! }; -constexpr PerGameVersion OFFSET_OF_NEXT_STATE_STORE = {72, 64, 68}; +constexpr PerGameVersion OFFSET_OF_NEXT_STATE_STORE = {72, 64, 68, 68}; } // namespace decompiler diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 89848815ed..60365627ce 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -26,12 +26,14 @@ set(RUNTIME_SOURCE external/discord_jak1.cpp external/discord_jak2.cpp external/discord_jak3.cpp + external/discord_jakx.cpp external/discord.cpp graphics/display.cpp graphics/gfx_test.cpp graphics/gfx.cpp graphics/jak2_texture_remap.cpp graphics/jak3_texture_remap.cpp + graphics/jakx_texture_remap.cpp graphics/screenshot.cpp graphics/opengl_renderer/background/background_common.cpp graphics/opengl_renderer/background/Hfrag.cpp @@ -140,6 +142,20 @@ set(RUNTIME_SOURCE kernel/jak3/kscheme.cpp kernel/jak3/ksocket.cpp kernel/jak3/ksound.cpp + kernel/jakx/fileio.cpp + kernel/jakx/kboot.cpp + kernel/jakx/kdgo.cpp + kernel/jakx/kdsnetm.cpp + kernel/jakx/klink.cpp + kernel/jakx/klisten.cpp + kernel/jakx/kmachine.cpp + kernel/jakx/kmachine_extras.cpp + kernel/jakx/kmalloc.cpp + kernel/jakx/kmemcard.cpp + kernel/jakx/kprint.cpp + kernel/jakx/kscheme.cpp + kernel/jakx/ksocket.cpp + kernel/jakx/ksound.cpp mips2c/jak1_functions/bones.cpp mips2c/jak1_functions/collide_cache.cpp mips2c/jak1_functions/collide_edge_grab.cpp @@ -279,6 +295,29 @@ set(RUNTIME_SOURCE overlord/jak3/sbank.cpp overlord/jak3/soundcommon.cpp overlord/jak3/streamlist.cpp + overlord/jakx/overlord.cpp + overlord/jakx/pagemanager.cpp + overlord/jakx/iso_cd.cpp + overlord/jakx/dma.cpp + overlord/jakx/iso.cpp + overlord/jakx/iso_queue.cpp + overlord/jakx/srpc.cpp + overlord/jakx/vag.cpp + overlord/jakx/ssound.cpp + overlord/jakx/iso_api.cpp + overlord/jakx/spustreams.cpp + overlord/jakx/list.cpp + overlord/jakx/vblank_handler.cpp + overlord/jakx/dvd_driver.cpp + overlord/jakx/basefile.cpp + overlord/jakx/basefilesystem.cpp + overlord/jakx/ramdisk.cpp + overlord/jakx/isocommon.cpp + overlord/jakx/init.cpp + overlord/jakx/stream.cpp + overlord/jakx/sbank.cpp + overlord/jakx/soundcommon.cpp + overlord/jakx/streamlist.cpp runtime.cpp sce/deci2.cpp sce/iop.cpp diff --git a/game/common/dgo_rpc_types.h b/game/common/dgo_rpc_types.h index 3879bc7689..847216e2b2 100644 --- a/game/common/dgo_rpc_types.h +++ b/game/common/dgo_rpc_types.h @@ -8,7 +8,7 @@ #include "common/common_types.h" #include "common/versions/versions.h" -constexpr PerGameVersion DGO_RPC_ID(0xdeb4, 0xfab3, 0xfab3); +constexpr PerGameVersion DGO_RPC_ID(0xdeb4, 0xfab3, 0xfab3, 0xfab3); constexpr int DGO_RPC_CHANNEL = 3; constexpr int DGO_RPC_LOAD_FNO = 0; constexpr int DGO_RPC_LOAD_NEXT_FNO = 1; diff --git a/game/common/loader_rpc_types.h b/game/common/loader_rpc_types.h index bd08921e3e..c2408fba7e 100644 --- a/game/common/loader_rpc_types.h +++ b/game/common/loader_rpc_types.h @@ -7,5 +7,5 @@ #include "common/versions/versions.h" -constexpr PerGameVersion LOADER_RPC_ID(0xdeb2, 0xfab1, 0xfab1); +constexpr PerGameVersion LOADER_RPC_ID(0xdeb2, 0xfab1, 0xfab1, 0xfab1); constexpr int LOADER_RPC_CHANNEL = 1; diff --git a/game/common/play_rpc_types.h b/game/common/play_rpc_types.h index 3ca16b94bd..64fb97f8da 100644 --- a/game/common/play_rpc_types.h +++ b/game/common/play_rpc_types.h @@ -7,5 +7,5 @@ */ #include "common/versions/versions.h" -constexpr PerGameVersion PLAY_RPC_ID(0xdeb6, 0xfab5, 0xfab5); +constexpr PerGameVersion PLAY_RPC_ID(0xdeb6, 0xfab5, 0xfab5, 0xfab5); constexpr int PLAY_RPC_CHANNEL = 5; diff --git a/game/common/player_rpc_types.h b/game/common/player_rpc_types.h index bec6f429dd..0d97f80315 100644 --- a/game/common/player_rpc_types.h +++ b/game/common/player_rpc_types.h @@ -7,5 +7,5 @@ */ #include "common/versions/versions.h" -constexpr PerGameVersion PLAYER_RPC_ID(0xdeb1, 0xfab0, 0xfab0); +constexpr PerGameVersion PLAYER_RPC_ID(0xdeb1, 0xfab0, 0xfab0, 0xfab0); constexpr int PLAYER_RPC_CHANNEL = 0; diff --git a/game/common/ramdisk_rpc_types.h b/game/common/ramdisk_rpc_types.h index eefe980094..25d2bd9b80 100644 --- a/game/common/ramdisk_rpc_types.h +++ b/game/common/ramdisk_rpc_types.h @@ -8,7 +8,7 @@ #include "common/common_types.h" #include "common/versions/versions.h" -constexpr PerGameVersion RAMDISK_RPC_ID(0xdeb3, 0xfab2, 0xfab2); +constexpr PerGameVersion RAMDISK_RPC_ID(0xdeb3, 0xfab2, 0xfab2, 0xfab2); constexpr int RAMDISK_RPC_CHANNEL = 2; constexpr int RAMDISK_GET_DATA_FNO = 0; constexpr int RAMDISK_RESET_AND_LOAD_FNO = 1; diff --git a/game/common/str_rpc_types.h b/game/common/str_rpc_types.h index 3aac5ac685..6a68a0cd87 100644 --- a/game/common/str_rpc_types.h +++ b/game/common/str_rpc_types.h @@ -5,7 +5,7 @@ #include "game/common/overlord_common.h" -constexpr PerGameVersion STR_RPC_ID(0xdeb5, 0xfab4, 0xfab4); +constexpr PerGameVersion STR_RPC_ID(0xdeb5, 0xfab4, 0xfab4, 0xfab4); constexpr int STR_RPC_CHANNEL = 4; /* diff --git a/game/external/discord_jakx.cpp b/game/external/discord_jakx.cpp new file mode 100644 index 0000000000..f739d50b5a --- /dev/null +++ b/game/external/discord_jakx.cpp @@ -0,0 +1,38 @@ +#include "discord_jakx.h" + +namespace jakx { +const std::map level_names = {}; + +// for remapping sub-level names to the matching one in level_names +std::map level_name_remap = {}; + +const std::map> level_remap_hack = {}; + +void remap_hack() { + for (auto& name : level_remap_hack) { + auto base_name = name.first; + auto suffix_start = name.second.first; + auto suffix_end = name.second.second; + for (int i = 0; i < suffix_end - suffix_start; i++) { + auto suffix = static_cast(suffix_start + i); + std::string level(base_name); + level.push_back(suffix); + level_name_remap.insert(std::make_pair(level, base_name)); + } + } +} + +// levels that are not affected by time of day +const std::vector indoor_levels = {}; + +// time of day string to append to level name for icons +const char* time_of_day_str(float time) { + int hour = static_cast(time); + + if (hour > 6 && hour < 19) { + return "day"; + } else { + return "night"; + } +} +} // namespace jakx \ No newline at end of file diff --git a/game/external/discord_jakx.h b/game/external/discord_jakx.h new file mode 100644 index 0000000000..5483fe7b3e --- /dev/null +++ b/game/external/discord_jakx.h @@ -0,0 +1,11 @@ +#pragma once + +#include "discord.h" + +namespace jakx { +extern const std::map level_names; +extern std::map level_name_remap; +void remap_hack(); +extern const std::vector indoor_levels; +const char* time_of_day_str(float time); +} // namespace jakx diff --git a/game/graphics/gfx.cpp b/game/graphics/gfx.cpp index 8709d9bbeb..e9e5fdfd43 100644 --- a/game/graphics/gfx.cpp +++ b/game/graphics/gfx.cpp @@ -75,7 +75,8 @@ u32 Init(GameVersion version) { { auto p = scoped_prof("startup::gfx::init_main_display"); std::string title = "OpenGOAL"; - if (g_game_version == GameVersion::Jak2 || g_game_version == GameVersion::Jak3) { + if (g_game_version == GameVersion::Jak2 || g_game_version == GameVersion::Jak3 || + g_game_version == GameVersion::JakX) { title += " - Work in Progress"; } title += fmt::format(" - {} - {}", version_to_game_name_external(g_game_version), diff --git a/game/graphics/jakx_texture_remap.cpp b/game/graphics/jakx_texture_remap.cpp new file mode 100644 index 0000000000..627f221379 --- /dev/null +++ b/game/graphics/jakx_texture_remap.cpp @@ -0,0 +1,25 @@ +#include "jakx_texture_remap.h" + +#include +#include +#include + +namespace { +const std::unordered_map>> data = { + // TODO - jakx +}; + +}; + +int lookup_jakx_texture_dest_offset(int tpage, int texture_idx) { + auto it = data.find(tpage); + if (it == data.end()) { + return 0; + } + for (auto& p : it->second) { + if (p.first == texture_idx) { + return p.second; + } + } + return 0; +} \ No newline at end of file diff --git a/game/graphics/jakx_texture_remap.h b/game/graphics/jakx_texture_remap.h new file mode 100644 index 0000000000..2e1d5a5022 --- /dev/null +++ b/game/graphics/jakx_texture_remap.h @@ -0,0 +1,3 @@ +#pragma once + +int lookup_jakx_texture_dest_offset(int tpage, int texture_idx); \ No newline at end of file diff --git a/game/graphics/opengl_renderer/BlitDisplays.cpp b/game/graphics/opengl_renderer/BlitDisplays.cpp index ad9aa2b863..4a35b9509a 100644 --- a/game/graphics/opengl_renderer/BlitDisplays.cpp +++ b/game/graphics/opengl_renderer/BlitDisplays.cpp @@ -14,6 +14,7 @@ void BlitDisplays::init_textures(TexturePool& texture_pool, GameVersion version) tbp = 0x3300; break; case GameVersion::Jak3: + case GameVersion::JakX: tbp = 0x3300; // assuming this for now... break; default: diff --git a/game/graphics/opengl_renderer/CollideMeshRenderer.cpp b/game/graphics/opengl_renderer/CollideMeshRenderer.cpp index 35e689baf4..d4f5d1c9f8 100644 --- a/game/graphics/opengl_renderer/CollideMeshRenderer.cpp +++ b/game/graphics/opengl_renderer/CollideMeshRenderer.cpp @@ -213,6 +213,7 @@ void CollideMeshRenderer::init_pat_colors(GameVersion version) { mode_colors = &mode_colors_jak2; break; case GameVersion::Jak3: + case GameVersion::JakX: material_colors = &material_colors_jak3; event_colors = &event_colors_jak3; mode_colors = &mode_colors_jak2; // unchanged from jak2 diff --git a/game/graphics/opengl_renderer/CollideMeshRenderer.h b/game/graphics/opengl_renderer/CollideMeshRenderer.h index 9dd1b5c873..3534f5aceb 100644 --- a/game/graphics/opengl_renderer/CollideMeshRenderer.h +++ b/game/graphics/opengl_renderer/CollideMeshRenderer.h @@ -1,8 +1,8 @@ #pragma once #include "common/versions/versions.h" +#include "game/graphics/gfx.h" #include "game/graphics/opengl_renderer/BucketRenderer.h" -#include struct PatColors { math::Vector4f pat_mode_colors[PAT_MOD_COUNT]; diff --git a/game/graphics/opengl_renderer/DirectRenderer.cpp b/game/graphics/opengl_renderer/DirectRenderer.cpp index 1cdefa23b8..02653cb00f 100644 --- a/game/graphics/opengl_renderer/DirectRenderer.cpp +++ b/game/graphics/opengl_renderer/DirectRenderer.cpp @@ -11,7 +11,7 @@ DirectRenderer::ScissorState DirectRenderer::m_scissor; -constexpr PerGameVersion game_height(448, 416, 416); +constexpr PerGameVersion game_height(448, 416, 416, 416); DirectRenderer::DirectRenderer(const std::string& name, int my_id, int batch_size) : BucketRenderer(name, my_id), m_prim_buffer(batch_size) { @@ -1049,7 +1049,7 @@ void DirectRenderer::handle_xyz2_packed(const u8* data, handle_xyzf2_common(x << 16, y << 16, z, 0, render_state, prof, !adc); } -PerGameVersion normal_zbp = {448, 304, 304}; +PerGameVersion normal_zbp = {448, 304, 304, 304}; void DirectRenderer::handle_zbuf1(u64 val, SharedRenderState* render_state, ScopedProfilerNode& prof) { diff --git a/game/graphics/opengl_renderer/EyeRenderer.cpp b/game/graphics/opengl_renderer/EyeRenderer.cpp index 20aabd95d3..58427f674f 100644 --- a/game/graphics/opengl_renderer/EyeRenderer.cpp +++ b/game/graphics/opengl_renderer/EyeRenderer.cpp @@ -28,6 +28,7 @@ void EyeRenderer::init_textures(TexturePool& texture_pool, GameVersion version) tbp += EYE_BASE_BLOCK_JAK1; break; case GameVersion::Jak3: + case GameVersion::JakX: // for jak 3, go back to using the right TBP. tbp += EYE_BASE_BLOCK_JAK3; break; diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index 99f62d687c..cc19099d41 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -136,6 +136,7 @@ OpenGLRenderer::OpenGLRenderer(std::shared_ptr texture_pool, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: m_texture_animator = std::make_shared(m_render_state.shaders, common_level, m_version); break; @@ -156,6 +157,7 @@ OpenGLRenderer::OpenGLRenderer(std::shared_ptr texture_pool, init_bucket_renderers_jak2(); break; case GameVersion::Jak3: + case GameVersion::JakX: init_bucket_renderers_jak3(); break; default: @@ -1457,6 +1459,7 @@ void OpenGLRenderer::dispatch_buckets(DmaFollower dma, dispatch_buckets_jak2(dma, prof, sync_after_buckets); break; case GameVersion::Jak3: + case GameVersion::JakX: dispatch_buckets_jak3(dma, prof, sync_after_buckets); break; default: diff --git a/game/graphics/opengl_renderer/TextureAnimator.cpp b/game/graphics/opengl_renderer/TextureAnimator.cpp index c0469b4934..523608c732 100644 --- a/game/graphics/opengl_renderer/TextureAnimator.cpp +++ b/game/graphics/opengl_renderer/TextureAnimator.cpp @@ -102,6 +102,18 @@ OpenGLTexturePool::OpenGLTexturePool(GameVersion version) { {128, 128, 10}, {256, 1, 2}, {256, 256, 7}}, + {{4, 4, 3}, + {4, 64, 6}, + {16, 16, 5}, + {32, 16, 1}, + {32, 32, 20}, + {32, 64, 1}, + {64, 32, 15}, + {64, 64, 85}, + {64, 128, 4}, + {128, 128, 185}, + {256, 1, 2}, + {256, 256, 7}}, {{4, 4, 3}, {4, 64, 6}, {16, 16, 5}, @@ -247,6 +259,7 @@ int output_slot_by_idx(GameVersion version, const std::string& name) { v = &jak2_animated_texture_slots(); break; case GameVersion::Jak3: + case GameVersion::JakX: v = &jak3_animated_texture_slots(); break; default: @@ -463,6 +476,7 @@ const std::vector& animated_texture_slots(GameVersion version) { case GameVersion::Jak2: return jak2_animated_texture_slots(); case GameVersion::Jak3: + case GameVersion::JakX: return jak3_animated_texture_slots(); default: ASSERT_NOT_REACHED(); @@ -596,6 +610,7 @@ TextureAnimator::TextureAnimator(ShaderLibrary& shaders, setup_texture_anims_jak2(); break; case GameVersion::Jak3: + case GameVersion::JakX: setup_texture_anims_jak3(); break; default: @@ -1302,6 +1317,7 @@ void TextureAnimator::handle_texture_anim_data(DmaFollower& dma, } break; case GameVersion::Jak3: + case GameVersion::JakX: switch (static_cast(vif0.immediate)) { case PcTextureAnimCodesJak3::UPLOAD_CLUT_16_16: { auto p = scoped_prof("clut-16-16"); diff --git a/game/graphics/opengl_renderer/TextureAnimatorDefs.cpp b/game/graphics/opengl_renderer/TextureAnimatorDefs.cpp index 54d55de265..d51a102695 100644 --- a/game/graphics/opengl_renderer/TextureAnimatorDefs.cpp +++ b/game/graphics/opengl_renderer/TextureAnimatorDefs.cpp @@ -1766,7 +1766,7 @@ void TextureAnimator::setup_texture_anims_common() { } m_security_anim_array_idx = create_fixed_anim_array({env, dot}); - if (this->m_version == GameVersion::Jak3) { + if (this->m_version == GameVersion::Jak3 || this->m_version == GameVersion::JakX) { m_comb_field_anim_array_idx = create_fixed_anim_array({env, dot}); } } diff --git a/game/graphics/opengl_renderer/foreground/Merc2.cpp b/game/graphics/opengl_renderer/foreground/Merc2.cpp index adf48defa2..07c7204d84 100644 --- a/game/graphics/opengl_renderer/foreground/Merc2.cpp +++ b/game/graphics/opengl_renderer/foreground/Merc2.cpp @@ -1265,7 +1265,8 @@ void Merc2::do_draws(const Draw* draw_array, if (draw.texture < (int)lev->textures.size() && draw.texture >= 0) { glBindTexture(GL_TEXTURE_2D, lev->textures.at(draw.texture)); } else if ((draw.texture & 0xffffff00) == 0xefffff00) { - if (render_state->version >= GameVersion::Jak3) { + if (render_state->version == GameVersion::Jak3 || + render_state->version == GameVersion::JakX) { auto maybe_eye = render_state->eye_renderer->lookup_eye_texture_hash(draw.hash, (draw.texture & 1)); if (maybe_eye) { diff --git a/game/graphics/opengl_renderer/ocean/OceanMidAndFar.cpp b/game/graphics/opengl_renderer/ocean/OceanMidAndFar.cpp index a3f62d9d93..75e68eb97e 100644 --- a/game/graphics/opengl_renderer/ocean/OceanMidAndFar.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanMidAndFar.cpp @@ -31,6 +31,7 @@ void OceanMidAndFar::render(DmaFollower& dma, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: render_jak2(dma, render_state, prof); break; } @@ -176,6 +177,7 @@ void OceanMidAndFar::handle_ocean_mid(DmaFollower& dma, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: m_mid_renderer.run_jak2(dma, render_state, prof); } } else { diff --git a/game/graphics/opengl_renderer/ocean/OceanNear.cpp b/game/graphics/opengl_renderer/ocean/OceanNear.cpp index 583a93e0d8..c92e6e5d52 100644 --- a/game/graphics/opengl_renderer/ocean/OceanNear.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanNear.cpp @@ -39,6 +39,7 @@ void OceanNear::render(DmaFollower& dma, break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: render_jak2(dma, render_state, prof); break; } diff --git a/game/graphics/opengl_renderer/ocean/OceanTexture.cpp b/game/graphics/opengl_renderer/ocean/OceanTexture.cpp index 9e76eae0ab..0c3d3c807e 100644 --- a/game/graphics/opengl_renderer/ocean/OceanTexture.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanTexture.cpp @@ -69,6 +69,7 @@ void OceanTexture::init_textures(TexturePool& pool, GameVersion version) { break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: m_tex0_gpu = pool.give_texture_and_load_to_vram(in, OCEAN_TEX_TBP_JAK2); break; } diff --git a/game/graphics/opengl_renderer/sprite/Sprite3.cpp b/game/graphics/opengl_renderer/sprite/Sprite3.cpp index 67a8477a9e..9918d76d3a 100644 --- a/game/graphics/opengl_renderer/sprite/Sprite3.cpp +++ b/game/graphics/opengl_renderer/sprite/Sprite3.cpp @@ -171,7 +171,8 @@ void Sprite3::handle_sprite_frame_setup(DmaFollower& dma, m_frame_data.from_jak1(jak1_data); } break; case GameVersion::Jak2: - case GameVersion::Jak3: { + case GameVersion::Jak3: + case GameVersion::JakX: { render_state->shaders[ShaderId::SPRITE3].activate(); auto frame_data = dma.read_and_advance(); ASSERT(frame_data.size_bytes == (int)sizeof(SpriteFrameData)); // very cool @@ -379,6 +380,7 @@ void Sprite3::render_2d_group1(DmaFollower& dma, ASSERT(run.vifcode1().immediate == SpriteProgMem::Sprites2dHud_Jak2); break; case GameVersion::Jak3: + case GameVersion::JakX: ASSERT_EQ_IMM(run.vifcode1().immediate, (int)SpriteProgMem::Sprites2dHud_Jak3); break; default: @@ -397,6 +399,7 @@ void Sprite3::render(DmaFollower& dma, SharedRenderState* render_state, ScopedPr break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: render_jak2(dma, render_state, prof); break; default: @@ -835,7 +838,7 @@ void Sprite3::do_block_common(SpriteMode mode, auto& vert1 = m_vertices_3d.at(start_vtx_id + 0); - if (render_state->version == GameVersion::Jak3) { + if (render_state->version == GameVersion::Jak3 || render_state->version == GameVersion::JakX) { auto flag = m_vec_data_2d[sprite_idx].flag(); if ((flag & 0x10) || (flag & 0x20)) { diff --git a/game/graphics/opengl_renderer/sprite/Sprite3_Distort.cpp b/game/graphics/opengl_renderer/sprite/Sprite3_Distort.cpp index ec8c839393..f71cb6e4bc 100644 --- a/game/graphics/opengl_renderer/sprite/Sprite3_Distort.cpp +++ b/game/graphics/opengl_renderer/sprite/Sprite3_Distort.cpp @@ -213,6 +213,7 @@ void Sprite3::distort_dma(GameVersion version, DmaFollower& dma, ScopedProfilerN break; case GameVersion::Jak2: case GameVersion::Jak3: + case GameVersion::JakX: expect_zbp = 0x130; expect_th = 9; break; diff --git a/game/graphics/pipelines/opengl.cpp b/game/graphics/pipelines/opengl.cpp index 324d07c91c..b644b2d177 100644 --- a/game/graphics/pipelines/opengl.cpp +++ b/game/graphics/pipelines/opengl.cpp @@ -48,7 +48,8 @@ constexpr bool run_dma_copy = false; constexpr PerGameVersion fr3_level_count(jak1::LEVEL_TOTAL, jak2::LEVEL_TOTAL, - jak3::LEVEL_TOTAL); + jak3::LEVEL_TOTAL, + jakx::LEVEL_TOTAL); struct GraphicsData { // vsync diff --git a/game/graphics/texture/TexturePool.cpp b/game/graphics/texture/TexturePool.cpp index e25ee14f2b..4ef203e431 100644 --- a/game/graphics/texture/TexturePool.cpp +++ b/game/graphics/texture/TexturePool.cpp @@ -314,6 +314,7 @@ const std::vector& get_tpage_dir(GameVersion version) { case GameVersion::Jak2: return get_jak2_tpage_dir(); case GameVersion::Jak3: + case GameVersion::JakX: return get_jak3_tpage_dir(); default: ASSERT(false); @@ -401,6 +402,7 @@ PcTextureId TexturePool::allocate_pc_port_texture(GameVersion version) { case GameVersion::Jak2: return PcTextureId(get_jak2_tpage_dir().size() - 1, m_next_pc_texture_to_allocate++); case GameVersion::Jak3: + case GameVersion::JakX: return PcTextureId(get_jak3_tpage_dir().size() - 1, m_next_pc_texture_to_allocate++); default: ASSERT_NOT_REACHED(); diff --git a/game/kernel/common/fileio.h b/game/kernel/common/fileio.h index 51b56f40a9..079a8a255c 100644 --- a/game/kernel/common/fileio.h +++ b/game/kernel/common/fileio.h @@ -51,10 +51,11 @@ enum GoalFileType { SND_BNK_FILE_TYPE = 0x3c, MUSIC_BNK_FILE_TYPE = 0x3d, VAG_FILE_TYPE = 0x3e, - MISC_FILE_TYPE = 0x3f, // jak2 only - MAP_FILE_TYPE = 0x40, // jak2 only - CL_FILE_TYPE = 0x41, // jak 3 cloth animation + MISC_FILE_TYPE = 0x3f, // jak2 only + MAP_FILE_TYPE = 0x40, // jak2 only + CL_FILE_TYPE = 0x41, // jak 3 cloth animation + FLASH_FILE_TYPE = 0x42, // jak x idk REFPLANT_FILE_TYPE = 0x301, // added this, allows access directly to out/iso from fileio. ISO_FILE_TYPE = 0x302 -}; \ No newline at end of file +}; diff --git a/game/kernel/common/klink.h b/game/kernel/common/klink.h index a2fb9610a6..60fb374e07 100644 --- a/game/kernel/common/klink.h +++ b/game/kernel/common/klink.h @@ -87,10 +87,17 @@ struct link_control { Ptr heap, uint32_t flags); + void jakx_begin(Ptr object_file, + const char* name, + int32_t size, + Ptr heap, + uint32_t flags); + // was originally "work" uint32_t jak1_work(); uint32_t jak2_work(); uint32_t jak3_work(); + uint32_t jakx_work(); uint32_t jak1_work_v3(); uint32_t jak1_work_v2(); @@ -101,10 +108,14 @@ struct link_control { uint32_t jak3_work_v2_v4(); uint32_t jak3_work_v5(); uint32_t jak3_work_opengoal(); + uint32_t jakx_work_v2_v4(); + uint32_t jakx_work_v5(); + uint32_t jakx_work_opengoal(); void jak1_finish(bool jump_from_c_to_goal); void jak2_finish(bool jump_from_c_to_goal); void jak3_finish(bool jump_from_c_to_goal); + void jakx_finish(bool jump_from_c_to_goal); void reset() { m_object_data.offset = 0; diff --git a/game/kernel/common/kmachine.cpp b/game/kernel/common/kmachine.cpp index 67f5cd8cb2..0b4296102f 100644 --- a/game/kernel/common/kmachine.cpp +++ b/game/kernel/common/kmachine.cpp @@ -304,6 +304,16 @@ s32 kwrite(u64 fs, u64 buffer, s32 size) { return result; } +s32 kmkdir(u64 name) { + char acStack_90[128]; + if (Ptr(name)->data()[4] == '/') { // start from the fourth character? + sprintf(acStack_90, "%s", Ptr(name)->data() + 5); + } else { + sprintf(acStack_90, "host:%s", Ptr(name)->data() + 4); + } + return ee::sceMkDir(acStack_90, 0x1fd); +} + /*! * Close a file stream. */ diff --git a/game/kernel/common/kmachine.h b/game/kernel/common/kmachine.h index 425c9935d9..b5b1730d19 100644 --- a/game/kernel/common/kmachine.h +++ b/game/kernel/common/kmachine.h @@ -49,6 +49,7 @@ s32 klength(u64 fs); s32 kseek(u64 fs, s32 offset, s32 where); s32 kread(u64 fs, u64 buffer, s32 size); s32 kwrite(u64 fs, u64 buffer, s32 size); +s32 kmkdir(u64 name); u64 kclose(u64 fs); void dma_to_iop(); u64 DecodeLanguage(); diff --git a/game/kernel/common/kmemcard.h b/game/kernel/common/kmemcard.h index 2daa7c810e..6036eea462 100644 --- a/game/kernel/common/kmemcard.h +++ b/game/kernel/common/kmemcard.h @@ -11,8 +11,8 @@ void kmemcard_init_globals(); -constexpr PerGameVersion SAVE_SIZE(692, 1204, 1060); // 691 for jak 1 v1 -constexpr PerGameVersion BANK_SIZE(0x10000, 0x20000, 0x1e000); +constexpr PerGameVersion SAVE_SIZE(692, 1204, 1060, 1060); // 691 for jak 1 v1 +constexpr PerGameVersion BANK_SIZE(0x10000, 0x20000, 0x1e000, 0x1e000); // each card can be in one of these states: enum class MemoryCardState : u32 { diff --git a/game/kernel/common/memory_layout.h b/game/kernel/common/memory_layout.h index 73777a9f81..027561140e 100644 --- a/game/kernel/common/memory_layout.h +++ b/game/kernel/common/memory_layout.h @@ -32,4 +32,8 @@ constexpr u32 DEBUG_HEAP_SIZE = 0x2f00000; namespace jak3 { constexpr u32 DEBUG_HEAP_SIZE = 0x2f00000; -} \ No newline at end of file +} + +namespace jakx { +constexpr u32 DEBUG_HEAP_SIZE = 0x2f00000; +} diff --git a/game/kernel/jakx/fileio.cpp b/game/kernel/jakx/fileio.cpp new file mode 100644 index 0000000000..01bb001501 --- /dev/null +++ b/game/kernel/jakx/fileio.cpp @@ -0,0 +1,266 @@ +#include "fileio.h" + +#include + +#include "game/kernel/common/fileio.h" + +namespace jakx { + +// This file naming system was used only in development, as it loads files from the development PC +// connected to the PS2 dev-kit. +// My theory is that the developers would use this to debug their level/art tools. They could use +// these file names to quickly load in new files and see if they worked correctly with the renderer, +// without needing to create/load entire new DGO files. +// They've been adding to this file over all 3 games, so I believe it is more than just a leftover +// from early jak 1. + +/*! + * Convert a file-name like $CODE/thing to the appropriate file path on the development computer. + */ +char* DecodeFileName(const char* name) { + char* result; + + if (name[0] == '$') { + if (!strncmp(name, "$TEXTURE/", 9)) { + result = MakeFileName(TX_PAGE_FILE_TYPE, name + 9, 0); + } else if (!strncmp(name, "$ART_GROUP/", 0xb)) { + result = MakeFileName(ART_GROUP_FILE_TYPE, name + 0xb, 0); + } else if (!strncmp(name, "$LEVEL/", 7)) { + int len = (int)strlen(name); + if (name[len - 4] == '.') { + result = MakeFileName(LEVEL_WITH_EXTENSION_FILE_TYPE, name + 7, 0); + } else { + // level files can omit a file type if desired + result = MakeFileName(LEVEL_FILE_TYPE, name + 7, 0); + } + } else if (!strncmp(name, "$FINAL/", 6)) { // in jak2, this is FINAL instead of DATA + result = MakeFileName(DATA_FILE_TYPE, name + 6, 0); + } else if (!strncmp(name, "$CODE/", 6)) { + result = MakeFileName(CODE_FILE_TYPE, name + 6, 0); + } else if (!strncmp(name, "$RES/", 5)) { + result = MakeFileName(RES_FILE_TYPE, name + 5, 0); + } else if (!strncmp(name, "$MISC/", 6)) { + result = MakeFileName(MISC_FILE_TYPE, name + 6, 0); + } else if (!strncmp(name, "$MAP/", 5)) { + result = MakeFileName(MAP_FILE_TYPE, name + 5, 0); + } else if (!strncmp(name, "$FLASH/", 7)) { + result = MakeFileName(FLASH_FILE_TYPE, name + 7, 0); + } else { + printf("[ERROR] DecodeFileName: UNKNOWN FILE NAME %s\n", name); + result = nullptr; + } + } else { + // no prefix. Treat this as a code file + return MakeFileName(CODE_FILE_TYPE, name, 0); + } + return result; +} + +/*! + * Create a file name that looks in the appropriate folder in ND's development environment. + * This is a bit of dumping ground for all possible files they'd load. + */ +char* MakeFileName(int type, const char* name, int new_string) { + using namespace versions::jakx; + // start with network filesystem + // kstrcpy(buffer_633, "host:"); + kstrcpy(buffer_633, ""); + char* buf = strend(buffer_633); + + // prefix to build directory + char prefix[128]; + kstrcpy(prefix, FOLDER_PREFIX); + + switch (type) { + // Unused files that could be used to exchange data between the dev PS2 and the GOAL compiler. + case LISTENER_TO_KERNEL_FILE_TYPE: + kstrcpy(buf, "kernel/LISTENERTOKERNEL"); + break; + case KERNEL_TO_LISTENER_FILE_TYPE: + kstrcpy(buf, "kernel/KERNELTOLISTENER"); + break; + + // A GOAL object file containing code built from the GOAL compiler. + case CODE_FILE_TYPE: + sprintf(buf, "game/obj/%s.o", name); + break; + + // Unused, opening the gamepad as a file. + case GAMEPAD_FILE_TYPE: + sprintf(buffer_633, "pad:0"); + break; + + // Locks for the unused kernel/listener interface. (funny that they added this after...) + case LISTENER_TO_KERNEL_LOCK_FILE_TYPE: + kstrcpy(buf, "kernel/LISTENERTOKERNEL_LOCK"); + break; + case KERNEL_TO_LISTENER_LOCK_FILE_TYPE: + kstrcpy(buf, "kernel/KERNELTOLISTENER_LOCK"); + break; + + // Host0 IOP modules (stored on the linux SBC inside the dev ps2 itself!) + case IOP_MODULE_FILE_TYPE: // 8 + sprintf(buffer_633, "host0:/usr/local/sce/iop/modules/%s.irx", name); + break; + + // plain GOAL data object file + case DATA_FILE_TYPE: // 0x20 + // sprintf(buf, "%sfinal/%s.go", prefix, name); + sprintf(buf, "%sout/jakx/obj/%s.go", prefix, name); + break; + + // texture page + case TX_PAGE_FILE_TYPE: // 0x21 + // sprintf(buf, "%sfinal/texture-page%d/%s.go", prefix, TX_PAGE_VERSION, name); + sprintf(buf, "%sout/jakx/obj/%s.go", prefix, name); + break; + + // joint animation + case JA_FILE_TYPE: // 0x22 + sprintf(buf, "%sdb/artdata%d/%s-ja.go", prefix, ART_FILE_VERSION, name); + break; + + // joint geo (skeleton) + case JG_FILE_TYPE: // 0x23 + sprintf(buf, "%sdb/artdata%d/%s-jg.go", prefix, ART_FILE_VERSION, name); + break; + + // mesh animation (unused) + case MA_FILE_TYPE: // 0x24 + sprintf(buf, "%sdb/artdata%d/%s-ma.go", prefix, ART_FILE_VERSION, name); + break; + + // likely art-mesh-geo, and unused. Maybe was used before MERC? + case MG_FILE_TYPE: // 0x25 + sprintf(buf, "%sdb/artdata%d/%s-mg.go", prefix, ART_FILE_VERSION, name); + break; + + // text group perhaps? + case TG_FILE_TYPE: + sprintf(buf, "%sfinal/%s-tg.go", prefix, name); + break; + + // level file + case LEVEL_FILE_TYPE: // 0x27 + sprintf(buf, "%sfinal/level%d/%s-bt.go", prefix, LEVEL_FILE_VERSION, name); + break; + + case 0x28: // 0x28 + case 0x29: // 0x29 + sprintf(buf, "%sfinal/texture-page%d/%s.go", prefix, ART_FILE_VERSION, name); + break; + + // Everybody's favorite "art group" file. Container of different art. + case ART_GROUP_FILE_TYPE: // 0x30 + // sprintf(buf, "%sfinal/art-group%d/%s-ag.go", prefix, ART_FILE_VERSION, name); + sprintf(buf, "%sout/jakx/obj/%s.go", prefix, name); + break; + + // GOAL data object file containing visibility data. This likely contained the visibility data + // that's included in the BSP file. + case VS_FILE_TYPE: // 0x31 + sprintf(buf, "%sfinal/level%d/%s-vs.go", prefix, LEVEL_FILE_VERSION, name); + break; + + // GOAL data object file containing text. Likely the same format as the .TXT in final ISOs. + case TX_FILE_TYPE: // 0x32 + sprintf(buf, "%sfinal/res%d/%s-tx.go", prefix, DGO_FILE_VERSION, name); + break; + + // Binary format visibility. Likely the format of Jak 1's .VIS files. + case VS_BIN_FILE_TYPE: // 0x33 + sprintf(buf, "%sfinal/level%d/%s-vs.bin", prefix, LEVEL_FILE_VERSION, name); + break; + + // DGO description files. These contain a list of files inside each DGO. + case DGO_TXT_FILE_TYPE: // 0x34 + sprintf(buf, "%sfinal/dgo%d/%s.txt", prefix, DGO_FILE_VERSION, name); + break; + + // Level file! but you have to provide the extension. + case LEVEL_WITH_EXTENSION_FILE_TYPE: // 0x35 + sprintf(buf, "%sfinal/level%d/%s", prefix, LEVEL_FILE_VERSION, name); + break; + + // DGO and CGO files. These can exist in either final/ or game/ + case DATA_DGO_FILE_TYPE: // 0x36 + sprintf(buf, "%sfinal/dgo%d/%s.dgo", prefix, DGO_FILE_VERSION, name); + break; + case GAME_DGO_FILE_TYPE: // 0x37 + sprintf(buf, "game/dgo%d/%s.dgo", DGO_FILE_VERSION, name); + break; + case DATA_CGO_FILE_TYPE: // 0x38 + sprintf(buf, "%sfinal/dgo%d/%s.cgo", prefix, DGO_FILE_VERSION, name); + break; + case GAME_CGO_FILE_TYPE: // 0x39 + sprintf(buf, "game/dgo%d/%s.cgo", DGO_FILE_VERSION, name); + break; + + // Jak 1 had a weird game-cnt.gco file containing the total number of orbs/cells. + case CNT_FILE_TYPE: // 0x3a + sprintf(buf, "%sfinal/res%d/game-cnt.go", prefix, DGO_FILE_VERSION); + break; + + // Any res file with .go extension. + case RES_FILE_TYPE: // 0x3b + sprintf(buf, "%sfinal/res%d/%s.go", prefix, 1, name); + break; + + // sound bank (sound effects) + case SND_BNK_FILE_TYPE: // 0x3c + sprintf(buf, "%sfinal/sound%d/%s.bnk", prefix, 1, name); // v1 + break; + + // music file + case MUSIC_BNK_FILE_TYPE: // 0x3d + sprintf(buf, "%sfinal/music%d/%s.bnk", prefix, 1, name); // v1 + break; + + // vag file, but it probably doesn't work due to the file extension. + case VAG_FILE_TYPE: // 0x3e + // interestingly, jak 2 used vagwad2, but jak 3 doesn't. But the memory bug is still there. + sprintf(buf, "%sfinal/vagwad/%s.%s", prefix, name, ""); // v1, memory bug here + break; + + // whatever you want. + case MISC_FILE_TYPE: // 0x3f + sprintf(buf, "%sfinal/misc/%s", prefix, name); + break; + + // possible minimap/bigmap data + case MAP_FILE_TYPE: + sprintf(buf, "%sfinal/map%d/%s.go", prefix, DGO_FILE_VERSION, name); // v1 + break; + + // jak 3 cloth animation file. + case CL_FILE_TYPE: // 0x41 + sprintf(buf, "%sdb/artdata%d/%s-cl.go", prefix, ART_FILE_VERSION, name); + break; + + case FLASH_FILE_TYPE: // 0x42: + sprintf(buf, "%sfinal/flash%d/%s.go", prefix, DGO_FILE_VERSION, name); + break; + + // no idea + case REFPLANT_FILE_TYPE: // 0x301 + sprintf(buf, "%sdb/config/refplant/%s", prefix, name); + break; + default: + printf("UNKNOWN FILE TYPE %d\n", type); + } + + char* result; + if (!new_string) { + // return pointer to static filename buffer + result = buffer_633; + } else { + // or create a new string on the global heap. + int l = (int)strlen(buffer_633); + result = (char*)kmalloc(kglobalheap, l + 1, 0, "filename").c(); + kstrcpy(result, buffer_633); + } + + return result; +} + +} // namespace jakx diff --git a/game/kernel/jakx/fileio.h b/game/kernel/jakx/fileio.h new file mode 100644 index 0000000000..2c5de54980 --- /dev/null +++ b/game/kernel/jakx/fileio.h @@ -0,0 +1,6 @@ +#pragma once + +namespace jakx { +char* MakeFileName(int type, const char* name, int new_string); +char* DecodeFileName(const char* name); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/kboot.cpp b/game/kernel/jakx/kboot.cpp new file mode 100644 index 0000000000..bf4f74f1d9 --- /dev/null +++ b/game/kernel/jakx/kboot.cpp @@ -0,0 +1,187 @@ +#include "kboot.h" + +#include + +#include "common/log/log.h" +#include "common/repl/repl_wrapper.h" +#include "common/util/Timer.h" + +#include "game/common/game_common_types.h" +#include "game/kernel/common/Ptr.h" +#include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/kboot.h" +#include "game/kernel/common/klisten.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/common/kscheme.h" +#include "game/kernel/common/ksocket.h" +#include "game/kernel/jakx/klisten.h" +#include "game/kernel/jakx/kmachine.h" +#include "game/sce/libscf.h" + +// KernelDispatch__3ndiPFv_x +// KernelCheckAndDispatch__3ndiv +// KernelShutdown__3ndii +// main + +namespace jakx { +int KernelCheckAndDispatch(); + +char DebugBootUser[64]; +char DebugBootArtGroup[64]; + +void kboot_init_globals() { + memset(DebugBootUser, 0, sizeof(DebugBootUser)); + memset(DebugBootArtGroup, 0, sizeof(DebugBootArtGroup)); + // strcpy(DebugBootUser, "unknown"); + // CHANGED : let's just try to find the username automatically by default! + // the default is still "unknown" + auto username = REPL::find_repl_username(); + strcpy(DebugBootUser, username.c_str()); +} + +s32 goal_main(int argc, const char* const* argv) { + // s32 thread_id = GetThreadId(); + // ChangeThreadPriority(thread_id, 0x18); + // sceGsSyncVCallback(FUN_0026a918_probably_kernel); + // DAT_002833fc = 1; + // InitOnce_WS(); + + // only in PC port + InitParms(argc, argv); + + masterConfig.aspect = ee::sceScfGetAspect(); + auto sony_language = ee::sceScfGetLanguage(); + masterConfig.inactive_timeout = 0; + masterConfig.volume = 100; + masterConfig.timeout = 0; + switch (sony_language) { + case SCE_JAPANESE_LANGUAGE: + masterConfig.language = 6; // NOTE: Why UK_English and not Japanese? + break; + case SCE_FRENCH_LANGUAGE: // 2 -> 1 + masterConfig.language = (u16)Language::French; + break; + case SCE_SPANISH_LANGUAGE: // 3 -> 3 + masterConfig.language = (u16)Language::Spanish; + break; + case SCE_GERMAN_LANGUAGE: // 4 -> 2 + masterConfig.language = (u16)Language::German; + break; + case SCE_ITALIAN_LANGUAGE: // 5 -> 4 + masterConfig.language = (u16)Language::Italian; + break; + case SCE_PORTUGUESE_LANGUAGE: + masterConfig.language = (u16)Language::Portuguese; + break; + default: + masterConfig.language = (u16)Language::English; + break; + } + // Set up aspect ratio override in demo + if (!strcmp(DebugBootMessage, "demo") || !strcmp(DebugBootMessage, "demo-shared")) { + masterConfig.aspect = SCE_ASPECT_FULL; + } + // removed in PC port + // DiskBoot = 1; + // MasterDebug = 0; + // DebugSegment = 0; + // DebugSymbols = 0; + + // Launch GOAL! + int initMachineResult = InitMachine(); + bool result = (initMachineResult & 0xfff00000) == 0xfff00000; + int shutdownReason; + if (result) { + printf("kboot: error; failed to initialize machine (result=0x%08x)\n", initMachineResult); + shutdownReason = 2; + } else { + shutdownReason = KernelCheckAndDispatch(); // run kernel + } + ShutdownMachine(shutdownReason); // kernel died, we should too. + // movie playback stuff? + if (MasterExit == RuntimeExitStatus::EXIT) { + // LoadExecPS2("cdrom0:\\NETGUI\\NTGUI_EU.ELF;1", 1, &movie_args_Q); + } else if (MasterExit == RuntimeExitStatus::RESTART_IN_DEBUG) { + char printBuffer[32]; + sprintf(printBuffer, "cdrom0:\\SCES_%.3s.%2s;1", "532", "86"); + } + return result; +} + +void KernelDispatch(u32 dispatcher_func) { + // place our stack at the end of EE memory + u64 goal_stack = u64(g_ee_main_mem) + EE_MAIN_MEM_SIZE - 8; + + // try to get a message from the listener, and process it if needed + Ptr new_message = WaitForMessageAndAck(); + if (new_message.offset) { + ProcessListenerMessage(new_message); + } + + // remember the old listener + auto old_listener_function = ListenerFunction->value(); + + // run the kernel! + Timer dispatch_timer; + if (MasterUseKernel) { + call_goal_on_stack(Ptr(dispatcher_func), goal_stack, s7.offset, g_ee_main_mem); + } else { + // added, just calls the listener function + if (ListenerFunction->value() != s7.offset) { + auto result = call_goal_on_stack(Ptr(ListenerFunction->value()), goal_stack, + s7.offset, g_ee_main_mem); +#ifdef __linux__ + cprintf("%ld\n", result); +#else + cprintf("%lld\n", result); +#endif + ListenerFunction->value() = s7.offset; + } + } + + float time_ms = dispatch_timer.getMs(); + if (time_ms > 50) { + lg::print("Kernel dispatch time: {:.3f} ms\n", time_ms); + } + + // flush stdout + ClearPending(); + + // now run the extra "kernel function" + auto bonus_function = KernelFunction->value(); + if (bonus_function != s7.offset) { + // clear the pending kernel function + KernelFunction->value() = s7.offset; + // and run + call_goal_on_stack(Ptr(bonus_function), goal_stack, s7.offset, g_ee_main_mem); + } + + // send ack to indicate that the listener function has been processed and the result printed + if (MasterDebug && ListenerFunction->value() != old_listener_function) { + SendAck(); + } + + // prevent crazy spinning if we're not vsyncing (added) + if (time_ms < 4) { + std::this_thread::sleep_for(std::chrono::microseconds(1000)); + } +} + +void KernelShutdown(u32 reason) { + if ((u32)MasterExit < reason) { + MasterExit = (RuntimeExitStatus)reason; + } +} + +int KernelCheckAndDispatch() { + // TODO - jak x + /*while (MasterExit == RuntimeExitStatus::RUNNING && !POWERING_OFF_W) { + KernelDispatch(kernel_dispatcher->value()); + } + if (POWERING_OFF_W) { + KernelShutdown(3); + }*/ + return (u32)MasterExit; +} + +} // namespace jakx diff --git a/game/kernel/jakx/kboot.h b/game/kernel/jakx/kboot.h new file mode 100644 index 0000000000..3ea586e193 --- /dev/null +++ b/game/kernel/jakx/kboot.h @@ -0,0 +1,11 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +extern char DebugBootUser[64]; +extern char DebugBootArtGroup[64]; +void kboot_init_globals(); +void KernelShutdown(u32 reason); +s32 goal_main(int argc, const char* const* argv); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/kdgo.cpp b/game/kernel/jakx/kdgo.cpp new file mode 100644 index 0000000000..ff2db53491 --- /dev/null +++ b/game/kernel/jakx/kdgo.cpp @@ -0,0 +1,235 @@ +#include "kdgo.h" + +#include "common/global_profiler/GlobalProfiler.h" +#include "common/log/log.h" +#include "common/util/Timer.h" + +#include "game/kernel/common/fileio.h" +#include "game/kernel/common/kdgo.h" +#include "game/kernel/common/kmalloc.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/jakx/kboot.h" +#include "game/kernel/jakx/klink.h" +#include "game/kernel/jakx/kmachine.h" +#include "game/overlord/jakx/rpc_interface.h" + +namespace jakx { + +jakx::RPC_Dgo_Cmd* sLastMsg; //! Last DGO command sent to IOP +jakx::RPC_Dgo_Cmd sMsg[2]; //! DGO message buffers +uint16_t cgo_id = 10; + +void kdgo_init_globals() { + sLastMsg = nullptr; + memset(sMsg, 0, sizeof(sMsg)); + cgo_id = 10; +} + +/*! + * Send message to IOP to start loading a new DGO file + * Uses a double-buffered message buffer + * @param name: the name of the DGO file + * @param buffer1 : one of the two file loading buffers + * @param buffer2 : the other of the two file loading buffers + * @param currentHeap : the current heap (for loading directly into the heap). + * + * DONE, + * MODIFIED : Added print statement to indicate when DGO load starts. + */ +void BeginLoadingDGO(const char* name, Ptr buffer1, Ptr buffer2, Ptr currentHeap) { + u8 msgID = sMsgNum; + RPC_Dgo_Cmd* mess = sMsg + sMsgNum; + sMsgNum = sMsgNum ^ 1; // toggle message buffer. + RpcSync(DGO_RPC_CHANNEL); // make sure old RPC is finished + + // put a dummy value here just to make sure the IOP overwrites it. + sMsg[msgID].status = DGO_RPC_RESULT_INIT; // !! this is 666 + + // inform IOP of buffers + sMsg[msgID].buffer1 = buffer1.offset; + sMsg[msgID].buffer2 = buffer2.offset; + + // also give a heap pointer so it can load the last object file directly into the heap to save the + // precious time. + sMsg[msgID].buffer_heap_top = currentHeap.offset; + + // new for Jak 3: a unique ID. + sMsg[msgID].cgo_id = cgo_id; + cgo_id++; + + // file name + strcpy(sMsg[msgID].name, name); + lg::debug("[Begin Loading DGO RPC] {}, 0x{:x}, 0x{:x}, 0x{:x}", name, buffer1.offset, + buffer2.offset, currentHeap.offset); + // this RPC will return once we have loaded the first object file. + // but we call async, so we don't block here. + RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_FNO, true, mess, sizeof(RPC_Dgo_Cmd), mess, + sizeof(RPC_Dgo_Cmd)); + sLastMsg = mess; +} + +/*! + * Get the next object in the DGO. Will block until something is loaded. + * @param lastObjectFlag: will get set to 1 if this is the last object. + * + * DONE, + * MODIFIED : added exception if the sLastMessage isn't set (game just returns null as buffer) + */ +Ptr GetNextDGO(u32* lastObjectFlag) { + *lastObjectFlag = 1; + // Wait for RPC function to respond. This will happen once the first object file is loaded. + RpcSync(DGO_RPC_CHANNEL); + Ptr buffer(0); + if (sLastMsg) { + // if we got a good result, get pointer to object + if ((sLastMsg->status == DGO_RPC_RESULT_MORE) || (sLastMsg->status == DGO_RPC_RESULT_DONE)) { + buffer.offset = + sLastMsg->buffer1; // buffer 1 always contains location of most recently loaded object. + } + + // not the last one, so don't set the flag. + if (sLastMsg->status == DGO_RPC_RESULT_MORE) { + *lastObjectFlag = 0; + } + + // no pending message. + sLastMsg = nullptr; + } else { + // I don't see how this case can happen unless there's a bug. The game does check for this and + // nothing in this case. (maybe from GOAL this can happen?) + printf("last message not set!\n"); // NOTE: this case was not present in Jak Xh + } + return buffer; +} + +/*! + * Instruct the IOP to continue loading the next object. + * Only should be called once it is safe to overwrite the previous. + * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. + * This should be updated after each object file load to make sure the IOP knows the exact location + * of the end of the GOAL heap data. + * + * Unlike jak 1, we update buffer1 and buffer2 here for borrow heap loads. + */ +void ContinueLoadingDGO(Ptr b1, Ptr b2, Ptr heapPtr) { + u32 msgID = sMsgNum; + jakx::RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; + sMsgNum = sMsgNum ^ 1; + sMsg[msgID].status = DGO_RPC_RESULT_INIT; + sMsg[msgID].buffer1 = b1.offset; + sMsg[msgID].buffer2 = b2.offset; + sendBuff->buffer_heap_top = heapPtr.offset; + // the IOP will wait for this RpcCall to continue the DGO state machine. + RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(jakx::RPC_Dgo_Cmd), + sendBuff, sizeof(jakx::RPC_Dgo_Cmd)); + // this async RPC call will complete when the next object is fully loaded. + sLastMsg = sendBuff; +} +/*! + * Load and link a DGO file. + * This does not use the mutli-threaded linker and will block until the entire file is done. + */ +void load_and_link_dgo(u64 name_gstr, u64 heap_info, u64 flag, u64 buffer_size) { + auto name = Ptr(name_gstr + 4).c(); + auto heap = Ptr(heap_info); + load_and_link_dgo_from_c(name, heap, flag, buffer_size, false); +} + +/*! + * Load and link a DGO file. + * This does not use the mutli-threaded linker and will block until the entire file is done.e + */ +void load_and_link_dgo_from_c(const char* name, + Ptr heap, + u32 linkFlag, + s32 bufferSize, + bool jump_from_c_to_goal) { + Timer timer; + lg::debug("[Load and Link DGO From C] {}", name); + + // remember where the heap top point is so we can clear temporary allocations + auto oldHeapTop = heap->top; + + // allocate temporary buffers from top of the given heap + // align 64 for IOP DMA + // note: both buffers named dgo-buffer-2 + auto buffer2 = kmalloc(heap, bufferSize, KMALLOC_TOP | KMALLOC_ALIGN_64, "dgo-buffer-2"); + auto buffer1 = kmalloc(heap, bufferSize, KMALLOC_TOP | KMALLOC_ALIGN_64, "dgo-buffer-2"); + + // build filename. If no extension is given, default to CGO. + char fileName[16]; + kstrcpyup(fileName, name); // FIXME: Similar decompilation to Jak 3, yet I don't understand how + // it's functionally the same + if (fileName[strlen(fileName) - 4] != '.') { + strcat(fileName, ".CGO"); + } + + // no stall messages, as this is a blocking load and when spending 100% CPU time on linking, + // the linker can beat the DVD drive. + // + // TODO - jakx + // bool oldShowStall = setStallMsg_GW(false); + + // if (!POWERING_OFF_W) { + // // start load on IOP. + // BeginLoadingDGO( + // fileName, buffer1, buffer2, + // Ptr((heap->current + 0x3f).offset & 0xffffffc0)); // 64-byte aligned for IOP DMA + + // u32 lastObjectLoaded = 0; + // while (!lastObjectLoaded && !POWERING_OFF_W) { + // // check to see if next object is loaded (I believe it always is?) + // auto dgoObj = GetNextDGO(&lastObjectLoaded); + // if (!dgoObj.offset) { + // continue; + // } + + // // if we're on the last object, it is loaded at cheap->current. So we can safely reset the + // // two dgo-buffer allocations. We do this _before_ we link! This way, the last file loaded + // has + // // more heap available, which is important when we need to use the entire memory. + // if (lastObjectLoaded) { + // heap->top = oldHeapTop; + // } + + // // FIXME: possibly enable this function call + // // FUN_0027cc90_patch(dgoObj, bufferSize); + + // // determine the size and name of the object we got + // auto obj = dgoObj + 0x40; // seek past dgo object header + // u32 objSize = *(dgoObj.cast()); // size from object's link block + + // char objName[64]; + // strcpy(objName, (dgoObj + 4).cast().c()); // name from dgo object header + // lg::debug("[link and exec] {:18s} {} {:6d} heap-use {:8d} {:8d}: 0x{:x}", objName, + // lastObjectLoaded, objSize, kheapused(kglobalheap), + // kdebugheap.offset ? kheapused(kdebugheap) : 0, kglobalheap->current.offset); + // { + // auto p = scoped_prof(fmt::format("link-{}", objName).c_str()); + // link_and_exec(obj, objName, objSize, heap, linkFlag, jump_from_c_to_goal); // link now! + // } + + // // inform IOP we are done + // if (lastObjectLoaded) { + // break; + // } + // if (POWERING_OFF_W == false) { + // ContinueLoadingDGO(buffer1, buffer2, Ptr((heap->current + 0x3f).offset & 0xffffffc0)); + // } + // } + //} + + // lg::info("load_and_link_dgo_from_c took {:.3f} s\n", timer.getSeconds()); + // if (!POWERING_OFF_W) { + // setStallMsg_GW(oldShowStall); + // } else { + // KernelShutdown(3); + // ShutdownMachine(3); + // Msg(6, "load_and_link_dgo_from_c: cannot continue; load aborted\n"); + // while (true) { + // ; /* WARNING: Do nothing block with infinite loop */ + // } + // } +} + +} // namespace jakx diff --git a/game/kernel/jakx/kdgo.h b/game/kernel/jakx/kdgo.h new file mode 100644 index 0000000000..ef1b502b5f --- /dev/null +++ b/game/kernel/jakx/kdgo.h @@ -0,0 +1,20 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/kernel/common/Ptr.h" +#include "game/kernel/common/kmalloc.h" + +namespace jakx { +void load_and_link_dgo_from_c(const char* name, + Ptr heap, + u32 linkFlag, + s32 bufferSize, + bool jump_from_c_to_goal); +void load_and_link_dgo(u64 name_gstr, u64 heap_info, u64 flag, u64 buffer_size); +void load_and_link_dgo_from_c_fast(const char* name, + Ptr heap, + u32 linkFlag, + s32 bufferSize); +void kdgo_init_globals(); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/kdsnetm.cpp b/game/kernel/jakx/kdsnetm.cpp new file mode 100644 index 0000000000..529874a3f6 --- /dev/null +++ b/game/kernel/jakx/kdsnetm.cpp @@ -0,0 +1,3 @@ + + +#include "kdsnetm.h" diff --git a/game/kernel/jakx/kdsnetm.h b/game/kernel/jakx/kdsnetm.h new file mode 100644 index 0000000000..0d2e1c062d --- /dev/null +++ b/game/kernel/jakx/kdsnetm.h @@ -0,0 +1,3 @@ +#pragma once + +namespace jakx {} \ No newline at end of file diff --git a/game/kernel/jakx/klink.cpp b/game/kernel/jakx/klink.cpp new file mode 100644 index 0000000000..2490a0bb5a --- /dev/null +++ b/game/kernel/jakx/klink.cpp @@ -0,0 +1,1089 @@ +#include "klink.h" + +#include "common/common_types.h" +#include "common/goal_constants.h" +#include "common/symbols.h" + +#include "game/kernel/common/fileio.h" +#include "game/kernel/common/klink.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/common/memory_layout.h" +#include "game/kernel/jakx/kmalloc.h" +#include "game/kernel/jakx/kscheme.h" +#include "game/mips2c/mips2c_table.h" + +#include "fmt/format.h" + +namespace { +bool is_opengoal_object(void* data) { + u32 first_word; + memcpy(&first_word, data, 4); + return first_word != 0 && first_word != UINT32_MAX; +} +constexpr bool link_debug_printfs = false; +} // namespace + +void link_control::jakx_begin(Ptr object_file, + const char* name, + int32_t size, + Ptr heap, + uint32_t flags) { + if (is_opengoal_object(object_file.c())) { + m_opengoal = true; + // save data from call to begin + m_object_data = object_file; + kstrcpy(m_object_name, name); + m_object_size = size; + m_heap = heap; + m_flags = flags; + + // initialize link control + m_entry.offset = 0; + m_heap_top = m_heap->top; + m_keep_debug = false; + m_opengoal = true; + m_busy = true; + + if (link_debug_printfs) { + char* goal_name = object_file.cast().c(); + printf("link %s\n", m_object_name); + printf("link_control::begin %c%c%c%c\n", goal_name[0], goal_name[1], goal_name[2], + goal_name[3]); + } + + // points to the beginning of the linking data + m_link_block_ptr = object_file + BASIC_OFFSET; + m_code_size = 0; + m_code_start = object_file; + m_state = 0; + m_segment_process = 0; + + ObjectFileHeader* ofh = m_link_block_ptr.cast().c(); + if (ofh->goal_version_major != versions::GOAL_VERSION_MAJOR) { + fprintf( + stderr, + "VERSION ERROR: C Kernel built from GOAL %d.%d, but object file %s is from GOAL %d.%d\n", + versions::GOAL_VERSION_MAJOR, versions::GOAL_VERSION_MINOR, name, ofh->goal_version_major, + ofh->goal_version_minor); + ASSERT(false); + } + if (link_debug_printfs) { + printf("Object file header:\n"); + printf(" GOAL ver %d.%d obj %d len %d\n", ofh->goal_version_major, ofh->goal_version_minor, + ofh->object_file_version, ofh->link_block_length); + printf(" segment count %d\n", ofh->segment_count); + for (int i = 0; i < N_SEG; i++) { + printf(" seg %d link 0x%04x, 0x%04x data 0x%04x, 0x%04x\n", i, ofh->link_infos[i].offset, + ofh->link_infos[i].size, ofh->code_infos[i].offset, ofh->code_infos[i].size); + } + } + + m_version = ofh->object_file_version; + if (ofh->object_file_version < 4) { + // three segment file + + // seek past the header + m_object_data.offset += ofh->link_block_length; + // todo, set m_code_size + + if (m_link_block_ptr.offset < m_heap->base.offset || + m_link_block_ptr.offset >= m_heap->top.offset) { + // the link block is outside our heap, or in the top of our heap. It's somebody else's + // problem. + if (link_debug_printfs) { + printf("Link block somebody else's problem\n"); + } + + if (m_heap->base.offset <= m_object_data.offset && // above heap base + m_object_data.offset < m_heap->top.offset && // less than heap top (not needed?) + m_object_data.offset < m_heap->current.offset) { // less than heap current + if (link_debug_printfs) { + printf("Code block in the heap, kicking it out for copy into heap\n"); + } + m_heap->current = m_object_data; + } + } else { + // in our heap, we need to move it so we can free up its space later on + if (link_debug_printfs) { + printf("Link block needs to be moved!\n"); + } + + // allocate space for a new one + auto new_link_block = kmalloc(m_heap, ofh->link_block_length, KMALLOC_TOP, "link-block"); + auto old_link_block = m_link_block_ptr - BASIC_OFFSET; + + // copy it (was ultimate memcpy, but just use normal one to make it easier) + memmove(new_link_block.c(), old_link_block.c(), ofh->link_block_length); + m_link_block_ptr = new_link_block + BASIC_OFFSET; + + // if we can save some memory here + if (old_link_block.offset < m_heap->current.offset) { + if (link_debug_printfs) { + printf("Kick out old link block\n"); + } + m_heap->current = old_link_block; + } + } + } else { + ASSERT_MSG(false, "UNHANDLED OBJECT FILE VERSION"); + } + + if ((m_flags & LINK_FLAG_FORCE_DEBUG) && MasterDebug && !DiskBoot) { + m_keep_debug = true; + } + } else { + m_opengoal = false; + if (heap == kglobalheap) { + jakx::kmemopen_from_c(heap, name); + m_on_global_heap = true; + } else { + m_on_global_heap = false; + } + m_object_data = object_file; + kstrcpy(this->m_object_name, name); + m_object_size = size; + // l_hdr = (LinkHdrWithType*)this->m_object_data; + LinkHeaderV5* l_hdr = (LinkHeaderV5*)m_object_data.c(); + m_flags = flags; + u16 version = l_hdr->core.version; + + if (version == 4 || version == 2) { + // it's a v4 produced by opengoal... lets just try using jak2's linker + m_version = version; + printf("got version 4, falling back to jak1/jak2\n"); + jak1_jak2_begin(object_file, name, size, heap, flags); + return; + } + ASSERT(version == 5); + m_heap_top = heap->top; + // this->unk_init1 = 1; TODO + m_busy = true; + m_heap = heap; + m_entry.offset = 0; + m_keep_debug = false; + m_link_hdr = &l_hdr->core; // m_hdr_ptr + m_code_size = 0; + // this->m_ptr_2 = l_hdr; just used for cache flush, so skip it! not really the right thing?? + m_state = 0; + m_segment_process = 0; + m_moved_link_block = 0; + if (version == 4) { + ASSERT_NOT_REACHED(); + } else { + m_object_data.offset = object_file.offset + l_hdr->core.length_to_get_to_code; + if (version == 5) { + static_assert(0x50 == sizeof(LinkHeaderV5)); + size = (size - l_hdr->core.link_length) - sizeof(LinkHeaderV5); + } else { + ASSERT_NOT_REACHED(); + } + m_code_size = size; + if ((u8*)m_link_hdr < m_heap->base.c() || (u8*)m_link_hdr >= m_heap->top.c()) { + // the link block is outside our heap, or in the allocated top part. + // so we ignore it, and leave it as somebody else's problem. + + // let's try to move the code part: + if (m_heap->base.offset <= m_object_data.offset && // above heap base + m_object_data.offset < m_heap->top.offset && // less than heap top (not needed?) + m_object_data.offset < m_heap->current.offset) { // less than heap current + if (link_debug_printfs) { + printf("Code block in the heap, kicking it out for copy into heap\n"); + } + m_heap->current = m_object_data; + } + } else { + // the link block is in the heap. This is problematic because we don't want to hang + // on to this long term, but executing the top-level may allocate on this heap, causing + // stuff to get added after the hole left by the link data. + // So, we make a temporary allocation on the top and move it there. + + m_moved_link_block = true; + Ptr new_link_block_mem; + u8* link_block_move_dst; + u8* old_link_block; + u32 link_block_move_size; + + if (m_link_hdr->version == 5) { + // the link block is inside our heap, but we'd like to avoid this. + // we'll copy the link block, and the header to the temporary part of our heap: + + // where we loaded the link data: + auto offset_to_link_data = m_link_hdr->length_to_get_to_link; + + // allocate memory for link data, and header (pvVar5) + new_link_block_mem = kmalloc(m_heap, m_link_hdr->link_length + sizeof(LinkHeaderV5), + KMALLOC_TOP, "link-block"); + + // we'll place the header and link block back to back in the newly alloated block, + // so patch up the offset for this new layout before copying + m_link_hdr->length_to_get_to_link = sizeof(LinkHeaderV5); + + // move header! + memmove(new_link_block_mem.c(), object_file.c(), sizeof(LinkHeaderV5)); + + // dst: pvVar6 + link_block_move_dst = new_link_block_mem.c() + sizeof(LinkHeaderV5); + + // move link data! (pcVar8) + old_link_block = object_file.c() + offset_to_link_data; + + link_block_move_size = m_link_hdr->link_length; + } else { + // hm, maybe only possible with version 2 or 3?? + ASSERT_NOT_REACHED(); + } + + memmove(link_block_move_dst, old_link_block, link_block_move_size); + + // update our pointer to the link header core. + m_link_hdr = &((LinkHeaderV5*)new_link_block_mem.c())->core; + + // scary: update the heap to kick out all the link data (and likely the actual data too). + // we'll be relying on the linking process to copy the data as needed.l + if (old_link_block < m_heap->current.c()) { + if (link_debug_printfs) { + printf("Kick out old link block\n"); + } + m_heap->current.offset = old_link_block - g_ee_main_mem; + } + } + } + if ((m_flags & LINK_FLAG_FORCE_DEBUG) && MasterDebug && !DiskBoot) { + m_keep_debug = true; + } + // hack: + m_version = m_link_hdr->version; + } +} + +uint32_t link_control::jakx_work() { + auto old_debug_segment = DebugSegment; + if (m_keep_debug) { + DebugSegment = s7.offset + true_symbol_offset(g_game_version); + } + + // set type tag of link block + + uint32_t rv; + + if (m_version == 3) { + ASSERT(m_opengoal); + *((m_link_block_ptr - 4).cast()) = + *((s7 + jakx_symbols::FIX_SYM_LINK_BLOCK - 1).cast()); + rv = jakx_work_opengoal(); + } else if (m_version == 5) { + ASSERT(!m_opengoal); + *(u32*)(((u8*)m_link_hdr) - 4) = *((s7 + jakx_symbols::FIX_SYM_LINK_BLOCK - 1).cast()); + rv = jakx_work_v5(); + } else if (m_version == 4 || m_version == 2) { + // Note: this is a bit of a hack. Jak 3 doesn't support v2/v4. But, OpenGOAL generates data + // objects in this format. We will just try reusing the jak 2 v2/v4 linker here and see if it + // works. See corresponding call to jak1_jak2_begin in begin. + rv = jakx_work_v2_v4(); + } else { + ASSERT_MSG(false, fmt::format("UNHANDLED OBJECT FILE VERSION {} IN WORK!", m_version)); + return 0; + } + + DebugSegment = old_debug_segment; + return rv; +} + +namespace jakx { +void ultimate_memcpy(void* dst, void* src, uint32_t size); +} + +uint32_t link_control::jakx_work_v5() { + if (m_state == 0) { + // here, we change length_to_get_to_link to an actual pointer to the link table. + // since we need 32-bits, we'll store offset from g_ee_mem. + u8* link_data = ((u8*)m_link_hdr) - 4 + m_link_hdr->length_to_get_to_link; + m_link_hdr->length_to_get_to_link = link_data - g_ee_main_mem; + + m_n_segments = m_link_hdr->n_segments; + + // the link segments table is just at the start of the link data: + m_link_segments_table = (SegmentInfoV5*)link_data; + /* + for (int i = 0; i < m_n_segments; i++) { + printf(" %d: reloc %d, data %d, size %d, magic %d\n", i, m_link_segments_table[i].relocs, + m_link_segments_table[i].data, m_link_segments_table[i].size, + m_link_segments_table[i].magic); + } + */ + // for now, only supporting 1 segment + ASSERT(m_n_segments == 1); + + // fixup the relocs/data offsets into addresses (again, offsets from g_ee_main_mem) + // relocs is relative to this link data + m_link_segments_table[0].relocs += (link_data - g_ee_main_mem); + // data is relative to usual object_data + m_link_segments_table[0].data += m_object_data.offset; + ASSERT(m_link_segments_table[0].magic == 1); + + // see if there's even data + if (m_link_segments_table[0].size == 0) { + // no data. + m_link_segments_table[0].data = 0; + } else { + // check if we need to move the main segment. + if (!m_moved_link_block || + ((m_link_hdr->link_length + 0x50) <= m_link_hdr->length_to_get_to_code)) { + // printf(" v5 linker allocating for main segment... (%d)\n", m_moved_link_block); + auto old_data_offset = m_link_segments_table[0].data; // 25 + auto new_data = kmalloc(m_heap, m_link_segments_table[0].size, 0, "main-segment"); + m_link_segments_table[0].data = new_data.offset; + if (!new_data.offset) { + MsgErr("dkernel: unable to malloc %d bytes for main-segment\n", + m_link_segments_table[0].size); + return 1; + } + jakx::ultimate_memcpy(new_data.c(), old_data_offset + g_ee_main_mem, + m_link_segments_table[0].size); + } else { + m_heap->current = m_object_data + m_code_size; + if (m_heap->top.offset <= m_heap->current.offset) { + MsgErr("dkernel: heap overflow\n"); + return 1; + } + } + } + + m_segment_process = 0; + m_state = 1; + m_object_data.offset = m_link_segments_table[0].data; + + Ptr base_ptr(m_link_segments_table[0].data); + Ptr data_ptr = base_ptr - 4; + Ptr link_ptr(m_link_segments_table[0].relocs); + + bool fixing = false; + if (*link_ptr) { + // we have pointers + while (true) { + while (true) { + if (!fixing) { + // seeking + data_ptr.offset += 4 * (*link_ptr); + } else { + // fixing. + for (uint32_t i = 0; i < *link_ptr; i++) { + // uint32_t old_code = *(const uint32_t*)(&data.at(data_ptr)); + u32 old_code = *data_ptr.cast(); + if ((old_code >> 24) == 0) { + // printf("modifying pointer at 0x%x (old 0x%x) : now ", data_ptr.offset, + // *data_ptr.cast()); + *data_ptr.cast() += base_ptr.offset; + // printf("0x%x\n", *data_ptr.cast()); + } else { + ASSERT_NOT_REACHED(); + /* + f.stats.v3_split_pointers++; + auto dest_seg = (old_code >> 8) & 0xf; + auto lo_hi_offset = (old_code >> 12) & 0xf; + ASSERT(lo_hi_offset); + ASSERT(dest_seg < 3); + auto offset_upper = old_code & 0xff; + uint32_t low_code = *(const uint32_t*)(&data.at(data_ptr + 4 * lo_hi_offset)); + uint32_t offset = low_code & 0xffff; + if (offset_upper) { + offset += (offset_upper << 16); + } + f.pointer_link_split_word(seg_id, data_ptr - base_ptr, + data_ptr + 4 * lo_hi_offset - base_ptr, dest_seg, offset); + */ + } + data_ptr.offset += 4; + } + } + + if (*link_ptr != 0xff) + break; + link_ptr.offset++; + if (*link_ptr == 0) { + link_ptr.offset++; + fixing = !fixing; + } + } + + link_ptr.offset++; + fixing = !fixing; + if (*link_ptr == 0) + break; + } + } + link_ptr.offset++; + + // symbol linking. + if (*link_ptr) { + auto sub_link_ptr = link_ptr; + + while (true) { + auto reloc = *sub_link_ptr; + auto next_link_ptr = sub_link_ptr + 1; + link_ptr = next_link_ptr; + + if ((reloc & 0x80) == 0) { + link_ptr = sub_link_ptr + 3; // + const char* sname = link_ptr.cast().c(); + link_ptr.offset += strlen(sname) + 1; + // printf("linking symbol %s\n", sname); + auto goalObj = jakx::intern_from_c(-1, 0, sname); + link_ptr = c_symlink2(m_object_data, goalObj.cast(), link_ptr); + + } else if ((reloc & 0x3f) == 0x3f) { + ASSERT(false); // todo, does this ever get hit? + } else { + int n_methods_base = reloc & 0x3f; + int n_methods = n_methods_base * 4; + if (n_methods_base) { + n_methods += 3; + } + link_ptr.offset += + 2; // ghidra misses some aliasing here and would have you think this is +1! + const char* sname = link_ptr.cast().c(); + // printf("linking type %s\n", sname); + link_ptr.offset += strlen(sname) + 1; + auto goalObj = jakx::intern_type_from_c(-1, 0, sname, n_methods); + link_ptr = c_symlink2(m_object_data, goalObj.cast(), link_ptr); + } + + sub_link_ptr = link_ptr; + if (!*sub_link_ptr) + break; + } + } + m_entry = m_object_data + 4; + return 1; + } else { + ASSERT_NOT_REACHED(); + } +} + +namespace { +/*! + * Link a single relative offset (used for RIP) + */ +uint32_t cross_seg_dist_link_v3(Ptr link, + ObjectFileHeader* ofh, + int current_seg, + int size) { + // target seg, dist into mine, dist into target, patch loc in mine + uint8_t target_seg = *link; + ASSERT(target_seg < ofh->segment_count); + + uint32_t* link_data = (link + 1).cast().c(); + int32_t mine = link_data[0] + ofh->code_infos[current_seg].offset; + int32_t tgt = link_data[1] + ofh->code_infos[target_seg].offset; + int32_t diff = tgt - mine; + uint32_t offset_of_patch = link_data[2] + ofh->code_infos[current_seg].offset; + + // second debug segment case added for jak 2. + if (!ofh->code_infos[target_seg].offset || (!DebugSegment && target_seg == DEBUG_SEGMENT)) { + // we want to address GOAL 0. In the case where this is a rip-relative load or store, this + // will crash, which is what we want. If it's an lea and just getting an address, this will get + // us a nullptr. If you do a method-set! with a null pointer it does nothing, so it's safe to + // method-set! to things that are in unloaded segments and it'll just keep the old method. + diff = -mine; + } + // printf("link object in seg %d diff %d at %d (%d + %d)\n", target_seg, diff, offset_of_patch, + // link_data[2], ofh->code_infos[current_seg].offset); + + // both 32-bit and 64-bit pointer links are supported, though 64-bit ones are no longer in use. + // we still support it just in case we want to run ancient code. + if (size == 4) { + *Ptr(offset_of_patch).c() = diff; + } else if (size == 8) { + *Ptr(offset_of_patch).c() = diff; + } else { + ASSERT(false); + } + + return 1 + 3 * 4; +} + +uint32_t ptr_link_v3(Ptr link, ObjectFileHeader* ofh, int current_seg) { + auto* link_data = link.cast().c(); + u32 patch_loc = link_data[0] + ofh->code_infos[current_seg].offset; + u32 patch_value = link_data[1] + ofh->code_infos[current_seg].offset; + *Ptr(patch_loc).c() = patch_value; + return 8; +} + +/*! + * Link type pointers for a single type in "v3 equivalent" link data + * Returns a pointer to the link table data after the typelinking data. + */ +uint32_t typelink_v3(Ptr link, Ptr data) { + // get the name of the type + uint32_t seek = 0; + char sym_name[256]; + while (link.c()[seek]) { + sym_name[seek] = link.c()[seek]; + seek++; + ASSERT(seek < 256); + } + sym_name[seek] = 0; + seek++; + + // determine the number of methods + uint32_t method_count = link.c()[seek++]; + // jak2 special + method_count *= 4; + if (method_count) { + method_count += 3; + } + + // intern the GOAL type, creating the vtable if it doesn't exist. + auto type_ptr = jakx::intern_type_from_c(-1, 0, sym_name, method_count); + + // prepare to read the locations of the type pointers + Ptr offsets = link.cast() + seek; + uint32_t offset_count = *offsets; + offsets = offsets + 4; + seek += 4; + + // write the type pointers into memory + for (uint32_t i = 0; i < offset_count; i++) { + *(data + offsets.c()[i]).cast() = type_ptr.offset; + seek += 4; + } + + return seek; +} +/*! + * Link symbols (both offsets and pointers) in "v3 equivalent" link data. + * Returns a pointer to the link table data after the linking data for this symbol. + */ +uint32_t symlink_v3(Ptr link, Ptr data) { + // get the symbol name + uint32_t seek = 0; + char sym_name[256]; + while (link.c()[seek]) { + sym_name[seek] = link.c()[seek]; + seek++; + ASSERT(seek < 256); + } + sym_name[seek] = 0; + seek++; + + // intern + auto sym = jakx::intern_from_c(-1, 0, sym_name); + int32_t sym_offset = sym.cast() - s7; + uint32_t sym_addr = sym.cast().offset; + + // prepare to read locations of symbol links + Ptr offsets = link.cast() + seek; + uint32_t offset_count = *offsets; + offsets = offsets + 4; + seek += 4; + + for (uint32_t i = 0; i < offset_count; i++) { + uint32_t offset = offsets.c()[i]; + seek += 4; + auto data_ptr = (data + offset).cast(); + + if (*data_ptr == -1) { + // a "-1" indicates that we should store the address. + *(data + offset).cast() = sym_addr; + } else if (*(data_ptr.cast()) == LINK_SYM_NO_OFFSET_FLAG) { + *(data + offset).cast() = sym_offset - 1; + } else { + // otherwise store the offset to st. + *(data + offset).cast() = sym_offset; + } + } + + return seek; +} +} // namespace + +uint32_t link_control::jakx_work_opengoal() { + // note: I'm assuming that the allocation we used in jak2/jak1 will still work here. Once work_v5 + // is done, we could revisit this. + ObjectFileHeader* ofh = m_link_block_ptr.cast().c(); + if (m_state == 0) { + // state 0 <- copying data. + // the actual game does all copying in one shot. I assume this is ok because v3 files are just + // code and always small. Large data which takes too long to copy should use v2. + + // loop over segments + for (s32 seg_id = ofh->segment_count - 1; seg_id >= 0; seg_id--) { + // link the infos + ofh->link_infos[seg_id].offset += m_link_block_ptr.offset; + ofh->code_infos[seg_id].offset += m_object_data.offset; + + if (seg_id == DEBUG_SEGMENT) { + if (!DebugSegment) { + // clear code info if we aren't going to copy the debug segment. + ofh->code_infos[seg_id].offset = 0; + ofh->code_infos[seg_id].size = 0; + } else { + if (ofh->code_infos[seg_id].size == 0) { + // not actually present + ofh->code_infos[seg_id].offset = 0; + } else { + Ptr src(ofh->code_infos[seg_id].offset); + ofh->code_infos[seg_id].offset = + kmalloc(kdebugheap, ofh->code_infos[seg_id].size, 0, "debug-segment").offset; + if (ofh->code_infos[seg_id].offset == 0) { + MsgErr("dkernel: unable to malloc %d bytes for debug-segment\n", + ofh->code_infos[seg_id].size); + return 1; + } + memmove(Ptr(ofh->code_infos[seg_id].offset).c(), src.c(), + ofh->code_infos[seg_id].size); + } + } + } else if (seg_id == MAIN_SEGMENT) { + if (ofh->code_infos[seg_id].size == 0) { + ofh->code_infos[seg_id].offset = 0; + } else { + Ptr src(ofh->code_infos[seg_id].offset); + ofh->code_infos[seg_id].offset = + kmalloc(m_heap, ofh->code_infos[seg_id].size, 0, "main-segment").offset; + if (ofh->code_infos[seg_id].offset == 0) { + MsgErr("dkernel: unable to malloc %d bytes for main-segment\n", + ofh->code_infos[seg_id].size); + return 1; + } + memmove(Ptr(ofh->code_infos[seg_id].offset).c(), src.c(), + ofh->code_infos[seg_id].size); + } + } else if (seg_id == TOP_LEVEL_SEGMENT) { + if (ofh->code_infos[seg_id].size == 0) { + ofh->code_infos[seg_id].offset = 0; + } else { + Ptr src(ofh->code_infos[seg_id].offset); + ofh->code_infos[seg_id].offset = + kmalloc(m_heap, ofh->code_infos[seg_id].size, KMALLOC_TOP, "top-level-segment") + .offset; + if (ofh->code_infos[seg_id].offset == 0) { + MsgErr("dkernel: unable to malloc %d bytes for top-level-segment\n", + ofh->code_infos[seg_id].size); + return 1; + } + memmove(Ptr(ofh->code_infos[seg_id].offset).c(), src.c(), + ofh->code_infos[seg_id].size); + } + } else { + printf("UNHANDLED SEG ID IN WORK V3 STATE 1\n"); + } + } + + m_state = 1; + m_segment_process = 0; + return 0; + } else if (m_state == 1) { + // state 1: linking. For now all links are done at once. This is probably going to be fine on a + // modern computer. But the game broke this into multiple steps. + if (m_segment_process < ofh->segment_count) { + if (ofh->code_infos[m_segment_process].offset) { + Ptr lp(ofh->link_infos[m_segment_process].offset); + + while (*lp) { + switch (*lp) { + case LINK_TABLE_END: + break; + case LINK_SYMBOL_OFFSET: + lp = lp + 1; + lp = lp + symlink_v3(lp, Ptr(ofh->code_infos[m_segment_process].offset)); + break; + case LINK_TYPE_PTR: + lp = lp + 1; // seek past id + lp = lp + typelink_v3(lp, Ptr(ofh->code_infos[m_segment_process].offset)); + break; + case LINK_DISTANCE_TO_OTHER_SEG_64: + lp = lp + 1; + lp = lp + cross_seg_dist_link_v3(lp, ofh, m_segment_process, 8); + break; + case LINK_DISTANCE_TO_OTHER_SEG_32: + lp = lp + 1; + lp = lp + cross_seg_dist_link_v3(lp, ofh, m_segment_process, 4); + break; + case LINK_PTR: + lp = lp + 1; + lp = lp + ptr_link_v3(lp, ofh, m_segment_process); + break; + default: + ASSERT_MSG(false, fmt::format("unknown link table thing {}", *lp)); + break; + } + } + } + + m_segment_process++; + } else { + // all done, can set the entry point to the top-level. + m_entry = Ptr(ofh->code_infos[TOP_LEVEL_SEGMENT].offset) + 4; + return 1; + } + + return 0; + } + + else { + printf("WORK v3 INVALID STATE\n"); + return 1; + } +} + +void link_control::jakx_finish(bool jump_from_c_to_goal) { + // CacheFlush(this->m_ptr_2, this->m_code_size); + auto old_debug_segment = DebugSegment; + if (m_keep_debug) { + // note - this probably doesn't work because DebugSegment isn't *debug-segment*. + DebugSegment = s7.offset + jakx_symbols::FIX_SYM_TRUE; + } + if (m_flags & LINK_FLAG_FORCE_FAST_LINK) { + FastLink = 1; + } + + *EnableMethodSet = *EnableMethodSet + m_keep_debug; + + // printf("finish %s\n", m_object_name); + if (m_opengoal) { + // setup mips2c functions + const auto& it = Mips2C::gMips2CLinkCallbacks[GameVersion::JakX].find(m_object_name); + if (it != Mips2C::gMips2CLinkCallbacks[GameVersion::JakX].end()) { + for (auto& x : it->second) { + x(); + } + } + + // execute top level! + if (m_entry.offset && (m_flags & LINK_FLAG_EXECUTE)) { + if (jump_from_c_to_goal) { + u64 goal_stack = u64(g_ee_main_mem) + EE_MAIN_MEM_SIZE - 8; + call_goal_on_stack(m_entry.cast(), goal_stack, s7.offset, g_ee_main_mem); + } else { + call_goal(m_entry.cast(), 0, 0, 0, s7.offset, g_ee_main_mem); + } + } + + // inform compiler that we loaded. + if (m_flags & LINK_FLAG_OUTPUT_LOAD) { + output_segment_load(m_object_name, m_link_block_ptr, m_flags); + } + } else { + if (m_flags & LINK_FLAG_EXECUTE) { + auto entry = m_entry; + auto name = basename_goal(m_object_name); + strcpy(Ptr(LINK_CONTROL_NAME_ADDR).c(), name); + // printf(" about to call... (0x%x)\n", entry.offset); + Ptr type(*((entry - 4).cast())); + // printf(" type is %s\n", jakx::sym_to_cstring(type->symbol)); + jakx::call_method_of_type_arg2(entry.offset, type, GOAL_RELOC_METHOD, m_heap.offset, + Ptr(LINK_CONTROL_NAME_ADDR).offset); + // printf(" done with call!\n"); + } + } + + *EnableMethodSet = *EnableMethodSet - this->m_keep_debug; + FastLink = 0; + m_heap->top = m_heap_top; + DebugSegment = old_debug_segment; + + m_busy = false; + if (m_on_global_heap) { + jakx::kmemclose(); + } + return; +} + +namespace jakx { + +Ptr link_and_exec(Ptr data, + const char* name, + int32_t size, + Ptr heap, + uint32_t flags, + bool jump_from_c_to_goal) { + if (link_busy()) { + printf("-------------> saved link is busy\n"); + // probably won't end well... + } + link_control lc; + lc.jakx_begin(data, name, size, heap, flags); + uint32_t done; + do { + done = lc.jakx_work(); + } while (!done); + lc.jakx_finish(jump_from_c_to_goal); + return lc.m_entry; +} + +u64 link_and_exec_wrapper(u64* args) { + return link_and_exec(Ptr(args[0]), Ptr(args[1]).c(), args[2], Ptr(args[3]), + args[4], false) + .offset; +} + +u32 link_busy() { + return saved_link_control.m_busy; +} +void link_reset() { + saved_link_control.m_busy = 0; +} +uint64_t link_begin(u64* args) { + saved_link_control.jakx_begin(Ptr(args[0]), Ptr(args[1]).c(), args[2], + Ptr(args[3]), args[4]); + auto work_result = saved_link_control.jakx_work(); + // if we managed to finish in one shot, take care of calling finish + if (work_result) { + // called from goal + saved_link_control.jakx_finish(false); + } + return work_result != 0; +} +uint64_t link_resume() { + auto work_result = saved_link_control.jakx_work(); + if (work_result) { + // called from goal + saved_link_control.jakx_finish(false); + } + return work_result != 0; +} + +// Note: update_goal_fns changed to skip the hashtable lookup since symlink2/symlink3 are now fixed +// symbols. + +/*! + * The ULTIMATE MEMORY COPY + * IT IS VERY FAST + * but it may use the scratchpad. It is implemented in GOAL, and falls back to normal C memcpy + * if GOAL isn't loaded, or if the alignment isn't good enough. + */ +void ultimate_memcpy(void* dst, void* src, uint32_t size) { + // only possible if alignment is good. + if (!(u64(dst) & 0xf) && !(u64(src) & 0xf) && !(u64(size) & 0xf) && size > 0xfff) { + if (!gfunc_774.offset) { + // GOAL function is unknown, lets see if its loaded: + auto sym_val = *((s7 + jakx_symbols::FIX_SYM_ULTIMATE_MEMCPY - 1).cast()); + if (sym_val == 0) { + memmove(dst, src, size); + return; + } + gfunc_774.offset = sym_val; + } + + Ptr(call_goal(gfunc_774, make_u8_ptr(dst).offset, make_u8_ptr(src).offset, size, s7.offset, + g_ee_main_mem)) + .c(); + } else { + memmove(dst, src, size); + } +} + +} // namespace jakx + +#define LINK_V2_STATE_INIT_COPY 0 +#define LINK_V2_STATE_OFFSETS 1 +#define LINK_V2_STATE_SYMBOL_TABLE 2 +#define OBJ_V2_CLOSE_ENOUGH 0x90 +#define OBJ_V2_MAX_TRANSFER 0x80000 + +uint32_t link_control::jakx_work_v2_v4() { + // u32 startCycle = kernel.read_clock(); todo + + if (m_state == LINK_V2_STATE_INIT_COPY) { // initialization and copying to heap + // we move the data segment to eliminate gaps + // very small gaps can be tolerated, as it is not worth the time penalty to move large objects + // many bytes. if this requires copying a large amount of data, we will do it in smaller chunks, + // allowing the copy to be spread over multiple game frames + + // state initialization + if (m_segment_process == 0) { + m_heap_gap = + m_object_data - m_heap->current; // distance between end of heap and start of object + } + + if (m_heap_gap < + OBJ_V2_CLOSE_ENOUGH) { // close enough, don't relocate the object, just expand the heap + if (link_debug_printfs) { + printf("[work_v2] close enough, not moving\n"); + } + m_heap->current = m_object_data + m_code_size; + if (m_heap->top.offset <= m_heap->current.offset) { + MsgErr("dkernel: heap overflow\n"); // game has ~% instead of \n :P + return 1; + } + + // added in jak 2, move the link block to the top of the heap so we can allocate on + // the level heap during linking without overwriting link data. this is used for level types + u32 link_block_size = *m_link_block_ptr.cast(); + auto new_link_block = kmalloc(m_heap, link_block_size, KMALLOC_TOP, "link-block"); + memmove(new_link_block.c(), m_link_block_ptr.c() - 4, link_block_size); + m_link_block_ptr = Ptr(new_link_block.offset + 4); // basic offset + + } else { // not close enough, need to move the object + // on the first run of this state... + if (m_segment_process == 0) { + m_original_object_location = m_object_data; + // allocate on heap, will have no gap + m_object_data = kmalloc(m_heap, m_code_size, 0, "data-segment"); + if (link_debug_printfs) { + printf("[work_v2] moving from 0x%x to 0x%x\n", m_original_object_location.offset, + m_object_data.offset); + } + if (!m_object_data.offset) { + MsgErr("dkernel: unable to malloc %d bytes for data-segment\n", m_code_size); + return 1; + } + } + + // the actual copy + Ptr source = m_original_object_location + m_segment_process; + u32 size = m_code_size - m_segment_process; + + if (size > OBJ_V2_MAX_TRANSFER) { // around .5 MB + jakx::ultimate_memcpy((m_object_data + m_segment_process).c(), source.c(), + OBJ_V2_MAX_TRANSFER); + m_segment_process += OBJ_V2_MAX_TRANSFER; + return 0; // return, don't want to take too long. + } + + // if we have bytes to copy, but they are less than the max transfer, do it in one shot! + if (size) { + jakx::ultimate_memcpy((m_object_data + m_segment_process).c(), source.c(), size); + if (m_segment_process > 0) { // if we did a previous copy, we return now.... + m_state = LINK_V2_STATE_OFFSETS; + m_segment_process = 0; + return 0; + } + } + } + + // otherwise go straight into the next state. + m_state = LINK_V2_STATE_OFFSETS; + m_segment_process = 0; + } + + // init offset phase + if (m_state == LINK_V2_STATE_OFFSETS && m_segment_process == 0) { + m_reloc_ptr = m_link_block_ptr + 8; // seek to link table + if (*m_reloc_ptr == 0) { // do we have pointer links to do? + m_reloc_ptr.offset++; // if not, seek past the \0, and go to next state + m_state = LINK_V2_STATE_SYMBOL_TABLE; + m_segment_process = 0; + } else { + m_base_ptr = m_object_data; // base address for offsetting. + m_loc_ptr = m_object_data; // pointer which seeks thru the code + m_table_toggle = 0; // are we seeking or fixing? + m_segment_process = 1; // we've done first time setup + } + } + + if (m_state == LINK_V2_STATE_OFFSETS) { // pointer fixup + // this state reads through a table. Values alternate between "seek amount" and "number of + // consecutive 4-byte + // words to fix up". The counts are encoded using a variable length encoding scheme. They use + // a very stupid + // method of encoding values which requires O(n) bytes to store the value n. + + // to avoid dropping a frame, we check every 0x400 relocations to see if 0.5 milliseconds have + // elapsed. + u32 relocCounter = 0x400; + while (true) { // loop over entire table + while (true) { // loop over current mode + + // read and seek table + u8 count = *m_reloc_ptr; + m_reloc_ptr.offset++; + + if (!m_table_toggle) { // seek mode + m_loc_ptr.offset += + 4 * + count; // perform seek (MIPS instructions are 4 bytes, so we >> 2 the seek amount) + } else { // offset mode + for (u32 i = 0; i < count; i++) { + if (m_loc_ptr.offset % 4) { + ASSERT(false); + } + u32 code = *(m_loc_ptr.cast()); + code += m_base_ptr.offset; + *(m_loc_ptr.cast()) = code; + m_loc_ptr.offset += 4; + } + } + + if (count != 0xff) { + break; + } + + if (*m_reloc_ptr == 0) { + m_reloc_ptr.offset++; + m_table_toggle = m_table_toggle ^ 1; + } + } + + // reached the end of the tableToggle mode + m_table_toggle = m_table_toggle ^ 1; + if (*m_reloc_ptr == 0) { + break; // end of the state + } + relocCounter--; + if (relocCounter == 0) { + // u32 clock_value = kernel.read_clock(); + // if(clock_value - startCycle > 150000) { // 0.5 milliseconds + // return 0; + // } + relocCounter = 0x400; + } + } + m_reloc_ptr.offset++; + m_state = 2; + m_segment_process = 0; + } + + if (m_state == 2) { // GOAL object fixup + if (*m_reloc_ptr == 0) { + m_state = 3; + m_segment_process = 0; + } else { + while (true) { + u32 relocation = *m_reloc_ptr; + m_reloc_ptr.offset++; + Ptr goalObj; + char* name; + if ((relocation & 0x80) == 0) { + // symbol! + if (relocation > 9) { + m_reloc_ptr.offset--; // no idea what this is. + } + name = m_reloc_ptr.cast().c(); + if (link_debug_printfs) { + printf("[work_v2] symlink: %s\n", name); + } + goalObj = jakx::intern_from_c(-1, 0, name).cast(); + } else { + // type! + u8 nMethods = relocation & 0x7f; + if (nMethods == 0) { + nMethods = 1; + } + name = m_reloc_ptr.cast().c(); + if (link_debug_printfs) { + printf("[work_v2] symlink -type: %s\n", name); + } + goalObj = jakx::intern_type_from_c(-1, 0, name, nMethods).cast(); + } + m_reloc_ptr.offset += strlen(name) + 1; + // DECOMPILER->hookStartSymlinkV3(_state - 1, _objectData, std::string(name)); + m_reloc_ptr = c_symlink2(m_object_data, goalObj, m_reloc_ptr); + // DECOMPILER->hookFinishSymlinkV3(); + if (*m_reloc_ptr == 0) { + break; // done + } + // u32 currentCycle = kernel.read_clock(); + // if(currentCycle - startCycle > 150000) { + // return 0; + // } + } + m_state = 3; + m_segment_process = 0; + } + } + m_entry = m_object_data + 4; + return 1; +} diff --git a/game/kernel/jakx/klink.h b/game/kernel/jakx/klink.h new file mode 100644 index 0000000000..da062d8783 --- /dev/null +++ b/game/kernel/jakx/klink.h @@ -0,0 +1,20 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/kernel/common/Ptr.h" +#include "game/kernel/common/kmalloc.h" + +namespace jakx { +Ptr link_and_exec(Ptr data, + const char* name, + int32_t size, + Ptr heap, + uint32_t flags, + bool jump_from_c_to_goal); +u64 link_and_exec_wrapper(u64* args); +u32 link_busy(); +void link_reset(); +uint64_t link_begin(u64* args); +uint64_t link_resume(); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/klisten.cpp b/game/kernel/jakx/klisten.cpp new file mode 100644 index 0000000000..641cb9bf59 --- /dev/null +++ b/game/kernel/jakx/klisten.cpp @@ -0,0 +1,121 @@ +#include "klisten.h" + +#include "common/symbols.h" + +#include "game/kernel/common/Ptr.h" +#include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/kdsnetm.h" +#include "game/kernel/common/klink.h" +#include "game/kernel/common/klisten.h" +#include "game/kernel/common/kmalloc.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/common/kscheme.h" +#include "game/kernel/jakx/kboot.h" +#include "game/kernel/jakx/klink.h" +#include "game/kernel/jakx/kscheme.h" + +namespace jakx { + +using namespace jakx_symbols; + +Ptr> ListenerLinkBlock; +Ptr> ListenerFunction; +Ptr> KernelFunction; // new in jak2 +Ptr> kernel_dispatcher; +Ptr> kernel_packages; +Ptr> sync_dispatcher; + +void klisten_init_globals() { + ListenerLinkBlock.offset = 0; + ListenerFunction.offset = 0; + KernelFunction.offset = 0; + kernel_dispatcher.offset = 0; + kernel_packages.offset = 0; + sync_dispatcher.offset = 0; +} + +/*! + * Initialize the Listener by setting up symbols shared between GOAL and C for the listener. + * Also adds "kernel" to the kernel_packages list. + * There was an "ACK" message sent here, but this is removed because we don't need it. + */ +void InitListener() { + ListenerLinkBlock = intern_from_c(-1, 0, "*listener-link-block*"); + ListenerFunction = intern_from_c(-1, 0, "*listener-function*"); + KernelFunction = intern_from_c(-1, 0, "*kernel-function*"); + kernel_dispatcher = intern_from_c(-1, 0, "kernel-dispatcher"); + sync_dispatcher = intern_from_c(-1, 0, "sync-dispatcher"); + kernel_packages = intern_from_c(-1, 0, "*kernel-packages*"); + print_column = intern_from_c(-1, 0, "*print-column*").cast(); // this is wrong + ListenerLinkBlock->value() = s7.offset; + ListenerFunction->value() = s7.offset; + KernelFunction->value() = s7.offset; + + kernel_packages->value() = + new_pair(s7.offset + FIX_SYM_GLOBAL_HEAP, *((s7 + FIX_SYM_PAIR_TYPE - 1).cast()), + make_string_from_c("kernel"), kernel_packages->value()); + // if(MasterDebug) { + // SendFromBufferD(MSG_ACK, 0, AckBufArea + sizeof(ListenerMessageHeader), 0); + // } +} + +/*! + * Handle an incoming listener message + */ +void ProcessListenerMessage(Ptr msg) { + // flag that the listener is connected! + ListenerStatus = 1; + switch (protoBlock.msg_kind) { + case LTT_MSG_POKE: + // just flush any pending stuff. + ClearPending(); + break; + case LTT_MSG_INSPECT: + inspect_object(atoi(msg.c())); + ClearPending(); + break; + case LTT_MSG_PRINT: + print_object(atoi(msg.c())); + ClearPending(); + break; + case LTT_MSG_PRINT_SYMBOLS: + printf("[ERROR] unsupported message kind LTT_MSG_PRINT_SYMBOLS (NYI)\n"); + break; + case LTT_MSG_RESET: + KernelShutdown(1); + MasterExit = RuntimeExitStatus::RESTART_RUNTIME; + break; + case LTT_MSG_SHUTDOWN: // not in Jak X + KernelShutdown(1); + MasterExit = RuntimeExitStatus::EXIT; + break; + case LTT_MSG_CODE: { + auto buffer = kmalloc(kdebugheap, MessCount, 0, "listener-link-buf"); + memcpy(buffer.c(), msg.c(), MessCount); + ListenerLinkBlock->value() = buffer.offset + 4; + // note - this will stash the linked code in the top level and free it. + // it will then be used-after-free, but this is OK because nobody else will allocate. + // the kernel dispatcher should immediately execute the listener function to avoid this + // getting squashed. + + // this setup allows listener function execution to clean up after itself. + + // we have added the LINK_FLAG_OUTPUT_LOAD + // jump from c to goal because this is called from the C++ stack. + ListenerFunction->value() = link_and_exec(buffer, "*listener*", 0, kdebugheap, + LINK_FLAG_FORCE_DEBUG | LINK_FLAG_OUTPUT_LOAD, true) + .offset; + return; // don't ack yet, this will happen after the function runs. + } break; + default: + MsgErr("dkernel: unknown message error: <%d> of %d bytes\n", protoBlock.msg_kind, MessCount); + break; + } + SendAck(); +} + +int sql_query_sync(Ptr /*string_in*/) { + ASSERT_NOT_REACHED(); +} + +} // namespace jakx diff --git a/game/kernel/jakx/klisten.h b/game/kernel/jakx/klisten.h new file mode 100644 index 0000000000..93f9d54e31 --- /dev/null +++ b/game/kernel/jakx/klisten.h @@ -0,0 +1,20 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/kernel/common/Ptr.h" +#include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/kscheme.h" + +namespace jakx { +extern Ptr> ListenerLinkBlock; +extern Ptr> ListenerFunction; +extern Ptr> KernelFunction; // new in jak2 +extern Ptr> kernel_dispatcher; +extern Ptr> sync_dispatcher; // new in jak2 +extern Ptr> kernel_packages; +void InitListener(); +void klisten_init_globals(); +void ProcessListenerMessage(Ptr msg); +int sql_query_sync(Ptr string_in); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/kmachine.cpp b/game/kernel/jakx/kmachine.cpp new file mode 100644 index 0000000000..22817db0d3 --- /dev/null +++ b/game/kernel/jakx/kmachine.cpp @@ -0,0 +1,557 @@ +#include "kmachine.h" + +#include + +#include "common/symbols.h" + +#include "game/graphics/gfx.h" +#include "game/graphics/jakx_texture_remap.h" +#include "game/graphics/sceGraphicsInterface.h" +#include "game/kernel/common/fileio.h" +#include "game/kernel/common/kdgo.h" +#include "game/kernel/common/kdsnetm.h" +#include "game/kernel/common/kernel_types.h" +#include "game/kernel/common/klink.h" +#include "game/kernel/common/kmachine.h" +#include "game/kernel/common/kmalloc.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/common/ksocket.h" +#include "game/kernel/common/ksound.h" +#include "game/kernel/common/memory_layout.h" +#include "game/kernel/jakx/kboot.h" +#include "game/kernel/jakx/kdgo.h" +#include "game/kernel/jakx/klisten.h" +#include "game/kernel/jakx/kmachine_extras.h" +#include "game/kernel/jakx/kmalloc.h" +#include "game/kernel/jakx/kscheme.h" +#include "game/kernel/jakx/ksound.h" +#include "game/sce/deci2.h" +#include "game/sce/libdma.h" +#include "game/sce/libgraph.h" +#include "game/sce/sif_ee.h" +#include "game/sce/stubs.h" + +namespace jakx { + +using namespace ee; + +/*! + * Initialize global variables based on command line parameters. Not called in retail versions, + * but it is present in the ELF. + * DONE + * Modified to use std::string, and removed call to fflush. + */ +void InitParms(int argc, const char* const* argv) { + // Modified default settings to boot up the game like normal if no arguments are present. + if (argc == 1) { + DiskBoot = 1; + isodrv = fakeiso; + modsrc = 0; + reboot_iop = 0; + DebugSegment = 0; + MasterDebug = 0; + DebugSymbols = true; + // USE_OVERLORD2_W = false; + } + + for (int i = 1; i < argc; i++) { + std::string arg = argv[i]; + // DVD Settings + // ---------------------------- + + // the "cd" mode uses the DVD drive for everything. This is how the game runs in retail + if (arg == "-cd") { + Msg(6, "dkernel: cd mode\n"); + isodrv = iso_cd; // use the actual DVD drive for data files + modsrc = 1; // use the DVD drive data for IOP modules + reboot_iop = 1; // Reboot the IOP (load new IOP runtime) + } + + if (arg == "-cd-local-overlord") { + Msg(6, "dkernel: cd local-overlord mode\n"); + // reboot_G_isodrv_G_overlord_S = 1; + // modsrc_S = 0; + // fs_S_FS_INITIALIZED_W = 0; + // isodrv_G_reboot_G = 0; + } + + // the "cddata" uses the DVD drive for everything but IOP modules. + if (arg == "-cddata") { + Msg(6, "dkernel: cddata mode\n"); + isodrv = iso_cd; // tell IOP to use actual DVD drive for data files + modsrc = 0; // don't use DVD drive for IOP modules + reboot_iop = 0; // no need to reboot the IOP + } + + if (arg == "-demo") { + Msg(6, "dkernel: demo mode\n"); + kstrcpy(DebugBootMessage, "demo"); + } + + // new for jak 2 + if (arg == "-kiosk") { + Msg(6, "dkernel: kiosk mode\n"); + kstrcpy(DebugBootMessage, "kiosk"); + } + + // new for jak x + if (arg == "-beta") { + Msg(6, "dkernel: beta mode\n"); + strcpy(DebugBootMessage, "beta"); + } + + // new for jak 2 + if (arg == "-preview") { + Msg(6, "dkernel: preview mode\n"); + kstrcpy(DebugBootMessage, "preview"); + } + + // the "deviso" mode is one of two modes for testing without the need for DVDs + // removed in jak x + if (arg == "-deviso") { + Msg(6, "dkernel: deviso mode\n"); + isodrv = deviso; // IOP deviso mode + modsrc = 2; // now 2 for Jak 2 + reboot_iop = 0; + } + + // the "fakeiso" mode is the other of two modes for testing without the need for DVDs + if (arg == "-fakeiso") { + Msg(6, "dkernel: fakeiso mode\n"); + isodrv = fakeiso; // IOP fakeeiso mode + modsrc = 0; // no IOP module loading (there's no DVD to load from!) + reboot_iop = 0; + } + + // the "boot" mode is used to set GOAL up for running the game in retail mode + if (arg == "-boot") { + Msg(6, "dkernel: boot mode\n"); + MasterDebug = 0; + DiskBoot = 1; + DebugSegment = 0; + } + + // new for jak 2 + if (arg == "-debug-boot") { + Msg(6, "dkernel: debug-boot mode\n"); + MasterDebug = 0; + DebugSegment = 1; + DiskBoot = 1; + } + + // traditional debug mode + if (arg == "-debug") { + Msg(6, "dkernel: debug mode\n"); + MasterDebug = 1; + DebugSegment = 1; + } + + // the "debug-mem" mode is used to set up GOAL in debug mode, but not to load debug-segments + if (arg == "-debug-mem") { + Msg(6, "dkernel: debug-mem mode\n"); + MasterDebug = 1; + DebugSegment = 0; + } + + // TODO - jak x + /*if (arg == "-overlord") { + Msg(6, "dkernel: overlord 1 mode\n"); + USE_OVERLORD2_W = false; + } + + if (arg == "-overlord2") { + Msg(6, "dkernel: overlord 2 mode\n"); + USE_OVERLORD2_W = true; + }*/ + + if (arg == "-debug-symbols") { + Msg(6, "dkernel: debug-symbols on\n"); + DebugSymbols = true; + } + + if (arg == "-no-debug-symbols") { + Msg(6, "dkernel: debug-symbols off\n"); + DebugSymbols = false; // Was this intentional? + } + + // the "-level [level-name]" mode is used to inform the game to boot a specific level + // the default level is "#f". + if (arg == "-level" && i + 1 < argc) { + std::string levelName = argv[++i]; + std::string symbolId = argv[++i]; + Msg(6, "dkernel: level %s %s\n", levelName.c_str(), symbolId.c_str()); + kstrcpy(DebugBootLevel, levelName.c_str()); + ASSERT_NOT_REACHED(); // symbol ID junk + // DebugBootLevelID = DecodeSymbolId(atoi(argv[2])) + 1; + } + + // new for jak 2 + if (arg == "-user" && i + 1 < argc) { + i++; + std::string userName = argv[i]; + Msg(6, "dkernel: user %s\n", userName.c_str()); + kstrcpy(DebugBootUser, userName.c_str()); + } + + // new for jak 2 + if (arg == "-art" && i + 1 < argc) { + i++; + std::string artGroupName = argv[i]; + Msg(6, "dkernel: art-group %s\n", artGroupName.c_str()); + if (strlen(artGroupName.c_str()) != 0) { // argGroupName.length + strcpy(DebugBootArtGroup, artGroupName.c_str()); + kstrcpy(DebugBootMessage, "art-group"); + } + } + + // an added mode to allow booting without a KERNEL.CGO for testing + if (arg == "-nokernel") { + Msg(6, "dkernel: no kernel mode\n"); + MasterUseKernel = false; + } + + // an added mode to allow booting without sound for testing + if (arg == "-nosound") { + Msg(6, "dkernel: no sound mode\n"); + masterConfig.disable_sound = true; + } + } +} + +/*! + * This is mostly copy-pasted from jak2 and very simplified until we have overlord 2. + */ +void InitIOP() { + Msg(6, "dkernel: boot:%d debug:%d mem:%d syms:%d dev:%d mod:%d\n", DiskBoot, MasterDebug, + DebugSegment, DebugSymbols, isodrv, modsrc); + sceSifInitRpc(0); + + // init cd if we need it + if (((isodrv == iso_cd) || (modsrc == 1)) || (reboot_iop == 1)) { + InitCD(); + } + + if ((isodrv == iso_cd) || (modsrc == 1)) { + InitCD(); + } + + char overlord_boot_command[256]; + char* cmd = overlord_boot_command; + kstrcpy(cmd, init_types[(int)isodrv]); + cmd = cmd + strlen(cmd) + 1; + if (!strncmp(DebugBootMessage, "demo", 4)) { + kstrcpy(cmd, "SCREEN1.DEM"); + } else { + kstrcpy(cmd, "SCREEN1.USA"); + } + cmd = cmd + strlen(cmd) + 1; + if (masterConfig.disable_sound) { + kstrcpy(cmd, "-nosound"); + cmd = cmd + strlen(cmd) + 1; + } + + int total_len = cmd - overlord_boot_command; + + if (modsrc == 0) { + printf("Initializing CD library in FAKEISO mode\n"); + if (sceSifLoadModule("host0:bin/overlord.irx", total_len, overlord_boot_command) < 0) { + MsgErr("loading overlord.irx <3> failed\n"); + exit(0); + } + } else { + ASSERT_NOT_REACHED(); + } + int rv = sceMcInit(); + if (rv < 0) { + MsgErr("MC driver init failed %d\n", rv); + exit(0); + } + printf("InitIOP OK\n"); +} + +int InitMachine() { + // uVar2 = FUN_00116ec8(0x10); + // heap_start = malloc(0x10); + + u32 global_heap_size = GLOBAL_HEAP_END - HEAP_START; + float size_mb = ((float)global_heap_size) / (float)(1 << 20); + lg::info("gkernel: global heap 0x{:08x} to 0x{:08x} (size {:.3f} MB)", HEAP_START, + GLOBAL_HEAP_END, size_mb); + kinitheap(kglobalheap, Ptr(HEAP_START), global_heap_size); + + kmemopen_from_c(kglobalheap, "global"); + kmemopen_from_c(kglobalheap, "scheme-globals"); + + if (!MasterDebug && !DebugSegment) { + // if no debug, we make the kheapinfo structure NULL so GOAL knows not to use it. + // note: either MasterDebug or DebugSegment is enough to give use the debug heap. + kdebugheap.offset = 0; + } else { + kinitheap(kdebugheap, Ptr(DEBUG_HEAP_START), jakx::DEBUG_HEAP_SIZE); + } + init_output(); + InitIOP(); + // sceGsResetPath(); + InitVideo(); + // FlushCache(0); + // FlushCache(2); + // sceGsSyncV(0); + // if (scePadInit(0) != 1) { + // MsgErr("dkernel: !init pad\n"); + // } + if (MasterDebug != 0) { + InitGoalProto(); + } else { + ee::sceDeci2Disable(); // added + } + printf("InitSound\n"); + InitSound(); + printf("InitRPC\n"); + InitRPC(); + reset_output(); + clear_print(); + auto status = InitHeapAndSymbol(); + if (status >= 0) { + printf("InitListenerConnect\n"); + InitListenerConnect(); + printf("InitCheckListener\n"); + InitCheckListener(); + Msg(6, "kernel: machine started\n"); + return 0; + } + return status; +} + +int ShutdownMachine(int reasonIndex) { + Msg(6, "kernel: machine shutdown (reason %d)\n", (int)MasterExit); + + StopIOP(); + ShutdownSound(); + CloseListener(); + + ShutdownGoalProto(); + return 0; +} + +u32 KeybdGetData(u32 /*_mouse*/) { + return 0; + // ASSERT_NOT_REACHED(); +} + +u32 MouseGetData(u32 /*_mouse*/) { + // ASSERT_NOT_REACHED(); + return 0; +} + +/*! + * Open a file-stream. Name is a GOAL string. Mode is a GOAL symbol. Use 'read for readonly + * and anything else for write only. + */ +u64 kopen(u64 fs, u64 name, u64 mode) { + auto file_stream = Ptr(fs).c(); + file_stream->mode = mode; + file_stream->name = name; + file_stream->flags = 0; + lg::print("****** CALL TO kopen() ******\n"); + // sprintf(buffer, "host:%s", Ptr(name)->data()); + if (!strcmp(sym_to_cstring(Ptr>(mode)), "read")) { + // 0x1 + file_stream->file = ee::sceOpen(Ptr(name)->data(), SCE_RDONLY); + } else if (!strcmp(sym_to_cstring(Ptr>(mode)), "append")) { + // new in jak 2! + // 0x202 + file_stream->file = ee::sceOpen(Ptr(name)->data(), SCE_CREAT | SCE_WRONLY); + } else { + // 0x602 + file_stream->file = ee::sceOpen(Ptr(name)->data(), SCE_TRUNC | SCE_CREAT | SCE_WRONLY); + } + + return fs; +} + +void PutDisplayEnv(u32 alp) { + // we can mostly ignore this, except for one value that sets the 'blackout' amount. + auto* renderer = Gfx::GetCurrentRenderer(); + if (renderer) { + renderer->set_pmode_alp(alp / 255.f); + } +} + +void aybabtu() {} + +//// PC Stuff +void InitMachine_PCPort() { + // PC Port added functions + init_common_pc_port_functions( + make_function_symbol_from_c, + [](const char* name) { + const auto result = intern_from_c(-1, 0, name); + InternFromCInfo info{}; + info.offset = result.offset; + return info; + }, + make_string_from_c); + + make_function_symbol_from_c("__pc-set-levels", (void*)kmachine_extras::pc_set_levels); + make_function_symbol_from_c("__pc-set-active-levels", + (void*)kmachine_extras::pc_set_active_levels); + make_function_symbol_from_c("__pc-get-tex-remap", (void*)lookup_jakx_texture_dest_offset); + make_function_symbol_from_c("pc-init-autosplitter-struct", + (void*)kmachine_extras::init_autosplit_struct); + + // discord rich presence + make_function_symbol_from_c("pc-discord-rpc-update", (void*)kmachine_extras::update_discord_rpc); + + // debugging tools + make_function_symbol_from_c("alloc-vagdir-names", (void*)kmachine_extras::alloc_vagdir_names); + + // external RPCs + make_function_symbol_from_c("pc-fetch-external-speedrun-times", + (void*)kmachine_extras::pc_fetch_external_speedrun_times); + make_function_symbol_from_c("pc-fetch-external-race-times", + (void*)kmachine_extras::pc_fetch_external_race_times); + make_function_symbol_from_c("pc-fetch-external-highscores", + (void*)kmachine_extras::pc_fetch_external_highscores); + make_function_symbol_from_c("pc-get-external-speedrun-time", + (void*)kmachine_extras::pc_get_external_speedrun_time); + make_function_symbol_from_c("pc-get-external-race-time", + (void*)kmachine_extras::pc_get_external_race_time); + make_function_symbol_from_c("pc-get-external-highscore", + (void*)kmachine_extras::pc_get_external_highscore); + make_function_symbol_from_c("pc-get-num-external-speedrun-times", + (void*)kmachine_extras::pc_get_num_external_speedrun_times); + make_function_symbol_from_c("pc-get-num-external-race-times", + (void*)kmachine_extras::pc_get_num_external_race_times); + make_function_symbol_from_c("pc-get-num-external-highscores", + (void*)kmachine_extras::pc_get_num_external_highscores); + + // speedrunning stuff + make_function_symbol_from_c("pc-sr-mode-get-practice-entries-amount", + (void*)kmachine_extras::pc_sr_mode_get_practice_entries_amount); + make_function_symbol_from_c("pc-sr-mode-get-practice-entry-name", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_name); + make_function_symbol_from_c("pc-sr-mode-get-practice-entry-continue-point", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_continue_point); + make_function_symbol_from_c( + "pc-sr-mode-get-practice-entry-history-success", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_history_success); + make_function_symbol_from_c( + "pc-sr-mode-get-practice-entry-history-attempts", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_history_attempts); + make_function_symbol_from_c( + "pc-sr-mode-get-practice-entry-session-success", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_session_success); + make_function_symbol_from_c( + "pc-sr-mode-get-practice-entry-session-attempts", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_session_attempts); + make_function_symbol_from_c("pc-sr-mode-get-practice-entry-avg-time", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_avg_time); + make_function_symbol_from_c("pc-sr-mode-get-practice-entry-fastest-time", + (void*)kmachine_extras::pc_sr_mode_get_practice_entry_fastest_time); + make_function_symbol_from_c("pc-sr-mode-record-practice-entry-attempt!", + (void*)kmachine_extras::pc_sr_mode_record_practice_entry_attempt); + make_function_symbol_from_c("pc-sr-mode-init-practice-info!", + (void*)kmachine_extras::pc_sr_mode_init_practice_info); + make_function_symbol_from_c("pc-sr-mode-get-custom-category-amount", + (void*)kmachine_extras::pc_sr_mode_get_custom_category_amount); + make_function_symbol_from_c("pc-sr-mode-get-custom-category-name", + (void*)kmachine_extras::pc_sr_mode_get_custom_category_name); + make_function_symbol_from_c( + "pc-sr-mode-get-custom-category-continue-point", + (void*)kmachine_extras::pc_sr_mode_get_custom_category_continue_point); + make_function_symbol_from_c("pc-sr-mode-init-custom-category-info!", + (void*)kmachine_extras::pc_sr_mode_init_custom_category_info); + make_function_symbol_from_c("pc-sr-mode-dump-new-custom-category", + (void*)kmachine_extras::pc_sr_mode_dump_new_custom_category); + + // setup string constants + auto user_dir_path = file_util::get_user_config_dir(); + intern_from_c(-1, 0, "*pc-user-dir-base-path*")->value() = + make_string_from_c(user_dir_path.string().c_str()); + auto settings_path = file_util::get_user_settings_dir(g_game_version); + intern_from_c(-1, 0, "*pc-settings-folder*")->value() = + make_string_from_c(settings_path.string().c_str()); + intern_from_c(-1, 0, "*pc-settings-built-sha*")->value() = + make_string_from_c(build_revision().c_str()); +} +// End PC Stuff + +void InitMachineScheme() { + make_function_symbol_from_c("put-display-env", (void*)PutDisplayEnv); + make_function_symbol_from_c("syncv", (void*)sceGsSyncV); + make_function_symbol_from_c("sync-path", (void*)sceGsSyncPath); + make_function_symbol_from_c("reset-path", (void*)sceGsResetPath); + make_function_symbol_from_c("reset-graph", (void*)sceGsResetGraph); + make_function_symbol_from_c("dma-sync", (void*)sceDmaSync); + make_function_symbol_from_c("gs-put-imr", (void*)sceGsPutIMR); + make_function_symbol_from_c("gs-get-imr", (void*)sceGsGetIMR); + make_function_symbol_from_c("gs-store-image", (void*)sceGsExecStoreImage); + make_function_symbol_from_c("flush-cache", (void*)FlushCache); + make_function_symbol_from_c("cpad-open", (void*)CPadOpen); + make_function_symbol_from_c("cpad-get-data", (void*)CPadGetData); + make_function_symbol_from_c("mouse-get-data", (void*)MouseGetData); + make_function_symbol_from_c("keybd-get-data", (void*)KeybdGetData); + make_function_symbol_from_c("install-handler", (void*)InstallHandler); + make_function_symbol_from_c("install-debug-handler", (void*)InstallDebugHandler); + make_function_symbol_from_c("file-stream-open", (void*)kopen); + make_function_symbol_from_c("file-stream-close", (void*)kclose); + make_function_symbol_from_c("file-stream-length", (void*)klength); + make_function_symbol_from_c("file-stream-seek", (void*)kseek); + make_function_symbol_from_c("file-stream-read", (void*)kread); + make_function_symbol_from_c("file-stream-write", (void*)kwrite); + make_function_symbol_from_c("file-stream-mkdir", (void*)kmkdir); + make_function_symbol_from_c("scf-get-language", (void*)DecodeLanguage); + make_function_symbol_from_c("scf-get-time", (void*)DecodeTime); + make_function_symbol_from_c("scf-get-aspect", (void*)DecodeAspect); + make_function_symbol_from_c("scf-get-volume", (void*)DecodeVolume); + make_function_symbol_from_c("scf-get-territory", (void*)DecodeTerritory); + make_function_symbol_from_c("scf-get-timeout", (void*)DecodeTimeout); + make_function_symbol_from_c("scf-get-inactive-timeout", (void*)DecodeInactiveTimeout); + make_function_symbol_from_c("dma-to-iop", (void*)dma_to_iop); + make_function_symbol_from_c("kernel-shutdown", (void*)KernelShutdown); + make_function_symbol_from_c("rpc-call", (void*)RpcCall); + make_function_symbol_from_c("rpc-busy?", (void*)RpcBusy); + make_function_symbol_from_c("test-load-dgo-c", (void*)LoadDGOTest); + + InitMachine_PCPort(); + + InitSoundScheme(); + intern_from_c(-1, 0, "*stack-top*")->value() = 0x7f00000; + intern_from_c(-1, 0, "*stack-base*")->value() = 0x7ffffff; + intern_from_c(-1, 0, "*stack-size*")->value() = 0x100000; + intern_from_c(-1, 0, "*kernel-boot-message*")->value() = + intern_from_c(-1, 0, DebugBootMessage).offset; + intern_from_c(-1, 0, "*user*")->value() = make_string_from_c(DebugBootUser); + if (DiskBoot) { + intern_from_c(-1, 0, "*kernel-boot-mode*")->value() = intern_from_c(-1, 0, "boot").offset; + } + if (strcmp(DebugBootLevel, "#f") == 0) { + intern_from_c(-1, 0, "*kernel-boot-level*")->value() = s7.offset; + } else { + ASSERT_NOT_REACHED(); + } + intern_from_c(-1, 0, "*kernel-boot-art-group*")->value() = make_string_from_c(DebugBootArtGroup); + + if (DiskBoot != 0) { + *EnableMethodSet = *EnableMethodSet + 1; + load_and_link_dgo_from_c("game", kglobalheap, + LINK_FLAG_OUTPUT_LOAD | LINK_FLAG_EXECUTE | LINK_FLAG_PRINT_LOGIN, + 0x400000, true); + *EnableMethodSet = *EnableMethodSet + -1; + using namespace jakx_symbols; + + kernel_packages->value() = + new_pair(s7.offset + FIX_SYM_GLOBAL_HEAP, *((s7 + FIX_SYM_PAIR_TYPE - 1).cast()), + make_string_from_c("engine"), kernel_packages->value()); + kernel_packages->value() = + new_pair(s7.offset + FIX_SYM_GLOBAL_HEAP, *((s7 + FIX_SYM_PAIR_TYPE - 1).cast()), + make_string_from_c("game"), kernel_packages->value()); + kernel_packages->value() = + new_pair(s7.offset + FIX_SYM_GLOBAL_HEAP, *((s7 + FIX_SYM_PAIR_TYPE - 1).cast()), + make_string_from_c("common"), kernel_packages->value()); + printf("calling play-boot!\n"); + call_goal_function_by_name("play-boot"); // new function for jak2! + } +} + +} // namespace jakx diff --git a/game/kernel/jakx/kmachine.h b/game/kernel/jakx/kmachine.h new file mode 100644 index 0000000000..072f6223b3 --- /dev/null +++ b/game/kernel/jakx/kmachine.h @@ -0,0 +1,8 @@ +#pragma once + +namespace jakx { +void InitParms(int argc, const char* const* argv); +void InitMachineScheme(); +int InitMachine(); +int ShutdownMachine(int reasonIndex); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/kmachine_extras.cpp b/game/kernel/jakx/kmachine_extras.cpp new file mode 100644 index 0000000000..a8906c3490 --- /dev/null +++ b/game/kernel/jakx/kmachine_extras.cpp @@ -0,0 +1,961 @@ +#include "kmachine_extras.h" + +#include +#include + +#include "kscheme.h" + +#include "common/symbols.h" +#include "common/util/font/font_utils.h" + +#include "game/external/discord_jakx.h" +#include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/kmachine.h" +#include "game/kernel/common/kscheme.h" +#include "game/overlord/jakx/iso_cd.h" + +namespace jakx { +namespace kmachine_extras { +AutoSplitterBlock g_auto_splitter_block_jakx; + +void update_discord_rpc(u32 discord_info) { + if (gDiscordRpcEnabled) { + DiscordRichPresence rpc; + char state[128]; + char large_image_key[128]; + char large_image_text[128]; + char small_image_key[128]; + char small_image_text[128]; + auto info = discord_info ? Ptr(discord_info).c() : NULL; + if (info) { + // Get the data from GOAL + int orbs = (int)info->orb_count; + int gems = (int)info->gem_count; + // convert encodings + std::string status = get_font_bank(GameTextVersion::JAKX) + ->convert_game_to_utf8(Ptr(info->status).c()->data()); + + // get rid of special encodings like + std::regex r("<.*?>"); + while (std::regex_search(status, r)) { + status = std::regex_replace(status, r, ""); + } + + char* level = Ptr(info->level).c()->data(); + auto cutscene = Ptr>(info->cutscene)->value(); + float time = info->time_of_day; + float percent_completed = info->percent_completed; + std::bitset<64> focus_status = info->focus_status; + auto vehicle = static_cast(info->current_vehicle); + char* task = Ptr(info->task).c()->data(); + + // Construct the DiscordRPC Object + const char* full_level_name = + get_full_level_name(level_names, level_name_remap, Ptr(info->level).c()->data()); + memset(&rpc, 0, sizeof(rpc)); + // if we have an active task, set the mission specific image for it + if (strcmp(task, "unknown") != 0) { + strcpy(large_image_key, task); + } else { + // if we are in an outdoors level, use the picture for the corresponding time of day + if (!indoors(indoor_levels, level)) { + char level_with_tod[128]; + strcpy(level_with_tod, level); + strcat(level_with_tod, "-"); + strcat(level_with_tod, time_of_day_str(time)); + strcpy(large_image_key, level_with_tod); + } else { + strcpy(large_image_key, level); + } + } + strcpy(large_image_text, full_level_name); + if (!strcmp(full_level_name, "unknown")) { + strcpy(large_image_key, full_level_name); + strcpy(large_image_text, level); + } + rpc.largeImageKey = large_image_key; + if (cutscene != offset_of_s7()) { + strcpy(state, "Watching a cutscene"); + // temporarily move these counters to the large image tooltip during a cutscene + strcat(large_image_text, + fmt::format(" | {:.0f}% | Orbs: {} | Gems: {} | {}", percent_completed, + std::to_string(orbs), std::to_string(gems), get_time_of_day(time)) + .c_str()); + } else { + strcpy(state, fmt::format("{:.0f}% | Orbs: {} | Gems: {} | {}", percent_completed, + std::to_string(orbs), std::to_string(gems), get_time_of_day(time)) + .c_str()); + } + rpc.largeImageText = large_image_text; + rpc.state = state; + // check for any special conditions to display for the small image + if (FOCUS_TEST(focus_status, FocusStatus::Board)) { + strcpy(small_image_key, "focus-status-board"); + strcpy(small_image_text, "On the JET-Board"); + } else if (FOCUS_TEST(focus_status, FocusStatus::Mech)) { + strcpy(small_image_key, "focus-status-mech"); + strcpy(small_image_text, "Controlling a Dark Maker bot"); + } else if (FOCUS_TEST(focus_status, FocusStatus::Pilot)) { + // TODO vehicle images + strcpy(small_image_key, "focus-status-pilot"); + auto vehicle_name = VehicleTypeToString(vehicle); + if (!strcmp(task, "comb-travel") || !strcmp(task, "comb-wild-ride")) { + strcpy(small_image_text, "Driving the Catacombs Rail Rider"); + } else if (!strcmp(task, "desert-glide")) { + strcpy(small_image_text, "Flying the Glider"); + } else if (!strcmp(task, "factory-sky-battle")) { + strcpy(small_image_text, "Flying the Hellcat"); + } else { + if (vehicle_name != "Unknown") { + strcpy(small_image_text, fmt::format("Driving the {}", vehicle_name).c_str()); + } else { + strcpy(small_image_key, ""); + strcpy(small_image_text, ""); + } + } + } else if (FOCUS_TEST(focus_status, FocusStatus::Indax)) { + strcpy(small_image_key, "focus-status-indax"); + strcpy(small_image_text, "Playing as Daxter"); + } else if (FOCUS_TEST(focus_status, FocusStatus::Dark)) { + strcpy(small_image_key, "focus-status-dark"); + strcpy(small_image_text, "Dark Jak"); + } else if (FOCUS_TEST(focus_status, FocusStatus::Light)) { + strcpy(small_image_key, "focus-status-light"); + strcpy(small_image_text, "Light Jak"); + } else if (FOCUS_TEST(focus_status, FocusStatus::Turret)) { + strcpy(small_image_key, "focus-status-turret"); + strcpy(small_image_text, "In a Gunpod"); + } else if (FOCUS_TEST(focus_status, FocusStatus::Gun)) { + strcpy(small_image_key, "focus-status-gun"); + strcpy(small_image_text, "Using a Gun"); + } else { + strcpy(small_image_key, ""); + strcpy(small_image_text, ""); + } + rpc.smallImageKey = small_image_key; + rpc.smallImageText = small_image_text; + rpc.startTimestamp = gStartTime; + rpc.details = status.c_str(); + rpc.partySize = 0; + rpc.partyMax = 0; + Discord_UpdatePresence(&rpc); + } + } else { + Discord_ClearPresence(); + } +} + +void pc_set_levels(u32 lev_list) { + if (!Gfx::GetCurrentRenderer()) { + return; + } + std::vector levels; + for (int i = 0; i < LEVEL_MAX; i++) { + u32 lev = *Ptr(lev_list + i * 4); + std::string ls = Ptr(lev).c()->data(); + if (ls != "none" && ls != "#f" && ls != "") { + levels.push_back(ls); + } + } + + Gfx::GetCurrentRenderer()->set_levels(levels); +} + +void pc_set_active_levels(u32 lev_list) { + if (!Gfx::GetCurrentRenderer()) { + return; + } + std::vector levels; + for (int i = 0; i < LEVEL_MAX; i++) { + u32 lev = *Ptr(lev_list + i * 4); + std::string ls = Ptr(lev).c()->data(); + if (ls != "none" && ls != "#f" && ls != "") { + levels.push_back(ls); + } + } + + Gfx::GetCurrentRenderer()->set_active_levels(levels); +} + +static std::string unpack_vag_name_jakx(u64 compressed) { + const char* char_map = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"; + u32 chars = compressed & 0x1fffff; + std::array buf{}; + buf.fill(0); + for (int i = 0; i < 8; i++) { + if (i == 4) { + chars = (compressed >> 21) & 0x1fffff; + } + buf[7 - i] = char_map[chars % 38]; + chars /= 38; + } + + return {buf.data()}; +} + +u32 alloc_vagdir_names(u32 heap_sym) { + auto alloced_heap = (Ptr)alloc_heap_memory(heap_sym, g_VagDir.num_entries * 8 + 8); + if (alloced_heap.offset) { + *alloced_heap = g_VagDir.num_entries; + // use entry -1 to get the amount + alloced_heap = alloced_heap + 8; + for (size_t i = 0; i < g_VagDir.num_entries; ++i) { + char vagname_temp[9]; + u64 packed = *(u64*)g_VagDir.entries[i].words; + auto name = unpack_vag_name_jakx(packed); + memcpy(vagname_temp, name.data(), 8); + for (int j = 0; j < 8; ++j) { + vagname_temp[j] = tolower(vagname_temp[j]); + } + vagname_temp[8] = 0; + u64 vagname_val; + memcpy(&vagname_val, vagname_temp, 8); + *(alloced_heap + i * 8) = vagname_val; + } + return alloced_heap.offset; + } + return s7.offset; +} + +inline u64 bool_to_symbol(const bool val) { + return val ? static_cast(s7.offset) + true_symbol_offset(g_game_version) : s7.offset; +} + +inline bool symbol_to_bool(const u32 symptr) { + return symptr != s7.offset; +} + +void init_autosplit_struct() { + g_auto_splitter_block_jakx.pointer_to_symbol = + (u64)g_ee_main_mem + (u64)intern_from_c(-1, 0, "*autosplit-info-jakx*")->value(); +} + +// TODO - currently using a single mutex for all background task synchronization +std::mutex background_task_lock; + +std::string last_rpc_error; + +// TODO - add a TTL to this +std::unordered_map>> + external_speedrun_time_cache = {}; +std::unordered_map>> + external_race_time_cache = {}; +std::unordered_map>> + external_highscores_cache = {}; + +// clang-format off +// TODO - eventually don't depend on SRC +const std::unordered_map external_speedrun_lookup_urls = { + {"any", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/category/9d8p1qkn?embed=players&max=200"}, + {"nooob", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/category/5dwj0n0k?embed=players&max=200"}, + {"allmissions", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/category/xd1r98k8?embed=players&max=200"}, + {"100", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/category/zd30nndn?embed=players&max=200"}, + {"anyorbs", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/category/jdzw79vd?embed=players&max=200"}, + {"anyhero", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/category/9kvp50kg?embed=players&max=200"}}; +const std::unordered_map external_race_lookup_urls = { + {"time-trial", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/level/kwjvyzwg/jdr8onk6?embed=players&max=200"}, + {"rally", "https://www.speedrun.com/api/v1/leaderboards/nj1nww1p/level/owo3kyw6/jdr8onk6?embed=players&max=200"}}; +const std::unordered_map external_highscores_lookup_urls = { + {"was-pre-game", "https://api.jakspeedruns.workers.dev/v1/highscores/9"}, + {"air-time", "https://api.jakspeedruns.workers.dev/v1/highscores/10"}, + {"total-air-time", "https://api.jakspeedruns.workers.dev/v1/highscores/11"}, + {"jump-distance", "https://api.jakspeedruns.workers.dev/v1/highscores/12"}, + {"total-jump-distance", "https://api.jakspeedruns.workers.dev/v1/highscores/13"}, + {"roll-count", "https://api.jakspeedruns.workers.dev/v1/highscores/14"}, + {"wascity-gungame", "https://api.jakspeedruns.workers.dev/v1/highscores/15"}, + {"jetboard", "https://api.jakspeedruns.workers.dev/v1/highscores/16"}, + {"gungame-yellow-2", "https://api.jakspeedruns.workers.dev/v1/highscores/17"}, + {"gungame-red-2", "https://api.jakspeedruns.workers.dev/v1/highscores/18"}, + {"gungame-ratchet", "https://api.jakspeedruns.workers.dev/v1/highscores/19"}, + {"gungame-clank", "https://api.jakspeedruns.workers.dev/v1/highscores/20"}, + {"power-game", "https://api.jakspeedruns.workers.dev/v1/highscores/21"}, + {"destroy-interceptors", "https://api.jakspeedruns.workers.dev/v1/highscores/22"}}; +// clang-format on + +void callback_fetch_external_speedrun_times(bool success, + const std::string& cache_id, + std::optional result) { + std::scoped_lock lock{background_task_lock}; + + if (!success) { + intern_from_c(-1, 0, "*pc-rpc-error?*")->value() = bool_to_symbol(true); + if (result) { + last_rpc_error = result.value(); + } else { + last_rpc_error = "Unexpected Error Occurred"; + } + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + // TODO - might be nice to have an error if we get an unexpected payload + if (!result) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + // Parse the response + const auto data = safe_parse_json(result.value()); + if (!data || !data->contains("data") || !data->at("data").contains("players") || + !data->at("data").at("players").contains("data") || !data->at("data").contains("runs")) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + auto& players = data->at("data").at("players").at("data"); + auto& runs = data->at("data").at("runs"); + std::vector> times = {}; + for (const auto& run_info : runs) { + std::pair time_info; + if (players.size() > times.size() && players.at(times.size()).contains("names") && + players.at(times.size()).at("names").contains("international")) { + time_info.first = players.at(times.size()).at("names").at("international"); + } else if (players.size() > times.size() && players.at(times.size()).contains("name")) { + time_info.first = players.at(times.size()).at("name"); + } else { + time_info.first = "Unknown"; + } + if (run_info.contains("run") && run_info.at("run").contains("times") && + run_info.at("run").at("times").contains("primary_t")) { + time_info.second = run_info.at("run").at("times").at("primary_t"); + times.push_back(time_info); + } + } + external_speedrun_time_cache[cache_id] = times; + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); +} + +// TODO - duplicate code, put it in a function +void callback_fetch_external_race_times(bool success, + const std::string& cache_id, + std::optional result) { + std::scoped_lock lock{background_task_lock}; + + if (!success) { + intern_from_c(-1, 0, "*pc-rpc-error?*")->value() = bool_to_symbol(true); + if (result) { + last_rpc_error = result.value(); + } else { + last_rpc_error = "Unexpected Error Occurred"; + } + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + // TODO - might be nice to have an error if we get an unexpected payload + if (!result) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + // Parse the response + const auto data = safe_parse_json(result.value()); + if (!data || !data->contains("data") || !data->at("data").contains("players") || + !data->at("data").at("players").contains("data") || !data->at("data").contains("runs")) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + auto& players = data->at("data").at("players").at("data"); + auto& runs = data->at("data").at("runs"); + std::vector> times = {}; + for (const auto& run_info : runs) { + std::pair time_info; + if (players.size() > times.size() && players.at(times.size()).contains("names") && + players.at(times.size()).at("names").contains("international")) { + time_info.first = players.at(times.size()).at("names").at("international"); + } else if (players.size() > times.size() && players.at(times.size()).contains("name")) { + time_info.first = players.at(times.size()).at("name"); + } else { + time_info.first = "Unknown"; + } + if (run_info.contains("run") && run_info.at("run").contains("times") && + run_info.at("run").at("times").contains("primary_t")) { + time_info.second = run_info.at("run").at("times").at("primary_t"); + times.push_back(time_info); + } + } + external_race_time_cache[cache_id] = times; + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); +} + +// TODO - duplicate code, put it in a function +void callback_fetch_external_highscores(bool success, + const std::string& cache_id, + std::optional result) { + std::scoped_lock lock{background_task_lock}; + + if (!success) { + intern_from_c(-1, 0, "*pc-rpc-error?*")->value() = bool_to_symbol(true); + if (result) { + last_rpc_error = result.value(); + } else { + last_rpc_error = "Unexpected Error Occurred"; + } + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + // TODO - might be nice to have an error if we get an unexpected payload + if (!result) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); + return; + } + + // Parse the response + const auto data = safe_parse_json(result.value()); + std::vector> times = {}; + for (const auto& highscore_info : data.value()) { + if (highscore_info.contains("playerName") && highscore_info.contains("score")) { + std::pair time_info; + time_info.first = highscore_info.at("playerName"); + time_info.second = highscore_info.at("score"); + times.push_back(time_info); + } + } + external_highscores_cache[cache_id] = times; + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(false); +} + +void pc_fetch_external_speedrun_times(u32 speedrun_id_ptr) { + std::scoped_lock lock{background_task_lock}; + auto speedrun_id = std::string(Ptr(speedrun_id_ptr).c()->data()); + if (external_speedrun_lookup_urls.find(speedrun_id) == external_speedrun_lookup_urls.end()) { + lg::error("No URL for speedrun_id: '{}'", speedrun_id); + return; + } + + // First check to see if we've already retrieved this info + if (external_speedrun_time_cache.find(speedrun_id) == external_speedrun_time_cache.end()) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(true); + intern_from_c(-1, 0, "*pc-rpc-error?*")->value() = bool_to_symbol(false); + // otherwise, hit the URL + WebRequestJobPayload req; + req.callback = callback_fetch_external_speedrun_times; + req.url = external_speedrun_lookup_urls.at(speedrun_id); + req.cache_id = speedrun_id; + g_background_worker.enqueue_webrequest(req); + } +} + +void pc_fetch_external_race_times(u32 race_id_ptr) { + std::scoped_lock lock{background_task_lock}; + auto race_id = std::string(Ptr(race_id_ptr).c()->data()); + if (external_race_lookup_urls.find(race_id) == external_race_lookup_urls.end()) { + lg::error("No URL for race_id: '{}'", race_id); + return; + } + + // First check to see if we've already retrieved this info + if (external_race_time_cache.find(race_id) == external_race_time_cache.end()) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(true); + intern_from_c(-1, 0, "*pc-rpc-error?*")->value() = bool_to_symbol(false); + // otherwise, hit the URL + WebRequestJobPayload req; + req.callback = callback_fetch_external_race_times; + req.url = external_race_lookup_urls.at(race_id); + req.cache_id = race_id; + g_background_worker.enqueue_webrequest(req); + } +} + +void pc_fetch_external_highscores(u32 highscore_id_ptr) { + std::scoped_lock lock{background_task_lock}; + auto highscore_id = std::string(Ptr(highscore_id_ptr).c()->data()); + if (external_highscores_lookup_urls.find(highscore_id) == external_highscores_lookup_urls.end()) { + lg::error("No URL for highscore_id: '{}'", highscore_id); + return; + } + + // First check to see if we've already retrieved this info + if (external_highscores_cache.find(highscore_id) == external_highscores_cache.end()) { + intern_from_c(-1, 0, "*pc-waiting-on-rpc?*")->value() = bool_to_symbol(true); + intern_from_c(-1, 0, "*pc-rpc-error?*")->value() = bool_to_symbol(false); + // otherwise, hit the URL + WebRequestJobPayload req; + req.callback = callback_fetch_external_highscores; + req.url = external_highscores_lookup_urls.at(highscore_id); + req.cache_id = highscore_id; + g_background_worker.enqueue_webrequest(req); + } +} + +void pc_get_external_speedrun_time(u32 speedrun_id_ptr, + s32 index, + u32 name_dest_ptr, + u32 time_dest_ptr) { + std::scoped_lock lock{background_task_lock}; + auto speedrun_id = std::string(Ptr(speedrun_id_ptr).c()->data()); + if (external_speedrun_time_cache.find(speedrun_id) != external_speedrun_time_cache.end()) { + const auto& runs = external_speedrun_time_cache.at(speedrun_id); + if (index < (int)runs.size()) { + const auto& run_info = external_speedrun_time_cache.at(speedrun_id).at(index); + std::string converted = + get_font_bank(GameTextVersion::JAKX)->convert_utf8_to_game(run_info.first); + strcpy(Ptr(name_dest_ptr).c()->data(), converted.c_str()); + *(Ptr(time_dest_ptr).c()) = run_info.second; + } else { + std::string converted = get_font_bank(GameTextVersion::JAKX)->convert_utf8_to_game(""); + strcpy(Ptr(name_dest_ptr).c()->data(), converted.c_str()); + *(Ptr(time_dest_ptr).c()) = -1.0; + } + } +} + +void pc_get_external_race_time(u32 race_id_ptr, s32 index, u32 name_dest_ptr, u32 time_dest_ptr) { + std::scoped_lock lock{background_task_lock}; + auto race_id = std::string(Ptr(race_id_ptr).c()->data()); + if (external_race_time_cache.find(race_id) != external_race_time_cache.end()) { + const auto& runs = external_race_time_cache.at(race_id); + if (index < (int)runs.size()) { + const auto& run_info = external_race_time_cache.at(race_id).at(index); + std::string converted = + get_font_bank(GameTextVersion::JAKX)->convert_utf8_to_game(run_info.first); + strcpy(Ptr(name_dest_ptr).c()->data(), converted.c_str()); + *(Ptr(time_dest_ptr).c()) = run_info.second; + } else { + std::string converted = get_font_bank(GameTextVersion::JAKX)->convert_utf8_to_game(""); + strcpy(Ptr(name_dest_ptr).c()->data(), converted.c_str()); + *(Ptr(time_dest_ptr).c()) = -1.0; + } + } +} + +void pc_get_external_highscore(u32 highscore_id_ptr, + s32 index, + u32 name_dest_ptr, + u32 time_dest_ptr) { + std::scoped_lock lock{background_task_lock}; + auto highscore_id = std::string(Ptr(highscore_id_ptr).c()->data()); + if (external_highscores_cache.find(highscore_id) != external_highscores_cache.end()) { + const auto& runs = external_highscores_cache.at(highscore_id); + if (index < (int)runs.size()) { + const auto& run_info = external_highscores_cache.at(highscore_id).at(index); + std::string converted = + get_font_bank(GameTextVersion::JAKX)->convert_utf8_to_game(run_info.first); + strcpy(Ptr(name_dest_ptr).c()->data(), converted.c_str()); + *(Ptr(time_dest_ptr).c()) = run_info.second; + } else { + std::string converted = get_font_bank(GameTextVersion::JAKX)->convert_utf8_to_game(""); + strcpy(Ptr(name_dest_ptr).c()->data(), converted.c_str()); + *(Ptr(time_dest_ptr).c()) = -1.0; + } + } +} + +s32 pc_get_num_external_speedrun_times(u32 speedrun_id_ptr) { + std::scoped_lock lock{background_task_lock}; + auto speedrun_id = std::string(Ptr(speedrun_id_ptr).c()->data()); + if (external_speedrun_time_cache.find(speedrun_id) != external_speedrun_time_cache.end()) { + return external_speedrun_time_cache.at(speedrun_id).size(); + } + return 0; +} + +s32 pc_get_num_external_race_times(u32 race_id_ptr) { + std::scoped_lock lock{background_task_lock}; + auto race_id = std::string(Ptr(race_id_ptr).c()->data()); + if (external_race_time_cache.find(race_id) != external_race_time_cache.end()) { + return external_race_time_cache.at(race_id).size(); + } + return 0; +} + +s32 pc_get_num_external_highscores(u32 highscore_id_ptr) { + std::scoped_lock lock{background_task_lock}; + auto highscore_id = std::string(Ptr(highscore_id_ptr).c()->data()); + if (external_highscores_cache.find(highscore_id) != external_highscores_cache.end()) { + return external_highscores_cache.at(highscore_id).size(); + } + return 0; +} + +void to_json(json& j, const SpeedrunPracticeEntryHistoryAttempt& obj) { + if (obj.time) { + j["time"] = obj.time.value(); + } else { + j["time"] = nullptr; + } +} + +void from_json(const json& j, SpeedrunPracticeEntryHistoryAttempt& obj) { + if (j["time"].is_null()) { + obj.time = {}; + } else { + obj.time = j["time"]; + } +} + +void to_json(json& j, const SpeedrunPracticeEntry& obj) { + json_serialize(name); + json_serialize(continue_point_name); + json_serialize(flags); + json_serialize(completed_task); + json_serialize(features); + json_serialize(secrets); + json_serialize(vehicles); + json_serialize(starting_position); + json_serialize(starting_rotation); + json_serialize(starting_camera_position); + json_serialize(starting_camera_rotation); + json_serialize(start_zone_v1); + json_serialize(start_zone_v2); + json_serialize_optional(end_zone_v1); + json_serialize_optional(end_zone_v2); + json_serialize_optional(end_task); + json_serialize(history); +} + +void from_json(const json& j, SpeedrunPracticeEntry& obj) { + json_deserialize_if_exists(name); + json_deserialize_if_exists(continue_point_name); + json_deserialize_if_exists(flags); + json_deserialize_if_exists(completed_task); + json_deserialize_if_exists(features); + json_deserialize_if_exists(secrets); + json_deserialize_if_exists(vehicles); + json_deserialize_if_exists(starting_position); + json_deserialize_if_exists(starting_rotation); + json_deserialize_if_exists(starting_camera_position); + json_deserialize_if_exists(starting_camera_rotation); + json_deserialize_if_exists(start_zone_v1); + json_deserialize_if_exists(start_zone_v2); + json_deserialize_optional_if_exists(end_zone_v1); + json_deserialize_optional_if_exists(end_zone_v2); + json_deserialize_optional_if_exists(end_task); + json_deserialize_if_exists(history); +} + +void to_json(json& j, const SpeedrunCustomCategoryEntry& obj) { + json_serialize(name); + json_serialize(secrets); + json_serialize(features); + json_serialize(vehicles); + json_serialize(forbidden_features); + json_serialize(cheats); + json_serialize(continue_point_name); + json_serialize(completed_task); +} + +void from_json(const json& j, SpeedrunCustomCategoryEntry& obj) { + json_deserialize_if_exists(name); + json_deserialize_if_exists(secrets); + json_deserialize_if_exists(features); + json_deserialize_if_exists(vehicles); + json_deserialize_if_exists(forbidden_features); + json_deserialize_if_exists(cheats); + json_deserialize_if_exists(continue_point_name); + json_deserialize_if_exists(completed_task); +} + +std::vector g_speedrun_practice_entries; +std::unordered_map g_speedrun_practice_state; + +s32 pc_sr_mode_get_practice_entries_amount() { + // load practice entries from the file + const auto file_path = + file_util::get_user_features_dir(g_game_version) / "speedrun-practice.json"; + if (!file_util::file_exists(file_path.string())) { + lg::info("speedrun-practice.json not found, no entries to return!"); + return 0; + } + const auto file_contents = safe_parse_json(file_util::read_text_file(file_path)); + if (!file_contents) { + lg::error("speedrun-practice.json could not be parsed!"); + return 0; + } + + g_speedrun_practice_entries = *file_contents; + + for (size_t i = 0; i < g_speedrun_practice_entries.size(); i++) { + const auto& entry = g_speedrun_practice_entries.at(i); + s32 last_session_id = -1; + s32 total_attempts = 0; + s32 total_successes = 0; + s32 session_attempts = 0; + s32 session_successes = 0; + double total_time = 0; + float average_time = 0; + float fastest_time = 0; + for (const auto& [history_session, times] : entry.history) { + s32 session_id = stoi(history_session); + if (session_id > last_session_id) { + last_session_id = session_id; + } + for (const auto& time : times) { + total_attempts++; + if (time.time) { + total_successes++; + total_time += *time.time; + if (fastest_time == 0 || *time.time < fastest_time) { + fastest_time = *time.time; + } + } + } + } + if (total_successes != 0) { + average_time = total_time / total_successes; + } + g_speedrun_practice_state[i] = {last_session_id + 1, total_attempts, total_successes, + session_attempts, session_successes, total_time, + average_time, fastest_time}; + } + + return g_speedrun_practice_entries.size(); +} + +void pc_sr_mode_get_practice_entry_name(s32 entry_index, u32 name_str_ptr) { + std::string name; + if (entry_index < (int)g_speedrun_practice_entries.size()) { + name = g_speedrun_practice_entries.at(entry_index).name; + } + strcpy(Ptr(name_str_ptr).c()->data(), name.c_str()); +} + +void pc_sr_mode_get_practice_entry_continue_point(s32 entry_index, u32 name_str_ptr) { + std::string name; + if (entry_index < (int)g_speedrun_practice_entries.size()) { + name = g_speedrun_practice_entries.at(entry_index).continue_point_name; + } + strcpy(Ptr(name_str_ptr).c()->data(), name.c_str()); +} + +s32 pc_sr_mode_get_practice_entry_history_success(s32 entry_index) { + return g_speedrun_practice_state.at(entry_index).total_successes; +} + +s32 pc_sr_mode_get_practice_entry_history_attempts(s32 entry_index) { + return g_speedrun_practice_state.at(entry_index).total_attempts; +} + +s32 pc_sr_mode_get_practice_entry_session_success(s32 entry_index) { + return g_speedrun_practice_state.at(entry_index).session_successes; +} + +s32 pc_sr_mode_get_practice_entry_session_attempts(s32 entry_index) { + return g_speedrun_practice_state.at(entry_index).session_attempts; +} + +void pc_sr_mode_get_practice_entry_avg_time(s32 entry_index, u32 time_str_ptr) { + const auto time = fmt::format("{:.2f}", g_speedrun_practice_state.at(entry_index).average_time); + strcpy(Ptr(time_str_ptr).c()->data(), time.c_str()); +} + +void pc_sr_mode_get_practice_entry_fastest_time(s32 entry_index, u32 time_str_ptr) { + const auto time = fmt::format("{:.2f}", g_speedrun_practice_state.at(entry_index).fastest_time); + strcpy(Ptr(time_str_ptr).c()->data(), time.c_str()); +} + +u64 pc_sr_mode_record_practice_entry_attempt(s32 entry_index, u32 success_bool, u32 time_ptr) { + auto& state = g_speedrun_practice_state.at(entry_index); + const auto was_successful = symbol_to_bool(success_bool); + state.total_attempts++; + state.session_attempts++; + bool ret = false; + SpeedrunPracticeEntryHistoryAttempt new_history_entry; + if (was_successful) { + auto time = Ptr(time_ptr).c(); + new_history_entry.time = *time; + state.total_successes++; + state.session_successes++; + state.total_time += *time; + state.average_time = state.total_time / state.total_successes; + if (*time < state.fastest_time) { + state.fastest_time = *time; + ret = true; + } + } + // persist to file + const auto file_path = + file_util::get_user_features_dir(g_game_version) / "speedrun-practice.json"; + if (!file_util::file_exists(file_path.string())) { + lg::info("speedrun-practice.json not found, not persisting!"); + } else { + auto& history = g_speedrun_practice_entries.at(entry_index).history; + if (history.find(fmt::format("{}", state.current_session_id)) == history.end()) { + history[fmt::format("{}", state.current_session_id)] = {}; + } + history[fmt::format("{}", state.current_session_id)].push_back(new_history_entry); + json data = g_speedrun_practice_entries; + file_util::write_text_file(file_path, data.dump(2)); + } + // return + return bool_to_symbol(ret); +} + +void pc_sr_mode_init_practice_info(s32 entry_index, u32 speedrun_practice_obj_ptr) { + if (entry_index >= (int)g_speedrun_practice_entries.size()) { + return; + } + + auto objective = speedrun_practice_obj_ptr + ? Ptr(speedrun_practice_obj_ptr).c() + : NULL; + if (objective) { + const auto& json_info = g_speedrun_practice_entries.at(entry_index); + + objective->index = entry_index; + objective->flags = json_info.flags; + objective->completed_task = json_info.completed_task; + objective->features = json_info.features; + objective->vehicles = json_info.vehicles; + objective->secrets = json_info.secrets; + auto starting_position = + objective->starting_position ? Ptr(objective->starting_position).c() : NULL; + if (starting_position) { + for (int i = 0; i < 4; i++) { + starting_position->data[i] = json_info.starting_position.at(i) * METER_LENGTH; + } + } + auto starting_rotation = + objective->starting_rotation ? Ptr(objective->starting_rotation).c() : NULL; + if (starting_rotation) { + for (int i = 0; i < 4; i++) { + starting_rotation->data[i] = json_info.starting_rotation.at(i); + } + } + auto starting_camera_position = objective->starting_camera_position + ? Ptr(objective->starting_camera_position).c() + : NULL; + if (starting_camera_position) { + for (int i = 0; i < 4; i++) { + starting_camera_position->data[i] = json_info.starting_camera_position.at(i) * 4096.0; + } + } + auto starting_camera_rotation = objective->starting_camera_rotation + ? Ptr(objective->starting_camera_rotation).c() + : NULL; + if (starting_camera_rotation) { + for (int i = 0; i < 16; i++) { + starting_camera_rotation->data[i] = json_info.starting_camera_rotation.at(i); + } + } + + if (json_info.end_task) { + objective->end_task = *json_info.end_task; + } else { + objective->end_task = 0; + } + + auto starting_zone = objective->start_zone_init_params + ? Ptr(objective->start_zone_init_params).c() + : NULL; + if (starting_zone) { + starting_zone->v1[0] = json_info.start_zone_v1.at(0) * METER_LENGTH; + starting_zone->v1[1] = json_info.start_zone_v1.at(1) * METER_LENGTH; + starting_zone->v1[2] = json_info.start_zone_v1.at(2) * METER_LENGTH; + starting_zone->v1[3] = json_info.start_zone_v1.at(3) * METER_LENGTH; + starting_zone->v2[0] = json_info.start_zone_v2.at(0) * METER_LENGTH; + starting_zone->v2[1] = json_info.start_zone_v2.at(1) * METER_LENGTH; + starting_zone->v2[2] = json_info.start_zone_v2.at(2) * METER_LENGTH; + starting_zone->v2[3] = json_info.start_zone_v2.at(3) * METER_LENGTH; + } + + if (json_info.end_zone_v1 && json_info.end_zone_v2) { + auto ending_zone = objective->end_zone_init_params + ? Ptr(objective->end_zone_init_params).c() + : NULL; + if (ending_zone) { + ending_zone->v1[0] = json_info.end_zone_v1->at(0) * METER_LENGTH; + ending_zone->v1[1] = json_info.end_zone_v1->at(1) * METER_LENGTH; + ending_zone->v1[2] = json_info.end_zone_v1->at(2) * METER_LENGTH; + ending_zone->v1[3] = json_info.end_zone_v1->at(3) * METER_LENGTH; + ending_zone->v2[0] = json_info.end_zone_v2->at(0) * METER_LENGTH; + ending_zone->v2[1] = json_info.end_zone_v2->at(1) * METER_LENGTH; + ending_zone->v2[2] = json_info.end_zone_v2->at(2) * METER_LENGTH; + ending_zone->v2[3] = json_info.end_zone_v2->at(3) * METER_LENGTH; + } + } + } +} + +std::vector g_speedrun_custom_categories; + +s32 pc_sr_mode_get_custom_category_amount() { + // load practice entries from the file + const auto file_path = + file_util::get_user_features_dir(g_game_version) / "speedrun-categories.json"; + if (!file_util::file_exists(file_path.string())) { + lg::info("speedrun-categories.json not found, no entries to return!"); + return 0; + } + const auto file_contents = safe_parse_json(file_util::read_text_file(file_path)); + if (!file_contents) { + lg::error("speedrun-categories.json could not be parsed!"); + return 0; + } + + g_speedrun_custom_categories = *file_contents; + + return g_speedrun_custom_categories.size(); +} + +void pc_sr_mode_get_custom_category_name(s32 entry_index, u32 name_str_ptr) { + std::string name; + if (entry_index < (int)g_speedrun_custom_categories.size()) { + name = g_speedrun_custom_categories.at(entry_index).name; + } + strcpy(Ptr(name_str_ptr).c()->data(), name.c_str()); +} + +void pc_sr_mode_get_custom_category_continue_point(s32 entry_index, u32 name_str_ptr) { + std::string name; + if (entry_index < (int)g_speedrun_custom_categories.size()) { + name = g_speedrun_custom_categories.at(entry_index).continue_point_name; + } + strcpy(Ptr(name_str_ptr).c()->data(), name.c_str()); +} + +void pc_sr_mode_init_custom_category_info(s32 entry_index, u32 speedrun_custom_category_ptr) { + if (entry_index >= (int)g_speedrun_custom_categories.size()) { + return; + } + + auto category = speedrun_custom_category_ptr + ? Ptr(speedrun_custom_category_ptr).c() + : NULL; + if (category) { + const auto& json_info = g_speedrun_custom_categories.at(entry_index); + category->index = entry_index; + category->secrets = json_info.secrets; + category->features = json_info.features; + category->vehicles = json_info.vehicles; + category->forbidden_features = json_info.forbidden_features; + category->cheats = json_info.cheats; + category->completed_task = json_info.completed_task; + } +} + +void pc_sr_mode_dump_new_custom_category(u32 speedrun_custom_category_ptr) { + const auto file_path = + file_util::get_user_features_dir(g_game_version) / "speedrun-categories.json"; + if (file_util::file_exists(file_path.string())) { + // read current categories from file + const auto file_contents = safe_parse_json(file_util::read_text_file(file_path)); + if (file_contents) { + g_speedrun_custom_categories = *file_contents; + } + } + + auto category = speedrun_custom_category_ptr + ? Ptr(speedrun_custom_category_ptr).c() + : NULL; + if (category) { + SpeedrunCustomCategoryEntry new_category; + new_category.name = fmt::format("custom-category-{}", g_speedrun_custom_categories.size()); + new_category.secrets = category->secrets; + new_category.features = category->features; + new_category.vehicles = category->vehicles; + new_category.forbidden_features = category->forbidden_features; + new_category.cheats = category->cheats; + new_category.completed_task = category->completed_task; + new_category.continue_point_name = ""; + g_speedrun_custom_categories.push_back(new_category); + // convert to json and write file + json data = g_speedrun_custom_categories; + file_util::write_text_file(file_path, data.dump(2)); + } +} + +} // namespace kmachine_extras +} // namespace jakx diff --git a/game/kernel/jakx/kmachine_extras.h b/game/kernel/jakx/kmachine_extras.h new file mode 100644 index 0000000000..30390a7e30 --- /dev/null +++ b/game/kernel/jakx/kmachine_extras.h @@ -0,0 +1,261 @@ +#pragma once +#include +#include + +#include "common/common_types.h" +#include "common/util/json_util.h" + +namespace jakx { +namespace kmachine_extras { +void update_discord_rpc(u32 discord_info); +void pc_set_levels(u32 lev_list); +void pc_set_active_levels(u32 lev_list); +u32 alloc_vagdir_names(u32 heap_sym); +inline u64 bool_to_symbol(const bool val); +void init_autosplit_struct(); +void callback_fetch_external_speedrun_times(bool success, + const std::string& cache_id, + std::optional result); +void callback_fetch_external_race_times(bool success, + const std::string& cache_id, + std::optional result); +void callback_fetch_external_highscores(bool success, + const std::string& cache_id, + std::optional result); +void pc_fetch_external_speedrun_times(u32 speedrun_id_ptr); +void pc_fetch_external_race_times(u32 race_id_ptr); +void pc_fetch_external_highscores(u32 highscore_id_ptr); +void pc_get_external_speedrun_time(u32 speedrun_id_ptr, + s32 index, + u32 name_dest_ptr, + u32 time_dest_ptr); +void pc_get_external_race_time(u32 race_id_ptr, s32 index, u32 name_dest_ptr, u32 time_dest_ptr); +void pc_get_external_highscore(u32 highscore_id_ptr, + s32 index, + u32 name_dest_ptr, + u32 time_dest_ptr); +s32 pc_get_num_external_speedrun_times(u32 speedrun_id_ptr); +s32 pc_get_num_external_race_times(u32 race_id_ptr); +s32 pc_get_num_external_highscores(u32 highscore_id_ptr); +s32 pc_sr_mode_get_practice_entries_amount(); +void pc_sr_mode_get_practice_entry_name(s32 entry_index, u32 name_str_ptr); +void pc_sr_mode_get_practice_entry_continue_point(s32 entry_index, u32 name_str_ptr); +s32 pc_sr_mode_get_practice_entry_history_success(s32 entry_index); +s32 pc_sr_mode_get_practice_entry_history_attempts(s32 entry_index); +s32 pc_sr_mode_get_practice_entry_session_success(s32 entry_index); +s32 pc_sr_mode_get_practice_entry_session_attempts(s32 entry_index); +void pc_sr_mode_get_practice_entry_avg_time(s32 entry_index, u32 time_str_ptr); +void pc_sr_mode_get_practice_entry_fastest_time(s32 entry_index, u32 time_str_ptr); +u64 pc_sr_mode_record_practice_entry_attempt(s32 entry_index, u32 success_bool, u32 time); +void pc_sr_mode_init_practice_info(s32 entry_index, u32 speedrun_practice_obj_ptr); +s32 pc_sr_mode_get_custom_category_amount(); +void pc_sr_mode_get_custom_category_name(s32 entry_index, u32 name_str_ptr); +void pc_sr_mode_get_custom_category_continue_point(s32 entry_index, u32 name_str_ptr); +void pc_sr_mode_init_custom_category_info(s32 entry_index, u32 speedrun_custom_category_ptr); +void pc_sr_mode_dump_new_custom_category(u32 speedrun_custom_category_ptr); + +struct DiscordInfo { + float orb_count; // float + float gem_count; // float + s32 death_count; // int32 + u32 status; // string + u32 level; // string + u32 cutscene; // symbol - bool + float time_of_day; // float + float percent_completed; // float + u64 focus_status; // uint64 + s32 current_vehicle; // int32 + u32 task; // string +}; + +enum class VehicleType : s32 { + h_bike_a = 0, + h_bike_b = 1, + h_bike_c = 2, + h_car_a = 3, + h_car_b = 4, + h_car_c = 5, + h_bike_d = 6, + h_hellcat = 7, + h_warf = 8, + h_glider = 9, + h_sled = 10, + h_kg_pickup = 11, + v_turtle = 12, + v_snake = 13, + v_scorpion = 14, + v_toad = 15, + v_fox = 16, + v_rhino = 17, + v_mirage = 18, + v_x_ride = 19, + v_marauder = 20, + v_faccar = 21, + v_catapult = 22, + v_marauder_b = 23, + test_car = 25, + wbike_test = 26, + vt27 = 27, + evan_test_bike = 29, + Max = 30 +}; + +const std::map vehicle_remap = { + {VehicleType::v_turtle, "Tough Puppy"}, {VehicleType::v_snake, "Sand Shark"}, + {VehicleType::v_toad, "Dune Hopper"}, {VehicleType::v_scorpion, "Gila Stomper"}, + {VehicleType::v_fox, "Heat Seeker"}, {VehicleType::v_rhino, "Slam Dozer"}, + {VehicleType::v_mirage, "Dust Demon"}, {VehicleType::v_x_ride, "Desert Screamer"}, +}; + +inline std::string VehicleTypeToString(VehicleType v) { + return vehicle_remap.find(v) != vehicle_remap.end() ? vehicle_remap.at(v) : "Unknown"; +} + +enum class FocusStatus : u64 { + Disable = 0, + Dead = 1, + Ignore = 2, + Inactive = 3, + Dangerous = 4, + InAir = 5, + Hit = 6, + Grabbed = 7, + InHead = 8, + TouchWater = 9, + OnWater = 10, + UnderWater = 11, + EdgeGrab = 12, + Pole = 13, + PilotRiding = 14, + Flut = 15, + Tube = 16, + Light = 17, + Board = 18, + Gun = 19, + Pilot = 20, + Mech = 21, + Dark = 22, + Rail = 23, + Halfpipe = 24, + Carry = 25, + Super = 26, + Shooting = 27, + Indax = 28, + Arrestable = 29, + Teleporting = 30, + Invulnerable = 31, + Turret = 32, + NoGravity = 33, + GunNoTarget = 34, + Max = 64 +}; + +#define FOCUS_TEST(status, foc) (status.test(static_cast(foc))) + +// To speed up finding the auto-splitter block in GOAL memory +// all this has is a marker for LiveSplit to find, and then the pointer +// to the symbol +struct AutoSplitterBlock { + const char marker[20] = "UnLiStEdStRaTs_JaKx"; // ? + u64 pointer_to_symbol = 0; +}; + +extern AutoSplitterBlock g_auto_splitter_block_jakx; + +struct SpeedrunPracticeEntryHistoryAttempt { + std::optional time; +}; +void to_json(json& j, const SpeedrunPracticeEntryHistoryAttempt& obj); +void from_json(const json& j, SpeedrunPracticeEntryHistoryAttempt& obj); + +struct SpeedrunPracticeEntry { + std::string name; + std::string continue_point_name; + u64 flags; + u64 completed_task; + u64 features; + u64 secrets; + u64 vehicles; + std::vector starting_position; + std::vector starting_rotation; + std::vector starting_camera_position; + std::vector starting_camera_rotation; + std::vector start_zone_v1; + std::vector start_zone_v2; + std::optional> end_zone_v1; + std::optional> end_zone_v2; + std::optional end_task; + std::map> history; +}; +void to_json(json& j, const SpeedrunPracticeEntry& obj); +void from_json(const json& j, SpeedrunPracticeEntry& obj); + +struct SpeedrunPracticeState { + s32 current_session_id; + s32 total_attempts; + s32 total_successes; + s32 session_attempts; + s32 session_successes; + double total_time; + float average_time; + float fastest_time; +}; + +struct ObjectiveZoneInitParams { + float v1[4]; + float v2[4]; +}; + +struct Vector { + float data[4]; +}; + +struct Matrix { + float data[16]; +}; + +struct SpeedrunPracticeObjective { + s32 index; + u8 pad1[4]; + u64 flags; + u8 completed_task; + u8 pad2[7]; + u64 features; + u64 secrets; + u64 vehicles; + u32 starting_position; // Vector + u32 starting_rotation; // Vector + u32 starting_camera_position; // Vector + u32 starting_camera_rotation; // Matrix + u8 end_task; + u32 start_zone_init_params; // ObjectiveZoneInitParams + u32 start_zone; // irrelevant for cpp + u32 end_zone_init_params; // ObjectiveZoneInitParams + u32 end_zone; // irrelevant for cpp +}; + +struct SpeedrunCustomCategoryEntry { + std::string name; + u64 secrets; + u64 features; + u64 vehicles; + u64 forbidden_features; + u64 cheats; + std::string continue_point_name; + u64 completed_task; +}; +void to_json(json& j, const SpeedrunCustomCategoryEntry& obj); +void from_json(const json& j, SpeedrunCustomCategoryEntry& obj); + +struct SpeedrunCustomCategory { + s32 index; + u64 secrets; + u64 features; + u64 vehicles; + u64 forbidden_features; + u64 cheats; + u8 completed_task; +}; + +} // namespace kmachine_extras +} // namespace jakx diff --git a/game/kernel/jakx/kmalloc.cpp b/game/kernel/jakx/kmalloc.cpp new file mode 100644 index 0000000000..7b0dbcc19d --- /dev/null +++ b/game/kernel/jakx/kmalloc.cpp @@ -0,0 +1,16 @@ +#include "kmalloc.h" + +namespace jakx { +// these functions are all stubs in all known copies of the ELF. +void kmemopen_from_c(Ptr heap, const char* name) { + (void)heap; + (void)name; +} + +void kmemopen(u32 heap, u32 name) { + (void)heap; + (void)name; +} + +void kmemclose() {} +} // namespace jakx diff --git a/game/kernel/jakx/kmalloc.h b/game/kernel/jakx/kmalloc.h new file mode 100644 index 0000000000..7f2d172af6 --- /dev/null +++ b/game/kernel/jakx/kmalloc.h @@ -0,0 +1,9 @@ +#pragma once + +#include "game/kernel/common/kmalloc.h" + +namespace jakx { +void kmemopen_from_c(Ptr heap, const char* name); +void kmemopen(u32 heap, u32 name); +void kmemclose(); +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/kmemcard.cpp b/game/kernel/jakx/kmemcard.cpp new file mode 100644 index 0000000000..8deabc1a12 --- /dev/null +++ b/game/kernel/jakx/kmemcard.cpp @@ -0,0 +1,3 @@ + + +#include "kmemcard.h" diff --git a/game/kernel/jakx/kmemcard.h b/game/kernel/jakx/kmemcard.h new file mode 100644 index 0000000000..0d2e1c062d --- /dev/null +++ b/game/kernel/jakx/kmemcard.h @@ -0,0 +1,3 @@ +#pragma once + +namespace jakx {} \ No newline at end of file diff --git a/game/kernel/jakx/kprint.cpp b/game/kernel/jakx/kprint.cpp new file mode 100644 index 0000000000..21f35d0dda --- /dev/null +++ b/game/kernel/jakx/kprint.cpp @@ -0,0 +1,569 @@ +#include "kprint.h" + +#include +#include + +#include "common/goal_constants.h" +#include "common/listener_common.h" +#include "common/log/log.h" +#include "common/symbols.h" + +#include "game/kernel/common/fileio.h" +#include "game/kernel/common/kboot.h" +#include "game/kernel/common/klisten.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/jakx/kscheme.h" +#include "game/sce/sif_ee.h" + +/*! + * The GOAL "format" function. The actual function is named "format". However, GOAL's calling + * convention differs from x86-64, so GOAL cannot directly call format. There is an assembly + * function in format_wrapper.nasm named format. It takes the GOAL argument registers, stores them + * in an array on the stack, and calls this function with a pointer to that array. + * + * This function is a disaster. For now, it's copied from jak1 and then jak 2, with the obvious + * fixes made, but it's probably worth another pass. + */ +s32 format_impl_jakx(uint64_t* args) { + using namespace jakx_symbols; + using namespace jakx; + + // first two args are dest, format string + uint64_t* arg_regs = args + 2; + + // data for arguments in a format command + format_struct argument_data[8]; + + u32 arg_reg_idx = 0; + + // the gstring + char* format_gstring = Ptr(args[1]).c(); + + u32 original_dest = args[0]; + + // set up print pending + char* print_temp = PrintPending.cast().c(); + if (!PrintPending.offset) { + print_temp = PrintBufArea.cast().c() + sizeof(ListenerMessageHeader); + } + PrintPending = make_ptr(strend(print_temp)).cast(); + assert_print_buffer_has_room(PrintPending.c()); + + // what we write to + char* output_ptr = PrintPending.cast().c(); + + // convert gstring to cstring + char* format_cstring = format_gstring + 4; + + // mysteries + char* PrintPendingLocal2 = PrintPending.cast().c(); + char* PrintPendingLocal3 = output_ptr; + + // start by computing indentation + u32 indentation = 0; + + // read goal binteger + if (print_column.offset) { + // added the if check so we can format even if the kernel didn't load right. + indentation = (*(print_column - 1)) >> 3; + } + + // which arg we're on + u32 arg_idx = 0; + + // if last char was newline and we have tabs, do tabs + if (indentation && output_ptr[-1] == '\n') { + for (u32 i = 0; i < indentation; i++) { + *output_ptr = ' '; + output_ptr++; + } + } + + // input pointer + char* format_ptr = format_cstring; + + // loop over the format string + while (*format_ptr) { + // got a command? + if (*format_ptr == '~') { + char* arg_start = format_ptr; + // get some arguments + arg_idx = 0; + u8 justify = 0; + for (auto& x : argument_data) { + x.reset(); + } + + // read arguments + while ((u8)(format_ptr[1] - '0') < 10 || // number 0 to 9 + format_ptr[1] == ',' || // comma + format_ptr[1] == '\'' || // quote + format_ptr[1] == '`' || // backtick + (argument_data[arg_idx].data[0] == -1 && + (format_ptr[1] == '-' || format_ptr[1] == '+') // flags1 == -1 && +/- + )) { + // here format_ptr[1] points to next unread character in argument + // format_ptr[0] is originally the ~ + // should exit loop with format_ptr[1] == the command character + char arg_char = format_ptr[1]; // gVar1 + + if (arg_char == ',') { + // advance to next argument + arg_idx++; // increment which argument we're on + format_ptr++; // increment past comma, and try again + continue; + } + + // character argument + if (arg_char == '\'') { // 0x27 + argument_data[arg_idx].data[0] = format_ptr[2]; + format_ptr += 2; + continue; + } + + // string argument + if (arg_char == '`') { // 0x60 + u32 i = 0; + format_ptr += 2; + // read string + while (*format_ptr != '`') { + argument_data[arg_idx].data[i] = *format_ptr; + i++; + format_ptr++; + } + // null terminate + argument_data[arg_idx].data[i] = 0; + continue; + } + + if (arg_char == '-') { // 0x2d + // negative flag + argument_data[arg_idx].data[1] = 1; + format_ptr++; + continue; + } + + if (arg_char == '+') { // 0x2b + // positive flag does nothing + format_ptr++; + continue; + } + + // otherwise: + + // null terminate if we got no args + if (argument_data[arg_idx].data[0] == -1) { + argument_data[arg_idx].data[0] = 0; + } + + // otherwise it's a number + argument_data[arg_idx].data[0] = argument_data[arg_idx].data[0] * 10 + arg_char - '0'; + format_ptr++; + } // end argument while + + // switch on command + switch (format_ptr[1]) { + // offset of 0x25 + + case '%': // newline + *output_ptr = '\n'; + output_ptr++; + // indent the next line if there is one + if (indentation && format_ptr[2]) { + for (u32 i = 0; i < indentation; i++) { + *output_ptr = ' '; + output_ptr++; + } + } + break; + + case '~': // tilde escape + *output_ptr = '~'; + output_ptr++; + break; + + // pass through arguments + case 'H': // 23 -> 48, H + case 'J': // 25 -> 4A, J + case 'K': // 26 -> 4B, K + case 'L': // 27 -> 4C, L + case 'N': // 29 -> 4E, N + case 'V': // 31 -> 56, V + case 'W': // 32 -> 57, W + case 'Y': // 34 -> 59, Y + case 'Z': // 35 -> 5A, Z + case 'h': + case 'j': + case 'k': + case 'l': + case 'n': + case 'v': + case 'w': + case 'y': + case 'z': + while (arg_start < format_ptr + 1) { + *output_ptr = *arg_start; + arg_start++; + output_ptr++; + } + *output_ptr = format_ptr[1]; + output_ptr++; + break; + + case 'G': // like %s, prints a C string + case 'g': { + *output_ptr = 0; + u32 in = arg_regs[arg_reg_idx++]; + kstrcat(output_ptr, Ptr(in).c()); + output_ptr = strend(output_ptr); + } break; + + case 'O': + case 'o': { + *output_ptr = '~'; + output_ptr++; + kitoa(output_ptr, arg_regs[arg_reg_idx++], 10, 0, ' ', 0); + output_ptr = strend(output_ptr); + *output_ptr = 'u'; + output_ptr++; + } break; + + case 'A': // print a boxed object + case 'a': // pad,padchar (like ) ~8,'0A + { + s8 arg0 = argument_data[0].data[0]; + s32 desired_length = arg0; + *output_ptr = 0; + u32 in = arg_regs[arg_reg_idx++]; + jakx::print_object(in); + if (desired_length != -1) { + s32 print_len = strlen(output_ptr); + if (desired_length < print_len) { + // too long! + if (desired_length > 1) { // mark with tilde that we will truncate + output_ptr[desired_length - 1] = '~'; + } + output_ptr[desired_length] = 0; // and truncate + } else if (print_len < desired_length) { + // too short + if (justify == 0) { + char pad = ' '; + if (argument_data[1].data[0] != -1) { + pad = argument_data[1].data[0]; + } + kstrinsert(output_ptr, pad, desired_length - print_len); + } else { + ASSERT(false); + // output_ptr = strend(output_ptr); + // while(0 < (desired_length - print_len)) { + // char pad = ' '; + // if(argument_data[0].data[1] != -1) { + // pad = argument_data[0].data[1]; + // } + // output_ptr[0] = pad; + // output_ptr++; + // + // } + // *output_ptr = 0; + } + } + } + output_ptr = strend(output_ptr); + + } break; + + case 'S': // like A, but strings are printed without quotes + case 's': { + s8 arg0 = argument_data[0].data[0]; + s32 desired_length = arg0; + *output_ptr = 0; + u32 in = arg_regs[arg_reg_idx++]; + + // if it's a string + if (((in & 0x7) == 0x4) && *Ptr(in - 4) == *(s7 + FIX_SYM_STRING_TYPE - 1)) { + cprintf("%s", Ptr(in).c() + 4); + } else { + jakx::print_object(in); + } + + if (desired_length != -1) { + s32 print_len = strlen(output_ptr); + if (desired_length < print_len) { + // too long! + if (desired_length > 1) { // mark with tilde that we will truncate + output_ptr[desired_length - 1] = '~'; + } + output_ptr[desired_length] = 0; // and truncate + } else if (print_len < desired_length) { + // too short + if (justify == 0) { + char pad = ' '; + if (argument_data[1].data[0] != -1) { + pad = argument_data[1].data[0]; + } + kstrinsert(output_ptr, pad, desired_length - print_len); + + } else { + ASSERT(false); + // output_ptr = strend(output_ptr); + // u32 l140 = 0; + // while(l140 < (desired_length - print_len)) { + // char* l108 = output_ptr; + // + // char pad = ' '; + // if(argument_data[0].data[1] != -1) { + // pad = argument_data[0].data[1]; + // } + // output_ptr[0] = pad; + // output_ptr++; + // } + // *output_ptr = 0; + } + } + } + output_ptr = strend(output_ptr); + } break; + + case 'C': // character + case 'c': + *output_ptr = arg_regs[arg_reg_idx++]; + output_ptr++; + break; + + case 'P': // like ~A, but can specify type explicitly + case 'p': { + *output_ptr = 0; + s8 arg0 = argument_data[0].data[0]; + u64 in = arg_regs[arg_reg_idx++]; + if (arg0 == -1) { + jakx::print_object(in); + } else { + auto sym = jakx::find_symbol_from_c(-1, argument_data[0].data); + if (sym.offset) { + Ptr type(sym->value()); + if (type.offset) { + call_method_of_type(in, type, GOAL_PRINT_METHOD); + } + } else { + ASSERT(false); // bad type. + } + } + output_ptr = strend(output_ptr); + } break; + + case 'I': // like ~P, but calls inpsect + case 'i': { + *output_ptr = 0; + s8 arg0 = argument_data[0].data[0]; + u64 in = arg_regs[arg_reg_idx++]; + if (arg0 == -1) { + inspect_object(in); + } else { + auto sym = find_symbol_from_c(-1, argument_data[0].data); + if (sym.offset) { + Ptr type(sym->value()); + if (type.offset) { + call_method_of_type(in, type, GOAL_INSPECT_METHOD); + } + } else { + ASSERT(false); // bad type + } + } + output_ptr = strend(output_ptr); + } break; + + case 'Q': // not yet implemented. hopefully andy gavin finishes this one soon. + case 'q': + ASSERT(false); + break; + + case 'X': // hex, 64 bit, pad padchar + case 'x': { + char pad = '0'; + if (argument_data[1].data[0] != -1) { + pad = argument_data[1].data[0]; + } + u64 in = arg_regs[arg_reg_idx++]; + kitoa(output_ptr, in, 16, argument_data[0].data[0], pad, 0); + output_ptr = strend(output_ptr); + } break; + + case 'D': // integer 64, pad padchar + case 'd': { + char pad = ' '; + if (argument_data[1].data[0] != -1) { + pad = argument_data[1].data[0]; + } + u64 in = arg_regs[arg_reg_idx++]; + kitoa(output_ptr, in, 10, argument_data[0].data[0], pad, 0); + output_ptr = strend(output_ptr); + } break; + + case 'B': // integer 64, pad padchar + case 'b': { + char pad = '0'; + if (argument_data[1].data[0] != -1) { + pad = argument_data[1].data[0]; + } + u64 in = arg_regs[arg_reg_idx++]; + kitoa(output_ptr, in, 2, argument_data[0].data[0], pad, 0); + output_ptr = strend(output_ptr); + } break; + + case 'F': // float 12 pad, 4 precision + { + float in = *(float*)&arg_regs[arg_reg_idx++]; + ftoa(output_ptr, in, 0xc, ' ', 4, 0); + output_ptr = strend(output_ptr); + } break; + + case 'f': // float with args + { + float in = *(float*)&arg_regs[arg_reg_idx++]; + s8 pad_length = argument_data[0].data[0]; + s8 pad_char = argument_data[1].data[0]; + if (pad_char == -1) + pad_char = ' '; + s8 precision = argument_data[2].data[0]; + if (precision == -1) + precision = 4; + ftoa(output_ptr, in, pad_length, pad_char, precision, 0); + output_ptr = strend(output_ptr); + } break; + + case 'R': // rotation degrees + case 'r': { + float in = *(float*)&arg_regs[arg_reg_idx++]; + s8 pad_length = argument_data[0].data[0]; + s8 pad_char = argument_data[1].data[0]; + if (pad_char == -1) + pad_char = ' '; + s8 precision = argument_data[2].data[0]; + if (precision == -1) + precision = 4; + ftoa(output_ptr, in * 360.f / 65536.f, pad_length, pad_char, precision, 0); + output_ptr = strend(output_ptr); + } break; + + case 'M': // distance meters + case 'm': { + float in = *(float*)&arg_regs[arg_reg_idx++]; + s8 pad_length = argument_data[0].data[0]; + s8 pad_char = argument_data[1].data[0]; + if (pad_char == -1) + pad_char = ' '; + s8 precision = argument_data[2].data[0]; + if (precision == -1) + precision = 4; + ftoa(output_ptr, in / 4096.f, pad_length, pad_char, precision, 0); + output_ptr = strend(output_ptr); + } break; + + case 'E': // time seconds + case 'e': { + s64 in = arg_regs[arg_reg_idx++]; + s8 pad_length = argument_data[0].data[0]; + s8 pad_char = argument_data[0].data[1]; + if (pad_char == -1) + pad_char = ' '; + s8 precision = argument_data[0].data[2]; + if (precision == -1) + precision = 4; + float value; + if (in < 0) { + ASSERT(false); // i don't get this one + } else { + value = in; + } + ftoa(output_ptr, value / 300.f, pad_length, pad_char, precision, 0); + output_ptr = strend(output_ptr); + } break; + + case 'T': + case 't': { + sprintf(output_ptr, "\t"); + output_ptr = strend(output_ptr); + } break; + + default: + MsgErr("format: unknown code 0x%02x\n", format_ptr[1]); + MsgErr("input was %s\n", format_cstring); + // ASSERT(false); + goto copy_char_hack; + break; + } + format_ptr++; + } else { + // got normal char, just copy it + copy_char_hack: // we goto here if we get a bad code for ~, which sort of backtracks and falls + // back to regular character copying + *output_ptr = *format_ptr; + output_ptr++; + } + format_ptr++; + } // end format string while + + // end + *output_ptr = 0; + output_ptr++; + assert_print_buffer_has_room((const u8*)output_ptr); + + if (original_dest == s7.offset + FIX_SYM_TRUE) { + // #t means to put it in the print buffer + + // change for Jak 2: if we are disk-booting and do a (format #t, immediately flush to stdout. + // we'd get these eventually in ClearPending, but for some reason they flush these here. + // This is nicer because we may crash in between here and flushing the print buffer. + if (DiskBoot) { + // however, we are going to disable it anyway because it spams the console and is annoying + if (false) { + lg::print("{}", PrintPendingLocal3); + // printf("%s", PrintPendingLocal3); + // fflush(stdout); + } + PrintPending = make_ptr(PrintPendingLocal2).cast(); + // if we don't comment this line, our output gets cleared + // *PrintPendingLocal3 = 0; + } + + return 0; + } else if (original_dest == s7.offset + FIX_SYM_FALSE) { + // #f means print to new string + u32 string = make_string_from_c(PrintPendingLocal3); + PrintPending = make_ptr(PrintPendingLocal2).cast(); + *PrintPendingLocal3 = 0; + return string; + } else if (original_dest == 0) { + lg::print("{}", PrintPendingLocal3); + // printf("%s", PrintPendingLocal3); + // fflush(stdout); + PrintPending = make_ptr(PrintPendingLocal2).cast(); + *PrintPendingLocal3 = 0; + return 0; + } else { + if ((original_dest & OFFSET_MASK) == BASIC_OFFSET) { + Ptr type = *Ptr>(original_dest - 4); + if (type == *Ptr>(s7.offset + FIX_SYM_STRING_TYPE - 1)) { + u32 len = *Ptr(original_dest); + char* str = Ptr(original_dest + 4).c(); + kstrncat(str, PrintPendingLocal3, len); + PrintPending = make_ptr(PrintPendingLocal2).cast(); + *PrintPendingLocal3 = 0; + return 0; + } else if (type == *Ptr>(s7.offset + FIX_SYM_FILE_STREAM - 1)) { + size_t len = strlen(PrintPendingLocal3); + // sceWrite + ee::sceWrite(*Ptr(original_dest + 12), PrintPendingLocal3, len); + + PrintPending = make_ptr(PrintPendingLocal2).cast(); + *PrintPendingLocal3 = 0; + return 0; + } + } + ASSERT(false); // unknown destination + return 0; + } + + ASSERT(false); // ?????? + return 7; +} diff --git a/game/kernel/jakx/kprint.h b/game/kernel/jakx/kprint.h new file mode 100644 index 0000000000..dc59a00835 --- /dev/null +++ b/game/kernel/jakx/kprint.h @@ -0,0 +1,12 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void output_sql_query(char* query_name); +} + +// todo, do we actually have to do this, now that we aren't calling it from asm? +extern "C" { +s32 format_impl_jakx(uint64_t* args); +} \ No newline at end of file diff --git a/game/kernel/jakx/kscheme.cpp b/game/kernel/jakx/kscheme.cpp new file mode 100644 index 0000000000..b05c237097 --- /dev/null +++ b/game/kernel/jakx/kscheme.cpp @@ -0,0 +1,1990 @@ +#include "kscheme.h" + +#include + +#include "common/common_types.h" +#include "common/goal_constants.h" +#include "common/log/log.h" +#include "common/symbols.h" + +#include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/fileio.h" +#include "game/kernel/common/kdsnetm.h" +#include "game/kernel/common/klink.h" +#include "game/kernel/common/kmalloc.h" +#include "game/kernel/common/kmemcard.h" +#include "game/kernel/common/kprint.h" +#include "game/kernel/common/kscheme.h" +#include "game/kernel/jakx/fileio.h" +#include "game/kernel/jakx/kdgo.h" +#include "game/kernel/jakx/klink.h" +#include "game/kernel/jakx/klisten.h" +#include "game/kernel/jakx/kmachine.h" +#include "game/kernel/jakx/kmalloc.h" +#include "game/kernel/jakx/kprint.h" + +#define JAKX_HASH_TABLE + +namespace jakx { + +using namespace jakx_symbols; + +Ptr SymbolString; +Ptr> CollapseQuote; +Ptr> LevelTypeList; +Ptr UnknownName; +bool DebugSymbols = false; +Ptr KernelDebug; +Ptr> SqlResult; + +#ifdef JAKX_HASH_TABLE +std::unordered_map g_symbol_hash_table; +#endif + +void kscheme_init_globals() { + LevelTypeList.offset = 0; + SymbolString.offset = 0; + CollapseQuote.offset = 0; + UnknownName.offset = 0; + DebugSymbols = false; + KernelDebug.offset = 0; + SqlResult.offset = 0; +#ifdef JAKX_HASH_TABLE + g_symbol_hash_table.clear(); +#endif +} + +u32 u32_in_fixed_sym(u32 offset) { + return Ptr>(s7.offset + offset)->value(); +} + +namespace { +void fixed_sym_set(u32 offset, u32 value) { + Ptr>(s7.offset + offset)->value() = value; +} +} // namespace + +u64 new_illegal(u32 allocation, u32 type) { + (void)allocation; + MsgErr("dkernel: illegal attempt to call new method of static object type %s\n", + sym_to_string(Ptr(type)->symbol)->data()); + return s7.offset; +} + +u64 alloc_from_heap(u32 heap_symbol, u32 type, s32 size, u32 pp) { + auto heap_ptr = Ptr>>(heap_symbol)->value(); + s32 aligned_size = ((size + 0xf) / 0x10) * 0x10; + if ((heap_symbol == s7.offset + FIX_SYM_GLOBAL_HEAP) || + (heap_symbol == s7.offset + FIX_SYM_DEBUG) || + (heap_symbol == s7.offset + FIX_SYM_LOADING_LEVEL) || + (heap_symbol == s7.offset + FIX_SYM_PROCESS_LEVEL_HEAP)) { + if (!type) { // no type given, just call it a global-object + return kmalloc(heap_ptr, size, KMALLOC_MEMSET, "global-object").offset; + } + + Ptr typ(type); + if (!typ->symbol.offset) { // type doesn't have a symbol, just call it a global-object + return kmalloc(heap_ptr, size, KMALLOC_MEMSET, "global-object").offset; + } + + Ptr gstr = sym_to_string(typ->symbol); + if (!gstr->len) { // string has nothing in it. + return kmalloc(heap_ptr, size, KMALLOC_MEMSET, "global-object").offset; + } + + return kmalloc(heap_ptr, size, KMALLOC_MEMSET, gstr->data()).offset; + } else if (heap_symbol == s7.offset + FIX_SYM_PROCESS_TYPE) { + u32 start = *Ptr(pp + 0x64); + u32 heapEnd = *Ptr(pp + 0x60); + u32 allocEnd = start + aligned_size; + + if (allocEnd < heapEnd) { + *Ptr(pp + 0x64) = allocEnd; + memset(Ptr(start).c(), 0, aligned_size); + return start; + } else { + MsgErr("kmalloc: !alloc mem in heap for # (%d bytes)\n", pp, aligned_size); + return 0; + } + } else if (heap_symbol == s7.offset + FIX_SYM_SCRATCH) { + ASSERT(false); // nyi, I think unused. + return 0; + } else { + memset(Ptr(heap_symbol).c(), 0, aligned_size); // treat it as a stack address + return heap_symbol; + } +} + +/*! + * Allocate untyped memory. + */ +u64 alloc_heap_memory(u32 heap, u32 size) { + // should never happen on process heap + return alloc_from_heap(heap, 0, size, UNKNOWN_PP); +} + +/*! + * Allocate memory and add type tag for an object. + * For allocating basics. + * Called from GOAL. + */ +u64 alloc_heap_object(u32 heap, u32 type, u32 size, u32 pp) { + auto mem = alloc_from_heap(heap, type, size, pp); + if (!mem) { + return 0; + } + + *Ptr(mem) = type; + return mem + BASIC_OFFSET; +} + +/*! + * Allocate a structure and get the structure size from the type. + */ +u64 new_structure(u32 heap, u32 type) { + // should never happen on process heap + return alloc_from_heap(heap, type, Ptr(type)->allocated_size, UNKNOWN_PP); +} + +/*! + * Allocate a structure with a dynamic size + */ +u64 new_dynamic_structure(u32 heap_symbol, u32 type, u32 size) { + // should never happen on process heap + return alloc_from_heap(heap_symbol, type, size, UNKNOWN_PP); +} + +/*! + * Delete a structure. Not supported, as it uses kfree, which doesn't do anything. + */ +void delete_structure(u32 s) { + kfree(Ptr(s)); +} + +/*! + * Allocate a basic of fixed size. + */ +u64 new_basic(u32 heap, u32 type, u32 /*size*/, u32 pp) { + return alloc_heap_object(heap, type, Ptr(type)->allocated_size, pp); +} + +/*! + * Delete a basic. Not supported, as it uses kfree. + */ +void delete_basic(u32 s) { + // note that the game has a bug here and has s as a uint* and does -4 which is actually a + // 16-byte offset. Luckily kfree does nothing so there's no harm done. But it's a good indication + // that the "freeing memory" feature never made it very far in development. This bug exists in + // Jak 3 as well. + kfree(Ptr(s - BASIC_OFFSET * 4)); // replicate the bug +} + +/*! + * Allocate a new pair and set its car and cdr. + */ +u64 new_pair(u32 heap, u32 type, u32 car, u32 cdr) { + auto mem = alloc_from_heap(heap, type, Ptr(type)->allocated_size, UNKNOWN_PP); + if (!mem) { + return 0; + } + + u32* m = Ptr(mem).c(); + m[0] = car; + m[1] = cdr; + return mem + PAIR_OFFSET; +} + +/*! + * Delete a pair. BUG + */ +void delete_pair(u32 s) { + // the -8 should be a -2, but s is likely a u32* in the code. + kfree(Ptr(s - 8)); +} + +u64 make_string(u32 size) { + using namespace jakx_symbols; + auto mem_size = size + 1; // null + if (mem_size < 8) { + mem_size = 8; // min size of string + } + + // total size is mem_size (chars + null term), plus basic_offset (type tag) + 4 (string size) + auto mem = + alloc_heap_object((s7 + FIX_SYM_GLOBAL_HEAP).offset, u32_in_fixed_sym(FIX_SYM_STRING_TYPE), + mem_size + BASIC_OFFSET + sizeof(uint32_t), UNKNOWN_PP); + + // set the string size field. + if (mem) { + *Ptr(mem) = size; + } + return mem; +} + +/*! + * Convert a C string to a GOAL string. + * Allocates from the global heap and copies the string data. + */ +u64 make_string_from_c(const char* c_str) { + auto str_size = strlen(c_str); + auto mem_size = str_size + 1; + if (mem_size < 8) { + mem_size = 8; + } + + auto mem = + alloc_heap_object((s7 + FIX_SYM_GLOBAL_HEAP).offset, u32_in_fixed_sym(FIX_SYM_STRING_TYPE), + mem_size + BASIC_OFFSET + 4, UNKNOWN_PP); + // there's no check for failed allocation here! + + // string size field + *Ptr(mem) = str_size; + + // rest is chars + kstrcpy(Ptr(mem + 4).c(), c_str); + return mem; +} + +u64 make_debug_string_from_c(const char* c_str) { + auto str_size = strlen(c_str); + auto mem_size = str_size + 1; + if (mem_size < 8) { + mem_size = 8; + } + + auto mem = alloc_heap_object((s7 + FIX_SYM_DEBUG).offset, u32_in_fixed_sym(FIX_SYM_STRING_TYPE), + mem_size + BASIC_OFFSET + 4, UNKNOWN_PP); + // there's no check for failed allocation here! + + // string size field + *Ptr(mem) = str_size; + + // rest is chars + kstrcpy(Ptr(mem + 4).c(), c_str); + return mem; +} + +extern "C" { +#ifndef __aarch64__ +#ifdef __APPLE__ +void _arg_call_systemv() asm("_arg_call_systemv"); +void _stack_call_systemv() asm("_stack_call_systemv"); +void _stack_call_win32() asm("_stack_call_win32"); +#else +void _arg_call_systemv(); +void _stack_call_systemv(); +void _stack_call_win32(); +#endif +#else +#if defined(__APPLE__) +void _arg_call_arm64() asm("_arg_call_arm64"); +void _stack_call_arm64() asm("_stack_call_arm64"); +#else +void _arg_call_arm64(); +void _stack_call_arm64(); +#endif +#endif +} + +/*! + * This creates an OpenGOAL function from a C++ function. Only 6 arguments can be accepted. + * But calling this function is fast. It used to be really fast but wrong. + */ +Ptr make_function_from_c_systemv(void* func, bool arg3_is_pp) { + auto mem = Ptr(alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE), 0x40, UNKNOWN_PP)); + auto f = (uint64_t)func; + auto target_function = (u8*)&f; +#ifndef __aarch64__ + auto trampoline_function_addr = _arg_call_systemv; +#else + auto trampoline_function_addr = _arg_call_arm64; +#endif + auto trampoline = (u8*)&trampoline_function_addr; + // TODO - x86 code still being emitted below + + // movabs rax, target_function + int offset = 0; + mem.c()[offset++] = 0x48; + mem.c()[offset++] = 0xb8; + for (int i = 0; i < 8; i++) { + mem.c()[offset++] = target_function[i]; + } + + // push rax + mem.c()[offset++] = 0x50; + + // movabs rax, trampoline + mem.c()[offset++] = 0x48; + mem.c()[offset++] = 0xb8; + for (int i = 0; i < 8; i++) { + mem.c()[offset++] = trampoline[i]; + } + + if (arg3_is_pp) { + // mov rcx, r13. Puts pp in the third argument. + mem.c()[offset++] = 0x4c; + mem.c()[offset++] = 0x89; + mem.c()[offset++] = 0xe9; + } + + // jmp rax + mem.c()[offset++] = 0xff; + mem.c()[offset++] = 0xe0; + // the asm function's ret will return to the caller of this (GOAL code) directlyz. + + // CacheFlush(mem, 0x34); + + return mem.cast(); +} + +/*! + * Create a GOAL function from a C function. This doesn't export it as a global function, it just + * creates a function object on the global heap. + * + * This creates a simple trampoline function which jumps to the C function and reorders the + * arguments to be correct for Windows. + */ +Ptr make_function_from_c_win32(void* func, bool arg3_is_pp) { + // allocate a function object on the global heap + auto mem = Ptr(alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE), 0x80, UNKNOWN_PP)); + auto f = (uint64_t)func; + auto fp = (u8*)&f; + + int i = 0; + // we will put the function address in RAX with a movabs rax, imm8 + mem.c()[i++] = 0x48; + mem.c()[i++] = 0xb8; + for (int j = 0; j < 8; j++) { + mem.c()[i++] = fp[j]; + } + + /* + push rdi + push rsi + push rdx + push rcx + pop r9 + pop r8 + pop rdx + pop rcx + push r10 + push r11 + sub rsp, 40 + */ + for (auto x : {0x57, 0x56, 0x52, 0x51, 0x41, 0x59, 0x41, 0x58, 0x5A, 0x59, 0x41, 0x52, 0x41, 0x53, + 0x48, 0x83, 0xEC, 0x28}) { + mem.c()[i++] = x; + } + + if (arg3_is_pp) { + // mov r9, r13. Puts pp in the third argument. + mem.c()[i++] = 0x4d; + mem.c()[i++] = 0x89; + mem.c()[i++] = 0xe9; + } + + /* + call rax + add rsp, 40 + pop r11 + pop r10 + ret + */ + for (auto x : {0xFF, 0xD0, 0x48, 0x83, 0xC4, 0x28, 0x41, 0x5B, 0x41, 0x5A, 0xC3}) { + mem.c()[i++] = x; + } + + // CacheFlush(mem, 0x34); + + return mem.cast(); +} + +Ptr make_stack_arg_function_from_c_systemv(void* func) { + // allocate a function object on the global heap + auto mem = Ptr(alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE), 0x40, UNKNOWN_PP)); + auto f = (uint64_t)func; + auto target_function = (u8*)&f; +#ifndef __aarch64__ + auto trampoline_function_addr = _stack_call_systemv; +#else + auto trampoline_function_addr = _stack_call_arm64; +#endif + auto trampoline = (u8*)&trampoline_function_addr; + + // movabs rax, target_function + int offset = 0; + mem.c()[offset++] = 0x48; + mem.c()[offset++] = 0xb8; + for (int i = 0; i < 8; i++) { + mem.c()[offset++] = target_function[i]; + } + + // push rax + mem.c()[offset++] = 0x50; + + // movabs rax, trampoline + mem.c()[offset++] = 0x48; + mem.c()[offset++] = 0xb8; + for (int i = 0; i < 8; i++) { + mem.c()[offset++] = trampoline[i]; + } + + // jmp rax + mem.c()[offset++] = 0xff; + mem.c()[offset++] = 0xe0; + + // CacheFlush(mem, 0x34); + + return mem.cast(); +} + +#ifdef _WIN32 +/*! + * Create a GOAL function from a C function. This calls a windows function, but doesn't scramble + * the argument order. It's supposed to be used with _format_win32 which assumes GOAL order. + */ +Ptr make_stack_arg_function_from_c_win32(void* func) { + // allocate a function object on the global heap + auto mem = Ptr(alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE), 0x80, UNKNOWN_PP)); + auto f = (uint64_t)func; + auto fp = (u8*)&f; + auto trampoline_function_addr = _stack_call_win32; + auto trampoline = (u8*)&trampoline_function_addr; + + int i = 0; + // we will put the function address in RAX with a movabs rax, imm8 + mem.c()[i++] = 0x48; + mem.c()[i++] = 0xb8; + for (int j = 0; j < 8; j++) { + mem.c()[i++] = fp[j]; + } + + // push rax + mem.c()[i++] = 0x50; + + // we will put the function address in RAX with a movabs rax, imm8 + mem.c()[i++] = 0x48; + mem.c()[i++] = 0xb8; + for (int j = 0; j < 8; j++) { + mem.c()[i++] = trampoline[j]; + } + + /* + * jmp rax + */ + for (auto x : {0xFF, 0xE0}) { + mem.c()[i++] = x; + } + + return mem.cast(); +} +#endif + +/*! + * Create a GOAL function from a C function. This doesn't export it as a global function, it just + * creates a function object on the global heap. + * + * The implementation is to create a simple trampoline function which jumps to the C function. + */ +Ptr make_function_from_c(void* func, bool arg3_is_pp = false) { +#ifdef __linux__ + return make_function_from_c_systemv(func, arg3_is_pp); +#elif __APPLE__ + return make_function_from_c_systemv(func, arg3_is_pp); +#elif _WIN32 + return make_function_from_c_win32(func, arg3_is_pp); +#endif +} + +Ptr make_stack_arg_function_from_c(void* func) { +#ifdef __linux__ + return make_stack_arg_function_from_c_systemv(func); +#elif __APPLE__ + return make_stack_arg_function_from_c_systemv(func); +#elif _WIN32 + return make_stack_arg_function_from_c_win32(func); +#endif +} + +/*! + * Create a GOAL function which does nothing and immediately returns. + */ +Ptr make_nothing_func() { + auto mem = Ptr(alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE), 0x14, UNKNOWN_PP)); + + // a single x86-64 ret. + mem.c()[0] = 0xc3; + // CacheFlush(mem, 8); + return mem.cast(); +} + +/*! + * Create a GOAL function which returns 0. + */ +Ptr make_zero_func() { + auto mem = Ptr(alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE), 0x14, UNKNOWN_PP)); + // xor eax, eax + mem.c()[0] = 0x31; + mem.c()[1] = 0xc0; + // ret + mem.c()[2] = 0xc3; + // CacheFlush(mem, 8); + return mem.cast(); +} + +u64 symbol_to_string_from_c(u32 sym) { + auto name = sym_to_string(Ptr>(sym)); + if (name.offset == UnknownName.offset || + (kglobalheap->top_base.offset < name.offset && + (DebugSegment == 0 || u32_in_fixed_sym(FIX_SYM_KERNEL_SYMBOL_WARNINGS) != s7.offset))) { + MsgWarn( + "dkernel: doing a symbol->string on %s (addr #x%x), but the symbol has not been marked as " + "symbol-export-string\n", + name->data(), sym); + } + return name.offset; +} + +/*! + * Given a C function and a name, create a GOAL function and store it in the symbol with the given + * name. This effectively creates a global GOAL function with the given name which calls the given C + * function. + * + * This work on both Linux and Windows, but only supports up to 6 arguments. + */ +Ptr make_function_symbol_from_c(const char* name, void* f) { + auto sym = intern_from_c(-1, 0, name); + auto func = make_function_from_c(f); + sym->value() = func.offset; + return func; +} + +/*! + * Like make_function_symbol_from_c, but all 8 GOAL arguments are put into an array on the stack. + * The address of this array is passed as the first and only argument to f. + */ +Ptr make_stack_arg_function_symbol_from_c(const char* name, void* f) { + auto sym = intern_from_c(-1, 0, name); + auto func = make_stack_arg_function_from_c(f); + sym->value() = func.offset; + return func; +} + +u32 make_raw_function_symbol_from_c(const char* name, u32 value) { + intern_from_c(-1, 0, name)->value() = value; + return value; +} + +Ptr> set_fixed_symbol(int offset, const char* name, u32 value) { + Ptr> sym(s7.offset + offset); + ASSERT((sym.offset & 3) == 1); // + sym->value() = value; + + if (sym_to_string_ptr(sym).c()->offset) { + printf("setting %s\n", name); + ASSERT_NOT_REACHED(); // duplicate def + } + +#ifdef JAKX_HASH_TABLE + ASSERT((offset % 4) == 0); + g_symbol_hash_table.insert(std::make_pair(name, offset / 4)); +#endif + + kheaplogging = true; + *sym_to_string_ptr(sym).c() = Ptr(make_string_from_c(name)); + NumSymbols = NumSymbols + 1; + kheaplogging = false; + return sym; +} + +Ptr> find_symbol_in_area(const char* name, u32 start, u32 end) { + for (u32 i = start; i < end; i += 4) { + auto sym = Ptr>(i); + auto str = sym_to_string(sym); + if (str.offset && !strcmp(str->data(), name)) { + return sym; + } + } + + // failed + return Ptr>(0); +} + +#ifdef JAKX_HASH_TABLE +Ptr> find_symbol_from_c_ht(const char* name) { + const auto& it = g_symbol_hash_table.find(name); + if (it == g_symbol_hash_table.end()) { + return Ptr>(0); + } else { + return Ptr>(s7.offset + it->second * 4); + } +} + +Ptr> find_slot_in_area(u32 start, u32 end) { + for (u32 i = start; i < end; i += 4) { + auto sym = Ptr>(i); + auto str = sym_to_string(sym); + if (!str.offset) { + return sym; + } + } + + // failed + return Ptr>(0); +} + +Ptr> intern_from_c_ht(const char* name) { + auto existing = find_symbol_from_c_ht(name); + if (existing.offset) { + return existing; + } + + auto slot = find_slot_in_area(s7.offset, LastSymbol.offset); + if (!slot.offset) { + slot = find_slot_in_area(SymbolTable2.offset, s7.offset - 0x10); + } + ASSERT(slot.offset); // out of symbols!! + + NumSymbols++; + *sym_to_string_ptr(slot) = Ptr(make_string_from_c(name)); + g_symbol_hash_table[name] = (slot.offset - s7.offset) / 4; + return slot; +} + +#endif + +/*! + * Get a pointer to a symbol. Can provide the symbol id, the name, or both. + */ +Ptr> find_symbol_from_c(uint16_t sym_id, const char* name) { +#ifdef JAKX_HASH_TABLE + if (!strcmp(name, "_empty_")) { + return (s7 + S7_OFF_FIX_SYM_EMPTY_PAIR).cast>(); + } + return find_symbol_from_c_ht(name); +#endif + // sign extend + int extended_sym_id = (int16_t)sym_id; + if (sym_id == 0xffff) { + // the ID wasn't provided, so we have to use the name + if (!name) { + // always warn - no name or ID! + MsgErr("dkernel: attempted to find symbol with NULL name and id #x%x\n", sym_id); + return Ptr>(0); + } else { + // find the symbol + Ptr> lookup_result = find_symbol_in_area(name, s7.offset, LastSymbol.offset); + if (lookup_result.offset == 0) { + lookup_result = find_symbol_in_area(name, SymbolTable2.offset, s7.offset - 0x10); + } + + // do some sanity checking, but only in retail or if we've explicitly asked for it. + if (!DebugSegment || u32_in_fixed_sym(FIX_SYM_KERNEL_SYMBOL_WARNINGS) != s7.offset) { + if (lookup_result.offset == 0) { + // lookup by the name failed. + MsgWarn("dkernel: doing a string->symbol on %s, but could not find the name\n", name); + } else { + auto sym_string = sym_to_string(lookup_result); + // not sure how you could get unknown name here... + // but the second check sees if you were only saved by having the symbol string in the + // debug heap. This would tell you that the lookup worked, but would fail in retail mode. + if ((sym_string == UnknownName) || (kglobalheap->top_base.offset < sym_string.offset)) { + MsgWarn( + "dkernel: doing a string->symbol on %s, but the symbol has not been marked " + "as symbol-export-string\n", + name); + } + } + } + + return lookup_result; + } + } else { + // just use the ID. warn if there's a name conflict. + Ptr> sym(s7.offset + extended_sym_id - 1); + if (sym.offset != s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR) { + auto existing_name = sym_to_string(sym); + if (existing_name.offset && !strcmp(existing_name->data(), name)) { + MsgWarn( + "dkernel: WARNING: attempting to find symbol %s at id #x%x but symbol %s was " + "already there.\n", + name, sym_id, existing_name->data()); + } + } + return sym; + } +} + +/*! + * Find or create a symbol. + * New for Jak 3 is that there is no longer a symbol hash table. So there are some significant + * changes to how this works. Also, many symbols do not store their name, to save memory. + * + * @param sym_id The symbol ID. This _must_ be provided if the symbol does not exist yet, or if the + * symbol's name isn't known. Use -1 if the symbol ID is unknown. + * + * @param name The name. This can be used instead of the ID if the symbol's name is stored. + * + * @param flags Optional flag (0x40) can force the symbol's name to be stored. This uses memory. + * + */ +Ptr> intern_from_c(int sym_id, int flags, const char* name) { +#ifdef JAKX_HASH_TABLE + if (!strcmp(name, "_empty_")) { + return (s7 + S7_OFF_FIX_SYM_EMPTY_PAIR).cast>(); + } + return intern_from_c_ht(name); +#endif + // first, look up the symbol. + Ptr> symbol = find_symbol_from_c(sym_id, name); + kheaplogging = true; + + if (symbol.offset == 0) { + // the function above can only fail if we didn't give an ID. + MsgErr("dkernel: attempted to intern symbol %s using the name, but could not find it\n", name); + kheaplogging = false; + return Ptr>(0); + } + + if (symbol.offset == s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR) { + // in case it's the empty pair, just return and don't worry about names. + kheaplogging = false; + return symbol; + } + + // if the symbol is new, then the name pointer will be 0, and we need to set it up. + auto sptr = sym_to_string_ptr(symbol); + auto current_string = *sptr; + if (current_string.offset) { // existing symbol + if ((flags & 0x40U) == 0) { // symbol-export-string not set + // nothing to do! + kheaplogging = false; + return symbol; + } + + // if the symbol-export-string flag is set, we need to make sure that there's a known name + // and the name is stored in the global heap: + if ((current_string != UnknownName) && + (current_string.offset <= kglobalheap->top_base.offset)) { + // it is, nothing to do. + kheaplogging = false; + return symbol; + } + + // "upgrade" from the debug heap to global. (this could also trigger if the name was previously + // unknown) + MsgWarn("dkernel: upgrading symbol %s (flags #x%x) from debug heap to global\n", name, flags); + *sptr = Ptr(make_string_from_c(name)); + kheaplogging = false; + return symbol; + } + + // setting up a new symbol case: + Ptr new_string; + if (DebugSymbols == 0) { + // normal mode + if ((flags & 0x40U) != 0) { + // if symbol-export-string is set, allocate it on the global heap. + new_string = Ptr(make_string_from_c(name)); + } else if (DebugSegment != 0) { + // if debugsegment, always load all symbols to debug heap for easy debugging. + new_string = Ptr(make_debug_string_from_c(name)); + } else { + // otherwise, no symbols!! save memory! + new_string = UnknownName; + } + } else { + // debug symbol mode is on - force it to the global heap no matter what. + new_string = Ptr(make_string_from_c(name)); + } + *sptr = new_string; + + NumSymbols++; + + kheaplogging = 0; + return symbol; +} + +u64 intern(u32 name) { + return intern_from_c(-1, 0x40, Ptr(name)->data()).offset; +} + +/*! + * Configure a type. + */ +Ptr set_type_values(Ptr type, Ptr parent, u64 flags) { + type->parent = parent; + type->allocated_size = (flags & 0xffff); + type->heap_base = (flags >> 16) & 0xffff; + type->padded_size = ((type->allocated_size + 0xf) & 0xfff0); + + u16 new_methods = (flags >> 32) & 0xffff; // i think this accidentally uses jak1 style flags. + if (type->num_methods < new_methods) { + type->num_methods = new_methods; + } + + return type; +} + +static bool in_valid_memory_for_new_type(u32 addr) { + if (SymbolTable2.offset <= addr && addr < 0x8000000) { + return true; + } + + if (addr < 0x100000 && addr >= 0x84000) { + return true; + } + return false; +} +u32 size_of_type(u32 method_count) { + return (4 * method_count + 0x23) & 0xfffffff0; +} + +static bool is_valid_type(u32 addr) { + if ((addr & 7) != 4) { + return false; + } + + if (*Ptr(addr - 4) != u32_in_fixed_sym(FIX_SYM_TYPE_TYPE)) { + return false; + } + + return true; +} + +/*! + * Given a symbol for the type name, allocate memory for a type and add it to the symbol table. + * New: in Jak 2, there's a level type list + */ +Ptr alloc_and_init_type(Ptr>> sym, + u32 method_count, + bool force_global_type) { + // number of bytes for this type + u32 type_size = size_of_type(method_count); + u32 type_mem = 0; + ASSERT(sym.offset & 1); + + if (!force_global_type && + u32_in_fixed_sym(FIX_SYM_LOADING_LEVEL) != u32_in_fixed_sym(FIX_SYM_GLOBAL_HEAP)) { + u32 type_list_ptr = LevelTypeList->value(); + if (type_list_ptr == 0) { + // we don't have a type-list... just alloc on global + MsgErr("dkernel: trying to init loading level type \'%s\' while type-list is undefined\n", + sym_to_string(sym)->data()); + type_mem = alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_TYPE_TYPE), type_size, UNKNOWN_PP); + } else { + // we do have a type list! allocate on the level heap + type_mem = alloc_heap_object(s7.offset + FIX_SYM_LOADING_LEVEL, + u32_in_fixed_sym(FIX_SYM_TYPE_TYPE), type_size, UNKNOWN_PP); + // link us! + u32 old_head = *Ptr(type_list_ptr); + *Ptr(type_list_ptr) = type_mem; + // I guess we hide this in the memusage method. + Ptr(type_mem)->memusage_method.offset = old_head; + } + } else { + // normal global type + type_mem = alloc_heap_object(s7.offset + FIX_SYM_GLOBAL_HEAP, + u32_in_fixed_sym(FIX_SYM_TYPE_TYPE), type_size, UNKNOWN_PP); + } + + Ptr the_type(type_mem); + sym->value() = the_type; + the_type->allocated_size = type_size; + the_type->padded_size = ((type_size + 0xf) & 0xfff0); + return the_type; +} + +/*! + * Like intern, but returns a type instead of a symbol. If the type doesn't exist, a new one is + * allocated. + */ +Ptr intern_type_from_c(int a, int b, const char* name, u64 methods) { + // there's a weird flag system used here. + // if methods is a number that's not 0 or 1, its used as the desired number of methods. + // If method is 0, and a new type needs to be created, it uses 12 methods + // If method is 1, and a new type needs to be created, it uses 44 methods + // If method is 0 or 1 and no new type needs to be created, there is no error. + // Requesting a type to have fewer methods than the existing type has is ok. + // Requesting a type to have more methods than the existing type is not ok and prints an error. + + auto symbol = intern_from_c(a, b, name); + u32 sym_value = symbol->value(); + + if (!sym_value) { + // new type + int n_methods = methods; + + if (methods == 0) { + // some stupid types like user-defined children of integers have "0" as the method count + n_methods = 0xc; + } else if (methods == 1) { + // whatever builds the v2/v4 object files (level data) doesn't actually know method counts. + // so it just puts a 1. In this case, we should put lots of methods, just in case. + // I guess 44 was the number they picked. + n_methods = 0x2c; + } + + // create the type. + auto casted_sym = symbol.cast>>(); + auto type = alloc_and_init_type(casted_sym, n_methods, 0); // allow level types + type->symbol = casted_sym; + type->num_methods = n_methods; + return type; + } else { + // the type exists. + auto type = Ptr(sym_value); + // note - flags of 0 or 1 will pass through here without triggering the error. + if (size_of_type(type->num_methods) < size_of_type(methods)) { + MsgErr( + "dkernel: trying to redefine a type '%s' with %d methods when it had %d, try " + "restarting\n", + name, (u32)methods, type->num_methods); + ASSERT(false); + } + return type; + } +} + +/*! + * Wrapper of intern_type_from_c to use with GOAL. It accepts a gstring as a name. + */ +u64 intern_type(u32 name, u64 methods) { + return intern_type_from_c(-1, 0, Ptr(name)->data(), methods).offset; +} + +/*! + * Setup a type which is located in a fixed spot of the symbol table. + */ +Ptr set_fixed_type(u32 offset, + const char* name, + Ptr>> parent_symbol, + u64 flags, + u32 print, + u32 inspect) { + Ptr>> type_symbol(s7.offset + offset); + Ptr symbol_value = type_symbol->value(); + + // set the symbol's name and hash + *sym_to_string_ptr(type_symbol) = Ptr(make_string_from_c(name)); + ASSERT(g_symbol_hash_table.count(name) == 0); + g_symbol_hash_table[name] = (type_symbol.offset - s7.offset) / 4; + NumSymbols++; + + if (symbol_value.offset == 0) { + // no type memory exists, let's allocate it. force it global + // the flag logic here multiplies the method count 2, hopefully + // this will set up the symbol + symbol_value = alloc_and_init_type(type_symbol, (flags >> 0x1f) & 0xffff, 1); + } + + // remember our symbol + symbol_value->symbol = type_symbol; + // make our type a type (we're a basic) + u32 type_of_type = u32_in_fixed_sym(FIX_SYM_TYPE_TYPE); + *Ptr(symbol_value.offset - 4) = type_of_type; + + Ptr parent_type = parent_symbol->value(); + set_type_values(symbol_value, parent_type, flags); + + symbol_value->new_method = parent_type->new_method; + symbol_value->delete_method = parent_type->delete_method; + + if (!print) { + symbol_value->print_method = parent_type->print_method; + } else { + symbol_value->print_method.offset = print; + } + + if (!inspect) { + symbol_value->inspect_method = parent_type->inspect_method; + } else { + symbol_value->inspect_method.offset = inspect; + } + + symbol_value->length_method.offset = u32_in_fixed_sym(FIX_SYM_ZERO_FUNC); + symbol_value->asize_of_method = parent_type->asize_of_method; + symbol_value->copy_method = parent_type->copy_method; + return symbol_value; +} + +u64 new_type(u32 symbol, u32 parent, u64 flags) { + u32 n_methods = (flags >> 32) & 0xffff; + if (n_methods == 0) { + // 12 methods used as default, if the user has not provided us with a number + n_methods = 12; + } + + auto sym_string = sym_to_string(Ptr>(symbol)); + const char* sym_string_c = nullptr; + if (sym_string.offset) { + sym_string_c = sym_string->data(); + } + + u32 parent_num_methods = Ptr(parent)->num_methods; + + auto new_type_obj = intern_type_from_c(((symbol - s7.offset) + 1), 0x80, sym_string_c, n_methods); + u32 original_type_list_value = new_type_obj->memusage_method.offset; + Ptr* child_slots = &(new_type_obj->new_method); + Ptr* parent_slots = &(Ptr(parent)->new_method); + for (u32 i = 0; i < n_methods; i++) { + if (i < parent_num_methods) { // bug fix from jak 1 + child_slots[i] = parent_slots[i]; + } else { + child_slots[i].offset = 0; + } + } + + // deal with loading-level types + if (u32_in_fixed_sym(FIX_SYM_LOADING_LEVEL) == u32_in_fixed_sym(FIX_SYM_GLOBAL_HEAP)) { + // not loading a level + + // we'll consider a type list if it's #f or a valid type + if (original_type_list_value && (original_type_list_value == s7.offset || + (in_valid_memory_for_new_type(original_type_list_value) && + is_valid_type(original_type_list_value)))) { + printf("case 1 for new_type level types\n"); + new_type_obj->memusage_method.offset = original_type_list_value; + } + } else { + if (original_type_list_value == 0) { + // loading a level, but the type is global + MsgWarn("dkernel: loading-level init of type %s, but was interned global (this is okay)\n", + sym_to_string(new_type_obj->symbol)->data()); + } else { + new_type_obj->memusage_method.offset = original_type_list_value; + } + } + auto ret = set_type_values(new_type_obj, Ptr(parent), flags).offset; + ; + return ret; +} +/*! + * Is t1 a t2? + */ +u64 type_typep(Ptr t1, Ptr t2) { + if (t1 == t2) { + return (s7 + FIX_SYM_TRUE).offset; + } + + do { + t1 = t1->parent; + if (t1 == t2) { + return (s7 + FIX_SYM_TRUE).offset; + } + } while (t1.offset && t1.offset != u32_in_fixed_sym(FIX_SYM_OBJECT_TYPE)); + return s7.offset; +} + +u64 method_set(u32 type_, u32 method_id, u32 method) { + Ptr type(type_); + + auto existing_method = type->get_method(method_id).offset; + + if (method == 1) { + method = 0; + } else if (method == 0) { + return 0; + } else if (method == 2) { + method = type->parent->get_method(method_id).offset; + printf("[Method Set] got 2, inheriting\n"); + } + + // do the set + type->get_method(method_id).offset = method; + + // now, propagate to children + // we don't track children directly, so we end up having to iterate the whole symbol to find all + // types. This is slow, so we only do it in some cases + + // the condition is either setting *enable-method-set* in GOAL, or if we're debugging without the + // disk boot. The point of doing this in debug is just to print warning messages. + if (*EnableMethodSet || (!FastLink && MasterDebug && !DiskBoot)) { + auto sym = Ptr>>(s7.offset); + for (; sym.offset < LastSymbol.offset; sym.offset += 4) { + auto sym_value = sym->value(); + if (in_valid_memory_for_new_type(sym_value.offset) && (sym_value.offset & 7) == 4 && + *Ptr(sym_value.offset - 4) == u32_in_fixed_sym(FIX_SYM_TYPE_TYPE) && + method_id < sym_value->num_methods && + sym_value->get_method(method_id).offset == existing_method && + type_typep(sym_value, type) != s7.offset) { + if (FastLink != 0) { + printf("************ WARNING **************\n"); + printf("method %d of %s redefined - you must define class heirarchies in order now\n", + method_id, sym_to_string(sym)->data()); + printf("***********************************\n"); + } + sym_value->get_method(method_id).offset = method; + } + } + + sym = Ptr>>(SymbolTable2.offset); + for (; sym.offset < s7.offset; sym.offset += 4) { + auto sym_value = sym->value(); + if (in_valid_memory_for_new_type(sym_value.offset) && (sym_value.offset & 7) == 4 && + *Ptr(sym_value.offset - 4) == u32_in_fixed_sym(FIX_SYM_TYPE_TYPE) && + method_id < sym_value->num_methods && + sym_value->get_method(method_id).offset == existing_method && + type_typep(sym_value, type) != s7.offset) { + if (FastLink != 0) { + printf("************ WARNING **************\n"); + printf("method %d of %s redefined - you must define class heirarchies in order now\n", + method_id, sym_to_string(sym)->data()); + printf("***********************************\n"); + } + sym_value->get_method(method_id).offset = method; + } + } + } + + return method; +} + +/*! + * Call a GOAL method of a given type. + */ +u64 call_method_of_type(u32 arg, Ptr type, u32 method_id) { + if (((type.offset < SymbolTable2.offset || 0x7ffffff < type.offset) && // not in normal memory + (type.offset < 0x84000 || 0x100000 <= type.offset)) // not in kernel memory + || ((type.offset & OFFSET_MASK) != BASIC_OFFSET)) { // invalid type + cprintf("#<#%x has invalid type ptr #x%x>\n", arg, type.offset); + } else { + auto type_tag = Ptr>(type.offset - 4); + if ((*type_tag).offset == u32_in_fixed_sym(FIX_SYM_TYPE_TYPE)) { + auto f = type->get_method(method_id); + return call_goal(f, arg, 0, 0, s7.offset, g_ee_main_mem); + } else { + cprintf("#<#x%x has invalid type ptr #x%x, bad type #x%x>\n", arg, type.offset, + (*type_tag).offset); + } + } + printf("[ERROR] call_method_of_type failed!\n"); + return arg; +} + +/*! + * Call a GOAL function with 2 arguments. + */ +u64 call_goal_function_arg2(Ptr func, u64 a, u64 b) { + return call_goal(func, a, b, 0, s7.offset, g_ee_main_mem); +} + +/*! + * Call a global GOAL function by name. + */ +u64 call_goal_function_by_name(const char* name) { + return call_goal_function(Ptr(intern_from_c(-1, 0, name)->value())); +} + +u64 print_object(u32 obj); +u64 print_pair(u32 obj); +u64 print_symbol(u32 obj); + +/*! + * Print an object with a newline after it to the GOAL PrintBuffer (not stdout) + */ +u64 sprint(u32 obj) { + auto rv = print_object(obj); + cprintf("\n"); + return rv; +} + +/*! + * Like call_method_of_type, but has two arguments. Used to "relocate" v2/s4 loads. + */ +u64 call_method_of_type_arg2(u32 arg, Ptr type, u32 method_id, u32 a1, u32 a2) { + if (((type.offset < SymbolTable2.offset || 0x7ffffff < type.offset) && // not in normal memory + (type.offset < 0x84000 || 0x100000 <= type.offset)) // not in kernel memory + || ((type.offset & OFFSET_MASK) != BASIC_OFFSET)) { // invalid type + cprintf("#<#%x has invalid type ptr #x%x>\n", arg, type.offset); + } else { + auto type_tag = Ptr>(type.offset - 4); + if ((*type_tag).offset == u32_in_fixed_sym(FIX_SYM_TYPE_TYPE)) { + // return type->get_method(method_id).cast().c()(arg,a1,a2); + return call_goal(type->get_method(method_id), arg, a1, a2, s7.offset, g_ee_main_mem); + } else { + cprintf("#<#x%x has invalid type ptr #x%x, bad type #x%x>\n", arg, type.offset, + (*type_tag).offset); + } + } + ASSERT_MSG(false, "[ERROR] call_method_of_type_arg2 failed!"); + return arg; +} + +/*! + * Most generic printing method. + * Does not correctly handle 64 bit boxed integers or object64's correctly. + * It is important that no objects of type object actually exist or this will loop! + */ +u64 print_object(u32 obj) { + if ((obj & OFFSET_MASK) == BINTEGER_OFFSET) { + return print_binteger(s64(s32(obj))); + } else { + if ((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) { // not in kernel memory + cprintf("#", obj); + } else if ((obj & OFFSET_MASK) == PAIR_OFFSET) { + return print_pair(obj); + } else if ((obj & 1) == SYMBOL_OFFSET && obj >= SymbolTable2.offset && + obj < LastSymbol.offset) { + return print_symbol(obj); + } else if ((obj & OFFSET_MASK) == BASIC_OFFSET) { + return call_method_of_type(obj, Ptr(*Ptr(obj - 4)), GOAL_PRINT_METHOD); + } else { + cprintf("#", obj & OFFSET_MASK, obj); + } + } + return obj; +} + +/*! + * Default print method a basic. + * Confirms basic is valid and prints the type name. + */ +u64 print_basic(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & OFFSET_MASK) != BASIC_OFFSET)) { + cprintf("#", obj); + } else { + cprintf("#<%s @ #x%x>", sym_to_string(Ptr(*Ptr(obj - 4))->symbol)->data(), obj); + } + return obj; +} + +/*! + * Print a pair as a LISP list. Don't try to print circular lists or it will get stuck + * Can print improper lists + */ +u64 print_pair(u32 obj) { + if (obj == s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR) { + cprintf("()"); + } else { + // clang-format off + // we want to treat ('quote ) as just ' unless + if (CollapseQuote->value() == s7.offset // CollapseQuote is enabled + || ((obj & 7) != 2) // this object isn't a pair + || *Ptr(obj - 2) != s7.offset + FIX_SYM_QUOTE // the car isn't 'quote + || (*Ptr(obj + 2) & 7) != 2 // the cdr isn't a pair + || *Ptr(*Ptr(obj + 2) + 2) != s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR // the cddr isn't '() + ) { + // clang-format on + cprintf("("); + auto toPrint = obj; + for (;;) { + if ((toPrint & OFFSET_MASK) == PAIR_OFFSET) { + // print CAR + print_object(*Ptr(toPrint - 2)); + + // load up CDR + auto cdr = *Ptr(toPrint + 2); + toPrint = cdr; + if (cdr == s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR) { // end of proper list + cprintf(")"); + return obj; + } else { // continue list + cprintf(" "); + } + } else { // improper list + cprintf(". "); + print_object(toPrint); + cprintf(")"); + return obj; + } + } + } else { + cprintf("'"); + print_object(*Ptr(*Ptr(obj + 2) - 2)); + } + } + return obj; +} + +/*! + * Print method for symbol. Just prints the name without quotes or anything fancy. + */ +u64 print_symbol(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & 1) != 1) || obj < SymbolTable2.offset || obj >= LastSymbol.offset) { + cprintf("#", obj); + } else { + char* str = sym_to_string(Ptr>(obj))->data(); + cprintf("%s", str); + } + return obj; +} + +/*! + * Print method for type. Just prints the name without quotes + */ +u64 print_type(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & OFFSET_MASK) != BASIC_OFFSET) || + *Ptr(obj - 4) != u32_in_fixed_sym(FIX_SYM_TYPE_TYPE)) { + cprintf("#", obj); + } else { + cprintf("%s", sym_to_string(Ptr(obj)->symbol)->data()); + } + return obj; +} + +/*! + * Print method for string. Prints the string in quotes. + */ +u64 print_string(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & OFFSET_MASK) != BASIC_OFFSET) || + *Ptr(obj - 4) != u32_in_fixed_sym(FIX_SYM_STRING_TYPE)) { + if (obj == s7.offset) { + cprintf("#f"); // new in jak 2. + + } else { + cprintf("#", obj); + } + } else { + cprintf("\"%s\"", Ptr(obj)->data()); + } + return obj; +} + +/*! + * Print method for function. Just prints the address because functions can't identify themselves. + */ +u64 print_function(u32 obj) { + cprintf("#", sym_to_string(Ptr(*Ptr(obj - 4))->symbol)->data(), + obj); + return obj; +} + +/*! + * Get the allocated size field of a basic. By default we grab this from the type struct. + * Dynamically sized basics should override this method. + */ +u64 asize_of_basic(u32 it) { + return Ptr(*Ptr(it - BASIC_OFFSET))->allocated_size; +} + +/*! + * Create a copy of a basic. If the destination isn't identified as a symbol, treat it as an + * address. This seems a little bit unsafe to me, as it reads the 4-bytes before the given address + * and checks it against the symbol type pointer to see if its a symbol. It seems possible to have a + * false positive for this check. + */ +u64 copy_basic(u32 obj, u32 heap, u32 /*unused*/, u32 pp) { + // determine size of basic. We call a method instead of using asize_of_basic in case the type has + // overridden the default asize_of method. + u32 size = call_method_of_type(obj, Ptr(*Ptr(obj - BASIC_OFFSET)), GOAL_ASIZE_METHOD); + u32 result; + + if ((heap & 1) == 1) { + // we think we're creating a new copy on a heap. First allocate memory... + result = alloc_heap_object(heap, *Ptr(obj - BASIC_OFFSET), size, pp); + // then copy! (minus the type tag, alloc_heap_object already did it for us) + memcpy(Ptr(result).c(), Ptr(obj).c(), size - BASIC_OFFSET); + } else { + printf("DANGER COPY BASIC!\n"); + // copy directly (including type tag) + memcpy(Ptr(heap - BASIC_OFFSET).c(), Ptr(obj - BASIC_OFFSET).c(), size); + result = heap; + } + return result; +} + +u64 inspect_pair(u32 obj); +u64 inspect_symbol(u32 obj); +/*! + * Highest level inspect method. Won't inspect 64-bit bintegers correctly. + */ +u64 inspect_object(u32 obj) { + if ((obj & OFFSET_MASK) == BINTEGER_OFFSET) { + return inspect_binteger(obj); + } else { + if ((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) { // not in kernel memory + cprintf("#", obj); + } else if ((obj & OFFSET_MASK) == PAIR_OFFSET) { + return inspect_pair(obj); + } else if ((obj & 1) == SYMBOL_OFFSET && obj >= SymbolTable2.offset && + obj < LastSymbol.offset) { + return inspect_symbol(obj); + } else if ((obj & OFFSET_MASK) == BASIC_OFFSET) { + return call_method_of_type(obj, Ptr(*Ptr(obj - BASIC_OFFSET)), + GOAL_INSPECT_METHOD); + } else { + cprintf("#", obj & OFFSET_MASK, obj); + } + } + return obj; +} + +/*! + * Inspect a pair. + */ +u64 inspect_pair(u32 obj) { + cprintf("[%8x] pair ", obj); + print_pair(obj); + cprintf("\n"); + return obj; +} + +/*! + * Inspect a string. There's a typo in allocated_length (has underscore instead of dash). + * This typo is fixed in later games. + */ +u64 inspect_string(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & OFFSET_MASK) != BASIC_OFFSET) || + *Ptr(obj - 4) != u32_in_fixed_sym(FIX_SYM_STRING_TYPE)) { + cprintf("#\n", obj); + } else { + auto str = Ptr(obj); + cprintf("[%8x] string\n\tallocated-length: %d\n\tdata: \"%s\"\n", obj, str->len, str->data()); + } + return obj; +} + +/*! + * Inspect a symbol. + */ +u64 inspect_symbol(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & 1) != 1) || obj < SymbolTable2.offset || obj >= LastSymbol.offset) { + cprintf("#", obj); + } else { + auto sym = Ptr>(obj); + cprintf("[%8x] symbol\n\tname: %s\n\tvalue: ", obj, sym_to_string(sym)->data()); + print_object(sym->value()); + cprintf("\n"); + } + return obj; +} + +/*! + * Inspect a type. + */ +u64 inspect_type(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & OFFSET_MASK) != BASIC_OFFSET) || + *Ptr(obj - 4) != u32_in_fixed_sym(FIX_SYM_TYPE_TYPE)) { + cprintf("#\n", obj); + } else { + auto typ = Ptr(obj); + auto sym = typ->symbol; + + cprintf("[%8x] type\n\tname: %s\n\tparent: ", obj, sym_to_string(sym)->data()); + print_object(typ->parent.offset); + cprintf("\n\tsize: %d/%d\n\theap-base: %d\n\tallocated-length: %d\n\tprint: ", + typ->allocated_size, typ->padded_size, typ->heap_base, typ->num_methods); + print_object(typ->print_method.offset); + cprintf("\n\tinspect: "); + print_object(typ->inspect_method.offset); + cprintf("\n"); + } + return obj; +} + +/*! + * Inspect a basic. This is just a fallback for basics which don't know how to inspect themselves. + * We just use print_object. + */ +u64 inspect_basic(u32 obj) { + if (((obj < SymbolTable2.offset || 0x7ffffff < obj) && // not in normal memory + (obj < 0x84000 || 0x100000 <= obj)) // not in kernel memory + || ((obj & OFFSET_MASK) != BASIC_OFFSET)) { + if (obj == s7.offset) { + // added in jak2 (and inlined in jak 3, but only the final version?) + return inspect_symbol(obj); + } else { + cprintf("#\n", obj); + } + } else { + cprintf("[%8x] ", obj); + print_object(*Ptr(obj - 4)); + cprintf("\n"); + } + return obj; +} + +/*! + * Inspect a link block. This link block doesn't seem to be used at all. + */ +u64 inspect_link_block(u32 ob) { + struct LinkBlock { + u32 length; + u32 version; + }; + + auto lb = Ptr(ob); + cprintf("[%8x] link-block\n\tallocated_length: %d\n\tversion: %d\n\tfunction: ", ob, lb->length, + lb->version); + print_object(ob + lb->length); + cprintf("\n"); + return ob; +} + +namespace { +Ptr>> get_fixed_type_symbol(u32 offset) { + return (s7 + offset).cast>>(); +} + +u64 pack_type_flag(u64 methods, u64 heap_base, u64 size) { + return (methods << 32) + (heap_base << 16) + (size); +} +} // namespace + +int InitHeapAndSymbol() { + Ptr symbol_table = + kmalloc(kglobalheap, 4 * GOAL_MAX_SYMBOLS, KMALLOC_MEMSET, "symbol-table").cast(); + SymbolString = + kmalloc(kglobalheap, 4 * GOAL_MAX_SYMBOLS, KMALLOC_MEMSET, "string-table").cast(); + SymbolString.offset += 2 * GOAL_MAX_SYMBOLS; // point to the middle + LastSymbol = symbol_table + 0xff00; + SymbolTable2 = symbol_table + 5; + s7 = symbol_table + 0x8001; + NumSymbols = 0; + reset_output(); + // empty pair (this is extra confusing). + *Ptr(s7.offset + FIX_SYM_EMPTY_CAR - 1) = s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR; + *Ptr(s7.offset + FIX_SYM_EMPTY_CDR - 1) = s7.offset + S7_OFF_FIX_SYM_EMPTY_PAIR; + fixed_sym_set(FIX_SYM_GLOBAL_HEAP, kglobalheap.offset); + + UnknownName = Ptr(make_string_from_c("*unknown-symbol-name*")); + alloc_and_init_type((s7 + FIX_SYM_TYPE_TYPE).cast>>(), 9, true); + alloc_and_init_type((s7 + FIX_SYM_SYMBOL_TYPE).cast>>(), 9, true); + alloc_and_init_type((s7 + FIX_SYM_STRING_TYPE).cast>>(), 9, true); + alloc_and_init_type((s7 + FIX_SYM_FUNCTION_TYPE).cast>>(), 9, true); + + set_fixed_symbol(FIX_SYM_FALSE, "#f", s7.offset + FIX_SYM_FALSE); + set_fixed_symbol(FIX_SYM_TRUE, "#t", s7.offset + FIX_SYM_TRUE); + set_fixed_symbol(FIX_SYM_NOTHING_FUNC, "nothing", make_nothing_func().offset); + set_fixed_symbol(FIX_SYM_ZERO_FUNC, "zero-func", make_zero_func().offset); + set_fixed_symbol(FIX_SYM_ASIZE_OF_BASIC_FUNC, "asize-of-basic-func", + make_function_from_c((void*)asize_of_basic).offset); + set_fixed_symbol(FIX_SYM_COPY_BASIC_FUNC, "asize-of-basic-func", // typo in name here again. + make_function_from_c((void*)copy_basic, true).offset); + set_fixed_symbol(FIX_SYM_DELETE_BASIC, "delete-basic", + make_function_from_c((void*)delete_basic).offset); + set_fixed_symbol(FIX_SYM_GLOBAL_HEAP, "global", kglobalheap.offset); + set_fixed_symbol(FIX_SYM_DEBUG, "debug", kdebugheap.offset); + set_fixed_symbol(FIX_SYM_STATIC, "static", s7.offset + FIX_SYM_STATIC); + set_fixed_symbol(FIX_SYM_LOADING_LEVEL, "loading-level", kglobalheap.offset); + set_fixed_symbol(FIX_SYM_LOADING_PACKAGE, "loading-package", kglobalheap.offset); + set_fixed_symbol(FIX_SYM_PROCESS_LEVEL_HEAP, "process-level-heap", kglobalheap.offset); + set_fixed_symbol(FIX_SYM_STACK, "stack", s7.offset + FIX_SYM_STACK); + set_fixed_symbol(FIX_SYM_SCRATCH, "scratch", s7.offset + FIX_SYM_SCRATCH); + set_fixed_symbol(FIX_SYM_SCRATCH_TOP, "*scratch-top*", 0x70000000); + set_fixed_symbol(FIX_SYM_LEVEL, "level", 0); + set_fixed_symbol(FIX_SYM_ART_GROUP, "art-group", 0); + set_fixed_symbol(FIX_SYM_TEXTURE_PAGE_DIR, "texture-page-dir", 0); + set_fixed_symbol(FIX_SYM_TEXTURE_PAGE, "texture-page", 0); + + set_fixed_symbol(FIX_SYM_SOUND, "sound", 0); + set_fixed_symbol(FIX_SYM_DGO, "dgo", 0); + set_fixed_symbol(FIX_SYM_TOP_LEVEL, "top-level", u32_in_fixed_sym(FIX_SYM_NOTHING_FUNC)); + set_fixed_symbol(FIX_SYM_QUOTE, "quote", s7.offset + FIX_SYM_QUOTE); + set_fixed_symbol(FIX_SYM_LISTENER_LINK_BLOCK, "*listener-link-block*", 0); + set_fixed_symbol(FIX_SYM_LISTENER_FUNCTION, "*listener-function*", 0x0); + set_fixed_symbol(FIX_SYM_STACK_TOP, "*stack-top*", 0x0); + set_fixed_symbol(FIX_SYM_STACK_BASE, "*stack-base*", 0x0); + set_fixed_symbol(FIX_SYM_STACK_SIZE, "*stack-size*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_FUNCTION, "*kernel-function*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_PACKAGES, "*kernel-packages*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_BOOT_MESSAGE, "*kernel-boot-message*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_BOOT_MODE, "*kernel-boot-mode*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_BOOT_LEVEL, "*kernel-boot-level*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_BOOT_ART_GROUP, "*kernel-boot-art-group*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_DEBUG, "*kernel-debug*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_VERSION, "*kernel-version*", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_DISPATCHER, "kernel-dispatcher", 0x0); + set_fixed_symbol(FIX_SYM_SYNC_DISPATCHER, "sync-dispatcher", 0x0); + set_fixed_symbol(FIX_SYM_PRINT_COLLUMN, "*print-collumn*", 0x0); + set_fixed_symbol(FIX_SYM_DEBUG_SEGMENT, "*debug-segment*", 0x0); + set_fixed_symbol(FIX_SYM_ENABLE_METHOD_SET, "*enable-method-set*", 0x0); + set_fixed_symbol(FIX_SYM_SQL_RESULT, "*sql-result*", 0x0); + set_fixed_symbol(FIX_SYM_COLLAPSE_QUOTE, "*collapse-quote*", 0x0); + set_fixed_symbol(FIX_SYM_LEVEL_TYPE_LIST, "*level-type-list*", 0x0); + set_fixed_symbol(FIX_SYM_DECI_COUNT, "*deci-count*", 0x0); + set_fixed_symbol(FIX_SYM_USER, "*user*", 0x0); + set_fixed_symbol(FIX_SYM_VIDEO_MODE, "*video-mode*", 0x0); + set_fixed_symbol(FIX_SYM_BOOT_VIDEO_MODE, "*boot-video-mode*", 0x0); + set_fixed_symbol(FIX_SYM_BOOT, "boot", 0x0); + set_fixed_symbol(FIX_SYM_DEMO, "demo", 0x0); + set_fixed_symbol(FIX_SYM_DEMO_SHARED, "demo-shared", 0x0); + set_fixed_symbol(FIX_SYM_PREVIEW, "preview", 0x0); + set_fixed_symbol(FIX_SYM_KIOSK, "kiosk", 0x0); + set_fixed_symbol(FIX_SYM_PLAY_BOOT, "play-boot", 0x0); + set_fixed_symbol(FIX_SYM_SIN, "sin", 0x0); + set_fixed_symbol(FIX_SYM_COS, "cos", 0x0); + set_fixed_symbol(FIX_SYM_PUT_DISPLAY_ENV, "put-display-env", 0x0); + set_fixed_symbol(FIX_SYM_SYNCV, "syncv", 0x0); + set_fixed_symbol(FIX_SYM_SYNC_PATH, "sync-path", 0x0); + + set_fixed_symbol(FIX_SYM_RESET_PATH, "reset-path", 0x0); + set_fixed_symbol(FIX_SYM_RESET_GRAPH, "reset-graph", 0x0); + set_fixed_symbol(FIX_SYM_DMA_SYNC, "dma-sync", 0x0); + set_fixed_symbol(FIX_SYM_GS_PUT_IMR, "gs-put-imr", 0x0); + set_fixed_symbol(FIX_SYM_GS_GET_IMR, "gs-get-imr", 0x0); + set_fixed_symbol(FIX_SYM_GS_STORE_IMAGE, "gs-store-image", 0x0); + set_fixed_symbol(FIX_SYM_FLUSH_CACHE, "flush-cache", 0x0); + set_fixed_symbol(FIX_SYM_CPAD_OPEN, "cpad-open", 0x0); + set_fixed_symbol(FIX_SYM_CPAD_GET_DATA, "cpad-get-data", 0x0); + set_fixed_symbol(FIX_SYM_MOUSE_GET_DATA, "mouse-get-data", 0x0); + set_fixed_symbol(FIX_SYM_KEYBD_GET_DATA, "keybd-get-data", 0x0); + set_fixed_symbol(FIX_SYM_INSTALL_HANDLER, "install-handler", 0x0); + set_fixed_symbol(FIX_SYM_INSTALL_DEBUG_HANDLER, "install-debug-handler", 0x0); + set_fixed_symbol(FIX_SYM_FILE_STREAM_OPEN, "file-stream-open", 0x0); + set_fixed_symbol(FIX_SYM_FILE_STREAM_CLOSE, "file-stream-close", 0x0); + set_fixed_symbol(FIX_SYM_FILE_STREAM_LENGTH, "file-stream-length", 0x0); + set_fixed_symbol(FIX_SYM_FILE_STREAM_SEEK, "file-stream-seek", 0x0); + set_fixed_symbol(FIX_SYM_FILE_STREAM_READ, "file-stream-read", 0x0); + set_fixed_symbol(FIX_SYM_FILE_STREAM_WRITE, "file-stream-write", 0x0); + // set_fixed_symbol(FIX_SYM_FILE_STREAM_WRITE, "file-stream-write", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_LANGUAGE, "scf-get-language", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_TIME, "scf-get-time", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_ASPECT, "scf-get-aspect", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_VOLUME, "scf-get-volume", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_TERRITORY, "scf-get-territory", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_TIMEOUT, "scf-get-timeout", 0x0); + set_fixed_symbol(FIX_SYM_SCF_GET_INACTIVE_TIMEOUT, "scf-get-inactive-timeout", 0x0); + set_fixed_symbol(FIX_SYM_DMA_TO_IOP, "dma-to-iop", 0x0); + set_fixed_symbol(FIX_SYM_KERNEL_SHUTDOWN, "kernel-shutdown", 0x0); + set_fixed_symbol(FIX_SYM_AYBABTU, "aybabtu", 0x0); + set_fixed_symbol(FIX_SYM_STRING_TO_SYMBOL, "string->symbol", 0x0); + set_fixed_symbol(FIX_SYM_SYMBOL_TO_STRING, "symbol->string", 0x0); + set_fixed_symbol(FIX_SYM_PRINT, "print", 0x0); + set_fixed_symbol(FIX_SYM_INSPECT, "inspect", 0x0); + set_fixed_symbol(FIX_SYM_LOAD, "load", 0x0); + set_fixed_symbol(FIX_SYM_LOADB, "loadb", 0x0); + set_fixed_symbol(FIX_SYM_LOADO, "loado", 0x0); + set_fixed_symbol(FIX_SYM_UNLOAD, "unload", 0x0); + set_fixed_symbol(FIX_SYM_FORMAT, "_format", 0x0); + set_fixed_symbol(FIX_SYM_MALLOC, "malloc", 0x0); + set_fixed_symbol(FIX_SYM_KMALLOC, "kmalloc", 0x0); + set_fixed_symbol(FIX_SYM_KMEMOPEN, "kmemopen", 0x0); + set_fixed_symbol(FIX_SYM_KMEMCLOSE, "kmemclose", 0x0); + set_fixed_symbol(FIX_SYM_NEW_DYNAMIC_STRUCTURE, "new-dynamic-structure", 0x0); + set_fixed_symbol(FIX_SYM_METHOD_SET, "method-set!", 0x0); + set_fixed_symbol(FIX_SYM_LINK, "link", 0x0); + set_fixed_symbol(FIX_SYM_LINK_BUSY, "link-busy?", 0x0); + set_fixed_symbol(FIX_SYM_LINK_RESET, "link-reset", 0x0); + set_fixed_symbol(FIX_SYM_LINK_BEGIN, "link-begin", 0x0); + set_fixed_symbol(FIX_SYM_LINK_RESUME, "link-resume", 0x0); + set_fixed_symbol(FIX_SYM_DGO_LOAD, "dgo-load", 0x0); + set_fixed_symbol(FIX_SYM_SQL_QUERY, "sql-query", 0x0); + set_fixed_symbol(FIX_SYM_MC_RUN, "mc-run", 0x0); + set_fixed_symbol(FIX_SYM_MC_FORMAT, "mc-format", 0x0); + set_fixed_symbol(FIX_SYM_MC_UNFORMAT, "mc-unformat", 0x0); + set_fixed_symbol(FIX_SYM_MC_CREATE_FILE, "mc-create-file", 0x0); + set_fixed_symbol(FIX_SYM_MC_SAVE, "mc-save", 0x0); + set_fixed_symbol(FIX_SYM_MC_LOAD, "mc-load", 0x0); + set_fixed_symbol(FIX_SYM_MC_CHECK_RESULT, "mc-check-result", 0x0); + set_fixed_symbol(FIX_SYM_MC_GET_SLOT_INFO, "mc-get-slot-info", 0x0); + set_fixed_symbol(FIX_SYM_MC_MAKEFILE, "mc-makefile", 0x0); + set_fixed_symbol(FIX_SYM_KSET_LANGUAGE, "kset-language", 0x0); + set_fixed_symbol(FIX_SYM_RPC_CALL, "rpc-call", 0x0); + set_fixed_symbol(FIX_SYM_RPC_BUSY, "rpc-busy?", 0x0); + set_fixed_symbol(FIX_SYM_TEST_LOAD_DGO_C, "test-load-dgo-c", 0x0); + set_fixed_symbol(FIX_SYM_SYMLINK2, "symlink2", 0x0); + set_fixed_symbol(FIX_SYM_SYMLINK3, "symlink3", 0x0); + set_fixed_symbol(FIX_SYM_ULTIMATE_MEMCPY, "ultimate-memcpy", 0x0); + set_fixed_symbol(FIX_SYM_PLAY, "play", 0x0); + + set_fixed_symbol(FIX_SYM_SYMBOL_STRING, "*symbol-string*", SymbolString.offset); + set_fixed_symbol(FIX_SYM_KERNEL_SYMBOL_WARNINGS, "*kernel-symbol-warnings*", + s7.offset + FIX_SYM_TRUE); + set_fixed_symbol(FIX_SYM_NETWORK_BOOTSTRAP, "network-bootstrap", 0); + + auto new_illegal_func = make_function_from_c((void*)new_illegal); + auto delete_illegal_func = make_function_from_c((void*)delete_illegal); + auto print_object_func = make_function_from_c((void*)print_object); + auto inspect_object_func = make_function_from_c((void*)inspect_object); + + set_fixed_type(FIX_SYM_OBJECT_TYPE, "object", get_fixed_type_symbol(FIX_SYM_OBJECT_TYPE), + pack_type_flag(9, 0, 4), print_object_func.offset, inspect_object_func.offset); + auto object_type = Ptr(u32_in_fixed_sym(FIX_SYM_OBJECT_TYPE)); + object_type->new_method = Ptr(u32_in_fixed_sym(FIX_SYM_NOTHING_FUNC)); // new for jak 2 + object_type->delete_method = delete_illegal_func; + object_type->asize_of_method = + Ptr(u32_in_fixed_sym(FIX_SYM_ZERO_FUNC)); // changed to zero! + object_type->length_method = + Ptr(u32_in_fixed_sym(FIX_SYM_ZERO_FUNC)); // changed to zero! + object_type->copy_method = make_function_from_c((void*)copy_fixed); + + auto structure_type = + set_fixed_type(FIX_SYM_STRUCTURE, "structure", get_fixed_type_symbol(FIX_SYM_OBJECT_TYPE), + pack_type_flag(9, 0, 4), make_function_from_c((void*)print_structure).offset, + make_function_from_c((void*)inspect_structure).offset); + structure_type->new_method = make_function_from_c((void*)new_structure); + structure_type->delete_method = make_function_from_c((void*)delete_structure); + + auto basic_type = + set_fixed_type(FIX_SYM_BASIC, "basic", get_fixed_type_symbol(FIX_SYM_STRUCTURE), + pack_type_flag(9, 0, 4), make_function_from_c((void*)print_basic).offset, + make_function_from_c((void*)inspect_basic).offset); + basic_type->new_method = make_function_from_c((void*)new_basic, true); + basic_type->delete_method = Ptr(u32_in_fixed_sym(FIX_SYM_DELETE_BASIC)); + basic_type->asize_of_method = Ptr(u32_in_fixed_sym(FIX_SYM_ASIZE_OF_BASIC_FUNC)); + basic_type->copy_method = Ptr(u32_in_fixed_sym(FIX_SYM_COPY_BASIC_FUNC)); + + set_fixed_type(FIX_SYM_SYMBOL_TYPE, "symbol", get_fixed_type_symbol(FIX_SYM_OBJECT_TYPE), + pack_type_flag(9, 0, 4), make_function_from_c((void*)print_symbol).offset, + make_function_from_c((void*)inspect_symbol).offset); + auto sym_type = Ptr(u32_in_fixed_sym(FIX_SYM_SYMBOL_TYPE)); + sym_type->new_method = new_illegal_func; + sym_type->delete_method = delete_illegal_func; + + set_fixed_type(FIX_SYM_TYPE_TYPE, "type", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 0x38), make_function_from_c((void*)print_type).offset, + make_function_from_c((void*)inspect_type).offset); + auto type_type = Ptr(u32_in_fixed_sym(FIX_SYM_TYPE_TYPE)); + type_type->new_method = make_function_from_c((void*)new_type); + type_type->delete_method = delete_illegal_func; + + set_fixed_type(FIX_SYM_STRING_TYPE, "string", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 8), make_function_from_c((void*)print_string).offset, + make_function_from_c((void*)inspect_string).offset); + + set_fixed_type(FIX_SYM_FUNCTION_TYPE, "function", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 4), make_function_from_c((void*)print_function).offset, 0); + auto function_type = Ptr(u32_in_fixed_sym(FIX_SYM_FUNCTION_TYPE)); + function_type->new_method = new_illegal_func; + function_type->delete_method = delete_illegal_func; + + set_fixed_type(FIX_SYM_VU_FUNCTION, "vu-function", get_fixed_type_symbol(FIX_SYM_STRUCTURE), + pack_type_flag(9, 0, 0x10), make_function_from_c((void*)print_vu_function).offset, + make_function_from_c((void*)inspect_vu_function).offset); + Ptr(u32_in_fixed_sym(FIX_SYM_VU_FUNCTION))->delete_method = delete_illegal_func; + + set_fixed_type(FIX_SYM_LINK_BLOCK, "link-block", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 0xc), 0, + make_function_from_c((void*)inspect_link_block).offset); + auto link_block_type = Ptr(u32_in_fixed_sym(FIX_SYM_LINK_BLOCK)); + link_block_type->new_method = new_illegal_func; + link_block_type->delete_method = delete_illegal_func; + + set_fixed_type(FIX_SYM_HEAP, "kheap", get_fixed_type_symbol(FIX_SYM_STRUCTURE), + pack_type_flag(9, 0, 0x10), 0, make_function_from_c((void*)inspect_kheap).offset); + + set_fixed_type(FIX_SYM_ARRAY, "array", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 0x10), 0, 0); + + set_fixed_type(FIX_SYM_PAIR_TYPE, "pair", get_fixed_type_symbol(FIX_SYM_OBJECT_TYPE), + pack_type_flag(9, 0, 8), make_function_from_c((void*)print_pair).offset, + make_function_from_c((void*)inspect_pair).offset); + Ptr(u32_in_fixed_sym(FIX_SYM_PAIR_TYPE))->new_method = + make_function_from_c((void*)new_pair); + Ptr(u32_in_fixed_sym(FIX_SYM_PAIR_TYPE))->delete_method = + make_function_from_c((void*)delete_pair); + + set_fixed_type(FIX_SYM_PROCESS_TREE, "process-tree", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(0xe, 0, 0x24), 0, 0); + set_fixed_type(FIX_SYM_PROCESS_TYPE, "process", get_fixed_type_symbol(FIX_SYM_PROCESS_TREE), + pack_type_flag(0xe, 0, 0x80), 0, 0); + set_fixed_type(FIX_SYM_THREAD, "thread", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(0xc, 0, 0x28), 0, 0); + set_fixed_type(FIX_SYM_CONNECTABLE, "connectable", get_fixed_type_symbol(FIX_SYM_STRUCTURE), + pack_type_flag(9, 0, 0x10), 0, 0); + set_fixed_type(FIX_SYM_STACK_FRAME, "stack-frame", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 0xc), 0, 0); + set_fixed_type(FIX_SYM_FILE_STREAM, "file-stream", get_fixed_type_symbol(FIX_SYM_BASIC), + pack_type_flag(9, 0, 0x14), 0, 0); + set_fixed_type(FIX_SYM_POINTER, "pointer", get_fixed_type_symbol(FIX_SYM_OBJECT_TYPE), + pack_type_flag(9, 0, 4), 0, 0); + Ptr(u32_in_fixed_sym(FIX_SYM_POINTER))->new_method = new_illegal_func; + + set_fixed_type(FIX_SYM_NUMBER, "number", get_fixed_type_symbol(FIX_SYM_OBJECT_TYPE), + pack_type_flag(9, 0, 8), make_function_from_c((void*)print_integer).offset, + make_function_from_c((void*)inspect_integer).offset); + Ptr(u32_in_fixed_sym(FIX_SYM_NUMBER))->new_method = new_illegal_func; + + set_fixed_type(FIX_SYM_FLOAT, "float", get_fixed_type_symbol(FIX_SYM_NUMBER), + pack_type_flag(9, 0, 4), make_function_from_c((void*)print_float).offset, + make_function_from_c((void*)inspect_float).offset); + + set_fixed_type(FIX_SYM_INTEGER, "integer", get_fixed_type_symbol(FIX_SYM_NUMBER), + pack_type_flag(9, 0, 8), 0, 0); + + set_fixed_type(FIX_SYM_BINTEGER, "binteger", get_fixed_type_symbol(FIX_SYM_INTEGER), + pack_type_flag(9, 0, 8), make_function_from_c((void*)print_binteger).offset, + make_function_from_c((void*)inspect_binteger).offset); + + set_fixed_type(FIX_SYM_SINTEGER, "sinteger", get_fixed_type_symbol(FIX_SYM_INTEGER), + pack_type_flag(9, 0, 8), 0, 0); + set_fixed_type(FIX_SYM_INT8, "int8", get_fixed_type_symbol(FIX_SYM_SINTEGER), + pack_type_flag(9, 0, 1), 0, 0); + set_fixed_type(FIX_SYM_INT16, "int16", get_fixed_type_symbol(FIX_SYM_SINTEGER), + pack_type_flag(9, 0, 2), 0, 0); + set_fixed_type(FIX_SYM_INT32, "int32", get_fixed_type_symbol(FIX_SYM_SINTEGER), + pack_type_flag(9, 0, 4), 0, 0); + set_fixed_type(FIX_SYM_INT64, "int64", get_fixed_type_symbol(FIX_SYM_SINTEGER), + pack_type_flag(9, 0, 8), 0, 0); + set_fixed_type(FIX_SYM_INT128, "int128", get_fixed_type_symbol(FIX_SYM_SINTEGER), + pack_type_flag(9, 0, 16), 0, 0); + + set_fixed_type(FIX_SYM_UINTEGER, "uinteger", get_fixed_type_symbol(FIX_SYM_INTEGER), + pack_type_flag(9, 0, 8), 0, 0); + set_fixed_type(FIX_SYM_UINT8, "uint8", get_fixed_type_symbol(FIX_SYM_UINTEGER), + pack_type_flag(9, 0, 1), 0, 0); + set_fixed_type(FIX_SYM_UINT16, "uint16", get_fixed_type_symbol(FIX_SYM_UINTEGER), + pack_type_flag(9, 0, 2), 0, 0); + set_fixed_type(FIX_SYM_UINT32, "uint32", get_fixed_type_symbol(FIX_SYM_UINTEGER), + pack_type_flag(9, 0, 4), 0, 0); + set_fixed_type(FIX_SYM_UINT64, "uint64", get_fixed_type_symbol(FIX_SYM_UINTEGER), + pack_type_flag(9, 0, 8), 0, 0); + set_fixed_type(FIX_SYM_UINT128, "uint128", get_fixed_type_symbol(FIX_SYM_UINTEGER), + pack_type_flag(9, 0, 16), 0, 0); + + Ptr(u32_in_fixed_sym(FIX_SYM_OBJECT_TYPE))->new_method = + make_function_from_c((void*)alloc_heap_object, true); + + make_function_symbol_from_c("string->symbol", (void*)intern); + make_function_symbol_from_c("symbol->string", (void*)symbol_to_string_from_c); + make_function_symbol_from_c("print", (void*)sprint); + make_function_symbol_from_c("inspect", (void*)inspect_object); + make_function_symbol_from_c("load", (void*)load); + make_function_symbol_from_c("loadb", (void*)loadb); + make_function_symbol_from_c("loado", (void*)loado); + make_function_symbol_from_c("unload", (void*)unload); + make_stack_arg_function_symbol_from_c("_format", (void*)format_impl_jakx); + make_function_symbol_from_c("malloc", (void*)alloc_heap_memory); + make_function_symbol_from_c("kmalloc", (void*)goal_malloc); + make_function_symbol_from_c("kmemopen", (void*)kmemopen); + make_function_symbol_from_c("kmemclose", (void*)kmemclose); + make_function_symbol_from_c("new-dynamic-structure", (void*)new_dynamic_structure); + make_function_symbol_from_c("method-set!", (void*)method_set); + make_stack_arg_function_symbol_from_c("link", (void*)link_and_exec_wrapper); + make_function_symbol_from_c("link-busy?", (void*)link_busy); + make_function_symbol_from_c("link-reset", (void*)link_reset); + make_function_symbol_from_c("dgo-load", (void*)load_and_link_dgo); + make_raw_function_symbol_from_c("ultimate-memcpy", 0); + make_raw_function_symbol_from_c("symlink2", 0); + make_raw_function_symbol_from_c("symlink3", 0); + make_stack_arg_function_symbol_from_c("link-begin", (void*)link_begin); + make_function_symbol_from_c("link-resume", (void*)link_resume); + make_function_symbol_from_c("sql-query", (void*)sql_query_sync); + make_function_symbol_from_c("mc-run", (void*)MC_run); + make_function_symbol_from_c("mc-format", (void*)MC_format); + make_function_symbol_from_c("mc-unformat", (void*)MC_unformat); + make_function_symbol_from_c("mc-create-file", (void*)MC_createfile); + make_function_symbol_from_c("mc-save", (void*)MC_save); + make_function_symbol_from_c("mc-load", (void*)MC_load); + make_function_symbol_from_c("mc-check-result", (void*)MC_check_result); + make_function_symbol_from_c("mc-get-slot-info", (void*)MC_get_status); + make_function_symbol_from_c("mc-makefile", (void*)MC_makefile); + make_function_symbol_from_c("kset-language", (void*)MC_set_language); + + auto ds_symbol = intern_from_c(-1, 0, "*debug-segment*"); + if (DebugSegment) { + ds_symbol->value() = (s7 + FIX_SYM_TRUE).offset; + } else { + ds_symbol->value() = (s7 + FIX_SYM_FALSE).offset; + } + + auto method_set_symbol = intern_from_c(-1, 0, "*enable-method-set*"); + EnableMethodSet = method_set_symbol.cast() - 1; + method_set_symbol->value() = 0; + + KernelDebug = intern_from_c(-1, 0, "*kernel-debug*").cast() - 1; + *KernelDebug = 0; + + intern_from_c(-1, 0, "*boot-video-mode*")->value() = 0; + intern_from_c(-1, 0, "*video-mode*")->value() = 0; + + SqlResult = intern_from_c(-1, 0, "*sql-result*"); + SqlResult->value() = s7.offset; + + CollapseQuote = intern_from_c(-1, 0, "*collapse-quote*"); + CollapseQuote->value() = s7.offset + FIX_SYM_TRUE; + + LevelTypeList = intern_from_c(-1, 0, "*level-type-list*"); + + if (MasterUseKernel) { + *EnableMethodSet = *EnableMethodSet + 1; + load_and_link_dgo_from_c("kernel", kglobalheap, + LINK_FLAG_OUTPUT_LOAD | LINK_FLAG_EXECUTE | LINK_FLAG_PRINT_LOGIN, + 0x400000, true); + *EnableMethodSet = *EnableMethodSet + -1; + + auto kernel_version = intern_from_c(-1, 0, "*kernel-version*")->value(); + if (!kernel_version || ((kernel_version >> 0x13) != KERNEL_VERSION_MAJOR)) { + lg::error( + "Kernel version mismatch! Compiled C kernel version is {}.{} but" + " the goal kernel is {}.{}", + KERNEL_VERSION_MAJOR, KERNEL_VERSION_MINOR, kernel_version >> 0x13, + (kernel_version >> 3) & 0xffff); + return -1; + } else { + lg::info("Got correct kernel version {}.{}", kernel_version >> 0x13, + (kernel_version >> 3) & 0xffff); + } + } + + protoBlock.deci2count = intern_from_c(-1, 0, "*deci-count*").cast() - 1; + InitListener(); + InitMachineScheme(); + kmemclose(); + return 0; +} + +u64 load(u32 /*file_name_in*/, u32 /*heap_in*/) { + ASSERT(false); + return 0; +} + +u64 loadb(u32 /*file_name_in*/, u32 /*heap_in*/, u32 /*param3*/) { + ASSERT(false); + return 0; +} + +u64 loadc(const char* /*file_name*/, kheapinfo* /*heap*/, u32 /*flags*/) { + ASSERT(false); + return 0; +} + +u64 loado(u32 file_name_in, u32 heap_in) { + char loadName[272]; + Ptr file_name(file_name_in); + Ptr heap(heap_in); + printf("****** CALL TO loado(%s) ******\n", file_name->data()); + kstrcpy(loadName, MakeFileName(DATA_FILE_TYPE, file_name->data(), 0)); + s32 returnValue = load_and_link(file_name->data(), loadName, heap.c(), LINK_FLAG_PRINT_LOGIN); + + if (returnValue < 0) { + return s7.offset; + } else { + return returnValue; + } +} + +/*! + * "Unload". Doesn't free memory, just informs listener we unloaded. + */ +u64 unload(u32 name) { + output_unload(Ptr(name)->data()); + return 0; +} + +s64 load_and_link(const char* filename, char* decode_name, kheapinfo* heap, u32 flags) { + (void)filename; + s32 sz; + auto rv = FileLoad(decode_name, make_ptr(heap), Ptr(0), KMALLOC_ALIGN_64, &sz); + if (((s32)rv.offset) > -1) { + return (s32)link_and_exec(rv, decode_name, sz, make_ptr(heap), flags, false).offset; + } + return (s32)rv.offset; +} + +} // namespace jakx diff --git a/game/kernel/jakx/kscheme.h b/game/kernel/jakx/kscheme.h new file mode 100644 index 0000000000..5729827425 --- /dev/null +++ b/game/kernel/jakx/kscheme.h @@ -0,0 +1,78 @@ +#pragma once + +#include "game/kernel/common/Ptr.h" +#include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/kmalloc.h" +#include "game/kernel/common/kscheme.h" + +namespace jakx { +void kscheme_init_globals(); +constexpr s32 SYMBOL_OFFSET = 1; +extern Ptr SymbolString; +extern bool DebugSymbols; + +/*! + * GOAL Type + */ +struct Type { + Ptr>> symbol; //! The type's symbol 0x0 + Ptr parent; //! The type's parent 0x4 + u16 allocated_size; //! The type's size in memory 0x8 + u16 padded_size; //! The type's size, when padded? 0xa + + u16 heap_base; //! relative location of heap 0xc + u16 num_methods; //! allocated-length field 0xe - 0xf + + Ptr new_method; // 16 0 + Ptr delete_method; // 20 1 + Ptr print_method; // 24 2 + Ptr inspect_method; // 28 3 + Ptr length_method; // 32 4 + Ptr asize_of_method; // 36 5 + Ptr copy_method; // 40 6 + Ptr relocate_method; // 44 7 + Ptr memusage_method; // 48 8 + + Ptr& get_method(u32 i) { + Ptr* f = &new_method; + return f[i]; + } +}; + +s64 load_and_link(const char* filename, char* decode_name, kheapinfo* heap, u32 flags); +u32 u32_in_fixed_sym(u32 offset); +Ptr> intern_from_c(int sym_id, int flags, const char* name); +u64 load(u32 /*file_name_in*/, u32 /*heap_in*/); +u64 loadb(u32 /*file_name_in*/, u32 /*heap_in*/, u32 /*param3*/); +u64 loadc(const char* /*file_name*/, kheapinfo* /*heap*/, u32 /*flags*/); +u64 loado(u32 file_name_in, u32 heap_in); +u64 unload(u32 name); +Ptr make_function_symbol_from_c(const char* name, void* f); +Ptr make_stack_arg_function_symbol_from_c(const char* name, void* f); +u64 print_object(u32 obj); +u64 inspect_object(u32 obj); +Ptr> find_symbol_from_c(uint16_t sym_id, const char* name); +u64 make_string_from_c(const char* c_str); +u64 call_method_of_type(u32 arg, Ptr type, u32 method_id); +u64 new_pair(u32 heap, u32 type, u32 car, u32 cdr); +u64 call_goal_function_by_name(const char* name); +Ptr intern_type_from_c(int a, int b, const char* name, u64 methods); +u64 alloc_heap_object(u32 heap, u32 type, u32 size, u32 pp); +int InitHeapAndSymbol(); +u64 call_method_of_type_arg2(u32 arg, Ptr type, u32 method_id, u32 a1, u32 a2); +u64 alloc_heap_memory(u32 heap, u32 size); +template +Ptr> sym_to_string_ptr(Ptr> in) { + return Ptr>(SymbolString.offset + in.offset - s7.offset); +} +template +Ptr sym_to_string(Ptr> in) { + return *sym_to_string_ptr(in); +} + +template +const char* sym_to_cstring(Ptr> in) { + return sym_to_string(in)->data(); +} + +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/ksocket.cpp b/game/kernel/jakx/ksocket.cpp new file mode 100644 index 0000000000..73d2f164b7 --- /dev/null +++ b/game/kernel/jakx/ksocket.cpp @@ -0,0 +1,3 @@ + + +#include "ksocket.h" diff --git a/game/kernel/jakx/ksocket.h b/game/kernel/jakx/ksocket.h new file mode 100644 index 0000000000..0d2e1c062d --- /dev/null +++ b/game/kernel/jakx/ksocket.h @@ -0,0 +1,3 @@ +#pragma once + +namespace jakx {} \ No newline at end of file diff --git a/game/kernel/jakx/ksound.cpp b/game/kernel/jakx/ksound.cpp new file mode 100644 index 0000000000..cc9f9d4da4 --- /dev/null +++ b/game/kernel/jakx/ksound.cpp @@ -0,0 +1,20 @@ +#include "ksound.h" + +#include "game/kernel/common/kdgo.h" +#include "game/kernel/common/ksound.h" +#include "game/kernel/jakx/kscheme.h" + +namespace jakx { +/*! + * Set up some functions which are somewhat related to sound. + */ +void InitSoundScheme() { + make_function_symbol_from_c("rpc-busy?", (void*)RpcBusy); + make_function_symbol_from_c("test-load-dgo-c", (void*)LoadDGOTest); + make_stack_arg_function_symbol_from_c("rpc-call", (void*)RpcCall_wrapper); + + // PC port interns + make_function_symbol_from_c("pc-sound-set-flava-hack", (void*)set_flava_hack); + make_function_symbol_from_c("pc-sound-set-fade-hack", (void*)set_fade_hack); +} +} // namespace jakx \ No newline at end of file diff --git a/game/kernel/jakx/ksound.h b/game/kernel/jakx/ksound.h new file mode 100644 index 0000000000..f5e45aea5a --- /dev/null +++ b/game/kernel/jakx/ksound.h @@ -0,0 +1,5 @@ +#pragma once + +namespace jakx { +void InitSoundScheme(); +} \ No newline at end of file diff --git a/game/mips2c/jakx_functions/todo.txt b/game/mips2c/jakx_functions/todo.txt new file mode 100644 index 0000000000..2b31011cf9 --- /dev/null +++ b/game/mips2c/jakx_functions/todo.txt @@ -0,0 +1 @@ +hey \ No newline at end of file diff --git a/game/mips2c/mips2c_table.cpp b/game/mips2c/mips2c_table.cpp index 8865ef75e8..018b0d3316 100644 --- a/game/mips2c/mips2c_table.cpp +++ b/game/mips2c/mips2c_table.cpp @@ -656,7 +656,9 @@ PerGameVersion>> gMips2C jak3::shadow_add_verts::link, jak3::shadow_add_facing_single_tris::link, jak3::shadow_add_single_edges::link, jak3::shadow_add_double_edges::link, jak3::shadow_add_single_tris::link, jak3::shadow_add_double_tris::link}}, - {"cloth", {jak3::method_21_cloth_system::link}}}}; + {"cloth", {jak3::method_21_cloth_system::link}}}, + /////////// JAK X + {}}; void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) { const auto& it = m_executes.insert({name, {exec, Ptr()}}); diff --git a/game/overlord/jakx/basefile.cpp b/game/overlord/jakx/basefile.cpp new file mode 100644 index 0000000000..609dfcad1e --- /dev/null +++ b/game/overlord/jakx/basefile.cpp @@ -0,0 +1,333 @@ +#include "basefile.h" + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/pagemanager.h" +#include "game/overlord/jakx/vag.h" + +namespace jakx { +void jakx_overlord_init_globals_basefile() {} + +/*! + * Construct a CBaseFile in an unused state. + */ +CBaseFile::CBaseFile() { + m_Buffer.m_pCurrentData = nullptr; + m_Buffer.m_pCurrentPageStart = nullptr; + m_Buffer.m_nMinNumPages = 1; + m_Buffer.m_nMaxNumPages = kDefaultBufferPageCount; + m_Buffer.m_nDataLength = 0; + m_Buffer.m_pPageList = nullptr; + m_Buffer.m_pIsoCmd = nullptr; + m_Buffer.m_eBufferType = CBuffer::BufferType::EBT_FREE; + + m_ProcessDataSemaphore = -1; + m_FileDef = nullptr; + m_FileKind = Kind::UNKNOWN; + m_Status = EIsoStatus::NONE_0; + m_ReadRate = 0; + m_LengthPages = 0; + m_PageOffset = 0; + m_nNumPages = kDefaultBufferPageCount; +} + +/*! + * Construct a CBaseFile for a given file, but keep it in the "idle" state, with no buffer + * allocated. + */ +CBaseFile::CBaseFile(const jakx::ISOFileDef* file, int semaphore) { + m_Buffer.m_pCurrentData = nullptr; + m_Buffer.m_nMaxNumPages = kDefaultBufferPageCount; + m_Buffer.m_nDataLength = 0; + m_Buffer.m_nMinNumPages = 1; + m_Buffer.m_pPageList = nullptr; + m_Buffer.m_pIsoCmd = nullptr; + m_Buffer.m_pCurrentPageStart = nullptr; + m_Buffer.m_eBufferType = CBuffer::BufferType::EBT_FREE; + + m_nNumPages = kDefaultBufferPageCount; + m_FileDef = file; + m_ProcessDataSemaphore = semaphore; + m_FileKind = Kind::UNKNOWN; + m_Status = EIsoStatus::IDLE_1; + m_ReadRate = 0; + m_LengthPages = 0; + m_PageOffset = 0; +} + +/*! + * Update our buffer to handle crossing page boundaries, return pointer to next data. + */ +uint8_t* CBaseFile::CheckPageBoundary() { + // Can't check page boundary if the buffer is not allocated. + ASSERT(m_Buffer.m_eBufferType != CBuffer::BufferType::EBT_FREE); + + // Can't check page boundary if there is no manager + ASSERT(m_Buffer.m_pPageList); + + CPageList* page_list = m_Buffer.m_pPageList; + CPage* page = page_list->m_pCurrentActivePage; + + // can only return data if there's an active page + if (!page || page_list->m_nNumActivePages <= 0) { + return nullptr; + } + + // buffer doesn't know the current page, just reset it to the start of the active page. + if (m_Buffer.m_pCurrentPageStart == nullptr) { + m_Buffer.m_pCurrentData = page->m_pPageMemStart; + m_Buffer.m_pCurrentPageStart = page->m_pPageMemStart; + } else { + uint8_t* end_ptr = page->m_pPageMemEnd; + // check if our data pointer crossed the page boundary + if (end_ptr <= m_Buffer.m_pCurrentData) { + // it did! + uint8_t* past_boundary_ptr = m_Buffer.m_pCurrentData; + + // get the next active page + CPage* next_page = page_list->StepActivePage(); + if (!next_page) { + // no more active pages, no data to process + m_Buffer.m_pCurrentPageStart = nullptr; + m_Buffer.m_pCurrentData = nullptr; + ovrld_log(LogCategory::PAGING, "File {} ran out of pages in CheckPageBoundary", + m_FileDef->name.data); + } else { + // this is a little weird, but if we went past the end of the previous page, we actually + // start at an offset into the next page - perhaps the user could know that pages are + // consecutive in memory? + uint8_t* new_page_mem = next_page->m_pPageMemStart; + m_Buffer.m_pCurrentData = new_page_mem + (end_ptr + 1 - past_boundary_ptr); + m_Buffer.m_pCurrentPageStart = new_page_mem; + ovrld_log(LogCategory::PAGING, "File {} advanced to next page (wrapped {} bytes)", + m_FileDef->name.data, (end_ptr + 1 - past_boundary_ptr)); + } + } + } + return m_Buffer.m_pCurrentData; +} + +/*! + * Allocate pages and set up the CBuffer for the given ISO Msg and type. + */ +int CBaseFile::InitBuffer(CBuffer::BufferType type, jakx::ISO_Hdr* msg) { + ASSERT(msg); + m_Buffer.m_pCurrentData = nullptr; + m_Buffer.m_pPageList = nullptr; + m_Buffer.m_pIsoCmd = msg; + m_Buffer.m_pCurrentPageStart = nullptr; + m_Buffer.m_nDataLength = 0; + m_Buffer.m_eBufferType = CBuffer::BufferType::EBT_FREE; + m_Buffer.m_nMinNumPages = 1; + m_Buffer.m_nMaxNumPages = kDefaultBufferPageCount; + m_nNumPages = 4; + + // adjust size based on the request buffer type + switch (type) { + case CBuffer::BufferType::REQUEST_NORMAL: { // 3 + m_Buffer.m_pCurrentData = nullptr; + m_Buffer.m_nMinNumPages = 1; + m_Buffer.m_nMaxNumPages = 4; + m_nNumPages = 4; + m_Buffer.m_nDataLength = 0; + m_Buffer.m_pCurrentPageStart = nullptr; + m_Buffer.m_eBufferType = CBuffer::BufferType::NORMAL; // 1 + + // and the iso msg request. + switch (msg->msg_type) { + case ISO_Hdr::MsgType::LOAD_EE: + case ISO_Hdr::MsgType::LOAD_IOP: + case ISO_Hdr::MsgType::LOAD_EE_CHUNK: + m_Buffer.m_nMinNumPages = 1; + m_nNumPages = 4; + m_Buffer.m_nMaxNumPages = 4; + break; + case ISO_Hdr::MsgType::LOAD_SOUNDBANK: + m_Buffer.m_nMinNumPages = 1; + m_Buffer.m_nMaxNumPages = 2; + break; + default: + break; + } + + } break; + case CBuffer::BufferType::REQUEST_VAG: { + m_Buffer.m_pCurrentData = nullptr; + m_Buffer.m_eBufferType = CBuffer::BufferType::VAG; + m_Buffer.m_nMinNumPages = 1; + m_nNumPages = 0x10; + m_Buffer.m_nDataLength = 0; + m_Buffer.m_pCurrentPageStart = nullptr; + m_Buffer.m_nMaxNumPages = 0x10; + } break; + default: + ASSERT_NOT_REACHED(); // bad buffer type + } + + ovrld_log(LogCategory::PAGING, "File {} initializing buffer ({} pages {} min {} max)", + m_FileDef->name.data, m_nNumPages, m_Buffer.m_nMinNumPages, m_Buffer.m_nMaxNumPages); + + // Actual allocation of page data + CPageList* page_list = AllocPages(); + if (page_list) { + // set up the current pointers of the buffer. + m_Buffer.m_pCurrentPageStart = page_list->m_pFirstPage->m_pPageMemStart; + m_Buffer.m_pCurrentData = m_Buffer.m_pCurrentPageStart; + return 1; + } else { + ovrld_log(LogCategory::WARN, "File {} failed to allocate a page list.", m_FileDef->name.data); + // if it failed, terminate the buffer + TerminateBuffer(); + return 0; + } +} + +/*! + * Free page memory, clear event flags for cpages. + */ +void CBaseFile::TerminateBuffer() { + ovrld_log(LogCategory::PAGING, "File {} terminating buffer.", m_FileDef->name.data); + + auto buffer_type = m_Buffer.m_eBufferType; + if (buffer_type != CBuffer::BufferType::EBT_FREE) { + // clean up our pages + auto* page_list = m_Buffer.m_pPageList; + if (page_list) { + // stop try to load + page_list->CancelActivePages(); + } + + switch (buffer_type) { + case CBuffer::BufferType::EBT_FREE: + case CBuffer::BufferType::NORMAL: + case CBuffer::BufferType::VAG: + case CBuffer::BufferType::REQUEST_NORMAL: + case CBuffer::BufferType::REQUEST_VAG: + // return memory + FreePages(); + + // reset our buffer + m_Buffer.m_nDataLength = 0; + m_Buffer.m_pCurrentPageStart = 0; + m_Buffer.m_eBufferType = CBuffer::BufferType::EBT_FREE; + + // reset our command + if (buffer_type != CBuffer::BufferType::EBT_FREE) { + ASSERT(m_Buffer.m_pIsoCmd); + m_Buffer.m_pIsoCmd = nullptr; + } + break; + default: + ASSERT_NOT_REACHED(); // Invalid buffer type + } + } else { + ASSERT_NOT_REACHED(); // Buffer already terminated, shouldn't happen again. + } +} + +/*! + * Allocate CPage and CPageList as needed to reach the target number of pages. + */ +CPageList* CBaseFile::AllocPages() { + // should have picked a buffer type + ASSERT(m_Buffer.m_eBufferType != CBuffer::BufferType::EBT_FREE); + + if (m_Buffer.m_eBufferType == CBuffer::BufferType::EBT_FREE) { + return nullptr; + } + + // We might have a PageList or not + auto* old_plist = m_Buffer.m_pPageList; + int old_unstepped_pages = 0; + bool have_plist = old_plist != nullptr; + CPageList* ret_plist = nullptr; + + // if we do have a pagelist, we'll reuse it and any unstepped pages. + if (have_plist) { + old_unstepped_pages = old_plist->m_nNumUnsteppedPages; + ret_plist = old_plist; + } + + int page_alloc_count = 0; + + // to increase unstepped pages to the target m_nNumPages, we need to allocate this many more. + page_alloc_count = m_nNumPages - old_unstepped_pages; + // lg::warn("page counts in AllocPages: {} {}", m_nNumPages, old_unstepped_pages); + if (old_plist) { + // lg::warn(" {} {}", old_plist->m_nNumPages, old_plist->m_nNumActivePages); + } + + if (old_unstepped_pages < (int)m_nNumPages) { + // alloc count will be positive. + + // reduce allocation count to at most the number of free pages + if (get_page_manager()->m_CCache.m_nNumFreePages < page_alloc_count) { + page_alloc_count = get_page_manager()->m_CCache.m_nNumFreePages; + } + + } else { + // alloc count would be negative, don't allocate + page_alloc_count = 0; + } + + switch (m_Buffer.m_eBufferType) { + case CBuffer::BufferType::NORMAL: + case CBuffer::BufferType::REQUEST_NORMAL: { + // don't do anything special + } break; + case CBuffer::BufferType::VAG: + case CBuffer::BufferType::REQUEST_VAG: { + // for VAG commands, we don't bother buffering more than the DMA transfer size + int dma_xfer_size = ((ISO_VAGCommand*)m_Buffer.m_pIsoCmd)->xfer_size; + if (dma_xfer_size) { + ASSERT(dma_xfer_size > 0); + int limit = (dma_xfer_size + 0x7fff) >> 0xf; + if (page_alloc_count > limit) { + ovrld_log(LogCategory::WARN, "File {} wants {} pages, but VAG DMA sizes limit us to ", + m_FileDef->name.data, page_alloc_count, limit); + lg::info("page count dma limit {} -> {}\n", page_alloc_count, limit); + page_alloc_count = limit; + } + } + } break; + default: + ASSERT_NOT_REACHED(); // bad buffer type. + } + + if (page_alloc_count == 0) { + return ret_plist; + } + + ovrld_log(LogCategory::PAGING, "File {} wants {} more pages in AllocPages.", m_FileDef->name.data, + page_alloc_count); + if (have_plist) { + ret_plist = get_page_manager()->GrowPageList(m_Buffer.m_pPageList, page_alloc_count); + } else { + ret_plist = get_page_manager()->AllocPageList(page_alloc_count, 0); + } + + if (ret_plist) { + m_Buffer.m_pPageList = ret_plist; + if (!have_plist) { + m_Buffer.m_pCurrentData = ret_plist->m_pFirstPage->m_pPageMemStart; + } + } else { + ASSERT_NOT_REACHED(); // might be ok. + } + return ret_plist; +} + +/*! + * Free all pages and the page list. + */ +void CBaseFile::FreePages() { + ASSERT(m_Buffer.m_eBufferType != CBuffer::BufferType::EBT_FREE); + if (m_Buffer.m_pPageList) { + get_page_manager()->FreePageList(m_Buffer.m_pPageList); + } + m_Buffer.m_pPageList = nullptr; +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/basefile.h b/game/overlord/jakx/basefile.h new file mode 100644 index 0000000000..236270d5ee --- /dev/null +++ b/game/overlord/jakx/basefile.h @@ -0,0 +1,76 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/overlord/jakx/isocommon.h" +#include "game/overlord/jakx/pagemanager.h" + +namespace jakx { +void jakx_overlord_init_globals_basefile(); + +struct CPageList; +struct ISOFileDef; +struct ISO_Hdr; + +constexpr int kDefaultBufferPageCount = 4; + +/*! + * Base class for a file that the ISO system is processing. + * This represents an "open" file, and contains references to the buffer holding this file's data + */ +struct CBaseFile { + CBaseFile(); + CBaseFile(const ISOFileDef* file, int semaphore); + virtual ~CBaseFile() = default; + + uint8_t* CheckPageBoundary(); + int InitBuffer(CBuffer::BufferType type, ISO_Hdr* msg); + CPageList* AllocPages(); + void TerminateBuffer(); + void FreePages(); + + // buffer that stores some contents of this file + CBuffer m_Buffer; + + // the number of pages that were allocated for reading this file. + u32 m_nNumPages; + + // Metadata about the file + const ISOFileDef* m_FileDef; + + // The compression format used on the file + enum class Kind { + UNKNOWN = 0, + NORMAL = 1, + LZO_COMPRESSED = 2, + } m_FileKind = Kind::UNKNOWN; + + EIsoStatus m_Status = EIsoStatus::NONE_0; + + // The expected read rate for streaming, used to prioritize CD reads. Can be 0 if unknown/not + // applicable. + int m_ReadRate = 0; + + // Number of sectors that we should read in total, decided based on the file size and request from + // user when they opened this file. + int m_LengthPages = 0; // really, in pages... + + // The current offset. (todo: is this for data we read, processed?) + int m_PageOffset = 0; + + // Semaphore that we should wait on before handing new data to the process callback. + // Set to -1 if there is no semaphore. + // (this is a bit of hack, only used for VAG streaming). + int m_ProcessDataSemaphore = 0; + + // virtual methods + virtual EIsoStatus BeginRead() = 0; + virtual EIsoStatus SyncRead() = 0; + virtual void Close() = 0; + virtual int RecoverPages(int num_pages) = 0; + virtual int GetSector() = 0; + // ?? + // ?? + // ?? +}; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/basefilesystem.cpp b/game/overlord/jakx/basefilesystem.cpp new file mode 100644 index 0000000000..c75467bd74 --- /dev/null +++ b/game/overlord/jakx/basefilesystem.cpp @@ -0,0 +1,26 @@ +#include "basefilesystem.h" + +#include "common/util/Assert.h" + +#include "game/sce/iop.h" + +using namespace iop; +namespace jakx { +void jakx_overlord_init_globals_basefilesystem() {} + +CBaseFileSystem::CBaseFileSystem() { + for (auto& sema : m_Sema) { + sema = -1; + + SemaParam param; + param.max_count = 1; + param.attr = 0; + param.init_count = 1; + param.option = 0; + sema = CreateSema(¶m); + if (sema < 0) { + ASSERT_NOT_REACHED(); + } + } +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/basefilesystem.h b/game/overlord/jakx/basefilesystem.h new file mode 100644 index 0000000000..90cd45b041 --- /dev/null +++ b/game/overlord/jakx/basefilesystem.h @@ -0,0 +1,33 @@ +#pragma once + +namespace jakx { +void jakx_overlord_init_globals_basefilesystem(); + +struct ISOFileDef; +struct ISOName; +struct CBaseFile; +struct VagDirEntry; + +constexpr int kMaxOpenFiles = 16; + +/*! + * Base class for "FileSystem", which supports finding and opening files. + * The only implementation we have is CISOCDFileSystem + */ +struct CBaseFileSystem { + CBaseFileSystem(); + virtual ~CBaseFileSystem() = default; + + // semaphores for processing open files + int m_Sema[kMaxOpenFiles]; + + virtual int Init() = 0; + // polldrive + virtual ISOFileDef* Find(const char* name) = 0; + virtual ISOFileDef* FindIN(const ISOName* name) = 0; + virtual int GetLength(const ISOFileDef* file) = 0; + virtual CBaseFile* Open(const ISOFileDef* file_def, int sector_offset, int file_kind) = 0; + virtual CBaseFile* OpenWAD(const ISOFileDef* file_def, int page_offset) = 0; + virtual VagDirEntry* FindVAGFile(const char* name) = 0; +}; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/dma.cpp b/game/overlord/jakx/dma.cpp new file mode 100644 index 0000000000..a0a874c160 --- /dev/null +++ b/game/overlord/jakx/dma.cpp @@ -0,0 +1,625 @@ +#include "dma.h" + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/basefile.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" +#include "game/sound/sdshim.h" +#include "game/sound/sndshim.h" + +#define VOICE_BIT(voice) (1 << ((voice) >> 1)) + +namespace jakx { +OverlordStreamMemory g_overlord_stream_memory; +using namespace iop; +namespace { + +// most recent call to voice_trans_wrapper's arguments +u32 g_voiceTransMode = 0; +u32 g_voiceTransSize = 0; +s16 g_voiceTransChannel = 0; +const void* g_voiceTransAddr = nullptr; +u32 g_voiceTransSpuAddr = 0; + +// if we've started a transfer recently +bool g_voiceTransRunning = false; +// when that transfer was started +u32 g_voiceTransTime = 0; + +// despite the name, this is really an indicator that the SPU streaming system is waiting +// for a SPU interrupt on completion. +bool g_bSpuDmaBusy = false; +int g_nSpuDmaChannel = 0; + +ISO_VAGCommand* g_pDmaVagCmd = nullptr; +ISO_VAGCommand* g_pDmaStereoVagCmd = nullptr; + +int g_nSpuDmaChunks = 0; + +std::array g_aSpuDmaQueue; +int g_nSpuDmaQueueHead = 0; +int g_nSpuDmaQueueTail = 0; +int g_nSpuDmaQueueCount = 0; + +struct DmaInterruptHandlerHack { + s32 chan = 0; + sceSdTransIntrHandler cb = nullptr; + void* data; + int countdown = 0; + bool pending = false; +} g_DmaInterruptHack; + +const char* g_current_stream_name = 0; + +} // namespace + +void jakx_overlord_init_globals_dma() { + g_voiceTransMode = 0; + g_voiceTransSize = 0; + g_voiceTransChannel = 0; + g_voiceTransAddr = nullptr; + g_voiceTransSpuAddr = 0; + g_voiceTransRunning = false; + g_voiceTransTime = 0; + g_bSpuDmaBusy = false; + g_nSpuDmaChannel = 0; + g_pDmaVagCmd = nullptr; + g_pDmaStereoVagCmd = nullptr; + g_nSpuDmaChunks = 0; + g_aSpuDmaQueue = {}; + g_nSpuDmaQueueHead = 0; + g_nSpuDmaQueueCount = 0; + g_nSpuDmaQueueTail = 0; + g_DmaInterruptHack = {}; +} + +// The DMA callback hack below is used to defer dma completion "interrupts" until the next run +// of the ISO Thread. This avoids re-entry type problems where the original design would set off +// a dma transfer in the completion handler of the previous transfer, and expect a few instructions +// to run after. + +void uninstall_dma_intr() { + g_DmaInterruptHack = {}; +} + +void set_dma_intr_handler_hack(s32 chan, sceSdTransIntrHandler cb, void* data) { + ASSERT(!g_DmaInterruptHack.cb); + g_DmaInterruptHack.chan = chan; + g_DmaInterruptHack.cb = cb; + g_DmaInterruptHack.data = data; + g_DmaInterruptHack.countdown = 10; + g_DmaInterruptHack.pending = true; +} + +int SPUDmaIntr(int channel, void* userdata); + +void complete_dma_now() { + if (g_DmaInterruptHack.pending) { + int chan = g_DmaInterruptHack.chan; + void* data = g_DmaInterruptHack.data; + g_DmaInterruptHack = {}; + SPUDmaIntr(chan, data); + } +} + +void dma_intr_hack() { + if (g_DmaInterruptHack.countdown) { + g_DmaInterruptHack.countdown--; + if (g_DmaInterruptHack.countdown == 0) { + int chan = g_DmaInterruptHack.chan; + void* data = g_DmaInterruptHack.data; + g_DmaInterruptHack = {}; + SPUDmaIntr(chan, data); + } + } +} + +/*! + * This function is used to set up a DMA transfer to SPU DMA. + * + * This wrapper was added very close to the end of Jak 3's development. + * + * I believe it basically checks for dma transfers that are somehow "dropped", and retries them. + * Since I don't think our IOP framework will ever do this, we have an assert if the dropped logic + * ever goes off. + */ +int voice_trans_wrapper(s16 chan, u32 mode, const void* iop_addr, u32 spu_addr, u32 size) { + // remember the transfer settings. If there's a transfer in progress, so we can't start here, + // we'll use these to start the transfer later. + g_voiceTransMode = mode; + g_voiceTransSize = size; + g_voiceTransChannel = chan; + g_voiceTransAddr = iop_addr; + g_voiceTransSpuAddr = spu_addr; + + if (g_voiceTransRunning) { + // I claim this should never happen, and this is their workaround for a bug. + ASSERT_NOT_REACHED(); + return -0xd2; // busy + } else { + g_voiceTransRunning = true; + g_voiceTransTime = GetSystemTimeLow(); + + switch (spu_addr) { + case 0x5040: + g_overlord_stream_memory.update_name(g_current_stream_name, 0, 0); + break; + case 0x7040: + g_overlord_stream_memory.update_name(g_current_stream_name, 0, 1); + break; + case 0x9080: + g_overlord_stream_memory.update_name(g_current_stream_name, 1, 0); + break; + case 0xb080: + g_overlord_stream_memory.update_name(g_current_stream_name, 1, 1); + break; + case 0xd0c0: + g_overlord_stream_memory.update_name(g_current_stream_name, 2, 0); + break; + case 0xf0c0: + g_overlord_stream_memory.update_name(g_current_stream_name, 2, 1); + break; + case 0x11100: + g_overlord_stream_memory.update_name(g_current_stream_name, 3, 0); + break; + case 0x13100: + g_overlord_stream_memory.update_name(g_current_stream_name, 3, 1); + break; + case 0x15140: + g_overlord_stream_memory.update_name(g_current_stream_name, 4, 0); + break; + case 0x17140: + g_overlord_stream_memory.update_name(g_current_stream_name, 4, 1); + break; + case 0x19180: + g_overlord_stream_memory.update_name(g_current_stream_name, 5, 0); + break; + case 0x1b180: + g_overlord_stream_memory.update_name(g_current_stream_name, 5, 1); + break; + } + return sceSdVoiceTrans(chan, mode, iop_addr, spu_addr, size); + } +} + +OverlordStreamMemory::OverlordStreamMemory() { + for (auto& x : infos) { + for (auto& y : x) { + y.idx = 0; + strcpy(y.name.chars, "Uninitialized"); + } + } +} + +void OverlordStreamMemory::update_name(const char* input, int stream, int side) { + auto& info = infos[stream][side]; + if (!input) { + strcpy(info.name.chars, "???"); + info.idx = 0; + } else { + if (strcmp(input, info.name.chars) == 0) { + info.idx++; + } else { + info.idx = 0; + strncpy(info.name.chars, input, 48); + info.name.chars[47] = 0; + } + } +} + +u32 read_rate_calc(u32 pitch) { + u64 pitch1 = (pitch >> 3); + u64 mult_result = pitch1 * 0x2492'4925ull; + return mult_result >> 32; +} + +/*! + * The worst function of all time - the SPU DMA completion interrupt. + */ +int SPUDmaIntr(int channel, void* userdata) { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr enter! {} 0x{:x}", channel, (u64)userdata); + + if (!g_bSpuDmaBusy) { + // we got an interrupt, but weren't expecting it, or no longer have the need for the data. + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr exit - not busy"); + return 0; + } + + if (channel != g_nSpuDmaChannel) { + // interrupt was for the wrong channel, somehow. + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr exit - not our channel ??"); + return 0; + } + + // since we're in the completion handler, we know that there is no voice trans (SPU DMA) running. + g_voiceTransRunning = false; + + // This next block will handle updating the playback command that triggered this dma: + if (g_pDmaVagCmd) { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDma for cmd {}", g_pDmaVagCmd->name); + if (!g_pDmaStereoVagCmd) { + // non-stereo audio + + // set a flag to indicate even/odd number of chunks have been dma'd + if ((g_nSpuDmaChunks & 1) == 0) { + g_pDmaVagCmd->flags.dma_complete_even_chunk_count = 1; + } else { + g_pDmaVagCmd->flags.dma_complete_odd_chunk_count = 1; + } + } else { + // stereo audio. This requires two uploads, one for left/right audio. If we've finished the + // first, start the second one here: + if (g_pDmaStereoVagCmd->xfer_size) { + // parameters for second upload + int chan = g_pDmaVagCmd->dma_chan; + const u8* iop_addr = g_pDmaStereoVagCmd->dma_iop_mem_ptr; + int size = g_pDmaStereoVagCmd->xfer_size; + + // SPU addr - toggle the buffer based on stereo side: + // TODO: better explanation of why this picks the correct buffer. + int spu_addr; + if ((g_nSpuDmaChunks & 1) == 0) { + spu_addr = g_pDmaStereoVagCmd->stream_sram; + } else { + spu_addr = g_pDmaStereoVagCmd->stream_sram + 0x2000; + } + + // these lines reordered to possibly support immediate dma completion callback?? + + // clear flag so we know not to transfer the next part + g_pDmaStereoVagCmd->xfer_size = 0; + g_pDmaStereoVagCmd->dma_iop_mem_ptr = nullptr; + + // start next transfer + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr starting stereo sibling transfer"); + set_dma_intr_handler_hack(g_nSpuDmaChannel, SPUDmaIntr, userdata); + voice_trans_wrapper(chan, 0, iop_addr, spu_addr, size); + return 0; + } + + // second stereo upload completed - update double-buffering flags + if ((g_nSpuDmaChunks & 1) == 0) { + g_pDmaVagCmd->flags.dma_complete_even_chunk_count = 1; + g_pDmaStereoVagCmd->flags.dma_complete_even_chunk_count = 1; + } else { + g_pDmaVagCmd->flags.dma_complete_odd_chunk_count = 1; + g_pDmaStereoVagCmd->flags.dma_complete_odd_chunk_count = 1; + } + } + + // if this is the first chunk, we'll start the actual audio here: + // lg::warn("----------> interrupt with chunks {}\n", g_nSpuDmaChunks); + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr chunks count {}", g_nSpuDmaChunks); + + if (g_nSpuDmaChunks == 0) { + // compute pitch/playback rate + int pitch = CalculateVAGPitch(g_pDmaVagCmd->pitch1, g_pDmaVagCmd->pitch_cmd); + ASSERT(pitch == (pitch & 0xffff)); + + // inform the ISO system how fast we're reading + if (g_pDmaVagCmd->m_pBaseFile) { + // unlike actual playback, this is done with the pitch1 value from the file itself - so if + // we speed up/slow down stuff in debug, it won't change streaming modes + const int pitch_from_file = + CalculateVAGPitch(g_pDmaVagCmd->pitch1_file, g_pDmaVagCmd->pitch_cmd); + int rate = g_pDmaStereoVagCmd ? pitch_from_file * 0x2ee : pitch_from_file * 0x177; + g_pDmaVagCmd->m_pBaseFile->m_ReadRate = read_rate_calc(rate); + } + + // start! + u32 voice_mask = 0; + if (!g_pDmaStereoVagCmd) { + // forget any previous spu address + g_pDmaVagCmd->current_spu_address = 0; + + static_assert(SD_VA_SSA == 0x2040); + static_assert(SD_S_KOFF == 0x1600); + static_assert(SD_S_KON == 0x1500); + + static_assert(SD_VP_ADSR1 == 0x300); + static_assert(SD_VP_ADSR2 == 0x400); + static_assert(SD_VP_PITCH == 0x200); + + // before touching SPU2 hardware, wait for voice safety: + BlockUntilVoiceSafe(g_pDmaVagCmd->voice, 0x900); + + // set address and ADSR settings + sceSdSetAddr(g_pDmaVagCmd->voice | SD_VA_SSA, g_pDmaVagCmd->stream_sram + 0x30); + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_ADSR1, 0xff); + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_ADSR2, 0x1fc0); + if (g_pDmaVagCmd->flags.paused) { + pitch = 0; + } + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_PITCH, pitch); + voice_mask = VOICE_BIT(g_pDmaVagCmd->voice); + } else { + // forget any previous spu address + g_pDmaVagCmd->current_spu_address = 0; + g_pDmaStereoVagCmd->current_spu_address = 0; + + // wait for voices to be safe to adjust + BlockUntilVoiceSafe(g_pDmaVagCmd->voice, 0x900); + BlockUntilVoiceSafe(g_pDmaStereoVagCmd->voice, 0x900); + + // set voice params + sceSdSetAddr(g_pDmaVagCmd->voice | SD_VA_SSA, g_pDmaVagCmd->stream_sram + 0x30); + sceSdSetAddr(g_pDmaStereoVagCmd->voice | SD_VA_SSA, g_pDmaStereoVagCmd->stream_sram + 0x30); + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_ADSR1, 0xff); + sceSdSetParam(g_pDmaStereoVagCmd->voice | SD_VP_ADSR1, 0xff); + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_ADSR2, 0x1fc0); + sceSdSetParam(g_pDmaStereoVagCmd->voice | SD_VP_ADSR2, 0x1fc0); + if (g_pDmaVagCmd->flags.paused) { + pitch = 0; + } + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_PITCH, pitch); + sceSdSetParam(g_pDmaStereoVagCmd->voice | SD_VP_PITCH, pitch); + voice_mask = VOICE_BIT(g_pDmaVagCmd->voice) | VOICE_BIT(g_pDmaStereoVagCmd->voice); + } + + // do key-on or key-off + if (g_pDmaVagCmd->flags.paused) { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr chunks 0, key off"); + BlockUntilAllVoicesSafe(); + sceSdSetSwitch(SD_S_KOFF | (g_pDmaVagCmd->voice & 1), voice_mask); + } else { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr chunks 0, key on"); + BlockUntilAllVoicesSafe(); + sceSdSetSwitch(SD_S_KON | (g_pDmaVagCmd->voice & 1), voice_mask); + } + + // remember the time of the key-on/off. This is used to avoid sending voice commands + // quickly, which somehow confuses the sound hardware. + auto sys_time = GetSystemTimeLow(); + MarkVoiceKeyedOnOff(g_pDmaVagCmd->voice, sys_time); + if (g_pDmaStereoVagCmd) { + MarkVoiceKeyedOnOff(g_pDmaStereoVagCmd->voice, sys_time); + } + } else if (g_nSpuDmaChunks == 1) { + g_pDmaVagCmd->flags.saw_chunks1 = 1; + if (g_pDmaStereoVagCmd) { + g_pDmaStereoVagCmd->flags.saw_chunks1 = 1; + } + + if (g_pDmaVagCmd->flags.paused) { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr chunks 1, pausing"); + u32 voice_mask = 0; + if (!g_pDmaStereoVagCmd) { + // pause by setting pitches to 0 + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_PITCH, 0); + BlockUntilVoiceSafe(VOICE_BIT(g_pDmaVagCmd->voice), 0x900); + voice_mask = VOICE_BIT(g_pDmaVagCmd->voice); + } else { + sceSdSetParam(g_pDmaStereoVagCmd->voice | SD_VP_PITCH, 0); + sceSdSetParam(g_pDmaVagCmd->voice | SD_VP_PITCH, 0); + BlockUntilVoiceSafe(VOICE_BIT(g_pDmaVagCmd->voice), 0x900); + BlockUntilVoiceSafe(VOICE_BIT(g_pDmaStereoVagCmd->voice), 0x900); + voice_mask = VOICE_BIT(g_pDmaVagCmd->voice) | VOICE_BIT(g_pDmaStereoVagCmd->voice); + } + + // switch off + BlockUntilAllVoicesSafe(); + sceSdSetSwitch(SD_S_KOFF | (g_pDmaVagCmd->voice & 1), voice_mask); + auto sys_time = GetSystemTimeLow(); + MarkVoiceKeyedOnOff(g_pDmaVagCmd->voice, sys_time); + if (g_pDmaStereoVagCmd) { + MarkVoiceKeyedOnOff(g_pDmaStereoVagCmd->voice, sys_time); + } + } else { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr chunks 1, unpausing by call to UnPauseVAG"); + g_pDmaVagCmd->flags.paused = 1; + UnPauseVAG(g_pDmaVagCmd); + } + } + + // now that we've processed the command from this interrupt, mark it as safe to modify + g_pDmaVagCmd->safe_to_modify_dma = 1; + if (g_pDmaStereoVagCmd) { + g_pDmaStereoVagCmd->safe_to_modify_dma = 1; + } + // and forget it! + g_pDmaVagCmd = nullptr; + g_pDmaStereoVagCmd = nullptr; + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr dma handling of VAG cmd is complete"); + } + + // release ref on this page. (interestingly, not a dma ref...) + if (userdata) { + CPage* page = (CPage*)userdata; + int ret = page->ReleaseRef(); + ASSERT(ret >= 0); + } + + // now - see if we have another queued dma transfer + ASSERT(g_nSpuDmaQueueCount >= 0); + if (g_nSpuDmaQueueCount == 0) { + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr dma queue is empty, disabling interrupt"); + // we're done! + // set_dma_intr_handler_hack(channel, nullptr, nullptr); + uninstall_dma_intr(); + // if (-1 < channel) { + // snd_FreeSPUDMA(channel); + // } + g_bSpuDmaBusy = false; + } else { + ovrld_log(LogCategory::SPU_DMA_STR, + "SPUDmaIntr dma queue is not empty, preparing to run {} ({} pending)", + g_nSpuDmaQueueHead, g_nSpuDmaQueueCount); + // nope, more dma to run + auto* next_xfer = &g_aSpuDmaQueue[g_nSpuDmaQueueHead]; + + // set up the next interrupt handler + set_dma_intr_handler_hack(channel, SPUDmaIntr, next_xfer->user_data); + + // args for the dma transfer + int next_chan = channel; + int next_mode = 0; + const void* next_iop = next_xfer->iop_mem; + u32 next_spu = next_xfer->spu_addr; + u32 next_length = next_xfer->length; + + // load up the commands to handle + g_pDmaVagCmd = next_xfer->command; + g_pDmaStereoVagCmd = nullptr; + if (g_pDmaVagCmd) { + g_pDmaStereoVagCmd = g_pDmaVagCmd->stereo_sibling; + } + g_nSpuDmaChunks = next_xfer->num_isobuffered_chunks; + + // advance the queue! + g_nSpuDmaQueueCount = g_nSpuDmaQueueCount + -1; + g_nSpuDmaQueueHead = g_nSpuDmaQueueHead + 1; + if (0xf < g_nSpuDmaQueueHead) { + g_nSpuDmaQueueHead = 0; + } + + // start the next one! + // set_dma_intr_handler_hack(g_nSpuDmaChannel, SPUDmaIntr, userdata); + voice_trans_wrapper(next_chan, next_mode, next_iop, next_spu, next_length); + } + + ovrld_log(LogCategory::SPU_DMA_STR, "SPUDmaIntr exit - end of function"); + return 0; +} + +/*! + * Start DMA to EE. + */ +void DMA_SendToEE(void* ee_dest, + const void* iop_src, + u32 length, + void callback(void*), + void* callback_arg) { + ASSERT(iop_src); + ASSERT(ee_dest); + ASSERT(((uintptr_t)iop_src & 3) == 0); + ASSERT(((uintptr_t)ee_dest & 0xf) == 0); + ASSERT(length < 0xffff0); + sceSifDmaData cmd; // DMA settings + + // setup command + cmd.mode = 0; + cmd.data = iop_src; + cmd.addr = ee_dest; + cmd.size = length; + + // instant DMA + // ovrld_log(LogCategory::EE_DMA, "DMA_SendToEE: 0x{:x}, size {}", (u64)ee_dest, length); + sceSifSetDma(&cmd, 1); + + // for now, we'll do the callback here, but I bet it will cause problems + if (callback) { + callback(callback_arg); + } +} + +/*! + * Start DMA transfer to SPU. Despite the name, this does not actually "sync" - the transfer will + * be ongoing. If there is an ongoing transfer when this is called, the transfer will be queued. + */ +int DMA_SendToSPUAndSync(const u8* iop_mem, + int length, + int spu_addr, + ISO_VAGCommand* cmd, + void* user_data) { + // CpuSuspendIntr(local_28); + int ret = 1; + bool defer = false; + + ovrld_log(LogCategory::SPU_DMA_STR, + "DMA to SPU requested for {}, {} bytes to 0x{:x}, currently busy? {}", + cmd ? cmd->name : "NO-CMD", length, spu_addr, g_bSpuDmaBusy); + if (cmd) { + g_current_stream_name = cmd->name; + } else { + const static char* unknown = "unknown"; + g_current_stream_name = unknown; + } + + if (g_bSpuDmaBusy == 0) { + // not busy, we can actually start dma now. + g_nSpuDmaChannel = snd_GetFreeSPUDMA(); + if (g_nSpuDmaChannel == -1) { + return 0; + } + // set globals for DMA processing + if (cmd) { + g_nSpuDmaChunks = cmd->num_isobuffered_chunks; + g_pDmaStereoVagCmd = cmd->stereo_sibling; + g_pDmaVagCmd = cmd; + } + + } else { + // busy, need to queue the dma + ASSERT(g_nSpuDmaQueueCount <= (int)g_aSpuDmaQueue.size()); + + // set values: + g_aSpuDmaQueue[g_nSpuDmaQueueTail].length = length; + g_aSpuDmaQueue[g_nSpuDmaQueueTail].spu_addr = spu_addr; + g_aSpuDmaQueue[g_nSpuDmaQueueTail].user_data = user_data; + g_aSpuDmaQueue[g_nSpuDmaQueueTail].num_isobuffered_chunks = + cmd ? cmd->num_isobuffered_chunks : 0; + g_aSpuDmaQueue[g_nSpuDmaQueueTail].command = cmd; + g_aSpuDmaQueue[g_nSpuDmaQueueTail].iop_mem = iop_mem; + g_nSpuDmaQueueCount = g_nSpuDmaQueueCount + 1; + g_nSpuDmaQueueTail = g_nSpuDmaQueueTail + 1; + if (0xf < g_nSpuDmaQueueTail) { + g_nSpuDmaQueueTail = 0; + } + defer = true; + } + + // set up the stereo command + if (cmd) { + cmd->safe_to_modify_dma = 0; + auto* stereo = cmd->stereo_sibling; + if (stereo) { + stereo->num_isobuffered_chunks = cmd->num_isobuffered_chunks; + stereo->dma_iop_mem_ptr = iop_mem + length; + cmd->dma_chan = g_nSpuDmaChannel; + stereo->xfer_size = length; + } + } + + // Note on DMA interrupts. + // The DMA completion interrupt handler function may start more DMA transfers. + // If the second transfer's completion interrupt runs before the first transfer's completion + // interrupt returns, things break. This wasn't an issue on the real PS2 since the DMA takes + // longer. On PC, this means that we can't just call the completion handler from the DMA start + // function. Instead, put it at the end of this function. + + // kick off dma, if we decided not to queue. This copies data immediately to the SPU buffer, but + // doesn't run the completion interrupt. + if (!defer) { + g_bSpuDmaBusy = true; + set_dma_intr_handler_hack(g_nSpuDmaChannel, SPUDmaIntr, user_data); + voice_trans_wrapper(g_nSpuDmaChannel, 0, iop_mem, spu_addr, length); + } + + // run completion interrupts. the interrupt may start another DMA transfer, which should also + // finish here. + while (g_DmaInterruptHack.pending) { + complete_dma_now(); + } + return ret; +} + +/*! + * Run a dma transfer that was delayed or dropped. + */ +void RunDeferredVoiceTrans() { + // only if there's a currently happening transfer. + if (g_voiceTransRunning) { + if (GetSystemTimeLow() - g_voiceTransTime > 0x384000) { + ovrld_log(LogCategory::WARN, "DeferredVoiceTrans has detected hung dma... expect problems."); + // original game also check sceSdVoiceTransStatus here, we'll possibly need to mess with this + // if we delay dma completion interrupts... + g_voiceTransRunning = false; + voice_trans_wrapper(g_voiceTransChannel, g_voiceTransMode, g_voiceTransAddr, + g_voiceTransSpuAddr, g_voiceTransSize); + } + } +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/dma.h b/game/overlord/jakx/dma.h new file mode 100644 index 0000000000..cca6915136 --- /dev/null +++ b/game/overlord/jakx/dma.h @@ -0,0 +1,48 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/overlord/jakx/rpc_interface.h" + +namespace jakx { +void jakx_overlord_init_globals_dma(); +struct ISO_VAGCommand; + +int voice_trans_wrapper(s16 chan, u32 mode, const void* iop_addr, u32 spu_addr, u32 size); +void DMA_SendToEE(void* ee_dest, + const void* iop_src, + u32 length, + void callback(void*), + void* callback_arg); +int DMA_SendToSPUAndSync(const u8* iop_mem, + int length, + int spu_addr, + ISO_VAGCommand* cmd, + void* user_data); +void RunDeferredVoiceTrans(); +struct ISO_VAGCommand; + +struct DmaQueueEntry { + ISO_VAGCommand* command = nullptr; + const void* iop_mem = nullptr; + u32 spu_addr = 0; + u32 length = 0; + void* user_data = nullptr; + u32 num_isobuffered_chunks = 0; +}; +void dma_intr_hack(); + +struct OverlordStreamMemory { + struct Info { + SoundStreamName name; + int idx = 0; + }; + Info infos[6][2]; + + OverlordStreamMemory(); + void update_name(const char* input, int stream, int side); +}; + +extern OverlordStreamMemory g_overlord_stream_memory; + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/dvd_driver.cpp b/game/overlord/jakx/dvd_driver.cpp new file mode 100644 index 0000000000..b2803e966c --- /dev/null +++ b/game/overlord/jakx/dvd_driver.cpp @@ -0,0 +1,589 @@ +#include "dvd_driver.h" + +#include +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" +#include "common/util/FileUtil.h" + +#include "game/overlord/jakx/isocommon.h" +#include "game/overlord/jakx/overlord.h" +#include "game/sce/iop.h" + +namespace jakx { +using namespace iop; +std::unique_ptr g_DvdDriver; +s32 g_nDvdDriverThread = -1; + +void jakx_overlord_init_globals_dvd_driver() { + g_DvdDriver = std::make_unique(); + g_nDvdDriverThread = -1; +} + +CDvdDriver* get_driver() { + return g_DvdDriver.get(); +} + +CMsg::CMsg(jakx::CMsg::MsgKind msg) : m_msg(msg) { + m_ret = 1; + m_thread = GetThreadId(); +} + +int CMsg::send() { + // note: changed from passing data + // and removed corresponding -4 to skip back past the vtable in DVD thread + // (what were they thinking?) + s32 ret = SendMbx(get_driver()->msgbox, this); + if (ret == 0) { + get_driver()->KickDvdThread(); + SleepThread(); + return m_ret; + } + return ret; +} + +// CMsgLock::CMsgLock() : CMsg(CMsg::MsgKind::LOCK) {} +// +// void CMsgLock::handler() { +// get_driver()->Lock(); +// m_ret = 0; +// } + +// CMsgReadRaw::CMsgReadRaw(jakx::BlockParams* params) : CMsg(CMsg::MsgKind::READ_RAW) { +// m_block_params = *params; +// } +// +// void CMsgReadRaw::handler() { +// m_ret = get_driver()->ReadDirect(&m_block_params); +// } + +CMsgCancelRead::CMsgCancelRead(jakx::CDescriptor* desc) : CMsg(CMsg::MsgKind::CANCEL_READ) { + m_desc = desc; +} + +void CMsgCancelRead::handler() { + get_driver()->CancelRead(m_desc); + m_ret = 0; +} + +u32 DvdThread(); + +CDvdDriver::CDvdDriver() { + fifo_entry_sema = -1; + current_thread_priority = 0x13; + disk_type = 5; + tray_flag = 1; + // m_nLockCount = 0; + event_flag = -1; + fifo_access_sema = -1; + tray_flag2 = 1; + initialized = 0; + m_nNumFifoEntries = 0; + ring_head = 0; + ring_tail = 0; + read_in_progress = 0; + callback = nullptr; + // locked = false; + trayflag3 = 0; + m_nDvdThreadAccessSemaCount = 0; + memset(ring, 0, sizeof(Block) * 16); +} + +void CDvdDriver::Initialize() { + if (!initialized) { + *this = {}; + ThreadParam thread_param; + thread_param.attr = 0x2000000; + // mbox_param.option = gDvdDriverThreadOptions; // ??? + thread_param.entry = DvdThread; + thread_param.stackSize = 0x800; + thread_param.initPriority = 0x13; + thread_param.option = 0; + strcpy(thread_param.name, "dvd"); + // mbox_param.attr = (int)PTR_DvdThread_00015c98; // ??? + g_nDvdDriverThread = CreateThread(&thread_param); + ASSERT(g_nDvdDriverThread >= 0); + + SemaParam sema_param; + sema_param.attr = 0; + sema_param.init_count = 1; + sema_param.max_count = 1; + sema_param.option = 0; + fifo_access_sema = CreateSema(&sema_param); + ASSERT(fifo_access_sema >= 0); + sema_param.max_count = 0x10; + sema_param.attr = 0; + sema_param.init_count = 0x10; + sema_param.option = 0; + fifo_entry_sema = CreateSema(&sema_param); + ASSERT(fifo_entry_sema >= 0); + MbxParam mbox_param; + mbox_param.attr = 0; + mbox_param.option = 0; + msgbox = CreateMbx(&mbox_param); + ASSERT(msgbox >= 0); + + EventFlagParam param; + param.attr = 0; + param.option = 0; + param.init_pattern = 0; + event_flag = CreateEventFlag(¶m); + ASSERT(event_flag >= 0); + StartThread(g_nDvdDriverThread, 0); // this... + } + initialized = 1; +} + +void CDvdDriver::SetDriverCallback(std::function f) { + callback = f; +} + +// GetDriveCallback + +// Poll - would kick the thread... + +// void CDvdDriver::Lock() { +// ASSERT_NOT_REACHED(); +// if (GetThreadId() == g_nDvdDriverThread) { +// m_nLockCount++; +// locked = true; +// // needs break HACK +// needs_break = false; +// } else { +// CMsgLock lock; +// lock.send(); +// } +// } + +// Read + +int CDvdDriver::ReadMultiple(CDescriptor* descriptor, + int* pages_read_out, + BlockParams* params, + int num_blocks, + bool block_if_queue_full) { + *pages_read_out = 0; + s32 ret = 1; + + // check block parameters are reasonable + if (ValidateBlockParams(params, num_blocks) != 0) { + bool from_dvd_thread = GetThreadId() == g_nDvdDriverThread; + if (from_dvd_thread) { + // there is a setting to control if this function should block if there are too many + // queued reads. If the is called from the DVD thread, then this would deadlock. + // the original game ignored the block argument, but I'm asserting + block_if_queue_full = 0; + ASSERT_NOT_REACHED(); + } + + ovrld_log(LogCategory::DRIVER, "[driver] ReadMultiple (from our thread? {}) num_blocks {}", + from_dvd_thread, num_blocks); + + ret = 0; + if (0 < num_blocks) { + // loop, until we've done all the requested reads. + do { + s32 acquired_slots = 0; + if (0 < num_blocks) { + // loop to try to get up to num_blocks slots in the fifo + // but, if we get less, we'll take that too + do { + if (PollSema(this->fifo_entry_sema) == -0x1a3) + break; + acquired_slots = acquired_slots + 1; + } while (acquired_slots < num_blocks); + } + ovrld_log(LogCategory::DRIVER, "[driver] ReadMultiple acquired {} slots in ring", + acquired_slots); + + // if we are blocking, and we acquired no slots, then we'll wait here until we get one slot. + if ((block_if_queue_full != 0) && (acquired_slots < 1)) { + ovrld_log(LogCategory::DRIVER, "[driver] ring is full, blocking!"); + acquired_slots = 1; // the one we'll get from the WaitSema below + do { + } while (WaitSema(fifo_entry_sema) != 0); + } + + // lock, now that we've gotten the slots + AcquireFIFOSema(from_dvd_thread); + num_blocks = num_blocks - acquired_slots; + + // if we didn't get any slots, bail. + if (acquired_slots < 1) { + ovrld_log(LogCategory::DRIVER, "[driver] ring is full, bailing!"); + ReleaseFIFOSema(from_dvd_thread); + if (0 < *pages_read_out) { + KickDvdThread(); + } + return 2; + } + + // loop, updating the ring for each slot we aquired + do { + auto* slot = ring + ring_tail; + ovrld_log(LogCategory::DRIVER, "[driver] inserting in ring slot {}", ring_tail); + + ring_tail++; + if (0xf < ring_tail) { + ring_tail = 0; + } + m_nNumFifoEntries++; + + auto* tail = descriptor->m_pTail; + slot->descriptor = descriptor; + slot->params = params[*pages_read_out]; + *pages_read_out = (*pages_read_out) + 1; + if (!tail) { + descriptor->m_pHead = slot; + } else { + tail->next = slot; + } + acquired_slots = acquired_slots + -1; + descriptor->m_pTail = slot; + slot->next = nullptr; + } while (acquired_slots != 0); + ReleaseFIFOSema(from_dvd_thread); + KickDvdThread(); + ret = 0; + } while (0 < num_blocks); + } + } else { + ASSERT_NOT_REACHED(); + } + return ret; +} + +void CDvdDriver::CancelRead(jakx::CDescriptor* desc) { + if (GetThreadId() == g_nDvdDriverThread) { + AcquireFIFOSema(true); + if ((read_in_progress != 0) && (ring[ring_head].descriptor == desc)) { + // while (iVar1 = sceCdBreak(), iVar1 == 0) { + // DelayThread(8000); + // sceCdSync(0); + // } + // sceCdSync(0); + read_in_progress = 0; + } + + Block* iter = desc->m_pHead; + Block* tail = desc->m_pTail; + while (iter) { + if (iter->descriptor) { + CompletionHandler(iter, 6); + } + iter->descriptor = nullptr; + iter->next = nullptr; + if (iter == tail) + break; + iter = desc->m_pHead; + } + + if (desc->m_pTail == tail) { + desc->m_pTail = nullptr; + } + ReleaseFIFOSema(true); + } else { + CMsgCancelRead msg(desc); + msg.send(); + } +} + +s32 CDvdDriver::ValidateBlockParams(jakx::BlockParams* params, int num_params) { + if (!params) { + lg::die("Invalid BlockParams: nullptr"); + return 0; + } + if (num_params < 1) { + lg::die("Invalid BlockParams: size == 0"); + return 0; + } + + for (int i = 0; i < num_params; i++) { + auto& p = params[i]; + if (p.destination == nullptr) { + lg::die("Invalid BlockParams: {} had nullptr dest", i); + return 0; + } + int kMaxSector = 1000000; + if (p.sector_num > kMaxSector) { + // this is just a sanity check - if we ever have larger files this is okay to increase. + lg::die("Invalid BlockParams: {} had sector num {}", i, p.sector_num); + return 0; + } + if (p.num_sectors > 0x1d0) { + lg::die("Invalid BlockParams: {} had sector count {}", i, p.num_sectors); + return 0; + } + if (!p.file_def) { + lg::die("Invalid BlockParams: {} had no file", i); + return 0; + } + } + return 1; +} + +void CDvdDriver::KickDvdThread() { + while (SetEventFlag(event_flag, 1)) { + ; + } +} + +int CDvdDriver::AcquireFIFOSema(bool from_dvd_thread) { + int iVar1; + int iVar2; + + if ((from_dvd_thread != 0) && + (iVar2 = m_nDvdThreadAccessSemaCount, m_nDvdThreadAccessSemaCount = iVar2 + 1, 0 < iVar2)) { + return 0; + } + iVar1 = WaitSema(this->fifo_access_sema); + iVar2 = 0; + if ((iVar1 != 0) && (iVar2 = iVar1, from_dvd_thread != 0)) { + m_nDvdThreadAccessSemaCount = m_nDvdThreadAccessSemaCount + -1; + iVar2 = iVar1; + } + return iVar2; +} + +int CDvdDriver::ReleaseFIFOSema(bool from_dvd_thread) { + int iVar1; + int iVar2; + + if (from_dvd_thread != 0) { + iVar2 = m_nDvdThreadAccessSemaCount + -1; + if (m_nDvdThreadAccessSemaCount < 1) { + return -0x1a4; + } + m_nDvdThreadAccessSemaCount = iVar2; + if (0 < iVar2) { + return 0; + } + } + iVar1 = SignalSema(fifo_access_sema); + iVar2 = 0; + if ((iVar1 != 0) && (iVar2 = iVar1, from_dvd_thread != 0)) { + m_nDvdThreadAccessSemaCount = m_nDvdThreadAccessSemaCount + 1; + iVar2 = iVar1; + } + return iVar2; +} + +/*! + * PC port added function to actually do a read of a block. + */ +void CDvdDriver::read_from_file(const jakx::Block* block) { + const auto* fd = block->params.file_def; + ASSERT(fd); + FileCacheEntry* selected_entry = nullptr; + + // get a cache entry + for (auto& entry : m_file_cache) { + // if we already opened this file, use that + if (entry.def == fd) { + selected_entry = &entry; + break; + } + + // otherwise pick the least recently used + if (!selected_entry) { + selected_entry = &entry; + } else { + if (selected_entry->last_use_count > entry.last_use_count) { + selected_entry = &entry; + } + } + } + + // open a new file if needed + if (selected_entry->def != fd) { + lg::debug("CDvdDriver swapping files {} - > {}", + selected_entry->def ? selected_entry->def->name.data : "NONE", fd->name.data); + if (selected_entry->def) { + fclose(selected_entry->fp); + selected_entry->size = 0; + } + + selected_entry->def = fd; + selected_entry->fp = file_util::open_file(fd->full_path, "rb"); + if (!selected_entry->fp) { + lg::die("Failed to open {} {}", fd->full_path, strerror(errno)); + } + // get the size of the file we actually opened, rather than caching the size at startup to + // support changing the file length after the game has started. + fseek(selected_entry->fp, 0, SEEK_END); + selected_entry->size = ftell(selected_entry->fp); + fseek(selected_entry->fp, 0, SEEK_SET); + selected_entry->offset_in_file = 0; + } + + // increment use counter + selected_entry->last_use_count = m_file_cache_counter++; + + const u64 desired_offset = block->params.sector_num * 0x800; + + // see if we're reading entirely past the end of the file + if (desired_offset >= selected_entry->size) { + return; + } + + if (selected_entry->offset_in_file != desired_offset) { + lg::debug("CDvdDriver jumping in file {}: {} -> {}", fd->name.data, + selected_entry->offset_in_file, desired_offset); + if (fseek(selected_entry->fp, desired_offset, SEEK_SET)) { + ASSERT_NOT_REACHED_MSG("Failed to fseek"); + } + selected_entry->offset_in_file = desired_offset; + } + + // read + s64 read_length = block->params.num_sectors * 0x800; + s64 extra_length = read_length + desired_offset - selected_entry->size; + if (extra_length > 0) { + read_length -= extra_length; + } + auto ret = fread(block->params.destination, read_length, 1, selected_entry->fp); + if (ret != 1) { + lg::die("Failed to read {} {}, size {} of {} (ret {})", fd->full_path, strerror(errno), + read_length, selected_entry->size, ret); + } + selected_entry->offset_in_file += read_length; +} + +u32 DvdThread() { + auto* driver = get_driver(); + + while (true) { + // Poll for messages + CMsg* msg = nullptr; + while (true) { + int poll_status = PollMbx((MsgPacket**)&msg, driver->msgbox); + if (poll_status || !msg) { + break; + } + // run message code + msg->handler(); + // wake the waiting thread. + WakeupThread(msg->m_thread); + } + + bool completed = false; + + // if a read is in progress, wait for it to finish. + if (driver->read_in_progress) { + // TODO: if we switch to async reads, this is where we'd want to sync. + // sceCdSync(0); + completed = true; + // error checking + } + + driver->AcquireFIFOSema(true); + // error handling + + // handle ring book-keeping. + // note that these are somewhat double-buffered - we'll sync on read i-1, start read i, then + // run the completion handler for read i - 1. + // the completion is what actually removes stuff from the ring. + + s32 fifo_slots_freed = completed ? 1 : 0; + s32 ring_entry = driver->ring_head + (completed ? 1 : 0); + if (ring_entry > 15) { + ring_entry = 0; + } + Block* block = driver->ring + ring_entry; + s32 fifo_entries = driver->m_nNumFifoEntries - fifo_slots_freed; + + if (fifo_entries) { + // start a new read. + driver->read_in_progress = 1; + ovrld_log(LogCategory::DRIVER, "[driver thread] Reading for slot {}", block - driver->ring); + driver->read_from_file(block); + + } else { + driver->read_in_progress = 0; + } + + // run completion handler for the previous read - not the one we just started! + Block sblock; + if (completed) { + auto* last_block = &driver->ring[driver->ring_head]; + ovrld_log(LogCategory::DRIVER, "[driver thread] Completion handler for {}", + driver->ring_head); + sblock = *last_block; + + if (sblock.descriptor && sblock.descriptor->m_pHead) { + ASSERT(sblock.descriptor->m_pHead == last_block); + } + if (((sblock.descriptor)->m_pHead == last_block) && + ((sblock.descriptor)->m_pHead = &sblock, (sblock.descriptor)->m_pTail == last_block)) { + (sblock.descriptor)->m_pTail = &sblock; + } + } + driver->ring_head = ring_entry; + driver->m_nNumFifoEntries = fifo_entries; + while (0 < fifo_slots_freed) { + fifo_slots_freed = fifo_slots_freed + -1; + SignalSema(driver->fifo_entry_sema); + } + if (completed != 0) { + driver->CompletionHandler(&sblock, 0); + } + driver->ReleaseFIFOSema(true); + + // this logic here was modified - we go to waiting if we have no more reads. + if (driver->m_nNumFifoEntries == 0) { + ovrld_log(LogCategory::DRIVER, "[driver thread] No work, waiting."); + WaitEventFlag(driver->event_flag, 1, 0x11); + ovrld_log(LogCategory::DRIVER, "[driver thread] Woken up!"); + } + + // s32 status; + // if ((((driver->locked != false)) || + // ((driver->needs_break == 0 && (driver->m_nNumFifoEntries == 0)))) && + // ((status = WaitEventFlag(driver->event_flag, 1, 0x11), + // status != 0 && (status != -0x1a2)))) { + // if (status == -0x1a9) { + // do { + // SleepThread(); + // } while (true); + // } + // DelayThread(8000); + // } + } +} + +void CDvdDriver::CompletionHandler(jakx::Block* block, int code) { + // there is some janky thread priority changes here, + // but they do not seem to be needed with the changes to the ISO thread. + + // PushPri(this,local_20,0x35); + auto* desc = block->descriptor; + if (desc && desc->m_pHead) { + desc->m_status = code; + int thread = desc->m_ThreadID; + if (desc->m_Callback) { + (desc->m_Callback)(desc->m_File, block, code); + } + if (0 < thread) { + WakeupThread(thread); + } + + Block* next; + if ((desc->m_pHead == block) && (next = block->next, desc->m_pHead = next, next == nullptr)) { + desc->m_pTail = nullptr; + } + } + block->next = nullptr; + block->descriptor = nullptr; + // PopPri(this, local_20[0]); +} + +CDvdDriver::~CDvdDriver() { + for (auto& entry : m_file_cache) { + if (entry.fp) { + fclose(entry.fp); + } + } +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/dvd_driver.h b/game/overlord/jakx/dvd_driver.h new file mode 100644 index 0000000000..13dcd7faa5 --- /dev/null +++ b/game/overlord/jakx/dvd_driver.h @@ -0,0 +1,145 @@ +#pragma once + +#include + +#include "common/common_types.h" + +#include "game/overlord/jakx/isocommon.h" + +namespace jakx { +void jakx_overlord_init_globals_dvd_driver(); + +/*! + * The DVD Driver is what actually called the Sony CD library functions. + * It also had many special cases for handling errors, open trays, retries, etc that are not + * recreated in this port. + * + * The original DVD driver thread didn't run the actual reads - the Sony CD library had its own + * threads for async reads. However, they would call sceCdSync() to wait until a read finished. + * It's not clear if sceCdSync would allow other threads to run while waiting on the read to finish. + * but if it did, this is a bit of a difference in the blocking behavior. + * + * This is something that could be revisited, as freads will now essentially block the entire + * overlord, including refilling sound RAM. + */ + +struct CDescriptor; +struct BlockParams; +struct CPage; +struct ISOFileDef; + +// The CMSG system is used to pass messages from external threads to the driver. It's mostly used +// internally by the driver, when functions are called on it from outside threads. In these cases +// the Cmsg will get send to the driver thread and handler will run on it here. + +struct CMsg { + enum class MsgKind { + // LOCK = 0, + READ_RAW = 1, + CANCEL_READ = 2, + }; + CMsg(MsgKind msg); + virtual int send(); + virtual void handler() = 0; + + u8 data[8]; + MsgKind m_msg; + int m_thread; + int m_ret; +}; + +// struct CMsgLock : public CMsg { +// CMsgLock(); +// void handler() override; +// }; + +// struct CMsgReadRaw : public CMsg { +// explicit CMsgReadRaw(BlockParams* params); +// void handler() override; +// BlockParams m_block_params; +// }; + +struct CMsgCancelRead : public CMsg { + explicit CMsgCancelRead(CDescriptor* desc); + void handler() override; + CDescriptor* m_desc; +}; + +struct CISOCDFile; + +/*! + * Reference to an ongoing or requested read at the driver level, possibly made up of multiple + * blocks. In this case, the head/tail pointers point to Blocks stored inside the CDvdDriver's + * internal FIFO. + */ +struct CDescriptor { + CDescriptor() = default; + int m_unk0 = 0; + void (*m_Callback)(CISOCDFile*, Block*, s32) = nullptr; + int m_ThreadID = 0; + int m_status = 0; + CISOCDFile* m_File = nullptr; + Block* m_pHead = nullptr; + Block* m_pTail = nullptr; +}; + +class CDvdDriver { + public: + CDvdDriver(); + ~CDvdDriver(); + void Initialize(); + void CancelRead(CDescriptor* descriptor); + int ReadMultiple(CDescriptor* descriptor, + int* pages_read_out, + BlockParams* params, + int num_pages, + bool block_if_queue_full); + void SetDriverCallback(std::function f); + // int ReadDirect(BlockParams* params); + void KickDvdThread(); + // void Lock(); + int GetDiskType() const { return disk_type; } + s32 ValidateBlockParams(BlockParams* params, int num_params); + int ReleaseFIFOSema(bool from_dvd_thread); + int AcquireFIFOSema(bool from_dvd_thread); + void read_from_file(const Block* block); + void CompletionHandler(Block* block, int code); + + u8 initialized = 0; + s32 event_flag = -1; + s32 fifo_access_sema = -1; + s32 fifo_entry_sema = -1; + s32 msgbox = -1; + s32 m_nNumFifoEntries = 0; + s32 ring_head = 0; + s32 ring_tail = 0; + Block ring[16]; + u8 read_in_progress; // more likely: read in progress + std::function callback; + s32 current_thread_priority = 0; + // s32 m_nLockCount = 0; + // bool locked = false; + // + s32 disk_type; + u8 tray_flag2; + u8 trayflag3; + u8 tray_flag; + s32 m_nDvdThreadAccessSemaCount = 0; + + private: + struct FileCacheEntry { + const ISOFileDef* def = nullptr; + FILE* fp = nullptr; + size_t size = 0; + u32 last_use_count = 0; + u64 offset_in_file = 0; + }; + u32 m_file_cache_counter = 0; + static constexpr int kNumFileCacheEntries = 6; + FileCacheEntry m_file_cache[kNumFileCacheEntries]; +}; + +// replacement for g_DvdDriver +CDvdDriver* get_driver(); + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/init.cpp b/game/overlord/jakx/init.cpp new file mode 100644 index 0000000000..bec6f9b526 --- /dev/null +++ b/game/overlord/jakx/init.cpp @@ -0,0 +1,50 @@ + +#include "game/overlord/jakx/basefile.h" +#include "game/overlord/jakx/basefilesystem.h" +#include "game/overlord/jakx/dma.h" +#include "game/overlord/jakx/dvd_driver.h" +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/iso_api.h" +#include "game/overlord/jakx/iso_cd.h" +#include "game/overlord/jakx/iso_queue.h" +#include "game/overlord/jakx/isocommon.h" +#include "game/overlord/jakx/list.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/pagemanager.h" +#include "game/overlord/jakx/ramdisk.h" +#include "game/overlord/jakx/sbank.h" +#include "game/overlord/jakx/soundcommon.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/overlord/jakx/srpc.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/stream.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/overlord/jakx/vag.h" +#include "game/overlord/jakx/vblank_handler.h" + +namespace jakx { +void jakx_overlord_init_globals_all() { + jakx_overlord_init_globals_overlord(); + jakx_overlord_init_globals_pagemanager(); + jakx_overlord_init_globals_iso_cd(); + jakx_overlord_init_globals_dma(); + jakx_overlord_init_globals_iso(); + jakx_overlord_init_globals_iso_queue(); + jakx_overlord_init_globals_srpc(); + jakx_overlord_init_globals_vag(); + jakx_overlord_init_globals_ssound(); + jakx_overlord_init_globals_iso_api(); + jakx_overlord_init_globals_spustreams(); + jakx_overlord_init_globals_list(); + jakx_overlord_init_globals_vblank_handler(); + jakx_overlord_init_globals_dvd_driver(); + jakx_overlord_init_globals_basefile(); + jakx_overlord_init_globals_basefilesystem(); + jakx_overlord_init_globals_ramdisk(); + jakx_overlord_init_globals_isocommon(); + jakx_overlord_init_globals_stream(); + jakx_overlord_init_globals_sbank(); + jakx_overlord_init_globals_soundcommon(); + jakx_overlord_init_globals_streamlist(); +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/init.h b/game/overlord/jakx/init.h new file mode 100644 index 0000000000..d6d927fa64 --- /dev/null +++ b/game/overlord/jakx/init.h @@ -0,0 +1,5 @@ +#pragma once + +namespace jakx { +void jakx_overlord_init_globals_all(); +} \ No newline at end of file diff --git a/game/overlord/jakx/iso.cpp b/game/overlord/jakx/iso.cpp new file mode 100644 index 0000000000..b11be05df5 --- /dev/null +++ b/game/overlord/jakx/iso.cpp @@ -0,0 +1,1787 @@ +#include "iso.h" + +#include + +#include "common/util/Assert.h" + +#include "game/overlord/jakx/dma.h" +#include "game/overlord/jakx/iso_api.h" +#include "game/overlord/jakx/iso_cd.h" +#include "game/overlord/jakx/iso_queue.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/rpc_interface.h" +#include "game/overlord/jakx/sbank.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/overlord/jakx/srpc.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/stream.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" +#include "game/sound/sndshim.h" + +using namespace iop; + +namespace jakx { +int g_nISOInitFlag = 0; +u32 s_MsgPacket_NotOnStackSync = 0; +int g_nSyncMbx = -1; +int g_nISOMbx = -1; +int g_nDGOMbx = -1; +int g_nDGOThread = -1; +int g_nSTRThreadID = -1; +int g_nISOThreadID = -1; +int g_nPlayThreadID = -1; +int g_nMusicFadeDir = 0; +int g_nMusicFade = 0; +int g_nMusicTweak = 0; +int g_nMusicSemaphore = 0; +bool g_bMusicIsPaused = false; +bool g_bMusicPause = false; +bool g_bAnotherMusicPauseFlag = false; +char g_szCurrentMusicName[0x30]; +char g_szTargetMusicName[0x30]; +int g_nActiveMusicStreams = 0; +bool g_bVagCmdsInitialized = false; +u32 time_of_last_unknown_rate_drive_op = 0; +ISO_DGOCommand sLoadDGO; +RPC_Dgo_Cmd sRPCBuff[1]; +constexpr int kRpcBuffSize = sizeof(RPC_Dgo_Cmd); + +void jakx_overlord_init_globals_iso() { + g_nISOInitFlag = 0; + s_MsgPacket_NotOnStackSync = 0; + g_nSyncMbx = -1; + g_nISOMbx = -1; + g_nDGOMbx = -1; + g_nDGOThread = -1; + g_nSTRThreadID = -1; + g_nISOThreadID = -1; + g_nPlayThreadID = -1; + g_nMusicFadeDir = 0; + g_nMusicFade = 0; + g_nMusicTweak = 0; + g_nMusicSemaphore = 0; + g_bMusicIsPaused = false; + g_bMusicPause = false; + g_szCurrentMusicName[0] = 0; + g_szTargetMusicName[0] = 0; + sLoadDGO = {}; + g_nActiveMusicStreams = 0; + g_bVagCmdsInitialized = false; + time_of_last_unknown_rate_drive_op = 0; + sRPCBuff[0] = {}; +} + +/*! + * Initialize the filesystem driver, then send a message to the sync messagebox + */ +void InitDriver() { + // init the filesystem + if (get_file_system()->Init() == 0) { + g_nISOInitFlag = 0; + } + lg::info("sending mbox for init driver"); + SendMbx(g_nSyncMbx, &s_MsgPacket_NotOnStackSync); +} + +/*! + * Check if there is anything in the sync mbox of the iso thread. + */ +u32 LookSyncMbx() { + MsgPacket* msg_packet; + auto poll_result = PollMbx(&msg_packet, g_nSyncMbx); + if (poll_result != KE_MBOX_NOMSG) { + sLoadDGO.sync_mbox_wait_count++; + } + return poll_result != KE_MBOX_NOMSG; +} + +/*! + * Wait on the message box to have a message. Unlike older versions, they finally figured out + * how to call ReceiveMbx instead of polling in a loop! + */ +u32 WaitMbx(s32 box) { + MsgPacket* msg_packet; + return ReceiveMbx(&msg_packet, box); +} + +u32 ISOThread(); +u32 DGOThread(); + +/*! + * Initialize the Filesystem and ISO Thread. + */ +void InitISOFS() { + // memset(&sLoadDGO,0,0x110); + sLoadDGO = {}; + sLoadDGO.last_id = -1; + g_nISOInitFlag = 1; + sLoadDGO.acked_cancel_id = -1; + sLoadDGO.selected_id = -1; + sLoadDGO.nosync_cancel_pending_flag = 0; + // g_pFileSystem = &g_ISOCDFileSystem; + sLoadDGO.request_cancel_id = -1; + sLoadDGO.nosync_cancel_ack = 0; + sLoadDGO.sync_sent_count = 0; + sLoadDGO.sync_mbox_wait_count = 0; + sLoadDGO.sync_ret_count = 0; + + MbxParam mbx_param; + mbx_param.option = 0; + mbx_param.attr = 0; + + g_nISOMbx = CreateMbx(&mbx_param); + ASSERT(g_nISOMbx >= 0); + g_nDGOMbx = CreateMbx(&mbx_param); + ASSERT(g_nDGOMbx >= 0); + g_nSyncMbx = CreateMbx(&mbx_param); + ASSERT(g_nSyncMbx >= 0); + + ThreadParam thread_param; + + thread_param.stackSize = 0x1100; + thread_param.entry = ISOThread; + thread_param.initPriority = 0x80; // changed to be lower priority + thread_param.attr = TH_C; + thread_param.option = 0; + strcpy(thread_param.name, "ISO"); + g_nISOThreadID = CreateThread(&thread_param); + ASSERT(g_nISOThreadID >= 0); + + thread_param.entry = DGOThread; + thread_param.initPriority = 0x38; + thread_param.attr = TH_C; + thread_param.stackSize = 0x900; + thread_param.option = 0; + strcpy(thread_param.name, "DGO"); + g_nDGOThread = CreateThread(&thread_param); + ASSERT(g_nDGOThread >= 0); + + thread_param.entry = STRThread; + thread_param.initPriority = 0x39; + thread_param.attr = TH_C; + thread_param.stackSize = 0x900; + thread_param.option = 0; + strcpy(thread_param.name, "STR"); + g_nSTRThreadID = CreateThread(&thread_param); + ASSERT(g_nSTRThreadID >= 0); + + thread_param.attr = TH_C; + thread_param.entry = PLAYThread; + thread_param.initPriority = 0x35; + thread_param.stackSize = 0x900; + thread_param.option = 0; + strcpy(thread_param.name, "Play"); + g_nPlayThreadID = CreateThread(&thread_param); + ASSERT(g_nPlayThreadID >= 0); + + StartThread(g_nISOThreadID, 0); + StartThread(g_nDGOThread, 0); + StartThread(g_nSTRThreadID, 0); + StartThread(g_nPlayThreadID, 0); + WaitMbx(g_nSyncMbx); + + const ISOFileDef* vagdir_file = FindISOFile("VAGDIR.AYB"); + if (vagdir_file) { + int load_status = LoadISOFileToIOP(vagdir_file, &g_VagDir, sizeof(g_VagDir)); + if (load_status) { + ASSERT(g_VagDir.vag_magic_1 == 0x41574756); + ASSERT(g_VagDir.vag_magic_2 == 0x52494444); + } else { + lg::warn("Failed to load vagdir file"); + g_VagDir.num_entries = 0; + } + } else { + lg::warn("Failed to find vagdir file"); + g_VagDir.num_entries = 0; + } + + // splash screen load was here... + ASSERT(g_nISOInitFlag == 0); +} + +const ISOFileDef* FindISOFile(const char* name) { + return get_file_system()->Find(name); +} + +s32 GetISOFileLength(const ISOFileDef* def) { + return get_file_system()->GetLength(def); +} + +void SetVagClock(ISO_VAGCommand* cmd) { + cmd->clockc = 0; + cmd->clocka = 0; + cmd->clockb = 0; + cmd->clockd = 0; + if (!cmd->m_pBaseFile) { + cmd->flags.file_disappeared = 1; + } else { + cmd->flags.clocks_set = 1; + if (cmd->stereo_sibling) { + cmd->stereo_sibling->flags.clocks_set = 1; + } + } +} + +/*! + * Start playing music, from an "external" command (from the ISO system). + */ +void IsoPlayMusicStream(ISO_VAGCommand* user_cmd) { + // must be flagged as music in the request. + ASSERT(user_cmd->music_flag); + + const char* name = user_cmd->name; + + // first, let's try to find an existing internal command that's streaming this music + ISO_VAGCommand* internal_cmd = FindMusicStreamName(name); + ISO_VAGCommand* stereo_internal_cmd = nullptr; + + if (!internal_cmd) { + // no existing command, so allocate one. + internal_cmd = SmartAllocMusicVagCommand(user_cmd, 0); + + if (!internal_cmd) { + ASSERT_NOT_REACHED(); // was only a warning + return; + } + + // set the active flags to false: + set_active_a(internal_cmd, 0); + set_active_b(internal_cmd, 0); + set_active_c(internal_cmd, 0); + set_active_a(user_cmd, 0); + set_active_b(user_cmd, 0); + set_active_c(user_cmd, 0); + + // clear flags related to actual streaming, since we're starting (or restarting) the stream + // from nothing. + user_cmd->flags.saw_chunks1 = 0; + user_cmd->flags.running = 0; + + // if we're reusing an already started stream, need to stop that one first. + // if ((*(uint*)&internal_cmd->bit_running & 0xffff00) != 0) { + if (internal_cmd->flags.clocks_set || internal_cmd->flags.file_disappeared) { + IsoStopVagStream(internal_cmd); + } + + // copy entire header + internal_cmd->unka = user_cmd->unka; + internal_cmd->unkb = user_cmd->unkb; + internal_cmd->status = user_cmd->status; + internal_cmd->active_a = user_cmd->active_a; + internal_cmd->active_b = user_cmd->active_b; + internal_cmd->active_c = user_cmd->active_c; + internal_cmd->pad = user_cmd->pad; + + internal_cmd->msg_type = user_cmd->msg_type; + internal_cmd->mbox_reply = user_cmd->mbox_reply; + internal_cmd->thread_to_wake = user_cmd->thread_to_wake; + internal_cmd->callback = user_cmd->callback; + + internal_cmd->m_pBaseFile = user_cmd->m_pBaseFile; + internal_cmd->priority = user_cmd->priority; + internal_cmd->file_def = user_cmd->file_def; + + // copy part of the command set by the user + internal_cmd->vag_file_def = user_cmd->vag_file_def; + internal_cmd->vag_dir_entry = user_cmd->vag_dir_entry; + ASSERT(strlen(name) < 0x30); + strncpy(internal_cmd->name, name, 0x30); + internal_cmd->play_volume = user_cmd->play_volume; + internal_cmd->id = user_cmd->id; + internal_cmd->plugin_id = user_cmd->plugin_id; + internal_cmd->maybe_sound_handler = user_cmd->maybe_sound_handler; + internal_cmd->oog = user_cmd->oog; + internal_cmd->dolby_pan_angle = user_cmd->dolby_pan_angle; + internal_cmd->art_flag = user_cmd->art_flag; + internal_cmd->movie_flag = user_cmd->movie_flag; + + // + InitVAGCmd(internal_cmd, 1); + + // check for stereo bit: + if ((internal_cmd->vag_dir_entry->words[1] & 0x400U) != 0) { + // allocate stereo command + stereo_internal_cmd = SmartAllocMusicVagCommand(user_cmd, 1); + if (!stereo_internal_cmd) { + // it failed - give up on this message! + ReleaseMessage(internal_cmd); + FreeVagCmd(internal_cmd); + internal_cmd = nullptr; + ASSERT_NOT_REACHED(); + } else { + // stop existing stereo command + // if ((*(uint*)&stereo_internal_cmd->bit_running & 0xffff00) != 0) { + if (stereo_internal_cmd->flags.clocks_set || stereo_internal_cmd->flags.file_disappeared) { + IsoStopVagStream(stereo_internal_cmd); + } + + // set up as a stereo secondary + stereo_internal_cmd->flags.stereo_secondary = 1; + internal_cmd->stereo_sibling = stereo_internal_cmd; + stereo_internal_cmd->stereo_sibling = internal_cmd; + + auto name_len = strlen(internal_cmd->name); + strncpyz(stereo_internal_cmd->name, internal_cmd->name, 0x31); + if (name_len < 0x30) { + strncpyz(stereo_internal_cmd->name + name_len, " (stereo)", 0x31 - name_len); + } + stereo_internal_cmd->id = ~internal_cmd->id; + stereo_internal_cmd->vag_dir_entry = internal_cmd->vag_dir_entry; + } + } + + // abort if no command + if (!internal_cmd) { + return; + } + + // start us out as paused + internal_cmd->flags.paused = 1; + if (stereo_internal_cmd) { + stereo_internal_cmd->flags.paused = 1; + } + + if (QueueMessage(internal_cmd, 5) == 0) { + // failed to queue, clear our commands and release the message. + FreeVagCmd(internal_cmd); + if ((internal_cmd->vag_dir_entry->words[1] & 0x400U) != 0) { + FreeVagCmd(stereo_internal_cmd); + } + ReleaseMessage(internal_cmd); + } else { + auto* vag_dir_entry = internal_cmd->vag_dir_entry; + if (!vag_dir_entry) { + // not really sure how this can happen... + internal_cmd->m_pBaseFile = nullptr; + ASSERT_NOT_REACHED(); // just so I can learn when this happens. + } else { + // need to understand this better, but it seems like we can pick between two different files + // to actually load from... + const ISOFileDef* filedef = nullptr; + if (((u32)vag_dir_entry->words[1] >> 0xb & 1) == 0) { + filedef = internal_cmd->file_def; + } else { + filedef = internal_cmd->vag_file_def; + } + + // open the file!! + auto* base_file = get_file_system()->OpenWAD(filedef, vag_dir_entry->words[1] >> 16); + internal_cmd->m_pBaseFile = base_file; + + // determine the reading rate of the music + if (base_file) { + u32 rate_idx = 0x3c & (internal_cmd->vag_dir_entry->words[1] >> 10); + ASSERT((rate_idx % 4) == 0); + constexpr int rates[16] = {0xFA00, 0x1F40, 0x3E80, 0x5DC0, 0x7D00, 0x9C40, + 0xBB80, 0xDAC0, 0xAC44, 0x1589, 0x2B11, 0x409A, + 0x5622, 0x6BAB, 0x8133, 0x96BC}; + + int rate = rates[rate_idx]; + if (((internal_cmd->vag_dir_entry->words[1] >> 10) & 1) == 0) { + rate = rate << 2; + } else { + rate = rate << 3; + } + base_file->m_ReadRate = rate / 7; + } + } + + SetVagStreamName(internal_cmd, 0x30); + if (stereo_internal_cmd) { + SetVagStreamName(stereo_internal_cmd, 0x30); + } + + internal_cmd->callback = ProcessVAGData; + internal_cmd->status = EIsoStatus::OK_2; + internal_cmd->flags.paused = 0; + + if (stereo_internal_cmd) { + stereo_internal_cmd->flags.paused = 0; + } + internal_cmd->flags.running = 1; + if (stereo_internal_cmd) { + stereo_internal_cmd->flags.running = 1; + } + internal_cmd->status = EIsoStatus::OK_2; + set_active_a(internal_cmd, 1); + set_active_b(internal_cmd, 1); + + // load tweak value + g_nMusicFadeDir = 0; + g_nMusicFade = 0x10000; + g_nMusicTweak = 0x80; + for (u32 i = 0; i < gMusicTweakInfo.TweakCount; i++) { + if (strcmp(gMusicTweakInfo.MusicTweak[i].MusicName, name) == 0) { + g_nMusicTweak = gMusicTweakInfo.MusicTweak[i].VolumeAdjust; + } + } + } + + if (!internal_cmd) { + return; + } + } + SetVagClock(internal_cmd); +} + +/*! + * Get a VAG command ready for playback, but don't actually start the audio yet. + */ +void IsoQueueVagStream(ISO_VAGCommand* user_cmd) { + ASSERT(user_cmd); + ASSERT(!user_cmd->music_flag); // can't use music commands with this function + ASSERT(user_cmd->id); + ISO_VAGCommand* internal_stereo_cmd = nullptr; + + // mysterious case to reject a command + if (user_cmd->vag_dir_entry && (user_cmd->vag_dir_entry->words[1] & 0x400U) != 0 && + HowManyBelowThisPriority(user_cmd->priority_pq) < 2) { + ovrld_log(LogCategory::WARN, "mysterious rejection of a queued vag stream: {}", user_cmd->name); + return; + } + + // see if we already have a command for this + ISO_VAGCommand* internal_cmd = FindThisVagStream(user_cmd->name, user_cmd->id); + if (!internal_cmd) { + // try allocating one + internal_cmd = SmartAllocVagCmd(user_cmd); + if (!internal_cmd) { + // no more commands! + return; + } + + ovrld_log(LogCategory::VAG_SETUP, "IsoQueueVagStream allocating for {} {}", user_cmd->name, + user_cmd->id); + // clear active flags + set_active_a(internal_cmd, 0); + set_active_b(internal_cmd, 0); + set_active_c(internal_cmd, 0); + set_active_a(user_cmd, 0); + set_active_b(user_cmd, 0); + set_active_c(user_cmd, 0); + user_cmd->flags.saw_chunks1 = 0; + user_cmd->flags.running = 0; + // if ((*(uint*)&internal_cmd->bit_running & 0xffff00) != 0) { + // if we're playing it, stop it. + if (internal_cmd->flags.clocks_set || internal_cmd->flags.file_disappeared) { + IsoStopVagStream(internal_cmd); + } + + // copy entire header + internal_cmd->unka = user_cmd->unka; + internal_cmd->unkb = user_cmd->unkb; + internal_cmd->status = user_cmd->status; + internal_cmd->active_a = user_cmd->active_a; + internal_cmd->active_b = user_cmd->active_b; + internal_cmd->active_c = user_cmd->active_c; + internal_cmd->pad = user_cmd->pad; + + internal_cmd->msg_type = user_cmd->msg_type; + internal_cmd->mbox_reply = user_cmd->mbox_reply; + internal_cmd->thread_to_wake = user_cmd->thread_to_wake; + internal_cmd->callback = user_cmd->callback; + + internal_cmd->m_pBaseFile = user_cmd->m_pBaseFile; + internal_cmd->priority = user_cmd->priority; + internal_cmd->file_def = user_cmd->file_def; + + internal_cmd->vag_file_def = user_cmd->vag_file_def; + internal_cmd->vag_dir_entry = user_cmd->vag_dir_entry; + strncpy(internal_cmd->name, user_cmd->name, 0x30); + internal_cmd->id = user_cmd->id; + internal_cmd->play_volume = user_cmd->play_volume; + internal_cmd->plugin_id = user_cmd->plugin_id; + internal_cmd->maybe_sound_handler = user_cmd->maybe_sound_handler; + internal_cmd->oog = user_cmd->oog; + internal_cmd->dolby_pan_angle = user_cmd->dolby_pan_angle; + internal_cmd->art_flag = user_cmd->art_flag; + internal_cmd->movie_flag = user_cmd->movie_flag; + + InitVAGCmd(internal_cmd, 1); + + internal_cmd->flags.scanned = 1; + + // check if we're a stereo command + if ((internal_cmd->vag_dir_entry) && ((internal_cmd->vag_dir_entry->words[1] & 0x400U) != 0)) { + internal_stereo_cmd = SmartAllocVagCmd(user_cmd); + if (!internal_stereo_cmd) { + // allocating stereo failed, give up. + internal_cmd->flags.scanned = 0; + // ASSERT_NOT_REACHED(); + ReleaseMessage(internal_cmd); + RemoveVagCmd(internal_cmd); + FreeVagCmd(internal_cmd); + internal_cmd = nullptr; + } else { + // if ((*(uint*)&internal_stereo_cmd->bit_running & 0xffff00) != 0) { + if (internal_stereo_cmd->flags.clocks_set || internal_stereo_cmd->flags.file_disappeared) { + IsoStopVagStream(internal_stereo_cmd); + } + internal_cmd->stereo_sibling = internal_stereo_cmd; + internal_stereo_cmd->flags.stereo_secondary = 1; + internal_stereo_cmd->stereo_sibling = internal_cmd; + auto name_len = strlen(internal_cmd->name); + strncpyz(internal_stereo_cmd->name, internal_cmd->name, 0x31); + if (name_len < 0x30) { + strncpyz(internal_stereo_cmd->name + name_len, " (stereo)", 0x31 - name_len); + } + internal_stereo_cmd->id = ~internal_cmd->id; + internal_stereo_cmd->vag_dir_entry = internal_cmd->vag_dir_entry; + internal_stereo_cmd->flags.scanned = 1; + } + } + + // return if alloc failed + if (!internal_cmd) { + return; + } + + if (QueueMessage(internal_cmd, 5) == 0) { + // queueing failed. + internal_cmd->flags.scanned = 0; + ASSERT_NOT_REACHED(); + RemoveVagCmd(internal_cmd); + FreeVagCmd(internal_cmd); + if ((internal_cmd->vag_dir_entry->words[1] & 0x400U) != 0) { + internal_stereo_cmd->flags.scanned = 0; + RemoveVagCmd(internal_stereo_cmd); + FreeVagCmd(internal_stereo_cmd); + } + ReleaseMessage(internal_cmd); + } else { + auto* vag_dir_entry = internal_cmd->vag_dir_entry; + if (!vag_dir_entry) { + // not really sure how this can happen... + internal_cmd->m_pBaseFile = nullptr; + // ASSERT_NOT_REACHED(); // just so I can learn when this happens. + } else { + // need to understand this better, but it seems like we can pick between two different files + // to actually load from... + const ISOFileDef* filedef = nullptr; + if (((u32)vag_dir_entry->words[1] >> 0xb & 1) == 0) { + filedef = internal_cmd->file_def; + } else { + filedef = internal_cmd->vag_file_def; + } + auto* base_file = get_file_system()->OpenWAD(filedef, vag_dir_entry->words[1] >> 16); + internal_cmd->m_pBaseFile = base_file; + if (!base_file) { + u32 rate_idx = 0x3c & (internal_cmd->vag_dir_entry->words[1] >> 10); + ASSERT((rate_idx % 4) == 0); + constexpr int rates[16] = {0xFA00, 0x1F40, 0x3E80, 0x5DC0, 0x7D00, 0x9C40, + 0xBB80, 0xDAC0, 0xAC44, 0x1589, 0x2B11, 0x409A, + 0x5622, 0x6BAB, 0x8133, 0x96BC}; + + int rate = rates[rate_idx]; + if (((internal_cmd->vag_dir_entry->words[1] >> 10) & 1) == 0) { + rate = rate << 2; + } else { + rate = rate << 3; + } + base_file->m_ReadRate = rate / 7; + } + } + if (user_cmd->art_flag != 0) { + internal_cmd->flags.art = 1; + } + if (user_cmd->movie_flag != 0) { + internal_cmd->flags.movie = 1; + } + + internal_cmd->flags.paused = 1; + SetNewVagCmdPri(internal_cmd, user_cmd->priority_pq); + if (internal_stereo_cmd) { + internal_stereo_cmd->flags.paused = 1; + internal_stereo_cmd->flags.scanned = 1; + SetNewVagCmdPri(internal_stereo_cmd, 10); + } + SetVagStreamName(internal_cmd, 0x30); + if (internal_stereo_cmd) { + SetVagStreamName(internal_stereo_cmd, 0x30); + } + internal_cmd->status = EIsoStatus::OK_2; + internal_cmd->callback = ProcessVAGData; + } + if (!internal_cmd) { + return; + } + } + SetVagClock(internal_cmd); +} + +/*! + * Actually start playback of audio, requested from ISO thread functions. + */ +void IsoPlayVagStream(ISO_VAGCommand* user_cmd) { + ASSERT(user_cmd); + ASSERT(!user_cmd->music_flag); + ISO_VAGCommand* stereo_cmd = user_cmd->stereo_sibling; + ISO_VAGCommand* internal_cmd = FindThisVagStream(user_cmd->name, user_cmd->id); + + // update to running only if we aren't already. + if (internal_cmd && (internal_cmd->flags.running == 0)) { + internal_cmd->play_volume = user_cmd->play_volume; + if (internal_cmd->flags.paused != 0) { + if (g_bExtPause) { + g_bExtResume = true; + } + if (internal_cmd->flags.saw_chunks1 == 0) { + internal_cmd->flags.paused = 0; + if (stereo_cmd) { + stereo_cmd->flags.paused = 0; + } + } else { + ovrld_log(LogCategory::VAG_SETUP, "IsoPlayVagStream is unpausing {}", internal_cmd->name); + UnPauseVAG(internal_cmd); + } + if (user_cmd->priority_pq < 3) { + // this printed a "ruins fix" message, seems like this is a total hack!! + SetNewVagCmdPri(user_cmd, 7); + } + } + internal_cmd->flags.running = 1; + if (stereo_cmd) { + stereo_cmd->flags.running = 1; + } + if (internal_cmd) { + SetVagClock(internal_cmd); + } + } +} + +void IsoStopVagStream(ISO_VAGCommand* cmd) { + auto id = cmd->id; + ISO_VAGCommand* internal_cmd; + + // handle music/audio separately here + if (cmd->music_flag != 0) { + if (id == 0) { // no id, must use name + if (cmd->name[0] == 0) { + ASSERT_NOT_REACHED(); // shouldn't happen + return; + } + + // terminate all with this name. + while (internal_cmd = FindMusicStreamName(cmd->name), internal_cmd) { + ovrld_log(LogCategory::VAG_SETUP, "IsoStopVagStream is terminating {} (1)", + internal_cmd->name); + TerminateVAG(internal_cmd); + } + return; + } + + // we have an id, just terminate that. + internal_cmd = FindThisMusicStream(cmd->name, id); + if (!internal_cmd) { + return; + } + ovrld_log(LogCategory::VAG_SETUP, "IsoStopVagStream is terminating {} (2)", internal_cmd->name); + TerminateVAG(internal_cmd); + return; + } + + // flag - this controls if we do the AnyVagRunning check or not. + // not really sure why... + bool flag = false; + + if (id == 0) { + if (cmd->name[0] == 0) { + return; + } + while (internal_cmd = FindVagStreamName(cmd->name), internal_cmd) { + flag = true; + ovrld_log(LogCategory::VAG_SETUP, "IsoStopVagStream is terminating {} (3)", + internal_cmd->name); + TerminateVAG(internal_cmd); + } + + if (!flag) { + return; + } + } else { + internal_cmd = FindThisVagStream(cmd->name, id); + if (!internal_cmd) { + return; + } + ovrld_log(LogCategory::VAG_SETUP, "IsoStopVagStream is terminating {} (4)", internal_cmd->name); + TerminateVAG(internal_cmd); + } + + if (AnyVagRunning() == 0) { + g_bExtPause = false; + g_bExtResume = false; + } +} + +void ProcessMusic() { + ISO_VAGCommand* cmd = nullptr; + WaitSema(g_nMusicSemaphore); + + // handle unpausing request + if (g_bMusicIsPaused && !g_bMusicPause && !g_bAnotherMusicPauseFlag) { + cmd = FindMusicStreamName(g_szCurrentMusicName); + if (cmd && cmd->id && !cmd->flags.stop) { // can't unpause if stopped. + UnPauseVAG(cmd); + } + g_bMusicIsPaused = false; + } + + // handle pausing request. + if (!g_bMusicIsPaused && g_bMusicPause) { + cmd = FindMusicStreamName(g_szCurrentMusicName); + if (cmd && cmd->id && !cmd->flags.stop) { + PauseVAG(cmd); + } + g_bMusicIsPaused = true; + } + + // handle playing music updates. + if (g_bMusicIsPaused == 0) { + // first, see if we're even playing the right music: + if (strncmp(g_szCurrentMusicName, g_szTargetMusicName, 0xf) == 0) { + // we are! fade in the music, if it's active: + if (0 < g_nActiveMusicStreams && g_nMusicFadeDir < 0) { + g_nMusicFadeDir = 1; + } + + if ((g_szCurrentMusicName[0] == 0) || (g_nActiveMusicStreams != 0)) { + SignalSema(g_nMusicSemaphore); + return; + } + + } else { + // we aren't. fade out music if the target is null, or we're currently playing music. + if ((g_szTargetMusicName[0] == 0) || (g_szCurrentMusicName[0] != 0)) { + if (g_nMusicFade < 1) { + cmd = g_aVagCmds + 4; + int i = 1; + do { + i--; + // stop any non-stereo, but real music. + if (cmd->music_flag && !cmd->flags.stereo_secondary && cmd->id) { + IsoStopVagStream(cmd); + } + cmd = cmd + 1; + } while (-1 < i); + } else { + g_nMusicFadeDir = -1; + } + } + if (g_nMusicFade != 0) { + SignalSema(g_nMusicSemaphore); + return; + } + + // if we made it through that, we're done playing old stuff. + strncpyz(g_szCurrentMusicName, g_szTargetMusicName, 0x10); + } + + if (g_szCurrentMusicName[0] != 0) { + VagStreamData vsd; + strncpy(vsd.name, g_szCurrentMusicName, 0x30); + vsd.id = 0x29a; + vsd.priority = 9; + vsd.art_load = 0; + vsd.movie_art_load = 0; + vsd.sound_handler = 0; + ovrld_log(LogCategory::VAG_SETUP, "ProcessMusic is changing the music to {}", vsd.name); + PlayMusicStream(&vsd); + } + } + + SignalSema(g_nMusicSemaphore); +} + +u32 ISOThread() { + int priority = -1; + g_szCurrentMusicName[0] = 0; + g_szTargetMusicName[0] = 0; + g_bMusicIsPaused = false; + + lg::info("top of ISO Thread"); + + // file = (CISOCDFile*)0x0; + InitBuffers(); + // bVar1 = false; + InitVagCmds(); + g_bVagCmdsInitialized = true; + InitDriver(); + + ISO_Hdr* mbx_cmd = nullptr; + ISO_LoadSoundbank* load_sbk_cmd = nullptr; + ISO_LoadCommon* load_cmd = nullptr; + char local_name[32]; + ISO_VAGCommand* vag_cmd = nullptr; + ISO_VAGCommand* internal_vag_cmd = nullptr; + + // ISOFileDef* file_def = nullptr; + + while (true) { + // dma_intr_hack(); + // Part 1: Handle incoming messages from the user: + + int poll_result = PollMbx((MsgPacket**)&mbx_cmd, g_nISOMbx); + if (poll_result == KE_OK) { + if (mbx_cmd->msg_type == ISO_Hdr::MsgType::ABADBABE) { + // what is this garbage + ASSERT_NOT_REACHED(); + ReleaseMessage(mbx_cmd); + } else { + set_active_a(mbx_cmd, 0); + set_active_b(mbx_cmd, 0); + set_active_c(mbx_cmd, 0); + + // iVar3 = (cmd->header).kind; + mbx_cmd->callback = NullCallback; + mbx_cmd->m_pBaseFile = nullptr; + auto msg_kind = mbx_cmd->msg_type; + + // ovrld_log(LogCategory::ISO_QUEUE, "Incoming message to the ISO Queue with type 0x{:x}", + // (int)msg_kind); + + // if we're a simple file loading command: + if (msg_kind == ISO_Hdr::MsgType::LOAD_EE || msg_kind == ISO_Hdr::MsgType::LOAD_EE_CHUNK || + msg_kind == ISO_Hdr::MsgType::LOAD_IOP || + msg_kind == ISO_Hdr::MsgType::LOAD_SOUNDBANK) { + priority = 3; // default priority for file loads is 3... unless we're loading a soundbank + // in which case there's a bizarre special case here: + load_cmd = (ISO_LoadCommon*)mbx_cmd; + + if (msg_kind == ISO_Hdr::MsgType::LOAD_SOUNDBANK) { + load_sbk_cmd = (ISO_LoadSoundbank*)mbx_cmd; + priority = 0; + if (load_sbk_cmd->priority == 2) { + priority = 2; + } else { + if (load_sbk_cmd->priority == 10) { + priority = 4; + } + } + } + + if (QueueMessage(mbx_cmd, priority) == 0) { + ovrld_log(LogCategory::WARN, "Failed to queue incoming iso message"); + goto LAB_00006b18; + } + + // iVar3 = (cmd->header).kind; + // handle opening the file: + switch (msg_kind) { + case ISO_Hdr::MsgType::LOAD_EE_CHUNK: { + // ovrld_log(LogCategory::ISO_QUEUE, "Opening File {} for EE Chunk Load offset {}", + // mbx_cmd->file_def->name.data, ((ISO_LoadSingle*)mbx_cmd)->sector_offset); + mbx_cmd->m_pBaseFile = get_file_system()->Open( + mbx_cmd->file_def, ((ISO_LoadSingle*)mbx_cmd)->sector_offset, 1); + } break; + case ISO_Hdr::MsgType::LOAD_IOP: + case ISO_Hdr::MsgType::LOAD_EE: + // ovrld_log(LogCategory::ISO_QUEUE, "Opening File {} for Load {}", + // msg_kind == ISO_Hdr::MsgType::LOAD_EE ? "EE" : "IOP", + // mbx_cmd->file_def->name.data); + mbx_cmd->m_pBaseFile = get_file_system()->Open(mbx_cmd->file_def, -1, 1); + break; + case ISO_Hdr::MsgType::LOAD_SOUNDBANK: { + // ovrld_log(LogCategory::ISO_QUEUE, "Opening for LOAD_SOUNDBANK {} ", + // load_sbk_cmd->name); + // build name + ASSERT(load_sbk_cmd->name); + strncpy(local_name, load_sbk_cmd->name, 0xc); + local_name[8] = 0; + strcat(local_name, ".sbk"); + mbx_cmd->file_def = get_file_system()->Find(local_name); + ASSERT(mbx_cmd->file_def); + mbx_cmd->m_pBaseFile = get_file_system()->Open(mbx_cmd->file_def, -1, 1); + ASSERT(mbx_cmd->m_pBaseFile); + } break; + default: + ASSERT_NOT_REACHED(); + } + + // if we failed to open, bail + if (!mbx_cmd->m_pBaseFile) { + ASSERT_NOT_REACHED(); + mbx_cmd->status = EIsoStatus::ERROR_OPENING_FILE_8; + UnqueueMessage(mbx_cmd); + ReturnMessage(mbx_cmd); + // this goes somewhere else... + } + + // set up lengths based on the actual file length on disc. + load_cmd->dest_ptr = load_cmd->addr; + load_cmd->progress_bytes = 0; + load_cmd->length_to_copy = get_file_system()->GetLength(mbx_cmd->file_def); + // pIVar5 = length + if (msg_kind == ISO_Hdr::MsgType::LOAD_SOUNDBANK) { + load_cmd->maxlen = load_cmd->length_to_copy; + } else { + ASSERT(load_cmd->length_to_copy); + // trim copy size to the max buffer length given. + if (load_cmd->length_to_copy > load_cmd->maxlen) { + load_cmd->length_to_copy = load_cmd->maxlen; + } + } + + // set up callback + switch (msg_kind) { + case ISO_Hdr::MsgType::LOAD_IOP: + mbx_cmd->callback = CopyDataToIOP; + break; + case ISO_Hdr::MsgType::LOAD_SOUNDBANK: + mbx_cmd->callback = CopyDataSbkLoad; + break; + case ISO_Hdr::MsgType::LOAD_EE: + case ISO_Hdr::MsgType::LOAD_EE_CHUNK: + mbx_cmd->callback = CopyDataToEE; + break; + default: + ASSERT_NOT_REACHED(); + } + + mbx_cmd->status = EIsoStatus::OK_2; + set_active_a(mbx_cmd, 1); + } else { + switch (msg_kind) { + case ISO_Hdr::MsgType::DGO_LOAD: + if (QueueMessage(mbx_cmd, 1) != 0) { + // modified for non compressed dgos + ovrld_log(LogCategory::ISO_QUEUE, "Opening {} for DGO Load", + mbx_cmd->file_def->name.data); + mbx_cmd->m_pBaseFile = get_file_system()->Open(mbx_cmd->file_def, -1, 1); + if (mbx_cmd->m_pBaseFile) { + mbx_cmd->callback = RunDGOStateMachine; + mbx_cmd->status = EIsoStatus::OK_2; + ((ISO_DGOCommand*)mbx_cmd)->state = ISO_DGOCommand::State::INIT; + set_active_a(mbx_cmd, 1); + } else { + ASSERT_NOT_REACHED(); + UnqueueMessage(mbx_cmd); + ASSERT(sLoadDGO.msg_type != ISO_Hdr::MsgType::MSG_0); + SendMbx(g_nISOMbx, &sLoadDGO); + } + } + break; + case ISO_Hdr::MsgType::VAG_PAUSE: + ovrld_log(LogCategory::ISO_QUEUE, "VagPause (all of them)"); + if (g_bExtPause == 0) { + SetVagStreamsNoStart(1); + int iVar3 = AnyVagRunning(); + if (iVar3 != 0) { + PauseVagStreams(0); + } + g_bExtPause = true; + g_bExtResume = iVar3 != 0; + } + ReturnMessage(mbx_cmd); + break; + case ISO_Hdr::MsgType::VAG_UNPAUSE: + ovrld_log(LogCategory::ISO_QUEUE, "VagUnPause (all of them)"); + if (g_bExtPause != 0) { + if (g_bExtResume != false) { + UnPauseVagStreams(0); + } + g_bExtPause = false; + g_bExtResume = false; + } + SetVagStreamsNoStart(0); + ReturnMessage(mbx_cmd); + break; + case ISO_Hdr::MsgType::VAG_SET_PITCH_VOL: + vag_cmd = (ISO_VAGCommand*)mbx_cmd; + internal_vag_cmd = FindVagStreamId(vag_cmd->id); + if (internal_vag_cmd) { + internal_vag_cmd->pitch_cmd = vag_cmd->pitch_cmd; + SetVAGVol(internal_vag_cmd); + } + ReturnMessage(vag_cmd); + break; + case ISO_Hdr::MsgType::ADEADBEE: + ReturnMessage(vag_cmd); + ExitThread(); + goto LAB_00006b18; + break; + default: + ASSERT_NOT_REACHED(); + } + } + } + } else { + if (poll_result == -0x1a9) { + // messagebox was deleted - this means we're shutting down + return 0; + } + if (poll_result != -0x1a8) { + // unknown messagebox error + ASSERT_NOT_REACHED(); + } + } + LAB_00006b18: + // Part 2: music update + // Poll is called here... but we don't use it. + // (**(code**)(*g_pFileSystem + 4))(); + ProcessMusic(); + + // Part 3: service in-progress messages + // get the top priority message + bool buffer_ok = false; + auto* cmd = GetMessage(); + CBaseFile* file = nullptr; + bool known_read_rate = false; + + if (cmd) { + // handle the buffering + // ovrld_log(LogCategory::ISO_QUEUE, "Processing Command 0x{:x} - allocating buffer\n", + // (int)cmd->msg_type); + + // check if we need to initialize a buffer, or if we just need to realloc pages + file = cmd->m_pBaseFile; + bool needs_buffer_init = false; + if (!file) { + needs_buffer_init = true; + // we'd need to set buffer_ok = false later on if this is the case, + // but I dont think this can happen. + ASSERT_NOT_REACHED(); + } else { + if (file->m_Buffer.m_eBufferType == CBuffer::BufferType::EBT_FREE) { + needs_buffer_init = true; + } + } + + // set up buffer + if (needs_buffer_init) { + buffer_ok = + file->InitBuffer(cmd->callback == ProcessVAGData ? CBuffer::BufferType::REQUEST_VAG + : CBuffer::BufferType::REQUEST_NORMAL, + cmd); + } else { + file->AllocPages(); + buffer_ok = true; + } + + file = nullptr; + if (buffer_ok == 0) { + cmd = nullptr; + known_read_rate = false; + } else { + file = cmd->m_pBaseFile; + known_read_rate = false; + if (file && file->m_ReadRate) { + known_read_rate = true; + } + // iVar3 = (**(code**)(file->base).vtable)(file); + // ovrld_log(LogCategory::ISO_QUEUE, "Processing Command 0x{:x} - starting read!\n", + // (int)cmd->msg_type); + + // lg::info("ISO - BeginRead"); + cmd->status = file->BeginRead(); + if (cmd->status != EIsoStatus::OK_2) { + buffer_ok = false; + if (cmd->m_pBaseFile) { + cmd->m_pBaseFile->TerminateBuffer(); + } + cmd = nullptr; + file = nullptr; + } + if (!known_read_rate) { + time_of_last_unknown_rate_drive_op = GetSystemTimeLow(); + } + } + } + + // ovrld_log(LogCategory::ISO_QUEUE, "Processing Command 0x{:x} - handling message data\n", + // (int)cmd->msg_type); + + if (ProcessMessageData(cmd) == 0) { + cmd = nullptr; + } + + if (buffer_ok && cmd) { + EIsoStatus status = EIsoStatus::ERROR_b; + if (file) { + status = file->SyncRead(); + } + if (!known_read_rate) { + time_of_last_unknown_rate_drive_op = GetSystemTimeLow(); + } + if (status == EIsoStatus::ERROR_b) { + if (cmd->m_pBaseFile && cmd->m_pBaseFile->m_Status != EIsoStatus::NONE_0) { + cmd->status = EIsoStatus::OK_2; + } + } else { + cmd->status = status; + if (!cmd->active_c) { + set_active_c(cmd, 1); + } + } + } + + WaitSema(g_RequestedStreamsList.sema); + if (g_RequestedStreamsList.pending_data == 1) { + QueueNewStreamsFromList(&g_RequestedStreamsList); + auto* vag_info = g_NewStreamsList.next; + for (int i = 0; i < 4; i++) { + if (vag_info->id) { + ovrld_log(LogCategory::ISO_QUEUE, "ISO thread: queueing VAG {}", vag_info->name); + QueueVAGStream(vag_info); + } + vag_info = vag_info->next; + } + } + + for (int i = 0; i < 4; i++) { + ISO_VAGCommand* vc = &g_aVagCmds[i]; + if (!vc->music_flag && !vc->flags.stereo_secondary && !vc->flags.scanned && vc->id) { + ovrld_log(LogCategory::ISO_QUEUE, "ISO thread: stopping {} since it is no longer requested", + vc->name); + IsoStopVagStream(vc); + } + } + + SignalSema(g_RequestedStreamsList.sema); + g_RequestedStreamsList.pending_data = 0; + + for (int i = 4; i < 6; i++) { + ISO_VAGCommand* vc = &g_aVagCmds[i]; + if (vc->music_flag && !vc->flags.stereo_secondary && vc->flags.stop && vc->id) { + ovrld_log(LogCategory::ISO_QUEUE, "ISO thread: stopping music {}", vc->name); + IsoStopVagStream(vc); + } + } + + // this logic was changed so that the iso thread doesn't sleep when loading a DGO: otherwise + // we'd spent most of our time letting the thread sleep. + // instead, if there's an in progress DGO command, we yield. + // this yield allows DGO RPCs to run. Additionally, the priority of the ISO thread was lowered + // to allow the RPCs to run during this time. + bool sleep = !DgoCmdWaiting(); + if (sleep) { + if (buffer_ok) { + DelayThread(4000); + } else { + // DelayThread(200); + DelayThread(2000); + } + } else { + YieldThread(); + } + } +} + +/*! + * This function runs the state machine for the double-buffered DGO loading system. + * There are a few tricks here: + * - Each DGO file contains a number of objects. + * - The object loading is double buffered - this state machine toggles between loading to two + * different buffers. While one buffer is being written, the GOAL linker is processing the other. + * - The final object is not double buffered. Instead, it is loaded directly to the top of the heap. + * - New! for jak 2, there is an option to not use the double buffering. + * - New! for jak 3, there is a very complicated load cancel system + */ +EIsoStatus RunDGOStateMachine(ISO_Hdr* m) { + auto* cmd = (ISO_DGOCommand*)m; + // lg::info("ISO - DGO state machine"); + int send_count, receive_count; + + CBaseFile* file = cmd->m_pBaseFile; + EIsoStatus ret_status = EIsoStatus::OK_2; + if (!file) { + return EIsoStatus::OK_2; + } + ASSERT(file->m_Buffer.m_pPageList); + + // handle page boundary crossings - after this call, our CBuffer will be set up properly for + // processing. + file->CheckPageBoundary(); + CBuffer* buffer = &file->m_Buffer; + + int buffer_len = (file->m_Buffer).m_nDataLength; + ASSERT(buffer_len >= 0); + + if (cmd->state == ISO_DGOCommand::State::INIT) { + // these counters are used for debugging the DGO sync stuff. + cmd->sync_mbox_wait_count = 1; + cmd->sync_ret_count = 0; + } + // CpuSuspendIntr(local_30); + + // process this DGO as normal, unless we've been asked to cancel this. + if (cmd->nosync_cancel_pending_flag == 0 || cmd->selected_id != cmd->request_cancel_id) { + // CpuResumeIntr(); + if (buffer_len == 0) { + // nothing we can do with no data... + goto out_of_data; + } + do { + switch (cmd->state) { + case ISO_DGOCommand::State::INIT: + ovrld_log(LogCategory::DGO, "DGO: Starting state machine"); + cmd->state = ISO_DGOCommand::State::READ_DGO_HEADER; + cmd->bytes_processed = 0; + cmd->finished_first_object = 0; + cmd->want_abort = 0; + break; + case ISO_DGOCommand::State::READ_DGO_HEADER: { + // here, we work on reading the DGO file's header into our command. + // first, compute how many bytes we want to read right now, as the max of + // the remaining header size, and what's buffered + int bytes_needed = sizeof(DgoHeader) - cmd->bytes_processed; + if (buffer_len < bytes_needed) { + bytes_needed = buffer_len; + } + + // loop over pages - the header may span multiple pages that aren't adjacent in memory. + while (bytes_needed) { + // determine how many bytes to copy from this page + int bytes_from_this_page = buffer->m_pPageList->m_pCurrentActivePage->m_pPageMemEnd - + file->m_Buffer.m_pCurrentData + 1; + if (bytes_needed <= bytes_from_this_page) { + bytes_from_this_page = bytes_needed; + } + ovrld_log(LogCategory::DGO, "DGO: reading {} bytes of dgo header", + bytes_from_this_page); + // copy data from buffer into command + memcpy(((u8*)&cmd->dgo_header) + cmd->bytes_processed, file->m_Buffer.m_pCurrentData, + bytes_from_this_page); + + // advance buffer and page + buffer->AdvanceCurrentData(bytes_from_this_page); + file->CheckPageBoundary(); + + // advance progress + cmd->bytes_processed = bytes_from_this_page + cmd->bytes_processed; + buffer_len = buffer_len - bytes_from_this_page; + bytes_needed = bytes_needed - bytes_from_this_page; + } + + // check if we got the whole header + if (cmd->bytes_processed == sizeof(DgoHeader)) { + ovrld_log(LogCategory::DGO, "DGO: got dgo header: {} with {} objects", + cmd->dgo_header.name, cmd->dgo_header.object_count); + cmd->bytes_processed = 0; + cmd->objects_loaded = 0; + if (cmd->dgo_header.object_count == 1) { + // if we have only 1 object, go directly to loading to the top buffer + cmd->ee_dest_buffer = cmd->buffer_top; + cmd->state = ISO_DGOCommand::State::READ_OBJ_HEADER; + cmd->buffer_toggle = 0; + } else { + // otherwise, start with buffer! + cmd->buffer_toggle = 1; + cmd->ee_dest_buffer = cmd->buffer1; + cmd->state = ISO_DGOCommand::State::READ_OBJ_HEADER; + } + } + } break; + case ISO_DGOCommand::State::FINISH_OBJ: + + // sync with EE - if we're loading double-buffered, wait on the EE + // note that we don't wait on the first object, since both buffers start empty, + // and we can safely fill both with no syncs. + // the order of synchronization is a little bit strange. The EE must tell us that it's + // finished processing buffer A before we tell the EE the location of buffer B. + // This is needed to get the sync right for the last object - we want the EE to run + // through all the buffers, then we load the final object, then we notify it. If the EE + // wouldn't tell us it was done until it got the next object, we'd be unable to do this. + if (cmd->finished_first_object != 0 && cmd->buffer1 != cmd->buffer2) { + if (LookSyncMbx() == 0) + goto exit_no_sync; + + ovrld_log(LogCategory::DGO, + "DGO: finished object (2buffer), and got sync message from EE or cancel"); + // iVar3 = 6; + if (cmd->want_abort != 0) { + ovrld_log(LogCategory::DGO, "DGO: cancel!! (1)"); + cmd->state = ISO_DGOCommand::State::FINISH_DGO; + break; + } + } + + // for double buffer, notify the EE that we've finished loading. + if (cmd->buffer1 != cmd->buffer2) { + cmd->status = EIsoStatus::OK_2; + cmd->selected_buffer = cmd->buffer_toggle != 1 ? cmd->buffer2 : cmd->buffer1; + ovrld_log(LogCategory::DGO, + "DGO: finished object (2buffer) - notifying EE of location"); + ReturnMessage(cmd); + sLoadDGO.sync_ret_count = sLoadDGO.sync_ret_count + 1; + } + + // for single buffer, sync with EE so we know the next location to load. + // note that we've already returned the message for the single buffer case + if ((cmd->buffer1 == cmd->buffer2) && + (cmd->objects_loaded + 1 < (s32)cmd->dgo_header.object_count)) { + if (LookSyncMbx() == 0) + goto exit_no_sync; + ovrld_log(LogCategory::DGO, + "DGO: finished object (1buffer), and got sync message from EE or cancel"); + if (cmd->want_abort != 0) { + ovrld_log(LogCategory::DGO, "DGO: cancel!! (2)"); + cmd->state = ISO_DGOCommand::State::FINISH_DGO; + break; + } + } + cmd->finished_first_object = 1; + if (cmd->buffer_toggle == 1) { + cmd->ee_dest_buffer = cmd->buffer2; + cmd->buffer_toggle = 2; + } else { + cmd->buffer_toggle = 1; + cmd->ee_dest_buffer = cmd->buffer1; + } + + if (cmd->objects_loaded + 1 == (int)cmd->dgo_header.object_count) { + cmd->state = ISO_DGOCommand::State::READ_LAST_OBJ; + } else { + cmd->state = ISO_DGOCommand::State::READ_OBJ_HEADER; + } + // LAB_000073f8: + // cmd->state = iVar3; + break; + case ISO_DGOCommand::State::READ_LAST_OBJ: + // do an extra sync here to wait for the EE to finish processing both temporary buffers. + // the next load will be to the heap top, which may overlap the temp buffers. + // lg::warn("in read last obj!"); + if (LookSyncMbx() == 0) + goto exit_no_sync; + ovrld_log(LogCategory::DGO, + "DGO: got final object sync message - can start running that now"); + if (cmd->want_abort != 0) { + cmd->state = ISO_DGOCommand::State::FINISH_DGO; + ovrld_log(LogCategory::DGO, "DGO: cancel!! (3)"); + } else { + cmd->ee_dest_buffer = cmd->buffer_top; + cmd->state = ISO_DGOCommand::State::READ_OBJ_HEADER; + cmd->buffer_toggle = 0; + } + + break; + case ISO_DGOCommand::State::READ_OBJ_HEADER: { + int bytes_needed = sizeof(ObjectHeader) - cmd->bytes_processed; + if (buffer_len < bytes_needed) { + bytes_needed = buffer_len; + } + while (bytes_needed) { + int bytes_from_this_page = buffer->m_pPageList->m_pCurrentActivePage->m_pPageMemEnd - + file->m_Buffer.m_pCurrentData + 1; + if (bytes_needed <= bytes_from_this_page) { + bytes_from_this_page = bytes_needed; + } + ASSERT(bytes_from_this_page >= 0); + ovrld_log(LogCategory::DGO, "DGO: reading {} bytes of object header", + bytes_from_this_page); + memcpy(((u8*)&cmd->obj_header) + cmd->bytes_processed, (file->m_Buffer).m_pCurrentData, + bytes_from_this_page); + buffer->AdvanceCurrentData(bytes_from_this_page); + file->CheckPageBoundary(); + cmd->bytes_processed = bytes_from_this_page + cmd->bytes_processed; + buffer_len = buffer_len - bytes_from_this_page; + bytes_needed = bytes_needed - bytes_from_this_page; + } + if (cmd->bytes_processed == sizeof(ObjectHeader)) { + ovrld_log(LogCategory::DGO, "DGO: got object header {} {}", cmd->obj_header.name, + cmd->obj_header.size); + cmd->obj_header.size = (cmd->obj_header.size + 0xf) & 0xfffffff0; + DMA_SendToEE(cmd->ee_dest_buffer, &cmd->obj_header, sizeof(ObjectHeader), nullptr, + nullptr); + cmd->ee_dest_buffer = cmd->ee_dest_buffer + sizeof(ObjectHeader); + cmd->state = ISO_DGOCommand::State::READ_OBJ_DATA; + cmd->bytes_processed = 0; + } + } break; + case ISO_DGOCommand::State::READ_OBJ_DATA: { + int bytes_needed = cmd->obj_header.size - cmd->bytes_processed; + if (buffer_len < bytes_needed) { + bytes_needed = buffer_len; + } + + while (bytes_needed) { + auto* page = buffer->m_pPageList->m_pCurrentActivePage; + int bytes_from_this_page = page->m_pPageMemEnd - file->m_Buffer.m_pCurrentData + 1; + if (bytes_needed <= bytes_from_this_page) { + bytes_from_this_page = bytes_needed; + } + int ret = page->AddDmaRef(); + ASSERT(ret >= 0); + + DMA_SendToEE(cmd->ee_dest_buffer, (file->m_Buffer).m_pCurrentData, bytes_from_this_page, + CopyDataDmaCallback, page); + buffer->AdvanceCurrentData(bytes_from_this_page); + file->CheckPageBoundary(); + cmd->ee_dest_buffer = bytes_from_this_page + cmd->ee_dest_buffer; + cmd->bytes_processed = bytes_from_this_page + cmd->bytes_processed; + buffer_len = buffer_len - bytes_from_this_page; + bytes_needed = bytes_needed - bytes_from_this_page; + + if (!file->m_Buffer.m_pCurrentData) { + buffer_len = 0; + break; + } + } + + if (cmd->bytes_processed == (int)cmd->obj_header.size) { + cmd->objects_loaded = cmd->objects_loaded + 1; + if (cmd->objects_loaded < (int)cmd->dgo_header.object_count) { + if (cmd->buffer1 == cmd->buffer2) { + cmd->state = ISO_DGOCommand::State::FINISH_OBJ_SINGLE_BUFFER; + } else { + cmd->state = ISO_DGOCommand::State::FINISH_OBJ; + } + cmd->bytes_processed = 0; + } else { + ret_status = EIsoStatus::NONE_0; + cmd->state = ISO_DGOCommand::State::FINISH_DGO; + } + } + } break; + case ISO_DGOCommand::State::FINISH_DGO: + ret_status = EIsoStatus::NONE_0; + file->m_Buffer.m_pCurrentData = nullptr; + file->m_Buffer.m_pCurrentPageStart = nullptr; + goto out_of_data; + case ISO_DGOCommand::State::FINISH_OBJ_SINGLE_BUFFER: + cmd->status = EIsoStatus::OK_2; + if (cmd->buffer_toggle == 1) { + cmd->selected_buffer = cmd->buffer1; + } else { + cmd->selected_buffer = cmd->buffer2; + } + ReturnMessage((ISO_VAGCommand*)cmd); + sLoadDGO.sync_ret_count = sLoadDGO.sync_ret_count + 1; + cmd->state = ISO_DGOCommand::State::FINISH_OBJ; + } + } while (buffer_len); + exit_no_sync: + if (ret_status != EIsoStatus::NONE_0) + goto LAB_0000743c; + } else { + cmd->nosync_cancel_ack = 1; + cmd->nosync_cancel_pending_flag = 0; + cmd->acked_cancel_id = cmd->request_cancel_id; + send_count = sLoadDGO.sync_sent_count - sLoadDGO.sync_mbox_wait_count; + receive_count = sLoadDGO.sync_ret_count - sLoadDGO.sync_mbox_wait_count; + // CpuResumeIntr(local_30[0]); + if (0 < send_count) { + receive_count = receive_count + -1; + WaitMbx(g_nSyncMbx); + sLoadDGO.sync_mbox_wait_count = sLoadDGO.sync_mbox_wait_count + 1; + } + ret_status = EIsoStatus::IDLE_1; + if (-1 < receive_count) { + LAB_0000743c: + if (buffer_len) { + file->m_Buffer.m_nDataLength = buffer_len; + return ret_status; + } + goto out_of_data; + } + ret_status = EIsoStatus::NONE_0; + } + (file->m_Buffer).m_pCurrentData = nullptr; + (file->m_Buffer).m_pCurrentPageStart = nullptr; +out_of_data: + (file->m_Buffer).m_nDataLength = 0; + return ret_status; +} + +u32 DGOThread() { + sceSifQueueData dq; + sceSifServeData serve; + + // setup RPC. + CpuDisableIntr(); + sceSifInitRpc(0); + sceSifSetRpcQueue(&dq, GetThreadId()); + sceSifRegisterRpc(&serve, RpcId::DGO, RPC_DGO, sRPCBuff, kRpcBuffSize, nullptr, nullptr, &dq); + CpuEnableIntr(); + sceSifRpcLoop(&dq); + return 0; +} + +void* RPC_DGO(unsigned int fno, void* msg_ptr, int) { + RPC_Dgo_Cmd* cmd = (RPC_Dgo_Cmd*)msg_ptr; + switch (fno) { + case DgoFno::LOAD: + LoadDGO(cmd); + break; + case DgoFno::LOAD_NEXT: + LoadNextDGO(cmd); + break; + case DgoFno::CANCEL: + CancelDGO(cmd); + break; + default: + cmd->status = 1; + ASSERT_NOT_REACHED(); + } + return msg_ptr; +} + +void* foo = 0; + +/*! + * Send a sync message to unblock the DGO thread when doing an async cancel. + */ +bool NotifyDGO() { + // CpuSuspendIntr(local_10); + bool pending_cancel = sLoadDGO.nosync_cancel_ack == 0; + if (pending_cancel) { + sLoadDGO.sync_sent_count = sLoadDGO.sync_sent_count + 1; + } + // CpuResumeIntr(local_10[0]); + if (pending_cancel) { + SendMbx(g_nSyncMbx, &foo); + } + return pending_cancel; +} + +void LoadDGO(RPC_Dgo_Cmd* cmd) { + ISOFileDef* file = get_file_system()->Find(cmd->name); + + if (!file) { + ovrld_log(LogCategory::WARN, "DGO RPC: LoadDGO {} file not found\n", cmd->name); + cmd->status = 1; + return; + } + if (sLoadDGO.last_id < cmd->cgo_id) { + ovrld_log(LogCategory::RPC, "DGO RPC: new command ID, starting a load for {}", cmd->name); + CancelDGO(nullptr); + sLoadDGO.msg_type = ISO_Hdr::MsgType::DGO_LOAD; + sLoadDGO.selected_id = cmd->cgo_id; + sLoadDGO.mbox_reply = g_nDGOMbx; + sLoadDGO.thread_to_wake = 0; + sLoadDGO.buffer1 = (u8*)(u64)cmd->buffer1; + sLoadDGO.buffer2 = (u8*)(u64)cmd->buffer2; + sLoadDGO.buffer_top = (u8*)(u64)cmd->buffer_heap_top; + sLoadDGO.file_def = file; + // CpuSuspendIntr(local_18); + if (0 < cmd->cgo_id - sLoadDGO.last_id) { + sLoadDGO.last_id = cmd->cgo_id; + } + sLoadDGO.sync_sent_count = 1; + sLoadDGO.nosync_cancel_ack = 0; + // CpuResumeIntr(local_18[0]); + ASSERT(sLoadDGO.msg_type != ISO_Hdr::MsgType::MSG_0); + SendMbx(g_nISOMbx, &sLoadDGO); + WaitMbx(g_nDGOMbx); + if (sLoadDGO.status == EIsoStatus::OK_2) { + cmd->status = 2; + return; + } + if (sLoadDGO.status != EIsoStatus::NONE_0) { + cmd->status = 1; + sLoadDGO.msg_type = ISO_Hdr::MsgType::MSG_0; + sLoadDGO.selected_id = -1; + return; + } + } else { + ovrld_log(LogCategory::WARN, "DGO RPC: old command ID seen for {} (got {}, saw {}), ignoring\n", + cmd->name, cmd->cgo_id, sLoadDGO.last_id); + } + cmd->buffer1 = cmd->buffer_heap_top; + cmd->status = 0; + sLoadDGO.msg_type = ISO_Hdr::MsgType::MSG_0; + sLoadDGO.selected_id = -1; +} + +void LoadNextDGO(RPC_Dgo_Cmd* cmd) { + if (sLoadDGO.msg_type == ISO_Hdr::MsgType::MSG_0) { + ovrld_log(LogCategory::WARN, "DGO RPC: LoadNextDGO {} load not running! Ignoring\n", cmd->name); + cmd->status = 1; + return; + } + + sLoadDGO.buffer_top = (u8*)(u64)cmd->buffer_heap_top; + sLoadDGO.buffer1 = (u8*)(u64)cmd->buffer1; + sLoadDGO.buffer2 = (u8*)(u64)cmd->buffer2; + bool unblocked = NotifyDGO(); // tell dgo state machine to run + int status = 3; + if (unblocked != 0) { + WaitMbx(g_nDGOMbx); // wait for it to finish, and return to EE + if (sLoadDGO.status == EIsoStatus::OK_2) { + cmd->status = 2; + cmd->buffer1 = (u32)(u64)sLoadDGO.selected_buffer; + return; + } + status = 11; + if (sLoadDGO.status == EIsoStatus::NONE_0) { + cmd->status = 0; + cmd->buffer1 = cmd->buffer_heap_top; + sLoadDGO.msg_type = ISO_Hdr::MsgType::MSG_0; + sLoadDGO.selected_id = -1; + return; + } + } else { + ovrld_log(LogCategory::WARN, "DGO RPC: LoadNextDGO {} already cancelled! Ignoring\n", + cmd->name); + } + cmd->status = status; + sLoadDGO.msg_type = ISO_Hdr::MsgType::MSG_0; + sLoadDGO.selected_id = -1; +} + +void CancelDGO(RPC_Dgo_Cmd* param_1) { + ovrld_log(LogCategory::WARN, "DGO RPC: CancelDGO {}", param_1 ? param_1->name : "NO CMD"); + if (sLoadDGO.msg_type != ISO_Hdr::MsgType::MSG_0) { + sLoadDGO.want_abort = 1; + if (NotifyDGO()) { + WaitMbx(g_nDGOMbx); + } + if (param_1) { + param_1->status = 3; + } + sLoadDGO.selected_id = -1; + sLoadDGO.msg_type = ISO_Hdr::MsgType::MSG_0; + } +} + +void CancelDGONoSync(int id) { + ovrld_log(LogCategory::WARN, "DGO RPC: CancelDGONoSync {}", id); + // CpuSuspendIntr(local_10); + sLoadDGO.nosync_cancel_pending_flag = 1; + if (0 < id - sLoadDGO.last_id) { + sLoadDGO.last_id = id; + } + sLoadDGO.request_cancel_id = id; + // CpuResumeIntr(local_10[0]); +} + +EIsoStatus CopyDataToEE(ISO_Hdr* msg) { + return CopyData((ISO_LoadSingle*)msg, CopyKind::EE); +} + +EIsoStatus CopyDataToIOP(ISO_Hdr* msg) { + return CopyData((ISO_LoadSingle*)msg, CopyKind::IOP); +} + +EIsoStatus CopyDataSbkLoad(ISO_Hdr* msg) { + return CopyData((ISO_LoadSingle*)msg, CopyKind::SBK); +} + +void CopyDataDmaCallback(void* in) { + ((CPage*)in)->ReleaseDmaRef(); +} + +EIsoStatus CopyData(ISO_LoadCommon* cmd, CopyKind kind) { + ASSERT(cmd); + auto* file = cmd->m_pBaseFile; + if (file == (CISOCDFile*)0x0) { + return EIsoStatus::ERROR_NO_FILE; + } + + EIsoStatus status = EIsoStatus::OK_2; + if (file->m_Buffer.m_eBufferType != CBuffer::BufferType::NORMAL) { + CBuffer* buffer = &file->m_Buffer; + CPage* page = nullptr; + if (buffer->m_pPageList && buffer->m_nDataLength) { + if (file->CheckPageBoundary()) { + page = file->m_Buffer.m_pPageList->m_pCurrentActivePage; + } + if (page && cmd->progress_bytes < cmd->length_to_copy) { + int len; + do { + // length we want + len = cmd->length_to_copy - cmd->progress_bytes; + + // trim to buffered + if (buffer->m_nDataLength < len) { + len = buffer->m_nDataLength; + } + + // trim to page + if (page->m_pPageMemEnd - buffer->m_pCurrentData + 1 < len) { + len = page->m_pPageMemEnd - buffer->m_pCurrentData + 1; + } + + if (0 < len) { + switch (kind) { + case CopyKind::IOP: { + if (page->AddRef() < 1) { + ASSERT_NOT_REACHED(); + } + memcpy(cmd->dest_ptr, buffer->m_pCurrentData, len); + if (page->ReleaseRef() < 0) + ASSERT_NOT_REACHED(); + } break; + case CopyKind::EE: { + if (page->AddDmaRef() < 1) { + ASSERT_NOT_REACHED(); + } + DMA_SendToEE(cmd->dest_ptr, buffer->m_pCurrentData, len, CopyDataDmaCallback, page); + } break; + case CopyKind::SBK: { + WaitSema(g_n989Semaphore); + if (g_bSoundEnable == 0) { + SignalSema(g_n989Semaphore); + return EIsoStatus::ERROR_NO_SOUND; + } + if (page->AddRef() < 1) { + ASSERT_NOT_REACHED(); + SignalSema(g_n989Semaphore); + return EIsoStatus::OK_2; + } + auto* bank_info = ((ISO_LoadSoundbank*)cmd)->bank_info; + + // hack: added + if (cmd->progress_bytes == 0) { + snd_BankLoadFromIOPPartialEx_Start(); + } + snd_BankLoadFromIOPPartialEx(buffer->m_pCurrentData, len, bank_info->m_nSpuMemLoc, + bank_info->m_nSpuMemSize); + if (cmd->progress_bytes + len == cmd->length_to_copy) { + bank_info->snd_handle = snd_BankLoadFromIOPPartialEx_Completion(); + snd_ResolveBankXREFS(); + // TODO: this also set field_0x28... is that needed?? + } + + if (page->ReleaseRef() < 0) { + ASSERT_NOT_REACHED(); + } + SignalSema(g_n989Semaphore); + } break; + default: + ASSERT_NOT_REACHED(); + } + + cmd->dest_ptr = cmd->dest_ptr + len; + cmd->progress_bytes = len + cmd->progress_bytes; + buffer->AdvanceCurrentData(len); + if (!file->CheckPageBoundary()) + break; + page = buffer->m_pPageList->m_pCurrentActivePage; + } + + if (!page || len < 1) + break; + } while (true); + } + } + if ((u32)cmd->progress_bytes < (u32)cmd->length_to_copy) { + return status; + } + buffer->m_pPageList->CancelActivePages(); + if (status != EIsoStatus::OK_2) { + return status; + } + return EIsoStatus::NONE_0; + } + return EIsoStatus::ERROR_NO_FILE; +} + +EIsoStatus NullCallback(ISO_Hdr*) { + return EIsoStatus::NULL_CALLBACK; +} + +void set_active_a(ISO_Hdr* cmd, int val) { + cmd->active_a = val; +} + +void set_active_b(ISO_Hdr* cmd, int val) { + cmd->active_b = val; +} + +void set_active_c(ISO_Hdr* cmd, int val) { + cmd->active_c = val; +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso.h b/game/overlord/jakx/iso.h new file mode 100644 index 0000000000..7c83169e32 --- /dev/null +++ b/game/overlord/jakx/iso.h @@ -0,0 +1,92 @@ +#pragma once +#include "common/link_types.h" + +#include "game/overlord/jakx/isocommon.h" + +namespace jakx { +struct ISOFileDef; +void jakx_overlord_init_globals_iso(); +void InitISOFS(); + +const ISOFileDef* FindISOFile(const char*); +struct ISO_VAGCommand; +struct VagStreamData; +struct RPC_Dgo_Cmd; + +struct ISO_DGOCommand : public ISO_Hdr { + u8* buffer1 = nullptr; + u8* buffer2 = nullptr; + u8* buffer_top = nullptr; + DgoHeader dgo_header; // + ObjectHeader obj_header; // + u8* ee_dest_buffer = nullptr; // 192 + int bytes_processed = 0; // 196 + int objects_loaded = 0; // 200 + enum class State { + INIT = 0, + READ_DGO_HEADER = 1, + FINISH_OBJ = 2, + READ_LAST_OBJ = 3, + READ_OBJ_HEADER = 4, + READ_OBJ_DATA = 5, + FINISH_DGO = 6, + FINISH_OBJ_SINGLE_BUFFER = 7, + } state = State::INIT; // 204 + int finished_first_object = 0; // 208 + int buffer_toggle = 0; // 212 + u8* selected_buffer = nullptr; // 216 + int selected_id = 0; // 220 + int last_id = 0; // 224 + int acked_cancel_id = 0; // 228 + u8 nosync_cancel_pending_flag = 0; // 232 + int request_cancel_id = 0; // 236 + u8 nosync_cancel_ack = 0; // 240 + int sync_sent_count = 0; // 244 + + // the number of times we looked in the iso thread's sync mbox + // I think just used for debugging/asserts. + int sync_mbox_wait_count = 0; // 248 + + int sync_ret_count = 0; // 252 + int want_abort = 0; // 256 +}; + +enum class CopyKind { + EE = 0, + IOP = 1, + SBK = 2, +}; + +void set_active_a(ISO_Hdr* cmd, int val); +void set_active_b(ISO_Hdr* cmd, int val); +void set_active_c(ISO_Hdr* cmd, int val); +void IsoStopVagStream(ISO_VAGCommand* cmd); +void IsoPlayVagStream(ISO_VAGCommand* user_cmd); +EIsoStatus NullCallback(ISO_Hdr* msg); +EIsoStatus CopyDataToIOP(ISO_Hdr* msg); +EIsoStatus CopyDataSbkLoad(ISO_Hdr* msg); +EIsoStatus CopyDataToEE(ISO_Hdr* msg); +EIsoStatus RunDGOStateMachine(ISO_Hdr* msg); +void QueueVAGStream(VagStreamData* cmd); +void CopyDataDmaCallback(void*); +void* RPC_DGO(unsigned int fno, void* msg_ptr, int); +void LoadDGO(RPC_Dgo_Cmd* cmd); +void CancelDGO(RPC_Dgo_Cmd* cmd); +void LoadNextDGO(RPC_Dgo_Cmd* cmd); +EIsoStatus CopyData(ISO_LoadCommon* msg, CopyKind kind); +void CancelDGONoSync(int id); +void IsoPlayMusicStream(ISO_VAGCommand* user_cmd); +void IsoQueueVagStream(ISO_VAGCommand* user_cmd); +extern int g_nISOThreadID; +extern int g_nISOMbx; +extern bool g_bMusicPause; +extern int g_nMusicSemaphore; +extern char g_szTargetMusicName[0x30]; +extern int g_nActiveMusicStreams; +extern bool g_bVagCmdsInitialized; +extern bool g_bMusicIsPaused; +extern bool g_bAnotherMusicPauseFlag; +extern int g_nMusicFade; +extern int g_nMusicTweak; +extern int g_nMusicFadeDir; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso_api.cpp b/game/overlord/jakx/iso_api.cpp new file mode 100644 index 0000000000..379b6ccc93 --- /dev/null +++ b/game/overlord/jakx/iso_api.cpp @@ -0,0 +1,221 @@ +#include "iso_api.h" + +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" +#include "common/util/FileUtil.h" + +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/iso_cd.h" +#include "game/overlord/jakx/iso_queue.h" +#include "game/overlord/jakx/srpc.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" + +namespace jakx { +using namespace iop; +void jakx_overlord_init_globals_iso_api() {} + +/*! + * This file is the "API" that implementations of RPCs or other code can use to submit things to the + * ISO thread. Note that not all RPCs use this API - for example the DGO RPC just manually submits + * messages. Generally, these functions will not return until the actual action is complete, like a + * file is loaded. + * - except for messages to pause/play audio, those functions will return immediately, but there may + * be a delay until they are actually processed. + */ + +// PluginVagAndVagWad not ported. + +u32 EEVagAndVagWad(ISO_VAGCommand* cmd, char* name) { + ISOName name_buff; + if (*name == '$' || strlen(name) < 9) { + if (*name == '$') { + name++; + } + MakeISOName(&name_buff, name); + } else { + file_util::ISONameFromAnimationName(name_buff.data, name); + } + + cmd->vag_dir_entry = get_file_system()->FindVAGFile(name_buff.data); + if (cmd->vag_dir_entry) { + memcpy(name_buff.data, "VAGWAD ", 8); + strncpy(name_buff.data + 8, g_pszLanguage, 4); + auto* file_def = get_file_system()->FindIN(&name_buff); + // piVar1 = g_pFileSystem; + cmd->file_def = file_def; + + strncpy(name_buff.data + 8, "INT", 4); + + cmd->vag_file_def = get_file_system()->FindIN(&name_buff); + if (cmd->vag_dir_entry && cmd->file_def && cmd->vag_file_def) { + return 1; + } + } + + cmd->vag_dir_entry = nullptr; + cmd->file_def = nullptr; + cmd->vag_file_def = nullptr; + return 0; +} + +int LoadISOFileToIOP(const ISOFileDef* file_def, void* addr, int length) { + ISO_LoadSingle cmd; + cmd.msg_type = ISO_Hdr::MsgType::LOAD_IOP; + cmd.mbox_reply = 0; + cmd.thread_to_wake = GetThreadId(); + cmd.file_def = file_def; + cmd.addr = (u8*)addr; + cmd.maxlen = length; + SendMbx(g_nISOMbx, &cmd); + SleepThread(); + if (cmd.status == EIsoStatus::NONE_0) { + return cmd.length_to_copy; + } else { + return 0; + } +} + +int LoadISOFileToEE(const ISOFileDef* file_def, u32 addr, int length) { + ISO_LoadSingle cmd; + cmd.msg_type = ISO_Hdr::MsgType::LOAD_EE; + cmd.mbox_reply = 0; + cmd.thread_to_wake = GetThreadId(); + cmd.file_def = file_def; + cmd.addr = (u8*)(u64)addr; + cmd.maxlen = length; + SendMbx(g_nISOMbx, &cmd); + SleepThread(); + if (cmd.status == EIsoStatus::NONE_0) { + return cmd.length_to_copy; + } + return 0; +} + +int LoadISOFileChunkToEE(const ISOFileDef* file_def, u32 addr, int max_len, int sector_offset) { + ISO_LoadSingle cmd; + cmd.msg_type = ISO_Hdr::MsgType::LOAD_EE_CHUNK; + cmd.mbox_reply = 0; + cmd.thread_to_wake = GetThreadId(); + cmd.file_def = file_def; + cmd.addr = (u8*)(u64)addr; + cmd.maxlen = max_len; + cmd.sector_offset = sector_offset; + SendMbx(g_nISOMbx, &cmd); + SleepThread(); + if (cmd.status == EIsoStatus::NONE_0) { + return cmd.length_to_copy; + } + return 0; +} + +u32 LoadSoundBankToIOP(const char* name, SoundBankInfo* bank, u32 mode) { + ISO_LoadSoundbank cmd; + cmd.msg_type = ISO_Hdr::MsgType::LOAD_SOUNDBANK; + cmd.mbox_reply = 0; + cmd.thread_to_wake = GetThreadId(); + cmd.bank_info = bank; + cmd.name = name; + cmd.priority = mode; + SendMbx(g_nISOMbx, &cmd); + SleepThread(); + + return (u32)cmd.status; +} + +void PlayMusicStream(VagStreamData* stream) { + int iVar1; + ISO_VAGCommand cmd; + + cmd.msg_type = ISO_Hdr::MsgType::PLAY_MUSIC_STREAM; + cmd.mbox_reply = 0; + cmd.thread_to_wake = 0; + iVar1 = EEVagAndVagWad(&cmd, stream->name); + if (iVar1 == 0) { + // if (bWarn == 0) { + // bWarn = 1; + // } + } else { + cmd.play_volume = 0x400; + // bWarn = 0; + strncpy(cmd.name, stream->name, 0x30); + cmd.id = stream->id; + cmd.priority_pq = 9; + cmd.music_flag = 1; + cmd.maybe_sound_handler = 0; + cmd.plugin_id = 0; + cmd.art_flag = 0; + cmd.movie_flag = 0; + cmd.updated_trans = 0; + IsoPlayMusicStream(&cmd); + } +} + +void QueueVAGStream(VagStreamData* stream) { + bool bVar1; + bool bVar2; + ISO_VAGCommand cmd; + + cmd.msg_type = ISO_Hdr::MsgType::VAG_QUEUE; + cmd.mbox_reply = 0; + cmd.thread_to_wake = 0; + if (stream->sound_handler == 0) { + EEVagAndVagWad(&cmd, stream->name); + cmd.play_volume = 0x400; + cmd.play_group = 2; + } else { + ASSERT_NOT_REACHED(); + // PluginVagAndVagWad(&cmd,stream); + // cmd.play_volume = stream->maybe_volume2; + // cmd.oog = stream->maybe_volume_3; + // cmd.play_group = stream->group; + } + strncpy(cmd.name, stream->name, 0x30); + cmd.id = stream->id; + cmd.plugin_id = stream->plugin_id; + cmd.priority_pq = stream->priority; + cmd.maybe_sound_handler = stream->sound_handler; + bVar1 = stream->movie_art_load != 0; + cmd.movie_flag = bVar1; + bVar2 = stream->art_load != 0; + cmd.art_flag = bVar2; + cmd.music_flag = 0; + if (bVar2) { + cmd.flags.art = 1; + } + if (bVar1) { + cmd.flags.movie = 1; + } + cmd.updated_trans = 0; + IsoQueueVagStream(&cmd); +} + +void PauseVAGStreams() { + auto* cmd = GetVAGCommand(); + cmd->msg_type = ISO_Hdr::MsgType::VAG_PAUSE; + cmd->mbox_reply = 0; + cmd->thread_to_wake = 0; + SendMbx(g_nISOMbx, cmd); +} + +void UnpauseVAGStreams() { + auto* cmd = GetVAGCommand(); + cmd->msg_type = ISO_Hdr::MsgType::VAG_UNPAUSE; + cmd->mbox_reply = 0; + cmd->thread_to_wake = 0; + SendMbx(g_nISOMbx, cmd); +} + +void SetVAGStreamPitch(int id, int pitch) { + auto* cmd = GetVAGCommand(); + cmd->msg_type = ISO_Hdr::MsgType::VAG_SET_PITCH_VOL; + cmd->id = id; + cmd->pitch_cmd = pitch; + cmd->mbox_reply = 0; + cmd->thread_to_wake = 0; + SendMbx(g_nISOMbx, cmd); +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso_api.h b/game/overlord/jakx/iso_api.h new file mode 100644 index 0000000000..d06160d215 --- /dev/null +++ b/game/overlord/jakx/iso_api.h @@ -0,0 +1,19 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_iso_api(); + +struct ISOFileDef; +struct VagStreamData; +struct SoundBankInfo; + +int LoadISOFileToEE(const ISOFileDef* file_def, u32 addr, int length); +int LoadISOFileToIOP(const ISOFileDef* file_def, void* addr, int length); +void PlayMusicStream(VagStreamData* data); +int LoadISOFileChunkToEE(const ISOFileDef* file_def, u32 addr, int max_len, int sector_offset); +void SetVAGStreamPitch(s32 id, s32 pitch); +void UnpauseVAGStreams(); +u32 LoadSoundBankToIOP(const char* name, SoundBankInfo* bank, u32 mode); +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso_cd.cpp b/game/overlord/jakx/iso_cd.cpp new file mode 100644 index 0000000000..39db1888df --- /dev/null +++ b/game/overlord/jakx/iso_cd.cpp @@ -0,0 +1,530 @@ +#include "iso_cd.h" + +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" +#include "common/util/FileUtil.h" + +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/isocommon.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/sce/iop.h" + +using namespace iop; + +namespace jakx { +VagDir g_VagDir; +MusicTweaks gMusicTweakInfo; +CISOCDFile g_CISOCDFiles[kMaxOpenFiles]; + +namespace { +CISOCDFile* g_pReadInfo = nullptr; +std::vector g_FileDefs; +std::unique_ptr g_ISOCDFileSystem; +} // namespace + +void jakx_overlord_init_globals_iso_cd() { + g_pReadInfo = nullptr; + for (auto& f : g_CISOCDFiles) { + f = CISOCDFile(); + } + g_FileDefs.clear(); + g_VagDir = {}; + g_ISOCDFileSystem = std::make_unique(); + gMusicTweakInfo = {}; +} + +CBaseFileSystem* get_file_system() { + return g_ISOCDFileSystem.get(); +} + +CISOCDFile::CISOCDFile() { + m_nSector = -1; + m_nLoaded = 0; + m_nLength = 0; +} + +namespace { +void ReadPagesCallbackF(CISOCDFile* file, Block* block, s32 error) { + file->ReadPagesCallback(block, error); +} +} // namespace + +CISOCDFile::CISOCDFile(const jakx::ISOFileDef* filedef, s32 process_data_semaphore) + : CBaseFile(filedef, process_data_semaphore) { + m_nSector = -1; + m_nLoaded = 0; + m_nLength = 0; + m_Descriptor.m_File = this; + m_Descriptor.m_Callback = ReadPagesCallbackF; +} + +/*! + * Call ReadPages to read data from this file into its PageList. I believe that the read + * is finished after this function returns. Note that this returns COMPLETE enum in many cases, both + * if the read succeeds, or if the read is not attempted for some reasons. + */ +EIsoStatus CISOCDFile::BeginRead() { + ASSERT(m_Buffer.m_pPageList); + ASSERT(m_Buffer.m_eBufferType != CBuffer::BufferType::EBT_FREE); + + if (m_Status == EIsoStatus::NONE_0) { + return EIsoStatus::ERROR_b; + } + + if (m_Status == EIsoStatus::OK_2) { + return EIsoStatus::OK_2; + } + + ASSERT(m_Status == EIsoStatus::IDLE_1); + + auto* plist = m_Buffer.m_pPageList; + + // how many pages are in our list, but not filled? + int num_pages_desired = plist->m_nNumPages - plist->m_nNumActivePages; + + if (!num_pages_desired) { + // no space to read + return EIsoStatus::OK_2; + } + + // convert pages to active, indicating that a read will attempt to fill them: + auto* first_page = plist->AddActivePages(num_pages_desired); + if (!first_page) { + lg::warn("Failed to add {} active pages", num_pages_desired); + } + + // convert buffer type - ?? + switch (m_Buffer.m_eBufferType) { + case CBuffer::BufferType::EBT_FREE: + ASSERT_NOT_REACHED(); + case CBuffer::BufferType::NORMAL: + m_Buffer.m_eBufferType = CBuffer::BufferType::REQUEST_NORMAL; + break; + case CBuffer::BufferType::VAG: + m_Buffer.m_eBufferType = CBuffer::BufferType::REQUEST_VAG; + break; + case CBuffer::BufferType::REQUEST_NORMAL: + case CBuffer::BufferType::REQUEST_VAG: + break; + } + + m_Status = EIsoStatus::OK_2; + + // remember this as our currently reading file + g_pReadInfo = this; + if (m_FileKind != CBaseFile::Kind::LZO_COMPRESSED) { + if (m_nLength == 0 || m_nLoaded < m_nLength) { + ovrld_log(LogCategory::PAGING, "Calling ReadPages: sector {}, pages {}", m_nSector, + num_pages_desired); + ReadPages(m_nSector, first_page, num_pages_desired, nullptr, true); + int bytes = 0x8000 * num_pages_desired; + m_nLoaded += bytes; + m_Buffer.AddData(bytes); + m_nSector += bytes >> 0xb; + } + } else { + ASSERT_NOT_REACHED(); + } + + return EIsoStatus::OK_2; +} + +/*! + * Called by ?? to indicate that the read is done. + */ +EIsoStatus CISOCDFile::SyncRead() { + if (m_Status != EIsoStatus::IDLE_1 && g_pReadInfo) { + if (m_Status == EIsoStatus::OK_2) { + m_Status = EIsoStatus::IDLE_1; + } + g_pReadInfo = nullptr; + return EIsoStatus::OK_2; + } + return EIsoStatus::ERROR_b; +} + +/*! + * As soon as possible, stop ongoing reads and free buffers. + */ +void CISOCDFile::Close() { + // cancel ongoing reading in the driver + get_driver()->CancelRead(&m_Descriptor); + + ASSERT(m_FileKind != CBaseFile::Kind::LZO_COMPRESSED); // unsupported in pc + if (this == g_pReadInfo) { + g_pReadInfo = nullptr; + } + + if (m_Buffer.m_eBufferType != CBuffer::BufferType::EBT_FREE) { + TerminateBuffer(); + } + + // reset self + *this = CISOCDFile(); +} + +/*! + * In the case where we have run out of page memory, take pages that we have loaded, but aren't yet + * using, and discard them back to the pool. + */ +int CISOCDFile::RecoverPages(int num_pages_desired) { + // we only allow ourselves to recover pages for VAG streaming. + if (!m_Buffer.m_pIsoCmd || m_Buffer.m_pIsoCmd->callback != ProcessVAGData) { + return 0; + } + + // lock semaphore for processing + ASSERT(m_ProcessDataSemaphore != -1); + WaitSema(m_ProcessDataSemaphore); + auto* plist = m_Buffer.m_pPageList; + int num_removed = 0; + if (plist) { + int pages_to_ask_for = plist->m_nNumUnsteppedPages; + if (pages_to_ask_for > 1) { + // don't ask for more than user asked for + if (pages_to_ask_for > num_pages_desired) { + pages_to_ask_for = num_pages_desired; + } + num_removed = plist->RemoveActivePages(pages_to_ask_for); + if (num_removed) { + m_nSector -= 0x10 * num_removed; + m_nLoaded -= 0x8000 * num_removed; + // suspend intr + ASSERT(m_Buffer.m_nDataLength >= 0); + if (m_Buffer.m_nDataLength > 0) { + m_Buffer.AddData(-num_removed * 0x8000); + } + // resume intr + ASSERT(m_nLoaded >= 0); + } + } + } + + // move our reading pointer back. + m_PageOffset -= num_removed; + // unlock processing + SignalSema(m_ProcessDataSemaphore); + return num_removed; +} + +/*! + * Get the next sector to read. + */ +int CISOCDFile::GetSector() { + return m_nSector; +} + +// WaitForLZOPages - not ported. + +void CISOCDFile::ReadPages(int sector, + jakx::CPage* destination_page, + int num_pages, + char* done_flag_ptr, + bool sleep_until_done) { + ASSERT(destination_page); + ASSERT(num_pages >= 1); + + constexpr int kMaxPages = 24; + // I _think_ this might have been an alloca... + BlockParams params_array[kMaxPages]; + ASSERT(num_pages <= kMaxPages); + + // iVar2 = -((num_pages + -1) * 0x14 + 0x1bU & 0xfffffff8); + // params = (BlockParams*)((int)local_30 + iVar2); + BlockParams* params = params_array; + + // increment our progress in the file - the distributed update of the various progress integers + // is somewhat confusing, especially since failures here don't seem to reset it properly. + m_PageOffset += num_pages; + + // Set up block params for each page to read + CPage* page = destination_page; + int pg_remaining = num_pages; + do { + page->input_state = CPage::State::READING; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~page->mask); + + params->destination = page->m_pPageMemStart; + params->num_sectors = 0x10; + params->sector_num = sector; + params->file_def = m_FileDef; + params->page = page; + + params->flag = nullptr; + if (pg_remaining == 1) { // on the last page... + params->flag = (char*)0xffffffff; // flag this + if (!sleep_until_done) { + params->flag = done_flag_ptr; + } + } + ovrld_log(LogCategory::PAGING, "[paging] building block for driver: 0x{:x}, {}, {}, flag: {}", + (u64)params->destination, params->sector_num, params->file_def->name.data, + (u64)params->flag); + page = page->m_pNextPage; + pg_remaining = pg_remaining + -1; + sector += 0x10; + params++; + } while (page && pg_remaining > 0); + + if (pg_remaining == 0) { + // we set up block params for all the requested pages. + int pages_actually_read = -1; + + ovrld_log(LogCategory::PAGING, "[paging] Submitting {} blocks to driver.\n", num_pages); + int status = get_driver()->ReadMultiple(&m_Descriptor, &pages_actually_read, params_array, + num_pages, true); + if ((status == 0) && pages_actually_read == num_pages) { + if (!sleep_until_done) { + return; + } + // put us to sleep... + ovrld_log(LogCategory::PAGING, "[paging] Sleeping, waiting for driver to read {}", + pages_actually_read); + SleepThread(); + ovrld_log(LogCategory::PAGING, "[paging] Driver woke us up!"); + return; + } + ASSERT_NOT_REACHED(); // unexpected failure to issue read + } else { + // ran out of pages.... + ASSERT_NOT_REACHED(); // this was just a warning.. but I think it shouldn't happen. + if (destination_page) { + do { + destination_page->input_state = CPage::State::ACTIVE; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, + ~destination_page->mask); + destination_page = destination_page->m_pNextPage; + } while (destination_page); + } + } + + ASSERT_NOT_REACHED(); + // only get here is we failed.... set the done flag. + if (sleep_until_done == 0 && done_flag_ptr) { + *done_flag_ptr = 1; + } +} + +/*! + * Callback run by the dvd driver when a page is finished reading. + */ +void CISOCDFile::ReadPagesCallback(jakx::Block* block, int error) { + if (error == 0) { + ASSERT(block->params.page->m_nAllocState == 1); + // flag page as done + block->params.page->input_state = CPage::State::READ_DONE; + // set flag + SetEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, block->params.page->mask); + + // if this block has a notification, process it: + if (block->params.flag == (char*)0xffffffff) { // indicates we should wake caller + // we assume the caller is the iso thread + WakeupThread(g_nISOThreadID); + } else if (block->params.flag) { + // in this case, it's a pointer. + *block->params.flag = 1; + } + } +} + +// DecompressBlock - not ported + +/*! + * Initialize the file system - find all files and set up their definitions. + */ +int CISOCDFileSystem::Init() { + // drive ready event flag - not ported + // get disc type - not ported + + // this is mostly not needed... except for some vag pausing nonsense :( + get_driver()->SetDriverCallback([&](int a) { DvdDriverCallback(a); }); + + // skipped a bunch of lzo pages crap + ReadDirectory(); + LoadMusicTweaks(); + // skip load Disc ID + + // should already be done in the constructor... + for (auto& f : g_CISOCDFiles) { + f.m_FileDef = nullptr; + } + return 0; +} + +// PollDrive - not ported + +/*! + * Find a file definition by name. + */ +ISOFileDef* CISOCDFileSystem::Find(const char* name) { + ISOName iname; + file_util::MakeISOName(iname.data, name); + return FindIN(&iname); +} + +/*! + * Find a file definition by its "ISO Name", a 12-byte name. + */ +ISOFileDef* CISOCDFileSystem::FindIN(const jakx::ISOName* name) { + for (auto& def : g_FileDefs) { + if (def.name == *name) { + return &def; + } + } + return nullptr; +} + +/*! + * Get the length of a file, in bytes. + */ +int CISOCDFileSystem::GetLength(const jakx::ISOFileDef* file) { + // actually open the file and get the length, in case it changed. + // return file->length; + file_util::assert_file_exists(file->full_path.c_str(), "CISOCDFileSystem GetLength"); + FILE* fp = file_util::open_file(file->full_path.c_str(), "rb"); + ASSERT(fp); + fseek(fp, 0, SEEK_END); + uint32_t len = ftell(fp); + fclose(fp); + return len; +} + +/*! + * Open a file for reading. + */ +CBaseFile* CISOCDFileSystem::Open(const jakx::ISOFileDef* file_def, + int sector_offset, + int file_kind) { + auto* file = AllocateFile(file_def); + ASSERT(file); + + // file kind must be known to be non-compressed (1). (TODO: remove arg) + ASSERT(file_kind == 1); + + file->m_FileKind = CBaseFile::Kind::NORMAL; + // get the length again. Note that the file length could still change in between here and + // when we actually go to read it... but this is unlikely and not easy to support - we'd need to + // move the FILE* into the CBaseFile. + file->m_nLength = GetLength(file_def); + file->m_LengthPages = (0x7fff + file->m_nLength) >> 0xf; + if (file->m_LengthPages < 1) { + ASSERT_NOT_REACHED(); + } + file->m_nLoaded = 0; + file->m_PageOffset = 0; + + // in the original game, this was the sector of the start of the file + // we just make it 0, since we don't build up a whole iso file. + file->m_nSector = 0; + if (sector_offset != -1) { + file->m_nSector += sector_offset; + } + return file; +} + +/*! + * Open a WAD file for reading, given the offset of the data to read, in pages. + */ +CBaseFile* CISOCDFileSystem::OpenWAD(const jakx::ISOFileDef* file_def, int page_offset) { + auto* file = AllocateFile(file_def); + ASSERT(file); + + file->m_LengthPages = 1; // this is not really true.. + file->m_FileKind = CBaseFile::Kind::NORMAL; + file->m_PageOffset = 0; + file->m_nSector = page_offset * 0x10; + file->m_nLoaded = 0; + file->m_nLength = 0; + return file; +} + +/*! + * Locate the entry for a VAG file in the VAG directory. + */ +VagDirEntry* CISOCDFileSystem::FindVAGFile(const char* name) { + u32 packed_name[2]; + PackVAGFileName(packed_name, name); + for (int i = 0; i < g_VagDir.num_entries; i++) { + auto& entry = g_VagDir.entries[i]; + if (packed_name[0] == entry.words[0] && packed_name[1] == (entry.words[1] & 0x3ff)) { + return &entry; + } + } + return nullptr; +} + +/*! + * Get a CISOCDFile* for a newly opened file. + */ +CISOCDFile* CISOCDFileSystem::AllocateFile(const jakx::ISOFileDef* file_def) { + for (int i = 0; i < kMaxOpenFiles; i++) { + auto* file = &g_CISOCDFiles[i]; + if (!file->m_FileDef) { + *file = CISOCDFile(file_def, m_Sema[i]); + return file; + } + } + ASSERT_NOT_REACHED(); +} + +/*! + * Callback from the DVD driver itself into the filesystem. This was originally used for notifying + * when the tray is opened or closed. + */ +void CISOCDFileSystem::DvdDriverCallback(int) { + // the only callbacks that do anything are tray open/close, which we don't care about + ASSERT_NOT_REACHED(); +} + +// CheckDiscID - not ported +// LoadDiscID - not ported +// ReadSectorsNow - not ported + +/*! + * Find all the files on the disc and set up their information. This is modified for the PC port to + * just search for files in the appropriate out folder. + */ +void CISOCDFileSystem::ReadDirectory() { + for (const auto& f : + fs::directory_iterator(file_util::get_jak_project_dir() / "out" / "jakx" / "iso")) { + if (f.is_regular_file()) { + auto& e = g_FileDefs.emplace_back(); + std::string file_name = f.path().filename().string(); + ASSERT(file_name.length() < 16); // should be 8.3. + MakeISOName(&e.name, file_name.c_str()); + e.full_path = + fmt::format("{}/out/jakx/iso/{}", file_util::get_jak_project_dir().string(), file_name); + } + } +} + +/*! + * Load the "Music Tweaks" file, which contains a volume setting per music track. + */ +void CISOCDFileSystem::LoadMusicTweaks() { + ISOName tweakname; + MakeISOName(&tweakname, "TWEAKVAL.MUS"); + auto file = g_ISOCDFileSystem->FindIN(&tweakname); + if (file) { + auto fp = file_util::open_file(file->full_path, "rb"); + ASSERT(fp); + fseek(fp, 0, SEEK_END); + auto size = ftell(fp); + fseek(fp, 0, SEEK_SET); + ASSERT(size <= sizeof(gMusicTweakInfo)); + auto ret = fread(&gMusicTweakInfo, size, 1, fp); + ASSERT(ret == 1); + fclose(fp); + } else { + lg::warn("Failed to open music tweak file."); + gMusicTweakInfo.TweakCount = 0; + } +} + +// Crc32 - not ported +// ReadU32 - not ported + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso_cd.h b/game/overlord/jakx/iso_cd.h new file mode 100644 index 0000000000..6d8529d533 --- /dev/null +++ b/game/overlord/jakx/iso_cd.h @@ -0,0 +1,58 @@ +#pragma once + +#include + +#include "game/overlord/jakx/basefile.h" +#include "game/overlord/jakx/basefilesystem.h" +#include "game/overlord/jakx/dvd_driver.h" +#include "game/overlord/jakx/isocommon.h" + +namespace jakx { +void jakx_overlord_init_globals_iso_cd(); + +CBaseFileSystem* get_file_system(); + +extern VagDir g_VagDir; +extern MusicTweaks gMusicTweakInfo; + +struct CISOCDFile : public CBaseFile { + CISOCDFile(); + CISOCDFile(const ISOFileDef* filedef, s32 process_data_semaphore); + int m_nLoaded = 0; // bytes loaded so far + int m_nSector = 0; // next sector to read. + int m_nLength = 0; // bytes that we want to load. 0 for the whole file + CDescriptor m_Descriptor; + + EIsoStatus BeginRead() override; + + void ReadPages(int sector, + CPage* destination_page, + int num_pages, + char* done_flag_ptr, + bool flag); + EIsoStatus SyncRead() override; + void Close() override; + int RecoverPages(int num_pages) override; + int GetSector() override; + + void ReadPagesCallback(Block* block, int error); +}; + +struct CISOCDFileSystem : public CBaseFileSystem { + CISOCDFileSystem() = default; + int Init() override; + ISOFileDef* Find(const char* name) override; + ISOFileDef* FindIN(const ISOName* name) override; + int GetLength(const ISOFileDef* file) override; + CBaseFile* Open(const ISOFileDef* file_def, int sector_offset, int file_kind) override; + CBaseFile* OpenWAD(const ISOFileDef* file_def, int page_offset) override; + VagDirEntry* FindVAGFile(const char* name) override; + + void DvdDriverCallback(int a); + void ReadDirectory(); + void LoadMusicTweaks(); + CISOCDFile* AllocateFile(const ISOFileDef* file); + + // int m_drive_ready_event_flag = -1; +}; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso_queue.cpp b/game/overlord/jakx/iso_queue.cpp new file mode 100644 index 0000000000..49abc18982 --- /dev/null +++ b/game/overlord/jakx/iso_queue.cpp @@ -0,0 +1,732 @@ +#include "iso_queue.h" + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/basefile.h" +#include "game/overlord/jakx/dma.h" +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/isocommon.h" +#include "game/overlord/jakx/pagemanager.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" +#include "game/sound/sndshim.h" + +using namespace iop; + +namespace jakx { +s32 g_nPriQueueSema = 0; +s32 g_VagCmdSema = 0; +u32 g_auStrmSRAM[6]; +u32 g_auTrapSRAM[6]; +PriStackEntry gPriStack[2]; +extern u32 time_of_last_unknown_rate_drive_op; +u32 g_cmds_with_speed_total = 0; +bool unk_time_mode_flag = false; +ISO_Hdr* g_selected_cmd = nullptr; +bool unk_time_mflag = 0; +s32 unk_sector = 0; +u32 vag_cmd_cnt = 0; +u32 vag_cmd_used = 0; +u32 max_vag_cmd_cnt = 0; +ISO_VAGCommand vag_cmds[16]; + +static constexpr s32 LOOP_END = 1; +static constexpr s32 LOOP_REPEAT = 2; +static constexpr s32 LOOP_START = 4; + +// Empty ADPCM block with loop flags + +// clang-format off +u8 VAG_SilentLoop[0x60] = { + 0x0, LOOP_START | LOOP_REPEAT, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, LOOP_REPEAT, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, LOOP_END | LOOP_REPEAT, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +}; +// clang-format on + +void jakx_overlord_init_globals_iso_queue() { + g_nPriQueueSema = 0; + g_VagCmdSema = 0; + for (auto& x : gPriStack) { + x = {}; + } + g_cmds_with_speed_total = 0; + unk_time_mode_flag = false; + g_selected_cmd = nullptr; + unk_time_mflag = 0; + unk_sector = 0; + vag_cmd_cnt = 0; + vag_cmd_used = 0; + for (auto& x : vag_cmds) { + x = {}; + } +} + +/*! + * Added function to check if there is a pending DGO load command. + * On PC, DOG loads are really the only loading time that users see. If there is a pending + * DGO load, we can modify logic to take advantage of PCs being dramatically faster than PS2 and + * get much better load times. + */ +bool DgoCmdWaiting() { + for (auto& level : gPriStack) { + for (int i = 0; i < level.count; i++) { + auto* cmd = level.cmds[i]; + + if (cmd && cmd->msg_type == ISO_Hdr::MsgType::DGO_LOAD) { + if (cmd->m_pBaseFile) { + auto* file = cmd->m_pBaseFile; + if (file->m_Buffer.m_nDataLength) { + return true; + } + } + } + } + } + return false; +} + +void InitBuffers() { + SemaParam sema_param; + sema_param.max_count = 1; + sema_param.init_count = 1; + sema_param.attr = 0; + sema_param.option = 0; + + g_nPriQueueSema = CreateSema(&sema_param); + ASSERT(g_nPriQueueSema >= 0); + get_page_manager()->Initialize(); + + g_auStrmSRAM[0] = 0x5040; + g_auTrapSRAM[0] = 0x9040; + snd_SRAMMarkUsed(0x5040, 0x4040); + g_auStrmSRAM[1] = 0x9080; + g_auTrapSRAM[1] = 0xd080; + snd_SRAMMarkUsed(0x9080, 0x4040); + g_auStrmSRAM[2] = 0xd0c0; + g_auTrapSRAM[2] = 0x110c0; + snd_SRAMMarkUsed(0xd0c0, 0x4040); + g_auStrmSRAM[3] = 0x11100; + g_auTrapSRAM[3] = 0x15100; + snd_SRAMMarkUsed(0x11100, 0x4040); + g_auStrmSRAM[4] = 0x15140; // 86384 - 48 + g_auTrapSRAM[4] = 0x19140; + snd_SRAMMarkUsed(0x15140, 0x4040); + g_auStrmSRAM[5] = 0x019180; + g_auTrapSRAM[5] = 0x001d180; + snd_SRAMMarkUsed(0x19180, 0x4040); + + for (int i = 0; i < 6; i++) { + if (!DMA_SendToSPUAndSync(VAG_SilentLoop, 0x30, g_auTrapSRAM[i], nullptr, nullptr)) { + DelayThread(1000); + ASSERT_NOT_REACHED(); + break; + } + } + + sema_param.max_count = 1; + sema_param.attr = 1; + sema_param.init_count = 1; + sema_param.option = 0; + g_VagCmdSema = CreateSema(&sema_param); + ASSERT(g_VagCmdSema >= 0); +} + +int QueueMessage(ISO_Hdr* msg, int pri) { + msg->status = EIsoStatus::OK_2; + msg->priority = pri; + WaitSema(g_nPriQueueSema); + int queue_idx = (pri == 5) ? 1 : 0; + bool ok = gPriStack[queue_idx].count != 8; + if (ok) { + gPriStack[queue_idx].cmds[gPriStack[queue_idx].count] = msg; + gPriStack[queue_idx].count++; + SignalSema(g_nPriQueueSema); + } else { + msg->status = EIsoStatus::FAILED_TO_QUEUE_4; + SignalSema(g_nPriQueueSema); + ReturnMessage(msg); + ASSERT_NOT_REACHED(); + } + return ok; +} + +int UnqueueMessage(ISO_Hdr* msg) { + WaitSema(g_nPriQueueSema); + int iVar5 = 0; + PriStackEntry* stack = gPriStack; + do { + int iVar4 = 0; + ISO_Hdr** cmd = stack->cmds; + if (0 < stack->count) { + do { + if (*cmd == msg) + break; + iVar4 = iVar4 + 1; + cmd++; + } while (iVar4 < stack->count); + } + iVar5 = iVar5 + 1; + if (iVar4 < stack->count) { + stack->count = stack->count + -1; + if (iVar4 < stack->count) { + ISO_Hdr** ppIVar3 = stack->cmds + iVar4; + do { + iVar4 = iVar4 + 1; + *ppIVar3 = ppIVar3[1]; + ppIVar3 = ppIVar3 + 1; + } while (iVar4 < stack->count); + } + return SignalSema(g_nPriQueueSema); + } + stack = stack + 1; + if (1 < iVar5) { + return SignalSema(g_nPriQueueSema); + } + } while (true); +} + +/*! + * Select which command to read for next + * This function considers things like seeking time, reading rates of streamed files, + * and buffer sizing. To be entirely honest, I don't understand it almost at all, and it's not + * clear that it works as expected. It seems to work good enough, and no commands get entirely + * starved of data while there are multiple streams. + */ +ISO_Hdr* GetMessage() { + // bool been_a_while; + // bool bVar2; + // int now; + // int iVar3; + // int iVar4; + // CISOCDFile *file; + // CISOCDFile *pCVar5; + // int iVar6; + // CPageList *plist; + // uint uVar7; + // int iVar8; + // int iVar9; + // PriStack *local_t2_216; + // PriStack *pri_level; + // CISOCDFile *tfile4; + // code *pcVar10; + // CISOCDFile *tfile2; + // CISOCDFile *tfile3; + // uint uVar11; + // ISO_VAGCommand *cmd; + // int idx_on_level; + // ISO_VAGCommand **ppIVar12; + // int iVar13; + // CBaseFile *tfile; + // int cmds_total; + // int iVar14; + // uint uVar15; + ISO_Hdr* cmds_array[16]; + u32 read_rates_array[16]; + int num_pages_array[16]; + int unstepped_pages_array[16]; + int remaining_pages_array[16]; + // uint its_been_a_while; + // int pages_total; + // int read_rate_total; + // int min_nospeed_pages_total; + // int max_pages_total; + // int min_speed_pages_total; + // ISO_VAGCommand *selected_cmd; + // int cmds_with_speed_total; + // uint cmd2_read_rate; + // int selected_cmd_rem_sectors; + // int pri_level_idx; + + // simple logic to select which command to use next. + + u32 now = GetSystemTimeLow(); + + bool been_a_while = false; + if (unk_time_mode_flag == 0) { + been_a_while = 0x384000 < (now - time_of_last_unknown_rate_drive_op); + } else { + unk_time_mode_flag = 0; + time_of_last_unknown_rate_drive_op = now; + } + + s32 cmds_total = 0; + get_page_manager()->GarbageCollect(); + s32 pages_total = 0; + s32 read_rate_total = 0; + s32 min_nospeed_pages_total = 0; + s32 max_pages_total = 0; + s32 min_speed_pages_total = 0; +LAB_000080e4: + s32 iVar9 = g_cmds_with_speed_total * 400 + 0x2ee; + s32 iVar13 = 0x7fffffff; + ISO_Hdr* selected_cmd = nullptr; + s32 cmds_with_speed_total = 0; + s32 cmd2_read_rate = 0; + s32 selected_cmd_rem_sectors = -1; + s32 pri_level_idx = 1; + PriStackEntry* pri_level = gPriStack + 1; + s32 iVar8 = iVar13; + + // loop over priority levels + do { + s32 idx_on_level = pri_level->count + -1; + + // if any exist on this level + if (-1 < idx_on_level) { + ISO_Hdr** ppIVar12 = pri_level->cmds + idx_on_level; + // iVar14 = cmds_total << 2; + // loop over commands on this level + do { + ISO_Hdr* cmd = *ppIVar12; + CBaseFile* file = nullptr; + // iVar4 = iVar14; + + // basic check if this command is even valid: + if (cmd && (file = cmd->m_pBaseFile, file) && cmd->status == EIsoStatus::OK_2 && + cmd->active_a != 0) { + u32 read_rate = file->m_ReadRate; + read_rate_total = read_rate_total + read_rate; // maybe this is an inverse rate... + + // build up arrays of info for each command + read_rates_array[cmds_total] = read_rate; + cmds_array[cmds_total] = cmd; + + if ((int)read_rate < 1) { + min_nospeed_pages_total = min_nospeed_pages_total + file->m_Buffer.m_nMinNumPages; + max_pages_total = max_pages_total + file->m_Buffer.m_nMaxNumPages; + } else { + min_speed_pages_total = min_speed_pages_total + file->m_Buffer.m_nMinNumPages; + cmds_with_speed_total = cmds_with_speed_total + 1; + } + + CPageList* plist = file->m_Buffer.m_pPageList; + + s32 npages = 0; + if (plist != (CPageList*)0x0) { + npages = plist->m_nNumPages; + } + pages_total = pages_total + npages; + num_pages_array[cmds_total] = npages; + + s32 n_untepped_pages = 0; + if (plist != (CPageList*)0x0) { + n_untepped_pages = plist->m_nNumUnsteppedPages; + } + unstepped_pages_array[cmds_total] = n_untepped_pages; + + s32 n_remaining_pages = 4; + if (cmd->callback != RunDGOStateMachine) { + n_remaining_pages = n_untepped_pages + file->m_LengthPages - file->m_PageOffset; + // lg::warn("remaining pages is {} = {} + {} - {}", n_remaining_pages, n_untepped_pages, + // file->m_LengthPages, file->m_PageOffset); + } + remaining_pages_array[cmds_total] = n_remaining_pages; + + if (remaining_pages_array[cmds_total] < 1) { + remaining_pages_array[cmds_total] = 1; + } + + // careful, this increments in a weird spot. + // I use cmds_total - 1 below... + int old_cmds_total = cmds_total; + cmds_total = cmds_total + 1; + + // iVar4 = iVar14 + 4; + + // next, we'll determine a desired page cutoff and discard commands where + // we have enough pages. + if (read_rate && plist) { + // 3/4 * mNumPages, this is if our allocated buffer is 75% full. + s32 desired_pages = (int)(file->m_nNumPages * 0x30) >> 6; + + // but, we want at least min pages + if (desired_pages < file->m_Buffer.m_nMinNumPages) { + desired_pages = file->m_Buffer.m_nMinNumPages; + } + + // and we want at least 2 + if (desired_pages < 2) { + desired_pages = 2; + } + + // but, we never want more pages than we plan to eventually read. + if (remaining_pages_array[old_cmds_total] < desired_pages) { + desired_pages = remaining_pages_array[old_cmds_total]; + } + + // if we have that many, we can just forget the command - no point in filling it now. + if (desired_pages <= unstepped_pages_array[old_cmds_total]) + goto LAB_00008420; + } + + s32 iVar14 = iVar9; + if ((0 < (int)read_rate) && + (iVar14 = (int)(file->m_Buffer.m_nDataLength * 1000) / (int)read_rate, + read_rate == 0)) { + ASSERT_NOT_REACHED(); + } + + s32 pri = cmd->priority; + + // really not sure what this is... + if (been_a_while) { + if ((read_rate == 0) || (iVar14 < 0x2ee)) { + been_a_while = false; + goto LAB_000080e4; + } + + // if this isn't the command we said last time. + if (g_selected_cmd != cmd) { + s32 current_sector = file->GetSector(); + current_sector = current_sector - unk_sector; + bool sector_ok = false; + if (current_sector < 0) { + current_sector = -current_sector; + if (unk_time_mflag != 0) { + LAB_000083ac: + current_sector = current_sector + 10000000; + } + sector_ok = current_sector < iVar13; + } else { + sector_ok = current_sector < iVar13; + if ((0 < current_sector) && (unk_time_mflag == 0)) + goto LAB_000083ac; + } + if (sector_ok) { + iVar13 = current_sector; + iVar8 = iVar14; + selected_cmd = cmd; + cmd2_read_rate = read_rate; + } + } + } else { + // normal selection logic??? + if ((((iVar14 == iVar8) && (selected_cmd_rem_sectors < pri)) || (iVar14 < iVar8)) && + (iVar14 <= iVar9)) { + iVar8 = iVar14; + selected_cmd = cmd; + cmd2_read_rate = read_rate; + selected_cmd_rem_sectors = pri; + } + } + } + LAB_00008420: + idx_on_level = idx_on_level + -1; + /* WARNING: ptrarith problems */ + ppIVar12 = ppIVar12 + -1; + // iVar14 = iVar4; + } while (-1 < idx_on_level); + } + pri_level--; + pri_level_idx = pri_level_idx + -1; + } while (-1 < pri_level_idx); + + if (selected_cmd) { + if (cmd2_read_rate == 0) { + unk_time_mode_flag = 1; + time_of_last_unknown_rate_drive_op = now; + } + iVar13 = unk_sector; + if (selected_cmd->m_pBaseFile) { + iVar13 = selected_cmd->m_pBaseFile->GetSector(); + } + if (unk_sector < iVar13) { + unk_time_mflag = 1; + unk_sector = iVar13; + } else { + been_a_while = iVar13 != unk_sector; + unk_sector = iVar13; + if (been_a_while) { + unk_time_mflag = 0; + unk_sector = iVar13; + } + } + } + min_speed_pages_total = min_speed_pages_total + min_nospeed_pages_total; + g_cmds_with_speed_total = cmds_with_speed_total; + g_selected_cmd = selected_cmd; + pages_total = get_page_manager()->m_CCache.m_nNumFreePages + pages_total; + if ((0 < min_speed_pages_total) && (0 < pages_total)) { + if (min_speed_pages_total == 0) { + // trap(0x1c00); + ASSERT_NOT_REACHED(); + } + min_speed_pages_total = (min_nospeed_pages_total * pages_total) / min_speed_pages_total; + if (min_speed_pages_total < min_nospeed_pages_total) { + min_speed_pages_total = min_nospeed_pages_total; + } + if (max_pages_total < min_speed_pages_total) { + min_speed_pages_total = max_pages_total; + } + pages_total = pages_total - min_speed_pages_total; + iVar9 = 0; + iVar13 = min_speed_pages_total; + iVar8 = pages_total; + if (0 < cmds_total) { + // iVar14 = 0; + iVar13 = min_speed_pages_total; + iVar8 = pages_total; + do { + CBaseFile* tfile = cmds_array[iVar9]->m_pBaseFile; + if (read_rates_array[iVar9] < 1) { + s32 uVar11 = (tfile->m_Buffer).m_nMaxNumPages; + if (max_pages_total == 0) { + ASSERT_NOT_REACHED(); + } + s32 uVar15 = (tfile->m_Buffer).m_nMinNumPages; + s32 uVar7 = (int)(uVar11 * min_speed_pages_total) / max_pages_total; + if ((int)uVar7 < (int)uVar15) { + uVar7 = uVar15; + } + + tfile->m_nNumPages = uVar7; + if ((int)uVar11 < (int)uVar7) { + uVar7 = uVar11; + } + tfile->m_nNumPages = uVar7; + if (remaining_pages_array[iVar9] < (int)uVar7) { + uVar7 = remaining_pages_array[iVar9]; + } + tfile->m_nNumPages = uVar7; + // lg::warn("num pages mod {}", uVar7); + iVar13 = iVar13 - uVar7; + } else { + s32 uVar11 = (tfile->m_Buffer).m_nMinNumPages; + s32 uVar7 = (tfile->m_Buffer).m_nMaxNumPages; + // lg::warn("taking else case: {} {} {}", uVar11, uVar7, tfile->m_nNumPages); + + s32 uVar15 = -1; + if (read_rate_total == 0) { + LAB_000085e4: + // lg::warn("going to min! (rrt is {})", read_rate_total); + uVar15 = uVar11; + } else { + if (read_rate_total == 0) { + ASSERT_NOT_REACHED(); + } + uVar15 = (read_rates_array[iVar9] * pages_total) / read_rate_total; + // lg::warn("read rate math is {}", uVar15); + if ((int)uVar15 < (int)uVar11) + goto LAB_000085e4; + } + + // lg::warn("vals {} {}", uVar7, uVar15); + if ((int)uVar7 < (int)uVar15) { + uVar15 = uVar7; + } + // lg::warn("vals 2 {} {}", remaining_pages_array[iVar9], uVar15); + if (remaining_pages_array[iVar9] < (int)uVar15) { + uVar15 = remaining_pages_array[iVar9]; + } + iVar8 = iVar8 - uVar15; + tfile->m_nNumPages = uVar15; + // lg::warn("num pages mod 2 {}", uVar15); + } + iVar9 = iVar9 + 1; + // iVar14 = iVar9 * 4; + } while (iVar9 < cmds_total); + } + while (0 < iVar13) { + iVar9 = 0; + s32 iVar14 = iVar13; + if (0 < cmds_total) { + s32 iVar4 = 0; + iVar14 = iVar13; + while (0 < iVar14) { + CBaseFile* tfile2 = cmds_array[iVar4 / 4]->m_pBaseFile; + iVar9 = iVar9 + 1; + s32 uVar11; + if (read_rates_array[iVar4 / 4] == 0 && + (uVar11 = tfile2->m_nNumPages, (int)uVar11 < remaining_pages_array[iVar4 / 4]) && + ((int)uVar11 < tfile2->m_Buffer.m_nMaxNumPages)) { + tfile2->m_nNumPages = uVar11 + 1; + iVar14 = iVar14 + -1; + } + if (cmds_total <= iVar9) + break; + iVar4 = iVar9 * 4; + } + } + been_a_while = iVar13 == iVar14; + iVar13 = iVar14; + if (been_a_while) { + iVar8 = iVar8 + iVar14; + iVar13 = 0; + } + } + while (0 < iVar8) { + iVar13 = 0; + iVar9 = iVar8; + if (0 < cmds_total) { + s32 iVar14 = 0; + iVar9 = iVar8; + while (0 < iVar9) { + CBaseFile* tfile4 = cmds_array[iVar14 / 4]->m_pBaseFile; + iVar13 = iVar13 + 1; + s32 uVar11; + if (((0 < read_rates_array[iVar14 / 4]) && + (uVar11 = tfile4->m_nNumPages, (int)uVar11 < remaining_pages_array[iVar14 / 4])) && + ((int)uVar11 < tfile4->m_Buffer.m_nMaxNumPages)) { + tfile4->m_nNumPages = uVar11 + 1; + iVar9 = iVar9 + -1; + } + if (cmds_total <= iVar13) + break; + iVar14 = iVar13 * 4; + } + } + been_a_while = iVar8 == iVar9; + iVar8 = iVar9; + if (been_a_while) { + iVar8 = 0; + } + } + iVar13 = 0; + if (0 < cmds_total) { + iVar8 = 0; + do { + CBaseFile* tfile3 = cmds_array[iVar8 / 4]->m_pBaseFile; + + iVar13 = iVar13 + 1; + s32 uVar11 = tfile3->m_nNumPages; + // lg::warn("mystery values: {} - {} = {} (from {})", num_pages_array[iVar8 / 4], + // uVar11, + // num_pages_array[iVar8 / 4] - uVar11, + // cmds_array[iVar8 / 4]->m_pBaseFile->m_FileDef->name.data); + if (((int)uVar11 < num_pages_array[iVar8 / 4]) && + (iVar8 = tfile3->RecoverPages(num_pages_array[iVar8 / 4] - uVar11), 0 < iVar8)) { + get_page_manager()->GarbageCollectPageList(tfile3->m_Buffer.m_pPageList); + } + iVar8 = iVar13 * 4; + } while (iVar13 < cmds_total); + } + } + return selected_cmd; +} + +int ProcessMessageData(ISO_Hdr* tgt_msg) { + EIsoStatus stat; + s32 ret = 1; +LAB_000088a4: + s32 num_remaining = gPriStack[0].count + -1; + if (num_remaining < 0) { + return ret; + } + auto* cmd_array = gPriStack[0].cmds + num_remaining; + ISO_Hdr* cmd = nullptr; + do { + EIsoStatus (*cb)(ISO_Hdr*) = nullptr; + cmd = *cmd_array; + if (cmd && cmd->active_a) { + stat = cmd->status; + if (stat == EIsoStatus::OK_2) { + auto* file = cmd->m_pBaseFile; + auto* buffer = &file->m_Buffer; + if (!file) { + buffer = nullptr; + } + if ((buffer && (buffer->m_eBufferType != CBuffer::BufferType::EBT_FREE)) && + (cb = cmd->callback, cb != ProcessVAGData)) { + stat = (cb)(cmd); + } + } + if (stat != EIsoStatus::OK_2) + break; + cmd->status = EIsoStatus::OK_2; + } + num_remaining = num_remaining + -1; + cmd_array = cmd_array + -1; + if (num_remaining < 0) { + return ret; + } + } while (true); + if (cmd == tgt_msg) { + ret = 0; + } + ReleaseMessage(cmd); + if (stat != EIsoStatus::IDLE_1) { + cmd->status = stat; + ReturnMessage(cmd); + } + goto LAB_000088a4; +} + +void ReturnMessage(ISO_Hdr* msg) { + if (msg->mbox_reply == 0) { + if (msg->thread_to_wake == 0) { + FreeVAGCommand((ISO_VAGCommand*)msg); + } else { + WakeupThread(msg->thread_to_wake); + } + } else { + SendMbx(msg->mbox_reply, msg); + } +} + +void ReleaseMessage(ISO_Hdr* msg) { + if (GetThreadId() == g_nISOThreadID) { + auto* file = msg->m_pBaseFile; + if (file && file->m_Status != EIsoStatus::NONE_0) { + file->Close(); + } + UnqueueMessage(msg); + } else { + if (msg->msg_type != ISO_Hdr::MsgType::ABADBABE) { + set_active_a(msg, 0); + set_active_c(msg, 0); + msg->msg_type = ISO_Hdr::MsgType::ABADBABE; + SendMbx(g_nISOMbx, msg); + } + } +} + +ISO_VAGCommand* GetVAGCommand() { + int iVar1; + u32 uVar2; + u32 uVar3; + + do { + while (vag_cmd_cnt == 0x1f) { + DelayThread(1000); + } + do { + iVar1 = WaitSema(g_VagCmdSema); + uVar2 = 0; + } while (iVar1 != 0); + do { + uVar3 = uVar2 + 1; + if (((vag_cmd_used >> (uVar2 & 0x1f) ^ 1U) & 1) != 0) { + vag_cmd_cnt = vag_cmd_cnt + 1; + vag_cmd_used = vag_cmd_used | 1 << (uVar2 & 0x1f); + if (max_vag_cmd_cnt < vag_cmd_cnt) { + max_vag_cmd_cnt = vag_cmd_cnt; + } + SignalSema(g_VagCmdSema); + return vag_cmds + uVar2; + } + uVar2 = uVar3; + } while ((int)uVar3 < 0x1f); + SignalSema(g_VagCmdSema); + } while (true); +} + +void FreeVAGCommand(ISO_VAGCommand* param_1) { + u32 uVar1; + int iVar2; + + uVar1 = param_1 - vag_cmds; + ASSERT(uVar1 < 16); + if ((uVar1 < 0x1f) && (((vag_cmd_used >> (uVar1 & 0x1f) ^ 1U) & 1) == 0)) { + do { + iVar2 = WaitSema(g_VagCmdSema); + } while (iVar2 != 0); + vag_cmd_cnt = vag_cmd_cnt - 1; + vag_cmd_used = vag_cmd_used & ~(1 << (uVar1 & 0x1f)); + SignalSema(g_VagCmdSema); + } +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/iso_queue.h b/game/overlord/jakx/iso_queue.h new file mode 100644 index 0000000000..90199e9339 --- /dev/null +++ b/game/overlord/jakx/iso_queue.h @@ -0,0 +1,30 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_iso_queue(); +struct ISO_Hdr; +struct ISO_VAGCommand; +void ReleaseMessage(ISO_Hdr* msg); +void FreeVagCmd(ISO_VAGCommand* msg); +int QueueMessage(ISO_Hdr* msg, int pri); +int UnqueueMessage(ISO_Hdr* msg); +void ReturnMessage(ISO_Hdr* msg); +void InitBuffers(); +bool DgoCmdWaiting(); +ISO_Hdr* GetMessage(); +int ProcessMessageData(ISO_Hdr* msg); +void FreeVAGCommand(ISO_VAGCommand* msg); +ISO_VAGCommand* GetVAGCommand(); + +struct PriStackEntry { + ISO_Hdr* cmds[8]; + int count = 0; +}; + +extern u32 g_auTrapSRAM[6]; +extern u32 g_auStrmSRAM[6]; +extern s32 g_nPriQueueSema; +extern PriStackEntry gPriStack[2]; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/isocommon.cpp b/game/overlord/jakx/isocommon.cpp new file mode 100644 index 0000000000..9d77a15fea --- /dev/null +++ b/game/overlord/jakx/isocommon.cpp @@ -0,0 +1,118 @@ +#include "isocommon.h" + +#include "common/util/Assert.h" + +namespace jakx { +void jakx_overlord_init_globals_isocommon() {} + +/*! + * Convert file name to "ISO Name" + * ISO names are upper case and 12 bytes long. + * xxxxxxxxyyy0 + * + * x - uppercase letter of file name, or space + * y - uppercase letter of file extension, or space + * 0 - null terminator (\0, not the character zero) + */ +void MakeISOName(ISOName* dst, const char* src) { + int i = 0; + const char* src_ptr = src; + char* dst_ptr = dst->data; + + // copy name and upper case + while ((i < 8) && (*src_ptr) && (*src_ptr != '.')) { + char c = *src_ptr; + src_ptr++; + if (('`' < c) && (c < '{')) { // lower case + c -= 0x20; + } + *dst_ptr = c; + dst_ptr++; + i++; + } + + // pad out name with spaces + while (i < 8) { + *dst_ptr = ' '; + dst_ptr++; + i++; + } + + // increment past period + if (*src_ptr == '.') + src_ptr++; + + // same for extension + while (i < 11 && (*src_ptr)) { + char c = *src_ptr; + src_ptr++; + if (('`' < c) && (c < '{')) { // lower case + c -= 0x20; + } + *dst_ptr = c; + dst_ptr++; + i++; + } + + while (i < 11) { + *dst_ptr = ' '; + dst_ptr++; + i++; + } + *dst_ptr = 0; +} + +// UnmakeISOName + +/*! + * Pack an 8-character (64-bits) file name into a packed vag file name (32 + 10 = 42 bit). + */ +int PackVAGFileName(u32* out, const char* name) { + if (!out || !name) { + return 0; + } + int ret = 1; + + // accumulator of up to 4 packed characters + u32 acc = 0; + u32 first_four = 0; + for (int i = 0; i < 8; i++) { + // start the second word: + if (i == 4) { + first_four = acc; + acc = 0; + } + + // read character from input + u32 name_char = *((const u8*)name); + name++; + + u32 remapped_char; + + if (name_char - 'A' < 26) { // capital letter + remapped_char = name_char - 'A' + 1; // so A becomes 1. + } else if (name_char - 'a' < 26) { // lowercase letter + remapped_char = name_char - 'a' + 1; // so a becomes 1. + } else if (name_char - '0' < 10) { // digit + remapped_char = name_char - '0' + 27; // so 0 becomes 27 + } else if (name_char == '-') { + remapped_char = 37; + } else if (name_char == ' ' || name_char == '\0') { + remapped_char = 0; + } else { + ASSERT_NOT_REACHED(); // invalid char in input. + } + + ASSERT((remapped_char & 0xff) == remapped_char); + acc = acc * 38 + remapped_char; // (null + alphabet + 10 + dash) + } + + out[0] = (first_four << 0x15) | acc; + out[1] = first_four >> 0xb; + + return ret; +} + +// UnpackVAGFileName - nobody uses it... + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/isocommon.h b/game/overlord/jakx/isocommon.h new file mode 100644 index 0000000000..472b90235b --- /dev/null +++ b/game/overlord/jakx/isocommon.h @@ -0,0 +1,153 @@ +#pragma once + +#include + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_isocommon(); + +struct CBaseFile; + +struct ISOFileDef; + +enum class EIsoStatus { + NONE_0 = 0, + IDLE_1 = 0x1, + OK_2 = 0x2, // already reading, or no need to read, or no mem to read. + FAILED_TO_QUEUE_4 = 0x4, + ERROR_OPENING_FILE_8 = 0x8, + NULL_CALLBACK = 9, + ERROR_NO_FILE = 0xa, + ERROR_b = 0xb, // tried to do BeginRead on a file that's not allocated. + ERROR_NO_SOUND = 0xc, +}; + +struct SoundBankInfo; + +struct ISO_Hdr { + int unka; + int unkb; + EIsoStatus status; + int8_t active_a; + int8_t active_b; + int8_t active_c; + int8_t pad; + + enum class MsgType : u32 { + MSG_0 = 0, + LOAD_EE = 0x100, + LOAD_IOP = 0x101, + LOAD_EE_CHUNK = 0x102, + LOAD_SOUNDBANK = 0x103, + DGO_LOAD = 0x200, + VAG_QUEUE = 0x400, + VAG_STOP = 0x402, + VAG_PAUSE = 0x403, + VAG_UNPAUSE = 0x404, + VAG_SET_PITCH_VOL = 0x406, + PLAY_MUSIC_STREAM = 0x408, + ABADBABE = 0xabadbabe, + ADEADBEE = 0xadeadbee, + } msg_type = MsgType::MSG_0; + + int mbox_reply; + int thread_to_wake; + + EIsoStatus (*callback)(ISO_Hdr*) = nullptr; + CBaseFile* m_pBaseFile = nullptr; + int priority = 0; + const ISOFileDef* file_def = nullptr; +}; + +struct ISO_LoadCommon : public ISO_Hdr { + u8* addr = 0; // 44 + int maxlen = 0; + int length_to_copy = 0; // 52 + u8* dest_ptr = 0; // 68 (not truly common??) what are they doing here. + int progress_bytes = 0; // 72 +}; + +struct ISO_LoadSingle : public ISO_LoadCommon { + // addr + // maxlen + // maybe size + int sector_offset = 0; // 56 + // 60 + // 64 + // dest_ptr + // maybe ofset +}; + +struct ISO_LoadSoundbank : public ISO_LoadCommon { + const char* name = nullptr; // 60 + int priority; // 64 + SoundBankInfo* bank_info = nullptr; +}; + +struct CPage; + +struct BlockParams { + void* destination; + int num_sectors; + int sector_num; + // ADDED + const ISOFileDef* file_def; + CPage* page; + char* flag; +}; + +struct CDescriptor; + +struct Block { + BlockParams params; + CDescriptor* descriptor; + Block* next; +}; + +struct ISOName { + char data[12]; + + bool operator==(const ISOName& other) { + for (int i = 0; i < 12; i++) { + if (data[i] != other.data[i]) { + return false; + } + } + return true; + } +}; + +struct ISOFileDef { + ISOName name; + std::string full_path; // pc + // removed because PC doesn't assume constant file sizes. + // u32 length; +}; + +struct VagDirEntry { + u32 words[2]; +}; + +struct VagDir { + int vag_magic_1 = 0; + int vag_magic_2 = 0; + int vag_version = 0; + int num_entries = 0; + VagDirEntry entries[4096]; +}; +static_assert(sizeof(VagDir) == 0x8010); + +constexpr int MUSIC_TWEAK_COUNT = 0x40; +struct MusicTweaks { + u32 TweakCount = 0; + struct { + char MusicName[12] = "\0"; + s32 VolumeAdjust = 0; + } MusicTweak[MUSIC_TWEAK_COUNT]; +}; + +int PackVAGFileName(u32* out, const char* name); +void MakeISOName(ISOName* dst, const char* src); + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/list.cpp b/game/overlord/jakx/list.cpp new file mode 100644 index 0000000000..4724f7a826 --- /dev/null +++ b/game/overlord/jakx/list.cpp @@ -0,0 +1,54 @@ +#include "list.h" + +#include "common/util/Assert.h" + +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" + +namespace jakx { +using namespace iop; +void jakx_overlord_init_globals_list() {} + +void InitList(List* list, int count, int element_size) { + VagStreamData* iter; + int iVar1; + SemaParam sema_params; + + list->count = count; + iter = (VagStreamData*)AllocSysMemory(0, count * element_size, 0); + ASSERT(iter); + ASSERT(element_size == sizeof(VagStreamData)); + list->buffer = (u8*)iter; + if (iter != (VagStreamData*)0x0) { + list->next = iter; + iVar1 = 0; + if (0 < count) { + do { + iter->in_use = 0; + if (iVar1 < count + -1) { + iter->next = (VagStreamData*)((u8*)iter + element_size); + } else { + iter->next = nullptr; + } + if (iVar1 == 0) { + iter->prev = nullptr; + } else { + iter->prev = (VagStreamData*)((u8*)iter - element_size); + } + iVar1 = iVar1 + 1; + iter = (VagStreamData*)((u8*)iter + element_size); + } while (iVar1 < count); + } + list->unk_flag = 0; + list->pending_data = 0; + sema_params.max_count = 1; + sema_params.attr = 1; + sema_params.init_count = 1; + sema_params.option = 0; + iVar1 = CreateSema(&sema_params); + list->sema = iVar1; + ASSERT(list->sema >= 0); + } +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/list.h b/game/overlord/jakx/list.h new file mode 100644 index 0000000000..630381d4f2 --- /dev/null +++ b/game/overlord/jakx/list.h @@ -0,0 +1,27 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_list(); + +struct VagStreamData; + +/*! + * The List system is a linked list used to track requested and playing streams. + * Originally, it supported multiple element types. + * One of those types is related to plugin streams which are not supported in PC. + * So, this is just hard-coded to use VagStreamData as the element type. + */ +struct List { + char name[8]; + int sema = 0; + int unk_flag = 0; // set when there's a free node?? + int count = 0; + int pending_data = 0; + VagStreamData* next = nullptr; + u8* buffer; +}; + +void InitList(List* list, int num_elements, int element_size); +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/overlord.cpp b/game/overlord/jakx/overlord.cpp new file mode 100644 index 0000000000..f08f3b921f --- /dev/null +++ b/game/overlord/jakx/overlord.cpp @@ -0,0 +1,151 @@ +#include "overlord.h" + +#include "common/log/log.h" + +#include "game/overlord/jakx/dvd_driver.h" +#include "game/overlord/jakx/init.h" +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/ramdisk.h" +#include "game/overlord/jakx/sbank.h" +#include "game/overlord/jakx/srpc.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/vblank_handler.h" +#include "game/sce/iop.h" + +namespace jakx { +using namespace iop; + +int g_nServerThreadID = 0; +int g_nPlayerThreadID = 0; +int g_nLoaderThreadID = 0; + +void jakx_overlord_init_globals_overlord() { + g_nServerThreadID = 0; + g_nPlayerThreadID = 0; + g_nLoaderThreadID = 0; +} + +namespace { + +/*! + * Start up overlord threads. After this returns, the overlord is initialized and + * ready to run. (this might have been in start.cpp in the original, but this is close enough) + */ +int start_overlord() { + // Initialize SIF to communicate with the EE. Does nothing in port + if (!sceSifCheckInit()) { + sceSifInit(); + } + // Initialize RPC to EE + sceSifInitRpc(0); + + lg::info("======== overlrd2.irx startup ========"); + // Removed some prints related to IOP memory size + + // C++ ctors ran here. In the port, we've added these "init_globals" function that + // take care of resetting all the global/static variables and constructing C++ objects. + // do_global_ctors(); + jakx_overlord_init_globals_all(); + InitBanks(); + InitSound(); + VBlank_Initialize(); + + // RPC thread to load data from game files to the game memory. + ThreadParam thread_param; + thread_param.initPriority = 0x3b; + thread_param.stackSize = 0x800; + thread_param.entry = LoadToEE_RPC_Thread; + thread_param.attr = TH_C; + thread_param.option = 0; + strcpy(thread_param.name, "load_to_ee"); + g_nServerThreadID = CreateThread(&thread_param); + if (g_nServerThreadID <= 0) { + return 1; + } + + // thread to respond to sound play RPC's + thread_param.entry = Thread_Player; + thread_param.initPriority = 0x36; + thread_param.stackSize = 0xb00; + thread_param.attr = TH_C; + thread_param.option = 0; + strcpy(thread_param.name, "player"); + g_nPlayerThreadID = CreateThread(&thread_param); + if (g_nPlayerThreadID <= 0) { + return 1; + } + + // thread to respond to sound load RPC's + thread_param.attr = TH_C; + thread_param.entry = Thread_Loader; + thread_param.initPriority = 0x3a; + thread_param.stackSize = 0x900; + thread_param.option = 0; + strcpy(thread_param.name, "loader"); + g_nLoaderThreadID = CreateThread(&thread_param); + if (g_nLoaderThreadID <= 0) { + return 1; + } + + // Initialize the dvd driver that will be used to implement the "ISO FS" system + get_driver()->Initialize(); + + // then, initialize ISO FS itself + InitISOFS(); + + // start up RPC threads! + StartThread(g_nServerThreadID, 0); + StartThread(g_nPlayerThreadID, 0); + StartThread(g_nLoaderThreadID, 0); + + lg::info("[overlord2] Threads started"); + return 0; +} + +bool* init_complete; + +/*! + * Wrapper of start_overlord that can be run as an IOP thread. Sets init_complete flag to true. + * This is a bit of hack to transition from the normal and sane game code to the world of IOP + * threading. + */ +u32 call_start() { + start_overlord(); + *init_complete = true; + + // TODO: figure out how to quit this thread. + while (true) { + SleepThread(); + } + return 0; +} +} // namespace + +int start_overlord_wrapper(bool* signal) { + ThreadParam param = {}; + init_complete = signal; + param.attr = TH_C; + param.initPriority = 0; + param.stackSize = 0x800; + param.option = 0; + strcpy(param.name, "start"); // added for debug + param.entry = call_start; + auto start_thread = CreateThread(¶m); + StartThread(start_thread, 0); + + return 0; +} + +/*! + * Copy null-terminated string to destination buffer with the given size. + * If the string doesn't fit, it will be truncated and null terminated. + */ +char* strncpyz(char* dst, const char* src, size_t n) { + if (n) { + strncpy(dst, src, n); + dst[n - 1] = 0; + } + return dst; +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/overlord.h b/game/overlord/jakx/overlord.h new file mode 100644 index 0000000000..8b6cb1531d --- /dev/null +++ b/game/overlord/jakx/overlord.h @@ -0,0 +1,61 @@ +#pragma once + +#include + +#include "common/common_types.h" +#include "common/log/log.h" + +namespace jakx { + +/*! + * External entry point for the game to start Overlord. This assumes that the IOP Kernel + * is at least initialized, then sets up all overlord threads/RPCs. Once this returns, + * it's safe to call overlord functions. + */ +int start_overlord_wrapper(bool* signal); +void jakx_overlord_init_globals_overlord(); +char* strncpyz(char* dst, const char* src, size_t n); + +extern int g_nServerThreadID; +extern int g_nPlayerThreadID; +extern int g_nLoaderThreadID; + +enum class LogCategory { + PAGING, + FILESYSTEM, + WARN, + SPU_DMA_STR, + EE_DMA, + ISO_QUEUE, + VAG_SETUP, + DGO, + RPC, + STR_RPC, + PLAYER_RPC, + DRIVER, + NUM_CATETORIES +}; + +constexpr bool g_OverlordLogEnable[(int)LogCategory::NUM_CATETORIES] = { + false, // paging: cpage's, page manager, page crossing, etc + true, // filesystem: opening/finding files + true, // warning: something weird + false, // spu dma streaming: vag streaming, clocks, spu, dma + true, // ee dma: sending stuff to the ee (dgo, etc) + true, // iso queue: message queuing + true, // vag setup: creation of vag commands (lists, etc) + false, // dgo + true, // rpc in general + true, // str rpc + false, // PLAYER + false, // driver +}; + +template +void ovrld_log(LogCategory category, const std::string& format, Args&&... args) { + if (g_OverlordLogEnable[(int)category]) { + lg::info(format, std::forward(args)...); + } +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/pagemanager.cpp b/game/overlord/jakx/pagemanager.cpp new file mode 100644 index 0000000000..f832661716 --- /dev/null +++ b/game/overlord/jakx/pagemanager.cpp @@ -0,0 +1,853 @@ +#include "pagemanager.h" + +#include +#include +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/overlord.h" +#include "game/sce/iop.h" + +using namespace iop; + +namespace jakx { +namespace { +std::unique_ptr g_manager; +} +void jakx_overlord_init_globals_pagemanager() { + g_manager = std::make_unique(); +} + +CPageManager* get_page_manager() { + return g_manager.get(); +} + +/*! + * Add the given number of pages to the active list, returning the first in the active list. + * This should be called before writing to the pages. + * This grows the active list from the end and adds a reference count. + */ +CPage* CPageList::AddActivePages(int num_pages) { + ASSERT(m_nAllocState == AllocState::EPLAS_ALLOCATED); + ASSERT(num_pages > 0); // game warned on this, might be ok to just return null + + if (m_nNumPages < num_pages + m_nNumActivePages) { + // the original game just gave you no pages, but that seems sus, so abort for now. + ASSERT_NOT_REACHED(); + } + + // pick the page to convert from non-active to active + CPage* first_to_convert; + if (m_pLastActivePage) { + // if we have active pages, go to the page after that + first_to_convert = m_pLastActivePage->m_pNextPage; + } else { + // otherwise, start at the beginning of the page list. + first_to_convert = m_pFirstPage; + } + + if (first_to_convert) { + // the first active page should stay the same if we have one + CPage* new_first_active = m_pFirstActivePage; + if (!new_first_active) { + // but if we don't, it'll be the first we convert. + new_first_active = first_to_convert; + } + + int page_idx = 0; // how many we've done + CPage* last_converted = nullptr; // last one that was finished + CPage* to_convert = first_to_convert; // next one to convert + if (0 < num_pages) { + // loop over pages and convert them!! + do { + ASSERT(to_convert->input_state == CPage::State::UNMAKRED); + last_converted = to_convert; + last_converted->input_state = CPage::State::ACTIVE; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~last_converted->mask); + int status = last_converted->AddRef(); + ASSERT(status >= 1); + page_idx = page_idx + 1; + if (!last_converted->m_pNextPage) + break; + to_convert = last_converted->m_pNextPage; + } while (page_idx < num_pages); + } + if (page_idx == num_pages) { + // success! all converted. + // CpuSuspendIntr(local_28); + // update the active range and count + m_pFirstActivePage = new_first_active; + m_pLastActivePage = last_converted; + m_nNumActivePages = m_nNumActivePages + page_idx; + m_nNumUnsteppedPages = m_nNumUnsteppedPages + page_idx; + if (!m_pCurrentActivePage) { + m_pCurrentActivePage = first_to_convert; + } + // CpuResumeIntr(local_28[0]); + return first_to_convert; + } else { + // darn, didn't have enough. undo what we did. + // Not really sure that we need to clear the even flag again. + while (0 < page_idx) { + new_first_active->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, + ~new_first_active->mask); + new_first_active->ReleaseRef(); + } + return nullptr; + } + } + return nullptr; +} + +/*! + * Try to remove count pages from the active list, starting at the end and working back. + * This will remove buffered that the user has not yet read. The data will have to be read from the + * DVD again, so this should only be used when more free pages are absolutely needed. + * + * This may remove fewer than requested. It will not remove the current active page, and always + * leaves at least 1 active page to avoid removing a page that's currently being used. + */ +int CPageList::RemoveActivePages(int count) { + // lg::error("Remove Active Pages {}", count); + int num_removed = 0; + ASSERT(m_nAllocState == AllocState::EPLAS_ALLOCATED); + + // CpuSuspendIntr(local_28); + num_removed = 0; + + // only attempt if we have more than 1 active + if (count > 0 && m_nNumActivePages > 1) { + CPage* last_active = m_pLastActivePage; + CPage* current_active = m_pCurrentActivePage; + + // I'm not sure what the last->next = current check is actually doing. + // this check is added - I have no idea how this could happen, or why the game avoids removing + // pages in this case. Hopefully we don't hit it. + if (last_active) { + ASSERT(last_active->m_pNextPage != current_active); + } + + if (current_active && last_active && last_active->m_pNextPage != current_active) { + // assume we remove them all except 1. + num_removed = m_nNumActivePages + -1; + // but if that's more than we asked for, reduce. + if (count < num_removed) { + num_removed = count; + } + + // iterate backward to find the first to remove, stopping if we reach current_active, or we + // exceed the count to remove. + int num_pages_back = 0; + CPage* iter = last_active; + if (last_active != current_active && 0 < num_removed) { + do { + iter = iter->m_pPrevPage; + num_pages_back = num_pages_back + 1; + if (!iter) { + ASSERT_NOT_REACHED(); + } + } while (iter != current_active && num_pages_back < num_removed); + + if (0 < num_pages_back) { + // now, iterate forward and convert to inactive. + // go one forward, since the last loop terminated on the page after the last one we want. + CPage* fwd_iter = iter->m_pNextPage; + + // the last one that stays active is one after that + m_pLastActivePage = fwd_iter->m_pPrevPage; + m_nNumActivePages = m_nNumActivePages - num_pages_back; + m_nNumUnsteppedPages = m_nNumUnsteppedPages - num_pages_back; + + // the end of the conversion loop + CPage* end_iter = last_active->m_pNextPage; + num_removed = num_pages_back; + while (fwd_iter && fwd_iter != end_iter) { + fwd_iter->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~fwd_iter->mask); + fwd_iter->ReleaseRef(); + fwd_iter = fwd_iter->m_pNextPage; + } + } else { + // in this case, I think we return the wrong number of removed pages. + ASSERT_NOT_REACHED(); + } + } + } + } + // CpuResumeIntr(local_28[0]); + return num_removed; +} + +/*! + * Remove all active pages. + */ +void CPageList::CancelActivePages() { + ASSERT(m_nAllocState == AllocState::EPLAS_ALLOCATED); + // CpuSuspendIntr(local_18); + CPage* last_active = m_pLastActivePage; + CPage* iter = m_pCurrentActivePage; + // note: keep the last active page pointing at the right point in the ring to allocate. + m_pLastActivePage = m_pCurrentActivePage; + m_pFirstActivePage = nullptr; + m_pCurrentActivePage = nullptr; + m_nNumActivePages = 0; + m_nNumUnsteppedPages = 0; + if (iter && last_active && last_active->m_pNextPage != iter) { + CPage* end = last_active->m_pNextPage; + do { + if (iter == end) + break; + iter->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~iter->mask); + iter->ReleaseRef(); + iter = iter->m_pNextPage; + } while (iter); + } + // CpuResumeIntr(local_18[0]); +} + +/*! + * Step the current active page forward. This will release the reference count added when the page + * became active. If no other references were added, this page may be Garbage Collected at any time. + */ +CPage* CPageList::StepActivePage() { + ASSERT(m_nAllocState == AllocState::EPLAS_ALLOCATED); + + CPage* new_current_active = nullptr; + // CpuSuspendIntr(local_18); + auto* current_active = m_pCurrentActivePage; + if (current_active && m_pLastActivePage && m_pLastActivePage->m_pNextPage != current_active) { + ASSERT(m_nNumActivePages > 0); + m_nNumUnsteppedPages = m_nNumUnsteppedPages + -1; + current_active->ReleaseRef(); + current_active->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~current_active->mask); + new_current_active = current_active->m_pNextPage; + ASSERT(new_current_active != m_pCurrentActivePage); + m_pCurrentActivePage = new_current_active; + } else { + ASSERT_NOT_REACHED(); // step past end of active warning, seems bad. + } + // CpuResumeIntr(local_18[0]); + return new_current_active; +} + +/*! + * Remove pages that are no longer needed. They will be sent back to the Page Manager. + */ +void CPageList::GarbageCollect() { + ovrld_log(LogCategory::PAGING, "[paging] Garbage collecting, currently have {} pages, {} active", + m_nNumPages, m_nNumActivePages); + + // for (auto* p = m_pFirstPage; p; p = p->m_pNextPage) { + // ovrld_log(LogCategory::PAGING, + // "page 0x{:x}, first active? {} last active? {} current active? {} last? {}", + // p->m_nPageIdx, p == m_pFirstActivePage, p == m_pLastActivePage, + // p == m_pCurrentActivePage, p == m_pLastPage); + // } + // trim pages at the front. Anything unreferenced before the current active page is ok to clean. + CPage* page = m_pFirstPage; + if (page && page != m_pCurrentActivePage) { + ASSERT(page->m_nAllocState == 1); // pages in CPageLists should always be allocated. + + while (page->m_nPageRefCount == 0 && page->m_nDmaRefCount == 0) { // only unref'd pages. + ASSERT(page->m_nAllocState == 1); // prior to active. + CPage* next_page = page->m_pNextPage; + // CpuSuspendIntr(&local_18); + m_nNumPages = m_nNumPages + -1; + // pop page from our normal list + m_pFirstPage = next_page; + if (m_pLastPage == page) { + m_pLastPage = nullptr; + // sanity check - we just killed our last page from the list, count should be 0 + ASSERT(m_nNumPages == 0); + } + + // maintain active list too + if (m_pFirstActivePage == page) { + m_nNumActivePages = m_nNumActivePages + -1; + if (page == m_pLastActivePage) { + // since we're getting rid of this page from our list, don't keep a ref to it. + m_pFirstActivePage = nullptr; + m_pLastActivePage = nullptr; + ASSERT(m_nNumActivePages == 0); // sanity check count. + } else { + m_pFirstActivePage = next_page; + } + } + if (m_pLastActivePage == page) { + m_pLastActivePage = nullptr; + } + if (next_page) { + next_page->m_pPrevPage = nullptr; + } + // CpuResumeIntr(local_18); + + // now clean the page itself + ovrld_log(LogCategory::PAGING, "[paging] GC took page 0x{:x} (fwd)", page->m_nPageIdx); + page->m_pPageList = nullptr; + page->m_pPrevPage = nullptr; + page->m_pNextPage = nullptr; + page->m_nAllocState = 0; + page->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~page->mask); + int page_idx = page - get_page_manager()->m_CCache.m_Pages; + if (page_idx < 0x1d) { + get_page_manager()->m_CCache.m_nAllocatedMask &= ~(1 << (page_idx & 0x1f)); + } else { + ASSERT_NOT_REACHED(); // idk + } + get_page_manager()->m_CCache.m_nNumFreePages++; + if (!next_page) { + break; + } + page = next_page; + if (page == m_pCurrentActivePage) { + break; + } + } + } + + // now, start at the end and work backward. We'll stop once we reach the last active page, since + // we expect everything before that to have a nonzero ref count. + page = m_pLastPage; + if (page && page != m_pLastActivePage && page != m_pCurrentActivePage) { + ASSERT(page->m_nAllocState == 1); + while ((page->m_nPageRefCount == 0 && (page->m_nDmaRefCount == 0))) { + ovrld_log(LogCategory::PAGING, "[paging] GC took page 0x{:x} (bwd)", page->m_nPageIdx); + ASSERT(page->m_nAllocState == 1); + CPage* prev = page->m_pPrevPage; + // CpuSuspendIntr(&local_14); + m_nNumPages = m_nNumPages + -1; + m_pLastPage = prev; + if (m_pFirstPage == page) { + m_pFirstPage = nullptr; + ASSERT(m_nNumPages == 0); + } + if (prev != (CPage*)0x0) { + prev->m_pNextPage = (CPage*)0x0; + } + // CpuResumeIntr(local_14); + page->m_pPageList = nullptr; + page->m_pPrevPage = nullptr; + page->m_pNextPage = nullptr; + page->m_nAllocState = 0; + page->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~page->mask); + int page_idx = page - get_page_manager()->m_CCache.m_Pages; + if (page_idx < 0x1d) { + get_page_manager()->m_CCache.m_nAllocatedMask &= ~(1 << (page_idx & 0x1f)); + } else { + ASSERT_NOT_REACHED(); + } + get_page_manager()->m_CCache.m_nNumFreePages++; + + if (!prev) { + return; + } + if (prev == m_pLastActivePage) { + return; + } + page = prev; + if (prev == m_pCurrentActivePage) { + return; + } + } + } + + ovrld_log(LogCategory::PAGING, + "[paging] Done Garbage collecting, currently have {} pages, {} active in 0x{:x}", + m_nNumPages, m_nNumActivePages, (u64)this); +} + +/*! + * Wait on the pages indicated by the mask. + */ +void CPageManager::WaitForPagesFilled(u32 mask) { + if ((mask & m_CCache.m_PendingMask) != 0) { + WaitEventFlag(m_CCache.m_PagesFilledEventFlag, mask, 0); + } else { + // waiting for something that's not pending... might be ok. was a warning. + ASSERT_NOT_REACHED(); + } +} + +CPage::CPage(uint8_t* page_mem_start, uint8_t* page_mem_end, int page_idx) { + m_pNextPage = nullptr; + mask = 1 << (page_idx & 0x1f); + m_pPrevPage = nullptr; + m_pPageMemStart = page_mem_start; + m_pPageList = nullptr; + m_pPageMemEnd = page_mem_end; + m_nPageRefCount = 0; + m_nPageIdx = page_idx; + m_nDmaRefCount = 0; + m_nAllocState = 0; + input_state = State::UNMAKRED; +} + +/*! + * Add one to this CPage's reference count, preventing it from being garbage collected + */ +int CPage::AddRef() { + // CpuSuspendIntr(local_18); + auto* page_list = m_pPageList; + int ret = -1; + ASSERT(page_list); + ASSERT(m_nAllocState == 1); + if (m_nAllocState == 1 && page_list) { + page_list->m_nPageRefCnt = page_list->m_nPageRefCnt + 1; + m_nPageRefCount = m_nPageRefCount + 1; + ret = m_nPageRefCount; + } + // CpuResumeIntr(local_18[0]); + return ret; +} + +/*! + * Subtract one from this CPage's reference count. + */ +int CPage::ReleaseRef() { + // CpuSuspendIntr(local_18); + auto* page_list = m_pPageList; + int ret = -1; + ASSERT(page_list); + ASSERT(m_nAllocState == 1); + if (m_nAllocState == 1 && page_list) { + page_list->m_nPageRefCnt = page_list->m_nPageRefCnt - 1; + m_nPageRefCount = m_nPageRefCount - 1; + ret = m_nPageRefCount; + ASSERT(ret >= 0); + } + // CpuResumeIntr(local_18[0]); + return ret; +} + +/*! + * Add one to the DMA reference count of this page + */ +int CPage::AddDmaRef() { + // CpuSuspendIntr(local_18); + auto* page_list = m_pPageList; + int ret = -1; + ASSERT(page_list); + ASSERT(m_nAllocState == 1); + if (m_nAllocState == 1 && page_list) { + page_list->m_nDmaRefCnt = page_list->m_nDmaRefCnt + 1; + m_nDmaRefCount = m_nDmaRefCount + 1; + ret = m_nPageRefCount; + } + // CpuResumeIntr(local_18[0]); + return ret; +} + +int CPage::ReleaseDmaRef() { + // CpuSuspendIntr(local_18); + auto* page_list = m_pPageList; + int ret = -1; + ASSERT(page_list); + ASSERT(m_nAllocState == 1); + if (m_nAllocState == 1 && page_list) { + page_list->m_nDmaRefCnt = page_list->m_nDmaRefCnt - 1; + m_nDmaRefCount = m_nDmaRefCount - 1; + ret = m_nPageRefCount; + ASSERT(ret >= 0); + } + // CpuResumeIntr(local_18[0]); + return ret; +} + +/*! + * Copy data from this page to destination. This works with sizes that are greater than the page + * size, and will look at future pages. However, it does not actually advance progress in the page. + */ +void CPage::FromPagesCopy(uint8_t* in, uint8_t* dest, s32 size) { + ASSERT(in); + ASSERT(dest); + ASSERT(size >= 0); + CPage* page = this; + if (0 < size) { + while (true) { + s32 input_page_left = (page->m_pPageMemEnd - in) + 1; + ASSERT(input_page_left >= 0); + if (size < input_page_left) + break; + size -= input_page_left; + memcpy(dest, in, input_page_left); + dest += input_page_left; + if (size == 0) { + return; + } + ASSERT(size > 0); + ASSERT(page->m_pNextPage); + page = page->m_pNextPage; + in = page->m_pPageMemStart; + } + memcpy(dest, in, size); + } +} + +CCache::CCache() { + m_PendingMask = kAllPagesMask; + m_PagesFilledEventFlag = -1; + m_nNumFreePages = 0; + m_nAllocatedMask = 0; + m_nPagelistAllocatedMask = 0; +} + +void CCache::Initialize() { + static_assert(0xe81d0 == kPageStride * kNumPages); + m_paCache = AllocSysMemory(0, kPageStride * kNumPages, nullptr); + ASSERT(m_paCache); + m_nNumFreePages = kNumPages; + + // initialize pageslists + for (auto& page_list : m_PageLists) { + page_list.m_pFirstActivePage = nullptr; + page_list.m_pLastActivePage = nullptr; + page_list.m_pCurrentActivePage = nullptr; + + page_list.m_pFirstPage = nullptr; + page_list.m_pLastPage = nullptr; + page_list.m_nNumActivePages = 0; + page_list.m_nNumUnsteppedPages = 0; + page_list.m_nPageRefCnt = 0; + page_list.m_nDmaRefCnt = 0; + page_list.m_nAllocState = CPageList::AllocState::EPLAS_FREE; + } + + u8* mem = (u8*)m_paCache; + for (int i = 0; i < kNumPages; i++) { + m_Pages[i] = CPage(mem, mem + kPageSize - 1, i); + // interestingly, the stride is a bit longer. + mem += kPageStride; + } + + m_nAllocatedMask = 0; + m_nPagelistAllocatedMask = 0; + + EventFlagParam param; + param.attr = 2; + param.option = 0; + param.init_pattern = 0; + m_PagesFilledEventFlag = CreateEventFlag(¶m); // TODO args here + ASSERT(m_PagesFilledEventFlag >= 0); +} + +/*! + * Increase the length by the given amount. This is used for the DVD reading side to inform the + * consumer that there is more data available. + */ +void CBuffer::AddData(int len) { + // suspend interrupts + m_nDataLength += len; + // resume interrupts +} + +/*! + * Advance the current point in the buffer. This is used by the consume to mark forward progress. + */ +void CBuffer::AdvanceCurrentData(int len) { + // suspend interrupts + m_nDataLength -= len; + m_pCurrentData += len; + // resume interrupts +} + +/*! + * Set up pages. + */ +void CPageManager::Initialize() { + m_CCache.Initialize(); +} + +CPageList* CPageManager::AllocPageListBytes(int bytes, bool flag) { + return AllocPageList((bytes + kPageSize - 1) / kPageSize, flag); +} + +s32 alloc_bitmask(u32* mask, u32 length, u32 start = 0) { + for (u32 i = start; i < length; i++) { + if ((*mask & (1 << i)) == 0) { + // it's free! + (*mask) |= (1 << i); + return i; + } + } + return -1; +} + +/*! + * Allocate a PageList with the given number of pages. + */ +CPageList* CPageManager::AllocPageList(int count, bool consecutive_pages) { + ASSERT(count > 0); + ASSERT(count <= CCache::kNumPages); + + if (count > m_CCache.m_nNumFreePages) { + // if we're out of pages, use RecoverPages to discard pages that we've already read, but + // nobody is using yet. We'll be able to read them from the DVD again. + lg::warn("Recovering pages - {} requested in AllocPageList, but only {} available", count, + m_CCache.m_nNumFreePages); + RecoverPages(count); + ASSERT(m_CCache.m_nNumFreePages >= count); + } + + // next, find a pagelist. the original game had some fancy bit magic here, but this is simpler + int plist_idx = alloc_bitmask(&m_CCache.m_nPagelistAllocatedMask, CCache::kNumPageLists); + ASSERT(plist_idx >= 0); + CPageList* plist = &m_CCache.m_PageLists[plist_idx]; + + // Fill this array with allocated pages + CPage* pages[CCache::kNumPages]; + int pages_allocated = 0; + int last_page_allocated = -1; + int next_page_to_check = 0; + + while (pages_allocated < count) { + if (next_page_to_check >= CCache::kNumPages) { + break; + } + // grab the next page + int page_idx = alloc_bitmask(&m_CCache.m_nAllocatedMask, CCache::kNumPages, next_page_to_check); + ASSERT(page_idx >= 0); + + // start after this page on the next search + next_page_to_check = page_idx + 1; + + pages[pages_allocated] = &m_CCache.m_Pages[page_idx]; + pages_allocated++; + + // if we asked for consecutive pages, but didn't get them, we need to rewind our progress. + // but, we shouldn't rewind next_page_to_check! + if (consecutive_pages && last_page_allocated != -1 && last_page_allocated + 1 != page_idx) { + page_idx = -1; + while (pages_allocated) { + pages_allocated--; + + u32 i = pages[pages_allocated] - m_CCache.m_Pages; + ASSERT(i >= 0 && i < CCache::kNumPages); + m_CCache.m_nAllocatedMask &= ~(1 << i); + } + } + + last_page_allocated = page_idx; + } + + if (pages_allocated != count) { + // allocation failed + ASSERT_NOT_REACHED(); + } + + m_CCache.m_nNumFreePages -= count; + ASSERT(m_CCache.m_nNumFreePages >= 0); + + // zero everything + plist->m_pFirstPage = nullptr; + plist->m_pLastPage = nullptr; + plist->m_pFirstActivePage = nullptr; + plist->m_pLastActivePage = nullptr; + plist->m_pCurrentActivePage = nullptr; + plist->m_nNumPages = 0; + plist->m_nNumActivePages = 0; + plist->m_nNumUnsteppedPages = 0; + ASSERT(plist->m_nPageRefCnt == 0); + ASSERT(plist->m_nDmaRefCnt == 0); + + plist->m_nAllocState = CPageList::AllocState::EPLAS_ALLOCATED; + + // set up the pages + CPage* prev = nullptr; + CPage* page = nullptr; + for (int i = 0; i < pages_allocated; i++) { + page = pages[i]; + page->m_pPageList = plist; + page->m_pPrevPage = prev; + if (prev) { + prev->m_pNextPage = page; + } + page->m_nAllocState = 1; + page->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~page->mask); + prev = page; + } + page->m_pNextPage = nullptr; + plist->m_nNumPages = count; + plist->m_pLastPage = page; + plist->m_pFirstPage = pages[0]; + return plist; +} + +/*! + * Allocate page_count more pages, add them to the end of the list. This can be used to get more + * pages for the DVD driver to write to. + */ +CPageList* CPageManager::GrowPageList(jakx::CPageList* in, int page_count) { + ASSERT(in); + ASSERT(in->m_nAllocState == CPageList::AllocState::EPLAS_ALLOCATED); + ASSERT(page_count >= 0); + + if (page_count > m_CCache.m_nNumFreePages) { + // if we're out of pages, use RecoverPages to discard pages that we've already read, but + // nobody is using yet. We'll be able to read them from the DVD again. + lg::warn("Recovering pages - {} requested in AllocPageList, but only {} available", page_count, + m_CCache.m_nNumFreePages); + RecoverPages(page_count); + ASSERT(m_CCache.m_nNumFreePages >= page_count); + } + + CPage* pages[CCache::kNumPages]; + int next_page_to_check = 0; + int pages_allocated = 0; + while (pages_allocated != page_count) { + if (next_page_to_check >= CCache::kNumPages) { + break; + } + int page_idx = alloc_bitmask(&m_CCache.m_nAllocatedMask, CCache::kNumPages, next_page_to_check); + ASSERT(page_idx >= 0); // otherwise need to handle this better + next_page_to_check = page_idx + 1; + pages[pages_allocated] = &m_CCache.m_Pages[page_idx]; + pages_allocated++; + } + + if (pages_allocated != page_count) { + ASSERT_NOT_REACHED(); + } + + m_CCache.m_nNumFreePages -= pages_allocated; + + // set up the pages + CPage* prev = nullptr; + CPage* page = nullptr; + for (int i = 0; i < pages_allocated; i++) { + page = pages[i]; + ASSERT(page); + ASSERT(page->m_nAllocState == 0); + page->m_pPageList = in; + page->m_pPrevPage = prev; + if (prev) { + prev->m_pNextPage = page; + } + page->m_nAllocState = 1; + page->input_state = CPage::State::UNMAKRED; + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~page->mask); + prev = page; + } + page->m_pNextPage = nullptr; + + // suspendintr + if (in->m_nNumPages == 0) { + ASSERT(!in->m_pFirstPage); + ASSERT(!in->m_pLastPage); + ASSERT(!in->m_pFirstActivePage); + ASSERT(!in->m_pLastActivePage); + ASSERT(!in->m_pCurrentActivePage); + in->m_pFirstPage = pages[0]; + } else { + auto* old_end = in->m_pLastPage; + ASSERT(!old_end->m_pNextPage); + old_end->m_pNextPage = pages[0]; + pages[0]->m_pPrevPage = old_end; + } + in->m_pLastPage = page; + in->m_nNumPages += pages_allocated; + // resume intr + return in; +} + +/*! + * Return a PageList and its pages to the CCache. If the PageList is still referenced, the freeing + * will be deferred until GC. + */ +void CPageManager::FreePageList(jakx::CPageList* list) { + ASSERT(list); + ASSERT(list->m_nAllocState != CPageList::AllocState::EPLAS_FREE); + // suspend itr + list->m_nAllocState = CPageList::AllocState::FREE_PENDING; + // resume intr + + if (list->m_nDmaRefCnt || list->m_nPageRefCnt) { + lg::warn("Skipping free since list is referenced!"); + return; + } + + // loop over pages, clearing them. + CPage* page = list->m_pFirstPage; + int pages_count = 0; + int pages[CCache::kNumPages]; + + while (page) { + u32 page_slot = page - m_CCache.m_Pages; + ASSERT(page_slot < CCache::kNumPages); + pages[pages_count] = page_slot; + pages_count++; + auto* next = page->m_pNextPage; + page->m_pPageList = nullptr; + page->m_pPrevPage = nullptr; + page->m_pNextPage = nullptr; + page->m_nAllocState = 0; + page->input_state = CPage::State::UNMAKRED; + ASSERT(!page->m_nPageRefCount); + ASSERT(!page->m_nDmaRefCount); + ClearEventFlag(get_page_manager()->m_CCache.m_PagesFilledEventFlag, ~page->mask); + page = next; + } + + // clear list + if (pages_count != list->m_nNumPages) { + lg::die("Paging error: found {} pages out of {} in FreePageList", pages_count, + list->m_nNumPages); + } + ASSERT(pages_count == list->m_nNumPages); + list->m_pFirstActivePage = nullptr; + list->m_nNumPages = 0; + list->m_pLastActivePage = nullptr; + list->m_pCurrentActivePage = nullptr; + list->m_nNumActivePages = 0; + list->m_nNumUnsteppedPages = 0; + list->m_nAllocState = CPageList::AllocState::EPLAS_FREE; + m_CCache.m_nNumFreePages += pages_count; + ASSERT(m_CCache.m_nNumFreePages <= CCache::kNumPages); + list->m_pFirstPage = nullptr; + list->m_pLastPage = nullptr; + // unset bits in allocated mask + while (0 < pages_count) { + pages_count--; + m_CCache.m_nAllocatedMask &= ~(1 << pages[pages_count]); + } + // unset bit for the pagelist itself + u32 plist_idx = list - m_CCache.m_PageLists; + ASSERT(plist_idx >= 0 && plist_idx < CCache::kNumPageLists); + m_CCache.m_nPagelistAllocatedMask &= ~(1 << plist_idx); +} + +int CPageManager::RecoverPages(int) { + ASSERT_NOT_REACHED(); // TODO, this looks at pristack +} + +/*! + * Call GarbageCollect on all allocate CPageLists. + */ +void CPageManager::GarbageCollect() { + for (u32 i = 0; i < CCache::kNumPageLists; i++) { + if (m_CCache.m_nPagelistAllocatedMask & (1 << i)) { + GarbageCollectPageList(&m_CCache.m_PageLists[i]); + } + } +} + +/*! + * Do garbage collection of pages and page lists. + */ +void CPageManager::GarbageCollectPageList(jakx::CPageList* list) { + ASSERT(list); + list->GarbageCollect(); + // if we tried to free the list in the past, but failed, try to do it again now. + if (list->m_nAllocState == CPageList::AllocState::FREE_PENDING) { + FreePageList(list); + } +} + +} // namespace jakx diff --git a/game/overlord/jakx/pagemanager.h b/game/overlord/jakx/pagemanager.h new file mode 100644 index 0000000000..3dc4b5cd32 --- /dev/null +++ b/game/overlord/jakx/pagemanager.h @@ -0,0 +1,181 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_pagemanager(); + +/*! + * CPages Overview + * + * Data is read from the DVD driver into CPages. The CPages are then given to consumers. + * Each file that's opened has an associated CPageList. + * + * The CPageList is a linked list of pages. Within this linked list, there is a section of "active + * pages" which have been filled by the DVD driver. There is also the "current active page", which + * is the page that the user will read from next. Note that pages before the current active page + * and still be referenced by the user, but they should keep a nonzero reference count so the CPage + * is not Garbage Collected. + * + * By default, each active page will have a ref count of 1. + * + * The CBuffer object owned by CBaseFile uses memory managed by this CPage system. + * + * The pages are preallocated by the CPageManager, which gives out pages as needed. + */ + +struct CPage; +struct CPageList; +struct ISO_Hdr; + +constexpr int kPageSize = 0x8000; +constexpr int kPageStride = 0x8010; + +/*! + * A CBuffer stores file data in pages, and tracks the progress through the page data as it is fed + * into the ISO data handling system. + */ +struct CBuffer { + // The pages in this buffer are managed by a PageList + CPageList* m_pPageList = nullptr; + + // The ISO command that requested us to load this data + ISO_Hdr* m_pIsoCmd = nullptr; + + // Current progress through the data (todo: load or process?) + uint8_t* m_pCurrentData = nullptr; + + // First address in the current page + uint8_t* m_pCurrentPageStart = nullptr; + + // todo + int m_nDataLength = 0; + + enum class BufferType { + // this is a really confusing enum... + EBT_FREE = 0, // there is no buffer allocate + NORMAL = 1, // a buffer sized for non-VAG stream operations (several possible sizes) + VAG = 2, // a buffer size for VAG streams (larger than normal sizes) + REQUEST_NORMAL = 3, // argument passed to InitBuffer to get a normal buffer + REQUEST_VAG = 4, // argument passed to InitBuffer to get a VAG size buffer + } m_eBufferType = BufferType::EBT_FREE; + + // Try to have at least this many pages filled + int m_nMinNumPages = 0; + + // Don't fill more than this number of pages + int m_nMaxNumPages = 0; + + void AddData(int len); + void AdvanceCurrentData(int len); +}; + +/*! + * List of pages for a file. + */ +struct CPageList { + CPageList() = default; // ??? + + // list of all pages + CPage* m_pFirstPage = nullptr; + CPage* m_pLastPage = nullptr; + + // list of active pages. This is part of the all page list + CPage* m_pFirstActivePage = nullptr; + CPage* m_pLastActivePage = nullptr; + + // page that the application is currently reading from + CPage* m_pCurrentActivePage = nullptr; + + // total number of CPage, including both active/inactive + int m_nNumPages = 0; + + // number of cpages in the active page list + int m_nNumActivePages = 0; + + // number of CPages remaining for the user, including the current active page + int m_nNumUnsteppedPages = 0; + + // Reference counters to know if this data is still needed or not. + int m_nPageRefCnt = 0; + int m_nDmaRefCnt = 0; + + enum class AllocState { + EPLAS_FREE = 0, + EPLAS_ALLOCATED = 1, + FREE_PENDING = 2, // FreePageList called, but no + } m_nAllocState = AllocState::EPLAS_FREE; + + CPage* StepActivePage(); + CPage* AddActivePages(int num_pages); + int RemoveActivePages(int num_pages); + void CancelActivePages(); + void GarbageCollect(); +}; + +/*! + * A single page, pointing to a contiguous buffer of file data. + */ +struct CPage { + CPage(uint8_t* page_mem_start, uint8_t* page_mem_end, int page_idx); + CPage() = default; // ??? + CPage* m_pNextPage = nullptr; + CPage* m_pPrevPage = nullptr; + CPageList* m_pPageList = nullptr; + int m_nPageRefCount = 0; + int m_nDmaRefCount = 0; + int m_nAllocState = 0; + enum class State { + UNMAKRED = 0, + ACTIVE = 1, + READING = 2, + READ_DONE = 3 + } input_state = State::UNMAKRED; + uint8_t* m_pPageMemStart = nullptr; + uint8_t* m_pPageMemEnd = nullptr; + u32 m_nPageIdx = 0; + u32 mask = 0; + + int AddRef(); + int ReleaseRef(); + int AddDmaRef(); + int ReleaseDmaRef(); + void FromPagesCopy(uint8_t* in, uint8_t* dest, s32 size); +}; + +/*! + * CCache contains the actual CPage/CPageList objects to be given out to files. + */ +struct CCache { + static constexpr int kNumPages = 29; + static constexpr int kNumPageLists = 29; + static constexpr int kAllPagesMask = (1 << kNumPages) - 1; + + CCache(); + void Initialize(); + void* m_paCache = nullptr; + CPageList m_PageLists[kNumPageLists]; + CPage m_Pages[kNumPages]; + int m_nNumFreePages = 0; + u32 m_nAllocatedMask; + u32 m_nPagelistAllocatedMask; + int m_PagesFilledEventFlag; + int m_PendingMask; +}; + +struct CPageManager { + CCache m_CCache; + + CPageList* GrowPageList(CPageList* in, int page_count); + CPageList* AllocPageList(int count, bool flag); + CPageList* AllocPageListBytes(int bytes, bool flag); + void FreePageList(CPageList* list); + void WaitForPagesFilled(u32 mask); + void Initialize(); + int RecoverPages(int k); + void GarbageCollect(); + void GarbageCollectPageList(CPageList* list); +}; + +CPageManager* get_page_manager(); +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/ramdisk.cpp b/game/overlord/jakx/ramdisk.cpp new file mode 100644 index 0000000000..d67316d61f --- /dev/null +++ b/game/overlord/jakx/ramdisk.cpp @@ -0,0 +1,50 @@ +#include "ramdisk.h" + +#include "common/util/Assert.h" + +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/iso_api.h" +#include "game/overlord/jakx/rpc_interface.h" +#include "game/sce/iop.h" + +namespace jakx { + +constexpr int kRamdiskBufSize = 512; +u8 gRamdiskRpcBuf[kRamdiskBufSize]; + +void jakx_overlord_init_globals_ramdisk() {} + +/*! + * RPC Handler for "load to ee" rpc. + */ +void* RPC_LoadToEE(unsigned int fno, void* msg_ptr, int) { + switch (fno) { + case LoadToEEFno::LOAD_FILE: { + RpcLoadToEEMsg* msg = (RpcLoadToEEMsg*)(msg_ptr); + auto f = FindISOFile(msg->name); + ASSERT(f); + LoadISOFileToEE(f, msg->addr, msg->length); + } break; + default: + ASSERT_NOT_REACHED(); + } + return nullptr; +} + +u32 LoadToEE_RPC_Thread() { + using namespace iop; + + sceSifQueueData dq; + sceSifServeData serve; + + // set up RPC + CpuDisableIntr(); + sceSifInitRpc(0); + sceSifSetRpcQueue(&dq, GetThreadId()); + sceSifRegisterRpc(&serve, RpcId::LoadToEE, RPC_LoadToEE, gRamdiskRpcBuf, kRamdiskBufSize, nullptr, + nullptr, &dq); + CpuEnableIntr(); + sceSifRpcLoop(&dq); + return 0; +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/ramdisk.h b/game/overlord/jakx/ramdisk.h new file mode 100644 index 0000000000..4ceeffa77d --- /dev/null +++ b/game/overlord/jakx/ramdisk.h @@ -0,0 +1,10 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_ramdisk(); + +u32 LoadToEE_RPC_Thread(); + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/rpc_interface.h b/game/overlord/jakx/rpc_interface.h new file mode 100644 index 0000000000..bdb1a143f7 --- /dev/null +++ b/game/overlord/jakx/rpc_interface.h @@ -0,0 +1,280 @@ +#pragma once + +#include "common/common_types.h" + +/*! + * This file has structs that are shared between GOAL and Overlord. + * The memory layout of these structs should not be changed. + */ + +namespace jakx { + +struct SoundStreamName { + char chars[48]; +}; + +// vblank message + +struct SoundIOPInfo { + u32 frame; // 0 + s32 strpos; // 4 + u32 str_id; // 8 + u32 freemem; // 12 + u8 chinfo[48]; // 16 + u32 freemem2; // 64 + u32 nocd; // 68 + u32 dirtycd; // 72 + u32 diskspeed[2]; // 76 + u32 lastspeed; // 84 + s32 dupseg; // 88 + s32 times[41]; // 92 + u32 times_seq; // 256 + u32 iop_ticks; // 260 + u32 pad0[2]; + u32 stream_position[4]; // 272 + u32 stream_status[4]; // 288 + SoundStreamName stream_name[4]; + u32 stream_id[4]; + u8 music_register[17]; + // s8 music_excite; + char ramdisk_name[16]; + u32 pad[11]; + char sound_bank0[16]; + char sound_bank1[16]; + char sound_bank2[16]; + char sound_bank3[16]; + char sound_bank4[16]; + char sound_bank5[16]; + char sound_bank6[16]; + char sound_bank7[16]; +}; +// static_assert(offsetof(SoundIOPInfo, stream_name) == 304); +// static_assert(offsetof(SoundIOPInfo, stream_id) == 496); +// static_assert(offsetof(SoundIOPInfo, music_register) == 512); +// static_assert(offsetof(SoundIOPInfo, ramdisk_name) == 529); +// static_assert(offsetof(SoundIOPInfo, sound_bank0) == 592); +static_assert(sizeof(SoundIOPInfo) == 0x2d0); + +// static_assert(sizeof(SoundIOPInfo) == 288); + +// Common + +enum RpcId { + Player = 0xfab0, // sound effects playback + Loader = 0xfab1, // sound effects loading. + LoadToEE = 0xfab2, // was ramdisk, now just a simple way to load a file to EE memory. + DGO = 0xfab3, // level/engine .DGO loading + STR = 0xfab4, // loading .str files of animations or other streamed data + PLAY = 0xfab5, // playing and queueing vag streams +}; + +// RAMDISK RPC (renamed to LoadToEE for jak 3, kinda) +struct RpcLoadToEEMsg { + u32 unk; + u32 addr; + u32 unk2; + u32 length; + char name[16]; +}; +static_assert(sizeof(RpcLoadToEEMsg) == 32); + +enum LoadToEEFno { + LOAD_FILE = 4, +}; + +// DGO RPC + +struct RPC_Dgo_Cmd { + uint16_t rsvd; + uint16_t status; + uint32_t buffer1; + uint32_t buffer2; + uint32_t buffer_heap_top; + char name[16]; + int32_t cgo_id; + uint8_t pad[28]; +}; +static_assert(sizeof(RPC_Dgo_Cmd) == 0x40); + +enum DgoFno { + LOAD = 0, + LOAD_NEXT = 1, + CANCEL = 2, +}; + +// STR RPC +struct RPC_Str_Cmd { + u16 rsvd; + u16 result; // 2 + u32 address; + s32 section; // 8 + u32 maxlen; + u32 dummy[4]; + char basename[48]; // 32 +}; + +// PLAYER/LOADER RPCS + +struct RPC_Play_Cmd { + u16 rsvd; + u16 result; + u32 address; + u32 section; + u32 maxlen; + u32 id[4]; + SoundStreamName names[4]; + u32 pad[8]; +}; + +struct SoundName { + char data[16]; +}; + +enum class SoundCommand : u16 { + // IOP_STORE = 0, + // IOP_FREE = 1, + LOAD_BANK = 2, + // LOAD_BANK_FROM_IOP = 3, + // LOAD_BANK_FROM_EE = 4, + LOAD_MUSIC = 5, + UNLOAD_BANK = 6, + PLAY = 7, + PAUSE_SOUND = 8, + STOP_SOUND = 9, + CONTINUE_SOUND = 10, + SET_PARAM = 11, + SET_MASTER_VOLUME = 12, + PAUSE_GROUP = 13, + STOP_GROUP = 14, + CONTINUE_GROUP = 15, + GET_IRX_VERSION = 16, + // SET_FALLOFF_CURVE = 17, + // SET_SOUND_FALLOFF = 18, + // RELOAD_INFO = 19, + SET_LANGUAGE = 20, + // SET_FLAVA = 21, + SET_MIDI_REG = 22, + SET_REVERB = 23, + SET_EAR_TRANS = 24, + SHUTDOWN = 25, + LIST_SOUNDS = 26, + UNLOAD_MUSIC = 27, + SET_FPS = 28, + // BOOT_LOAD = 29, + // GAME_LOAD = 30, + // NUM_TESTS = 31, + // NUM_TESTRUNS = 32, + // NUM_SECTORS = 33, + // NUM_STREAMSECTORS = 34, + // NUM_STREMBANKS = 35, + // TRACK_PITCH = 36, + // LINVEL_NOM = 37, + CANCEL_DGO = 49, + SET_STEREO_MODE = 50, +}; + +struct SoundPlayParams { + u16 mask; + s16 pitch_mod; + s16 bend; + s16 fo_min; + s16 fo_max; + s8 fo_curve; + s8 priority; + s32 volume; + s32 trans[3]; + u8 group; + u8 reg[3]; +}; + +struct Rpc_Player_Base_Cmd { + u16 rsvd1 = 0; + SoundCommand command; +}; +static_assert(sizeof(Rpc_Player_Base_Cmd) == 4); + +struct Rpc_Player_Sound_Cmd : public Rpc_Player_Base_Cmd { + s32 sound_id = 0; +}; +static_assert(sizeof(Rpc_Player_Sound_Cmd) == 8); + +struct Rpc_Player_Group_Cmd : public Rpc_Player_Base_Cmd { + u32 group = 0; +}; +static_assert(sizeof(Rpc_Player_Group_Cmd) == 8); + +struct Rpc_Player_Play_Cmd : public Rpc_Player_Sound_Cmd { + s32 pad[2]; + SoundName name; + SoundPlayParams params; +}; +static_assert(sizeof(Rpc_Player_Play_Cmd) == 0x40); + +struct Rpc_Player_Set_Param_Cmd : public Rpc_Player_Sound_Cmd { + SoundPlayParams params; + s32 auto_time; + s32 auto_from; +}; +static_assert(sizeof(Rpc_Player_Set_Param_Cmd) == 0x30); + +struct Rpc_Player_Set_Master_Volume_Cmd : public Rpc_Player_Group_Cmd { + s32 volume; +}; +static_assert(sizeof(Rpc_Player_Set_Master_Volume_Cmd) == 12); + +struct Rpc_Player_Set_Ear_Trans_Cmd : public Rpc_Player_Base_Cmd { + s32 ear_trans1[3]; + s32 ear_trans0[3]; + s32 ear_trans[3]; + s32 cam_forward[3]; + s32 cam_left[3]; + s32 cam_scale; + s32 cam_inverted; +}; +static_assert(sizeof(Rpc_Player_Set_Ear_Trans_Cmd) == 0x48); + +struct Rpc_Player_Set_Fps_Cmd : public Rpc_Player_Base_Cmd { + u8 fps; + u8 pad; +}; +static_assert(sizeof(Rpc_Player_Set_Fps_Cmd) == 5 + 1); + +struct Rpc_Player_Cancel_Dgo_Cmd : public Rpc_Player_Group_Cmd { + u32 id; +}; +static_assert(sizeof(Rpc_Player_Cancel_Dgo_Cmd) == 12); + +struct Rpc_Loader_Bank_Cmd : public Rpc_Player_Base_Cmd { + u32 pad[3]; + SoundName bank_name; +}; +static_assert(sizeof(Rpc_Loader_Bank_Cmd) == 32); + +struct Rpc_Loader_Load_Bank_Cmd : public Rpc_Loader_Bank_Cmd { + u32 ee_addr; + u32 mode; + u32 priority; +}; +static_assert(sizeof(Rpc_Loader_Load_Bank_Cmd) == 0x2c); + +struct Rpc_Loader_Get_Irx_Version : public Rpc_Player_Base_Cmd { + u32 major; + u32 minor; + u32 ee_addr; +}; +static_assert(sizeof(Rpc_Loader_Get_Irx_Version) == 16); + +struct Rpc_Loader_Set_Language : public Rpc_Player_Base_Cmd { + u32 lang; +}; +static_assert(sizeof(Rpc_Loader_Set_Language) == 8); + +struct Rpc_Loader_Set_Stereo_Mode : public Rpc_Player_Base_Cmd { + s32 mode; +}; +static_assert(sizeof(Rpc_Loader_Set_Stereo_Mode) == 8); + +constexpr int kPlayerCommandStride = 0x50; +constexpr int kLoaderCommandStride = 0x50; + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/sbank.cpp b/game/overlord/jakx/sbank.cpp new file mode 100644 index 0000000000..f56dced2a7 --- /dev/null +++ b/game/overlord/jakx/sbank.cpp @@ -0,0 +1,176 @@ +#include "sbank.h" + +#include "common/util/Assert.h" + +#include "game/overlord/jakx/overlord.h" + +namespace jakx { + +constexpr int kNumBanks = 8; +SoundBankInfo* gBanks[kNumBanks]; + +SoundBankInfo gCommonBank; +SoundBankInfo gModeBank; +SoundBankInfo gLevel0Bank, gLevel0hBank; +SoundBankInfo gLevel1Bank, gLevel1hBank; +SoundBankInfo gLevel2Bank, gLevel2hBank; + +void jakx_overlord_init_globals_sbank() { + gBanks[0] = &gCommonBank; + gBanks[1] = &gModeBank; + gBanks[2] = &gLevel0Bank; + gBanks[3] = &gLevel0hBank; + gBanks[4] = &gLevel1Bank; + gBanks[5] = &gLevel1hBank; + gBanks[6] = &gLevel2Bank; + gBanks[7] = &gLevel2hBank; +} + +// added +void PrintBanks() { + printf("Loaded Banks\n"); + for (int i = 0; i < kNumBanks; i++) { + printf(" [%d] %s %s (%d/%d)\n", i, gBanks[i]->m_name1, gBanks[i]->m_name2, gBanks[i]->in_use, + gBanks[i]->loaded); + } +} + +void InitBanks() { + for (int i = 0; i < kNumBanks; i++) { + auto* bank = gBanks[i]; + bank->in_use = 0; + bank->snd_handle = nullptr; + bank->loaded = false; + bank->idx = i; + bank->unk0 = 0; + } + + strncpyz(gBanks[0]->m_name2, "common", 0x10); + gBanks[0]->m_nSpuMemSize = 0xbbe40; + gBanks[0]->m_nSpuMemLoc = 0x1d1c0; + + strncpyz(gBanks[1]->m_name2, "mode", 0x10); + gBanks[1]->m_nSpuMemSize = 0x25400; + gBanks[1]->m_nSpuMemLoc = 0xe0000; + + strncpyz(gBanks[2]->m_name2, "level0", 0x10); + gBanks[2]->m_nSpuMemLoc = 0x105400; + gBanks[2]->m_nSpuMemSize = 0x51400; + + strncpyz(gBanks[3]->m_name2, "level0h", 0x10); + gBanks[3]->m_nSpuMemLoc = 0x12de00; + gBanks[3]->m_nSpuMemSize = 0x28a00; + + strncpyz(gBanks[4]->m_name2, "level1", 0x10); + gBanks[4]->m_nSpuMemSize = 0x51400; + gBanks[4]->m_nSpuMemLoc = 0x156800; + + strncpyz(gBanks[5]->m_name2, "level1h", 0x10); + gBanks[5]->m_nSpuMemSize = 0x28a00; + gBanks[5]->m_nSpuMemLoc = 0x17f200; + + strncpyz(gBanks[6]->m_name2, "level2", 0x10); + gBanks[6]->m_nSpuMemSize = 0x51400; + gBanks[6]->m_nSpuMemLoc = 0x1a7c00; + + strncpyz(gBanks[7]->m_name2, "level2h", 0x10); + gBanks[7]->m_nSpuMemSize = 0x28a00; + gBanks[7]->m_nSpuMemLoc = 0x1d0600; +} + +SoundBankInfo* AllocateBankName(const char* name, u32 mode) { + int iVar1; + int mem_sz; + SoundBankInfo** ppSVar2; + int iVar3; + int iVar4; + SoundBankInfo* pSVar5; + int iVar6; + int iVar6_d4 = 2; + SoundBankInfo* bank = nullptr; + + // handle common case + if (memcmp(name, "common", 7) == 0 || memcmp(name, "commonj", 8) == 0) { + if (!gBanks[0]->in_use) { + bank = gBanks[0]; + } + } else if (memcmp(name, "mode", 4) == 0) { + if (!gBanks[1]->in_use) { + bank = gBanks[1]; + } + } + + if (mode == 4) { + for (int bank_idx = 2; bank_idx < kNumBanks; bank_idx += 2) { + if (!gBanks[bank_idx]->in_use && !gBanks[bank_idx + 1]->in_use) { + bank = gBanks[bank_idx]; + bank->m_nSpuMemSize = 0x51400; + break; + } + } + } else if (mode > 3 && (mode - 6u < 3)) { // wtf + iVar1 = 2; + // iVar6 = 8; + iVar6_d4 = 2; + while (gBanks[iVar6_d4]->in_use == 0 || gBanks[iVar6_d4]->mode != mode) { + auto* sbi = gBanks[iVar6_d4 + 1]; + iVar6 = iVar6 + 8; + if (((sbi->in_use != 0) && (iVar4 = iVar1, sbi->mode == mode)) || + (iVar1 = iVar1 + 2, iVar4 = -1, 7 < iVar1)) + goto LAB_0000c2fc; + } + iVar4 = iVar1 + 1; + LAB_0000c2fc: + if (iVar4 < 0) { + iVar1 = 2; + ppSVar2 = gBanks; + LAB_0000c36c: + ppSVar2 = ppSVar2 + 2; + pSVar5 = *ppSVar2; + iVar1 = iVar1 + 2; + if ((pSVar5->in_use != 0) || (ppSVar2[1]->in_use != 0)) + goto LAB_0000c39c; + mem_sz = 0x28a00; + pSVar5->m_nSpuMemSize = mem_sz; + bank = pSVar5; + goto LAB_0000c3a4; + } + pSVar5 = gBanks[iVar4]; + if (pSVar5->in_use == 0) { + gBanks[iVar1]->m_nSpuMemSize = 0x28a00; + bank = pSVar5; + } + } +LAB_0000c3a4: + if (bank) { + bank->mode = mode; + bank->snd_handle = nullptr; + bank->unk0 = 0; + } + return bank; + +LAB_0000c39c: + if (7 < iVar1) + goto LAB_0000c3a4; + goto LAB_0000c36c; +} + +SoundBankInfo* LookupBank(const char* name) { + for (int i = kNumBanks; i-- > 0;) { + if (memcmp(name, gBanks[i]->m_name1, 16) == 0) { + return gBanks[i]; + } + } + return nullptr; +} + +int GetFalloffCurve(int x) { + if (x < 0) { + return 1; + } + if (x == 0 || 0x28 < x) { + x = 2; + } + return x; +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/sbank.h b/game/overlord/jakx/sbank.h new file mode 100644 index 0000000000..f223224b10 --- /dev/null +++ b/game/overlord/jakx/sbank.h @@ -0,0 +1,30 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/sound/sndshim.h" + +namespace jakx { + +struct SoundBankInfo { + // int m_name1[4]; + char m_name1[16]; + char m_name2[16]; + int m_nSpuMemLoc = 0; + int m_nSpuMemSize = 0; + // s32 snd_handle = 0; + snd::BankHandle snd_handle = nullptr; + u8 in_use = 0; + u8 loaded = 0; + u8 mode = 0; + u8 idx = 0; + int unk0 = 0; +}; + +void jakx_overlord_init_globals_sbank(); +void InitBanks(); +SoundBankInfo* LookupBank(const char* name); +SoundBankInfo* AllocateBankName(const char* name, u32 mode); +void PrintBanks(); +extern SoundBankInfo* gBanks[8]; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/soundcommon.cpp b/game/overlord/jakx/soundcommon.cpp new file mode 100644 index 0000000000..54d3ff890e --- /dev/null +++ b/game/overlord/jakx/soundcommon.cpp @@ -0,0 +1,19 @@ +#include "soundcommon.h" + +#include +#include +#include + +namespace jakx { +void jakx_overlord_init_globals_soundcommon() {} + +// Only for use with 16 character sound names! +void strcpy_toupper(char* dest, const char* source) { + // clear the dest string + memset(dest, 0, 16); + std::string string(source); + std::transform(string.begin(), string.end(), string.begin(), ::toupper); + std::replace(string.begin(), string.end(), '-', '_'); + string.copy(dest, 16); +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/soundcommon.h b/game/overlord/jakx/soundcommon.h new file mode 100644 index 0000000000..bb28ff6000 --- /dev/null +++ b/game/overlord/jakx/soundcommon.h @@ -0,0 +1,7 @@ +#pragma once + +namespace jakx { +void jakx_overlord_init_globals_soundcommon(); + +void strcpy_toupper(char* dest, const char* src); +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/spustreams.cpp b/game/overlord/jakx/spustreams.cpp new file mode 100644 index 0000000000..8a41659df2 --- /dev/null +++ b/game/overlord/jakx/spustreams.cpp @@ -0,0 +1,1066 @@ +#include "spustreams.h" + +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/basefile.h" +#include "game/overlord/jakx/dma.h" +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/iso_queue.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" +#include "game/sound/sdshim.h" + +namespace jakx { +using namespace iop; +void jakx_overlord_init_globals_spustreams() {} + +u32 bswap_read32(u32 param_1) { + return param_1 >> 0x18 | ((int)param_1 >> 8 & 0xff00U) | (param_1 & 0xff00) << 8 | + param_1 << 0x18; +} + +void UpdateIsoBuffer(ISO_VAGCommand* cmd, int length) { + ASSERT(cmd); + ASSERT(cmd->m_pBaseFile); + + auto* file = cmd->m_pBaseFile; + int transfer_size = cmd->xfer_size; + + // advance progress in file + file->m_Buffer.m_pCurrentData += length; + + // this part is weird - we've advanced the current data pointer, and now we're updating the + // size field in the buffer. But, we're potentially adjusting the size in between these. + // This means that our m_pCurrentData + m_DataLength may go off the end of the buffer?? + int tranferred_already = -length; + if (transfer_size < length) { + tranferred_already = -transfer_size; + length = transfer_size; + // ASSERT_NOT_REACHED(); // for now... + } + cmd->xfer_size = transfer_size + tranferred_already; + file->m_Buffer.AddData(-length); + cmd->num_isobuffered_chunks = cmd->num_isobuffered_chunks + 1; +} + +/*! + * Callback for handling VAG data. This transfers data from the Page buffers to SPU memory. + */ +EIsoStatus ProcessVAGData(ISO_Hdr* _msg) { + int spu_addr; + u32 uVar1; + int iVar2; + u32 val; + uint8_t* iop_mem; + int* piVar4; + int iVar5; + int iVar6; + ISO_VAGCommand* sibling; + u32 val2; + CBuffer* buffer; + CBaseFile* file; + int length; + // int iVar9; + // undefined4 local_28[2]; + bool got_chunks; + + ASSERT(_msg); + auto* msg = (ISO_VAGCommand*)_msg; + ASSERT(msg->m_pBaseFile); + file = msg->m_pBaseFile; + ASSERT(file->m_ProcessDataSemaphore != -1); + + // lock the semaphore + // lg::error("--------------- proces vag!!! {}\n", msg->name); + WaitSema(file->m_ProcessDataSemaphore); + buffer = &file->m_Buffer; + + if (msg->unk_gvsp_flag) { + lg::error("unk gvsp flag set in process data - no more needed??"); + } + + // reject if errored/stopped - in this case no more data is needed. + if (msg->unk_gvsp_flag || msg->flags.stop || msg->flags.file_disappeared || + msg->flags.stereo_secondary) { + goto exit; + } + + // reject if error. + if (msg->error != 0) { + file->m_Buffer.m_nDataLength = 0; + goto exit; + } + + // reject if dma in progress - wait for that to finish first + if (msg->safe_to_modify_dma == 0) { + goto exit; + } + + // determine the length we need to do an upload. + sibling = msg->stereo_sibling; + got_chunks = msg->num_isobuffered_chunks != 0; + length = 0x2000; + if (sibling) { + length = 0x4000; + } + + // reject if not enough data. + if (got_chunks) { + int desired_length = length; + if (msg->xfer_size < length) { + desired_length = msg->xfer_size; + } + if ((int)file->m_Buffer.m_nDataLength < desired_length) { + lg::warn("ProcessVAG data is starved."); + goto exit; + } + } + + // reject if no buffer + if (!buffer->m_pPageList || !buffer->m_pPageList->m_pCurrentActivePage) + goto exit; + + // update buffer so it handles page crossing + file->CheckPageBoundary(); + CPage* page; + + // add ref count to the page. + if (!buffer->m_pPageList || ((page = buffer->m_pPageList->m_pCurrentActivePage, + !page || (spu_addr = page->AddRef(), spu_addr < 1)))) + goto exit; + + // make sure the page has the right state. I think this should never really happen, but I guess + // they are paranoid. + if (page->input_state != CPage::State::READ_DONE) { + int status = page->ReleaseRef(); + ASSERT(status >= 0); + goto exit; + } + + if (got_chunks) { // if we've already started streaming, all way have to do is update. + if (msg->num_isobuffered_chunks & 1u) { + int vag_transfer_size = msg->xfer_size; + if ((length < vag_transfer_size) || ((u32)msg->unk_spu_mem_offset < 0x4000)) { + VAG_MarkLoopEnd(file->m_Buffer.m_pCurrentData, 0x2000); + VAG_MarkLoopStart(file->m_Buffer.m_pCurrentData); + if (sibling) { + VAG_MarkLoopEnd(file->m_Buffer.m_pCurrentData, 0x4000); + VAG_MarkLoopStart(file->m_Buffer.m_pCurrentData + 0x2000); + } + } else { + spu_addr = 0x2010; + if ((0x1f < (int)vag_transfer_size) && + (spu_addr = vag_transfer_size + 0x1ff0, sibling != (ISO_VAGCommand*)0x0)) { + spu_addr = ((int)(vag_transfer_size + (vag_transfer_size >> 0x1f)) >> 1) + 0x1ff0; + } + msg->unk_spu_mem_offset = spu_addr; + if (sibling != (ISO_VAGCommand*)0x0) { + sibling->unk_spu_mem_offset = msg->unk_spu_mem_offset; + } + } + // CpuSuspendIntr(local_28); + iop_mem = file->m_Buffer.m_pCurrentData; + spu_addr = msg->stream_sram + 0x2000; + } else { + int vag_transfer_size = msg->xfer_size; + if ((length < (int)vag_transfer_size) || ((u32)msg->unk_spu_mem_offset < 0x4000)) { + VAG_MarkLoopEnd(file->m_Buffer.m_pCurrentData, 0x2000); + VAG_MarkLoopStart(file->m_Buffer.m_pCurrentData); + if (sibling) { + VAG_MarkLoopEnd(file->m_Buffer.m_pCurrentData, 0x4000); + VAG_MarkLoopStart(file->m_Buffer.m_pCurrentData + 0x2000); + } + } else { + spu_addr = 0x10; + if ((0x1f < (int)vag_transfer_size) && + (spu_addr = vag_transfer_size - 0x10, sibling != (ISO_VAGCommand*)0x0)) { + spu_addr = ((int)(vag_transfer_size + (vag_transfer_size >> 0x1f)) >> 1) + -0x10; + } + msg->unk_spu_mem_offset = spu_addr; + if (sibling != (ISO_VAGCommand*)0x0) { + sibling->unk_spu_mem_offset = msg->unk_spu_mem_offset; + } + } + // CpuSuspendIntr(local_28); + iop_mem = file->m_Buffer.m_pCurrentData; + spu_addr = msg->stream_sram; + } + spu_addr = DMA_SendToSPUAndSync(iop_mem, 0x2000, spu_addr, msg, page); + if (spu_addr != 0) { + set_active_b(msg, 0); + goto LAB_000106a0; + } + LAB_0001067c: + // + { + int status = page->ReleaseRef(); + ASSERT(status >= 0); + } + + } else { + // we're starting the vag file! check the header: + piVar4 = (int*)file->m_Buffer.m_pCurrentData; + if ((*piVar4 != 0x70474156) && (*piVar4 != 0x56414770)) { + lg::error("Invalid VAG data is 0x{:x}", *piVar4); + ASSERT_NOT_REACHED(); // invalid data + msg->error = 1; + file->m_Buffer.m_nDataLength = 0; + int status = page->ReleaseRef(); + ASSERT(status >= 0); + goto exit; + } + + // read the rate/xfer size. + val = piVar4[4]; + msg->vag_file_rate = val; + val2 = piVar4[3]; + msg->unk_gvsp_cntr = 0; + msg->xfer_size = val2; + if (*piVar4 == 0x70474156) { + uVar1 = bswap_read32(val); + msg->vag_file_rate = uVar1; + uVar1 = bswap_read32(val2); + msg->xfer_size = uVar1; + } + + // lg::die("xfer size is {}", msg->xfer_size); + + // set sibling properties + if (sibling) { + spu_addr = msg->xfer_size; + sibling->vag_file_rate = msg->vag_file_rate; + sibling->xfer_size = spu_addr; + sibling->unk_gvsp_cntr = 0; + } + + spu_addr = msg->xfer_size; + if (sibling != (ISO_VAGCommand*)0x0) { + spu_addr = spu_addr >> 1; + } + uVar1 = spu_addr + 0x30; + if ((uVar1 & 0x1fff) != 0) { + uVar1 = (uVar1 - (uVar1 & 0x1fff)) + 0x2000; + } + if (sibling != (ISO_VAGCommand*)0x0) { + uVar1 = uVar1 * 2; + } + uVar1 = (uVar1 + 0x7fff) >> 0xf; + if (uVar1 == 0) { + uVar1 = 1; + } + file->m_LengthPages = uVar1; + iVar6 = msg->vag_file_rate; + iVar5 = msg->xfer_size; + spu_addr = iVar5 + 0x30; + msg->unk_spu_mem_offset = 0x4000; + msg->xfer_size = spu_addr; + uVar1 = (u32)(iVar6 << 0xc) / 48000; + msg->pitch1_file = uVar1; + msg->pitch1 = uVar1; + if (spu_addr < 0x2001) { + iVar2 = 0x10; + if (0x1f < spu_addr) { + iVar2 = iVar5 + 0x20; + } + msg->unk_spu_mem_offset = iVar2; + if (sibling != (ISO_VAGCommand*)0x0) { + sibling->xfer_size = msg->xfer_size; + sibling->unk_spu_mem_offset = msg->unk_spu_mem_offset; + sibling->vag_file_rate = iVar6; + sibling->pitch1 = msg->pitch1; + sibling->pitch1_file = msg->pitch1_file; + sibling->xfer_size = msg->xfer_size; + sibling->unk_spu_mem_offset = msg->unk_spu_mem_offset; + sibling->unk_gvsp_cntr = 0; + } + } + // CpuSuspendIntr(local_28); + spu_addr = + DMA_SendToSPUAndSync(file->m_Buffer.m_pCurrentData, 0x2000, msg->stream_sram, msg, page); + if (spu_addr == 0) + goto LAB_0001067c; + msg->position_for_ee = 0; + msg->unk_gvsp_len = 0; + if (sibling) { // added. + sibling->position_for_ee = 0; + } + LAB_000106a0: + UpdateIsoBuffer(msg, length); + } + // CpuResumeIntr(local_28[0]); +exit: + SignalSema(file->m_ProcessDataSemaphore); + return EIsoStatus::OK_2; +} + +u32 GetSpuRamAddress(ISO_VAGCommand* cmd) { + return sceSdGetAddr(SD_VA_NAX | cmd->voice); + + u32 voice = cmd->voice; + u32 current_addr = cmd->stream_sram; + BlockUntilVoiceSafe(voice, 0xf00); + u32 sce_addr = sceSdGetAddr(voice | 0x2240); + // lg::info("sce addr {}", sce_addr); + if ((sce_addr < current_addr) || (current_addr + 0x4040 <= sce_addr)) { + ASSERT_NOT_REACHED(); + sce_addr = current_addr + 0x4040; + } + return sce_addr; +} + +u32 GetVAGStreamPos(ISO_VAGCommand* cmd) { + u32 uVar1; + int iVar2; + u32 uVar3; + u32 uVar4; + ISO_VAGCommand* sibling; + u32 uVar5; + // undefined4 local_20[2]; + + sibling = cmd->stereo_sibling; + if (cmd->id == 0) { + cmd->position_for_ee = 0; + if (sibling == (ISO_VAGCommand*)0x0) { + return 0; + } + sibling->position_for_ee = 0; + return 0; + } + if (cmd->flags.file_disappeared != 0) { + cmd->position_for_ee = cmd->clockd; + if (sibling == (ISO_VAGCommand*)0x0) { + return 0; + } + sibling->position_for_ee = sibling->clockd; + return 0; + } + if (((cmd->flags.running == 0) || (cmd->flags.saw_chunks1 == 0)) || (cmd->flags.paused != 0)) { + cmd->position_for_ee = cmd->clocka; + if (sibling == (ISO_VAGCommand*)0x0) { + return 0; + } + sibling->position_for_ee = sibling->clocka; + return 0; + } + if (cmd->flags.stereo_secondary != 0) { + cmd->position_for_ee = cmd->clocka; + return 0; + } + // CpuSuspendIntr(local_20); + uVar1 = GetSpuRamAddress(cmd); + uVar5 = 0; + // lg::info("offset is {}, {} - {}\n", uVar1 - cmd->stream_sram, uVar1, cmd->stream_sram); + uVar1 = uVar1 - cmd->stream_sram; + if (sibling != (ISO_VAGCommand*)0x0) { + uVar5 = GetSpuRamAddress(sibling); + uVar5 = uVar5 - sibling->stream_sram; + } + // CpuResumeIntr(local_20[0]); + if (sibling != (ISO_VAGCommand*)0x0) { + if (((uVar1 < 0x4000) && (uVar5 < 0x4000)) && + ((cmd->flags.bit20 == 0 && (sibling->flags.bit20 == 0)))) { + iVar2 = (int)((uVar1 - uVar5) * 0x40000) >> 0x12; + if (iVar2 < 0) { + iVar2 = -iVar2; + } + if (4 < iVar2) { + PauseVAG(cmd); + uVar1 = cmd->current_spu_address - cmd->stream_sram; + uVar5 = sibling->current_spu_address - sibling->stream_sram; + UnPauseVAG(cmd); + } + } + if (sibling == (ISO_VAGCommand*)0x0) + goto LAB_00011010; + // CpuSuspendIntr(local_20); + // lg::info("inner values are: {} {}", uVar1, uVar5); + if ((0x4000 < uVar1) && (cmd->flags.bit20 == 0)) { + cmd->flags.bit20 = 1; + cmd->flags.bit21 = 0; + cmd->flags.bit22 = 0; + sibling->flags.bit20 = 1; + sibling->flags.bit21 = 0; + sibling->flags.bit22 = 0; + } + if (uVar5 < 0x4001) { + if (uVar1 < 0x2000) { + if (cmd->flags.bit21 == 0) { + cmd->unk_gvsp_cntr = cmd->unk_gvsp_cntr + 1; + cmd->flags.bit21 = 1; + cmd->flags.bit22 = 0; + LAB_000109b8: + cmd->flags.bit20 = 0; + } + } else { + if (cmd->flags.bit22 == 0) { + cmd->unk_gvsp_cntr = cmd->unk_gvsp_cntr + 1; + cmd->flags.bit22 = 1; + cmd->flags.bit21 = 0; + goto LAB_000109b8; + } + } + if (uVar5 < 0x2000) { + if (sibling->flags.bit21 == 0) { + sibling->unk_gvsp_cntr = sibling->unk_gvsp_cntr + 1; + sibling->flags.bit21 = 1; + sibling->flags.bit22 = 0; + LAB_00010a1c: + sibling->flags.bit20 = 0; + } + } else { + if (sibling->flags.bit22 == 0) { + sibling->unk_gvsp_cntr = sibling->unk_gvsp_cntr + 1; + sibling->flags.bit22 = 1; + sibling->flags.bit21 = 0; + goto LAB_00010a1c; + } + } + } else { + if (sibling->flags.bit20 == 0) { + cmd->flags.bit20 = 1; + cmd->flags.bit21 = 0; + cmd->flags.bit22 = 0; + sibling->flags.bit20 = 1; + sibling->flags.bit21 = 0; + sibling->flags.bit22 = 0; + } + } + // lg::info("bits are {} {} {}\n", cmd->flags.bit20, cmd->flags.bit21, cmd->flags.bit22); + // CpuResumeIntr(local_20[0]); + if (cmd->unk_gvsp_flag != 0) + goto switchD_00010a60_caseD_1; + + // lg::info("switching {}", cmd->unk_gvsp_state2); + switch (cmd->unk_gvsp_state2) { + case 0: + if ((((cmd->flags.dma_complete_even_chunk_count == 0) || (cmd->flags.bit21 == 0)) || + (sibling->flags.dma_complete_even_chunk_count == 0)) || + (sibling->flags.bit21 == 0)) + goto switchD_00010a60_caseD_1; + cmd->flags.dma_complete_even_chunk_count = 0; + cmd->unk_gvsp_state2 = 2; + sibling->flags.dma_complete_even_chunk_count = 0; + sibling->unk_gvsp_state2 = 2; + case 2: + if ((cmd->flags.dma_complete_odd_chunk_count == 0) || + (sibling->flags.dma_complete_odd_chunk_count == 0)) { + if ((cmd->flags.bit20 != 0) || (sibling->flags.bit20 != 0)) { + uVar1 = 0x2000; + uVar5 = 0x2000; + cmd->flags.bit17 = 1; + cmd->flags.bit16 = 0; + cmd->unk_gvsp_state2 = 4; + sibling->flags.bit17 = 1; + sibling->unk_gvsp_state2 = 4; + LAB_00010efc: + sibling->flags.bit16 = 0; + } + goto switchD_00010a60_caseD_1; + } + if ((cmd->flags.bit20 == 0) && (sibling->flags.bit20 == 0)) { + BlockUntilVoiceSafe(cmd->voice, 0xf00); + BlockUntilVoiceSafe(sibling->voice, 0xf00); + // CpuSuspendIntr(local_20); + // lg::info("sax case 1 (stream)"); + sceSdSetAddr(cmd->voice | 0x2140, cmd->stream_sram + 0x2000); + sceSdSetAddr(sibling->voice | 0x2140, sibling->stream_sram + 0x2000); + iVar2 = 3; + cmd->flags.bit15 = 1; + cmd->flags.bit14 = 0; + cmd->flags.bit13 = 0; + sibling->flags.bit15 = 1; + sibling->flags.bit14 = 0; + LAB_00010d78: + sibling->flags.bit13 = 0; + LAB_00010e78: + cmd->unk_gvsp_state2 = iVar2; + sibling->unk_gvsp_state2 = iVar2; + // CpuResumeIntr(local_20[0]); + goto switchD_00010a60_caseD_1; + } + LAB_00010bc4: + RestartVag(cmd, 1); + uVar1 = 0x2000; + iVar2 = 9; + uVar5 = 0x2000; + break; + default: + goto switchD_00010a60_caseD_1; + case 3: + // lg::info("case 3 bits: ({} {}) ({} {})\n", cmd->flags.bit20, cmd->flags.bit22, + // sibling->flags.bit20, sibling->flags.bit22); + if ((cmd->flags.bit20 != 0) || (sibling->flags.bit20 != 0)) + goto LAB_00010bc4; + if ((cmd->flags.bit22 == 0) || (sibling->flags.bit22 == 0)) + goto switchD_00010a60_caseD_1; + BlockUntilVoiceSafe(cmd->voice, 0xf00); + BlockUntilVoiceSafe(sibling->voice, 0xf00); + // CpuSuspendIntr(local_20); + // lg::info("sax case 2 (trap)"); + sceSdSetAddr(cmd->voice | 0x2140, cmd->trap_sram); + sceSdSetAddr(sibling->voice | 0x2140, sibling->trap_sram); + iVar2 = 5; + cmd->flags.bit13 = 1; + cmd->flags.bit14 = 0; + cmd->flags.bit15 = 0; + sibling->flags.bit13 = 1; + sibling->flags.bit14 = 0; + sibling->flags.bit15 = 0; + cmd->flags.dma_complete_odd_chunk_count = 0; + sibling->flags.dma_complete_odd_chunk_count = 0; + goto LAB_00010e78; + case 4: + uVar1 = cmd->unk_gvsp_len; + uVar5 = sibling->unk_gvsp_len; + if ((cmd->flags.dma_complete_odd_chunk_count == 0) || + (sibling->flags.dma_complete_odd_chunk_count == 0)) + goto switchD_00010a60_caseD_1; + RestartVag(cmd, 1); + iVar2 = 9; + break; + case 5: + if ((cmd->flags.dma_complete_even_chunk_count == 0) || + (sibling->flags.dma_complete_even_chunk_count == 0)) { + if (cmd->flags.bit20 == 0) + goto switchD_00010a60_caseD_1; + cmd->flags.bit16 = 1; + cmd->flags.bit17 = 0; + cmd->unk_gvsp_state2 = 7; + uVar1 = 0x4000; + uVar5 = 0x4000; + sibling->flags.bit16 = 1; + sibling->unk_gvsp_state2 = 7; + goto LAB_00010db0; + } + if ((cmd->flags.bit20 != 0) || (sibling->flags.bit20 != 0)) + goto LAB_00010dd8; + BlockUntilVoiceSafe(cmd->voice, 0xf00); + BlockUntilVoiceSafe(sibling->voice, 0xf00); + // CpuSuspendIntr(local_20); + // lg::info("sax case 3 (stream)"); + sceSdSetAddr(cmd->voice | 0x2140, cmd->stream_sram); + sceSdSetAddr(sibling->voice | 0x2140, sibling->stream_sram); + iVar2 = 6; + cmd->flags.bit14 = 1; + cmd->flags.bit15 = 0; + cmd->flags.bit13 = 0; + sibling->flags.bit14 = 1; + sibling->flags.bit15 = 0; + goto LAB_00010d78; + case 6: + if ((cmd->flags.bit20 == 0) && (sibling->flags.bit20 == 0)) { + if ((cmd->flags.bit21 == 0) || (sibling->flags.bit21 == 0)) + goto switchD_00010a60_caseD_1; + BlockUntilVoiceSafe(cmd->voice, 0xf00); + BlockUntilVoiceSafe(sibling->voice, 0xf00); + // CpuSuspendIntr(local_20); + // lg::info("sax case 4 (trap)"); + sceSdSetAddr(cmd->voice | 0x2140, cmd->trap_sram); + sceSdSetAddr(sibling->voice | 0x2140, sibling->trap_sram); + cmd->flags.bit13 = 1; + cmd->flags.bit14 = 0; + cmd->flags.bit15 = 0; + iVar2 = 2; + sibling->flags.bit13 = 1; + sibling->flags.bit14 = 0; + sibling->flags.bit15 = 0; + cmd->flags.dma_complete_even_chunk_count = 0; + sibling->flags.dma_complete_even_chunk_count = 0; + goto LAB_00010e78; + } + LAB_00010dd8: + RestartVag(cmd, 0); + uVar1 = 0x4000; + iVar2 = 8; + uVar5 = 0x4000; + break; + case 7: + uVar1 = cmd->unk_gvsp_len; + uVar5 = uVar1; + if ((cmd->flags.dma_complete_even_chunk_count == 0) || + (uVar5 = uVar1, sibling->flags.dma_complete_even_chunk_count == 0)) + goto switchD_00010a60_caseD_1; + RestartVag(cmd, 0); + iVar2 = 8; + uVar5 = uVar1; + break; + case 8: + if ((cmd->flags.bit21 == 0) || (sibling->flags.bit21 == 0)) { + uVar1 = cmd->unk_gvsp_len; + uVar5 = uVar1; + goto switchD_00010a60_caseD_1; + } + cmd->unk_gvsp_state2 = 6; + cmd->flags.bit16 = 0; + sibling->unk_gvsp_state2 = 6; + goto LAB_00010efc; + case 9: + if ((cmd->flags.bit22 == 0) || (sibling->flags.bit22 == 0)) { + uVar1 = cmd->unk_gvsp_len; + uVar5 = sibling->unk_gvsp_len; + goto switchD_00010a60_caseD_1; + } + cmd->unk_gvsp_state2 = 3; + cmd->flags.bit17 = 0; + sibling->unk_gvsp_state2 = 3; + LAB_00010db0: + sibling->flags.bit17 = 0; + goto switchD_00010a60_caseD_1; + } + cmd->unk_gvsp_state2 = iVar2; + sibling->unk_gvsp_state2 = iVar2; + switchD_00010a60_caseD_1: + if (cmd->unk_gvsp_cntr == 0) { + cmd->clockc = uVar1; + sibling->clockc = uVar1; + } else { + iVar2 = sibling->unk_gvsp_cntr; + cmd->clockc = uVar1 + cmd->unk_gvsp_cntr * 0x2000 + -0x2000; + sibling->clockc = uVar5 + iVar2 * 0x2000 + -0x2000; + if (0x2000 < uVar1) { + cmd->clockc = cmd->clockc + -0x2000; + } + if (0x2000 < uVar5) { + sibling->clockc = sibling->clockc + -0x2000; + } + } + uVar4 = cmd->vag_file_rate; + if (uVar4 == 0) { + uVar3 = 0; + } else { + uVar3 = (u32)(cmd->clockc * 0x1c0) / uVar4; + if (uVar4 == 0) { + ASSERT_NOT_REACHED(); + } + } + iVar2 = sibling->clockc; + uVar4 = sibling->vag_file_rate; + cmd->unk_gvsp_len = uVar1; + cmd->position_for_ee = uVar3 << 2; + cmd->clocka = uVar3 << 2; + if (uVar4 == 0) { + uVar1 = 0; + } else { + uVar1 = (u32)(iVar2 * 0x1c0) / uVar4; + if (uVar4 == 0) { + ASSERT_NOT_REACHED(); + } + } + sibling->unk_gvsp_len = uVar5; + sibling->position_for_ee = uVar1 << 2; + sibling->clocka = uVar1 << 2; + return 0; + } +LAB_00011010: + if (uVar1 < 0x4001) { + if (uVar1 < 0x2000) { + if (cmd->flags.bit21 == 0) { + cmd->unk_gvsp_cntr = cmd->unk_gvsp_cntr + 1; + cmd->flags.bit21 = 1; + cmd->flags.bit22 = 0; + LAB_00011098: + cmd->flags.bit20 = 0; + } + } else { + if (cmd->flags.bit22 == 0) { + cmd->unk_gvsp_cntr = cmd->unk_gvsp_cntr + 1; + cmd->flags.bit22 = 1; + cmd->flags.bit21 = 0; + goto LAB_00011098; + } + } + } else { + if (cmd->flags.bit20 == 0) { + cmd->flags.bit20 = 1; + cmd->flags.bit21 = 0; + cmd->flags.bit22 = 0; + } + } + if (cmd->unk_gvsp_flag != 0) + goto switchD_000110d0_caseD_1; + switch (cmd->unk_gvsp_state2) { + case 0: + if ((cmd->flags.dma_complete_even_chunk_count == 0) || (cmd->flags.bit21 == 0)) + goto switchD_000110d0_caseD_1; + cmd->unk_gvsp_state2 = 2; + cmd->flags.dma_complete_even_chunk_count = 0; + switchD_000110d0_caseD_2: + if (cmd->flags.dma_complete_odd_chunk_count == 0) { + if (cmd->flags.bit20 != 0) { + uVar1 = 0x2000; + iVar2 = 4; + cmd->flags.bit17 = 1; + LAB_00011368: + cmd->unk_gvsp_state2 = iVar2; + cmd->flags.bit16 = 0; + } + } else { + if (cmd->flags.bit20 == 0) { + BlockUntilVoiceSafe(cmd->voice, 0xf00); + // CpuSuspendIntr(local_20); + sceSdSetAddr(cmd->voice | 0x2140, cmd->stream_sram + 0x2000); + cmd->flags.bit15 = 1; + cmd->unk_gvsp_state2 = 3; + cmd->flags.bit14 = 0; + LAB_00011284: + cmd->flags.bit13 = 0; + LAB_00011324:; + // CpuResumeIntr(local_20[0]); + } else { + LAB_00011188: + RestartVag(cmd, 1); + uVar1 = 0x2000; + LAB_0001120c: + iVar2 = 9; + LAB_00011350: + cmd->unk_gvsp_state2 = iVar2; + } + } + switchD_000110d0_caseD_1: + if (cmd->unk_gvsp_cntr == 0) { + cmd->clockc = uVar1; + } else { + iVar2 = uVar1 + cmd->unk_gvsp_cntr * 0x2000; + cmd->clockc = iVar2 + -0x2000; + if (0x2000 < uVar1) { + cmd->clockc = iVar2 + -0x4000; + } + } + uVar5 = cmd->vag_file_rate; + if (uVar5 == 0) { + uVar4 = 0; + } else { + uVar4 = (u32)(cmd->clockc * 0x1c0) / uVar5; + if (uVar5 == 0) { + // trap(0x1c00); + ASSERT_NOT_REACHED(); + } + } + cmd->unk_gvsp_len = uVar1; + cmd->position_for_ee = uVar4 << 2; + cmd->clocka = uVar4 << 2; + return 0; + default: + goto switchD_000110d0_caseD_1; + case 2: + goto switchD_000110d0_caseD_2; + case 3: + if (cmd->flags.bit20 != 0) + goto LAB_00011188; + if (cmd->flags.bit22 == 0) + goto switchD_000110d0_caseD_1; + BlockUntilVoiceSafe(cmd->voice, 0xf00); + // CpuSuspendIntr(local_20); + sceSdSetAddr(cmd->voice | 0x2140, cmd->trap_sram); + cmd->flags.bit13 = 1; + cmd->unk_gvsp_state2 = 5; + cmd->flags.bit14 = 0; + cmd->flags.bit15 = 0; + cmd->flags.dma_complete_odd_chunk_count = 0; + goto LAB_00011324; + case 4: + uVar1 = cmd->unk_gvsp_len; + if (cmd->flags.dma_complete_odd_chunk_count == 0) + goto switchD_000110d0_caseD_1; + RestartVag(cmd, 1); + goto LAB_0001120c; + case 5: + if (cmd->flags.dma_complete_even_chunk_count == 0) { + if (cmd->flags.bit20 == 0) + goto switchD_000110d0_caseD_1; + uVar1 = 0x4000; + cmd->flags.bit16 = 1; + iVar2 = 7; + goto LAB_000112a0; + } + if (cmd->flags.bit20 != 0) + goto LAB_000112bc; + BlockUntilVoiceSafe(cmd->voice, 0xf00); + // CpuSuspendIntr(local_20); + sceSdSetAddr(cmd->voice | 0x2140, cmd->stream_sram); + cmd->flags.bit14 = 1; + cmd->unk_gvsp_state2 = 6; + cmd->flags.bit15 = 0; + goto LAB_00011284; + case 6: + if (cmd->flags.bit20 == 0) { + if (cmd->flags.bit21 == 0) + goto switchD_000110d0_caseD_1; + BlockUntilVoiceSafe(cmd->voice, 0xf00); + // CpuSuspendIntr(local_20); + sceSdSetAddr(cmd->voice | 0x2140, cmd->trap_sram); + cmd->flags.bit13 = 1; + cmd->unk_gvsp_state2 = 2; + cmd->flags.bit14 = 0; + cmd->flags.bit15 = 0; + cmd->flags.dma_complete_even_chunk_count = 0; + goto LAB_00011324; + } + LAB_000112bc: + RestartVag(cmd, 0); + uVar1 = 0x4000; + goto LAB_0001134c; + case 7: + uVar1 = cmd->unk_gvsp_len; + if (cmd->flags.dma_complete_even_chunk_count == 0) + goto switchD_000110d0_caseD_1; + RestartVag(cmd, 0); + LAB_0001134c: + iVar2 = 8; + goto LAB_00011350; + case 8: + iVar2 = 6; + if (cmd->flags.bit21 == 0) { + LAB_00011374: + uVar1 = cmd->unk_gvsp_len; + goto switchD_000110d0_caseD_1; + } + goto LAB_00011368; + case 9: + iVar2 = 3; + if (cmd->flags.bit22 == 0) + goto LAB_00011374; + LAB_000112a0: + cmd->unk_gvsp_state2 = iVar2; + cmd->flags.bit17 = 0; + goto switchD_000110d0_caseD_1; + } +} + +u32 CheckVAGStreamProgress(ISO_VAGCommand* cmd) { + u32 uVar1; + u32 last_offset_in_stream_sram; + ISO_VAGCommand* pIVar3; + + if (cmd->flags.file_disappeared == 0) { + if (cmd->flags.stereo_secondary != 0) { + return 1; + } + if (cmd->error != 0) { + return 0; + } + if ((cmd->flags.bit20 != 0) && (cmd->unk_gvsp_flag != 0)) { + return 0; + } + if (cmd->flags.saw_chunks1 == 0) { + return 1; + } + if (cmd->flags.paused != 0) { + return 1; + } + uVar1 = cmd->unk_spu_mem_offset; + pIVar3 = cmd->stereo_sibling; + last_offset_in_stream_sram = cmd->unk_gvsp_len; + if ((uVar1 < 0x4000) && (((last_offset_in_stream_sram < 0x2001 && (uVar1 < 0x2001)) || + ((0x1fff < last_offset_in_stream_sram && (0x1fff < uVar1)))))) { + if (uVar1 <= (last_offset_in_stream_sram & 0xfffffff0)) { + return 0; + } + // CpuSuspendIntr(local_18); + if ((cmd->unk_gvsp_flag == 0) && + (last_offset_in_stream_sram < (u32)cmd->unk_spu_mem_offset)) { + BlockUntilVoiceSafe(cmd->voice, 0xf00); + sceSdSetAddr(cmd->voice | 0x2140, cmd->stream_sram + cmd->unk_spu_mem_offset); + cmd->unk_gvsp_flag = 1; + if (pIVar3 != (ISO_VAGCommand*)0x0) { + BlockUntilVoiceSafe(pIVar3->voice, 0xf00); + sceSdSetAddr(pIVar3->voice | 0x2140, pIVar3->stream_sram + cmd->unk_spu_mem_offset); + pIVar3->unk_gvsp_flag = 1; + } + } + set_active_a(cmd, 0); + set_active_b(cmd, 0); + // CpuResumeIntr(local_18[0]); + return 1; + } + if (cmd->flags.saw_chunks1 == 0) { + return 1; + } + if (cmd->active_b != 0) { + return 1; + } + if (cmd->safe_to_modify_dma == 0) { + return 1; + } + if (cmd->unk_gvsp_flag != 0) { + return 1; + } + if (last_offset_in_stream_sram < 0x2000) { + uVar1 = cmd->num_isobuffered_chunks; + } else { + uVar1 = cmd->num_isobuffered_chunks ^ 1; + } + if ((uVar1 & 1) == 0) { + return 1; + } + + set_active_b(cmd, 1); + } + return 1; +} + +void StopVagStream(ISO_VAGCommand* cmd) { + ISO_VAGCommand* sibling; + VagStreamData vsd; + // undefined auStack72 [36]; + // int local_24; + // int local_20; + // undefined4 local_18 [2]; + + // CpuSuspendIntr(local_18); + sibling = cmd->stereo_sibling; + cmd->flags.saw_chunks1 = 0; + if (sibling != (ISO_VAGCommand*)0x0) { + sibling->flags.saw_chunks1 = 0; + } + if ((cmd->music_flag == 0) && (cmd->maybe_sound_handler != 0)) { + PauseVAG(cmd); + strncpy(vsd.name, cmd->name, 0x30); + vsd.id = cmd->id; + // RemoveVagStreamFromList(&vsd, &g_PluginStreamsList); + RemoveVagStreamFromList(&vsd, &g_EEPlayList); + // local_20 = cmd->plugin_id; + // local_24 = cmd->id; + // RemoveLfoStreamFromList(auStack72,&g_LfoStreamsList); + } else { + PauseVAG(cmd); + cmd->flags.stop = 1; + if (sibling != (ISO_VAGCommand*)0x0) { + PauseVAG(sibling); + cmd->flags.stop = 1; + } + } + // CpuResumeIntr(local_18[0]); +} + +void ProcessStreamData() { + EIsoStatus iVar2; + CBuffer* pCVar3; + ISO_VAGCommand* msg; + int iVar5; + ISO_VAGCommand** ppIVar6; + + WaitSema(g_nPriQueueSema); + if (gPriStack[1].count < 8) { + iVar5 = gPriStack[1].count + -1; + if (-1 < iVar5) { + ppIVar6 = (ISO_VAGCommand**)gPriStack[0].cmds + iVar5; + do { + msg = ppIVar6[9]; + if (msg != (ISO_VAGCommand*)0x0) { + // lg::warn("process stream data for {}, {} {} {}\n", msg->name, + // (msg->status == EIsoStatus::OK_2), (msg->active_b != 0), + // (msg->active_c != 0)); + if (((msg->status == EIsoStatus::OK_2) && (msg->active_b != 0)) && (msg->active_c != 0)) { + auto* file = msg->m_pBaseFile; + pCVar3 = &file->m_Buffer; + if (!file) { + pCVar3 = (CBuffer*)0x0; + } + if (((pCVar3 != (CBuffer*)0x0) && + (pCVar3->m_eBufferType != CBuffer::BufferType::EBT_FREE)) && + (msg->callback == ProcessVAGData)) { + iVar2 = ProcessVAGData(msg); + msg->status = iVar2; + if ((iVar2 != EIsoStatus::OK_2) && (msg->safe_to_modify_dma != 0)) { + ReleaseMessage(msg); + } + } + } + if (msg->status != EIsoStatus::OK_2) { + ReleaseMessage(msg); + } + } + iVar5 = iVar5 + -1; + ppIVar6 = ppIVar6 + -1; + } while (-1 < iVar5); + } + } + SignalSema(g_nPriQueueSema); +} + +void CheckVagStreamsProgress() { + int now; + int iVar1; + bool* flags; + int iVar2; + u32* times; + ISO_VAGCommand* cmd; + + if ((g_bVagCmdsInitialized != 0) && (g_bSoundEnable != 0)) { + now = GetSystemTimeLow(); + times = voice_key_times; + flags = voice_key_flags; + iVar2 = 0x2f; + do { + iVar2 = iVar2 + -1; + if ((*flags != 0) && (0x17ff < (u32)(*times - now))) { + *flags = 0; + } + flags = flags + 1; + times = times + 1; + } while (-1 < iVar2); + if ((g_bRecentlyKeyedVoice != 0) && (0x17ff < (u32)(g_nTimeOfLastVoiceKey - now))) { + g_bRecentlyKeyedVoice = 0; + } + iVar2 = 5; + ProcessStreamData(); + // CpuSuspendIntr(local_18); + cmd = g_aVagCmds; + do { + if (((cmd->flags.saw_chunks1 != 0) || + ((cmd->flags.running != 0 && (cmd->flags.file_disappeared != 0)))) || + ((cmd->active_b != 0 && (cmd->id != 0)))) { + iVar1 = CheckVAGStreamProgress(cmd); + if (iVar1 == 0) { + if (cmd->flags.stereo_secondary == 0) { + StopVagStream(cmd); + } + } else { + GetVAGStreamPos(cmd); + } + } + iVar2 = iVar2 + -1; + cmd = cmd + 1; + } while (-1 < iVar2); + // CpuResumeIntr(local_18[0]); + } +} + +void BlockUntilAllVoicesSafe() { + int now; + int last_time; + + last_time = g_nTimeOfLastVoiceKey; + if (g_bRecentlyKeyedVoice != 0) { + do { + now = GetSystemTimeLow(); + } while ((u32)(now - last_time) < 0x900); + } +} + +void BlockUntilVoiceSafe(int voice, u32 delay) { + int iVar1; + int iVar2; + + if (voice_key_flags[voice] != 0) { + iVar2 = voice_key_times[voice]; + do { + iVar1 = GetSystemTimeLow(); + } while ((u32)(iVar1 - iVar2) < delay); + } +} + +void MarkVoiceKeyedOnOff(int voice, u32 time) { + g_nTimeOfLastVoiceKey = time; + voice_key_times[voice] = time; + voice_key_flags[voice] = 1; + g_bRecentlyKeyedVoice = 1; +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/spustreams.h b/game/overlord/jakx/spustreams.h new file mode 100644 index 0000000000..8bd35b1ef3 --- /dev/null +++ b/game/overlord/jakx/spustreams.h @@ -0,0 +1,14 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/overlord/jakx/isocommon.h" + +namespace jakx { +struct ISO_Hdr; +struct ISO_VAGCommand; +void jakx_overlord_init_globals_spustreams(); +EIsoStatus ProcessVAGData(ISO_Hdr* msg); +void StopVagStream(ISO_VAGCommand* cmd); +u32 GetSpuRamAddress(ISO_VAGCommand* cmd); +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/srpc.cpp b/game/overlord/jakx/srpc.cpp new file mode 100644 index 0000000000..b5884a933e --- /dev/null +++ b/game/overlord/jakx/srpc.cpp @@ -0,0 +1,610 @@ +#include "srpc.h" + +#include "common/util/Assert.h" + +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/iso_api.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/rpc_interface.h" +#include "game/overlord/jakx/sbank.h" +#include "game/overlord/jakx/soundcommon.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/vag.h" +#include "game/overlord/jakx/vblank_handler.h" +#include "game/sce/iop.h" +#include "game/sound/sndshim.h" + +namespace jakx { + +using namespace iop; + +// This file has two RPCs: PLAYER and LOADER +// Generally, PLAYER receives commands to play/pause sound effects or streams, which complete +// quickly. + +// LOADER will load soundbanks, and can take some time to complete - likely why it is moved +// into its own RPC, to avoid having soundbank loads block playback of other sounds. + +constexpr int kPlayerBufSize = 0x50 * 128; +static uint8_t s_anRPC_PlayerBuf[kPlayerBufSize]; + +constexpr int kLoaderBufSize = 0x50; +static uint8_t s_anRPC_LoaderBuf[kLoaderBufSize]; + +constexpr u32 kNumLanguages = 12; +static const char* languages[kNumLanguages] = {"ENG", "FRE", "GER", "SPA", "ITA", "COM", + "JAP", "KOR", "RUS", "POR", "DUT", "UKE"}; + +const char* g_pszLanguage = languages[0]; +u8 g_nFPS = 60; +SoundBankInfo* g_LoadingSoundBank = nullptr; + +void jakx_overlord_init_globals_srpc() { + g_nFPS = 60; + g_LoadingSoundBank = nullptr; + g_pszLanguage = languages[0]; +} + +u32 Thread_Player() { + sceSifQueueData dq; + sceSifServeData serve; + + CpuDisableIntr(); + sceSifInitRpc(0); + sceSifSetRpcQueue(&dq, GetThreadId()); + sceSifRegisterRpc(&serve, RpcId::Player, RPC_Player, &s_anRPC_PlayerBuf, kPlayerBufSize, nullptr, + nullptr, &dq); + + CpuEnableIntr(); + sceSifRpcLoop(&dq); + return 0; +} + +u32 Thread_Loader() { + sceSifQueueData dq; + sceSifServeData serve; + + CpuDisableIntr(); + sceSifInitRpc(0); + sceSifSetRpcQueue(&dq, GetThreadId()); + sceSifRegisterRpc(&serve, RpcId::Loader, RPC_Loader, &s_anRPC_LoaderBuf, kLoaderBufSize, nullptr, + nullptr, &dq); + + CpuEnableIntr(); + sceSifRpcLoop(&dq); + return 0; +} + +void* RPC_Player(unsigned int, void* msg, int size) { + if (!g_bSoundEnable) { + return nullptr; + } + + // const auto* cmd = (RPC_Player_Cmd*)msg; + ovrld_log(LogCategory::PLAYER_RPC, "Got Player RPC with {} cmds", size / kPlayerCommandStride); + const u8* m_ptr = (const u8*)msg; + const u8* end = m_ptr + size; + + for (; m_ptr < end; m_ptr += kPlayerCommandStride) { + switch (((const Rpc_Player_Base_Cmd*)m_ptr)->command) { + case SoundCommand::PLAY: { + const auto* cmd = (const Rpc_Player_Play_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[Player RPC] command PLAY {} id {}", cmd->name.data, + cmd->sound_id); + s32 id = cmd->sound_id; + if (id) { + auto* sound = LookupSound(id); + if (!sound) { + ovrld_log(LogCategory::PLAYER_RPC, "[Player RPC] allocating a new one"); + sound = AllocateSound(); + if (sound) { + SFXUserData user_val; + strcpy_toupper(sound->name.data, cmd->name.data); + sound->params = cmd->params; + sound->auto_time = 0; + s32 get_status = + snd_GetSoundUserData(nullptr, nullptr, -1, sound->name.data, &user_val); + s32 mask = sound->params.mask; + if ((mask & 8) == 0) { + sound->params.group = 0; + } + if ((mask & 0x40) == 0) { + if (get_status == 0 || user_val.data[0] == 0) { + sound->params.fo_min = 5; + } else { + sound->params.fo_min = (int16_t)user_val.data[0]; + } + } + if ((mask & 0x80) == 0) { + if (get_status == 0 || user_val.data[1] == 0) { + sound->params.fo_max = 0x1e; + } else { + sound->params.fo_max = (int16_t)user_val.data[1]; + } + } + if ((mask & 0x100) == 0) { + u32 fo_curve = 0; + if (get_status != 0) { + fo_curve = user_val.data[2]; + } + (sound->params).fo_curve = fo_curve; + } + (sound->params).fo_curve = GetFalloffCurve(sound->params.fo_curve); + auto handle = snd_PlaySoundByNameVolPanPMPB( + 0, 0, sound->name.data, GetVolume(sound), GetPan(sound), + (int)(sound->params).pitch_mod, (int)(sound->params).bend); + sound->id = id; + sound->sound_handle = handle; + if (handle != 0) { + if ((sound->params.mask & 0x800) != 0) { + snd_SetSoundReg(sound->sound_handle, 0, sound->params.reg[0]); + } + if ((sound->params.mask & 0x1000) != 0) { + snd_SetSoundReg(sound->sound_handle, 1, sound->params.reg[1]); + } + if ((sound->params.mask & 0x2000) != 0) { + snd_SetSoundReg(sound->sound_handle, 2, sound->params.reg[2]); + } + } + } + } else { + SFXUserData user_val; + sound->params = cmd->params; + s32 get_status = + snd_GetSoundUserData(nullptr, nullptr, -1, sound->name.data, &user_val); + s32 mask = (sound->params).mask; + if ((mask & 8) == 0) { + (sound->params).group = 0; + } + if ((mask & 0x40) == 0) { + if (get_status == 0 || user_val.data[0] == 0) { + (sound->params).fo_min = 5; + } else { + (sound->params).fo_min = user_val.data[0]; + } + } + if ((mask & 0x80) == 0) { + if (get_status == 0 || user_val.data[1] == 0) { + (sound->params).fo_max = 0x1e; + } else { + (sound->params).fo_max = user_val.data[1]; + } + } + if ((mask & 0x100) == 0) { + s8 fo_curve = 0; + if (get_status != 0) { + fo_curve = user_val.data[2]; + } + (sound->params).fo_curve = fo_curve; + } + (sound->params).fo_curve = GetFalloffCurve(sound->params.fo_curve); + UpdateVolume(sound); + snd_SetSoundPitchModifier(sound->sound_handle, (int)(sound->params).pitch_mod); + if (((sound->params).mask & 4) != 0) { + snd_SetSoundPitchBend(sound->sound_handle, (int)(sound->params).bend); + } + if (((sound->params).mask & 0x800) != 0) { + snd_SetSoundReg(sound->sound_handle, 0, sound->params.reg[0]); + } + if (((sound->params).mask & 0x1000) != 0) { + snd_SetSoundReg(sound->sound_handle, 1, (int)(char)(sound->params).reg[1]); + } + if (((sound->params).mask & 0x2000) != 0) { + snd_SetSoundReg(sound->sound_handle, 2, sound->params.reg[2]); + } + } + } + } break; + case SoundCommand::PAUSE_SOUND: { + const auto* cmd = (const Rpc_Player_Sound_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Pause Sound ID {}", cmd->sound_id); + if (cmd->sound_id) { + auto* sound = LookupSound(cmd->sound_id); + if (sound) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching Sound {} to pause", + sound->name.data); + snd_PauseSound(sound->sound_handle); + } else { + auto* vag = FindVagStreamId(cmd->sound_id); + if (vag) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching VAG {} to pause", + vag->name); + PauseVAG(vag); + } + } + } + } break; + case SoundCommand::STOP_SOUND: { + const auto* cmd = (const Rpc_Player_Sound_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] stop Sound ID {}", cmd->sound_id); + if (cmd->sound_id) { + auto* sound = LookupSound(cmd->sound_id); + if (sound) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching Sound {} to stop", + sound->name.data); + snd_StopSound(sound->sound_handle); + } else { + auto* vag = FindVagStreamId(cmd->sound_id); + if (vag) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching VAG {} to stop", + vag->name); + StopVagStream(vag); + } + } + } + } break; + case SoundCommand::CONTINUE_SOUND: { + const auto* cmd = (const Rpc_Player_Sound_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] continue Sound ID {}", cmd->sound_id); + if (cmd->sound_id) { + auto* sound = LookupSound(cmd->sound_id); + if (sound) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching Sound {} to continue", + sound->name.data); + snd_ContinueSound(sound->sound_handle); + } else { + auto* vag = FindVagStreamId(cmd->sound_id); + if (vag) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching VAG {} to continue", + vag->name); + UnPauseVAG(vag); + } + } + } + } break; + case SoundCommand::SET_PARAM: { + const auto* cmd = (const Rpc_Player_Set_Param_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] SET_PARAM Sound ID {}", cmd->sound_id); + if (cmd->sound_id) { + auto* sound = LookupSound(cmd->sound_id); + if (sound) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching Sound {} to SET_PARAM", + sound->name.data); + auto& params = cmd->params; + u16 mask = cmd->params.mask; + s32 atime = cmd->auto_time; + s32 afrom = cmd->auto_from; + if ((mask & 1) != 0) { + if ((mask & 0x10) == 0) { + sound->params.volume = params.volume; + } else { + sound->auto_time = atime; + sound->new_volume = params.volume; + } + } + if ((mask & 0x20) != 0) { + sound->params.trans[0] = params.trans[0]; + sound->params.trans[1] = params.trans[1]; + sound->params.trans[2] = params.trans[2]; + } + if ((mask & 0x21) != 0) { + UpdateVolume(sound); + } + if ((mask & 2) != 0) { + auto pitch_mod = params.pitch_mod; + sound->params.pitch_mod = pitch_mod; + if ((mask & 0x10) == 0) { + snd_SetSoundPitchModifier(sound->sound_handle, params.pitch_mod); + } else { + snd_AutoPitch(sound->sound_handle, pitch_mod, atime, afrom); + } + } + if ((mask & 4) != 0) { + auto bend = params.bend; + sound->params.bend = bend; + if ((mask & 0x10) == 0) { + snd_SetSoundPitchBend(sound->sound_handle, params.bend); + } else { + snd_AutoPitchBend(sound->sound_handle, (int)bend, atime, afrom); + } + } + if ((mask & 0x400) != 0) { + sound->params.priority = params.priority; + } + if ((mask & 8) != 0) { + sound->params.group = params.group; + } + if ((mask & 0x40) != 0) { + sound->params.fo_min = params.fo_min; + } + if ((mask & 0x80) != 0) { + sound->params.fo_max = params.fo_max; + } + if ((mask & 0x100) != 0) { + sound->params.fo_curve = GetFalloffCurve(params.fo_curve); + } + if ((mask & 0x800) != 0) { + sound->params.reg[0] = params.reg[0]; + snd_SetSoundReg(sound->sound_handle, 0, params.reg[0]); + } + if ((mask & 0x1000) != 0) { + sound->params.reg[1] = params.reg[1]; + snd_SetSoundReg(sound->sound_handle, 1, params.reg[1]); + } + if ((mask & 0x2000) != 0) { + sound->params.reg[2] = params.reg[2]; + snd_SetSoundReg(sound->sound_handle, 2, params.reg[2]); + } + } else { + auto* vag = FindVagStreamId(cmd->sound_id); + if (vag) { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Found matching VAG {} to SET_PARAM", + vag->name); + auto& params = cmd->params; + auto mask = params.mask; + if ((mask & 2) != 0) { + SetVAGStreamPitch(cmd->sound_id, params.pitch_mod); + } + if ((mask & 0x20) != 0) { + vag->trans[0] = params.trans[0]; + vag->trans[1] = params.trans[1]; + vag->trans[2] = params.trans[2]; + vag->updated_trans = 1; + } + if ((mask & 8) != 0) { + vag->play_group = params.group; + } + if ((mask & 0x40) != 0) { + vag->fo_min = (int)params.fo_min; + } + if ((mask & 0x80) != 0) { + vag->fo_max = (int)params.fo_max; + } + if ((mask & 0x100) != 0) { + vag->fo_curve = GetFalloffCurve(params.fo_curve); + } + if ((mask & 1) != 0) { + vag->play_volume = params.volume; + } + } + } + } + } break; + case SoundCommand::SET_MASTER_VOLUME: { + const auto* cmd = (const Rpc_Player_Set_Master_Volume_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Set Master Volume to {}", cmd->volume); + for (int i = 0; i < 17; i++) { + if (cmd->group & (1 << i)) { + g_anMasterVolume[i] = cmd->volume; + snd_SetMasterVolume(i, cmd->volume); + SetAllVagsVol(i); + } + } + } break; + case SoundCommand::PAUSE_GROUP: { + const auto* cmd = (const Rpc_Player_Group_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Pause groups 0b{:b}", cmd->group); + snd_PauseAllSoundsInGroup(cmd->group); + if (cmd->group & 4) { + PauseVAGStreams(); + } + if (cmd->group & 2) { + g_bMusicPause = true; + } + } break; + case SoundCommand::STOP_GROUP: { + const auto* cmd = (const Rpc_Player_Group_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Stop groups 0b{:b}", cmd->group); + KillSoundsInGroup(cmd->group); + if (cmd->group & 4) { + ISO_VAGCommand vag_cmd; + vag_cmd.msg_type = ISO_Hdr::MsgType::VAG_STOP; // seems unsupported by iso thread. + vag_cmd.mbox_reply = 0; + vag_cmd.thread_to_wake = 0; + vag_cmd.vag_dir_entry = nullptr; + vag_cmd.name[0] = 0; + vag_cmd.maybe_sound_handler = 0; + vag_cmd.id = 0; + vag_cmd.priority_pq = 0; + StopVagStream(&vag_cmd); + } + } break; + case SoundCommand::CONTINUE_GROUP: { + const auto* cmd = (const Rpc_Player_Group_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Continue groups 0b{:b}", cmd->group); + snd_ContinueAllSoundsInGroup(cmd->group); + if (cmd->group & 4) { + UnpauseVAGStreams(); + } + if (cmd->group & 2) { + g_bMusicPause = false; + } + } break; + case SoundCommand::SET_REVERB: { + ovrld_log(LogCategory::WARN, "[RPC Player] Unimplemented set reverb."); + } break; + case SoundCommand::SET_EAR_TRANS: { + const auto* cmd = (const Rpc_Player_Set_Ear_Trans_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] set ear trans"); + SetEarTrans(cmd->ear_trans0, cmd->ear_trans1, cmd->ear_trans, cmd->cam_forward, + cmd->cam_left, cmd->cam_scale, (cmd->cam_inverted != 0)); + } break; + case SoundCommand::SHUTDOWN: { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] Shutdown!"); + WaitSema(g_n989Semaphore); + if (g_bSoundEnable) { + g_bSoundEnable = false; + snd_StopSoundSystem(); + } + SignalSema(g_n989Semaphore); + } break; + case SoundCommand::SET_FPS: { + const auto* cmd = (const Rpc_Player_Set_Fps_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] set fps {}", (int)cmd->fps); + g_nFPS = cmd->fps; + } break; + case SoundCommand::CANCEL_DGO: { + const auto* cmd = (const Rpc_Player_Cancel_Dgo_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Player] cancel dgo {}", cmd->id); + CancelDGONoSync(cmd->id); + } break; + case SoundCommand::SET_MIDI_REG: + // this is what the real overlord does - just ignore it! + break; + default: + ovrld_log(LogCategory::WARN, "[RPC Player] Unsupported Player {}", + (int)((const Rpc_Player_Base_Cmd*)m_ptr)->command); + ASSERT_NOT_REACHED(); + } + } + + return nullptr; +} + +void* RPC_Loader(unsigned int, void* msg, int size) { + if (!g_bSoundEnable) { + return nullptr; + } + + // const auto* cmd = (RPC_Player_Cmd*)msg; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got Loader RPC with {} cmds", + size / kLoaderCommandStride); + u8* m_ptr = (u8*)msg; + const u8* end = m_ptr + size; + + for (; m_ptr < end; m_ptr += kLoaderCommandStride) { + switch (((const Rpc_Player_Base_Cmd*)m_ptr)->command) { + case SoundCommand::LOAD_BANK: { + auto* cmd = (const Rpc_Loader_Load_Bank_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got sound bank load command: {}", + cmd->bank_name.data); + // src = &cmd->bank_name; + if (!LookupBank(cmd->bank_name.data)) { + auto* info = AllocateBankName(cmd->bank_name.data, cmd->mode); + if (info) { + strncpyz(info->m_name1, cmd->bank_name.data, 0x10); + info->in_use = 1; + info->unk0 = 0; + g_LoadingSoundBank = info; + if (LoadSoundBankToIOP(cmd->bank_name.data, info, cmd->priority) == 0) { + info->loaded = 1; + } else { + info->loaded = 0; + info->in_use = 0; + } + g_LoadingSoundBank = nullptr; + } + } + } break; + case SoundCommand::LOAD_MUSIC: { + auto* cmd = (const Rpc_Loader_Bank_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got music load command: {}", + cmd->bank_name.data); + + // lock + u32 wait_status = 1; + while (wait_status) { + wait_status = WaitSema(g_nMusicSemaphore); + } + + // set music name + if ((cmd->bank_name).data[0] == 0) { + g_szTargetMusicName[0] = 0; + } else { + strcpy(g_szTargetMusicName, cmd->bank_name.data); + } + + // release + SignalSema(g_nMusicSemaphore); + } break; + + case SoundCommand::UNLOAD_BANK: { + auto* cmd = (const Rpc_Loader_Bank_Cmd*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got bank load unload command: {}", + cmd->bank_name.data); + SoundBankInfo* ifno = LookupBank(cmd->bank_name.data); + if (ifno) { + auto snd_handle = ifno->snd_handle; + ifno->snd_handle = nullptr; + if (ifno->unk0 == 0) { + ifno->in_use = 0; + } + ifno->mode = 0; + ifno->loaded = 0; + snd_UnloadBank(snd_handle); + snd_ResolveBankXREFS(); + } + } break; + + case SoundCommand::GET_IRX_VERSION: { + auto* cmd = (Rpc_Loader_Get_Irx_Version*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got IRX version command"); + g_nInfoEE = cmd->ee_addr; + cmd->major = 4; + cmd->minor = 0; + return cmd; + } break; + + case SoundCommand::SET_LANGUAGE: { + auto* cmd = (Rpc_Loader_Set_Language*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got set language command {}", cmd->lang); + ASSERT(cmd->lang < kNumLanguages); + g_pszLanguage = languages[cmd->lang]; + } break; + + case SoundCommand::UNLOAD_MUSIC: { + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got unload music command"); + + // lock + u32 wait_status = 1; + while (wait_status) { + wait_status = WaitSema(g_nMusicSemaphore); + } + + // set music name + g_szTargetMusicName[0] = 0; + + // release + SignalSema(g_nMusicSemaphore); + } break; + + case SoundCommand::SET_STEREO_MODE: { + auto* cmd = (Rpc_Loader_Set_Stereo_Mode*)m_ptr; + ovrld_log(LogCategory::PLAYER_RPC, "[RPC Loader] Got set stereo command {}", cmd->mode); + + switch (cmd->mode) { + case 0: + SetPlaybackMode(1); + break; + case 1: + SetPlaybackMode(2); + break; + case 2: + SetPlaybackMode(0); + break; + default: + ASSERT_NOT_REACHED(); + } + } break; + + // added + case SoundCommand::LIST_SOUNDS: { + PrintBanks(); + PrintSounds(); + } break; + + default: + ovrld_log(LogCategory::WARN, "[RPC Loader] Unsupported Loader {}", + (int)((const Rpc_Player_Base_Cmd*)m_ptr)->command); + ASSERT_NOT_REACHED(); + break; + } + } + return nullptr; +} + +void SetVagStreamName(ISO_VAGCommand* cmd, int len) { + ASSERT(cmd); + if (!cmd->music_flag && cmd->info_idx < 4) { + if (!len) { + g_SRPCSoundIOPInfo.stream_name[cmd->info_idx].chars[0] = 0; + } else { + strncpy(g_SRPCSoundIOPInfo.stream_name[cmd->info_idx].chars, cmd->name, 0x30); + } + } else { + // ASSERT_NOT_REACHED(); + } +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/srpc.h b/game/overlord/jakx/srpc.h new file mode 100644 index 0000000000..80f4aa7417 --- /dev/null +++ b/game/overlord/jakx/srpc.h @@ -0,0 +1,16 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_srpc(); +u32 Thread_Player(); +u32 Thread_Loader(); +struct ISO_VAGCommand; +void SetVagStreamName(ISO_VAGCommand* cmd, int len); +void* RPC_Player(unsigned int fno, void* msg, int size); +void* RPC_Loader(unsigned int fno, void* msg, int size); +extern const char* g_pszLanguage; +extern u8 g_nFPS; + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/ssound.cpp b/game/overlord/jakx/ssound.cpp new file mode 100644 index 0000000000..459ae653bc --- /dev/null +++ b/game/overlord/jakx/ssound.cpp @@ -0,0 +1,1002 @@ +#include "ssound.h" + +#include + +#include "common/util/Assert.h" + +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" +#include "game/sound/sdshim.h" +#include "game/sound/sndshim.h" + +namespace jakx { + +struct Curve { + s32 a, b, c, d; +}; + +constexpr int kNumSounds = 0x40; + +using namespace iop; +s32 g_n989Semaphore = -1; +s32 g_EarTransSema = -1; +bool g_bSoundEnable = true; +u32 g_anStreamVoice[6]; +VolumePair g_aPanTable[361]; +SoundInfo gSounds[kNumSounds]; +s32 gEarTrans[6]; +s32 gCamTrans[3]; +s32 gCamForward[3]; +s32 gCamLeft[3]; +s32 gCamScale; +Curve gCurves[0x29]; +std::array unktable; +bool g_CameraInvert = false; +u32 gLastTick = 0; + +static s32 sqrt_table[256] = { + 0, 4096, 5793, 7094, 8192, 9159, 10033, 10837, 11585, 12288, 12953, 13585, 14189, + 14768, 15326, 15864, 16384, 16888, 17378, 17854, 18318, 18770, 19212, 19644, 20066, 20480, + 20886, 21283, 21674, 22058, 22435, 22806, 23170, 23530, 23884, 24232, 24576, 24915, 25249, + 25580, 25905, 26227, 26545, 26859, 27170, 27477, 27780, 28081, 28378, 28672, 28963, 29251, + 29537, 29819, 30099, 30377, 30652, 30924, 31194, 31462, 31727, 31991, 32252, 32511, 32768, + 33023, 33276, 33527, 33776, 34024, 34270, 34514, 34756, 34996, 35235, 35472, 35708, 35942, + 36175, 36406, 36636, 36864, 37091, 37316, 37540, 37763, 37985, 38205, 38424, 38642, 38858, + 39073, 39287, 39500, 39712, 39923, 40132, 40341, 40548, 40755, 40960, 41164, 41368, 41570, + 41771, 41972, 42171, 42369, 42567, 42763, 42959, 43154, 43348, 43541, 43733, 43925, 44115, + 44305, 44494, 44682, 44869, 45056, 45242, 45427, 45611, 45795, 45977, 46160, 46341, 46522, + 46702, 46881, 47059, 47237, 47415, 47591, 47767, 47942, 48117, 48291, 48465, 48637, 48809, + 48981, 49152, 49322, 49492, 49661, 49830, 49998, 50166, 50332, 50499, 50665, 50830, 50995, + 51159, 51323, 51486, 51649, 51811, 51972, 52134, 52294, 52454, 52614, 52773, 52932, 53090, + 53248, 53405, 53562, 53719, 53874, 54030, 54185, 54340, 54494, 54647, 54801, 54954, 55106, + 55258, 55410, 55561, 55712, 55862, 56012, 56162, 56311, 56459, 56608, 56756, 56903, 57051, + 57198, 57344, 57490, 57636, 57781, 57926, 58071, 58215, 58359, 58503, 58646, 58789, 58931, + 59073, 59215, 59357, 59498, 59639, 59779, 59919, 60059, 60199, 60338, 60477, 60615, 60753, + 60891, 61029, 61166, 61303, 61440, 61576, 61712, 61848, 61984, 62119, 62254, 62388, 62523, + 62657, 62790, 62924, 63057, 63190, 63323, 63455, 63587, 63719, 63850, 63982, 64113, 64243, + 64374, 64504, 64634, 64763, 64893, 65022, 65151, 65279, 65408, +}; + +void jakx_overlord_init_globals_ssound() { + g_bSoundEnable = true; + g_n989Semaphore = -1; + g_EarTransSema = -1; + for (auto& x : g_anStreamVoice) { + x = 0; + } + for (auto& x : gSounds) { + x = {}; + } + unktable.fill(0); + g_CameraInvert = false; + gLastTick = 0; +} +void InitSound() { + for (auto& sound : gSounds) { + sound.id = 0; + } + + int j = 0; + do { + unktable[j] = 0; + unktable[j + 0x2c] = 0; + unktable[j + 0x58] = 0; + unktable[j + 0x84] = 0; + unktable[j + 0xb0] = 0; + j = j + 1; + } while (j < 0x29); + + SetCurve(0, 0, 0, 1, 0, 0, 0, 0); + SetCurve(1, 0, 0, 0, 0, 0, 1, 0); + SetCurve(2, 0, 0, 1, 0, 0, 0, 0); + SetCurve(3, 0x1000, 0, 1, 0, 0, 0, 0); + SetCurve(4, 0, 0x1000, 1, 0, 0, 0, 0); + SetCurve(5, 0x800, 0, 1, 0, 0, 0, 0); + SetCurve(6, 0x800, 0x800, 1, 0, 0, 0, 0); + SetCurve(7, 0xfffff000, 0, 1, 0, 0, 0, 0); + SetCurve(8, 0xfffff800, 0, 1, 0, 0, 0, 0); + SetCurve(9, 0, 0, 1, 0, 0, 0, 0); + SetCurve(10, 0, 0, 0, 0, 0, 0, 0); + SetCurve(0xb, 0, 0, 1, 0, 0, 0, 0); + SetCurve(0xc, 0, 0, 1, 0, 1, 0, 0); + SetCurve(0xd, 0x1000, 0, 1, 0, 1, 0, 0); + SetCurve(0xe, 0, 0x1000, 1, 0, 1, 0, 0); + SetCurve(0xf, 0x800, 0, 1, 0, 1, 0, 0); + SetCurve(0x10, 0x800, 0x800, 1, 0, 1, 0, 0); + SetCurve(0x11, 0xfffff000, 0, 1, 0, 1, 0, 0); + SetCurve(0x12, 0xfffff800, 0, 1, 0, 1, 0, 0); + SetCurve(0x13, 0, 0, 0, 0, 1, 0, 0); + SetCurve(0x14, 0, 0, 0, 0, 0, 1, 1); + SetCurve(0x15, 0, 0, 1, 0, 0, 0, 1); + SetCurve(0x16, 0x1000, 0, 1, 0, 0, 0, 1); + SetCurve(0x17, 0, 0x1000, 1, 0, 0, 0, 1); + SetCurve(0x18, 0x800, 0, 1, 0, 0, 0, 1); + SetCurve(0x19, 0x800, 0x800, 1, 0, 0, 0, 1); + SetCurve(0x1a, 0xfffff000, 0, 1, 0, 0, 0, 1); + SetCurve(0x1b, 0xfffff800, 0, 1, 0, 0, 0, 1); + SetCurve(0x1c, 0, 0, 1, 0, 0, 0, 1); + SetCurve(0x1d, 0, 0, 0, 0, 0, 0, 1); + SetCurve(0x1e, 0, 0, 1, 0, 0, 0, 1); + SetCurve(0x1f, 0, 0, 1, 0, 1, 0, 1); + SetCurve(0x20, 0x1000, 0, 1, 0, 1, 0, 1); + SetCurve(0x21, 0, 0x1000, 1, 0, 1, 0, 1); + SetCurve(0x22, 0x800, 0, 1, 0, 1, 0, 1); + SetCurve(0x23, 0x800, 0x800, 1, 0, 1, 0, 1); + SetCurve(0x24, 0xfffff000, 0, 1, 0, 1, 0, 1); + SetCurve(0x25, 0xfffff800, 0, 1, 0, 1, 0, 1); + SetCurve(0x26, 0, 0, 0, 0, 1, 0, 1); + SetCurve(0x27, 0, 0, 1, 1, 0, 1, 0); + SetCurve(0x28, 0, 0, 1, 1, 0, 1, 1); + + // changed + // snd_StartSoundSystemEx(2); + snd_StartSoundSystem(); + + // iVar4 = 5; + // snd_RegisterIOPMemAllocator(FUN_0000dc7c,FUN_0000de84); + // snd_LockVoiceAllocatorEx(1,0x12345678); + // piVar1 = g_anStreamVoice; + // do { + // iVar2 = snd_ExternVoiceAlloc(2,0x7f); + // iVar4 = iVar4 + -1; + // *piVar1 = iVar2 * 2 + ((iVar2 / 6 + (iVar2 >> 0x1f) >> 2) - (iVar2 >> 0x1f)) * -0x2f; + // piVar1 = piVar1 + 1; + // } while (-1 < iVar4); + + g_anStreamVoice[0] = SD_VOICE(0, 0); + g_anStreamVoice[1] = SD_VOICE(0, 1); + g_anStreamVoice[2] = SD_VOICE(0, 2); + g_anStreamVoice[3] = SD_VOICE(0, 3); + g_anStreamVoice[4] = SD_VOICE(0, 4); + g_anStreamVoice[5] = SD_VOICE(0, 5); + + // snd_UnlockVoiceAllocator(); + // snd_SetMixerMode(0,0); + // iVar4 = 0; + // do { + // iVar2 = iVar4 + 1; + // snd_SetGroupVoiceRange(iVar4,6,0x2f); + // iVar4 = iVar2; + // } while (iVar2 < 0xe); + // snd_SetGroupVoiceRange(2,0,5); + + // what is this even doing. + // sceSdGetAddr(0x1c00); + // sceSdGetAddr(0x1d00); + // sceSdGetAddr(0x1c01); + // sceSdGetAddr(0x1d01); + // CpuSuspendIntr(local_18); + // sceSdSetAddr(0,0); + // sceSdSetAddr(1,0); + // sceSdSetAddr(0,0xff); + // sceSdSetAddr(1,0xff); + // CpuResumeIntr(local_18[0]); + + // uVar3 = sceSdGetAddr(0x1c01); + // snd_SRAMMarkUsed(uVar3,0x7000); + // uVar3 = sceSdGetAddr(0x1c00); + // snd_SRAMMarkUsed(uVar3,0x7000); + // local_3c = 0x104; + // local_36 = 0xa7b; + // local_38 = 0xa7b; + // g_nCore1ReverbMode = 4; + // g_nCore0ReverbMode = 4; + // local_34 = 0; + // local_30 = 0; + // local_40 = 0; + // sceSdSetEffectAttr(0, &local_40); + // local_40 = 1; + // sceSdSetEffectAttr(1, &local_40); + // maybe_sceSdSetCoreAttr(2, 1); + // maybe_sceSdSetCoreAttr(3, 1); + + // TODO: this is possibly very wrong: + // g_aPanTable = snd_GetPanTable(); + for (int i = 0; i < 91; i++) { + s16 opposing_front = static_cast(((i * 0x33ff) / 90) + 0xc00); + + s16 rear_right = static_cast(((i * -0x2800) / 90) + 0x3400); + s16 rear_left = static_cast(((i * -0xbff) / 90) + 0x3fff); + + g_aPanTable[90 - i].left = 0x3FFF; + g_aPanTable[180 - i].left = opposing_front; + g_aPanTable[270 - i].left = rear_right; + g_aPanTable[360 - i].left = rear_left; + + g_aPanTable[i].right = opposing_front; + g_aPanTable[90 + i].right = 0x3FFF; + g_aPanTable[180 + i].right = rear_left; + g_aPanTable[270 + i].right = rear_right; + } + + SetPlaybackMode(2); + + SemaParam param; + param.attr = 1; + param.init_count = 1; + param.max_count = 1; + param.option = 0; + g_nMusicSemaphore = CreateSema(¶m); + ASSERT(g_nMusicSemaphore >= 0); + param.attr = 1; + param.init_count = 1; + param.max_count = 1; + param.option = 0; + g_n989Semaphore = CreateSema(¶m); + ASSERT(g_n989Semaphore >= 0); + + param.max_count = 1; + param.attr = 1; + param.init_count = 1; + param.option = 0; + g_EarTransSema = CreateSema(¶m); + ASSERT(g_EarTransSema >= 0); + + // Init989Plugins(); + // InitStreamLfoHandler(); + // InitVagStreamList((List*)&g_PluginStreamsList, 4, s_plugin_00015918); + InitVagStreamList(&g_EEStreamsList, 4, "ee"); + InitVagStreamList(&g_EEPlayList, 8, "play"); + InitVagStreamList(&g_RequestedStreamsList, 8, "streams"); + InitVagStreamList(&g_NewStreamsList, 4, "new"); +} + +void PrintSounds() { + for (auto& sound : gSounds) { + printf("SOUND %d %s\n", sound.id, sound.name.data); + printf(" still playing? %d\n", snd_SoundIsStillPlaying(sound.sound_handle)); + } +} + +SoundInfo* LookupSound(int id) { + if (id == 0) { + return nullptr; + } + + for (auto& sound : gSounds) { + if (sound.id == id) { + s32 handle = snd_SoundIsStillPlaying(sound.sound_handle); + sound.sound_handle = handle; + if (handle) { + return &sound; + } else { + sound.id = 0; + return nullptr; + } + } + } + + return nullptr; +} + +void CleanSounds() { + for (auto& sound : gSounds) { + if (sound.id) { + s32 handle = snd_SoundIsStillPlaying(sound.sound_handle); + sound.sound_handle = handle; + if (handle == 0) { + sound.id = 0; + } + } + } +} + +void KillSoundsInGroup(u32 group) { + for (auto& sound : gSounds) { + if (sound.id) { + s32 handle = snd_SoundIsStillPlaying(sound.sound_handle); + sound.sound_handle = handle; + if (handle) { + if (sound.params.group & group) { + snd_StopSound(handle); + sound.id = 0; + } + } else { + sound.id = 0; + } + } + } +} + +void KillLeastUsefulSound() { + int unique_sounds = 0; + struct Entry { + u32 id; + u32 count; + SoundInfo* info; + }; + Entry entries[kNumSounds]; + Entry* best_entry = nullptr; + + for (auto& sound : gSounds) { + if (sound.id) { + Entry* existing_entry = nullptr; + u32 uid = snd_GetSoundID(sound.sound_handle); + + // look for entry: + for (int i = 0; i < unique_sounds; i++) { + if (entries[i].id == uid) { + existing_entry = &entries[i]; + break; + } + } + + // if none found, create + if (!existing_entry) { + existing_entry = &entries[unique_sounds]; + unique_sounds++; + existing_entry->id = uid; + existing_entry->count = 0; + existing_entry->info = &sound; + } + + // update + existing_entry->count++; + + // se if we're best + if (!best_entry) { + best_entry = existing_entry; + } else { + if (best_entry->count < existing_entry->count) { + best_entry = existing_entry; + } + } + + // update entry: + + // update best: + } + } + + if (best_entry) { + snd_StopSound(best_entry->info->sound_handle); + best_entry->info->id = 0; + } +} + +SoundInfo* AllocateSound() { + for (auto& sound : gSounds) { + if (!sound.id) { + return &sound; + } + } + + CleanSounds(); + for (auto& sound : gSounds) { + if (!sound.id) { + return &sound; + } + } + + KillLeastUsefulSound(); + + for (auto& sound : gSounds) { + if (!sound.id) { + return &sound; + } + } + + ASSERT_NOT_REACHED(); + return nullptr; +} + +u32 CalculateFalloffVolume(s32* trans, + u32 vol, + u32 fo_curve, + u32 fo_min, + u32 fo_max, + u32* outa, + u32* outb) { + ASSERT(fo_curve < 0x29); + // undefined4 uVar1; + u32 uVar2; + int iVar3; + int iVar4; + u32 uVar5; + int iVar6; + int iVar7; + int iVar8; + u32 uVar9; + u32 uVar10; + + uVar10 = 0; + WaitSema(g_EarTransSema); + if (outa) { + *outa = 0; + } + if (outb) { + *outb = 0; + } + if (unktable[fo_curve + 0x84] != 0) { + SignalSema(g_EarTransSema); + return vol; + } + if (unktable[fo_curve + 0x58] != 0) { + trans = gEarTrans + 3; + } + switch (fo_curve) { + case 9: + case 0xb: + case 0x1c: + case 0x1e: + iVar8 = gEarTrans[3] - *trans; + iVar3 = gEarTrans[4] - trans[1]; + iVar7 = gEarTrans[5] - trans[2]; + uVar2 = 3; + if (outa) { + LAB_0000d094: + *outa = uVar2; + } + break; + case 10: + case 0x13: + case 0x1d: + case 0x26: + iVar8 = 0; + iVar3 = gEarTrans[1] - trans[1]; + iVar7 = 0; + if (outa) { + *outa = 2; + } + goto LAB_0000d0a4; + default: + iVar8 = gEarTrans[0] - *trans; + iVar7 = gEarTrans[2] - trans[2]; + iVar3 = gEarTrans[1] - trans[1]; + if (outa) { + uVar2 = 1; + goto LAB_0000d094; + } + } + if (iVar8 < 0) { + iVar8 = -iVar8; + } +LAB_0000d0a4: + if (iVar3 < 0) { + iVar3 = -iVar3; + } + if (iVar7 < 0) { + iVar7 = -iVar7; + } + fo_min = fo_min << 8; + fo_max = fo_max << 8; + uVar9 = 0; + iVar6 = iVar3; + if (iVar3 < iVar7) { + iVar6 = iVar7; + } + iVar4 = fo_max; + if (fo_max < iVar8) { + iVar4 = iVar8; + } + if (iVar4 < iVar6) { + iVar4 = iVar6; + } + while (0x7fff < iVar4) { + fo_max = fo_max >> 1; + fo_min = fo_min >> 1; + iVar8 = iVar8 >> 1; + iVar3 = iVar3 >> 1; + iVar7 = iVar7 >> 1; + uVar9 = uVar9 + 1; + iVar4 = iVar4 >> 1; + } + if (gCamScale != 0x10000) { + iVar8 = iVar8 * gCamScale >> 0x10; + iVar3 = iVar3 * gCamScale >> 0x10; + iVar7 = iVar7 * gCamScale >> 0x10; + if (0x10000 < gCamScale) { + iVar6 = iVar3; + if (iVar3 < iVar7) { + iVar6 = iVar7; + } + iVar4 = fo_max; + if (fo_max < iVar8) { + iVar4 = iVar8; + } + if (iVar4 < iVar6) { + iVar4 = iVar6; + } + while (0x7fff < iVar4) { + fo_max = fo_max >> 1; + fo_min = fo_min >> 1; + iVar8 = iVar8 >> 1; + iVar3 = iVar3 >> 1; + iVar7 = iVar7 >> 1; + uVar9 = uVar9 + 1; + iVar4 = iVar4 >> 1; + } + } + } + if ((outb) || (((iVar8 <= fo_max && (iVar3 <= fo_max)) && (iVar7 <= fo_max)))) { + uVar10 = iVar8 * iVar8 + iVar3 * iVar3 + iVar7 * iVar7; + iVar8 = 0; + if (uVar10 != 0) { + uVar5 = 0; + while ((uVar10 & 0xc0000000) == 0) { + uVar10 = uVar10 << 2; + uVar5 = uVar5 + 1; + } + iVar8 = (int)(u32)sqrt_table[uVar10 >> 0x18] >> (uVar5 & 0x1f); + } + if (outb) { + *outb = iVar8 << (uVar9 & 0x1f); + } + uVar10 = vol; + if ((fo_min < iVar8) && (uVar10 = 0, iVar8 < fo_max)) { + uVar10 = iVar8 - fo_min; + uVar9 = fo_max - fo_min; + while (0xffff < uVar10) { + uVar10 = uVar10 >> 1; + uVar9 = (int)uVar9 >> 1; + } + uVar5 = (uVar10 << 0x10) / uVar9; + if (uVar9 == 0) { + ASSERT_NOT_REACHED(); + } + uVar10 = vol; + if (uVar5 != 0x10000) { + uVar10 = uVar5 * uVar5 >> 0x10; + uVar10 = gCurves[fo_curve].c * uVar5 + gCurves[fo_curve].b * uVar10 + + gCurves[fo_curve].d * 0x10000 + + gCurves[fo_curve].a * (uVar10 * uVar5 >> 0x10) >> + 0xc; + if ((int)uVar10 < 0) { + uVar10 = 0; + } else { + if (0x10000 < uVar10) { + uVar10 = 0x10000; + } + } + uVar10 = (int)(uVar10 * vol) >> 0x10; + } + } + } + if ((fo_curve == 0xb) && (uVar10 < 0x180)) { + uVar10 = 0x180; + } + SignalSema(g_EarTransSema); + return uVar10; +} + +constexpr s16 unk_table_2[2056] = { + 0xB4, 0x0, 0xB4, 0x0, 0x5A, 0x5A, 0x10E, 0x10E, 0xB4, 0x0, 0xB4, 0x0, 0x5A, + 0x5A, 0x10E, 0x10E, 0xB4, 0x0, 0xB4, 0x0, 0x5A, 0x5A, 0x10E, 0x10E, 0xB4, 0x0, + 0xB4, 0x0, 0x5A, 0x5A, 0x10E, 0x10E, 0xB4, 0x0, 0xB4, 0x0, 0x5A, 0x5A, 0x10E, + 0x10E, 0xB3, 0x1, 0xB5, 0x167, 0x5B, 0x59, 0x10D, 0x10F, 0xB3, 0x1, 0xB5, 0x167, + 0x5B, 0x59, 0x10D, 0x10F, 0xB3, 0x1, 0xB5, 0x167, 0x5B, 0x59, 0x10D, 0x10F, 0xB3, + 0x1, 0xB5, 0x167, 0x5B, 0x59, 0x10D, 0x10F, 0xB2, 0x2, 0xB6, 0x166, 0x5C, 0x58, + 0x10C, 0x110, 0xB2, 0x2, 0xB6, 0x166, 0x5C, 0x58, 0x10C, 0x110, 0xB2, 0x2, 0xB6, + 0x166, 0x5C, 0x58, 0x10C, 0x110, 0xB2, 0x2, 0xB6, 0x166, 0x5C, 0x58, 0x10C, 0x110, + 0xB2, 0x2, 0xB6, 0x166, 0x5C, 0x58, 0x10C, 0x110, 0xB1, 0x3, 0xB7, 0x165, 0x5D, + 0x57, 0x10B, 0x111, 0xB1, 0x3, 0xB7, 0x165, 0x5D, 0x57, 0x10B, 0x111, 0xB1, 0x3, + 0xB7, 0x165, 0x5D, 0x57, 0x10B, 0x111, 0xB1, 0x3, 0xB7, 0x165, 0x5D, 0x57, 0x10B, + 0x111, 0xB0, 0x4, 0xB8, 0x164, 0x5E, 0x56, 0x10A, 0x112, 0xB0, 0x4, 0xB8, 0x164, + 0x5E, 0x56, 0x10A, 0x112, 0xB0, 0x4, 0xB8, 0x164, 0x5E, 0x56, 0x10A, 0x112, 0xB0, + 0x4, 0xB8, 0x164, 0x5E, 0x56, 0x10A, 0x112, 0xB0, 0x4, 0xB8, 0x164, 0x5E, 0x56, + 0x10A, 0x112, 0xAF, 0x5, 0xB9, 0x163, 0x5F, 0x55, 0x109, 0x113, 0xAF, 0x5, 0xB9, + 0x163, 0x5F, 0x55, 0x109, 0x113, 0xAF, 0x5, 0xB9, 0x163, 0x5F, 0x55, 0x109, 0x113, + 0xAF, 0x5, 0xB9, 0x163, 0x5F, 0x55, 0x109, 0x113, 0xAE, 0x6, 0xBA, 0x162, 0x60, + 0x54, 0x108, 0x114, 0xAE, 0x6, 0xBA, 0x162, 0x60, 0x54, 0x108, 0x114, 0xAE, 0x6, + 0xBA, 0x162, 0x60, 0x54, 0x108, 0x114, 0xAE, 0x6, 0xBA, 0x162, 0x60, 0x54, 0x108, + 0x114, 0xAE, 0x6, 0xBA, 0x162, 0x60, 0x54, 0x108, 0x114, 0xAD, 0x7, 0xBB, 0x161, + 0x61, 0x53, 0x107, 0x115, 0xAD, 0x7, 0xBB, 0x161, 0x61, 0x53, 0x107, 0x115, 0xAD, + 0x7, 0xBB, 0x161, 0x61, 0x53, 0x107, 0x115, 0xAD, 0x7, 0xBB, 0x161, 0x61, 0x53, + 0x107, 0x115, 0xAC, 0x8, 0xBC, 0x160, 0x62, 0x52, 0x106, 0x116, 0xAC, 0x8, 0xBC, + 0x160, 0x62, 0x52, 0x106, 0x116, 0xAC, 0x8, 0xBC, 0x160, 0x62, 0x52, 0x106, 0x116, + 0xAC, 0x8, 0xBC, 0x160, 0x62, 0x52, 0x106, 0x116, 0xAC, 0x8, 0xBC, 0x160, 0x62, + 0x52, 0x106, 0x116, 0xAB, 0x9, 0xBD, 0x15F, 0x63, 0x51, 0x105, 0x117, 0xAB, 0x9, + 0xBD, 0x15F, 0x63, 0x51, 0x105, 0x117, 0xAB, 0x9, 0xBD, 0x15F, 0x63, 0x51, 0x105, + 0x117, 0xAB, 0x9, 0xBD, 0x15F, 0x63, 0x51, 0x105, 0x117, 0xAB, 0x9, 0xBD, 0x15F, + 0x63, 0x51, 0x105, 0x117, 0xAA, 0xA, 0xBE, 0x15E, 0x64, 0x50, 0x104, 0x118, 0xAA, + 0xA, 0xBE, 0x15E, 0x64, 0x50, 0x104, 0x118, 0xAA, 0xA, 0xBE, 0x15E, 0x64, 0x50, + 0x104, 0x118, 0xAA, 0xA, 0xBE, 0x15E, 0x64, 0x50, 0x104, 0x118, 0xA9, 0xB, 0xBF, + 0x15D, 0x65, 0x4F, 0x103, 0x119, 0xA9, 0xB, 0xBF, 0x15D, 0x65, 0x4F, 0x103, 0x119, + 0xA9, 0xB, 0xBF, 0x15D, 0x65, 0x4F, 0x103, 0x119, 0xA9, 0xB, 0xBF, 0x15D, 0x65, + 0x4F, 0x103, 0x119, 0xA9, 0xB, 0xBF, 0x15D, 0x65, 0x4F, 0x103, 0x119, 0xA8, 0xC, + 0xC0, 0x15C, 0x66, 0x4E, 0x102, 0x11A, 0xA8, 0xC, 0xC0, 0x15C, 0x66, 0x4E, 0x102, + 0x11A, 0xA8, 0xC, 0xC0, 0x15C, 0x66, 0x4E, 0x102, 0x11A, 0xA8, 0xC, 0xC0, 0x15C, + 0x66, 0x4E, 0x102, 0x11A, 0xA8, 0xC, 0xC0, 0x15C, 0x66, 0x4E, 0x102, 0x11A, 0xA7, + 0xD, 0xC1, 0x15B, 0x67, 0x4D, 0x101, 0x11B, 0xA7, 0xD, 0xC1, 0x15B, 0x67, 0x4D, + 0x101, 0x11B, 0xA7, 0xD, 0xC1, 0x15B, 0x67, 0x4D, 0x101, 0x11B, 0xA7, 0xD, 0xC1, + 0x15B, 0x67, 0x4D, 0x101, 0x11B, 0xA6, 0xE, 0xC2, 0x15A, 0x68, 0x4C, 0x100, 0x11C, + 0xA6, 0xE, 0xC2, 0x15A, 0x68, 0x4C, 0x100, 0x11C, 0xA6, 0xE, 0xC2, 0x15A, 0x68, + 0x4C, 0x100, 0x11C, 0xA6, 0xE, 0xC2, 0x15A, 0x68, 0x4C, 0x100, 0x11C, 0xA6, 0xE, + 0xC2, 0x15A, 0x68, 0x4C, 0x100, 0x11C, 0xA5, 0xF, 0xC3, 0x159, 0x69, 0x4B, 0xFF, + 0x11D, 0xA5, 0xF, 0xC3, 0x159, 0x69, 0x4B, 0xFF, 0x11D, 0xA5, 0xF, 0xC3, 0x159, + 0x69, 0x4B, 0xFF, 0x11D, 0xA5, 0xF, 0xC3, 0x159, 0x69, 0x4B, 0xFF, 0x11D, 0xA5, + 0xF, 0xC3, 0x159, 0x69, 0x4B, 0xFF, 0x11D, 0xA4, 0x10, 0xC4, 0x158, 0x6A, 0x4A, + 0xFE, 0x11E, 0xA4, 0x10, 0xC4, 0x158, 0x6A, 0x4A, 0xFE, 0x11E, 0xA4, 0x10, 0xC4, + 0x158, 0x6A, 0x4A, 0xFE, 0x11E, 0xA4, 0x10, 0xC4, 0x158, 0x6A, 0x4A, 0xFE, 0x11E, + 0xA4, 0x10, 0xC4, 0x158, 0x6A, 0x4A, 0xFE, 0x11E, 0xA3, 0x11, 0xC5, 0x157, 0x6B, + 0x49, 0xFD, 0x11F, 0xA3, 0x11, 0xC5, 0x157, 0x6B, 0x49, 0xFD, 0x11F, 0xA3, 0x11, + 0xC5, 0x157, 0x6B, 0x49, 0xFD, 0x11F, 0xA3, 0x11, 0xC5, 0x157, 0x6B, 0x49, 0xFD, + 0x11F, 0xA3, 0x11, 0xC5, 0x157, 0x6B, 0x49, 0xFD, 0x11F, 0xA2, 0x12, 0xC6, 0x156, + 0x6C, 0x48, 0xFC, 0x120, 0xA2, 0x12, 0xC6, 0x156, 0x6C, 0x48, 0xFC, 0x120, 0xA2, + 0x12, 0xC6, 0x156, 0x6C, 0x48, 0xFC, 0x120, 0xA2, 0x12, 0xC6, 0x156, 0x6C, 0x48, + 0xFC, 0x120, 0xA2, 0x12, 0xC6, 0x156, 0x6C, 0x48, 0xFC, 0x120, 0xA1, 0x13, 0xC7, + 0x155, 0x6D, 0x47, 0xFB, 0x121, 0xA1, 0x13, 0xC7, 0x155, 0x6D, 0x47, 0xFB, 0x121, + 0xA1, 0x13, 0xC7, 0x155, 0x6D, 0x47, 0xFB, 0x121, 0xA1, 0x13, 0xC7, 0x155, 0x6D, + 0x47, 0xFB, 0x121, 0xA1, 0x13, 0xC7, 0x155, 0x6D, 0x47, 0xFB, 0x121, 0xA0, 0x14, + 0xC8, 0x154, 0x6E, 0x46, 0xFA, 0x122, 0xA0, 0x14, 0xC8, 0x154, 0x6E, 0x46, 0xFA, + 0x122, 0xA0, 0x14, 0xC8, 0x154, 0x6E, 0x46, 0xFA, 0x122, 0xA0, 0x14, 0xC8, 0x154, + 0x6E, 0x46, 0xFA, 0x122, 0xA0, 0x14, 0xC8, 0x154, 0x6E, 0x46, 0xFA, 0x122, 0x9F, + 0x15, 0xC9, 0x153, 0x6F, 0x45, 0xF9, 0x123, 0x9F, 0x15, 0xC9, 0x153, 0x6F, 0x45, + 0xF9, 0x123, 0x9F, 0x15, 0xC9, 0x153, 0x6F, 0x45, 0xF9, 0x123, 0x9F, 0x15, 0xC9, + 0x153, 0x6F, 0x45, 0xF9, 0x123, 0x9F, 0x15, 0xC9, 0x153, 0x6F, 0x45, 0xF9, 0x123, + 0x9E, 0x16, 0xCA, 0x152, 0x70, 0x44, 0xF8, 0x124, 0x9E, 0x16, 0xCA, 0x152, 0x70, + 0x44, 0xF8, 0x124, 0x9E, 0x16, 0xCA, 0x152, 0x70, 0x44, 0xF8, 0x124, 0x9E, 0x16, + 0xCA, 0x152, 0x70, 0x44, 0xF8, 0x124, 0x9E, 0x16, 0xCA, 0x152, 0x70, 0x44, 0xF8, + 0x124, 0x9D, 0x17, 0xCB, 0x151, 0x71, 0x43, 0xF7, 0x125, 0x9D, 0x17, 0xCB, 0x151, + 0x71, 0x43, 0xF7, 0x125, 0x9D, 0x17, 0xCB, 0x151, 0x71, 0x43, 0xF7, 0x125, 0x9D, + 0x17, 0xCB, 0x151, 0x71, 0x43, 0xF7, 0x125, 0x9D, 0x17, 0xCB, 0x151, 0x71, 0x43, + 0xF7, 0x125, 0x9D, 0x17, 0xCB, 0x151, 0x71, 0x43, 0xF7, 0x125, 0x9C, 0x18, 0xCC, + 0x150, 0x72, 0x42, 0xF6, 0x126, 0x9C, 0x18, 0xCC, 0x150, 0x72, 0x42, 0xF6, 0x126, + 0x9C, 0x18, 0xCC, 0x150, 0x72, 0x42, 0xF6, 0x126, 0x9C, 0x18, 0xCC, 0x150, 0x72, + 0x42, 0xF6, 0x126, 0x9C, 0x18, 0xCC, 0x150, 0x72, 0x42, 0xF6, 0x126, 0x9B, 0x19, + 0xCD, 0x14F, 0x73, 0x41, 0xF5, 0x127, 0x9B, 0x19, 0xCD, 0x14F, 0x73, 0x41, 0xF5, + 0x127, 0x9B, 0x19, 0xCD, 0x14F, 0x73, 0x41, 0xF5, 0x127, 0x9B, 0x19, 0xCD, 0x14F, + 0x73, 0x41, 0xF5, 0x127, 0x9B, 0x19, 0xCD, 0x14F, 0x73, 0x41, 0xF5, 0x127, 0x9A, + 0x1A, 0xCE, 0x14E, 0x74, 0x40, 0xF4, 0x128, 0x9A, 0x1A, 0xCE, 0x14E, 0x74, 0x40, + 0xF4, 0x128, 0x9A, 0x1A, 0xCE, 0x14E, 0x74, 0x40, 0xF4, 0x128, 0x9A, 0x1A, 0xCE, + 0x14E, 0x74, 0x40, 0xF4, 0x128, 0x9A, 0x1A, 0xCE, 0x14E, 0x74, 0x40, 0xF4, 0x128, + 0x9A, 0x1A, 0xCE, 0x14E, 0x74, 0x40, 0xF4, 0x128, 0x99, 0x1B, 0xCF, 0x14D, 0x75, + 0x3F, 0xF3, 0x129, 0x99, 0x1B, 0xCF, 0x14D, 0x75, 0x3F, 0xF3, 0x129, 0x99, 0x1B, + 0xCF, 0x14D, 0x75, 0x3F, 0xF3, 0x129, 0x99, 0x1B, 0xCF, 0x14D, 0x75, 0x3F, 0xF3, + 0x129, 0x99, 0x1B, 0xCF, 0x14D, 0x75, 0x3F, 0xF3, 0x129, 0x99, 0x1B, 0xCF, 0x14D, + 0x75, 0x3F, 0xF3, 0x129, 0x98, 0x1C, 0xD0, 0x14C, 0x76, 0x3E, 0xF2, 0x12A, 0x98, + 0x1C, 0xD0, 0x14C, 0x76, 0x3E, 0xF2, 0x12A, 0x98, 0x1C, 0xD0, 0x14C, 0x76, 0x3E, + 0xF2, 0x12A, 0x98, 0x1C, 0xD0, 0x14C, 0x76, 0x3E, 0xF2, 0x12A, 0x98, 0x1C, 0xD0, + 0x14C, 0x76, 0x3E, 0xF2, 0x12A, 0x97, 0x1D, 0xD1, 0x14B, 0x77, 0x3D, 0xF1, 0x12B, + 0x97, 0x1D, 0xD1, 0x14B, 0x77, 0x3D, 0xF1, 0x12B, 0x97, 0x1D, 0xD1, 0x14B, 0x77, + 0x3D, 0xF1, 0x12B, 0x97, 0x1D, 0xD1, 0x14B, 0x77, 0x3D, 0xF1, 0x12B, 0x97, 0x1D, + 0xD1, 0x14B, 0x77, 0x3D, 0xF1, 0x12B, 0x97, 0x1D, 0xD1, 0x14B, 0x77, 0x3D, 0xF1, + 0x12B, 0x96, 0x1E, 0xD2, 0x14A, 0x78, 0x3C, 0xF0, 0x12C, 0x96, 0x1E, 0xD2, 0x14A, + 0x78, 0x3C, 0xF0, 0x12C, 0x96, 0x1E, 0xD2, 0x14A, 0x78, 0x3C, 0xF0, 0x12C, 0x96, + 0x1E, 0xD2, 0x14A, 0x78, 0x3C, 0xF0, 0x12C, 0x96, 0x1E, 0xD2, 0x14A, 0x78, 0x3C, + 0xF0, 0x12C, 0x96, 0x1E, 0xD2, 0x14A, 0x78, 0x3C, 0xF0, 0x12C, 0x95, 0x1F, 0xD3, + 0x149, 0x79, 0x3B, 0xEF, 0x12D, 0x95, 0x1F, 0xD3, 0x149, 0x79, 0x3B, 0xEF, 0x12D, + 0x95, 0x1F, 0xD3, 0x149, 0x79, 0x3B, 0xEF, 0x12D, 0x95, 0x1F, 0xD3, 0x149, 0x79, + 0x3B, 0xEF, 0x12D, 0x95, 0x1F, 0xD3, 0x149, 0x79, 0x3B, 0xEF, 0x12D, 0x95, 0x1F, + 0xD3, 0x149, 0x79, 0x3B, 0xEF, 0x12D, 0x94, 0x20, 0xD4, 0x148, 0x7A, 0x3A, 0xEE, + 0x12E, 0x94, 0x20, 0xD4, 0x148, 0x7A, 0x3A, 0xEE, 0x12E, 0x94, 0x20, 0xD4, 0x148, + 0x7A, 0x3A, 0xEE, 0x12E, 0x94, 0x20, 0xD4, 0x148, 0x7A, 0x3A, 0xEE, 0x12E, 0x94, + 0x20, 0xD4, 0x148, 0x7A, 0x3A, 0xEE, 0x12E, 0x94, 0x20, 0xD4, 0x148, 0x7A, 0x3A, + 0xEE, 0x12E, 0x94, 0x20, 0xD4, 0x148, 0x7A, 0x3A, 0xEE, 0x12E, 0x93, 0x21, 0xD5, + 0x147, 0x7B, 0x39, 0xED, 0x12F, 0x93, 0x21, 0xD5, 0x147, 0x7B, 0x39, 0xED, 0x12F, + 0x93, 0x21, 0xD5, 0x147, 0x7B, 0x39, 0xED, 0x12F, 0x93, 0x21, 0xD5, 0x147, 0x7B, + 0x39, 0xED, 0x12F, 0x93, 0x21, 0xD5, 0x147, 0x7B, 0x39, 0xED, 0x12F, 0x93, 0x21, + 0xD5, 0x147, 0x7B, 0x39, 0xED, 0x12F, 0x92, 0x22, 0xD6, 0x146, 0x7C, 0x38, 0xEC, + 0x130, 0x92, 0x22, 0xD6, 0x146, 0x7C, 0x38, 0xEC, 0x130, 0x92, 0x22, 0xD6, 0x146, + 0x7C, 0x38, 0xEC, 0x130, 0x92, 0x22, 0xD6, 0x146, 0x7C, 0x38, 0xEC, 0x130, 0x92, + 0x22, 0xD6, 0x146, 0x7C, 0x38, 0xEC, 0x130, 0x92, 0x22, 0xD6, 0x146, 0x7C, 0x38, + 0xEC, 0x130, 0x92, 0x22, 0xD6, 0x146, 0x7C, 0x38, 0xEC, 0x130, 0x91, 0x23, 0xD7, + 0x145, 0x7D, 0x37, 0xEB, 0x131, 0x91, 0x23, 0xD7, 0x145, 0x7D, 0x37, 0xEB, 0x131, + 0x91, 0x23, 0xD7, 0x145, 0x7D, 0x37, 0xEB, 0x131, 0x91, 0x23, 0xD7, 0x145, 0x7D, + 0x37, 0xEB, 0x131, 0x91, 0x23, 0xD7, 0x145, 0x7D, 0x37, 0xEB, 0x131, 0x91, 0x23, + 0xD7, 0x145, 0x7D, 0x37, 0xEB, 0x131, 0x91, 0x23, 0xD7, 0x145, 0x7D, 0x37, 0xEB, + 0x131, 0x90, 0x24, 0xD8, 0x144, 0x7E, 0x36, 0xEA, 0x132, 0x90, 0x24, 0xD8, 0x144, + 0x7E, 0x36, 0xEA, 0x132, 0x90, 0x24, 0xD8, 0x144, 0x7E, 0x36, 0xEA, 0x132, 0x90, + 0x24, 0xD8, 0x144, 0x7E, 0x36, 0xEA, 0x132, 0x90, 0x24, 0xD8, 0x144, 0x7E, 0x36, + 0xEA, 0x132, 0x90, 0x24, 0xD8, 0x144, 0x7E, 0x36, 0xEA, 0x132, 0x8F, 0x25, 0xD9, + 0x143, 0x7F, 0x35, 0xE9, 0x133, 0x8F, 0x25, 0xD9, 0x143, 0x7F, 0x35, 0xE9, 0x133, + 0x8F, 0x25, 0xD9, 0x143, 0x7F, 0x35, 0xE9, 0x133, 0x8F, 0x25, 0xD9, 0x143, 0x7F, + 0x35, 0xE9, 0x133, 0x8F, 0x25, 0xD9, 0x143, 0x7F, 0x35, 0xE9, 0x133, 0x8F, 0x25, + 0xD9, 0x143, 0x7F, 0x35, 0xE9, 0x133, 0x8F, 0x25, 0xD9, 0x143, 0x7F, 0x35, 0xE9, + 0x133, 0x8F, 0x25, 0xD9, 0x143, 0x7F, 0x35, 0xE9, 0x133, 0x8E, 0x26, 0xDA, 0x142, + 0x80, 0x34, 0xE8, 0x134, 0x8E, 0x26, 0xDA, 0x142, 0x80, 0x34, 0xE8, 0x134, 0x8E, + 0x26, 0xDA, 0x142, 0x80, 0x34, 0xE8, 0x134, 0x8E, 0x26, 0xDA, 0x142, 0x80, 0x34, + 0xE8, 0x134, 0x8E, 0x26, 0xDA, 0x142, 0x80, 0x34, 0xE8, 0x134, 0x8E, 0x26, 0xDA, + 0x142, 0x80, 0x34, 0xE8, 0x134, 0x8E, 0x26, 0xDA, 0x142, 0x80, 0x34, 0xE8, 0x134, + 0x8D, 0x27, 0xDB, 0x141, 0x81, 0x33, 0xE7, 0x135, 0x8D, 0x27, 0xDB, 0x141, 0x81, + 0x33, 0xE7, 0x135, 0x8D, 0x27, 0xDB, 0x141, 0x81, 0x33, 0xE7, 0x135, 0x8D, 0x27, + 0xDB, 0x141, 0x81, 0x33, 0xE7, 0x135, 0x8D, 0x27, 0xDB, 0x141, 0x81, 0x33, 0xE7, + 0x135, 0x8D, 0x27, 0xDB, 0x141, 0x81, 0x33, 0xE7, 0x135, 0x8D, 0x27, 0xDB, 0x141, + 0x81, 0x33, 0xE7, 0x135, 0x8C, 0x28, 0xDC, 0x140, 0x82, 0x32, 0xE6, 0x136, 0x8C, + 0x28, 0xDC, 0x140, 0x82, 0x32, 0xE6, 0x136, 0x8C, 0x28, 0xDC, 0x140, 0x82, 0x32, + 0xE6, 0x136, 0x8C, 0x28, 0xDC, 0x140, 0x82, 0x32, 0xE6, 0x136, 0x8C, 0x28, 0xDC, + 0x140, 0x82, 0x32, 0xE6, 0x136, 0x8C, 0x28, 0xDC, 0x140, 0x82, 0x32, 0xE6, 0x136, + 0x8C, 0x28, 0xDC, 0x140, 0x82, 0x32, 0xE6, 0x136, 0x8C, 0x28, 0xDC, 0x140, 0x82, + 0x32, 0xE6, 0x136, 0x8B, 0x29, 0xDD, 0x13F, 0x83, 0x31, 0xE5, 0x137, 0x8B, 0x29, + 0xDD, 0x13F, 0x83, 0x31, 0xE5, 0x137, 0x8B, 0x29, 0xDD, 0x13F, 0x83, 0x31, 0xE5, + 0x137, 0x8B, 0x29, 0xDD, 0x13F, 0x83, 0x31, 0xE5, 0x137, 0x8B, 0x29, 0xDD, 0x13F, + 0x83, 0x31, 0xE5, 0x137, 0x8B, 0x29, 0xDD, 0x13F, 0x83, 0x31, 0xE5, 0x137, 0x8B, + 0x29, 0xDD, 0x13F, 0x83, 0x31, 0xE5, 0x137, 0x8B, 0x29, 0xDD, 0x13F, 0x83, 0x31, + 0xE5, 0x137, 0x8A, 0x2A, 0xDE, 0x13E, 0x84, 0x30, 0xE4, 0x138, 0x8A, 0x2A, 0xDE, + 0x13E, 0x84, 0x30, 0xE4, 0x138, 0x8A, 0x2A, 0xDE, 0x13E, 0x84, 0x30, 0xE4, 0x138, + 0x8A, 0x2A, 0xDE, 0x13E, 0x84, 0x30, 0xE4, 0x138, 0x8A, 0x2A, 0xDE, 0x13E, 0x84, + 0x30, 0xE4, 0x138, 0x8A, 0x2A, 0xDE, 0x13E, 0x84, 0x30, 0xE4, 0x138, 0x8A, 0x2A, + 0xDE, 0x13E, 0x84, 0x30, 0xE4, 0x138, 0x8A, 0x2A, 0xDE, 0x13E, 0x84, 0x30, 0xE4, + 0x138, 0x89, 0x2B, 0xDF, 0x13D, 0x85, 0x2F, 0xE3, 0x139, 0x89, 0x2B, 0xDF, 0x13D, + 0x85, 0x2F, 0xE3, 0x139, 0x89, 0x2B, 0xDF, 0x13D, 0x85, 0x2F, 0xE3, 0x139, 0x89, + 0x2B, 0xDF, 0x13D, 0x85, 0x2F, 0xE3, 0x139, 0x89, 0x2B, 0xDF, 0x13D, 0x85, 0x2F, + 0xE3, 0x139, 0x89, 0x2B, 0xDF, 0x13D, 0x85, 0x2F, 0xE3, 0x139, 0x89, 0x2B, 0xDF, + 0x13D, 0x85, 0x2F, 0xE3, 0x139, 0x89, 0x2B, 0xDF, 0x13D, 0x85, 0x2F, 0xE3, 0x139, + 0x89, 0x2B, 0xDF, 0x13D, 0x85, 0x2F, 0xE3, 0x139, 0x88, 0x2C, 0xE0, 0x13C, 0x86, + 0x2E, 0xE2, 0x13A, 0x88, 0x2C, 0xE0, 0x13C, 0x86, 0x2E, 0xE2, 0x13A, 0x88, 0x2C, + 0xE0, 0x13C, 0x86, 0x2E, 0xE2, 0x13A, 0x88, 0x2C, 0xE0, 0x13C, 0x86, 0x2E, 0xE2, + 0x13A, 0x88, 0x2C, 0xE0, 0x13C, 0x86, 0x2E, 0xE2, 0x13A, 0x88, 0x2C, 0xE0, 0x13C, + 0x86, 0x2E, 0xE2, 0x13A, 0x88, 0x2C, 0xE0, 0x13C, 0x86, 0x2E, 0xE2, 0x13A, 0x88, + 0x2C, 0xE0, 0x13C, 0x86, 0x2E, 0xE2, 0x13A, 0x87, 0x2D, 0xE1, 0x13B, 0x87, 0x2D, + 0xE1, 0x13B, +}; + +s32 CalculateAngle(s32* trans, u32 fo_curve, u32 param_3) { + u32 uVar2; + int iVar3; + u32 uVar4; + u32 uVar5; + int iVar6; + int iVar7; + u32 uVar8; + ASSERT(fo_curve < 0x29); + WaitSema(g_EarTransSema); + if (unktable[fo_curve] != 0) { + if (unktable[fo_curve + 0x2c] == 0) { + if (unktable[fo_curve + 0x58] != 0) { + trans = gEarTrans + 3; + } + iVar6 = trans[1]; + iVar3 = gCamTrans[0] - *trans; + iVar7 = gCamTrans[2] - trans[2]; + } else { + iVar7 = gCamForward[0] - gCamTrans[0]; + iVar3 = gCamTrans[2] - gCamForward[2]; + iVar6 = gCamForward[1]; + } + iVar6 = gCamTrans[1] - iVar6; + if (((iVar3 + 0x200168U | iVar6 + 0x200168U | iVar7 + 0x200168U) & 0xffc00000) != 0) { + if (iVar3 < 0) { + iVar3 = iVar3 + 0x3ff; + } + iVar3 = iVar3 >> 10; + if (iVar6 < 0) { + iVar6 = iVar6 + 0x3ff; + } + iVar6 = iVar6 >> 10; + if (iVar7 < 0) { + iVar7 = iVar7 + 0x3ff; + } + iVar7 = iVar7 >> 10; + } + uVar8 = iVar3 * gCamLeft[0] + iVar6 * gCamLeft[1] + iVar7 * gCamLeft[2]; + uVar5 = uVar8; + if ((int)uVar8 < 0) { + uVar5 = -uVar8; + } + uVar2 = iVar3 * gCamForward[0] + iVar6 * gCamForward[1] + iVar7 * gCamForward[2]; + uVar4 = uVar2; + if ((int)uVar2 < 0) { + uVar4 = -uVar2; + } + if ((0x1ffff < (int)uVar5) || (0x1ffff < (int)uVar4)) { + uVar4 = (int)uVar4 >> 8; + uVar5 = (int)uVar5 >> 8; + } + if ((uVar4 != 0) || (uVar5 != 0)) { + uVar8 = (uVar8 & 0x80000000) >> 0x1e | uVar2 >> 0x1f; + if ((int)uVar4 < (int)uVar5) { + if (uVar5 == 0) { + ASSERT_NOT_REACHED(); + } + uVar8 = uVar8 | (int)(uVar4 << 8) / (int)uVar5 << 3 | 4; + } else { + if (uVar4 == 0) { + ASSERT_NOT_REACHED(); + } + uVar8 = uVar8 | (int)(uVar5 << 8) / (int)uVar4 << 3; + } + ASSERT(uVar8 < 2056); + iVar3 = (int)(short)unk_table_2[uVar8]; + iVar6 = iVar3; + if (((param_3 != 0) && (iVar6 = iVar3, g_CameraInvert != 0)) && (iVar6 = 0, iVar3 != 0)) { + iVar6 = 0x168 - iVar3; + } + SignalSema(g_EarTransSema); + return iVar6; + } + } + SignalSema(g_EarTransSema); + return 0; +} + +s32 GetVolume(SoundInfo* sound) { + return CalculateFalloffVolume(sound->params.trans, sound->params.volume, sound->params.fo_curve, + sound->params.fo_min, sound->params.fo_max, nullptr, nullptr); +} + +s32 GetPan(SoundInfo* sound) { + return CalculateAngle(sound->params.trans, sound->params.fo_curve, 1); +} + +void UpdateLocation(SoundInfo* sound) { + auto handle = snd_SoundIsStillPlaying(sound->sound_handle); + sound->sound_handle = handle; + if (handle == 0) { + sound->id = 0; + } else { + auto vol = GetVolume(sound); + if (vol == 0 && unktable[(int)(sound->params).fo_curve + 0xb0] == 0) { + snd_StopSound(sound->sound_handle); + } else { + auto pan = GetPan(sound); + // ovrld_log(LogCategory::WARN, "HACK: falling back to old version of setting vol/pan"); + snd_SetSoundVolPan(handle, vol, pan); + + // FUN_00013e0c(handle,4,0,pan,0,0); + // if ((short)(sound->params).mask < 0) { + // FUN_00013d6c(handle,vol,0x40); + // } + // else { + // snd_SetSoundVolPan(handle,vol,0xfffffffe,4); + // } + } + } +} + +void UpdateAutoVol(SoundInfo* snd, int time) { + bool bVar1; + auto iVar6 = snd->auto_time; + auto iVar4 = snd->new_volume; + if (time < iVar6) { + auto iVar5 = iVar4; + if (iVar4 == -4) { + iVar5 = 0; + } + auto vol = (snd->params).volume; + int new_vol; + if (iVar6 == 0) { + ASSERT_NOT_REACHED(); + } + iVar5 = ((iVar5 - vol) * time) / iVar6; + if (iVar5 < 0) { + new_vol = vol + iVar5; + bVar1 = new_vol < iVar4; + } else { + new_vol = vol + iVar5; + if (iVar5 < 1) { + new_vol = vol + 1; + } + bVar1 = iVar4 < new_vol; + } + (snd->params).volume = new_vol; + if (bVar1) { + (snd->params).volume = iVar4; + } + snd->auto_time = iVar6 - time; + } else { + if (iVar4 == -4) { + snd_StopSound(snd->sound_handle); + snd->id = 0; + } else { + (snd->params).volume = iVar4; + } + snd->auto_time = 0; + } +} + +void UpdateVolume(SoundInfo* sound) { + auto handle = snd_SoundIsStillPlaying(sound->sound_handle); + sound->sound_handle = handle; + if (handle == 0) { + sound->id = 0; + } else { + if ((s16)(sound->params).mask < 0) { + // idk + snd_SetSoundVolPan(handle, GetVolume(sound), -2); + + // FUN_00013d6c(handle, GetVolume(sound), 0x40, 4); + } else { + snd_SetSoundVolPan(handle, GetVolume(sound), -2); + } + } +} + +void SetEarTrans(const s32* ear_trans0, + const s32* ear_trans1, + const s32* cam_trans, + const s32* cam_fwd, + const s32* cam_left, + s32 cam_scale, + bool cam_inverted) { + auto tick = snd_GetTick(); + auto time = tick - gLastTick; + gLastTick = tick; + WaitSema(g_EarTransSema); + gEarTrans[0] = *ear_trans0; + g_CameraInvert = cam_inverted; + gEarTrans[1] = ear_trans0[1]; + gEarTrans[2] = ear_trans0[2]; + gEarTrans[3] = *ear_trans1; + gEarTrans[4] = ear_trans1[1]; + gEarTrans[5] = ear_trans1[2]; + gCamTrans[0] = *cam_trans; + gCamTrans[1] = cam_trans[1]; + gCamTrans[2] = cam_trans[2]; + gCamForward[0] = *cam_fwd; + gCamForward[1] = cam_fwd[1]; + gCamForward[2] = cam_fwd[2]; + gCamLeft[0] = *cam_left; + gCamLeft[1] = cam_left[1]; + gCamLeft[2] = cam_left[2]; + gCamScale = cam_scale; + SignalSema(g_EarTransSema); + + for (auto& sound : gSounds) { + if (sound.id) { + if (sound.auto_time) { + UpdateAutoVol(&sound, time); + } + UpdateLocation(&sound); + } + } + + auto* cmd = g_aVagCmds; + s32 iVar2 = 5; + do { + if ((cmd->music_flag == 0) && (cmd->maybe_sound_handler != 0)) { + if ((cmd->flags.scanned == 0) || (cmd->flags.bit8 != 0)) { + if (cmd->flags.bit20 == 0) { + if ((u32)cmd->play_volume < 0x11) { + cmd->play_volume = 0; + } else { + cmd->play_volume = cmd->play_volume - 0x10; + } + SetVAGVol(cmd); + if (cmd->play_volume != 0) + goto LAB_0000db94; + } + LAB_0000db78: + StopVagStream(cmd); + } else { + time = snd_SoundIsStillPlaying(cmd->id); + if (time != 0) + goto LAB_0000db88; + if (cmd->flags.bit20 != 0) + goto LAB_0000db78; + // CpuSuspendIntr(local_28); + cmd->flags.bit8 = 1; + // CpuResumeIntr(local_28[0]); + } + } else { + LAB_0000db88: + SetVAGVol(cmd); + } + LAB_0000db94: + iVar2 = iVar2 + -1; + cmd = cmd + 1; + if (iVar2 < 0) { + return; + } + } while (true); +} + +void SetCurve(int param_1, + u32 param_2, + u32 param_3, + uint8_t param_4, + uint8_t param_5, + uint8_t param_6, + uint8_t param_7, + uint8_t param_8) { + gCurves[param_1].c = (param_3 - param_2) + -0x1000; + gCurves[param_1].d = 0x1000; + unktable[param_1 + 0xb0] = param_8; + gCurves[param_1].b = param_2 + param_3 * -3; + unktable[param_1] = param_4; + unktable[param_1 + 0x2c] = param_5; + unktable[param_1 + 0x58] = param_6; + unktable[param_1 + 0x84] = param_7; + gCurves[param_1].a = param_3 * 2; +} + +void SetPlaybackMode(s32 mode) { + g_nPlaybackMode = mode; + snd_SetPlayBackMode(mode); +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/ssound.h b/game/overlord/jakx/ssound.h new file mode 100644 index 0000000000..7717ee6c31 --- /dev/null +++ b/game/overlord/jakx/ssound.h @@ -0,0 +1,51 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/overlord/jakx/rpc_interface.h" + +namespace jakx { +void jakx_overlord_init_globals_ssound(); +void InitSound(); + +extern s32 g_n989Semaphore; +extern bool g_bSoundEnable; + +struct SoundInfo { + SoundName name; + s32 id; + s32 sound_handle; + s32 new_volume; + s32 auto_time; + SoundPlayParams params; +}; + +struct VolumePair { + s16 left; + s16 right; +}; + +SoundInfo* LookupSound(s32 id); +SoundInfo* AllocateSound(); +int GetFalloffCurve(int fo_curve); +s32 GetVolume(SoundInfo* sound); +s32 GetPan(SoundInfo* sound); +void UpdateVolume(SoundInfo* sound); +void KillSoundsInGroup(u32 group); +void SetEarTrans(const s32* ear_trans0, + const s32* ear_trans1, + const s32* cam_trans, + const s32* cam_forward, + const s32* cam_left, + s32 cam_scale, + bool cam_inverted); +void SetPlaybackMode(s32 mode); +void SetCurve(int curve_idx, u32, u32, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); +u32 CalculateFalloffVolume(s32* trans, u32 vol, u32 fo_curve, u32 fo_min, u32 fo_max, u32*, u32*); +s32 CalculateAngle(s32* trans, u32 fo_curve, u32); +void PrintSounds(); + +extern u32 g_anStreamVoice[6]; +extern VolumePair g_aPanTable[361]; +extern bool g_CameraInvert; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/stream.cpp b/game/overlord/jakx/stream.cpp new file mode 100644 index 0000000000..75f6122e88 --- /dev/null +++ b/game/overlord/jakx/stream.cpp @@ -0,0 +1,279 @@ +#include "stream.h" + +#include "common/util/Assert.h" +#include "common/util/FileUtil.h" + +#include "game/overlord/jakx/iso_api.h" +#include "game/overlord/jakx/iso_cd.h" +#include "game/overlord/jakx/overlord.h" +#include "game/overlord/jakx/rpc_interface.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" + +namespace jakx { + +using namespace iop; + +constexpr int kStrBufSize = sizeof(RPC_Str_Cmd); +static RPC_Str_Cmd sSTRBuf; + +constexpr int kNumPlayCmds = 4; +constexpr int kRpcBuf2Size = sizeof(RPC_Play_Cmd) * kNumPlayCmds; +static RPC_Play_Cmd sRPCBuf2[kNumPlayCmds]; + +constexpr int SECTOR_TABLE_SIZE = 512; + +struct StrFileHeader { + u32 sectors[SECTOR_TABLE_SIZE]; // start of chunk, in sectors. including this sector. + u32 sizes[SECTOR_TABLE_SIZE]; // size of chunk, in bytes. always an integer number of sectors +}; + +static_assert(sizeof(StrFileHeader) == 0x1000, "Sector header size"); + +struct CacheEntry { + ISOFileDef* filedef = nullptr; + s32 countdown = 0; + StrFileHeader header; +}; + +constexpr int STR_INDEX_CACHE_SIZE = 4; +CacheEntry sCache[STR_INDEX_CACHE_SIZE]; + +void jakx_overlord_init_globals_stream() {} + +u32 STRThread() { + sceSifQueueData dq; + sceSifServeData serve; + + CpuDisableIntr(); + sceSifInitRpc(0); + sceSifSetRpcQueue(&dq, GetThreadId()); + sceSifRegisterRpc(&serve, RpcId::STR, RPC_STR, &sSTRBuf, kStrBufSize, nullptr, nullptr, &dq); + + CpuEnableIntr(); + sceSifRpcLoop(&dq); + return 0; +} + +u32 PLAYThread() { + sceSifQueueData dq; + sceSifServeData serve; + + CpuDisableIntr(); + sceSifInitRpc(0); + sceSifSetRpcQueue(&dq, GetThreadId()); + sceSifRegisterRpc(&serve, RpcId::PLAY, RPC_PLAY, &sRPCBuf2, kRpcBuf2Size, nullptr, nullptr, &dq); + + CpuEnableIntr(); + sceSifRpcLoop(&dq); + return 0; +} + +void* RPC_STR(unsigned int, void* msg_in, int size) { + auto* msg = (RPC_Str_Cmd*)msg_in; + ASSERT(size == sizeof(RPC_Str_Cmd)); + + if (msg->section < 0) { + ovrld_log(LogCategory::STR_RPC, "RPC_STR loading full file {}", msg->basename); + // not a stream file - treat it like a normal load + auto* filedef = get_file_system()->Find(msg->basename); + if (filedef) { + msg->maxlen = LoadISOFileToEE(filedef, msg->address, msg->maxlen); + if (msg->maxlen) { + msg->result = 0; + return msg; + } else { + ovrld_log(LogCategory::WARN, "Failed to LoadISOFileToEE in RPC_STR for {}", msg->basename); + } + } else { + ovrld_log(LogCategory::WARN, "Failed to open {} for RPC STR", msg->basename); + } + } else { + // this is an animation load. Convert name: + ISOName animation_iso_name; + file_util::ISONameFromAnimationName(animation_iso_name.data, msg->basename); + auto* filedef = get_file_system()->FindIN(&animation_iso_name); + ovrld_log(LogCategory::STR_RPC, "STR_RPC for {} chunk {}", msg->basename, msg->section); + + if (filedef) { + // found it! See if we've cached this animation's header. + int cache_entry = 0; + int oldest = INT32_MAX; + int oldest_idx = -1; + while (cache_entry < STR_INDEX_CACHE_SIZE && sCache[cache_entry].filedef != filedef) { + sCache[cache_entry].countdown--; + if (sCache[cache_entry].countdown < oldest) { + oldest_idx = cache_entry; + oldest = sCache[cache_entry].countdown; + } + cache_entry++; + } + + if (cache_entry == STR_INDEX_CACHE_SIZE) { + // cache miss, we need to load the header to the header cache on the IOP + cache_entry = oldest_idx; + sCache[oldest_idx].filedef = filedef; + sCache[oldest_idx].countdown = INT32_MAX - 1; + if (!LoadISOFileToIOP(filedef, (u8*)&sCache[oldest_idx].header, sizeof(StrFileHeader))) { + ovrld_log(LogCategory::WARN, "STR_RPC failed to load .str file header for {}", + msg->basename); + msg->result = 1; + return msg; + } + } + + // load data, using the cached header to find the location of the chunk. + if (!LoadISOFileChunkToEE(filedef, msg->address, + sCache[cache_entry].header.sizes[msg->section], + sCache[cache_entry].header.sectors[msg->section])) { + ovrld_log(LogCategory::WARN, "STR_RPC failed to load .str file chunk {} for {}", + msg->section, msg->basename); + msg->result = 1; + } else { + // successful load! + msg->maxlen = sCache[cache_entry].header.sizes[msg->section]; + msg->result = 0; + return msg; + } + } + } + msg->result = 1; + return msg; +} + +void* RPC_PLAY(unsigned int, void* msg_in, int size) { + static_assert(sizeof(RPC_Play_Cmd) == 256); + + if (size <= 0) { + return msg_in; + } + + auto* msg_array = (RPC_Play_Cmd*)msg_in; + + for (u32 msg_idx = 0; msg_idx < size / sizeof(RPC_Play_Cmd); msg_idx++) { + auto* msg = &msg_array[msg_idx]; + + // the operation is stashed in the "result" field of the message + switch (msg->result) { + case 1: { + // remove vag streams by name + for (int s = 0; s < 4; s++) { + VagStreamData vsd; + if (msg->names[s].chars[0] != 0) { + // lg::warn("RPC PLAY remove {}", msg->names[s].chars); + strncpy(vsd.name, msg->names[s].chars, 0x30); + vsd.id = msg->id[s]; + WaitSema(g_EEStreamsList.sema); + RemoveVagStreamFromList(&vsd, &g_EEStreamsList); + SignalSema(g_EEStreamsList.sema); + WaitSema(g_EEPlayList.sema); + RemoveVagStreamFromList(&vsd, &g_EEPlayList); + SignalSema(g_EEPlayList.sema); + } + } + } break; + case 2: { + // completely redefine the set of vag streams to queue up. + WaitSema(g_EEStreamsList.sema); // lock stream list + EmptyVagStreamList(&g_EEStreamsList); // clear all existing streams + + // the first stream has the highest priority. + int priority = 9; + for (int s = 0; s < 4; s++) { + if (msg->names[s].chars[0] && msg->id[s]) { + // lg::warn("RPC PLAY queue {}", msg->names[s].chars); + + // set up list entry for this stream + VagStreamData vsd; + strncpy(vsd.name, msg->names[s].chars, 0x30); + vsd.id = msg->id[s]; + vsd.art_load = msg->address & 1 << (s & 0x1f) & 0xf; + vsd.movie_art_load = msg->address & 0x10 << (s & 0x1f) & 0xf0; + vsd.sound_handler = 0; + vsd.priority = priority; + + // if we have an existing one, make sure it has the appropriate flags + auto* existing_vag = FindThisVagStream(vsd.name, vsd.id); + if (existing_vag) { + existing_vag->art_flag = (u32)(vsd.art_load != 0); + existing_vag->music_flag = 0; + existing_vag->movie_flag = (u32)(vsd.movie_art_load != 0); + if (vsd.art_load != 0) { + existing_vag->flags.art = 1; + } + if (existing_vag->movie_flag != 0) { + existing_vag->flags.movie = 1; + } + } + + // add to list + InsertVagStreamInList(&vsd, &g_EEStreamsList); + } + + if (priority == 8) { + priority = 2; + } else { + if (0 < priority) { + priority = priority + -1; + } + } + } + SignalSema(g_EEStreamsList.sema); + } break; + case 0: { + int priority = 9; + for (int s = 0; s < 4; s++) { + if (msg->names[s].chars[0] && msg->id[s]) { + // lg::warn("RPC PLAY play {}", msg->names[s].chars); + + VagStreamData vsd; + strncpy(vsd.name, msg->names[s].chars, 0x30); + vsd.id = msg->id[s]; + vsd.volume2 = msg->section; + vsd.group = msg->maxlen; + vsd.plugin_id = 0; + vsd.sound_handler = 0; + vsd.maybe_volume_3 = 0; + vsd.priority = priority; + auto* existing_vag = FindThisVagStream(msg->names[s].chars, vsd.id); + if (existing_vag != (ISO_VAGCommand*)0x0) { + existing_vag->play_volume = vsd.volume2; + existing_vag->play_group = vsd.group; + if (existing_vag->flags.running != 0) + goto LAB_000092a4; + } + WaitSema(g_EEPlayList.sema); + auto* already_playing = FindVagStreamInList(&vsd, &g_EEPlayList); + if (!already_playing) { + already_playing = InsertVagStreamInList(&vsd, &g_EEPlayList); + strncpy(already_playing->name, vsd.name, 0x30); + already_playing->id = vsd.id; + already_playing->priority = vsd.priority; + already_playing->sound_handler = vsd.sound_handler; + already_playing->plugin_id = vsd.plugin_id; + already_playing->unk1 = 0; + already_playing->art_load = 0; + already_playing->movie_art_load = 0; + } + SignalSema(g_EEPlayList.sema); + } else { + // lg::warn("RPC PLAY play (NONE)"); + } + LAB_000092a4: + if (priority == 8) { + priority = 2; + } else { + if (0 < priority) { + priority = priority + -1; + } + } + } + + } break; + } + } + + return msg_in; +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/stream.h b/game/overlord/jakx/stream.h new file mode 100644 index 0000000000..78914388df --- /dev/null +++ b/game/overlord/jakx/stream.h @@ -0,0 +1,13 @@ +#pragma once + +#include "common/common_types.h" + +namespace jakx { +void jakx_overlord_init_globals_stream(); + +u32 PLAYThread(); +u32 STRThread(); +void* RPC_STR(unsigned int fno, void* msg, int size); +void* RPC_PLAY(unsigned int fno, void* msg, int size); + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/streamlist.cpp b/game/overlord/jakx/streamlist.cpp new file mode 100644 index 0000000000..e49cb52b2b --- /dev/null +++ b/game/overlord/jakx/streamlist.cpp @@ -0,0 +1,339 @@ +#include "streamlist.h" + +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" + +namespace jakx { +using namespace iop; +List g_RequestedStreamsList; +List g_NewStreamsList; +List g_EEStreamsList; +List g_EEPlayList; +void jakx_overlord_init_globals_streamlist() { + g_RequestedStreamsList = {}; + g_NewStreamsList = {}; + g_EEStreamsList = {}; + g_EEPlayList = {}; +} + +void InitVagStreamList(List* list, int size, const char* name) { + strncpy(list->name, name, 8); + + InitList(list, size, sizeof(VagStreamData)); + + auto* iter = list->next; + if (0 < size) { + do { + iter->in_use = 0; + strncpy(iter->name, "free", 0x30); + iter->group = 2; + iter->id = 0; + iter->sound_handler = 0; + iter->priority = 0; + iter->art_load = 0; + iter->movie_art_load = 0; + iter->unk2 = 0; + iter->unk1 = 0; + iter->volume2 = 0; + iter->maybe_volume_3 = 0; + iter = iter + 1; + size = size + -1; + } while (size != 0); + } + + ASSERT(list->buffer); +} + +VagStreamData* FindVagStreamInList(VagStreamData* stream, List* list) { + int iVar1; + VagStreamData* iter; + u32 max_idx; + u32 idx; + u32 uVar2; + VagStreamData* ret; + VagStreamData* pVVar3; + + max_idx = list->count; + iter = list->next; + ret = nullptr; + idx = 0; + if (max_idx != 0) { + do { + uVar2 = idx; + pVVar3 = ret; + if ((iter->id != stream->id) || (iVar1 = strncmp(iter->name, stream->name, 0x30), + uVar2 = max_idx, pVVar3 = iter, iVar1 == 0)) { + ret = pVVar3; + idx = uVar2; + } + idx = idx + 1; + iter = iter->next; + } while (idx < max_idx); + } + return ret; +} + +VagStreamData* GetVagStreamInList(u32 idx, List* list) { + VagStreamData* iter = nullptr; + if ((idx < (u32)list->count) && (iter = list->next, idx != 0)) { + do { + idx = idx - 1; + iter = iter->next; + } while (idx != 0); + } + return iter; +} + +void EmptyVagStreamList(List* list) { + VagStreamData* elt; + u32 i; + u32 cnt; + + cnt = list->count; + elt = (VagStreamData*)list->buffer; + i = 0; + if (cnt != 0) { + do { + i = i + 1; + strncpy(elt->name, "free", 0x30); + elt->group = 2; + elt->id = 0; + elt->sound_handler = 0; + elt->priority = 0; + elt->art_load = 0; + elt->movie_art_load = 0; + elt->unk2 = 0; + elt->unk1 = 0; + elt->volume2 = 0; + elt->maybe_volume_3 = 0; + elt->in_use = 0; + elt = elt + 1; + } while (i < cnt); + } + list->unk_flag = 1; +} + +void RemoveVagStreamFromList(VagStreamData* stream, List* list) { + VagStreamData* elt = FindVagStreamInList(stream, list); + if (elt) { + elt->in_use = 0; + strncpy(elt->name, "free", 0x30); + elt->group = 2; + elt->id = 0; + elt->priority = 0; + elt->art_load = 0; + elt->movie_art_load = 0; + elt->unk1 = 0; + elt->volume2 = 0; + elt->maybe_volume_3 = 0; + elt->sound_handler = 0; + list->unk_flag = 1; + elt->unk2 = 0; + } +} + +VagStreamData* InsertVagStreamInList(VagStreamData* user_stream, List* list) { + u32 uVar1; + VagStreamData* pVVar10; + VagStreamData* pVVar11; + VagStreamData* pVVar12; + + u32 count = list->count; + VagStreamData* free_elt = nullptr; + u32 free_elt_idx = 0; + VagStreamData* iter = list->next; + if (count != 0) { + do { + if (iter->id == 0) { + free_elt = iter; + free_elt_idx = count; + } + free_elt_idx = free_elt_idx + 1; + iter = iter->next; + } while (free_elt_idx < count); + } + if ((free_elt != (VagStreamData*)0x0) && + (uVar1 = 0, pVVar11 = list->next, pVVar12 = nullptr, count != 0)) { + do { + pVVar10 = pVVar11; + uVar1 = uVar1 + 1; + if (pVVar10->priority < user_stream->priority) { + list->unk_flag = 1; + free_elt->in_use = 1; + strncpy(free_elt->name, user_stream->name, 0x30); + free_elt->id = user_stream->id; + free_elt->plugin_id = user_stream->plugin_id; + free_elt->art_load = user_stream->art_load; + free_elt->movie_art_load = user_stream->movie_art_load; + free_elt->priority = user_stream->priority; + free_elt->sound_handler = user_stream->sound_handler; + free_elt->volume2 = user_stream->volume2; + free_elt->maybe_volume_3 = user_stream->maybe_volume_3; + free_elt->group = user_stream->group; + free_elt->unk1 = 0; + if (pVVar12 == (VagStreamData*)0x0) { + if (free_elt == pVVar10) { + return free_elt; + } + auto* prev = free_elt->next; + auto* next = free_elt->prev; + list->next = free_elt; + prev->prev = next; + pVVar11 = free_elt->prev; + pVVar10->prev = free_elt; + pVVar11->next = prev; + free_elt->prev = nullptr; + free_elt->next = pVVar10; + return free_elt; + } + if (free_elt == pVVar10) { + return free_elt; + } + auto* pVVar13 = free_elt->prev; + pVVar13->next = free_elt->next; + pVVar11 = pVVar12->next; + free_elt->next->prev = pVVar13; + free_elt->next = pVVar11; + pVVar10->prev = free_elt; + pVVar12->next = free_elt; + free_elt->prev = pVVar12; + return free_elt; + } + pVVar11 = pVVar10->next; + pVVar12 = pVVar10; + } while (uVar1 < count); + } + return free_elt; +} + +void MergeVagStreamLists(List* list_a, List* list_b) { + VagStreamData* stream; + VagStreamData* pVVar1; + u32 uVar2; + u32 idx; + + idx = 0; + uVar2 = 0; +LAB_0000fde8: + do { + stream = GetVagStreamInList(idx, list_a); + idx = idx + 1; + if (stream != (VagStreamData*)0x0) { + if (stream->id == 0) + goto LAB_0000fde8; + pVVar1 = FindVagStreamInList(stream, list_b); + if (pVVar1 == (VagStreamData*)0x0) { + InsertVagStreamInList(stream, list_b); + } + } + uVar2 = uVar2 + 1; + if (3 < uVar2) { + return; + } + } while (true); +} + +void QueueNewStreamsFromList(List* list) { + VagStreamData* stream; + ISO_VAGCommand* pIVar1; + u32 uVar2; + u32 idx; + + SetVagStreamsNotScanned(); + idx = 0; + EmptyVagStreamList(&g_NewStreamsList); + g_NewStreamsList.unk_flag = 0; + uVar2 = 0; +LAB_0000fe94: + do { + stream = GetVagStreamInList(idx, list); + idx = idx + 1; + if (stream == (VagStreamData*)0x0) { + uVar2 = 4; + } else { + if (stream->id == 0) + goto LAB_0000fe94; + pIVar1 = FindThisVagStream(stream->name, stream->id); + if (pIVar1 == (ISO_VAGCommand*)0x0) { + pIVar1 = FindThisVagStream(stream->name, stream->id); + if (pIVar1 == (ISO_VAGCommand*)0x0) { + InsertVagStreamInList(stream, &g_NewStreamsList); + } + } else { + pIVar1->flags.scanned = 1; + if (pIVar1->stereo_sibling != (ISO_VAGCommand*)0x0) { + pIVar1->stereo_sibling->flags.scanned = 1; + } + if (stream->priority != pIVar1->priority_pq) { + SetNewVagCmdPri(pIVar1, stream->priority); + } + } + } + uVar2 = uVar2 + 1; + if (3 < uVar2) { + return; + } + } while (true); +} + +void CheckPlayList(List* list) { + int count; + ISO_VAGCommand* cmd; + VagStreamData* iter; + + count = list->count; + iter = list->next; +joined_r0x0000ff80: + do { + while (true) { + if (count == 0) { + return; + } + count = count + -1; + if (iter->id != 0) + break; + iter = iter->next; + } + cmd = FindThisVagStream(iter->name, iter->id); + } while (cmd == (ISO_VAGCommand*)0x0); + if (cmd->flags.running == 0) + goto code_r0x0000ffc4; + goto LAB_00010004; +code_r0x0000ffc4: + if (((cmd->flags.saw_chunks1 != 0) || (cmd->flags.file_disappeared != 0)) && + (cmd->flags.nostart == 0)) { + IsoPlayVagStream(cmd); + LAB_00010004: + RemoveVagStreamFromList(iter, list); + } + goto joined_r0x0000ff80; +} + +void StreamListThread() { + if (g_RequestedStreamsList.pending_data == 0) { + WaitSema(g_RequestedStreamsList.sema); + EmptyVagStreamList(&g_RequestedStreamsList); + g_RequestedStreamsList.unk_flag = 0; + // WaitSema(DAT_00015dd0); + // MergeVagStreamLists((List*)&g_PluginStreamsList, &g_RequestedStreamsList); + // SignalSema(DAT_00015dd0); + WaitSema(g_EEStreamsList.sema); + MergeVagStreamLists(&g_EEStreamsList, &g_RequestedStreamsList); + SignalSema(g_EEStreamsList.sema); + g_RequestedStreamsList.pending_data = 1; + SignalSema(g_RequestedStreamsList.sema); + WaitSema(g_EEPlayList.sema); + CheckPlayList(&g_EEPlayList); + SignalSema(g_EEPlayList.sema); + // WaitSema(DAT_0001e31c); + // CheckLfoList(&g_LfoStreamsList); + // SignalSema(DAT_0001e31c); + } +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/streamlist.h b/game/overlord/jakx/streamlist.h new file mode 100644 index 0000000000..e4b26eb635 --- /dev/null +++ b/game/overlord/jakx/streamlist.h @@ -0,0 +1,22 @@ +#pragma once + +#include "game/overlord/jakx/list.h" + +namespace jakx { +void jakx_overlord_init_globals_streamlist(); + +struct ISO_VAGCommand; + +extern List g_RequestedStreamsList; +extern List g_NewStreamsList; +extern List g_EEStreamsList; +extern List g_EEPlayList; + +void QueueNewStreamsFromList(List* list); +void RemoveVagStreamFromList(VagStreamData* entry, List* list); +void EmptyVagStreamList(List* list); +VagStreamData* InsertVagStreamInList(VagStreamData* entry, List* list); +VagStreamData* FindVagStreamInList(VagStreamData* entry, List* list); +void InitVagStreamList(List* list, int size, const char* name); +void StreamListThread(); +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/todo.txt b/game/overlord/jakx/todo.txt new file mode 100644 index 0000000000..68871518bb --- /dev/null +++ b/game/overlord/jakx/todo.txt @@ -0,0 +1,6 @@ +- pan stuff is wrong - it's now using a table from 989snd +- Check ssound.cpp for most of these issues, and bottom of vag.cpp +- in some cases, we're hitting different playback modes? see comment dolby crap, we hit this when going outside freedom hq +- changing file size +- UpdateVolume +- goal src update diff --git a/game/overlord/jakx/vag.cpp b/game/overlord/jakx/vag.cpp new file mode 100644 index 0000000000..62377958f0 --- /dev/null +++ b/game/overlord/jakx/vag.cpp @@ -0,0 +1,1042 @@ +#include "vag.h" + +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/basefile.h" +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/iso_queue.h" +#include "game/overlord/jakx/spustreams.h" +#include "game/overlord/jakx/srpc.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/sce/iop.h" +#include "game/sound/sdshim.h" + +#define VOICE_BIT(voice) (1 << ((voice) >> 1)) + +namespace jakx { +using namespace iop; + +bool g_bExtPause = false; +bool g_bExtResume = false; +ISO_VAGCommand g_aVagCmds[6]; +int g_anMasterVolume[32]; +bool voice_key_flags[0x30]; +u32 voice_key_times[0x30]; +u32 g_nTimeOfLastVoiceKey = 0; +bool g_bRecentlyKeyedVoice = false; +u32 g_nActiveVagStreams = 0; +u32 g_nPlaybackMode = 2; + +struct VagCmdPriListEntry { + ISO_VAGCommand* cmds[6]; +}; + +VagCmdPriListEntry g_aapVagCmdsPriList[10]; +u32 g_anVagCmdPriCounter[10]; + +void jakx_overlord_init_globals_vag() { + g_bExtPause = false; + g_bExtResume = false; + for (auto& c : g_aVagCmds) { + c = {}; + } + for (auto& x : g_anMasterVolume) { + x = 0x400; + } + g_nActiveVagStreams = 0; + g_nPlaybackMode = 2; +} + +void ISO_VAGCommand::set_all_flags_zero() { + flags.bit0 = 0; + flags.saw_chunks1 = 0; + flags.paused = 0; + flags.bit3 = 0; + + flags.running = 0; + flags.clocks_set = 0; + flags.file_disappeared = 0; + flags.scanned = 0; + + flags.bit8 = 0; + flags.stop = 0; + flags.art = 0; + flags.stereo_secondary = 0; + flags.bit12 = 0; + flags.bit13 = 0; + flags.bit14 = 0; + flags.bit15 = 0; + flags.bit16 = 0; + flags.bit17 = 0; + flags.dma_complete_even_chunk_count = 0; + flags.dma_complete_odd_chunk_count = 0; + flags.bit20 = 0; + flags.bit21 = 0; + flags.bit22 = 0; + flags.nostart = 0; + flags.movie = 0; + flags.bit25 = 0; +} + +u32 ISO_VAGCommand::pack_flags() { + u32 ret = 0; + u8* ptr = &flags.bit0; + u32 mask = 1; + for (; ptr <= &flags.bit25; ptr++) { + if (*ptr) { + ret |= mask; + } + mask <<= 1; + } + return ret; +} + +void InitVAGCmd(ISO_VAGCommand* cmd, int paused) { + set_active_a(cmd, 0); + set_active_b(cmd, 0); + set_active_c(cmd, 0); + cmd->set_all_flags_zero(); + cmd->unk_gvsp_state2 = 0; + cmd->lfo_callback = nullptr; + if (paused == 0) { + cmd->flags.paused = 0; + } else { + cmd->flags.paused = 1; + } + cmd->safe_to_modify_dma = 1; + cmd->unk_spu_mem_offset = 0x4000; + cmd->callback = NullCallback; + cmd->dma_chan = -1; + cmd->fo_min = 5; + cmd->fo_max = 0x1e; + cmd->unk_gvsp_len = 0; + cmd->position_for_ee = 0; + cmd->unk_gvsp_cntr = 0; + cmd->clocka = 0; + cmd->clockb = 0; + cmd->clockc = 0; + cmd->clockd = 0; + cmd->flags.clocks_set = 0; + cmd->flags.file_disappeared = 0; + cmd->num_isobuffered_chunks = 0; + cmd->xfer_size = 0; + cmd->vag_file_rate = 0; + cmd->error = 0; + cmd->unk_gvsp_flag = 0; + cmd->m_pBaseFile = nullptr; + cmd->stereo_sibling = nullptr; + cmd->dma_iop_mem_ptr = nullptr; + cmd->pitch_cmd = 0; + cmd->updated_trans = 0; + cmd->trans[0] = 0; + cmd->trans[1] = 0; + cmd->trans[2] = 0; + cmd->fo_curve = GetFalloffCurve(1); + cmd->play_group = 2; + set_active_a(cmd, 1); + set_active_b(cmd, 1); +} + +void InitVagCmds() { + auto now = GetSystemTimeLow(); + for (auto& x : voice_key_flags) { + x = false; + } + for (auto& x : voice_key_times) { + x = now; + } + g_nTimeOfLastVoiceKey = 0; + g_bRecentlyKeyedVoice = false; + + for (int i = 0; i < 6; i++) { + auto* cmd = &g_aVagCmds[i]; + InitVAGCmd(cmd, 1); + cmd->info_idx = i; + cmd->stream_sram = g_auStrmSRAM[i]; + cmd->trap_sram = g_auTrapSRAM[i]; + cmd->voice = g_anStreamVoice[i]; + cmd->music_flag = i >= 4; + cmd->file_def = nullptr; + cmd->vag_file_def = nullptr; + cmd->vag_dir_entry = nullptr; + cmd->flags.saw_chunks1 = 0; + cmd->play_volume = 0; + cmd->pitch_cmd = 0; + cmd->id = 0; + cmd->plugin_id = 0; + cmd->maybe_sound_handler = 0; + cmd->oog = 0; + cmd->dolby_pan_angle = 0; + cmd->priority_pq = 0; + cmd->art_flag = 0; + cmd->movie_flag = 0; + } + + for (auto& level : g_aapVagCmdsPriList) { + for (auto& cmd : level.cmds) { + cmd = nullptr; + } + } + for (auto& x : g_anVagCmdPriCounter) { + x = 0; + } + // oops - wrong value from jak 2 maybe? + g_anVagCmdPriCounter[0] = 4; +} + +void RemoveVagCmd(ISO_VAGCommand* cmd) { + ASSERT(cmd); + ASSERT(!cmd->music_flag); + ASSERT(cmd->info_idx < 4); + + g_aapVagCmdsPriList[cmd->priority_pq].cmds[cmd->info_idx] = nullptr; + if (g_anVagCmdPriCounter[cmd->priority_pq]) { + g_anVagCmdPriCounter[cmd->priority_pq]--; + } else { + ASSERT_NOT_REACHED(); + } + g_anVagCmdPriCounter[0]++; +} + +ISO_VAGCommand* FindFreeVagCmd() { + for (int i = 0; i < 4; i++) { + if (g_aVagCmds[i].id == 0) { + return &g_aVagCmds[i]; + } + } + return nullptr; +} + +void SetNewVagCmdPri(ISO_VAGCommand* cmd, int pri) { + ASSERT(cmd); + ASSERT(!cmd->music_flag); + ASSERT(cmd->info_idx < 4); + auto old_pri = cmd->priority_pq; + g_aapVagCmdsPriList[old_pri].cmds[cmd->info_idx] = nullptr; + if (0 < g_anVagCmdPriCounter[old_pri]) { + g_anVagCmdPriCounter[old_pri]--; + } else { + ASSERT_NOT_REACHED(); + } + g_anVagCmdPriCounter[pri]++; + cmd->priority_pq = pri; + g_aapVagCmdsPriList[pri].cmds[cmd->info_idx] = cmd; +} + +int HowManyBelowThisPriority(int max_pri) { + int count = 0; + for (int i = 0; i < max_pri; i++) { + count += g_anVagCmdPriCounter[i]; + } + return count; +} + +/*! + * The "smart"ness of this function is less than advertised. + */ +ISO_VAGCommand* SmartAllocMusicVagCommand(const ISO_VAGCommand* user_command, int flag) { + ASSERT(user_command); + int idx = flag ? 5 : 4; + auto* cmd = &g_aVagCmds[idx]; + if (cmd->id == 0) { + g_nActiveMusicStreams++; + } + return cmd; +} + +ISO_VAGCommand* SmartAllocVagCmd(ISO_VAGCommand* user_cmd) { + ASSERT(user_cmd); + ISO_VAGCommand* cmd = FindFreeVagCmd(); + if (!cmd && (cmd = FindNotQueuedVagCmd(), !cmd)) { + u32 pri = 0; + if ((user_cmd->priority_pq != 0) && (pri = 0, user_cmd->priority_pq != 0)) { + do { + u32 cmd_idx = 0; + do { + auto* pIVar1 = g_aapVagCmdsPriList[pri].cmds[cmd_idx]; + if (pIVar1 && (cmd = pIVar1, pIVar1->flags.stereo_secondary == 0)) { + pri = user_cmd->priority_pq; + cmd_idx = 4; + cmd = pIVar1; + } + cmd_idx = cmd_idx + 1; + } while (cmd_idx < 4); + pri = pri + 1; + } while (pri < (u32)user_cmd->priority_pq); + } + if (!cmd) { + return nullptr; + } + } + g_nActiveVagStreams = g_nActiveVagStreams + 1; + return cmd; +} + +void FreeVagCmd(ISO_VAGCommand* cmd) { + set_active_a(cmd, 0); + set_active_b(cmd, 0); + set_active_c(cmd, 0); + cmd->set_all_flags_zero(); + + cmd->flags.paused = 1; + cmd->flags.saw_chunks1 = 0; + cmd->flags.scanned = 0; + cmd->clocka = 0; + cmd->clockb = 0; + cmd->clockc = 0; + cmd->clockd = 0; + SetVagStreamName(cmd, 0); + cmd->safe_to_modify_dma = 1; + cmd->unk_spu_mem_offset = 0x4000; + cmd->callback = NullCallback; + cmd->dma_chan = -1; + cmd->lfo_callback = 0; + cmd->pitch1 = 0; + cmd->pitch1_file = 0; + cmd->file_def = nullptr; + cmd->vag_file_def = nullptr; + cmd->vag_dir_entry = nullptr; + cmd->unk_gvsp_len = 0; + cmd->position_for_ee = 0; + cmd->unk_gvsp_cntr = 0; + cmd->name[0] = 0; + cmd->num_isobuffered_chunks = 0; + cmd->xfer_size = 0; + cmd->vag_file_rate = 0; + cmd->error = 0; + cmd->unk_gvsp_flag = 0; + cmd->play_volume = 0; + cmd->pitch_cmd = 0; + cmd->id = 0; + cmd->plugin_id = 0; + cmd->maybe_sound_handler = 0; + cmd->priority_pq = 0; + cmd->art_flag = 0; + cmd->movie_flag = 0; + cmd->updated_trans = 0; + cmd->m_pBaseFile = nullptr; + cmd->dma_iop_mem_ptr = nullptr; + cmd->unk_gvsp_state2 = 0; + if (!cmd->music_flag) { + if (0 < g_nActiveVagStreams) { + g_nActiveVagStreams = g_nActiveVagStreams + -1; + } else { + ASSERT_NOT_REACHED(); + } + } else { + if (0 < g_nActiveMusicStreams) { + g_nActiveMusicStreams = g_nActiveMusicStreams + -1; + } else { + ASSERT_NOT_REACHED(); + } + } + // CpuResumeIntr(local_10[0]); +} + +void SetVagStreamsNotScanned() { + for (int i = 0; i < 4; i++) { + g_aVagCmds[i].flags.scanned = false; + } +} + +void SetVagStreamsNoStart(int value) { + for (int i = 0; i < 4; i++) { + g_aVagCmds[i].flags.nostart = value; + } +} + +ISO_VAGCommand* FindNotQueuedVagCmd() { + for (int i = 0; i < 4; i++) { + auto* cmd = &g_aVagCmds[i]; + if (!cmd->flags.scanned && !cmd->flags.stereo_secondary && !cmd->flags.running) { + return cmd; + } + } + return nullptr; +} + +int AnyVagRunning() { + int count = 0; + for (int i = 0; i < 4; i++) { + if (g_aVagCmds[i].flags.running) { + count++; + } + } + return count; +} + +ISO_VAGCommand* FindVagStreamPluginId(int id) { + if (id == 0) { + return nullptr; + } + for (int i = 0; i < 4; i++) { + auto* cmd = &g_aVagCmds[i]; + if (cmd->plugin_id == id) { + return cmd; + } + } + return nullptr; +} + +ISO_VAGCommand* FindVagStreamId(int id) { + if (id == 0) { + return nullptr; + } + for (int i = 0; i < 4; i++) { + auto* cmd = &g_aVagCmds[i]; + if (cmd->id == id) { + return cmd; + } + } + return nullptr; +} + +ISO_VAGCommand* FindVagStreamName(const char* name) { + for (int i = 0; i < 4; i++) { + auto* cmd = &g_aVagCmds[i]; + if (strcmp(cmd->name, name) == 0) { + return cmd; + } + } + return nullptr; +} + +ISO_VAGCommand* FindThisVagStream(const char* name, int id) { + for (int i = 0; i < 4; i++) { + auto* cmd = &g_aVagCmds[i]; + if (strcmp(cmd->name, name) == 0 && cmd->id == id) { + return cmd; + } + } + return nullptr; +} + +ISO_VAGCommand* FindMusicStreamName(const char* name) { + for (int i = 4; i < 6; i++) { + auto* cmd = &g_aVagCmds[i]; + if (strcmp(cmd->name, name) == 0) { + return cmd; + } + } + return nullptr; +} + +ISO_VAGCommand* FindThisMusicStream(const char* name, int id) { + for (int i = 4; i < 6; i++) { + auto* cmd = &g_aVagCmds[i]; + if (strcmp(cmd->name, name) == 0 && cmd->id == id) { + return cmd; + } + } + return nullptr; +} + +/*! + * Immediately stop the audio playback of a command, without the ability to resume. + * This will key off voices. + */ +void StopVAG(ISO_VAGCommand* cmd) { + // mark buffer inactive, so we don't stream more data + set_active_a(cmd, 0); + set_active_b(cmd, 0); + + // safely pause playback + PauseVAG(cmd); + + // deal with SPU voices: + if (cmd->flags.clocks_set) { + // do individual voice blocks + u32 voice_mask = VOICE_BIT(cmd->voice); + BlockUntilVoiceSafe(cmd->voice, 0x900); + auto* sibling = cmd->stereo_sibling; + if (sibling) { + voice_mask |= VOICE_BIT(sibling->voice); + BlockUntilVoiceSafe(sibling->voice, 0x900); + } + BlockUntilAllVoicesSafe(); + + sceSdSetSwitch((cmd->voice & 1) | SD_S_KOFF, voice_mask); + + auto now = GetSystemTimeLow(); + MarkVoiceKeyedOnOff(cmd->voice, now); + if (sibling) { + MarkVoiceKeyedOnOff(sibling->voice, now); + } + } + + // clear out command + cmd->set_all_flags_zero(); + cmd->callback = NullCallback; + cmd->clockd = 0; + cmd->play_volume = 0; + cmd->pitch_cmd = 0; + cmd->id = 0; + cmd->plugin_id = 0; + cmd->maybe_sound_handler = 0; + cmd->lfo_callback = 0; + cmd->pitch1 = 0; + cmd->pitch1_file = 0; + cmd->clocka = 0; + cmd->clockb = 0; + cmd->clockc = 0; +} + +/*! + * Stop a VAG, also remove it from lists of active commands. + */ +void TerminateVAG(ISO_VAGCommand* in_cmd) { + // ISO_VAGCommand *sibling; + // VagStreamData vsd; + // undefined auStack64 [36]; + // int local_1c; + // int local_18; + // bool not_music; + ASSERT(in_cmd); + bool not_music = !in_cmd->music_flag; + VagStreamData vsd; + strncpy(vsd.name, in_cmd->name, 0x30); + vsd.id = in_cmd->id; + StopVAG(in_cmd); + ReleaseMessage(in_cmd); + if (not_music) { + RemoveVagCmd(in_cmd); + } + FreeVagCmd(in_cmd); + auto* sibling = in_cmd->stereo_sibling; + if (sibling) { + sibling->flags.scanned = 0; + if (not_music) { + RemoveVagCmd(sibling); + } + FreeVagCmd(sibling); + } + if (not_music) { + if (in_cmd->maybe_sound_handler != 0) { + // TODO LFO support + // RemoveVagStreamFromList(&vsd, &g_PluginStreamsList); + // RemoveLfoStreamFromList(auStack64, &g_LfoStreamsList); + ASSERT_NOT_REACHED(); + } + RemoveVagStreamFromList(&vsd, &g_EEPlayList); + } +} + +/*! + * Pause a vag stream by setting the volume to 0, the pitch to 0, then keying off the voice. + */ +void PauseVAG(ISO_VAGCommand* cmd) { + if (cmd->flags.paused == 0) { + // CpuSuspendIntr(local_18); + if (cmd->flags.stereo_secondary == 0) { + auto* sibling = cmd->stereo_sibling; + if (!sibling) { + if (cmd->flags.saw_chunks1) { + // this means we enabled volume before, so disable it. + static_assert(SD_VP_VOLL == 0); + static_assert(SD_VP_VOLR == 0x100); + static_assert(SD_VP_PITCH == 0x200); + sceSdSetParam(cmd->voice | SD_VP_VOLL, 0); + sceSdSetParam(cmd->voice | SD_VP_VOLR, 0); + } + + // in either case, set pitch to 0 to stop playback. + sceSdSetParam(cmd->voice | SD_VP_PITCH, 0); + + auto voice = cmd->voice; + BlockUntilVoiceSafe(voice, 0x900); + BlockUntilAllVoicesSafe(); + // key off + sceSdSetSwitch((cmd->voice & 1) | SD_S_KOFF, VOICE_BIT(voice)); + MarkVoiceKeyedOnOff(cmd->voice, GetSystemTimeLow()); + + // remember where to resume from + if (cmd->flags.clocks_set == 0) { + cmd->current_spu_address = 0; + } else { + cmd->current_spu_address = GetSpuRamAddress(cmd); + } + cmd->flags.paused = 1; + } else { + if (cmd->flags.saw_chunks1 != 0) { + sceSdSetParam(cmd->voice | SD_VP_VOLL, 0); + sceSdSetParam(cmd->voice | SD_VP_VOLR, 0); + sceSdSetParam(sibling->voice | SD_VP_VOLL, 0); + sceSdSetParam(sibling->voice | SD_VP_VOLR, 0); + } + sceSdSetParam(sibling->voice | SD_VP_PITCH, 0); + sceSdSetParam(cmd->voice | SD_VP_PITCH, 0); + auto sibling_voice = sibling->voice; + auto voice = cmd->voice; + BlockUntilVoiceSafe(voice, 0x900); + BlockUntilVoiceSafe(sibling->voice, 0x900); + BlockUntilAllVoicesSafe(); + sceSdSetSwitch((cmd->voice & 1) | SD_S_KOFF, + (VOICE_BIT(voice)) | (VOICE_BIT(sibling_voice))); + auto now = GetSystemTimeLow(); + MarkVoiceKeyedOnOff(cmd->voice, now); + MarkVoiceKeyedOnOff(sibling->voice, now); + if (cmd->flags.clocks_set == 0) { + cmd->current_spu_address = 0; + sibling->current_spu_address = 0; + } else { + u32 spu_ram_addr = GetSpuRamAddress(cmd); + cmd->current_spu_address = spu_ram_addr & 0xfffffff8; + sibling->current_spu_address = + ((spu_ram_addr & 0xfffffff8) - cmd->stream_sram) + sibling->stream_sram; + } + cmd->flags.paused = 1; + sibling->flags.paused = 1; + } + } + // CpuResumeIntr(local_18[0]); + } +} + +namespace { +u32 read_rate_calc(u32 pitch) { + u64 pitch1 = (pitch >> 3); + u64 mult_result = pitch1 * 0x2492'4925ull; + return mult_result >> 32; +} +} // namespace +/*! + * Start up a VAG stream after it was paused. Also, used to start a vag stream for the first time. + */ +void UnPauseVAG(ISO_VAGCommand* cmd) { + if (cmd->flags.paused) { + // CpuSuspendIntr(&local_28); + if (cmd->flags.stereo_secondary == 0) { + auto* sibling = cmd->stereo_sibling; + auto pitch = CalculateVAGPitch(cmd->pitch1, cmd->pitch_cmd); + + // calculate read rate + if (cmd->m_pBaseFile) { + auto p2 = CalculateVAGPitch(cmd->pitch1_file, cmd->pitch_cmd); + u32 rate; + if (sibling == (ISO_VAGCommand*)0x0) { + rate = p2 * 0x177; + } else { + rate = p2 * 0x2ee; + } + cmd->m_pBaseFile->m_ReadRate = read_rate_calc(rate); + } + + int lvol, rvol; + CalculateVAGVolumes(cmd, &lvol, &rvol); + if (!sibling) { + // only update volume here if we've actually started the stream. + // otherwise, the stream is still getting set up, and the unpause will occur in + // the SPU interrupt handler. + if (cmd->flags.saw_chunks1) { + BlockUntilVoiceSafe(cmd->voice, 0x900); + if (cmd->current_spu_address != 0) { + sceSdSetAddr(cmd->voice | SD_VA_SSA, cmd->current_spu_address); + } + sceSdSetParam(cmd->voice | SD_VP_PITCH, pitch & 0xffff); + BlockUntilAllVoicesSafe(); + // lg::error("keying on 1!"); + sceSdSetSwitch((cmd->voice & 1) | SD_S_KON, VOICE_BIT(cmd->voice)); + MarkVoiceKeyedOnOff(cmd->voice, GetSystemTimeLow()); + sceSdSetParam(cmd->voice | SD_VP_VOLL, lvol); + sceSdSetParam(cmd->voice | SD_VP_VOLR, rvol); + } + cmd->flags.paused = 0; + } else { + if (cmd->flags.saw_chunks1) { + BlockUntilVoiceSafe(cmd->voice, 0x900); + BlockUntilVoiceSafe(sibling->voice, 0x900); + sceSdSetParam(cmd->voice | SD_VP_PITCH, pitch & 0xffff); + sceSdSetParam(sibling->voice | SD_VP_PITCH, pitch & 0xffff); + if (cmd->current_spu_address != 0) { + sceSdSetAddr(cmd->voice | SD_VA_SSA, cmd->current_spu_address); + sceSdSetAddr(sibling->voice | SD_VA_SSA, sibling->current_spu_address); + } + BlockUntilAllVoicesSafe(); + sceSdSetSwitch((cmd->voice & 1) | SD_S_KON, + (VOICE_BIT(cmd->voice)) | (VOICE_BIT(sibling->voice))); + auto now = GetSystemTimeLow(); + MarkVoiceKeyedOnOff(cmd->voice, now); + MarkVoiceKeyedOnOff(sibling->voice, now); + sceSdSetParam(cmd->voice | SD_VP_VOLL, lvol); + sceSdSetParam(sibling->voice | SD_VP_VOLL, 0); + sceSdSetParam(cmd->voice | SD_VP_VOLR, 0); + sceSdSetParam(sibling->voice | SD_VP_VOLR, rvol); + } + cmd->flags.paused = 0; + sibling->flags.paused = 0; + } + } + // CpuResumeIntr(local_28); + } +} + +// TODO: needs some cleanup +void RestartVag(ISO_VAGCommand* cmd, int p) { + (void)p; + // CpuSuspendIntr(&local_28); + int lvol, rvol; + CalculateVAGVolumes(cmd, &lvol, &rvol); + if (cmd->flags.stereo_secondary == 0) { + auto* sibling = cmd->stereo_sibling; + u32 voice_mask = VOICE_BIT(cmd->voice); + BlockUntilVoiceSafe(cmd->voice, 0x900); + if (sibling) { + voice_mask |= VOICE_BIT(sibling->voice); + BlockUntilVoiceSafe(sibling->voice, 0x900); + } + BlockUntilAllVoicesSafe(); + sceSdSetSwitch((cmd->voice & 1) | SD_S_KOFF, voice_mask); + sceSdSetParam(cmd->voice | SD_VP_VOLL, 0); + sceSdSetParam(cmd->voice | SD_VP_VOLR, 0); + // wtf is this crap + // CpuResumeIntr(local_28); + DelayThread(100); + // CpuSuspendIntr(&local_28); + u32 bVar1; + u32 uVar4; + if (sibling == (ISO_VAGCommand*)0x0) { + bVar1 = cmd->voice; + uVar4 = cmd->stream_sram; + } else { + sceSdSetParam(sibling->voice, 0); + sceSdSetParam(sibling->voice | 0x100, 0); + sceSdSetAddr(cmd->voice | 0x2040, cmd->stream_sram); + bVar1 = sibling->voice; + uVar4 = sibling->stream_sram; + } + sceSdSetAddr(bVar1 | 0x2040, uVar4); + BlockUntilAllVoicesSafe(); + sceSdSetSwitch((cmd->voice & 1) | 0x1500, voice_mask); + auto uVar3 = GetSystemTimeLow(); + MarkVoiceKeyedOnOff(cmd->voice, uVar3); + u32 uVar2; + if (!sibling) { + sceSdSetParam(cmd->voice, lvol); + uVar2 = cmd->voice; + } else { + MarkVoiceKeyedOnOff(sibling->voice, uVar3); + sceSdSetParam(cmd->voice, lvol); + sceSdSetParam(sibling->voice, 0); + sceSdSetParam(cmd->voice | 0x100, 0); + uVar2 = sibling->voice; + } + sceSdSetParam(uVar2 | 0x100, rvol); + } + // CpuResumeIntr(local_28); +} + +void PauseVagStreams(bool music) { + if (music != 0) { + WaitSema(g_nMusicSemaphore); + g_bAnotherMusicPauseFlag = true; + g_bMusicIsPaused = true; + } + + for (int i = 0; i < (music ? 6 : 4); i++) { + auto* cmd = &g_aVagCmds[i]; + if (cmd->flags.running && !cmd->flags.paused) { + PauseVAG(cmd); + } + } + + if (music != 0) { + SignalSema(g_nMusicSemaphore); + } +} + +void UnPauseVagStreams(bool music) { + int iVar1; + ISO_VAGCommand* cmd; + + if (music != 0) { + WaitSema(g_nMusicSemaphore); + } + cmd = g_aVagCmds; + iVar1 = 4; + if ((music != 0) && (iVar1 = 6, g_bMusicPause != 0)) { + iVar1 = 4; + } + while (iVar1 != 0) { + iVar1 = iVar1 + -1; + if ((cmd->flags.running != 0) && (cmd->flags.paused != 0)) { + UnPauseVAG(cmd); + } + cmd = cmd + 1; + } + if (music != 0) { + g_bAnotherMusicPauseFlag = false; + if (g_bMusicPause == 0) { + g_bMusicIsPaused = false; + } + SignalSema(g_nMusicSemaphore); + } +} + +int CalculateDolbyPanAngle(ISO_VAGCommand* cmd, u32 angle) { + int iVar1; + int iVar2; + + iVar1 = 0; + if (cmd != (ISO_VAGCommand*)0x0) { + if (0x167 < angle) { + // TODO: sus 64-bit multiply + angle = angle + (u32)((u64)(angle >> 3) * 0x16c16c17 >> 0x22) * -0x168; + } + iVar1 = cmd->dolby_pan_angle; + iVar2 = iVar1; + if (0x167 < iVar1) { + iVar2 = iVar1 + -0x168; + } + iVar2 = angle - iVar2; + if (iVar2 < -0xb4) { + iVar2 = iVar2 + 0x168; + } else { + if (0xb4 < iVar2) { + iVar2 = iVar2 + -0x168; + } + } + iVar1 = iVar1 + iVar2; + if (iVar1 < 0) { + iVar1 = iVar1 + 0x2d0; + } + if (0x2cf < iVar1) { + iVar1 = iVar1 + -0x2d0; + } + cmd->dolby_pan_angle = iVar1; + } + return iVar1; +} + +void CalculateVAGVolumes(ISO_VAGCommand* cmd, int* lvol, int* rvol) { + u32 angle; + int iVar3; + int iVar4; + int iVar5; + u32 uVar7; + u32 uVar8; + int iVar9; + + ASSERT(cmd && lvol && rvol); + + iVar9 = g_nPlaybackMode; + iVar3 = 0x3fff; + iVar4 = 0x3fff; + uVar8 = 0; + if (cmd->music_flag == 0) { + iVar5 = cmd->maybe_sound_handler; + if (iVar5 == 0) { + if (cmd->updated_trans == 0) { + uVar7 = (u32)(cmd->play_volume * g_anMasterVolume[cmd->play_group]) >> 6; + goto LAB_0000bb58; + } + uVar7 = CalculateFalloffVolume(cmd->trans, + (cmd->play_volume * g_anMasterVolume[cmd->play_group]) >> 10, + cmd->fo_curve, cmd->fo_min, cmd->fo_max, 0, 0); + iVar3 = CalculateAngle(cmd->trans, cmd->fo_curve, 0); + angle = iVar3 + 0x5aU + (u32)((u64)((iVar3 + 0x5aU) >> 3) * 0x16c16c17 >> 0x22) * -0x168; + if (0x400 < uVar7) { + uVar7 = 0x400; + } + uVar7 = uVar7 << 4 | uVar7 >> 6; + } else { + ASSERT_NOT_REACHED(); + } + + if (iVar9 == 1) { + iVar3 = 0x2d41; + iVar4 = 0x2d41; + } else { + if (iVar9 < 2) { + iVar3 = 0x2d41; + if (iVar9 == 0) { + // ASSERT_NOT_REACHED(); // dolby crap + // TODO: + iVar4 = 0x2d41; + // uVar8 = CalculateDolbyPanAngle(cmd, angle); + // iVar9 = (uint)((u64)(uVar8 >> 1) * 0xb60b60b7 >> 0x25) * 4; + // if (0x167 < uVar8) { + // uVar8 = uVar8 - 0x168; + // } + // if (uVar8 < 0xb4) { + // psVar6 = (short*)(g_aPanTable + uVar8 * 4); + // sVar1 = psVar6[1]; + // sVar2 = *psVar6; + // } else { + // iVar3 = g_aPanTable + uVar8 * 4; + // sVar1 = *(short*)(iVar3 + -0x2d0); + // sVar2 = *(short*)(iVar3 + -0x2ce); + // } + // iVar4 = (int)sVar1; + // iVar3 = (int)sVar2; + // if ((int)((uint) * (ushort*)(iVar9 + 0x15800) << 0x10) < 0) { + // iVar3 = -iVar3; + // } + // if (*(short*)(iVar9 + 0x15802) < 0) { + // iVar4 = -iVar4; + // } + // uVar8 = 0xffffc001; + } else { + iVar4 = 0x2d41; + } + } else { + iVar3 = 0x2d41; + if (iVar9 == 2) { + cmd->dolby_pan_angle = angle; + if (angle < 0xb4) { + auto pte = g_aPanTable[angle]; + // psVar6 = (short*)(g_aPanTable + angle * 4); + iVar4 = pte.right; + iVar3 = pte.left; + } else { + // iVar3 = g_aPanTable + angle * 4; + u32 angle2 = (angle - 180); + ASSERT(angle2 < 360); + auto pte = g_aPanTable[angle2]; + iVar4 = pte.left; + iVar3 = pte.right; + } + } else { + iVar4 = 0x2d41; + } + } + } + } else { + uVar7 = ((u32)(g_nMusicFade * g_anMasterVolume[1]) >> 0xc) * g_nMusicTweak >> 7; + } + +LAB_0000bb58: + iVar9 = iVar4; + if (g_CameraInvert != 0) { + iVar9 = iVar3; + iVar3 = iVar4; + } + iVar3 = iVar3 * uVar7; + iVar9 = iVar9 * uVar7; + if (iVar3 < 0) { + iVar3 = iVar3 + 0x3fff; + } + uVar7 = iVar3 >> 0xe; + if (iVar9 < 0) { + iVar9 = iVar9 + 0x3fff; + } + angle = iVar9 >> 0xe; + if (0x3fff < (int)uVar7) { + uVar7 = 0x3fff; + } + if ((int)uVar7 < (int)uVar8) { + uVar7 = uVar8; + } + *lvol = uVar7 & 0x7fff; + if (0x3fff < (int)angle) { + angle = 0x3fff; + } + if ((int)angle < (int)uVar8) { + angle = uVar8; + } + *rvol = angle & 0x7fff; +} + +s32 CalculateVAGPitch(int param_1, int param_2) { + if (param_2) { + if (param_2 <= 0) { + return 0x5f4 * param_1 / (0x5f4 - param_2); + } else { + return param_1 * (param_2 + 0x5f4) / 0x5f4; + } + } + + return param_1; + // if (b != 0) { + // if (0 < b) { + // return (a * (b + 0x5f4)) / 0x5f4; + // } + // a = (a * 0x5f4) / (0x5f4U - b); + // } + // return a; +} + +void SetVAGVol(ISO_VAGCommand* cmd) { + if (cmd && cmd->flags.running && !cmd->flags.paused && !cmd->flags.stereo_secondary) { + auto* sibling = cmd->stereo_sibling; + int lvol, rvol; + CalculateVAGVolumes(cmd, &lvol, &rvol); + auto* file = cmd->m_pBaseFile; + if (file) { + u32 rate = CalculateVAGPitch(cmd->pitch1_file, cmd->pitch_cmd); + if (!sibling) { + rate = rate * 0x177; + } else { + rate = rate * 0x2ee; + } + file->m_ReadRate = read_rate_calc(rate); + } + + // like jak2, rewritten to not use sceSdProcBatch + if (!sibling) { + sceSdSetParam(SD_VP_VOLL | cmd->voice, lvol); + sceSdSetParam(SD_VP_VOLR | cmd->voice, rvol); + sceSdSetParam(SD_VP_PITCH | cmd->voice, CalculateVAGPitch(cmd->pitch1, cmd->pitch_cmd)); + } else { + // left channel, left vol + if (g_CameraInvert) { + sceSdSetParam(SD_VP_VOLL | cmd->voice, 0); + } else { + sceSdSetParam(SD_VP_VOLL | cmd->voice, lvol); + } + + // right channel, left vol + if (g_CameraInvert) { + sceSdSetParam(SD_VP_VOLL | sibling->voice, rvol); + } else { + sceSdSetParam(SD_VP_VOLL | sibling->voice, 0); + } + + if (g_CameraInvert) { + sceSdSetParam(SD_VP_VOLR | cmd->voice, lvol); + } else { + sceSdSetParam(SD_VP_VOLR | cmd->voice, 0); + } + + if (g_CameraInvert) { + sceSdSetParam(SD_VP_VOLR | sibling->voice, 0); + } else { + sceSdSetParam(SD_VP_VOLR | sibling->voice, rvol); + } + + sceSdSetParam(SD_VP_PITCH | cmd->voice, CalculateVAGPitch(cmd->pitch1, cmd->pitch_cmd)); + } + // CpuSuspendIntr(local_20); + // sceSdProcBatch(batch, 0, count); + // CpuResumeIntr(local_20[0]); + } +} + +void SetAllVagsVol(int x) { + if (x < 0) { + for (int i = 0; i < 4; i++) { + SetVAGVol(&g_aVagCmds[i]); + } + } else { + for (int i = 0; i < 4; i++) { + if (g_aVagCmds[i].maybe_sound_handler) { + ASSERT_NOT_REACHED(); + // there's more check before this... + SetVAGVol(&g_aVagCmds[i]); + } + } + } +} + +void VAG_MarkLoopStart(uint8_t* data) { + data[0x11] = 2; + data[1] = 6; +} + +void VAG_MarkLoopEnd(uint8_t* data, int offset) { + data[offset + -0xf] = 3; +} +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/vag.h b/game/overlord/jakx/vag.h new file mode 100644 index 0000000000..41da58a2bf --- /dev/null +++ b/game/overlord/jakx/vag.h @@ -0,0 +1,173 @@ +#pragma once + +#include "game/overlord/jakx/isocommon.h" +namespace jakx { +void jakx_overlord_init_globals_vag(); + +extern bool g_bExtPause; +extern bool g_bExtResume; + +struct ISO_VAGCommand : ISO_Hdr { + ISOFileDef* vag_file_def = nullptr; // 44 (actually INT file def?) + VagDirEntry* vag_dir_entry = nullptr; // 48 + ISO_VAGCommand* stereo_sibling = nullptr; // 52 + + // pointer to IOP memory to DMA to SPU. Points to the data for the next new transfer. + const u8* dma_iop_mem_ptr = nullptr; // 56 + + // the DMA channel to upload to for sceCdVoiceTrans + int dma_chan = 0; // 60 + + // if not set, a pending dma interrupt will want to modify this command. + int safe_to_modify_dma = 0; // 64 + + u32 current_spu_address = 0; // 68 + + char name[48]; // 72 + char overflow[16]; + + // SPU address of the next chunk to fill + // for stereo mode, there's a 0x2000 offset between the left and right audio. This stream_sram + // doesn't include that offset. + u32 stream_sram; // 124 + u32 trap_sram; // 138 + + // spu voice for playback + int voice; // 132 + int info_idx; // 136 + int maybe_sound_handler = 0; // 140 + void* lfo_callback = nullptr; // 144 + + int oog = 0; // 180 + int dolby_pan_angle = 0; // 184 + int clocka = 0; // 188 + int clockb = 0; // 192 + int clockc = 0; // 196 + int clockd = 0; // 200 + int unk_gvsp_len; // 204 + int position_for_ee; // 208 + int unk_gvsp_cntr; // 212 + + struct { + u8 bit0 = 0; // 216 + u8 saw_chunks1 = 0; // 217 + // will start the voice, but with a pitch of 0. + u8 paused = 0; // 218 + u8 bit3 = 0; // 219 + u8 running = 0; // 220 + u8 clocks_set = 0; // 221, set by SetVagClock if it succeeds. + u8 file_disappeared = 0; // 222, set if SetVagClock notices that bBaseFile is gone! + u8 scanned = 0; // 223, set shortly after internal command is created. + u8 bit8 = 0; + u8 stop = 0; // 225, set if this is a non-plugin stream, and was stopped by StopVagStream. + u8 art = 0; // 226, set if this has art_flag set + // set if we are the non-main stereo command. + u8 stereo_secondary = 0; // 227 + u8 bit12 = 0; // 228 + u8 bit13 = 0; // 229 + u8 bit14 = 0; // 230 + u8 bit15 = 0; // 231 + u8 bit16 = 0; // 232 + u8 bit17 = 0; // 233 + // set if SPU DMA has completed for an even or odd number of chunks of non-stereo audio. + u8 dma_complete_even_chunk_count = 0; // 234 + u8 dma_complete_odd_chunk_count = 0; // 235 + u8 bit20 = 0; + u8 bit21 = 0; + u8 bit22 = 0; + u8 nostart = 0; + u8 movie = 0; + u8 bit25 = 0; + } flags; + + u32 pack_flags(); + + void set_all_flags_zero(); + int unk_gvsp_state2 = 0; // 244 + int num_isobuffered_chunks = 0; // 248 + + // if we need to do a second SPU DMA for stereo's second channel, the size of that transfer + int xfer_size; // 252 + int vag_file_rate; // 256 + + int pitch1; // 260 pitch to use for playback, possibly overwritten + int pitch1_file; // 264 pitch to use for playback, from the file itself (sample rate) + int pitch_cmd; // 268 pitch mod command (?) + int error; // 272 + int unk_spu_mem_offset; // 276 + int unk_gvsp_flag; // 280 + int play_volume = 0; // 284 + int id = 0; // 288 + int plugin_id = 0; // 292 + int priority_pq = 0; // 296 + int art_flag = 0; // 300 + int music_flag = 0; // 304 + int updated_trans = 0; // 308 + int trans[3]; // 312 + int fo_min; // 324 + int fo_max; // 328 + int fo_curve; // 332 + int play_group = 0; // 336 + int movie_flag = 0; // 340 +}; + +struct VagStreamData { + VagStreamData* next = nullptr; + VagStreamData* prev = nullptr; + int in_use; + char name[0x30]; + int id; + int plugin_id; + int sound_handler; + int art_load; + int movie_art_load; + int priority; + int unk2; + int unk1; + int volume2; + int maybe_volume_3; + int group; +}; + +extern ISO_VAGCommand g_aVagCmds[6]; +extern int g_anMasterVolume[32]; +extern bool voice_key_flags[0x30]; +extern u32 voice_key_times[0x30]; +extern u32 g_nTimeOfLastVoiceKey; +extern bool g_bRecentlyKeyedVoice; + +int CalculateVAGPitch(int a, int b); +void BlockUntilVoiceSafe(int, u32); +void BlockUntilAllVoicesSafe(); +void CheckVagStreamsProgress(); +void MarkVoiceKeyedOnOff(int voice, u32 systime); +void UnPauseVAG(ISO_VAGCommand* cmd); +ISO_VAGCommand* FindMusicStreamName(const char* name); +ISO_VAGCommand* SmartAllocMusicVagCommand(const ISO_VAGCommand* user_command, int flag); +void InitVAGCmd(ISO_VAGCommand* cmd, int paused); +int HowManyBelowThisPriority(int pri); +ISO_VAGCommand* FindThisVagStream(const char* name, int id); +ISO_VAGCommand* SmartAllocVagCmd(ISO_VAGCommand* user_command); +void RemoveVagCmd(ISO_VAGCommand* cmd); +void SetNewVagCmdPri(ISO_VAGCommand* cmd, int pri); +void TerminateVAG(ISO_VAGCommand* cmd); +ISO_VAGCommand* FindThisMusicStream(const char* name, int id); +ISO_VAGCommand* FindVagStreamName(const char* name); +int AnyVagRunning(); +void PauseVAG(ISO_VAGCommand* cmd); +void InitVagCmds(); +void PauseVagStreams(bool music); +void UnPauseVagStreams(bool music); +void SetVagStreamsNoStart(int value); +ISO_VAGCommand* FindVagStreamId(int); +void SetVAGVol(ISO_VAGCommand* cmd); +void SetAllVagsVol(int); +void PauseVAGStreams(); +ISO_VAGCommand* FindNotQueuedVagCmd(); +void CalculateVAGVolumes(ISO_VAGCommand* cmd, int* l, int* r); +void SetVagStreamsNotScanned(); +void VAG_MarkLoopEnd(uint8_t* data, int offset); +void VAG_MarkLoopStart(uint8_t* data); +void RestartVag(ISO_VAGCommand* cmd, int p); +extern u32 g_nPlaybackMode; +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/vblank_handler.cpp b/game/overlord/jakx/vblank_handler.cpp new file mode 100644 index 0000000000..337e779780 --- /dev/null +++ b/game/overlord/jakx/vblank_handler.cpp @@ -0,0 +1,201 @@ +#include "vblank_handler.h" + +#include + +#include "common/log/log.h" +#include "common/util/Assert.h" + +#include "game/overlord/jakx/dma.h" +#include "game/overlord/jakx/iso.h" +#include "game/overlord/jakx/sbank.h" +#include "game/overlord/jakx/srpc.h" +#include "game/overlord/jakx/ssound.h" +#include "game/overlord/jakx/streamlist.h" +#include "game/overlord/jakx/vag.h" +#include "game/sce/iop.h" + +namespace jakx { +using namespace iop; +u32 g_nInfoEE = 0; +SoundIOPInfo g_SRPCSoundIOPInfo; +bool g_bVBlankInitialized = false; +s32 g_nVBlankThreadID = -1; +s32 g_nVBlankSemaphoreID = -1; +bool g_bVBlankRegistered = false; +u32 g_nIopTicks = 0; +u32 g_nFrameNum = 0; +void jakx_overlord_init_globals_vblank_handler() { + g_nInfoEE = 0; + g_SRPCSoundIOPInfo = {}; + g_bVBlankInitialized = false; + g_nVBlankThreadID = -1; + g_nVBlankSemaphoreID = -1; + g_bVBlankRegistered = false; + g_nIopTicks = 0; + g_nFrameNum = 0; +} + +int VBlankHandler(void*); +u32 VBlankThread(); + +void VBlank_Initialize() { + ThreadParam thread_param; + SemaParam sema_param; + + if (g_bVBlankInitialized == 0) { + thread_param.attr = 0x2000000; + thread_param.stackSize = 0x800; + thread_param.initPriority = 0x34; + thread_param.option = 0; + thread_param.entry = VBlankThread; + strcpy(thread_param.name, "vblank"); + g_nVBlankThreadID = CreateThread(&thread_param); + ASSERT(g_nVBlankThreadID >= 0); + sema_param.max_count = 200; // hack + sema_param.attr = 0; + sema_param.init_count = 0; + sema_param.option = 0; + g_nVBlankSemaphoreID = CreateSema(&sema_param); + ASSERT(g_nVBlankSemaphoreID >= 0); + int ret = StartThread(g_nVBlankThreadID, 0); + ASSERT(ret == 0); + RegisterVblankHandler(0, 0x40, VBlankHandler, 0); + g_bVBlankInitialized = true; + g_bVBlankRegistered = true; + } +} + +int VBlankHandler(void*) { + if ((g_bVBlankInitialized != 0) && (-1 < g_nVBlankSemaphoreID)) { + SignalSema(g_nVBlankSemaphoreID); // was iSignalSema + } + return 1; +} + +u32 VBlankThread() { + // char *pcVar1; + // int iVar2; + // uint uVar3; + // SoundBankInfo *pSVar4; + // ISO_VAGCommand *cmd; + // SoundBankInfo **ppSVar5; + // uint *puVar6; + // uint uVar7; + // int iVar8; + // int iVar9; + // SoundIOPInfo *local_30; + // void *local_2c; + // undefined4 local_28; + // undefined4 local_24; + // undefined4 local_20 [2]; + + do { + while ((g_bVBlankInitialized == 0 || (g_nVBlankSemaphoreID < 0))) { + DelayThread(1000000); + } + WaitSema(g_nVBlankSemaphoreID); + g_nIopTicks = g_nIopTicks + 1; + if (g_bSoundEnable != 0) { + CheckVagStreamsProgress(); + if ((g_nIopTicks & 1U) != 0) { + StreamListThread(); + } + if (g_nMusicFadeDir < 0) { + g_nMusicFade = g_nMusicFade + -0x200; + if (g_nMusicFade < 0) { + g_nMusicFade = 0; + LAB_00011f60: + g_nMusicFadeDir = 0; + } + } else { + if ((0 < g_nMusicFadeDir) && + (g_nMusicFade = g_nMusicFade + 0x400, 0x10000 < g_nMusicFade)) { + g_nMusicFade = 0x10000; + goto LAB_00011f60; + } + } + if (g_nInfoEE) { + g_nFrameNum = g_nFrameNum + 1; + // puVar6 = g_SRPCSoundIOPInfo.stream_status; + for (int i = 0; i < 4; i++) { + auto* cmd = &g_aVagCmds[i]; + u32 stream_status = cmd->pack_flags(); + + if ((cmd->flags.file_disappeared != 0) && (cmd->flags.paused == 0)) { + auto uVar3 = CalculateVAGPitch(0x400, cmd->pitch_cmd); + if (g_nFPS == 0) { + ASSERT_NOT_REACHED(); + } + cmd->clockd = cmd->clockd + uVar3 / g_nFPS; + } + + if ((cmd->flags.saw_chunks1 == 0) && (cmd->flags.clocks_set != 0)) { + g_SRPCSoundIOPInfo.stream_status[i] = stream_status; + g_SRPCSoundIOPInfo.stream_id[i] = cmd->id; + g_SRPCSoundIOPInfo.stream_position[i] = 0; + } else { + g_SRPCSoundIOPInfo.stream_status[i] = stream_status; + g_SRPCSoundIOPInfo.stream_id[i] = cmd->id; + g_SRPCSoundIOPInfo.stream_position[i] = cmd->position_for_ee; + } + } + // CpuSuspendIntr(local_20); + + // CpuResumeIntr(local_20[0]); + g_SRPCSoundIOPInfo.iop_ticks = g_nIopTicks; + g_SRPCSoundIOPInfo.freemem = 12345; // hack + g_SRPCSoundIOPInfo.frame = g_nFrameNum; + g_SRPCSoundIOPInfo.freemem2 = QueryTotalFreeMemSize(); + g_SRPCSoundIOPInfo.nocd = 0; // hack + g_SRPCSoundIOPInfo.dirtycd = 0; // hack + g_SRPCSoundIOPInfo.dupseg = -1; + g_SRPCSoundIOPInfo.diskspeed[0] = 0; + g_SRPCSoundIOPInfo.diskspeed[1] = 0; + g_SRPCSoundIOPInfo.lastspeed = 0; + + memset(&g_SRPCSoundIOPInfo.sound_bank0[0], 0, 8 * 16); + + if (gBanks[0]->in_use && gBanks[0]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank0, gBanks[0]->m_name1); + } + if (gBanks[1]->in_use && gBanks[1]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank1, gBanks[1]->m_name1); + } + if (gBanks[2]->in_use && gBanks[2]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank2, gBanks[2]->m_name1); + } + if (gBanks[3]->in_use && gBanks[3]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank3, gBanks[3]->m_name1); + } + if (gBanks[4]->in_use && gBanks[4]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank4, gBanks[4]->m_name1); + } + if (gBanks[5]->in_use && gBanks[5]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank5, gBanks[5]->m_name1); + } + if (gBanks[6]->in_use && gBanks[6]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank6, gBanks[6]->m_name1); + } + if (gBanks[7]->in_use && gBanks[7]->loaded) { + strcpy(g_SRPCSoundIOPInfo.sound_bank7, gBanks[7]->m_name1); + } + + for (int i = 0; i < 48; i++) { + g_SRPCSoundIOPInfo.chinfo[i] = (snd_GetVoiceStatus(i) != 1) - 1; + } + + sceSifDmaData dma; + dma.data = &g_SRPCSoundIOPInfo; + dma.addr = (void*)(u64)g_nInfoEE; + dma.size = sizeof(g_SRPCSoundIOPInfo); + static_assert(sizeof(g_SRPCSoundIOPInfo) == 0x2d0); + dma.mode = 0; + /*dmaid =*/sceSifSetDma(&dma, 1); + } + } + RunDeferredVoiceTrans(); + // Poll(&g_DvdDriver); + } while (true); +} + +} // namespace jakx \ No newline at end of file diff --git a/game/overlord/jakx/vblank_handler.h b/game/overlord/jakx/vblank_handler.h new file mode 100644 index 0000000000..98cb5b52ea --- /dev/null +++ b/game/overlord/jakx/vblank_handler.h @@ -0,0 +1,12 @@ +#pragma once + +#include "common/common_types.h" + +#include "game/overlord/jakx/rpc_interface.h" + +namespace jakx { +void jakx_overlord_init_globals_vblank_handler(); +void VBlank_Initialize(); +extern u32 g_nInfoEE; +extern SoundIOPInfo g_SRPCSoundIOPInfo; +} // namespace jakx \ No newline at end of file diff --git a/game/runtime.cpp b/game/runtime.cpp index 3f41177a2b..586466aa9a 100644 --- a/game/runtime.cpp +++ b/game/runtime.cpp @@ -54,6 +54,10 @@ #include "game/kernel/jak3/kdgo.h" #include "game/kernel/jak3/klisten.h" #include "game/kernel/jak3/kscheme.h" +#include "game/kernel/jakx/kboot.h" +#include "game/kernel/jakx/kdgo.h" +#include "game/kernel/jakx/klisten.h" +#include "game/kernel/jakx/kscheme.h" #include "game/overlord/common/fake_iso.h" #include "game/overlord/common/iso.h" #include "game/overlord/common/sbank.h" @@ -232,6 +236,8 @@ void ee_runner(SystemThreadInterface& iface) { case GameVersion::Jak3: jak3::goal_main(g_argc, g_argv); break; + case GameVersion::JakX: + jakx::goal_main(g_argc, g_argv); default: ASSERT_MSG(false, "Unsupported game version"); } @@ -271,7 +277,7 @@ void iop_runner(SystemThreadInterface& iface, GameVersion version) { iop::LIBRARY_register(&iop); Gfx::register_vsync_callback([&iop]() { iop.kernel.signal_vblank(); }); - if (version != GameVersion::Jak3) { + if (version != GameVersion::Jak3 && version != GameVersion::JakX) { jak1::dma_init_globals(); jak2::dma_init_globals(); @@ -331,6 +337,7 @@ void iop_runner(SystemThreadInterface& iface, GameVersion version) { jak2::start_overlord_wrapper(iop.overlord_argc, iop.overlord_argv, &complete); break; case GameVersion::Jak3: + case GameVersion::JakX: jak3::start_overlord_wrapper(&complete); break; default: diff --git a/game/sce/sif_ee.cpp b/game/sce/sif_ee.cpp index 2aefe4742a..d40922a9a7 100644 --- a/game/sce/sif_ee.cpp +++ b/game/sce/sif_ee.cpp @@ -128,6 +128,10 @@ s32 sceOpen(const char* filename, s32 flag) { return fp_idx; } +s32 sceMkDir(const char* filename, s32 flag) { + return -1; +} + s32 sceClose(s32 fd) { if (fd < 0) { // todo, what should we really return? diff --git a/game/sce/sif_ee.h b/game/sce/sif_ee.h index 97f8513e36..09aecec152 100644 --- a/game/sce/sif_ee.h +++ b/game/sce/sif_ee.h @@ -68,6 +68,7 @@ s32 sceSifCheckStatRpc(sceSifRpcData* bd); s32 sceSifBindRpc(sceSifClientData* bd, u32 request, u32 mode); s32 sceOpen(const char* filename, s32 flag); +s32 sceMkDir(const char* filename, s32 flag); s32 sceClose(s32 fd); s32 sceRead(s32 fd, void* buf, s32 nbyte); s32 sceWrite(s32 fd, const void* buf, s32 nbyte); diff --git a/goal_src/jakx/build/all_objs.json b/goal_src/jakx/build/all_objs.json new file mode 100644 index 0000000000..36eaa5b23f --- /dev/null +++ b/goal_src/jakx/build/all_objs.json @@ -0,0 +1,2476 @@ +[["dir-tpages", "dir-tpages", 5, ["ART", "GAME"], ""], +["tpage-1", "tpage-1", 5, ["ART", "GAME"], ""], +["tpage-2", "tpage-2", 5, ["ART", "GAME"], ""], +["tpage-3", "tpage-3", 5, ["ART", "GAME"], ""], +["texture-upload", "texture-upload", 5, ["ART", "GAME"], ""], +["tpage-4", "tpage-4", 5, ["ART", "GAME"], ""], +["tpage-5", "tpage-5", 5, ["ART", "GAME"], ""], +["tpage-6", "tpage-6", 5, ["ART", "GAME"], ""], +["tpage-7", "tpage-7", 5, ["ART", "GAME"], ""], +["tpage-8", "tpage-8", 5, ["ART", "GAME"], ""], +["tpage-9", "tpage-9", 5, ["ART", "GAME"], ""], +["tpage-10", "tpage-10", 5, ["ART", "GAME"], ""], +["tpage-11", "tpage-11", 5, ["ART", "GAME"], ""], +["tpage-12", "tpage-12", 5, ["ART", "GAME"], ""], +["tpage-1049", "tpage-1049", 5, ["ART", "GAME"], ""], +["tpage-2533", "tpage-2533", 5, ["ART", "GAME"], ""], +["texture-finish", "texture-finish", 5, ["ART", "GAME"], ""], +["collectables-ag", "collectables", 5, ["ART", "GAME"], ""], +["scenecamera-ag", "scenecamera", 5, ["ART", "GAME"], ""], +["this-way-ag", "this-way", 5, ["ART", "GAME"], ""], +["this-way-b-ag", "this-way-b", 5, ["ART", "GAME"], ""], +["wrong-way-ag", "wrong-way", 5, ["ART", "GAME"], ""], +["starting-linebot-ag", "starting-linebot", 5, ["ART", "GAME"], ""], +["start-banner-ag", "start-banner", 5, ["ART", "GAME"], ""], +["grenade-ag", "grenade", 5, ["ART", "GAME"], ""], +["mine-a-ag", "mine-a", 5, ["ART", "GAME"], ""], +["mine-b-ag", "mine-b", 5, ["ART", "GAME"], ""], +["mine-c-ag", "mine-c", 5, ["ART", "GAME"], ""], +["sentry-bot-ag", "sentry-bot", 5, ["ART", "GAME"], ""], +["missile-a-ag", "missile-a", 5, ["ART", "GAME"], ""], +["muzzle-flash-ag", "muzzle-flash", 5, ["ART", "GAME"], ""], +["gun-ag", "gun", 5, ["ART", "GAME"], ""], +["shield-ag", "shield", 5, ["ART", "GAME"], ""], +["weapon-drone-ag", "weapon-drone", 5, ["ART", "GAME"], ""], +["eco-blue-ag", "eco-blue", 5, ["ART", "GAME"], ""], +["eco-blue-debris-ag", "eco-blue-debris", 5, ["ART", "GAME"], ""], +["eco-green-ag", "eco-green", 5, ["ART", "GAME"], ""], +["eco-red-ag", "eco-red", 5, ["ART", "GAME"], ""], +["eco-yellow-ag", "eco-yellow", 5, ["ART", "GAME"], ""], +["vehicle-explosion-ag", "vehicle-explosion", 5, ["ART", "GAME"], ""], +["car-interior-ag", "car-interior", 5, ["ART", "GAME"], ""], +["plane-screen-ag", "plane-screen", 5, ["ART", "GAME"], ""], +["oil-slick-ag", "oil-slick", 5, ["ART", "GAME"], ""], +["daxter-ag", "daxter", 5, ["ART", "GAME"], ""], +["antenna-all-ag", "antenna-all", 5, ["ART", "GAME"], ""], +["helmet-a-ag", "helmet-a", 5, ["ART", "GAME"], ""], +["helmet-b-ag", "helmet-b", 5, ["ART", "GAME"], ""], +["helmet-c-ag", "helmet-c", 5, ["ART", "GAME"], ""], +["helmet-d-ag", "helmet-d", 5, ["ART", "GAME"], ""], +["helmet-e-ag", "helmet-e", 5, ["ART", "GAME"], ""], +["helmet-f-ag", "helmet-f", 5, ["ART", "GAME"], ""], +["menu2-part", "menu2-part", 5, ["COMMON", "GAME"], ""], +["menu2-COMMON-GAME", "menu2", 5, ["COMMON", "GAME"], ""], +["menu2-MENU2", "menu2", 5, ["MENU2"], ""], +["intro-part", "intro-part", 5, ["COMMON", "GAME"], ""], +["intro-scenes2", "intro-scenes2", 5, ["COMMON", "GAME"], ""], +["intro-scenes", "intro-scenes", 5, ["COMMON", "GAME"], ""], +["intro-scenes3", "intro-scenes3", 5, ["COMMON", "GAME"], ""], +["task-scenes", "task-scenes", 5, ["COMMON", "GAME"], ""], +["menu2-b", "menu2-b", 5, ["COMMON", "GAME"], ""], +["race-part", "race-part", 5, ["COMMON", "GAME"], ""], +["race-obs", "race-obs", 5, ["COMMON", "GAME"], ""], +["camera-facing-quad", "camera-facing-quad", 5, ["COMMON", "GAME"], ""], +["task-arrow", "task-arrow", 5, ["COMMON", "GAME"], ""], +["race-manager", "race-manager", 5, ["COMMON", "GAME"], ""], +["net-anim", "net-anim", 5, ["COMMON", "GAME"], ""], +["net-enemy-h", "net-enemy-h", 5, ["COMMON", "GAME"], ""], +["net-powerup", "net-powerup", 5, ["COMMON", "GAME"], ""], +["net-powerups", "net-powerups", 5, ["COMMON", "GAME"], ""], +["net-eco", "net-eco", 5, ["COMMON", "GAME"], ""], +["net-eco-types", "net-eco-types", 5, ["COMMON", "GAME"], ""], +["net-simple-destruct", "net-simple-destruct", 5, ["COMMON", "GAME"], ""], +["net-enemy", "net-enemy", 5, ["COMMON", "GAME"], ""], +["explosion", "explosion", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons-data", "wvehicle-weapons-data", 5, ["COMMON", "GAME"], ""], +["net-hud", "net-hud", 5, ["COMMON", "GAME"], ""], +["hud-effects", "hud-effects", 5, ["COMMON", "GAME"], ""], +["hud-widgets", "hud-widgets", 5, ["COMMON", "GAME"], ""], +["hud-results", "hud-results", 5, ["COMMON", "GAME"], ""], +["hud-results-grand-prix", "hud-results-grand-prix", 5, ["COMMON", "GAME"], ""], +["hud-high-scores", "hud-high-scores", 5, ["COMMON", "GAME"], ""], +["hud-cash", "hud-cash", 5, ["COMMON", "GAME"], ""], +["hud-widgets-2", "hud-widgets-2", 5, ["COMMON", "GAME"], ""], +["hud-widgets-3", "hud-widgets-3", 5, ["COMMON", "GAME"], ""], +["hud-widgets-4", "hud-widgets-4", 5, ["COMMON", "GAME"], ""], +["in-game-menu-hud", "in-game-menu-hud", 5, ["COMMON", "GAME"], ""], +["in-game-menu-hud2", "in-game-menu-hud2", 5, ["COMMON", "GAME"], ""], +["net-game-mgr", "net-game-mgr", 5, ["COMMON", "GAME"], ""], +["net-race", "net-race", 5, ["COMMON", "GAME"], ""], +["net-race-hud", "net-race-hud", 5, ["COMMON", "GAME"], ""], +["net-deathrace", "net-deathrace", 5, ["COMMON", "GAME"], ""], +["net-rushhour", "net-rushhour", 5, ["COMMON", "GAME"], ""], +["net-boss-battle", "net-boss-battle", 5, ["COMMON", "GAME"], ""], +["race-sabotage", "race-sabotage", 5, ["COMMON", "GAME"], ""], +["hud-oneoff", "hud-oneoff", 5, ["COMMON", "GAME"], ""], +["net-deathmatch", "net-deathmatch", 5, ["COMMON", "GAME"], ""], +["net-assassin", "net-assassin", 5, ["COMMON", "GAME"], ""], +["wvehicle-hud-h", "wvehicle-hud-h", 5, ["COMMON", "GAME"], ""], +["wvehicle-hud", "wvehicle-hud", 5, ["COMMON", "GAME"], ""], +["hud-widgets-powerhang", "hud-widgets-powerhang", 5, ["COMMON", "GAME"], ""], +["wvehicle-wheel", "wvehicle-wheel", 5, ["COMMON", "GAME"], ""], +["wvehicle-part", "wvehicle-part", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons-part", "wvehicle-weapons-part", 5, ["COMMON", "GAME"], ""], +["wvehicle-effects", "wvehicle-effects", 5, ["COMMON", "GAME"], ""], +["wvehicle-sounds", "wvehicle-sounds", 5, ["COMMON", "GAME"], ""], +["vehicle-reticle", "vehicle-reticle", 5, ["COMMON", "GAME"], ""], +["wvehicle", "wvehicle", 5, ["COMMON", "GAME"], ""], +["wvehicle-events", "wvehicle-events", 5, ["COMMON", "GAME"], ""], +["wvehicle-util", "wvehicle-util", 5, ["COMMON", "GAME"], ""], +["wvehicle-ai", "wvehicle-ai", 5, ["COMMON", "GAME"], ""], +["wvehicle-states", "wvehicle-states", 5, ["COMMON", "GAME"], ""], +["wvehicle-physics", "wvehicle-physics", 5, ["COMMON", "GAME"], ""], +["hud-player-indicators", "hud-player-indicators", 5, ["COMMON", "GAME"], ""], +["wvehicle-race", "wvehicle-race", 5, ["COMMON", "GAME"], ""], +["wvehicle-net", "wvehicle-net", 5, ["COMMON", "GAME"], ""], +["wcar-projectiles", "wcar-projectiles", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons-proj", "wvehicle-weapons-proj", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons-oil", "wvehicle-weapons-oil", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons", "wvehicle-weapons", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons-aux", "wvehicle-weapons-aux", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons2", "wvehicle-weapons2", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons3", "wvehicle-weapons3", 5, ["COMMON", "GAME"], ""], +["wvehicle-weapons-util", "wvehicle-weapons-util", 5, ["COMMON", "GAME"], ""], +["wcar-skel", "wcar-skel", 5, ["COMMON", "GAME"], ""], +["wcar", "wcar", 5, ["COMMON", "GAME"], ""], +["vehicle-antenna", "vehicle-antenna", 5, ["COMMON", "GAME"], ""], +["wcar-base", "wcar-base", 5, ["COMMON", "GAME"], ""], +["wcar-mongoose", "wcar-mongoose", 5, ["COMMON", "GAME"], ""], +["wcar-falcon", "wcar-falcon", 5, ["COMMON", "GAME"], ""], +["wcar-wombat", "wcar-wombat", 5, ["COMMON", "GAME"], ""], +["wcar-possum", "wcar-possum", 5, ["COMMON", "GAME"], ""], +["wcar-bobcat", "wcar-bobcat", 5, ["COMMON", "GAME"], ""], +["wcar-cougar", "wcar-cougar", 5, ["COMMON", "GAME"], ""], +["wcar-wolf", "wcar-wolf", 5, ["COMMON", "GAME"], ""], +["wcar-bear", "wcar-bear", 5, ["COMMON", "GAME"], ""], +["wcar-leopard", "wcar-leopard", 5, ["COMMON", "GAME"], ""], +["wcar-panther", "wcar-panther", 5, ["COMMON", "GAME"], ""], +["wcar-tiger", "wcar-tiger", 5, ["COMMON", "GAME"], ""], +["wcar-cheetah", "wcar-cheetah", 5, ["COMMON", "GAME"], ""], +["wcar-gila", "wcar-gila", 5, ["COMMON", "GAME"], ""], +["wcar-snake", "wcar-snake", 5, ["COMMON", "GAME"], ""], +["wcar-daxtermobile", "wcar-daxtermobile", 5, ["COMMON", "GAME"], ""], +["drift", "drift", 5, ["COMMON", "GAME"], ""], +["race-mesh", "race-mesh", 5, ["COMMON", "GAME"], ""], +["race-line", "race-line", 5, ["COMMON", "GAME"], ""], +["race-ai-tuning", "race-ai-tuning", 5, ["COMMON", "GAME"], ""], +["minimap", "minimap", 5, ["COMMON", "GAME"], ""], +["jakx-init", "jakx-init", 5, ["COMMON", "GAME"], ""], +["types-h", "types-h", 5, ["ENGINE", "GAME"], ""], +["vu1-macros", "vu1-macros", 5, ["ENGINE", "GAME"], ""], +["math", "math", 5, ["ENGINE", "GAME"], ""], +["vector-h", "vector-h", 5, ["ENGINE", "GAME"], ""], +["gravity-h", "gravity-h", 5, ["ENGINE", "GAME"], ""], +["bounding-box-h", "bounding-box-h", 5, ["ENGINE", "GAME"], ""], +["matrix-h", "matrix-h", 5, ["ENGINE", "GAME"], ""], +["quaternion-h", "quaternion-h", 5, ["ENGINE", "GAME"], ""], +["euler-h", "euler-h", 5, ["ENGINE", "GAME"], ""], +["transform-h", "transform-h", 5, ["ENGINE", "GAME"], ""], +["trigonometry-h", "trigonometry-h", 5, ["ENGINE", "GAME"], ""], +["geometry-h", "geometry-h", 5, ["ENGINE", "GAME"], ""], +["transformq-h", "transformq-h", 5, ["ENGINE", "GAME"], ""], +["bounding-box", "bounding-box", 5, ["ENGINE", "GAME"], ""], +["matrix", "matrix", 5, ["ENGINE", "GAME"], ""], +["matrix-compose", "matrix-compose", 5, ["ENGINE", "GAME"], ""], +["transform", "transform", 5, ["ENGINE", "GAME"], ""], +["quaternion", "quaternion", 5, ["ENGINE", "GAME"], ""], +["euler", "euler", 5, ["ENGINE", "GAME"], ""], +["trigonometry", "trigonometry", 5, ["ENGINE", "GAME"], ""], +["math-fx", "math-fx", 5, ["ENGINE", "GAME"], ""], +["res-h", "res-h", 5, ["ENGINE", "GAME"], ""], +["gsound-h", "gsound-h", 5, ["ENGINE", "GAME"], ""], +["sound-info", "sound-info", 5, ["ENGINE", "GAME"], ""], +["timer-h", "timer-h", 5, ["ENGINE", "GAME"], ""], +["vif-h", "vif-h", 5, ["ENGINE", "GAME"], ""], +["dma-h", "dma-h", 5, ["ENGINE", "GAME"], ""], +["video-h", "video-h", 5, ["ENGINE", "GAME"], ""], +["vu1-user-h", "vu1-user-h", 5, ["ENGINE", "GAME"], ""], +["profile-h", "profile-h", 5, ["ENGINE", "GAME"], ""], +["dma", "dma", 5, ["ENGINE", "GAME"], ""], +["dma-buffer", "dma-buffer", 5, ["ENGINE", "GAME"], ""], +["dma-bucket", "dma-bucket", 5, ["ENGINE", "GAME"], ""], +["dma-disasm", "dma-disasm", 5, ["ENGINE", "GAME"], ""], +["view-h", "view-h", 5, ["ENGINE", "GAME"], ""], +["pad", "pad", 5, ["ENGINE", "GAME"], ""], +["gs", "gs", 5, ["ENGINE", "GAME"], ""], +["display-h", "display-h", 5, ["ENGINE", "GAME"], ""], +["geometry", "geometry", 5, ["ENGINE", "GAME"], ""], +["timer", "timer", 5, ["ENGINE", "GAME"], ""], +["vector", "vector", 5, ["ENGINE", "GAME"], ""], +["file-io", "file-io", 5, ["ENGINE", "GAME"], ""], +["loader-h", "loader-h", 5, ["ENGINE", "GAME"], ""], +["texture-h", "texture-h", 5, ["ENGINE", "GAME"], ""], +["texture-anim-h", "texture-anim-h", 5, ["ENGINE", "GAME"], ""], +["lights-h", "lights-h", 5, ["ENGINE", "GAME"], ""], +["trail-h", "trail-h", 5, ["ENGINE", "GAME"], ""], +["connect", "connect", 5, ["ENGINE", "GAME"], ""], +["mood-h", "mood-h", 5, ["ENGINE", "GAME"], ""], +["level-h", "level-h", 5, ["ENGINE", "GAME"], ""], +["minimap-h", "minimap-h", 5, ["ENGINE", "GAME"], ""], +["main-h", "main-h", 5, ["ENGINE", "GAME"], ""], +["traffic-h", "traffic-h", 5, ["ENGINE", "GAME"], ""], +["game-task-h", "game-task-h", 5, ["ENGINE", "GAME"], ""], +["task-control-h", "task-control-h", 5, ["ENGINE", "GAME"], ""], +["car-info-h", "car-info-h", 5, ["ENGINE", "GAME"], ""], +["car-tables", "car-tables", 5, ["ENGINE", "GAME"], ""], +["capture-h", "capture-h", 5, ["ENGINE", "GAME"], ""], +["math-camera-h", "math-camera-h", 5, ["ENGINE", "GAME"], ""], +["viewport-h", "viewport-h", 5, ["ENGINE", "GAME"], ""], +["blit-displays-h", "blit-displays-h", 5, ["ENGINE", "GAME"], ""], +["sparks-h", "sparks-h", 5, ["ENGINE", "GAME"], ""], +["math-camera", "math-camera", 5, ["ENGINE", "GAME"], ""], +["view", "view", 5, ["ENGINE", "GAME"], ""], +["viewport", "viewport", 5, ["ENGINE", "GAME"], ""], +["font-h", "font-h", 5, ["ENGINE", "GAME"], ""], +["decomp-h", "decomp-h", 5, ["ENGINE", "GAME"], ""], +["time-of-day-h", "time-of-day-h", 5, ["ENGINE", "GAME"], ""], +["profile", "profile", 5, ["ENGINE", "GAME"], ""], +["display", "display", 5, ["ENGINE", "GAME"], ""], +["text-h", "text-h", 5, ["ENGINE", "GAME"], ""], +["camera-defs-h", "camera-defs-h", 5, ["ENGINE", "GAME"], ""], +["settings-h", "settings-h", 5, ["ENGINE", "GAME"], ""], +["memory-usage-h", "memory-usage-h", 5, ["ENGINE", "GAME"], ""], +["sky-h", "sky-h", 5, ["ENGINE", "GAME"], ""], +["ocean-h", "ocean-h", 5, ["ENGINE", "GAME"], ""], +["car-textures", "car-textures", 5, ["ENGINE", "GAME"], ""], +["texture", "texture", 5, ["ENGINE", "GAME"], ""], +["mspace-h", "mspace-h", 5, ["ENGINE", "GAME"], ""], +["drawable-h", "drawable-h", 5, ["ENGINE", "GAME"], ""], +["drawable-group-h", "drawable-group-h", 5, ["ENGINE", "GAME"], ""], +["drawable-inline-array-h", "drawable-inline-array-h", 5, ["ENGINE", "GAME"], ""], +["draw-node-h", "draw-node-h", 5, ["ENGINE", "GAME"], ""], +["drawable-tree-h", "drawable-tree-h", 5, ["ENGINE", "GAME"], ""], +["drawable-actor-h", "drawable-actor-h", 5, ["ENGINE", "GAME"], ""], +["region-h", "region-h", 5, ["ENGINE", "GAME"], ""], +["advanced-options", "advanced-options", 5, ["ENGINE", "GAME"], ""], +["generic-h", "generic-h", 5, ["ENGINE", "GAME"], ""], +["cloth-art-h", "cloth-art-h", 5, ["ENGINE", "GAME"], ""], +["art-h", "art-h", 5, ["ENGINE", "GAME"], ""], +["generic-vu1-h", "generic-vu1-h", 5, ["ENGINE", "GAME"], ""], +["merc-h", "merc-h", 5, ["ENGINE", "GAME"], ""], +["generic-merc-h", "generic-merc-h", 5, ["ENGINE", "GAME"], ""], +["generic-tie-h", "generic-tie-h", 5, ["ENGINE", "GAME"], ""], +["generic-work-h", "generic-work-h", 5, ["ENGINE", "GAME"], ""], +["shadow-cpu-h", "shadow-cpu-h", 5, ["ENGINE", "GAME"], ""], +["shadow-vu1-h", "shadow-vu1-h", 5, ["ENGINE", "GAME"], ""], +["prim-h", "prim-h", 5, ["ENGINE", "GAME"], ""], +["memcard-h", "memcard-h", 5, ["ENGINE", "GAME"], ""], +["game-info-h", "game-info-h", 5, ["ENGINE", "GAME"], ""], +["gui-h", "gui-h", 5, ["ENGINE", "GAME"], ""], +["ambient-h", "ambient-h", 5, ["ENGINE", "GAME"], ""], +["speech-h", "speech-h", 5, ["ENGINE", "GAME"], ""], +["wind-h", "wind-h", 5, ["ENGINE", "GAME"], ""], +["prototype-h", "prototype-h", 5, ["ENGINE", "GAME"], ""], +["joint-h", "joint-h", 5, ["ENGINE", "GAME"], ""], +["bones-h", "bones-h", 5, ["ENGINE", "GAME"], ""], +["foreground-h", "foreground-h", 5, ["ENGINE", "GAME"], ""], +["engines", "engines", 5, ["ENGINE", "GAME"], ""], +["lightning-h", "lightning-h", 5, ["ENGINE", "GAME"], ""], +["res", "res", 5, ["ENGINE", "GAME"], ""], +["lights", "lights", 5, ["ENGINE", "GAME"], ""], +["dynamics-h", "dynamics-h", 5, ["ENGINE", "GAME"], ""], +["pat-h", "pat-h", 5, ["ENGINE", "GAME"], ""], +["fact-h", "fact-h", 5, ["ENGINE", "GAME"], ""], +["penetrate-h", "penetrate-h", 5, ["ENGINE", "GAME"], ""], +["scert-1-h", "scert-1-h", 5, ["ENGINE", "GAME"], ""], +["scert-2-h", "scert-2-h", 5, ["ENGINE", "GAME"], ""], +["scert-3-h", "scert-3-h", 5, ["ENGINE", "GAME"], ""], +["scert-4-h", "scert-4-h", 5, ["ENGINE", "GAME"], ""], +["scert-5-h", "scert-5-h", 5, ["ENGINE", "GAME"], ""], +["scert-6-h", "scert-6-h", 5, ["ENGINE", "GAME"], ""], +["scert-7-h", "scert-7-h", 5, ["ENGINE", "GAME"], ""], +["scert-8-h", "scert-8-h", 5, ["ENGINE", "GAME"], ""], +["scert-9-h", "scert-9-h", 5, ["ENGINE", "GAME"], ""], +["scert-10-h", "scert-10-h", 5, ["ENGINE", "GAME"], ""], +["scert-11-h", "scert-11-h", 5, ["ENGINE", "GAME"], ""], +["scert-funcs", "scert-funcs", 5, ["ENGINE", "GAME"], ""], +["mem-buffer-h", "mem-buffer-h", 5, ["ENGINE", "GAME"], ""], +["net-mgr-h", "net-mgr-h", 5, ["ENGINE", "GAME"], ""], +["obj-list", "obj-list", 5, ["ENGINE", "GAME"], ""], +["process-nettable-h", "process-nettable-h", 5, ["ENGINE", "GAME"], ""], +["game-h", "game-h", 5, ["ENGINE", "GAME"], ""], +["script-h", "script-h", 5, ["ENGINE", "GAME"], ""], +["scene-h", "scene-h", 5, ["ENGINE", "GAME"], ""], +["pov-camera-h", "pov-camera-h", 5, ["ENGINE", "GAME"], ""], +["smush-control-h", "smush-control-h", 5, ["ENGINE", "GAME"], ""], +["debug-h", "debug-h", 5, ["ENGINE", "GAME"], ""], +["joint-mod-h", "joint-mod-h", 5, ["ENGINE", "GAME"], ""], +["collide-func-h", "collide-func-h", 5, ["ENGINE", "GAME"], ""], +["collide-mesh-h", "collide-mesh-h", 5, ["ENGINE", "GAME"], ""], +["collide-shape-h", "collide-shape-h", 5, ["ENGINE", "GAME"], ""], +["generic-obs-h", "generic-obs-h", 5, ["ENGINE", "GAME"], ""], +["trajectory-h", "trajectory-h", 5, ["ENGINE", "GAME"], ""], +["collide-touch-h", "collide-touch-h", 5, ["ENGINE", "GAME"], ""], +["process-drawable-h", "process-drawable-h", 5, ["ENGINE", "GAME"], ""], +["process-focusable", "process-focusable", 5, ["ENGINE", "GAME"], ""], +["focus", "focus", 5, ["ENGINE", "GAME"], ""], +["effect-control-h", "effect-control-h", 5, ["ENGINE", "GAME"], ""], +["collide-frag-h", "collide-frag-h", 5, ["ENGINE", "GAME"], ""], +["collide-hash-h", "collide-hash-h", 5, ["ENGINE", "GAME"], ""], +["water-info-h", "water-info-h", 5, ["ENGINE", "GAME"], ""], +["ragdoll-h", "ragdoll-h", 5, ["ENGINE", "GAME"], ""], +["projectile-h", "projectile-h", 5, ["ENGINE", "GAME"], ""], +["find-nearest-h", "find-nearest-h", 5, ["ENGINE", "GAME"], ""], +["target-h", "target-h", 5, ["ENGINE", "GAME"], ""], +["stats-h", "stats-h", 5, ["ENGINE", "GAME"], ""], +["bsp-h", "bsp-h", 5, ["ENGINE", "GAME"], ""], +["collide-cache-h", "collide-cache-h", 5, ["ENGINE", "GAME"], ""], +["collide-h", "collide-h", 5, ["ENGINE", "GAME"], ""], +["shrubbery-h", "shrubbery-h", 5, ["ENGINE", "GAME"], ""], +["tie-h", "tie-h", 5, ["ENGINE", "GAME"], ""], +["tfrag-h", "tfrag-h", 5, ["ENGINE", "GAME"], ""], +["background-h", "background-h", 5, ["ENGINE", "GAME"], ""], +["subdivide-h", "subdivide-h", 5, ["ENGINE", "GAME"], ""], +["entity-h", "entity-h", 5, ["ENGINE", "GAME"], ""], +["entity-more-perm", "entity-more-perm", 5, ["ENGINE", "GAME"], ""], +["sprite-h", "sprite-h", 5, ["ENGINE", "GAME"], ""], +["simple-sprite-h", "simple-sprite-h", 5, ["ENGINE", "GAME"], ""], +["eye-h", "eye-h", 5, ["ENGINE", "GAME"], ""], +["camera-h", "camera-h", 5, ["ENGINE", "GAME"], ""], +["cam-interface-h", "cam-interface-h", 5, ["ENGINE", "GAME"], ""], +["sparticle-launcher-h", "sparticle-launcher-h", 5, ["ENGINE", "GAME"], ""], +["sparticle-h", "sparticle-h", 5, ["ENGINE", "GAME"], ""], +["actor-link-h", "actor-link-h", 5, ["ENGINE", "GAME"], ""], +["cam-debug-h", "cam-debug-h", 5, ["ENGINE", "GAME"], ""], +["cam-update-h", "cam-update-h", 5, ["ENGINE", "GAME"], ""], +["hud-h", "hud-h", 5, ["ENGINE", "GAME"], ""], +["progress-h", "progress-h", 5, ["ENGINE", "GAME"], ""], +["rpc-h", "rpc-h", 5, ["ENGINE", "GAME"], ""], +["path-h", "path-h", 5, ["ENGINE", "GAME"], ""], +["nav-mesh-h", "nav-mesh-h", 5, ["ENGINE", "GAME"], ""], +["nav-control-h", "nav-control-h", 5, ["ENGINE", "GAME"], ""], +["spatial-hash-h", "spatial-hash-h", 5, ["ENGINE", "GAME"], ""], +["actor-hash-h", "actor-hash-h", 5, ["ENGINE", "GAME"], ""], +["fmv-player-h", "fmv-player-h", 5, ["ENGINE", "GAME"], ""], +["load-dgo", "load-dgo", 5, ["ENGINE", "GAME"], ""], +["ramdisk", "ramdisk", 5, ["ENGINE", "GAME"], ""], +["gsound", "gsound", 5, ["ENGINE", "GAME"], ""], +["transformq", "transformq", 5, ["ENGINE", "GAME"], ""], +["collide-func", "collide-func", 5, ["ENGINE", "GAME"], ""], +["joint", "joint", 5, ["ENGINE", "GAME"], ""], +["joint-mod", "joint-mod", 5, ["ENGINE", "GAME"], ""], +["wind-work", "wind-work", 5, ["ENGINE", "GAME"], ""], +["wind", "wind", 5, ["ENGINE", "GAME"], ""], +["bsp", "bsp", 5, ["ENGINE", "GAME"], ""], +["subdivide", "subdivide", 5, ["ENGINE", "GAME"], ""], +["sprite", "sprite", 5, ["ENGINE", "GAME"], ""], +["sprite-distort", "sprite-distort", 5, ["ENGINE", "GAME"], ""], +["sprite-glow", "sprite-glow", 5, ["ENGINE", "GAME"], ""], +["debug-sphere", "debug-sphere", 5, ["ENGINE", "GAME"], ""], +["debug", "debug", 5, ["ENGINE", "GAME"], ""], +["history", "history", 5, ["ENGINE", "GAME"], ""], +["merc-vu1", "merc-vu1", 5, ["ENGINE", "GAME"], ""], +["emerc-vu1", "emerc-vu1", 5, ["ENGINE", "GAME"], ""], +["merc-blend-shape", "merc-blend-shape", 5, ["ENGINE", "GAME"], ""], +["merc", "merc", 5, ["ENGINE", "GAME"], ""], +["emerc", "emerc", 5, ["ENGINE", "GAME"], ""], +["ripple", "ripple", 5, ["ENGINE", "GAME"], ""], +["bones", "bones", 5, ["ENGINE", "GAME"], ""], +["debug-foreground", "debug-foreground", 5, ["ENGINE", "GAME"], ""], +["foreground", "foreground", 5, ["ENGINE", "GAME"], ""], +["generic-vu0", "generic-vu0", 5, ["ENGINE", "GAME"], ""], +["generic-vu1", "generic-vu1", 5, ["ENGINE", "GAME"], ""], +["generic-effect", "generic-effect", 5, ["ENGINE", "GAME"], ""], +["generic-merc", "generic-merc", 5, ["ENGINE", "GAME"], ""], +["generic-tie", "generic-tie", 5, ["ENGINE", "GAME"], ""], +["shadow-cpu", "shadow-cpu", 5, ["ENGINE", "GAME"], ""], +["shadow-vu1", "shadow-vu1", 5, ["ENGINE", "GAME"], ""], +["warp", "warp", 5, ["ENGINE", "GAME"], ""], +["hflip", "hflip", 5, ["ENGINE", "GAME"], ""], +["texture-anim", "texture-anim", 5, ["ENGINE", "GAME"], ""], +["texture-anim-funcs", "texture-anim-funcs", 5, ["ENGINE", "GAME"], ""], +["texture-anim-tables", "texture-anim-tables", 5, ["ENGINE", "GAME"], ""], +["blit-displays", "blit-displays", 5, ["ENGINE", "GAME"], ""], +["font-data", "font-data", 5, ["ENGINE", "GAME"], ""], +["font", "font", 5, ["ENGINE", "GAME"], ""], +["decomp", "decomp", 5, ["ENGINE", "GAME"], ""], +["background", "background", 5, ["ENGINE", "GAME"], ""], +["draw-node", "draw-node", 5, ["ENGINE", "GAME"], ""], +["shrubbery", "shrubbery", 5, ["ENGINE", "GAME"], ""], +["shrub-work", "shrub-work", 5, ["ENGINE", "GAME"], ""], +["tfrag-near", "tfrag-near", 5, ["ENGINE", "GAME"], ""], +["tfrag", "tfrag", 5, ["ENGINE", "GAME"], ""], +["tfrag-methods", "tfrag-methods", 5, ["ENGINE", "GAME"], ""], +["tfrag-work", "tfrag-work", 5, ["ENGINE", "GAME"], ""], +["tie", "tie", 5, ["ENGINE", "GAME"], ""], +["etie-vu1", "etie-vu1", 5, ["ENGINE", "GAME"], ""], +["etie-near-vu1", "etie-near-vu1", 5, ["ENGINE", "GAME"], ""], +["tie-near", "tie-near", 5, ["ENGINE", "GAME"], ""], +["tie-work", "tie-work", 5, ["ENGINE", "GAME"], ""], +["tie-methods", "tie-methods", 5, ["ENGINE", "GAME"], ""], +["prim", "prim", 5, ["ENGINE", "GAME"], ""], +["trajectory", "trajectory", 5, ["ENGINE", "GAME"], ""], +["sparticle-launcher", "sparticle-launcher", 5, ["ENGINE", "GAME"], ""], +["sparticle-subsampler", "sparticle-subsampler", 5, ["ENGINE", "GAME"], ""], +["sparticle", "sparticle", 5, ["ENGINE", "GAME"], ""], +["entity-table", "entity-table", 5, ["ENGINE", "GAME"], ""], +["loader", "loader", 5, ["ENGINE", "GAME"], ""], +["game-info", "game-info", 5, ["ENGINE", "GAME"], ""], +["game-task", "game-task", 5, ["ENGINE", "GAME"], ""], +["lobby-dma", "lobby-dma", 5, ["ENGINE", "GAME"], ""], +["settings", "settings", 5, ["ENGINE", "GAME"], ""], +["mood-tables", "mood-tables", 5, ["ENGINE", "GAME"], ""], +["mood-tables2", "mood-tables2", 5, ["ENGINE", "GAME"], ""], +["mood", "mood", 5, ["ENGINE", "GAME"], ""], +["mood-funcs", "mood-funcs", 5, ["ENGINE", "GAME"], ""], +["mood-funcs2", "mood-funcs2", 5, ["ENGINE", "GAME"], ""], +["jungle-shared", "jungle-shared", 5, ["ENGINE", "GAME"], ""], +["weather-part", "weather-part", 5, ["ENGINE", "GAME"], ""], +["time-of-day", "time-of-day", 5, ["ENGINE", "GAME"], ""], +["sky-data", "sky-data", 5, ["ENGINE", "GAME"], ""], +["sky-tng", "sky-tng", 5, ["ENGINE", "GAME"], ""], +["load-state", "load-state", 5, ["ENGINE", "GAME"], ""], +["level-info", "level-info", 5, ["ENGINE", "GAME"], ""], +["level", "level", 5, ["ENGINE", "GAME"], ""], +["text", "text", 5, ["ENGINE", "GAME"], ""], +["collide-hash", "collide-hash", 5, ["ENGINE", "GAME"], ""], +["collide-probe", "collide-probe", 5, ["ENGINE", "GAME"], ""], +["collide-frag", "collide-frag", 5, ["ENGINE", "GAME"], ""], +["collide-mesh", "collide-mesh", 5, ["ENGINE", "GAME"], ""], +["collide-touch", "collide-touch", 5, ["ENGINE", "GAME"], ""], +["collide-shape", "collide-shape", 5, ["ENGINE", "GAME"], ""], +["collide-shape-rider", "collide-shape-rider", 5, ["ENGINE", "GAME"], ""], +["collide", "collide", 5, ["ENGINE", "GAME"], ""], +["collide-planes", "collide-planes", 5, ["ENGINE", "GAME"], ""], +["spatial-hash", "spatial-hash", 5, ["ENGINE", "GAME"], ""], +["actor-hash", "actor-hash", 5, ["ENGINE", "GAME"], ""], +["merc-death", "merc-death", 5, ["ENGINE", "GAME"], ""], +["water-h", "water-h", 5, ["ENGINE", "GAME"], ""], +["camera", "camera", 5, ["ENGINE", "GAME"], ""], +["cam-interface", "cam-interface", 5, ["ENGINE", "GAME"], ""], +["cam-master", "cam-master", 5, ["ENGINE", "GAME"], ""], +["cam-combiner", "cam-combiner", 5, ["ENGINE", "GAME"], ""], +["cam-update", "cam-update", 5, ["ENGINE", "GAME"], ""], +["vol-h", "vol-h", 5, ["ENGINE", "GAME"], ""], +["cam-layout", "cam-layout", 5, ["ENGINE", "GAME"], ""], +["cam-debug", "cam-debug", 5, ["ENGINE", "GAME"], ""], +["cam-start", "cam-start", 5, ["ENGINE", "GAME"], ""], +["cloth-h", "cloth-h", 5, ["ENGINE", "GAME"], ""], +["cloth", "cloth", 5, ["ENGINE", "GAME"], ""], +["process-drawable", "process-drawable", 5, ["ENGINE", "GAME"], ""], +["curves", "curves", 5, ["ENGINE", "GAME"], ""], +["ambient", "ambient", 5, ["ENGINE", "GAME"], ""], +["speech", "speech", 5, ["ENGINE", "GAME"], ""], +["region", "region", 5, ["ENGINE", "GAME"], ""], +["script", "script", 5, ["ENGINE", "GAME"], ""], +["generic-obs", "generic-obs", 5, ["ENGINE", "GAME"], ""], +["lightning", "lightning", 5, ["ENGINE", "GAME"], ""], +["light-trails-h", "light-trails-h", 5, ["ENGINE", "GAME"], ""], +["lightning-new-h", "lightning-new-h", 5, ["ENGINE", "GAME"], ""], +["particle-curves", "particle-curves", 5, ["ENGINE", "GAME"], ""], +["light-trails", "light-trails", 5, ["ENGINE", "GAME"], ""], +["lightning-new", "lightning-new", 5, ["ENGINE", "GAME"], ""], +["target-util", "target-util", 5, ["ENGINE", "GAME"], ""], +["logic-target", "logic-target", 5, ["ENGINE", "GAME"], ""], +["debug-part", "debug-part", 5, ["ENGINE", "GAME"], ""], +["attackable-hash", "attackable-hash", 5, ["ENGINE", "GAME"], ""], +["projectile", "projectile", 5, ["ENGINE", "GAME"], ""], +["rigid-body-h", "rigid-body-h", 5, ["ENGINE", "GAME"], ""], +["target-handler", "target-handler", 5, ["ENGINE", "GAME"], ""], +["target", "target", 5, ["ENGINE", "GAME"], ""], +["target-death", "target-death", 5, ["ENGINE", "GAME"], ""], +["gun-util", "gun-util", 5, ["ENGINE", "GAME"], ""], +["menu", "menu", 5, ["ENGINE", "GAME"], ""], +["drawable", "drawable", 5, ["ENGINE", "GAME"], ""], +["drawable-group", "drawable-group", 5, ["ENGINE", "GAME"], ""], +["drawable-inline-array", "drawable-inline-array", 5, ["ENGINE", "GAME"], ""], +["drawable-tree", "drawable-tree", 5, ["ENGINE", "GAME"], ""], +["prototype", "prototype", 5, ["ENGINE", "GAME"], ""], +["main-collide", "main-collide", 5, ["ENGINE", "GAME"], ""], +["video", "video", 5, ["ENGINE", "GAME"], ""], +["main", "main", 5, ["ENGINE", "GAME"], ""], +["collide-cache", "collide-cache", 5, ["ENGINE", "GAME"], ""], +["collide-debug", "collide-debug", 5, ["ENGINE", "GAME"], ""], +["relocate", "relocate", 5, ["ENGINE", "GAME"], ""], +["memory-usage", "memory-usage", 5, ["ENGINE", "GAME"], ""], +["entity", "entity", 5, ["ENGINE", "GAME"], ""], +["path", "path", 5, ["ENGINE", "GAME"], ""], +["vol", "vol", 5, ["ENGINE", "GAME"], ""], +["nav-engine", "nav-engine", 5, ["ENGINE", "GAME"], ""], +["nav-mesh", "nav-mesh", 5, ["ENGINE", "GAME"], ""], +["nav-control", "nav-control", 5, ["ENGINE", "GAME"], ""], +["effect-control", "effect-control", 5, ["ENGINE", "GAME"], ""], +["water-part", "water-part", 5, ["ENGINE", "GAME"], ""], +["water", "water", 5, ["ENGINE", "GAME"], ""], +["water-flow", "water-flow", 5, ["ENGINE", "GAME"], ""], +["task-control", "task-control", 5, ["ENGINE", "GAME"], ""], +["scene", "scene", 5, ["ENGINE", "GAME"], ""], +["movie-path", "movie-path", 5, ["ENGINE", "GAME"], ""], +["pov-camera", "pov-camera", 5, ["ENGINE", "GAME"], ""], +["powerups", "powerups", 5, ["ENGINE", "GAME"], ""], +["hud", "hud", 5, ["ENGINE", "GAME"], ""], +["hud-classes", "hud-classes", 5, ["ENGINE", "GAME"], ""], +["progress", "progress", 5, ["ENGINE", "GAME"], ""], +["ocean-trans-tables", "ocean-trans-tables", 5, ["ENGINE", "GAME"], ""], +["ocean", "ocean", 5, ["ENGINE", "GAME"], ""], +["ocean-mid", "ocean-mid", 5, ["ENGINE", "GAME"], ""], +["ocean-transition", "ocean-transition", 5, ["ENGINE", "GAME"], ""], +["ocean-near", "ocean-near", 5, ["ENGINE", "GAME"], ""], +["sparks", "sparks", 5, ["ENGINE", "GAME"], ""], +["eye", "eye", 5, ["ENGINE", "GAME"], ""], +["mem-buffer", "mem-buffer", 5, ["ENGINE", "GAME"], ""], +["dynamic-mem", "dynamic-mem", 5, ["ENGINE", "GAME"], ""], +["headset-h", "headset-h", 5, ["ENGINE", "GAME"], ""], +["stream-media-h", "stream-media-h", 5, ["ENGINE", "GAME"], ""], +["joint-exploder", "joint-exploder", 5, ["ENGINE", "GAME"], ""], +["debris", "debris", 5, ["ENGINE", "GAME"], ""], +["net-process-mgr-h", "net-process-mgr-h", 5, ["ENGINE", "GAME"], ""], +["statistics", "statistics", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-cache-h", "net-mgr-medius-cache-h", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-players-h", "net-mgr-medius-players-h", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-clans-h", "net-mgr-medius-clans-h", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-games-h", "net-mgr-medius-games-h", 5, ["ENGINE", "GAME"], ""], +["net-predict-h", "net-predict-h", 5, ["ENGINE", "GAME"], ""], +["rigid-body-surface-h", "rigid-body-surface-h", 5, ["ENGINE", "GAME"], ""], +["vehicle-h", "vehicle-h", 5, ["ENGINE", "GAME"], ""], +["race-ai-tuning-h", "race-ai-tuning-h", 5, ["ENGINE", "GAME"], ""], +["race-line-h", "race-line-h", 5, ["ENGINE", "GAME"], ""], +["race-h", "race-h", 5, ["ENGINE", "GAME"], ""], +["race-mesh-h", "race-mesh-h", 5, ["ENGINE", "GAME"], ""], +["race-control", "race-control", 5, ["ENGINE", "GAME"], ""], +["wvehicle-weapons-h", "wvehicle-weapons-h", 5, ["ENGINE", "GAME"], ""], +["wvehicle-h", "wvehicle-h", 5, ["ENGINE", "GAME"], ""], +["net-player-h", "net-player-h", 5, ["ENGINE", "GAME"], ""], +["net-world-h", "net-world-h", 5, ["ENGINE", "GAME"], ""], +["net-logging-h", "net-logging-h", 5, ["ENGINE", "GAME"], ""], +["net-powerup-h", "net-powerup-h", 5, ["ENGINE", "GAME"], ""], +["net-game-mgr-h", "net-game-mgr-h", 5, ["ENGINE", "GAME"], ""], +["net-race-h", "net-race-h", 5, ["ENGINE", "GAME"], ""], +["net-game-modes-h", "net-game-modes-h", 5, ["ENGINE", "GAME"], ""], +["net-game-modes2-h", "net-game-modes2-h", 5, ["ENGINE", "GAME"], ""], +["net-simple-destruct-h", "net-simple-destruct-h", 5, ["ENGINE", "GAME"], ""], +["net-hud-h", "net-hud-h", 5, ["ENGINE", "GAME"], ""], +["net-util-h", "net-util-h", 5, ["ENGINE", "GAME"], ""], +["net-proxy-h", "net-proxy-h", 5, ["ENGINE", "GAME"], ""], +["net-projectile-h", "net-projectile-h", 5, ["ENGINE", "GAME"], ""], +["net-time-trial-h", "net-time-trial-h", 5, ["ENGINE", "GAME"], ""], +["net-eco-h", "net-eco-h", 5, ["ENGINE", "GAME"], ""], +["menu2-h", "menu2-h", 5, ["ENGINE", "GAME"], ""], +["menu2-lists", "menu2-lists", 5, ["ENGINE", "GAME"], ""], +["keyboard", "keyboard", 5, ["ENGINE", "GAME"], ""], +["lobby-menu-manager-h", "lobby-menu-manager-h", 5, ["ENGINE", "GAME"], ""], +["hostnames", "hostnames", 5, ["ENGINE", "GAME"], ""], +["net-mgr-async", "net-mgr-async", 5, ["ENGINE", "GAME"], ""], +["net-mgr-chat", "net-mgr-chat", 5, ["ENGINE", "GAME"], ""], +["net-mgr-sysmsg", "net-mgr-sysmsg", 5, ["ENGINE", "GAME"], ""], +["net-mgr", "net-mgr", 5, ["ENGINE", "GAME"], ""], +["net-mgr-dme", "net-mgr-dme", 5, ["ENGINE", "GAME"], ""], +["net-aux-voice", "net-aux-voice", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius", "net-mgr-medius", 5, ["ENGINE", "GAME"], ""], +["net-mgr-muis", "net-mgr-muis", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-cache", "net-mgr-medius-cache", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-players", "net-mgr-medius-players", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-buddies", "net-mgr-medius-buddies", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-clans", "net-mgr-medius-clans", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-ladders", "net-mgr-medius-ladders", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-rooms", "net-mgr-medius-rooms", 5, ["ENGINE", "GAME"], ""], +["net-mgr-medius-games", "net-mgr-medius-games", 5, ["ENGINE", "GAME"], ""], +["lobby-ghost", "lobby-ghost", 5, ["ENGINE", "GAME"], ""], +["net-mgr-mgcl", "net-mgr-mgcl", 5, ["ENGINE", "GAME"], ""], +["net-mgr-playback", "net-mgr-playback", 5, ["ENGINE", "GAME"], ""], +["net-colarb", "net-colarb", 5, ["ENGINE", "GAME"], ""], +["net-init", "net-init", 5, ["ENGINE", "GAME"], ""], +["net-start", "net-start", 5, ["ENGINE", "GAME"], ""], +["net-process-mgr", "net-process-mgr", 5, ["ENGINE", "GAME"], ""], +["net-http", "net-http", 5, ["ENGINE", "GAME"], ""], +["capture", "capture", 5, ["ENGINE", "GAME"], ""], +["fmv-player", "fmv-player", 5, ["ENGINE", "GAME"], ""], +["game-save", "game-save", 5, ["ENGINE", "GAME"], ""], +["title-obs", "title-obs", 5, ["ENGINE", "GAME"], ""], +["dynamic-patch", "dynamic-patch", 5, ["ENGINE", "GAME"], ""], +["process-nettable", "process-nettable", 5, ["ENGINE", "GAME"], ""], +["net-player", "net-player", 5, ["ENGINE", "GAME"], ""], +["net-util", "net-util", 5, ["ENGINE", "GAME"], ""], +["net-predict", "net-predict", 5, ["ENGINE", "GAME"], ""], +["net-logging", "net-logging", 5, ["ENGINE", "GAME"], ""], +["net-world", "net-world", 5, ["ENGINE", "GAME"], ""], +["stream-media", "stream-media", 5, ["ENGINE", "GAME"], ""], +["net-projectile", "net-projectile", 5, ["ENGINE", "GAME"], ""], +["udp-layer", "udp-layer", 5, ["ENGINE", "GAME"], ""], +["headset", "headset", 5, ["ENGINE", "GAME"], ""], +["idle-control", "idle-control", 5, ["ENGINE", "GAME"], ""], +["water-anim", "water-anim", 5, ["ENGINE", "GAME"], ""], +["rigid-body-debug", "rigid-body-debug", 5, ["ENGINE", "GAME"], ""], +["rigid-body-surface", "rigid-body-surface", 5, ["ENGINE", "GAME"], ""], +["rigid-body", "rigid-body", 5, ["ENGINE", "GAME"], ""], +["rigid-body-queue", "rigid-body-queue", 5, ["ENGINE", "GAME"], ""], +["rigid-body-object", "rigid-body-object", 5, ["ENGINE", "GAME"], ""], +["scene-actor", "scene-actor", 5, ["ENGINE", "GAME"], ""], +["ragdoll-test", "ragdoll-test", 5, ["ENGINE", "GAME"], ""], +["spartacus", "spartacus", 5, ["ENGINE", "GAME"], ""], +["driver", "driver", 5, ["ENGINE", "GAME"], ""], +["helmet", "helmet", 5, ["ENGINE", "GAME"], ""], +["driver-jak", "driver-jak", 5, ["ENGINE", "GAME"], ""], +["driver-ashelin", "driver-ashelin", 5, ["ENGINE", "GAME"], ""], +["driver-razer", "driver-razer", 5, ["ENGINE", "GAME"], ""], +["driver-klever", "driver-klever", 5, ["ENGINE", "GAME"], ""], +["driver-kiera", "driver-kiera", 5, ["ENGINE", "GAME"], ""], +["driver-thug-a", "driver-thug-a", 5, ["ENGINE", "GAME"], ""], +["driver-thug-b", "driver-thug-b", 5, ["ENGINE", "GAME"], ""], +["driver-thug-c", "driver-thug-c", 5, ["ENGINE", "GAME"], ""], +["driver-taryn", "driver-taryn", 5, ["ENGINE", "GAME"], ""], +["driver-torn", "driver-torn", 5, ["ENGINE", "GAME"], ""], +["driver-sig", "driver-sig", 5, ["ENGINE", "GAME"], ""], +["driver-ur-86", "driver-ur-86", 5, ["ENGINE", "GAME"], ""], +["driver-kaeden", "driver-kaeden", 5, ["ENGINE", "GAME"], ""], +["driver-rayn", "driver-rayn", 5, ["ENGINE", "GAME"], ""], +["driver-ratchet", "driver-ratchet", 5, ["ENGINE", "GAME"], ""], +["driver-jaka", "driver-jaka", 5, ["ENGINE", "GAME"], ""], +["driver-jakb", "driver-jakb", 5, ["ENGINE", "GAME"], ""], +["driver-jakc", "driver-jakc", 5, ["ENGINE", "GAME"], ""], +["driver-daxter", "driver-daxter", 5, ["ENGINE", "GAME"], ""], +["driver-gtblitz", "driver-gtblitz", 5, ["ENGINE", "GAME"], ""], +["driver-pecker", "driver-pecker", 5, ["ENGINE", "GAME"], ""], +["driver-ximon", "driver-ximon", 5, ["ENGINE", "GAME"], ""], +["driver-osmo", "driver-osmo", 5, ["ENGINE", "GAME"], ""], +["cam-states", "cam-states", 5, ["ENGINE", "GAME"], ""], +["cam-states-dbg", "cam-states-dbg", 5, ["ENGINE", "GAME"], ""], +["speech-jak", "speech-jak", 5, ["ENGINE", "GAME"], ""], +["speech-daxter", "speech-daxter", 5, ["ENGINE", "GAME"], ""], +["speech-pecker", "speech-pecker", 5, ["ENGINE", "GAME"], ""], +["speech-gtblitz", "speech-gtblitz", 5, ["ENGINE", "GAME"], ""], +["speech-mizo", "speech-mizo", 5, ["ENGINE", "GAME"], ""], +["vehicle-part", "vehicle-part", 5, ["ENGINE", "GAME"], ""], +["vehicle-debris", "vehicle-debris", 5, ["ENGINE", "GAME"], ""], +["vehicle-effects", "vehicle-effects", 5, ["ENGINE", "GAME"], ""], +["vehicle", "vehicle", 5, ["ENGINE", "GAME"], ""], +["wcar-skel-template", "wcar-skel-template", 5, ["ENGINE", "GAME"], ""], +["vehicle-util", "vehicle-util", 5, ["ENGINE", "GAME"], ""], +["vehicle-physics", "vehicle-physics", 5, ["ENGINE", "GAME"], ""], +["vehicle-states", "vehicle-states", 5, ["ENGINE", "GAME"], ""], +["vehicle-manager", "vehicle-manager", 5, ["ENGINE", "GAME"], ""], +["vehicle-hud", "vehicle-hud", 5, ["ENGINE", "GAME"], ""], +["vehicle-net", "vehicle-net", 5, ["ENGINE", "GAME"], ""], +["target-pilot", "target-pilot", 5, ["ENGINE", "GAME"], ""], +["pilot-states", "pilot-states", 5, ["ENGINE", "GAME"], ""], +["find-nearest", "find-nearest", 5, ["ENGINE", "GAME"], ""], +["glist-h", "glist-h", 5, ["ENGINE", "GAME"], ""], +["glist", "glist", 5, ["ENGINE", "GAME"], ""], +["anim-tester", "anim-tester", 5, ["ENGINE", "GAME"], ""], +["viewer", "viewer", 5, ["ENGINE", "GAME"], ""], +["part-tester", "part-tester", 5, ["ENGINE", "GAME"], ""], +["manipulator", "manipulator", 5, ["ENGINE", "GAME"], ""], +["editable-h", "editable-h", 5, ["ENGINE", "GAME"], ""], +["editable", "editable", 5, ["ENGINE", "GAME"], ""], +["editable-player", "editable-player", 5, ["ENGINE", "GAME"], ""], +["mysql-nav-graph", "mysql-nav-graph", 5, ["ENGINE", "GAME"], ""], +["nav-graph-editor", "nav-graph-editor", 5, ["ENGINE", "GAME"], ""], +["nav-mesh-editor-h", "nav-mesh-editor-h", 5, ["ENGINE", "GAME"], ""], +["nav-mesh-editor", "nav-mesh-editor", 5, ["ENGINE", "GAME"], ""], +["sampler", "sampler", 5, ["ENGINE", "GAME"], ""], +["default-menu", "default-menu", 5, ["ENGINE", "GAME"], ""], +["visvol-edit", "visvol-edit", 5, ["ENGINE", "GAME"], ""], +["collision-editor", "collision-editor", 5, ["ENGINE", "GAME"], ""], +["construction-obs-h", "construction-obs-h", 5, ["ENGINE", "GAME"], ""], +["daxter", "daxter", 5, ["ENGINE", "GAME"], ""], +["wvehicle-weapons-debug", "wvehicle-weapons-debug", 5, ["ENGINE", "GAME"], ""], +["spartacus-editor", "spartacus-editor", 5, ["ENGINE", "GAME"], ""], +["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"], ""], +["tpage-3963", "tpage-3963", 5, ["ASHCRED"], ""], +["tpage-3962", "tpage-3962", 5, ["ASHCRED"], ""], +["ash-hr-cred-ag", "ash-hr-cred", 5, ["ASHCRED"], ""], +["ashcred", "ashcred", 5, ["ASHCRED"], ""], +["speech-ashelin", "speech-ashelin", 5, ["ASHLEV"], ""], +["tpage-3691", "tpage-3691", 5, ["ASHLEV"], ""], +["ashelin-ag", "ashelin", 5, ["ASHLEV"], ""], +["ashlev", "ashlev", 5, ["ASHLEV"], ""], +["tiger-chassis-ag", "tiger-chassis", 5, ["ASHVL", "RAYVL2", "TIGEL", "TORVL"], ""], +["tiger-door-c-ag", "tiger-door-c", 5, ["ASHVL", "TIGEL"], ""], +["tiger-f-fender-b-ag", "tiger-f-fender-b", 5, ["ASHVL", "TIGEL"], ""], +["tiger-hood-d-ag", "tiger-hood-d", 5, ["ASHVL", "TIGEL"], ""], +["tiger-r-fender-d-ag", "tiger-r-fender-d", 5, ["ASHVL", "TIGEL"], ""], +["tiger-roof-c-ag", "tiger-roof-c", 5, ["ASHVL", "TIGEL"], ""], +["wheel-e-ag", "wheel-e", 5, ["ASHVL", "BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THBVL2", "TIGEL", "WOLFL", "WOMBL"], ""], +["ashvl", "ashvl", 5, ["ASHVL"], ""], +["falcon-chassis-ag", "falcon-chassis", 5, ["ASHVL2", "FALCL", "GTBVL", "JAKVL", "THCVL2"], ""], +["falcon-door-e-ag", "falcon-door-e", 5, ["ASHVL2", "FALCL"], ""], +["falcon-hood-e-ag", "falcon-hood-e", 5, ["ASHVL2", "FALCL"], ""], +["falcon-roof-e-ag", "falcon-roof-e", 5, ["ASHVL2", "FALCL"], ""], +["falcon-trunk-e-ag", "falcon-trunk-e", 5, ["ASHVL2", "FALCL"], ""], +["wheel-n-ag", "wheel-n", 5, ["ASHVL2", "BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THCVL3", "TIGEL", "WOLFL", "WOMBL"], ""], +["ashvl2", "ashvl2", 5, ["ASHVL2"], ""], +["wheel-t-ag", "wheel-t", 5, ["ASHVL3", "BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "TORVL3", "WOLFL", "WOMBL"], ""], +["wombat-chassis-ag", "wombat-chassis", 5, ["ASHVL3", "THCVL", "WOMBL"], ""], +["wombat-door-e-ag", "wombat-door-e", 5, ["ASHVL3", "WOMBL"], ""], +["wombat-hood-e-ag", "wombat-hood-e", 5, ["ASHVL3", "WOMBL"], ""], +["wombat-r-fender-b-ag", "wombat-r-fender-b", 5, ["ASHVL3", "WOMBL"], ""], +["wombat-roof-b-ag", "wombat-roof-b", 5, ["ASHVL3", "THCVL", "WOMBL"], ""], +["wombat-trunk-d-ag", "wombat-trunk-d", 5, ["ASHVL3", "WOMBL"], ""], +["ashvl3", "ashvl3", 5, ["ASHVL3"], ""], +["atoll-ocean", "atoll-ocean", 5, ["ATL", "ATX"], ""], +["atoll-effects", "atoll-effects", 5, ["ATL", "ATX"], ""], +["atoll-part", "atoll-part", 5, ["ATL", "ATX"], ""], +["atoll-obs", "atoll-obs", 5, ["ATL", "ATX"], ""], +["tpage-3039", "tpage-3039", 5, ["ATL"], ""], +["tpage-3042", "tpage-3042", 5, ["ATL"], ""], +["tpage-3040", "tpage-3040", 5, ["ATL"], ""], +["tpage-3041", "tpage-3041", 5, ["ATL"], ""], +["tpage-3038", "tpage-3038", 5, ["ATL"], ""], +["atoll-dish-ag", "atoll-dish", 5, ["ATL", "ATX"], ""], +["atoll-rotor-ag", "atoll-rotor", 5, ["ATL", "ATX"], ""], +["atoll-vis", "atoll-vis", 5, ["ATL"], ""], +["net-artifact", "net-artifact", 5, ["ATOLLART", "CLIFFART", "COLART", "DESART", "DISLEART", "KCROSART", "SNOBART"], ""], +["tpage-2759", "tpage-2759", 5, ["ATOLLART"], ""], +["pre-artifact-a-ag", "pre-artifact-a", 5, ["ATOLLART", "CLIFFART", "COLART", "DESART", "DISLEART", "KCROSART", "KRASFOOT", "SNOBART"], ""], +["pre-artifact-d-ag", "pre-artifact-d", 5, ["ATOLLART", "CLIFFART", "COLART", "DESART", "DISLEART", "KCROSART", "KRASFOOT", "SNOBART"], ""], +["pre-artifact-b-ag", "pre-artifact-b", 5, ["ATOLLART", "CLIFFART", "COLART", "DESART", "DISLEART", "KCROSART", "KRASFOOT", "SNOBART"], ""], +["pre-artifact-c-ag", "pre-artifact-c", 5, ["ATOLLART", "CLIFFART", "COLART", "DESART", "DISLEART", "KCROSART", "KRASFOOT", "SNOBART"], ""], +["atollart", "atollart", 5, ["ATOLLART"], ""], +["ctf-part", "ctf-part", 5, ["ATOLLCTF", "CLIFCTF", "COLICTF", "DESACTF", "DISLECTF", "KCROSCTF", "SBWLCTF"], ""], +["ctf-obs", "ctf-obs", 5, ["ATOLLCTF", "CLIFCTF", "COLICTF", "DESACTF", "DISLECTF", "KCROSCTF", "SBWLCTF"], ""], +["net-ctf", "net-ctf", 5, ["ATOLLCTF", "CLIFCTF", "COLICTF", "DESACTF", "DISLECTF", "KCROSCTF", "SBWLCTF"], ""], +["tpage-2760", "tpage-2760", 5, ["ATOLLCTF"], ""], +["tpage-2761", "tpage-2761", 5, ["ATOLLCTF"], ""], +["ctf-base-ag", "ctf-base", 5, ["ATOLLCTF", "CLIFCTF", "COLICTF", "DESACTF", "DISLECTF", "KCROSCTF", "SBWLCTF"], ""], +["fuel-cell-ag", "fuel-cell", 5, ["ATOLLCTF", "CANFOOT", "CLIFCTF", "CNSPFOOT", "COLICTF", "DESACTF", "DISLECTF", "DKKRFOOT", "DOCKFOOT", "DRDKFOOT", "DROMFOOT", "HAVNFOOT", "HAVTFOOT", "HJNGFOOT", "HVSWFOOT", "ICEBFOOT", "ICEFOOT", "ICEPFOOT", "ICETFOOT", "JUNGFOOT", "KCROSCTF", "KRASFOOT", "KRATFOOT", "PEAKFOOT", "SBWLCTF", "SEWFOOT", "SNOWFOOT", "SPARFOOT", "SPATFOOT", "SPTMFOOT", "TEMPFOOT"], ""], +["atollctf", "atollctf", 5, ["ATOLLCTF"], ""], +["tpage-3105", "tpage-3105", 5, ["ATOLLS"], ""], +["atolls", "atolls", 5, ["ATOLLS"], ""], +["net-beasthunt", "net-beasthunt", 5, ["ATOPLOW", "CLIFHUNT", "DESHUNT", "DESHUNT2", "DESRAPT", "KCRSPLOW"], ""], +["plow", "plow", 5, ["ATOPLOW", "KCRSPLOW"], ""], +["tpage-3717", "tpage-3717", 5, ["ATOPLOW"], ""], +["plow-ag", "plow", 5, ["ATOPLOW", "KCRSPLOW"], ""], +["plow-debris-ag", "plow-debris", 5, ["ATOPLOW", "KCRSPLOW"], ""], +["atoplow", "atoplow", 5, ["ATOPLOW"], ""], +["tpage-3033", "tpage-3033", 5, ["ATX"], ""], +["tpage-3037", "tpage-3037", 5, ["ATX"], ""], +["tpage-3035", "tpage-3035", 5, ["ATX"], ""], +["tpage-3036", "tpage-3036", 5, ["ATX"], ""], +["atollx-vis", "atollx-vis", 5, ["ATX"], ""], +["bear-chassis-ag", "bear-chassis", 5, ["BEARL", "KLEVL2", "SIGVL3", "UR8VL"], ""], +["bear-door-a-ag", "bear-door-a", 5, ["BEARL"], ""], +["bear-door-b-ag", "bear-door-b", 5, ["BEARL", "UR8VL"], ""], +["bear-door-c-ag", "bear-door-c", 5, ["BEARL", "SIGVL3"], ""], +["bear-door-d-ag", "bear-door-d", 5, ["BEARL", "KLEVL2"], ""], +["bear-door-e-ag", "bear-door-e", 5, ["BEARL"], ""], +["bear-hood-a-ag", "bear-hood-a", 5, ["BEARL"], ""], +["bear-hood-b-ag", "bear-hood-b", 5, ["BEARL", "UR8VL"], ""], +["bear-hood-c-ag", "bear-hood-c", 5, ["BEARL", "SIGVL3"], ""], +["bear-hood-d-ag", "bear-hood-d", 5, ["BEARL"], ""], +["bear-hood-e-ag", "bear-hood-e", 5, ["BEARL", "KLEVL2"], ""], +["bear-r-fender-a-ag", "bear-r-fender-a", 5, ["BEARL"], ""], +["bear-r-fender-b-ag", "bear-r-fender-b", 5, ["BEARL", "UR8VL"], ""], +["bear-r-fender-c-ag", "bear-r-fender-c", 5, ["BEARL", "KLEVL2"], ""], +["bear-r-fender-d-ag", "bear-r-fender-d", 5, ["BEARL"], ""], +["bear-r-fender-e-ag", "bear-r-fender-e", 5, ["BEARL", "SIGVL3"], ""], +["bear-roof-a-ag", "bear-roof-a", 5, ["BEARL", "UR8VL"], ""], +["bear-roof-b-ag", "bear-roof-b", 5, ["BEARL", "KLEVL2"], ""], +["bear-roof-c-ag", "bear-roof-c", 5, ["BEARL"], ""], +["bear-roof-d-ag", "bear-roof-d", 5, ["BEARL"], ""], +["bear-roof-e-ag", "bear-roof-e", 5, ["BEARL", "SIGVL3"], ""], +["bear-trunk-a-ag", "bear-trunk-a", 5, ["BEARL"], ""], +["bear-trunk-b-ag", "bear-trunk-b", 5, ["BEARL", "UR8VL"], ""], +["bear-trunk-c-ag", "bear-trunk-c", 5, ["BEARL", "KLEVL2"], ""], +["bear-trunk-d-ag", "bear-trunk-d", 5, ["BEARL"], ""], +["bear-trunk-e-ag", "bear-trunk-e", 5, ["BEARL", "SIGVL3"], ""], +["wheel-a-ag", "wheel-a", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "KIEVL", "LEOPL", "MONGL", "PANTL", "POSSL", "RAYVL2", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-b-ag", "wheel-b", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-c-ag", "wheel-c", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THAVL", "TIGEL", "TORVL2", "WOLFL", "WOMBL"], ""], +["wheel-d-ag", "wheel-d", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "PECVL", "POSSL", "SNAKL", "THCVL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-f-ag", "wheel-f", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-g-ag", "wheel-g", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THBVL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-h-ag", "wheel-h", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "JAKVL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "TORVL", "WOLFL", "WOMBL"], ""], +["wheel-i-ag", "wheel-i", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "KLEVL", "LEOPL", "MONGL", "PANTL", "POSSL", "RAYVL", "SNAKL", "TIGEL", "UR8VL", "WOLFL", "WOMBL"], ""], +["wheel-j-ag", "wheel-j", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SIGVL", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-k-ag", "wheel-k", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "GTBVL", "LEOPL", "MONGL", "PANTL", "POSSL", "RAZVL", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-l-ag", "wheel-l", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SIGVL3", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-m-ag", "wheel-m", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "KLEVL2", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-o-ag", "wheel-o", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THAVL2", "THAVL3", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-p-ag", "wheel-p", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THBVL3", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-q-ag", "wheel-q", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "UR8VL3", "WOLFL", "WOMBL"], ""], +["wheel-r-ag", "wheel-r", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "THCVL2", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-s-ag", "wheel-s", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "UR8VL2", "WOLFL", "WOMBL"], ""], +["wheel-u-ag", "wheel-u", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SIGVL2", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["wheel-v-ag", "wheel-v", 5, ["BEARL", "BOBCL", "CHEEL", "COUGL", "DAXTL", "FALCL", "GILAL", "LEOPL", "MONGL", "PANTL", "POSSL", "SNAKL", "TIGEL", "WOLFL", "WOMBL"], ""], +["bearl", "bearl", 5, ["BEARL"], ""], +["bobcat-chassis-ag", "bobcat-chassis", 5, ["BOBCL", "KIEVL", "PECVL", "UR8VL2"], ""], +["bobcat-door-a-ag", "bobcat-door-a", 5, ["BOBCL"], ""], +["bobcat-door-b-ag", "bobcat-door-b", 5, ["BOBCL"], ""], +["bobcat-door-c-ag", "bobcat-door-c", 5, ["BOBCL"], ""], +["bobcat-door-d-ag", "bobcat-door-d", 5, ["BOBCL", "KIEVL", "PECVL", "UR8VL2"], ""], +["bobcat-door-e-ag", "bobcat-door-e", 5, ["BOBCL"], ""], +["bobcat-f-fender-a-ag", "bobcat-f-fender-a", 5, ["BOBCL"], ""], +["bobcat-f-fender-b-ag", "bobcat-f-fender-b", 5, ["BOBCL", "KIEVL"], ""], +["bobcat-f-fender-c-ag", "bobcat-f-fender-c", 5, ["BOBCL", "UR8VL2"], ""], +["bobcat-f-fender-d-ag", "bobcat-f-fender-d", 5, ["BOBCL"], ""], +["bobcat-f-fender-e-ag", "bobcat-f-fender-e", 5, ["BOBCL", "PECVL"], ""], +["bobcat-hood-a-ag", "bobcat-hood-a", 5, ["BOBCL"], ""], +["bobcat-hood-b-ag", "bobcat-hood-b", 5, ["BOBCL"], ""], +["bobcat-hood-c-ag", "bobcat-hood-c", 5, ["BOBCL", "KIEVL"], ""], +["bobcat-hood-d-ag", "bobcat-hood-d", 5, ["BOBCL", "PECVL"], ""], +["bobcat-hood-e-ag", "bobcat-hood-e", 5, ["BOBCL"], ""], +["bobcat-r-fender-a-ag", "bobcat-r-fender-a", 5, ["BOBCL"], ""], +["bobcat-r-fender-b-ag", "bobcat-r-fender-b", 5, ["BOBCL"], ""], +["bobcat-r-fender-c-ag", "bobcat-r-fender-c", 5, ["BOBCL", "KIEVL"], ""], +["bobcat-r-fender-d-ag", "bobcat-r-fender-d", 5, ["BOBCL"], ""], +["bobcat-r-fender-e-ag", "bobcat-r-fender-e", 5, ["BOBCL", "PECVL", "UR8VL2"], ""], +["bobcat-roof-a-ag", "bobcat-roof-a", 5, ["BOBCL"], ""], +["bobcat-roof-b-ag", "bobcat-roof-b", 5, ["BOBCL"], ""], +["bobcat-roof-c-ag", "bobcat-roof-c", 5, ["BOBCL", "PECVL"], ""], +["bobcat-roof-d-ag", "bobcat-roof-d", 5, ["BOBCL", "KIEVL"], ""], +["bobcat-roof-e-ag", "bobcat-roof-e", 5, ["BOBCL", "UR8VL2"], ""], +["bobcl", "bobcl", 5, ["BOBCL"], ""], +["tpage-546", "tpage-546", 5, ["BRDROOM", "BRDROOMF"], ""], +["tpage-1544", "tpage-1544", 5, ["BRDROOM", "BRDROOMF"], ""], +["tpage-1119", "tpage-1119", 5, ["BRDROOM", "BRDROOMF"], ""], +["brd-pool-water-ag", "brd-pool-water", 5, ["BRDROOM", "BRDROOMF"], ""], +["brdroom", "brdroom", 5, ["BRDROOM", "BRDROOMF"], ""], +["brdroom-obs", "brdroom-obs", 5, ["BRDROOMF"], ""], +["brdroom-part", "brdroom-part", 5, ["BRDROOMF"], ""], +["raceline-weapon", "raceline-weapon", 5, ["CANFOOT", "CNSPFOOT", "DKKRFOOT", "DOCKFOOT", "DRDKFOOT", "DROMFOOT", "HAVNFOOT", "HAVTFOOT", "HJNGFOOT", "HVSWFOOT", "ICEBFOOT", "ICEFOOT", "ICEPFOOT", "ICETFOOT", "JUNGFOOT", "KRASFOOT", "KRATFOOT", "PEAKFOOT", "RACEWEAP", "SEWFOOT", "SNOWFOOT", "SPARFOOT", "SPATFOOT", "SPTMFOOT", "TEMPFOOT"], ""], +["wvehicle-weapons-chicken-drone", "wvehicle-weapons-chicken-drone", 5, ["CANFOOT", "CNSPFOOT", "DKKRFOOT", "DOCKFOOT", "DRDKFOOT", "DROMFOOT", "HAVNFOOT", "HAVTFOOT", "HJNGFOOT", "HVSWFOOT", "ICEBFOOT", "ICEFOOT", "ICEPFOOT", "ICETFOOT", "JUNGFOOT", "KRASFOOT", "KRATFOOT", "PEAKFOOT", "RACEWEAP", "SEWFOOT", "SNOWFOOT", "SPARFOOT", "SPATFOOT", "SPTMFOOT", "TEMPFOOT"], ""], +["football", "football", 5, ["CANFOOT", "CNSPFOOT", "DKKRFOOT", "DOCKFOOT", "DRDKFOOT", "DROMFOOT", "HAVNFOOT", "HAVTFOOT", "HJNGFOOT", "HVSWFOOT", "ICEBFOOT", "ICEFOOT", "ICEPFOOT", "ICETFOOT", "JUNGFOOT", "KRASFOOT", "KRATFOOT", "PEAKFOOT", "SEWFOOT", "SNOWFOOT", "SPARFOOT", "SPATFOOT", "SPTMFOOT", "TEMPFOOT"], ""], +["football2", "football2", 5, ["CANFOOT", "CNSPFOOT", "DKKRFOOT", "DOCKFOOT", "DRDKFOOT", "DROMFOOT", "HAVNFOOT", "HAVTFOOT", "HJNGFOOT", "HVSWFOOT", "ICEBFOOT", "ICEFOOT", "ICEPFOOT", "ICETFOOT", "JUNGFOOT", "KRASFOOT", "KRATFOOT", "PEAKFOOT", "SEWFOOT", "SNOWFOOT", "SPARFOOT", "SPATFOOT", "SPTMFOOT", "TEMPFOOT"], ""], +["tpage-2591", "tpage-2591", 5, ["CANFOOT"], ""], +["tpage-2592", "tpage-2592", 5, ["CANFOOT"], ""], +["fuel-cell-shield-ag", "fuel-cell-shield", 5, ["CANFOOT", "CNSPFOOT", "DKKRFOOT", "DOCKFOOT", "DRDKFOOT", "DROMFOOT", "HAVNFOOT", "HAVTFOOT", "HJNGFOOT", "HVSWFOOT", "ICEBFOOT", "ICEFOOT", "ICEPFOOT", "ICETFOOT", "JUNGFOOT", "KRASFOOT", "KRATFOOT", "PEAKFOOT", "SEWFOOT", "SNOWFOOT", "SPARFOOT", "SPATFOOT", "SPTMFOOT", "TEMPFOOT"], ""], +["canfoot", "canfoot", 5, ["CANFOOT"], ""], +["tpage-2205", "tpage-2205", 5, ["CANSPARS"], ""], +["tpage-2207", "tpage-2207", 5, ["CANSPARS"], ""], +["tpage-2324", "tpage-2324", 5, ["CANSPARS"], ""], +["canspars", "canspars", 5, ["CANSPARS"], ""], +["spargus-obs", "spargus-obs", 5, ["CANSPARW", "CSX", "SPARGUSW", "SPARTEMW", "SPX", "STX"], ""], +["canspar-ocean", "canspar-ocean", 5, ["CANSPARW", "CSX"], ""], +["canyon-part", "canyon-part", 5, ["CANSPARW", "CANYONW", "CSX", "CYX", "SPATOURW"], ""], +["canyon-effects", "canyon-effects", 5, ["CANSPARW", "CANYONW", "CSX", "CYX", "SPATOURW"], ""], +["tpage-2236", "tpage-2236", 5, ["CANSPARW"], ""], +["cansparw", "cansparw", 5, ["CANSPARW"], ""], +["net-time-box", "net-time-box", 5, ["CANTBOX", "CNSPTBOX", "DKKRTBOX", "DOCKTBOX", "DRDKTBOX", "DROMTBOX", "HAVNTBOX", "HAVTTBOX", "HVJGTBOX", "HVSWTBOX", "ICEBTBOX", "ICEPTBOX", "ICETBOX", "ICETTBOX", "JUNGTBOX", "KRASTBOX", "KRATTBOX", "PEAKTBOX", "SEWTBOX", "SNOWTBOX", "SPATTBOX", "SPRGSTBX", "SPTMTBOX", "TEMPTBOX"], ""], +["time-box-obs", "time-box-obs", 5, ["CANTBOX", "CNSPTBOX", "DKKRTBOX", "DOCKTBOX", "DRDKTBOX", "DROMTBOX", "HAVNTBOX", "HAVTTBOX", "HVJGTBOX", "HVSWTBOX", "ICEBTBOX", "ICEPTBOX", "ICETBOX", "ICETTBOX", "JUNGTBOX", "KRASTBOX", "KRATTBOX", "PEAKTBOX", "SEWTBOX", "SNOWTBOX", "SPATTBOX", "SPRGSTBX", "SPTMTBOX", "TEMPTBOX"], ""], +["tpage-2593", "tpage-2593", 5, ["CANTBOX"], ""], +["tpage-2668", "tpage-2668", 5, ["CANTBOX"], ""], +["time-freeze-ag", "time-freeze", 5, ["CANTBOX", "CNSPTBOX", "DKKRTBOX", "DOCKTBOX", "DRDKTBOX", "DROMTBOX", "HAVNTBOX", "HAVTTBOX", "HVJGTBOX", "HVSWTBOX", "ICEBTBOX", "ICEPTBOX", "ICETBOX", "ICETTBOX", "JUNGTBOX", "KRASTBOX", "KRATTBOX", "PEAKTBOX", "SEWTBOX", "SNOWTBOX", "SPATTBOX", "SPRGSTBX", "SPTMTBOX", "TEMPTBOX"], ""], +["time-freeze-debris-ag", "time-freeze-debris", 5, ["CANTBOX", "CNSPTBOX", "DKKRTBOX", "DOCKTBOX", "DRDKTBOX", "DROMTBOX", "HAVNTBOX", "HAVTTBOX", "HVJGTBOX", "HVSWTBOX", "ICEBTBOX", "ICEPTBOX", "ICETBOX", "ICETTBOX", "JUNGTBOX", "KRASTBOX", "KRATTBOX", "PEAKTBOX", "SEWTBOX", "SNOWTBOX", "SPATTBOX", "SPRGSTBX", "SPTMTBOX", "TEMPTBOX"], ""], +["cantbox", "cantbox", 5, ["CANTBOX"], ""], +["tpage-2346", "tpage-2346", 5, ["CANYONS"], ""], +["tpage-2452", "tpage-2452", 5, ["CANYONS"], ""], +["tpage-2325", "tpage-2325", 5, ["CANYONS"], ""], +["canyons", "canyons", 5, ["CANYONS"], ""], +["net-time-trial", "net-time-trial", 5, ["CANYONTT", "CNSPTT", "DKKRTT", "DOCKSTT", "DRDKTT", "DROMETT", "HAVTT", "HVJGTT", "HVSWTT", "HVTRTT", "ICBGTT", "ICETT", "ICPSTT", "ICTRTT", "JUNGLETT", "KRASTT", "KRTRTT", "PEAKTT", "SEWERTT", "SNOWTT", "SPARTT", "SPTMTT", "SPTRTT", "TEMPLETT"], ""], +["canyontt", "canyontt", 5, ["CANYONTT"], ""], +["canyon-obs", "canyon-obs", 5, ["CANYONW", "CYX", "SPATOURW"], ""], +["tpage-977", "tpage-977", 5, ["CANYONW"], ""], +["canyonw", "canyonw", 5, ["CANYONW"], ""], +["cars", "cars", 5, ["CARS"], ""], +["cheetah-chassis-ag", "cheetah-chassis", 5, ["CHEEL", "RAZVL", "THCVL3"], ""], +["cheetah-door-a-ag", "cheetah-door-a", 5, ["CHEEL"], ""], +["cheetah-door-b-ag", "cheetah-door-b", 5, ["CHEEL"], ""], +["cheetah-door-c-ag", "cheetah-door-c", 5, ["CHEEL"], ""], +["cheetah-door-d-ag", "cheetah-door-d", 5, ["CHEEL", "THCVL3"], ""], +["cheetah-door-e-ag", "cheetah-door-e", 5, ["CHEEL", "RAZVL"], ""], +["cheetah-f-fender-a-ag", "cheetah-f-fender-a", 5, ["CHEEL"], ""], +["cheetah-f-fender-b-ag", "cheetah-f-fender-b", 5, ["CHEEL", "THCVL3"], ""], +["cheetah-f-fender-c-ag", "cheetah-f-fender-c", 5, ["CHEEL", "RAZVL"], ""], +["cheetah-f-fender-d-ag", "cheetah-f-fender-d", 5, ["CHEEL"], ""], +["cheetah-f-fender-e-ag", "cheetah-f-fender-e", 5, ["CHEEL"], ""], +["cheetah-hood-a-ag", "cheetah-hood-a", 5, ["CHEEL"], ""], +["cheetah-hood-b-ag", "cheetah-hood-b", 5, ["CHEEL"], ""], +["cheetah-hood-c-ag", "cheetah-hood-c", 5, ["CHEEL", "RAZVL"], ""], +["cheetah-hood-d-ag", "cheetah-hood-d", 5, ["CHEEL", "THCVL3"], ""], +["cheetah-hood-e-ag", "cheetah-hood-e", 5, ["CHEEL"], ""], +["cheetah-r-fender-a-ag", "cheetah-r-fender-a", 5, ["CHEEL"], ""], +["cheetah-r-fender-b-ag", "cheetah-r-fender-b", 5, ["CHEEL", "RAZVL"], ""], +["cheetah-r-fender-c-ag", "cheetah-r-fender-c", 5, ["CHEEL", "THCVL3"], ""], +["cheetah-r-fender-d-ag", "cheetah-r-fender-d", 5, ["CHEEL"], ""], +["cheetah-r-fender-e-ag", "cheetah-r-fender-e", 5, ["CHEEL"], ""], +["cheetah-roof-a-ag", "cheetah-roof-a", 5, ["CHEEL"], ""], +["cheetah-roof-b-ag", "cheetah-roof-b", 5, ["CHEEL"], ""], +["cheetah-roof-c-ag", "cheetah-roof-c", 5, ["CHEEL", "RAZVL"], ""], +["cheetah-roof-d-ag", "cheetah-roof-d", 5, ["CHEEL", "THCVL3"], ""], +["cheetah-roof-e-ag", "cheetah-roof-e", 5, ["CHEEL"], ""], +["cheel", "cheel", 5, ["CHEEL"], ""], +["cliffs-part", "cliffs-part", 5, ["CLF", "CLFX"], ""], +["cliffs-obs", "cliffs-obs", 5, ["CLF", "CLFX"], ""], +["cliffs-effects", "cliffs-effects", 5, ["CLF", "CLFX"], ""], +["cliffs-ocean", "cliffs-ocean", 5, ["CLF", "CLFX"], ""], +["common-part", "common-part", 5, ["CLF", "CLFX", "IBX", "ICEBERGW", "ICEPASSW", "ICETOURW", "IPX", "PEAKW", "PKX", "SNO", "SNOX", "SNW", "SNWX"], ""], +["common-obs", "common-obs", 5, ["CLF", "CLFX", "IBX", "ICEBERGW", "ICEPASSW", "ICETOURW", "IPX", "PEAKW", "PKX", "SNO", "SNOX", "SNW", "SNWX"], ""], +["tpage-288", "tpage-288", 5, ["CLF"], ""], +["tpage-598", "tpage-598", 5, ["CLF"], ""], +["tpage-430", "tpage-430", 5, ["CLF"], ""], +["tpage-768", "tpage-768", 5, ["CLF"], ""], +["tpage-710", "tpage-710", 5, ["CLF"], ""], +["cliffs-fence-debris-ag", "cliffs-fence-debris", 5, ["CLF", "CLFX", "SNO", "SNOX", "SNW", "SNWX"], ""], +["cliffs-wood-fence-a-ag", "cliffs-wood-fence-a", 5, ["CLF", "CLFX", "SNO", "SNOX"], ""], +["cliffs-wood-fence-c-ag", "cliffs-wood-fence-c", 5, ["CLF", "CLFX", "SNO", "SNOX", "SNW", "SNWX"], ""], +["cliffs-wood-fence-b-ag", "cliffs-wood-fence-b", 5, ["CLF", "CLFX", "SNO", "SNOX", "SNW", "SNWX"], ""], +["cliffs-vis", "cliffs-vis", 5, ["CLF"], ""], +["tpage-1585", "tpage-1585", 5, ["CLFX"], ""], +["tpage-1887", "tpage-1887", 5, ["CLFX"], ""], +["tpage-1587", "tpage-1587", 5, ["CLFX"], ""], +["cliffsx-vis", "cliffsx-vis", 5, ["CLFX"], ""], +["tpage-1346", "tpage-1346", 5, ["CLIFCTF"], ""], +["tpage-1347", "tpage-1347", 5, ["CLIFCTF"], ""], +["clifctf", "clifctf", 5, ["CLIFCTF"], ""], +["tpage-1604", "tpage-1604", 5, ["CLIFFART"], ""], +["cliffart", "cliffart", 5, ["CLIFFART"], ""], +["tpage-1671", "tpage-1671", 5, ["CLIFFSS"], ""], +["tpage-1848", "tpage-1848", 5, ["CLIFFSS"], ""], +["prize-crate-ag", "prize-crate", 5, ["CLIFFSS"], ""], +["eco-light-ag", "eco-light", 5, ["CLIFFSS", "DESARENS", "EIGHT", "KRASS"], ""], +["cliffss", "cliffss", 5, ["CLIFFSS"], ""], +["ragdoll", "ragdoll", 5, ["CLIFHUNT", "DESHUNT", "DESHUNT2", "DESRAPT"], ""], +["raptor", "raptor", 5, ["CLIFHUNT", "DESHUNT", "DESHUNT2", "DESRAPT"], ""], +["tpage-1315", "tpage-1315", 5, ["CLIFHUNT"], ""], +["metal-raptor-ag", "metal-raptor", 5, ["CLIFHUNT", "DESHUNT", "DESHUNT2", "DESRAPT"], ""], +["clifhunt", "clifhunt", 5, ["CLIFHUNT"], ""], +["net-training", "net-training", 5, ["CLIFTRN", "ICETRN", "JUNGTRN", "KRASTRN", "SNOWTRN2"], ""], +["net-training-obs", "net-training-obs", 5, ["CLIFTRN", "ICETRN", "JUNGTRN", "KRASTRN", "SNOWTRN2"], ""], +["wcar-drone", "wcar-drone", 5, ["CLIFTRN", "DRONE", "ICETRN", "JUNGTRN", "KRASTRN", "SNOWTRN2"], ""], +["tpage-3909", "tpage-3909", 5, ["CLIFTRN"], ""], +["cliftrn", "cliftrn", 5, ["CLIFTRN"], ""], +["tpage-2824", "tpage-2824", 5, ["CNSPFOOT"], ""], +["tpage-2825", "tpage-2825", 5, ["CNSPFOOT"], ""], +["cnspfoot", "cnspfoot", 5, ["CNSPFOOT"], ""], +["tpage-2847", "tpage-2847", 5, ["CNSPTBOX"], ""], +["tpage-2848", "tpage-2848", 5, ["CNSPTBOX"], ""], +["cnsptbox", "cnsptbox", 5, ["CNSPTBOX"], ""], +["cnsptt", "cnsptt", 5, ["CNSPTT"], ""], +["coliseum-part", "coliseum-part", 5, ["COL", "COLX"], ""], +["coliseum-obs", "coliseum-obs", 5, ["COL", "COLX"], ""], +["coliseum-obs-atlas", "coliseum-obs-atlas", 5, ["COL", "COLX"], ""], +["coliseum-obs-2", "coliseum-obs-2", 5, ["COL", "COLX"], ""], +["coliseum-obs-female-statue", "coliseum-obs-female-statue", 5, ["COL", "COLX"], ""], +["tpage-289", "tpage-289", 5, ["COL"], ""], +["tpage-290", "tpage-290", 5, ["COL"], ""], +["tpage-337", "tpage-337", 5, ["COL"], ""], +["coli-atlas-break-ag", "coli-atlas-break", 5, ["COL", "COLX"], ""], +["coli-atlas-base-ag", "coli-atlas-base", 5, ["COL", "COLX"], ""], +["coli-statue-base-s-ag", "coli-statue-base-s", 5, ["COL", "COLX"], ""], +["coli-statue-base-c-ag", "coli-statue-base-c", 5, ["COL", "COLX"], ""], +["coli-bridge-a-ag", "coli-bridge-a", 5, ["COL"], ""], +["coli-atlas-globe-ag", "coli-atlas-globe", 5, ["COL", "COLISEUS"], ""], +["coli-center-arch-ag", "coli-center-arch", 5, ["COL", "COLX"], ""], +["coli-stands-rail-a-ag", "coli-stands-rail-a", 5, ["COL", "COLX"], ""], +["coli-pillar-break-ag", "coli-pillar-break", 5, ["COL", "COLX"], ""], +["coli-stands-rail-c-ag", "coli-stands-rail-c", 5, ["COL"], ""], +["coli-stands-rail-b-ag", "coli-stands-rail-b", 5, ["COL", "COLX"], ""], +["coli-bowl-a-ag", "coli-bowl-a", 5, ["COL"], ""], +["coli-bowl-hanger-ag", "coli-bowl-hanger", 5, ["COL"], ""], +["coli-center-arch-debris-ag", "coli-center-arch-debris", 5, ["COL", "COLX"], ""], +["coli-gate-a-straight-ag", "coli-gate-a-straight", 5, ["COL", "COLX"], ""], +["coli-ball-collision-ag", "coli-ball-collision", 5, ["COL", "COLX"], ""], +["coli-gate-b-curved-ag", "coli-gate-b-curved", 5, ["COL", "COLX"], ""], +["coli-atlas-pillar-ag", "coli-atlas-pillar", 5, ["COL"], ""], +["coli-pillar-debris-ag", "coli-pillar-debris", 5, ["COL", "COLX"], ""], +["coli-stands-rail-debris-ag", "coli-stands-rail-debris", 5, ["COL"], ""], +["coli-bowl-hanger-debris-ag", "coli-bowl-hanger-debris", 5, ["COL"], ""], +["coli-bridge-a-debris-ag", "coli-bridge-a-debris", 5, ["COL", "COLX"], ""], +["coli-gate-debris-ag", "coli-gate-debris", 5, ["COL", "COLX"], ""], +["coli-bowl-a-debris-ag", "coli-bowl-a-debris", 5, ["COL"], ""], +["coliseum-vis", "coliseum-vis", 5, ["COL"], ""], +["tpage-1605", "tpage-1605", 5, ["COLART"], ""], +["colart", "colart", 5, ["COLART"], ""], +["net-collectable-game", "net-collectable-game", 5, ["COLICLCT", "COLIREV", "DESCLCT", "DESREV", "KCRSCLCT"], ""], +["tpage-1326", "tpage-1326", 5, ["COLICLCT"], ""], +["collectoid-debris-ag", "collectoid-debris", 5, ["COLICLCT", "COLIREV", "DESCLCT", "DESREV", "KCRSCLCT"], ""], +["collectoid-ag", "collectoid", 5, ["COLICLCT", "COLIREV", "DESCLCT", "DESREV", "KCRSCLCT"], ""], +["coliclct", "coliclct", 5, ["COLICLCT"], ""], +["tpage-1348", "tpage-1348", 5, ["COLICTF"], ""], +["tpage-1349", "tpage-1349", 5, ["COLICTF"], ""], +["colictf", "colictf", 5, ["COLICTF"], ""], +["tpage-1345", "tpage-1345", 5, ["COLIREV"], ""], +["colirev", "colirev", 5, ["COLIREV"], ""], +["tpage-3874", "tpage-3874", 5, ["COLISEUS"], ""], +["tpage-1672", "tpage-1672", 5, ["COLISEUS"], ""], +["tpage-1850", "tpage-1850", 5, ["COLISEUS"], ""], +["coli-statue-female-s-break-ag", "coli-statue-female-s-break", 5, ["COLISEUS"], ""], +["coli-statue-female-c-break-ag", "coli-statue-female-c-break", 5, ["COLISEUS"], ""], +["coli-statue-chain-ag", "coli-statue-chain", 5, ["COLISEUS"], ""], +["coli-statue-female-ag", "coli-statue-female", 5, ["COLISEUS"], ""], +["coli-atlas-statue-ag", "coli-atlas-statue", 5, ["COLISEUS"], ""], +["coliseus", "coliseus", 5, ["COLISEUS"], ""], +["tpage-1673", "tpage-1673", 5, ["COLX"], ""], +["tpage-1676", "tpage-1676", 5, ["COLX"], ""], +["coliseux-vis", "coliseux-vis", 5, ["COLX"], ""], +["cougar-chassis-ag", "cougar-chassis", 5, ["COUGL", "SIGVL2", "THBVL"], ""], +["cougar-door-a-ag", "cougar-door-a", 5, ["COUGL"], ""], +["cougar-door-b-ag", "cougar-door-b", 5, ["COUGL"], ""], +["cougar-door-c-ag", "cougar-door-c", 5, ["COUGL", "THBVL"], ""], +["cougar-door-d-ag", "cougar-door-d", 5, ["COUGL"], ""], +["cougar-door-e-ag", "cougar-door-e", 5, ["COUGL", "SIGVL2"], ""], +["cougar-f-bumper-a-ag", "cougar-f-bumper-a", 5, ["COUGL", "THBVL"], ""], +["cougar-f-bumper-b-ag", "cougar-f-bumper-b", 5, ["COUGL"], ""], +["cougar-f-bumper-c-ag", "cougar-f-bumper-c", 5, ["COUGL"], ""], +["cougar-f-bumper-d-ag", "cougar-f-bumper-d", 5, ["COUGL"], ""], +["cougar-f-bumper-e-ag", "cougar-f-bumper-e", 5, ["COUGL", "SIGVL2"], ""], +["cougar-f-fender-a-ag", "cougar-f-fender-a", 5, ["COUGL"], ""], +["cougar-f-fender-b-ag", "cougar-f-fender-b", 5, ["COUGL"], ""], +["cougar-f-fender-c-ag", "cougar-f-fender-c", 5, ["COUGL", "THBVL"], ""], +["cougar-f-fender-d-ag", "cougar-f-fender-d", 5, ["COUGL", "SIGVL2"], ""], +["cougar-f-fender-e-ag", "cougar-f-fender-e", 5, ["COUGL"], ""], +["cougar-hood-a-ag", "cougar-hood-a", 5, ["COUGL"], ""], +["cougar-hood-b-ag", "cougar-hood-b", 5, ["COUGL"], ""], +["cougar-hood-c-ag", "cougar-hood-c", 5, ["COUGL", "THBVL"], ""], +["cougar-hood-d-ag", "cougar-hood-d", 5, ["COUGL", "SIGVL2"], ""], +["cougar-hood-e-ag", "cougar-hood-e", 5, ["COUGL"], ""], +["cougar-r-fender-a-ag", "cougar-r-fender-a", 5, ["COUGL"], ""], +["cougar-r-fender-b-ag", "cougar-r-fender-b", 5, ["COUGL", "THBVL"], ""], +["cougar-r-fender-c-ag", "cougar-r-fender-c", 5, ["COUGL"], ""], +["cougar-r-fender-d-ag", "cougar-r-fender-d", 5, ["COUGL", "SIGVL2"], ""], +["cougar-r-fender-e-ag", "cougar-r-fender-e", 5, ["COUGL"], ""], +["cougl", "cougl", 5, ["COUGL"], ""], +["0credits-tx", "0credits-tx", 5, ["CREDITS"], ""], +["1credits-tx", "1credits-tx", 5, ["CREDITS"], ""], +["2credits-tx", "2credits-tx", 5, ["CREDITS"], ""], +["3credits-tx", "3credits-tx", 5, ["CREDITS"], ""], +["4credits-tx", "4credits-tx", 5, ["CREDITS"], ""], +["5credits-tx", "5credits-tx", 5, ["CREDITS"], ""], +["6credits-tx", "6credits-tx", 5, ["CREDITS"], ""], +["7credits-tx", "7credits-tx", 5, ["CREDITS"], ""], +["8credits-tx", "8credits-tx", 5, ["CREDITS"], ""], +["9credits-tx", "9credits-tx", 5, ["CREDITS"], ""], +["10credits-tx", "10credits-tx", 5, ["CREDITS"], ""], +["credits-h", "credits-h", 5, ["CREDITS"], ""], +["credits-cloth", "credits-cloth", 5, ["CREDITS"], ""], +["credits-obs", "credits-obs", 5, ["CREDITS"], ""], +["credits", "credits", 5, ["CREDITS"], ""], +["tpage-2444", "tpage-2444", 5, ["CSX"], ""], +["tpage-3012", "tpage-3012", 5, ["CSX"], ""], +["cansparx-vis", "cansparx-vis", 5, ["CSX"], ""], +["tpage-2674", "tpage-2674", 5, ["CSY"], ""], +["canspary-vis", "canspary-vis", 5, ["CSY"], ""], +["tpage-2258", "tpage-2258", 5, ["CYA"], ""], +["tpage-2259", "tpage-2259", 5, ["CYA"], ""], +["tpage-3870", "tpage-3870", 5, ["CYA"], ""], +["tpage-3008", "tpage-3008", 5, ["CYA"], ""], +["canyona-vis", "canyona-vis", 5, ["CYA"], ""], +["tpage-2256", "tpage-2256", 5, ["CYB"], ""], +["tpage-2257", "tpage-2257", 5, ["CYB"], ""], +["tpage-3887", "tpage-3887", 5, ["CYB"], ""], +["canyonb-vis", "canyonb-vis", 5, ["CYB"], ""], +["tpage-2264", "tpage-2264", 5, ["CYC"], ""], +["tpage-2265", "tpage-2265", 5, ["CYC"], ""], +["tpage-3010", "tpage-3010", 5, ["CYC"], ""], +["canyonc-vis", "canyonc-vis", 5, ["CYC"], ""], +["tpage-2260", "tpage-2260", 5, ["CYD"], ""], +["tpage-2261", "tpage-2261", 5, ["CYD"], ""], +["canyond-vis", "canyond-vis", 5, ["CYD"], ""], +["tpage-2262", "tpage-2262", 5, ["CYE"], ""], +["tpage-2263", "tpage-2263", 5, ["CYE"], ""], +["tpage-3009", "tpage-3009", 5, ["CYE"], ""], +["canyone-vis", "canyone-vis", 5, ["CYE"], ""], +["tpage-2442", "tpage-2442", 5, ["CYX"], ""], +["tpage-3013", "tpage-3013", 5, ["CYX"], ""], +["canyonx-vis", "canyonx-vis", 5, ["CYX"], ""], +["tpage-2630", "tpage-2630", 5, ["CYY"], ""], +["tpage-3011", "tpage-3011", 5, ["CYY"], ""], +["canyony-vis", "canyony-vis", 5, ["CYY"], ""], +["tpage-3959", "tpage-3959", 5, ["DAXCRED"], ""], +["dax-hr-cred-ag", "dax-hr-cred", 5, ["DAXCRED"], ""], +["daxcred", "daxcred", 5, ["DAXCRED"], ""], +["tpage-3692", "tpage-3692", 5, ["DAXLEV"], ""], +["dax-driver-ag", "dax-driver", 5, ["DAXLEV"], ""], +["daxlev", "daxlev", 5, ["DAXLEV"], ""], +["daxtermobile-chassis-ag", "daxtermobile-chassis", 5, ["DAXTL"], ""], +["daxtermobile-f-bumper-a-ag", "daxtermobile-f-bumper-a", 5, ["DAXTL"], ""], +["daxtermobile-hood-a-ag", "daxtermobile-hood-a", 5, ["DAXTL"], ""], +["daxtermobile-r-fender-a-ag", "daxtermobile-r-fender-a", 5, ["DAXTL"], ""], +["daxtermobile-roof-a-ag", "daxtermobile-roof-a", 5, ["DAXTL"], ""], +["daxtermobile-trunk-a-ag", "daxtermobile-trunk-a", 5, ["DAXTL"], ""], +["daxtl", "daxtl", 5, ["DAXTL"], ""], +["tpage-1793", "tpage-1793", 5, ["DESACTF"], ""], +["tpage-1794", "tpage-1794", 5, ["DESACTF"], ""], +["desactf", "desactf", 5, ["DESACTF"], ""], +["tpage-1680", "tpage-1680", 5, ["DESARENS"], ""], +["tpage-1858", "tpage-1858", 5, ["DESARENS"], ""], +["desarens", "desarens", 5, ["DESARENS"], ""], +["tpage-1563", "tpage-1563", 5, ["DESART"], ""], +["com-rod-of-god-ag", "com-rod-of-god", 5, ["DESART"], ""], +["desart", "desart", 5, ["DESART"], ""], +["tpage-910", "tpage-910", 5, ["DESCLCT"], ""], +["tpage-923", "tpage-923", 5, ["DESCLCT"], ""], +["crate-ag", "crate", 5, ["DESCLCT", "EIGHT", "KRASW", "SPB"], ""], +["desclct", "desclct", 5, ["DESCLCT"], ""], +["tpage-950", "tpage-950", 5, ["DESHUNT"], ""], +["deshunt", "deshunt", 5, ["DESHUNT"], ""], +["tpage-1314", "tpage-1314", 5, ["DESHUNT2"], ""], +["deshunt2", "deshunt2", 5, ["DESHUNT2"], ""], +["tpage-2750", "tpage-2750", 5, ["DESISLES"], ""], +["desisles", "desisles", 5, ["DESISLES"], ""], +["tpage-3718", "tpage-3718", 5, ["DESRAPT"], ""], +["desrapt", "desrapt", 5, ["DESRAPT"], ""], +["tpage-1027", "tpage-1027", 5, ["DESREV"], ""], +["desrev", "desrev", 5, ["DESREV"], ""], +["dethrace", "dethrace", 5, ["DETHRACE"], ""], +["tpage-2756", "tpage-2756", 5, ["DISLEART"], ""], +["disleart", "disleart", 5, ["DISLEART"], ""], +["tpage-2757", "tpage-2757", 5, ["DISLECTF"], ""], +["tpage-2758", "tpage-2758", 5, ["DISLECTF"], ""], +["dislectf", "dislectf", 5, ["DISLECTF"], ""], +["tpage-2582", "tpage-2582", 5, ["DKA"], ""], +["tpage-2583", "tpage-2583", 5, ["DKA"], ""], +["wind-rotor-ag", "wind-rotor", 5, ["DKA", "DKE", "DKKY", "DRA", "DRDY", "DROMEX", "DRX"], ""], +["docksa-vis", "docksa-vis", 5, ["DKA"], ""], +["tpage-2586", "tpage-2586", 5, ["DKB"], ""], +["tpage-2587", "tpage-2587", 5, ["DKB"], ""], +["train-ag", "train", 5, ["DKB", "DKKY", "DKX", "DRDX"], ""], +["docksb-vis", "docksb-vis", 5, ["DKB"], ""], +["tpage-2588", "tpage-2588", 5, ["DKC"], ""], +["tpage-3054", "tpage-3054", 5, ["DKC"], ""], +["docksc-vis", "docksc-vis", 5, ["DKC"], ""], +["tpage-2584", "tpage-2584", 5, ["DKD"], ""], +["tpage-2585", "tpage-2585", 5, ["DKD"], ""], +["tpage-1938", "tpage-1938", 5, ["DKD"], ""], +["docksd-vis", "docksd-vis", 5, ["DKD"], ""], +["tpage-2580", "tpage-2580", 5, ["DKE"], ""], +["tpage-2581", "tpage-2581", 5, ["DKE"], ""], +["dockse-vis", "dockse-vis", 5, ["DKE"], ""], +["tpage-2851", "tpage-2851", 5, ["DKKRFOOT"], ""], +["tpage-2852", "tpage-2852", 5, ["DKKRFOOT"], ""], +["dkkrfoot", "dkkrfoot", 5, ["DKKRFOOT"], ""], +["tpage-2828", "tpage-2828", 5, ["DKKRTBOX"], ""], +["tpage-2829", "tpage-2829", 5, ["DKKRTBOX"], ""], +["dkkrtbox", "dkkrtbox", 5, ["DKKRTBOX"], ""], +["dkkrtt", "dkkrtt", 5, ["DKKRTT"], ""], +["kras-effects", "kras-effects", 5, ["DKKX", "DOCKKRAW", "KRASW", "KRATOURW", "KRX"], ""], +["train-obs", "train-obs", 5, ["DKKX", "DKX", "DOCKKRAW", "DOCKSW", "DRDX", "DROMDOCW", "HAVENW", "HAVSEWW", "HSX", "HVX"], ""], +["docks-effects", "docks-effects", 5, ["DKKX", "DKX", "DOCKKRAW", "DOCKSW", "DRDX", "DROMDOCW", "KRATOURW"], ""], +["docks-part", "docks-part", 5, ["DKKX", "DKX", "DOCKKRAW", "DOCKSW", "DRDX", "DROMDOCW", "KRATOURW"], ""], +["docks-obs", "docks-obs", 5, ["DKKX", "DKX", "DOCKKRAW", "DOCKSW", "DRDX", "DROMEW", "DROMEX", "DRX", "KRATOURW"], ""], +["docks-ocean", "docks-ocean", 5, ["DKKX", "DKX", "DOCKKRAW", "DOCKSW", "DRDX", "DROMDOCW", "KRATOURW"], ""], +["kras-part", "kras-part", 5, ["DKKX", "DOCKKRAW", "KRASW", "KRATOURW", "KRX"], ""], +["kras-obs", "kras-obs", 5, ["DKKX", "DOCKKRAW", "KRASW", "KRATOURW", "KRX"], ""], +["kras-ocean", "kras-ocean", 5, ["DKKX", "DOCKKRAW", "KRASW", "KRATOURW", "KRX"], ""], +["construction-obs", "construction-obs", 5, ["DKKX", "DOCKKRAW", "HAVENW", "HAVJUNGW", "HAVSEWW", "HAVTOURW", "HJX", "HSX", "HVX", "KCR", "KCRX", "KRASW", "KRX"], ""], +["tpage-3052", "tpage-3052", 5, ["DKKX"], ""], +["tpage-3053", "tpage-3053", 5, ["DKKX"], ""], +["tpage-3101", "tpage-3101", 5, ["DKKX"], ""], +["kras-rusty-sign-ag", "kras-rusty-sign", 5, ["DKKX", "KRA", "KRX"], ""], +["kras-fishtank-lo-ag", "kras-fishtank-lo", 5, ["DKKX", "KRA", "KRX"], ""], +["kras-fireworks-ship-a-ag", "kras-fireworks-ship-a", 5, ["DKKX", "DOCKKRAW", "KRA", "KRASW", "KRATOURW", "KRC", "KRX", "KRY"], ""], +["dockkrax-vis", "dockkrax-vis", 5, ["DKKX"], ""], +["tpage-3049", "tpage-3049", 5, ["DKKY"], ""], +["tpage-3051", "tpage-3051", 5, ["DKKY"], ""], +["dockkray-vis", "dockkray-vis", 5, ["DKKY"], ""], +["tpage-2677", "tpage-2677", 5, ["DKX"], ""], +["tpage-2678", "tpage-2678", 5, ["DKX"], ""], +["docksx-vis", "docksx-vis", 5, ["DKX"], ""], +["tpage-2568", "tpage-2568", 5, ["DOCKFOOT"], ""], +["tpage-2569", "tpage-2569", 5, ["DOCKFOOT"], ""], +["dockfoot", "dockfoot", 5, ["DOCKFOOT"], ""], +["tpage-2670", "tpage-2670", 5, ["DOCKKRAS"], ""], +["tpage-3878", "tpage-3878", 5, ["DOCKKRAS"], ""], +["tpage-2671", "tpage-2671", 5, ["DOCKKRAS"], ""], +["tpage-2675", "tpage-2675", 5, ["DOCKKRAS"], ""], +["dockkras", "dockkras", 5, ["DOCKKRAS"], ""], +["tpage-1545", "tpage-1545", 5, ["DOCKKRAW"], ""], +["dockkraw", "dockkraw", 5, ["DOCKKRAW"], ""], +["tpage-2551", "tpage-2551", 5, ["DOCKSS"], ""], +["tpage-2646", "tpage-2646", 5, ["DOCKSS"], ""], +["tpage-2596", "tpage-2596", 5, ["DOCKSS"], ""], +["dockss", "dockss", 5, ["DOCKSS"], ""], +["dockstt", "dockstt", 5, ["DOCKSTT"], ""], +["docksw", "docksw", 5, ["DOCKSW"], ""], +["tpage-2570", "tpage-2570", 5, ["DOCKTBOX"], ""], +["tpage-2610", "tpage-2610", 5, ["DOCKTBOX"], ""], +["docktbox", "docktbox", 5, ["DOCKTBOX"], ""], +["tpage-3017", "tpage-3017", 5, ["DRA"], ""], +["tpage-3018", "tpage-3018", 5, ["DRA"], ""], +["dromea-vis", "dromea-vis", 5, ["DRA"], ""], +["tpage-3021", "tpage-3021", 5, ["DRB"], ""], +["tpage-3176", "tpage-3176", 5, ["DRB"], ""], +["drome-tunnel-drum-ag", "drome-tunnel-drum", 5, ["DRB", "DRDY", "DROMEX", "DRX"], ""], +["dromeb-vis", "dromeb-vis", 5, ["DRB"], ""], +["tpage-3020", "tpage-3020", 5, ["DRC"], ""], +["tpage-3019", "tpage-3019", 5, ["DRC"], ""], +["dromec-vis", "dromec-vis", 5, ["DRC"], ""], +["tpage-3016", "tpage-3016", 5, ["DRD"], ""], +["dromed-vis", "dromed-vis", 5, ["DRD"], ""], +["tpage-3807", "tpage-3807", 5, ["DRDKFOOT"], ""], +["tpage-3808", "tpage-3808", 5, ["DRDKFOOT"], ""], +["drdkfoot", "drdkfoot", 5, ["DRDKFOOT"], ""], +["tpage-3454", "tpage-3454", 5, ["DRDKTBOX"], ""], +["tpage-3455", "tpage-3455", 5, ["DRDKTBOX"], ""], +["drdktbox", "drdktbox", 5, ["DRDKTBOX"], ""], +["drdktt", "drdktt", 5, ["DRDKTT"], ""], +["drome-effects", "drome-effects", 5, ["DRDX", "DROMDOCW", "DROMEW", "DROMEX", "DRX", "KRATOURW"], ""], +["drome-part", "drome-part", 5, ["DRDX", "DROMDOCW", "DROMEW", "DROMEX", "DRX", "KRATOURW"], ""], +["drome-obs", "drome-obs", 5, ["DRDX", "DROMDOCW", "DROMEW", "DROMEX", "DRX", "KRATOURW"], ""], +["drome-ocean", "drome-ocean", 5, ["DRDX", "DROMDOCW", "DROMEW", "DROMEX", "DRX", "KRATOURW"], ""], +["tpage-3069", "tpage-3069", 5, ["DRDX"], ""], +["tpage-3070", "tpage-3070", 5, ["DRDX"], ""], +["dromdocx-vis", "dromdocx-vis", 5, ["DRDX"], ""], +["tpage-3072", "tpage-3072", 5, ["DRDY"], ""], +["tpage-3073", "tpage-3073", 5, ["DRDY"], ""], +["dromdocy-vis", "dromdocy-vis", 5, ["DRDY"], ""], +["tpage-2794", "tpage-2794", 5, ["DROMDOCS"], ""], +["tpage-2795", "tpage-2795", 5, ["DROMDOCS"], ""], +["tpage-2689", "tpage-2689", 5, ["DROMDOCS"], ""], +["dromdocs", "dromdocs", 5, ["DROMDOCS"], ""], +["tpage-2872", "tpage-2872", 5, ["DROMDOCW"], ""], +["dromdocw", "dromdocw", 5, ["DROMDOCW"], ""], +["tpage-2871", "tpage-2871", 5, ["DROMES"], ""], +["tpage-2961", "tpage-2961", 5, ["DROMES"], ""], +["tpage-2688", "tpage-2688", 5, ["DROMES"], ""], +["dromes", "dromes", 5, ["DROMES"], ""], +["dromett", "dromett", 5, ["DROMETT"], ""], +["dromew", "dromew", 5, ["DROMEW"], ""], +["tpage-3024", "tpage-3024", 5, ["DROMEX"], ""], +["tpage-3025", "tpage-3025", 5, ["DROMEX"], ""], +["dromex", "dromex", 5, ["DROMEX"], ""], +["tpage-3809", "tpage-3809", 5, ["DROMFOOT"], ""], +["tpage-3810", "tpage-3810", 5, ["DROMFOOT"], ""], +["dromfoot", "dromfoot", 5, ["DROMFOOT"], ""], +["tpage-3441", "tpage-3441", 5, ["DROMTBOX"], ""], +["tpage-3442", "tpage-3442", 5, ["DROMTBOX"], ""], +["dromtbox", "dromtbox", 5, ["DROMTBOX"], ""], +["tpage-2331", "tpage-2331", 5, ["DRONE"], ""], +["deathrace-drone-ag", "deathrace-drone", 5, ["DRONE", "KRASTRN", "SNOWTRN2"], ""], +["drone", "drone", 5, ["DRONE"], ""], +["tpage-3030", "tpage-3030", 5, ["DRX"], ""], +["tpage-3031", "tpage-3031", 5, ["DRX"], ""], +["dromex-vis", "dromex-vis", 5, ["DRX"], ""], +["tpage-3026", "tpage-3026", 5, ["DRY"], ""], +["tpage-3027", "tpage-3027", 5, ["DRY"], ""], +["dromey-vis", "dromey-vis", 5, ["DRY"], ""], +["desisle-ocean", "desisle-ocean", 5, ["DSI", "DSX"], ""], +["desisle-effects", "desisle-effects", 5, ["DSI", "DSX"], ""], +["desisle-part", "desisle-part", 5, ["DSI", "DSX"], ""], +["tpage-2634", "tpage-2634", 5, ["DSI"], ""], +["tpage-2635", "tpage-2635", 5, ["DSI"], ""], +["tpage-3971", "tpage-3971", 5, ["DSI"], ""], +["tpage-2636", "tpage-2636", 5, ["DSI"], ""], +["desisle-vis", "desisle-vis", 5, ["DSI"], ""], +["des-cactus", "des-cactus", 5, ["DSR", "DSRX"], ""], +["desert-effects", "desert-effects", 5, ["DSR", "DSRX"], ""], +["desert-ocean", "desert-ocean", 5, ["DSR", "DSRX"], ""], +["desert-part", "desert-part", 5, ["DSR", "DSRX"], ""], +["desarena-part", "desarena-part", 5, ["DSR", "DSRX"], ""], +["desarena-obs", "desarena-obs", 5, ["DSR", "DSRX"], ""], +["desarena-effects", "desarena-effects", 5, ["DSR", "DSRX"], ""], +["tpage-278", "tpage-278", 5, ["DSR"], ""], +["tpage-280", "tpage-280", 5, ["DSR"], ""], +["tpage-279", "tpage-279", 5, ["DSR"], ""], +["tpage-277", "tpage-277", 5, ["DSR"], ""], +["tpage-396", "tpage-396", 5, ["DSR"], ""], +["des-cactus-b-ag", "des-cactus-b", 5, ["DSR", "DSRX"], ""], +["des-cactus-a-ag", "des-cactus-a", 5, ["DSR", "DSRX"], ""], +["palm-tree-a-ag", "palm-tree-a", 5, ["DSR", "DSRX"], ""], +["palm-tree-c-ag", "palm-tree-c", 5, ["DSR", "DSRX"], ""], +["palm-tree-b-ag", "palm-tree-b", 5, ["DSR", "DSRX"], ""], +["palm-tree-debris-ag", "palm-tree-debris", 5, ["DSR", "DSRX"], ""], +["desarena-vis", "desarena-vis", 5, ["DSR"], ""], +["tpage-1654", "tpage-1654", 5, ["DSRX"], ""], +["tpage-1656", "tpage-1656", 5, ["DSRX"], ""], +["tpage-1655", "tpage-1655", 5, ["DSRX"], ""], +["desarenx-vis", "desarenx-vis", 5, ["DSRX"], ""], +["tpage-2742", "tpage-2742", 5, ["DSX"], ""], +["desislex-vis", "desislex-vis", 5, ["DSX"], ""], +["tpage-96", "tpage-96", 5, ["EIGHT"], ""], +["tpage-260", "tpage-260", 5, ["EIGHT"], ""], +["tpage-1195", "tpage-1195", 5, ["EIGHT"], ""], +["eco-dark-ag", "eco-dark", 5, ["EIGHT"], ""], +["eight", "eight", 5, ["EIGHT"], ""], +["tpage-105", "tpage-105", 5, ["EIGHTB"], ""], +["eightb", "eightb", 5, ["EIGHTB"], ""], +["falcon-door-a-ag", "falcon-door-a", 5, ["FALCL", "JAKVL"], ""], +["falcon-door-b-ag", "falcon-door-b", 5, ["FALCL", "GTBVL", "THCVL2"], ""], +["falcon-door-c-ag", "falcon-door-c", 5, ["FALCL"], ""], +["falcon-door-d-ag", "falcon-door-d", 5, ["FALCL"], ""], +["falcon-hood-a-ag", "falcon-hood-a", 5, ["FALCL", "JAKVL"], ""], +["falcon-hood-b-ag", "falcon-hood-b", 5, ["FALCL", "GTBVL"], ""], +["falcon-hood-c-ag", "falcon-hood-c", 5, ["FALCL", "THCVL2"], ""], +["falcon-hood-d-ag", "falcon-hood-d", 5, ["FALCL"], ""], +["falcon-r-fender-a-ag", "falcon-r-fender-a", 5, ["FALCL", "GTBVL", "JAKVL"], ""], +["falcon-r-fender-b-ag", "falcon-r-fender-b", 5, ["FALCL"], ""], +["falcon-r-fender-c-ag", "falcon-r-fender-c", 5, ["FALCL"], ""], +["falcon-r-fender-d-ag", "falcon-r-fender-d", 5, ["FALCL"], ""], +["falcon-r-fender-e-ag", "falcon-r-fender-e", 5, ["FALCL", "THCVL2"], ""], +["falcon-roof-a-ag", "falcon-roof-a", 5, ["FALCL", "GTBVL", "JAKVL"], ""], +["falcon-roof-b-ag", "falcon-roof-b", 5, ["FALCL"], ""], +["falcon-roof-c-ag", "falcon-roof-c", 5, ["FALCL", "THCVL2"], ""], +["falcon-roof-d-ag", "falcon-roof-d", 5, ["FALCL"], ""], +["falcon-trunk-a-ag", "falcon-trunk-a", 5, ["FALCL", "JAKVL"], ""], +["falcon-trunk-b-ag", "falcon-trunk-b", 5, ["FALCL", "THCVL2"], ""], +["falcon-trunk-c-ag", "falcon-trunk-c", 5, ["FALCL", "GTBVL"], ""], +["falcon-trunk-d-ag", "falcon-trunk-d", 5, ["FALCL"], ""], +["falcl", "falcl", 5, ["FALCL"], ""], +["tpage-3872", "tpage-3872", 5, ["FMVLEV"], ""], +["fmvlev", "fmvlev", 5, ["FMVLEV"], ""], +["fox-chassis-ag", "fox-chassis", 5, ["FOXL"], ""], +["fox-door-a-ag", "fox-door-a", 5, ["FOXL"], ""], +["fox-f-fender-a-ag", "fox-f-fender-a", 5, ["FOXL"], ""], +["fox-hood-a-ag", "fox-hood-a", 5, ["FOXL"], ""], +["fox-r-fender-a-ag", "fox-r-fender-a", 5, ["FOXL"], ""], +["fox-roof-a-ag", "fox-roof-a", 5, ["FOXL"], ""], +["fox-trunk-a-ag", "fox-trunk-a", 5, ["FOXL"], ""], +["fox-wheel-ag", "fox-wheel", 5, ["FOXL"], ""], +["foxl", "foxl", 5, ["FOXL"], ""], +["tpage-1057", "tpage-1057", 5, ["GARAGE"], ""], +["tpage-2180", "tpage-2180", 5, ["GARAGE"], ""], +["tpage-2495", "tpage-2495", 5, ["GARAGE"], ""], +["car-color-tab-ag", "car-color-tab", 5, ["GARAGE", "MENU2"], ""], +["car-vert-tab-ag", "car-vert-tab", 5, ["GARAGE", "MENU2"], ""], +["garage-tool-arm-ag", "garage-tool-arm", 5, ["GARAGE"], ""], +["cust-icon-tab-ag", "cust-icon-tab", 5, ["GARAGE", "MENU2"], ""], +["cust-title-tab-ag", "cust-title-tab", 5, ["GARAGE", "MENU2"], ""], +["garage-sliding-door-ag", "garage-sliding-door", 5, ["GARAGE", "GARAGEB", "MENU2"], ""], +["body-parts-tab-ag", "body-parts-tab", 5, ["GARAGE", "MENU2"], ""], +["garage-car-arm-ag", "garage-car-arm", 5, ["GARAGE", "MENU2"], ""], +["garage-turntable-ag", "garage-turntable", 5, ["GARAGE", "MENU2"], ""], +["garage-door-ag", "garage-door", 5, ["GARAGE", "MENU2"], ""], +["garage", "garage", 5, ["GARAGE"], ""], +["garage-part", "garage-part", 5, ["GARAGEB", "MENU2"], ""], +["tpage-1801", "tpage-1801", 5, ["GARAGEB"], ""], +["tpage-1873", "tpage-1873", 5, ["GARAGEB"], ""], +["tpage-2288", "tpage-2288", 5, ["GARAGEB"], ""], +["tpage-1986", "tpage-1986", 5, ["GARAGEB"], ""], +["garageb", "garageb", 5, ["GARAGEB"], ""], +["gila-chassis-ag", "gila-chassis", 5, ["GILAL", "THAVL3", "THBVL3"], ""], +["gila-f-bumper-a-ag", "gila-f-bumper-a", 5, ["GILAL"], ""], +["gila-f-bumper-b-ag", "gila-f-bumper-b", 5, ["GILAL"], ""], +["gila-f-bumper-c-ag", "gila-f-bumper-c", 5, ["GILAL"], ""], +["gila-f-bumper-d-ag", "gila-f-bumper-d", 5, ["GILAL", "THAVL3"], ""], +["gila-f-bumper-e-ag", "gila-f-bumper-e", 5, ["GILAL", "THBVL3"], ""], +["gila-f-fender-a-ag", "gila-f-fender-a", 5, ["GILAL"], ""], +["gila-f-fender-b-ag", "gila-f-fender-b", 5, ["GILAL"], ""], +["gila-f-fender-c-ag", "gila-f-fender-c", 5, ["GILAL", "THAVL3"], ""], +["gila-f-fender-d-ag", "gila-f-fender-d", 5, ["GILAL", "THBVL3"], ""], +["gila-f-fender-e-ag", "gila-f-fender-e", 5, ["GILAL"], ""], +["gila-r-fender-a-ag", "gila-r-fender-a", 5, ["GILAL"], ""], +["gila-r-fender-b-ag", "gila-r-fender-b", 5, ["GILAL", "THAVL3"], ""], +["gila-r-fender-c-ag", "gila-r-fender-c", 5, ["GILAL"], ""], +["gila-r-fender-d-ag", "gila-r-fender-d", 5, ["GILAL"], ""], +["gila-r-fender-e-ag", "gila-r-fender-e", 5, ["GILAL", "THBVL3"], ""], +["gila-roof-a-ag", "gila-roof-a", 5, ["GILAL"], ""], +["gila-roof-b-ag", "gila-roof-b", 5, ["GILAL", "THBVL3"], ""], +["gila-roof-c-ag", "gila-roof-c", 5, ["GILAL"], ""], +["gila-roof-d-ag", "gila-roof-d", 5, ["GILAL"], ""], +["gila-roof-e-ag", "gila-roof-e", 5, ["GILAL", "THAVL3"], ""], +["gila-trunk-a-ag", "gila-trunk-a", 5, ["GILAL", "THAVL3"], ""], +["gila-trunk-b-ag", "gila-trunk-b", 5, ["GILAL"], ""], +["gila-trunk-c-ag", "gila-trunk-c", 5, ["GILAL"], ""], +["gila-trunk-d-ag", "gila-trunk-d", 5, ["GILAL", "THBVL3"], ""], +["gila-trunk-e-ag", "gila-trunk-e", 5, ["GILAL"], ""], +["gilal", "gilal", 5, ["GILAL"], ""], +["tpage-3958", "tpage-3958", 5, ["GTBCRED"], ""], +["gtb-hr-cred-ag", "gtb-hr-cred", 5, ["GTBCRED"], ""], +["gtbcred", "gtbcred", 5, ["GTBCRED"], ""], +["tpage-3693", "tpage-3693", 5, ["GTBLEV"], ""], +["raceblitz-ag", "raceblitz", 5, ["GTBLEV"], ""], +["gtblev", "gtblev", 5, ["GTBLEV"], ""], +["gtbvl", "gtbvl", 5, ["GTBVL"], ""], +["tpage-1997", "tpage-1997", 5, ["HAVENS"], ""], +["tpage-1687", "tpage-1687", 5, ["HAVENS"], ""], +["tpage-2241", "tpage-2241", 5, ["HAVENS"], ""], +["tpage-1852", "tpage-1852", 5, ["HAVENS"], ""], +["construction-barricade-ag", "construction-barricade", 5, ["HAVENS", "KRASS"], ""], +["construction-cone-ag", "construction-cone", 5, ["HAVENS", "KRASS"], ""], +["haven-gen-light-debris-ag", "haven-gen-light-debris", 5, ["HAVENS", "HAVJUNGS", "HAVTOURS"], ""], +["haven-gen-light-ag", "haven-gen-light", 5, ["HAVENS", "HAVJUNGS", "HAVTOURS"], ""], +["haven-trashcan-ag", "haven-trashcan", 5, ["HAVENS", "HAVSEWS", "HAVTOURS"], ""], +["havens", "havens", 5, ["HAVENS"], ""], +["haven-ocean", "haven-ocean", 5, ["HAVENW", "HVX"], ""], +["haven-effects", "haven-effects", 5, ["HAVENW", "HAVSEWW", "HAVTOURW", "HSX", "HVX"], ""], +["haven-part", "haven-part", 5, ["HAVENW", "HAVJUNGW", "HAVSEWW", "HAVTOURW", "HJX", "HSX", "HVX"], ""], +["haven-obs", "haven-obs", 5, ["HAVENW", "HAVJUNGW", "HAVSEWW", "HAVTOURW", "HJX", "HSX", "HVX"], ""], +["tpage-488", "tpage-488", 5, ["HAVENW"], ""], +["jungle-flaming-arrow-ag", "jungle-flaming-arrow", 5, ["HAVENW", "HAVJUNGW", "HAVTOURW", "HJX", "HVX", "JGX", "JUNGLEW"], ""], +["havenw", "havenw", 5, ["HAVENW"], ""], +["tpage-1792", "tpage-1792", 5, ["HAVJUNGS"], ""], +["tpage-1783", "tpage-1783", 5, ["HAVJUNGS"], ""], +["tpage-2272", "tpage-2272", 5, ["HAVJUNGS"], ""], +["tpage-2374", "tpage-2374", 5, ["HAVJUNGS"], ""], +["tpage-1853", "tpage-1853", 5, ["HAVJUNGS"], ""], +["jungle-stone-snake-head-ag", "jungle-stone-snake-head", 5, ["HAVJUNGS", "HAVTOURS", "JUNGLES"], ""], +["havjungs", "havjungs", 5, ["HAVJUNGS"], ""], +["havjung-part", "havjung-part", 5, ["HAVJUNGW", "HJX"], ""], +["havjung-ocean", "havjung-ocean", 5, ["HAVJUNGW", "HAVTOURW", "HJX"], ""], +["jungle-part", "jungle-part", 5, ["HAVJUNGW", "HAVTOURW", "HJX", "JGX", "JUNGLEW"], ""], +["jungle-obs", "jungle-obs", 5, ["HAVJUNGW", "HAVTOURW", "HJX", "JGX", "JUNGLEW"], ""], +["jungle-effects", "jungle-effects", 5, ["HAVJUNGW", "HAVTOURW", "HJX", "JGX", "JUNGLEW"], ""], +["havjung-effects", "havjung-effects", 5, ["HAVJUNGW", "HAVTOURW", "HJX", "JGX", "JUNGLEW"], ""], +["tpage-1635", "tpage-1635", 5, ["HAVJUNGW"], ""], +["havjungw", "havjungw", 5, ["HAVJUNGW"], ""], +["tpage-1836", "tpage-1836", 5, ["HAVNFOOT"], ""], +["tpage-1871", "tpage-1871", 5, ["HAVNFOOT"], ""], +["havnfoot", "havnfoot", 5, ["HAVNFOOT"], ""], +["tpage-1785", "tpage-1785", 5, ["HAVNTBOX"], ""], +["tpage-2669", "tpage-2669", 5, ["HAVNTBOX"], ""], +["havntbox", "havntbox", 5, ["HAVNTBOX"], ""], +["tpage-2254", "tpage-2254", 5, ["HAVSEWS"], ""], +["tpage-3676", "tpage-3676", 5, ["HAVSEWS"], ""], +["tpage-2255", "tpage-2255", 5, ["HAVSEWS"], ""], +["tpage-2310", "tpage-2310", 5, ["HAVSEWS"], ""], +["havsews", "havsews", 5, ["HAVSEWS"], ""], +["havsew-effects", "havsew-effects", 5, ["HAVSEWW", "HSX"], ""], +["sewer-effects", "sewer-effects", 5, ["HAVSEWW", "HAVTOURW", "HSX", "SEWERW", "SWX"], ""], +["sewer-part", "sewer-part", 5, ["HAVSEWW", "HAVTOURW", "HSX", "SEWERW", "SWX"], ""], +["tpage-2212", "tpage-2212", 5, ["HAVSEWW"], ""], +["havseww", "havseww", 5, ["HAVSEWW"], ""], +["tpage-3811", "tpage-3811", 5, ["HAVTFOOT"], ""], +["tpage-3812", "tpage-3812", 5, ["HAVTFOOT"], ""], +["havtfoot", "havtfoot", 5, ["HAVTFOOT"], ""], +["tpage-2327", "tpage-2327", 5, ["HAVTOURS"], ""], +["tpage-2329", "tpage-2329", 5, ["HAVTOURS"], ""], +["tpage-2328", "tpage-2328", 5, ["HAVTOURS"], ""], +["tpage-2465", "tpage-2465", 5, ["HAVTOURS"], ""], +["tpage-3600", "tpage-3600", 5, ["HAVTOURS"], ""], +["finish-banner-ag", "finish-banner", 5, ["HAVTOURS", "ICETOURS", "ICETRN", "KRATOURS", "SPATOURS"], ""], +["havtours", "havtours", 5, ["HAVTOURS"], ""], +["havtour-part", "havtour-part", 5, ["HAVTOURW"], ""], +["jungle-ocean", "jungle-ocean", 5, ["HAVTOURW", "JGX", "JUNGLEW"], ""], +["tpage-2286", "tpage-2286", 5, ["HAVTOURW"], ""], +["havtourw", "havtourw", 5, ["HAVTOURW"], ""], +["havtt", "havtt", 5, ["HAVTT"], ""], +["tpage-3439", "tpage-3439", 5, ["HAVTTBOX"], ""], +["tpage-3440", "tpage-3440", 5, ["HAVTTBOX"], ""], +["havttbox", "havttbox", 5, ["HAVTTBOX"], ""], +["tpage-1838", "tpage-1838", 5, ["HJNGFOOT"], ""], +["tpage-1870", "tpage-1870", 5, ["HJNGFOOT"], ""], +["hjngfoot", "hjngfoot", 5, ["HJNGFOOT"], ""], +["tpage-1861", "tpage-1861", 5, ["HJX"], ""], +["tpage-1864", "tpage-1864", 5, ["HJX"], ""], +["tpage-1880", "tpage-1880", 5, ["HJX"], ""], +["tpage-1863", "tpage-1863", 5, ["HJX"], ""], +["jungle-debris-jar-a-ag", "jungle-debris-jar-a", 5, ["HJX", "JGA", "JGC", "JGD", "JGE", "JGG", "JGX", "JGY"], ""], +["jungle-debris-jar-b-ag", "jungle-debris-jar-b", 5, ["HJX", "JGA", "JGC", "JGD", "JGE", "JGG", "JGX", "JGY"], ""], +["jungle-debris-ag", "jungle-debris", 5, ["HJX", "JGA", "JGE", "JGX", "JGY"], ""], +["jungle-clay-jar-b-ag", "jungle-clay-jar-b", 5, ["HJX", "JGA", "JGC", "JGD", "JGE", "JGG", "JGX", "JGY"], ""], +["jungle-clay-jar-a-ag", "jungle-clay-jar-a", 5, ["HJX", "JGA", "JGC", "JGD", "JGE", "JGG", "JGX", "JGY"], ""], +["jungle-tree-root-large-b-ag", "jungle-tree-root-large-b", 5, ["HJX", "JGA", "JGE", "JGX", "JGY"], ""], +["jungle-tree-root-large-a-ag", "jungle-tree-root-large-a", 5, ["HJX", "JGA", "JGE", "JGX", "JGY"], ""], +["havjungx-vis", "havjungx-vis", 5, ["HJX"], ""], +["tpage-1867", "tpage-1867", 5, ["HJY"], ""], +["havjungy-vis", "havjungy-vis", 5, ["HJY"], ""], +["tpage-1949", "tpage-1949", 5, ["HSX"], ""], +["tpage-2295", "tpage-2295", 5, ["HSX"], ""], +["havsewx-vis", "havsewx-vis", 5, ["HSX"], ""], +["tpage-1960", "tpage-1960", 5, ["HSY"], ""], +["tpage-3893", "tpage-3893", 5, ["HSY"], ""], +["tpage-1962", "tpage-1962", 5, ["HSY"], ""], +["havsewy-vis", "havsewy-vis", 5, ["HSY"], ""], +["tpage-646", "tpage-646", 5, ["HVA"], ""], +["tpage-963", "tpage-963", 5, ["HVA"], ""], +["havena-vis", "havena-vis", 5, ["HVA"], ""], +["tpage-658", "tpage-658", 5, ["HVB"], ""], +["tpage-968", "tpage-968", 5, ["HVB"], ""], +["havenb-vis", "havenb-vis", 5, ["HVB"], ""], +["tpage-656", "tpage-656", 5, ["HVC"], ""], +["tpage-1058", "tpage-1058", 5, ["HVC"], ""], +["havenc-vis", "havenc-vis", 5, ["HVC"], ""], +["tpage-645", "tpage-645", 5, ["HVD"], ""], +["tpage-965", "tpage-965", 5, ["HVD"], ""], +["tpage-3886", "tpage-3886", 5, ["HVD"], ""], +["tpage-1995", "tpage-1995", 5, ["HVD"], ""], +["havend-vis", "havend-vis", 5, ["HVD"], ""], +["tpage-665", "tpage-665", 5, ["HVE"], ""], +["tpage-1525", "tpage-1525", 5, ["HVE"], ""], +["havene-vis", "havene-vis", 5, ["HVE"], ""], +["tpage-1859", "tpage-1859", 5, ["HVJGTBOX"], ""], +["tpage-2846", "tpage-2846", 5, ["HVJGTBOX"], ""], +["hvjgtbox", "hvjgtbox", 5, ["HVJGTBOX"], ""], +["hvjgtt", "hvjgtt", 5, ["HVJGTT"], ""], +["tpage-2853", "tpage-2853", 5, ["HVSWFOOT"], ""], +["tpage-2854", "tpage-2854", 5, ["HVSWFOOT"], ""], +["hvswfoot", "hvswfoot", 5, ["HVSWFOOT"], ""], +["tpage-2841", "tpage-2841", 5, ["HVSWTBOX"], ""], +["tpage-2842", "tpage-2842", 5, ["HVSWTBOX"], ""], +["hvswtbox", "hvswtbox", 5, ["HVSWTBOX"], ""], +["hvswtt", "hvswtt", 5, ["HVSWTT"], ""], +["hvtrtt", "hvtrtt", 5, ["HVTRTT"], ""], +["tpage-1697", "tpage-1697", 5, ["HVX"], ""], +["havenx-vis", "havenx-vis", 5, ["HVX"], ""], +["tpage-1764", "tpage-1764", 5, ["HVY"], ""], +["tpage-3897", "tpage-3897", 5, ["HVY"], ""], +["tpage-1996", "tpage-1996", 5, ["HVY"], ""], +["haveny-vis", "haveny-vis", 5, ["HVY"], ""], +["peak-part", "peak-part", 5, ["IBX", "ICEBERGW", "ICEPASSW", "ICETOURW", "ICEW", "ICX", "IPX", "PEAKW", "PKX"], ""], +["tpage-2745", "tpage-2745", 5, ["IBX"], ""], +["tpage-2746", "tpage-2746", 5, ["IBX"], ""], +["tpage-3157", "tpage-3157", 5, ["IBX"], ""], +["tpage-3158", "tpage-3158", 5, ["IBX"], ""], +["snow-icebreak-c-ag", "snow-icebreak-c", 5, ["IBX", "IPX", "PKA", "PKB", "PKC", "PKX", "SNO", "SNOX", "SNW", "SNWX"], ""], +["icebergx-vis", "icebergx-vis", 5, ["IBX"], ""], +["tpage-2748", "tpage-2748", 5, ["IBY"], ""], +["tpage-3980", "tpage-3980", 5, ["IBY"], ""], +["icebergy-vis", "icebergy-vis", 5, ["IBY"], ""], +["tpage-2641", "tpage-2641", 5, ["ICA"], ""], +["tpage-3115", "tpage-3115", 5, ["ICA"], ""], +["tpage-2642", "tpage-2642", 5, ["ICA"], ""], +["tpage-3060", "tpage-3060", 5, ["ICA"], ""], +["ice-flag-ag", "ice-flag", 5, ["ICA", "ICB", "ICX", "IPY"], ""], +["icea-vis", "icea-vis", 5, ["ICA"], ""], +["tpage-2639", "tpage-2639", 5, ["ICB"], ""], +["tpage-3124", "tpage-3124", 5, ["ICB"], ""], +["tpage-2640", "tpage-2640", 5, ["ICB"], ""], +["tpage-3059", "tpage-3059", 5, ["ICB"], ""], +["iceb-vis", "iceb-vis", 5, ["ICB"], ""], +["icbgtt", "icbgtt", 5, ["ICBGTT"], ""], +["tpage-2643", "tpage-2643", 5, ["ICC"], ""], +["tpage-3001", "tpage-3001", 5, ["ICC"], ""], +["tpage-3974", "tpage-3974", 5, ["ICC"], ""], +["icec-vis", "icec-vis", 5, ["ICC"], ""], +["tpage-2644", "tpage-2644", 5, ["ICD"], ""], +["tpage-2645", "tpage-2645", 5, ["ICD"], ""], +["tpage-3516", "tpage-3516", 5, ["ICD"], ""], +["iced-vis", "iced-vis", 5, ["ICD"], ""], +["tpage-2957", "tpage-2957", 5, ["ICEBERGS"], ""], +["tpage-3361", "tpage-3361", 5, ["ICEBERGS"], ""], +["tpage-2958", "tpage-2958", 5, ["ICEBERGS"], ""], +["tpage-3104", "tpage-3104", 5, ["ICEBERGS"], ""], +["icebergs", "icebergs", 5, ["ICEBERGS"], ""], +["tpage-2996", "tpage-2996", 5, ["ICEBERGW"], ""], +["icebergw", "icebergw", 5, ["ICEBERGW"], ""], +["tpage-2849", "tpage-2849", 5, ["ICEBFOOT"], ""], +["tpage-2850", "tpage-2850", 5, ["ICEBFOOT"], ""], +["icebfoot", "icebfoot", 5, ["ICEBFOOT"], ""], +["tpage-3456", "tpage-3456", 5, ["ICEBTBOX"], ""], +["tpage-3457", "tpage-3457", 5, ["ICEBTBOX"], ""], +["icebtbox", "icebtbox", 5, ["ICEBTBOX"], ""], +["tpage-2855", "tpage-2855", 5, ["ICEFOOT"], ""], +["tpage-2856", "tpage-2856", 5, ["ICEFOOT"], ""], +["icefoot", "icefoot", 5, ["ICEFOOT"], ""], +["tpage-2955", "tpage-2955", 5, ["ICEPASSS"], ""], +["tpage-3360", "tpage-3360", 5, ["ICEPASSS"], ""], +["tpage-2956", "tpage-2956", 5, ["ICEPASSS"], ""], +["tpage-3103", "tpage-3103", 5, ["ICEPASSS"], ""], +["icepasss", "icepasss", 5, ["ICEPASSS"], ""], +["tpage-2951", "tpage-2951", 5, ["ICEPASSW"], ""], +["icepassw", "icepassw", 5, ["ICEPASSW"], ""], +["tpage-2857", "tpage-2857", 5, ["ICEPFOOT"], ""], +["tpage-2858", "tpage-2858", 5, ["ICEPFOOT"], ""], +["icepfoot", "icepfoot", 5, ["ICEPFOOT"], ""], +["tpage-3458", "tpage-3458", 5, ["ICEPTBOX"], ""], +["tpage-3459", "tpage-3459", 5, ["ICEPTBOX"], ""], +["iceptbox", "iceptbox", 5, ["ICEPTBOX"], ""], +["tpage-2905", "tpage-2905", 5, ["ICES"], ""], +["tpage-3125", "tpage-3125", 5, ["ICES"], ""], +["tpage-2963", "tpage-2963", 5, ["ICES"], ""], +["tpage-3102", "tpage-3102", 5, ["ICES"], ""], +["peak-snowball-ag", "peak-snowball", 5, ["ICES", "ICETOURS", "PEAKS"], ""], +["ices", "ices", 5, ["ICES"], ""], +["tpage-3133", "tpage-3133", 5, ["ICETBOX"], ""], +["tpage-3134", "tpage-3134", 5, ["ICETBOX"], ""], +["icetbox", "icetbox", 5, ["ICETBOX"], ""], +["tpage-3813", "tpage-3813", 5, ["ICETFOOT"], ""], +["tpage-3814", "tpage-3814", 5, ["ICETFOOT"], ""], +["icetfoot", "icetfoot", 5, ["ICETFOOT"], ""], +["tpage-2959", "tpage-2959", 5, ["ICETOURS"], ""], +["tpage-3355", "tpage-3355", 5, ["ICETOURS"], ""], +["tpage-3362", "tpage-3362", 5, ["ICETOURS"], ""], +["tpage-2960", "tpage-2960", 5, ["ICETOURS"], ""], +["tpage-3602", "tpage-3602", 5, ["ICETOURS"], ""], +["icetours", "icetours", 5, ["ICETOURS"], ""], +["peak-obs", "peak-obs", 5, ["ICETOURW", "ICEW", "ICX", "PEAKW", "PKX"], ""], +["ice-obs", "ice-obs", 5, ["ICETOURW", "ICEW", "ICX"], ""], +["tpage-2964", "tpage-2964", 5, ["ICETOURW"], ""], +["icetourw", "icetourw", 5, ["ICETOURW"], ""], +["tpage-3834", "tpage-3834", 5, ["ICETRN"], ""], +["tpage-3913", "tpage-3913", 5, ["ICETRN"], ""], +["icetrn", "icetrn", 5, ["ICETRN"], ""], +["icett", "icett", 5, ["ICETT"], ""], +["tpage-3460", "tpage-3460", 5, ["ICETTBOX"], ""], +["tpage-3461", "tpage-3461", 5, ["ICETTBOX"], ""], +["icettbox", "icettbox", 5, ["ICETTBOX"], ""], +["icew", "icew", 5, ["ICEW"], ""], +["icpstt", "icpstt", 5, ["ICPSTT"], ""], +["ictrtt", "ictrtt", 5, ["ICTRTT"], ""], +["tpage-2719", "tpage-2719", 5, ["ICX"], ""], +["tpage-3120", "tpage-3120", 5, ["ICX"], ""], +["icex-vis", "icex-vis", 5, ["ICX"], ""], +["tpage-2728", "tpage-2728", 5, ["ICY"], ""], +["tpage-3669", "tpage-3669", 5, ["ICY"], ""], +["icey-vis", "icey-vis", 5, ["ICY"], ""], +["tpage-2711", "tpage-2711", 5, ["IPX"], ""], +["tpage-2712", "tpage-2712", 5, ["IPX"], ""], +["tpage-3155", "tpage-3155", 5, ["IPX"], ""], +["icepassx-vis", "icepassx-vis", 5, ["IPX"], ""], +["tpage-2730", "tpage-2730", 5, ["IPY"], ""], +["tpage-3121", "tpage-3121", 5, ["IPY"], ""], +["icepassy-vis", "icepassy-vis", 5, ["IPY"], ""], +["tpage-3888", "tpage-3888", 5, ["JAKCRED"], ""], +["tpage-3889", "tpage-3889", 5, ["JAKCRED"], ""], +["tpage-3890", "tpage-3890", 5, ["JAKCRED"], ""], +["jakd-hr-cred-ag", "jakd-hr-cred", 5, ["JAKCRED"], ""], +["keira-highres-ag", "keira-highres", 5, ["JAKCRED"], ""], +["jakcred", "jakcred", 5, ["JAKCRED"], ""], +["tpage-3694", "tpage-3694", 5, ["JAKLEV"], ""], +["jakd-ag", "jakd", 5, ["JAKLEV"], ""], +["jaklev", "jaklev", 5, ["JAKLEV"], ""], +["jakvl", "jakvl", 5, ["JAKVL"], ""], +["tpage-649", "tpage-649", 5, ["JGA"], ""], +["tpage-962", "tpage-962", 5, ["JGA"], ""], +["tpage-650", "tpage-650", 5, ["JGA"], ""], +["tpage-652", "tpage-652", 5, ["JGA"], ""], +["junglea-vis", "junglea-vis", 5, ["JGA"], ""], +["tpage-641", "tpage-641", 5, ["JGB"], ""], +["tpage-642", "tpage-642", 5, ["JGB"], ""], +["tpage-644", "tpage-644", 5, ["JGB"], ""], +["jungleb-vis", "jungleb-vis", 5, ["JGB"], ""], +["tpage-653", "tpage-653", 5, ["JGC"], ""], +["tpage-654", "tpage-654", 5, ["JGC"], ""], +["junglec-vis", "junglec-vis", 5, ["JGC"], ""], +["tpage-648", "tpage-648", 5, ["JGD"], ""], +["tpage-706", "tpage-706", 5, ["JGD"], ""], +["jungled-vis", "jungled-vis", 5, ["JGD"], ""], +["tpage-640", "tpage-640", 5, ["JGE"], ""], +["tpage-1050", "tpage-1050", 5, ["JGE"], ""], +["tpage-967", "tpage-967", 5, ["JGE"], ""], +["tpage-966", "tpage-966", 5, ["JGE"], ""], +["junglee-vis", "junglee-vis", 5, ["JGE"], ""], +["tpage-638", "tpage-638", 5, ["JGF"], ""], +["tpage-1742", "tpage-1742", 5, ["JGF"], ""], +["tpage-1879", "tpage-1879", 5, ["JGF"], ""], +["tpage-1780", "tpage-1780", 5, ["JGF"], ""], +["junglef-vis", "junglef-vis", 5, ["JGF"], ""], +["tpage-639", "tpage-639", 5, ["JGG"], ""], +["tpage-1190", "tpage-1190", 5, ["JGG"], ""], +["jungleg-vis", "jungleg-vis", 5, ["JGG"], ""], +["jungle-part2", "jungle-part2", 5, ["JGX", "JUNGLEW"], ""], +["tpage-1601", "tpage-1601", 5, ["JGX"], ""], +["tpage-1603", "tpage-1603", 5, ["JGX"], ""], +["tpage-1600", "tpage-1600", 5, ["JGX"], ""], +["junglex-vis", "junglex-vis", 5, ["JGX"], ""], +["tpage-1621", "tpage-1621", 5, ["JGY"], ""], +["tpage-1624", "tpage-1624", 5, ["JGY"], ""], +["tpage-1623", "tpage-1623", 5, ["JGY"], ""], +["jungley-vis", "jungley-vis", 5, ["JGY"], ""], +["tpage-3695", "tpage-3695", 5, ["JKALEV"], ""], +["jak-ag", "jak", 5, ["JKALEV"], ""], +["jkalev", "jkalev", 5, ["JKALEV"], ""], +["tpage-3696", "tpage-3696", 5, ["JKBLEV"], ""], +["jakb-ag", "jakb", 5, ["JKBLEV"], ""], +["jkblev", "jkblev", 5, ["JKBLEV"], ""], +["tpage-3697", "tpage-3697", 5, ["JKCLEV"], ""], +["jakc-ag", "jakc", 5, ["JKCLEV"], ""], +["jkclev", "jkclev", 5, ["JKCLEV"], ""], +["tpage-1839", "tpage-1839", 5, ["JUNGFOOT"], ""], +["tpage-1872", "tpage-1872", 5, ["JUNGFOOT"], ""], +["jungfoot", "jungfoot", 5, ["JUNGFOOT"], ""], +["tpage-2375", "tpage-2375", 5, ["JUNGLES"], ""], +["tpage-1682", "tpage-1682", 5, ["JUNGLES"], ""], +["tpage-2563", "tpage-2563", 5, ["JUNGLES"], ""], +["tpage-2333", "tpage-2333", 5, ["JUNGLES"], ""], +["tpage-1847", "tpage-1847", 5, ["JUNGLES"], ""], +["jungle-statue-small-outdoors-ag", "jungle-statue-small-outdoors", 5, ["JUNGLES"], ""], +["jungle-statue-small-debris-ag", "jungle-statue-small-debris", 5, ["JUNGLES"], ""], +["jungles", "jungles", 5, ["JUNGLES"], ""], +["junglett", "junglett", 5, ["JUNGLETT"], ""], +["tpage-544", "tpage-544", 5, ["JUNGLEW"], ""], +["jungle-branch-collision-a-ag", "jungle-branch-collision-a", 5, ["JUNGLEW"], ""], +["junglew", "junglew", 5, ["JUNGLEW"], ""], +["tpage-1782", "tpage-1782", 5, ["JUNGTBOX"], ""], +["tpage-2827", "tpage-2827", 5, ["JUNGTBOX"], ""], +["jungtbox", "jungtbox", 5, ["JUNGTBOX"], ""], +["tpage-3914", "tpage-3914", 5, ["JUNGTRN"], ""], +["jungtrn", "jungtrn", 5, ["JUNGTRN"], ""], +["speech-kaeden", "speech-kaeden", 5, ["KAELEV"], ""], +["tpage-3698", "tpage-3698", 5, ["KAELEV"], ""], +["kaeden-ag", "kaeden", 5, ["KAELEV"], ""], +["kaelev", "kaelev", 5, ["KAELEV"], ""], +["kcross-part", "kcross-part", 5, ["KCR", "KCRX"], ""], +["kcross-obs", "kcross-obs", 5, ["KCR", "KCRX"], ""], +["kcross-ocean", "kcross-ocean", 5, ["KCR", "KCRX"], ""], +["kcross-effects", "kcross-effects", 5, ["KCR", "KCRX"], ""], +["tpage-1807", "tpage-1807", 5, ["KCR"], ""], +["tpage-2229", "tpage-2229", 5, ["KCR"], ""], +["tpage-1806", "tpage-1806", 5, ["KCR"], ""], +["tpage-3981", "tpage-3981", 5, ["KCR"], ""], +["tpage-1808", "tpage-1808", 5, ["KCR"], ""], +["kcro-flag-down-ag", "kcro-flag-down", 5, ["KCR", "KCRX"], ""], +["kcro-fence-piece-a-ag", "kcro-fence-piece-a", 5, ["KCR", "KCRX"], ""], +["kcro-fence-debris-ag", "kcro-fence-debris", 5, ["KCR"], ""], +["kcro-oil-barrel-ag", "kcro-oil-barrel", 5, ["KCR", "KCRX"], ""], +["kcro-staff-flag-ag", "kcro-staff-flag", 5, ["KCR"], ""], +["kcro-fence-piece-b-ag", "kcro-fence-piece-b", 5, ["KCR", "KCRX"], ""], +["kcro-bouncy-tire-a-ag", "kcro-bouncy-tire-a", 5, ["KCR", "KCRX"], ""], +["kcross-vis", "kcross-vis", 5, ["KCR"], ""], +["tpage-2438", "tpage-2438", 5, ["KCROSART"], ""], +["kcrosart", "kcrosart", 5, ["KCROSART"], ""], +["tpage-2219", "tpage-2219", 5, ["KCROSCTF"], ""], +["tpage-2220", "tpage-2220", 5, ["KCROSCTF"], ""], +["kcrosctf", "kcrosctf", 5, ["KCROSCTF"], ""], +["tpage-2323", "tpage-2323", 5, ["KCROSSS"], ""], +["kcrosss", "kcrosss", 5, ["KCROSSS"], ""], +["tpage-2436", "tpage-2436", 5, ["KCRSCLCT"], ""], +["kcrsclct", "kcrsclct", 5, ["KCRSCLCT"], ""], +["tpage-2363", "tpage-2363", 5, ["KCRSPLOW"], ""], +["kcrsplow", "kcrsplow", 5, ["KCRSPLOW"], ""], +["tpage-2296", "tpage-2296", 5, ["KCRX"], ""], +["tpage-2299", "tpage-2299", 5, ["KCRX"], ""], +["tpage-3977", "tpage-3977", 5, ["KCRX"], ""], +["tpage-2298", "tpage-2298", 5, ["KCRX"], ""], +["kcrossx-vis", "kcrossx-vis", 5, ["KCRX"], ""], +["tpage-3944", "tpage-3944", 5, ["KEICRED"], ""], +["tpage-3943", "tpage-3943", 5, ["KEICRED"], ""], +["kei-hr-cred-ag", "kei-hr-cred", 5, ["KEICRED"], ""], +["keicred", "keicred", 5, ["KEICRED"], ""], +["speech-keira", "speech-keira", 5, ["KIELEV"], ""], +["tpage-3715", "tpage-3715", 5, ["KIELEV"], ""], +["keira-ag", "keira", 5, ["KIELEV"], ""], +["kielev", "kielev", 5, ["KIELEV"], ""], +["kievl", "kievl", 5, ["KIEVL"], ""], +["tpage-3948", "tpage-3948", 5, ["KLECRED"], ""], +["kle-hr-cred-ag", "kle-hr-cred", 5, ["KLECRED"], ""], +["klecred", "klecred", 5, ["KLECRED"], ""], +["speech-kleiver", "speech-kleiver", 5, ["KLELEV"], ""], +["tpage-3700", "tpage-3700", 5, ["KLELEV"], ""], +["klever-ag", "klever", 5, ["KLELEV"], ""], +["klelev", "klelev", 5, ["KLELEV"], ""], +["panther-chassis-ag", "panther-chassis", 5, ["KLEVL", "PANTL", "THAVL2"], ""], +["panther-door-b-ag", "panther-door-b", 5, ["KLEVL", "PANTL"], ""], +["panther-f-bumper-c-ag", "panther-f-bumper-c", 5, ["KLEVL", "PANTL"], ""], +["panther-hood-a-ag", "panther-hood-a", 5, ["KLEVL", "PANTL"], ""], +["panther-roof-c-ag", "panther-roof-c", 5, ["KLEVL", "PANTL"], ""], +["klevl", "klevl", 5, ["KLEVL"], ""], +["klevl2", "klevl2", 5, ["KLEVL2"], ""], +["tpage-296", "tpage-296", 5, ["KRA"], ""], +["tpage-582", "tpage-582", 5, ["KRA"], ""], +["tpage-406", "tpage-406", 5, ["KRA"], ""], +["tpage-583", "tpage-583", 5, ["KRA"], ""], +["kras-windsock-ag", "kras-windsock", 5, ["KRA"], ""], +["krasa-vis", "krasa-vis", 5, ["KRA"], ""], +["tpage-1646", "tpage-1646", 5, ["KRASFOOT"], ""], +["tpage-1681", "tpage-1681", 5, ["KRASFOOT"], ""], +["tpage-1688", "tpage-1688", 5, ["KRASFOOT"], ""], +["krasfoot", "krasfoot", 5, ["KRASFOOT"], ""], +["tpage-2024", "tpage-2024", 5, ["KRASS"], ""], +["tpage-1658", "tpage-1658", 5, ["KRASS"], ""], +["tpage-3877", "tpage-3877", 5, ["KRASS"], ""], +["tpage-2039", "tpage-2039", 5, ["KRASS"], ""], +["tpage-1846", "tpage-1846", 5, ["KRASS"], ""], +["kras-pump-break-ag", "kras-pump-break", 5, ["KRASS", "KRASW"], ""], +["kras-pump-debris-ag", "kras-pump-debris", 5, ["KRASS"], ""], +["krass", "krass", 5, ["KRASS"], ""], +["tpage-1696", "tpage-1696", 5, ["KRASTBOX"], ""], +["tpage-2612", "tpage-2612", 5, ["KRASTBOX"], ""], +["krastbox", "krastbox", 5, ["KRASTBOX"], ""], +["tpage-1775", "tpage-1775", 5, ["KRASTRN"], ""], +["tpage-2862", "tpage-2862", 5, ["KRASTRN"], ""], +["training-wall-ag", "training-wall", 5, ["KRASTRN"], ""], +["start-light-ag", "start-light", 5, ["KRASTRN"], ""], +["training-marker-ag", "training-marker", 5, ["KRASTRN"], ""], +["krastrn", "krastrn", 5, ["KRASTRN"], ""], +["krastt", "krastt", 5, ["KRASTT"], ""], +["tpage-207", "tpage-207", 5, ["KRASW"], ""], +["tpage-185", "tpage-185", 5, ["KRASW"], ""], +["krasw", "krasw", 5, ["KRASW"], ""], +["tpage-3817", "tpage-3817", 5, ["KRATFOOT"], ""], +["tpage-3818", "tpage-3818", 5, ["KRATFOOT"], ""], +["kratfoot", "kratfoot", 5, ["KRATFOOT"], ""], +["tpage-2887", "tpage-2887", 5, ["KRATOURS"], ""], +["tpage-3883", "tpage-3883", 5, ["KRATOURS"], ""], +["tpage-3135", "tpage-3135", 5, ["KRATOURS"], ""], +["tpage-3601", "tpage-3601", 5, ["KRATOURS"], ""], +["kratours", "kratours", 5, ["KRATOURS"], ""], +["tpage-2886", "tpage-2886", 5, ["KRATOURW"], ""], +["kratourw", "kratourw", 5, ["KRATOURW"], ""], +["tpage-3462", "tpage-3462", 5, ["KRATTBOX"], ""], +["tpage-3463", "tpage-3463", 5, ["KRATTBOX"], ""], +["krattbox", "krattbox", 5, ["KRATTBOX"], ""], +["tpage-408", "tpage-408", 5, ["KRB"], ""], +["tpage-492", "tpage-492", 5, ["KRB"], ""], +["tpage-409", "tpage-409", 5, ["KRB"], ""], +["kras-tower-ag", "kras-tower", 5, ["KRB", "KRX"], ""], +["kras-flag-ag", "kras-flag", 5, ["KRB"], ""], +["krasb-vis", "krasb-vis", 5, ["KRB"], ""], +["tpage-407", "tpage-407", 5, ["KRC"], ""], +["tpage-676", "tpage-676", 5, ["KRC"], ""], +["tpage-504", "tpage-504", 5, ["KRC"], ""], +["krasc-vis", "krasc-vis", 5, ["KRC"], ""], +["krtrtt", "krtrtt", 5, ["KRTRTT"], ""], +["tpage-390", "tpage-390", 5, ["KRX"], ""], +["tpage-733", "tpage-733", 5, ["KRX"], ""], +["tpage-732", "tpage-732", 5, ["KRX"], ""], +["krasx-vis", "krasx-vis", 5, ["KRX"], ""], +["tpage-728", "tpage-728", 5, ["KRY"], ""], +["tpage-729", "tpage-729", 5, ["KRY"], ""], +["krasy-vis", "krasy-vis", 5, ["KRY"], ""], +["leopard-chassis-ag", "leopard-chassis", 5, ["LEOPL", "SIGVL", "THBVL2"], ""], +["leopard-door-a-ag", "leopard-door-a", 5, ["LEOPL"], ""], +["leopard-door-b-ag", "leopard-door-b", 5, ["LEOPL", "SIGVL"], ""], +["leopard-door-c-ag", "leopard-door-c", 5, ["LEOPL"], ""], +["leopard-door-d-ag", "leopard-door-d", 5, ["LEOPL"], ""], +["leopard-door-e-ag", "leopard-door-e", 5, ["LEOPL", "THBVL2"], ""], +["leopard-f-fender-a-ag", "leopard-f-fender-a", 5, ["LEOPL"], ""], +["leopard-f-fender-b-ag", "leopard-f-fender-b", 5, ["LEOPL", "SIGVL"], ""], +["leopard-f-fender-c-ag", "leopard-f-fender-c", 5, ["LEOPL"], ""], +["leopard-f-fender-d-ag", "leopard-f-fender-d", 5, ["LEOPL"], ""], +["leopard-f-fender-e-ag", "leopard-f-fender-e", 5, ["LEOPL", "THBVL2"], ""], +["leopard-hood-a-ag", "leopard-hood-a", 5, ["LEOPL"], ""], +["leopard-hood-b-ag", "leopard-hood-b", 5, ["LEOPL", "SIGVL"], ""], +["leopard-hood-c-ag", "leopard-hood-c", 5, ["LEOPL", "THBVL2"], ""], +["leopard-hood-d-ag", "leopard-hood-d", 5, ["LEOPL"], ""], +["leopard-hood-e-ag", "leopard-hood-e", 5, ["LEOPL"], ""], +["leopard-r-fender-a-ag", "leopard-r-fender-a", 5, ["LEOPL", "THBVL2"], ""], +["leopard-r-fender-b-ag", "leopard-r-fender-b", 5, ["LEOPL", "SIGVL"], ""], +["leopard-r-fender-c-ag", "leopard-r-fender-c", 5, ["LEOPL"], ""], +["leopard-r-fender-d-ag", "leopard-r-fender-d", 5, ["LEOPL"], ""], +["leopard-r-fender-e-ag", "leopard-r-fender-e", 5, ["LEOPL"], ""], +["leopard-roof-a-ag", "leopard-roof-a", 5, ["LEOPL"], ""], +["leopard-roof-b-ag", "leopard-roof-b", 5, ["LEOPL"], ""], +["leopard-roof-c-ag", "leopard-roof-c", 5, ["LEOPL"], ""], +["leopard-roof-d-ag", "leopard-roof-d", 5, ["LEOPL"], ""], +["leopard-roof-e-ag", "leopard-roof-e", 5, ["LEOPL", "THBVL2"], ""], +["leopl", "leopl", 5, ["LEOPL"], ""], +["3d-menu-elements", "3d-menu-elements", 5, ["MENU2"], ""], +["lobby-menu-data", "lobby-menu-data", 5, ["MENU2"], ""], +["lobby-menu-manager", "lobby-menu-manager", 5, ["MENU2"], ""], +["lobby-scroll", "lobby-scroll", 5, ["MENU2"], ""], +["lobby-brs", "lobby-brs", 5, ["MENU2"], ""], +["lobby-profile", "lobby-profile", 5, ["MENU2"], ""], +["menumap-effects", "menumap-effects", 5, ["MENU2"], ""], +["lobby-adventure-awards", "lobby-adventure-awards", 5, ["MENU2"], ""], +["lobby-adventure-maps", "lobby-adventure-maps", 5, ["MENU2"], ""], +["lobby-adventure-maps-2", "lobby-adventure-maps-2", 5, ["MENU2"], ""], +["lobby-adventure", "lobby-adventure", 5, ["MENU2"], ""], +["lobby-customize", "lobby-customize", 5, ["MENU2"], ""], +["lobby-results", "lobby-results", 5, ["MENU2"], ""], +["lobby-net-h", "lobby-net-h", 5, ["MENU2"], ""], +["lobby-stats", "lobby-stats", 5, ["MENU2"], ""], +["lobby-net-startup", "lobby-net-startup", 5, ["MENU2"], ""], +["lobby-patch", "lobby-patch", 5, ["MENU2"], ""], +["lobby-buddies", "lobby-buddies", 5, ["MENU2"], ""], +["lobby-games", "lobby-games", 5, ["MENU2"], ""], +["lobby-rooms", "lobby-rooms", 5, ["MENU2"], ""], +["lobby-clans", "lobby-clans", 5, ["MENU2"], ""], +["lobby-advanced", "lobby-advanced", 5, ["MENU2"], ""], +["lobby-secrets", "lobby-secrets", 5, ["MENU2"], ""], +["garage-obs", "garage-obs", 5, ["MENU2"], ""], +["tpage-1022", "tpage-1022", 5, ["MENU2"], ""], +["tpage-1446", "tpage-1446", 5, ["MENU2"], ""], +["tpage-1121", "tpage-1121", 5, ["MENU2"], ""], +["tpage-1625", "tpage-1625", 5, ["MENU2"], ""], +["jakxlogo-ag", "jakxlogo", 5, ["MENU2"], ""], +["select-screen-ag", "select-screen", 5, ["MENU2"], ""], +["adv-event-panel-ag", "adv-event-panel", 5, ["MENU2"], ""], +["select-screen-sml-ag", "select-screen-sml", 5, ["MENU2"], ""], +["full-screen-ag", "full-screen", 5, ["MENU2"], ""], +["select-mode-chooser-ag", "select-mode-chooser", 5, ["MENU2"], ""], +["lobby-screen-a-ag", "lobby-screen-a", 5, ["MENU2"], ""], +["lobby-screen-c-ag", "lobby-screen-c", 5, ["MENU2"], ""], +["pop-up-screen-b-ag", "pop-up-screen-b", 5, ["MENU2"], ""], +["mem-card-screen-ag", "mem-card-screen", 5, ["MENU2"], ""], +["lg-player-screen-ag", "lg-player-screen", 5, ["MENU2"], ""], +["pop-up-screen-c-ag", "pop-up-screen-c", 5, ["MENU2"], ""], +["play-screen-ag", "play-screen", 5, ["MENU2"], ""], +["pop-up-screen-a-ag", "pop-up-screen-a", 5, ["MENU2"], ""], +["top-bar-ag", "top-bar", 5, ["MENU2"], ""], +["lobby-screen-b-ag", "lobby-screen-b", 5, ["MENU2"], ""], +["map-screen-ag", "map-screen", 5, ["MENU2"], ""], +["bottom-bar-ag", "bottom-bar", 5, ["MENU2"], ""], +["character-select-ag", "character-select", 5, ["MENU2"], ""], +["keyboard-ag", "keyboard", 5, ["MENU2"], ""], +["confirm-screen-ag", "confirm-screen", 5, ["MENU2"], ""], +["combat-racing-ag", "combat-racing", 5, ["MENU2"], ""], +["play-screen-b-ag", "play-screen-b", 5, ["MENU2"], ""], +["lobby-tab-large-ag", "lobby-tab-large", 5, ["MENU2"], ""], +["lobby-tab-small-ag", "lobby-tab-small", 5, ["MENU2"], ""], +["lobby-tab-small-b-ag", "lobby-tab-small-b", 5, ["MENU2"], ""], +["split-screen-ag", "split-screen", 5, ["MENU2"], ""], +["cash-bar-ag", "cash-bar", 5, ["MENU2"], ""], +["large-type-bar-ag", "large-type-bar", 5, ["MENU2"], ""], +["sml-type-bar-ag", "sml-type-bar", 5, ["MENU2"], ""], +["points-counter-ag", "points-counter", 5, ["MENU2"], ""], +["side-walls-ag", "side-walls", 5, ["MENU2"], ""], +["side-bar-e-ag", "side-bar-e", 5, ["MENU2"], ""], +["tune-meter-bar-ag", "tune-meter-bar", 5, ["MENU2"], ""], +["side-bar-ag", "side-bar", 5, ["MENU2"], ""], +["garage-cinema-ag", "garage-cinema", 5, ["MENU2"], ""], +["side-bar-title-ag", "side-bar-title", 5, ["MENU2"], ""], +["lobby-screen-d-ag", "lobby-screen-d", 5, ["MENU2"], ""], +["tune-type-bar-ag", "tune-type-bar", 5, ["MENU2"], ""], +["side-bar-b-ag", "side-bar-b", 5, ["MENU2"], ""], +["side-bar-c-ag", "side-bar-c", 5, ["MENU2"], ""], +["side-bar-d-ag", "side-bar-d", 5, ["MENU2"], ""], +["interface-cam-ag", "interface-cam", 5, ["MENU2"], ""], +["menumap-part", "menumap-part", 5, ["MENUMAP"], ""], +["lobby-adventure-obs", "lobby-adventure-obs", 5, ["MENUMAP"], ""], +["tpage-2920", "tpage-2920", 5, ["MENUMAP"], ""], +["tpage-2916", "tpage-2916", 5, ["MENUMAP"], ""], +["tpage-3674", "tpage-3674", 5, ["MENUMAP"], ""], +["world-map-hav-tour-mesh-ag", "world-map-hav-tour-mesh", 5, ["MENUMAP"], ""], +["world-map-ice-tour-mesh-ag", "world-map-ice-tour-mesh", 5, ["MENUMAP"], ""], +["world-map-haven-mesh-ag", "world-map-haven-mesh", 5, ["MENUMAP"], ""], +["world-map-spar-tour-mesh-ag", "world-map-spar-tour-mesh", 5, ["MENUMAP"], ""], +["world-map-iceberg-mesh-ag", "world-map-iceberg-mesh", 5, ["MENUMAP"], ""], +["world-map-icepass-mesh-ag", "world-map-icepass-mesh", 5, ["MENUMAP"], ""], +["world-map-kras-tour-mesh-ag", "world-map-kras-tour-mesh", 5, ["MENUMAP"], ""], +["world-map-havjung-mesh-ag", "world-map-havjung-mesh", 5, ["MENUMAP"], ""], +["world-map-spartem-mesh-ag", "world-map-spartem-mesh", 5, ["MENUMAP"], ""], +["world-map-canspar-mesh-ag", "world-map-canspar-mesh", 5, ["MENUMAP"], ""], +["world-map-havsew-mesh-ag", "world-map-havsew-mesh", 5, ["MENUMAP"], ""], +["world-map-ice-mesh-ag", "world-map-ice-mesh", 5, ["MENUMAP"], ""], +["wm-docks-crane-ag", "wm-docks-crane", 5, ["MENUMAP"], ""], +["world-map-peak-mesh-ag", "world-map-peak-mesh", 5, ["MENUMAP"], ""], +["world-map-jungle-mesh-ag", "world-map-jungle-mesh", 5, ["MENUMAP"], ""], +["world-map-drome-mesh-ag", "world-map-drome-mesh", 5, ["MENUMAP"], ""], +["world-map-desarena-mesh-ag", "world-map-desarena-mesh", 5, ["MENUMAP"], ""], +["world-map-spargus-mesh-ag", "world-map-spargus-mesh", 5, ["MENUMAP"], ""], +["world-map-temple-mesh-ag", "world-map-temple-mesh", 5, ["MENUMAP"], ""], +["world-map-sewer-mesh-ag", "world-map-sewer-mesh", 5, ["MENUMAP"], ""], +["world-map-canyon-mesh-ag", "world-map-canyon-mesh", 5, ["MENUMAP"], ""], +["world-map-dromedoc-mesh-ag", "world-map-dromedoc-mesh", 5, ["MENUMAP"], ""], +["world-map-dockkra-mesh-ag", "world-map-dockkra-mesh", 5, ["MENUMAP"], ""], +["world-map-kras-mesh-ag", "world-map-kras-mesh", 5, ["MENUMAP"], ""], +["menu-kras-trophy-ag", "menu-kras-trophy", 5, ["MENUMAP"], ""], +["wm-kras-circular-tower-ag", "wm-kras-circular-tower", 5, ["MENUMAP"], ""], +["world-map-docks-mesh-ag", "world-map-docks-mesh", 5, ["MENUMAP"], ""], +["menu-marauder-trophy-ag", "menu-marauder-trophy", 5, ["MENUMAP"], ""], +["world-map-snow-mesh-ag", "world-map-snow-mesh", 5, ["MENUMAP"], ""], +["menu-spargus-trophy-ag", "menu-spargus-trophy", 5, ["MENUMAP"], ""], +["menu-haven-trophy-ag", "menu-haven-trophy", 5, ["MENUMAP"], ""], +["world-map-kcross-mesh-ag", "world-map-kcross-mesh", 5, ["MENUMAP"], ""], +["world-map-cliffs-mesh-ag", "world-map-cliffs-mesh", 5, ["MENUMAP"], ""], +["wm-track-car-ag", "wm-track-car", 5, ["MENUMAP"], ""], +["world-map-fort-mesh-ag", "world-map-fort-mesh", 5, ["MENUMAP"], ""], +["world-map-atoll-mesh-ag", "world-map-atoll-mesh", 5, ["MENUMAP"], ""], +["world-map-desisle-mesh-ag", "world-map-desisle-mesh", 5, ["MENUMAP"], ""], +["wm-drome-wind-machine-ag", "wm-drome-wind-machine", 5, ["MENUMAP"], ""], +["world-map-coliseum-mesh-ag", "world-map-coliseum-mesh", 5, ["MENUMAP"], ""], +["wm-fireworks-ship-ag", "wm-fireworks-ship", 5, ["MENUMAP"], ""], +["world-map-snowbowl-mesh-ag", "world-map-snowbowl-mesh", 5, ["MENUMAP"], ""], +["world-map-havenarena-mesh-ag", "world-map-havenarena-mesh", 5, ["MENUMAP"], ""], +["menumap", "menumap", 5, ["MENUMAP"], ""], +["mongoose-chassis-ag", "mongoose-chassis", 5, ["MONGL"], ""], +["mongoose-door-a-ag", "mongoose-door-a", 5, ["MONGL"], ""], +["mongoose-f-fender-a-ag", "mongoose-f-fender-a", 5, ["MONGL"], ""], +["mongoose-f-fender-b-ag", "mongoose-f-fender-b", 5, ["MONGL"], ""], +["mongoose-hood-a-ag", "mongoose-hood-a", 5, ["MONGL"], ""], +["mongoose-hood-b-ag", "mongoose-hood-b", 5, ["MONGL"], ""], +["mongoose-hood-c-ag", "mongoose-hood-c", 5, ["MONGL"], ""], +["mongoose-r-bumper-a-ag", "mongoose-r-bumper-a", 5, ["MONGL"], ""], +["mongoose-trunk-a-ag", "mongoose-trunk-a", 5, ["MONGL"], ""], +["mongoose-trunk-b-ag", "mongoose-trunk-b", 5, ["MONGL"], ""], +["mongoose-trunk-c-ag", "mongoose-trunk-c", 5, ["MONGL"], ""], +["mongoose-trunk-d-ag", "mongoose-trunk-d", 5, ["MONGL"], ""], +["mongl", "mongl", 5, ["MONGL"], ""], +["speech-osmo", "speech-osmo", 5, ["OSMLEV"], ""], +["tpage-3712", "tpage-3712", 5, ["OSMLEV"], ""], +["osmo-ag", "osmo", 5, ["OSMLEV"], ""], +["osmlev", "osmlev", 5, ["OSMLEV"], ""], +["panther-door-a-ag", "panther-door-a", 5, ["PANTL"], ""], +["panther-door-c-ag", "panther-door-c", 5, ["PANTL"], ""], +["panther-door-d-ag", "panther-door-d", 5, ["PANTL"], ""], +["panther-door-e-ag", "panther-door-e", 5, ["PANTL", "THAVL2"], ""], +["panther-f-bumper-a-ag", "panther-f-bumper-a", 5, ["PANTL"], ""], +["panther-f-bumper-b-ag", "panther-f-bumper-b", 5, ["PANTL"], ""], +["panther-f-bumper-d-ag", "panther-f-bumper-d", 5, ["PANTL"], ""], +["panther-f-bumper-e-ag", "panther-f-bumper-e", 5, ["PANTL", "THAVL2"], ""], +["panther-hood-b-ag", "panther-hood-b", 5, ["PANTL"], ""], +["panther-hood-c-ag", "panther-hood-c", 5, ["PANTL"], ""], +["panther-hood-d-ag", "panther-hood-d", 5, ["PANTL"], ""], +["panther-hood-e-ag", "panther-hood-e", 5, ["PANTL", "THAVL2"], ""], +["panther-roof-a-ag", "panther-roof-a", 5, ["PANTL"], ""], +["panther-roof-b-ag", "panther-roof-b", 5, ["PANTL"], ""], +["panther-roof-d-ag", "panther-roof-d", 5, ["PANTL"], ""], +["panther-roof-e-ag", "panther-roof-e", 5, ["PANTL", "THAVL2"], ""], +["pantl", "pantl", 5, ["PANTL"], ""], +["tpage-2859", "tpage-2859", 5, ["PEAKFOOT"], ""], +["tpage-2860", "tpage-2860", 5, ["PEAKFOOT"], ""], +["peakfoot", "peakfoot", 5, ["PEAKFOOT"], ""], +["tpage-2914", "tpage-2914", 5, ["PEAKS"], ""], +["tpage-3354", "tpage-3354", 5, ["PEAKS"], ""], +["tpage-3363", "tpage-3363", 5, ["PEAKS"], ""], +["tpage-2915", "tpage-2915", 5, ["PEAKS"], ""], +["tpage-2751", "tpage-2751", 5, ["PEAKS"], ""], +["peaks", "peaks", 5, ["PEAKS"], ""], +["tpage-3464", "tpage-3464", 5, ["PEAKTBOX"], ""], +["tpage-3465", "tpage-3465", 5, ["PEAKTBOX"], ""], +["peaktbox", "peaktbox", 5, ["PEAKTBOX"], ""], +["peaktt", "peaktt", 5, ["PEAKTT"], ""], +["tpage-2734", "tpage-2734", 5, ["PEAKW"], ""], +["peakw", "peakw", 5, ["PEAKW"], ""], +["tpage-3967", "tpage-3967", 5, ["PECCRED"], ""], +["pec-hr-cred-ag", "pec-hr-cred", 5, ["PECCRED"], ""], +["peccred", "peccred", 5, ["PECCRED"], ""], +["tpage-3780", "tpage-3780", 5, ["PECLEV"], ""], +["pecker-driver-ag", "pecker-driver", 5, ["PECLEV"], ""], +["peclev", "peclev", 5, ["PECLEV"], ""], +["pecvl", "pecvl", 5, ["PECVL"], ""], +["tpage-2700", "tpage-2700", 5, ["PKA"], ""], +["tpage-2701", "tpage-2701", 5, ["PKA"], ""], +["tpage-3153", "tpage-3153", 5, ["PKA"], ""], +["tpage-3152", "tpage-3152", 5, ["PKA"], ""], +["peaka-vis", "peaka-vis", 5, ["PKA"], ""], +["tpage-2717", "tpage-2717", 5, ["PKB"], ""], +["tpage-2718", "tpage-2718", 5, ["PKB"], ""], +["tpage-3976", "tpage-3976", 5, ["PKB"], ""], +["peakb-vis", "peakb-vis", 5, ["PKB"], ""], +["tpage-2714", "tpage-2714", 5, ["PKC"], ""], +["tpage-2716", "tpage-2716", 5, ["PKC"], ""], +["tpage-2715", "tpage-2715", 5, ["PKC"], ""], +["peakc-vis", "peakc-vis", 5, ["PKC"], ""], +["tpage-2713", "tpage-2713", 5, ["PKD"], ""], +["tpage-3117", "tpage-3117", 5, ["PKD"], ""], +["tpage-3443", "tpage-3443", 5, ["PKD"], ""], +["tpage-2930", "tpage-2930", 5, ["PKD"], ""], +["peak-double-flag-ag", "peak-double-flag", 5, ["PKD", "PKX"], ""], +["peakd-vis", "peakd-vis", 5, ["PKD"], ""], +["tpage-2738", "tpage-2738", 5, ["PKE"], ""], +["tpage-3581", "tpage-3581", 5, ["PKE"], ""], +["tpage-3979", "tpage-3979", 5, ["PKE"], ""], +["peake-vis", "peake-vis", 5, ["PKE"], ""], +["tpage-2732", "tpage-2732", 5, ["PKX"], ""], +["tpage-3119", "tpage-3119", 5, ["PKX"], ""], +["tpage-2733", "tpage-2733", 5, ["PKX"], ""], +["tpage-3154", "tpage-3154", 5, ["PKX"], ""], +["peakx-vis", "peakx-vis", 5, ["PKX"], ""], +["possum-chassis-ag", "possum-chassis", 5, ["POSSL", "THAVL", "TORVL2"], ""], +["possum-door-a-ag", "possum-door-a", 5, ["POSSL"], ""], +["possum-door-b-ag", "possum-door-b", 5, ["POSSL"], ""], +["possum-door-c-ag", "possum-door-c", 5, ["POSSL", "TORVL2"], ""], +["possum-door-d-ag", "possum-door-d", 5, ["POSSL"], ""], +["possum-door-e-ag", "possum-door-e", 5, ["POSSL", "THAVL"], ""], +["possum-f-fender-a-ag", "possum-f-fender-a", 5, ["POSSL"], ""], +["possum-f-fender-b-ag", "possum-f-fender-b", 5, ["POSSL", "THAVL"], ""], +["possum-f-fender-c-ag", "possum-f-fender-c", 5, ["POSSL"], ""], +["possum-f-fender-d-ag", "possum-f-fender-d", 5, ["POSSL"], ""], +["possum-f-fender-e-ag", "possum-f-fender-e", 5, ["POSSL", "TORVL2"], ""], +["possum-hood-a-ag", "possum-hood-a", 5, ["POSSL"], ""], +["possum-hood-b-ag", "possum-hood-b", 5, ["POSSL"], ""], +["possum-hood-c-ag", "possum-hood-c", 5, ["POSSL"], ""], +["possum-hood-d-ag", "possum-hood-d", 5, ["POSSL", "THAVL"], ""], +["possum-hood-e-ag", "possum-hood-e", 5, ["POSSL", "TORVL2"], ""], +["possum-trunk-a-ag", "possum-trunk-a", 5, ["POSSL"], ""], +["possum-trunk-b-ag", "possum-trunk-b", 5, ["POSSL"], ""], +["possum-trunk-c-ag", "possum-trunk-c", 5, ["POSSL", "THAVL"], ""], +["possum-trunk-d-ag", "possum-trunk-d", 5, ["POSSL", "TORVL2"], ""], +["possum-trunk-e-ag", "possum-trunk-e", 5, ["POSSL"], ""], +["possl", "possl", 5, ["POSSL"], ""], +["tpage-3673", "tpage-3673", 5, ["RACEWEAP"], ""], +["tpage-3930", "tpage-3930", 5, ["RACEWEAP"], ""], +["saucer-ag", "saucer", 5, ["RACEWEAP"], ""], +["raceweap", "raceweap", 5, ["RACEWEAP"], ""], +["speech-ratchet", "speech-ratchet", 5, ["RATLEV"], ""], +["tpage-3701", "tpage-3701", 5, ["RATLEV"], ""], +["ratchet-ag", "ratchet", 5, ["RATLEV"], ""], +["ratlev", "ratlev", 5, ["RATLEV"], ""], +["tpage-3947", "tpage-3947", 5, ["RAYCRED"], ""], +["ray-hr-cred-ag", "ray-hr-cred", 5, ["RAYCRED"], ""], +["raycred", "raycred", 5, ["RAYCRED"], ""], +["speech-rayn", "speech-rayn", 5, ["RAYLEV"], ""], +["tpage-3702", "tpage-3702", 5, ["RAYLEV"], ""], +["racerayn-ag", "racerayn", 5, ["RAYLEV"], ""], +["raylev", "raylev", 5, ["RAYLEV"], ""], +["wolf-chassis-ag", "wolf-chassis", 5, ["RAYVL", "TORVL3", "UR8VL3", "WOLFL"], ""], +["wolf-door-d-ag", "wolf-door-d", 5, ["RAYVL", "WOLFL"], ""], +["wolf-f-bumper-a-ag", "wolf-f-bumper-a", 5, ["RAYVL", "WOLFL"], ""], +["wolf-hood-c-ag", "wolf-hood-c", 5, ["RAYVL", "UR8VL3", "WOLFL"], ""], +["wolf-r-bumper-a-ag", "wolf-r-bumper-a", 5, ["RAYVL", "WOLFL"], ""], +["wolf-roof-d-ag", "wolf-roof-d", 5, ["RAYVL", "UR8VL3", "WOLFL"], ""], +["rayvl", "rayvl", 5, ["RAYVL"], ""], +["tiger-door-e-ag", "tiger-door-e", 5, ["RAYVL2", "TIGEL"], ""], +["tiger-hood-e-ag", "tiger-hood-e", 5, ["RAYVL2", "TIGEL"], ""], +["tiger-r-fender-a-ag", "tiger-r-fender-a", 5, ["RAYVL2", "TIGEL"], ""], +["tiger-roof-e-ag", "tiger-roof-e", 5, ["RAYVL2", "TIGEL"], ""], +["rayvl2", "rayvl2", 5, ["RAYVL2"], ""], +["tpage-3946", "tpage-3946", 5, ["RAZCRED"], ""], +["raz-hr-cred-ag", "raz-hr-cred", 5, ["RAZCRED"], ""], +["razcred", "razcred", 5, ["RAZCRED"], ""], +["speech-razer", "speech-razer", 5, ["RAZLEV"], ""], +["tpage-3703", "tpage-3703", 5, ["RAZLEV"], ""], +["razer-ag", "razer", 5, ["RAZLEV"], ""], +["razlev", "razlev", 5, ["RAZLEV"], ""], +["razvl", "razvl", 5, ["RAZVL"], ""], +["rustyh-part", "rustyh-part", 5, ["RTH", "RUSTYH"], ""], +["tpage-1111", "tpage-1111", 5, ["RTH"], ""], +["tpage-1112", "tpage-1112", 5, ["RTH"], ""], +["tpage-1875", "tpage-1875", 5, ["RTH"], ""], +["tpage-1114", "tpage-1114", 5, ["RTH"], ""], +["tpage-1860", "tpage-1860", 5, ["RTH"], ""], +["tpage-1224", "tpage-1224", 5, ["RTH", "RUSTYH"], ""], +["daxter-highres-ag", "daxter-highres", 5, ["RTH", "RUSTYH"], ""], +["krasmale-ag", "krasmale", 5, ["RTH", "RUSTYH"], ""], +["krasfemale-ag", "krasfemale", 5, ["RTH", "RUSTYH"], ""], +["rustyh-fishtank-broken-ag", "rustyh-fishtank-broken", 5, ["RTH", "RUSTYH"], ""], +["rustyh-tank-stuff-ag", "rustyh-tank-stuff", 5, ["RTH", "RUSTYH"], ""], +["rustyh-treasure-chest-ag", "rustyh-treasure-chest", 5, ["RTH", "RUSTYH"], ""], +["rustyh-blue-fish-ag", "rustyh-blue-fish", 5, ["RTH", "RUSTYH"], ""], +["rustyh-pink-fish-ag", "rustyh-pink-fish", 5, ["RTH", "RUSTYH"], ""], +["rustyh-fishtank-ag", "rustyh-fishtank", 5, ["RTH", "RUSTYH"], ""], +["rustyh-seaweed-c-ag", "rustyh-seaweed-c", 5, ["RTH", "RUSTYH"], ""], +["rustyh-seaweed-b-ag", "rustyh-seaweed-b", 5, ["RTH", "RUSTYH"], ""], +["rustyh-seaweed-d-ag", "rustyh-seaweed-d", 5, ["RTH", "RUSTYH"], ""], +["rustyh-seaweed-a-ag", "rustyh-seaweed-a", 5, ["RTH", "RUSTYH"], ""], +["rustyh-mug-ag", "rustyh-mug", 5, ["RTH", "RUSTYH"], ""], +["rustyh-mug-b-ag", "rustyh-mug-b", 5, ["RTH", "RUSTYH"], ""], +["rustyh-bar-stool-ag", "rustyh-bar-stool", 5, ["RTH", "RUSTYH"], ""], +["rustyh-small-fish-ag", "rustyh-small-fish", 5, ["RTH", "RUSTYH"], ""], +["rustyh-bottle-d-ag", "rustyh-bottle-d", 5, ["RTH", "RUSTYH"], ""], +["rustyh-bottle-c-ag", "rustyh-bottle-c", 5, ["RTH", "RUSTYH"], ""], +["rustyh-vis", "rustyh-vis", 5, ["RTH"], ""], +["tpage-132", "tpage-132", 5, ["RUSTYH"], ""], +["tpage-777", "tpage-777", 5, ["RUSTYH"], ""], +["tpage-945", "tpage-945", 5, ["RUSTYH"], ""], +["tpage-389", "tpage-389", 5, ["RUSTYH"], ""], +["tpage-1527", "tpage-1527", 5, ["RUSTYH"], ""], +["rustyh", "rustyh", 5, ["RUSTYH"], ""], +["tpage-2753", "tpage-2753", 5, ["S2A"], ""], +["sewera2-vis", "sewera2-vis", 5, ["S2A"], ""], +["tpage-3926", "tpage-3926", 5, ["S3A"], ""], +["sewera3-vis", "sewera3-vis", 5, ["S3A"], ""], +["tpage-1798", "tpage-1798", 5, ["SBWLCTF"], ""], +["tpage-1799", "tpage-1799", 5, ["SBWLCTF"], ""], +["sbwlctf", "sbwlctf", 5, ["SBWLCTF"], ""], +["tpage-2252", "tpage-2252", 5, ["SEWERS"], ""], +["tpage-2253", "tpage-2253", 5, ["SEWERS"], ""], +["tpage-2309", "tpage-2309", 5, ["SEWERS"], ""], +["sewers", "sewers", 5, ["SEWERS"], ""], +["sewertt", "sewertt", 5, ["SEWERTT"], ""], +["tpage-1513", "tpage-1513", 5, ["SEWERW"], ""], +["sewerw", "sewerw", 5, ["SEWERW"], ""], +["tpage-2799", "tpage-2799", 5, ["SEWFOOT"], ""], +["tpage-2800", "tpage-2800", 5, ["SEWFOOT"], ""], +["sewfoot", "sewfoot", 5, ["SEWFOOT"], ""], +["tpage-2623", "tpage-2623", 5, ["SEWTBOX"], ""], +["tpage-2624", "tpage-2624", 5, ["SEWTBOX"], ""], +["sewtbox", "sewtbox", 5, ["SEWTBOX"], ""], +["tpage-3953", "tpage-3953", 5, ["SIGCRED"], ""], +["sig-hr-cred-ag", "sig-hr-cred", 5, ["SIGCRED"], ""], +["sigcred", "sigcred", 5, ["SIGCRED"], ""], +["speech-sig", "speech-sig", 5, ["SIGLEV"], ""], +["tpage-3704", "tpage-3704", 5, ["SIGLEV"], ""], +["racesig-ag", "racesig", 5, ["SIGLEV"], ""], +["siglev", "siglev", 5, ["SIGLEV"], ""], +["sigvl", "sigvl", 5, ["SIGVL"], ""], +["sigvl2", "sigvl2", 5, ["SIGVL2"], ""], +["sigvl3", "sigvl3", 5, ["SIGVL3"], ""], +["snake-chassis-ag", "snake-chassis", 5, ["SNAKL"], ""], +["snake-door-a-ag", "snake-door-a", 5, ["SNAKL"], ""], +["snake-f-bumper-a-ag", "snake-f-bumper-a", 5, ["SNAKL"], ""], +["snake-hood-a-ag", "snake-hood-a", 5, ["SNAKL"], ""], +["snake-roof-a-ag", "snake-roof-a", 5, ["SNAKL"], ""], +["snakl", "snakl", 5, ["SNAKL"], ""], +["tpage-707", "tpage-707", 5, ["SNO"], ""], +["tpage-907", "tpage-907", 5, ["SNO"], ""], +["tpage-708", "tpage-708", 5, ["SNO"], ""], +["tpage-3982", "tpage-3982", 5, ["SNO"], ""], +["tpage-946", "tpage-946", 5, ["SNO"], ""], +["ice-debris-ag", "ice-debris", 5, ["SNO", "SNW"], ""], +["cliffs-wood-fence-d-ag", "cliffs-wood-fence-d", 5, ["SNO", "SNOX"], ""], +["snobowl-vis", "snobowl-vis", 5, ["SNO"], ""], +["tpage-1889", "tpage-1889", 5, ["SNOBART"], ""], +["snobart", "snobart", 5, ["SNOBART"], ""], +["tpage-1851", "tpage-1851", 5, ["SNOBOWLS"], ""], +["snobowls", "snobowls", 5, ["SNOBOWLS"], ""], +["tpage-1837", "tpage-1837", 5, ["SNOWFOOT"], ""], +["tpage-1869", "tpage-1869", 5, ["SNOWFOOT"], ""], +["snowfoot", "snowfoot", 5, ["SNOWFOOT"], ""], +["tpage-2350", "tpage-2350", 5, ["SNOWS"], ""], +["tpage-1845", "tpage-1845", 5, ["SNOWS"], ""], +["snows", "snows", 5, ["SNOWS"], ""], +["tpage-1784", "tpage-1784", 5, ["SNOWTBOX"], ""], +["tpage-2747", "tpage-2747", 5, ["SNOWTBOX"], ""], +["snowtbox", "snowtbox", 5, ["SNOWTBOX"], ""], +["tpage-2268", "tpage-2268", 5, ["SNOWTRN2"], ""], +["tpage-3912", "tpage-3912", 5, ["SNOWTRN2"], ""], +["snowtrn2", "snowtrn2", 5, ["SNOWTRN2"], ""], +["snowtt", "snowtt", 5, ["SNOWTT"], ""], +["tpage-1630", "tpage-1630", 5, ["SNOX"], ""], +["tpage-1918", "tpage-1918", 5, ["SNOX"], ""], +["tpage-1631", "tpage-1631", 5, ["SNOX"], ""], +["tpage-3983", "tpage-3983", 5, ["SNOX"], ""], +["tpage-1632", "tpage-1632", 5, ["SNOX"], ""], +["snobowlx-vis", "snobowlx-vis", 5, ["SNOX"], ""], +["snow-obs", "snow-obs", 5, ["SNW", "SNWX"], ""], +["snow-effects", "snow-effects", 5, ["SNW", "SNWX"], ""], +["snow-part", "snow-part", 5, ["SNW", "SNWX"], ""], +["tpage-282", "tpage-282", 5, ["SNW"], ""], +["tpage-285", "tpage-285", 5, ["SNW"], ""], +["tpage-284", "tpage-284", 5, ["SNW"], ""], +["tpage-283", "tpage-283", 5, ["SNW"], ""], +["tpage-287", "tpage-287", 5, ["SNW"], ""], +["snow-dinobreak-ag", "snow-dinobreak", 5, ["SNW", "SNWX"], ""], +["snow-icebreak-b-ag", "snow-icebreak-b", 5, ["SNW", "SNWX"], ""], +["snow-icebreak-a-ag", "snow-icebreak-a", 5, ["SNW", "SNWX"], ""], +["snow-vis", "snow-vis", 5, ["SNW"], ""], +["tpage-1739", "tpage-1739", 5, ["SNWX"], ""], +["tpage-1888", "tpage-1888", 5, ["SNWX"], ""], +["tpage-1741", "tpage-1741", 5, ["SNWX"], ""], +["tpage-3978", "tpage-3978", 5, ["SNWX"], ""], +["tpage-1740", "tpage-1740", 5, ["SNWX"], ""], +["snowx-vis", "snowx-vis", 5, ["SNWX"], ""], +["tpage-1610", "tpage-1610", 5, ["SPA"], ""], +["tpage-1611", "tpage-1611", 5, ["SPA"], ""], +["spargusa-vis", "spargusa-vis", 5, ["SPA"], ""], +["tpage-2621", "tpage-2621", 5, ["SPARFOOT"], ""], +["tpage-2622", "tpage-2622", 5, ["SPARFOOT"], ""], +["sparfoot", "sparfoot", 5, ["SPARFOOT"], ""], +["tpage-1939", "tpage-1939", 5, ["SPARGUSS"], ""], +["tpage-2204", "tpage-2204", 5, ["SPARGUSS"], ""], +["tpage-2326", "tpage-2326", 5, ["SPARGUSS"], ""], +["sparguss", "sparguss", 5, ["SPARGUSS"], ""], +["spargus-ocean", "spargus-ocean", 5, ["SPARGUSW", "SPARTEMW", "SPATOURW", "SPX", "STX"], ""], +["spargus-part", "spargus-part", 5, ["SPARGUSW", "SPARTEMW", "SPATOURW", "SPX", "STX"], ""], +["spargusw", "spargusw", 5, ["SPARGUSW"], ""], +["tpage-2552", "tpage-2552", 5, ["SPARTEMS"], ""], +["tpage-2553", "tpage-2553", 5, ["SPARTEMS"], ""], +["tpage-2686", "tpage-2686", 5, ["SPARTEMS"], ""], +["spartems", "spartems", 5, ["SPARTEMS"], ""], +["temple-part", "temple-part", 5, ["SPARTEMW", "SPATOURW", "STX", "TEMPLEW", "TPX"], ""], +["temple-effects", "temple-effects", 5, ["SPARTEMW", "SPATOURW", "STX", "TEMPLEW", "TPX"], ""], +["temple-ocean", "temple-ocean", 5, ["SPARTEMW", "SPATOURW", "STX", "TEMPLEW", "TPX"], ""], +["spartemw", "spartemw", 5, ["SPARTEMW"], ""], +["spartt", "spartt", 5, ["SPARTT"], ""], +["tpage-3815", "tpage-3815", 5, ["SPATFOOT"], ""], +["tpage-3816", "tpage-3816", 5, ["SPATFOOT"], ""], +["spatfoot", "spatfoot", 5, ["SPATFOOT"], ""], +["tpage-2803", "tpage-2803", 5, ["SPATOURS"], ""], +["tpage-2804", "tpage-2804", 5, ["SPATOURS"], ""], +["tpage-3603", "tpage-3603", 5, ["SPATOURS"], ""], +["spatours", "spatours", 5, ["SPATOURS"], ""], +["tpage-2786", "tpage-2786", 5, ["SPATOURW"], ""], +["spatourw", "spatourw", 5, ["SPATOURW"], ""], +["tpage-3466", "tpage-3466", 5, ["SPATTBOX"], ""], +["tpage-3467", "tpage-3467", 5, ["SPATTBOX"], ""], +["spattbox", "spattbox", 5, ["SPATTBOX"], ""], +["tpage-1615", "tpage-1615", 5, ["SPB"], ""], +["tpage-2402", "tpage-2402", 5, ["SPB"], ""], +["tpage-1616", "tpage-1616", 5, ["SPB"], ""], +["spar-lighthouse-light-ag", "spar-lighthouse-light", 5, ["SPB", "SPX", "STY"], ""], +["spargusb-vis", "spargusb-vis", 5, ["SPB"], ""], +["tpage-1607", "tpage-1607", 5, ["SPC"], ""], +["tpage-1608", "tpage-1608", 5, ["SPC"], ""], +["spargusc-vis", "spargusc-vis", 5, ["SPC"], ""], +["tpage-1613", "tpage-1613", 5, ["SPD"], ""], +["tpage-1614", "tpage-1614", 5, ["SPD"], ""], +["spargusd-vis", "spargusd-vis", 5, ["SPD"], ""], +["tpage-2249", "tpage-2249", 5, ["SPE"], ""], +["tpage-2250", "tpage-2250", 5, ["SPE"], ""], +["sparguse-vis", "sparguse-vis", 5, ["SPE"], ""], +["tpage-2322", "tpage-2322", 5, ["SPRGSTBX"], ""], +["tpage-2819", "tpage-2819", 5, ["SPRGSTBX"], ""], +["sprgstbx", "sprgstbx", 5, ["SPRGSTBX"], ""], +["tpage-2820", "tpage-2820", 5, ["SPTMFOOT"], ""], +["tpage-2821", "tpage-2821", 5, ["SPTMFOOT"], ""], +["sptmfoot", "sptmfoot", 5, ["SPTMFOOT"], ""], +["tpage-3468", "tpage-3468", 5, ["SPTMTBOX"], ""], +["tpage-3469", "tpage-3469", 5, ["SPTMTBOX"], ""], +["sptmtbox", "sptmtbox", 5, ["SPTMTBOX"], ""], +["sptmtt", "sptmtt", 5, ["SPTMTT"], ""], +["sptrtt", "sptrtt", 5, ["SPTRTT"], ""], +["tpage-2300", "tpage-2300", 5, ["SPX"], ""], +["tpage-2422", "tpage-2422", 5, ["SPX"], ""], +["spargusx-vis", "spargusx-vis", 5, ["SPX"], ""], +["tpage-2301", "tpage-2301", 5, ["SPY"], ""], +["spargusy-vis", "spargusy-vis", 5, ["SPY"], ""], +["tpage-2663", "tpage-2663", 5, ["STX"], ""], +["tpage-2664", "tpage-2664", 5, ["STX"], ""], +["tpage-3412", "tpage-3412", 5, ["STX"], ""], +["spartemx-vis", "spartemx-vis", 5, ["STX"], ""], +["tpage-2660", "tpage-2660", 5, ["STY"], ""], +["tpage-2661", "tpage-2661", 5, ["STY"], ""], +["spartemy-vis", "spartemy-vis", 5, ["STY"], ""], +["tpage-1933", "tpage-1933", 5, ["SWA"], ""], +["sewera-vis", "sewera-vis", 5, ["SWA"], ""], +["tpage-1928", "tpage-1928", 5, ["SWB"], ""], +["tpage-1926", "tpage-1926", 5, ["SWB"], ""], +["sewerb-vis", "sewerb-vis", 5, ["SWB"], ""], +["tpage-1923", "tpage-1923", 5, ["SWC"], ""], +["tpage-1922", "tpage-1922", 5, ["SWC"], ""], +["sewerc-vis", "sewerc-vis", 5, ["SWC"], ""], +["tpage-1925", "tpage-1925", 5, ["SWD"], ""], +["tpage-2209", "tpage-2209", 5, ["SWD"], ""], +["tpage-1924", "tpage-1924", 5, ["SWD"], ""], +["sewerd-vis", "sewerd-vis", 5, ["SWD"], ""], +["tpage-1930", "tpage-1930", 5, ["SWE"], ""], +["tpage-1931", "tpage-1931", 5, ["SWE"], ""], +["tpage-1929", "tpage-1929", 5, ["SWE"], ""], +["sewere-vis", "sewere-vis", 5, ["SWE"], ""], +["tpage-2367", "tpage-2367", 5, ["SWF"], ""], +["tpage-2366", "tpage-2366", 5, ["SWF"], ""], +["sewerf-vis", "sewerf-vis", 5, ["SWF"], ""], +["tpage-1991", "tpage-1991", 5, ["SWX"], ""], +["tpage-1992", "tpage-1992", 5, ["SWX"], ""], +["sewerx-vis", "sewerx-vis", 5, ["SWX"], ""], +["speech-taryn", "speech-taryn", 5, ["TARLEV"], ""], +["tpage-3705", "tpage-3705", 5, ["TARLEV"], ""], +["taryn-ag", "taryn", 5, ["TARLEV"], ""], +["tarlev", "tarlev", 5, ["TARLEV"], ""], +["tpage-2822", "tpage-2822", 5, ["TEMPFOOT"], ""], +["tpage-2823", "tpage-2823", 5, ["TEMPFOOT"], ""], +["tempfoot", "tempfoot", 5, ["TEMPFOOT"], ""], +["tpage-2844", "tpage-2844", 5, ["TEMPLES"], ""], +["tpage-3406", "tpage-3406", 5, ["TEMPLES"], ""], +["tpage-2687", "tpage-2687", 5, ["TEMPLES"], ""], +["temples", "temples", 5, ["TEMPLES"], ""], +["templett", "templett", 5, ["TEMPLETT"], ""], +["templew", "templew", 5, ["TEMPLEW"], ""], +["tpage-3444", "tpage-3444", 5, ["TEMPTBOX"], ""], +["tpage-3445", "tpage-3445", 5, ["TEMPTBOX"], ""], +["temptbox", "temptbox", 5, ["TEMPTBOX"], ""], +["tpage-3936", "tpage-3936", 5, ["THACRED"], ""], +["tha-hr-cred-ag", "tha-hr-cred", 5, ["THACRED"], ""], +["thacred", "thacred", 5, ["THACRED"], ""], +["speech-thuga", "speech-thuga", 5, ["THALEV"], ""], +["tpage-3706", "tpage-3706", 5, ["THALEV"], ""], +["thuga-low-ag", "thuga-low", 5, ["THALEV"], ""], +["thalev", "thalev", 5, ["THALEV"], ""], +["thavl", "thavl", 5, ["THAVL"], ""], +["thavl2", "thavl2", 5, ["THAVL2"], ""], +["thavl3", "thavl3", 5, ["THAVL3"], ""], +["tpage-3964", "tpage-3964", 5, ["THBCRED"], ""], +["thb-hr-cred-ag", "thb-hr-cred", 5, ["THBCRED"], ""], +["thbcred", "thbcred", 5, ["THBCRED"], ""], +["speech-thugb", "speech-thugb", 5, ["THBLEV"], ""], +["tpage-3707", "tpage-3707", 5, ["THBLEV"], ""], +["thugb-low-ag", "thugb-low", 5, ["THBLEV"], ""], +["thblev", "thblev", 5, ["THBLEV"], ""], +["thbvl", "thbvl", 5, ["THBVL"], ""], +["thbvl2", "thbvl2", 5, ["THBVL2"], ""], +["thbvl3", "thbvl3", 5, ["THBVL3"], ""], +["tpage-3942", "tpage-3942", 5, ["THCCRED"], ""], +["thc-hr-cred-ag", "thc-hr-cred", 5, ["THCCRED"], ""], +["thccred", "thccred", 5, ["THCCRED"], ""], +["speech-thugc", "speech-thugc", 5, ["THCLEV"], ""], +["tpage-3708", "tpage-3708", 5, ["THCLEV"], ""], +["thugc-low-ag", "thugc-low", 5, ["THCLEV"], ""], +["thclev", "thclev", 5, ["THCLEV"], ""], +["wombat-door-c-ag", "wombat-door-c", 5, ["THCVL", "WOMBL"], ""], +["wombat-f-fender-b-ag", "wombat-f-fender-b", 5, ["THCVL", "WOMBL"], ""], +["wombat-hood-c-ag", "wombat-hood-c", 5, ["THCVL", "WOMBL"], ""], +["wombat-r-fender-a-ag", "wombat-r-fender-a", 5, ["THCVL", "WOMBL"], ""], +["thcvl", "thcvl", 5, ["THCVL"], ""], +["thcvl2", "thcvl2", 5, ["THCVL2"], ""], +["thcvl3", "thcvl3", 5, ["THCVL3"], ""], +["tiger-door-a-ag", "tiger-door-a", 5, ["TIGEL"], ""], +["tiger-door-b-ag", "tiger-door-b", 5, ["TIGEL"], ""], +["tiger-door-d-ag", "tiger-door-d", 5, ["TIGEL", "TORVL"], ""], +["tiger-f-fender-a-ag", "tiger-f-fender-a", 5, ["TIGEL"], ""], +["tiger-f-fender-c-ag", "tiger-f-fender-c", 5, ["TIGEL", "TORVL"], ""], +["tiger-f-fender-d-ag", "tiger-f-fender-d", 5, ["TIGEL"], ""], +["tiger-f-fender-e-ag", "tiger-f-fender-e", 5, ["TIGEL"], ""], +["tiger-hood-a-ag", "tiger-hood-a", 5, ["TIGEL", "TORVL"], ""], +["tiger-hood-b-ag", "tiger-hood-b", 5, ["TIGEL"], ""], +["tiger-hood-c-ag", "tiger-hood-c", 5, ["TIGEL"], ""], +["tiger-r-fender-b-ag", "tiger-r-fender-b", 5, ["TIGEL", "TORVL"], ""], +["tiger-r-fender-c-ag", "tiger-r-fender-c", 5, ["TIGEL"], ""], +["tiger-r-fender-e-ag", "tiger-r-fender-e", 5, ["TIGEL"], ""], +["tiger-roof-a-ag", "tiger-roof-a", 5, ["TIGEL"], ""], +["tiger-roof-b-ag", "tiger-roof-b", 5, ["TIGEL"], ""], +["tiger-roof-d-ag", "tiger-roof-d", 5, ["TIGEL", "TORVL"], ""], +["tigel", "tigel", 5, ["TIGEL"], ""], +["toad-chassis-ag", "toad-chassis", 5, ["TOADL"], ""], +["toad-door-a-ag", "toad-door-a", 5, ["TOADL"], ""], +["toad-f-fender-a-ag", "toad-f-fender-a", 5, ["TOADL"], ""], +["toad-hood-a-ag", "toad-hood-a", 5, ["TOADL"], ""], +["toad-r-fender-a-ag", "toad-r-fender-a", 5, ["TOADL"], ""], +["toad-roof-a-ag", "toad-roof-a", 5, ["TOADL"], ""], +["toad-trunk-a-ag", "toad-trunk-a", 5, ["TOADL"], ""], +["toad-wheel-ag", "toad-wheel", 5, ["TOADL"], ""], +["toadl", "toadl", 5, ["TOADL"], ""], +["tpage-3949", "tpage-3949", 5, ["TORCRED"], ""], +["tor-hr-cred-ag", "tor-hr-cred", 5, ["TORCRED"], ""], +["torcred", "torcred", 5, ["TORCRED"], ""], +["speech-torn", "speech-torn", 5, ["TORLEV"], ""], +["tpage-3709", "tpage-3709", 5, ["TORLEV"], ""], +["racetorn-ag", "racetorn", 5, ["TORLEV"], ""], +["torlev", "torlev", 5, ["TORLEV"], ""], +["torvl", "torvl", 5, ["TORVL"], ""], +["torvl2", "torvl2", 5, ["TORVL2"], ""], +["wolf-door-b-ag", "wolf-door-b", 5, ["TORVL3", "WOLFL"], ""], +["wolf-f-bumper-b-ag", "wolf-f-bumper-b", 5, ["TORVL3", "WOLFL"], ""], +["wolf-hood-e-ag", "wolf-hood-e", 5, ["TORVL3", "WOLFL"], ""], +["wolf-r-bumper-b-ag", "wolf-r-bumper-b", 5, ["TORVL3", "WOLFL"], ""], +["torvl3", "torvl3", 5, ["TORVL3"], ""], +["tpage-2685", "tpage-2685", 5, ["TPA"], ""], +["tpage-3618", "tpage-3618", 5, ["TPA"], ""], +["templea-vis", "templea-vis", 5, ["TPA"], ""], +["tpage-2679", "tpage-2679", 5, ["TPB"], ""], +["tpage-3675", "tpage-3675", 5, ["TPB"], ""], +["templeb-vis", "templeb-vis", 5, ["TPB"], ""], +["tpage-2690", "tpage-2690", 5, ["TPC"], ""], +["tpage-3859", "tpage-3859", 5, ["TPC"], ""], +["templec-vis", "templec-vis", 5, ["TPC"], ""], +["tpage-2693", "tpage-2693", 5, ["TPD"], ""], +["tpage-3687", "tpage-3687", 5, ["TPD"], ""], +["tpage-2694", "tpage-2694", 5, ["TPD"], ""], +["tpage-3408", "tpage-3408", 5, ["TPD"], ""], +["templed-vis", "templed-vis", 5, ["TPD"], ""], +["tpage-2695", "tpage-2695", 5, ["TPE"], ""], +["tpage-3685", "tpage-3685", 5, ["TPE"], ""], +["tpage-3858", "tpage-3858", 5, ["TPE"], ""], +["templee-vis", "templee-vis", 5, ["TPE"], ""], +["tpage-2698", "tpage-2698", 5, ["TPX"], ""], +["tpage-2699", "tpage-2699", 5, ["TPX"], ""], +["tpage-3779", "tpage-3779", 5, ["TPX"], ""], +["templex-vis", "templex-vis", 5, ["TPX"], ""], +["tpage-2704", "tpage-2704", 5, ["TPY"], ""], +["tpage-3413", "tpage-3413", 5, ["TPY"], ""], +["templey-vis", "templey-vis", 5, ["TPY"], ""], +["turtle-chassis-ag", "turtle-chassis", 5, ["TURTL"], ""], +["turtle-door-a-ag", "turtle-door-a", 5, ["TURTL"], ""], +["turtle-f-fender-a-ag", "turtle-f-fender-a", 5, ["TURTL"], ""], +["turtle-hood-a-ag", "turtle-hood-a", 5, ["TURTL"], ""], +["turtle-r-fender-a-ag", "turtle-r-fender-a", 5, ["TURTL"], ""], +["turtle-roof-a-ag", "turtle-roof-a", 5, ["TURTL"], ""], +["turtle-trunk-a-ag", "turtle-trunk-a", 5, ["TURTL"], ""], +["turtle-wheel-ag", "turtle-wheel", 5, ["TURTL"], ""], +["turtl", "turtl", 5, ["TURTL"], ""], +["tpage-3955", "tpage-3955", 5, ["UR8CRED"], ""], +["ur8-hr-cred-ag", "ur8-hr-cred", 5, ["UR8CRED"], ""], +["ur8cred", "ur8cred", 5, ["UR8CRED"], ""], +["speech-ur86", "speech-ur86", 5, ["UR8LEV"], ""], +["tpage-3710", "tpage-3710", 5, ["UR8LEV"], ""], +["ur-86-low-ag", "ur-86-low", 5, ["UR8LEV"], ""], +["ur8lev", "ur8lev", 5, ["UR8LEV"], ""], +["ur8vl", "ur8vl", 5, ["UR8VL"], ""], +["ur8vl2", "ur8vl2", 5, ["UR8VL2"], ""], +["wolf-door-c-ag", "wolf-door-c", 5, ["UR8VL3", "WOLFL"], ""], +["wolf-f-bumper-c-ag", "wolf-f-bumper-c", 5, ["UR8VL3", "WOLFL"], ""], +["wolf-r-bumper-d-ag", "wolf-r-bumper-d", 5, ["UR8VL3", "WOLFL"], ""], +["ur8vl3", "ur8vl3", 5, ["UR8VL3"], ""], +["wolf-door-a-ag", "wolf-door-a", 5, ["WOLFL"], ""], +["wolf-door-e-ag", "wolf-door-e", 5, ["WOLFL"], ""], +["wolf-f-bumper-d-ag", "wolf-f-bumper-d", 5, ["WOLFL"], ""], +["wolf-f-bumper-e-ag", "wolf-f-bumper-e", 5, ["WOLFL"], ""], +["wolf-hood-a-ag", "wolf-hood-a", 5, ["WOLFL"], ""], +["wolf-hood-b-ag", "wolf-hood-b", 5, ["WOLFL"], ""], +["wolf-hood-d-ag", "wolf-hood-d", 5, ["WOLFL"], ""], +["wolf-r-bumper-c-ag", "wolf-r-bumper-c", 5, ["WOLFL"], ""], +["wolf-r-bumper-e-ag", "wolf-r-bumper-e", 5, ["WOLFL"], ""], +["wolf-roof-a-ag", "wolf-roof-a", 5, ["WOLFL"], ""], +["wolf-roof-b-ag", "wolf-roof-b", 5, ["WOLFL"], ""], +["wolf-roof-c-ag", "wolf-roof-c", 5, ["WOLFL"], ""], +["wolf-roof-e-ag", "wolf-roof-e", 5, ["WOLFL"], ""], +["wolfl", "wolfl", 5, ["WOLFL"], ""], +["wombat-door-a-ag", "wombat-door-a", 5, ["WOMBL"], ""], +["wombat-door-b-ag", "wombat-door-b", 5, ["WOMBL"], ""], +["wombat-door-d-ag", "wombat-door-d", 5, ["WOMBL"], ""], +["wombat-f-fender-a-ag", "wombat-f-fender-a", 5, ["WOMBL"], ""], +["wombat-f-fender-c-ag", "wombat-f-fender-c", 5, ["WOMBL"], ""], +["wombat-f-fender-d-ag", "wombat-f-fender-d", 5, ["WOMBL"], ""], +["wombat-f-fender-e-ag", "wombat-f-fender-e", 5, ["WOMBL"], ""], +["wombat-hood-a-ag", "wombat-hood-a", 5, ["WOMBL"], ""], +["wombat-hood-b-ag", "wombat-hood-b", 5, ["WOMBL"], ""], +["wombat-hood-d-ag", "wombat-hood-d", 5, ["WOMBL"], ""], +["wombat-r-fender-c-ag", "wombat-r-fender-c", 5, ["WOMBL"], ""], +["wombat-r-fender-d-ag", "wombat-r-fender-d", 5, ["WOMBL"], ""], +["wombat-r-fender-e-ag", "wombat-r-fender-e", 5, ["WOMBL"], ""], +["wombat-roof-a-ag", "wombat-roof-a", 5, ["WOMBL"], ""], +["wombat-roof-c-ag", "wombat-roof-c", 5, ["WOMBL"], ""], +["wombat-roof-d-ag", "wombat-roof-d", 5, ["WOMBL"], ""], +["wombat-roof-e-ag", "wombat-roof-e", 5, ["WOMBL"], ""], +["wombat-trunk-a-ag", "wombat-trunk-a", 5, ["WOMBL"], ""], +["wombat-trunk-b-ag", "wombat-trunk-b", 5, ["WOMBL"], ""], +["wombat-trunk-c-ag", "wombat-trunk-c", 5, ["WOMBL"], ""], +["wombat-trunk-e-ag", "wombat-trunk-e", 5, ["WOMBL"], ""], +["wombl", "wombl", 5, ["WOMBL"], ""], +["speech-ximon", "speech-ximon", 5, ["XIMLEV"], ""], +["tpage-3711", "tpage-3711", 5, ["XIMLEV"], ""], +["ximon-ag", "ximon", 5, ["XIMLEV"], ""], +["ximlev", "ximlev", 5, ["XIMLEV"], ""], +["0COMMON", "0COMMON", 5, ["NO-XGO"], ""], +["0SUBTIT", "0SUBTIT", 5, ["NO-XGO"], ""], +["1COMMON", "1COMMON", 5, ["NO-XGO"], ""], +["1SUBTIT", "1SUBTIT", 5, ["NO-XGO"], ""], +["2COMMON", "2COMMON", 5, ["NO-XGO"], ""], +["2SUBTIT", "2SUBTIT", 5, ["NO-XGO"], ""], +["3COMMON", "3COMMON", 5, ["NO-XGO"], ""], +["3SUBTIT", "3SUBTIT", 5, ["NO-XGO"], ""], +["4COMMON", "4COMMON", 5, ["NO-XGO"], ""], +["4SUBTIT", "4SUBTIT", 5, ["NO-XGO"], ""], +["5COMMON", "5COMMON", 5, ["NO-XGO"], ""], +["5SUBTIT", "5SUBTIT", 5, ["NO-XGO"], ""], +["6COMMON", "6COMMON", 5, ["NO-XGO"], ""], +["6SUBTIT", "6SUBTIT", 5, ["NO-XGO"], ""], +["7COMMON", "7COMMON", 5, ["NO-XGO"], ""], +["7SUBTIT", "7SUBTIT", 5, ["NO-XGO"], ""], +["8COMMON", "8COMMON", 5, ["NO-XGO"], ""], +["8SUBTIT", "8SUBTIT", 5, ["NO-XGO"], ""], +["9COMMON", "9COMMON", 5, ["NO-XGO"], ""], +["9SUBTIT", "9SUBTIT", 5, ["NO-XGO"], ""], +["10COMMON", "10COMMON", 5, ["NO-XGO"], ""], +["10SUBTIT", "10SUBTIT", 5, ["NO-XGO"], ""], +["11COMMON", "11COMMON", 5, ["NO-XGO"], ""], +["11SUBTIT", "11SUBTIT", 5, ["NO-XGO"], ""]] diff --git a/scripts/tasks/update-env.py b/scripts/tasks/update-env.py index 5bf045f1f2..58231cd138 100644 --- a/scripts/tasks/update-env.py +++ b/scripts/tasks/update-env.py @@ -34,12 +34,13 @@ if args.info: print(file) sys.exit(0) -valid_games = ["jak1", "jak2", "jak3"] +valid_games = ["jak1", "jak2", "jak3", "jakx"] decomp_config_map = { "jak1": "jak1/jak1_config.jsonc", "jak2": "jak2/jak2_config.jsonc", - "jak3": "jak3/jak3_config.jsonc" + "jak3": "jak3/jak3_config.jsonc", + "jakx": "jakx/jakx_config.jsonc" } decomp_config_version_map = { @@ -60,19 +61,25 @@ decomp_config_version_map = { "jak3": { "ntscv1": "ntsc_v1", "pal": "pal" + }, + "jakx": { + "ntscv1": "ntsc_v1", + "pal": "pal" } } default_config_version_map = { "jak1": "ntsc_v1", "jak2": "ntsc_v1", - "jak3": "ntsc_v1" + "jak3": "ntsc_v1", + "jakx": "ntsc_v1" } type_consistency_filter_map = { "jak1": "Jak1TypeConsistency", "jak2": "Jak2TypeConsistency", - "jak3": "Jak3TypeConsistency" + "jak3": "Jak3TypeConsistency", + "jakx": "JakXTypeConsistency" } if args.game: diff --git a/test/goalc/test_type_consistency.cpp b/test/goalc/test_type_consistency.cpp index 516efd9fba..66c8df1168 100644 --- a/test/goalc/test_type_consistency.cpp +++ b/test/goalc/test_type_consistency.cpp @@ -19,6 +19,8 @@ void add_jak2_expected_type_mismatches(Compiler& c) { void add_jak3_expected_type_mismatches(Compiler& /*c*/) {} +void add_jakx_expected_type_mismatches(Compiler& /*c*/) {} + TEST(Jak1TypeConsistency, MANUAL_TEST_TypeConsistencyWithBuildFirst) { Compiler compiler(GameVersion::Jak1); compiler.enable_throw_on_redefines(); @@ -46,6 +48,15 @@ TEST(Jak3TypeConsistency, TypeConsistencyWithBuildFirst) { compiler.run_test_no_load("decompiler/config/jak3/all-types.gc"); } +// TEST(JakXTypeConsistency, TypeConsistencyWithBuildFirst) { +// Compiler compiler(GameVersion::JakX); +// compiler.enable_throw_on_redefines(); +// add_common_expected_type_mismatches(compiler); +// add_jakx_expected_type_mismatches(compiler); +// compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc"); +// compiler.run_test_no_load("decompiler/config/jakx/all-types.gc"); +// } + TEST(Jak1TypeConsistency, TypeConsistency) { Compiler compiler(GameVersion::Jak1); compiler.enable_throw_on_redefines(); @@ -72,3 +83,12 @@ TEST(Jak3TypeConsistency, TypeConsistency) { compiler.run_test_no_load("decompiler/config/jak3/all-types.gc"); compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc"); } + +// TEST(JakXTypeConsistency, TypeConsistency) { +// Compiler compiler(GameVersion::JakX); +// compiler.enable_throw_on_redefines(); +// add_common_expected_type_mismatches(compiler); +// add_jakx_expected_type_mismatches(compiler); +// compiler.run_test_no_load("decompiler/config/jakx/all-types.gc"); +// compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc"); +// } diff --git a/third-party/discord-rpc/thirdparty/rapidjson-1.1.0/doc/diagram/makefile b/third-party/discord-rpc/thirdparty/rapidjson-1.1.0/doc/diagram/makefile new file mode 100644 index 0000000000..3483977655 --- /dev/null +++ b/third-party/discord-rpc/thirdparty/rapidjson-1.1.0/doc/diagram/makefile @@ -0,0 +1,8 @@ +%.pdf: %.dot + dot $< -Tpdf -o $@ + +%.png: %.dot + dot $< -Tpng -o $@ + +DOTFILES = $(basename $(wildcard *.dot)) +all: $(addsuffix .png, $(DOTFILES)) $(addsuffix .pdf, $(DOTFILES)) diff --git a/tools/type_searcher/main.cpp b/tools/type_searcher/main.cpp index 1ab6a4d37a..4a28289162 100644 --- a/tools/type_searcher/main.cpp +++ b/tools/type_searcher/main.cpp @@ -66,6 +66,8 @@ int main(int argc, char** argv) { case GameVersion::Jak3: dts.parse_type_defs({"decompiler", "config", "jak3", "all-types.gc"}); break; + case GameVersion::JakX: + dts.parse_type_defs({"decompiler", "config", "jakx", "all-types.gc"}); default: lg::error("unsupported game version"); return 1;