From d3cc739e43741e66b249eeda06a7941c28bd33be Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Wed, 31 Dec 2025 21:08:44 -0500 Subject: [PATCH] jakx: Commit existing work from other PRs (#4112) This attempts to get into master whatever work was done in this PR / it's earlier PR https://github.com/open-goal/jak-project/pull/3965 I don't want this work to be lost / floating around in massive PRs. However the changes are: - switch to ntsc_v1 instead of PAL as the development target, as we have done for all other games - remove most of the copied-from-jak2/3 changes as they need to be confirmed during the decompilation process not just assumed - avoids committing any changes to `game/kernel/common` as it was not clear to me if these were changes made in jak x's kernel that were not properly broken out into it's own functions. We don't want to accidentally introduce bugs into jak1-3's kernel code. - in other words, if the change in the kernel only happens in jak x...it should likely be specific to jak x's kernel, not common. --------- Co-authored-by: VodBox Co-authored-by: yodah --- .vs/launch.vs.json | 26 + Taskfile.yml | 2 + common/audio/audio_formats.cpp | 5 +- common/audio/audio_formats.h | 4 +- common/goal_constants.h | 11 + common/symbols.h | 176 + common/type_system/TypeSystem.cpp | 1 + common/util/dgo_util.cpp | 3 +- common/util/font/dbs/font_db_jakx.cpp | 795 + common/util/font/dbs/font_db_jakx.h | 14 + common/versions/versions.cpp | 8 +- common/versions/versions.h | 15 +- decompiler/IR2/Form.cpp | 1 + decompiler/IR2/Form.h | 2 + decompiler/ObjectFile/ObjectFileDB.cpp | 9 +- decompiler/ObjectFile/ObjectFileDB.h | 2 +- decompiler/analysis/atomic_op_builder.cpp | 1 + decompiler/analysis/cfg_builder.cpp | 3 +- decompiler/analysis/find_defpartgroup.cpp | 50 +- decompiler/analysis/find_skelgroups.cpp | 8 +- decompiler/analysis/insert_lets.cpp | 18 +- decompiler/analysis/mips2c.cpp | 1 + decompiler/config.cpp | 2 +- .../config/jak3/ntsc_v1/type_casts.jsonc | 4 +- decompiler/config/jakx/all-types.gc | 56408 ++++++++++++++++ decompiler/config/jakx/jakx_config.jsonc | 156 + .../ntsc_v1/anonymous_function_types.jsonc | 5 + .../jakx/ntsc_v1/art-group-info.min.json | 1 + decompiler/config/jakx/ntsc_v1/art_info.jsonc | 55 + decompiler/config/jakx/ntsc_v1/hacks.jsonc | 76 + .../config/jakx/ntsc_v1/import_deps.jsonc | 1 + decompiler/config/jakx/ntsc_v1/inputs.jsonc | 428 + .../jakx/ntsc_v1/joint-node-info.min.json | 1 + .../config/jakx/ntsc_v1/label_types.jsonc | 6 + .../config/jakx/ntsc_v1/part-groups.min.json | 1 + .../process_stack_size_overrides.jsonc | 4 + .../jakx/ntsc_v1/stack_structures.jsonc | 3 + .../config/jakx/ntsc_v1/tex-info.min.json | 1 + .../config/jakx/ntsc_v1/type_casts.jsonc | 18 + .../config/jakx/ntsc_v1/var_names.jsonc | 5 + .../anonymous_function_types.jsonc | 901 + .../jakx/potentially_useful/hacks.jsonc | 785 + .../process_stack_size_overrides.jsonc | 15 + .../potentially_useful/stack_structures.jsonc | 2522 + .../jakx/potentially_useful/type_casts.jsonc | 11232 +++ .../jakx/potentially_useful/var_names.jsonc | 2143 + decompiler/data/StrFileReader.cpp | 1 + decompiler/data/dir_tpages.cpp | 3 +- decompiler/data/game_text.cpp | 250 +- decompiler/data/streamed_audio.cpp | 13 +- decompiler/data/tpage.cpp | 3 + decompiler/decompilation_process.cpp | 21 +- decompiler/level_extractor/BspHeader.cpp | 8 +- decompiler/level_extractor/extract_merc.cpp | 9 +- decompiler/level_extractor/extract_tie.cpp | 3 +- decompiler/types2/ForwardProp.cpp | 8 + decompiler/util/DecompilerTypeSystem.cpp | 24 +- decompiler/util/data_decompile.cpp | 4 + decompiler/util/sparticle_decompile.cpp | 154 +- decompiler/util/type_utils.h | 5 +- game/CMakeLists.txt | 39 + game/common/dgo_rpc_types.h | 2 +- game/common/loader_rpc_types.h | 2 +- game/common/play_rpc_types.h | 2 +- game/common/player_rpc_types.h | 2 +- game/common/ramdisk_rpc_types.h | 2 +- game/common/str_rpc_types.h | 2 +- game/external/discord_jakx.cpp | 38 + game/external/discord_jakx.h | 11 + game/graphics/gfx.cpp | 3 +- game/graphics/jakx_texture_remap.cpp | 25 + game/graphics/jakx_texture_remap.h | 3 + .../graphics/opengl_renderer/BlitDisplays.cpp | 1 + .../opengl_renderer/CollideMeshRenderer.cpp | 1 + .../opengl_renderer/CollideMeshRenderer.h | 2 +- .../opengl_renderer/DirectRenderer.cpp | 4 +- game/graphics/opengl_renderer/EyeRenderer.cpp | 1 + .../opengl_renderer/OpenGLRenderer.cpp | 3 + .../opengl_renderer/TextureAnimator.cpp | 16 + .../opengl_renderer/TextureAnimatorDefs.cpp | 2 +- .../opengl_renderer/foreground/Merc2.cpp | 3 +- .../opengl_renderer/ocean/OceanMidAndFar.cpp | 2 + .../opengl_renderer/ocean/OceanNear.cpp | 1 + .../opengl_renderer/ocean/OceanTexture.cpp | 1 + .../opengl_renderer/sprite/Sprite3.cpp | 7 +- .../sprite/Sprite3_Distort.cpp | 1 + game/graphics/pipelines/opengl.cpp | 3 +- game/graphics/texture/TexturePool.cpp | 2 + game/kernel/common/fileio.h | 9 +- game/kernel/common/klink.h | 11 + game/kernel/common/kmachine.cpp | 10 + game/kernel/common/kmachine.h | 1 + game/kernel/common/kmemcard.h | 4 +- game/kernel/common/memory_layout.h | 6 +- game/kernel/jakx/fileio.cpp | 266 + game/kernel/jakx/fileio.h | 6 + game/kernel/jakx/kboot.cpp | 187 + game/kernel/jakx/kboot.h | 11 + game/kernel/jakx/kdgo.cpp | 235 + game/kernel/jakx/kdgo.h | 20 + game/kernel/jakx/kdsnetm.cpp | 3 + game/kernel/jakx/kdsnetm.h | 3 + game/kernel/jakx/klink.cpp | 1089 + game/kernel/jakx/klink.h | 20 + game/kernel/jakx/klisten.cpp | 121 + game/kernel/jakx/klisten.h | 20 + game/kernel/jakx/kmachine.cpp | 557 + game/kernel/jakx/kmachine.h | 8 + game/kernel/jakx/kmachine_extras.cpp | 961 + game/kernel/jakx/kmachine_extras.h | 261 + game/kernel/jakx/kmalloc.cpp | 16 + game/kernel/jakx/kmalloc.h | 9 + game/kernel/jakx/kmemcard.cpp | 3 + game/kernel/jakx/kmemcard.h | 3 + game/kernel/jakx/kprint.cpp | 569 + game/kernel/jakx/kprint.h | 12 + game/kernel/jakx/kscheme.cpp | 1990 + game/kernel/jakx/kscheme.h | 78 + game/kernel/jakx/ksocket.cpp | 3 + game/kernel/jakx/ksocket.h | 3 + game/kernel/jakx/ksound.cpp | 20 + game/kernel/jakx/ksound.h | 5 + game/mips2c/jakx_functions/todo.txt | 1 + game/mips2c/mips2c_table.cpp | 4 +- game/overlord/jakx/basefile.cpp | 333 + game/overlord/jakx/basefile.h | 76 + game/overlord/jakx/basefilesystem.cpp | 26 + game/overlord/jakx/basefilesystem.h | 33 + game/overlord/jakx/dma.cpp | 625 + game/overlord/jakx/dma.h | 48 + game/overlord/jakx/dvd_driver.cpp | 589 + game/overlord/jakx/dvd_driver.h | 145 + game/overlord/jakx/init.cpp | 50 + game/overlord/jakx/init.h | 5 + game/overlord/jakx/iso.cpp | 1787 + game/overlord/jakx/iso.h | 92 + game/overlord/jakx/iso_api.cpp | 221 + game/overlord/jakx/iso_api.h | 19 + game/overlord/jakx/iso_cd.cpp | 530 + game/overlord/jakx/iso_cd.h | 58 + game/overlord/jakx/iso_queue.cpp | 732 + game/overlord/jakx/iso_queue.h | 30 + game/overlord/jakx/isocommon.cpp | 118 + game/overlord/jakx/isocommon.h | 153 + game/overlord/jakx/list.cpp | 54 + game/overlord/jakx/list.h | 27 + game/overlord/jakx/overlord.cpp | 151 + game/overlord/jakx/overlord.h | 61 + game/overlord/jakx/pagemanager.cpp | 853 + game/overlord/jakx/pagemanager.h | 181 + game/overlord/jakx/ramdisk.cpp | 50 + game/overlord/jakx/ramdisk.h | 10 + game/overlord/jakx/rpc_interface.h | 280 + game/overlord/jakx/sbank.cpp | 176 + game/overlord/jakx/sbank.h | 30 + game/overlord/jakx/soundcommon.cpp | 19 + game/overlord/jakx/soundcommon.h | 7 + game/overlord/jakx/spustreams.cpp | 1066 + game/overlord/jakx/spustreams.h | 14 + game/overlord/jakx/srpc.cpp | 610 + game/overlord/jakx/srpc.h | 16 + game/overlord/jakx/ssound.cpp | 1002 + game/overlord/jakx/ssound.h | 51 + game/overlord/jakx/stream.cpp | 279 + game/overlord/jakx/stream.h | 13 + game/overlord/jakx/streamlist.cpp | 339 + game/overlord/jakx/streamlist.h | 22 + game/overlord/jakx/todo.txt | 6 + game/overlord/jakx/vag.cpp | 1042 + game/overlord/jakx/vag.h | 173 + game/overlord/jakx/vblank_handler.cpp | 201 + game/overlord/jakx/vblank_handler.h | 12 + game/runtime.cpp | 9 +- game/sce/sif_ee.cpp | 4 + game/sce/sif_ee.h | 1 + goal_src/jakx/build/all_objs.json | 2476 + scripts/tasks/update-env.py | 15 +- test/goalc/test_type_consistency.cpp | 20 + .../rapidjson-1.1.0/doc/diagram/makefile | 8 + tools/type_searcher/main.cpp | 2 + 180 files changed, 97960 insertions(+), 130 deletions(-) create mode 100644 common/util/font/dbs/font_db_jakx.cpp create mode 100644 common/util/font/dbs/font_db_jakx.h create mode 100644 decompiler/config/jakx/all-types.gc create mode 100644 decompiler/config/jakx/jakx_config.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/anonymous_function_types.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/art-group-info.min.json create mode 100644 decompiler/config/jakx/ntsc_v1/art_info.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/hacks.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/import_deps.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/inputs.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/joint-node-info.min.json create mode 100644 decompiler/config/jakx/ntsc_v1/label_types.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/part-groups.min.json create mode 100644 decompiler/config/jakx/ntsc_v1/process_stack_size_overrides.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/stack_structures.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/tex-info.min.json create mode 100644 decompiler/config/jakx/ntsc_v1/type_casts.jsonc create mode 100644 decompiler/config/jakx/ntsc_v1/var_names.jsonc create mode 100644 decompiler/config/jakx/potentially_useful/anonymous_function_types.jsonc create mode 100644 decompiler/config/jakx/potentially_useful/hacks.jsonc create mode 100644 decompiler/config/jakx/potentially_useful/process_stack_size_overrides.jsonc create mode 100644 decompiler/config/jakx/potentially_useful/stack_structures.jsonc create mode 100644 decompiler/config/jakx/potentially_useful/type_casts.jsonc create mode 100644 decompiler/config/jakx/potentially_useful/var_names.jsonc create mode 100644 game/external/discord_jakx.cpp create mode 100644 game/external/discord_jakx.h create mode 100644 game/graphics/jakx_texture_remap.cpp create mode 100644 game/graphics/jakx_texture_remap.h create mode 100644 game/kernel/jakx/fileio.cpp create mode 100644 game/kernel/jakx/fileio.h create mode 100644 game/kernel/jakx/kboot.cpp create mode 100644 game/kernel/jakx/kboot.h create mode 100644 game/kernel/jakx/kdgo.cpp create mode 100644 game/kernel/jakx/kdgo.h create mode 100644 game/kernel/jakx/kdsnetm.cpp create mode 100644 game/kernel/jakx/kdsnetm.h create mode 100644 game/kernel/jakx/klink.cpp create mode 100644 game/kernel/jakx/klink.h create mode 100644 game/kernel/jakx/klisten.cpp create mode 100644 game/kernel/jakx/klisten.h create mode 100644 game/kernel/jakx/kmachine.cpp create mode 100644 game/kernel/jakx/kmachine.h create mode 100644 game/kernel/jakx/kmachine_extras.cpp create mode 100644 game/kernel/jakx/kmachine_extras.h create mode 100644 game/kernel/jakx/kmalloc.cpp create mode 100644 game/kernel/jakx/kmalloc.h create mode 100644 game/kernel/jakx/kmemcard.cpp create mode 100644 game/kernel/jakx/kmemcard.h create mode 100644 game/kernel/jakx/kprint.cpp create mode 100644 game/kernel/jakx/kprint.h create mode 100644 game/kernel/jakx/kscheme.cpp create mode 100644 game/kernel/jakx/kscheme.h create mode 100644 game/kernel/jakx/ksocket.cpp create mode 100644 game/kernel/jakx/ksocket.h create mode 100644 game/kernel/jakx/ksound.cpp create mode 100644 game/kernel/jakx/ksound.h create mode 100644 game/mips2c/jakx_functions/todo.txt create mode 100644 game/overlord/jakx/basefile.cpp create mode 100644 game/overlord/jakx/basefile.h create mode 100644 game/overlord/jakx/basefilesystem.cpp create mode 100644 game/overlord/jakx/basefilesystem.h create mode 100644 game/overlord/jakx/dma.cpp create mode 100644 game/overlord/jakx/dma.h create mode 100644 game/overlord/jakx/dvd_driver.cpp create mode 100644 game/overlord/jakx/dvd_driver.h create mode 100644 game/overlord/jakx/init.cpp create mode 100644 game/overlord/jakx/init.h create mode 100644 game/overlord/jakx/iso.cpp create mode 100644 game/overlord/jakx/iso.h create mode 100644 game/overlord/jakx/iso_api.cpp create mode 100644 game/overlord/jakx/iso_api.h create mode 100644 game/overlord/jakx/iso_cd.cpp create mode 100644 game/overlord/jakx/iso_cd.h create mode 100644 game/overlord/jakx/iso_queue.cpp create mode 100644 game/overlord/jakx/iso_queue.h create mode 100644 game/overlord/jakx/isocommon.cpp create mode 100644 game/overlord/jakx/isocommon.h create mode 100644 game/overlord/jakx/list.cpp create mode 100644 game/overlord/jakx/list.h create mode 100644 game/overlord/jakx/overlord.cpp create mode 100644 game/overlord/jakx/overlord.h create mode 100644 game/overlord/jakx/pagemanager.cpp create mode 100644 game/overlord/jakx/pagemanager.h create mode 100644 game/overlord/jakx/ramdisk.cpp create mode 100644 game/overlord/jakx/ramdisk.h create mode 100644 game/overlord/jakx/rpc_interface.h create mode 100644 game/overlord/jakx/sbank.cpp create mode 100644 game/overlord/jakx/sbank.h create mode 100644 game/overlord/jakx/soundcommon.cpp create mode 100644 game/overlord/jakx/soundcommon.h create mode 100644 game/overlord/jakx/spustreams.cpp create mode 100644 game/overlord/jakx/spustreams.h create mode 100644 game/overlord/jakx/srpc.cpp create mode 100644 game/overlord/jakx/srpc.h create mode 100644 game/overlord/jakx/ssound.cpp create mode 100644 game/overlord/jakx/ssound.h create mode 100644 game/overlord/jakx/stream.cpp create mode 100644 game/overlord/jakx/stream.h create mode 100644 game/overlord/jakx/streamlist.cpp create mode 100644 game/overlord/jakx/streamlist.h create mode 100644 game/overlord/jakx/todo.txt create mode 100644 game/overlord/jakx/vag.cpp create mode 100644 game/overlord/jakx/vag.h create mode 100644 game/overlord/jakx/vblank_handler.cpp create mode 100644 game/overlord/jakx/vblank_handler.h create mode 100644 goal_src/jakx/build/all_objs.json create mode 100644 third-party/discord-rpc/thirdparty/rapidjson-1.1.0/doc/diagram/makefile 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;